Kommastelle im GiveMoney Befehle.

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,


    Und zwar habe ich ein kleines Problem. Ich habe auf meinem Server ein Kommastellen System gescriptet mit 2 Nachkommastellen. (0,00€)
    Jetzt möchte ich bei meinem (/givemoney) befehl, das man z.B (/givemoney 0,10) eingeben kann oder z.B (/givemoney 0,1) dann soll die nächste 0 ergänzt werden, also so (/givemoney 0,10)


    Hier ist derzeit mein Code...
    ocmd:givemoney(playerid,params[]){
    new id,money[24],string[258],res[50];
    if(PlayerInfo[playerid][pAdmin] < 4) return SendClientMessage(playerid,RED,""KeinAdmin"");
    if(sscanf(params,"us",id,money)) return SendClientMessage(playerid,COLOR_TEXT,"Benutze: /givemoney [SpielerName/ID] [Geld]");
    if(strfind(money, ",", true) == 1){
    new strPos = strfind(money, ",");
    strmid(res, money, 0, strPos);
    if(strval(res) < 2) return SendClientMessage(playerid,RED,"Sie können nur 2 Nachkommastellen angeben.");
    if(strval(res) == 1){
    format(string,sizeof(string),"%s0",strval(money));
    GivePlayerMoneyEx(id,strval(string));
    }
    if(strval(res) == 2){
    GivePlayerMoneyEx(id,strval(money));
    }
    }else{
    format(string,sizeof(string),"%s00",strval(money));
    GivePlayerMoneyEx(id,strval(string));
    }
    format(string,sizeof(string),"{FFFF00}[AdminInfo]:{FF0000} %s %s hat %s $%s gegeben.",AdminRang(playerid),SpielerName(playerid),SpielerName(id),GeldAnzeige(strval(money)));
    SendAdminMessage(LIGHTRED,1,string);


    format(string,sizeof(string),"%d %s",id,GeldAnzeige(strval(money)));
    TeamLog(playerid,"/givemoney",string);
    return true;
    }


    Ich danke für die Hilfe.


    Jeffry:

  • Ich glaube der Grund-Gedanke ist noch nicht optimal dahinter :D



    Du gibst dem Spieler das selbe Geld, egal ob er 5,00 oder 0,50 eingibt :D


    Zudem ist %s und strval falsch, da das ja ein Integer ist und kein String ;)
    Weiterhin muss es überall strval(res) heißen...weil ja bei money noch überall das , drinnen ist und auch sonst wenig Sinn macht :D


    Du solltest dir das nochmal anders überlegen :D


    mfg. :rolleyes:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Poste bitte mal die GivePlayerMoneyEx Funktion.


    So wie du das da nämlich vor hast scheint das nicht wirklich zu funktionieren.
    strval von einer Kommazahl klappt nicht.


    Und wie sieht deine GeldAnzeige Funktion aus?


    stock GivePlayerMoneyEx(id, money){
    new betrag = GetPlayerMoneyEx(id)+money;
    if(betrag >= 1000000){
    return Geld[id] += money;
    }


    stock GeldAnzeige(Betrag)
    {
    new string[20],string2[50];
    format(string, sizeof(string), "%d", Betrag);
    if(strlen(string) <= 1){format(string2, sizeof(string2), "0,0%s", string);}
    if(strlen(string) <= 2){format(string2, sizeof(string2), "0,%s", string);}
    else if(strlen(string) == 3)
    {
    new anstring[2],
    zwstring[4];
    format(anstring, sizeof(anstring), "%s", string);
    format(zwstring, sizeof(zwstring), "%s", string[1]);
    format(string2, sizeof(string2), "%s,%s", anstring,zwstring);
    }
    else if(strlen(string) == 4)
    {
    new anstring[3],
    zwstring[4];
    format(anstring, sizeof(anstring), "%s", string);
    format(zwstring, sizeof(zwstring), "%s", string[2]);
    format(string2, sizeof(string2), "%s,%s", anstring,zwstring);
    }
    else if(strlen(string) == 5)
    {
    new anstring[4],
    zwstring[5];
    format(anstring, sizeof(anstring), "%s", string);
    format(zwstring, sizeof(zwstring), "%s", string[3]);
    format(string2, sizeof(string2), "%s,%s", anstring,zwstring);
    }
    else if(strlen(string) == 6)
    {
    new anstring[2],
    zwstring[4],
    enstring[4];
    format(anstring, sizeof(anstring), "%s", string);
    format(zwstring, sizeof(zwstring), "%s", string[1]);
    format(enstring, sizeof(enstring), "%s", string[4]);
    format(string2, sizeof(string2), "%s%s,%s", anstring,zwstring,enstring);
    }
    else if(strlen(string) == 7)
    {
    new anstring[3],
    zwstring[4],
    enstring[4];
    format(anstring, sizeof(anstring), "%s", string);
    format(zwstring, sizeof(zwstring), "%s", string[2]);
    format(enstring, sizeof(enstring), "%s", string[5]);
    format(string2, sizeof(string2), "%s%s,%s", anstring,zwstring,enstring);
    }
    else if(strlen(string) == 8)
    {
    new anstring[4],
    zwstring[4],
    enstring[4];
    format(anstring, sizeof(anstring), "%s", string);
    format(zwstring, sizeof(zwstring), "%s", string[3]);
    format(enstring, sizeof(enstring), "%s", string[6]);
    format(string2, sizeof(string2), "%s%s,%s", anstring,zwstring,enstring);
    }
    else if(strlen(string) == 9)
    {
    new anstring[2],
    zwstring1[4],
    zwstring2[4],
    enstring[4];
    format(anstring, sizeof(anstring), "%s", string);
    format(zwstring1, sizeof(zwstring1), "%s", string[1]);
    format(zwstring2, sizeof(zwstring2), "%s", string[4]);
    format(enstring, sizeof(enstring), "%s", string[7]);
    format(string2, sizeof(string2), "%s%s%s,%s", anstring,zwstring1,zwstring2,enstring);
    }
    else {format(string2, sizeof(string2), "%s", string);}
    return string2;
    }

  • Marcel789:
    Ich habe mir gerade deinen Code angeschaut. Normalerweise lasse ich die Codes im Großteil so wie sie sind und bessere sie nur aus, aber das was du da gemacht hast ist wirklich, wie soll ich sagen, ganz speziell. Das ist so kompliziert gemacht, da blickt man kaum durch. Wenn du da durchblickst, Respekt! :thumbup:


    Ich würde dir vorschlagen, ich mach dir das so wie ich es machen würde, das sind dann nur ein paar Zeilen.


    Ist das so was du dir vorstellst:
    - Spieler kann Cent-Werte haben (Geld wie 123456,78€).
    - Geldanzeige sieht zum Beispiel so aus: 123456,78€


    Ist das so richtig?


  • Ich blicke da selber nicht richtig durch xD


    So also ich hab derzeit das Geld System so GivePlayerMoney(playerid,1000) enstpricht = 10,00


    Ist genauso wie du sagtest :)

  • new Float:Geld[MAX_PLAYERS];
    forward Float:GetPlayerMoneyEx(playerid);
    stock Float:GetPlayerMoneyEx(playerid)
    {
    return Geld[playerid];
    }
    stock GivePlayerMoneyEx(playerid, Float:money)
    {
    Geld[playerid] += money;
    return 1;
    }
    stock GeldAnzeige(Float:money)
    {
    new str[16];
    format(str, sizeof(str), "%0.2f€", money);
    for(new i=0, j = strlen(str); i<j; i++) if(str[i] == '.') str[i] = ',';
    return str;
    }


    In einem Befehl:
    new Float:money, tmp[16];
    if(sscanf(params, "s[16]", tmp)) return SendClientMessage(playerid, -1, "/befehl [Geld] -> Bsp: /befehl 1,23");
    for(new i=0, j = strlen(tmp); i<j; i++) if(tmp[i] == ',') tmp[i] = '.';
    money = floatstr(tmp);
    GivePlayerMoneyEx(playerid, money);


    Teste es mal so aus, mache dir aber zuvor ein Backup von deinem Code, falls es nicht klappt.


    Du musst natürlich einige Änderungen in deinem bisherigen Code machen, sprich überall dort, wo du mit den Geldfunktionen arbeitest, musst du es etwas ändern.
    Du übergibst ja hiermit direkt den Wert als Kommazahl (eben mit Punkt im Code), also 10.00 entspricht 10,00€ in der Anzeige.
    Wenn du Probleme beim ändern des Codes hast musst du eben Bescheid sagen, ich weiß ja nicht wie fit du im beheben von Warnungen/Errors bist. Es werden sicher ein paar am Anfang da sein, weil die Funktionen sich nicht 1:1 mit deinen decken.
    Also falls Fragen sind, einfach Bescheid sagen.
    Aber du siehst schon, so ist es wesentlich übersichtlicher.

    3HZXdYd.png

    2 Mal editiert, zuletzt von Jeffry () aus folgendem Grund: Fehler bei GeldAnzeige ausgebessert.

  • Nun habe ich folgendes Problem....


    Ich gebe den Befehl (/givemoney 123) ein. Bei der Geldanzeige im Chat wird alles richtig angezeigt also 123,00 aber ich bekomme auf die Hand statt 123,00 (12300) nur 1,23.
    Kann man irgendwie bei GivePlayerMoney mit Floats arbeiten ? Ich habe schon mit floatround gearbeitet, das bringt aber nichts :(


    Ich bitte um Hilfe.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Nun habe ich folgendes Problem....


    Ich gebe den Befehl (/givemoney 123) ein. Bei der Geldanzeige im Chat wird alles richtig angezeigt also 123,00 aber ich bekomme auf die Hand statt 123,00 (12300) nur 1,23.
    Kann man irgendwie bei GivePlayerMoney mit Floats arbeiten ? Ich habe schon mit floatround gearbeitet, das bringt aber nichts :(


    Ich bitte um Hilfe.


    Nein das geht leider nicht du kannst nicht bei GivePlayerMoney mit floats arbeiten.


    Normal sollte dein System funktionieren wenn du ein eigenes Textdraw hast falls dies nicht der Fall ist so musst du floatround nutzen.





    stock GivePlayerMoneyEx(playerid, Float:money)
    {
    Geld[playerid] += money;
    GivePlayerMoney(playerid,floatround(money,floatround_ceil));
    return 1;
    }


    Befehl:
    ocmd:givemoney(playerid,params[]){
    new pID, Float:money;
    if(sscanf("uf",pID,money))return SendClientMessage(playerid,-1,"Benutze: /givemoney [playerid] [Betrag(1.2)]");
    return GivePlayerMoneyEx(pID, money);
    }



    oder so, wenn du das Komma umbedingt möchtest


    ocmd:givemoney(playerid,params[]){
    new pID, money[20];
    if(sscanf("ds[20]",pID,money))return SendClientMessage(playerid,-1,"Benutze: /givemoney [playerid] [Betrag(1,2)]");
    SendClientMessage(playerid,-1,money);
    money[strfind(money,",")] = '.';
    return GivePlayerMoneyEx(pID, floatstr(money));
    }

    Einmal editiert, zuletzt von IPrototypeI () aus folgendem Grund: :D


  • Hey, danke auch soweit für die Hilfe.


    Aber ich hab da noch ein Problem.


    return GivePlayerMoneyEx(pID, money); <- Argument Error.
    Dies hab ich zu return GivePlayerMoneyEx(pID, strval(money)); gemacht, ist aber glaube ich falsch und deswegen bekomme ich immer 1$^^


  • Huhu jetzt zählt er das zusammen :( Also wenn man 1,1 z.B eingibt bekommt man 2$ + xD


    Sry ich hatte mich verlesen im wiki zum Thema abrunden


    stock GivePlayerMoneyEx(playerid, Float:money)
    {
    Geld[playerid] += money;
    GivePlayerMoney(playerid,floatround(money,floatround_floor));
    return 1;
    }


    Du hängst zu der normalen Geldanzeige bestimmt die Cents hinten mit einem Textdraw an oder ?[/quote]