/* * Author: commy2 * * Set the hitpoint damage and change the structural damage acordingly. Requires local vehicle. * * Arguments: * 0: vehicle * 1: hitpoint * 2: damage * * Return Value: * NONE */ #include "script_component.hpp" private ["_vehicle", "_hitPoint", "_hitPointDamage"]; _vehicle = _this select 0; _hitPoint = _this select 1; _hitPointDamage = _this select 2; // can't execute all commands if the vehicle isn't local. exit here. if !(local _vehicle) exitWith {}; // get all valid hitpoints private "_hitPoints"; _hitPoints = [_vehicle] call EFUNC(common,getHitpoints); // exit if the hitpoint is not valid if !(_hitPoint in _hitPoints) exitWith {}; // save array with damage values of all hitpoints private "_hitPointDamages"; _hitPointDamages = []; { _hitPointDamages set [_forEachIndex, _vehicle getHitPointDamage _x]; } forEach _hitPoints; // save structural damage and sum of hitpoint damages private ["_damageOld", "_hitPointDamageSumOld"]; _damageOld = damage _vehicle; _hitPointDamageSumOld = 0; { _hitPointDamageSumOld = _hitPointDamageSumOld + _x; } forEach _hitPointDamages; // set new damage in array _hitPointDamages set [_hitPoints find _hitPoint, _hitPointDamage]; // save sum of new hitpoint damages private "_hitPointDamageSumNew"; _hitPointDamageSumNew = 0; { _hitPointDamageSumNew = _hitPointDamageSumNew + _x; } forEach _hitPointDamages; // calculate new strctural damage private "_damageNew"; _damageNew = _hitPointDamageSumNew / count _hitPoints; if (_hitPointDamageSumOld > 0) then { _damageNew = _damageOld * (_hitPointDamageSumNew / _hitPointDamageSumOld); }; // set new structural damage value _vehicle setDamage _damageNew; // set the new damage for that hit point { _vehicle setHitPointDamage [_x, _hitPointDamages select _forEachIndex]; } forEach _hitPoints;