mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Merge branch 'simpleDiagnosis' into streamlinedBasicDiagnosis
This commit is contained in:
commit
7953919b89
@ -27,7 +27,7 @@ if ((local _unit) && {!([_unit] call EFUNC(common,isPlayer))}) then {
|
|||||||
_unit disableConversation true;
|
_unit disableConversation true;
|
||||||
} else {
|
} else {
|
||||||
//Sanity check to make sure we don't enable unconsious AI
|
//Sanity check to make sure we don't enable unconsious AI
|
||||||
if (_unit getVariable ["ace_isunconscious", false]) exitWith {ERROR("Enabling AI for unconsious unit");};
|
if (_unit getVariable ["ace_isunconscious", false] && alive _unit) exitWith {ERROR("Enabling AI for unconsious unit");};
|
||||||
_unit enableAI "MOVE";
|
_unit enableAI "MOVE";
|
||||||
_unit enableAI "TARGET";
|
_unit enableAI "TARGET";
|
||||||
_unit enableAI "AUTOTARGET";
|
_unit enableAI "AUTOTARGET";
|
||||||
|
@ -9,8 +9,6 @@ _isUnconscious = _this select 1;
|
|||||||
private "_player";
|
private "_player";
|
||||||
_player = ACE_player;
|
_player = ACE_player;
|
||||||
|
|
||||||
if ((_unit getHitPointDamage "HitLeftLeg") + (_unit getHitPointDamage "HitRightLeg") > 0.4) exitwith {};
|
|
||||||
|
|
||||||
if (_player getVariable [QGVAR(isDragging), false]) then {
|
if (_player getVariable [QGVAR(isDragging), false]) then {
|
||||||
|
|
||||||
private "_draggedObject";
|
private "_draggedObject";
|
||||||
@ -22,9 +20,9 @@ if (_player getVariable [QGVAR(isDragging), false]) then {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// handle waking up dragged unit
|
// handle waking up dragged unit
|
||||||
if (_unit == _draggedObject) then {
|
//if (_unit == _draggedObject) then {
|
||||||
[_player, _draggedObject] call FUNC(dropObject);
|
// [_player, _draggedObject] call FUNC(dropObject);
|
||||||
};
|
//};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -39,8 +37,8 @@ if (_player getVariable [QGVAR(isCarrying), false]) then {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// handle waking up dragged unit
|
// handle waking up dragged unit
|
||||||
if (_unit == _carriedObject) then {
|
//if (_unit == _carriedObject) then {
|
||||||
[_player, _carriedObject] call FUNC(dropObject_carry);
|
// [_player, _carriedObject] call FUNC(dropObject_carry);
|
||||||
};
|
//};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -4,6 +4,7 @@ class ACE_Head {
|
|||||||
runOnHover = 1;
|
runOnHover = 1;
|
||||||
statement = QUOTE([ARR_3(_target, true, 0)] call DFUNC(displayPatientInformation));
|
statement = QUOTE([ARR_3(_target, true, 0)] call DFUNC(displayPatientInformation));
|
||||||
modifierFunction = QUOTE([ARR_4(_target,_player,0,_this select 3)] call FUNC(modifyMedicalAction));
|
modifierFunction = QUOTE([ARR_4(_target,_player,0,_this select 3)] call FUNC(modifyMedicalAction));
|
||||||
|
condition = "true";
|
||||||
EXCEPTIONS
|
EXCEPTIONS
|
||||||
icon = PATHTOF(UI\icons\medical_cross.paa);
|
icon = PATHTOF(UI\icons\medical_cross.paa);
|
||||||
distance = MEDICAL_ACTION_DISTANCE;
|
distance = MEDICAL_ACTION_DISTANCE;
|
||||||
@ -70,12 +71,19 @@ class ACE_Head {
|
|||||||
statement = QUOTE([ARR_4(_player, _target, 'head', 'CheckResponse')] call DFUNC(treatment));
|
statement = QUOTE([ARR_4(_player, _target, 'head', 'CheckResponse')] call DFUNC(treatment));
|
||||||
EXCEPTIONS
|
EXCEPTIONS
|
||||||
};
|
};
|
||||||
|
class Diagnose: CheckPulse {
|
||||||
|
displayName = "Diagnose";
|
||||||
|
condition = QUOTE([ARR_4(_player, _target, 'head', 'Diagnose')] call DFUNC(canTreatCached));
|
||||||
|
statement = QUOTE([ARR_4(_player, _target, 'head', 'Diagnose')] call DFUNC(treatment));
|
||||||
|
EXCEPTIONS
|
||||||
|
};
|
||||||
};
|
};
|
||||||
class ACE_Torso {
|
class ACE_Torso {
|
||||||
displayName = "$STR_ACE_Interaction_Torso";
|
displayName = "$STR_ACE_Interaction_Torso";
|
||||||
runOnHover = 1;
|
runOnHover = 1;
|
||||||
statement = QUOTE([ARR_3(_target, true, 1)] call DFUNC(displayPatientInformation));
|
statement = QUOTE([ARR_3(_target, true, 1)] call DFUNC(displayPatientInformation));
|
||||||
modifierFunction = QUOTE([ARR_4(_target,_player,1,_this select 3)] call FUNC(modifyMedicalAction));
|
modifierFunction = QUOTE([ARR_4(_target,_player,1,_this select 3)] call FUNC(modifyMedicalAction));
|
||||||
|
condition = "true";
|
||||||
EXCEPTIONS
|
EXCEPTIONS
|
||||||
icon = PATHTOF(UI\icons\medical_cross.paa);
|
icon = PATHTOF(UI\icons\medical_cross.paa);
|
||||||
distance = MEDICAL_ACTION_DISTANCE;
|
distance = MEDICAL_ACTION_DISTANCE;
|
||||||
@ -176,6 +184,7 @@ class ACE_ArmLeft {
|
|||||||
runOnHover = 1;
|
runOnHover = 1;
|
||||||
statement = QUOTE([ARR_3(_target, true, 2)] call DFUNC(displayPatientInformation));
|
statement = QUOTE([ARR_3(_target, true, 2)] call DFUNC(displayPatientInformation));
|
||||||
modifierFunction = QUOTE([ARR_4(_target,_player,2,_this select 3)] call FUNC(modifyMedicalAction));
|
modifierFunction = QUOTE([ARR_4(_target,_player,2,_this select 3)] call FUNC(modifyMedicalAction));
|
||||||
|
condition = "true";
|
||||||
EXCEPTIONS
|
EXCEPTIONS
|
||||||
icon = PATHTOF(UI\icons\medical_cross.paa);
|
icon = PATHTOF(UI\icons\medical_cross.paa);
|
||||||
distance = MEDICAL_ACTION_DISTANCE;
|
distance = MEDICAL_ACTION_DISTANCE;
|
||||||
@ -333,6 +342,7 @@ class ACE_ArmRight {
|
|||||||
runOnHover = 1;
|
runOnHover = 1;
|
||||||
statement = QUOTE([ARR_3(_target, true, 3)] call DFUNC(displayPatientInformation));
|
statement = QUOTE([ARR_3(_target, true, 3)] call DFUNC(displayPatientInformation));
|
||||||
modifierFunction = QUOTE([ARR_4(_target,_player,3,_this select 3)] call FUNC(modifyMedicalAction));
|
modifierFunction = QUOTE([ARR_4(_target,_player,3,_this select 3)] call FUNC(modifyMedicalAction));
|
||||||
|
condition = "true";
|
||||||
EXCEPTIONS
|
EXCEPTIONS
|
||||||
icon = PATHTOF(UI\icons\medical_cross.paa);
|
icon = PATHTOF(UI\icons\medical_cross.paa);
|
||||||
distance = MEDICAL_ACTION_DISTANCE;
|
distance = MEDICAL_ACTION_DISTANCE;
|
||||||
@ -427,8 +437,8 @@ class ACE_ArmRight {
|
|||||||
};
|
};
|
||||||
class PlasmaIV: BloodIV {
|
class PlasmaIV: BloodIV {
|
||||||
displayName = "$STR_ACE_MEDICAL_ACTIONS_Plasma4_1000";
|
displayName = "$STR_ACE_MEDICAL_ACTIONS_Plasma4_1000";
|
||||||
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'BloodIV')] call DFUNC(canTreatCached));
|
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'PlasmaIV')] call DFUNC(canTreatCached));
|
||||||
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'BloodIV')] call DFUNC(treatment));
|
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'PlasmaIV')] call DFUNC(treatment));
|
||||||
EXCEPTIONS
|
EXCEPTIONS
|
||||||
};
|
};
|
||||||
class PlasmaIV_500: PlasmaIV {
|
class PlasmaIV_500: PlasmaIV {
|
||||||
@ -487,6 +497,7 @@ class ACE_LegLeft {
|
|||||||
runOnHover = 1;
|
runOnHover = 1;
|
||||||
statement = QUOTE([ARR_3(_target, true, 4)] call DFUNC(displayPatientInformation));
|
statement = QUOTE([ARR_3(_target, true, 4)] call DFUNC(displayPatientInformation));
|
||||||
modifierFunction = QUOTE([ARR_4(_target,_player,4,_this select 3)] call FUNC(modifyMedicalAction));
|
modifierFunction = QUOTE([ARR_4(_target,_player,4,_this select 3)] call FUNC(modifyMedicalAction));
|
||||||
|
condition = "true";
|
||||||
EXCEPTIONS
|
EXCEPTIONS
|
||||||
icon = PATHTOF(UI\icons\medical_cross.paa);
|
icon = PATHTOF(UI\icons\medical_cross.paa);
|
||||||
distance = MEDICAL_ACTION_DISTANCE;
|
distance = MEDICAL_ACTION_DISTANCE;
|
||||||
@ -583,8 +594,8 @@ class ACE_LegLeft {
|
|||||||
};
|
};
|
||||||
class PlasmaIV: BloodIV {
|
class PlasmaIV: BloodIV {
|
||||||
displayName = "$STR_ACE_MEDICAL_ACTIONS_Plasma4_1000";
|
displayName = "$STR_ACE_MEDICAL_ACTIONS_Plasma4_1000";
|
||||||
condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'BloodIV')] call DFUNC(canTreatCached));
|
condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'PlasmaIV')] call DFUNC(canTreatCached));
|
||||||
statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'BloodIV')] call DFUNC(treatment));
|
statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'PlasmaIV')] call DFUNC(treatment));
|
||||||
EXCEPTIONS
|
EXCEPTIONS
|
||||||
};
|
};
|
||||||
class PlasmaIV_500: PlasmaIV {
|
class PlasmaIV_500: PlasmaIV {
|
||||||
@ -629,6 +640,7 @@ class ACE_LegRight {
|
|||||||
runOnHover = 1;
|
runOnHover = 1;
|
||||||
statement = QUOTE([ARR_3(_target, true, 5)] call DFUNC(displayPatientInformation));
|
statement = QUOTE([ARR_3(_target, true, 5)] call DFUNC(displayPatientInformation));
|
||||||
modifierFunction = QUOTE([ARR_4(_target,_player,5,_this select 3)] call FUNC(modifyMedicalAction));
|
modifierFunction = QUOTE([ARR_4(_target,_player,5,_this select 3)] call FUNC(modifyMedicalAction));
|
||||||
|
condition = "true";
|
||||||
EXCEPTIONS
|
EXCEPTIONS
|
||||||
icon = PATHTOF(UI\icons\medical_cross.paa);
|
icon = PATHTOF(UI\icons\medical_cross.paa);
|
||||||
distance = MEDICAL_ACTION_DISTANCE;
|
distance = MEDICAL_ACTION_DISTANCE;
|
||||||
@ -724,8 +736,8 @@ class ACE_LegRight {
|
|||||||
};
|
};
|
||||||
class PlasmaIV: BloodIV {
|
class PlasmaIV: BloodIV {
|
||||||
displayName = "$STR_ACE_MEDICAL_ACTIONS_Plasma4_1000";
|
displayName = "$STR_ACE_MEDICAL_ACTIONS_Plasma4_1000";
|
||||||
condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'BloodIV')] call DFUNC(canTreatCached));
|
condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'PlasmaIV')] call DFUNC(canTreatCached));
|
||||||
statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'BloodIV')] call DFUNC(treatment));
|
statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'PlasmaIV')] call DFUNC(treatment));
|
||||||
EXCEPTIONS
|
EXCEPTIONS
|
||||||
};
|
};
|
||||||
class PlasmaIV_500: PlasmaIV {
|
class PlasmaIV_500: PlasmaIV {
|
||||||
|
@ -4,6 +4,7 @@ class Medical {
|
|||||||
hotkey = "M";
|
hotkey = "M";
|
||||||
exceptions[] = {"isNotInside"};
|
exceptions[] = {"isNotInside"};
|
||||||
statement = QUOTE([ARR_3(_target, true, 0)] call DFUNC(displayPatientInformation));
|
statement = QUOTE([ARR_3(_target, true, 0)] call DFUNC(displayPatientInformation));
|
||||||
|
condition = "true";
|
||||||
icon = PATHTOF(UI\icons\medical_cross.paa);
|
icon = PATHTOF(UI\icons\medical_cross.paa);
|
||||||
|
|
||||||
class ACE_Head {
|
class ACE_Head {
|
||||||
@ -12,6 +13,7 @@ class Medical {
|
|||||||
exceptions[] = {"isNotInside"};
|
exceptions[] = {"isNotInside"};
|
||||||
statement = QUOTE([ARR_3(_target, true, 0)] call DFUNC(displayPatientInformation));
|
statement = QUOTE([ARR_3(_target, true, 0)] call DFUNC(displayPatientInformation));
|
||||||
modifierFunction = QUOTE([ARR_4(_target,_player,0,_this select 3)] call FUNC(modifyMedicalAction));
|
modifierFunction = QUOTE([ARR_4(_target,_player,0,_this select 3)] call FUNC(modifyMedicalAction));
|
||||||
|
condition = "true";
|
||||||
runOnHover = 1;
|
runOnHover = 1;
|
||||||
|
|
||||||
class Bandage {
|
class Bandage {
|
||||||
@ -149,6 +151,7 @@ class Medical {
|
|||||||
exceptions[] = {"isNotInside"};
|
exceptions[] = {"isNotInside"};
|
||||||
statement = QUOTE([ARR_3(_target, true, 2)] call DFUNC(displayPatientInformation));
|
statement = QUOTE([ARR_3(_target, true, 2)] call DFUNC(displayPatientInformation));
|
||||||
modifierFunction = QUOTE([ARR_4(_target,_player,2,_this select 3)] call FUNC(modifyMedicalAction));
|
modifierFunction = QUOTE([ARR_4(_target,_player,2,_this select 3)] call FUNC(modifyMedicalAction));
|
||||||
|
condition = "true";
|
||||||
icon = PATHTOF(UI\icons\medical_cross.paa);
|
icon = PATHTOF(UI\icons\medical_cross.paa);
|
||||||
|
|
||||||
class Bandage {
|
class Bandage {
|
||||||
@ -250,6 +253,7 @@ class Medical {
|
|||||||
exceptions[] = {"isNotInside"};
|
exceptions[] = {"isNotInside"};
|
||||||
statement = QUOTE([ARR_3(_target, true, 3)] call DFUNC(displayPatientInformation));
|
statement = QUOTE([ARR_3(_target, true, 3)] call DFUNC(displayPatientInformation));
|
||||||
modifierFunction = QUOTE([ARR_4(_target,_player,3,_this select 3)] call FUNC(modifyMedicalAction));
|
modifierFunction = QUOTE([ARR_4(_target,_player,3,_this select 3)] call FUNC(modifyMedicalAction));
|
||||||
|
condition = "true";
|
||||||
icon = PATHTOF(UI\icons\medical_cross.paa);
|
icon = PATHTOF(UI\icons\medical_cross.paa);
|
||||||
|
|
||||||
class Bandage {
|
class Bandage {
|
||||||
@ -347,6 +351,7 @@ class Medical {
|
|||||||
exceptions[] = {"isNotInside"};
|
exceptions[] = {"isNotInside"};
|
||||||
statement = QUOTE([ARR_3(_target, true, 4)] call DFUNC(displayPatientInformation));
|
statement = QUOTE([ARR_3(_target, true, 4)] call DFUNC(displayPatientInformation));
|
||||||
modifierFunction = QUOTE([ARR_4(_target,_player,4,_this select 3)] call FUNC(modifyMedicalAction));
|
modifierFunction = QUOTE([ARR_4(_target,_player,4,_this select 3)] call FUNC(modifyMedicalAction));
|
||||||
|
condition = "true";
|
||||||
icon = PATHTOF(UI\icons\medical_cross.paa);
|
icon = PATHTOF(UI\icons\medical_cross.paa);
|
||||||
|
|
||||||
class Bandage {
|
class Bandage {
|
||||||
@ -433,6 +438,7 @@ class Medical {
|
|||||||
exceptions[] = {"isNotInside"};
|
exceptions[] = {"isNotInside"};
|
||||||
statement = QUOTE([ARR_3(_target, true, 5)] call DFUNC(displayPatientInformation));
|
statement = QUOTE([ARR_3(_target, true, 5)] call DFUNC(displayPatientInformation));
|
||||||
modifierFunction = QUOTE([ARR_4(_target,_player,5,_this select 3)] call FUNC(modifyMedicalAction));
|
modifierFunction = QUOTE([ARR_4(_target,_player,5,_this select 3)] call FUNC(modifyMedicalAction));
|
||||||
|
condition = "true";
|
||||||
icon = PATHTOF(UI\icons\medical_cross.paa);
|
icon = PATHTOF(UI\icons\medical_cross.paa);
|
||||||
|
|
||||||
class Bandage {
|
class Bandage {
|
||||||
|
@ -71,14 +71,14 @@ class ACE_Medical_Actions {
|
|||||||
itemConsumed = 1;
|
itemConsumed = 1;
|
||||||
litter[] = {};
|
litter[] = {};
|
||||||
};
|
};
|
||||||
class CheckPulse: Bandage {
|
class Diagnose: Bandage {
|
||||||
displayName = "";
|
displayName = "Diagnose";
|
||||||
displayNameProgress = "";
|
displayNameProgress = "Diagnosing...";
|
||||||
treatmentLocations[] = {"All"};
|
treatmentLocations[] = {"All"};
|
||||||
requiredMedic = 0;
|
requiredMedic = 0;
|
||||||
treatmentTime = 2;
|
treatmentTime = 1;
|
||||||
items[] = {};
|
items[] = {};
|
||||||
callbackSuccess = QUOTE(DFUNC(actionCheckPulse));
|
callbackSuccess = QUOTE(DFUNC(actionDiagnose));
|
||||||
callbackFailure = "";
|
callbackFailure = "";
|
||||||
callbackProgress = "";
|
callbackProgress = "";
|
||||||
animationPatient = "";
|
animationPatient = "";
|
||||||
@ -86,12 +86,6 @@ class ACE_Medical_Actions {
|
|||||||
itemConsumed = 0;
|
itemConsumed = 0;
|
||||||
litter[] = {};
|
litter[] = {};
|
||||||
};
|
};
|
||||||
class CheckBloodPressure: CheckPulse {
|
|
||||||
callbackSuccess = QUOTE(DFUNC(actionCheckBloodPressure));
|
|
||||||
};
|
|
||||||
class CheckResponse: CheckPulse {
|
|
||||||
callbackSuccess = QUOTE(DFUNC(actionCheckResponse));
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class Advanced {
|
class Advanced {
|
||||||
|
@ -135,4 +135,8 @@ class ACE_Settings {
|
|||||||
values[] = {"$STR_ACE_Medical_painEffect_Flash", "$STR_ACE_Medical_painEffect_Chroma"};
|
values[] = {"$STR_ACE_Medical_painEffect_Flash", "$STR_ACE_Medical_painEffect_Chroma"};
|
||||||
isClientSettable = 1;
|
isClientSettable = 1;
|
||||||
};
|
};
|
||||||
|
class GVAR(allowUnconsciousAnimationOnTreatment) {
|
||||||
|
typeName = "BOOL";
|
||||||
|
value = 0;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
@ -4,7 +4,4 @@ private ["_unit"];
|
|||||||
_unit = _this select 0;
|
_unit = _this select 0;
|
||||||
|
|
||||||
_unit addEventHandler ["HandleDamage", {_this call FUNC(handleDamage)}];
|
_unit addEventHandler ["HandleDamage", {_this call FUNC(handleDamage)}];
|
||||||
|
[_unit] call FUNC(init);
|
||||||
if (local _unit) then {
|
|
||||||
[_unit] call FUNC(init);
|
|
||||||
};
|
|
||||||
|
@ -241,7 +241,7 @@ if (USE_WOUND_EVENT_SYNC) then {
|
|||||||
// We are only pulling the wounds for the units in the player group. Anything else will come when the unit interacts with them.
|
// We are only pulling the wounds for the units in the player group. Anything else will come when the unit interacts with them.
|
||||||
{
|
{
|
||||||
[_x, _newPlayer] call FUNC(requestWoundSync);
|
[_x, _newPlayer] call FUNC(requestWoundSync);
|
||||||
}foreach units group player;
|
}foreach units group _newPlayer;
|
||||||
};
|
};
|
||||||
}] call EFUNC(common,addEventhandler);
|
}] call EFUNC(common,addEventhandler);
|
||||||
};
|
};
|
||||||
|
@ -7,6 +7,8 @@ PREP(actionCheckBloodPressureLocal);
|
|||||||
PREP(actionCheckPulse);
|
PREP(actionCheckPulse);
|
||||||
PREP(actionCheckPulseLocal);
|
PREP(actionCheckPulseLocal);
|
||||||
PREP(actionCheckResponse);
|
PREP(actionCheckResponse);
|
||||||
|
PREP(actionDiagnose);
|
||||||
|
PREP(actionDiagnoseLocal);
|
||||||
PREP(actionPlaceInBodyBag);
|
PREP(actionPlaceInBodyBag);
|
||||||
PREP(actionRemoveTourniquet);
|
PREP(actionRemoveTourniquet);
|
||||||
PREP(actionLoadUnit);
|
PREP(actionLoadUnit);
|
||||||
@ -97,6 +99,7 @@ PREP(moduleAssignMedicalFacility);
|
|||||||
PREP(moduleTreatmentConfiguration);
|
PREP(moduleTreatmentConfiguration);
|
||||||
PREP(copyDeadBody);
|
PREP(copyDeadBody);
|
||||||
PREP(requestWoundSync);
|
PREP(requestWoundSync);
|
||||||
|
PREP(unconsciousPFH);
|
||||||
|
|
||||||
// Networked litter
|
// Networked litter
|
||||||
PREP(createLitter);
|
PREP(createLitter);
|
||||||
|
@ -6,8 +6,7 @@ _unit = _this select 0;
|
|||||||
|
|
||||||
if !(local _unit) exitWith {};
|
if !(local _unit) exitWith {};
|
||||||
|
|
||||||
diag_log "running respawn";
|
[_unit, true] call FUNC(init);
|
||||||
[_unit] call FUNC(init);
|
|
||||||
|
|
||||||
//Reset captive status for respawning unit
|
//Reset captive status for respawning unit
|
||||||
if (!(_unit getVariable ["ACE_isUnconscious", false])) then {
|
if (!(_unit getVariable ["ACE_isUnconscious", false])) then {
|
||||||
|
20
addons/medical/functions/fnc_actionDiagnose.sqf
Normal file
20
addons/medical/functions/fnc_actionDiagnose.sqf
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
/*
|
||||||
|
* Author: Glowbal
|
||||||
|
* Action for diagnosing in basic medical
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: The medic <OBJECT>
|
||||||
|
* 1: The patient <OBJECT>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* NONE
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
private ["_caller","_target","_title","_content"];
|
||||||
|
_caller = _this select 0;
|
||||||
|
_target = _this select 1;
|
||||||
|
[[_caller, _target], QUOTE(DFUNC(actionDiagnoseLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */
|
40
addons/medical/functions/fnc_actionDiagnoseLocal.sqf
Normal file
40
addons/medical/functions/fnc_actionDiagnoseLocal.sqf
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* Author: Glowbal
|
||||||
|
* Local callback for checking the pulse of a patient
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: The medic <OBJECT>
|
||||||
|
* 1: The patient <OBJECT>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* NONE
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
_caller = _this select 0;
|
||||||
|
_unit = _this select 1;
|
||||||
|
|
||||||
|
_genericMessages = ["Patient %1<br/>is %2.<br/>%3.<br/>%4"];
|
||||||
|
|
||||||
|
_genericMessages pushBack ([_unit] call EFUNC(common,getName));
|
||||||
|
if (alive _unit) then {
|
||||||
|
_genericMessages pushback "alive";
|
||||||
|
} else {
|
||||||
|
_genericMessages pushback "dead";
|
||||||
|
};
|
||||||
|
if (_target getvariable[QGVAR(hasLostBlood), false]) then {
|
||||||
|
_genericMessages pushback "He's lost some blood";
|
||||||
|
} else {
|
||||||
|
_genericMessages pushback "He hasn't lost blood";
|
||||||
|
};
|
||||||
|
|
||||||
|
if (_target getvariable[QGVAR(hasPain), false]) then {
|
||||||
|
_genericMessages pushback "He is in pain";
|
||||||
|
} else {
|
||||||
|
_genericMessages pushback "He is not in pain";
|
||||||
|
};
|
||||||
|
diag_log _genericMessages;
|
||||||
|
["displayTextStructured", [_caller], [format _genericMessages, 3.0, _caller]] call EFUNC(common,targetEvent);
|
@ -19,4 +19,4 @@
|
|||||||
#define MAX_DURATION_CACHE 2
|
#define MAX_DURATION_CACHE 2
|
||||||
|
|
||||||
// parameters, function, namespace, uid
|
// parameters, function, namespace, uid
|
||||||
[_this, DFUNC(canTreat), _this select 0, format[QGVAR(canTreat_%1_%2), _this select 2, _this select 3], MAX_DURATION_CACHE, "clearConditionCaches"] call EFUNC(common,cachedCall);
|
[_this, DFUNC(canTreat), _this select 1, format[QGVAR(canTreat_%1_%2), _this select 2, _this select 3], MAX_DURATION_CACHE, "clearConditionCaches"] call EFUNC(common,cachedCall);
|
||||||
|
@ -21,10 +21,10 @@ if ((vehicle _unit != _unit) && {!alive (vehicle _unit)}) exitwith { true };
|
|||||||
|
|
||||||
// Find the correct Damage threshold for unit.
|
// Find the correct Damage threshold for unit.
|
||||||
_damageThreshold = [1,1,1];
|
_damageThreshold = [1,1,1];
|
||||||
if (isPlayer _unit) then {
|
if ([_unit] call EFUNC(common,IsPlayer)) then {
|
||||||
//_damageThreshold =_unit getvariable[QGVAR(unitDamageThreshold), [GVAR(damageThreshold_Players), GVAR(damageThreshold_Players), GVAR(damageThreshold_Players) * 1.7]];
|
_damageThreshold =_unit getvariable[QGVAR(unitDamageThreshold), [GVAR(playerDamageThreshold), GVAR(playerDamageThreshold), GVAR(playerDamageThreshold) * 1.7]];
|
||||||
} else {
|
} else {
|
||||||
//_damageThreshold =_unit getvariable[QGVAR(unitDamageThreshold), [GVAR(damageThreshold_AI), GVAR(damageThreshold_AI), GVAR(damageThreshold_AI) * 1.7]];
|
_damageThreshold =_unit getvariable[QGVAR(unitDamageThreshold), [GVAR(AIDamageThreshold), GVAR(AIDamageThreshold), GVAR(AIDamageThreshold) * 1.7]];
|
||||||
};
|
};
|
||||||
|
|
||||||
_damageBodyPart = ((_unit getvariable [QGVAR(bodyPartStatus),[0, 0, 0, 0, 0, 0]]) select _part) + _withDamage;
|
_damageBodyPart = ((_unit getvariable [QGVAR(bodyPartStatus),[0, 0, 0, 0, 0, 0]]) select _part) + _withDamage;
|
||||||
|
@ -59,20 +59,30 @@ if (isClass (_config >> _className)) then {
|
|||||||
_bandagedWounds = _target getvariable [QGVAR(bandagedWounds), []];
|
_bandagedWounds = _target getvariable [QGVAR(bandagedWounds), []];
|
||||||
_exist = false;
|
_exist = false;
|
||||||
_injuryId = _injury select 0;
|
_injuryId = _injury select 0;
|
||||||
|
_bandagedInjury = [];
|
||||||
{
|
{
|
||||||
if ((_x select 0) == _injuryId) exitwith {
|
if ((_x select 0) == _injuryId) exitwith {
|
||||||
_exist = true;
|
_exist = true;
|
||||||
_existingInjury = _x;
|
_existingInjury = _x;
|
||||||
_existingInjury set [3, (_existingInjury select 3) + _impact];
|
_existingInjury set [3, (_existingInjury select 3) + _impact];
|
||||||
_bandagedWounds set [_foreachIndex, _existingInjury];
|
_bandagedWounds set [_foreachIndex, _existingInjury];
|
||||||
|
|
||||||
|
_bandagedInjury = _existingInjury;
|
||||||
};
|
};
|
||||||
}foreach _bandagedWounds;
|
}foreach _bandagedWounds;
|
||||||
|
|
||||||
if !(_exist) then {
|
if !(_exist) then {
|
||||||
// [ID, classID, bodypart, percentage treated, bloodloss rate]
|
// [ID, classID, bodypart, percentage treated, bloodloss rate]
|
||||||
_bandagedWounds pushback [_injuryId, _injury select 1, _injury select 2, _impact, _injury select 4];
|
_bandagedInjury = [_injuryId, _injury select 1, _injury select 2, _impact, _injury select 4];
|
||||||
|
_bandagedWounds pushback _bandagedInjury;
|
||||||
|
};
|
||||||
|
|
||||||
|
_target setvariable [QGVAR(bandagedWounds), _bandagedWounds, !USE_WOUND_EVENT_SYNC];
|
||||||
|
|
||||||
|
if (USE_WOUND_EVENT_SYNC) then {
|
||||||
|
// sync _bandagedInjury
|
||||||
|
|
||||||
};
|
};
|
||||||
_target setvariable [QGVAR(bandagedWounds), _bandagedWounds, true];
|
|
||||||
|
|
||||||
// Check if we are ever going to reopen this
|
// Check if we are ever going to reopen this
|
||||||
if (random(1) <= _reopeningChance) then {
|
if (random(1) <= _reopeningChance) then {
|
||||||
@ -109,7 +119,7 @@ if (random(1) <= _reopeningChance) then {
|
|||||||
}foreach _bandagedWounds;
|
}foreach _bandagedWounds;
|
||||||
|
|
||||||
if (_exist) then {
|
if (_exist) then {
|
||||||
_target setvariable [QGVAR(bandagedWounds), _bandagedWounds, true];
|
_target setvariable [QGVAR(bandagedWounds), _bandagedWounds, !USE_WOUND_EVENT_SYNC];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
// Otherwise something went wrong, we we don't reopen them..
|
// Otherwise something went wrong, we we don't reopen them..
|
||||||
|
@ -57,6 +57,12 @@ if (GVAR(level) >= 2) then {
|
|||||||
_minLethalDamage = GVAR(minLethalDamages) select _typeIndex;
|
_minLethalDamage = GVAR(minLethalDamages) select _typeIndex;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (vehicle _unit != _unit && {!(vehicle _unit isKindOf "StaticWeapon")} && {isNull _source} && {_projectile == ""} && {_selection == ""}) then {
|
||||||
|
if (GVAR(enableVehicleCrashes)) then {
|
||||||
|
_selection = GVAR(SELECTIONS) select (floor(random(count GVAR(SELECTIONS))));
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
if ((_minLethalDamage <= _newDamage) && {[_unit, [_selection] call FUNC(selectionNameToNumber), _newDamage] call FUNC(determineIfFatal)} && {_selection in ["", "head", "body"]}) then {
|
if ((_minLethalDamage <= _newDamage) && {[_unit, [_selection] call FUNC(selectionNameToNumber), _newDamage] call FUNC(determineIfFatal)} && {_selection in ["", "head", "body"]}) then {
|
||||||
if ([_unit] call FUNC(setDead)) then {
|
if ([_unit] call FUNC(setDead)) then {
|
||||||
_damageReturn = 1;
|
_damageReturn = 1;
|
||||||
|
@ -33,10 +33,12 @@ if (isNull _sourceOfDamage && {_typeOfProjectile == ""} && {vehicle _unit == _un
|
|||||||
};
|
};
|
||||||
_typeOfDamage = [_typeOfProjectile] call FUNC(getTypeOfDamage);
|
_typeOfDamage = [_typeOfProjectile] call FUNC(getTypeOfDamage);
|
||||||
_part = [_selectionName] call FUNC(selectionNameToNumber);
|
_part = [_selectionName] call FUNC(selectionNameToNumber);
|
||||||
|
if (_part < 0) exitwith {};
|
||||||
|
|
||||||
_hitPoints = ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"];
|
_hitPoints = ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"];
|
||||||
// Sorting out the damage
|
// Sorting out the damage
|
||||||
_damageBodyParts = _unit getvariable [QGVAR(bodyPartStatus), [0,0,0,0,0,0]];
|
_damageBodyParts = _unit getvariable [QGVAR(bodyPartStatus), [0,0,0,0,0,0]];
|
||||||
|
|
||||||
_damageBodyParts set [_part, (_damageBodyParts select _part) + _newDamage];
|
_damageBodyParts set [_part, (_damageBodyParts select _part) + _newDamage];
|
||||||
_unit setvariable [QGVAR(bodyPartStatus), _damageBodyParts, true];
|
_unit setvariable [QGVAR(bodyPartStatus), _damageBodyParts, true];
|
||||||
|
|
||||||
|
@ -63,6 +63,12 @@ if (_selectionName in GVAR(SELECTIONS)) then {
|
|||||||
_newDamage = _damage - (_unit getHitPointDamage (GVAR(HITPOINTS) select (GVAR(SELECTIONS) find _selectionName)));
|
_newDamage = _damage - (_unit getHitPointDamage (GVAR(HITPOINTS) select (GVAR(SELECTIONS) find _selectionName)));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if ([_unit] call EFUNC(common,isPlayer)) then {
|
||||||
|
_newDamage = _newDamage / (GVAR(playerDamageThreshold) max 0.01);
|
||||||
|
} else {
|
||||||
|
_newDamage = _newDamage / (GVAR(AIDamageThreshold) max 0.01);
|
||||||
|
};
|
||||||
|
|
||||||
_damage = _damage - _newDamage;
|
_damage = _damage - _newDamage;
|
||||||
|
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ if (_selectionName in _hitSelections) then {
|
|||||||
|
|
||||||
// Check for vehicle crash
|
// Check for vehicle crash
|
||||||
if (vehicle _unit != _unit && {!(vehicle _unit isKindOf "StaticWeapon")} && {isNull _source} && {_projectile == ""} && {_selectionName == ""}) then {
|
if (vehicle _unit != _unit && {!(vehicle _unit isKindOf "StaticWeapon")} && {isNull _source} && {_projectile == ""} && {_selectionName == ""}) then {
|
||||||
if (missionNamespace getvariable [QGVAR(allowVehicleCrashDamage), true]) then {
|
if (GVAR(enableVehicleCrashes)) then {
|
||||||
_selectionName = _hitSelections select (floor(random(count _hitSelections)));
|
_selectionName = _hitSelections select (floor(random(count _hitSelections)));
|
||||||
_projectile = "vehiclecrash";
|
_projectile = "vehiclecrash";
|
||||||
};
|
};
|
||||||
|
@ -133,7 +133,6 @@ if (count _woundsCreated > 0) then {
|
|||||||
};
|
};
|
||||||
|
|
||||||
if (USE_WOUND_EVENT_SYNC) then {
|
if (USE_WOUND_EVENT_SYNC) then {
|
||||||
// TODO Should this be done in a single broadcast?
|
|
||||||
// Broadcast the new injuries across the net in parts. One broadcast per injury. Prevents having to broadcast one massive array of injuries.
|
// Broadcast the new injuries across the net in parts. One broadcast per injury. Prevents having to broadcast one massive array of injuries.
|
||||||
{
|
{
|
||||||
["medical_propagateWound", [_unit, _x]] call EFUNC(common,globalEvent);
|
["medical_propagateWound", [_unit, _x]] call EFUNC(common,globalEvent);
|
||||||
|
@ -22,4 +22,14 @@ if (_local) then {
|
|||||||
if (_unit getvariable[QGVAR(addedToUnitLoop),false]) then {
|
if (_unit getvariable[QGVAR(addedToUnitLoop),false]) then {
|
||||||
[_unit, true] call FUNC(addToInjuredCollection);
|
[_unit, true] call FUNC(addToInjuredCollection);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if ((_unit getvariable ["ACE_isUnconscious",false]) && {count (_unit getvariable [QGVAR(unconsciousArguments), []]) >= 7}) then {
|
||||||
|
private "_arguments";
|
||||||
|
_arguments = (_unit getvariable [QGVAR(unconsciousArguments), []]);
|
||||||
|
_arguments set [ 3, time];
|
||||||
|
|
||||||
|
[DFUNC(unconsciousPFH), 0.1, _arguments ] call CBA_fnc_addPerFrameHandler;
|
||||||
|
|
||||||
|
_unit setvariable [QGVAR(unconsciousArguments), nil, true];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
@ -94,7 +94,7 @@ if (GVAR(level) >= 2) then {
|
|||||||
if ([_unit] call EFUNC(common,isAwake)) then {
|
if ([_unit] call EFUNC(common,isAwake)) then {
|
||||||
if (_bloodVolume < 60) then {
|
if (_bloodVolume < 60) then {
|
||||||
if (random(1) > 0.9) then {
|
if (random(1) > 0.9) then {
|
||||||
[_unit] call FUNC(setUnconscious);
|
[_unit, true, 15 + random(20)] call FUNC(setUnconscious);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@ -136,7 +136,7 @@ if (GVAR(level) >= 2) then {
|
|||||||
|
|
||||||
if (!(_unit getvariable [QGVAR(inCardiacArrest),false])) then {
|
if (!(_unit getvariable [QGVAR(inCardiacArrest),false])) then {
|
||||||
if (_heartRate < 10 || _bloodPressureH < 30 || _bloodVolume < 20) then {
|
if (_heartRate < 10 || _bloodPressureH < 30 || _bloodVolume < 20) then {
|
||||||
[_unit] call FUNC(setUnconscious); // safety check to ensure unconsciousness for units if they are not dead already.
|
[_unit, true, 10+ random(20)] call FUNC(setUnconscious); // safety check to ensure unconsciousness for units if they are not dead already.
|
||||||
};
|
};
|
||||||
|
|
||||||
if (_bloodPressureH > 260) then {
|
if (_bloodPressureH > 260) then {
|
||||||
|
@ -13,21 +13,25 @@
|
|||||||
|
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
private ["_unit", "_allUsedMedication", "_logs"];
|
private ["_unit", "_allUsedMedication", "_logs", "_forceNew"];
|
||||||
|
|
||||||
_unit = _this select 0;
|
_unit = _this select 0;
|
||||||
|
_forceNew = if (count _this > 1) then {_this select 1} else {false};
|
||||||
|
|
||||||
_unit setVariable [QGVAR(pain), 0, true];
|
if (!(isnil {_unit getvariable QGVAR(triageLevel)}) && !_forceNew) exitwith {};
|
||||||
_unit setVariable [QGVAR(morphine), 0, true];
|
|
||||||
_unit setVariable [QGVAR(bloodVolume), 100, true];
|
_unit setVariable [QGVAR(pain), 0];
|
||||||
|
_unit setVariable [QGVAR(morphine), 0];
|
||||||
|
_unit setVariable [QGVAR(bloodVolume), 100];
|
||||||
|
|
||||||
// tourniquets
|
// tourniquets
|
||||||
_unit setvariable [QGVAR(tourniquets), [0,0,0,0,0,0], true];
|
_unit setvariable [QGVAR(tourniquets), [0,0,0,0,0,0]];
|
||||||
|
|
||||||
// wounds and injuries
|
// wounds and injuries
|
||||||
_unit setvariable [QGVAR(openWounds), [], true];
|
_unit setvariable [QGVAR(openWounds), []];
|
||||||
_unit setvariable [QGVAR(bandagedWounds), [], true];
|
_unit setvariable [QGVAR(bandagedWounds), []];
|
||||||
_unit setVariable [QGVAR(internalWounds), [], true];
|
_unit setVariable [QGVAR(internalWounds), []];
|
||||||
|
_unit setvariable [QGVAR(lastUniqueWoundID), 1];
|
||||||
|
|
||||||
// vitals
|
// vitals
|
||||||
_unit setVariable [QGVAR(heartRate), 80];
|
_unit setVariable [QGVAR(heartRate), 80];
|
||||||
@ -39,8 +43,8 @@ _unit setVariable [QGVAR(peripheralResistance), 100];
|
|||||||
_unit setVariable [QGVAR(fractures), []];
|
_unit setVariable [QGVAR(fractures), []];
|
||||||
|
|
||||||
// triage card and logs
|
// triage card and logs
|
||||||
_unit setvariable [QGVAR(triageLevel), 0, true];
|
_unit setvariable [QGVAR(triageLevel), 0];
|
||||||
_unit setvariable [QGVAR(triageCard), [], true];
|
_unit setvariable [QGVAR(triageCard), []];
|
||||||
|
|
||||||
// IVs
|
// IVs
|
||||||
_unit setVariable [QGVAR(salineIVVolume), 0];
|
_unit setVariable [QGVAR(salineIVVolume), 0];
|
||||||
@ -48,21 +52,21 @@ _unit setVariable [QGVAR(plasmaIVVolume), 0];
|
|||||||
_unit setVariable [QGVAR(bloodIVVolume), 0];
|
_unit setVariable [QGVAR(bloodIVVolume), 0];
|
||||||
|
|
||||||
// damage storage
|
// damage storage
|
||||||
_unit setvariable [QGVAR(bodyPartStatus), [0,0,0,0,0,0], true];
|
_unit setvariable [QGVAR(bodyPartStatus), [0,0,0,0,0,0]];
|
||||||
|
|
||||||
// airway
|
// airway
|
||||||
_unit setvariable [QGVAR(airwayStatus), 100, true];
|
_unit setvariable [QGVAR(airwayStatus), 100];
|
||||||
_unit setVariable [QGVAR(airwayOccluded), false, true];
|
_unit setVariable [QGVAR(airwayOccluded), false];
|
||||||
_unit setvariable [QGVAR(airwayCollapsed), false, true];
|
_unit setvariable [QGVAR(airwayCollapsed), false];
|
||||||
|
|
||||||
// generic medical admin
|
// generic medical admin
|
||||||
_unit setvariable [QGVAR(addedToUnitLoop), false, true];
|
_unit setvariable [QGVAR(addedToUnitLoop), false];
|
||||||
_unit setvariable [QGVAR(inCardiacArrest), false, true];
|
_unit setvariable [QGVAR(inCardiacArrest), false];
|
||||||
_unit setVariable ["ACE_isUnconscious", false, true];
|
_unit setVariable ["ACE_isUnconscious", false];
|
||||||
_unit setvariable [QGVAR(hasLostBlood), false, true];
|
_unit setvariable [QGVAR(hasLostBlood), false];
|
||||||
_unit setvariable [QGVAR(isBleeding), false, true];
|
_unit setvariable [QGVAR(isBleeding), false];
|
||||||
_unit setvariable [QGVAR(hasPain), false, true];
|
_unit setvariable [QGVAR(hasPain), false];
|
||||||
_unit setvariable [QGVAR(amountOfReviveLives), GVAR(amountOfReviveLives), true];
|
_unit setvariable [QGVAR(amountOfReviveLives), GVAR(amountOfReviveLives)];
|
||||||
|
|
||||||
// medication
|
// medication
|
||||||
_allUsedMedication = _unit getVariable [QGVAR(allUsedMedication), []];
|
_allUsedMedication = _unit getVariable [QGVAR(allUsedMedication), []];
|
||||||
@ -73,9 +77,9 @@ _unit setVariable [QGVAR(allUsedMedication), []];
|
|||||||
|
|
||||||
_logs = _unit getvariable [QGVAR(allLogs), []];
|
_logs = _unit getvariable [QGVAR(allLogs), []];
|
||||||
{
|
{
|
||||||
_unit setvariable [_x, nil, true];
|
_unit setvariable [_x, nil];
|
||||||
} foreach _logs;
|
} foreach _logs;
|
||||||
_unit setvariable [QGVAR(allLogs), [], true];
|
_unit setvariable [QGVAR(allLogs), []];
|
||||||
|
|
||||||
// items
|
// items
|
||||||
[{
|
[{
|
||||||
|
@ -1,11 +1,10 @@
|
|||||||
/*
|
/*
|
||||||
* Author: Glowbal
|
* Author: Glowbal
|
||||||
* Enabled the vitals loop for a unit.
|
* Handles an wound update request.
|
||||||
*
|
*
|
||||||
* Arguments:
|
* Arguments:
|
||||||
* 0: The Unit <OBJECT>
|
* 0: The Unit <OBJECT>
|
||||||
* 1: the last known ID <NUMBER>
|
* 1: Origin object <OBJECT>
|
||||||
* 2: Origin object <OBJECT>
|
|
||||||
*
|
*
|
||||||
* ReturnValue:
|
* ReturnValue:
|
||||||
* <NIL>
|
* <NIL>
|
||||||
@ -14,12 +13,11 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
private ["_unit", "_lastId", "_openWounds"];
|
private ["_unit", "_openWounds"];
|
||||||
_unit = _this select 0;
|
_unit = _this select 0;
|
||||||
_lastId = _this select 1;
|
_originOfrequest = _this select 1;
|
||||||
_originOfrequest = _this select 2;
|
|
||||||
|
|
||||||
if (local _unit) then {
|
if (local _unit && !(local _originOfrequest)) then {
|
||||||
_openWounds = _unit getvariable [QGVAR(openWounds), []];
|
_openWounds = _unit getvariable [QGVAR(openWounds), []];
|
||||||
{
|
{
|
||||||
["medical_propagateWound", [_originOfrequest], [_unit, _x]] call EFUNC(common,targetEvent);
|
["medical_propagateWound", [_originOfrequest], [_unit, _x]] call EFUNC(common,targetEvent);
|
||||||
|
@ -14,11 +14,11 @@
|
|||||||
|
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
private [ "_target", "_caller", "_openWounds","_lastId"];
|
private [ "_target", "_caller", "_openWounds"];
|
||||||
_target = _this select 0;
|
_target = _this select 0;
|
||||||
_caller = _this select 1;
|
_caller = _this select 1;
|
||||||
|
|
||||||
if (local _target || GVAR(level) < 2) exitwith {}; // if the target is local, we already got the most update to date information
|
if (local _target || GVAR(level) < 2) exitwith {}; // if the target is local, we already got the most update to date information
|
||||||
if (_target getvariable [QGVAR(isWoundSynced), false]) exitwith {};
|
if (_target getvariable [QGVAR(isWoundSynced), false]) exitwith {};
|
||||||
_target setvariable [QGVAR(isWoundSynced), true];
|
_target setvariable [QGVAR(isWoundSynced), true];
|
||||||
["medical_woundUpdateRequest", [_target], [_target, _lastId, _caller]] call EFUNC(common,targetEvent);
|
["medical_woundUpdateRequest", [_target], [_target, _caller]] call EFUNC(common,targetEvent);
|
||||||
|
@ -23,7 +23,7 @@ _set = if (count _this > 1) then {_this select 1} else {true};
|
|||||||
_minWaitingTime = if (count _this > 2) then {_this select 2} else {DEFAULT_DELAY};
|
_minWaitingTime = if (count _this > 2) then {_this select 2} else {DEFAULT_DELAY};
|
||||||
|
|
||||||
if !(_set) exitwith {
|
if !(_set) exitwith {
|
||||||
_unit setvariable ["ACE_isUnconscious", false,true];
|
_unit setvariable ["ACE_isUnconscious", false, true];
|
||||||
};
|
};
|
||||||
|
|
||||||
if !(!(isNull _unit) && {(_unit isKindOf "CaManBase") && ([_unit] call EFUNC(common,isAwake))}) exitwith{};
|
if !(!(isNull _unit) && {(_unit isKindOf "CaManBase") && ([_unit] call EFUNC(common,isAwake))}) exitwith{};
|
||||||
@ -40,6 +40,11 @@ if (_unit == ACE_player) then {
|
|||||||
closeDialog 0;
|
closeDialog 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// if we have unconsciousness for AI disabled, we will kill the unit instead
|
||||||
|
if (!([_unit] call EFUNC(common,IsPlayer)) && (GVAR(enableUnsconsiousnessAI) == 0 || (GVAR(enableUnsconsiousnessAI) == 2 && random(1) <= 0.5))) exitwith {
|
||||||
|
[_unit, true] call FUNC(setDead); // force, to avoid getting into a loop in case revive is enabled.
|
||||||
|
};
|
||||||
|
|
||||||
// If a unit has the launcher out, it will sometimes start selecting the primairy weapon while unconscious,
|
// If a unit has the launcher out, it will sometimes start selecting the primairy weapon while unconscious,
|
||||||
// therefor we force it to select the primairy weapon before going unconscious
|
// therefor we force it to select the primairy weapon before going unconscious
|
||||||
if ((vehicle _unit) isKindOf "StaticWeapon") then {
|
if ((vehicle _unit) isKindOf "StaticWeapon") then {
|
||||||
@ -75,66 +80,6 @@ _unit setUnitPos "DOWN";
|
|||||||
|
|
||||||
_startingTime = time;
|
_startingTime = time;
|
||||||
|
|
||||||
[{
|
[DFUNC(unconsciousPFH), 0.1, [_unit,_animState, _originalPos, _startingTime, _minWaitingTime, false, vehicle _unit isKindOf "ParachuteBase"] ] call CBA_fnc_addPerFrameHandler;
|
||||||
private ["_unit", "_vehicleOfUnit","_minWaitingTime", "_oldAnimation", "_captiveSwitch", "_hasMovedOut"];
|
|
||||||
_args = _this select 0;
|
|
||||||
_unit = _args select 0;
|
|
||||||
_oldAnimation = _args select 1;
|
|
||||||
_originalPos = _args select 2;
|
|
||||||
_startingTime = _args select 3;
|
|
||||||
_minWaitingTime = _args select 4;
|
|
||||||
_hasMovedOut = _args select 5;
|
|
||||||
|
|
||||||
if (!alive _unit) exitwith {
|
|
||||||
[(_this select 1)] call cba_fnc_removePerFrameHandler;
|
|
||||||
};
|
|
||||||
|
|
||||||
// In case the unit is no longer in an unconscious state, we are going to check if we can already reset the animation
|
|
||||||
if !(_unit getvariable ["ACE_isUnconscious",false]) exitwith {
|
|
||||||
|
|
||||||
// TODO, handle this with carry instead, so we can remove the PFH here.
|
|
||||||
// Wait until the unit isn't being carried anymore, so we won't end up with wierd animations
|
|
||||||
if !(([_unit] call FUNC(isBeingCarried)) || ([_unit] call FUNC(isBeingDragged))) then {
|
|
||||||
if (vehicle _unit == _unit) then {
|
|
||||||
if (animationState _unit == "AinjPpneMstpSnonWrflDnon") then {
|
|
||||||
[_unit,"AinjPpneMstpSnonWrflDnon_rolltofront", 2] call EFUNC(common,doAnimation);
|
|
||||||
[_unit,"amovppnemstpsnonwnondnon", 1] call EFUNC(common,doAnimation);
|
|
||||||
} else {
|
|
||||||
[_unit,"amovppnemstpsnonwnondnon", 2] call EFUNC(common,doAnimation);
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
// Switch to the units original animation, assuming
|
|
||||||
// TODO: what if the unit switched vehicle?
|
|
||||||
[_unit, _oldAnimation, 2] call EFUNC(common,doAnimation);
|
|
||||||
};
|
|
||||||
// EXIT PFH
|
|
||||||
[(_this select 1)] call cba_fnc_removePerFrameHandler;
|
|
||||||
};
|
|
||||||
if (!_hasMovedOut) then {
|
|
||||||
// Reset the unit back to the previous captive state.
|
|
||||||
[_unit, QGVAR(unconscious), false] call EFUNC(common,setCaptivityStatus);
|
|
||||||
|
|
||||||
// Swhich the unit back to its original group
|
|
||||||
//Unconscious units shouldn't be put in another group #527:
|
|
||||||
// [_unit, false, "ACE_isUnconscious", side group _unit] call EFUNC(common,switchToGroupSide);
|
|
||||||
|
|
||||||
[_unit, false] call EFUNC(common,disableAI);
|
|
||||||
_unit setUnitPos _originalPos; // This is not position but stance (DOWN, MIDDLE, UP)
|
|
||||||
|
|
||||||
_unit setUnconscious false;
|
|
||||||
["medical_onUnconscious", [_unit, false]] call EFUNC(common,globalEvent);
|
|
||||||
// ensure this statement runs only once
|
|
||||||
_args set [5, true];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
// Ensure we are waiting at least a minimum period before checking if we can wake up the unit again, allows for temp knock outs
|
|
||||||
if ((time - _startingTime) >= _minWaitingTime) exitwith {
|
|
||||||
|
|
||||||
if (!([_unit] call FUNC(getUnconsciousCondition))) then {
|
|
||||||
_unit setvariable ["ACE_isUnconscious", false, true];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}, 0.1, [_unit,_animState, _originalPos, _startingTime, _minWaitingTime, false] ] call CBA_fnc_addPerFrameHandler;
|
|
||||||
|
|
||||||
["medical_onUnconscious", [_unit, true]] call EFUNC(common,globalEvent);
|
["medical_onUnconscious", [_unit, true]] call EFUNC(common,globalEvent);
|
||||||
|
@ -129,7 +129,7 @@ if (isNil _callbackProgress) then {
|
|||||||
|
|
||||||
// Patient Animation
|
// Patient Animation
|
||||||
_patientAnim = getText (_config >> "animationPatient");
|
_patientAnim = getText (_config >> "animationPatient");
|
||||||
if (_target getvariable ["ACE_isUnconscious", false]) then {
|
if (_target getvariable ["ACE_isUnconscious", false] && GVAR(allowUnconsciousAnimationOnTreatment)) then {
|
||||||
if !(animationState _target in (getArray (_config >> "animationPatientUnconsciousExcludeOn"))) then {
|
if !(animationState _target in (getArray (_config >> "animationPatientUnconsciousExcludeOn"))) then {
|
||||||
_patientAnim = getText (_config >> "animationPatientUnconscious");
|
_patientAnim = getText (_config >> "animationPatientUnconscious");
|
||||||
};
|
};
|
||||||
@ -149,6 +149,8 @@ if (_caller == _target) then {
|
|||||||
_callerAnim = [getText (_config >> "animationCallerSelf"), getText (_config >> "animationCallerSelfProne")] select (stance _caller == "PRONE");
|
_callerAnim = [getText (_config >> "animationCallerSelf"), getText (_config >> "animationCallerSelfProne")] select (stance _caller == "PRONE");
|
||||||
};
|
};
|
||||||
|
|
||||||
|
_caller setvariable [QGVAR(selectedWeaponOnTreatment), currentWeapon _caller];
|
||||||
|
|
||||||
// Cannot use secondairy weapon for animation
|
// Cannot use secondairy weapon for animation
|
||||||
if (currentWeapon _caller == secondaryWeapon _caller) then {
|
if (currentWeapon _caller == secondaryWeapon _caller) then {
|
||||||
_caller selectWeapon (primaryWeapon _caller);
|
_caller selectWeapon (primaryWeapon _caller);
|
||||||
|
@ -92,7 +92,8 @@ if (USE_WOUND_EVENT_SYNC) then {
|
|||||||
};
|
};
|
||||||
// Handle the reopening of bandaged wounds
|
// Handle the reopening of bandaged wounds
|
||||||
if (_impact > 0 && {GVAR(enableAdvancedWounds)}) then {
|
if (_impact > 0 && {GVAR(enableAdvancedWounds)}) then {
|
||||||
[_target, _impact, _part, _mostEffectiveSpot, _mostEffectiveInjury, _bandage] call FUNC(handleBandageOpening);
|
// TODO temp disabled until bandaged wounds are supported by event sync.
|
||||||
|
// [_target, _impact, _part, _mostEffectiveSpot, _mostEffectiveInjury, _bandage] call FUNC(handleBandageOpening);
|
||||||
};
|
};
|
||||||
|
|
||||||
// If all wounds have been bandaged, we will reset all damage to 0, so the unit is not showing any blood on the model anymore.
|
// If all wounds have been bandaged, we will reset all damage to 0, so the unit is not showing any blood on the model anymore.
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
private ["_caller", "_target","_selectionName","_className","_config","_callback", "_usersOfItems"];
|
private ["_caller", "_target","_selectionName","_className","_config","_callback", "_usersOfItems", "_weaponSelect"];
|
||||||
|
|
||||||
_args = _this select 0;
|
_args = _this select 0;
|
||||||
_caller = _args select 0;
|
_caller = _args select 0;
|
||||||
@ -34,6 +34,13 @@ if (vehicle _caller == _caller) then {
|
|||||||
};
|
};
|
||||||
_caller setvariable [QGVAR(treatmentPrevAnimCaller), nil];
|
_caller setvariable [QGVAR(treatmentPrevAnimCaller), nil];
|
||||||
|
|
||||||
|
_weaponSelect = (_caller getvariable [QGVAR(selectedWeaponOnTreatment), ""]);
|
||||||
|
if (_weaponSelect != "") then {
|
||||||
|
_caller selectWeapon _weaponSelect;
|
||||||
|
} else {
|
||||||
|
_caller action ["SwitchWeapon", _caller, _caller, 99];
|
||||||
|
};
|
||||||
|
|
||||||
{
|
{
|
||||||
(_x select 0) addItem (_x select 1);
|
(_x select 0) addItem (_x select 1);
|
||||||
}foreach _usersOfItems;
|
}foreach _usersOfItems;
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
private ["_caller", "_target","_selectionName","_className","_config","_callback"];
|
private ["_caller", "_target","_selectionName","_className","_config","_callback", "_weaponSelect"];
|
||||||
_args = _this select 0;
|
_args = _this select 0;
|
||||||
_caller = _args select 0;
|
_caller = _args select 0;
|
||||||
_target = _args select 1;
|
_target = _args select 1;
|
||||||
@ -32,6 +32,13 @@ if (vehicle _caller == _caller) then {
|
|||||||
};
|
};
|
||||||
_caller setvariable [QGVAR(treatmentPrevAnimCaller), nil];
|
_caller setvariable [QGVAR(treatmentPrevAnimCaller), nil];
|
||||||
|
|
||||||
|
_weaponSelect = (_caller getvariable [QGVAR(selectedWeaponOnTreatment), ""]);
|
||||||
|
if (_weaponSelect != "") then {
|
||||||
|
_caller selectWeapon _weaponSelect;
|
||||||
|
} else {
|
||||||
|
_caller action ["SwitchWeapon", _caller, _caller, 99];
|
||||||
|
};
|
||||||
|
|
||||||
// Record specific callback
|
// Record specific callback
|
||||||
_config = (configFile >> "ACE_Medical_Actions" >> "Basic" >> _className);
|
_config = (configFile >> "ACE_Medical_Actions" >> "Basic" >> _className);
|
||||||
if (GVAR(level) >= 2) then {
|
if (GVAR(level) >= 2) then {
|
||||||
|
93
addons/medical/functions/fnc_unconsciousPFH.sqf
Normal file
93
addons/medical/functions/fnc_unconsciousPFH.sqf
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
/*
|
||||||
|
* Author: Glowbal
|
||||||
|
* PFH logic for unconscious state
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: The unit that will be put in an unconscious state <OBJECT>
|
||||||
|
*
|
||||||
|
* ReturnValue:
|
||||||
|
* nil
|
||||||
|
*
|
||||||
|
* Public: yes
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
private ["_unit", "_vehicleOfUnit","_minWaitingTime", "_oldAnimation", "_captiveSwitch", "_hasMovedOut", "_parachuteCheck"];
|
||||||
|
_args = _this select 0;
|
||||||
|
_unit = _args select 0;
|
||||||
|
_oldAnimation = _args select 1;
|
||||||
|
_originalPos = _args select 2;
|
||||||
|
_startingTime = _args select 3;
|
||||||
|
_minWaitingTime = _args select 4;
|
||||||
|
_hasMovedOut = _args select 5;
|
||||||
|
_parachuteCheck = _args select 6;
|
||||||
|
|
||||||
|
if (!alive _unit) exitwith {
|
||||||
|
[_unit, QGVAR(unconscious), false] call EFUNC(common,setCaptivityStatus);
|
||||||
|
[_unit, false] call EFUNC(common,disableAI);
|
||||||
|
//_unit setUnitPos _originalPos;
|
||||||
|
_unit setUnconscious false;
|
||||||
|
["medical_onUnconscious", [_unit, false]] call EFUNC(common,globalEvent);
|
||||||
|
|
||||||
|
[(_this select 1)] call cba_fnc_removePerFrameHandler;
|
||||||
|
};
|
||||||
|
|
||||||
|
// In case the unit is no longer in an unconscious state, we are going to check if we can already reset the animation
|
||||||
|
if !(_unit getvariable ["ACE_isUnconscious",false]) exitwith {
|
||||||
|
// TODO, handle this with carry instead, so we can remove the PFH here.
|
||||||
|
// Wait until the unit isn't being carried anymore, so we won't end up with wierd animations
|
||||||
|
if !(([_unit] call FUNC(isBeingCarried)) || ([_unit] call FUNC(isBeingDragged))) then {
|
||||||
|
if (vehicle _unit == _unit) then {
|
||||||
|
if (animationState _unit == "AinjPpneMstpSnonWrflDnon") then {
|
||||||
|
[_unit,"AinjPpneMstpSnonWrflDnon_rolltofront", 2] call EFUNC(common,doAnimation);
|
||||||
|
[_unit,"amovppnemstpsnonwnondnon", 1] call EFUNC(common,doAnimation);
|
||||||
|
} else {
|
||||||
|
[_unit,"amovppnemstpsnonwnondnon", 2] call EFUNC(common,doAnimation);
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
// Switch to the units original animation, assuming
|
||||||
|
// TODO: what if the unit switched vehicle?
|
||||||
|
[_unit, _oldAnimation, 2] call EFUNC(common,doAnimation);
|
||||||
|
};
|
||||||
|
["medical_onUnconscious", [_unit, false]] call EFUNC(common,globalEvent);
|
||||||
|
// EXIT PFH
|
||||||
|
[(_this select 1)] call cba_fnc_removePerFrameHandler;
|
||||||
|
};
|
||||||
|
if (!_hasMovedOut) then {
|
||||||
|
// Reset the unit back to the previous captive state.
|
||||||
|
[_unit, QGVAR(unconscious), false] call EFUNC(common,setCaptivityStatus);
|
||||||
|
|
||||||
|
// Swhich the unit back to its original group
|
||||||
|
//Unconscious units shouldn't be put in another group #527:
|
||||||
|
// [_unit, false, "ACE_isUnconscious", side group _unit] call EFUNC(common,switchToGroupSide);
|
||||||
|
|
||||||
|
[_unit, false] call EFUNC(common,disableAI);
|
||||||
|
_unit setUnitPos _originalPos; // This is not position but stance (DOWN, MIDDLE, UP)
|
||||||
|
|
||||||
|
_unit setUnconscious false;
|
||||||
|
|
||||||
|
// ensure this statement runs only once
|
||||||
|
_args set [5, true];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
if (_parachuteCheck) then {
|
||||||
|
if !(vehicle _unit isKindOf "ParachuteBase") then {
|
||||||
|
[_unit, [_unit] call EFUNC(common,getDeathAnim), 1, true] call EFUNC(common,doAnimation);
|
||||||
|
_args set [6, false];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!local _unit) exitwith {
|
||||||
|
_args set [ 4, _minWaitingTime - (time - _startingTime)];
|
||||||
|
_unit setvariable [QGVAR(unconsciousArguments), _args, true];
|
||||||
|
[(_this select 1)] call cba_fnc_removePerFrameHandler;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Ensure we are waiting at least a minimum period before checking if we can wake up the unit again, allows for temp knock outs
|
||||||
|
if ((time - _startingTime) >= _minWaitingTime) exitwith {
|
||||||
|
if (!([_unit] call FUNC(getUnconsciousCondition))) then {
|
||||||
|
_unit setvariable ["ACE_isUnconscious", false, true];
|
||||||
|
};
|
||||||
|
};
|
@ -11,4 +11,4 @@
|
|||||||
|
|
||||||
#include "\z\ace\addons\main\script_macros.hpp"
|
#include "\z\ace\addons\main\script_macros.hpp"
|
||||||
|
|
||||||
#define USE_WOUND_EVENT_SYNC false
|
#define USE_WOUND_EVENT_SYNC true
|
||||||
|
Loading…
Reference in New Issue
Block a user