Problem mit Sethp und Armour

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:sethp(playerid,params[])
    {
    new pID;
    new hp;
    new string[128];
    new string1[128];
    if(sscanf(params,"ui",pID,hp)) return SendClientMessage(playerid,BLAU,"Benutze: /sethp [ID] [0-100%]");
    format(string,sizeof string,"Du hast %s HP auf %i gesetzt",pID,hp);
    format(string1,sizeof string1,"%s hat deine HP auf %i gesetzt",playerid,hp);
    SendClientMessage(playerid,GRUEN,string);
    SendClientMessage(pID,GRUEN,string1);
    SetPlayerHealth(pID,hp);
    return 1;
    }
    ocmd:setarmour(playerid,params[])
    {
    new pID;
    new armour;
    new string[128];
    new string1[128];
    if(sscanf(params,"ui",pID,armour)) return SendClientMessage(playerid,BLAU,"Benutze: /setarmour [ID] [0-100%]");
    SetPlayerArmour(pID,armour);
    format(string,sizeof string,"Du hast %s Armour auf %i gesetzt",pID,armour);
    format(string1,sizeof string1,"%s hat deine Armour auf %i gesetzt",playerid,armour);
    SendClientMessage(playerid,GRUEN,string);
    SendClientMessage(pID,GRUEN,string1);
    return 1;
    }


    in game aber wird es nicht angezeigt die wer es war also die Playernamen werden nicht angezeit die zahl auf der es gesatzt wurde wird aber angezeigt


    Brauche dringen hilfe



    MFG GFJohnny94

  • Zitat

    if(sscanf(params,"ui",pID,armour)) return SendClientMessage(playerid,BLAU,"Benutze: /setarmour [ID] [0-100%]");


    Hier gibst du mit dem u Quasi im Befehl den Spieler an,
    der wird dann als Int. (PlayerID) benutzt.


    Wenn du den Namen nun auslesen willst, musst du angeben, dass du seinen Namen willst,
    z.B.:
    user = GetPlayerName(pID)
    Nun beinhaltet die Variable user den Name des Spielers mit der ID (pID).
    Den kannst du nun als String verwenden (Mit %s).
    Dann wird auch sein Name angezeigt.



    ocmd:sethp(playerid,params[])
    {
    new pID;
    new hp;
    new string[128];
    new string1[128];
    if(sscanf(params,"ui",pID,hp)) return SendClientMessage(playerid,BLAU,"Benutze: /sethp [ID] [0-100%]");
    user = GetPlayerName(pID)
    format(string,sizeof string,"Du hast %s HP auf %i gesetzt",user,hp);
    format(string1,sizeof string1,"%s hat deine HP auf %i gesetzt",GetPlayerName(playerid),hp);
    SendClientMessage(playerid,GRUEN,string);
    SendClientMessage(pID,GRUEN,string1);
    SetPlayerHealth(pID,hp);
    return 1;
    }
    ocmd:setarmour(playerid,params[])
    {
    new pID;
    new armour;
    new string[128];
    new string1[128];
    if(sscanf(params,"ui",pID,armour)) return SendClientMessage(playerid,BLAU,"Benutze: /setarmour [ID] [0-100%]");
    SetPlayerArmour(pID,armour);
    user = GetPlayerName(pID)
    format(string,sizeof string,"Du hast %s Armour auf %i gesetzt",user,armour);
    format(string1,sizeof string1,"%s hat deine Armour auf %i gesetzt",GetPlayerName(playerid),armour);
    SendClientMessage(playerid,GRUEN,string);
    SendClientMessage(pID,GRUEN,string1);
    return 1;
    }


    So^^
    Gruß,
    Dennis


    //EDIT: vergessen zu erwähnen,
    du kannst auch direkt GetPlayerName(pID) im format verwenden,
    hab das nur mal mit user = einzeln gemacht, ums zu veranschaulichen^^

    Wer Rechtschreibfehler findet, darf sie behalten ;)
    -> Forentechniker | WBB Entwickler pn



  • denn kommen diese fehler

  • ach ja, sry habs vergessen, dazuzuschreiben :D



    ocmd:sethp(playerid,params[])
    {
    new pID;
    new hp;
    new string[128];
    new string1[128];
    if(sscanf(params,"ui",pID,hp)) return SendClientMessage(playerid,BLAU,"Benutze: /sethp [ID] [0-100%]");
    new user = GetPlayerName(pID);
    format(string,sizeof string,"Du hast %s HP auf %i gesetzt",user,hp);
    format(string1,sizeof string1,"%s hat deine HP auf %i gesetzt",GetPlayerName(playerid),hp);
    SendClientMessage(playerid,GRUEN,string);
    SendClientMessage(pID,GRUEN,string1);
    SetPlayerHealth(pID,hp);
    return 1;
    }
    ocmd:setarmour(playerid,params[])
    {
    new pID;
    new armour;
    new string[128];
    new string1[128];
    if(sscanf(params,"ui",pID,armour)) return SendClientMessage(playerid,BLAU,"Benutze: /setarmour [ID] [0-100%]");
    SetPlayerArmour(pID,armour);
    new user = GetPlayerName(pID);
    format(string,sizeof string,"Du hast %s Armour auf %i gesetzt",user,armour);
    format(string1,sizeof string1,"%s hat deine Armour auf %i gesetzt",GetPlayerName(playerid),armour);
    SendClientMessage(playerid,GRUEN,string);
    SendClientMessage(pID,GRUEN,string1);
    return 1;
    }



    Simikolon ( ; ) hatte ich auch vergessen, sry^^
    Naja, heuite langen Tag gehabt :D


    //EDIT: Verbesserung: Klammer zum schluss wurde als Smily angezeigt...

    Wer Rechtschreibfehler findet, darf sie behalten ;)
    -> Forentechniker | WBB Entwickler pn

  • Warnung: Die Beiträge in diesem Thread, die dir helfen sollen,
    sind eine ganz große Scheiße und nicht nützlich -
    kurz: Die labern Mist und haben wohl noch weniger Ahnung als du.


    Ich bitte daher, alle bisherige Beiträge zu ignorieren und nie Rat von einem der User einholen zu wollen,
    besonders Dennis321.


    Wenn du möchtest, dass man im Befehl den Namen eingibt,
    musst du
    a) eine Variable als String erstellen
    b) sscanf, anstatt "u" ein "s" benutzen
    c) eine for-schleife machen, und den Namen aller Spieler abrufen (GetPlayerName) und per strcmp mit dem eingegebenen vergleichen
    d) die dadurch ermittelte ID verwenden

  • ja jetzt kommt das



  • Du brauchst keinen Doppelpost,
    unten rechts bei deinem Beitrag gibt es den Knopf "Bearbeiten".
    Dort kannst du den Inhalt eines Beitrages nachträglich ändern.


    Hier die Befehle, die du für die Schritte brauchst.
    Wie das genau gemacht wird, musst du dir selber erarbeiten -
    ich will ja, dass du das lernst.


    Nur nimm bitte nie wieder Rat von Dennis an,
    der Junge hat null Ahnung von Pawn.
    Ich nehme an, der Code kommt aus ner Buchstabensuppe...


    a) new string[200];
    b) sscanf
    c) for | GetPlayerName | break

  • Ja,
    sry hab bei mir das so gemacht,
    dass ich einen stock mit GetUserName habe,
    daher vertan :S



    stock GetUserName(playerid)
    {
    new UName[MAX_PLAYER_NAME];
    GetPlayerName(playerid, UName, sizeof(UName));
    return UName;
    }


    Nun kann ich natürlich GetUserName(playerid) machen...
    naja, benutze ich so immer, hab mich da vertan...


    Hätte vorhin vll. in die Doku gucken müssen,
    kann ja mal passieren, wie gesagt sry deswegen,
    musst mich aber deswegen nicht so runtermachen Tropper ;)

    Wer Rechtschreibfehler findet, darf sie behalten ;)
    -> Forentechniker | WBB Entwickler pn

  • Wenn jemand auf eine Frage antwortet,
    und dort die 5fache Menge an Errors generiert,
    und dabei dutzende derart offensichtliche Fehler macht,
    dann gebe ich halt gerne Empfehlungen ab.


    Selbst wenn du ein stock dafür hast,
    heißt der Befehl immernoch nicht "GetPlayerName".
    Gehe ich davon aus, dass du wenigstens den richtigen Befehl genutzt hast,
    wäre es immernoch falsch, weil sscanf den falschen Input bekommt,
    und er ja KEINE ID eingeben wollte, sondern ein Namen.
    Ignoriert man das wiederum, sieht man, dass das stock eine ganz andere Funktion hat als
    vom TS gewünscht.
    Und selbst wenn es funktionieren würde, würdest du das Ergebnis einem Integer zuweisen,
    und keinem String.


    Und bei der Beschreibung habe ich das offensichtlich vergessene ";" noch ausgelassen.
    Wenn ich dir also zu etwas raten darf:
    Hilf niemandem bei etwas, was du selber nicht kannst.
    Denn das hilft niemandem etwas!