Arrays in Enums benutzen

In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums
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,


    ich habe folgendes Enum:

    enum SpielerDaten
    {
    pName[MAX_PLAYER_NAME],
    pLevel,
    pGeld,
    Float:pHealth,
    pWeaponId[13],
    pWeaponAmmo[13]
    }


    In pWeaponId[13] würde ich gerne alle Waffen während der Laufzeit abspeichern, die der Spieler hat.
    Analog dazu in pWeaponAmmo[13] die jeweilige Anzahl der "Waffen" (Das mache ich mit zwei Variablen, da zweidimensionale Arrays nicht erlaubt sind in Enums).


    Davon gibt es natürlich noch eine Variable:


    new SpielerInfo[MAX_PLAYERS][SpielerDaten];


    Wenn der Spieler in ein bestimmtes Pickup läuft, will ich, dass alle aktuellen Waffen des Spielers in seinem Enum abgespeichert werden:

    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    if (pickupid == pickup_parcel)
    {
    new WaffenP[13][2];
    new Waffen_namen[13][128];
    new weapon_slot = 1;

    for (new i = 0; i < 13; i++)
    {
    GetPlayerWeaponData(playerid, i, WaffenP[i][0], WaffenP[i][1]);
    if (WaffenP[i][0] > 0 && WaffenP[i][1] > 0)
    {
    GetWeaponNameDE(WaffenP[i][0], Waffen_namen[weapon_slot]);
    printf(Waffen_namen[weapon_slot]);

    SpielerInfo[playerid][weaponId:weapon_slot] = WaffenP[i][0];
    SpielerInfo[playerid][weaponAmmo:weapon_slot] = WaffenP[i][1];

    new test[256];
    new test1[256];
    format(test, sizeof(test), "%i", SpielerInfo[playerid][weaponId:weapon_slot]);
    printf(test);
    format(test1, sizeof(test1), "%i", SpielerInfo[playerid][weaponAmmo:weapon_slot]);
    printf(test1);

    weapon_slot++;
    }
    }
    }
    return 1;
    }


    Allerdings speichert er die Waffendaten falsch im Enum ab..


    Zur Info: GetWeaponNameDE ist nichts als die normale GetWeaponName Funktion, nur returne ich die deutschen Namen davon.


    Gruß
    legend

  • SpielerInfo[playerid][pWeaponId][weapon_slot] = WaffenP[i][0];
    SpielerInfo[playerid][pWeaponAmmo][weapon_slot] = WaffenP[i][1];


    Analog dazu die anderen auch.


    Hatte Gestern zwar so nicht funktioniert - jetzt aber schon. Welch ein Wunder. Dankeschön!


    Du musst die Waffen Informationen nicht erst zwischenspeichern.
    Du kannst es auch direkt in dein Enum laden lassen.
    GetPlayerWeaponData(playerid, i, SpielerInfo[playerid][weaponId][i], SpielerInfo[playerid][weaponAmmo][i]);


    Ist mir schon klar, war auch nur zu Testzwecken - dankeschön ;)
    Allerdings würde dein Code nicht mein gewünschtes Ziel erreichen. Du hättest dann teilweise Array-Indexe mit leerem Inhalt. Allerdings möchte ich das Spieler-Array lückenlos befüllen.


    Eine weitere Frage: Gibt es keine sauberere Möglichkeit die Waffen des Spielers zu speichern?

  • Allerdings würde dein Code nicht mein gewünschtes Ziel erreichen. Du hättest dann teilweise Array-Indexe mit leerem Inhalt. Allerdings möchte ich das Spieler-Array lückenlos befüllen.


    Wenn du meinst :rolleyes:
    Die Felder sind trozdem da, ob du nun einen Wert von 0 oder 123 reinschreibst. Der Speicher für das Feld ist trozdem benutzt und verbraucht.
    Und wenn du vorher dadrauf eine Waffe hattest, nun aber nichtmehr. Speicherst du weiterhin Waffen die er garnicht mehr hat, weil du nur die Slots neu beschreibst wo Waffen drin sind. Denk also nochmal drüber nach ;)