ACE3/addons/medical/functions/fnc_setUnconscious.sqf

75 lines
2.5 KiB
Plaintext
Raw Normal View History

#include "script_component.hpp"
/*
* Author: Glowbal
* Sets a unit in the unconscious state.
*
* Arguments:
* 0: The unit that will be put in an unconscious state <OBJECT>
* 1: Set unconsciouns <BOOL> (default: true)
* 2: Minimum unconscious time (set to 0 to ignore) <NUMBER><OPTIONAL> (default: 0)
* 3: Force wakeup at given time if vitals are stable <BOOL><OPTIONAL> (default: false)
*
* Return Value:
2016-10-12 19:59:32 +00:00
* Success? <BOOLEAN>
*
* Example:
* [bob, true] call ace_medical_fnc_setUnconscious;
* [player, true, 5, true] call ace_medical_fnc_setUnconscious;
*
Medical Treatment - Modernize and Cleanup (#6933) * Modernize and cleanup medical_treatment * One line for each old public function * Fix litterCleanupDelay name * Improve adjustment calcs / wound blood loss / medications fix func descriptions Calc wound blood loss on events reorder includes so scritpmacroMed has global effect trivial optimization for getCardiacOutput Fix var Fix wounds not reopening (nil _category) Fix surgical kit inherting canBandage conditional debug hitpoints Update ACE_Medical_Treatment_Actions.hpp Use woundBleeding for IS_BLEEDING macro rework medication vars comments Reset var in init / fullHeal Update addons/medical_treatment/functions/fnc_onMedicationUsage.sqf Co-Authored-By: PabstMirror <pabstmirror@gmail.com> * Change wound data array Drop unique id and merge classId and category * Splinting and treatment and gui * Add arm fractures and aim effects * localizations and event * fix * fix merge for renamed files * Fixes and code review changes * Move medical logs clearing to treatment * More cleanup work * cleanup * Apply suggestions from code review Co-Authored-By: PabstMirror <pabstmirror@gmail.com> * formating, rename bone images * Fix args for setDead call in actionPlaceInBodyBag * Apply suggestions from code review Co-Authored-By: PabstMirror <pabstmirror@gmail.com> * disable calls to extension * Update fnc_onMedicationUsage.sqf * Medical - Skip unneeded setVars on initUnit (#6949) * Medical - Transfer state machine state on locality (#6950) * Medical - Transfer state machine state on locality * Fix feedback isUnconscious var * Exclude AI * Make UAV excludes consistant, formating * Update fnc_treatmentFullHealLocal.sqf * reset fractures on respawn * Fix merge * Add PAK time coefficient setting * Fix medication * Add ace_medical_replacementItems config array * checkItems performance improvement * Treatment - cap max animation speed (#6995) * Treatment - cap max animation speed and add lock to prevent AF from reseting anim * Update fnc_getBandageTime.sqf * Use local version of setAnimSpeedCoef * Revert "Use local version of setAnimSpeedCoef" This reverts commit 36c22a90473fd0670ab97f3a373e4ae08493ff52. * Move replacementItems compiling to preInit * Improve replacementItems compiling * Cleanup splint functions, use macros for fractures * Rename splintCondition to canSplint * Add cprCreatesPulse setting * Cleanup remaining functions * Capitalize stringtable entry names * getStitchTime function and fix treatment locations * Update addons/medical_treatment/functions/fnc_getHealTime.sqf Co-Authored-By: SilentSpike <silentspike100+Github@gmail.com>
2019-06-03 15:31:46 +00:00
* Public: Yes
*/
// only run this after the settings are initialized
if !(EGVAR(common,settingsInitFinished)) exitWith {
EGVAR(common,runAtSettingsInitialized) pushBack [FUNC(setUnconscious), _this];
};
params [["_unit", objNull, [objNull]], ["_knockOut", true, [false]], ["_minWaitingTime", 0, [0]], ["_forcedWakup", false, [false]]];
TRACE_4("setUnconscious",_unit,_knockOut,_minWaitingTime,_forcedWakup);
2016-10-12 19:59:32 +00:00
if ((isNull _unit) || {!alive _unit} || {!(_unit isKindOf "CAManBase")}) exitWith {
ERROR_3("Bad Unit %1 [Type: %2] [Alive: %3]",_unit,typeOf _unit,alive _unit);
false
};
2019-03-21 13:34:51 +00:00
2016-10-12 19:59:32 +00:00
if (!local _unit) exitWith {
[QEGVAR(medical,setUnconscious), _this, _unit] call CBA_fnc_targetEvent;
2016-10-12 19:59:32 +00:00
true
};
2019-03-21 13:34:51 +00:00
2018-05-22 16:21:24 +00:00
if (_knockOut isEqualTo IS_UNCONSCIOUS(_unit)) exitWith {
WARNING_2("setUnconscious called with no change [Unit %1] [State [%2]", _unit, _knockOut);
false
};
2019-03-21 13:34:51 +00:00
if (currentWeapon _unit != primaryWeapon _unit) then {
_unit selectWeapon primaryWeapon _unit;
};
if (_knockOut) then {
if (_minWaitingTime > 0) then {
if (_forcedWakup) then {
// If unit still has stable vitals at min waiting time, then force wake up
[{
params [["_unit", objNull]];
if ((alive _unit) && {_unit call EFUNC(medical_status,hasStableVitals)}) then {
TRACE_1("Doing delay wakeup",_unit);
[QGVAR(WakeUp), _unit] call CBA_fnc_localEvent;
} else {
TRACE_1("Skipping delay wakeup",_unit);
};
}, [_unit], _minWaitingTime] call CBA_fnc_waitAndExecute;
};
2018-05-09 12:37:07 +00:00
if (EGVAR(medical,spontaneousWakeUpChance) > 0) then {
TRACE_1("setting lastWakeUpCheck",_minWaitingTime);
_unit setVariable [QEGVAR(medical,lastWakeUpCheck), CBA_missionTime + _minWaitingTime - SPONTANEOUS_WAKE_UP_INTERVAL];
};
};
2018-05-08 09:16:12 +00:00
[QGVAR(knockOut), _unit] call CBA_fnc_localEvent;
} else {
[QGVAR(WakeUp), _unit] call CBA_fnc_localEvent;
};
2016-10-12 19:59:32 +00:00
true