Wie wäre es, wenn du das ein bisschen übersichtlicher gestaltest.
Also, es würde funktionieren, wie Pr0x das gezeigt hat, aber nur unter der Vorraussetzung, dass du entweder ActorPickups oder MoneyPickups hast.
Falls noch eine weitere Art Pickup hinzukommt, wird das als money interpretiert...
Also hier mal ein kleines Beispiel wie man sowas aufbauen könnte:
//Hier alle Pickuptypen
enum
{
INVALID_PICKUP_TYPE,
MONEY_TYPE,
ACTOR_TYPE
};
//Hier deine Pickup-Arrays:
new money_pickups[100], actor_pickups[50];
//Dann der Callback
public OnPlayerPickUpPickup(playerid, pickupid)
{
new index;
switch(GetPickupType(pickupid,index))
{
case INVALID_PICKUP_TYPE:
{
//Wenn es weder Money noch Actor ist...(also nicht definiert)
}
case MONEY_TYPE:
{
maxmoney -= 1;
GivePlayerMoney(playerid, 1000);
printf("ID picked up: %d",maxmoney);
//Sehr wichtig, dass du auch das Pickup im Array clearst
money_pickups[index]=-1;
DestroyPickup(pickupid);
}
case ACTOR_TYPE:
{
ShowMenuForPlayer(shopmenu,playerid);
TogglePlayerControllable(playerid,false);
//Könntest z.B. mit actor_pickups[index] auf das im Array zugreifen
}
}
return 1;
}
//Und dann die Funktion (ohne Makro)
stock GetPickupType(pickupid, &index)
{
for(new i; i<sizeof(money_pickups); i++)
{
if(money_pickups[i] == pickupid) return index=i,MONEY_TYPE;
}
for(new i; i<sizeof(actor_pickups); i++)
{
if(actor_pickups[i] == pickupid) return index=i,ACTOR_TYPE;
}
return INVALID_PICKUP_TYPE;
}
/*
Da das immer das selbe im Endeffekt ist, kann man das auch zusammenfassen mit einem Makro und sich so Schreibarbeit sparen:
*/
#define CheckForPickupType(%0,%1); for(new i; i<sizeof(%0); i++) if(%0[i] == pickupid) return index=i,%1;
stock GetPickupType(pickupid, &index)
{
CheckForPickupType(money_pickups,MONEY_TYPE);
CheckForPickupType(actor_pickups,ACTOR_TYPE);
return INVALID_PICKUP_TYPE;
}
Alles anzeigen
Nur so als Anregung bzw Idee, damit du es übersichtlicher hast
Musst halt auch schauen, dass du im Callback immer das Richtige Array verwendest, welches du unten angibst, da sich daran der Index anpasst 
//Edit:
Parameter übergibst du mit SetTimerEx //Wiki Code buggt.lel
volatile existiert in Pawn nicht, da das alles in einer VM ausgeführt wird und nicht direkt auf der Hardware.