mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Merge pull request #2361 from acemod/medical-adjustments2
Medical adjustments2
This commit is contained in:
commit
7b349ab388
@ -5,7 +5,7 @@
|
||||
|
||||
#define MAJOR 3
|
||||
#define MINOR 2
|
||||
#define PATCHLVL 2
|
||||
#define PATCHLVL 3
|
||||
#define BUILD 0
|
||||
|
||||
#define VERSION MAJOR.MINOR.PATCHLVL.BUILD
|
||||
|
@ -7,6 +7,7 @@ class ACE_Medical_Actions {
|
||||
category = "bandage";
|
||||
treatmentLocations[] = {"All"};
|
||||
allowedSelections[] = {"All"};
|
||||
allowSelfTreatment = 1;
|
||||
requiredMedic = 0;
|
||||
treatmentTime = 5;
|
||||
treatmentTimeSelfCoef = 1;
|
||||
@ -32,6 +33,7 @@ class ACE_Medical_Actions {
|
||||
displayName = CSTRING(Inject_Morphine);
|
||||
displayNameProgress = CSTRING(Injecting_Morphine);
|
||||
allowedSelections[] = {"hand_l", "hand_r", "leg_l", "leg_r"};
|
||||
allowSelfTreatment = 1;
|
||||
category = "medication";
|
||||
treatmentTime = 2;
|
||||
items[] = {"ACE_morphine"};
|
||||
@ -43,6 +45,7 @@ class ACE_Medical_Actions {
|
||||
displayName = CSTRING(Inject_Epinephrine);
|
||||
displayNameProgress = CSTRING(Injecting_Epinephrine);
|
||||
allowedSelections[] = {"hand_l", "hand_r", "leg_l", "leg_r"};
|
||||
allowSelfTreatment = 1;
|
||||
category = "medication";
|
||||
requiredMedic = 1;
|
||||
treatmentTime = 3;
|
||||
@ -55,6 +58,7 @@ class ACE_Medical_Actions {
|
||||
displayName = CSTRING(Transfuse_Blood);
|
||||
displayNameProgress = CSTRING(Transfusing_Blood);
|
||||
allowedSelections[] = {"hand_l", "hand_r", "leg_l", "leg_r"};
|
||||
allowSelfTreatment = 0;
|
||||
category = "advanced";
|
||||
requiredMedic = 1;
|
||||
treatmentTime = 20;
|
||||
@ -93,7 +97,7 @@ class ACE_Medical_Actions {
|
||||
displayNameProgress = CSTRING(Actions_Diagnosing);
|
||||
category = "examine";
|
||||
treatmentLocations[] = {"All"};
|
||||
allowedSelections[] = {"head"};
|
||||
allowedSelections[] = {"head", "body"};
|
||||
requiredMedic = 0;
|
||||
treatmentTime = 1;
|
||||
items[] = {};
|
||||
@ -105,6 +109,29 @@ class ACE_Medical_Actions {
|
||||
itemConsumed = 0;
|
||||
litter[] = {};
|
||||
};
|
||||
class CPR: Bandage {
|
||||
displayName = CSTRING(Actions_CPR);
|
||||
displayNameProgress = CSTRING(Actions_PerformingCPR);
|
||||
category = "advanced";
|
||||
treatmentLocations[] = {"All"};
|
||||
allowedSelections[] = {"body"};
|
||||
allowSelfTreatment = 0;
|
||||
requiredMedic = 0;
|
||||
treatmentTime = 15;
|
||||
items[] = {};
|
||||
condition = QUOTE(!([(_this select 1)] call ace_common_fnc_isAwake) && GVAR(enableRevive)>0);
|
||||
callbackSuccess = QUOTE(DFUNC(treatmentAdvanced_CPR));
|
||||
callbackFailure = "";
|
||||
callbackProgress = "!([((_this select 0) select 1)] call ace_common_fnc_isAwake)";
|
||||
animationPatient = "";
|
||||
animationPatientUnconscious = "AinjPpneMstpSnonWrflDnon_rolltoback";
|
||||
animationCaller = "AinvPknlMstpSlayWnonDnon_medic";
|
||||
animationCallerProne = "AinvPpneMstpSlayW[wpn]Dnon_medic";
|
||||
animationCallerSelf = "";
|
||||
animationCallerSelfProne = "";
|
||||
itemConsumed = 0;
|
||||
litter[] = {};
|
||||
};
|
||||
};
|
||||
|
||||
class Advanced {
|
||||
@ -115,6 +142,7 @@ class ACE_Medical_Actions {
|
||||
// Which locations can this treatment action be used? Available: Field, MedicalFacility, MedicalVehicle, All.
|
||||
treatmentLocations[] = {"All"};
|
||||
allowedSelections[] = {"All"};
|
||||
allowSelfTreatment = 1;
|
||||
// What is the level of medical skill required for this treatment action? 0 = all soldiers, 1 = medic, 2 = doctor
|
||||
requiredMedic = 0;
|
||||
// The time it takes for a treatment action to complete. Time is in seconds.
|
||||
@ -188,6 +216,7 @@ class ACE_Medical_Actions {
|
||||
displayName = CSTRING(Actions_Blood4_1000);
|
||||
displayNameProgress = CSTRING(Transfusing_Blood);
|
||||
allowedSelections[] = {"hand_l", "hand_r", "leg_l", "leg_r"};
|
||||
allowSelfTreatment = 0;
|
||||
category = "advanced";
|
||||
items[] = {"ACE_bloodIV"};
|
||||
requiredMedic = 1;
|
||||
@ -238,6 +267,7 @@ class ACE_Medical_Actions {
|
||||
category = "advanced";
|
||||
items[] = {"ACE_surgicalKit"};
|
||||
treatmentLocations[] = {QGVAR(useLocation_SurgicalKit)};
|
||||
allowSelfTreatment = 0;
|
||||
requiredMedic = QGVAR(medicSetting_SurgicalKit);
|
||||
patientStateCondition = QGVAR(useCondition_SurgicalKit);
|
||||
treatmentTime = "(count ((_this select 1) getVariable ['ACE_Medical_bandagedWounds', []]) * 5)";
|
||||
@ -253,6 +283,7 @@ class ACE_Medical_Actions {
|
||||
category = "advanced";
|
||||
items[] = {"ACE_personalAidKit"};
|
||||
treatmentLocations[] = {QGVAR(useLocation_PAK)};
|
||||
allowSelfTreatment = 0;
|
||||
requiredMedic = QGVAR(medicSetting_PAK);
|
||||
patientStateCondition = QGVAR(useCondition_PAK);
|
||||
treatmentTime = QUOTE((_this select 1) call FUNC(treatmentAdvanced_fullHealTreatmentTime));
|
||||
@ -297,6 +328,7 @@ class ACE_Medical_Actions {
|
||||
displayName = CSTRING(Check_Response);
|
||||
callbackSuccess = QUOTE(DFUNC(actionCheckResponse));
|
||||
displayNameProgress = CSTRING(Check_Response_Content);
|
||||
allowSelfTreatment = 0;
|
||||
};
|
||||
class RemoveTourniquet: Tourniquet {
|
||||
displayName = CSTRING(Actions_RemoveTourniquet);
|
||||
@ -313,6 +345,7 @@ class ACE_Medical_Actions {
|
||||
category = "advanced";
|
||||
treatmentLocations[] = {"All"};
|
||||
allowedSelections[] = {"body"};
|
||||
allowSelfTreatment = 0;
|
||||
requiredMedic = 0;
|
||||
treatmentTime = 15;
|
||||
items[] = {};
|
||||
@ -334,6 +367,7 @@ class ACE_Medical_Actions {
|
||||
displayNameProgress = CSTRING(PlacingInBodyBag);
|
||||
category = "advanced";
|
||||
treatmentLocations[] = {"All"};
|
||||
allowSelfTreatment = 0;
|
||||
requiredMedic = 0;
|
||||
treatmentTime = 15;
|
||||
items[] = {"ACE_bodyBag"};
|
||||
@ -605,6 +639,7 @@ class ACE_Medical_Advanced {
|
||||
class vehiclecrash {
|
||||
thresholds[] = {{0.25, 5}};
|
||||
selectionSpecific = 0;
|
||||
lethalDamage = 0.2;
|
||||
};
|
||||
class backblast {
|
||||
thresholds[] = {{0, 2},{0.55, 5}, {1, 6}};
|
||||
@ -622,6 +657,7 @@ class ACE_Medical_Advanced {
|
||||
class falling {
|
||||
thresholds[] = {{0.1, 1}};
|
||||
selectionSpecific = 1;
|
||||
lethalDamage = 0.4;
|
||||
};
|
||||
class ropeburn {
|
||||
thresholds[] = {{0.1, 1}};
|
||||
|
@ -220,7 +220,7 @@ class ACE_Settings {
|
||||
description = CSTRING(menuTypeDescription);
|
||||
typeName = "SCALAR";
|
||||
value = 0;
|
||||
values[] = {CSTRING(useSelection)/*, CSTRING(useRadial)*/};
|
||||
// isClientSettable = 1;
|
||||
values[] = {CSTRING(useSelection), CSTRING(useRadial), "Disabled"};
|
||||
isClientSettable = 1;
|
||||
};
|
||||
};
|
||||
|
@ -2,12 +2,12 @@
|
||||
#define MEDICAL_ACTION_DISTANCE 1.75
|
||||
|
||||
class CfgVehicles {
|
||||
|
||||
class Logic;
|
||||
class Module_F: Logic {
|
||||
class ArgumentsBaseUnits {
|
||||
};
|
||||
};
|
||||
|
||||
class ACE_Module;
|
||||
class ACE_moduleMedicalSettings: ACE_Module {
|
||||
scope = 2;
|
||||
@ -19,6 +19,7 @@ class CfgVehicles {
|
||||
isGlobal = 1;
|
||||
isTriggerActivated = 0;
|
||||
author = ECSTRING(common,ACETeam);
|
||||
|
||||
class Arguments {
|
||||
class level {
|
||||
displayName = CSTRING(MedicalSettings_level_DisplayName);
|
||||
@ -137,6 +138,7 @@ class CfgVehicles {
|
||||
defaultValue = 1;
|
||||
};
|
||||
};
|
||||
|
||||
class ModuleDescription {
|
||||
description = CSTRING(MedicalSettings_Module_Description);
|
||||
sync[] = {};
|
||||
@ -154,6 +156,7 @@ class CfgVehicles {
|
||||
isTriggerActivated = 0;
|
||||
isDisposable = 0;
|
||||
author = ECSTRING(common,ACETeam);
|
||||
|
||||
class Arguments {
|
||||
class enableFor {
|
||||
displayName = CSTRING(AdvancedMedicalSettings_enableFor_DisplayName);
|
||||
@ -256,13 +259,13 @@ class CfgVehicles {
|
||||
defaultValue = 1;
|
||||
};
|
||||
};
|
||||
|
||||
class ModuleDescription {
|
||||
description = CSTRING(AdvancedMedicalSettings_Module_Description);
|
||||
sync[] = {};
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
class ACE_moduleReviveSettings: ACE_Module {
|
||||
scope = 2;
|
||||
displayName = CSTRING(ReviveSettings_Module_DisplayName);
|
||||
@ -273,6 +276,7 @@ class CfgVehicles {
|
||||
isGlobal = 1;
|
||||
isTriggerActivated = 0;
|
||||
author = ECSTRING(common,ACETeam);
|
||||
|
||||
class Arguments {
|
||||
class enableRevive {
|
||||
displayName = CSTRING(ReviveSettings_enableRevive_DisplayName);
|
||||
@ -298,11 +302,13 @@ class CfgVehicles {
|
||||
defaultValue = -1;
|
||||
};
|
||||
};
|
||||
|
||||
class ModuleDescription {
|
||||
description = CSTRING(ReviveSettings_Module_Description);
|
||||
sync[] = {};
|
||||
};
|
||||
};
|
||||
|
||||
class ACE_moduleAssignMedicRoles: Module_F {
|
||||
scope = 2;
|
||||
displayName = CSTRING(AssignMedicRoles_Module_DisplayName);
|
||||
@ -314,6 +320,7 @@ class CfgVehicles {
|
||||
isTriggerActivated = 0;
|
||||
isDisposable = 0;
|
||||
author = ECSTRING(common,ACETeam);
|
||||
|
||||
class Arguments {
|
||||
class EnableList {
|
||||
displayName = CSTRING(AssignMedicRoles_EnableList_DisplayName);
|
||||
@ -342,6 +349,7 @@ class CfgVehicles {
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class ModuleDescription {
|
||||
description = CSTRING(AssignMedicRoles_Module_Description);
|
||||
sync[] = {};
|
||||
@ -359,6 +367,7 @@ class CfgVehicles {
|
||||
isTriggerActivated = 0;
|
||||
isDisposable = 0;
|
||||
author = ECSTRING(common,ACETeam);
|
||||
|
||||
class Arguments {
|
||||
class EnableList {
|
||||
displayName = CSTRING(AssignMedicVehicle_EnableList_DisplayName);
|
||||
@ -384,11 +393,13 @@ class CfgVehicles {
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class ModuleDescription {
|
||||
description = CSTRING(AssignMedicVehicle_Module_Description);
|
||||
sync[] = {};
|
||||
};
|
||||
};
|
||||
|
||||
class ACE_moduleAssignMedicalFacility: Module_F {
|
||||
scope = 2;
|
||||
displayName = CSTRING(AssignMedicalFacility_Module_DisplayName);
|
||||
@ -400,6 +411,7 @@ class CfgVehicles {
|
||||
isTriggerActivated = 0;
|
||||
isDisposable = 0;
|
||||
author = ECSTRING(common,ACETeam);
|
||||
|
||||
class Arguments {
|
||||
class enabled {
|
||||
displayName = CSTRING(AssignMedicalFacility_enabled_DisplayName);
|
||||
@ -407,70 +419,52 @@ class CfgVehicles {
|
||||
typeName = "BOOL";
|
||||
};
|
||||
};
|
||||
|
||||
class ModuleDescription {
|
||||
description = CSTRING(AssignMedicalFacility_Module_Description);
|
||||
sync[] = {};
|
||||
};
|
||||
};
|
||||
|
||||
#define ARM_LEG_ARMOR_DEFAULT 2
|
||||
#define ARM_LEG_ARMOR_BETTER 3
|
||||
#define ARM_LEG_ARMOR_DEFAULT 3
|
||||
#define ARM_LEG_ARMOR_BETTER 5
|
||||
#define ARM_LEG_ARMOR_CSAT 4
|
||||
|
||||
class Man;
|
||||
class CAManBase: Man {
|
||||
class HitPoints {
|
||||
class HitHead;
|
||||
class HitBody;
|
||||
// "DEACTIVE" DEFAULT HITPOINTS
|
||||
class HitHands {
|
||||
armor = 999; //armor = 2;
|
||||
explosionShielding = 0; //explosionShielding = 1;
|
||||
material = -1;
|
||||
minimalHit = 0;
|
||||
name = "";
|
||||
passThrough = 1;
|
||||
radius = 0; //radius = 0.06;
|
||||
visual = "injury_hands";
|
||||
};
|
||||
class HitLegs {
|
||||
armor = 999; //armor = 2;
|
||||
explosionShielding = 0; //explosionShielding = 1;
|
||||
material = -1;
|
||||
minimalHit = 0;
|
||||
name = "";
|
||||
passThrough = 1;
|
||||
radius = 0; //radius = 0.08;
|
||||
visual = "injury_legs";
|
||||
};
|
||||
class Land;
|
||||
class Man: Land {
|
||||
class HitPoints;
|
||||
};
|
||||
|
||||
class CAManBase: Man {
|
||||
class HitPoints: HitPoints { // custom hitpoints. addons might want to adjust these accordingly
|
||||
class HitLeftArm {
|
||||
armor = ARM_LEG_ARMOR_DEFAULT; //2;
|
||||
explosionShielding = 1;
|
||||
armor = ARM_LEG_ARMOR_DEFAULT;
|
||||
material = -1;
|
||||
minimalHit = 0;
|
||||
name = "hand_l";
|
||||
passThrough = 1;
|
||||
radius = 0.06;
|
||||
visual = "injury_hands";
|
||||
};
|
||||
class HitRightArm: HitLeftArm {
|
||||
name = "hand_r";
|
||||
};
|
||||
class HitLeftLeg {
|
||||
armor = ARM_LEG_ARMOR_DEFAULT; //2;
|
||||
explosionShielding = 1;
|
||||
material = -1;
|
||||
minimalHit = 0;
|
||||
name = "leg_l";
|
||||
name = "hand_l"; // @todo hopefully these still include the whole arm + hands
|
||||
passThrough = 1;
|
||||
radius = 0.08;
|
||||
explosionShielding = 1;
|
||||
visual = "injury_hands";
|
||||
minimalHit = 0.01;
|
||||
};
|
||||
class HitRightArm: HitLeftArm {
|
||||
name = "hand_r"; // @todo hopefully these still include the whole arm + hands
|
||||
};
|
||||
class HitLeftLeg {
|
||||
armor = ARM_LEG_ARMOR_DEFAULT;
|
||||
material = -1;
|
||||
name = "leg_l";
|
||||
passThrough = 1;
|
||||
radius = 0.1;
|
||||
explosionShielding = 1;
|
||||
visual = "injury_legs";
|
||||
minimalHit = 0.01;
|
||||
};
|
||||
class HitRightLeg: HitLeftLeg {
|
||||
name = "leg_r";
|
||||
};
|
||||
};
|
||||
|
||||
class ACE_SelfActions {
|
||||
#include "ACE_Medical_SelfActions.hpp"
|
||||
};
|
||||
@ -529,23 +523,19 @@ class CfgVehicles {
|
||||
|
||||
class B_Soldier_04_f: B_Soldier_base_F {
|
||||
class HitPoints: HitPoints {
|
||||
class HitHead: HitHead {};
|
||||
class HitBody: HitBody {};
|
||||
class HitHands: HitHands {};
|
||||
class HitLegs: HitLegs {};
|
||||
|
||||
class HitHead;
|
||||
class HitBody;
|
||||
class HitHands;
|
||||
class HitLegs;
|
||||
class HitLeftArm: HitLeftArm {
|
||||
armor = ARM_LEG_ARMOR_BETTER;
|
||||
};
|
||||
|
||||
class HitRightArm: HitRightArm {
|
||||
armor = ARM_LEG_ARMOR_BETTER;
|
||||
};
|
||||
|
||||
class HitLeftLeg: HitLeftLeg {
|
||||
armor = ARM_LEG_ARMOR_BETTER;
|
||||
};
|
||||
|
||||
class HitRightLeg: HitRightLeg {
|
||||
armor = ARM_LEG_ARMOR_BETTER;
|
||||
};
|
||||
@ -554,23 +544,19 @@ class CfgVehicles {
|
||||
|
||||
class B_Soldier_05_f: B_Soldier_base_F {
|
||||
class HitPoints: HitPoints {
|
||||
class HitHead: HitHead {};
|
||||
class HitBody: HitBody {};
|
||||
class HitHands: HitHands {};
|
||||
class HitLegs: HitLegs {};
|
||||
|
||||
class HitHead;
|
||||
class HitBody;
|
||||
class HitHands;
|
||||
class HitLegs;
|
||||
class HitLeftArm: HitLeftArm {
|
||||
armor = ARM_LEG_ARMOR_BETTER;
|
||||
};
|
||||
|
||||
class HitRightArm: HitRightArm {
|
||||
armor = ARM_LEG_ARMOR_BETTER;
|
||||
};
|
||||
|
||||
class HitLeftLeg: HitLeftLeg {
|
||||
armor = ARM_LEG_ARMOR_BETTER;
|
||||
};
|
||||
|
||||
class HitRightLeg: HitRightLeg {
|
||||
armor = ARM_LEG_ARMOR_BETTER;
|
||||
};
|
||||
@ -581,23 +567,19 @@ class CfgVehicles {
|
||||
|
||||
class I_Soldier_03_F: I_Soldier_base_F {
|
||||
class HitPoints: HitPoints {
|
||||
class HitHead: HitHead {};
|
||||
class HitBody: HitBody {};
|
||||
class HitHands: HitHands {};
|
||||
class HitLegs: HitLegs {};
|
||||
|
||||
class HitHead;
|
||||
class HitBody;
|
||||
class HitHands;
|
||||
class HitLegs;
|
||||
class HitLeftArm: HitLeftArm {
|
||||
armor = ARM_LEG_ARMOR_BETTER;
|
||||
};
|
||||
|
||||
class HitRightArm: HitRightArm {
|
||||
armor = ARM_LEG_ARMOR_BETTER;
|
||||
};
|
||||
|
||||
class HitLeftLeg: HitLeftLeg {
|
||||
armor = ARM_LEG_ARMOR_BETTER;
|
||||
};
|
||||
|
||||
class HitRightLeg: HitRightLeg {
|
||||
armor = ARM_LEG_ARMOR_BETTER;
|
||||
};
|
||||
@ -606,23 +588,19 @@ class CfgVehicles {
|
||||
|
||||
class I_Soldier_04_F: I_Soldier_base_F {
|
||||
class HitPoints: HitPoints {
|
||||
class HitHead: HitHead {};
|
||||
class HitBody: HitBody {};
|
||||
class HitHands: HitHands {};
|
||||
class HitLegs: HitLegs {};
|
||||
|
||||
class HitHead;
|
||||
class HitBody;
|
||||
class HitHands;
|
||||
class HitLegs;
|
||||
class HitLeftArm: HitLeftArm {
|
||||
armor = ARM_LEG_ARMOR_BETTER;
|
||||
};
|
||||
|
||||
class HitRightArm: HitRightArm {
|
||||
armor = ARM_LEG_ARMOR_BETTER;
|
||||
};
|
||||
|
||||
class HitLeftLeg: HitLeftLeg {
|
||||
armor = ARM_LEG_ARMOR_BETTER;
|
||||
};
|
||||
|
||||
class HitRightLeg: HitRightLeg {
|
||||
armor = ARM_LEG_ARMOR_BETTER;
|
||||
};
|
||||
@ -631,61 +609,88 @@ class CfgVehicles {
|
||||
|
||||
class O_Soldier_base_F: SoldierEB {
|
||||
class HitPoints: HitPoints {
|
||||
class HitHead: HitHead {};
|
||||
class HitBody: HitBody {};
|
||||
class HitHands: HitHands {};
|
||||
class HitLegs: HitLegs {};
|
||||
|
||||
class HitHead;
|
||||
class HitBody;
|
||||
class HitHands;
|
||||
class HitLegs;
|
||||
class HitLeftArm: HitLeftArm {
|
||||
armor = ARM_LEG_ARMOR_CSAT;
|
||||
passThrough = 0.85;
|
||||
};
|
||||
|
||||
class HitRightArm: HitRightArm {
|
||||
armor = ARM_LEG_ARMOR_CSAT;
|
||||
passThrough = 0.85;
|
||||
};
|
||||
|
||||
class HitLeftLeg: HitLeftLeg {
|
||||
armor = ARM_LEG_ARMOR_CSAT;
|
||||
passThrough = 0.85;
|
||||
};
|
||||
|
||||
class HitRightLeg: HitRightLeg {
|
||||
armor = ARM_LEG_ARMOR_CSAT;
|
||||
passThrough = 0.85;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class O_Soldier_02_F: O_Soldier_base_F {
|
||||
class HitPoints: HitPoints {
|
||||
class HitHead: HitHead {};
|
||||
class HitBody: HitBody {};
|
||||
class HitHands: HitHands {};
|
||||
class HitLegs: HitLegs {};
|
||||
|
||||
class HitHead;
|
||||
class HitBody;
|
||||
class HitHands;
|
||||
class HitLegs;
|
||||
class HitLeftArm: HitLeftArm {
|
||||
armor = ARM_LEG_ARMOR_CSAT;
|
||||
passThrough = 0.85;
|
||||
};
|
||||
|
||||
class HitRightArm: HitRightArm {
|
||||
armor = ARM_LEG_ARMOR_CSAT;
|
||||
passThrough = 0.85;
|
||||
};
|
||||
|
||||
class HitLeftLeg: HitLeftLeg {
|
||||
armor = ARM_LEG_ARMOR_CSAT;
|
||||
passThrough = 0.85;
|
||||
};
|
||||
|
||||
class HitRightLeg: HitRightLeg {
|
||||
armor = ARM_LEG_ARMOR_CSAT;
|
||||
passThrough = 0.85;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class O_officer_F: O_Soldier_base_F {
|
||||
class HitPoints: HitPoints {
|
||||
class HitHead;
|
||||
class HitBody;
|
||||
class HitHands;
|
||||
class HitLegs;
|
||||
class HitLeftArm: HitLeftArm {
|
||||
armor = ARM_LEG_ARMOR_CSAT; // @todo is that suppossed to be the case?
|
||||
};
|
||||
class HitRightArm: HitRightArm {
|
||||
armor = ARM_LEG_ARMOR_CSAT;
|
||||
};
|
||||
class HitLeftLeg: HitLeftLeg {
|
||||
armor = ARM_LEG_ARMOR_CSAT;
|
||||
};
|
||||
class HitRightLeg: HitRightLeg {
|
||||
armor = ARM_LEG_ARMOR_CSAT;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class O_Protagonist_VR_F: O_Soldier_base_F {
|
||||
class HitPoints: HitPoints {
|
||||
class HitHead;
|
||||
class HitBody;
|
||||
class HitHands;
|
||||
class HitLegs;
|
||||
class HitLeftArm: HitLeftArm {
|
||||
armor = 2;
|
||||
};
|
||||
class HitRightArm: HitRightArm {
|
||||
armor = 2;
|
||||
};
|
||||
class HitLeftLeg: HitLeftLeg {
|
||||
armor = 2;
|
||||
};
|
||||
class HitRightLeg: HitRightLeg {
|
||||
armor = 2;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class MapBoard_altis_F;
|
||||
class ACE_bodyBagObject: MapBoard_altis_F {
|
||||
XEH_ENABLED;
|
||||
|
@ -1,10 +1,12 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit"];
|
||||
_unit = _this select 0;
|
||||
params ["_unit"];
|
||||
|
||||
_unit addEventHandler ["HandleDamage", {_this call FUNC(handleDamage)}];
|
||||
|
||||
if (local _unit) then {
|
||||
[_unit] call FUNC(init);
|
||||
if (!EGVAR(common,settingsInitFinished)) exitWith {
|
||||
EGVAR(common,runAtSettingsInitialized) pushBack [FUNC(init), [_unit]];
|
||||
};
|
||||
[_unit] call FUNC(init);
|
||||
};
|
||||
|
@ -11,10 +11,9 @@ GVAR(heartBeatSounds_Slow) = ["ACE_heartbeat_slow_1", "ACE_heartbeat_slow_2"];
|
||||
["interactMenuClosed", {[objNull, false] call FUNC(displayPatientInformation); }] call EFUNC(common,addEventHandler);
|
||||
|
||||
["medical_onUnconscious", {
|
||||
if (local (_this select 0)) then {
|
||||
private ["_unit"];
|
||||
_unit = _this select 0;
|
||||
if (_this select 1) then {
|
||||
params ["_unit", "_status"];
|
||||
if (local _unit) then {
|
||||
if (_status) then {
|
||||
_unit setVariable ["tf_globalVolume", 0.4];
|
||||
_unit setVariable ["tf_voiceVolume", 0, true];
|
||||
_unit setVariable ["tf_unable_to_use_radio", true, true];
|
||||
@ -35,10 +34,8 @@ GVAR(heartBeatSounds_Slow) = ["ACE_heartbeat_slow_1", "ACE_heartbeat_slow_2"];
|
||||
|
||||
// Initialize all effects
|
||||
_fnc_createEffect = {
|
||||
private ["_type", "_layer", "_default", "_effect"];
|
||||
_type = _this select 0;
|
||||
_layer = _this select 1;
|
||||
_default = _this select 2;
|
||||
private "_effect";
|
||||
params ["_type", "_layer", "_default"];
|
||||
|
||||
_effect = ppEffectCreate [_type, _layer];
|
||||
_effect ppEffectForceInNVG true;
|
||||
@ -245,30 +242,28 @@ GVAR(lastHeartBeatSound) = ACE_time;
|
||||
|
||||
}, 0, []] call CBA_fnc_addPerFrameHandler;
|
||||
|
||||
if (USE_WOUND_EVENT_SYNC) then {
|
||||
// broadcast injuries to JIP clients in a MP session
|
||||
if (isMultiplayer && hasInterface) then {
|
||||
["playerChanged", {
|
||||
EXPLODE_2_PVT(_this,_newPlayer,_oldPlayer);
|
||||
if (alive _newPlayer) then {
|
||||
// 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);
|
||||
}foreach units group _newPlayer;
|
||||
};
|
||||
}] call EFUNC(common,addEventhandler);
|
||||
};
|
||||
};
|
||||
|
||||
[
|
||||
{(((_this select 0) getvariable [QGVAR(bloodVolume), 100]) < 65)},
|
||||
{(((_this select 0) getvariable [QGVAR(pain), 0]) - ((_this select 0) getvariable [QGVAR(painSuppress), 0])) > 0.9},
|
||||
{(([_this select 0] call FUNC(getBloodLoss)) > 0.25)},
|
||||
{((_this select 0) getvariable [QGVAR(inReviveState), false])},
|
||||
{((_this select 0) getvariable [QGVAR(inCardiacArrest), false])},
|
||||
{((_this select 0) getvariable ["ACE_isDead", false])},
|
||||
{(((_this select 0) getvariable [QGVAR(airwayStatus), 100]) < 80)}
|
||||
] call FUNC(addUnconsciousCondition);
|
||||
["SettingsInitialized", {
|
||||
if (GVAR(level) == 2) exitwith {
|
||||
[
|
||||
{(((_this select 0) getvariable [QGVAR(bloodVolume), 100]) < 65)},
|
||||
{(((_this select 0) getvariable [QGVAR(pain), 0]) - ((_this select 0) getvariable [QGVAR(painSuppress), 0])) > 0.9},
|
||||
{(([_this select 0] call FUNC(getBloodLoss)) > 0.25)},
|
||||
{((_this select 0) getvariable [QGVAR(inReviveState), false])},
|
||||
{((_this select 0) getvariable [QGVAR(inCardiacArrest), false])},
|
||||
{((_this select 0) getvariable ["ACE_isDead", false])},
|
||||
{(((_this select 0) getvariable [QGVAR(airwayStatus), 100]) < 80)}
|
||||
] call FUNC(addUnconsciousCondition);
|
||||
};
|
||||
|
||||
[
|
||||
{(((_this select 0) getvariable [QGVAR(bloodVolume), 100]) < 40)},
|
||||
{(((_this select 0) getvariable [QGVAR(pain), 0]) - ((_this select 0) getvariable [QGVAR(painSuppress), 0])) > 0.6},
|
||||
{(([_this select 0] call FUNC(getBloodLoss)) > 0.1)},
|
||||
{((_this select 0) getvariable [QGVAR(inReviveState), false])},
|
||||
{((_this select 0) getvariable ["ACE_isDead", false])}
|
||||
] call FUNC(addUnconsciousCondition);
|
||||
}] call EFUNC(common,addEventHandler);
|
||||
|
||||
// Prevent all types of interaction while unconscious
|
||||
// @todo: probably remove this when CBA keybind hold key works properly
|
||||
|
@ -84,6 +84,7 @@ PREP(treatmentAdvanced_medication);
|
||||
PREP(treatmentAdvanced_medicationLocal);
|
||||
PREP(treatmentAdvanced_surgicalKit_onProgress);
|
||||
PREP(treatmentBasic_bandage);
|
||||
PREP(treatmentBasic_bandageLocal);
|
||||
PREP(treatmentBasic_bloodbag);
|
||||
PREP(treatmentBasic_bloodbagLocal);
|
||||
PREP(treatmentBasic_epipen);
|
||||
|
@ -1,11 +1,8 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit"];
|
||||
|
||||
_unit = _this select 0;
|
||||
|
||||
if !(local _unit) exitWith {};
|
||||
params ["_unit"];
|
||||
|
||||
// reset all variables. @todo GROUP respawn?
|
||||
[_unit] call FUNC(init);
|
||||
|
||||
// Reset captive status for respawning unit
|
||||
|
@ -7,15 +7,12 @@
|
||||
* 1: The patient <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* NONE
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_caller","_target","_selectionName"];
|
||||
_caller = _this select 0;
|
||||
_target = _this select 1;
|
||||
_selectionName = _this select 2;
|
||||
params ["_caller", "_target", "_selectionName"];
|
||||
[[_caller, _target, _selectionName], QUOTE(DFUNC(actionCheckBloodPressureLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */
|
||||
|
@ -7,25 +7,22 @@
|
||||
* 1: The patient <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* NONE
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_caller","_target","_selectionName","_bloodPressure","_bloodPressureHigh","_bloodPressureLow", "_logOutPut", "_output"];
|
||||
_caller = _this select 0;
|
||||
_target = _this select 1;
|
||||
_selectionName = _this select 2;
|
||||
private ["_bloodPressure", "_logOutPut", "_output"];
|
||||
params ["_caller", "_target", "_selectionName"];
|
||||
|
||||
_bloodPressure = [_target] call FUNC(getBloodPressure);
|
||||
if (!alive _target) then {
|
||||
_bloodPressure = [0,0];
|
||||
_bloodPressure = if (!alive _target) then {
|
||||
[0,0]
|
||||
} else {
|
||||
[_target] call FUNC(getBloodPressure)
|
||||
};
|
||||
|
||||
_bloodPressureHigh = _bloodPressure select 1;
|
||||
_bloodPressureLow = _bloodPressure select 0;
|
||||
_bloodPressure params ["_bloodPressureHigh", "_bloodPressureLow"];
|
||||
_output = "";
|
||||
_logOutPut = "";
|
||||
if ([_caller] call FUNC(isMedic)) then {
|
||||
|
@ -7,15 +7,13 @@
|
||||
* 1: The patient <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* NONE
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_caller","_target","_selectionName"];
|
||||
_caller = _this select 0;
|
||||
_target = _this select 1;
|
||||
_selectionName = _this select 2;
|
||||
params ["_caller","_target", "_selectionName"];
|
||||
[[_caller, _target, _selectionName], QUOTE(DFUNC(actionCheckPulseLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */
|
||||
|
||||
|
@ -7,17 +7,15 @@
|
||||
* 1: The patient <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* NONE
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_caller", "_unit", "_selectionName", "_heartRateOutput", "_heartRate", "_logOutPut"];
|
||||
_caller = _this select 0;
|
||||
_unit = _this select 1;
|
||||
_selectionName = _this select 2;
|
||||
private ["_heartRateOutput", "_heartRate", "_logOutPut"];
|
||||
params ["_caller", "_unit", "_selectionName"];
|
||||
|
||||
_heartRate = _unit getvariable [QGVAR(heartRate), 80];
|
||||
if (!alive _unit) then {
|
||||
|
@ -7,23 +7,17 @@
|
||||
* 1: The patient <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* NONE
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_caller","_target", "_output"];
|
||||
_caller = _this select 0;
|
||||
_target = _this select 1;
|
||||
private ["_output"];
|
||||
params ["_caller", "_target"];
|
||||
|
||||
_output = "";
|
||||
if ([_target] call EFUNC(common,isAwake)) then {
|
||||
_output = LSTRING(Check_Response_Responsive);
|
||||
} else {
|
||||
_output = LSTRING(Check_Response_Unresponsive);
|
||||
};
|
||||
_output = [LSTRING(Check_Response_Unresponsive), LSTRING(Check_Response_Responsive)] select ([_target] call EFUNC(common,isAwake));
|
||||
|
||||
["displayTextStructured", [_caller], [[_output, [_target] call EFUNC(common,getName)], 2, _caller]] call EFUNC(common,targetEvent);
|
||||
|
||||
|
@ -7,16 +7,15 @@
|
||||
* 1: The patient <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* NONE
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_caller", "_target", "_genericMessages"];
|
||||
_caller = _this select 0;
|
||||
_target = _this select 1;
|
||||
private "_genericMessages";
|
||||
params ["_caller", "_target"];
|
||||
|
||||
_genericMessages = [LSTRING(diagnoseMessage)];
|
||||
|
||||
|
@ -7,20 +7,18 @@
|
||||
* 1: The patient <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* NONE
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_caller", "_target","_vehicle"];
|
||||
_caller = _this select 0;
|
||||
_target = _this select 1;
|
||||
private "_vehicle";
|
||||
params ["_caller", "_target"];
|
||||
|
||||
if ([_target] call EFUNC(common,isAwake)) exitwith {
|
||||
// TODO localization
|
||||
["displayTextStructured", [_caller], [["This person (%1) is awake and cannot be loaded", [_target] call EFUNC(common,getName)], 1.5, _caller]] call EFUNC(common,targetEvent);
|
||||
["displayTextStructured", [_caller], [[LSTRING(CanNotLoaded), [_target] call EFUNC(common,getName)], 1.5, _caller]] call EFUNC(common,targetEvent);
|
||||
};
|
||||
if ([_target] call FUNC(isBeingCarried)) then {
|
||||
[_caller, _target] call EFUNC(dragging,dropObject_carry);
|
||||
|
@ -14,9 +14,8 @@
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
PARAMS_2(_caller,_target);
|
||||
|
||||
private ["_position", "_headPos", "_spinePos", "_dirVect", "_direction", "_bodyBag"];
|
||||
params ["_caller", "_target"];
|
||||
|
||||
if (alive _target) then {
|
||||
[_target, true] call FUNC(setDead);
|
||||
|
@ -8,17 +8,15 @@
|
||||
* 2: SelectionName <STRING>
|
||||
*
|
||||
* Return Value:
|
||||
* NONE
|
||||
* None
|
||||
*
|
||||
* Public: Yes
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_caller", "_target", "_part", "_selectionName", "_tourniquets", "_output"];
|
||||
_caller = _this select 0;
|
||||
_target = _this select 1;
|
||||
_selectionName = _this select 2;
|
||||
private ["_part", "_tourniquets", "_output"];
|
||||
params ["_caller", "_target", "_selectionName"];
|
||||
|
||||
// grab the required data
|
||||
_part = [_selectionName] call FUNC(selectionNameToNumber);
|
||||
@ -26,7 +24,7 @@ _tourniquets = _target getvariable [QGVAR(tourniquets), [0,0,0,0,0,0]];
|
||||
|
||||
// Check if there is a tourniquet on this bodypart
|
||||
if ((_tourniquets select _part) == 0) exitwith {
|
||||
_output = "There is no tourniquet on this body part!";
|
||||
_output = LSTRING(noTourniquetOnBodyPart);
|
||||
["displayTextStructured", [_caller], [_output, 1.5, _caller]] call EFUNC(common,targetEvent);
|
||||
};
|
||||
|
||||
|
@ -5,23 +5,20 @@
|
||||
* Arguments:
|
||||
* 0: The medic <OBJECT>
|
||||
* 1: The patient <OBJECT>
|
||||
* 2: Drag after unload <BOOL> <OPTIONAL>
|
||||
* 2: Drag after unload <BOOL> (default: false)
|
||||
*
|
||||
* Return Value:
|
||||
* NONE
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_caller", "_target", "_drag"];
|
||||
_caller = _this select 0;
|
||||
_target = _this select 1;
|
||||
_drag = if (count _this > 2) then {_this select 2} else {false};
|
||||
params ["_caller", "_target", ["_drag", false]];
|
||||
|
||||
// cannot unload a unit not in a vehicle.
|
||||
if (vehicle _target == _target) exitwith {};
|
||||
if (([_target] call EFUNC(common,isAwake))) exitwith {};
|
||||
|
||||
["unloadPersonEvent", _target, [_target, vehicle _target]] call EFUNC(common,targetEvent)
|
||||
["unloadPersonEvent", _target, [_target, vehicle _target]] call EFUNC(common,targetEvent)
|
||||
|
@ -9,18 +9,15 @@
|
||||
* 3: callback <CODE>
|
||||
*
|
||||
* Return Value:
|
||||
* nil
|
||||
* None
|
||||
*
|
||||
* Public: Yes
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit", "_value", "_time", "_adjustment", "_callBack"];
|
||||
_unit = [_this, 0, objNull, [objNull]] call BIS_fnc_Param;
|
||||
_value = [_this, 1, 0, [0]] call BIS_fnc_Param;
|
||||
_time = [_this, 2, 1, [0]] call BIS_fnc_Param;
|
||||
_callBack = [_this, 3, {}, [{}]] call BIS_fnc_Param;
|
||||
|
||||
params [["_unit", objNull, [objNull]], ["_value", 0, [0]], ["_time", 1, [0]], ["_callBack", {}, [{}]]];
|
||||
|
||||
_adjustment = _unit getvariable [QGVAR(heartRateAdjustments), []];
|
||||
_adjustment pushback [_value, _time, _callBack];
|
||||
|
@ -6,16 +6,14 @@
|
||||
* 0: The Unit <OBJECT>
|
||||
*
|
||||
* ReturnValue:
|
||||
* <NIL>
|
||||
* None
|
||||
*
|
||||
* Public: Yes
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit", "_force"];
|
||||
_unit = _this select 0;
|
||||
_force = if (count _this > 1) then {_this select 1} else {false};
|
||||
params ["_unit", ["_force", false]];
|
||||
|
||||
if ([_unit] call FUNC(hasMedicalEnabled) || _force) then {
|
||||
|
||||
@ -27,13 +25,13 @@ if ([_unit] call FUNC(hasMedicalEnabled) || _force) then {
|
||||
_unit setvariable [QGVAR(addedToUnitLoop), true, true];
|
||||
|
||||
[{
|
||||
private ["_unit", "_interval"];
|
||||
_unit = (_this select 0) select 0;
|
||||
_interval = ACE_time - ((_this select 0) select 1);
|
||||
params ["_args", "_idPFH"];
|
||||
_args params ["_unit", "_interval"];
|
||||
_interval = ACE_time - _interval;
|
||||
(_this select 0) set [1, ACE_time];
|
||||
|
||||
|
||||
if (!alive _unit || !local _unit) then {
|
||||
[_this select 1] call CBA_fnc_removePerFrameHandler;
|
||||
[_idPFH] call CBA_fnc_removePerFrameHandler;
|
||||
if (!local _unit) then {
|
||||
if (GVAR(level) >= 2) then {
|
||||
_unit setvariable [QGVAR(heartRate), _unit getvariable [QGVAR(heartRate), 80], true];
|
||||
@ -47,9 +45,12 @@ if ([_unit] call FUNC(hasMedicalEnabled) || _force) then {
|
||||
private "_pain";
|
||||
_pain = _unit getvariable [QGVAR(pain), 0];
|
||||
if (_pain > (_unit getvariable [QGVAR(painSuppress), 0])) then {
|
||||
if (_pain > 0.7 && {random(1) > 0.6}) then {
|
||||
// This introduces wierd unconscious behaviour for basic medical and possibly also advanced.
|
||||
// TODO This is disabled as it's considered non critical code.
|
||||
// We will need to decide if we want unconscious triggered on high pain levels or if we can get rid of this entirely.
|
||||
/*if (_pain > 0.7 && {random(1) > 0.6}) then {
|
||||
[_unit] call FUNC(setUnconscious);
|
||||
};
|
||||
};*/
|
||||
|
||||
[_unit, _pain] call FUNC(playInjuredSound);
|
||||
};
|
||||
|
@ -9,28 +9,24 @@
|
||||
* 3: The arguments for localization <ARRAY>
|
||||
*
|
||||
* Return Value:
|
||||
* nil
|
||||
* None
|
||||
*
|
||||
* Public: Yes
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit", "_type", "_message", "_arguments", "_lastNumber", "_moment", "_logVarName", "_log","_newLog", "_logs"];
|
||||
_unit = _this select 0;
|
||||
_type = _this select 1;
|
||||
_message = _this select 2;
|
||||
_arguments = _this select 3;
|
||||
private ["_moment", "_logVarName", "_log","_newLog", "_logs"];
|
||||
params ["_unit", "_type", "_message", "_arguments"];
|
||||
|
||||
if (!local _unit) exitwith {
|
||||
[_this, QUOTE(DFUNC(addToLog)), _unit] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */
|
||||
[_this, QFUNC(addToLog), _unit] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */
|
||||
};
|
||||
|
||||
_lastNumber = date select 4;
|
||||
_moment = format["%1:%2",date select 3, _lastNumber];
|
||||
if (_lastNumber < 10) then {
|
||||
_moment = format["%1:0%2",date select 3, _lastNumber];
|
||||
};
|
||||
date params ["", "", "", "_minute", "_hour"];
|
||||
|
||||
_moment = format [ (["%1:%2", "%1:0%2"] select (_minute < 10)), _hour, _minute];
|
||||
|
||||
_logVarName = format[QGVAR(logFile_%1), _type];
|
||||
|
||||
_log = _unit getvariable [_logVarName, []];
|
||||
@ -41,10 +37,10 @@ if (count _log >= 8) then {
|
||||
if (_foreachIndex > 0) then {
|
||||
_newLog pushback _x;
|
||||
};
|
||||
}foreach _log;
|
||||
} foreach _log;
|
||||
_log = _newLog;
|
||||
};
|
||||
_log pushback [_message,_moment,_type, _arguments];
|
||||
_log pushback [_message, _moment, _type, _arguments];
|
||||
|
||||
_unit setvariable [_logVarName, _log, true];
|
||||
["medical_onLogEntryAdded", [_unit, _type, _message, _arguments]] call EFUNC(common,localEvent);
|
||||
|
@ -7,16 +7,15 @@
|
||||
* 1: The new item classname <STRING>
|
||||
*
|
||||
* Return Value:
|
||||
* nil
|
||||
* None
|
||||
*
|
||||
* Public: Yes
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit", "_newItem", "_log", "_inList", "_amount"];
|
||||
_unit = _this select 0;
|
||||
_newItem = _this select 1;
|
||||
private ["_log", "_inList", "_amount"];
|
||||
params ["_unit", "_newItem"];
|
||||
|
||||
if (!local _unit) exitwith {
|
||||
[_this, QUOTE(DFUNC(addToTriageList)), _unit] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */
|
||||
@ -36,7 +35,7 @@ _amount = 1;
|
||||
_amount = (_info select 1);
|
||||
_inList = true;
|
||||
};
|
||||
}foreach _log;
|
||||
} foreach _log;
|
||||
|
||||
if (!_inList) then {
|
||||
_log pushback [_newItem, 1, ACE_time];
|
||||
|
@ -3,14 +3,13 @@
|
||||
* Adds new condition for the unconscious state. Conditions are not actively checked for units unless unit is in unconscious state.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Code, should return a boolean <CODE>
|
||||
* 0-N: Code, should return a boolean <CODE>
|
||||
*
|
||||
* ReturnValue:
|
||||
* <NIL>
|
||||
* None
|
||||
*
|
||||
* Public: Yes
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
if (isnil QGVAR(unconsciousConditions)) then {
|
||||
@ -21,5 +20,5 @@ if (typeName _this == typeName []) then {
|
||||
if (typeName _x == typeName {}) then {
|
||||
GVAR(unconsciousConditions) pushback _x;
|
||||
};
|
||||
}foreach _this;
|
||||
} foreach _this;
|
||||
};
|
||||
|
@ -13,8 +13,7 @@
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
EXPLODE_3_PVT(_this,_vehicle,_player,_parameters);
|
||||
params ["_vehicle", "_player", "_parameters"];
|
||||
|
||||
private ["_actions", "_unit"];
|
||||
_actions = [];
|
||||
|
@ -18,10 +18,10 @@
|
||||
|
||||
private ["_pain"];
|
||||
|
||||
PARAMS_2(_unit,_addedPain);
|
||||
|
||||
params ["_unit", "_addedPain"];
|
||||
//Only run on local units:
|
||||
if (!local _unit) exitWith {ERROR("unit is not local");};
|
||||
TRACE_3("ACE_DEBUG: adjustPainLevel Called",_unit, _pain, _addedPain);
|
||||
|
||||
//Ignore if medical system disabled:
|
||||
if (GVAR(level) == 0) exitWith {};
|
||||
|
@ -14,9 +14,8 @@
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_target", "_caller", "_accessLevel", "_return"];
|
||||
_caller = _this select 0;
|
||||
_target = _this select 1;
|
||||
private ["_accessLevel", "_return"];
|
||||
params ["_caller", "_target"];
|
||||
|
||||
_accessLevel = _target getvariable [QGVAR(allowSharedEquipmentAccess), -1];
|
||||
|
||||
@ -28,4 +27,4 @@ if (_accessLevel >= 0) then {
|
||||
if (_accessLevel == 2) exitwith { _return = (group _target == group _caller); };
|
||||
};
|
||||
|
||||
_return;
|
||||
_return;
|
||||
|
@ -16,36 +16,35 @@
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_caller", "_target", "_selectionName", "_className", "_config", "_medicRequired", "_items", "_locations", "_return", "_condition", "_patientStateCondition", "_allowedSelections"];
|
||||
_caller = _this select 0;
|
||||
_target = _this select 1;
|
||||
_selectionName = _this select 2;
|
||||
_className = _this select 3;
|
||||
private ["_config", "_medicRequired", "_items", "_locations", "_return", "_condition", "_patientStateCondition", "_allowedSelections"];
|
||||
params ["_caller", "_target", "_selectionName", "_className"];
|
||||
|
||||
if !(_target isKindOf "CAManBase") exitWith {false};
|
||||
if !(_target isKindOf "CAManBase") exitWith { false };
|
||||
|
||||
|
||||
_config = (ConfigFile >> "ACE_Medical_Actions" >> (["Basic", "Advanced"] select (GVAR(level)>=2)) >> _className);
|
||||
|
||||
_config = (ConfigFile >> "ACE_Medical_Actions" >> "Basic" >> _className);
|
||||
if (GVAR(level)>=2) then {
|
||||
_config = (ConfigFile >> "ACE_Medical_Actions" >> "Advanced" >> _className);
|
||||
};
|
||||
if !(isClass _config) exitwith {false};
|
||||
|
||||
// Allow self treatment check
|
||||
if (_caller == _target && {getNumber (_config >> "allowSelfTreatment") == 0}) exitwith {false};
|
||||
|
||||
_medicRequired = if (isNumber (_config >> "requiredMedic")) then {
|
||||
getNumber (_config >> "requiredMedic");
|
||||
} else {
|
||||
// Check for required class
|
||||
if (isText (_config >> "requiredMedic")) exitwith {
|
||||
missionNamespace getvariable [(getText (_config >> "requiredMedic")), 0];
|
||||
missionNamespace getvariable [(getText (_config >> "requiredMedic")), 0]
|
||||
};
|
||||
0;
|
||||
};
|
||||
if !([_caller, _medicRequired] call FUNC(isMedic)) exitwith {false};
|
||||
if !([_caller, _medicRequired] call FUNC(isMedic)) exitwith { false };
|
||||
|
||||
_items = getArray (_config >> "items");
|
||||
if (count _items > 0 && {!([_caller, _target, _items] call FUNC(hasItems))}) exitwith {false};
|
||||
if (count _items > 0 && {!([_caller, _target, _items] call FUNC(hasItems))}) exitwith { false };
|
||||
|
||||
_allowedSelections = getArray (_config >> "allowedSelections");
|
||||
if !("All" in _allowedSelections || {(_selectionName in _allowedSelections)}) exitwith {false};
|
||||
if !("All" in _allowedSelections || {(_selectionName in _allowedSelections)}) exitwith { false };
|
||||
|
||||
_return = true;
|
||||
if (getText (_config >> "condition") != "") then {
|
||||
@ -61,7 +60,7 @@ if (getText (_config >> "condition") != "") then {
|
||||
_return = [_caller, _target, _selectionName, _className] call _condition;
|
||||
};
|
||||
};
|
||||
if (!_return) exitwith {false};
|
||||
if (!_return) exitwith { false };
|
||||
|
||||
_patientStateCondition = if (isText(_config >> "patientStateCondition")) then {
|
||||
missionNamespace getvariable [getText(_config >> "patientStateCondition"), 0]
|
||||
@ -71,7 +70,7 @@ _patientStateCondition = if (isText(_config >> "patientStateCondition")) then {
|
||||
if (_patientStateCondition == 1 && {!([_target] call FUNC(isInStableCondition))}) exitwith {false};
|
||||
|
||||
_locations = getArray (_config >> "treatmentLocations");
|
||||
if ("All" in _locations) exitwith {true};
|
||||
if ("All" in _locations) exitwith { true };
|
||||
|
||||
private [ "_medFacility", "_medVeh"];
|
||||
_medFacility = {([_caller] call FUNC(isInMedicalFacility)) || ([_target] call FUNC(isInMedicalFacility))};
|
||||
@ -93,6 +92,6 @@ _medVeh = {([_caller] call FUNC(isInMedicalVehicle)) || ([_target] call FUNC(isI
|
||||
};
|
||||
};
|
||||
};
|
||||
}foreach _locations;
|
||||
} foreach _locations;
|
||||
|
||||
_return;
|
||||
|
@ -17,6 +17,7 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
#define MAX_DURATION_CACHE 2
|
||||
params ["", "_target", "_selection", "_classname"];
|
||||
|
||||
// parameters, function, namespace, uid
|
||||
[_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);
|
||||
[_this, DFUNC(canTreat), _target, format [QGVAR(canTreat_%1_%2), _selection, _classname], MAX_DURATION_CACHE, "clearConditionCaches"] call EFUNC(common,cachedCall);
|
||||
|
@ -7,16 +7,15 @@
|
||||
* 1: The caller <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* OBJECT Returns the copy of the unit. If no copy could be made, returns the oldBody
|
||||
* Returns the copy of the unit. If no copy could be made, returns the oldBody <OBJECT>
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_oldBody","_newUnit","_class","_group","_position","_side", "_caller", "_name"];
|
||||
_oldBody = _this select 0;
|
||||
_caller = _this select 1;
|
||||
private ["_newUnit", "_class", "_group", "_position", "_side", "_name"];
|
||||
params ["_oldBody", "_caller"];
|
||||
|
||||
if (alive _oldBody) exitwith {_oldBody}; // we only want to do this for dead bodies
|
||||
|
||||
|
@ -3,11 +3,16 @@
|
||||
* Spawns litter for the treatment action on the ground around the target
|
||||
*
|
||||
* Arguments:
|
||||
* 0: The target <OBJECT>
|
||||
* 1: The treatment classname <STRING>
|
||||
* 0: The Caller <OBJECT>
|
||||
* 1: The target <OBJECT>
|
||||
* 2: The treatment Selection Name <STRING>
|
||||
* 3: The treatment classname <STRING>
|
||||
* 4: ?
|
||||
* 5: Users of Items <?>
|
||||
* 6: Previous Damage <NUMBER>
|
||||
*
|
||||
* Return Value:
|
||||
*
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
@ -16,13 +21,8 @@
|
||||
|
||||
#define MIN_ENTRIES_LITTER_CONFIG 3
|
||||
|
||||
private ["_target", "_className", "_config", "_litter", "_createLitter", "_position", "_createdLitter", "_caller", "_selectionName", "_usersOfItems", "_previousDamage"];
|
||||
_caller = _this select 0;
|
||||
_target = _this select 1;
|
||||
_selectionName = _this select 2;
|
||||
_className = _this select 3;
|
||||
_usersOfItems = _this select 5;
|
||||
_previousDamage = _this select 6;
|
||||
private ["_config", "_litter", "_createLitter", "_position", "_createdLitter"];
|
||||
params ["_caller", "_target", "_selectionName", "_className", "", "_usersOfItems", "_previousDamage"];
|
||||
|
||||
if !(GVAR(allowLitterCreation)) exitwith {};
|
||||
if (vehicle _caller != _caller || vehicle _target != _target) exitwith {};
|
||||
@ -38,25 +38,24 @@ if !(isArray (_config >> "litter")) exitwith {};
|
||||
_litter = getArray (_config >> "litter");
|
||||
|
||||
_createLitter = {
|
||||
private["_position", "_litterClass", "_direction"];
|
||||
|
||||
private["_position", "_direction"];
|
||||
params ["_unit", "_litterClass"];
|
||||
// @TODO: handle carriers over water
|
||||
// For now, don't spawn litter if we are over water to avoid floating litter
|
||||
if(surfaceIsWater (getPos (_this select 0))) exitWith { false };
|
||||
|
||||
_position = getPosATL (_this select 0);
|
||||
_position = [_position select 0, _position select 1, 0];
|
||||
_litterClass = _this select 1;
|
||||
if (random(1) >= 0.5) then {
|
||||
_position = [(_position select 0) + random 1, (_position select 1) + random 1, _position select 2];
|
||||
if(surfaceIsWater (getPos _unit)) exitWith { false };
|
||||
|
||||
_position = getPosATL _unit;
|
||||
_position params ["_posX", "_posY"];
|
||||
_position = if (random(1) >= 0.5) then {
|
||||
[_posX + random 1, _posY + random 1, 0]
|
||||
} else {
|
||||
_position = [(_position select 0) - random 1, (_position select 1) - random 1, _position select 2];
|
||||
[_posX - random 1, _posY - random 1, 0];
|
||||
};
|
||||
_direction = (random 360);
|
||||
|
||||
// Create the litter, and timeout the event based on the cleanup delay
|
||||
// The cleanup delay for events in MP is handled by the server side
|
||||
[QGVAR(createLitter), [_litterClass,_position,_direction], 0] call EFUNC(common,syncedEvent);
|
||||
[QGVAR(createLitter), [_litterClass, _position, _direction], 0] call EFUNC(common,syncedEvent);
|
||||
|
||||
true
|
||||
};
|
||||
@ -65,11 +64,10 @@ _createdLitter = [];
|
||||
{
|
||||
if (typeName _x == "ARRAY") then {
|
||||
if (count _x < MIN_ENTRIES_LITTER_CONFIG) exitwith {};
|
||||
private ["_selection", "_litterCondition", "_litterOptions"];
|
||||
_selection = _x select 0;
|
||||
|
||||
_x params ["_selection", "_litterCondition", "_litterOptions"];
|
||||
|
||||
if (toLower _selection in [toLower _selectionName, "all"]) then { // in is case sensitve. We can be forgiving here, so lets use toLower.
|
||||
_litterCondition = _x select 1;
|
||||
_litterOptions = _x select 2;
|
||||
|
||||
if (isnil _litterCondition) then {
|
||||
_litterCondition = if (_litterCondition != "") then {compile _litterCondition} else {{true}};
|
||||
@ -88,8 +86,8 @@ _createdLitter = [];
|
||||
if (typeName _x == "STRING") then {
|
||||
[_target, _x] call _createLitter;
|
||||
};
|
||||
}foreach _litterOptions;
|
||||
} foreach _litterOptions;
|
||||
};
|
||||
};
|
||||
};
|
||||
}foreach _litter;
|
||||
} foreach _litter;
|
||||
|
@ -1,19 +1,21 @@
|
||||
/**
|
||||
* fn_determineIfFatal.sqf
|
||||
* @Descr: N/A
|
||||
* @Author: Glowbal
|
||||
/*
|
||||
* Author: Glowbal
|
||||
* Determine If Fatal
|
||||
*
|
||||
* @Arguments: []
|
||||
* @Return:
|
||||
* @PublicAPI: false
|
||||
* Arguments:
|
||||
* 0: Unit <OBJECT>
|
||||
* 1: Part <NUMBER>
|
||||
* 2: with Damage <NUMBER> (default: 0)
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit","_part","_damageThreshold", "_withDamage", "_damageBodyPart"];
|
||||
_unit = _this select 0;
|
||||
_part = _this select 1;
|
||||
_withDamage = if (count _this > 2) then { _this select 2} else {0};
|
||||
private ["_damageThreshold", "_damageBodyPart"];
|
||||
params ["_unit", "_part", ["_withDamage", 0]];
|
||||
|
||||
if (!alive _unit) exitwith {true};
|
||||
if (_part < 0 || _part > 5) exitwith {false};
|
||||
@ -36,7 +38,7 @@ if (_part == 0) exitwith {
|
||||
|
||||
// Check if damage to body part is higher as damage torso
|
||||
if (_part == 1) exitwith {
|
||||
(_damageBodyPart >= (_damageThreshold select 1) && {(random(1) > 0.2)});
|
||||
(_damageBodyPart >= (_damageThreshold select 1) && {(random(1) > 0.35)});
|
||||
};
|
||||
// Check if damage to body part is higher as damage limbs
|
||||
(_damageBodyPart >= (_damageThreshold select 2) && {(random(1) > 0.95)});
|
||||
|
@ -4,10 +4,11 @@
|
||||
*
|
||||
* Arguments:
|
||||
* 0: The Unit <OBJECT>
|
||||
* 1: Show <BOOL> <OPTIONAL>
|
||||
* 1: Show <BOOL> (default: true)
|
||||
* 2: Selection <NUMBER> (default: 0)
|
||||
*
|
||||
* ReturnValue:
|
||||
* nil
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
@ -17,13 +18,11 @@
|
||||
|
||||
// Exit for basic medical
|
||||
if (GVAR(level) < 2) exitWith {};
|
||||
private ["_target", "_show", "_selectionN", "_amountOfGeneric", "_bandagedwounds", "_logCtrl", "_part", "_partText", "_pointDamage", "_severity", "_total", "_totalIvVolume", "_triageStatus", "_type"];
|
||||
_target = _this select 0;
|
||||
_show = if (count _this > 1) then {_this select 1} else {true};
|
||||
_selectionN = if (count _this > 2) then {_this select 2} else {0};
|
||||
private ["_amountOfGeneric", "_bandagedwounds", "_logCtrl", "_part", "_partText", "_pointDamage", "_severity", "_total", "_totalIvVolume", "_triageStatus", "_type"];
|
||||
params ["_target", ["_show", true], ["_selectionN", 0]];
|
||||
|
||||
GVAR(currentSelectedSelectionN) = if (typeName _selectionN == "SCALAR") then {_selectionN} else {0};
|
||||
GVAR(displayPatientInformationTarget) = if (_show) then {_target} else {ObjNull};
|
||||
GVAR(currentSelectedSelectionN) = [0, _selectionN] select (IS_SCALAR(_selectionN));
|
||||
GVAR(displayPatientInformationTarget) = [ObjNull, _target] select _show;
|
||||
|
||||
if (USE_WOUND_EVENT_SYNC) then {
|
||||
[_target, ACE_player] call FUNC(requestWoundSync);
|
||||
@ -34,22 +33,22 @@ if (_show) then {
|
||||
|
||||
[{
|
||||
private ["_target", "_display", "_alphaLevel", "_damaged", "_availableSelections", "_openWounds", "_selectionBloodLoss", "_red", "_green", "_blue", "_alphaLevel", "_allInjuryTexts", "_lbCtrl", "_genericMessages"];
|
||||
_target = (_this select 0) select 0;
|
||||
_selectionN = (_this select 0) select 1;
|
||||
params ["_args", "_idPFH"];
|
||||
_args params ["_target", "_selectionN"];
|
||||
|
||||
if (GVAR(displayPatientInformationTarget) != _target || GVAR(currentSelectedSelectionN) != _selectionN) exitwith {
|
||||
[_this select 1] call CBA_fnc_removePerFrameHandler;
|
||||
[_idPFH] call CBA_fnc_removePerFrameHandler;
|
||||
};
|
||||
if (ACE_player distance _target > MAX_DISTANCE) exitwith {
|
||||
("ACE_MedicalRscDisplayInformation" call BIS_fnc_rscLayer) cutText ["","PLAIN"];
|
||||
[_this select 1] call CBA_fnc_removePerFrameHandler;
|
||||
[_idPFH] call CBA_fnc_removePerFrameHandler;
|
||||
["displayTextStructured", [ACE_player], [[LSTRING(DistanceToFar), [_target] call EFUNC(common,getName)], 1.75, ACE_player]] call EFUNC(common,targetEvent);
|
||||
};
|
||||
|
||||
disableSerialization;
|
||||
_display = uiNamespace getvariable QGVAR(DisplayInformation);
|
||||
if (isnil "_display") exitwith {
|
||||
[_this select 1] call CBA_fnc_removePerFrameHandler;
|
||||
[_idPFH] call CBA_fnc_removePerFrameHandler;
|
||||
};
|
||||
|
||||
_allInjuryTexts = [];
|
||||
@ -81,7 +80,7 @@ if (_show) then {
|
||||
if !(isnil "_value") then {
|
||||
_totalIvVolume = _totalIvVolume + (_target getvariable [_x, 0]);
|
||||
};
|
||||
}foreach GVAR(IVBags);
|
||||
} foreach GVAR(IVBags);
|
||||
if (_totalIvVolume >= 1) then {
|
||||
_genericMessages pushback [format[localize LSTRING(receivingIvVolume), floor _totalIvVolume], [1, 1, 1, 1]];
|
||||
};
|
||||
@ -92,33 +91,33 @@ if (_show) then {
|
||||
_openWounds = _target getvariable [QGVAR(openWounds), []];
|
||||
private "_amountOf";
|
||||
{
|
||||
_amountOf = _x select 3;
|
||||
_x params ["", "_x1", "_selectionX", "_amountOf", "_x4"];
|
||||
// Find how much this bodypart is bleeding
|
||||
if (_amountOf > 0) then {
|
||||
_damaged set[_x select 2, true];
|
||||
_selectionBloodLoss set [(_x select 2), (_selectionBloodLoss select (_x select 2)) + (20 * ((_x select 4) * _amountOf))];
|
||||
_damaged set[_selectionX, true];
|
||||
_selectionBloodLoss set [_selectionX, (_selectionBloodLoss select _selectionX) + (20 * (_x4 * _amountOf))];
|
||||
|
||||
if (_selectionN == (_x select 2)) then {
|
||||
if (_selectionN == _selectionX) then {
|
||||
// Collect the text to be displayed for this injury [ Select injury class type definition - select the classname DisplayName (6th), amount of injuries for this]
|
||||
if (_amountOf >= 1) then {
|
||||
// TODO localization
|
||||
_allInjuryTexts pushback [format["%2x %1", (GVAR(AllWoundInjuryTypes) select (_x select 1)) select 6, _amountOf], [1,1,1,1]];
|
||||
_allInjuryTexts pushback [format["%2x %1", (GVAR(AllWoundInjuryTypes) select _x1) select 6, _amountOf], [1,1,1,1]];
|
||||
} else {
|
||||
// TODO localization
|
||||
_allInjuryTexts pushback [format["Partial %1", (GVAR(AllWoundInjuryTypes) select (_x select 1)) select 6], [1,1,1,1]];
|
||||
_allInjuryTexts pushback [format["Partial %1", (GVAR(AllWoundInjuryTypes) select _x1) select 6], [1,1,1,1]];
|
||||
};
|
||||
};
|
||||
};
|
||||
}foreach _openWounds;
|
||||
} foreach _openWounds;
|
||||
|
||||
_bandagedwounds = _target getvariable [QGVAR(bandagedWounds), []];
|
||||
{
|
||||
_amountOf = _x select 3;
|
||||
_x params ["", "", "_selectionX", "_amountOf", "_x4"];
|
||||
// Find how much this bodypart is bleeding
|
||||
if !(_damaged select (_x select 2)) then {
|
||||
_selectionBloodLoss set [(_x select 2), (_selectionBloodLoss select (_x select 2)) + (20 * ((_x select 4) * _amountOf))];
|
||||
if !(_damaged select _selectionX) then {
|
||||
_selectionBloodLoss set [_selectionX, (_selectionBloodLoss select _selectionX) + (20 * (_x4 * _amountOf))];
|
||||
};
|
||||
if (_selectionN == (_x select 2)) then {
|
||||
if (_selectionN == _selectionX) then {
|
||||
// Collect the text to be displayed for this injury [ Select injury class type definition - select the classname DisplayName (6th), amount of injuries for this]
|
||||
if (_amountOf > 0) then {
|
||||
if (_amountOf >= 1) then {
|
||||
@ -130,7 +129,7 @@ if (_show) then {
|
||||
};
|
||||
};
|
||||
};
|
||||
}foreach _bandagedwounds;
|
||||
} foreach _bandagedwounds;
|
||||
} else {
|
||||
_damaged = [true, true, true, true, true, true];
|
||||
{
|
||||
@ -160,7 +159,7 @@ if (_show) then {
|
||||
|
||||
_availableSelections = [50,51,52,53,54,55];
|
||||
{
|
||||
private ["_red", "_green", "_blue"];
|
||||
private ["_red", "_green", "_blue", "_total"];
|
||||
_total = _x;
|
||||
|
||||
_red = 1;
|
||||
@ -177,20 +176,22 @@ if (_show) then {
|
||||
};
|
||||
};
|
||||
(_display displayCtrl (_availableSelections select _foreachIndex)) ctrlSetTextColor [_red, _green, _blue, 1.0];
|
||||
}foreach _selectionBloodLoss;
|
||||
} foreach _selectionBloodLoss;
|
||||
|
||||
_lbCtrl = (_display displayCtrl 200);
|
||||
lbClear _lbCtrl;
|
||||
{
|
||||
_lbCtrl lbAdd (_x select 0);
|
||||
_lbCtrl lbSetColor [_foreachIndex, _x select 1];
|
||||
}foreach _genericMessages;
|
||||
_x params ["_add", "_color"];
|
||||
_lbCtrl lbAdd _add;
|
||||
_lbCtrl lbSetColor [_foreachIndex, _color];
|
||||
} foreach _genericMessages;
|
||||
|
||||
_amountOfGeneric = count _genericMessages;
|
||||
{
|
||||
_lbCtrl lbAdd (_x select 0);
|
||||
_lbCtrl lbSetColor [_foreachIndex + _amountOfGeneric, _x select 1];
|
||||
}foreach _allInjuryTexts;
|
||||
_x params ["_add", "_color"];
|
||||
_lbCtrl lbAdd _add;
|
||||
_lbCtrl lbSetColor [_foreachIndex + _amountOfGeneric, _color];
|
||||
} foreach _allInjuryTexts;
|
||||
if (count _allInjuryTexts == 0) then {
|
||||
_lbCtrl lbAdd (localize LSTRING(NoInjuriesBodypart));
|
||||
};
|
||||
@ -202,9 +203,7 @@ if (_show) then {
|
||||
_logs = _target getvariable [QGVAR(logFile_Activity), []];
|
||||
{
|
||||
// [_message,_moment,_type, _arguments]
|
||||
_message = _x select 0;
|
||||
_moment = _x select 1;
|
||||
_arguments = _x select 3;
|
||||
_x params ["_message", "_moment", "_type", "_arguments"];
|
||||
if (isLocalized _message) then {
|
||||
_message = localize _message;
|
||||
};
|
||||
@ -213,10 +212,10 @@ if (_show) then {
|
||||
if (typeName _x == "STRING" && {isLocalized _x}) then {
|
||||
_arguments set [_foreachIndex, localize _x];
|
||||
};
|
||||
}foreach _arguments;
|
||||
} foreach _arguments;
|
||||
_message = format([_message] + _arguments);
|
||||
_logCtrl lbAdd format["%1 %2", _moment, _message];
|
||||
}foreach _logs;
|
||||
} foreach _logs;
|
||||
|
||||
_triageStatus = [_target] call FUNC(getTriageStatus);
|
||||
(_display displayCtrl 303) ctrlSetText (_triageStatus select 0);
|
||||
|
@ -4,18 +4,18 @@
|
||||
*
|
||||
* Arguments:
|
||||
* 0: The unit <OBJECT>
|
||||
* 1: Show <BOOL> (default: true)
|
||||
*
|
||||
* Return Value:
|
||||
* nil
|
||||
* None
|
||||
*
|
||||
* Public: Yes
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_target", "_show", "_amount", "_item", "_log", "_message", "_triageCardTexts", "_triageStatus"];
|
||||
_target = _this select 0;
|
||||
_show = if (count _this > 1) then {_this select 1} else {true};
|
||||
private ["_amount", "_item", "_log", "_message", "_triageCardTexts", "_triageStatus"];
|
||||
params ["_target", ["_show", true]];
|
||||
|
||||
GVAR(TriageCardTarget) = if (_show) then {_target} else {ObjNull};
|
||||
|
||||
@ -25,15 +25,16 @@ if (_show) then {
|
||||
|
||||
[{
|
||||
private ["_target", "_display", "_alphaLevel", "_alphaLevel", "_lbCtrl"];
|
||||
_target = (_this select 0) select 0;
|
||||
params ["_args", "_idPFH"];
|
||||
_args params ["_target"];
|
||||
if (GVAR(TriageCardTarget) != _target) exitwith {
|
||||
[_this select 1] call CBA_fnc_removePerFrameHandler;
|
||||
[_idPFH] call CBA_fnc_removePerFrameHandler;
|
||||
};
|
||||
|
||||
disableSerialization;
|
||||
_display = uiNamespace getvariable QGVAR(triageCard);
|
||||
if (isnil "_display") exitwith {
|
||||
[_this select 1] call CBA_fnc_removePerFrameHandler;
|
||||
[_idPFH] call CBA_fnc_removePerFrameHandler;
|
||||
};
|
||||
|
||||
_triageCardTexts = [];
|
||||
@ -44,8 +45,7 @@ if (_show) then {
|
||||
|
||||
_log = _target getvariable [QGVAR(triageCard), []];
|
||||
{
|
||||
_item = _x select 0;
|
||||
_amount = _x select 1;
|
||||
_x params ["_item", "_amount"];
|
||||
_message = _item;
|
||||
if (isClass(configFile >> "CfgWeapons" >> _item)) then {
|
||||
_message = getText(configFile >> "CfgWeapons" >> _item >> "DisplayName");
|
||||
@ -55,18 +55,21 @@ if (_show) then {
|
||||
};
|
||||
};
|
||||
_triageCardTexts pushback format["%1x - %2", _amount, _message];
|
||||
}foreach _log;
|
||||
} foreach _log;
|
||||
|
||||
if (count _triageCardTexts == 0) then {
|
||||
_lbCtrl lbAdd (localize LSTRING(TriageCard_NoEntry));
|
||||
};
|
||||
{
|
||||
_lbCtrl lbAdd _x;
|
||||
}foreach _triageCardTexts;
|
||||
} foreach _triageCardTexts;
|
||||
|
||||
_triageStatus = [_target] call FUNC(getTriageStatus);
|
||||
(_display displayCtrl 2000) ctrlSetText (_triageStatus select 0);
|
||||
(_display displayCtrl 2000) ctrlSetBackgroundColor (_triageStatus select 2);
|
||||
|
||||
_triageStatus params ["_text", "", "_color"];
|
||||
|
||||
(_display displayCtrl 2000) ctrlSetText _text;
|
||||
(_display displayCtrl 2000) ctrlSetBackgroundColor _color;
|
||||
|
||||
}, 0, [_target]] call CBA_fnc_addPerFrameHandler;
|
||||
|
||||
|
@ -3,18 +3,18 @@
|
||||
* Display triage card for a unit
|
||||
*
|
||||
* Arguments:
|
||||
* 0: The unit <OBJECT>
|
||||
* 0: Show <BOOL>
|
||||
*
|
||||
* Return Value:
|
||||
* nil
|
||||
* None
|
||||
*
|
||||
* Public: Yes
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_show", "_ctrl", "_display", "_idc", "_pos"];
|
||||
_show = _this select 0;
|
||||
private ["_ctrl", "_display", "_idc", "_pos"];
|
||||
params ["_show"];
|
||||
disableSerialization;
|
||||
|
||||
_display = uiNamespace getvariable QGVAR(triageCard);
|
||||
|
@ -15,10 +15,9 @@
|
||||
|
||||
#define BLOODLOSSRATE_BASIC 0.2
|
||||
|
||||
private ["_unit", "_totalBloodLoss","_tourniquets","_openWounds", "_cardiacOutput", "_internalWounds"];
|
||||
private ["_totalBloodLoss","_tourniquets","_openWounds", "_cardiacOutput", "_internalWounds"];
|
||||
// TODO Only use this calculation if medium or higher, otherwise use vanilla calculations (for basic medical).
|
||||
|
||||
_unit = _this select 0;
|
||||
params ["_unit"];
|
||||
_totalBloodLoss = 0;
|
||||
|
||||
// Advanced medical bloodloss handling
|
||||
@ -34,16 +33,17 @@ if (GVAR(level) >= 2) then {
|
||||
|
||||
// (((BLOODLOSS_SMALL_WOUNDS * (_x select 0))) + ((BLOODLOSS_MEDIUM_WOUNDS * (_x select 1))) + ((BLOODLOSS_LARGE_WOUNDS * (_x select 2))) * (_cardiacOutput / DEFAULT_CARDIAC_OUTPUT));
|
||||
};
|
||||
}foreach _openWounds;
|
||||
} foreach _openWounds;
|
||||
|
||||
_internalWounds = _unit getvariable [QGVAR(internalWounds), []];
|
||||
{
|
||||
_totalBloodLoss = _totalBloodLoss + ((_x select 4) * (_x select 3));
|
||||
}foreach _internalWounds;
|
||||
} foreach _internalWounds;
|
||||
|
||||
// cap the blood loss to be no greater as the current cardiac output
|
||||
//(_totalBloodLoss min _cardiacOutput);
|
||||
} else {
|
||||
_totalBloodLoss = BLOODLOSSRATE_BASIC * (damage _unit);
|
||||
{ _totalBloodLoss = _totalBloodLoss + _x } forEach (_unit getvariable [QGVAR(bodyPartStatus), []]);
|
||||
_totalBloodLoss = (_totalBloodLoss / 6) * BLOODLOSSRATE_BASIC;
|
||||
};
|
||||
_totalBloodLoss * ((_unit getVariable [QGVAR(bleedingCoefficient), GVAR(bleedingCoefficient)]) max 0);
|
||||
|
@ -6,29 +6,28 @@
|
||||
* 0: The Unit <OBJECT>
|
||||
*
|
||||
* ReturnValue:
|
||||
* Blood Pressuret <ARRAY <NUMBER>,<NUMBER>>
|
||||
* 0: BloodPressure Low <NUMBER>
|
||||
* 1: BloodPressure High <NUMBER>
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
/*
|
||||
Value is taken because with cardic output and resistance at default values, it will put blood pressure High at 120.
|
||||
*/
|
||||
// Value is taken because with cardic output and resistance at default values, it will put blood pressure High at 120.
|
||||
#define MODIFIER_BP_HIGH 0.229
|
||||
|
||||
/*
|
||||
Value is taken because with cardic output and resistance at default values, it will put blood pressure Low at 80.
|
||||
*/
|
||||
// Value is taken because with cardic output and resistance at default values, it will put blood pressure Low at 80.
|
||||
#define MODIFIER_BP_LOW 0.1524
|
||||
|
||||
private ["_unit", "_bloodPressureLow", "_bloodPressureHigh", "_cardiacOutput", "_resistance"];
|
||||
_unit = _this select 0;
|
||||
private ["_bloodPressureLow", "_bloodPressureHigh", "_cardiacOutput", "_resistance"];
|
||||
|
||||
params ["_unit"];
|
||||
|
||||
_cardiacOutput = [_unit] call FUNC(getCardiacOutput);
|
||||
_resistance = _unit getvariable [QGVAR(peripheralResistance), 100];
|
||||
|
||||
_bloodPressureHigh = (_cardiacOutput * MODIFIER_BP_HIGH) * _resistance;
|
||||
_bloodPressureLow = (_cardiacOutput * MODIFIER_BP_LOW) * _resistance;
|
||||
|
||||
[_bloodPressureLow, _bloodPressureHigh];
|
||||
[_bloodPressureLow max 0, _bloodPressureHigh max 0]
|
||||
|
@ -28,10 +28,8 @@
|
||||
*/
|
||||
#define BLOOD_CHANGE_PER_SECOND 0.0595
|
||||
|
||||
|
||||
|
||||
private ["_unit","_bloodVolume","_bloodVolumeChange", "_ivVolume"];
|
||||
_unit = _this select 0;
|
||||
private ["_bloodVolume", "_bloodVolumeChange", "_ivVolume"];
|
||||
params ["_unit"];
|
||||
|
||||
_bloodVolume = _unit getvariable [QGVAR(bloodVolume), 100];
|
||||
_bloodVolumeChange = -([_unit] call FUNC(getBloodLoss));
|
||||
@ -43,13 +41,13 @@ if (_bloodVolume < 100.0) then {
|
||||
_ivVolume = (_unit getvariable [_x, 0]) + IV_CHANGE_PER_SECOND;
|
||||
_unit setvariable [_x,_ivVolume];
|
||||
};
|
||||
}foreach GVAR(IVBags);
|
||||
} foreach GVAR(IVBags);
|
||||
} else {
|
||||
{
|
||||
if ((_unit getvariable [_x, 0]) > 0) then {
|
||||
_unit setvariable [_x, 0]; // lets get rid of exessive IV volume
|
||||
};
|
||||
}foreach GVAR(IVBags);
|
||||
} foreach GVAR(IVBags);
|
||||
};
|
||||
|
||||
_bloodVolumeChange;
|
||||
|
@ -22,7 +22,6 @@
|
||||
// to limit the amount of complex calculations necessary, we take a set modifier to calculate Stroke Volume.
|
||||
#define MODIFIER_CARDIAC_OUTPUT 19.04761
|
||||
|
||||
private "_unit";
|
||||
_unit = _this select 0;
|
||||
params ["_unit"];
|
||||
|
||||
((_unit getvariable [QGVAR(bloodVolume), 100])/MODIFIER_CARDIAC_OUTPUT) + ((_unit getvariable [QGVAR(heartRate), 80])/80-1);
|
||||
|
@ -15,8 +15,9 @@
|
||||
|
||||
#define HEART_RATE_MODIFIER 0.02
|
||||
|
||||
private ["_unit", "_heartRate", "_hrIncrease", "_bloodLoss", "_time", "_values", "_adjustment", "_change", "_callBack", "_bloodVolume"];
|
||||
_unit = _this select 0;
|
||||
private ["_heartRate", "_hrIncrease", "_bloodLoss", "_time", "_values", "_adjustment", "_change", "_callBack", "_bloodVolume"];
|
||||
params ["_unit"];
|
||||
|
||||
_hrIncrease = 0;
|
||||
if (!(_unit getvariable [QGVAR(inCardiacArrest),false])) then {
|
||||
_heartRate = _unit getvariable [QGVAR(heartRate), 80];
|
||||
@ -24,10 +25,8 @@ if (!(_unit getvariable [QGVAR(inCardiacArrest),false])) then {
|
||||
|
||||
_adjustment = _unit getvariable [QGVAR(heartRateAdjustments), []];
|
||||
{
|
||||
_values = (_x select 0);
|
||||
_x params ["_values", "_time", "_callBack"];
|
||||
if (abs _values > 0) then {
|
||||
_time = (_x select 1);
|
||||
_callBack = _x select 2;
|
||||
if (_time <= 0) then {
|
||||
_time = 1;
|
||||
};
|
||||
@ -47,7 +46,7 @@ if (!(_unit getvariable [QGVAR(inCardiacArrest),false])) then {
|
||||
[_unit] call _callBack;
|
||||
};
|
||||
|
||||
}foreach _adjustment;
|
||||
} foreach _adjustment;
|
||||
_adjustment = _adjustment - [ObjNull];
|
||||
_unit setvariable [QGVAR(heartRateAdjustments), _adjustment];
|
||||
|
||||
|
@ -6,7 +6,9 @@
|
||||
* 0: The unit <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* Triage status from the unit. Name, statusID, color <ARRAY <STRING><NUMBER><ARRAY>>
|
||||
* 0: Name <STRING>
|
||||
* 1: Status ID <NUMBER>
|
||||
* 2: Color <ARRAY <NUMBER>>
|
||||
*
|
||||
* Public: Yes
|
||||
*/
|
||||
@ -14,7 +16,7 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit","_return","_status"];
|
||||
_unit = _this select 0;
|
||||
params ["_unit"];
|
||||
_status = _unit getvariable [QGVAR(triageLevel), -1];
|
||||
_return = switch (_status) do {
|
||||
case 1: {[localize LSTRING(Triage_Status_Minor), 1, [0, 0.5, 0, 0.9]]};
|
||||
@ -23,4 +25,4 @@ _return = switch (_status) do {
|
||||
case 4: {[localize LSTRING(Triage_Status_Deceased), 4, [0, 0, 0, 0.9]]};
|
||||
default {[localize LSTRING(Triage_Status_None), 0, [0, 0, 0, 0.9]]};
|
||||
};
|
||||
_return;
|
||||
_return
|
||||
|
@ -13,23 +13,19 @@
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
PARAMS_1(_typeOfProjectile);
|
||||
params ["_typeOfProjectile"];
|
||||
|
||||
private ["_typeOfDamage"];
|
||||
|
||||
_typeOfDamage = switch (true) do {
|
||||
case (_typeOfProjectile isKindOf "BulletBase"): {"bullet"};
|
||||
case (_typeOfProjectile isKindOf "GrenadeCore"): {"grenade"};
|
||||
case (_typeOfProjectile isKindOf "TimeBombCore"): {"explosive"};
|
||||
case (_typeOfProjectile isKindOf "MineCore"): {"explosive"};
|
||||
case (_typeOfProjectile isKindOf "FuelExplosion"): {"explosive"};
|
||||
case (_typeOfProjectile isKindOf "ShellBase"): {"shell"};
|
||||
case (_typeOfProjectile isKindOf "RocketBase"): {"explosive"};
|
||||
case (_typeOfProjectile isKindOf "MissileBase"): {"explosive"};
|
||||
case (_typeOfProjectile isKindOf "LaserBombCore"): {"explosive"};
|
||||
case (_typeOfProjectile isKindOf "BombCore"): {"explosive"};
|
||||
case (_typeOfProjectile isKindOf "Grenade"): {"grenade"};
|
||||
default {toLower _typeOfProjectile};
|
||||
};
|
||||
|
||||
_typeOfDamage
|
||||
if (_typeOfProjectile isKindOf "BulletBase") exitWith {"bullet"};
|
||||
if (_typeOfProjectile isKindOf "ShotgunBase") exitwith {"bullet"};
|
||||
if (_typeOfProjectile isKindOf "GrenadeCore") exitWith {"grenade"};
|
||||
if (_typeOfProjectile isKindOf "TimeBombCore") exitWith {"explosive"};
|
||||
if (_typeOfProjectile isKindOf "MineCore") exitWith {"explosive"};
|
||||
if (_typeOfProjectile isKindOf "FuelExplosion") exitWith {"explosive"};
|
||||
if (_typeOfProjectile isKindOf "ShellBase") exitWith {"shell"};
|
||||
if (_typeOfProjectile isKindOf "RocketBase") exitWith {"explosive"};
|
||||
if (_typeOfProjectile isKindOf "MissileBase") exitWith {"explosive"};
|
||||
if (_typeOfProjectile isKindOf "LaserBombCore") exitWith {"explosive"};
|
||||
if (_typeOfProjectile isKindOf "BombCore") exitWith {"explosive"};
|
||||
if (_typeOfProjectile isKindOf "Grenade") exitWith {"grenade"};
|
||||
toLower _typeOfProjectile
|
||||
|
@ -14,7 +14,7 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit","_return"];
|
||||
_unit = _this select 0;
|
||||
params ["_unit"];
|
||||
|
||||
if (isnil QGVAR(unconsciousConditions)) then {
|
||||
GVAR(unconsciousConditions) = [];
|
||||
@ -25,6 +25,6 @@ _return = false;
|
||||
if (typeName _x == typeName {} && {([_unit] call _x)}) exitwith {
|
||||
_return = true;
|
||||
};
|
||||
}foreach GVAR(unconsciousConditions);
|
||||
} foreach GVAR(unconsciousConditions);
|
||||
|
||||
_return;
|
||||
_return
|
||||
|
@ -18,13 +18,8 @@
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_target", "_impact", "_part", "_injuryIndex", "_injury", "_bandage", "_classID", "_className", "_reopeningChance", "_reopeningMinDelay", "_reopeningMaxDelay", "_config", "_woundTreatmentConfig", "_bandagedWounds", "_exist", "_injuryId", "_existingInjury", "_delay", "_openWounds", "_selectedInjury", "_bandagedInjury"];
|
||||
_target = _this select 0;
|
||||
_impact = _this select 1;
|
||||
_part = _this select 2;
|
||||
_injuryIndex = _this select 3;
|
||||
_injury = _this select 4;
|
||||
_bandage = _this select 5;
|
||||
private ["_className", "_reopeningChance", "_reopeningMinDelay", "_reopeningMaxDelay", "_config", "_woundTreatmentConfig", "_bandagedWounds", "_exist", "_injuryId", "_existingInjury", "_delay", "_openWounds", "_selectedInjury", "_bandagedInjury"];
|
||||
params ["_target", "_impact", "_part", "_injuryIndex", "_injury", "_bandage"];
|
||||
|
||||
_classID = _injury select 1;
|
||||
_className = GVAR(woundClassNames) select _classID;
|
||||
@ -57,8 +52,8 @@ if (isClass (_config >> _className)) then {
|
||||
};
|
||||
|
||||
_bandagedWounds = _target getvariable [QGVAR(bandagedWounds), []];
|
||||
_exist = false;
|
||||
_injuryType = _injury select 1;
|
||||
_exist = false;
|
||||
_bandagedInjury = [];
|
||||
{
|
||||
if ((_x select 1) == _injuryType && (_x select 2) == (_injury select 2)) exitwith {
|
||||
@ -69,7 +64,7 @@ _bandagedInjury = [];
|
||||
|
||||
_bandagedInjury = _existingInjury;
|
||||
};
|
||||
}foreach _bandagedWounds;
|
||||
} foreach _bandagedWounds;
|
||||
|
||||
if !(_exist) then {
|
||||
// [ID, classID, bodypart, percentage treated, bloodloss rate]
|
||||
@ -83,12 +78,8 @@ _target setvariable [QGVAR(bandagedWounds), _bandagedWounds, true];
|
||||
if (random(1) <= _reopeningChance) then {
|
||||
_delay = _reopeningMinDelay + random(_reopeningMaxDelay - _reopeningMinDelay);
|
||||
[{
|
||||
private ["_target", "_impact", "_part", "_injuryIndex", "_bandage", "_injury", "_openWounds", "_selectedInjury","_bandagedWounds","_exist"];
|
||||
_target = _this select 0;
|
||||
_impact = _this select 1;
|
||||
_part = _this select 2;
|
||||
_injuryIndex = _this select 3;
|
||||
_injury = _this select 4;
|
||||
private ["_bandage", "_openWounds", "_selectedInjury","_bandagedWounds","_exist"];
|
||||
params ["_target", "_impact", "_part", "_injuryIndex", "_injury"];
|
||||
|
||||
//if (alive _target) then {
|
||||
_openWounds = _target getvariable [QGVAR(openWounds), []];
|
||||
@ -108,7 +99,7 @@ if (random(1) <= _reopeningChance) then {
|
||||
_existingInjury set [3, ((_existingInjury select 3) - _impact) max 0];
|
||||
_bandagedWounds set [_foreachIndex, _existingInjury];
|
||||
};
|
||||
}foreach _bandagedWounds;
|
||||
} foreach _bandagedWounds;
|
||||
|
||||
if (_exist) then {
|
||||
_target setvariable [QGVAR(bandagedWounds), _bandagedWounds, true];
|
||||
|
@ -1,9 +1,22 @@
|
||||
//#define DEBUG_MODE_FULL
|
||||
/*
|
||||
* Author: Glowbal
|
||||
* handle Litter Create
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Litter Class <STRING>
|
||||
* 1: Position <ARRAY>
|
||||
* 2: Unit <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
if(!hasInterface) exitWith { false };
|
||||
|
||||
PARAMS_3(_litterClass,_position,_direction);
|
||||
params ["_litterClass", "_position", "_unit"];
|
||||
private["_litterObject", "_maxLitterCount"];
|
||||
//IGNORE_PRIVATE_WARNING(_values);
|
||||
|
||||
@ -16,9 +29,9 @@ _litterObject = _litterClass createVehicleLocal _position;
|
||||
_litterObject setDir _direction;
|
||||
_litterObject setPosATL _position;
|
||||
// Move the litter next frame to get rid of HORRIBLE spacing, fixes #1112
|
||||
[{ (_this select 0) setPosATL (_this select 1); }, [_litterObject, _position]] call EFUNC(common,execNextFrame);
|
||||
|
||||
_maxLitterCount = getArray (configFile >> "ACE_Settings" >> QGVAR(litterSimulationDetail) >> "_values") select GVAR(litterSimulationDetail);
|
||||
[{ params ["_object", "_pos"]; _object setPosATL _pos; }, [_litterObject, _position]] call EFUNC(common,execNextFrame);
|
||||
|
||||
_maxLitterCount = getArray (configFile >> "ACE_Settings" >> QGVAR(litterSimulationDetail) >> "_values") select GVAR(litterSimulationDetail);
|
||||
if((count GVAR(allCreatedLitter)) > _maxLitterCount ) then {
|
||||
// gank the first litter object, and spawn ours.
|
||||
private["_oldLitter"];
|
||||
@ -34,10 +47,11 @@ if(!GVAR(litterPFHRunning) && {GVAR(litterCleanUpDelay) > 0}) then {
|
||||
GVAR(litterPFHRunning) = true;
|
||||
[{
|
||||
{
|
||||
if (ACE_time - (_x select 0) >= GVAR(litterCleanUpDelay)) then {
|
||||
_x params ["_time", "_objects"];
|
||||
if (ACE_time - _time >= GVAR(litterCleanUpDelay)) then {
|
||||
{
|
||||
deleteVehicle _x;
|
||||
} forEach (_x select 1);
|
||||
} forEach _objects;
|
||||
GVAR(allCreatedLitter) set[_foreachIndex, objNull];
|
||||
};
|
||||
} forEach GVAR(allCreatedLitter);
|
||||
@ -46,8 +60,6 @@ if(!GVAR(litterPFHRunning) && {GVAR(litterCleanUpDelay) > 0}) then {
|
||||
if ( (count GVAR(allCreatedLitter)) == 0) exitwith {
|
||||
[(_this select 1)] call CBA_fnc_removePerFrameHandler;
|
||||
GVAR(litterPFHRunning) = false;
|
||||
};
|
||||
};
|
||||
}, 30, []] call CBA_fnc_addPerFrameHandler;
|
||||
};
|
||||
|
||||
true
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Author: KoffeinFlummi, Glowbal
|
||||
/*
|
||||
* Author: KoffeinFlummi, Glowbal, commy2
|
||||
* Main HandleDamage EH function.
|
||||
*
|
||||
* Arguments:
|
||||
@ -14,74 +14,79 @@
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit", "_selection", "_damage", "_shooter", "_projectile", "_damageReturn", "_typeOfDamage", "_minLethalDamage", "_newDamage", "_typeIndex", "_preventDeath"];
|
||||
_unit = _this select 0;
|
||||
_selection = _this select 1;
|
||||
_damage = _this select 2;
|
||||
_shooter = _this select 3;
|
||||
_projectile = _this select 4;
|
||||
params ["_unit", "_selection", "_damage", "_shooter", "_projectile"];
|
||||
TRACE_5("ACE_DEBUG: HandleDamage Called",_unit, _selection, _damage, _shooter, _projectile);
|
||||
|
||||
if !(local _unit) exitWith {nil};
|
||||
// bug, apparently can fire for remote units in special cases
|
||||
if !(local _unit) exitWith {
|
||||
TRACE_2("ACE_DEBUG: HandleDamage on remote unit!",_unit, isServer);
|
||||
nil
|
||||
};
|
||||
|
||||
private ["_damageReturn", "_typeOfDamage", "_minLethalDamage", "_newDamage", "_typeIndex", "_preventDeath"];
|
||||
|
||||
// bug, assumed fixed, @todo excessive testing, if nothing happens remove
|
||||
if (typeName _projectile == "OBJECT") then {
|
||||
_projectile = typeOf _projectile;
|
||||
_this set [4, _projectile];
|
||||
};
|
||||
|
||||
// If the damage is being weird, we just tell it to fuck off.
|
||||
if !(_selection in (GVAR(SELECTIONS) + [""])) exitWith {0};
|
||||
TRACE_3("ACE_DEBUG: HandleDamage",_selection,_damage,_unit);
|
||||
|
||||
// If damage is in dummy hitpoints, "hands" and "legs", don't change anything
|
||||
if (_selection == "hands") exitWith {_unit getHit "hands"};
|
||||
if (_selection == "legs") exitWith {_unit getHit "legs"};
|
||||
|
||||
// If the damage is being weird, we just tell it to fuck off. Ignore: "hands", "legs", "?"
|
||||
if (_selection != "" && {!(_selection in GVAR(SELECTIONS))}) exitWith {0}; //@todo "neck", "pelvis", "spine1", "spine2", "spine3"
|
||||
|
||||
// Exit if we disable damage temporarily
|
||||
_damageOld = damage _unit;
|
||||
if (_selection in GVAR(SELECTIONS)) then {
|
||||
_damageOld = _unit getHit _selection;
|
||||
if !(_unit getVariable [QGVAR(allowDamage), true]) exitWith {
|
||||
TRACE_3("ACE_DEBUG: HandleDamage damage disabled.",_selection,damage _unit,_unit);
|
||||
if (_selection == "") then {
|
||||
damage _unit
|
||||
} else {
|
||||
_unit getHit _selection
|
||||
};
|
||||
};
|
||||
if !(_unit getVariable [QGVAR(allowDamage), true]) exitWith {_damageOld};
|
||||
|
||||
// Get return damage
|
||||
_damageReturn = _damage;
|
||||
if (GVAR(level) < 2) then {
|
||||
_damageReturn = _this call FUNC(handleDamage_basic);
|
||||
|
||||
_newDamage = _this call FUNC(handleDamage_caching);
|
||||
// handleDamage_caching may have modified the projectile string
|
||||
_typeOfDamage = [_projectile] call FUNC(getTypeOfDamage);
|
||||
|
||||
TRACE_3("ACE_DEBUG: HandleDamage caching new damage",_selection,_newDamage,_unit);
|
||||
|
||||
_typeIndex = (GVAR(allAvailableDamageTypes) find _typeOfDamage);
|
||||
_minLethalDamage = if (_typeIndex >= 0) then {
|
||||
GVAR(minLethalDamages) select _typeIndex
|
||||
} else {
|
||||
if !([_unit] call FUNC(hasMedicalEnabled)) exitwith {
|
||||
// Because of the config changes, we cannot properly disable the medical system for a unit.
|
||||
// lets use basic for the ACE_time being..
|
||||
_damageReturn = _this call FUNC(handleDamage_basic);
|
||||
};
|
||||
_newDamage = _this call FUNC(handleDamage_caching);
|
||||
// handleDamage_caching may have modified the projectile string
|
||||
_projectile = _this select 4;
|
||||
_typeOfDamage = [_projectile] call FUNC(getTypeOfDamage);
|
||||
0.01
|
||||
};
|
||||
|
||||
_typeIndex = (GVAR(allAvailableDamageTypes) find _typeOfDamage);
|
||||
_minLethalDamage = 0.01;
|
||||
if (_typeIndex >= 0) then {
|
||||
_minLethalDamage = GVAR(minLethalDamages) select _typeIndex;
|
||||
if (vehicle _unit != _unit && {!(vehicle _unit isKindOf "StaticWeapon")} && {isNull _shooter} && {_projectile == ""} && {_selection == ""}) then {
|
||||
if (GVAR(enableVehicleCrashes)) then {
|
||||
_selection = GVAR(SELECTIONS) select (floor(random(count GVAR(SELECTIONS))));
|
||||
};
|
||||
};
|
||||
|
||||
if (vehicle _unit != _unit && {!(vehicle _unit isKindOf "StaticWeapon")} && {isNull _shooter} && {_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)}) then {
|
||||
if ((_unit getVariable [QGVAR(preventInstaDeath), GVAR(preventInstaDeath)])) exitwith {
|
||||
_damageReturn = 0.9;
|
||||
};
|
||||
|
||||
if ((_minLethalDamage <= _newDamage) && {[_unit, [_selection] call FUNC(selectionNameToNumber), _newDamage] call FUNC(determineIfFatal)}) then {
|
||||
if ((_unit getVariable [QGVAR(preventInstaDeath), GVAR(preventInstaDeath)])) exitwith {
|
||||
_damageReturn = 0.9;
|
||||
};
|
||||
if ([_unit] call FUNC(setDead)) then {
|
||||
_damageReturn = 1;
|
||||
} else {
|
||||
_damageReturn = _damageReturn min 0.89;
|
||||
};
|
||||
if ([_unit] call FUNC(setDead)) then {
|
||||
_damageReturn = 1;
|
||||
} else {
|
||||
_damageReturn = _damageReturn min 0.89;
|
||||
};
|
||||
|
||||
} else {
|
||||
_damageReturn = _damageReturn min 0.89;
|
||||
};
|
||||
|
||||
[_unit] call FUNC(addToInjuredCollection);
|
||||
|
||||
if (_unit getVariable [QGVAR(preventInstaDeath), GVAR(preventInstaDeath)]) exitWith {
|
||||
@ -123,4 +128,6 @@ if (((_unit getVariable [QGVAR(enableRevive), GVAR(enableRevive)]) > 0) && {_dam
|
||||
0.89;
|
||||
};
|
||||
|
||||
_damageReturn;
|
||||
TRACE_3("ACE_DEBUG: HandleDamage damage return",_selection,_damageReturn,_unit);
|
||||
|
||||
_damageReturn
|
||||
|
@ -12,23 +12,16 @@
|
||||
* 6: Type of Damage <STRING>
|
||||
*
|
||||
* Return Value:
|
||||
* Nothing
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit","_selectionName","_amountOfDamage","_sourceOfDamage","_typeOfProjectile","_typeOfDamage", "_part", "_damageBodyParts", "_newDamage", "_hitPoints"];
|
||||
_unit = _this select 0;
|
||||
_selectionName = _this select 1;
|
||||
_amountOfDamage = _this select 2;
|
||||
_sourceOfDamage = _this select 3;
|
||||
_typeOfProjectile = _this select 4;
|
||||
_newDamage = _this select 5;
|
||||
private ["_typeOfProjectile", "_part", "_damageBodyParts", "_hitPoints"];
|
||||
params ["_unit", "_selectionName", "_amountOfDamage", "_sourceOfDamage", "_typeOfProjectile", "_newDamage"];
|
||||
|
||||
// Most likely taking exessive fire damage. Lets exit.
|
||||
if (isNull _sourceOfDamage && {_typeOfProjectile == ""} && {vehicle _unit == _unit} && {(_selectionName == "head" || isBurning _unit)}) exitwith {};
|
||||
_part = [_selectionName] call FUNC(selectionNameToNumber);
|
||||
if (_part < 0) exitwith {};
|
||||
|
||||
@ -40,6 +33,7 @@ _damageBodyParts set [_part, (_damageBodyParts select _part) + _newDamage];
|
||||
_unit setvariable [QGVAR(bodyPartStatus), _damageBodyParts, true];
|
||||
|
||||
_typeOfDamage = [_typeOfProjectile] call FUNC(getTypeOfDamage);
|
||||
|
||||
[_unit, _selectionName, _newDamage, _typeOfProjectile, _typeOfDamage] call FUNC(handleDamage_assignWounds);
|
||||
|
||||
// TODO Disabled until implemented fully
|
||||
|
@ -6,23 +6,23 @@
|
||||
* 0: Unit for which the hitpoint damage will be sorted out <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* nil
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
PARAMS_1(_unit);
|
||||
params ["_unit"];
|
||||
|
||||
if (!local _unit) exitwith {};
|
||||
|
||||
private ["_bodyStatus", "_headDamage", "_torsoDamage", "_handsDamage", "_legsDamage"];
|
||||
private "_bodyStatus";
|
||||
|
||||
// ["head", "body", "hand_l", "hand_r", "leg_l", "leg_r"]
|
||||
_bodyStatus = _unit getVariable [QGVAR(bodyPartStatus), [0,0,0,0,0,0]];
|
||||
|
||||
EXPLODE_6_PVT(_bodyStatus,_headDamage,_torsoDamage,_handsDamageR,_handsDamageL,_legsDamageR,_legsDamageL);
|
||||
_bodyStatus params ["_headDamage", "_torsoDamage", "_handsDamageR", "_handsDamageL", "_legsDamageR", "_legsDamageL"];
|
||||
|
||||
_unit setHitPointDamage ["hitHead", _headDamage min 0.95];
|
||||
_unit setHitPointDamage ["hitBody", _torsoDamage min 0.95];
|
||||
|
@ -10,19 +10,15 @@
|
||||
* 4: Type of the damage done <STRING>
|
||||
*
|
||||
* Return Value:
|
||||
* None <NIL>
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit", "_selectionName", "_amountOfDamage", "_sourceOfDamage", "_typeOfDamage", "_bodyPartn"];
|
||||
_unit = _this select 0;
|
||||
_selectionName = _this select 1;
|
||||
_amountOfDamage = _this select 2;
|
||||
_sourceOfDamage = _this select 3;
|
||||
_typeOfDamage = _this select 4;
|
||||
private "_bodyPartn";
|
||||
params ["_unit", "_selectionName", "_amountOfDamage", "_sourceOfDamage", "_typeOfDamage"];
|
||||
_bodyPartn = [_selectionName] call FUNC(selectionNameToNumber);
|
||||
|
||||
if (_bodyPartn > 1) exitwith {};
|
||||
|
@ -1,192 +1,60 @@
|
||||
/*
|
||||
* Author: KoffeinFlummi
|
||||
* Basic HandleDamage EH function.
|
||||
* Author: KoffeinFlummi, Glowbal
|
||||
* Handle damage basic medical
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Unit That Was Hit <OBJECT>
|
||||
* 1: Name Of Hit Selection <STRING>
|
||||
* 2: Amount Of Damage <NUMBER>
|
||||
* 3: Shooter <OBJECT>
|
||||
* 4: Projectile <STRING>
|
||||
* 5: Current damage to be returned <NUMBER>
|
||||
*
|
||||
* Return Value:
|
||||
* Damage To Be Inflicted <NUMBER>
|
||||
* <nil>
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
#define LEGDAMAGETRESHOLD1 1
|
||||
#define LEGDAMAGETRESHOLD2 1.7
|
||||
#define ARMDAMAGETRESHOLD1 1
|
||||
#define ARMDAMAGETRESHOLD2 1.7
|
||||
#define UNCONSCIOUSNESSTRESHOLD 0.7
|
||||
private ["_damageBodyParts", "_cache_params", "_cache_damages"];
|
||||
params ["_target"];
|
||||
TRACE_1("ACE_DEBUG: HandleDamage_BASIC Called",_target);
|
||||
|
||||
private ["_unit", "_selectionName", "_damage", "_shooter", "_projectile", "_damage", "_armdamage", "_hitPoint", "_index", "_legdamage", "_newDamage", "_otherDamage", "_pain", "_restore"];
|
||||
_damageBodyParts = _target getvariable [QGVAR(bodyPartStatus), [0,0,0,0,0,0]];
|
||||
_cache_params = _target getVariable [QGVAR(cachedHandleDamageParams), []];
|
||||
_cache_damages = _target getVariable QGVAR(cachedDamages);
|
||||
|
||||
_unit = _this select 0;
|
||||
_selectionName = _this select 1;
|
||||
_damage = _this select 2;
|
||||
_shooter = _this select 3;
|
||||
_projectile = _this select 4;
|
||||
TRACE_4("ACE_DEBUG: HandleDamage BASIC",_unit, _damageBodyParts,_cache_params,_cache_damages);
|
||||
|
||||
// Apply damage treshold / coefficient
|
||||
_threshold = [
|
||||
_unit getVariable [QGVAR(damageThreshold), GVAR(AIDamageThreshold)],
|
||||
_unit getVariable [QGVAR(damageThreshold), GVAR(playerDamageThreshold)]
|
||||
] select ([_unit] call EFUNC(common,isPlayer));
|
||||
_damage = _damage * (1 / _threshold);
|
||||
{
|
||||
_x params ["_unit","_selectionName","_amountOfDamage","_sourceOfDamage","_typeOfProjectile","_typeOfDamage"];
|
||||
if !(isNull _sourceOfDamage && {_typeOfProjectile == ""} && {vehicle _unit == _unit} && {(_selectionName == "head" || isBurning _unit)}) then {
|
||||
_part = [_selectionName] call FUNC(selectionNameToNumber);
|
||||
if (_part < 0) exitwith {};
|
||||
|
||||
// This is a new hit, reset variables.
|
||||
// Note: sometimes handleDamage spans over 2 or even 3 frames.
|
||||
if (diag_frameno > (_unit getVariable [QGVAR(basic_frameNo), -3]) + 2) then {
|
||||
_unit setVariable [QGVAR(basic_frameNo), diag_frameno];
|
||||
_unit setVariable [QGVAR(isFalling), false];
|
||||
_unit setVariable [QGVAR(projectiles), []];
|
||||
_unit setVariable [QGVAR(hitPoints), []];
|
||||
_unit setVariable [QGVAR(damages), []];
|
||||
_unit setVariable [QGVAR(structDamage), 0];
|
||||
private ["_newDamage", "_pain"];
|
||||
_newDamage = (_cache_damages select _foreachIndex);
|
||||
_damageBodyParts set [_part, (_damageBodyParts select _part) + _newDamage];
|
||||
_unit setvariable [QGVAR(bodyPartStatus), _damageBodyParts];
|
||||
|
||||
if (isnil {_unit getvariable QGVAR(structDamagePFH)}) then {
|
||||
// Assign orphan structural damage to torso
|
||||
[{
|
||||
private ["_unit", "_damagesum"];
|
||||
_unit = (_this select 0) select 0;
|
||||
if (ACE_diagTime - (_unit getvariable [QGVAR(structDamagePFH),-2]) >= 2) then {
|
||||
_unit setVariable [QGVAR(structDamagePFH), nil];
|
||||
_damagesum = (_unit getHitPointDamage "HitHead") +
|
||||
(_unit getHitPointDamage "HitBody") +
|
||||
(_unit getHitPointDamage "HitLeftArm") +
|
||||
(_unit getHitPointDamage "HitRightArm") +
|
||||
(_unit getHitPointDamage "HitLeftLeg") +
|
||||
(_unit getHitPointDamage "HitRightLeg");
|
||||
if (_damagesum < 0.06 and damage _unit > 0.06 and alive _unit) then {
|
||||
_unit setHitPointDamage ["HitBody", damage _unit];
|
||||
};
|
||||
[(_this select 1)] call cba_fnc_removePerFrameHandler;
|
||||
if (alive _unit && {!(_unit getvariable ["ACE_isUnconscious", false])}) then {
|
||||
// If it reaches this, we can assume that the hit did not kill this unit, as this function is called 3 frames after the damage has been passed.
|
||||
if ([_unit, _part, if (_part > 1) then {_newDamage * 1.3} else {_newDamage * 2}] call FUNC(determineIfFatal)) then {
|
||||
[_unit, true, 0.5+random(3)] call FUNC(setUnconscious);
|
||||
};
|
||||
}, 0, [_unit]] call CBA_fnc_addPerFrameHandler;
|
||||
};
|
||||
_unit setVariable [QGVAR(structDamagePFH), ACE_diagTime]; // Assign starting ACE_time or reset it
|
||||
};
|
||||
|
||||
_newDamage = _damage - (damage _unit);
|
||||
if (_selectionName in GVAR(SELECTIONS)) then {
|
||||
_newDamage = _damage - (_unit getHitPointDamage (GVAR(HITPOINTS) select (GVAR(SELECTIONS) find _selectionName)));
|
||||
};
|
||||
|
||||
_damage = _damage - _newDamage;
|
||||
|
||||
|
||||
// Exclude falling damage to everything other than legs and reduce it overall.
|
||||
if (((velocity _unit) select 2 < -5) and (vehicle _unit == _unit)) then {
|
||||
_unit setVariable [QGVAR(isFalling), true];
|
||||
};
|
||||
if (_unit getVariable [QGVAR(isFalling), false] and !(_selectionName in ["", "leg_l", "leg_r"])) exitWith {
|
||||
(_unit getHitPointDamage (GVAR(HITPOINTS) select (GVAR(SELECTIONS) find _selectionName))) max 0.01;
|
||||
};
|
||||
if (_unit getVariable [QGVAR(isFalling), false]) then {
|
||||
_newDamage = _newDamage * 0.7;
|
||||
};
|
||||
|
||||
|
||||
// Make sure there's only one damaged selection per projectile per frame.
|
||||
if (_selectionName != "" and !(_unit getVariable QGVAR(isFalling))) then {
|
||||
_cache_projectiles = _unit getVariable QGVAR(projectiles);
|
||||
_cache_hitpoints = _unit getVariable QGVAR(hitPoints);
|
||||
_cache_damages = _unit getVariable QGVAR(damages);
|
||||
if (_projectile in _cache_projectiles) then {
|
||||
_index = _cache_projectiles find _projectile;
|
||||
_otherDamage = (_cache_damages select _index);
|
||||
if (_otherDamage > _newDamage) then {
|
||||
_newDamage = 0;
|
||||
} else {
|
||||
_hitPoint = _cache_hitpoints select _index;
|
||||
_restore = ((_unit getHitPointDamage _hitPoint) - _otherDamage) max 0;
|
||||
_unit setHitPointDamage [_hitPoint, _restore];
|
||||
// Make entry unfindable
|
||||
_cache_projectiles set [_index, objNull];
|
||||
_cache_projectiles pushBack _projectile;
|
||||
_cache_hitpoints pushBack (GVAR(HITPOINTS) select (GVAR(SELECTIONS) find _selectionName));
|
||||
_cache_damages pushBack _newDamage;
|
||||
};
|
||||
} else {
|
||||
_cache_projectiles pushBack _projectile;
|
||||
_cache_hitpoints pushBack (GVAR(HITPOINTS) select (GVAR(SELECTIONS) find _selectionName));
|
||||
_cache_damages pushBack _newDamage;
|
||||
_pain = _unit getVariable [QGVAR(pain), 0];
|
||||
_pain = _pain + (_newDamage / 4) * (1 - (_unit getVariable [QGVAR(morphine), 0]));
|
||||
_unit setVariable [QGVAR(pain), _pain min 1, true];
|
||||
};
|
||||
_unit setVariable [QGVAR(projectiles), _cache_projectiles];
|
||||
_unit setVariable [QGVAR(hitPoints), _cache_hitpoints];
|
||||
_unit setVariable [QGVAR(damages), _cache_damages];
|
||||
};
|
||||
}foreach _cache_params;
|
||||
|
||||
// Get rid of double structural damage (seriously arma, what the fuck?)
|
||||
if (_selectionName == "") then {
|
||||
_cache_structDamage = _unit getVariable QGVAR(structDamage);
|
||||
if (_newDamage > _cache_structDamage) then {
|
||||
_unit setVariable [QGVAR(structDamage), _newDamage];
|
||||
_newDamage = _newDamage - _cache_structDamage;
|
||||
} else {
|
||||
_newDamage = 0;
|
||||
};
|
||||
};
|
||||
// We broadcast the value across the net here, in order to avoid broadcasting it multiple times earlier in the above code block
|
||||
_target setvariable [QGVAR(bodyPartStatus), _damageBodyParts, true];
|
||||
TRACE_2("ACE_DEBUG: HandleDamage BASIC Broadcast value here",_unit, _target getvariable QGVAR(bodyPartStatus));
|
||||
|
||||
if (_selectionName == "") then {
|
||||
_damage = _damage + (_unit getVariable QGVAR(structDamage));
|
||||
} else {
|
||||
_damage = _damage + _newDamage;
|
||||
};
|
||||
EXPLODE_6_PVT(_damageBodyParts,_headDamage,_torsoDamage,_handsDamageR,_handsDamageL,_legsDamageR,_legsDamageL);
|
||||
_target setHitPointDamage ["hitHead", _headDamage min 0.95];
|
||||
_target setHitPointDamage ["hitBody", _torsoDamage min 0.95];
|
||||
_target setHitPointDamage ["hitHands", (_handsDamageR + _handsDamageL) min 0.95];
|
||||
_target setHitPointDamage ["hitLegs", (_legsDamageR + _legsDamageL) min 0.95];
|
||||
|
||||
// Leg Damage
|
||||
_legdamage = (_unit getHitPointDamage "HitLeftLeg") + (_unit getHitPointDamage "HitRightLeg");
|
||||
if (_selectionName == "leg_l") then {
|
||||
_legdamage = _damage + (_unit getHitPointDamage "HitRightLeg");
|
||||
};
|
||||
if (_selectionName == "leg_r") then {
|
||||
_legdamage = (_unit getHitPointDamage "HitLeftLeg") + _damage;
|
||||
};
|
||||
|
||||
if (_legdamage >= LEGDAMAGETRESHOLD1) then {
|
||||
_unit setHitPointDamage ["HitLegs", 1];
|
||||
} else {
|
||||
_unit setHitPointDamage ["HitLegs", 0];
|
||||
};
|
||||
// @todo: force prone for completely fucked up legs.
|
||||
|
||||
|
||||
// Arm Damage
|
||||
_armdamage = (_unit getHitPointDamage "HitLeftArm") + (_unit getHitPointDamage "HitRightArm");
|
||||
if (_selectionName == "hand_l") then {
|
||||
_armdamage = _damage + (_unit getHitPointDamage "HitRightArm");
|
||||
};
|
||||
if (_selectionName == "hand_r") then {
|
||||
_armdamage = (_unit getHitPointDamage "HitLeftArm") + _damage;
|
||||
};
|
||||
|
||||
if (_armdamage >= ARMDAMAGETRESHOLD1) then {
|
||||
_unit setHitPointDamage ["HitHands", 1];
|
||||
} else {
|
||||
_unit setHitPointDamage ["HitHands", 0];
|
||||
};
|
||||
// @todo: Drop weapon for full damage.
|
||||
|
||||
|
||||
// Set Pain
|
||||
if (_selectionName == "") then {
|
||||
_pain = _unit getVariable [QGVAR(pain), 0];
|
||||
_pain = _pain + _newDamage * (1 - (_unit getVariable [QGVAR(morphine), 0]));
|
||||
_unit setVariable [QGVAR(pain), _pain min 1, true];
|
||||
};
|
||||
|
||||
// Unconsciousness
|
||||
if (_selectionName == "" and
|
||||
_damage >= UNCONSCIOUSNESSTRESHOLD and
|
||||
_damage < 1 and
|
||||
!(_unit getVariable ["ACE_isUnconscious", False]
|
||||
)) then {
|
||||
[_unit, true] call FUNC(setUnconscious);
|
||||
};
|
||||
|
||||
_damage
|
||||
{
|
||||
_target setHitPointDamage [_x, (_damageBodyParts select _foreachIndex) min 0.95];
|
||||
}foreach GVAR(HITPOINTS);
|
||||
|
@ -18,13 +18,9 @@
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit", "_selectionName", "_damage", "_source", "_projectile", "_hitSelections", "_hitPoints", "_impactVelocity", "_newDamage", "_cache_hitpoints", "_cache_projectiles", "_cache_params", "_cache_damages"];
|
||||
_unit = _this select 0;
|
||||
_selectionName = _this select 1;
|
||||
_damage = _this select 2;
|
||||
_source = _this select 3;
|
||||
_projectile = _this select 4;
|
||||
|
||||
private ["_hitSelections", "_hitPoints", "_impactVelocity", "_newDamage", "_cache_hitpoints", "_cache_projectiles", "_cache_params", "_cache_damages"];
|
||||
params ["_unit", "_selectionName", "_damage", "_source", "_projectile"];
|
||||
TRACE_8("ACE_DEBUG: HandleDamage_Caching Called",_unit, _selectionName, _damage, _source, _projectile,GVAR(SELECTIONS),GVAR(HITPOINTS),damage _unit);
|
||||
_hitSelections = GVAR(SELECTIONS);
|
||||
_hitPoints = GVAR(HITPOINTS);
|
||||
|
||||
@ -78,21 +74,23 @@ if (diag_frameno > (_unit getVariable [QGVAR(frameNo_damageCaching), -3]) + 2) t
|
||||
// handle the cached damages 3 frames later
|
||||
[{
|
||||
private ["_args", "_params"];
|
||||
_args = _this select 0;
|
||||
params ["_args", "_idPFH"];
|
||||
_args params ["_unit", "_frameno"];
|
||||
if (diag_frameno > _frameno + 2) then {
|
||||
_unit setDamage 0;
|
||||
|
||||
if (diag_frameno > (_args select 1) + 2) then {
|
||||
(_args select 0) setDamage 0;
|
||||
|
||||
_cache_params = (_args select 0) getVariable [QGVAR(cachedHandleDamageParams), []];
|
||||
_cache_damages = (_args select 0) getVariable QGVAR(cachedDamages);
|
||||
{
|
||||
_params = _x + [_cache_damages select _foreachIndex];
|
||||
_params call FUNC(handleDamage_advanced);
|
||||
}foreach _cache_params;
|
||||
|
||||
[(_args select 0)] call FUNC(handleDamage_advancedSetDamage);
|
||||
|
||||
[(_this select 1)] call cba_fnc_removePerFrameHandler;
|
||||
if (GVAR(level) < 2 || {!([_unit] call FUNC(hasMedicalEnabled))}) then {
|
||||
[_unit] call FUNC(handleDamage_basic);
|
||||
} else {
|
||||
_cache_params = _unit getVariable [QGVAR(cachedHandleDamageParams), []];
|
||||
_cache_damages = _unit getVariable QGVAR(cachedDamages);
|
||||
{
|
||||
_params = _x + [_cache_damages select _foreachIndex];
|
||||
_params call FUNC(handleDamage_advanced);
|
||||
} foreach _cache_params;
|
||||
[_unit] call FUNC(handleDamage_advancedSetDamage);
|
||||
};
|
||||
[_idPFH] call CBA_fnc_removePerFrameHandler;
|
||||
};
|
||||
}, 0, [_unit, diag_frameno] ] call CBA_fnc_addPerFrameHandler;
|
||||
|
||||
@ -152,4 +150,6 @@ if (_selectionName != "") then {
|
||||
_unit setVariable [QGVAR(cachedHandleDamageParams), _cache_params];
|
||||
};
|
||||
|
||||
_newDamage;
|
||||
TRACE_8("ACE_DEBUG: HandleDamage_Caching",_unit, _newDamage, _cache_params, _cache_damages, _unit getVariable QGVAR(cachedProjectiles), _unit getVariable QGVAR(cachedHitPoints), _unit getVariable QGVAR(cachedDamages), _unit getVariable QGVAR(cachedHandleDamageParams));
|
||||
|
||||
_newDamage
|
||||
|
@ -17,12 +17,8 @@
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit", "_selectionName", "_amountOfDamage", "_sourceOfDamage", "_typeOfDamage", "_bodyPartn", "_fractures", "_fractureType"];
|
||||
_unit = _this select 0;
|
||||
_selectionName = _this select 1;
|
||||
_amountOfDamage = _this select 2;
|
||||
_sourceOfDamage = _this select 3;
|
||||
_typeOfDamage = _this select 4;
|
||||
private ["_bodyPartn", "_fractures", "_fractureType"];
|
||||
params ["_unit", "_selectionName", "_amountOfDamage", "_sourceOfDamage", "_typeOfDamage"];
|
||||
_bodyPartn = [_selectionName] call FUNC(selectionNameToNumber);
|
||||
|
||||
_fractureType = 1;
|
||||
|
@ -10,19 +10,15 @@
|
||||
* 4: Type of the damage done <STRING>
|
||||
*
|
||||
* Return Value:
|
||||
* None <NIL>
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit", "_selectionName", "_amountOfDamage", "_sourceOfDamage", "_typeOfDamage", "_bodyPartn"];
|
||||
_unit = _this select 0;
|
||||
_selectionName = _this select 1;
|
||||
_amountOfDamage = _this select 2;
|
||||
_sourceOfDamage = _this select 3;
|
||||
_typeOfDamage = _this select 4;
|
||||
private "_bodyPartn";
|
||||
params ["_unit", "_selectionName", "_amountOfDamage", "_sourceOfDamage", "_typeOfDamage"];
|
||||
_bodyPartn = [_selectionName] call FUNC(selectionNameToNumber);
|
||||
|
||||
// TODO implement internal injuries
|
||||
|
@ -10,19 +10,16 @@
|
||||
* 4: Type of the damage done <STRING>
|
||||
*
|
||||
* Return Value:
|
||||
* None <NIL>
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit", "_selectionName", "_damage", "_typeOfProjectile", "_typeOfDamage", "_bodyPartn", "_injuryTypeInfo", "_allInjuriesForDamageType", "_allPossibleInjuries", "_highestPossibleDamage", "_highestPossibleSpot", "_minDamage", "_openWounds", "_woundID", "_toAddInjury", "_painToAdd", "_bloodLoss", "_bodyPartNToAdd", "_classType", "_damageLevels", "_foundIndex", "_i", "_injury", "_maxDamage", "_pain", "_painLevel", "_selections", "_toAddClassID", "_woundsCreated"];
|
||||
_unit = _this select 0;
|
||||
_selectionName = _this select 1;
|
||||
_damage = _this select 2;
|
||||
_typeOfProjectile = _this select 3;
|
||||
_typeOfDamage = _this select 4;
|
||||
private ["_bodyPartn", "_injuryTypeInfo", "_allInjuriesForDamageType", "_allPossibleInjuries", "_highestPossibleDamage", "_highestPossibleSpot", "_minDamage", "_openWounds", "_woundID", "_toAddInjury", "_painToAdd", "_bloodLoss", "_bodyPartNToAdd", "_classType", "_damageLevels", "_foundIndex", "_i", "_injury", "_maxDamage", "_pain", "_painLevel", "_selections", "_toAddClassID", "_woundsCreated"];
|
||||
params ["_unit", "_selectionName", "_damage", "_typeOfProjectile", "_typeOfDamage"];
|
||||
TRACE_6("ACE_DEBUG: HandleDamage Called",_unit, _selectionName, _damage, _shooter, _typeOfProjectile,_typeOfDamage);
|
||||
|
||||
// Administration for open wounds and ids
|
||||
_openWounds = _unit getvariable[QGVAR(openWounds), []];
|
||||
@ -43,7 +40,7 @@ _foundIndex = -1;
|
||||
if (_x select 1 == _toAddClassID && {_x select 2 == _bodyPartNToAdd}) exitwith {
|
||||
_foundIndex = _foreachIndex;
|
||||
};
|
||||
}foreach _openWounds;
|
||||
} foreach _openWounds;
|
||||
|
||||
if (_foundIndex < 0) then {
|
||||
// Since it is a new injury, we will have to add it to the open wounds array to store it
|
||||
@ -53,7 +50,7 @@ _foundIndex = -1;
|
||||
_injury = _openWounds select _foundIndex;
|
||||
_injury set [3, (_injury select 3) + 1];
|
||||
};
|
||||
}foreach _woundsCreated;
|
||||
} foreach _woundsCreated;
|
||||
|
||||
_unit setvariable [QGVAR(openWounds), _openWounds, true];
|
||||
|
||||
@ -64,3 +61,4 @@ if (count _woundsCreated > 0) then {
|
||||
|
||||
_painLevel = _unit getvariable [QGVAR(pain), 0];
|
||||
_unit setvariable [QGVAR(pain), _painLevel + _painToAdd];
|
||||
TRACE_6("ACE_DEBUG: HandleDamage_WoundsOLD",_unit, _painLevel, _painToAdd, _unit getvariable QGVAR(pain), _unit getvariable QGVAR(openWounds),_woundsCreated);
|
||||
|
@ -17,12 +17,9 @@
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit", "_selectionName", "_damage", "_typeOfProjectile", "_typeOfDamage", "_bodyPartn", "_injuryTypeInfo", "_allInjuriesForDamageType", "_allPossibleInjuries", "_highestPossibleDamage", "_highestPossibleSpot", "_minDamage", "_openWounds", "_woundID", "_toAddInjury", "_painToAdd", "_bloodLoss", "_bodyPartNToAdd", "_classType", "_damageLevels", "_foundIndex", "_i", "_injury", "_maxDamage", "_pain", "_painLevel", "_selections", "_toAddClassID", "_woundsCreated"];
|
||||
_unit = _this select 0;
|
||||
_selectionName = _this select 1;
|
||||
_damage = _this select 2;
|
||||
_typeOfProjectile = _this select 3;
|
||||
_typeOfDamage = _this select 4;
|
||||
private ["_bodyPartn", "_injuryTypeInfo", "_allInjuriesForDamageType", "_allPossibleInjuries", "_highestPossibleDamage", "_highestPossibleSpot", "_minDamage", "_openWounds", "_woundID", "_toAddInjury", "_painToAdd", "_bloodLoss", "_bodyPartNToAdd", "_classType", "_damageLevels", "_foundIndex", "_i", "_injury", "_maxDamage", "_pain", "_painLevel", "_selections", "_toAddClassID", "_woundsCreated"];
|
||||
params ["_unit", "_selectionName", "_damage", "_typeOfProjectile", "_typeOfDamage"];
|
||||
TRACE_6("ACE_DEBUG: HandleDamage_WoundsOLD Called",_unit, _selectionName, _damage, _shooter, _typeOfProjectile,_typeOfDamage);
|
||||
|
||||
// Convert the selectionName to a number and ensure it is a valid selection.
|
||||
_bodyPartn = [_selectionName] call FUNC(selectionNameToNumber);
|
||||
@ -70,7 +67,7 @@ _allPossibleInjuries = [];
|
||||
_allPossibleInjuries pushback _x;
|
||||
};
|
||||
};
|
||||
}foreach _allInjuriesForDamageType;
|
||||
} foreach _allInjuriesForDamageType;
|
||||
|
||||
// No possible wounds available for this damage type or damage amount.
|
||||
if (_highestPossibleSpot < 0) exitwith {};
|
||||
@ -98,7 +95,7 @@ _woundsCreated = [];
|
||||
if (_x select 1 == _toAddClassID && {_x select 2 == _bodyPartNToAdd}) exitwith {
|
||||
_foundIndex = _foreachIndex;
|
||||
};
|
||||
}foreach _openWounds;
|
||||
} foreach _openWounds;
|
||||
};
|
||||
|
||||
_injury = [];
|
||||
@ -123,21 +120,15 @@ _woundsCreated = [];
|
||||
_painToAdd = _painToAdd + (_toAddInjury select 3);
|
||||
};
|
||||
};
|
||||
}foreach (_injuryTypeInfo select 0); // foreach damage thresholds
|
||||
} foreach (_injuryTypeInfo select 0); // foreach damage thresholds
|
||||
|
||||
_unit setvariable [QGVAR(openWounds), _openWounds, !USE_WOUND_EVENT_SYNC];
|
||||
_unit setvariable [QGVAR(openWounds), _openWounds, true];
|
||||
|
||||
// Only update if new wounds have been created
|
||||
if (count _woundsCreated > 0) then {
|
||||
// _unit setvariable [QGVAR(lastUniqueWoundID), _woundID, true];
|
||||
};
|
||||
|
||||
if (USE_WOUND_EVENT_SYNC) then {
|
||||
// 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);
|
||||
}foreach _woundsCreated;
|
||||
_unit setvariable [QGVAR(lastUniqueWoundID), _woundID, true];
|
||||
};
|
||||
|
||||
_painLevel = _unit getvariable [QGVAR(pain), 0];
|
||||
_unit setvariable [QGVAR(pain), _painLevel + _painToAdd];
|
||||
TRACE_6("ACE_DEBUG: HandleDamage_WoundsOLD",_unit, _painLevel, _painToAdd, _unit getvariable QGVAR(pain), _unit getvariable QGVAR(openWounds),_woundsCreated);
|
||||
|
@ -13,8 +13,8 @@
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private["_unit", "_openWounds"];
|
||||
_unit = _this select 0;
|
||||
private "_openWounds";
|
||||
params ["_unit"];
|
||||
if (!local _unit) exitwith {};
|
||||
|
||||
_unit setvariable [QGVAR(pain), 0];
|
||||
@ -22,11 +22,4 @@ if (GVAR(level) >= 2) then {
|
||||
_unit setvariable [QGVAR(heartRate), 0];
|
||||
_unit setvariable [QGVAR(bloodPressure), [0, 0]];
|
||||
_unit setvariable [QGVAR(airwayStatus), 0];
|
||||
|
||||
if (USE_WOUND_EVENT_SYNC) then {
|
||||
_openWounds = _unit getvariable [QGVAR(openWounds), []];
|
||||
{
|
||||
["medical_propagateWound", [_unit, _x]] call EFUNC(common,globalEvent);
|
||||
}foreach _openWounds;
|
||||
};
|
||||
};
|
||||
|
@ -15,9 +15,7 @@
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private["_unit", "_local"];
|
||||
_unit = _this select 0;
|
||||
_local = _this select 1;
|
||||
params ["_unit", "_local"];
|
||||
if (_local) then {
|
||||
if (_unit getvariable[QGVAR(addedToUnitLoop),false]) then {
|
||||
[_unit, true] call FUNC(addToInjuredCollection);
|
||||
|
@ -13,10 +13,9 @@
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit", "_heartRate","_bloodPressure","_bloodVolume","_painStatus", "_lastTimeValuesSynced", "_syncValues", "_airwayStatus", "_blood", "_bloodPressureH", "_bloodPressureL", "_interval"];
|
||||
_unit = _this select 0;
|
||||
_interval = _this select 1;
|
||||
|
||||
private ["_heartRate","_bloodPressure","_bloodVolume","_painStatus", "_lastTimeValuesSynced", "_syncValues", "_airwayStatus", "_blood"];
|
||||
params ["_unit", "_interval"];
|
||||
TRACE_3("ACE_DEBUG",_unit,_interval,_unit);
|
||||
if (_interval == 0) exitWith {};
|
||||
|
||||
_lastTimeValuesSynced = _unit getvariable [QGVAR(lastMomentValuesSynced), 0];
|
||||
@ -30,23 +29,28 @@ _bloodVolume = _bloodVolume max 0;
|
||||
|
||||
_unit setvariable [QGVAR(bloodVolume), _bloodVolume, _syncValues];
|
||||
|
||||
TRACE_3("ACE_DEBUG",_bloodVolume,_syncValues,_unit);
|
||||
// Set variables for synchronizing information across the net
|
||||
if (_bloodVolume < 100) then {
|
||||
if ((_bloodVolume < 90 && (GVAR(level) == 2)) || _bloodVolume <= 45) then {
|
||||
TRACE_4("ACE_DEBUG_ADVANCED",_bloodVolume,_unit getVariable QGVAR(hasLostBlood),_syncValues,_unit);
|
||||
if (_unit getvariable [QGVAR(hasLostBlood), 0] != 2) then {
|
||||
_unit setvariable [QGVAR(hasLostBlood), 2, true];
|
||||
};
|
||||
} else {
|
||||
TRACE_4("ACE_DEBUG", _bloodVolume,_unit getVariable QGVAR(hasLostBlood),_syncValues,_unit);
|
||||
if (_unit getvariable [QGVAR(hasLostBlood), 0] != 1) then {
|
||||
_unit setvariable [QGVAR(hasLostBlood), 1, true];
|
||||
};
|
||||
}
|
||||
} else {
|
||||
TRACE_4("ACE_DEBUG",_bloodVolume,_unit getVariable QGVAR(hasLostBlood),_syncValues,_unit);
|
||||
if (_unit getvariable [QGVAR(hasLostBlood), 0] != 0) then {
|
||||
_unit setvariable [QGVAR(hasLostBlood), 0, true];
|
||||
};
|
||||
};
|
||||
|
||||
TRACE_3("ACE_DEBUG",[_unit] call FUNC(getBloodLoss),_unit getVariable QGVAR(isBleeding),_unit);
|
||||
if (([_unit] call FUNC(getBloodLoss)) > 0) then {
|
||||
if !(_unit getvariable [QGVAR(isBleeding), false]) then {
|
||||
_unit setvariable [QGVAR(isBleeding), true, true];
|
||||
@ -58,6 +62,7 @@ if (([_unit] call FUNC(getBloodLoss)) > 0) then {
|
||||
};
|
||||
|
||||
_painStatus = _unit getvariable [QGVAR(pain), 0];
|
||||
TRACE_4("ACE_DEBUG",_painStatus,_unit getVariable QGVAR(hasPain),_unit getVariable QGVAR(painSuppress),_unit);
|
||||
if (_painStatus > (_unit getvariable [QGVAR(painSuppress), 0])) then {
|
||||
if !(_unit getvariable [QGVAR(hasPain), false]) then {
|
||||
_unit setvariable [QGVAR(hasPain), true, true];
|
||||
@ -69,6 +74,7 @@ if (_painStatus > (_unit getvariable [QGVAR(painSuppress), 0])) then {
|
||||
};
|
||||
|
||||
if (GVAR(level) == 1) then {
|
||||
TRACE_5("ACE_DEBUG_BASIC_VITALS",_painStatus,_unit getVariable QGVAR(hasPain),_unit getVariable QGVAR(morphine),_syncValues,_unit);
|
||||
// reduce pain
|
||||
if (_painStatus > 0) then {
|
||||
_unit setVariable [QGVAR(pain), (_painStatus - 0.001 * _interval) max 0, _syncValues];
|
||||
@ -91,6 +97,7 @@ if (GVAR(level) == 1) then {
|
||||
|
||||
// handle advanced medical, with vitals
|
||||
if (GVAR(level) >= 2) then {
|
||||
TRACE_6("ACE_DEBUG_ADVANCED_VITALS",_painStatus,_bloodVolume, _unit getVariable QGVAR(hasPain),_unit getVariable QGVAR(morphine),_syncValues,_unit);
|
||||
if (_bloodVolume < 30) exitwith {
|
||||
[_unit] call FUNC(setDead);
|
||||
};
|
||||
@ -105,7 +112,7 @@ if (GVAR(level) >= 2) then {
|
||||
|
||||
// Set the vitals
|
||||
_heartRate = (_unit getvariable [QGVAR(heartRate), 80]) + (([_unit] call FUNC(getHeartRateChange)) * _interval);
|
||||
_unit setvariable [QGVAR(heartRate), _heartRate, _syncValues];
|
||||
_unit setvariable [QGVAR(heartRate), _heartRate max 0, _syncValues];
|
||||
|
||||
_bloodPressure = [_unit] call FUNC(getBloodPressure);
|
||||
_unit setvariable [QGVAR(bloodPressure), _bloodPressure, _syncValues];
|
||||
@ -114,7 +121,7 @@ if (GVAR(level) >= 2) then {
|
||||
_painReduce = if (_painStatus > 5) then {0.002} else {0.001};
|
||||
_unit setVariable [QGVAR(pain), (_painStatus - _painReduce * _interval) max 0, _syncValues];
|
||||
};
|
||||
|
||||
TRACE_8("ACE_DEBUG_ADVANCED_VITALS",_painStatus,_painReduce,_heartRate,_bloodVolume,_bloodPressure,_interval,_syncValues,_unit);
|
||||
// TODO Disabled until implemented fully
|
||||
// Handle airway
|
||||
/*if (GVAR(setting_allowAirwayInjuries)) then {
|
||||
@ -140,8 +147,7 @@ if (GVAR(level) >= 2) then {
|
||||
|
||||
// Check vitals for medical status
|
||||
// TODO check for in revive state instead of variable
|
||||
_bloodPressureL = _bloodPressure select 0;
|
||||
_bloodPressureH = _bloodPressure select 1;
|
||||
_bloodPressure params ["_bloodPressureL", "_bloodPressureH"];
|
||||
|
||||
if (!(_unit getvariable [QGVAR(inCardiacArrest),false])) then {
|
||||
if (_heartRate < 10 || _bloodPressureH < 30 || _bloodVolume < 20) then {
|
||||
@ -174,12 +180,13 @@ if (GVAR(level) >= 2) then {
|
||||
|
||||
// syncing any remaining values
|
||||
if (_syncValues) then {
|
||||
TRACE_3("ACE_DEBUG_IVBAGS_SYNC",GVAR(IVBags),_syncValues,_unit);
|
||||
{
|
||||
private "_value";
|
||||
_value = _unit getvariable _x;
|
||||
if !(isnil "_value") then {
|
||||
_unit setvariable [_x,(_unit getvariable [_x, 0]), true];
|
||||
};
|
||||
}foreach GVAR(IVBags);
|
||||
} foreach GVAR(IVBags);
|
||||
};
|
||||
};
|
||||
|
@ -16,19 +16,17 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_medic", "_patient", "_item", "_return", "_crew"];
|
||||
_medic = _this select 0;
|
||||
_patient = _this select 1;
|
||||
_item = _this select 2;
|
||||
params ["_medic", "_patient", "_item"];
|
||||
|
||||
if (isnil QGVAR(setting_allowSharedEquipment)) then {
|
||||
GVAR(setting_allowSharedEquipment) = true;
|
||||
};
|
||||
if (GVAR(setting_allowSharedEquipment) && {[_patient, _item] call EFUNC(common,hasItem)}) exitwith {
|
||||
true;
|
||||
true
|
||||
};
|
||||
|
||||
if ([_medic, _item] call EFUNC(common,hasItem)) exitwith {
|
||||
true;
|
||||
true
|
||||
};
|
||||
|
||||
_return = false;
|
||||
@ -38,7 +36,7 @@ if ((vehicle _medic != _medic) && {[vehicle _medic] call FUNC(isMedicalVehicle)}
|
||||
if ([_medic, _x] call FUNC(canAccessMedicalEquipment) && {([_x, _item] call EFUNC(common,hasItem))}) exitwith {
|
||||
_return = true;
|
||||
};
|
||||
}foreach _crew;
|
||||
} foreach _crew;
|
||||
};
|
||||
|
||||
_return;
|
||||
_return
|
||||
|
@ -16,9 +16,7 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_medic", "_patient", "_items", "_return"];
|
||||
_medic = _this select 0;
|
||||
_patient = _this select 1;
|
||||
_items = _this select 2;
|
||||
params ["_medic", "_patient", "_items"];
|
||||
|
||||
_return = true;
|
||||
{
|
||||
@ -31,4 +29,4 @@ _return = true;
|
||||
};
|
||||
}foreach _items;
|
||||
|
||||
_return;
|
||||
_return
|
||||
|
@ -1,21 +1,27 @@
|
||||
/**
|
||||
* fn_hasMedicalEnabled.sqf
|
||||
* @Descr: Check if unit has CMS enabled.
|
||||
* @Author: Glowbal
|
||||
*
|
||||
* @Arguments: [unit OBJECT]
|
||||
* @Return: BOOL
|
||||
* @PublicAPI: true
|
||||
*/
|
||||
|
||||
/*
|
||||
* Author: Glowbal
|
||||
* Check if unit has CMS enabled
|
||||
*
|
||||
* Arguments:
|
||||
* 0: unit <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* enabled <BOOL>
|
||||
*
|
||||
* Example:
|
||||
* [Unit] call ace_medical_fnc_hasMedicalEnabled
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit", "_medicalEnabled"];
|
||||
_unit = _this select 0;
|
||||
private "_medicalEnabled";
|
||||
params ["_unit"];
|
||||
|
||||
_medicalEnabled = _unit getvariable QGVAR(enableMedical);
|
||||
if (isnil "_medicalEnabled") exitwith {
|
||||
(((GVAR(enableFor) == 0 && (isPlayer _unit || (_unit getvariable [QEGVAR(common,isDeadPlayer), false])))) || (GVAR(enableFor) == 1) || GVAR(level) == 1);
|
||||
(((GVAR(enableFor) == 0 && (isPlayer _unit || (_unit getvariable [QEGVAR(common,isDeadPlayer), false])))) || (GVAR(enableFor) == 1) || GVAR(level) == 1)
|
||||
};
|
||||
|
||||
_medicalEnabled;
|
||||
_medicalEnabled
|
||||
|
@ -14,8 +14,6 @@
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_target", "_selectionName"];
|
||||
_target = _this select 0;
|
||||
_selectionName = _this select 1;
|
||||
params ["_target", "_selectionName"];
|
||||
|
||||
(((_target getvariable [QGVAR(tourniquets), [0,0,0,0,0,0]]) select ([_selectionName] call FUNC(selectionNameToNumber))) > 0);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Author: KoffeinFlummi
|
||||
* Author: KoffeinFlummi, commy2
|
||||
* Initializes unit variables.
|
||||
*
|
||||
* Arguments:
|
||||
@ -10,17 +10,17 @@
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit", "_allUsedMedication", "_logs"];
|
||||
|
||||
_unit = _this select 0;
|
||||
params ["_unit"];
|
||||
|
||||
// basic
|
||||
_unit setVariable [QGVAR(pain), 0, true];
|
||||
_unit setVariable [QGVAR(morphine), 0, true];
|
||||
_unit setVariable [QGVAR(bloodVolume), 100, true];
|
||||
_unit setVariable ["ACE_isUnconscious", false, true];
|
||||
|
||||
// advanced
|
||||
// tourniquets
|
||||
_unit setvariable [QGVAR(tourniquets), [0,0,0,0,0,0], true];
|
||||
|
||||
@ -59,13 +59,14 @@ _unit setvariable [QGVAR(airwayCollapsed), false];
|
||||
// generic medical admin
|
||||
_unit setvariable [QGVAR(addedToUnitLoop), false, true];
|
||||
_unit setvariable [QGVAR(inCardiacArrest), false, true];
|
||||
_unit setVariable ["ACE_isUnconscious", false, true];
|
||||
_unit setvariable [QGVAR(hasLostBlood), 0, true];
|
||||
_unit setvariable [QGVAR(isBleeding), false, true];
|
||||
_unit setvariable [QGVAR(hasPain), false, true];
|
||||
_unit setvariable [QGVAR(amountOfReviveLives), GVAR(amountOfReviveLives), true];
|
||||
_unit setvariable [QGVAR(painSuppress), 0, true];
|
||||
|
||||
private ["_allUsedMedication", "_logs"];
|
||||
|
||||
// medication
|
||||
_allUsedMedication = _unit getVariable [QGVAR(allUsedMedication), []];
|
||||
{
|
||||
|
@ -15,7 +15,7 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
PARAMS_1(_target);
|
||||
params ["_target"];
|
||||
|
||||
private "_owner";
|
||||
|
||||
|
@ -15,7 +15,7 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
PARAMS_1(_target);
|
||||
params ["_target"];
|
||||
|
||||
private "_owner";
|
||||
|
||||
|
@ -13,8 +13,8 @@
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit","_eyePos","_objects","_isInBuilding","_medicalFacility"];
|
||||
_unit = _this select 0;
|
||||
private ["_eyePos", "_objects", "_isInBuilding", "_medicalFacility"];
|
||||
params ["_unit"];
|
||||
|
||||
_eyePos = eyePos _unit;
|
||||
_isInBuilding = false;
|
||||
@ -42,13 +42,13 @@ _objects = (lineIntersectsWith [_unit modelToWorldVisual [0, 0, (_eyePos select
|
||||
if (((typeOf _x) in _medicalFacility) || (_x getVariable [QGVAR(isMedicalFacility),false])) exitwith {
|
||||
_isInBuilding = true;
|
||||
};
|
||||
}foreach _objects;
|
||||
} foreach _objects;
|
||||
if (!_isInBuilding) then {
|
||||
_objects = position _unit nearObjects 7.5;
|
||||
{
|
||||
if (((typeOf _x) in _medicalFacility) || (_x getVariable [QGVAR(isMedicalFacility),false])) exitwith {
|
||||
_isInBuilding = true;
|
||||
};
|
||||
}foreach _objects;
|
||||
} foreach _objects;
|
||||
};
|
||||
_isInBuilding;
|
||||
|
@ -13,9 +13,8 @@
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit", "_vehicle"];
|
||||
|
||||
_unit = _this select 0;
|
||||
private ["_vehicle"];
|
||||
params ["_unit"];
|
||||
_vehicle = vehicle _unit;
|
||||
|
||||
if (_unit == _vehicle) exitWith {false};
|
||||
|
@ -13,8 +13,8 @@
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit"];
|
||||
_unit = _this select 0;
|
||||
private ["_openWounds", "_openWounds"];
|
||||
params ["_unit"];
|
||||
|
||||
if (GVAR(level) <= 1) exitwith {
|
||||
([_unit] call FUNC(getBloodloss)) == 0;
|
||||
@ -25,6 +25,6 @@ _openWounds = _unit getvariable [QGVAR(openWounds), []];
|
||||
{
|
||||
// total bleeding ratio * percentage of injury left
|
||||
_totalBloodLoss = _totalBloodLoss + ((_x select 4) * (_x select 3));
|
||||
}foreach _openWounds;
|
||||
} foreach _openWounds;
|
||||
|
||||
(_totalBloodLoss == 0);
|
||||
|
@ -4,7 +4,7 @@
|
||||
*
|
||||
* Arguments:
|
||||
* 0: The Unit <OBJECT>
|
||||
* 1: Class <NUMBER> <OPTIONAL>
|
||||
* 1: Class <NUMBER> (default: 1)
|
||||
*
|
||||
* ReturnValue:
|
||||
* Is in of medic class <BOOL>
|
||||
@ -15,8 +15,7 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit", "_class", "_medicN"];
|
||||
_unit = _this select 0;
|
||||
_medicN = if (count _this > 1) then {_this select 1} else {1};
|
||||
params ["_unit", ["_medicN", 1]];
|
||||
|
||||
_class = _unit getVariable [QGVAR(medicClass),
|
||||
getNumber (configFile >> "CfgVehicles" >> typeOf _unit >> "attendant")];
|
||||
|
@ -12,7 +12,6 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_vehicle"];
|
||||
_vehicle = _this select 0;
|
||||
params ["_vehicle"];
|
||||
|
||||
(_vehicle getVariable [QGVAR(medicClass), getNumber (configFile >> "CfgVehicles" >> typeOf _vehicle >> "attendant")]) > 0
|
||||
|
@ -6,15 +6,14 @@
|
||||
* 0: The unit <OBJECT>
|
||||
*
|
||||
* ReturnValue:
|
||||
* nil
|
||||
* None
|
||||
*
|
||||
* Public: Yes
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit"];
|
||||
_unit = _this select 0;
|
||||
params ["_unit"];
|
||||
|
||||
while {({_x == "FirstAidKit"} count items _unit) > 0} do {
|
||||
_unit removeItem "FirstAidKit";
|
||||
|
@ -10,17 +10,18 @@
|
||||
* 3: The action to modify <OBJECT>
|
||||
*
|
||||
* ReturnValue:
|
||||
* nil
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
EXPLODE_4_PVT(_this,_target,_player,_selectionN,_actionData);
|
||||
params ["_target", "_player", "_selectionN", "_actionData"];
|
||||
|
||||
if (GVAR(level) < 2) exitwith {
|
||||
private ["_pointDamage"];
|
||||
_pointDamage = _target getHitPointDamage (["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"] select _selectionN);
|
||||
_pointDamage = (_target getvariable [QGVAR(bodyPartStatus), [0,0,0,0,0,0]]) select _selectionN;
|
||||
|
||||
if (_pointDamage >= 0.8) exitWith {
|
||||
_actionData set [2, QUOTE(PATHTOF(UI\icons\medical_crossRed.paa))];
|
||||
@ -33,8 +34,8 @@ if (GVAR(level) < 2) exitwith {
|
||||
private ["_openWounds", "_amountOf"];
|
||||
_openWounds = _target getvariable [QGVAR(openWounds), []];
|
||||
{
|
||||
_amountOf = _x select 3;
|
||||
if (_amountOf > 0 && {(_selectionN == (_x select 2))} && {(_x select 4) > 0}) exitwith {
|
||||
_x params ["", "", "_selectionX", "_amountOf", "_x4"];
|
||||
if (_amountOf > 0 && {(_selectionN == _selectionX)} && {_x4 > 0}) exitwith {
|
||||
_actionData set [2, QUOTE(PATHTOF(UI\icons\medical_crossRed.paa))];
|
||||
};
|
||||
} foreach _openWounds;
|
||||
|
@ -8,17 +8,14 @@
|
||||
* 2: activated <BOOL>
|
||||
*
|
||||
* Return Value:
|
||||
* None <NIL>
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_logic", "_units", "_activated"];
|
||||
_logic = _this select 0;
|
||||
_units = _this select 1;
|
||||
_activated = _this select 2;
|
||||
params ["_logic", "_units", "_activated"];
|
||||
|
||||
if !(_activated) exitWith {};
|
||||
|
||||
|
@ -8,15 +8,15 @@
|
||||
* 2: activated <BOOL>
|
||||
*
|
||||
* Return Value:
|
||||
* None <NIL>
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_logic","_setting","_objects", "_list", "_splittedList", "_nilCheckPassedList", "_parsedList"];
|
||||
_logic = [_this,0,objNull,[objNull]] call BIS_fnc_param;
|
||||
private ["_setting", "_objects", "_list", "_splittedList", "_nilCheckPassedList", "_parsedList"];
|
||||
params [["_logic", objNull, [objNull]]];
|
||||
|
||||
if (!isNull _logic) then {
|
||||
_list = _logic getvariable ["EnableList",""];
|
||||
@ -32,7 +32,7 @@ if (!isNull _logic) then {
|
||||
_nilCheckPassedList = _nilCheckPassedList + ","+ _x;
|
||||
};
|
||||
};
|
||||
}foreach _splittedList;
|
||||
} foreach _splittedList;
|
||||
|
||||
_list = "[" + _nilCheckPassedList + "]";
|
||||
_parsedList = [] call compile _list;
|
||||
@ -47,7 +47,7 @@ if (!isNull _logic) then {
|
||||
};
|
||||
};
|
||||
};
|
||||
}foreach _objects;
|
||||
} foreach _objects;
|
||||
};
|
||||
{
|
||||
if (!isnil "_x") then {
|
||||
@ -57,7 +57,5 @@ if (!isNull _logic) then {
|
||||
};
|
||||
};
|
||||
};
|
||||
}foreach _parsedList;
|
||||
} foreach _parsedList;
|
||||
};
|
||||
|
||||
true
|
@ -8,15 +8,15 @@
|
||||
* 2: activated <BOOL>
|
||||
*
|
||||
* Return Value:
|
||||
* None <NIL>
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_logic","_setting","_objects"];
|
||||
_logic = [_this,0,objNull,[objNull]] call BIS_fnc_param;
|
||||
private ["_setting", "_objects"];
|
||||
params [["_logic", objNull, [objNull]]];
|
||||
if (!isNull _logic) then {
|
||||
_setting = _logic getvariable ["class",0];
|
||||
_objects = synchronizedObjects _logic;
|
||||
@ -24,7 +24,7 @@ if (!isNull _logic) then {
|
||||
if (local _x) then {
|
||||
_x setvariable[QGVAR(isMedicalFacility), true, true];
|
||||
};
|
||||
}foreach _objects;
|
||||
} foreach _objects;
|
||||
};
|
||||
|
||||
true;
|
||||
|
@ -8,7 +8,7 @@
|
||||
* 2: activated <BOOL>
|
||||
*
|
||||
* Return Value:
|
||||
* None <NIL>
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
@ -16,8 +16,8 @@
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_logic","_setting","_objects", "_list", "_splittedList", "_nilCheckPassedList", "_parsedList"];
|
||||
_logic = [_this,0,objNull,[objNull]] call BIS_fnc_param;
|
||||
private ["_setting", "_objects", "_list", "_splittedList", "_nilCheckPassedList", "_parsedList"];
|
||||
params [["_logic", objNull, [objNull]]];
|
||||
|
||||
if (!isNull _logic) then {
|
||||
_list = _logic getvariable ["EnableList",""];
|
||||
@ -33,7 +33,7 @@ if (!isNull _logic) then {
|
||||
_nilCheckPassedList = _nilCheckPassedList + ","+ _x;
|
||||
};
|
||||
};
|
||||
}foreach _splittedList;
|
||||
} foreach _splittedList;
|
||||
|
||||
_list = "[" + _nilCheckPassedList + "]";
|
||||
_parsedList = [] call compile _list;
|
||||
@ -48,7 +48,7 @@ if (!isNull _logic) then {
|
||||
};
|
||||
};
|
||||
};
|
||||
}foreach _objects;
|
||||
} foreach _objects;
|
||||
};
|
||||
{
|
||||
if (!isnil "_x") then {
|
||||
@ -58,7 +58,5 @@ if (!isNull _logic) then {
|
||||
};
|
||||
};
|
||||
};
|
||||
}foreach _parsedList;
|
||||
} foreach _parsedList;
|
||||
};
|
||||
|
||||
true;
|
||||
|
@ -8,17 +8,14 @@
|
||||
* 2: activated <BOOL>
|
||||
*
|
||||
* Return Value:
|
||||
* None <NIL>
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_logic", "_units", "_activated"];
|
||||
_logic = _this select 0;
|
||||
_units = _this select 1;
|
||||
_activated = _this select 2;
|
||||
params ["_logic", "_units", "_activated"];
|
||||
|
||||
if !(_activated) exitWith {};
|
||||
|
||||
|
@ -8,17 +8,14 @@
|
||||
* 2: activated <BOOL>
|
||||
*
|
||||
* Return Value:
|
||||
* None <NIL>
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_logic", "_units", "_activated"];
|
||||
_logic = _this select 0;
|
||||
_units = _this select 1;
|
||||
_activated = _this select 2;
|
||||
params ["_logic", "_units", "_activated"];
|
||||
|
||||
if !(_activated) exitWith {};
|
||||
|
||||
|
@ -11,28 +11,21 @@
|
||||
* 5: Incompatable medication <ARRAY<STRING>>
|
||||
*
|
||||
* Return Value:
|
||||
* NONE
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_target", "_className", "_variable", "_maxDosage", "_timeInSystem", "_incompatabileMeds", "_foundEntry", "_allUsedMedication","_allMedsFromClassname", "_usedMeds", "_hasOverDosed", "_med", "_limit", "_classNamesUsed", "_decreaseAmount", "_viscosityChange", "_viscosityAdjustment", "_medicationConfig", "_onOverDose", "_painReduce"];
|
||||
_target = _this select 0;
|
||||
_className = _this select 1;
|
||||
_variable = _this select 2;
|
||||
_maxDosage = _this select 3;
|
||||
_timeInSystem = _this select 4;
|
||||
_incompatabileMeds = _this select 5;
|
||||
_viscosityChange = _this select 6;
|
||||
_painReduce = _this select 7;
|
||||
private ["_foundEntry", "_allUsedMedication","_allMedsFromClassname", "_usedMeds", "_hasOverDosed", "_med", "_limit", "_decreaseAmount", "_viscosityAdjustment", "_medicationConfig", "_onOverDose"];
|
||||
params ["_target", "_className", "_variable", "_maxDosage", "_timeInSystem", "_incompatabileMeds", "_viscosityChange", "_painReduce"];
|
||||
|
||||
_foundEntry = false;
|
||||
_allUsedMedication = _target getvariable [QGVAR(allUsedMedication), []];
|
||||
{
|
||||
if (_x select 0 == _variable) exitwith {
|
||||
_allMedsFromClassname = _x select 1;
|
||||
_x params ["_variableX", "_allMedsFromClassname"];
|
||||
if (_variableX== _variable) exitwith {
|
||||
if !(_className in _allMedsFromClassname) then {
|
||||
_allMedsFromClassname pushback _className;
|
||||
_x set [1, _allMedsFromClassname];
|
||||
@ -56,15 +49,14 @@ if (_usedMeds >= floor (_maxDosage + round(random(2))) && _maxDosage >= 1 && GVA
|
||||
|
||||
_hasOverDosed = 0;
|
||||
{
|
||||
_med = _x select 0;
|
||||
_limit = _x select 1;
|
||||
_x params ["_med", "_limit"];
|
||||
{
|
||||
_classNamesUsed = _x select 1;
|
||||
_x params ["", "_classNamesUsed"];
|
||||
if ({_x == _med} count _classNamesUsed > _limit) then {
|
||||
_hasOverDosed = _hasOverDosed + 1;
|
||||
};
|
||||
}foreach _allUsedMedication;
|
||||
}foreach _incompatabileMeds;
|
||||
} foreach _allUsedMedication;
|
||||
} foreach _incompatabileMeds;
|
||||
|
||||
if (_hasOverDosed > 0 && GVAR(enableOverdosing)) then {
|
||||
_medicationConfig = (configFile >> "ACE_Medical_Advanced" >> "Treatment" >> "Medication");
|
||||
@ -85,16 +77,9 @@ _decreaseAmount = 1 / _timeInSystem;
|
||||
_viscosityAdjustment = _viscosityChange / _timeInSystem;
|
||||
|
||||
[{
|
||||
private ["_args", "_target", "_timeInSystem", "_variable", "_amountDecreased","_decreaseAmount", "_usedMeds", "_viscosityAdjustment", "_painReduce"];
|
||||
_args = _this select 0;
|
||||
_target = _args select 0;
|
||||
_timeInSystem = _args select 1;
|
||||
_variable = _args select 2;
|
||||
_amountDecreased = _args select 3;
|
||||
_decreaseAmount = _args select 4;
|
||||
_viscosityAdjustment = _args select 5;
|
||||
_painReduce = _args select 6;
|
||||
|
||||
params ["_args", "_idPFH"];
|
||||
_args params ["_target", "_timeInSystem", "_variable", "_amountDecreased","_decreaseAmount", "_viscosityAdjustment", "_painReduce"];
|
||||
private "_usedMeds";
|
||||
_usedMeds = _target getvariable [_variable, 0];
|
||||
_usedMeds = _usedMeds - _decreaseAmount;
|
||||
_target setvariable [_variable, _usedMeds];
|
||||
@ -106,7 +91,7 @@ _viscosityAdjustment = _viscosityChange / _timeInSystem;
|
||||
_target setvariable [QGVAR(painSuppress), ((_target getvariable [QGVAR(painSuppress), 0]) - _painReduce) max 0];
|
||||
|
||||
if (_amountDecreased >= 1 || (_usedMeds <= 0) || !alive _target) then {
|
||||
[(_this select 1)] call cba_fnc_removePerFrameHandler;
|
||||
[_idPFH] call CBA_fnc_removePerFrameHandler;
|
||||
};
|
||||
_args set [3, _amountDecreased];
|
||||
}, 1, [_target, _timeInSystem, _variable, 0, _decreaseAmount, _viscosityAdjustment, _painReduce / _timeInSystem] ] call CBA_fnc_addPerFrameHandler;
|
||||
|
@ -7,7 +7,7 @@
|
||||
* 1: injury <ARRAY>
|
||||
*
|
||||
* Return Value:
|
||||
* None <NIL>
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
@ -15,8 +15,7 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit", "_injury", "_openWounds", "_injuryID", "_exists"];
|
||||
_unit = _this select 0;
|
||||
_injury = _this select 1;
|
||||
params ["_unit", "_injury"];
|
||||
|
||||
if (!local _unit) then {
|
||||
_openWounds = _unit getvariable[QGVAR(openWounds), []];
|
||||
@ -28,7 +27,7 @@ if (!local _unit) then {
|
||||
_exists = true;
|
||||
_openWounds set [_foreachIndex, _injury];
|
||||
};
|
||||
}foreach _openWounds;
|
||||
} foreach _openWounds;
|
||||
|
||||
if (!_exists) then {
|
||||
_openWounds pushback _injury;
|
||||
|
@ -7,19 +7,18 @@
|
||||
* 1: Origin object <OBJECT>
|
||||
*
|
||||
* ReturnValue:
|
||||
* <NIL>
|
||||
* None
|
||||
*
|
||||
* Public: Yes
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
private ["_unit", "_openWounds", "_originOfrequest"];
|
||||
_unit = _this select 0;
|
||||
_originOfrequest = _this select 1;
|
||||
params ["_unit", "_originOfrequest"];
|
||||
|
||||
if (local _unit && !(local _originOfrequest)) then {
|
||||
_openWounds = _unit getvariable [QGVAR(openWounds), []];
|
||||
{
|
||||
["medical_propagateWound", [_originOfrequest], [_unit, _x]] call EFUNC(common,targetEvent);
|
||||
}foreach _openWounds;
|
||||
} foreach _openWounds;
|
||||
};
|
||||
|
@ -3,13 +3,12 @@
|
||||
* Parse the ACE_Medical_Advanced config for all injury types.
|
||||
*
|
||||
* Arguments:
|
||||
*
|
||||
* None
|
||||
* ReturnValue:
|
||||
* <NIL>
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_injuriesRootConfig", "_woundsConfig", "_allWoundClasses", "_amountOf", "_entry","_classType", "_selections", "_bloodLoss", "_pain","_minDamage","_causes", "_damageTypesConfig", "_thresholds", "_typeThresholds", "_selectionSpecific", "_selectionSpecificType", "_classDisplayName", "_subClassDisplayName", "_maxDamage", "_subClassmaxDamage", "_defaultMinLethalDamage", "_minLethalDamage", "_allFoundDamageTypes", "_classID", "_configDamageTypes", "_i", "_parseForSubClassWounds", "_subClass", "_subClassConfig", "_subClassbloodLoss", "_subClasscauses", "_subClassminDamage", "_subClasspain", "_subClassselections", "_subClasstype", "_type", "_varName", "_woundTypes"];
|
||||
@ -110,7 +109,7 @@ _selectionSpecific = getNumber(_damageTypesConfig >> "selectionSpecific");
|
||||
if (_type in (_x select 5)) then {
|
||||
_woundTypes pushback _x;
|
||||
};
|
||||
}foreach _allWoundClasses;
|
||||
} foreach _allWoundClasses;
|
||||
_typeThresholds = _thresholds;
|
||||
_selectionSpecificType = _selectionSpecific;
|
||||
if (isClass(_damageTypesConfig >> _x)) then {
|
||||
@ -130,11 +129,11 @@ _selectionSpecific = getNumber(_damageTypesConfig >> "selectionSpecific");
|
||||
_minDamageThresholds = _minDamageThresholds + ":";
|
||||
_amountThresholds = _amountThresholds + ":";
|
||||
};
|
||||
}foreach _typeThresholds;
|
||||
} foreach _typeThresholds;
|
||||
|
||||
"ace_medical" callExtension format ["addDamageType,%1,%2,%3,%4,%5", _type, GVAR(minLethalDamages) select _foreachIndex, _minDamageThresholds, _amountThresholds, _selectionSpecificType];
|
||||
|
||||
}foreach _allFoundDamageTypes;
|
||||
} foreach _allFoundDamageTypes;
|
||||
|
||||
|
||||
// Extension loading
|
||||
@ -142,34 +141,30 @@ _selectionSpecific = getNumber(_damageTypesConfig >> "selectionSpecific");
|
||||
{
|
||||
private ["_classID", "_className", "_allowedSelections", "_bloodLoss", "_pain", "_minDamage", "_maxDamage", "_causes", "_classDisplayName", "_extensionInput", "_selections", "_causesArray"];
|
||||
// add shit to addInjuryType
|
||||
_classID = _x select 0;
|
||||
_x params ["_classID", "_selections", "_bloodLoss", "_pain", "_damage", "_causesArray", "_classDisplayName"];
|
||||
_damage params ["_minDamage", "_maxDamage"];
|
||||
_className = GVAR(woundClassNames) select _forEachIndex;
|
||||
_allowedSelections = "";
|
||||
|
||||
_selections = _x select 1;
|
||||
{
|
||||
_allowedSelections = _allowedSelections + _x;
|
||||
if (_forEachIndex < (count _selections) - 1) then {
|
||||
_allowedSelections = _allowedSelections + ":";
|
||||
};
|
||||
}foreach _selections;
|
||||
} foreach _selections;
|
||||
|
||||
_bloodLoss = _x select 2;
|
||||
_pain = _x select 3;
|
||||
_minDamage = (_x select 4) select 0;
|
||||
_maxDamage = (_x select 4) select 1;
|
||||
_causes = "";
|
||||
_causesArray = (_x select 5);
|
||||
|
||||
{
|
||||
_causes = _causes + _x;
|
||||
if (_forEachIndex < (count _causesArray) - 1) then {
|
||||
_causes = _causes + ":";
|
||||
};
|
||||
}foreach _causesArray;
|
||||
} foreach _causesArray;
|
||||
_classDisplayName = _x select 6;
|
||||
|
||||
"ace_medical" callExtension format["addInjuryType,%1,%2,%3,%4,%5,%6,%7,%8,%9", _classID, _className, _allowedSelections, _bloodLoss, _pain, _minDamage, _maxDamage, _causes, _classDisplayName];
|
||||
|
||||
}foreach _allWoundClasses;
|
||||
} foreach _allWoundClasses;
|
||||
|
||||
"ace_medical" callExtension "ConfigComplete";
|
||||
|
@ -6,9 +6,10 @@
|
||||
*
|
||||
* Arguments:
|
||||
* 0: The Unit <OBJECT>
|
||||
* 1: Amount of Pain <NUMBER>
|
||||
*
|
||||
* ReturnValue:
|
||||
* <NIL>
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
@ -16,8 +17,7 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit","_availableSounds_A","_availableSounds_B","_availableSounds_C","_sound", "_pain"];
|
||||
_unit = _this select 0;
|
||||
_pain = _this select 1;
|
||||
params ["_unit", "_pain"];
|
||||
if (!local _unit || !GVAR(enableScreams)) exitwith{};
|
||||
|
||||
// Lock if the unit is already playing a sound.
|
||||
|
@ -7,16 +7,14 @@
|
||||
* 1: object belonging to the caller <OBJECT>
|
||||
*
|
||||
* ReturnValue:
|
||||
* <NIL>
|
||||
* None
|
||||
*
|
||||
* Public: Yes
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private [ "_target", "_caller"];
|
||||
_target = _this select 0;
|
||||
_caller = _this select 1;
|
||||
params [ "_target", "_caller"];
|
||||
|
||||
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 {};
|
||||
|
@ -7,15 +7,15 @@
|
||||
* 0: The unit that will be put in cardiac arrest state <OBJECT>
|
||||
*
|
||||
* ReturnValue:
|
||||
* <NIL>
|
||||
* None
|
||||
*
|
||||
* Public: yes
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit", "_timeInCardiacArrest"];
|
||||
_unit = _this select 0;
|
||||
private "_timeInCardiacArrest";
|
||||
params ["_unit"];
|
||||
|
||||
if (_unit getvariable [QGVAR(inCardiacArrest),false]) exitwith {};
|
||||
_unit setvariable [QGVAR(inCardiacArrest), true,true];
|
||||
@ -28,20 +28,17 @@ _timeInCardiacArrest = 120 + round(random(600));
|
||||
|
||||
[{
|
||||
private ["_args","_unit","_startTime","_timeInCardiacArrest","_heartRate"];
|
||||
_args = _this select 0;
|
||||
_unit = _args select 0;
|
||||
_startTime = _args select 1;
|
||||
_timeInCardiacArrest = _args select 2;
|
||||
params ["_args", "_idPFH"];
|
||||
_args params ["_unit", "_startTime", "_timeInCardiacArrest"];
|
||||
|
||||
_heartRate = _unit getvariable [QGVAR(heartRate), 80];
|
||||
if (_heartRate > 0 || !alive _unit) exitwith {
|
||||
[(_this select 1)] call cba_fnc_removePerFrameHandler;
|
||||
[_idPFH] call CBA_fnc_removePerFrameHandler;
|
||||
_unit setvariable [QGVAR(inCardiacArrest), nil,true];
|
||||
};
|
||||
if (ACE_time - _startTime >= _timeInCardiacArrest) exitwith {
|
||||
[(_this select 1)] call cba_fnc_removePerFrameHandler;
|
||||
[_idPFH] call CBA_fnc_removePerFrameHandler;
|
||||
_unit setvariable [QGVAR(inCardiacArrest), nil,true];
|
||||
[_unit] call FUNC(setDead);
|
||||
};
|
||||
}, 1, [_unit, ACE_time, _timeInCardiacArrest] ] call CBA_fnc_addPerFrameHandler;
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
* 0: The unit that will be killed <OBJECT>
|
||||
*
|
||||
* ReturnValue:
|
||||
* <NIL>
|
||||
* None
|
||||
*
|
||||
* Public: yes
|
||||
*/
|
||||
@ -14,11 +14,7 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit", "_force", "_reviveVal", "_lifesLeft"];
|
||||
_unit = _this select 0;
|
||||
_force = false;
|
||||
if (count _this >= 2) then {
|
||||
_force = _this select 1;
|
||||
};
|
||||
params ["_unit", ["_force", false]];
|
||||
|
||||
if (!alive _unit) exitwith{true};
|
||||
if (!local _unit) exitwith {
|
||||
@ -44,13 +40,13 @@ if (((_reviveVal == 1 && {[_unit] call EFUNC(common,isPlayer)} || _reviveVal ==
|
||||
[_unit, true] call FUNC(setUnconscious);
|
||||
|
||||
[{
|
||||
private ["_args","_unit","_startTime"];
|
||||
_args = _this select 0;
|
||||
_unit = _args select 0;
|
||||
private "_startTime";
|
||||
params ["_args", "_idPFH"];
|
||||
_args params ["_unit"];
|
||||
_startTime = _unit getvariable [QGVAR(reviveStartTime), 0];
|
||||
|
||||
if (GVAR(maxReviveTime) > 0 && {ACE_time - _startTime > GVAR(maxReviveTime)}) exitwith {
|
||||
[(_this select 1)] call cba_fnc_removePerFrameHandler;
|
||||
[_idPFH] call CBA_fnc_removePerFrameHandler;
|
||||
_unit setvariable [QGVAR(inReviveState), nil, true];
|
||||
_unit setvariable [QGVAR(reviveStartTime), nil];
|
||||
[_unit, true] call FUNC(setDead);
|
||||
@ -64,7 +60,7 @@ if (((_reviveVal == 1 && {[_unit] call EFUNC(common,isPlayer)} || _reviveVal ==
|
||||
};
|
||||
|
||||
_unit setvariable [QGVAR(reviveStartTime), nil];
|
||||
[(_this select 1)] call cba_fnc_removePerFrameHandler;
|
||||
[_idPFH] call CBA_fnc_removePerFrameHandler;
|
||||
};
|
||||
if (GVAR(level) >= 2) then {
|
||||
if (_unit getvariable [QGVAR(heartRate), 60] > 0) then {
|
||||
|
@ -7,10 +7,10 @@
|
||||
* 0: Unit <OBJECT>
|
||||
* 1: HitPoint <STRING>
|
||||
* 2: Damage <NUMBER>
|
||||
* 3: Disable overall damage adjustment (optional) <BOOL>
|
||||
* 3: Disable overall damage adjustment <BOOL> (default: false)
|
||||
*
|
||||
* Return Value:
|
||||
* nil
|
||||
* None
|
||||
*
|
||||
* Public: Yes
|
||||
*/
|
||||
@ -22,10 +22,7 @@
|
||||
#define ARMDAMAGETRESHOLD2 1.7
|
||||
|
||||
private ["_unit", "_selection", "_damage", "_selections", "_damages", "_damageOld", "_damageSumOld", "_damageNew", "_damageSumNew", "_damageFinal", "_armdamage", "_legdamage"];
|
||||
|
||||
_unit = _this select 0;
|
||||
_selection = _this select 1;
|
||||
_damage = _this select 2;
|
||||
params ["_unit", "_selection", "_damage", ["_disabled", false]];
|
||||
|
||||
// Unit isn't local, give function to machine where it is.
|
||||
if !(local _unit) exitWith {
|
||||
@ -33,7 +30,7 @@ if !(local _unit) exitWith {
|
||||
};
|
||||
|
||||
// Check if overall damage adjustment is disabled
|
||||
if (count _this > 3 && {_this select 3}) exitWith {
|
||||
if (_disabled) exitWith {
|
||||
_unit setHitPointDamage [_selection, _damage];
|
||||
};
|
||||
|
||||
|
@ -4,9 +4,9 @@
|
||||
*
|
||||
* Arguments:
|
||||
* 0: The unit that will be put in an unconscious state <OBJECT>
|
||||
* 1: Set unconsciouns <BOOL> <OPTIONAL>
|
||||
* 2: Minimum unconscious ACE_time <NUMBER> <OPTIONAL>
|
||||
* 3: Force AI Unconscious (skip random death chance) <BOOL> <OPTIONAL>
|
||||
* 1: Set unconsciouns <BOOL> (default: true)
|
||||
* 2: Minimum unconscious ACE_time <NUMBER> (default: (round(random(10)+5)))
|
||||
* 3: Force AI Unconscious (skip random death chance) <BOOL> (default: false)
|
||||
*
|
||||
* ReturnValue:
|
||||
* nil
|
||||
@ -19,13 +19,10 @@
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
#define DEFAULT_DELAY (round(random(10)+5))
|
||||
#define DEFAULT_DELAY (round(random(10)+5))
|
||||
|
||||
private ["_unit", "_set", "_animState", "_originalPos", "_startingTime","_minWaitingTime", "_force", "_isDead"];
|
||||
_unit = _this select 0;
|
||||
_set = if (count _this > 1) then {_this select 1} else {true};
|
||||
_minWaitingTime = if (count _this > 2) then {_this select 2} else {DEFAULT_DELAY};
|
||||
_force = if (count _this > 3) then {_this select 3} else {false};
|
||||
private ["_animState", "_originalPos", "_startingTime", "_isDead"];
|
||||
params ["_unit", ["_set", true], ["_minWaitingTime", DEFAULT_DELAY], ["_force", false]];
|
||||
|
||||
// No change, fuck off. (why is there no xor?)
|
||||
if (_set isEqualTo (_unit getVariable ["ACE_isUnconscious", false])) exitWith {};
|
||||
@ -97,8 +94,7 @@ if (GVAR(moveUnitsFromGroupOnUnconscious)) then {
|
||||
_anim = [_unit] call EFUNC(common,getDeathAnim);
|
||||
[_unit, _anim, 1, true] call EFUNC(common,doAnimation);
|
||||
[{
|
||||
_unit = _this select 0;
|
||||
_anim = _this select 1;
|
||||
params ["_unit", "_anim"];
|
||||
if ((_unit getVariable "ACE_isUnconscious") and (animationState _unit != _anim)) then {
|
||||
[_unit, _anim, 2, true] call EFUNC(common,doAnimation);
|
||||
};
|
||||
|
@ -16,11 +16,8 @@
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_caller", "_target", "_selectionName", "_className", "_config", "_medicRequired", "_items", "_locations", "_return", "_callbackProgress", "_treatmentTime", "_callerAnim", "_patientAnim", "_iconDisplayed", "_return", "_usersOfItems", "_consumeItems", "_condition", "_displayText", "_wpn", "_treatmentTimeConfig", "_patientStateCondition", "_allowedSelections"];
|
||||
_caller = _this select 0;
|
||||
_target = _this select 1;
|
||||
_selectionName = _this select 2;
|
||||
_className = _this select 3;
|
||||
private ["_config", "_medicRequired", "_items", "_locations", "_return", "_callbackProgress", "_treatmentTime", "_callerAnim", "_patientAnim", "_iconDisplayed", "_return", "_usersOfItems", "_consumeItems", "_condition", "_displayText", "_wpn", "_treatmentTimeConfig", "_patientStateCondition", "_allowedSelections"];
|
||||
params ["_caller", "_target", "_selectionName", "_className"];
|
||||
|
||||
// If the cursorMenu is open, the loading bar will fail. If we execute the function one frame later, it will work fine
|
||||
if (uiNamespace getVariable [QEGVAR(interact_menu,cursorMenuOpened),false]) exitwith {
|
||||
@ -37,6 +34,9 @@ if (GVAR(level) >= 2) then {
|
||||
};
|
||||
if !(isClass _config) exitwith {false};
|
||||
|
||||
// Allow self treatment check
|
||||
if (_caller == _target && {getNumber (_config >> "allowSelfTreatment") == 0}) exitwith {false};
|
||||
|
||||
_medicRequired = if (isNumber (_config >> "requiredMedic")) then {
|
||||
getNumber (_config >> "requiredMedic");
|
||||
} else {
|
||||
@ -107,7 +107,7 @@ if ("All" in _locations) then {
|
||||
};
|
||||
};
|
||||
};
|
||||
}foreach _locations;
|
||||
} foreach _locations;
|
||||
};
|
||||
|
||||
if !(_return) exitwith {false};
|
||||
@ -180,7 +180,7 @@ if (vehicle _caller == _caller && {_callerAnim != ""}) then {
|
||||
TRACE_1("Weapon Deployed, breaking out first",(stance _caller));
|
||||
[_caller, "", 0] call EFUNC(common,doAnimation);
|
||||
};
|
||||
|
||||
|
||||
if ((stance _caller) == "STAND") then {
|
||||
switch (_wpn) do {//If standing, end in a crouched animation based on their current weapon
|
||||
case ("rfl"): {_caller setvariable [QGVAR(treatmentPrevAnimCaller), "AmovPknlMstpSrasWrflDnon"];};
|
||||
|
@ -16,12 +16,7 @@
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_caller", "_target", "_selectionName", "_className", "_items"];
|
||||
_caller = _this select 0;
|
||||
_target = _this select 1;
|
||||
_selectionName = _this select 2;
|
||||
_className = _this select 3;
|
||||
_items = _this select 4;
|
||||
params ["_caller", "_target", "_selectionName", "_className", "_items"];
|
||||
|
||||
if (alive _target && {(_target getvariable [QGVAR(inCardiacArrest), false] || _target getvariable [QGVAR(inReviveState), false])}) then {
|
||||
[[_caller, _target], QUOTE(DFUNC(treatmentAdvanced_CPRLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */
|
||||
|
@ -14,9 +14,8 @@
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_caller","_target", "_reviveStartTime"];
|
||||
_caller = _this select 0;
|
||||
_target = _this select 1;
|
||||
private "_reviveStartTime";
|
||||
param ["_caller","_target"];
|
||||
|
||||
if (_target getvariable [QGVAR(inReviveState), false]) then {
|
||||
_reviveStartTime = _target getvariable [QGVAR(reviveStartTime),0];
|
||||
@ -25,7 +24,7 @@ if (_target getvariable [QGVAR(inReviveState), false]) then {
|
||||
};
|
||||
};
|
||||
|
||||
if ((random 1) >= 0.6) then {
|
||||
if (GVAR(level) > 1 && {(random 1) >= 0.6}) then {
|
||||
_target setvariable [QGVAR(inCardiacArrest), nil,true];
|
||||
_target setvariable [QGVAR(heartRate), 40];
|
||||
_target setvariable [QGVAR(bloodPressure), [50,70]];
|
||||
|
@ -7,7 +7,8 @@
|
||||
* 1: The patient <OBJECT>
|
||||
* 2: SelectionName <STRING>
|
||||
* 3: Treatment classname <STRING>
|
||||
*
|
||||
* 4: Item <STRING>
|
||||
* 5: specific Spot <NUMBER> (default: -1)
|
||||
*
|
||||
* Return Value:
|
||||
* Succesful treatment started <BOOL>
|
||||
@ -16,15 +17,7 @@
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_caller", "_target", "_selectionName", "_className", "_items", "_specificSpot"];
|
||||
_caller = _this select 0;
|
||||
_target = _this select 1;
|
||||
_selectionName = _this select 2;
|
||||
_className = _this select 3;
|
||||
_items = _this select 4;
|
||||
|
||||
_specificSpot = if (count _this > 6) then {_this select 6} else {-1};
|
||||
params ["_caller", "_target", "_selectionName", "_className", "_items", "", ["_specificSpot", -1]];
|
||||
|
||||
if !([_target] call FUNC(hasMedicalEnabled)) exitwith {
|
||||
_this call FUNC(treatmentBasic_bandage);
|
||||
|
@ -15,19 +15,16 @@
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_target", "_bandage", "_part", "_selectionName", "_openWounds", "_config", "_effectiveness","_mostEffectiveInjury", "_mostEffectiveSpot", "_woundEffectivenss", "_mostEffectiveInjury", "_impact", "_exit", "_specificClass", "_classID", "_effectivenessFound", "_className", "_hitPoints", "_hitSelections", "_point", "_woundTreatmentConfig"];
|
||||
_target = _this select 0;
|
||||
_bandage = _this select 1;
|
||||
_selectionName = _this select 2;
|
||||
_specificClass = if (count _this > 3) then {_this select 3} else { -1 };
|
||||
private ["_openWounds", "_config", "_effectiveness","_mostEffectiveInjury", "_mostEffectiveSpot", "_woundEffectivenss", "_mostEffectiveInjury", "_impact", "_exit", "_classID", "_effectivenessFound", "_className", "_hitPoints", "_hitSelections", "_point", "_woundTreatmentConfig"];
|
||||
params ["_target", "_bandage", "_selectionName", ["_specificClass", -1]];
|
||||
|
||||
// Ensure it is a valid bodypart
|
||||
_part = [_selectionName] call FUNC(selectionNameToNumber);
|
||||
if (_part < 0) exitwith {};
|
||||
if (_part < 0) exitwith {false};
|
||||
|
||||
// Get the open wounds for this unit
|
||||
_openWounds = _target getvariable [QGVAR(openWounds), []];
|
||||
if (count _openWounds == 0) exitwith {}; // nothing to do here!
|
||||
if (count _openWounds == 0) exitwith {false}; // nothing to do here!
|
||||
|
||||
// Get the default effectiveness for the used bandage
|
||||
_config = (ConfigFile >> "ACE_Medical_Advanced" >> "Treatment" >> "Bandaging");
|
||||
@ -43,10 +40,11 @@ _effectivenessFound = -1;
|
||||
_mostEffectiveInjury = _openWounds select 0;
|
||||
_exit = false;
|
||||
{
|
||||
_x params ["", "_classID", "_partX"];
|
||||
TRACE_2("OPENWOUND: ", _target, _x);
|
||||
// Only parse injuries that are for the selected bodypart.
|
||||
if (_x select 2 == _part) then {
|
||||
if (_partX == _part) then {
|
||||
_woundEffectivenss = _effectiveness;
|
||||
_classID = (_x select 1);
|
||||
|
||||
// Select the classname from the wound classname storage
|
||||
_className = GVAR(woundClassNames) select _classID;
|
||||
@ -59,6 +57,7 @@ _exit = false;
|
||||
};
|
||||
};
|
||||
|
||||
TRACE_2("Wound classes: ", _specificClass, _classID);
|
||||
if (_specificClass == _classID) exitwith {
|
||||
_effectivenessFound = _woundEffectivenss;
|
||||
_mostEffectiveSpot = _foreachIndex;
|
||||
@ -74,7 +73,7 @@ _exit = false;
|
||||
};
|
||||
};
|
||||
if (_exit) exitwith {};
|
||||
}foreach _openWounds;
|
||||
} foreach _openWounds;
|
||||
|
||||
if (_effectivenessFound == -1) exitwith {}; // Seems everything is patched up on this body part already..
|
||||
|
||||
@ -96,12 +95,11 @@ if (_impact > 0 && {GVAR(enableAdvancedWounds)}) then {
|
||||
};
|
||||
|
||||
// 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 (GVAR(healHitPointAfterAdvBandage) && {{(_x select 2) == _part && {_x select 3 > 0}}count _openWounds == 0}) then {
|
||||
if (GVAR(healHitPointAfterAdvBandage) && {{(_x select 2) == _part && {((_x select 4) * (_x select 3)) > 0}}count _openWounds == 0}) then {
|
||||
_hitSelections = ["head", "body", "hand_l", "hand_r", "leg_l", "leg_r"];
|
||||
_hitPoints = ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"];
|
||||
_point = _hitPoints select (_hitSelections find _selectionName);
|
||||
[_target, _point, 0] call FUNC(setHitPointDamage);
|
||||
// _target setvariable [QGVAR(bodyPartStatus), [0,0,0,0,0,0], true];
|
||||
_target setHitPointDamage [_point, 0];
|
||||
};
|
||||
|
||||
true;
|
||||
|
@ -10,12 +10,7 @@
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_target", "_caller", "_selectionName", "_className", "_items"];
|
||||
_caller = _this select 0;
|
||||
_target = _this select 1;
|
||||
_selectionName = _this select 2;
|
||||
_className = _this select 3;
|
||||
_items = _this select 4;
|
||||
params ["_caller", "_target", "_selectionName", "_className", "_items"];
|
||||
|
||||
// TODO replace by event system
|
||||
[[_caller, _target], QUOTE(DFUNC(treatmentAdvanced_fullHealLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */
|
||||
|
@ -10,9 +10,8 @@
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_target", "_caller", "_allUsedMedication"];
|
||||
_caller = _this select 0;
|
||||
_target = _this select 1;
|
||||
private "_allUsedMedication";
|
||||
params ["_caller", "_target"];
|
||||
|
||||
if (alive _target) exitwith {
|
||||
|
||||
@ -64,7 +63,7 @@ if (alive _target) exitwith {
|
||||
_allUsedMedication = _target getVariable [QGVAR(allUsedMedication), []];
|
||||
{
|
||||
_target setvariable [_x select 0, nil];
|
||||
}foreach _allUsedMedication;
|
||||
} foreach _allUsedMedication;
|
||||
|
||||
// Resetting damage
|
||||
_target setDamage 0;
|
||||
|
@ -15,12 +15,12 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_target", "_totalDamage"];
|
||||
_target = _this;
|
||||
private "_totalDamage";
|
||||
|
||||
_totalDamage = 0;
|
||||
|
||||
{
|
||||
_totalDamage = _totalDamage + _x;
|
||||
} forEach (_target getVariable [QGVAR(bodyPartStatus), []]);
|
||||
} forEach (_this getVariable [QGVAR(bodyPartStatus), []]);
|
||||
|
||||
(10 max (_totalDamage * 10) min 120)
|
||||
|
@ -17,12 +17,7 @@
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_caller", "_target", "_selectionName", "_className", "_items"];
|
||||
_caller = _this select 0;
|
||||
_target = _this select 1;
|
||||
_selectionName = _this select 2;
|
||||
_className = _this select 3;
|
||||
_items = _this select 4;
|
||||
params ["_caller", "_target", "_selectionName", "_className", "_items"];
|
||||
|
||||
[[_target, _className], QUOTE(DFUNC(treatmentAdvanced_medicationLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */
|
||||
|
||||
@ -32,7 +27,7 @@ _items = _this select 4;
|
||||
[_target, "activity", LSTRING(Activity_usedItem), [[_caller] call EFUNC(common,getName), getText (configFile >> "CfgWeapons" >> _x >> "displayName")]] call FUNC(addToLog);
|
||||
[_target, "activity_view", LSTRING(Activity_usedItem), [[_caller] call EFUNC(common,getName), getText (configFile >> "CfgWeapons" >> _x >> "displayName")]] call FUNC(addToLog);
|
||||
};
|
||||
}foreach _items;
|
||||
} foreach _items;
|
||||
|
||||
|
||||
true;
|
||||
|
@ -15,9 +15,8 @@
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_target", "_className", "_currentInSystem", "_medicationConfig", "_painReduce", "_hrIncreaseLow", "_hrIncreaseNorm", "_hrIncreaseHigh", "_maxDose", "_inCompatableMedication", "_timeInSystem", "_heartRate", "_pain", "_resistance", "_hrCallback", "_varName", "_viscosityChange"];
|
||||
_target = _this select 0;
|
||||
_className = _this select 1;
|
||||
private ["_currentInSystem", "_medicationConfig", "_painReduce", "_hrIncreaseLow", "_hrIncreaseNorm", "_hrIncreaseHigh", "_maxDose", "_inCompatableMedication", "_timeInSystem", "_heartRate", "_pain", "_resistance", "_hrCallback", "_varName", "_viscosityChange"];
|
||||
params ["_target", "_className"];
|
||||
|
||||
// We have added a new dose of this medication to our system, so let's increase it
|
||||
_varName = format[QGVAR(%1_inSystem), _className];
|
||||
|
@ -1,23 +1,30 @@
|
||||
/*
|
||||
* Author: BaerMitUmlaut
|
||||
* Handles treatment via surgical kit per frame.
|
||||
* Handles treatment via surgical kit per frame
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Arguments <ARRAY>
|
||||
* 0: Caller <OBJECT>
|
||||
* 1: Target <OBJECT>
|
||||
* 1: Elapsed Time <NUMBER>
|
||||
* 2: Total Time <NUMBER>
|
||||
*
|
||||
* Return Value:
|
||||
* Succesful treatment started <BOOL>
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_args", "_target", "_caller", "_elapsedTime", "_totalTime", "_bandagedWounds"];
|
||||
_args = _this select 0;
|
||||
_caller = _args select 0;
|
||||
_target = _args select 1;
|
||||
_elapsedTime = _this select 1;
|
||||
_totalTime = _this select 2;
|
||||
|
||||
private "_bandagedWounds";
|
||||
params ["_args", "_elapsedTime", "_totalTime"];
|
||||
_args params ["_caller", "_target"];
|
||||
|
||||
_bandagedWounds = _target getVariable [QGVAR(bandagedWounds), []];
|
||||
|
||||
//In case two people stitch up one patient and the last wound has already been closed we can stop already
|
||||
if (count _bandagedWounds == 0) exitWith {false};
|
||||
if (count _bandagedWounds == 0) exitWith { false };
|
||||
|
||||
//Has enough time elapsed that we can close another wound?
|
||||
if ((_totalTime - _elapsedTime) <= (((count _bandagedWounds) - 1) * 5)) then {
|
||||
@ -25,4 +32,4 @@ if ((_totalTime - _elapsedTime) <= (((count _bandagedWounds) - 1) * 5)) then {
|
||||
_target setVariable [QGVAR(bandagedWounds), _bandagedWounds, true];
|
||||
};
|
||||
|
||||
true
|
||||
true
|
||||
|
@ -9,7 +9,7 @@
|
||||
* 3: Treatment classname <STRING>
|
||||
*
|
||||
* Return Value:
|
||||
* nil
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
@ -17,19 +17,7 @@
|
||||
#include "script_component.hpp"
|
||||
#define BANDAGEHEAL 0.8
|
||||
|
||||
private ["_caller", "_target","_selection","_className","_target","_hitSelections","_hitPoints","_point", "_damage"];
|
||||
_caller = _this select 0;
|
||||
_target = _this select 1;
|
||||
_selection = _this select 2;
|
||||
_className = _this select 3;
|
||||
private ["_hitSelections", "_hitPoints", "_point", "_damage"];
|
||||
params ["_caller", "_target", "_selection", "_className"];
|
||||
|
||||
if (_selection == "all") then {
|
||||
_target setDamage ((damage _target - BANDAGEHEAL) max 0);
|
||||
} else {
|
||||
_hitSelections = ["head", "body", "hand_l", "hand_r", "leg_l", "leg_r"];
|
||||
_hitPoints = ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"];
|
||||
_point = _hitPoints select (_hitSelections find _selection);
|
||||
|
||||
_damage = ((_target getHitPointDamage _point) - BANDAGEHEAL) max 0;
|
||||
[_target, _point, _damage] call FUNC(setHitPointDamage);
|
||||
};
|
||||
[[_target, _selection], QUOTE(DFUNC(treatmentBasic_bandageLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */
|
||||
|
43
addons/medical/functions/fnc_treatmentBasic_bandageLocal.sqf
Normal file
43
addons/medical/functions/fnc_treatmentBasic_bandageLocal.sqf
Normal file
@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Author: Glowbal
|
||||
* Handles the bandage of a patient.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: The patient <OBJECT>
|
||||
* 1: Treatment classname <STRING>
|
||||
*
|
||||
*
|
||||
* Return Value:
|
||||
* Succesful treatment started <BOOL>
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
#define BANDAGEHEAL 0.8
|
||||
|
||||
params ["_target", "_selectionName"];
|
||||
|
||||
_damageBodyParts = _target getvariable [QGVAR(bodyPartStatus), [0,0,0,0,0,0]];
|
||||
|
||||
// Ensure it is a valid bodypart
|
||||
_part = [_selectionName] call FUNC(selectionNameToNumber);
|
||||
if (_part < 0) exitwith {false};
|
||||
|
||||
if ((_damageBodyParts select _part) > 0) then {
|
||||
_damageBodyParts set [_part, ((_damageBodyParts select _part) - BANDAGEHEAL) max 0];
|
||||
_target setvariable [QGVAR(bodyPartStatus), _damageBodyParts, true];
|
||||
TRACE_2("ACE_DEBUG: Treatment BASIC Bandage Broadcast value here",_unit, _target getvariable QGVAR(bodyPartStatus));
|
||||
};
|
||||
|
||||
EXPLODE_6_PVT(_damageBodyParts,_headDamage,_torsoDamage,_handsDamageR,_handsDamageL,_legsDamageR,_legsDamageL);
|
||||
_target setHitPointDamage ["hitHead", _headDamage min 0.95];
|
||||
_target setHitPointDamage ["hitBody", _torsoDamage min 0.95];
|
||||
_target setHitPointDamage ["hitHands", (_handsDamageR + _handsDamageL) min 0.95];
|
||||
_target setHitPointDamage ["hitLegs", (_legsDamageR + _legsDamageL) min 0.95];
|
||||
|
||||
{
|
||||
_target setHitPointDamage [_x, (_damageBodyParts select _foreachIndex) min 0.95];
|
||||
}foreach GVAR(HITPOINTS);
|
||||
|
||||
true;
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user