10.07.2018, 17:43
Quote:
I tried that now but seems it doesne't work well. I was aiming with gun and shoot at random position and package dissapeared (i was not aiming in object), not even counting 50 health.
Code:
public OnPlayerShootDynamicObject(playerid, weaponid, STREAMER_TAG_OBJECT objectid, Float:x, Float:y, Float:z) { for(new val = 0; val < MAX_CRATES; val++) { if(crateexists[val]) { new obb = ArmyCrate[val]; if(IsValidDynamicObject(obb)) { new Float:oX, Float:oY, Float:oZ; GetDynamicObjectPos(obb,oX, oY, oZ); if(IsPlayerInRangeOfPoint(playerid, 5, oX, oY, oZ)) { ArmyCrate[val] -= 1; if(ArmyCrate[val] > 0) { DestroyDynamicObject(obb); Delete3DTextLabel(armylabel[val]); SendClientMessage(playerid, -1, "You have picked up a weapon from the package"); new rand = random(8); switch(rand) { case 0: GivePlayerWeapon(playerid, 16, 2); case 1: GivePlayerWeapon(playerid, 18, 2); case 2: GivePlayerWeapon(playerid, 26, 300); case 3: GivePlayerWeapon(playerid, 28, 300); case 4: GivePlayerWeapon(playerid, 29, 300); case 5: GivePlayerWeapon(playerid, 32, 300); case 6: GivePlayerWeapon(playerid, 37, 400); case 7: GivePlayerWeapon(playerid, 35, 1); } crateexists[val] = false; KillTimer(CrateDespawnTimer[val]); ArmyCrate[val] = -1; break; } } } } } return 1; } |
You'll need to save the Object ID for the crate seperately and then, inside the loop, check if the objectid that was hit matches one of the crates you are looping through.
For example:
Code:
for(new val = 0; val < MAX_CRATES; val++) { if(crateexists[val] && CrateObjectID[val] == objectid) { // ... } }
I'd also suggest to rename crateexists to something like "ArmyCrateExists" or make an array with an enumerator. Using that many differnet arrays will get messy really soon.