Geldanzeige mit textdraws ändern?!? Wie???

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 Breadfish-Community,


    ich hätte eine Frage und zwar gibt es irgendwo ein Tutorial wo erklärt wird wie man mit Textdraws den Geldanzeige akutallisieren kann?
    Also ich hatte vor das normale $00000000 von GTA zu entfernen und dafür mit Textdraws zu arbeiten nur leider weiß ich nicht wie so etwas geht... (Also das die Zahlen sich da ändern)


    Kann mir einer von euch weiterhelfen oder weiß einer eine Hilfreiche Seite?
    Und bevor hier Kommentare geschrieben werden, JAAA ich habe schon gegoogelt!


    Vielen Dank für die Hilfe im Vorraus :D


    Lg
    J0a9

  • Hallo Icy.,



    aaaah Stimmt :D


    Wenn ich es nach dem Wiki Beispiel verstanden hab sollte es doch so sein:



    stock UpdatePlayerMoneyTextdraw(playerid)
    {
    new m = GetPlayerMoney(playerid), str[50];
    if(m == 0) format(str, sizeof str, "~r~00000000");
    else if(m < 10 && m > 0) format(str, sizeof str, "~g~Geld ~w~0000000%d", m);
    else if(m < 100 && m >= 10) format(str, sizeof str, "~g~Geld ~w~000000%d", m);
    else if(m < 1000 && m >= 100) format(str, sizeof str, "~g~Geld ~w~00000%d", m);
    else if(m < 10000 && m >= 1000) format(str, sizeof str, "~g~Geld ~w~0000%d", m);
    else if(m < 100000 && m >= 10000) format(str, sizeof str, "~g~Geld ~w~000%d", m);
    else if(m < 1000000 && m >= 10000) format(str, sizeof str, "~g~Geld ~w~00%d", m);
    else if(m < 10000000 && m >= 1000000) format(str, sizeof str, "~g~Geld ~w~0%d", m);
    else if(m < 100000000 && m >= 10000000) format(str, sizeof str, "~g~Geld ~w~%d", m);
    else format(str, sizeof str, "~g~Dolla ~w~%d", m);
    TextDrawSetString(MoneyDraw[playerid], str);
    return 1;
    }

    oder liege ich total falsch?


    Lg
    J0a9

  • Ja genau.
    Du musst aber Player-TextDraws verwenden, damit bei jedem Spieler etwas anderes angezeigt wird.
    Jeder Spieler hat ja was anderes auf dem Konto :)

  • Hallo Icy.,


    also nach dem Prinzip:


    Unter GameModeInit:

    for(new playerid = 0; playerid<MAX_PLAYERS; playerid++)
    {
    MoneyDraw[playerid] = TextDrawCreate(493.000000, 81.000000, "~g~Geld ~w~00000000");
    TextDrawBackgroundColor(MoneyDraw[playerid], 255);
    TextDrawFont(MoneyDraw[playerid], 3);
    TextDrawLetterSize(MoneyDraw[playerid], 0.500000, 1.700000);
    TextDrawColor(MoneyDraw[playerid], -1);
    TextDrawSetOutline(MoneyDraw[playerid], 0);
    TextDrawSetProportional(MoneyDraw[playerid], 1);
    TextDrawSetShadow(MoneyDraw[playerid], 1);
    TextDrawUseBox(MoneyDraw[playerid], 1);
    TextDrawBoxColor(MoneyDraw[playerid], 0x000000FF);
    TextDrawTextSize(MoneyDraw[playerid], 621.000000, 1.000000);
    }


    Unter OnPlayerConnect

    TextDrawShowForPlayer(playerid, MoneyDraw[playerid]);


    Einen Stock erstellen:

    stock UpdatePlayerMoneyTextdraw(playerid)
    {
    new m = GetPlayerMoney(playerid), str[50];
    if(m == 0) format(str, sizeof str, "~r~00000000");
    else if(m < 10 && m > 0) format(str, sizeof str, "~g~Geld ~w~0000000%d", m);
    else if(m < 100 && m >= 10) format(str, sizeof str, "~g~Geld ~w~000000%d", m);
    else if(m < 1000 && m >= 100) format(str, sizeof str, "~g~Geld ~w~00000%d", m);
    else if(m < 10000 && m >= 1000) format(str, sizeof str, "~g~Geld ~w~0000%d", m);
    else if(m < 100000 && m >= 10000) format(str, sizeof str, "~g~Geld ~w~000%d", m);
    else if(m < 1000000 && m >= 10000) format(str, sizeof str, "~g~Geld ~w~00%d", m);
    else if(m < 10000000 && m >= 1000000) format(str, sizeof str, "~g~Geld ~w~0%d", m);
    else if(m < 100000000 && m >= 10000000) format(str, sizeof str, "~g~Geld ~w~%d", m);
    else format(str, sizeof str, "~g~Euro~w~%d", m);
    TextDrawSetString(MoneyDraw[playerid], str);
    return 1;
    }


    Und natürlich unter meinem Timer:

    UpdatePlayerMoneyTextdraw(i);


    wäre das so richtig?
    Ich habs jetzt ma so frei versucht zu schreiben ...


    Lg
    J0a9

  • Hallo ,


    ah ok habs verstanden xD war glaub ein denk fehler von mir xD


    Du sag mal vl könntest du mir doch bei einer Sache helfen und zwar hab ich es grad getestet funktioniert auch alles derzeitig Prima!
    Außer ich hab z.B.: 10.000Euro und gebe per Adminbefehl 4Euro dazu dann bekomm ich eine Anzeige mit der Zahl nur 4 und die 10.000Euro sind weg...


    Könntest du mir eventuell dabei helfen?


    Lg
    J0a9

  • ICy.,
    Das würde funktonieren, aber deine Methode ist besser, er erstellt nähmlich einen Indirekten PlayerTextDraw durch "MoneyDraw[playerid]",
    Aber mein Tipp, wie Icy. bereits gesagt hat, verwende Payertextdraws.


    //Edit: 2 Frage:
    HAst du mit SetPlayerMoney gearbeitet oder GIvePlayerMoney ?

    Mit freundlichen Grüßen,
    Chriss aka. xDesertx

  • Hallo,


    wofür Geldgebe Befehl?


    Aber wenns nötig ist :

    ocmd:givecash(playerid,params[])
    {
    if(!isPlayerAnAdmin(playerid,RANG)) return ShowInfoDialog(playerid,"Zugriff Verweigert","Du bist kein Admin, oder hast nicht\ndas Recht dazu, jemanden Geld zu geben!");
    new pID,Geld,Grund[28],string[128],string2[128];
    if(sscanf(params,"uis",pID,Geld,Grund)) return SendClientMessage(playerid,COLOR_GRAD1,"Benutzung: /givecash [playerid] [geld] [grund]");
    ConsumingMoney[pID] = 1; GivePlayerMoney(pID, Geld);
    format(string,sizeof(string),"AdmCmd: %s hat %s $%d gegeben. GRUND: %s",SpielerName(playerid),SpielerName(pID),Geld,Grund);
    format(string2,sizeof(string2),"ADMIN %s hat dir $%d gegeben! GRUND: %s",SpielerName(playerid),Geld,Grund);
    SendAdminMessage(COLOR_LIGHTRED,string); SendClientMessage(pID,COLOR_YELLOW,string2);
    return 1;
    }



  • Deswegen^^


    Verändere deinen UpdatePlayerMoneyTextdraw zu:


    stock UpdatePlayerMoneyTextdraw(playerid)
    {
    new m = GetPlayerMoney(playerid), str[50];
    if(m == 0) format(str, sizeof str, "~r~00000000");
    else if(m < 10 && m > 0) format(str, sizeof str, "~g~Geld ~w~0000000%d", m);
    else if(m < 100 && m >= 10) format(str, sizeof str, "~g~Geld ~w~000000%d", m);
    else if(m < 1000 && m >= 100) format(str, sizeof str, "~g~Geld ~w~00000%d", m);
    else if(m < 10000 && m >= 1000) format(str, sizeof str, "~g~Geld ~w~0000%d", m);
    else if(m < 100000 && m >= 10000) format(str, sizeof str, "~g~Geld ~w~000%d", m);
    else if(m < 1000000 && m >= 10000) format(str, sizeof str, "~g~Geld ~w~00%d", m);
    else if(m < 10000000 && m >= 1000000) format(str, sizeof str, "~g~Geld ~w~0%d", m);
    else if(m < 100000000 && m >= 10000000) format(str, sizeof str, "~g~Geld ~w~%d", m);
    else format(str, sizeof(str), "~g~Euro~w~%d", m);
    printf("%s", str);
    TextDrawSetString(MoneyDraw[playerid], str);
    return 1;
    }
    Und schick dann was im Log steht.

    Mit freundlichen Grüßen,
    Chriss aka. xDesertx


  • new GivenMoney [MAX_PLAYERS],
    moneytimer [MAX_PAYERS];


    moneytimer[playerid] = SetTimerEx("GeldGeben1",500,1,"ii", playerid, Betrag);


    forward GeldGeben1(playerid, Betrag);
    public GeldGeben1(playerid, Betrag){
    new money = (Betrag / 10);
    GivenMoney [playerid] += money;
    GivePlayerMoney (playerid, money);
    if (GivenMoney [playerid] == Betrag){
    rerurn KillTimer (moneytimer [playerid]);
    }
    return 1;
    }


    Dies ist jedoch auch nicht gerade gut..
    Du müsstet jetzt für jeden Betrag etwas anderes machen. .
    Ist der Betrag unter 100$, so kannst du ihm das auf 2 Schlägen geben, darunter bspw. 10$ auf einem Schlag..
    Das ist ziemlich unnötig und ressourcenfressend..


    #Handy, deswegen is Code so kacke und so wenig dazugeschrieben ;)