Inventory

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
  • Den itemName kannst du aus dem enum "enum_Items" entfernen.
    Dann:
    new Items[MAX_PLAYER_ITEMS][enum_Items];
    zu:
    new Items[MAX_PLAYERS][MAX_PLAYER_ITEMS][enum_Items];


    Und in itemsOnPlayerItemsLoad:
    cache_get_value_name(i, "name", Items[i][itemName], 24);
    entfernen.


    Alle Items[i] zu Items[playerid][i] ändern.
    Über das mysql_tquery gibst du die playerid mit.


    Dann dort:
    printf("[OnPlayerItemsLoad] itemid: %d | name: %s | amount: %d", Items[i][itemID], Items[i][itemName], Items[i][itemAmount]);
    zu:
    printf("[OnPlayerItemsLoad] itemid: %d | name: %s | amount: %d", Items[playerid][i][itemID], getItemName(Items[playerid][i][itemID]), Items[playerid][i][itemAmount]);


    Folgende Funktion unten im Gamemode einfügen:
    stock getItemName(id)
    {
    new str[24];
    format(str, sizeof(str), "?Unbekannt?");
    for(new i = 0; i < sizeof(ItemList); i++)
    {
    if(ItemList[i][itemlID] == id)
    {
    format(str, sizeof(str), ItemList[i][itemlName]);
    break;
    }
    }
    return str;
    }

  • Vielen Dank! :thumbup:
    Um nun auch andere Variablen wie z.B. das Gewicht, Funktion und Beschreibung zu beziehen, soll ich dann die Funktion entsprechend umschreiben? Oder was wäre die beste Lösung deiner Meinung nach?

  • Um nun auch andere Variablen wie z.B. das Gewicht, Funktion und Beschreibung zu beziehen, soll ich dann die Funktion entsprechend umschreiben?

    Ja, entweder du erstellst Funktionen dafür nach gleichem Prinzip (die dann eben Gewicht, etc... zurückgeben), oder du erstellst folgende Funktion:
    stock getItemIndex(id)
    {
    for(new i = 0; i < sizeof(ItemList); i++)
    {
    if(ItemList[i][itemlID] == id)
    {
    return i;
    }
    }
    return -1;
    }


    Das wäre dann etwas performanter, so zuzugreifen, allerdings nur, wenn es zwei oder mehr Eigenschaften des Items betrifft:
    Anstelle von:
    printf("[OnPlayerItemsLoad] itemid: %d | name: %s | amount: %d", Items[playerid][i][itemID], getItemName(Items[playerid][i][itemID]), Items[playerid][i][itemAmount]);
    Wäre es dann:
    new idx = getItemIndex(Items[playerid][i][itemID]);
    if(idx != -1) printf("[OnPlayerItemsLoad] itemid: %d | name: %s | amount: %d", Items[playerid][i][itemID], ItemList[idx][itemlName], Items[playerid][i][itemAmount]);


    Das ist dann allerdings etwas unübersichtlicher.



    Da sich die Anzahl der Items ja in Grenzen hält, würde ich da eher zu etwas unperformanteren - dafür aber übersichtlicheren - Lösung tendieren, einzelne Funktionen "getItem..." zu erstellen.