Nein, das ist falsch so.
Du musst die pickupid als ersten Index nehmen, nur diese ist eindeutig. Außerdem hast du einen sofortigen Zugriff, ohne Schleife.
PickupCounter[weapontype] kann ja für jeden "weapontype" die gleichen Werte wieder annehmen, somit besteht keine Eindeutigkeit.
new pickupid = CreateDynamicPickup(modelid,type,rx1,ry2,rz3,virtualworld);
WeaponInfo[pickupid][wModel] = modelid;
WeaponInfo[pickupid][wAmmo] = random(1000)+10;
Beim Pickup:
if(WeaponInfo[pickupid][wModel] != 0) GivePlayerWeapon(playerid, WeaponInfo[pickupid][wModel], WeaponInfo[pickupid][wAmmo]);
Mehr ist es nicht.