Teamspeak 3 Connector

In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Moin,


    Meine frage wäre wie ich eine Funktion einbaue die Checkt ob ein Spieler Admin ist oder ob er Premium hat etc.



    public TSC_OnClientPrivateText(from_clid, from_nickname[], to_clid, msg[])
    {
    if(IsPlayerNameOnline(msg) != INVALID_PLAYER_ID)
    {
    TSC_AddClientToServerGroup(from_clid,7);
    TSC_SetClientDescription(from_clid, msg);
    }
    else
    TSC_SendClientMessage(from_clid, "Dieser Spieler ist nicht eingeloggt/online.");
    return 1;
    }


    stock IsPlayerNameOnline(l_PlayerName[]) //©Jeffry
    {
    new l_name[MAX_PLAYER_NAME];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i) && SpielerInfo[i][Eingeloggt] == 1)
    {
    GetPlayerName(i, l_name, MAX_PLAYER_NAME);
    if(!strcmp(l_name,l_PlayerName, true)) return i;
    }
    }
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i) && SpielerInfo[i][Eingeloggt] == 1)
    {
    GetPlayerName(i, l_name, MAX_PLAYER_NAME);
    if(strfind(l_name,l_PlayerName,true)!=-1) return i;
    }
    }
    return INVALID_PLAYER_ID;
    }



    Ich glaube das wichtigste wisst ihr jetzt :) Vielen dank schon mal im vor raus.

  • Moin, die Include liefert die Funktion TSC_QueryClientData() mit:


    Code
    TSC_QueryClientData(clientid, TSC_CLIENT_QUERYDATA:data, const callback[], const format[] = "", {Float, _}:...);

    TSC_CLIENT_QUERYDATA wäre dann CLIENT_SERVER_GROUPS, welche dir einen String mit den GruppenIDs per Funktion TSC_GetQueriedData() zurück gibt. Du musst dann einfach im Skript deklarieren, welche GruppenID zu welcher deiner gewünschten Gruppe gehört.

  • Moin mir ist bewusst das es falsch ist aber könnte mir das jemand erklären? ich will das wenn er die Servergruppe 7 hat das er keine nachricht mehr bekommt


    public TSC_OnClientConnect(clientid, nickname[])
    {
    TSC_QueryClientData(clientid,CLIENT_SERVER_GROUPS:7,"test");
    TSC_SendClientMessage(clientid, "Willkommen auf dem German-Reallife Teamspeak!");
    TSC_SendClientMessage(clientid, "Um dich freizuschalten schreibe mir bitte deinen Ingame-Name!");
    return 1;
    }

  • Moin mir ist bewusst das es falsch ist aber könnte mir das jemand erklären? ich will das wenn er die Servergruppe 7 hat das er keine nachricht mehr bekommt


    public TSC_OnClientConnect(clientid, nickname[]){TSC_QueryClientData(clientid,CLIENT_SERVER_GROUPS:7,"test");TSC_SendClientMessage(clientid, "Willkommen auf dem German-Reallife Teamspeak!");TSC_SendClientMessage(clientid, "Um dich freizuschalten schreibe mir bitte deinen Ingame-Name!");return 1;}

    Moin, der zweite Parameter erwartet nicht die GruppenID sondern ein Wert vom Tag TSC_CLIENT_QUERYDATA. Die 7 musst du entfernen. Der dritte und vierte Parameter sind zum einen die Bezeichnung des Callbacks und die Parameter, die du mit übergeben möchtest. Beispiel wäre:



    Code
    TSC_QueryClientData(clientid, CLIENT_SERVER_GROUPS,  "DeinCallback", "d", playerid);
    
    
    forward DeinCallback(playerid);
    public DeinCallback(playerid) {
    new data[128];
    TSC_GetQueriedData(data, 128);
    return 1;
    }

    In data befinden sich dann die GruppenIDs, welcher der client besitzt, getrennt durch Kommata. Um die reinen GruppenIDs zu bekommen, brauchst du entweder eine split-Funktion oder du nutzt sscanf2 / je nach dem was beliebt.

  • Uff ich glaube ich geh gleich erstmal schlafen und guck es mir dann an es geht gerade nicht in mein Kopf rein ^^

    Was denn genau? Also data könnte beispielsweise dann so aussehen "13,21,223,7" und um die 7 zu bekommen, musst du diese Zeichenkette aufteilen, um die rohe Zahl zu erhalten. Diese Zahl kannst du durch verschiedene Funktionalitäten bekommen: sscanf2 oder der split - Funktion. Nutzt du das sscanf2 Plugin?

  • Ich will halt das diese Nachricht [list=1][*]TSC_SendClientMessage(clientid, "Willkommen auf dem German-Reallife Teamspeak!");[*]TSC_SendClientMessage(clientid, "Um dich freizuschalten schreibe mir bitte deinen Ingame-Name!");[/list]


    nur kommt wenn man den Rang Gast hat und wenn man member ist eben nicht

  • Ich will halt das diese Nachricht [list=1][*]TSC_SendClientMessage(clientid, "Willkommen auf dem German-Reallife Teamspeak!");[*]TSC_SendClientMessage(clientid, "Um dich freizuschalten schreibe mir bitte deinen Ingame-Name!");[/list]


    nur kommt wenn man den Rang Gast hat und wenn man member ist eben nicht

    Naja, per sscanf2 kannst du die Zeichenkette ziemlich einfach teilen:


    Code
    new tsIDs[5];
    sscanf(data, "p<,>a<i>[5]", tsIDs);

    Dann sind die gruppenIDs in tsIDs, du musst lediglich noch per Schleife durchlaufen und überprüfen, ob das jeweilige Element gleich deiner gewünschten ID ist und falls ja -> keine Nachricht, falls nicht -> Nachricht.