Stringlänge bei Befehlen mit String als Parameter zu kurz

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,


    wir arbeiten derzeit an einem Script.
    Jedoch gibt es Probleme wenn man z.B Befehle mit Stringparametern macht.
    Wenn ich z.B per /o [Text] Ingame schreibe werden nur ca. 14 Zeichen zugelassen, wenns länger ist wirds einfach weggelassen.


    Die Stringlänge ist auch auf 128, so viel unterstützt ja nur die SAMP Chatbox, also weiß ich nicht wo das Problem sein könnte.




    Bitte um Hilfe!



    Danke im Voraus




    MFG

    Main: CPU: Intel Core i5-4440 @ 3,10 GHz | CPU-Cooling: Matterhorn -PURE- | RAM: 16GB Crucial Ballistix Sport DDR3-1600 DIMM CL9-9-9-24 |
    Motherboard: ASRock B85M Pro4 | GPU: Sapphire Radeon R9 390X Nitro 8GB GDDR5 |

    SSD: Samsung SSD 840 Evo 500GB | Power Supply: 550 Watt Corsair CS Series Modular 80+ Gold | Case: beQuiet! Silent Base 800


    As I walk through the valley of the shadow of death
    I take a look at my life and realize there's nothin' left.

  • Zeig am besten mal den Befehl.

    Wer ist der Mensch hinter der Uniform? Ist euch das bekannt?
    Es ist der selbe der noch eben in Zivil neben euch stand.
    Warum wird er gehasst und so selten respektiert?
    Warum ist er derjenige der seinen Hals für euch riskiert?
    Trägt der Bulle eine Weste, das hat er früher nie gemacht,
    die Zeiten haben sich geändert und jeder Dienst ist ein Kampf!
    Warum gibt’s das SEK und warum sind sie so brutal?
    Und wieso hat wieder einer mit seinem Leben bezahlt?

  • OK hier z.B der O-Befehl.
    Ist nichts außergewöhnliches , die String Länge stimmt ja.



    ocmd:o(playerid,params[])
    {
    new msg[128];
    if(sscanf(params,"s",msg))return SendClientMessage(playerid,ROT,"Benutzung: /o(oc) [Nachricht]");
    if(ochat == true) {
    format(msg,sizeof msg,"(( %s: %s ))",SpielerName(playerid),msg);
    SendClientMessageToAll(WEISS,msg);
    }
    else {
    if(IstSpielerAdmin(playerid,1)) {
    format(msg,sizeof msg,"(( %s: %s ))",SpielerName(playerid),msg);
    SendClientMessageToAll(WEISS,msg);
    }
    else {
    SendClientMessage(playerid,ROT,"Der O-Chat ist derzeit geschlossen. Nur Leute aus dem Adminteam können ihn benutzen.");
    }
    }
    return true;
    }

    Main: CPU: Intel Core i5-4440 @ 3,10 GHz | CPU-Cooling: Matterhorn -PURE- | RAM: 16GB Crucial Ballistix Sport DDR3-1600 DIMM CL9-9-9-24 |
    Motherboard: ASRock B85M Pro4 | GPU: Sapphire Radeon R9 390X Nitro 8GB GDDR5 |

    SSD: Samsung SSD 840 Evo 500GB | Power Supply: 550 Watt Corsair CS Series Modular 80+ Gold | Case: beQuiet! Silent Base 800


    As I walk through the valley of the shadow of death
    I take a look at my life and realize there's nothin' left.


  • Genau, warum 19 Zeilen wenn man auch 65 haben kann

    Wer ist der Mensch hinter der Uniform? Ist euch das bekannt?
    Es ist der selbe der noch eben in Zivil neben euch stand.
    Warum wird er gehasst und so selten respektiert?
    Warum ist er derjenige der seinen Hals für euch riskiert?
    Trägt der Bulle eine Weste, das hat er früher nie gemacht,
    die Zeiten haben sich geändert und jeder Dienst ist ein Kampf!
    Warum gibt’s das SEK und warum sind sie so brutal?
    Und wieso hat wieder einer mit seinem Leben bezahlt?

  • @Antony_Morvai, hast du ein an der Waffel ?
    Aus dem GF Kopiert und es ist nicht mal leichter.
    Keine Ahnung aber mitreden wollen...



    Versuch es so:


    ocmd:o(playerid,params[])
    {
    new msg;
    if(sscanf(params,"s[128]",msg))return SendClientMessage(playerid,ROT,"Benutzung: /o(oc) [Nachricht]");
    if(ochat == true) {
    format(msg,sizeof msg,"(( %s: %s ))",SpielerName(playerid),msg);
    SendClientMessageToAll(WEISS,msg);
    }
    else {
    if(IstSpielerAdmin(playerid,1)) {
    format(msg,sizeof msg,"(( %s: %s ))",SpielerName(playerid),msg);
    SendClientMessageToAll(WEISS,msg);
    }
    else {
    SendClientMessage(playerid,ROT,"Der O-Chat ist derzeit geschlossen. Nur Leute aus dem Adminteam können ihn benutzen.");
    }
    }
    return true;
    }


  • //Edit:
    Wie es aussieht liegt es an sscanf.
    Hier bekommen wir ein Warning in der Server Konsole:
    [09/08/2012 18:28:05] sscanf error: System not initialised.
    Und ja: Plugins eingetragen und .inc drinne ;)

    Main: CPU: Intel Core i5-4440 @ 3,10 GHz | CPU-Cooling: Matterhorn -PURE- | RAM: 16GB Crucial Ballistix Sport DDR3-1600 DIMM CL9-9-9-24 |
    Motherboard: ASRock B85M Pro4 | GPU: Sapphire Radeon R9 390X Nitro 8GB GDDR5 |

    SSD: Samsung SSD 840 Evo 500GB | Power Supply: 550 Watt Corsair CS Series Modular 80+ Gold | Case: beQuiet! Silent Base 800


    As I walk through the valley of the shadow of death
    I take a look at my life and realize there's nothin' left.

  • benutze einfach den sscanf stock und nicht plugin ;d
    den stock findest du auf samp wiki


    Wieso sollte ich ?
    Immerhin ist sscanf2 stabiler.


    MFG

    Main: CPU: Intel Core i5-4440 @ 3,10 GHz | CPU-Cooling: Matterhorn -PURE- | RAM: 16GB Crucial Ballistix Sport DDR3-1600 DIMM CL9-9-9-24 |
    Motherboard: ASRock B85M Pro4 | GPU: Sapphire Radeon R9 390X Nitro 8GB GDDR5 |

    SSD: Samsung SSD 840 Evo 500GB | Power Supply: 550 Watt Corsair CS Series Modular 80+ Gold | Case: beQuiet! Silent Base 800


    As I walk through the valley of the shadow of death
    I take a look at my life and realize there's nothin' left.

  • damit du keine probleme hast?...


    Ich bin ja hier um das Problem zu lösen
    und nicht um es zu umgehen ;)
    Außerdem denke ich, dass sscanf2 genauso gehen würde.


    MFG

    Main: CPU: Intel Core i5-4440 @ 3,10 GHz | CPU-Cooling: Matterhorn -PURE- | RAM: 16GB Crucial Ballistix Sport DDR3-1600 DIMM CL9-9-9-24 |
    Motherboard: ASRock B85M Pro4 | GPU: Sapphire Radeon R9 390X Nitro 8GB GDDR5 |

    SSD: Samsung SSD 840 Evo 500GB | Power Supply: 550 Watt Corsair CS Series Modular 80+ Gold | Case: beQuiet! Silent Base 800


    As I walk through the valley of the shadow of death
    I take a look at my life and realize there's nothin' left.

  • Das wäre jetzt schnell aus dem Kopf


    if(!strcmp(cmdtext, "/ooc", true,4)){
    if(!strlen(cmdtext[4])) SendClientMessage(playerid, 0xffffffff, "Benutzung: /ooc [text]");
    else {
    new tmp[192];
    GetPlayerName(playerid,tmp,24);
    format(tmp,192,"((OOC - %s: %s))",tmp,cmdtext[5]);
    SendClientMessageToAll(0xFFFFFFAA,tmp);
    print(tmp);
    }
    return 1;
    }


    Kann ich dir damit irgendwie helfen? :P

  • Stimmt, lol.


    Du würdest ja auch nicht den 100€ Schein nehmen, wenn du einen 200-er kriegen könntest, obwohl er dreckig ist. Diesen würdest du lieber reinigen lassen.


    Könnte es ggf. auch am SpielerName liegen? Wie sieht die Funktion da aus? Nicht dass da irgendwo ein \n \0 oder so ist :p
    Ansonsten einfach sscanf neu runterladen (inkl. include), in include ordner von pawn reinhauen und neu compilen.


    ps: bei mir geht sscanf2 natürlich... @msk


  • Danke für die Nachfrage.
    Aber: Das Problem wurde mittlerweile gelöst.


    einfach [LAENGE] hinzugefügt.


    //close

    Main: CPU: Intel Core i5-4440 @ 3,10 GHz | CPU-Cooling: Matterhorn -PURE- | RAM: 16GB Crucial Ballistix Sport DDR3-1600 DIMM CL9-9-9-24 |
    Motherboard: ASRock B85M Pro4 | GPU: Sapphire Radeon R9 390X Nitro 8GB GDDR5 |

    SSD: Samsung SSD 840 Evo 500GB | Power Supply: 550 Watt Corsair CS Series Modular 80+ Gold | Case: beQuiet! Silent Base 800


    As I walk through the valley of the shadow of death
    I take a look at my life and realize there's nothin' left.

  • ocmd:o(playerid,params[])
    {
    new spielertext[128],string[128];
    if(sscanf(params,"s",spielertext)) { return SendClientMessage(playerid,COLOR_RED,"Benutzung: /o(oc) [Nachricht]"); }
    if(ochat == true)
    {
    format(string,sizeof(string),"(( %s: %s ))",SpielerName(playerid),spielertext);
    SendClientMessageToAll(WEISS,string);
    }
    else {


    if(IstSpielerAdmin(playerid,1)) return SendClientMessage(playerid,ROT,"Der O-Chat ist derzeit geschlossen. Nur Leute aus dem Adminteam können ihn benutzen.");//Admin-Afrage anpasssen sodass er abfragt ob er kein Admin ist
    format(msg,sizeof msg,"(( %s: %s ))",SpielerName(playerid),msg);
    SendClientMessageToAll(WEISS,msg);
    }



    return 1;
    }


    Mit freundlichen Grüßen
    Sven


    //Edit Code


    Bewerte mich und meine Transaktionen als Mittelsmann


  • Und das gibt bei dir keine Fehlermeldung..?
    if(sscanf(params,"s",spielertext)) { return SendClientMessage(playerid,COLOR_RED,"Benutzung: /o(oc) [Nachricht]"); }
    zu
    if(sscanf(params,"s[128]",spielertext)) { return SendClientMessage(playerid,COLOR_RED,"Benutzung: /o(oc) [Nachricht]"); }
    nebenbei, du brauchst nur eine von beiden stringvariablen zu erstellen und kannst jene für beides benutzen.

  • Möchte mich nicht rechtfertigen war aber jez nach ner langen Pause wieder mal dran Urlaub und sowas.
    ALso hier:
    ocmd:o(playerid,params[])
    {
    new spielertext[128],string[128];
    if(sscanf(params,"s",spielertext)) return SendClientMessage(playerid,COLOR_RED,"Benutzung: /o(oc) [Nachricht]");
    if(ochat == true)
    {
    format(string,sizeof(string),"(( %s: %s ))",SpielerName(playerid),spielertext);
    SendClientMessageToAll(WEISS,string);
    }
    else {


    if(IstSpielerAdmin(playerid,1)) return SendClientMessage(playerid,ROT,"Der O-Chat ist derzeit geschlossen. Nur Leute aus dem Adminteam können ihn benutzen.");//Admin-Afrage anpasssen sodass er abfragt ob er kein Admin ist
    format(msg,sizeof msg,"(( %s: %s ))",SpielerName(playerid),msg);
    SendClientMessageToAll(WEISS,msg);
    }



    return 1;
    }
    Das sollte jetzt richtig sein.
    Ich habs nicht compiled sondern nur auf die schnelle geschrieben.
    Ich denke mit meinem Codeschnipsel sollte es funktionieren.
    Zum eig. problem. Muss man bei sscanf 2 das so machen? Also
    "if(sscanf(params,"s[128]",spielertext))"Also das mit den [128]
    Musste es nie machen bzw. habs nie probiert. Also mach das weg dann sollte es auch gehn.


    Mit freundlichen Grüßen
    Sven


    Bewerte mich und meine Transaktionen als Mittelsmann