Pfandflaschen 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 habe irgendwie ein Merkwürdigen Fehler mein Pickup wird nicht gelöscht
    Wenn ich eine Zweite erstelle und gehe durch die weiter verschwindet die erste aber wieso ?


    [24/11/2016 16:44:35] 0
    [24/11/2016 16:44:35] Test 0
    [24/11/2016 16:44:35] Test 1
    [24/11/2016 16:44:35] 1


  • Code
    for(new i = 0; i < MAX_PFANDFLASCHEN; i++)
    	{
    	    if(pickupid == FlaschenPickup[i])
    	    {
    	        printf("Pickup %d gelöscht.",i);
    	        DestroyDynamicPickup(FlaschenPickup[i]);
    			GivePlayerMoney(playerid,25);
    	        return 1;
    	    }
    	}
  • Du solltest noch beim reinlaufen, denn Wert Pickup auch wieder auf 0 setzen



    Zusätzlich hast du hier noch ein Fehler, wenn es mehrere Pickups geben sollte wird die ID nicht bei 1 immer anfangen daher strukturiere dein befehl neu.



    und das Array new pfandf[MAX_PFANDFLASCHEN][pfandflaschen]; brauchst du nicht du nutzst nirgend die positionen davon :)

  • Nimm deinen alten Pfandpflaschen Befehl und ändere:
    if(pickupid == FlaschenPickup[i])


    Zu
    if(pickupid == FlaschenPickup[i] && IsPlayerInRangeOfPoint(playerid, 2.0, pfandf[i][pf_x],pfandf[i][pf_y],pfandf[i][pf_z]))


    Wie schon mein Vorposter geschrieben hat
    FlaschenPickup[i] auf 0 setzen beim löschen.

  • Wenn ich das mache dann kann ich in die erste garnichtmehr reinlaufen und nurnoch in die 2
    Hier mal das Ganze system falls mann es selbst probieren will.



  • Ich habe mir das mal angeschaut, es wird von SAMP aus mit der Pickupid 1 beim erstellen der Pickups angefangen d.h es gibt keine Pickupid mit dem Wert 0 und ist somit nicht mit dem "i" identisch.


    Gelöst habe ich das Problem, indem ich die Pickupid plus 1 nehme:

    new string[128];
    for(new i = 0; i < sizeof(pfandf); i++)
    {
    if(pickupid+1 == FlaschenPickup[i] && IsPlayerInRangeOfPoint(playerid, 2.0, pfandf[i][pf_x],pfandf[i][pf_y],pfandf[i][pf_z]))
    {
    format(string,sizeof(string),"[DEBUG] Pfandflasche Nummer: %d wurde gelöscht. [+25$]",FlaschenPickup[i]);
    SendClientMessage(playerid,-1,string);
    DestroyDynamicPickup(FlaschenPickup[i]);
    GivePlayerMoney(playerid,25);
    FlaschenPickup[i] = 0;
    return 1;
    }
    }


    Ansonsten habe ich mit folgenden Befehlen gearbeitet:

    COMMAND:createpfandflasche(playerid,params[])
    {
    //if(pInfo[playerid][pLoggin] == false) return 1;
    //if(!GetPlayerAdmin(playerid,5)) return SendAdminError(playerid);
    new Float:x,Float:y,Float:z;
    for(new i = 0; i < sizeof(pfandf); i++)
    {
    if(FlaschenPickup[i] == MAX_PFANDFLASCHEN) return SendClientMessage(playerid,-1,"Maximum an Pfandflaschen erreicht.");
    if(FlaschenPickup[i] != 0) continue;
    GetPlayerPos(playerid,x,y,z);
    pfandf[i][pf_x] = x;
    pfandf[i][pf_y] = y;
    pfandf[i][pf_z] = z;
    new flaschenmodel = random(12);
    switch(flaschenmodel)
    {
    case 0: FlaschenPickup[i] = CreateDynamicPickup(1486, 1, pfandf[i][pf_x],pfandf[i][pf_y],pfandf[i][pf_z], 0);
    case 1: FlaschenPickup[i] = CreateDynamicPickup(1509, 1, pfandf[i][pf_x],pfandf[i][pf_y],pfandf[i][pf_z], 0);
    case 2: FlaschenPickup[i] = CreateDynamicPickup(1512, 1, pfandf[i][pf_x],pfandf[i][pf_y],pfandf[i][pf_z], 0);
    case 3: FlaschenPickup[i] = CreateDynamicPickup(1517, 1, pfandf[i][pf_x],pfandf[i][pf_y],pfandf[i][pf_z], 0);
    case 4: FlaschenPickup[i] = CreateDynamicPickup(1520, 1, pfandf[i][pf_x],pfandf[i][pf_y],pfandf[i][pf_z], 0);
    case 5: FlaschenPickup[i] = CreateDynamicPickup(1543, 1, pfandf[i][pf_x],pfandf[i][pf_y],pfandf[i][pf_z], 0);
    case 6: FlaschenPickup[i] = CreateDynamicPickup(1544, 1, pfandf[i][pf_x],pfandf[i][pf_y],pfandf[i][pf_z], 0);
    case 7: FlaschenPickup[i] = CreateDynamicPickup(1551, 1, pfandf[i][pf_x],pfandf[i][pf_y],pfandf[i][pf_z], 0);
    case 8: FlaschenPickup[i] = CreateDynamicPickup(1664, 1, pfandf[i][pf_x],pfandf[i][pf_y],pfandf[i][pf_z], 0);
    case 9: FlaschenPickup[i] = CreateDynamicPickup(1668, 1, pfandf[i][pf_x],pfandf[i][pf_y],pfandf[i][pf_z], 0);
    case 10: FlaschenPickup[i] = CreateDynamicPickup(1669, 1, pfandf[i][pf_x],pfandf[i][pf_y],pfandf[i][pf_z], 0);
    case 11: FlaschenPickup[i] = CreateDynamicPickup(1950, 1, pfandf[i][pf_x],pfandf[i][pf_y],pfandf[i][pf_z], 0);
    }
    printf("[DEBUG] Pickupid %d | i: %d erstellt",FlaschenPickup[i], i);
    SendClientMessage(playerid,-1,"Du hast eine Pfandflsche erstellt.");
    break;
    }
    return 1;
    }


    COMMAND:listpflaschen(playerid,params[])
    {
    new string[124];
    for(new i = 0; i < sizeof(pfandf); i++)
    {
    format(string,sizeof(string),"i: %d - FlaschenPickup[i]: %d",i,FlaschenPickup[i]);
    SendClientMessage(playerid,-1,string);
    }
    return 1;
    }


    und oben wie davor:

    #define MAX_PFANDFLASCHEN 5


    enum pfandflaschen
    {
    Float:pf_x,
    Float:pf_y,
    Float:pf_z
    }
    new pfandf[MAX_PFANDFLASCHEN][pfandflaschen];
    new FlaschenPickup[MAX_PFANDFLASCHEN];


    LG