Jump to content
jazzer12369

Vehicle disable, but not destroy

Recommended Posts

I'm looking for a way to stop a specific vehicle from being able to be blown up. I want the hull and engine to be invincible, so that the vehicle won't explode when hit, but the wheels should still be vulnerable so that it can still be disabled, just not destroyed/blown up. 

 

I'm looking for this to be achieved within the vehicles init field, or via an external script. The reason I want this to be possible is because I don't want a simple vehicle respawn in my mission like I have now. I want to punish players for getting a vehicle blown up, making them have to airlift the damaged vehicle back to base where it can be repaired (I don't need help with the airlift or repairs I've got that covered, just need help on making the vehicles hull and engine invulnerable.)   

 

Are there any scripts out there which can help me a achieve this? I was looking into the "SetHit" functionality etc but I am a total noob when it comes to scripting. To be completely honest with you I'd love for someone to figure this out for me as I really don't have a lot of time to dedicate to testing and playing about with things myself :don11:

Share this post


Link to post
Share on other sites
this addEventHandler ["HandleDamage",{(_this#7 in ["hitlfwheel","hitlbwheel","hitlmwheel","hitlf2wheel","hitrfwheel","hitrbwheel","hitrmwheel","hitrf2wheel"])}]

The code is showing how to deal with on the Marshall. Change the array to use on other vehicles.

 

There are two ways to implement.

this addEventHandler ["HandleDamage",{(_this#7 in [/*HitPoints to break*/])}]
this addEventHandler ["HandleDamage",{!(_this#7 in [/*HitPoints to protect*/])}]

 

  • Like 2
  • Thanks 1

Share this post


Link to post
Share on other sites

This is fantastic mate thanks for this.

 

I've got this working for a hunter now simply by changing the wheels in the array like you suggested.

 

Just a quick question about one of the parameters, what does the "(_this#7" mean? I understand the rest for the most part but I haven't seen this before. I'm quite interested in how it all works. Also, how would this be adapted for a tracked or fixed wing vehicle for example? 

 

 

Share this post


Link to post
Share on other sites

https://community.bistudio.com/wiki/Arma_3:_Event_Handlers#HandleDamage

Quote

unit: Object - Object the event handler is assigned to.
hitSelection: String - Name of the selection where the unit was damaged. "" for over-all structural damage, "?" for unknown selections.
damage: Number - Resulting level of damage for the selection.
source: Object - The source unit that caused the damage.
projectile: String - Classname of the projectile that caused inflicted the damage. ("" for unknown, such as falling damage.)
hitPartIndex: Number - Hit part index of the hit point, -1 otherwise.
instigator: Object - Person who pulled the trigger
hitPoint: String - hit point Cfg name

I think you can disable simulation as well. Note: Once you enable simulation again, the vehicle will be destroyed or whatever damage was dealt before restores. Best approach is HandleDamage EH as @POLPOX said.

Share this post


Link to post
Share on other sites
3 hours ago, jazzer12369 said:

@HazJ @pierremgi 

 

This is great stuff ladies thank you very much! @POLPOX nailed exactly what I needed, awesome stuff all round. 

Definitely not a "lady" - Yup, just checked! Not sure about @pierremgi though? :happy::rofl::rofl:

  • Like 1
  • Haha 1

Share this post


Link to post
Share on other sites

Hi !

 

So I'm trying to adapt the code from @POLPOX for other vehicles. Right now, I'm triyng with the RHS M1165A1, and so far I have this :

this addEventHandler ["HandleDamage",{(_this#7 in ["hitlfwheel","hitlbwheel","hitrfwheel","hitrbwheel","hitengine"])}]

It's working fine for the 4 wheels and the engine, but I wish to make damageable the "turret" and the M2 & M240 mounted on it. I tried with "hitturret" and "hitgun" but that doesn't seem to work.

Any idea where I could find the names of these parts ? I looked in the config viewer but I did not find anything.

Share this post


Link to post
Share on other sites

I've recently been trying to do exactly this so this code is a god send! However as some vehicles have a ton of hitpoints that differ between vehicles (especially modded ones) i'd rather say which ones to protect just to save a ton of work. But i am having an issue where the code for "hit points to protect" doest seem to be working at all and the vehicle just takes damage as normal. Does it need more than just the ! in the line to work?


 

On 8/30/2018 at 6:11 PM, POLPOX said:

this addEventHandler ["HandleDamage",{!(_this#7 in [/*HitPoints to protect*/])}]

 

 

thanks

 

meaty

Share this post


Link to post
Share on other sites

@meaty
"/*HitPoints to protect*/" is NOT what you must use: it's just an example, so you need to add there the names of the hit parts you desire to protect.
You can find the specific names of such part by righ-clicking on the vehicle in editor, then looking at its config file.

Take a look at Polpox' message again, so you can see what was used:
{(_this#7 in ["hitlfwheel","hitlbwheel","hitlmwheel","hitlf2wheel","hitrfwheel","hitrbwheel","hitrmwheel","hitrf2wheel"])}

Share this post


Link to post
Share on other sites

guess i should have been a little clearer 🙂 I am using the actual hit point names, but it doesn't work.

 

So for example this code works in that only the tyres, turret, and engine parts get damaged

 

this addEventHandler ["HandleDamage",{(_this#7 in ["hitlfwheel","hitlbwheel","hitlmwheel","hitlf2wheel","hitrfwheel","hitrbwheel","hitrmwheel","hitrf2wheel","hitturret","hitengine"])}]

however if you use

this addEventHandler ["HandleDamage",{!(_this#7 in ["hitlfwheel","hitlbwheel","hitlmwheel","hitlf2wheel","hitrfwheel","hitrbwheel","hitrmwheel","hitrf2wheel""hitturret","hitengine"])}]

then the vehicle takes damage as it normally would without any code.

  • Like 1

Share this post


Link to post
Share on other sites

That's because your EH code returns true or false depending on each hit.  When returning false, there is no damage on part.

so:

(_this#7 in ["hitlfwheel","hitlbwheel","hitlmwheel","hitlf2wheel","hitrfwheel","hitrbwheel","hitrmwheel","hitrf2wheel","hitturret","hitengine"])  means , for each part (and multiple times):

hit point (cfg name) in the array   --> takes damage , not the other ones (hit body, hit hull, hit lights...)

 

see  1st array of getAllHitPointsDamage cursorObject for example

 

if you write:

!(_this#7 in ["hitlfwheel","hitlbwheel","hitlmwheel","hitlf2wheel","hitrfwheel","hitrbwheel","hitrmwheel","hitrf2wheel","hitturret","hitengine"]) , vehicle will take damage on ALL other parts than those inside the array.

 

The problem comes from the "hithull" part which should be protected for avoiding a late explosion (hard coded arma engine) and... I can't say why, the empty hit parts ("") you can't grab by getAllHitPointsDamage 1st array, but appearing in selection names (2nd array). I can't explain but you can test:

 

!(_this#7 in ["hitlfwheel","hitlbwheel","hitlmwheel","hitlf2wheel","hitrfwheel","hitrbwheel","hitrmwheel","hitrf2wheel","hitturret","hitengine","hithull",""])

 

It seems convoluted for breaking glasses, lights and fuel...

 

To conclude, don't use a reverse condition: !(cond)  but prefer a direct one (cond)  each time you can.

 

 

 

 

 

 

  • Like 1

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now

×