Inventar System

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 Brotfische,


    Ich habe eine Frage zu meinem Inventar System. Undzwar möchte ich das alle Inventar Items in einem Dialog angezeigt werden. Wenn ein Item auf 0 ist, möchte ich nicht das es im Dialog angezeigt wird. Jetzt weiß ich nicht wie ich das ganau machen soll..


    Besehende Codes bis jetzt:

    enum ItemsEnum{
    i_schlagring,
    i_golfschlaeger,
    i_schlagstock,
    i_messer,
    i_baseballschlaeger,
    i_schaufel,
    i_katana,
    i_9mm_pistole,
    i_schalldaempfer_9mm,
    i_Dagle,
    i_schrotflinte1,
    i_schrotflinte2,
    i_uzi,
    i_mp5,
    i_ak47,
    i_m4,
    i_tec9,
    i_gewehr,
    i_scharfschaetzengewehr,
    i_rpg,
    i_feuerloescher,
    i_kamera,
    i_fallschirm,
    i_pizza,
    i_brot,
    i_banane,
    i_steak
    }


    new ItemInfo[MAX_PLAYERS][ItemsEnum];


    //Spieler Laden
    new _query[300];
    format(_query,sizeof(_query),"SELECT * FROM playerinventar WHERE spielername='%s'",getPlayerName(playerid));
    mysql_function_query(dbhandle,_query,true,"OnPlayerItemsLoad","d",playerid);



    forward OnPlayerItemsLoad(playerid);
    public OnPlayerItemsLoad(playerid)
    {
    new num_fields,num_rows;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(!num_rows)return 1;
    //Items laden
    ItemInfo[playerid][i_schlagring] = cache_get_field_content_int(0,"item_schlagring",dbhandle);
    printf("item_schlagring | Anzahl: %d",ItemInfo[playerid][i_schlagring]);
    ItemInfo[playerid][i_golfschlaeger] = cache_get_field_content_int(0,"item_golfschlaeger",dbhandle);
    printf("item_golfschlaeger | Anzahl: %d",ItemInfo[playerid][i_golfschlaeger]);
    return 1;
    }
    ocmd:inv(playerid,params[])
    {
    for(new i=0; i<sizeof(ItemInfo[]); i++)
    {
    if(ItemInfo[playerid][ItemsEnum:i]==0)return SendClientMessage(playerid,C_Error,"Du hast keine Gegenstände in deinem Inventar.");
    }
    new string[128];
    //Ab hier komm ich net weiter :(
    format(string,sizeof(string),"%s (%i)\n%s (%i)\n",string, /*items*/);
    ShowPlayerDialog(playerid,DIALOG_Inventar,DIALOG_STYLE_LIST,"Inventar",string,"Wählen","Abbrechen");
    return 1;
    }


    Ich hoffe es kann mir jemand helfen :)


    MfG :thumbup:


    Mit freundlichen Grüßen
    German_ScripterHD

  • ocmd:inv(playerid,params[])
    {
    new string[256];
    for(new i=0; i<sizeof(ItemInfo[]); i++)
    {
    if(ItemInfo[playerid][ItemsEnum:i]==0) continue;
    format(string,sizeof(string),"%s%s (%i)\n",string, ItemName(i), ItemInfo[playerid][ItemsEnum:i]);
    }
    if(!strlen(string)) return SendClientMessage(playerid,C_Error,"Du hast keine Gegenstände in deinem Inventar.");
    ShowPlayerDialog(playerid,DIALOG_Inventar,DIALOG_STYLE_LIST,"Inventar",string,"Wählen","Abbrechen");
    return 1;
    }


    stock ItemName(i)
    {
    new name[32];
    switch(i)
    {
    case 0: name = "Schlagring";
    case 1: name = "Golfschlaeger";
    default: name = "Unbekannt";
    }
    return name;
    }

  • Vielen Dank :)


    Ich habe mal noch ne Frage :)
    Undzwar kann man sowas wie Kategorien in ein Dialog einfügen z.B: "Essen / Getränke", "Legale Waffen", "Illegale Waffen" und wenn man auf die Kategorie Klickt, werden alle Items angezeigt die man besitzt (also alle die auf 0 sind nicht).


    Beispiel:


    Dialog Inventar
    - Essen Getränke
    - Legale Waffen
    - Illegale Waffen


    Klickt man jetzt z.B auf Essen / Getränke:



    Dialog Inventar
    | Essen Getränke
    - Steak (15)
    - Pizza (3)
    - Legale Waffen
    - Illegale Waffen


    Ist sowas möglich, wenn ja wie?


    MfG :thumbup:


    Mit freundlichen Grüßen
    German_ScripterHD

  • Ich hab dir das mal gebastelt.
    new bool:ItemDialogOpen[MAX_PLAYERS][3];


    Dort wo der Dialog angezeigt wird:
    ShowPlayerDialog(playerid,DIALOG_Inventar,DIALOG_STYLE_LIST,"Inventar","Legale Waffen\nIllegale Waffen\nEssen","Wählen","Abbrechen");
    SetPVarString(playerid, "ItemD_0", "Legale Waffen");
    SetPVarString(playerid, "ItemD_1", "Illegale Waffen");
    SetPVarString(playerid, "ItemD_2", "Essen");
    for(new i=0; i<3; i++) ItemDialogOpen[playerid][i] = false;Nur das.


    Und dann:
    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == DIALOG_Inventar)
    {
    if(!response) return 1;
    new tmp[64], item[64];
    format(tmp, sizeof(tmp), "ItemD_%d", listitem);
    GetPVarString(playerid, tmp, item, sizeof(item));
    if(!strcmp(item, "Legale Waffen"))
    {
    ItemDialogOpen[playerid][0] = !ItemDialogOpen[playerid][0];
    }
    else if(!strcmp(item, "Illegale Waffen"))
    {
    ItemDialogOpen[playerid][1] = !ItemDialogOpen[playerid][1];
    }
    else if(!strcmp(item, "Essen"))
    {
    ItemDialogOpen[playerid][2] = !ItemDialogOpen[playerid][2];
    }
    else
    {
    if(!strcmp(item, "Schlagring"))
    {
    SendClientMessage(playerid, 0xFF0000FF, "Schlagring");
    }
    else if(!strcmp(item, "Golfschlaeger"))
    {
    SendClientMessage(playerid, 0xFF0000FF, "Golfschlaeger");
    }
    //Usw...
    return 1;
    }
    new string[1024], count;
    format(string, sizeof(string), "Legale Waffen\n");
    SetPVarString(playerid, "ItemD_0", "Legale Waffen");
    count++;
    if(ItemDialogOpen[playerid][0])
    {
    for(new i=0; i<9; i++)
    {
    if(ItemInfo[playerid][ItemsEnum:i]==0) continue;
    format(string,sizeof(string),"%s -%s (%i)\n",string, ItemName(i), ItemInfo[playerid][ItemsEnum:i]);
    format(tmp, sizeof(tmp), "ItemD_%d", count);
    SetPVarString(playerid, tmp, ItemName(i));
    count++;
    }
    }
    format(string,sizeof(string),"%sIllegale Waffen\n",string);
    format(tmp, sizeof(tmp), "ItemD_%d", count);
    SetPVarString(playerid, tmp, "Illegale Waffen");
    count++;
    if(ItemDialogOpen[playerid][1])
    {
    for(new i=9; i<23; i++)
    {
    if(ItemInfo[playerid][ItemsEnum:i]==0) continue;
    format(string,sizeof(string),"%s -%s (%i)\n",string, ItemName(i), ItemInfo[playerid][ItemsEnum:i]);
    format(tmp, sizeof(tmp), "ItemD_%d", count);
    SetPVarString(playerid, tmp, ItemName(i));
    count++;
    }
    }
    format(string,sizeof(string),"%sEssen\n",string);
    format(tmp, sizeof(tmp), "ItemD_%d", count);
    SetPVarString(playerid, tmp, "Essen");
    count++;
    if(ItemDialogOpen[playerid][2])
    {
    for(new i=23; i<sizeof(ItemInfo[]); i++)
    {
    if(ItemInfo[playerid][ItemsEnum:i]==0) continue;
    format(string,sizeof(string),"%s -%s (%i)\n",string, ItemName(i), ItemInfo[playerid][ItemsEnum:i]);
    format(tmp, sizeof(tmp), "ItemD_%d", count);
    SetPVarString(playerid, tmp, ItemName(i));
    count++;
    }
    }
    ShowPlayerDialog(playerid,DIALOG_Inventar,DIALOG_STYLE_LIST,"Inventar",string,"Wählen","Abbrechen");
    return 1;
    }
    return 1;
    }


    Sieht dann so aus:

    Sind natürlich nur Test-Daten.

  • Okay :) Super :good:


    Jetzt habe ich noch eine Frage undzwar:


    Bei DIALOG_Invetar.. habe ich noch folgendes eingefügt:

    if(!strcmp(item, "Schlagring"))
    {
    //Eingefügt:
    ShowPlayerDialog(playerid,DIALOG_InventarMenu,DIALOG_STYLE_LIST,"Inventar-Menü Erweitert","Benutzen\nWegwerfen\nInformation","Wählen","Abbrechen");
    SendClientMessage(playerid, 0xFF0000FF, "Schlagring");
    }
    else if(!strcmp(item, "Golfschlaeger"))
    {
    //Eingefügt:
    ShowPlayerDialog(playerid,DIALOG_InventarMenu,DIALOG_STYLE_LIST,"Inventar-Menü Erweitert","Benutzen\nWegwerfen\nInformation","Wählen","Abbrechen");
    SendClientMessage(playerid, 0xFF0000FF, "Golfschlaeger");
    }
    //Usw...


    Jetzt komm ich nicht ganz mit den Item Name klar, wie ich abfragen kann ob es das und das Item ist.


    if(dialogid == DIALOG_InventarMenu)
    {
    if(!response) return 1;
    switch(listitem)
    {
    case 0:
    {
    if(item== /*??*/)
    {
    //Benutzen
    //z.B: GivePlayerWeapon(playerid,/*#define items*/,199);
    }
    }
    case 1:
    {
    if(item== /*??*/)
    {
    //Wegwerfen
    //TropItem (Funktion habe ich)
    }
    }
    case 2:
    {
    if(item== /*??*/)
    {
    //Info
    //SendClientMessage(playerid,Farbe,"LALALA"); Ist klar.
    }
    }
    }
    }


    MfG :thumbup:


    Mit freundlichen Grüßen
    German_ScripterHD

  • if(!strcmp(item, "Schlagring"))
    {
    //Eingefügt:
    ShowPlayerDialog(playerid,DIALOG_InventarMenu,DIALOG_STYLE_LIST,"Inventar-Menü Erweitert","Benutzen\nWegwerfen\nInformation","Wählen","Abbrechen");
    SendClientMessage(playerid, 0xFF0000FF, "Schlagring");
    PickedItem[playerid] = 0;
    }
    else if(!strcmp(item, "Golfschlaeger"))
    {
    //Eingefügt:
    ShowPlayerDialog(playerid,DIALOG_InventarMenu,DIALOG_STYLE_LIST,"Inventar-Menü Erweitert","Benutzen\nWegwerfen\nInformation","Wählen","Abbrechen");
    SendClientMessage(playerid, 0xFF0000FF, "Golfschlaeger");
    PickedItem[playerid] = 1;
    }
    //Usw...


    So weißt du dann, welches Item der Spieler ausgewählt hat.