From 3786b8cbac7a6444086a92b23874b30702fdceba Mon Sep 17 00:00:00 2001 From: Mike-MF Date: Wed, 18 Dec 2024 01:38:19 +0000 Subject: [PATCH 01/35] Compat RF - Fix/Update realistic names (#10565) Fix/Update realistic names --- .../compat_rf_realisticnames/CfgVehicles.hpp | 32 +++++++++++++++---- .../compat_rf_realisticnames/CfgWeapons.hpp | 3 ++ .../compat_rf_realisticnames/stringtable.xml | 15 +++++++++ 3 files changed, 43 insertions(+), 7 deletions(-) diff --git a/addons/compat_rf/compat_rf_realisticnames/CfgVehicles.hpp b/addons/compat_rf/compat_rf_realisticnames/CfgVehicles.hpp index f8779b302c7..32e2a742a5a 100644 --- a/addons/compat_rf/compat_rf_realisticnames/CfgVehicles.hpp +++ b/addons/compat_rf/compat_rf_realisticnames/CfgVehicles.hpp @@ -68,12 +68,22 @@ class CfgVehicles { }; // Typhoon + class O_Truck_03_transport_F; + class O_Truck_03_cargo_RF: O_Truck_03_transport_F { + displayName = SUBCSTRING(truck_03_cargo_Name); + }; + class O_Truck_03_fuel_F; class C_Truck_03_water_rf: O_Truck_03_fuel_F { displayName = SUBCSTRING(truck_03_water_Name); }; // RAM 1500 (Pickup) + class Pickup_service_base_old_rf; + class Pickup_service_base_rf: Pickup_service_base_old_rf { + displayName = SUBCSTRING(pickup_01_service_Name); + }; + class Offroad_01_unarmed_base_F; class Pickup_01_base_rf: Offroad_01_unarmed_base_F { displayName = SUBCSTRING(pickup_01_Name); @@ -81,9 +91,6 @@ class CfgVehicles { class Pickup_fuel_base_rf: Pickup_01_base_rf { displayName = SUBCSTRING(pickup_01_fuel_Name); }; - class Pickup_service_base_rf: Pickup_01_base_rf { - displayName = SUBCSTRING(pickup_01_service_Name); - }; class Pickup_repair_base_rf: Pickup_service_base_rf { displayName = SUBCSTRING(pickup_01_repair_Name); }; @@ -93,20 +100,31 @@ class CfgVehicles { class Pickup_repair_ig_base_rf: Pickup_repair_base_rf { displayName = SUBCSTRING(pickup_01_repair_Name); }; + class Pickup_covered_base_rf: Pickup_service_base_rf { + displayName = SUBCSTRING(pickup_01_covered_Name); + }; + + // Armed Variants + class Pickup_01_aat_base_rf: Pickup_01_base_rf { + displayName = SUBCSTRING(pickup_01_aa_Name); + }; class Pickup_01_hmg_base_rf: Pickup_01_base_rf { displayName = SUBCSTRING(pickup_01_hmg_Name); }; + class Pickup_01_minigun_base_rf: Pickup_01_base_rf { + displayName = SUBCSTRING(pickup_01_minigun_Name); + }; class Pickup_01_mmg_base_rf: Pickup_01_base_rf { displayName = SUBCSTRING(pickup_01_mmg_Name); }; class Pickup_01_mrl_base_rf: Pickup_01_base_rf { displayName = SUBCSTRING(pickup_01_mrl_Name); }; - class Pickup_01_aat_base_rf: Pickup_01_base_rf { - displayName = SUBCSTRING(pickup_01_aa_Name); + class Pickup_01_rcws_base_rf: Pickup_01_aat_base_rf { + displayName = SUBCSTRING(pickup_01_rcws_Name); }; - class Pickup_covered_base_rf: Pickup_service_base_rf { - displayName = SUBCSTRING(pickup_01_covered_Name); + class Pickup_01_rocket_base_rf: Pickup_01_aat_base_rf { + displayName = SUBCSTRING(pickup_01_rocket_Name); }; class C_IDAP_Pickup_rf; diff --git a/addons/compat_rf/compat_rf_realisticnames/CfgWeapons.hpp b/addons/compat_rf/compat_rf_realisticnames/CfgWeapons.hpp index c2d9003f11a..abc429819f1 100644 --- a/addons/compat_rf/compat_rf_realisticnames/CfgWeapons.hpp +++ b/addons/compat_rf/compat_rf_realisticnames/CfgWeapons.hpp @@ -36,6 +36,9 @@ class CfgWeapons { class hgun_DEagle_gold_RF: hgun_DEagle_RF { displayName = SUBCSTRING(deagle_gold_Name); }; + class hgun_DEagle_camo_RF: hgun_DEagle_RF { + displayName = SUBCSTRING(deagle_camo_Name); + }; class srifle_h6_base_rf; class srifle_h6_tan_rf: srifle_h6_base_rf { diff --git a/addons/compat_rf/compat_rf_realisticnames/stringtable.xml b/addons/compat_rf/compat_rf_realisticnames/stringtable.xml index 6d93f471eeb..d67c3511fe1 100644 --- a/addons/compat_rf/compat_rf_realisticnames/stringtable.xml +++ b/addons/compat_rf/compat_rf_realisticnames/stringtable.xml @@ -136,6 +136,9 @@ 데저트 이글 마크 XIX L5 (브론즈) デザートイーグル Mark XIX L5 (ブロンズ) + + Desert Eagle Mark XIX L5 (Camo) + Desert Eagle Mark XIX L5 (Classic) Desert Eagle Mark XIX L5 (Classique) @@ -541,6 +544,9 @@ 램 1500 (중기관총) ラム 1500 (HMG) + + Ram 1500 (Minigun) + Ram 1500 (MMG) Ram 1500 (MMG) @@ -559,6 +565,12 @@ 램 1500 (다연장로켓) ラム 1500 (MRL) + + Ram 1500 (RCWS) + + + Ram 1500 (Rocket) + Ram 1500 (Repair) Ram 1500 (Réparation) @@ -680,6 +692,9 @@ HEMTT 消防車 HEMTT 消防卡车 + + Typhoon Cargo + Typhoon Water Typhoon Water From c435be3759fc076ab99a9992b54eb789eba22858 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Wed, 18 Dec 2024 02:39:01 +0100 Subject: [PATCH 02/35] Medical Treatment - Add missing bools for creating litter (#10564) * Add missing bools for creating litter * Update fnc_useItem.sqf --- .../medical_treatment/functions/fnc_treatment.sqf | 2 +- addons/medical_treatment/functions/fnc_useItem.sqf | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/addons/medical_treatment/functions/fnc_treatment.sqf b/addons/medical_treatment/functions/fnc_treatment.sqf index 4a28212966d..8e36448ac6a 100644 --- a/addons/medical_treatment/functions/fnc_treatment.sqf +++ b/addons/medical_treatment/functions/fnc_treatment.sqf @@ -49,7 +49,7 @@ if (_treatmentTime == 0) exitWith {false}; private _userAndItem = if (GET_NUMBER_ENTRY(_config >> "consumeItem") == 1) then { [_medic, _patient, getArray (_config >> "items")] call FUNC(useItem); } else { - [objNull, ""]; // Treatment does not require items to be consumed + [objNull, "", false]; // Treatment does not require items to be consumed }; _userAndItem params ["_itemUser", "_usedItem", "_createLitter"]; diff --git a/addons/medical_treatment/functions/fnc_useItem.sqf b/addons/medical_treatment/functions/fnc_useItem.sqf index 33ac9f98f42..2a8583d1533 100644 --- a/addons/medical_treatment/functions/fnc_useItem.sqf +++ b/addons/medical_treatment/functions/fnc_useItem.sqf @@ -10,7 +10,7 @@ * 2: Items * * Return Value: - * User and Item and Litter Created + * User and Item and Litter Created * * Example: * [player, cursorObject, ["bandage"]] call ace_medical_treatment_fnc_useItem @@ -21,7 +21,7 @@ params ["_medic", "_patient", "_items"]; if (_medic isEqualTo player && {!isNull findDisplay 312}) exitWith { - [_medic, _items select 0] + [_medic, _items select 0, false] // return }; scopeName "Main"; @@ -40,24 +40,24 @@ private _useOrder = [[_patient, _medic], [_medic, _patient], [_medic]] select GV switch (true) do { case (_x in _vehicleItems): { _unitVehicle addItemCargoGlobal [_x, -1]; - [_unit, _x, false] breakOut "Main"; + [_unit, _x, false] breakOut "Main"; // return }; case (_x in _vehicleMagazines): { [_unitVehicle, _x] call EFUNC(common,adjustMagazineAmmo); - [_unit, _x, false] breakOut "Main"; + [_unit, _x, false] breakOut "Main"; // return }; case (_x in _unitItems): { _unit removeItem _x; - [_unit, _x, true] breakOut "Main"; + [_unit, _x, true] breakOut "Main"; // return }; case (_x in _unitMagazines): { private _magsStart = count magazines _unit; [_unit, _x] call EFUNC(common,adjustMagazineAmmo); private _magsEnd = count magazines _unit; - [_unit, _x, (_magsEnd < _magsStart)] breakOut "Main"; + [_unit, _x, (_magsEnd < _magsStart)] breakOut "Main"; // return }; }; } forEach _items; } forEach _useOrder; -[objNull, "", false] +[objNull, "", false] // return From 1ffddae111a2affc081a2d20af3a995df3581dc6 Mon Sep 17 00:00:00 2001 From: Grim <69561145+LinkIsGrim@users.noreply.github.com> Date: Wed, 18 Dec 2024 14:19:39 -0300 Subject: [PATCH 03/35] Medical Treatment - Fix IV return (#10563) --- addons/medical/functions/fnc_getIVs.sqf | 16 ++++++++++++--- .../functions/fnc_getBloodVolumeChange.sqf | 4 ++-- .../medical_treatment/functions/fnc_ivBag.sqf | 8 ++++---- .../functions/fnc_ivBagLocal.sqf | 20 ++++++++----------- 4 files changed, 27 insertions(+), 21 deletions(-) diff --git a/addons/medical/functions/fnc_getIVs.sqf b/addons/medical/functions/fnc_getIVs.sqf index e9352090b0d..6bbd3d7798a 100644 --- a/addons/medical/functions/fnc_getIVs.sqf +++ b/addons/medical/functions/fnc_getIVs.sqf @@ -10,9 +10,10 @@ * IVs : * 0: IV volume remaining, in liters * 1: IV type (blood, saline, plasma, etc) - * 2: Body part IV is attached to - * 3: IV classname + * 2: IV body part + * 3: IV treatment classname * 4: IV flow rate coef + * 5: IV item classname * * Example: * player call ace_medical_fnc_getIVs @@ -37,7 +38,16 @@ if !(_unit isKindOf "CAManBase") exitWith { private _ivBags = []; { - _ivBags pushBack +_x; // manual deep copy so modification doesn't affect unit state + _x params ["_bagVolume", "_bagType", "_bodyPartIndex", "_treatment", "_rateCoef", "_bagItem"]; // gotta convert body part index back to the part + + _ivBags pushBack [ + _bagVolume, + _bagType, + ALL_BODY_PARTS select _bodyPartIndex, + treatment, + _rateCoef, + _bagItem + ]; } forEach (_unit getVariable [QGVAR(ivBags), []]); _ivBags diff --git a/addons/medical_status/functions/fnc_getBloodVolumeChange.sqf b/addons/medical_status/functions/fnc_getBloodVolumeChange.sqf index 88e85d2c963..3430de7e83a 100644 --- a/addons/medical_status/functions/fnc_getBloodVolumeChange.sqf +++ b/addons/medical_status/functions/fnc_getBloodVolumeChange.sqf @@ -26,7 +26,7 @@ if (!isNil {_unit getVariable QEGVAR(medical,ivBags)}) then { private _tourniquets = GET_TOURNIQUETS(_unit); _bloodBags = _bloodBags apply { - _x params ["_bagVolumeRemaining", "_type", "_bodyPart", "_classname", "_rateCoef"]; + _x params ["_bagVolumeRemaining", "_type", "_bodyPart", "_treatment", "_rateCoef", "_item"]; if (_tourniquets select _bodyPart == 0) then { private _bagChange = (_deltaT * EGVAR(medical,ivFlowRate) * IV_CHANGE_PER_SECOND * _rateCoef) min _bagVolumeRemaining; // absolute value of the change in miliLiters @@ -37,7 +37,7 @@ if (!isNil {_unit getVariable QEGVAR(medical,ivBags)}) then { if (_bagVolumeRemaining < 0.01) then { [] } else { - [_bagVolumeRemaining, _type, _bodyPart, _classname, _rateCoef] + [_bagVolumeRemaining, _type, _bodyPart, _treatment, _rateCoef, _item] }; }; diff --git a/addons/medical_treatment/functions/fnc_ivBag.sqf b/addons/medical_treatment/functions/fnc_ivBag.sqf index a856afec32a..e2ed2ad7165 100644 --- a/addons/medical_treatment/functions/fnc_ivBag.sqf +++ b/addons/medical_treatment/functions/fnc_ivBag.sqf @@ -8,21 +8,21 @@ * 1: Patient * 2: Body Part * 3: Treatment - * 4: Item User (not used) + * 4: Item User * 5: Used Item * * Return Value: * None * * Example: - * [player, cursorObject, "RightArm", "BloodIV", objNull, "ACE_bloodIV"] call ace_medical_treatment_fnc_ivBag + * [player, cursorObject, "RightArm", "BloodIV", player, "ACE_bloodIV"] call ace_medical_treatment_fnc_ivBag * * Public: No */ -params ["_medic", "_patient", "_bodyPart", "_classname", "", "_usedItem"]; +params ["_medic", "_patient", "_bodyPart", "_classname", "_itemUser", "_usedItem"]; [_patient, _usedItem] call FUNC(addToTriageCard); [_patient, "activity", LSTRING(Activity_gaveIV), [[_medic, false, true] call EFUNC(common,getName)]] call FUNC(addToLog); -[QGVAR(ivBagLocal), [_patient, _bodyPart, _classname, _medic], _patient] call CBA_fnc_targetEvent; +[QGVAR(ivBagLocal), [_patient, _bodyPart, _classname, _medic, _itemUser, _usedItem], _patient] call CBA_fnc_targetEvent; diff --git a/addons/medical_treatment/functions/fnc_ivBagLocal.sqf b/addons/medical_treatment/functions/fnc_ivBagLocal.sqf index a5ef089f12f..f40cdd5189c 100644 --- a/addons/medical_treatment/functions/fnc_ivBagLocal.sqf +++ b/addons/medical_treatment/functions/fnc_ivBagLocal.sqf @@ -8,30 +8,26 @@ * 1: Body Part * 2: Treatment * 3: Medic + * 4: Item User + * 5: Used item * * Return Value: * None * * Example: - * [player, "RightArm", "BloodIV", player] call ace_medical_treatment_fnc_ivBagLocal + * [player, "RightArm", "BloodIV", player, player, "ACE_BloodIV"] call ace_medical_treatment_fnc_ivBagLocal * * Public: No */ -params ["_patient", "_bodyPart", "_classname", "_medic"]; +params ["_patient", "_bodyPart", "_treatment", "_medic", "_itemUser", "_item"]; // Exit if patient has max blood volume private _bloodVolume = GET_BLOOD_VOLUME(_patient); if (_bloodVolume >= DEFAULT_BLOOD_VOLUME) exitWith { // Return the bag if patient is topped up on blood - if (_medic call EFUNC(common,isPlayer)) then { - private _receiver = [_patient, _medic, _medic] select GVAR(allowSharedEquipment); - [_receiver, _classname] call EFUNC(common,addToInventory); - } else { - // If the medic is AI, only return bag if enabled - if (missionNamespace getVariable [QEGVAR(medical_ai,requireItems), 0] > 0) then { - [_medic, _classname] call EFUNC(common,addToInventory); - }; + if (_medic call EFUNC(common,isPlayer) || {missionNamespace getVariable [QEGVAR(medical_ai,requireItems), 0] > 0}) then { + [_itemUser, _item] call EFUNC(common,addToInventory); }; }; @@ -39,7 +35,7 @@ private _partIndex = ALL_BODY_PARTS find toLowerANSI _bodyPart; // Get attributes for the used IV private _defaultConfig = configFile >> QUOTE(ADDON) >> "IV"; -private _ivConfig = _defaultConfig >> _classname; +private _ivConfig = _defaultConfig >> _treatment; private _volume = GET_NUMBER(_ivConfig >> "volume",getNumber (_defaultConfig >> "volume")); private _type = GET_STRING(_ivConfig >> "type",getText (_defaultConfig >> "type")); @@ -47,5 +43,5 @@ private _rateCoef = GET_NUMBER(_ivConfig >> "rateCoef",getNumber (_defaultConfig // Add IV bag to patient's ivBags array private _ivBags = _patient getVariable [QEGVAR(medical,ivBags), []]; -_ivBags pushBack [_volume, _type, _partIndex, _classname, _rateCoef]; +_ivBags pushBack [_volume, _type, _partIndex, _treatment, _rateCoef, _item]; _patient setVariable [QEGVAR(medical,ivBags), _ivBags, true]; From f1d0771a6ff959f4c0967132a27ab854efe21c0a Mon Sep 17 00:00:00 2001 From: Mike-MF Date: Wed, 18 Dec 2024 17:19:56 +0000 Subject: [PATCH 04/35] Compat WS - Update realistic names (#10568) --- .../compat_ws_realisticnames/CfgWeapons.hpp | 26 ++++++++++++++++ .../CfgWeaponsAttachments.hpp | 10 +++++++ .../compat_ws_realisticnames/stringtable.xml | 30 +++++++++++++++++++ 3 files changed, 66 insertions(+) diff --git a/addons/compat_ws/compat_ws_realisticnames/CfgWeapons.hpp b/addons/compat_ws/compat_ws_realisticnames/CfgWeapons.hpp index b1929a49043..a9b21221399 100644 --- a/addons/compat_ws/compat_ws_realisticnames/CfgWeapons.hpp +++ b/addons/compat_ws/compat_ws_realisticnames/CfgWeapons.hpp @@ -137,9 +137,23 @@ class CfgWeapons { class arifle_XMS_Base_Sand_lxWS: arifle_XMS_Base_lxWS { displayName = SUBCSTRING(XMS_Sand_Name); }; + class arifle_XMS_lxWS; + class arifle_XMS_Camo_lxWS: arifle_XMS_lxWS { + displayName = SUBCSTRING(XMS_Camo_Name); + }; + class arifle_XMS_Gray_lxWS: arifle_XMS_lxWS { + displayName = SUBCSTRING(XMS_Gray_Name); + }; + class arifle_XMS_GL_lxWS: arifle_XMS_Base_lxWS { displayName = SUBCSTRING(XMS_GL_Name); }; + class arifle_XMS_GL_Camo_lxWS: arifle_XMS_GL_lxWS { + displayName = SUBCSTRING(XMS_GL_Camo_Name); + }; + class arifle_XMS_GL_Gray_lxWS: arifle_XMS_GL_lxWS { + displayName = SUBCSTRING(XMS_GL_Gray_Name); + }; class arifle_XMS_GL_khk_lxWS: arifle_XMS_GL_lxWS { displayName = SUBCSTRING(XMS_GL_Khaki_Name); }; @@ -149,6 +163,12 @@ class CfgWeapons { class arifle_XMS_Shot_lxWS: arifle_XMS_Base_lxWS { displayName = SUBCSTRING(XMS_SG_Name); }; + class arifle_XMS_Shot_Camo_lxWS: arifle_XMS_Shot_lxWS { + displayName = SUBCSTRING(XMS_SG_Camo_Name); + }; + class arifle_XMS_Shot_Gray_lxWS: arifle_XMS_Shot_lxWS { + displayName = SUBCSTRING(XMS_SG_Gray_Name); + }; class arifle_XMS_Shot_khk_lxWS: arifle_XMS_Shot_lxWS { displayName = SUBCSTRING(XMS_SG_Khaki_Name); }; @@ -158,6 +178,12 @@ class CfgWeapons { class arifle_XMS_M_lxWS: arifle_XMS_Base_lxWS { displayName = SUBCSTRING(XMS_SW_Name); }; + class arifle_XMS_M_Camo_lxWS: arifle_XMS_M_lxWS { + displayName = SUBCSTRING(XMS_SW_Camo_Name); + }; + class arifle_XMS_M_Gray_lxWS: arifle_XMS_M_lxWS { + displayName = SUBCSTRING(XMS_SW_Gray_Name); + }; class arifle_XMS_M_khk_lxWS: arifle_XMS_M_lxWS { displayName = SUBCSTRING(XMS_SW_Khaki_Name); }; diff --git a/addons/compat_ws/compat_ws_realisticnames/CfgWeaponsAttachments.hpp b/addons/compat_ws/compat_ws_realisticnames/CfgWeaponsAttachments.hpp index a805e82edcf..f10af9776aa 100644 --- a/addons/compat_ws/compat_ws_realisticnames/CfgWeaponsAttachments.hpp +++ b/addons/compat_ws/compat_ws_realisticnames/CfgWeaponsAttachments.hpp @@ -1,4 +1,14 @@ // Attachments +class optic_Aco; +class optic_ACO_camo_lxWS: optic_Aco { + displayName = SUBCSTRING(aco_camo_Name); +}; + +class optic_ACO_grn; +class optic_ACO_grn_camo_lxWS: optic_ACO_grn { + displayName = SUBCSTRING(aco_grn_camo_Name); +}; + class optic_Arco; class optic_arco_hex_lxWS: optic_Arco { displayName = SUBCSTRING(arco_hex_Name); diff --git a/addons/compat_ws/compat_ws_realisticnames/stringtable.xml b/addons/compat_ws/compat_ws_realisticnames/stringtable.xml index af0beae62b4..382b0539666 100644 --- a/addons/compat_ws/compat_ws_realisticnames/stringtable.xml +++ b/addons/compat_ws/compat_ws_realisticnames/stringtable.xml @@ -352,6 +352,12 @@ XMS GL XMS GL + + XMS GL (Camo) + + + XMS GL (Gray) + XMS GL (Sand) XMS GL (sable) @@ -388,6 +394,12 @@ XMS XMS + + XMS (Camo) + + + XMS (Gray) + XMS SG (Khaki) XMS SG (kaki) @@ -412,6 +424,12 @@ XMS SG XMS SG + + XMS SG (Camo) + + + XMS SG (Gray) + XMS SG (Sand) XMS SG (sable) @@ -448,6 +466,12 @@ XMS SW XMS SW + + XMS SW (Camo) + + + XMS SW (Gray) + XMS SW (Sand) XMS SW (sable) @@ -526,6 +550,12 @@ 오토카 아르마 APC (비무장) オトカ アルマ (非武装) + + C-More Railway (Red, Camo) + + + C-More Railway (Green, Camo) + ELCAN SpecterOS (Hex) ELCAN SpecterOS (Hex) From fe545d452d0785dbd684330572d8d744840fa387 Mon Sep 17 00:00:00 2001 From: BaerMitUmlaut Date: Wed, 18 Dec 2024 18:21:08 +0100 Subject: [PATCH 05/35] Hearing - Add Electronic Hearing Protection (#10476) Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> --- addons/common/XEH_preInit.sqf | 2 +- .../functions/fnc_setHearingCapability.sqf | 43 +++++-------- addons/fieldmanual/CfgHints.hpp | 44 +++++++------ addons/fieldmanual/stringtable.xml | 8 ++- addons/hearing/ACE_Arsenal_Stats.hpp | 16 +++-- addons/hearing/CfgEventHandlers.hpp | 33 ++++++++++ addons/hearing/CfgVehicles.hpp | 30 ++++++++- addons/hearing/CfgWeapons.hpp | 12 ++++ addons/hearing/XEH_PREP.hpp | 7 +- addons/hearing/XEH_postInit.sqf | 3 +- addons/hearing/XEH_preInit.sqf | 13 ++++ addons/hearing/config.cpp | 2 +- addons/hearing/functions/fnc_addEarPlugs.sqf | 2 +- addons/hearing/functions/fnc_canPutOnEHP.sqf | 23 +++++++ addons/hearing/functions/fnc_earRinging.sqf | 19 ++++++ .../hearing/functions/fnc_handleRespawn.sqf | 6 +- .../functions/fnc_handleVehicleKilled.sqf | 64 +++++++++++++++++++ .../hearing/functions/fnc_hasEarPlugsIn.sqf | 20 ------ .../hearing/functions/fnc_putInEarplugs.sqf | 3 +- addons/hearing/functions/fnc_putOnEHP.sqf | 34 ++++++++++ addons/hearing/functions/fnc_removeEHP.sqf | 39 +++++++++++ .../hearing/functions/fnc_removeEarplugs.sqf | 3 +- ...fnc_statBarStatement_hearingProtection.sqf | 22 +++++++ ...nc_statTextStatement_hearingProtection.sqf | 17 +++++ .../functions/fnc_updateHearingProtection.sqf | 27 ++++++-- addons/hearing/functions/fnc_updateVolume.sqf | 5 +- addons/hearing/initKeybinds.inc.sqf | 23 ++++++- addons/hearing/script_component.hpp | 12 +++- .../script_macros_hearingProtection.hpp | 2 +- addons/hearing/stringtable.xml | 31 +++++++++ docs/wiki/class-names.md | 1 + docs/wiki/development/ace3-config-entries.md | 1 + docs/wiki/framework/hearing-framework.md | 5 +- 33 files changed, 475 insertions(+), 97 deletions(-) create mode 100644 addons/hearing/functions/fnc_canPutOnEHP.sqf create mode 100644 addons/hearing/functions/fnc_handleVehicleKilled.sqf delete mode 100644 addons/hearing/functions/fnc_hasEarPlugsIn.sqf create mode 100644 addons/hearing/functions/fnc_putOnEHP.sqf create mode 100644 addons/hearing/functions/fnc_removeEHP.sqf create mode 100644 addons/hearing/functions/fnc_statBarStatement_hearingProtection.sqf create mode 100644 addons/hearing/functions/fnc_statTextStatement_hearingProtection.sqf diff --git a/addons/common/XEH_preInit.sqf b/addons/common/XEH_preInit.sqf index bb2a0c6810a..af16bfc23df 100644 --- a/addons/common/XEH_preInit.sqf +++ b/addons/common/XEH_preInit.sqf @@ -35,7 +35,7 @@ ACE_COUNTERS = []; GVAR(statusEffects) = createHashMap; -GVAR(setHearingCapabilityMap) = []; +GVAR(setHearingCapabilityMap) = createHashMap; [] call FUNC(setupLocalUnitsHandler); // Add local units event handlers (ace_common_localUnits) diff --git a/addons/common/functions/fnc_setHearingCapability.sqf b/addons/common/functions/fnc_setHearingCapability.sqf index 45858278c13..de2eaa99771 100644 --- a/addons/common/functions/fnc_setHearingCapability.sqf +++ b/addons/common/functions/fnc_setHearingCapability.sqf @@ -1,12 +1,13 @@ #include "..\script_component.hpp" /* - * Author: Glowbal + * Author: Glowbal, BaerMitUmlaut * Handle set volume calls. Will use the lowest available volume setting. * * Arguments: * 0: ID * 1: Settings * 2: Add (true) or remove (false) (default: true) + * 3: Volume fade duration (default: 0) * * Return Value: * None @@ -17,40 +18,26 @@ * Public: Yes */ -params ["_id", "_setting", ["_add", true]]; +params ["_id", "_setting", ["_add", true], ["_fadeDuration", 0]]; -private _exists = false; -private _lowestVolume = 1; +_id = toLowerANSI _id; -GVAR(setHearingCapabilityMap) = GVAR(setHearingCapabilityMap) select { - _x params ["_xID", "_xSetting"]; - if (_id == _xID) then { - _exists = true; - if (_add) then { - _x set [1, _setting]; - _lowestVolume = _lowestVolume min _setting; - true - } else { - false - }; - } else { - _lowestVolume = _lowestVolume min _xSetting; - true - }; +// Save setting +if (_add) then { + GVAR(setHearingCapabilityMap) set [_id, _setting]; +} else { + GVAR(setHearingCapabilityMap) deleteAt _id; }; -if (!_exists && _add) then { - _lowestVolume = _lowestVolume min _setting; - GVAR(setHearingCapabilityMap) pushBack [_id, _setting]; -}; +private _lowestVolume = selectMin values GVAR(setHearingCapabilityMap); -// in game sounds -0 fadeSound _lowestVolume; -0 fadeRadio _lowestVolume; +// In-game sounds +_fadeDuration fadeSound _lowestVolume; +_fadeDuration fadeRadio _lowestVolume; if (GVAR(allowFadeMusic)) then { - 0 fadeMusic _lowestVolume; + _fadeDuration fadeMusic _lowestVolume; }; -// Set Radio mod variables. +// Set radio mod variables ACE_player setVariable ["tf_globalVolume", _lowestVolume]; if (!isNil "acre_api_fnc_setGlobalVolume") then { [_lowestVolume^0.33] call acre_api_fnc_setGlobalVolume; }; diff --git a/addons/fieldmanual/CfgHints.hpp b/addons/fieldmanual/CfgHints.hpp index 6f5b0c8efef..9020df1a40a 100644 --- a/addons/fieldmanual/CfgHints.hpp +++ b/addons/fieldmanual/CfgHints.hpp @@ -106,22 +106,30 @@ class CfgHints { description = CSTRING(Items_EarPlugs_Description); tip = "Hearing Wiki"; }; - class ACE_EntrenchingTool: ACE_FieldManual_Base { + class ACE_EHP: ACE_FieldManual_Base { logicalOrder = 11; + arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_EHP' call FUNC(getItemName))}; + displayName = "%14"; + displayNameShort = CSTRING(Items_EHP_ShortName); + description = CSTRING(Items_EHP_Description); + tip = "Hearing Wiki"; + }; + class ACE_EntrenchingTool: ACE_FieldManual_Base { + logicalOrder = 12; arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_EntrenchingTool' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_EntrenchingTool_ShortName); description = CSTRING(Items_EntrenchingTool_Description); }; class ACE_Flashlights: ACE_FieldManual_Base { - logicalOrder = 12; + logicalOrder = 13; displayName = CSTRING(Items_Flashlights_DisplayName); displayNameShort = CSTRING(Items_Flashlights_ShortName); description = CSTRING(Items_Flashlights_Description); tip = "Flashlights Wiki"; }; class ACE_FortifyTool: ACE_FieldManual_Base { - logicalOrder = 13; + logicalOrder = 14; arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_Fortify' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_FortifyTool_ShortName); @@ -129,7 +137,7 @@ class CfgHints { tip = "Fortify Wiki"; }; class ACE_HuntIR_Monitor: ACE_FieldManual_Base { - logicalOrder = 14; + logicalOrder = 15; arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_HuntIR_monitor' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_HuntIR_Monitor_ShortName); @@ -137,14 +145,14 @@ class CfgHints { tip = "HuntIR Wiki"; }; class ACE_IR_Strobe: ACE_FieldManual_Base { - logicalOrder = 15; + logicalOrder = 16; arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_IR_Strobe_Item' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_IR_Strobe_ShortName); description = CSTRING(Items_IR_Strobe_Description); }; class ACE_Kestrel4500: ACE_FieldManual_Base { - logicalOrder = 16; + logicalOrder = 17; arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_Kestrel4500' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_Kestrel4500_ShortName); @@ -152,7 +160,7 @@ class CfgHints { tip = "Kestrel 4500 Wiki"; }; class ACE_Lockpick: ACE_FieldManual_Base { - logicalOrder = 17; + logicalOrder = 18; arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_key_lockpick' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_Lockpick_ShortName); @@ -160,14 +168,14 @@ class CfgHints { tip = "Vehicle Lock Wiki"; }; class ACE_MapTools: ACE_FieldManual_Base { - logicalOrder = 18; + logicalOrder = 19; arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_MapTools' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_MapTools_ShortName); description = CSTRING(Items_MapTools_Description); }; class ACE_MicroDAGR: ACE_FieldManual_Base { - logicalOrder = 19; + logicalOrder = 20; arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_microDAGR' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_MicroDAGR_ShortName); @@ -176,20 +184,20 @@ class CfgHints { }; // Combine all range tables under one roof [mortar, artillery, rifle] class ACE_RangeTables: ACE_FieldManual_Base { - logicalOrder = 20; + logicalOrder = 21; displayName = CSTRING(Items_RangeTables_DisplayName); displayNameShort = CSTRING(Items_RangeTables_ShortName); description = CSTRING(Items_RangeTables_Description); tip = "Rangecard Wiki"; }; class ACE_Ropes: ACE_FieldManual_Base { - logicalOrder = 21; + logicalOrder = 22; displayName = CSTRING(Items_Ropes_DisplayName); displayNameShort = CSTRING(Items_Ropes_ShortName); description = CSTRING(Items_Ropes_Description); }; class ACE_Sandbag: ACE_FieldManual_Base { - logicalOrder = 22; + logicalOrder = 23; arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_Sandbag_empty' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_Sandbag_ShortName); @@ -197,7 +205,7 @@ class CfgHints { tip = "Sandbag Wiki"; }; class ACE_SpareBarrels: ACE_FieldManual_Base { - logicalOrder = 23; + logicalOrder = 24; arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_SpareBarrel_Item' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_SpareBarrels_ShortName); @@ -205,14 +213,14 @@ class CfgHints { tip = "Overheating Wiki"; }; class ACE_SprayPaint: ACE_FieldManual_Base { - logicalOrder = 24; + logicalOrder = 25; displayName = CSTRING(Items_SprayPaint_DisplayName); displayNameShort = CSTRING(Items_SprayPaint_ShortName); description = CSTRING(Items_SprayPaint_Description); tip = "Tagging Wiki"; }; class ACE_Tripod: ACE_FieldManual_Base { - logicalOrder = 25; + logicalOrder = 26; arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_Tripod' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_Tripod_ShortName); @@ -220,7 +228,7 @@ class CfgHints { tip = "Tripod Wiki"; }; class ACE_UAVBattery: ACE_FieldManual_Base { - logicalOrder = 26; + logicalOrder = 27; arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_UAVBattery' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_UAVBattery_ShortName); @@ -228,14 +236,14 @@ class CfgHints { tip = "UAV Battery Wiki"; }; class ACE_VehicleKey: ACE_FieldManual_Base { - logicalOrder = 27; + logicalOrder = 28; displayName = CSTRING(Items_VehicleKey_DisplayName); displayNameShort = CSTRING(Items_VehicleKey_ShortName); description = CSTRING(Items_VehicleKey_Description); tip = "Vehicle Lock Wiki"; }; class ACE_Wirecutter: ACE_FieldManual_Base { - logicalOrder = 28; + logicalOrder = 29; arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_wirecutter' call FUNC(getItemName))}; displayName = "%14"; displayNameShort = CSTRING(Items_Wirecutter_ShortName); diff --git a/addons/fieldmanual/stringtable.xml b/addons/fieldmanual/stringtable.xml index 73551b4a341..c617d67de6a 100644 --- a/addons/fieldmanual/stringtable.xml +++ b/addons/fieldmanual/stringtable.xml @@ -284,6 +284,12 @@ 청력을 보호합니다 聴覚の保護 + + %3Electronic Hearing Protection (EHP)%4 helps prevent hearing damage from repeat loud noises near a soldier. Differently from %3Ear Plugs%4, volume is only reduced when necessary. %3EHP%4 can also be built-in to certain types of %3Headgear%4 and %3Facewear%4.<br/><br/>%3Usage:%4<br/>%2Use [%3%12%4] and select %3Equipment%4.<br/>%2Put on Electronic Hearing Protection%4. + + + Protect Your Hearing, Electronically + The %3Entrenching Tool%4 allows soldiers to dig trenches to help defend their position. The soldier must be on soil in order to dig a trench.<br/><br/>%3Usage:%4<br/>%2Equip an %3Entrenching Tool%4.<br/>%2Use [%3%12%4] and select %3Equipment%4.<br/>%2Select the type of trench you wish to build. La %3Pala de Trincheras%4 permite a los soldados excavar trincheras para ayudarles a defender su posición. El soldado debe estar sobre tierra para poder excavar una trinchera.<br/><br/>%3Uso:%4<br/>%2Equipar la %3Pala de Trincheras%4.<br/>%2Usar [%3%12%4] y seleccionar %3Equipamiento%4.<br/>%2Seleccionar el tipo de trinchera que quieres construir. @@ -440,7 +446,7 @@ 三角測量で位置を特定 - The %3MicroDAGR GPS%4 is an advanced version of the %3DAGR%4. It provides position, navigation, and timing (PNT) data to include:<br/>%2Compass and heading<br/>%2Date and hour synced to the mission<br/>%2Elevation (relative to sea level)<br/>%2Current speed<br/>%2GPS with topographic and satellite view<br/>%2Creating, naming, and deleting waypoints<br/>%2Friendly identification (Requires ACE BLUFOR Tracker Setting)<br/>Connection to the Vector-21 Rangefinder for data import (waypoint creation and grid reference of ranged targets)<br/><br/>%3Usage:%4<br/>%2For usage instructions, please visit the dedicated %3MicroDAGR%4 wiki. + The %3MicroDAGR GPS%4 is an advanced version of the %3DAGR%4. It provides position, navigation, and timing (PNT) data to include:<br/>%2Compass and heading<br/>%2Date and hour synced to the mission<br/>%2Elevation (relative to sea level)<br/>%2Current speed<br/>%2GPS with topographic and satellite view<br/>%2Creating, naming, and deleting waypoints<br/>%2Friendly identification (Requires ACE BLUFOR Tracker Setting)<br/>%2Connection to the Vector-21 Rangefinder for data import (waypoint creation and grid reference of ranged targets)<br/><br/>%3Usage:%4<br/>%2For usage instructions, please visit the dedicated %3MicroDAGR%4 wiki. El %3GPS MicroDAGR%4 es una versión avanzada del %3DAGR%4. Provee de posicionamiento, navegación y datos de temporización (PNT) que incluye:<br/>%2Brújula y dirección<br/>%2Fecha y hora sincronizada con la misión<br/>%2Elevación (relativa al nivel del mar)<br/>%2Velocidad actual<br/>%2GPS con vista topográfica y satelital<br/>%2Creación, nombrado y borrado de puntos de ruta<br/>%2Identificación de aliados (Requiere la opción de ACE BLUFOR Tracker)<br/>Conexión con el telémetro Vector-21 para importación de datos (creación de puntos de ruta y referenciado en eje de coordenada para objetivos a distancia)<br/><br/>%3Uso:%4<br/>%2Para instrucciones de uso, por favor visita la Wiki dedicada de %3MicroDAGR%4. Il %3GPS MicroDAGR%4 è una versione avanzata del %3DAGR%4. Esso mostra dati su posizione, navigazione e tempismo (PNT), includendo:<br/>%2Bussola e azimut<br/>%2Data e ora sincronizzate con la missione<br/>%2Elevazione (dal livello del mare)<br/>%2Velocità attuale<br/>%2GPS con visuale topografica e satellitare<br/>%2Creazione, rinomina e rimozione di waypoint<br/>%2Identificazione di alleati (Richiede Impostazioni ACE BLUFOR Tracker)<br/>Connessione al Telemetro Vector-21 per importazione di dati (creazione waypoint e indicazione di griglia su bersagli puntati)<br/><br/>%3Utilizzo:%4<br/>%2Per informazioni sull'utilizzo sei pregato di visitare la pagina wiki dedicata al %3MicroDAGR%4. %3MicroDAGR GPS%4 jest zaawansowaną wersją %3DAGR%4. Dostarcza dane oparte o pozycję, nawigację, i czas (PNT): <br/>%2Kompas i kierunek<br/>%2Datę i godzinę zsynchronizowaną z misją<br/>%2Elewację (relatywną do poziomu morza)<br/>%2Obecną prędkość<br/>%2GPS z widokiem topograficznym i satelitarnym<br/>%2Tworzenie, nazywanie oraz usuwanie waypointów<br/>%2Identyfikację sojuszników (Wymaga ACE BLUFOR Tracker)<br/>Połączenie do dalmierza Vector-21 w celu importu danych (waypointy i współrzędne zmierzonego celu)<br/><br/>%3Użycie: %4<br/>%2Po instrukcję użycia odwiedź %3MicroDAGR%4 wiki. diff --git a/addons/hearing/ACE_Arsenal_Stats.hpp b/addons/hearing/ACE_Arsenal_Stats.hpp index 0ab83eed601..a83d274f8a2 100644 --- a/addons/hearing/ACE_Arsenal_Stats.hpp +++ b/addons/hearing/ACE_Arsenal_Stats.hpp @@ -3,19 +3,23 @@ class EGVAR(arsenal,stats) { class ACE_hearingProtection: statBase { scope = 2; priority = 2; - stats[] = {QGVAR(protection)}; - displayName= CSTRING(statHearingProtection); + stats[] = {QGVAR(protection), QGVAR(hasEHP)}; + displayName = CSTRING(statHearingProtection); showBar = 1; - barStatement = QUOTE([ARR_3((_this select 0) select 0,_this select 1,[ARR_3([ARR_2(0,1)],[ARR_2(0.01,1)],false)])] call EFUNC(arsenal,statBarStatement_default)); - tabs[] = {{6}, {}}; + condition = QUOTE([ARR_2(_this select 0,_this select 1)] call EFUNC(arsenal,statCondition_existsAny)); + barStatement = QUOTE([ARR_2(_this select 0,_this select 1)] call FUNC(statBarStatement_hearingProtection)); + showText = 1; + textStatement = QUOTE(_this select 1 call FUNC(statTextStatement_hearingProtection)); + tabs[] = {{6, 7}, {}}; }; class ACE_volumeMuffling: statBase { scope = 2; priority = 1.75; stats[] = {QGVAR(lowerVolume)}; - displayName= CSTRING(statHearingLowerVolume); + displayName = CSTRING(statHearingLowerVolume); showBar = 1; + condition = QUOTE([ARR_2(_this select 0,_this select 1)] call EFUNC(arsenal,statCondition_existsAll)); barStatement = QUOTE([ARR_3((_this select 0) select 0,_this select 1,[ARR_3([ARR_2(0,1)],[ARR_2(0.01,1)],false)])] call EFUNC(arsenal,statBarStatement_default)); - tabs[] = {{6}, {}}; + tabs[] = {{6, 7}, {}}; }; }; diff --git a/addons/hearing/CfgEventHandlers.hpp b/addons/hearing/CfgEventHandlers.hpp index 59cd1b36296..9fc1be4aee7 100644 --- a/addons/hearing/CfgEventHandlers.hpp +++ b/addons/hearing/CfgEventHandlers.hpp @@ -23,3 +23,36 @@ class Extended_Respawn_EventHandlers { }; }; }; + +class Extended_Killed_EventHandlers { + class Car { + class ADDON { + killed = QUOTE(_this call FUNC(handleVehicleKilled)); + }; + }; + class Tank { + class ADDON { + killed = QUOTE(_this call FUNC(handleVehicleKilled)); + }; + }; + class Motorcycle { + class ADDON { + killed = QUOTE(_this call FUNC(handleVehicleKilled)); + }; + }; + class Helicopter { + class ADDON { + killed = QUOTE(_this call FUNC(handleVehicleKilled)); + }; + }; + class Plane { + class ADDON { + killed = QUOTE(_this call FUNC(handleVehicleKilled)); + }; + }; + class Ship_F { + class ADDON { + killed = QUOTE(_this call FUNC(handleVehicleKilled)); + }; + }; +}; diff --git a/addons/hearing/CfgVehicles.hpp b/addons/hearing/CfgVehicles.hpp index 636184ecd22..182c0ccb46f 100644 --- a/addons/hearing/CfgVehicles.hpp +++ b/addons/hearing/CfgVehicles.hpp @@ -5,7 +5,7 @@ class CfgVehicles { class ACE_Equipment { class ACE_PutInEarplugs { displayName = CSTRING(EarPlugs_On); - condition = QUOTE(GVAR(enableCombatDeafness) && {!(_player call FUNC(hasEarPlugsIn)) && {[ARR_2(_player,'ACE_EarPlugs')] call EFUNC(common,hasItem)}}); + condition = QUOTE(GVAR(enableCombatDeafness) && {!(_player getVariable [ARR_2('ACE_hasEarPlugsIn',false)]) && {[ARR_2(_player,'ACE_EarPlugs')] call EFUNC(common,hasItem)}}); exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting"}; statement = QUOTE([ARR_2(_player,true)] call FUNC(putInEarPlugs)); showDisabled = 0; @@ -13,12 +13,28 @@ class CfgVehicles { }; class ACE_RemoveEarplugs { displayName = CSTRING(EarPlugs_Off); - condition = QUOTE(GVAR(enableCombatDeafness) && {_player call FUNC(hasEarPlugsIn)}); + condition = QUOTE(GVAR(enableCombatDeafness) && {_player getVariable [ARR_2('ACE_hasEarPlugsIn',false)]}); exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting"}; statement = QUOTE([ARR_2(_player,true)] call FUNC(removeEarPlugs)); showDisabled = 0; icon = QPATHTOF(UI\ACE_earplugs_x_ca.paa); }; + class ACE_PutOnEHP { + displayName = CSTRING(ElectronicHearingProtection_On); + condition = QUOTE([_player] call FUNC(canPutOnEHP)); + exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting"}; + statement = QUOTE([ARR_2(_player,true)] call FUNC(putOnEHP)); + showDisabled = 0; + icon = "\A3\Characters_F_Orange\Headgear\Data\UI\icon_H_EarProtectors_black_F_CA.paa"; + }; + class ACE_RemoveEHP { + displayName = CSTRING(ElectronicHearingProtection_Off); + condition = QUOTE(GVAR(EnableCombatDeafness) && {_player getVariable [ARR_2('ACE_hasEHP',false)]}); + exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting"}; + statement = QUOTE([ARR_2(_player,true)] call FUNC(removeEHP)); + showDisabled = 0; + icon = "\A3\Characters_F_Orange\Headgear\Data\UI\icon_H_EarProtectors_black_F_CA.paa"; + }; }; }; }; @@ -32,60 +48,70 @@ class CfgVehicles { class Box_NATO_Support_F: NATO_Box_Base { class TransportItems { MACRO_ADDITEM(ACE_EarPlugs,12); + MACRO_ADDITEM(ACE_EHP,12); }; }; class B_supplyCrate_F: ReammoBox_F { class TransportItems { MACRO_ADDITEM(ACE_EarPlugs,12); + MACRO_ADDITEM(ACE_EHP,12); }; }; class Box_East_Support_F: EAST_Box_Base { class TransportItems { MACRO_ADDITEM(ACE_EarPlugs,12); + MACRO_ADDITEM(ACE_EHP,12); }; }; class O_supplyCrate_F: B_supplyCrate_F { class TransportItems { MACRO_ADDITEM(ACE_EarPlugs,12); + MACRO_ADDITEM(ACE_EHP,12); }; }; class Box_IND_Support_F: IND_Box_Base { class TransportItems { MACRO_ADDITEM(ACE_EarPlugs,12); + MACRO_ADDITEM(ACE_EHP,12); }; }; class Box_FIA_Support_F: FIA_Box_Base_F { class TransportItems { MACRO_ADDITEM(ACE_EarPlugs,12); + MACRO_ADDITEM(ACE_EHP,12); }; }; class I_supplyCrate_F: B_supplyCrate_F { class TransportItems { MACRO_ADDITEM(ACE_EarPlugs,12); + MACRO_ADDITEM(ACE_EHP,12); }; }; class IG_supplyCrate_F: ReammoBox_F { class TransportItems { MACRO_ADDITEM(ACE_EarPlugs,12); + MACRO_ADDITEM(ACE_EHP,12); }; }; class C_supplyCrate_F: ReammoBox_F { class TransportItems { MACRO_ADDITEM(ACE_EarPlugs,12); + MACRO_ADDITEM(ACE_EHP,12); }; }; class ACE_Box_Misc: Box_NATO_Support_F { class TransportItems { MACRO_ADDITEM(ACE_EarPlugs,12); + MACRO_ADDITEM(ACE_EHP,12); }; }; diff --git a/addons/hearing/CfgWeapons.hpp b/addons/hearing/CfgWeapons.hpp index 8cef02edfd8..1f80544ea7f 100644 --- a/addons/hearing/CfgWeapons.hpp +++ b/addons/hearing/CfgWeapons.hpp @@ -14,6 +14,18 @@ class CfgWeapons { }; }; + class ACE_EHP: ACE_ItemCore { + author = ECSTRING(common,ACETeam); + displayName = CSTRING(ElectronicHearingProtection_Name); + descriptionShort = CSTRING(ElectronicHearingProtection_Description); + model = "\A3\Characters_F_Orange\Headgear\H_EarProtectors_F.p3d"; + picture = "\A3\Characters_F_Orange\Headgear\Data\UI\icon_H_EarProtectors_black_F_CA.paa"; + scope = 2; + class ItemInfo: CBA_MiscItem_ItemInfo { + mass = 8.4; // 380g, based on 3M Peltor + }; + }; + class H_HelmetB; class H_HelmetCrew_B: H_HelmetB { diff --git a/addons/hearing/XEH_PREP.hpp b/addons/hearing/XEH_PREP.hpp index 64161300d3e..f2b70b8ab53 100644 --- a/addons/hearing/XEH_PREP.hpp +++ b/addons/hearing/XEH_PREP.hpp @@ -1,13 +1,18 @@ PREP(addEarPlugs); +PREP(canPutOnEHP); PREP(earRinging); PREP(explosion); PREP(firedNear); PREP(getAmmoLoudness); PREP(handleRespawn); -PREP(hasEarPlugsIn); +PREP(handleVehicleKilled); PREP(moduleHearing); PREP(putInEarPlugs); +PREP(putOnEHP); PREP(removeEarPlugs); +PREP(removeEHP); +PREP(statBarStatement_hearingProtection); +PREP(statTextStatement_hearingProtection); PREP(updateHearingProtection); PREP(updatePlayerVehAttenuation); PREP(updateVolume); diff --git a/addons/hearing/XEH_postInit.sqf b/addons/hearing/XEH_postInit.sqf index 0ced6cad9c2..3108161900b 100644 --- a/addons/hearing/XEH_postInit.sqf +++ b/addons/hearing/XEH_postInit.sqf @@ -50,6 +50,7 @@ GVAR(time3) = 0; GVAR(damageCoefficent) = 1; GVAR(volumeAttenuation) = 1; GVAR(lastPlayerVehicle) = objNull; +GVAR(ehpTimeout) = -1; ["CBA_settingsInitialized", { TRACE_1("settingInit - client",GVAR(enableCombatDeafness)); @@ -97,6 +98,6 @@ GVAR(lastPlayerVehicle) = objNull; GVAR(deafnessPrior) = 0; GVAR(time3) = 0; - UPDATE_HEARING_EARPLUGS call FUNC(updateHearingProtection); + UPDATE_HEARING call FUNC(updateHearingProtection); }, true] call CBA_fnc_addPlayerEventHandler; }] call CBA_fnc_addEventHandler; diff --git a/addons/hearing/XEH_preInit.sqf b/addons/hearing/XEH_preInit.sqf index eb9636a12c2..36d2159e8c9 100644 --- a/addons/hearing/XEH_preInit.sqf +++ b/addons/hearing/XEH_preInit.sqf @@ -19,6 +19,15 @@ PREP_RECOMPILE_END; [QGVAR(updateVolume), true, _unit] call CBA_fnc_targetEvent; }; }; + + if (_extendedInfo getOrDefault ["ace_ehp", false]) then { + _unit setVariable ["ACE_hasEHP", true, true]; + + // Only force update volume if unit is a player (including remote controlled) + if (_unit call EFUNC(common,isPlayer)) then { + [QGVAR(updateVolume), true, _unit] call CBA_fnc_targetEvent; + }; + }; }] call CBA_fnc_addEventHandler; ["CBA_loadoutGet", { @@ -27,6 +36,10 @@ PREP_RECOMPILE_END; if (_unit getVariable ["ACE_hasEarPlugsIn", false]) then { _extendedInfo set ["ace_earplugs", true] }; + + if (_unit getVariable ["ACE_hasEHP", false]) then { + _extendedInfo set ["ace_ehp", true] + }; }] call CBA_fnc_addEventHandler; ADDON = true; diff --git a/addons/hearing/config.cpp b/addons/hearing/config.cpp index ba6674b9db0..fcdef40324b 100644 --- a/addons/hearing/config.cpp +++ b/addons/hearing/config.cpp @@ -4,7 +4,7 @@ class CfgPatches { class ADDON { name = COMPONENT_NAME; units[] = {}; - weapons[] = {"ACE_EarPlugs"}; + weapons[] = {"ACE_EarPlugs", "ACE_EHP"}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_interaction"}; author = ECSTRING(common,ACETeam); diff --git a/addons/hearing/functions/fnc_addEarPlugs.sqf b/addons/hearing/functions/fnc_addEarPlugs.sqf index 11999f77378..c0bd6b92d83 100644 --- a/addons/hearing/functions/fnc_addEarPlugs.sqf +++ b/addons/hearing/functions/fnc_addEarPlugs.sqf @@ -27,7 +27,7 @@ params ["_unit"]; TRACE_2("params",_unit,typeOf _unit); // Exit if the unit already has earplugs (in ears (persistence scenarios) or inventory) -if (_unit call FUNC(hasEarPlugsIn) || {[_unit, "ACE_EarPlugs"] call EFUNC(common,hasItem)}) exitWith {}; +if ((_unit getVariable ["ACE_hasEarPlugsIn", false]) || {[_unit, "ACE_EarPlugs"] call EFUNC(common,hasItem)}) exitWith {}; // Add earplugs if enabled for everyone or if the unit has a rocket launcher if (GVAR(autoAddEarplugsToUnits) == 2 || {(secondaryWeapon _unit) != ""}) exitWith { diff --git a/addons/hearing/functions/fnc_canPutOnEHP.sqf b/addons/hearing/functions/fnc_canPutOnEHP.sqf new file mode 100644 index 00000000000..01f327ac1ec --- /dev/null +++ b/addons/hearing/functions/fnc_canPutOnEHP.sqf @@ -0,0 +1,23 @@ +#include "..\script_component.hpp" +/* + * Author: BaerMitUmlaut + * Checks if the unit can put on electronic hearing protection. + * + * Arguments: + * 0: Unit + * + * Return Value: + * True if unit can put on electronic hearing protection, otherwise false. + * + * Example: + * [player] call ace_hearing_fnc_canPutOnEHP + * + * Public: No + */ +params ["_unit"]; + +GVAR(enableCombatDeafness) +&& {!(_unit getVariable ["ACE_hasEHP", false])} +&& {[_unit, "ACE_EHP"] call EFUNC(common,hasItem)} +&& {(headgear _unit == "") || {getNumber (configFile >> "CfgWeapons" >> headgear _unit >> QGVAR(hasEHP)) == 0}} +&& {(goggles _unit == "") || {getNumber (configFile >> "CfgGlasses" >> goggles _unit >> QGVAR(hasEHP)) == 0}} diff --git a/addons/hearing/functions/fnc_earRinging.sqf b/addons/hearing/functions/fnc_earRinging.sqf index 57888e90a2e..70f9f6015f9 100644 --- a/addons/hearing/functions/fnc_earRinging.sqf +++ b/addons/hearing/functions/fnc_earRinging.sqf @@ -23,4 +23,23 @@ if (!GVAR(enabledForZeusUnits) && {player != ACE_player}) exitWith {}; TRACE_2("adding",_strength * GVAR(damageCoefficent),GVAR(deafnessDV)); +// Handle volume reduction by electronic hearing protection +if ( + _strength >= EHP_MIN_STRENGTH + && {ACE_player getVariable ["ACE_hasEHP", false] || {ACE_player getVariable ["ACE_hasBuiltInEHP", false]}} +) then { + if (GVAR(ehpTimeout) == -1) then { + [QGVAR(ehp), EHP_REDUCTION * GVAR(volumeAttenuation), true] call EFUNC(common,setHearingCapability); + + [{ + CBA_missionTime >= GVAR(ehpTimeout) + }, { + [QGVAR(ehp), 1, true, EHP_FADE_IN] call EFUNC(common,setHearingCapability); + GVAR(ehpTimeout) = -1; + }] call CBA_fnc_waitUntilAndExecute; + }; + + GVAR(ehpTimeout) = CBA_missionTime + EHP_TIMEOUT; +}; + GVAR(deafnessDV) = GVAR(deafnessDV) + (_strength * GVAR(damageCoefficent)); diff --git a/addons/hearing/functions/fnc_handleRespawn.sqf b/addons/hearing/functions/fnc_handleRespawn.sqf index 54d4730eda2..957f38a3f93 100644 --- a/addons/hearing/functions/fnc_handleRespawn.sqf +++ b/addons/hearing/functions/fnc_handleRespawn.sqf @@ -27,11 +27,15 @@ private _respawn = [0] call BIS_fnc_missionRespawnType; // If respawn is not group or side: if (_respawn <= 3) then { - // Remove earplugs if they have them: + // Remove earplugs & EHP if they have them if (_unit getVariable ["ACE_hasEarPlugsIn", false]) then { TRACE_1("had EarPlugs in - removing",_unit); _unit setVariable ["ACE_hasEarPlugsIn", false, true]; }; + if (_unit getVariable ["ACE_hasEHP", false]) then { + TRACE_1("had EHP on - removing",_unit); + _unit setVariable ["ACE_hasEHP", false, true]; + }; }; // Re-add if they need them diff --git a/addons/hearing/functions/fnc_handleVehicleKilled.sqf b/addons/hearing/functions/fnc_handleVehicleKilled.sqf new file mode 100644 index 00000000000..08e44ed194c --- /dev/null +++ b/addons/hearing/functions/fnc_handleVehicleKilled.sqf @@ -0,0 +1,64 @@ +#include "..\script_component.hpp" +/* + * Author: BaerMitUmlaut + * Handles the explosion noise when a vehicle is destroyed. + * + * Arguments: + * 0: Vehicle + * 1: Killer + * 2: Instigator + * 3: Use effects + * + * Return Value: + * None + * + * Example: + * [vehicle player, player, player, true] call ace_hearing_fnc_handleVehicleKilled + * + * Public: No + */ +params ["_vehicle", "", "", "_useEffects"]; + +if (!_useEffects) exitWith {}; + +private _distance = (ACE_player distance _vehicle) max 1; +if (_distance > 50) exitWith {}; + +// Calculate explosion power +// This formula was once revealed to me in a dream +private _cfg = configOf _vehicle; +private _explosionPower = getNumber (_cfg >> "secondaryExplosion"); +if (_explosionPower == 0) exitWith {}; + +if (_explosionPower < 0) then { + private _fuelCargoPower = (getFuelCargo _vehicle max 0) * getNumber (_cfg >> "transportFuel") * 0.1; + private _fuelPower = fuel _vehicle * getNumber (_cfg >> "fuelCapacity") * 0.1; + + private _ammoCargoPower = (getAmmoCargo _vehicle max 0) * getNumber (_cfg >> "transportAmmo") * 0.05; + private _ammoPower = 0; + private _magCache = createHashMap; + { + _x params ["_magClass", "_count"]; + private _hit = _magCache getOrDefaultCall [_magClass, { + private _ammo = getText (configFile >> "CfgMagazines" >> _magClass >> "ammo"); + getNumber (configFile >> "CfgAmmo" >> _ammo >> "hit") + }, true]; + + _ammoPower = _ammoPower + _hit * _count * 0.015; + } forEach magazinesAmmoFull _vehicle; + + _explosionPower = abs _explosionPower * (_ammoCargoPower + _fuelCargoPower + _fuelPower + _ammoPower); +}; + +private _powerCoef = getNumber (_cfg >> "fuelExplosionPower"); + +// A low explosion power causes no immediate audible explosion +// Number + coef mechanics found through extensive testing +if (_explosionPower > 6.25 * _powerCoef) then { + // Calculate effective strength for player + private _vehAttenuation = [GVAR(playerVehAttenuation), 1] select (isNull objectParent ACE_player || {isTurnedOut ACE_player}); + + private _effect = getText (_cfg >> "explosionEffect"); + private _strength = [VEHICLE_EXPLOSION_STRENGTH, VEHICLE_EXPLOSION_BIG_STRENGTH] select (toLower _effect in ["fuelexplosionbig", "fuelcapacitorexplosion"]); + (_vehAttenuation * _strength / _distance) call FUNC(earRinging); +}; diff --git a/addons/hearing/functions/fnc_hasEarPlugsIn.sqf b/addons/hearing/functions/fnc_hasEarPlugsIn.sqf deleted file mode 100644 index a94f0fe47e0..00000000000 --- a/addons/hearing/functions/fnc_hasEarPlugsIn.sqf +++ /dev/null @@ -1,20 +0,0 @@ -#include "..\script_component.hpp" -/* - * Author: commy2 - * Check if the unit has earplugs put in. - * - * Arguments: - * 0: Unit - * - * Return Value: - * Has Earplugs in - * - * Example: - * player call ace_hearing_fnc_hasEarPlugsIn - * - * Public: No - */ - -params ["_unit"]; - -_unit getVariable ["ACE_hasEarPlugsIn", false] diff --git a/addons/hearing/functions/fnc_putInEarplugs.sqf b/addons/hearing/functions/fnc_putInEarplugs.sqf index 535ad7af01d..cb425226fd8 100644 --- a/addons/hearing/functions/fnc_putInEarplugs.sqf +++ b/addons/hearing/functions/fnc_putInEarplugs.sqf @@ -31,5 +31,4 @@ if (_displayHint) then { // Force an immediate volume update true call FUNC(updateVolume); - -UPDATE_HEARING_EARPLUGS call FUNC(updateHearingProtection); +UPDATE_HEARING call FUNC(updateHearingProtection); diff --git a/addons/hearing/functions/fnc_putOnEHP.sqf b/addons/hearing/functions/fnc_putOnEHP.sqf new file mode 100644 index 00000000000..8bb055884d4 --- /dev/null +++ b/addons/hearing/functions/fnc_putOnEHP.sqf @@ -0,0 +1,34 @@ +#include "..\script_component.hpp" +/* + * Author: BaerMitUmlaut + * Puts on electronic hearing protection. + * + * Arguments: + * 0: Unit + * 1: Display hint (default: false) + * + * Return Value: + * None + * + * Example: + * [player, false] call ace_hearing_fnc_putOnEHP + * + * Public: No + */ + +if (!GVAR(enableCombatDeafness)) exitWith {}; + +params ["_unit", ["_displayHint", false]]; + +// Plugs in inventory, putting them in +_unit removeItem "ACE_EHP"; + +_unit setVariable ["ACE_hasEHP", true, true]; + +if (_displayHint) then { + [LLSTRING(ElectronicHearingProtection_Are_On)] call EFUNC(common,displayTextStructured); +}; + +// Force an immediate volume update +true call FUNC(updateVolume); +UPDATE_HEARING call FUNC(updateHearingProtection); diff --git a/addons/hearing/functions/fnc_removeEHP.sqf b/addons/hearing/functions/fnc_removeEHP.sqf new file mode 100644 index 00000000000..37d3d114f7e --- /dev/null +++ b/addons/hearing/functions/fnc_removeEHP.sqf @@ -0,0 +1,39 @@ +#include "..\script_component.hpp" +/* + * Author: BaerMitUmlaut + * Takes off electronic hearing protection. + * + * Arguments: + * 0: Unit + * 1: Display hint (default: false) + * + * Return Value: + * None + * + * Example: + * [player, false] call ace_hearing_fnc_removeEHP + * + * Public: No + */ + +if (!GVAR(enableCombatDeafness)) exitWith {}; + +params ["_unit", ["_displayHint", false]]; + +// Inventory full +if !([_unit, "ACE_EHP"] call CBA_fnc_canAddItem) exitWith { + [LELSTRING(common,Inventory_Full)] call EFUNC(common,displayTextStructured); +}; + +// Plugs already in and removing them. +_unit addItem "ACE_EHP"; + +_unit setVariable ["ACE_hasEHP", false, true]; + +if (_displayHint) then { + [LLSTRING(ElectronicHearingProtection_Are_Off)] call EFUNC(common,displayTextStructured); +}; + +// Force an immediate volume update +true call FUNC(updateVolume); +UPDATE_HEARING call FUNC(updateHearingProtection); diff --git a/addons/hearing/functions/fnc_removeEarplugs.sqf b/addons/hearing/functions/fnc_removeEarplugs.sqf index 2d6cffb02e9..18e8256aa23 100644 --- a/addons/hearing/functions/fnc_removeEarplugs.sqf +++ b/addons/hearing/functions/fnc_removeEarplugs.sqf @@ -36,5 +36,4 @@ if (_displayHint) then { // Force an immediate volume update true call FUNC(updateVolume); - -UPDATE_HEARING_EARPLUGS call FUNC(updateHearingProtection); +UPDATE_HEARING call FUNC(updateHearingProtection); diff --git a/addons/hearing/functions/fnc_statBarStatement_hearingProtection.sqf b/addons/hearing/functions/fnc_statBarStatement_hearingProtection.sqf new file mode 100644 index 00000000000..729c39c5790 --- /dev/null +++ b/addons/hearing/functions/fnc_statBarStatement_hearingProtection.sqf @@ -0,0 +1,22 @@ +#include "..\script_component.hpp" +/* + * Author: LinkIsGrim + * Bar statement for hearing protection. + * + * Arguments: + * 0: Stats + * 1: Item config path + * + * Return Value: + * Bar statement + * + * Public: No +*/ + +params ["_stats", "_config", "_args"]; + +if (getNumber (_config >> (_stats # 1)) == 1) exitWith { + 1 +}; + +[_stats select 0, _config, [[0, 1], [0.01, 1], false]] call EFUNC(arsenal,statBarStatement_default) diff --git a/addons/hearing/functions/fnc_statTextStatement_hearingProtection.sqf b/addons/hearing/functions/fnc_statTextStatement_hearingProtection.sqf new file mode 100644 index 00000000000..19a9fa4145e --- /dev/null +++ b/addons/hearing/functions/fnc_statTextStatement_hearingProtection.sqf @@ -0,0 +1,17 @@ +#include "..\script_component.hpp" +/* + * Author: LinkIsGrim + * Text statement for hearing protection. + * + * Arguments: + * 0: Item config path + * + * Return Value: + * Stat Text + * + * Public: No +*/ + +params ["_config"]; + +["", LLSTRING(statEHP)] select (getNumber (_config >> QGVAR(hasEHP))) diff --git a/addons/hearing/functions/fnc_updateHearingProtection.sqf b/addons/hearing/functions/fnc_updateHearingProtection.sqf index b4584a567a8..d1b06af9b48 100644 --- a/addons/hearing/functions/fnc_updateHearingProtection.sqf +++ b/addons/hearing/functions/fnc_updateHearingProtection.sqf @@ -10,7 +10,7 @@ * None * * Example: - * UPDATE_HEARING_EARPLUGS call ace_hearing_fnc_updateHearingProtection + * UPDATE_HEARING call ace_hearing_fnc_updateHearingProtection * * Public: No */ @@ -25,13 +25,16 @@ if (isNull ACE_player) exitWith { params ["_slot"]; TRACE_1("",_slot); -if !(_slot in [UPDATE_HEARING_EARPLUGS, TYPE_GOGGLE, TYPE_HEADGEAR]) exitWith {}; +if !(_slot in [UPDATE_HEARING, TYPE_GOGGLE, TYPE_HEADGEAR]) exitWith {}; -// Handle Earplugs -private _hasEarPlugsIn = ACE_player call FUNC(hasEarPlugsIn); +// Handle ACE items +private _hasEarPlugsIn = ACE_player getVariable ["ACE_hasEarPlugsIn", false]; GVAR(damageCoefficent) = [1, 0.25] select _hasEarPlugsIn; GVAR(volumeAttenuation) = [1, GVAR(earplugsVolume)] select _hasEarPlugsIn; +private _hasEHPOn = ACE_player getVariable ["ACE_hasEHP", false]; +private _hasBuiltInEHP = false; + // Handle Headgear private _headgear = headgear ACE_player; @@ -43,6 +46,8 @@ if (_headgear != "") then { private _attenuation = getNumber (_heargearConfig >> QGVAR(lowerVolume)) min 1; GVAR(volumeAttenuation) = GVAR(volumeAttenuation) * (1 - _attenuation); + + _hasBuiltInEHP = _hasBuiltInEHP || { getNumber (_heargearConfig >> QGVAR(hasEHP)) > 0 }; }; // Handle Goggles @@ -56,4 +61,18 @@ if (_goggles != "") then { private _attenuation = getNumber (_gogglesConfig >> QGVAR(lowerVolume)) min 1; GVAR(volumeAttenuation) = GVAR(volumeAttenuation) * (1 - _attenuation); + + _hasBuiltInEHP = _hasBuiltInEHP || { getNumber (_gogglesConfig >> QGVAR(hasEHP)) > 0 }; +}; + +// Unequip electronic hearing protection when gear has one built in +if (_hasEHPOn && _hasBuiltInEHP) then { + [ACE_player, false] call FUNC(removeEHP); +}; + +// Handle electronic hearing protection - effect can only be applied once +if (_hasEHPOn || _hasBuiltInEHP) then { + GVAR(damageCoefficent) = GVAR(damageCoefficent) * 0.25; }; + +ACE_player setVariable ["ACE_hasBuiltInEHP", _hasBuiltInEHP]; diff --git a/addons/hearing/functions/fnc_updateVolume.sqf b/addons/hearing/functions/fnc_updateVolume.sqf index bb1d57e3c14..32ae063663f 100644 --- a/addons/hearing/functions/fnc_updateVolume.sqf +++ b/addons/hearing/functions/fnc_updateVolume.sqf @@ -42,10 +42,11 @@ if (!_updateVolumeOnly) then { GVAR(time3) = CBA_missionTime; + private _effectsVolume = getAudioOptionVolumes#0; if (GVAR(deafnessDV) > 19.75) then { - playSound (["ACE_Combat_Deafness_Heavy", "ACE_Combat_Deafness_Heavy_NoRing"] select GVAR(disableEarRinging)); + playSoundUI [["ACE_Combat_Deafness_Heavy", "ACE_Combat_Deafness_Heavy_NoRing"] select GVAR(disableEarRinging), _effectsVolume]; } else { - playSound (["ACE_Combat_Deafness_Medium", "ACE_Combat_Deafness_Medium_NoRing"] select GVAR(disableEarRinging)); + playSoundUI [["ACE_Combat_Deafness_Medium", "ACE_Combat_Deafness_Medium_NoRing"] select GVAR(disableEarRinging), _effectsVolume]; }; }; diff --git a/addons/hearing/initKeybinds.inc.sqf b/addons/hearing/initKeybinds.inc.sqf index d1299661986..b8c3d5f5dc5 100644 --- a/addons/hearing/initKeybinds.inc.sqf +++ b/addons/hearing/initKeybinds.inc.sqf @@ -2,13 +2,13 @@ // Conditions: specific if !([ACE_player, objNull, ["isNotSwimming", "isNotInside", "isNotSitting"]] call EFUNC(common,canInteractWith)) exitWith {false}; - if (GVAR(enableCombatDeafness) && {!(ACE_player call FUNC(hasEarPlugsIn))} && {[ACE_player, "ACE_EarPlugs"] call EFUNC(common,hasItem)}) exitWith { + if (GVAR(enableCombatDeafness) && {!(ACE_player getVariable ["ACE_hasEarPlugsIn", false])} && {[ACE_player, "ACE_EarPlugs"] call EFUNC(common,hasItem)}) exitWith { [ACE_player, true] call FUNC(putInEarPlugs); true // return }; - if (GVAR(enableCombatDeafness) && {ACE_player call FUNC(hasEarPlugsIn)}) exitWith { + if (GVAR(enableCombatDeafness) && {ACE_player getVariable ["ACE_hasEarPlugsIn", false]}) exitWith { [ACE_player, true] call FUNC(removeEarPlugs); true // return @@ -16,3 +16,22 @@ false // return }] call CBA_fnc_addKeybind; // UNBOUND + +["ACE3 Equipment", QGVAR(putOrRemoveEHP), LLSTRING(PutOrRemoveEHP), { + // Conditions: specific + if !([ACE_player, objNull, ["isNotSwimming", "isNotInside", "isNotSitting"]] call EFUNC(common,canInteractWith)) exitWith {false}; + + if ([ACE_player] call FUNC(canPutOnEHP)) exitWith { + [ACE_player, true] call FUNC(putOnEHP); + + true // return + }; + + if (GVAR(enableCombatDeafness) && {ACE_player getVariable ["ACE_hasEHP", false]}) exitWith { + [ACE_player, true] call FUNC(removeEHP); + + true // return + }; + + false // return +}] call CBA_fnc_addKeybind; // UNBOUND diff --git a/addons/hearing/script_component.hpp b/addons/hearing/script_component.hpp index a211922087d..f30c20471d6 100644 --- a/addons/hearing/script_component.hpp +++ b/addons/hearing/script_component.hpp @@ -17,4 +17,14 @@ #include "\z\ace\addons\main\script_macros.hpp" #include "\z\ace\addons\hearing\script_macros_hearingProtection.hpp" -#define UPDATE_HEARING_EARPLUGS -1 +#define UPDATE_HEARING -1 + +// Electronic hearing protection FX +#define EHP_REDUCTION 0.125 +#define EHP_MIN_STRENGTH 0.07 +#define EHP_TIMEOUT 0.7 +#define EHP_FADE_IN 0.1 + +// Vehicle explosion hearing damage +#define VEHICLE_EXPLOSION_STRENGTH 200 +#define VEHICLE_EXPLOSION_BIG_STRENGTH 500 diff --git a/addons/hearing/script_macros_hearingProtection.hpp b/addons/hearing/script_macros_hearingProtection.hpp index 377560247ee..1c4a30a3a1a 100644 --- a/addons/hearing/script_macros_hearingProtection.hpp +++ b/addons/hearing/script_macros_hearingProtection.hpp @@ -1,4 +1,4 @@ #define HEARING_PROTECTION_OPEN EGVAR(hearing,protection) = 0; EGVAR(hearing,lowerVolume) = 0 #define HEARING_PROTECTION_VICCREW EGVAR(hearing,protection) = 0.85; EGVAR(hearing,lowerVolume) = 0.6 #define HEARING_PROTECTION_EARMUFF EGVAR(hearing,protection) = 0.75; EGVAR(hearing,lowerVolume) = 0.5 -#define HEARING_PROTECTION_PELTOR EGVAR(hearing,protection) = 0.75; EGVAR(hearing,lowerVolume) = 0 +#define HEARING_PROTECTION_PELTOR EGVAR(hearing,protection) = 0.75; EGVAR(hearing,lowerVolume) = 0; EGVAR(hearing,hasEHP) = 1 diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index 46be3272c85..82f2a7ca563 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -133,6 +133,30 @@ Kulak Tıkacı Tak Füldugó berakva + + Electronic Hearing Protection taken off + Elektronischer Gehörschutz abgesetzt + + + Electronic Hearing Protection put on + Elektronischer Gehörschutz aufgesetzt + + + Electronic Hearing Protection protects the wearer from hearing damage without reducing situational awareness. + Elektronischer Gehörschutz schützt den Träger vor Hörschäden, ohne dass sein Situationsbewusstsein eingeschränkt wird. + + + Electronic Hearing Protection + Elektronischer Gehörschutz + + + Take off Electronic Hearing Protection + Elektronischen Gehörschutz absetzen + + + Put on Electronic Hearing Protection + Elektronischen Gehörschutz aufsetzen + Reduces the hearing ability as the player takes hearing damage Snižuje schopnost sluchu pokud dojde k jeho poškození hlasitou a blízkou střelbou @@ -213,6 +237,10 @@ Kulak Tıkacın Yok Nincsen füldugód + + Put on/take off Electronic Hearing Protection + Elektronischer Gehörschutz aufsetzen/absetzen + Put/take out earplugs Mettre/enlever les bouchons @@ -369,6 +397,9 @@ 聽力保護 听力保护 + + ELECTRONIC + Volume when unconscious. Hlasitost během ztráty vědomí. diff --git a/docs/wiki/class-names.md b/docs/wiki/class-names.md index 0dcf014da16..7d3b425a58b 100644 --- a/docs/wiki/class-names.md +++ b/docs/wiki/class-names.md @@ -161,6 +161,7 @@ ACE_gunbag_Tan | Gunbag | Backpack | Class Name | In-Game Name | Type | ---------- | --------- | --------- ACE_EarPlugs | Earplugs | ACE_ItemCore | +ACE_EHP | Electronic Hearing Protection | ACE_ItemCore | ### HuntIR `Added in 3.1.1` diff --git a/docs/wiki/development/ace3-config-entries.md b/docs/wiki/development/ace3-config-entries.md index 8ff22438a10..8c7f1e43d34 100644 --- a/docs/wiki/development/ace3-config-entries.md +++ b/docs/wiki/development/ace3-config-entries.md @@ -129,6 +129,7 @@ ace_nextmodeclass ace_modedescription ace_hearing_protection ace_hearing_lowerVolume +ace_hearing_hasEHP ``` diff --git a/docs/wiki/framework/hearing-framework.md b/docs/wiki/framework/hearing-framework.md index a6748b77898..4e1131d4a45 100644 --- a/docs/wiki/framework/hearing-framework.md +++ b/docs/wiki/framework/hearing-framework.md @@ -17,8 +17,9 @@ version: ```cpp class CfgWeapons { class MyHelmet { - ace_hearing_protection = 0.80; // Protection against deafening (0 to 1, higher means more protection) - ace_hearing_lowerVolume = 0.60; // Muffling of the sound (0 to 1, higher means more muffling) + ace_hearing_protection = 0.80; // Protection against deafening (0 to 1, higher means more protection) + ace_hearing_lowerVolume = 0.60; // Muffling of the sound (0 to 1, higher means more muffling) + ace_hearing_hasEHP = 1; // Is electronic hearing protection (0 to disable, 1 to enable) }; }; ``` From fdd33fd27dbab1a5540c721a2f2ad19802037f45 Mon Sep 17 00:00:00 2001 From: Hexo <130893962+Alfred-Neuman@users.noreply.github.com> Date: Wed, 18 Dec 2024 18:25:47 +0100 Subject: [PATCH 06/35] French Translate (#10560) --- addons/cargo/stringtable.xml | 1 + addons/fieldmanual/stringtable.xml | 1 + addons/goggles/stringtable.xml | 1 + addons/hitreactions/stringtable.xml | 1 + addons/medical_damage/stringtable.xml | 4 ++++ addons/medical_treatment/stringtable.xml | 1 + 6 files changed, 9 insertions(+) diff --git a/addons/cargo/stringtable.xml b/addons/cargo/stringtable.xml index d40122d96f3..e93b40d046e 100644 --- a/addons/cargo/stringtable.xml +++ b/addons/cargo/stringtable.xml @@ -276,6 +276,7 @@ Вкл. проверку размера груза 貨物の大きさを確認のインタラクションを表示 화물 크기 확인 상호작용 표시 + Afficher l'interaction de confirmation de la taille de la cargaison Custom name has been cleared. diff --git a/addons/fieldmanual/stringtable.xml b/addons/fieldmanual/stringtable.xml index c617d67de6a..9c43f61cef1 100644 --- a/addons/fieldmanual/stringtable.xml +++ b/addons/fieldmanual/stringtable.xml @@ -110,6 +110,7 @@ OS %3Sacos de Cadáver%4 são utilizados para transportar cadáveres. Eles podem ser arrastados e embarcados em veículos.<br/><br/>%3Uso:%4<br/>%2Aproxime-se de um cadáver.<br/>%2Utilize [%3%13%4] ou [%3%15%4] e selecione %3Colocar cadáver dentro do saco%4. %3시체 운반용 부대%4는 시체를 운반하는 데 사용되며, 차량으로 끌고 가서 적재할 수 있습니다.<br/><br/>%3사용 방법:%4<br/>%2시체에 접근하십시오.<br/>%2[%3%13%4] 또는 [%3%15%4]를 사용하여 %3시체 운반용 부대에 담기%4를 선택하십시오. %3遺体袋%4は、遺体の輸送に使用されます。引きずって車両に積み込むことができます。<br/><br/>%3使用方法:%4<br/>%2遺体に近寄る。<br/>%2[%3%13%4] または [%3%15%4] を使って%3遺体袋に入れる%4を選択して使用します。 + %3Les sacs mortuaires%4 sont utilisés pour transporter les cadavres. Ils peuvent être traînés et chargés dans des véhicules.<br/><br/>%3Utilisation:%4<br/>%2Approchez-vous d'un cadavre.<br/>Utilisez [%3%13%4] ou [%3%15%4] et sélectionnez %3Placer le corps dans le sac mortuaire%4. Bring Out Your Dead diff --git a/addons/goggles/stringtable.xml b/addons/goggles/stringtable.xml index c44454fd9d6..f364e2ec448 100644 --- a/addons/goggles/stringtable.xml +++ b/addons/goggles/stringtable.xml @@ -21,6 +21,7 @@ Show Goggles Overlay ゴーグルのオーバーレイを表示する 고글 오버레이 표시 + Afficher la superposition des lunettes Show Wipe Goggles self interaction diff --git a/addons/hitreactions/stringtable.xml b/addons/hitreactions/stringtable.xml index 1b76933ca7f..e0b11d3d818 100644 --- a/addons/hitreactions/stringtable.xml +++ b/addons/hitreactions/stringtable.xml @@ -6,6 +6,7 @@ Если при передвижении пешком юнит получит больше урона, чем указано в этой настройке,то он упадет.\nЕсли установлено значение -1, механика отключается. 유닛이 도보로 이동하는 동안 이 설정 값보다 많은 대미지를 입으면 넘어집니다.\n-1로 설정하면 이 기능은 꺼집니다. 徒歩で移動中のユニットが設定値を超えるダメージを受けると転倒します。\n-1に設定することでこの機能を無効化できます。 + Si une unité subit plus de dégâts que la valeur de ce paramètre alors qu'elle se déplace à pied, elle tombera à la renverse.\nSi le paramètre est réglé sur -1 le mécanisme est désactivé. Min Damage to trigger falling diff --git a/addons/medical_damage/stringtable.xml b/addons/medical_damage/stringtable.xml index 85b91b4b91b..f3408868d7e 100644 --- a/addons/medical_damage/stringtable.xml +++ b/addons/medical_damage/stringtable.xml @@ -848,24 +848,28 @@ Устанавливает величину урона, который могут получить конечности, прежде чем урон станет критическим, что приведет к смерти. Для любого эффекта должно быть больше 0.\nТребуется, чтобы настройка "Использовать урон конечностям" была включена, а "Причина смертельного урона" была установлена на "Совокупность травмы" или "Оба".\nУмножается с общим порогом повреждения. Никак не взаимодействует с переломами или хроманием. 致命的状態となり死亡する前に手足が受けられるダメージの量を設定します。\n効果の発動には0より大きい数字に設定する必要があります。\n"手足のダメージを使用" 設定を有効化した上で "致命ダメージの原因" を "外傷の合計" または "どちらか" に設定する必要があります。\nユニット全体のダメージしきい値に対して乗算的に上乗せされます。 骨折や足の引きずり(跛行)とは無関係です。 치명적인 상태가 되어 죽음에 이르기 전까지 사지에 받는 피해량을 설정합니다. 효과가 생기려면 값이 0보다 커야 합니다.\n"사지 피해 사용" 설정을 활성화하고 "치명상의 원인"을 "외상 중첩" 또는 "둘 다"로 설정해야 합니다.\n전체 유닛 피해량 임계값과 곱해져서 누적됩니다. 골절/절뚝거림과는 전혀 상관 없습니다. + Définit la quantité de dégâts que les membres peuvent recevoir avant de devenir critiques et d'entraîner la mort. Doit être supérieur à 0 pour avoir un effet.\nIl faut que le paramètre « Utiliser les dommages aux membres » soit activé et que « Cause de blessure mortelle » soit réglé sur « Somme des traumatismes » ou « Les deux ».\nS'empile de façon multiplicative avec le seuil de dégâts de l'unité globale. N'interagit pas du tout avec les fractures et le boitement. Limb Damage Threshold Порог повреждения конечностей 手足のダメージしきい値 사지 피해량 임계값 + Seuil de dommages aux membres Controls whether limb damage is taken into account for sum of trauma calculations. Определяет, учитывается ли повреждение конечностей при расчете совокупности травм. "外傷の合計" の計算に手足のダメージを考慮するかどうかを制御します。 외상 중첩을 계산할 때 사지 피해량을 고려할지 여부를 제어합니다. + Contrôle si les dommages aux membres sont pris en compte dans les calculs de la somme des traumatismes. Use Limb Damage Использовать урон конечностям 手足のダメージを使用 사지 피해 사용 + Utiliser les dommages aux membres diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml index cd6eb039837..af49f176816 100644 --- a/addons/medical_treatment/stringtable.xml +++ b/addons/medical_treatment/stringtable.xml @@ -3596,6 +3596,7 @@ Заставляет действие контрольного импульса выдавать числовое значение, основанное на настройке 脈拍の確認アクションから得られる情報が数値化されるようになる医療レベルを設定します 설정에 따라 맥박 확인 행동을 통해 숫자로 표시된 값을 제공합니다. + L'action de vérification du pouls fournit une valeur numérique, en fonction de vos paramètres. Numerical Pulse From 4916ec540e57c2a05367070e07faf70dbb7c3326 Mon Sep 17 00:00:00 2001 From: Grim <69561145+LinkIsGrim@users.noreply.github.com> Date: Wed, 18 Dec 2024 14:27:44 -0300 Subject: [PATCH 07/35] Common - Use MagazineReloading event for reload mutex (#8432) Co-authored-by: Salluci <69561145+Salluci@users.noreply.github.com> Co-authored-by: PabstMirror Co-authored-by: LinkIsGrim <> Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> --- addons/common/XEH_postInit.sqf | 117 ++++++++++++++++++++------------- 1 file changed, 71 insertions(+), 46 deletions(-) diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index f5bea2958f8..ced3bf305b1 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -473,59 +473,84 @@ addMissionEventHandler ["PlayerViewChanged", { ////////////////////////////////////////////////// GVAR(isReloading) = false; -GVAR(reloadMutex_lastMagazines) = []; -// When reloading, the new magazine is removed from inventory, an animation plays and then the old magazine is added -// If the animation is interrupted, the new magazine will be lost -["loadout", { - params ["_unit", "_newLoadout"]; - private _mags = magazines _unit; - // if our magazine count dropped by 1, we might be reloading - if ((count GVAR(reloadMutex_lastMagazines)) - (count _mags) == 1) then { - private _weapon = currentWeapon _unit; - private _muzzle = currentMuzzle _unit; - if (_weapon == "") exitWith {}; - private _wpnMzlConfig = configFile >> "CfgWeapons" >> _weapon; - if (_muzzle != _weapon) then { _wpnMzlConfig = _wpnMzlConfig >> _muzzle; }; - - private _compatMags = [_wpnMzlConfig] call CBA_fnc_compatibleMagazines; - private _lastCompatMagCount = {_x in _compatMags} count GVAR(reloadMutex_lastMagazines); - private _curCompatMagCount = {_x in _compatMags} count _mags; - TRACE_3("",_wpnMzlConfig,_lastCompatMagCount,_curCompatMagCount); - if (_lastCompatMagCount - _curCompatMagCount != 1) exitWith {}; // check if magazines for our specific muzzle dropped by 1 - - private _gesture = getText (_wpnMzlConfig >> "reloadAction"); - if (_gesture == "") exitWith {}; //Ignore weapons with no reload gesture (binoculars) - private _isLauncher = _weapon isKindOf ["Launcher", configFile >> "CfgWeapons"]; - private _duration = 0; - if (_isLauncher) then { - _duration = getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> _gesture >> "speed"); - }; - if (_duration == 0) then { - _duration = getNumber (configFile >> "CfgGesturesMale" >> "States" >> _gesture >> "speed"); - }; - if (_duration != 0) then { - _duration = if (_duration < 0) then { abs _duration } else { 1 / _duration }; - } else { - _duration = 6; - }; +["unit", { + params ["_newPlayer"]; + + // Catch the current unit reloading + private _weaponState = weaponState _newPlayer; + GVAR(isReloading) = (_weaponState select 6) != 0; + + if (!GVAR(isReloading)) exitWith {}; - TRACE_2("Reloading, blocking gestures",_weapon,_duration); - GVAR(reloadingETA) = CBA_missionTime + _duration; + GVAR(magazineReloadPhase) = 0; - if (!GVAR(isReloading)) then { - GVAR(isReloading) = true; + // Wait until reload animation has finished (if weapon is no longer available, it returns -1) + [{ + private _magazineReloadingPhase = ((_this select 0) weaponState (_this select 1)) select 6; + + // Need to check the reloading phase, as if you interrupt reloading with a gesture, the phase will remain stuck at a value > 0 + if (GVAR(magazineReloadPhase) == _magazineReloadingPhase) exitWith { + TRACE_2("Interrupted magazine reloading",_this select 0,_this select 1); - [{ - CBA_missionTime > GVAR(reloadingETA) - },{ - GVAR(isReloading) = false; - }] call CBA_fnc_waitUntilAndExecute; + true }; - }; - GVAR(reloadMutex_lastMagazines) = _mags; + + GVAR(magazineReloadPhase) = _magazineReloadingPhase; + + _magazineReloadingPhase <= 0 + }, { + TRACE_2("End magazine reloading",_this select 0,_this select 1); + + // Player might switch units before reload finishes + if ((_this select 0) isNotEqualTo ACE_player) exitWith {}; + + GVAR(isReloading) = false; + }, [_newPlayer, _weaponState select 1]] call CBA_fnc_waitUntilAndExecute; }, true] call CBA_fnc_addPlayerEventHandler; +[QGVAR(magazineReloading), "MagazineReloading", { + params ["_unit", "", "_muzzle"]; + + TRACE_2("Init magazine reloading",_unit,_muzzle); + + // Wait until reload animation has started + [{ + ((_this select 0) weaponState (_this select 1)) select 6 != 0 + }, { + TRACE_2("Start magazine reloading",_this select 0,_this select 1); + + // Player might switch units before reload starts + if ((_this select 0) isNotEqualTo ACE_player) exitWith {}; + + GVAR(isReloading) = true; + GVAR(magazineReloadPhase) = 0; + + // Wait until reload animation has finished (if weapon is no longer available, it returns -1) + [{ + private _magazineReloadingPhase = ((_this select 0) weaponState (_this select 1)) select 6; + + // Need to check the reloading phase, as if you interrupt reloading with a gesture, the phase will remain stuck at a value > 0 + if (GVAR(magazineReloadPhase) == _magazineReloadingPhase) exitWith { + TRACE_2("Interrupted magazine reloading",_this select 0,_this select 1); + + true + }; + + GVAR(magazineReloadPhase) = _magazineReloadingPhase; + + _magazineReloadingPhase <= 0 + }, { + TRACE_2("End magazine reloading",_this select 0,_this select 1); + + // Player might switch units before reload finishes + if ((_this select 0) isNotEqualTo ACE_player) exitWith {}; + + GVAR(isReloading) = false; + }, _this] call CBA_fnc_waitUntilAndExecute; + }, [_unit, _muzzle], 5] call CBA_fnc_waitUntilAndExecute; +}] call CBA_fnc_addBISPlayerEventHandler; + ////////////////////////////////////////////////// // Start the sway loop ////////////////////////////////////////////////// From 62dd978c8e9e77cb50523ae144a20e255040f8f9 Mon Sep 17 00:00:00 2001 From: Grim <69561145+LinkIsGrim@users.noreply.github.com> Date: Wed, 18 Dec 2024 17:48:10 -0300 Subject: [PATCH 08/35] Medical - Fix fullHeal not resetting occluded meds (#10569) --- addons/medical_treatment/functions/fnc_fullHealLocal.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/medical_treatment/functions/fnc_fullHealLocal.sqf b/addons/medical_treatment/functions/fnc_fullHealLocal.sqf index 42c5866a9af..3d14380c776 100644 --- a/addons/medical_treatment/functions/fnc_fullHealLocal.sqf +++ b/addons/medical_treatment/functions/fnc_fullHealLocal.sqf @@ -50,7 +50,7 @@ _patient setVariable [VAR_BLOOD_VOL, DEFAULT_BLOOD_VOLUME, true]; }; } forEach GET_TOURNIQUETS(_patient); _patient setVariable [VAR_TOURNIQUET, DEFAULT_TOURNIQUET_VALUES, true]; -_patient setVariable [QGVAR(occludedMedications), nil, true]; +_patient setVariable [QEGVAR(medical,occludedMedications), nil, true]; // Wounds and Injuries _patient setVariable [VAR_OPEN_WOUNDS, createHashMap, true]; From 5f34ae8e0a2f49753c373a3b3eea2a4fd2ed7b96 Mon Sep 17 00:00:00 2001 From: Grim <69561145+LinkIsGrim@users.noreply.github.com> Date: Thu, 19 Dec 2024 17:43:49 -0300 Subject: [PATCH 09/35] Common - Add getters for object being carried/dragged (#10570) --- addons/common/XEH_PREP.hpp | 2 ++ .../functions/fnc_isBeingCarried.sqf | 8 ++++---- .../functions/fnc_isBeingDragged.sqf | 8 ++++---- addons/medical_status/XEH_PREP.hpp | 2 -- addons/medical_treatment/functions/fnc_loadUnit.sqf | 4 ++-- 5 files changed, 12 insertions(+), 12 deletions(-) rename addons/{medical_status => common}/functions/fnc_isBeingCarried.sqf (68%) rename addons/{medical_status => common}/functions/fnc_isBeingDragged.sqf (68%) diff --git a/addons/common/XEH_PREP.hpp b/addons/common/XEH_PREP.hpp index db18cd12f16..e8cfb683518 100644 --- a/addons/common/XEH_PREP.hpp +++ b/addons/common/XEH_PREP.hpp @@ -125,6 +125,8 @@ PREP(hideUnit); PREP(interpolateFromArray); PREP(inTransitionAnim); PREP(isAwake); +PREP(isBeingCarried); +PREP(isBeingDragged); PREP(isEngineer); PREP(isEOD); PREP(isInBuilding); diff --git a/addons/medical_status/functions/fnc_isBeingCarried.sqf b/addons/common/functions/fnc_isBeingCarried.sqf similarity index 68% rename from addons/medical_status/functions/fnc_isBeingCarried.sqf rename to addons/common/functions/fnc_isBeingCarried.sqf index 2c4d6552f4d..be37d3719db 100644 --- a/addons/medical_status/functions/fnc_isBeingCarried.sqf +++ b/addons/common/functions/fnc_isBeingCarried.sqf @@ -1,18 +1,18 @@ #include "..\script_component.hpp" /* * Author: PabstMirror - * Returns if a target is being carried. (from ace_dragging) + * Returns if an object is being carried. (from ace_dragging) * * Arguments: - * 0: Target Unit + * 0: Object * * Return Value: * Is being carried * * Example: - * [bob] call ace_medical_status_fnc_isBeingCarried + * bob call ace_common_fnc_isBeingCarried * - * Public: No + * Public: Yes */ params ["_target"]; diff --git a/addons/medical_status/functions/fnc_isBeingDragged.sqf b/addons/common/functions/fnc_isBeingDragged.sqf similarity index 68% rename from addons/medical_status/functions/fnc_isBeingDragged.sqf rename to addons/common/functions/fnc_isBeingDragged.sqf index e5b3c5da881..e174ead200f 100644 --- a/addons/medical_status/functions/fnc_isBeingDragged.sqf +++ b/addons/common/functions/fnc_isBeingDragged.sqf @@ -1,18 +1,18 @@ #include "..\script_component.hpp" /* * Author: PabstMirror - * Returns if a target is being dragged. (from ace_dragging) + * Returns if an object is being dragged. (from ace_dragging) * * Arguments: - * 0: Target Unit + * 0: Object * * Return Value: * Is being dragged * * Example: - * [bob] call ace_medical_status_fnc_isBeingDragged + * bob call ace_common_fnc_isBeingDragged * - * Public: No + * Public: Yes */ params ["_target"]; diff --git a/addons/medical_status/XEH_PREP.hpp b/addons/medical_status/XEH_PREP.hpp index 967332da2e2..7bfd270f8de 100644 --- a/addons/medical_status/XEH_PREP.hpp +++ b/addons/medical_status/XEH_PREP.hpp @@ -11,8 +11,6 @@ PREP(handleKilled); PREP(handleKilledMission); PREP(hasStableVitals); PREP(initUnit); -PREP(isBeingCarried); -PREP(isBeingDragged); PREP(isInStableCondition); PREP(setCardiacArrestState); PREP(setDead); diff --git a/addons/medical_treatment/functions/fnc_loadUnit.sqf b/addons/medical_treatment/functions/fnc_loadUnit.sqf index edb9cbe0621..2632c6b9fad 100644 --- a/addons/medical_treatment/functions/fnc_loadUnit.sqf +++ b/addons/medical_treatment/functions/fnc_loadUnit.sqf @@ -24,11 +24,11 @@ if (_patient call EFUNC(common,isAwake)) exitWith { [[LSTRING(CanNotLoad), _patient call EFUNC(common,getName)]] call EFUNC(common,displayTextStructured); }; -if (_patient call EFUNC(medical_status,isBeingCarried)) then { +if (_patient call EFUNC(common,isBeingCarried)) then { [_medic, _patient] call EFUNC(dragging,dropObject_carry); }; -if (_patient call EFUNC(medical_status,isBeingDragged)) then { +if (_patient call EFUNC(common,isBeingDragged)) then { [_medic, _patient] call EFUNC(dragging,dropObject); }; From bbd40e01a5dd54e8e7db1303e22c85c0c6b4367f Mon Sep 17 00:00:00 2001 From: Grim <69561145+LinkIsGrim@users.noreply.github.com> Date: Thu, 19 Dec 2024 17:43:58 -0300 Subject: [PATCH 10/35] Medical Damage - Fix silent dependency on status (#10571) --- addons/medical_damage/functions/fnc_woundsHandlerBase.sqf | 2 -- addons/medical_status/XEH_postInit.sqf | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/medical_damage/functions/fnc_woundsHandlerBase.sqf b/addons/medical_damage/functions/fnc_woundsHandlerBase.sqf index 92effda9bd5..270e77b2513 100644 --- a/addons/medical_damage/functions/fnc_woundsHandlerBase.sqf +++ b/addons/medical_damage/functions/fnc_woundsHandlerBase.sqf @@ -199,8 +199,6 @@ if (_createdWounds) then { _unit setVariable [VAR_OPEN_WOUNDS, _openWounds, true]; _unit setVariable [QEGVAR(medical,bodyPartDamage), _bodyPartDamage, true]; - [_unit] call EFUNC(medical_status,updateWoundBloodLoss); - _bodyPartVisParams call EFUNC(medical_engine,updateBodyPartVisuals); [QEGVAR(medical,injured), [_unit, _painLevel]] call CBA_fnc_localEvent; diff --git a/addons/medical_status/XEH_postInit.sqf b/addons/medical_status/XEH_postInit.sqf index 65e308fa301..1865fe1d7fc 100644 --- a/addons/medical_status/XEH_postInit.sqf +++ b/addons/medical_status/XEH_postInit.sqf @@ -3,6 +3,8 @@ // Handle pain changes on injury [QEGVAR(medical,injured), LINKFUNC(adjustPainLevel)] call CBA_fnc_addEventHandler; +// Update wound bleeding on injury +[QEGVAR(medical,injured), LINKFUNC(updateWoundBloodLoss)] call CBA_fnc_addEventHandler; // Add inventory and open backpack actions to units [QGVAR(addInventoryActions), LINKFUNC(addInventoryActions)] call CBA_fnc_addEventHandler; From 1168acbe4a34bd499a131bbb8eda48349e4523fa Mon Sep 17 00:00:00 2001 From: Bailey Danyluk Date: Thu, 19 Dec 2024 13:56:50 -0700 Subject: [PATCH 11/35] missile_AIM9 - Add, with IR seeking (#10022) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: TyroneMF Co-authored-by: Filip Maciejewski Co-authored-by: Kyle Mckay <5459452+kymckay@users.noreply.github.com> Co-authored-by: jonpas Co-authored-by: Elgin675 Co-authored-by: Blutze <37950828+Blutze@users.noreply.github.com> Co-authored-by: Jo David Co-authored-by: BaerMitUmlaut Co-authored-by: commy2 Co-authored-by: PabstMirror Co-authored-by: Dabako Co-authored-by: Pascal Dunaj <32539404+t-zilla@users.noreply.github.com> Co-authored-by: Brett Co-authored-by: Dystopian Co-authored-by: R3voA3 Co-authored-by: Steve Zhao Co-authored-by: Kyle J. McKeown Co-authored-by: Salluci <69561145+Salluci@users.noreply.github.com> Co-authored-by: Dániel Boros <43353942+Malbryn@users.noreply.github.com> Co-authored-by: Laid3acK Co-authored-by: frankplow Co-authored-by: JoramD Co-authored-by: Dabako Co-authored-by: Abogado Co-authored-by: Dedmen Miller Co-authored-by: Lupus the Canine Co-authored-by: Drofseh Co-authored-by: LorenLuke Co-authored-by: SzwedzikPL Co-authored-by: BrettMayson Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> --- addons/missile_aim9/$PBOPREFIX$ | 1 + addons/missile_aim9/CfgAmmo.hpp | 91 +++++++++++ addons/missile_aim9/CfgMagazines.hpp | 153 ++++++++++++++++++ addons/missile_aim9/CfgWeapons.hpp | 72 +++++++++ addons/missile_aim9/README.md | 12 ++ addons/missile_aim9/config.cpp | 20 +++ addons/missile_aim9/script_component.hpp | 18 +++ addons/missile_aim9/stringtable.xml | 50 ++++++ addons/missileguidance/ACE_GuidanceConfig.hpp | 8 + .../missileguidance/CfgMissileTypesNato.hpp | 4 +- addons/missileguidance/XEH_PREP.hpp | 2 + .../functions/fnc_IR_onFired.sqf | 29 ++++ .../functions/fnc_seekerType_IR.sqf | 143 ++++++++++++++++ 13 files changed, 601 insertions(+), 2 deletions(-) create mode 100644 addons/missile_aim9/$PBOPREFIX$ create mode 100644 addons/missile_aim9/CfgAmmo.hpp create mode 100644 addons/missile_aim9/CfgMagazines.hpp create mode 100644 addons/missile_aim9/CfgWeapons.hpp create mode 100644 addons/missile_aim9/README.md create mode 100644 addons/missile_aim9/config.cpp create mode 100644 addons/missile_aim9/script_component.hpp create mode 100644 addons/missile_aim9/stringtable.xml create mode 100644 addons/missileguidance/functions/fnc_IR_onFired.sqf create mode 100644 addons/missileguidance/functions/fnc_seekerType_IR.sqf diff --git a/addons/missile_aim9/$PBOPREFIX$ b/addons/missile_aim9/$PBOPREFIX$ new file mode 100644 index 00000000000..c47abf3aae6 --- /dev/null +++ b/addons/missile_aim9/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\missile_aim9 \ No newline at end of file diff --git a/addons/missile_aim9/CfgAmmo.hpp b/addons/missile_aim9/CfgAmmo.hpp new file mode 100644 index 00000000000..dae888c3561 --- /dev/null +++ b/addons/missile_aim9/CfgAmmo.hpp @@ -0,0 +1,91 @@ +class EGVAR(missileguidance,type_Sidewinder); +class EGVAR(missileguidance,type_ASRAAM); +class EGVAR(missileguidance,type_R73); +class EGVAR(missileguidance,type_R74); +class CfgAmmo { + class Missile_AA_04_F; + class GVAR(m): Missile_AA_04_F { + missileLockCone = 3; // caged lock + missileKeepLockedCone = 45; + missileLockMaxDistance = 5000; + missileLockMinDistance = 250; + + author = "Dani (TCVM)"; + maneuvrability = 0; + + class ace_missileguidance: EGVAR(missileguidance,type_Sidewinder) { + enabled = 1; + }; + }; + + class ammo_Missile_BIM9X; + class GVAR(x): ammo_Missile_BIM9X { + missileLockCone = 3; // caged lock + missileKeepLockedCone = 120; + missileLockMaxDistance = 5000; + missileLockMinDistance = 250; + + author = "Dani (TCVM)"; + maneuvrability = 0; + + class ace_missileguidance: EGVAR(missileguidance,type_Sidewinder) { + enabled = 1; + pitchRate = 90; + yawRate = 90; + flareDistanceFilter = 50; + flareAngleFilter = 0.8; // can filter out flares that are >= flareAngleFilter to known target velocity + defaultNavigationType = "ZeroEffortMiss"; + navigationTypes[] = { "ZeroEffortMiss" }; + seekerAngle = 120; + seekerAccuracy = 0.95; + }; + }; + + // AIM-132 + class M_Air_AA; + class GVAR(aim132): M_Air_AA { + missileLockCone = 3; // caged lock + missileKeepLockedCone = 120; + missileLockMaxDistance = 8000; + missileLockMinDistance = 250; + + author = "Dani (TCVM)"; + maneuvrability = 0; + + class ace_missileguidance: EGVAR(missileguidance,type_ASRAAM) { + enabled = 1; + }; + }; + + // R-73 + class ammo_Missile_AA_R73; + class GVAR(r73): ammo_Missile_AA_R73 { + missileLockCone = 3; // caged lock + missileKeepLockedCone = 40; + missileLockMaxDistance = 5000; + missileLockMinDistance = 250; + + author = "Dani (TCVM)"; + maneuvrability = 0; + + class ace_missileguidance: EGVAR(missileguidance,type_Sidewinder) { + enabled = 1; + }; + }; + + class Missile_AA_03_F; + class GVAR(r74): Missile_AA_03_F { + missileLockCone = 3; // caged lock + missileKeepLockedCone = 75; + missileLockMaxDistance = 8000; + missileLockMinDistance = 250; + + author = "Dani (TCVM)"; + maneuvrability = 0; + + class ace_missileguidance: EGVAR(missileguidance,type_R74) { + enabled = 1; + }; + }; +}; + diff --git a/addons/missile_aim9/CfgMagazines.hpp b/addons/missile_aim9/CfgMagazines.hpp new file mode 100644 index 00000000000..5fc12fcf106 --- /dev/null +++ b/addons/missile_aim9/CfgMagazines.hpp @@ -0,0 +1,153 @@ +class CfgMagazines { + class 2Rnd_Missile_AA_04_F; + class PylonRack_1Rnd_Missile_AA_04_F; + class PylonMissile_1Rnd_Missile_AA_04_F; + + // AIM-9 + class GVAR(2Rnd_Missile_9m): 2Rnd_Missile_AA_04_F { + author = "Dani (TCVM)"; + displayName = CSTRING(m_2x); + ammo = QGVAR(m); + }; + + class GVAR(PylonRack_1Rnd_Missile_9m): PylonRack_1Rnd_Missile_AA_04_F { + author = "Dani (TCVM)"; + displayName = CSTRING(m_1x); + ammo = QGVAR(m); + pylonWeapon = QGVAR(m); + }; + + class GVAR(PylonMissile_1Rnd_Missile_9m): PylonMissile_1Rnd_Missile_AA_04_F { + author = "Dani (TCVM)"; + displayName = CSTRING(m_1x); + ammo = QGVAR(m); + pylonWeapon = QGVAR(m); + }; + + class magazine_Missile_BIM9X_x1; + class PylonMissile_Missile_BIM9X_x1; + class PylonRack_Missile_BIM9X_x1; + class PylonRack_Missile_BIM9X_x2; + + class GVAR(magazine_Missile_9x): magazine_Missile_BIM9X_x1 { + author = "Dani (TCVM)"; + displayName = CSTRING(x_1x); + ammo = QGVAR(x); + }; + + class GVAR(PylonMissile_Missile_9x): PylonMissile_Missile_BIM9X_x1 { + author = "Dani (TCVM)"; + displayName = CSTRING(x_1x); + ammo = QGVAR(x); + pylonWeapon = QGVAR(x); + }; + + class GVAR(PylonRack_Missile_9x): PylonRack_Missile_BIM9X_x1 { + author = "Dani (TCVM)"; + displayName = CSTRING(x_1x); + ammo = QGVAR(x); + pylonWeapon = QGVAR(x); + }; + + class GVAR(PylonRack_Missile_9x_2): PylonRack_Missile_BIM9X_x2 { + author = "Dani (TCVM)"; + displayName = CSTRING(x_2x); + ammo = QGVAR(x); + pylonWeapon = QGVAR(x); + }; + + // AIM-132 + class 2Rnd_AAA_missiles; + class 2Rnd_AAA_missiles_MI02; + class 2Rnd_AAA_missiles_MI06; + class 4Rnd_AAA_missiles; + class 4Rnd_AAA_missiles_MI02; + class PylonRack_1Rnd_AAA_missiles; + class PylonMissile_1Rnd_AAA_missiles; + + class GVAR(aim132_2Rnd): 2Rnd_AAA_missiles { + author = "Dani (TCVM)"; + displayName = CSTRING(aim132_2x); + ammo = QGVAR(aim132); + }; + + class GVAR(aim132_2Rnd_MI02): 2Rnd_AAA_missiles_MI02 { + author = "Dani (TCVM)"; + displayName = CSTRING(aim132_2x); + ammo = QGVAR(aim132); + }; + + class GVAR(aim132_2Rnd_MI06): 2Rnd_AAA_missiles_MI06 { + author = "Dani (TCVM)"; + displayName = CSTRING(aim132_2x); + ammo = QGVAR(aim132); + }; + + class GVAR(aim132_4Rnd): 4Rnd_AAA_missiles { + author = "Dani (TCVM)"; + displayName = CSTRING(aim132_4x); + ammo = QGVAR(aim132); + }; + + class GVAR(aim132_4Rnd_MI02): 4Rnd_AAA_missiles_MI02 { + author = "Dani (TCVM)"; + displayName = CSTRING(aim132_4x); + ammo = QGVAR(aim132); + }; + + class GVAR(PylonRack_1Rnd_aim132): PylonRack_1Rnd_AAA_missiles { + author = "Dani (TCVM)"; + displayName = CSTRING(aim132_1x); + ammo = QGVAR(aim132); + pylonWeapon = QGVAR(aim132); + }; + + class GVAR(PylonMissile_1Rnd_aim132): PylonMissile_1Rnd_AAA_missiles { + author = "Dani (TCVM)"; + displayName = CSTRING(aim132_1x); + ammo = QGVAR(aim132); + pylonWeapon = QGVAR(aim132); + }; + + // R-73 + class PylonMissile_Missile_AA_R73_x1; + class magazine_Missile_AA_R73_x1; + class 2Rnd_Missile_AA_03_F; + class PylonRack_1Rnd_Missile_AA_03_F; + class PylonMissile_1Rnd_Missile_AA_03_F; + + class GVAR(r73): magazine_Missile_AA_R73_x1 { + author = "Dani (TCVM)"; + displayName = CSTRING(r73_1x); + ammo = QGVAR(r73); + }; + + class GVAR(PylonMissile_Missile_R73_x1): PylonMissile_Missile_AA_R73_x1 { + author = "Dani (TCVM)"; + displayName = CSTRING(r73_1x); + ammo = QGVAR(r73); + pylonWeapon = QGVAR(r73); + }; + + class GVAR(2Rnd_Missile_R74): 2Rnd_Missile_AA_03_F { + author = "Dani (TCVM)"; + displayName = CSTRING(r74_2x); + ammo = QGVAR(r74); + }; + + // R-74 -- improved R-73, same missile in the way that an AIM-9X is the same as an AIM-9M + class GVAR(PylonRack_1Rnd_Missile_R74): PylonRack_1Rnd_Missile_AA_03_F { + author = "Dani (TCVM)"; + displayName = CSTRING(r74_1x); + ammo = QGVAR(r74); + pylonWeapon = QGVAR(r74); + }; + + class GVAR(PylonMissile_1Rnd_Missile_R74): PylonMissile_1Rnd_Missile_AA_03_F { + author = "Dani (TCVM)"; + displayName = CSTRING(r74_1x); + ammo = QGVAR(r74); + pylonWeapon = QGVAR(r74); + }; +}; + diff --git a/addons/missile_aim9/CfgWeapons.hpp b/addons/missile_aim9/CfgWeapons.hpp new file mode 100644 index 00000000000..cf69f9179c6 --- /dev/null +++ b/addons/missile_aim9/CfgWeapons.hpp @@ -0,0 +1,72 @@ +class CfgWeapons { + // AIM-9 + class Missile_AA_04_Plane_CAS_01_F; + class GVAR(m): Missile_AA_04_Plane_CAS_01_F { + lockAcquire = 1; // auto lock + + author = "Dani (TCVM)"; + displayName = CSTRING(m); + weaponLockDelay = 0.5; + magazines[] = {QGVAR(2Rnd_Missile_9m), QGVAR(PylonRack_1Rnd_Missile_9m), QGVAR(PylonMissile_1Rnd_Missile_9m)}; + }; + + class weapon_BIM9xLauncher; + class GVAR(x): weapon_BIM9xLauncher { + lockAcquire = 1; // auto lock + + author = "Dani (TCVM)"; + displayName = CSTRING(x); + weaponLockDelay = 0.5; + magazines[] = { QGVAR(magazine_Missile_9x), QGVAR(PylonMissile_Missile_9x), QGVAR(PylonRack_Missile_9x), QGVAR(PylonRack_Missile_9x_2) }; + }; + + // ASRAAM + class missiles_ASRAAM; + class GVAR(aim132): missiles_ASRAAM { + lockAcquire = 1; // auto lock + + author = "Dani (TCVM)"; + displayName = CSTRING(aim132); + weaponLockDelay = 0.5; + magazines[] = { + QGVAR(aim132_2Rnd), + QGVAR(aim132_2Rnd_MI02), + QGVAR(aim132_2Rnd_MI06), + QGVAR(aim132_4Rnd), + QGVAR(aim132_4Rnd_MI02), + QGVAR(PylonRack_1Rnd_aim132), + QGVAR(PylonMissile_1Rnd_aim132) + }; + }; + + // R-73 + class weapon_R73Launcher; + class GVAR(r73): weapon_R73Launcher { + lockAcquire = 1; // auto lock + + author = "Dani (TCVM)"; + displayName = CSTRING(r73); + weaponLockDelay = 0.5; + + magazines[] = { + QGVAR(r73), + QGVAR(PylonMissile_Missile_R73_x1) + }; + }; + + class Missile_AA_03_Plane_CAS_02_F; + class GVAR(r74): Missile_AA_03_Plane_CAS_02_F { + lockAcquire = 1; // auto lock + + author = "Dani (TCVM)"; + displayName = CSTRING(r74); + weaponLockDelay = 0.5; + + magazines[] = { + QGVAR(2Rnd_Missile_R74), + QGVAR(PylonRack_1Rnd_Missile_R74), + QGVAR(PylonMissile_1Rnd_Missile_R74) + }; + }; +}; + diff --git a/addons/missile_aim9/README.md b/addons/missile_aim9/README.md new file mode 100644 index 00000000000..245c08a727a --- /dev/null +++ b/addons/missile_aim9/README.md @@ -0,0 +1,12 @@ +ace_missile_aim9 +=================== + +Adds AIM-9 and R-73 AHR missiles + + +## Maintainers + +The people responsible for merging changes to this component or answering potential questions. + +- [Dani-TCVM](https://github.com/TheCandianVendingMachine) + diff --git a/addons/missile_aim9/config.cpp b/addons/missile_aim9/config.cpp new file mode 100644 index 00000000000..6b84b38bb70 --- /dev/null +++ b/addons/missile_aim9/config.cpp @@ -0,0 +1,20 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + name = COMPONENT_NAME; + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_common","ace_missileguidance"}; + author = ECSTRING(common,ACETeam); + authors[] = {"Dani (TCVM)"}; + url = ECSTRING(main,URL); + VERSION_CONFIG; + }; +}; + +#include "CfgAmmo.hpp" +#include "CfgMagazines.hpp" +#include "CfgWeapons.hpp" + diff --git a/addons/missile_aim9/script_component.hpp b/addons/missile_aim9/script_component.hpp new file mode 100644 index 00000000000..20bf611ad62 --- /dev/null +++ b/addons/missile_aim9/script_component.hpp @@ -0,0 +1,18 @@ +#define COMPONENT missile_aim9 +#define COMPONENT_BEAUTIFIED AIM-9 +#include "\z\ace\addons\main\script_mod.hpp" + +// #define DEBUG_MODE_FULL +// #define DISABLE_COMPILE_CACHE +// #define ENABLE_PERFORMANCE_COUNTERS + +#ifdef DEBUG_ENABLED_MISSILE_AIM9 + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_MISSILE_AIM9 + #define DEBUG_SETTINGS DEBUG_SETTINGS_MISSILE_AIM9 +#endif + +#include "\z\ace\addons\main\script_macros.hpp" + diff --git a/addons/missile_aim9/stringtable.xml b/addons/missile_aim9/stringtable.xml new file mode 100644 index 00000000000..5261674153d --- /dev/null +++ b/addons/missile_aim9/stringtable.xml @@ -0,0 +1,50 @@ + + + + + AIM-9M [ACE] + + + AIM-9X [ACE] + + + AIM-132 [ACE] + + + R-73 [ACE] + + + R-74 [ACE] + + + 1x AIM-9M [ACE] + + + 2x AIM-9M [ACE] + + + 1x AIM-9X [ACE] + + + 2x AIM-9X [ACE] + + + 1x AIM-132 [ACE] + + + 2x AIM-132 [ACE] + + + 4x AIM-132 [ACE] + + + 1x R-73 [ACE] + + + 1x R-74 [ACE] + + + 2x R-74 [ACE] + + + diff --git a/addons/missileguidance/ACE_GuidanceConfig.hpp b/addons/missileguidance/ACE_GuidanceConfig.hpp index 0475da204eb..58c650307dd 100644 --- a/addons/missileguidance/ACE_GuidanceConfig.hpp +++ b/addons/missileguidance/ACE_GuidanceConfig.hpp @@ -88,6 +88,14 @@ class GVAR(SeekerTypes) { functionName = QFUNC(seekerType_MWR); onFired = QFUNC(mwr_onFired); }; + class IR { + name = ""; + visualName = ""; + description = ""; + + functionName = QFUNC(seekerType_IR); + onFired = QFUNC(IR_onFired); + }; class DopplerRadar { name = ""; visualName = ""; diff --git a/addons/missileguidance/CfgMissileTypesNato.hpp b/addons/missileguidance/CfgMissileTypesNato.hpp index 87730b5ed0c..7dcbd8e22c0 100644 --- a/addons/missileguidance/CfgMissileTypesNato.hpp +++ b/addons/missileguidance/CfgMissileTypesNato.hpp @@ -612,8 +612,8 @@ class GVAR(type_Redeye) { class GVAR(type_Sidewinder) { enabled = 0; - pitchRate = 25; // Minium flap deflection for guidance - yawRate = 25; // Maximum flap deflection for guidance + pitchRate = 35; // Minium flap deflection for guidance + yawRate = 35; // Maximum flap deflection for guidance canVanillaLock = 1; // Can this default vanilla lock? Only applicable to non-cadet mode diff --git a/addons/missileguidance/XEH_PREP.hpp b/addons/missileguidance/XEH_PREP.hpp index c59389992ff..afdaba260a0 100644 --- a/addons/missileguidance/XEH_PREP.hpp +++ b/addons/missileguidance/XEH_PREP.hpp @@ -48,6 +48,7 @@ PREP(seekerType_Optic); PREP(seekerType_SACLOS); PREP(seekerType_Doppler); PREP(seekerType_MWR); +PREP(seekerType_IR); // Attack Profiles OnFired PREP(wire_onFired); @@ -56,6 +57,7 @@ PREP(wire_onFired); PREP(doppler_onFired); PREP(SACLOS_onFired); PREP(mwr_onFired); +PREP(IR_onFired); // Navigation OnFired PREP(proNav_onFired); diff --git a/addons/missileguidance/functions/fnc_IR_onFired.sqf b/addons/missileguidance/functions/fnc_IR_onFired.sqf new file mode 100644 index 00000000000..14dfe45f18c --- /dev/null +++ b/addons/missileguidance/functions/fnc_IR_onFired.sqf @@ -0,0 +1,29 @@ +#include "..\script_component.hpp" +/* + * Author: tcvm + * Sets up IR state arrays (called from missileGuidance's onFired). + * + * Arguments: + * Guidance Arg Array + * + * Return Value: + * None + * + * Example: + * [] call ace_missileguidance_fnc_IR_onFired + * + * Public: No + */ +params ["_firedEH", "_launchParams", "", "", "_stateParams"]; +_firedEH params ["_shooter","_weapon","","","","","_projectile"]; +_stateParams params ["", "_seekerStateParams"]; +_launchParams params ["", "_targetLaunchParams"]; +_targetLaunchParams params ["_target"]; + +private _flareDistanceFilter = getNumber (configOf _projectile >> QUOTE(ADDON) >> "flareDistanceFilter"); +private _flareAngleFilter = getNumber (configOf _projectile >> QUOTE(ADDON) >> "flareAngleFilter"); + +_seekerStateParams set [0, _flareDistanceFilter]; +_seekerStateParams set [1, _flareAngleFilter]; +_seekerStateParams set [2, _target]; + diff --git a/addons/missileguidance/functions/fnc_seekerType_IR.sqf b/addons/missileguidance/functions/fnc_seekerType_IR.sqf new file mode 100644 index 00000000000..066a0cc98aa --- /dev/null +++ b/addons/missileguidance/functions/fnc_seekerType_IR.sqf @@ -0,0 +1,143 @@ +#include "..\script_component.hpp" +/* + * Author: tcvm + * Infrared seeker. Checks if flares are popped + * + * Arguments: + * 1: Guidance Arg Array + * 2: Seeker State + * + * Return Value: + * Position of wanted missile pos relative to the camera direction + * + * Example: + * [] call ace_missileguidance_fnc_seekerType_IR + * + * Public: No + */ +#ifdef DEBUG_MODE_FULL +#define TRACK_ON_PAUSE true +#else +#define TRACK_ON_PAUSE false +#endif + +_args params ["_firedEH", "_launchParams", "_flightParams", "_seekerParams", "_stateParams", "_targetData"]; +_firedEH params ["_shooter","","","","_ammo","","_projectile"]; +_launchParams params ["_shooter","_targetLaunchParams","_seekerType","_attackProfile","_lockMode","_laserInfo","_navigationType"]; +_targetLaunchParams params ["_target", "", "_launchPos", "_launchDir", "_launchTime"]; +_flightParams params ["_pitchRate", "_yawRate", "_isBangBangGuidance"]; +_stateParams params ["_lastRunTime", "_seekerStateParams", "_attackProfileStateParams", "_lastKnownPosState","_navigationParams", "_guidanceParameters"]; +_seekerParams params ["_seekerAngle", "_seekerAccuracy", "_seekerMaxRange", "_seekerMinRange"]; +_targetData params ["_targetDirection", "_attackProfileDirection", "_targetRange", "_targetVelocity", "_targetAcceleration"]; + +_seekerStateParams params ["_flareDistanceFilter", "_flareAngleFilter", "_trackingTarget"]; + +private _distanceFromLaunch = _launchPos distanceSqr getPosASLVisual _projectile; +if (_distanceFromLaunch <= _seekerMinRange * _seekerMinRange) exitWith { + private _dir = _launchPos vectorFromTo getPosASLVisual _projectile; + _dir vectorAdd getPosASLVisual _projectile +}; + +private _withinView = [_projectile, getPosASLVisual _trackingTarget, _seekerAngle] call FUNC(checkSeekerAngle); +private _canSee = [_projectile, _trackingTarget, false] call FUNC(checkLos); +if (_trackingTarget isNotEqualTo objNull && ({ !_withinView || !_canSee })) then { + _trackingTarget = objNull; +}; +if (isNull _trackingTarget) then { + // find any target within seeker range + private _potentialTargets = _projectile nearEntities ["Air", _seekerMaxRange]; + private _bestAngle = 90; + { + private _withinView = [_projectile, getPosASLVisual _x, _seekerAngle] call FUNC(checkSeekerAngle); + private _canSee = [_projectile, _x, false] call FUNC(checkLos); + + if (_withinView && _canSee) then { + private _los = (getPosASLVisual _projectile) vectorFromTo (getPosASLVisual _x); + private _losAngle = (_los#2 atan2 _los#0); + if (_losAngle < _bestAngle) then { + _trackingTarget = _x; + _bestAngle = _losAngle; + }; + }; + } forEach _potentialTargets; +}; + +if (accTime > 0 && !isGamePaused) then { + // If there are flares nearby, check if they will confuse missile + private _nearby = _trackingTarget nearObjects _flareDistanceFilter; + _nearby = _nearby select { + // 2 = IR blocking + (([getNumber (configOf _x >> "weaponLockSystem"), 4] call EFUNC(common,binarizeNumber)) select 1) && // Check if chaff can break radar lock + {[_projectile, getPosASLVisual _x, _seekerAngle] call FUNC(checkSeekerAngle)} && // Check if within view + {[_projectile, _x, false] call FUNC(checkLos)} // Check if can be seen + }; + + private _frontAspectMultiplier = 1; + if (_trackingTarget isKindOf "Air") then { + private _targetVelocity = velocity _trackingTarget; + + private _directionToTarget = (getPosASLVisual _projectile) vectorFromTo getPosASLVisual _trackingTarget; + private _angle = acos (_directionToTarget vectorCos _targetVelocity); + + _frontAspectMultiplier = (((_angle / 60) min 1) max 0.3); + }; + + private _relativeTargetVelocity = _projectile vectorWorldToModelVisual velocity _trackingTarget; + _relativeTargetVelocity set [1, 0]; + private _foundDecoy = false; + { + if (_trackingTarget isNotEqualTo _x) then { + private _considering = false; + + private _flareRelativeVelocity = _projectile vectorWorldToModelVisual velocity _x; + _flareRelativeVelocity set [1, 0]; + private _angleBetweenVelocities = acos (_relativeTargetVelocity vectorCos _flareRelativeVelocity); + // further away targets are filtered out by assumption that target cant move instantenously + private _chanceToDecoy = 1 - (_trackingTarget distance _x) / (_flareDistanceFilter * _frontAspectMultiplier); + if !(_foundDecoy) then { + if (_angleBetweenVelocities <= _flareAngleFilter) then { + _considering = true; + if (_seekerAccuracy <= random _chanceToDecoy) then { + _trackingTarget = _x; + _foundDecoy = true; + }; + }; + }; + + if (GVAR(debug_drawGuidanceInfo)) then { + private _flarePos = ASLToAGL getPosASLVisual _x; + private _colour = [1, 0, 0, 1]; + if (_considering) then { + _colour = [0, 1, 0, 1]; + }; + if (_trackingTarget isEqualTo _x) then { + _colour = [0, 0, 1, 1]; + }; + drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", _colour, _flarePos, 0.75, 0.75, 0, format ["F %1 C %2", _angleBetweenVelocities, _chanceToDecoy], 1, 0.025, "TahomaB"]; + }; + }; + } forEach _nearby; + + _seekerStateParams set [2, _trackingTarget]; + +}; + +private _targetPosition = _trackingTarget modelToWorldVisualWorld getCenterOfMass _trackingTarget; + +if (GVAR(debug_drawGuidanceInfo) && { _targetPosition isNotEqualTo [0, 0, 0] }) then { + if (!isGamePaused && accTime > 0) then { + private _ps = "#particlesource" createVehicleLocal (ASLToAGL _targetPosition); + _PS setParticleParams [["\A3\Data_f\cl_basic", 8, 3, 1], "", "Billboard", 1, 3.0141, [0, 0, 0], [0, 0, 0], 1, 1.275, 1, 0, [1, 1], [[0, 0, 1, 1], [0, 0, 1, 1], [0, 0, 1, 1]], [1], 1, 0, "", "", nil]; + _PS setDropInterval 1.0; + }; +}; + +_targetData set [0, (getPosASL _projectile) vectorFromTo _targetPosition]; +_targetData set [2, 0]; +_targetData set [3, velocity _trackingTarget]; + +if (_targetPosition isEqualTo [0, 0, 0]) then { + _targetPosition = (velocity _projectile) vectorAdd getPosASLVisual _projectile +}; + +_targetPosition From ce56d878a4374dd27692e7eefd7385ef357e1aea Mon Sep 17 00:00:00 2001 From: Fabio Schick <58027418+mrschick@users.noreply.github.com> Date: Thu, 19 Dec 2024 21:57:02 +0100 Subject: [PATCH 12/35] Scopes - No Zeroing from Secondary Sights (#10220) Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> --- .../functions/fnc_getCurrentZeroRange.sqf | 25 ++++++++++++++++--- addons/scopes/script_component.hpp | 2 ++ 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/addons/scopes/functions/fnc_getCurrentZeroRange.sqf b/addons/scopes/functions/fnc_getCurrentZeroRange.sqf index d1bc3b7790d..a62e3d7a022 100644 --- a/addons/scopes/functions/fnc_getCurrentZeroRange.sqf +++ b/addons/scopes/functions/fnc_getCurrentZeroRange.sqf @@ -19,23 +19,40 @@ params ["_unit"]; if (!GVAR(enabled)) exitWith {currentZeroing _unit}; -private _weaponIndex = [_unit, currentWeapon _unit] call EFUNC(common,getWeaponIndex); +private _currentWeapon = currentWeapon _unit; +private _weaponIndex = [_unit, _currentWeapon] call EFUNC(common,getWeaponIndex); if (_weaponIndex < 0) exitWith { currentZeroing _unit }; + if (GVAR(simplifiedZeroing)) exitWith { if !(GVAR(canAdjustElevation) select _weaponIndex) exitWith {currentZeroing _unit}; private _adjustment = _unit getVariable [QGVAR(Adjustment), [[0, 0, 0], [0, 0, 0], [0, 0, 0]]]; ((_adjustment select _weaponIndex) select 0) }; -private _optic = GVAR(Optics) select _weaponIndex; +private _local = _unit == ACE_Player; + +private _optic = if (_local) then { + GVAR(Optics) select _weaponIndex +} else { + ([_unit] call FUNC(getOptics)) select _weaponIndex +}; private _opticConfig = if (_optic != "") then { (configFile >> "CfgWeapons" >> _optic) } else { - (configFile >> "CfgWeapons" >> (GVAR(Guns) select _weaponIndex)) + if (_local) then { + (configFile >> "CfgWeapons" >> (GVAR(Guns) select _weaponIndex)) + } else { + (configFile >> "CfgWeapons" >> _currentWeapon) + }; }; private _zeroRange = currentZeroing _unit; -if (GVAR(overwriteZeroRange) && {GVAR(canAdjustElevation) select _weaponIndex}) then { +// Revert zeroing to default if overriding is enabled OR the selected sight's magnification is not higher than that of the naked eye, meaning that it is a secondary iron/holo sight +if ( + _local && + (GVAR(canAdjustElevation) select _weaponIndex) && + {GVAR(overwriteZeroRange) || {getNumber (_opticConfig >> "ItemInfo" >> "OpticsModes" >> (_unit getOpticsMode _weaponIndex) >> "opticsZoomMax") > MIN_ZOOM_NAKEDEYE}} +) then { _zeroRange = GVAR(defaultZeroRange); }; if (isNumber (_opticConfig >> "ACE_ScopeZeroRange")) then { diff --git a/addons/scopes/script_component.hpp b/addons/scopes/script_component.hpp index 9e867a9bd28..e7a9edb1587 100644 --- a/addons/scopes/script_component.hpp +++ b/addons/scopes/script_component.hpp @@ -18,6 +18,8 @@ #define DEFAULT_RAIL_BASE_ANGLE 0.0086 // deg +#define MIN_ZOOM_NAKEDEYE 0.2 // Magnification (CfgWeapons opticsZoomMax) that will always be unachievable by the naked eye + // #define DISABLE_DISPERSION #ifdef DEBUG_ENABLED_SCOPES From 745dc0ccd15a80a2ae95a1947d191b0bd9827da3 Mon Sep 17 00:00:00 2001 From: Bailey Danyluk Date: Thu, 19 Dec 2024 14:10:26 -0700 Subject: [PATCH 13/35] missile_manpad - add MANPADs and IR seeker (#10031) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: TyroneMF Co-authored-by: Filip Maciejewski Co-authored-by: Kyle Mckay <5459452+kymckay@users.noreply.github.com> Co-authored-by: jonpas Co-authored-by: Elgin675 Co-authored-by: Blutze <37950828+Blutze@users.noreply.github.com> Co-authored-by: Jo David Co-authored-by: BaerMitUmlaut Co-authored-by: commy2 Co-authored-by: PabstMirror Co-authored-by: Dabako Co-authored-by: Pascal Dunaj <32539404+t-zilla@users.noreply.github.com> Co-authored-by: Brett Co-authored-by: Dystopian Co-authored-by: R3voA3 Co-authored-by: Steve Zhao Co-authored-by: Kyle J. McKeown Co-authored-by: Salluci <69561145+Salluci@users.noreply.github.com> Co-authored-by: Dániel Boros <43353942+Malbryn@users.noreply.github.com> Co-authored-by: Laid3acK Co-authored-by: frankplow Co-authored-by: JoramD Co-authored-by: Dabako Co-authored-by: Abogado Co-authored-by: Dedmen Miller Co-authored-by: Lupus the Canine Co-authored-by: Drofseh Co-authored-by: LorenLuke Co-authored-by: SzwedzikPL Co-authored-by: BrettMayson Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> --- addons/missile_manpad/$PBOPREFIX$ | 1 + addons/missile_manpad/CfgAmmo.hpp | 34 ++++++ addons/missile_manpad/CfgMagazines.hpp | 22 ++++ addons/missile_manpad/CfgVehicles.hpp | 108 ++++++++++++++++++ addons/missile_manpad/CfgWeapons.hpp | 23 ++++ addons/missile_manpad/README.md | 12 ++ addons/missile_manpad/config.cpp | 21 ++++ addons/missile_manpad/script_component.hpp | 18 +++ addons/missile_manpad/stringtable.xml | 17 +++ .../missileguidance/CfgMissileTypesNato.hpp | 11 +- addons/missileguidance/XEH_PREP.hpp | 1 + .../fnc_navigationType_lineOfSight.sqf | 24 ++-- 12 files changed, 274 insertions(+), 18 deletions(-) create mode 100644 addons/missile_manpad/$PBOPREFIX$ create mode 100644 addons/missile_manpad/CfgAmmo.hpp create mode 100644 addons/missile_manpad/CfgMagazines.hpp create mode 100644 addons/missile_manpad/CfgVehicles.hpp create mode 100644 addons/missile_manpad/CfgWeapons.hpp create mode 100644 addons/missile_manpad/README.md create mode 100644 addons/missile_manpad/config.cpp create mode 100644 addons/missile_manpad/script_component.hpp create mode 100644 addons/missile_manpad/stringtable.xml diff --git a/addons/missile_manpad/$PBOPREFIX$ b/addons/missile_manpad/$PBOPREFIX$ new file mode 100644 index 00000000000..693a43e0f63 --- /dev/null +++ b/addons/missile_manpad/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\missile_manpad \ No newline at end of file diff --git a/addons/missile_manpad/CfgAmmo.hpp b/addons/missile_manpad/CfgAmmo.hpp new file mode 100644 index 00000000000..adc5a71270c --- /dev/null +++ b/addons/missile_manpad/CfgAmmo.hpp @@ -0,0 +1,34 @@ +class EGVAR(missileguidance,type_RAM); +class EGVAR(missileguidance,type_Stinger); +class CfgAmmo { + class ammo_Missile_rim116; + class GVAR(rim116): ammo_Missile_rim116 { + maneuvrability = 0; + missileLockMaxSpeed = 2000; + + missileLockCone = 3; // caged lock + missileKeepLockedCone = 45; + missileLockMaxDistance = 5000; + missileLockMinDistance = 250; + + class ace_missileguidance: EGVAR(missileguidance,type_RAM) { + enabled = 1; + }; + }; + + class M_70mm_SAAMI; + class GVAR(stinger): M_70mm_SAAMI { + maneuvrability = 0; + missileLockMaxSpeed = 2000; + + missileLockCone = 3; // caged lock + missileKeepLockedCone = 45; + missileLockMaxDistance = 5000; + missileLockMinDistance = 250; + + class ace_missileguidance: EGVAR(missileguidance,type_Stinger) { + enabled = 1; + }; + }; +}; + diff --git a/addons/missile_manpad/CfgMagazines.hpp b/addons/missile_manpad/CfgMagazines.hpp new file mode 100644 index 00000000000..22f80549988 --- /dev/null +++ b/addons/missile_manpad/CfgMagazines.hpp @@ -0,0 +1,22 @@ +class CfgMagazines { + class magazine_Missile_rim116_x21; + class GVAR(rim116): magazine_Missile_rim116_x21 { + author = "Dani (TCVM)"; + displayName = CSTRING(rim116_21x); + ammo = QGVAR(rim116); + }; + + class 4Rnd_70mm_SAAMI_missiles; + class GVAR(stinger): 4Rnd_70mm_SAAMI_missiles { + author = "Dani (TCVM)"; + displayName = CSTRING(stinger_4x); + ammo = QGVAR(stinger); + }; + + class Titan_AA; + class GVAR(stinger_man): Titan_AA { + author = "Dani (TCVM)"; + displayName = CSTRING(stinger); + ammo = QGVAR(stinger); + }; +}; diff --git a/addons/missile_manpad/CfgVehicles.hpp b/addons/missile_manpad/CfgVehicles.hpp new file mode 100644 index 00000000000..7bbc7fb1821 --- /dev/null +++ b/addons/missile_manpad/CfgVehicles.hpp @@ -0,0 +1,108 @@ +class CfgVehicles { + class LandVehicle; + class StaticWeapon: LandVehicle { + class Turrets; + }; + class StaticMGWeapon: StaticWeapon { + class Turrets: Turrets { + class MainTurret; + }; + }; + + class SAM_System_01_base_F: StaticMGWeapon { + class AnimationSources { + class Missiles_revolving { + source = "revolving"; + weapon = QGVAR(rim116); + }; + }; + + class Turrets: Turrets { + class MainTurret: MainTurret { + weapons[] = {QGVAR(rim116)}; + magazines[] = {QGVAR(rim116)}; + }; + }; + }; + + class Tank; + class Tank_F: Tank { + class Turrets { + class MainTurret; + }; + }; + class LT_01_base_F: Tank_F { + class AnimationSources; + class Turrets: Turrets {}; + }; + + class LT_01_AA_base_F: LT_01_base_F { + class AnimationSources: AnimationSources { + class Missiles_revolving { + source = "revolving"; + weapon = QGVAR(FIM92); + }; + }; + + class Turrets: Turrets { + class MainTurret: MainTurret { + weapons[] = {"SmokeLauncher", QGVAR(FIM92), "HMG_127"}; + magazines[] = { + "SmokeLauncherMag", + QGVAR(stinger), + QGVAR(stinger), + "100Rnd_127x99_mag_Tracer_Red", + "100Rnd_127x99_mag_Tracer_Red", + "100Rnd_127x99_mag_Tracer_Red", + "100Rnd_127x99_mag_Tracer_Red" + }; + }; + }; + }; + + class APC_Tracked_01_base_F: Tank_F { + class Turrets: Turrets { + class MainTurret: MainTurret {}; + }; + }; + class B_APC_Tracked_01_base_F: APC_Tracked_01_base_F { + class AnimationSources; + }; + class B_APC_Tracked_01_AA_F: B_APC_Tracked_01_base_F { + class AnimationSources: AnimationSources { + class Missiles_revolving { + source = "revolving"; + weapon = QGVAR(FIM92); + }; + }; + class Turrets: Turrets { + class MainTurret: MainTurret { + weapons[] = {"autocannon_35mm", QGVAR(FIM92)}; + magazines[] = {"680Rnd_35mm_AA_shells_Tracer_Red", QGVAR(stinger), QGVAR(stinger)}; + }; + }; + }; + + class APC_Tracked_02_base_F: Tank_F { + class Turrets: Turrets { + class MainTurret: MainTurret {}; + }; + }; + class O_APC_Tracked_02_base_F: APC_Tracked_02_base_F { + class AnimationSources; + }; + class O_APC_Tracked_02_AA_F: O_APC_Tracked_02_base_F { + class AnimationSources: AnimationSources { + class Missiles_revolving { + source = "revolving"; + weapon = QGVAR(FIM92); + }; + }; + class Turrets: Turrets { + class MainTurret: MainTurret { + weapons[] = {"autocannon_35mm", QGVAR(FIM92)}; + magazines[] = {"680Rnd_35mm_AA_shells_Tracer_Green", QGVAR(stinger), QGVAR(stinger)}; + }; + }; + }; +}; diff --git a/addons/missile_manpad/CfgWeapons.hpp b/addons/missile_manpad/CfgWeapons.hpp new file mode 100644 index 00000000000..adba9137d23 --- /dev/null +++ b/addons/missile_manpad/CfgWeapons.hpp @@ -0,0 +1,23 @@ +class CfgWeapons { + class weapon_rim116Launcher; + class GVAR(rim116): weapon_rim116Launcher { + author = "Dani (TCVM)"; + displayName = CSTRING(rim116); + magazines[] = { QGVAR(rim116) }; + weaponLockDelay = 0.5; + }; + + class missiles_SAAMI; + class GVAR(FIM92): missiles_SAAMI { + author = "Dani (TCVM)"; + displayName = CSTRING(stinger); + magazines[] = { QGVAR(stinger) }; + weaponLockDelay = 0.5; + }; + + class Launcher_Base_F; + class launch_Titan_base: Launcher_Base_F { + magazines[] = {QGVAR(stinger_man)}; + }; +}; + diff --git a/addons/missile_manpad/README.md b/addons/missile_manpad/README.md new file mode 100644 index 00000000000..377e7450d34 --- /dev/null +++ b/addons/missile_manpad/README.md @@ -0,0 +1,12 @@ +ace_missile_manpad +=================== + +Adds missile guidance to all vanilla MANPAD systems + + +## Maintainers + +The people responsible for merging changes to this component or answering potential questions. + +- [Dani-TCVM](https://github.com/TheCandianVendingMachine) + diff --git a/addons/missile_manpad/config.cpp b/addons/missile_manpad/config.cpp new file mode 100644 index 00000000000..d285b08cfc8 --- /dev/null +++ b/addons/missile_manpad/config.cpp @@ -0,0 +1,21 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + name = COMPONENT_NAME; + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_common","ace_missileguidance"}; + author = ECSTRING(common,ACETeam); + authors[] = {"Dani (TCVM)"}; + url = ECSTRING(main,URL); + VERSION_CONFIG; + }; +}; + +#include "CfgAmmo.hpp" +#include "CfgMagazines.hpp" +#include "CfgWeapons.hpp" +#include "CfgVehicles.hpp" + diff --git a/addons/missile_manpad/script_component.hpp b/addons/missile_manpad/script_component.hpp new file mode 100644 index 00000000000..7c25a962e15 --- /dev/null +++ b/addons/missile_manpad/script_component.hpp @@ -0,0 +1,18 @@ +#define COMPONENT missile_manpad +#define COMPONENT_BEAUTIFIED MANPAD +#include "\z\ace\addons\main\script_mod.hpp" + +// #define DEBUG_MODE_FULL +// #define DISABLE_COMPILE_CACHE +// #define ENABLE_PERFORMANCE_COUNTERS + +#ifdef DEBUG_ENABLED_MISSILE_MANPAD + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_MISSILE_MANPAD + #define DEBUG_SETTINGS DEBUG_SETTINGS_MISSILE_MANPAD +#endif + +#include "\z\ace\addons\main\script_macros.hpp" + diff --git a/addons/missile_manpad/stringtable.xml b/addons/missile_manpad/stringtable.xml new file mode 100644 index 00000000000..260bfd4f1f7 --- /dev/null +++ b/addons/missile_manpad/stringtable.xml @@ -0,0 +1,17 @@ + + + + + FIM-92 Stinger [ACE] + + + RIM-116 [ACE] + + + 21x RIM-116 [ACE] + + + 4x FIM-92 Stinger [ACE] + + + diff --git a/addons/missileguidance/CfgMissileTypesNato.hpp b/addons/missileguidance/CfgMissileTypesNato.hpp index 7dcbd8e22c0..f59cf75856a 100644 --- a/addons/missileguidance/CfgMissileTypesNato.hpp +++ b/addons/missileguidance/CfgMissileTypesNato.hpp @@ -579,8 +579,8 @@ class GVAR(type_RBS70) { class GVAR(type_Redeye) { enabled = 0; - pitchRate = 27; // Minium flap deflection for guidance - yawRate = 27; // Maximum flap deflection for guidance + pitchRate = 40; // Minium flap deflection for guidance + yawRate = 40; // Maximum flap deflection for guidance canVanillaLock = 1; // Can this default vanilla lock? Only applicable to non-cadet mode @@ -594,8 +594,9 @@ class GVAR(type_Redeye) { defaultSeekerLockMode = "LOBL"; seekerLockModes[] = { "LOBL" }; - defaultNavigationType = "ProportionalNavigation"; - navigationTypes[] = { "ProportionalNavigation" }; + defaultNavigationType = "LineOfSight"; + navigationTypes[] = { "LineOfSight" }; + navigationGain = 3; seekLastTargetPos = 0; // seek last target position [if seeker loses LOS of target, continue to last known pos] seekerAngle = 45; // Angle from the shooter's view that can track the missile @@ -713,4 +714,4 @@ class GVAR(type_TOW) { // Attack profile type selection defaultAttackProfile = "WIRE"; attackProfiles[] = {"WIRE"}; -}; \ No newline at end of file +}; diff --git a/addons/missileguidance/XEH_PREP.hpp b/addons/missileguidance/XEH_PREP.hpp index afdaba260a0..2fc1aa8394e 100644 --- a/addons/missileguidance/XEH_PREP.hpp +++ b/addons/missileguidance/XEH_PREP.hpp @@ -60,6 +60,7 @@ PREP(mwr_onFired); PREP(IR_onFired); // Navigation OnFired +PREP(navigationType_lineOfSight); PREP(proNav_onFired); PREP(line_onFired); diff --git a/addons/missileguidance/functions/fnc_navigationType_lineOfSight.sqf b/addons/missileguidance/functions/fnc_navigationType_lineOfSight.sqf index 958bc62ade9..62670e2f960 100644 --- a/addons/missileguidance/functions/fnc_navigationType_lineOfSight.sqf +++ b/addons/missileguidance/functions/fnc_navigationType_lineOfSight.sqf @@ -18,31 +18,29 @@ params ["_args", "_timestep", "_seekerTargetPos", "_profileAdjustedTargetPos"]; _args params ["_firedEH", "", "", "", "_stateParams", "_targetData"]; _firedEH params ["","","","","","","_projectile"]; _stateParams params ["", "", "", "","_navigationParams"]; -_navigationParams params ["_onLaunch"]; -_onLaunch params ["_lastLineOfSight"]; -_targetData params ["_targetDirection", "_attackProfileDirection", "", "_targetVelocity", ""]; +_navigationParams params ["_lastMissileFrame", "_navigationGain"]; +_lastMissileFrame params ["_lastLineOfSight"]; +_targetData params ["_targetDirection", "_attackProfileDirection"]; // Semi-proportional navigation implemented via "Fundamentals of proportional navigation" by Stephen Murtaugh and Harry Criel - -// the los rate is tiny, so we multiply by a constant of a power of ten to get more aggressive acceleration -// this is just due to how we measure our LOS delta, the vectors involved are _tiny_ -private _losDelta = _attackProfileDirection vectorDiff _lastLineOfSight; +private _losDelta = (vectorNormalized _attackProfileDirection) vectorDiff (vectorNormalized _lastLineOfSight); private _losRate = if (_timestep == 0) then { 0 } else { - 10 * (vectorMagnitude _losDelta) / _timestep; + 1 * (vectorMagnitude _losDelta) / _timestep; }; -private _closingVelocity = _targetVelocity vectorDiff (velocity _projectile); +private _lateralAcceleration = _navigationGain * _losRate; +private _commandedAcceleration = _attackProfileDirection vectorMultiply _lateralAcceleration; -private _commandedAcceleration = _closingVelocity vectorMultiply _losRate; +private _missileDirection = vectorNormalized velocity _projectile; // we need acceleration normal to our LOS -private _commandedAccelerationProjected = _attackProfileDirection vectorMultiply (_commandedAcceleration vectorDotProduct _attackProfileDirection); +private _commandedAccelerationProjected = _missileDirection vectorMultiply (_commandedAcceleration vectorDotProduct _missileDirection); _commandedAcceleration = _commandedAcceleration vectorDiff _commandedAccelerationProjected; if (accTime > 0) then { - _navigationParams set [0, [_attackProfileDirection]]; + _navigationParams set [0, [_seekerTargetPos]]; }; -_targetDirection +_commandedAcceleration From 96bd2b3217b6121f12d9b801cf0f89bf6e597fcb Mon Sep 17 00:00:00 2001 From: BrettMayson Date: Thu, 19 Dec 2024 18:55:44 -0600 Subject: [PATCH 14/35] CI - Disable annotations in arma.yml (#10575) ci: disable annotations in arma.yml --- .github/workflows/arma.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/arma.yml b/.github/workflows/arma.yml index 1af2e7e0602..c3769d59126 100644 --- a/.github/workflows/arma.yml +++ b/.github/workflows/arma.yml @@ -34,6 +34,8 @@ jobs: uses: actions/checkout@v4 - name: Setup HEMTT uses: arma-actions/hemtt@v1 + with: + annotate: false - name: Run HEMTT build run: hemtt build - name: Rename build folder From c984da5866c9ff1a73d20cb5200bf84458910d8d Mon Sep 17 00:00:00 2001 From: Grim <69561145+LinkIsGrim@users.noreply.github.com> Date: Thu, 19 Dec 2024 21:55:53 -0300 Subject: [PATCH 15/35] Missiles - Remove maintainers section in readme (#10574) --- addons/missile_aim9/README.md | 8 -------- addons/missile_manpad/README.md | 10 +--------- 2 files changed, 1 insertion(+), 17 deletions(-) diff --git a/addons/missile_aim9/README.md b/addons/missile_aim9/README.md index 245c08a727a..2f00568aa03 100644 --- a/addons/missile_aim9/README.md +++ b/addons/missile_aim9/README.md @@ -2,11 +2,3 @@ ace_missile_aim9 =================== Adds AIM-9 and R-73 AHR missiles - - -## Maintainers - -The people responsible for merging changes to this component or answering potential questions. - -- [Dani-TCVM](https://github.com/TheCandianVendingMachine) - diff --git a/addons/missile_manpad/README.md b/addons/missile_manpad/README.md index 377e7450d34..4d1e78321ff 100644 --- a/addons/missile_manpad/README.md +++ b/addons/missile_manpad/README.md @@ -1,12 +1,4 @@ ace_missile_manpad =================== -Adds missile guidance to all vanilla MANPAD systems - - -## Maintainers - -The people responsible for merging changes to this component or answering potential questions. - -- [Dani-TCVM](https://github.com/TheCandianVendingMachine) - +Adds missile guidance to all vanilla MANPAD systems From c3c32e021fc6ec82bc49cac3325b9c3d64ad595b Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Thu, 19 Dec 2024 18:59:25 -0600 Subject: [PATCH 16/35] extension - allow static_mut_refs (#10567) --- extension/src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/extension/src/lib.rs b/extension/src/lib.rs index 7d7565fb3e1..daaa3372f92 100644 --- a/extension/src/lib.rs +++ b/extension/src/lib.rs @@ -1,5 +1,6 @@ #![deny(clippy::all)] #![deny(missing_debug_implementations)] +#![allow(static_mut_refs)] //! ACE3 Extension for quick maths and OS APIs From a2e3e6822fa7905ca031b1ea4dfb241ab4133411 Mon Sep 17 00:00:00 2001 From: Grim <69561145+LinkIsGrim@users.noreply.github.com> Date: Fri, 20 Dec 2024 01:44:55 -0300 Subject: [PATCH 17/35] Medical Engine - Fix unit instakill on vehicle explosion (#10542) * Medical Engine - Fix unit instakill on vehicle explosion * format, missing ; * use unit itself as blocker Co-authored-by: PabstMirror * fix condition * actually fix it * shoot me! right in the face! --------- Co-authored-by: PabstMirror --- .../functions/fnc_handleDamage.sqf | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/addons/medical_engine/functions/fnc_handleDamage.sqf b/addons/medical_engine/functions/fnc_handleDamage.sqf index cf891f5e532..7a037bd979e 100644 --- a/addons/medical_engine/functions/fnc_handleDamage.sqf +++ b/addons/medical_engine/functions/fnc_handleDamage.sqf @@ -13,6 +13,9 @@ * * Public: No */ + +#define INSTAKILL_BLOCKED(unit) (unit isEqualTo (unit getVariable [QGVAR(blockInstaKill), objNull])) + params ["_unit", "_selection", "_damage", "_shooter", "_ammo", "_hitPointIndex", "_instigator", "_hitpoint", "_directHit", "_context"]; // HD sometimes triggers for remote units - ignore. @@ -35,13 +38,25 @@ if !(isDamageAllowed _unit && {_unit getVariable [QEGVAR(medical,allowDamage), t // Killing units via End key is an edge case (#10375) // This didn't matter pre-Arma 3 2.18 but now this goes through the event handler // TODO: Structural fire damage >= 1 in a single damage event could still be caught here and we don't want that, but we haven't found a better way to catch this, fire damage should be small most of the time anyway +// Also triggers for catastrophic vehicle explosions which would kill crew outright, check for blocking private _newDamage = _damage - _oldDamage; -if (_structuralDamage && {(abs (_newDamage - 1)) < 0.001 && _ammo == "" && isNull _shooter && isNull _instigator}) exitWith {_damage}; +if (_structuralDamage && {(abs (_newDamage - 1)) < 0.001 && _ammo == "" && isNull _shooter && isNull _instigator} && {!INSTAKILL_BLOCKED(_unit)}) exitWith { + TRACE_1("unit killed by curator or engine",_unit); + + _damage +}; // _newDamage == 0 happens occasionally for vehiclehit events (see line 80 onwards), just exit early to save some frametime // context 4 is engine "bleeding". For us, it's just a duplicate event for #structural which we can ignore without any issues +// Leverage this to block insta-kills on the same frame (see above) if (_context != 2 && {_context == 4 || _newDamage == 0}) exitWith { - TRACE_4("Skipping engine bleeding or zero damage",_ammo,_newDamage,_directHit,_context); + TRACE_4("Skipping engine bleeding or zero damage, blocking insta kills until next frame",_ammo,_newDamage,_directHit,_context); + + if (!INSTAKILL_BLOCKED(_unit)) then { + _unit setVariable [QGVAR(blockInstaKill), _unit]; + [{_this setVariable [QGVAR(blockInstaKill), nil]}, _unit] call CBA_fnc_execNextFrame; + }; + _oldDamage }; From 673e2f5972516b6073db367d5cf25315899bcc9f Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Thu, 19 Dec 2024 22:45:24 -0600 Subject: [PATCH 18/35] Vehicle Damage - Optimize `IS_INEXPLOSIVE_AMMO` macro (#10576) --- .../functions/fnc_handleDamageEjectIfDestroyed.sqf | 2 +- addons/vehicle_damage/script_macros.hpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/vehicle_damage/functions/fnc_handleDamageEjectIfDestroyed.sqf b/addons/vehicle_damage/functions/fnc_handleDamageEjectIfDestroyed.sqf index 8169e140e2c..ab36fee75cd 100644 --- a/addons/vehicle_damage/functions/fnc_handleDamageEjectIfDestroyed.sqf +++ b/addons/vehicle_damage/functions/fnc_handleDamageEjectIfDestroyed.sqf @@ -22,7 +22,7 @@ if (alive _vehicle) exitWith {}; TRACE_2("handleDamageEjectIfDestroyed",typeOf _vehicle,_this); -if (!IS_EXPLOSIVE_AMMO(_ammo)) then { +if (IS_INEXPLOSIVE_AMMO(_ammo)) then { { if (alive _x) then { moveOut _x; diff --git a/addons/vehicle_damage/script_macros.hpp b/addons/vehicle_damage/script_macros.hpp index 43bac7e2f80..dd40ac91711 100644 --- a/addons/vehicle_damage/script_macros.hpp +++ b/addons/vehicle_damage/script_macros.hpp @@ -4,7 +4,7 @@ #define BAILOUT_CHANCE_SHOOT 0.5 #define BAILOUT_CHANCE_MOVE 0.8 -#define IS_EXPLOSIVE_AMMO(ammo) (getNumber (ammo call CBA_fnc_getObjectConfig >> "explosive") > 0.5) +#define IS_INEXPLOSIVE_AMMO(ammo) (getNumber (ammo call CBA_fnc_getObjectConfig >> "explosive") <= 0.5) #define ENGINE_HITPOINTS [["hitengine"], "engine"] #define HULL_HITPOINTS [["hithull", "hitbody", "#structural"], "hull"] From a449ce0f3206ccded794ae12702df32c6000bef1 Mon Sep 17 00:00:00 2001 From: Apricot <50947830+Apricot-ale@users.noreply.github.com> Date: Fri, 20 Dec 2024 14:27:58 +0900 Subject: [PATCH 19/35] Translations - Improve Japanese (WS/RF, EHP, MSL) (#10577) * JP add missing * ELECTRONIC --- addons/common/stringtable.xml | 2 ++ .../compat_rf_realisticnames/stringtable.xml | 9 +++++++-- .../compat_ws_realisticnames/stringtable.xml | 10 ++++++++++ addons/fieldmanual/stringtable.xml | 4 +++- addons/hearing/stringtable.xml | 8 ++++++++ addons/missile_aim120/stringtable.xml | 13 +++++++++++++ addons/missile_aim9/stringtable.xml | 15 +++++++++++++++ addons/missile_manpad/stringtable.xml | 4 ++++ addons/missile_sam/stringtable.xml | 9 +++++++++ 9 files changed, 71 insertions(+), 3 deletions(-) diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index be218f45533..399528c638f 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -1796,10 +1796,12 @@ Realistic Compass Declination Déclinaison réaliste de la boussole + 現実的なコンパス偏角 Compass will point to magnetic north La boussole indique le nord magnétique + コンパスが磁北を指すようになります Players only diff --git a/addons/compat_rf/compat_rf_realisticnames/stringtable.xml b/addons/compat_rf/compat_rf_realisticnames/stringtable.xml index d67c3511fe1..a66ed12ef28 100644 --- a/addons/compat_rf/compat_rf_realisticnames/stringtable.xml +++ b/addons/compat_rf/compat_rf_realisticnames/stringtable.xml @@ -138,6 +138,7 @@ Desert Eagle Mark XIX L5 (Camo) + デザートイーグル Mark XIX L5 (迷彩) Desert Eagle Mark XIX L5 (Classic) @@ -398,7 +399,7 @@ C-More Railway (Rosso, Desert) C-More Railway (Rot, Wüste) 씨모어 레일웨이 (빨강, 사막) - C-More レイルウェイ (グリーン、砂漠迷彩) + C-More レイルウェイ (レッド、砂漠迷彩) C-More Railway (Green, Desert) @@ -425,7 +426,7 @@ C-More Railway (Rosso, Boschivo) C-More Railway (Rot, Grünes Tarnmuster) 씨모어 레일웨이 (빨강, 수풀) - C-More レイルウェイ (グリーン、森林迷彩) + C-More レイルウェイ (レッド、森林迷彩) EOTech MRDS (Khaki) @@ -546,6 +547,7 @@ Ram 1500 (Minigun) + ラム 1500 (ミニガン) Ram 1500 (MMG) @@ -567,9 +569,11 @@ Ram 1500 (RCWS) + ラム 1500 (RCWS) Ram 1500 (Rocket) + ラム 1500 (ロケット) Ram 1500 (Repair) @@ -694,6 +698,7 @@ Typhoon Cargo + タイフーン 貨物 Typhoon Water diff --git a/addons/compat_ws/compat_ws_realisticnames/stringtable.xml b/addons/compat_ws/compat_ws_realisticnames/stringtable.xml index 382b0539666..53065e706a0 100644 --- a/addons/compat_ws/compat_ws_realisticnames/stringtable.xml +++ b/addons/compat_ws/compat_ws_realisticnames/stringtable.xml @@ -354,9 +354,11 @@ XMS GL (Camo) + XMS GL (迷彩) XMS GL (Gray) + XMS GL (グレー) XMS GL (Sand) @@ -396,9 +398,11 @@ XMS (Camo) + XMS (迷彩) XMS (Gray) + XMS (グレー) XMS SG (Khaki) @@ -426,9 +430,11 @@ XMS SG (Camo) + XMS SG (迷彩) XMS SG (Gray) + XMS SG (グレー) XMS SG (Sand) @@ -468,9 +474,11 @@ XMS SW (Camo) + XMS SW (迷彩) XMS SW (Gray) + XMS SW (グレー) XMS SW (Sand) @@ -552,9 +560,11 @@ C-More Railway (Red, Camo) + C-More レイルウェイ (レッド、迷彩) C-More Railway (Green, Camo) + C-More レイルウェイ (グリーン、迷彩) ELCAN SpecterOS (Hex) diff --git a/addons/fieldmanual/stringtable.xml b/addons/fieldmanual/stringtable.xml index 9c43f61cef1..5cb9a302a6e 100644 --- a/addons/fieldmanual/stringtable.xml +++ b/addons/fieldmanual/stringtable.xml @@ -273,7 +273,7 @@ %3Tappi auricolari%4 aiutano a prevenire danni all'udito da ripetuti rumori forti in prossimità del soldato. Inserisci %3Tappi auricolari%4 per ridurre il volume dell'ambiente per il soldato e impedire %3Assordamento%4.<br/><br/>%3Utilizzo:%4<br/>%2Usa [%3%12%4] e seleziona %3Equipaggiamento%4.<br/>%2Indossa %3Tappi Auricolari%4. %3Stopery do Uszu%4 zapobiegają uszkodzeniom słuchu na skutek wybuchów i strzałów w pobliżu żołnierza. Włóż %3Stopery do Uszu%4 w celu wyciszenia otoczenia i uniknięcia %3Głuchoty Bojowej%4.<br/><br/>%3Użycie:%4<br/>%2Użyj [%3%12%4] i wybierz %3Ekwipunek%4.<br/>%2Włóż %3Stopery do Uszu%4. %3귀마개%4는 병사 주변에서 반복되는 시끄러운 소리로 인한 청력 손상을 방지하는 데 도움이 됩니다. %3귀마개%4를 끼워서 병사가 있는 환경의 소리 크기를 낮추고 %3전투로 인한 청력손상%4을 방지하십시오.<br/><br/>%3사용 방법:%4<br/>%2[%3%12%4]를 사용하여 %3장비%4를 선택하십시오.<br/>%2%3귀마개%4를 삽입하십시오. - %3耳栓%4は、兵士の近くで繰り返される大きな騒音による聴覚障害を防ぐのに役立ちます。%3耳栓%4を耳に挿入することで兵士の環境の音量を下げ、%3戦闘難聴%4を防ぎます。<br/><br/>%3使用方法:%4<br/>%2[%3%12%4] を使って%3装備%4を選択します。<br/>%2%3耳栓を着ける%4ことで使用できます。 + %3耳栓%4は、兵士の近くで繰り返される大きな騒音による聴覚障害を防ぐのに役立ちます。%3耳栓%4を耳に挿入することで兵士の環境の音量を下げ、%3戦闘難聴%4を防ぎます。<br/><br/>%3使用方法:%4<br/>%2[%3%12%4] を使って%3装備%4を選択します。<br/>%2%3耳栓を装着%4することで使用できます。 Protect Your Hearing @@ -287,9 +287,11 @@ %3Electronic Hearing Protection (EHP)%4 helps prevent hearing damage from repeat loud noises near a soldier. Differently from %3Ear Plugs%4, volume is only reduced when necessary. %3EHP%4 can also be built-in to certain types of %3Headgear%4 and %3Facewear%4.<br/><br/>%3Usage:%4<br/>%2Use [%3%12%4] and select %3Equipment%4.<br/>%2Put on Electronic Hearing Protection%4. + %3電子聴覚保護装置%4は、兵士の近くで繰り返される大きな騒音による聴覚障害を防ぐのに役立ちます。%3耳栓%4とは異なり、音量は必要な場合にのみ下げられます。 %3電子聴覚保護装置%4は、特定の種類の%3ヘッドギア%4および%3フェイスウェア%4に組み込まれていることがあります。<br/><br/>%3使用方法:%4<br/>%2[%3%12%4] を使って%3装備%4を選択します。<br/>%2電子聴覚保護装置を装着%4することで使用できます。 Protect Your Hearing, Electronically + 聴覚を保護。電子的に。 The %3Entrenching Tool%4 allows soldiers to dig trenches to help defend their position. The soldier must be on soil in order to dig a trench.<br/><br/>%3Usage:%4<br/>%2Equip an %3Entrenching Tool%4.<br/>%2Use [%3%12%4] and select %3Equipment%4.<br/>%2Select the type of trench you wish to build. diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index 82f2a7ca563..c84634c3af5 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -136,26 +136,32 @@ Electronic Hearing Protection taken off Elektronischer Gehörschutz abgesetzt + 電子聴覚保護具を外しました Electronic Hearing Protection put on Elektronischer Gehörschutz aufgesetzt + 電子聴覚保護具を装着しました Electronic Hearing Protection protects the wearer from hearing damage without reducing situational awareness. Elektronischer Gehörschutz schützt den Träger vor Hörschäden, ohne dass sein Situationsbewusstsein eingeschränkt wird. + 電子聴覚保護具は状況認識力を低下させることなく、装着者の聴覚障害を防ぐことができる。 Electronic Hearing Protection Elektronischer Gehörschutz + 電子聴覚保護具 Take off Electronic Hearing Protection Elektronischen Gehörschutz absetzen + 電子聴覚保護具を外す Put on Electronic Hearing Protection Elektronischen Gehörschutz aufsetzen + 電子聴覚保護具を装着 Reduces the hearing ability as the player takes hearing damage @@ -240,6 +246,7 @@ Put on/take off Electronic Hearing Protection Elektronischer Gehörschutz aufsetzen/absetzen + 電子聴覚保護具の着脱 Put/take out earplugs @@ -399,6 +406,7 @@ ELECTRONIC + 電子聴覚保護 Volume when unconscious. diff --git a/addons/missile_aim120/stringtable.xml b/addons/missile_aim120/stringtable.xml index f5e9f63c50f..dd8f58d4fa9 100644 --- a/addons/missile_aim120/stringtable.xml +++ b/addons/missile_aim120/stringtable.xml @@ -4,54 +4,67 @@ AIM-120A [ACE] AIM-120A [ACE] + AIM-120A [ACE] 1x AIM-120A [ACE] 1x AIM-120A [ACE] + 1x AIM-120A [ACE] AIM-120 [ACE] AIM-120 [ACE] + AIM-120 [ACE] AIM-120C [ACE] AIM-120C [ACE] + AIM-120C [ACE] 1x AIM-120C [ACE] 1x AIM-120C [ACE] + 1x AIM-120C [ACE] 2x AIM-120C [ACE] 2x AIM-120C [ACE] + 2x AIM-120C [ACE] AIM-120D [ACE] AIM-120D [ACE] + AIM-120D [ACE] 1x AIM-120D [ACE] 1x AIM-120D [ACE] + 1x AIM-120D [ACE] 2x AIM-120D [ACE] 2x AIM-120D [ACE] + 2x AIM-120D [ACE] Direct Direct + ダイレクト Loft Loft + ロフト R-77 [ACE] R-77 [ACE] + R-77 [ACE] 1x R-77 [ACE] 1x R-77 [ACE] + 1x R-77 [ACE] diff --git a/addons/missile_aim9/stringtable.xml b/addons/missile_aim9/stringtable.xml index 5261674153d..f8728e453c3 100644 --- a/addons/missile_aim9/stringtable.xml +++ b/addons/missile_aim9/stringtable.xml @@ -3,48 +3,63 @@ AIM-9M [ACE] + AIM-9M [ACE] AIM-9X [ACE] + AIM-9X [ACE] AIM-132 [ACE] + AIM-132 [ACE] R-73 [ACE] + R-73 [ACE] R-74 [ACE] + R-74 [ACE] 1x AIM-9M [ACE] + 1x AIM-9M [ACE] 2x AIM-9M [ACE] + 2x AIM-9M [ACE] 1x AIM-9X [ACE] + 1x AIM-9X [ACE] 2x AIM-9X [ACE] + 2x AIM-9X [ACE] 1x AIM-132 [ACE] + 1x AIM-132 [ACE] 2x AIM-132 [ACE] + 2x AIM-132 [ACE] 4x AIM-132 [ACE] + 4x AIM-132 [ACE] 1x R-73 [ACE] + 1x R-73 [ACE] 1x R-74 [ACE] + 1x R-74 [ACE] 2x R-74 [ACE] + 2x R-74 [ACE] diff --git a/addons/missile_manpad/stringtable.xml b/addons/missile_manpad/stringtable.xml index 260bfd4f1f7..1669273d2a2 100644 --- a/addons/missile_manpad/stringtable.xml +++ b/addons/missile_manpad/stringtable.xml @@ -3,15 +3,19 @@ FIM-92 Stinger [ACE] + FIM-92 スティンガー [ACE] RIM-116 [ACE] + RIM-116 [ACE] 21x RIM-116 [ACE] + 21x RIM-116 [ACE] 4x FIM-92 Stinger [ACE] + 4x FIM-92 スティンガー [ACE] diff --git a/addons/missile_sam/stringtable.xml b/addons/missile_sam/stringtable.xml index 86e13ec487d..904c9673453 100644 --- a/addons/missile_sam/stringtable.xml +++ b/addons/missile_sam/stringtable.xml @@ -4,38 +4,47 @@ Mk-29 ESSM Mk-29 ESSM + Mk-29 ESSM RIM-162 ESSM RIM-162 ESSM + RIM-162 ESSM Mk-29 Operator Mk-29 Operator + Mk-29 操作員 MIM-104 Patriot MIM-104 Patriot + MIM-104 ペトリオット Patriot Missile Patriot Missile + ペトリオット ミサイル MIM-104 Operator MIM-104 Operator + MIM-104 操作員 S-400 S-400 + S-400 S-400 Missile S-400 Missile + S-400 ミサイル S-400 Operator S-400 Operator + S-400 操作員 From 4173c81d7ca72b6530814d46c6b31a8968f15c3e Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Fri, 20 Dec 2024 07:55:21 -0600 Subject: [PATCH 20/35] Compat RF - Fix UBC (#10581) --- addons/compat_rf/compat_rf_realisticnames/CfgVehicles.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/compat_rf/compat_rf_realisticnames/CfgVehicles.hpp b/addons/compat_rf/compat_rf_realisticnames/CfgVehicles.hpp index 32e2a742a5a..3269b267858 100644 --- a/addons/compat_rf/compat_rf_realisticnames/CfgVehicles.hpp +++ b/addons/compat_rf/compat_rf_realisticnames/CfgVehicles.hpp @@ -97,7 +97,7 @@ class CfgVehicles { class Pickup_comms_base_rf: Pickup_service_base_rf { displayName = SUBCSTRING(pickup_01_comms_Name); }; - class Pickup_repair_ig_base_rf: Pickup_repair_base_rf { + class Pickup_repair_ig_base_rf: Pickup_service_base_old_rf { displayName = SUBCSTRING(pickup_01_repair_Name); }; class Pickup_covered_base_rf: Pickup_service_base_rf { From d28a5bd7f1f0343fa50d0424b7779cbcf9ea69bc Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Fri, 20 Dec 2024 07:55:31 -0600 Subject: [PATCH 21/35] Missile Guidance - Fix duplicate `prep` (#10580) --- addons/missileguidance/XEH_PREP.hpp | 1 - 1 file changed, 1 deletion(-) diff --git a/addons/missileguidance/XEH_PREP.hpp b/addons/missileguidance/XEH_PREP.hpp index 2fc1aa8394e..afdaba260a0 100644 --- a/addons/missileguidance/XEH_PREP.hpp +++ b/addons/missileguidance/XEH_PREP.hpp @@ -60,7 +60,6 @@ PREP(mwr_onFired); PREP(IR_onFired); // Navigation OnFired -PREP(navigationType_lineOfSight); PREP(proNav_onFired); PREP(line_onFired); From 1bbdff6dbd20010fd02d2be491ec64c8e8f667a1 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Fri, 20 Dec 2024 07:58:04 -0600 Subject: [PATCH 22/35] Medical Engine - Optimzie `INSTAKILL_ALLOWED` macro (#10578) --- .hemtt/lints.toml | 3 +++ addons/medical_engine/functions/fnc_handleDamage.sqf | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.hemtt/lints.toml b/.hemtt/lints.toml index f77ab4358b1..1faf5157242 100644 --- a/.hemtt/lints.toml +++ b/.hemtt/lints.toml @@ -1,3 +1,6 @@ +[config.file_type] +options.allow_no_extension = true + [sqf.banned_commands] options.ignore = [ "addPublicVariableEventHandler", # Alt syntax is broken, we are using main syntax diff --git a/addons/medical_engine/functions/fnc_handleDamage.sqf b/addons/medical_engine/functions/fnc_handleDamage.sqf index 7a037bd979e..a338efcf009 100644 --- a/addons/medical_engine/functions/fnc_handleDamage.sqf +++ b/addons/medical_engine/functions/fnc_handleDamage.sqf @@ -14,7 +14,7 @@ * Public: No */ -#define INSTAKILL_BLOCKED(unit) (unit isEqualTo (unit getVariable [QGVAR(blockInstaKill), objNull])) +#define INSTAKILL_ALLOWED(unit) (unit isNotEqualTo (unit getVariable [QGVAR(blockInstaKill), objNull])) params ["_unit", "_selection", "_damage", "_shooter", "_ammo", "_hitPointIndex", "_instigator", "_hitpoint", "_directHit", "_context"]; @@ -40,7 +40,7 @@ if !(isDamageAllowed _unit && {_unit getVariable [QEGVAR(medical,allowDamage), t // TODO: Structural fire damage >= 1 in a single damage event could still be caught here and we don't want that, but we haven't found a better way to catch this, fire damage should be small most of the time anyway // Also triggers for catastrophic vehicle explosions which would kill crew outright, check for blocking private _newDamage = _damage - _oldDamage; -if (_structuralDamage && {(abs (_newDamage - 1)) < 0.001 && _ammo == "" && isNull _shooter && isNull _instigator} && {!INSTAKILL_BLOCKED(_unit)}) exitWith { +if (_structuralDamage && {(abs (_newDamage - 1)) < 0.001 && _ammo == "" && isNull _shooter && isNull _instigator} && {INSTAKILL_ALLOWED(_unit)}) exitWith { TRACE_1("unit killed by curator or engine",_unit); _damage @@ -52,7 +52,7 @@ if (_structuralDamage && {(abs (_newDamage - 1)) < 0.001 && _ammo == "" && isNul if (_context != 2 && {_context == 4 || _newDamage == 0}) exitWith { TRACE_4("Skipping engine bleeding or zero damage, blocking insta kills until next frame",_ammo,_newDamage,_directHit,_context); - if (!INSTAKILL_BLOCKED(_unit)) then { + if (INSTAKILL_ALLOWED(_unit)) then { _unit setVariable [QGVAR(blockInstaKill), _unit]; [{_this setVariable [QGVAR(blockInstaKill), nil]}, _unit] call CBA_fnc_execNextFrame; }; From 1180be3cdb1d5b92425bb4a8a1216bde51817968 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Fri, 20 Dec 2024 16:17:33 -0600 Subject: [PATCH 23/35] Medical Treatment - Add setting for trained medics to use their own items first (#10583) --- addons/medical_treatment/functions/fnc_tourniquetRemove.sqf | 4 +++- addons/medical_treatment/functions/fnc_useItem.sqf | 4 +++- addons/medical_treatment/initSettings.inc.sqf | 2 +- addons/medical_treatment/stringtable.xml | 3 +++ 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/addons/medical_treatment/functions/fnc_tourniquetRemove.sqf b/addons/medical_treatment/functions/fnc_tourniquetRemove.sqf index 80dab5094cf..627d7ecd534 100644 --- a/addons/medical_treatment/functions/fnc_tourniquetRemove.sqf +++ b/addons/medical_treatment/functions/fnc_tourniquetRemove.sqf @@ -42,7 +42,9 @@ TRACE_1("clearConditionCaches: tourniquetRemove",_nearPlayers); // Add tourniquet item to medic or patient if (_medic call EFUNC(common,isPlayer)) then { - private _receiver = [_patient, _medic, _medic] select GVAR(allowSharedEquipment); + private _allowSharedEquipment = GVAR(allowSharedEquipment); + if (_allowSharedEquipment == 3) then { _allowSharedEquipment = [0, 1] select ([_medic] call FUNC(isMedic)) }; + private _receiver = [_patient, _medic, _medic] select _allowSharedEquipment; [_receiver, "ACE_tourniquet"] call EFUNC(common,addToInventory); } else { // If the medic is AI, only return tourniquet if enabled diff --git a/addons/medical_treatment/functions/fnc_useItem.sqf b/addons/medical_treatment/functions/fnc_useItem.sqf index 2a8583d1533..7f9299872c9 100644 --- a/addons/medical_treatment/functions/fnc_useItem.sqf +++ b/addons/medical_treatment/functions/fnc_useItem.sqf @@ -26,7 +26,9 @@ if (_medic isEqualTo player && {!isNull findDisplay 312}) exitWith { scopeName "Main"; -private _useOrder = [[_patient, _medic], [_medic, _patient], [_medic]] select GVAR(allowSharedEquipment); +private _allowSharedEquipment = GVAR(allowSharedEquipment); +if (_allowSharedEquipment == 3) then { _allowSharedEquipment = [0, 1] select ([_medic] call FUNC(isMedic)) }; +private _useOrder = [[_patient, _medic], [_medic, _patient], [_medic]] select _allowSharedEquipment; { private _unit = _x; diff --git a/addons/medical_treatment/initSettings.inc.sqf b/addons/medical_treatment/initSettings.inc.sqf index 3f30f514faa..b5297e7f34b 100644 --- a/addons/medical_treatment/initSettings.inc.sqf +++ b/addons/medical_treatment/initSettings.inc.sqf @@ -85,7 +85,7 @@ "LIST", [LSTRING(AllowSharedEquipment_DisplayName), LSTRING(AllowSharedEquipment_Description)], LSTRING(Category), - [[0, 1, 2], [LSTRING(AllowSharedEquipment_PriorityPatient), LSTRING(AllowSharedEquipment_PriorityMedic), ELSTRING(common,No)], 0], + [[0, 1, 3, 2], [LSTRING(AllowSharedEquipment_PriorityPatient), LSTRING(AllowSharedEquipment_PriorityMedic), LSTRING(AllowSharedEquipment_PriorityMedicIfMedic), ELSTRING(common,No)], 0], true ] call CBA_fnc_addSetting; diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml index af49f176816..61513ccbd7c 100644 --- a/addons/medical_treatment/stringtable.xml +++ b/addons/medical_treatment/stringtable.xml @@ -971,6 +971,9 @@ 优先消耗医疗兵装备 İlk Sıhhiyenin Ekipmanı + + Medic's Equipment First [If medic role] + Patient's Equipment First Prvně pacientovo vybavení From 5285ec4585ab6754993bc5c5f10c5a71e15c9673 Mon Sep 17 00:00:00 2001 From: V1nsyara Date: Sun, 22 Dec 2024 02:07:07 +0300 Subject: [PATCH 24/35] Translations - Improve Russian (#10588) Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> --- addons/common/stringtable.xml | 2 ++ addons/field_rations/stringtable.xml | 2 ++ addons/goggles/stringtable.xml | 1 + addons/hearing/stringtable.xml | 8 ++++++++ addons/interaction/stringtable.xml | 3 +++ addons/medical_treatment/stringtable.xml | 1 + addons/missile_aim120/stringtable.xml | 13 +++++++++++++ addons/missile_aim9/stringtable.xml | 15 +++++++++++++++ addons/missile_manpad/stringtable.xml | 4 ++++ addons/missile_sam/stringtable.xml | 9 +++++++++ 10 files changed, 58 insertions(+) diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index 399528c638f..a3bcb4c4a0a 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -1797,11 +1797,13 @@ Realistic Compass Declination Déclinaison réaliste de la boussole 現実的なコンパス偏角 + Реалистичный компасса Compass will point to magnetic north La boussole indique le nord magnétique コンパスが磁北を指すようになります + Компас будет указывать на северный магнитный полюс Players only diff --git a/addons/field_rations/stringtable.xml b/addons/field_rations/stringtable.xml index 0f8531653c2..55e2d182be9 100644 --- a/addons/field_rations/stringtable.xml +++ b/addons/field_rations/stringtable.xml @@ -1287,12 +1287,14 @@ 有効化すると、空腹と渇きはZeusインタフェイスを開いている間も継続して進行します。 활성화 시 제우스 인터페이스가 열려 있는 동안 허기와 갈증이 계속 증가합니다. Si cette option est activée, la faim et la soif continueront d'augmenter tant que l'interface Zeus sera ouverte. + Если эта функция включена, чувство голода и жажды будет продолжать усиливаться, пока открыт интерфейс Zeus. Update Hunger and Thirst in Zeus Zeus時に空腹と渇きを進行させる 제우스의 허기와 갈증 업데이트 Mise à jour Faim et soif dans Zeus + Обновление голода и жажды в Zeus diff --git a/addons/goggles/stringtable.xml b/addons/goggles/stringtable.xml index f364e2ec448..fa39687d65e 100644 --- a/addons/goggles/stringtable.xml +++ b/addons/goggles/stringtable.xml @@ -22,6 +22,7 @@ ゴーグルのオーバーレイを表示する 고글 오버레이 표시 Afficher la superposition des lunettes + Показать оверлей очков Show Wipe Goggles self interaction diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index c84634c3af5..5ef75acb6d0 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -137,31 +137,37 @@ Electronic Hearing Protection taken off Elektronischer Gehörschutz abgesetzt 電子聴覚保護具を外しました + Электронная защита слуха снята Electronic Hearing Protection put on Elektronischer Gehörschutz aufgesetzt 電子聴覚保護具を装着しました + Электронная защита слуха надета Electronic Hearing Protection protects the wearer from hearing damage without reducing situational awareness. Elektronischer Gehörschutz schützt den Träger vor Hörschäden, ohne dass sein Situationsbewusstsein eingeschränkt wird. 電子聴覚保護具は状況認識力を低下させることなく、装着者の聴覚障害を防ぐことができる。 + Электронная защита органов слуха защищает пользователя от повреждения слуха, не снижая при этом его осведомленности о ситуации. Electronic Hearing Protection Elektronischer Gehörschutz 電子聴覚保護具 + Электронная защита слуха Take off Electronic Hearing Protection Elektronischen Gehörschutz absetzen 電子聴覚保護具を外す + Снять электронную защиту слуха Put on Electronic Hearing Protection Elektronischen Gehörschutz aufsetzen 電子聴覚保護具を装着 + Надеть электронную защиту слуха Reduces the hearing ability as the player takes hearing damage @@ -247,6 +253,7 @@ Put on/take off Electronic Hearing Protection Elektronischer Gehörschutz aufsetzen/absetzen 電子聴覚保護具の着脱 + Надеть/снять электронную защиту слуха Put/take out earplugs @@ -407,6 +414,7 @@ ELECTRONIC 電子聴覚保護 + ЭЛЕКТРОННЫЙ Volume when unconscious. diff --git a/addons/interaction/stringtable.xml b/addons/interaction/stringtable.xml index 305179055c1..be3543e48ad 100644 --- a/addons/interaction/stringtable.xml +++ b/addons/interaction/stringtable.xml @@ -855,6 +855,7 @@ 手榴弾を渡す 수류탄 건네주기 Donner une grenade + Передать гранаты %1 passed you %2. @@ -862,6 +863,7 @@ %1 は あなたに %2 を渡した。 %1 님이 %2을(를) 건네주었습니다. %1 vous a donné %2 + %1 передал вам %2. Show "pass grenade" interaction @@ -869,6 +871,7 @@ "手榴弾を渡す"をインタラクションに表示 "수류탄 건네주기" 상호작용 표시 Afficher l'interaction « Donner une grenade » + Показывать действие "передать гранату" Passengers diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml index 61513ccbd7c..51e32705dab 100644 --- a/addons/medical_treatment/stringtable.xml +++ b/addons/medical_treatment/stringtable.xml @@ -973,6 +973,7 @@ Medic's Equipment First [If medic role] + Сначала медикаменты врача [Если медик] Patient's Equipment First diff --git a/addons/missile_aim120/stringtable.xml b/addons/missile_aim120/stringtable.xml index dd8f58d4fa9..b04d3a19446 100644 --- a/addons/missile_aim120/stringtable.xml +++ b/addons/missile_aim120/stringtable.xml @@ -5,66 +5,79 @@ AIM-120A [ACE] AIM-120A [ACE] AIM-120A [ACE] + AIM-120A [ACE] 1x AIM-120A [ACE] 1x AIM-120A [ACE] 1x AIM-120A [ACE] + 1x AIM-120A [ACE] AIM-120 [ACE] AIM-120 [ACE] AIM-120 [ACE] + AIM-120 [ACE] AIM-120C [ACE] AIM-120C [ACE] AIM-120C [ACE] + AIM-120C [ACE] 1x AIM-120C [ACE] 1x AIM-120C [ACE] 1x AIM-120C [ACE] + 1x AIM-120C [ACE] 2x AIM-120C [ACE] 2x AIM-120C [ACE] 2x AIM-120C [ACE] + 2x AIM-120C [ACE] AIM-120D [ACE] AIM-120D [ACE] AIM-120D [ACE] + AIM-120D [ACE] 1x AIM-120D [ACE] 1x AIM-120D [ACE] 1x AIM-120D [ACE] + 1x AIM-120D [ACE] 2x AIM-120D [ACE] 2x AIM-120D [ACE] 2x AIM-120D [ACE] + 2x AIM-120D [ACE] Direct Direct ダイレクト + Прямой Loft Loft ロフト + Сверху R-77 [ACE] R-77 [ACE] R-77 [ACE] + R-77 [ACE] 1x R-77 [ACE] 1x R-77 [ACE] 1x R-77 [ACE] + 1x R-77 [ACE] diff --git a/addons/missile_aim9/stringtable.xml b/addons/missile_aim9/stringtable.xml index f8728e453c3..0c681d9b17a 100644 --- a/addons/missile_aim9/stringtable.xml +++ b/addons/missile_aim9/stringtable.xml @@ -4,62 +4,77 @@ AIM-9M [ACE] AIM-9M [ACE] + AIM-9M [ACE] AIM-9X [ACE] AIM-9X [ACE] + AIM-9X [ACE] AIM-132 [ACE] AIM-132 [ACE] + AIM-132 [ACE] R-73 [ACE] R-73 [ACE] + R-73 [ACE] R-74 [ACE] R-74 [ACE] + R-74 [ACE] 1x AIM-9M [ACE] 1x AIM-9M [ACE] + 1x AIM-9M [ACE] 2x AIM-9M [ACE] 2x AIM-9M [ACE] + 2x AIM-9M [ACE] 1x AIM-9X [ACE] 1x AIM-9X [ACE] + 1x AIM-9X [ACE] 2x AIM-9X [ACE] 2x AIM-9X [ACE] + 2x AIM-9X [ACE] 1x AIM-132 [ACE] 1x AIM-132 [ACE] + 1x AIM-132 [ACE] 2x AIM-132 [ACE] 2x AIM-132 [ACE] + 2x AIM-132 [ACE] 4x AIM-132 [ACE] 4x AIM-132 [ACE] + 4x AIM-132 [ACE] 1x R-73 [ACE] 1x R-73 [ACE] + 1x R-73 [ACE] 1x R-74 [ACE] 1x R-74 [ACE] + 1x R-74 [ACE] 2x R-74 [ACE] 2x R-74 [ACE] + 2x R-74 [ACE] diff --git a/addons/missile_manpad/stringtable.xml b/addons/missile_manpad/stringtable.xml index 1669273d2a2..b3b63655367 100644 --- a/addons/missile_manpad/stringtable.xml +++ b/addons/missile_manpad/stringtable.xml @@ -4,18 +4,22 @@ FIM-92 Stinger [ACE] FIM-92 スティンガー [ACE] + FIM-92 Stinger [ACE] RIM-116 [ACE] RIM-116 [ACE] + RIM-116 [ACE] 21x RIM-116 [ACE] 21x RIM-116 [ACE] + 21x RIM-116 [ACE] 4x FIM-92 Stinger [ACE] 4x FIM-92 スティンガー [ACE] + 4x FIM-92 Stinger [ACE] diff --git a/addons/missile_sam/stringtable.xml b/addons/missile_sam/stringtable.xml index 904c9673453..9a07d7adc16 100644 --- a/addons/missile_sam/stringtable.xml +++ b/addons/missile_sam/stringtable.xml @@ -5,46 +5,55 @@ Mk-29 ESSM Mk-29 ESSM Mk-29 ESSM + Mk-29 ESSM RIM-162 ESSM RIM-162 ESSM RIM-162 ESSM + RIM-162 ESSM Mk-29 Operator Mk-29 Operator Mk-29 操作員 + Mk-29 Operator MIM-104 Patriot MIM-104 Patriot MIM-104 ペトリオット + MIM-104 Patriot Patriot Missile Patriot Missile ペトリオット ミサイル + Patriot Missile MIM-104 Operator MIM-104 Operator MIM-104 操作員 + MIM-104 Operator S-400 S-400 S-400 + S-400 S-400 Missile S-400 Missile S-400 ミサイル + S-400 Missile S-400 Operator S-400 Operator S-400 操作員 + S-400 Operator From 671aa5163f0f0cd2b8e7fba127b0fec93c4958b7 Mon Sep 17 00:00:00 2001 From: Grim <69561145+LinkIsGrim@users.noreply.github.com> Date: Sun, 22 Dec 2024 21:02:07 -0300 Subject: [PATCH 25/35] Ballistics - Improve arsenal muzzle velocity stat (#10594) --- ...atTextStatement_magazineMuzzleVelocity.sqf | 50 ++++------------ ...statTextStatement_weaponMuzzleVelocity.sqf | 57 +++++++++---------- addons/ballistics/script_component.hpp | 2 + 3 files changed, 39 insertions(+), 70 deletions(-) diff --git a/addons/ballistics/functions/fnc_statTextStatement_magazineMuzzleVelocity.sqf b/addons/ballistics/functions/fnc_statTextStatement_magazineMuzzleVelocity.sqf index a57a52bba7c..994a667eb2f 100644 --- a/addons/ballistics/functions/fnc_statTextStatement_magazineMuzzleVelocity.sqf +++ b/addons/ballistics/functions/fnc_statTextStatement_magazineMuzzleVelocity.sqf @@ -4,7 +4,7 @@ * Text statement for the magazine ammo muzzle velocity stat. * * Arguments: - * 0: Type what it is here (unused) + * 0: Stats (unused) * 1: Item config path * * Return Value: @@ -13,47 +13,17 @@ * Public: No */ -params ["", "_configMagazine"]; +params ["_stats", "_configMagazine"]; -if (EGVAR(arsenal,currentLeftPanel) == 2002) then { - private _primaryMag = primaryWeaponMagazine EGVAR(arsenal,center); - [primaryWeapon EGVAR(arsenal,center), _primaryMag param [0, ""]] -} else { - private _primaryMag = handgunMagazine EGVAR(arsenal,center); - [handgunWeapon EGVAR(arsenal,center), _primaryMag param [0, ""]] -} params ["_weapon", "_magazine"]; +private _magClass = configName _configMagazine; +private _weapons = [primaryWeapon EGVAR(arsenal,center), handgunWeapon EGVAR(arsenal,center)]; +private _weaponIndex = _weapons findIf {_x canAdd [_magClass, _x]}; -// we might be looking at random mags not related to our weapon -private _magIsForCurrentWeapon = (configName _configMagazine == _magazine) && {_weapon != ""}; -private _configWeapon = configNull; +// Defer to weapon stat if mag fits in the primary muzzle of an equipped weapon (except launchers) +if (_weaponIndex != -1) exitWith { + [_stats, configFile >> "CfgWeapons" >> _weapons select _weaponIndex, _configMagazine] call FUNC(statTextStatement_weaponMuzzleVelocity); +}; private _muzzleVelocity = getNumber (_configMagazine >> "initSpeed"); -private _initSpeedCoef = 0; -if (_magIsForCurrentWeapon) then { - _configWeapon = configFile >> "CfgWeapons" >> _weapon; - _initSpeedCoef = getNumber (_configWeapon >> "initSpeed"); -}; -if (_initSpeedCoef < 0) then { - _muzzleVelocity = _muzzleVelocity * -_initSpeedCoef; -}; -if (_initSpeedCoef > 0) then { - _muzzleVelocity = _initSpeedCoef; -}; -private _abAdjustText = ""; -if ( - _magIsForCurrentWeapon && - {missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]} && - {missionNamespace getVariable [QEGVAR(advanced_ballistics,barrelLengthInfluenceEnabled), false]} // this can be on while AB is off or vice-versa -) then { - private _configAmmo = (configFile >> "CfgAmmo" >> (getText (_configMagazine >> "ammo"))); - private _barrelLength = getNumber (_configWeapon >> "ACE_barrelLength"); - private _muzzleVelocityTable = getArray (_configAmmo >> "ACE_muzzleVelocities"); - private _barrelLengthTable = getArray (_configAmmo >> "ACE_barrelLengths"); - private _abShift = [_barrelLength, _muzzleVelocityTable, _barrelLengthTable, 0] call EFUNC(advanced_ballistics,calculateBarrelLengthVelocityShift); - if (_abShift != 0) then { - _abAdjustText = " [AB]"; - _muzzleVelocity = _abShift; - }; -}; -format ["%1 m/s (%2 ft/s)%3", _muzzleVelocity toFixed 0, (_muzzleVelocity * 3.28084) toFixed 0, _abAdjustText] +format ["%1 m/s (%2 ft/s)", _muzzleVelocity toFixed 0, (_muzzleVelocity * METERS_TO_FEET_MULT) toFixed 0] diff --git a/addons/ballistics/functions/fnc_statTextStatement_weaponMuzzleVelocity.sqf b/addons/ballistics/functions/fnc_statTextStatement_weaponMuzzleVelocity.sqf index e11c7cf5fb6..03123f14d08 100644 --- a/addons/ballistics/functions/fnc_statTextStatement_weaponMuzzleVelocity.sqf +++ b/addons/ballistics/functions/fnc_statTextStatement_weaponMuzzleVelocity.sqf @@ -4,8 +4,9 @@ * Text statement for the weapon muzzle velocity stat. * * Arguments: - * 0: Type what it is here (unused) - * 1: Item config path + * 0: Stats (unused) + * 1: Weapon config path + * 2: Magazine config path (default: configNull) * * Return Value: * Display text @@ -13,21 +14,32 @@ * Public: No */ -params ["", "_configWeapon"]; +params ["", "_configWeapon", ["_configMagazine", configNull]]; -if (EGVAR(arsenal,currentLeftPanel) == 2002) then { - private _primaryMag = primaryWeaponMagazine EGVAR(arsenal,center); - [primaryWeapon EGVAR(arsenal,center), _primaryMag param [0, ""]] -} else { - private _primaryMag = handgunMagazine EGVAR(arsenal,center); - [handgunWeapon EGVAR(arsenal,center), _primaryMag param [0, ""]] -} params ["_weapon", "_magazine"]; +if (isNull _configMagazine) then { // Get the current weapon's mag + _configMagazine = configFile >> "CfgMagazines" >> (weaponState EGVAR(arsenal,center)) select 3;; +}; -if (_magazine isEqualTo "") then { +if (isNull _configMagazine) exitWith { // Nothing in the magwell localize "str_empty"; +}; + +private _muzzleVelocity = getNumber (_configMagazine >> "initSpeed"); + +private _abAdjustText = ""; +private _useAB = missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false] && {EGVAR(advanced_ballistics,barrelLengthInfluenceEnabled)}; + +if (_useAB) then { + private _configAmmo = configFile >> "CfgAmmo" >> (getText (_configMagazine >> "ammo")); + private _barrelLength = getNumber (_configWeapon >> "ACE_barrelLength"); + private _muzzleVelocityTable = getArray (_configAmmo >> "ACE_muzzleVelocities"); + private _barrelLengthTable = getArray (_configAmmo >> "ACE_barrelLengths"); + private _abShift = [_barrelLength, _muzzleVelocityTable, _barrelLengthTable, 0] call EFUNC(advanced_ballistics,calculateBarrelLengthVelocityShift); + if (_abShift != 0) then { + _abAdjustText = " [AB]"; + _muzzleVelocity = _abShift; + }; } else { - private _configMagazine = configFile >> "CfgMagazines" >> _magazine; - private _muzzleVelocity = getNumber (_configMagazine >> "initSpeed"); private _initSpeedCoef = getNumber (_configWeapon >> "initSpeed"); if (_initSpeedCoef < 0) then { _muzzleVelocity = _muzzleVelocity * -_initSpeedCoef; @@ -35,21 +47,6 @@ if (_magazine isEqualTo "") then { if (_initSpeedCoef > 0) then { _muzzleVelocity = _initSpeedCoef; }; - - private _abAdjustText = ""; - if ( - missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false] && - {missionNamespace getVariable [QEGVAR(advanced_ballistics,barrelLengthInfluenceEnabled), false]} // this can be on while AB is off or vice-versa - ) then { - private _configAmmo = (configFile >> "CfgAmmo" >> (getText (_configMagazine >> "ammo"))); - private _barrelLength = getNumber (_configWeapon >> "ACE_barrelLength"); - private _muzzleVelocityTable = getArray (_configAmmo >> "ACE_muzzleVelocities"); - private _barrelLengthTable = getArray (_configAmmo >> "ACE_barrelLengths"); - private _abShift = [_barrelLength, _muzzleVelocityTable, _barrelLengthTable, 0] call EFUNC(advanced_ballistics,calculateBarrelLengthVelocityShift); - if (_abShift != 0) then { - _abAdjustText = " [AB]"; - _muzzleVelocity = _abShift; - }; - }; - format ["%1 m/s (%2 ft/s)%3", _muzzleVelocity toFixed 0, (_muzzleVelocity * 3.28084) toFixed 0, _abAdjustText] }; + +format ["%1 m/s (%2 ft/s)%3", _muzzleVelocity toFixed 0, (_muzzleVelocity * METERS_TO_FEET_MULT) toFixed 0, _abAdjustText] diff --git a/addons/ballistics/script_component.hpp b/addons/ballistics/script_component.hpp index a1b54b53b48..8cb4be327b0 100644 --- a/addons/ballistics/script_component.hpp +++ b/addons/ballistics/script_component.hpp @@ -15,3 +15,5 @@ #endif #include "\z\ace\addons\main\script_macros.hpp" + +#define METERS_TO_FEET_MULT 3.28084 From 46ddfc7e15e62f414531a2c6db22352fed2d6984 Mon Sep 17 00:00:00 2001 From: Psycool <104776717+Psycool3695@users.noreply.github.com> Date: Mon, 23 Dec 2024 09:02:16 +0900 Subject: [PATCH 26/35] Translations - Korean (#10593) Co-authored-by: PabstMirror --- addons/common/stringtable.xml | 2 ++ .../compat_ef_realisticnames/stringtable.xml | 6 +++--- .../compat_rf_realisticnames/stringtable.xml | 5 +++++ .../compat_ws_realisticnames/stringtable.xml | 10 ++++++++++ addons/field_rations/stringtable.xml | 2 +- addons/fieldmanual/stringtable.xml | 2 ++ addons/flashsuppressors/stringtable.xml | 4 ++-- addons/gunbag/stringtable.xml | 2 +- addons/hearing/stringtable.xml | 12 ++++++++++-- addons/laserpointer/stringtable.xml | 2 +- addons/medical_treatment/stringtable.xml | 3 ++- addons/microdagr/stringtable.xml | 2 +- addons/missile_aim120/stringtable.xml | 13 +++++++++++++ addons/missile_aim9/stringtable.xml | 15 +++++++++++++++ addons/missile_gbu/stringtable.xml | 8 ++++---- addons/missile_manpad/stringtable.xml | 4 ++++ addons/missile_sam/stringtable.xml | 9 +++++++++ addons/pylons/stringtable.xml | 2 +- addons/ui/stringtable.xml | 2 +- addons/vehicles/stringtable.xml | 2 +- addons/weaponselect/stringtable.xml | 2 +- addons/zeus/stringtable.xml | 12 ++++++------ 22 files changed, 95 insertions(+), 26 deletions(-) diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index a3bcb4c4a0a..0a2593e70bc 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -1798,12 +1798,14 @@ Déclinaison réaliste de la boussole 現実的なコンパス偏角 Реалистичный компасса + 현실적인 나침반 편각 Compass will point to magnetic north La boussole indique le nord magnétique コンパスが磁北を指すようになります Компас будет указывать на северный магнитный полюс + 나침반이 자북을 가리키게 됩니다. Players only diff --git a/addons/compat_ef/compat_ef_realisticnames/stringtable.xml b/addons/compat_ef/compat_ef_realisticnames/stringtable.xml index 3dead3055be..bfe5912f9b3 100644 --- a/addons/compat_ef/compat_ef_realisticnames/stringtable.xml +++ b/addons/compat_ef/compat_ef_realisticnames/stringtable.xml @@ -11,7 +11,7 @@ M-ATV AT M-ATV ПТ M-ATV AT - M-ATV AT + M-ATV (대전차) M-ATV AT 防地雷反伏擊全地形車 AT M-ATV AT @@ -28,7 +28,7 @@ M-ATV FSV M-ATV FSV M-ATV FSV - M-ATV FSV + M-ATV (화력지원) M-ATV FSV 防地雷反伏擊全地形車 FSV M-ATV FSV @@ -45,7 +45,7 @@ M-ATV LAAD M-ATV LAAD M-ATV LAAD - M-ATV LAAD + M-ATV (저고도 대공 방어) M-ATV LAAD 防地雷反伏擊全地形車 LAAD M-ATV LAAD diff --git a/addons/compat_rf/compat_rf_realisticnames/stringtable.xml b/addons/compat_rf/compat_rf_realisticnames/stringtable.xml index a66ed12ef28..b51cfecd9df 100644 --- a/addons/compat_rf/compat_rf_realisticnames/stringtable.xml +++ b/addons/compat_rf/compat_rf_realisticnames/stringtable.xml @@ -139,6 +139,7 @@ Desert Eagle Mark XIX L5 (Camo) デザートイーグル Mark XIX L5 (迷彩) + 데저트 이글 마크 XIX L5 (위장) Desert Eagle Mark XIX L5 (Classic) @@ -548,6 +549,7 @@ Ram 1500 (Minigun) ラム 1500 (ミニガン) + 램 1500 (미니건) Ram 1500 (MMG) @@ -570,10 +572,12 @@ Ram 1500 (RCWS) ラム 1500 (RCWS) + 램 1500 (무인포탑) Ram 1500 (Rocket) ラム 1500 (ロケット) + 램 1500 (로켓) Ram 1500 (Repair) @@ -699,6 +703,7 @@ Typhoon Cargo タイフーン 貨物 + 타이푼 화물 Typhoon Water diff --git a/addons/compat_ws/compat_ws_realisticnames/stringtable.xml b/addons/compat_ws/compat_ws_realisticnames/stringtable.xml index 53065e706a0..bc4e365a588 100644 --- a/addons/compat_ws/compat_ws_realisticnames/stringtable.xml +++ b/addons/compat_ws/compat_ws_realisticnames/stringtable.xml @@ -355,10 +355,12 @@ XMS GL (Camo) XMS GL (迷彩) + XMS GL (위장) XMS GL (Gray) XMS GL (グレー) + XMS GL (회색) XMS GL (Sand) @@ -399,10 +401,12 @@ XMS (Camo) XMS (迷彩) + XMS (위장) XMS (Gray) XMS (グレー) + XMS (회색) XMS SG (Khaki) @@ -431,10 +435,12 @@ XMS SG (Camo) XMS SG (迷彩) + XMS SG (위장) XMS SG (Gray) XMS SG (グレー) + XMS SG (회색) XMS SG (Sand) @@ -475,10 +481,12 @@ XMS SW (Camo) XMS SW (迷彩) + XMS SW (위장) XMS SW (Gray) XMS SW (グレー) + XMS SW (회색) XMS SW (Sand) @@ -561,10 +569,12 @@ C-More Railway (Red, Camo) C-More レイルウェイ (レッド、迷彩) + 씨모어 레일웨이 (빨강/위장) C-More Railway (Green, Camo) C-More レイルウェイ (グリーン、迷彩) + 씨모어 레일웨이 (초록/위장) ELCAN SpecterOS (Hex) diff --git a/addons/field_rations/stringtable.xml b/addons/field_rations/stringtable.xml index 55e2d182be9..b8aaed35196 100644 --- a/addons/field_rations/stringtable.xml +++ b/addons/field_rations/stringtable.xml @@ -57,7 +57,7 @@ Bebida refrescante de sabor laranja, com um sabor frutado e formigante. Напиток с апельсиновым вкусом Ein nach Orange schmeckender Softdrink mit einem prickelndem und fruchtigem Geschmack - 오렌지 향의 톡쏘는 탄산음료 + 오렌지향의 톡 쏘는 탄산음료 口いっぱいに果物を感じるオレンジ風味のソフトドリンク 有著微微的橘子水果味的汽水 橙子味汽水,有刺鼻的水果味 diff --git a/addons/fieldmanual/stringtable.xml b/addons/fieldmanual/stringtable.xml index 5cb9a302a6e..b77b0665f50 100644 --- a/addons/fieldmanual/stringtable.xml +++ b/addons/fieldmanual/stringtable.xml @@ -288,10 +288,12 @@ %3Electronic Hearing Protection (EHP)%4 helps prevent hearing damage from repeat loud noises near a soldier. Differently from %3Ear Plugs%4, volume is only reduced when necessary. %3EHP%4 can also be built-in to certain types of %3Headgear%4 and %3Facewear%4.<br/><br/>%3Usage:%4<br/>%2Use [%3%12%4] and select %3Equipment%4.<br/>%2Put on Electronic Hearing Protection%4. %3電子聴覚保護装置%4は、兵士の近くで繰り返される大きな騒音による聴覚障害を防ぐのに役立ちます。%3耳栓%4とは異なり、音量は必要な場合にのみ下げられます。 %3電子聴覚保護装置%4は、特定の種類の%3ヘッドギア%4および%3フェイスウェア%4に組み込まれていることがあります。<br/><br/>%3使用方法:%4<br/>%2[%3%12%4] を使って%3装備%4を選択します。<br/>%2電子聴覚保護装置を装着%4することで使用できます。 + %3전자 청력 보호구 (EHP)%4는 병사 근처에서 큰 소음이 반복되는 것으로 인한 청력 손상을 예방하는 데 도움을 줍니다. %3귀마개%4와는 달리 음량은 필요할 때만 줄어듭니다. %3EHP%4는 특정한 유형의 %3헤드기어%4 및 %3페이스웨어%4에 내장되어 있습니다.<br/><br/>%3사용 방법:%4<br/>%2[%3%12%4]를 사용하여 %3장비%4를 선택하십시오.<br/>%2%3전자 청력 보호구%4를 착용하십시오. Protect Your Hearing, Electronically 聴覚を保護。電子的に。 + 전자적으로 청력을 보호합니다 The %3Entrenching Tool%4 allows soldiers to dig trenches to help defend their position. The soldier must be on soil in order to dig a trench.<br/><br/>%3Usage:%4<br/>%2Equip an %3Entrenching Tool%4.<br/>%2Use [%3%12%4] and select %3Equipment%4.<br/>%2Select the type of trench you wish to build. diff --git a/addons/flashsuppressors/stringtable.xml b/addons/flashsuppressors/stringtable.xml index 7cc495ab7e2..5f37b6c2808 100644 --- a/addons/flashsuppressors/stringtable.xml +++ b/addons/flashsuppressors/stringtable.xml @@ -11,7 +11,7 @@ Supressor de Clarão (.338) Пламегаситель (.338) Mündungsfeuerdämpfer (.338) - 소염기 (.338) + 소염기 (.338구경) 消炎器 (.338) 消光器 (.338) 消焰器(.338) @@ -96,7 +96,7 @@ Supressor de Clarão (.45 ACP) Пламегаситель (.45 ACP) Mündungsfeuerdämpfer (.45 ACP) - 소염기 (.45 ACP) + 소염기 (.45구경 ACP) 消炎器 (.45 ACP) 消光器 (.45 ACP) 消焰器(.45 ACP) diff --git a/addons/gunbag/stringtable.xml b/addons/gunbag/stringtable.xml index a0033f33bb6..6648308c62e 100644 --- a/addons/gunbag/stringtable.xml +++ b/addons/gunbag/stringtable.xml @@ -59,7 +59,7 @@ Bolsa de Arma Vazia Чехол пуст Waffentasche leer - 총가방 비어있음 + 총가방 비어 있음 ガンバッグは空です 槍袋為空 枪袋为空 diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index 5ef75acb6d0..1b20c422baa 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -59,7 +59,7 @@ Protetores colocados Беруши надеты Ohrenstöpsel drin - 귀마개 착용 + 귀마개 착용함 耳栓を装着しました 耳塞已塞入 耳塞已塞入 @@ -109,7 +109,7 @@ Protetores retirados Снять беруши Ohrenstöpsel raus - 귀마개 뺌 + 귀마개 빼기 耳栓を外す 取出耳塞 取出耳塞 @@ -138,36 +138,42 @@ Elektronischer Gehörschutz abgesetzt 電子聴覚保護具を外しました Электронная защита слуха снята + 전자 청력 보호구 벗음 Electronic Hearing Protection put on Elektronischer Gehörschutz aufgesetzt 電子聴覚保護具を装着しました Электронная защита слуха надета + 전자 청력 보호구 씀 Electronic Hearing Protection protects the wearer from hearing damage without reducing situational awareness. Elektronischer Gehörschutz schützt den Träger vor Hörschäden, ohne dass sein Situationsbewusstsein eingeschränkt wird. 電子聴覚保護具は状況認識力を低下させることなく、装着者の聴覚障害を防ぐことができる。 Электронная защита органов слуха защищает пользователя от повреждения слуха, не снижая при этом его осведомленности о ситуации. + 전자 청력 보호구는 상황 인식을 저하시키지 않으면서 착용자의 청력 손상을 예방합니다. Electronic Hearing Protection Elektronischer Gehörschutz 電子聴覚保護具 Электронная защита слуха + 전자 청력 보호구 Take off Electronic Hearing Protection Elektronischen Gehörschutz absetzen 電子聴覚保護具を外す Снять электронную защиту слуха + 전자 청력 보호구 벗기 Put on Electronic Hearing Protection Elektronischen Gehörschutz aufsetzen 電子聴覚保護具を装着 Надеть электронную защиту слуха + 전자 청력 보호구 쓰기 Reduces the hearing ability as the player takes hearing damage @@ -254,6 +260,7 @@ Elektronischer Gehörschutz aufsetzen/absetzen 電子聴覚保護具の着脱 Надеть/снять электронную защиту слуха + 전자 청력 보호구 토글 Put/take out earplugs @@ -415,6 +422,7 @@ ELECTRONIC 電子聴覚保護 ЭЛЕКТРОННЫЙ + 전자 청력 보호 Volume when unconscious. diff --git a/addons/laserpointer/stringtable.xml b/addons/laserpointer/stringtable.xml index b11298ee0fe..c22749d95d7 100644 --- a/addons/laserpointer/stringtable.xml +++ b/addons/laserpointer/stringtable.xml @@ -11,7 +11,7 @@ Emite luz visível. Испускает узкий пучок видимого света. Strahlt sichtbares Licht aus. - 밝은 곳에서도 보임 + 가시광을 방출합니다. 可視光をだします。 發射出可見光 发出可见激光 diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml index 51e32705dab..607c140cf08 100644 --- a/addons/medical_treatment/stringtable.xml +++ b/addons/medical_treatment/stringtable.xml @@ -974,6 +974,7 @@ Medic's Equipment First [If medic role] Сначала медикаменты врача [Если медик] + 치료자의 의료물자 먼저 사용 [의무병일 경우] Patient's Equipment First @@ -1671,7 +1672,7 @@ Sangue O- , utilizado em casos raros para rapidamente repor o sangue. Uso habitual ocorre durante o transporte ou em estações de tratamento. Кровь I группы, резус-отрицательная, применяется по жизненным показаниям для возмещения объема потерянной крови на догоспитальном этапе оказания медицинской помощи. O Negative Blutinfusion wird nur in seltenen Fällen verwendet, um den Bluthaushalt des Patienten zu ergänzen. Wird in der Regel wärend der Transportphase durchgeführt. - O형 혈액 투여는 매우 엄격하고 드문 혈액 보급의 경우에 쓰이는데 주로 치료의 운송단계에서 사용됩니다. + O Rh- 혈액은 일반적으로 의료 후송 단계에서 혈액 공급을 보충하기 위한 엄격하고 드물게 사용되는 혈액입니다. 血液型O-の輸血は、厳密かつ稀な事象において行われる。通常、医療の搬送段階で血液を補充するために使用される。 O型陰性注射用血液, 在緊急情況時使用, 用於補充傷者流失的血液 O型负值注射用血液,在紧急情况时使用, 用于补充伤者流失的血液 diff --git a/addons/microdagr/stringtable.xml b/addons/microdagr/stringtable.xml index bb7ffb3eae6..614c6e08c8c 100644 --- a/addons/microdagr/stringtable.xml +++ b/addons/microdagr/stringtable.xml @@ -107,7 +107,7 @@ Preenchimento de mapa do MicroDAGR Заполнение карты MicroDAGR MicroDAGR-Kartenfüllung - 마이크로DAGR - 지도채우기 + 마이크로DAGR - 지도 정보량 MicroDAGR での地図情報 微型軍用GPS接收器地圖資料 微型军用 GPS 接收器地图资料 diff --git a/addons/missile_aim120/stringtable.xml b/addons/missile_aim120/stringtable.xml index b04d3a19446..f9ad460f141 100644 --- a/addons/missile_aim120/stringtable.xml +++ b/addons/missile_aim120/stringtable.xml @@ -6,78 +6,91 @@ AIM-120A [ACE] AIM-120A [ACE] AIM-120A [ACE] + AIM-120A 암람 [ACE] 1x AIM-120A [ACE] 1x AIM-120A [ACE] 1x AIM-120A [ACE] 1x AIM-120A [ACE] + 1x AIM-120A 암람 [ACE] AIM-120 [ACE] AIM-120 [ACE] AIM-120 [ACE] AIM-120 [ACE] + AIM-120 암람 [ACE] AIM-120C [ACE] AIM-120C [ACE] AIM-120C [ACE] AIM-120C [ACE] + AIM-120C 암람 [ACE] 1x AIM-120C [ACE] 1x AIM-120C [ACE] 1x AIM-120C [ACE] 1x AIM-120C [ACE] + 1x AIM-120C 암람 [ACE] 2x AIM-120C [ACE] 2x AIM-120C [ACE] 2x AIM-120C [ACE] 2x AIM-120C [ACE] + 2x AIM-120C 암람 [ACE] AIM-120D [ACE] AIM-120D [ACE] AIM-120D [ACE] AIM-120D [ACE] + AIM-120D 암람 [ACE] 1x AIM-120D [ACE] 1x AIM-120D [ACE] 1x AIM-120D [ACE] 1x AIM-120D [ACE] + 1x AIM-120D 암람 [ACE] 2x AIM-120D [ACE] 2x AIM-120D [ACE] 2x AIM-120D [ACE] 2x AIM-120D [ACE] + 2x AIM-120D 암람 [ACE] Direct Direct ダイレクト Прямой + 다이렉트 Loft Loft ロフト Сверху + 로프트 R-77 [ACE] R-77 [ACE] R-77 [ACE] R-77 [ACE] + R-77 빔펠 [ACE] 1x R-77 [ACE] 1x R-77 [ACE] 1x R-77 [ACE] 1x R-77 [ACE] + 1x R-77 빔펠 [ACE] diff --git a/addons/missile_aim9/stringtable.xml b/addons/missile_aim9/stringtable.xml index 0c681d9b17a..767fffbf4cb 100644 --- a/addons/missile_aim9/stringtable.xml +++ b/addons/missile_aim9/stringtable.xml @@ -5,76 +5,91 @@ AIM-9M [ACE] AIM-9M [ACE] AIM-9M [ACE] + AIM-9M 사이드와인더 [ACE] AIM-9X [ACE] AIM-9X [ACE] AIM-9X [ACE] + AIM-9X 사이드와인더 [ACE] AIM-132 [ACE] AIM-132 [ACE] AIM-132 [ACE] + AIM-132 아스람 [ACE] R-73 [ACE] R-73 [ACE] R-73 [ACE] + R-73 빔펠 [ACE] R-74 [ACE] R-74 [ACE] R-74 [ACE] + R-74 빔펠 [ACE] 1x AIM-9M [ACE] 1x AIM-9M [ACE] 1x AIM-9M [ACE] + 1x AIM-9M 사이드와인더 [ACE] 2x AIM-9M [ACE] 2x AIM-9M [ACE] 2x AIM-9M [ACE] + 2x AIM-9M 사이드와인더 [ACE] 1x AIM-9X [ACE] 1x AIM-9X [ACE] 1x AIM-9X [ACE] + 1x AIM-9X 사이드와인더 [ACE] 2x AIM-9X [ACE] 2x AIM-9X [ACE] 2x AIM-9X [ACE] + 2x AIM-9X 사이드와인더 [ACE] 1x AIM-132 [ACE] 1x AIM-132 [ACE] 1x AIM-132 [ACE] + 1x AIM-132 아스람 [ACE] 2x AIM-132 [ACE] 2x AIM-132 [ACE] 2x AIM-132 [ACE] + 2x AIM-132 아스람 [ACE] 4x AIM-132 [ACE] 4x AIM-132 [ACE] 4x AIM-132 [ACE] + 4x AIM-132 아스람 [ACE] 1x R-73 [ACE] 1x R-73 [ACE] 1x R-73 [ACE] + 1x R-73 빔펠 [ACE] 1x R-74 [ACE] 1x R-74 [ACE] 1x R-74 [ACE] + 1x R-74 빔펠 [ACE] 2x R-74 [ACE] 2x R-74 [ACE] 2x R-74 [ACE] + 2x R-74 빔펠 [ACE] diff --git a/addons/missile_gbu/stringtable.xml b/addons/missile_gbu/stringtable.xml index dd3e5f80eda..c53a4c4c322 100644 --- a/addons/missile_gbu/stringtable.xml +++ b/addons/missile_gbu/stringtable.xml @@ -7,7 +7,7 @@ GBU-12 [ACE] GBU-12 [ACE] GBU-12 [ACE] - GBU-12 [ACE] + GBU-12 페이브웨이 II [ACE] GBU-12 [ACE] @@ -16,7 +16,7 @@ 1x GBU-12 [ACE] 1x GBU-12 [ACE] 1x GBU-12 [ACE] - 1x GBU-12 [ACE] + 1x GBU-12 페이브웨이 II [ACE] 1x GBU-12 [ACE] @@ -25,7 +25,7 @@ 2x GBU-12 [ACE] 2x GBU-12 [ACE] 2x GBU-12 [ACE] - 2x GBU-12 [ACE] + 2x GBU-12 페이브웨이 II [ACE] 2x GBU-12 [ACE] @@ -34,7 +34,7 @@ 4x GBU-12 [ACE] 4x GBU-12 [ACE] 4x GBU-12 [ACE] - 4x GBU-12 [ACE] + 4x GBU-12 페이브웨이 II [ACE] 4x GBU-12 [ACE] diff --git a/addons/missile_manpad/stringtable.xml b/addons/missile_manpad/stringtable.xml index b3b63655367..215f40974b8 100644 --- a/addons/missile_manpad/stringtable.xml +++ b/addons/missile_manpad/stringtable.xml @@ -5,21 +5,25 @@ FIM-92 Stinger [ACE] FIM-92 スティンガー [ACE] FIM-92 Stinger [ACE] + FIM-92 스팅어 [ACE] RIM-116 [ACE] RIM-116 [ACE] RIM-116 [ACE] + RIM-116 RAM [ACE] 21x RIM-116 [ACE] 21x RIM-116 [ACE] 21x RIM-116 [ACE] + 21x RIM-116 RAM [ACE] 4x FIM-92 Stinger [ACE] 4x FIM-92 スティンガー [ACE] 4x FIM-92 Stinger [ACE] + 4x FIM-92 스팅어 [ACE] diff --git a/addons/missile_sam/stringtable.xml b/addons/missile_sam/stringtable.xml index 9a07d7adc16..9f2f6591b0b 100644 --- a/addons/missile_sam/stringtable.xml +++ b/addons/missile_sam/stringtable.xml @@ -6,54 +6,63 @@ Mk-29 ESSM Mk-29 ESSM Mk-29 ESSM + 마크 29 ESSM RIM-162 ESSM RIM-162 ESSM RIM-162 ESSM RIM-162 ESSM + RIM-162 ESSM Mk-29 Operator Mk-29 Operator Mk-29 操作員 Mk-29 Operator + 마크 29 조작병 MIM-104 Patriot MIM-104 Patriot MIM-104 ペトリオット MIM-104 Patriot + MIM-104 패트리어트 Patriot Missile Patriot Missile ペトリオット ミサイル Patriot Missile + 패트리어트 미사일 MIM-104 Operator MIM-104 Operator MIM-104 操作員 MIM-104 Operator + MIM-104 패트리어트 조작병 S-400 S-400 S-400 S-400 + S-400 트리움프 S-400 Missile S-400 Missile S-400 ミサイル S-400 Missile + S-400 트리움프 미사일 S-400 Operator S-400 Operator S-400 操作員 S-400 Operator + S-400 트리움프 조작병 diff --git a/addons/pylons/stringtable.xml b/addons/pylons/stringtable.xml index d10eded85ca..d398e7cf5a6 100644 --- a/addons/pylons/stringtable.xml +++ b/addons/pylons/stringtable.xml @@ -101,7 +101,7 @@ <vazio> <пусто> <leer> - <비어있음> + <비어 있음> <空> <空> <空> diff --git a/addons/ui/stringtable.xml b/addons/ui/stringtable.xml index ae711e02ec5..234e083f001 100644 --- a/addons/ui/stringtable.xml +++ b/addons/ui/stringtable.xml @@ -374,7 +374,7 @@ Quantidade de Carregadores Количество магазинов Magazinanzahl - 탄창수 + 탄창 수 弾倉数 彈匣數量 弹匣数量 diff --git a/addons/vehicles/stringtable.xml b/addons/vehicles/stringtable.xml index 9f52eedb32d..901fe89afd1 100644 --- a/addons/vehicles/stringtable.xml +++ b/addons/vehicles/stringtable.xml @@ -54,7 +54,7 @@ Oculta a opção de interação para ejetar. Requer que o jogo seja reiniciado. Убирает действие 'Выпрыгнуть' из меню. (Требует перезагрузки) Versteckt den Abspringen-Eintrag aus dem Aktionsmenü. Benötigt Neustart des Spiels. - 휠액션에서 탈출을 숨깁니다. 게임 재시작을 필요로 합니다. + 마우스 휠 상호작용에서 비상탈출을 숨깁니다. 게임 재시작을 필요로 합니다. アクションメニューに"脱出"の項目を表示しないようにします。ゲームの再起動が必要です。 隱藏在動作選單中逃脫動作的選項。要求遊戲重新啟動。 隐藏鼠标滚轮菜单中的下车选项。需要重新启动游戏。 diff --git a/addons/weaponselect/stringtable.xml b/addons/weaponselect/stringtable.xml index 52d02f150fd..cd95171e0a7 100644 --- a/addons/weaponselect/stringtable.xml +++ b/addons/weaponselect/stringtable.xml @@ -61,7 +61,7 @@ Lançador de fumaça Пустить дымовую завесу Rauchwand abfeuern - 연막발사기 박사 + 연막발사기 발사 発煙弾を発射 發射煙霧發射器 发射烟雾发射器 diff --git a/addons/zeus/stringtable.xml b/addons/zeus/stringtable.xml index 1b7c7cac730..120a14e4f81 100644 --- a/addons/zeus/stringtable.xml +++ b/addons/zeus/stringtable.xml @@ -222,7 +222,7 @@ Adicionar Arsenal Completo Добавить весь Арсенал Füge ganzes Arsenal hinzu - 아스날 놓기 + 전체 기존 아스널 추가 BI 武器庫を追加 增加完整的虛擬軍火庫到物件上 增加完整的虚拟军火库到物体上 @@ -483,7 +483,7 @@ Construção por construção Здание за зданием Gebäude nach Gebäude - 건물에서 건물로 + 건물마다 建物ごとに 一棟填滿後再換下一棟 一栋填满后再换下一栋 @@ -904,7 +904,7 @@ Remover Arsenal Убрать Арсенал Entferne Arsenal - 아스날 제거 + 전체 기존 아스널 제거 BI 武器庫を削除 移除物件上的虛擬軍火庫 移除物体上的虚拟军火库 @@ -951,7 +951,7 @@ Definir como engenheiro Назначить инженера Engineer zuweisen - 엔지니어 지정 + 공병 임명 工兵に割り当て 指派工程師 指派工程师 @@ -968,7 +968,7 @@ Habilidade do engenheiro Инженерное мастерство Ingenieur Fähigkeit - 기술자의 기술 + 공병의 숙련도 工兵のスキル 工程師技能 工程师技能 @@ -1480,7 +1480,7 @@ Desguarnecer grupo Вывести группу из здания Garnisionsgruppe auflösen - 주둔해제 + 그룹 주둔 해제 グループの駐屯解除 解除駐軍駐守狀態 解除驻军驻守状态 From 2a3c1561fef44a9ff1cff196f090925a1d7f4a25 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sun, 22 Dec 2024 18:05:55 -0600 Subject: [PATCH 27/35] General - Misc code cleanup (#10587) --- addons/artillerytables/dev/showShotInfo.inc.sqf | 12 +++++------- .../functions/fnc_detonateAmmunitionServerLoop.sqf | 2 +- .../missile_hud/functions/fnc_getCurrentWeapon.sqf | 2 +- .../functions/fnc_seekerType_Doppler.sqf | 5 ----- .../missileguidance/functions/fnc_seekerType_IR.sqf | 1 + .../functions/fnc_shouldFilterRadarHit.sqf | 1 - addons/zeus/functions/fnc_moduleSuicideBomber.sqf | 1 + 7 files changed, 9 insertions(+), 15 deletions(-) diff --git a/addons/artillerytables/dev/showShotInfo.inc.sqf b/addons/artillerytables/dev/showShotInfo.inc.sqf index 6945e95ba0b..69f7a0728a4 100644 --- a/addons/artillerytables/dev/showShotInfo.inc.sqf +++ b/addons/artillerytables/dev/showShotInfo.inc.sqf @@ -29,11 +29,9 @@ INFO("showing shot info"); }, { params ["", "_shootPos", "_lastPos"]; private _mkrB = createMarker [format ["shotInfo-%1-%2",_shootPos,_lastPos], _lastPos]; - _mkrB setMarkerType "mil_dot"; - _mkrB setMarkerColor "ColorGreen"; - _mkrB setMarkerSize [0.5,0.5]; - private _diff = _lastPos vectorDiff _shootPos; - _mkrB setMarkerText format ["%1", _diff apply {round _x}]; + _mkrB setMarkerTypeLocal "mil_dot"; + _mkrB setMarkerColorLocal "ColorGreen"; + _mkrB setMarkerSizeLocal [0.5,0.5]; private _dist2d = _shootPos distance2D _lastPos; private _dir = _shootPos getDir _lastPos; @@ -42,7 +40,7 @@ INFO("showing shot info"); }, [_proj, _shootPos, [0,0,0], _submunitionAmmo]] call CBA_fnc_waitUntilAndExecute; private _mkrA = createMarker [format ["shotInfo-%1",_shootPos], _shootPos]; - _mkrA setMarkerType "mil_dot"; - _mkrA setMarkerColor "ColorRed"; + _mkrA setMarkerTypeLocal "mil_dot"; + _mkrA setMarkerColorLocal "ColorRed"; _mkrA setMarkerSize [0.5,0.5]; }] call CBA_fnc_addClassEventHandler; diff --git a/addons/cookoff/functions/fnc_detonateAmmunitionServerLoop.sqf b/addons/cookoff/functions/fnc_detonateAmmunitionServerLoop.sqf index 09e427f9278..4e9b674396d 100644 --- a/addons/cookoff/functions/fnc_detonateAmmunitionServerLoop.sqf +++ b/addons/cookoff/functions/fnc_detonateAmmunitionServerLoop.sqf @@ -118,7 +118,7 @@ if (_removeAmmoDuringCookoff) then { _magazineIndex = _virtualAmmo findIf {(_x select 0) == _magazineClassname}; if (_magazineIndex == -1) exitWith { - TRACE_1("no virtual magazine",_magazineClass); + TRACE_1("no virtual magazine",_magazineClassname); }; if (_newAmmoCount <= 0) then { diff --git a/addons/missile_hud/functions/fnc_getCurrentWeapon.sqf b/addons/missile_hud/functions/fnc_getCurrentWeapon.sqf index 64984507af2..3629b318c28 100644 --- a/addons/missile_hud/functions/fnc_getCurrentWeapon.sqf +++ b/addons/missile_hud/functions/fnc_getCurrentWeapon.sqf @@ -18,7 +18,7 @@ */ params ["_unit", "_vehicle", "_turretPath"]; -TRACE_2("registerElement",_condition,_generator); +TRACE_3("getCurrentWeapon",_unit,_vehicle,_turretPath); private _currentWeapon = if (_unit isEqualTo _vehicle) then { currentWeapon _unit diff --git a/addons/missileguidance/functions/fnc_seekerType_Doppler.sqf b/addons/missileguidance/functions/fnc_seekerType_Doppler.sqf index 15f34574c64..e44ff2081f2 100644 --- a/addons/missileguidance/functions/fnc_seekerType_Doppler.sqf +++ b/addons/missileguidance/functions/fnc_seekerType_Doppler.sqf @@ -58,11 +58,6 @@ if (_isActive || { CBA_missionTime >= _timeWhenActive }) then { private _a2 = 180 - ((_seekerAngle / 2) + _a1); private _seekerBaseRadiusAtGround = ACTIVE_RADAR_MINIMUM_SCAN_AREA max (_distanceToExpectedTarget / sin(_a2) * sin(_seekerAngle / 2)); - private _lastKnownSpeed = if (_lastKnownVelocity isEqualTo [0, 0, 0]) then { - 0 - } else { - vectorMagnitude _lastKnownVelocity - }; private _seekerBaseRadiusAdjusted = linearConversion [0, _seekerBaseRadiusAtGround, (CBA_missionTime - _lastTimeSeen) * vectorMagnitude _lastKnownVelocity, ACTIVE_RADAR_MINIMUM_SCAN_AREA, _seekerBaseRadiusAtGround, false]; if (_doesntHaveTarget) then { _seekerBaseRadiusAdjusted = _seekerBaseRadiusAtGround; diff --git a/addons/missileguidance/functions/fnc_seekerType_IR.sqf b/addons/missileguidance/functions/fnc_seekerType_IR.sqf index 066a0cc98aa..5711f87cde0 100644 --- a/addons/missileguidance/functions/fnc_seekerType_IR.sqf +++ b/addons/missileguidance/functions/fnc_seekerType_IR.sqf @@ -21,6 +21,7 @@ #define TRACK_ON_PAUSE false #endif +//IGNORE_PRIVATE_WARNING ["_args"]; // from doSeekerSearch _args params ["_firedEH", "_launchParams", "_flightParams", "_seekerParams", "_stateParams", "_targetData"]; _firedEH params ["_shooter","","","","_ammo","","_projectile"]; _launchParams params ["_shooter","_targetLaunchParams","_seekerType","_attackProfile","_lockMode","_laserInfo","_navigationType"]; diff --git a/addons/missileguidance/functions/fnc_shouldFilterRadarHit.sqf b/addons/missileguidance/functions/fnc_shouldFilterRadarHit.sqf index 0d4f944f646..aec7d62a28a 100644 --- a/addons/missileguidance/functions/fnc_shouldFilterRadarHit.sqf +++ b/addons/missileguidance/functions/fnc_shouldFilterRadarHit.sqf @@ -77,7 +77,6 @@ if !(_maskedByGround) exitWith { private _nearby = _target nearObjects 50; _nearby = _nearby select { // 8 = radar blocking - private _blocking = configOf _x >> "weaponLockSystem"; (([getNumber (configOf _x >> "weaponLockSystem"), 4] call EFUNC(common,binarizeNumber)) select 3) && // Check if chaff can break radar lock {[_projectile, getPosASLVisual _x, _seekerAngle] call FUNC(checkSeekerAngle)} && // Check if within view {[_projectile, _x, false] call FUNC(checkLos)} // Check if can be seen diff --git a/addons/zeus/functions/fnc_moduleSuicideBomber.sqf b/addons/zeus/functions/fnc_moduleSuicideBomber.sqf index 6db261da534..89bfb250e1c 100644 --- a/addons/zeus/functions/fnc_moduleSuicideBomber.sqf +++ b/addons/zeus/functions/fnc_moduleSuicideBomber.sqf @@ -26,6 +26,7 @@ #define SCANNING_PERIOD 1 #ifdef DEBUG_MODE_FULL + #undef SCANNING_PERIOD #define SCANNING_PERIOD 0 #endif From 06d9ba4fbd01b2097d9cd6f0343bfca7ea4e4a81 Mon Sep 17 00:00:00 2001 From: Apricot <50947830+Apricot-ale@users.noreply.github.com> Date: Mon, 23 Dec 2024 09:10:15 +0900 Subject: [PATCH 28/35] Translations - Improve Japanese (Medical, WS Kamaz Flatbed) (#10591) * little bit improve jp * Vehiclewordings --- .../compat_rf_realisticnames/stringtable.xml | 6 +-- .../compat_ws_realisticnames/stringtable.xml | 10 ++--- addons/medical_treatment/stringtable.xml | 5 ++- addons/realisticnames/stringtable.xml | 44 +++++++++---------- 4 files changed, 33 insertions(+), 32 deletions(-) diff --git a/addons/compat_rf/compat_rf_realisticnames/stringtable.xml b/addons/compat_rf/compat_rf_realisticnames/stringtable.xml index b51cfecd9df..88a94f50939 100644 --- a/addons/compat_rf/compat_rf_realisticnames/stringtable.xml +++ b/addons/compat_rf/compat_rf_realisticnames/stringtable.xml @@ -697,12 +697,12 @@ Пожарная машина HEMTT HEMTT-Löschfahrzeug HEMTT 소방트럭 - HEMTT 消防車 + HEMTT (消防車) HEMTT 消防卡车 Typhoon Cargo - タイフーン 貨物 + タイフーン (貨物) 타이푼 화물 @@ -712,7 +712,7 @@ Typhoon Acqua Typhoon Water 타이푼 급수 - タイフーン 給水 + タイフーン (給水車) AMOS Container diff --git a/addons/compat_ws/compat_ws_realisticnames/stringtable.xml b/addons/compat_ws/compat_ws_realisticnames/stringtable.xml index bc4e365a588..8a33d0320f1 100644 --- a/addons/compat_ws/compat_ws_realisticnames/stringtable.xml +++ b/addons/compat_ws/compat_ws_realisticnames/stringtable.xml @@ -826,7 +826,7 @@ KamAZ Munizioni KamAZ Munition 카마즈 탄약 - KamAZ 弾薬 + KamAZ (弾薬) KamAZ Cargo @@ -835,7 +835,7 @@ KamAZ Carico KamAZ Fracht 카마즈 화물 - KamAZ 貨物 + KamAZ (貨物) KamAZ Flatbed @@ -844,7 +844,7 @@ KamAZ Pianale KamAZ Flachbett 카마즈 플랫베드 - KamAZ フラットベッド + KamAZ (平台) KamAZ Racing @@ -853,7 +853,7 @@ KamAZ da corsa KamAZ Rennlaster 카마즈 경주용 - KamAZ レース仕様 + KamAZ (レース仕様) KamAZ Repair @@ -862,7 +862,7 @@ KamAZ Riparazione KamAZ Instandsetzung 카마즈 정비 - KamAZ 修理 + KamAZ (修理) diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml index 607c140cf08..0558baed027 100644 --- a/addons/medical_treatment/stringtable.xml +++ b/addons/medical_treatment/stringtable.xml @@ -966,7 +966,7 @@ Сначала медикаменты врача Ausrüstung des Sanitäters zuerst 치료자의 의료물자 먼저 사용 - 救護者の装備を優先 + 救護者装備を優先 優先使用醫療兵的醫療物資 优先消耗医疗兵装备 İlk Sıhhiyenin Ekipmanı @@ -974,6 +974,7 @@ Medic's Equipment First [If medic role] Сначала медикаменты врача [Если медик] + 救護者装備を優先 [衛生兵の場合] 치료자의 의료물자 먼저 사용 [의무병일 경우] @@ -987,7 +988,7 @@ Сначала медикаменты пациента Ausrüstung des Patienten zuerst 환자의 의료물자 먼저 사용 - 患者の装備を優先 + 患者装備を優先 優先使用患者的醫療物資 优先消耗伤员装备 Önce Hastanın Ekipmanı diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index 0c61f004a55..2620e96393d 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -1984,7 +1984,7 @@ HEMTT (ремонтный) HEMTT Instandsetzung HEMTT 수리 - HEMTT 修理 + HEMTT (修理) 重型增程機動戰術卡車 (維修) HEMTT(维修) HEMTT Tamir @@ -2001,7 +2001,7 @@ HEMTT (боеприпасы) HEMTT Munition HEMTT 탄약 - HEMTT 弾薬 + HEMTT (弾薬) 重型增程機動戰術卡車 (彈藥) HEMTT(弹药) HEMTT Cephane @@ -2018,7 +2018,7 @@ HEMTT (контейнер) HEMTT Container HEMTT 컨테이너 - HEMTT コンテナ + HEMTT (コンテナ) 重型增程機動戰術卡車 (貨櫃) HEMTT(货柜) HEMTT Konteynır @@ -2035,7 +2035,7 @@ HEMTT (транспортный, крытый) HEMTT Transport (bedeckt) HEMTT 수송 (덮개) - HEMTT 輸送 (幌) + HEMTT (輸送、幌付き) 重型增程機動戰術卡車 (運輸, 棚布) HEMTT(运输,棚布) HEMTT Nakil (Kapalı) @@ -2052,7 +2052,7 @@ HEMTT (топливозаправщик) HEMTT Treibstoff HEMTT 연료 - HEMTT 燃料 + HEMTT (燃料) 重型增程機動戰術卡車 (燃油) HEMTT(燃油) HEMTT Yakıt @@ -2069,7 +2069,7 @@ HEMTT (медицинский) HEMTT Sanitäter HEMTT 의료 - HEMTT 衛生 + HEMTT (衛生) 重型增程機動戰術卡車 (醫療) HEMTT(医疗) HEMTT Medikal @@ -2103,7 +2103,7 @@ HEMTT (транспортный) HEMTT Transport HEMTT 수송 - HEMTT 輸送 + HEMTT (輸送) 重型增程機動戰術卡車 (運輸) HEMTT(运输) HEMTT Nakil @@ -2120,7 +2120,7 @@ КамАЗ РСЗО KamAS MRL 카마즈 다연장로켓 - KamAZ MRL + KamAZ (MRL) "卡瑪斯"卡車 (多管火箭) "卡玛兹"(多管火箭) KamAZ @@ -2136,7 +2136,7 @@ КамАЗ (боеприпасы) KamAS Munition 카마즈 탄약 - KamAZ 弾薬 + KamAZ (弾薬) "卡瑪斯"卡車 (彈藥) "卡玛兹"(弹药) KamAZ Cephane @@ -2153,7 +2153,7 @@ КамАЗ (ремонтный) KamAS Instandsetzung 카마즈 수리 - KamAZ 修理 + KamAZ (修理) "卡瑪斯"卡車 (維修) "卡玛兹"(维修) KamAZ Tamir @@ -2170,7 +2170,7 @@ КамАЗ (транспортный, крытый) KamAS Transport (bedeckt) 카마즈 수송 (덮개) - KamAZ 輸送 (幌) + KamAZ (輸送、幌付き) "卡瑪斯"卡車 (運輸, 棚布) "卡玛兹"(运输,棚布) KamAZ Nakil (Kapalı) @@ -2187,7 +2187,7 @@ КамАЗ (топливозаправщик) KamAS Treibstoff 카마즈 연료 - KamAZ 燃料 + KamAZ (燃料) "卡瑪斯"卡車 (燃油) "卡玛兹"(燃油) KamAZ Yakıt @@ -2204,7 +2204,7 @@ КамАЗ (медицинский) KamAS Sanitäter 카마즈 의료 - KamAZ 衛生 + KamAZ (衛生) "卡瑪斯"卡車 (醫療) "卡玛兹"(医疗) KamAZ Medikal @@ -2221,7 +2221,7 @@ КамАЗ (транспортный) KamAS Transport 카마즈 수송 - KamAZ 輸送 + KamAZ (輸送) "卡瑪斯"卡車 (運輸) "卡玛兹"(运输) KamAZ Nakil @@ -2236,7 +2236,7 @@ КамАЗ (водоноситель) KamAS Wasser 카마즈 급수 - KamAZ 給水 + KamAZ (給水車) Typhoon Ammo @@ -2249,7 +2249,7 @@ Тайфун (боеприпасы) Typhoon Munition 타이푼 탄약 - タイフーン 弾薬 + タイフーン (弾薬) "颱風"卡車 (彈藥) "台风"(弹药) Typhoon Cephane @@ -2266,7 +2266,7 @@ Тайфун (крытый) Typhoon Transport (bedeckt) 타이푼 수송 (덮개) - タイフーン 輸送 (幌) + タイフーン (輸送、幌付き) "颱風"卡車 (運輸, 棚布) "台风"(运输,棚布) Typhoon Nakil (Kapalı) @@ -2283,7 +2283,7 @@ Тайфун (устройство) Typhoon Gerät 타이푼 장치 - タイフーン デバイス + タイフーン (デバイス) "颱風"卡車 (精密設備) "台风"(装置) Typhoon Cihaz @@ -2300,7 +2300,7 @@ Тайфун (топливозаправщик) Typhoon Treibstoff 타이푼 연료 - タイフーン 燃料 + タイフーン (燃料) "颱風"卡車 (燃油) "台风"(燃油) Typhoon Yakıt @@ -2317,7 +2317,7 @@ Тайфун (медицинский) Typhoon Sanitäter 타이푼 의료 - タイフーン 衛生 + タイフーン (衛生) "颱風"卡車 (醫療) "台风"(医疗) Typhoon Medikal @@ -2334,7 +2334,7 @@ Тайфун (ремонтный) Typhoon Instandsetzung 타이푼 수리 - タイフーン 修理 + タイフーン (修理) "颱風"卡車 (維修) "台风"(维修) Typhoon Tamir @@ -2351,7 +2351,7 @@ Тайфун (транспортный) Typhoon Transport 타이푼 수송 - タイフーン 輸送 + タイフーン (輸送) "颱風"卡車 (運輸) "台风"(运输) Typhoon Nakil From 889b5687d2c12ff4b12f6054e46ea115c51ffbf8 Mon Sep 17 00:00:00 2001 From: Timi007 Date: Mon, 23 Dec 2024 01:14:23 +0100 Subject: [PATCH 29/35] Translations - Add German (#10589) Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> --- addons/advanced_throwing/stringtable.xml | 2 +- addons/arsenal/stringtable.xml | 2 +- addons/cargo/stringtable.xml | 2 ++ addons/common/stringtable.xml | 6 ++-- addons/field_rations/stringtable.xml | 2 ++ addons/frag/stringtable.xml | 16 ++++++---- addons/goggles/stringtable.xml | 3 +- addons/hearing/stringtable.xml | 5 +++- addons/hitreactions/stringtable.xml | 5 ++-- addons/interact_menu/stringtable.xml | 4 +-- addons/interaction/stringtable.xml | 6 ++++ addons/maverick/stringtable.xml | 7 +++++ addons/medical_damage/stringtable.xml | 6 +++- addons/medical_treatment/stringtable.xml | 37 +++++++++++++++++------- addons/missile_aim120/stringtable.xml | 13 +++++++++ addons/missile_aim9/stringtable.xml | 15 ++++++++++ addons/missile_gbu/stringtable.xml | 7 +++++ addons/missile_manpad/stringtable.xml | 4 +++ addons/missile_sam/stringtable.xml | 9 ++++++ addons/missile_vikhr/stringtable.xml | 7 +++++ addons/missileguidance/stringtable.xml | 3 ++ addons/overheating/stringtable.xml | 6 ++-- addons/parachute/stringtable.xml | 2 +- addons/reload/stringtable.xml | 2 +- addons/ui/stringtable.xml | 1 + addons/weather/stringtable.xml | 2 +- 26 files changed, 141 insertions(+), 33 deletions(-) diff --git a/addons/advanced_throwing/stringtable.xml b/addons/advanced_throwing/stringtable.xml index 54338f393d7..12818c14518 100644 --- a/addons/advanced_throwing/stringtable.xml +++ b/addons/advanced_throwing/stringtable.xml @@ -88,7 +88,7 @@ Zezwól na podnoszenie przyczepionych obiektów miotanych Permitir pegar arremessáveis fixados Вкл. подбор прикрепленных гранат - Aktiviere erneute Aufnahme befestigter Wurfobjekte + Erlaube erneute Aufnahme befestigter Wurfobjekte 부착 투척물 줍기 활성화 装着済の投擲物の拾い上げを有効化 啟用可撿取附著投擲物 diff --git a/addons/arsenal/stringtable.xml b/addons/arsenal/stringtable.xml index 106f7fd3aa9..195ceea4b45 100644 --- a/addons/arsenal/stringtable.xml +++ b/addons/arsenal/stringtable.xml @@ -1203,7 +1203,7 @@ Rejestruj brakujące / niedostępne przedmioty Registrar em log itens indisponíveis/não encontrados Вести журнал недоступных предметов - Aktiviert die Aufzeichnung fehlender Gegenstände in der RPT + Aufzeichnung fehlender Gegenstände in der RPT 누락 된 항목 / 사용 할 수 없는 항목 기록 欠落 / 利用不可アイテムを記録 記錄遺失/無法使用的項目 diff --git a/addons/cargo/stringtable.xml b/addons/cargo/stringtable.xml index e93b40d046e..2442cf0dbbf 100644 --- a/addons/cargo/stringtable.xml +++ b/addons/cargo/stringtable.xml @@ -268,12 +268,14 @@ Check Cargo Size Vérifier la taille de la cargaison Проверить размер груза + Prüfe Frachtgröße 화물 크기 확인 貨物の大きさを確認 Show Check Cargo Size Interaction Вкл. проверку размера груза + Zeige Interaktion zum Prüfen der Frachtgröße 貨物の大きさを確認のインタラクションを表示 화물 크기 확인 상호작용 표시 Afficher l'interaction de confirmation de la taille de la cargaison diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index 0a2593e70bc..23043128d20 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -555,7 +555,7 @@ Fattore di Oscillazione su Bipode Fator de balanço de mira em posição de tiro Коэф. колебания прицела при развертывании - Verwacklungsfaktor, wenn Zweibein aufgestellt ist. + Verwacklungsfaktor bei aufgestelltem Zweibein 거치 시 손떨림 정도 接地展開時の手ぶれ係数 @@ -1135,7 +1135,7 @@ Fattore di Oscillazione Appoggiato Fator de balanço de mira em repouso Коэф. колебания прицела в состоянии покоя - Verwacklungsfaktor, wenn aufgelegt + Verwacklungsfaktor beim Auflegen 휴식 시 손떨림 정도 静止依託時の手ぶれ係数 @@ -1796,6 +1796,7 @@ Realistic Compass Declination Déclinaison réaliste de la boussole + Realistische Missweisung des Kompasses 現実的なコンパス偏角 Реалистичный компасса 현실적인 나침반 편각 @@ -1803,6 +1804,7 @@ Compass will point to magnetic north La boussole indique le nord magnétique + Der Kompass zeigt nach missweisend Nord コンパスが磁北を指すようになります Компас будет указывать на северный магнитный полюс 나침반이 자북을 가리키게 됩니다. diff --git a/addons/field_rations/stringtable.xml b/addons/field_rations/stringtable.xml index b8aaed35196..b083248c219 100644 --- a/addons/field_rations/stringtable.xml +++ b/addons/field_rations/stringtable.xml @@ -1284,6 +1284,7 @@ If enabled, hunger and thirst will continue to increase while the Zeus interface is open. + Wenn aktiviert, werden Hunger und Durst bei geöffnetem Zeus-Interface weiter zunehmen. 有効化すると、空腹と渇きはZeusインタフェイスを開いている間も継続して進行します。 활성화 시 제우스 인터페이스가 열려 있는 동안 허기와 갈증이 계속 증가합니다. Si cette option est activée, la faim et la soif continueront d'augmenter tant que l'interface Zeus sera ouverte. @@ -1291,6 +1292,7 @@ Update Hunger and Thirst in Zeus + Zunehmender Hunger und Durst im Zeus Zeus時に空腹と渇きを進行させる 제우스의 허기와 갈증 업데이트 Mise à jour Faim et soif dans Zeus diff --git a/addons/frag/stringtable.xml b/addons/frag/stringtable.xml index 1385937a377..6499e57d1b1 100644 --- a/addons/frag/stringtable.xml +++ b/addons/frag/stringtable.xml @@ -7,6 +7,7 @@ Debug Debug Отладка + Debug 디버그 デバッグ @@ -16,6 +17,7 @@ Dibujar hitboxes Visualizza hitbox Изобразить хитбоксы + Zeige Hitboxen 히트박스 그리기 ヒットボックスを描画 @@ -25,7 +27,7 @@ Dibuja hitboxes en objetos que son seguidos. Visualizza hitbox su potenziali bersagli della frammentazione. Изобразить хитбоксы на объектах, которые были нацелены. - Splitter-/Explosions-Debugging + Zeige Hitboxen von Zielobjekten 타겟팅된 오브젝트에 히트박스를 그립니다. 被弾した物体のヒットボックスを描画します。 @@ -35,7 +37,7 @@ Trazado Debug de Fragmentación/Astillamiento Traccia Frag/Spall per Debug Отладка трассировки фрагментации/осколков - Splitter-/Explosions-Debug-Verfolgung + Debug-Verfolgung von Splittern und Wurfstücken 파열/파편 디버그 추적 フラグとスポールの追跡デバッグ @@ -45,7 +47,7 @@ Habilitar trazado visual de los proyectiles generados por la fragmentación y el astillamiento. Abilita il tracciamento visivo di effetti di frammentazione e spalling. Включает визуальную трассировку фрагментации и осколочных снарядов. - Splitter-/Explosions-Debugging + Aktiviert die visuelle Verfolgung von Splittern und Wurfstücken. 파열과 파편의 시각적 추적을 활성화합니다. フラグメンテーションとスポーリングによって発生した破片飛翔体の動きを視覚的に追跡できる機能を有効化します。 @@ -120,7 +122,7 @@ Symulacja odprysków Simulação de estilhaços Симуляция обломков - Explosionssimulation + Simulation von Spreng- und Wurfstücken 파편 시뮬레이션 スポーリング シミュレーション 模擬剝落 @@ -136,7 +138,7 @@ Aktywuje symulację odprysków ACE Ativa a simulação de estilhaços do ACE Включить симуляцию обломков ACE - Aktiviere ACE-Explosionssimulation + Aktiviere die ACE Simulation von Spreng- und Wurfstücken ACE 파편 시뮬레이션을 적용합니다. ACE スポーリング シミュレーションを有効化 啟用ACE模擬剝落 @@ -149,6 +151,7 @@ Dibujar Esferas de Eventos Visualizza sfere eventi Изобразить сферы событий + Visualisiere Ereigniskugeln 이벤트 구체 그리기 イベントを球体として描画 @@ -158,6 +161,7 @@ Dibujar esferas codificadas por color en cualquier evento para proyectiles seguidos. Visualizza sfere colorate su ogni evento di un frammento tracciato. Изобразить цветные сферы на любом событии для отслеживаемых раундов. + Zeige bei jedem Ereignis farbige Kugeln für verfolgte Wurfstücke. 모든 이벤트에서 추적된 파편을 위한 색상으로 구분하는 구체를 그립니다. 追跡中の飛翔体に発生した全てのイベントを色付けた球体として描画します。 @@ -183,6 +187,7 @@ Intensidad del astillamiento Intensità dello spalling Интенсивность обрушения + Intensität der Wurfstücke 파편 강도 スポーリング強度 @@ -192,6 +197,7 @@ Modificador para aumentar o disminuir el número y la intensidad de los eventos de astillamiento. Aumentar este valor puede producir una degradación en el rendimiento. Modificatore per il numero e intensità di spalling simulato, ovvero la frammentazione interna ad un veicolo colpito. Valori alti possono causare una degradazione della performance. Модификатор для увеличения или уменьшения количества и интенсивности событий обрушения. Увеличение этого значения может привести к ухудшению производительности. + Ein Modifikator, der die Anzahl und Intensität der Wurfstücke erhöht oder verringert. Eine Erhöhung dieses Wertes kann zu Leistungseinbußen führen. 파편 이벤트 수와 강도를 늘리거나 줄입니다. 이 값을 늘리면 성능이 저하될 수 있습니다. スポーリング現象が発生する数と強度を増減することが出来ます。この値を大きくすることはパフォーマンスの低下につながる可能性があります。 diff --git a/addons/goggles/stringtable.xml b/addons/goggles/stringtable.xml index fa39687d65e..87523bc5235 100644 --- a/addons/goggles/stringtable.xml +++ b/addons/goggles/stringtable.xml @@ -23,6 +23,7 @@ 고글 오버레이 표시 Afficher la superposition des lunettes Показать оверлей очков + Zeige Schutzbrillenoberfläche Show Wipe Goggles self interaction @@ -33,7 +34,7 @@ Pokaż interakcję Wyczyść Gogle Mostra a auto-interação de limpar os óculos Показывать действие Протереть очки - Zeige "Brille abwischen" im Selbstinteraktionsmenü + Zeige "Brille abwischen" Interaktion 자기상호작용에 고글 닦기 선택 보이기 ゴーグルを拭うセルフ・インタラクションを表示する 在自我互動中顯示擦拭護目鏡的動作 diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index 1b20c422baa..a7f7f6687d8 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -184,7 +184,7 @@ Możliwość chwilowej utraty słuchu przy głośnych wystrzałach i jednoczesnym braku włożonych stoperów Ativar surdez em combate? Уменьшает возможность игрока слышать звуки при повреждении органов слуха - Verringert das Hörvermögen wenn der Spieler einen Hörschaden davonträg + Verringert das Hörvermögen, wenn der Spieler Hörschäden erleidet 청력에 손상을 입으면 듣는 소리가 감소합니다. プレイヤーが聴覚にダメージを受けると聴力が低下します 當玩家聽力受損時降低聽力能力? @@ -366,6 +366,7 @@ Changes how much deafness explosions cause.\nSetting to 0 will disable explosion hearing damage. Изменяет степень глухоты, вызываемой взрывами.\nУстановка значения 0 отключает повреждение слуха при взрыве. + Ändert den Grad der Taubheit, den Explosionen verursachen.\nEin Wert von 0 deaktiviert von Explosionen verursachte Hörschäden. 폭발로 인한 청력 상실 정도를 변경합니다.\n0으로 설정하면 폭발에도 청력을 온전히 유지할 수 있습니다. 爆発による聴力低下の程度を変更します。\n0に設定することで爆発による聴力低下を無効化できます。 Modifie le degré de surdité causé par les explosions.\nLa valeur 0 désactive les dégâts auditifs causés par les explosions. @@ -373,6 +374,7 @@ Explosion Deafness Coefficient Коэффициент оглушения при взрыве + Koeffizient für Taubheit bei Explosionen 폭발 난청 계수 爆発による難聴発生係数 Coefficient de surdité à l'explosion @@ -420,6 +422,7 @@ ELECTRONIC + ELEKTRONISCH 電子聴覚保護 ЭЛЕКТРОННЫЙ 전자 청력 보호 diff --git a/addons/hitreactions/stringtable.xml b/addons/hitreactions/stringtable.xml index e0b11d3d818..e238163fa0b 100644 --- a/addons/hitreactions/stringtable.xml +++ b/addons/hitreactions/stringtable.xml @@ -4,6 +4,7 @@ If a unit takes more damage than this setting's value whilst moving on foot, they will fall over.\nIf set to -1 the mechanic is turned off. Если при передвижении пешком юнит получит больше урона, чем указано в этой настройке,то он упадет.\nЕсли установлено значение -1, механика отключается. + Wenn eine Einheit zu Fuß mehr Schaden als diesen Wert erleidet, stürzt sie.\nBei einem Wert von -1, ist diese Mechanik ausgeschaltet. 유닛이 도보로 이동하는 동안 이 설정 값보다 많은 대미지를 입으면 넘어집니다.\n-1로 설정하면 이 기능은 꺼집니다. 徒歩で移動中のユニットが設定値を超えるダメージを受けると転倒します。\n-1に設定することでこの機能を無効化できます。 Si une unité subit plus de dégâts que la valeur de ce paramètre alors qu'elle se déplace à pied, elle tombera à la renverse.\nSi le paramètre est réglé sur -1 le mécanisme est désactivé. @@ -31,7 +32,7 @@ Probabilità dell'IA di far cadere l'arma (colpo al braccio) Probabilidade da IA de largar a arma após tiro no braço Шанс выпадения оружия у ИИ (попадание в руку) - KI-Wahrscheinlichkeit, die Waffe fallen zu lassen (Arm Treffer) + KI-Wahrscheinlichkeit für Waffenabwurf (Armtreffer) 인공지능이 무기를 떨굴 확률 (팔 피격) AIが武器を落とす確率 (腕部への被弾) @@ -42,7 +43,7 @@ Probabilità dei giocatori di far cadere l'arma (colpo al braccio) Probabilidade do jogador de largar a arma após tiro no braço Шанс выпадения оружия у игрока (попадание в руку) - Spieler Wahrscheinlichkeit, die Waffe fallen zu lassen (Arm Treffer) + Spieler-Wahrscheinlichkeit für Waffenabwurf (Armtreffer) 플레이어가 무기를 떨굴 확률 (팔 피격) プレイヤーが武器を落とす確率 (腕部への被弾) diff --git a/addons/interact_menu/stringtable.xml b/addons/interact_menu/stringtable.xml index 23ee4dd3c7c..dea81e33d5c 100644 --- a/addons/interact_menu/stringtable.xml +++ b/addons/interact_menu/stringtable.xml @@ -27,7 +27,7 @@ Zawsze wyświetlaj kursor dla interakcji Sempre mostrar cursor para interação Показывать курсор (взаимодействие) - Immer den Mauszeiger für Fremd-Interaktionen anzeigen + Immer Mauszeiger für Fremd-Interaktionen anzeigen 상호작용 시 항상 커서를 보이기 カーソルを常に表示 互動時永遠顯示游標 @@ -44,7 +44,7 @@ Zawsze wyświetlaj kursor dla własnej interakcji Sempre mostrar cursor para interação pessoal Показывать курсор (взаимодействия с собой) - Immer den Mauszeiger für Selbst-Interaktionen anzeigen. + Immer Mauszeiger für Selbst-Interaktionen anzeigen 자기상호작용 시 항상 커서를 보이기 カーソルを常に表示 自我互動時永遠顯示游標 diff --git a/addons/interaction/stringtable.xml b/addons/interaction/stringtable.xml index be3543e48ad..dd17836a364 100644 --- a/addons/interaction/stringtable.xml +++ b/addons/interaction/stringtable.xml @@ -1002,6 +1002,7 @@ Interacción con animaciones Interazione con animazioni Взаимодействие с анимациями + Interaktion mit Animationen 애니메이션 있는 상호작용 車両アニメーションベースのインタラクション @@ -1340,6 +1341,7 @@ Limita algunas interacciones en vehículos tripulador por facciones enemigas. Limita alcune interazioni su veicoli con nemici a bordo. Ограничьте некоторые взаимодействия на транспортных средствах, управляемых вражеской стороной. + Beschränkt einige Interaktionen auf Fahrzeuge, die von feindlichen Fraktionen besetzt sind. 적 진영이 탑승한 차량과의 일부 상호작용을 제한합니다. 敵性力の乗員が乗っている車両へのインタラクションを一部制限します。 @@ -1349,6 +1351,7 @@ Interactuar Con Tripulación Enemiga Interazioni con equipaggio nemico Взаимодействие с вражеским экипажем + Interaktion mit feindlicher Besatzung 적 승무원과의 상호작용 敵乗員がいる状態でのインタラクト @@ -1358,6 +1361,7 @@ Permitir para Armas Estáticas Permetti con armi statiche Разрешить использование статического оружия + Erlaube für statische Waffen 고정화기 허용 固定火器での許可 @@ -1380,6 +1384,7 @@ Permite abandonar y cambiar el color del equipo de cualquier unidad en la escuadra del jugador Permetti di cambiare il colore o rimuovere una qualsiasi unità della propria squadra Позволяет сбрасывать и менять командные цвета любого подразделения в отряде игрока + Erlaubt das Ändern der Teamfarbe einer beliebigen Einheit in der Gruppe des Spielers 플레이어 분대의 모든 유닛을 삭제하고 팀 색상 변경하는 것을 허용합니다. プレイヤー分隊内の任意のユニットにチームからの脱退と色の変更を許可します @@ -1389,6 +1394,7 @@ Gestión Remota de Escuadra Gestione squadra da remoto Дистанционное управление отрядом + Fernverwaltung von Gruppen 분대 원격 관리 遠隔分隊管理 diff --git a/addons/maverick/stringtable.xml b/addons/maverick/stringtable.xml index 7c7fae20782..38f8bb13eae 100644 --- a/addons/maverick/stringtable.xml +++ b/addons/maverick/stringtable.xml @@ -8,6 +8,7 @@ AGM-65 Maverick D AGM-65 Maverick D AGM-65 Maverick D + AGM-65 Maverick D AGM-65 매버릭 D AGM-65 マーベリック D @@ -17,6 +18,7 @@ AGM-65 Maverick D [ACE] AGM-65 Maverick D [ACE] AGM-65 Maverick D [ACE] + AGM-65 Maverick D [ACE] AGM-65 매버릭 D [ACE] AGM-65 マーベリック D [ACE] @@ -26,6 +28,7 @@ 3x AGM-65 Maverick D [ACE] 3x AGM-65 Maverick D [ACE] 3x AGM-65 Maverick D [ACE] + 3x AGM-65 Maverick D [ACE] 3x AGM-65 매버릭 D [ACE] 3x AGM-65 マーベリック D [ACE] @@ -35,6 +38,7 @@ AGM-65 Maverick G AGM-65 Maverick G AGM-65 Maverick G + AGM-65 Maverick G AGM-65 매버릭 G AGM-65 マーベリック G @@ -44,6 +48,7 @@ AGM-65 Maverick G [ACE] AGM-65 Maverick G [ACE] AGM-65 Maverick G [ACE] + AGM-65 Maverick G [ACE] AGM-65 매버릭 G [ACE] AGM-65 マーベリック G [ACE] @@ -53,6 +58,7 @@ 2x AGM-65 Maverick G [ACE] 2x AGM-65 Maverick G [ACE] 2x AGM-65 Maverick G [ACE] + 2x AGM-65 Maverick G [ACE] 2x AGM-65 매버릭 G [ACE] 2x AGM-65 マーベリック G [ACE] @@ -62,6 +68,7 @@ 3x AGM-65 Maverick G [ACE] 3x AGM-65 Maverick G [ACE] 3x AGM-65 Maverick G [ACE] + 3x AGM-65 Maverick G [ACE] 3x AGM-65 매버릭 G [ACE] 3x AGM-65 マーベリック G [ACE] diff --git a/addons/medical_damage/stringtable.xml b/addons/medical_damage/stringtable.xml index f3408868d7e..74573d14d75 100644 --- a/addons/medical_damage/stringtable.xml +++ b/addons/medical_damage/stringtable.xml @@ -392,7 +392,7 @@ Szana na śmierć przy śmiertelej ranie Chance de Morte por Ferimento Fatal Вероятность смерти от смертельной травмы - Tödliche Verletzung - Wahrscheinlichkeit des Todes + Sterbewahrscheinlichkeit bei tödlichen Verletzungen 치명상 사망 확률 致命傷による死亡確率 致命伤死亡概率 @@ -846,6 +846,7 @@ Sets the amount of damage limbs can receive before going critical, leading to death. Must be over 0 for any effect.\nRequires the "Use Limb Damage" setting to be enabled and "Fatal Damage Source" to be set to "Sum of Trauma" or "Either".\nStacks multiplicatively with the overall unit Damage Threshold. Doesn't interact with fractures/limping at all. Устанавливает величину урона, который могут получить конечности, прежде чем урон станет критическим, что приведет к смерти. Для любого эффекта должно быть больше 0.\nТребуется, чтобы настройка "Использовать урон конечностям" была включена, а "Причина смертельного урона" была установлена на "Совокупность травмы" или "Оба".\nУмножается с общим порогом повреждения. Никак не взаимодействует с переломами или хроманием. + Legt die Menge an Gliedmaßenschaden fest, bevor sie kritisch werden und zum Tod führen. Muss über 0 liegen, um einen Effekt zu bewirken.\nDie Einstellung "Verwende Gliedmaßenschaden" muss aktiviert und "Quelle für tödlichen Schaden" muss auf "Summe aller Traumata" oder "Beide" eingestellt sein.\nStapelt sich multiplikativ mit der Gesamtschadensschwelle der Einheit. Interagiert nicht mit Brüchen/Humpeln. 致命的状態となり死亡する前に手足が受けられるダメージの量を設定します。\n効果の発動には0より大きい数字に設定する必要があります。\n"手足のダメージを使用" 設定を有効化した上で "致命ダメージの原因" を "外傷の合計" または "どちらか" に設定する必要があります。\nユニット全体のダメージしきい値に対して乗算的に上乗せされます。 骨折や足の引きずり(跛行)とは無関係です。 치명적인 상태가 되어 죽음에 이르기 전까지 사지에 받는 피해량을 설정합니다. 효과가 생기려면 값이 0보다 커야 합니다.\n"사지 피해 사용" 설정을 활성화하고 "치명상의 원인"을 "외상 중첩" 또는 "둘 다"로 설정해야 합니다.\n전체 유닛 피해량 임계값과 곱해져서 누적됩니다. 골절/절뚝거림과는 전혀 상관 없습니다. Définit la quantité de dégâts que les membres peuvent recevoir avant de devenir critiques et d'entraîner la mort. Doit être supérieur à 0 pour avoir un effet.\nIl faut que le paramètre « Utiliser les dommages aux membres » soit activé et que « Cause de blessure mortelle » soit réglé sur « Somme des traumatismes » ou « Les deux ».\nS'empile de façon multiplicative avec le seuil de dégâts de l'unité globale. N'interagit pas du tout avec les fractures et le boitement. @@ -853,6 +854,7 @@ Limb Damage Threshold Порог повреждения конечностей + Schwelle für Gliedmaßenschaden 手足のダメージしきい値 사지 피해량 임계값 Seuil de dommages aux membres @@ -860,6 +862,7 @@ Controls whether limb damage is taken into account for sum of trauma calculations. Определяет, учитывается ли повреждение конечностей при расчете совокупности травм. + Legt fest, ob Gliedmaßenschäden bei der Berechnung der Summe aller Traumata berücksichtigt werden. "外傷の合計" の計算に手足のダメージを考慮するかどうかを制御します。 외상 중첩을 계산할 때 사지 피해량을 고려할지 여부를 제어합니다. Contrôle si les dommages aux membres sont pris en compte dans les calculs de la somme des traumatismes. @@ -867,6 +870,7 @@ Use Limb Damage Использовать урон конечностям + Verwende Gliedmaßenschaden 手足のダメージを使用 사지 피해 사용 Utiliser les dommages aux membres diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml index 0558baed027..1f2df11e134 100644 --- a/addons/medical_treatment/stringtable.xml +++ b/addons/medical_treatment/stringtable.xml @@ -745,7 +745,7 @@ Zezwalaj na pakowanie nieprzytomnych osób do worka na ciało. Permite colocar um paciente inconsciente em um saco de cadáver. Разрешает упаковывать пациентов без сознания в мешки для трупов. - Aktiviert, Bewusstlose in Leichensack zu legen. + Erlaubt es, Bewusstlose in Leichensäcke zu legen. 기절 상태의 인원을 시체 운반용 부대에 옮겨 담을 수 있는 지를 정합니다. 無意識状態のプレイヤーを遺体袋へ入れることが出来る様にします。 能够将昏迷的伤员装入尸袋中。 @@ -758,7 +758,7 @@ Nieprzytomni w worku na ciało Permitir inconscientes em sacos de cadáver Упаковка без сознания в мешки для трупов - Erlaube Benutzung des Leichensackes mit bewusstlosen Personen + Erlaube Bewusstlose in Leichensäcken zu legen 기절 인원 시체 운반용 부대에 옮기기 無意識者の遺体袋への収容許可 允许昏迷者装入尸袋 @@ -974,6 +974,7 @@ Medic's Equipment First [If medic role] Сначала медикаменты врача [Если медик] + Ausrüstung des Sanitäters zuerst [Wenn Sanitäter] 救護者装備を優先 [衛生兵の場合] 치료자의 의료물자 먼저 사용 [의무병일 경우] @@ -2560,7 +2561,7 @@ Konwertuj przedmioty z vanili Converter itens vanilla Преобразовывать ванильные медикаменты - Standard Arma-Equipment in ACE-Items umwandeln + Umwandlung von Arma-Equipment 바닐라 아이템 전환 バニラアイテムの変換 轉換原版物品 @@ -3087,6 +3088,7 @@ Controls where Adenosine can be used. Контролирует, где можно использовать Аденозин. + Legt fest, wo Adenosin benutzt werden kann. アデノシンが使える場所を制御します。 아데노신을 사용할 수 있는 장소를 정합니다. Contrôle où l'Adénosine peut être utilisée. @@ -3094,6 +3096,7 @@ Locations Adenosine Места использования Аденозина + Orte für Adenosin アデノシンの使用可能な場所 아데노신 사용 장소 Lieux d'utilisation de l'adénosine @@ -3107,7 +3110,7 @@ Kontroluje, gdzie można stosować epinefrynę. Controla onde Epinefrina pode ser utilizada. Контролирует, где можно использовать Адреналин. - Legt fest, wo Epinephrin genutzt werden kann. + Legt fest, wo Epinephrin benutzt werden kann. 에피네프린을 사용할 수 있는 장소를 정합니다. アドレナリンが使える場所を制御します。 控制何處能使用腎上腺素 @@ -3138,7 +3141,7 @@ Kontroluje w jakich miejscach można robić transfuzje IV. Controla onde as transfusões IV podem ser realizadas. Контролирует, где можно использовать внутревенное переливание. - Kontrolliert, wo IV-Transfusionen durchgeführt werden können. + Legt fest, wo IV-Transfusionen verabreicht werden können. 수액용기를 사용할 수 있는 장소를 정합니다. IV 輸液を行える場所を制御します。 控制何地可以静脉输液 @@ -3151,7 +3154,7 @@ Miejsca do transfuzji IV Locais para transfusão IV Места внутривенного переливания - Orte an denen IV-Transfusionen angelegt werden können + Orte für IV-Transfusionen 수액용기 사용 장소 IV輸液の可能な場所 静脉输液地点 @@ -3159,6 +3162,7 @@ Controls where Morphine can be used. Контролирует, где можно использовать Морфин. + Legt fest, wo Morphin benutzt werden kann. モルヒネが使える場所を制御します。 모르핀을 사용할 수 있는 장소를 정합니다. Contrôle où la morphine peut être utilisée. @@ -3166,6 +3170,7 @@ Locations Morphine Места использования Морфина + Orte für Morphin モルヒネの使用可能な場所 모르핀 사용 장소 Lieux d'utilisation de la morphine @@ -3179,7 +3184,7 @@ Kontroluje, gdzie można korzystać z apteczek osobistych. Controla onde o KPS pode ser utilizado. Контролирует, где можно использовать Аптечку. - Kontrolliert, wo ein Erste-Hilfe-Set benutzt werden kann. + Legt fest, wo ein Erste-Hilfe-Set benutzt werden kann. 개인응급키트을 사용할 수 있는 장소를 정합니다. PAKが使える場所を制御します。 控制何處能使用個人急救包 @@ -3206,6 +3211,7 @@ Controls where Splints can be used. Контролирует, где можно использовать шины. + Legt fest, wo eine Schiene benutzt werden kann. 添え木が使える場所を制御します。 부목을 사용할 수 있는 장소를 정합니다. Contrôle l'endroit où les attelles peuvent être utilisées. @@ -3213,6 +3219,7 @@ Locations Splint Места наложения шины + Orte für Schiene 添え木の使用可能な場所 부목 사용 장소 Emplacement des attelles @@ -3226,7 +3233,7 @@ Kontroluje, gdzie można użyć Zestawu Chirurgicznego. Controle onde o Kit Cirúrgico pode ser utilizado. Контролирует, где можно использовать Хирургический набор - Legt fest, wo ein Operations-Set genutzt werden kann. + Legt fest, wo ein Operations-Set benutzt werden kann. 봉합 키트를 사용할 수 있는 장소를 정합니다. 手術キットが使える場所を制御します。 控制何處能使用手術包 @@ -3299,6 +3306,7 @@ Training level required to use Adenosine. Уровень подготовки, необходимый для использования Аденозина + 'Fähigkeiten-Level', das benötigt wird, um Adenosin zu benutzen. アデノシンの使用に必要な医療スキルのレベルを設定します。 아데노신을 사용하는데 필요한 등급을 정합니다. Niveau de formation requis pour utiliser l'Adénosine. @@ -3306,6 +3314,7 @@ Allow Adenosine Доступ к Аденозину + Erlaube Adenosin アデノシンの許可 아데노신 사용 허가 Autoriser l'adénosine @@ -3319,7 +3328,7 @@ Poziom wyszkolenia wymagany do korzystania z epinefryny. É necessária uma qualificação médica para usar epinefrina. Уровень подготовки, необходимый для использования Адреналина. - 'Fähigkeiten-Level', das benötigt wird, um Epinephrin zu nutzen. + 'Fähigkeiten-Level', das benötigt wird, um Epinephrin zu benutzen. 에피네프린을 사용하는데 필요한 등급을 정합니다. アドレナリンの使用に必要な医療スキルのレベルを設定します。 要受過何種程度的醫療訓練才可以使用腎上腺素 @@ -3375,6 +3384,7 @@ Training level required to use Morphine. Уровень подготовки, необходимый для использования Морфина. + 'Fähigkeiten-Level', das benötigt wird, um Morphin zu benutzen. モルヒネの使用に必要な医療スキルのレベルを設定します。 모르핀을 사용하는데 필요한 등급을 정합니다. Niveau de formation requis pour l'utilisation de la morphine. @@ -3382,6 +3392,7 @@ Allow Morphine Доступ к Морфину + Erlaube Morphin モルヒネの許可 모르핀 사용 허가 Autoriser la morphine @@ -3395,7 +3406,7 @@ Poziom wyszkolenia wymagany do korzystania z apteczek osobistych. É necessária uma qualificação médica para usar KPS Уровень подготовки, необходимый для использования Аптечки. - 'Fähigkeiten-Level', das benötigt wird, um ein Erste-Hilfe-Set zu nutzen. + 'Fähigkeiten-Level', das benötigt wird, um ein Erste-Hilfe-Set zu benutzen. 개인응급키트을 사용하는 데 필요한 등급을 정합니다. PAKの使用に必要な医療スキルのレベルを設定します。 要受過何種程度的醫療訓練才可以使用個人急救包 @@ -3422,6 +3433,7 @@ Training level required to use Splint. Уровень подготовки, необходимый для использования шины. + 'Fähigkeiten-Level', das benötigt wird, um eine Schiene zu benutzen. 添え木の使用に必要な医療スキルのレベルを設定します。 부목을 사용하는데 필요한 등급을 정합니다. Niveau de formation requis pour l'utilisation de l'attelle. @@ -3429,6 +3441,7 @@ Allow Splint Доступ к наложению шины + Erlaube Schiene 添え木の許可 부목 사용 허가 Accès aux attelles @@ -3442,7 +3455,7 @@ Poziom wyszkolenia wymagany do korzystania z Zestawu Chirurgicznego. É necessária uma qualificação médica para usar Kit Cirúrgico Уровень медицинской подготовки, необходимый для использования Хирургического набора. - 'Fähigkeiten-Level', das benötigt wird um ein Operations-Set zu nutzen. + 'Fähigkeiten-Level', das benötigt wird um ein Operations-Set zu benutzen. 봉합 키트를 사용하는데 필요한 등급을 정합니다. 手術キットの使用に必要な医療スキルのレベルを設定します。 要受過多少程度的醫療訓練才能使用手術包。 @@ -3600,6 +3613,7 @@ Makes Check Pulse action give a numerical value based on setting Заставляет действие контрольного импульса выдавать числовое значение, основанное на настройке + Die Aktion "Puls überprüfen" liefert einen numerischen Wert abhängig von der Einstellung 脈拍の確認アクションから得られる情報が数値化されるようになる医療レベルを設定します 설정에 따라 맥박 확인 행동을 통해 숫자로 표시된 값을 제공합니다. L'action de vérification du pouls fournit une valeur numérique, en fonction de vos paramètres. @@ -3607,6 +3621,7 @@ Numerical Pulse Числовое значение пульса + Numerischer Puls 脈拍の数値化 맥박 수치 Pouls numérique diff --git a/addons/missile_aim120/stringtable.xml b/addons/missile_aim120/stringtable.xml index f9ad460f141..8b8a1e53180 100644 --- a/addons/missile_aim120/stringtable.xml +++ b/addons/missile_aim120/stringtable.xml @@ -6,6 +6,7 @@ AIM-120A [ACE] AIM-120A [ACE] AIM-120A [ACE] + AIM-120A [ACE] AIM-120A 암람 [ACE] @@ -13,6 +14,7 @@ 1x AIM-120A [ACE] 1x AIM-120A [ACE] 1x AIM-120A [ACE] + 1x AIM-120A [ACE] 1x AIM-120A 암람 [ACE] @@ -20,6 +22,7 @@ AIM-120 [ACE] AIM-120 [ACE] AIM-120 [ACE] + AIM-120 [ACE] AIM-120 암람 [ACE] @@ -27,6 +30,7 @@ AIM-120C [ACE] AIM-120C [ACE] AIM-120C [ACE] + AIM-120C [ACE] AIM-120C 암람 [ACE] @@ -34,6 +38,7 @@ 1x AIM-120C [ACE] 1x AIM-120C [ACE] 1x AIM-120C [ACE] + 1x AIM-120C [ACE] 1x AIM-120C 암람 [ACE] @@ -41,6 +46,7 @@ 2x AIM-120C [ACE] 2x AIM-120C [ACE] 2x AIM-120C [ACE] + 2x AIM-120C [ACE] 2x AIM-120C 암람 [ACE] @@ -48,6 +54,7 @@ AIM-120D [ACE] AIM-120D [ACE] AIM-120D [ACE] + AIM-120D [ACE] AIM-120D 암람 [ACE] @@ -55,6 +62,7 @@ 1x AIM-120D [ACE] 1x AIM-120D [ACE] 1x AIM-120D [ACE] + 1x AIM-120D [ACE] 1x AIM-120D 암람 [ACE] @@ -62,6 +70,7 @@ 2x AIM-120D [ACE] 2x AIM-120D [ACE] 2x AIM-120D [ACE] + 2x AIM-120D [ACE] 2x AIM-120D 암람 [ACE] @@ -69,6 +78,7 @@ Direct ダイレクト Прямой + Direct 다이렉트 @@ -76,6 +86,7 @@ Loft ロフト Сверху + Loft 로프트 @@ -83,6 +94,7 @@ R-77 [ACE] R-77 [ACE] R-77 [ACE] + R-77 [ACE] R-77 빔펠 [ACE] @@ -90,6 +102,7 @@ 1x R-77 [ACE] 1x R-77 [ACE] 1x R-77 [ACE] + 1x R-77 [ACE] 1x R-77 빔펠 [ACE] diff --git a/addons/missile_aim9/stringtable.xml b/addons/missile_aim9/stringtable.xml index 767fffbf4cb..c328197c616 100644 --- a/addons/missile_aim9/stringtable.xml +++ b/addons/missile_aim9/stringtable.xml @@ -5,90 +5,105 @@ AIM-9M [ACE] AIM-9M [ACE] AIM-9M [ACE] + AIM-9M [ACE] AIM-9M 사이드와인더 [ACE] AIM-9X [ACE] AIM-9X [ACE] AIM-9X [ACE] + AIM-9X [ACE] AIM-9X 사이드와인더 [ACE] AIM-132 [ACE] AIM-132 [ACE] AIM-132 [ACE] + AIM-132 [ACE] AIM-132 아스람 [ACE] R-73 [ACE] R-73 [ACE] R-73 [ACE] + R-73 [ACE] R-73 빔펠 [ACE] R-74 [ACE] R-74 [ACE] R-74 [ACE] + R-74 [ACE] R-74 빔펠 [ACE] 1x AIM-9M [ACE] 1x AIM-9M [ACE] 1x AIM-9M [ACE] + 1x AIM-9M [ACE] 1x AIM-9M 사이드와인더 [ACE] 2x AIM-9M [ACE] 2x AIM-9M [ACE] 2x AIM-9M [ACE] + 2x AIM-9M [ACE] 2x AIM-9M 사이드와인더 [ACE] 1x AIM-9X [ACE] 1x AIM-9X [ACE] 1x AIM-9X [ACE] + 1x AIM-9X [ACE] 1x AIM-9X 사이드와인더 [ACE] 2x AIM-9X [ACE] 2x AIM-9X [ACE] 2x AIM-9X [ACE] + 2x AIM-9X [ACE] 2x AIM-9X 사이드와인더 [ACE] 1x AIM-132 [ACE] 1x AIM-132 [ACE] 1x AIM-132 [ACE] + 1x AIM-132 [ACE] 1x AIM-132 아스람 [ACE] 2x AIM-132 [ACE] 2x AIM-132 [ACE] 2x AIM-132 [ACE] + 2x AIM-132 [ACE] 2x AIM-132 아스람 [ACE] 4x AIM-132 [ACE] 4x AIM-132 [ACE] 4x AIM-132 [ACE] + 4x AIM-132 [ACE] 4x AIM-132 아스람 [ACE] 1x R-73 [ACE] 1x R-73 [ACE] 1x R-73 [ACE] + 1x R-73 [ACE] 1x R-73 빔펠 [ACE] 1x R-74 [ACE] 1x R-74 [ACE] 1x R-74 [ACE] + 1x R-74 [ACE] 1x R-74 빔펠 [ACE] 2x R-74 [ACE] 2x R-74 [ACE] 2x R-74 [ACE] + 2x R-74 [ACE] 2x R-74 빔펠 [ACE] diff --git a/addons/missile_gbu/stringtable.xml b/addons/missile_gbu/stringtable.xml index c53a4c4c322..0e1bed9262a 100644 --- a/addons/missile_gbu/stringtable.xml +++ b/addons/missile_gbu/stringtable.xml @@ -7,6 +7,7 @@ GBU-12 [ACE] GBU-12 [ACE] GBU-12 [ACE] + GBU-12 [ACE] GBU-12 페이브웨이 II [ACE] GBU-12 [ACE] @@ -16,6 +17,7 @@ 1x GBU-12 [ACE] 1x GBU-12 [ACE] 1x GBU-12 [ACE] + 1x GBU-12 [ACE] 1x GBU-12 페이브웨이 II [ACE] 1x GBU-12 [ACE] @@ -25,6 +27,7 @@ 2x GBU-12 [ACE] 2x GBU-12 [ACE] 2x GBU-12 [ACE] + 2x GBU-12 [ACE] 2x GBU-12 페이브웨이 II [ACE] 2x GBU-12 [ACE] @@ -34,6 +37,7 @@ 4x GBU-12 [ACE] 4x GBU-12 [ACE] 4x GBU-12 [ACE] + 4x GBU-12 [ACE] 4x GBU-12 페이브웨이 II [ACE] 4x GBU-12 [ACE] @@ -43,6 +47,7 @@ FAB-250M-54 [ACE] FAB-250M-54 [ACE] ФАБ-250M-54 [ACE] + FAB-250M-54 [ACE] FAB-250M-54 [ACE] FAB-250M-54 [ACE] @@ -52,6 +57,7 @@ 1x FAB-250M-54 [ACE] 1x FAB-250M-54 [ACE] 1x ФАБ-250M-54 [ACE] + 1x FAB-250M-54 [ACE] 1x FAB-250M-54 [ACE] 1x FAB-250M-54 [ACE] @@ -61,6 +67,7 @@ 2x FAB-250M-54 [ACE] 2x FAB-250M-54 [ACE] 2x ФАБ-250M-54 [ACE] + 2x FAB-250M-54 [ACE] 2x FAB-250M-54 [ACE] 2x FAB-250M-54 [ACE] diff --git a/addons/missile_manpad/stringtable.xml b/addons/missile_manpad/stringtable.xml index 215f40974b8..3fecc302f4f 100644 --- a/addons/missile_manpad/stringtable.xml +++ b/addons/missile_manpad/stringtable.xml @@ -5,24 +5,28 @@ FIM-92 Stinger [ACE] FIM-92 スティンガー [ACE] FIM-92 Stinger [ACE] + FIM-92 Stinger [ACE] FIM-92 스팅어 [ACE] RIM-116 [ACE] RIM-116 [ACE] RIM-116 [ACE] + RIM-116 [ACE] RIM-116 RAM [ACE] 21x RIM-116 [ACE] 21x RIM-116 [ACE] 21x RIM-116 [ACE] + 21x RIM-116 [ACE] 21x RIM-116 RAM [ACE] 4x FIM-92 Stinger [ACE] 4x FIM-92 スティンガー [ACE] 4x FIM-92 Stinger [ACE] + 4x FIM-92 Stinger [ACE] 4x FIM-92 스팅어 [ACE] diff --git a/addons/missile_sam/stringtable.xml b/addons/missile_sam/stringtable.xml index 9f2f6591b0b..a8ff3cea0a0 100644 --- a/addons/missile_sam/stringtable.xml +++ b/addons/missile_sam/stringtable.xml @@ -6,6 +6,7 @@ Mk-29 ESSM Mk-29 ESSM Mk-29 ESSM + Mk-29 ESSM 마크 29 ESSM @@ -13,6 +14,7 @@ RIM-162 ESSM RIM-162 ESSM RIM-162 ESSM + RIM-162 ESSM RIM-162 ESSM @@ -20,6 +22,7 @@ Mk-29 Operator Mk-29 操作員 Mk-29 Operator + Mk-29 Bediener 마크 29 조작병 @@ -27,6 +30,7 @@ MIM-104 Patriot MIM-104 ペトリオット MIM-104 Patriot + MIM-104 Patriot MIM-104 패트리어트 @@ -34,6 +38,7 @@ Patriot Missile ペトリオット ミサイル Patriot Missile + Patriot Rakete 패트리어트 미사일 @@ -41,6 +46,7 @@ MIM-104 Operator MIM-104 操作員 MIM-104 Operator + MIM-104 Bediener MIM-104 패트리어트 조작병 @@ -48,6 +54,7 @@ S-400 S-400 S-400 + S-400 S-400 트리움프 @@ -55,6 +62,7 @@ S-400 Missile S-400 ミサイル S-400 Missile + S-400 Rakete S-400 트리움프 미사일 @@ -62,6 +70,7 @@ S-400 Operator S-400 操作員 S-400 Operator + S-400 Bediener S-400 트리움프 조작병 diff --git a/addons/missile_vikhr/stringtable.xml b/addons/missile_vikhr/stringtable.xml index 4d61d0fbe27..5afe7a4bdf5 100644 --- a/addons/missile_vikhr/stringtable.xml +++ b/addons/missile_vikhr/stringtable.xml @@ -7,6 +7,7 @@ 1x 9k121 Vikhr [ACE] 1x 9k121 Vikhr [ACE] 1x 9k121 Вихрь [ACE] + 1x 9k121 Vikhr [ACE] 1x 9K121 베프리 [ACE] 1x 9k121 ヴィーフリ [ACE] @@ -16,6 +17,7 @@ 2x 9k121 Vikhr [ACE] 2x 9k121 Vikhr [ACE] 2x 9k121 Вихрь [ACE] + 2x 9k121 Vikhr [ACE] 2x 9K121 베프리 [ACE] 2x 9k121 ヴィーフリ [ACE] @@ -25,6 +27,7 @@ 3x 9k121 Vikhr [ACE] 3x 9k121 Vikhr [ACE] 3x 9k121 Вихрь [ACE] + 3x 9k121 Vikhr [ACE] 3x 9K121 베프리 [ACE] 3x 9k121 ヴィーフリ [ACE] @@ -34,6 +37,7 @@ 4x 9k121 Vikhr [ACE] 4x 9k121 Vikhr [ACE] 4x 9k121 Вихрь [ACE] + 4x 9k121 Vikhr [ACE] 4x 9K121 베프리 [ACE] 4x 9k121 ヴィーフリ [ACE] @@ -43,6 +47,7 @@ 6x 9k121 Vikhr [ACE] 6x 9k121 Vikhr [ACE] 6x 9k121 Вихрь [ACE] + 6x 9k121 Vikhr [ACE] 6x 9K121 베프리 [ACE] 6x 9k121 ヴィーフリ [ACE] @@ -52,6 +57,7 @@ 8x 9k121 Vikhr [ACE] 8x 9k121 Vikhr [ACE] 8x 9k121 Вихрь [ACE] + 8x 9k121 Vikhr [ACE] 8x 9K121 베프리 [ACE] 8x 9k121 ヴィーフリ [ACE] @@ -61,6 +67,7 @@ 9k121 Vikhr [ACE] 9k121 Vikhr [ACE] 9k121 Вихрь [ACE] + 9k121 Vikhr [ACE] 9K121 베프리 [ACE] 9k121 ヴィーフリ [ACE] diff --git a/addons/missileguidance/stringtable.xml b/addons/missileguidance/stringtable.xml index f50083b4474..e10130bfb37 100644 --- a/addons/missileguidance/stringtable.xml +++ b/addons/missileguidance/stringtable.xml @@ -109,6 +109,7 @@ 12x DAGR [ACE] 12x DAGR [ACE] 12x DAGR [ACE] + 12x DAGR [ACE] 12x DAGR [ACE] 12x DAGR [ACE] @@ -118,6 +119,7 @@ 24x DAGR [ACE] 24x DAGR [ACE] 24x DAGR [ACE] + 24x DAGR [ACE] 24x DAGR [ACE] 24x DAGR [ACE] @@ -127,6 +129,7 @@ 6x DAGR [ACE] 6x DAGR [ACE] 6x DAGR [ACE] + 6x DAGR [ACE] 6x DAGR [ACE] 6x DAGR [ACE] diff --git a/addons/overheating/stringtable.xml b/addons/overheating/stringtable.xml index eb0973d456f..8a98482aa8b 100644 --- a/addons/overheating/stringtable.xml +++ b/addons/overheating/stringtable.xml @@ -861,7 +861,7 @@ Szansa na to, że przy przeładowaniu broni zacięcie nie zostanie usunięte, przez co czynność będzie musiała zostać powtórzona ponownie. Probabilidade que uma ação de desemperramento falhe, tendo que ser repetida Вертоятность того, что устранение заклинивания не сработает, и его придется повторить. - Wahrscheinlichkeit, dass der Versuch eine Ladehemmung zu beheben fehl schlägt und erneut durchgeführt werden muss. + Wahrscheinlichkeit, dass der Versuch eine Ladehemmung zu beheben fehlschlägt und erneut durchgeführt werden muss. 기능고장 해결 시도 시 실패할 확률이 있습니다. 이는 다시 기능고장 해결을 시도해야함을 의미합니다. 弾詰まり解除のアクションに失敗し、再実行が必要になる確率。 清除卡彈時有可能會失敗,需要反覆進行清槍。 @@ -923,7 +923,7 @@ Determina se la sostituzione della canna disinceppa l'arma. Określa, czy wymiana lufy usuwa zacięcie się broni. Определяет, устраняет ли замена ствола заклинивание оружия. - Bestimmt, ob das Wechseln des Laufes eine Ladehemmung behebt. + Legt fest, ob ein Laufwechsel Ladehemmungen behebt. 총열을 교체하면서 기능고장을 해결합니다. 銃身を交換して弾詰まりの解消をできるようにします。 通过更换枪管,以便清除卡弹。 @@ -935,7 +935,7 @@ Disinceppa l'arma col cambio canna Usuń zacięcie przy wymianie lufy Замена ствола устраняет клин оружия - Ladehemmung beim Wechseln des Laufes beheben. + Ladehemmung beim Laufwechsel beheben 총열 교환 시 기능고장 해결 銃身交換による弾詰まり解消 更换枪管清除卡弹 diff --git a/addons/parachute/stringtable.xml b/addons/parachute/stringtable.xml index f36d09b4657..79532386f30 100644 --- a/addons/parachute/stringtable.xml +++ b/addons/parachute/stringtable.xml @@ -60,7 +60,7 @@ Szansa na nieotwarcie się spadochronu Probabilidade de falha do paraquedas Вероятность отказа парашюта - Wahrscheinlichkeit, dass ein Fallschirm sich nicht öffnet + Wahrscheinlichkeit eines Fallschirmversagens 낙하산 펼치기 실패 확률 開傘失敗率 开伞失败率 diff --git a/addons/reload/stringtable.xml b/addons/reload/stringtable.xml index 465aa675801..cf445662a58 100644 --- a/addons/reload/stringtable.xml +++ b/addons/reload/stringtable.xml @@ -115,7 +115,7 @@ Zawsze pokazuj interakcję od sprawdzania amunicji Sempre mostrar a opção de checar a própria munição Всегда показывать проверку боеприпасов - Zeige immer die Selbstinteraktion zur Prüfung der Munition an. + Selbstinteraktion zur Munitionsprüfung immer anzeigen 상호작용에 탄약 확인을 항상 띄우기 弾薬確認アクションを常に表示 總是在自我互動中顯示檢查彈藥動作 diff --git a/addons/ui/stringtable.xml b/addons/ui/stringtable.xml index 234e083f001..cc5a38983cd 100644 --- a/addons/ui/stringtable.xml +++ b/addons/ui/stringtable.xml @@ -728,6 +728,7 @@ Ocultar toda la IU Nascondi tutta l'IU Скрыть весь интерфейс + Gesamte Benutzeroberfläche ausblenden 모든 UI 숨기기 全てのUIを隠す diff --git a/addons/weather/stringtable.xml b/addons/weather/stringtable.xml index 4f92af160a4..75f9592ed75 100644 --- a/addons/weather/stringtable.xml +++ b/addons/weather/stringtable.xml @@ -127,7 +127,7 @@ Pokaż akcje sprawdzającą temperaturę powietrza Mostrar a ação "Checar a temperatura do ar" Показывать действие проверки температуры - Zeige "Überprüfe Lufttemperatur" im Selbstinteraktionsmenü + Zeige "Überprüfe Lufttemperatur" Interaktion 상호작용에서 기온 측정하기 표시 気温を確認のアクションを表示 顯示檢查氣溫動作 From 69782002f7a6ae0386937e96f9fc4318057f0e8b Mon Sep 17 00:00:00 2001 From: Hexo <130893962+Alfred-Neuman@users.noreply.github.com> Date: Mon, 23 Dec 2024 01:18:50 +0100 Subject: [PATCH 30/35] Translations - French (#10595) Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> Co-authored-by: PabstMirror Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> --- addons/fieldmanual/stringtable.xml | 2 ++ addons/hearing/stringtable.xml | 8 ++++++++ addons/medical_treatment/stringtable.xml | 1 + addons/missile_aim9/stringtable.xml | 15 +++++++++++++++ addons/missile_manpad/stringtable.xml | 4 ++++ 5 files changed, 30 insertions(+) diff --git a/addons/fieldmanual/stringtable.xml b/addons/fieldmanual/stringtable.xml index b77b0665f50..759f61a1e82 100644 --- a/addons/fieldmanual/stringtable.xml +++ b/addons/fieldmanual/stringtable.xml @@ -91,6 +91,7 @@ O %3Horus ATragMX%4 considera condições atmosféricas, dados de armas, munição, alcance, e velocidade do projétil - e até os efeitos Coriolis e Spin - para calcular as configurações necessárias da mira. O %3ATragMX%4, carregado em um computador portátil feito pela %3TDS Recon%4, é rápido e fácil de usar. O %3Recon%4 satisfaz os rigorosos padrões militares %3MIL-STD-810F%4 para quedas, vibrações, umidade, altitude e temperaturas extremas.<br/><br/>%3Uso:%4<br/>Por favor, visite a wiki para mais informações. %3호러스 ATragMX%4는 대기 상태, 총기 데이터, 탄약, 사거리, 탄속 그리고 총구 속도를 고려하여 %3나타나는 결과%4로 정확한 해결책을 계산하고 %3코리올리 효과%4와 %3스핀 드리프트 효과%4도 설명합니다. %3TDS Recon%4 사에서 제작한 휴대용 컴퓨터에 탑재된 %3ATragMX%4는 사용하기 쉽고 매우 빠릅니다. %3Recon%4 사는 낙하, 진동, 습도, 고도 및 극한 온도에 대해 엄격한 %3%4MIL-STD-810F%4 군사 표준을 충족합니다.<br/><br/>%3사용 방법:%4<br/>자세한 내용은 위키 페이지를 참조하십시오. %3ホルス ATragMX%4は、大気条件、銃のデータ、弾薬、射程、速度、および初速を考慮した%3最適な結果が得られる%4正確な照準のための計算とその解法を提供します。さらに、%3コリオリ効果%4および%3スピン ドリフト効果%4も考慮します。%3ATragMX%4は%3TDS Recon製%4の携帯コンピュータに読み込まれており、使いやすく、超高速です。%3Recon%4はは、落下、振動、湿度、高度、極端な温度に関する厳格な%3MIL-STD-810F%4軍事規格を満たしています。<br/><br/>%3使用方法:%4<br/>詳細については、Wiki ページを参照してください。 + Le %3Horus ATragMX%4 prend en compte les conditions atmosphériques, les données de l'arme, les munitions, la portée, la vitesse et la vitesse initiale pour calculer des solutions de visée précises avec des résultats %3Come-Up%4 - et prend même en compte les effets %3Coriolis%4 et %3Spin Drift%4. Le %3ATragMX%4, chargé sur un ordinateur de poche fabriqué par %3TDS Recon%4, est facile à utiliser et rapide comme l'éclair. Le %3Recon%4 est conforme à la norme militaire rigoureuse %3MIL-STD-810F%4 concernant les chutes, les vibrations, l'humidité, l'altitude et les températures extrêmes.<br/><br/>%3Utilisation:%4<br/>Veuillez consulter la page wiki pour plus d'informations. Portable, Precise, Rugged @@ -130,6 +131,7 @@ As %3Algema Plásticas%4 permitem a captura e detenção de soldados. Quando apreendidos, o captor se torna capaz de inspecionar os pertences do prisioneiro, liberá-los, ou acompanhá-los a outro local. Transportes mais longos também são possíveis, podendo colocá-los em veículos, se necessário. A depender das configurações, pode ser necessário que as unidades estejam rendidas antes de serem detidas.<br/><br/>%3Uso:%4<br/>%2Aproxime-se da unidade e use [%3%13%4].<br/>%2A interação encontra-se próxima às mãos simbolizada por uma algema.<br/>%2Faça o mesmo para liberar. %3케이블 타이%4를 사용하면 병사가 다른 병사를 포로로 잡고 구금할 수 있습니다. 체포되면 포로는 포로의 소지품을 검사하여 석방하거나 대체 지역으로 동행시킬 수 있습니다. 필요하면 차량에 싣는 것을 포함하여 죄수를 호송할 수도 있습니다. 설정에 따라 유닛은 포로가 되기 전에 항복해야 할 수도 있습니다.<br/><br/>%3사용 방법:%4<br/>%2유닛에 접근하여 [%3%13%4]를 사용하십시오.<br/>%2상호작용은 수갑 아이콘의 형태로 손 부분에 위치합니다.<br/>%2해제 하려면 같은 행동을 반복하십시오. %3ケーブル タイ%4は兵士が他の兵士を拘束できるようにします。一度拘束すれば、拘束者は捕虜の所持品を検査したり、釈放したり、別の場所に移送することができるようになります。必要に応じて車両に積み込むなどして捕虜の輸送や護送も可能です。設定によっては、ユニットは捕虜になる前に降伏する必要がある場合があります。<br/><br/>%3使用方法:%4<br/>%2対象に近づいて [%3%13%4] を使います。<br/>%2インタラクションは、手錠アイコンの形で手のあたりに表示されます。<br/>%2同様の方法で解放できます。 + %3Les serflex%4 permettent à un soldat de capturer et de détenir un autre soldat. Une fois capturé, le soldat peut inspecter les effets personnels du prisonnier, le libérer ou l'accompagner dans une autre zone. Le transport des prisonniers escortés est également possible, y compris leur chargement dans des véhicules si nécessaire. En fonction de vos paramètres, il se peut que les unités doivent se rendre avant d'être capturées.<br/><br/>%3Utilisation:%4<br/>%2Approchez-vous de l'unité et utilisez le [%3%13%4].<br/>%2L'interaction est située autour des mains sous la forme d'une icône de menottes.<br/>%2Répétez l'opération pour libérer l'unité. Take Prisoners diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index a7f7f6687d8..ba468dd2a9c 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -138,6 +138,7 @@ Elektronischer Gehörschutz abgesetzt 電子聴覚保護具を外しました Электронная защита слуха снята + Protection auditive électronique retirée. 전자 청력 보호구 벗음 @@ -145,6 +146,7 @@ Elektronischer Gehörschutz aufgesetzt 電子聴覚保護具を装着しました Электронная защита слуха надета + Protection auditive électronique mise en place 전자 청력 보호구 씀 @@ -152,6 +154,7 @@ Elektronischer Gehörschutz schützt den Träger vor Hörschäden, ohne dass sein Situationsbewusstsein eingeschränkt wird. 電子聴覚保護具は状況認識力を低下させることなく、装着者の聴覚障害を防ぐことができる。 Электронная защита органов слуха защищает пользователя от повреждения слуха, не снижая при этом его осведомленности о ситуации. + Les protections auditives électroniques protègent le porteur contre les lésions auditives sans limiter sa conscience de la situation. 전자 청력 보호구는 상황 인식을 저하시키지 않으면서 착용자의 청력 손상을 예방합니다. @@ -159,6 +162,7 @@ Elektronischer Gehörschutz 電子聴覚保護具 Электронная защита слуха + Protection électronique de l'ouïe 전자 청력 보호구 @@ -166,6 +170,7 @@ Elektronischen Gehörschutz absetzen 電子聴覚保護具を外す Снять электронную защиту слуха + Retirer les protections auditives électroniques 전자 청력 보호구 벗기 @@ -173,6 +178,7 @@ Elektronischen Gehörschutz aufsetzen 電子聴覚保護具を装着 Надеть электронную защиту слуха + Mettre les protections auditives électroniques 전자 청력 보호구 쓰기 @@ -260,6 +266,7 @@ Elektronischer Gehörschutz aufsetzen/absetzen 電子聴覚保護具の着脱 Надеть/снять электронную защиту слуха + Mettre/enlever une protection auditive électronique 전자 청력 보호구 토글 @@ -425,6 +432,7 @@ ELEKTRONISCH 電子聴覚保護 ЭЛЕКТРОННЫЙ + ELECTRONIQUE 전자 청력 보호 diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml index 1f2df11e134..6ffb56e9fc6 100644 --- a/addons/medical_treatment/stringtable.xml +++ b/addons/medical_treatment/stringtable.xml @@ -974,6 +974,7 @@ Medic's Equipment First [If medic role] Сначала медикаменты врача [Если медик] + Équipement de l'infirmier d'abord [Si l'infirmier joue un rôle]. Ausrüstung des Sanitäters zuerst [Wenn Sanitäter] 救護者装備を優先 [衛生兵の場合] 치료자의 의료물자 먼저 사용 [의무병일 경우] diff --git a/addons/missile_aim9/stringtable.xml b/addons/missile_aim9/stringtable.xml index c328197c616..8f89ad11ce3 100644 --- a/addons/missile_aim9/stringtable.xml +++ b/addons/missile_aim9/stringtable.xml @@ -5,6 +5,7 @@ AIM-9M [ACE] AIM-9M [ACE] AIM-9M [ACE] + AIM-9M [ACE] AIM-9M [ACE] AIM-9M 사이드와인더 [ACE] @@ -12,6 +13,7 @@ AIM-9X [ACE] AIM-9X [ACE] AIM-9X [ACE] + AIM-9X [ACE] AIM-9X [ACE] AIM-9X 사이드와인더 [ACE] @@ -19,6 +21,7 @@ AIM-132 [ACE] AIM-132 [ACE] AIM-132 [ACE] + AIM-132 [ACE] AIM-132 [ACE] AIM-132 아스람 [ACE] @@ -26,6 +29,7 @@ R-73 [ACE] R-73 [ACE] R-73 [ACE] + R-73 [ACE] R-73 [ACE] R-73 빔펠 [ACE] @@ -33,6 +37,7 @@ R-74 [ACE] R-74 [ACE] R-74 [ACE] + R-74 [ACE] R-74 [ACE] R-74 빔펠 [ACE] @@ -40,6 +45,7 @@ 1x AIM-9M [ACE] 1x AIM-9M [ACE] 1x AIM-9M [ACE] + 1x AIM-9M [ACE] 1x AIM-9M [ACE] 1x AIM-9M 사이드와인더 [ACE] @@ -47,6 +53,7 @@ 2x AIM-9M [ACE] 2x AIM-9M [ACE] 2x AIM-9M [ACE] + 2x AIM-9M [ACE] 2x AIM-9M [ACE] 2x AIM-9M 사이드와인더 [ACE] @@ -54,6 +61,7 @@ 1x AIM-9X [ACE] 1x AIM-9X [ACE] 1x AIM-9X [ACE] + 1x AIM-9X [ACE] 1x AIM-9X [ACE] 1x AIM-9X 사이드와인더 [ACE] @@ -61,6 +69,7 @@ 2x AIM-9X [ACE] 2x AIM-9X [ACE] 2x AIM-9X [ACE] + 2x AIM-9X [ACE] 2x AIM-9X [ACE] 2x AIM-9X 사이드와인더 [ACE] @@ -68,6 +77,7 @@ 1x AIM-132 [ACE] 1x AIM-132 [ACE] 1x AIM-132 [ACE] + 1x AIM-132 [ACE] 1x AIM-132 [ACE] 1x AIM-132 아스람 [ACE] @@ -75,6 +85,7 @@ 2x AIM-132 [ACE] 2x AIM-132 [ACE] 2x AIM-132 [ACE] + 2x AIM-132 [ACE] 2x AIM-132 [ACE] 2x AIM-132 아스람 [ACE] @@ -82,6 +93,7 @@ 4x AIM-132 [ACE] 4x AIM-132 [ACE] 4x AIM-132 [ACE] + 4x AIM-132 [ACE] 4x AIM-132 [ACE] 4x AIM-132 아스람 [ACE] @@ -89,6 +101,7 @@ 1x R-73 [ACE] 1x R-73 [ACE] 1x R-73 [ACE] + 1x R-73 [ACE] 1x R-73 [ACE] 1x R-73 빔펠 [ACE] @@ -96,6 +109,7 @@ 1x R-74 [ACE] 1x R-74 [ACE] 1x R-74 [ACE] + 1x R-74 [ACE] 1x R-74 [ACE] 1x R-74 빔펠 [ACE] @@ -103,6 +117,7 @@ 2x R-74 [ACE] 2x R-74 [ACE] 2x R-74 [ACE] + 2x R-74 [ACE] 2x R-74 [ACE] 2x R-74 빔펠 [ACE] diff --git a/addons/missile_manpad/stringtable.xml b/addons/missile_manpad/stringtable.xml index 3fecc302f4f..a89c58a6561 100644 --- a/addons/missile_manpad/stringtable.xml +++ b/addons/missile_manpad/stringtable.xml @@ -5,6 +5,7 @@ FIM-92 Stinger [ACE] FIM-92 スティンガー [ACE] FIM-92 Stinger [ACE] + FIM-92 Stinger [ACE] FIM-92 Stinger [ACE] FIM-92 스팅어 [ACE] @@ -12,6 +13,7 @@ RIM-116 [ACE] RIM-116 [ACE] RIM-116 [ACE] + RIM-116 [ACE] RIM-116 [ACE] RIM-116 RAM [ACE] @@ -19,6 +21,7 @@ 21x RIM-116 [ACE] 21x RIM-116 [ACE] 21x RIM-116 [ACE] + 21x RIM-116 [ACE] 21x RIM-116 [ACE] 21x RIM-116 RAM [ACE] @@ -26,6 +29,7 @@ 4x FIM-92 Stinger [ACE] 4x FIM-92 スティンガー [ACE] 4x FIM-92 Stinger [ACE] + 4x FIM-92 Stinger [ACE] 4x FIM-92 Stinger [ACE] 4x FIM-92 스팅어 [ACE] From dacbd6af9c981df5ee688c8c843e96624d0fceda Mon Sep 17 00:00:00 2001 From: Psycool <104776717+Psycool3695@users.noreply.github.com> Date: Thu, 26 Dec 2024 09:05:02 +0900 Subject: [PATCH 31/35] Fixed wrong translations (#10600) * 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 * Korean translation updated * Korean translation improved * Korean translation fixed * Korean translation updated * Translations - Korean * Translations - Korean * Update stringtable.xml * Translations - Korean * Fixed wrong Korean --------- Co-authored-by: PabstMirror --- addons/compat_rf/compat_rf_realisticnames/stringtable.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/compat_rf/compat_rf_realisticnames/stringtable.xml b/addons/compat_rf/compat_rf_realisticnames/stringtable.xml index 88a94f50939..a4cf16fa0a7 100644 --- a/addons/compat_rf/compat_rf_realisticnames/stringtable.xml +++ b/addons/compat_rf/compat_rf_realisticnames/stringtable.xml @@ -192,7 +192,7 @@ H225 Super Puma (Transporte) H225 Super Puma (Trasporto) H225 Super Puma (Transport) - H225 슈퍼 퓨마 (비무장) + H225 슈퍼 퓨마 (수송) H225 シュペル ピューマ (輸送型) @@ -201,7 +201,7 @@ H225 Super Puma (Civil) H225 Super Puma (Civile) H225 Super Puma (Zivil) - H225 슈퍼 퓨마 (비무장) + H225 슈퍼 퓨마 (민간) H225 シュペル ピューマ (民生型) @@ -210,7 +210,7 @@ H215 Super Puma (Transporte) H215 Super Puma (Trasporto) H215 Super Puma (Transport) - H215 슈퍼 퓨마 (비무장) + H215 슈퍼 퓨마 (수송) H215 シュペル ピューマ (輸送型) @@ -219,7 +219,7 @@ H215 Super Puma (Civil) H215 Super Puma (Civile) H215 Super Puma (Zivil) - H215 슈퍼 퓨마 (비무장) + H215 슈퍼 퓨마 (민간) H215 シュペル ピューマ (民生型) From 42b45f5751c79fd187f8f96da4b01da00cdf4f4d Mon Sep 17 00:00:00 2001 From: Apricot <50947830+Apricot-ale@users.noreply.github.com> Date: Thu, 26 Dec 2024 15:02:21 +0900 Subject: [PATCH 32/35] Compat WS - Change realisticname wording for Stripe camos (#10592) --- .../compat_rf_realisticnames/stringtable.xml | 6 ++-- .../compat_ws_realisticnames/stringtable.xml | 36 +++++++++---------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/addons/compat_rf/compat_rf_realisticnames/stringtable.xml b/addons/compat_rf/compat_rf_realisticnames/stringtable.xml index a4cf16fa0a7..2619ea74f55 100644 --- a/addons/compat_rf/compat_rf_realisticnames/stringtable.xml +++ b/addons/compat_rf/compat_rf_realisticnames/stringtable.xml @@ -399,7 +399,7 @@ C-More Railway (Rojo, Desierto) C-More Railway (Rosso, Desert) C-More Railway (Rot, Wüste) - 씨모어 레일웨이 (빨강, 사막) + 씨모어 레일웨이 (빨강, 사막 위장) C-More レイルウェイ (レッド、砂漠迷彩) @@ -408,7 +408,7 @@ C-More Railway (Verde, Desierto) C-More Railway (Verde, Deserto) C-More Railway (Grün, Wüste) - 씨모어 레일웨이 (녹색, 사막) + 씨모어 레일웨이 (녹색, 사막 위장) C-More レイルウェイ (グリーン、砂漠迷彩) @@ -426,7 +426,7 @@ C-More Railway (Rojo, Boscoso) C-More Railway (Rosso, Boschivo) C-More Railway (Rot, Grünes Tarnmuster) - 씨모어 레일웨이 (빨강, 수풀) + 씨모어 레일웨이 (빨강, 수풀 위장) C-More レイルウェイ (レッド、森林迷彩) diff --git a/addons/compat_ws/compat_ws_realisticnames/stringtable.xml b/addons/compat_ws/compat_ws_realisticnames/stringtable.xml index 8a33d0320f1..dc1ed60de23 100644 --- a/addons/compat_ws/compat_ws_realisticnames/stringtable.xml +++ b/addons/compat_ws/compat_ws_realisticnames/stringtable.xml @@ -353,9 +353,9 @@ XMS GL - XMS GL (Camo) - XMS GL (迷彩) - XMS GL (위장) + XMS GL (Stripes) + XMS GL (縞模様迷彩) + XMS GL (줄무늬 위장) XMS GL (Gray) @@ -399,9 +399,9 @@ XMS - XMS (Camo) - XMS (迷彩) - XMS (위장) + XMS (Stripes) + XMS (縞模様迷彩) + XMS (줄무늬 위장) XMS (Gray) @@ -433,9 +433,9 @@ XMS SG - XMS SG (Camo) - XMS SG (迷彩) - XMS SG (위장) + XMS SG (Stripes) + XMS SG (縞模様迷彩) + XMS SG (줄무늬 위장) XMS SG (Gray) @@ -479,9 +479,9 @@ XMS SW - XMS SW (Camo) - XMS SW (迷彩) - XMS SW (위장) + XMS SW (Stripes) + XMS SW (縞模様迷彩) + XMS SW (줄무늬 위장) XMS SW (Gray) @@ -567,14 +567,14 @@ オトカ アルマ (非武装) - C-More Railway (Red, Camo) - C-More レイルウェイ (レッド、迷彩) - 씨모어 레일웨이 (빨강/위장) + C-More Railway (Red, Stripes) + C-More レイルウェイ (レッド、縞模様迷彩) + 씨모어 레일웨이 (빨강/줄무늬 위장) - C-More Railway (Green, Camo) - C-More レイルウェイ (グリーン、迷彩) - 씨모어 레일웨이 (초록/위장) + C-More Railway (Green, Stripes) + C-More レイルウェイ (グリーン、縞模様迷彩) + 씨모어 레일웨이 (초록/줄무늬 위장) ELCAN SpecterOS (Hex) From b185bf1061bded16ed2e5a59cdb31027915c5e8e Mon Sep 17 00:00:00 2001 From: Apricot <50947830+Apricot-ale@users.noreply.github.com> Date: Thu, 26 Dec 2024 15:02:43 +0900 Subject: [PATCH 33/35] Translations - Improve Japanese (Adenosin and Inject/Trans) (#10598) --- addons/fieldmanual/stringtable.xml | 4 +- addons/medical_status/stringtable.xml | 4 +- addons/medical_treatment/stringtable.xml | 64 ++++++++++++------------ 3 files changed, 36 insertions(+), 36 deletions(-) diff --git a/addons/fieldmanual/stringtable.xml b/addons/fieldmanual/stringtable.xml index 759f61a1e82..76026a533a5 100644 --- a/addons/fieldmanual/stringtable.xml +++ b/addons/fieldmanual/stringtable.xml @@ -797,7 +797,7 @@ %%3Внутривенные жидкости%4восстанавливают потерянный объем крови. Кровь, плазма и физраствор функционально идентичны.<br/><br/>%3 Использование:%4<br/>%2 Используйте [%3%13%4] или [%3%14%4] и выберите добавку.<br/>%2 Восстановите объем крови выбрав желаемый %4тип %3жидкости %3IV-Flüssigkeiten%4 stellen das verlorene Blutvolumen wieder her. Blut, Plasma und Kochsalzlösung sind funktionell gleich.<br/><br/>%3Verwende:%4<br/>%2Verwende [%3%13%4] oder [%3%14%4] und wählen ein Körperteil aus..<br/>%2Stelle das Blutvolumen wieder her, indem der gewünschte %3IV Flüssigkeitstyp%4 ausgewählt wird. %3수액용기%4는 손실된 혈액량을 보충합니다. 혈액, 혈장 및 생리식염수는 기능적으로 동일합니다.<br/><br/>%3사용 방법:%4<br/>%2[%3%13%4] 또는 [%3%14%4]를 사용하고 부위를 선택하십시오.<br/>%2원하는 %3수액용기%4 종류를 선택하여 혈액량을 보충하십시오. - %3IV 輸液%4は失われた血液を回復します。血液、血漿、生理食塩水は機能的には同じです。<br/><br/>%3使用方法:%4<br/>%2[%3%13%4] または [%3%14%4] を使って四肢を選択します。<br/>%2希望の%3IV 輸液%4の種類を選択して、血液量を復元します。 + %3静脈注射(IV)による輸液%4は失われた血液を回復します。血液、血漿、生理食塩液は機能的には同じです。<br/><br/>%3使用方法:%4<br/>%2[%3%13%4] または [%3%14%4] を使って四肢を選択します。<br/>%2希望の%3輸液IV(静脈注射)%4の種類を選択して、血液量を復元します。 IV Fluids @@ -808,7 +808,7 @@ Fluidos IV IV-Flüssigkeiten IV 수액 - IV 輸液 + 静脈注射(IV)による輸液 Restore Blood Volume diff --git a/addons/medical_status/stringtable.xml b/addons/medical_status/stringtable.xml index 2afed32f279..66035019a04 100644 --- a/addons/medical_status/stringtable.xml +++ b/addons/medical_status/stringtable.xml @@ -70,7 +70,7 @@ Определяет, насколько быстро подействуют эффекты внутривенного переливания как:\nвременной интервал (s) * изменение внутривенного вливания в секунду (4,1667 мл/с) * скорость потока (этот коэффициент). Wie schnell der Effekt der Transfusion eintritt 수액용기에서 액체가 얼마나 빠르게 흘러들어가는지를 제어합니다. 수액용기 부피 변화는 다음과 같이 계산됩니다:\n시간 간격 (초) x 초 당 수액 변화량(4.1667mL/s) x 흘러들어가는 양 (해당 계수). - IV 輸液パックから輸液が流出する速度を制御します。 IV 輸液バッグの容量変化は次のように計算されます:\n時間間隔(秒) x 点滴速度毎秒(4.1667 mL/秒) x 流量(この係数) + 輸液IV(静脈注射)バッグから輸液が流出する速度を制御します。 輸液IV(静脈注射)バッグの容量変化は次のように計算されます:\n時間間隔(秒) x 点滴速度毎秒(4.1667 mL/秒) x 流量(この係数) 控制從點滴輸入人體的液體流量多快。點滴的體積更改是以\n時間間隔(單位秒)乘上點滴每秒速度(4.1667毫升/秒)乘上流量(該係數)。 控制从点滴输入人体的液体流量多快。静脉输液袋容积变化的计算方法是:\n时间间隔(秒)x点滴每秒速度(4.1667毫升/秒)x流量(该系数)。 IV Torbalardan sıvının ne kadar hızlı aktığını kontrol eder. IV Torba hacim değişikliği şu şekilde hesaplanır: zaman aralıkları iv saniye başına değişim (4.1667 mL / s) akış hızı (bu katsayı). @@ -86,7 +86,7 @@ Скорость внутривенного переливания Transfusions Fließrate 수혈 속도 - IV 輸液の流量 + 輸液IV(静脈注射)の流量 點滴輸血流量 点滴输血流量 IV Transfüzyon Akış Hızı diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml index 6ffb56e9fc6..875e674f529 100644 --- a/addons/medical_treatment/stringtable.xml +++ b/addons/medical_treatment/stringtable.xml @@ -299,7 +299,7 @@ Перелить пакет физраствора (1000 мл) Kochsalzlösung IV (1000ml) IV 생리식염수 수혈 (1000ml) - 生理食塩水 IV (1000ml) を投与 + 生理食塩液 IV (1000ml) を投与 注射生理食鹽水 (1000毫升) 静脉注射生理盐水(1000毫升) Serum IV (1000ml) Ver @@ -316,7 +316,7 @@ Перелить пакет физраствора (250 мл) Kochsalzlösung IV (250ml) IV 생리식염수 수혈 (250ml) - 生理食塩水 IV (250ml) を投与 + 生理食塩液 IV (250ml) を投与 注射生理食鹽水 (250毫升) 静脉注射生理盐水(250毫升) Serum IV (250ml) Ver @@ -333,7 +333,7 @@ Перелить пакет физраствора (500 мл) Kochsalzlösung IV (500ml) IV 생리식염수 수혈 (500ml) - 生理食塩水 IV (500ml) を投与 + 生理食塩液 IV (500ml) を投与 注射生理食鹽水 (500毫升) 静脉注射生理盐水(500毫升) Serum IV (500ml) Ver @@ -447,7 +447,7 @@ %1 провёл переливание %1 hat eine Infusion verabreicht %1 (이)가 IV를 실시했다 - %1 がIVを投与した + %1 が輸液をIV(静脈注射)で投与した %1 已經給予靜脈注射液 %1 已进行静脉注射 % 1 IV verildi @@ -842,7 +842,7 @@ Позволяет использовать внутривенные переливания на себе Erlaube Bluttransfusionen an sich selbst zu benutzen 수액용기를 사용자 본인에게 쓸 수 있는지를 정합니다. - 自らに対して IV 輸液を可能にします。 + 自らに対しての輸液IV(静脈注射)を可能にします。 啟用是否能對自己注射點滴 启用是否能够自我静脉输液 @@ -857,7 +857,7 @@ Внутривенное переливание на себе Eigennutzung von Bluttransfusionen 수액용기 자가 사용 - 自己 IV 輸液 + 輸液の自己投与 自我注射點滴 自我静脉输液 @@ -1659,7 +1659,7 @@ Пакет крови для возмещения объёма потерянной крови Blut IV, um den Bluthaushalt des Patienten wiederherzustellen. 혈액 IV, 환자에게 혈액을 공급합니다. - 血液 IVは患者の血液量を回復させます。 + 血液静脈注射(IV)は患者の血液量を回復させます。 血液, 用於補充傷者流失的血液 血液,用于补充伤者流失的血液 Kan IV, bir hastanın kanını geri enjekte etmek için @@ -1676,7 +1676,7 @@ Кровь I группы, резус-отрицательная, применяется по жизненным показаниям для возмещения объема потерянной крови на догоспитальном этапе оказания медицинской помощи. O Negative Blutinfusion wird nur in seltenen Fällen verwendet, um den Bluthaushalt des Patienten zu ergänzen. Wird in der Regel wärend der Transportphase durchgeführt. O Rh- 혈액은 일반적으로 의료 후송 단계에서 혈액 공급을 보충하기 위한 엄격하고 드물게 사용되는 혈액입니다. - 血液型O-の輸血は、厳密かつ稀な事象において行われる。通常、医療の搬送段階で血液を補充するために使用される。 + 血液型O-の血液は通常、搬送中の医療現場で血液を補充するために厳密かつ稀な状況で使用される。 O型陰性注射用血液, 在緊急情況時使用, 用於補充傷者流失的血液 O型负值注射用血液,在紧急情况时使用, 用于补充伤者流失的血液 Nullás vércsoportú, Rh-negatív vér-infúzió, melyet kritikus és ritka helyzetekben vérutánpótlásra használnak, jellemzően az orvosi ellátás szállítási fázisa közben. @@ -2915,7 +2915,7 @@ Введение аденозина... Adenosin injizieren... 아데노신 주사 중... - アドネシンを投与しています・・・ + アデノシンを注射しています・・・ 腺苷注射中... 正在注射腺苷... Adenosin Enjekte Ediliyor... @@ -2931,7 +2931,7 @@ Введение атропина... Atropin injizieren... 아트로핀 주사 중... - アトロピンを投与しています・・・ + アトロピンを注射しています・・・ 阿托品注射中 ... 正在注射阿托品... Atropin Enjekte Ediliyor... @@ -2948,7 +2948,7 @@ Введение адреналина... Epinephrin injizieren... 에피네프린 주사 중... - アドレナリンを投与しています・・・ + アドレナリンを注射しています・・・ 腎上腺素注射中... 正在注射肾上腺素... Epinefrin Enjekte Ediliyor... @@ -2965,7 +2965,7 @@ Введение морфина... Morphin injizieren... 모르핀 주사 중... - モルヒネを投与しています・・・ + モルヒネを注射しています・・・ 嗎啡注射中... 正在注射吗啡... Morfin Enjekte Ediliyor ... @@ -3144,7 +3144,7 @@ Контролирует, где можно использовать внутревенное переливание. Legt fest, wo IV-Transfusionen verabreicht werden können. 수액용기를 사용할 수 있는 장소를 정합니다. - IV 輸液を行える場所を制御します。 + 輸液IV(静脈注射)を行える場所を制御します。 控制何地可以静脉输液 @@ -3157,7 +3157,7 @@ Места внутривенного переливания Orte für IV-Transfusionen 수액용기 사용 장소 - IV輸液の可能な場所 + 輸液IV(静脈注射)の可能な場所 静脉输液地点 @@ -3363,7 +3363,7 @@ Уровень навыка, требуемый для осуществления внутривенного переливания. 'Fähigkeiten-Level', das benötigt wird, um Blut zu transfundieren. 수액용기를 사용하는데 필요한 등급을 정합니다. - IV 輸液を行うのに必要な医療スキルのレベルを設定します。 + 輸液IV(静脈注射)を行うのに必要な医療スキルのレベルを設定します。 要有何種醫療水準才可注射點滴。 静脉输液所需的医疗水平。 @@ -3378,7 +3378,7 @@ Доступ к внутривенному переливанию Erlaube Bluttransfusionen 수액용기 사용 허가 - IV 輸液の制限 + 輸液IV(静脈注射)の制限 允許操作點滴 允许静脉输液 @@ -3795,7 +3795,7 @@ Дополнительный препарат, применяемый при возмещении объема крови. Volumenerweiterungsmittel (künstliches Blutvolumen) 혈액량을 늘리기위한 보조수단 입니다. - 血液量の増加を補助します。 + 血液量を増加させるための成分が含まれている。 可快速得到血液補充 可快速得到血液补充 Egy térfogatnövelő vérkiegészítmény. @@ -3811,7 +3811,7 @@ Дополнительный препарат, применяемый при возмещении объема крови. Volumenerweiterungsmittel (künstliches Blutvolumen) 혈액량을 늘리기위한 보조수단 입니다. - 血液量の増加を補助します。 + 血液量を増加させるための成分が含まれている。 可快速得到血液補充 可快速得到血液补充 Egy térfogatnövelő vérkiegészítmény. @@ -3910,7 +3910,7 @@ Физраствор для в/в вливания (1000 мл) Kochsalzlösung (1000ml) 생리식염수 IV (1000ml) - 生理食塩水 IV (1000ml) + 生理食塩液 IV (1000ml) 點滴 (食鹽水 1000毫升) 生理盐水(1000毫升) Serum IV (1000ml) @@ -3927,7 +3927,7 @@ Физраствор для в/в вливания (250 мл) Kochsalzlösung (250ml) 생리식염수 IV (250ml) - 生理食塩水 IV (250ml) + 生理食塩液 IV (250ml) 點滴 (食鹽水 250毫升) 生理盐水(250毫升) Serum IV (250ml) @@ -3944,7 +3944,7 @@ Физраствор для в/в вливания (500 мл) Kochsalzlösung (500ml) 생리식염수 IV (500ml) - 生理食塩水 IV (500ml) + 生理食塩液 IV (500ml) 點滴 (食鹽水 500毫升) 生理盐水(500毫升) Serum IV (500ml) @@ -3961,7 +3961,7 @@ Пакет физраствора для возмещения объёма потерянной крови Kochsalzlösung, ein medizinisches Volumenersatzmittel 생리식염수, 환자의 혈액량을 보충할때 쓰입니다 - 生理食塩水 IVは患者の血液量を回復させます。 + 生理食塩液静脈注射(IV)は患者の血液量を回復させます。 生理食鹽水, 用於恢復傷者血液 生理盐水,用于恢复伤者血液 0,9%-os sósvíz-infúzió, a páciens vérmennyiségének helyreállítására @@ -4022,7 +4022,7 @@ Нет капельницы Kein IV 수혈 없음 - IV なし + IV(静脈注射) なし No pain @@ -4313,7 +4313,7 @@ Перелить кровь Bluttransfusion 혈액 수혈 - 血液を投与 + 血液を輸液 輸血液 输入血液 Kan Ver @@ -4330,7 +4330,7 @@ Перелить плазму Plasmatransfusion 혈장 수혈 - 血漿を投与 + 血漿を輸液 輸血漿 输入血浆 Plasma Ver @@ -4347,7 +4347,7 @@ Перелить физраствор Salzlösungstransfusion 생리식염수 수혈 - 生理食塩水を投与 + 生理食塩液を輸液 注射生理食鹽水 输入生理盐水 Serum Ver @@ -4364,7 +4364,7 @@ Переливание крови... Bluttransfusion... 혈액 수혈 중... - 血液を投与しています・・・ + 血液を輸液しています・・・ 輸血液中 ... 正在输入血液... Kan Veriliyor... @@ -4381,7 +4381,7 @@ Переливание плазмы... Plasmatransfusion... 혈장 수혈 중... - 血漿を投与しています・・・ + 血漿を輸液しています・・・ 輸血漿中 ... 正在输入血浆... Plasma Veriliyor... @@ -4398,7 +4398,7 @@ Переливание физраствора... Salzlösungtransfusion... 생리식염수 수혈 중... - 生理食塩水を投与しています・・・ + 生理食塩液を輸液しています・・・ 施打生理食鹽水中 ... 正在输入生理盐水... Serum Veriliyor... @@ -5230,7 +5230,7 @@ Принимается кровь [%1 мл] Erhalte Blut IV [%1ml] 혈액 IV로 [%1ml] 수혈중 - 血液 IV [%1ml] を投与中 + 血液をIV(静脈注射)投与中 [%1ml] 接收血液靜脈注射液中 [%1毫升] 正在接受血液静脉注射 [%1毫升] Vér Infúzióra kötve [%1ml] @@ -5246,7 +5246,7 @@ Принимается плазма [%1 мл] Erhalte Plasma IV [%1ml] 혈장 IV로 [%1ml] 수혈중 - プラズマ IV [%1ml] を投与中 + 血漿をIV(静脈注射)投与中 [%1ml] 接收血漿靜脈注射液中 [%1毫升] 正在接受血浆静脉注射 [%1毫升] Plazma Infúzióra kötve [%1ml] @@ -5262,7 +5262,7 @@ Принимается физраствор [%1 мл] Erhalte Saline IV [%1ml] 생리식염수 IV로 [%1ml] 수혈중 - 生理食塩水 IV [%1ml] を投与中 + 生理食塩液をIV(静脈注射)投与中 [%1ml] 接收生理鹽水靜脈注射液中 [%1毫升] 正在接受生理盐水静脉注射 [%1毫升] Saline Infúzióra kötve [%1ml] From e8ef0dfa8f194137a8919689398f497bbacc8bd3 Mon Sep 17 00:00:00 2001 From: Apricot <50947830+Apricot-ale@users.noreply.github.com> Date: Fri, 27 Dec 2024 04:12:31 +0900 Subject: [PATCH 34/35] Realistic Names - Add Contact/LDF support (#10597) Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> --- addons/realisticnames/CfgVehicles.hpp | 37 +++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/addons/realisticnames/CfgVehicles.hpp b/addons/realisticnames/CfgVehicles.hpp index ba95cf147d5..6ad1ee1fec3 100644 --- a/addons/realisticnames/CfgVehicles.hpp +++ b/addons/realisticnames/CfgVehicles.hpp @@ -21,6 +21,9 @@ class CfgVehicles { class I_static_AT_F: AT_01_base_F { displayName = CSTRING(static_AT_Name); }; + class I_E_Static_AT_F: I_static_AT_F { + displayName = CSTRING(static_AT_Name); + }; class AA_01_base_F; class B_static_AA_F: AA_01_base_F { @@ -32,6 +35,9 @@ class CfgVehicles { class I_static_AA_F: AA_01_base_F { displayName = CSTRING(static_AA_Name); }; + class I_E_Static_AA_F: I_static_AA_F { + displayName = CSTRING(static_AA_Name); + }; class GMG_TriPod; class GMG_01_base_F: GMG_TriPod { @@ -174,6 +180,10 @@ class CfgVehicles { class I_APC_tracked_03_cannon_F: I_APC_tracked_03_base_F { displayName = CSTRING(APC_tracked_03_cannon_Name); }; + class I_E_APC_tracked_03_base_F; + class I_E_APC_tracked_03_cannon_F: I_E_APC_tracked_03_base_F { + displayName = CSTRING(APC_tracked_03_cannon_Name); + }; // Wheeled apcs class B_APC_Wheeled_01_base_F; @@ -267,13 +277,34 @@ class CfgVehicles { class I_Truck_02_box_F: Truck_02_box_base_F { displayName = CSTRING(Truck_02_box_Name); }; + class I_E_Truck_02_transport_F: Truck_02_transport_base_F { + displayName = CSTRING(Truck_02_transport_Name); + }; + class I_E_Truck_02_F: Truck_02_base_F { + displayName = CSTRING(Truck_02_covered_Name); + }; + class I_E_Truck_02_ammo_F: Truck_02_Ammo_base_F { + displayName = CSTRING(Truck_02_ammo_Name); + }; + class I_E_Truck_02_fuel_F: Truck_02_fuel_base_F { + displayName = CSTRING(Truck_02_fuel_Name); + }; + class I_E_Truck_02_box_F: Truck_02_box_base_F { + displayName = CSTRING(Truck_02_box_Name); + }; class Truck_02_MRL_base_F; class I_Truck_02_MRL_F: Truck_02_MRL_base_F { displayName = CSTRING(Truck_02_MRL_Name); }; + class I_E_Truck_02_MRL_F: Truck_02_MRL_base_F { + displayName = CSTRING(Truck_02_MRL_Name); + }; class I_Truck_02_medical_F: Truck_02_medical_base_F { displayName = CSTRING(Truck_02_medical_Name); }; + class I_E_Truck_02_medical_F: Truck_02_medical_base_F { + displayName = CSTRING(Truck_02_medical_Name); + }; class C_Truck_02_transport_F: Truck_02_transport_base_F { displayName = CSTRING(Truck_02_transport_Name); }; @@ -383,11 +414,17 @@ class CfgVehicles { class I_Heli_light_03_unarmed_F: Heli_light_03_unarmed_base_F { displayName = CSTRING(Heli_light_03_unarmed_Name); }; + class I_E_Heli_light_03_unarmed_F: Heli_light_03_unarmed_base_F { + displayName = CSTRING(Heli_light_03_unarmed_Name); + }; class Heli_light_03_dynamicLoadout_base_F; class I_Heli_light_03_dynamicLoadout_F: Heli_light_03_dynamicLoadout_base_F { displayName = CSTRING(Heli_light_03_Name); }; + class I_E_Heli_light_03_dynamicLoadout_F: Heli_light_03_dynamicLoadout_base_F { + displayName = CSTRING(Heli_light_03_Name); + }; class Heli_Transport_02_base_F; class I_Heli_Transport_02_F: Heli_Transport_02_base_F { From 12b193849ddd23c6a2cdf61b1bc5d5a5086e8f4d Mon Sep 17 00:00:00 2001 From: Grim <69561145+LinkIsGrim@users.noreply.github.com> Date: Thu, 26 Dec 2024 16:12:42 -0300 Subject: [PATCH 35/35] gforces - Fix stat condition (#10601) --- addons/gforces/ACE_Arsenal_Stats.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/gforces/ACE_Arsenal_Stats.hpp b/addons/gforces/ACE_Arsenal_Stats.hpp index bebcf74489d..c72b63bfaef 100644 --- a/addons/gforces/ACE_Arsenal_Stats.hpp +++ b/addons/gforces/ACE_Arsenal_Stats.hpp @@ -7,7 +7,7 @@ class EGVAR(arsenal,stats) { displayName = CSTRING(statGReduction); showBar = 1; barStatement = QUOTE([ARR_3((_this select 0) select 0,_this select 1,[ARR_3([ARR_2(1,0)],[ARR_2(0.01,1)],false)])] call EFUNC(arsenal,statBarStatement_default)); - condition = QUOTE(getNumber (_this select 1 >> (_this select 0) select 0) > 0); + condition = QUOTE(getNumber (_this select 1 >> (_this select 0) select 0) < 1); // All uniforms should have this set to 1 by default tabs[] = {{3}, {}}; }; };