Zum Inhalt springen

LCD Teamspeak Overlay


Thravvn
 Teilen

Empfohlene Beiträge

TS Overlay ist praktisch, jedoch vertrauen nicht alle dem Programm, nach Subjektiver Einschätzung erhöht es die Crashgefahr bei manchen Online Spielen

Seit neusten gibts ein schickes Mod für das G15 Keyboard, es liest TS/Ventrilodaten aus und gibt diese auf das Display aus.

Ich habe aber kein G15^^. Und das Display wird auch nicht gerade am Monitor/TFT angebracht sein.

Die Idee:

Ein zusätzliches LCD Display an den Monitor anbringen, das durch USB oder anderer Schnittstelle an PC angeschlossen ist.

Teamspeak wird durch ein Programm "ausgelesen" und die Daten auf das LCD angezeigt.

Die größte Hürde ist für mich das saubere "Auslesen" der TS Daten. In unserem Fall wäre der aktive Sprecher interessant: bei informativen Funkspruch wie: "Bei mir(<<?!?!) sind gerade 20 Feinde durchgebrochen; HILFE!!!11§$% x_X" .

Auslesbar ist es, aber wie?

Werten die irgendwie die ein- und ankommenden Datenpackete von Ts aus? Hat wer einen Plan davon? (reine vermutung das diese Daten so ermittelt werden)

Vorhandenen Daten auf eine PC Schnittstelle schreiben und auf einen Std. Display ausgeben ist dann nur noch reine formsache.

Wer Anregungen hat, vielleicht Quellen(code) zum Auslesen der TS Packete oder sonstiges Fachwissen beisteuern kann, ist gern eingeladen bei diesem Projekt mitzusarbeiten^^.

Ich halt euch über den Stand der Dinge auf den laufenden

Link zu diesem Kommentar
Auf anderen Seiten teilen

UPDATE

ich hab da nochwas in .Net

Ich brauchn server port und ein query port dann geht das :P

www.progam0r.de/ts.zip

isn .Net Projekt und funktioniert soweit.

Is bissi älter, den source hab ich damals irgendwo geklaut und bissel umgebaut.

Ich hab aber gar kein plan von Socket Programmierung, daher hab ich kein plan wie du das PW an den server übergibst.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich werde mal versuchen die Leute anzuschreiben.

Ich weis das TSO schonmal kein OpenSource ist, und bei den anderen Leuten weis ich es nicht.

Es gibt gleich zwei G15 Mods, diese kann man im Mod Forum von www.goteamspeak.com leicht finden.

Mit .Net habe ich keine Erfahrung, aber nach dem Disclaimer her, übernimmt das die Kommunikation mit dem Server. Was wir brauchen ist glaube ich nur Client Seitig. Wir müssen über den Client oder dessen Packete irgendwie rausfinden wer gerade spricht. Im TS Third Party Resources Area Forum gabs noch einige interessante Threads mal schauen was ich da finde.

Oder habe ich da jetzt was total nicht verstanden Nudel:D?

Und das Programm wird dann wohl C Quellecode haben.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Gast GrafVonGreif

lol Thravvn weiste warum die G15 so teuer ist? weil da nen LCD Monitor mit dranne ist ;)

LCD Monitore kosten ja mal richtig Geld... zudem denk ich gibt es das Tool was du suchst schon... evtl kann man sogar das Plugin für die G15 dafür auseinander nehmen ;)

mein Vorschlag wäre:

mach den leuten Klar das sie in der 3ten person von sich reden sollen!

oder kauf dir ne G15 :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

@greif,

Also bei einem Charakter Display ist man so ab 5-10 Euro bis 20€ dabei. Bei den Grafikfähigen fängt es glaub ab 20 an.

Vorteile:

-das Display ist nicht an der Tastatur

-billiger (naja relativ, Der aufwand das zum laufen zu bringen dürfte mindestens ein G15 Wert sein:D)

Und Leute in Panik schreiben immer "HELT MIR!!" :D so ist das halt bei MMOGames

Link zu diesem Kommentar
Auf anderen Seiten teilen

Es geht ja eigentlich nur darum nen Namen/Nick anzuzeigen und keinen zweiten Monitor neben dem TFT zu haben^^

BATRON

BTHQ128064AVD-COG-SRE

Farnell InOne LCD MODULE, GRAPHIC 128X64; Anzeigetechnologie:LCD; Breite, Anzeigen-:50.6mm; Breite, Zeichen-:64mm; Breite/Weite:54.6mm; Farbe, Hindergrund:Yellow/Green; Farbe, Schrift:Black; Höhe, Anzeigenfläche:31mm; Länge/Höhe, Auße

Ja JA Sofort lieferbar

18,97 € 1

