Ein kleiner Bug mit statuen

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 liebe Breadfisher,
    Ich habe einen kleinen Bug, ich habe ein System geschrieben.
    Wo man Statuen aufheben kann und man 10k bekommt..
    Und nun ist das so, wenn ich eine Statue lege und dann noch eine dann wird die neuste nur aufgehoben und die anderen bleiben dann und kann man nicht aufheben?


    Woran kann das liegen?


    Das ist der Befehl:
    if (strcmp("/statue", cmdtext, true, 10) == 0)
    {
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    StatuePickup = CreatePickup(1276, 23, x+2, y, z);
    SendClientMessage(playerid, COLOR_BLAU, "Die Statue wurde platziert!!");
    return 1;
    }


    Mehr transparents zu der Community!
    Aber bitte künftig: Transparenz und nicht Transparents

  • Mach es mit einem Array. 1.: Ganz oben im Script erstellen:
    #define MAX_STATUEN 500 //Kannst du beliebig ändern. Höhere Zahlen können jedoch in der Schleife zu hohem Leistungsverlust führen
    new StatuenObj[MAX_STATUEN];
    new StatuenPick[MAX_STATUEN];
    Dann machst du eine Schleife:
    for(new i; i < MAX_STATUEN; i++)
    {
    if(!IsValidObject(StatuenObj[i])
    {
    StatuenObj[i] = CreateObject(...);
    StatuenPick[i] = CreatePickup(...);
    return 1;
    }
    }


    Beim Aufheben auch eine Schleife:
    for(new i; i < MAX_STATUEN; i++)
    {
    if(pickupid == StatuenObj[i])
    {
    //Statue aufheben lassen
    DestroyObject(StatuenObj[i]);
    DestroyPickup(StatuenPick[i]);
    return 1;
    }
    }


    Ich hoffe dass es so richtig ist und einigermaßen funktionieren wird.


    Mfg:
    MomoGrimm

  • Ich wusste das ihr das fragt
    Ja ich hebe das so auf:


    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    if(pickupid == StatuePickup)
    {
    DestroyPickup(StatuePickup);
    new a1[128];
    GetPlayerName(playerid, a1, sizeof(a1));
    format(a1, sizeof(a1), "~g~ %s ~g~hat die ~r~Statue ~g~GEFUNDEN", a1);
    GameTextForAll(a1,2000,1);
    SendClientMessage(playerid, COLOR_GRÜN, "Du hast die Statue gefunden!");
    SendClientMessage(playerid, COLOR_GRÜN, "Du hast 10.000$ erhalten!");
    GivePlayerMoney(playerid, 10000);
    }
    return 1;
    }

    for(new i; i < MAX_STATUEN; i++)
    {
    if(!IsValidObject(StatuenObj)
    {
    StatuenObj = CreateObject(...);
    StatuenPick = CreatePickup(...);
    return 1;
    }
    }


    Was ist den mit Obj, was muss ich den da einfügen?



    Ich habe das alles eingefügt, aber ich kann immernoch nur eine Aufheben.
    //edit
    //edit
    //push! :D
    //push
    //push
    //push
    //push ich bitte um hilfe...


    Mehr transparents zu der Community!
    Aber bitte künftig: Transparenz und nicht Transparents

    6 Mal editiert, zuletzt von Kevin_CaruZo ()

  • Schaue dir das mal an.
    #define MAX_STATUEN 10 //Du kannst jetzt maximal 10 Statuen platzieren, wenn mehr => erhöhen
    new StatPick[MAX_STATUEN];



    //Beim setzen:
    for(new i;i<MAX_STATUEN;i++)
    {
    if(StatPick[i] > 0)continue;
    StatPick[i] = CreatePickup(...);
    return 1;
    }



    //Beim aufheben:
    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    for(new i;i<MAX_STATUEN;i++)
    {
    if(pickupid != StatPick[i])continue;
    DestroyPickup(StatPick[i]);
    new a1[128];
    GetPlayerName(playerid, a1, sizeof(a1));
    format(a1, sizeof(a1), "~g~ %s ~g~hat die ~r~Statue ~g~GEFUNDEN", a1);
    GameTextForAll(a1,2000,1);
    SendClientMessage(playerid, COLOR_GRÜN, "Du hast die Statue gefunden!");
    SendClientMessage(playerid, COLOR_GRÜN, "Du hast 10.000$ erhalten!");
    GivePlayerMoney(playerid, 10000);
    return 1;
    }
    return 1;
    }
    Das war ja auch logisch, das du immer nur den neusten aufsammeln konntest, weil der Wert ja immer überschrieben wurde bei einer Variable.
    Schaue dir das mal an, was ich oben geschrieben habe, das sollte klappen.

    Einmal editiert, zuletzt von AirM4X ()