From 03332f001928af312c43dd5288aaf899fcc46c03 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Tue, 26 Sep 2023 16:09:34 -0500 Subject: [PATCH 001/287] Prep 3.16.0 Build 70 --- README.md | 2 +- addons/main/script_mod.hpp | 2 +- addons/main/script_version.hpp | 6 +++--- docs/_config.yml | 6 +++--- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 61001011d48..2aa8f9c6697 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@

- ACE3 Version + ACE3 Version ACE3 Issues diff --git a/addons/main/script_mod.hpp b/addons/main/script_mod.hpp index 167466d8532..12faeb07c07 100644 --- a/addons/main/script_mod.hpp +++ b/addons/main/script_mod.hpp @@ -11,7 +11,7 @@ // MINIMAL required version for the Mod. Components can specify others.. #define REQUIRED_VERSION 2.14 -#define REQUIRED_CBA_VERSION {3,15,7} +#define REQUIRED_CBA_VERSION {3,16,0} #ifndef COMPONENT_BEAUTIFIED #define COMPONENT_BEAUTIFIED COMPONENT diff --git a/addons/main/script_version.hpp b/addons/main/script_version.hpp index 098eec73cba..fa5af189d33 100644 --- a/addons/main/script_version.hpp +++ b/addons/main/script_version.hpp @@ -1,4 +1,4 @@ #define MAJOR 3 -#define MINOR 15 -#define PATCHLVL 2 -#define BUILD 69 +#define MINOR 16 +#define PATCHLVL 0 +#define BUILD 70 diff --git a/docs/_config.yml b/docs/_config.yml index 1ac4f3a7a55..9051aa2fd9c 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -8,9 +8,9 @@ ace: githubUrl: https://github.com/acemod/ACE3 version: major: 3 - minor: 15 - patch: 2 - build: 69 + minor: 16 + patch: 0 + build: 70 markdown: kramdown From 0e2c7167a5f83026e9407a77fa2043bc46daabb7 Mon Sep 17 00:00:00 2001 From: amsteadrayle <2516219+amsteadrayle@users.noreply.github.com> Date: Sun, 8 Oct 2023 17:34:51 -0400 Subject: [PATCH 002/287] Medical GUI - Add keybind to show player's patient information display (#9464) * Add keybind to show patient information display * Return false * Add fadeout delay and associated setting * Switch to CBA setting rounding * Change setting type to time Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> * Fix incorrect behavior on repeated key presses * Tweak setting name and description * Tweak to prevent overlapping WUAE Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> --------- Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> --- addons/medical_gui/XEH_postInit.sqf | 20 ++++++++++++++++++++ addons/medical_gui/initSettings.sqf | 9 +++++++++ addons/medical_gui/stringtable.xml | 9 +++++++++ 3 files changed, 38 insertions(+) diff --git a/addons/medical_gui/XEH_postInit.sqf b/addons/medical_gui/XEH_postInit.sqf index 6127a1a013a..a84e742bfe5 100644 --- a/addons/medical_gui/XEH_postInit.sqf +++ b/addons/medical_gui/XEH_postInit.sqf @@ -12,6 +12,8 @@ GVAR(pendingReopen) = false; GVAR(menuPFH) = -1; +GVAR(peekLastOpenedOn) = -1; + GVAR(selfInteractionActions) = []; [] call FUNC(addTreatmentActions); [] call FUNC(collectActions); @@ -71,6 +73,24 @@ GVAR(selfInteractionActions) = []; false }, [DIK_H, [false, false, false]], false, 0] call CBA_fnc_addKeybind; +["ACE3 Common", QGVAR(peekMedicalInfoKey), localize LSTRING(PeekMedicalInfo), +{ + // Conditions: canInteract + if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; + + // Statement + [ACE_player, 0] call FUNC(displayPatientInformation); + false +}, { + if (CBA_missionTime - GVAR(peekLastOpenedOn) > GVAR(peekMedicalInfoReleaseDelay)) then { + [{ + CBA_missionTime - GVAR(peekLastOpenedOn) > GVAR(peekMedicalInfoReleaseDelay) + }, {QGVAR(RscPatientInfo) cutFadeOut 0.3}] call CBA_fnc_waitUntilAndExecute; + }; + GVAR(peekLastOpenedOn) = CBA_missionTime; + false +}, [DIK_H, [false, true, false]], false, 0] call CBA_fnc_addKeybind; + // Close patient information display when interaction menu is closed ["ace_interactMenuClosed", { diff --git a/addons/medical_gui/initSettings.sqf b/addons/medical_gui/initSettings.sqf index c1d02d7131d..5ae4474da0d 100644 --- a/addons/medical_gui/initSettings.sqf +++ b/addons/medical_gui/initSettings.sqf @@ -126,3 +126,12 @@ private _categoryColors = [ELSTRING(medical,Category), format ["| %1 |", LELSTRI true, true // isGlobal ] call CBA_fnc_addSetting; + +[ + QGVAR(peekMedicalInfoReleaseDelay), + "TIME", + [LSTRING(PeekMedicalInfoReleaseDelay_DisplayName), LSTRING(PeekMedicalInfoReleaseDelay_Description)], + [ELSTRING(medical,Category), LSTRING(SubCategory)], + [0, 5, 1], + false +] call CBA_fnc_addSetting; diff --git a/addons/medical_gui/stringtable.xml b/addons/medical_gui/stringtable.xml index c2eb8c8e735..5cb0fd44003 100644 --- a/addons/medical_gui/stringtable.xml +++ b/addons/medical_gui/stringtable.xml @@ -282,6 +282,15 @@ 開起醫療選單 Medikal Menüyü Aç + + Peek Medical Info + + + Medical Peek Duration + + + How long the medical info peek remains open after releasing the key. + Load Patient Cargar al paciente en From 97febbe5749923bd06318bf91ed6fd9f15065b8d Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 9 Oct 2023 11:58:00 -0500 Subject: [PATCH 003/287] Laser - Fix LST conditions (#9472) --- addons/laser/XEH_postInit.sqf | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/addons/laser/XEH_postInit.sqf b/addons/laser/XEH_postInit.sqf index 923c5234241..ec6b6aca2db 100644 --- a/addons/laser/XEH_postInit.sqf +++ b/addons/laser/XEH_postInit.sqf @@ -58,15 +58,33 @@ if (hasInterface) then { }; }] call CBA_fnc_addEventHandler; -["AllVehicles", "init", { +["Air", "init", { params ["_unit"]; if (hasPilotCamera _unit) then { + if (!alive _unit) exitWith {}; + // some helicopters just have a static downward camera for cargo loading + if ((getNumber ((configOf _unit) >> "pilotCamera" >> "controllable")) == 0) exitWith {}; + _unit setVariable [QGVAR(hasLaserSpotTracker), true]; _unit setVariable [QGVAR(laserSpotTrackerOn), false]; - private _actionOff = ["LSTOff", localize LSTRING(LSTOff), "", {[_this select 0] call FUNC(toggleLST)}, {(_this select 0) getVariable [QGVAR(laserSpotTrackerOn), false]}] call ace_interact_menu_fnc_createAction; - [_unit, 1, ["ACE_SelfActions"], _actionOff] call ace_interact_menu_fnc_addActionToObject; - private _actionOn = ["LSTOn", localize LSTRING(LSTOn), "", {[_this select 0] call FUNC(toggleLST)}, {!((_this select 0) getVariable [QGVAR(laserSpotTrackerOn), false])}] call ace_interact_menu_fnc_createAction; - [_unit, 1, ["ACE_SelfActions"], _actionOn] call ace_interact_menu_fnc_addActionToObject; + + private _condition = { + //IGNORE_PRIVATE_WARNING ["_target", "_player"]; + (_player == driver _target) + && {(_target getVariable [QGVAR(laserSpotTrackerOn), false])} + && {[_player, _target, []] call EFUNC(common,canInteractWith)} + }; + private _actionOff = ["LSTOff", localize LSTRING(LSTOff), "", {[_this select 0] call FUNC(toggleLST)}, _condition] call EFUNC(interact_menu,createAction); + [_unit, 1, ["ACE_SelfActions"], _actionOff] call EFUNC(interact_menu,addActionToObject); + + private _condition = { + //IGNORE_PRIVATE_WARNING ["_target", "_player"]; + (_player == driver _target) + && {!(_target getVariable [QGVAR(laserSpotTrackerOn), false])} + && {[_player, _target, []] call EFUNC(common,canInteractWith)} + }; + private _actionOn = ["LSTOn", localize LSTRING(LSTOn), "", {[_this select 0] call FUNC(toggleLST)}, _condition] call EFUNC(interact_menu,createAction); + [_unit, 1, ["ACE_SelfActions"], _actionOn] call EFUNC(interact_menu,addActionToObject); }; }, true, [], true] call CBA_fnc_addClassEventHandler; From 941207c45cb23663a9ef9aa91b6bea16c60255c7 Mon Sep 17 00:00:00 2001 From: amsteadrayle <2516219+amsteadrayle@users.noreply.github.com> Date: Mon, 9 Oct 2023 13:57:47 -0400 Subject: [PATCH 004/287] Medical GUI - Peek Medical Info on Hit (#9467) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Basic implementation of medical status peek on hit * Fix flickering on repeated hits * Overhaul to show damaged body part * Add setting to enable/disable * Add setting for duration * Fix capitalization Co-authored-by: Jouni Järvinen * Use recommended equality check Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> * Default to off * change setting limits --------- Co-authored-by: Jouni Järvinen Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> --- addons/medical_gui/XEH_postInit.sqf | 18 ++++++++++++++++++ addons/medical_gui/initSettings.sqf | 18 ++++++++++++++++++ addons/medical_gui/stringtable.xml | 12 ++++++++++++ 3 files changed, 48 insertions(+) diff --git a/addons/medical_gui/XEH_postInit.sqf b/addons/medical_gui/XEH_postInit.sqf index a84e742bfe5..7f89dca28ce 100644 --- a/addons/medical_gui/XEH_postInit.sqf +++ b/addons/medical_gui/XEH_postInit.sqf @@ -13,6 +13,7 @@ GVAR(pendingReopen) = false; GVAR(menuPFH) = -1; GVAR(peekLastOpenedOn) = -1; +GVAR(peekOnHitLastOpenedOn) = -1; GVAR(selfInteractionActions) = []; [] call FUNC(addTreatmentActions); @@ -96,3 +97,20 @@ GVAR(selfInteractionActions) = []; ["ace_interactMenuClosed", { QGVAR(RscPatientInfo) cutFadeOut 0.3; }] call CBA_fnc_addEventHandler; + +[QEGVAR(medical,woundReceived), { + params ["_unit", "_allDamages", ""]; + if !(GVAR(peekMedicalOnHit) && {_unit == ACE_player}) exitWith {}; + + private _bodypart = toLower (_allDamages select 0 select 1); + private _bodypartIndex = ALL_BODY_PARTS find _bodypart; + + [ACE_player, _bodypartIndex] call FUNC(displayPatientInformation); + + if (CBA_missionTime - GVAR(peekOnHitLastOpenedOn) > GVAR(peekMedicalOnHitDuration)) then { + [{ + CBA_missionTime - GVAR(peekOnHitLastOpenedOn) > GVAR(peekMedicalOnHitDuration) + }, {QGVAR(RscPatientInfo) cutFadeOut 0.3}] call CBA_fnc_waitUntilAndExecute; + }; + GVAR(peekOnHitLastOpenedOn) = CBA_missionTime; +}] call CBA_fnc_addEventHandler; diff --git a/addons/medical_gui/initSettings.sqf b/addons/medical_gui/initSettings.sqf index 5ae4474da0d..1a408887aff 100644 --- a/addons/medical_gui/initSettings.sqf +++ b/addons/medical_gui/initSettings.sqf @@ -135,3 +135,21 @@ private _categoryColors = [ELSTRING(medical,Category), format ["| %1 |", LELSTRI [0, 5, 1], false ] call CBA_fnc_addSetting; + +[ + QGVAR(peekMedicalOnHit), + "CHECKBOX", + [LSTRING(PeekMedicalOnHit_DisplayName), LSTRING(PeekMedicalOnHit_Description)], + [ELSTRING(medical,Category), LSTRING(SubCategory)], + false, + false // isGlobal +] call CBA_fnc_addSetting; + +[ + QGVAR(peekMedicalOnHitDuration), + "TIME", + [LSTRING(PeekMedicalOnHitDuration_DisplayName), LSTRING(PeekMedicalOnHitDuration_Description)], + [ELSTRING(medical,Category), LSTRING(SubCategory)], + [0, 5, 1], + false +] call CBA_fnc_addSetting; diff --git a/addons/medical_gui/stringtable.xml b/addons/medical_gui/stringtable.xml index 5cb0fd44003..59f0ce8307e 100644 --- a/addons/medical_gui/stringtable.xml +++ b/addons/medical_gui/stringtable.xml @@ -1265,6 +1265,18 @@ Показывать тяжесть кровопотери в списке ранений. Mostrar la pérdida de sangre cualitativa en la lista de heridas. + + Peek Medical Info on Hit + + + Temporarily show medical info when injured. + + + Medical Peek Duration on Hit + + + How long the medical info peek remains open after being injured. + Show Trauma Sustained Mostrar Traumatismo Sofrido From b4c72d82553dd3df7afcdc684a0997c0feb03079 Mon Sep 17 00:00:00 2001 From: Fabio Schick <58027418+mrschick@users.noreply.github.com> Date: Mon, 9 Oct 2023 19:58:49 +0200 Subject: [PATCH 005/287] Captives - Allow disarming and blindfolding captives in vehicles (#9463) * Can disarm captives in vehicles * Can blindfold captives in vehicles * Fix dropping goggles/blindfold into large vehicles * Apply suggestions from code review Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> --------- Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> --- addons/captives/functions/fnc_canBlindfoldCaptive.sqf | 2 -- .../functions/fnc_canRemoveBlindfoldCaptive.sqf | 2 -- addons/captives/functions/fnc_doBlindfoldCaptive.sqf | 10 ++++++++-- addons/disarming/functions/fnc_canBeDisarmed.sqf | 1 - addons/disarming/functions/fnc_disarmDropItems.sqf | 5 +++++ 5 files changed, 13 insertions(+), 7 deletions(-) diff --git a/addons/captives/functions/fnc_canBlindfoldCaptive.sqf b/addons/captives/functions/fnc_canBlindfoldCaptive.sqf index 892ed5b5df2..7020b1a9a62 100644 --- a/addons/captives/functions/fnc_canBlindfoldCaptive.sqf +++ b/addons/captives/functions/fnc_canBlindfoldCaptive.sqf @@ -22,7 +22,5 @@ params ["_unit", "_target"]; (_target getVariable [QGVAR(isHandcuffed), false]) && {isNull (attachedTo _target)} && {alive _target} && -{isNull objectParent _unit} && -{isNull objectParent _target} && {(GVAR(blindfolds) findAny (_unit call EFUNC(common,uniqueItems))) != -1} && {!((goggles _target) in GVAR(blindfolds))} diff --git a/addons/captives/functions/fnc_canRemoveBlindfoldCaptive.sqf b/addons/captives/functions/fnc_canRemoveBlindfoldCaptive.sqf index b509197feaf..b01f62e26c5 100644 --- a/addons/captives/functions/fnc_canRemoveBlindfoldCaptive.sqf +++ b/addons/captives/functions/fnc_canRemoveBlindfoldCaptive.sqf @@ -22,6 +22,4 @@ params ["_unit", "_target"]; (_target getVariable [QGVAR(isHandcuffed), false]) && {isNull (attachedTo _target)} && {alive _target} && -{isNull objectParent _unit} && -{isNull objectParent _target} && {(goggles _target) in GVAR(blindfolds)} diff --git a/addons/captives/functions/fnc_doBlindfoldCaptive.sqf b/addons/captives/functions/fnc_doBlindfoldCaptive.sqf index aff7444909a..e4463909e6e 100644 --- a/addons/captives/functions/fnc_doBlindfoldCaptive.sqf +++ b/addons/captives/functions/fnc_doBlindfoldCaptive.sqf @@ -66,10 +66,16 @@ if (_state) then { // Blindfold target removeGoggles _target; }; -// Handle for things that need to be dropped to the ground +// Handle for things that need to be dropped to the ground or in a vehicle inventory if (_dropGoggles) then { private _weaponHolder = nearestObject [_target, "WeaponHolder"]; - if (isNull _weaponHolder || {_target distance _weaponHolder > 2}) then { + // if _target is in a vehicle, use vehicle inventory as container + private _inVehicle = !isNull objectParent _target; + if (_inVehicle) then { + _weaponHolder = objectParent _target; + }; + + if (!_inVehicle && {isNull _weaponHolder || {_target distance _weaponHolder > 2}}) then { _weaponHolder = createVehicle ["GroundWeaponHolder", [0, 0, 0], [], 0, "NONE"]; _weaponHolder setPosASL getPosASL _target; }; diff --git a/addons/disarming/functions/fnc_canBeDisarmed.sqf b/addons/disarming/functions/fnc_canBeDisarmed.sqf index 25d072f1e54..4fde1597c46 100644 --- a/addons/disarming/functions/fnc_canBeDisarmed.sqf +++ b/addons/disarming/functions/fnc_canBeDisarmed.sqf @@ -29,7 +29,6 @@ if (_putDownAnim != "") exitWith { false }; (alive _target) && {(abs (speed _target)) < 1} && -{(vehicle _target) == _target} && {(_target getVariable ["ACE_isUnconscious", false]) || {_target getVariable [QEGVAR(captives,isHandcuffed), false]} || {_target getVariable [QEGVAR(captives,isSurrendering), false]}} diff --git a/addons/disarming/functions/fnc_disarmDropItems.sqf b/addons/disarming/functions/fnc_disarmDropItems.sqf index d43d3542f71..26e00dfa5f7 100644 --- a/addons/disarming/functions/fnc_disarmDropItems.sqf +++ b/addons/disarming/functions/fnc_disarmDropItems.sqf @@ -39,6 +39,11 @@ if (_doNotDropAmmo && {({_x in _listOfItemsToRemove} count (magazines _target)) private _holder = objNull; +// if _target is in a vehicle, use vehicle inventory as container +if (!isNull objectParent _target) then { + _holder = objectParent _target; +}; + //If not dropping ammo, don't use an existing container if (!_doNotDropAmmo) then { { From 60143be55ff5e64c21835a2498a89ad29c9da5e1 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 9 Oct 2023 18:20:23 -0500 Subject: [PATCH 006/287] Arsenal - Add stats for buddy-loading launchers and belt linking (#9470) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * reload launchers - show if enable arsenal stat * Apply suggestions from code review Co-authored-by: Jouni Järvinen Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> * Add ACE_isBelt stat * buddy --------- Co-authored-by: Jouni Järvinen Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> --- addons/reload/ACE_Arsenal_Stats.hpp | 13 +++++++++++++ addons/reload/config.cpp | 1 + addons/reloadlaunchers/ACE_Arsenal_Stats.hpp | 13 +++++++++++++ addons/reloadlaunchers/config.cpp | 1 + addons/reloadlaunchers/stringtable.xml | 3 +++ 5 files changed, 31 insertions(+) create mode 100644 addons/reload/ACE_Arsenal_Stats.hpp create mode 100644 addons/reloadlaunchers/ACE_Arsenal_Stats.hpp diff --git a/addons/reload/ACE_Arsenal_Stats.hpp b/addons/reload/ACE_Arsenal_Stats.hpp new file mode 100644 index 00000000000..44de05e949f --- /dev/null +++ b/addons/reload/ACE_Arsenal_Stats.hpp @@ -0,0 +1,13 @@ +class EGVAR(arsenal,stats) { + class statBase; + class ACE_isBelt: statBase { + scope = 2; + priority = -1; + stats[] = {"ACE_isBelt"}; + displayName = CSTRING(LinkBelt); + showText = 1; + textStatement = QUOTE(localize QUOTE(ELSTRING(Common,Enabled))); + condition = QUOTE(params[ARR_2('_stat', '_config')]; (getNumber (_config >> _stat select 0)) == 1); + tabs[] = {{}, {4}}; + }; +}; diff --git a/addons/reload/config.cpp b/addons/reload/config.cpp index 21e28d35f58..1cd11c5b179 100644 --- a/addons/reload/config.cpp +++ b/addons/reload/config.cpp @@ -14,6 +14,7 @@ class CfgPatches { }; }; +#include "ACE_Arsenal_Stats.hpp" #include "CfgVehicles.hpp" #include "CfgMagazines.hpp" #include "CfgEventHandlers.hpp" diff --git a/addons/reloadlaunchers/ACE_Arsenal_Stats.hpp b/addons/reloadlaunchers/ACE_Arsenal_Stats.hpp new file mode 100644 index 00000000000..b894042d680 --- /dev/null +++ b/addons/reloadlaunchers/ACE_Arsenal_Stats.hpp @@ -0,0 +1,13 @@ +class EGVAR(arsenal,stats) { + class statBase; + class ADDON: statBase { + scope = 2; + priority = -1; + stats[] = {QGVAR(enabled)}; + displayName = CSTRING(featureDescription); + showText = 1; + textStatement = QUOTE(localize QUOTE(ELSTRING(Common,Enabled))); + condition = QUOTE(params[ARR_2('_stat', '_config')]; (getNumber (_config >> _stat select 0)) == 1); + tabs[] = {{2}, {}}; + }; +}; diff --git a/addons/reloadlaunchers/config.cpp b/addons/reloadlaunchers/config.cpp index bf9a5fa9289..30407c4d7ba 100644 --- a/addons/reloadlaunchers/config.cpp +++ b/addons/reloadlaunchers/config.cpp @@ -14,6 +14,7 @@ class CfgPatches { }; }; +#include "ACE_Arsenal_Stats.hpp" #include "CfgEventHandlers.hpp" #include "CfgVehicles.hpp" #include "CfgWeapons.hpp" diff --git a/addons/reloadlaunchers/stringtable.xml b/addons/reloadlaunchers/stringtable.xml index f69bcabf295..4c6430f3230 100644 --- a/addons/reloadlaunchers/stringtable.xml +++ b/addons/reloadlaunchers/stringtable.xml @@ -107,5 +107,8 @@ Wyrzutnia nie mogła być załadowana 발사기를 장전할 수 없습니다. + + Buddy Loading + From c407aebe6a26d6b98374a174672a69b312cadb80 Mon Sep 17 00:00:00 2001 From: amsteadrayle <2516219+amsteadrayle@users.noreply.github.com> Date: Wed, 11 Oct 2023 05:23:31 -0400 Subject: [PATCH 007/287] Medical GUI - Display qualitative bleed rate in injury list (#9469) * Display qualitative bleed rate in injury list * Remove debug print * Reference existing vitals metrics in bleed rates * Use `default` case for highest bleed rate Co-authored-by: PabstMirror --------- Co-authored-by: PabstMirror --- .../medical_engine/script_macros_medical.hpp | 7 +++++++ .../functions/fnc_updateInjuryList.sqf | 21 ++++++++++++++++++- addons/medical_gui/stringtable.xml | 12 +++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/addons/medical_engine/script_macros_medical.hpp b/addons/medical_engine/script_macros_medical.hpp index 1f1f2c5abaa..56c1eec4016 100644 --- a/addons/medical_engine/script_macros_medical.hpp +++ b/addons/medical_engine/script_macros_medical.hpp @@ -76,6 +76,13 @@ #define DAMAGE_BLUE_THRESHOLD 0.8 #define DAMAGE_TOTAL_COLORS 10 +// Qualitative bleed rate thresholds as a fraction of knock out blood loss +// Note that half of knock out blood loss is considered unstable, and knock out blood loss is considered critical +#define BLEED_RATE_SLOW 0.1 // Slow - One fifth of unstable blood loss +#define BLEED_RATE_MODERATE 0.5 // Moderate - Vitals considered stable +#define BLEED_RATE_SEVERE 1.0 // Severe - Vitals considered unstable +// Massive - Vitals considered critical + // Pain above which a unit can go unconscious upon receiving damage #define PAIN_UNCONSCIOUS EGVAR(medical,painUnconsciousThreshold) diff --git a/addons/medical_gui/functions/fnc_updateInjuryList.sqf b/addons/medical_gui/functions/fnc_updateInjuryList.sqf index 8a0d066170d..8a09647740d 100644 --- a/addons/medical_gui/functions/fnc_updateInjuryList.sqf +++ b/addons/medical_gui/functions/fnc_updateInjuryList.sqf @@ -24,7 +24,26 @@ private _nonissueColor = [1, 1, 1, 0.33]; // Indicate if unit is bleeding at all if (IS_BLEEDING(_target)) then { - _entries pushBack [localize LSTRING(Status_Bleeding), [1, 0, 0, 1]]; + // Give a qualitative description of the rate of bleeding + private _cardiacOutput = [_target] call EFUNC(medical_status,getCardiacOutput); + private _bleedRate = GET_BLOOD_LOSS(_target); + private _bleedRateKO = BLOOD_LOSS_KNOCK_OUT_THRESHOLD * (_cardiacOutput max 0.05); + // Use nonzero minimum cardiac output to prevent all bleeding showing as massive during cardiac arrest + + switch (true) do { + case (_bleedRate < _bleedRateKO * BLEED_RATE_SLOW): { + _entries pushBack [localize LSTRING(Bleed_Rate1), [1, 1, 0, 1]]; + }; + case (_bleedRate < _bleedRateKO * BLEED_RATE_MODERATE): { + _entries pushBack [localize LSTRING(Bleed_Rate2), [1, 0.67, 0, 1]]; + }; + case (_bleedRate < _bleedRateKO * BLEED_RATE_SEVERE): { + _entries pushBack [localize LSTRING(Bleed_Rate3), [1, 0.33, 0, 1]]; + }; + default { + _entries pushBack [localize LSTRING(Bleed_Rate4), [1, 0, 0, 1]]; + }; + }; } else { _entries pushBack [localize LSTRING(Status_Nobleeding), _nonissueColor]; }; diff --git a/addons/medical_gui/stringtable.xml b/addons/medical_gui/stringtable.xml index 59f0ce8307e..407e0c4db23 100644 --- a/addons/medical_gui/stringtable.xml +++ b/addons/medical_gui/stringtable.xml @@ -969,6 +969,18 @@ No bleeding + + Slow bleeding + + + Moderate bleeding + + + Severe bleeding + + + Massive bleeding + in Pain hat Schmerzen From 008cd5a85135aabc51b35b394394cb4a02d3ffb9 Mon Sep 17 00:00:00 2001 From: amsteadrayle <2516219+amsteadrayle@users.noreply.github.com> Date: Wed, 11 Oct 2023 05:25:28 -0400 Subject: [PATCH 008/287] Medical GUI - Add outline to selected body part in Medical Menu (#9471) * Add functionality to show selected body part on body image * Add controls for patient information display * Receive selected body part through argument * Improve selected check * Add body part outline textures * Second pass at outline textures * Third pass at outline textures * Add setting for outline color * Fix capitalization Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> * Fix capitalization Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> --------- Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> --- .../data/body_image/arm_left_s.paa | Bin 0 -> 27247 bytes .../data/body_image/arm_right_s.paa | Bin 0 -> 27209 bytes addons/medical_gui/data/body_image/head_s.paa | Bin 0 -> 25893 bytes .../data/body_image/leg_left_s.paa | Bin 0 -> 28342 bytes .../data/body_image/leg_right_s.paa | Bin 0 -> 28406 bytes .../medical_gui/data/body_image/torso_s.paa | Bin 0 -> 27341 bytes .../fnc_displayPatientInformation.sqf | 2 +- addons/medical_gui/functions/fnc_menuPFH.sqf | 2 +- .../functions/fnc_updateBodyImage.sqf | 24 +++++---- addons/medical_gui/gui.hpp | 50 ++++++++++++++++++ addons/medical_gui/initSettings.sqf | 9 ++++ addons/medical_gui/script_component.hpp | 7 +++ addons/medical_gui/stringtable.xml | 6 +++ 13 files changed, 89 insertions(+), 11 deletions(-) create mode 100644 addons/medical_gui/data/body_image/arm_left_s.paa create mode 100644 addons/medical_gui/data/body_image/arm_right_s.paa create mode 100644 addons/medical_gui/data/body_image/head_s.paa create mode 100644 addons/medical_gui/data/body_image/leg_left_s.paa create mode 100644 addons/medical_gui/data/body_image/leg_right_s.paa create mode 100644 addons/medical_gui/data/body_image/torso_s.paa diff --git a/addons/medical_gui/data/body_image/arm_left_s.paa b/addons/medical_gui/data/body_image/arm_left_s.paa new file mode 100644 index 0000000000000000000000000000000000000000..58682a5a73cdd090071f698c78925e5df50540f8 GIT binary patch literal 27247 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 literal 0 HcmV?d00001 diff --git a/addons/medical_gui/data/body_image/arm_right_s.paa b/addons/medical_gui/data/body_image/arm_right_s.paa new file mode 100644 index 0000000000000000000000000000000000000000..613ff387ffab4eae098962ba0dff909618a7c895 GIT binary patch literal 27209 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 literal 0 HcmV?d00001 diff --git a/addons/medical_gui/data/body_image/head_s.paa b/addons/medical_gui/data/body_image/head_s.paa new file mode 100644 index 0000000000000000000000000000000000000000..f4daa0a9b6113a855e0e7c4c0d17fdda6063d5e0 GIT binary patch literal 25893 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 EHz4fT&Hw-a literal 0 HcmV?d00001 diff --git a/addons/medical_gui/data/body_image/leg_right_s.paa b/addons/medical_gui/data/body_image/leg_right_s.paa new file mode 100644 index 0000000000000000000000000000000000000000..1b9bf0ba64c3419f12e0618f17f5859f64dc6ad4 GIT binary patch literal 28406 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 * 1: Target + * 2: Body part * * Return Value: * None * * Example: - * [CONTROL, _target] call ace_medical_gui_fnc_updateBodyImage + * [CONTROL, _target, 0] call ace_medical_gui_fnc_updateBodyImage * * Public: No */ -params ["_ctrlGroup", "_target"]; +params ["_ctrlGroup", "_target", "_selectionN"]; // Get tourniquets, damage, and blood loss for target private _tourniquets = GET_TOURNIQUETS(_target); @@ -34,7 +35,12 @@ private _bodyPartBloodLoss = [0, 0, 0, 0, 0, 0]; } forEach GET_OPEN_WOUNDS(_target); { - _x params ["_bodyPartIDC", ["_tourniquetIDC", -1], ["_fractureIDC", -1]]; + _x params ["_bodyPartIDC", "_selectedIDC", ["_tourniquetIDC", -1], ["_fractureIDC", -1]]; + + private _selected = _forEachIndex == _selectionN; + private _ctrlSelected = _ctrlGroup controlsGroupCtrl _selectedIDC; + _ctrlSelected ctrlSetTextColor GVAR(bodypartOutlineColor); + _ctrlSelected ctrlShow _selected; // Show or hide the tourniquet icon if (_tourniquetIDC != -1) then { @@ -92,10 +98,10 @@ private _bodyPartBloodLoss = [0, 0, 0, 0, 0, 0]; private _ctrlBodyPart = _ctrlGroup controlsGroupCtrl _bodyPartIDC; _ctrlBodyPart ctrlSetTextColor _bodyPartColor; } forEach [ - [IDC_BODY_HEAD], - [IDC_BODY_TORSO], - [IDC_BODY_ARMLEFT, IDC_BODY_ARMLEFT_T, IDC_BODY_ARMLEFT_B], - [IDC_BODY_ARMRIGHT, IDC_BODY_ARMRIGHT_T, IDC_BODY_ARMRIGHT_B], - [IDC_BODY_LEGLEFT, IDC_BODY_LEGLEFT_T, IDC_BODY_LEGLEFT_B], - [IDC_BODY_LEGRIGHT, IDC_BODY_LEGRIGHT_T, IDC_BODY_LEGRIGHT_B] + [IDC_BODY_HEAD, IDC_BODY_HEAD_S], + [IDC_BODY_TORSO, IDC_BODY_TORSO_S], + [IDC_BODY_ARMLEFT, IDC_BODY_ARMLEFT_S, IDC_BODY_ARMLEFT_T, IDC_BODY_ARMLEFT_B], + [IDC_BODY_ARMRIGHT, IDC_BODY_ARMRIGHT_S, IDC_BODY_ARMRIGHT_T, IDC_BODY_ARMRIGHT_B], + [IDC_BODY_LEGLEFT, IDC_BODY_LEGLEFT_S, IDC_BODY_LEGLEFT_T, IDC_BODY_LEGLEFT_B], + [IDC_BODY_LEGRIGHT, IDC_BODY_LEGRIGHT_S, IDC_BODY_LEGRIGHT_T, IDC_BODY_LEGRIGHT_B] ]; diff --git a/addons/medical_gui/gui.hpp b/addons/medical_gui/gui.hpp index e0f836f0584..cb7ba0f4020 100644 --- a/addons/medical_gui/gui.hpp +++ b/addons/medical_gui/gui.hpp @@ -82,6 +82,32 @@ class GVAR(BodyImage): RscControlsGroupNoScrollbars { idc = IDC_BODY_LEGRIGHT_T; text = QPATHTOF(data\body_image\leg_right_t.paa); }; + class HeadS: Background { + idc = IDC_BODY_HEAD_S; + text = QPATHTOF(data\body_image\head_s.paa); + colorText[] = {1.0, 1.0, 1.0, 1.0}; + show = 0; + }; + class TorsoS: HeadS { + idc = IDC_BODY_TORSO_S; + text = QPATHTOF(data\body_image\torso_s.paa); + }; + class ArmLeftS: HeadS { + idc = IDC_BODY_ARMLEFT_S; + text = QPATHTOF(data\body_image\arm_left_s.paa); + }; + class ArmRightS: HeadS { + idc = IDC_BODY_ARMRIGHT_S; + text = QPATHTOF(data\body_image\arm_right_s.paa); + }; + class LegLeftS: HeadS { + idc = IDC_BODY_LEGLEFT_S; + text = QPATHTOF(data\body_image\leg_left_s.paa); + }; + class LegRightS: HeadS { + idc = IDC_BODY_LEGRIGHT_S; + text = QPATHTOF(data\body_image\leg_right_s.paa); + }; }; }; @@ -584,6 +610,30 @@ class RscTitles { w = QUOTE(POS_W(8.5)); h = QUOTE(POS_H(8.5)); }; + class HeadS: HeadS { + w = QUOTE(POS_W(8.5)); + h = QUOTE(POS_H(8.5)); + }; + class TorsoS: TorsoS { + w = QUOTE(POS_W(8.5)); + h = QUOTE(POS_H(8.5)); + }; + class ArmLeftS: ArmLeftS { + w = QUOTE(POS_W(8.5)); + h = QUOTE(POS_H(8.5)); + }; + class ArmRightS: ArmRightS { + w = QUOTE(POS_W(8.5)); + h = QUOTE(POS_H(8.5)); + }; + class LegLeftS: LegLeftS { + w = QUOTE(POS_W(8.5)); + h = QUOTE(POS_H(8.5)); + }; + class LegRightS: LegRightS { + w = QUOTE(POS_W(8.5)); + h = QUOTE(POS_H(8.5)); + }; }; }; class InjuriesLabel: RscText { diff --git a/addons/medical_gui/initSettings.sqf b/addons/medical_gui/initSettings.sqf index 1a408887aff..e9ba1c2068b 100644 --- a/addons/medical_gui/initSettings.sqf +++ b/addons/medical_gui/initSettings.sqf @@ -127,6 +127,15 @@ private _categoryColors = [ELSTRING(medical,Category), format ["| %1 |", LELSTRI true // isGlobal ] call CBA_fnc_addSetting; +[ + QGVAR(bodyPartOutlineColor), + "COLOR", + [LSTRING(bodyPartOutlineColor_DisplayName), LSTRING(bodyPartOutlineColor_Description)], + [ELSTRING(medical,Category), LSTRING(SubCategory)], + [1.00, 1.00, 1.00, 1], + false +] call CBA_fnc_addSetting; + [ QGVAR(peekMedicalInfoReleaseDelay), "TIME", diff --git a/addons/medical_gui/script_component.hpp b/addons/medical_gui/script_component.hpp index 62c38447ee4..eb46b19aeda 100644 --- a/addons/medical_gui/script_component.hpp +++ b/addons/medical_gui/script_component.hpp @@ -68,6 +68,13 @@ #define IDC_BODY_ARMRIGHT_B 6060 #define IDC_BODY_LEGLEFT_B 6065 #define IDC_BODY_LEGRIGHT_B 6070 +#define IDC_BODY_GROUP_S 6075 +#define IDC_BODY_HEAD_S 6080 +#define IDC_BODY_TORSO_S 6085 +#define IDC_BODY_ARMLEFT_S 6090 +#define IDC_BODY_ARMRIGHT_S 6095 +#define IDC_BODY_LEGLEFT_S 6100 +#define IDC_BODY_LEGRIGHT_S 6105 #define IDC_TRIAGE_STATUS 7000 #define IDC_TRIAGE_SELECT 7100 diff --git a/addons/medical_gui/stringtable.xml b/addons/medical_gui/stringtable.xml index 407e0c4db23..3224c0fc432 100644 --- a/addons/medical_gui/stringtable.xml +++ b/addons/medical_gui/stringtable.xml @@ -1305,6 +1305,12 @@ Zeigen Sie das erlittene Trauma in der Verletzungsliste an. 부상 목록에 발생한 외상을 표시합니다. + + Body Part Outline Color + + + Color of outline around selected body part. + Minor Trauma Traumatismo Leve From 119d8bce5d74f8a4a2f5db7d5f3fcd23bb968f96 Mon Sep 17 00:00:00 2001 From: amsteadrayle <2516219+amsteadrayle@users.noreply.github.com> Date: Wed, 11 Oct 2023 07:40:13 -0400 Subject: [PATCH 009/287] Medical GUI - Change default body color to improve contrast (#9476) Change default body color to improve contrast --- addons/medical_gui/initSettings.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/medical_gui/initSettings.sqf b/addons/medical_gui/initSettings.sqf index e9ba1c2068b..1d87de401ed 100644 --- a/addons/medical_gui/initSettings.sqf +++ b/addons/medical_gui/initSettings.sqf @@ -57,7 +57,7 @@ * See: https://gka.github.io/palettes */ private _bloodLossColors = [ - [1.00, 1.00, 1.00, 1], + [0.00, 0.00, 0.00, 1], [1.00, 0.95, 0.64, 1], [1.00, 0.87, 0.46, 1], [1.00, 0.80, 0.33, 1], @@ -74,7 +74,7 @@ private _bloodLossColors = [ * See: https://gka.github.io/palettes */ private _damageColors = [ - [1.00, 1.00, 1.00, 1], + [0.00, 0.00, 0.00, 1], [0.75, 0.95, 1.00, 1], [0.62, 0.86, 1.00, 1], [0.54, 0.77, 1.00, 1], From 176482381ad2222502157933c0cd622f2a049da2 Mon Sep 17 00:00:00 2001 From: Hypoxic <60307173+hypoxia125@users.noreply.github.com> Date: Wed, 11 Oct 2023 16:53:10 -0400 Subject: [PATCH 010/287] Field Manual - Add Framework (#9320) * Field Manual Framework Created barebones framework for addition of the Field Manual * Created Stringtable.xml Created Stringtable.xml Created a few strings... more to come * Update addons/fieldmanual/config.cpp Moved opening brace Co-authored-by: Mike-MF * Update addons/fieldmanual/config.cpp new lines at end of file Co-authored-by: Mike-MF * update stringtable.xml Added arguments to ACE_Field_Rations_Base Added strings for descriptions of subclasses * update stringtable.xml Added medical item documentation Added field ration documentation * Update stringtable.xml Added fortify tool documentation * updated stringtable.xml and cfgHints.hpp Added item documentation Cleaned up other strings Added additional arguments and made them universal * updated/reordered contents. added images Reordered CfgHints.hpp Added Range Tables string Reordered stringtable Added images for inline use * changed indentation style changed indentation style to guidelines added empty line to the end of each file * Update addons/fieldmanual/CfgHints.hpp remove redundant includes Co-authored-by: PabstMirror * Update addons/fieldmanual/CfgHintCategories.hpp remove redundant includes Co-authored-by: PabstMirror * Update stringtable.xml added explosives string - no image yet * Update stringtable.xml added dead man's switch - no image as of yet * Update addons/fieldmanual/script_component.hpp Co-authored-by: jonpas * Update addons/fieldmanual/script_component.hpp Co-authored-by: jonpas * Update addons/fieldmanual/stringtable.xml Co-authored-by: jonpas * Update stringtable.xml Removed containers Modified table to 4 space indentation Started using Tabler * update cfghints and stringtable moved the fortify tool to items and removed it's specialized class added DAGR and MicroDAGR strings - no image * restructure CfgHints.cpp - added additional arguments + placeholders for forward compatibility Removed images and img from strings - will add in a different PR Stringtable.xml - added 99% of content * update strings updated stringtables consolidated cfghint base classes * cfghints fixed multiline string code * Update CfgHints.hpp Missed trailing \ * update cfghints.hpp fixed leading \ still trying to get the pboproject to like it * Update stringtable.xml deleted original stringtable entry due to error with Arma/Vlidate (pull_request) * Update addons/fieldmanual/script_component.hpp Co-authored-by: Filip Maciejewski * Update addons/fieldmanual/CfgHintCategories.hpp Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> * Update addons/fieldmanual/stringtable.xml Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> * Update addons/fieldmanual/stringtable.xml Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> * Update addons/fieldmanual/stringtable.xml Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> * Update addons/fieldmanual/stringtable.xml Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> * Update addons/fieldmanual/stringtable.xml Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> * Update addons/fieldmanual/stringtable.xml Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> * Update addons/fieldmanual/stringtable.xml Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> * Update stringtable.xml changed structures for spray paint to surfaces * Apply suggestions from code review Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> * Dynamically get item names * stringtables, better unbound key handling * disable preprocess (rip tools) * bound key change * standardize on medical keybinds * fix medial menu keybind --------- Co-authored-by: Hypoxic Co-authored-by: Mike-MF Co-authored-by: PabstMirror Co-authored-by: jonpas Co-authored-by: Filip Maciejewski Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> Co-authored-by: LinkIsGrim --- AUTHORS.txt | 1 + addons/fieldmanual/$PBOPREFIX$ | 1 + addons/fieldmanual/CfgEventHandlers.hpp | 5 + addons/fieldmanual/CfgHintCategories.hpp | 5 + addons/fieldmanual/CfgHints.hpp | 330 ++++++++++++++++++ addons/fieldmanual/XEH_PREP.hpp | 4 + addons/fieldmanual/XEH_preStart.sqf | 3 + addons/fieldmanual/addon.toml | 2 + addons/fieldmanual/config.cpp | 19 + .../fieldmanual/functions/fnc_getItemName.sqf | 23 ++ .../functions/fnc_getKeybindName.sqf | 34 ++ addons/fieldmanual/script_component.hpp | 19 + addons/fieldmanual/stringtable.xml | 293 ++++++++++++++++ 13 files changed, 739 insertions(+) create mode 100644 addons/fieldmanual/$PBOPREFIX$ create mode 100644 addons/fieldmanual/CfgEventHandlers.hpp create mode 100644 addons/fieldmanual/CfgHintCategories.hpp create mode 100644 addons/fieldmanual/CfgHints.hpp create mode 100644 addons/fieldmanual/XEH_PREP.hpp create mode 100644 addons/fieldmanual/XEH_preStart.sqf create mode 100644 addons/fieldmanual/addon.toml create mode 100644 addons/fieldmanual/config.cpp create mode 100644 addons/fieldmanual/functions/fnc_getItemName.sqf create mode 100644 addons/fieldmanual/functions/fnc_getKeybindName.sqf create mode 100644 addons/fieldmanual/script_component.hpp create mode 100644 addons/fieldmanual/stringtable.xml diff --git a/AUTHORS.txt b/AUTHORS.txt index c51fbe52fca..5e7d48af55e 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -113,6 +113,7 @@ havena Hawkins Head Hybrid V +Hypoxic JasperRab JDT john681611 diff --git a/addons/fieldmanual/$PBOPREFIX$ b/addons/fieldmanual/$PBOPREFIX$ new file mode 100644 index 00000000000..b080a6d6b73 --- /dev/null +++ b/addons/fieldmanual/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\fieldmanual diff --git a/addons/fieldmanual/CfgEventHandlers.hpp b/addons/fieldmanual/CfgEventHandlers.hpp new file mode 100644 index 00000000000..0afdef638f8 --- /dev/null +++ b/addons/fieldmanual/CfgEventHandlers.hpp @@ -0,0 +1,5 @@ +class Extended_PreStart_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_SCRIPT(XEH_preStart)); + }; +}; diff --git a/addons/fieldmanual/CfgHintCategories.hpp b/addons/fieldmanual/CfgHintCategories.hpp new file mode 100644 index 00000000000..3a917c9c9c3 --- /dev/null +++ b/addons/fieldmanual/CfgHintCategories.hpp @@ -0,0 +1,5 @@ +class CfgHintCategories { + class ACE_FieldManual { + displayName = CSTRING(HintCategory_FieldManual_DisplayName); + }; +}; diff --git a/addons/fieldmanual/CfgHints.hpp b/addons/fieldmanual/CfgHints.hpp new file mode 100644 index 00000000000..7b86ba89b6c --- /dev/null +++ b/addons/fieldmanual/CfgHints.hpp @@ -0,0 +1,330 @@ + +/* + Preferred Image Size = 256x256 + Can Embed Images Into Description = 1024x512 + - Shadow = '0' + - Size = '9' +*/ + +class CfgHints { + class ACE_FieldManual_Base { + arguments[] = { + // INDENT - %11 + "' '", + // SELF INTERACT KEYBIND - %12 + QUOTE([ARR_2('ACE3 Common', QQEGVAR(interact_menu,selfInteractKey))] call FUNC(getKeybindName)), + // INTERACT KEYBIND - %13 + QUOTE([ARR_2('ACE3 Common', QQEGVAR(interact_menu,interactKey))] call FUNC(getKeybindName)) + }; + image = "\z\ace\addons\common\data\logo_ace3_ca.paa"; + tip = "ACE Wiki"; + }; + class ACE_Items { + displayName = CSTRING(Items_DisplayName); + category = "ACE_FieldManual"; + + class ACE_ATragMX: ACE_FieldManual_Base { + logicalOrder = 1; + arguments[] += {QUOTE('ACE_ATragMX' call FUNC(getItemName))}; + displayName = "%14"; + displayNameShort = CSTRING(Items_ATragMX_ShortName); + description = CSTRING(Items_ATragMX_Description); + tip = "ATragMX Wiki"; + }; + class ACE_BodyBag: ACE_FieldManual_Base { + logicalOrder = 2; + arguments[] += {QUOTE('ACE_BodyBag' call FUNC(getItemName))}; + displayName = "%14"; + displayNameShort = CSTRING(Items_BodyBag_ShortName); + description = CSTRING(Items_BodyBag_Description); + }; + class ACE_CableTie: ACE_FieldManual_Base { + logicalOrder = 3; + arguments[] += {QUOTE('ACE_CableTie' call FUNC(getItemName))}; + displayName = "%14"; + displayNameShort = CSTRING(Items_CableTie_ShortName); + description = CSTRING(Items_CableTie_Description); + tip = "Captives Wiki"; + }; + class ACE_Cellphone: ACE_FieldManual_Base { + logicalOrder = 4; + arguments[] += {QUOTE('ACE_Cellphone' call FUNC(getItemName))}; + displayName = "%14"; + displayNameShort = CSTRING(Items_Cellphone_ShortName); + description = CSTRING(Items_Cellphone_Description); + tip = "Explosives Wiki"; + }; + class ACE_Chemlight_Shield: ACE_FieldManual_Base { + logicalOrder = 5; + arguments[] += {QUOTE('ACE_Chemlight_Shield' call FUNC(getItemName))}; + displayName = "%14"; + displayNameShort = CSTRING(Items_Chemlight_Shield_ShortName); + description = CSTRING(Items_Chemlight_Shield_Description); + tip = "Chemlights Wiki"; + }; + class ACE_Clackers: ACE_FieldManual_Base { + logicalOrder = 6; + arguments[] += {QUOTE('ACE_Clacker' call FUNC(getItemName))}; + displayName = "%14"; + displayNameShort = CSTRING(Items_Clackers_ShortName); + description = CSTRING(Items_Clackers_Description); + tip = "Explosives Wiki"; + }; + class ACE_DAGR: ACE_FieldManual_Base { + logicalOrder = 7; + arguments[] += {QUOTE('ACE_DAGR' call FUNC(getItemName))}; + displayName = "%14"; + displayNameShort = CSTRING(Items_DAGR_ShortName); + description = CSTRING(Items_DAGR_Description); + tip = "DAGR Wiki"; + }; + class ACE_DeadManSwitch: ACE_FieldManual_Base { + logicalOrder = 8; + arguments[] += {QUOTE('ACE_DeadManSwitch' call FUNC(getItemName))}; + displayName = "%14"; + displayNameShort = CSTRING(Items_DeadManSwitch_ShortName); + description = CSTRING(Items_DeadManSwitch_Description); + tip = "Explosives Wiki"; + }; + class ACE_DefusalKit: ACE_FieldManual_Base { + logicalOrder = 9; + arguments[] += {QUOTE('ACE_DefusalKit' call FUNC(getItemName))}; + displayName = "%14"; + displayNameShort = CSTRING(Items_DefusalKit_ShortName); + description = CSTRING(Items_DefusalKit_Description); + tip = "Explosives Wiki"; + }; + class ACE_EarPlugs: ACE_FieldManual_Base { + logicalOrder = 10; + arguments[] += {QUOTE('ACE_EarPlugs' call FUNC(getItemName))}; + displayName = "%14"; + displayNameShort = CSTRING(Items_EarPlugs_ShortName); + description = CSTRING(Items_EarPlugs_Description); + tip = "Hearing Wiki"; + }; + class ACE_EntrenchingTool: ACE_FieldManual_Base { + logicalOrder = 11; + arguments[] += {QUOTE('ACE_EntrenchingTool' call FUNC(getItemName))}; + displayName = "%14"; + displayNameShort = CSTRING(Items_EntrenchingTool_ShortName); + description = CSTRING(Items_EntrenchingTool_Description); + }; + class ACE_Flashlights: ACE_FieldManual_Base { + logicalOrder = 12; + displayName = CSTRING(Items_Flashlights_DisplayName); + displayNameShort = CSTRING(Items_Flashlights_ShortName); + description = CSTRING(Items_Flashlights_Description); + tip = "Flashlights Wiki"; + }; + class ACE_FortifyTool: ACE_FieldManual_Base { + logicalOrder = 13; + arguments[] += {QUOTE('ACE_HuntIR_Monitor' call FUNC(getItemName))}; + displayName = "%14"; + displayNameShort = CSTRING(Items_FortifyTool_ShortName); + description = CSTRING(Items_FortifyTool_Description); + tip = "Fortify Wiki"; + }; + class ACE_HuntIR_Monitor: ACE_FieldManual_Base { + logicalOrder = 14; + arguments[] += {QUOTE('ACE_CableTie' call FUNC(getItemName))}; + displayName = "%14"; + displayNameShort = CSTRING(Items_HuntIR_Monitor_ShortName); + description = CSTRING(Items_HuntIR_Monitor_Description); + tip = "HuntIR Wiki"; + }; + class ACE_IR_Strobe: ACE_FieldManual_Base { + logicalOrder = 15; + arguments[] += {QUOTE('ACE_IR_Strobe_Item' call FUNC(getItemName))}; + displayName = "%14"; + displayNameShort = CSTRING(Items_IR_Strobe_ShortName); + description = CSTRING(Items_IR_Strobe_Description); + }; + class ACE_Kestrel4500: ACE_FieldManual_Base { + logicalOrder = 16; + arguments[] += {QUOTE('ACE_Kestrel4500' call FUNC(getItemName))}; + displayName = "%14"; + displayNameShort = CSTRING(Items_Kestrel4500_ShortName); + description = CSTRING(Items_Kestrel4500_Description); + tip = "Kestrel 4500 Wiki"; + }; + class ACE_Lockpick: ACE_FieldManual_Base { + logicalOrder = 17; + arguments[] += {QUOTE('ACE_key_lockpick' call FUNC(getItemName))}; + displayName = "%14"; + displayNameShort = CSTRING(Items_Lockpick_ShortName); + description = CSTRING(Items_Lockpick_Description); + tip = "Vehicle Lock Wiki"; + }; + class ACE_MapTools: ACE_FieldManual_Base { + logicalOrder = 18; + arguments[] += {QUOTE('ACE_MapTools' call FUNC(getItemName))}; + displayName = "%14"; + displayNameShort = CSTRING(Items_MapTools_ShortName); + description = CSTRING(Items_MapTools_Description); + }; + class ACE_MicroDAGR: ACE_FieldManual_Base { + logicalOrder = 19; + arguments[] += {QUOTE('ACE_microDAGR' call FUNC(getItemName))}; + displayName = "%14"; + displayNameShort = CSTRING(Items_MicroDAGR_ShortName); + description = CSTRING(Items_MicroDAGR_Description); + tip = "MicroDAGR Wiki"; + }; + // Combine all range tables under one roof [mortar, artillery, rifle] + class ACE_RangeTables: ACE_FieldManual_Base { + logicalOrder = 20; + displayName = CSTRING(Items_RangeTables_DisplayName); + displayNameShort = CSTRING(Items_RangeTables_ShortName); + description = CSTRING(Items_RangeTables_Description); + tip = "Rangecard Wiki"; + }; + class ACE_Ropes: ACE_FieldManual_Base { + logicalOrder = 21; + displayName = CSTRING(Items_Ropes_DisplayName); + displayNameShort = CSTRING(Items_Ropes_ShortName); + description = CSTRING(Items_Ropes_Description); + }; + class ACE_Sandbag: ACE_FieldManual_Base { + logicalOrder = 22; + arguments[] += {QUOTE('ACE_Sandbag_empty' call FUNC(getItemName))}; + displayName = "%14"; + displayNameShort = CSTRING(Items_Sandbag_ShortName); + description = CSTRING(Items_Sandbag_Description); + tip = "Sandbag Wiki"; + }; + class ACE_SpareBarrels: ACE_FieldManual_Base { + logicalOrder = 23; + arguments[] += {QUOTE('ACE_SpareBarrel_Item' call FUNC(getItemName))}; + displayName = "%14"; + displayNameShort = CSTRING(Items_SpareBarrels_ShortName); + description = CSTRING(Items_SpareBarrels_Description); + tip = "Overheating Wiki"; + }; + class ACE_SprayPaint: ACE_FieldManual_Base { + logicalOrder = 24; + displayName = CSTRING(Items_SprayPaint_DisplayName); + displayNameShort = CSTRING(Items_SprayPaint_ShortName); + description = CSTRING(Items_SprayPaint_Description); + tip = "Tagging Wiki"; + }; + class ACE_Tripod: ACE_FieldManual_Base { + logicalOrder = 25; + arguments[] += {QUOTE('ACE_Tripod' call FUNC(getItemName))}; + displayName = "%14"; + displayNameShort = CSTRING(Items_Tripod_ShortName); + description = CSTRING(Items_Tripod_Description); + tip = "Tripod Wiki"; + }; + class ACE_UAVBattery: ACE_FieldManual_Base { + logicalOrder = 26; + arguments[] += {QUOTE('ACE_UAVBattery' call FUNC(getItemName))}; + displayName = "%14"; + displayNameShort = CSTRING(Items_UAVBattery_ShortName); + description = CSTRING(Items_UAVBattery_Description); + tip = "UAV Battery Wiki"; + }; + class ACE_VehicleKey: ACE_FieldManual_Base { + logicalOrder = 27; + displayName = CSTRING(Items_VehicleKey_DisplayName); + displayNameShort = CSTRING(Items_VehicleKey_ShortName); + description = CSTRING(Items_VehicleKey_Description); + tip = "Vehicle Lock Wiki"; + }; + class ACE_Wirecutter: ACE_FieldManual_Base { + logicalOrder = 28; + arguments[] += {QUOTE('ACE_wirecutter' call FUNC(getItemName))}; + displayName = "%14"; + displayNameShort = CSTRING(Items_Wirecutter_ShortName); + description = CSTRING(Items_Wirecutter_Description); + tip = "Wirecutter Wiki"; + }; + }; + // ACE Field Rations + class ACE_Field_Rations { + displayName = CSTRING(Field_Rations_DisplayName); + category = "ACE_FieldManual"; + + class ACE_Field_Rations_Base: ACE_FieldManual_Base { + tip = "Field Rations Wiki"; + }; + + class Hunger: ACE_Field_Rations_Base { + logicalOrder = 1; + displayName = CSTRING(Field_Rations_Hunger_DisplayName); + description = CSTRING(Field_Rations_Hunger_Description); + }; + class Thirst: ACE_Field_Rations_Base { + logicalOrder = 2; + displayName = CSTRING(Field_Rations_Thirst_DisplayName); + description = CSTRING(Field_Rations_Thirst_Description); + }; + }; + // ACE Medical + class ACE_Medical_Treatment { + displayName = CSTRING(Medical_Treatment_DisplayName); + category = "ACE_FieldManual"; + + class ACE_Medical_Treatment_Base: ACE_FieldManual_Base { + arguments[] += { + // MEDICAL MENU KEYBIND - %14 + QUOTE([ARR_2('ACE3 Common', QQEGVAR(medical_gui,openMedicalMenuKey))] call FUNC(getKeybindName)) + }; + tip = "Medical Wiki"; + }; + + class ACE_Adenosine: ACE_Medical_Treatment_Base { + logicalOrder = 1; + arguments[] += {QUOTE('ACE_adenosine' call FUNC(getItemName))}; + displayName = "%15"; + displayNameShort = CSTRING(Medical_Treatment_Adenosine_ShortName); + description = CSTRING(Medical_Treatment_Adenosine_Description); + }; + class ACE_Bandages: ACE_Medical_Treatment_Base { + logicalOrder = 2; + displayName = CSTRING(Medical_Treatment_Bandages_DisplayName); + displayNameShort = CSTRING(Medical_Treatment_Bandages_ShortName); + description = CSTRING(Medical_Treatment_Bandages_Description); + }; + class ACE_Fluids: ACE_Medical_Treatment_Base { + logicalOrder = 3; + displayName = CSTRING(Medical_Treatment_IVFluids_DisplayName); + displayNameShort = CSTRING(Medical_Treatment_IVFluids_ShortName); + description = CSTRING(Medical_Treatment_IVFluids_Description); + }; + class ACE_Epinephrine: ACE_Medical_Treatment_Base { + logicalOrder = 4; + arguments[] += {QUOTE('ACE_epinephrine' call FUNC(getItemName))}; + displayName = "%15"; + displayNameShort = CSTRING(Medical_Treatment_Epinephrine_ShortName); + description = CSTRING(Medical_Treatment_Epinephrine_Description); + }; + class ACE_PAK: ACE_Medical_Treatment_Base { + logicalOrder = 5; + arguments[] += {QUOTE('ACE_personalAidKit' call FUNC(getItemName))}; + displayName = "%15"; + displayNameShort = CSTRING(Medical_Treatment_PAK_ShortName); + description = CSTRING(Medical_Treatment_PAK_Description); + }; + class ACE_Splint: ACE_Medical_Treatment_Base { + logicalOrder = 6; + arguments[] += {QUOTE('ACE_splint' call FUNC(getItemName))}; + displayName = "%15"; + displayNameShort = CSTRING(Medical_Treatment_Splint_ShortName); + description = CSTRING(Medical_Treatment_Splint_Description); + }; + class ACE_SurgicalKit: ACE_Medical_Treatment_Base { + logicalOrder = 7; + arguments[] += {QUOTE('ACE_surgicalKit' call FUNC(getItemName))}; + displayName = "%15"; + displayNameShort = CSTRING(Medical_Treatment_SurgicalKit_ShortName); + description = CSTRING(Medical_Treatment_SurgicalKit_Description); + }; + class ACE_Tourniquet: ACE_Medical_Treatment_Base { + logicalOrder = 8; + arguments[] += {QUOTE('ACE_tourniquet' call FUNC(getItemName))}; + displayName = "%15"; + displayNameShort = CSTRING(Medical_Treatment_CAT_ShortName); + description = CSTRING(Medical_Treatment_CAT_Description); + }; + }; +}; diff --git a/addons/fieldmanual/XEH_PREP.hpp b/addons/fieldmanual/XEH_PREP.hpp new file mode 100644 index 00000000000..425e79b6e9e --- /dev/null +++ b/addons/fieldmanual/XEH_PREP.hpp @@ -0,0 +1,4 @@ +TRACE_1("",QUOTE(ADDON)); + +PREP(getItemName); +PREP(getKeybindName); diff --git a/addons/fieldmanual/XEH_preStart.sqf b/addons/fieldmanual/XEH_preStart.sqf new file mode 100644 index 00000000000..022888575ed --- /dev/null +++ b/addons/fieldmanual/XEH_preStart.sqf @@ -0,0 +1,3 @@ +#include "script_component.hpp" + +#include "XEH_PREP.hpp" diff --git a/addons/fieldmanual/addon.toml b/addons/fieldmanual/addon.toml new file mode 100644 index 00000000000..7cfef775ee7 --- /dev/null +++ b/addons/fieldmanual/addon.toml @@ -0,0 +1,2 @@ +[preprocess] +enabled = false diff --git a/addons/fieldmanual/config.cpp b/addons/fieldmanual/config.cpp new file mode 100644 index 00000000000..19cdbcbf179 --- /dev/null +++ b/addons/fieldmanual/config.cpp @@ -0,0 +1,19 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + name = COMPONENT_NAME; + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_common"}; + author = ECSTRING(common,ACETeam); + authors[] = {"Hypoxic"}; + url = ECSTRING(main,URL); + VERSION_CONFIG; + }; +}; + +#include "CfgEventHandlers.hpp" +#include "CfgHintCategories.hpp" +#include "CfgHints.hpp" diff --git a/addons/fieldmanual/functions/fnc_getItemName.sqf b/addons/fieldmanual/functions/fnc_getItemName.sqf new file mode 100644 index 00000000000..ed795ebd2ce --- /dev/null +++ b/addons/fieldmanual/functions/fnc_getItemName.sqf @@ -0,0 +1,23 @@ +#include "..\script_component.hpp" +/* + * Author: PabstMirror + * Gets item's localized name or indicates if not availabe + * + * Arguments: + * 0: Classname + * + * Return Value: + * + * + * Example: + * "ACE_Banana" call ace_fieldmanual_fnc_getItemName + * + * Public: No + */ +params ["_classname"]; +private _config = configFile >> "CfgWeapons" >> _classname; +if (isClass _config) then { + getText (_config >> "displayName") +} else { + format ["[N/A] - %1", _classname] +}; diff --git a/addons/fieldmanual/functions/fnc_getKeybindName.sqf b/addons/fieldmanual/functions/fnc_getKeybindName.sqf new file mode 100644 index 00000000000..726d4116200 --- /dev/null +++ b/addons/fieldmanual/functions/fnc_getKeybindName.sqf @@ -0,0 +1,34 @@ +#include "..\script_component.hpp" +/* + * Author: Hypoxic, PabstMirror + * Gets keybind name from CBA + * + * Arguments: + * 0: Addon + * 1: Key Name + * + * Return Value: + * + * + * Example: + * ["ACE3 Common", "ace_interact_menu_selfInteractKey"] call ace_fieldmanual_fnc_getKeybindName + * + * Public: No + */ + +params ["_addon", "_keyName"]; + +private _return = _keyName; +with missionNamespace do { // hint is calling from uiNamespace + private _keyInfo = [_addon, _keyName] call CBA_fnc_getKeybind; + if (!isNil "_keyInfo") then { + private _localizeInfo = _keyInfo select 8 param [0, []]; + if (_localizeInfo isEqualTo []) then { + _return = format ["%1 -> %2", _addon, _keyInfo select 2]; + } else { + _return = format ["%1 -> %2 (%3)", _addon, _keyInfo select 2, _localizeInfo call CBA_fnc_localizeKey]; + }; + }; +}; + +_return diff --git a/addons/fieldmanual/script_component.hpp b/addons/fieldmanual/script_component.hpp new file mode 100644 index 00000000000..35a77d25f97 --- /dev/null +++ b/addons/fieldmanual/script_component.hpp @@ -0,0 +1,19 @@ +#define COMPONENT fieldmanual +#define COMPONENT_BEAUTIFIED Field Manual +#include "\z\ace\addons\main\script_mod.hpp" + +// #define DEBUG_MODE_FULL +// #define DISABLE_COMPILE_CACHE +// #define ENABLE_PERFORMANCE_COUNTERS + +#ifdef DEBUG_ENABLED_FIELDMANUAL + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_FIELDMANUAL + #define DEBUG_SETTINGS DEBUG_SETTINGS_FIELDMANUAL +#endif + +#include "\z\ace\addons\main\script_macros.hpp" + +#include "\a3\ui_f\hpp\defineDIKCodes.inc" diff --git a/addons/fieldmanual/stringtable.xml b/addons/fieldmanual/stringtable.xml new file mode 100644 index 00000000000..73bff03d1c3 --- /dev/null +++ b/addons/fieldmanual/stringtable.xml @@ -0,0 +1,293 @@ + + + + + Field Rations + 戰地口糧 + 野战军粮 + Poměrové pole + Rations sur le terrain + Feld Rationen + Terepi adagok + Razioni di campo + フィールド レーション + 전투식량 + Racje polowe + Rações de campo + Полевые рационы + Raciones de campo + Gıda Ihtiyaçları + + + Hunger + + + %3Hunger%4 increases linearly with soldier's movement speed. Restore by eating food.<br/><br/>%3Usage:%4<br/>%2Pick up food.<br/>%2Use [%3%12%4] and select %3Survival%4.<br/>%2Choose an item to consume. + + + Thirst + + + %3Thirst%4 increases linearly with soldier's movement speed. Restore by drinking liquids.<br/><br/>%3Usage:%4<br/>%2Pick up a drink.<br/>%2Use [%3%12%4] and select %3Survival%4.<br/>%2Choose an item to consume. + + + Medical Treatment + + + Decrease Heart Rate + + + %3Adenosine%4 is used to decrease heart rate.<br/><br/>%3Usage:%4<br/>%2Use [%3%13%4] or [%3%14%4] and select an appendage.<br/>%2Inject %3Adenosine%4. + + + Bandages + + + Close Wounds + + + %3Bandages%4 stop bleeding and close wounds. Depending on your settings, bandages may reopen if surgery is not performed.<br/><br/>%2%3Field Dressing:%4<br/>%11<t color='#D9D900'>Average</t> In All Categories<br/>%2%3Packing Bandage:%4<br/>%11<t color='#D9D900'>Average</t> Treatment<br/>%11<t color='#E60000'>Higher</t> Reopen Chance<br/>%11<t color='#00CC00'>Longer</t> Reopen Delay<br/>%2%3Elastic Bandage:%4<br/>%11<t color='#00CC00'>Higher</t> Treatment<br/>%11<t color='#E60000'>Higher</t> Reopen Chance<br/>%11<t color='#E60000'>Shorter</t> Reopen Delay<br/>%2%3Quickclot:%4<br/>%11<t color='#E60000'>Lower</t> Treatment<br/>%11<t color='#00CC00'>Lower</t> Reopen Chance<br/>%11<t color='#00CC00'>Longer</t> Reopening Delay<br/><br/>%3Usage:%4<br/>%2Use [%3%13%4] or [%3%14%4] and select a injured body part.<br/>%2Bandage body part by selecting desired %3Bandage%4 type. + + + IV Fluids + + + Restore Blood Volume + + + %3IV fluids%4 restore lost blood volume. Blood, Plasma, and Saline are functionally the same.<br/><br/>%3Usage:%4<br/>%2Use [%3%13%4] or [%3%14%4] and select an appendage.<br/>%2Restore blood volume by selecting desired %3IV Fluid%4 type. + + + Increase Heart Rate | Wake Up Faster + + + %3Epinephrine%4 increases a patient's pulse as well as potentially decreasing the time between consciousnesss checks (effectively reducing the time needed for the patient to wake up).<br/><br/>%3Usage%4<br/>%2Use [%3%13%4] or [%3%14%4] and select an appendage.<br/>%2Inject %3Epinephrine%4. + + + Restore Like New + + + The %3Personal Aid Kit%4 is an item that allows a soldier to be fully healed. Independent of %3ACE Settings%4, it requires that the patient is in %3Stable Condition%4 before use.<br/><br/>%3Stable Condition%4 qualifies as:<br/>%2Unit is %3Alive%4.<br/>%2Unit is %3Conscious%4.<br/>%2Unit has no active %3Bleeding%4.<br/>%2Heart Rate >= 40.<br/>%2Systolic BP >= 60.<br/>%2Diastolic BP >= 50.<br/><br/>%3Usage:%4<br/>%2Move to appropriate location depending on %3ACE Settings%4.<br/>%2Use [%3%13%4] or [%3%14%4] and select %3Advanced Treatments%4<br/>%2Select %3Use Personal Aid Kit%4. + + + Fix Fractures + + + A %3Splint%4 is used to fix fractures. The %3Splint%4 is consumed when used.<br/><br/>%3Usage:%4<br/>%2Use [%3%13%4] or [%3%14%4] and select an affected appendage.<br/>%2Select %3Apply Splint%4. + + + Prevent Wounds From Reopening + + + A %3Surgical Kit%4 is used to prevent wounds from reopening after being bandaged. Depending on settings, it can also clear trauma.<br/><br/>%3Usage:%4<br/>%2Use [%3%13%4] or [%3%14%4] and select %3Advanced Treatment%4.<br/>%2Select %3Use Surgical Kit%4. + + + Stop Bleeding + + + A %3Tourniquet%4 stops bleeding temporarily so that a wound(s) can be bandaged. Can only be used on limbs.<br/><br/>%3Usage:%4<br/>%2Use [%3%13%4] or [%3%14%4] and select an affected appendage.<br/>%2Select %3Apply Tourniquet%4. + + + Portable, Precise, Rugged + + + The %3Horus ATragMX%4 considers atmospheric conditions, gun data, ammunition, range, speed, and muzzle velocity to calculate precise aiming solutions with %3Come-Up%4 results - and even accounts for %3Coriolis%4 and %3Spin Drift%4 effects. %3ATragMX%4, loaded on a handheld computer made by %3TDS Recon%4, is easy to use and lightning fast. The %3Recon%4 meets the rigorous %3MIL-STD-810F%4 military standard for drops, vibration, humidity, altitude and extreme temperatures.<br/><br/>%3Usage:%4<br/>Please visit the wiki page for more information. + + + Bring Out Your Dead + + + %3Body Bags%4 are used to transport dead bodies. They can be dragged and loaded into vehicles.<br/><br/>%3Usage:%4<br/>%2Approach a dead body.<br/>%2Use [%3%13%4] or [%3%14%4] and select %3Place Body In Bodybag%4. + + + Take Prisoners + + + %3Cable Ties%4 enable a soldier to capture and detain another soldier. Once apprehended, the captor gains the ability to inspect the prisoner's belongings, set them free, or accompany them to an alternate area. Transporting escorted prisoners is also possible, including loading them into vehicles if needed. Depending on your settings, units may need to surrender before being taken captive.<br/><br/>%3Usage:%4<br/>%2Approach the unit and use the [%3%13%4].<br/>%2The interaction is located around the hands in the form of a handcuffs icon.<br/>%2Repeat to release. + + + Phone In An Explosion + + + The %3Cellphone%4 is functionally a %3Clacker%4. Use it to connect and detonate an explosive device. Multiple devices can be linked to the cellphone and called within the phonebook.<br/><br/>%3Usage:%4<br/>%2Place an explosive.<br/>%2Use [%3%13%4], select %3Explosives%4, and select %3Cellphone%4.<br/>%2Open the cellphone interface with [%3%12%4].<br/>%2Navigate the phone book with the arrows and select your calling number.<br/>%2Call the number to detonate. + + + Portable Reading Lights + + + %3Chemlight Shields%4 give you the ability to read your map, even in dark environments. However, when using %3Chemlight Shields%4, you will have a slight glow around you.<br/><br/>%3Usage:%4<br/>%2Use [%3%12%4] and select %3Equipment%4.<br/>%2elect %3Chemlights%4 and %3Prepare Chemlight Shield (Color)%4.<br/>%2Open %3Map%4.<br/>%2Use [%3%12%4] and select %3Flashlights%4 where you will find your chemlight shield. + + + Remote Detonation + + + Use %3Clackers%4 to connect and detonate an explosive device. Multiple devices can be linked to a clacker and detonated on different channels.<br/><br/>%3Usage:%4<br/>%2Place an explosive.<br/>%2Use [%3%13%4], select %3Explosives%4, and select the %3Clacker%4 you wish to link to.<br/>%2Open the ACE interface with [%3%12%4].<br/>%2Select %3Explosives%4 and select a %3Clacker%4.<br/>%2Select the %3Explosive%4 you wish to detonate. + + + Navigate + + + The %3DAGR%4 is a simpler version of the %3MicroDAGR GPS%4. It has similar features but lacks the topographic and satellite imaging functions of the %3MicroDAGR GPS%4.<br/><br/>%3Usage:%4<br/>%2Equip a %3DAGR%4.<br/>%2Use [%3%12%4] and select %3Configure%4 or %3Toggle%4.<br/><br/>The following menus are available when configuring your %3DAGR:%4<br/>%11%2Data View: WIP<br/>%11%2GoTo WP: Select a waypoint to track.<br/>%11%2WP List: Add/Edit/Remove waypoints.<br/>%11%2Connect To: Connect %3DAGR%4 to the %3Vector 21 Rangefinder%4.<br/>%11%2Options + + + Explosive Revenge + + + The %3Dead Man's Switch%4 is a device that allows a soldier to detonate an %3Explosive%4 when the soldier dies.<br/><br/>%3Usage:%4<br/>%2Use [%3%12%4] and select %3Explosives%4.<br/>%2Select %3Dead Man's Switch%4 and connect the desired %3Explosive%4.<br/>%2Repeat the process and disconnect to reverse. + + + The %3Defusal Kit%4 allows defusal of explosives.<br/><br/>%3Usage:%4<br/>%2Equip a %3Defusal Kit%4.<br/>%2Safely approach an %3Explosive%4.<br/>%2Use [%3%13%4] and select %3Defuse%4. + + + Defuse Explosives + + + Protect Your Hearing + + + %3Ear Plugs%4 help prevent hearing damage from repeat loud noises near a soldier. Insert %3Ear Plugs%4 to lower volume of a soldier's environment and prevent %3Combat Deafness%4.<br/><br/>%3Usage:%4<br/>%2Use [%3%12%4] and select %3Equipment%4.<br/>%2Insert %3Ear Plugs%4. + + + Get To Cover + + + The %3Entrenching Tool%4 allows soldiers to dig trenches to help defend their position. The soldier must be on soil in order to dig a trench.<br/><br/>%3Usage:%4<br/>%2Equip an %3Entrenching Tool%4.<br/>%2Use [%3%12%4] and select %3Equipment%4.<br/>%2Select the type of trench you wish to build. + + + Flashlights + + + Illuminate Your Map + + + %3Flashlights%4 give you the ability to read your map, even in dark environments. However, when using %3Flashlights%4, you will have a slight glow around you.<br/><br/>%3Usage:%4<br/>%2On the map screen, use [%3%12%4] and select %3Flashlights%4.<br/>%2Select the %3Flashlight%4 you want to use and select %3On%4.<br/><br/>%3Available Flashlight Items%4:<br/>%2 Fulton MX-991<br/>%2 KSF-1<br/>%2 Maglite XL50<br/><br/>%3NOTE:%4<br/>Flashlight states are persistent. + + + Observe From The Skies + + + The %3High-Altitude Unit Navigated Tactical Imaging Round (HuntIR)%4 is designed to be fired from a grenade launcher. After being fired in the air, the built-in parachute will be deployed and the IR CMOS camera will activate, providing a video stream until it touches the ground or is shot down.<br/><br/>%3Usage:%4<br/>%2Equip a %3HuntIR Monitor%4 and compatible ammunition.<br/>%2Fire the %3HuntIR Round%4 as high as possible over the area you want to observe.<br/>%2Open the %3HuntIR Monitor%4.<br/>%2Use [%3%12%4], select %3Equipment%4.<br/>%2Select %3Activate HuntIR Monitor%4. + + + Track Your Team With Stealth + + + The %3IR Strobe%4 is a throwable that emits an IR light pulse intermittently. The %3IR Strobe%4 can also be attached to a soldier, making it useful for tracking teammates under night vision devices.<br/><br/>%3Usage:%4<br/>%2Use [%3%12%4] and select %3Equipment%4.<br/>%2Select %3Attach%4 and select the %3IR Strobe%4. + + + Pocket Weatherstation + + + The %3Kestrel 4500 Pocket Weather Tracker%4 is a mini weather station useful for collecting the the following weather data:<br/>%2Heading and wind direction<br/>%2Crosswind and headwind<br/>%2Altitude and barometric pressure<br/>%2Wet bulb temperature<br/>%2Humidity and dewpoint<br/>%2Density altitude<br/>%2Wind chill and temperature<br/>%2Time and date<br/>%2Minimum, maximum, and average values<br/><br/>%3Usage:%4<br/>%2Equip a %3Kestrel%4.<br/>%2Use [%3%12%4] and select %3Equipment%4.<br/>%2Select %3Open%4. + + + Triangulate Your Position + + + The %3Map Tools%4 are a set of tools that allows a soldier to measure distances and angles. Useful for land, and calculating firing solutions for artillery.<br/><br/>%3Usage:%4<br/>%2Open %3Map%4.<br/>%2Use [%3%12%4] and select %3Map Tools%4.<br/>%2 The Tool can be moved by dragging with [%3Left-Click%4] while holding [%3ALT%4]. + + + Advanced DAGR + + + The %3MicroDAGR GPS%4 is an advanced version of the %3DAGR%4. It provides position, navigation, and timing (PNT) data to include:<br/>%2Compass and heading<br/>%2Date and hour synced to the mission<br/>%2Elevation (relative to sea level)<br/>%2Current speed<br/>%2GPS with topographic and satellite view<br/>%2Creating, naming, and deleting waypoints<br/>%2Friendly identification (Requires ACE BLUFOR Tracker Setting)<br/>Connection to the Vector-21 Rangefinder for data import (waypoint creation and grid reference of ranged targets)<br/><br/>%3Usage:%4<br/>%2For usage instructions, please visit the dedicated %3MicroDAGR%4 wiki. + + + Range Tables + + + Get A Firing Solution + + + %3Range Tables%4 allow for a soldier to estimate accurate shot placement on direct or indirect targets (depending on asset). The %3Range Table%4 will automatically fill depending on the soldiers selected weapon/vehicle.<br/><br/>%3Usage:%4<br/>%2Use [%3%12%4] and select %3Equipment%4.<br/>%2Select the desired %3Range Table%4. + + + Ropes + + + Tow With Ease + + + %3Ropes%4 have multiple uses including %3Towing%4 vehicles and %3Fast Roping%4 from helicopters.<br/><br/>%3Towing:%4<br/>%2Approach a vehicle.<br/>%2Use [%3%13%4] and select %3Towing%4.<br/>%2Select rope length.<br/>%2Select attachment point on towing vehicle.<br/>%2Select attachment on towed vehicle.<br/><br/>%3Available Rope Lengths:%4<br/>%2 3.2 meters<br/>%2 6.2 meters<br/>%2 12.2 meters<br/>%2 15.2 meters<br/>%2 18.3 meters<br/>%2 27.4 meters<br/>%2 36.6 meters + + + Expand Your Fortifications + + + %3Sandbags%4 are sacks made of sturdy material, filled with sand, used for a variety of purposes such as creating barriers or providing stability in construction projects. Useful in expanding larger placed fortifications.<br/><br/>%3Usage:%4<br/>%2Equip a %3Sandbag (Empty)%4.<br/>%2Use [%3%12%4] and select %3Deploy Sandbag%4.<br/>%2Follow on-screen instructions for placement. + + + Lower Firearm Temperature + + + %3Spare Barrels%4 allow a soldier to reduce their weapon's heat significantly. After a short delay, the weapon's barrel will be swapped and its heat reduced. A soldier may also check the temperature of any barrels within their inventory. Not all weapons support swapping barrels.<br/><br/>%3Usage:%4<br/>%2Use [%3%12%4] and select %3Equipment%4.<br/>%2Select %3Swap Barrel%4.<br/>%2Resume operation after barrel swap is complete. + + + Spray Paint + + + Tag Your Territory + + + %3Spray Paint%4 is used to tag surfaces with various symbols.<br/><br/>%3Usage:%4<br/>%2Move close to a surface (wall, vehicle, ground, etc).<br/>%2Use [%3%12%4] and select %3Tag%4.<br/>%2Choose a symbol.<br/><br/>%3Available Colors:%4<br/>%2Black<br/>%2Blue<br/>%2Green<br/>%2Red + + + Brace From Anywhere + + + The %3SSWT Kit%4 is a deployable tripod that allows a soldier to brace their aim when deployed. Use it when you need an elevated shooting position and there are no other objects around.<br/><br/>%3Usage:%4<br/>%2Use [%3%12%4] and select %3Equipment%4.<br/>%2Select %3SSWT Kit%4 and follow the on screen prompts to place. + + + Keep Eyes In The Sky + + + %3UAV Batteries%4 are used to recharge a UAV's energy storage. Especially useful for small UAVs.<br/><br/>%3Usage:%4<br/>%2Equip a %3UAV Battery%4<br/>%2Approach a %3UAV%4 with its %3Engine Off%4.<br/>%2Use [%3%13%4] and select %3Recharge%4. + + + Making An Entrance + + + %3Wirecutters%4 are a tool that allows a soldier to bypass wired fencing. Useful for creating backdoor entrances into secure areas.<br/><br/>%3Usage:%4<br/>%2Move close to a fence.<br/>%2Use [%3%12%4] and select %3Cut Fence%4. + + + Items + 物品 + Objets + Objetos + Oggetti + Przedmioty + Предметы + Gegenstände + Předměty + Itens + 물품 + 物品 + アイテム + Eşyalar + + + ACE3 + + + Build Fortifications + + + The %3Fortify Tool%4 allows soldiers to build fortifications provided by their mission creator.<br/><br/>%3Usage:%4<br/>%2Pick up a %3FortifyTool%4.<br/>%2Use [%3%12%4] and select %3Fortify%4.<br/>%2Select an available fortification and follow the on screen prompts for placement. + + + Breaking and Entering + + + %3Lockpicks%4 are used to gain access to locked vehicles.<br/><br/>%3Usage:%4<br/>%2Equip a %3Lockpick%4.<br/>%2Approach a %3Locked%4 vehicle.<br/>Use [%3%13%4] and select %3Lockpick Vehicle%4.<br/><br/><t underline='1'>%3Note:%4</t> Lockpicks and keys are only available via scripting or ACE Vehicle Key modules. + + + Vehicle Keys + + + Lock/Unlock Vehicles + + + %3Vehicle Keys%4 are used to lock/unlock your vehicles. Vehicle keys can exist for the whole side, or keys can be created for a particular vehicle itself.<br/><br/>%3Usage:%4<br/>%2Equip a %3Vehicle Key%4.<br/>%2Approach the vehicle that the key belongs to.<br/>Use [%3%13%4] and select %3Lock/Unlock Vehicle%4.<br/><br/><t underline='1'>%3Note:%4</t> Lockpicks and keys are only available via scripting or ACE Vehicle Key modules. + + + From b818f9f6e4ed36ae545691f2a3dfbd9135539c62 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Wed, 11 Oct 2023 16:01:11 -0500 Subject: [PATCH 011/287] Prep 3.16.0 Build 71 --- addons/main/script_version.hpp | 2 +- docs/_config.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/main/script_version.hpp b/addons/main/script_version.hpp index fa5af189d33..0303b1e8049 100644 --- a/addons/main/script_version.hpp +++ b/addons/main/script_version.hpp @@ -1,4 +1,4 @@ #define MAJOR 3 #define MINOR 16 #define PATCHLVL 0 -#define BUILD 70 +#define BUILD 71 diff --git a/docs/_config.yml b/docs/_config.yml index 9051aa2fd9c..a571ccd498d 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -10,7 +10,7 @@ ace: major: 3 minor: 16 patch: 0 - build: 70 + build: 71 markdown: kramdown From 2eb914836c9ed65f22ccc74d9df1a89f8cc24885 Mon Sep 17 00:00:00 2001 From: amsteadrayle <2516219+amsteadrayle@users.noreply.github.com> Date: Thu, 12 Oct 2023 12:44:13 -0400 Subject: [PATCH 012/287] Medical GUI - Add R and L labels on body image (#9480) Add R and L labels on body image --- addons/medical_gui/gui.hpp | 17 +++++++++++++++++ addons/medical_gui/stringtable.xml | 6 ++++++ 2 files changed, 23 insertions(+) diff --git a/addons/medical_gui/gui.hpp b/addons/medical_gui/gui.hpp index cb7ba0f4020..fb2e06c1523 100644 --- a/addons/medical_gui/gui.hpp +++ b/addons/medical_gui/gui.hpp @@ -432,6 +432,23 @@ class ACE_Medical_Menu { }; class TriageToggle: GVAR(TriageToggle) {}; class TriageSelect: GVAR(TriageSelect) {}; + class BodyLabelLeft: RscText { + idc = -1; + style = ST_RIGHT; + text = CSTRING(BodyLabelLeft); + font = "RobotoCondensedBold"; + x = QUOTE(POS_X(16.5)); + y = QUOTE(POS_Y(10.5)); + w = QUOTE(POS_W(6.0)); + h = QUOTE(POS_H(2.0)); + sizeEx = QUOTE(POS_H(1.4)); + colorText[] = {1, 1, 1, 0.33}; + shadow = 0; + }; + class BodyLabelRight: BodyLabelLeft { + style = ST_LEFT; + text = CSTRING(BodyLabelRight); + }; }; }; diff --git a/addons/medical_gui/stringtable.xml b/addons/medical_gui/stringtable.xml index 3224c0fc432..531b34607a9 100644 --- a/addons/medical_gui/stringtable.xml +++ b/addons/medical_gui/stringtable.xml @@ -1343,5 +1343,11 @@ Chronisches Trauma 심각한 외상 + + L + + + R + From bd377c49fce7c185445f4674568f68d35565908c Mon Sep 17 00:00:00 2001 From: Tim Beswick Date: Thu, 12 Oct 2023 17:45:56 +0100 Subject: [PATCH 013/287] Repair - Allow setting spare wheels/tracks count in config (#9481) * Allow setting spare wheels/tracks count in config * Update repair framework docs --- addons/repair/XEH_postInit.sqf | 6 ++++-- docs/wiki/framework/repair-framework.md | 25 ++++++++++++++++++++++--- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/addons/repair/XEH_postInit.sqf b/addons/repair/XEH_postInit.sqf index f717e566513..58bb1be6e5a 100644 --- a/addons/repair/XEH_postInit.sqf +++ b/addons/repair/XEH_postInit.sqf @@ -64,7 +64,8 @@ private _spareTracks = _vehicle getVariable QGVAR(editorLoadedTracks); if (isNil "_spareTracks") then { - _spareTracks = parseNumber (_vehicle isKindOf "Tank"); // must match eden attribute default + private _defaultCount = parseNumber (_vehicle isKindOf "Tank"); // must match eden attribute default + _spareTracks = [configOf _vehicle >> QGVAR(spareTracks), "NUMBER", _defaultCount] call CBA_fnc_getConfigEntry; }; if (_spareTracks > 0) then { [_vehicle, _spareTracks, "ACE_Track"] call FUNC(addSpareParts); @@ -72,7 +73,8 @@ private _spareWheels = _vehicle getVariable QGVAR(editorLoadedWheels); if (isNil "_spareWheels") then { - _spareWheels = parseNumber (_vehicle isKindOf "Car"); // must match eden attribute default + private _defaultCount = parseNumber (_vehicle isKindOf "Car"); // must match eden attribute default + _spareWheels = [configOf _vehicle >> QGVAR(spareWheels), "NUMBER", _defaultCount] call CBA_fnc_getConfigEntry; }; if (_spareWheels > 0) then { [_vehicle, _spareWheels, "ACE_Wheel"] call FUNC(addSpareParts); diff --git a/docs/wiki/framework/repair-framework.md b/docs/wiki/framework/repair-framework.md index d825aa0372f..09e26864114 100644 --- a/docs/wiki/framework/repair-framework.md +++ b/docs/wiki/framework/repair-framework.md @@ -14,19 +14,38 @@ version: ## 1. Config Values -### 1.2 Setting Vehicle As Repair Location +### 1.1 Setting Vehicle As Repair Location A vehicle will be set as a repair truck based on the config `ace_repair_canRepair`. Setting `fullRepairLocation` needs to be enabled and is by *disabled* default. ```cpp -class CfgVehicles: Car_F{ - class MyRepairTruck { +class CfgVehicles { + class Car_F; + class MyTruck: Car_F { ace_repair_canRepair = 1; // Make repair vehicle }; }; ``` +### 1.2 Setting Vehicle Spare Wheels and Tracks + +A vehicle can have a default count of spare wheels/tracks based on the config `ace_repair_spareWheels` and `ace_repair_spareTracks`. +Values set in 3den for a vehicle will be used first. Vehicles with no value set in 3den or config will default to 1 spare wheel/track. + +```cpp +class CfgVehicles { + class Car_F; + class MyTruck: Car_F { + ace_repair_spareWheels = 4; + }; + class Tank_F; + class MyTank: Tank_F { + ace_repair_spareTracks = 4; + }; +}; +``` + ## 2. Variables ## 2.1 Make A Vehicle Into A Repair Truck From 58cedab493a2eb7eb8af6e7894c5609d5c6fd83e Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Thu, 12 Oct 2023 11:47:59 -0500 Subject: [PATCH 014/287] Repair - Fix script error if vehicle is null (#9479) --- addons/repair/functions/fnc_addRepairActions.sqf | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/repair/functions/fnc_addRepairActions.sqf b/addons/repair/functions/fnc_addRepairActions.sqf index d99c264123c..d071f577a60 100644 --- a/addons/repair/functions/fnc_addRepairActions.sqf +++ b/addons/repair/functions/fnc_addRepairActions.sqf @@ -28,6 +28,7 @@ TRACE_2("addRepairActions", _vehicle,_type); // do nothing if the class is already initialized private _initializedClasses = GETMVAR(GVAR(initializedClasses),[]); if (_type in _initializedClasses) exitWith {}; +if (_type == "") exitWith {}; // get selections to ignore private _selectionsToIgnore = _vehicle call FUNC(getSelectionsToIgnore); From e52594112d6981c2e44ac17645020312fe2c27f7 Mon Sep 17 00:00:00 2001 From: amsteadrayle <2516219+amsteadrayle@users.noreply.github.com> Date: Thu, 12 Oct 2023 12:50:48 -0400 Subject: [PATCH 015/287] Medical GUI - Add keybinds to navigate the Medical Menu (#9477) * Add keybinds to select categories and body parts * Add some comments, rearrange, remove debug prints * Remove unneeded escape key handling * Replace function with inline code --- addons/medical_gui/XEH_PREP.hpp | 1 + .../medical_gui/functions/fnc_onKeyDown.sqf | 84 +++++++++++++++++++ addons/medical_gui/gui.hpp | 1 + 3 files changed, 86 insertions(+) create mode 100644 addons/medical_gui/functions/fnc_onKeyDown.sqf diff --git a/addons/medical_gui/XEH_PREP.hpp b/addons/medical_gui/XEH_PREP.hpp index 857e72315be..de73cba109f 100644 --- a/addons/medical_gui/XEH_PREP.hpp +++ b/addons/medical_gui/XEH_PREP.hpp @@ -10,6 +10,7 @@ PREP(handleTriageSelect); PREP(menuPFH); PREP(modifyAction); PREP(modifyActionTriageLevel); +PREP(onKeyDown); PREP(onMenuClose); PREP(onMenuOpen); PREP(openMenu); diff --git a/addons/medical_gui/functions/fnc_onKeyDown.sqf b/addons/medical_gui/functions/fnc_onKeyDown.sqf new file mode 100644 index 00000000000..27496e643b2 --- /dev/null +++ b/addons/medical_gui/functions/fnc_onKeyDown.sqf @@ -0,0 +1,84 @@ +#include "..\script_component.hpp" +#include "\a3\ui_f\hpp\defineDIKCodes.inc" +/* + * Author: AmsteadRayle + * Handles keyboard inputs in medical menu. + * + * Arguments: + * 0: Menu display + * 1: Key being pressed + * 2: Shift state + * 3: Ctrl state + * 4: Alt state + * + * Return Value: + * None + * + * Public: No +*/ +// TODO: Is the airway category ever visible? Can the dynamic category stuff be removed? + +#define NUMBER_KEYS [DIK_1, DIK_2, DIK_3, DIK_4, DIK_5, DIK_6, DIK_7, DIK_8, DIK_9, DIK_0] + +params ["", "_args"]; +_args params ["_display", "_keyPressed", "_shiftState", "_ctrlState", "_altState"]; + +private _return = true; // Override existing keybinds for keys used here + +private _visibleCategories = [ + "bandage","medication","airway","advanced","drag" +] select { + private _category = _x; + (GVAR(actions) findIf {_category == _x select 1}) > -1 +}; + +private _allCategories = ["triage", "examine"] + _visibleCategories + ["toggle"]; + +// Use hashmap as a shortcut to "zip" two arrays together +// Use categories as keys in hashmap because there are fewer, +// otherwise the hashmap is padded with nil +private _keyCategoryPairs = _allCategories createHashMapFromArray NUMBER_KEYS; + +private _temp_category = ""; + +switch (true) do { +// Dynamically assign number keys to visible categories + { + _temp_category = _x; // _x does not exist inside case code + case (_keyPressed == _y): { + GVAR(selectedCategory) = _temp_category; + if (_temp_category == "toggle") then { + call FUNC(handleToggle); + } + }; + } forEach _keyCategoryPairs; + +// Select body part through similar keyboard layout: +// w +// a s d +// z x + case (_keyPressed == DIK_W): { + GVAR(selectedBodyPart) = 0; + }; + case (_keyPressed == DIK_S): { + GVAR(selectedBodyPart) = 1; + }; + case (_keyPressed == DIK_D): { + GVAR(selectedBodyPart) = 2; + }; + case (_keyPressed == DIK_A): { + GVAR(selectedBodyPart) = 3; + }; + case (_keyPressed == DIK_X): { + GVAR(selectedBodyPart) = 4; + }; + case (_keyPressed == DIK_Z): { + GVAR(selectedBodyPart) = 5; + }; + + default { + _return = false; // Do not override existing keybinds for keys not used here + }; +}; + +_return diff --git a/addons/medical_gui/gui.hpp b/addons/medical_gui/gui.hpp index fb2e06c1523..ef92c67a4c1 100644 --- a/addons/medical_gui/gui.hpp +++ b/addons/medical_gui/gui.hpp @@ -206,6 +206,7 @@ class ACE_Medical_Menu { enableSimulation = 1; onLoad = QUOTE(_this call FUNC(onMenuOpen)); onUnload = QUOTE(_this call FUNC(onMenuClose)); + onKeyDown = QUOTE([ARR_3('onKeyDown', _this, QQGVAR(display))] call FUNC(onKeyDown)); class controlsBackground { class Title: RscText { idc = IDC_TITLE; From 1e3d9cc22ab4caad02357cd192d465330dcd89f1 Mon Sep 17 00:00:00 2001 From: amsteadrayle <2516219+amsteadrayle@users.noreply.github.com> Date: Thu, 12 Oct 2023 22:39:23 -0400 Subject: [PATCH 016/287] Medical GUI - Show number of available treatment items in medical menu (#9474) * Initial implementation of item count display * Put everything inside function, add padding * Extract and explain null string * Fix tab in config file * Add function header * Use ACE item counting function * Extract column width to variable * Move constants declaration closer to usage * Add special case for sutures * Add setting to enable/disable * Expand to allow showing in tooltip * Split into counting and formatting function * Fix incorrect check for case with no items * Remove ineffective padding from tooltip * Check for surgical kit item instead of display name * Update return description in header Co-authored-by: PabstMirror * Add `private` keyword for inline functions Co-authored-by: PabstMirror * capitalization/vars Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> * nil checks, localize macro Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> * Remove button text mode and setting * possessive * Update addons/medical_gui/functions/fnc_formatItemCounts.sqf --------- Co-authored-by: PabstMirror Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> --- addons/medical_gui/XEH_PREP.hpp | 2 + .../functions/fnc_collectActions.sqf | 3 +- .../functions/fnc_countTreatmentItems.sqf | 53 +++++++++++++++++++ .../functions/fnc_formatItemCounts.sqf | 32 +++++++++++ .../functions/fnc_updateActions.sqf | 12 ++++- addons/medical_gui/stringtable.xml | 9 ++++ 6 files changed, 109 insertions(+), 2 deletions(-) create mode 100644 addons/medical_gui/functions/fnc_countTreatmentItems.sqf create mode 100644 addons/medical_gui/functions/fnc_formatItemCounts.sqf diff --git a/addons/medical_gui/XEH_PREP.hpp b/addons/medical_gui/XEH_PREP.hpp index de73cba109f..3d1ace8b4e5 100644 --- a/addons/medical_gui/XEH_PREP.hpp +++ b/addons/medical_gui/XEH_PREP.hpp @@ -2,9 +2,11 @@ PREP(addTreatmentActions); PREP(bloodLossToRGBA); PREP(canOpenMenu); PREP(collectActions); +PREP(countTreatmentItems); PREP(damageToRGBA); PREP(displayPatientInformation); PREP(displayTriageCard); +PREP(formatItemCounts); PREP(handleToggle); PREP(handleTriageSelect); PREP(menuPFH); diff --git a/addons/medical_gui/functions/fnc_collectActions.sqf b/addons/medical_gui/functions/fnc_collectActions.sqf index 7a9902ad719..818decb0170 100644 --- a/addons/medical_gui/functions/fnc_collectActions.sqf +++ b/addons/medical_gui/functions/fnc_collectActions.sqf @@ -24,8 +24,9 @@ GVAR(actions) = []; private _category = getText (_x >> "category"); private _condition = compile format [QUOTE([ARR_4(ACE_player, GVAR(target), %1 select GVAR(selectedBodyPart), '%2')] call DEFUNC(medical_treatment,canTreatCached)), ALL_BODY_PARTS, _configName]; private _statement = compile format [QUOTE([ARR_4(ACE_player, GVAR(target), %1 select GVAR(selectedBodyPart), '%2')] call DEFUNC(medical_treatment,treatment)), ALL_BODY_PARTS, _configName]; + private _items = getArray (_x >> "items"); - GVAR(actions) pushBack [_displayName, _category, _condition, _statement]; + GVAR(actions) pushBack [_displayName, _category, _condition, _statement, _items]; } forEach configProperties [configFile >> QEGVAR(medical_treatment,actions), "isClass _x"]; diff --git a/addons/medical_gui/functions/fnc_countTreatmentItems.sqf b/addons/medical_gui/functions/fnc_countTreatmentItems.sqf new file mode 100644 index 00000000000..102d996bb30 --- /dev/null +++ b/addons/medical_gui/functions/fnc_countTreatmentItems.sqf @@ -0,0 +1,53 @@ +#include "..\script_component.hpp" +/* + * Author: AmsteadRayle + * Counts how many of the given items are present between the medic and patient. + * If medic or patient are in a vehicle then vehicle's inventory will also be checked. + * + * Arguments: + * 0: Items + * + * Return Value: + * Counts (can be nil) + * + * Example: + * [items] call ace_medical_gui_fnc_countTreatmentItems + * + * Public: No + */ + +params ["_items"]; + +private _medicCount = 0; +private _patientCount = nil; +private _vehicleCount = nil; + +// Medic +{ + _medicCount = _medicCount + ([ACE_player, _x] call EFUNC(common,getCountOfItem)); +} forEach _items; + +// Patient +if (ACE_player != GVAR(target)) then { + _patientCount = 0; + { + _patientCount = _patientCount + ([GVAR(target), _x] call EFUNC(common,getCountOfItem)); + } forEach _items; +}; + +// Vehicle +private _medicVehicle = objectParent ACE_player; +private _patientVehicle = objectParent GVAR(target); +private _vehicle = if (!isNull _medicVehicle) then {_medicVehicle} else {_patientVehicle}; + +if (!isNull _vehicle) then { + _vehicleCount = 0; + (getItemCargo _vehicle) params ["_itemTypes", "_itemCounts"]; + { + private _item = _x; + private _index = _itemTypes find _item; + _vehicleCount = _vehicleCount + (_itemCounts param [_index, 0]); + } forEach _items; +}; + +[_medicCount, _patientCount, _vehicleCount] diff --git a/addons/medical_gui/functions/fnc_formatItemCounts.sqf b/addons/medical_gui/functions/fnc_formatItemCounts.sqf new file mode 100644 index 00000000000..7ef294f4eba --- /dev/null +++ b/addons/medical_gui/functions/fnc_formatItemCounts.sqf @@ -0,0 +1,32 @@ +#include "..\script_component.hpp" +/* + * Author: AmsteadRayle + * Format item counts to be shown in the tooltip. + * + * Arguments: + * 0: Medic count + * 1: Patient count + * 2: Vehicle count + * + * Return Value: + * Item count string + * + * Example: + * [medicCount, patientCount, vehicleCount] call ace_medical_gui_fnc_formatItemCounts + * + * Public: No + */ + +params ["_medicCount", "_patientCount", "_vehicleCount"]; + +private _countStrings = [format ["%1 %2", _medicCount, LLSTRING(TreatmentItemCount_Medic)]]; + +if ((EGVAR(medical_treatment,allowSharedEquipment) != 2) && {!isNil "_patientCount"}) then { + _countStrings pushBack format ["%1 %2", _patientCount, LLSTRING(TreatmentItemCount_Patient)]; +}; + +if (!isNil "_vehicleCount") then { + _countStrings pushBack format ["%1 %2", _vehicleCount, LLSTRING(TreatmentItemCount_Vehicle)]; +}; + +_countStrings joinString "\n" diff --git a/addons/medical_gui/functions/fnc_updateActions.sqf b/addons/medical_gui/functions/fnc_updateActions.sqf index 43141b9c105..ca5ca373eb0 100644 --- a/addons/medical_gui/functions/fnc_updateActions.sqf +++ b/addons/medical_gui/functions/fnc_updateActions.sqf @@ -38,7 +38,7 @@ if (_showTriage) exitWith { // Show treatment options on action buttons private _shownIndex = 0; { - _x params ["_displayName", "_category", "_condition", "_statement"]; + _x params ["_displayName", "_category", "_condition", "_statement", "_items"]; // Check action category and condition if (_category == _selectedCategory && {call _condition}) then { @@ -50,6 +50,16 @@ private _shownIndex = 0; _ctrl ctrlSetPositionY POS_H(1.1 * _shownIndex); _ctrl ctrlCommit 0; + private _countText = ""; + if (_items isNotEqualTo []) then { + if ("ACE_surgicalKit" in _items && {EGVAR(medical_treatment,consumeSurgicalKit) == 2}) then { + _items = ["ACE_suture"]; + }; + private _counts = [_items] call FUNC(countTreatmentItems); + _countText = _counts call FUNC(formatItemCounts); + }; + _ctrl ctrlSetTooltip _countText; + _ctrl ctrlSetText _displayName; _ctrl ctrlShow true; diff --git a/addons/medical_gui/stringtable.xml b/addons/medical_gui/stringtable.xml index 531b34607a9..3c0d2bc113b 100644 --- a/addons/medical_gui/stringtable.xml +++ b/addons/medical_gui/stringtable.xml @@ -1349,5 +1349,14 @@ R + + in your inventory + + + in patient's inventory + + + in vehicle's inventory + From 5a2fd7007510492da055706481a4a713f0b3796e Mon Sep 17 00:00:00 2001 From: Grim <69561145+LinkIsGrim@users.noreply.github.com> Date: Thu, 12 Oct 2023 23:19:07 -0400 Subject: [PATCH 017/287] Field Manual - Add Medical Menu entry (#9482) * add medical menu * add R/L note * Translate display name Co-authored-by: PabstMirror --------- Co-authored-by: PabstMirror --- addons/fieldmanual/CfgHints.hpp | 22 ++++++++++++++-------- addons/fieldmanual/stringtable.xml | 22 ++++++++++++++++++++++ 2 files changed, 36 insertions(+), 8 deletions(-) diff --git a/addons/fieldmanual/CfgHints.hpp b/addons/fieldmanual/CfgHints.hpp index 7b86ba89b6c..64b8022bfc3 100644 --- a/addons/fieldmanual/CfgHints.hpp +++ b/addons/fieldmanual/CfgHints.hpp @@ -272,55 +272,61 @@ class CfgHints { tip = "Medical Wiki"; }; - class ACE_Adenosine: ACE_Medical_Treatment_Base { + class ACE_MedicalMenu: ACE_Medical_Treatment_Base { logicalOrder = 1; + displayName = CSTRING(Medical_Treatment_MedicalMenu_DisplayName); + displayNameShort = CSTRING(Medical_Treatment_MedicalMenu_ShortName); + description = CSTRING(Medical_Treatment_MedicalMenu_Description); + }; + class ACE_Adenosine: ACE_Medical_Treatment_Base { + logicalOrder = 2; arguments[] += {QUOTE('ACE_adenosine' call FUNC(getItemName))}; displayName = "%15"; displayNameShort = CSTRING(Medical_Treatment_Adenosine_ShortName); description = CSTRING(Medical_Treatment_Adenosine_Description); }; class ACE_Bandages: ACE_Medical_Treatment_Base { - logicalOrder = 2; + logicalOrder = 3; displayName = CSTRING(Medical_Treatment_Bandages_DisplayName); displayNameShort = CSTRING(Medical_Treatment_Bandages_ShortName); description = CSTRING(Medical_Treatment_Bandages_Description); }; class ACE_Fluids: ACE_Medical_Treatment_Base { - logicalOrder = 3; + logicalOrder = 4; displayName = CSTRING(Medical_Treatment_IVFluids_DisplayName); displayNameShort = CSTRING(Medical_Treatment_IVFluids_ShortName); description = CSTRING(Medical_Treatment_IVFluids_Description); }; class ACE_Epinephrine: ACE_Medical_Treatment_Base { - logicalOrder = 4; + logicalOrder = 5; arguments[] += {QUOTE('ACE_epinephrine' call FUNC(getItemName))}; displayName = "%15"; displayNameShort = CSTRING(Medical_Treatment_Epinephrine_ShortName); description = CSTRING(Medical_Treatment_Epinephrine_Description); }; class ACE_PAK: ACE_Medical_Treatment_Base { - logicalOrder = 5; + logicalOrder = 6; arguments[] += {QUOTE('ACE_personalAidKit' call FUNC(getItemName))}; displayName = "%15"; displayNameShort = CSTRING(Medical_Treatment_PAK_ShortName); description = CSTRING(Medical_Treatment_PAK_Description); }; class ACE_Splint: ACE_Medical_Treatment_Base { - logicalOrder = 6; + logicalOrder = 7; arguments[] += {QUOTE('ACE_splint' call FUNC(getItemName))}; displayName = "%15"; displayNameShort = CSTRING(Medical_Treatment_Splint_ShortName); description = CSTRING(Medical_Treatment_Splint_Description); }; class ACE_SurgicalKit: ACE_Medical_Treatment_Base { - logicalOrder = 7; + logicalOrder = 8; arguments[] += {QUOTE('ACE_surgicalKit' call FUNC(getItemName))}; displayName = "%15"; displayNameShort = CSTRING(Medical_Treatment_SurgicalKit_ShortName); description = CSTRING(Medical_Treatment_SurgicalKit_Description); }; class ACE_Tourniquet: ACE_Medical_Treatment_Base { - logicalOrder = 8; + logicalOrder = 9; arguments[] += {QUOTE('ACE_tourniquet' call FUNC(getItemName))}; displayName = "%15"; displayNameShort = CSTRING(Medical_Treatment_CAT_ShortName); diff --git a/addons/fieldmanual/stringtable.xml b/addons/fieldmanual/stringtable.xml index 73bff03d1c3..24f735ff72f 100644 --- a/addons/fieldmanual/stringtable.xml +++ b/addons/fieldmanual/stringtable.xml @@ -87,6 +87,28 @@ A %3Tourniquet%4 stops bleeding temporarily so that a wound(s) can be bandaged. Can only be used on limbs.<br/><br/>%3Usage:%4<br/>%2Use [%3%13%4] or [%3%14%4] and select an affected appendage.<br/>%2Select %3Apply Tourniquet%4. + + Medical Menu + Sanitätsmenü + Menu medyczne + Menu Médico + Медицинское меню + Menú médico + Zdravotnická nabídka + Menù Medico + Menu médical + 治療メニュー + 의료 메뉴 + 医疗菜单 + 醫療選單 + Medikal Menü + + + Treatment, Simplified + + + The %3Medical Menu%4 is a dedicated %3interface%4 to facilitate %3medical treatment%4. The %3R%4 and %3L%4 letters indicate the side of the patient's body being treated.<br/><br/>%3Usage:%4<br/>%2Use [%3%14%4] while looking at a patient to open the Medical Menu. Opening the menu without a patient allows for self-treatment.<br/>%2Alternatively, use [%3%12%4] or [%3%13%4] and select %3Medical Menu%4.<br/><br/>%3Keybinds:%4<br/>%2Use [%3W, A, S, D, X, and Z%4] to select body parts.<br/>%2Use your %3number keys%4 to select treatment categories. + Portable, Precise, Rugged From 503373bb83f8e9dfbf4be341a56d8ff764a49805 Mon Sep 17 00:00:00 2001 From: amsteadrayle <2516219+amsteadrayle@users.noreply.github.com> Date: Fri, 13 Oct 2023 07:46:42 -0400 Subject: [PATCH 018/287] Medical GUI - Improve toggle button icon and tooltip (#9485) Improve toggle button icon and tooltip --- .../data/categories/toggle_self.paa | Bin 5625 -> 0 bytes .../data/categories/toggle_to_other.paa | Bin 0 -> 5625 bytes .../data/categories/toggle_to_self.paa | Bin 0 -> 5625 bytes .../medical_gui/functions/fnc_onMenuOpen.sqf | 10 +++++++++ addons/medical_gui/gui.hpp | 3 +-- addons/medical_gui/stringtable.xml | 20 +++++------------- 6 files changed, 16 insertions(+), 17 deletions(-) delete mode 100644 addons/medical_gui/data/categories/toggle_self.paa create mode 100644 addons/medical_gui/data/categories/toggle_to_other.paa create mode 100644 addons/medical_gui/data/categories/toggle_to_self.paa diff --git a/addons/medical_gui/data/categories/toggle_self.paa b/addons/medical_gui/data/categories/toggle_self.paa deleted file mode 100644 index 73108e5a98db9dc4605577ba63de35ceee58acd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5625 zcmeHLZA@EL7(T@!lZCXnp_tjU28JIqVGM>!ftE0f5RgshLNdts2=j-Q{xKvvwR|H# zTorX@*)p<>ZE9lDIdU=+b>Om%g;lZ`rK3pvV1*GGV~jGS-SM2;z4u-&DaVG9_=A%) zy-(lo=bZEQoEu5<@^W_O=IzQ+BZOvWXR`!cl2gPmp@ZSPoI(r3D*9pgRg0zAOrPuM zr&Wv4{`Clb7KhLf{e(Bn$czy6aBr}H@XWqf@hTr|9b}F*f7op)Pk{B1h4R}I^BWQY zGaWYmD}G0?Z&!o<+r#PJyK@W$`F{3lQ=pH`m;eX8Oa6=RV53=9AUl;u77N4_FE#} z?jfb_O9B++g(I~1`anPEH?#S-oD=n{ulQ|U#ge^lTvO2{5kf-Dw{pI?*oh*7c0o<9{=F^^^_u(GW|->$9BzF){fr}&UmSA+ z{Aay_D?C^yuGh>_mE!|h|9HwxHT}sWpwFvk>ouxrie*+pWi8Bd&gKWqvwzV^HeRhb|0BP!zh;d)%e5%Je6Ywm)0euc)dpK!3TIoK%^Sdb=2($A4s6Yhch3 zxC-&J75&4g*e^y-|5$GR%e9ZKn{yDaE#!V~A*}y>D)yUg{ikB&{aYFT|IUZ56I&Z^ zbg=0Y_Mf8@yVeURh>MPt7aWk`Jsr-hBpH76AlCgz=7nEa?FTsXyND0P|Lsbzj~Ieq zPw-Vf#}a1w^452_@||C`20Ul|7r{S^!A2--QtX!u1s@q4K7-yv`&Y^*=;30rwq_FY z3Aa9;{%^O=`UmWO;SU^Qvu}t8zlFl)73L!;wYFx1te=`aq=WAFV~`K8KBYY646~dU z`+ch4Y7)FV8+)`DRj5l`G5ty+g#&BE!gK?|q0m1-_EdOSB(K z=jU+at?CCE06yg% zk>l99&slW{aK+FUemj}&0L;sW##?aBS(MKVwkH4TxC{O^UN4vu&b0Ig=G)-IWt)Xd zOAt5xJ$6_wkGzb_+$RI#u~wN+Z4=#7xau$PA2)=b=&=iTL&3kM{gUIhB{2cyns4b- z(Sy>l@dDA$(0K)US|5{Fh;r@sj!*rYXA7Z1-1lJc6~kPzW0)_0b&M5 z`@=Ky-sZgXeeOBu-Wy&mEX;M@QMfSILftyvu-L_#{ld2LzsU%)i<^KoDuKzv6 zr?@9*@ln3y9mHFQ>+zDgE$V4C`fUUY7~Q?suOznlqkm;|r$inkj)pWxgGrYc9%#3B ze&3^U^HAke4*xOwk$N@<=@-l1{O{0SX|^UW2)}-^U^hx5j!jb19EgT|kyON;7gI3A z9NzS$;vQ>v9cT6go{RriMB7C z#_bP`&JL6>Mm#w=S6LfIw?)r+U@z)?#V`+=lKEh zDSOm#j(WaV9(4`{;wvu9Z^f}s{18Eo;m`0RYWV)I#C^KoV#1C|8BMx>qDTeu2rg!i z*`Tke@h2MoOW^;=&mo@+-vJ)z4}l}L*8h5^`_3>N7f@WBQi^uf31Aj?g>|VzC?ZqpS$%f^XgFJn!`+9#Ef1Dw{3^~ zDv3Lh4&jr#SbtZud;snowzG#w>RC>dCCl%|vY>Nbbk&sO> z{V-Vg=`s|zvYz!Hr3(hskEK*uQKPJ!hSp(R5t+pOqJzZUq6Sjt`mazE(<7z;@`kA`upC{pPajepF4E4kO zA5h=;9l@|SRQ#W3_C`MUMc8>r1egi&PL*AgSv)XsZ<8Gj%M-TdX?jIi&mv)1Qhhw) zaGc_0R}z}nPY4h{eD3Lz4Hp%ZOHwWo>l4TKVQW*wGsOL8O@)8{jPn# zbUrfQz)YQQ()q;HE^~2EpVuM`)afzj2Z%=`lj>6pd+GA@Ck{giFdXJ*0r_;hF^>tz zV={hBn5HgTc89Uwzy`5qi|Suz;IRLYR^NdHaESQ}`&ar9*CQz=ALHe^^+vv=pCH~J zGq*p5EgP|6V;KNQZ)@W>1Ha}Fj$t=kb6|{9$|DWI29Gfct|mV6ZN{|MQLCHuvgUGW{=2)~Uw?qtT(He^ zoI3vRaa!5q7edB&D@&%qrG?oCy!u4f*5il*AibtVnblSsWo=ENt=BfgwL>W%i&Wfp zlKuiS{51zVW=Js9gmxukpAYYb+BTYcw$nRR;nlkhU3nxI_}DZb=9m1 zH10#7&np|I;e=0m+rOlLTbW|oZbt{)0qmYXBfkl^fjab>*gy;OKfmEsYg@p$mO6XK zkPVm&9wwmUSx$S&ZhLtxO2am-otc4V)9JtY1naBsT0h}WALyqF?OHFbf8-SEMF0_! zerQ*;$ro9Q81AAI*)gG%Z6lNlyi6QN(`LWC3hC6DOqP?(C!RKqV#fq9E}{+u8$76U z;W=elwxZ<^PEmB?Ui^ynr`glqeX-qtQazoTqg@L?g(Q<3E2`eCFV^@t-dwh_I&GuH zSP!R3o>XMy8^=D#FtEYfuz?>8JY%!nWn7!_7+(CLqtw8$0Y}D+)!6l;F?7_8V1wsk z_AL0XK#nAIvSsK^V^+K34n7=VrvSPDO7k4hpFO>ZrIlJp%@M%Y>SYXdoOh)1w}&>} zSAuko%jItPEMD%Kb_U8^OUyN$FLkTFEOwd!Pb}o%3#Uf-GTAK-4g=EMXB2OCw~MtE z2gjenqdAe_7tpz&4_2ALZrPC5GP+8$pU;iEXXnY#^H$cT3!sh0yx!?Ou9UH~bDTi) zg6jDZ)moW?1}YO_!`YU{^wUBvDaW)|t8_NsN?l^;MHfa7P{UwXgpKGx0o5QYgl5Ayk}>6Im}{PtN!^o*JO534Tc Avj6}9 literal 0 HcmV?d00001 diff --git a/addons/medical_gui/data/categories/toggle_to_self.paa b/addons/medical_gui/data/categories/toggle_to_self.paa new file mode 100644 index 0000000000000000000000000000000000000000..653a6bbdb456c66eaff48db92dd66ea0eb16ef1e GIT binary patch literal 5625 zcmeGgeNYtF{XMt^!4eL=r6dNqC8-I7jBtd_OcBn`beySa zdI(X5N!k;}V$u+4<5$v|bS~;_(y580PNHbg)JY>kLv1z0+8TumDD^Je-|xL$kRvTH zI!XTMo7sim{=Prodnf2cMfvXgi&o@Y2qD2>u!zAc^Oqs4!$PLM2#ZfBGH>E7BEsSP_+bz$6UlzUPS5RMh9_JUu@4isD7r7C}CMi1@2zUEJX$XTlG~v3IwN$H~ z+4R+N<1p_+@18s@(s2;=xu_US>V zeszQ&WlUv7XN`@o8l5DQC?c8m%urpwl6T(IW!NoQ?wg<0ZrCSDikPe}h5T+A@pr!3 zlwjH~gZ=R*A)YJVX5J|xCHBsLd++oOaBm@ja*tlx)xot%G9e{rLHLI7any(Xv=Q@P zc#!ielvMsH7dHCQElm^)=-;Y5hv#TRv3no>_OehDKwc71OfIIAV>LOi%n z9%21m$NNQ5+|gSLYZf}5VD(F>Al?d4ylo$67xgnyC(X7HOUelneF>GgNTCX$jLW!&- zG(WfY{U#i%^ZLVJJrxlTdhh0ngGPN=3lt^m^!xrM1I7qGG(11&9TS!ypb;zOrw-37 z11~_qJ$Ak`vD%~u{tLu<{9ZPnfKeL99wBW!D3Hb`vz`S=Xe?Qa^P1&T23X%sC1Q~$ zU5~<@4dHHonAH!)Z@k9q`vU#fY=IVJ^(TtT9Zwer+CoR2W<4N2z1XZr_k{VM$eN_u zVZYwzW&I2lB1G2TCLQ!$Gyfhq{`$!L!}&dt{Hfxj?uL1)RkHm+5k>LQ{a1GTLR(jl z`d>VfKTtnq{i!>&>iW;xKpa#j)VqI&)@eiG2!pZ9wv|2D!eAbW)op<#83rDM{p}aD z)IaK1IlV+kOGH0R2_ z|4pQqWUDptgjQYAexwg!QGmI#@KuSz4uK&@NnSm!wR^)VHt%3uPr2VNz~SP|x|%a6 z4cx!s{(n4hAav3fV)>L{H6GH+gU7rVnLm`$=5`qO&XA9LBa!0neV))U@23b`u-^u6 zMmIZ6e>3~^U~J+&=6shk$@SHHM((^IC#|O6wdR^SprbcBvoq^?F(SalVwjl{3%{CBXP$e*TVpu+5yu1o)ZM zuke+vudKM=+;70(r(e|ln@kuwlyv$I$ALY}Uf91frkIZf5$7r5c5aR~=kXI+WiX5lwcde5)v58 z4u6ryiTYeE7EUjUPY_GYrIk^cT$&`$Ro7O;I@a(ur1?tp;GXhDA6@(c@iu`{ea=Tw zyzDv0oFQ#hHe6bmJkU{h{#+}bTydf5`VMVLPeZti;qh4c5L`R7s#yrbwj<`&@6GDj z6MY$BS+-fkUM=e#AKnci{t_W+gMHpb8a3<@+-@9*OUpToJG1V3BnR?}^dM0YjsSjH zWi*G0ko1;+l{tp6t)e2@ZpZ0$HJ>_a{($rr+y)v^4zYt2Cb6LT_0*n#c`bF1j3GM^ znKX>SfPZ$vQMT7nwHvu%%2PO&)tO^VfpgL0$FROeuk~}Eea|>m06oZ%fBxJhl#2`H zW_-9O-0lmlMu_dA>+x$mgc$2n6jI)V_`dO@g$$OhWcHrkf3}AE*|7lRNl1;$4iCy) zaapU#(|G*g6s2Syz^{I|W^jG{J?h(!FX;Vg&Qz8^5Fy`krf+*|Va;4lM}_p@d4Fij zS~DN+`2AzYKJc(*hqtK%KbUaV*0I|{=@D1CxlLdL#z&0R=@I$+FanRVaoOSdGJRJ3 zDUcEi{MrF&V7Ffk;}3{yMrK3e%Pfo!Lm^!T{LcQB3|6e9{%-(pG|E_!L{2i#KUT8xv^b=dZb~Ls+MgX;>S#tkMJE zwSb@5-MeAal`8h576g拖 / 背 Sürükle / Taşı - - Toggle (Self) - Umschalter (Selbst) - Лечить себя/другого раненого - Basculer (soi-même) - Przełącz (na siebie) - Alternar - Alternar (Si mesmo) - Přepnout (na sebe) - Attiva (Te Stesso) - 切り替え (自分) - 토글 (자신) - 切换(自己) - 切換 (自己) - Değiştir (Şahsi) + + Switch to self + + + Switch to target Head From f774eaf787f32670926259f470abd5b0303d0357 Mon Sep 17 00:00:00 2001 From: amsteadrayle <2516219+amsteadrayle@users.noreply.github.com> Date: Fri, 13 Oct 2023 16:33:19 -0400 Subject: [PATCH 019/287] Medical GUI - Fix asymmetry in the medical menu (#9486) * Fix assymmetry in the medical menu * Add center divider in Activity/Quick View panel --- .../medical_gui/functions/fnc_onMenuOpen.sqf | 2 +- addons/medical_gui/gui.hpp | 57 +++++++++++-------- 2 files changed, 33 insertions(+), 26 deletions(-) diff --git a/addons/medical_gui/functions/fnc_onMenuOpen.sqf b/addons/medical_gui/functions/fnc_onMenuOpen.sqf index d7351804ecf..97853137398 100644 --- a/addons/medical_gui/functions/fnc_onMenuOpen.sqf +++ b/addons/medical_gui/functions/fnc_onMenuOpen.sqf @@ -59,7 +59,7 @@ private _countEnabled = { if (_category isEqualType "") then { _x set [1, (GVAR(actions) findIf {_category == _x select 1}) > -1]; }; _x select 1 } count _list; -private _offsetX = POS_X(1.5) + 0.5 * (POS_X(12) - POS_X(_countEnabled * 1.5)); +private _offsetX = POS_X(1.75) + 0.5 * (POS_X(12) - POS_X(_countEnabled * 1.5)); { _x params ["_idc", "_enabled"]; private _ctrl = _display displayCtrl _idc; diff --git a/addons/medical_gui/gui.hpp b/addons/medical_gui/gui.hpp index 1539ddd5edd..b2e83efcaae 100644 --- a/addons/medical_gui/gui.hpp +++ b/addons/medical_gui/gui.hpp @@ -9,7 +9,7 @@ class RscControlsGroupNoScrollbars; class GVAR(BodyImage): RscControlsGroupNoScrollbars { idc = IDC_BODY_GROUP; - x = QUOTE(POS_X(13.33)); + x = QUOTE(POS_X(13.83)); y = QUOTE(POS_Y(2.73)); w = QUOTE(POS_W(12.33)); h = QUOTE(POS_H(12.33)); @@ -235,7 +235,7 @@ class ACE_Medical_Menu { idc = -1; style = ST_CENTER; text = CSTRING(EXAMINE_TREATMENT); - x = QUOTE(POS_X(1)); + x = QUOTE(POS_X(1.5)); y = QUOTE(POS_Y(1.5)); w = QUOTE(POS_W(12.33)); h = QUOTE(POS_H(1)); @@ -244,11 +244,12 @@ class ACE_Medical_Menu { }; class StatusHeader: TreatmentHeader { text = CSTRING(STATUS); - x = QUOTE(POS_X(13.33)); + x = QUOTE(POS_X(13.83)); }; class OverviewHeader: TreatmentHeader { text = CSTRING(OVERVIEW); - x = QUOTE(POS_X(25.66)); + w = QUOTE(POS_W(12.34)); // 12.33 + 12.33 + 12.34 = 37.00 + x = QUOTE(POS_X(26.16)); }; class HeaderLine: RscText { idc = -1; @@ -263,7 +264,7 @@ class ACE_Medical_Menu { onButtonClick = QUOTE(GVAR(selectedCategory) = 'triage'); text = QPATHTOF(data\categories\triage_card.paa); tooltip = CSTRING(ViewTriageCard); - x = QUOTE(POS_X(1.5)); + x = QUOTE(POS_X(1.75)); y = QUOTE(POS_Y(2.73)); w = QUOTE(POS_W(1.5)); h = QUOTE(POS_H(1.5)); @@ -279,42 +280,42 @@ class ACE_Medical_Menu { onButtonClick = QUOTE(GVAR(selectedCategory) = 'examine'); text = QPATHTOF(data\categories\examine_patient.paa); tooltip = CSTRING(ExaminePatient); - x = QUOTE(POS_X(3)); + x = QUOTE(POS_X(3.25)); }; class Bandage: Triage { idc = IDC_BANDAGE; onButtonClick = QUOTE(GVAR(selectedCategory) = 'bandage'); text = QPATHTOF(data\categories\bandage_fracture.paa); tooltip = CSTRING(BandageFractures); - x = QUOTE(POS_X(4.5)); + x = QUOTE(POS_X(4.75)); }; class Medication: Triage { idc = IDC_MEDICATION; onButtonClick = QUOTE(GVAR(selectedCategory) = 'medication'); text = QPATHTOF(data\categories\medication.paa); tooltip = CSTRING(Medication); - x = QUOTE(POS_X(6)); + x = QUOTE(POS_X(6.25)); }; class Airway: Triage { idc = IDC_AIRWAY; onButtonClick = QUOTE(GVAR(selectedCategory) = 'airway'); text = QPATHTOF(data\categories\airway_management.paa); tooltip = CSTRING(AirwayManagement); - x = QUOTE(POS_X(7.5)); + x = QUOTE(POS_X(7.75)); }; class Advanced: Triage { idc = IDC_ADVANCED; onButtonClick = QUOTE(GVAR(selectedCategory) = 'advanced'); text = QPATHTOF(data\categories\advanced_treatment.paa); tooltip = CSTRING(AdvancedTreatment); - x = QUOTE(POS_X(9)); + x = QUOTE(POS_X(9.25)); }; class Drag: Triage { idc = IDC_DRAG; onButtonClick = QUOTE(GVAR(selectedCategory) = 'drag'); text = QPATHTOF(data\categories\carry.paa); tooltip = CSTRING(DragCarry); - x = QUOTE(POS_X(10.5)); + x = QUOTE(POS_X(10.75)); }; class Toggle: Triage { idc = IDC_TOGGLE; @@ -326,7 +327,7 @@ class ACE_Medical_Menu { idc = IDC_TRIAGE_CARD; x = QUOTE(POS_X(1.5)); y = QUOTE(POS_Y(4.4)); - w = QUOTE(POS_W(11.833)); + w = QUOTE(POS_W(12.33)); h = QUOTE(POS_H(10)); sizeEx = QUOTE(POS_H(0.7)); colorSelect[] = {1, 1, 1, 1}; @@ -340,7 +341,7 @@ class ACE_Medical_Menu { idc = IDC_ACTION_BUTTON_GROUP; x = QUOTE(POS_X(1.5)); y = QUOTE(POS_Y(4.4)); - w = QUOTE(POS_W(11.833)); + w = QUOTE(POS_W(12.33)); h = QUOTE(POS_H(10)); }; class BodyImage: GVAR(BodyImage) {}; @@ -348,7 +349,7 @@ class ACE_Medical_Menu { idc = -1; onButtonClick = QUOTE(GVAR(selectedBodyPart) = 0); tooltip = CSTRING(SelectHead); - x = QUOTE(POS_X(18.8)); + x = QUOTE(POS_X(19.3)); y = QUOTE(POS_Y(3.2)); w = QUOTE(POS_W(1.4)); h = QUOTE(POS_H(1.8)); @@ -359,7 +360,7 @@ class ACE_Medical_Menu { class SelectTorso: SelectHead { onButtonClick = QUOTE(GVAR(selectedBodyPart) = 1); tooltip = CSTRING(SelectTorso); - x = QUOTE(POS_X(18.4)); + x = QUOTE(POS_X(18.9)); y = QUOTE(POS_Y(5)); w = QUOTE(POS_W(2.2)); h = QUOTE(POS_H(3.8)); @@ -367,7 +368,7 @@ class ACE_Medical_Menu { class SelectArmLeft: SelectHead { onButtonClick = QUOTE(GVAR(selectedBodyPart) = 2); tooltip = CSTRING(SelectLeftArm); - x = QUOTE(POS_X(20.6)); + x = QUOTE(POS_X(21.1)); y = QUOTE(POS_Y(5.1)); w = QUOTE(POS_W(1.1)); h = QUOTE(POS_H(4.6)); @@ -375,12 +376,12 @@ class ACE_Medical_Menu { class SelectArmRight: SelectArmLeft { onButtonClick = QUOTE(GVAR(selectedBodyPart) = 3); tooltip = CSTRING(SelectRightArm); - x = QUOTE(POS_X(17.4)); + x = QUOTE(POS_X(17.8)); }; class SelectLegLeft: SelectHead { onButtonClick = QUOTE(GVAR(selectedBodyPart) = 4); tooltip = CSTRING(SelectLeftLeg); - x = QUOTE(POS_X(19.5)); + x = QUOTE(POS_X(20.0)); y = QUOTE(POS_Y(8.8)); w = QUOTE(POS_W(1.1)); h = QUOTE(POS_H(5.8)); @@ -388,11 +389,11 @@ class ACE_Medical_Menu { class SelectLegRight: SelectLegLeft { onButtonClick = QUOTE(GVAR(selectedBodyPart) = 5); tooltip = CSTRING(SelectRightLeg); - x = QUOTE(POS_X(18.4)); + x = QUOTE(POS_X(18.9)); }; class Injuries: TriageCard { idc = IDC_INJURIES; - x = QUOTE(POS_X(25.66)); + x = QUOTE(POS_X(26.17)); w = QUOTE(POS_W(12.33)); }; class ActivityHeader: TreatmentHeader { @@ -404,27 +405,33 @@ class ACE_Medical_Menu { }; class QuickViewHeader: ActivityHeader { text = CSTRING(QUICK_VIEW); - x = QUOTE(POS_X(19.5)); + x = QUOTE(POS_X(20.0)); }; class LowerLine: HeaderLine { y = QUOTE(POS_Y(18.5)); }; + class LowerDivider: HeaderLine { + x = QUOTE(POS_X(19.985)); + y = QUOTE(POS_Y(18.75)); + w = QUOTE(POS_W(0.03)); + h = QUOTE(POS_H(7.6)); + }; class Activity: Injuries { idc = IDC_ACTIVITY; x = QUOTE(POS_X(1.5)); y = QUOTE(POS_Y(18.5)); w = QUOTE(POS_W(18.5)); - h = QUOTE(POS_H(6.5)); + h = QUOTE(POS_H(7.6)); colorBackground[] = {0, 0, 0, 0}; }; class QuickView: Activity { idc = IDC_QUICKVIEW; - x = QUOTE(POS_X(21.5)); + x = QUOTE(POS_X(20.0)); }; class TriageStatus: RscText { idc = IDC_TRIAGE_STATUS; style = ST_CENTER; - x = QUOTE(POS_X(13.33)); + x = QUOTE(POS_X(13.83)); y = QUOTE(POS_Y(15.5)); w = QUOTE(POS_W(12.33)); h = QUOTE(POS_H(1.1)); @@ -437,7 +444,7 @@ class ACE_Medical_Menu { style = ST_RIGHT; text = CSTRING(BodyLabelLeft); font = "RobotoCondensedBold"; - x = QUOTE(POS_X(16.5)); + x = QUOTE(POS_X(17.0)); y = QUOTE(POS_Y(10.5)); w = QUOTE(POS_W(6.0)); h = QUOTE(POS_H(2.0)); From b54be029df352a75ba901d944540f770f30b7687 Mon Sep 17 00:00:00 2001 From: amsteadrayle <2516219+amsteadrayle@users.noreply.github.com> Date: Sat, 14 Oct 2023 19:27:57 -0400 Subject: [PATCH 020/287] Medical GUI - Move target name to middle header (#9483) * Switch "status" header to player name * Set title to "Medical Menu" * Remove unused STATUS strings * Switch to existing MedicalMenu string Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> * Revert "Remove unused STATUS strings" This reverts commit 62c1ced06a47826f7d05ce99c3ea518fc6cb4170. --------- Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> --- addons/medical_gui/functions/fnc_onMenuOpen.sqf | 4 ++-- addons/medical_gui/gui.hpp | 5 +++-- addons/medical_gui/script_component.hpp | 1 + 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/addons/medical_gui/functions/fnc_onMenuOpen.sqf b/addons/medical_gui/functions/fnc_onMenuOpen.sqf index 97853137398..e5d507907e5 100644 --- a/addons/medical_gui/functions/fnc_onMenuOpen.sqf +++ b/addons/medical_gui/functions/fnc_onMenuOpen.sqf @@ -26,8 +26,8 @@ if (EGVAR(interact_menu,menuBackground) == 2) then {0 cutRsc [QEGVAR(interact_me [{setMousePosition _this}, _this] call CBA_fnc_execNextFrame; }, getMousePosition] call CBA_fnc_execNextFrame; -// Set target name as title -private _ctrlTitle = _display displayCtrl IDC_TITLE; +// Set middle header as target name +private _ctrlTitle = _display displayCtrl IDC_NAME; _ctrlTitle ctrlSetText ([GVAR(target)] call EFUNC(common,getName)); // Initially hide the triage select buttons diff --git a/addons/medical_gui/gui.hpp b/addons/medical_gui/gui.hpp index b2e83efcaae..872366ad24c 100644 --- a/addons/medical_gui/gui.hpp +++ b/addons/medical_gui/gui.hpp @@ -210,6 +210,7 @@ class ACE_Medical_Menu { class controlsBackground { class Title: RscText { idc = IDC_TITLE; + text = CSTRING(MedicalMenu); x = QUOTE(POS_X(1)); y = QUOTE(POS_Y(0)); w = QUOTE(POS_W(38)); @@ -242,8 +243,8 @@ class ACE_Medical_Menu { sizeEx = QUOTE(POS_H(1.2)); colorText[] = {1, 1, 1, 0.9}; }; - class StatusHeader: TreatmentHeader { - text = CSTRING(STATUS); + class NameHeader: TreatmentHeader { + idc = IDC_NAME; x = QUOTE(POS_X(13.83)); }; class OverviewHeader: TreatmentHeader { diff --git a/addons/medical_gui/script_component.hpp b/addons/medical_gui/script_component.hpp index eb46b19aeda..1887ed02a17 100644 --- a/addons/medical_gui/script_component.hpp +++ b/addons/medical_gui/script_component.hpp @@ -37,6 +37,7 @@ #define IDD_MEDICAL_MENU 38580 #define IDC_TITLE 1200 +#define IDC_NAME 1210 #define IDC_TRIAGE 1300 #define IDC_EXAMINE 1310 #define IDC_BANDAGE 1320 From c54a26cc42f7236b74d1103fb73a8fd46b04704c Mon Sep 17 00:00:00 2001 From: amsteadrayle <2516219+amsteadrayle@users.noreply.github.com> Date: Sat, 14 Oct 2023 19:28:22 -0400 Subject: [PATCH 021/287] Medical GUI - Show warning if tourniquet will interfere with medical menu action (#9475) * Warn if tourniquet will interfere with medical action * Add setting to enable, default to off * Tweak tooltip message * Tweak code style, missing semicolon Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> * Use localize macro Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> --------- Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> --- addons/medical_gui/functions/fnc_updateActions.sqf | 11 +++++++++++ addons/medical_gui/initSettings.sqf | 9 +++++++++ addons/medical_gui/stringtable.xml | 9 +++++++++ 3 files changed, 29 insertions(+) diff --git a/addons/medical_gui/functions/fnc_updateActions.sqf b/addons/medical_gui/functions/fnc_updateActions.sqf index ca5ca373eb0..6d52b8ccdf2 100644 --- a/addons/medical_gui/functions/fnc_updateActions.sqf +++ b/addons/medical_gui/functions/fnc_updateActions.sqf @@ -58,8 +58,19 @@ private _shownIndex = 0; private _counts = [_items] call FUNC(countTreatmentItems); _countText = _counts call FUNC(formatItemCounts); }; + _ctrl ctrlSetTooltipColorText [1, 1, 1, 1]; _ctrl ctrlSetTooltip _countText; + // Show warning if tourniquet will interfere with action + if ( + GVAR(tourniquetWarning) && + {(_category in ["examine", "medication"]) || (_items findIf {"IV" in _x}) > -1} && + {HAS_TOURNIQUET_APPLIED_ON(GVAR(target),GVAR(selectedBodyPart))} + ) then { + _ctrl ctrlSetTooltipColorText [1, 1, 0, 1]; + _ctrl ctrlSetTooltip LLSTRING(TourniquetWarning); + }; + _ctrl ctrlSetText _displayName; _ctrl ctrlShow true; diff --git a/addons/medical_gui/initSettings.sqf b/addons/medical_gui/initSettings.sqf index 1d87de401ed..5c9024fea59 100644 --- a/addons/medical_gui/initSettings.sqf +++ b/addons/medical_gui/initSettings.sqf @@ -162,3 +162,12 @@ private _categoryColors = [ELSTRING(medical,Category), format ["| %1 |", LELSTRI [0, 5, 1], false ] call CBA_fnc_addSetting; + +[ + QGVAR(tourniquetWarning), + "CHECKBOX", + [LSTRING(TourniquetWarning_DisplayName), LSTRING(TourniquetWarning_Description)], + [ELSTRING(medical,Category), LSTRING(SubCategory)], + false, + false +] call CBA_fnc_addSetting; diff --git a/addons/medical_gui/stringtable.xml b/addons/medical_gui/stringtable.xml index b1629a7399e..52c73071461 100644 --- a/addons/medical_gui/stringtable.xml +++ b/addons/medical_gui/stringtable.xml @@ -1348,5 +1348,14 @@ in vehicle's inventory + + No effect until tourniquet removed + + + Show Tourniquet Warning + + + Show a warning tooltip when a tourniquet will interfere with a medical action. + From 8104c8f465ed561a079c2c17330dae074183c319 Mon Sep 17 00:00:00 2001 From: Grim <69561145+LinkIsGrim@users.noreply.github.com> Date: Sat, 14 Oct 2023 20:21:08 -0400 Subject: [PATCH 022/287] Common - Increase sway update frequency (#9490) increase sway update frequency --- addons/common/functions/fnc_swayLoop.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/common/functions/fnc_swayLoop.sqf b/addons/common/functions/fnc_swayLoop.sqf index ec12f3f0aa3..069d908d1a1 100644 --- a/addons/common/functions/fnc_swayLoop.sqf +++ b/addons/common/functions/fnc_swayLoop.sqf @@ -27,4 +27,4 @@ if (GVAR(swayFactorsMultiplier) isNotEqualTo []) then { ACE_player setCustomAimCoef (_baseline * _multiplier); -[FUNC(swayLoop), [], 1] call CBA_fnc_waitAndExecute +[FUNC(swayLoop), [], 0.5] call CBA_fnc_waitAndExecute From 863d88ff419bc09e85d021bddd83d4686e53da2b Mon Sep 17 00:00:00 2001 From: amsteadrayle <2516219+amsteadrayle@users.noreply.github.com> Date: Sun, 15 Oct 2023 18:45:45 -0400 Subject: [PATCH 023/287] Medical GUI - Add divider bars for triage and toggle category buttons (#9496) * Add divider bars for triage and toggle category buttons * Tweak vertical position of category icons * Fix spacing --- .../medical_gui/functions/fnc_onMenuOpen.sqf | 18 +++++++++++++++++- addons/medical_gui/gui.hpp | 13 ++++++++++++- addons/medical_gui/script_component.hpp | 2 ++ 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/addons/medical_gui/functions/fnc_onMenuOpen.sqf b/addons/medical_gui/functions/fnc_onMenuOpen.sqf index e5d507907e5..e77d92bddd6 100644 --- a/addons/medical_gui/functions/fnc_onMenuOpen.sqf +++ b/addons/medical_gui/functions/fnc_onMenuOpen.sqf @@ -59,9 +59,25 @@ private _countEnabled = { if (_category isEqualType "") then { _x set [1, (GVAR(actions) findIf {_category == _x select 1}) > -1]; }; _x select 1 } count _list; -private _offsetX = POS_X(1.75) + 0.5 * (POS_X(12) - POS_X(_countEnabled * 1.5)); +private _offsetX = POS_X(1.5) + 0.5 * (POS_X(12.33) - POS_X(_countEnabled * 1.5) - POS_W(2 * 0.2)); +// 0.2 - divider gap size + +// Set divider position +private _ctrl = _display displayCtrl IDC_TRIAGE_DIVIDER; +_ctrl ctrlSetPositionX _offsetX + POS_W(1.5) + POS_W(0.085); // 0.085 = (0.2 - 0.03) / 2 +_ctrl ctrlCommit 0; + +_ctrl = _display displayCtrl IDC_TOGGLE_DIVIDER; +_ctrl ctrlSetPositionX _offsetX + POS_W(1.5*(_countEnabled - 1)) + POS_W(0.2) + POS_W(0.085); +_ctrl ctrlCommit 0; + { _x params ["_idc", "_enabled"]; + + if (_forEachIndex == 1 || {_forEachIndex == count _list - 1}) then { + _offsetX = _offsetX + POS_W(0.2); + }; + private _ctrl = _display displayCtrl _idc; if (_enabled) then { _ctrl ctrlSetPositionX _offsetX; diff --git a/addons/medical_gui/gui.hpp b/addons/medical_gui/gui.hpp index 872366ad24c..58d98199f92 100644 --- a/addons/medical_gui/gui.hpp +++ b/addons/medical_gui/gui.hpp @@ -266,7 +266,7 @@ class ACE_Medical_Menu { text = QPATHTOF(data\categories\triage_card.paa); tooltip = CSTRING(ViewTriageCard); x = QUOTE(POS_X(1.75)); - y = QUOTE(POS_Y(2.73)); + y = QUOTE(POS_Y(2.75)); w = QUOTE(POS_W(1.5)); h = QUOTE(POS_H(1.5)); color[] = {1, 1, 1, 1}; @@ -324,6 +324,17 @@ class ACE_Medical_Menu { text = QPATHTOF(data\categories\toggle_to_other.paa); x = QUOTE(POS_X(12)); }; + class TriageDivider: HeaderLine { + idc = IDC_TRIAGE_DIVIDER; + x = QUOTE(POS_X(3.265)); + y = QUOTE(POS_Y(3.0)); + w = QUOTE(POS_W(0.03)); + h = QUOTE(POS_H(1.0)); + }; + class ToggleDivider: TriageDivider { + idc = IDC_TOGGLE_DIVIDER; + x = QUOTE(POS_X(3.265)); + }; class TriageCard: RscListBox { idc = IDC_TRIAGE_CARD; x = QUOTE(POS_X(1.5)); diff --git a/addons/medical_gui/script_component.hpp b/addons/medical_gui/script_component.hpp index 1887ed02a17..d69fb654344 100644 --- a/addons/medical_gui/script_component.hpp +++ b/addons/medical_gui/script_component.hpp @@ -46,6 +46,8 @@ #define IDC_ADVANCED 1350 #define IDC_DRAG 1360 #define IDC_TOGGLE 1370 +#define IDC_TRIAGE_DIVIDER 1380 +#define IDC_TOGGLE_DIVIDER 1390 #define IDC_TRIAGE_CARD 1400 #define IDC_INJURIES 1410 From 9ecb35250d8b34c49b1fe472469349e22f576195 Mon Sep 17 00:00:00 2001 From: amsteadrayle <2516219+amsteadrayle@users.noreply.github.com> Date: Sun, 15 Oct 2023 18:45:52 -0400 Subject: [PATCH 024/287] Medical GUI - Use selected color when triage category selected (#9495) Show selected color for triage category --- addons/medical_gui/functions/fnc_updateCategories.sqf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/medical_gui/functions/fnc_updateCategories.sqf b/addons/medical_gui/functions/fnc_updateCategories.sqf index cf6498924ef..c9917a87581 100644 --- a/addons/medical_gui/functions/fnc_updateCategories.sqf +++ b/addons/medical_gui/functions/fnc_updateCategories.sqf @@ -22,6 +22,7 @@ params ["_display"]; private _ctrl = _display displayCtrl _idc; private _enable = GVAR(actions) findIf {_category == _x select 1 && {call (_x select 2)}} > -1; + if (_category isEqualTo "triage") then {_enable = true}; _ctrl ctrlEnable _enable; private _selectedColor = [ @@ -36,6 +37,7 @@ params ["_display"]; _color set [-1, 0.8]; // Mouseover change _ctrl ctrlSetActiveColor _color; } forEach [ + [IDC_TRIAGE, "triage"], [IDC_EXAMINE, "examine"], [IDC_BANDAGE, "bandage"], [IDC_MEDICATION, "medication"], From f2ae068e9fc49a99339a70c9295e0b2f0c7723d9 Mon Sep 17 00:00:00 2001 From: amsteadrayle <2516219+amsteadrayle@users.noreply.github.com> Date: Sun, 15 Oct 2023 18:58:48 -0400 Subject: [PATCH 025/287] Medical GUI - Fix action button width (#9497) Fix action button width --- addons/medical_gui/gui.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/medical_gui/gui.hpp b/addons/medical_gui/gui.hpp index 58d98199f92..07ccd554f09 100644 --- a/addons/medical_gui/gui.hpp +++ b/addons/medical_gui/gui.hpp @@ -189,7 +189,7 @@ class ACE_Medical_Menu_ActionButton: RscButtonMenu { style = ST_LEFT; x = 0; y = 0; - w = QUOTE(POS_W(11.833)); + w = QUOTE(POS_W(12.33)); h = QUOTE(POS_H(1)); size = QUOTE(POS_H(0.9)); class Attributes { From 2f2c253c39a8f01d518ac261af13b9080fe5afb9 Mon Sep 17 00:00:00 2001 From: amsteadrayle <2516219+amsteadrayle@users.noreply.github.com> Date: Sun, 15 Oct 2023 20:45:02 -0400 Subject: [PATCH 026/287] Medical GUI - Remake drag/carry category icon (#9498) Remake carry icon --- addons/medical_gui/data/categories/carry.paa | Bin 26983 -> 27993 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/addons/medical_gui/data/categories/carry.paa b/addons/medical_gui/data/categories/carry.paa index 7ebb830b03da850cdb029f69eed4cf6bef4bbe28..27a9185d29e20ea3c93dd82d4340b116c68ace53 100644 GIT binary patch literal 27993 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�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 YNL0Y*I&|<}Pf~xs?t;)bs06})1G;Iv`2YX_ literal 26983 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 qBInhc_O=BzNc?BLo|cP&$8eULCj1O Date: Mon, 16 Oct 2023 07:21:02 +0200 Subject: [PATCH 027/287] Translations - Add Polish Translations (#9489) * Translations - Add Polish Translations **When merged this pull request will:** - Add missing polish translations - Remove russian translation from polish - ace_common ### IMPORTANT - [ ] If the contribution affects [the documentation](https://github.com/acemod/ACE3/tree/master/docs), please include your changes in this pull request so the documentation will appear on the [website](https://ace3.acemod.org/). - [x] [Development Guidelines](https://ace3.acemod.org/wiki/development/) are read, understood and applied. - [x] Title of this PR uses our standard template `Component - Add|Fix|Improve|Change|Make|Remove {changes}`. * Update addons/fieldmanual/stringtable.xml Co-authored-by: PabstMirror * Update addons/fieldmanual/stringtable.xml Co-authored-by: PabstMirror * Update addons/fieldmanual/stringtable.xml Co-authored-by: PabstMirror * Update stringtable.xml * Update addons/fieldmanual/stringtable.xml Co-authored-by: PabstMirror * Apply suggestions from code review --------- Co-authored-by: PabstMirror Co-authored-by: Filip Maciejewski --- addons/common/stringtable.xml | 2 +- addons/fieldmanual/stringtable.xml | 87 ++++++++++++++++++++++++ addons/medical_ai/stringtable.xml | 1 + addons/medical_gui/stringtable.xml | 22 ++++++ addons/medical_treatment/stringtable.xml | 8 +++ addons/reloadlaunchers/stringtable.xml | 1 + addons/zeus/stringtable.xml | 2 + 7 files changed, 122 insertions(+), 1 deletion(-) diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index 9cb581b91f6..1b014d8a9a8 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -1359,7 +1359,7 @@ Toggle - переключить + Przełącz переключить Basculer Cambiar diff --git a/addons/fieldmanual/stringtable.xml b/addons/fieldmanual/stringtable.xml index 24f735ff72f..240ebc106e2 100644 --- a/addons/fieldmanual/stringtable.xml +++ b/addons/fieldmanual/stringtable.xml @@ -20,72 +20,95 @@ Hunger + Głód %3Hunger%4 increases linearly with soldier's movement speed. Restore by eating food.<br/><br/>%3Usage:%4<br/>%2Pick up food.<br/>%2Use [%3%12%4] and select %3Survival%4.<br/>%2Choose an item to consume. + %3Głód%4 zwiększa się liniowo wraz z prędkością ruchu. Odnawiany przez spożywanie jedzenia.<br/><br/>%3Użycie:%4<br/>%2Podnieś jedzenie.<br/>%2Użyj [%3%12%4] i wybierz %3Surwiwal%4.<br/>%2Wybierz pokarm do zjedzenia Thirst + Pragnienie %3Thirst%4 increases linearly with soldier's movement speed. Restore by drinking liquids.<br/><br/>%3Usage:%4<br/>%2Pick up a drink.<br/>%2Use [%3%12%4] and select %3Survival%4.<br/>%2Choose an item to consume. + %3Pragnienie%4 zwiększa się liniowo wraz z prędkością ruchu. Odnawiane przez spożywanie napojów.<br/><br/>%3Użycie:%4<br/>%2Podnieś napój.<br/>%2Użyj [%3%12%4] i wybierz %3Surwiwal%4.<br/>%2Wybierz napój do wypicia. Medical Treatment + Opieka Medyczna Decrease Heart Rate + Obniża Tętno %3Adenosine%4 is used to decrease heart rate.<br/><br/>%3Usage:%4<br/>%2Use [%3%13%4] or [%3%14%4] and select an appendage.<br/>%2Inject %3Adenosine%4. + %3Adenozyna%4 jest używana do obniżenia tętna.<br/><br/>%3Użycie:%4<br/>%2Użyj [%3%13%4] lub [%3%14%4] i wybierz kończynę.<br/>%2Wstrzyknij %3Adenozynę%4. Bandages + Bandaże Close Wounds + Zamykają Rany %3Bandages%4 stop bleeding and close wounds. Depending on your settings, bandages may reopen if surgery is not performed.<br/><br/>%2%3Field Dressing:%4<br/>%11<t color='#D9D900'>Average</t> In All Categories<br/>%2%3Packing Bandage:%4<br/>%11<t color='#D9D900'>Average</t> Treatment<br/>%11<t color='#E60000'>Higher</t> Reopen Chance<br/>%11<t color='#00CC00'>Longer</t> Reopen Delay<br/>%2%3Elastic Bandage:%4<br/>%11<t color='#00CC00'>Higher</t> Treatment<br/>%11<t color='#E60000'>Higher</t> Reopen Chance<br/>%11<t color='#E60000'>Shorter</t> Reopen Delay<br/>%2%3Quickclot:%4<br/>%11<t color='#E60000'>Lower</t> Treatment<br/>%11<t color='#00CC00'>Lower</t> Reopen Chance<br/>%11<t color='#00CC00'>Longer</t> Reopening Delay<br/><br/>%3Usage:%4<br/>%2Use [%3%13%4] or [%3%14%4] and select a injured body part.<br/>%2Bandage body part by selecting desired %3Bandage%4 type. + %3Bandaże%4 zatrzymają krwawienie i zamykają rany. W zależności od twoich ustawień, bandaże mogą się otwierać, jeżeli rany nie są zaszyte. <br/><br/>%2%3Bandaż Jałowy:%4<br/>%11<t color='#D9D900'>Przeciętne</t> We wszystkich kategoriach<br/>%2%3Bandaż Uciskowy: %4<br/>%11<t color='#D9D900'>Przeciętne</t> Leczenie<br/>%11<t color='#E60000'>Wyższa</t> Szansa Otwarcia<br/>%11<t color='#00CC00'>Dłuższe</t> Opóźnienie Otwarcia<br/>%2%3Bandaż Elastyczny: %4<br/>%11<t color='#00CC00'>Lepsze</t> Leczenie<br/>%11<t color='#E60000'>Wyższa</t> Szansa Otwarcia<br/>%11<t color='#E60000'>Krótsze</t> Opóźnienie Otwarcia<br/>%2%3Quickclot: %4<br/>%11<t color='#E60000'>Gorsze</t> Leczenie<br/>%11<t color='#00CC00'>Niższa</t> Szansa Otwarcia<br/>%11<t color='#00CC00'>Dłuższe</t> Opóźnienie Otwarcia<br/><br/>%3Użycie:%4<br/>%2Użyj [%3%13%4] lub [%3%14%4] i wybierz zranioną część ciała. <br/>%2Zabandażuj ranę wybierając typ %3Bandażu%4. IV Fluids + Płyny IV Restore Blood Volume + Przywracają Krew %3IV fluids%4 restore lost blood volume. Blood, Plasma, and Saline are functionally the same.<br/><br/>%3Usage:%4<br/>%2Use [%3%13%4] or [%3%14%4] and select an appendage.<br/>%2Restore blood volume by selecting desired %3IV Fluid%4 type. + %3Płyny IV%4 przywracają poziom krwi. Krew, Osocze, i Sól Fizjologiczna są takie same pod względem funkcjonalności.<br/><br/>%3Użycie:%4<br/>%2Użyj [%3%13%4] lub [%3%14%4] i wybierz kończynę.<br/>%2Przywróć poziom krwi przez podanie wybrego %3Płynu IV%4. Increase Heart Rate | Wake Up Faster + Zwiększ Tętno | Obudź się Szybciej %3Epinephrine%4 increases a patient's pulse as well as potentially decreasing the time between consciousnesss checks (effectively reducing the time needed for the patient to wake up).<br/><br/>%3Usage%4<br/>%2Use [%3%13%4] or [%3%14%4] and select an appendage.<br/>%2Inject %3Epinephrine%4. + %3Adrenalina%4 zwiększa tętno pacjenta, zmniejszając czas pomiędzy sprawdzeniami przytomności (efektywnie redukując czas potrzebny do przebudzenia się pacjenta).<br/><br/>%3Użycie%4<br/>%2Użyj [%3%13%4] lub [%3%14%4] i wybierz kończynę.<br/>%2Wstrzyknij %3Adrenalinę%4. Restore Like New + Jak Nowo Narodzony The %3Personal Aid Kit%4 is an item that allows a soldier to be fully healed. Independent of %3ACE Settings%4, it requires that the patient is in %3Stable Condition%4 before use.<br/><br/>%3Stable Condition%4 qualifies as:<br/>%2Unit is %3Alive%4.<br/>%2Unit is %3Conscious%4.<br/>%2Unit has no active %3Bleeding%4.<br/>%2Heart Rate >= 40.<br/>%2Systolic BP >= 60.<br/>%2Diastolic BP >= 50.<br/><br/>%3Usage:%4<br/>%2Move to appropriate location depending on %3ACE Settings%4.<br/>%2Use [%3%13%4] or [%3%14%4] and select %3Advanced Treatments%4<br/>%2Select %3Use Personal Aid Kit%4. + %3Apteczka Osobista%4 jest przedmiotem pozwalającym na pełne uleczenie gracza. Niezależnie od %3Ustawień ACE%4, wymagane jest, aby pacjent był w%3Stanie Stabilnym%4 przed jej użyciem.<br/><br/>%3Stan Stabilny%4 występuje gdy:<br/>%2Jednostka jest %3Żywa%4.<br/>%2Jednostka jest %3Przytomna%4.<br/>%2Jednostka nie%3Krwawu%4.<br/>%2Tętno>= 40. <br/>%2Ciśnienie Skurczowe >= 60.<br/>%2Ciśnienie Rozkurczowe >= 50.<br/><br/>%3Użycie:%4<br/>%2Udaj się do właściwej lokacji żależnej od %3Ustawień ACE%4.<br/>%2Użyj [%3%13%4] lub [%3%14%4] i wybierz %3Zaawansowane Zabiegi%4.<br/>%2Wybierz %3Użyj Apteczki Osobistej%4. Fix Fractures + Opatrywanie Złamań A %3Splint%4 is used to fix fractures. The %3Splint%4 is consumed when used.<br/><br/>%3Usage:%4<br/>%2Use [%3%13%4] or [%3%14%4] and select an affected appendage.<br/>%2Select %3Apply Splint%4. + %3Szyna%4 jest używana do leczenie złamań. %3Szyna%4 jest zużywana po wykorzystaniu.<br/><br/>%3Użycie:%4<br/>%2Użyj [%3%13%4] lub [%3%14%4] i wybierz kończynę, na którą ma być założona.<br/>%2Wybierz %3Załóż Szynę%4. Prevent Wounds From Reopening + Zapobiegaj Ponownemu Otwieraniu się Ran A %3Surgical Kit%4 is used to prevent wounds from reopening after being bandaged. Depending on settings, it can also clear trauma.<br/><br/>%3Usage:%4<br/>%2Use [%3%13%4] or [%3%14%4] and select %3Advanced Treatment%4.<br/>%2Select %3Use Surgical Kit%4. + %3Zestaw do Szycia%4 jest używany do zapobiegania otwieraniu się ran po ich zabandażowaniu. W zależności od ustawień może także je leczyć.<br/><br/>%3Użycie:%4<br/>%2Użyj [%3%13%4] lub [%3%14%4] i wybierz %3Zaawansowane Zabiegi%4.<br/>%2Wybierz %3Użyj Zestawu do Szycia%4. Stop Bleeding + Zatamuj Krwawienie A %3Tourniquet%4 stops bleeding temporarily so that a wound(s) can be bandaged. Can only be used on limbs.<br/><br/>%3Usage:%4<br/>%2Use [%3%13%4] or [%3%14%4] and select an affected appendage.<br/>%2Select %3Apply Tourniquet%4. + %3Staza%4 czasowo zatrzymuje krwawienie pozwalając na zabandażowanie ran. Może być użyta tylko na kończynach.<br/><br/>%3Użycie:%4<br/>%2Użyj [%3%13%4] lub [%3%14%4] i wybierz kończynę.<br/>%2Wybierz %3Załóż Stazę%4. Medical Menu @@ -105,171 +128,227 @@ Treatment, Simplified + Leczenie, Uproszczone The %3Medical Menu%4 is a dedicated %3interface%4 to facilitate %3medical treatment%4. The %3R%4 and %3L%4 letters indicate the side of the patient's body being treated.<br/><br/>%3Usage:%4<br/>%2Use [%3%14%4] while looking at a patient to open the Medical Menu. Opening the menu without a patient allows for self-treatment.<br/>%2Alternatively, use [%3%12%4] or [%3%13%4] and select %3Medical Menu%4.<br/><br/>%3Keybinds:%4<br/>%2Use [%3W, A, S, D, X, and Z%4] to select body parts.<br/>%2Use your %3number keys%4 to select treatment categories. + %3Menu Medyczne%4 jest dedykowanym %3interfejsem%4 ułatwiającym %3zabiegi medyczne%4. Litery %3P%4 i %3L%4 wskazują, która część ciała pacjenta jest opatrywana.<br/><br/>%3Użycie:%4<br/>%2Użyj [%3%14%4] podczas patrzenia na pacjenta aby otworzyć Menu Medyczne. Otwarcie menu bez patrzenia na pacjenta otwiera menu leczenia własnej postaci.<br/>%2Alternatywnie, użyj [%3%12%4] lub [%3%13%4] i wybierz %3Menu Medyczne%4.<br/><br/>%3Przypisanie Klawiszy:%4<br/>%2Użyj [%3W, A, S, D, X, i Z%4] aby wybrać części ciała.<br/>%2Użyj %3klawiszy numerycznych%4 do wybrania kategorii leczenia. Portable, Precise, Rugged + Przenośny, Precyzyjny, Wytrzymały The %3Horus ATragMX%4 considers atmospheric conditions, gun data, ammunition, range, speed, and muzzle velocity to calculate precise aiming solutions with %3Come-Up%4 results - and even accounts for %3Coriolis%4 and %3Spin Drift%4 effects. %3ATragMX%4, loaded on a handheld computer made by %3TDS Recon%4, is easy to use and lightning fast. The %3Recon%4 meets the rigorous %3MIL-STD-810F%4 military standard for drops, vibration, humidity, altitude and extreme temperatures.<br/><br/>%3Usage:%4<br/>Please visit the wiki page for more information. + %3Horus ATragMX%4 uwzględnia warunki atmosferyczne, dane broni, amunicję, zasięg, prędkość wylotową do wyliczenia precyzyjnych nastaw - ponadto uwzględnia %3Efekt Coriolisa%4 oraz %3Efekt Spinowy%4. %3ATragMX%4, załadowany na komputer przenośny wyprodukowany przez %3TDS Recon%4, jest łatwy i prosty w użyciu. %3Recon%4 spełnia rygorystyczne wymagania %3MIL-STD-810F%4 pod względem odporności na upadek, wibracje, wilgotność, wyskość oraz ekstremalne temperatury.<br/><br/>%3Użycie:%4<br/>Wejdź na wiki po więcej informacji. Bring Out Your Dead + Przyprowadź Swoich Zmarłych %3Body Bags%4 are used to transport dead bodies. They can be dragged and loaded into vehicles.<br/><br/>%3Usage:%4<br/>%2Approach a dead body.<br/>%2Use [%3%13%4] or [%3%14%4] and select %3Place Body In Bodybag%4. + %3Worki na Zwłoki%4 są używane do transportu ciał. Worki mogą być przeciągane i ładowanie do pojazdów.<br/><br/>%3Użycie:%4<br/>%2Podejdź do martwego ciała.<br/>%2Użyj [%3%13%4] lub [%3%14%4] i wybierz %3Umieść Ciało w Worku na Zwłoki%4. Take Prisoners + Weź Więźniów %3Cable Ties%4 enable a soldier to capture and detain another soldier. Once apprehended, the captor gains the ability to inspect the prisoner's belongings, set them free, or accompany them to an alternate area. Transporting escorted prisoners is also possible, including loading them into vehicles if needed. Depending on your settings, units may need to surrender before being taken captive.<br/><br/>%3Usage:%4<br/>%2Approach the unit and use the [%3%13%4].<br/>%2The interaction is located around the hands in the form of a handcuffs icon.<br/>%2Repeat to release. + %3Opaski Zaciskowe%4 umożliwiają żołnierzowi pojmanie i zatrzymanie innego żołnierza, a po zatrzymaniu pozwalają na sprawdzenia ekwipunku więźnia, uwolnienia go lub przeniesienia w inne miejsce, a także załadowania go do pojazdu, jeśli zajdzie taka potrzeba. W zależności od ustawień, jednostka może wymagać poddania się przed wzięciem do niewoli.<br/><br/>%3Użycie:%4<br/>%2Podejdź do jednostki i użyj [%3%13%4].<br/>%2Interakcja jest zlokalizowana na rękach pod postacią ikony kajdanek.<br/>%2Użyj ponownie aby uwolnić. Phone In An Explosion + Zadzwoń po Eksplozję The %3Cellphone%4 is functionally a %3Clacker%4. Use it to connect and detonate an explosive device. Multiple devices can be linked to the cellphone and called within the phonebook.<br/><br/>%3Usage:%4<br/>%2Place an explosive.<br/>%2Use [%3%13%4], select %3Explosives%4, and select %3Cellphone%4.<br/>%2Open the cellphone interface with [%3%12%4].<br/>%2Navigate the phone book with the arrows and select your calling number.<br/>%2Call the number to detonate. + %3Telefon%4 jest funkcjonalnie %3Detonatorem%4. Użyj go, aby podłączyć i zdetonować ładunek wybuchowy. Wiele urządzeń może być połączonych z jednym telefonem komórkowym i wywoływanych za pomocą książki telefonicznej.<br/><br/>%3Użycie:%4<br/>%2Połóż ładunek wybuchowy<br/>%2Użyj [%3%13%4], wybierz %3Ładunki Wybuchowe%4, i wybierz %3Telefon%4. <br/>%2Otwórz interfejs telefonu za pomocą [%3%12%4].<br/>%2Nawiguj po książce telefonicznej za pomocą strzałek i wybierz żądany numer.<br/>%2Zadzwoń pod niego aby wywołać wybuch. Portable Reading Lights + Przenośne Lampki do Czytania %3Chemlight Shields%4 give you the ability to read your map, even in dark environments. However, when using %3Chemlight Shields%4, you will have a slight glow around you.<br/><br/>%3Usage:%4<br/>%2Use [%3%12%4] and select %3Equipment%4.<br/>%2elect %3Chemlights%4 and %3Prepare Chemlight Shield (Color)%4.<br/>%2Open %3Map%4.<br/>%2Use [%3%12%4] and select %3Flashlights%4 where you will find your chemlight shield. + %3Osłony na Świetliki%4 dają ci możliwość czytania mapy nawet w najciemniejszym otoczeniu. Jednak podczas korzystania z %3Świetlików%4, wokół ciebie będzie widoczna lekka poświata<br/><br/>%3Użycie:%4<br/>%2Użyj [%3%12%4] i wybierz %3Ekwipunek%4. <br/>%2Wybierz %3Świetlik%4 i %3Przygotuj Osłonę Świetlika (Kolor)%4.<br/>%2Otwórz%3Mapę%4.<br/>%2Użyj [%3%12%4] i wybierz %3Latarki%4 gdzie znajdziesz twoją osłonę na świetlik. Remote Detonation + Zdalna Detonacja Use %3Clackers%4 to connect and detonate an explosive device. Multiple devices can be linked to a clacker and detonated on different channels.<br/><br/>%3Usage:%4<br/>%2Place an explosive.<br/>%2Use [%3%13%4], select %3Explosives%4, and select the %3Clacker%4 you wish to link to.<br/>%2Open the ACE interface with [%3%12%4].<br/>%2Select %3Explosives%4 and select a %3Clacker%4.<br/>%2Select the %3Explosive%4 you wish to detonate. + Użyj%3Detonatora%4 do podłączenia i wysadzenia ładunku. Do jednego ładunku może być podłączonych wiele ładunków na różnych kanałach.<br/><br/>%3Użycie:%4<br/>%2Połóż ładunek wybuchowy.<br/>%2Użyj [%3%13%4], wybierz%3Mat. Wybuchowe%4, i wybierz %3Detonator%4, do którego chcesz go podłączyć.<br/>%2Otwórz menu interakcji ACE [%3%12%4].<br/>%2Wybierz %3Mat. Wybuchowe%4 i wybierz %3Detonator%4.<br/>%2Wybierz %3Ładunek%4 który chcesz wysadzić. Navigate + Nawigacja The %3DAGR%4 is a simpler version of the %3MicroDAGR GPS%4. It has similar features but lacks the topographic and satellite imaging functions of the %3MicroDAGR GPS%4.<br/><br/>%3Usage:%4<br/>%2Equip a %3DAGR%4.<br/>%2Use [%3%12%4] and select %3Configure%4 or %3Toggle%4.<br/><br/>The following menus are available when configuring your %3DAGR:%4<br/>%11%2Data View: WIP<br/>%11%2GoTo WP: Select a waypoint to track.<br/>%11%2WP List: Add/Edit/Remove waypoints.<br/>%11%2Connect To: Connect %3DAGR%4 to the %3Vector 21 Rangefinder%4.<br/>%11%2Options + %3DAGR%4 jest uproszczoną wersją%3MicroDAGR GPS%4. Posiada podobne funkcje, ale brakuje mu map dostępnych w %3MicroDAGR GPS%4.<br/><br/>%3Użycie:%4<br/>%2Wyekwipuj %3DAGR%4.<br/>%2Użyj [%3%12%4] i wybierz %3Konfiguruj%4 lub %3Przełącz%4.<br/><br/>Poniższe menu są dostępne podczas konfiguracji %3DAGR:%4<br/>%11%2Widok Danych: WIP<br/>%11%2GoTo WP: Wybierz waypoint do śledzenia.<br/>%11%2WP List: Dodaj/Edytuj/Usuń waypointy.<br/>%11%2Połącz do: Połącz %3DAGR%4 do dalmierza %3Vector 21%4.<br/>%11%2Opcje Explosive Revenge + Wybuchowa Zemsta The %3Dead Man's Switch%4 is a device that allows a soldier to detonate an %3Explosive%4 when the soldier dies.<br/><br/>%3Usage:%4<br/>%2Use [%3%12%4] and select %3Explosives%4.<br/>%2Select %3Dead Man's Switch%4 and connect the desired %3Explosive%4.<br/>%2Repeat the process and disconnect to reverse. + %3Czuwak%4 jest urządzeniem pozwalającym wysadzić %3Ładunek Wybuchowy%4 gdy żołnierz zginie.<br/><br/>%3Użycie:%4<br/>%2Użyj [%3%12%4] i wybierz %3Mat. Wybuchowe%4.<br/>%2Wybierz %3Czuwak%4 i połącz wybrany %3Ładunek Wybuchowy%4.<br/>%2W celu odłączenia powtórz czynności i wybierz odłącz. The %3Defusal Kit%4 allows defusal of explosives.<br/><br/>%3Usage:%4<br/>%2Equip a %3Defusal Kit%4.<br/>%2Safely approach an %3Explosive%4.<br/>%2Use [%3%13%4] and select %3Defuse%4. + %3Zestaw do Rozbrajania%4 pozwala rozbrajać ładunki wybuchowe.<br/><br/>%3Użycie:%4<br/>%2Wyekwipuj %3Zestaw do Rozbrajania%4.<br/>%2Ostrożnie podejdź pod %3Ładunek Wybuchowy%4.<br/>%2Użyj [%3%13%4] i wybierz %3Rozbrój%4. Defuse Explosives + Rozbrajanie Ładunków Protect Your Hearing + Dbaj o Swój Słuch %3Ear Plugs%4 help prevent hearing damage from repeat loud noises near a soldier. Insert %3Ear Plugs%4 to lower volume of a soldier's environment and prevent %3Combat Deafness%4.<br/><br/>%3Usage:%4<br/>%2Use [%3%12%4] and select %3Equipment%4.<br/>%2Insert %3Ear Plugs%4. + %3Stopery do Uszu%4 zapobiegają uszkodzeniom słuchu na skutek wybuchów i strzałów w pobliżu żołnierza. Włóż %3Stopery do Uszu%4 w celu wyciszenia otoczenia i uniknięcia %3Głuchoty Bojowej%4.<br/><br/>%3Użycie:%4<br/>%2Użyj [%3%12%4] i wybierz %3Ekwipunek%4.<br/>%2Włóż %3Stopery do Uszu%4. Get To Cover + Łap Osłonę The %3Entrenching Tool%4 allows soldiers to dig trenches to help defend their position. The soldier must be on soil in order to dig a trench.<br/><br/>%3Usage:%4<br/>%2Equip an %3Entrenching Tool%4.<br/>%2Use [%3%12%4] and select %3Equipment%4.<br/>%2Select the type of trench you wish to build. + %3Saperka%4 pozwala żołnierzowi kopać okopy w celu obrony swoich pozycji. Żołnierz musi być na glebie, aby wykopać okop.<br/><br/>%3Użycie:%4<br/>%2Wyekwipuj %3Saperkę%4.<br/>%2Użyj [%3%12%4] i wybierz %3Ekwipunek%4.<br/>%2Wybierz rodzaj okopu, który chcesz wykopać. Flashlights + Latarki Illuminate Your Map + Rozświetlij Swoją Mapę %3Flashlights%4 give you the ability to read your map, even in dark environments. However, when using %3Flashlights%4, you will have a slight glow around you.<br/><br/>%3Usage:%4<br/>%2On the map screen, use [%3%12%4] and select %3Flashlights%4.<br/>%2Select the %3Flashlight%4 you want to use and select %3On%4.<br/><br/>%3Available Flashlight Items%4:<br/>%2 Fulton MX-991<br/>%2 KSF-1<br/>%2 Maglite XL50<br/><br/>%3NOTE:%4<br/>Flashlight states are persistent. + %3Latarki%4 pozwalają czytać mapę, nawet w ciemnościach. Jednakże podczas używani %3Latarki%4, będziesz miał wokół siebie delikatną poświatę.<br/><br/>%3Użycie:%4<br/>%2W widoku mapy użyj [%3%12%4] i wybierz %3Latarki%4.<br/>%2Wybierz %3Latarkę%4, którą chcesz użyć i wybierz %3Włącz%4.<br/><br/>%3Dostępne latarki%4:<br/>%2 Fulton MX-991<br/>%2 KSF-1<br/>%2 Maglite XL50<br/><br/>%3NOTE:%4<br/>Stan latarki jest trwały. Observe From The Skies + Obserwuj Świat z Góry The %3High-Altitude Unit Navigated Tactical Imaging Round (HuntIR)%4 is designed to be fired from a grenade launcher. After being fired in the air, the built-in parachute will be deployed and the IR CMOS camera will activate, providing a video stream until it touches the ground or is shot down.<br/><br/>%3Usage:%4<br/>%2Equip a %3HuntIR Monitor%4 and compatible ammunition.<br/>%2Fire the %3HuntIR Round%4 as high as possible over the area you want to observe.<br/>%2Open the %3HuntIR Monitor%4.<br/>%2Use [%3%12%4], select %3Equipment%4.<br/>%2Select %3Activate HuntIR Monitor%4. + %3High-Altitude Unit Navigated Tactical Imaging Round (HuntIR)%4 przeznaczony jest do wystrzeliwania z granatnika. Po wystrzeleniu, wbudowany spadochron zostanie otwarty i uruchomi się kamera IR CMOS, zapewniająca obraz wideo do momentu zetknięcia się z ziemią lub zestrzelenia.<br/><br/>%3Użycie:%4<br/>%2Wyekwipuj %3Monitor HuntIR%4 i kompatybilną amunicję.<br/>%2Wystrzel %3Pocisk HuntIR%4 najwyżej jak to tylko możliwe nad teren, który chcesz obserwować.<br/>%2Otwórz%3Monitor HuntIR%4.<br/>%2Użyj [%3%12%4], wybierz %3Ekwipunek%4.<br/>%2Wybierz %3Aktywuj Monitor HuntIR%4. Track Your Team With Stealth + Śledź Swój Zespół w Ciszy The %3IR Strobe%4 is a throwable that emits an IR light pulse intermittently. The %3IR Strobe%4 can also be attached to a soldier, making it useful for tracking teammates under night vision devices.<br/><br/>%3Usage:%4<br/>%2Use [%3%12%4] and select %3Equipment%4.<br/>%2Select %3Attach%4 and select the %3IR Strobe%4. + %3Stroboskop IR%4 jest rzucanym przedmiotem emitującym pulsujące światło podczerwone. %3Stroboskop IR%4 może być także przypięty do munduru, tworząc z niego użyteczne urządzenie do śledzenia żołnierzy z użyciem noktowizji.<br/><br/>%3Użycie:%4<br/>%2Użyj [%3%12%4] i wybierz %3Ekwipunek%4.<br/>%2Wybierz %3Przyczep%4 i wybierz %3Stroboskop IR%4. Pocket Weatherstation + Przenośna Pogodynka The %3Kestrel 4500 Pocket Weather Tracker%4 is a mini weather station useful for collecting the the following weather data:<br/>%2Heading and wind direction<br/>%2Crosswind and headwind<br/>%2Altitude and barometric pressure<br/>%2Wet bulb temperature<br/>%2Humidity and dewpoint<br/>%2Density altitude<br/>%2Wind chill and temperature<br/>%2Time and date<br/>%2Minimum, maximum, and average values<br/><br/>%3Usage:%4<br/>%2Equip a %3Kestrel%4.<br/>%2Use [%3%12%4] and select %3Equipment%4.<br/>%2Select %3Open%4. + %3Kestrel 4500 Pocket Weather Tracker%4 jest przenośną stacją pogodową pozwalającą zbierać takie dane jak: <br/>%2Kurs i kierunek wiatru<br/>%2Wiatr boczny i czołowy<br/>%2Wysokość i ciśnienie barometryczne<br/>%2Temperatua mokrego termometru<br/>%2Wilgotność i punkt rosy<br/>%2Gęstość powietrza<br/>%2Temperatura i temperatura odczuwalna<br/>%2Czas i data<br/>%2Wartości minimalne, maksymalne oraz średnie<br/><br/>%3Użycie: %4<br/>%2Wyekwipuj %3Kestrela%4. <br/>%2Użyj [%3%12%4] i wybierz %3Ekwipunek%4.<br/>%2Wybierz %3Otwórz%4. Triangulate Your Position + Trianguluj Swoją Pozycję The %3Map Tools%4 are a set of tools that allows a soldier to measure distances and angles. Useful for land, and calculating firing solutions for artillery.<br/><br/>%3Usage:%4<br/>%2Open %3Map%4.<br/>%2Use [%3%12%4] and select %3Map Tools%4.<br/>%2 The Tool can be moved by dragging with [%3Left-Click%4] while holding [%3ALT%4]. + %3Narzędzia Nawigacyjne%4 są zestawem narzędzi pozwalającym mierzyć dystans i kąt. Użyteczne do wyliczania parametrów strzałów dla artylerii.<br/><br/>%3Użycie:%4<br/>%2Otwórz%3Mapę%4.<br/>%2Użyj [%3%12%4] i wybierz %3Narzędzia Nawigacyjne%4.<br/>%2 Narzędzia mogą być przeciągane za pomocą [%3LPM%4] trzymając [%3ALT%4]. Advanced DAGR + Zaawansowany DAGR The %3MicroDAGR GPS%4 is an advanced version of the %3DAGR%4. It provides position, navigation, and timing (PNT) data to include:<br/>%2Compass and heading<br/>%2Date and hour synced to the mission<br/>%2Elevation (relative to sea level)<br/>%2Current speed<br/>%2GPS with topographic and satellite view<br/>%2Creating, naming, and deleting waypoints<br/>%2Friendly identification (Requires ACE BLUFOR Tracker Setting)<br/>Connection to the Vector-21 Rangefinder for data import (waypoint creation and grid reference of ranged targets)<br/><br/>%3Usage:%4<br/>%2For usage instructions, please visit the dedicated %3MicroDAGR%4 wiki. + %3MicroDAGR GPS%4 jest zaawansowaną wersją %3DAGR%4. Dostarcza dane oparte o pozycję, nawigację, i czas (PNT): <br/>%2Kompas i kierunek<br/>%2Datę i godzinę zsynchronizowaną z misją<br/>%2Elewację (relatywną do poziomu morza)<br/>%2Obecną prędkość<br/>%2GPS z widokiem topograficznym i satelitarnym<br/>%2Tworzenie, nazywanie oraz usuwanie waypointów<br/>%2Identyfikację sojuszników (Wymaga ACE BLUFOR Tracker)<br/>Połączenie do dalmierza Vector-21 w celu importu danych (waypointy i współrzędne zmierzonego celu)<br/><br/>%3Użycie: %4<br/>%2Po instrukcję użycia odwiedź %3MicroDAGR%4 wiki. Range Tables + Tabele Strzelnicze Get A Firing Solution + Strzelaj Celnie %3Range Tables%4 allow for a soldier to estimate accurate shot placement on direct or indirect targets (depending on asset). The %3Range Table%4 will automatically fill depending on the soldiers selected weapon/vehicle.<br/><br/>%3Usage:%4<br/>%2Use [%3%12%4] and select %3Equipment%4.<br/>%2Select the desired %3Range Table%4. + %3Tabele Strzelnicze%4 pozwalają żołnierzowi oszacować dokładne rozmieszczenie strzałów na cele bezpośrednie lub pośrednie (w zależności od zasobu). %3Tabele Strzelnicze%4 wypełnią się automatycznie w zależności od wybranej broni/pojazdu.<br/><br/>%3Użycie:%4%2Użyj [%3%12%4] i wybierz %3Ekwipunek%4<br/>.<br/>%2Wybierz żądaną%3Tabelę Strzelniczą%4. Ropes + Liny Tow With Ease + Holowanie bez Wysiłku %3Ropes%4 have multiple uses including %3Towing%4 vehicles and %3Fast Roping%4 from helicopters.<br/><br/>%3Towing:%4<br/>%2Approach a vehicle.<br/>%2Use [%3%13%4] and select %3Towing%4.<br/>%2Select rope length.<br/>%2Select attachment point on towing vehicle.<br/>%2Select attachment on towed vehicle.<br/><br/>%3Available Rope Lengths:%4<br/>%2 3.2 meters<br/>%2 6.2 meters<br/>%2 12.2 meters<br/>%2 15.2 meters<br/>%2 18.3 meters<br/>%2 27.4 meters<br/>%2 36.6 meters + %3Liny%4 mają wiele zastosowań, takich jak %3Holowanie%4 pojazdów czy %3Zjeżdżanie na Linach%4 z helikopterów.<br/><br/>%3Holowanie:%4<br/>%2Podejdź pod pojazd.<br/>%2Użyj [%3%13%4] i wybierz %3Holowanie%4.<br/>%2Wybierz długość liny. <br/>%2Wybierz punkt zaczepu liny na holującym pojeździe.<br/>%2Wybierz punkt zaczepu liny na holowanym pojeździe.<br/><br/>%3Dostępne Długości Liny:%4<br/>%2 3.2 metera<br/>%2 6.2 metera<br/>%2 12.2 metera<br/>%2 15.2 metera<br/>%2 18.3 metera<br/>%2 27.4 metera<br/>%2 36.6 metera Expand Your Fortifications + Powiększ Swoje Fortyfikacje %3Sandbags%4 are sacks made of sturdy material, filled with sand, used for a variety of purposes such as creating barriers or providing stability in construction projects. Useful in expanding larger placed fortifications.<br/><br/>%3Usage:%4<br/>%2Equip a %3Sandbag (Empty)%4.<br/>%2Use [%3%12%4] and select %3Deploy Sandbag%4.<br/>%2Follow on-screen instructions for placement. + %3Worki z Piaskiem%4 to worki wykonane z mocnego materiału, wypełnione piaskiem, używane do różnych celów, takich jak tworzenie barier lub zapewnianie stabilności w projektach budowlanych. Przydatne przy tworzeniu większych fortyfikacji.<br/><br/>%3Użycie:%4<br/>%2Wyekwipuj %3Worek z Piaskiem (Pusty%4.<br/>%2Use [%3%12%4] i wybierz %3Rozłóż Worek z Piaskiem%4.<br/>%2Podążaj za instrukcjami na ekranie. Lower Firearm Temperature + Niższa Temperatura twojej Broni %3Spare Barrels%4 allow a soldier to reduce their weapon's heat significantly. After a short delay, the weapon's barrel will be swapped and its heat reduced. A soldier may also check the temperature of any barrels within their inventory. Not all weapons support swapping barrels.<br/><br/>%3Usage:%4<br/>%2Use [%3%12%4] and select %3Equipment%4.<br/>%2Select %3Swap Barrel%4.<br/>%2Resume operation after barrel swap is complete. + %3Zapasowa Lufa%4 pozwala żołnierzowi znacznie zmniejszyć ciepło broni. Po krótkim czasie lufa broni zostanie zamieniona, a jej temperatura zostanie zmniejszona. Żołnierz może również sprawdzić temperaturę każdej lufy w swoim ekwipunku. Nie wszystkie bronie obsługują zamianę luf.<br/><br/>%3Użycie:%4<br/>%2Użyj [%3%12%4] i wybierz %3Ekwipunek%4.<br/>%2Wybierz %3Zmień Lufę%4.<br/>%2. Spray Paint + Farba w Sprayu Tag Your Territory + Zaznacz Swój Teren %3Spray Paint%4 is used to tag surfaces with various symbols.<br/><br/>%3Usage:%4<br/>%2Move close to a surface (wall, vehicle, ground, etc).<br/>%2Use [%3%12%4] and select %3Tag%4.<br/>%2Choose a symbol.<br/><br/>%3Available Colors:%4<br/>%2Black<br/>%2Blue<br/>%2Green<br/>%2Red + %3Farba w Sprayu%4 jest używana do oznaczania powierzchni różnymi symbolami.<br/><br/>%3Użycie:%4<br/>%2Podejdź blisko powierzchni (ściany, pojazdu, ziemi, etc). <br/>%2Użyj [%3%12%4] i wybierz %3Malowanie%4.<br/>%2Wybierz Symbol.<br/><br/>%3Dostępne Kolory:%4<br/>%2Czarny<br/>%2Niebieski<br/>%2Zielony<br/>%2Czerwony Brace From Anywhere + Zawsze Stabilny The %3SSWT Kit%4 is a deployable tripod that allows a soldier to brace their aim when deployed. Use it when you need an elevated shooting position and there are no other objects around.<br/><br/>%3Usage:%4<br/>%2Use [%3%12%4] and select %3Equipment%4.<br/>%2Select %3SSWT Kit%4 and follow the on screen prompts to place. + %3Trójnóg Snajperski%4 jest to rozkładany statyw, który pozwala żołnierzowi dokładnie przycelować, gdy jest rozłożony. Używaj go, gdy potrzebujesz stabilnej pozycji strzeleckiej, a wokół nie ma innych obiektów.<br/><br/>%3Użycie:%4<br/>%2Użyj [%3%12%4] i wybierz %3Ekwipunek%4.<br/>%2Wybierz %3Trójnóg Snajperski%4 i podążaj za instrukcjami wyświetlanymi na ekranie. Keep Eyes In The Sky + Trzymaj Głowę w Górze %3UAV Batteries%4 are used to recharge a UAV's energy storage. Especially useful for small UAVs.<br/><br/>%3Usage:%4<br/>%2Equip a %3UAV Battery%4<br/>%2Approach a %3UAV%4 with its %3Engine Off%4.<br/>%2Use [%3%13%4] and select %3Recharge%4. + %3Baterie UAV%4 są używane do zasilania UAV. Zwłaszcza tych małych.<br/><br/>%3Użycie:%4<br/>%2Wyekwipuj %3Baterię UAV%4<br/>%2Podejdź pod %3UAV%4 z %3Wyłączonym Silnikiem%4.<br/>%2Użyj [%3%13%4] i wybierz %3Naładuj%4. Making An Entrance + Robienie Własnego Wejścia %3Wirecutters%4 are a tool that allows a soldier to bypass wired fencing. Useful for creating backdoor entrances into secure areas.<br/><br/>%3Usage:%4<br/>%2Move close to a fence.<br/>%2Use [%3%12%4] and select %3Cut Fence%4. + %3Nożyce do Cięcia Drutu%4 są narzędziem pozwalającym pokonywać zapory z siatki oraz drutu. Użyteczne przy tworzenia tylnego wejścia do pilnownej strefy.<br/><br/>%3Użycie:%4<br/>%2Podejdź pod ogrodzenie.<br/>%2Użyj[%3%12%4] i wybierz %3Przetnij Płot%4. Items @@ -289,27 +368,35 @@ ACE3 + ACE3 Build Fortifications + Budowanie Fortyfikacji The %3Fortify Tool%4 allows soldiers to build fortifications provided by their mission creator.<br/><br/>%3Usage:%4<br/>%2Pick up a %3FortifyTool%4.<br/>%2Use [%3%12%4] and select %3Fortify%4.<br/>%2Select an available fortification and follow the on screen prompts for placement. + %3Narzędzie do fortyfikowania%4 pozwala żołnierzom budować fortyfikacje wybrane przez twórcę misji.<br/><br/>%3Użycie:%4<br/>%2Podnieś %3Narzędzie do fortyfikowania%4.<br/>%2Użyj [%3%12%4] i wybierz %3Fortyfikuj%4.<br/>%2Wybierz dostępną fortyfikację i postępuj zgodnie ze wskazówkami na ekranie. Breaking and Entering + Włamywanie i Otwieranie %3Lockpicks%4 are used to gain access to locked vehicles.<br/><br/>%3Usage:%4<br/>%2Equip a %3Lockpick%4.<br/>%2Approach a %3Locked%4 vehicle.<br/>Use [%3%13%4] and select %3Lockpick Vehicle%4.<br/><br/><t underline='1'>%3Note:%4</t> Lockpicks and keys are only available via scripting or ACE Vehicle Key modules. + %3Wytrychy%4 są używane w celu uzyskania dostępu do zablokowanych pojazdów.<br/><br/>%3Użycie:%4<br/>%2Wyekwipuj %3Wytrych%4.<br/>%2Podejdź do %3Zablokowanego%4 pojazdu. <br/>Użyj [%3%13%4] i wybierz %3Otwórz Zamek%4.<br/><br/><t underline='1'>%3Uwaga:%4</t> Klucze i wytrychy są dostępne tylko przy zastosowaniu skryptów lub użyciu modułu ACE Zamknięcie Pojazdu Vehicle Keys + Kluczyki od Pojazdu Lock/Unlock Vehicles + Zablokuj/Odblokuj Pojazdy %3Vehicle Keys%4 are used to lock/unlock your vehicles. Vehicle keys can exist for the whole side, or keys can be created for a particular vehicle itself.<br/><br/>%3Usage:%4<br/>%2Equip a %3Vehicle Key%4.<br/>%2Approach the vehicle that the key belongs to.<br/>Use [%3%13%4] and select %3Lock/Unlock Vehicle%4.<br/><br/><t underline='1'>%3Note:%4</t> Lockpicks and keys are only available via scripting or ACE Vehicle Key modules. + %3Kluczyki od Pojazdów%4 są używane w celu ich zablokowania/odblokowania. Kluczyki mogą istnieć dla całej strony, lub być tworzone tylko dla wybranych pojazdów<br/><br/>%3Użycie:%4<br/>%2Wyekwipuj %3Kluczyk do Pojazdu%4.<br/>%2Podejdź do samochodu, do którego pasuje kluczyk. <br/>Użyj [%3%13%4] i wybierz %3Zablokuj/Odblokuj Pojazd%4.<br/><br/><t underline='1'>%3Uwaga:%4</t> Klucze i wytrychy są dostępne tylko przy zastosowaniu skryptów lub użyciu modułu ACE Zamknięcie Pojazdu diff --git a/addons/medical_ai/stringtable.xml b/addons/medical_ai/stringtable.xml index 0ae751dec78..480c2426995 100644 --- a/addons/medical_ai/stringtable.xml +++ b/addons/medical_ai/stringtable.xml @@ -62,6 +62,7 @@ Auto Convert Items for AI + Automatyczna Konwersja Przedmiotów dla AI diff --git a/addons/medical_gui/stringtable.xml b/addons/medical_gui/stringtable.xml index 52c73071461..ef08d7b26b5 100644 --- a/addons/medical_gui/stringtable.xml +++ b/addons/medical_gui/stringtable.xml @@ -284,12 +284,15 @@ Peek Medical Info + Podgląd Informacji Medycznych Medical Peek Duration + Czas Trwania Podglądu Medycznego How long the medical info peek remains open after releasing the key. + Jak długo podgląd informacji medycznych pozostaje otwarty po zwolnieniu przycisku. Load Patient @@ -536,9 +539,11 @@ Switch to self + Zmień na siebie Switch to target + Zmień na pacjenta Head @@ -958,18 +963,23 @@ No bleeding + Brak krwawienia Slow bleeding + Słabe krwawienie Moderate bleeding + Umiarkowane krwawienie Severe bleeding + Poważne krwawienie Massive bleeding + Bardzo silne krwawienie in Pain @@ -1037,6 +1047,7 @@ No blood loss + Brak utraty krwi @@ -1269,15 +1280,19 @@ Peek Medical Info on Hit + Podgląd Informacji Medycznych po Zranieniu Temporarily show medical info when injured. + Tymczasowe wyświetlanie informacji medycznych po zranieniu. Medical Peek Duration on Hit + Czas trwania podglądu informacji medycznych po zranieniu How long the medical info peek remains open after being injured. + Jak długo podgląd informacji medycznych pozostaje otwarty po otrzymaniu obrażeń. Show Trauma Sustained @@ -1297,9 +1312,11 @@ Body Part Outline Color + Kolor Konturu Części Ciała Color of outline around selected body part. + Kolor konturu wokół wybranej części ciała. Minor Trauma @@ -1335,18 +1352,23 @@ L + L R + P in your inventory + w twoim ekwipunku in patient's inventory + w ekwipunku pacjenta in vehicle's inventory + w ekwipunku pojazdu No effect until tourniquet removed diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml index 0c0a20e2f8c..2cbecc3da83 100644 --- a/addons/medical_treatment/stringtable.xml +++ b/addons/medical_treatment/stringtable.xml @@ -415,10 +415,12 @@ Grave Digging Time 무덤 파는 시간 + Czas Kopania Grobu Time, in seconds, required to dig a grave for a body. 시신의 무덤을 파는 데 필요한 시간(초 단위). + Czas, w sekundach wymagany do wykopania grobu. Allow Epinephrine @@ -860,11 +862,13 @@ Create Grave Markers Erstelle Grabmal Crear Tumba + Utwórz Nagrobek Enables the creation of grave markers when digging graves. Erstellt Grabmale beim Graben von Gräbern. Habilita la creación de Tumbas al cavar tumbas. + Umożliwia tworzenie nagrobków podczas kopania grobów. Allow IV Transfusion @@ -3419,6 +3423,7 @@ No pain + Nie odczuwa bólu In mild pain @@ -3501,6 +3506,7 @@ No IV + Brak podpiętego IV Blood Pressure @@ -4501,10 +4507,12 @@ Dig grave for body 시체를 위해 무덤 파기 + Wykop grób na ciało Digging grave for body... 시체를 위한 무덤 파는 중... + Kopanie grobu... %1 has bandaged patient diff --git a/addons/reloadlaunchers/stringtable.xml b/addons/reloadlaunchers/stringtable.xml index 4c6430f3230..4f34e00d0df 100644 --- a/addons/reloadlaunchers/stringtable.xml +++ b/addons/reloadlaunchers/stringtable.xml @@ -109,6 +109,7 @@ Buddy Loading + Ładowanie przez Asystenta diff --git a/addons/zeus/stringtable.xml b/addons/zeus/stringtable.xml index b32b09692bb..09e68e659c7 100644 --- a/addons/zeus/stringtable.xml +++ b/addons/zeus/stringtable.xml @@ -1935,9 +1935,11 @@ Lay Trenchline + Wykop Okop +SHIFT to force (Can only lay N/S or E/W) + +SHIFT aby wymusić (Można wykopać tylko N/S lub E/W) From 124baca84b7ea74f81c765fb01605a0d564a3696 Mon Sep 17 00:00:00 2001 From: Psycool <104776717+Psycool3695@users.noreply.github.com> Date: Mon, 16 Oct 2023 15:48:08 +0900 Subject: [PATCH 028/287] Korean translation improved (#9500) * KoreanTranslation Someone has returned all the translations in Korean to English. there is no need to return them. * koreantranslation * Korean Typo Fix * Korean Translation * Update stringtable.xml * Korean Translation Added Added Korean translation related to Cargo Refuel * Merge branch 'master' of https://github.com/Psycool3695/ACE3 * Korean translation Add/Updated * Fixed wrong strings * Korean translation improved --- addons/chemlights/stringtable.xml | 2 +- addons/dragging/stringtable.xml | 4 ++-- addons/explosives/stringtable.xml | 16 ++++++++-------- addons/medical_treatment/stringtable.xml | 8 ++++---- addons/mx2a/stringtable.xml | 2 +- addons/realisticnames/stringtable.xml | 2 +- 6 files changed, 17 insertions(+), 17 deletions(-) diff --git a/addons/chemlights/stringtable.xml b/addons/chemlights/stringtable.xml index ce31e952abe..3454acd9d83 100644 --- a/addons/chemlights/stringtable.xml +++ b/addons/chemlights/stringtable.xml @@ -70,7 +70,7 @@ ケミライト (オレンジ) Świetlik (pomarańczowy) Knicklicht (orange) - 켐라이트 (주황) + 화학조명 (주황) Cyalume (orange) Luce chimica (Arancione) 螢光棒 (橘色) diff --git a/addons/dragging/stringtable.xml b/addons/dragging/stringtable.xml index ba76b7f87a7..11d2ae62ece 100644 --- a/addons/dragging/stringtable.xml +++ b/addons/dragging/stringtable.xml @@ -133,7 +133,7 @@ Pozwól na strzelanie podczas przeciągania 搬送中に射撃許可 允许在拖动时开火 - 사격 중 끌기 가능하게 하기 + 끌기 중 사격 가능하게 하기 Allow the player to fire their gun while dragging. @@ -145,7 +145,7 @@ Pozwala graczom strzelać z broni podczas przeciągania obiektów. プレイヤーが引きずっている最中でも射撃できるようにします。 允许玩家在拖动时开火。 - 플레이어가 무기를 끄는 동안에 무기를 사용할 수 있게합니다. + 플레이어가 뭔가를 끌고 있는 동안에 무기를 사용할 수 있게 합니다. Allow Running with Lightweight Objects diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml index c38c226d178..a886a153d81 100644 --- a/addons/explosives/stringtable.xml +++ b/addons/explosives/stringtable.xml @@ -249,7 +249,7 @@ M57 Dispositivo de Detonação Взрыватель M57 M57 起爆装置 - M57 격발기 + 격발기 (M57) M57 引爆装置 M57 引爆裝置 M57 Ateşleme Cihazı @@ -283,7 +283,7 @@ M152 Dispositivo de Detonação Взрыватель M152 M152 起爆装置 - M152 격발기 + 격발기 (M152) M152 引爆装置 M152 引爆裝置 M152 Ateşleme Cihazı @@ -504,7 +504,7 @@ Desarmando Explosivo... Обезвреживание... 爆発物を無力化しています・・・ - 폭발물 해체중... + 폭발물 해체 중... 正在拆除爆炸物... 炸彈拆除中... Patlayıcı Imha Ediliyor... @@ -933,7 +933,7 @@ IED Grande (Urbano, Placa de pressão) Большое СВУ (городское, нажимного действия) 大きな IED (市街地用、圧力感知) - 대형 급조폭발물 (시가지, 압력식) + 급조폭발물 (대형, 시가지, 압력식) 大型 IED(地表上,压力盘) 大型簡易爆炸裝置 (地表上, 壓力盤) @@ -948,7 +948,7 @@ IED Grande (Enterrado, Placa de pressão) Большое СВУ (закопанное, нажимного действия) 大きな IED (埋め込み型、圧力感知) - 대형 급조폭발물 (묻힘, 압력식) + 급조폭발물 (대형, 묻힘, 압력식) 大型 IED(地表下,压力盘) 大型簡易爆炸裝置 (地表下, 壓力盤) @@ -963,7 +963,7 @@ IED Pequeno(Urbano, Placa de pressão) Малое СВУ (городское, нажимного действия) 小さな IED (市街地用、圧力感知) - 소형 급조폭발물 (시가지, 압력식) + 급조폭발물 (소형, 시가지, 압력식) 小型 IED(地表上,压力盘) 小型簡易爆炸裝置 (地表上, 壓力盤) @@ -978,7 +978,7 @@ IED Pequeno (Enterrado, Placa de pressão) Малое СВУ (закопанное, нажимного действия) 小さな IED (埋め込み型、圧力感知) - 소형 급조폭발물 (묻힘, 압력식) + 급조폭발물 (소형, 묻힘, 압력식) 小型 IED(地表下,压力盘) 小型簡易爆炸裝置 (地表下, 壓力盤) @@ -994,7 +994,7 @@ Collega a %1 Conectar à %1 %1 へ接続 - %1에 연결중 + %1에 연결 중 连接到%1 連接到%1 Bağlandı %1 diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml index 2cbecc3da83..1dbb876418a 100644 --- a/addons/medical_treatment/stringtable.xml +++ b/addons/medical_treatment/stringtable.xml @@ -1752,7 +1752,7 @@ Autoiniettore di morfina Auto-injetor de morfina モルヒネ注射器 - 모르핀 자동주사기 + 자동주사기 (모르핀) 吗啡自动注射器 嗎啡自動注射器 Morfin otomatik enjektör @@ -1800,7 +1800,7 @@ Auto-injetor de Adenosina Аденозин в пневмошприце アデノシン注射器 - 아데노신 자동주사기 + 자동주사기 (아데노신) 腺苷自动注射器 腺苷自動注射器 Adenosin otomatik enjektörü @@ -1847,7 +1847,7 @@ Autoiniettore di atropina Auto-injetor de Atropina アトロピン注射器 - 아트로핀 자동주사기 + 자동주사기 (아트로핀) 阿托品自动注射器 阿托品自動注射器 Atropin otomatik enjektör @@ -1896,7 +1896,7 @@ Autoiniettore di adrenalina Auto-injetor de epinefrina アドレナリン注射器 - 에피네프린 자동주사기 + 자동주사기 (에피네프린) 肾上腺素自动注射器 腎上腺素自動注射器 Epinefrin otomatik enjektör diff --git a/addons/mx2a/stringtable.xml b/addons/mx2a/stringtable.xml index 390a264f3aa..a16caf4075f 100644 --- a/addons/mx2a/stringtable.xml +++ b/addons/mx2a/stringtable.xml @@ -30,7 +30,7 @@ Тепловизионный прибор Dispositivo di visione termica サーマル画像表示双眼鏡 - 열영상 장치 + 열화상 장치 热成像装置 熱成像裝置 Termal Görüntüleme Aracı diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index efce83a6580..d624fae683e 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -4327,7 +4327,7 @@ Burris XTR II (ASP-1 Kir) Burris XTR II (ASP-1 Kir) Burris XTR II(ASP-1 Kir) - 버리스 XTR II (ASP-1 키르) + 버리스 XTR II (ASP-1 키르용) Burris XTR II (ASP-1 Kir) Burris XTR II (ASP-1 Kir) From 9873bf566ca06f5f88538a216ac0d8fb61f22245 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 16 Oct 2023 01:49:23 -0500 Subject: [PATCH 029/287] Field Manual - Remove all use of `+=`, cleanup magwell capitlization (#9494) * Field Manual - Cleanup toml * Fix magwell capitilization * asc - skip fnc_zeusAttributes as it's hardcoded to be blocked * Eliminate all use of += in fieldmanual * Update sqfc.json --- .hemtt/project.toml | 1 + addons/compat_rhs_usf3/CfgMagazineWells.hpp | 2 +- addons/fieldmanual/CfgHints.hpp | 83 +++++++++++---------- addons/fieldmanual/addon.toml | 2 - addons/grenades/CfgMagazineWells.hpp | 4 +- optionals/tracers/CfgMagazineWells.hpp | 8 +- sqfc.json | 3 +- 7 files changed, 52 insertions(+), 51 deletions(-) delete mode 100644 addons/fieldmanual/addon.toml diff --git a/.hemtt/project.toml b/.hemtt/project.toml index 793ff11c231..bdb2beb67be 100644 --- a/.hemtt/project.toml +++ b/.hemtt/project.toml @@ -27,6 +27,7 @@ exclude = [ "/dev/", "medical_ai/statemachine.sqf", "common/functions/fnc_dummy.sqf", + "zeus/functions/fnc_zeusAttributes.sqf", ] [hemtt.config] diff --git a/addons/compat_rhs_usf3/CfgMagazineWells.hpp b/addons/compat_rhs_usf3/CfgMagazineWells.hpp index a5d8f8c58dd..01223ec141b 100644 --- a/addons/compat_rhs_usf3/CfgMagazineWells.hpp +++ b/addons/compat_rhs_usf3/CfgMagazineWells.hpp @@ -6,6 +6,6 @@ class CfgMagazineWells { ADDON[] = {QGVAR(pylon_mag_2rnd_hellfire_n)}; }; class ace_hellfire_L { - ADDON[] = {QGVAR(pylon_mag_2rnd_hellfire_L)}; + ADDON[] = {QGVAR(pylon_mag_2rnd_hellfire_l)}; }; }; diff --git a/addons/fieldmanual/CfgHints.hpp b/addons/fieldmanual/CfgHints.hpp index 64b8022bfc3..26d7a148056 100644 --- a/addons/fieldmanual/CfgHints.hpp +++ b/addons/fieldmanual/CfgHints.hpp @@ -6,16 +6,20 @@ - Size = '9' */ +// INDENT - %11 +// SELF INTERACT KEYBIND - %12 +// INTERACT KEYBIND - %13 +#define BASE_ARGUMENTS "' '", \ +QUOTE([ARR_2('ACE3 Common', QQEGVAR(interact_menu,selfInteractKey))] call FUNC(getKeybindName)), \ +QUOTE([ARR_2('ACE3 Common', QQEGVAR(interact_menu,interactKey))] call FUNC(getKeybindName)) + +// MEDCIAL MENU KEYBIND - %14 +#define MEDICAL_MENU_KEYBIND QUOTE([ARR_2('ACE3 Common', QQEGVAR(medical_gui,openMedicalMenuKey))] call FUNC(getKeybindName)) + + class CfgHints { class ACE_FieldManual_Base { - arguments[] = { - // INDENT - %11 - "' '", - // SELF INTERACT KEYBIND - %12 - QUOTE([ARR_2('ACE3 Common', QQEGVAR(interact_menu,selfInteractKey))] call FUNC(getKeybindName)), - // INTERACT KEYBIND - %13 - QUOTE([ARR_2('ACE3 Common', QQEGVAR(interact_menu,interactKey))] call FUNC(getKeybindName)) - }; + arguments[] = {BASE_ARGUMENTS}; image = "\z\ace\addons\common\data\logo_ace3_ca.paa"; tip = "ACE Wiki"; }; @@ -25,7 +29,7 @@ class CfgHints { class ACE_ATragMX: ACE_FieldManual_Base { logicalOrder = 1; - arguments[] += {QUOTE('ACE_ATragMX' call FUNC(getItemName))}; + arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_ATragMX' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_ATragMX_ShortName); description = CSTRING(Items_ATragMX_Description); @@ -33,14 +37,14 @@ class CfgHints { }; class ACE_BodyBag: ACE_FieldManual_Base { logicalOrder = 2; - arguments[] += {QUOTE('ACE_BodyBag' call FUNC(getItemName))}; + arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_BodyBag' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_BodyBag_ShortName); description = CSTRING(Items_BodyBag_Description); }; class ACE_CableTie: ACE_FieldManual_Base { logicalOrder = 3; - arguments[] += {QUOTE('ACE_CableTie' call FUNC(getItemName))}; + arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_CableTie' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_CableTie_ShortName); description = CSTRING(Items_CableTie_Description); @@ -48,7 +52,7 @@ class CfgHints { }; class ACE_Cellphone: ACE_FieldManual_Base { logicalOrder = 4; - arguments[] += {QUOTE('ACE_Cellphone' call FUNC(getItemName))}; + arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_Cellphone' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_Cellphone_ShortName); description = CSTRING(Items_Cellphone_Description); @@ -56,7 +60,7 @@ class CfgHints { }; class ACE_Chemlight_Shield: ACE_FieldManual_Base { logicalOrder = 5; - arguments[] += {QUOTE('ACE_Chemlight_Shield' call FUNC(getItemName))}; + arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_Chemlight_Shield' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_Chemlight_Shield_ShortName); description = CSTRING(Items_Chemlight_Shield_Description); @@ -64,7 +68,7 @@ class CfgHints { }; class ACE_Clackers: ACE_FieldManual_Base { logicalOrder = 6; - arguments[] += {QUOTE('ACE_Clacker' call FUNC(getItemName))}; + arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_Clacker' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_Clackers_ShortName); description = CSTRING(Items_Clackers_Description); @@ -72,7 +76,7 @@ class CfgHints { }; class ACE_DAGR: ACE_FieldManual_Base { logicalOrder = 7; - arguments[] += {QUOTE('ACE_DAGR' call FUNC(getItemName))}; + arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_DAGR' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_DAGR_ShortName); description = CSTRING(Items_DAGR_Description); @@ -80,7 +84,7 @@ class CfgHints { }; class ACE_DeadManSwitch: ACE_FieldManual_Base { logicalOrder = 8; - arguments[] += {QUOTE('ACE_DeadManSwitch' call FUNC(getItemName))}; + arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_DeadManSwitch' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_DeadManSwitch_ShortName); description = CSTRING(Items_DeadManSwitch_Description); @@ -88,7 +92,7 @@ class CfgHints { }; class ACE_DefusalKit: ACE_FieldManual_Base { logicalOrder = 9; - arguments[] += {QUOTE('ACE_DefusalKit' call FUNC(getItemName))}; + arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_DefusalKit' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_DefusalKit_ShortName); description = CSTRING(Items_DefusalKit_Description); @@ -96,7 +100,7 @@ class CfgHints { }; class ACE_EarPlugs: ACE_FieldManual_Base { logicalOrder = 10; - arguments[] += {QUOTE('ACE_EarPlugs' call FUNC(getItemName))}; + arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_EarPlugs' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_EarPlugs_ShortName); description = CSTRING(Items_EarPlugs_Description); @@ -104,7 +108,7 @@ class CfgHints { }; class ACE_EntrenchingTool: ACE_FieldManual_Base { logicalOrder = 11; - arguments[] += {QUOTE('ACE_EntrenchingTool' call FUNC(getItemName))}; + arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_EntrenchingTool' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_EntrenchingTool_ShortName); description = CSTRING(Items_EntrenchingTool_Description); @@ -118,7 +122,7 @@ class CfgHints { }; class ACE_FortifyTool: ACE_FieldManual_Base { logicalOrder = 13; - arguments[] += {QUOTE('ACE_HuntIR_Monitor' call FUNC(getItemName))}; + arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_HuntIR_Monitor' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_FortifyTool_ShortName); description = CSTRING(Items_FortifyTool_Description); @@ -126,7 +130,7 @@ class CfgHints { }; class ACE_HuntIR_Monitor: ACE_FieldManual_Base { logicalOrder = 14; - arguments[] += {QUOTE('ACE_CableTie' call FUNC(getItemName))}; + arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_CableTie' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_HuntIR_Monitor_ShortName); description = CSTRING(Items_HuntIR_Monitor_Description); @@ -134,14 +138,14 @@ class CfgHints { }; class ACE_IR_Strobe: ACE_FieldManual_Base { logicalOrder = 15; - arguments[] += {QUOTE('ACE_IR_Strobe_Item' call FUNC(getItemName))}; + arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_IR_Strobe_Item' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_IR_Strobe_ShortName); description = CSTRING(Items_IR_Strobe_Description); }; class ACE_Kestrel4500: ACE_FieldManual_Base { logicalOrder = 16; - arguments[] += {QUOTE('ACE_Kestrel4500' call FUNC(getItemName))}; + arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_Kestrel4500' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_Kestrel4500_ShortName); description = CSTRING(Items_Kestrel4500_Description); @@ -149,7 +153,7 @@ class CfgHints { }; class ACE_Lockpick: ACE_FieldManual_Base { logicalOrder = 17; - arguments[] += {QUOTE('ACE_key_lockpick' call FUNC(getItemName))}; + arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_key_lockpick' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_Lockpick_ShortName); description = CSTRING(Items_Lockpick_Description); @@ -157,14 +161,14 @@ class CfgHints { }; class ACE_MapTools: ACE_FieldManual_Base { logicalOrder = 18; - arguments[] += {QUOTE('ACE_MapTools' call FUNC(getItemName))}; + arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_MapTools' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_MapTools_ShortName); description = CSTRING(Items_MapTools_Description); }; class ACE_MicroDAGR: ACE_FieldManual_Base { logicalOrder = 19; - arguments[] += {QUOTE('ACE_microDAGR' call FUNC(getItemName))}; + arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_microDAGR' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_MicroDAGR_ShortName); description = CSTRING(Items_MicroDAGR_Description); @@ -186,7 +190,7 @@ class CfgHints { }; class ACE_Sandbag: ACE_FieldManual_Base { logicalOrder = 22; - arguments[] += {QUOTE('ACE_Sandbag_empty' call FUNC(getItemName))}; + arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_Sandbag_empty' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_Sandbag_ShortName); description = CSTRING(Items_Sandbag_Description); @@ -194,7 +198,7 @@ class CfgHints { }; class ACE_SpareBarrels: ACE_FieldManual_Base { logicalOrder = 23; - arguments[] += {QUOTE('ACE_SpareBarrel_Item' call FUNC(getItemName))}; + arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_SpareBarrel_Item' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_SpareBarrels_ShortName); description = CSTRING(Items_SpareBarrels_Description); @@ -209,7 +213,7 @@ class CfgHints { }; class ACE_Tripod: ACE_FieldManual_Base { logicalOrder = 25; - arguments[] += {QUOTE('ACE_Tripod' call FUNC(getItemName))}; + arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_Tripod' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_Tripod_ShortName); description = CSTRING(Items_Tripod_Description); @@ -217,7 +221,7 @@ class CfgHints { }; class ACE_UAVBattery: ACE_FieldManual_Base { logicalOrder = 26; - arguments[] += {QUOTE('ACE_UAVBattery' call FUNC(getItemName))}; + arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_UAVBattery' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_UAVBattery_ShortName); description = CSTRING(Items_UAVBattery_Description); @@ -232,7 +236,7 @@ class CfgHints { }; class ACE_Wirecutter: ACE_FieldManual_Base { logicalOrder = 28; - arguments[] += {QUOTE('ACE_wirecutter' call FUNC(getItemName))}; + arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_wirecutter' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_Wirecutter_ShortName); description = CSTRING(Items_Wirecutter_Description); @@ -265,10 +269,7 @@ class CfgHints { category = "ACE_FieldManual"; class ACE_Medical_Treatment_Base: ACE_FieldManual_Base { - arguments[] += { - // MEDICAL MENU KEYBIND - %14 - QUOTE([ARR_2('ACE3 Common', QQEGVAR(medical_gui,openMedicalMenuKey))] call FUNC(getKeybindName)) - }; + arguments[] = {BASE_ARGUMENTS, MEDICAL_MENU_KEYBIND}; tip = "Medical Wiki"; }; @@ -280,7 +281,7 @@ class CfgHints { }; class ACE_Adenosine: ACE_Medical_Treatment_Base { logicalOrder = 2; - arguments[] += {QUOTE('ACE_adenosine' call FUNC(getItemName))}; + arguments[] = {BASE_ARGUMENTS, MEDICAL_MENU_KEYBIND, QUOTE('ACE_adenosine' call FUNC(getItemName))}; displayName = "%15"; displayNameShort = CSTRING(Medical_Treatment_Adenosine_ShortName); description = CSTRING(Medical_Treatment_Adenosine_Description); @@ -299,35 +300,35 @@ class CfgHints { }; class ACE_Epinephrine: ACE_Medical_Treatment_Base { logicalOrder = 5; - arguments[] += {QUOTE('ACE_epinephrine' call FUNC(getItemName))}; + arguments[] = {BASE_ARGUMENTS, MEDICAL_MENU_KEYBIND, QUOTE('ACE_epinephrine' call FUNC(getItemName))}; displayName = "%15"; displayNameShort = CSTRING(Medical_Treatment_Epinephrine_ShortName); description = CSTRING(Medical_Treatment_Epinephrine_Description); }; class ACE_PAK: ACE_Medical_Treatment_Base { logicalOrder = 6; - arguments[] += {QUOTE('ACE_personalAidKit' call FUNC(getItemName))}; + arguments[] = {BASE_ARGUMENTS, MEDICAL_MENU_KEYBIND, QUOTE('ACE_personalAidKit' call FUNC(getItemName))}; displayName = "%15"; displayNameShort = CSTRING(Medical_Treatment_PAK_ShortName); description = CSTRING(Medical_Treatment_PAK_Description); }; class ACE_Splint: ACE_Medical_Treatment_Base { logicalOrder = 7; - arguments[] += {QUOTE('ACE_splint' call FUNC(getItemName))}; + arguments[] = {BASE_ARGUMENTS, MEDICAL_MENU_KEYBIND, QUOTE('ACE_splint' call FUNC(getItemName))}; displayName = "%15"; displayNameShort = CSTRING(Medical_Treatment_Splint_ShortName); description = CSTRING(Medical_Treatment_Splint_Description); }; class ACE_SurgicalKit: ACE_Medical_Treatment_Base { logicalOrder = 8; - arguments[] += {QUOTE('ACE_surgicalKit' call FUNC(getItemName))}; + arguments[] = {BASE_ARGUMENTS, MEDICAL_MENU_KEYBIND, QUOTE('ACE_surgicalKit' call FUNC(getItemName))}; displayName = "%15"; displayNameShort = CSTRING(Medical_Treatment_SurgicalKit_ShortName); description = CSTRING(Medical_Treatment_SurgicalKit_Description); }; class ACE_Tourniquet: ACE_Medical_Treatment_Base { logicalOrder = 9; - arguments[] += {QUOTE('ACE_tourniquet' call FUNC(getItemName))}; + arguments[] = {BASE_ARGUMENTS, MEDICAL_MENU_KEYBIND, QUOTE('ACE_tourniquet' call FUNC(getItemName))}; displayName = "%15"; displayNameShort = CSTRING(Medical_Treatment_CAT_ShortName); description = CSTRING(Medical_Treatment_CAT_Description); diff --git a/addons/fieldmanual/addon.toml b/addons/fieldmanual/addon.toml deleted file mode 100644 index 7cfef775ee7..00000000000 --- a/addons/fieldmanual/addon.toml +++ /dev/null @@ -1,2 +0,0 @@ -[preprocess] -enabled = false diff --git a/addons/grenades/CfgMagazineWells.hpp b/addons/grenades/CfgMagazineWells.hpp index 7ac4a555dde..6f75fa31f70 100644 --- a/addons/grenades/CfgMagazineWells.hpp +++ b/addons/grenades/CfgMagazineWells.hpp @@ -1,8 +1,8 @@ class CfgMagazineWells { class CBA_40mm_M203 { - ADDON[] = {"ACE_40mm_flare_white", "ACE_40mm_flare_red", "ACE_40mm_flare_green", "ACE_40mm_flare_ir"}; + ADDON[] = {"ACE_40mm_Flare_white", "ACE_40mm_Flare_red", "ACE_40mm_Flare_green", "ACE_40mm_Flare_ir"}; }; class UGL_40x36 { - ADDON[] = {"ACE_40mm_flare_white", "ACE_40mm_flare_red", "ACE_40mm_flare_green", "ACE_40mm_flare_ir"}; + ADDON[] = {"ACE_40mm_Flare_white", "ACE_40mm_Flare_red", "ACE_40mm_Flare_green", "ACE_40mm_Flare_ir"}; }; }; diff --git a/optionals/tracers/CfgMagazineWells.hpp b/optionals/tracers/CfgMagazineWells.hpp index 4d0b0d5788e..0552ea21a0b 100644 --- a/optionals/tracers/CfgMagazineWells.hpp +++ b/optionals/tracers/CfgMagazineWells.hpp @@ -123,14 +123,14 @@ class CfgMagazineWells { }; class CBA_762x51_M14 { ADDON[] = { - "ACE_20Rnd_762x51_Mag_Tracer_green", - "ACE_20Rnd_762x51_Mag_Tracer_yellow" + "ACE_20Rnd_762x51_Mag_tracer_green", + "ACE_20Rnd_762x51_Mag_tracer_yellow" }; }; class CBA_762x51_G3 { ADDON[] = { - "ACE_20Rnd_762x51_Mag_Tracer_green", - "ACE_20Rnd_762x51_Mag_Tracer_yellow" + "ACE_20Rnd_762x51_Mag_tracer_green", + "ACE_20Rnd_762x51_Mag_tracer_yellow" }; }; class CBA_762x54R_LINKS { diff --git a/sqfc.json b/sqfc.json index a3c2f68f4eb..53209261b89 100644 --- a/sqfc.json +++ b/sqfc.json @@ -11,7 +11,8 @@ "xeh_prep.sqf", "\\dev\\", "medical_ai\\statemachine.sqf", - "common\\functions\\fnc_dummy.sqf" + "common\\functions\\fnc_dummy.sqf", + "zeus\\functions\\fnc_zeusAttributes.sqf" ], "outputDir": "P:/", "workerThreads": 12 From 60f0249161c738a7b5366b8b85305d199f053ac0 Mon Sep 17 00:00:00 2001 From: Bob-Murphy <50651578+Bob-Murphy@users.noreply.github.com> Date: Tue, 17 Oct 2023 11:55:52 +0200 Subject: [PATCH 030/287] SPE Compat - Add Spearhead 1944 fuel drums to refuel system (#9505) * Create land.hpp * Update CfgVehicles.hpp --- addons/compat_spe/CfgVehicles.hpp | 1 + addons/compat_spe/CfgVehicles/land.hpp | 13 +++++++++++++ 2 files changed, 14 insertions(+) create mode 100644 addons/compat_spe/CfgVehicles/land.hpp diff --git a/addons/compat_spe/CfgVehicles.hpp b/addons/compat_spe/CfgVehicles.hpp index 9ed470ec581..62da3705492 100644 --- a/addons/compat_spe/CfgVehicles.hpp +++ b/addons/compat_spe/CfgVehicles.hpp @@ -4,4 +4,5 @@ class CfgVehicles { #include "CfgVehicles\spe_boxes.hpp" #include "CfgVehicles\tracked.hpp" #include "CfgVehicles\wheeled.hpp" + #include "CfgVehicles\land.hpp" }; diff --git a/addons/compat_spe/CfgVehicles/land.hpp b/addons/compat_spe/CfgVehicles/land.hpp new file mode 100644 index 00000000000..68ec9d4d89a --- /dev/null +++ b/addons/compat_spe/CfgVehicles/land.hpp @@ -0,0 +1,13 @@ +// fuel objects + +class SPE_items_base; +class Land_SPE_Fuel_Barrel_German: SPE_items_base { + transportFuel = 0; + EGVAR(refuel,hooks)[] = {{0, 0, 0.5}}; // reference is Land_FlexibleTank_01_F + EGVAR(refuel,fuelCargo) = 300; // reference is Land_FlexibleTank_01_F +}; +class Land_SPE_Fuel_Barrel_US: SPE_items_base { + transportFuel = 0; + EGVAR(refuel,hooks)[] = {{0, 0, 0.5}}; // reference is Land_FlexibleTank_01_F + EGVAR(refuel,fuelCargo) = 300; // reference is Land_FlexibleTank_01_F +}; From 5686647b57cc8ccdf34bebe07e5b16f04d903a73 Mon Sep 17 00:00:00 2001 From: BrettMayson Date: Tue, 17 Oct 2023 03:58:43 -0600 Subject: [PATCH 031/287] Docs - use draft PR over WIP (#9504) docs: use draft pr over wip --- .github/CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index af6ab708546..a2e6e53c4d0 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -36,7 +36,7 @@ We welcome anyone to contribute to this repository. Issues that we are actively When contributing to this repository, please first discuss the change you wish to make via issue or [Discord](https://acemod.org/discord) with the [ACE3 project maintainers](https://ace3.acemod.org/team.html) before making a change. This may not be necessary if you are contributing for something which has an existing issue in our repository already. -1. Please make a pull request (PR) as early as possible. This lets use help you in the proces of developing it. When opening a work in progress pull request, mark your PR with a `WIP:` prefix. +1. Please make a pull request (PR) as early as possible. This lets use help you in the proces of developing it. When opening a work in progress pull request, use GitHub's draft feature. This will mark the PR as a work in progress and will prevent it from being merged until you mark it as ready for review. 2. Describe what this pull request will do and how it solves this in the description of your PR. A clear intent and description of the way the issue is resolved will help us to review the PR more efficiently. 3. Please follow our [Development Guidelines](https://ace3.acemod.org/wiki/development/). From ed1ef14749f90b7c9105951751594521091c6219 Mon Sep 17 00:00:00 2001 From: Bob-Murphy <50651578+Bob-Murphy@users.noreply.github.com> Date: Tue, 17 Oct 2023 16:37:18 +0200 Subject: [PATCH 032/287] SPE Compat - Fix Spearhead 1944 fuel drums for refuel system (#9507) --- addons/compat_spe/CfgVehicles.hpp | 1 - addons/compat_spe/CfgVehicles/land.hpp | 13 ------------- addons/compat_spe/CfgVehicles/spe_boxes.hpp | 12 ++++++++++++ 3 files changed, 12 insertions(+), 14 deletions(-) delete mode 100644 addons/compat_spe/CfgVehicles/land.hpp diff --git a/addons/compat_spe/CfgVehicles.hpp b/addons/compat_spe/CfgVehicles.hpp index 62da3705492..9ed470ec581 100644 --- a/addons/compat_spe/CfgVehicles.hpp +++ b/addons/compat_spe/CfgVehicles.hpp @@ -4,5 +4,4 @@ class CfgVehicles { #include "CfgVehicles\spe_boxes.hpp" #include "CfgVehicles\tracked.hpp" #include "CfgVehicles\wheeled.hpp" - #include "CfgVehicles\land.hpp" }; diff --git a/addons/compat_spe/CfgVehicles/land.hpp b/addons/compat_spe/CfgVehicles/land.hpp deleted file mode 100644 index 68ec9d4d89a..00000000000 --- a/addons/compat_spe/CfgVehicles/land.hpp +++ /dev/null @@ -1,13 +0,0 @@ -// fuel objects - -class SPE_items_base; -class Land_SPE_Fuel_Barrel_German: SPE_items_base { - transportFuel = 0; - EGVAR(refuel,hooks)[] = {{0, 0, 0.5}}; // reference is Land_FlexibleTank_01_F - EGVAR(refuel,fuelCargo) = 300; // reference is Land_FlexibleTank_01_F -}; -class Land_SPE_Fuel_Barrel_US: SPE_items_base { - transportFuel = 0; - EGVAR(refuel,hooks)[] = {{0, 0, 0.5}}; // reference is Land_FlexibleTank_01_F - EGVAR(refuel,fuelCargo) = 300; // reference is Land_FlexibleTank_01_F -}; diff --git a/addons/compat_spe/CfgVehicles/spe_boxes.hpp b/addons/compat_spe/CfgVehicles/spe_boxes.hpp index 2d6afc9b4a1..ebf70f55189 100644 --- a/addons/compat_spe/CfgVehicles/spe_boxes.hpp +++ b/addons/compat_spe/CfgVehicles/spe_boxes.hpp @@ -31,5 +31,17 @@ class SPE_Fuel_Barrel_US_01: SPE_Fuel_Barrel_base { EGVAR(refuel,hooks)[] = {{0.2,0,0.22}}; }; class SPE_Fuel_Barrel_German_01: SPE_Fuel_Barrel_base { + EGVAR(cargo,size) = 2; //reference SPE_Fuel_Barrel_US_01 + EGVAR(cargo,canLoad) = 1; //reference SPE_Fuel_Barrel_US_01 + + EGVAR(dragging,canCarry) = 1; //reference SPE_Fuel_Barrel_US_01 + EGVAR(dragging,carryPosition)[] = {0,1,1}; //reference SPE_Fuel_Barrel_US_01 + EGVAR(dragging,carryDirection) = 0; //reference SPE_Fuel_Barrel_US_01 + + EGVAR(dragging,canDrag) = 1; //reference SPE_Fuel_Barrel_US_01 + EGVAR(dragging,dragPosition)[] = {0,1.2,0}; //reference SPE_Fuel_Barrel_US_01 + EGVAR(dragging,dragDirection) = 0; //reference SPE_Fuel_Barrel_US_01 + + EGVAR(refuel,fuelCargo) = 208; //reference SPE_Fuel_Barrel_US_01 EGVAR(refuel,hooks)[] = {{0.32,0,-0.3}}; }; From 6e8a27c9a6615a57d5a775d4a1b82d5ec1183007 Mon Sep 17 00:00:00 2001 From: amsteadrayle <2516219+amsteadrayle@users.noreply.github.com> Date: Tue, 17 Oct 2023 10:43:44 -0400 Subject: [PATCH 033/287] Medical GUI - Remake body outline textures (#9503) Co-authored-by: jonpas --- .../data/body_image/arm_left_s.paa | Bin 27247 -> 27942 bytes .../data/body_image/arm_right_s.paa | Bin 27209 -> 27923 bytes addons/medical_gui/data/body_image/head_s.paa | Bin 25893 -> 26369 bytes .../data/body_image/leg_left_s.paa | Bin 28342 -> 29129 bytes .../data/body_image/leg_right_s.paa | Bin 28406 -> 28771 bytes .../medical_gui/data/body_image/torso_s.paa | Bin 27341 -> 27987 bytes extras/scripts/medical_dummy_outline.bat | 31 ++++++++++++++++++ 7 files changed, 31 insertions(+) create mode 100644 extras/scripts/medical_dummy_outline.bat diff --git a/addons/medical_gui/data/body_image/arm_left_s.paa b/addons/medical_gui/data/body_image/arm_left_s.paa index 58682a5a73cdd090071f698c78925e5df50540f8..4c55e6143ea150de197ba8d5bfa819272888426c 100644 GIT binary patch literal 27942 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 TB(vi8jtXyVXTpRDeM;~@w2T_4 literal 27247 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 diff --git a/addons/medical_gui/data/body_image/arm_right_s.paa b/addons/medical_gui/data/body_image/arm_right_s.paa index 613ff387ffab4eae098962ba0dff909618a7c895..daff9d099e133bc10c3588e5d7015ed562265124 100644 GIT binary patch literal 27923 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 diff --git a/addons/medical_gui/data/body_image/head_s.paa b/addons/medical_gui/data/body_image/head_s.paa index f4daa0a9b6113a855e0e7c4c0d17fdda6063d5e0..9acf69a15581c8ec5eace1b01f6189e4aaf22c15 100644 GIT binary patch literal 26369 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 literal 25893 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 EHz4fT&Hw-a diff --git a/addons/medical_gui/data/body_image/leg_right_s.paa b/addons/medical_gui/data/body_image/leg_right_s.paa index 1b9bf0ba64c3419f12e0618f17f5859f64dc6ad4..4fcace26ed1f1940262ef2ba151a972955126b2f 100644 GIT binary patch literal 28771 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 literal 28406 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 Date: Tue, 17 Oct 2023 10:17:22 -0500 Subject: [PATCH 034/287] Github - Remove tasks from PR template (#9501) * Github - Remove doc task from PR template * Update PULL_REQUEST_TEMPLATE.md --- .github/PULL_REQUEST_TEMPLATE.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 5f42f937feb..5bdf51df2ab 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -4,6 +4,6 @@ ### IMPORTANT -- [ ] If the contribution affects [the documentation](https://github.com/acemod/ACE3/tree/master/docs), please include your changes in this pull request so the documentation will appear on the [website](https://ace3.acemod.org/). -- [ ] [Development Guidelines](https://ace3.acemod.org/wiki/development/) are read, understood and applied. -- [ ] Title of this PR uses our standard template `Component - Add|Fix|Improve|Change|Make|Remove {changes}`. +- If the contribution affects [the documentation](https://github.com/acemod/ACE3/tree/master/docs), please include your changes in this pull request so the documentation will appear on the [website](https://ace3.acemod.org/). +- [Development Guidelines](https://ace3.acemod.org/wiki/development/) are read, understood and applied. +- Title of this PR uses our standard template `Component - Add|Fix|Improve|Change|Make|Remove {changes}`. From 7b418b7731b52d6c5549922175594e4bdebdbde3 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Tue, 17 Oct 2023 13:40:24 -0500 Subject: [PATCH 035/287] Tools - Update publisher for compats moving to main (#9339) Co-authored-by: jonpas --- tools/publish.py | 60 +++++++++--------------------------------------- 1 file changed, 11 insertions(+), 49 deletions(-) diff --git a/tools/publish.py b/tools/publish.py index c7254fdc14d..5ddc6980ae6 100644 --- a/tools/publish.py +++ b/tools/publish.py @@ -90,71 +90,33 @@ def main(argv): if repl.lower() != "y": return 0 - - #ACE Main - http://steamcommunity.com/sharedfiles/filedetails/?id=463939057 # Note: command line publisher doesn't like our file structure, just upload this one manually - - #compat_r3f: r3 - https://steamcommunity.com/sharedfiles/filedetails/?id=2202404402 - publishFolder(os.path.join(ace_optionals_dir,"@ace_compat_r3f"), "2202404402", changelog_path) - - #compat_rh_acc: - https://steamcommunity.com/sharedfiles/filedetails/?id=2202407118 - publishFolder(os.path.join(ace_optionals_dir,"@ace_compat_rh_acc"), "2202407118", changelog_path) - - #compat_rh_de: - https://steamcommunity.com/sharedfiles/filedetails/?id=2202407963 - publishFolder(os.path.join(ace_optionals_dir,"@ace_compat_rh_de"), "2202407963", changelog_path) - - #compat_rh_m4: - https://steamcommunity.com/sharedfiles/filedetails/?id=2202408647 - publishFolder(os.path.join(ace_optionals_dir,"@ace_compat_rh_m4"), "2202408647", changelog_path) - - #compat_rh_pdw: - https://steamcommunity.com/sharedfiles/filedetails/?id=2202409303 - publishFolder(os.path.join(ace_optionals_dir,"@ace_compat_rh_pdw"), "2202409303", changelog_path) - - #ace_compat_rhs_afrf3: RHS Russians - http://steamcommunity.com/sharedfiles/filedetails/?id=773131200 - publishFolder(os.path.join(ace_optionals_dir,"@ace_compat_rhs_afrf3"), "773131200", changelog_path) - - #ace_compat_rhs_gref3: RHS GREF - http://steamcommunity.com/sharedfiles/filedetails/?id=884966711 - publishFolder(os.path.join(ace_optionals_dir,"@ace_compat_rhs_gref3"), "884966711", changelog_path) - - #ace_compat_rhs_saf3: RHS SAF - http://steamcommunity.com/sharedfiles/filedetails/?id=2174495332 - publishFolder(os.path.join(ace_optionals_dir,"@ace_compat_rhs_saf3"), "2174495332", changelog_path) - - #ace_compat_rhs_usf3: RHS USA - http://steamcommunity.com/sharedfiles/filedetails/?id=773125288 - publishFolder(os.path.join(ace_optionals_dir,"@ace_compat_rhs_usf3"), "773125288", changelog_path) - - #compat_rksl_pm_ii: - https://steamcommunity.com/sharedfiles/filedetails/?id=2202410630 - publishFolder(os.path.join(ace_optionals_dir,"@ace_compat_rksl_pm_ii"), "2202410630", changelog_path) - - #compat_sma3_iansky: - https://steamcommunity.com/sharedfiles/filedetails/?id=2202411104 - publishFolder(os.path.join(ace_optionals_dir,"@ace_compat_sma3_iansky"), "2202411104", changelog_path) - #noactionmenu: - https://steamcommunity.com/sharedfiles/filedetails/?id=2202412030 publishFolder(os.path.join(ace_optionals_dir,"@ace_noactionmenu"), "2202412030", changelog_path) - + #nocrosshair: - https://steamcommunity.com/sharedfiles/filedetails/?id=2202412481 publishFolder(os.path.join(ace_optionals_dir,"@ace_nocrosshair"), "2202412481", changelog_path) - + + #nomedical: - https://steamcommunity.com/sharedfiles/filedetails/?id=3053169823 + publishFolder(os.path.join(ace_optionals_dir,"@ace_nomedical"), "3053169823", changelog_path) + + #norealisticnames: - https://steamcommunity.com/sharedfiles/filedetails/?id=3053177117 + publishFolder(os.path.join(ace_optionals_dir,"@ace_norealisticnames"), "3053177117", changelog_path) + #nouniformrestrictions: - https://steamcommunity.com/sharedfiles/filedetails/?id=2202413047 publishFolder(os.path.join(ace_optionals_dir,"@ace_nouniformrestrictions"), "2202413047", changelog_path) - + #particles: - https://steamcommunity.com/sharedfiles/filedetails/?id=2202413537 publishFolder(os.path.join(ace_optionals_dir,"@ace_particles"), "2202413537", changelog_path) - + #realisticdispersion: - https://steamcommunity.com/sharedfiles/filedetails/?id=2202414018 publishFolder(os.path.join(ace_optionals_dir,"@ace_realisticdispersion"), "2202414018", changelog_path) - + #tracers: - https://steamcommunity.com/sharedfiles/filedetails/?id=2202414450 publishFolder(os.path.join(ace_optionals_dir,"@ace_tracers"), "2202414450", changelog_path) - #ace_compat_gm: - https://steamcommunity.com/sharedfiles/filedetails/?id=2633534991 - publishFolder(os.path.join(ace_optionals_dir,"@ace_compat_gm"), "2633534991", changelog_path) - - #ace_compat_sog: - https://steamcommunity.com/sharedfiles/filedetails/?id=2633537792 - publishFolder(os.path.join(ace_optionals_dir,"@ace_compat_sog"), "2633537792", changelog_path) - - - if __name__ == "__main__": main(sys.argv) From 1036a58aeec345dc5d1354d0accc14748861c869 Mon Sep 17 00:00:00 2001 From: jonpas Date: Tue, 17 Oct 2023 20:41:59 +0200 Subject: [PATCH 036/287] Prep 3.16.0 Build 72 --- addons/main/script_version.hpp | 2 +- docs/_config.yml | 2 +- docs/_config_dev.yml | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/addons/main/script_version.hpp b/addons/main/script_version.hpp index 0303b1e8049..5541d788f14 100644 --- a/addons/main/script_version.hpp +++ b/addons/main/script_version.hpp @@ -1,4 +1,4 @@ #define MAJOR 3 #define MINOR 16 #define PATCHLVL 0 -#define BUILD 71 +#define BUILD 72 diff --git a/docs/_config.yml b/docs/_config.yml index a571ccd498d..f3e2b09e6ba 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -10,7 +10,7 @@ ace: major: 3 minor: 16 patch: 0 - build: 71 + build: 72 markdown: kramdown diff --git a/docs/_config_dev.yml b/docs/_config_dev.yml index 4a05c7f94e8..d765ef797d0 100644 --- a/docs/_config_dev.yml +++ b/docs/_config_dev.yml @@ -8,9 +8,9 @@ ace: githubUrl: https://github.com/acemod/ACE3 version: major: 3 - minor: 13 - patch: 2 - build: 49 + minor: 16 + patch: 0 + build: 72 markdown: kramdown From b9748041d415d1ce671e468ecc54a341c4a5a4e0 Mon Sep 17 00:00:00 2001 From: Grim <69561145+LinkIsGrim@users.noreply.github.com> Date: Tue, 17 Oct 2023 20:19:09 -0400 Subject: [PATCH 037/287] Field Manual - Fix HuntIR Monitor & Fortify Tool display names (#9509) * fix huntir/fortify tool display names * add note on sutures --- addons/fieldmanual/CfgHints.hpp | 4 ++-- addons/fieldmanual/stringtable.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/fieldmanual/CfgHints.hpp b/addons/fieldmanual/CfgHints.hpp index 26d7a148056..80d2864b0d5 100644 --- a/addons/fieldmanual/CfgHints.hpp +++ b/addons/fieldmanual/CfgHints.hpp @@ -122,7 +122,7 @@ class CfgHints { }; class ACE_FortifyTool: ACE_FieldManual_Base { logicalOrder = 13; - arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_HuntIR_Monitor' call FUNC(getItemName))}; + arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_FortifyTool' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_FortifyTool_ShortName); description = CSTRING(Items_FortifyTool_Description); @@ -130,7 +130,7 @@ class CfgHints { }; class ACE_HuntIR_Monitor: ACE_FieldManual_Base { logicalOrder = 14; - arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_CableTie' call FUNC(getItemName))}; + arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_HuntIR_monitor' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_HuntIR_Monitor_ShortName); description = CSTRING(Items_HuntIR_Monitor_Description); diff --git a/addons/fieldmanual/stringtable.xml b/addons/fieldmanual/stringtable.xml index 240ebc106e2..8c9f59070fa 100644 --- a/addons/fieldmanual/stringtable.xml +++ b/addons/fieldmanual/stringtable.xml @@ -99,7 +99,7 @@ Zapobiegaj Ponownemu Otwieraniu się Ran - A %3Surgical Kit%4 is used to prevent wounds from reopening after being bandaged. Depending on settings, it can also clear trauma.<br/><br/>%3Usage:%4<br/>%2Use [%3%13%4] or [%3%14%4] and select %3Advanced Treatment%4.<br/>%2Select %3Use Surgical Kit%4. + A %3Surgical Kit%4 is used to prevent wounds from reopening after being bandaged. Depending on settings, it can also clear trauma and may require additional %3Sutures%4 to close wounds. Sutures are consumable, much like bandages, and are not a replacement for the Surgical Kit.<br/><br/>%3Usage:%4<br/>%2Use [%3%13%4] or [%3%14%4] and select %3Advanced Treatment%4.<br/>%2Select %3Use Surgical Kit%4. %3Zestaw do Szycia%4 jest używany do zapobiegania otwieraniu się ran po ich zabandażowaniu. W zależności od ustawień może także je leczyć.<br/><br/>%3Użycie:%4<br/>%2Użyj [%3%13%4] lub [%3%14%4] i wybierz %3Zaawansowane Zabiegi%4.<br/>%2Wybierz %3Użyj Zestawu do Szycia%4. From 97b68fc7ae1048dd85932863e802359c55489177 Mon Sep 17 00:00:00 2001 From: Grim <69561145+LinkIsGrim@users.noreply.github.com> Date: Wed, 18 Oct 2023 00:51:27 -0400 Subject: [PATCH 038/287] Medical GUI - Fix Medical Menu triage button position (#9515) fix --- addons/medical_gui/gui.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/medical_gui/gui.hpp b/addons/medical_gui/gui.hpp index 07ccd554f09..562ab9e1b81 100644 --- a/addons/medical_gui/gui.hpp +++ b/addons/medical_gui/gui.hpp @@ -114,7 +114,7 @@ class GVAR(BodyImage): RscControlsGroupNoScrollbars { class GVAR(TriageToggle): RscButton { idc = -1; onButtonClick = QUOTE([ctrlParent (_this select 0)] call FUNC(toggleTriageSelect)); - x = QUOTE(POS_X(13.33)); + x = QUOTE(POS_X(13.83)); y = QUOTE(POS_Y(15.5)); w = QUOTE(POS_W(12.33)); h = QUOTE(POS_H(1.1)); @@ -125,7 +125,7 @@ class GVAR(TriageToggle): RscButton { class GVAR(TriageSelect): RscControlsGroupNoScrollbars { idc = IDC_TRIAGE_SELECT; - x = QUOTE(POS_X(13.33)); + x = QUOTE(POS_X(13.83)); y = QUOTE(POS_Y(16.6)); w = QUOTE(POS_W(12.33)); h = QUOTE(POS_H(5.5)); From abb6519d6ddc210667d47460fb55e9dbff798588 Mon Sep 17 00:00:00 2001 From: TIANYAO ZHANG <88520881+ZHANGTIANYAO1@users.noreply.github.com> Date: Thu, 19 Oct 2023 01:18:39 +0800 Subject: [PATCH 039/287] Translations - Update Chinessimp (#9517) Update chinessimp translation to stringtable.xml --- addons/medical_gui/stringtable.xml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/addons/medical_gui/stringtable.xml b/addons/medical_gui/stringtable.xml index ef08d7b26b5..9fde42b8346 100644 --- a/addons/medical_gui/stringtable.xml +++ b/addons/medical_gui/stringtable.xml @@ -1281,18 +1281,22 @@ Peek Medical Info on Hit Podgląd Informacji Medycznych po Zranieniu + 点击查看医疗信息 Temporarily show medical info when injured. Tymczasowe wyświetlanie informacji medycznych po zranieniu. + 受伤时暂时显示医疗信息。 Medical Peek Duration on Hit Czas trwania podglądu informacji medycznych po zranieniu + 击中时的医疗信息显示持续时间 How long the medical info peek remains open after being injured. Jak długo podgląd informacji medycznych pozostaje otwarty po otrzymaniu obrażeń. + 受伤后医疗信息会开放多长时间? Show Trauma Sustained @@ -1301,6 +1305,7 @@ Pokaż Doznane Urazy Zeigen Sie das erlittene Trauma 외상 지속 표시 + 显示遭受的创伤 Show trauma sustained in the injury list. @@ -1309,14 +1314,17 @@ Pokaż odniesione obrażenia na liście obrażeń. Zeigen Sie das erlittene Trauma in der Verletzungsliste an. 부상 목록에 발생한 외상을 표시합니다. + 在伤情表上显示创伤 Body Part Outline Color Kolor Konturu Części Ciała + 身体部位轮廓颜色 Color of outline around selected body part. Kolor konturu wokół wybranej części ciała. + 选定身体部位周围的轮廓颜色。 Minor Trauma @@ -1325,6 +1333,7 @@ Niewielki Uraz Kleineres Trauma 약한 외상 + 轻微创伤 Major Trauma @@ -1333,6 +1342,7 @@ Poważny Uraz Großes Trauma 중간 외상 + 中度创伤 Severe Trauma @@ -1341,6 +1351,7 @@ Ciężki Uraz Schweres Trauma 강한 외상 + 重度创伤 Chronic Trauma @@ -1349,35 +1360,44 @@ Przewlekły Uraz Chronisches Trauma 심각한 외상 + 慢性创伤 L L + L R P + R in your inventory w twoim ekwipunku + 在你的库存中 in patient's inventory w ekwipunku pacjenta + 在病人库存中 in vehicle's inventory w ekwipunku pojazdu + 在车辆库存中 No effect until tourniquet removed + 止血带取下后才有效果 Show Tourniquet Warning + 显示止血带警告 Show a warning tooltip when a tourniquet will interfere with a medical action. + 当止血带干扰医疗操作时,显示警告提示。 From b2b49cc993271127b8f52a767e8ec18ddab58d17 Mon Sep 17 00:00:00 2001 From: Grim <69561145+LinkIsGrim@users.noreply.github.com> Date: Wed, 18 Oct 2023 14:17:22 -0400 Subject: [PATCH 040/287] Arsenal - Fix saving loadouts on new profiles (#9523) * fix * Fix unrelated TRACE macro in arsenal * Update addons/arsenal/functions/fnc_onArsenalOpen.sqf Co-authored-by: PabstMirror --------- Co-authored-by: PabstMirror --- addons/arsenal/functions/fnc_onArsenalOpen.sqf | 4 ++++ addons/arsenal/functions/fnc_statTextStatement_magCount.sqf | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/addons/arsenal/functions/fnc_onArsenalOpen.sqf b/addons/arsenal/functions/fnc_onArsenalOpen.sqf index 74ef584cc9b..bf85e20bb5b 100644 --- a/addons/arsenal/functions/fnc_onArsenalOpen.sqf +++ b/addons/arsenal/functions/fnc_onArsenalOpen.sqf @@ -42,6 +42,10 @@ if (isNil QGVAR(defaultLoadoutsList)) then { }; }; +if (isNil {profileNamespace getVariable QGVAR(saved_loadouts)}) then { + profileNamespace setVariable [QGVAR(saved_loadouts), []]; +}; + if (isNil QGVAR(virtualItems)) then { private _virtualItems = [ [IDX_VIRT_WEAPONS, createHashMapFromArray [[IDX_VIRT_PRIMARY_WEAPONS, createHashMap], [IDX_VIRT_SECONDARY_WEAPONS, createHashMap], [IDX_VIRT_HANDGUN_WEAPONS, createHashMap]]], diff --git a/addons/arsenal/functions/fnc_statTextStatement_magCount.sqf b/addons/arsenal/functions/fnc_statTextStatement_magCount.sqf index b2b46307fc9..82d68d48483 100644 --- a/addons/arsenal/functions/fnc_statTextStatement_magCount.sqf +++ b/addons/arsenal/functions/fnc_statTextStatement_magCount.sqf @@ -14,6 +14,6 @@ */ params ["", "_config"]; -TRACE_1("statTextStatement_magCount",_config) +TRACE_1("statTextStatement_magCount",_config); getNumber (_config >> "count"); From 209edf0433e442631a6dac2f8520ed52a83db63d Mon Sep 17 00:00:00 2001 From: Grim <69561145+LinkIsGrim@users.noreply.github.com> Date: Wed, 18 Oct 2023 14:51:00 -0400 Subject: [PATCH 041/287] Arsenal - Add `FUNC(getVirtualItems)` (#9512) add API --- addons/arsenal/XEH_PREP.hpp | 1 + .../arsenal/functions/fnc_getVirtualItems.sqf | 39 +++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 addons/arsenal/functions/fnc_getVirtualItems.sqf diff --git a/addons/arsenal/XEH_PREP.hpp b/addons/arsenal/XEH_PREP.hpp index 3b063d8ebea..3864a810d83 100644 --- a/addons/arsenal/XEH_PREP.hpp +++ b/addons/arsenal/XEH_PREP.hpp @@ -39,6 +39,7 @@ PREP(fillLeftPanel); PREP(fillLoadoutsList); PREP(fillRightPanel); PREP(fillSort); +PREP(getVirtualItems); PREP(handleActions); PREP(handleLoadoutsSearchbar); PREP(handleMouse); diff --git a/addons/arsenal/functions/fnc_getVirtualItems.sqf b/addons/arsenal/functions/fnc_getVirtualItems.sqf new file mode 100644 index 00000000000..0666b340871 --- /dev/null +++ b/addons/arsenal/functions/fnc_getVirtualItems.sqf @@ -0,0 +1,39 @@ +#include "..\script_component.hpp" +#include "..\defines.hpp" +/* + * Author: johnb43, Grim + * Gets list of virtual items available to the object. + * + * Arguments: + * 0: Target + * + * Return Value: + * Virtual Items + * + * Example: + * cursorObject call ace_arsenal_fnc_getVirtualItems + * + * Public: Yes +*/ +params [["_object", objNull, [objNull]]]; + +private _virtualItems = _object getVariable QGVAR(virtualItems); +if (isNil "_virtualItems") exitWith {createHashMap}; + +private _virtualItemsFlat = +_virtualItems; +private _weapons = _virtualItemsFlat deleteAt IDX_VIRT_WEAPONS; +private _attachments = _virtualItemsFlat deleteAt IDX_VIRT_ATTACHMENTS; + +for "_index" from IDX_VIRT_ITEMS_ALL to IDX_VIRT_MISC_ITEMS do { + _virtualItemsFlat merge [_virtualItemsFlat deleteAt _index, true]; +}; + +for "_index" from IDX_VIRT_PRIMARY_WEAPONS to IDX_VIRT_HANDGUN_WEAPONS do { + _virtualItemsFlat merge [_weapons deleteAt _index, true]; +}; + +for "_index" from IDX_VIRT_OPTICS_ATTACHMENTS to IDX_VIRT_BIPOD_ATTACHMENTS do { + _virtualItemsFlat merge [_attachments deleteAt _index, true]; +}; + +_virtualItemsFlat // return From c92eca7751ba92c41b1d55341a8a077adbd6d322 Mon Sep 17 00:00:00 2001 From: MiszczuZPolski <71414303+MiszczuZPolski@users.noreply.github.com> Date: Wed, 18 Oct 2023 21:02:30 +0200 Subject: [PATCH 042/287] Medical Treatment - Improve display name for arsenal tab (#9525) * add new display name for arsenal tab * german language added * Update stringtable.xml * Update stringtable.xml --- addons/medical_treatment/XEH_preInit.sqf | 2 +- addons/medical_treatment/stringtable.xml | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/addons/medical_treatment/XEH_preInit.sqf b/addons/medical_treatment/XEH_preInit.sqf index 79ec737aa6b..68b80b5d0df 100644 --- a/addons/medical_treatment/XEH_preInit.sqf +++ b/addons/medical_treatment/XEH_preInit.sqf @@ -48,7 +48,7 @@ GVAR(facilityClasses) = []; // Custom Arsenal tab if (["ace_arsenal"] call EFUNC(common,isModLoaded)) then { - [MEDICAL_TREATMENT_ITEMS, LELSTRING(medical,Category), ARSENAL_CATEGORY_ICON, -1, true] call EFUNC(arsenal,addRightPanelButton); + [MEDICAL_TREATMENT_ITEMS, LLSTRING(medicalTab), ARSENAL_CATEGORY_ICON, -1, true] call EFUNC(arsenal,addRightPanelButton); }; ADDON = true; diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml index 1dbb876418a..74e6f8ef6b4 100644 --- a/addons/medical_treatment/stringtable.xml +++ b/addons/medical_treatment/stringtable.xml @@ -4784,5 +4784,18 @@ Bestimmt, wie wirksam Bandagen beim Verschließen von Wunden sind. 붕대가 상처를 치료하는 데 얼마나 효과적으로 지속되는지 결정합니다. + + Medical Items + Przedmioty Medyczne + Matériel médical + 의료 물품 + Orvosi felszerelés + Медицинские предметы + Zdravotnický materiál + Tıbbi Ürünler + Medizinisches Material + 医療品 + Objetos médicos + From 262b7fe5c6449e1c13a6b2be141a309380925277 Mon Sep 17 00:00:00 2001 From: Mike-MF Date: Wed, 18 Oct 2023 20:03:21 +0100 Subject: [PATCH 043/287] Night Vision - Add prefix to `colorPreset` (#9520) * Add ACE Prefix to colorPreset, update docs. * remove pointless bwc --- .../functions/fnc_refreshGoggleType.sqf | 7 ++++--- addons/nightvision/script_component.hpp | 4 ++-- docs/wiki/framework/nightvision-framework.md | 17 +++++++++++++---- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/addons/nightvision/functions/fnc_refreshGoggleType.sqf b/addons/nightvision/functions/fnc_refreshGoggleType.sqf index 60ac627889b..7414e58d026 100644 --- a/addons/nightvision/functions/fnc_refreshGoggleType.sqf +++ b/addons/nightvision/functions/fnc_refreshGoggleType.sqf @@ -27,7 +27,8 @@ private _nvgGen = 3; private _blurRadius = -1; // Adds Array of Params / Original ACE3's (ST's) by default. (NVG_GREEN_PRESET) -private _preset = getArray (configFile >> "CfgWeapons" >> "NVGoggles" >> "colorPreset"); +private _preset = getArray (configFile >> "CfgWeapons" >> "NVGoggles" >> QGVAR(colorPreset)); + if ((alive ACE_player) && {isNull (ACE_controlledUAV select 0)}) then { if (((vehicle ACE_player) == ACE_player) || { // Test if we are using player's nvg or if sourced from vehicle: @@ -47,7 +48,7 @@ if ((alive ACE_player) && {isNull (ACE_controlledUAV select 0)}) then { TRACE_1("souce: binocular",binocular ACE_player); // Source is from player's binocular (Rangefinder/Vector21bNite) private _config = configFile >> "CfgWeapons" >> (binocular ACE_player); if (isNumber (_config >> QGVAR(generation))) then {_nvgGen = getNumber (_config >> QGVAR(generation));}; - if (isArray (_config >> "colorPreset")) then {_preset = getArray (_config >> "colorPreset");}; + if (isArray (_config >> QGVAR(colorPreset))) then {_preset = getArray (_config >> QGVAR(colorPreset));}; }; TRACE_1("source: hmd",GVAR(playerHMD)); // Source is player's HMD (or possibly a NVG scope, but no good way to detect that) @@ -62,7 +63,7 @@ if ((alive ACE_player) && {isNull (ACE_controlledUAV select 0)}) then { if (isNumber (_config >> QGVAR(bluRadius))) then {_blurRadius = getNumber (_config >> QGVAR(bluRadius));}; }; if (isNumber (_config >> QGVAR(generation))) then {_nvgGen = getNumber (_config >> QGVAR(generation));}; - if (isArray (_config >> "colorPreset")) then {_preset = getArray (_config >> "colorPreset");}; + if (isArray (_config >> QGVAR(colorPreset))) then {_preset = getArray (_config >> QGVAR(colorPreset));}; } else { TRACE_1("source: vehicle - defaults",typeOf vehicle ACE_player); }; diff --git a/addons/nightvision/script_component.hpp b/addons/nightvision/script_component.hpp index 2bf48a8d056..68548ed39f2 100644 --- a/addons/nightvision/script_component.hpp +++ b/addons/nightvision/script_component.hpp @@ -19,8 +19,8 @@ // Effect Settings / Magic values to tweak: -#define NVG_GREEN_PRESET colorPreset[] = {0, {0.0, 0.0, 0.0, 0.0}, {1.3, 1.2, 0.0, 0.9}, {6, 1, 1, 0.0}} -#define NVG_WHITE_PRESET colorPreset[] = {0.0, {0.0, 0.0, 0.0, 0.0}, {1.1, 0.8, 1.9, 0.9}, {1, 1, 6, 0.0}} +#define NVG_GREEN_PRESET GVAR(colorPreset)[] = {0, {0.0, 0.0, 0.0, 0.0}, {1.3, 1.2, 0.0, 0.9}, {6, 1, 1, 0.0}} +#define NVG_WHITE_PRESET GVAR(colorPreset)[] = {0.0, {0.0, 0.0, 0.0, 0.0}, {1.1, 0.8, 1.9, 0.9}, {1, 1, 6, 0.0}} // Decreases fog when in air vehicles #define ST_NVG_AIR_FOG_MULTIPLIER 0.5 diff --git a/docs/wiki/framework/nightvision-framework.md b/docs/wiki/framework/nightvision-framework.md index 8d9bf7eda7a..5f91421b8d2 100644 --- a/docs/wiki/framework/nightvision-framework.md +++ b/docs/wiki/framework/nightvision-framework.md @@ -27,10 +27,19 @@ class CfgWeapons { author = ECSTRING(common,ACETeam); descriptionShort = "Biocular nightvision goggles"; displayName = "NV Goggles (Bio)"; - GVAR(border) = QPATHTOF(data\nvg_mask_binos_4096.paa); // Edge mask for different tube configurations. Three types: mono, bino and quad. - GVAR(bluRadius) = 0.13; // Edge blur radius. - GVAR(eyeCups) = 1; // Does have eyecups. - GVAR(generation) = 4; // Generation 4. Affects image quality. + ace_nightvision_border = QPATHTOF(data\nvg_mask_binos_4096.paa); // Edge mask for different tube configurations. Three types: mono, bino and quad. + ace_nightvision_bluRadius = 0.13; // Edge blur radius. + ace_nightvision_colorPreset[] = {0, {0.0, 0.0, 0.0, 0.0}, {1.3, 1.2, 0.0, 0.9}, {6, 1, 1, 0.0}}; // Green preset + ace_nightvision_eyeCups = 1; // Does have eyecups. + ace_nightvision_generation = 4; // Generation 4. Affects image quality. }; }; ``` + +## 2. Color Presets + +Additional color presets + +```cpp +ace_nightvision_colorPreset[] = {0.0, {0.0, 0.0, 0.0, 0.0}, {1.1, 0.8, 1.9, 0.9}, {1, 1, 6, 0.0}}; // White Phosphor Preset +``` From 902e3655369c59f1b82ed84e86d4cc533aa21b32 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Wed, 18 Oct 2023 14:19:20 -0500 Subject: [PATCH 044/287] Tools - Update `addon.toml` to HEMTT 1.9.1 (#9511) Tools - Update addon.toml to hemtt1.91 --- addons/fire/addon.toml | 2 +- addons/medical/addon.toml | 2 +- addons/medical_ai/addon.toml | 2 +- addons/medical_blood/addon.toml | 2 +- addons/medical_damage/addon.toml | 2 +- addons/medical_engine/addon.toml | 2 +- addons/medical_feedback/addon.toml | 2 +- addons/medical_gui/addon.toml | 2 +- addons/medical_statemachine/addon.toml | 2 +- addons/medical_status/addon.toml | 2 +- addons/medical_treatment/addon.toml | 2 +- addons/medical_vitals/addon.toml | 2 +- addons/realisticnames/addon.toml | 2 +- tools/make.py | 2 +- tools/search_undefinedFunctions.py | 5 ++++- tools/sqfvmChecker.py | 27 ++++++++++---------------- 16 files changed, 28 insertions(+), 32 deletions(-) diff --git a/addons/fire/addon.toml b/addons/fire/addon.toml index 7cfef775ee7..b58beb488aa 100644 --- a/addons/fire/addon.toml +++ b/addons/fire/addon.toml @@ -1,2 +1,2 @@ -[preprocess] +[rapify] enabled = false diff --git a/addons/medical/addon.toml b/addons/medical/addon.toml index 7cfef775ee7..b58beb488aa 100644 --- a/addons/medical/addon.toml +++ b/addons/medical/addon.toml @@ -1,2 +1,2 @@ -[preprocess] +[rapify] enabled = false diff --git a/addons/medical_ai/addon.toml b/addons/medical_ai/addon.toml index 7cfef775ee7..b58beb488aa 100644 --- a/addons/medical_ai/addon.toml +++ b/addons/medical_ai/addon.toml @@ -1,2 +1,2 @@ -[preprocess] +[rapify] enabled = false diff --git a/addons/medical_blood/addon.toml b/addons/medical_blood/addon.toml index 7cfef775ee7..b58beb488aa 100644 --- a/addons/medical_blood/addon.toml +++ b/addons/medical_blood/addon.toml @@ -1,2 +1,2 @@ -[preprocess] +[rapify] enabled = false diff --git a/addons/medical_damage/addon.toml b/addons/medical_damage/addon.toml index 7cfef775ee7..b58beb488aa 100644 --- a/addons/medical_damage/addon.toml +++ b/addons/medical_damage/addon.toml @@ -1,2 +1,2 @@ -[preprocess] +[rapify] enabled = false diff --git a/addons/medical_engine/addon.toml b/addons/medical_engine/addon.toml index 7cfef775ee7..b58beb488aa 100644 --- a/addons/medical_engine/addon.toml +++ b/addons/medical_engine/addon.toml @@ -1,2 +1,2 @@ -[preprocess] +[rapify] enabled = false diff --git a/addons/medical_feedback/addon.toml b/addons/medical_feedback/addon.toml index 7cfef775ee7..b58beb488aa 100644 --- a/addons/medical_feedback/addon.toml +++ b/addons/medical_feedback/addon.toml @@ -1,2 +1,2 @@ -[preprocess] +[rapify] enabled = false diff --git a/addons/medical_gui/addon.toml b/addons/medical_gui/addon.toml index 7cfef775ee7..b58beb488aa 100644 --- a/addons/medical_gui/addon.toml +++ b/addons/medical_gui/addon.toml @@ -1,2 +1,2 @@ -[preprocess] +[rapify] enabled = false diff --git a/addons/medical_statemachine/addon.toml b/addons/medical_statemachine/addon.toml index 7cfef775ee7..b58beb488aa 100644 --- a/addons/medical_statemachine/addon.toml +++ b/addons/medical_statemachine/addon.toml @@ -1,2 +1,2 @@ -[preprocess] +[rapify] enabled = false diff --git a/addons/medical_status/addon.toml b/addons/medical_status/addon.toml index 7cfef775ee7..b58beb488aa 100644 --- a/addons/medical_status/addon.toml +++ b/addons/medical_status/addon.toml @@ -1,2 +1,2 @@ -[preprocess] +[rapify] enabled = false diff --git a/addons/medical_treatment/addon.toml b/addons/medical_treatment/addon.toml index 7cfef775ee7..b58beb488aa 100644 --- a/addons/medical_treatment/addon.toml +++ b/addons/medical_treatment/addon.toml @@ -1,2 +1,2 @@ -[preprocess] +[rapify] enabled = false diff --git a/addons/medical_vitals/addon.toml b/addons/medical_vitals/addon.toml index 7cfef775ee7..b58beb488aa 100644 --- a/addons/medical_vitals/addon.toml +++ b/addons/medical_vitals/addon.toml @@ -1,2 +1,2 @@ -[preprocess] +[rapify] enabled = false diff --git a/addons/realisticnames/addon.toml b/addons/realisticnames/addon.toml index 7cfef775ee7..b58beb488aa 100644 --- a/addons/realisticnames/addon.toml +++ b/addons/realisticnames/addon.toml @@ -1,2 +1,2 @@ -[preprocess] +[rapify] enabled = false diff --git a/tools/make.py b/tools/make.py index 5e768ac37e3..a6ba9cca5f3 100644 --- a/tools/make.py +++ b/tools/make.py @@ -1329,7 +1329,7 @@ def main(argv): if "preprocess = false" in tomlFile: print_error("'preprocess = false' not supported") raise - skipPreprocessing = "[preprocess]\nenabled = false" in tomlFile + skipPreprocessing = "[preprocess]\nenabled = false" in tomlFile or "[rapify]\nenabled = false" in tomlFile if os.path.isfile(os.path.join(work_drive, prefix, module, "$NOBIN$")): print_green("$NOBIN$ Found. Proceeding with non-binarizing!") diff --git a/tools/search_undefinedFunctions.py b/tools/search_undefinedFunctions.py index fcbf690996b..6789bbe93d5 100644 --- a/tools/search_undefinedFunctions.py +++ b/tools/search_undefinedFunctions.py @@ -60,6 +60,7 @@ def Paste( data ): def getFunctions(filepath): selfmodule = (re.search(r'addons[\W]*([_a-zA-Z0-9]*)', filepath)).group(1) # print("Checking {0} from {1}".format(filepath,selfmodule)) + if (selfmodule.startswith("compat")): return [] with open(filepath, 'r') as file: content = file.read() @@ -85,6 +86,7 @@ def getFunctions(filepath): def getStrings(filepath): selfmodule = (re.search(r'addons[\W]*([_a-zA-Z0-9]*)', filepath)).group(1) # print("Checking {0} from {1}".format(filepath,selfmodule)) + if (selfmodule.startswith("compat")): return [] with open(filepath, 'r') as file: content = file.read() @@ -121,7 +123,8 @@ def main(): parser.add_argument('-m','--module', help='only search specified module addon folder', required=False, default=".") args = parser.parse_args() - for root, dirnames, filenames in os.walk('../addons' + '/' + args.module): + addon_base_path = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) + for root, dirnames, filenames in os.walk(addon_base_path +"/" + 'addons' + '/' + args.module): for filename in fnmatch.filter(filenames, '*.sqf'): sqf_list.append(os.path.join(root, filename)) for filename in fnmatch.filter(filenames, '*.cpp'): diff --git a/tools/sqfvmChecker.py b/tools/sqfvmChecker.py index 444b6e90261..423d89ffbbd 100644 --- a/tools/sqfvmChecker.py +++ b/tools/sqfvmChecker.py @@ -2,8 +2,9 @@ import sys import subprocess import concurrent.futures +import tomllib -addon_base_path = os.path.dirname(os.getcwd()) +addon_base_path = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) files_to_ignore_lower = [ x.lower() for x in ["initSettings.sqf", "initKeybinds.sqf", "XEH_PREP.sqf"] @@ -26,22 +27,14 @@ def get_files_to_process(basePath): if file.lower() in files_to_ignore_lower: continue skipPreprocessing = False - addonTomlPath = os.path.join(root, "addon.toml") - if os.path.isfile(addonTomlPath): - with open(addonTomlPath, "r") as f: - tomlFile = f.read() - if "preprocess = false" in tomlFile: - print("'preprocess = false' not supported") - raise - skipPreprocessing = "[preprocess]\nenabled = false" in tomlFile - addonTomlPath = os.path.join(os.path.dirname(root), "addon.toml") - if os.path.isfile(addonTomlPath): - with open(addonTomlPath, "r") as f: - tomlFile = f.read() - if "preprocess = false" in tomlFile: - print("'preprocess = false' not supported") - raise - skipPreprocessing = "[preprocess]\nenabled = false" in tomlFile + for addonTomlPath in [os.path.join(root, "addon.toml"), os.path.join(os.path.dirname(root), "addon.toml")]: + if os.path.isfile(addonTomlPath): + with open(addonTomlPath, "rb") as f: + tomlFile = tomllib.load(f) + try: + skipPreprocessing = not tomlFile.get('rapify')['enabled'] + except: + pass if file == "config.cpp" and skipPreprocessing: continue # ignore configs with __has_include filePath = os.path.join(root, file) From d70c049b4f924400af5385acfe5842305e9c4132 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Wed, 18 Oct 2023 21:17:07 -0500 Subject: [PATCH 045/287] CSW/Dragging - Handle null objects causing script errors (#9529) * CSW - Handle static weapon be deleted * add same fix to dragging --- addons/csw/functions/fnc_staticWeaponInit.sqf | 1 + addons/dragging/functions/fnc_initPerson.sqf | 1 + 2 files changed, 2 insertions(+) diff --git a/addons/csw/functions/fnc_staticWeaponInit.sqf b/addons/csw/functions/fnc_staticWeaponInit.sqf index 3b1d7ef66e6..fcef5df08e1 100644 --- a/addons/csw/functions/fnc_staticWeaponInit.sqf +++ b/addons/csw/functions/fnc_staticWeaponInit.sqf @@ -16,6 +16,7 @@ */ params ["_staticWeapon"]; +if (isNull _staticWeapon) exitWith { WARNING_1("%1 became null",_staticWeapon) }; private _typeOf = typeOf _staticWeapon; private _configOf = configOf _staticWeapon; private _configEnabled = (getNumber (_configOf >> "ace_csw" >> "enabled")) == 1; diff --git a/addons/dragging/functions/fnc_initPerson.sqf b/addons/dragging/functions/fnc_initPerson.sqf index fd166cfab98..6ac2b5d569d 100644 --- a/addons/dragging/functions/fnc_initPerson.sqf +++ b/addons/dragging/functions/fnc_initPerson.sqf @@ -16,6 +16,7 @@ */ params ["_unit"]; +if (isNull _unit) exitWith { WARNING_1("%1 became null",_unit) }; [_unit, true, [0, 1.1, 0.092], 180] call FUNC(setDraggable); [_unit, true, [0.4, -0.1, -1.25], 195] call FUNC(setCarryable); // Hard-coded selection: "LeftShoulder" From e3f447c8bdd568fd2c56190d57782aec4e83217a Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Thu, 19 Oct 2023 12:15:14 -0500 Subject: [PATCH 046/287] Zeus - Fix trench module on clients (#9513) * Zeus - Fix trench module on clients * Update addons/zeus/functions/fnc_moduleLayTrench.sqf --- addons/zeus/functions/fnc_moduleLayTrench.sqf | 3 +++ 1 file changed, 3 insertions(+) diff --git a/addons/zeus/functions/fnc_moduleLayTrench.sqf b/addons/zeus/functions/fnc_moduleLayTrench.sqf index e92725138fe..fe4e29b62ce 100644 --- a/addons/zeus/functions/fnc_moduleLayTrench.sqf +++ b/addons/zeus/functions/fnc_moduleLayTrench.sqf @@ -27,6 +27,9 @@ if !(["ace_trenches"] call EFUNC(common,isModLoaded)) exitWith { [LSTRING(RequiresAddon)] call FUNC(showMessage); }; +if (_logic getVariable [QGVAR(ran), false]) exitWith {}; +_logic setVariable [QGVAR(ran), true]; + private _drawCode = { params ["_object", "_mousePos"]; private _startPos = getPos _object; From 6f001c72bd718fc7d68178140718dbec709d1940 Mon Sep 17 00:00:00 2001 From: Apricot <50947830+Apricot-ale@users.noreply.github.com> Date: Fri, 20 Oct 2023 02:18:44 +0900 Subject: [PATCH 047/287] Translations - Japanese Hotfix for Arsenal Sorting (#9533) Japanese arsenal sort hotfix --- addons/arsenal/stringtable.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/arsenal/stringtable.xml b/addons/arsenal/stringtable.xml index 1b0ef2a6cf7..bf7c087cc0c 100644 --- a/addons/arsenal/stringtable.xml +++ b/addons/arsenal/stringtable.xml @@ -1558,7 +1558,7 @@ Descending - 下降 + 降順 Malejąco Absteigend 내림차순 From 2fbc40b62d8d1428c5983f031102c2515f3dcaae Mon Sep 17 00:00:00 2001 From: MiszczuZPolski <71414303+MiszczuZPolski@users.noreply.github.com> Date: Fri, 20 Oct 2023 01:25:05 +0200 Subject: [PATCH 048/287] Medical GUI - Change minimal value of damage threshold (#9538) * change minimal value of damage threshold * applying pabst suggestion * remove space * Update addons/medical_gui/functions/fnc_updateBodyImage.sqf Co-authored-by: PabstMirror --------- Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> Co-authored-by: PabstMirror --- addons/medical_gui/functions/fnc_updateBodyImage.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/medical_gui/functions/fnc_updateBodyImage.sqf b/addons/medical_gui/functions/fnc_updateBodyImage.sqf index a7e579d193f..4d22b68a2d8 100644 --- a/addons/medical_gui/functions/fnc_updateBodyImage.sqf +++ b/addons/medical_gui/functions/fnc_updateBodyImage.sqf @@ -91,7 +91,7 @@ private _bodyPartBloodLoss = [0, 0, 0, 0, 0, 0]; _damageThreshold = _damageThreshold * 1.5 }; }; - _damage = (_damage / _damageThreshold) min 1; + _damage = (_damage / (0.01 max _damageThreshold)) min 1; [_damage] call FUNC(damageToRGBA); }; From f0a6fc7b9d433b7b3eedd19ad866464674361034 Mon Sep 17 00:00:00 2001 From: amsteadrayle <2516219+amsteadrayle@users.noreply.github.com> Date: Thu, 19 Oct 2023 19:25:19 -0400 Subject: [PATCH 049/287] Advanced Fatigue - Add settings to change sway factor with weapon rested/deployed (#9536) Add setting to change sway factor with weapon rested/deployed --- addons/advanced_fatigue/XEH_postInit.sqf | 14 +++++++++++++- addons/advanced_fatigue/initSettings.sqf | 18 ++++++++++++++++++ addons/advanced_fatigue/stringtable.xml | 12 ++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) diff --git a/addons/advanced_fatigue/XEH_postInit.sqf b/addons/advanced_fatigue/XEH_postInit.sqf index 56dcb713720..d447c3f6514 100644 --- a/addons/advanced_fatigue/XEH_postInit.sqf +++ b/addons/advanced_fatigue/XEH_postInit.sqf @@ -17,7 +17,19 @@ if (!hasInterface) exitWith {}; }; }, QUOTE(ADDON)] call EFUNC(common,addSwayFactor); -["multiplier", {GVAR(swayFactor)}, QUOTE(ADDON)] call EFUNC(common,addSwayFactor); +["multiplier", { + switch (true) do { + case (isWeaponRested ACE_player): { + GVAR(swayFactor) * GVAR(restedSwayFactor) + }; + case (isWeaponDeployed ACE_player): { + GVAR(swayFactor) * GVAR(deployedSwayFactor) + }; + default { + GVAR(swayFactor) + }; + }; +}, QUOTE(ADDON)] call EFUNC(common,addSwayFactor); // recheck weapon inertia after weapon swap, change of attachments or switching unit ["weapon", {[ACE_player] call FUNC(getWeaponInertia)}, true] call CBA_fnc_addPlayerEventHandler; diff --git a/addons/advanced_fatigue/initSettings.sqf b/addons/advanced_fatigue/initSettings.sqf index 7787fd3f5d0..e2d797bf91b 100644 --- a/addons/advanced_fatigue/initSettings.sqf +++ b/addons/advanced_fatigue/initSettings.sqf @@ -89,3 +89,21 @@ [0, 5, 1, 1], true ] call CBA_fnc_addSetting; + +[ + QGVAR(restedSwayFactor), + "SLIDER", + [LSTRING(RestedSwayFactor), LSTRING(RestedSwayFactor_Description)], + LSTRING(DisplayName), + [0, 5, 1, 2], + true +] call CBA_fnc_addSetting; + +[ + QGVAR(deployedSwayFactor), + "SLIDER", + [LSTRING(DeployedSwayFactor), LSTRING(DeployedSwayFactor_Description)], + LSTRING(DisplayName), + [0, 5, 1, 2], + true +] call CBA_fnc_addSetting; diff --git a/addons/advanced_fatigue/stringtable.xml b/addons/advanced_fatigue/stringtable.xml index 5737e1fca23..f2949cdf5ad 100644 --- a/addons/advanced_fatigue/stringtable.xml +++ b/addons/advanced_fatigue/stringtable.xml @@ -184,6 +184,18 @@ Ovlivňuje množství kývání zbraní. Vyšší znamená více kývání. 손떨림의 정도를 정합니다. 높을 수록 많이 휘적입니다. + + Rested sway factor + + + Influences the amount of weapon sway while weapon is rested. + + + Deployed sway factor + + + Influences the amount of weapon sway while weapon is deployed. + Enabled Activada From 124798cb8d15050dbc419f00580ef3ecd8f151a4 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Thu, 19 Oct 2023 18:25:44 -0500 Subject: [PATCH 050/287] Advanced Throwing - Call ammo event handlers (#9535) AdvThrowing - Run ammo event handlers Close #9532 --- addons/advanced_throwing/XEH_postInit.sqf | 1 + .../functions/fnc_throwFiredXEH.sqf | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/addons/advanced_throwing/XEH_postInit.sqf b/addons/advanced_throwing/XEH_postInit.sqf index 7c0a1942672..96b0fbb09b4 100644 --- a/addons/advanced_throwing/XEH_postInit.sqf +++ b/addons/advanced_throwing/XEH_postInit.sqf @@ -1,6 +1,7 @@ #include "script_component.hpp" // Fired XEH +GVAR(ammoEventHandlers) = createHashMap; [QGVAR(throwFiredXEH), FUNC(throwFiredXEH)] call CBA_fnc_addEventHandler; // Exit on HC diff --git a/addons/advanced_throwing/functions/fnc_throwFiredXEH.sqf b/addons/advanced_throwing/functions/fnc_throwFiredXEH.sqf index 9d2e9e24b28..bbbcbf3274f 100644 --- a/addons/advanced_throwing/functions/fnc_throwFiredXEH.sqf +++ b/addons/advanced_throwing/functions/fnc_throwFiredXEH.sqf @@ -20,14 +20,25 @@ * * Public: No */ - +params ["_unit", "", "_muzzle", "", "_ammo"]; TRACE_1("Fired",_this); { _this call _x; -} forEach ((_this select 0) getVariable "cba_xeh_fired"); +} forEach (_unit getVariable "cba_xeh_fired"); // Call muzzle fired EH { _this call compile getText (_x >> "fired"); -} forEach (configProperties [configFile >> "CfgWeapons" >> "Throw" >> (_this select 2) >> "EventHandlers", "isClass _x", true]); +} forEach (configProperties [configFile >> "CfgWeapons" >> "Throw" >> _muzzle >> "EventHandlers", "isClass _x", true]); + +// Call ammo fired EH +{ _this call _x } forEach (GVAR(ammoEventHandlers) getOrDefaultCall [_ammo, { + private _cfg = configFile >> "CfgAmmo" >> _ammo >> "EventHandlers"; + private _eventHandlers = []; + { + private _eh = getText (_x >> "fired"); + if (_eh != "") then { _eventHandlers pushBack compile _eh }; + } forEach ([_cfg] + configProperties [_cfg, "isClass _x", true]); + _eventHandlers +}, true]); From 55566fd60f469b271f935f87d2edeaed60e364ff Mon Sep 17 00:00:00 2001 From: Grim <69561145+LinkIsGrim@users.noreply.github.com> Date: Thu, 19 Oct 2023 20:24:38 -0400 Subject: [PATCH 051/287] Interaction/Dragging - Remove actions from scripted weaponHolders (#9541) remove actions from scripted holders --- addons/dragging/CfgEventHandlers.hpp | 7 +++++++ addons/interaction/CfgVehicles.hpp | 21 +++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/addons/dragging/CfgEventHandlers.hpp b/addons/dragging/CfgEventHandlers.hpp index 94ebf2cda64..d3b43b314a2 100644 --- a/addons/dragging/CfgEventHandlers.hpp +++ b/addons/dragging/CfgEventHandlers.hpp @@ -42,6 +42,13 @@ class Extended_Init_EventHandlers { class WeaponHolder { class ADDON { init = QUOTE(_this call FUNC(initObject)); + exclude[] = {"GroundWeaponHolder_Scripted"}; + }; + }; + class WeaponHolderSimulated { + class ADDON { + init = QUOTE(_this call FUNC(initObject)); + exclude[] = {"WeaponHolderSimulated_Scripted"}; }; }; class Land_Camping_Light_F { diff --git a/addons/interaction/CfgVehicles.hpp b/addons/interaction/CfgVehicles.hpp index 57753dfaff5..e19a8c25024 100644 --- a/addons/interaction/CfgVehicles.hpp +++ b/addons/interaction/CfgVehicles.hpp @@ -715,6 +715,14 @@ class CfgVehicles { }; }; }; + // Don't enable for scripted + class WeaponHolderSimulated_Scripted: WeaponHolderSimulated { + class ACE_Actions: ACE_Actions { + class ACE_MainActions: ACE_MainActions { + delete GVAR(Gear); + }; + }; + }; class ReammoBox; // dropped weapons/gear @@ -733,6 +741,19 @@ class CfgVehicles { }; }; }; + // Don't enable for scripted + class GroundWeaponHolder: WeaponHolder { + class ACE_Actions: ACE_Actions { + class ACE_MainActions; + }; + }; + class GroundWeaponHolder_Scripted: GroundWeaponHolder { + class ACE_Actions: ACE_Actions { + class ACE_MainActions: ACE_MainActions { + delete GVAR(Gear); + }; + }; + }; class Lamps_base_F; class Land_PortableLight_single_F: Lamps_base_F { From 5d49a57bd1575094c3e36643729d2dc31fd2d132 Mon Sep 17 00:00:00 2001 From: amsteadrayle <2516219+amsteadrayle@users.noreply.github.com> Date: Thu, 19 Oct 2023 20:37:58 -0400 Subject: [PATCH 052/287] Medical - Move GUI and Feedback settings to separate category (#9537) * Move medical interface settings to separate category * Add translations from `str_3den_display3den_menubar_interface_text` --------- Co-authored-by: PabstMirror --- addons/medical/stringtable.xml | 16 ++++++++++++++ addons/medical_feedback/initSettings.sqf | 6 ++--- addons/medical_gui/initSettings.sqf | 28 ++++++++++++------------ 3 files changed, 33 insertions(+), 17 deletions(-) diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 5d2b66ae6c7..490ad423eb8 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -18,6 +18,22 @@ ACE Medikal ACE 医療 + + ACE Medical Interface + ACE Медицина Интерфейс + ACE Opcje medyczne Interfejs + Médico ACE Interfaz + ACE-Medicsystem Interface + ACE Zdravotnické Rozhraní + ACE Médico Interface + ACE Médical Interface + ACE Medical Interfaccia + ACE 의료 인터페이스 + ACE 医疗 界面 + ACE 醫療系統 介面 + ACE Medikal Arayüz + ACE 医療 インターフェイス + Unconscious Wake Up Chance Wahrscheinlichkeit um aufzuwachen diff --git a/addons/medical_feedback/initSettings.sqf b/addons/medical_feedback/initSettings.sqf index 997a5f061b7..1268335b21e 100644 --- a/addons/medical_feedback/initSettings.sqf +++ b/addons/medical_feedback/initSettings.sqf @@ -2,7 +2,7 @@ QGVAR(painEffectType), "LIST", [LSTRING(PainEffectType_DisplayName), LSTRING(PainEffectType_Description)], - [ELSTRING(medical,Category), LSTRING(SubCategory)], + [ELSTRING(medical,Interface_Category), LSTRING(SubCategory)], [ [FX_PAIN_WHITE_FLASH, FX_PAIN_PULSATING_BLUR, FX_PAIN_CHROMATIC_ABERRATION, FX_PAIN_ONLY_BASE], [LSTRING(painEffectType_whiteFlashing), LSTRING(painEffectType_pulsingBlur), LSTRING(painEffectType_chromAberration), LSTRING(painEffectType_onlyBase)], @@ -23,7 +23,7 @@ QGVAR(bloodVolumeEffectType), "LIST", [LSTRING(BloodVolumeEffectType_DisplayName), LSTRING(BloodVolumeEffectType_Description)], - [ELSTRING(medical,Category), LSTRING(SubCategory)], + [ELSTRING(medical,Interface_Category), LSTRING(SubCategory)], [ [FX_BLOODVOLUME_COLOR_CORRECTION, FX_BLOODVOLUME_ICON, FX_BLOODVOLUME_BOTH], [LSTRING(BloodVolumeEffectType_colorCorrection), LSTRING(BloodVolumeEffectType_icon), LSTRING(BloodVolumeEffectType_both)], @@ -44,7 +44,7 @@ QGVAR(enableHUDIndicators), "CHECKBOX", [LSTRING(EnableHUDIndicators_DisplayName), LSTRING(EnableHUDIndicators_Description)], - [ELSTRING(medical,Category), LSTRING(SubCategory)], + [ELSTRING(medical,Interface_Category), LSTRING(SubCategory)], true, false, { diff --git a/addons/medical_gui/initSettings.sqf b/addons/medical_gui/initSettings.sqf index 5c9024fea59..a0418ca74e5 100644 --- a/addons/medical_gui/initSettings.sqf +++ b/addons/medical_gui/initSettings.sqf @@ -2,7 +2,7 @@ QGVAR(enableActions), "LIST", [LSTRING(EnableActions_DisplayName), LSTRING(EnableActions_Description)], - [ELSTRING(medical,Category), LSTRING(SubCategory)], + [ELSTRING(medical,Interface_Category), LSTRING(SubCategory)], [[0, 1, 2], [LSTRING(Selections3D), LSTRING(Radial), ELSTRING(common,Disabled)], 0], false ] call CBA_fnc_addSetting; @@ -11,7 +11,7 @@ QGVAR(enableSelfActions), "CHECKBOX", [LSTRING(EnableSelfActions_DisplayName), LSTRING(EnableSelfActions_Description)], - [ELSTRING(medical,Category), LSTRING(SubCategory)], + [ELSTRING(medical,Interface_Category), LSTRING(SubCategory)], true, false ] call CBA_fnc_addSetting; @@ -20,7 +20,7 @@ QGVAR(enableMedicalMenu), "LIST", [LSTRING(EnableMedicalMenu_DisplayName), LSTRING(EnableMedicalMenu_Description)], - [ELSTRING(medical,Category), LSTRING(SubCategory)], + [ELSTRING(medical,Interface_Category), LSTRING(SubCategory)], [[0, 1, 2], [ELSTRING(common,Disabled), ELSTRING(common,Enabled), ELSTRING(common,VehiclesOnly)], 1], false ] call CBA_fnc_addSetting; @@ -29,7 +29,7 @@ QGVAR(openAfterTreatment), "CHECKBOX", [LSTRING(OpenAfterTreatment_DisplayName), LSTRING(OpenAfterTreatment_Description)], - [ELSTRING(medical,Category), LSTRING(SubCategory)], + [ELSTRING(medical,Interface_Category), LSTRING(SubCategory)], true, false ] call CBA_fnc_addSetting; @@ -38,7 +38,7 @@ QGVAR(maxDistance), "SLIDER", [LSTRING(MaxDistance_DisplayName), LSTRING(MaxDistance_Description)], - [ELSTRING(medical,Category), LSTRING(SubCategory)], + [ELSTRING(medical,Interface_Category), LSTRING(SubCategory)], [0, 10, 3, 1], true ] call CBA_fnc_addSetting; @@ -47,7 +47,7 @@ QGVAR(interactionMenuShowTriage), "LIST", [LSTRING(InteractionMenuShowTriage_DisplayName), LSTRING(InteractionMenuShowTriage_Description)], - [ELSTRING(medical,Category), LSTRING(SubCategory)], + [ELSTRING(medical,Interface_Category), LSTRING(SubCategory)], [[0, 1, 2], [ELSTRING(common,Disabled), ELSTRING(Medical_Treatment,Anyone), ELSTRING(Medical_Treatment,Medics)], 1], false ] call CBA_fnc_addSetting; @@ -86,7 +86,7 @@ private _damageColors = [ [0.00, 0.00, 1.00, 1] ]; -private _categoryColors = [ELSTRING(medical,Category), format ["| %1 |", LELSTRING(common,subcategory_colors)]]; +private _categoryColors = [ELSTRING(medical,Interface_Category), format ["| %1 |", LELSTRING(common,subcategory_colors)]]; { [ format ["%1_%2", QGVAR(bloodLossColor), _forEachIndex], @@ -113,7 +113,7 @@ private _categoryColors = [ELSTRING(medical,Category), format ["| %1 |", LELSTRI QGVAR(showDamageEntry), "CHECKBOX", [LSTRING(showDamageEntry_DisplayName), LSTRING(showDamageEntry_Description)], - [ELSTRING(medical,Category), LSTRING(SubCategory)], + [ELSTRING(medical,Interface_Category), LSTRING(SubCategory)], false, true ] call CBA_fnc_addSetting; @@ -122,7 +122,7 @@ private _categoryColors = [ELSTRING(medical,Category), format ["| %1 |", LELSTRI QGVAR(showBloodlossEntry), "CHECKBOX", [LSTRING(ShowBloodlossEntry_DisplayName), LSTRING(ShowBloodlossEntry_Description)], - [ELSTRING(medical,Category), LSTRING(SubCategory)], + [ELSTRING(medical,Interface_Category), LSTRING(SubCategory)], true, true // isGlobal ] call CBA_fnc_addSetting; @@ -131,7 +131,7 @@ private _categoryColors = [ELSTRING(medical,Category), format ["| %1 |", LELSTRI QGVAR(bodyPartOutlineColor), "COLOR", [LSTRING(bodyPartOutlineColor_DisplayName), LSTRING(bodyPartOutlineColor_Description)], - [ELSTRING(medical,Category), LSTRING(SubCategory)], + [ELSTRING(medical,Interface_Category), LSTRING(SubCategory)], [1.00, 1.00, 1.00, 1], false ] call CBA_fnc_addSetting; @@ -140,7 +140,7 @@ private _categoryColors = [ELSTRING(medical,Category), format ["| %1 |", LELSTRI QGVAR(peekMedicalInfoReleaseDelay), "TIME", [LSTRING(PeekMedicalInfoReleaseDelay_DisplayName), LSTRING(PeekMedicalInfoReleaseDelay_Description)], - [ELSTRING(medical,Category), LSTRING(SubCategory)], + [ELSTRING(medical,Interface_Category), LSTRING(SubCategory)], [0, 5, 1], false ] call CBA_fnc_addSetting; @@ -149,7 +149,7 @@ private _categoryColors = [ELSTRING(medical,Category), format ["| %1 |", LELSTRI QGVAR(peekMedicalOnHit), "CHECKBOX", [LSTRING(PeekMedicalOnHit_DisplayName), LSTRING(PeekMedicalOnHit_Description)], - [ELSTRING(medical,Category), LSTRING(SubCategory)], + [ELSTRING(medical,Interface_Category), LSTRING(SubCategory)], false, false // isGlobal ] call CBA_fnc_addSetting; @@ -158,7 +158,7 @@ private _categoryColors = [ELSTRING(medical,Category), format ["| %1 |", LELSTRI QGVAR(peekMedicalOnHitDuration), "TIME", [LSTRING(PeekMedicalOnHitDuration_DisplayName), LSTRING(PeekMedicalOnHitDuration_Description)], - [ELSTRING(medical,Category), LSTRING(SubCategory)], + [ELSTRING(medical,Interface_Category), LSTRING(SubCategory)], [0, 5, 1], false ] call CBA_fnc_addSetting; @@ -167,7 +167,7 @@ private _categoryColors = [ELSTRING(medical,Category), format ["| %1 |", LELSTRI QGVAR(tourniquetWarning), "CHECKBOX", [LSTRING(TourniquetWarning_DisplayName), LSTRING(TourniquetWarning_Description)], - [ELSTRING(medical,Category), LSTRING(SubCategory)], + [ELSTRING(medical,Interface_Category), LSTRING(SubCategory)], false, false ] call CBA_fnc_addSetting; From 80703ce760753d3c65cc53774d262565f6b08be6 Mon Sep 17 00:00:00 2001 From: Grim <69561145+LinkIsGrim@users.noreply.github.com> Date: Thu, 19 Oct 2023 21:23:40 -0400 Subject: [PATCH 053/287] Arsenal - Fix editor attribute search (#9544) fix 3den attribute search --- addons/arsenal/functions/fnc_attributeAddItems.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/arsenal/functions/fnc_attributeAddItems.sqf b/addons/arsenal/functions/fnc_attributeAddItems.sqf index 385ffccc864..3e6a842c6ad 100644 --- a/addons/arsenal/functions/fnc_attributeAddItems.sqf +++ b/addons/arsenal/functions/fnc_attributeAddItems.sqf @@ -28,7 +28,7 @@ _attributeValue params ["_attributeItems", "_attributeMode"]; TRACE_3("Populating list",_category,_filter,_attributeValue); if (_filter != "") then { _filter = _filter call EFUNC(common,escapeRegex); - _filter = ".*?" + (_filter splitString " " joinString ".*?" + ".*?/io"); + _filter = ".*?" + (_filter splitString " " joinString ".*?") + ".*?/io"; } else { _filter = ".*?/io"; }; From 642ca3c14dd1f109423ae17ef63b4445a75b2cca Mon Sep 17 00:00:00 2001 From: Grim <69561145+LinkIsGrim@users.noreply.github.com> Date: Thu, 19 Oct 2023 22:40:48 -0400 Subject: [PATCH 054/287] Medical - Make dug graves respect terrain slope (#9545) * slope dug graves * remove parentheses --- addons/medical_treatment/functions/fnc_placeInBodyBagOrGrave.sqf | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/medical_treatment/functions/fnc_placeInBodyBagOrGrave.sqf b/addons/medical_treatment/functions/fnc_placeInBodyBagOrGrave.sqf index f1900108c65..1152268af33 100644 --- a/addons/medical_treatment/functions/fnc_placeInBodyBagOrGrave.sqf +++ b/addons/medical_treatment/functions/fnc_placeInBodyBagOrGrave.sqf @@ -63,6 +63,7 @@ if (_restingPlaceClass != "") then { _restingPlace = createVehicle [_restingPlaceClass, [0, 0, 0], [], 0, "NONE"]; _restingPlace setPosASL _position; _restingPlace setDir _direction; + _restingPlace setVectorUp surfaceNormal _position; }; From 4eca92c317722b7e9b2833279f8b89abc4802056 Mon Sep 17 00:00:00 2001 From: Jo David Date: Fri, 20 Oct 2023 19:22:26 +0200 Subject: [PATCH 055/287] Documentation - Update jquery, remove polyfills, don't use foundation js (#9519) * update jquery, remove polyfills, don't use foundation js * fix BOM ? * Update workflow to only check `addons` --------- --- .github/workflows/arma.yml | 2 + docs/_includes/_navigation.html | 12 +- docs/css/app.css | 2 +- docs/js/footer.dev.js | 3324 +----------- docs/js/footer.min.js | 2 +- docs/js/footer.min.js.map | 2 +- docs/src/Gruntfile.js | 7 +- docs/src/js/app.js | 11 +- .../js/vendor/foundation/foundation.abide.js | 340 -- .../vendor/foundation/foundation.accordion.js | 67 - .../js/vendor/foundation/foundation.alert.js | 43 - .../vendor/foundation/foundation.clearing.js | 556 -- .../vendor/foundation/foundation.dropdown.js | 448 -- .../vendor/foundation/foundation.equalizer.js | 77 - .../foundation/foundation.interchange.js | 354 -- .../vendor/foundation/foundation.joyride.js | 932 ---- docs/src/js/vendor/foundation/foundation.js | 703 --- .../vendor/foundation/foundation.magellan.js | 203 - .../vendor/foundation/foundation.offcanvas.js | 152 - .../js/vendor/foundation/foundation.orbit.js | 476 -- .../js/vendor/foundation/foundation.reveal.js | 471 -- .../js/vendor/foundation/foundation.slider.js | 263 - .../js/vendor/foundation/foundation.tab.js | 237 - .../vendor/foundation/foundation.tooltip.js | 307 -- .../js/vendor/foundation/foundation.topbar.js | 452 -- docs/src/js/vendor/jquery/jquery-3.7.1.min.js | 2 + .../modernizr/modernizr.custom.18747.js | 4 - docs/src/js/vendor/picturefill/picturefill.js | 1588 ------ docs/src/package.json | 4 + docs/src/pnpm-lock.yaml | 4590 ----------------- 30 files changed, 42 insertions(+), 15589 deletions(-) delete mode 100644 docs/src/js/vendor/foundation/foundation.abide.js delete mode 100644 docs/src/js/vendor/foundation/foundation.accordion.js delete mode 100644 docs/src/js/vendor/foundation/foundation.alert.js delete mode 100644 docs/src/js/vendor/foundation/foundation.clearing.js delete mode 100644 docs/src/js/vendor/foundation/foundation.dropdown.js delete mode 100644 docs/src/js/vendor/foundation/foundation.equalizer.js delete mode 100644 docs/src/js/vendor/foundation/foundation.interchange.js delete mode 100644 docs/src/js/vendor/foundation/foundation.joyride.js delete mode 100644 docs/src/js/vendor/foundation/foundation.js delete mode 100644 docs/src/js/vendor/foundation/foundation.magellan.js delete mode 100644 docs/src/js/vendor/foundation/foundation.offcanvas.js delete mode 100644 docs/src/js/vendor/foundation/foundation.orbit.js delete mode 100644 docs/src/js/vendor/foundation/foundation.reveal.js delete mode 100644 docs/src/js/vendor/foundation/foundation.slider.js delete mode 100644 docs/src/js/vendor/foundation/foundation.tab.js delete mode 100644 docs/src/js/vendor/foundation/foundation.tooltip.js delete mode 100644 docs/src/js/vendor/foundation/foundation.topbar.js create mode 100644 docs/src/js/vendor/jquery/jquery-3.7.1.min.js delete mode 100644 docs/src/js/vendor/modernizr/modernizr.custom.18747.js delete mode 100644 docs/src/js/vendor/picturefill/picturefill.js delete mode 100644 docs/src/pnpm-lock.yaml diff --git a/.github/workflows/arma.yml b/.github/workflows/arma.yml index 669873d5040..2c45ec422ac 100644 --- a/.github/workflows/arma.yml +++ b/.github/workflows/arma.yml @@ -22,6 +22,8 @@ jobs: run: python3 tools/check_strings.py - name: Check for BOM uses: arma-actions/bom-check@master + with: + path: 'addons' - name: Validate function headers run: python3 docs/tools/document_functions.py --debug diff --git a/docs/_includes/_navigation.html b/docs/_includes/_navigation.html index 82b05085180..e929b8d438e 100644 --- a/docs/_includes/_navigation.html +++ b/docs/_includes/_navigation.html @@ -1,9 +1,17 @@