Anzahl in Textdraw

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 zusammen
    Heute stehe ich vor einem kleinen Problem.
    Ich möchte in einem Textdraw anzeigen lassen wie viele Pakete noch übrig sind.
    Kurze erklärung.
    Es werden 100 Pakete erstellt. Diese werden in einem Textdrwar angezeigt. Wenn nun ein USer ein Paket aufnimmt soll sich die angezeigte 100 in eine 99 ändern usw.
    Hänge da gerade ien wenig in der Luft. Ich möchte meinen Scripter nicht mit solchen Kleinigkeiten aufhalten, daher frage ich euch.


    Hier der Code, den ich bisher habe.
    #define MAX_PAKETE 100
    new Pakete[MAX_PAKETE];
    for(new i = 0; i<MAX_PAKETE; i++)
    {
    if(i == 100) break;
    Pakete[i] = CreatePickup(1279,2, 353.71530, -1635.67175, 32.18424);
    }
    public updateanzeige()
    {
    for(new i = 0; i<MAX_PAKETE; i++)
    {
    new string[3];
    format(string, sizeof(string), "%d", Pakete[i]);
    TextDrawSetString(Textdraw2, string);
    }
    }


    Wäre nett, wenn mir einer vielleicht den Code richtig erstellen könnte, damit ich es mir für die Zukunft einprägen kann. Denn so lern ich besser. Klingt komisch, ist aber so. ;)
    §Vermutlichist der gesamte Ansatz vollkommen falsch. :S

  • #define MAX_PAKETE 100


    new Paket[MAX_PAKETE];
    new Pakete = 100;


    public updateanzeige()
    {
    new string[3];
    format(string, sizeof(string), "%d", Pakete);
    TextDrawSetString(Textdraw2, string);


    }


    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    for(new i = 0; i<MAX_PAKETE; i++)
    {
    if(Paket[i] == pickupid)
    {
    DestroyPickup(pickupid);
    Pakete --;
    break;
    }
    }
    return 1;
    }



    für updateanzeige brauchst du noch ein timer




    edit:



    so ist das doch sinnvoller


    #define MAX_PAKETE 100


    new Paket[MAX_PAKETE];
    new Pakete = MAX_PAKETE;



    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    for(new i = 0; i<MAX_PAKETE; i++)
    {
    if(Paket[i] == pickupid)
    {
    DestroyPickup(pickupid);
    Pakete --;

    new string[3];
    format(string, sizeof(string), "%d", Pakete);
    TextDrawSetString(Textdraw2, string);
    break;
    }
    }
    return 1;
    }

  • Jap. Hab auch gerade gesehen. Danke.


    //edit
    Funktioniert nicht. Die anzeige bleibt bei 100. Egal wieviele ich einsammel. Auch wenn ich eins im Script raus nehme, bleibt die Anzahl konstant auf 100.



    #define MAX_PAKETE 100
    new Paket[MAX_PAKETE+1]={MAX_PAKETE,...};


    updateanzeige(){
    new string[3];
    format(string, 3, "%d",--Paket[MAX_PAKETE]);
    TextDrawHideForAll (Textdraw2);
    TextDrawSetString(Textdraw2, string);
    TextDrawShowForAll(Textdraw2);
    return 1;
    }
    public OnPlayerPickUpPickup(playerid, pickupid){
    new i;
    for(; i != MAX_PAKETE; ++i)if(Paket[i] == pickupid)return DestroyPickup(pickupid),updateanzeige();
    return 1;
    }


    Das Problem ist das zu einen die FUnktion nicht aufgerufen wird und zum anderen musst du erst TextDrawHideForAll benutzen danach den string
    setzen und erneut anzeigen lassen


    //edit an sich reicht es das textdraw nochmal erneut anziegen zulassen ohne davor TextDrawHideForAll zu benutzen.

    2 Mal editiert, zuletzt von IPrototypeI ()

  • Zitat

    Das Problem ist das zu einen die FUnktion nicht aufgerufen wird und zum anderen musst du erst TextDrawHideForPlayer benutzen danach den string
    setzen und erneut anzeigen lassen


    da liegst du falsch, TextDrawSetString reicht


    versuchs mal mit meiner lösung, updateanzeige kann da ganz raus weil alles in onplayerpickup drin ist


    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    for(new i = 0; i<MAX_PAKETE; i++)
    {
    if(Paket[i] == pickupid)
    {
    DestroyPickup(pickupid);
    Pakete --;

    new string[3];
    format(string, sizeof(string), "%d", Pakete);
    TextDrawSetString(Textdraw2, string);
    break;
    }
    }
    return 1;
    }

  • Ich danke euch allen für die Hilfe. Ich hab das Problem gelöst bekommen.
    Es lag einfach nur daran, dass ich jedes Pickup per Schleife erstellt habe und somit jedes Pickup die selbe ID hatte. Nun hab ich die alle in ein Float gepackt und somit klappt es nun wie gewollt. Danke euch nochmals. :thumbup: