Frage bezüglich sscanf

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
  • Hallo Community,
    ich habe eine kleine Frage bzw. ein kleines Problem.Ich habe gerade ein /sell Befehl erstellt. Hier soll man dann später mahrere Sachen verkaufen können, was eigentlich nebensache ist. Nun habe ich ein Problem mit sscanf: Ich habe nun den Befehl ersstellt und wenn ich einen von meinen Fischen verkaufen möchte passiert nichts. wenn ich nur /sell fish eingebe sehe ich zumindest noch 'Benutzung: /sell fish [Fisch]' und genau da ist das Problem. Mein Code sieht so aus:


    if(strcmp(cmd,"/sell",true) == 0)
    {
    new name[256];
    if(sscanf(params,"s",name))
    {
    SendClientMessage(playerid, COLOR_WHITE, "|__________________ Verkaufen __________________|");
    SendClientMessage(playerid, COLOR_WHITE, "Benutzung: /sell [Name]");
    SendClientMessage(playerid, COLOR_GREY, "Verfügbare Namen: Fish, Waffe");
    SendClientMessage(playerid, COLOR_WHITE, "|_____________________________________________|");
    return 1;
    }
    if(strcmp(name,"fish",true) == 0)
    {
    new fishid;
    if(sscanf(params,"i",fishid))return SendClientMessage(playerid,COLOR_GREEN,"[Benutzung]:{FFFFFF} /sell fish [Fisch]"); // Hier liegt es dran, ich weiss aber nicht, wie ich es anders hinbekomme mit sscanf
    [...]


    Also ich möchte halt erst, dass er ausliehst, was der erste paramter ist, in dem fall fish und dann abfragt halt if(strcmp(name, "fish"... und dann nochmal die paramter dahinter herrausbekommt und dann den code ausführt. Jetzt hängt es aber beim zweiten sscanf.


    Es wäre nett wenn ihr mir helfen könntet.
    Mit freundlichen Grüßen
    ChaoZz__

  • if(sscanf(params,"i",fishid))return SendClientMessage(playerid,COLOR_GREEN,"[Benutzung]:{FFFFFF} /sell fish [Fisch]");


    Der Fehler liegt bei den params.
    Du musst noch ein Parameter angeben wie zb. new befehl[16];


    dann würde das so aussehen


    if(sscanf(params,"s[16]i",befehl,fishid))return SendClientMessage(playerid,COLOR_GREEN,"[Benutzung]:{FFFFFF} /sell fish [Fisch]");


    edit. fehler korrigiert

  • du hast dazu paar möglichkeiten
    die erste wäre hier den befehl zu überspringen
    new befehl[10],id;
    if(sscanf(cmdtext,"{s[6]}s[10]i",befehl,id))return SendClientMessage(playerid,-1,"....");


    oder du kannst auch den befehl von dem gesamt string entfernen


    strdel(cmdtext,0,strfind(cmdtext,"\32;",false)+1);


    somit könntest du den code von .Makaveli nutzen


    //edit mal so eine Frage der code befindet sich schon unter OnPlayerCommandText den du gepostet hast

  • Ja Befindet er sich ^^ werde erstmal das erste probieren dann die zweite variante.


    /edit: kein bock mehr auf sscanf mache es jetzt wie ich es sonst mache! mit strtok


    Also so funktioniert es ohne probleme



    if(!strcmp(cmdtext,"/sell",true,5)){
    new befehl[10],id;
    if(sscanf(cmdtext,"{s[6]}s[10]i",befehl,id))return SendClientMessage(playerid,-1,"....");
    if(!strcmp(befehl,"fish",true))return printf("so viele Fische %d",id),1;
    else if(!strcmp(befehl,"waffen",true))return printf("so viele Waffen %d",id),1;
    else return SendClientMessage(playerid,-1,"....");
    }

  • Ich kapier das iwie nicht. Bei meinem Waffen befehl, also auch im /sell muss man ja andere sachen angeben:
    if(strcmp(name,"waffe",true) == 0)
    {
    if(sscanf(params,"usi",pID,weapon_name,price))


    Dann würde das so funktionieren ohne sich noch auf weitere abfragen zu beziehen


    if(!strcmp(cmdtext,"/sell",true,5)){
    new befehl[10],id, weaponname[20],preis;
    if(sscanf(cmdtext,"{s[6]}s[10]i",befehl,id) && sscanf(cmdtext,"{s[6]}s[10]s[20]ud",befehl,weaponname,id,preis))return SendClientMessage(playerid,-1,"....");
    if(!strcmp(befehl,"fish",true))return printf("so viele Fische %d",id),1;
    else if(!strcmp(befehl,"waffen",true))return printf("Waffe %s an id %d und preis %d",weaponname,id,preis),1;
    else return SendClientMessage(playerid,-1,"....");
    }


    du kannst mir auch mal dein ganzen befehl posten und ich kann dir den umschreiben + erklärungen auf der seite oder dir das ganze auch erklären jedoch müsste ich wissen wo es bei dir hengt.
    Es gibt bei sscanf noch weitere möglichkeiten du benutzt doch wahrscheinlich das sscanf plugin da du auch deine eigenen specifer erstellen kannst.