Skip to content

Commit

Permalink
Arsenal - Improve armor stat for medical, fix gforce stat
Browse files Browse the repository at this point in the history
  • Loading branch information
LinkIsGrim committed Dec 17, 2024
1 parent a304e95 commit 87618c8
Show file tree
Hide file tree
Showing 7 changed files with 108 additions and 1 deletion.
2 changes: 1 addition & 1 deletion addons/gforces/ACE_Arsenal_Stats.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ class EGVAR(arsenal,stats) {
displayName = CSTRING(statGReduction);
showBar = 1;
barStatement = QUOTE([ARR_3((_this select 0) select 0,_this select 1,[ARR_3([ARR_2(1,0)],[ARR_2(0.01,1)],false)])] call EFUNC(arsenal,statBarStatement_default));
condition = QUOTE(getNumber (_this select 1 >> (_this select 0) select 0) > 0);
condition = QUOTE(getNumber (_this select 1 >> (_this select 0) select 0) < 1);
tabs[] = {{3}, {}};
};
};
2 changes: 2 additions & 0 deletions addons/medical/XEH_PREP.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,5 @@ PREP(isInjured);
PREP(isInStableCondition);
PREP(serializeState);
PREP(setUnconscious);
PREP(statBarStatement_armor);
PREP(statTextStatement_armor);
17 changes: 17 additions & 0 deletions addons/medical/arsenal/ACE_Arsenal_Stats.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
class EGVAR(arsenal,stats) {
class statBase;
class ACE_ballisticProtection: statBase {
condition = QUOTE(!(missionNamespace getVariable [ARR_2(QQEGVAR(medical,enabled),false)])); // Hide if medical is enabled
};
class ACE_explosiveResistance: statBase {
condition = QUOTE(!(missionNamespace getVariable [ARR_2(QQEGVAR(medical,enabled),false)])); // Hide if medical is enabled
};
class GVAR(armor): ACE_ballisticProtection {
displayName = "$STR_UI_ABAR";
condition = QUOTE(missionNamespace getVariable [ARR_2(QQEGVAR(medical,enabled),false)]); // Show if medical is enabled
showBar = 1;
barStatement = QUOTE((_this select 1) call FUNC(statBarStatement_armor));
showText = 1;
textStatement = QUOTE((_this select 1) call FUNC(statTextStatement_armor));
};
};
18 changes: 18 additions & 0 deletions addons/medical/arsenal/config.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#include "script_component.hpp"

class CfgPatches {
class SUBADDON {
addonRootClass = QUOTE(COMPONENT);
units[] = {};
weapons[] = {};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {
"ace_medical_engine",
"ace_arsenal"
};
skipWhenMissingDependencies = 1;
VERSION_CONFIG;
};
};

#include "ACE_Arsenal_Stats.hpp"
3 changes: 3 additions & 0 deletions addons/medical/arsenal/script_component.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#define SUBCOMPONENT arsenal
#define SUBCOMPONENT_BEAUTIFIED Arsenal
#include "..\script_component.hpp"
30 changes: 30 additions & 0 deletions addons/medical/functions/fnc_statBarStatement_armor.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#include "..\script_component.hpp"
/*
* Author: LinkIsGrim
* Bar statement for armor.
*
* Arguments:
* 0: Item config path <CONFIG>
*
* Return Value:
* Bar statement <NUMBER>
*
* Public: No
*/

params ["_config"];

private _itemType = getNumber (_config >> "ItemInfo" >> "type");

private _hitpoint = ["HitChest", "HitHead"] select (_itemType == TYPE_HEADGEAR);
private _levelStep = [4, 2] select (_itemType == TYPE_HEADGEAR);

([configName _config, _hitpoint] call EFUNC(medical_engine,getItemArmor)) params ["_armor", "_armorScaled"];

if (_armor > (_armorScaled * 2)) then { // Probably explosive-resistant armor
_armor = _armorScaled;
};

private _armorLevel = (_armor - _levelStep) / _levelStep;

0.01 max (_armorLevel / 5) min 1
37 changes: 37 additions & 0 deletions addons/medical/functions/fnc_statTextStatement_armor.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
#include "..\script_component.hpp"
/*
* Author: LinkIsGrim
* Text statement for armor.
*
* Arguments:
* 0: Item config path <CONFIG>
*
* Return Value:
* Stat Text <STRING>
*
* Public: No
*/

params ["_config"];

private _itemType = getNumber (_config >> "ItemInfo" >> "type");

private _hitpoint = ["HitChest", "HitHead"] select (_itemType == TYPE_HEADGEAR);
private _levelStep = [4, 2] select (_itemType == TYPE_HEADGEAR);

([configName _config, _hitpoint] call EFUNC(medical_engine,getItemArmor)) params ["_armor", "_armorScaled"];

if (_armor > (_armorScaled * 2)) then { // Probably explosive-resistant armor
_armor = _armorScaled;
};

private _armorLevel = 0 max (round ((_armor - _levelStep) / _levelStep)) min 5;

localize ([
"STR_A3_SP_NOARMOR",
"STR_A3_SP_AL_I",
"STR_A3_SP_AL_II",
"STR_A3_SP_AL_III",
"STR_A3_SP_AL_IV",
"STR_A3_SP_AL_V"
] select _armorLevel)

0 comments on commit 87618c8

Please sign in to comment.