Server crasht bei längeren Texten im Fraktions-Chat (/f)

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,


    ich habe seit heute "regelmäßige" Server-Crashes. Nun habe ich mir "Crashdetect" draufgepackt und dieser zeigt an, dass es einen Fehler im /f Chat gibt.


    Nun ja, wenn ich z.B. /f Hey! eingebe, passiert nichts. Anders ist es aber bei /f Dies ist ein langer Text um zu testen, ob der Server crasht. 1231234567 - dann crasht er! Hier mein Code:



    ocmd:f(playerid,params[])
    {
    new mstring[64],name[MAX_PLAYER_NAME];
    if(sscanf(params,"s",mstring))return SendClientMessage(playerid, 0xFFA300FF, "Benutzung: /f <Text>");
    if(PlayerInfo[playerid][pMuted] == 1)return SendClientMessage(playerid,COLOR_RED,"Du bist gemutet, daher kannst du nichts schreiben!");
    if(PlayerInfo[playerid][pFraktion] == 0)return SendClientMessage(playerid,COLOR_RED,"Du bist in keiner Fraktion!");
    if(PlayerInfo[playerid][pFraktion] == 1 || PlayerInfo[playerid][pFraktion] == 2 || PlayerInfo[playerid][pFraktion] == 3 || PlayerInfo[playerid][pFraktion] == 4 || PlayerInfo[playerid][pFraktion] == 5)return SendClientMessage(playerid,COLOR_RED,"Benutze /d oder /r!");
    GetPlayerName(playerid,name,sizeof(name));
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(PlayerInfo[i][pFraktion] == PlayerInfo[playerid][pFraktion]) {
    switch(PlayerInfo[playerid][pfRank])
    {
    case 1:
    {
    new str[256];
    format(str,sizeof(str),"** (( Praktikant %s: %s. )) **",name,mstring);
    SendClientMessage(i,0x2DE6D0FF,str);
    }
    case 2:
    {
    new str[256];
    format(str,sizeof(str),"** (( Mitglied %s: %s. )) **",name,mstring);
    SendClientMessage(i,0x2DE6D0FF,str);
    }
    case 3:
    {
    new str[256];
    format(str,sizeof(str),"** (( Stellv. Boss %s: %s. )) **",name,mstring);
    SendClientMessage(i,0x2DE6D0FF,str);
    }
    case 4:
    {
    new str[256];
    format(str,sizeof(str),"** (( Boss %s: %s. )) **",name,mstring);
    SendClientMessage(i,0x2DE6D0FF,str);
    }
    }
    }
    }
    return 1;
    }


    Im /o, welcher fast genau so gescriptet ist, passiert dies nicht mit /o Dies ist ein [...]


    Könnt ihr mir helfen? :/


    Mit freundlichen Grüßen
    Gredsoft

  • Kannst du mal das gesamte Crashlog posten?


    Und welche Version von SSCANF benutzt du?

    Hallo BloodyEric
    Ich lasse mal kurz den Server per /f crashen, dann editiere ich es hier rein und spreche dich an.


    Ich benutze den SSCanf Stock vom offiziellen SA:MP Wiki (http://wiki.sa-mp.com/wiki/Sscanf_code)


    EDIT BloodyEric



    (Das Problem mit dem "OnPlayerDeath" habe ich schon länger / Löst keine Crashes aus. Nach dem "(( Henry: kkkkkkkkk [...] ))" habe ich /f Langer Text Langer Text Langer Text Langer Text Langer Text Langer Text eingegeben...)

  • Benutz doch mal das SSCANF Plugin, würde ich immer empfehlen. Link im englischen Forum in der Pluginsektion.


    Compilest du dein Script mit Debuginformationen? Nein, oder?

    Ich habe gehört, dass Sscanf Plugin sei verbuggt? Naja, ich prober's gleich mal.


    Nein, ich compile es nicht mit Debuginformationen. Soll ich dies mal ausprobieren?

  • Dumme Frage, wie soll ich die Debug Informationen aktivieren? Meinst du sowas wie printf("Command /f aufgerufen"); printf("String formatiert"); [...]?


    BloodyEric

  • Ich würde mal sagen, du machst das ganze etwas weniger Serverlastig.
    Du formatierst einen String mega oft, obwohl einmal reicht... Der Rang ist immer gleich, trotzdem rufst du es für jeden Spieler, an den die Nachricht gesendet werden soll erneut.

  • Ich würde mal sagen, du machst das ganze etwas weniger Serverlastig.
    Du formatierst einen String mega oft, obwohl einmal reicht... Der Rang ist immer gleich, trotzdem rufst du es für jeden Spieler, an den die Nachricht gesendet werden soll erneut.

    Meinst du, dass die Crashes etwa dadurch entstehen? Wobei, die IF Abfragen werden doch nicht durchgeführt, wenn es nicht zutrifft, oder wie? :/

  • Ersetz mal deins


    new mstring[64],name[MAX_PLAYER_NAME];
    if(sscanf(params,"s",mstring))return SendClientMessage(playerid, 0xFFA300FF, "Benutzung: /f <Text>");


    mit


    new mstring[110], name[MAX_PLAYER_NAME];
    if(sscanf(params,"s[110]",mstring))return SendClientMessage(playerid, 0xFFA300FF, "Benutzung: /f <Text>");

  • TehEbil Ich habe den String bereits auf 256 erhöht (ja, ich weiß, sehr groß), doch dann crasht es ebenfalls. Mein /o Chat ist auch so geschrieben (mstring[64],params,"s",mstring [...]) und dort crasht es beim gleichen Text nicht.


    Ich werde später mal das Script mit den Debuginformationen kompil(l?)ieren, und ich werde nochmal alles mit printf durchgehen...