Beiträge von German_ScripterHD

    Hallo Brotfische,


    Ich habe eine Frage bezüglich eines Teamspeak 3 Servers. Auf einer Internetseite habe ich gelesen das ein Teamspeak über 32 Slots eine Non-Profit Lizenz (regestriert) benötig.
    Angenommen ich bestelle mir einen vServer und installiere Teamspeak und dann kann ich mit der Non-Profit Lizenz bis ca. 500 Slots einstellen, richtig?


    Ich hoffe es kann mir jemand helfen ;)


    MfG :thumbup:

    [14:43:08] [debug] Run time error 4: "Array index out of bounds"

    Der Fehler heißt soviel wie: Array Index außerhalb der Grenze/Limit.
    Das bedeutet der Fehler kommt laut des Serverlogs vom public OnPlayerDeath

    [14:43:08] [debug] Accessing element at index 65535 past array upper bound 999
    [14:43:08] [debug] AMX backtrace:
    [14:43:08] [debug] #0 000253b4 in public OnPlayerDeath (0, 65535, 255) from German.amx

    Füge den folgenden Code ein, teste den Befehl und schicke danach wieder den Serverlog mit den prints.


    Ändere:

    C
    new nameX[2][MAX_PLAYER_NAME+5],stringX[128],pID;
    if(sscanf(params,"u",pID))return SendClientMessage(playerid, COLOR_GRAD2, "Benutze: /free [SpielerID/SpielerName]");


    zu:



    C
    new nameX[2][MAX_PLAYER_NAME+5],stringX[128],pID,preisX;
    if(sscanf(params,"ud",pID,preisX))return SendClientMessage(playerid, COLOR_GRAD2, "Benutze: /free [SpielerID/SpielerName][Preis]");


    Du kannst dann nach der Nachricht "* Du wurdest von Anwalt %s aus dem Knast geholt." folgendes einfügen:


    C
    format(stringX, sizeof(stringX), "* Die Befreiung kostete %d$.", preisX);
    SendClientMessage(pID, COLOR_LIGHTBLUE, stringX);
    GivePlayerMoney(pID,-preisX);

    Ich empfehle dir noch das ocmd Include, da das ein relativ guter Commandprozessor ist.


    Und dann schreibe den Code mal so:

    new pid2,pid3;
    if(sscanf(params,"uuus",pid,pid2,pid3,grund)) return SendClientMessage(playerid,GRAU,"Verwende /kick [Spieler 1] [Spieler 2] [Spieler 3] Grund");
    KickEx(pid), KickEx(pid2), KickEx(pid3);

    So hatte ich es mir auch überlegt, ist aber toaler Schwachsinn ;) , da man Beispielsweise immer 3 IDs angeben muss, aber wenn man nur einen Spieler kicken möchte geht das nicht. Deswegen ist die Möglichkeit nicht die beste, aber leider habe ich gerade auch keine Idee wie man das anders schreiben kann.

    Ist ja nichts gegen dich aber danke für deine Hilfe ist nicht böse gemeint

    Nadann ist gut ;)


    Dank meiner print's kann man jetzt erkennen das es ein Fehler beim zurückgeben der giveplayerid gibt.
    Das lässt darauf schließen, das die Funktion ReturnUser einen falschen Wert zurück gibt.


    Kleiner Tipp, es gibt funktionen mit dem das besser geht, z.B: mit dem sscanf Plugin, aber das nur am Rande :)

    Kollege halt mal den Ball flach. Es gibt für alles eine Lösung.


    Füge de Code im Spoiler in dein GameMode ein und kompaile das Script einmal neu.
    Danach Server starten Befehl eingeben und dann einmal deinen Serverlog posten.


    [spoiler='Code']

    Hmm... das ist komisch, in der server.cfg ist soweit alles richtig.
    Im Serverlog ist mir folgendes aufgefallen:


    [15:36:09] Error: Function not registered: 'SSCANF_Init'
    [15:36:09] Error: Function not registered: 'SSCANF_IsConnected'
    [15:36:09] Error: Function not registered: 'SSCANF_Join'
    [15:36:09] Error: Function not registered: 'SSCANF_Leave'
    [15:36:09] Error: Function not registered: 'sscanf'

    Das bedeutet, er findet die sscanf Funktionen nicht. Das Plugin ist wie ich gesehen habe in der .cfg enthalten, aber du kannst mal schaun ob in deinem Gamemode folgnedes enthalten ist:

    C
    #include <sscanf2>

    Wen ich /free eingebe steht da Der Angebene Spieler ist nicht Online warum?

    Die Funktion IsPlayerConnected gibt einen Wert zurück der besagt ob der Spieler online ist oder nicht.
    Ich habe dir lediglich den Code ordentlicher und Übersichtlicher geschrieben...


    Code Beispiel:
    Dein Code vorher:

    C
    if(IsPlayerConnected(giveplayeridX))
    {
         //Code
    }
    else
    {
          SendClientMessage(playerid,-1,"Der Spieler ist nicht online!");
    }


    Mein Code (übersichtlicher):

    C
    if(!IsPlayerConnected(giveplayeridX))return SendClientMessage(playerid, COLOR_GREY, "Der angegebene Spieler ist nicht online!");

    Im Endeffekt genau das gleiche, nur das meinem Code den Befehl beendet lässt wenn der Spieler nicht online ist.
    Aber um nochmal auf deine Frage zurück zukommen, "Wen ich /free eingebe steht da Der Angebene Spieler ist nicht Online warum?"
    Das beedeutet wie der Code es dir auch wieder gibt, das der Spieler nicht Online ist.
    Frage:
    Wenn du /free eintippst, was gibst du als Parameter SpielerID an? (Deine SpielerID oder eine eines anderen Spielers?)


    Edit: Rechtscheibfehler behoben

    • Neuste Version des MySQL Plugin downloaden
    • Nach dem Download die .zip Datei öffnen und das Plugin in den plugins Ordner verschieben
    • Außerdem die "a_mysql.inc" die in dem .zip Archive enthalten ist, in den pawno --> includes Ordner verschieben.
    • Jetzt nochmal das Script öffnen und nochmal neu kompailen.
    • Danach nochmals Server starten und schauen ob der Fehler immernoch auftritt.