@Nudel, habe bissel im Ts Forum rumgelesen. Momentan nicht so viel Zeit gehabt. Aber es muss ne SDK geben für den Client im TS2 verzeichnis. TSremote.dll damit scheint man irgendwie fuktionen für bestimmte sachen zu haben. Ich such mir mal die Manual raus. Da gibts bestimmt nen einfachen get.befehl oder sowas:D

Im moment habe ichd a noch nicht den 100% durchblick aber das kommt noch^^

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich glaube nicht, dass der TS-Traffic mitgesnifft werden muss. (Ist auch ein richtiger Aufwand, welcher Kenntnisse über das Protokoll erfordert)

Mal ein paar Tips am Rande:

  • Im TS-Ordner befindet ein Ordner namens client_sdk. Dort findest du die in einen Pascal-Quelltext, welcher die API von TSRemote.dll beschreibt. Die DLL kannst du sinnigerweise auch von C ansteuern. Ggf. hast du mit einigem Gefrickel wie Strings zu tun und musst dich mit Sinnigkeiten wie w_str etc. zu plagen(ich flippe immer fast aus, wenn man die russischsten Stringformate in C formatieren muss).
  • Lass die Finger von VMs wie Java oder .NET. Als Zocker braucht man jedes Byte freien Speicher und native Calls sind aus solchen VMs auch sehr teuer(=langsam). Spätestens beim Char-Display wirst du Handstände machen müssen, um die Zeichen darauf anzeigen zu können. Nimm lieber C. Das geht am leichtesten und es kommt ein schlankes(speicher- und ressourcenschonendes) Programm raus.
  • Schau dir auch die Bastelei mit dem externen Display an. Wenn dir die Remote-Ansteuerung von TS schon zu schaffen macht wirds da sicherlich nicht leichter. Wenn es da keinen sinnigen Treiber gibt musst du dir selber einen schreiben, was bei Hardware immer lustig ist.

Gruss

Alfredus

Link zu diesem Kommentar
Auf anderen Seiten teilen

@alf danke für deine Zusammenfassung,

das steht qasuie in den nächsten Posts^^, bis jetzt habe ich LCDs nur per DSP; Microcontroller angesprochen. Sollte aber ja auch irgendwie per PC gelingen.

Falls ich nicht weiter komm, werde ich hier quellen posten. Gut zu wissen das ich schonmal zwei Programmierer hier im Thread habe*evilgrins*

Link zu diesem Kommentar
Auf anderen Seiten teilen

So ich habe da mal was hingerotzt, um die API zu testen. Irgendwas stimmt aber mit den Structs nicht. Ich denk mal da ist irgendwas mit den Strings faul(Encoding) oder die russischen Unions von den Pascal-Records passen da nicht. Ich bin aber zu faul zum Fehlersuchen und habe nur mal ein Kickoff gemacht.

Gruss

Alfredus

Output:

1847450ed6ced7e2b.png

Main.cpp


#include <cstdlib>
#include <iostream>
#include <windows.h>
#include <stdio.h>
#include "main.hpp"


using namespace std;



int main(int argc, char *argv[])
{
loadTSRDLL();
initTSRFunctions();


int usrBufferSize = 100;
PlayerInfo* usnfoUser = new PlayerInfo;
UserInfo* userInfo = new UserInfo;
ChannelInfo* chnlInfo = new ChannelInfo;
PlayerInfo usnfoUsers[usrBufferSize];

for(int i= 0;i<usrBufferSize;i++)
{
usnfoUsers[i].nChannelID =5;
}


TsrGetUserInfo(userInfo);

printf("Nickname: %s\n", userInfo->playerInfo.szNickName);
printf("Channel: %s\n",userInfo->channelInfo.szName);
printf("Parent Channel: %s\n",userInfo->parentChannelInfo.szName);
printf("Player ID: %i\n", userInfo->playerInfo.nPlayerID);
printf("Channel ID: %i\n", userInfo->playerInfo.nChannelID);
printf("Player Privileges: %i\n", userInfo->playerInfo.nPlayerChannelPrivileges);
printf("Player Flags: %i\n", userInfo->playerInfo.nPlayerFlags);

system("PAUSE");


delete usnfoUser, usnfoUsers, usnfoUsers;

unloadTSRDLL();

return EXIT_SUCCESS;
}


int loadTSRDLL()
{
hGetProcIDDLL = LoadLibrary("TSRemote.dll");
return 0;
}

int unloadTSRDLL()
{
FreeLibrary(hGetProcIDDLL);
return 0;
}

int initTSRFunctions()
{
FARPROC lpfnGetProcessID = GetProcAddress(HMODULE(hGetProcIDDLL), "tsrGetUserInfo");
TsrGetUserInfo = pfTsrGetUserInfo(lpfnGetProcessID);

lpfnGetProcessID = GetProcAddress(HMODULE(hGetProcIDDLL), "tsrGetChannelInfoByID");
GetChannelInfoByID = pfGetChannelInfoByID(lpfnGetProcessID);
}

