From 5ea202ce25a2ec95c923b59df7965d63bd10d647 Mon Sep 17 00:00:00 2001
From: Apricot <50947830+Apricot-ale@users.noreply.github.com>
Date: Fri, 21 Jun 2024 03:01:28 +0900
Subject: [PATCH 01/36] Compat RF - Improve/Change RF Realistic Name (#10071)
* Update RF Realname Stringtables
Add HEMMT Fire Truck
Change Puma family naming and add missing variation
* typo fix
* Tab to space I hate this
* Update stringtable.xml
Import HEMTT Fire Truck localization from RF
Add "Container" to AMOS. cuz that is not just AMOS...
* Uppercase and add rifle the HERA H6
* add space start of comment
* Add "ASW" to Wildcat AH-11F
For distinction with WY-55(Vanilla Wildcat) and AH-11F (RF Wildcat)
* Remove "Rifle" from H6
Does it really need? Probably not.
---
.../compat_rf_realisticnames/CfgVehicles.hpp | 48 +++++++---
.../compat_rf_realisticnames/stringtable.xml | 91 ++++++++++++-------
2 files changed, 90 insertions(+), 49 deletions(-)
diff --git a/addons/compat_rf/compat_rf_realisticnames/CfgVehicles.hpp b/addons/compat_rf/compat_rf_realisticnames/CfgVehicles.hpp
index 016a569c50..2983525ec8 100644
--- a/addons/compat_rf/compat_rf_realisticnames/CfgVehicles.hpp
+++ b/addons/compat_rf/compat_rf_realisticnames/CfgVehicles.hpp
@@ -19,36 +19,54 @@ class CfgVehicles {
displayName = SUBCSTRING(heli_light_03_unarmed_Name);
};
- class Heli_EC_01A_base_RF;
- class Heli_EC_01A_military_base_RF: Heli_EC_01A_base_RF {
- displayName = SUBCSTRING(ec_01a_military_Name);
- };
-
+ // H240 Transport, Gendarmerie/ION Transport
class Helicopter_Base_H;
class Heli_EC_01_base_RF: Helicopter_Base_H {
displayName = SUBCSTRING(ec_01_base_Name);
};
-
+ // H240C Transport, CIV Transport
class Heli_EC_01_civ_base_RF: Heli_EC_01_base_RF {
- displayName = SUBCSTRING(ec_01_Name);
+ displayName = SUBCSTRING(ec_01_civ_base_Name);
};
-
+ // H235 Transport, CIV Transport Float-less (not used)
+ class Heli_EC_01A_base_RF: Heli_EC_01_base_RF {
+ displayName = SUBCSTRING(ec_01a_base_Name);
+ };
+ // H235C Transport, CIV Transport Float-less
class Heli_EC_01A_civ_base_RF: Heli_EC_01A_base_RF {
- displayName = SUBCSTRING(ec_01a_Name);
+ displayName = SUBCSTRING(ec_01a_civ_base_Name);
};
-
+ // RAI-350M Cougar (Unarmed), IND/UNA Transport Float-less
+ class Heli_EC_01A_military_base_RF: Heli_EC_01A_base_RF {
+ displayName = SUBCSTRING(ec_01a_military_base_Name);
+ };
+ // RAI-360M Cougar, IND/OPF SOCAT Float-less
class Heli_EC_02_base_RF: Heli_EC_01_base_RF {
- displayName = SUBCSTRING(ec_02_Name);
+ displayName = SUBCSTRING(ec_02_base_Name);
};
-
+ // MH-360M Cougar, NATO SOCAT (not used) Float-less
+ class B_Heli_EC_02_RF: Heli_EC_02_base_RF {
+ displayName = SUBCSTRING(ec_02_nato_Name);
+ };
+ // MH-245 Cougar, NATO Combat Type
class Heli_EC_03_base_RF: Heli_EC_01_base_RF {
- displayName = SUBCSTRING(ec_03_Name);
+ displayName = SUBCSTRING(ec_03_base_Name);
};
-
+ // H245 SAR, CIV SAR Type
class Heli_EC_04_base_RF: Heli_EC_01_base_RF {
- displayName = SUBCSTRING(ec_04_Name);
+ displayName = SUBCSTRING(ec_04_base_Name);
+ };
+ // MH-245 Cougar (Unarmed), NATO Transport Type (Maybe SAR?)
+ class Heli_EC_04_military_base_RF: Heli_EC_04_base_RF {
+ displayName = SUBCSTRING(ec_04_military_base_Name);
};
+ // HEMTT
+ class B_Truck_01_fuel_F;
+ class C_Truck_01_water_rf: B_Truck_01_fuel_F {
+ displayName = SUBCSTRING(truck_01_water_Name);
+ };
+
// Typhoon
class O_Truck_03_fuel_F;
class C_Truck_03_water_rf: O_Truck_03_fuel_F {
diff --git a/addons/compat_rf/compat_rf_realisticnames/stringtable.xml b/addons/compat_rf/compat_rf_realisticnames/stringtable.xml
index a31221294c..e2ccac3c30 100644
--- a/addons/compat_rf/compat_rf_realisticnames/stringtable.xml
+++ b/addons/compat_rf/compat_rf_realisticnames/stringtable.xml
@@ -90,24 +90,24 @@
デザートイーグル Mark XIX L5 (ゴールド)
- Hera H6 (Tan)
- ヘラ H6 (タン)
+ HERA H6 (Tan)
+ HERA H6 (タン)
- Hera H6 (Olive)
- ヘラ H6 (オリーブ)
+ HERA H6 (Olive)
+ HERA H6 (オリーブ)
- Hera H6 (Black)
- ヘラ H6 (ブラック)
+ HERA H6 (Black)
+ HERA H6 (ブラック)
- Hera H6 (Digital)
- ヘラ H6 (AAF迷彩)
+ HERA H6 (Digital)
+ HERA H6 (AAF迷彩)
- Hera H6 (Gold)
- ヘラ H6 (ゴールド)
+ HERA H6 (Gold)
+ HERA H6 (ゴールド)
VS-121 (Black)
@@ -170,40 +170,63 @@
ASh-12 LR (森林迷彩)
- AW159 Wildcat
- AW159 ワイルドキャット
+ AW159 Wildcat ASW
+ AW159 ワイルドキャット ASW
- AW159 Wildcat (Unarmed)
- AW159 ワイルドキャット (非武装)
-
-
- H225M Super Cougar HADR
- H225M シュペル クーガー HADR
+ AW159 Wildcat ASW (Unarmed)
+ AW159 ワイルドキャット ASW (非武装)
- H225M Super Cougar Transport
- H225M シュペル クーガー 輸送
+ H225 Super Puma (Transport)
+ H225 シュペル ピューマ (輸送型)
-
- H225 Super Puma Transport
- H225 シュペル ピューマ 輸送
+
+ H225 Super Puma (Civilian)
+ H225 シュペル ピューマ (民生型)
-
- H225 Super Puma VIP
- H225 シュペル ピューマ VIP
+
+ H215 Super Puma (Transport)
+ H215 シュペル ピューマ (輸送型)
-
+
+ H215 Super Puma (Civilian)
+ H215 シュペル ピューマ (民生型)
+
+
+ H215 Super Puma (Unarmed)
+ H215 シュペル ピューマ (非武装)
+
+
H225M Super Cougar SOCAT
H225M シュペル クーガー SOCAT
-
- H225M Super Cougar CSAR
- H225M シュペル クーガー CSAR
+
+ H225M Super Cougar SOCAT
+ H225M シュペル クーガー SOCAT
-
+
+ H225M Super Cougar
+ H225M シュペル クーガー
+
+
H225 Super Puma SAR
- H225 シュペル ピューマ SAR
+ H225 シュペル ピューマ 捜索救難型
+
+
+ H225M Super Cougar (Unarmed)
+ H225M シュペル クーガー (非武装)
+
+
+ HEMTT Fire Truck
+ HEMTT anti-incendie
+ HEMTT (wersja pożarnicza)
+ HEMTT-Löschfahrzeug
+ HEMTT (camión de bomberos)
+ Пожарная машина HEMTT
+ HEMTT 消防卡车
+ HEMTT contra incêndio
+ HEMTT 消防車
Typhoon Water
@@ -258,8 +281,8 @@
RSG60
- AMOS
- AMOS
+ AMOS Container
+ AMOS コンテナ
Drone40
From c4fb858c1d179376040c245f81d2d78f07483c24 Mon Sep 17 00:00:00 2001
From: Kex
Date: Thu, 20 Jun 2024 20:19:14 +0200
Subject: [PATCH 02/36] Medical - Refactor target blood pressure (#10081)
Refactor target blood pressure
---
addons/medical_vitals/functions/fnc_updateHeartRate.sqf | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/addons/medical_vitals/functions/fnc_updateHeartRate.sqf b/addons/medical_vitals/functions/fnc_updateHeartRate.sqf
index 187a8ffe58..0390a9ad07 100644
--- a/addons/medical_vitals/functions/fnc_updateHeartRate.sqf
+++ b/addons/medical_vitals/functions/fnc_updateHeartRate.sqf
@@ -40,13 +40,9 @@ if IN_CRDC_ARRST(_unit) then {
private _spo2 = GET_SPO2(_unit);
private _painLevel = GET_PAIN_PERCEIVED(_unit);
- private _targetBP = 107;
- if (_bloodVolume < BLOOD_VOLUME_CLASS_2_HEMORRHAGE) then {
- _targetBP = _targetBP * (_bloodVolume / DEFAULT_BLOOD_VOLUME);
- };
-
_targetHR = DEFAULT_HEART_RATE;
if (_bloodVolume < BLOOD_VOLUME_CLASS_3_HEMORRHAGE) then {
+ private _targetBP = 107 * (_bloodVolume / DEFAULT_BLOOD_VOLUME);
_targetHR = _heartRate * (_targetBP / (45 max _meanBP));
};
if (_painLevel > 0.2) then {
From 143968079526cce88e62b6d5523b5b906432238a Mon Sep 17 00:00:00 2001
From: bluefield <59333909+bluefieldcreator@users.noreply.github.com>
Date: Thu, 20 Jun 2024 22:30:33 +0200
Subject: [PATCH 03/36] Overpressure - Separate backblast and overpressure
range coefficient (#10070)
* feat: separate overpressure and backblast configurations
* documentation: remove undefined return
* typo: trace macro padding
* refactor: add range return
* refactor: reuse return values for overpressure coef
* refactor: reuse return values for backblast coef
* whitespace
Co-authored-by: Drofseh
* headers
Co-authored-by: Drofseh
Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com>
* feat: change backblast limit to 0
Co-authored-by: PabstMirror
* remove: deleted ACE_Settings.hpp
* fix: update postInit.sqf event handler to register new GVARs
* fix: remove `ACE_Settings.hpp`
* typo: add spacing
Co-authored-by: Drofseh
* typo: fix spacing
Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com>
* feat: switch distanceCoef minimun value to 0
Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com>
* typo: update the slider checks with new minimuns
temporary solution until i figure out the EH
Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com>
* feat: new stringable elements
* Update stringtable.xml
* Added translations
* Switched order of settings to match age of settings
* setting require restart, split adding firedEH
* Added notifications about mission restart
---------
Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com>
Co-authored-by: Drofseh
Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com>
Co-authored-by: PabstMirror
---
addons/overpressure/ACE_Settings.hpp | 5 ---
addons/overpressure/XEH_postInit.sqf | 13 ++++---
addons/overpressure/config.cpp | 1 -
.../overpressure/functions/fnc_firedEHBB.sqf | 2 ++
.../overpressure/functions/fnc_firedEHOP.sqf | 2 ++
.../functions/fnc_getOverPressureValues.sqf | 2 +-
addons/overpressure/initSettings.inc.sqf | 20 +++++++++--
addons/overpressure/stringtable.xml | 34 +++++++++++--------
8 files changed, 50 insertions(+), 29 deletions(-)
delete mode 100644 addons/overpressure/ACE_Settings.hpp
diff --git a/addons/overpressure/ACE_Settings.hpp b/addons/overpressure/ACE_Settings.hpp
deleted file mode 100644
index d46cae7498..0000000000
--- a/addons/overpressure/ACE_Settings.hpp
+++ /dev/null
@@ -1,5 +0,0 @@
-class ACE_Settings {
- class GVAR(distanceCoefficient) {
- movedToSQF = 1;
- };
-};
diff --git a/addons/overpressure/XEH_postInit.sqf b/addons/overpressure/XEH_postInit.sqf
index 46fe460268..4b014e89e2 100644
--- a/addons/overpressure/XEH_postInit.sqf
+++ b/addons/overpressure/XEH_postInit.sqf
@@ -1,14 +1,17 @@
#include "script_component.hpp"
["CBA_settingsInitialized", {
- TRACE_1("settingsInit eh",GVAR(distanceCoefficient));
- if (GVAR(distanceCoefficient) <= 0) exitWith {};
+ TRACE_2("settingsInit eh",GVAR(backblastDistanceCoefficient),GVAR(overpressureDistanceCoefficient));
["ace_overpressure", LINKFUNC(overpressureDamage)] call CBA_fnc_addEventHandler;
- // Register fire event handler
- ["ace_firedPlayer", LINKFUNC(firedEHBB)] call CBA_fnc_addEventHandler;
- ["ace_firedPlayerVehicle", LINKFUNC(firedEHOP)] call CBA_fnc_addEventHandler;
+ // Register fire event handlers
+ if (GVAR(backblastDistanceCoefficient) > 0) then {
+ ["ace_firedPlayer", LINKFUNC(firedEHBB)] call CBA_fnc_addEventHandler;
+ };
+ if (GVAR(overpressureDistanceCoefficient) > 0) then {
+ ["ace_firedPlayerVehicle", LINKFUNC(firedEHOP)] call CBA_fnc_addEventHandler;
+ };
GVAR(cacheHash) = createHashMap;
}] call CBA_fnc_addEventHandler;
diff --git a/addons/overpressure/config.cpp b/addons/overpressure/config.cpp
index 3815cc831f..7274cd5059 100644
--- a/addons/overpressure/config.cpp
+++ b/addons/overpressure/config.cpp
@@ -14,7 +14,6 @@ class CfgPatches {
};
};
-#include "ACE_Settings.hpp"
#include "CfgEventHandlers.hpp"
#include "CfgWeapons.hpp"
#include "ACE_Arsenal_Stats.hpp"
diff --git a/addons/overpressure/functions/fnc_firedEHBB.sqf b/addons/overpressure/functions/fnc_firedEHBB.sqf
index a027785940..05a761bf06 100644
--- a/addons/overpressure/functions/fnc_firedEHBB.sqf
+++ b/addons/overpressure/functions/fnc_firedEHBB.sqf
@@ -22,6 +22,8 @@ TRACE_10("firedEH:",_unit,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile,_veh
private _bbValues = [_weapon, _ammo, _magazine] call FUNC(getOverPressureValues);
_bbValues params ["_backblastAngle", "_backblastRange", "_backblastDamage", "_offset"];
+_backblastRange = _backblastRange * GVAR(backblastDistanceCoefficient);
+
TRACE_4("cache",_backblastAngle,_backblastRange,_backblastDamage,_offset);
if (_backblastDamage <= 0) exitWith {};
diff --git a/addons/overpressure/functions/fnc_firedEHOP.sqf b/addons/overpressure/functions/fnc_firedEHOP.sqf
index 2345d09327..e011098b59 100644
--- a/addons/overpressure/functions/fnc_firedEHOP.sqf
+++ b/addons/overpressure/functions/fnc_firedEHOP.sqf
@@ -22,6 +22,8 @@ TRACE_10("firedEH:",_unit,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile,_veh
private _opValues = [_weapon, _ammo, _magazine] call FUNC(getOverPressureValues);
_opValues params ["_dangerZoneAngle", "_dangerZoneRange", "_dangerZoneDamage"];
+_dangerZoneRange = _dangerZoneRange * GVAR(overpressureDistanceCoefficient);
+
TRACE_3("cache",_dangerZoneAngle,_dangerZoneRange,_dangerZoneDamage);
if (_dangerZoneDamage <= 0) exitWith {};
diff --git a/addons/overpressure/functions/fnc_getOverPressureValues.sqf b/addons/overpressure/functions/fnc_getOverPressureValues.sqf
index 4372d4c8e6..374e9de9d6 100644
--- a/addons/overpressure/functions/fnc_getOverPressureValues.sqf
+++ b/addons/overpressure/functions/fnc_getOverPressureValues.sqf
@@ -54,7 +54,7 @@ TRACE_1("ConfigPath",_config);
// get the Variables out of the Configs and populate return array with them
_return = [
(getNumber (_config >> QGVAR(angle))),
- (getNumber (_config >> QGVAR(range))) * GVAR(distanceCoefficient),
+ (getNumber (_config >> QGVAR(range))),
(getNumber (_config >> QGVAR(damage))),
(getNumber (_config >> QGVAR(offset)))
];
diff --git a/addons/overpressure/initSettings.inc.sqf b/addons/overpressure/initSettings.inc.sqf
index 7fe6401131..ece1230dcc 100644
--- a/addons/overpressure/initSettings.inc.sqf
+++ b/addons/overpressure/initSettings.inc.sqf
@@ -1,9 +1,23 @@
private _category = [LELSTRING(common,categoryUncategorized), LLSTRING(DisplayName)];
[
- QGVAR(distanceCoefficient), "SLIDER",
+ QGVAR(overpressureDistanceCoefficient),
+ "SLIDER",
[LSTRING(distanceCoefficient_displayName), LSTRING(distanceCoefficient_toolTip)],
_category,
- [-1, 10, 1, 1],
- 1
+ [0, 10, 1, 1],
+ 1,
+ {[QGVAR(overpressureDistanceCoefficient), _this] call EFUNC(common,cbaSettings_settingChanged)},
+ true // Needs mission restart
+] call CBA_fnc_addSetting;
+
+[
+ QGVAR(backblastDistanceCoefficient),
+ "SLIDER",
+ [LSTRING(backblastDistanceCoefficient_displayName), LSTRING(backblastDistanceCoefficient_toolTip)],
+ _category,
+ [0, 10, 1, 1],
+ 1,
+ {[QGVAR(backblastDistanceCoefficient), _this] call EFUNC(common,cbaSettings_settingChanged)},
+ true // Needs mission restart
] call CBA_fnc_addSetting;
diff --git a/addons/overpressure/stringtable.xml b/addons/overpressure/stringtable.xml
index caade38c3d..d8b9ad12f4 100644
--- a/addons/overpressure/stringtable.xml
+++ b/addons/overpressure/stringtable.xml
@@ -30,20 +30,26 @@
Coeficiente de distancia de sobrepresión
- Scales the overpressure effect [Default: 1]
- Stellt den Koeffizient für die Überdruckentfernung ein [Standard: 1]
- 過圧効果の範囲 [デフォルト: 1]
- 과중압력의 효과 크기 [기본설정: 1]
- Skaluje efekt nadciśnienia [Domyślne: 1]
- Ajuste l'effet de surpression. Valeur par défaut : 1.
- Scala l'effetto di sovrapressione [Predefinito: 1]
- 超压影响的范围 [预设:1]
- 高壓影響的範圍 [預設: 1]
- Степень зависимости избыточного давления от расстояния [По умолчанию: 1]
- Escala o efeito de sobrepressão [Padrão: 1]
- Állítja a túlnyomás hatását [Alapértelmezett: 1]
- Nastavuje jak velký je efekt přetlaku [Standard: 1]
- Escala el efecto de sobrepresión [Predeterminado: 1]
+ Scales the overpressure effect
+ Stellt den Koeffizient für die Überdruckentfernung ein
+ 過圧効果の範囲
+ 과중압력의 효과 크기
+ Skaluje efekt nadciśnienia
+ Ajuste l'effet de surpression
+ Scala l'effetto di sovrapressione
+ 超压影响的范围
+ 高壓影響的範圍
+ Степень зависимости избыточного давления от расстояния
+ Escala o efeito de sobrepressão
+ Állítja a túlnyomás hatását
+ Nastavuje jak velký je efekt přetlaku
+ Escala el efecto de sobrepresión
+
+
+ Backblast Distance Coefficient
+
+
+ Scales the backblast effect
Backblast range
From db6c4a72a6d58e1da496311f49c987d68630f31e Mon Sep 17 00:00:00 2001
From: Cyruz
Date: Fri, 21 Jun 2024 16:06:44 +0100
Subject: [PATCH 04/36] Cookoff - Fix incorrect parent class in cookoff sounds
(#10083)
Fix incorrect parent
Co-authored-by: Cyruz143
---
addons/cookoff/CfgSounds.hpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/addons/cookoff/CfgSounds.hpp b/addons/cookoff/CfgSounds.hpp
index 742fb589d9..70d752d613 100644
--- a/addons/cookoff/CfgSounds.hpp
+++ b/addons/cookoff/CfgSounds.hpp
@@ -45,7 +45,7 @@ class CfgSounds {
class GVAR(shotsubmunitions_close_3): GVAR(shotbullet_close_3) {
sound[] = {QPATHTOF(sounds\shotbullet\close_3.wss), VOLUME, PITCH, 1600};
};
- class GVAR(shotsubmunitions_mid_1): GVAR(shotbullet_far_1) {
+ class GVAR(shotsubmunitions_mid_1): GVAR(shotbullet_mid_1) {
sound[] = {QPATHTOF(sounds\shotbullet\mid_1.wss), VOLUME, PITCH, 1600};
};
class GVAR(shotsubmunitions_mid_2): GVAR(shotbullet_mid_2) {
From 7ea2aab2c90def4ed57b6fdcc31299125d52c483 Mon Sep 17 00:00:00 2001
From: johnb432 <58661205+johnb432@users.noreply.github.com>
Date: Sat, 22 Jun 2024 15:52:59 +0200
Subject: [PATCH 05/36] Common - Improve PBO checking (#9266)
* Update PBO checking
* Added kicking of clients without ACE loaded
* Update fnc_errorMessage.sqf
* Update fnc_checkVersionNumber.sqf
* More compatibility for #9568
* Cleanup
* Minor cleanup + added server source
* update outdated/not present error message
* check version number fixes
* Update fnc_errorMessage.sqf
* Changed error names
Server is always right, client has either older or newer versions, or missing or additional addons
* Improved ACE detection method
* Tweaks and fixes
* Try another approach
* Update events-framework.md
* Update XEH_postInit.sqf
* Update fnc_checkVersionNumber.sqf
* Removed check for non-ACE clients
* Update XEH_postInit.sqf
* Cleanup
* Remove rogue change
* Improved message display in systemChat
* Update fnc_checkPBOs.sqf
* Removed loop variable initialisers
* Fixed header
* Updated headers
---------
Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com>
Co-authored-by: LinkIsGrim
---
addons/common/XEH_PREP.hpp | 1 +
addons/common/functions/fnc_checkFiles.sqf | 119 ++++++-----
.../functions/fnc_checkFiles_diagnoseACE.sqf | 48 +++--
addons/common/functions/fnc_checkPBOs.sqf | 102 +++++-----
.../functions/fnc_checkVersionNumber.sqf | 161 +++++++++++++++
addons/common/functions/fnc_errorMessage.sqf | 188 +++++++++---------
addons/common/scripts/checkVersionNumber.sqf | 160 ---------------
docs/wiki/framework/events-framework.md | 2 +
8 files changed, 408 insertions(+), 373 deletions(-)
create mode 100644 addons/common/functions/fnc_checkVersionNumber.sqf
delete mode 100644 addons/common/scripts/checkVersionNumber.sqf
diff --git a/addons/common/XEH_PREP.hpp b/addons/common/XEH_PREP.hpp
index f46d1689f9..3a5838a230 100644
--- a/addons/common/XEH_PREP.hpp
+++ b/addons/common/XEH_PREP.hpp
@@ -30,6 +30,7 @@ PREP(changeProjectileDirection);
PREP(checkFiles);
PREP(checkFiles_diagnoseACE);
PREP(checkPBOs);
+PREP(checkVersionNumber);
PREP(claim);
PREP(claimSafeServer);
PREP(codeToString);
diff --git a/addons/common/functions/fnc_checkFiles.sqf b/addons/common/functions/fnc_checkFiles.sqf
index 39e2bac3ac..7b90a1b0a8 100644
--- a/addons/common/functions/fnc_checkFiles.sqf
+++ b/addons/common/functions/fnc_checkFiles.sqf
@@ -15,15 +15,20 @@
* Public: No
*/
-///////////////
-// check addons
-///////////////
-private _mainCfg = configFile >> "CfgPatches" >> "ace_main";
-private _mainVersion = getText (_mainCfg >> "versionStr");
-private _mainSource = configSourceMod _mainCfg;
+// Don't execute in scheduled environment
+if (canSuspend) exitWith {
+ [FUNC(checkFiles), nil] call CBA_fnc_directCall;
+};
-//CBA Versioning check - close main display if using incompatible version
-private _cbaVersionAr = getArray (configFile >> "CfgPatches" >> "cba_main" >> "versionAr");
+///////////////
+// Check addons
+///////////////
+private _cfgPatches = configFile >> "CfgPatches";
+private _mainVersion = getText (_cfgPatches >> "ace_main" >> "versionStr");
+private _mainSource = configSourceMod (_cfgPatches >> "ace_main");
+
+// CBA Versioning check - close main display if using incompatible version
+private _cbaVersionAr = getArray (_cfgPatches >> "cba_main" >> "versionAr");
private _cbaRequiredAr = getArray (configFile >> "CfgSettings" >> "CBA" >> "Versioning" >> "ACE" >> "dependencies" >> "CBA") select 1;
private _cbaVersionStr = _cbaVersionAr joinString ".";
@@ -31,53 +36,62 @@ private _cbaRequiredStr = _cbaRequiredAr joinString ".";
INFO_3("ACE is version %1 - CBA is version %2 (min required %3)",_mainVersion,_cbaVersionStr,_cbaRequiredStr);
-if ([_cbaRequiredAr, _cbaVersionAr] call cba_versioning_fnc_version_compare) then {
+if ([_cbaRequiredAr, _cbaVersionAr] call CBA_versioning_fnc_version_compare) then {
private _errorMsg = format ["CBA version %1 is outdated (required %2)", _cbaVersionStr, _cbaRequiredStr];
ERROR(_errorMsg);
+
if (hasInterface) then {
- ["[ACE] ERROR", _errorMsg, {findDisplay 46 closeDisplay 0}] call FUNC(errorMessage);
+ ["[ACE] ERROR", _errorMsg] call FUNC(errorMessage);
};
};
-//private _addons = activatedAddons; // broken with High-Command module, see #2134
-private _addons = (cba_common_addons select {(_x select [0,4]) == "ace_"}) apply {toLowerANSI _x};
+//private _addons = activatedAddons; // Broken with High-Command module, see #2134
+private _addons = (CBA_common_addons select {(_x select [0, 4]) == "ace_"}) apply {toLowerANSI _x};
+
private _oldAddons = [];
private _oldSources = [];
private _oldCompats = [];
+
{
private _addonCfg = configFile >> "CfgPatches" >> _x;
private _addonVersion = getText (_addonCfg >> "versionStr");
+
if (_addonVersion != _mainVersion) then {
private _addonSource = configSourceMod _addonCfg;
+
_oldSources pushBackUnique _addonSource;
+
+ // Check ACE install
call FUNC(checkFiles_diagnoseACE);
+ // Don't block game if it's just an old compat pbo
if ((_x select [0, 10]) != "ace_compat") then {
- if (hasInterface) then {
- _oldAddons pushBack _x;
- };
+ _oldAddons pushBack _x;
} else {
- _oldCompats pushBack [_x, _addonVersion]; // Don't block game if it's just an old compat pbo
+ _oldCompats pushBack [_x, _addonVersion];
};
};
} forEach _addons;
if (_oldAddons isNotEqualTo []) then {
- _oldAddons = _oldAddons apply { format ["%1.pbo", _x] };
- private _errorMsg = "";
- if (count _oldAddons > 3) then {
- _errorMsg = format ["The following files are outdated: %1, and %2 more.
ACE Main version is %3 from %4.
Loaded mods with outdated ACE files: %5", (_oldAddons select [0, 3]) joinString ", ", (count _oldAddons) -3, _mainVersion, _mainSource, (_oldSources joinString ", ")];
+ _oldAddons = _oldAddons apply {format ["%1.pbo", _x]};
+
+ private _errorMsg = if (count _oldAddons > 3) then {
+ format ["The following files are outdated: %1, and %2 more.
ACE Main version is %3 from %4.
Loaded mods with outdated ACE files: %5", (_oldAddons select [0, 3]) joinString ", ", (count _oldAddons) - 3, _mainVersion, _mainSource, _oldSources joinString ", "];
} else {
- _errorMsg = format ["The following files are outdated: %1.
ACE Main version is %2 from %3.
Loaded mods with outdated ACE files: %4", (_oldAddons) joinString ", ", _mainVersion, _mainSource, (_oldSources) joinString ", "];
+ format ["The following files are outdated: %1.
ACE Main version is %2 from %3.
Loaded mods with outdated ACE files: %4", _oldAddons joinString ", ", _mainVersion, _mainSource, _oldSources joinString ", "];
};
+
if (hasInterface) then {
- ["[ACE] ERROR", _errorMsg, {findDisplay 46 closeDisplay 0}] call FUNC(errorMessage);
+ ["[ACE] ERROR", _errorMsg] call FUNC(errorMessage);
};
+
ERROR(_errorMsg);
};
if (_oldCompats isNotEqualTo []) then {
_oldCompats = _oldCompats apply {format ["%1 (%2)", _x select 0, _x select 1]};
+
[{
// Lasts for ~10 seconds
ERROR_WITH_TITLE_3("The following ACE compatiblity PBOs are outdated","%1. ACE Main version is %2 from %3.",_this select 0,_this select 1,_this select 2);
@@ -85,9 +99,10 @@ if (_oldCompats isNotEqualTo []) then {
};
///////////////
-// check extensions
+// Check extensions
///////////////
private _platform = toLowerANSI (productVersion select 6);
+
if (!isServer && {_platform in ["linux", "osx"]}) then {
// Linux and OSX client ports do not support extensions at all
INFO("Operating system does not support extensions");
@@ -101,8 +116,10 @@ if (!isServer && {_platform in ["linux", "osx"]}) then {
if ((_isWindows || _isLinux) && {_isClient || _isServer}) then {
private _versionEx = _extension callExtension "version";
+
if (_versionEx == "") then {
private _extensionFile = _extension;
+
if (productVersion select 7 == "x64") then {
_extensionFile = format ["%1_x64", _extensionFile];
};
@@ -114,7 +131,7 @@ if (!isServer && {_platform in ["linux", "osx"]}) then {
ERROR(_errorMsg);
if (hasInterface) then {
- ["[ACE] ERROR", _errorMsg, {findDisplay 46 closeDisplay 0}] call FUNC(errorMessage);
+ ["[ACE] ERROR", _errorMsg] call FUNC(errorMessage);
};
} else {
// Print the current extension version
@@ -123,54 +140,66 @@ if (!isServer && {_platform in ["linux", "osx"]}) then {
};
} forEach ("true" configClasses (configFile >> "ACE_Extensions"));
};
+
if (isArray (configFile >> "ACE_Extensions" >> "extensions")) then {
WARNING("extensions[] array no longer supported");
};
///////////////
-// check server version/addons
+// Check server version/addons
///////////////
if (isMultiplayer) then {
- // don't check optional addons
- _addons = _addons select {getNumber (configFile >> "CfgPatches" >> _x >> "ACE_isOptional") != 1};
+ // Don't check optional addons
+ _addons = _addons select {getNumber (_cfgPatches >> _x >> "ACE_isOptional") != 1};
if (isServer) then {
- // send servers version of ACE to all clients
- GVAR(ServerVersion) = _mainVersion;
- GVAR(ServerAddons) = _addons;
- publicVariable QGVAR(ServerVersion);
- publicVariable QGVAR(ServerAddons);
+ // Send server's version of ACE to all clients
+ GVAR(serverVersion) = _mainVersion;
+ GVAR(serverAddons) = _addons;
+ GVAR(serverSource) = _mainSource;
+
+ publicVariable QGVAR(serverVersion);
+ publicVariable QGVAR(serverAddons);
+ publicVariable QGVAR(serverSource);
} else {
- // clients have to wait for the variables
- [{
- if (isNil QGVAR(ServerVersion) || isNil QGVAR(ServerAddons)) exitWith {};
+ GVAR(clientVersion) = _version;
+ GVAR(clientAddons) = _addons;
- (_this select 0) params ["_mainVersion", "_addons"];
-
- if (_mainVersion != GVAR(ServerVersion)) then {
- private _errorMsg = format ["Client/Server Version Mismatch. Server: %1, Client: %2.", GVAR(ServerVersion), _mainVersion];
+ private _fnc_check = {
+ if (GVAR(clientVersion) != GVAR(serverVersion)) then {
+ private _errorMsg = format ["Client/Server Version Mismatch. Server: %1, Client: %2. Server modDir: %3", GVAR(serverVersion), GVAR(clientVersion), GVAR(serverSource)];
+ // Check ACE install
call FUNC(checkFiles_diagnoseACE);
+
ERROR(_errorMsg);
if (hasInterface) then {
- ["[ACE] ERROR", _errorMsg, {findDisplay 46 closeDisplay 0}] call FUNC(errorMessage);
+ ["[ACE] ERROR", _errorMsg] call FUNC(errorMessage);
};
};
- _addons = _addons - GVAR(ServerAddons);
+ private _addons = GVAR(clientAddons) - GVAR(serverAddons);
+
if (_addons isNotEqualTo []) then {
- private _errorMsg = format ["Client/Server Addon Mismatch. Client has extra addons: %1.",_addons];
+ private _errorMsg = format ["Client/Server Addon Mismatch. Client has additional addons: %1. Server modDir: %2", _addons, GVAR(serverSource)];
+ // Check ACE install
call FUNC(checkFiles_diagnoseACE);
+
ERROR(_errorMsg);
if (hasInterface) then {
- ["[ACE] ERROR", _errorMsg, {findDisplay 46 closeDisplay 0}] call FUNC(errorMessage);
+ ["[ACE] ERROR", _errorMsg] call FUNC(errorMessage);
};
};
+ };
- [_this select 1] call CBA_fnc_removePerFrameHandler;
- }, 1, [_mainVersion,_addons]] call CBA_fnc_addPerFrameHandler;
+ // Clients have to wait for the variables
+ if (isNil QGVAR(serverVersion) || isNil QGVAR(serverAddons)) then {
+ GVAR(serverVersion) addPublicVariableEventHandler _fnc_check;
+ } else {
+ call _fnc_check;
+ };
};
};
diff --git a/addons/common/functions/fnc_checkFiles_diagnoseACE.sqf b/addons/common/functions/fnc_checkFiles_diagnoseACE.sqf
index 5b7f80198b..f9271ca213 100644
--- a/addons/common/functions/fnc_checkFiles_diagnoseACE.sqf
+++ b/addons/common/functions/fnc_checkFiles_diagnoseACE.sqf
@@ -1,13 +1,13 @@
#include "..\script_component.hpp"
/*
* Author: PabstMirror
- * Diagnose ACE install problems, this will only be called if there is a known problem
+ * Diagnoses ACE install problems, this will only be called if there is a known problem.
*
* Arguments:
* None
*
* Return Value:
- * None
+ * ACE addons' WS IDs
*
* Example:
* [] call ace_common_fnc_checkFiles_diagnoseACE
@@ -16,43 +16,59 @@
*/
// Only run once
-if (missionNameSpace getVariable [QGVAR(checkFiles_diagnoseACE), false]) exitWith {};
+if (missionNameSpace getVariable [QGVAR(checkFiles_diagnoseACE), false]) exitWith {
+ createHashMap // return
+};
+
GVAR(checkFiles_diagnoseACE) = true;
-private _addons = cba_common_addons select {(_x select [0,4]) == "ace_"};
+private _addons = CBA_common_addons select {(_x select [0, 4]) == "ace_"};
private _cfgPatches = configFile >> "CfgPatches";
private _allMods = createHashMap;
+private _getLoadedModsInfo = getLoadedModsInfo;
-// Check ACE_ADDONs are in expected mod DIR
+// Check if ACE_ADDONs are in expected mod DIR
{
- private _cfg = (_cfgPatches >> _x);
+ private _cfg = _cfgPatches >> _x;
private _actualModDir = configSourceMod _cfg;
private _expectedModDir = getText (_cfg >> "ACE_expectedModDir");
- if (_expectedModDir == "") then { _expectedModDir = "@ace" };
+
+ if (_expectedModDir == "") then {
+ _expectedModDir = "@ace";
+ };
+
private _expectedSteamID = getText (_cfg >> "ACE_expectedSteamID");
- if (_expectedSteamID == "") then { _expectedSteamID = "463939057" };
+
+ if (_expectedSteamID == "") then {
+ _expectedSteamID = "463939057"
+ };
(_allMods getOrDefault [_actualModDir, [], true]) pushBackUnique _expectedSteamID;
+
if (_actualModDir != _expectedModDir) then {
- private _errorMsg = format ["%1 loading from unexpected modDir [%2]",_x,_actualModDir];
+ private _errorMsg = format ["%1 loading from unexpected modDir [%2]", _x, _actualModDir];
systemChat _errorMsg;
WARNING_1("%1",_errorMsg);
};
} forEach _addons;
-// Check all ACE ModDirs have expected steam WS ID
+// Check if all ACE ModDirs have expected steam WS ID
{
private _modDir = _x;
- if ((count _y) != 1) then { ERROR_2("Unexpected multiple steamIDs %1 - %2",_modDir,_y) };
- private _expectedSteamID = _y # 0;
- private _index = getLoadedModsInfo findIf {_x#1 == _modDir};
- (getLoadedModsInfo param [_index, []]) params [["_modName", "$Error$"], "", "", "", "", "", "", ["_actualID", ""]];
+
+ if (count _y != 1) then {
+ ERROR_2("Unexpected multiple steamIDs %1 - %2",_modDir,_y);
+ };
+
+ private _expectedSteamID = _y select 0;
+ private _index = _getLoadedModsInfo findIf {_x select 1 == _modDir};
+ (_getLoadedModsInfo param [_index, []]) params [["_modName", "$Error$"], "", "", "", "", "", "", ["_actualID", ""]];
if (_actualID != _expectedSteamID) then {
- private _errorMsg = format ["%1 [%2] unexpected workshopID [%3]",_modDir,_modName,_actualID];
+ private _errorMsg = format ["%1 [%2] unexpected workshopID [%3]", _modDir, _modName, _actualID];
systemChat _errorMsg;
WARNING_1("%1",_errorMsg);
};
} forEach _allMods;
-_allMods
+_allMods // return
diff --git a/addons/common/functions/fnc_checkPBOs.sqf b/addons/common/functions/fnc_checkPBOs.sqf
index cb192c6667..4f2e3f4fa6 100644
--- a/addons/common/functions/fnc_checkPBOs.sqf
+++ b/addons/common/functions/fnc_checkPBOs.sqf
@@ -1,6 +1,6 @@
#include "..\script_component.hpp"
/*
- * Author: commy2
+ * Author: commy2, johnb43
* Used to execute the checkPBOs module without placing the module. Don't use this together with the module.
* Checks PBO versions and compares to the one running on server.
*
@@ -9,8 +9,8 @@
* 0 = Warn once
* 1 = Warn permanently
* 2 = Kick
- * 1: Check all PBOs? (default: false)
- * 2: Whitelist (default: "")
+ * 1: Check all PBOs? (default: false)
+ * 2: Whitelist (default: "")
*
* Return Value:
* None
@@ -24,7 +24,7 @@
params ["_mode", ["_checkAll", false], ["_whitelist", "", [""]]];
TRACE_3("params",_mode,_checkAll,_whitelist);
-//lowercase and convert whiteList String into array of strings:
+// Lowercase and convert whiteList string into array of strings
_whitelist = toLowerANSI _whitelist;
_whitelist = _whitelist splitString "[,""']";
TRACE_1("Array",_whitelist);
@@ -32,75 +32,67 @@ TRACE_1("Array",_whitelist);
ACE_Version_CheckAll = _checkAll;
ACE_Version_Whitelist = _whitelist;
-if (!_checkAll) exitWith {}; //ACE is checked by FUNC(checkFiles)
+// ACE is checked by FUNC(checkFiles)
+if (!_checkAll) exitWith {};
if (!isServer) then {
- [{
- if (isNil "ACE_Version_ClientErrors") exitWith {};
+ ["ace_versioning_clientCheckDone", {
+ // Don't let this event get triggered again
+ [_thisType, _thisId] call CBA_fnc_removeEventHandler;
- ACE_Version_ClientErrors params ["_missingAddon", "_missingAddonServer", "_oldVersionClient", "_oldVersionServer"];
+ params ["_clientErrors"];
+ _clientErrors params ["_missingAddonClient", "_additionalAddonClient", "_olderVersionClient", "_newerVersionClient"];
+ _thisArgs params ["_mode"];
- (_this select 0) params ["_mode", "_checkAll", "_whitelist"];
+ // Display error message(s)
+ if (_missingAddonClient || {_additionalAddonClient} || {_olderVersionClient} || {_newerVersionClient}) then {
+ private _errorMsg = "[ACE] Version mismatch:
";
+ private _error = [];
- // Display error message.
- if (_missingAddon || {_missingAddonServer} || {_oldVersionClient} || {_oldVersionServer}) then {
- private _text = "[ACE] Version mismatch:
";
- private _error = format ["ACE version mismatch: %1: ", profileName];
-
- if (_missingAddon) then {
- _text = _text + "Detected missing addon on client
";
- _error = _error + "Missing file(s); ";
- };
- if (_missingAddonServer) then {
- _text = _text + "Detected missing addon on server
";
- _error = _error + "Additional file(s); ";
- };
- if (_oldVersionClient) then {
- _text = _text + "Detected old client version
";
- _error = _error + "Older version; ";
- };
- if (_oldVersionServer) then {
- _text = _text + "Detected old server version
";
- _error = _error + "Newer version; ";
+ if (_missingAddonClient) then {
+ _errorMsg = _errorMsg + "Detected missing addon on client
";
+ _error pushBack "Missing file(s)";
};
- //[QGVAR(systemChatGlobal), _error] call CBA_fnc_globalEvent;
+ if (_additionalAddonClient) then {
+ _errorMsg = _errorMsg + "Detected additional addon on client
";
+ _error pushBack "Additional file(s)";
+ };
- ERROR(_error);
+ if (_olderVersionClient) then {
+ _errorMsg = _errorMsg + "Detected older client version
";
+ _error pushBack "Older version";
+ };
+ if (_newerVersionClient) then {
+ _errorMsg = _errorMsg + "Detected newer client version
";
+ _error pushBack "Newer version";
+ };
+
+ ERROR_2("[ACE] Version mismatch: %1: %2",profileName,_error joinString ", ");
+
+ _errorMsg = parseText format ["%1", _errorMsg];
+
+ // Warn
if (_mode < 2) then {
- _text = composeText [lineBreak, parseText format ["%1", _text]];
-
private _rscLayer = "ACE_RscErrorHint" call BIS_fnc_rscLayer;
_rscLayer cutRsc ["ACE_RscErrorHint", "PLAIN", 0, true];
- disableSerialization;
- private _ctrlHint = uiNamespace getVariable "ACE_ctrlErrorHint";
- _ctrlHint ctrlSetStructuredText _text;
+ (uiNamespace getVariable "ACE_ctrlErrorHint") ctrlSetStructuredText composeText [lineBreak, _errorMsg];
if (_mode == 0) then {
[{
- params ["_rscLayer"];
- TRACE_2("Hiding Error message after 10 seconds",time,_rscLayer);
- _rscLayer cutFadeOut 0.2;
- }, [_rscLayer], 10] call CBA_fnc_waitAndExecute;
+ TRACE_2("Hiding Error message after 10 seconds",time,_this);
+ _this cutFadeOut 0.2;
+ }, _rscLayer, 10] call CBA_fnc_waitAndExecute;
};
- };
-
- if (_mode == 2) then {
- [{alive player}, { // To be able to show list if using checkAll
- params ["_text"];
- TRACE_2("Player is alive, showing msg and exiting",time,_text);
- _text = composeText [parseText format ["%1", _text]];
- ["[ACE] ERROR", _text, {findDisplay 46 closeDisplay 0}] call FUNC(errorMessage);
- }, [_text]] call CBA_fnc_waitUntilAndExecute;
+ } else {
+ // Kick
+ ["[ACE] ERROR", composeText [_errorMsg]] call FUNC(errorMessage);
};
};
-
- [_this select 1] call CBA_fnc_removePerFrameHandler;
- }, 1, [_mode, _checkAll, _whitelist]] call CBA_fnc_addPerFrameHandler;
+ }, [_mode]] call CBA_fnc_addEventHandlerArgs;
};
-if (_checkAll) then {
- 0 spawn COMPILE_FILE(scripts\checkVersionNumber); // @todo
-};
+// Check file version numbers
+[_whitelist] call FUNC(checkVersionNumber);
diff --git a/addons/common/functions/fnc_checkVersionNumber.sqf b/addons/common/functions/fnc_checkVersionNumber.sqf
new file mode 100644
index 0000000000..a286129917
--- /dev/null
+++ b/addons/common/functions/fnc_checkVersionNumber.sqf
@@ -0,0 +1,161 @@
+#include "..\script_component.hpp"
+/*
+ * Author: commy2, johnb43
+ * Compares version numbers from loaded addons.
+ *
+ * Arguments:
+ * 0: Lowercase addon whitelist (default: missionNamespace getVariable ["ACE_Version_Whitelist", []])
+ *
+ * Return Value:
+ * None
+ *
+ * Example:
+ * call ace_common_fnc_checkVersionNumber
+ *
+ * Public: No
+ */
+
+// Don't execute in scheduled environment
+if (canSuspend) exitWith {
+ [FUNC(checkVersionNumber), _this] call CBA_fnc_directCall;
+};
+
+params [["_whitelist", missionNamespace getVariable ["ACE_Version_Whitelist", []]]];
+
+private _files = CBA_common_addons select {
+ (_x select [0, 3] != "a3_") &&
+ {_x select [0, 4] != "ace_"} &&
+ {!((toLowerANSI _x) in _whitelist)}
+};
+
+private _cfgPatches = configFile >> "CfgPatches";
+private _versions = [];
+
+{
+ (getText (_cfgPatches >> _x >> "version") splitString ".") params [["_major", "0"], ["_minor", "0"]];
+ private _version = parseNumber _major + parseNumber _minor / 100;
+ _versions pushBack _version;
+} forEach _files;
+
+if (isServer) exitWith {
+ ACE_Version_ServerVersions = [_files, _versions];
+ publicVariable "ACE_Version_ServerVersions";
+
+ // Raise event when done
+ ["ace_versioning_serverCheckDone", [+ACE_Version_ServerVersions]] call CBA_fnc_localEvent;
+};
+
+// Begin client version check
+ACE_Version_ClientVersions = [_files, _versions];
+
+private _fnc_check = {
+ ACE_Version_ClientVersions params [["_files", []], ["_versions", []]];
+ ACE_Version_ServerVersions params [["_serverFiles", []], ["_serverVersions", []]];
+
+ // Compare client and server files and versions
+ private _client = profileName;
+ private _missingAddonsClient = [];
+ private _olderVersionsClient = [];
+ private _newerVersionsClient = [];
+
+ {
+ private _serverVersion = _serverVersions select _forEachIndex;
+
+ private _index = _files find _x;
+
+ if (_index == -1) then {
+ if (_x != "ace_server") then {
+ _missingAddonsClient pushBack _x;
+ };
+ } else {
+ private _clientVersion = _versions select _index;
+
+ if (_clientVersion < _serverVersion) then {
+ _olderVersionsClient pushBack [_x, _clientVersion, _serverVersion];
+ };
+
+ if (_clientVersion > _serverVersion) then {
+ _newerVersionsClient pushBack [_x, _clientVersion, _serverVersion];
+ };
+ };
+ } forEach _serverFiles;
+
+ // Find client files which the server doesn't have
+ private _additionalAddonsClient = _files select {!(_x in _serverFiles)};
+
+ // Check for client missing addons, server missing addons, client outdated addons and server outdated addons
+ private _clientErrors = [];
+
+ #define DISPLAY_NUMBER_ADDONS (10 + 1) // +1 to account for header
+
+ {
+ _x params ["_items", "_string"];
+
+ // Check if something is either missing or outdated
+ private _isMissingItems = _items isNotEqualTo [];
+
+ if (_isMissingItems) then {
+ // Generate error message
+ private _errorLog = +_items;
+ private _header = format ["[ACE] %1: ERROR %2 addon(s): ", _client, _string];
+
+ // Don't display all missing items, as they are logged
+ private _errorMsg = _header + ((_errorLog select [0, DISPLAY_NUMBER_ADDONS]) joinString ", ");
+ _errorLog = _header + (_errorLog joinString ", ");
+
+ private _count = count _items;
+
+ if (_count > DISPLAY_NUMBER_ADDONS) then {
+ _errorMsg = _errorMsg + format [", and %1 more.", _count - DISPLAY_NUMBER_ADDONS];
+ };
+
+ // Wait until in briefing screen
+ [{
+ getClientStateNumber >= 9 // "BRIEFING SHOWN"
+ }, {
+ params ["_errorLog", "_errorMsg"];
+
+ // Log and display error messages
+ diag_log text _errorLog;
+ [QGVAR(serverLog), _errorLog] call CBA_fnc_serverEvent;
+ [QGVAR(systemChatGlobal), _errorMsg] call CBA_fnc_globalEvent;
+
+ // Wait until after map screen
+ [{
+ !isNull (call BIS_fnc_displayMission)
+ }, {
+ params ["_errorMsg", "_timeOut"];
+
+ // If the briefing screen was shown for less than 5 seconds, display the error message again, but locally
+ if (_timeOut < CBA_missionTime) exitWith {};
+
+ // Make sure systemChat is ready by waiting a bit
+ [{
+ systemChat _this;
+ }, _errorMsg, 1] call CBA_fnc_waitAndExecute;
+ }, [_errorMsg, CBA_missionTime + 5]] call CBA_fnc_waitUntilAndExecute;
+ }, [_errorLog, _errorMsg]] call CBA_fnc_waitUntilAndExecute;
+ };
+
+ _clientErrors pushBack _isMissingItems;
+ } forEach [
+ [_missingAddonsClient, "client missing"],
+ [_additionalAddonsClient, "client additional"],
+ [_olderVersionsClient, "older client"],
+ [_newerVersionsClient, "newer client"]
+ ];
+
+ TRACE_4("",_missingAddonsClient,_additionalAddonsClient,_olderVersionsClient,_newerVersionsClient);
+
+ ACE_Version_ClientErrors = _clientErrors;
+
+ // Raise event when done
+ ["ace_versioning_clientCheckDone", [+ACE_Version_ClientErrors]] call CBA_fnc_localEvent;
+};
+
+// Wait for server to send the servers files and version numbers
+if (isNil "ACE_Version_ServerVersions") then {
+ ACE_Version_ServerVersions addPublicVariableEventHandler _fnc_check;
+} else {
+ call _fnc_check;
+};
diff --git a/addons/common/functions/fnc_errorMessage.sqf b/addons/common/functions/fnc_errorMessage.sqf
index 72344299f3..e98a5baf8f 100644
--- a/addons/common/functions/fnc_errorMessage.sqf
+++ b/addons/common/functions/fnc_errorMessage.sqf
@@ -1,147 +1,141 @@
#include "..\script_component.hpp"
+#include "\a3\ui_f\hpp\defineResincl.inc"
+#include "\a3\ui_f\hpp\defineDIKCodes.inc"
/*
- * Author: commy2, based on BIS_fnc_errorMsg and BIS_fnc_guiMessage by Karel Moricky (BI)
- * Stops simulation and opens a textbox with error message.
+ * Author: commy2, johnb43, based on BIS_fnc_errorMsg and BIS_fnc_guiMessage by Karel Moricky (BI)
+ * Opens a textbox with an error message, used for PBO checking.
*
* Arguments:
- * ?
+ * 0: Header
+ * 1: Text
*
* Return Value:
* None
*
* Example:
- * call ace_common_fnc_errorMessage
+ * ["[ACE] ERROR", "Test"] call ace_common_fnc_errorMessage
*
* Public: No
*/
-disableSerialization;
+// Force stop any loading screens
endLoadingScreen;
-// no message without player possible
+// No message without interface possible
if (!hasInterface) exitWith {};
-// wait for display
-if (isNull (call BIS_fnc_displayMission)) exitWith {
- [{
- if (isNull (call BIS_fnc_displayMission)) exitWith {};
+[{
+ !isNull (call BIS_fnc_displayMission)
+}, {
+ params ["_textHeader", "_textMessage"];
- (_this select 0) call FUNC(errorMessage);
- [_this select 1] call CBA_fnc_removePerFrameHandler;
+ disableSerialization;
- }, 1, _this] call CBA_fnc_addPerFrameHandler;
-};
+ // Use curator display if present
+ private _curatorDisplay = findDisplay 312;
-params ["_textHeader", "_textMessage", ["_onOK", {}], ["_onCancel", {}]];
+ private _mainDisplay = if (!isNull _curatorDisplay) then {
+ _curatorDisplay
+ } else {
+ call BIS_fnc_displayMission
+ };
-if (_textMessage isEqualType "") then {
- _textMessage = parseText _textMessage;
-};
+ if (_textMessage isEqualType "") then {
+ _textMessage = parseText _textMessage;
+ };
-ARR_SELECT(_this,4,call BIS_fnc_displayMission) createDisplay "RscDisplayCommonMessagePause";
+ private _display = _mainDisplay createDisplay "RscDisplayCommonMessagePause";
-private _display = uiNamespace getVariable "RscDisplayCommonMessage_display";
-private _ctrlRscMessageBox = _display displayCtrl 2351;
-private _ctrlBcgCommonTop = _display displayCtrl 235100;
-private _ctrlBcgCommon = _display displayCtrl 235101;
-private _ctrlText = _display displayCtrl 235102;
-private _ctrlBackgroundButtonOK = _display displayCtrl 235103;
-private _ctrlBackgroundButtonMiddle = _display displayCtrl 235104;
-private _ctrlBackgroundButtonCancel = _display displayCtrl 235105;
-private _ctrlButtonOK = _display displayCtrl 235106;
-private _ctrlButtonCancel = _display displayCtrl 235107;
+ if (isNull _display) exitWith {};
-_ctrlBcgCommonTop ctrlSetText _textHeader;
+ private _ctrlRscMessageBox = _display displayCtrl 2351;
+ private _ctrlBcgCommonTop = _display displayCtrl 235100;
+ private _ctrlBcgCommon = _display displayCtrl 235101;
+ private _ctrlText = _display displayCtrl 235102;
+ private _ctrlBackgroundButtonOK = _display displayCtrl 235103;
+ private _ctrlBackgroundButtonMiddle = _display displayCtrl 235104;
+ private _ctrlBackgroundButtonCancel = _display displayCtrl 235105;
+ private _ctrlButtonOK = _display displayCtrl 235106;
+ private _ctrlButtonCancel = _display displayCtrl 235107;
-private _ctrlButtonOKPos = ctrlPosition _ctrlButtonOK;
-private _ctrlBcgCommonPos = ctrlPosition _ctrlBcgCommon;
-private _bottomSpaceY = (_ctrlButtonOKPos select 1) - ((_ctrlBcgCommonPos select 1) + (_ctrlBcgCommonPos select 3));
+ _ctrlBcgCommonTop ctrlSetText _textHeader;
-private _ctrlTextPos = ctrlPosition _ctrlText;
-private _marginX = (_ctrlTextPos select 0) - (_ctrlBcgCommonPos select 0);
-private _marginY = (_ctrlTextPos select 1) - (_ctrlBcgCommonPos select 1);
+ private _ctrlButtonOKPos = ctrlPosition _ctrlButtonOK;
+ private _ctrlBcgCommonPos = ctrlPosition _ctrlBcgCommon;
+ private _bottomSpaceY = (_ctrlButtonOKPos select 1) - ((_ctrlBcgCommonPos select 1) + (_ctrlBcgCommonPos select 3));
-_ctrlText ctrlSetStructuredText _textMessage;
-private _ctrlTextPosH = ctrlTextHeight _ctrlText;
+ private _ctrlTextPos = ctrlPosition _ctrlText;
+ private _marginX = (_ctrlTextPos select 0) - (_ctrlBcgCommonPos select 0);
+ private _marginY = (_ctrlTextPos select 1) - (_ctrlBcgCommonPos select 1);
-_ctrlBcgCommon ctrlSetPosition [
- _ctrlBcgCommonPos select 0,
- _ctrlBcgCommonPos select 1,
- _ctrlBcgCommonPos select 2,
- _ctrlTextPosH + _marginY * 2
-];
-_ctrlBcgCommon ctrlCommit 0;
+ _ctrlText ctrlSetStructuredText _textMessage;
+ private _ctrlTextPosH = ctrlTextHeight _ctrlText;
-_ctrlText ctrlSetPosition [
- (_ctrlBcgCommonPos select 0) + _marginX,
- (_ctrlBcgCommonPos select 1) + _marginY,
- (_ctrlBcgCommonPos select 2) - _marginX * 2,
- _ctrlTextPosH
-];
-_ctrlText ctrlCommit 0;
+ _ctrlBcgCommon ctrlSetPosition [
+ _ctrlBcgCommonPos select 0,
+ _ctrlBcgCommonPos select 1,
+ _ctrlBcgCommonPos select 2,
+ _ctrlTextPosH + _marginY * 2
+ ];
+ _ctrlBcgCommon ctrlCommit 0;
-private _bottomPosY = (_ctrlBcgCommonPos select 1) + _ctrlTextPosH + (_marginY * 2) + _bottomSpaceY;
+ _ctrlText ctrlSetPosition [
+ (_ctrlBcgCommonPos select 0) + _marginX,
+ (_ctrlBcgCommonPos select 1) + _marginY,
+ (_ctrlBcgCommonPos select 2) - _marginX * 2,
+ _ctrlTextPosH
+ ];
+ _ctrlText ctrlCommit 0;
-{
- private _xPos = ctrlPosition _x;
+ private _bottomPosY = (_ctrlBcgCommonPos select 1) + _ctrlTextPosH + (_marginY * 2) + _bottomSpaceY;
- _xPos set [1, _bottomPosY];
- _x ctrlSetPosition _xPos;
- _x ctrlCommit 0;
-} forEach [
- _ctrlBackgroundButtonOK,
- _ctrlBackgroundButtonMiddle,
- _ctrlBackgroundButtonCancel,
- _ctrlButtonOK,
- _ctrlButtonCancel
-];
+ {
+ private _xPos = ctrlPosition _x;
-private _ctrlRscMessageBoxPos = ctrlPosition _ctrlRscMessageBox;
-private _ctrlRscMessageBoxPosH = _bottomPosY + (_ctrlButtonOKPos select 3);
+ _xPos set [1, _bottomPosY];
+ _x ctrlSetPosition _xPos;
+ _x ctrlCommit 0;
+ } forEach [
+ _ctrlBackgroundButtonOK,
+ _ctrlBackgroundButtonMiddle,
+ _ctrlBackgroundButtonCancel,
+ _ctrlButtonOK,
+ _ctrlButtonCancel
+ ];
-_ctrlRscMessageBox ctrlSetPosition [
- 0.5 - (_ctrlBcgCommonPos select 2) / 2,
- 0.5 - _ctrlRscMessageBoxPosH / 2,
- (_ctrlBcgCommonPos select 2) + 0.5,
- _ctrlRscMessageBoxPosH
-];
+ private _ctrlRscMessageBoxPos = ctrlPosition _ctrlRscMessageBox;
+ private _ctrlRscMessageBoxPosH = _bottomPosY + (_ctrlButtonOKPos select 3);
-_ctrlRscMessageBox ctrlEnable true;
-_ctrlRscMessageBox ctrlCommit 0;
+ _ctrlRscMessageBox ctrlSetPosition [
+ 0.5 - (_ctrlBcgCommonPos select 2) / 2,
+ 0.5 - _ctrlRscMessageBoxPosH / 2,
+ (_ctrlBcgCommonPos select 2) + 0.5,
+ _ctrlRscMessageBoxPosH
+ ];
-if (_onOK isEqualTo {}) then {
- _ctrlButtonOK ctrlEnable false;
- _ctrlButtonOK ctrlSetFade 0;
- _ctrlButtonOK ctrlSetText "";
- _ctrlButtonOK ctrlCommit 0;
-} else {
+ _ctrlRscMessageBox ctrlEnable true;
+ _ctrlRscMessageBox ctrlCommit 0;
+
+ // Enable ok button
_ctrlButtonOK ctrlEnable true;
_ctrlButtonOK ctrlSetFade 0;
_ctrlButtonOK ctrlSetText localize "STR_DISP_OK";
_ctrlButtonOK ctrlCommit 0;
ctrlSetFocus _ctrlButtonOK;
-};
-if (_onCancel isEqualTo {}) then {
+ // Disable cancel button
_ctrlButtonCancel ctrlEnable false;
_ctrlButtonCancel ctrlSetFade 0;
_ctrlButtonCancel ctrlSetText "";
_ctrlButtonCancel ctrlCommit 0;
-} else {
- _ctrlButtonCancel ctrlEnable true;
- _ctrlButtonCancel ctrlSetFade 0;
- _ctrlButtonCancel ctrlSetText localize "STR_DISP_CANCEL";
- _ctrlButtonCancel ctrlCommit 0;
- ctrlSetFocus _ctrlButtonCancel;
-};
+ _ctrlButtonOK ctrlAddEventHandler ["ButtonClick", {(ctrlParent (_this select 0)) closeDisplay IDC_OK; true}];
-_ctrlButtonOK ctrlAddEventHandler ["ButtonClick", {(ctrlParent (_this select 0)) closeDisplay 1; true}];
-_ctrlButtonCancel ctrlAddEventHandler ["ButtonClick", {(ctrlParent (_this select 0)) closeDisplay 2; true}];
+ // Intercept all keystrokes except the enter keys
+ _display displayAddEventHandler ["KeyDown", {!((_this select 1) in [DIK_RETURN, DIK_NUMPADENTER])}];
-GVAR(errorOnOK) = _onOK;
-GVAR(errorOnCancel) = _onCancel;
-
-_display displayAddEventHandler ["Unload", {call ([{}, GVAR(errorOnOK), GVAR(errorOnCancel)] select (_this select 1))}];
-_display displayAddEventHandler ["KeyDown", {_this select 1 == 1}];
+ // Close curator and mission displays (because of the message display, it doesn't quit the mission yet)
+ findDisplay 312 closeDisplay 0;
+ findDisplay 46 closeDisplay 0;
+}, _this] call CBA_fnc_waitUntilAndExecute;
diff --git a/addons/common/scripts/checkVersionNumber.sqf b/addons/common/scripts/checkVersionNumber.sqf
deleted file mode 100644
index 3ed51120b6..0000000000
--- a/addons/common/scripts/checkVersionNumber.sqf
+++ /dev/null
@@ -1,160 +0,0 @@
-// by commy2
-#include "..\script_component.hpp"
-
-private _aceWhitelist = missionNamespace getVariable ["ACE_Version_Whitelist", []];
-private _files = CBA_common_addons select {
- (_x select [0,3] != "a3_") &&
- {_x select [0,4] != "ace_"} &&
- {!((toLowerANSI _x) in _aceWhitelist)}
-};
-
-private _versions = [];
-{
- getText (configFile >> "CfgPatches" >> _x >> "version") splitString "." params [["_major", "0"], ["_minor", "0"]];
- private _version = parseNumber _major + parseNumber _minor/100;
- _versions set [_forEachIndex, _version];
-} forEach _files;
-
-if (isServer) then {
- ACE_Version_ServerVersions = [_files, _versions];
- publicVariable "ACE_Version_ServerVersions";
-} else {
- ACE_Version_ClientVersions = [_files, _versions];
-};
-
-// Begin client version check
-if (!isServer) then {
- // Wait for server to send the servers files and version numbers
- waitUntil {
- sleep 1;
- !isNil "ACE_Version_ClientVersions" && {!isNil "ACE_Version_ServerVersions"}
- };
-
- private _client = profileName;
-
- _files = ACE_Version_ClientVersions select 0;
- _versions = ACE_Version_ClientVersions select 1;
-
- private _serverFiles = ACE_Version_ServerVersions select 0;
- private _serverVersions = ACE_Version_ServerVersions select 1;
-
- // Compare client and server files and versions
- private _missingAddons = [];
- private _oldVersionsClient = [];
- private _oldVersionsServer = [];
- {
- private _serverVersion = _serverVersions select _forEachIndex;
-
- private _index = _files find _x;
- if (_index == -1) then {
- if (_x != "ace_server") then {_missingAddons pushBack _x;};
- } else {
-
- private _clientVersion = _versions select _index;
-
- if (_clientVersion < _serverVersion) then {
- _oldVersionsClient pushBack [_x, _clientVersion, _serverVersion];
- };
-
- if (_clientVersion > _serverVersion) then {
- _oldVersionsServer pushBack [_x, _clientVersion, _serverVersion];
- };
- };
- } forEach _serverFiles;
-
- // find client files which the server doesn't have
- private _missingAddonsServer = [];
- {
- private _index = _serverFiles find _x;
- if (_index == -1) then {
- _missingAddonsServer pushBack _x;
- }
- } forEach _files;
-
- // display and log error messages
- private _fnc_cutComma = {
- private _string = _this;
- _string = toArray _string;
-
- private _count = count _string;
- _string set [_count - 2, toArray "." select 0];
- _string set [_count - 1, -1];
- _string = _string - [-1];
-
- toString _string;
- };
-
- private _missingAddon = false;
- if (count _missingAddons > 0) then {
- _missingAddon = true;
-
- private _error = format ["[ACE] %1: ERROR client missing addon(s): ", _client];
- {
- _error = _error + format ["%1, ", _x];
-
- if (_forEachIndex > 9) exitWith {};
- } forEach _missingAddons;
-
- _error = _error call _fnc_cutComma;
-
- diag_log text _error;
- [QGVAR(systemChatGlobal), _error] call CBA_fnc_globalEvent;
- [QGVAR(serverLog), _error] call CBA_fnc_serverEvent;
- };
-
- private _missingAddonServer = false;
- if (count _missingAddonsServer > 0) then {
- _missingAddonServer = true;
-
- private _error = format ["[ACE] %1: ERROR server missing addon(s): ", _client];
- {
- _error = _error + format ["%1, ", _x];
-
- if (_forEachIndex > 9) exitWith {};
- } forEach _missingAddonsServer;
-
- _error = _error call _fnc_cutComma;
-
- diag_log text _error;
- [QGVAR(systemChatGlobal), _error] call CBA_fnc_globalEvent;
- [QGVAR(serverLog), _error] call CBA_fnc_serverEvent;
- };
-
- private _oldVersionClient = false;
- if (count _oldVersionsClient > 0) then {
- _oldVersionClient = true;
-
- private _error = format ["[ACE] %1: ERROR outdated client addon(s): ", _client];
- {
- _error = _error + format ["%1 (client: %2, server: %3), ", _x select 0, _x select 1, _x select 2];
-
- if (_forEachIndex > 9) exitWith {};
- } forEach _oldVersionsClient;
-
- _error = _error call _fnc_cutComma;
-
- diag_log text _error;
- [QGVAR(systemChatGlobal), _error] call CBA_fnc_globalEvent;
- [QGVAR(serverLog), _error] call CBA_fnc_serverEvent;
- };
-
- private _oldVersionServer = false;
- if (count _oldVersionsServer > 0) then {
- _oldVersionServer = true;
-
- private _error = format ["[ACE] %1: ERROR outdated server addon(s): ", _client];
- {
- _error = _error + format ["%1 (client: %2, server: %3), ", _x select 0, _x select 1, _x select 2];
-
- if (_forEachIndex > 9) exitWith {};
- } forEach _oldVersionsServer;
-
- _error = _error call _fnc_cutComma;
-
- diag_log text _error;
- [QGVAR(systemChatGlobal), _error] call CBA_fnc_globalEvent;
- [QGVAR(serverLog), _error] call CBA_fnc_serverEvent;
- };
-
- ACE_Version_ClientErrors = [_missingAddon, _missingAddonServer, _oldVersionClient, _oldVersionServer];
-};
diff --git a/docs/wiki/framework/events-framework.md b/docs/wiki/framework/events-framework.md
index 860cd90068..5155cf7593 100644
--- a/docs/wiki/framework/events-framework.md
+++ b/docs/wiki/framework/events-framework.md
@@ -30,6 +30,8 @@ The vehicle events will also have the following local variables available `_gunn
|`ace_firedPlayerVehicle` | [_vehicle, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile] | Local | Listen | ACE_player turret fires |
|`ace_firedPlayerVehicleNonLocal` | [_vehicle, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile] | Local | Listen | Any other player turret fires |
|`ace_firedNonPlayerVehicle` | [_vehicle, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile] | Local | Listen | AI turret fires |
+|`ace_versioning_clientCheckDone` | [[_missingAddonsClient, _additionalAddonsClient, _olderVersionsClient, _newerVersionsClient]] | Local | Listen | When PBO checking has finished on a client |
+|`ace_versioning_serverCheckDone` | [[_serverFiles, _serverVersions]] | Local | Listen | When PBO checking has finished on the server |
### 2.2 Medical (`ace_medical`)
From 18ea360b1ea2403443da7f4cf00e55389cb0b34d Mon Sep 17 00:00:00 2001
From: johnb432 <58661205+johnb432@users.noreply.github.com>
Date: Sat, 22 Jun 2024 17:18:28 +0200
Subject: [PATCH 06/36] Cargo - Add check for invoking `ace_cargoAdded` EH only
if cargo was actually added (#10084)
Only invoke cargoAdded EH if cargo was actually added
---
addons/cargo/functions/fnc_addCargoItem.sqf | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/addons/cargo/functions/fnc_addCargoItem.sqf b/addons/cargo/functions/fnc_addCargoItem.sqf
index de262bdcfb..d5c7925a6f 100644
--- a/addons/cargo/functions/fnc_addCargoItem.sqf
+++ b/addons/cargo/functions/fnc_addCargoItem.sqf
@@ -41,6 +41,8 @@ if (_item isEqualType "") then {
TRACE_1("loaded",_loaded);
// Invoke listenable event
-["ace_cargoAdded", [_item, _vehicle, _loaded]] call CBA_fnc_globalEvent;
+if (_loaded > 0) then {
+ ["ace_cargoAdded", [_item, _vehicle, _loaded]] call CBA_fnc_globalEvent;
+};
_loaded // return
From 1f5044aabdb7f1521c3a239a1284e6913e8a8405 Mon Sep 17 00:00:00 2001
From: johnb432 <58661205+johnb432@users.noreply.github.com>
Date: Sat, 22 Jun 2024 19:03:32 +0200
Subject: [PATCH 07/36] CSW - Improved weapon attachments handling (#9904)
---
.../functions/fnc_assemble_deployTripod.sqf | 50 +++++++++++-----
.../functions/fnc_assemble_deployWeapon.sqf | 58 +++++++++++++++----
.../fnc_staticWeaponInit_unloadExtraMags.sqf | 40 ++++++++++---
3 files changed, 114 insertions(+), 34 deletions(-)
diff --git a/addons/csw/functions/fnc_assemble_deployTripod.sqf b/addons/csw/functions/fnc_assemble_deployTripod.sqf
index da2ed56c04..29cc4b5876 100644
--- a/addons/csw/functions/fnc_assemble_deployTripod.sqf
+++ b/addons/csw/functions/fnc_assemble_deployTripod.sqf
@@ -19,16 +19,20 @@
params ["_player"];
TRACE_1("assemble_deployTripod",_player);
+ // Save magazines and attachments (handle loaded launchers which can become csw like CUP Metis)
+ private _secondaryWeaponInfo = (getUnitLoadout _player) select 1;
+ private _secondaryWeaponClassname = _secondaryWeaponInfo deleteAt 0;
+
+ // Remove empty entries
+ _secondaryWeaponInfo = _secondaryWeaponInfo select {_x isNotEqualTo "" && {_x isNotEqualTo []}};
+
// Remove the tripod from the launcher slot
- private _secondaryWeaponClassname = secondaryWeapon _player;
- // handle loaded launchers which can become csw like CUP Metis
- private _secondaryWeaponMagazine = secondaryWeaponMagazine _player param [0, ""];
_player removeWeaponGlobal _secondaryWeaponClassname;
private _onFinish = {
params ["_args"];
- _args params ["_player", "_secondaryWeaponClassname", "_secondaryWeaponMagazine"];
- TRACE_3("deployTripod finish",_player,_secondaryWeaponClassname,_secondaryWeaponMagazine);
+ _args params ["_player", "_secondaryWeaponClassname", "_secondaryWeaponInfo"];
+ TRACE_3("deployTripod finish",_player,_secondaryWeaponClassname,_secondaryWeaponInfo);
private _tripodClassname = getText(configFile >> "CfgWeapons" >> _secondaryWeaponClassname >> QUOTE(ADDON) >> "deploy");
@@ -36,9 +40,24 @@
private _cswTripod = createVehicle [_tripodClassname, [0, 0, 0], [], 0, "NONE"];
// Because the tripod can be a "full weapon" we disable any data that will allow it to be loaded
_cswTripod setVariable [QGVAR(assemblyMode), 2, true]; // Explicitly set enabled&unload assembly mode and broadcast
- if (_secondaryWeaponMagazine isNotEqualTo "") then {
- _cswTripod setVariable [QGVAR(secondaryWeaponMagazine), _secondaryWeaponMagazine];
+
+ private _secondaryWeaponMagazines = [];
+
+ {
+ // Magazines
+ if (_x isEqualType []) then {
+ _secondaryWeaponMagazines pushBack _x;
+ } else {
+ // Items
+ [_player, _x, true] call CBA_fnc_addItem;
+ };
+ } forEach _secondaryWeaponInfo;
+
+ // Only add magazines once the weapon is fully ready
+ if (_secondaryWeaponMagazines isNotEqualTo []) then {
+ _cswTripod setVariable [QGVAR(secondaryWeaponMagazines), _secondaryWeaponMagazines, true];
};
+
if (!GVAR(defaultAssemblyMode)) then {
[_cswTripod, "disableWeaponAssembly", QUOTE(ADDON), true] call EFUNC(common,statusEffect_set);
};
@@ -65,15 +84,18 @@
private _onFailure = {
params ["_args"];
- _args params ["_player", "_secondaryWeaponClassname", "_secondaryWeaponMagazine"];
- TRACE_3("deployTripod failure",_player,_secondaryWeaponClassname,_secondaryWeaponMagazine);
+ _args params ["_player", "_secondaryWeaponClassname", "_secondaryWeaponInfo"];
+ TRACE_3("deployTripod failure",_player,_secondaryWeaponClassname,_secondaryWeaponInfo);
- _player addWeaponGlobal _secondaryWeaponClassname;
- if (_secondaryWeaponMagazine isNotEqualTo "") then {
- _player addWeaponItem [_secondaryWeaponClassname, _secondaryWeaponMagazine, true];
- };
+ // Add tripod back
+ [_player, _secondaryWeaponClassname] call CBA_fnc_addWeaponWithoutItems;
+
+ // Add all attachments back
+ {
+ _player addWeaponItem [_secondaryWeaponClassname, _x, true];
+ } forEach _secondaryWeaponInfo;
};
private _deployTime = getNumber(configFile >> "CfgWeapons" >> _secondaryWeaponClassname >> QUOTE(ADDON) >> "deployTime");
- [TIME_PROGRESSBAR(_deployTime), [_player, _secondaryWeaponClassname, _secondaryWeaponMagazine], _onFinish, _onFailure, LLSTRING(PlaceTripod_progressBar)] call EFUNC(common,progressBar);
+ [TIME_PROGRESSBAR(_deployTime), [_player, _secondaryWeaponClassname, _secondaryWeaponInfo], _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 b9f8029bc2..ca45d64615 100644
--- a/addons/csw/functions/fnc_assemble_deployWeapon.sqf
+++ b/addons/csw/functions/fnc_assemble_deployWeapon.sqf
@@ -4,39 +4,51 @@
* Deploys the current CSW
*
* Arguments:
- * 0: Unit
M84 Stun Grenade
@@ -154,7 +155,7 @@
Anche conosciuta come flashbang. Causa accecamento immediato, sensazioni di sposatezza, mancanza d'equilibrio e disturbi al timpano.
Também conhecida como flashbang. Causa uma clarão imediato, cegueira, surdez, zumbido e distúrbio no tímpano.
フラッシュバンとも知られています。即時に失明と難聴、耳鳴り、内耳障害を引き起こします。
- 플래시뱅이라고도 알려져있습니다. 사용 즉시 섬광으로 인한 시력장애, 청각장애, 이명, 내이기관방해를 유발합니다.
+ 플래시뱅이라고도 알려져 있습니다. 사용 즉시 섬광으로 인한 시력장애, 청각장애, 이명, 내이기관방해를 유발합니다.
也被称为闪光弹,会造成暂时性失明,耳聋,耳鸣等效果。
也被稱為閃光彈,會造成暫時性失明,耳聾,耳鳴等效果
Flashbang olarak da bilinir. Ani flaş körlüğü, sağırlık, kulak çınlaması ve iç kulak rahatsızlığına neden olur.
diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml
index 5b7c3da063..9aba1ab56b 100644
--- a/addons/hearing/stringtable.xml
+++ b/addons/hearing/stringtable.xml
@@ -381,6 +381,7 @@
重火器を装備したユニットのみ
Sólo unidades con armas pesadas
Solo a unità con armi pesanti
+ 중화기를 가진 유닛만 해당
diff --git a/addons/hitreactions/stringtable.xml b/addons/hitreactions/stringtable.xml
index 421f806e32..8cc25a53a5 100644
--- a/addons/hitreactions/stringtable.xml
+++ b/addons/hitreactions/stringtable.xml
@@ -21,11 +21,13 @@
Player Weapon Drop Chance (Arm Hit)
プレイヤーが武器を落とす確率 (腕部への被弾)
Шанс выпадения оружия у игрока (попадание в руку)
+ 플레이어가 무기를 떨굴 확률 (팔 피격)
AI Weapon Drop Chance (Arm Hit)
AIが武器を落とす確率 (腕部への被弾)
Шанс выпадения оружия у ИИ (попадание в руку)
+ 인공지능이 무기를 떨굴 확률 (팔 피격)
diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml
index 8b8cc640eb..e7217260ac 100644
--- a/addons/medical_treatment/stringtable.xml
+++ b/addons/medical_treatment/stringtable.xml
@@ -73,13 +73,14 @@
Включено и может диагностировать смерть/остановку сердца
Aktiviert & kann Tod/Herzstillstand diagnostizieren
已启用 & 可以诊断死亡/心搏骤停
- 활성화 및 사망/심정지 진찰가능
+ 활성화 및 사망/심정지 진찰 가능
Habilitado y poder diagnosticar Muerte/Parada cardíaca
Abilitato e può diagnosticare Morte/Arresto Cardiaco
Enabled & Can Diagnose Death/Cardiac Arrest [Directly]
有効 & 死亡/心停止状態を診断可能 [直接的に]
+ 활성화 및 사망/심정지 진찰 가능 [직접]
Advanced Medication
@@ -3682,7 +3683,7 @@
%1 zkontroloval krevní tlak: %2
%1 verificou pressão arterial: %2
%1 が血圧を確認: %2
- %1 (이)가 혈압을 측정했습니다: %2
+ %1(이)가 혈압을 측정했습니다: %2
%1 测得血压为 %2
已由%1確認血壓: %2
@@ -3935,7 +3936,7 @@
%1 zkontroloval srdeční tep: %2
%1 verificou a frequência cardíaca: %2
%1 が心拍を確認: %2
- %1 (이)가 맥박을 측정했습니다: %2
+ %1(이)가 맥박을 측정했습니다: %2
%1 测得心率为 %2
已由%1確認心跳: %2
@@ -4019,7 +4020,7 @@
A Frequência Cardíaca é de %2
Nahmatal jsi srdeční tep u %2
計測した心拍数は %2 でした
- 맥박이 %2 입니다
+ 맥박은 %2 입니다
心率为 %2
心跳為%2
@@ -4135,7 +4136,7 @@
%1 está respondendo
%1 odpovídá
%1 は反応している
- %1 은 반응이 있습니다
+ %1은(는) 반응이 있습니다
%1 有反应
%1 有反應
%1 tepki veriyor
@@ -4152,7 +4153,7 @@
%1 não está respondendo
%1 neodpovídá
%1 は反応していない
- %1 은 반응이 없습니다
+ %1은(는) 반응이 없습니다
%1 没有反应
%1 沒有反應
%1 tepki vermiyor
@@ -4161,6 +4162,7 @@
%1 is unconscious
%1 は意識がない
%1 находится без сознания
+ %1은(는) 의식불명입니다
%1 is not responsive, taking shallow gasps and convulsing
@@ -4178,6 +4180,7 @@
%1 is in cardiac arrest
%1 は心停止している
У %1 произошла остановка сердца
+ %1은(는) 심정지 상태입니다
%1 is not responsive, motionless and cold
@@ -4195,6 +4198,7 @@
%1 is dead
%1 は死亡している
%1 мертв
+ %1은(는) 사망했습니다
You checked %1
diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml
index 833c83db94..5fc19bb9bf 100644
--- a/addons/realisticnames/stringtable.xml
+++ b/addons/realisticnames/stringtable.xml
@@ -703,6 +703,7 @@
KamAZ Água
KamAZ 給水
КамАЗ (водоноситель)
+ 카마즈 급수
KamAZ MRL
@@ -1666,12 +1667,14 @@
CZ 581
CZ 581
CZ 581
+ CZ 581
CZ 581 (Sawed-Off)
CZ 581 (Cano serrado)
CZ 581 (ソードオフ)
CZ 581 (Sawed-Off)
+ CZ 581 (소드오프)
FNX-45 Tactical (Green)
@@ -3079,18 +3082,21 @@
Type 115 (Preto)
Type 115 (ブラック)
Type 115 (чёрный)
+ 115식 보총 (검정)
Type 115 (Green Hex)
Type 115 (Verde Hex)
Type 115 (緑六角形迷彩)
Type 115 (зелёный гекс)
+ 115식 보총 (초록육각)
Type 115 (Hex)
Type 115 (Hex)
Type 115 (六角形迷彩)
Type 115 (гекс)
+ 115식 보총 (육각)
QBZ-95-1 (Black)
@@ -3881,18 +3887,21 @@
UTG Defender 126
UTG ディフェンダー 126
UTG Defender 126
+ UTG 디펜더 126
EOTech MRDS
EOTech MRDS
EOTech MRDS
EOTech MRDS
+ 이오텍 MRDS
EOTech MRDS (Black)
EOTech MRDS (Preto)
EOTech MRDS (ブラック)
EOTech MRDS (чёрный)
+ 이오텍 MRDS (검정)
Leupold Mark 4 HAMR
diff --git a/addons/zeus/stringtable.xml b/addons/zeus/stringtable.xml
index e871ef85ef..59597da0b4 100644
--- a/addons/zeus/stringtable.xml
+++ b/addons/zeus/stringtable.xml
@@ -2013,36 +2013,43 @@
Forces the spectator interface preventing the player from closing it with the Escape key
観戦インターフェイスを強制し、ユーザーがEscキーでも閉じられないようにします。
Активирует интерфейс spectator, не позволяя игроку закрыть его с помощью клавиши Escape.
+ 플레이어가 Esc 키로 관전자 인터페이스를 닫지 못하도록 강제로 관전자 인터페이스를 설정합니다.
Hide player
プレイヤーを隠す
Скрыть игрока
+ 플레이어 숨기기
Hides the player by making them invisible, invulnerable, muted, and removing them from their group
透明化、無敵化、ミュート、グループからの除外を行いプレーヤーを隠します
Скрывает игрока, делая его невидимым, неуязвимым, отключая звук и удаляя из группы.
+ 플레이어를 투명, 무적, 음소거화하고 그룹에서 제거하여 숨깁니다.
Sets the sides that are available to spectate
指定の陣営を観戦可能に設定します
Устанавливает стороны, доступные для режима spectator
+ 관전 가능한 진영을 설정합니다.
White Hot
白=熱源
Белый
+ 백색 열원
Black Hot
黒=熱源
Чёрный
+ 흑색 열원
Toggle All
全てを切り替え
Выключить все
+ 전부 토글
From 05d6327e5e1d7af445f659761e56d9fad7e8a6af Mon Sep 17 00:00:00 2001
From: V1nsyara
Date: Sun, 23 Jun 2024 04:24:00 +0300
Subject: [PATCH 13/36] Translation - Update Russian for small features
(#10085)
* Translation - Update Russian for new features
* Up to date translate RU
---
addons/killtracker/stringtable.xml | 2 ++
addons/medical_treatment/stringtable.xml | 1 +
addons/overpressure/stringtable.xml | 2 ++
3 files changed, 5 insertions(+)
diff --git a/addons/killtracker/stringtable.xml b/addons/killtracker/stringtable.xml
index 916dac6877..64fedfe320 100644
--- a/addons/killtracker/stringtable.xml
+++ b/addons/killtracker/stringtable.xml
@@ -121,9 +121,11 @@
Show vehicle kills to other crew members
+ Показать уничтоженные машины другим членам экипажа
Show kills from a vehicle to driver, gunner and commander
+ Показать уничтоженную технику водителю, стрелку и командиру
diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml
index e7217260ac..6593042d2a 100644
--- a/addons/medical_treatment/stringtable.xml
+++ b/addons/medical_treatment/stringtable.xml
@@ -80,6 +80,7 @@
Enabled & Can Diagnose Death/Cardiac Arrest [Directly]
有効 & 死亡/心停止状態を診断可能 [直接的に]
+ Включено и может диагностировать смерть/остановку сердца [Напрямую]
활성화 및 사망/심정지 진찰 가능 [직접]
diff --git a/addons/overpressure/stringtable.xml b/addons/overpressure/stringtable.xml
index d8b9ad12f4..f981fbc009 100644
--- a/addons/overpressure/stringtable.xml
+++ b/addons/overpressure/stringtable.xml
@@ -47,9 +47,11 @@
Backblast Distance Coefficient
+ Коэффициент расстояния рекативной струи
Scales the backblast effect
+ Масштабирует эффект реактивной струи
Backblast range
From aed2222b8159dbfbea00526169fd8fa85870ee6b Mon Sep 17 00:00:00 2001
From: PabstMirror
Date: Sat, 22 Jun 2024 22:34:34 -0500
Subject: [PATCH 14/36] Artillery Tables - Support for ammo that has native
`airFriction` (#10059)
* Artillery Tables - Support for ammo that has native `airFriction`
* fix comment
Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com>
* Update addons/artillerytables/functions/fnc_rangeTableOpen.sqf
Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com>
* replace if block with select const
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>
---
.../artillerytables/functions/fnc_firedEH.sqf | 3 +-
.../functions/fnc_rangeTableOpen.sqf | 11 +++++-
.../framework/artillery-tables-framework.md | 38 +++++++++++++++++++
3 files changed, 49 insertions(+), 3 deletions(-)
create mode 100644 docs/wiki/framework/artillery-tables-framework.md
diff --git a/addons/artillerytables/functions/fnc_firedEH.sqf b/addons/artillerytables/functions/fnc_firedEH.sqf
index f735c4c961..5aa46c6969 100644
--- a/addons/artillerytables/functions/fnc_firedEH.sqf
+++ b/addons/artillerytables/functions/fnc_firedEH.sqf
@@ -35,7 +35,7 @@ if (isNumber (configFile >> "CfgMagazines" >> _magazine >> QGVAR(airFriction)))
_airFriction = getNumber (configFile >> "CfgMagazines" >> _magazine >> QGVAR(airFriction));
};
TRACE_1("",_airFriction);
-if (_airFriction >= 0) exitWith {}; // 0 disables everything, >0 makes no sense
+if (_airFriction == 0) exitWith {}; // 0 disables everything
BEGIN_COUNTER(adjustmentsCalc);
@@ -60,6 +60,7 @@ if (_newMuzzleVelocityCoefficent != 1) then {
_projectile setVelocity _bulletVelocity;
};
+if (_airFriction > 0) exitWith {}; // positive value indicates it has vanilla airFriction, so we can just exit
[{
params ["_projectile", "_kFactor", "_time"];
diff --git a/addons/artillerytables/functions/fnc_rangeTableOpen.sqf b/addons/artillerytables/functions/fnc_rangeTableOpen.sqf
index 327a2903a0..508b8c894c 100644
--- a/addons/artillerytables/functions/fnc_rangeTableOpen.sqf
+++ b/addons/artillerytables/functions/fnc_rangeTableOpen.sqf
@@ -41,8 +41,15 @@ _mags = _mags apply {
private _initSpeed = getNumber (_magCfg >> _x >> "initSpeed");
_magParamsArray pushBackUnique _initSpeed;
private _airFriction = 0;
- if (_advCorrection) then {
- _airFriction = if (isNumber (_magCfg >> _x >> QGVAR(airFriction))) then { getNumber (_magCfg >> _x >> QGVAR(airFriction)) } else { DEFAULT_AIR_FRICTION };
+ private _magAirFriction = getNumber (_magCfg >> _x >> QGVAR(airFriction));
+ if (_magAirFriction <= 0) then {
+ if (_advCorrection) then {
+ _airFriction = [DEFAULT_AIR_FRICTION, _magAirFriction] select (isNumber (_magCfg >> _x >> QGVAR(airFriction)));
+ };
+ } else {
+ // positive value, use ammo's airFriction (regardless of setting)
+ private _ammo = getText (_magCfg >> _x >> "ammo");
+ _airFriction = getNumber (configFile >> "CfgAmmo" >> _ammo >> "airFriction");
};
_magParamsArray pushBackUnique _airFriction;
[getText (_magCfg >> _x >> "displayNameShort"), getText (_magCfg >> _x >> "displayName"), _initSpeed, _airFriction]
diff --git a/docs/wiki/framework/artillery-tables-framework.md b/docs/wiki/framework/artillery-tables-framework.md
new file mode 100644
index 0000000000..be2adb3331
--- /dev/null
+++ b/docs/wiki/framework/artillery-tables-framework.md
@@ -0,0 +1,38 @@
+---
+layout: wiki
+title: Artillery Tables
+description: Explains the configs for artillery tables.
+group: framework
+parent: wiki
+mod: ace
+version:
+ major: 3
+ minor: 13
+ patch: 0
+---
+
+## 1. Magazine Configs
+
+```cpp
+class CfgMagazines {
+ class yourMag {
+ ace_artillerytables_airFriction = -0.00006; // default value
+ // drag coefficent (when Air Resistance setting is enabled)
+ // can set to 0 to disable all muzzle effects and airFriction
+ // can set to +1 to use the ammo's native airFriction (not common, as most artillery ammo will have none)
+```
+
+## 2. Vehicle Configs
+
+```cpp
+class CfgVehicles {
+ class yourVic {
+ ace_artillerytables_showRangetable = 1; // [0 disabled, 1 enabled] falls back to artilleryScanner
+ // Show rangetable for this vehicle
+
+ ace_artillerytables_showGunLaying = 1; // [0 disabled, 1 enabled, 2 enabled w/ alt elevationMode] falls back to artilleryScanner
+ // Shows gun laying info (elev/azimuth)
+
+ ace_artillerytables_applyCorrections = 1; // [0 disabled, 1 enabled] falls back to artilleryScanner
+ // Apply advanced corrections (when setting enabled)
+```
From bdb6c7c69c09ad481ce8d5ece79757ffcf482df3 Mon Sep 17 00:00:00 2001
From: Fabio Schick <58027418+mrschick@users.noreply.github.com>
Date: Sun, 23 Jun 2024 05:36:41 +0200
Subject: [PATCH 15/36] Compat RHS/Hellfire - Use RHS models when loaded
(#10076)
Co-authored-by: PabstMirror
---
addons/compat_rhs_usf3/CfgMagazineWells.hpp | 11 ------
addons/compat_rhs_usf3/CfgMagazines.hpp | 17 ---------
.../compat_rhs_usf3_hellfire/CfgAmmo.hpp | 8 ++++
.../CfgMagazineWells.hpp | 11 ++++++
.../compat_rhs_usf3_hellfire/CfgMagazines.hpp | 37 +++++++++++++++++++
.../compat_rhs_usf3_hellfire/config.cpp | 25 +++++++++++++
.../script_component.hpp | 3 ++
addons/compat_rhs_usf3/config.cpp | 1 -
addons/hellfire/CfgMagazines.hpp | 4 +-
9 files changed, 86 insertions(+), 31 deletions(-)
delete mode 100644 addons/compat_rhs_usf3/CfgMagazineWells.hpp
create mode 100644 addons/compat_rhs_usf3/compat_rhs_usf3_hellfire/CfgAmmo.hpp
create mode 100644 addons/compat_rhs_usf3/compat_rhs_usf3_hellfire/CfgMagazineWells.hpp
create mode 100644 addons/compat_rhs_usf3/compat_rhs_usf3_hellfire/CfgMagazines.hpp
create mode 100644 addons/compat_rhs_usf3/compat_rhs_usf3_hellfire/config.cpp
create mode 100644 addons/compat_rhs_usf3/compat_rhs_usf3_hellfire/script_component.hpp
diff --git a/addons/compat_rhs_usf3/CfgMagazineWells.hpp b/addons/compat_rhs_usf3/CfgMagazineWells.hpp
deleted file mode 100644
index 01223ec141..0000000000
--- a/addons/compat_rhs_usf3/CfgMagazineWells.hpp
+++ /dev/null
@@ -1,11 +0,0 @@
-class CfgMagazineWells {
- class ace_hellfire_K {
- ADDON[] = {QGVAR(pylon_mag_2rnd_hellfire_k)};
- };
- class ace_hellfire_N {
- ADDON[] = {QGVAR(pylon_mag_2rnd_hellfire_n)};
- };
- class ace_hellfire_L {
- ADDON[] = {QGVAR(pylon_mag_2rnd_hellfire_l)};
- };
-};
diff --git a/addons/compat_rhs_usf3/CfgMagazines.hpp b/addons/compat_rhs_usf3/CfgMagazines.hpp
index f11dad081c..471b345dcd 100644
--- a/addons/compat_rhs_usf3/CfgMagazines.hpp
+++ b/addons/compat_rhs_usf3/CfgMagazines.hpp
@@ -38,21 +38,4 @@ class cfgMagazines {
EGVAR(overpressure,range) = 0;
EGVAR(overpressure,damage) = 0;
};
-
- class rhs_mag_AGM114K_2;
- class GVAR(pylon_mag_2rnd_hellfire_k): rhs_mag_AGM114K_2 {
- displayName = "2x AGM-114K [ACE]";
- pylonWeapon = "ace_hellfire_launcher";
- ammo = "ACE_Hellfire_AGM114K";
- };
- class GVAR(pylon_mag_2rnd_hellfire_n): rhs_mag_AGM114K_2 {
- displayName = "2x AGM-114N [ACE]";
- pylonWeapon = "ace_hellfire_launcher_N";
- ammo = "ACE_Hellfire_AGM114N";
- };
- class GVAR(pylon_mag_2rnd_hellfire_l): rhs_mag_AGM114K_2 {
- displayName = "2x AGM-114L [ACE]";
- pylonWeapon = "ace_hellfire_launcher_L";
- ammo = "ACE_Hellfire_AGM114L";
- };
};
diff --git a/addons/compat_rhs_usf3/compat_rhs_usf3_hellfire/CfgAmmo.hpp b/addons/compat_rhs_usf3/compat_rhs_usf3_hellfire/CfgAmmo.hpp
new file mode 100644
index 0000000000..16a0628d1f
--- /dev/null
+++ b/addons/compat_rhs_usf3/compat_rhs_usf3_hellfire/CfgAmmo.hpp
@@ -0,0 +1,8 @@
+class CfgAmmo {
+ // Use RHS Hellfire 3D Model on ACE Hellfires
+ class M_Scalpel_AT;
+ class ACE_Hellfire_AGM114K: M_Scalpel_AT {
+ model = "\rhsusf\addons\rhsusf_airweapons\proxyammo\rhsusf_m_AGM114K_fly";
+ proxyShape = "\rhsusf\addons\rhsusf_airweapons\proxyammo\rhsusf_m_AGM114K";
+ };
+};
diff --git a/addons/compat_rhs_usf3/compat_rhs_usf3_hellfire/CfgMagazineWells.hpp b/addons/compat_rhs_usf3/compat_rhs_usf3_hellfire/CfgMagazineWells.hpp
new file mode 100644
index 0000000000..e574b123a2
--- /dev/null
+++ b/addons/compat_rhs_usf3/compat_rhs_usf3_hellfire/CfgMagazineWells.hpp
@@ -0,0 +1,11 @@
+class CfgMagazineWells {
+ class ace_hellfire_K {
+ ADDON[] = {QGVAR(pylon_mag_2rnd_hellfire_k), QGVAR(pylon_mag_4rnd_hellfire_k)};
+ };
+ class ace_hellfire_N {
+ ADDON[] = {QGVAR(pylon_mag_2rnd_hellfire_n), QGVAR(pylon_mag_4rnd_hellfire_n)};
+ };
+ class ace_hellfire_L {
+ ADDON[] = {QGVAR(pylon_mag_2rnd_hellfire_l), QGVAR(pylon_mag_4rnd_hellfire_l)};
+ };
+};
diff --git a/addons/compat_rhs_usf3/compat_rhs_usf3_hellfire/CfgMagazines.hpp b/addons/compat_rhs_usf3/compat_rhs_usf3_hellfire/CfgMagazines.hpp
new file mode 100644
index 0000000000..9d96974ab8
--- /dev/null
+++ b/addons/compat_rhs_usf3/compat_rhs_usf3_hellfire/CfgMagazines.hpp
@@ -0,0 +1,37 @@
+class CfgMagazines {
+ // 2x ACE Hellfire racks
+ class rhs_mag_AGM114K_2;
+ class GVAR(pylon_mag_2rnd_hellfire_k): rhs_mag_AGM114K_2 {
+ displayName = "2x AGM-114K [ACE]";
+ pylonWeapon = "ace_hellfire_launcher";
+ ammo = "ACE_Hellfire_AGM114K";
+ };
+ class GVAR(pylon_mag_2rnd_hellfire_n): rhs_mag_AGM114K_2 {
+ displayName = "2x AGM-114N [ACE]";
+ pylonWeapon = "ace_hellfire_launcher_N";
+ ammo = "ACE_Hellfire_AGM114N";
+ };
+ class GVAR(pylon_mag_2rnd_hellfire_l): rhs_mag_AGM114K_2 {
+ displayName = "2x AGM-114L [ACE]";
+ pylonWeapon = "ace_hellfire_launcher_L";
+ ammo = "ACE_Hellfire_AGM114L";
+ };
+
+ // 4x ACE Hellfire racks that align better on RHS Apaches and Blackhawks than the standard ACE 4x racks
+ class rhs_mag_AGM114K_4;
+ class GVAR(pylon_mag_4rnd_hellfire_k): rhs_mag_AGM114K_4 {
+ displayName = "4x AGM-114K [ACE]";
+ pylonWeapon = "ace_hellfire_launcher";
+ ammo = "ACE_Hellfire_AGM114K";
+ };
+ class GVAR(pylon_mag_4rnd_hellfire_n): rhs_mag_AGM114K_4 {
+ displayName = "4x AGM-114N [ACE]";
+ pylonWeapon = "ace_hellfire_launcher_N";
+ ammo = "ACE_Hellfire_AGM114N";
+ };
+ class GVAR(pylon_mag_4rnd_hellfire_l): rhs_mag_AGM114K_4 {
+ displayName = "4x AGM-114L [ACE]";
+ pylonWeapon = "ace_hellfire_launcher_L";
+ ammo = "ACE_Hellfire_AGM114L";
+ };
+};
diff --git a/addons/compat_rhs_usf3/compat_rhs_usf3_hellfire/config.cpp b/addons/compat_rhs_usf3/compat_rhs_usf3_hellfire/config.cpp
new file mode 100644
index 0000000000..f460508a18
--- /dev/null
+++ b/addons/compat_rhs_usf3/compat_rhs_usf3_hellfire/config.cpp
@@ -0,0 +1,25 @@
+#include "script_component.hpp"
+
+class CfgPatches {
+ class SUBADDON {
+ name = COMPONENT_NAME;
+ units[] = {};
+ weapons[] = {};
+ requiredVersion = REQUIRED_VERSION;
+ requiredAddons[] = {
+ "rhsusf_main_loadorder",
+ "ace_hellfire"
+ };
+ skipWhenMissingDependencies = 1;
+ author = ECSTRING(common,ACETeam);
+ authors[] = {};
+ url = ECSTRING(main,URL);
+ VERSION_CONFIG;
+
+ addonRootClass = QUOTE(ADDON);
+ };
+};
+
+#include "CfgAmmo.hpp"
+#include "CfgMagazines.hpp"
+#include "CfgMagazineWells.hpp"
diff --git a/addons/compat_rhs_usf3/compat_rhs_usf3_hellfire/script_component.hpp b/addons/compat_rhs_usf3/compat_rhs_usf3_hellfire/script_component.hpp
new file mode 100644
index 0000000000..387de2d3ad
--- /dev/null
+++ b/addons/compat_rhs_usf3/compat_rhs_usf3_hellfire/script_component.hpp
@@ -0,0 +1,3 @@
+#define SUBCOMPONENT hellfire
+#define SUBCOMPONENT_BEAUTIFIED Hellfire
+#include "..\script_component.hpp"
diff --git a/addons/compat_rhs_usf3/config.cpp b/addons/compat_rhs_usf3/config.cpp
index 1e67b1e007..73b4723b2c 100644
--- a/addons/compat_rhs_usf3/config.cpp
+++ b/addons/compat_rhs_usf3/config.cpp
@@ -19,7 +19,6 @@ class CfgPatches {
#include "CfgAmmo.hpp"
#include "CfgEventHandlers.hpp"
#include "CfgMagazines.hpp"
-#include "CfgMagazineWells.hpp"
#include "CfgWeapons.hpp"
#include "CfgVehicles.hpp"
#include "CfgGlasses.hpp"
diff --git a/addons/hellfire/CfgMagazines.hpp b/addons/hellfire/CfgMagazines.hpp
index 8abf2529b5..d025afadde 100644
--- a/addons/hellfire/CfgMagazines.hpp
+++ b/addons/hellfire/CfgMagazines.hpp
@@ -32,7 +32,7 @@ class CfgMagazines {
count = 3;
mass = 250;
pylonWeapon = QGVAR(launcher);
- hardpoints[] = {"B_MISSILE_PYLON", "UNI_SCALPEL", "CUP_NATO_HELO_LARGE", "RHS_HP_LONGBOW_RACK"};
+ hardpoints[] = {"B_MISSILE_PYLON", "UNI_SCALPEL", "CUP_NATO_HELO_LARGE"};
model = "\A3\Weapons_F\DynamicLoadout\PylonPod_3x_Missile_LG_scalpel_F.p3d";
mirrorMissilesIndexes[] = {2, 1, 3};
};
@@ -41,7 +41,7 @@ class CfgMagazines {
count = 4;
mass = 340;
pylonWeapon = QGVAR(launcher);
- hardpoints[] = {"UNI_SCALPEL", "CUP_NATO_HELO_LARGE", "RHS_HP_HELLFIRE_RACK", "RHS_HP_LONGBOW_RACK"};
+ hardpoints[] = {"UNI_SCALPEL", "CUP_NATO_HELO_LARGE"};
model = "\A3\Weapons_F\DynamicLoadout\PylonPod_4x_Missile_LG_scalpel_F.p3d";
mirrorMissilesIndexes[] = {2, 1, 4, 3};
};
From 5c8ea65f7cd0a290e7ff6f8d0c44347617e77955 Mon Sep 17 00:00:00 2001
From: PabstMirror
Date: Sun, 23 Jun 2024 18:12:30 -0500
Subject: [PATCH 16/36] Common - Update header for addPlayerEH (#10086)
---
addons/common/functions/fnc_addPlayerEH.sqf | 8 +++++---
addons/ui/XEH_clientInit.sqf | 2 +-
2 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/addons/common/functions/fnc_addPlayerEH.sqf b/addons/common/functions/fnc_addPlayerEH.sqf
index 81d030fb62..c20fde9da1 100644
--- a/addons/common/functions/fnc_addPlayerEH.sqf
+++ b/addons/common/functions/fnc_addPlayerEH.sqf
@@ -2,12 +2,14 @@
/*
* Author: PabstMirror
* Adds event handler just to ACE_player
+ * Can be removed after cba 3.18 is released for CBA_fnc_addBISPlayerEventHandler
+ * This never was public in a release
*
* Arguments:
* 0: Key
* 1: Event Type
* 2: Event Code
- * 3: Ignore Virtual Units (spectators, virtual zeus, uav RC) (default: false)
+ * 3: Ignore Virtual Units (spectators, virtual zeus, uav RC) (default: true)
*
* Return Value:
* None
@@ -15,9 +17,9 @@
* Example:
* ["example", "FiredNear", {systemChat str _this}] call ace_common_fnc_addPlayerEH
*
- * Public: Yes
+ * Public: No
*/
-params [["_key", "", [""]], ["_type", "", [""]], ["_code", {}, [{}]], ["_ignoreVirtual", false, [false]]];
+params [["_key", "", [""]], ["_type", "", [""]], ["_code", {}, [{}]], ["_ignoreVirtual", true, [true]]];
TRACE_3("addPlayerEH",_key,_type,_ignoreVirtual);
if (isNil QGVAR(playerEventsHash)) then { // first-run init
diff --git a/addons/ui/XEH_clientInit.sqf b/addons/ui/XEH_clientInit.sqf
index 2c8cd3e4b4..d9d3fa5717 100644
--- a/addons/ui/XEH_clientInit.sqf
+++ b/addons/ui/XEH_clientInit.sqf
@@ -47,4 +47,4 @@ GVAR(elementsSet) = createHashMap;
}] call CBA_fnc_addEventHandler;
}] call CBA_fnc_addEventHandler;
-[QUOTE(ADDON), "AnimChanged", LINKFUNC(onAnimChanged)] call EFUNC(common,addPlayerEH);
+[QUOTE(ADDON), "AnimChanged", LINKFUNC(onAnimChanged), true] call EFUNC(common,addPlayerEH);
From b013ab81d585dc0482e96d1a8babdcbe80e88ecb Mon Sep 17 00:00:00 2001
From: Fabio Schick <58027418+mrschick@users.noreply.github.com>
Date: Mon, 24 Jun 2024 23:44:41 +0200
Subject: [PATCH 17/36] Translations - Italian and German (#10087)
* Grenades italian+german translation
* Fix english typo in MicroDAGR
* Medical Treatment italian+german translations
* Realisticnames italian+german translations
* Hitreactions italian+german translations
* Fix italian typo in 3 addons
* Cookoff italian+german translations
* Killtracker italian+german translations
* Zeus italian+german translations
* Overpressure italian+german translations
* Compat RF italian+german translations
* Realisticnames Fix italian+german oversight
* Compat WS italian+german translations
* Compat CUP-CSW italian translations
* Compat CUP-NVG italian translations
* Fixup overpressure
---
addons/cargo/stringtable.xml | 2 +-
.../compat_cup_weapons_csw/stringtable.xml | 17 ++
.../stringtable.xml | 6 +-
.../compat_rf_realisticnames/stringtable.xml | 153 ++++++++++++++++++
.../compat_ws_realisticnames/stringtable.xml | 80 +++++++++
addons/cookoff/stringtable.xml | 25 ++-
addons/csw/stringtable.xml | 2 +-
addons/grenades/stringtable.xml | 2 +
addons/hitreactions/stringtable.xml | 4 +
addons/killtracker/stringtable.xml | 4 +
addons/medical_treatment/stringtable.xml | 8 +
addons/microdagr/stringtable.xml | 2 +-
addons/overpressure/stringtable.xml | 6 +-
addons/realisticnames/stringtable.xml | 18 +++
addons/zeus/stringtable.xml | 16 +-
15 files changed, 337 insertions(+), 8 deletions(-)
diff --git a/addons/cargo/stringtable.xml b/addons/cargo/stringtable.xml
index 4e8d707f61..8e16f50090 100644
--- a/addons/cargo/stringtable.xml
+++ b/addons/cargo/stringtable.xml
@@ -506,7 +506,7 @@
Ladezeitmultiplikator
積載の所要時間係数
Współczynnik czasu załadowania
- Coefficente Tempo Caricamento
+ Coefficiente Tempo Caricamento
Коэф. времени погрузки
Fator de tempo para carregar
Coefficient du temps de chargement
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 112c335638..ea16be2905 100644
--- a/addons/compat_cup_weapons/compat_cup_weapons_csw/stringtable.xml
+++ b/addons/compat_cup_weapons/compat_cup_weapons_csw/stringtable.xml
@@ -8,6 +8,7 @@
[CSW] AGS-30 벨트
[CSW] AGS30 Gurt
[CSW] Cinta de AGS30
+ [CSW] Nastro AGS30
[CSW] MK19 Belt
@@ -16,6 +17,7 @@
[CSW] Mk.19 벨트
[CSW] MK19 Gurt
[CSW] Cinta de MK19
+ [CSW] Nastro MK19
[CSW] TOW Tube
@@ -24,6 +26,7 @@
[CSW] TOW 튜브
[CSW] TOW Rohr
[CSW] Tubo de TOW
+ [CSW] Tubo TOW
[CSW] TOW2 Tube
@@ -32,6 +35,7 @@
[CSW] TOW2 튜브
[CSW] TOW2 Rohr
[CSW] Tubo de TOW2
+ [CSW] Tubo TOW2
[CSW] PG-9 Round
@@ -40,6 +44,7 @@
[CSW] PG-9 대전차고폭탄
[CSW] PG-9 Rakete
[CSW] Carga de PG-9
+ [CSW] Razzo PG-9
[CSW] OG-9 Round
@@ -48,6 +53,7 @@
[CSW] OG-9 고폭파편탄
[CSW] OG-9 Rakete
[CSW] Carga de OG-9
+ [CSW] Razzo OG-9
[CSW] M1 HE
@@ -57,6 +63,7 @@
[CSW] M1 HE
[CSW] M1 HE
[CSW] HE de M1
+ [CSW] M1 HE
[CSW] M84 Smoke
@@ -66,6 +73,7 @@
[CSW] M84 Fumigène
[CSW] M84 Rauch
[CSW] Humo M84
+ [CSW] M84 Fumogeno
[CSW] M60A2 WP
@@ -75,6 +83,7 @@
[CSW] M60A2 WP
[CSW] M60A2 WP
[CSW] M60A2 WP
+ [CSW] M60A2 WP
[CSW] M67 AT Laser Guided
@@ -84,6 +93,7 @@
[CSW] M67 AT Guidé laser
[CSW] M67 AT Lasergelenkt
[CSW] AT Guiado por Láser M67
+ [CSW] M67 AT Laserguidato
[CSW] M314 Illumination
@@ -93,6 +103,7 @@
[CSW] M314 Illumination
[CSW] M314 Beleuchtung
[CSW] Iluminación M314
+ [CSW] M314 Illuminante
[CSW] 3OF56 HE
@@ -102,6 +113,7 @@
[CSW] 3OF56 HE
[CSW] 3OF56 HE
[CSW] HE de 3OF56
+ [CSW] 3OF56 HE
[CSW] 3OF69M Laser Guided
@@ -111,6 +123,7 @@
[CSW] 3OF69M Guidé laser
[CSW] 3OF69M Lasergelenkt
[CSW] 3OF69M Guiado por Láser
+ [CSW] 3OF69M Laserguidato
[CSW] 122mm WP
@@ -120,6 +133,7 @@
[CSW] 122mm WP
[CSW] 122mm WP
[CSW] WP de 122mm
+ [CSW] 122mm WP
[CSW] D-462 Smoke
@@ -129,6 +143,7 @@
[CSW] D-462 Fumigène
[CSW] D-462 Rauch
[CSW] Humo D-462
+ [CSW] D-462 Fumogeno
[CSW] S-463 Illumination
@@ -138,6 +153,7 @@
[CSW] S-463 Eclairante
[CSW] S-463 Beleuchtung
[CSW] Iluminación S-463
+ [CSW] S-463 Illuminante
[CSW] BK-6M HEAT
@@ -147,6 +163,7 @@
[CSW] BK-6M HEAT
[CSW] BK-6M HEAT
[CSW] BK-6M HEAT
+ [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 e1afbe21c8..5e31f93caf 100644
--- a/addons/compat_cup_weapons/compat_cup_weapons_nightvision/stringtable.xml
+++ b/addons/compat_cup_weapons/compat_cup_weapons_nightvision/stringtable.xml
@@ -37,7 +37,7 @@
AN/PVS-15 (Tan, WP)
AN/PVS-15 (タン, 白色蛍光)
- AN/PVS-15 (Marroncina, FB)
+ AN/PVS-15 (Marroncino, FB)
AN/PVS-15 (Jasnobrązowa, WP)
AN/PVS-15 (Hellbraun, WP)
AN/PVS-15 (황갈색, 백색광)
@@ -48,6 +48,7 @@
AN/PVS-15 (Winter, WP)
AN/PVS-15 (冬季迷彩, WP)
+ AN/PVS-15 (Invernale, FB)
AN/PVS-15 (설상, 백색광)
AN/PVS-15 (Белый, БФ)
AN/PVS-15 (Blanc, WP)
@@ -68,7 +69,7 @@
GPNVG (Tan, WP)
GPNVG (タン, 白色蛍光)
- GPNVG (Marroncina, FB)
+ GPNVG (Marroncino, FB)
GPNVG (Jasnobrązowa, WP)
GPNVG (Hellbraun, WP)
GPNVG (황갈색, 백색광)
@@ -90,6 +91,7 @@
GPNVG (Winter, WP)
GPNVG (冬季迷彩, WP)
+ GPNVG (Invernale, FB)
GPNVG (설상, 백색광)
AN/PVS-15 (Белый, БФ)
GPNVG (Blanc, WP)
diff --git a/addons/compat_rf/compat_rf_realisticnames/stringtable.xml b/addons/compat_rf/compat_rf_realisticnames/stringtable.xml
index 6d77333cda..c65a8fd4ad 100644
--- a/addons/compat_rf/compat_rf_realisticnames/stringtable.xml
+++ b/addons/compat_rf/compat_rf_realisticnames/stringtable.xml
@@ -5,270 +5,378 @@
EOTech MRDS (Khaki)
EOTech MRDS (カーキ)
이오텍 MRDS (카키)
+ EOTech MRDS (Khaki)
+ EOTech MRDS (Cachi)
EOTech MRDS (Tan)
EOTech MRDS (タン)
이오텍 MRDS (황갈)
+ EOTech MRDS (Hellbraun)
+ EOTech MRDS (Marroncino)
C-More Railway (Green, Desert)
C-More レイルウェイ (グリーン、砂漠迷彩)
씨모어 레일웨이 (녹색, 사막)
+ C-More Railway (Grün, Wüste)
+ C-More Railway (Verde, Deserto)
C-More Railway (Green, Woodland)
C-More レイルウェイ (グリーン、森林迷彩)
씨모어 레일웨이 (녹색, 수풀 위장)
+ C-More Railway (Grün, Grünes Tarnmuster)
+ C-More Railway (Verde, Boschivo)
C-More Railway (Red, Desert)
C-More レイルウェイ (グリーン、砂漠迷彩)
씨모어 레일웨이 (빨강, 사막)
+ C-More Railway (Rot, Wüste)
+ C-More Railway (Rosso, Desert)
C-More Railway (Red, Woodland)
C-More レイルウェイ (グリーン、森林迷彩)
씨모어 레일웨이 (빨강, 수풀)
+ C-More Railway (Rot, Grünes Tarnmuster)
+ C-More Railway (Rosso, Boschivo)
Aimpoint Micro R-1
Aimpoint マイクロ R-1
에임포인트 마이크로 R-1
+ Aimpoint Micro R-1
+ Aimpoint Micro R-1
Vortex Spitfire Prism
Vortex スピットファイア プリズム
버텍스 스핏파이어 프리즘
+ Vortex Spitfire Prism
+ Vortex Spitfire Prism
Vortex Spitfire Prism (Tan)
Vortex スピットファイア プリズム (タン)
버텍스 스핏파이어 프리즘 (황갈)
+ Vortex Spitfire Prism (Hellbraun)
+ Vortex Spitfire Prism (Marroncino)
Vortex Spitfire Prism (Khaki)
Vortex スピットファイア プリズム (カーキ)
버텍스 스핏파이어 프리즘 (카키)
+ Vortex Spitfire Prism (Khaki)
+ Vortex Spitfire Prism (Cachi)
Vortex Spitfire Prism (Pistol)
Vortex スピットファイア プリズム (ピストル用)
버텍스 스핏파이어 프리즘 (권총용)
+ Vortex Spitfire Prism (Pistole)
+ Vortex Spitfire Prism (Pistola)
Glock 19X
グロック 19X
글록 19X
+ Glock 19X
+ Glock 19X
Glock 19X (Khaki)
グロック 19X (カーキ)
글록 19X (카키)
+ Glock 19X (Khaki)
+ Glock 19X (Cachi)
Glock 19X (Tan)
グロック 19X (タン)
글록 19X (황갈)
+ Glock 19X (Hellbraun)
+ Glock 19X (Marroncino)
Glock 19X Auto
グロック 19X オート
글록 19X 기관권총
+ Glock 19X Auto
+ Glock 19X Auto
Glock 19X Auto (Khaki)
グロック 19X オート (カーキ)
글록 19X 기관권총 (카키)
+ Glock 19X Auto (Khaki)
+ Glock 19X Auto (Cachi)
Glock 19X Auto (Tan)
グロック 19X オート (タン)
글록 19X 기관권총 (황갈)
+ Glock 19X Auto (Hellbraun)
+ Glock 19X Auto (Marroncino)
Desert Eagle Mark XIX L5
デザートイーグル Mark XIX L5
데저트 이글 마크 XIX L5
+ Desert Eagle Mark XIX L5
+ Desert Eagle Mark XIX L5
Desert Eagle Mark XIX L5 (Classic)
デザートイーグル Mark XIX L5 (クラシック)
데저트 이글 마크 XIX L5 (클래식)
+ Desert Eagle Mark XIX L5 (Klassisch)
+ Desert Eagle Mark XIX L5 (Classico)
Desert Eagle Mark XIX L5 (Bronze)
デザートイーグル Mark XIX L5 (ブロンズ)
데저트 이글 마크 XIX L5 (브론즈)
+ Desert Eagle Mark XIX L5 (Bronze)
+ Desert Eagle Mark XIX L5 (Bronzo)
Desert Eagle Mark XIX L5 (Copper)
デザートイーグル Mark XIX L5 (カッパー)
데저트 이글 마크 XIX L5 (구리)
+ Desert Eagle Mark XIX L5 (Kupfer)
+ Desert Eagle Mark XIX L5 (Rame)
Desert Eagle Mark XIX L5 (Gold)
デザートイーグル Mark XIX L5 (ゴールド)
데저트 이글 마크 XIX L5 (금색)
+ Desert Eagle Mark XIX L5 (Gold)
+ Desert Eagle Mark XIX L5 (Oro)
HERA H6 (Tan)
HERA H6 (タン)
헤라 H6 (황갈)
+ HERA H6 (Hellbraun)
+ HERA H6 (Marroncino)
HERA H6 (Olive)
HERA H6 (オリーブ)
헤라 H6 (올리브)
+ HERA H6 (Olivgrün)
+ HERA H6 (Oliva)
HERA H6 (Black)
HERA H6 (ブラック)
헤라 H6 (검정)
+ HERA H6 (Schwarz)
+ HERA H6 (Nero)
HERA H6 (Digital)
HERA H6 (AAF迷彩)
헤라 H6 (AAF 디지털)
+ HERA H6 (Digital)
+ HERA H6 (Digitale)
HERA H6 (Gold)
HERA H6 (ゴールド)
헤라 H6 (금색)
+ HERA H6 (Gold)
+ HERA H6 (Oro)
VS-121 (Black)
VS-121 (ブラック)
VS-121 (검정)
+ VS-121 (Schwarz)
+ VS-121 (Nero)
VS-121 (Tan)
VS-121 (タン)
VS-121 (황갈)
+ VS-121 (Hellbraun)
+ VS-121 (Marroncino)
Vector SMG (Black)
ベクター SMG (ブラック)
벡터 SMG (검정)
+ Vector SMG (Schwarz)
+ Vector SMG (Nero)
ASh-12 (Black)
ASh-12 (ブラック)
ASh-12 (검정)
+ ASh-12 (Schwarz)
+ ASh-12 (Nero)
ASh-12 (Desert)
ASh-12 (砂漠迷彩)
ASh-12 (사막)
+ ASh-12 (Wüste)
+ ASh-12 (Deserto)
ASh-12 (Urban)
ASh-12 (市街地迷彩)
ASh-12 (도심)
+ ASh-12 (Urban)
+ ASh-12 (Urbano)
ASh-12 (Woodland)
ASh-12 (森林迷彩)
ASh-12 (수풀)
+ ASh-12 (Grünes Tarnmuster)
+ ASh-12 (Boschivo)
ASh-12 GL (Black)
ASh-12 GL (ブラック)
ASh-12 GL (검정)
+ ASh-12 GL (Schwarz)
+ ASh-12 GL (Nero)
ASh-12 GL (Desert)
ASh-12 GL (砂漠迷彩)
ASh-12 GL (사막)
+ ASh-12 GL (Wüste)
+ ASh-12 GL (Deserto)
ASh-12 GL (Urban)
ASh-12 GL (市街地迷彩)
ASh-12 GL (도심)
+ ASh-12 GL (Urban)
+ ASh-12 GL (Urbano)
ASh-12 GL (Woodland)
ASh-12 GL (森林迷彩)
ASh-12 GL (수풀)
+ ASh-12 GL (Grünes Tarnmuster)
+ ASh-12 GL (Boschivo)
ASh-12 LR (Black)
ASh-12 LR (ブラック)
ASh-12 LR (검정)
+ ASh-12 LR (Schwarz)
+ ASh-12 LR (Nero)
ASh-12 LR (Desert)
ASh-12 LR (砂漠迷彩)
ASh-12 LR (사막)
+ ASh-12 LR (Wüste)
+ ASh-12 LR (Deserto)
ASh-12 LR (Urban)
ASh-12 LR (市街地迷彩)
ASh-12 LR (도심)
+ ASh-12 LR (Urban)
+ ASh-12 LR (Urbano)
ASh-12 LR (Woodland)
ASh-12 LR (森林迷彩)
ASh-12 LR (수풀)
+ ASh-12 LR (Grünes Tarnmuster)
+ ASh-12 LR (Boschivo)
AW159 Wildcat ASW
AW159 ワイルドキャット ASW
AW159 와일드캣 ASW
+ AW159 Wildcat ASW
+ AW159 Wildcat ASW
AW159 Wildcat ASW (Unarmed)
AW159 ワイルドキャット ASW (非武装)
AW159 와일드캣 ASW (비무장)
+ AW159 Wildcat ASW (Unbewaffnet)
+ AW159 Wildcat ASW (Disarmato)
H225 Super Puma (Transport)
H225 シュペル ピューマ (輸送型)
H225 슈퍼 퓨마 (비무장)
+ H225 Super Puma (Transport)
+ H225 Super Puma (Trasporto)
H225 Super Puma (Civilian)
H225 シュペル ピューマ (民生型)
H225 슈퍼 퓨마 (비무장)
+ H225 Super Puma (Zivil)
+ H225 Super Puma (Civile)
H215 Super Puma (Transport)
H215 シュペル ピューマ (輸送型)
H215 슈퍼 퓨마 (비무장)
+ H215 Super Puma (Transport)
+ H215 Super Puma (Trasporto)
H215 Super Puma (Civilian)
H215 シュペル ピューマ (民生型)
H215 슈퍼 퓨마 (비무장)
+ H215 Super Puma (Zivil)
+ H215 Super Puma (Civile)
H215 Super Puma (Unarmed)
H215 シュペル ピューマ (非武装)
H215 슈퍼 퓨마 (비무장)
+ H215 Super Puma (Unbewaffnet)
+ H215 Super Puma (Disarmato)
H225M Super Cougar SOCAT
H225M シュペル クーガー SOCAT
H225M 슈퍼 쿠거 SOCAT
+ H225M Super Cougar SOCAT
+ H225M Super Cougar SOCAT
H225M Super Cougar SOCAT
H225M シュペル クーガー SOCAT
H225M 슈퍼 쿠거 SOCAT
+ H225M Super Cougar SOCAT
+ H225M Super Cougar SOCAT
H225M Super Cougar
H225M シュペル クーガー
H225M 슈퍼 쿠거
+ H225M Super Cougar
+ H225M Super Cougar
H225 Super Puma SAR
H225 シュペル ピューマ 捜索救難型
H225 슈퍼 퓨마 SAR
+ H225 Super Puma SAR
+ H225 Super Puma SAR
H225M Super Cougar (Unarmed)
H225M シュペル クーガー (非武装)
+ H225M Super Cougar (Unbewaffnet)
+ H225M Super Cougar (Disarmato)
HEMTT Fire Truck
@@ -280,116 +388,161 @@
HEMTT 消防卡车
HEMTT contra incêndio
HEMTT 消防車
+ HEMTT Autobotte
Typhoon Water
タイフーン 給水
타이푼 급수
+ Typhoon Water
+ Typhoon Acqua
Ram 1500
ラム 1500
램 1500
+ Ram 1500
+ Ram 1500
Ram 1500 (Fuel)
ラム 1500 (燃料)
램 1500 (연료)
+ Ram 1500 (Treibstoff)
+ Ram 1500 (Carburante)
Ram 1500 (Services)
ラム 1500 (サービス)
램 1500 (서비스)
+ Ram 1500 (Pannenhilfe)
+ Ram 1500 (Servizi)
Ram 1500 (Repair)
ラム 1500 (修理)
램 1500 (정비)
+ Ram 1500 (Instandsetzung)
+ Ram 1500 (Riparazioni)
Ram 1500 (Comms)
ラム 1500 (通信)
램 1500 (통신)
+ Ram 1500 (Kommunikation)
+ Ram 1500 (Comunicazioni)
Ram 1500 (HMG)
ラム 1500 (HMG)
램 1500 (중기관총)
+ Ram 1500 (HMG)
+ Ram 1500 (HMG)
Ram 1500 (MMG)
ラム 1500 (MMG)
램 1500 (중형기관총)
+ Ram 1500 (MMG)
+ Ram 1500 (MMG)
Ram 1500 (MRL)
ラム 1500 (MRL)
램 1500 (다연장로켓)
+ Ram 1500 (MRL)
+ Ram 1500 (MRL)
Ram 1500 (AA)
ラム 1500 (対空)
램 1500 (대공)
+ Ram 1500 (AA)
+ Ram 1500 (AA)
Ram 1500 (Covered)
ラム 1500 (カバー)
램 1500 (커버)
+ Ram 1500 (Abgedeckt)
+ Ram 1500 (Coperto)
Ram 1500 (Water)
ラム 1500 (給水)
램 1500 (급수)
+ Ram 1500 (Wasser)
+ Ram 1500 (Acqua)
RSG60
RSG60
RSG60
+ RSG60
+ RSG60
AMOS Container
AMOS コンテナ
AMOS 컨테이너
+ AMOS Container
+ AMOS Container
Drone40
ドローン40
드론40
+ Drone40
+ Drone40
Drone40 Scout
ドローン40 偵察型
드론40 정찰
+ Drone40 Scout
+ Drone40 Scout
Drone40 HE
ドローン40 榴弾
드론40 고폭
+ Drone40 HE
+ Drone40 HE
Drone40 Smoke (White)
ドローン40 発煙弾 (白)
드론40 연막 (백색)
+ Drone40 Smoke (Weiß)
+ Drone40 Smoke (Bianco)
Drone40 Smoke (Blue)
ドローン40 発煙弾 (青)
드론40 연막 (청색)
+ Drone40 Smoke (Blau)
+ Drone40 Smoke (Blu)
Drone40 Smoke (Red)
ドローン40 発煙弾 (赤)
드론40 연막 (적색)
+ Drone40 Smoke (Rot)
+ Drone40 Smoke (Rosso)
Drone40 Smoke (Green)
ドローン40 発煙弾 (緑)
드론40 연막 (녹색)
+ Drone40 Smoke (Grün)
+ Drone40 Smoke (Verde)
Drone40 Smoke (Orange)
ドローン40 発煙弾 (橙)
드론40 연막 (주황색)
+ Drone40 Smoke (Orange)
+ Drone40 Smoke (Arancione)
diff --git a/addons/compat_ws/compat_ws_realisticnames/stringtable.xml b/addons/compat_ws/compat_ws_realisticnames/stringtable.xml
index 82efb554d9..606bbb7932 100644
--- a/addons/compat_ws/compat_ws_realisticnames/stringtable.xml
+++ b/addons/compat_ws/compat_ws_realisticnames/stringtable.xml
@@ -260,11 +260,15 @@
FN FAL OSW Para
FN FAL OSW パラ
FN FAL OSW 파라
+ FN FAL OSW Fallschirmjäger
+ FN FAL OSW Para
FN FAL OSW Para (Snake)
FN FAL OSW パラ (ヘビ柄迷彩)
FN FAL OSW 파라 (뱀 위장)
+ FN FAL OSW Fallschirmjäger (Schlange)
+ FN FAL OSW Para (Serpe)
Vektor R4
@@ -462,191 +466,267 @@
GM6 Lynx (Snake)
GM6 リンクス (ヘビ柄迷彩)
GM6 링스 (뱀 위장)
+ GM6 Lynx (Schlange)
+ GM6 Lynx (Serpe)
RPG-32 (Sand)
RPG-32 (サンド)
RPG-32 (모래)
+ RPG-32 (Sand)
+ RPG-32 (Sabbia)
ELCAN SpecterOS (Hex)
ELCAN SpecterOS (六角形迷彩)
엘칸 스펙터OS (육각)
+ ELCAN SpecterOS (Hex)
+ ELCAN SpecterOS (Hex)
EOTech XPS3 (Snake)
EOTech XPS3 (ヘビ柄迷彩)
이오텍 XPS3 (뱀 위장)
+ EOTech XPS3 (Schlange)
+ EOTech XPS3 (Serpe)
EOTech XPS3 SMG (Snake)
EOTech XPS3 SMG (ヘビ柄迷彩)
이오텍 XPS3 SMG (뱀 위장)
+ EOTech XPS3 SMG (Schlange)
+ EOTech XPS3 SMG (Serpe)
Leupold Mark 4 HAMR (Arid)
Leupold Mark 4 HAMR (乾燥地帯迷彩)
류폴드 마크 4 HAMR (건조)
+ Leupold Mark 4 HAMR (Trocken)
+ Leupold Mark 4 HAMR (Arido)
Leupold Mark 4 HAMR (Lush)
Leupold Mark 4 HAMR (緑地迷彩)
류폴드 마크 4 HAMR (초목)
+ Leupold Mark 4 HAMR (Grün)
+ Leupold Mark 4 HAMR (Verdeggiante)
Leupold Mark 4 HAMR (Sand)
Leupold Mark 4 HAMR (サンド)
류폴드 마크 4 HAMR (모래)
+ Leupold Mark 4 HAMR (Sand)
+ Leupold Mark 4 HAMR (Sabbia)
Leupold Mark 4 HAMR (Snake)
Leupold Mark 4 HAMR (ヘビ柄迷彩)
류폴드 마크 4 HAMR (뱀 위장)
+ Leupold Mark 4 HAMR (Schlange)
+ Leupold Mark 4 HAMR (Serpe)
Aimpoint Micro R-1 (High, Black)
Aimpoint マイクロ R-1 (ハイマウント、ブラック)
에임포인트 마이크로 R-1 (높음, 검정)
+ Aimpoint Micro R-1 (Hoch, Schwarz)
+ Aimpoint Micro R-1 (Alto, Nero)
Aimpoint Micro R-1 (High, Khaki)
Aimpoint マイクロ R-1 (ハイマウント、カーキ)
에임포인트 마이크로 R-1 (높음, 카키)
+ Aimpoint Micro R-1 (Hoch, Khaki)
+ Aimpoint Micro R-1 (Alto, Cachi)
Aimpoint Micro R-1 (High, Sand)
Aimpoint マイクロ R-1 (ハイマウント、サンド)
에임포인트 마이크로 R-1 (높음, 모래)
+ Aimpoint Micro R-1 (Hoch, Sand)
+ Aimpoint Micro R-1 (Alto, Sabbia)
Aimpoint Micro R-1 (High, Snake)
Aimpoint マイクロ R-1 (ハイマウント、ヘビ柄迷彩)
에임포인트 마이크로 R-1 (높음, 뱀 위장)
+ Aimpoint Micro R-1 (Hoch, Schlange)
+ Aimpoint Micro R-1 (Alto, Serpe)
Aimpoint Micro R-1 (High, Arid)
Aimpoint マイクロ R-1 (ハイマウント、乾燥地帯迷彩)
에임포인트 마이크로 R-1 (높음, 건조)
+ Aimpoint Micro R-1 (Hoch, Trocken)
+ Aimpoint Micro R-1 (Alto, Arido)
Aimpoint Micro R-1 (High, Lush)
Aimpoint マイクロ R-1 (ハイマウント、緑地迷彩)
에임포인트 마이크로 R-1 (높음, 초목)
+ Aimpoint Micro R-1 (Hoch, Grün)
+ Aimpoint Micro R-1 (Alto, Verdeggiante)
Aimpoint Micro R-1 (High, Black/Sand)
Aimpoint マイクロ R-1 (ハイマウント、ブラック/サンド)
에임포인트 마이크로 R-1 (높음, 검정/모래)
+ Aimpoint Micro R-1 (Hoch, Schwarz/Sand)
+ Aimpoint Micro R-1 (Alto, Nero/Sabbia)
Aimpoint Micro R-1 (Low, Black)
Aimpoint マイクロ R-1 (ローマウント、ブラック)
에임포인트 마이크로 R-1 (낮음, 검정)
+ Aimpoint Micro R-1 (Tief, Schwarz)
+ Aimpoint Micro R-1 (Basso, Nero)
Aimpoint Micro R-1 (Low, Khaki)
Aimpoint マイクロ R-1 (ローマウント、カーキ)
에임포인트 마이크로 R-1 (낮음, 카키)
+ Aimpoint Micro R-1 (Tief, Khaki)
+ Aimpoint Micro R-1 (Basso, Cachi)
Aimpoint Micro R-1 (Low, Sand)
Aimpoint マイクロ R-1 (ローマウント、サンド)
에임포인트 마이크로 R-1 (낮음, 모래)
+ Aimpoint Micro R-1 (Tief, Sand)
+ Aimpoint Micro R-1 (Basso, Sabbia)
Aimpoint Micro R-1 (Low, Snake)
Aimpoint マイクロ R-1 (ローマウント、ヘビ柄迷彩)
에임포인트 마이크로 R-1 (낮음, 뱀 위장)
+ Aimpoint Micro R-1 (Tief, Schlange)
+ Aimpoint Micro R-1 (Basso, Serpe)
Aimpoint Micro R-1 (Low, Arid)
Aimpoint マイクロ R-1 (ローマウント、乾燥地帯迷彩)
에임포인트 마이크로 R-1 (낮음, 건조)
+ Aimpoint Micro R-1 (Tief, Trocken)
+ Aimpoint Micro R-1 (Basso, Arido)
Aimpoint Micro R-1 (Low, Lush)
Aimpoint マイクロ R-1 (ローマウント、緑地迷彩)
에임포인트 마이크로 R-1 (낮음, 초목)
+ Aimpoint Micro R-1 (Tief, Grün)
+ Aimpoint Micro R-1 (Basso, Verdeggiante)
Burris XTR II (Snake)
Burris XTR II (ヘビ柄迷彩)
버리스 XTR II (뱀 위장)
+ Burris XTR II (Schlange)
+ Burris XTR II (Serpe)
Badger IFV (ATGM)
バジャー IFV (ATGM)
뱃져 보병전투차 (대전차미사일)
+ Badger IFV (PzAbw)
+ Badger IFV (ATGM)
Badger IFV (Command)
バジャー IFV (指揮)
뱃져 보병전투차 (지휘)
+ Badger IFV (Kommando)
+ Badger IFV (Comando)
Badger IFV (Mortar)
バジャー IFV (迫撃砲)
뱃져 보병전투차 (자주박격포)
+ Badger IFV (Mörser)
+ Badger IFV (Mortaio)
KamAZ (Zu-23-2)
KamAZ (Zu-23-2)
카마즈 (ZU-23-2)
+ KamAZ (Zu-23-2)
+ KamAZ (Zu-23-2)
KamAZ Cargo
KamAZ 貨物
카마즈 화물
+ KamAZ Fracht
+ KamAZ Carico
KamAZ Repair
KamAZ 修理
카마즈 정비
+ KamAZ Instandsetzung
+ KamAZ Riparazione
KamAZ Racing
KamAZ レース仕様
카마즈 경주용
+ KamAZ Rennlaster
+ KamAZ da corsa
KamAZ Ammo
KamAZ 弾薬
카마즈 탄약
+ KamAZ Munition
+ KamAZ Munizioni
KamAZ Flatbed
KamAZ フラットベッド
카마즈 플랫베드
+ KamAZ Flachbett
+ KamAZ Pianale
AW101 Merlin
AW101 マーリン
AW101 멀린
+ AW101 Merlin
+ AW101 Merlin
BM-2T Stalker (Bumerang-BM)
BM-2T ストーカー (ブーメランク-BM)
BM-2T 스토커 (부메랑-BM)
+ BM-2T Stalker (Bumerang-BM)
+ BM-2T Stalker (Bumerang-BM)
Otokar ARMA (HMG)
オトカ アルマ (HMG)
오토카르 아르마 APC (중기관총)
+ Otokar ARMA (HMG)
+ Otokar ARMA (HMG)
Otokar ARMA (Unarmed)
オトカ アルマ (非武装)
오토카르 아르마 APC (비무장)
+ Otokar ARMA (Unbewaffnet)
+ Otokar ARMA (Disarmato)
Ka-60 Kasatka (UP)
Ka-60 カサートカ (UP)
Ka-60 카사트카 (UP)
+ Ka-60 Kasatka (UP)
+ Ka-60 Kasatka (UP)
Ka-60 Kasatka (UP, Unarmed)
Ka-60 カサートカ (UP、非武装)
Ka-60 카사트카 (UP, 비무장))
+ Ka-60 Kasatka (UP, Unbewaffnet)
+ Ka-60 Kasatka (UP, Disarmato)
diff --git a/addons/cookoff/stringtable.xml b/addons/cookoff/stringtable.xml
index 745b686b8a..15d2d2adec 100644
--- a/addons/cookoff/stringtable.xml
+++ b/addons/cookoff/stringtable.xml
@@ -4,7 +4,7 @@
ACE Cook-off
ACE Detonación inducida por calor
- ACE Detonazione Munizioni
+ ACE Esplosioni di Munizioni
ACE 殉爆效果
ACE 殉爆效果
ACE 誘爆
@@ -21,36 +21,48 @@
車両の誘爆火災を有効化
Вкл. возгорание техники
차량 유폭 화재를 활성화합니다
+ Abilita incendio dei veicoli
+ Aktiviert Fahrzeug Munitionsbrand
Enables vehicle cook-off fire effects.\nThis doesn't include ammunition detonations.
車両の誘爆火災エフェクトを有効化します。\nこれには弾薬の爆発は含まれません。
Вкл. эффект горения техники. \nНе включает детонацию боекомплекта
차량 유폭 효과를 활성화합니다.\n여기엔 탄약 유폭이 포함되지 않습니다.
+ Abilita effetti di incendio del veicolo dovuto all'esplosione delle munizioni.\nQuesto non include gli effetti di esplosione.
+ Aktiviert Fahrzeug Brandeffekte durch Durchzündung.\nExplosionseffekte sind nicht mit einbegriffen.
Vehicle cook-off fire duration multiplier
車両の誘爆火災の持続時間倍率
Увел. продолжительности горения техники
차량 유폭 화재 지속 시간 계수
+ Coefficiente di durata incendio dei veicoli
+ Fahrzeugbrand Dauer-Multiplikator
Multiplier for how long vehicle cook-off fire lasts.\nSetting to 0 will disable vehicle cook-off fire.
車両の誘爆火災の持続時間をどのくらいの長さにするかの倍率。\n0に設定すると車両の誘爆火災が無効化されます。
Увел. продолжительности горения техники. \nУстановка значения на 0 выключает возгорание техники.
차량 유폭 화재가 지속되는 시간에 대한 계수입니다.\n0으로 설정하면 차량 쿸오프 화재가 비활성화됩니다.
+ Coefficiente di durata degli incendi dei veicoli.\nImpostarlo su 0 disabilita incendi dei veicoli.
+ Multiplikator der Fahrzeugbrand Dauer.\nIhn auf 0 zu setzen wird Munitionsbrände deaktivieren.
Vehicle cook-off fire probability multiplier
車両の誘爆火災の可能性倍率
Возможность усиления пожара при детонации техники
차량 유폭 화재 확률 계수
+ Probabilità di incendio dei veicoli
+ Fahrzeug Munitionsbrand Wahrscheinlichkeit-Multiplikator
Multiplier for vehicle cook-off fire probability. Higher value results in higher cook-off probability.\nSetting to 0 will disable vehicle cook-off fire.
車両の誘爆火災がどのくらいの可能性で発生するかの倍率。高い数値は高い誘爆の可能性につながります。\n0に設定すると車両の誘爆火災が無効化されます。
Увел. вероятности возникновения возгорания техники. Большое значение указывает на высокую вероятность детонации. \nУстановка значения 0 предотвращает возгорание техники.
차량 유폭 화재 확률에 대한 계수입니다. 값이 높을 수록 유폭 확률이 높아집니다.\n0으로 설정하면 차량 유폭 화재가 비활성화됩니다.
+ Coefficiente di probabilità degli incendi dei veicoli.\nValori maggiori aumentano la probabilità di incendi.\nImpostarlo su 0 disabilita incendi dei veicoli.
+ Multiplikator der Fahrzeugbrand Wahrscheinlichkeit.\nHöhere Werte erhöhen die Wahrscheinlichkeit.\nEin Null-Wert wird Munitionsbrände deaktivieren.
Destroy vehicles after cook-off
@@ -82,12 +94,16 @@
車両弾薬の誘爆を有効化
Вкл. детонацию боеприпасов в технике.
차량 내 탄약 유폭 활성화
+ Abilita esplosioni delle munizioni dei veicoli
+ Aktiviert Fahrzeug Munitionsdurchzündung
Enables cooking off of vehicle ammunition. Fires ammunition projectiles while vehicle has ammunition remaining.\nThis doesn't include fire effects.
車両弾薬の誘爆を有効化します。車両に積載されたままの弾薬と弾頭が発射されます。\nこれには火災エフェクトは含まれません。
Вкл. детонацию боеприпасов на технике. Боеприпасы и боеголовки, которые остаются заряженными на транспортном средстве, будут приведены в действие. \nЭто не включает эффекты пожара.
차량 내 탄약 유폭을 활성화합니다. 차량에 탄약이 남아 있는 동안 탄약 발사체를 발사합니다.\n여기엔 화재 효과가 포함되지 않습니다.
+ Abilita l'esplosione delle munizioni dei veicoli. Spara via pezzi di munizioni se il veicolo ha ancora munizioni rimanenti.\nNon include gli effetti di fuoco.
+ Aktiviert Durchzündung von Fahrzeugmunition. Schleudert Munitionsfragmente umher wenn das Fahrzeug noch Munition an Bord hat.\nBrandeffekte sind nicht mit einbegriffen.
Enable ammo box cook-off
@@ -109,18 +125,24 @@
弾薬箱の誘爆を有効化します。\nこれには火災エフェクトは含まれません。
Вкл. детонацию ящика с боеприпасами. \nЭто не включает эффекты огня.
탄약 상자 유폭을 활성화합니다.\n여기엔 화재 효과가 포함되지 않습니다.
+ Abilita esplosioni delle casse di munizioni.\nNon include effetti di fuoco.
+ Aktiviert Munitionskisten Durchzündung.\nBrandeffekte sind nicht mit einbegriffen.
Ammo cook-off duration multiplier
弾薬の誘爆の持続時間倍率
Увеличение продолжительности детонации боеприпасов.
탄약 유폭 시간 계수
+ Coefficiente di durata esplisioni di munizioni
+ Fahrzeug Munitionsdurchzündung Dauer-Multiplikator
Multiplier for how long ammunition cook-off lasts, for both vehicles and ammo boxes.\nSetting to 0 will disable ammo cook-off for both vehicles and ammo boxes.
弾薬の誘爆の持続時間をどのくらいの長さにするかの倍率。車両弾薬と弾薬箱どちらにも影響します。\n0に設定すると弾薬の誘爆が無効化されます。
Увеличение продолжительности детонации боеприпасов. Это влияет как на боеприпасы в технике, так и на ящики с боеприпасами. \nУстановка значения 0 отключает детонацию боеприпасов.
차량과 탄약 상자 모두에 대해 탄약 유폭이 지속되는 시간에 대한 계수입니다.\n0으로 설정하면 차량과 탄약 상자 모두에 대해 탄약 유폭이 비활성화됩니다.
+ Coefficiente della durata di esplosioni delle munizioni, sia per veicoli che casse.\nImpostarlo su 0 disabilita esplosioni di veicoli e casse.
+ Multiplikator der Munitionsdurchzündungs-Dauer, gilt für Fahrzeuge und Munitionskisten.\nIhn auf 0 zu setzen wird Durchzünden deaktivieren.
Enable ammo removal during cook-off
@@ -141,6 +163,7 @@
誘爆によって全ての弾薬を除去します。
Все боеприпасы уничтожаются путем подрыва.
유폭 중 모든 탄약을 제거합니다.
+ Rimuovi le munizioni dal veicolo durante le esplosioni.
diff --git a/addons/csw/stringtable.xml b/addons/csw/stringtable.xml
index 7c241a8a51..da794376ab 100644
--- a/addons/csw/stringtable.xml
+++ b/addons/csw/stringtable.xml
@@ -263,7 +263,7 @@
インタラクションの所要時間係数
互動時間係數
交互时间系数
- Coefficente per il tempo di interazione
+ Coefficiente per il tempo di interazione
Koeficient času interakce
Współczynnik czasu interakcji
Coeficiente de tiempo de interacción
diff --git a/addons/grenades/stringtable.xml b/addons/grenades/stringtable.xml
index 04cc6d20e2..b0630e3a43 100644
--- a/addons/grenades/stringtable.xml
+++ b/addons/grenades/stringtable.xml
@@ -108,6 +108,8 @@
この手榴弾は転がせません、 %1 に切り替えます
Эта граната не может быть брошена, переключитесь на %1
이 수류탄은 굴릴 수 없습니다. %1(으)로 전환되었습니다.
+ Granate kann nicht rollen, zu %1 gewechselt
+ Granata non può rotolare, cambiato a %1
M84 Stun Grenade
diff --git a/addons/hitreactions/stringtable.xml b/addons/hitreactions/stringtable.xml
index 8cc25a53a5..ff541ad6a3 100644
--- a/addons/hitreactions/stringtable.xml
+++ b/addons/hitreactions/stringtable.xml
@@ -22,12 +22,16 @@
プレイヤーが武器を落とす確率 (腕部への被弾)
Шанс выпадения оружия у игрока (попадание в руку)
플레이어가 무기를 떨굴 확률 (팔 피격)
+ Spieler Wahrscheinlichkeit, die Waffe fallen zu lassen (Arm Treffer)
+ Probabilità dei giocatori di far cadere l'arma (colpo al braccio)
AI Weapon Drop Chance (Arm Hit)
AIが武器を落とす確率 (腕部への被弾)
Шанс выпадения оружия у ИИ (попадание в руку)
인공지능이 무기를 떨굴 확률 (팔 피격)
+ KI-Wahrscheinlichkeit, die Waffe fallen zu lassen (Arm Treffer)
+ Probabilità dell'IA di far cadere l'arma (colpo al braccio)
diff --git a/addons/killtracker/stringtable.xml b/addons/killtracker/stringtable.xml
index 64fedfe320..61db7afab5 100644
--- a/addons/killtracker/stringtable.xml
+++ b/addons/killtracker/stringtable.xml
@@ -122,10 +122,14 @@
Show vehicle kills to other crew members
Показать уничтоженные машины другим членам экипажа
+ Zeige der Fahrzeugbesatzung die Abschüsse des Fahrzeugs
+ Mostra uccisioni del veicolo a membri dell'equipaggio
Show kills from a vehicle to driver, gunner and commander
Показать уничтоженную технику водителю, стрелку и командиру
+ Zeige Abschüsse des Fahrzeugs dem Fahrer, Richtschützen und Kommandanten an
+ Mostra uccisioni del veicolo al pilota, artigliere e comandante
diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml
index 6593042d2a..930562434f 100644
--- a/addons/medical_treatment/stringtable.xml
+++ b/addons/medical_treatment/stringtable.xml
@@ -82,6 +82,8 @@
有効 & 死亡/心停止状態を診断可能 [直接的に]
Включено и может диагностировать смерть/остановку сердца [Напрямую]
활성화 및 사망/심정지 진찰 가능 [직접]
+ Aktiviert & kann Tod/Herzstillstand diagnostizieren [Direkt]
+ Abilitato e può diagnosticare Morte/Arresto Cardiaco [Esplicito]
Advanced Medication
@@ -4164,6 +4166,8 @@
%1 は意識がない
%1 находится без сознания
%1은(는) 의식불명입니다
+ %1 ist bewusstlos
+ %1 è privo di sensi
%1 is not responsive, taking shallow gasps and convulsing
@@ -4182,6 +4186,8 @@
%1 は心停止している
У %1 произошла остановка сердца
%1은(는) 심정지 상태입니다
+ %1 ist im Herzstillstand
+ %1 è in arresto cardiaco
%1 is not responsive, motionless and cold
@@ -4200,6 +4206,8 @@
%1 は死亡している
%1 мертв
%1은(는) 사망했습니다
+ %1 ist tod
+ %1 è morto
You checked %1
diff --git a/addons/microdagr/stringtable.xml b/addons/microdagr/stringtable.xml
index 786cb15b95..c9bd546afc 100644
--- a/addons/microdagr/stringtable.xml
+++ b/addons/microdagr/stringtable.xml
@@ -357,7 +357,7 @@
切換微型軍用GPS接收器顯示模式
- Show MicoDAGR
+ Show MicroDAGR
Zeige MicroDAGR
Mostrar MicroDAGR
Показать MicroDAGR
diff --git a/addons/overpressure/stringtable.xml b/addons/overpressure/stringtable.xml
index f981fbc009..74a6b3a54e 100644
--- a/addons/overpressure/stringtable.xml
+++ b/addons/overpressure/stringtable.xml
@@ -20,7 +20,7 @@
과중압력 거리 계수
Mnożnik dystansu nadciśnienia
Coefficient de distance pour la surpression
- Coefficente Distanza Sovrapressione
+ Coefficiente Distanza Sovrapressione
超压影响距离系数
高壓影響距離係數
Коэф. избыточного давления
@@ -48,10 +48,14 @@
Backblast Distance Coefficient
Коэффициент расстояния рекативной струи
+ Rückstrahl-Entfernung Multiplikator
+ Coefficiente distanza di svampata
Scales the backblast effect
Масштабирует эффект реактивной струи
+ Skaliert den Rückstrahl-Effekt
+ Scala l'effetto delle svampate dei lanciarazzi
Backblast range
diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml
index 5fc19bb9bf..70b78e6d25 100644
--- a/addons/realisticnames/stringtable.xml
+++ b/addons/realisticnames/stringtable.xml
@@ -704,6 +704,8 @@
KamAZ 給水
КамАЗ (водоноситель)
카마즈 급수
+ KamAS Wasser
+ KamAZ Acqua
KamAZ MRL
@@ -1668,6 +1670,8 @@
CZ 581
CZ 581
CZ 581
+ CZ 581
+ CZ 581
CZ 581 (Sawed-Off)
@@ -1675,6 +1679,8 @@
CZ 581 (ソードオフ)
CZ 581 (Sawed-Off)
CZ 581 (소드오프)
+ CZ 581 (Abgesägt)
+ CZ 581 (Canne mozze)
FNX-45 Tactical (Green)
@@ -3083,6 +3089,8 @@
Type 115 (ブラック)
Type 115 (чёрный)
115식 보총 (검정)
+ Type 115 (Schwarz)
+ Type 115 (Nero)
Type 115 (Green Hex)
@@ -3090,6 +3098,8 @@
Type 115 (緑六角形迷彩)
Type 115 (зелёный гекс)
115식 보총 (초록육각)
+ Type 115 (Hex Grün)
+ Type 115 (Hex Verde)
Type 115 (Hex)
@@ -3097,6 +3107,8 @@
Type 115 (六角形迷彩)
Type 115 (гекс)
115식 보총 (육각)
+ Type 115 (Hex)
+ Type 115 (Hex)
QBZ-95-1 (Black)
@@ -3888,6 +3900,8 @@
UTG ディフェンダー 126
UTG Defender 126
UTG 디펜더 126
+ UTG Defender 126
+ UTG Defender 126
EOTech MRDS
@@ -3895,6 +3909,8 @@
EOTech MRDS
EOTech MRDS
이오텍 MRDS
+ EOTech MRDS
+ EOTech MRDS
EOTech MRDS (Black)
@@ -3902,6 +3918,8 @@
EOTech MRDS (ブラック)
EOTech MRDS (чёрный)
이오텍 MRDS (검정)
+ EOTech MRDS (Schwarz)
+ EOTech MRDS (Nero)
Leupold Mark 4 HAMR
diff --git a/addons/zeus/stringtable.xml b/addons/zeus/stringtable.xml
index 59597da0b4..28a73213ca 100644
--- a/addons/zeus/stringtable.xml
+++ b/addons/zeus/stringtable.xml
@@ -2004,7 +2004,7 @@
+ Shift 키로 강제하기 (동서남북 방향으로만 깔 수 있음)
+MAJ pour forcer (Disponible uniquement sur les alignements N/S ou E/O)
+SHIFT zum Erzwingen (Kann nur nach N/S oder E/W legen)
- +SHIFT per forzare (Può piazzare solo N/S o E/O
+ +SHIFT per forzare (Può piazzare solo N/S o E/O)
+SHIFTキー で強制的に敷設 (北/南または東/西方向にのみ配置可能)
+SHIFT на принудительное (может укладываться только на Север/Юг или Восток/Запад)
+SHIFT para forzar (Puede solo colocar en N/S or E/O)
@@ -2014,42 +2014,56 @@
観戦インターフェイスを強制し、ユーザーがEscキーでも閉じられないようにします。
Активирует интерфейс spectator, не позволяя игроку закрыть его с помощью клавиши Escape.
플레이어가 Esc 키로 관전자 인터페이스를 닫지 못하도록 강제로 관전자 인터페이스를 설정합니다.
+ Erzwingt die Zuschauer-Ansicht und verhindert dass der Spieler sie mit der Esc-Taste schließen kann
+ Forza l'interfaccia di spettatore, impedendo al giocatore di chiuderla con il tasto Esc
Hide player
プレイヤーを隠す
Скрыть игрока
플레이어 숨기기
+ Spieler ausblenden
+ Nascondi giocatore
Hides the player by making them invisible, invulnerable, muted, and removing them from their group
透明化、無敵化、ミュート、グループからの除外を行いプレーヤーを隠します
Скрывает игрока, делая его невидимым, неуязвимым, отключая звук и удаляя из группы.
플레이어를 투명, 무적, 음소거화하고 그룹에서 제거하여 숨깁니다.
+ Blendet den Spieler aus, macht ihn unsichtbar, unverwundbar, stumm und entfernt ihn von seiner Gruppe
+ Nasconde il giocatore, rendendolo invisibile, invulnerabile, muto e lo rimuove dal proprio gruppo
Sets the sides that are available to spectate
指定の陣営を観戦可能に設定します
Устанавливает стороны, доступные для режима spectator
관전 가능한 진영을 설정합니다.
+ Bestimmt die Seiten denen man zuschauen kann
+ Imposta le fazioni che lo spettatore può osservare
White Hot
白=熱源
Белый
백색 열원
+ Weiß-Schwarz
+ Bianco-caldo
Black Hot
黒=熱源
Чёрный
흑색 열원
+ Schwarz-Weiß
+ Nero-caldo
Toggle All
全てを切り替え
Выключить все
전부 토글
+ Alle wechseln
+ Cambia tutti
From ad4af0d5537504ce287776b3b3c00d112d74930a Mon Sep 17 00:00:00 2001
From: Apricot <50947830+Apricot-ale@users.noreply.github.com>
Date: Wed, 26 Jun 2024 11:43:24 +0900
Subject: [PATCH 18/36] Translations - Improve Japanese
(killtracker/overpressure) (#10088)
killtracker/overpressure
---
addons/killtracker/stringtable.xml | 14 ++++++++------
addons/overpressure/stringtable.xml | 12 +++++++-----
2 files changed, 15 insertions(+), 11 deletions(-)
diff --git a/addons/killtracker/stringtable.xml b/addons/killtracker/stringtable.xml
index 61db7afab5..b7a97df15a 100644
--- a/addons/killtracker/stringtable.xml
+++ b/addons/killtracker/stringtable.xml
@@ -6,7 +6,7 @@
ACE Tracciatore di Uccisioni
ACE Kill Tracker
ACE Отслеживание убийств
- ACE キルトラッカー
+ ACE キル追跡
ACE 킬트래커
ACE Suivi des morts
ACE Abschüsse
@@ -30,7 +30,7 @@
Всего убийств:
Liczba zabójstw:
Toplam Öldürme:
- 総キル:
+ 合計キル数:
Gesammte Abschüsse:
Uccisioni Totali:
总击杀数:
@@ -44,7 +44,7 @@
Убил: %1 %2
Zabójstwo: %1 %2
Öldürülen: %1 %2
- キル: %1 %2
+ 殺害: %1 %2
Abschuss: %1 %2
Uccisione: %1 %2
击杀:%1 %2
@@ -58,7 +58,7 @@
Убийца: %1 %2
Zabójca: %1 %2
Öldüren: %1 %2
- キラー: %1 %2
+ 殺害者: %1 %2
Täter: %1 %2
Uccisore: %1 %2
击杀者:%1 %2
@@ -102,7 +102,7 @@
Traccia IA uccise da giocatori
Sledovat AI zabité hráči
Отслеживание юнитов ИИ, убитых игроком
- プレイヤーに殺害されたAIユニットを追跡
+ プレイヤーがキルしたAIユニットを追跡
플레이어가 죽인 AI 트래킹
Suivi de l'IA tuée par les joueurs
Zähle vom Spieler getöteten KI-Einheiten
@@ -113,7 +113,7 @@
Determina se IA uccise verranno visualizzate nel tracciatore durante il debriefing della missione.
Udává zdali se zabité AI budou ukazovat v kill trackeru v průběhu debriefingu po misi.
Определяет, будут ли убитые ИИ отображаться в трекере убийств во время дебрифинга миссии.
- ミッションデブリーフィングのキルトラッカーに殺害されたAIが表示されるかどうかを定義します。
+ キルしたAIをミッション終了デブリーフィング画面に表示させるかどうかを定義します。
사후강평 중 살해된 AI가 킬트래킹에 표시되는지 여부를 정의합니다.
Définit si les IA tuées seront affichées dans le tracker pendant le débriefing de la mission.
Legt fest, ob getötete KIs während des Endbildschirms der Mission in den Abschüssen angezeigt werden.
@@ -124,12 +124,14 @@
Показать уничтоженные машины другим членам экипажа
Zeige der Fahrzeugbesatzung die Abschüsse des Fahrzeugs
Mostra uccisioni del veicolo a membri dell'equipaggio
+ 車両でのキルを乗員全員に表示する
Show kills from a vehicle to driver, gunner and commander
Показать уничтоженную технику водителю, стрелку и командиру
Zeige Abschüsse des Fahrzeugs dem Fahrer, Richtschützen und Kommandanten an
Mostra uccisioni del veicolo al pilota, artigliere e comandante
+ 車両でのキルを操縦手、砲手、車長で共有して表示する
diff --git a/addons/overpressure/stringtable.xml b/addons/overpressure/stringtable.xml
index 74a6b3a54e..0d43f01825 100644
--- a/addons/overpressure/stringtable.xml
+++ b/addons/overpressure/stringtable.xml
@@ -8,7 +8,7 @@
Sovrapressione
과중압력
Nadciśnienie
- 過圧
+ 超過圧力
Перегрузка
Sobrepresiòn
Surpression
@@ -16,7 +16,7 @@
Overpressure Distance Coefficient
Überdruckentfernungskoeffizient
- 過圧の距離係数
+ 超過圧力の距離係数
과중압력 거리 계수
Mnożnik dystansu nadciśnienia
Coefficient de distance pour la surpression
@@ -32,7 +32,7 @@
Scales the overpressure effect
Stellt den Koeffizient für die Überdruckentfernung ein
- 過圧効果の範囲
+ 火砲による超過圧力の影響範囲の大きさ
과중압력의 효과 크기
Skaluje efekt nadciśnienia
Ajuste l'effet de surpression
@@ -50,17 +50,19 @@
Коэффициент расстояния рекативной струи
Rückstrahl-Entfernung Multiplikator
Coefficiente distanza di svampata
+ 後方噴射の距離係数
Scales the backblast effect
Масштабирует эффект реактивной струи
Skaliert den Rückstrahl-Effekt
Scala l'effetto delle svampate dei lanciarazzi
+ 無反動砲による後方噴射の影響範囲の大きさ
Backblast range
Rückstrahlzone
- 後方噴射の範囲
+ 後方噴射範囲
向后喷射的范围
後方尾焰的範圍
Raggio della fiammata [lanciarazzi]
@@ -76,7 +78,7 @@
Backblast angle
Rückstrahlwinkel
- 後方噴射の角度
+ 後方噴射角度
向后喷射的角度
後方尾焰的角度
Angolo della fiammata [lanciarazzi]
From bfa23f01db9a9f70918b2768ea0dfd259b7f3c8e Mon Sep 17 00:00:00 2001
From: johnb432 <58661205+johnb432@users.noreply.github.com>
Date: Wed, 26 Jun 2024 14:02:19 +0200
Subject: [PATCH 19/36] Refuel - Remove unused variable (#10089)
Update XEH_postInit.sqf
---
addons/refuel/XEH_postInit.sqf | 1 -
1 file changed, 1 deletion(-)
diff --git a/addons/refuel/XEH_postInit.sqf b/addons/refuel/XEH_postInit.sqf
index f6f5a7d7b3..d007266e5f 100644
--- a/addons/refuel/XEH_postInit.sqf
+++ b/addons/refuel/XEH_postInit.sqf
@@ -49,7 +49,6 @@
private _halfWorldSize = worldSize / 2;
private _worldCenter = [_halfWorldSize, _halfWorldSize];
_halfWorldSize = _halfWorldSize * sqrt 2;
- private _refuelMissionObjects = allMissionObjects "" select {getFuelCargo _x > 0};
private _baseStaticClasses = keys (uiNamespace getVariable QGVAR(cacheRefuelClassesBaseStatic));
{
From a30afe69b71d6c13fd0c977e50755f194ee60973 Mon Sep 17 00:00:00 2001
From: johnb432 <58661205+johnb432@users.noreply.github.com>
Date: Fri, 28 Jun 2024 14:41:04 +0200
Subject: [PATCH 20/36] Interaction - Disable magazine passing to dead and
unconscious units (#10091)
* Disable magazine passing to dead units
* Disable for unconscious units as well
---
addons/interaction/functions/fnc_canPassMagazine.sqf | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/addons/interaction/functions/fnc_canPassMagazine.sqf b/addons/interaction/functions/fnc_canPassMagazine.sqf
index 9d0bed083d..97478bffa7 100644
--- a/addons/interaction/functions/fnc_canPassMagazine.sqf
+++ b/addons/interaction/functions/fnc_canPassMagazine.sqf
@@ -19,7 +19,7 @@
params ["_player", "_target", "_weapon"];
if (!GVAR(enableMagazinePassing)) exitWith {false};
-if (_weapon isEqualTo "") exitWith {false};
+if (_weapon isEqualTo "" || {!(_target call EFUNC(common,isAwake))}) exitWith {false};
if (((vehicle _target) != _target) && {(vehicle _target) != (vehicle _player)}) exitWith {false};
private _compatibleMags = [_weapon] call CBA_fnc_compatibleMagazines;
From cb40c8ec5dfd81c210c394eb67f237de590aac0c Mon Sep 17 00:00:00 2001
From: johnb432 <58661205+johnb432@users.noreply.github.com>
Date: Fri, 28 Jun 2024 19:43:13 +0200
Subject: [PATCH 21/36] Vehicle damage - Add missing documentation (#10093)
Update vehicledamage-framework.md
---
docs/wiki/framework/vehicledamage-framework.md | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/docs/wiki/framework/vehicledamage-framework.md b/docs/wiki/framework/vehicledamage-framework.md
index 0d4268bf5e..04137e9c73 100644
--- a/docs/wiki/framework/vehicledamage-framework.md
+++ b/docs/wiki/framework/vehicledamage-framework.md
@@ -65,23 +65,29 @@ Default: 0.2
#### 1.1.8 `ace_vehicle_damage_canHaveFireRing`
-Whether or not this vehicle can spawn `ring-of-fire` effect (Boolean value: 0 or 1)
+Whether or not this vehicle can spawn a `ring-of-fire` effect (Boolean value: 0 or 1)
Default: 0
-#### 1.1.9 `ace_vehicle_damage_slatHitpoints`
+#### 1.1.9 `ace_cookoff_canHaveFireJet`
+
+Whether or not this vehicle can spawn a `jet` effect (Boolean value: 0 or 1)
+
+Default: 0
+
+#### 1.1.10 `ace_vehicle_damage_slatHitpoints`
An array of all hitpoints that are defined to be SLAT. String array
Default: {}
-#### 1.1.10 `ace_vehicle_damage_eraHitpoints`
+#### 1.1.11 `ace_vehicle_damage_eraHitpoints`
An array of all hitpoints that are defined to be ERA. String array
Default: {}
-#### 1.1.11 `ace_vehicle_damage_turret`
+#### 1.1.12 `ace_vehicle_damage_turret`
String for turret classname to spawn when catastrophically destroyed. Turret will pop-off and this is the class spawned
From 71afce53c1bde666369344652a30a71ec8ad751a Mon Sep 17 00:00:00 2001
From: johnb432 <58661205+johnb432@users.noreply.github.com>
Date: Mon, 1 Jul 2024 18:56:00 +0200
Subject: [PATCH 22/36] Dogtags - Make "Dog Tag" consistent (#10099)
Make Dog Tag consistent
---
addons/dogtags/stringtable.xml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/addons/dogtags/stringtable.xml b/addons/dogtags/stringtable.xml
index d19c61f505..73d2d07e56 100644
--- a/addons/dogtags/stringtable.xml
+++ b/addons/dogtags/stringtable.xml
@@ -66,7 +66,7 @@
Al
- Dogtag taken from %1...
+ Dog Tag taken from %1...
Zabrałeś nieśmiertelnik %1...
Жетон снят с %1...
Sebral jsem známku od %1...
@@ -82,7 +82,7 @@
Künye %1 kişisinden alındı
- Somebody else has already taken the dogtag...
+ Somebody else has already taken the Dog Tag...
Ktoś już zabrał ten nieśmiertelnik...
Кто-то уже забрал жетон...
Někdo jiný už vzal identifikační známku...
@@ -98,7 +98,7 @@
Başka biri zaten künyeyi almış
- Onscreen display for checking dogtags
+ Onscreen display for checking Dog Tags
Anzeige um Erkennungsmarke zu überprüfen
在畫面中顯示檢查兵籍牌
在画面中显示检查兵籍牌
From ba47c12a974200262d07f70057e1c6a9bdd0d7e8 Mon Sep 17 00:00:00 2001
From: johnb432 <58661205+johnb432@users.noreply.github.com>
Date: Tue, 2 Jul 2024 11:16:27 +0200
Subject: [PATCH 23/36] Dogtags - Drop dogtag on ground if unit doesn't have
inventory space (#10094)
* Drop dogtag on ground if unit doesn't have inventory space
* Only allow taking of dogtags if unit has space
---
addons/dogtags/functions/fnc_addDogtagItem.sqf | 3 ++-
addons/dogtags/functions/fnc_canTakeDogtag.sqf | 2 +-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/addons/dogtags/functions/fnc_addDogtagItem.sqf b/addons/dogtags/functions/fnc_addDogtagItem.sqf
index 970bb1926e..803c54d82f 100644
--- a/addons/dogtags/functions/fnc_addDogtagItem.sqf
+++ b/addons/dogtags/functions/fnc_addDogtagItem.sqf
@@ -20,7 +20,8 @@ params ["_item", "_dogtagData"];
if (_item == "") exitWith {};
-[ace_player, _item] call CBA_fnc_addItem;
+// Verify that the unit has inventory space, otherwise drop the dogtag on the ground
+[ace_player, _item, true] call CBA_fnc_addItem;
_dogtagData params ["_nickName"];
private _displayText = format [localize LSTRING(takeDogtagSuccess), _nickName];
diff --git a/addons/dogtags/functions/fnc_canTakeDogtag.sqf b/addons/dogtags/functions/fnc_canTakeDogtag.sqf
index c482d74c1c..815aeb7a79 100644
--- a/addons/dogtags/functions/fnc_canTakeDogtag.sqf
+++ b/addons/dogtags/functions/fnc_canTakeDogtag.sqf
@@ -23,4 +23,4 @@ if (isNull _target) exitWith {false};
// check if disabled for faction
if ((faction _target) in GVAR(disabledFactions)) exitWith {false};
-(!alive _target) || {_target getVariable ["ACE_isUnconscious", false]}
+((!alive _target) || {_target getVariable ["ACE_isUnconscious", false]}) && {_player canAdd ["ACE_dogtag", 1/*, true*/]} // Todo: Uncomment in 2.18
From aecafe673bc7020857fad7aaa2941a182be6c935 Mon Sep 17 00:00:00 2001
From: Fabio Schick <58027418+mrschick@users.noreply.github.com>
Date: Tue, 2 Jul 2024 11:16:48 +0200
Subject: [PATCH 24/36] Aircraft - Drone "Follow Unit" Waypoint Action (#9889)
* Fix "Recharge" interaction showing on destroyed drone
* Add "Follow Unit" action
* Improve condition check
* UGV Following via PFH that updates WP Pos
* Use HOLD WP for all Follow Actions
Since FOLLOW WP would stop working on AI Soldiers after some time.
* Allow selecting a follow distance
* Follow Distance under separate interaction, just like Loiter Alt
Only visible when a HOLD waypoint is selected, which is pretty much always going to have been created by the "Follow" interaction.
* Localize "Follow" Interaction
* Show structuredText Hint when following/changing distance
* Variable for cursorTarget Reuse
* Better isKindOf condition use
* Make "Ship"-kind vehicles followable
* Clean up Comments and systemChat Debugs
* Comment explanation for custom PFH solution over vanilla "Follow"-WP
* Trim excess brackets from setWaypointPosition argument
Co-Authored-By: johnb432 <58661205+johnb432@users.noreply.github.com>
* Broader determination for UGV follow distances
Co-Authored-By: PabstMirror
* Prevent infinite PFH loop if follow target is deleted
Co-Authored-By: PabstMirror
* Delete Follow WP when PFH terminates
* The ternary rules
Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com>
* Various requested changes
Co-Authored-By: johnb432 <58661205+johnb432@users.noreply.github.com>
---------
Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com>
Co-authored-by: PabstMirror
---
.../functions/fnc_droneAddActions.sqf | 61 +++++++++++++++++--
.../functions/fnc_droneSetWaypoint.sqf | 32 +++++++++-
addons/aircraft/stringtable.xml | 10 +++
.../functions/fnc_canRefuelUAV.sqf | 2 +-
4 files changed, 95 insertions(+), 10 deletions(-)
diff --git a/addons/aircraft/functions/fnc_droneAddActions.sqf b/addons/aircraft/functions/fnc_droneAddActions.sqf
index 38ca53e4c6..895004f0e9 100644
--- a/addons/aircraft/functions/fnc_droneAddActions.sqf
+++ b/addons/aircraft/functions/fnc_droneAddActions.sqf
@@ -22,7 +22,7 @@ if (!alive _vehicle) exitWith {};
if (_vehicle getVariable [QGVAR(droneActionsAdded), false]) exitWith {};
_vehicle setVariable [QGVAR(droneActionsAdded), true];
-// move to location
+// Move to location
private _condition = {
params ["_vehicle"];
(missionNamespace getVariable [QGVAR(droneWaypoints), true]) && {waypointsEnabledUAV _vehicle} && {(ACE_controlledUAV select 2) isEqualTo [0]}
@@ -37,14 +37,63 @@ private _action = [QGVAR(droneSetWaypointMove), localize "$STR_AC_MOVE",
"\a3\3DEN\Data\CfgWaypoints\Move_ca.paa", _statement, _condition] call EFUNC(interact_menu,createAction);
[_vehicle, 1, ["ACE_SelfActions"], _action] call EFUNC(interact_menu,addActionToObject);
+// Follow unit/vehicle at turret location
+_condition = {
+ params ["_vehicle"];
+ private _target = cursorTarget;
+ (missionNamespace getVariable [QGVAR(droneWaypoints), true]) && {waypointsEnabledUAV _vehicle} && {(ACE_controlledUAV select 2) isEqualTo [0]} && {!isNull _target} && {["CAManBase", "LandVehicle", "Ship"] findIf {_target isKindOf _x} != -1}
+};
+_statement = {
+ params ["_vehicle"];
+ private _group = group driver _vehicle;
+ private _pos = ([_vehicle, [0]] call FUNC(droneGetTurretTargetPos)) select 0;
+ [QGVAR(droneSetWaypoint), [_vehicle, _group, _pos, "FOLLOW", cursorTarget], _group] call CBA_fnc_targetEvent;
+ private _followDistance = _vehicle getVariable [QGVAR(wpFollowDistance), 0];
+ [[LLSTRING(DroneFollowHint), _followDistance], 3] call EFUNC(common,displayTextStructured);
+};
+_action = [QGVAR(droneSetWaypointFollow), localize "$STR_AC_FOLLOW", "\a3\3DEN\Data\CfgWaypoints\Follow_ca.paa", _statement, _condition] call EFUNC(interact_menu,createAction);
+[_vehicle, 1, ["ACE_SelfActions"], _action] call EFUNC(interact_menu,addActionToObject);
+
+// Set drone follow distance
+_condition = {
+ params ["_vehicle"];
+ private _group = group driver _vehicle;
+ private _index = (currentWaypoint _group) min count waypoints _group;
+ private _waypoint = [_group, _index];
+ (missionNamespace getVariable [QGVAR(droneWaypoints), true]) && {waypointsEnabledUAV _vehicle} && {(ACE_controlledUAV select 2) isEqualTo [0]} && {(waypointType _waypoint) == "HOLD"}
+};
+_statement = {
+ params ["_vehicle", "", "_value"];
+ _vehicle setVariable [QGVAR(wpFollowDistance), _value];
+ [[LLSTRING(DroneFollowHint), _value], 3] call EFUNC(common,displayTextStructured);
+};
+_action = [QGVAR(droneSetFollowDistance), LLSTRING(DroneFollowDistance), "", {}, _condition] call EFUNC(interact_menu,createAction);
+private _base = [_vehicle, 1, ["ACE_SelfActions"], _action] call EFUNC(interact_menu,addActionToObject);
+private _followDistances = if (_vehicle isKindOf "Car_F") then {
+ [0, 25, 50, 100, 200]
+} else {
+ [0, 100, 200, 300, 400, 500]
+};
+{
+ _action = [
+ QGVAR(droneSetFollowDistance_) + str _x,
+ str _x,
+ "",
+ _statement,
+ {true},
+ {},
+ _x
+ ] call EFUNC(interact_menu,createAction);
+ [_vehicle, 1, _base, _action] call EFUNC(interact_menu,addActionToObject);
+} forEach _followDistances;
if (_vehicle isKindOf "Air") then {
- // loiter at location
+ // Loiter at location
_condition = {
params ["_vehicle"];
(missionNamespace getVariable [QGVAR(droneWaypoints), true]) && {waypointsEnabledUAV _vehicle} && {(ACE_controlledUAV select 2) isEqualTo [0]}
};
- _statement = {
+ _statement = {
params ["_vehicle"];
private _group = group driver _vehicle;
private _pos = ([_vehicle, [0]] call FUNC(droneGetTurretTargetPos)) select 0;
@@ -55,7 +104,7 @@ if (_vehicle isKindOf "Air") then {
[_vehicle, 1, ["ACE_SelfActions"], _action] call EFUNC(interact_menu,addActionToObject);
- // set height
+ // Set height
_condition = {
params ["_vehicle"];
(missionNamespace getVariable [QGVAR(droneWaypoints), true]) && {waypointsEnabledUAV _vehicle} && {(ACE_controlledUAV select 2) isEqualTo [0]}
@@ -74,7 +123,7 @@ if (_vehicle isKindOf "Air") then {
} forEach [20, 50, 200, 500, 2000];
- // set loiter radius
+ // Set loiter radius
_condition = {
params ["_vehicle"];
private _group = group driver _vehicle;
@@ -97,7 +146,7 @@ if (_vehicle isKindOf "Air") then {
} forEach [500, 750, 1000, 1250, 1500];
- // set loiter direction
+ // Set loiter direction
_condition = {
params ["_vehicle", "", "_args"];
private _group = group driver _vehicle;
diff --git a/addons/aircraft/functions/fnc_droneSetWaypoint.sqf b/addons/aircraft/functions/fnc_droneSetWaypoint.sqf
index 5ffbbae825..953b99a357 100644
--- a/addons/aircraft/functions/fnc_droneSetWaypoint.sqf
+++ b/addons/aircraft/functions/fnc_droneSetWaypoint.sqf
@@ -8,6 +8,7 @@
* 1: Group
* 2: Pos 2D
* 3: Type
+ * 4: Target to follow (default: objNull)
*
* Return Value:
* None
@@ -18,7 +19,7 @@
* Public: No
*/
-params ["_vehicle", "_group", "_pos", "_type"];
+params ["_vehicle", "_group", "_pos", "_type", ["_target", objNull]];
TRACE_4("droneSetWaypoint",_vehicle,_group,_pos,_type);
private _index = (currentWaypoint _group) min count waypoints _group;
@@ -34,9 +35,34 @@ _pos set [
[0, _currentHeight] select (_currentHeight >= 50)
];
-// [_group] call CBA_fnc_clearWaypoints;
_waypoint = _group addWaypoint [_pos, 0];
-_waypoint setWaypointType _type;
+// The Vanilla "FOLLOW"-type waypoint is not used directly, due to 2 main issues (as of v2.16):
+// - It does not work at all for UGVs, which is a known issue https://feedback.bistudio.com/T126283;
+// - No clear scripting way was found to mimic the UAV Terminal's "Follow Distance" functionality;
+// Instead, the solution for both UAV and UGV following consists of a CBA PFH that moves a "HOLD"-type Waypoint every 3 seconds.
+// Either on the target itself, or on the Drone's current position if the target is within the desired follow distance.
+if (_type == "FOLLOW" && {["CAManBase", "LandVehicle", "Ship"] findIf {_target isKindOf _x} != -1}) then {
+ _waypoint setWaypointType "HOLD";
+ [{
+ params ["_args", "_handle"];
+ _args params ["_vehicle", "_group", "_waypoint", "_target"];
+
+ if ( // Abort PFH if a new waypoint is created via UAV Terminal or ACE Interaction
+ _waypoint select 1 != currentWaypoint _group ||
+ {!alive _vehicle} || {isNull _target}
+ ) exitWith {
+ deleteWaypoint _waypoint;
+ [_handle] call CBA_fnc_removePerFrameHandler;
+ };
+
+ private _followDistance = _vehicle getVariable [QGVAR(wpFollowDistance), 0];
+ if ((_vehicle distance2D _target) < _followDistance) then {
+ _waypoint setWaypointPosition [getPosASL _vehicle, -1];
+ } else {
+ _waypoint setWaypointPosition [getPosASL _target, -1];
+ };
+ }, 3, [_vehicle, _group, _waypoint, _target]] call CBA_fnc_addPerFrameHandler;
+};
TRACE_3("",_currentHeight,_currentLoiterRadius,_currentLoiterType);
if (_currentHeight > 1) then { _vehicle flyInHeight _currentHeight; };
diff --git a/addons/aircraft/stringtable.xml b/addons/aircraft/stringtable.xml
index c0cef87756..a60706aad3 100644
--- a/addons/aircraft/stringtable.xml
+++ b/addons/aircraft/stringtable.xml
@@ -177,5 +177,15 @@
30мм СБ 5:1
30mm CM 5:1
+
+ Follow Distance
+ Distanza di seguimento
+ Folge-Entfernung
+
+
+ Following unit within %1m
+ Seguendo unità entro %1m
+ Folgt Einheit bis zu %1m
+
diff --git a/addons/logistics_uavbattery/functions/fnc_canRefuelUAV.sqf b/addons/logistics_uavbattery/functions/fnc_canRefuelUAV.sqf
index 3e7ce4f15c..925178d642 100644
--- a/addons/logistics_uavbattery/functions/fnc_canRefuelUAV.sqf
+++ b/addons/logistics_uavbattery/functions/fnc_canRefuelUAV.sqf
@@ -18,4 +18,4 @@
params ["_caller", "_target"];
-("ACE_UAVBattery" in (_caller call EFUNC(common,uniqueItems))) && {(fuel _target) < 1} && {(speed _target) < 1} && {!(isEngineOn _target)} && {(_target distance _caller) <= 4}
+(alive _target) && {"ACE_UAVBattery" in (_caller call EFUNC(common,uniqueItems))} && {(fuel _target) < 1} && {(speed _target) < 1} && {!(isEngineOn _target)} && {(_target distance _caller) <= 4}
From 45f9301019e31e04c46154b3fc7fe81f15903407 Mon Sep 17 00:00:00 2001
From: Psycool <104776717+Psycool3695@users.noreply.github.com>
Date: Wed, 3 Jul 2024 03:14:19 +0900
Subject: [PATCH 25/36] Korean translation updated (#10104)
* KoreanTranslation
Someone has returned all the translations in Korean to English. there is no need to return them.
* koreantranslation
* Korean Typo Fix
* Korean Translation
* Update stringtable.xml
* Korean Translation Added
Added Korean translation related to Cargo Refuel
* Merge branch 'master' of https://github.com/Psycool3695/ACE3
* Korean translation Add/Updated
* Fixed wrong strings
* Korean translation improved
* Korean translation updated
* Korean translation updated
* Fix Merge
* Update stringtable.xml
* Update stringtable.xml
* Korean translation updated
* Korean translation minor fix
* Korean translation fixed
* Korean translation updated
* Update stringtable.xml
* Spacing fixed
* Korean translation updated
* Spacing fixed
* Korean translation updated
* Korean translation updated
* Korean translation updated
---------
Co-authored-by: PabstMirror
---
addons/aircraft/stringtable.xml | 10 ++++---
addons/ballistics/stringtable.xml | 16 ++++++------
.../compat_rf_realisticnames/stringtable.xml | 2 ++
addons/concertina_wire/stringtable.xml | 2 +-
addons/killtracker/stringtable.xml | 2 ++
addons/overpressure/stringtable.xml | 2 ++
addons/realisticnames/stringtable.xml | 26 +++++++++----------
7 files changed, 34 insertions(+), 26 deletions(-)
diff --git a/addons/aircraft/stringtable.xml b/addons/aircraft/stringtable.xml
index a60706aad3..01c5b41e36 100644
--- a/addons/aircraft/stringtable.xml
+++ b/addons/aircraft/stringtable.xml
@@ -129,7 +129,7 @@
30mm コンバット ミックス 4:1 劣化ウラン徹甲弾:焼夷榴弾
30mm Bojový Mix 4:1 DU:HEI
30мм Смешанное боепитание 4:1 ОУ:ОФЗ
- 30mm 4:1 열화:고폭소이
+ 30mm 열화우라늄:고폭소이 4:1 혼합
30mm Mix de Combate 4:1 DU:AEI
@@ -145,7 +145,7 @@
30mm CM 4:1
30mm BM 4:1
30мм СБ 4:1
- 30mm CM 4:1
+ 30mm 4:1 혼합
30mm Combat Mix 5:1 DU:HEI
@@ -160,7 +160,7 @@
30mm コンバット ミックス 5:1 劣化ウラン徹甲弾:焼夷榴弾
30mm Bojový Mix 5:1 DU:HEI
30мм Смешанное боепитание 5:1 ОУ:ОФЗ
- 30mm 5:1 열화:고폭소이
+ 30mm 열화우라늄:고폭소이 5:1 혼합
30mm CM 5:1
@@ -175,17 +175,19 @@
30mm CM 5:1
30mm BM 5:1
30мм СБ 5:1
- 30mm CM 5:1
+ 30mm 5:1 혼합
Follow Distance
Distanza di seguimento
Folge-Entfernung
+ 따라가는 거리
Following unit within %1m
Seguendo unità entro %1m
Folgt Einheit bis zu %1m
+ %1m 이내로 유닛을 따라갑니다
diff --git a/addons/ballistics/stringtable.xml b/addons/ballistics/stringtable.xml
index a4c67c68d5..7137735233 100644
--- a/addons/ballistics/stringtable.xml
+++ b/addons/ballistics/stringtable.xml
@@ -1505,7 +1505,7 @@
Carregador de 10 cartuchos 9.3 mm traçantes IR-DIM
9,3 mm 10-lövedékes infravörös nyomkövető tár
9.3mm 10Rnd IR-DIM トレーサー マガジン
- 10발들이 9.3mm IR-DIM 예광탄 탄창
+ 10발 들이 9.3mm IR-DIM 예광탄 탄창
9.3毫米 10發 低視度紅外線曳光彈 彈匣
9.3 mm 10发 弹匣(红外曳光)
9.3 mm 10Rnd Tracer IR-DIM Mag
@@ -1608,7 +1608,7 @@
Cinto de munição traçante 9.3 mm IR-DIM com 150 cartuchos
9,3 mm 150-lövedékes infravörös nyomkövető heveder
9.3mm 150Rnd IR-DIM トレーサー ベルト
- 150발들이 9.3mm IR-DIM 예광탄 벨트
+ 150발 들이 9.3mm IR-DIM 예광탄 벨트
9.3毫米 150發 低視度紅外線曳光彈 彈鏈
9.3 mm 150发 弹链(红外曳光)
9.3 mm 150Rnd Tracer IR-DIM Belt
@@ -1659,7 +1659,7 @@
Cinto de munição 9.3 mm AP com 150 cartuchos
9,3 mm 150-lövedékes páncéltörő heveder
9.3mm 150Rnd 徹甲弾 ベルト
- 150발들이 9.3mm 철갑탄 벨트
+ 150발 들이 9.3mm 철갑탄 벨트
9.3毫米 150發 穿甲彈 彈鏈
9.3 mm 150发 弹链(穿甲)
9.3 mm 150Rnd AP Belt
@@ -1710,7 +1710,7 @@
Carregador de 16 cartuchos 9x19 mm
9x19 mm 16-lövedékes tár
9x19 mm 16Rnd マガジン
- 17발들이 9x19mm 탄창
+ 16발 들이 9x19mm 탄창
9x19毫米 16發 彈匣
9x19 mm 16发 弹匣
9x19 mm 16Rnd Mag
@@ -2016,7 +2016,7 @@
Carregador 5.56 mm com 30 cartuchos (Mk318)
5,56 mm 30-lövedékes tár (Mk318)
5.56mm 30Rnd マガジン (Mk318)
- 30발들이 5.56mm 탄창 (Mk.318)
+ 30발 들이 5.56mm 탄창 (Mk.318)
5.56毫米 30發 彈匣 (Mk318 特戰專用彈)
5.56 mm 30发 弹匣(Mk318)
5.56 mm 30Rnd Mag (Mk318)
@@ -2322,7 +2322,7 @@
Carregador 7.62 mm com 10 cartuchos (Mk319 Mod 0)
7,62 mm 10-lövedékes tár (Mk319 Mod 0)
7.62mm 10Rnd マガジン (Mk319 Mod 0)
- 10발들이 7.62mm 탄창 (Mk.319 Mod 0)
+ 10발 들이 7.62mm 탄창 (Mk.319 Mod 0)
7.62毫米 10發 彈匣 (Mk319 Mod 0 特戰專用彈)
7.62 mm 10发 弹匣(Mk319 Mod 0)
7.62 mm 10Rnd Mag (Mk319 Mod 0)
@@ -3344,7 +3344,7 @@
Carregador 12.7x99 mm (AMAX) com 5 cartuchos
12,7x99 mm 5-lövedékes tár (AMAX)
12.7x99mm 5Rnd マガジン (AMAX)
- 5발들이 12.7x99mm 탄창 (AMAX)
+ 5발 들이 12.7x99mm 탄창 (AMAX)
12.7x99毫米 5發 彈匣 (AMAX 比賽專用彈)
12.7x99 mm 5发 弹匣(AMAX)
12.7x99 mm 5Rnd Şarjör (AMAX)
@@ -3378,7 +3378,7 @@
Carregador 12.7x99 mm (AMAX) com 10 cartuchos
12,7x99 mm 10-lövedékes tár (AMAX)
12.7x99mm 10Rnd マガジン (AMAX)
- 10발들이 12.7x99mm 탄창 (AMAX)
+ 10발 들이 12.7x99mm 탄창 (AMAX)
12.7x99毫米 10發 彈匣 (AMAX 比賽專用彈)
12.7x99 mm 10发 弹匣(AMAX)
12.7x99 mm 10Rnd Şarjör (AMAX)
diff --git a/addons/compat_rf/compat_rf_realisticnames/stringtable.xml b/addons/compat_rf/compat_rf_realisticnames/stringtable.xml
index c65a8fd4ad..03d5003a62 100644
--- a/addons/compat_rf/compat_rf_realisticnames/stringtable.xml
+++ b/addons/compat_rf/compat_rf_realisticnames/stringtable.xml
@@ -377,6 +377,7 @@
H225M シュペル クーガー (非武装)
H225M Super Cougar (Unbewaffnet)
H225M Super Cougar (Disarmato)
+ H225M 슈퍼 쿠거 (비무장)
HEMTT Fire Truck
@@ -389,6 +390,7 @@
HEMTT contra incêndio
HEMTT 消防車
HEMTT Autobotte
+ HEMTT 소방트럭
Typhoon Water
diff --git a/addons/concertina_wire/stringtable.xml b/addons/concertina_wire/stringtable.xml
index 0ea44fc063..603cc5a7a8 100644
--- a/addons/concertina_wire/stringtable.xml
+++ b/addons/concertina_wire/stringtable.xml
@@ -30,7 +30,7 @@
Concertina wire coil
Bobina de arame farpado
鉄条網コイル
- 코일형 철조망
+ 윤형철조망
鐵絲網捲
铁丝网卷
Bıçaklı Tel Rulo
diff --git a/addons/killtracker/stringtable.xml b/addons/killtracker/stringtable.xml
index b7a97df15a..64b9ee764d 100644
--- a/addons/killtracker/stringtable.xml
+++ b/addons/killtracker/stringtable.xml
@@ -125,6 +125,7 @@
Zeige der Fahrzeugbesatzung die Abschüsse des Fahrzeugs
Mostra uccisioni del veicolo a membri dell'equipaggio
車両でのキルを乗員全員に表示する
+ 다른 승무원에게 차량 처치 표시
Show kills from a vehicle to driver, gunner and commander
@@ -132,6 +133,7 @@
Zeige Abschüsse des Fahrzeugs dem Fahrer, Richtschützen und Kommandanten an
Mostra uccisioni del veicolo al pilota, artigliere e comandante
車両でのキルを操縦手、砲手、車長で共有して表示する
+ 차량 처치를 운전수, 사수, 지휘관에게 보여줍니다
diff --git a/addons/overpressure/stringtable.xml b/addons/overpressure/stringtable.xml
index 0d43f01825..2ce7615ad4 100644
--- a/addons/overpressure/stringtable.xml
+++ b/addons/overpressure/stringtable.xml
@@ -51,6 +51,7 @@
Rückstrahl-Entfernung Multiplikator
Coefficiente distanza di svampata
後方噴射の距離係数
+ 후폭풍 거리 계수
Scales the backblast effect
@@ -58,6 +59,7 @@
Skaliert den Rückstrahl-Effekt
Scala l'effetto delle svampate dei lanciarazzi
無反動砲による後方噴射の影響範囲の大きさ
+ 후폭풍 효과의 스케일을 조정합니다
Backblast range
diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml
index 70b78e6d25..af864f64df 100644
--- a/addons/realisticnames/stringtable.xml
+++ b/addons/realisticnames/stringtable.xml
@@ -13,7 +13,7 @@
XM312
XM312
XM312
- XM312
+ XM312 중기관총
XM312重機槍
XM312
XM312
@@ -30,7 +30,7 @@
XM312A
XM312A
XM312A
- XM312A
+ XM312A 무인중기관총
XM312A重機槍
XM312A
XM312A
@@ -47,7 +47,7 @@
XM312 (Magasított)
XM312 (Alto)
XM312 (ハイマウント)
- XM312 (높음)
+ XM312 중기관총 (높음)
XM312重機槍 (高射腳架)
XM312(高)
XM312 (Yüksek)
@@ -64,7 +64,7 @@
XM307
XM307
XM307
- XM307
+ XM307 유탄기관총
XM307榴彈機槍
XM307
XM307
@@ -81,7 +81,7 @@
XM307A
XM307A
XM307A
- XM307A
+ XM307A 무인유탄기관총
XM307A榴彈機槍
XM307A
XM307A
@@ -98,7 +98,7 @@
XM307 (Magasított)
XM307 (Alto)
XM307 (ハイマウント)
- XM307 (높음)
+ XM307 유탄기관총 (높음)
XM307榴彈機槍 (高射腳架)
XM307(高)
XM307 (Yüksek)
@@ -149,7 +149,7 @@
YABHON-R3
YABHON-R3
YABHON-R3
- YABHON-R3
+ YABHON-R3 무인기
"亞伯罕-R3型"空中無人載具
"联合"-R3
YABHON-R3
@@ -166,7 +166,7 @@
YABHON-R3 (CAS)
YABHON-R3 (CAS)
YABHON-R3 (CAS)
- YABHON-R3 (근접지원)
+ YABHON-R3 무인기 (근접지원)
"亞伯罕-R3型"空中無人載具 (近空支援)
"联合"-R3(近空支援)
YABHON-R3 (CAS)
@@ -3668,7 +3668,7 @@
Polaris DAGOR (XM312)
Polaris DAGOR (XM312)
Polaris DAGOR (XM312)
- 폴라리스 DAGOR (XM312)
+ 폴라리스 DAGOR (XM312 중기관총)
Polaris DAGOR (Mini-Spike AT)
@@ -3684,7 +3684,7 @@
Polaris DAGOR (Mini-Spike AT)
Polaris DAGOR (Mini-Spike AT)
Polaris DAGOR (Mini-Spike AT)
- 폴라리스 DAGOR (스파이크 미사일 대전차)
+ 폴라리스 DAGOR (스파이크 대전차미사일)
Polaris DAGOR
@@ -3732,7 +3732,7 @@
LSV Mk. II (M134)
LSV Mk. II (M134)
LSV Mk. II (M134)
- LSV Mk.II (M134)
+ LSV Mk.II (M134 미니건)
LSV Mk. II (Metis-M)
@@ -3844,7 +3844,7 @@
Wiesel 2 Ozelot (AA)
Wiesel 2 Ozelot (AA)
Wiesel 2 Ozelot (AA)
- 비젤 2 오셀롯 (대공)
+ 비젤 2 오젤롯 (대공)
Wiesel 2 (ATGM)
@@ -3860,7 +3860,7 @@
Wiesel 2 (ATGM)
Wiesel 2 (ATGM)
Wiesel 2 (ATGM)
- 비젤 2 (대전차유도)
+ 비젤 2 (대전차미사일)
Wiesel 2 (MK20)
From 516eb48c93a21d77db5e2a51aa08f81cee9a91c1 Mon Sep 17 00:00:00 2001
From: johnb432 <58661205+johnb432@users.noreply.github.com>
Date: Tue, 2 Jul 2024 20:16:28 +0200
Subject: [PATCH 26/36] Dogtags - Stop throwing error when trying to take dog
tags (#10103)
Stop throwing error
---
addons/dogtags/functions/fnc_canTakeDogtag.sqf | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/addons/dogtags/functions/fnc_canTakeDogtag.sqf b/addons/dogtags/functions/fnc_canTakeDogtag.sqf
index 815aeb7a79..796f219f56 100644
--- a/addons/dogtags/functions/fnc_canTakeDogtag.sqf
+++ b/addons/dogtags/functions/fnc_canTakeDogtag.sqf
@@ -23,4 +23,4 @@ if (isNull _target) exitWith {false};
// check if disabled for faction
if ((faction _target) in GVAR(disabledFactions)) exitWith {false};
-((!alive _target) || {_target getVariable ["ACE_isUnconscious", false]}) && {_player canAdd ["ACE_dogtag", 1/*, true*/]} // Todo: Uncomment in 2.18
+((!alive _target) || {_target getVariable ["ACE_isUnconscious", false]}) && {_player canAdd ["ACE_dogtag_1", 1/*, true*/]} // Todo: Uncomment in 2.18
From ee0e947611d72378580099019153c51e67da838c Mon Sep 17 00:00:00 2001
From: johnb432 <58661205+johnb432@users.noreply.github.com>
Date: Tue, 2 Jul 2024 21:38:14 +0200
Subject: [PATCH 27/36] General - Use `ace_common_fnc_isAwake` where possible
(#10098)
* Use `ace_common_fnc_isAwake` where possible
* Revert bad change
---
addons/captives/functions/fnc_canEscortCaptive.sqf | 3 +--
addons/captives/functions/fnc_canLoadCaptive.sqf | 2 +-
addons/captives/functions/fnc_doEscortCaptive.sqf | 2 +-
.../captives/functions/fnc_handleAnimChangedHandcuffed.sqf | 2 +-
.../captives/functions/fnc_handleAnimChangedSurrendered.sqf | 2 +-
addons/captives/functions/fnc_setHandcuffed.sqf | 2 +-
addons/captives/functions/fnc_setSurrendered.sqf | 5 ++---
addons/common/functions/fnc_disableAI.sqf | 2 +-
addons/common/functions/fnc_nearestVehiclesFreeSeat.sqf | 2 +-
addons/dogtags/functions/fnc_canCheckDogtag.sqf | 2 +-
addons/dogtags/functions/fnc_canTakeDogtag.sqf | 2 +-
addons/dragging/functions/fnc_dropObject.sqf | 2 +-
addons/dragging/functions/fnc_dropObject_carry.sqf | 2 +-
addons/gforces/functions/fnc_pfhUpdateGForces.sqf | 2 +-
addons/goggles/functions/fnc_canWipeGlasses.sqf | 2 +-
addons/interaction/functions/fnc_canJoinGroup.sqf | 3 +--
addons/interaction/functions/fnc_canJoinTeam.sqf | 3 +--
addons/interaction/functions/fnc_canTapShoulder.sqf | 5 ++---
addons/towing/functions/fnc_towStateMachinePFH.sqf | 5 ++---
19 files changed, 22 insertions(+), 28 deletions(-)
diff --git a/addons/captives/functions/fnc_canEscortCaptive.sqf b/addons/captives/functions/fnc_canEscortCaptive.sqf
index f39ff2ac5f..204206e506 100644
--- a/addons/captives/functions/fnc_canEscortCaptive.sqf
+++ b/addons/captives/functions/fnc_canEscortCaptive.sqf
@@ -21,7 +21,6 @@ params ["_unit", "_target"];
(_target getVariable [QGVAR(isHandcuffed), false]) &&
{isNull (attachedTo _target)} &&
-{alive _target} &&
-{!(_target getVariable ["ACE_isUnconscious", false])} &&
+{_target call EFUNC(common,isAwake)} &&
{(vehicle _unit) == _unit} &&
{(vehicle _target) == _target}
diff --git a/addons/captives/functions/fnc_canLoadCaptive.sqf b/addons/captives/functions/fnc_canLoadCaptive.sqf
index 982e4025a2..46da188238 100644
--- a/addons/captives/functions/fnc_canLoadCaptive.sqf
+++ b/addons/captives/functions/fnc_canLoadCaptive.sqf
@@ -20,7 +20,7 @@
params ["_unit", "_target", "_vehicle"];
// Don't show "Load Captive" if unit is unconscious (already has "Load Patient")
-if (_target getVariable ["ACE_isUnconscious", false]) exitWith {false};
+if !(_target call EFUNC(common,isAwake)) exitWith {false};
if ((isNull _target) && {_unit getVariable [QGVAR(isEscorting), false]}) then {
//Looking at a vehicle while escorting, get target from attached objects:
diff --git a/addons/captives/functions/fnc_doEscortCaptive.sqf b/addons/captives/functions/fnc_doEscortCaptive.sqf
index 7eb25ccc4c..86cc52cb9c 100644
--- a/addons/captives/functions/fnc_doEscortCaptive.sqf
+++ b/addons/captives/functions/fnc_doEscortCaptive.sqf
@@ -39,7 +39,7 @@ if (_state) then {
_args params ["_unit", "_target", "_actionID"];
if (_unit getVariable [QGVAR(isEscorting), false]) then {
- if (!alive _target || {!alive _unit} || {!canStand _target} || {!canStand _unit} || {_target getVariable ["ACE_isUnconscious", false]} || {_unit getVariable ["ACE_isUnconscious", false]} || {!isNull (attachedTo _unit)}) then {
+ if (!canStand _target || {!canStand _unit} || {!(_target call EFUNC(common,isAwake))} || {!(_unit call EFUNC(common,isAwake))} || {!isNull (attachedTo _unit)}) then {
_unit setVariable [QGVAR(isEscorting), false, true];
};
};
diff --git a/addons/captives/functions/fnc_handleAnimChangedHandcuffed.sqf b/addons/captives/functions/fnc_handleAnimChangedHandcuffed.sqf
index 3363ca923e..8ce4391783 100644
--- a/addons/captives/functions/fnc_handleAnimChangedHandcuffed.sqf
+++ b/addons/captives/functions/fnc_handleAnimChangedHandcuffed.sqf
@@ -19,7 +19,7 @@
params ["_unit", "_newAnimation"];
TRACE_2("AnimChanged",_unit,_newAnimation);
if (_unit == (vehicle _unit)) then {
- if ((_newAnimation != "ACE_AmovPercMstpSsurWnonDnon") && {!(_unit getVariable ["ACE_isUnconscious", false])}) then {
+ if ((_newAnimation != "ACE_AmovPercMstpSsurWnonDnon") && {_unit call EFUNC(common,isAwake)}) then {
TRACE_1("Handcuff animation interrupted",_newAnimation);
[_unit, "ACE_AmovPercMstpScapWnonDnon", 1] call EFUNC(common,doAnimation);
};
diff --git a/addons/captives/functions/fnc_handleAnimChangedSurrendered.sqf b/addons/captives/functions/fnc_handleAnimChangedSurrendered.sqf
index b9164ddbe5..7d69c8c7fa 100644
--- a/addons/captives/functions/fnc_handleAnimChangedSurrendered.sqf
+++ b/addons/captives/functions/fnc_handleAnimChangedSurrendered.sqf
@@ -19,7 +19,7 @@
params ["_unit", "_newAnimation"];
TRACE_2("AnimChanged",_unit,_newAnimation);
-if ((_newAnimation != "ACE_AmovPercMstpSsurWnonDnon") && {!(_unit getVariable ["ACE_isUnconscious", false])}) then {
+if ((_newAnimation != "ACE_AmovPercMstpSsurWnonDnon") && {_unit call EFUNC(common,isAwake)}) then {
TRACE_1("Surrender animation interrupted",_newAnimation);
[_unit, "ACE_AmovPercMstpSsurWnonDnon", 1] call EFUNC(common,doAnimation);
};
diff --git a/addons/captives/functions/fnc_setHandcuffed.sqf b/addons/captives/functions/fnc_setHandcuffed.sqf
index 0c54d9a70a..d3d9fa4e6b 100644
--- a/addons/captives/functions/fnc_setHandcuffed.sqf
+++ b/addons/captives/functions/fnc_setHandcuffed.sqf
@@ -91,7 +91,7 @@ if (_state) then {
_unit removeEventHandler ["AnimChanged", _animChangedEHID];
_unit setVariable [QGVAR(handcuffAnimEHID), -1];
- if (((vehicle _unit) == _unit) && {!(_unit getVariable ["ACE_isUnconscious", false])}) then {
+ if (((vehicle _unit) == _unit) && {_unit call EFUNC(common,isAwake)}) then {
//Break out of hands up animation loop
[_unit, "ACE_AmovPercMstpScapWnonDnon_AmovPercMstpSnonWnonDnon", 2] call EFUNC(common,doAnimation);
};
diff --git a/addons/captives/functions/fnc_setSurrendered.sqf b/addons/captives/functions/fnc_setSurrendered.sqf
index 4acc8529bb..887bfb2680 100644
--- a/addons/captives/functions/fnc_setSurrendered.sqf
+++ b/addons/captives/functions/fnc_setSurrendered.sqf
@@ -86,8 +86,7 @@ if (_state) then {
};
};
- if (!alive _unit) exitWith {};
- if (_unit getVariable ["ACE_isUnconscious", false]) exitWith {}; //don't touch animations if unconscious
+ if !(_unit call EFUNC(common,isAwake)) exitWith {}; //don't touch animations if unconscious
//if we are in "hands up" animationState, crack it now
if (((vehicle _unit) == _unit) && {(animationState _unit) == "ACE_AmovPercMstpSsurWnonDnon"}) then {
@@ -99,7 +98,7 @@ if (_state) then {
params ["_args", "_pfID"];
_args params ["_unit", "_maxTime"];
//If waited long enough or they re-surrendered or they are unconscious, exit loop
- if ((CBA_missionTime > _maxTime) || {_unit getVariable [QGVAR(isSurrendering), false]} || {_unit getVariable ["ACE_isUnconscious", false]}) exitWith {
+ if ((CBA_missionTime > _maxTime) || {_unit getVariable [QGVAR(isSurrendering), false]} || {!(_unit call EFUNC(common,isAwake))}) exitWith {
[_pfID] call CBA_fnc_removePerFrameHandler;
};
//Only break animation if they are actualy the "hands up" animation (because we are using switchmove there won't be an transition)
diff --git a/addons/common/functions/fnc_disableAI.sqf b/addons/common/functions/fnc_disableAI.sqf
index 52f1ed37c3..a0c725c7db 100644
--- a/addons/common/functions/fnc_disableAI.sqf
+++ b/addons/common/functions/fnc_disableAI.sqf
@@ -29,7 +29,7 @@ if !([_unit] call EFUNC(common,isPlayer)) then {
_unit disableConversation true;
} else {
//Sanity check to make sure we don't enable unconsious AI
- if (_unit getVariable ["ace_isunconscious", false] && alive _unit) exitWith {
+ if (_unit getVariable ["ACE_isUnconscious", false] && alive _unit) exitWith {
ERROR("Enabling AI for unconsious unit");
};
diff --git a/addons/common/functions/fnc_nearestVehiclesFreeSeat.sqf b/addons/common/functions/fnc_nearestVehiclesFreeSeat.sqf
index 71f62959b9..2108751066 100644
--- a/addons/common/functions/fnc_nearestVehiclesFreeSeat.sqf
+++ b/addons/common/functions/fnc_nearestVehiclesFreeSeat.sqf
@@ -22,7 +22,7 @@ params ["_unit", ["_distance", 10], ["_cargoOnly", false]];
private _nearVehicles = nearestObjects [_unit, ["Car", "Air", "Tank", "Ship_F", "Pod_Heli_Transport_04_crewed_base_F"], _distance];
_nearVehicles select {
// Filter cargo seats that will eject unconscious units (e.g. quad bike)
- private _canSitInCargo = (!(_unit getVariable ['ACE_isUnconscious', false])) || {(getNumber (configOf _x >> "ejectDeadCargo")) == 0};
+ private _canSitInCargo = (_unit call EFUNC(common,isAwake)) || {(getNumber (configOf _x >> "ejectDeadCargo")) == 0};
((fullCrew [_x, "", true]) findIf {
_x params ["_body", "_role", "_cargoIndex"];
(isNull _body) // seat empty
diff --git a/addons/dogtags/functions/fnc_canCheckDogtag.sqf b/addons/dogtags/functions/fnc_canCheckDogtag.sqf
index bec3ef0dfa..98d437cbac 100644
--- a/addons/dogtags/functions/fnc_canCheckDogtag.sqf
+++ b/addons/dogtags/functions/fnc_canCheckDogtag.sqf
@@ -23,4 +23,4 @@ if (isNull _target) exitWith {false};
// check if disabled for faction
if ((faction _target) in GVAR(disabledFactions)) exitWith {false};
-(!alive _target) || {_target getVariable ["ACE_isUnconscious", false]}
+!(_target call EFUNC(common,isAwake))
diff --git a/addons/dogtags/functions/fnc_canTakeDogtag.sqf b/addons/dogtags/functions/fnc_canTakeDogtag.sqf
index 796f219f56..5f0a6d1afe 100644
--- a/addons/dogtags/functions/fnc_canTakeDogtag.sqf
+++ b/addons/dogtags/functions/fnc_canTakeDogtag.sqf
@@ -23,4 +23,4 @@ if (isNull _target) exitWith {false};
// check if disabled for faction
if ((faction _target) in GVAR(disabledFactions)) exitWith {false};
-((!alive _target) || {_target getVariable ["ACE_isUnconscious", false]}) && {_player canAdd ["ACE_dogtag_1", 1/*, true*/]} // Todo: Uncomment in 2.18
+!(_target call EFUNC(common,isAwake)) && {_player canAdd ["ACE_dogtag_1", 1/*, true*/]} // Todo: Uncomment in 2.18
diff --git a/addons/dragging/functions/fnc_dropObject.sqf b/addons/dragging/functions/fnc_dropObject.sqf
index 10cfda1703..4115f28820 100644
--- a/addons/dragging/functions/fnc_dropObject.sqf
+++ b/addons/dragging/functions/fnc_dropObject.sqf
@@ -33,7 +33,7 @@ if (!GVAR(dragAndFire)) then {
private _inBuilding = _unit call FUNC(isObjectOnObject);
// Play release animation
-if !(_unit getVariable ["ACE_isUnconscious", false]) then {
+if (_unit call EFUNC(common,isAwake)) then {
[_unit, "released"] call EFUNC(common,doGesture);
};
diff --git a/addons/dragging/functions/fnc_dropObject_carry.sqf b/addons/dragging/functions/fnc_dropObject_carry.sqf
index 7a81d94a05..ff6324e0f3 100644
--- a/addons/dragging/functions/fnc_dropObject_carry.sqf
+++ b/addons/dragging/functions/fnc_dropObject_carry.sqf
@@ -44,7 +44,7 @@ if (_tryLoad && {!(_target isKindOf "CAManBase")} && {["ace_cargo"] call EFUNC(c
// Fix anim when aborting carrying persons
if (_target isKindOf "CAManBase" || {animationState _unit in CARRY_ANIMATIONS}) then {
- if (isNull objectParent _unit && {!(_unit getVariable ["ACE_isUnconscious", false])}) then {
+ if (isNull objectParent _unit && {_unit call EFUNC(common,isAwake)}) then {
[_unit, "", 2] call EFUNC(common,doAnimation);
};
diff --git a/addons/gforces/functions/fnc_pfhUpdateGForces.sqf b/addons/gforces/functions/fnc_pfhUpdateGForces.sqf
index 4bb680ee47..487ba15b2a 100644
--- a/addons/gforces/functions/fnc_pfhUpdateGForces.sqf
+++ b/addons/gforces/functions/fnc_pfhUpdateGForces.sqf
@@ -77,7 +77,7 @@ if (_average > _gBlackOut && {GETEGVAR(medical,enabled,false) && {ACE_player cal
GVAR(GForces_CC) ppEffectAdjust [1,1,0,[0,0,0,1],[0,0,0,0],[1,1,1,1],[10,10,0,0,0,0.1,0.5]];
-if !(ACE_player getVariable ["ACE_isUnconscious", false]) then {
+if (ACE_player call EFUNC(common,isAwake)) then {
if (_average > 0.30 * _gBlackOut) then {
private _strength = ((_average - 0.30 * _gBlackOut) / (0.70 * _gBlackOut)) max 0;
GVAR(GForces_CC) ppEffectAdjust [1,1,0,[0,0,0,1],[0,0,0,0],[1,1,1,1],[2 * (1 - _strength),2 * (1 - _strength),0,0,0,0.1,0.5]];
diff --git a/addons/goggles/functions/fnc_canWipeGlasses.sqf b/addons/goggles/functions/fnc_canWipeGlasses.sqf
index ef9d961bc1..cb24b4137a 100644
--- a/addons/goggles/functions/fnc_canWipeGlasses.sqf
+++ b/addons/goggles/functions/fnc_canWipeGlasses.sqf
@@ -15,4 +15,4 @@
* Public: No
*/
-GVAR(effects) in [2, 3] && {!GETVAR(ACE_player,ACE_isUnconscious,false)} // return
+GVAR(effects) in [2, 3] && {ACE_player call EFUNC(common,isAwake)} // return
diff --git a/addons/interaction/functions/fnc_canJoinGroup.sqf b/addons/interaction/functions/fnc_canJoinGroup.sqf
index facc3376ee..ec2feb8240 100644
--- a/addons/interaction/functions/fnc_canJoinGroup.sqf
+++ b/addons/interaction/functions/fnc_canJoinGroup.sqf
@@ -18,7 +18,6 @@
params ["_unit", "_target"];
-alive _target
-&& {!(_target getVariable ["ACE_isUnconscious", false])}
+_target call EFUNC(common,isAwake)
&& {side group _unit == side group _target}
&& {group _unit != group _target} // return
diff --git a/addons/interaction/functions/fnc_canJoinTeam.sqf b/addons/interaction/functions/fnc_canJoinTeam.sqf
index 09d0281dca..e0e3684ce9 100644
--- a/addons/interaction/functions/fnc_canJoinTeam.sqf
+++ b/addons/interaction/functions/fnc_canJoinTeam.sqf
@@ -18,7 +18,6 @@
params ["_unit", "_target"];
-alive _target
-&& {!(_target getVariable ["ACE_isUnconscious", false])}
+_target call EFUNC(common,isAwake)
&& {!([_target] call EFUNC(common,isPlayer))}
&& {_target in units group _unit}
diff --git a/addons/interaction/functions/fnc_canTapShoulder.sqf b/addons/interaction/functions/fnc_canTapShoulder.sqf
index 049c178152..51f271fb4c 100644
--- a/addons/interaction/functions/fnc_canTapShoulder.sqf
+++ b/addons/interaction/functions/fnc_canTapShoulder.sqf
@@ -19,6 +19,5 @@
params ["_unit", "_target"];
_target isKindOf "CAManBase" &&
-{alive _target} &&
-{_unit distance _target < 4} &&
-{!(_target getVariable ["ACE_isUnconscious", false])} // return
+{_target call EFUNC(common,isAwake)} &&
+{_unit distance _target < 4} // return
diff --git a/addons/towing/functions/fnc_towStateMachinePFH.sqf b/addons/towing/functions/fnc_towStateMachinePFH.sqf
index 50afdeb153..7b295754fa 100644
--- a/addons/towing/functions/fnc_towStateMachinePFH.sqf
+++ b/addons/towing/functions/fnc_towStateMachinePFH.sqf
@@ -44,15 +44,14 @@ if (GVAR(isSwimming) && {currentWeapon _unit isNotEqualTo ""}) then {
private _exitCondition = !(
(alive GVAR(attachHelper)) &&
{ alive _parent } &&
- { alive _unit } &&
+ { _unit call EFUNC(common,isAwake) } &&
{
currentWeapon _unit isEqualTo ""
|| {_unit call EFUNC(common,isSwimming)} // swimming in wetsuit forces weapon in hands
|| {getPosASLW _unit select 2 < -1.5} // walking-to-swimming animation in wetsuit lasts for 3 seconds
} &&
{ [_unit, objNull, [INTERACTION_EXCEPTIONS]] call EFUNC(common,canInteractWith) } &&
- { "unconscious" isNotEqualTo toLowerANSI animationState _unit } &&
- { !(_unit getVariable ["ACE_isUnconscious", false]) } &&
+ { "unconscious" != animationState _unit } &&
{ ACE_player == _unit }
);
From b714c8bce2628ff8d4795da8a7f2fc05bb82f474 Mon Sep 17 00:00:00 2001
From: johnb432 <58661205+johnb432@users.noreply.github.com>
Date: Wed, 3 Jul 2024 11:02:43 +0200
Subject: [PATCH 28/36] Nametags - Only display talking waves when unit is
alive and conscious (#10106)
Only display waves when unit is alive and conscious
---
addons/nametags/functions/fnc_initIsSpeaking.sqf | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/addons/nametags/functions/fnc_initIsSpeaking.sqf b/addons/nametags/functions/fnc_initIsSpeaking.sqf
index 5bae931e60..db2bf30ac3 100644
--- a/addons/nametags/functions/fnc_initIsSpeaking.sqf
+++ b/addons/nametags/functions/fnc_initIsSpeaking.sqf
@@ -41,14 +41,14 @@ switch (true) do {
INFO("ACRE Detected.");
DFUNC(isSpeaking) = {
params ["_unit"];
- ([_unit] call acre_api_fnc_isSpeaking) && {!(_unit getVariable ["ACE_isUnconscious", false])}
+ ([_unit] call acre_api_fnc_isSpeaking) && {_unit call EFUNC(common,isAwake)}
};
};
case (["task_force_radio"] call EFUNC(common,isModLoaded)): {
INFO("TFAR Detected.");
DFUNC(isSpeaking) = {
params ["_unit"];
- (_unit getVariable ["tf_isSpeaking", false]) && {!(_unit getVariable ["ACE_isUnconscious", false])}
+ (_unit getVariable ["tf_isSpeaking", false]) && {_unit call EFUNC(common,isAwake)}
};
};
default {
@@ -65,7 +65,7 @@ switch (true) do {
DFUNC(isSpeaking) = {
params ["_unit"];
- (_unit getVariable [QGVAR(isSpeakingInGame), false]) && {!(_unit getVariable ["ACE_isUnconscious", false])}
+ (_unit getVariable [QGVAR(isSpeakingInGame), false]) && {_unit call EFUNC(common,isAwake)}
};
};
};
From 7b0e5b64169e01bc2f35ae69750b25564b2ccfb4 Mon Sep 17 00:00:00 2001
From: johnb432 <58661205+johnb432@users.noreply.github.com>
Date: Wed, 3 Jul 2024 17:30:41 +0200
Subject: [PATCH 29/36] Common - Fix `ace_common_fnc_uniqueItems` (#10107)
Fix `ace_common_fnc_uniqueItems`
---
addons/common/functions/fnc_uniqueItems.sqf | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/addons/common/functions/fnc_uniqueItems.sqf b/addons/common/functions/fnc_uniqueItems.sqf
index 204501ca3f..5b2177a376 100644
--- a/addons/common/functions/fnc_uniqueItems.sqf
+++ b/addons/common/functions/fnc_uniqueItems.sqf
@@ -28,10 +28,12 @@ private _fnc_getItems = {
_inventoryItems append ((getItemCargo vestContainer _target) select 0);
_inventoryItems append ((getItemCargo backpackContainer _target) select 0);
- _items set [0, _inventoryItems];
- _items set [1, magazines _target];
+ private _magazines = magazines _target;
- _items arrayIntersect _items
+ _items set [0, _inventoryItems arrayIntersect _inventoryItems];
+ _items set [1, _magazines arrayIntersect _magazines];
+
+ _items
};
// Cache items list if unit is ACE_player
From dae2c5b465c12e4c320e7ef117e0b899fd3373c2 Mon Sep 17 00:00:00 2001
From: johnb432 <58661205+johnb432@users.noreply.github.com>
Date: Wed, 3 Jul 2024 17:39:04 +0200
Subject: [PATCH 30/36] Common - Clean up `ace_common_fnc_hasItem` &
`ace_common_fnc_hasMagazine` functions (#10108)
* Clean up hasItem & hasMagazine functions
* Replace EFUNC
* Update fnc_hasItem.sqf
---
addons/common/functions/fnc_hasItem.sqf | 10 +++++-----
addons/common/functions/fnc_hasMagazine.sqf | 12 +++++-------
2 files changed, 10 insertions(+), 12 deletions(-)
diff --git a/addons/common/functions/fnc_hasItem.sqf b/addons/common/functions/fnc_hasItem.sqf
index f446c5dac0..ac0be8b10e 100644
--- a/addons/common/functions/fnc_hasItem.sqf
+++ b/addons/common/functions/fnc_hasItem.sqf
@@ -1,21 +1,21 @@
#include "..\script_component.hpp"
/*
* Author: Glowbal
- * Check if unit has item. Note: case-sensitive.
+ * Check if given unit has an item of given classname. Note: Case sensitive.
*
* Arguments:
* 0: Unit
- * 1: Item Classname
+ * 1: Item classname
*
* Return Value:
- * Unit has Item
+ * Unit has item
*
* Example:
- * [bob, "item"] call ace_common_fnc_hasItem
+ * [player, "ACE_Banana"] call ace_common_fnc_hasItem
*
* Public: Yes
*/
params [["_unit", objNull, [objNull]], ["_item", "", [""]]];
-_item in (_unit call EFUNC(common,uniqueItems))
+_item in (_unit call FUNC(uniqueItems)) // return
diff --git a/addons/common/functions/fnc_hasMagazine.sqf b/addons/common/functions/fnc_hasMagazine.sqf
index 7874bcbd16..9f35aafdba 100644
--- a/addons/common/functions/fnc_hasMagazine.sqf
+++ b/addons/common/functions/fnc_hasMagazine.sqf
@@ -1,23 +1,21 @@
#include "..\script_component.hpp"
/*
* Author: Glowbal
- * Check if given unit has a magazine of given classname
+ * Check if given unit has a magazine of given classname. Note: Case sensitive.
*
* Arguments:
* 0: Unit
- * 1: Magazine Classname
+ * 1: Magazine classname
*
* Return Value:
- * has Magazine
+ * Unit has magazine
*
* Example:
- * [bob, "magazine"] call ace_common_fnc_hasMagazine
+ * [player, "30Rnd_65x39_caseless_mag"] call ace_common_fnc_hasMagazine
*
* Public: yes
- *
- * Note: Case sensitive
*/
params [["_unit", objNull, [objNull]], ["_magazine", "", [""]]];
-_magazine in magazines _unit // return
+_magazine in ([_unit, 2] call FUNC(uniqueItems)) // return
From 4d0641abb829bfb6945dea1ca5a5597f9c66a52d Mon Sep 17 00:00:00 2001
From: johnb432 <58661205+johnb432@users.noreply.github.com>
Date: Wed, 3 Jul 2024 18:50:08 +0200
Subject: [PATCH 31/36] Dogtags - Improve displaying dogtags from bodies with
no name (#10096)
Improve displaying dogtags from bodies with no name
---
addons/dogtags/XEH_postInit.sqf | 10 +++++++---
addons/dogtags/functions/fnc_addDogtagItem.sqf | 10 ++++++++--
addons/dogtags/functions/fnc_showDogtag.sqf | 10 ++++++++--
3 files changed, 23 insertions(+), 7 deletions(-)
diff --git a/addons/dogtags/XEH_postInit.sqf b/addons/dogtags/XEH_postInit.sqf
index dae6b62247..1633aace3c 100644
--- a/addons/dogtags/XEH_postInit.sqf
+++ b/addons/dogtags/XEH_postInit.sqf
@@ -66,10 +66,14 @@ if (["ace_arsenal"] call EFUNC(common,isModLoaded)) then {
_item = _rightPanel lnbData [_i, 0];
if (_item isKindOf ["ACE_dogtag", _cfgWeapons]) then {
- _dogtagData = _allDogtagsData param [_allDogtags find _item, []];
+ private _name = (_allDogtagsData param [_allDogtags find _item, []]) param [0, ""];
- // If data doesn't exist, put name as "unknown"
- _rightPanel lnbSetText [[_i, 1], [LLSTRING(itemName), ": ", _dogtagData param [0, LELSTRING(common,unknown)]] joinString ""];
+ // If data doesn't exist or body has no name, set name as "unknown"
+ if (_name == "") then {
+ _name = LELSTRING(common,unknown);
+ };
+
+ _rightPanel lnbSetText [[_i, 1], [LLSTRING(itemName), ": ", _name] joinString ""];
};
};
};
diff --git a/addons/dogtags/functions/fnc_addDogtagItem.sqf b/addons/dogtags/functions/fnc_addDogtagItem.sqf
index 803c54d82f..6979299db3 100644
--- a/addons/dogtags/functions/fnc_addDogtagItem.sqf
+++ b/addons/dogtags/functions/fnc_addDogtagItem.sqf
@@ -23,8 +23,14 @@ if (_item == "") exitWith {};
// Verify that the unit has inventory space, otherwise drop the dogtag on the ground
[ace_player, _item, true] call CBA_fnc_addItem;
-_dogtagData params ["_nickName"];
-private _displayText = format [localize LSTRING(takeDogtagSuccess), _nickName];
+_dogtagData params ["_name"];
+
+// If data doesn't exist or body has no name, set name as "unknown"
+if (_name == "") then {
+ _name = LELSTRING(common,unknown);
+};
+
+private _displayText = format [localize LSTRING(takeDogtagSuccess), _name];
// display message
[{
diff --git a/addons/dogtags/functions/fnc_showDogtag.sqf b/addons/dogtags/functions/fnc_showDogtag.sqf
index 4865ff7de2..9e01bfc3cd 100644
--- a/addons/dogtags/functions/fnc_showDogtag.sqf
+++ b/addons/dogtags/functions/fnc_showDogtag.sqf
@@ -31,5 +31,11 @@ private _display = uiNamespace getvariable [QGVAR(tag), displayNull];
if(isNull _display) exitWith {};
private _control = _display displayCtrl 1001;
-_dogtagData params ["_nickName", "_code", "_bloodType"];
-_control ctrlSetStructuredText parseText format ["%1
%2
%3", toUpper _nickName, _code, _bloodType];
+_dogtagData params ["_name", "_code", "_bloodType"];
+
+// If data doesn't exist or body has no name, set name as "unknown"
+if (_name == "") then {
+ _name = LELSTRING(common,unknown);
+};
+
+_control ctrlSetStructuredText parseText format ["%1
%2
%3", toUpper _name, _code, _bloodType];
From 374530532352b3be05c56a7db0fed1c63c863d5e Mon Sep 17 00:00:00 2001
From: johnb432 <58661205+johnb432@users.noreply.github.com>
Date: Thu, 4 Jul 2024 09:32:37 +0200
Subject: [PATCH 32/36] Dogtags - Fix arsenal not showing dogtag info in
multiplayer (#10095)
* Broadcast dogtag info globally so that arsenal can use it
* Broadcast changes incrementally
* Update addons/dogtags/XEH_postInit.sqf
Co-authored-by: PabstMirror
* Update addons/dogtags/functions/fnc_getDogtagItem.sqf
Co-authored-by: PabstMirror
* Add EH only on necessary machines
---------
Co-authored-by: PabstMirror
---
addons/dogtags/XEH_PREP.hpp | 2 --
addons/dogtags/XEH_postInit.sqf | 25 +++++++++++---
addons/dogtags/XEH_preInit.sqf | 8 +++++
.../functions/fnc_addDogtagActions.sqf | 4 ++-
.../dogtags/functions/fnc_checkDogtagItem.sqf | 22 -------------
.../dogtags/functions/fnc_getDogtagItem.sqf | 16 ++++-----
.../dogtags/functions/fnc_sendDogtagData.sqf | 33 -------------------
7 files changed, 38 insertions(+), 72 deletions(-)
delete mode 100644 addons/dogtags/functions/fnc_checkDogtagItem.sqf
delete mode 100644 addons/dogtags/functions/fnc_sendDogtagData.sqf
diff --git a/addons/dogtags/XEH_PREP.hpp b/addons/dogtags/XEH_PREP.hpp
index 5917600139..a34a04a982 100644
--- a/addons/dogtags/XEH_PREP.hpp
+++ b/addons/dogtags/XEH_PREP.hpp
@@ -5,10 +5,8 @@ PREP(bloodType);
PREP(canCheckDogtag);
PREP(canTakeDogtag);
PREP(checkDogtag);
-PREP(checkDogtagItem);
PREP(getDogtagData);
PREP(getDogtagItem);
-PREP(sendDogtagData);
PREP(showDogtag);
PREP(ssn);
PREP(takeDogtag);
diff --git a/addons/dogtags/XEH_postInit.sqf b/addons/dogtags/XEH_postInit.sqf
index 1633aace3c..9f9fad0f81 100644
--- a/addons/dogtags/XEH_postInit.sqf
+++ b/addons/dogtags/XEH_postInit.sqf
@@ -1,10 +1,29 @@
#include "script_component.hpp"
[QGVAR(showDogtag), LINKFUNC(showDogtag)] call CBA_fnc_addEventHandler;
-[QGVAR(sendDogtagData), LINKFUNC(sendDogtagData)] call CBA_fnc_addEventHandler;
[QGVAR(getDogtagItem), LINKFUNC(getDogtagItem)] call CBA_fnc_addEventHandler;
[QGVAR(addDogtagItem), LINKFUNC(addDogtagItem)] call CBA_fnc_addEventHandler;
+if (hasInterface || isServer) then {
+ [QGVAR(broadcastDogtagInfo), {
+ GVAR(dogtagsData) set _this;
+ }] call CBA_fnc_addEventHandler;
+
+ if (isServer) then {
+ // Sync dogtag data from server to client
+ [QGVAR(requestSyncDogtagDataJIP), {
+ params ["_clientOwner"];
+
+ {
+ [QGVAR(broadcastDogtagInfo), [_x, _y], _clientOwner] call CBA_fnc_ownerEvent;
+ } forEach GVAR(dogtagsData);
+ }] call CBA_fnc_addEventHandler;
+ } else {
+ // To be here, hasInterface must be true
+ [QGVAR(requestSyncDogtagDataJIP), clientOwner] call CBA_fnc_serverEvent;
+ };
+};
+
// Add actions and event handlers only if ace_medical is enabled
// - Adding actions via config would create a dependency
["CBA_settingsInitialized", {
@@ -56,8 +75,6 @@ if (["ace_arsenal"] call EFUNC(common,isModLoaded)) then {
if (_leftPanelIDC in [2010, 2012, 2014] && {_rightPanelIDC == 38}) then {
LOG("passed");
private _rightPanel = _display displayCtrl 15;
- private _allDogtags = missionNamespace getVariable [QGVAR(allDogtags), []];
- private _allDogtagsData = missionNamespace getVariable [QGVAR(allDogtagDatas), []];
private _cfgWeapons = configFile >> "CfgWeapons";
private _item = "";
private _dogtagData = [];
@@ -66,7 +83,7 @@ if (["ace_arsenal"] call EFUNC(common,isModLoaded)) then {
_item = _rightPanel lnbData [_i, 0];
if (_item isKindOf ["ACE_dogtag", _cfgWeapons]) then {
- private _name = (_allDogtagsData param [_allDogtags find _item, []]) param [0, ""];
+ private _name = (GVAR(dogtagsData) getOrDefault [_item, []]) param [0, ""];
// If data doesn't exist or body has no name, set name as "unknown"
if (_name == "") then {
diff --git a/addons/dogtags/XEH_preInit.sqf b/addons/dogtags/XEH_preInit.sqf
index f5fcb406b1..482551de0a 100644
--- a/addons/dogtags/XEH_preInit.sqf
+++ b/addons/dogtags/XEH_preInit.sqf
@@ -8,4 +8,12 @@ PREP_RECOMPILE_END;
GVAR(disabledFactions) = createHashMap;
+if (hasInterface || isServer) then {
+ GVAR(dogtagsData) = createHashMap;
+
+ if (!isServer) exitWith {};
+
+ GVAR(idCounter) = 0;
+};
+
ADDON = true;
diff --git a/addons/dogtags/functions/fnc_addDogtagActions.sqf b/addons/dogtags/functions/fnc_addDogtagActions.sqf
index 7c7a2e5e8f..b41cce1be8 100644
--- a/addons/dogtags/functions/fnc_addDogtagActions.sqf
+++ b/addons/dogtags/functions/fnc_addDogtagActions.sqf
@@ -27,7 +27,9 @@ private _fnc_getActions = {
private _displayName = getText (_config >> "displayName");
private _picture = getText (_config >> "picture");
- private _action = [_x, _displayName, _picture, FUNC(checkDogtagItem), {true}, {}, _x] call EFUNC(interact_menu,createAction);
+ private _action = [_x, _displayName, _picture, {
+ [GVAR(dogtagsData) getOrDefault [_this select 2, []]] call FUNC(showDogtag);
+ }, {true}, {}, _x] call EFUNC(interact_menu,createAction);
_actions pushBack [_action, [], _player];
};
} forEach (_player call EFUNC(common,uniqueItems));
diff --git a/addons/dogtags/functions/fnc_checkDogtagItem.sqf b/addons/dogtags/functions/fnc_checkDogtagItem.sqf
deleted file mode 100644
index 09526d83ed..0000000000
--- a/addons/dogtags/functions/fnc_checkDogtagItem.sqf
+++ /dev/null
@@ -1,22 +0,0 @@
-#include "..\script_component.hpp"
-/*
- * Author: SzwedzikPL
- * Check dogtag self menu action.
- *
- * Arguments:
- * 0: Player
- * 1: Target
- * 2: Item class
- *
- * Return Value:
- * None
- *
- * Example:
- * [player, unit, "itemClass"] call ace_dogtags_fnc_checkDogtagItem
- *
- * Public: No
- */
-
-params ["_player", "_target", "_item"];
-
-[QGVAR(sendDogtagData), [_player, _item]] call CBA_fnc_serverEvent;
diff --git a/addons/dogtags/functions/fnc_getDogtagItem.sqf b/addons/dogtags/functions/fnc_getDogtagItem.sqf
index 04112bcc94..41cfc4deb7 100644
--- a/addons/dogtags/functions/fnc_getDogtagItem.sqf
+++ b/addons/dogtags/functions/fnc_getDogtagItem.sqf
@@ -21,19 +21,15 @@ if(!isServer) exitWith {};
params ["_player", "_target"];
TRACE_2("getDogtagItem",_player,_target);
-private _allDogtags = missionNamespace getVariable [QGVAR(allDogtags), []];
-private _allDogtagDatas = missionNamespace getVariable [QGVAR(allDogtagDatas), []];
+GVAR(idCounter) = GVAR(idCounter) + 1;
-private _nextID = count _allDogtags + 1;
-
-if (_nextID > 999) exitWith {ERROR("Ran out of IDs");};
+if (GVAR(idCounter) > 999) exitWith {ERROR("Ran out of IDs");};
private _dogTagData = [_target] call FUNC(getDogTagData);
-private _item = format ["ACE_dogtag_%1", _nextID];
-_allDogtags pushBack _item;
-_allDogtagDatas pushBack _dogTagData;
+private _item = format ["ACE_dogtag_%1", GVAR(idCounter)];
-missionNamespace setVariable [QGVAR(allDogtags), _allDogtags];
-missionNamespace setVariable [QGVAR(allDogtagDatas), _allDogtagDatas];
[QGVAR(addDogtagItem), [_item, _dogTagData], [_player]] call CBA_fnc_targetEvent;
+
+// Broadcast data globally, so that clients can use it where needed
+[QGVAR(broadcastDogtagInfo), [_item, _dogTagData]] call CBA_fnc_globalEvent;
diff --git a/addons/dogtags/functions/fnc_sendDogtagData.sqf b/addons/dogtags/functions/fnc_sendDogtagData.sqf
deleted file mode 100644
index 2351e61166..0000000000
--- a/addons/dogtags/functions/fnc_sendDogtagData.sqf
+++ /dev/null
@@ -1,33 +0,0 @@
-#include "..\script_component.hpp"
-/*
- * Author: SzwedzikPL
- * Server: returns to client data on given dogtag.
- *
- * Arguments:
- * 0: Player
- * 1: Target
- *
- * Return Value:
- * None
- *
- * Example:
- * [player, unit] call ace_dogtags_fnc_sendDogtagData
- *
- * Public: No
- */
-
-if (!isServer) exitWith {};
-
-params ["_target", "_item"];
-TRACE_2("sendDogtagData",_target,_item);
-
-private _allDogtags = missionNameSpace getVariable [QGVAR(allDogtags), []];
-private _allDogtagDatas = missionNameSpace getVariable [QGVAR(allDogtagDatas), []];
-
-private _dogtagData = [];
-private _index = _allDogtags find _item;
-if (_index >= 0) then {
- _dogtagData = _allDogtagDatas select _index;
-};
-
-[QGVAR(showDogtag), [_dogtagData], [_target]] call CBA_fnc_targetEvent;
From edc7e9af3e5bbb6a3feaee0f3bec2dc625e4becc Mon Sep 17 00:00:00 2001
From: johnb432 <58661205+johnb432@users.noreply.github.com>
Date: Thu, 4 Jul 2024 09:39:08 +0200
Subject: [PATCH 33/36] Dogtags - Add context menu action to check dog tag
(#10101)
* Broadcast dogtag info globally so that arsenal can use it
* Broadcast changes incrementally
* Add context menu option for dogtags
---
addons/dogtags/XEH_postInit.sqf | 18 ++++++++++++++++++
addons/dogtags/functions/fnc_getDogtagItem.sqf | 1 -
2 files changed, 18 insertions(+), 1 deletion(-)
diff --git a/addons/dogtags/XEH_postInit.sqf b/addons/dogtags/XEH_postInit.sqf
index 9f9fad0f81..6e676671ae 100644
--- a/addons/dogtags/XEH_postInit.sqf
+++ b/addons/dogtags/XEH_postInit.sqf
@@ -97,5 +97,23 @@ if (["ace_arsenal"] call EFUNC(common,isModLoaded)) then {
}] call CBA_fnc_addEventHandler;
};
+// Add context menu option
+[
+ "ACE_dogtag",
+ ["GROUND", "CARGO", "CONTAINER"],
+ LLSTRING(checkItem),
+ nil,
+ QPATHTOF(data\dogtag_icon_ca.paa),
+ [
+ {true},
+ {true}
+ ],
+ {
+ [GVAR(dogtagsData) getOrDefault [_this select 2, []]] call FUNC(showDogtag);
+
+ false
+ }
+] call CBA_fnc_addItemContextMenuOption;
+
// Disable dogtags for civilians
"CIV_F" call FUNC(disableFactionDogtags);
diff --git a/addons/dogtags/functions/fnc_getDogtagItem.sqf b/addons/dogtags/functions/fnc_getDogtagItem.sqf
index 41cfc4deb7..e5f05eb19b 100644
--- a/addons/dogtags/functions/fnc_getDogtagItem.sqf
+++ b/addons/dogtags/functions/fnc_getDogtagItem.sqf
@@ -28,7 +28,6 @@ if (GVAR(idCounter) > 999) exitWith {ERROR("Ran out of IDs");};
private _dogTagData = [_target] call FUNC(getDogTagData);
private _item = format ["ACE_dogtag_%1", GVAR(idCounter)];
-
[QGVAR(addDogtagItem), [_item, _dogTagData], [_player]] call CBA_fnc_targetEvent;
// Broadcast data globally, so that clients can use it where needed
From f65138f65e14f6e8afe72fec14ce491a5acbd465 Mon Sep 17 00:00:00 2001
From: johnb432 <58661205+johnb432@users.noreply.github.com>
Date: Sun, 7 Jul 2024 16:41:10 +0200
Subject: [PATCH 34/36] Casings - Fix settings (#10110)
---
addons/casings/XEH_postInit.sqf | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/addons/casings/XEH_postInit.sqf b/addons/casings/XEH_postInit.sqf
index c1baad68e9..47737c4e04 100644
--- a/addons/casings/XEH_postInit.sqf
+++ b/addons/casings/XEH_postInit.sqf
@@ -1,7 +1,12 @@
#include "script_component.hpp"
-if (!hasInterface || !GVAR(enabled)) exitWith {};
+if (!hasInterface) exitWith {};
-GVAR(cachedCasings) = createHashMap;
-GVAR(casings) = [];
-["CAManBase", "FiredMan", LINKFUNC(createCasing)] call CBA_fnc_addClassEventHandler;
+["CBA_settingsInitialized", {
+ if (!GVAR(enabled)) exitWith {};
+
+ GVAR(cachedCasings) = createHashMap;
+ GVAR(casings) = [];
+
+ ["CAManBase", "FiredMan", LINKFUNC(createCasing)] call CBA_fnc_addClassEventHandler;
+}] call CBA_fnc_addEventHandler;
From 63d1ab82a730b4d052cd3d635801331c10f6fcbe Mon Sep 17 00:00:00 2001
From: Apricot <50947830+Apricot-ale@users.noreply.github.com>
Date: Sun, 14 Jul 2024 09:22:06 +0900
Subject: [PATCH 35/36] Translations - Improve Japanese (#10112)
* Improve Japanese
* Tweaks
* bit tweak
* even more tweak
* Update stringtable.xml
* Update stringtable.xml
---
addons/advanced_throwing/stringtable.xml | 6 ++--
addons/aircraft/stringtable.xml | 2 ++
addons/arsenal/stringtable.xml | 2 +-
addons/common/stringtable.xml | 20 +++++------
addons/fieldmanual/stringtable.xml | 8 ++---
addons/fortify/stringtable.xml | 26 +++++++-------
addons/gestures/stringtable.xml | 12 +++----
addons/goggles/stringtable.xml | 2 +-
addons/interact_menu/stringtable.xml | 46 ++++++++++++------------
addons/interaction/stringtable.xml | 10 +++---
addons/map_gestures/stringtable.xml | 24 ++++++-------
addons/medical/stringtable.xml | 2 +-
addons/medical_gui/stringtable.xml | 8 ++---
addons/mk6mortar/stringtable.xml | 2 +-
addons/optionsmenu/stringtable.xml | 2 +-
addons/overheating/stringtable.xml | 2 +-
addons/rangecard/stringtable.xml | 2 +-
addons/reload/stringtable.xml | 4 +--
addons/respawn/stringtable.xml | 18 +++++-----
addons/scopes/stringtable.xml | 24 ++++++-------
addons/switchunits/stringtable.xml | 8 ++---
addons/ui/stringtable.xml | 4 +--
addons/vehiclelock/stringtable.xml | 6 ++--
addons/weather/stringtable.xml | 4 +--
addons/zeus/stringtable.xml | 4 +--
25 files changed, 125 insertions(+), 123 deletions(-)
diff --git a/addons/advanced_throwing/stringtable.xml b/addons/advanced_throwing/stringtable.xml
index e0e526e12e..fc9cf2705a 100644
--- a/addons/advanced_throwing/stringtable.xml
+++ b/addons/advanced_throwing/stringtable.xml
@@ -144,7 +144,7 @@
Enables ability to pick up throwables from the ground.
Activa la habilidad de coger objetos lanzados del suelo
Включает возможность подбирать гранаты с земли.
- 地面に落ちている投擲物を拾い上げる機能を有効化します。
+ 地面に落ちている投擲物を拾う機能を有効化します。
Umożliwia podnoszenie obiektów miotanych z ziemi.
Aktiviert die Möglichkeit, geworfene Objekte wieder vom Boden aufzuheben.
땅에 떨어진 투척물을 주울 수 있게 해줍니다.
@@ -174,7 +174,7 @@
Enables ability to pick up throwables from attached objects.
Activa la habilidad de lanzar objetos enganchados
Включает возможность подбирать гранаты, прикрепленные к объектам.
- オブジェクトに装着された投擲可能物を拾い上げる機能を有効化します。
+ オブジェクトに装着された投擲物を拾う機能を有効化します。
Umożliwia podnoszenie obiektów miotanych przyczepionych do innych obiektów.
Aktiviert die Möglichkeit, befestigte Wurfobjekte erneut aufzunehmen.
부착된 투척물을 주울 수 있게 해줍니다.
@@ -254,7 +254,7 @@
Primed
Preparado
Подготовлена
- 点火
+ を点火した
Odbezpieczony
Scharf gemacht
뇌관 작동
diff --git a/addons/aircraft/stringtable.xml b/addons/aircraft/stringtable.xml
index 01c5b41e36..041653fe2b 100644
--- a/addons/aircraft/stringtable.xml
+++ b/addons/aircraft/stringtable.xml
@@ -182,12 +182,14 @@
Distanza di seguimento
Folge-Entfernung
따라가는 거리
+ 追跡距離
Following unit within %1m
Seguendo unità entro %1m
Folgt Einheit bis zu %1m
%1m 이내로 유닛을 따라갑니다
+ %1m 間隔で 目標を追跡します
diff --git a/addons/arsenal/stringtable.xml b/addons/arsenal/stringtable.xml
index cf858ec24d..38f41ef4a6 100644
--- a/addons/arsenal/stringtable.xml
+++ b/addons/arsenal/stringtable.xml
@@ -23,7 +23,7 @@
Masque l'interface
Oberfläche verstecken
Ukryj interfejs
- インターフェースを隠す
+ インタフェースを隠す
Nascondi interfaccia
인터페이스 숨기기
隱藏介面
diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml
index 96ad037cc1..4b015fe9d4 100644
--- a/addons/common/stringtable.xml
+++ b/addons/common/stringtable.xml
@@ -402,7 +402,7 @@
[ACE] Itens diversos
[ACE] Egyéb tárgyak
[ACE] Oggetti vari
- [ACE] その他アイテム
+ [ACE] その他のアイテム
[ACE] 기타 물품.
[ACE] 雜項
[ACE] 杂项
@@ -726,7 +726,7 @@
Enable gunlight after weapon switch or vehicle enter/exit if it was previously enabled.
Включать ЛЦУ/тактический фонарь после смены оружия или входа/выхода из машины, если он был до этого включен.
- 銃のライト等を点けていると武器を切り替えた後や車両を乗り降りしても、ライト等を点けたままにします。
+ 銃のライトをつけていた場合、武器の切り替え後または車両の出入り後にライトを再度点灯します。
Abilita la torcia/laser dopo il cambio dell'arma o l'entrata/uscita del veicolo se precedentemente attiva.
이전에 무기의 손전등/레이저를 켠 경우 무기 전환이나 차량 승하차시 켠 상태를 유지합니다.
Aktiviert Laserpointer/Taktisches Licht nach einem Waffenwechsel oder dem Auf-/Absitzen, falls es zuvor aktiv war.
@@ -1360,7 +1360,7 @@
Non hai più spazio
Nincs több hely
В инвентаре нет места
- インベントリに空きがない
+ インベントリに空きがありません
넣을 공간이 없습니다
無可用空間
无可用空间
@@ -1406,7 +1406,7 @@
음악 끄기 허용
允許調低音樂音量
允许调低音乐音量
- 音楽の音量低下を許可
+ 音楽音量の低減を許可
Permesso di abbassare la musica
Zezwól na przyciszanie muzyki
Разрешить приглушение музыки
@@ -1422,7 +1422,7 @@
ACE 스크립트가 음악을 끌 수 있습니다.
允許ACE腳本去控制音樂的音量
允许 ACE 脚本去控制音乐的音量。
- ACEのスクリプトに音量低下を許可します。
+ ACEのスクリプトに音楽音量の低減を許可します。
Permetti agli script di ACEdi abbassare la musica.
Zezwól skrypty ACE na przyciszanie muzyki.
Позволить скриптам ACE приглушать музыку
@@ -1435,7 +1435,7 @@
Epilepsy friendly mode
Epilepsiefreundlicher Modus
- けいれん回避モード
+ てんかん対応モード
Tryb dla epileptyków
Mode adapté à l'épilepsie
Modalità per Epilettici
@@ -1448,7 +1448,7 @@
Disables some flashing light effects to reduce seizure risk.
Deaktiviert einige Lichtflackereffekte um das Risiko von Epilepsieanfällen zu reduzieren.
- いくつかの光点滅エフェクトを無効化し、けいれんの恐れを低下させます。
+ てんかん発作のリスクを軽減するために、一部の点滅する光の効果を無効にします。
Wyłącz część migających efektów w celu zredukowania ryzyka napadu epilepsji
Désactive certains effets de lumière clignotante afin de réduire les risques de crise d'épilepsie.
Disattiva alcuni effetti di luci intermittenti per ridurre il rischio di crisi epilettiche.
@@ -1464,7 +1464,7 @@
旗帜(ACE-黑色):
旗幟(ACE-黑色)
Bandiera (ACE - Nera)
- 旗 (ACE - 黒)
+ 旗 (ACE - 黒色)
Flaga (ACE - Czarna)
Флаг (ACE - Черный)
Bandeira (ACE - Preto)
@@ -1480,7 +1480,7 @@
旗帜(ACE-白色):
旗幟(ACE-白色)
Bandiera (ACE - Bianca)
- 旗 (ACE - 白)
+ 旗 (ACE - 白色)
Flaga (ACE - Biała)
Флаг (ACE - Белый)
Bandeira (ACE - Branco)
@@ -1544,7 +1544,7 @@
在自我互动菜单内显示动作
Pokaż akcje w menu interakcji własnej
Mostra a ação no menu de auto-interação
- セルフ インタラクションにアクションを表示
+ セルフ・インタラクションにアクションを表示します
Mostra le azioni nel menu di interazione con se stessi
Mostrar la acción en el menú de interacción propio
Zobrazit akci v menu vlastních interakcí
diff --git a/addons/fieldmanual/stringtable.xml b/addons/fieldmanual/stringtable.xml
index 78b7ad6fe8..12e34d0e34 100644
--- a/addons/fieldmanual/stringtable.xml
+++ b/addons/fieldmanual/stringtable.xml
@@ -312,7 +312,7 @@
%3의료 메뉴%4는 %3의료%4를 용이하게 사용하기 위한 전용 %3인터페이스%4입니다. %3우%4 및 %3좌%4 문자는 치료 중인 환자의 신체 측면을 나타냅니다.<br/><br/>%3사용 방법:%4<br/>%2환자를 보고 [%3%13%4]를 사용하여 의료 메뉴를 여십시오. 환자 없이 메뉴를 열면 자가 치료가 됩니다.<br/>%2아니면 [%3%12%4] 또는 [%3%13%4]를 사용하고 %3의료 메뉴%4를 선택하십시오.<br/><br/>%3키 설정%4<br/>%2[%3W, A, S, D, X와 Z%4]를 사용하여 신체 부위를 선택하십시오.<br/>%2%3번호판 키%4를 사용하여 치료 카테고리를 선택하십시오.
O %3Menu Médico%4 é uma %3interface%4 dedicada a facilitar o %3tratamento médico%4. As letras %3R%4 e %3L%4 indicam o lado do corpo do paciente que está recebendo o tratamento.<br/><br/>%3Uso:%4<br/>%2Utilize [%3%14%4] enquanto olha o paciente para abrir o Menu Médico. Se não houver paciente, o menu será de auto-tratamento.<br/>%2Alternativamente, utilize [%3%12%4] ou [%3%13%4] e selecione %3Menu Médico%4.<br/><br/>%3Atalhos de teclado:%4<br/>%2Utilize [%3W, A, S, D, X, e Z%4] para selecionar partes do corpo.<br/>%2Utilize as %3teclas numéricas%4 para selecionar as categorias de tratamento.
Il %3Menù Medico%4 è un'%3interfaccia%4 dedicata a facilitare %3trattamenti medici%4. Le lettere %3Dx%4 e %3Sx%4 contrassegnano i lati del corpo del paziente che si stanno medicando.<br/><br/>%3Utilizzo:%4<br/>%2Usa [%3%14%4] guardando il paziente per aprire il Menù Medico. Aprire il menù senza paziente di fronte permette l'automedicazione.<br/>%2In alternativa, usa [%3%12%4] o [%3%13%4] e seleziona %3Menù Medico%4.<br/><br/>%3Comandi:%4<br/>%2Usa [%3W, A, S, D, X, and Z%4] per selezionare parti del corpo.<br/>%2Usa %3tasti numerici%4 per selezionare categorie di cure.
- %3医療メニュー%4は%3治療%4をしやすくするための専用%3インターフェース%4です。%3右%4と%3左%4の文字は治療を受ける患者の向きを表しています。<br/><br/>%3使用方法:%4<br/>%2[%3%14%4] を患者に視点を合わせながら押すことで患者の医療メニューを開けます。視点を合わせないで押すと、自分の医療メニューを開くことが出来ます。<br/>%2もしくは [%3%12%4] または [%3%13%4] を使って%3医療メニュー%4を選択します。<br/><br/>%3キーバインド:%4<br/>%2[%3W, A, S, D, X, と Zキー%4] を使って身体の部位を選択できます。<br/>%2%3数字キー%4を使って治療項目を選択できます。
+ %3医療メニュー%4は%3治療%4をしやすくするための専用%3インタフェース%4です。%3右%4と%3左%4の文字は治療を受ける患者の向きを表しています。<br/><br/>%3使用方法:%4<br/>%2[%3%14%4] を患者に視点を合わせながら押すことで患者の医療メニューを開けます。視点を合わせないで押すと、自分の医療メニューを開くことが出来ます。<br/>%2もしくは [%3%12%4] または [%3%13%4] を使って%3医療メニュー%4を選択します。<br/><br/>%3キーバインド:%4<br/>%2[%3W, A, S, D, X, と Zキー%4] を使って身体の部位を選択できます。<br/>%2%3数字キー%4を使って治療項目を選択できます。
El %3Menú Médico%4 es una %3interfaz%4 dedicada para facilitar el %3tratamiento médico%4. Las letras %3R%4 and %3L%4 indican el lado del paciente siendo tratado.<br/><br/>%3Uso:%4<br/>%2Usar [%3%14%4] mientras se mira al paciente para abrir el Menú Médico. Abrir el menú sin mirar a un paciente permite el tratamiento a uno mismo. <br/>%2Alternativamente, usar [%3%12%4] o [%3%13%4] y seleccionar %3Menú Médico%4.<br/><br/>%3Teclas asociadas:%4<br/>%2Usar [%3W, A, S, D, X, and Z%4] para seleccionar las partes del cuerpo.<br/>%2Usar las %3teclas numéricas%4 para seleccionar las categorías de tratamiento.
@@ -388,7 +388,7 @@
%3휴대전화%4는 기능적으로는 %3격발기%4입니다. 폭발물 장치를 연결하여 폭발물을 터뜨릴 때 사용합니다. 여러 장치를 휴대전화와 연결하여 전화번호부 내에서 호출할 수 있습니다.<br/><br/>%3사용 방법:%4<br/>%2폭발물을 놓으십시오.<br/>%2[%3%13%4]를 사용하고, %3폭발물%4을 선택하고, %3휴대전화%4를 선택하십시오.<br/%2[%3%12%4]로 휴대전화 인터페이스를 여십시오.<br/>%2기폭시킬 전화번호를 선택하십시오.
O %3Celular%4 serve como dispositivo de detonação ao explosivo. Utilize-o para conectar e detonar dispositivos explosivos. Múltiplos dispositivos podem estar conectados ao celular e aparecerão na lista telefônica.<br/><br/>%3Uso:%4<br/>%2Plante o explosivo.<br/>%2Utilize [%3%13%4], selecione %3Explosivos%4, e selecione %3Celular%4.<br/>%2Abra a interface do celular com [%3%12%4].<br/>%2Navegue pela lista telefônica utilizando as setas e selecione o número desejado.<br/>%2Ligue para o número para detonar.
Il %3Cellulare%4 è essenzialmente una %3spoletta%4. Usalo per collegare e detonare esplosivi. Molteplici esplosivi possono essere collegati ad un cellulare e detonati chiamando numeri nella rubrica.<br/><br/>%3Utilizzo:%4<br/>%2Piazza un esplosivo.<br/>%2Usa [%3%13%4], seleziona %3Esplosivi%4, seleziona %3Cellulare%4.<br/>%2Apri l'interfaccia del telefono con [%3%12%4].<br/>%2Naviga la rubrica con le freccette e seleziona il numero da chiamare.<br/>%2Chiama il numero del dispositivo da detonare.
- %3携帯電話%4は%3点火装置%4として機能します。爆破装置を接続して起爆するために使用します。複数のデバイスを携帯電話に繋ぎ、電話帳から呼び出すことができます。<br/><br/>%3使用方法:%4<br/>%2爆発物を設置。<br/>%2[%3%13%4] を使い、%3爆発物%4を選択して、%3携帯電話%4を選択します。<br/>%2[%3%12%4] を使って携帯電話インターフェースを開きます。<br/>%2矢印ボタンで電話帳に移動し、発信番号を選択します。<br/>%2電話を掛けることで起爆します。
+ %3携帯電話%4は%3点火装置%4として機能します。爆破装置を接続して起爆するために使用します。複数のデバイスを携帯電話に繋ぎ、電話帳から呼び出すことができます。<br/><br/>%3使用方法:%4<br/>%2爆発物を設置。<br/>%2[%3%13%4] を使い、%3爆発物%4を選択して、%3携帯電話%4を選択します。<br/>%2[%3%12%4] を使って携帯電話インタフェースを開きます。<br/>%2矢印ボタンで電話帳に移動し、発信番号を選択します。<br/>%2電話を掛けることで起爆します。
El %3Teléfono%4 es funcionalmente un %3Detonador%4. Úsalo para conectarlo y detonar un dispositivo explosivo. Múltiples dispositivos pueden ser conectados al teléfono y llamados desde la agenda de contactos.<br/><br/>%3Uso:%4<br/>%2Colocar un explosivo.<br/>%2Usar [%3%13%4], seleccionar %3Explosivos%4, y seleccionar %3Teléfono%4.<br/>%2Abrir la interfaz del teléfono con [%3%12%4].<br/>%2Navegar por la agenda de contactos con las flechas y selecciona el número a llamar.<br/>%2Llamar al número para detonarlo.
@@ -425,7 +425,7 @@
Użyj%3Detonatora%4 do podłączenia i wysadzenia ładunku. Do jednego ładunku może być podłączonych wiele ładunków na różnych kanałach.<br/><br/>%3Użycie:%4<br/>%2Połóż ładunek wybuchowy.<br/>%2Użyj [%3%13%4], wybierz%3Mat. Wybuchowe%4, i wybierz %3Detonator%4, do którego chcesz go podłączyć.<br/>%2Otwórz menu interakcji ACE [%3%12%4].<br/>%2Wybierz %3Mat. Wybuchowe%4 i wybierz %3Detonator%4.<br/>%2Wybierz %3Ładunek%4 który chcesz wysadzić.
%3격발기%4를 사용하여 폭발물을 연결하고 폭발시킬 수 있습니다. 여러 폭발물을 다른 채널에 연결하여 폭발시킬 수도 있습니다.<br/><br/>%3사용 방법:%4<br/>%2폭발물을 설치합니다.<br/>%2[%3%13%4]를 사용하여 %3폭발물%4을 선택하고 연결할 %3격발기%4를 선택하십시오.<br/>%2[%3%12%4] 키로 ACE 인터페이스를 여십시오.<br/>%2%3폭발물%4을 선택하고 %3격발기%4를 선택하십시오.<br/>%2%3폭발물%4을 선택하면 폭발합니다.
Usa %3Spolette%4 per collegare e detonare dispositivi esplosivi. Molteplici dispositivi possono essere collagati a una spoletta e detonati individualmente come vari canali.<br/><br/>%3Utilizzo:%4<br/>%2Piazza esplosivo.<br/>%2Usa [%3%13%4], seleziona %3Esplosivo%4, seleziona la %3Spoletta%4 a cui intendi collegarlo.<br/>%2Apri l'interfaccia ACE con [%3%12%4].<br/>%2Seleziona %3Esplosivi%4 e scegli una %3Spoletta%4.<br/>%2Seleziona un %3Explosivo%4 da detonare.
- %3点火装置%4を爆破装置に接続し使用することで起爆することが出来ます。複数の爆破装置を接続しそれぞれ違うチャンネルから起爆することもできます。<br/><br/>%3使用方法:%4<br/>%2爆発物を設置。<br/>%2[%3%13%4] を使い、%3爆発物%4を選択して、接続したい%3点火装置%4を選択します。<br/>%2ACEインターフェースを [%3%12%4] で開きます。<br/>%2%3爆発物%4を選択し、%3点火装置%4を選びます。<br/>%2起爆したい%3爆破装置%4を選択します。
+ %3点火装置%4を爆破装置に接続し使用することで起爆することが出来ます。複数の爆破装置を接続しそれぞれ違うチャンネルから起爆することもできます。<br/><br/>%3使用方法:%4<br/>%2爆発物を設置。<br/>%2[%3%13%4] を使い、%3爆発物%4を選択して、接続したい%3点火装置%4を選択します。<br/>%2ACEインタフェースを [%3%12%4] で開きます。<br/>%2%3爆発物%4を選択し、%3点火装置%4を選びます。<br/>%2起爆したい%3爆破装置%4を選択します。
Utiliza los %3Detonadores%4 para conectar y detonar un explosivo. Múltiple dispositivos pueden ser conectados a un detonador y detonados en diferentes canales.<br/><br/>%3Uso:%4<br/>%2 Coloca un explosivo.<br/>%2Usar [%3%13%4], seleccionar %3Explosivos%4, y selecciona el %3Detonador%4 al que quieres conectarlo.<br/>%2Abre la interfaz de ACE con [%3%12%4].<br/>%2Selecciona %3Explosivos%4 y selecciona un %3Detonador%4.<br/>%2Selecciona el %3Explosivo%4 que quieres detonar.
@@ -860,7 +860,7 @@
%3Narzędzie do fortyfikowania%4 pozwala żołnierzom budować fortyfikacje wybrane przez twórcę misji.<br/><br/>%3Użycie:%4<br/>%2Podnieś %3Narzędzie do fortyfikowania%4.<br/>%2Użyj [%3%12%4] i wybierz %3Fortyfikuj%4.<br/>%2Wybierz dostępną fortyfikację i postępuj zgodnie ze wskazówkami na ekranie.
L'%3Attrezzo di Fortificazione%4 permette ai soldati di costruire fortificazioni permesse dal creatore della missione.<br/><br/>%3Utilizzo:%4<br/>%2Raccogli un %3Attrezzo di Fortificazione%4.<br/>%2Usa [%3%12%4] e seleziona %3Fortifica%4.<br/>%2Seleziona una fortificazione disponibile e segui le indicazioni di piazzamento sullo schermo.
%3요새화 도구%4를 사용하면 병사들이 임무 생성자가 제공한 요새를 구축할 수 있습니다.<br/><br/>%3사용 방법:%4<br/>%2%3요새화 도구%4를 가지십시오.<br/>%2[%3%12%4]를 사용하고 %3요새화%4를 선택하십시오.<br/>%2사용 가능한 요새를 선택하고 화면의 지시에 따라 배치하십시오.
- %3要塞ツール%4を使用すると、兵士はミッション作成者が提供した要塞を構築できます。<br/><br/>%3使用方法:%4<br/>%2%3要塞ツール%4を持つ。<br/>%2[%3%12%4] を使って%3要塞%4を選択します。<br/>%2利用可能な構造物を選択し、画面上の指示に従って配置します。
+ %3築城ツール%4を使用すると、兵士はミッション作成者が提供した要塞を構築できます。<br/><br/>%3使用方法:%4<br/>%2%3築城ツール%4を持つ。<br/>%2[%3%12%4] を使って%3野戦築城%4を選択します。<br/>%2利用可能な構造物を選択し、画面上の指示に従って配置します。
La %3Herramienta de Fortificación%4 permite a los soldados construir fortificaciones provistas por su creador de mision.<br/><br/>%3Uso:%4<br/>%2Coge una %3Herramienta de Fortificación%4.<br/>%2Usar [%3%12%4] y seleccionar %3Fortificar%4.<br/>%2Selecciona una fortificación disponible y sigue las instrucciones en pantalla para su colocación.
diff --git a/addons/fortify/stringtable.xml b/addons/fortify/stringtable.xml
index 15150d6685..028cfbd9b2 100644
--- a/addons/fortify/stringtable.xml
+++ b/addons/fortify/stringtable.xml
@@ -4,7 +4,7 @@
Fortify
Verstärken
- 要塞
+ 野戦築城
요새화
Fortifica
要塞
@@ -20,7 +20,7 @@
Fortify Tool
Bauwerkzeug
Attrezzo di Fortificazione
- 要塞ツール
+ 築城ツール
요새화 도구
要塞工具
设防工具
@@ -49,7 +49,7 @@
Auto add fortify item
Füge das Bauwerkzeug automatisch hinzu
- 自動的に要塞ツールを追加
+ 自動的に築城ツールを追加
Auto-aggiungi attrezzo di fortificazione
요새화 도구 자동으로 추가
自動增加要塞物品
@@ -67,7 +67,7 @@
Inizializza il sistema di fortificazione con alcuni parametri di base.<br/>Preset vengono presi da configFile and missionConfigFile, leggi la wiki per il formato richiesto.
Инициализирует систему фортификации с некоторыми базовыми параметрами.<br/>Предустановки взяты из configFile и missionConfigFile, формат смотри на wiki.
Inşa etme sistemini bazı temel parametrelerle başlatır. <br/> Ön ayarlar configFile ve missionConfigFile'dan alınır, format için wiki'ye bakın.
- 要塞システムを初期設定に戻します。<br/>プリセットは configfile と missionConfigFile から参照されます。詳細は wiki を参照してください。
+ 野戦築城システムを初期設定に戻します。<br/>プリセットは configfile と missionConfigFile から参照されます。詳細は wiki を参照してください。
Initialisiert das Verstärken-System, mit grundlegenden Einstellungen <br/>Vorseinstellungen werden aus der configFile und der missionConfigFile gezogen, für mehr Informationen: siehe das ACE Wiki.
使用一些基本参数初始化设防系统。<br/>预设从 configFile 和 missionConfigFile 中提取,参见 wiki 的格式。
기본 파라미터와 함께 요새화 시스템을 활성화합니다<br/>configFile 과 missionConfigFile에서 프리셋을 뽑아옵니다, 포맷은 위키를 참조하십시오.
@@ -103,7 +103,7 @@
Conferma Posizionamento
Lerak
Confirmar implantação
- ここで作る
+ 配置を確定
설치 확인
确认部署
確認佈署
@@ -112,7 +112,7 @@
Fortify: Limit Build Area
Verstärken: Beschränke Baubereich
- 要塞: 構築制限エリア
+ 野戦築城: 構築制限エリア
要塞: 限制建造區
Fortificazione: Limita Area
设防:限制建造区
@@ -130,7 +130,7 @@
ACE Fortificazione
ACE 要塞
ACE 设防
- ACE 要塞
+ ACE 野戦築城
ACE Fortyfikowanie
ACE Фортификация
ACE Inşa Etme
@@ -190,7 +190,7 @@
Ha l'attrezzo di fortificazione
有要塞工具
有设防工具
- 要塞ツール所持時
+ 築城ツール所持時
Posiada narzędzie do fortyfikowania
Если имеется инструмент
Insa Etme Aleti Olanlara Göster
@@ -233,7 +233,7 @@
건축물을 지을 때 걸리는 시간을 계수를 적용하여 계산합니다.
Koeffizient zur Bestimmung der Bauzeit \nA in Ax + b, wobei x die Kosten des Objekts sind.
Il coefficiente 'C' che determina il tempo di costruzione.\nTempo Totale = Costo * C + Tempo Minimo
- 建造する時間を定義するために使用される係数。\n計算式はAx + bです。この係数はAであり、xは建造物のコストです。
+ 構築する時間を定義するために使用される係数。\n計算式はAx + bです。この係数はAであり、xは構築物のコストです。
Współczynnik używany do określenia czasu budowy konstrukcji.\nA w Ax + b gdzie x jest kosztem obiektu
Коэффициент используемый для указания времени необходимого для возведения постройки.\nA в формуле Ax + b, где x - это цена объекта
Coeficiente usado para determinar el tiempo de construcción de una estructura.\nA en Ax + b donde x es el coste del objeto
@@ -246,7 +246,7 @@
최소 건축 시간
Minimale Bauzeit
Tempo di costruzione minimo
- 最短建造時間
+ 最短構築時間
Minimalny czas budowy
Мин. время возведения
Tiempo mínimo de construcción
@@ -259,7 +259,7 @@
건축물을 지을 때 걸리는 최소 시간을 계수를 적용하여 계산합니다.
Mindestzeit für den Bau eines beliebigen Bauwerks.\nb in Ax + b, wobei x die Kosten des Objekts sind.
Tempo minimo necessario per costruire una qualsiasi fortificazione.\nTempo Totale = Costo * CoefT/C + Tempo Minimo
- 建造に掛かる最短時間。\n計算式はAx + bです。この時間はbであり、xは建造物のコストです。
+ 構築に掛かる最短時間。\n計算式はAx + bです。この時間はbであり、xは構築物のコストです。
Minimalny czas do zbudowania dowolenj konstrukcji.\nb w Ax + b gdzie x jest kosztem obiektu
Минимальное время для возведения любой постройки.\nb в формуле Ax + b, где x - это цена объекта
Tiempo mínimo para construir una estructura.\nb en Ax + b donde x es el coste del objeto
@@ -272,7 +272,7 @@
건설 중
Bauwerk
Costruendo
- 建造
+ 構築中
Budowanie
Возведение
Construyendo
@@ -298,7 +298,7 @@
건축물을 건설하고 나서 지도에 마커를 생성합니다
Erstellen von Kartenmarkierungen, die wie Gebäude im Gelände aussehen, wenn statische Befestigungen platziert werden
Crea marker che appaiono come edifici sulla mappa lì dove vengono costruite fortificazioni
- 静的な建築物が配置されたときに地形の建物のように見えるマップマーカーを生成します
+ 静的な構築物が配置されたときに地形の建物のように見えるマップマーカーを生成します
Utwórz znaczniki mapy, które wyglądają jak obiekty terenu, gdy umieszczane są statyczne fortyfikacje
Создавать маркера от статических фортификаций как от зданий на карте
Crear marcadores de mapa que tienen la apariencia de edificios del terreno cuando las fortificaciones estáticas son colocadas
diff --git a/addons/gestures/stringtable.xml b/addons/gestures/stringtable.xml
index 33b73290c3..0f483e17a2 100644
--- a/addons/gestures/stringtable.xml
+++ b/addons/gestures/stringtable.xml
@@ -12,7 +12,7 @@
ACE Gestos
ACE Жесты
ACE Gestos
- ACE ジェスチャー
+ ACE ジェスチャ
ACE 수신호
ACE 手势
ACE 手勢
@@ -29,7 +29,7 @@
ACE Gestos
ACE Жесты
ACE Gestos
- ACE ジェスチャー
+ ACE ジェスチャ
ACE 수신호
ACE 手势
ACE 手勢
@@ -46,7 +46,7 @@
Kézjelek
Gestos
Gesti
- ジェスチャー
+ ジェスチャ
수신호
手势
手勢
@@ -293,7 +293,7 @@
Afficher les gestes dans le menu d'interaction
Mostrar gestos no menu de interação
Показать жесты в меню взаимодействия
- インタラクションメニュー上でジェスチャー表示
+ ジェスチャのアクションを表示
수신호를 상호작용 메뉴에서 보여줍니다
显示手势互动菜单
顯示手勢互動選單
@@ -309,7 +309,7 @@
Afficher les gestes dans le menu d'interaction personnel, ou utiliser uniquement les touches, ou désactiver complètement.
Mostra gestos no menu de interação, ou utilize um dos atalhos de teclado ou desative completamente
Показать жесты в меню взамиодейтсвия с собой или только использовать горячие клавиши, или полностью отключить
- セルフ インタラクションメニューでジェスチャーを表示するか、キーバインドのみを使用するか、完全に無効にします
+ セルフ・インタラクション メニューにジェスチャのアクションを表示するか、キーバインドのみを使用するか、完全に無効にします
수신호를 상호작용 메뉴에서 보여주거나 혹은 단축키를 지정하거나 아니면 아예 사용하지 않습니다.
显示手势选项在自己的互动菜单上,或只利用键盘来使用手势,或完全禁用
顯示手勢選項在自己的互動選單上,或只利用鍵盤來使用手勢,或完全禁用
@@ -341,7 +341,7 @@
Touches + menu d'interaction
Atalhos + Menu de Interação
Клавиши + Меню взаимодействия
- キー操作とインタラクションメニュー
+ キー操作とメニュー
단축키 및 상호작용 메뉴
键盘 + 互动菜单
鍵盤 + 互動選單
diff --git a/addons/goggles/stringtable.xml b/addons/goggles/stringtable.xml
index f02b95bf5c..233ac3e6ca 100644
--- a/addons/goggles/stringtable.xml
+++ b/addons/goggles/stringtable.xml
@@ -137,7 +137,7 @@
Pokaż interakcję Wyczyść Gogle
Mostra interazione automatica per la pulizia degli occhiali
Ukaž Vyčistit brýle v menu Interakce (vlastní)
- ゴーグル拭き取りをセルフ インタラクションに表示
+ ゴーグル拭き取りのアクションを表示
在自我互動中顯示擦拭護目鏡的動作
在自我互动中显示擦拭护目镜的动作
Afficher l'interaction "Essuyer les lunettes"
diff --git a/addons/interact_menu/stringtable.xml b/addons/interact_menu/stringtable.xml
index ce4da0c506..cb05331633 100644
--- a/addons/interact_menu/stringtable.xml
+++ b/addons/interact_menu/stringtable.xml
@@ -12,7 +12,7 @@
Mindig legyen a saját cselekvés kurzorja látható
Mostra sempre il cursore per le autointerazioni
Sempre mostrar cursor para interação pessoal
- セルフ インタラクションへ常にカーソルを表示
+ カーソルを常に表示
자기상호작용 시 항상 커서를 보이기
自我互动时永远显示光标
自我互動時永遠顯示游標
@@ -29,7 +29,7 @@
Immer den Mauszeiger für Fremd-Interaktionen anzeigen
Mindig legyen a cselekvés kurzorja látható
Sempre mostrar cursor para interação
- インタラクションへ常にカーソルを表示
+ カーソルを常に表示
상호작용 시 항상 커서를 보이기
互动时永远显示光标
互動時永遠顯示游標
@@ -46,7 +46,7 @@
Interaktionsmenü in Listen anzeigen
Cselekvő menük listaként való megjelenítése
Mostrar menu de interação como listas
- インタラクションメニューを一覧表示
+ メニューをリストで表示
상호작용메뉴를 리스트화 해서 보이기
以列表方式显示互动表单
以列表方式顯示互動表單
@@ -80,7 +80,7 @@
Saját cselekvő gomb
Tasto autointerazioni
Tecla de Interação Pessoal
- セルフ インタラクション キー
+ セルフ・インタラクション キー
자기상호작용 키
自我互动键
自我互動鍵
@@ -131,7 +131,7 @@
Ações do Zeus
Действия Зевса
Interazioni Zeus
- Zeusでのアクション
+ Zeusのアクション
제우스 동작
宙斯操作
宙斯操作
@@ -148,7 +148,7 @@
Interacción - Texto al max.
Cselekvés - Szöveg max.
Interação - Max. de Texto
- インタラクション - 文字の色
+ インタラクション - 文字の表示色の最大値
상호작용 - 문자색깔
互动—文字颜色最大值
互動 - 文字最大化
@@ -165,7 +165,7 @@
Interacción - Texto al min.
Cselekvés - Szöveg min.
Interação - Min. de Texto
- インタラクション - 文字の背景色
+ インタラクション - 文字の表示色の最低値
상호작용 - 문자배경색
互动—文字颜色最小值
互動 - 文字最小化
@@ -182,7 +182,7 @@
Interacción - Sombras al max.
Cselekvés - Árnyék max.
Interação - Max. de Sombra
- インタラクション - 文字への影の色
+ インタラクション - 文字の影色の最大値
상호작용 - 문자그림자색
互动—阴影最大值
互動 - 陰影最大化
@@ -199,7 +199,7 @@
Interacción - Sombras al min.
Cselekvés - Árnyék min.
Interação - Min. de Sombra
- インタラクション - 文字への影の最低色
+ インタラクション - 文字の影色の最低値
상호작용 - 문자그림자배경색
互动—阴影最小值
互動 - 陰影最小化
@@ -216,7 +216,7 @@
Udržuj kurzor na středu
Manter o cursor centralizado
Mantieni il cursore centrato
- 常にカーソルを中央にする
+ カーソルを常に中心にする
커서를 항상 가운데에 둡니다
保持光标在中心点
保持游標在中心點
@@ -233,7 +233,7 @@
Mantiene el cursor centrado y despliega los menús alrededor. Útil si el tamaño de la pantalla es limitado.
Manter o cursor centralizado e mover o menu de opções. Útil caso o tamanho da tela seja limitado.
Mantieni il cursore centrato e sposta il menù intorno. Utile se lo schermo è piccolo.
- 常にカーソルを中央へ表示させ、オプション メニューが移動します。画面の大きさが制限されている時に使いやすくなります。
+ カーソルを常に中心に表示し、オプション メニューを移動させます。画面の大きさが制限されている時に便利です。
커서를 항상 가운데에 두고 메뉴를 움직입니다. 화면의 크기가 제한되있을 때 유용합니다.
保持光标在中心点并平移周遭的选项菜单。这对在屏幕尺寸有限的玩家很有用!
保持游標在中心點並平移周遭的選項選單。這對在螢幕尺寸有限的玩家很有用!
@@ -250,7 +250,7 @@
Execute a ação quando soltar a tecla de menu
Cselekvés végrehajtása a menügomb elengedésekor
Esegui l'azione quando rilasci il tasto menu
- メニュー キーを離した時にアクションを実行
+ キーを離した時にアクションを実行
메뉴 키를 놓을 때 행동하기
当放开菜单键后就执行动作
當放開選單鍵後就執行動作
@@ -267,7 +267,7 @@
Tamanho do texto de interação
Cselekvő szöveg mérete
Dimensione del testo d'interazione
- インタラクション文字の大きさ
+ 文字の大きさ
상호작용 - 문자크기
互动菜单文字大小
互動選單文字大小
@@ -284,7 +284,7 @@
Sombra do texto de interação
Cselekvő szöveg árnyéka
Ombra del testo d'interazione
- インタラクション文字へ影
+ 文字の影表示
상호작용 - 문자그림자
互动菜单文字阴影
互動選單文字陰影
@@ -301,7 +301,7 @@
Permite controlar a sombra do texto. Contorno ignora sombras com cores customizadas.
Hozzáférést biztosít a szöveg árnyékának kezeléséhez. A körvonal nem veszi figyelembe az egyedi árnyékszíneket.
Permette di controllare l'ombra del testo. L'impostazione "Contorno" ignora il colore dell'ombra.
- 文字への影を設定します。縁取りは設定された影の色を無視します。
+ 文字に影を表示します。縁取りは設定された影の色を無視します。
문자의 그림자를 조절하는 것을 가능케 합니다. 외곽선은 임의의 그림자색을 무시합니다.
允许控制文字阴影。轮廓部分则会忽略自定义的阴影颜色。
允許控制文字陰影。輪廓部分則會忽略自定義的陰影顏色
@@ -335,7 +335,7 @@
Cselekvő menü háttere
Фон меню взаимодействия
Sfondo Menù Interazioni
- インタラクションメニューの背景
+ メニューの背景
상호작용 메뉴 배경
互动菜单背景
互動選單背景
@@ -352,7 +352,7 @@
A háttér elmosása a cselekvő menü használata alatt.
Размыть фон, пока открыто меню взаимодействия.
Sfoca lo sfondo mentre il Menù Interazioni è aperto.
- インタラクションメニューを開いたとき、背景をぼかします。
+ インタラクション メニューを開いたときに背景をぼかします。
상호작용 메뉴가 열릴 시 배경을 흐릿하게 처리합니다.
当互动菜单开启时,模糊背景画面。
當互動選單開啟時,模糊背景畫面
@@ -386,7 +386,7 @@
Fekete
Черный
Nero
- 背景を黒くする
+ 背景を暗くする
까맣게
黑色
黑色
@@ -436,7 +436,7 @@
Menú de interacción
Menù Interazioni
Menu d'interaction
- インタラクションメニュー
+ インタラクション メニュー
상호작용 메뉴
互动菜单
互動選單
@@ -452,7 +452,7 @@
Velocità di Animazione delle Interazioni
Velocidad de animación del menú de interacción
Vitesse de l'animation d'interaction
- インタラクションのアニメーション速度
+ アニメーション速度
상호작용 움직임 속도
互动菜单动画速度
互動選單動畫速度
@@ -468,7 +468,7 @@
Rende le animazioni del Menù più veloci e diminuisce il tempo richiesto per mostrare sotto-azioni
Hace la animación del menú más rápida, reduciendo el tiempo necesario para abrir sub-acciones.
Rend les animations du menu plus rapide, et réduit le temps nécessaire à l'affichage des sous menus d'action.
- メニューのアニメーションを高速化し、サブアクションを表示するためのホバーに必要な時間を短縮します。
+ メニューのアニメーションを高速化し、サブアクションを表示するために必要なホバーにかかる時間を短縮します。
使菜单的动画速度更快,并减少子选项显现出来的时间
使選單的動畫速度更快,並減少子選項顯現出來的時間
상호작용을 표시하기 위해 메뉴 애니메이션을 빠르게 만들고 마우스를 가져오는 데 필요한 시간을 줄입니다.
@@ -493,7 +493,7 @@