SSCANF Problem

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
  • Guten Abend, liebe Brotfischer.


    Habe ein Problem mit SSCANF ;)


    Hier mal einer meiner Befehle:



    cmd(pmoney,playerid,params[])
    {
    new player,betrag;
    if(!sscanf(params,"ui",player,betrag))
    {
    if(IsPlayerConnected(player))
    {
    if(betrag > 0)
    {
    GivePlayerMoney(playerid,betrag);
    SendClientMessage(playerid,0xFF0000FF,"");
    SendClientMessage(player,0xFF0000FF,"");
    SendFormatText(playerid,0xFF0000FF,"Du hast %s %d$ gegeben.",Name(player),betrag);
    SendFormatText(player,0xFF0000FF,"%s hat dir %d$ gegeben.",Name(playerid),betrag);
    }
    else SendClientMessage(playerid,0xFF0000FF,"Betrag darf nicht unter 0 sein!");
    }
    else SendClientMessage(playerid,0xFF0000FF,"Dieser Spieler ist nicht online!");
    }
    else SendClientMessage(playerid,0xFF0000FF,"NUTZUNG: /pmoney [playerid/PartOfName] [Betrag]");
    return 1;
    }


    Mein Problem ist jetzt, wenn ich /pmoney ohne etwas eingebe, kommt auch "NUTZUNG: /pmoney [playerid/PartOfName] [Betrag]".
    Wenn ich jedoch /pmoney Deadmau5 (Beispiel) eintippe, kommt wieder "NUTZUNG: /pmoney [playerid/PartOfName] [Betrag]".
    Soweit, so gut, wenn ich aber /pmoney Hans (Beispiel) eintippe und diese User NICHT online ist, kommt WIEDER "NUTZUNG: /pmoney [playerid/PartOfName] [Betrag]" obwohl nun "Dieser Spieler ist nicht online!" kommen sollte O.o



    Frage: Was mache ich falsch?


    Zum Vergleich hier auch noch der /money Befehl

    cmd(money,playerid,params[])
    {
    new betrag;
    if(sscanf(params,"i",betrag)) SendClientMessage(playerid,0xFF0000FF,"NUTZUNG: /money [Betrag]");
    else
    {
    if(betrag < 0) SendClientMessage(playerid,0xFF0000FF,"Betrag darf nicht unter 0 sein!");
    else
    {
    GivePlayerMoney(playerid,betrag);
    SendClientMessage(playerid,0xFF0000FF,"");
    SendFormatText(playerid,0xFF0000FF,"Du hast dir %d$ gegeben.",betrag);
    }
    }
    return 1;
    }

    Unkompetent. Das neue dynamisch.



    ihr seit schon lustig postet erros aber nicht die zeilen wo sie sind dann können wir euch auch nicht helfen^^


    Lernt Scripten, Leute, und macht eure Augen auf!


    _______________________________________
    50 Beiträge: [x] 300 Beiträge: [x]
    100 Beiträge: [x] 500 Beiträge: [x]
    150 Beiträge: [x] 1000 Beiträge: [x]
    200 Beiträge: [x]
    2000 Beiträge: []
    250 Beiträge: [X] Boardaktivitäten: Profil


    [size=36]_______________________________________

    /Edit: Schmerzt es dir eigentlich nicht so ein Müll zu schreiben 8|

  • cmd(pmoney,playerid,params[])
    {
    new player,betrag;
    if(sscanf(params,"ui",player,betrag))
    {
    if(IsPlayerConnected(player))
    {
    if(betrag > 0)
    {
    GivePlayerMoney(playerid,betrag);
    SendClientMessage(playerid,0xFF0000FF,"");
    SendClientMessage(player,0xFF0000FF,"");
    SendFormatText(playerid,0xFF0000FF,"Du hast %s %d$ gegeben.",Name(player),betrag);
    SendFormatText(player,0xFF0000FF,"%s hat dir %d$ gegeben.",Name(playerid),betrag);
    }
    else SendClientMessage(playerid,0xFF0000FF,"Betrag darf nicht unter 0 sein!");
    }
    else SendClientMessage(playerid,0xFF0000FF,"Dieser Spieler ist nicht online!");
    }
    else SendClientMessage(playerid,0xFF0000FF,"NUTZUNG: /pmoney [playerid/PartOfName] [Betrag]");
    return 1;
    }
    Du darfst KEIN "!" vor "sscanf" setzen ^^

  • Das ist mir auch schon aufgefallen, liegt seit heute morgen im Papierkorb :D


    Sry deshalb...


    Aber bei /money ist ja genau dasselbe Problem...

    Unkompetent. Das neue dynamisch.



    ihr seit schon lustig postet erros aber nicht die zeilen wo sie sind dann können wir euch auch nicht helfen^^


    Lernt Scripten, Leute, und macht eure Augen auf!


    _______________________________________
    50 Beiträge: [x] 300 Beiträge: [x]
    100 Beiträge: [x] 500 Beiträge: [x]
    150 Beiträge: [x] 1000 Beiträge: [x]
    200 Beiträge: [x]
    2000 Beiträge: []
    250 Beiträge: [X] Boardaktivitäten: Profil


    [size=36]_______________________________________

    /Edit: Schmerzt es dir eigentlich nicht so ein Müll zu schreiben 8|

  • ACHSOO sry hab den Code falsch verstanden x)
    Versuch mal das hier:
    cmd(pmoney,playerid,params[])
    {
    new player,betrag;
    if(sscanf(params,"ui",player,betrag)) { return SendClientMessage(playerid,0xFF0000FF,"NUTZUNG: /pmoney [playerid/PartOfName] [Betrag]"); }
    if(IsPlayerConnected(player))
    {
    if(betrag > 0)
    {
    GivePlayerMoney(playerid,betrag);
    SendClientMessage(playerid,0xFF0000FF,"");
    SendClientMessage(player,0xFF0000FF,"");
    SendFormatText(playerid,0xFF0000FF,"Du hast %s %d$ gegeben.",Name(player),betrag);
    SendFormatText(player,0xFF0000FF,"%s hat dir %d$ gegeben.",Name(playerid),betrag);
    }
    else SendClientMessage(playerid,0xFF0000FF,"Betrag darf nicht unter 0 sein!");
    }
    else SendClientMessage(playerid,0xFF0000FF,"Dieser Spieler ist nicht online!");
    return 1;
    }

  • Genau dasselbe :)


    Wenn ich /pmoney 1 eintippe, also ohne den Geldbetrag, kommt trotzdem "NUTZUNG: /pmoney [playerid/PartOfName] [Betrag]"


    Bei strtok ist das nicht so ;D und das wollte ich hier erreichen :P

    Unkompetent. Das neue dynamisch.



    ihr seit schon lustig postet erros aber nicht die zeilen wo sie sind dann können wir euch auch nicht helfen^^


    Lernt Scripten, Leute, und macht eure Augen auf!


    _______________________________________
    50 Beiträge: [x] 300 Beiträge: [x]
    100 Beiträge: [x] 500 Beiträge: [x]
    150 Beiträge: [x] 1000 Beiträge: [x]
    200 Beiträge: [x]
    2000 Beiträge: []
    250 Beiträge: [X] Boardaktivitäten: Profil


    [size=36]_______________________________________

    /Edit: Schmerzt es dir eigentlich nicht so ein Müll zu schreiben 8|

  • Also ich möchte es so:


    Ich tippe /pmoney 1 ein, OHNE den Geldbetrag.


    Nun möchte ich, dass das kommt: SendClientMessage(playerid,0xFF0000FF,"Dieser Spieler ist nicht online!");
    Ist ja auch richtig, da ich alleine aufm Server bin und es demnach auch keine ID 1 gibt.


    Wie geht das oben genannte ;D

    Unkompetent. Das neue dynamisch.



    ihr seit schon lustig postet erros aber nicht die zeilen wo sie sind dann können wir euch auch nicht helfen^^


    Lernt Scripten, Leute, und macht eure Augen auf!


    _______________________________________
    50 Beiträge: [x] 300 Beiträge: [x]
    100 Beiträge: [x] 500 Beiträge: [x]
    150 Beiträge: [x] 1000 Beiträge: [x]
    200 Beiträge: [x]
    2000 Beiträge: []
    250 Beiträge: [X] Boardaktivitäten: Profil


    [size=36]_______________________________________

    /Edit: Schmerzt es dir eigentlich nicht so ein Müll zu schreiben 8|

  • Hey,


    wenn ich dich richtig verstehe:


    /pmoney 1 - Wird die benötigten Parameter anzeigen, also "NUTZUNG: /pmoney [playerid/PartOfName] [Betrag]"
    /pmoney 1 X - Wird anzeigen "Dieser Spieler ist nicht online!"


    Du musst erst alle Parameter angeben.


    Grüße,
    tony

  • Geht das wirklich nicht anders? :D


    Weil mit strtok ist das ja etwas anderes, verständlich...


    Aber... ich möchte halt, dass AUCH bei /pmoney 1 angezeigt wird: "Dieser Spieler ist nicht online!"

    Unkompetent. Das neue dynamisch.



    ihr seit schon lustig postet erros aber nicht die zeilen wo sie sind dann können wir euch auch nicht helfen^^


    Lernt Scripten, Leute, und macht eure Augen auf!


    _______________________________________
    50 Beiträge: [x] 300 Beiträge: [x]
    100 Beiträge: [x] 500 Beiträge: [x]
    150 Beiträge: [x] 1000 Beiträge: [x]
    200 Beiträge: [x]
    2000 Beiträge: []
    250 Beiträge: [X] Boardaktivitäten: Profil


    [size=36]_______________________________________

    /Edit: Schmerzt es dir eigentlich nicht so ein Müll zu schreiben 8|

  • sscanf überprüft ob die angegebenen parameter vohanden sind, also spielerid/name und geld. Solange nicht beide da sind, wird immer wieder der "NUTZUNG: /pmoney [playerid/PartOfName] [Betrag]" text returnt. Erst wenn beide parameter angegebene sind, geht der code weiter zu IsPlayerOnline.


    Wieso muss die IsPlayerOnline abfrage denn unbedingt vorher kommen?

    The fact is, I am right. And if you think I'm wrong, you are wrong.

  • MUSS nicht ^^ Ich hab mich halt nur gewundert, ich steig grad von strtok zu sscanf um, da dachte ich mir "Hää? Wieso kommt da kein "Spieler ist nicht online" wenn ich einen Spieler angebe der nicht online ist und ich keinen Betrag angebe? O.o"


    Naja ;) Danke trotzdem an alle :D


    /closed

    Unkompetent. Das neue dynamisch.



    ihr seit schon lustig postet erros aber nicht die zeilen wo sie sind dann können wir euch auch nicht helfen^^


    Lernt Scripten, Leute, und macht eure Augen auf!


    _______________________________________
    50 Beiträge: [x] 300 Beiträge: [x]
    100 Beiträge: [x] 500 Beiträge: [x]
    150 Beiträge: [x] 1000 Beiträge: [x]
    200 Beiträge: [x]
    2000 Beiträge: []
    250 Beiträge: [X] Boardaktivitäten: Profil


    [size=36]_______________________________________

    /Edit: Schmerzt es dir eigentlich nicht so ein Müll zu schreiben 8|

  • u in sscanf steht für einen PlayerName/ID, wenn dieser nicht online ist, wird 1 returnt.



    Versuch das mal:



    cmd(pmoney,playerid,params[])
    {
    new player[MAX_PLAYER_NAME], pid, betrag;
    if(sscanf(params,"s[24]i",player,betrag)) // ich geh davon aus, du hast das sscanf plugin, wenn nicht mach das [24] weg.
    {
    pid = ReturnUser(player);
    if(IsPlayerConnected(pid))
    {
    if(betrag > 0)
    {
    GivePlayerMoney(player,betrag);
    SendClientMessage(playerid,0xFF0000FF,"");
    SendClientMessage(player,0xFF0000FF,"");
    SendFormatText(playerid,0xFF0000FF,"Du hast %s %d$ gegeben.",Name(player),betrag);
    SendFormatText(player,0xFF0000FF,"%s hat dir %d$ gegeben.",Name(playerid),betrag);
    }
    else SendClientMessage(playerid,0xFF0000FF,"Betrag darf nicht unter 0 sein!");
    }
    else SendClientMessage(playerid,0xFF0000FF,"Dieser Spieler ist nicht online!");
    }
    else SendClientMessage(playerid,0xFF0000FF,"NUTZUNG: /pmoney [playerid/PartOfName] [Betrag]");
    return 1;
    }


    So müsste es gehn.

  • Also das mit dem Geld ist mir grad wurscht, aber danke trotzdem ETB ;)

    Unkompetent. Das neue dynamisch.



    ihr seit schon lustig postet erros aber nicht die zeilen wo sie sind dann können wir euch auch nicht helfen^^


    Lernt Scripten, Leute, und macht eure Augen auf!


    _______________________________________
    50 Beiträge: [x] 300 Beiträge: [x]
    100 Beiträge: [x] 500 Beiträge: [x]
    150 Beiträge: [x] 1000 Beiträge: [x]
    200 Beiträge: [x]
    2000 Beiträge: []
    250 Beiträge: [X] Boardaktivitäten: Profil


    [size=36]_______________________________________

    /Edit: Schmerzt es dir eigentlich nicht so ein Müll zu schreiben 8|

  • Äähm du, keine Zeit ^^ sry, aber ich vermute, dass es geht :D

    Unkompetent. Das neue dynamisch.



    ihr seit schon lustig postet erros aber nicht die zeilen wo sie sind dann können wir euch auch nicht helfen^^


    Lernt Scripten, Leute, und macht eure Augen auf!


    _______________________________________
    50 Beiträge: [x] 300 Beiträge: [x]
    100 Beiträge: [x] 500 Beiträge: [x]
    150 Beiträge: [x] 1000 Beiträge: [x]
    200 Beiträge: [x]
    2000 Beiträge: []
    250 Beiträge: [X] Boardaktivitäten: Profil


    [size=36]_______________________________________

    /Edit: Schmerzt es dir eigentlich nicht so ein Müll zu schreiben 8|

  • So Neues Problem:


    Ich habe einen Adminchat eingebaut, funktioniert soweit auch gut...


    Nur, wenn ich /a TEXT eingebe, kommt "SERVER: Unkown Command" O.o


    Toll....


    hier der A-Chat

    ocmd:a(playerid,params[])
    {
    new Text;
    if(sscanf(params,"s[256]",Text)) SendClientMessage(playerid,0xFF0000FF,"NUTZUNG: /a [Text]");
    else
    {
    format(str,256,"*%d %s: %s",pInfo[playerid][Admin],Name(playerid),Text);
    SendAdminMessage(0xFFFF00FF,str);
    return 1;
    }
    return 1;
    }

    Grüße, "Dead"mau5 :D

    Unkompetent. Das neue dynamisch.



    ihr seit schon lustig postet erros aber nicht die zeilen wo sie sind dann können wir euch auch nicht helfen^^


    Lernt Scripten, Leute, und macht eure Augen auf!


    _______________________________________
    50 Beiträge: [x] 300 Beiträge: [x]
    100 Beiträge: [x] 500 Beiträge: [x]
    150 Beiträge: [x] 1000 Beiträge: [x]
    200 Beiträge: [x]
    2000 Beiträge: []
    250 Beiträge: [X] Boardaktivitäten: Profil


    [size=36]_______________________________________

    /Edit: Schmerzt es dir eigentlich nicht so ein Müll zu schreiben 8|

  • ocmd:a(playerid,params[])
    {
    new Text[128];
    if(sscanf(params,"s",Text)) SendClientMessage(playerid,0xFF0000FF,"NUTZUNG: /a [Text]");
    else
    {
    format(str,128,"*%d %s: %s",pInfo[playerid][Admin],Name(playerid),Text);
    SendAdminMessage(0xFFFF00FF,str);
    return 1;
    }
    return 1;
    }
    Ich denke kaum dass du 256 zeichen brauchst ;)

  • [22:16:35] sscanf warning: Strings without a length are deprecated, please add a destination size.


    Hmm?? :( BAHNHOF!!!

    Unkompetent. Das neue dynamisch.



    ihr seit schon lustig postet erros aber nicht die zeilen wo sie sind dann können wir euch auch nicht helfen^^


    Lernt Scripten, Leute, und macht eure Augen auf!


    _______________________________________
    50 Beiträge: [x] 300 Beiträge: [x]
    100 Beiträge: [x] 500 Beiträge: [x]
    150 Beiträge: [x] 1000 Beiträge: [x]
    200 Beiträge: [x]
    2000 Beiträge: []
    250 Beiträge: [X] Boardaktivitäten: Profil


    [size=36]_______________________________________

    /Edit: Schmerzt es dir eigentlich nicht so ein Müll zu schreiben 8|

  • Haxler ich liebe dich, willst du mich heiraten? :love:


    Spaß mal beiseite, man kann zwar nur 128 Zeichen eintippen aber man kann per "SendClientMessage" etc schon 256 Zeichen verwenden, aber würde ich lieber nicht machen ^^


    €dit://
    ocmd:a(playerid,params[])
    {
    new Text[128];
    if(sscanf(params,"s[128]",Text)) SendClientMessage(playerid,0xFF0000FF,"NUTZUNG: /a [Text]");
    else
    {
    format(str,128,"*%d %s: %s",pInfo[playerid][Admin],Name(playerid),Text);
    SendAdminMessage(0xFFFF00FF,str);
    return 1;
    }
    return 1;
    }