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
  • stock GetItem(playerid,slot, name[],len)


    Ja, darüber habe ich nicht nachgedacht ^^


    Gut, danke das du mir sowas sagst, verbessere es gleich :)


    Item[playerid][s] = "";


    Ein ganz schlimmer Fehler, der dir das "beigebracht" hat - gehört verprügelt.
    Du sorgst hier nur für memory leaks.


    Auch hier danke für den Tipp :D
    (Du kannst das uralte GF mal verprügeln :D)


    Unglaubliche 32 Zeilen Effektivcode und trotzdem noch so viel Mist.


    Dann gebe doch mal konstruktive Kritik und sag mal was hier Mist ist ;)


    @Rest, danke für die ganzen Kommentare :)


    mfg. :thumbup:


    //Edit: Rechtschreibung

    ast2ufdyxkb1.png


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

    Einmal editiert, zuletzt von Kaliber ()

  • Wie siehts hier aus ? Werden die Items denn auch von deiner Include gespeichert oder muss man das selber machen ?


    Die Include gibt dir nur Funktionen, mehr nicht...


    Sprich, du musst es selber speichern, aber das ist ja nicht wirklich schwer:


    //Hier mal ein Beispiel in dini:
    new items[6]; //6 Items willst du hier speichern
    for(new i; i<6; i++) GetItem(playerid,i,items[i],16);
    dini_Set(Spielerdatei,"Item1",items[0]);
    dini_Set(Spielerdatei,"Item2",items[1]);
    dini_Set(Spielerdatei,"Item3",items[2]);
    //usw...


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • Hey Kaliber. Ich wollte gerade mal dein Inventar System testen und bekomme gerade etwas dazu nicht hin ;).
    Unzwar möchte ich ein Item mit dem Namen abfragen zzB if(GetItem(playerid,i,"test",16); Und wenn er dieses objekt test im Dialog stehen hat kann er dies auch verwenden.
    Nun habe ich aber das Problem das er den Timer so oft ausführt wie ich maximale Slots habe. Könntest du vielleicht ein Beispiel machen zur Abfrage von Speziellen Items ? .

  • Hey Kaliber. Ich wollte gerade mal dein Inventar System testen und bekomme gerade etwas dazu nicht hin ;).
    Unzwar möchte ich ein Item mit dem Namen abfragen zzB if(GetItem(playerid,i,"test",16); Und wenn er dieses objekt test im Dialog stehen hat kann er dies auch verwenden.
    Nun habe ich aber das Problem das er den Timer so oft ausführt wie ich maximale Slots habe. Könntest du vielleicht ein Beispiel machen zur Abfrage von Speziellen Items ? .


    Dafür gibt es doch extra den Beispiel Tab ^^


    //Angenommen wir hätten Butter nicht entfernt, sähe das so aus mit dem ausgeben:
    new items[1];
    GetItem(playerid,0,items[0],6); // Die 6 = Länge von dem Wort "Butter" = 6 Buchstaben
    printf("Dieses Item trägt der Spieler mit sich: %s",items[0]);


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Ja ich meine aber das man den Itemnamen abfragt :) zB Ich habe einen Burger dann frage ich den Namen Burger ab da er ja als Slot 0,1,2,3 vorkommen könnte wäre es bei mir dann auch im Listitem 0,1,2,3,4 praktisch das man den Namen vom Listitem abfragt das meine ich :).

  • Ja ich meine aber das man den Itemnamen abfragt :) zB Ich habe einen Burger dann frage ich den Namen Burger ab da er ja als Slot 0,1,2,3 vorkommen könnte wäre es bei mir dann auch im Listitem 0,1,2,3,4 praktisch das man den Namen vom Listitem abfragt das meine ich :).


    Achso, ja schau:


    new buffer[MAX_SLOTS][16];
    for(new i; i<MAX_SLOTS; i++) {
    GetItem(playerid,i,buffer[i],16);
    if(!strcmp(buffer[i],"Butter",true)) {
    //Hier ist das Item Butter und du hast i
    break;
    }
    }


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • Danke erst einmal für deine Hilfe. Leider funktioniert das ganze immer noch nicht. Selbst wenn ich auf Items klicke wird das if ausgeführt:
    if(dialogid == 6)
    {
    if(response)
    {
    new buffer[MAX_SLOTS][12];
    for(new i; i<MAX_SLOTS; i++) {
    GetItem(playerid,i,buffer[i],12);
    if(!strcmp(buffer[i],"test",true))
    {
    //....
    break;
    }

  • Selbst wenn ich auf Items klicke wird das if ausgeführt:


    Ich verstehe dein Problem nicht, bzw ich weiß nicht was du vor hast...


    Tut mir jetzt auch leid, ich muss los...ehm, ich schreibe dich in 2std nochmal an, dann kann ich dir nochmal versuchen zu helfen ;)


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • Also ich habe ein Dialog der als Inventar dient. So nun sammle ich ein Toast ein und einmal ein Burger.
    Ich möchte jetzt den Burger essen und der ist in dem fall ja Slot 1 und im Dialog listitem 1. Nun möchte ich das wenn ich auf Burger klicke das mein Script
    abfragt auf was klickt der Spieler gerade und dann das aus dem Inventar raus nimmt. Ich kann listitem 1 ja nicht als Burger festlegen da dort ja auch andere Sachen liegen könnten.

  • auch andere Sachen liegen könnten.


    Du erstellst so am besten den Dialog:


    new buffer[MAX_SLOTS][16],string[128];
    for(new i; i<MAX_SLOTS; i++) {
    GetItem(playerid,i,buffer[i],16);
    if(strlen(buffer[i]) > 0) { strins(buffer[i],"\n",strlen(buffer[i]),16); strins(string,buffer[i],0,128); }
    }
    ShowPlayerDialog(playerid,-1,DIALOG_STYLE_LIST,"Inventar",string,"Bestätigen","");


    //Der Callback
    if(dialogid == -1) {
    new string[128],buffer[16],slot = listitem-1;
    GetItem(playerid,slot,buffer,16);
    format(string,128,"Du hast %s ausgewählt !",buffer);
    SendClientMessage(playerid,-1,string);
    }


    Nicht getestet, sollte aber funktionieren ^^


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • if(dialogid == -1) {
    new string[128],buffer[16],slot = listitem-1;
    GetItem(playerid,slot,buffer,16);
    format(string,128,"Du hast %s ausgewählt !",buffer);
    SendClientMessage(playerid,-1,string);
    }


    Und wie kann ich es dann so machen das abgefragt wird wie das Item heißt?Und wen es z.B Schaufel oder Burger heißt das dann jeweils die Schaufel als Waffe gegeben wird oder der Burger gegessen wird?

  • Und wie kann ich es dann so machen das abgefragt wird wie das Item heißt?


    Ja, so wie es da steht:


    new buffer[16];
    GetItem(playerid,0,buffer,16); //0 = der slot
    if(!strcmp(buffer,"Schaufel",true)) {
    GivePlayerWeapon(playerid,6,1); //Hier haste dann dem Spieler die Schaufel in die Hand gegeben
    }


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • Danke :D
    Folgender Fehler: C:\Users\Julien\Desktop\SAMPPAWN\pawno\include\Inventar.inc(32) : error 017: undefined symbol "s"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Error.

    Bei dieser Zeile in meinem Gamemode: DeletePlayerItem(playerid, "Schaufel");
    Edit2:Wurde von Kaliber gefixxt danke dafür :D

    4 Mal editiert, zuletzt von Jason27993 ()