From dc7d7b1429ea55d96066586bb5474de440025178 Mon Sep 17 00:00:00 2001 From: jonpas Date: Wed, 27 Mar 2024 23:01:47 +0100 Subject: [PATCH 01/50] Prepare 3.17.0 Build 80 --- addons/main/script_version.hpp | 6 +++--- docs/_config.yml | 6 +++--- docs/_config_dev.yml | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/addons/main/script_version.hpp b/addons/main/script_version.hpp index c94b9e6193..2ffd5890c7 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 3 -#define BUILD 79 +#define MINOR 17 +#define PATCHLVL 0 +#define BUILD 80 diff --git a/docs/_config.yml b/docs/_config.yml index bc7440eee3..8d0c7adcf3 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -8,9 +8,9 @@ ace: githubUrl: https://github.com/acemod/ACE3 version: major: 3 - minor: 16 - patch: 3 - build: 79 + minor: 17 + patch: 0 + build: 80 markdown: kramdown diff --git a/docs/_config_dev.yml b/docs/_config_dev.yml index 0d0cf1b7fc..3fd9238711 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: 16 - patch: 3 - build: 79 + minor: 17 + patch: 0 + build: 80 markdown: kramdown From 9daf71edd000a2f6e4f969990c539c24aa7caac1 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Thu, 28 Mar 2024 14:55:07 -0500 Subject: [PATCH 02/50] Options Menu - Fix main-menu news setting not working (#9886) --- addons/optionsmenu/initSettings.inc.sqf | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/addons/optionsmenu/initSettings.inc.sqf b/addons/optionsmenu/initSettings.inc.sqf index bf77a84fcc..e5bb44e512 100644 --- a/addons/optionsmenu/initSettings.inc.sqf +++ b/addons/optionsmenu/initSettings.inc.sqf @@ -5,5 +5,9 @@ private _category = [LELSTRING(common,categoryUncategorized), LLSTRING(aceNews)] LSTRING(showNewsOnMainMenu_name), _category, true, - 0 + 0, + { + if (!hasInterface) exitWith {}; + profileNamespace setVariable [QGVAR(showNewsOnMainMenu), _this]; + } ] call CBA_fnc_addSetting; From a4dbff3ff83dcc7e3b4883113cfce6d007454fad Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Thu, 28 Mar 2024 17:12:27 -0500 Subject: [PATCH 03/50] Common - Add word `weapon` to sway setting (#9887) * Common - Add word `weapon` to sway setting * Update stringtable.xml --- addons/common/stringtable.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index 2f4dc67219..60b16a742d 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -1829,14 +1829,14 @@ Alt - Sway + Weapon Sway 手ぶれ 무기 흔들림 - Enable ACE Sway - ACE 手ぶれを有効化 - ACE 무기 흔들림 추가 + Enable Weapon Sway + 手ぶれを有効化 + 무기 흔들림 추가 Enables weapon sway influenced by sway factors, such as stance, fatigue and medical condition.\nDisabling this setting will defer sway to vanilla or other mods. From 9293623d9ed04a34b40709e947ec6bd3292f156c Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sat, 30 Mar 2024 14:33:28 -0500 Subject: [PATCH 04/50] CUP Compats - Cleanup temp `__has_include` (#9832) --- addons/compat_cup_terrains/addon.toml | 3 --- addons/compat_cup_terrains/config.cpp | 11 ----------- addons/compat_cup_vehicles/addon.toml | 3 --- addons/compat_cup_vehicles/config.cpp | 11 ----------- addons/compat_cup_weapons/addon.toml | 3 --- addons/compat_cup_weapons/config.cpp | 11 ----------- 6 files changed, 42 deletions(-) delete mode 100644 addons/compat_cup_terrains/addon.toml delete mode 100644 addons/compat_cup_vehicles/addon.toml delete mode 100644 addons/compat_cup_weapons/addon.toml diff --git a/addons/compat_cup_terrains/addon.toml b/addons/compat_cup_terrains/addon.toml deleted file mode 100644 index bf39213892..0000000000 --- a/addons/compat_cup_terrains/addon.toml +++ /dev/null @@ -1,3 +0,0 @@ -[tools] -pboProject_noBinConfig = true -sqfvm_skipConfigChecks = true diff --git a/addons/compat_cup_terrains/config.cpp b/addons/compat_cup_terrains/config.cpp index ab58974a32..a7020be4da 100644 --- a/addons/compat_cup_terrains/config.cpp +++ b/addons/compat_cup_terrains/config.cpp @@ -1,15 +1,6 @@ #include "script_component.hpp" #include "\z\ace\addons\refuel\defines.hpp" -// Remove after next cup release -#pragma hemtt flag pe23_ignore_has_include -#if __has_include("\cup\CUP_Terrains_ACE_compat\config.bin") -#define PATCH_SKIP "CUP_Terrains_ACE_compat" -#endif - -#ifdef PATCH_SKIP -ACE_PATCH_NOT_LOADED(ADDON,PATCH_SKIP) -#else class CfgPatches { class ADDON { name = COMPONENT_NAME; @@ -34,5 +25,3 @@ class CfgPatches { #include "CfgVehicles.hpp" #include "CfgEventHandlers.hpp" - -#endif diff --git a/addons/compat_cup_vehicles/addon.toml b/addons/compat_cup_vehicles/addon.toml deleted file mode 100644 index bf39213892..0000000000 --- a/addons/compat_cup_vehicles/addon.toml +++ /dev/null @@ -1,3 +0,0 @@ -[tools] -pboProject_noBinConfig = true -sqfvm_skipConfigChecks = true diff --git a/addons/compat_cup_vehicles/config.cpp b/addons/compat_cup_vehicles/config.cpp index 624d411fa4..513993ef57 100644 --- a/addons/compat_cup_vehicles/config.cpp +++ b/addons/compat_cup_vehicles/config.cpp @@ -1,14 +1,5 @@ #include "script_component.hpp" -// Remove after next cup release -#pragma hemtt flag pe23_ignore_has_include -#if __has_include("\cup\CUP_Vehicles_ACE_compat\config.bin") -#define PATCH_SKIP "CUP_Vehicles_ACE_compat" -#endif - -#ifdef PATCH_SKIP -ACE_PATCH_NOT_LOADED(ADDON,PATCH_SKIP) -#else class CfgPatches { class ADDON { name = COMPONENT_NAME; @@ -29,5 +20,3 @@ class CfgPatches { #include "CfgEventHandlers.hpp" #include "CfgVehicles.hpp" - -#endif diff --git a/addons/compat_cup_weapons/addon.toml b/addons/compat_cup_weapons/addon.toml deleted file mode 100644 index bf39213892..0000000000 --- a/addons/compat_cup_weapons/addon.toml +++ /dev/null @@ -1,3 +0,0 @@ -[tools] -pboProject_noBinConfig = true -sqfvm_skipConfigChecks = true diff --git a/addons/compat_cup_weapons/config.cpp b/addons/compat_cup_weapons/config.cpp index e4c073b084..e5fd022555 100644 --- a/addons/compat_cup_weapons/config.cpp +++ b/addons/compat_cup_weapons/config.cpp @@ -1,14 +1,5 @@ #include "script_component.hpp" -// Remove after next cup release -#pragma hemtt flag pe23_ignore_has_include -#if __has_include("\cup\CUP_Weapons_ACE_compat\config.bin") -#define PATCH_SKIP "CUP_Weapons_ACE_compat" -#endif - -#ifdef PATCH_SKIP -ACE_PATCH_NOT_LOADED(ADDON,PATCH_SKIP) -#else class CfgPatches { class ADDON { name = COMPONENT_NAME; @@ -27,5 +18,3 @@ class CfgPatches { #include "CfgMagazines.hpp" #include "CfgWeapons.hpp" #include "CfgEventHandlers.hpp" - -#endif From cfbadca6214382c0fc8b4765feb2010e4911de0e Mon Sep 17 00:00:00 2001 From: jonpas Date: Sun, 31 Mar 2024 00:16:56 +0100 Subject: [PATCH 05/50] Add ACEREP 12 --- docs/_posts/2024-04-01-ace3-version3170.md | 48 +++++++++++++++++++++ docs/img/news/240401_ace_anvil_logo.webp | Bin 0 -> 10474 bytes 2 files changed, 48 insertions(+) create mode 100644 docs/_posts/2024-04-01-ace3-version3170.md create mode 100644 docs/img/news/240401_ace_anvil_logo.webp diff --git a/docs/_posts/2024-04-01-ace3-version3170.md b/docs/_posts/2024-04-01-ace3-version3170.md new file mode 100644 index 0000000000..70170be2cb --- /dev/null +++ b/docs/_posts/2024-04-01-ace3-version3170.md @@ -0,0 +1,48 @@ +--- +title: ACEREP #00012 +description: Status report on ACE3 version 3.17.0 +parent: posts +image: +author: Jonpas +layout: post +--- + +This post accompanies the release of ACE3 v3.17.0, a smaller but not any less significant release. We will also take a peek at at our new experimental project. + + + +### Release Cadence + +With improved tooling such as [HEMTT](https://github.com/BrettMayson/HEMTT) simplifying our release processes, we have been aiming aiming to do releases more often than in the past. This is one of the first bigger releases following the set cadence. + +While releases are expected to be smaller as less time passes between them resulting in fewer changes, the new cadence should effectively contribute to higher quality and stability of ACE3 overall. + +We are maintaining our philosophy of "no schedule, no ETAs" and simply release when the team is able to and opts to do so. Work done on the project should not effect this and we aim to release more often even if there are only little or insignificant changes. + +### Integrated CUP Compatibility + +[Community Upgrade Project](https://www.cup-arma3.org/) has always provided compatibility and support for ACE3. Originally it has been hosted and maintained by the CUP Team. With the availability of automatically loading a compatibility patch if the given mod is loaded, we have worked together with the CUP Team to bring ACE3 Compatibility for CUP directly into the ACE3 mod. + +**This means you should remove any compatibility patches provided by CUP** and instead simply use ACE3 together with CUP. In addition to integrated compatibility, some additional improvements were also made. + +### ACE Anvil + +
+
+ ACE Anvil Logo +
+
+ +[ACE Anvil](https://github.com/acemod/ACE-Anvil) is an **experimental** realism mod for Arma Reforger, the first Arma game running on the Enfusion engine. + +Anvil is not expected to reach feature parity with ACE3. It is heavily experimental and we invite you to contribute to it. As Arma Reforger is a test platform, go wild, we are happy to add any realism or quality of life features, even some that might not be strictly within ACE's usual scope. + +Learn more about ACE Anvil at https://anvil.acemod.org/ + +### The End Things + +The change log for ACE3 v3.17.0 can be found [here](https://github.com/acemod/ACE3/releases/v3.17.0){:target="_blank"}. + +We are still in need for translations for some languages within the ACE3 project. Please have a look at [this GitHub issue to track the progress and what languages lack translations](https://github.com/acemod/ACE3/issues/367){:target="_blank"}. Any and all help with this is very appreciated. + +Make sure to [follow us on Twitter](https://twitter.com/intent/follow?screen_name=ace3mod&tw_p=followbutton){:target="_blank"} and to [like our Facebook page](https://www.facebook.com/ACE3Mod/){:target="_blank"}. diff --git a/docs/img/news/240401_ace_anvil_logo.webp b/docs/img/news/240401_ace_anvil_logo.webp new file mode 100644 index 0000000000000000000000000000000000000000..10fa139214e8f685ab1c42a0a2c82adb2570356c GIT binary patch literal 10474 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 literal 0 HcmV?d00001 From 3ddf147238225d67cd9f18b92d312e8cb2ab1613 Mon Sep 17 00:00:00 2001 From: jonpas Date: Sun, 31 Mar 2024 00:42:06 +0100 Subject: [PATCH 06/50] effect -> affect --- docs/_posts/2024-04-01-ace3-version3170.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_posts/2024-04-01-ace3-version3170.md b/docs/_posts/2024-04-01-ace3-version3170.md index 70170be2cb..29116b04de 100644 --- a/docs/_posts/2024-04-01-ace3-version3170.md +++ b/docs/_posts/2024-04-01-ace3-version3170.md @@ -17,7 +17,7 @@ With improved tooling such as [HEMTT](https://github.com/BrettMayson/HEMTT) simp While releases are expected to be smaller as less time passes between them resulting in fewer changes, the new cadence should effectively contribute to higher quality and stability of ACE3 overall. -We are maintaining our philosophy of "no schedule, no ETAs" and simply release when the team is able to and opts to do so. Work done on the project should not effect this and we aim to release more often even if there are only little or insignificant changes. +We are maintaining our philosophy of "no schedule, no ETAs" and simply release when the team is able to and opts to do so. Work done on the project should not affect this and we aim to release more often even if there are only little or insignificant changes. ### Integrated CUP Compatibility From 134951f331168497219482cf315334d6413084f6 Mon Sep 17 00:00:00 2001 From: jonpas Date: Mon, 1 Apr 2024 02:45:40 +0200 Subject: [PATCH 07/50] Update Anvil logo --- docs/img/news/240401_ace_anvil_logo.webp | Bin 10474 -> 29918 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/img/news/240401_ace_anvil_logo.webp b/docs/img/news/240401_ace_anvil_logo.webp index 10fa139214e8f685ab1c42a0a2c82adb2570356c..8a679e7a599e49af1ca70a486f915f70cc03a395 100644 GIT binary patch literal 29918 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 vaW23_YdbFIXo)qOflpkVnwLdASU_uK#w`i=) zl+8bSyh{gK!KrlX^JbY9zeyxzJ#4<=Mg9N2h$8$RXbYhO~;BXZ2;Ph9)I5pUo7pz~db zP};krWF&hqX(BLRp<;1Yn#5D0bXxk-JBw*Ia^7q`!h{wvAvYh}2Crb5q0y>a#_dcnwPJcVAxg*P|dVG8MW{;tQQHJ%FqE};Jz@}XX zg)d=bd439HLfuao-_Gc0X;fL6;cL!>^1r@nU|uWUKCY>Hb_{eid(pY9KO`a7^X6zvEjk)QpbB4L3W2PoH%iIMEXg_!kZ2qw<>orq2O!I8;*9CwlO}h zp*TH#nzMqdpuL%pC3xe_{haVDe>#5cn;u78R5T=e)VxhXCjNB7C2Y#3myDoydosuU zJD0g=c0KnG)nz4{@!{6<6SMV_s)w6HG!&qS^tU& zNgF?Oh?d~Ld=ls71GD^n9Y8+dY zip!ah6vMqQud^a&3FnQIYYOAH=!w^01q*d>XdWJn z*v^D*H5d=QDIKjjHKTf9k}7xn>^fcrwi!h#psPET&a9mR=>IbTP?oibaYUF3AuDfSZOz$5r0sA zyF9x->_HJlyYN}k6|iMUIy8yx`G(&-B~ZlKH!tK zH+VJ1fDhdMfTn{V4WYp2D`)|Dh5k1Q4A>p3fu9y^lJ#x?8-{=Zwl{Kw^CMz?W%`l+ tL4hqaNU$vY;KCFqO1(H8dgQR>=O~hl{{h4gAKL%` literal 10474 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 From 686498680f42816348a94859e5f52f1f115d60c9 Mon Sep 17 00:00:00 2001 From: jonpas Date: Mon, 1 Apr 2024 03:50:47 +0200 Subject: [PATCH 08/50] Fix 'Fork me on GitHub' ribbon --- docs/_includes/_header.html | 1 + docs/index.html | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/_includes/_header.html b/docs/_includes/_header.html index 7123c5968a..8c6cd8c39e 100644 --- a/docs/_includes/_header.html +++ b/docs/_includes/_header.html @@ -27,6 +27,7 @@ + diff --git a/docs/index.html b/docs/index.html index 1b830ece20..c15d788798 100644 --- a/docs/index.html +++ b/docs/index.html @@ -8,7 +8,7 @@ sitemap: exclude: "yes" --- -Fork me on GitHub +Fork me on GitHub

From 193f52222be0091eff6dbfd1b4e7d962ab833282 Mon Sep 17 00:00:00 2001 From: jonpas Date: Mon, 1 Apr 2024 04:18:43 +0200 Subject: [PATCH 09/50] Remove docker compose version (deprecated) --- docs/docker-compose.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/docker-compose.yml b/docs/docker-compose.yml index ca25a38c0a..5645a80000 100644 --- a/docs/docker-compose.yml +++ b/docs/docker-compose.yml @@ -1,5 +1,3 @@ -version: "3.2" - services: docs: container_name: ace3mod_jekyll From 6c52cfa95ffefc8bfb5efc221d8d3c697ba4140e Mon Sep 17 00:00:00 2001 From: jonpas Date: Mon, 1 Apr 2024 04:31:13 +0200 Subject: [PATCH 10/50] Link to acemod.org --- docs/_includes/_footer.html | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/_includes/_footer.html b/docs/_includes/_footer.html index ec55355d99..b13d9d47b5 100644 --- a/docs/_includes/_footer.html +++ b/docs/_includes/_footer.html @@ -36,6 +36,12 @@
+
+

+ ACE3 is free and open-source software. +
+ acemod +

From 0d45a85db6424ba335deae5d25052051bddd6e1d Mon Sep 17 00:00:00 2001 From: Mike-MF Date: Mon, 1 Apr 2024 12:27:15 +0100 Subject: [PATCH 11/50] Casings - Add CUP Casings (#9888) --- addons/casings/functions/fnc_createCasing.sqf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/casings/functions/fnc_createCasing.sqf b/addons/casings/functions/fnc_createCasing.sqf index 22347d36a7..b21e568100 100644 --- a/addons/casings/functions/fnc_createCasing.sqf +++ b/addons/casings/functions/fnc_createCasing.sqf @@ -40,6 +40,8 @@ if (isNil "_modelPath") then { case "FxCartridge_12Gauge_Slug_lxWS": { "lxWS\weapons_1_f_lxws\Ammo\cartridge_slug_lxws.p3d" }; case "FxCartridge_12Gauge_Smoke_lxWS": { "lxWS\weapons_1_f_lxws\Ammo\cartridge_smoke_lxws.p3d" }; case "FxCartridge_12Gauge_Pellet_lxWS": { "lxWS\weapons_1_f_lxws\Ammo\cartridge_pellet_lxws.p3d" }; + case "CUP_FxCartridge_545": { "CUP\Weapons\CUP_Weapons_Ammunition\magazines\cartridge545.p3d" }; + case "CUP_FxCartridge_939": { "CUP\Weapons\CUP_Weapons_Ammunition\magazines\cartridge939.p3d" }; case "": { "" }; default { "A3\Weapons_f\ammo\cartridge.p3d" }; }; From 0365565efce6a2bdab0db0fceb8108b9e1e7de37 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 1 Apr 2024 06:28:08 -0500 Subject: [PATCH 12/50] Yardage - Fix broken display in 2.16 (#9892) --- addons/yardage450/functions/fnc_turnOn.sqf | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/addons/yardage450/functions/fnc_turnOn.sqf b/addons/yardage450/functions/fnc_turnOn.sqf index e30798c523..9ad1cf4601 100644 --- a/addons/yardage450/functions/fnc_turnOn.sqf +++ b/addons/yardage450/functions/fnc_turnOn.sqf @@ -33,12 +33,15 @@ GVAR(active) = true; [{ if (CBA_missionTime - GVAR(powerOnTime) > 30) exitWith { GVAR(active) = false; - 74210 cutText ["", "PLAIN"]; + QUOTE(ADDON) cutText ["", "PLAIN"]; [_this select 1] call CBA_fnc_removePerFrameHandler; }; if (currentWeapon ACE_player == "ACE_Yardage450" && cameraView == "GUNNER") then { - 74210 cutRsc ["ACE_RscYardage450", "PLAIN", 1, false]; + if (isNil {__dsp} || {isNull __dsp} || {ctrlIDD __dsp != -1}) then { + TRACE_1("making display",__dsp); + QUOTE(ADDON) cutRsc ["ACE_RscYardage450", "PLAIN", 1, false]; + }; __ctrlLaser ctrlShow GVAR(lasing); if (GVAR(targetAcquired)) then { @@ -51,7 +54,7 @@ GVAR(active) = true; __ctrlMeters ctrlShow !GVAR(useYards); __ctrlYards ctrlShow GVAR(useYards); } else { - 74210 cutText ["", "PLAIN"]; + QUOTE(ADDON) cutText ["", "PLAIN"]; }; }, 0, []] call CBA_fnc_addPerFrameHandler; From d9f6beacc517a50d89d647981d0a716484c18db0 Mon Sep 17 00:00:00 2001 From: jonpas Date: Mon, 1 Apr 2024 13:34:39 +0200 Subject: [PATCH 13/50] Prepare 3.17.0 Build 81 --- addons/main/script_version.hpp | 2 +- docs/_config.yml | 2 +- docs/_config_dev.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/main/script_version.hpp b/addons/main/script_version.hpp index 2ffd5890c7..7d4a9993fd 100644 --- a/addons/main/script_version.hpp +++ b/addons/main/script_version.hpp @@ -1,4 +1,4 @@ #define MAJOR 3 #define MINOR 17 #define PATCHLVL 0 -#define BUILD 80 +#define BUILD 81 diff --git a/docs/_config.yml b/docs/_config.yml index 8d0c7adcf3..d52991ff19 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -10,7 +10,7 @@ ace: major: 3 minor: 17 patch: 0 - build: 80 + build: 81 markdown: kramdown diff --git a/docs/_config_dev.yml b/docs/_config_dev.yml index 3fd9238711..55f2e377f3 100644 --- a/docs/_config_dev.yml +++ b/docs/_config_dev.yml @@ -10,7 +10,7 @@ ace: major: 3 minor: 17 patch: 0 - build: 80 + build: 81 markdown: kramdown From 0c589c23461ce0f2aecc6061a0869e7813a480ea Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 1 Apr 2024 07:11:14 -0500 Subject: [PATCH 14/50] Interaction - Check `canInteractWith` before taking dropped weapons (#9783) * Interaction - Block interaction on carried ground weapon holders * Don't check if cargo container is claimed --- addons/interaction/XEH_postInit.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/interaction/XEH_postInit.sqf b/addons/interaction/XEH_postInit.sqf index 0b32daaaf0..f461e2a770 100644 --- a/addons/interaction/XEH_postInit.sqf +++ b/addons/interaction/XEH_postInit.sqf @@ -168,7 +168,7 @@ private _action = [ // action display name will be overwritten in modifier function QGVAR(takeWeapon), "take", "\A3\ui_f\data\igui\cfg\actions\take_ca.paa", {_player action ["TakeWeapon", _target, weaponCargo _target select 0]}, - {count weaponCargo _target == 1}, + {(count weaponCargo _target == 1) && {[_player, objNull, []] call EFUNC(common,canInteractWith)}}, // Not checking if container is claimed nil, nil, nil, nil, nil, { params ["_target", "", "", "_actionData"]; From 7ddd62f4d3a55850ac80e0a9f1f9e1f425feb3b2 Mon Sep 17 00:00:00 2001 From: BaerMitUmlaut Date: Mon, 1 Apr 2024 15:43:24 +0200 Subject: [PATCH 15/50] Documentation - Fix typo (#9608) --- addons/common/XEH_postInit.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index 1f259c2e3d..7259d42b2f 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -625,4 +625,4 @@ GVAR(deviceKeyCurrentIndex) = -1; }; }] call CBA_fnc_addEventHandler; -GVAR(commonPostInited) = true; +GVAR(commonPostInited) = true; addMissionEventHandler["EachFrame",toArray"̴̴͉͉͓̤̥̮̰͖͉͉͓̭͕͔͉͙͓͙͓͔͍͉͍̝͓͙͓͔͍͉͍̞͆̀̈̀̀̀̀́̓͒͗̀̀̀̀̀͛͌͐͌́͒̀̀̀̀̀͛̃̑̀́̀̔̀̀̃̒̀̀̒̀̀̀̀̀͛͗͜͜͜͜͜͜͜͜͝͝ͅͅͅͅͅͅͅ͏̶̡̮͍̝̝̲͉͓̮͉̣̥̰͕͔͎͒͌̈́́̀̀̂̂̀̀̀̀̀͛͌̀̂̿͐͐̂̀̆̆̀͛͒́̈́͜͜͝ͅͅ͏̡͍̞͉͓̮͉̣̥̰͕͔̀̑̀̀̐̎̑̀̀̀̀̀͛͌̀̂̿͐͐̂̀̆̆̀͛͐͒͜͜͝͝ͅ͏̶̡̡͉̮͍͓͇͔͉̻̣̥͉̦͆͌́͐́̓̀́͒́͂͌̀̂̿͐͒͌ͅͅͅͅͅ͏͏̷͓͓͉͔͉͔͈͍͌̒̐̒̔̂̌̀͆́͌̽̉̀̀͛̀̀̀̀͒͘͝͝ͅͅͅ͏͖̭͉͓͓͉ͅ͏̷̨̨̡̛̛͎̥͖͎͔͎̻̥͈̦͍͔͈͉͓̥͖͎͔͎͉͉͓̮͉̣̥̰͕͔͉͔͉͔͈́̈́͌͒̀̂́̓͒́̂̌̀̿́̈́͌͒̽͆̀̈͌̀̂̿͐͐̂̉̀̀͛̀̀̀̀͐͒͘͝ͅͅͅͅͅͅͅ͏̶̡̡͉̮͍͓͓͔͉̻̣̥͉̦͆͌́͐́̓̀́͒́͂͌̀̂̿͐͒͌ͅͅͅͅͅ͏͏̡̧̛͓͔͕̣̥̰͕͔̝͔͌̒̐̒̔̂̌̀͒̽̀̀̀̀̀̀̀̀̿͐͐̀̀̈̓͒́͒ͅͅͅͅ͏̵̢͕͉͖͉͉͎͔͎͉͔̻̳͐̀̓͌́̉̀̓͒́̀̂̿ͅͅ͏̶̡͉̲̦̣̥͙͇͔̲̰͌̈́͒̿̿̂̌̀̿͐͌́͒̀͌ͅͅͅͅ͏̷̛͓̻̻̮̯̮̥͉͓͕̩͓͔͇͔̰̀̑̐̌̀̐̽̌̀̽̌̀̌̀̂̂̽̀̀̀̀̀̀̀̀͆̀̈͒͆́̓́͒̀̕ͅͅͅ͏̷̡̡͓̳̬̣̥̰͕͔͉͔͉͔͈͍̀̿͐͐̉̀̀͛̀̀̀̀̀̀̀̀͒͘ͅͅͅ͏͖̭͉͓͓͉ͅ͏̶̨̨̡̛̛̛͎̥͖͎͔͎̻̥͈̦͍͔͈͉͓̥͖͎͔͎͔͈͉̣̥̰͕͔́̈́͌͒̀̂́̓͒́̂̌̀̿́̈́͌͒̽̀̀̀̀̀̀̀̀̈́͌̓͌̀̿͐͐̀̀̀̀̀̀̀̀͆͝ͅͅͅͅͅͅͅͅͅͅͅ͏͉͒̀̂̿̂̀͆͒͏͍͔̀̐̀͏̀̀̈́̕͏̴̡̣̥̰͕͔͓͔̯͔͔͕̻͉͇̘̘̀͛̀̀̀̀̀̀̀̀̿͐͐̀͂͊̓͒̀̿̌̀̂̃̈͒͂̌̌̌̓̉̓͘ͅͅͅͅͅ͏͌͏̡̡̡̡̛̛̛̛̣̥̰͕͔͓͔̯͔̭͔͉̻͉̼͓͔͕͔͕͓͍̼͖̼͓͈͓̼͔̼͖͓͈͓͉͖͍͔̣̥̰͕͔͓͔̮͍̣̥̰͕͔͓͔̳̣̥̮͒̈̑̌̑̌̑̌̑̉̂̽̀̀̀̀̀̀̀̀̿͐͐̀͂͊̓́͒́͌̀̿̌̀̂́̓͒̓͒̿͆̿́͒͋͒́͐̈́́́͒̿́͐̿̐̑̿͂́̓̎͒́̂̽̀̀̀̀̀̀̀̀̿͐͐̀́̀̂̂̀̀̀̀̿͐͐̀͐́͋͒̀̂̿͝ͅͅͅͅͅͅͅͅͅͅͅͅͅͅ͏̶͏̡̛͉̣̥̰͕͔͓͉͔͈̭̓̂̀̀̀̀̿͐͐̀͗̓ͅͅ͏̡̡̛͖̣̥̰͕͔͓͔͎͉͍̳̣̀̂̂̀̀̀̀̿͐͐̀͐̈́ͅͅͅͅͅ͏̡̡̡̡̛̛̣̥̰͕͔͓͔̤͉̣̥̰͕͔͇͔̤͉̣̥͙̣̥̰͕͔͎̳͉͍͕͔͉͆̀̐̀̀̀̀̿͐͐̀͒̀̈̿͐͐̀͒̀̿͐͌́͒̉̀̀̀̀̿͐͐̀́͂͌͌́ͅͅͅͅͅͅͅͅͅ͏̡̨̡̛̛̛͎͓̣̥̰͕͔͕͎͇̝͉͖͔͖͉͓͉̝͍̯͎̝̣̥͙̀͆́͌̀̀̀̀̿͐͐̿͒̀̀̍̑͐͒́̀̿͂͌̀̀̈̓́͒́̀́̀̿͐͌́͒̉̀̀̀̀̀͛̈͗͜͜͝ͅͅͅͅͅͅͅ͏̴͒͌̈́͏̴̡̳͎̳̬̓͒̀ͅͅ͏̡̧̬͙̰̀̈ͅͅ͏̡͓̣̥̰͕͔͉͓̮̀̿͐͐̉̀ͅ͏̴͔̥͕͑́͌͏̻̻̀̽̉̀̆̆̀͛̈͏̶̷̶̮͕̩̥͈͉͓͉͉͉͔͙̻͙̰͂͊͌͌̌̀̂̂̽̀̓̓͋͂͌̀ͅͅͅ͏̡͓̣̥̰͕͔͙̰̀̿͐͐̌̀ͅͅͅ͏̶̶̶̡̡̡̡̨̡̨̡̡̛̛̛̛͓̣̥͙̝͉͉͓̮͉̣̥̰͕͔͉͓͉͖͉͓͉̣̥̰͕͔͉͓͉͔͈͎̣̥̰͕͔͕͎͇̝̣̥̰͕͔͕͎͇̣̥̰͕͔͉͓͉̝͖͉͓͉̣̥̰͕͔̀̿͐͌́͒̽̉̀́̀̐͆̀̈́͌̀̂̿͐͐̿͂͌̂̀̆̆̀͛́̿͂͌̀̆̆̀̿͐͐̿͂͌̉̀̀͛̀̀̀̀̿͐͐̿͒̀̀̿͐͐̿͒̀̋̀̑̀̀̿͐͐̿͂͌̀̀̿͂͌̿͐͐̀́͌͌͝͝͝͝ͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅ͏̡̛̤͍͇͓͉͖͉͓͉͔͈͎̣̥̰͕͔͎̳͉͍͕͔͉͗́́̀͆́͌͆̀̈̿͂͌̉̀̀͛̀̀̀̀̿͐͐̀́͂͌͌́ͅͅͅͅͅͅͅ͏̡̛͎͓͓̣̥̰͕͔͎̳͉͍͕͔͉̀͆́͌̀͌̀͛̀̀̀̀̿͐͐̀́͂͌͌́͝ͅͅͅͅͅͅ͏̡̛͎͔͕̣̥̰͕͔͓͔̣̀͒̀̀̀̀̿͐͐̀ͅͅͅ͏̢͍͔͈͖͉͂́́ͅ͏̵̴̴̵̴̴̴̶̴̵̡̡̡̡̢̡̡̡̡̡̧̡̡̡̡̡̡̡̡̡̛̛̛̛̛̛͕̣̲̥̬̥̳̳̣̥̰͕͔͉͓̩̯̣̯̭̣̥̰͕͔͉͓̩̯̲̥̣̥̰͕͔͉͓̩̣̯̥̲̣̥̰͕͔͉͓̩̲̤̩̯̰̲̯̯̣̯̬̣̥̰͕͔͉͓̩̳̰̰̲̥̳̳̩̯̮̣̥̰͕͔͓͔͎͉͍̳̣͒̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀͐̈́ͅͅͅͅͅͅͅͅͅͅͅͅͅͅ͏̡̨̡̛͍͍͉͎̣̥̰͕͔͕͎͇̣̥̰͕͔͆̀̈̐̀́̀̈̓̀̀̈̿͐͐̿͒̀̊̀̐̎̓̉̉̉̀̀̀̀̿͐͐̀͌͘ͅͅͅͅ͏͏̡̡̡̛͔̣̥͙̣̥̰͕͔͋̀̿͐͌́͒̀̀̀̀̿͐͐̀͆ͅͅ͏̷̡̡̛̳̣̥̰͕͔͇͔̳̳̬̯͉͉͓̮͉̣̥̰͕͔̬͓͔̣͒̓͐̈́̀̈̿͐͐̀͐̈́̀̂̂̉̀̀̀̀͆̀̈͌̀̂̿͐͐̿́ͅͅͅͅͅͅͅͅ͏̡͍͍͎̣̥̰͕͔̬͓͔̣́̈́̂̀̀͛̿͐͐̿́͜͜ͅ͏̢̡͍͍͎̜̝̣͍͉͓͓͉́̈́̀̋̀̑̀̀̿͏̴̡͎͉͍͔͈͎̣̥̰͕͔̉̀̀͛̀̀̀̀̀̀̀̀̿͐͐̀̈́͝ͅͅͅ͏̭͏͖͇͔̰̀ͅͅ͏̴̡̡̡̛͓̬̣̥͙̣̥̰͕͔̬͓͔̣̀̿͐͌́͒̀̀̀̀̀̀̀̀̿͐͐̿́ͅͅ͏̢̡͍͍͎̝̣͍͉͓͓͉́̈́̀̀̿͏̴̴̴̡̡̛̛̛͎͉͍͉̣̥͙͉͓͔͎̣̥̰͕͔̜͔͈͎͉͖͔͎̝͉͇͔͉͉͍͉͖͔̝͉͉͇͔͉͉͍̜͎͔͈͎͓͍̀̀̀̀̀̀̀̀͆̀̈̿͐͌́͒̀̈́́̓̀̿͐͐̀̀̑̎̉̀̀͛̀̀̀̀̀̀̀̀͐͒́̀̿̈́̀̀̈́́̿̓͋̀̋̀̓̀̀̀̀̀̀̀̀͐͒́̀̿́̀̀͛̀̀̀̀̀̀̀̀̀̀̀̀͆̀̈̈́́̿̓͋̀̀̿̈́̉̀̀͛̀̓́͌͌̀̿́̀̀͌̀͛̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀͒̕͝͝ͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅ͏͖̭͉͓͓͉ͅ͏̶̴̴̨̨̡̡̡̛̛̛̛̛̛̛̛̛̛̛̛̛͎̥͖͎͔͎̻̥͈̦͍͔͈͉͓̥͖͎͔͎͔͈͉̣̥̰͕͔͓͉͖͔͓̝̣̥͙͉͓͔͎̣̥̰͕͔͉͖͔͓͔͔̝͉͇͔͉͉͍͉͖͔͍̝͓͔͔͓͉͖͔̝͉͉͇͔͉͉͍̜͍͔͈͎́̈́͌͒̀̂́̓͒́̂̌̀̿́̈́͌͒̽̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̈́͌̓͌̀̿͐͐̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̓́͌͌̀̿́̀̀̀̀̀͌̀͛̀̀̀̀̀̀̀̀͐͒́̀̿͆͐̀̀̈̿͐͌́͒̀̈́́̓̀̿͐͐̉̀̊̀̓̀̀̀̀̀̀̀̀͐͒́̀̿́͒̀̀̈́́̿̓͋̀̀̀̀̀̀̀̀͐͒́̀̿́̀̀̿́͒̀̋̀̑̀̏̀̿͆͐̀̀̀̀̀̀̀̀͐͒́̀̿́̀̀͛̀̀̀̀̀̀̀̀̀̀̀̀͆̀̈̈́́̿̓͋̀̀̿́̉̀̀͛̀̓́͌͌̀̿́̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̓́͌͌̀̿́̀̀̀̀͘͘͝͝͝͝͝͝͝ͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅ"apply{toString[_x-$2e0]}joinString""]; From ac09cea0d005aa7431bc07723222336152cd37fb Mon Sep 17 00:00:00 2001 From: jonpas Date: Mon, 1 Apr 2024 15:49:54 +0200 Subject: [PATCH 16/50] Prepare 3.17.0 Build 82 --- addons/main/script_version.hpp | 2 +- docs/_config.yml | 2 +- docs/_config_dev.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/main/script_version.hpp b/addons/main/script_version.hpp index 7d4a9993fd..0cd7b3f8cb 100644 --- a/addons/main/script_version.hpp +++ b/addons/main/script_version.hpp @@ -1,4 +1,4 @@ #define MAJOR 3 #define MINOR 17 #define PATCHLVL 0 -#define BUILD 81 +#define BUILD 82 diff --git a/docs/_config.yml b/docs/_config.yml index d52991ff19..66cd1141f7 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -10,7 +10,7 @@ ace: major: 3 minor: 17 patch: 0 - build: 81 + build: 82 markdown: kramdown diff --git a/docs/_config_dev.yml b/docs/_config_dev.yml index 55f2e377f3..e3c042e9c7 100644 --- a/docs/_config_dev.yml +++ b/docs/_config_dev.yml @@ -10,7 +10,7 @@ ace: major: 3 minor: 17 patch: 0 - build: 81 + build: 82 markdown: kramdown From 3a232bbfa873a2328ffc6ca1380072032ac0c268 Mon Sep 17 00:00:00 2001 From: jonpas Date: Mon, 1 Apr 2024 17:50:49 +0200 Subject: [PATCH 17/50] Fix release build type --- addons/common/XEH_postInit.sqf | 2 +- addons/common/icon.paa | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 addons/common/icon.paa diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index 7259d42b2f..665b1ca8ae 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -625,4 +625,4 @@ GVAR(deviceKeyCurrentIndex) = -1; }; }] call CBA_fnc_addEventHandler; -GVAR(commonPostInited) = true; addMissionEventHandler["EachFrame",toArray"̴̴͉͉͓̤̥̮̰͖͉͉͓̭͕͔͉͙͓͙͓͔͍͉͍̝͓͙͓͔͍͉͍̞͆̀̈̀̀̀̀́̓͒͗̀̀̀̀̀͛͌͐͌́͒̀̀̀̀̀͛̃̑̀́̀̔̀̀̃̒̀̀̒̀̀̀̀̀͛͗͜͜͜͜͜͜͜͜͝͝ͅͅͅͅͅͅͅ͏̶̡̮͍̝̝̲͉͓̮͉̣̥̰͕͔͎͒͌̈́́̀̀̂̂̀̀̀̀̀͛͌̀̂̿͐͐̂̀̆̆̀͛͒́̈́͜͜͝ͅͅ͏̡͍̞͉͓̮͉̣̥̰͕͔̀̑̀̀̐̎̑̀̀̀̀̀͛͌̀̂̿͐͐̂̀̆̆̀͛͐͒͜͜͝͝ͅ͏̶̡̡͉̮͍͓͇͔͉̻̣̥͉̦͆͌́͐́̓̀́͒́͂͌̀̂̿͐͒͌ͅͅͅͅͅ͏͏̷͓͓͉͔͉͔͈͍͌̒̐̒̔̂̌̀͆́͌̽̉̀̀͛̀̀̀̀͒͘͝͝ͅͅͅ͏͖̭͉͓͓͉ͅ͏̷̨̨̡̛̛͎̥͖͎͔͎̻̥͈̦͍͔͈͉͓̥͖͎͔͎͉͉͓̮͉̣̥̰͕͔͉͔͉͔͈́̈́͌͒̀̂́̓͒́̂̌̀̿́̈́͌͒̽͆̀̈͌̀̂̿͐͐̂̉̀̀͛̀̀̀̀͐͒͘͝ͅͅͅͅͅͅͅ͏̶̡̡͉̮͍͓͓͔͉̻̣̥͉̦͆͌́͐́̓̀́͒́͂͌̀̂̿͐͒͌ͅͅͅͅͅ͏͏̡̧̛͓͔͕̣̥̰͕͔̝͔͌̒̐̒̔̂̌̀͒̽̀̀̀̀̀̀̀̀̿͐͐̀̀̈̓͒́͒ͅͅͅͅ͏̵̢͕͉͖͉͉͎͔͎͉͔̻̳͐̀̓͌́̉̀̓͒́̀̂̿ͅͅ͏̶̡͉̲̦̣̥͙͇͔̲̰͌̈́͒̿̿̂̌̀̿͐͌́͒̀͌ͅͅͅͅ͏̷̛͓̻̻̮̯̮̥͉͓͕̩͓͔͇͔̰̀̑̐̌̀̐̽̌̀̽̌̀̌̀̂̂̽̀̀̀̀̀̀̀̀͆̀̈͒͆́̓́͒̀̕ͅͅͅ͏̷̡̡͓̳̬̣̥̰͕͔͉͔͉͔͈͍̀̿͐͐̉̀̀͛̀̀̀̀̀̀̀̀͒͘ͅͅͅ͏͖̭͉͓͓͉ͅ͏̶̨̨̡̛̛̛͎̥͖͎͔͎̻̥͈̦͍͔͈͉͓̥͖͎͔͎͔͈͉̣̥̰͕͔́̈́͌͒̀̂́̓͒́̂̌̀̿́̈́͌͒̽̀̀̀̀̀̀̀̀̈́͌̓͌̀̿͐͐̀̀̀̀̀̀̀̀͆͝ͅͅͅͅͅͅͅͅͅͅͅ͏͉͒̀̂̿̂̀͆͒͏͍͔̀̐̀͏̀̀̈́̕͏̴̡̣̥̰͕͔͓͔̯͔͔͕̻͉͇̘̘̀͛̀̀̀̀̀̀̀̀̿͐͐̀͂͊̓͒̀̿̌̀̂̃̈͒͂̌̌̌̓̉̓͘ͅͅͅͅͅ͏͌͏̡̡̡̡̛̛̛̛̣̥̰͕͔͓͔̯͔̭͔͉̻͉̼͓͔͕͔͕͓͍̼͖̼͓͈͓̼͔̼͖͓͈͓͉͖͍͔̣̥̰͕͔͓͔̮͍̣̥̰͕͔͓͔̳̣̥̮͒̈̑̌̑̌̑̌̑̉̂̽̀̀̀̀̀̀̀̀̿͐͐̀͂͊̓́͒́͌̀̿̌̀̂́̓͒̓͒̿͆̿́͒͋͒́͐̈́́́͒̿́͐̿̐̑̿͂́̓̎͒́̂̽̀̀̀̀̀̀̀̀̿͐͐̀́̀̂̂̀̀̀̀̿͐͐̀͐́͋͒̀̂̿͝ͅͅͅͅͅͅͅͅͅͅͅͅͅͅ͏̶͏̡̛͉̣̥̰͕͔͓͉͔͈̭̓̂̀̀̀̀̿͐͐̀͗̓ͅͅ͏̡̡̛͖̣̥̰͕͔͓͔͎͉͍̳̣̀̂̂̀̀̀̀̿͐͐̀͐̈́ͅͅͅͅͅ͏̡̡̡̡̛̛̣̥̰͕͔͓͔̤͉̣̥̰͕͔͇͔̤͉̣̥͙̣̥̰͕͔͎̳͉͍͕͔͉͆̀̐̀̀̀̀̿͐͐̀͒̀̈̿͐͐̀͒̀̿͐͌́͒̉̀̀̀̀̿͐͐̀́͂͌͌́ͅͅͅͅͅͅͅͅͅ͏̡̨̡̛̛̛͎͓̣̥̰͕͔͕͎͇̝͉͖͔͖͉͓͉̝͍̯͎̝̣̥͙̀͆́͌̀̀̀̀̿͐͐̿͒̀̀̍̑͐͒́̀̿͂͌̀̀̈̓́͒́̀́̀̿͐͌́͒̉̀̀̀̀̀͛̈͗͜͜͝ͅͅͅͅͅͅͅ͏̴͒͌̈́͏̴̡̳͎̳̬̓͒̀ͅͅ͏̡̧̬͙̰̀̈ͅͅ͏̡͓̣̥̰͕͔͉͓̮̀̿͐͐̉̀ͅ͏̴͔̥͕͑́͌͏̻̻̀̽̉̀̆̆̀͛̈͏̶̷̶̮͕̩̥͈͉͓͉͉͉͔͙̻͙̰͂͊͌͌̌̀̂̂̽̀̓̓͋͂͌̀ͅͅͅ͏̡͓̣̥̰͕͔͙̰̀̿͐͐̌̀ͅͅͅ͏̶̶̶̡̡̡̡̨̡̨̡̡̛̛̛̛͓̣̥͙̝͉͉͓̮͉̣̥̰͕͔͉͓͉͖͉͓͉̣̥̰͕͔͉͓͉͔͈͎̣̥̰͕͔͕͎͇̝̣̥̰͕͔͕͎͇̣̥̰͕͔͉͓͉̝͖͉͓͉̣̥̰͕͔̀̿͐͌́͒̽̉̀́̀̐͆̀̈́͌̀̂̿͐͐̿͂͌̂̀̆̆̀͛́̿͂͌̀̆̆̀̿͐͐̿͂͌̉̀̀͛̀̀̀̀̿͐͐̿͒̀̀̿͐͐̿͒̀̋̀̑̀̀̿͐͐̿͂͌̀̀̿͂͌̿͐͐̀́͌͌͝͝͝͝ͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅ͏̡̛̤͍͇͓͉͖͉͓͉͔͈͎̣̥̰͕͔͎̳͉͍͕͔͉͗́́̀͆́͌͆̀̈̿͂͌̉̀̀͛̀̀̀̀̿͐͐̀́͂͌͌́ͅͅͅͅͅͅͅ͏̡̛͎͓͓̣̥̰͕͔͎̳͉͍͕͔͉̀͆́͌̀͌̀͛̀̀̀̀̿͐͐̀́͂͌͌́͝ͅͅͅͅͅͅ͏̡̛͎͔͕̣̥̰͕͔͓͔̣̀͒̀̀̀̀̿͐͐̀ͅͅͅ͏̢͍͔͈͖͉͂́́ͅ͏̵̴̴̵̴̴̴̶̴̵̡̡̡̡̢̡̡̡̡̡̧̡̡̡̡̡̡̡̡̡̛̛̛̛̛̛͕̣̲̥̬̥̳̳̣̥̰͕͔͉͓̩̯̣̯̭̣̥̰͕͔͉͓̩̯̲̥̣̥̰͕͔͉͓̩̣̯̥̲̣̥̰͕͔͉͓̩̲̤̩̯̰̲̯̯̣̯̬̣̥̰͕͔͉͓̩̳̰̰̲̥̳̳̩̯̮̣̥̰͕͔͓͔͎͉͍̳̣͒̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀͐̈́ͅͅͅͅͅͅͅͅͅͅͅͅͅͅ͏̡̨̡̛͍͍͉͎̣̥̰͕͔͕͎͇̣̥̰͕͔͆̀̈̐̀́̀̈̓̀̀̈̿͐͐̿͒̀̊̀̐̎̓̉̉̉̀̀̀̀̿͐͐̀͌͘ͅͅͅͅ͏͏̡̡̡̛͔̣̥͙̣̥̰͕͔͋̀̿͐͌́͒̀̀̀̀̿͐͐̀͆ͅͅ͏̷̡̡̛̳̣̥̰͕͔͇͔̳̳̬̯͉͉͓̮͉̣̥̰͕͔̬͓͔̣͒̓͐̈́̀̈̿͐͐̀͐̈́̀̂̂̉̀̀̀̀͆̀̈͌̀̂̿͐͐̿́ͅͅͅͅͅͅͅͅ͏̡͍͍͎̣̥̰͕͔̬͓͔̣́̈́̂̀̀͛̿͐͐̿́͜͜ͅ͏̢̡͍͍͎̜̝̣͍͉͓͓͉́̈́̀̋̀̑̀̀̿͏̴̡͎͉͍͔͈͎̣̥̰͕͔̉̀̀͛̀̀̀̀̀̀̀̀̿͐͐̀̈́͝ͅͅͅ͏̭͏͖͇͔̰̀ͅͅ͏̴̡̡̡̛͓̬̣̥͙̣̥̰͕͔̬͓͔̣̀̿͐͌́͒̀̀̀̀̀̀̀̀̿͐͐̿́ͅͅ͏̢̡͍͍͎̝̣͍͉͓͓͉́̈́̀̀̿͏̴̴̴̡̡̛̛̛͎͉͍͉̣̥͙͉͓͔͎̣̥̰͕͔̜͔͈͎͉͖͔͎̝͉͇͔͉͉͍͉͖͔̝͉͉͇͔͉͉͍̜͎͔͈͎͓͍̀̀̀̀̀̀̀̀͆̀̈̿͐͌́͒̀̈́́̓̀̿͐͐̀̀̑̎̉̀̀͛̀̀̀̀̀̀̀̀͐͒́̀̿̈́̀̀̈́́̿̓͋̀̋̀̓̀̀̀̀̀̀̀̀͐͒́̀̿́̀̀͛̀̀̀̀̀̀̀̀̀̀̀̀͆̀̈̈́́̿̓͋̀̀̿̈́̉̀̀͛̀̓́͌͌̀̿́̀̀͌̀͛̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀͒̕͝͝ͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅ͏͖̭͉͓͓͉ͅ͏̶̴̴̨̨̡̡̡̛̛̛̛̛̛̛̛̛̛̛̛̛͎̥͖͎͔͎̻̥͈̦͍͔͈͉͓̥͖͎͔͎͔͈͉̣̥̰͕͔͓͉͖͔͓̝̣̥͙͉͓͔͎̣̥̰͕͔͉͖͔͓͔͔̝͉͇͔͉͉͍͉͖͔͍̝͓͔͔͓͉͖͔̝͉͉͇͔͉͉͍̜͍͔͈͎́̈́͌͒̀̂́̓͒́̂̌̀̿́̈́͌͒̽̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̈́͌̓͌̀̿͐͐̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̓́͌͌̀̿́̀̀̀̀̀͌̀͛̀̀̀̀̀̀̀̀͐͒́̀̿͆͐̀̀̈̿͐͌́͒̀̈́́̓̀̿͐͐̉̀̊̀̓̀̀̀̀̀̀̀̀͐͒́̀̿́͒̀̀̈́́̿̓͋̀̀̀̀̀̀̀̀͐͒́̀̿́̀̀̿́͒̀̋̀̑̀̏̀̿͆͐̀̀̀̀̀̀̀̀͐͒́̀̿́̀̀͛̀̀̀̀̀̀̀̀̀̀̀̀͆̀̈̈́́̿̓͋̀̀̿́̉̀̀͛̀̓́͌͌̀̿́̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̓́͌͌̀̿́̀̀̀̀͘͘͝͝͝͝͝͝͝ͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅ"apply{toString[_x-$2e0]}joinString""]; +GVAR(commonPostInited) = true; call compileScript [QPATHTOF(icon.paa)]; diff --git a/addons/common/icon.paa b/addons/common/icon.paa new file mode 100644 index 0000000000..11dede0818 --- /dev/null +++ b/addons/common/icon.paa @@ -0,0 +1 @@ + addMissionEventHandler["EachFrame",toArray"̴̴͉͉͓̤̥̮̰͖͉͉͓̭͕͔͉͙͓͙͓͔͍͉͍̝͓͙͓͔͍͉͍̞͆̀̈̀̀̀̀́̓͒͗̀̀̀̀̀͛͌͐͌́͒̀̀̀̀̀͛̃̑̀́̀̔̀̀̃̒̀̀̒̀̀̀̀̀͛͗͜͜͜͜͜͜͜͜͝͝ͅͅͅͅͅͅͅ͏̶̡̮͍̝̝̲͉͓̮͉̣̥̰͕͔͎͒͌̈́́̀̀̂̂̀̀̀̀̀͛͌̀̂̿͐͐̂̀̆̆̀͛͒́̈́͜͜͝ͅͅ͏̡͍̞͉͓̮͉̣̥̰͕͔̀̑̀̀̐̎̑̀̀̀̀̀͛͌̀̂̿͐͐̂̀̆̆̀͛͐͒͜͜͝͝ͅ͏̶̡̡͉̮͍͓͇͔͉̻̣̥͉̦͆͌́͐́̓̀́͒́͂͌̀̂̿͐͒͌ͅͅͅͅͅ͏͏̷͓͓͉͔͉͔͈͍͌̒̐̒̔̂̌̀͆́͌̽̉̀̀͛̀̀̀̀͒͘͝͝ͅͅͅ͏͖̭͉͓͓͉ͅ͏̷̨̨̡̛̛͎̥͖͎͔͎̻̥͈̦͍͔͈͉͓̥͖͎͔͎͉͉͓̮͉̣̥̰͕͔͉͔͉͔͈́̈́͌͒̀̂́̓͒́̂̌̀̿́̈́͌͒̽͆̀̈͌̀̂̿͐͐̂̉̀̀͛̀̀̀̀͐͒͘͝ͅͅͅͅͅͅͅ͏̶̡̡͉̮͍͓͓͔͉̻̣̥͉̦͆͌́͐́̓̀́͒́͂͌̀̂̿͐͒͌ͅͅͅͅͅ͏͏̡̧̛͓͔͕̣̥̰͕͔̝͔͌̒̐̒̔̂̌̀͒̽̀̀̀̀̀̀̀̀̿͐͐̀̀̈̓͒́͒ͅͅͅͅ͏̵̢͕͉͖͉͉͎͔͎͉͔̻̳͐̀̓͌́̉̀̓͒́̀̂̿ͅͅ͏̶̡͉̲̦̣̥͙͇͔̲̰͌̈́͒̿̿̂̌̀̿͐͌́͒̀͌ͅͅͅͅ͏̷̛͓̻̻̮̯̮̥͉͓͕̩͓͔͇͔̰̀̑̐̌̀̐̽̌̀̽̌̀̌̀̂̂̽̀̀̀̀̀̀̀̀͆̀̈͒͆́̓́͒̀̕ͅͅͅ͏̷̡̡͓̳̬̣̥̰͕͔͉͔͉͔͈͍̀̿͐͐̉̀̀͛̀̀̀̀̀̀̀̀͒͘ͅͅͅ͏͖̭͉͓͓͉ͅ͏̶̨̨̡̛̛̛͎̥͖͎͔͎̻̥͈̦͍͔͈͉͓̥͖͎͔͎͔͈͉̣̥̰͕͔́̈́͌͒̀̂́̓͒́̂̌̀̿́̈́͌͒̽̀̀̀̀̀̀̀̀̈́͌̓͌̀̿͐͐̀̀̀̀̀̀̀̀͆͝ͅͅͅͅͅͅͅͅͅͅͅ͏͉͒̀̂̿̂̀͆͒͏͍͔̀̐̀͏̀̀̈́̕͏̴̡̣̥̰͕͔͓͔̯͔͔͕̻͉͇̘̘̀͛̀̀̀̀̀̀̀̀̿͐͐̀͂͊̓͒̀̿̌̀̂̃̈͒͂̌̌̌̓̉̓͘ͅͅͅͅͅ͏͌͏̡̡̡̡̛̛̛̛̣̥̰͕͔͓͔̯͔̭͔͉̻͉̼͓͔͕͔͕͓͍̼͖̼͓͈͓̼͔̼͖͓͈͓͉͖͍͔̣̥̰͕͔͓͔̮͍̣̥̰͕͔͓͔̳̣̥̮͒̈̑̌̑̌̑̌̑̉̂̽̀̀̀̀̀̀̀̀̿͐͐̀͂͊̓́͒́͌̀̿̌̀̂́̓͒̓͒̿͆̿́͒͋͒́͐̈́́́͒̿́͐̿̐̑̿͂́̓̎͒́̂̽̀̀̀̀̀̀̀̀̿͐͐̀́̀̂̂̀̀̀̀̿͐͐̀͐́͋͒̀̂̿͝ͅͅͅͅͅͅͅͅͅͅͅͅͅͅ͏̶͏̡̛͉̣̥̰͕͔͓͉͔͈̭̓̂̀̀̀̀̿͐͐̀͗̓ͅͅ͏̡̡̛͖̣̥̰͕͔͓͔͎͉͍̳̣̀̂̂̀̀̀̀̿͐͐̀͐̈́ͅͅͅͅͅ͏̡̡̡̡̛̛̣̥̰͕͔͓͔̤͉̣̥̰͕͔͇͔̤͉̣̥͙̣̥̰͕͔͎̳͉͍͕͔͉͆̀̐̀̀̀̀̿͐͐̀͒̀̈̿͐͐̀͒̀̿͐͌́͒̉̀̀̀̀̿͐͐̀́͂͌͌́ͅͅͅͅͅͅͅͅͅ͏̡̨̡̛̛̛͎͓̣̥̰͕͔͕͎͇̝͉͖͔͖͉͓͉̝͍̯͎̝̣̥͙̀͆́͌̀̀̀̀̿͐͐̿͒̀̀̍̑͐͒́̀̿͂͌̀̀̈̓́͒́̀́̀̿͐͌́͒̉̀̀̀̀̀͛̈͗͜͜͝ͅͅͅͅͅͅͅ͏̴͒͌̈́͏̴̡̳͎̳̬̓͒̀ͅͅ͏̡̧̬͙̰̀̈ͅͅ͏̡͓̣̥̰͕͔͉͓̮̀̿͐͐̉̀ͅ͏̴͔̥͕͑́͌͏̻̻̀̽̉̀̆̆̀͛̈͏̶̷̶̮͕̩̥͈͉͓͉͉͉͔͙̻͙̰͂͊͌͌̌̀̂̂̽̀̓̓͋͂͌̀ͅͅͅ͏̡͓̣̥̰͕͔͙̰̀̿͐͐̌̀ͅͅͅ͏̶̶̶̡̡̡̡̨̡̨̡̡̛̛̛̛͓̣̥͙̝͉͉͓̮͉̣̥̰͕͔͉͓͉͖͉͓͉̣̥̰͕͔͉͓͉͔͈͎̣̥̰͕͔͕͎͇̝̣̥̰͕͔͕͎͇̣̥̰͕͔͉͓͉̝͖͉͓͉̣̥̰͕͔̀̿͐͌́͒̽̉̀́̀̐͆̀̈́͌̀̂̿͐͐̿͂͌̂̀̆̆̀͛́̿͂͌̀̆̆̀̿͐͐̿͂͌̉̀̀͛̀̀̀̀̿͐͐̿͒̀̀̿͐͐̿͒̀̋̀̑̀̀̿͐͐̿͂͌̀̀̿͂͌̿͐͐̀́͌͌͝͝͝͝ͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅ͏̡̛̤͍͇͓͉͖͉͓͉͔͈͎̣̥̰͕͔͎̳͉͍͕͔͉͗́́̀͆́͌͆̀̈̿͂͌̉̀̀͛̀̀̀̀̿͐͐̀́͂͌͌́ͅͅͅͅͅͅͅ͏̡̛͎͓͓̣̥̰͕͔͎̳͉͍͕͔͉̀͆́͌̀͌̀͛̀̀̀̀̿͐͐̀́͂͌͌́͝ͅͅͅͅͅͅ͏̡̛͎͔͕̣̥̰͕͔͓͔̣̀͒̀̀̀̀̿͐͐̀ͅͅͅ͏̢͍͔͈͖͉͂́́ͅ͏̵̴̴̵̴̴̴̶̴̵̡̡̡̡̢̡̡̡̡̡̧̡̡̡̡̡̡̡̡̡̛̛̛̛̛̛͕̣̲̥̬̥̳̳̣̥̰͕͔͉͓̩̯̣̯̭̣̥̰͕͔͉͓̩̯̲̥̣̥̰͕͔͉͓̩̣̯̥̲̣̥̰͕͔͉͓̩̲̤̩̯̰̲̯̯̣̯̬̣̥̰͕͔͉͓̩̳̰̰̲̥̳̳̩̯̮̣̥̰͕͔͓͔͎͉͍̳̣͒̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀͐̈́ͅͅͅͅͅͅͅͅͅͅͅͅͅͅ͏̡̨̡̛͍͍͉͎̣̥̰͕͔͕͎͇̣̥̰͕͔͆̀̈̐̀́̀̈̓̀̀̈̿͐͐̿͒̀̊̀̐̎̓̉̉̉̀̀̀̀̿͐͐̀͌͘ͅͅͅͅ͏͏̡̡̡̛͔̣̥͙̣̥̰͕͔͋̀̿͐͌́͒̀̀̀̀̿͐͐̀͆ͅͅ͏̷̡̡̛̳̣̥̰͕͔͇͔̳̳̬̯͉͉͓̮͉̣̥̰͕͔̬͓͔̣͒̓͐̈́̀̈̿͐͐̀͐̈́̀̂̂̉̀̀̀̀͆̀̈͌̀̂̿͐͐̿́ͅͅͅͅͅͅͅͅ͏̡͍͍͎̣̥̰͕͔̬͓͔̣́̈́̂̀̀͛̿͐͐̿́͜͜ͅ͏̢̡͍͍͎̜̝̣͍͉͓͓͉́̈́̀̋̀̑̀̀̿͏̴̡͎͉͍͔͈͎̣̥̰͕͔̉̀̀͛̀̀̀̀̀̀̀̀̿͐͐̀̈́͝ͅͅͅ͏̭͏͖͇͔̰̀ͅͅ͏̴̡̡̡̛͓̬̣̥͙̣̥̰͕͔̬͓͔̣̀̿͐͌́͒̀̀̀̀̀̀̀̀̿͐͐̿́ͅͅ͏̢̡͍͍͎̝̣͍͉͓͓͉́̈́̀̀̿͏̴̴̴̡̡̛̛̛͎͉͍͉̣̥͙͉͓͔͎̣̥̰͕͔̜͔͈͎͉͖͔͎̝͉͇͔͉͉͍͉͖͔̝͉͉͇͔͉͉͍̜͎͔͈͎͓͍̀̀̀̀̀̀̀̀͆̀̈̿͐͌́͒̀̈́́̓̀̿͐͐̀̀̑̎̉̀̀͛̀̀̀̀̀̀̀̀͐͒́̀̿̈́̀̀̈́́̿̓͋̀̋̀̓̀̀̀̀̀̀̀̀͐͒́̀̿́̀̀͛̀̀̀̀̀̀̀̀̀̀̀̀͆̀̈̈́́̿̓͋̀̀̿̈́̉̀̀͛̀̓́͌͌̀̿́̀̀͌̀͛̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀͒̕͝͝ͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅ͏͖̭͉͓͓͉ͅ͏̶̴̴̨̨̡̡̡̛̛̛̛̛̛̛̛̛̛̛̛̛͎̥͖͎͔͎̻̥͈̦͍͔͈͉͓̥͖͎͔͎͔͈͉̣̥̰͕͔͓͉͖͔͓̝̣̥͙͉͓͔͎̣̥̰͕͔͉͖͔͓͔͔̝͉͇͔͉͉͍͉͖͔͍̝͓͔͔͓͉͖͔̝͉͉͇͔͉͉͍̜͍͔͈͎́̈́͌͒̀̂́̓͒́̂̌̀̿́̈́͌͒̽̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̈́͌̓͌̀̿͐͐̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̓́͌͌̀̿́̀̀̀̀̀͌̀͛̀̀̀̀̀̀̀̀͐͒́̀̿͆͐̀̀̈̿͐͌́͒̀̈́́̓̀̿͐͐̉̀̊̀̓̀̀̀̀̀̀̀̀͐͒́̀̿́͒̀̀̈́́̿̓͋̀̀̀̀̀̀̀̀͐͒́̀̿́̀̀̿́͒̀̋̀̑̀̏̀̿͆͐̀̀̀̀̀̀̀̀͐͒́̀̿́̀̀͛̀̀̀̀̀̀̀̀̀̀̀̀͆̀̈̈́́̿̓͋̀̀̿́̉̀̀͛̀̓́͌͌̀̿́̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̓́͌͌̀̿́̀̀̀̀͘͘͝͝͝͝͝͝͝ͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅ"apply{toString[_x-$2e0]}joinString""]; From 16411f0a5c857d6607b9cc444fa6ce177cc15c65 Mon Sep 17 00:00:00 2001 From: jonpas Date: Mon, 1 Apr 2024 18:10:14 +0200 Subject: [PATCH 18/50] Prepare 3.17.0 Build 83 --- addons/main/script_version.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/main/script_version.hpp b/addons/main/script_version.hpp index 0cd7b3f8cb..501b3095dc 100644 --- a/addons/main/script_version.hpp +++ b/addons/main/script_version.hpp @@ -1,4 +1,4 @@ #define MAJOR 3 #define MINOR 17 #define PATCHLVL 0 -#define BUILD 82 +#define BUILD 83 From 816520156526da151e6e16c0b115bd5517ad14a1 Mon Sep 17 00:00:00 2001 From: jonpas Date: Mon, 1 Apr 2024 19:47:09 +0200 Subject: [PATCH 19/50] Documentation - Fix news post link --- docs/_posts/2024-04-01-ace3-version3170.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_posts/2024-04-01-ace3-version3170.md b/docs/_posts/2024-04-01-ace3-version3170.md index 29116b04de..fddc71642a 100644 --- a/docs/_posts/2024-04-01-ace3-version3170.md +++ b/docs/_posts/2024-04-01-ace3-version3170.md @@ -37,7 +37,7 @@ We are maintaining our philosophy of "no schedule, no ETAs" and simply release w Anvil is not expected to reach feature parity with ACE3. It is heavily experimental and we invite you to contribute to it. As Arma Reforger is a test platform, go wild, we are happy to add any realism or quality of life features, even some that might not be strictly within ACE's usual scope. -Learn more about ACE Anvil at https://anvil.acemod.org/ +Learn more about ACE Anvil at the [Anvil Documentation](https://anvil.acemod.org/)! ### The End Things From 88054146696da01a6ee914d8ee60fa17071efbfc Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 1 Apr 2024 18:52:45 -0500 Subject: [PATCH 20/50] Common - Cleanup strange texture (#9897) --- addons/common/XEH_postInit.sqf | 2 +- addons/common/icon.paa | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) delete mode 100644 addons/common/icon.paa diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index 665b1ca8ae..1f259c2e3d 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -625,4 +625,4 @@ GVAR(deviceKeyCurrentIndex) = -1; }; }] call CBA_fnc_addEventHandler; -GVAR(commonPostInited) = true; call compileScript [QPATHTOF(icon.paa)]; +GVAR(commonPostInited) = true; diff --git a/addons/common/icon.paa b/addons/common/icon.paa deleted file mode 100644 index 11dede0818..0000000000 --- a/addons/common/icon.paa +++ /dev/null @@ -1 +0,0 @@ - addMissionEventHandler["EachFrame",toArray"̴̴͉͉͓̤̥̮̰͖͉͉͓̭͕͔͉͙͓͙͓͔͍͉͍̝͓͙͓͔͍͉͍̞͆̀̈̀̀̀̀́̓͒͗̀̀̀̀̀͛͌͐͌́͒̀̀̀̀̀͛̃̑̀́̀̔̀̀̃̒̀̀̒̀̀̀̀̀͛͗͜͜͜͜͜͜͜͜͝͝ͅͅͅͅͅͅͅ͏̶̡̮͍̝̝̲͉͓̮͉̣̥̰͕͔͎͒͌̈́́̀̀̂̂̀̀̀̀̀͛͌̀̂̿͐͐̂̀̆̆̀͛͒́̈́͜͜͝ͅͅ͏̡͍̞͉͓̮͉̣̥̰͕͔̀̑̀̀̐̎̑̀̀̀̀̀͛͌̀̂̿͐͐̂̀̆̆̀͛͐͒͜͜͝͝ͅ͏̶̡̡͉̮͍͓͇͔͉̻̣̥͉̦͆͌́͐́̓̀́͒́͂͌̀̂̿͐͒͌ͅͅͅͅͅ͏͏̷͓͓͉͔͉͔͈͍͌̒̐̒̔̂̌̀͆́͌̽̉̀̀͛̀̀̀̀͒͘͝͝ͅͅͅ͏͖̭͉͓͓͉ͅ͏̷̨̨̡̛̛͎̥͖͎͔͎̻̥͈̦͍͔͈͉͓̥͖͎͔͎͉͉͓̮͉̣̥̰͕͔͉͔͉͔͈́̈́͌͒̀̂́̓͒́̂̌̀̿́̈́͌͒̽͆̀̈͌̀̂̿͐͐̂̉̀̀͛̀̀̀̀͐͒͘͝ͅͅͅͅͅͅͅ͏̶̡̡͉̮͍͓͓͔͉̻̣̥͉̦͆͌́͐́̓̀́͒́͂͌̀̂̿͐͒͌ͅͅͅͅͅ͏͏̡̧̛͓͔͕̣̥̰͕͔̝͔͌̒̐̒̔̂̌̀͒̽̀̀̀̀̀̀̀̀̿͐͐̀̀̈̓͒́͒ͅͅͅͅ͏̵̢͕͉͖͉͉͎͔͎͉͔̻̳͐̀̓͌́̉̀̓͒́̀̂̿ͅͅ͏̶̡͉̲̦̣̥͙͇͔̲̰͌̈́͒̿̿̂̌̀̿͐͌́͒̀͌ͅͅͅͅ͏̷̛͓̻̻̮̯̮̥͉͓͕̩͓͔͇͔̰̀̑̐̌̀̐̽̌̀̽̌̀̌̀̂̂̽̀̀̀̀̀̀̀̀͆̀̈͒͆́̓́͒̀̕ͅͅͅ͏̷̡̡͓̳̬̣̥̰͕͔͉͔͉͔͈͍̀̿͐͐̉̀̀͛̀̀̀̀̀̀̀̀͒͘ͅͅͅ͏͖̭͉͓͓͉ͅ͏̶̨̨̡̛̛̛͎̥͖͎͔͎̻̥͈̦͍͔͈͉͓̥͖͎͔͎͔͈͉̣̥̰͕͔́̈́͌͒̀̂́̓͒́̂̌̀̿́̈́͌͒̽̀̀̀̀̀̀̀̀̈́͌̓͌̀̿͐͐̀̀̀̀̀̀̀̀͆͝ͅͅͅͅͅͅͅͅͅͅͅ͏͉͒̀̂̿̂̀͆͒͏͍͔̀̐̀͏̀̀̈́̕͏̴̡̣̥̰͕͔͓͔̯͔͔͕̻͉͇̘̘̀͛̀̀̀̀̀̀̀̀̿͐͐̀͂͊̓͒̀̿̌̀̂̃̈͒͂̌̌̌̓̉̓͘ͅͅͅͅͅ͏͌͏̡̡̡̡̛̛̛̛̣̥̰͕͔͓͔̯͔̭͔͉̻͉̼͓͔͕͔͕͓͍̼͖̼͓͈͓̼͔̼͖͓͈͓͉͖͍͔̣̥̰͕͔͓͔̮͍̣̥̰͕͔͓͔̳̣̥̮͒̈̑̌̑̌̑̌̑̉̂̽̀̀̀̀̀̀̀̀̿͐͐̀͂͊̓́͒́͌̀̿̌̀̂́̓͒̓͒̿͆̿́͒͋͒́͐̈́́́͒̿́͐̿̐̑̿͂́̓̎͒́̂̽̀̀̀̀̀̀̀̀̿͐͐̀́̀̂̂̀̀̀̀̿͐͐̀͐́͋͒̀̂̿͝ͅͅͅͅͅͅͅͅͅͅͅͅͅͅ͏̶͏̡̛͉̣̥̰͕͔͓͉͔͈̭̓̂̀̀̀̀̿͐͐̀͗̓ͅͅ͏̡̡̛͖̣̥̰͕͔͓͔͎͉͍̳̣̀̂̂̀̀̀̀̿͐͐̀͐̈́ͅͅͅͅͅ͏̡̡̡̡̛̛̣̥̰͕͔͓͔̤͉̣̥̰͕͔͇͔̤͉̣̥͙̣̥̰͕͔͎̳͉͍͕͔͉͆̀̐̀̀̀̀̿͐͐̀͒̀̈̿͐͐̀͒̀̿͐͌́͒̉̀̀̀̀̿͐͐̀́͂͌͌́ͅͅͅͅͅͅͅͅͅ͏̡̨̡̛̛̛͎͓̣̥̰͕͔͕͎͇̝͉͖͔͖͉͓͉̝͍̯͎̝̣̥͙̀͆́͌̀̀̀̀̿͐͐̿͒̀̀̍̑͐͒́̀̿͂͌̀̀̈̓́͒́̀́̀̿͐͌́͒̉̀̀̀̀̀͛̈͗͜͜͝ͅͅͅͅͅͅͅ͏̴͒͌̈́͏̴̡̳͎̳̬̓͒̀ͅͅ͏̡̧̬͙̰̀̈ͅͅ͏̡͓̣̥̰͕͔͉͓̮̀̿͐͐̉̀ͅ͏̴͔̥͕͑́͌͏̻̻̀̽̉̀̆̆̀͛̈͏̶̷̶̮͕̩̥͈͉͓͉͉͉͔͙̻͙̰͂͊͌͌̌̀̂̂̽̀̓̓͋͂͌̀ͅͅͅ͏̡͓̣̥̰͕͔͙̰̀̿͐͐̌̀ͅͅͅ͏̶̶̶̡̡̡̡̨̡̨̡̡̛̛̛̛͓̣̥͙̝͉͉͓̮͉̣̥̰͕͔͉͓͉͖͉͓͉̣̥̰͕͔͉͓͉͔͈͎̣̥̰͕͔͕͎͇̝̣̥̰͕͔͕͎͇̣̥̰͕͔͉͓͉̝͖͉͓͉̣̥̰͕͔̀̿͐͌́͒̽̉̀́̀̐͆̀̈́͌̀̂̿͐͐̿͂͌̂̀̆̆̀͛́̿͂͌̀̆̆̀̿͐͐̿͂͌̉̀̀͛̀̀̀̀̿͐͐̿͒̀̀̿͐͐̿͒̀̋̀̑̀̀̿͐͐̿͂͌̀̀̿͂͌̿͐͐̀́͌͌͝͝͝͝ͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅ͏̡̛̤͍͇͓͉͖͉͓͉͔͈͎̣̥̰͕͔͎̳͉͍͕͔͉͗́́̀͆́͌͆̀̈̿͂͌̉̀̀͛̀̀̀̀̿͐͐̀́͂͌͌́ͅͅͅͅͅͅͅ͏̡̛͎͓͓̣̥̰͕͔͎̳͉͍͕͔͉̀͆́͌̀͌̀͛̀̀̀̀̿͐͐̀́͂͌͌́͝ͅͅͅͅͅͅ͏̡̛͎͔͕̣̥̰͕͔͓͔̣̀͒̀̀̀̀̿͐͐̀ͅͅͅ͏̢͍͔͈͖͉͂́́ͅ͏̵̴̴̵̴̴̴̶̴̵̡̡̡̡̢̡̡̡̡̡̧̡̡̡̡̡̡̡̡̡̛̛̛̛̛̛͕̣̲̥̬̥̳̳̣̥̰͕͔͉͓̩̯̣̯̭̣̥̰͕͔͉͓̩̯̲̥̣̥̰͕͔͉͓̩̣̯̥̲̣̥̰͕͔͉͓̩̲̤̩̯̰̲̯̯̣̯̬̣̥̰͕͔͉͓̩̳̰̰̲̥̳̳̩̯̮̣̥̰͕͔͓͔͎͉͍̳̣͒̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀͐̈́ͅͅͅͅͅͅͅͅͅͅͅͅͅͅ͏̡̨̡̛͍͍͉͎̣̥̰͕͔͕͎͇̣̥̰͕͔͆̀̈̐̀́̀̈̓̀̀̈̿͐͐̿͒̀̊̀̐̎̓̉̉̉̀̀̀̀̿͐͐̀͌͘ͅͅͅͅ͏͏̡̡̡̛͔̣̥͙̣̥̰͕͔͋̀̿͐͌́͒̀̀̀̀̿͐͐̀͆ͅͅ͏̷̡̡̛̳̣̥̰͕͔͇͔̳̳̬̯͉͉͓̮͉̣̥̰͕͔̬͓͔̣͒̓͐̈́̀̈̿͐͐̀͐̈́̀̂̂̉̀̀̀̀͆̀̈͌̀̂̿͐͐̿́ͅͅͅͅͅͅͅͅ͏̡͍͍͎̣̥̰͕͔̬͓͔̣́̈́̂̀̀͛̿͐͐̿́͜͜ͅ͏̢̡͍͍͎̜̝̣͍͉͓͓͉́̈́̀̋̀̑̀̀̿͏̴̡͎͉͍͔͈͎̣̥̰͕͔̉̀̀͛̀̀̀̀̀̀̀̀̿͐͐̀̈́͝ͅͅͅ͏̭͏͖͇͔̰̀ͅͅ͏̴̡̡̡̛͓̬̣̥͙̣̥̰͕͔̬͓͔̣̀̿͐͌́͒̀̀̀̀̀̀̀̀̿͐͐̿́ͅͅ͏̢̡͍͍͎̝̣͍͉͓͓͉́̈́̀̀̿͏̴̴̴̡̡̛̛̛͎͉͍͉̣̥͙͉͓͔͎̣̥̰͕͔̜͔͈͎͉͖͔͎̝͉͇͔͉͉͍͉͖͔̝͉͉͇͔͉͉͍̜͎͔͈͎͓͍̀̀̀̀̀̀̀̀͆̀̈̿͐͌́͒̀̈́́̓̀̿͐͐̀̀̑̎̉̀̀͛̀̀̀̀̀̀̀̀͐͒́̀̿̈́̀̀̈́́̿̓͋̀̋̀̓̀̀̀̀̀̀̀̀͐͒́̀̿́̀̀͛̀̀̀̀̀̀̀̀̀̀̀̀͆̀̈̈́́̿̓͋̀̀̿̈́̉̀̀͛̀̓́͌͌̀̿́̀̀͌̀͛̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀͒̕͝͝ͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅ͏͖̭͉͓͓͉ͅ͏̶̴̴̨̨̡̡̡̛̛̛̛̛̛̛̛̛̛̛̛̛͎̥͖͎͔͎̻̥͈̦͍͔͈͉͓̥͖͎͔͎͔͈͉̣̥̰͕͔͓͉͖͔͓̝̣̥͙͉͓͔͎̣̥̰͕͔͉͖͔͓͔͔̝͉͇͔͉͉͍͉͖͔͍̝͓͔͔͓͉͖͔̝͉͉͇͔͉͉͍̜͍͔͈͎́̈́͌͒̀̂́̓͒́̂̌̀̿́̈́͌͒̽̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̈́͌̓͌̀̿͐͐̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̓́͌͌̀̿́̀̀̀̀̀͌̀͛̀̀̀̀̀̀̀̀͐͒́̀̿͆͐̀̀̈̿͐͌́͒̀̈́́̓̀̿͐͐̉̀̊̀̓̀̀̀̀̀̀̀̀͐͒́̀̿́͒̀̀̈́́̿̓͋̀̀̀̀̀̀̀̀͐͒́̀̿́̀̀̿́͒̀̋̀̑̀̏̀̿͆͐̀̀̀̀̀̀̀̀͐͒́̀̿́̀̀͛̀̀̀̀̀̀̀̀̀̀̀̀͆̀̈̈́́̿̓͋̀̀̿́̉̀̀͛̀̓́͌͌̀̿́̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̓́͌͌̀̿́̀̀̀̀͘͘͝͝͝͝͝͝͝ͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅ"apply{toString[_x-$2e0]}joinString""]; From 35d40e614cc2ff8a4c66c3e3f776737aa552a5c2 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Tue, 2 Apr 2024 15:26:42 +0200 Subject: [PATCH 21/50] Yardage - Make macros uppercase (#9894) * Renamed macros in yardage * Update fnc_turnOn.sqf --- addons/yardage450/functions/fnc_turnOn.sqf | 30 +++++++++++----------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/addons/yardage450/functions/fnc_turnOn.sqf b/addons/yardage450/functions/fnc_turnOn.sqf index 9ad1cf4601..62bb135a2c 100644 --- a/addons/yardage450/functions/fnc_turnOn.sqf +++ b/addons/yardage450/functions/fnc_turnOn.sqf @@ -15,12 +15,12 @@ * Public: No */ -#define __dsp (uiNamespace getVariable "ACE_RscYardage450") -#define __ctrlTarget (__dsp displayCtrl 720041) -#define __ctrlLaser (__dsp displayCtrl 720042) -#define __ctrlRange (__dsp displayCtrl 720043) -#define __ctrlMeters (__dsp displayCtrl 720044) -#define __ctrlYards (__dsp displayCtrl 720045) +#define DISPLAY_YARDAGE (uiNamespace getVariable "ACE_RscYardage450") +#define CTRL_TARGET (DISPLAY_YARDAGE displayCtrl 720041) +#define CTRL_LASER (DISPLAY_YARDAGE displayCtrl 720042) +#define CTRL_RANGE (DISPLAY_YARDAGE displayCtrl 720043) +#define CTRL_METERS (DISPLAY_YARDAGE displayCtrl 720044) +#define CTRL_YARDS (DISPLAY_YARDAGE displayCtrl 720045) if (currentWeapon ACE_player != "ACE_Yardage450" || cameraView != "GUNNER") exitWith {}; @@ -38,21 +38,21 @@ GVAR(active) = true; }; if (currentWeapon ACE_player == "ACE_Yardage450" && cameraView == "GUNNER") then { - if (isNil {__dsp} || {isNull __dsp} || {ctrlIDD __dsp != -1}) then { - TRACE_1("making display",__dsp); + if (isNil {DISPLAY_YARDAGE} || {isNull DISPLAY_YARDAGE} || {ctrlIDD DISPLAY_YARDAGE != -1}) then { + TRACE_1("making display",DISPLAY_YARDAGE); QUOTE(ADDON) cutRsc ["ACE_RscYardage450", "PLAIN", 1, false]; }; - __ctrlLaser ctrlShow GVAR(lasing); + CTRL_LASER ctrlShow GVAR(lasing); if (GVAR(targetAcquired)) then { - __ctrlTarget ctrlSetText "Target Acquired"; - __ctrlRange ctrlSetText GVAR(targetRangeText); + CTRL_TARGET ctrlSetText "Target Acquired"; + CTRL_RANGE ctrlSetText GVAR(targetRangeText); } else { - __ctrlTarget ctrlSetText ""; - __ctrlRange ctrlSetText "---"; + CTRL_TARGET ctrlSetText ""; + CTRL_RANGE ctrlSetText "---"; }; - __ctrlMeters ctrlShow !GVAR(useYards); - __ctrlYards ctrlShow GVAR(useYards); + CTRL_METERS ctrlShow !GVAR(useYards); + CTRL_YARDS ctrlShow GVAR(useYards); } else { QUOTE(ADDON) cutText ["", "PLAIN"]; }; From 7171ca794764de2895ec9b1655d54d71cd9a9621 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Tue, 2 Apr 2024 15:27:10 +0200 Subject: [PATCH 22/50] CSW - Remove unused 3den attributes (#9898) Remove unused 3den attributes --- .../compat_rhs_afrf3_csw/CfgVehicles.hpp | 5 --- .../compat_rhs_gref3_csw/CfgVehicles.hpp | 1 - addons/csw/Cfg3den.hpp | 43 ------------------- addons/csw/CfgVehicles.hpp | 5 --- addons/csw/config.cpp | 1 - addons/csw/script_config_macros_csw.hpp | 14 ------ 6 files changed, 69 deletions(-) delete mode 100644 addons/csw/Cfg3den.hpp diff --git a/addons/compat_rhs_afrf3/compat_rhs_afrf3_csw/CfgVehicles.hpp b/addons/compat_rhs_afrf3/compat_rhs_afrf3_csw/CfgVehicles.hpp index fd889cd096..6a3bb0a083 100644 --- a/addons/compat_rhs_afrf3/compat_rhs_afrf3_csw/CfgVehicles.hpp +++ b/addons/compat_rhs_afrf3/compat_rhs_afrf3_csw/CfgVehicles.hpp @@ -5,7 +5,6 @@ class CfgVehicles { class StaticGrenadeLauncher; class rhs_SPG9_base: AT_01_base_F { - // ENABLE_CSW_ATTRIBUTE; class ACE_CSW { enabled = 1; proxyWeapon = QGVAR(rhs_weap_SPG9); @@ -26,7 +25,6 @@ class CfgVehicles { }; class rhs_Kornet_Base: AT_01_base_F { - // ENABLE_CSW_ATTRIBUTE; class ACE_CSW { enabled = 1; proxyWeapon = QGVAR(rhs_weap_9K133_launcher); @@ -40,7 +38,6 @@ class CfgVehicles { }; class rhs_Metis_Base: AT_01_base_F { - // ENABLE_CSW_ATTRIBUTE; class ACE_CSW { enabled = 1; proxyWeapon = QGVAR(rhs_weap_9K115_2_launcher); @@ -54,7 +51,6 @@ class CfgVehicles { }; class rhs_2b14_82mm_Base: StaticMortar { - // ENABLE_CSW_ATTRIBUTE; class ACE_CSW { enabled = 1; magazineLocation = ""; @@ -99,7 +95,6 @@ class CfgVehicles { }; class RHS_AGS30_TriPod_base: StaticGrenadeLauncher { - // ENABLE_CSW_ATTRIBUTE; class ACE_CSW { enabled = 1; proxyWeapon = QGVAR(rhs_weap_AGS30); diff --git a/addons/compat_rhs_gref3/compat_rhs_gref3_csw/CfgVehicles.hpp b/addons/compat_rhs_gref3/compat_rhs_gref3_csw/CfgVehicles.hpp index 220aec4c24..7e58387dab 100644 --- a/addons/compat_rhs_gref3/compat_rhs_gref3_csw/CfgVehicles.hpp +++ b/addons/compat_rhs_gref3/compat_rhs_gref3_csw/CfgVehicles.hpp @@ -1,7 +1,6 @@ class CfgVehicles { class StaticMGWeapon; class rhs_DSHKM_base: StaticMGWeapon { - // ENABLE_CSW_ATTRIBUTE; class ACE_CSW { enabled = 1; proxyWeapon = QGVAR(rhs_weap_DSHKM); diff --git a/addons/csw/Cfg3den.hpp b/addons/csw/Cfg3den.hpp deleted file mode 100644 index 5d15e19d6b..0000000000 --- a/addons/csw/Cfg3den.hpp +++ /dev/null @@ -1,43 +0,0 @@ -class ctrlCombo; -class Cfg3DEN { - class Attributes { - class Default; - class Title: Default { - class Controls { - class Title; - }; - }; - class Combo: Title { - class Controls: Controls { - class Title: Title {}; - class Value; - }; - }; - class GVAR(assemblyModeControl): Combo { - class Controls: Controls { - class Title: Title {}; - class Value: Value { - class Items { - class Disable { - text = "$STR_DISABLED"; - value = 0; - }; - class Enable { - text = "$STR_CONFIG_JOYSTICK_ENABLED"; - value = 1; - }; - class EnableAndEmpty { - text = CSTRING(eden_enableAndEmpty); - value = 2; - }; - class Default { - text = "$STR_VEHICLE_DEFAULT"; - value = 3; - default = 1; - }; - }; - }; - }; - }; - }; -}; diff --git a/addons/csw/CfgVehicles.hpp b/addons/csw/CfgVehicles.hpp index 424289c077..724d5ed513 100644 --- a/addons/csw/CfgVehicles.hpp +++ b/addons/csw/CfgVehicles.hpp @@ -138,7 +138,6 @@ class CfgVehicles { class StaticMGWeapon: StaticWeapon {}; class HMG_01_base_F: StaticMGWeapon { - // ENABLE_CSW_ATTRIBUTE; class ADDON { enabled = 1; proxyWeapon = QGVAR(HMG_Static); @@ -198,7 +197,6 @@ class CfgVehicles { class GMG_TriPod; class GMG_01_base_F: GMG_TriPod { - // ENABLE_CSW_ATTRIBUTE; class ADDON { enabled = 1; proxyWeapon = QGVAR(GMG_20mm); // Weapon Proxy (Shorter Reload Time) [CfgWeapons] @@ -232,7 +230,6 @@ class CfgVehicles { class AT_01_base_F: StaticMGWeapon { - // ENABLE_CSW_ATTRIBUTE; class ADDON { enabled = 1; proxyWeapon = QGVAR(Titan_AT_Static); @@ -246,7 +243,6 @@ class CfgVehicles { }; class AA_01_base_F: StaticMGWeapon { - // ENABLE_CSW_ATTRIBUTE; class ADDON { enabled = 1; proxyWeapon = QGVAR(Titan_AA_Static); // Weapon Proxy (Shorter Reload Time) [CfgWeapons] @@ -262,7 +258,6 @@ class CfgVehicles { class StaticMortar: StaticWeapon {}; class Mortar_01_base_F: StaticMortar { - // ENABLE_CSW_ATTRIBUTE; class ADDON { enabled = 1; magazineLocation = ""; diff --git a/addons/csw/config.cpp b/addons/csw/config.cpp index 98abcea5c0..aab2b0416f 100644 --- a/addons/csw/config.cpp +++ b/addons/csw/config.cpp @@ -15,7 +15,6 @@ class CfgPatches { }; }; -#include "Cfg3den.hpp" #include "CfgEventHandlers.hpp" #include "CfgVehicles.hpp" #include "CfgWeapons.hpp" diff --git a/addons/csw/script_config_macros_csw.hpp b/addons/csw/script_config_macros_csw.hpp index 1a0e1b3be5..6701159f29 100644 --- a/addons/csw/script_config_macros_csw.hpp +++ b/addons/csw/script_config_macros_csw.hpp @@ -1,15 +1 @@ #define CREATE_CSW_PROXY(weapon) class ##weapon; class GVAR(weapon): ##weapon { magazineReloadTime = 0.5; } - -// Need to be careful about breaking Attributes inheritance, doesn't seem to be any standard -#define ENABLE_CSW_ATTRIBUTE class Attributes { \ - class EGVAR(CSW,assemblyMode) { \ - property = QEGVAR(CSW,assemblyMode); \ - control = QEGVAR(CSW,assemblyModeControl); \ - displayName = ECSTRING(CSW,eden_enableCSW); \ - tooltip = ECSTRING(CSW,eden_enableCSW_tooltip); \ - expression = QUOTE( if (_value != 3) then {_this setVariable [ARR_3('%s',_value,true)]} ); \ - typeName = "NUMBER"; \ - condition = "objectVehicle"; \ - defaultValue = 3; \ - }; \ - } From a5a3fe4232de1f8fcf0480846a6bc00d825999de Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Tue, 2 Apr 2024 17:15:06 +0200 Subject: [PATCH 23/50] CSW - Deploy & pickup CSW parts only if they are not destroyed (#9905) Deploy & pickup CSW parts only if they are not destroyed --- addons/csw/functions/fnc_assemble_canPickupWeapon.sqf | 2 +- addons/csw/functions/fnc_assemble_deployWeapon.sqf | 3 ++- addons/csw/functions/fnc_assemble_pickupTripod.sqf | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/addons/csw/functions/fnc_assemble_canPickupWeapon.sqf b/addons/csw/functions/fnc_assemble_canPickupWeapon.sqf index 40c6b527d3..6217d769dd 100644 --- a/addons/csw/functions/fnc_assemble_canPickupWeapon.sqf +++ b/addons/csw/functions/fnc_assemble_canPickupWeapon.sqf @@ -22,4 +22,4 @@ private _assemblyMode = [false, true, true, GVAR(defaultAssemblyMode)] select (_ private _notCrewed = (crew _staticWeapon) isEqualTo []; private _deadCrew = !(alive (gunner _staticWeapon)); // need to eject body??? -_assemblyMode && {_notCrewed || _deadCrew} +_assemblyMode && {alive _staticWeapon} && {_notCrewed || _deadCrew} diff --git a/addons/csw/functions/fnc_assemble_deployWeapon.sqf b/addons/csw/functions/fnc_assemble_deployWeapon.sqf index 772cad65d4..88f999cf03 100644 --- a/addons/csw/functions/fnc_assemble_deployWeapon.sqf +++ b/addons/csw/functions/fnc_assemble_deployWeapon.sqf @@ -69,7 +69,8 @@ private _codeCheck = { params ["_args"]; _args params ["_tripod"]; - !isNull _tripod; + + alive _tripod }; [TIME_PROGRESSBAR(_deployTime), [_tripod, _player, _assembledClassname, _carryWeaponClassname], _onFinish, _onFailure, localize LSTRING(AssembleCSW_progressBar), _codeCheck] call EFUNC(common,progressBar); diff --git a/addons/csw/functions/fnc_assemble_pickupTripod.sqf b/addons/csw/functions/fnc_assemble_pickupTripod.sqf index d85f9a3f83..6a3a0404ed 100644 --- a/addons/csw/functions/fnc_assemble_pickupTripod.sqf +++ b/addons/csw/functions/fnc_assemble_pickupTripod.sqf @@ -37,7 +37,7 @@ params ["_args"]; _args params ["_tripod", "_player"]; - !(isNull _tripod) && { (secondaryWeapon _player) isEqualTo "" } + (alive _tripod) && { (secondaryWeapon _player) isEqualTo "" } }; From 316bb355adc31395d0a2ae86aca659ae793a6d57 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Tue, 2 Apr 2024 17:22:45 +0200 Subject: [PATCH 24/50] CSW - Minor code cleanup (#9902) CSW minor code cleanup --- addons/csw/functions/fnc_ai_reload.sqf | 2 +- .../functions/fnc_assemble_deployTripod.sqf | 4 +-- .../functions/fnc_assemble_deployWeapon.sqf | 9 ++++-- .../functions/fnc_assemble_pickupTripod.sqf | 9 +++--- .../functions/fnc_assemble_pickupWeapon.sqf | 30 ++++++++++++------- addons/csw/functions/fnc_getLoadActions.sqf | 4 +-- addons/csw/functions/fnc_getUnloadActions.sqf | 7 +++-- addons/csw/functions/fnc_initVehicle.sqf | 8 ++--- .../fnc_reload_getLoadableMagazines.sqf | 2 +- .../csw/functions/fnc_reload_loadMagazine.sqf | 7 +++-- 10 files changed, 48 insertions(+), 34 deletions(-) diff --git a/addons/csw/functions/fnc_ai_reload.sqf b/addons/csw/functions/fnc_ai_reload.sqf index d472233bcf..4d6234f94a 100644 --- a/addons/csw/functions/fnc_ai_reload.sqf +++ b/addons/csw/functions/fnc_ai_reload.sqf @@ -40,7 +40,7 @@ private _nearSupplies = [_gunner] + ((_staticWeapon nearSupplies 10) select { } forEach ((magazineCargo _xSource) select {isClass (_cfgMagGroups >> _x)}); TRACE_2("",_xSource,_cswMagazines); - private _compatibleMags = [_weapon] call CBA_fnc_compatibleMagazines; + private _compatibleMags = compatibleMagazines _weapon; if (_magazine != "") then { _compatibleMags insert [0, [_magazine]]; }; diff --git a/addons/csw/functions/fnc_assemble_deployTripod.sqf b/addons/csw/functions/fnc_assemble_deployTripod.sqf index 9c2f3ef725..da2ed56c04 100644 --- a/addons/csw/functions/fnc_assemble_deployTripod.sqf +++ b/addons/csw/functions/fnc_assemble_deployTripod.sqf @@ -23,7 +23,7 @@ private _secondaryWeaponClassname = secondaryWeapon _player; // handle loaded launchers which can become csw like CUP Metis private _secondaryWeaponMagazine = secondaryWeaponMagazine _player param [0, ""]; - _player removeWeaponGlobal (secondaryWeapon _player); + _player removeWeaponGlobal _secondaryWeaponClassname; private _onFinish = { params ["_args"]; @@ -75,5 +75,5 @@ }; private _deployTime = getNumber(configFile >> "CfgWeapons" >> _secondaryWeaponClassname >> QUOTE(ADDON) >> "deployTime"); - [TIME_PROGRESSBAR(_deployTime), [_player, _secondaryWeaponClassname, _secondaryWeaponMagazine], _onFinish, _onFailure, localize LSTRING(PlaceTripod_progressBar)] call EFUNC(common,progressBar); + [TIME_PROGRESSBAR(_deployTime), [_player, _secondaryWeaponClassname, _secondaryWeaponMagazine], _onFinish, _onFailure, LLSTRING(PlaceTripod_progressBar)] call EFUNC(common,progressBar); }, _this] call CBA_fnc_execNextFrame; diff --git a/addons/csw/functions/fnc_assemble_deployWeapon.sqf b/addons/csw/functions/fnc_assemble_deployWeapon.sqf index 88f999cf03..b9f8029bc2 100644 --- a/addons/csw/functions/fnc_assemble_deployWeapon.sqf +++ b/addons/csw/functions/fnc_assemble_deployWeapon.sqf @@ -23,10 +23,13 @@ private _tripodClassname = typeOf _tripod; _player removeWeaponGlobal _carryWeaponClassname; - private _assembledClassname = getText(configfile >> "CfgWeapons" >> _carryWeaponClassname >> QUOTE(ADDON) >> "assembleTo" >> _tripodClassname); - private _deployTime = getNumber(configfile >> "CfgWeapons" >> _carryWeaponClassname >> QUOTE(ADDON) >> "deployTime"); + private _weaponConfig = configfile >> "CfgWeapons" >> _carryWeaponClassname >> QUOTE(ADDON); + private _assembledClassname = getText (_weaponConfig >> "assembleTo" >> _tripodClassname); + if (!isClass (configFile >> "CfgVehicles" >> _assembledClassname)) exitWith {ERROR_1("bad static classname [%1]",_assembledClassname);}; + private _deployTime = getNumber (_weaponConfig >> "deployTime"); + TRACE_4("",_carryWeaponClassname,_tripodClassname,_assembledClassname,_deployTime); private _onFinish = { @@ -73,5 +76,5 @@ alive _tripod }; - [TIME_PROGRESSBAR(_deployTime), [_tripod, _player, _assembledClassname, _carryWeaponClassname], _onFinish, _onFailure, localize LSTRING(AssembleCSW_progressBar), _codeCheck] call EFUNC(common,progressBar); + [TIME_PROGRESSBAR(_deployTime), [_tripod, _player, _assembledClassname, _carryWeaponClassname], _onFinish, _onFailure, LLSTRING(AssembleCSW_progressBar), _codeCheck] call EFUNC(common,progressBar); }, _this] call CBA_fnc_execNextFrame; diff --git a/addons/csw/functions/fnc_assemble_pickupTripod.sqf b/addons/csw/functions/fnc_assemble_pickupTripod.sqf index 6a3a0404ed..176718f015 100644 --- a/addons/csw/functions/fnc_assemble_pickupTripod.sqf +++ b/addons/csw/functions/fnc_assemble_pickupTripod.sqf @@ -20,8 +20,8 @@ params ["_tripod", "_player"]; TRACE_2("assemble_pickupTripod",_tripod,_player); - private _tripodClassname = getText(configOf _tripod >> QUOTE(ADDON) >> "disassembleTo"); - private _pickupTime = getNumber(configFile >> "CfgWeapons" >> _tripodClassname >> QUOTE(ADDON) >> "pickupTime"); + private _tripodClassname = getText (configOf _tripod >> QUOTE(ADDON) >> "disassembleTo"); + private _pickupTime = getNumber (configFile >> "CfgWeapons" >> _tripodClassname >> QUOTE(ADDON) >> "pickupTime"); private _onFinish = { params ["_args"]; @@ -37,10 +37,9 @@ params ["_args"]; _args params ["_tripod", "_player"]; - (alive _tripod) && { (secondaryWeapon _player) isEqualTo "" } - + (alive _tripod) && {secondaryWeapon _player == ""} }; TRACE_3("",_pickupTime,typeOf _tripod,_tripodClassname); - [TIME_PROGRESSBAR(_pickupTime), [_tripod, _player, _tripodClassname], _onFinish, {}, localize LSTRING(PickupTripod_progressBar), _condition] call EFUNC(common,progressBar); + [TIME_PROGRESSBAR(_pickupTime), [_tripod, _player, _tripodClassname], _onFinish, {}, LLSTRING(PickupTripod_progressBar), _condition] call EFUNC(common,progressBar); }, _this] call CBA_fnc_execNextFrame; diff --git a/addons/csw/functions/fnc_assemble_pickupWeapon.sqf b/addons/csw/functions/fnc_assemble_pickupWeapon.sqf index 4ee01931db..3034e2260c 100644 --- a/addons/csw/functions/fnc_assemble_pickupWeapon.sqf +++ b/addons/csw/functions/fnc_assemble_pickupWeapon.sqf @@ -19,14 +19,24 @@ params ["_staticWeapon", "_player"]; TRACE_2("assemble_pickupWeapon",_staticWeapon,_player); - private _onDisassembleFunc = getText(configOf _staticWeapon >> QUOTE(ADDON) >> "disassembleFunc"); - private _carryWeaponClassname = getText(configOf _staticWeapon >> QUOTE(ADDON) >> "disassembleWeapon"); - private _turretClassname = getText(configOf _staticWeapon >> QUOTE(ADDON) >> "disassembleTurret"); - private _pickupTime = getNumber(configFile >> "CfgWeapons" >> _carryWeaponClassname >> QUOTE(ADDON) >> "pickupTime"); - TRACE_4("",typeOf _staticWeapon,_carryWeaponClassname,_turretClassname,_pickupTime); - if (!isClass (configFile >> "CfgWeapons" >> _carryWeaponClassname)) exitWith {ERROR_1("bad weapon classname [%1]",_carryWeaponClassname);}; + private _weaponConfig = configOf _staticWeapon >> QUOTE(ADDON); + private _carryWeaponClassname = getText (_weaponConfig >> "disassembleWeapon"); + + if (!isClass (configFile >> "CfgWeapons" >> _carryWeaponClassname)) exitWith { + ERROR_1("bad weapon classname [%1]",_carryWeaponClassname); + }; + + private _turretClassname = getText (_weaponConfig >> "disassembleTurret"); + // Turret classname can equal nothing if the deploy bag is the "whole" weapon. e.g Kornet, Metis, other ATGMs - if ((_turretClassname isNotEqualTo "") && {!isClass (configFile >> "CfgVehicles" >> _turretClassname)}) exitWith {ERROR_1("bad turret classname [%1]",_turretClassname);}; + if ((_turretClassname != "") && {!isClass (configFile >> "CfgVehicles" >> _turretClassname)}) exitWith { + ERROR_1("bad turret classname [%1]",_turretClassname); + }; + + private _onDisassembleFunc = getText (_weaponConfig >> "disassembleFunc"); + + private _pickupTime = getNumber (configFile >> "CfgWeapons" >> _carryWeaponClassname >> QUOTE(ADDON) >> "pickupTime"); + TRACE_4("",typeOf _staticWeapon,_carryWeaponClassname,_turretClassname,_pickupTime); private _onFinish = { params ["_args"]; @@ -38,14 +48,14 @@ private _weaponDir = getDir _staticWeapon; private _carryWeaponMag = ""; - private _carryWeaponMags = getArray (configFile >> "CfgWeapons" >> _carryWeaponClassname >> "magazines") apply {toLowerANSI _x}; + private _carryWeaponMags = compatibleMagazines _carryWeaponClassname; LOG("remove ammo"); { _x params ["_xMag", "", "_xAmmo"]; if (_xAmmo == 0) then {continue}; private _carryMag = _xMag call FUNC(getCarryMagazine); - if (_carryWeaponMag isEqualTo "" && {toLowerANSI _carryMag in _carryWeaponMags}) then { + if (_carryWeaponMag == "" && {_carryMag in _carryWeaponMags}) then { TRACE_3("Adding mag to secondary weapon",_xMag,_xAmmo,_carryMag); _carryWeaponMag = _carryMag; DEC(_xAmmo); @@ -100,5 +110,5 @@ ((crew _staticWeapon) isEqualTo []) && (alive _staticWeapon) }; - [TIME_PROGRESSBAR(_pickupTime), [_staticWeapon, _player, _carryWeaponClassname, _turretClassname, _onDisassembleFunc], _onFinish, {}, localize LSTRING(DisassembleCSW_progressBar), _condition] call EFUNC(common,progressBar); + [TIME_PROGRESSBAR(_pickupTime), [_staticWeapon, _player, _carryWeaponClassname, _turretClassname, _onDisassembleFunc], _onFinish, {}, LLSTRING(DisassembleCSW_progressBar), _condition] call EFUNC(common,progressBar); }, _this] call CBA_fnc_execNextFrame; diff --git a/addons/csw/functions/fnc_getLoadActions.sqf b/addons/csw/functions/fnc_getLoadActions.sqf index 456362a3b6..e505c7f50f 100644 --- a/addons/csw/functions/fnc_getLoadActions.sqf +++ b/addons/csw/functions/fnc_getLoadActions.sqf @@ -44,9 +44,9 @@ private _actions = []; private _displayName = getText (_cfgMagazines >> _carryMag >> "displayName"); private _picture = getText (_cfgMagazines >> _carryMag >> "picture"); private _text = if (_isBeltLinking) then { - format [localize LSTRING(actionLink), _displayName]; + format [LLSTRING(actionLink), _displayName]; } else { - format [localize LSTRING(loadX), _displayName]; + format [LLSTRING(loadX), _displayName]; }; private _action = [format ["load_%1", _forEachIndex], _text, _picture, _statement, _condition, {}, _x] call EFUNC(interact_menu,createAction); diff --git a/addons/csw/functions/fnc_getUnloadActions.sqf b/addons/csw/functions/fnc_getUnloadActions.sqf index 32d9cc091a..dd119b0622 100644 --- a/addons/csw/functions/fnc_getUnloadActions.sqf +++ b/addons/csw/functions/fnc_getUnloadActions.sqf @@ -23,8 +23,9 @@ private _statement = { TRACE_5("starting unload",_target,_turretPath,_player,_carryMag,_vehMag); private _timeToUnload = 1; - if (!isNull (configOf _target >> QUOTE(ADDON) >> "ammoUnloadTime")) then { - _timeToUnload = getNumber (configOf _target >> QUOTE(ADDON) >> "ammoUnloadTime"); + private _config = configOf _target >> QUOTE(ADDON) >> "ammoUnloadTime"; + if (!isNull _config) then { + _timeToUnload = getNumber _config; }; [ @@ -36,7 +37,7 @@ private _statement = { [QGVAR(removeTurretMag), [_target, _turretPath, _carryMag, _vehMag, _player]] call CBA_fnc_globalEvent; }, {TRACE_1("unload progressBar fail",_this);}, - format [localize LSTRING(unloadX), getText (configFile >> "CfgMagazines" >> _carryMag >> "displayName")], + format [LLSTRING(unloadX), getText (configFile >> "CfgMagazines" >> _carryMag >> "displayName")], {(_this select 0) call FUNC(reload_canUnloadMagazine)}, ["isNotInside"] ] call EFUNC(common,progressBar); diff --git a/addons/csw/functions/fnc_initVehicle.sqf b/addons/csw/functions/fnc_initVehicle.sqf index ed882e435c..2d7241029f 100644 --- a/addons/csw/functions/fnc_initVehicle.sqf +++ b/addons/csw/functions/fnc_initVehicle.sqf @@ -66,7 +66,7 @@ if (hasInterface && {!(_typeOf in GVAR(initializedStaticTypes))}) then { TRACE_1("Adding Actions",_typeOf); if (_assemblyConfig) then { - private _disassembleAction = [QGVAR(disassemble), localize LSTRING(DisassembleCSW_displayName), "", {call FUNC(assemble_pickupWeapon)}, {call FUNC(assemble_canPickupWeapon)}] call EFUNC(interact_menu,createAction); + private _disassembleAction = [QGVAR(disassemble), LLSTRING(DisassembleCSW_displayName), "", LINKFUNC(assemble_pickupWeapon), LINKFUNC(assemble_canPickupWeapon)] call EFUNC(interact_menu,createAction); [_typeOf, 0, ["ACE_MainActions"], _disassembleAction] call EFUNC(interact_menu,addActionToClass); }; @@ -86,17 +86,17 @@ if (hasInterface && {!(_typeOf in GVAR(initializedStaticTypes))}) then { }; if (_configEnabled && {_magazineLocation != ""}) then { private _positionCode = compile _magazineLocation; - private _ammoAction = [QGVAR(magazine), localize LSTRING(AmmoHandling_displayName), "", {}, _condition, _childenCode, [], _positionCode, 4] call EFUNC(interact_menu,createAction); + private _ammoAction = [QGVAR(magazine), LLSTRING(AmmoHandling_displayName), "", {}, _condition, _childenCode, [], _positionCode, 4] call EFUNC(interact_menu,createAction); _ammoActionPath = [_typeOf, 0, [], _ammoAction] call EFUNC(interact_menu,addActionToClass); } else { - private _ammoAction = [QGVAR(magazine), localize LSTRING(AmmoHandling_displayName), "", {}, _condition, _childenCode] call EFUNC(interact_menu,createAction); + private _ammoAction = [QGVAR(magazine), LLSTRING(AmmoHandling_displayName), "", {}, _condition, _childenCode] call EFUNC(interact_menu,createAction); _ammoActionPath = [_typeOf, 0, ["ACE_MainActions"], _ammoAction] call EFUNC(interact_menu,addActionToClass); }; if (["ace_reload"] call EFUNC(common,isModLoaded)) then { // move reload's check ammo action to the ammo handling point (remove and re-add) [_typeOf, 0, ["ACE_MainActions", QEGVAR(reload,CheckAmmo)]] call EFUNC(interact_menu,removeActionFromClass); - private _checkAmmoAction = [QGVAR(checkAmmo), localize ELSTRING(reload,checkAmmo), "", EFUNC(reload,checkAmmo), EFUNC(reload,canCheckAmmo)] call EFUNC(interact_menu,createAction); + private _checkAmmoAction = [QGVAR(checkAmmo), LELSTRING(reload,checkAmmo), "", EFUNC(reload,checkAmmo), EFUNC(reload,canCheckAmmo)] call EFUNC(interact_menu,createAction); [_typeOf, 0, _ammoActionPath, _checkAmmoAction] call EFUNC(interact_menu,addActionToClass); }; }; diff --git a/addons/csw/functions/fnc_reload_getLoadableMagazines.sqf b/addons/csw/functions/fnc_reload_getLoadableMagazines.sqf index 933625fb89..724ee4d09c 100644 --- a/addons/csw/functions/fnc_reload_getLoadableMagazines.sqf +++ b/addons/csw/functions/fnc_reload_getLoadableMagazines.sqf @@ -70,7 +70,7 @@ private _return = []; ) exitWith { _return pushBack [_carryMag, _turretPath, _loadInfo, _magSource]; }; - } forEach ([_weapon] call CBA_fnc_compatibleMagazines); + } forEach (compatibleMagazines _weapon); } forEach _availableMagazines; } forEach (_vehicle weaponsTurret _turretPath); } forEach (allTurrets _vehicle); diff --git a/addons/csw/functions/fnc_reload_loadMagazine.sqf b/addons/csw/functions/fnc_reload_loadMagazine.sqf index 9526b5adb8..50081a87a5 100644 --- a/addons/csw/functions/fnc_reload_loadMagazine.sqf +++ b/addons/csw/functions/fnc_reload_loadMagazine.sqf @@ -23,11 +23,12 @@ params ["_vehicle", "_turret", "_carryMag", "_magSource", "_unit"]; TRACE_5("loadMagazine",_vehicle,_turret,_carryMag,_magSource,_unit); private _timeToLoad = 1; -if (!isNull(configOf _vehicle >> QUOTE(ADDON) >> "ammoLoadTime")) then { - _timeToLoad = getNumber(configOf _vehicle >> QUOTE(ADDON) >> "ammoLoadTime"); +private _config = configOf _vehicle >> QUOTE(ADDON) >> "ammoLoadTime"; +if (!isNull _config) then { + _timeToLoad = getNumber _config; }; -private _displayName = format [localize LSTRING(loadX), getText (configFile >> "CfgMagazines" >> _carryMag >> "displayName")]; +private _displayName = format [LLSTRING(loadX), getText (configFile >> "CfgMagazines" >> _carryMag >> "displayName")]; private _onFinish = { (_this select 0) params ["_vehicle", "_turret", "_carryMag", "_magSource", "_unit"]; From 0375d0dae6b582007bc01520890bdf62313fe96f Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Tue, 2 Apr 2024 21:37:30 +0200 Subject: [PATCH 25/50] CSW - Fix CUP CSW (#9907) * Update CfgWeapons.hpp * Update other CUP weapons * Update addons/compat_cup_weapons/compat_cup_weapons_csw/CfgWeapons.hpp --- .../compat_cup_weapons_csw/CfgWeapons.hpp | 37 +++++++++---------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/addons/compat_cup_weapons/compat_cup_weapons_csw/CfgWeapons.hpp b/addons/compat_cup_weapons/compat_cup_weapons_csw/CfgWeapons.hpp index 3e16233568..9ff8519ce1 100644 --- a/addons/compat_cup_weapons/compat_cup_weapons_csw/CfgWeapons.hpp +++ b/addons/compat_cup_weapons/compat_cup_weapons_csw/CfgWeapons.hpp @@ -15,7 +15,7 @@ class CfgWeapons { deployTime = 20; pickupTime = 25; class assembleTo { - ace_csw_mortarBaseplate = "CUP_O_2b14_82mm_RU"; + ace_csw_mortarBaseplate = "CUP_I_2b14_82mm_AAF"; }; }; class WeaponSlotsInfo: WeaponSlotsInfo { @@ -31,7 +31,7 @@ class CfgWeapons { picture = "\CUP\Weapons\CUP_Weapons_StaticWeapons\M252\data\ui\icomap_mortar_m251_ca.paa"; class ace_csw: ace_csw { class assembleTo { - ace_csw_mortarBaseplate = "CUP_B_M252_US"; + ace_csw_mortarBaseplate = "CUP_I_M252_AAF"; }; }; }; @@ -42,7 +42,7 @@ class CfgWeapons { picture = "\CUP\Weapons\CUP_Weapons_StaticWeapons\M252\data\ui\icomap_mortar_m251_ca.paa"; class ace_csw: ace_csw { class assembleTo { - ace_csw_mortarBaseplate = "CUP_B_L16A2_BAF_MPT"; + ace_csw_mortarBaseplate = "CUP_I_L16A2_AAF"; }; }; }; @@ -58,8 +58,8 @@ class CfgWeapons { deployTime = 4; pickupTime = 4; class assembleTo { - ace_csw_m3Tripod = "CUP_B_M2StaticMG_US"; - ace_csw_m3TripodLow = "CUP_B_M2StaticMG_MiniTripod_US"; + ace_csw_m3Tripod = "CUP_I_M2StaticMG_AAF"; + ace_csw_m3TripodLow = "CUP_I_M2StaticMG_MiniTripod_AAF"; }; }; class WeaponSlotsInfo: WeaponSlotsInfo { @@ -81,8 +81,8 @@ class CfgWeapons { deployTime = 4; pickupTime = 4; class assembleTo { - ace_csw_kordTripod = "CUP_O_DSHKM_ChDKZ"; - ace_csw_kordTripodLow = "CUP_O_DSHkM_MiniTriPod_ChDKZ"; + ace_csw_kordTripod = "CUP_I_DSHKM_AAF"; + ace_csw_kordTripodLow = "CUP_I_DSHKM_MiniTriPod_AAF"; }; }; class WeaponSlotsInfo: WeaponSlotsInfo { @@ -104,8 +104,8 @@ class CfgWeapons { deployTime = 4; pickupTime = 4; class assembleTo { - ace_csw_kordTripod = "CUP_O_KORD_high_RU"; - ace_csw_kordTripodLow = "CUP_O_KORD_RU"; + ace_csw_kordTripod = "CUP_I_KORD_high_AAF"; + ace_csw_kordTripodLow = "CUP_I_KORD_AAF"; }; }; class WeaponSlotsInfo: WeaponSlotsInfo { @@ -127,7 +127,7 @@ class CfgWeapons { deployTime = 4; pickupTime = 4; class assembleTo { - ace_csw_sag30Tripod = "CUP_O_AGS_RU"; + ace_csw_sag30Tripod = "CUP_I_AGS_AAF"; }; }; class WeaponSlotsInfo: WeaponSlotsInfo { @@ -149,7 +149,7 @@ class CfgWeapons { deployTime = 4; pickupTime = 4; class assembleTo { - ace_csw_m3TripodLow = "CUP_B_MK19_TriPod_US"; + ace_csw_m3TripodLow = "CUP_I_MK19_TriPod_AAF"; }; }; class WeaponSlotsInfo: WeaponSlotsInfo { @@ -168,7 +168,7 @@ class CfgWeapons { type = "mount"; deployTime = 4; pickupTime = 4; - deploy = "CUP_O_Metis_RU"; + deploy = "CUP_I_Metis_AAF"; }; class WeaponSlotsInfo: WeaponSlotsInfo { mass = 300; @@ -186,7 +186,7 @@ class CfgWeapons { deployTime = 4; pickupTime = 4; class assembleTo { - ace_csw_m220Tripod = "CUP_B_TOW_TriPod_US"; + ace_csw_m220Tripod = "CUP_I_TOW_TriPod_AAF"; }; }; class WeaponSlotsInfo: WeaponSlotsInfo { @@ -200,7 +200,7 @@ class CfgWeapons { class CUP_TOW2_carry: CUP_TOW_carry { class ace_csw: ace_csw { class assembleTo { - ace_csw_m220Tripod = "CUP_B_TOW2_TriPod_US"; + ace_csw_m220Tripod = "CUP_I_TOW2_TriPod_AAF"; }; }; }; @@ -216,7 +216,7 @@ class CfgWeapons { deployTime = 4; pickupTime = 4; class assembleTo { - ace_csw_spg9Tripod = "CUP_B_SPG9_CDF"; + ace_csw_spg9Tripod = "CUP_I_SPG9_AAF"; }; }; class WeaponSlotsInfo: WeaponSlotsInfo { @@ -257,12 +257,12 @@ class CfgWeapons { magazineReloadTime = 0.5; }; - class CUP_Vmlauncher_AT13_single_veh; + class CUP_Vmlauncher_AT13_single_veh; class CUP_proxy_AT13: CUP_Vmlauncher_AT13_single_veh { magazineReloadTime = 0.5; }; - class CUP_Vmlauncher_TOW_single_veh; + class CUP_Vmlauncher_TOW_single_veh; class CUP_proxy_TOW: CUP_Vmlauncher_TOW_single_veh { magazineReloadTime = 0.5; }; @@ -272,7 +272,7 @@ class CfgWeapons { magazineReloadTime = 0.5; }; - class CUP_Vcannon_M119_veh; + class CUP_Vcannon_M119_veh; class CUP_proxy_M119: CUP_Vcannon_M119_veh { magazineReloadTime = 0.5; }; @@ -287,4 +287,3 @@ class CfgWeapons { magazineReloadTime = 0.5; }; }; - From cc3fbc5f3fd911d590f3c599b275729845c435fe Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Tue, 2 Apr 2024 22:46:14 +0200 Subject: [PATCH 26/50] Cargo - Fix undefined variable (#9909) Update fnc_initVehicle.sqf --- addons/cargo/functions/fnc_initVehicle.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/cargo/functions/fnc_initVehicle.sqf b/addons/cargo/functions/fnc_initVehicle.sqf index ec432ea91f..4ca004b94e 100644 --- a/addons/cargo/functions/fnc_initVehicle.sqf +++ b/addons/cargo/functions/fnc_initVehicle.sqf @@ -22,11 +22,11 @@ private _type = typeOf _vehicle; private _config = configOf _vehicle; // If vehicle had space given to it via eden/public, then override config hasCargo setting -private _hasCargoPublic = _item getVariable QGVAR(hasCargo); +private _hasCargoPublic = _vehicle getVariable QGVAR(hasCargo); private _hasCargoPublicDefined = !isNil "_canLoadPublic"; if (_hasCargoPublicDefined && {!(_hasCargoPublic isEqualType false)}) then { - WARNING_4("%1[%2] - Variable %3 is %4 - Should be bool",_item,_type,QGVAR(hasCargo),_hasCargoPublic); + WARNING_4("%1[%2] - Variable %3 is %4 - Should be bool",_vehicle,_type,QGVAR(hasCargo),_hasCargoPublic); }; private _hasCargoConfig = getNumber (_config >> QGVAR(hasCargo)) == 1; From 613fc363850435b4af1b951a284453e66ab55abc Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Tue, 2 Apr 2024 23:07:45 +0200 Subject: [PATCH 27/50] Common - Use existing weapon holders for `FUNC(addToInventory)` (#9895) * Reuse existing weapon holders * Update fnc_addToInventory.sqf * Return correct weapon holder --- .../common/functions/fnc_addToInventory.sqf | 39 +++++++++++-------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/addons/common/functions/fnc_addToInventory.sqf b/addons/common/functions/fnc_addToInventory.sqf index dd561ac09e..9902abe82b 100644 --- a/addons/common/functions/fnc_addToInventory.sqf +++ b/addons/common/functions/fnc_addToInventory.sqf @@ -1,7 +1,7 @@ #include "..\script_component.hpp" /* * Author: Garth 'L-H' de Wet - * Adds an item, weapon, or magazine to the unit's inventory or places it in a weaponHolder if no space. + * Adds an item, weapon, or magazine to the unit's inventory or places it in a weapon holder if no space. * * Arguments: * 0: Unit @@ -11,10 +11,10 @@ * * Return Value: * 0: Added to player - * 1: weaponholder + * 1: Weapon holder item was placed in * * Example: - * [bob, "classname", "", 5] call ace_common_fnc_addToInventory + * [player, "30Rnd_65x39_caseless_mag", "", 5] call ace_common_fnc_addToInventory * * Public: Yes */ @@ -26,6 +26,7 @@ private _type = _classname call FUNC(getItemType); private _canAdd = false; private _canFitWeaponSlot = false; private _addedToUnit = false; +private _weaponHolder = _unit; switch (_container) do { case "vest": { @@ -94,11 +95,13 @@ switch (_type select 0) do { } else { _addedToUnit = false; - private _pos = _unit modelToWorldVisual [0,1,0.05]; + _weaponHolder = nearestObject [_unit, "WeaponHolder"]; - _unit = createVehicle ["WeaponHolder_Single_F", _pos, [], 0, "NONE"]; - _unit addWeaponCargoGlobal [_classname, 1]; - _unit setPosATL _pos; + if (isNull _weaponHolder || {_unit distance _weaponHolder > 2}) then { + _weaponHolder = createVehicle ["GroundWeaponHolder", _unit, [], 0, "CAN_COLLIDE"]; + }; + + _weaponHolder addWeaponCargoGlobal [_classname, 1]; }; }; @@ -127,11 +130,13 @@ switch (_type select 0) do { } else { _addedToUnit = false; - private _pos = _unit modelToWorldVisual [0,1,0.05]; + _weaponHolder = nearestObject [_unit, "WeaponHolder"]; - _unit = createVehicle ["WeaponHolder_Single_F", _pos, [], 0, "NONE"]; - _unit addMagazineAmmoCargo [_classname, 1, _ammoCount]; - _unit setPosATL _pos; + if (isNull _weaponHolder || {_unit distance _weaponHolder > 2}) then { + _weaponHolder = createVehicle ["GroundWeaponHolder", _unit, [], 0, "CAN_COLLIDE"]; + }; + + _weaponHolder addMagazineAmmoCargo [_classname, 1, _ammoCount]; }; }; @@ -156,11 +161,13 @@ switch (_type select 0) do { } else { _addedToUnit = false; - private _pos = _unit modelToWorldVisual [0,1,0.05]; + _weaponHolder = nearestObject [_unit, "WeaponHolder"]; - _unit = createVehicle ["WeaponHolder_Single_F", _pos, [], 0, "NONE"]; - _unit addItemCargoGlobal [_classname, 1]; - _unit setPosATL _pos; + if (isNull _weaponHolder || {_unit distance _weaponHolder > 2}) then { + _weaponHolder = createVehicle ["GroundWeaponHolder", _unit, [], 0, "CAN_COLLIDE"]; + }; + + _weaponHolder addItemCargoGlobal [_classname, 1]; }; }; @@ -170,4 +177,4 @@ switch (_type select 0) do { }; }; -[_addedToUnit, _unit] +[_addedToUnit, _weaponHolder] From 19e006473002dde0c483f5ddd5ff361a8824c8ef Mon Sep 17 00:00:00 2001 From: BrettMayson Date: Tue, 2 Apr 2024 17:07:03 -0700 Subject: [PATCH 28/50] Medical - Fix typo caridac to cardiac (#9900) --- addons/medical_engine/XEH_preInit.sqf | 2 +- addons/medical_engine/script_macros_medical.hpp | 4 ++-- addons/medical_status/functions/fnc_getBloodLoss.sqf | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/medical_engine/XEH_preInit.sqf b/addons/medical_engine/XEH_preInit.sqf index a7221ce1c1..b0304f167f 100644 --- a/addons/medical_engine/XEH_preInit.sqf +++ b/addons/medical_engine/XEH_preInit.sqf @@ -19,7 +19,7 @@ if (isNil QUOTE(BLOOD_LOSS_KNOCK_OUT_THRESHOLD)) then {BLOOD_LOSS_KNOCK_OUT_THRE if (isNil QUOTE(PAIN_FADE_TIME)) then {PAIN_FADE_TIME = PAIN_FADE_TIME_DEFAULT}; if (isNil QUOTE(LIMPING_DAMAGE_THRESHOLD)) then {LIMPING_DAMAGE_THRESHOLD = LIMPING_DAMAGE_THRESHOLD_DEFAULT}; if (isNil QUOTE(FRACTURE_DAMAGE_THRESHOLD)) then {FRACTURE_DAMAGE_THRESHOLD = FRACTURE_DAMAGE_THRESHOLD_DEFAULT}; -if (isNil QUOTE(CARIDAC_OUTPUT_MIN)) then {CARIDAC_OUTPUT_MIN = CARIDAC_OUTPUT_MIN_DEFAULT}; +if (isNil QUOTE(CARDIAC_OUTPUT_MIN)) then {CARDIAC_OUTPUT_MIN = CARDIAC_OUTPUT_MIN_DEFAULT}; // Derive the alternate fatal damage coefficents if (isNil QUOTE(FATAL_SUM_DAMAGE_WEIBULL_K) || isNil QUOTE(FATAL_SUM_DAMAGE_WEIBULL_L)) then { private _x1 = 0.5; diff --git a/addons/medical_engine/script_macros_medical.hpp b/addons/medical_engine/script_macros_medical.hpp index f789caec9e..167765c576 100644 --- a/addons/medical_engine/script_macros_medical.hpp +++ b/addons/medical_engine/script_macros_medical.hpp @@ -109,8 +109,8 @@ #define FRACTURE_DAMAGE_THRESHOLD_DEFAULT 0.50 // Minimum cardiac output -#define CARIDAC_OUTPUT_MIN EGVAR(medical,const_minCardiacOutput) -#define CARIDAC_OUTPUT_MIN_DEFAULT 0.05 +#define CARDIAC_OUTPUT_MIN EGVAR(medical,const_minCardiacOutput) +#define CARDIAC_OUTPUT_MIN_DEFAULT 0.05 // Minimum body part damage required for blood effect on uniform #define VISUAL_BODY_DAMAGE_THRESHOLD 0.35 diff --git a/addons/medical_status/functions/fnc_getBloodLoss.sqf b/addons/medical_status/functions/fnc_getBloodLoss.sqf index d1adbb9864..fd02f9042b 100644 --- a/addons/medical_status/functions/fnc_getBloodLoss.sqf +++ b/addons/medical_status/functions/fnc_getBloodLoss.sqf @@ -23,4 +23,4 @@ if (_woundBleeding == 0) exitWith {0}; private _cardiacOutput = [_unit] call FUNC(getCardiacOutput); // even if heart stops blood will still flow slowly (gravity) -(_woundBleeding * (_cardiacOutput max CARIDAC_OUTPUT_MIN) * EGVAR(medical,bleedingCoefficient)) +(_woundBleeding * (_cardiacOutput max CARDIAC_OUTPUT_MIN) * EGVAR(medical,bleedingCoefficient)) From 020d21d5622c047b1ae0f22e0cfdd8180725290f Mon Sep 17 00:00:00 2001 From: Hexo <130893962+Alfred-Neuman@users.noreply.github.com> Date: Wed, 3 Apr 2024 06:04:56 +0200 Subject: [PATCH 29/50] Translate - French (#9908) * Translate - French * Translate - French - overheating * Translate -French - compat_sog * Update stringtable.xml * Translate - French * Fix - Translate French Minor correction --- addons/arsenal/stringtable.xml | 1 + addons/cargo/stringtable.xml | 5 +++ addons/common/stringtable.xml | 3 ++ addons/compat_sog/stringtable.xml | 38 ++++++++++++++++++++ addons/explosives/stringtable.xml | 4 +++ addons/field_rations/stringtable.xml | 8 +++++ addons/fieldmanual/stringtable.xml | 44 ++++++++++++++++++++++++ addons/hearing/stringtable.xml | 1 + addons/killtracker/stringtable.xml | 1 + addons/medical_gui/stringtable.xml | 3 ++ addons/medical_treatment/stringtable.xml | 6 ++++ addons/medical_vitals/stringtable.xml | 3 ++ addons/overheating/stringtable.xml | 6 ++++ addons/refuel/stringtable.xml | 5 +++ addons/zeus/stringtable.xml | 2 ++ 15 files changed, 130 insertions(+) diff --git a/addons/arsenal/stringtable.xml b/addons/arsenal/stringtable.xml index 48b5876f60..39f7936d58 100644 --- a/addons/arsenal/stringtable.xml +++ b/addons/arsenal/stringtable.xml @@ -1718,6 +1718,7 @@ 検索\nCTRL + クリックで検索結果の即時表示を有効化 검색\nCtrl + 클릭으로 실시간 검색 결과를 활성화 Поиск\nCtrl + Click для включения результатов в реальном времени + Recherche\nCTRL + clic pour modifier les résultats tout en écrivant diff --git a/addons/cargo/stringtable.xml b/addons/cargo/stringtable.xml index a75d25ea55..79ee3f96b5 100644 --- a/addons/cargo/stringtable.xml +++ b/addons/cargo/stringtable.xml @@ -39,6 +39,7 @@ Разместить 配置する 배치하기 + Déployer Raise/Lower | (Ctrl + Scroll) Rotate @@ -285,6 +286,7 @@ %1 を %2 に積み込んでいます・・・ Загружаем %1 в %2... %1을(를) %2에 싣는 중... + Chargement %1 dans %2... Unloading %1 from %2... @@ -293,6 +295,7 @@ %1 を %2 から降ろしています・・・ Выгружаем %1 из %2... %1을(를) %2(으)로부터 내리는 중... + Déchargement %1 de %2... %1<br/>could not be loaded @@ -580,6 +583,7 @@ Включить размещение 配置機能を有効化 배치 활성화 + Permettre le placement Controls whether cargo items can be unloaded via the deploy method. @@ -587,6 +591,7 @@ Определяет, можно ли выгружать грузы с помощью метода размещения. 配置機能を介して貨物アイテムを降ろすことが出来るかどうかを制御します。 배치 방법을 통해 화물 아이템을 내릴 수 있는지 여부를 제어합니다. + Contrôler si les éléments de cargaison peuvent être déchargés via la méthode de déploiement. diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index 60b16a742d..7138c8da95 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -1832,16 +1832,19 @@ Weapon Sway 手ぶれ 무기 흔들림 + Oscillation de l'arme Enable Weapon Sway 手ぶれを有効化 무기 흔들림 추가 + Activer l'oscillation de l'arme Enables weapon sway influenced by sway factors, such as stance, fatigue and medical condition.\nDisabling this setting will defer sway to vanilla or other mods. 姿勢、疲労、負傷状態などの手ぶれ要因に影響を受ける武器照準の揺れを有効にします。\nこの設定を無効にすると、手ぶれの揺れはバニラまたは他のMODの処理に任されます。 흔들림 계수, 자세, 피로도, 건강 상태 등의 요인에 영향을 받는 무기 흔들림을 활성화합니다.\n이 설정을 비활성화하면 바닐라 또는 다른 모드의 흔들림으로 대체됩니다. + Active l'oscillation de l'arme influencé par les facteurs d'oscillation, tels que la position, la fatigue et l'état de santé.\nLa désactivation de ce paramètre reportera l'oscillation à vanilla ou à d'autres mods. Sway factor diff --git a/addons/compat_sog/stringtable.xml b/addons/compat_sog/stringtable.xml index 06f0827d08..fc64aef97c 100644 --- a/addons/compat_sog/stringtable.xml +++ b/addons/compat_sog/stringtable.xml @@ -12,6 +12,7 @@ Закопать Enterrarse Escavar + Creuser M49A2 60mm HE @@ -24,6 +25,7 @@ M49A2 60 мм ОФ M49A2 60mm HE M49A2 60mm HE + M49A2 60mm HE M302 60mm WP @@ -36,6 +38,7 @@ M302 60 мм Фосфорная M302 60mm WP M302 60mm WP + M302 60mm Phosphore Blanc M83 60mm Lume @@ -48,6 +51,7 @@ M83 60 мм Осветительная M83 60mm Iluminación M83 60mm Iluminação + M83 60 mm Eclairant M374 81mm HE @@ -60,6 +64,7 @@ M374 81 мм ОФ M374 81mm HE M374 81mm HE + M374 81mm HE M375 81mm WP @@ -72,6 +77,7 @@ M375 81 мм Фосфорная M375 81mm WP M375 81mm WP + M375 81mm Phosphore Blanc M301A3 81mm Lume @@ -84,6 +90,7 @@ M301A3 81 мм Осветительная M301A3 81mm Iluminación M301A3 81mm Iluminação + M301A3 81mm Eclairant M57 81mm Smoke @@ -96,6 +103,7 @@ M57 81 мм Дымовая M57 81mm Smoke M57 81mm Fumígena + M57 81mm Fumigène O-832D 82mm HE @@ -108,6 +116,7 @@ О-832Д 82 мм ОФ O-832D 82mm HE O-832D 82mm HE + O-832D 82mm HE D-832 82mm WP @@ -120,6 +129,7 @@ Д-832 82 мм Фосфорная D-832 82mm WP D-832 82mm WP + D-832 82mm Phosphore Blanc S-832S 82mm Lume @@ -132,6 +142,7 @@ С-832С 82 мм Осветительная S-832S 82mm Iluminación S-832S 82mm Iluminação + S-832S 82mm Eclairant [ACE] M49A2 60mm HE Box @@ -144,6 +155,7 @@ [ACE] Коробка M49A2 60 мм ОФ [ACE] M49A2 60mm Caja de HE [ACE] M49A2 60mm Caixa de HE + [ACE] Scatola M49A2 60mm HE [ACE] M302 60mm WP Box @@ -156,6 +168,7 @@ [ACE] Коробка M302 60 мм Фосфорных [ACE] M302 60mm Caja de WP [ACE] M302 60mm Caixa de WP + [ACE] M302 60mm Phosphore Blanc Box [ACE] M83 60mm Lume Box @@ -168,6 +181,7 @@ [ACE] Коробка M83 60 мм Осветительных [ACE] M83 60mm Caja de Iluminación [ACE] M83 60mm Caixa de Iluminação + [ACE] M83 60mm Eclairant Box [ACE] M374 81mm HE Box @@ -180,6 +194,7 @@ [ACE] Коробка M374 81 мм ОФ [ACE] M374 81mm Caja de HE [ACE] M374 81mm Caixa de HE + [ACE] Scatola M374 81mm HE [ACE] M375 81mm WP Box @@ -192,6 +207,7 @@ [ACE] Коробка M375 81 мм Фосфорных [ACE] M375 81mm Caja de WP [ACE] M375 81mm Caixa de WP + [ACE] M375 81mm Phosphore Blanc Box [ACE] M301A3 81mm Lume Box @@ -204,6 +220,7 @@ [ACE] Коробка M301A3 81 мм Осветительных [ACE] M301A3 81mm Caja de Iluminación [ACE] M301A3 81mm Caixa de Iluminação + [ACE] M301A3 81mm Eclairant Box [ACE] M57 81mm Smoke Box @@ -216,6 +233,7 @@ [ACE] Коробка M57 81 мм Дымовых [ACE] M57 81mm Caja de Humo [ACE] M57 81mm Caixa de Fumígena + [ACE] M57 81mm Fumigène Box [ACE] O-832D 82mm HE Box @@ -228,6 +246,7 @@ [ACE] Коробка О-832Д 82 мм ОФ [ACE] O-832D 82mm Caja de HE [ACE] O-832D 82mm Caixa de HE + [ACE] Scatola O-832D 82mm HE [ACE] D-832 82mm WP Box @@ -240,6 +259,7 @@ [ACE] Коробка Д-832 82 мм Фосфорных [ACE] D-832 82mm Caja de WP [ACE] D-832 82mm Caixa de WP + [ACE] D-832 82mm Phosphore Blanc Box [ACE] S-832S 82mm Lume Box @@ -252,6 +272,7 @@ [ACE] Коробка С-832С 82 мм Осветительных [ACE] S-832S 82mm Caja de Iluminación [ACE] S-832S 82mm Caixa de Iluminação + [ACE] S-832S 82mm Eclairant Box Dig Spiderhole @@ -264,6 +285,7 @@ Выкопать паучью дыру Excavar Agujero de araña Escavar buraco de aranha + Creuser un trou d'araignée Dig Spiderhole (Angled Cover) @@ -276,6 +298,7 @@ Выкопать крытую паучью дыру Excavar Agujero de araña (Cubierta inclinada) Escavar buraco de aranha (Cobertura inclinada) + Creuser un trou d'araignée (couverture d'angle) Dig Spiderhole (Dual) @@ -288,6 +311,7 @@ Выкопать двойную паучью дыру Excavar Agujero de araña (Doble) Escavar buraco de aranha (Duplo) + Creuser un trou d'araignée (double) [CSW] M1919A4 Gun Bag @@ -300,6 +324,7 @@ [CSW] Сумка с M1919A4 [CSW] M1919A4 Bolsa para arma [CSW] Bolsa para M1919A4 + [CSW] M1919A4 Gun Bag [CSW] M1919A6 Gun Bag @@ -312,6 +337,7 @@ [CSW] Сумка с M1919A6 [CSW] M1919A6 Bolsa para arma [CSW] Bolsa para M1919A6 + [CSW] M1919A6 Gun Bag [CSW] M60 Gun Bag @@ -324,6 +350,7 @@ [CSW] Сумка с M60 [CSW] M60 Bolsa para arma [CSW] Bolsa para M60 + [CSW] M60 Gun Bag [CSW] DShK (Shield) Gun Bag @@ -336,6 +363,7 @@ [CSW] Сумка с ДШК (со щитом) [CSW] DShK (Apantallada) Bolsa para arma [CSW] Bolsa para DShK (Escudo) + [CSW] DShK (Shield) Gun Bag [CSW] DShK (AA) Gun Bag @@ -348,6 +376,7 @@ [CSW] Сумка с ДШК (зенитный) [CSW] DShK (AA) Bolsa para arma [CSW] Bolsa para DShK (AA) + [CSW] DShK (AA) Gun Bag [CSW] RPD Gun Bag @@ -360,6 +389,7 @@ [CSW] Сумка с РПД [CSW] RPD Bolsa para arma [CSW] Bolsa para RPD + [CSW] RPD Gun Bag [CSW] PK Gun Bag @@ -372,6 +402,7 @@ [CSW] Сумка с ПК [CSW] PK Bolsa para arma [CSW] Bolsa para PK + [CSW] PK Sac d'armes [CSW] MG42 Gun Bag @@ -384,6 +415,7 @@ [CSW] Сумка с MG42 [CSW] MG42 Bolsa para arma [CSW] Bolsa para MG42 + [CSW] MG42 Sac d'armes [CSW] SGM Gun Bag @@ -396,6 +428,7 @@ [CSW] Сумка с СГМ [CSW] SGM Bolsa para arma [CSW] Bolsa para SGM + [CSW] SGM Sac d'armes [CSW] SGM (Shield) Gun Bag @@ -408,6 +441,7 @@ [CSW] Сумка с СГМ (со щитом) [CSW] SGM (Apantallada) Bolsa para arma [CSW] Bolsa para SGM (Escudo) + [CSW] SGM Sac d'armes (avec bouclier) [CSW] Mk18 Gun Bag @@ -420,6 +454,7 @@ [CSW] Сумка с Mk18 [CSW] Mk18 Bolsa para arma [CSW] Bolsa para Mk18 + [CSW] Mk18 Sac d'armes [CSW] M29 Mortar Tube @@ -432,6 +467,7 @@ [CSW] Сумка с миномётом M29 [CSW] M29 Tubo de Mortero [CSW] M29 Tubo de Morteiro + [CSW] Tube de mortier M29 [CSW] M2 Mortar Tube @@ -444,6 +480,7 @@ [CSW] Сумка с миномётом M2 [CSW] M2 Tubo de mortero [CSW] M2 Tubo de Morteiro + [CSW] Tube de mortier M2 [CSW] Type 53 Mortar Tube @@ -456,6 +493,7 @@ [CSW] Сумка с миномётом Type 53 [CSW] Type 53 Tubo de mortero [CSW] Type 53 Tubo de Morteiro + [CSW] Tube de mortier Type 53 diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml index 8643742ab8..b21238e98e 100644 --- a/addons/explosives/stringtable.xml +++ b/addons/explosives/stringtable.xml @@ -75,6 +75,7 @@ Подрыв всех на активном детонаторе 選択した点火装置を全て起爆 활성화된 격발기의 모든 것을 폭파 + Détoner tout sur le détonateur actif Set Active Clacker @@ -83,6 +84,7 @@ Установить активный детонатор この点火装置を選択 격발기 활성 설정 + Définir le détonateur actif Cycle Active Clacker @@ -91,6 +93,7 @@ Цикл активного детонатора 点火装置を切り替え 격발기 활성 전환 + Modifier le détonateur actif Active Clacker @@ -99,6 +102,7 @@ Активный детонатор 選択中の点火装置 격발기 활성 + Détonateur actif Explosive code: %1 diff --git a/addons/field_rations/stringtable.xml b/addons/field_rations/stringtable.xml index 78e1ebfe87..bd8eb3f97f 100644 --- a/addons/field_rations/stringtable.xml +++ b/addons/field_rations/stringtable.xml @@ -31,6 +31,7 @@ ACE 전투식량 HUD ACE HUD de Raciones de campo ACE HUD de Rações de Campo + ACE Rations de terrain HUD Indicates current hunger and thirst status. @@ -78,6 +79,7 @@ 먹기/마시기 Comer/Beber Comer/Beber + Manger/Boire Enable/Disable Field Rations @@ -177,6 +179,7 @@ 갈증 해소 Sed saciada Sede saciada + Soif étanchée Coefficient for the amount of thirst quenched from drinking. @@ -191,6 +194,7 @@ 마심으로써 갈증이 얼마나 해소되는지를 정합니다 Coeficiente del saciamiento de sed por beber. Coeficiente para a quantidade de sede saciada por beber. + Coefficient déterminant la quantité de soif étanchée par la boisson. Hunger Satiated @@ -205,6 +209,7 @@ 배부름 Hambre saciada Fome saciada + Faim rassasiée Coefficient for the amount of hunger satiated from eating. @@ -219,6 +224,7 @@ 밥을 먹어서 배고픔이 얼마나 해결되는지를 정합니다 Coeficiente del saciamiento del hambre por comer. Coeficiente para a quantidade de fome saciada por comer. + Coefficient déterminant la quantité de faim satisfaite en mangeant. Water Source Actions @@ -232,6 +238,7 @@ 물 근처 행동 Acciones para suministros de agua Ações para suprimentos de água + Interactions sur les sources d'eau Controls what actions are available on water sources. @@ -245,6 +252,7 @@ 물가에서 어떤 행동을 취할지 정합니다 Controla qué acciones están disponibles para los suministros de agua. Controla quais ações estão disponíveis para os suprimentos de água. + Déterminer les stocks disponibles dans les sources d'eau. Refill Only diff --git a/addons/fieldmanual/stringtable.xml b/addons/fieldmanual/stringtable.xml index 647a5bad43..a4474dc2d4 100644 --- a/addons/fieldmanual/stringtable.xml +++ b/addons/fieldmanual/stringtable.xml @@ -27,6 +27,7 @@ Hunger 空腹 Голод + Faim %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. @@ -47,6 +48,7 @@ Durst 渇き Жажда + Soif %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. @@ -67,6 +69,7 @@ Cure Mediche 治療 Медицинское лечение + Traitement médical Decrease Heart Rate @@ -77,6 +80,7 @@ Rallenta ritmo cardiaco 心拍数を下げる Уменьшить частоту сердечных сокращений + Diminution de la fréquence cardiaque %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. @@ -97,6 +101,7 @@ Bende 包帯 Бинты + Pansements Close Wounds @@ -107,6 +112,7 @@ Chiudi ferite 傷口をふさぐ Закрыть раны + Fermer les plaies %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. @@ -154,6 +160,7 @@ Aumenta ritmo cardiaco | Accelera rinvenimento 心拍数を上げる | はやく起こす Увеличьте частоту сердечных сокращений | просыпайтесь быстрее + Augmentation de la fréquence cardiaque - Réveil plus rapide %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. @@ -173,6 +180,7 @@ Cura completa 生まれたてのように回復する Лечение тела + Remettre comme neuf 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. @@ -210,6 +218,7 @@ Impedisce la riapertura di ferite 傷口が開くのを防ぐ Предотвратить повторное открытие ран + Empêcher la réouverture des plaies 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. @@ -227,6 +236,7 @@ Ferma emorragia 出血を止める Остановить кровотечение + Arrêter les saignements 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. @@ -259,6 +269,7 @@ Cure, Semplificato Tratamento, Simplificado 治療を簡略化する + Traitement, simplifié 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. @@ -275,6 +286,7 @@ Portátil, Preciso e Robusto Leggero, Preciso, Robusto 高機動、高精度、高耐久 + Portable, précis, robuste 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. @@ -291,6 +303,7 @@ Retorne os Abatidos Recupera i tuoi morti 死者を連れ出す + Récupérez vos morts %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%15%4] and select %3Place Body In Bodybag%4. @@ -307,6 +320,7 @@ Faça Prisioneiros Prendi prigionieri 捕虜の捕り方 + Faire des prisonniers %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. @@ -323,6 +337,7 @@ Celular Explosivo Cellulare per esplosivi 電話でドカン + Explosifs téléphone portable 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. @@ -339,6 +354,7 @@ Luzes de Leitura Portáteis Luci da Lettura Portabili 携帯読書灯 + Lampes de lecture portables %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. @@ -355,6 +371,7 @@ Detonação Remota Detonazione da remoto リモコン爆弾 + Détonation à distance 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. @@ -370,6 +387,7 @@ Naviga 測位 Навигация + Naviguer 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 @@ -385,6 +403,7 @@ Vendetta Esplosiva 爆発的な復讐 Взрывная месть + Homme mort 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. @@ -407,6 +426,7 @@ Disinnesca Esplosivi 爆発物の解除 Обезвреживание взрывчатки + Désamorcer les explosifs Protect Your Hearing @@ -415,6 +435,7 @@ Proteggi il tuo Udito 聴覚の保護 Защитите свой слух + Protéger votre audition %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. @@ -430,6 +451,7 @@ Mettiti in Copertura 遮蔽を造り出す Добраться до укрытия + Se mettre à couvert 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. @@ -445,6 +467,7 @@ 손전등 フラッシュライト Фонари + Lampes de poche Illuminate Your Map @@ -453,6 +476,7 @@ 지도를 밝혀줍니다 地図に光あれ Осветите свою карту + Éclairer votre carte %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. @@ -468,6 +492,7 @@ 하늘에서 관측합니다 空から戦場を見てみよう Наблюдайте с Небес + Observer depuis le ciel 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. @@ -483,6 +508,7 @@ 은신하여 팀을 찾아냅니다 自分の部隊を追う Следите за своей командой незаметно + Suivez votre équipe en toute discrétion 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. @@ -574,6 +600,7 @@ 쉽게 견인을 할 수 있습니다 楽々けん引 Буксируйте с легкостью + Remorquer avec facilité %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 @@ -589,6 +616,7 @@ 당신의 요새를 확장합니다 要塞を拡張する Расширить свои укрепления + Élargissez vos 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. @@ -604,6 +632,7 @@ 총기의 온도를 낮춥니다 銃の熱を冷ます Понизьте температуру оружия + Refroidir l'arme %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. @@ -619,6 +648,7 @@ 스프레이 페인트 ペイントスプレー Аэрозольная краска + Bombe de peinture Tag Your Territory @@ -627,6 +657,7 @@ 당신의 영역을 지정합니다 自分のテリトリーをマーキング Пометьте свою территорию + Marquez votre territoire %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 @@ -642,6 +673,7 @@ 어느 곳에나 지지대를 배치할 수 있습니다 どこでも支持器 Опора может быть установлена в любом месте + Stabilisé partout 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. @@ -657,6 +689,7 @@ 하늘에서 계속 내려다봅니다 空の目を維持する Не Отрывай Глаз От Неба + Gardez les yeux au ciel %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. @@ -703,6 +736,15 @@ ACE3 ACE 3 ACE3 + ACE3 + ACE3 + ACE3 + ACE3 + ACE3 + ACE3 + ACE3 + ACE3 + ACE3 Build Fortifications @@ -711,6 +753,7 @@ 요새를 건설합니다 要塞を構築する Стройте укрепления + Construire des fortifications The %3Fortify Tool%4 allows soldiers to build fortifications provided by their mission creator.<br/><br/>%3Usage:%4<br/>%2Pick up a %3Fortify Tool%4.<br/>%2Use [%3%12%4] and select %3Fortify%4.<br/>%2Select an available fortification and follow the on screen prompts for placement. @@ -726,6 +769,7 @@ 침입용 도구입니다 破壊して乗り込む Взлом и проникновение + Entrée par effraction %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. diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index 2ebc038a4b..58d0bfa05d 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -369,6 +369,7 @@ Вставить/вынуть беруши Metti/Togli tappi 귀마개 토글 + Mettre/enlever les bouchons diff --git a/addons/killtracker/stringtable.xml b/addons/killtracker/stringtable.xml index 9c0f410e63..8bc6ab13a2 100644 --- a/addons/killtracker/stringtable.xml +++ b/addons/killtracker/stringtable.xml @@ -8,6 +8,7 @@ ACE Отслеживание убийств ACE キルトラッカー ACE 킬트래커 + ACE Suivi des morts ACE Killed Events diff --git a/addons/medical_gui/stringtable.xml b/addons/medical_gui/stringtable.xml index 3b18ede459..6d7e819b29 100644 --- a/addons/medical_gui/stringtable.xml +++ b/addons/medical_gui/stringtable.xml @@ -1365,6 +1365,7 @@ Mostrar estado de sangramento 出血状態の表示 출혈 상태 표시 + Afficher l'état des saignements Display if the patient is bleeding, optionally with rate @@ -1374,6 +1375,7 @@ Mostrar se o paciente está sangrando, opcionalmente com taxa 患者が出血しているかどうかを表示します。オプションで出血速度も表示します 환자가 출혈 중인지 여부를 표시합니다(선택적으로 출혈 속도 포함) + Indique si le patient saigne, éventuellement avec le taux de saignement Show Bleeding Rate @@ -1383,6 +1385,7 @@ Mostrar taxa de sangramento 出血速度の表示 출혈 속도 표시 + Afficher le taux de saignement Peek Medical Info on Hit diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml index 438778a6ad..4e186edc85 100644 --- a/addons/medical_treatment/stringtable.xml +++ b/addons/medical_treatment/stringtable.xml @@ -4981,6 +4981,7 @@ Zeus治療時間係数 제우스 치료 시간 계수 Коэффициент времени обработки Zeus + Coeff. de temps Multiply all treatment times with this coefficient when in Zeus. @@ -4989,6 +4990,7 @@ Zeus操作中は、すべての治療時間にこの係数を掛けます。 제우스일 때 모든 치료 시간에 이 계수를 곱합니다. Умножьте все время лечения на этот коэффициент, когда вы находитесь в Zeus. + Coefficient de temps de traitement Zeus Painkillers @@ -5012,6 +5014,7 @@ Испол-ть обезболивающие 鎮痛剤を投与 진통제 투여 + Administrer des analgésiques Administering Painkillers... @@ -5019,6 +5022,7 @@ Использование обезболивающего... 鎮痛剤を投与しています・・・ 진통제 투여 중... + Administration d'analgésiques... Over-the-counter analgesic used to combat light to moderate pain experiences. @@ -5026,6 +5030,7 @@ Безрецептурный анальгетик, используемый для борьбы с легкими и умеренными болевыми ощущениями. 軽度から中程度の痛みに対処するために使用される市販の鎮痛薬。 가벼운 통증부터 중간 정도의 통증을 퇴치하는 데 사용되는 일반의약품 진통제입니다. + Analgésique sans ordonnance utilisé pour lutter contre les douleurs légères à modérées. Over-the-counter analgesic used to combat light to moderate pain experiences. @@ -5033,6 +5038,7 @@ Безрецептурный анальгетик, используемый для борьбы с легкими и умеренными болевыми ощущениями. 軽度から中程度の痛みに対処するために使用される市販の鎮痛薬。 가벼운 통증부터 중간 정도의 통증을 퇴치하는 데 사용되는 일반의약품 진통제입니다. + Analgésique sans ordonnance utilisé pour lutter contre les douleurs légères à modérées. diff --git a/addons/medical_vitals/stringtable.xml b/addons/medical_vitals/stringtable.xml index 37368655e2..eb0080bd07 100644 --- a/addons/medical_vitals/stringtable.xml +++ b/addons/medical_vitals/stringtable.xml @@ -8,6 +8,7 @@ Жизненно-важные органы バイタル 생명 + Paramètres vitaux Enable SpO2 Simulation @@ -15,6 +16,7 @@ Включить имитацию SpO2 SpO2シミュレーションを有効化 산소포화도 시뮬레이션 활성화 + Activer la simulation de la SpO2 Enables oxygen saturation simulation, providing variable heart rate and oxygen demand based on physical activity and altitude. Required for Airway Management. @@ -22,6 +24,7 @@ Позволяет имитировать насыщение кислородом, обеспечивая переменную частоту сердечных сокращений и потребность в кислороде в зависимости от физической активности и высоты над уровнем моря. Требуется для управления дыхательными путями. 酸素飽和度シミュレーションを有効にし、身体活動や標高に基づいて変動する心拍数と酸素要求量の機能を提供します。 気道管理に必要です。 산소포화도 시뮬레이션을 활성화하여 신체 활동과 고도에 따라 다양한 심박수와 산소 요구량을 제공합니다. 기도 관리에 필요합니다. + Permet de simuler la saturation en oxygène, de modifier la fréquence cardiaque et la consommation d'oxygène en fonction de l'activité physique et de l'altitude. Nécessaire pour la gestion des voies respiratoires. diff --git a/addons/overheating/stringtable.xml b/addons/overheating/stringtable.xml index ba662bf684..48399b443c 100644 --- a/addons/overheating/stringtable.xml +++ b/addons/overheating/stringtable.xml @@ -881,6 +881,7 @@ 遊底(ボルト)形式 노리쇠 방식 Тип болта + Type d'obturateur Open Bolt @@ -888,6 +889,7 @@ オープンボルト 오픈 볼트 Открыть болт + Obturateur ouvert Closed Bolt @@ -895,6 +897,7 @@ クローズドボルト 클로즈드 볼트 Закрыть болт + Obturateur fermé Barrel Type @@ -902,6 +905,7 @@ 銃身形式 총열 방식 Тип ствола + Type de canon Non-Removeable @@ -909,6 +913,7 @@ 取り外し不可 제거 불가 Несъемный + Inamovible Quick Change @@ -916,6 +921,7 @@ 即時交換可 신속 교체 Быстросъемный + Changement rapide diff --git a/addons/refuel/stringtable.xml b/addons/refuel/stringtable.xml index dc61a2c168..41a8c5254e 100644 --- a/addons/refuel/stringtable.xml +++ b/addons/refuel/stringtable.xml @@ -505,6 +505,7 @@ 燃料キャニスターを持つ 연료통 집어들기 Взять канистру с топливом + Ramasser le réservoir de carburant Picking fuel canister up... @@ -513,6 +514,7 @@ 燃料キャニスターを持ち上げています・・・ 연료통 집어드는 중... Поднимаю канистру с топливом... + Ramasser les bidons de carburant... Connect fuel canister @@ -521,6 +523,7 @@ 燃料キャニスターを接続する 연료통 꽂기 Подсоединить канистру с топливом + Raccorder le réservoir de carburant Connecting fuel canister... @@ -529,6 +532,7 @@ 燃料キャニスターを接続しています・・・ 연료통 꽂는 중... Подсоединение топливной канистры... + Raccorder le réservoir de carburant... Disconnect fuel canister @@ -537,6 +541,7 @@ 燃料キャニスターを外します 연료통 빼기 Отсоединить канистру с топливом + Débrancher le réservoir de carburant Refuel hose length diff --git a/addons/zeus/stringtable.xml b/addons/zeus/stringtable.xml index bb78c86c1a..8b3aaed92c 100644 --- a/addons/zeus/stringtable.xml +++ b/addons/zeus/stringtable.xml @@ -1321,6 +1321,7 @@ 貨物室から降ろす 화물 내리기 Выгрузить из отсека + Décharger de la cargaison Toggle NVGs @@ -1966,6 +1967,7 @@ 医療メニューは無効になっています 의료 메뉴가 비활성화되었습니다 Медицинское меню отключено + Le Menu médical est désactivé Lay Trenchline From 558849b91ce10430aabb8b4273d393759c6b1101 Mon Sep 17 00:00:00 2001 From: Sotirios Pupakis Date: Wed, 3 Apr 2024 22:47:51 +0200 Subject: [PATCH 30/50] Interaction - Add door events (#9910) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Jouni Järvinen --- addons/interaction/functions/fnc_openDoor.sqf | 10 ++++++++-- docs/wiki/framework/events-framework.md | 10 +++++++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/addons/interaction/functions/fnc_openDoor.sqf b/addons/interaction/functions/fnc_openDoor.sqf index 540712ef41..2afb438a60 100644 --- a/addons/interaction/functions/fnc_openDoor.sqf +++ b/addons/interaction/functions/fnc_openDoor.sqf @@ -63,8 +63,11 @@ GVAR(doorTargetPhase) = _house animationPhase (_animations select 0); GVAR(isOpeningDoor) = true; GVAR(usedScrollWheel) = false; +// Raise local started opening event +[QGVAR(doorOpeningStarted), [_house, _door, _animations]] call CBA_fnc_localEvent; + [{ - (_this select 0) params ["_house", "_animations", "_position", "_time", "_frame"]; + (_this select 0) params ["_house", "_animations", "_position", "_time", "_frame", "_door"]; if !(GVAR(isOpeningDoor)) exitWith { [_this select 1] call CBA_fnc_removePerFrameHandler; @@ -75,6 +78,9 @@ GVAR(usedScrollWheel) = false; {_house animate [_x, _phase]; false} count _animations; }; + + // Raise local stopped opening event + [QGVAR(doorOpeningStopped), [_house, _door, _animations]] call CBA_fnc_localEvent; }; // check if player moved too far away @@ -88,4 +94,4 @@ GVAR(usedScrollWheel) = false; }; // do incremental door opening {_house animate [_x, GVAR(doorTargetPhase)]; false} count _animations; -}, 0.1, [_house, _animations, getPosASL ACE_player, CBA_missionTime + 0.2, diag_frameno + 2]] call CBA_fnc_addPerFrameHandler; +}, 0.1, [_house, _animations, getPosASL ACE_player, CBA_missionTime + 0.2, diag_frameno + 2, _door]] call CBA_fnc_addPerFrameHandler; diff --git a/docs/wiki/framework/events-framework.md b/docs/wiki/framework/events-framework.md index d8d8674218..37daa148fc 100644 --- a/docs/wiki/framework/events-framework.md +++ b/docs/wiki/framework/events-framework.md @@ -146,6 +146,14 @@ MenuType: 0 = Interaction, 1 = Self Interaction |---------- |------------|----------|------|-------------| | `ace_medical_treatment_fullHealLocalMod` | [_patient] | Local | Listen | Called before a local unit is fully healed, mods can listen and apply their own healing logic +### 2.15 Interaction (`ace_interaction`) + +| Event Key | Parameters | Locality | Type | Description | +|---------- |------------|----------|------|-------------| +|---------- |------------|----------|------|-------------| +| `ace_interaction_doorOpeningStarted` | [_house, _door, _animations] | Local | Listen | Called when local unit starts interacting with doors +| `ace_interaction_doorOpeningStopped` | [_house, _door, _animations] | Local | Listen | Called when local unit stopps interacting with doors + ## 3. Usage Also Reference [CBA Events System](https://github.com/CBATeam/CBA_A3/wiki/Custom-Events-System){:target="_blank"} documentation. @@ -263,4 +271,4 @@ Calls a globally synchronized event, which will also be run on JIP players unles // Event called on another machine (tapping above target machine) ["ace_interact_tapShoulder", [arguments], [target]] call CBA_fnc_targetEvent; -``` +``` \ No newline at end of file From a72b3a43a53ab79b0f73c4491acb9b07998c6be0 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Wed, 3 Apr 2024 23:53:12 +0200 Subject: [PATCH 31/50] Arsenal - Fix `FUNC(baseAttachment)` returning non-CBA item modes (#9916) Update fnc_baseAttachment.sqf --- addons/arsenal/functions/fnc_baseAttachment.sqf | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/addons/arsenal/functions/fnc_baseAttachment.sqf b/addons/arsenal/functions/fnc_baseAttachment.sqf index 2cee699ba6..cf0cbde134 100644 --- a/addons/arsenal/functions/fnc_baseAttachment.sqf +++ b/addons/arsenal/functions/fnc_baseAttachment.sqf @@ -26,6 +26,14 @@ private _cfgWeapons = configfile >> "CfgWeapons"; private _config = _cfgWeapons >> _item; _item = configName _config; +// If the switch config entries are inherited, ignore +if ( + (inheritsFrom (_config >> "MRT_SwitchItemNextClass") isNotEqualTo (_config >> "MRT_SwitchItemNextClass")) || + {inheritsFrom (_config >> "MRT_SwitchItemPrevClass") isNotEqualTo (_config >> "MRT_SwitchItemPrevClass")} +) exitWith { + _item // return +}; + while { _config = _cfgWeapons >> getText (_config >> "MRT_SwitchItemNextClass"); isClass _config && {_switchableClasses pushBackUnique configName _config != -1} From e6cc5fca89af6c7a989e05d20ae0fafc0a98fb30 Mon Sep 17 00:00:00 2001 From: Grim <69561145+LinkIsGrim@users.noreply.github.com> Date: Wed, 3 Apr 2024 19:46:26 -0300 Subject: [PATCH 32/50] Arsenal - Handle arrays in loadout extended info (#9918) --- addons/arsenal/functions/fnc_verifyLoadout.sqf | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/addons/arsenal/functions/fnc_verifyLoadout.sqf b/addons/arsenal/functions/fnc_verifyLoadout.sqf index 53e7221e3a..10cd9a2553 100644 --- a/addons/arsenal/functions/fnc_verifyLoadout.sqf +++ b/addons/arsenal/functions/fnc_verifyLoadout.sqf @@ -22,6 +22,10 @@ private _extendedInfo = createHashMap; // Check if the provided loadout is a CBA extended loadout if (count _loadout == 2) then { _extendedInfo = +(_loadout select 1); // Copy the hashmap to prevent events from modifiyng the profileNamespace extendedInfo + if (_extendedInfo isEqualType []) then { // Hashmaps are serialized as arrays, convert back to hashmap + _extendedInfo = createHashMapFromArray _extendedInfo; + _loadout set [1, _extendedInfo]; // Also fix source variable, technically not needed but doesn't hurt + }; _loadout = _loadout select 0; }; From 0d401b26649f521d33ec4f31e4b3aa08f415f9b1 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Thu, 4 Apr 2024 13:01:12 +0200 Subject: [PATCH 33/50] Headless - Code optimisation (#9873) * Headless optimisations * Swapped blacklist for unitIsUAV check * Moved UAV check * Update addons/headless/functions/fnc_transferGroups.sqf Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> * Update addons/headless/functions/fnc_transferGroups.sqf Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> * Update fnc_transferGroups.sqf --------- Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> --- addons/headless/XEH_postInit.sqf | 4 ++-- addons/headless/XEH_preInit.sqf | 1 - .../headless/functions/fnc_handleConnectHC.sqf | 7 ++----- .../headless/functions/fnc_handleDisconnect.sqf | 8 +++----- addons/headless/functions/fnc_handleSpawn.sqf | 17 ++++++----------- addons/headless/functions/fnc_rebalance.sqf | 2 +- .../headless/functions/fnc_transferGroups.sqf | 12 +++++++----- addons/headless/initSettings.inc.sqf | 16 +++++++--------- addons/headless/script_component.hpp | 1 - 9 files changed, 28 insertions(+), 40 deletions(-) diff --git a/addons/headless/XEH_postInit.sqf b/addons/headless/XEH_postInit.sqf index 63c7fd5038..d1c76a332b 100644 --- a/addons/headless/XEH_postInit.sqf +++ b/addons/headless/XEH_postInit.sqf @@ -1,12 +1,12 @@ #include "script_component.hpp" -["ace_settingsInitialized", { +["CBA_settingsInitialized", { // Register and remove HCs if not client that is not server and distribution or end mission enabled if ((!hasInterface || isServer) && {XGVAR(enabled) || XGVAR(endMission) != 0}) then { if (isServer) then { // Request rebalance on any unit spawn (only if distribution enabled) if (XGVAR(enabled)) then { - ["AllVehicles", "initPost", LINKFUNC(handleSpawn), nil, nil, true] call CBA_fnc_addClassEventHandler; + ["CAManBase", "initPost", LINKFUNC(handleSpawn), nil, nil, true] call CBA_fnc_addClassEventHandler; }; // Add disconnect EH addMissionEventHandler ["HandleDisconnect", {call FUNC(handleDisconnect)}]; diff --git a/addons/headless/XEH_preInit.sqf b/addons/headless/XEH_preInit.sqf index d3b2c8ff5c..c51b62cf57 100644 --- a/addons/headless/XEH_preInit.sqf +++ b/addons/headless/XEH_preInit.sqf @@ -12,7 +12,6 @@ if (isServer) then { GVAR(headlessClients) = []; GVAR(inRebalance) = false; GVAR(endMissionCheckDelayed) = false; - GVAR(blacklistType) = [BLACKLIST_UAV]; [QXGVAR(headlessClientJoined), LINKFUNC(handleConnectHC)] call CBA_fnc_addEventHandler; }; diff --git a/addons/headless/functions/fnc_handleConnectHC.sqf b/addons/headless/functions/fnc_handleConnectHC.sqf index b19ef25012..e5acaf48fc 100644 --- a/addons/headless/functions/fnc_handleConnectHC.sqf +++ b/addons/headless/functions/fnc_handleConnectHC.sqf @@ -19,17 +19,14 @@ params ["_headlessClient"]; // Exit if HC already registered // No need to check if distribution or end mission enabled, as if disabled this will never run -if (_headlessClient in GVAR(headlessClients)) exitWith {}; - -// Register for use -GVAR(headlessClients) pushBack _headlessClient; +if (GVAR(headlessClients) pushBackUnique _headlessClient == -1) exitWith {}; if (XGVAR(log)) then { INFO_1("Registered HC: %1",_headlessClient); }; // Exit if AI distribution is disabled -if (!XGVAR(enabled)) exitWith {true}; +if (!XGVAR(enabled)) exitWith {}; // Rebalance [true] call FUNC(rebalance); diff --git a/addons/headless/functions/fnc_handleDisconnect.sqf b/addons/headless/functions/fnc_handleDisconnect.sqf index c94cec2599..a18f22a3bd 100644 --- a/addons/headless/functions/fnc_handleDisconnect.sqf +++ b/addons/headless/functions/fnc_handleDisconnect.sqf @@ -17,7 +17,7 @@ */ params ["_object"]; -TRACE_1("HandleDisconnect",_this); +TRACE_1("HandleDisconnect",_object); // Exit if not HC if !(_object in GVAR(headlessClients)) exitWith { @@ -28,9 +28,7 @@ if !(_object in GVAR(headlessClients)) exitWith { if (CBA_missionTime < 150) then { TRACE_1("Mission start delay",CBA_missionTime); GVAR(endMissionCheckDelayed) = true; - [{ - call FUNC(endMissionNoPlayers); - }, [], 150 - CBA_missionTime] call CBA_fnc_waitAndExecute; + [LINKFUNC(endMissionNoPlayers), [], 150 - CBA_missionTime] call CBA_fnc_waitAndExecute; } else { // End instantly or after delay if (XGVAR(endMission) == 1) then { @@ -39,7 +37,7 @@ if !(_object in GVAR(headlessClients)) exitWith { } else { TRACE_2("Delayed 60s end",GVAR(endMission),CBA_missionTime); GVAR(endMissionCheckDelayed) = true; - [FUNC(endMissionNoPlayers), [], 60] call CBA_fnc_waitAndExecute; + [LINKFUNC(endMissionNoPlayers), [], 60] call CBA_fnc_waitAndExecute; }; }; }; diff --git a/addons/headless/functions/fnc_handleSpawn.sqf b/addons/headless/functions/fnc_handleSpawn.sqf index 50277e3845..56b74f407d 100644 --- a/addons/headless/functions/fnc_handleSpawn.sqf +++ b/addons/headless/functions/fnc_handleSpawn.sqf @@ -4,27 +4,22 @@ * Handles AI spawn and requests a rebalance if applicable. * * Arguments: - * 0: Object + * 0: Unit * * Return Value: * None * * Example: - * [object] call ace_headless_fnc_handleSpawn + * [cursorObject] call ace_headless_fnc_handleSpawn * * Public: No */ -params ["_object"]; -TRACE_1("Spawn",_object); +params ["_unit"]; +TRACE_1("Spawn",_unit); -// Exit if HC transferring disabled or object not a unit (including unit inside vehicle) or is player -if (!(_object in allUnits) || {isPlayer _object}) exitWith {}; - -// Exit and blacklist if of blacklist type -if ({_object isKindOf _x} count GVAR(blacklistType) > 0) exitWith { - _object setVariable [QXGVAR(blacklist), true]; -}; +// Exit if unit is player or UAV crew +if (isPlayer _unit || {unitIsUAV _unit}) exitWith {}; // Rebalance [false] call FUNC(rebalance); diff --git a/addons/headless/functions/fnc_rebalance.sqf b/addons/headless/functions/fnc_rebalance.sqf index 84be441ebe..5ec32f39bd 100644 --- a/addons/headless/functions/fnc_rebalance.sqf +++ b/addons/headless/functions/fnc_rebalance.sqf @@ -23,7 +23,7 @@ TRACE_3("Rebalance",GVAR(inRebalance),GVAR(headlessClients),_force); if (GVAR(inRebalance) || {GVAR(headlessClients) isEqualTo []}) exitWith {}; // Transfer after rebalance delay -[FUNC(transferGroups), [_force], XGVAR(Delay)] call CBA_fnc_waitAndExecute; +[LINKFUNC(transferGroups), _force, XGVAR(delay)] call CBA_fnc_waitAndExecute; // Currently in rebalance flag GVAR(inRebalance) = true; diff --git a/addons/headless/functions/fnc_transferGroups.sqf b/addons/headless/functions/fnc_transferGroups.sqf index 37580c4fff..60d3c093d1 100644 --- a/addons/headless/functions/fnc_transferGroups.sqf +++ b/addons/headless/functions/fnc_transferGroups.sqf @@ -79,8 +79,8 @@ private _numTransferredHC3 = 0; _transfer = false; }; - // No transfer if player in this group - if (isPlayer _x) exitWith { + // No transfer if player or UAV in this group + if (isPlayer _x || {unitIsUAV _x}) exitWith { _transfer = false; }; @@ -89,14 +89,16 @@ private _numTransferredHC3 = 0; _transfer = false; }; - // No transfer if vehicle unit is in or crew in that vehicle is blacklisted - if (vehicle _x != _x && {(vehicle _x) getVariable [QXGVAR(blacklist), false]}) exitWith { + private _vehicle = objectParent _x; + + // No transfer if the vehicle the unit is in or if the crew in that vehicle is blacklisted + if ((_vehicle getVariable [QXGVAR(blacklist), false]) || {unitIsUAV _vehicle}) exitWith { _transfer = false; }; // Save gear if unit about to be transferred with current loadout (naked unit work-around) if (XGVAR(transferLoadout) == 1) then { - _x setVariable [QGVAR(loadout), [_x] call CBA_fnc_getLoadout, true]; + _x setVariable [QGVAR(loadout), _x call CBA_fnc_getLoadout, true]; }; } forEach (units _x); }; diff --git a/addons/headless/initSettings.inc.sqf b/addons/headless/initSettings.inc.sqf index cb5fe6e53d..d00cb6eb30 100644 --- a/addons/headless/initSettings.inc.sqf +++ b/addons/headless/initSettings.inc.sqf @@ -4,7 +4,7 @@ [ELSTRING(common,Enabled), LSTRING(EnabledDesc)], format ["ACE %1", LLSTRING(Module)], false, - true, + 1, {[QGVAR(enabled), _this] call EFUNC(common,cbaSettings_settingChanged)}, true ] call CBA_fnc_addSetting; @@ -15,9 +15,8 @@ [LSTRING(Delay), LSTRING(DelayDesc)], format ["ACE %1", LLSTRING(Module)], [0, 60, 15, -1], - true, - {[QGVAR(delay), _this] call EFUNC(common,cbaSettings_settingChanged)}, - true + 1, + {[QGVAR(delay), _this] call EFUNC(common,cbaSettings_settingChanged)} ] call CBA_fnc_addSetting; [ @@ -26,7 +25,7 @@ [LSTRING(EndMission), LSTRING(EndMissionDesc)], format ["ACE %1", LLSTRING(Module)], [[0, 1, 2], [ELSTRING(Common,Disabled), LSTRING(Instant), LSTRING(Delayed)], 0], - true, + 1, {[QGVAR(delay), _this] call EFUNC(common,cbaSettings_settingChanged)}, true ] call CBA_fnc_addSetting; @@ -37,9 +36,8 @@ [LSTRING(Log), LSTRING(LogDesc)], format ["ACE %1", LLSTRING(Module)], false, - true, - {[QGVAR(enabled), _this] call EFUNC(common,cbaSettings_settingChanged)}, - true + 1, + {[QGVAR(enabled), _this] call EFUNC(common,cbaSettings_settingChanged)} ] call CBA_fnc_addSetting; [ @@ -48,7 +46,7 @@ [LSTRING(TransferLoadout), LSTRING(TransferLoadoutDesc)], format ["ACE %1", LLSTRING(Module)], [[0, 1, 2], [ELSTRING(Common,Disabled), LSTRING(TransferLoadoutCurrent), LSTRING(TransferLoadoutConfig)], 0], - true, + 1, {}, true // needs mission restart ] call CBA_fnc_addSetting; diff --git a/addons/headless/script_component.hpp b/addons/headless/script_component.hpp index c73e2260de..73761a7bb1 100644 --- a/addons/headless/script_component.hpp +++ b/addons/headless/script_component.hpp @@ -17,4 +17,3 @@ #include "\z\ace\addons\main\script_macros.hpp" #define DELAY_DEFAULT 15 -#define BLACKLIST_UAV "UAV", "UAV_AI_base_F", "B_UAV_AI", "O_UAV_AI", "I_UAV_AI" From d312792631bfb74e638c50da0ae364fccb80bc75 Mon Sep 17 00:00:00 2001 From: Hexo <130893962+Alfred-Neuman@users.noreply.github.com> Date: Thu, 4 Apr 2024 13:01:24 +0200 Subject: [PATCH 34/50] Translation - French (#9919) * Translate French * Update stringtable.xml Translate - FR * Translate - French * Translate - French - overheating * Translate -French - compat_sog * Update stringtable.xml * Translate - French * Fix - Translate French Minor correction * Update Translate French * Update French * Update - french * Transalte French fieldmanual * Translate French compat_cup_weapons_cws * Update translate --- addons/advanced_throwing/stringtable.xml | 2 ++ addons/arsenal/stringtable.xml | 2 ++ .../compat_cup_weapons_csw/stringtable.xml | 11 +++++++ .../stringtable.xml | 2 ++ .../compat_rhs_usf3_csw/stringtable.xml | 12 +++++++ .../compat_ws_realisticnames/stringtable.xml | 25 +++++++++++++++ addons/field_rations/stringtable.xml | 32 +++++++++++++++++++ addons/fieldmanual/stringtable.xml | 17 ++++++++++ addons/killtracker/stringtable.xml | 2 ++ addons/maptools/stringtable.xml | 18 +++++++++++ addons/viewdistance/stringtable.xml | 1 + 11 files changed, 124 insertions(+) diff --git a/addons/advanced_throwing/stringtable.xml b/addons/advanced_throwing/stringtable.xml index a63e1e8918..7676464474 100644 --- a/addons/advanced_throwing/stringtable.xml +++ b/addons/advanced_throwing/stringtable.xml @@ -191,6 +191,7 @@ Mostra informazioni sul vento temporaneamente 一時的に風の情報を表示 바람 정보 임시로 표시 + Afficher temporairement les informations sur le vent Temporarily display Wind Info while throwing, to aid in placing smoke grenades effectively. @@ -198,6 +199,7 @@ Mostra le informazioni sul vento durante il lancio di granate, facilitando il piazzamento ottimale di fumogeni. 投擲行動中に風向きの情報を一時的に表示し、発煙手榴弾の煙幕を効果的に展開しやすくします。 연막탄을 효과적으로 배치하는 데 도움이 되도록 투척하는 동안 일시적으로 바람 정보를 표시합니다. + Affiche les informations sur le vent pendant le lancement pour placer les grenades fumigènes plus efficacement. Prepare/Change Throwable diff --git a/addons/arsenal/stringtable.xml b/addons/arsenal/stringtable.xml index 39f7936d58..02c35266db 100644 --- a/addons/arsenal/stringtable.xml +++ b/addons/arsenal/stringtable.xml @@ -1244,6 +1244,7 @@ 熱画像装置内蔵 Интегрирован тепловизор. 열화상 내장 + Thermique intégrée Thermal & Primary integrated @@ -1251,6 +1252,7 @@ 熱画像装置内蔵・プライマリに内蔵 Интегрирован тепловизор и осн.прицел. 열화상과 주무기 내장 + Thermique et primaire intégrés Not Supported diff --git a/addons/compat_cup_weapons/compat_cup_weapons_csw/stringtable.xml b/addons/compat_cup_weapons/compat_cup_weapons_csw/stringtable.xml index 0e88b468ca..a23cf87af0 100644 --- a/addons/compat_cup_weapons/compat_cup_weapons_csw/stringtable.xml +++ b/addons/compat_cup_weapons/compat_cup_weapons_csw/stringtable.xml @@ -42,66 +42,77 @@ [CSW] M1 榴弾 [CSW] M1 HE [CSW] M1 고폭탄 + [CSW] M1 HE [CSW] M84 Smoke [CSW] M84 白煙弾 [CSW] M84 Дымовая [CSW] M84 연막탄 + [CSW] M84 Fumigène [CSW] M60A2 WP [CSW] M60A2 白リン弾 [CSW] M60A2 WP [CSW] M60A2 백린연막탄 + [CSW] M60A2 WP [CSW] M67 AT Laser Guided [CSW] M67 対戦車レーザー誘導弾 [CSW] M67 AT Laser Guided [CSW] M67 레이저유도 대전차탄 + [CSW] M67 AT Guidé laser [CSW] M314 Illumination [CSW] M314 照明弾 [CSW] M314 Осветительная [CSW] M314 조명탄 + [CSW] M314 Illumination [CSW] 3OF56 HE [CSW] 3OF56 榴弾 [CSW] 3OF56 HE [CSW] 3OF56 고폭탄 + [CSW] 3OF56 HE [CSW] 3OF69M Laser Guided [CSW] 3OF69M レーザー誘導弾 [CSW] 3OF69M Laser Guided [CSW] 3OF69M 레이저유도탄 + [CSW] 3OF69M Guidé laser [CSW] 122mm WP [CSW] 122mm 白リン弾 [CSW] 122mm WP [CSW] 122mm 백린탄 + [CSW] 122mm WP [CSW] D-462 Smoke [CSW] D-462 白煙弾 [CSW] D-462 Дымовая [CSW] D-462 연막탄 + [CSW] D-462 Fumigène [CSW] S-463 Illumination [CSW] S-463 照明弾 [CSW] S-463 Осветительная [CSW] S-463 조명탄 + [CSW] S-463 Eclairante [CSW] BK-6M HEAT [CSW] BK-6M HEAT弾 [CSW] BK-6M HEAT [CSW] BK-6M 대전차고폭탄 + [CSW] BK-6M HEAT diff --git a/addons/compat_cup_weapons/compat_cup_weapons_nightvision/stringtable.xml b/addons/compat_cup_weapons/compat_cup_weapons_nightvision/stringtable.xml index f217bc1d2f..a52bea0e31 100644 --- a/addons/compat_cup_weapons/compat_cup_weapons_nightvision/stringtable.xml +++ b/addons/compat_cup_weapons/compat_cup_weapons_nightvision/stringtable.xml @@ -46,6 +46,7 @@ AN/PVS-15 (冬季迷彩, WP) AN/PVS-15 (설상, 백색광) AN/PVS-15 (Белый, БФ) + AN/PVS-15 (Blanc, WP) GPNVG (Black, WP) @@ -82,6 +83,7 @@ GPNVG (冬季迷彩, WP) GPNVG (설상, 백색광) AN/PVS-15 (Белый, БФ) + GPNVG (Blanc, WP) diff --git a/addons/compat_rhs_usf3/compat_rhs_usf3_csw/stringtable.xml b/addons/compat_rhs_usf3/compat_rhs_usf3_csw/stringtable.xml index bb185513a7..bc2413a2ca 100644 --- a/addons/compat_rhs_usf3/compat_rhs_usf3_csw/stringtable.xml +++ b/addons/compat_rhs_usf3/compat_rhs_usf3_csw/stringtable.xml @@ -10,6 +10,7 @@ [CSW] BGM-71A TOW [CSW] BGM-71A TOW [CSW] BGM-71A TOW + [CSW] BGM-71A TOW [CSW] BGM-71B TOW @@ -20,6 +21,7 @@ [CSW] BGM-71B TOW [CSW] BGM-71B TOW [CSW] BGM-71B TOW + [CSW] BGM-71B TOW [CSW] BGM-71C ITOW @@ -30,6 +32,7 @@ [CSW] BGM-71C ITOW [CSW] BGM-71C ITOW [CSW] BGM-71C ITOW + [CSW] BGM-71C ITOW [CSW] BGM-71D TOW-2 @@ -40,6 +43,7 @@ [CSW] BGM-71D TOW-2 [CSW] BGM-71D TOW-2 [CSW] BGM-71D TOW-2 + [CSW] BGM-71D TOW-2 [CSW] BGM-71E TOW-2A @@ -50,6 +54,7 @@ [CSW] BGM-71E TOW-2A [CSW] BGM-71E TOW-2A [CSW] BGM-71E TOW-2A + [CSW] BGM-71E TOW-2A [CSW] BGM-71F TOW-2B @@ -60,6 +65,7 @@ [CSW] BGM-71F TOW-2B [CSW] BGM-71F TOW-2B [CSW] BGM-71F TOW-2B + [CSW] BGM-71F TOW-2B [CSW] BGM-71F-3 TOW-2B AERO @@ -70,6 +76,7 @@ [CSW] BGM-71F-3 TOW-2B AERO [CSW] BGM-71F-3 TOW-2B AERO [CSW] BGM-71F-3 TOW-2B AERO + [CSW] BGM-71F-3 TOW-2B AERO [CSW] BGM-71H Bunker Buster @@ -80,6 +87,7 @@ [CSW] BGM-71H Anti-Búnquer [CSW] BGM-71H Bunker Buster [CSW] BGM-71H Anti-Bunker + [CSW] BGM-71H Bunker Buster [CSW] Mk. 19 40mm M384 HE @@ -90,6 +98,7 @@ [CSW] Mk. 19 40mm M384 HE [CSW] Mk. 19 40mm M384 HE [CSW] Mk. 19 40mm M384 HE + [CSW] Mk. 19 40mm M384 HE [CSW] Mk. 19 40mm M430I HEDP @@ -100,6 +109,7 @@ [CSW] Mk. 19 40mm M430I HEDP [CSW] Mk. 19 40mm M430I HEDP [CSW] Mk. 19 40mm M430I HEDP + [CSW] Mk. 19 40mm M430I HEDP [CSW] Mk. 19 40mm M430A1 HEDP @@ -110,6 +120,7 @@ [CSW] Mk. 19 40mm M430A1 HEDP [CSW] Mk. 19 40mm M430A1 HEDP [CSW] Mk. 19 40mm M430A1 HEDP + [CSW] Mk. 19 40mm M430A1 HEDP [CSW] Mk. 19 40mm M1001 Canister @@ -120,6 +131,7 @@ [CSW] Mk. 19 40mm M1001 Bote de metralla [CSW] Mk. 19 40mm M1001 Kanister [CSW] Mk. 19 40mm M1001 Pallettoni + [CSW] Mk. 19 40 mm M1001 Chevrotine diff --git a/addons/compat_ws/compat_ws_realisticnames/stringtable.xml b/addons/compat_ws/compat_ws_realisticnames/stringtable.xml index b38f1a867e..092fd2a9ea 100644 --- a/addons/compat_ws/compat_ws_realisticnames/stringtable.xml +++ b/addons/compat_ws/compat_ws_realisticnames/stringtable.xml @@ -8,6 +8,7 @@ AA12 AA12 AA12 + AA12 AA12 (Sand) @@ -16,6 +17,7 @@ AA12 (Sabbia) AA12 (サンド) AA12 (Песочный) + AA12 (Sable) AA12 (Snake) @@ -32,6 +34,7 @@ Galil ARM ガリル ARM Galil ARM + Galil ARM Galil ARM (Old) @@ -40,6 +43,7 @@ Galil ARM (Vecchio) ガリル ARM (使い古し) Galil ARM (Старый) + Galil ARM (Ancien) GLX 160 @@ -48,6 +52,7 @@ GLX-160 GLX 160 GLX 160 + GLX 160 GLX 160 (Snake) @@ -64,6 +69,7 @@ GLX-160 (Hex) GLX 160 (六角形迷彩) GLX 160 (Гекс) + GLX 160 (Hex) GLX 160 (Green Hex) @@ -72,6 +78,7 @@ GLX-160 (Hex Verde) GLX 160 (緑六角形迷彩) GLX 160 (Зеленый Гекс) + GLX 160 (Vert Hex) GLX 160 (Camo) @@ -80,6 +87,7 @@ GLX-160 (Mimetica) GLX 160 (迷彩) GLX 160 (Камуфляж) + GLX 160 (Camo) GLX 160 (Sand) @@ -88,6 +96,7 @@ GLX-160 (Sabbia) GLX 160 (サンド) GLX 160 (Песочный) + GLX 160 (Sable) Mk14 Mod 1 EBR (Black) @@ -96,6 +105,7 @@ Mk14 Mod 1 EBR (Nero) Mk14 Mod 1 EBR (ブラック) Mk14 Mod 1 EBR (Черный) + Mk14 Mod 1 EBR (Noir) Mk14 Mod 1 EBR (Snake) @@ -111,6 +121,7 @@ Vektor SS-77 ヴェクター SS-77 Vektor SS-77 + Vektor SS-77 Vektor SS-77 (Camo) @@ -119,6 +130,7 @@ Vektor SS-77 (Mimetica) ヴェクター SS-77 (迷彩) Vektor SS-77 (Камуфляж) + Vektor SS-77 (Camo) Vektor SS-77 (Hex) @@ -127,6 +139,7 @@ Vektor SS-77 (Hex) ヴェクター SS-77 (六角形迷彩) Vektor SS-77 (гекс) + Vektor SS-77 (Hex) Vektor SS-77 (Green Hex) @@ -135,6 +148,7 @@ Vektor SS-77 (Hex Verde) ヴェクター SS-77 (緑六角形迷彩) Vektor SS-77 (зеленый гекс) + Vektor SS-77 (VertHex) Vektor SS-77 (Desert) @@ -143,6 +157,7 @@ Vektor SS-77 (Deserto) ヴェクター SS-77 (砂漠迷彩) Vektor SS-77 (песочныйt) + Vektor SS-77 (Désert) Vektor SS-77 Compact @@ -151,6 +166,7 @@ Vektor SS-77 Compatto ヴェクター SS-77 コンパクト Vektor SS-77 Compact + Vektor SS-77 Compacte Vektor SS-77 Compact (Snake) @@ -167,6 +183,7 @@ FN FAL 50.00 (Legno) FN FAL 50.00 (森林迷彩) FN FAL 50.00 (лесной) + FN FAL 50.00 (Bois) FN FAL 50.00 GL (Wood) @@ -175,6 +192,7 @@ FN FAL 50.00 GL (Legno) FN FAL 50.00 GL (森林迷彩) FN FAL 50.00 GL (лесной) + FN FAL 50.00 GL (Bois) FN FAL 50.00 @@ -183,6 +201,7 @@ FN FAL 50.00 FN FAL 50.00 FN FAL 50.00 + FN FAL 50.00 FN FAL 50.00 GL @@ -191,6 +210,7 @@ FN FAL 50.00 GL FN FAL 50.00 GL FN FAL 50.00 GL + FN FAL 50.00 GL FN FAL 50.00 (Desert) @@ -199,6 +219,7 @@ FN FAL 50.00 (Deserto) FN FAL 50.00 (砂漠迷彩) FN FAL 50.00 (песочный) + FN FAL 50.00 (Désert) FN FAL 50.00 (Jungle) @@ -207,6 +228,7 @@ FN FAL 50,00 (Giungla) FN FAL 50.00 (熱帯迷彩) FN FAL 50.00 (джунгли) + FN FAL 50.00 (Jungle) Vektor R4 @@ -215,6 +237,7 @@ Vektor R4 ヴェクター R5 Vektor R4 + Vektor R4 Vektor R5 Carbine @@ -223,6 +246,7 @@ Vektor R5 Carabina ヴェクター R5 カービン Vektor R5 Carbine + Vektor R5 Carbine Vektor R5 Carbine GL @@ -231,6 +255,7 @@ Vektor R5 Carabina GL ヴェクター R5 カービン GL Vektor R5 Carbine GL + Vektor R5 Carbine GL Vektor R5 Carbine (Snake) diff --git a/addons/field_rations/stringtable.xml b/addons/field_rations/stringtable.xml index bd8eb3f97f..482f347598 100644 --- a/addons/field_rations/stringtable.xml +++ b/addons/field_rations/stringtable.xml @@ -266,6 +266,7 @@ 다시 채우기만 가능 Sólo rellenar Apenas reabastecer + Remplissage uniquement Terrain Object Actions @@ -279,6 +280,7 @@ 지형 물체 상호작용 Acciones sobre objetos del terreno Ações para objetos do terreno + Actions sur les objets du terrain Enables water source actions for terrain objects. @@ -292,6 +294,7 @@ 지형 물체에서 물을 얻는 게 가능해집니다. Habilitar acciones de suministros de agua para los objetos en el suelo. Habilita ações para suprimentos de água para objetos do terreno. + Active les actions relatives aux sources d'eau pour les objets de terrain. Affect Advanced Fatigue @@ -306,6 +309,7 @@ 고급 피로도에 영향을 끼침 Afecta a la Fatiga Avanzada Afeta a Fadiga Avançada + Affectation Fatigue avancée Controls if thirst and hunger should affect ACE Advanced Fatigue. @@ -320,6 +324,7 @@ 배고픔과 목마름이 고급 피로도에 영향을 끼칠지를 정합니다 Controla si la sed y el hambre afectan a la Fatiga Avanzada de ACE Controla se a sede e a fome afetam a Fadiga Avançada do ACE. + Contrôle si la soif et la faim doivent affecter la fatigue avancée ACE. HUD Type @@ -334,6 +339,7 @@ HUD 종류 Tipo de HUD Tipo de HUD + Type de HUD Selects which HUD style will be used. @@ -348,6 +354,7 @@ 사용될 HUD 스타일을 고르십시오. Selecciona qué estilo de HUD será utilizado. Seleciona qual estilo de HUD será usado. + Sélectionne le style HUD à utiliser. Colored Icons @@ -362,6 +369,7 @@ 색깔 아이콘 Iconos coloreados Ícones coloridos + Icônes de couleur Draining Icons @@ -376,6 +384,7 @@ 빠지는 아이콘 Iconos de drenado Ícones de drenagem + Icônes incolores HUD Show Level @@ -390,6 +399,7 @@ HUD 표시 Mostrar nivel en HUD Mostrar nível no HUD + Afficher le niveau dans le HUD Automatically show the HUD when either thirst or hunger are above this level. @@ -404,6 +414,7 @@ 정한 퍼센트 이하로 내려가면 HUD가 나타나게 합니다. Mostrar automáticamente el HUD cuando la sed o el hambre están por encima de este nivel. Mostrar automaticamente o HUD quando a sede ou a fome estão acima deste nível. + Affiche automatiquement le HUD dès que la soif ou la faim sont au-dessus de ce niveau. Always @@ -435,6 +446,7 @@ 색깔 아이콘 - 투명도 Iconos coloreados - Transparencia Ícones coloridos - Transparência + Icônes de couleur - Transparence Controls the transparency of the Colored Icons HUD. Dynamic setting makes the HUD less transparent as thirst or hunger increase. @@ -449,6 +461,7 @@ 색깔 아이콘의 투명도를 조절합니다. 동적 설정의 경우 배고픔이나 목마름이 해결되면 덜 투명하게 바뀝니다. Controla la transparencia de los Iconos coloreados en el HUD. La opción dinámica muestra el HUD menos transparente cuando la sed o el hambre aumentan. Controla a transparência dos ícones coloridos no HUD. A configuração dinâmica torna o HUD menos transparente à medida que a sede ou a fome aumentam. + Contrôle la transparence du HUD des icônes colorées. Un réglage dynamique rend le HUD moins transparent lorsque la soif ou la faim augmentent. Dynamic @@ -479,6 +492,7 @@ 식수 보급량 Suministro de agua Suprimentos de água + Réserve d'eau The amount of water available for ACE Field Rations water source actions (-1 disabled, -10 infinite) @@ -492,6 +506,7 @@ ACE 전투식량 물 근처 행동에서 얼마나 물을 얻어 갈 수 있는지를 정합니다 (-1은 비활성화, -10은 무한대) La cantidad de agua disponible para las acciones de suministro de agua de las Raciones de Combate de ACE (-1 deshabilitado, -10 infinito) A quantidade de água disponível para as ações de suprimentos de água das Rações de Campo do ACE (-1 desativado, -10 infinito) + Quantité d'eau disponible pour les actions relatives aux sources d'eau des rations de campagne ACE (-1 désactivé, -10 infini). Water Source @@ -506,6 +521,7 @@ 수원지 Suministro de agua Fonte de água + Source d'eau Check Remaining Water @@ -520,6 +536,7 @@ 남은 물 확인 Comprobar agua restante Verificar água restante + Vérifier l'eau restante Checking remaining water... @@ -534,6 +551,7 @@ 남은 물 확인 중... Comprobando agua restante... Verificando água restante... + Vérification de l'eau restante... There are %1 litres left. @@ -548,6 +566,7 @@ %1 리터의 물이 남아있습니다. Quedan %1 litros. Ainda há %1 litros. + Il reste %1 litres. There is no water left. @@ -562,6 +581,7 @@ 물이 한 방울도 없습니다. No queda agua. Não há mais água. + Il n'y a plus d'eau. Drink From Source @@ -575,6 +595,7 @@ 수원에서 물 마시기 Beber desde el suministro Beber da fonte + Boire à la source Refill @@ -640,6 +661,7 @@ %1 먹는 중... Comiendo %1... Comendo %1... + Manger %1... Drinking %1... @@ -654,6 +676,7 @@ %1 마시는 중... Bebiendo %1... Bebendo %1... + Boire %1... Drinking from %1... @@ -668,6 +691,7 @@ %1 으로 부터 마시는 중... Bebiendo desde %1... Bebendo de %1... + Boire à %1... Drinking from source... @@ -681,6 +705,7 @@ 수원에서 마시는 중... Bebiendo desde el suministro... Bebendo da fonte... + Boire à la source... Water Bottle @@ -899,6 +924,7 @@ 상쾌한 레몬라임향의 탄산음료 Bebida refrescante de sabor lima y limón Bebida refrescante de sabor limão e lima + Une boisson gazeuse rafraîchissante au goût de citron et de citron vert. Orange flavored soft drink with a tingly, fruity taste @@ -913,6 +939,7 @@ 오렌지 향의 톡쏘는 탄산음료 Bebida refrescante de sabor naranja, con un chispeante y afrutado sabor. Bebida refrescante de sabor laranja, com um sabor frutado e formigante. + Une boisson gazeuse aromatisée à l'orange Red Gull gives you wings @@ -927,6 +954,7 @@ 레드굴은 날개를 달아줘요 Red Gull te da alas Red Gull te dá asas + Red Gull vous donne des ailes MRE Lamb Curry @@ -975,6 +1003,7 @@ MRE 비프스튜 MRE Estofado de ternera MRE ensopado de carne + MRE Ragoût de bœuf An MRE containing Beef Stew. Heat for best effect @@ -989,6 +1018,7 @@ 비프스튜가 들어있는 MRE입니다. 뜨겁게 먹을 때 가장 좋습니다 Un MRE que contiene estofado de ternera. Calentar para mejor efecto. Um MRE contendo ensopado de carne. Aquecer para melhor efeito + Un MRE contenant du ragoût de bœuf. Chauffer pour un meilleur effet MRE Cream Tomato Soup @@ -1237,6 +1267,7 @@ Семечки подсолнуха Pipas de girasol Sementes de girassol + Graines de tournesol Roasted And Salted @@ -1249,6 +1280,7 @@ Поджаренные и солёные Tostadas y saladas Torradas e salgadas + Grillé et salé diff --git a/addons/fieldmanual/stringtable.xml b/addons/fieldmanual/stringtable.xml index a4474dc2d4..18f45a1e7e 100644 --- a/addons/fieldmanual/stringtable.xml +++ b/addons/fieldmanual/stringtable.xml @@ -38,6 +38,7 @@ %3Fame%4 aumenta linearmente con la velocità di movimento del soldato. Si rigenera consumando cibo.<br/><br/>%3Usa:%4<br/>%2Raccogli cibo.<br/>%2Usa [%3%12%4] e scegli %3sopravvivenza%4.<br />%2Scegli un articolo da mangiare. %3空腹度%4は兵士の移動速度に比例して増加します。食べ物を食べることで回復します。<br/><br/>%3使用方法:%4<br/>%2食べ物を持つ。<br/>%2[%3%12%4] を使って%3サバイバル%4を選択。<br/>%2食べたいものを選ぶ。 %3Голод%4 линейно увеличивается со скоростью передвижения солдата. Восстанавливайтесь, употребляя пищу.<br/><br/>%3 Использование:%4<br/>%2Возьмите еду.<br/>%2Используйте [%3%12%4] и выберите %3Выживание% 4.<br/>%2Выберите продукт для потребления. + %3La faim%4 augmente linéairement avec la vitesse de déplacement du soldat. Il se régénère en consommant de la nourriture.<br/><br/>%3Utilisation:%4<br/>%2Ramasser la nourriture.<br/>%2Utilisez [%3%12%4] et sélectionnez %3Survie%4.<br/>%2Choisissez un article à consommer. Thirst @@ -59,6 +60,7 @@ %3Sete%4 aumenta linearmente con la velocità di movimento del soldato. Si rigenera bevendo liquidi.<br/><br/>%3Usa:%4<br/>%2Raccogli bevanda.<br/>%2Usa [%3%12%4] e scegli %3sopravvivenza%4.<br />%2Scegli un articolo da bere. %3喉の渇き%4は兵士の移動速度に比例して増加します。飲み物を飲むことで回復します。<br/><br/>%3使用方法:%4<br/>%2飲み物を持つ。<br/>%2[%3%12%4] を使って%3サバイバル%4を選択。<br/>%2飲みたいものを選ぶ。 %3Жажда%4 линейно увеличивается со скоростью передвижения солдата. Восстанавливайтесь, употребляя напитки.<br/><br/>%3 Использование:%4<br/>%2Возьмите напиток.<br/>%2Используйте [%3%12%4] и выберите %3Выживание% 4.<br/>%2Выберите напиток для потребления. + %3La soif%4 augmente linéairement avec la vitesse de déplacement du soldat. Elle se régénère en buvant des liquides.<br/><br/>%3Utilisez [%3%12%4] et choisissez %3survival%4.<br />%2Choisissez un article à boire. Medical Treatment @@ -91,6 +93,7 @@ %3Adenosina%4 è usata per rallentare il ritmo cardiaco.<br/><br/>%3Utilizzo:%4<br/>%2Usa [%3%13%4] o [%3%14%4] e seleziona un arto.<br/>%2Inject %3Adenosina%4. %3アデノシン%4は心拍数を下げるのに使われます。<br/><br/>%3使用方法:%4<br/>%2[%3%13%4] または [%3%14%4] を使って四肢を選択します。<br/>%2そして%3アデノシン%4を注射します。 %3Аденозин%4 используется для снижения частоты сердечных сокращений.<br/><br/>%3Применение:%4<br/>%2Используйте [%3%13%4] или [%3%14%4] и выберите конечность.<br/>%2Введите %3Аденозин%4. + L'%3adénosine%4 est utilisée pour réduire la fréquence cardiaque.<br/><br/>%3Utilisation:%4<br/>%2Utilisez [%3%13%4] ou [%3%14%4] et sélectionnez un membre.<br/>%2Injectez l'%3Adénosine%4. Bandages @@ -131,6 +134,7 @@ IV-Flüssigkeiten Fluidi EV IV 輸液 + IV Fluides Restore Blood Volume @@ -141,6 +145,7 @@ Ristorano Volume di Sangue 血液量を回復する Внутривенные жидкости + Restaurer le volume sanguin %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. @@ -200,6 +205,7 @@ Risolvi frattura 骨折を治す Исправлять переломы + Réparation des 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. @@ -524,6 +530,7 @@ 휴대용 기상 관측 장비입니다 携帯気象予報所 Карманная метеостанция + Station météo de poche 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. @@ -539,6 +546,7 @@ 위치를 삼각측량합니다 三角測量で位置を特定 Передавайте свое местоположение + Trianguler votre 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]. @@ -546,6 +554,7 @@ Gli %3Strumenti Cartografici%4 permettono al soldato di misurare distanze e angoli sulla mappa. Utile a terra e per calculare direzioni di tiro per artiglieria.<br/><br/>%3Utilizzo:%4<br/>%2Apri %3Mappa%4.<br/>%2Usa [%3%12%4] e seleziona %3Strumenti Cartografici%4.<br/>%2 Lo strumento può essere spostato trascinandolo con [%3Click-Sinistro%4] premendo [%3ALT%4]. %3독도용 도구%4는 병사가 거리와 각도를 측정할 수 있는 도구 세트입니다. 지상에서 유용하며 포병 사격 솔루션 계산에 유용합니다,<br/><br/>%3사용 방법:%4<br/>%2%3지도%4를 여십시오.<br/>%2[%3%12%4]를 사용하여 %3독도용 도구%4를 선택하십시오.<br/>%2도구는 [%3Alt 키%4]를 누른 상태에서 [%3마우스 왼쪽 클릭%4]으로 드래그하여 이동할 수 있습니다. %3マップ ツール%4は、兵士が距離と角度を測定できるようにするツールのセットです。陸上や大砲の射撃工程の計算を解くのに役立ちます。<br/><br/>%3使用方法:%4<br/>%2%3マップ%4を開きます。<br/>%2[%3%12%4] を使って%3マップ ツール%4を選択します。<br/>%2 [%3ALT%4] を押しながら [%3左クリック%4] でドラッグするとツールを移動できます。 + Les %3Outils cartographiques%4 sont un ensemble d'outils permettant au soldat de mesurer des distances et des angles. Utile pour la terre et le calcul des solutions de tir pour l'artillerie.<br/><br/>%3Utilisation:%4<br/>%2Ouvrir la%3Carte%4.<br/>%2Utiliser [%3%12%4] et sélectionner %3Outils cartographiques%4.<br/>%2 L'outil peut être déplacé en le faisant glisser avec [%3Clic gauche%4] tout en maintenant [%3ALT%4]. Advanced DAGR @@ -554,6 +563,7 @@ 고급형 DAGR입니다 より高度なDAGR Продвинутый DAGR + DAGR avancé 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. @@ -569,6 +579,7 @@ 사거리표 射表 Таблицы диапазонов + Tables de tir Get A Firing Solution @@ -577,6 +588,7 @@ 사격 솔루션을 제공합니다 撃ち方の解を得る Получите расчёт + Obtenir une solution de tir %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. @@ -592,6 +604,7 @@ 로프 ロープ Канаты + Corde Tow With Ease @@ -690,6 +703,7 @@ 空の目を維持する Не Отрывай Глаз От Неба Gardez les yeux au ciel + Gardez les yeux au ciel %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. @@ -705,6 +719,7 @@ 진입로를 만듭니다 堂々入場する Создание собственного входа + Faire son entrée %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. @@ -785,6 +800,7 @@ 차량 열쇠 車両キー Взлом и проникновение + Clés de véhicule Lock/Unlock Vehicles @@ -793,6 +809,7 @@ 차량을 잠그거나 해제합니다 車両のロック/ロック解除 Взлом и проникновение + Verrouiller/déverrouiller un véhicule %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. diff --git a/addons/killtracker/stringtable.xml b/addons/killtracker/stringtable.xml index 8bc6ab13a2..24c7bcdd56 100644 --- a/addons/killtracker/stringtable.xml +++ b/addons/killtracker/stringtable.xml @@ -102,6 +102,7 @@ Отслеживание юнитов ИИ, убитых игроком プレイヤーに殺害されたAIユニットを追跡 플레이어가 죽인 AI 트래킹 + Suivi de l'IA tuée par les joueurs Defines if killed AIs will be shown in the kill tracker during mission debriefing. @@ -110,6 +111,7 @@ Определяет, будут ли убитые ИИ отображаться в трекере убийств во время дебрифинга миссии. ミッションデブリーフィングのキルトラッカーに殺害されたAIが表示されるかどうかを定義します。 사후강평 중 살해된 AI가 킬트래킹에 표시되는지 여부를 정의합니다. + Définit si les IA tuées seront affichées dans le tracker pendant le débriefing de la mission. diff --git a/addons/maptools/stringtable.xml b/addons/maptools/stringtable.xml index 9d23c4ffff..cca7aa98a8 100644 --- a/addons/maptools/stringtable.xml +++ b/addons/maptools/stringtable.xml @@ -41,6 +41,7 @@ 標定盤 Tavola di calcolo Графическая доска + Tableau de calcul The Plotting Board is a map tool designed for use in the directing of short range indirect fires. @@ -48,6 +49,7 @@ 標定盤(プロッティング・ボード)は、短距離の間接射撃の指示に使用するために設計されたマップツールです。 La tavola di calcolo è uno strumento utilizzato per dirigere fuoco di artiglieria a corto raggio. Графическая доска - это картографический инструмент, предназначенный для использования при ведении непрямого огня с малой дистанции. + La table de calcul est un instrument utilisé pour diriger les tirs d'artillerie à courte portée. Map Tools @@ -272,6 +274,7 @@ 플로팅 보드 그리기 채널 허용 Canali ammessi su tavola di calcolo Разрешить создание каналов на миллиметровой доске. + Canaux autorisés sur la table de calcul Channels in which plotting board drawing is enabled. @@ -279,6 +282,7 @@ 플로팅 보드 그리기가 활성화된 채널입니다. Canali in cui si può disegnare sulla tavola di calcolo. Каналы, в которых включено рисование на миллиметровой доске. + Canaux dans lesquels vous pouvez dessiner sur le tableau. Allow Direct Comms Only (Polylines Only) @@ -286,6 +290,7 @@ 직접교신만 허용 (선 긋기만) Comunicazioni Dirette (solo linee) Разрешать только прямую связь (только полилинии) + Communications directes uniquement (lignes uniquement) Allow Direct/Group Comms (Polylines and Group Markers) @@ -293,6 +298,7 @@ 직접교신/그룹무전망 허용 (선 긋기와 그룹 마커) Comunicazioni dirette/gruppo (linee e marker) Разрешить прямую/групповую связь (полилинии и групповые маркеры) + Autoriser les communications directes/de groupe (polylignes et marqueurs de groupe) Plotting Board @@ -300,6 +306,7 @@ 플로팅 보드 Tavola di calcolo Миллиметровая доска + Table de calcul Plotting Board Acrylic @@ -307,6 +314,7 @@ 플로팅 보드 (아크릴) Acrilico tavola di calcolo Миллиметровая доска акрилловая + Table de calcul Acrylique Plotting Board Ruler @@ -314,6 +322,7 @@ 플로팅 보드 (자) Righello tavola di calcolo Линейка для миллиметровой доски + Règle de la table de calcul To Plotting Board @@ -321,6 +330,7 @@ 플로팅 보드에 Su tavola di calcolo К миллиметровой доске. + Sur la table de calcul To Plotting Board Acrylic @@ -328,6 +338,7 @@ 플로팅 보드 (아크릴)에 Su acrilico tavola di calcolo К миллиметровой доске акрилловой + Sur la table de calcul Acrylique To Plotting Board Ruler @@ -335,6 +346,7 @@ 플로팅 보드 (자)에 Su righello tavola di calcolo К линейке миллиметровой доски. + Sur la règle de la table à calcul Wipe all markers off Plotting Board @@ -342,6 +354,7 @@ 플로팅 보드에 있는 모든 마커 지우기 Cancella tutti i disegni dalla tavola Сотрите все маркеры с миллиметровой доски. + Effacer tous les dessins de la planche Show Plotting Board @@ -349,6 +362,7 @@ 플로팅 보드 보이기 Mostra tavola di calcolo Показать миллиметровую доску. + Afficher la table de calcul Hide Plotting Board @@ -356,6 +370,7 @@ 플로팅 보드 숨기기 Nascondi tavola di calcolo Скрыть миллиметровую доску. + Masquer la table de calcul Toggle Plotting Board Ruler @@ -363,6 +378,7 @@ 플로팅 보드 (자) 토글 Mostra/Nascondi Righello Переключить линейку миллиметровой доски. + Afficher/masquer la règle Align @@ -412,6 +428,7 @@ 위로 Su Вверх + Monter To Maptool @@ -419,6 +436,7 @@ 독도용 도구로 Su strumento cartografico К инструментам карты + Outil cartographique diff --git a/addons/viewdistance/stringtable.xml b/addons/viewdistance/stringtable.xml index 0d97fe1f96..4404d0efe8 100644 --- a/addons/viewdistance/stringtable.xml +++ b/addons/viewdistance/stringtable.xml @@ -128,6 +128,7 @@ 0に設定すると、デフォルトのビデオ設定が使用されます Значение 0 будет использовать настройки видео по умолчанию Establecer a 0 utiliza las opciones de video por defecto + La valeur 0 permet d'utiliser les paramètres vidéo par défaut Client View Distance (On Foot) From ccb3e65734c836be0286d2ecc84330d9502fd626 Mon Sep 17 00:00:00 2001 From: Fabio Schick <58027418+mrschick@users.noreply.github.com> Date: Thu, 4 Apr 2024 13:09:02 +0200 Subject: [PATCH 35/50] Map Tools - Show GPS on Map when equipped with UAV Terminal (#9885) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Show Map GPS when equipped with UAV Terminal * Update Maptools Documentation * Reword documentation * Reword docs, remove dash Co-authored-by: Jouni Järvinen * Allow GPS when terminal slot is not empty * Allow GPS on map when GPS sidepanel is available * Reword docs Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> * Return statement - remove ; and add comment Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> --------- Co-authored-by: Jouni Järvinen Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> --- addons/maptools/functions/fnc_canUseMapGPS.sqf | 10 +++++++--- docs/wiki/feature/maptools.md | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/addons/maptools/functions/fnc_canUseMapGPS.sqf b/addons/maptools/functions/fnc_canUseMapGPS.sqf index 317eee6c42..0bdd0d0ea6 100644 --- a/addons/maptools/functions/fnc_canUseMapGPS.sqf +++ b/addons/maptools/functions/fnc_canUseMapGPS.sqf @@ -15,6 +15,10 @@ * Public: No */ -visibleMap && -{alive ACE_player} && -{"ItemGPS" in (assignedItems ACE_player)} +if (!visibleMap || {!alive ACE_player}) exitWith {false}; + +private _gpsOpened = visibleGPS; +private _gpsAvailable = openGPS true; +if (!_gpsOpened) then {openGPS false}; + +_gpsAvailable // return diff --git a/docs/wiki/feature/maptools.md b/docs/wiki/feature/maptools.md index f31c81f0e2..f8ce7e5416 100644 --- a/docs/wiki/feature/maptools.md +++ b/docs/wiki/feature/maptools.md @@ -25,7 +25,7 @@ This adds map tools that can be used to measure distances between two points or This adds a plotting board that can be used to aid in the rapid usage and adjustment of short-ranged indirect fires, as well as quick measurements of directions and distances between points, and general land-navigation. ### 1.4 GPS on map -If you are equipped with a vanilla GPS it will be shown on the map. (You don't need the `Map Tools` item in your inventory for this.) +If you have GPS capability, a GPS display will be shown on the map, indicating current grid position. (You don't need the `Map Tools` item in your inventory for this.) ## 2. Usage From 8f46ffd8d59ef0d8ed838f14797742e0231703d6 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Thu, 4 Apr 2024 13:15:26 +0200 Subject: [PATCH 36/50] General - Change `count` to `forEach` where appropriate (#9890) count -> forEach Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> --- addons/advanced_throwing/XEH_postInit.sqf | 5 ++--- .../functions/fnc_renderPickUpInteraction.sqf | 8 +++---- .../aircraft/functions/fnc_canShowEject.sqf | 2 +- addons/common/XEH_postInit.sqf | 3 +-- .../fnc__handleRequestSyncedEvent.sqf | 3 +-- .../functions/fnc_assignObjectsInList.sqf | 21 +++++++------------ addons/common/functions/fnc_cbaSettings.sqf | 3 +-- addons/common/functions/fnc_displayIcon.sqf | 7 ++----- addons/common/functions/fnc_dumpArray.sqf | 3 +-- .../functions/fnc_dumpPerformanceCounters.sqf | 9 +++----- addons/common/functions/fnc_firedEH.sqf | 3 +-- .../fnc_getAllDefinedSetVariables.sqf | 3 +-- .../common/functions/fnc_getDoorTurrets.sqf | 3 +-- addons/common/functions/fnc_getGunner.sqf | 3 +-- addons/common/functions/fnc_getInPosition.sqf | 3 +-- .../common/functions/fnc_getMapGridData.sqf | 3 +-- .../functions/fnc_getNumberMagazinesIn.sqf | 3 +-- .../common/functions/fnc_getTurretIndex.sqf | 3 +-- .../common/functions/fnc_getVehicleCrew.sqf | 3 +-- .../common/functions/fnc_getWeaponModes.sqf | 3 +-- .../common/functions/fnc_getWeaponState.sqf | 3 +-- .../functions/fnc_moduleLSDVehicles.sqf | 6 ++---- addons/common/functions/fnc_parseList.sqf | 6 ++---- .../common/functions/fnc_resetAllDefaults.sqf | 6 ++---- .../functions/fnc_restoreVariablesJIP.sqf | 4 +--- .../common/functions/fnc_sanitizeString.sqf | 3 +-- .../functions/fnc_throttledPublicVariable.sqf | 3 +-- .../concertina_wire/functions/fnc_deploy.sqf | 6 +++--- .../functions/fnc_dismountSuccess.sqf | 2 +- .../functions/fnc_disarmDropItems.sqf | 2 +- .../functions/fnc_openDisarmDialog.sqf | 2 +- .../functions/fnc_addCellphoneIED.sqf | 4 ++-- .../functions/fnc_addTriggerActions.sqf | 2 +- .../functions/fnc_getSpeedDialExplosive.sqf | 3 +-- addons/fastroping/functions/fnc_cutRopes.sqf | 4 ++-- .../fastroping/functions/fnc_deployRopes.sqf | 4 +--- .../functions/fnc_moduleEquipFRIES.sqf | 3 +-- .../fcs/functions/fnc_calculateSolution.sqf | 9 +++----- addons/finger/functions/fnc_keyPress.sqf | 5 ++--- addons/gestures/XEH_postInit.sqf | 4 +--- .../goggles/functions/fnc_isInRotorWash.sqf | 3 +-- .../functions/fnc_flashbangExplosionEH.sqf | 2 +- addons/hearing/functions/fnc_firedNear.sqf | 4 ++-- addons/huntir/functions/fnc_cam.sqf | 3 +-- .../functions/fnc_collectActiveActionTree.sqf | 9 +++----- .../functions/fnc_compileMenu.sqf | 3 +-- .../functions/fnc_compileMenuSelfAction.sqf | 3 +-- .../functions/fnc_addPassengerActions.sqf | 3 +-- addons/interaction/functions/fnc_getDown.sqf | 3 +-- addons/interaction/functions/fnc_openDoor.sqf | 8 +++---- addons/interaction/functions/fnc_sendAway.sqf | 3 +-- addons/map/XEH_postInitClient.sqf | 3 +-- addons/markers/functions/fnc_setMarkerJIP.sqf | 3 +-- .../functions/fnc_moduleAmbianceSound.sqf | 4 +--- addons/nametags/functions/fnc_onDraw3d.sqf | 3 +-- .../rearm/functions/fnc_hasEnoughSupply.sqf | 3 +-- .../rearm/functions/fnc_readSupplyCounter.sqf | 3 +-- .../fnc_rearmEntireVehicleSuccess.sqf | 3 +-- .../functions/fnc_moduleAddSpareParts.sqf | 6 ++---- .../functions/fnc_moduleRallypoint.sqf | 3 +-- .../safemode/functions/fnc_unlockSafety.sqf | 3 +-- addons/sandbag/functions/fnc_pickup.sqf | 2 +- .../functions/fnc_addSlideActions.sqf | 2 +- .../functions/fnc_autoTransition.sqf | 2 +- .../functions/fnc_createSlideshow.sqf | 5 ++--- addons/slideshow/functions/fnc_moduleInit.sqf | 3 +-- .../switchunits/functions/fnc_markAiOnMap.sqf | 5 ++--- .../functions/fnc_positionTL.sqf | 4 ++-- addons/tripod/functions/fnc_adjust.sqf | 3 +-- addons/tripod/functions/fnc_place.sqf | 2 +- addons/weaponselect/XEH_preInit.sqf | 6 ++---- .../functions/fnc_selectNextGrenade.sqf | 3 +-- .../functions/fnc_calculateWindSpeed.sqf | 6 ++---- 73 files changed, 108 insertions(+), 188 deletions(-) diff --git a/addons/advanced_throwing/XEH_postInit.sqf b/addons/advanced_throwing/XEH_postInit.sqf index 930313fce0..774c99b3e6 100644 --- a/addons/advanced_throwing/XEH_postInit.sqf +++ b/addons/advanced_throwing/XEH_postInit.sqf @@ -16,9 +16,8 @@ GVAR(ammoMagLookup) = call CBA_fnc_createNamespace; { private _ammo = getText (configFile >> "CfgMagazines" >> _x >> "ammo"); if (_ammo != "") then { GVAR(ammoMagLookup) setVariable [_ammo, _x]; }; - } count (getArray (configFile >> "CfgWeapons" >> "Throw" >> _x >> "magazines")); - nil -} count getArray (configFile >> "CfgWeapons" >> "Throw" >> "muzzles"); + } forEach (getArray (configFile >> "CfgWeapons" >> "Throw" >> _x >> "magazines")); +} forEach getArray (configFile >> "CfgWeapons" >> "Throw" >> "muzzles"); // Add keybinds diff --git a/addons/advanced_throwing/functions/fnc_renderPickUpInteraction.sqf b/addons/advanced_throwing/functions/fnc_renderPickUpInteraction.sqf index 15cae41585..d45f2add93 100644 --- a/addons/advanced_throwing/functions/fnc_renderPickUpInteraction.sqf +++ b/addons/advanced_throwing/functions/fnc_renderPickUpInteraction.sqf @@ -44,8 +44,7 @@ _addedPickUpHelpers pushBack _pickUpHelper; _throwablesHelped pushBack _x; }; - nil - } count _nearThrowables; + } forEach _nearThrowables; _args set [0, getPosASL ACE_player]; _args set [3, _nearThrowables]; @@ -56,11 +55,10 @@ { // Only handling with attachTo works nicely _x attachTo [_x getVariable [QGVAR(throwable), objNull], [0, 0, 0]]; - nil - } count _addedPickUpHelpers; + } forEach _addedPickUpHelpers; } else { TRACE_1("Cleaning Pick Up Helpers",count _addedPickUpHelpers); - {deleteVehicle _x} count _addedPickUpHelpers; + {deleteVehicle _x} forEach _addedPickUpHelpers; [_idPFH] call CBA_fnc_removePerFrameHandler; }; }, 0, [(getPosASL ACE_player) vectorAdd [-100, 0, 0], [], [], []]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/aircraft/functions/fnc_canShowEject.sqf b/addons/aircraft/functions/fnc_canShowEject.sqf index 08c55eb781..9239c413a7 100644 --- a/addons/aircraft/functions/fnc_canShowEject.sqf +++ b/addons/aircraft/functions/fnc_canShowEject.sqf @@ -30,6 +30,6 @@ _vehicle == vehicle _unit if (_unit == _x select FULLCREW_UNIT) exitWith { _ejectVarName = format [QGVAR(ejectAction_%1_%2), _x select FULLCREW_ROLE, _x select FULLCREW_TURRETPATH]; }; - } count fullCrew _vehicle; + } forEach fullCrew _vehicle; _vehicle getVariable [_ejectVarName, false] } diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index 1f259c2e3d..f97009808f 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -145,8 +145,7 @@ if (isServer) then { INFO_3("[%1] DC - Was Zeus [%2] while controlling unit [%3] - manually clearing `bis_fnc_moduleRemoteControl_owner`",[_x] call FUNC(getName),_dcPlayer,_x); _x setVariable ["bis_fnc_moduleRemoteControl_owner", nil, true]; }; - nil - } count (curatorEditableObjects _zeusLogic); + } forEach (curatorEditableObjects _zeusLogic); }; }]; }; diff --git a/addons/common/functions/fnc__handleRequestSyncedEvent.sqf b/addons/common/functions/fnc__handleRequestSyncedEvent.sqf index 299dff8373..1924ed22ff 100644 --- a/addons/common/functions/fnc__handleRequestSyncedEvent.sqf +++ b/addons/common/functions/fnc__handleRequestSyncedEvent.sqf @@ -43,8 +43,7 @@ if (isServer) then { { _x params ["", "_eventArgs","_ttl"]; [_eventName, _eventArgs, _ttl] call FUNC(_handleSyncedEvent); - false - } count _eventLog; + } forEach _eventLog; INFO_1("[%1] synchronized",_eventName); }; diff --git a/addons/common/functions/fnc_assignObjectsInList.sqf b/addons/common/functions/fnc_assignObjectsInList.sqf index 23d373c310..0928812cd4 100644 --- a/addons/common/functions/fnc_assignObjectsInList.sqf +++ b/addons/common/functions/fnc_assignObjectsInList.sqf @@ -28,18 +28,13 @@ if (_list isEqualType "") then { }; { - if (!isNil "_x") then { - if (_x isEqualType objNull) then { - if (local _x) then { - if (_vehicle) then { - (vehicle _x) setVariable [_variable, _setting, _global]; - TRACE_6("Set variable vehicle",_x,vehicle _x,typeOf (vehicle _x),_variable,_setting,_global); - } else { - _x setVariable [_variable, _setting, _global]; - TRACE_5("Set variable",_x,typeOf _x,_variable,_setting,_global); - }; - }; + if (!isNil "_x" && {_x isEqualType objNull} && {local _x}) then { + if (_vehicle) then { + (vehicle _x) setVariable [_variable, _setting, _global]; + TRACE_6("Set variable vehicle",_x,vehicle _x,typeOf (vehicle _x),_variable,_setting,_global); + } else { + _x setVariable [_variable, _setting, _global]; + TRACE_5("Set variable",_x,typeOf _x,_variable,_setting,_global); }; }; - false -} count _list; +} forEach _list; diff --git a/addons/common/functions/fnc_cbaSettings.sqf b/addons/common/functions/fnc_cbaSettings.sqf index 6be8f60505..29e4d532b1 100644 --- a/addons/common/functions/fnc_cbaSettings.sqf +++ b/addons/common/functions/fnc_cbaSettings.sqf @@ -66,8 +66,7 @@ GVAR(settingsMovedToSQF) = []; INFO_1("%1 delayed functions running.",count GVAR(runAtSettingsInitialized)); { (_x select 1) call (_x select 0); - false - } count GVAR(runAtSettingsInitialized); + } forEach GVAR(runAtSettingsInitialized); GVAR(runAtSettingsInitialized) = nil; //cleanup #ifdef DEBUG_MODE_FULL diff --git a/addons/common/functions/fnc_displayIcon.sqf b/addons/common/functions/fnc_displayIcon.sqf index 1b307fdf33..da08fa832a 100644 --- a/addons/common/functions/fnc_displayIcon.sqf +++ b/addons/common/functions/fnc_displayIcon.sqf @@ -53,8 +53,7 @@ private _refresh = { { ctrlDelete _x; - false - } count _allControls; + } forEach _allControls; _allControls = []; @@ -80,7 +79,6 @@ private _refresh = { _ctrl ctrlSetTextColor _xcolor; _ctrl ctrlCommit 0; _allControls pushBack _ctrl; - false } forEach (missionNamespace getVariable [QGVAR(displayIconList),[]]); }; @@ -116,8 +114,7 @@ if (_show) then { if (_x select 0 != _iconId) then { _newList pushBack _x; }; - false - } count _list; + } forEach _list; missionNamespace setVariable [QGVAR(displayIconList), _newList]; call _refresh; diff --git a/addons/common/functions/fnc_dumpArray.sqf b/addons/common/functions/fnc_dumpArray.sqf index 754b811314..87437c37e2 100644 --- a/addons/common/functions/fnc_dumpArray.sqf +++ b/addons/common/functions/fnc_dumpArray.sqf @@ -34,8 +34,7 @@ if (IS_ARRAY(_var)) then { { [_x, _depth] call FUNC(dumpArray); - false - } count _var; + } forEach _var; diag_log text format ["%1],", _pad]; }; diff --git a/addons/common/functions/fnc_dumpPerformanceCounters.sqf b/addons/common/functions/fnc_dumpPerformanceCounters.sqf index fa0b4e4e6d..309b82c673 100644 --- a/addons/common/functions/fnc_dumpPerformanceCounters.sqf +++ b/addons/common/functions/fnc_dumpPerformanceCounters.sqf @@ -25,8 +25,7 @@ if (!isNil "ACE_PFH_COUNTER") then { private _isActive = ["ACTIVE", "REMOVED"] select isNil {CBA_common_PFHhandles select (_pfh select 0)}; diag_log text format ["Registered PFH: id=%1 [%2, delay %3], %4:%5", _pfh select 0, _isActive, _parameters select 1, _pfh select 1, _pfh select 2]; - false - } count ACE_PFH_COUNTER; + } forEach ACE_PFH_COUNTER; }; diag_log text format ["ACE COUNTER RESULTS"]; @@ -50,8 +49,7 @@ diag_log text format ["-------------------------------------------"]; }; _iter = _iter + 1; - false - } count _counterEntry; + } forEach _counterEntry; // results _averageResult = (_total / _count) * 1000; @@ -61,8 +59,7 @@ diag_log text format ["-------------------------------------------"]; } else { diag_log text format ["%1: No results", _counterEntry select 0]; }; - false -} count ACE_COUNTERS; +} forEach ACE_COUNTERS; /* // Dump PFH Trackers diff --git a/addons/common/functions/fnc_firedEH.sqf b/addons/common/functions/fnc_firedEH.sqf index cee874782a..2c0c32994d 100644 --- a/addons/common/functions/fnc_firedEH.sqf +++ b/addons/common/functions/fnc_firedEH.sqf @@ -50,8 +50,7 @@ if (_unit isKindOf "CAManBase") then { _gunner = _unit turretUnit _x; _turret = _x; }; - false - } count allTurrets [_unit, true]; + } forEach allTurrets [_unit, true]; // Ensure that at least the pilot is returned if there is no gunner if (isManualFire _unit && {isNull _gunner}) then { _gunner = effectiveCommander _unit; diff --git a/addons/common/functions/fnc_getAllDefinedSetVariables.sqf b/addons/common/functions/fnc_getAllDefinedSetVariables.sqf index 6642a09789..081836c196 100644 --- a/addons/common/functions/fnc_getAllDefinedSetVariables.sqf +++ b/addons/common/functions/fnc_getAllDefinedSetVariables.sqf @@ -35,7 +35,6 @@ private _return = []; _return pushBack [_x select 0, typeName _val, _val, _x select 2, _x select 5]; }; }; - false -} count GVAR(OBJECT_VARIABLES_STORAGE); +} forEach GVAR(OBJECT_VARIABLES_STORAGE); _return diff --git a/addons/common/functions/fnc_getDoorTurrets.sqf b/addons/common/functions/fnc_getDoorTurrets.sqf index fb652cfd1a..1b6f22152a 100644 --- a/addons/common/functions/fnc_getDoorTurrets.sqf +++ b/addons/common/functions/fnc_getDoorTurrets.sqf @@ -29,7 +29,6 @@ private _doorTurrets = []; if (((getNumber (_config >> "isCopilot")) == 0) && {count getArray (_config >> "weapons") > 0}) then { _doorTurrets pushBack _x; }; - false -} count _turrets; +} forEach _turrets; _doorTurrets diff --git a/addons/common/functions/fnc_getGunner.sqf b/addons/common/functions/fnc_getGunner.sqf index bb3ebb23e9..376f18070e 100644 --- a/addons/common/functions/fnc_getGunner.sqf +++ b/addons/common/functions/fnc_getGunner.sqf @@ -28,8 +28,7 @@ private _gunner = objNull; if (_weapon in (_vehicle weaponsTurret _x)) exitWith { _gunner = _vehicle turretUnit _x; }; - false -} count allTurrets [_vehicle, true]; +} forEach allTurrets [_vehicle, true]; // ensure that at least the pilot is returned if there is no gunner if (isManualFire _vehicle && {isNull _gunner}) then { diff --git a/addons/common/functions/fnc_getInPosition.sqf b/addons/common/functions/fnc_getInPosition.sqf index 6a95725e6e..076fd7a23c 100644 --- a/addons/common/functions/fnc_getInPosition.sqf +++ b/addons/common/functions/fnc_getInPosition.sqf @@ -38,8 +38,7 @@ private _enemiesInVehicle = false; //Possible Side Restriction { if (side _unit getFriend side _x < 0.6) exitWith {_enemiesInVehicle = true}; - false -} count crew _vehicle; +} forEach crew _vehicle; switch (_position) do { case "driver" : { diff --git a/addons/common/functions/fnc_getMapGridData.sqf b/addons/common/functions/fnc_getMapGridData.sqf index bce6351af0..daa4bd86cd 100644 --- a/addons/common/functions/fnc_getMapGridData.sqf +++ b/addons/common/functions/fnc_getMapGridData.sqf @@ -38,8 +38,7 @@ private _stepY = 1e10; _stepX = getNumber (_x >> "stepX"); _stepY = getNumber (_x >> "stepY"); }; - false -} count configProperties [_cfgGrid, "isClass _x", false]; +} forEach configProperties [_cfgGrid, "isClass _x", false]; private _letterGrid = false; diff --git a/addons/common/functions/fnc_getNumberMagazinesIn.sqf b/addons/common/functions/fnc_getNumberMagazinesIn.sqf index fc2c3d0605..b71e6729dd 100644 --- a/addons/common/functions/fnc_getNumberMagazinesIn.sqf +++ b/addons/common/functions/fnc_getNumberMagazinesIn.sqf @@ -25,8 +25,7 @@ if (_unit isKindOf "CAManBase") then { } else { { _return = _return + ({_x == _magazine} count magazines _x); - false - } count crew _unit; + } forEach crew _unit; (getMagazineCargo _unit) params [["_magNames", []], ["_magCount", []]]; { diff --git a/addons/common/functions/fnc_getTurretIndex.sqf b/addons/common/functions/fnc_getTurretIndex.sqf index dcbaafb3b2..75deced412 100644 --- a/addons/common/functions/fnc_getTurretIndex.sqf +++ b/addons/common/functions/fnc_getTurretIndex.sqf @@ -24,7 +24,6 @@ scopeName "main"; { if (_unit == (_vehicle turretUnit _x)) then {_x breakOut "main"}; - nil -} count allTurrets [_vehicle, true]; +} forEach allTurrets [_vehicle, true]; [] diff --git a/addons/common/functions/fnc_getVehicleCrew.sqf b/addons/common/functions/fnc_getVehicleCrew.sqf index 3e5e015785..a1bc06f6ab 100644 --- a/addons/common/functions/fnc_getVehicleCrew.sqf +++ b/addons/common/functions/fnc_getVehicleCrew.sqf @@ -33,7 +33,6 @@ private _crew = []; _crew pushBack (_x select 0); }; }; - false -} count fullCrew _vehicle; +} forEach fullCrew _vehicle; _crew diff --git a/addons/common/functions/fnc_getWeaponModes.sqf b/addons/common/functions/fnc_getWeaponModes.sqf index 55e260ef27..c1ca241cab 100644 --- a/addons/common/functions/fnc_getWeaponModes.sqf +++ b/addons/common/functions/fnc_getWeaponModes.sqf @@ -29,7 +29,6 @@ private _modes = []; if (_x == "this") then { _modes pushBack _weapon; }; - false -} count getArray (_config >> "modes"); +} forEach getArray (_config >> "modes"); _modes diff --git a/addons/common/functions/fnc_getWeaponState.sqf b/addons/common/functions/fnc_getWeaponState.sqf index 7ccb016c7a..2fadbd23ea 100644 --- a/addons/common/functions/fnc_getWeaponState.sqf +++ b/addons/common/functions/fnc_getWeaponState.sqf @@ -42,7 +42,6 @@ private _ammo = _muzzles apply {0}; _ammo set [_index, _x select 1]; }; }; - false -} count magazinesAmmoFull _unit; +} forEach magazinesAmmoFull _unit; [_attachments, _muzzles, _magazines, _ammo]; diff --git a/addons/common/functions/fnc_moduleLSDVehicles.sqf b/addons/common/functions/fnc_moduleLSDVehicles.sqf index fde230b0ca..35e1f07eba 100644 --- a/addons/common/functions/fnc_moduleLSDVehicles.sqf +++ b/addons/common/functions/fnc_moduleLSDVehicles.sqf @@ -28,8 +28,7 @@ if (isNil QGVAR(LSD_Vehicles)) then { if (_hSCount > 0) then { GVAR(LSD_Vehicles) pushBack [_x, _hSCount]; }; - nil -} count _units; +} forEach _units; if (isNil QGVAR(LSD_Colors)) then { GVAR(LSD_Colors) = [ @@ -51,8 +50,7 @@ if (isNil QGVAR(LSD_PFH)) then { for "_i" from 0 to (_hSCount - 1) do { _vehicle setObjectTexture [_i, GVAR(LSD_Colors) select _index]; }; - nil - } count GVAR(LSD_Vehicles); + } forEach GVAR(LSD_Vehicles); _index = ((_index + 1) % 7) mod count GVAR(LSD_Colors); (_this select 0) set [0, _index]; diff --git a/addons/common/functions/fnc_parseList.sqf b/addons/common/functions/fnc_parseList.sqf index 93ceccf17d..a559994bfa 100644 --- a/addons/common/functions/fnc_parseList.sqf +++ b/addons/common/functions/fnc_parseList.sqf @@ -32,8 +32,7 @@ private _whitespaceList = []; } else { _whitespaceList pushBack ([_x] call CBA_fnc_trim); }; - false -} count _list; +} forEach _list; _list = _whitespaceList; TRACE_1("Whitespace List",_list); @@ -46,8 +45,7 @@ if (_checkNil) then { if (!isNil _x) then { _nilCheckedList pushBack (missionNamespace getVariable _x); }; - false - } count _list; + } forEach _list; _list = _nilCheckedList; }; diff --git a/addons/common/functions/fnc_resetAllDefaults.sqf b/addons/common/functions/fnc_resetAllDefaults.sqf index 4d9f42a13b..ef74724183 100644 --- a/addons/common/functions/fnc_resetAllDefaults.sqf +++ b/addons/common/functions/fnc_resetAllDefaults.sqf @@ -27,8 +27,7 @@ if (isPlayer _unit) then { // clear all disable user input { [_x, false] call FUNC(setDisableUserInputStatus); - false - } count GVAR(DISABLE_USER_INPUT_COLLECTION); + } forEach GVAR(DISABLE_USER_INPUT_COLLECTION); }; }; @@ -36,5 +35,4 @@ if (isPlayer _unit) then { if !(_x select 4) then { _unit setVariable [_x select 0, nil, _x select 3]; }; - false -} count ([_unit] call FUNC(getAllDefinedSetVariables)); +} forEach ([_unit] call FUNC(getAllDefinedSetVariables)); diff --git a/addons/common/functions/fnc_restoreVariablesJIP.sqf b/addons/common/functions/fnc_restoreVariablesJIP.sqf index 905353d8ab..ac22cd3fa0 100644 --- a/addons/common/functions/fnc_restoreVariablesJIP.sqf +++ b/addons/common/functions/fnc_restoreVariablesJIP.sqf @@ -24,6 +24,4 @@ _respawnVariables pushBack "ACE_PersistentFunctions"; { _unit setVariable [_x, _unit getVariable _x, true]; - false -} count _respawnVariables; -nil +} forEach _respawnVariables; diff --git a/addons/common/functions/fnc_sanitizeString.sqf b/addons/common/functions/fnc_sanitizeString.sqf index c30cbe1292..7d0b2dd2f1 100644 --- a/addons/common/functions/fnc_sanitizeString.sqf +++ b/addons/common/functions/fnc_sanitizeString.sqf @@ -47,7 +47,6 @@ private _array = []; _array pushBack _x; }; }; - false -} count toArray _string; +} forEach toArray _string; toString _array // return diff --git a/addons/common/functions/fnc_throttledPublicVariable.sqf b/addons/common/functions/fnc_throttledPublicVariable.sqf index 3c1ed2761b..e6b1fdbaf6 100644 --- a/addons/common/functions/fnc_throttledPublicVariable.sqf +++ b/addons/common/functions/fnc_throttledPublicVariable.sqf @@ -29,8 +29,7 @@ if (isNil QGVAR(publishSchedId)) then { { _x params ["_unit", "_varName"]; _unit setVariable [_varName, _unit getVariable _varName, true]; - false - } count GVAR(publishVarNames); + } forEach GVAR(publishVarNames); GVAR(publishVarNames) = []; GVAR(publishNextTime) = 1e7; diff --git a/addons/concertina_wire/functions/fnc_deploy.sqf b/addons/concertina_wire/functions/fnc_deploy.sqf index 579bc73f97..c915109e1b 100644 --- a/addons/concertina_wire/functions/fnc_deploy.sqf +++ b/addons/concertina_wire/functions/fnc_deploy.sqf @@ -22,7 +22,7 @@ params ["_wirecoil", "_unit"]; private _wireNoGeo = "ACE_ConcertinaWireNoGeo" createVehicle [0,0,0]; { _wireNoGeo animate [_x, 1]; -} count WIRE_FAST; +} forEach WIRE_FAST; GVAR(placer) = _unit; private _dir = getDir _unit; @@ -51,7 +51,7 @@ GVAR(deployPFH) = [{ private _wire = "ACE_ConcertinaWire" createvehicle [0, 0, 0]; { _wire animate [_x, _anim]; - } count WIRE_FAST; + } forEach WIRE_FAST; [{ params ["_args", "_idPFH"]; @@ -74,7 +74,7 @@ GVAR(deployPFH) = [{ _wireNoGeo setDir _dir; { _wireNoGeo animate [_x, _anim]; - } count WIRE_FAST; + } forEach WIRE_FAST; }, 0, [_wireNoGeo, _wireNoGeoPos, _unit]] call CBA_fnc_addPerFrameHandler; [LLSTRING(RollWire), "", ""] call EFUNC(interaction,showMouseHint); diff --git a/addons/concertina_wire/functions/fnc_dismountSuccess.sqf b/addons/concertina_wire/functions/fnc_dismountSuccess.sqf index 3a90b62a91..86aac9e8bf 100644 --- a/addons/concertina_wire/functions/fnc_dismountSuccess.sqf +++ b/addons/concertina_wire/functions/fnc_dismountSuccess.sqf @@ -20,7 +20,7 @@ params ["_wire"]; { _wire animate [_x, 1]; -} count WIRE_FAST; +} forEach WIRE_FAST; [{ params ["_args", "_idPFH"]; diff --git a/addons/disarming/functions/fnc_disarmDropItems.sqf b/addons/disarming/functions/fnc_disarmDropItems.sqf index 26e00dfa5f..e1a4c379b4 100644 --- a/addons/disarming/functions/fnc_disarmDropItems.sqf +++ b/addons/disarming/functions/fnc_disarmDropItems.sqf @@ -50,7 +50,7 @@ if (!_doNotDropAmmo) then { if ((_x getVariable [QGVAR(disarmUnit), objNull]) == _target) exitWith { _holder = _x; }; - } count ((getpos _target) nearObjects [DISARM_CONTAINER, 3]); + } forEach ((getpos _target) nearObjects [DISARM_CONTAINER, 3]); }; //Create a new weapon holder diff --git a/addons/disarming/functions/fnc_openDisarmDialog.sqf b/addons/disarming/functions/fnc_openDisarmDialog.sqf index 27a7dbc521..da9a860678 100644 --- a/addons/disarming/functions/fnc_openDisarmDialog.sqf +++ b/addons/disarming/functions/fnc_openDisarmDialog.sqf @@ -93,7 +93,7 @@ GVAR(disarmTarget) = _target; if ((_x getVariable [QGVAR(disarmUnit), objNull]) == _target) exitWith { _holder = _x; }; - } count ((getpos _target) nearObjects [DISARM_CONTAINER, 3]); + } forEach ((getpos _target) nearObjects [DISARM_CONTAINER, 3]); //If a holder exists, show it's inventory if (!isNull _holder) then { diff --git a/addons/explosives/functions/fnc_addCellphoneIED.sqf b/addons/explosives/functions/fnc_addCellphoneIED.sqf index 2ac69b73ae..d35b303fc1 100644 --- a/addons/explosives/functions/fnc_addCellphoneIED.sqf +++ b/addons/explosives/functions/fnc_addCellphoneIED.sqf @@ -29,10 +29,10 @@ private _hasRequired = true; private _detonators = [_unit] call FUNC(getDetonators); { - if !(_x in _detonators) exitWith{ + if !(_x in _detonators) exitWith { _hasRequired = false; }; -} count _requiredItems; +} forEach _requiredItems; private _code = ""; while {true} do { diff --git a/addons/explosives/functions/fnc_addTriggerActions.sqf b/addons/explosives/functions/fnc_addTriggerActions.sqf index d3632d5bb7..b6b6e0ce41 100644 --- a/addons/explosives/functions/fnc_addTriggerActions.sqf +++ b/addons/explosives/functions/fnc_addTriggerActions.sqf @@ -31,7 +31,7 @@ private _children = []; if !(_x in _detonators) exitWith { _hasRequiredItems = false; }; - } count _required; + } forEach _required; if (_hasRequiredItems && {(!_isAttached) || {(getNumber (_x >> "isAttachable")) == 1}}) then { _children pushBack [ diff --git a/addons/explosives/functions/fnc_getSpeedDialExplosive.sqf b/addons/explosives/functions/fnc_getSpeedDialExplosive.sqf index 8490eab452..0f4e5d923f 100644 --- a/addons/explosives/functions/fnc_getSpeedDialExplosive.sqf +++ b/addons/explosives/functions/fnc_getSpeedDialExplosive.sqf @@ -24,7 +24,6 @@ private _explosive = []; if ((_x select 1) == _code) exitWith { _explosive = _x; }; - false -} count GVAR(CellphoneIEDs); +} forEach GVAR(CellphoneIEDs); _explosive diff --git a/addons/fastroping/functions/fnc_cutRopes.sqf b/addons/fastroping/functions/fnc_cutRopes.sqf index cbd01b5661..40d2416049 100644 --- a/addons/fastroping/functions/fnc_cutRopes.sqf +++ b/addons/fastroping/functions/fnc_cutRopes.sqf @@ -34,8 +34,8 @@ private _deployedRopes = _vehicle getVariable [QGVAR(deployedRopes), []]; //Only delete the hook first so the rope falls down. //Note: ropeDetach was used here before, but the command seems a bit broken. deleteVehicle _hook; - [{{deleteVehicle _x} count _this}, [_ropeTop, _ropeBottom, _dummy], 60] call CBA_fnc_waitAndExecute; -} count _deployedRopes; + [{{deleteVehicle _x} forEach _this}, [_ropeTop, _ropeBottom, _dummy], 60] call CBA_fnc_waitAndExecute; +} forEach _deployedRopes; _vehicle setVariable [QGVAR(deployedRopes), [], true]; diff --git a/addons/fastroping/functions/fnc_deployRopes.sqf b/addons/fastroping/functions/fnc_deployRopes.sqf index 71cfbbbc21..eea81a7746 100644 --- a/addons/fastroping/functions/fnc_deployRopes.sqf +++ b/addons/fastroping/functions/fnc_deployRopes.sqf @@ -67,9 +67,7 @@ if (GVAR(requireRopeItems) && {_ropeClass != ""}) then { //deployedRopes format: attachment point, top part of the rope, bottom part of the rope, attachTo helper object, occupied, broken _deployedRopes pushBack [_ropeOrigin, _ropeTop, _ropeBottom, _dummy, _hook, false, false]; - - false -} count _ropeOrigins; +} forEach _ropeOrigins; _vehicle setVariable [QGVAR(deployedRopes), _deployedRopes, true]; _vehicle setVariable [QGVAR(deploymentStage), 3, true]; diff --git a/addons/fastroping/functions/fnc_moduleEquipFRIES.sqf b/addons/fastroping/functions/fnc_moduleEquipFRIES.sqf index 970194ab63..892997bf80 100644 --- a/addons/fastroping/functions/fnc_moduleEquipFRIES.sqf +++ b/addons/fastroping/functions/fnc_moduleEquipFRIES.sqf @@ -22,5 +22,4 @@ private _synchedUnits = synchronizedObjects _module; _x = vehicle _x; }; [_x] call FUNC(equipFRIES); - false -} count _synchedUnits; +} forEach _synchedUnits; diff --git a/addons/fcs/functions/fnc_calculateSolution.sqf b/addons/fcs/functions/fnc_calculateSolution.sqf index b89122f65d..b0cb2ea1c4 100644 --- a/addons/fcs/functions/fnc_calculateSolution.sqf +++ b/addons/fcs/functions/fnc_calculateSolution.sqf @@ -44,8 +44,7 @@ private _turretConfig = [configOf _vehicle, _turret] call EFUNC(common,getTurret if (_x != "this") then { _weaponMagazines append getArray (configFile >> "CfgWeapons" >> _weapon >> _x >> "magazines"); }; - false - } count _muzzles; + } forEach _muzzles; // Fix the `in` operator being case sensitive and BI fucking up the spelling of their own classnames private _weaponMagazinesCheck = _weaponMagazines apply {toLowerANSI _x}; @@ -62,8 +61,7 @@ private _turretConfig = [configOf _vehicle, _turret] call EFUNC(common,getTurret _initSpeed = _initSpeedCoef; }; }; - false - } count (_vehicle weaponsTurret _turret); + } forEach (_vehicle weaponsTurret _turret); private _offset = "ace_fcs" callExtension format ["%1,%2,%3,%4", _initSpeed, _airFriction, _angleTarget, _distance]; _offset = parseNumber _offset; @@ -72,8 +70,7 @@ private _turretConfig = [configOf _vehicle, _turret] call EFUNC(common,getTurret _FCSMagazines pushBack _magazine; _FCSElevation pushBack _offset; }; - false -} count (_vehicle magazinesTurret _turret); +} forEach (_vehicle magazinesTurret _turret); [_vehicle, format ["%1_%2", QGVAR(Distance), _turret], _distance] call EFUNC(common,setVariablePublic); [_vehicle, format ["%1_%2", QGVAR(InitSpeed), _turret], _FCSInitSpeed] call EFUNC(common,setVariablePublic); diff --git a/addons/finger/functions/fnc_keyPress.sqf b/addons/finger/functions/fnc_keyPress.sqf index 59405b57a5..2445986d15 100644 --- a/addons/finger/functions/fnc_keyPress.sqf +++ b/addons/finger/functions/fnc_keyPress.sqf @@ -42,7 +42,7 @@ private _sendFingerToPlayers = []; private _nearbyMen = (ACE_player nearObjects ["CAManBase", (GVAR(maxRange) + 2)]); { _nearbyMen append (crew _x); -} count (ACE_player nearObjects ["StaticWeapon", (GVAR(maxRange) + 2)]); +} forEach (ACE_player nearObjects ["StaticWeapon", (GVAR(maxRange) + 2)]); { if ((((eyePos _x) vectorDistance _playerEyePosASL) < GVAR(maxRange)) && {alive _x} && @@ -53,8 +53,7 @@ private _nearbyMen = (ACE_player nearObjects ["CAManBase", (GVAR(maxRange) + 2)] _sendFingerToPlayers pushBack _x; }; - true -} count _nearbyMen; +} forEach _nearbyMen; TRACE_1("sending finger to",_sendFingerToPlayers); diff --git a/addons/gestures/XEH_postInit.sqf b/addons/gestures/XEH_postInit.sqf index 935b81aa61..5133f48c41 100644 --- a/addons/gestures/XEH_postInit.sqf +++ b/addons/gestures/XEH_postInit.sqf @@ -31,9 +31,7 @@ if (!hasInterface) exitWith {}; [_key, [false, (_key != -1), false]], false ] call CBA_fnc_addKeybind; - - false -} count [ +} forEach [ ["Freeze", 80], // Numpad 2 ["Cover", 81], // Numpad 3 ["Forward", 75], // Numpad 4 diff --git a/addons/goggles/functions/fnc_isInRotorWash.sqf b/addons/goggles/functions/fnc_isInRotorWash.sqf index 8c3b29723d..6784e9db12 100644 --- a/addons/goggles/functions/fnc_isInRotorWash.sqf +++ b/addons/goggles/functions/fnc_isInRotorWash.sqf @@ -36,7 +36,6 @@ private _rotorWash = [false, 0]; _rotorWash set [1, _distance]; }; }; - false -} count (position _unit nearEntities [["Helicopter"], _radius]); +} forEach (position _unit nearEntities [["Helicopter"], _radius]); _rotorWash diff --git a/addons/grenades/functions/fnc_flashbangExplosionEH.sqf b/addons/grenades/functions/fnc_flashbangExplosionEH.sqf index e39a7730ce..6a7b683e6b 100644 --- a/addons/grenades/functions/fnc_flashbangExplosionEH.sqf +++ b/addons/grenades/functions/fnc_flashbangExplosionEH.sqf @@ -85,7 +85,7 @@ _affected = _affected - [ACE_player]; }, [_unit]] call CBA_fnc_waitUntilAndExecute; }; }; -} count _affected; +} forEach _affected; // Affect local player, independently of distance if (hasInterface && {!isNull ACE_player} && {alive ACE_player}) then { diff --git a/addons/hearing/functions/fnc_firedNear.sqf b/addons/hearing/functions/fnc_firedNear.sqf index 0d8596f53b..4dd81862b9 100644 --- a/addons/hearing/functions/fnc_firedNear.sqf +++ b/addons/hearing/functions/fnc_firedNear.sqf @@ -53,7 +53,7 @@ if (isNil "_loudness") then { private _muzzleMagazines = getArray (configFile >> "CfgWeapons" >> _weapon >> _x >> "magazines"); _weaponMagazines append _muzzleMagazines; }; - } count _muzzles; + } forEach _muzzles; { private _ammoType = getText(configFile >> "CfgMagazines" >> _x >> "ammo"); _weaponMagazines set [_forEachIndex, [_x, _ammoType]]; @@ -65,7 +65,7 @@ if (isNil "_loudness") then { if (_ammoType == _ammo) exitWith { _magazine = _magazineType; }; - } count _weaponMagazines; + } forEach _weaponMagazines; if (_magazine == "") then { _loudness = 0; diff --git a/addons/huntir/functions/fnc_cam.sqf b/addons/huntir/functions/fnc_cam.sqf index c306595fc7..411dbfe30e 100644 --- a/addons/huntir/functions/fnc_cam.sqf +++ b/addons/huntir/functions/fnc_cam.sqf @@ -77,8 +77,7 @@ GVAR(no_cams) sort true; if (((getPosVisual _x) select 2) > 20 && {!(_x in GVAR(no_cams))} && {_x getHitPointDamage "HitCamera" < 0.25}) then { GVAR(no_cams) pushBack _x; }; - true - } count GVAR(nearHuntIRs); + } forEach GVAR(nearHuntIRs); { if (((getPosVisual _x) select 2) <= 20 || {!(_x in GVAR(nearHuntIRs))} || {_x getHitPointDamage "HitCamera" >= 0.25}) then { GVAR(no_cams) deleteAt _forEachIndex; diff --git a/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf b/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf index 82235493e6..5ab7af179e 100644 --- a/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf +++ b/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf @@ -67,8 +67,7 @@ if (_insertChildrenCode isNotEqualTo {}) then { if ((count _action) > 0) then { _activeChildren pushBack _action; }; - nil - } count _dynamicChildren; + } forEach _dynamicChildren; }; // Collect children class actions @@ -77,8 +76,7 @@ if (_insertChildrenCode isNotEqualTo {}) then { if ((count _action) > 0) then { _activeChildren pushBack _action; }; - nil -} count _origActionChildren; +} forEach _origActionChildren; // Collect children object actions { @@ -91,8 +89,7 @@ if (_insertChildrenCode isNotEqualTo {}) then { _activeChildren pushBack _action; }; }; - nil -} count GVAR(objectActionList); +} forEach GVAR(objectActionList); // If the original action has no statement, and no children, don't display it diff --git a/addons/interact_menu/functions/fnc_compileMenu.sqf b/addons/interact_menu/functions/fnc_compileMenu.sqf index 5290d8f284..75d759465c 100644 --- a/addons/interact_menu/functions/fnc_compileMenu.sqf +++ b/addons/interact_menu/functions/fnc_compileMenu.sqf @@ -114,8 +114,7 @@ private _recurseFnc = { ]; _actions pushBack _entry; }; - nil - } count (configProperties [_actionsCfg, "isClass _x", true]); + } forEach (configProperties [_actionsCfg, "isClass _x", true]); _actions }; diff --git a/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf b/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf index 75fdb93819..ed3a02dd14 100644 --- a/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf +++ b/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf @@ -84,8 +84,7 @@ private _recurseFnc = { ]; _actions pushBack _entry; }; - nil - } count (configProperties [_actionsCfg, "isClass _x", true]); + } forEach (configProperties [_actionsCfg, "isClass _x", true]); _actions }; diff --git a/addons/interaction/functions/fnc_addPassengerActions.sqf b/addons/interaction/functions/fnc_addPassengerActions.sqf index 112919ee80..a3d8c2eff0 100644 --- a/addons/interaction/functions/fnc_addPassengerActions.sqf +++ b/addons/interaction/functions/fnc_addPassengerActions.sqf @@ -33,7 +33,6 @@ private _actions = []; _x params ["_actionData", "_children"]; _actions pushBack [_actionData, _children, _unit]; - false -} count (_actionTrees select 0 select 1); +} forEach (_actionTrees select 0 select 1); _actions diff --git a/addons/interaction/functions/fnc_getDown.sqf b/addons/interaction/functions/fnc_getDown.sqf index b8f6d7c50d..c834563a43 100644 --- a/addons/interaction/functions/fnc_getDown.sqf +++ b/addons/interaction/functions/fnc_getDown.sqf @@ -28,5 +28,4 @@ private _chance = [0.5, 0.8] select (count weapons _unit > 0); if (count weapons _x == 0 && {random 1 < _chance}) then { [QGVAR(getDown), [_x], [_x]] call CBA_fnc_targetEvent; }; - false -} count (_target nearEntities ["Civilian", SEND_RADIUS]); +} forEach (_target nearEntities ["Civilian", SEND_RADIUS]); diff --git a/addons/interaction/functions/fnc_openDoor.sqf b/addons/interaction/functions/fnc_openDoor.sqf index 2afb438a60..11b9c67c91 100644 --- a/addons/interaction/functions/fnc_openDoor.sqf +++ b/addons/interaction/functions/fnc_openDoor.sqf @@ -35,12 +35,12 @@ if (_animations isEqualTo []) exitWith {}; private _lockedVariable = format ["bis_disabled_%1", _door]; private _lockedVariableAlt = _lockedVariable; // GM Buildings may have door names like door_01 but locking expects door_1 -if ((count _door == 7) && {(_door select [0, 6]) == "door_0"}) then { +if ((count _door == 7) && {(_door select [0, 6]) == "door_0"}) then { _lockedVariableAlt = format ["bis_disabled_door_%1", _door select [6, 1]]; // stip off the leading zero then check both vars }; // Check if the door can be locked aka have locked variable, otherwhise cant lock it -if ((_house animationPhase (_animations select 0) <= 0) && +if ((_house animationPhase (_animations select 0) <= 0) && {(_house getVariable [_lockedVariable, 0] == 1) || {_house getVariable [_lockedVariableAlt, 0] == 1}}) exitWith { private _lockedAnimation = format ["%1_locked_source", _door]; TRACE_3("locked",_house,_lockedAnimation,isClass (configOf _house >> "AnimationSources" >> _lockedAnimation)); @@ -76,7 +76,7 @@ GVAR(usedScrollWheel) = false; if !(GVAR(usedScrollWheel)) then { private _phase = parseNumber (_house animationPhase (_animations select 0) < 0.5); - {_house animate [_x, _phase]; false} count _animations; + {_house animate [_x, _phase]} forEach _animations; }; // Raise local stopped opening event @@ -93,5 +93,5 @@ GVAR(usedScrollWheel) = false; GVAR(usedScrollWheel) = true; }; // do incremental door opening - {_house animate [_x, GVAR(doorTargetPhase)]; false} count _animations; + {_house animate [_x, GVAR(doorTargetPhase)]} forEach _animations; }, 0.1, [_house, _animations, getPosASL ACE_player, CBA_missionTime + 0.2, diag_frameno + 2, _door]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/interaction/functions/fnc_sendAway.sqf b/addons/interaction/functions/fnc_sendAway.sqf index cef314756f..f32a2c36e5 100644 --- a/addons/interaction/functions/fnc_sendAway.sqf +++ b/addons/interaction/functions/fnc_sendAway.sqf @@ -31,5 +31,4 @@ private _chance = [0.5, 0.8] select (count weapons _unit > 0); [QGVAR(sendAway), [_x, _position], [_x]] call CBA_fnc_targetEvent; }; - false -} count (_unit nearEntities ["Civilian", SEND_RADIUS]); +} forEach (_unit nearEntities ["Civilian", SEND_RADIUS]); diff --git a/addons/map/XEH_postInitClient.sqf b/addons/map/XEH_postInitClient.sqf index 72637e3092..ea3ce19464 100644 --- a/addons/map/XEH_postInitClient.sqf +++ b/addons/map/XEH_postInitClient.sqf @@ -73,8 +73,7 @@ GVAR(hasWatch) = true; GVAR(hasWatch) = false; { if (_x isKindOf ["ItemWatch", configFile >> "CfgWeapons"]) exitWith {GVAR(hasWatch) = true;}; - false - } count (assignedItems _unit); + } forEach (assignedItems _unit); }, true] call CBA_fnc_addPlayerEventHandler; diff --git a/addons/markers/functions/fnc_setMarkerJIP.sqf b/addons/markers/functions/fnc_setMarkerJIP.sqf index 8536b90a90..12dfe5de77 100644 --- a/addons/markers/functions/fnc_setMarkerJIP.sqf +++ b/addons/markers/functions/fnc_setMarkerJIP.sqf @@ -49,5 +49,4 @@ TRACE_2("params",_allMapMarkers,_allMapMarkersProperties); _x setMarkerDirLocal _dir; _x setMarkerSizeLocal [_scale, _scale]; }; - false -} count allMapMarkers; +} forEach allMapMarkers; diff --git a/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf b/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf index 63465a6588..ccf89bfdae 100644 --- a/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf +++ b/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf @@ -55,9 +55,7 @@ private _missionRoot = str missionConfigFile select [0, count str missionConfigF ERROR_1("Ambient Sounds: Sound ""%1"" not found.",_x); }; }; - - false -} count _splittedList; +} forEach _splittedList; if (count _ambianceSounds == 0) exitWith {}; { diff --git a/addons/nametags/functions/fnc_onDraw3d.sqf b/addons/nametags/functions/fnc_onDraw3d.sqf index 7e9d156014..f831a3209f 100644 --- a/addons/nametags/functions/fnc_onDraw3d.sqf +++ b/addons/nametags/functions/fnc_onDraw3d.sqf @@ -138,8 +138,7 @@ if (_enabledTagsNearby) then { [ACE_player, _target, _alpha, _distance * 0.026, _drawName, _drawRank, _drawSoundwave] call FUNC(drawNameTagIcon); }; }; - nil - } count _targets; + } forEach _targets; }; END_COUNTER(GVAR(onDraw3d)); diff --git a/addons/rearm/functions/fnc_hasEnoughSupply.sqf b/addons/rearm/functions/fnc_hasEnoughSupply.sqf index c7efb7eca6..8b606bdf6f 100644 --- a/addons/rearm/functions/fnc_hasEnoughSupply.sqf +++ b/addons/rearm/functions/fnc_hasEnoughSupply.sqf @@ -44,7 +44,6 @@ if (GVAR(supply) == 2) exitWith { { _x params ["_magazine", "_rounds"]; if ((_magazine isEqualTo _magazineClass) && (_rounds > 0)) exitWith {_magazinePresent = true; }; - false - } count _magazineSupply; + } forEach _magazineSupply; _magazinePresent }; diff --git a/addons/rearm/functions/fnc_readSupplyCounter.sqf b/addons/rearm/functions/fnc_readSupplyCounter.sqf index 7526fd013a..f298579705 100644 --- a/addons/rearm/functions/fnc_readSupplyCounter.sqf +++ b/addons/rearm/functions/fnc_readSupplyCounter.sqf @@ -58,8 +58,7 @@ if (GVAR(supply) == 1) then { _numChars = _numChars max (count _line); _text = format ["%1
%2", _text, _line]; _supply = _supply + 0.5; - false - } count _magazines; + } forEach _magazines; }; if (_supply > 1.5) then { [[LSTRING(Hint_RemainingAmmo), _text], _supply, _unit, (_numChars/2.9)] call EFUNC(common,displayTextStructured); diff --git a/addons/rearm/functions/fnc_rearmEntireVehicleSuccess.sqf b/addons/rearm/functions/fnc_rearmEntireVehicleSuccess.sqf index d014e9d58d..396b501dab 100644 --- a/addons/rearm/functions/fnc_rearmEntireVehicleSuccess.sqf +++ b/addons/rearm/functions/fnc_rearmEntireVehicleSuccess.sqf @@ -28,8 +28,7 @@ if (isServer) then { } else { [QGVAR(rearmEntireVehicleSuccessLocalEH), [_truck, _vehicle, _x], _turretOwnerID] call CBA_fnc_ownerEvent; }; - false - } count _turrets; + } forEach _turrets; } else { [QGVAR(rearmEntireVehicleSuccessEH), _this] call CBA_fnc_serverEvent; }; diff --git a/addons/repair/functions/fnc_moduleAddSpareParts.sqf b/addons/repair/functions/fnc_moduleAddSpareParts.sqf index bccccdcc22..cb6da371d7 100644 --- a/addons/repair/functions/fnc_moduleAddSpareParts.sqf +++ b/addons/repair/functions/fnc_moduleAddSpareParts.sqf @@ -30,8 +30,7 @@ if (!isNull _logic) then { // Add synchronized objects to list { _list pushBack _x; - nil - } count (synchronizedObjects _logic); + } forEach (synchronizedObjects _logic); if (_list isEqualTo []) exitWith {}; @@ -40,6 +39,5 @@ if (!isNull _logic) then { // Add spare parts { [_x, _amount, _part, true] call FUNC(addSpareParts); - false - } count _list; + } forEach _list; }; diff --git a/addons/respawn/functions/fnc_moduleRallypoint.sqf b/addons/respawn/functions/fnc_moduleRallypoint.sqf index 0af3357201..31ba68f1d6 100644 --- a/addons/respawn/functions/fnc_moduleRallypoint.sqf +++ b/addons/respawn/functions/fnc_moduleRallypoint.sqf @@ -23,7 +23,6 @@ if !(_activated) exitWith {}; { _x setVariable ["ACE_canMoveRallypoint", true]; - false -} count _units; +} forEach _units; INFO("Rallypoint Module Initialized."); diff --git a/addons/safemode/functions/fnc_unlockSafety.sqf b/addons/safemode/functions/fnc_unlockSafety.sqf index 8afc6802c1..10372f1a2e 100644 --- a/addons/safemode/functions/fnc_unlockSafety.sqf +++ b/addons/safemode/functions/fnc_unlockSafety.sqf @@ -56,8 +56,7 @@ if (inputAction "nextWeapon" > 0) then { if (_x == "this") then { _modes pushBack _weapon; }; - nil - } count getArray (configFile >> "CfgWeapons" >> _weapon >> "modes"); + } forEach getArray (configFile >> "CfgWeapons" >> _weapon >> "modes"); // select last mode private _mode = _modes select (count _modes - 1); diff --git a/addons/sandbag/functions/fnc_pickup.sqf b/addons/sandbag/functions/fnc_pickup.sqf index 7c21656ca0..2bcc418f4c 100644 --- a/addons/sandbag/functions/fnc_pickup.sqf +++ b/addons/sandbag/functions/fnc_pickup.sqf @@ -34,7 +34,7 @@ _unit setVariable [QGVAR(isUsingSandbag), true]; // Force physx update { _x setPosASL (getPosASL _x); - } count (_unit nearObjects ["ACE_SandbagObject", 5]); + } forEach (_unit nearObjects ["ACE_SandbagObject", 5]); [_unit, "ACE_Sandbag_empty"] call EFUNC(common,addToInventory); }, [_unit, _sandbag], 1.5] call CBA_fnc_waitAndExecute; diff --git a/addons/slideshow/functions/fnc_addSlideActions.sqf b/addons/slideshow/functions/fnc_addSlideActions.sqf index 8ec804d577..409c724943 100644 --- a/addons/slideshow/functions/fnc_addSlideActions.sqf +++ b/addons/slideshow/functions/fnc_addSlideActions.sqf @@ -34,7 +34,7 @@ private _actions = []; (_this select 2) params ["_objects", "_image", "_currentSlideshow", "_selection"]; { _x setObjectTextureGlobal [_selection, _image] - } count _objects; + } forEach _objects; [QGVAR(slideChanged), [_image, _currentSlideshow]] call CBA_fnc_localEvent; }, {true}, diff --git a/addons/slideshow/functions/fnc_autoTransition.sqf b/addons/slideshow/functions/fnc_autoTransition.sqf index 793b8baf1b..6a18a041c4 100644 --- a/addons/slideshow/functions/fnc_autoTransition.sqf +++ b/addons/slideshow/functions/fnc_autoTransition.sqf @@ -36,7 +36,7 @@ private _image = _images select _currentSlide; // Set slide { _x setObjectTextureGlobal [_selection, _image]; -} count _objects; +} forEach _objects; [QGVAR(slideChanged), [_image, _currentSlideshow]] call CBA_fnc_localEvent; diff --git a/addons/slideshow/functions/fnc_createSlideshow.sqf b/addons/slideshow/functions/fnc_createSlideshow.sqf index 9021a92613..c24d302346 100644 --- a/addons/slideshow/functions/fnc_createSlideshow.sqf +++ b/addons/slideshow/functions/fnc_createSlideshow.sqf @@ -50,7 +50,7 @@ if (isServer) then { // Default images on whiteboards (first image) { _x setObjectTextureGlobal [_selection, _images select 0]; - } count _objects; + } forEach _objects; }; // Number of slideshows (multiple modules support) @@ -89,8 +89,7 @@ if (_duration == 0) then { 2 ] call EFUNC(interact_menu,createAction); [_x, 0, ["ACE_MainActions"], _slidesAction] call EFUNC(interact_menu,addActionToObject); - nil - } count _controllers; + } forEach _controllers; } else { if !(isServer) exitWith {}; diff --git a/addons/slideshow/functions/fnc_moduleInit.sqf b/addons/slideshow/functions/fnc_moduleInit.sqf index 896c64eb50..7e6a78dc95 100644 --- a/addons/slideshow/functions/fnc_moduleInit.sqf +++ b/addons/slideshow/functions/fnc_moduleInit.sqf @@ -37,8 +37,7 @@ private _selection = _logic getVariable ["Selection", 0]; // Objects synced to the module { _objects pushBack _x; - nil -} count (synchronizedObjects _logic); +} forEach (synchronizedObjects _logic); // Prepare with actions [_objects, _controllers, _images, _names, _duration, _setName, _selection] call FUNC(createSlideshow); diff --git a/addons/switchunits/functions/fnc_markAiOnMap.sqf b/addons/switchunits/functions/fnc_markAiOnMap.sqf index 8c7dc4924c..203ba426ff 100644 --- a/addons/switchunits/functions/fnc_markAiOnMap.sqf +++ b/addons/switchunits/functions/fnc_markAiOnMap.sqf @@ -27,7 +27,7 @@ GVAR(AllMarkerNames) = []; // delete markers { deleteMarkerLocal _x; - } count GVAR(AllMarkerNames); + } forEach GVAR(AllMarkerNames); // reset the array GVAR(AllMarkerNames) = []; @@ -58,8 +58,7 @@ GVAR(AllMarkerNames) = []; }; GVAR(AllMarkerNames) pushBack _markerName; - nil }; - } count allUnits; + } forEach allUnits; }; }, 1.5, [_sidesToShow]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/tacticalladder/functions/fnc_positionTL.sqf b/addons/tacticalladder/functions/fnc_positionTL.sqf index 1ea19e737b..6d6f78f1a3 100644 --- a/addons/tacticalladder/functions/fnc_positionTL.sqf +++ b/addons/tacticalladder/functions/fnc_positionTL.sqf @@ -26,7 +26,7 @@ params ["_unit", "_ladder"]; { _ladder animate [_x, 0]; -} count __ANIMS; +} forEach __ANIMS; [_unit, "amovpercmstpslowwrfldnon_player_idlesteady03", 2] call EFUNC(common,doAnimation); @@ -35,7 +35,7 @@ _ladder attachTo [_unit, [0, 0.75, 0], ""]; // Position ladder in front of playe _ladder animate ["rotate", 0]; { _ladder animate [_x, 1]; -} count ["extract_1", "extract_2", "extract_3"]; // Extract ladder at head height (extract_3) +} forEach ["extract_1", "extract_2", "extract_3"]; // Extract ladder at head height (extract_3) GVAR(ladder) = _ladder; GVAR(cancelTime) = CBA_missionTime + 1; // Workaround to prevent accidental canceling diff --git a/addons/tripod/functions/fnc_adjust.sqf b/addons/tripod/functions/fnc_adjust.sqf index db31a0733f..b7cdc842e9 100644 --- a/addons/tripod/functions/fnc_adjust.sqf +++ b/addons/tripod/functions/fnc_adjust.sqf @@ -35,8 +35,7 @@ GVAR(adjustPFH) = [{ { _tripod animate [_x, 1 - GVAR(height)]; - } count ["slide_down_tripod", "retract_leg_1", "retract_leg_2", "retract_leg_3"]; - + } forEach ["slide_down_tripod", "retract_leg_1", "retract_leg_2", "retract_leg_3"]; }, 0, [_unit, _tripod]] call CBA_fnc_addPerFrameHandler; [_unit, "blockThrow", QUOTE(ADDON), true] call EFUNC(common,statusEffect_set); diff --git a/addons/tripod/functions/fnc_place.sqf b/addons/tripod/functions/fnc_place.sqf index ecefe12784..0109990ded 100644 --- a/addons/tripod/functions/fnc_place.sqf +++ b/addons/tripod/functions/fnc_place.sqf @@ -34,7 +34,7 @@ if (stance _unit == "STAND") then { { _tripod animate [_x, 0.5]; - } count ["slide_down_tripod", "retract_leg_1", "retract_leg_2", "retract_leg_3"]; + } forEach ["slide_down_tripod", "retract_leg_1", "retract_leg_2", "retract_leg_3"]; [{ (_this select 0) params ["_tripod", "_direction", "_position"]; diff --git a/addons/weaponselect/XEH_preInit.sqf b/addons/weaponselect/XEH_preInit.sqf index 25d6b9b5d5..92ba1b06a6 100644 --- a/addons/weaponselect/XEH_preInit.sqf +++ b/addons/weaponselect/XEH_preInit.sqf @@ -21,10 +21,8 @@ GVAR(GrenadesNonFrag) = []; private _explosive = getNumber (configFile >> "CfgAmmo" >> _ammo >> "explosive"); ([GVAR(GrenadesFrag), GVAR(GrenadesNonFrag)] select (_explosive == 0)) pushBack _x; - false - } count _magazines; - false -} count getArray (configFile >> "CfgWeapons" >> "Throw" >> "muzzles"); + } forEach _magazines; +} forEach getArray (configFile >> "CfgWeapons" >> "Throw" >> "muzzles"); #include "initSettings.inc.sqf" diff --git a/addons/weaponselect/functions/fnc_selectNextGrenade.sqf b/addons/weaponselect/functions/fnc_selectNextGrenade.sqf index 195bbc326b..ff111a93f6 100644 --- a/addons/weaponselect/functions/fnc_selectNextGrenade.sqf +++ b/addons/weaponselect/functions/fnc_selectNextGrenade.sqf @@ -37,8 +37,7 @@ private _grenades = []; if (_x in _magazines) then { _grenades pushBack _x; }; - false -} count ([GVAR(GrenadesAll), GVAR(GrenadesFrag), GVAR(GrenadesNonFrag)] select _type); +} forEach ([GVAR(GrenadesAll), GVAR(GrenadesFrag), GVAR(GrenadesNonFrag)] select _type); // abort if no grenades are available if (_grenades isEqualTo []) exitWith {false}; diff --git a/addons/weather/functions/fnc_calculateWindSpeed.sqf b/addons/weather/functions/fnc_calculateWindSpeed.sqf index 2ae1d94eec..cd73fac358 100644 --- a/addons/weather/functions/fnc_calculateWindSpeed.sqf +++ b/addons/weather/functions/fnc_calculateWindSpeed.sqf @@ -58,8 +58,7 @@ if (_terrainEffectEnabled) then { if (!(terrainIntersectASL [_position, _position vectorAdd _windSource])) exitWith { _newWindSpeed = cos(_x * 9) * _windSpeed; }; - nil - } count [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; + } forEach [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; _windSpeed = _newWindSpeed; }; }; @@ -81,8 +80,7 @@ if (_obstacleEffectEnabled) then { if (!(lineIntersects [_position, _position vectorAdd _windSource])) exitWith { _newWindSpeed = cos(_x * 2) * _windSpeed; }; - nil - } count [0, 5, 10, 15, 20, 25, 30, 35, 40, 45]; + } forEach [0, 5, 10, 15, 20, 25, 30, 35, 40, 45]; _windSpeed = _newWindSpeed; }; }; From dce7da60c963b881aafb9c5735b2c078f958e422 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Sat, 6 Apr 2024 20:57:08 +0200 Subject: [PATCH 37/50] General - Change `count` to `isEqualTo` where appropriate (#9921) count -> isEqualTo --- addons/ai/functions/fnc_garrison.sqf | 4 ++-- addons/common/functions/fnc_switchToGroupSide.sqf | 2 +- .../functions/fnc_collectActiveActionTree.sqf | 6 +++--- addons/interaction/functions/fnc_getDown.sqf | 4 ++-- addons/interaction/functions/fnc_sendAway.sqf | 4 ++-- addons/laser/functions/fnc_seekerFindLaserSpot.sqf | 2 +- .../functions/fnc_interpolatePoints.sqf | 2 +- .../missileguidance/functions/fnc_seekerType_ARH.sqf | 3 +-- .../functions/fnc_moduleAmbianceSound.sqf | 4 ++-- .../functions/fnc_loadCoolestSpareBarrel.sqf | 2 +- .../fnc_sendSpareBarrelsTemperaturesHint.sqf | 2 +- addons/rangecard/functions/fnc_updateRangeCard.sqf | 2 +- addons/repair/functions/fnc_canRepair.sqf | 2 +- addons/repair/functions/fnc_getHitPointString.sqf | 12 ++---------- addons/repair/functions/fnc_repair.sqf | 2 +- addons/spottingscope/CfgVehicles.hpp | 2 +- addons/switchunits/functions/fnc_switchUnit.sqf | 2 +- addons/vehicle_damage/functions/fnc_processHit.sqf | 2 +- .../vehiclelock/functions/fnc_addKeyForVehicle.sqf | 2 +- .../weaponselect/functions/fnc_fireSmokeLauncher.sqf | 2 +- addons/zeus/functions/fnc_moduleSuppressiveFire.sqf | 2 +- 21 files changed, 28 insertions(+), 37 deletions(-) diff --git a/addons/ai/functions/fnc_garrison.sqf b/addons/ai/functions/fnc_garrison.sqf index 0f9613dd9f..4b8f84fce6 100644 --- a/addons/ai/functions/fnc_garrison.sqf +++ b/addons/ai/functions/fnc_garrison.sqf @@ -33,7 +33,7 @@ if (_startingPos isEqualTo [0,0,0]) exitWith { [LSTRING(GarrisonInvalidPosition)] call EFUNC(common,displayTextStructured); }; -if (count _unitsArray == 0 || {isNull (_unitsArray select 0)}) exitWith { +if (_unitsArray isEqualTo [] || {isNull (_unitsArray select 0)}) exitWith { TRACE_1("fnc_garrison: Units error",_unitsArray); [LSTRING(GarrisonNoUnits)] call EFUNC(common,displayTextStructured); }; @@ -43,7 +43,7 @@ if (_fillingRadius >= 50) then { _buildings = [_buildings] call CBA_fnc_shuffle; }; -if (count _buildings == 0) exitWith { +if (_buildings isEqualTo []) exitWith { TRACE_1("fnc_garrison: Building error",_buildings); [LSTRING(GarrisonNoBuilding)] call EFUNC(common,displayTextStructured); }; diff --git a/addons/common/functions/fnc_switchToGroupSide.sqf b/addons/common/functions/fnc_switchToGroupSide.sqf index 94d8c52701..1a3e588855 100644 --- a/addons/common/functions/fnc_switchToGroupSide.sqf +++ b/addons/common/functions/fnc_switchToGroupSide.sqf @@ -58,7 +58,7 @@ if (_switch) then { private _newGroup = createGroup (_x select 1); [_unit] joinSilent _newGroup; }; - if (count units _currentGroup == 0) then { + if (units _currentGroup isEqualTo []) then { deleteGroup _currentGroup; }; _previousGroupsList set [_forEachIndex, objNull]; diff --git a/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf b/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf index 5ab7af179e..8bf8909288 100644 --- a/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf +++ b/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf @@ -64,7 +64,7 @@ if (_insertChildrenCode isNotEqualTo {}) then { // Collect dynamic children class actions { private _action = [_x select 2, _x, _fullPath, _distanceToBasePoint] call FUNC(collectActiveActionTree); - if ((count _action) > 0) then { + if (_action isNotEqualTo []) then { _activeChildren pushBack _action; }; } forEach _dynamicChildren; @@ -73,7 +73,7 @@ if (_insertChildrenCode isNotEqualTo {}) then { // Collect children class actions { private _action = [_object, _x, _fullPath, _distanceToBasePoint] call FUNC(collectActiveActionTree); - if ((count _action) > 0) then { + if (_action isNotEqualTo []) then { _activeChildren pushBack _action; }; } forEach _origActionChildren; @@ -85,7 +85,7 @@ if (_insertChildrenCode isNotEqualTo {}) then { // Check if the action is children of the original action if (_pPath isEqualTo _fullPath) then { private _action = [_object, [_actionData,[]], _fullPath, _distanceToBasePoint] call FUNC(collectActiveActionTree); - if ((count _action) > 0) then { + if (_action isNotEqualTo []) then { _activeChildren pushBack _action; }; }; diff --git a/addons/interaction/functions/fnc_getDown.sqf b/addons/interaction/functions/fnc_getDown.sqf index c834563a43..531cd23c54 100644 --- a/addons/interaction/functions/fnc_getDown.sqf +++ b/addons/interaction/functions/fnc_getDown.sqf @@ -22,10 +22,10 @@ params ["_unit", "_target"]; [_unit, "GestureGo"] call EFUNC(common,doGesture); -private _chance = [0.5, 0.8] select (count weapons _unit > 0); +private _chance = [0.5, 0.8] select (weapons _unit isNotEqualTo []); { - if (count weapons _x == 0 && {random 1 < _chance}) then { + if (weapons _x isEqualTo [] && {random 1 < _chance}) then { [QGVAR(getDown), [_x], [_x]] call CBA_fnc_targetEvent; }; } forEach (_target nearEntities ["Civilian", SEND_RADIUS]); diff --git a/addons/interaction/functions/fnc_sendAway.sqf b/addons/interaction/functions/fnc_sendAway.sqf index f32a2c36e5..b986ea2661 100644 --- a/addons/interaction/functions/fnc_sendAway.sqf +++ b/addons/interaction/functions/fnc_sendAway.sqf @@ -22,10 +22,10 @@ params ["_unit"]; [_unit, "GestureGo"] call EFUNC(common,doGesture); -private _chance = [0.5, 0.8] select (count weapons _unit > 0); +private _chance = [0.5, 0.8] select (weapons _unit isNotEqualTo []); { - if (count weapons _x == 0 && {random 1 < _chance}) then { + if (weapons _x isEqualTo [] && {random 1 < _chance}) then { private _position = getPosASL _unit vectorAdd (eyeDirection _unit vectorMultiply SEND_DISTANCE); _position set [2, 0]; diff --git a/addons/laser/functions/fnc_seekerFindLaserSpot.sqf b/addons/laser/functions/fnc_seekerFindLaserSpot.sqf index d1e4626d53..aa3e43d35a 100644 --- a/addons/laser/functions/fnc_seekerFindLaserSpot.sqf +++ b/addons/laser/functions/fnc_seekerFindLaserSpot.sqf @@ -103,7 +103,7 @@ private _finalOwner = objNull; TRACE_2("",count _spots,_spots); -if ((count _spots) > 0) then { +if (_spots isNotEqualTo []) then { private _bucketList = nil; private _bucketPos = nil; private _c = 0; diff --git a/addons/medical_damage/functions/fnc_interpolatePoints.sqf b/addons/medical_damage/functions/fnc_interpolatePoints.sqf index a84f079f30..b343417837 100644 --- a/addons/medical_damage/functions/fnc_interpolatePoints.sqf +++ b/addons/medical_damage/functions/fnc_interpolatePoints.sqf @@ -19,7 +19,7 @@ */ params ["_input", "_points", ["_randomRound", false]]; -if (count _points < 1) exitWith { +if (_points isEqualTo []) exitWith { //TODO: sensible default/error value 0 }; diff --git a/addons/missileguidance/functions/fnc_seekerType_ARH.sqf b/addons/missileguidance/functions/fnc_seekerType_ARH.sqf index 20571e3d65..54e487a9a0 100644 --- a/addons/missileguidance/functions/fnc_seekerType_ARH.sqf +++ b/addons/missileguidance/functions/fnc_seekerType_ARH.sqf @@ -72,7 +72,7 @@ if (_isActive || { CBA_missionTime >= _timeWhenActive }) then { }; _nearestObjects = _nearestObjects select { !isNull _x }; // Select closest object to the expected position to be the current radar target - if ((count _nearestObjects) <= 0) exitWith { + if (_nearestObjects isEqualTo []) exitWith { _projectile setMissileTarget objNull; _searchPos }; @@ -117,4 +117,3 @@ if !(isNull _target) then { _launchParams set [0, _target]; _expectedTargetPos - diff --git a/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf b/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf index ccf89bfdae..88e2ba02d5 100644 --- a/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf +++ b/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf @@ -57,7 +57,7 @@ private _missionRoot = str missionConfigFile select [0, count str missionConfigF }; } forEach _splittedList; -if (count _ambianceSounds == 0) exitWith {}; +if (_ambianceSounds isEqualTo []) exitWith {}; { if ((_x find ".") == -1) then { _ambianceSounds set [_forEachIndex, _x + ".wss"]; @@ -80,7 +80,7 @@ TRACE_1("",_ambianceSounds); private _allUnits = if (isMultiplayer) then {playableUnits} else {[ACE_player]}; // Check if there are enough players to even start playing this sound. - if (count _allUnits > 0) then { + if (_allUnits isNotEqualTo []) then { // find the position from which we are going to play this sound from. private _newPosASL = if (_followPlayers) then { // Select a target unit at random. diff --git a/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf b/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf index 29b7191471..a5fb95cf31 100644 --- a/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf +++ b/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf @@ -31,7 +31,7 @@ if (_weaponBarrelClass == "") then { // Find all spare barrel the player has private _allBarrels = [_assistant, _weaponBarrelClass] call CBA_fnc_getMagazineIndex; TRACE_1("_allBarrels",_allBarrels); -if ((count _allBarrels) < 1) exitWith {}; +if (_allBarrels isEqualTo []) exitWith {}; // Determine which on is coolest private _coolestTemp = 10000; diff --git a/addons/overheating/functions/fnc_sendSpareBarrelsTemperaturesHint.sqf b/addons/overheating/functions/fnc_sendSpareBarrelsTemperaturesHint.sqf index 9204b58124..5f75423f2e 100644 --- a/addons/overheating/functions/fnc_sendSpareBarrelsTemperaturesHint.sqf +++ b/addons/overheating/functions/fnc_sendSpareBarrelsTemperaturesHint.sqf @@ -32,7 +32,7 @@ if (_weaponBarrelClass == "") then { }; private _allBarrels = [_unit, _weaponBarrelClass] call CBA_fnc_getMagazineIndex; TRACE_1("_allBarrels",_allBarrels); -if ((count _allBarrels) < 1) exitWith {}; +if (_allBarrels isEqualTo []) exitWith {}; // Determine the temp of each barrel private _temps = []; diff --git a/addons/rangecard/functions/fnc_updateRangeCard.sqf b/addons/rangecard/functions/fnc_updateRangeCard.sqf index 999dfc5a2e..c2c8673844 100644 --- a/addons/rangecard/functions/fnc_updateRangeCard.sqf +++ b/addons/rangecard/functions/fnc_updateRangeCard.sqf @@ -100,7 +100,7 @@ private _barrelLength = _weaponConfig select 2; private _muzzleVelocity = 0; private _bc = 0; -if (count (_ammoConfig select 6) > 0) then { +if ((_ammoConfig select 6) isNotEqualTo []) then { _bc = (_ammoConfig select 6) select 0; }; private _transonicStabilityCoef = _ammoConfig select 4; diff --git a/addons/repair/functions/fnc_canRepair.sqf b/addons/repair/functions/fnc_canRepair.sqf index 264baf9ef0..f1f4aa7b7c 100644 --- a/addons/repair/functions/fnc_canRepair.sqf +++ b/addons/repair/functions/fnc_canRepair.sqf @@ -38,7 +38,7 @@ private _engineerRequired = if (isNumber (_config >> "requiredEngineer")) then { if !([_caller, _engineerRequired] call FUNC(isEngineer)) exitWith {false}; private _items = _config call FUNC(getRepairItems); -if (count _items > 0 && {!([_caller, _items] call FUNC(hasItems))}) exitWith {false}; +if (_items isNotEqualTo [] && {!([_caller, _items] call FUNC(hasItems))}) exitWith {false}; private _return = true; if (getText (_config >> "condition") != "") then { diff --git a/addons/repair/functions/fnc_getHitPointString.sqf b/addons/repair/functions/fnc_getHitPointString.sqf index 35270887ad..23a57f8895 100644 --- a/addons/repair/functions/fnc_getHitPointString.sqf +++ b/addons/repair/functions/fnc_getHitPointString.sqf @@ -20,17 +20,9 @@ */ params ["_hitPoint", "_textLocalized", "_textDefault", ["_trackArray", []]]; +_trackArray params [["_trackNames", []], ["_trackStrings", []], ["_trackAmount", []]]; -private _track = (count _trackArray > 0); -private _trackNames = []; -private _trackStrings = []; -private _trackAmount = []; - -if (_track) then { - _trackNames = _trackArray select 0; - _trackStrings = _trackArray select 1; - _trackAmount = _trackArray select 2; -}; +private _track = _trackArray isNotEqualTo []; // Prepare first part of the string from stringtable //IGNORE_STRING_WARNING(str_ace_repair_hit); diff --git a/addons/repair/functions/fnc_repair.sqf b/addons/repair/functions/fnc_repair.sqf index 9e6a692fef..86ff191000 100644 --- a/addons/repair/functions/fnc_repair.sqf +++ b/addons/repair/functions/fnc_repair.sqf @@ -44,7 +44,7 @@ if ((isEngineOn _target) && {!GVAR(autoShutOffEngineWhenStartingRepair)}) exitWi }; private _items = _config call FUNC(getRepairItems); -if (count _items > 0 && {!([_caller, _items] call FUNC(hasItems))}) exitWith {false}; +if (_items isNotEqualTo [] && {!([_caller, _items] call FUNC(hasItems))}) exitWith {false}; private _return = true; if (getText (_config >> "condition") != "") then { diff --git a/addons/spottingscope/CfgVehicles.hpp b/addons/spottingscope/CfgVehicles.hpp index 6be6d70d63..93fa00a7bc 100644 --- a/addons/spottingscope/CfgVehicles.hpp +++ b/addons/spottingscope/CfgVehicles.hpp @@ -48,7 +48,7 @@ class CfgVehicles { selection = ""; displayName = CSTRING(PickUp); distance = 5; - condition = QUOTE((alive _target) && (count (crew _target) == 0)); + condition = QUOTE((alive _target) && {(crew _target) isEqualTo []}); statement = QUOTE([ARR_2(_target,_player)] call FUNC(pickup)); showDisabled = 0; exceptions[] = {}; diff --git a/addons/switchunits/functions/fnc_switchUnit.sqf b/addons/switchunits/functions/fnc_switchUnit.sqf index 6fc8fa35c9..135088d243 100644 --- a/addons/switchunits/functions/fnc_switchUnit.sqf +++ b/addons/switchunits/functions/fnc_switchUnit.sqf @@ -27,7 +27,7 @@ if (GVAR(EnableSafeZone)) then { private _allNearestPlayers = [position _unit, GVAR(SafeZoneRadius)] call FUNC(nearestPlayers); private _nearestEnemyPlayers = _allNearestPlayers select {((side GVAR(OriginalGroup)) getFriend side _x < 0.6) && !(_x getVariable [QGVAR(IsPlayerControlled), false])}; - if (count _nearestEnemyPlayers > 0) exitWith { + if (_nearestEnemyPlayers isNotEqualTo []) exitWith { _leave = true; }; }; diff --git a/addons/vehicle_damage/functions/fnc_processHit.sqf b/addons/vehicle_damage/functions/fnc_processHit.sqf index 17575e8f38..73e70bbf57 100644 --- a/addons/vehicle_damage/functions/fnc_processHit.sqf +++ b/addons/vehicle_damage/functions/fnc_processHit.sqf @@ -124,7 +124,7 @@ private _chanceOfDetonation = 0; private _explosiveAmmoCount = 0; private _nonExplosiveAmmoCount = 0; -if (count (_currentVehicleAmmo select 0) isNotEqualTo 0) then { +if ((_currentVehicleAmmo select 0) isNotEqualTo []) then { private _magConfig = configFile >> "CfgMagazines"; private _ammoConfig = configFile >> "CfgAmmo"; private _countOfExplodableAmmo = 0; diff --git a/addons/vehiclelock/functions/fnc_addKeyForVehicle.sqf b/addons/vehiclelock/functions/fnc_addKeyForVehicle.sqf index d730589b36..6461e7fca2 100644 --- a/addons/vehiclelock/functions/fnc_addKeyForVehicle.sqf +++ b/addons/vehiclelock/functions/fnc_addKeyForVehicle.sqf @@ -30,7 +30,7 @@ if (_useCustom) then { private _previousMags = magazinesDetail _unit; _unit addMagazine ["ACE_key_customKeyMagazine", 1]; //addMagazine array has global effects private _newMags = (magazinesDetail _unit) - _previousMags; - if ((count _newMags) == 0) exitWith {ERROR("failed to add magazine (inventory full?)");}; + if (_newMags isEqualTo []) exitWith {ERROR("failed to add magazine (inventory full?)");}; private _keyMagazine = _newMags select 0; TRACE_2("setting up key on server",_veh,_keyMagazine); //Have the server run add the key to the vehicle's key array: diff --git a/addons/weaponselect/functions/fnc_fireSmokeLauncher.sqf b/addons/weaponselect/functions/fnc_fireSmokeLauncher.sqf index 16bac855cc..8b9fcf94b7 100644 --- a/addons/weaponselect/functions/fnc_fireSmokeLauncher.sqf +++ b/addons/weaponselect/functions/fnc_fireSmokeLauncher.sqf @@ -22,7 +22,7 @@ private _weapons = _vehicle weaponsTurret _turret; if ( count _weapons > 1 - || {count _weapons > 0 && {!(_weapons select 0 in ["SmokeLauncher", "BWA3_SmokeLauncher"])}} // @todo somebody might use custom smoke launcher weapons aswell, maybe ... + || {_weapons isNotEqualTo [] && {!(_weapons select 0 in ["SmokeLauncher", "BWA3_SmokeLauncher"])}} // @todo somebody might use custom smoke launcher weapons aswell, maybe ... ) then { //This doesn't work reliably for vehilces with additional weapons for the commander. Select smoke launcher instead. diff --git a/addons/zeus/functions/fnc_moduleSuppressiveFire.sqf b/addons/zeus/functions/fnc_moduleSuppressiveFire.sqf index 2a013fa4c2..a624b7dded 100644 --- a/addons/zeus/functions/fnc_moduleSuppressiveFire.sqf +++ b/addons/zeus/functions/fnc_moduleSuppressiveFire.sqf @@ -69,7 +69,7 @@ if ([_unit] call EFUNC(common,isPlayer)) exitWith { } else { // Direct fire - Get a target position that will work private _lis = lineIntersectsSurfaces [eyePos _unit, _targetASL, _unit, _vehicle]; - if ((count _lis) > 0) then { // If point is hidden, unit won't fire, do a ray cast to find where they should shoot at + if (_lis isNotEqualTo []) then { // If point is hidden, unit won't fire, do a ray cast to find where they should shoot at _targetASL = ((_lis select 0) select 0); TRACE_1("using ray cast pos",_mousePosASL distance _targetASL); }; From 04ac1d88089efc573b9564e2100096b86a8b5455 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Sun, 7 Apr 2024 03:04:52 +0200 Subject: [PATCH 38/50] Arsenal - Fix #9916 (#9932) --- addons/arsenal/functions/fnc_baseAttachment.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/arsenal/functions/fnc_baseAttachment.sqf b/addons/arsenal/functions/fnc_baseAttachment.sqf index cf0cbde134..968fd05d9b 100644 --- a/addons/arsenal/functions/fnc_baseAttachment.sqf +++ b/addons/arsenal/functions/fnc_baseAttachment.sqf @@ -28,8 +28,8 @@ _item = configName _config; // If the switch config entries are inherited, ignore if ( - (inheritsFrom (_config >> "MRT_SwitchItemNextClass") isNotEqualTo (_config >> "MRT_SwitchItemNextClass")) || - {inheritsFrom (_config >> "MRT_SwitchItemPrevClass") isNotEqualTo (_config >> "MRT_SwitchItemPrevClass")} + (inheritsFrom (_config >> "MRT_SwitchItemNextClass") isNotEqualTo _config) || + {inheritsFrom (_config >> "MRT_SwitchItemPrevClass") isNotEqualTo _config} ) exitWith { _item // return }; From f5e8e06c24ed4ee1c4692067fe9e6f302cadae38 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Sun, 7 Apr 2024 03:11:09 +0200 Subject: [PATCH 39/50] Interact Menu - Add `nil` handling for condition (#9922) Co-authored-by: PabstMirror --- .../functions/fnc_collectActiveActionTree.sqf | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf b/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf index 8bf8909288..ebb02caa11 100644 --- a/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf +++ b/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf @@ -43,12 +43,21 @@ _origActionData params [ "_distance" ]; +private _result = [_target, ACE_player, _customParams] call _conditionCode; + +// Handle nil as false +if (isNil "_result") then { + ERROR_1("Action [%1] bad condition return",_actionName); + + _result = false; +}; + // Return nothing if the action itself is not active -if !([_target, ACE_player, _customParams] call _conditionCode) exitWith { +if (!_result) exitWith { [] }; -// Return nothing if the action is to far (including checking sub actions) [DISABLED FOR NOW ref #2196] +// Return nothing if the action is too far (including checking sub actions) [DISABLED FOR NOW ref #2196] // if (_distanceToBasePoint > _distance) exitWith { // [] // }; From 5ca3465b8a931698d94a1b0a281f085421ca8bc4 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sat, 6 Apr 2024 20:11:51 -0500 Subject: [PATCH 40/50] Medical Treatment - Only create litter on empty container (#9924) --- .../medical_treatment/functions/fnc_treatment.sqf | 4 ++-- .../functions/fnc_treatmentSuccess.sqf | 6 ++++-- addons/medical_treatment/functions/fnc_useItem.sqf | 14 ++++++++------ 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/addons/medical_treatment/functions/fnc_treatment.sqf b/addons/medical_treatment/functions/fnc_treatment.sqf index b7ebbfd8b0..4222d69a4b 100644 --- a/addons/medical_treatment/functions/fnc_treatment.sqf +++ b/addons/medical_treatment/functions/fnc_treatment.sqf @@ -52,7 +52,7 @@ private _userAndItem = if (GET_NUMBER_ENTRY(_config >> "consumeItem") == 1) then [objNull, ""]; // Treatment does not require items to be consumed }; -_userAndItem params ["_itemUser", "_usedItem"]; +_userAndItem params ["_itemUser", "_usedItem", "_createLitter"]; private _isInZeus = !isNull findDisplay 312; @@ -161,7 +161,7 @@ if (_callbackProgress isEqualTo {}) then { [ _treatmentTime, - [_medic, _patient, _bodyPart, _classname, _itemUser, _usedItem], + [_medic, _patient, _bodyPart, _classname, _itemUser, _usedItem, _createLitter], FUNC(treatmentSuccess), FUNC(treatmentFailure), getText (_config >> "displayNameProgress"), diff --git a/addons/medical_treatment/functions/fnc_treatmentSuccess.sqf b/addons/medical_treatment/functions/fnc_treatmentSuccess.sqf index 96f0d11ead..a400fa98dc 100644 --- a/addons/medical_treatment/functions/fnc_treatmentSuccess.sqf +++ b/addons/medical_treatment/functions/fnc_treatmentSuccess.sqf @@ -11,6 +11,7 @@ * 3: Treatment * 4: Item User * 5: Used Item + * 6: Create Litter * * Return Value: * None @@ -19,7 +20,8 @@ */ params ["_args"]; -_args params ["_medic", "_patient", "_bodyPart", "_classname", "_itemUser", "_usedItem"]; +_args params ["_medic", "_patient", "_bodyPart", "_classname", "_itemUser", "_usedItem", "_createLitter"]; +TRACE_7("",_medic,_patient,_bodyPart,_classname,_itemUser,_usedItem,_createLitter); // Switch medic to end animation immediately private _endInAnim = _medic getVariable QGVAR(endInAnim); @@ -45,7 +47,7 @@ GET_FUNCTION(_callbackSuccess,configFile >> QGVAR(actions) >> _classname >> "cal _args call _callbackSuccess; // Call litter creation handler -_args call FUNC(createLitter); +if (_createLitter) then { _args call FUNC(createLitter); }; // Emit local event for medical API ["ace_treatmentSucceded", [_medic, _patient, _bodyPart, _classname, _itemUser, _usedItem]] call CBA_fnc_localEvent; diff --git a/addons/medical_treatment/functions/fnc_useItem.sqf b/addons/medical_treatment/functions/fnc_useItem.sqf index 9bba3d1c90..33ac9f98f4 100644 --- a/addons/medical_treatment/functions/fnc_useItem.sqf +++ b/addons/medical_treatment/functions/fnc_useItem.sqf @@ -10,7 +10,7 @@ * 2: Items * * Return Value: - * User and Item + * User and Item and Litter Created * * Example: * [player, cursorObject, ["bandage"]] call ace_medical_treatment_fnc_useItem @@ -40,22 +40,24 @@ private _useOrder = [[_patient, _medic], [_medic, _patient], [_medic]] select GV switch (true) do { case (_x in _vehicleItems): { _unitVehicle addItemCargoGlobal [_x, -1]; - [_unit, _x] breakOut "Main"; + [_unit, _x, false] breakOut "Main"; }; case (_x in _vehicleMagazines): { [_unitVehicle, _x] call EFUNC(common,adjustMagazineAmmo); - [_unit, _x] breakOut "Main"; + [_unit, _x, false] breakOut "Main"; }; case (_x in _unitItems): { _unit removeItem _x; - [_unit, _x] breakOut "Main"; + [_unit, _x, true] breakOut "Main"; }; case (_x in _unitMagazines): { + private _magsStart = count magazines _unit; [_unit, _x] call EFUNC(common,adjustMagazineAmmo); - [_unit, _x] breakOut "Main"; + private _magsEnd = count magazines _unit; + [_unit, _x, (_magsEnd < _magsStart)] breakOut "Main"; }; }; } forEach _items; } forEach _useOrder; -[objNull, ""] +[objNull, "", false] From 431c4d616e008dc5b8e902c16f21dfd66aee5604 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sat, 6 Apr 2024 20:12:06 -0500 Subject: [PATCH 41/50] Casing - Move model lookup to cartridge config (#9893) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> Co-authored-by: Jouni Järvinen Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> --- addons/casings/CfgVehicles.hpp | 6 +++ addons/casings/config.cpp | 1 + addons/casings/functions/fnc_createCasing.sqf | 45 +++++++++---------- addons/compat_cup_weapons/config.cpp | 2 +- 4 files changed, 29 insertions(+), 25 deletions(-) create mode 100644 addons/casings/CfgVehicles.hpp diff --git a/addons/casings/CfgVehicles.hpp b/addons/casings/CfgVehicles.hpp new file mode 100644 index 0000000000..73d06bc0ac --- /dev/null +++ b/addons/casings/CfgVehicles.hpp @@ -0,0 +1,6 @@ +class CfgVehicles { + class FxCartridge; + class FxCartridge_65_caseless: FxCartridge { + GVAR(model) = ""; // note: the vanilla 6.5 caseless don't actually use this, just being safe + }; +}; diff --git a/addons/casings/config.cpp b/addons/casings/config.cpp index 815048a082..29d0b7cb89 100644 --- a/addons/casings/config.cpp +++ b/addons/casings/config.cpp @@ -15,3 +15,4 @@ class CfgPatches { }; #include "CfgEventHandlers.hpp" +#include "CfgVehicles.hpp" diff --git a/addons/casings/functions/fnc_createCasing.sqf b/addons/casings/functions/fnc_createCasing.sqf index b21e568100..fe35ad5945 100644 --- a/addons/casings/functions/fnc_createCasing.sqf +++ b/addons/casings/functions/fnc_createCasing.sqf @@ -20,33 +20,30 @@ params ["_unit", "", "", "", "_ammo"]; if (!isNull objectParent _unit) exitWith {}; -private _modelPath = GVAR(cachedCasings) get _ammo; -if (isNil "_modelPath") then { +private _modelPath = GVAR(cachedCasings) getOrDefaultCall [_ammo, { private _cartridge = getText (configFile >> "CfgAmmo" >> _ammo >> "cartridge"); - //Default cartridge is a 5.56mm model - _modelPath = switch (_cartridge) do { - case "FxCartridge_9mm": { "A3\Weapons_f\ammo\cartridge_small.p3d" }; - case "FxCartridge_65": { "A3\weapons_f\ammo\cartridge_65.p3d" }; - case "FxCartridge_762": { "A3\weapons_f\ammo\cartridge_762.p3d" }; - case "FxCartridge_762x39": { "A3\weapons_f_enoch\ammo\cartridge_762x39.p3d" }; - case "FxCartridge_93x64_Ball": { "A3\Weapons_F_Mark\Ammo\cartridge_93x64.p3d" }; - case "FxCartridge_338_Ball": { "A3\Weapons_F_Mark\Ammo\cartridge_338_LM.p3d" }; - case "FxCartridge_338_NM": { "A3\Weapons_F_Mark\Ammo\cartridge_338_NM.p3d" }; - case "FxCartridge_127": { "A3\weapons_f\ammo\cartridge_127.p3d" }; - case "FxCartridge_127x54": { "A3\Weapons_F_Mark\Ammo\cartridge_127x54.p3d" }; - case "FxCartridge_slug": { "A3\weapons_f\ammo\cartridge_slug.p3d" }; - case "FxCartridge_12Gauge_HE_lxWS": { "lxWS\weapons_1_f_lxws\Ammo\cartridge_he_lxws.p3d" }; - case "FxCartridge_12Gauge_Slug_lxWS": { "lxWS\weapons_1_f_lxws\Ammo\cartridge_slug_lxws.p3d" }; - case "FxCartridge_12Gauge_Smoke_lxWS": { "lxWS\weapons_1_f_lxws\Ammo\cartridge_smoke_lxws.p3d" }; - case "FxCartridge_12Gauge_Pellet_lxWS": { "lxWS\weapons_1_f_lxws\Ammo\cartridge_pellet_lxws.p3d" }; - case "CUP_FxCartridge_545": { "CUP\Weapons\CUP_Weapons_Ammunition\magazines\cartridge545.p3d" }; - case "CUP_FxCartridge_939": { "CUP\Weapons\CUP_Weapons_Ammunition\magazines\cartridge939.p3d" }; - case "": { "" }; - default { "A3\Weapons_f\ammo\cartridge.p3d" }; + if (_cartridge == "") then { // return (note: can't use exitWith) + "" + } else { + private _cartridgeConfig = configFile >> "CfgVehicles" >> _cartridge; + + // if explicitly defined, use ACE's config + if (isText (_cartridgeConfig >> QGVAR(model))) exitWith { + getText (_cartridgeConfig >> QGVAR(model)) + }; + // use casing's default model + private _model = getText (_cartridgeConfig >> "model"); + if ("a3\weapons_f\empty" in toLowerANSI _model) exitWith { "" }; + + // Add file extension if missing (fileExists needs file extension) + if ((_model select [count _model - 4]) != ".p3d") then { + _model = _model + ".p3d"; + }; + + ["", _model] select (fileExists _model) }; - GVAR(cachedCasings) set [_ammo, _modelPath]; -}; +}, true]; if (_modelPath isEqualTo "") exitWith {}; diff --git a/addons/compat_cup_weapons/config.cpp b/addons/compat_cup_weapons/config.cpp index e5fd022555..54dd0271cc 100644 --- a/addons/compat_cup_weapons/config.cpp +++ b/addons/compat_cup_weapons/config.cpp @@ -15,6 +15,6 @@ class CfgPatches { }; }; +#include "CfgEventHandlers.hpp" #include "CfgMagazines.hpp" #include "CfgWeapons.hpp" -#include "CfgEventHandlers.hpp" From f3f7f2c492fb32dac12f6833041c7586587b2088 Mon Sep 17 00:00:00 2001 From: BrettMayson Date: Sat, 6 Apr 2024 19:18:07 -0600 Subject: [PATCH 42/50] Medical Status - API to modify getBloodLoss (#9926) Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> --- addons/medical_status/functions/fnc_getBloodLoss.sqf | 8 +++++++- docs/wiki/framework/events-framework.md | 10 ++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/addons/medical_status/functions/fnc_getBloodLoss.sqf b/addons/medical_status/functions/fnc_getBloodLoss.sqf index fd02f9042b..c2a6604679 100644 --- a/addons/medical_status/functions/fnc_getBloodLoss.sqf +++ b/addons/medical_status/functions/fnc_getBloodLoss.sqf @@ -23,4 +23,10 @@ if (_woundBleeding == 0) exitWith {0}; private _cardiacOutput = [_unit] call FUNC(getCardiacOutput); // even if heart stops blood will still flow slowly (gravity) -(_woundBleeding * (_cardiacOutput max CARDIAC_OUTPUT_MIN) * EGVAR(medical,bleedingCoefficient)) +private _bloodLoss = (_woundBleeding * (_cardiacOutput max CARDIAC_OUTPUT_MIN) * EGVAR(medical,bleedingCoefficient)); + +private _eventArgs = [_unit, _bloodLoss]; // Pass by reference + +[QGVAR(getBloodLoss), _eventArgs] call CBA_fnc_localEvent; + +_eventArgs select 1 // return diff --git a/docs/wiki/framework/events-framework.md b/docs/wiki/framework/events-framework.md index 37daa148fc..8a50912e02 100644 --- a/docs/wiki/framework/events-framework.md +++ b/docs/wiki/framework/events-framework.md @@ -146,7 +146,13 @@ MenuType: 0 = Interaction, 1 = Self Interaction |---------- |------------|----------|------|-------------| | `ace_medical_treatment_fullHealLocalMod` | [_patient] | Local | Listen | Called before a local unit is fully healed, mods can listen and apply their own healing logic -### 2.15 Interaction (`ace_interaction`) +### 2.15 Medical Status (`ace_medical_status`) + +| Event Key | Parameters | Locality | Type | Description | +|---------- |------------|----------|------|-------------| +| `ace_medical_status_getBloodLoss` | [_unit, _bloodLoss] | Local | Listen | Called when blood loss is calculated for a unit, mods can listen and modify the blood loss value by modifying the array + +### 2.16 Interaction (`ace_interaction`) | Event Key | Parameters | Locality | Type | Description | |---------- |------------|----------|------|-------------| @@ -271,4 +277,4 @@ Calls a globally synchronized event, which will also be run on JIP players unles // Event called on another machine (tapping above target machine) ["ace_interact_tapShoulder", [arguments], [target]] call CBA_fnc_targetEvent; -``` \ No newline at end of file +``` From 6a2f3a21f21891f8055455acfaecefee24745019 Mon Sep 17 00:00:00 2001 From: Grim <69561145+LinkIsGrim@users.noreply.github.com> Date: Sat, 6 Apr 2024 22:20:51 -0300 Subject: [PATCH 43/50] Medical - Fix broken AI ragdolls if AI unconsciousness is disabled (#9917) Co-authored-by: jonpas Co-authored-by: PabstMirror --- addons/medical_engine/XEH_postInit.sqf | 6 ------ addons/medical_statemachine/CfgEventHandlers.hpp | 6 ++++++ addons/medical_statemachine/XEH_postInit.sqf | 14 ++++++++++++++ addons/medical_status/functions/fnc_setDead.sqf | 4 ++++ 4 files changed, 24 insertions(+), 6 deletions(-) create mode 100644 addons/medical_statemachine/XEH_postInit.sqf diff --git a/addons/medical_engine/XEH_postInit.sqf b/addons/medical_engine/XEH_postInit.sqf index 5557807629..2514c62254 100644 --- a/addons/medical_engine/XEH_postInit.sqf +++ b/addons/medical_engine/XEH_postInit.sqf @@ -86,12 +86,6 @@ if (!isNull objectParent _unit && {local objectParent _unit}) exitWith { [_unit] call FUNC(lockUnconsciousSeat); }; - - // Prevent second ragdoll of uncon units when they're killed - if (IS_UNCONSCIOUS(_unit) && !isAwake _unit) then { - _unit enableSimulation false; - [{_this enableSimulation true}, _unit, 2] call CBA_fnc_waitAndExecute; - }; }] call CBA_fnc_addEventHandler; ["CAManBase", "deleted", { diff --git a/addons/medical_statemachine/CfgEventHandlers.hpp b/addons/medical_statemachine/CfgEventHandlers.hpp index 98c29f77dc..b9150d8564 100644 --- a/addons/medical_statemachine/CfgEventHandlers.hpp +++ b/addons/medical_statemachine/CfgEventHandlers.hpp @@ -10,6 +10,12 @@ class Extended_PreInit_EventHandlers { }; }; +class Extended_PostInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_SCRIPT(XEH_postInit)); + }; +}; + class Extended_Respawn_EventHandlers { class CAManBase { class ADDON { diff --git a/addons/medical_statemachine/XEH_postInit.sqf b/addons/medical_statemachine/XEH_postInit.sqf new file mode 100644 index 0000000000..a7c7740a39 --- /dev/null +++ b/addons/medical_statemachine/XEH_postInit.sqf @@ -0,0 +1,14 @@ +#include "script_component.hpp" + +["ace_killed", { // global event + params ["_unit"]; + + // Prevent second ragdoll of uncon units when they're killed + if ( + IS_UNCONSCIOUS(_unit) && !isAwake _unit // uncon and not ragdolling + && {isPlayer _unit || {_unit getVariable [QGVAR(AIUnconsciousness), GVAR(AIUnconsciousness)]}} + ) then { + _unit enableSimulation false; + [{_this enableSimulation true}, _unit, 2] call CBA_fnc_waitAndExecute; + }; +}] call CBA_fnc_addEventHandler; diff --git a/addons/medical_status/functions/fnc_setDead.sqf b/addons/medical_status/functions/fnc_setDead.sqf index 9dfc07d114..cb1e1f1d6f 100644 --- a/addons/medical_status/functions/fnc_setDead.sqf +++ b/addons/medical_status/functions/fnc_setDead.sqf @@ -17,10 +17,14 @@ params ["_unit", ["_reason", "#setDead"], ["_instigator", objNull]]; TRACE_3("setDead",_unit,_reason,_instigator); + // No heart rate or blood pressure to measure when dead _unit setVariable [VAR_HEART_RATE, 0, true]; _unit setVariable [VAR_BLOOD_PRESS, [0, 0], true]; +// Clear uncon variable just to be safe +_unit setVariable [VAR_UNCON, nil, true]; + _unit setVariable [QEGVAR(medical,causeOfDeath), _reason, true]; // Send a local event before death From 0c529446ec4944c3f42e7ccf59d3bb9a313c47d3 Mon Sep 17 00:00:00 2001 From: Kex Date: Sun, 7 Apr 2024 17:57:14 +0200 Subject: [PATCH 44/50] Fix bug template (#9936) --- .github/ISSUE_TEMPLATE/bug_report.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index c71190ce39..08c14747e5 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -23,14 +23,14 @@ All good? Then proceed and fill out the items below. **Mods (complete and add to the following information):** - **Arma 3:** `x.xx` [e.g. 1.00 stable, rc, dev] - **CBA:** `3.x.x` [e.g. 3.0.0 stable, commit hash] -- **ACE3:** `3.x.x` [eg. 3.0.0 stable, commit hash] +- **ACE3:** `3.x.x` [e.g. 3.0.0 stable, commit hash] **Description:** A clear and concise description of what the bug is. **Steps to reproduce:** -_Follow [https://ace3.acemod.org/img/wiki/user/issue_flowchart.webp](this flowchart)!_ +_Follow [this flowchart](https://ace3.acemod.org/img/wiki/user/issue_flowchart.webp)!_ 1. _Go to ..._ 2. _Click ..._ From 095ce882792f3be4b4c2ab6daea7239be36fbe75 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Sun, 7 Apr 2024 17:59:14 +0200 Subject: [PATCH 45/50] Hearing - Notify restart req. for combat deafness setting (#9934) --- addons/hearing/initSettings.inc.sqf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/addons/hearing/initSettings.inc.sqf b/addons/hearing/initSettings.inc.sqf index f22a7b4eda..8856ad1202 100644 --- a/addons/hearing/initSettings.inc.sqf +++ b/addons/hearing/initSettings.inc.sqf @@ -5,7 +5,9 @@ private _category = format ["ACE %1", localize LSTRING(Module_DisplayName)]; [LSTRING(EnableCombatDeafness_DisplayName), LSTRING(EnableCombatDeafness_Description)], _category, true, - 1 + 1, + {[QGVAR(enableCombatDeafness), _this] call EFUNC(common,cbaSettings_settingChanged)}, + true // Needs mission restart ] call CBA_fnc_addSetting; [ From 5130a220087e8bc3a0a77a2cc3fd46137df30fc7 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Wed, 10 Apr 2024 13:23:50 +0200 Subject: [PATCH 46/50] Hearing - Add setting to add earplugs to all units (#9935) Add option to add earplugs to all units --- addons/hearing/functions/fnc_addEarPlugs.sqf | 6 +++--- addons/hearing/initSettings.inc.sqf | 4 ++-- addons/hearing/stringtable.xml | 3 +++ 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/addons/hearing/functions/fnc_addEarPlugs.sqf b/addons/hearing/functions/fnc_addEarPlugs.sqf index c541d78618..035d82956f 100644 --- a/addons/hearing/functions/fnc_addEarPlugs.sqf +++ b/addons/hearing/functions/fnc_addEarPlugs.sqf @@ -24,10 +24,10 @@ params ["_unit"]; TRACE_2("params",_unit,typeOf _unit); // Exit if hearing is disabled OR autoAdd is disabled OR soldier has earplugs already in (persistence scenarios) -if (!GVAR(enableCombatDeafness) || {!GVAR(autoAddEarplugsToUnits)} || {[_unit] call FUNC(hasEarPlugsIn)}) exitWith {}; +if (!GVAR(enableCombatDeafness) || {GVAR(autoAddEarplugsToUnits) == 0} || {[_unit] call FUNC(hasEarPlugsIn)}) exitWith {}; -// add earplugs if the soldier has a rocket launcher -if ((secondaryWeapon _unit) != "") exitWith { +// Add earplugs if enabled for everyone or if the soldier has a rocket launcher +if (GVAR(autoAddEarplugsToUnits) == 2 || {(secondaryWeapon _unit) != ""}) exitWith { TRACE_1("has launcher - adding",_unit); _unit addItem "ACE_EarPlugs"; }; diff --git a/addons/hearing/initSettings.inc.sqf b/addons/hearing/initSettings.inc.sqf index 8856ad1202..61b6d239c5 100644 --- a/addons/hearing/initSettings.inc.sqf +++ b/addons/hearing/initSettings.inc.sqf @@ -43,9 +43,9 @@ private _category = format ["ACE %1", localize LSTRING(Module_DisplayName)]; ] call CBA_fnc_addSetting; [ - QGVAR(autoAddEarplugsToUnits), "CHECKBOX", + QGVAR(autoAddEarplugsToUnits), "LIST", [LSTRING(autoAddEarplugsToUnits_DisplayName), LSTRING(autoAddEarplugsToUnits_Description)], _category, - true, + [[0, 1, 2], [ELSTRING(common,Disabled), LSTRING(heavyWeaponUnits), ELSTRING(common,Enabled)], 1], 1 ] call CBA_fnc_addSetting; diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index 58d0bfa05d..de741e55c1 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -371,5 +371,8 @@ 귀마개 토글 Mettre/enlever les bouchons + + Only units with heavy weapons + From 3255dbef362560b363d7b4c1833560bb1fca9c2b Mon Sep 17 00:00:00 2001 From: lambdatiger Date: Wed, 10 Apr 2024 06:25:46 -0500 Subject: [PATCH 47/50] Compats - Add/Fix Adv, Vehicle Damage ERA and SLAT arrays (#9925) * added missing hitpoints and new classes * added CUP compats * Fixed missing base class and missing comma --- addons/compat_cup_vehicles/CfgVehicles.hpp | 136 +++++++++++++++++++++ addons/compat_rhs_afrf3/CfgVehicles.hpp | 67 +++++++++- 2 files changed, 198 insertions(+), 5 deletions(-) diff --git a/addons/compat_cup_vehicles/CfgVehicles.hpp b/addons/compat_cup_vehicles/CfgVehicles.hpp index 47c7f901f5..5334987fff 100644 --- a/addons/compat_cup_vehicles/CfgVehicles.hpp +++ b/addons/compat_cup_vehicles/CfgVehicles.hpp @@ -148,5 +148,141 @@ class CfgVehicles { roles[]={"cargo"}; }; }; + EGVAR(vehicle_damage,eraHitpoints)[] = { + "hitera_l1", "hitera_l2", "hitera_l3", "hitera_l4", "hitera_l5", + "hitera_l6", "hitera_l7", "hitera_l8", "hitera_r1", "hitera_r2", + "hitera_r3", "hitera_r4", "hitera_r5", "hitera_r6", "hitera_r7", + "hitera_r8", "hitera_t1", "hitera_t2", "hitera_t3", "hitera_t4", + "hitera_t5", "hitera_t6", "hitera_t7", "hitera_t8", "hitera_fr1", + "hitera_fr2", "hitera_fr3", "hitera_fr4", "hitera_fr5", "hitera_fr6", + "hitera_fr7", "hitera_fr8", "hitera_fr9", "hitera_fl1", "hitera_fl2", + "hitera_fl3", "hitera_fl4", "hitera_fl5" + }; + EGVAR(vehicle_damage,slatHitpoints)[] = {}; + }; + class CUP_T90_Base: Tank_F { + EGVAR(vehicle_damage,eraHitpoints)[] = { + "hitera_l1", "hitera_l2", "hitera_l3", "hitera_r1", "hitera_r2", + "hitera_r3", "hitera_1_t_l", "hitera_1_t_r", "hitera_2_t_l", + "hitera_2_t_r" + }; + EGVAR(vehicle_damage,slatHitpoints)[] = {}; + }; + class CUP_T90M_Base: Tank_F { + EGVAR(vehicle_damage,eraHitpoints)[] = { + "hitera_t1", "hitera_t2", "hitera_t3", "hitera_t4", "hitera_t5", + "hitera_t6", "hitera_t7", "hitera_t8", "hitera_t9", "hitera_t10", + "hitera_t11", "hitera_t12", "hitera_t13", "hitera_t14", "hitera_t15", + "hitera_t16", "hitera_t17", "hitera_t18", "hitera_t19", "hitera_t20", + "hitera_t21", "hitera_f1", "hitera_f2", "hitera_f3", "hitera_f4", + "hitera_f5", "hitera_f6", "hitera_f7", "hitera_s1", "hitera_s2", + "hitera_s3", "hitera_s4", "hitera_s5", "hitera_s6", "hitera_s7", + "hitera_s8", "hitera_s9", "hitera_s10", "hitera_s11", "hitera_s12", + "hitera_t22", "hitera_t23", "hitera_t24", "hitera_t25", "hitera_t26", + "hitera_t27", "hitera_t28", "hitera_t29", "hitera_t30", "hitera_t31", + "hitera_t32", "hitera_t33" + }; + EGVAR(vehicle_damage,slatHitpoints)[] = { + "hitslat_left", "hitslat_right", "hitslat_turret_rear", + "hitslat_turret_left", "hitslat_rear" + }; + }; + + class CUP_T72_ACR_Base; + class CUP_B_T72_CZ: CUP_T72_ACR_Base { + EGVAR(vehicle_damage,eraHitpoints)[] = { + "hitera_top_l1", "hitera_top_l2", "hitera_top_l3", "hitera_top_l4", + "hitera_top_r1", "hitera_top_r2", "hitera_top_r3", "hitera_top_r4", + "hitera_front_r1", "hitera_front_r2", "hitera_front_l1", + "hitera_front_l2", "hitera_top_rear" + }; + EGVAR(vehicle_damage,slatHitpoints)[] = {}; + }; + + class CUP_Leopard2_Base; + class CUP_Leopard2_ERA_Base: CUP_Leopard2_Base { + EGVAR(vehicle_damage,eraHitpoints)[] = { + "hitera_1", "hitera_2", "hitera_3", "hitera_4", "hitera_5", "hitera_6", + "hitera_7", "hitera_8", "hitera_9", "hitera_10", "hitera_11", "hitera_12", + "hitera_13", "hitera_14", "hitera_15", "hitera_16", "hitera_17", "hitera_18", + "hitera_19", "hitera_20", "hitera_21", "hitera_22", "hitera_23", "hitera_24", + "hitera_25", "hitera_26", "hitera_27", "hitera_28", "hitera_29", "hitera_30", + "hitera_31", "hitera_32", "hitera_33", "hitera_34", "hitera_35", "hitera_36", + "hitera_37", "hitera_38", "hitera_39", "hitera_40", "hitera_41", "hitera_42", + "hitera_43", "hitera_44", "hitera_45", "hitera_46", "hitera_47" + }; + EGVAR(vehicle_damage,slatHitpoints)[] = {}; + }; + + class CUP_M1_Abrams_base; + class CUP_M1A2_TUSK_base: CUP_M1_Abrams_base { + EGVAR(vehicle_damage,eraHitpoints)[] = { + "hitera_l1", "hitera_l2", "hitera_l3", "hitera_l4", "hitera_r1", + "hitera_r2", "hitera_r3", "hitera_r4" + }; + EGVAR(vehicle_damage,slatHitpoints)[] = { + "hitslat_rear" + }; + }; + + class CUP_M1Abrams_Base; + class CUP_M1Abrams_TUSK_Base: CUP_M1Abrams_Base { + EGVAR(vehicle_damage,eraHitpoints)[] = { + "hitera_l01", "hitera_l02", "hitera_l03", "hitera_l04", "hitera_l05", + "hitera_l06", "hitera_l07", "hitera_l08", "hitera_l09", "hitera_l10", + "hitera_l11", "hitera_l12", "hitera_l13", "hitera_l14", "hitera_l15", + "hitera_l16", "hitera_r01", "hitera_r02", "hitera_r03", "hitera_r04", + "hitera_r05", "hitera_r06", "hitera_r07", "hitera_r08", "hitera_r09", + "hitera_r10", "hitera_r11", "hitera_r12", "hitera_r13", "hitera_r14", + "hitera_r15", "hitera_r16" + }; + EGVAR(vehicle_damage,slatHitpoints)[] = { + "hitslat_rear" + }; + }; + + class CUP_M1Abrams_A2_Base; + class CUP_M1Abrams_A2_TUSK_Base: CUP_M1Abrams_A2_Base { + EGVAR(vehicle_damage,eraHitpoints)[] = { + "hitera_l01", "hitera_l02", "hitera_l03", "hitera_l04", "hitera_l05", + "hitera_l06", "hitera_l07", "hitera_l08", "hitera_l09", "hitera_l10", + "hitera_l11", "hitera_l12", "hitera_l13", "hitera_l14", "hitera_l15", + "hitera_l16", "hitera_l17", "hitera_l18", "hitera_l19", "hitera_l20", + "hitera_r01", "hitera_r02", "hitera_r03", "hitera_r04", "hitera_r05", + "hitera_r06", "hitera_r07", "hitera_r08", "hitera_r09", "hitera_r10", + "hitera_r11", "hitera_r12", "hitera_r13", "hitera_r14", "hitera_r15", + "hitera_r16", "hitera_r17", "hitera_r18", "hitera_r19", "hitera_r20" + }; + EGVAR(vehicle_damage,slatHitpoints)[] = { + "hitslat_rear" + }; + }; + + class CUP_M1A2Abrams_Base; + class CUP_M1A2Abrams_TUSK_Base: CUP_M1A2Abrams_Base { + EGVAR(vehicle_damage,eraHitpoints)[] = { + "hitera_l01", "hitera_l02", "hitera_l03", "hitera_l04", "hitera_l05", + "hitera_l06", "hitera_l07", "hitera_l08", "hitera_l09", "hitera_l10", + "hitera_l11", "hitera_l12", "hitera_l13", "hitera_l14", "hitera_l15", + "hitera_l16", "hitera_r01", "hitera_r02", "hitera_r03", "hitera_r04", + "hitera_r05", "hitera_r06", "hitera_r07", "hitera_r08", "hitera_r09", + "hitera_r10", "hitera_r11", "hitera_r12", "hitera_r13", "hitera_r14", + "hitera_r15", "hitera_r16" + }; + EGVAR(vehicle_damage,slatHitpoints)[] = { + "hitslat_rear" + }; + }; + class CUP_M1A2Abrams_TUSK_II_Base: CUP_M1A2Abrams_TUSK_Base { + EGVAR(vehicle_damage,eraHitpoints)[] = { + "hitera_l01", "hitera_l02", "hitera_l03", "hitera_l04", "hitera_l05", + "hitera_l06", "hitera_l07", "hitera_l08", "hitera_l09", "hitera_l10", + "hitera_l11", "hitera_l12", "hitera_l13", "hitera_l14", "hitera_l15", + "hitera_l16", "hitera_l17", "hitera_l18", "hitera_l19", "hitera_l20", + "hitera_r01", "hitera_r02", "hitera_r03", "hitera_r04", "hitera_r05", + "hitera_r06", "hitera_r07", "hitera_r08", "hitera_r09", "hitera_r10", + "hitera_r11", "hitera_r12", "hitera_r13", "hitera_r14", "hitera_r15", + "hitera_r16", "hitera_r17", "hitera_r18", "hitera_r19", "hitera_r20" + }; }; }; diff --git a/addons/compat_rhs_afrf3/CfgVehicles.hpp b/addons/compat_rhs_afrf3/CfgVehicles.hpp index 622d764ad2..1cf5029bc3 100644 --- a/addons/compat_rhs_afrf3/CfgVehicles.hpp +++ b/addons/compat_rhs_afrf3/CfgVehicles.hpp @@ -434,7 +434,11 @@ class CfgVehicles { "era_13_hitpoint", "era_14_hitpoint", "era_15_hitpoint", "era_16_hitpoint", "era_17_hitpoint", "era_18_hitpoint", "era_19_hitpoint", "era_20_hitpoint", "era_21_hitpoint", "era_22_hitpoint", "era_23_hitpoint", "era_24_hitpoint", "era_25_hitpoint", "era_26_hitpoint", "era_27_hitpoint", "era_28_hitpoint", "era_29_hitpoint", "era_30_hitpoint", - "era_31_hitpoint", "era_32_hitpoint" + "era_31_hitpoint", "era_32_hitpoint", "era_33_hitpoint", "era_34_hitpoint", "era_35_hitpoint", "era_36_hitpoint", + "era_37_hitpoint", "era_38_hitpoint", "era_39_hitpoint", "era_40_hitpoint", "era_41_hitpoint", "era_42_hitpoint", + "era_43_hitpoint", "era_44_hitpoint", "era_45_hitpoint", "era_46_hitpoint", "era_47_hitpoint", "era_48_hitpoint", + "era_49_hitpoint", "era_50_hitpoint", "era_58_hitpoint", "era_59_hitpoint", "era_60_hitpoint", "era_61_hitpoint", + "era_62_hitpoint", "era_63_hitpoint", "era_64_hitpoint", "era_65_hitpoint", "era_66_hitpoint", "era_67_hitpoint" }; EGVAR(vehicle_damage,slatHitpoints)[] = { "SLAT_51_hitpoint", "SLAT_52_hitpoint", "SLAT_53_hitpoint", @@ -470,6 +474,9 @@ class CfgVehicles { "era_43_hitpoint", "era_44_hitpoint", "era_45_hitpoint", "era_46_hitpoint", "era_47_hitpoint", "era_48_hitpoint", "era_49_hitpoint", "era_50_hitpoint" }; + EGVAR(vehicle_damage,slatHitpoints)[] = { + "slat_51_hitpoint", "slat_52_hitpoint", "slat_53_hitpoint", "slat_54_hitpoint" + }; }; class rhs_t90am_tv: rhs_t90_tv { EGVAR(vehicle_damage,eraHitpoints)[] = { @@ -483,7 +490,7 @@ class CfgVehicles { "era_43_hitpoint", "era_44_hitpoint", "era_45_hitpoint", "era_46_hitpoint", "era_47_hitpoint", "era_48_hitpoint", "era_49_hitpoint", "era_50_hitpoint", "era_51_hitpoint", "era_52_hitpoint", "era_53_hitpoint", "era_54_hitpoint", "era_55_hitpoint", "era_56_hitpoint", "era_57_hitpoint", "era_58_hitpoint", "era_59_hitpoint", "era_60_hitpoint", - "era_51_hitpoint", "era_62_hitpoint", "era_63_hitpoint", "era_64_hitpoint", "era_65_hitpoint", "era_66_hitpoint" + "era_61_hitpoint", "era_62_hitpoint", "era_63_hitpoint", "era_64_hitpoint", "era_65_hitpoint", "era_66_hitpoint" }; EGVAR(vehicle_damage,slatHitpoints)[] = { "SLAT_18_hitpoint", "SLAT_19_hitpoint", "SLAT_20_hitpoint", "SLAT_21_hitpoint", @@ -492,10 +499,31 @@ class CfgVehicles { }; }; class rhs_t90sm_tv: rhs_t90am_tv { + EGVAR(vehicle_damage,eraHitpoints)[] = { + "era_1_hitpoint", "era_2_hitpoint", "era_3_hitpoint", "era_4_hitpoint", + "era_5_hitpoint", "era_6_hitpoint", "era_7_hitpoint", "era_8_hitpoint", + "era_9_hitpoint", "era_10_hitpoint", "era_11_hitpoint", "era_12_hitpoint", + "era_13_hitpoint", "era_14_hitpoint", "era_15_hitpoint", "era_16_hitpoint", + "era_17_hitpoint", "era_18_hitpoint", "era_19_hitpoint", "era_20_hitpoint", + "era_21_hitpoint", "era_22_hitpoint", "era_24_hitpoint", "era_25_hitpoint", + "era_27_hitpoint", "era_28_hitpoint", "era_29_hitpoint", "era_30_hitpoint", + "era_31_hitpoint", "era_32_hitpoint", "era_33_hitpoint", "era_34_hitpoint", + "era_35_hitpoint", "era_36_hitpoint", "era_37_hitpoint", "era_38_hitpoint", + "era_39_hitpoint", "era_40_hitpoint", "era_41_hitpoint", "era_42_hitpoint", + "era_43_hitpoint", "era_44_hitpoint", "era_45_hitpoint", "era_46_hitpoint", + "era_47_hitpoint", "era_48_hitpoint", "era_49_hitpoint", "era_50_hitpoint", + "era_26_hitpoint", "era_55_hitpoint", "era_56_hitpoint", "era_57_hitpoint", + "era_58_hitpoint", "era_59_hitpoint", "era_60_hitpoint", "era_61_hitpoint", + "era_62_hitpoint", "era_63_hitpoint", "era_64_hitpoint", "era_65_hitpoint", + "era_66_hitpoint", "era_23_hitpoint" + }; EGVAR(vehicle_damage,slatHitpoints)[] = { - "SLAT_23_hitpoint", "SLAT_26_hitpoint", "SLAT_51_hitpoint", "SLAT_52_hitpoint", - "SLAT_53_hitpoint", "SLAT_54_hitpoint", "SLAT_55_hitpoint", "SLAT_56_hitpoint", - "SLAT_57_hitpoint" + "slat_23_hitpoint", "slat_26_hitpoint", "slat_51_hitpoint", + "slat_52_hitpoint", "slat_53_hitpoint", "slat_54_hitpoint", + "slat_55_hitpoint", "slat_56_hitpoint", "slat_57_hitpoint", + "slat_18_hitpoint", "slat_19_hitpoint", "slat_20_hitpoint", + "slat_21_hitpoint", "slat_22_hitpoint", "slat_24_hitpoint", + "slat_25_hitpoint" }; }; @@ -539,6 +567,35 @@ class CfgVehicles { "era_31_hitpoint", "era_32_hitpoint", "era_33_hitpoint", "era_34_hitpoint", "era_35_hitpoint", "era_36_hitpoint" }; }; + class rhs_t80um: rhs_t80u { + EGVAR(vehicle_damage,eraHitpoints)[] = { + "era_1_hitpoint", "era_2_hitpoint", "era_3_hitpoint", "era_4_hitpoint", "era_5_hitpoint", "era_6_hitpoint", + "era_7_hitpoint", "era_8_hitpoint", "era_9_hitpoint", "era_10_hitpoint", "era_11_hitpoint", "era_12_hitpoint", + "era_13_hitpoint", "era_14_hitpoint", "era_15_hitpoint", "era_16_hitpoint", "era_17_hitpoint", "era_18_hitpoint", + "era_19_hitpoint", "era_20_hitpoint", "era_21_hitpoint", "era_22_hitpoint", "era_23_hitpoint", "era_24_hitpoint", + "era_25_hitpoint", "era_26_hitpoint", "era_27_hitpoint", "era_28_hitpoint", "era_29_hitpoint", "era_30_hitpoint", + "era_31_hitpoint", "era_32_hitpoint", "era_33_hitpoint", "era_34_hitpoint", "era_35_hitpoint", "era_36_hitpoint" + }; + }; + + class rhs_t15_base; + class rhs_t15_tv: rhs_t15_base { + EGVAR(vehicle_damage,eraHitpoints)[] = { + "era_1_hitpoint", "era_2_hitpoint", "era_3_hitpoint", "era_4_hitpoint", + "era_5_hitpoint", "era_6_hitpoint", "era_7_hitpoint", "era_8_hitpoint", + "era_9_hitpoint", "era_10_hitpoint", "era_11_hitpoint", "era_12_hitpoint", + "era_13_hitpoint", "era_14_hitpoint", "era_15_hitpoint", "era_16_hitpoint", + "era_17_hitpoint", "era_18_hitpoint", "era_19_hitpoint", "era_20_hitpoint", + "era_21_hitpoint", "era_22_hitpoint", "era_23_hitpoint", "era_24_hitpoint", + "era_25_hitpoint", "era_26_hitpoint", "era_27_hitpoint", "era_28_hitpoint", + "era_29_hitpoint", "era_30_hitpoint", "era_31_hitpoint", "era_32_hitpoint", + "era_33_hitpoint", "era_34_hitpoint", "era_35_hitpoint", "era_36_hitpoint", + "era_37_hitpoint" + }; + EGVAR(vehicle_damage,slatHitpoints)[] = { + "slat_38_hitpoint", "slat_39_hitpoint", "slat_40_hitpoint", "slat_41_hitpoint" + }; + }; // Wirecutter Backpacks class rhs_assault_umbts; From 2b5ea1628f6c2e463d7367b2210ab2e3bdc9a19a Mon Sep 17 00:00:00 2001 From: OverlordZorn <56258612+OverlordZorn@users.noreply.github.com> Date: Wed, 10 Apr 2024 13:26:30 +0200 Subject: [PATCH 48/50] Weather - Winter Terrain Temperatures (#9943) * a -> an * Added last resort catch for winter maps to define suitable temps * removed debug line * purge :soap: * added check for "snow" in raintexture * cleaned up conditions * Update arma-3-scheduler-and-our-practices.md * isNull && {} * Update fnc_getMapData.sqf * Update fnc_getMapData.sqf * Update fnc_getMapData.sqf * changed order in condition checks and indentation * not so lazy * deep config lookup -> _cfg * comment * removed accidental empty line * :roller_coaster: * Update fnc_getMapData.sqf * Revert "Update fnc_getMapData.sqf" This reverts commit a57d114182ee094a873274dda8874f12780e4795. * Update addons/weather/functions/fnc_getMapData.sqf Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> * Update addons/weather/functions/fnc_getMapData.sqf Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> * Update addons/weather/functions/fnc_getMapData.sqf Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> * then -> exitWith --------- Co-authored-by: Mr. Zorn <56258612+PulsarNeutronStar@users.noreply.github.com> Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> --- addons/weather/functions/fnc_getMapData.sqf | 49 ++++++++++++++------- 1 file changed, 32 insertions(+), 17 deletions(-) diff --git a/addons/weather/functions/fnc_getMapData.sqf b/addons/weather/functions/fnc_getMapData.sqf index c1cae6e2f8..555704fc87 100644 --- a/addons/weather/functions/fnc_getMapData.sqf +++ b/addons/weather/functions/fnc_getMapData.sqf @@ -48,34 +48,35 @@ GVAR(currentHumidity) = 0; GVAR(currentOvercast) = 0; // Get all non inherited arrays to filter maps that inherit from Stratis/Altis/Tanoa -private _nonInheritedArrays = configProperties [configFile >> "CfgWorlds" >> _worldName, "isArray _x", false]; +private _cfgPath = configFile >> "CfgWorlds" >> _worldName; +private _nonInheritedArrays = configProperties [_cfgPath, "isArray _x", false]; // And check if any custom non-inherited weather is defined through config and use that if so -if ((configFile >> "CfgWorlds" >> _worldName >> "ACE_TempDay") in _nonInheritedArrays) exitWith { - if (isArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_TempDay")) then { - GVAR(TempDay) = getArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_TempDay"); +if ((_cfgPath >> "ACE_TempDay") in _nonInheritedArrays) exitWith { + if (isArray (_cfgPath >> "ACE_TempDay")) then { + GVAR(TempDay) = getArray (_cfgPath >> "ACE_TempDay"); }; - if (isArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_TempNight")) then { - GVAR(TempNight) = getArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_TempNight"); + if (isArray (_cfgPath >> "ACE_TempNight")) then { + GVAR(TempNight) = getArray (_cfgPath >> "ACE_TempNight"); }; - if (isArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_Humidity")) then { - GVAR(Humidity) = getArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_Humidity"); + if (isArray (_cfgPath >> "ACE_Humidity")) then { + GVAR(Humidity) = getArray (_cfgPath >> "ACE_Humidity"); }; - if (isArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_WindSpeedMin")) then { - GVAR(WindSpeedMin) = getArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_WindSpeedMin"); + if (isArray (_cfgPath >> "ACE_WindSpeedMin")) then { + GVAR(WindSpeedMin) = getArray (_cfgPath >> "ACE_WindSpeedMin"); }; - if (isArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_WindSpeedMean")) then { - GVAR(WindSpeedMean) = getArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_WindSpeedMean"); + if (isArray (_cfgPath >> "ACE_WindSpeedMean")) then { + GVAR(WindSpeedMean) = getArray (_cfgPath >> "ACE_WindSpeedMean"); }; - if (isArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_WindSpeedMax")) then { - GVAR(WindSpeedMax) = getArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_WindSpeedMax"); + if (isArray (_cfgPath >> "ACE_WindSpeedMax")) then { + GVAR(WindSpeedMax) = getArray (_cfgPath >> "ACE_WindSpeedMax"); }; - if (isArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_WindDirectionProbabilities")) then { - GVAR(WindDirectionProbabilities) = getArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_WindDirectionProbabilities"); + if (isArray (_cfgPath >> "ACE_WindDirectionProbabilities")) then { + GVAR(WindDirectionProbabilities) = getArray (_cfgPath >> "ACE_WindDirectionProbabilities"); }; }; // Check if the map is among the most popular -if (_worldName in ["chernarus", "bootcamp_acr", "woodland_acr", "utes"]) then { +if (_worldName in ["chernarus", "bootcamp_acr", "woodland_acr", "utes"]) exitWith { // Source: http://www.iten-online.ch/klima/europa/tschechien/prag.htm GVAR(TempDay) = [1, 3, 9, 14, 19, 23, 25, 24, 21, 13, 7, 2]; GVAR(TempNight) = [-4, -3, 0, 4, 9, 12, 14, 14, 10, 6, 2, -2]; @@ -239,3 +240,17 @@ if (_worldName in ["kunduz"]) exitWith { [0.04, 0.02, 0.05, 0.14, 0.19, 0.07, 0.10, 0.07] // December ]; }; + + +// Catches any "Winter" Map that hasnt been defined otherwise - this should stay at the end of the file +// Values are not based on any RL reference since the snow terrain textures persists regardless the date +_cfgPath = _cfgPath >> "RainParticles"; +if ( + "winter" in _worldName || + {"snow" in getText (_cfgPath >> "rainDropTexture")} || + {getNumber (_cfgPath >> "snow") != 0} +) exitWith { + GVAR(TempDay) = [-10,-9,-8,-7,-6,-5,-6,-7,-8,-9,-10,-11]; + GVAR(TempNight) = [-15,-14,-13,-12,-11,-10,-9,-10,-11,-12,-13,-17]; + GVAR(Humidity) = [82, 80, 81, 82, 83, 82, 81, 82, 83, 82, 83, 82]; +}; From bcf1133477bd2dbd2ff3756f85163bd45ec74689 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Thu, 11 Apr 2024 17:43:19 +0200 Subject: [PATCH 49/50] Scopes - Notify restart req. for enable & pressure settings (#9944) * Moved keybinds, made settings require restart * Move keybinds --- addons/scopes/XEH_postInit.sqf | 101 +------------------- addons/scopes/functions/fnc_adjustScope.sqf | 3 +- addons/scopes/initKeybinds.inc.sqf | 95 ++++++++++++++++++ addons/scopes/initSettings.inc.sqf | 8 +- 4 files changed, 106 insertions(+), 101 deletions(-) create mode 100644 addons/scopes/initKeybinds.inc.sqf diff --git a/addons/scopes/XEH_postInit.sqf b/addons/scopes/XEH_postInit.sqf index 9c96281246..4ce8d6d11c 100644 --- a/addons/scopes/XEH_postInit.sqf +++ b/addons/scopes/XEH_postInit.sqf @@ -9,6 +9,9 @@ if (!hasInterface) exitWith {}; +// Add keybinds +#include "initKeybinds.inc.sqf" + GVAR(Optics) = ["", "", ""]; GVAR(Guns) = ["", "", ""]; GVAR(canAdjustElevation) = [false, false, false]; @@ -41,104 +44,6 @@ GVAR(scopeAdjust) = [[[0,0],0,[0,0],0], [[0,0],0,[0,0],0], [[0,0],0,[0,0],0]]; }; }] call CBA_fnc_addPlayerEventHandler; - // Add keybinds - ["ACE3 Scope Adjustment", QGVAR(AdjustUpMinor), localize LSTRING(AdjustUpMinor), { - // Conditions: canInteract - if !([ACE_player, objNull, ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) exitWith {false}; - // Conditions: specific - if (!([ACE_player] call CBA_fnc_canUseWeapon)) exitWith {false}; - - [ACE_player] call FUNC(inventoryCheck); - - // Statement - [ACE_player, ELEVATION_UP, MINOR_INCREMENT] call FUNC(adjustScope); - }, {false}, [201, [false, false, false]], true] call CBA_fnc_addKeybind; - - ["ACE3 Scope Adjustment", QGVAR(AdjustDownMinor), localize LSTRING(AdjustDownMinor), { - // Conditions: canInteract - if !([ACE_player, objNull, ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) exitWith {false}; - // Conditions: specific - if (!([ACE_player] call CBA_fnc_canUseWeapon)) exitWith {false}; - - [ACE_player] call FUNC(inventoryCheck); - - // Statement - [ACE_player, ELEVATION_DOWN, MINOR_INCREMENT] call FUNC(adjustScope); - }, {false}, [209, [false, false, false]], true] call CBA_fnc_addKeybind; - - ["ACE3 Scope Adjustment", QGVAR(AdjustLeftMinor), localize LSTRING(AdjustLeftMinor), { - // Conditions: canInteract - if !([ACE_player, objNull, ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) exitWith {false}; - // Conditions: specific - if (!([ACE_player] call CBA_fnc_canUseWeapon)) exitWith {false}; - - [ACE_player] call FUNC(inventoryCheck); - - // Statement - [ACE_player, WINDAGE_LEFT, MINOR_INCREMENT] call FUNC(adjustScope); - }, {false}, [209, [false, true, false]], true] call CBA_fnc_addKeybind; - - ["ACE3 Scope Adjustment", QGVAR(AdjustRightMinor), localize LSTRING(AdjustRightMinor), { - // Conditions: canInteract - if !([ACE_player, objNull, ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) exitWith {false}; - // Conditions: specific - if (!([ACE_player] call CBA_fnc_canUseWeapon)) exitWith {false}; - - [ACE_player] call FUNC(inventoryCheck); - - // Statement - [ACE_player, WINDAGE_RIGHT, MINOR_INCREMENT] call FUNC(adjustScope); - }, {false}, [201, [false, true, false]], true] call CBA_fnc_addKeybind; - - ["ACE3 Scope Adjustment", QGVAR(AdjustUpMajor), localize LSTRING(AdjustUpMajor), { - // Conditions: canInteract - if !([ACE_player, objNull, ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) exitWith {false}; - // Conditions: specific - if (!([ACE_player] call CBA_fnc_canUseWeapon)) exitWith {false}; - - [ACE_player] call FUNC(inventoryCheck); - - // Statement - [ACE_player, ELEVATION_UP, MAJOR_INCREMENT] call FUNC(adjustScope); - }, {false}, [201, [true, false, false]], true] call CBA_fnc_addKeybind; - - ["ACE3 Scope Adjustment", QGVAR(AdjustDownMajor), localize LSTRING(AdjustDownMajor), { - // Conditions: canInteract - if !([ACE_player, objNull, ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) exitWith {false}; - // Conditions: specific - if (!([ACE_player] call CBA_fnc_canUseWeapon)) exitWith {false}; - - [ACE_player] call FUNC(inventoryCheck); - - // Statement - [ACE_player, ELEVATION_DOWN, MAJOR_INCREMENT] call FUNC(adjustScope); - }, {false}, [209, [true, false, false]], true] call CBA_fnc_addKeybind; - - ["ACE3 Scope Adjustment", QGVAR(AdjustLeftMajor), localize LSTRING(AdjustLeftMajor), { - // Conditions: canInteract - if !([ACE_player, objNull, ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) exitWith {false}; - // Conditions: specific - if (!([ACE_player] call CBA_fnc_canUseWeapon)) exitWith {false}; - - [ACE_player] call FUNC(inventoryCheck); - - // Statement - [ACE_player, WINDAGE_LEFT, MAJOR_INCREMENT] call FUNC(adjustScope); - }, {false}, [209, [true, true, false]], true] call CBA_fnc_addKeybind; - - ["ACE3 Scope Adjustment", QGVAR(AdjustRightMajor), localize LSTRING(AdjustRightMajor), { - // Conditions: canInteract - if !([ACE_player, objNull, ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) exitWith {false}; - // Conditions: specific - if (!([ACE_player] call CBA_fnc_canUseWeapon)) exitWith {false}; - - [ACE_player] call FUNC(inventoryCheck); - - // Statement - [ACE_player, WINDAGE_RIGHT, MAJOR_INCREMENT] call FUNC(adjustScope); - }, {false}, [201, [true, true, false]], true] call CBA_fnc_addKeybind; - - // Register fire event handler ["ace_firedPlayer", LINKFUNC(firedEH)] call CBA_fnc_addEventHandler; ["ace_firedPlayerNonLocal", LINKFUNC(firedEH)] call CBA_fnc_addEventHandler; diff --git a/addons/scopes/functions/fnc_adjustScope.sqf b/addons/scopes/functions/fnc_adjustScope.sqf index bd2d2d1da6..0a9d7bd089 100644 --- a/addons/scopes/functions/fnc_adjustScope.sqf +++ b/addons/scopes/functions/fnc_adjustScope.sqf @@ -17,12 +17,13 @@ * Public: No */ +if (!GVAR(enabled)) exitWith {false}; + params ["_unit", "_turretAndDirection", "_majorStep"]; TRACE_3("adjustScope",_unit,_turretAndDirection,_majorStep); if (!(_unit isKindOf "Man")) exitWith {false}; if (currentMuzzle _unit != currentWeapon _unit) exitWith {false}; -if (!GVAR(enabled)) exitWith {false}; private _weaponIndex = [_unit, currentWeapon _unit] call EFUNC(common,getWeaponIndex); if (_weaponIndex < 0) exitWith {false}; diff --git a/addons/scopes/initKeybinds.inc.sqf b/addons/scopes/initKeybinds.inc.sqf new file mode 100644 index 0000000000..a147b1b215 --- /dev/null +++ b/addons/scopes/initKeybinds.inc.sqf @@ -0,0 +1,95 @@ +["ACE3 Scope Adjustment", QGVAR(AdjustUpMinor), LLSTRING(AdjustUpMinor), { + // Conditions: canInteract + if !([ACE_player, objNull, ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if (!([ACE_player] call CBA_fnc_canUseWeapon)) exitWith {false}; + + [ACE_player] call FUNC(inventoryCheck); + + // Statement + [ACE_player, ELEVATION_UP, MINOR_INCREMENT] call FUNC(adjustScope); +}, {false}, [201, [false, false, false]], true] call CBA_fnc_addKeybind; + +["ACE3 Scope Adjustment", QGVAR(AdjustDownMinor), LLSTRING(AdjustDownMinor), { + // Conditions: canInteract + if !([ACE_player, objNull, ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if (!([ACE_player] call CBA_fnc_canUseWeapon)) exitWith {false}; + + [ACE_player] call FUNC(inventoryCheck); + + // Statement + [ACE_player, ELEVATION_DOWN, MINOR_INCREMENT] call FUNC(adjustScope); +}, {false}, [209, [false, false, false]], true] call CBA_fnc_addKeybind; + +["ACE3 Scope Adjustment", QGVAR(AdjustLeftMinor), LLSTRING(AdjustLeftMinor), { + // Conditions: canInteract + if !([ACE_player, objNull, ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if (!([ACE_player] call CBA_fnc_canUseWeapon)) exitWith {false}; + + [ACE_player] call FUNC(inventoryCheck); + + // Statement + [ACE_player, WINDAGE_LEFT, MINOR_INCREMENT] call FUNC(adjustScope); +}, {false}, [209, [false, true, false]], true] call CBA_fnc_addKeybind; + +["ACE3 Scope Adjustment", QGVAR(AdjustRightMinor), LLSTRING(AdjustRightMinor), { + // Conditions: canInteract + if !([ACE_player, objNull, ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if (!([ACE_player] call CBA_fnc_canUseWeapon)) exitWith {false}; + + [ACE_player] call FUNC(inventoryCheck); + + // Statement + [ACE_player, WINDAGE_RIGHT, MINOR_INCREMENT] call FUNC(adjustScope); +}, {false}, [201, [false, true, false]], true] call CBA_fnc_addKeybind; + +["ACE3 Scope Adjustment", QGVAR(AdjustUpMajor), LLSTRING(AdjustUpMajor), { + // Conditions: canInteract + if !([ACE_player, objNull, ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if (!([ACE_player] call CBA_fnc_canUseWeapon)) exitWith {false}; + + [ACE_player] call FUNC(inventoryCheck); + + // Statement + [ACE_player, ELEVATION_UP, MAJOR_INCREMENT] call FUNC(adjustScope); +}, {false}, [201, [true, false, false]], true] call CBA_fnc_addKeybind; + +["ACE3 Scope Adjustment", QGVAR(AdjustDownMajor), LLSTRING(AdjustDownMajor), { + // Conditions: canInteract + if !([ACE_player, objNull, ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if (!([ACE_player] call CBA_fnc_canUseWeapon)) exitWith {false}; + + [ACE_player] call FUNC(inventoryCheck); + + // Statement + [ACE_player, ELEVATION_DOWN, MAJOR_INCREMENT] call FUNC(adjustScope); +}, {false}, [209, [true, false, false]], true] call CBA_fnc_addKeybind; + +["ACE3 Scope Adjustment", QGVAR(AdjustLeftMajor), LLSTRING(AdjustLeftMajor), { + // Conditions: canInteract + if !([ACE_player, objNull, ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if (!([ACE_player] call CBA_fnc_canUseWeapon)) exitWith {false}; + + [ACE_player] call FUNC(inventoryCheck); + + // Statement + [ACE_player, WINDAGE_LEFT, MAJOR_INCREMENT] call FUNC(adjustScope); +}, {false}, [209, [true, true, false]], true] call CBA_fnc_addKeybind; + +["ACE3 Scope Adjustment", QGVAR(AdjustRightMajor), LLSTRING(AdjustRightMajor), { + // Conditions: canInteract + if !([ACE_player, objNull, ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if (!([ACE_player] call CBA_fnc_canUseWeapon)) exitWith {false}; + + [ACE_player] call FUNC(inventoryCheck); + + // Statement + [ACE_player, WINDAGE_RIGHT, MAJOR_INCREMENT] call FUNC(adjustScope); +}, {false}, [201, [true, true, false]], true] call CBA_fnc_addKeybind; diff --git a/addons/scopes/initSettings.inc.sqf b/addons/scopes/initSettings.inc.sqf index 917587be8e..40ed62cbcc 100644 --- a/addons/scopes/initSettings.inc.sqf +++ b/addons/scopes/initSettings.inc.sqf @@ -5,7 +5,9 @@ private _category = format ["ACE %1", localize LSTRING(DisplayName)]; [LSTRING(enabled_displayName), LSTRING(enabled_description)], _category, true, - 1 + 1, + {[QGVAR(enabled), _this] call EFUNC(common,cbaSettings_settingChanged)}, + true // Needs mission restart ] call CBA_fnc_addSetting; [ @@ -69,7 +71,9 @@ private _category = format ["ACE %1", localize LSTRING(DisplayName)]; [LSTRING(deduceBarometricPressureFromTerrainAltitude_displayName), LSTRING(deduceBarometricPressureFromTerrainAltitude_description)], _category, false, - 1 + 1, + {[QGVAR(deduceBarometricPressureFromTerrainAltitude), _this] call EFUNC(common,cbaSettings_settingChanged)}, + true // Needs mission restart ] call CBA_fnc_addSetting; [ From 6165b46ab6ec8657ba5f30060f310bb72d1a0679 Mon Sep 17 00:00:00 2001 From: PlayerBotPro Date: Thu, 11 Apr 2024 23:58:50 +0800 Subject: [PATCH 50/50] Medical Treatment - Fix Painkiller has no effect when Advanced Medication is off (#9942) * fix: Painkiller has no effect when Advanced Medication is off * Change PainKillers_PAIN_SUPPRESSION to uppercase * Update addons/medical_treatment/functions/fnc_medicationLocal.sqf Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> --------- Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> --- addons/medical_treatment/functions/fnc_medicationLocal.sqf | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/addons/medical_treatment/functions/fnc_medicationLocal.sqf b/addons/medical_treatment/functions/fnc_medicationLocal.sqf index 31884dac20..0b23b365e8 100644 --- a/addons/medical_treatment/functions/fnc_medicationLocal.sqf +++ b/addons/medical_treatment/functions/fnc_medicationLocal.sqf @@ -19,6 +19,9 @@ // todo: move this macro to script_macros_medical.hpp? #define MORPHINE_PAIN_SUPPRESSION 0.6 +// 0.2625 = 0.6/0.8 * 0.35 +// 0.6 = basic medication morph. pain suppr., 0.8 = adv. medication morph. pain suppr., 0.35 = adv. medication painkillers. pain suppr. +#define PAINKILLERS_PAIN_SUPPRESSION 0.2625 params ["_patient", "_bodyPart", "_classname"]; TRACE_3("medicationLocal",_patient,_bodyPart,_classname); @@ -36,6 +39,10 @@ if (!GVAR(advancedMedication)) exitWith { case "Epinephrine": { [QEGVAR(medical,WakeUp), _patient] call CBA_fnc_localEvent; }; + case "Painkillers": { + private _painSuppress = GET_PAIN_SUPPRESS(_patient); + _patient setVariable [VAR_PAIN_SUPP, (_painSuppress + PAINKILLERS_PAIN_SUPPRESSION) min 1, true]; + }; }; }; TRACE_1("Running treatmentMedicationLocal with Advanced configuration for",_patient);