new ArmyCrate[MAX_CRATES];
for(new i=0; i < MAX_CRATES; i++) { ArmyCrate[i] = 50; //This should be like object health i want to destroy pCarePackage[i][CarePackagePlane] = pCarePackage[i][CarePackageParachute] = -1; }
public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ) { if(hittype == BULLET_HIT_TYPE_OBJECT) { 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 got some weapons from pack."); new rand = random(4); switch(rand) { case 0: GivePlayerWeapon(playerid, 29, 300); case 1: GivePlayerWeapon(playerid, 32, 300); case 2: GivePlayerWeapon(playerid, 37, 400); case 3: GivePlayerWeapon(playerid, 35, 1); } crateexists[val] = false; KillTimer(CrateDespawnTimer[val]); ArmyCrate[val] = -1; break; } } } } } }
So, I just have to place this code in OnPlayerShootDynamicObject and will work fine, or i need to do more work ?
|
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; }
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; } |
for(new val = 0; val < MAX_CRATES; val++) { if(crateexists[val] && CrateObjectID[val] == objectid) { // ... } }