Bugs im Pickupsystem

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 Leute, ich hab bald kein Bock mehr, ich kann diese blöden Bugs nicht mehr sehen.
    Ich habe einen Zombieserver, wo ich mit meinen Kumpels etwas drauf spiele, nun habe ich aber das Problem:


    Es gibt ein Checkpointsystem, wenn man in den Checkpoint läuft bekommt man verschiedene Sachen.
    Dann sollte der Pickup verschwinden, das tut er aber nicht immer, manchmal verschwindet er und manchmal kannst du da das Geschenk 100 mal abholen
    und er verschwindet einfach nicht. Es wurde einfach mit ein paar Pickups belegt. Aber die verschwinden einfach nicht. Manchmal läufts manchmal nicht.
    Wodran kann das liegen?


    Hier das ganze System:
    new meatDrops[MAX_PLAYERS];


    Hier wird das bei OnPlayerDeath erstellt:
    new Float:xc,Float:yc,Float:zc;
    GetPlayerPos(playerid,Float:xc,Float:yc,Float:zc);
    meatDrops[playerid]=CreatePickup(2803,1,Float:xc,Float:yc,Float:zc,0);


    Und hier ist OnPlayerPickupPickup:
    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    new string[256];
    if(gTeam[playerid]==TEAM_ZOMBIE)return 1;
    if(gTeam[playerid]==TEAM_HUMAN)
    {
    new randzsammeln=random(8);
    DestroyPickup(meatDrops[playerid]);
    switch(randzsammeln)
    {
    case 0:
    {
    GivePlayerHealth(playerid,25);
    GameTextForPlayer(playerid,"~g~ +25HP",1200,3);
    PlayerPlaySound(playerid,1150,0.0,0.0,0.0);
    DestroyPickup(meatDrops[playerid]);
    }
    case 1:
    {
    if(ausgaben<=0)return GameTextForPlayer(playerid,"~r~ Leer",1200,3);
    new randmoney=random(1000);
    GibGeld(playerid,randmoney);
    format(string,sizeof(string),"~g~ +%i$",randmoney);
    GameTextForPlayer(playerid,string,1200,3);
    ausgaben-=randmoney;
    DestroyPickup(meatDrops[playerid]);
    }
    case 2:
    {
    GivePlayerHealth(playerid,40);
    GameTextForPlayer(playerid,"~g~ +40HP",1200,3);
    PlayerPlaySound(playerid,1150,0.0,0.0,0.0);
    DestroyPickup(meatDrops[playerid]);
    }
    case 3:
    {
    GivePlayerHealth(playerid,-15);
    GameTextForPlayer(playerid,"~r~ -15HP",1200,3);
    PlayerPlaySound(playerid,1150,0.0,0.0,0.0);
    DestroyPickup(meatDrops[playerid]);
    }
    case 4:
    {
    GameTextForPlayer(playerid,"~y~ 1 Sniper 1 Schuss",1200,3);
    GivePlayerWeapon(playerid,34,1);
    PlayerPlaySound(playerid,1150,0.0,0.0,0.0);
    DestroyPickup(meatDrops[playerid]);
    }
    case 5:
    {
    GameTextForPlayer(playerid,"~r~ Leer",1200,3);
    PlayerPlaySound(playerid,1150,0.0,0.0,0.0);
    DestroyPickup(meatDrops[playerid]);
    }
    case 6:
    {
    GameTextForPlayer(playerid,"~y~ Infiziert",1200,3);
    SendClientMessage(playerid,0xFFFFFFFF,"");
    SendClientMessage(playerid,0xFFFFFFFF,"");
    SendClientMessage(playerid,0xFFAA00FF,"Achtung: Du wurdest mit den Zombievirus infiziert. Wenn du jetzt stirbst wirst du automatisch zum Zombie.");
    SendClientMessage(playerid,0xFFAA00FF,"Achtung: Die einzige Rettung für dich ist es das Gegenmittel zu finden und es dir zu Spritzen. (/healme)");
    SendClientMessage(playerid,0xFFAA00FF,"Achtung: Für die Zukunft solltest du Gewässer meiden, oder es wird dir zum Verhängnis.");
    SendClientMessage(playerid,0xFFFFFFFF,"");
    SendClientMessage(playerid,0xFFFFFFFF,"");
    Spieler[playerid][pKrank]=1;
    if(Spieler[playerid][pKrank]==1){SetPlayerColor(playerid,0xFFAA00FF);}
    DestroyPickup(meatDrops[playerid]);
    }
    case 7:
    {
    GameTextForPlayer(playerid,"~g~ +1 Healpack",1200,3);
    PlayerPlaySound(playerid,1150,0.0,0.0,0.0);
    Spieler[playerid][pHeilmittel]+=1;
    DestroyPickup(meatDrops[playerid]);
    }
    }
    DestroyPickup(meatDrops[playerid]);
    return 1;
    }
    return 1;
    }


    Also es verschwindet meist nichts, trotz mehrfacher ausführung von DestroyPickup.
    Ich wünsche mir, dass mir jemand helfen kann. Dieser mist.
    Liebe Grüße

    Ich suche (Beta) Server-Tester für meinen Server.
    Bei Intresse bitte bei mir per PN melden.

  • So sollte es passen:
    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    new string[256];
    if(gTeam[playerid]==TEAM_ZOMBIE)return 1;
    if(gTeam[playerid]==TEAM_HUMAN)
    {
    new randzsammeln=random(8);
    DestroyPickup(pickupid);
    for(new i=0; i<MAX_PLAYERS; i++) if(pickupid == meatDrops[i]) meatDrops[i] = -1;
    switch(randzsammeln)
    {
    case 0:
    {
    GivePlayerHealth(playerid,25);
    GameTextForPlayer(playerid,"~g~ +25HP",1200,3);
    PlayerPlaySound(playerid,1150,0.0,0.0,0.0);
    }
    case 1:
    {
    if(ausgaben<=0)return GameTextForPlayer(playerid,"~r~ Leer",1200,3);
    new randmoney=random(1000);
    GibGeld(playerid,randmoney);
    format(string,sizeof(string),"~g~ +%i$",randmoney);
    GameTextForPlayer(playerid,string,1200,3);
    ausgaben-=randmoney;
    }
    case 2:
    {
    GivePlayerHealth(playerid,40);
    GameTextForPlayer(playerid,"~g~ +40HP",1200,3);
    PlayerPlaySound(playerid,1150,0.0,0.0,0.0);
    }
    case 3:
    {
    GivePlayerHealth(playerid,-15);
    GameTextForPlayer(playerid,"~r~ -15HP",1200,3);
    PlayerPlaySound(playerid,1150,0.0,0.0,0.0);
    }
    case 4:
    {
    GameTextForPlayer(playerid,"~y~ 1 Sniper 1 Schuss",1200,3);
    GivePlayerWeapon(playerid,34,1);
    PlayerPlaySound(playerid,1150,0.0,0.0,0.0);
    }
    case 5:
    {
    GameTextForPlayer(playerid,"~r~ Leer",1200,3);
    PlayerPlaySound(playerid,1150,0.0,0.0,0.0);
    }
    case 6:
    {
    GameTextForPlayer(playerid,"~y~ Infiziert",1200,3);
    SendClientMessage(playerid,0xFFFFFFFF,"");
    SendClientMessage(playerid,0xFFFFFFFF,"");
    SendClientMessage(playerid,0xFFAA00FF,"Achtung: Du wurdest mit den Zombievirus infiziert. Wenn du jetzt stirbst wirst du automatisch zum Zombie.");
    SendClientMessage(playerid,0xFFAA00FF,"Achtung: Die einzige Rettung für dich ist es das Gegenmittel zu finden und es dir zu Spritzen. (/healme)");
    SendClientMessage(playerid,0xFFAA00FF,"Achtung: Für die Zukunft solltest du Gewässer meiden, oder es wird dir zum Verhängnis.");
    SendClientMessage(playerid,0xFFFFFFFF,"");
    SendClientMessage(playerid,0xFFFFFFFF,"");
    Spieler[playerid][pKrank]=1;
    if(Spieler[playerid][pKrank]==1)
    {
    SetPlayerColor(playerid,0xFFAA00FF);
    }
    }
    case 7:
    {
    GameTextForPlayer(playerid,"~g~ +1 Healpack",1200,3);
    PlayerPlaySound(playerid,1150,0.0,0.0,0.0);
    Spieler[playerid][pHeilmittel]+=1;
    }
    }
    }
    return 1;
    }


    Das Problem war, dass du die Pickupid zum Beispiel für playerid = 1 gespeichert hast (1 ist gestorben). Dann hast du bei OnPlayerPickupPickUp das Pickup der playerid entfernt, die es aufgenommen hat. Nimmt jetzt ID 2 das Pickup auf, hast du dessen Pickup entfernt (welches nicht existiert), und somit konnte er das Pickup von ID 1 unendlich oft aufnehmen.

  • Dankeschön Jeffry :)
    Es hat funktioniert. Hätte ich eigentlich auch selber drauf kommen müssen naja.
    Liebe Grüße

    Ich suche (Beta) Server-Tester für meinen Server.
    Bei Intresse bitte bei mir per PN melden.