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
  • Hey,


    ich hab jetzt ein Inventarsystem gemacht.
    Es werden zahlen in 5 verschiedenen Zellen in der DB gespeichert.


    Naja. Aufrufen und anzeigen funktioniert, aber wenn ich was auswähle:


    Ist ein Dialog mit 5 Zeilen, 0 wäre "Leer", also kein item, 1 - Fertiggericht, 2-Zigaretten, 3-Flasche Wasser


    So hab ich es bei OnDialogResponse Abgefragt:


    Spoiler anzeigen
    if(listitem==0)
    {
    switch(SpielerInfo[playerid][pItem1])
    {
    case 0: SendClientMessage(playerid,grau,"Du hast kein Item im Slot 1!");
    case 1:
    {
    SendClientMessage(playerid,grau,"Du hast ein Fertiggericht zu dir genommen.");
    GivePlayerHealth(playerid,50);
    SpielerInfo[playerid][pItem1] = 0;
    return 1;
    }
    case 2:
    {
    if(zigaretten[playerid] == 1)
    {
    SendClientMessage(playerid,grau,"Du hast dir deine letzte Zigarette angezündet.");
    SetPlayerSpecialAction(playerid,SPECIAL_ACTION_SMOKE_CIGGY);
    SpielerInfo[playerid][pZig] -= 1;
    SpielerInfo[playerid][pItem2] = 0;
    return 1;
    }
    else
    {
    SendClientMessage(playerid,grau,"Du hast dir eine Zigarette angezündet.");
    SetPlayerSpecialAction(playerid,SPECIAL_ACTION_SMOKE_CIGGY);
    SpielerInfo[playerid][pZig] -= 1;
    return 1;
    }
    }
    case 3:
    {
    SendClientMessage(playerid,grau,"Du hast dein Wasser getrunken.");
    GivePlayerHealth(playerid,25);
    SpielerInfo[playerid][pItem3] = 0;
    return 1;
    }
    }
    switch(SpielerInfo[playerid][pItem2])
    {
    case 0: SendClientMessage(playerid,grau,"Du hast kein Item im Slot 2!");
    case 1:
    {
    SendClientMessage(playerid,grau,"Du hast ein Fertiggericht zu dir genommen.");
    GivePlayerHealth(playerid,50);
    SpielerInfo[playerid][pItem1] = 0;
    return 1;
    }
    case 2:
    {
    if(zigaretten[playerid] == 1)
    {
    SendClientMessage(playerid,grau,"Du hast dir deine letzte Zigarette angezündet.");
    SetPlayerSpecialAction(playerid,SPECIAL_ACTION_SMOKE_CIGGY);
    SpielerInfo[playerid][pZig] -= 1;
    SpielerInfo[playerid][pItem2] = 0;
    return 1;
    }
    else
    {
    SendClientMessage(playerid,grau,"Du hast dir eine Zigarette angezündet.");
    SetPlayerSpecialAction(playerid,SPECIAL_ACTION_SMOKE_CIGGY);
    SpielerInfo[playerid][pZig] -= 1;
    return 1;
    }
    }
    case 3:
    {
    SendClientMessage(playerid,grau,"Du hast dein Wasser getrunken.");
    GivePlayerHealth(playerid,25);
    SpielerInfo[playerid][pItem3] = 0;
    return 1;
    }
    }
    switch(SpielerInfo[playerid][pItem3])
    {
    case 0: SendClientMessage(playerid,grau,"Du hast kein Item im Slot 3!");
    case 1:
    {
    SendClientMessage(playerid,grau,"Du hast ein Fertiggericht zu dir genommen.");
    GivePlayerHealth(playerid,50);
    SpielerInfo[playerid][pItem1] = 0;
    return 1;
    }
    case 2:
    {
    if(zigaretten[playerid] == 1)
    {
    SendClientMessage(playerid,grau,"Du hast dir deine letzte Zigarette angezündet.");
    SetPlayerSpecialAction(playerid,SPECIAL_ACTION_SMOKE_CIGGY);
    SpielerInfo[playerid][pZig] -= 1;
    SpielerInfo[playerid][pItem2] = 0;
    return 1;
    }
    else
    {
    SendClientMessage(playerid,grau,"Du hast dir eine Zigarette angezündet.");
    SetPlayerSpecialAction(playerid,SPECIAL_ACTION_SMOKE_CIGGY);
    SpielerInfo[playerid][pZig] -= 1;
    return 1;
    }
    }
    case 3:
    {
    SendClientMessage(playerid,grau,"Du hast dein Wasser getrunken.");
    GivePlayerHealth(playerid,25);
    SpielerInfo[playerid][pItem3] = 0;
    return 1;
    }
    }
    switch(SpielerInfo[playerid][pItem4])
    {
    case 0: SendClientMessage(playerid,grau,"Du hast kein Item im Slot 4!");
    case 1:
    {
    SendClientMessage(playerid,grau,"Du hast ein Fertiggericht zu dir genommen.");
    GivePlayerHealth(playerid,50);
    SpielerInfo[playerid][pItem1] = 0;
    return 1;
    }
    case 2:
    {
    if(zigaretten[playerid] == 1)
    {
    SendClientMessage(playerid,grau,"Du hast dir deine letzte Zigarette angezündet.");
    SetPlayerSpecialAction(playerid,SPECIAL_ACTION_SMOKE_CIGGY);
    SpielerInfo[playerid][pZig] -= 1;
    SpielerInfo[playerid][pItem2] = 0;
    return 1;
    }
    else
    {
    SendClientMessage(playerid,grau,"Du hast dir eine Zigarette angezündet.");
    SetPlayerSpecialAction(playerid,SPECIAL_ACTION_SMOKE_CIGGY);
    SpielerInfo[playerid][pZig] -= 1;
    return 1;
    }
    }
    case 3:
    {
    SendClientMessage(playerid,grau,"Du hast dein Wasser getrunken.");
    GivePlayerHealth(playerid,25);
    SpielerInfo[playerid][pItem3] = 0;
    return 1;
    }
    }
    switch(SpielerInfo[playerid][pItem5])
    {
    case 0: SendClientMessage(playerid,grau,"Du hast kein Item im Slot 5!");
    case 1:
    {
    SendClientMessage(playerid,grau,"Du hast ein Fertiggericht zu dir genommen.");
    GivePlayerHealth(playerid,50);
    SpielerInfo[playerid][pItem1] = 0;
    return 1;
    }
    case 2:
    {
    if(zigaretten[playerid] == 1)
    {
    SendClientMessage(playerid,grau,"Du hast dir deine letzte Zigarette angezündet.");
    SetPlayerSpecialAction(playerid,SPECIAL_ACTION_SMOKE_CIGGY);
    SpielerInfo[playerid][pZig] -= 1;
    SpielerInfo[playerid][pItem2] = 0;
    return 1;
    }
    else
    {
    SendClientMessage(playerid,grau,"Du hast dir eine Zigarette angezündet.");
    SetPlayerSpecialAction(playerid,SPECIAL_ACTION_SMOKE_CIGGY);
    SpielerInfo[playerid][pZig] -= 1;
    return 1;
    }
    }
    case 3:
    {
    SendClientMessage(playerid,grau,"Du hast dein Wasser getrunken.");
    GivePlayerHealth(playerid,25);
    SpielerInfo[playerid][pItem3] = 0;
    return 1;
    }
    }
    }


    Ist ein ziemlich langer Code wenn man bedenkt das der hier gerade mal für die Zeile 1 ist. Gibt noch 4 weitere. Sehen aber alle genauso aus, da letzten Ende ja immer abgefragt wird welche Zahl in dem Fall Item1 nun hat und was danach passieren soll.


    Wenn ich nun Item 1 anklicke kommt immer die Message von case 0 also das ich keins hab und es kommt - Du hast dir eine Zigarette angezündet .Egal welches Item ich anklicke. Außerdem wird es nicht auf 0 bzw. Leer gesetzt wenn ich es beutzt habe.


    Woran liegt das?


    - Tomsen

  • Wieso soll ich die Parameter von dem Public ändern?!


    Außerdem bezieht sich das Switch auf das pItem und nicht auf den Dialog.


    Entschuldigung aber.. du solltest dich wohl auch nochmal damit auseinandersetzen. ^^


    - Tomsen



    3 Mal editiert, zuletzt von Tomsen ()

  • Ich habe auch mal eins geschrieben, schau mal hier: [ INCLUDE ] Inventar System


    mfg. :thumbup:

    Nice.


    Ich hab ja schon alles was man braucht nur ist halt das mit dem switch funktioniert nicht, also wenn ich welche anwähle.
    Zuviel switch oder woran kann das liegen? Der postet ja auch immer Die Message von case 0: also das der Slot X leer ist und dann kommt immer du nimmst eine Zigarette, auch wenn ich was anderes angeklickt habe.


    - Tomsen



    Einmal editiert, zuletzt von Tomsen ()

  • Entweder du versuchst mein System zu nutzen (was ich dir empfehlen würde) oder du zeigst mal mehr Code...z.B. dein Enum und wie die Variablen bei dir Werte bekommen ;)


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Ich hab in der Datenbank ne Zelle für Item 1 - 5


    Da werden Zahlen gespeichert.


    0,1,2,3


    Beim Abfragen werden die Items in 5 Zeilen abgefragt und wenn es 0 ist, steht leer da, bei 1 Fertiggericht.. usw.


    Also man arbeitet immer mit den Zahlen und wenn man nen String brauch frag ich die Zahlen ab und teile ihnen die Namen zu. Also relativ simpel.


    - Tomsen


    PS: Ich würd gern was eigenes scripten.