2016-07-30 12:00:42 +00:00
|
|
|
#include "script_component.hpp"
|
|
|
|
|
2019-05-12 04:13:59 +00:00
|
|
|
[QGVAR(updateDamageEffects), LINKFUNC(updateDamageEffects)] call CBA_fnc_addEventHandler;
|
|
|
|
["unit", {
|
|
|
|
params ["_new"];
|
|
|
|
[_new] call FUNC(updateDamageEffects); // Run on new controlled unit to update QGVAR(aimFracture)
|
|
|
|
}, true] call CBA_fnc_addPlayerEventHandler;
|
|
|
|
|
|
|
|
|
2016-07-30 12:00:42 +00:00
|
|
|
["CAManBase", "init", {
|
|
|
|
params ["_unit"];
|
|
|
|
|
|
|
|
// Check if last hit point is our dummy.
|
|
|
|
private _allHitPoints = getAllHitPointsDamage _unit param [0, []];
|
|
|
|
reverse _allHitPoints;
|
|
|
|
|
|
|
|
if (_allHitPoints param [0, ""] != "ACE_HDBracket") then {
|
2021-02-18 18:58:08 +00:00
|
|
|
private _config = configOf _unit;
|
2018-08-12 11:21:06 +00:00
|
|
|
if (getText (_config >> "simulation") == "UAVPilot") exitWith {TRACE_1("ignore UAV AI",typeOf _unit);};
|
|
|
|
if (getNumber (_config >> "isPlayableLogic") == 1) exitWith {TRACE_1("ignore logic unit",typeOf _unit)};
|
2016-10-02 15:50:17 +00:00
|
|
|
ERROR_1("Bad hitpoints for unit type ""%1""",typeOf _unit);
|
2016-07-30 12:00:42 +00:00
|
|
|
} else {
|
|
|
|
// Calling this function inside curly brackets allows the usage of
|
|
|
|
// "exitWith", which would be broken with "HandleDamage" otherwise.
|
2018-01-02 15:34:13 +00:00
|
|
|
_unit setVariable [
|
2018-01-02 15:36:17 +00:00
|
|
|
QEGVAR(medical,HandleDamageEHID),
|
2018-01-02 15:34:13 +00:00
|
|
|
_unit addEventHandler ["HandleDamage", {_this call FUNC(handleDamage)}]
|
|
|
|
];
|
2016-07-30 12:00:42 +00:00
|
|
|
};
|
2019-04-27 19:04:31 +00:00
|
|
|
}, nil, [IGNORE_BASE_UAVPILOTS], true] call CBA_fnc_addClassEventHandler;
|
2016-07-30 12:00:42 +00:00
|
|
|
|
|
|
|
#ifdef DEBUG_MODE_FULL
|
2018-07-15 14:24:04 +00:00
|
|
|
[QEGVAR(medical,woundReceived), {
|
2017-03-06 21:06:01 +00:00
|
|
|
params ["_unit", "_woundedHitPoint", "_receivedDamage", "_shooter", "_ammo"];
|
|
|
|
TRACE_5("wound",_unit,_woundedHitPoint, _receivedDamage, _shooter, _ammo);
|
2016-12-05 20:34:20 +00:00
|
|
|
//systemChat str _this;
|
2016-07-30 12:00:42 +00:00
|
|
|
}] call CBA_fnc_addEventHandler;
|
|
|
|
#endif
|
|
|
|
|
2016-10-05 22:54:57 +00:00
|
|
|
|
|
|
|
// this handles moving units into vehicles via load functions or zeus
|
|
|
|
// needed, because the vanilla INCAPACITATED state does not handle vehicles
|
|
|
|
["CAManBase", "GetInMan", {
|
|
|
|
params ["_unit"];
|
2017-09-23 16:46:48 +00:00
|
|
|
if (!local _unit) exitWith {};
|
2016-10-05 22:54:57 +00:00
|
|
|
|
|
|
|
if (lifeState _unit == "INCAPACITATED") then {
|
|
|
|
[_unit, true] call FUNC(setUnconsciousAnim);
|
|
|
|
};
|
|
|
|
}] call CBA_fnc_addClassEventHandler;
|
2019-12-17 16:01:17 +00:00
|
|
|
|
|
|
|
// Guarantee aircraft crashes are more lethal
|
|
|
|
["Air", "Killed", {
|
|
|
|
params ["_vehicle", "_killer"];
|
|
|
|
TRACE_3("air killed",_vehicle,typeOf _vehicle,velocity _vehicle);
|
2021-02-18 18:58:08 +00:00
|
|
|
if ((getText (configOf _vehicle >> "destrType")) == "") exitWith {};
|
2019-12-17 16:01:17 +00:00
|
|
|
if (unitIsUAV _vehicle) exitWith {};
|
|
|
|
|
|
|
|
private _lethality = linearConversion [0, 25, (vectorMagnitude velocity _vehicle), 0.5, 1];
|
|
|
|
TRACE_2("air crash",_lethality,crew _vehicle);
|
|
|
|
{
|
|
|
|
[QEGVAR(medical,woundReceived), [_x, "Head", _lethality, _killer, "#vehiclecrash", [HITPOINT_INDEX_HEAD,1]], _x] call CBA_fnc_targetEvent;
|
|
|
|
} forEach (crew _vehicle);
|
|
|
|
}, true, ["ParachuteBase"]] call CBA_fnc_addClassEventHandler;
|
2020-02-22 20:39:14 +00:00
|
|
|
|
|
|
|
// Fixes units being stuck in unconscious animation when being knocked over by a PhysX object
|
|
|
|
["CAManBase", "AnimDone", {
|
|
|
|
params ["_unit", "_anim"];
|
2021-11-24 18:22:17 +00:00
|
|
|
if (local _unit && {_anim find QUNCON_ANIM(face) != -1 && {lifeState _unit != "INCAPACITATED"}}) then {
|
2020-02-22 20:39:14 +00:00
|
|
|
[_unit, false] call FUNC(setUnconsciousAnim);
|
|
|
|
};
|
|
|
|
}] call CBA_fnc_addClassEventHandler;
|