[ocmd][sscanf] Befehle mit Parametern funktionieren nicht.

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
  • ocmd:pGeld(playerid,params[])
    {
    if(SpielerDaten[playerid][pAdmin] >= 3)
    {
    new pID, nGeld;
    if(sscanf(params,"ui",pID, nGeld)) return SendClientMessage(playerid, Orange, "Benutzung: /pGeld [ID] [Anzahl]");
    if(IsPlayerConnected(pID))
    {
    SpielerDaten[pID][pGeld] = nGeld;
    }
    else ShowPlayerDialog(playerid, DIALOG_FALSCHE_ID, DIALOG_STYLE_MSGBOX, "{00BFFF}Falsche ID", "{FFFFFF}Die eingegebene ID ist ungültig.\n\nBitte versuche es erneut mit einer gültigen ID.", "Okay", "");
    }
    return 1;
    }


    Bei diesem Befehl kann ich mein Geld nicht setzen. Ich weiß nicht woran das liegt.


    Kann mir jemand helfen?

  • GivePlayerMoney(pID,nGeld);


    Wenn du das Geld komplett setzen willst benutze auch ResetPlayerMoney(pID);


    Ja, also das ist ja alles klar und so, aber irgendwie sagt er mir egal bei welcher ID auch immer, dass die ungültig ist.


    Auch bei meiner Eigenen und auch bei meinem Spielernamen.

  • ocmd:pGeld(playerid,params[])
    {
    if(SpielerDaten[playerid][pAdmin] >= 3)
    {
    new pID, nGeld;
    if(sscanf(params,"ui",pID, nGeld)) return SendClientMessage(playerid, Orange, "Benutzung: /pGeld [ID] [Anzahl]");
    if(!IsPlayerConnected(pID)) return ShowPlayerDialog(playerid, DIALOG_FALSCHE_ID, DIALOG_STYLE_MSGBOX, "{00BFFF}Falsche ID", "{FFFFFF}Die eingegebene ID ist ungültig.\n\nBitte versuche es erneut mit einer gültigen ID.", "Okay", "");
    GivePlayerMoney(pID,nGeld);
    SpielerDaten[pID][pGeld] = nGeld;
    }
    return 1;
    }

    KleineHilfe 2.0

    Einmal editiert, zuletzt von YaBroo ()


  • Funktioniert nicht. Bin immer noch "offline" 8|


    Vielleicht sollte ich doch eine Spielervariable erstellen, ob der Spieler eingeloggt ist. :whistling:

  • Zur Not kannste noch eine for Schleife durch laufen lassen und i mit pID vergleichen..Aber dafür ist sscanf doch zuständig.. Verstehe nicht warum es net klappen sollte :D
    Ich schau mal eben bei mir.


    //edit


    Dieser Befehl funktioniert einwandfrei:


    ocmd:pgeld(playerid,params[])
    {
    new pID, nGeld;
    iif(SpielerDaten[playerid][pAdmin] < 3) return SendClientMessage(playerid,-1,"Du hast kein Recht diesen Befehl auszuüben");
    if(sscanf(params,"ui",pID, nGeld)) return SendClientMessage(playerid, -1, "Benutzung: /pGeld [ID] [Anzahl]");
    if(!IsPlayerConnected(pID)) return ShowPlayerDialog(playerid, DIALOG_FALSCHE_ID, DIALOG_STYLE_MSGBOX, "{00BFFF}Falsche ID", "{FFFFFF}Die eingegebene ID ist ungültig.\n\nBitte versuche es erneut mit einer gültigen ID.", "Okay", "");
    GivePlayerMoney(pID,nGeld);
    return 1;
    }


    Ich hatte zu Anfang das Unknown Command Problem was daran lag das pgeld groß geschrieben war, keine Ahnung ob es daran liegt. ?(

    KleineHilfe 2.0

    Einmal editiert, zuletzt von YaBroo ()

  • Schau mal auf mein edit..
    Naja IsPlayerConnected ist aber eig. eine fest gelegte Funktion.
    Guck mal ob der cmd von oben bei dir funktioniert, wenn nicht vielleicht mal das neuste include ziehen von a_samp oder sscanf, wer weiß.

    KleineHilfe 2.0

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Das ist schon der 3. Thread mit dem selben Problem. So langsam weiß ich warum ich sscanf nicht benutze, es schafft nur Ärger.
    Naja, da ich bislang auf die anderen 2 Threads noch keine Rückmeldung bekommen habe:


    Probier mal in sscanf "ui" mit "dd" zu ersetzen.

  • Das ist schon der 3. Thread mit dem selben Problem. So langsam weiß ich warum ich sscanf nicht benutze, es schafft nur Ärger.
    Naja, da ich bislang auf die anderen 2 Threads noch keine Rückmeldung bekommen habe:


    Probier mal in sscanf "ui" mit "dd" zu ersetzen.


    Ich denke mal der Ausgangspunkt besteht darin, Parameter "einfacher" anzuwenden, deshalb benutzt man ja SSCANF, am besten du guckst dir öfters die Liste mit allen angegebenen Parametern im Haupttheard von SScanf an.


  • Ich denke mal der Ausgangspunkt besteht darin, Parameter "einfacher" anzuwenden, deshalb benutzt man ja SSCANF, am besten du guckst dir öfters die Liste mit allen angegebenen Parametern im Haupttheard von SScanf an.


    Ich kenn die Liste, es ist mir auch klar das "u" Name bzw. ID ist. Allerdings kann es ja sein das eben genau das einen Fehler hat, wie sonst kommt er immer auf eine Falsche ID? (Ich gehe mal davon aus, dass er seinen Name bzw. seine ID richtig eingibt.)


    EDIT: Sieh mal einer an:


    # Geeeht Danke es lag an dd :)


    ^^


    PS: "einfacher", mit den Anführungszeichen haste völlig Recht. ^^ Ich sag immer das liegt im Auge des Betrachters.


    Was du auch mal machen könntest: Direkt unter sscanf das hier setzen, und uns sagen was dein server log so sagt:
    printf("ID Ist: %d (Und meine ID ist: %d)", pID, playerid);


  • Ich verstehe nur nicht, warum es bei manchen bzw. bei den meisten wunderbar funktioniert und bei manchen nicht.
    Und nein, sscanf richtig angewandt macht eigentlich keine Schwierigkeiten.

    KleineHilfe 2.0

  • Ich blick nicht durch ...


    CMD:kick(playerid,params[])
    {
    new pid,grund[24],string[128];
    if(pInfo[playerid][pAdmin] >= 1)
    {
    if(sscanf(params,"us[24]",pid,grund))return SendClientMessage(playerid,rot,"Benutze: /kick [Id/Name] [Grund]");
    if(pInfo[pid][pAdmin] > pInfo[playerid][pAdmin])return SendClientMessage(playerid,rot,"** Dieser Spieler hat ein höheres Admin level als du!");
    if(IsPlayerConnected(pid))
    {
    format(string,128,"Du wurdest von Admin: %s Gekickt Grund | %s",Name[playerid],grund);
    SendClientMessage(pid,rot,string);
    format(string,128,"%s hat %s Gekickt Grund: %s",Name[playerid],Name[pid],grund);
    Log("KICK",string);
    KickPlayer(pid,Name[playerid],grund);
    }else{
    IDERROR;
    }
    }
    return 1;
    }


    Wen mann nur /kick eingibt kommt die Meldung /kick [Id] [Grund]
    Sobald ich /kick 0 Blabla mache kommt .. Underknow Server Command .