iceman77 18 Posted December 17, 2012 How do I get a vehicles damage while it's in a triggers list? I use a repair script, it works well enough, it just triggers even if the vehicle is at full health. I need it to exit the script if the vehicle has full health. I've tried using (Damage _unit == 0) as a condition so it could just exit the script, but it's not working. So how do I detect the list for damaged vehicles only? condition anyone present repeatable (vehicle player) in thislist activation {[_x] execVM "repair.sqf"} forEach thislist repair.sqf _unit = _this select 0; WaitUntil{(getPos _unit select 2)<2}; sleep 3; if((getPos _unit select 2)>2 || !(_unit in thisList) || [color="#0000FF"](Damage _unit == 0)[/color]) exitWith {}; _unit setFuel 0; _unit lock true; "Repair Center" hintC ["Service is initializing","Vehicle will be locked for your safety"]; sleep 3; _unit vehicleChat "Initializing PM sequence..."; sleep random 10;; _unit vehicleChat "Diagnosing Problems..."; sleep random 30; _unit vehicleChat "Repairing..."; sleep random 30; _unit setDammage 0; _unit vehicleChat "Rearming..."; sleep random 30; _unit setVehicleAmmo 1; _unit vehicleChat "Refueling..."; sleep 5; _unit vehicleChat "Finished..."; _unit setFuel 1; _unit lock false; Share this post Link to post Share on other sites
Deadfast 43 Posted December 17, 2012 Since you're passing only one parameter it is pointless doing it through an array. {_x execVM "repair.sqf"} forEach thislist _unit = _this; ...will suffice. As for your actual problem, you're on the right track. Problem is comparision is exact and it's pretty much impossible to have no damage whasover (0.0) as opposed to something like 0.0001. In other words, you need to use less than rather than equals: damage _unit < 0.05 Share this post Link to post Share on other sites
iceman77 18 Posted December 17, 2012 Thanks Deadfast. I made those small changes and tested it. It still runs the entire script no matter what. Also, I noticed infantry can activate the trigger, without any vehicles in the list even. I just want the trigger to activate when a person is inside of a vehicle in the trigger list and only actually service the vehicle if it's damaged. Share this post Link to post Share on other sites
riouken 15 Posted December 17, 2012 this will make sure only vehicle's and not aircraft activate the trigger. condition: ("LandVehicle" countType thislist > 0) && count (thislist unitsBelowHeight 1) > 0 activation: {if (dammage _x > .05) then { nop = [_x] [color=#0000BB][font=monospace]execVM [/font][/color][color=#DD0000][font=monospace]"repair.sqf"};} forEach thisList;[/font][/color] Share this post Link to post Share on other sites
iceman77 18 Posted December 17, 2012 Thanks for the reply. I'm fine with helos using the repair, I've atleast checked for height though so they can't use the service midair. In any case, I get an error when I try to use that onact. The error that says I'm missing an ) bracket. Share this post Link to post Share on other sites
Vasily.B 529 Posted March 18, 2016 Well, i wanna modify my addon, but scripting in arma language is worse than chinese to me.I wanna make condition, before whole script will start. The condition would be damaged track or wheels. For now this look like this : 0 = [] spawn { if (!isServer) exitWith {}; { (vehicle _x) addEventHandler ["hit",{ _veh = _this select 0; _d = driver _veh; if (_veh getVariable ["willBeRepaired", false]) exitWith {}; _veh setVariable ["willBeRepaired", true]; if (_d != _veh && alive _d && !(_veh iskindof "plane")) then { _d setCombatMode "COMBAT"; _veh allowCrewInImmobile true; _d addBackpackGlobal "B_assaultPack_khk"; _d additemtobackpack "toolKit"; [_d,_veh] spawn { _d = _this select 0; _veh = _this select 1; waitUntil {(_d findNearestEnemy _d) distance _d > 1200}; doGetOut _d; waitUntil {!(_d in _veh)}; sleep 1; _d setVectorDir (getpos _d vectorFromTo getpos _veh); _d playMoveNow "Acts_carFixingWheel"; sleep 19; _d switchMove ""; if (alive _d) then { _veh setDamage 0; _veh setVariable ["willBeRepaired", false];Now, ACE 3 guys talked to me to use getallhitpoints syntax, but how?I was wondering about : if (getHitPointDamage "HitLTrack"; "HitRTrack"; "wheel_1_1_steering"; "wheel_1_2_steering"; "wheel_2_1_steering"; "wheel_2_2_steering" ) exitWith {}; _veh setVariable ["willBeRepaired", true];But he say its not right. How it should look like?Maybe :if [[getHitPointDamage _veh "HitEngine" , "HitLTrack" , "HitRTrack" , "wheel_1_1_steering" , "wheel_1_2_steering" , "wheel_2_1_steering" , "wheel_2_2_steering"]["engine" , "LTrack" , "RTrack" , "LFWheel" , "RFWheel" , "RRWheel" , "LRWheel"][1 , 1 , 1 , 1 , 1 , 1 , 1]] exitWith {};_veh setVariable ["willBeRepaired", true]; Share this post Link to post Share on other sites
Vasily.B 529 Posted March 26, 2016 Anyone? I tried every single combination.....Even if getAllHitPointsDamage _veh; [ ["HitEngine" , "HitLTrack" , "HitRTrack" , "wheel_1_1_steering" , "wheel_1_2_steering" , "wheel_2_1_steering" , "wheel_2_2_steering"], ["Engine" , "LeftTrack" , "RightTrack" , "LeftFrontWheel" , "RightFrontWheel" , "RightRearWheel" , "LeftRearWheel"], [1 , 1 , 1 , 1 , 1 , 1 , 1] ] true, exitWith {}; _veh setVariable ["willBeRepaired", true];Is not working..... Share this post Link to post Share on other sites
Heeeere's johnny! 51 Posted March 26, 2016 You seemingly didn't tell that guy you were talking to, that you need your code to work with A2, because getAllHitPointsDamage is a command introduced in A3 v1.50. Since the syntax of the code you posted is incomplete, but you seem to have some solution already, I'd like to clearify for myself what exactly you mean by "damaged track or wheels". Do you want your event handler to only fire when at least one wheel is completely damaged? Share this post Link to post Share on other sites
Vasily.B 529 Posted March 26, 2016 Well let me get it straight. I writed in wrong topic, beacuse desperate google searching (didnt saw its about A2).Second..... In arma 3 default vehicle damage is ridiculus - Crew disembarking when tracks of tank are damaged, even when it still can provide support as static gun platform. I wanted to make this more realistic, so first was the script addon adding allowcrewinimmobile for all vehicles in default, then i wanted to add some conditions so they appeared - crew (driver) was disembarking to repair "broken" component when they didnt detected any enemy in some radious. Now it become very problematic, beacuse poor AI detection in vehicles, or just too slow detection makes this work even worse than i expected. For example - tank is standing on the road and some guy from Under barrel grenade launcher (UBGL) shoot near to you and makes some 0.0001 damage to track, and become undetected for 2 seconds, driver of the tank is already outside vehicle and die from second shot from UBGL. So i want ti minimalise loose in people by adding damage values - in case of tracked vehicles i want to at least one track being damaged more than 0,9 or equal to 1, in case of wheeled vehicles i want the same but with wheel (1). Share this post Link to post Share on other sites
Vasily.B 529 Posted March 27, 2016 if (!canMove _veh) then {resolved issue :) Share this post Link to post Share on other sites