From d055845201dace227c30695186e0305032b312bb Mon Sep 17 00:00:00 2001 From: Arcanum Date: Mon, 22 May 2017 19:57:02 +0200 Subject: [PATCH 1/7] Add vars for separate AI fatalInjuty condition --- addons/medical/ACE_Settings.hpp | 8 ++++++++ addons/medical/stringtable.xml | 12 +++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/addons/medical/ACE_Settings.hpp b/addons/medical/ACE_Settings.hpp index b5c1c80d1a..aedb705120 100644 --- a/addons/medical/ACE_Settings.hpp +++ b/addons/medical/ACE_Settings.hpp @@ -111,6 +111,14 @@ class ACE_Settings { typeName = "SCALAR"; values[] = {"Always", "In Cardiac Arrest", "Never"}; }; + class GVAR(fatalInjuryConditionAI) { + category = CSTRING(Category_Medical); + displayName = CSTRING(MedicalSettings_fatalInjuryConditionAI_DisplayName); + description = CSTRING(MedicalSettings_fatalInjuryConditionAI_Description); + value = 0; + typeName = "SCALAR"; + values[] = {"Always", "In Cardiac Arrest", "Never"}; + }; class GVAR(cardiacArrestTime) { category = CSTRING(Category_Medical); displayName = CSTRING(MedicalSettings_cardiacArrestTime_DisplayName); diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 3fbe015919..4db7c126af 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -2975,12 +2975,18 @@ 얼마정도의 부상을 인공지능이 죽기 전까지 버틸 수 있습니까? - Fatal Injury + Fatal Injury Player - Defines when you can receive a fatal injury + Defines when Player can receive a fatal injury - + + Fatal Injury AI + + + Defines when AI can receive a fatal injury + + In Cardiac Arrest From 31e1e2964ba41eb3ddb9d1927594053c34e3fa0d Mon Sep 17 00:00:00 2001 From: Arcanum Date: Mon, 22 May 2017 20:53:00 +0200 Subject: [PATCH 2/7] Add function to check if AI and condition from fatal --- addons/medical/ACE_Medical_StateMachine.hpp | 9 ++++++- .../fnc_conditionFromFatalToCardiac.sqf | 17 ++++++++++++ addons/medical/functions/fnc_isAI.sqf | 27 +++++++++++++++++++ 3 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 addons/medical/functions/fnc_conditionFromFatalToCardiac.sqf create mode 100644 addons/medical/functions/fnc_isAI.sqf diff --git a/addons/medical/ACE_Medical_StateMachine.hpp b/addons/medical/ACE_Medical_StateMachine.hpp index 6d551aad0f..4151ef8311 100644 --- a/addons/medical/ACE_Medical_StateMachine.hpp +++ b/addons/medical/ACE_Medical_StateMachine.hpp @@ -61,7 +61,14 @@ class ACE_Medical_StateMachine { class SecondChance { events[] = {QGVAR(FatalInjuryInstantTransition)}; targetState = "CardiacArrest"; - condition = QUOTE(GVAR(fatalInjuryCondition) > 0); + condition = QUOTE(DFUNC(conditionFromFatalToCardiac)); + onTransition = QUOTE(DFUNC(transitionSecondChance)); + }; + class SecondChanceAI { + events[] = {QGVAR(FatalInjuryInstantTransition)}; + targetState = "CardiacArrest"; + //conditionFromFatalToCardiac + condition = QUOTE(DFUNC(conditionFromFatalToCardiac)); onTransition = QUOTE(DFUNC(transitionSecondChance)); }; class Death { diff --git a/addons/medical/functions/fnc_conditionFromFatalToCardiac.sqf b/addons/medical/functions/fnc_conditionFromFatalToCardiac.sqf new file mode 100644 index 0000000000..2c19cc926f --- /dev/null +++ b/addons/medical/functions/fnc_conditionFromFatalToCardiac.sqf @@ -0,0 +1,17 @@ +/* + * Author: Arcanum + * Condition for trasfer from FatalInjury to Second chance. + * + * Arguments: + * 0: The Unit + * 1: 1 for AI 0 for player + * + * Return Value: + * Condition fo state machine + * + * Public: No + */ +#include "script_component.hpp" +params ["_unit","_wantAI"]; + +(GVAR(fatalInjuryConditionAI) > 0) && (QUOTE(_this call FUNC(isAi)) == _wantAI) diff --git a/addons/medical/functions/fnc_isAI.sqf b/addons/medical/functions/fnc_isAI.sqf new file mode 100644 index 0000000000..e30563c8fc --- /dev/null +++ b/addons/medical/functions/fnc_isAI.sqf @@ -0,0 +1,27 @@ +/* + * Author: Arcanum + * Check if a unit is AI + * + * Arguments: + * 0: The Unit + * + * ReturnValue: + * Is AI + * + * Example: + * [player] call ace_medical_fnc_isAI + * + * Public: Yes + */ + +#include "script_component.hpp" + +params ["_unit"]; +private _return = 0; + +if (isPlayer _unit) then { + _return=0; +else { + _return=1; +}; +_return From e3f9e65fb79d905dbca24314fc1f8d6d5e09160b Mon Sep 17 00:00:00 2001 From: Arcanum Date: Mon, 22 May 2017 20:53:00 +0200 Subject: [PATCH 3/7] Revert "Add function to check if AI and condition from fatal" This reverts commit 31e1e2964ba41eb3ddb9d1927594053c34e3fa0d. --- addons/medical/ACE_Medical_StateMachine.hpp | 9 +------ .../fnc_conditionFromFatalToCardiac.sqf | 17 ------------ addons/medical/functions/fnc_isAI.sqf | 27 ------------------- 3 files changed, 1 insertion(+), 52 deletions(-) delete mode 100644 addons/medical/functions/fnc_conditionFromFatalToCardiac.sqf delete mode 100644 addons/medical/functions/fnc_isAI.sqf diff --git a/addons/medical/ACE_Medical_StateMachine.hpp b/addons/medical/ACE_Medical_StateMachine.hpp index 4151ef8311..6d551aad0f 100644 --- a/addons/medical/ACE_Medical_StateMachine.hpp +++ b/addons/medical/ACE_Medical_StateMachine.hpp @@ -61,14 +61,7 @@ class ACE_Medical_StateMachine { class SecondChance { events[] = {QGVAR(FatalInjuryInstantTransition)}; targetState = "CardiacArrest"; - condition = QUOTE(DFUNC(conditionFromFatalToCardiac)); - onTransition = QUOTE(DFUNC(transitionSecondChance)); - }; - class SecondChanceAI { - events[] = {QGVAR(FatalInjuryInstantTransition)}; - targetState = "CardiacArrest"; - //conditionFromFatalToCardiac - condition = QUOTE(DFUNC(conditionFromFatalToCardiac)); + condition = QUOTE(GVAR(fatalInjuryCondition) > 0); onTransition = QUOTE(DFUNC(transitionSecondChance)); }; class Death { diff --git a/addons/medical/functions/fnc_conditionFromFatalToCardiac.sqf b/addons/medical/functions/fnc_conditionFromFatalToCardiac.sqf deleted file mode 100644 index 2c19cc926f..0000000000 --- a/addons/medical/functions/fnc_conditionFromFatalToCardiac.sqf +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Author: Arcanum - * Condition for trasfer from FatalInjury to Second chance. - * - * Arguments: - * 0: The Unit - * 1: 1 for AI 0 for player - * - * Return Value: - * Condition fo state machine - * - * Public: No - */ -#include "script_component.hpp" -params ["_unit","_wantAI"]; - -(GVAR(fatalInjuryConditionAI) > 0) && (QUOTE(_this call FUNC(isAi)) == _wantAI) diff --git a/addons/medical/functions/fnc_isAI.sqf b/addons/medical/functions/fnc_isAI.sqf deleted file mode 100644 index e30563c8fc..0000000000 --- a/addons/medical/functions/fnc_isAI.sqf +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Author: Arcanum - * Check if a unit is AI - * - * Arguments: - * 0: The Unit - * - * ReturnValue: - * Is AI - * - * Example: - * [player] call ace_medical_fnc_isAI - * - * Public: Yes - */ - -#include "script_component.hpp" - -params ["_unit"]; -private _return = 0; - -if (isPlayer _unit) then { - _return=0; -else { - _return=1; -}; -_return From 9895881ad956f20818603ec1658cc443ab68882c Mon Sep 17 00:00:00 2001 From: Arcanum Date: Mon, 22 May 2017 22:16:18 +0200 Subject: [PATCH 4/7] Add options to disable AI going unconscious and for AI to die instantly --- addons/medical/ACE_Medical_StateMachine.hpp | 9 +++++++++ addons/medical/ACE_Settings.hpp | 12 +++++++++--- addons/medical/CfgVehicles.hpp | 12 ++++++++++++ .../medical/functions/fnc_moduleMedicalSettings.sqf | 2 ++ addons/medical/stringtable.xml | 10 ++++++++-- 5 files changed, 40 insertions(+), 5 deletions(-) diff --git a/addons/medical/ACE_Medical_StateMachine.hpp b/addons/medical/ACE_Medical_StateMachine.hpp index 6d551aad0f..003eb66a70 100644 --- a/addons/medical/ACE_Medical_StateMachine.hpp +++ b/addons/medical/ACE_Medical_StateMachine.hpp @@ -39,6 +39,10 @@ class ACE_Medical_StateMachine { class Unconscious { onState = QUOTE(DFUNC(handleStateUnconscious)); onStateEntered = QUOTE([ARR_2(_this,(true))] call FUNC(setUnconscious)); + class DeathAI { + targetState = "Dead"; + condition = QUOTE(!isPlayer _this && {GVAR(unconsciousConditionAI)}); + }; class WakeUp { targetState = "Injured"; condition = QUOTE(_this call FUNC(hasStableVitals)); @@ -58,6 +62,11 @@ class ACE_Medical_StateMachine { // Transition state for handling instant death // This state raises the next transition in the same frame onStateEntered = QUOTE(DFUNC(enteredStateFatalInjury)); + class DeathAI { + events[] = {QGVAR(FatalInjuryInstantTransition)}; + targetState = "Dead"; + condition = QUOTE(!isPlayer _this && {GVAR(fatalInjuryConditionAI)}); + }; class SecondChance { events[] = {QGVAR(FatalInjuryInstantTransition)}; targetState = "CardiacArrest"; diff --git a/addons/medical/ACE_Settings.hpp b/addons/medical/ACE_Settings.hpp index aedb705120..be25758c3e 100644 --- a/addons/medical/ACE_Settings.hpp +++ b/addons/medical/ACE_Settings.hpp @@ -115,9 +115,15 @@ class ACE_Settings { category = CSTRING(Category_Medical); displayName = CSTRING(MedicalSettings_fatalInjuryConditionAI_DisplayName); description = CSTRING(MedicalSettings_fatalInjuryConditionAI_Description); - value = 0; - typeName = "SCALAR"; - values[] = {"Always", "In Cardiac Arrest", "Never"}; + value = 1; + typeName = "BOOL"; + }; + class GVAR(unconsciousConditionAI) { + category = CSTRING(Category_Medical); + displayName = CSTRING(MedicalSettings_unconsciousConditionAI_DisplayName); + description = CSTRING(MedicalSettings_unconsciousConditionAI_Description); + value = 1; + typeName = "BOOL"; }; class GVAR(cardiacArrestTime) { category = CSTRING(Category_Medical); diff --git a/addons/medical/CfgVehicles.hpp b/addons/medical/CfgVehicles.hpp index dbf1e2114e..e67fd46b3b 100644 --- a/addons/medical/CfgVehicles.hpp +++ b/addons/medical/CfgVehicles.hpp @@ -131,6 +131,18 @@ class CfgVehicles { }; }; }; + class fatalInjuryConditionAI { + displayName = CSTRING(MedicalSettings_fatalInjuryConditionAI_DisplayName); + description = CSTRING(MedicalSettings_fatalInjuryConditionAI_Description); + typeName = "BOOL"; + defaultValue = 1; + }; + class unconsciousConditionAI { + displayName = CSTRING(MedicalSettings_unconsciousConditionAI_DisplayName); + description = CSTRING(MedicalSettings_unconsciousConditionAI_Description); + typeName = "BOOL"; + defaultValue = 1; + }; class cardiacArrestTime { displayName = CSTRING(MedicalSettings_cardiacArrestTime_DisplayName); description = CSTRING(MedicalSettings_cardiacArrestTime_Description); diff --git a/addons/medical/functions/fnc_moduleMedicalSettings.sqf b/addons/medical/functions/fnc_moduleMedicalSettings.sqf index 8c518ac37d..5e714bf9cd 100644 --- a/addons/medical/functions/fnc_moduleMedicalSettings.sqf +++ b/addons/medical/functions/fnc_moduleMedicalSettings.sqf @@ -32,6 +32,8 @@ if !(_activated) exitWith {}; [_logic, QGVAR(playerDamageThreshold), "playerDamageThreshold"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(AIDamageThreshold), "AIDamageThreshold"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(fatalInjuryCondition), "fatalInjuryCondition"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(fatalInjuryConditionAI), "fatalInjuryConditionAI"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(unconsciousConditionAI), "unconsciousConditionAI"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(cardiacArrestTime), "cardiacArrestTime"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(medicSetting_PainVisualization), "painVisualization"] call EFUNC(common,readSettingFromModule); diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 4db7c126af..d4b53958da 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -2981,10 +2981,16 @@ Defines when Player can receive a fatal injury - Fatal Injury AI + Instant death AI - Defines when AI can receive a fatal injury + Defines if AI will be able to die instantly + + + Forbid unconscious AI + + + Defines if AI will be denied to go unconscious and will die instead In Cardiac Arrest From 2e856063cbb68e044f8bddb49a2d4644aea5dc02 Mon Sep 17 00:00:00 2001 From: Arcanum Date: Mon, 22 May 2017 22:43:03 +0200 Subject: [PATCH 5/7] Fix option in setting module --- addons/medical/CfgVehicles.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/medical/CfgVehicles.hpp b/addons/medical/CfgVehicles.hpp index e67fd46b3b..e496b50475 100644 --- a/addons/medical/CfgVehicles.hpp +++ b/addons/medical/CfgVehicles.hpp @@ -127,7 +127,7 @@ class CfgVehicles { }; class never { name = ECSTRING(common,Never); - value = 1; + value = 2; }; }; }; From 22e1cdfe350ecb2604d3945b2d6f1f85f850ada5 Mon Sep 17 00:00:00 2001 From: Arcanum Date: Mon, 22 May 2017 22:49:27 +0200 Subject: [PATCH 6/7] Add myself as Author --- AUTHORS.txt | 1 + addons/medical/config.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/AUTHORS.txt b/AUTHORS.txt index dcf94277cc..2213cb24ad 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -39,6 +39,7 @@ alef Aleksey EpMAK Yermakov Alganthe Anthariel +Arcanum417 Arkhir Asgar Serran BaerMitUmlaut diff --git a/addons/medical/config.cpp b/addons/medical/config.cpp index 6345e1fbd0..f04470b5be 100644 --- a/addons/medical/config.cpp +++ b/addons/medical/config.cpp @@ -8,7 +8,7 @@ class CfgPatches { requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_common"}; author = ECSTRING(common,ACETeam); - authors[] = {"Glowbal", "KoffeinFlummi"}; + authors[] = {"Glowbal", "KoffeinFlummi","Arcanum417"}; url = ECSTRING(main,URL); VERSION_CONFIG; }; From fe16b728374f68ffbb6872212568c69d8e434a49 Mon Sep 17 00:00:00 2001 From: Arcanum Date: Sun, 18 Jun 2017 12:43:39 +0200 Subject: [PATCH 7/7] Fix AI can get to CA from injured --- addons/medical/ACE_Medical_StateMachine.hpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/addons/medical/ACE_Medical_StateMachine.hpp b/addons/medical/ACE_Medical_StateMachine.hpp index 9c68271ac3..3abe7d101e 100644 --- a/addons/medical/ACE_Medical_StateMachine.hpp +++ b/addons/medical/ACE_Medical_StateMachine.hpp @@ -88,6 +88,10 @@ class ACE_Medical_StateMachine { class CardiacArrest { onStateEntered = QUOTE(DFUNC(enteredStateCardiacArrest)); onStateLeaving = QUOTE(DFUNC(leftStateCardiacArrest)); + class DeathAI { + targetState = "Dead"; + condition = QUOTE(!isPlayer _this && {GVAR(fatalInjuryConditionAI)}); + }; class Timeout { targetState = "Dead"; condition = QUOTE(DFUNC(conditionCardiacArrestTimer));