Pickups werden nicht richtig eingesammelt (Item 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,


    Ich habe ein kleines Problem mit meinem Item System, angenommen ich erstelle 3 Items, dann habe ich in der MySQL Tabelle 3 Zeilen, einmal Item 1 mit der DBID 1 dann Item 2 mit DBID 2 und Item 3 mit der DBID 3.


    Wenn ich jetzt die Items einsammeln möchte, kann immer nur das letzte Item einsammeln, sprich DBID 3. Starte ich den Server danach neu, habe ich noch 2 Items DBID 1 & 2. Wenn ich nun diese einsammeln möchte, kann ich wieder nur DBID 2 einsammeln, aber warum?


    C
    public OnPlayerPickUpDynamicPickup(playerid, pickupid){
    	LOOP(MAX_ITEMS, i){
    		if(pickupid == iData[i][itemPickup]){
    			GivePlayerItem(playerid, iData[i][itemID], iData[i][itemNumber]);
    			RemoveItem(i);
    			return 1;
    		}
    	}
    	return 1;
    }


    Mit freundlichen Grüßen. :thumbup:


    //Edit.


    Mit freundlichen Grüßen
    German_ScripterHD

    Einmal editiert, zuletzt von German_ScripterHD ()

  • Ich habe nun ExistItems bei LoadItems eingefügt, jedoch funktioniert es immer noch nicht richtig.
    Nun habe ich mir das ganze mal mit der print Funktion ausgeben lassen:


    Bei erstellen der Items:

    C
    [18:10:05] Item: Banane / Itemid: 0 /Item Anzahl: 12 - wurde angelegt.
    [18:10:05] INSERT INTO `server_items` (`itemID`,`itemNumber`,`itemX`,`itemY`,`itemZ`,`itemInteriorid`) VALUES ('0','12','835.929992','-1327.844848','13.435821','0')
    [18:10:12] Item: Steak / Itemid: 1 /Item Anzahl: 7 - wurde angelegt.
    [18:10:12] INSERT INTO `server_items` (`itemID`,`itemNumber`,`itemX`,`itemY`,`itemZ`,`itemInteriorid`) VALUES ('1','7','829.483581','-1324.677246','13.393317','0')
    [18:10:18] Item: Pizza / Itemid: 2 /Item Anzahl: 77 - wurde angelegt.
    [18:10:18] INSERT INTO `server_items` (`itemID`,`itemNumber`,`itemX`,`itemY`,`itemZ`,`itemInteriorid`) VALUES ('2','77','818.167541','-1321.077636','13.480163','0')


    Beim laden der Items:

    C
    [18:14:12] Item: Banane / Itemid: 0 /Item Anzahl: 12 - wurde geladen.
    [18:14:12] Item: Steak / Itemid: 1 /Item Anzahl: 7 - wurde geladen.
    [18:14:12] Item: Pizza / Itemid: 2 /Item Anzahl: 77 - wurde geladen.

    Beim einsammeln ():

    C
    [18:15:35] Item: Pizza / Itemid: 2 /Item Anzahl: 77 - wurde eingesammelt.
    [18:15:36] Item: Banane / Itemid: 0 /Item Anzahl: 0 - wurde eingesammelt.
    [18:15:38] Item: Banane / Itemid: 0 /Item Anzahl: 0 - wurde eingesammelt.

    Die Items habe ich in folgender Reihenfolge eingesammelt. --> Banane --> Steak --> Pizza also stimmt etwas nicht bei einsammelt der Pickups, nur was ?


    Kleine Info: Bei der Variable iData [..] [itemID] handelt es sich nicht um die DatenbankID, diese wäre dann iData[..][itemDBID].



    @Jeffry


    Mit freundlichen Grüßen
    German_ScripterHD

  • Wie sieht der Code jetzt aus?

    Meinst du von LoadItems?



    Mit freundlichen Grüßen
    German_ScripterHD

  • Versuche es so:
    Function LoadItems()
    {
    new num_fields,num_rows;
    cache_get_data(num_rows,num_fields);
    if(!num_rows)return print("["SERVER_DEBUG"] Es konnten keine Items geladen werden (rows = 0)");
    LOOP(num_rows, i)
    {
    new id = GetFreeItemID(), str[32];
    iData[id][itemX] = cache_get_field_content_float(i, "itemX", dbhandle);
    iData[id][itemY] = cache_get_field_content_float(i, "itemY", dbhandle);
    iData[id][itemZ] = cache_get_field_content_float(i, "itemZ", dbhandle);
    if(iData[id][itemX] == 0 && iData[id][itemY] == 0 && iData[id][itemZ] == 0)continue;
    iData[id][itemInteriorid] = cache_get_field_content_int(i, "itemInteriorid", dbhandle);
    iData[id][itemID] = cache_get_field_content_int(i, "itemID", dbhandle);
    iData[id][itemNumber] = cache_get_field_content_int(i, "itemNumber", dbhandle);
    iData[id][itemDBID] = cache_get_field_content_int(i, "itemDBID", dbhandle);

    format(str,sizeof str,"%s(%d)", GetItemName(iData[id][itemID]), iData[id][itemNumber]);
    iData[id][itemTextLabel] = CreateDynamic3DTextLabel(str, COLOR_WHITE, iData[id][itemX], iData[id][itemY], iData[id][itemZ], 20.0, _, _, _, _, iData[id][itemInteriorid]);
    iData[id][itemPickup] = CreateDynamicPickup(GetItemObjectID(iData[id][itemID]), 1, iData[id][itemX], iData[id][itemY], iData[id][itemZ], _, iData[id][itemInteriorid]);
    printf("id: %d / Item: %s / Itemid: %d /Item Anzahl: %d / Pickup: %d - wurde geladen.",id,GetItemName(iData[id][itemID]),iData[id][itemID],iData[id][itemNumber],iData[id][itemPickup]);
    }
    return 1;
    }