Hilfe bei Serverproblem | Crash nach Command | Dringende Hilfe |

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,


    ich brauche dringende Hilfe bei einem Serverproblem, da es meinen kompletten Gamemode sehr stark beeinträchtigt.


    Ich habe in meine Script eine "Funktion" eingebaut die es ermöglicht "ClientMessage's" an Spieler mit einem String zu senden, so dass man nich permanent
    dieses "fortmat(...." machen muss.


    Das ganze sieht so aus:


    stock SCMF(playerid, color, fstring[], {Float, _}:...)
    {
    static const STATIC_ARGS = 3;
    new n = (numargs() - STATIC_ARGS) * BYTES_PER_CELL;
    if(n)
    {
    new message[144],arg_start,arg_end;
    #emit CONST.alt fstring
    #emit LCTRL 5
    #emit ADD
    #emit STOR.S.pri arg_start


    #emit LOAD.S.alt n
    #emit ADD
    #emit STOR.S.pri arg_end
    do
    {
    #emit LOAD.I
    #emit PUSH.pri
    arg_end -= BYTES_PER_CELL;
    #emit LOAD.S.pri arg_end
    }
    while(arg_end > arg_start);


    #emit PUSH.S fstring
    #emit PUSH.C 144
    #emit PUSH.ADR message


    n += BYTES_PER_CELL * 3;
    #emit PUSH.S n
    #emit SYSREQ.C format


    n += BYTES_PER_CELL;
    #emit LCTRL 4
    #emit LOAD.S.alt n
    #emit ADD
    #emit SCTRL 4


    if(playerid == INVALID_PLAYER_ID)
    {
    #pragma unused playerid
    return SendClientMessageToAll(color, message);
    } else {
    return SCM(playerid, color, message);
    }
    } else {
    if(playerid == INVALID_PLAYER_ID)
    {
    #pragma unused playerid
    return SendClientMessageToAll(color, fstring);
    } else {
    return SCM(playerid, color, fstring);
    }
    }
    }

    Nun habe ich diese "Funktion" auch sehr oft in meinem Gamemode eingebaut und alles lief auch ohne Probleme.
    Irgendwann jedoch habe ich sehr viel an meinem Gamemode gebastelt, so dass ich dann irgendwann das Problem hatte, dass
    wenn ich gewisse Commands eingebe (Beispiel unten: ocmd:setlevel) der ganze Server crasht und folgende Sachen in der Log ausspuckt:


    Server Log:


    Code
    [00:15:02] [debug] Server crashed while executing inventar.amx
    [00:15:02] [debug] AMX backtrace:
    [00:15:02] [debug] #0 native format () [080da300] from samp9915_6
    [00:15:02] [debug] #1 0000a7b8 in SCMF (playerid=0, color=-65366, fstring[]=@0x00c725b4 "%s hat dir Level %s gegeben", ... <2 variable arguments>) at D:\Domi\Spiele\GTA San Andreas\Selfmade\gamemodes\inventar.pwn:138
    [00:15:02] [debug] #2 00101b90 in public ocmd_setlevel (playerid=0, params[]=@0x00caf580 "0 10") at D:\Domi\Spiele\GTA San Andreas\Selfmade\gamemodes\inventar.pwn:19421
    [00:15:02] [debug] #3 native CallLocalFunction () [080dce40] from samp9915_6
    [00:15:02] [debug] #4 00000b0c in public OnPlayerCommandText (playerid=0, cmdtext[]=@0x00caf544 "_setlevel 0 10") at D:\Domi\Spiele\GTA San Andreas\Selfmade\pawno\include\ocmd.inc:33



    Beim Script compilen kommen zwar keine Fehler oder Warnings, jedoch aber diese Meldung:


    Header size: 13924 bytes
    Code size: 1613964 bytes
    Data size: 13301060 bytes
    Stack/heap size: 16384 bytes; estimated max. usage: unknown, due to recursion
    Total requirements:14945332 bytes



    Der Beispielcommand sieht folgendermaßen aus:


    ocmd:setlevel(playerid,params[])
    {
    if(isPlayerAnAdmin(playerid,5))
    {
    new pID;
    new string[200];
    new sender[32];
    new player[32];
    new level;
    GetPlayerName(playerid,sender,sizeof(sender));
    GetPlayerName(pID,player,sizeof(player));
    if(sscanf(params,"ui",pID,level))return SCM(playerid, COLOR_FADE3,"/setlevel [Name/ID] [Level]");
    if(level<1||level>30)return SCM(playerid, COLOR_FADE3,"Du musst zwischen Level 1 und 30 geben!");
    if(pID != INVALID_PLAYER_ID)
    {
    SetPlayerScore(pID,level);
    SCMF(playerid,COLOR_YELLOW,"%s hat dir Level %s gegeben",sender,level);
    format(string, sizeof(string),"[AdmMsg] %s hat %s Level %s gegeben.", sender, player,level);
    ABroadCast(ROT,string,1);
    return 1;


    }
    SCM(playerid,ROT,"Der Spieler ist ungültig!");
    return 1;
    }
    SCM(playerid,ROT,"Dir fehlen die benötigten Rechte!");
    return 1;
    }



    Ich bitte jeden der das Problem versteht mir zu helfen, da ich einfach nicht mehr weiter weiß!
    Mein Server crasht nach fast jedem Command und das macht mich jetzt mittlerweile schon beinah depressiv :S



    Vielen Dank für eure Hilfe! :love:

  • Ich sag mal so, normaler weise unterstütze ich keine Faulen, aber Heute mach ich mal eine Ausnahme



    Probier es mal aus, da falls du bei Float nichts drin hat es Trotzdem gehen sollte.
    Ausserdem, weiß ich nicht ganz über "{Float, _}:..." bescheid, da ich es bis Jetzt noch nie Verwendet hab, jedoch hier in dem Beitrag es auch so ist http://forum.sa-mp.com/showthread.php?t=251279

    Mit Freundlichen Grüßen
    Whitetiiger aka. Kaito-sensei
    P.s. Alle mit #IRONIE bestätigten Sätze von mir, sind als Ironie anzusehen.

  • Oben unter die Includes musst du noch folgendes schreiben:
    #pragma dynamic 10000
    Wenn die Meldung im Compilerfenster nicht verschwindet, dann erhöhe die Zahl (10000).