Zdravím,
dej sem prosím ještě kód, kde pickupy vytváříš. Proč ukládáš vůbec pickupid do pole, když máš pouze jeden? Rozhodně zde nedoporučuji používat ELSE, už jen díky tomu že hodnotu v Package[PICKUP] nuluješ, což ti může způsobovat právě toto chování (například pickup pro vyléčení bude mít právě id 0, ty jdeš sebrat pickup s penězi, který má id 1, sebereš jej a proměnnou pickupu s penězi nastavíš na 0, pak jdeš sebrat ten pro vyléčení, nojo, jenže proměnná, už je vynulovaná, tudíž pickupid s id 0 zachytí první blok a do else se to už nedostane). Když už, tak nenastavovat nulu, ale nějakou zápornou hodnotu, které createPickup nevrací. Nějak se ztrácím v těch tvých proměnných, určitě by bylo lepší ty proměnné pro pickupy nějak sjednotit.
Např.:
enum pickups{ //vytvoříš enum, kde si pojmenuješ pickupy podle funkce, enum pak použíješ pro tvorbu pole
MONEY,
HEALTH
};
new PICKUP[pickups]; //vytvoříš pole pro pickupy o velikosti enumu (2)
//a pak už jen vytváříš pickup
PICKUP[MONEY] = createPickup(...);
PICKUP[HEALTH] = createPickup(...);
//a v OnPlayerPickUpPickup()
if(pickupid == PICKUP[MONEY])
{ ... }
else if(pickupid == PICKUP[HEALTH])
{ ... }
//a pro stronování proměnných rozhodně nepoužívej nulu (může ji mít totiž nějaký jiný pickup), ale záporné hodnoty
A ještě jestli můžu doporučit, nepoužívej v cyklu pro odstranění ikony hráčům pevně danou hodnotu - 100, ale nějakou konstantu, kterou můžeš kdykoliv změnit (obecně využívej proměnných a konstant v cyklech, nejen zde). A ještě lépe můžeš použít funkci GetPlayerPoolSize(), která ti vrátí největší id připojeného hráče.