SSCANF funktioniert nicht

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
  • Hey Leute,


    wie an dieser schon sehr kuriosen Überschrift habe ich ein wirklich schwerwiegendes Problem.
    Undzwar geht es um das allseitsbekannte Include "SSCANF".


    Ich habe eigentlich immer ohne Probleme mit SSCANF gearbeitet, bis vor ein paar Tagen...


    Nachdem ich wieder mit dem Scripten angefangen habe und losgescriptet habe,
    hatte ich soweit keine Probleme.


    Nach einigen Tagen hat auf einmal mein Server angefangen total zu "spinnen".


    Angefangen hat es, dass einige Skins nicht mehr gesetzt werden und auch gewisse Stocks nicht
    richtig ausgeführt werden.


    Anschließend hat das eingeben von Befehlen nicht mehr richtig funktioniert (einige Commands bringen den Server
    sogar zum crashen!!!).

    Meine Vermutung:


    Es muss an SSCANF liegen, da Scriptpassagen (vorallem Commands) ohne SSCANF-Geschichten einwandfrei funktionieren
    und keine Probleme bereiten.


    Meine Frage ist, ob jemand schonmal damit Erfahrung hatte, bzw. was ich nun tun kann, da ich echt hilflos bin.



    Geupdatet hatte ich, soweit ich weiß, das Ganze auch schonmal...

    Meine Werke

  • Ich habe jetzt alles geuodatet und eingefügt (den Ordner "sscanf" muss ich ja soweit ich weiß nirgendswo einfügen).


    Trotzdem funktioniert immer noch nichts :/


    Was mich wundert ist, dass dieser Befehl den Server crasht:
    ocmd:me(playerid,params[])
    {
    if(Tot[playerid] == 1) return SCM(playerid,COLOR_RED,"Du bist Tot und kannst das nicht tun!");
    new str[100],str2[128],logstr[128];
    if(sscanf(params, "s", str))return SCM(playerid, COLOR_RED,"/me [TEXT]");
    format(str2,sizeof(str2),"%s %s",SpielerName(playerid),str);
    MeMessage(playerid,str2);
    format(logstr, sizeof(logstr), "%s: %s", SpielerName(playerid), str);
    ChatLog(str);
    return 1;
    }


    Und dieser hier funktioniert trotz Nutzung von SSCANF:
    ocmd:o(playerid,params[])
    {
    if(Tot[playerid] == 1) return SCM(playerid,COLOR_RED,"Du bist Tot und kannst das nicht tun!");
    if(isPlayerAnAdmin(playerid,1))
    {
    new inputtext[128],string[128];
    if(sscanf(params,"s",inputtext))return SCM(playerid, COLOR_RED,"/o [TEXT]");
    switch(pInfo[playerid][pAdminlevel])
    {
    case 0:{format(string,sizeof(string),"(({FFFFFF}%s: {FFFFFF}%s))",SpielerName(playerid),inputtext);}
    case 1:{format(string,sizeof(string),"(({CCFF9F}[SUP] %s: {FFFFFF}%s))",SpielerName(playerid),inputtext);}
    case 2:{format(string,sizeof(string),"(({00FF80}[MOD] %s: {FFFFFF}%s))",SpielerName(playerid),inputtext);}
    case 3:{format(string,sizeof(string),"(({0080FF}[ADM] %s: {FFFFFF}%s))",SpielerName(playerid),inputtext);}
    case 4:{format(string,sizeof(string),"(({FFC400}[H-ADM] %s: {FFFFFF}%s))",SpielerName(playerid),inputtext);}
    case 5:{format(string,sizeof(string),"(({FF0000}[H²-ADM] %s: {FFFFFF}%s))",SpielerName(playerid),inputtext);}
    case 6:{format(string,sizeof(string),"(({FF0000}[OWN] %s: {FFFFFF}%s))",SpielerName(playerid),inputtext);}
    }
    SCMTA(COLOR_WHITE,string);
    return 1;
    }
    else
    {
    if(pOOC_CD[playerid] > 0)return SCM(playerid,COLOR_RED,"Du musst zwischen dem Senden zweier Nachrichten 10 Sekunden warten!");
    if(OOCBool == 0)return SCM(playerid, COLOR_RED,"Der OOC-Chat ist zurzeit deaktiviert!");
    if(GetPlayerScore(playerid) < 2)return SCM(playerid, COLOR_RED,"Du benötigst Level 2!");
    new inputtext[128],string[128];
    if(sscanf(params,"s",inputtext))return SCM(playerid, COLOR_RED,"/o [TEXT]");
    switch(pInfo[playerid][pAdminlevel])
    {
    case 0:{format(string,sizeof(string),"(({FFFFFF}%s: {FFFFFF}%s))",SpielerName(playerid),inputtext);}
    case 1:{format(string,sizeof(string),"(({CCFF9F}*%s: {FFFFFF}%s))",SpielerName(playerid),inputtext);}
    case 2:{format(string,sizeof(string),"(({00FF80}*%s: {FFFFFF}%s))",SpielerName(playerid),inputtext);}
    case 3:{format(string,sizeof(string),"(({0080FF}*%s: {FFFFFF}%s))",SpielerName(playerid),inputtext);}
    case 4:{format(string,sizeof(string),"(({FFC400}*%s: {FFFFFF}%s))",SpielerName(playerid),inputtext);}
    case 5:{format(string,sizeof(string),"(({FF0000}*%s: {FFFFFF}%s))",SpielerName(playerid),inputtext);}
    case 6:{format(string,sizeof(string),"(({FF0000}*%s: {FFFFFF}%s))",SpielerName(playerid),inputtext);}
    }
    SCMTA(COLOR_WHITE,string);
    pOOC_CD[playerid] =10;
    return 1;
    }
    }

    Meine Werke

  • Was mich wundert ist, dass dieser Befehl den Server crasht:


    Verwende das crashdetect plugin um mehrere Informationen über den Crash zu bekommen.
    http://forum.sa-mp.com/showthread.php?t=262796


    Zeige uns dann den Code, den das plugin erstellt hat (sollte sich in der server.log befinden).



    Bei dem Plugin solltest du dir auch angewöhnen, die Länge vom String immer mit anzugeben.
    if(sscanf(params, "s[100]", str))return SCM(playerid, COLOR_RED,"/me [TEXT]");
    Das sollte aber eigentlich nicht die Ursache vom Crash sein, denn im anderen Befehl war das ja auch nicht.

  • eige uns dann den Code, den das plugin erstellt hat (sollte sich in der server.log befinden).


    Folgendes wird in Massen geloggt:



    Was ist denn da los? :o

    Meine Werke

  • Du hast bestimmt eine Meldung im Compiler über mehrere Zeilen lang, oder?
    Falls ja, dann füge das einfach unter den Includes rein:
    #pragma dynamic 1000000

  • Erstelle in deinem "pawno" Ordner eine config-Datei: pawn.cfg
    In dieser Datei schreibst du das rein:

    Code
    -d3


    Öffne dein Script erneut und kompiliere. Was sagt das crashdetect Plugin jetzt?

  • Öffne dein Script erneut und kompiliere. Was sagt das crashdetect Plugin jetzt?

    Folgende Fehlermeldungen werden nun quasi gespammt:



    Das ganze wird wirklich tausendemale geloggt...

    Meine Werke

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen