Medical - Fix broken AI ragdolls if AI unconsciousness is disabled (#9917)

Co-authored-by: jonpas <jonpas33@gmail.com>
Co-authored-by: PabstMirror <pabstmirror@gmail.com>
This commit is contained in:
Grim 2024-04-06 22:20:51 -03:00 committed by GitHub
parent f3f7f2c492
commit 6a2f3a21f2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 24 additions and 6 deletions

View File

@ -86,12 +86,6 @@
if (!isNull objectParent _unit && {local objectParent _unit}) exitWith { if (!isNull objectParent _unit && {local objectParent _unit}) exitWith {
[_unit] call FUNC(lockUnconsciousSeat); [_unit] call FUNC(lockUnconsciousSeat);
}; };
// Prevent second ragdoll of uncon units when they're killed
if (IS_UNCONSCIOUS(_unit) && !isAwake _unit) then {
_unit enableSimulation false;
[{_this enableSimulation true}, _unit, 2] call CBA_fnc_waitAndExecute;
};
}] call CBA_fnc_addEventHandler; }] call CBA_fnc_addEventHandler;
["CAManBase", "deleted", { ["CAManBase", "deleted", {

View File

@ -10,6 +10,12 @@ class Extended_PreInit_EventHandlers {
}; };
}; };
class Extended_PostInit_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_SCRIPT(XEH_postInit));
};
};
class Extended_Respawn_EventHandlers { class Extended_Respawn_EventHandlers {
class CAManBase { class CAManBase {
class ADDON { class ADDON {

View File

@ -0,0 +1,14 @@
#include "script_component.hpp"
["ace_killed", { // global event
params ["_unit"];
// Prevent second ragdoll of uncon units when they're killed
if (
IS_UNCONSCIOUS(_unit) && !isAwake _unit // uncon and not ragdolling
&& {isPlayer _unit || {_unit getVariable [QGVAR(AIUnconsciousness), GVAR(AIUnconsciousness)]}}
) then {
_unit enableSimulation false;
[{_this enableSimulation true}, _unit, 2] call CBA_fnc_waitAndExecute;
};
}] call CBA_fnc_addEventHandler;

View File

@ -17,10 +17,14 @@
params ["_unit", ["_reason", "#setDead"], ["_instigator", objNull]]; params ["_unit", ["_reason", "#setDead"], ["_instigator", objNull]];
TRACE_3("setDead",_unit,_reason,_instigator); TRACE_3("setDead",_unit,_reason,_instigator);
// No heart rate or blood pressure to measure when dead // No heart rate or blood pressure to measure when dead
_unit setVariable [VAR_HEART_RATE, 0, true]; _unit setVariable [VAR_HEART_RATE, 0, true];
_unit setVariable [VAR_BLOOD_PRESS, [0, 0], true]; _unit setVariable [VAR_BLOOD_PRESS, [0, 0], true];
// Clear uncon variable just to be safe
_unit setVariable [VAR_UNCON, nil, true];
_unit setVariable [QEGVAR(medical,causeOfDeath), _reason, true]; _unit setVariable [QEGVAR(medical,causeOfDeath), _reason, true];
// Send a local event before death // Send a local event before death