main.hpp


struct PlayerInfo
{
int nPlayerID;
int nChannelID;
char szNickName[30];
int nPlayerChannelPrivileges;
int nPlayerPrivileges;
int nPlayerFlags;
};

struct ChannelInfo
{
int nChannelID;
int nChannelParentID;
int nPlayerCountInChannel;
int nChannelFlags;
int nCodec;
char szName[30];
};

struct UserInfo
{
PlayerInfo playerInfo;
ChannelInfo channelInfo;
ChannelInfo parentChannelInfo;
};


HINSTANCE hGetProcIDDLL;

typedef int (__stdcall * pfTsrGetUserInfo)(UserInfo* );
pfTsrGetUserInfo TsrGetUserInfo;

typedef int (__stdcall * pfGetChannelInfoByID)(int nChannelID, ChannelInfo*, PlayerInfo[], int *);
pfGetChannelInfoByID GetChannelInfoByID;


/*
Lädt die DLL und bereitet Handle vor
*/
int loadTSRDLL();

/*
Entlädt die DLL und löscht Handle
*/
int unloadTSRDLL();

/*
Initialisiert die Funktionen
*/
int initTSRFunctions();

Link zu diesem Kommentar
Auf anderen Seiten teilen

Sehr schick, es kann auch sein das die dll noch die Alte ist. Im Teamspeak Forum gibts auch ne neue, die nen Speicherleak Bugfix hat.

Neue DLL:

http://forum.goteamspeak.com/showthread.php?t=15789

Ich schau mir jetzt mal die Doku an, auf arbeit ging das ohne TS schlecht;D

Ahhh;)

writeln('GET_SPEAKERS Returns a list of all the current speakers');

'GET_SPEAKERS' then DoGetSpeakers else

Yeah so schwer ist das also alles nicht^^

EDIT:

Aber die DLL einbindung unter C hätt ich aber nicht so schnell hinbekommen^^

Link zu diesem Kommentar
Auf anderen Seiten teilen

Yeah so schwer ist das also alles nicht^^
Na von wegen...:-?

Hier habe ich eine Demo abgelegt.

http://andre.teubner.googlepages.com/TSBeispiel.zip

Das Ding funktioniert recht flott und erkennt die Sprecher aus dem Channel. Aus dem Quellcode kannst du dir das passende raussuchen...Ich habe das ganze mit dem gcc 3 kompiliert. Wenn du einen anderen Kompiler nimmst, dann musst du ggf. die pragmas push/pop im Header anpassen. Ansonsten kann es sein, dass es dir um die Ohren fliegt. Versuch macht klug.

Stell mal nen Foto von dem Teil ins Forum. Mal sehen wie es das aussieht wenns fertig ist.

Gruss

Alfredus

Link zu diesem Kommentar
Auf anderen Seiten teilen

Schaut echt schick aus^^,

http://gcc.gnu.org/releases.html << dieser GCC 3.4.6 March 06, 2006?;EDIT:

Frage hat sich erledigt, da ich eh ne Entwicklungsumgebung zum GCC gesucht habe, bin ich auf Dev CPP gekommten, damit programmierst du ja auch.

Wo hast du die Infos her welches Bit, welche Aussage trifft?

Habe mir gestern das SDK Verzeichnis angesehen, aber außer Beispiel und kleiner ReadMe nix gefunden oder bin ich einfach nur Blind:D?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wo hast du die Infos her welches Bit, welche Aussage trifft?

Habe mir gestern das SDK Verzeichnis angesehen, aber außer Beispiel und kleiner ReadMe nix gefunden oder bin ich einfach nur Blind:D?

Jo blind.... O:)

//PlayerChannelPrivileges

pcpAdmin = 1 shl 0;

pcpOperator = 1 shl 1;

pcpAutoOperator = 1 shl 2;

pcpVoiced = 1 shl 3;

pcpAutoVoice = 1 shl 4;

Da stehts... der Operator shl rollt die Bits um n Stellen nach links. 1 shl 4 ergibt somit acht...Die mitgelieferte Pascal API ist aber eh Grütze, da zum Beispiel GetSpeakers nicht beschrieben ist.

Dev-C++ kannst du nehmen. Das ist genauso grindig wie VS 6.0, aber für kurze Sachen gehts. Alternativ würde Emacs mit dem MS-Kompiler gehen, wobei man das nur für COM/Automations unbedingt braucht.

Gruss

Alfredus

Link zu diesem Kommentar
Auf anderen Seiten teilen

Deine Meinung

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Benutzerkonto hast, melde Dich bitte an, um mit Deinem Konto zu schreiben.

Guest
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

  • Vorschau
 Teilen

×
×
  • Neu erstellen...

Wichtige Information

Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen zu Cookies erhalten Sie in unserer Datenschutzerklärung.