From d7e5ea489865d44291793d527161eccb23faa3d4 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Sat, 9 Mar 2024 18:11:27 +0100 Subject: [PATCH 001/132] Rearm - Fix actions not being added immeditately (#9843) --- addons/rearm/functions/fnc_initSupplyVehicle.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/rearm/functions/fnc_initSupplyVehicle.sqf b/addons/rearm/functions/fnc_initSupplyVehicle.sqf index 7749f0b609..4ab04fcaf6 100644 --- a/addons/rearm/functions/fnc_initSupplyVehicle.sqf +++ b/addons/rearm/functions/fnc_initSupplyVehicle.sqf @@ -33,7 +33,7 @@ if (!alive _vehicle) exitWith {}; private _configSupply = getNumber (_configOf >> QGVAR(defaultSupply)); if (_configSupply == 0) then { - _configSupply = getNumber (_config >> "transportAmmo"); + _configSupply = getNumber (_configOf >> "transportAmmo"); }; private _isSupplyVehicle = _vehicle getVariable [QGVAR(isSupplyVehicle), false]; private _oldRearmConfig = isClass (_configOf >> "ACE_Actions" >> "ACE_MainActions" >> QGVAR(takeAmmo)); From 8e975a6b912baa3b29b23accd0813b88ee6f9823 Mon Sep 17 00:00:00 2001 From: Grim <69561145+LinkIsGrim@users.noreply.github.com> Date: Sat, 9 Mar 2024 14:15:24 -0300 Subject: [PATCH 002/132] Medical Treatment - Add hook to modify bandaging treatment (#9814) Co-authored-by: PabstMirror Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> --- addons/medical_treatment/functions/fnc_bandage.sqf | 8 ++++++-- addons/medical_treatment/functions/fnc_bandageLocal.sqf | 7 ++++--- docs/wiki/framework/events-framework.md | 1 + 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/addons/medical_treatment/functions/fnc_bandage.sqf b/addons/medical_treatment/functions/fnc_bandage.sqf index a4fb2c7698..80475fa2c3 100644 --- a/addons/medical_treatment/functions/fnc_bandage.sqf +++ b/addons/medical_treatment/functions/fnc_bandage.sqf @@ -8,6 +8,7 @@ * 1: Patient * 2: Body Part * 3: Treatment + * 4: Bandage effectiveness coefficient (default: 1) * * Return Value: * None @@ -18,8 +19,11 @@ * Public: No */ -params ["_medic", "_patient", "_bodyPart", "_classname"]; +_this set [4, _this param [4, 1]]; // set default Bandage effectiveness coefficient +[QGVAR(bandaged), _this] call CBA_fnc_localEvent; // Raise event with reference so mods can modify this + +params ["_medic", "_patient", "_bodyPart", "_classname", "_bandageEffectiveness"]; [_patient, "activity", LSTRING(Activity_bandagedPatient), [[_medic, false, true] call EFUNC(common,getName)]] call FUNC(addToLog); -[QGVAR(bandageLocal), [_patient, _bodyPart, _classname], _patient] call CBA_fnc_targetEvent; +[QGVAR(bandageLocal), [_patient, _bodyPart, _classname, _bandageEffectiveness], _patient] call CBA_fnc_targetEvent; diff --git a/addons/medical_treatment/functions/fnc_bandageLocal.sqf b/addons/medical_treatment/functions/fnc_bandageLocal.sqf index 6b8f514502..4cecbb2f17 100644 --- a/addons/medical_treatment/functions/fnc_bandageLocal.sqf +++ b/addons/medical_treatment/functions/fnc_bandageLocal.sqf @@ -7,6 +7,7 @@ * 0: Patient * 1: Body Part * 2: Treatment + * 3: Bandage effectiveness coefficient (default: 1) * * Return Value: * None @@ -17,8 +18,8 @@ * Public: No */ -params ["_patient", "_bodyPart", "_bandage"]; -TRACE_3("bandageLocal",_patient,_bodyPart,_bandage); +params ["_patient", "_bodyPart", "_bandage", ["_bandageEffectiveness", 1]]; +TRACE_4("bandageLocal",_patient,_bodyPart,_bandage,_bandageEffectiveness); _bodyPart = toLowerANSI _bodyPart; private _openWounds = GET_OPEN_WOUNDS(_patient); @@ -26,7 +27,7 @@ private _woundsOnPart = _openWounds getOrDefault [_bodyPart, []]; if (_woundsOnPart isEqualTo []) exitWith {}; // Figure out which injuries for this bodypart are the best choice to bandage -private _targetWounds = [_patient, _bandage, _bodyPart, GVAR(bandageEffectiveness)] call FUNC(findMostEffectiveWounds); +private _targetWounds = [_patient, _bandage, _bodyPart, _bandageEffectiveness * GVAR(bandageEffectiveness)] call FUNC(findMostEffectiveWounds); // Everything is patched up on this body part already if (count _targetWounds == 0) exitWith {}; diff --git a/docs/wiki/framework/events-framework.md b/docs/wiki/framework/events-framework.md index eb717bffe8..d8d8674218 100644 --- a/docs/wiki/framework/events-framework.md +++ b/docs/wiki/framework/events-framework.md @@ -42,6 +42,7 @@ The vehicle events will also have the following local variables available `_gunn |`ace_treatmentSucceded` | [_caller, _target, _selectionName, _className, _itemUser, _usedItem] | Local | Listen | Treatment action is completed (local on the _caller) |`ace_treatmentFailed` | [_caller, _target, _selectionName, _className, _itemUser, _usedItem] | Local | Listen | Treatment action has been interrupted (local on the _caller) |`ace_medical_handleUnitVitals` | [_unit, _deltaT] | Local | Listen | Vitals update ran for unit, _deltaT is the time elapsed since the previous vitals update (local to _unit) +|`ace_medical_treatment_bandaged` | [_medic, _patient, _bodyPart, _className, _bandageEffectiveness] | Local | Listen | _medic has bandaged _patient, the array can be modified to change treatment parameters (local to _medic) ### 2.3 Interaction Menu (`ace_interact_menu`) MenuType: 0 = Interaction, 1 = Self Interaction From a3b9c53fd821d8da7bb5e6d24c4744aaf704b4e3 Mon Sep 17 00:00:00 2001 From: V1nsyara Date: Sun, 10 Mar 2024 01:56:33 +0300 Subject: [PATCH 003/132] Translations - Russian - Fix (#9841) Russian Translate - Fix --- addons/advanced_fatigue/stringtable.xml | 14 +++++------ addons/ai/stringtable.xml | 2 +- addons/arsenal/stringtable.xml | 4 ++-- addons/captives/stringtable.xml | 2 +- addons/cargo/stringtable.xml | 2 +- .../compat_cup_weapons_csw/stringtable.xml | 17 +++++++++++++ .../stringtable.xml | 14 ++++++----- addons/frag/stringtable.xml | 2 +- addons/goggles/stringtable.xml | 2 +- addons/hearing/stringtable.xml | 1 + addons/killtracker/stringtable.xml | 2 +- addons/main/stringtable.xml | 2 +- addons/maptools/stringtable.xml | 24 +++++++++---------- addons/markers/stringtable.xml | 2 +- addons/medical_damage/stringtable.xml | 4 ++-- addons/medical_engine/stringtable.xml | 2 +- addons/medical_gui/stringtable.xml | 8 +++---- addons/medical_status/stringtable.xml | 4 ++-- addons/medical_treatment/stringtable.xml | 22 ++++++++--------- addons/medical_vitals/stringtable.xml | 2 +- addons/novehicleclanlogo/stringtable.xml | 4 ++-- 21 files changed, 78 insertions(+), 58 deletions(-) diff --git a/addons/advanced_fatigue/stringtable.xml b/addons/advanced_fatigue/stringtable.xml index af25a7c181..502ed12efd 100644 --- a/addons/advanced_fatigue/stringtable.xml +++ b/addons/advanced_fatigue/stringtable.xml @@ -44,7 +44,7 @@ Influenza la prestazione generale di tutti i giocatori smuniti di un fattore personalizzato. Maggiore significa migliore. 影響所有玩家的體力表現,值越高代表體力越好 影响所有玩家的体力表现,值越高代表体力越好 - Влияет на общую производительность игроков, у которых не задано персональное значение. + Влияет на общую производительность игроков, у которых не задано персональное значение. Чем выше, тем лучше. Influencia na performance geral de todos os jogadores sem nenhum fator personalizado. Quanto maior, melhor. Ovlivňuje celkový výkon všech hráčů bez vlastního faktoru. Vyšší znamená lépe. @@ -59,7 +59,7 @@ Influenza la prestazione personalizzata di questa unità. Maggiore significa migliore. 影響這個單位的體力表現,值越高代表體力越好 影响这个单位的体力表现,值越高代表体力越好 - Влияет на общую производительность юнита. + Влияет на общую производительность юнита.Чем выше, тем лучше. Influencia na performance geral dessa unidade. Quanto maior, melhor. Ovlivňuje celkový výkon této jednotky. Vyšší znamená lépe. @@ -192,7 +192,7 @@ Verwacklungsfaktor, wenn aufgelegt Fattore di Oscillazione Appoggiato 静止時の手ぶれ係数 - Коэффициент колебания в состоянии покоя + Коэффициент колебания прицела в состоянии покоя Influences the amount of weapon sway while weapon is rested. @@ -202,7 +202,7 @@ Beeinflusst, wie ruhig man die Waffe hält, während sie aufgelegt ist. Determina la quantità di oscillazione dell'arma quando questa è appoggiata. 静止している時の武器の手ぶれの量に影響します。 - Влияет на величину колебания оружия в состоянии покоя. + Влияет на величину колебания прицела оружия в состоянии покоя. Deployed sway factor @@ -212,7 +212,7 @@ Verwacklungsfaktor, wenn Zweibein aufgestellt ist. Fattore di Oscillazione su Bipode 展開時の手ぶれ係数 - Коэффициент колебания при развертывании + Коэффициент колебания прицела при развертывании Influences the amount of weapon sway while weapon is deployed. @@ -222,7 +222,7 @@ Beeinflusst, wie ruhig man die Waffen hält, während das Zweibein aufgestellt ist. Determina la quantità di oscillazione dell'arma quando questa è stabilizzata usando il bipode. 武器の展開(Cキー)時の武器の手ぶれの量に影響します。 - Влияет на величину колебания оружия при его развертывании. + Влияет на величину колебания прицела оружия при его развертывании. Enabled @@ -250,7 +250,7 @@ Abilita/Disabilita la Fatica Avanzata. 啟用/關閉進階體力. 启用/关闭进阶体力。 - Включает / Отключает Продвинутую усталость + Включает/отключает Продвинутую усталость Ativa/Desativa Fadiga Avançada. Aktivuje / deaktivuje Pokročilou únavu. diff --git a/addons/ai/stringtable.xml b/addons/ai/stringtable.xml index 821d42fd27..11a686f6b2 100644 --- a/addons/ai/stringtable.xml +++ b/addons/ai/stringtable.xml @@ -101,7 +101,7 @@ Equipe des JVN pendant la nuit et les déséquipe le jour.\nN'ajoute pas les JVN dans l'intenvaire ! Equipa o NVG do inventário durante a noite e desequipa durante o dia.\nNão adiciona NVGs ao inventário! インベントリ内の暗視装置を夜間に装備し、日中は解除し収納します。\nこれはNVGをインベントリに追加しません。 - Оснащает ПНВ в инвентаре в ночное время и отключает его в дневное время.\nНе добавляет ПНВ в инвентарь! + Экипирует ПНВ в ночное время и отключает его в дневное время.\nНе добавляет ПНВ в инвентарь! diff --git a/addons/arsenal/stringtable.xml b/addons/arsenal/stringtable.xml index 081f5cecf4..52ec97c138 100644 --- a/addons/arsenal/stringtable.xml +++ b/addons/arsenal/stringtable.xml @@ -1241,12 +1241,12 @@ Thermal integrated 熱画像装置内蔵 - Интегрирован в тепловизор. + Интегрирован тепловизор. Thermal & Primary integrated 熱画像装置内蔵・プライマリに内蔵 - Интегрирован в тепловизор и осн.прицел. + Интегрирован тепловизор и осн.прицел. Not Supported diff --git a/addons/captives/stringtable.xml b/addons/captives/stringtable.xml index c2da8892e5..174022ea11 100644 --- a/addons/captives/stringtable.xml +++ b/addons/captives/stringtable.xml @@ -486,7 +486,7 @@ 设置在光标下的单位成俘虏状态。 커서의 병력을 포박합니다. Ustawia jednostkę pod kursorem jako jeniec. - Арестовывает указанный курсором юнит + Арестовывает указанный курсором юнит. Torna a unidade sob o cursor um prisioneiro Capture l'unité sous le curseur. Nastaví jednotku pod kurzorem jako zajatce. diff --git a/addons/cargo/stringtable.xml b/addons/cargo/stringtable.xml index b45a27cd5b..4c9ecbc3f8 100644 --- a/addons/cargo/stringtable.xml +++ b/addons/cargo/stringtable.xml @@ -507,7 +507,7 @@ 貨物の積み込み/積み下ろしに掛かる時間を変更します。\n時間 (秒) は、貨物のサイズにこの値を掛けたものです。 Modyfikuje, jak długo zajmuje załadowywanie/wyładowywanie przedmiotów. \nCzasem, w sekundach, jest wielkość przedmiotu razy jego wartość. Modifica il tempo impiegato per caricare o scaricare gli oggetti.\nIl tempo, in secondi, equivale alla dimensione dell'oggetto moltiplicata per questo valore - Изменяет время для загрузки/выгрузки предметов. \n Время (сек) - это размер предмета, умноженный на это значение. + Изменяет время для загрузки/выгрузки предметов. \nВремя (сек) - это размер предмета, умноженный на это значение. Coeficiente de quanto tempo leva para carregar/descarregar itens.\nTempo, em segundos, é o tamanho do objeto multiplicado por esse valor. Modifie le temps nécessaire pour charger/décharger des objets.\nLe temps, en secondes, est calculé en multipliant la taille de l'élément par ce coefficient. 修改要花多長時間來裝載/卸載物品。\n時間,以秒為單位,而物品的大小數值與這個係數成比。 diff --git a/addons/compat_cup_weapons/compat_cup_weapons_csw/stringtable.xml b/addons/compat_cup_weapons/compat_cup_weapons_csw/stringtable.xml index fdfcc37436..b41e11b630 100644 --- a/addons/compat_cup_weapons/compat_cup_weapons_csw/stringtable.xml +++ b/addons/compat_cup_weapons/compat_cup_weapons_csw/stringtable.xml @@ -4,70 +4,87 @@ [CSW] AGS30 Belt [CSW] AGS30 ベルト + [CSW] Лента AGS 30 [CSW] MK19 Belt [CSW] Mk19 ベルト + [CSW] Лента Mk19 [CSW] TOW Tube [CSW] TOW チューブ + [CSW] Туба TOW [CSW] TOW2 Tube [CSW] TOW2 チューブ + [CSW] Туба TOW-2 [CSW] PG-9 Round [CSW] PG-9 砲弾 + [CSW] Снаряд ПГ-9 [CSW] OG-9 Round [CSW] OG-9 砲弾 + [CSW] Снаряд OГ-9 [CSW] M1 HE [CSW] M1 榴弾 + [CSW] M1 HE [CSW] M84 Smoke [CSW] M84 白煙弾 + [CSW] M84 Дымовая [CSW] M60A2 WP [CSW] M60A2 白リン弾 + [CSW] M60A2 WP [CSW] M67 AT Laser Guided [CSW] M67 対戦車レーザー誘導弾 + [CSW] M67 AT Laser Guided [CSW] M314 Illumination [CSW] M314 照明弾 + [CSW] M314 Осветительная [CSW] 3OF56 HE [CSW] 3OF56 榴弾 + [CSW] 3OF56 HE [CSW] 3OF69M Laser Guided [CSW] 3OF69M レーザー誘導弾 + [CSW] 3OF69M Laser Guided [CSW] 122mm WP [CSW] 122mm 白リン弾 + [CSW] 122mm WP [CSW] D-462 Smoke [CSW] D-462 白煙弾 + [CSW] D-462 Дымовая [CSW] S-463 Illumination [CSW] S-463 照明弾 + [CSW] S-463 Осветительная [CSW] BK-6M HEAT [CSW] BK-6M HEAT弾 + [CSW] BK-6M HEAT diff --git a/addons/compat_cup_weapons/compat_cup_weapons_nightvision/stringtable.xml b/addons/compat_cup_weapons/compat_cup_weapons_nightvision/stringtable.xml index ef8d46895d..b8344ae16b 100644 --- a/addons/compat_cup_weapons/compat_cup_weapons_nightvision/stringtable.xml +++ b/addons/compat_cup_weapons/compat_cup_weapons_nightvision/stringtable.xml @@ -19,7 +19,7 @@ AN/PVS-15 (grün, WP) AN/PVS-15 (녹색, 백색광) AN/PVS-15 (vertes, WP) - AN/PVS-15 (Зелёный, БФ) + AN/PVS-15 (Чёрный, БФ) AN/PVS-15 (Green, WP) @@ -29,7 +29,7 @@ AN/PVS-15 (Schwarz, WP) AN/PVS-15 (검정, 백색광) AN/PVS-15 (noires, WP) - AN/PVS-15 (Чёрный, БФ) + AN/PVS-15 (Зелёный, БФ) AN/PVS-15 (Tan, WP) @@ -39,12 +39,13 @@ AN/PVS-15 (hellbraun, WP) AN/PVS-15 (황갈색, 백색광) AN/PVS-15 (marron clair, WP) - AN/PVS-15 (желтовато-коричневый, БФ) + AN/PVS-15 (Желтовато-коричневый, БФ) AN/PVS-15 (Winter, WP) AN/PVS-15 (冬季迷彩, WP) AN/PVS-15 (설상, WP) + AN/PVS-15 (Белый, БФ) GPNVG (Black, WP) @@ -54,7 +55,7 @@ GPNVG (grün, WP) GPNVG (녹색, 백색광) GPNVG (vertes, WP) - GPNVG (Зелёный, БФ) + GPNVG (Чёрный, БФ) GPNVG (Tan, WP) @@ -64,7 +65,7 @@ GPNVG (hellbraun, WP) GPNVG (황갈색, 백색광) GPNVG (marron clair, WP) - GPNVG (желтовато-коричневый, БФ) + GPNVG (Желтовато-коричневый, БФ) GPNVG (Green, WP) @@ -74,12 +75,13 @@ GPNVG (Schwarz, WP) GPNVG (검정, 백색광) GPNVG (noires, WP) - GPNVG (Чёрный, БФ) + GPNVG (Зелёный, БФ) GPNVG (Winter, WP) GPNVG (冬季迷彩, WP) GPNVG (설상, WP) + AN/PVS-15 (Белый, БФ) diff --git a/addons/frag/stringtable.xml b/addons/frag/stringtable.xml index 7addcd4c38..2bd76c2928 100644 --- a/addons/frag/stringtable.xml +++ b/addons/frag/stringtable.xml @@ -136,7 +136,7 @@ Esta definição controla a quantidade máxima de projéteis que o sistema de fragmentação e estilhaçamento irá acompanhar em qualquer momento. Se mais projéteis são disparados, eles não serão rastreados. Diminua essa configuração se você não quiser que o FPS caia em cenários com alta contagem de projéteis (> 200 projéteis no ar ao mesmo tempo) Ce paramètre contrôle le nombre maximum de projectiles et d'éclats résultant de la fragmentation, que le système peut suivre à chaque instant.\nSi plus de projectiles sont générés, ils ne seront pas pris en compte. Baissez ce réglage si vous ne voulez pas de chute de FPS en cas de nombre important de projectiles (>200 éclats en même temps). Ez a beállítás szabályozza a repeszeződés és pattogzás által kilőtt objektumok követett számát. Ha több ez a szám, ezek az objektumok nem lesznek követve. Csökkentsd ezt a beállítást, ha nem akarsz lassulásokat magas-törmelékmennyiségű helyzetekben (200+ repesz a levegőben egyszerre) - Эта настройка контролирует максимальное количество снарядов, которок отслеживает система осколков и обломков в каждый момент времени. Снаряды, выстреленные сверх этого числа, отслеживаться не будут. Уменьшите это значение, если вы не хотите падения FPS при большом количестве снарядов в одной перестрелке (> 200 одновременно летящих снарядов) + Эта настройка контролирует максимальное количество снарядов, которок отслеживает система осколков и обломков в каждый момент времени. /nСнаряды, выстреленные сверх этого числа, отслеживаться не будут. Уменьшите это значение, если вы не хотите падения FPS при большом количестве снарядов в одной перестрелке (> 200 одновременно летящих снарядов) Questo parametro controlla il numero massimo di proiettili che la frammentazione e il sistema di spalling tracciano in ogni momento. Se vengono sparati ulteriori proiettili, non verranno tracciati. Abbassa questo parametro se non vuoi cali di FPS in scenari con molti proiettili (>200 proiettili in aria contemporaneamente) この設定では、断片化および剥離システムが常に追跡する飛翔体の最大量を制御します。 さらに多くの飛翔体が発射された場合、それらは追跡されません。 弾数が多いシナリオでFPSを低下させたくない場合は、この設定を下げてください。 (一度に200発以上が空中に発射されます) 이 설정은 탄환파편 및 파편 시스템으로 인해 생긴 발사체의 수를 결정합니다. 만약 더 많은 발사체가 나올 경우 정해진 수 이외에는 추적하지 않습니다. 이 설정을 낮춤으로써 파편이 많은 시나리오를 실행할때 더욱 원활히 진행할 수 있습니다 (한 번에 200개 이하) diff --git a/addons/goggles/stringtable.xml b/addons/goggles/stringtable.xml index 5fc06612d0..f02b95bf5c 100644 --- a/addons/goggles/stringtable.xml +++ b/addons/goggles/stringtable.xml @@ -101,7 +101,7 @@ Effects - эффекты + Эффекты エフェクト Efekty Effekte diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index 83a6908694..6da10b007c 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -366,6 +366,7 @@ Put/take out earplugs 耳栓を着け外す + Вставить/вынуть беруши diff --git a/addons/killtracker/stringtable.xml b/addons/killtracker/stringtable.xml index 47866c9adb..9faa16d155 100644 --- a/addons/killtracker/stringtable.xml +++ b/addons/killtracker/stringtable.xml @@ -101,7 +101,7 @@ Defines if killed AIs will be shown in the kill tracker during mission debriefing. Udává zdali se zabité AI budou ukazovat v kill trackeru v průběhu debriefingu po misi. - Определяет, убит ИИ, как будет показано в трекере убийств во время разбора миссии. + Определяет, будут ли убитые ИИ отображаться в трекере убийств во время дебрифинга миссии. ミッションデブリーフィングのキルトラッカーに殺害されたAIが表示されるかどうかを定義します。 diff --git a/addons/main/stringtable.xml b/addons/main/stringtable.xml index 902c0d97c2..b676359f74 100644 --- a/addons/main/stringtable.xml +++ b/addons/main/stringtable.xml @@ -6,7 +6,7 @@ ACE Logistik ACE Logistyka Logísticas ACE - ACE: логистика + ACE: Логистика ACE Logistika ACE Logística ACE Logistica diff --git a/addons/maptools/stringtable.xml b/addons/maptools/stringtable.xml index 7f02337a17..6bef2ce482 100644 --- a/addons/maptools/stringtable.xml +++ b/addons/maptools/stringtable.xml @@ -268,13 +268,13 @@ Allow Plotting Board Drawing channels 標定盤への書き込みを許可するチャンネル 플로팅 보드 그리기 채널 허용 - Разрешить создание каналов для рисования на графической плате + Разрешить создание каналов на миллиметровой доске. Channels in which plotting board drawing is enabled. どのチャンネルで標定盤の書き込みを有効化するか。 플로팅 보드 그리기가 활성화된 채널입니다. - Каналы, в которых включено рисование на графической плате. + Каналы, в которых включено рисование на миллиметровой доске. Allow Direct Comms Only (Polylines Only) @@ -292,61 +292,61 @@ Plotting Board 標定盤 플로팅 보드 - Графическая доска + Миллиметровая доска Plotting Board Acrylic 標定盤の アクリル板 플로팅 보드 (아크릴) - Графическая доска акрилловая + Миллиметровая доска акрилловая Plotting Board Ruler 標定盤の 定規 플로팅 보드 (자) - Линейка для черчения на доске + Линейка для миллиметровой доски To Plotting Board 標定盤に 플로팅 보드에 - К чертежной доске + К миллиметровой доске. To Plotting Board Acrylic 標定盤の アクリル板に 플로팅 보드 (아크릴)에 - К чертежной доске акрилловой + К миллиметровой доске акрилловой To Plotting Board Ruler 標定盤の 定規に 플로팅 보드 (자)에 - К линейке для построения чертежной доски + К линейке миллиметровой доски. Wipe all markers off Plotting Board 標定盤の 全マーカーを 拭き消す 플로팅 보드에 있는 모든 마커 지우기 - Сотрите все маркеры с доски для черчения + Сотрите все маркеры с миллиметровой доски. Show Plotting Board 標定盤を 表示 플로팅 보드 보이기 - Скрыть графическую доску + Показать миллиметровую доску. Hide Plotting Board 標定盤を 隠す 플로팅 보드 숨기기 - Переключение линейки для построения графической доски + Скрыть миллиметровую доску. Toggle Plotting Board Ruler 標定盤の 定規を 表示切替 플로팅 보드 (자) 토글 - Переключение линейки для построения графической доски + Переключить линейку миллиметровой доски. Align diff --git a/addons/markers/stringtable.xml b/addons/markers/stringtable.xml index f08406fce0..7c9b56c599 100644 --- a/addons/markers/stringtable.xml +++ b/addons/markers/stringtable.xml @@ -318,7 +318,7 @@ UTC Minutes Offset - UTC Минутное Смещение + UTC Минутное смещение Décalage des minutes UTC UTC分オフセット Desplazamiento de minutos UTC diff --git a/addons/medical_damage/stringtable.xml b/addons/medical_damage/stringtable.xml index 63d10dcd35..f21cb1901f 100644 --- a/addons/medical_damage/stringtable.xml +++ b/addons/medical_damage/stringtable.xml @@ -20,7 +20,7 @@ Sets the amount of damage a player can receive before going unconscious (and dying if "Sum of Trauma" is enabled). プレイヤーが気絶するまでに受けられるダメージ量を設定します。\n("外傷の合計"が有効な場合は死亡するまでに受けられるダメージ量) Définit la quantité de dégâts qu'un joueur peut subir avant de perdre connaissance (ou mourir, si l'option "Somme des traumatismes" est sélectionnée). - Устанавливает количество урона, которое может получить игрок, прежде чем потеряет сознание. + Устанавливает количество урона, которое может получить игрок, прежде чем потеряет сознание (и умирает, если включена функция "Сумма травм"). Define a quantidade de dano que um jogador pode receber antes de ficar inconsciente. 設定玩家在無意識前能承受多少傷害。 设置玩家在昏迷前可以承受的伤害量(如果启用了“创伤总和”,则会死亡)。 @@ -51,7 +51,7 @@ Sets the amount of damage an AI unit can receive before going unconscious (or dying when "Sum of Trauma" is enabled). AIが気絶するまでに受けられるダメージ量を設定します。\n("外傷の合計"が有効な場合は死亡するまでに受けられるダメージ量) Définit la quantité de dégâts qu'une unité IA peut subir avant de perdre connaissance (ou mourir, si l'option "Somme des traumatismes" est sélectionnée). - Устанавливает количество урона, которое может получить ИИ, прежде чем потеряет сознание. + Устанавливает количество урона, которое может получить ИИ, прежде чем потеряет сознание (или умирает, когда включена функция "Сумма травм").. Define a quantidade de dano que uma IA pode receber antes de ficar inconsciente. 設定AI在無意識之前能承受多少傷害 设置 AI 在昏迷前可以承受的伤害量(如果启用了“创伤总和”,则会死亡)。 diff --git a/addons/medical_engine/stringtable.xml b/addons/medical_engine/stringtable.xml index c79b35ad22..3aa0831a28 100644 --- a/addons/medical_engine/stringtable.xml +++ b/addons/medical_engine/stringtable.xml @@ -47,7 +47,7 @@ Determina l'effetto di danni sul corpo che 'trapassano' l'armatura. Rende alti valori di protezione, come quelli su corpetti GL, meno efficaci.\nUtilizza 0% per il comportamento prima di v3.16.0.\nModifica questo valore solo se sai cosa stai facendo! Controla o efeito de penetração (passThrough) da blindagem no dano final. Torna valores de blindagem altos, como os usados em coletes GL, menos eficazes.\nUse 0% para o comportamento de blindagem anterior à versão 3.16.0.\nSó mexa nisso se souber o que está fazendo! ボディアーマーの'passThrough'値が最終的な身体ダメージに与える影響を調整します。擲弾兵リグで使用されるような高い装甲値では効果が低くなります。\n3.16.0以前の挙動にするには0%にしてください。\nこれが何かわからない場合は変更しないことをお勧めします。 - Контролирует эффект "прохождения" брони при нанесении конечного урона. Делает высокие значения брони, подобные тем, которые используются в GL rigs, менее эффективными.n\используйте 0% для поведения брони до версии 3.16.0.n\прикасайтесь к этому, только если знаете, что делаете! + Контролирует эффект `passThrough` при нанесении конечного урона. Делает высокие значения брони, подобные тем, которые используются в GL rigs, менее эффективными.\nИспользуйте 0% для поведения брони до версии 3.16.0.n\Прикасайтесь к этому, только если знаете, что делаете! diff --git a/addons/medical_gui/stringtable.xml b/addons/medical_gui/stringtable.xml index 14f50eb93c..68659c7c6c 100644 --- a/addons/medical_gui/stringtable.xml +++ b/addons/medical_gui/stringtable.xml @@ -217,7 +217,7 @@ Mostra livello di Triage nel Menù d'Interazione インタラクションにトリアージ レベルを表示 Mostrar nivel de triado en menú de interacción - Показывать группу триажа в меню взаимодействий + Показать уровень триажа в меню взаимодействия Pokaż poziom Triażu w menu interakcji Zeige Triage-Einstufung im Interaktionsmenü 在交互式菜单中显示分诊级别 @@ -292,7 +292,7 @@ Sbircia Info Mediche Medizinische Info anzeigen 医療情報一時表示 - Просмотрите медицинскую информацию + Просмотр медицинской информации Medical Peek Duration @@ -1041,7 +1041,7 @@ Massive Blutung Gravissima emorragia 出血は酷く多い - Сильное кровотечение + Огромное кровотечение in Pain @@ -1387,7 +1387,7 @@ Mostra info mediche se colpito Zeige medizinische Info beim Treffer an 被弾時の医療情報一時表示 - Просмотрите медицинскую информацию о попадании + Показать медицинскую информацию о попадании Temporarily show medical info when injured. diff --git a/addons/medical_status/stringtable.xml b/addons/medical_status/stringtable.xml index 01c2cc21c6..f6f51b5533 100644 --- a/addons/medical_status/stringtable.xml +++ b/addons/medical_status/stringtable.xml @@ -105,7 +105,7 @@ Controls how quickly fluid flows out of IV Bags. The IV Bag volume change is calculated as:\ntime interval (s) * iv change per second (4.1667 mL/s) * flow rate (this coefficient). Wie schnell der Effekt der Transfusion eintritt IV 輸液パックから輸液が流出する速度を制御します。 IV 輸液バッグの容量変化は次のように計算されます:\n時間間隔(秒) x 点滴速度毎秒(4.1667 mL/秒) x 流量(この係数) - Определяет, насколько быстро подействуют эффекты внутривенного переливания + Определяет, насколько быстро подействуют эффекты внутривенного переливания как:\nвременной интервал (s) * изменение внутривенного вливания в секунду (4,1667 мл/с) * скорость потока (этот коэффициент). Définit la vitesse à laquelle le liquide s'écoule des poches de perfusion.\nLa variation du volume de poche IV est calculée selon la formule suivante :\n intervalle de temps (s) * variation IV par seconde (4,1667 ml/s) * débit (ce coefficient). Controla o quão rápido fluidos são extraídos de bolsas de IV. A mudança no volume da bolsa d IV é calculado assim:\nIntervalo de tempo (s) * mudança de iv por segundo (4.1667 mL/s) * Velocidade de transferência (esse valor) 控制從點滴輸入人體的液體流量多快。點滴的體積更改是以\n時間間隔(單位秒)乘上點滴每秒速度(4.1667毫升/秒)乘上流量(該係數)。 @@ -135,7 +135,7 @@ 플레이어가 기절할 때 무기를 떨어뜨릴 확률입니다.\nAI는 영향을 받지 않습니다. Pourcentage de chances pour un joueur de lâcher son arme lorsqu'il perd connaissance.\nAucun effet sur les IA. プレーヤーが意識を失ったときに武器を落とす可能性。\nAI には影響しません。 - Шанс для игрока выронить свое оружие, когда он теряет сознание.n\Не влияет на ИИ + Шанс для игрока выронить свое оружие, когда он теряет сознание.\nНе влияет на ИИ diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml index 6bf2411ec3..11798c41eb 100644 --- a/addons/medical_treatment/stringtable.xml +++ b/addons/medical_treatment/stringtable.xml @@ -70,7 +70,7 @@ Activé & Diagnostic du décès/de l'arrêt cardiaque Włączone i pozwala zdiagnozować Śmierć/Zatrzymanie Akcji Serca 有効 & 死亡/心停止状態を診断可能 - Включено & Может диагностировать смерть/остановку сердца + Включено и может диагностировать смерть/остановку сердца Aktiviert & kann Tod/Herzstillstand diagnostizieren 已启用 & 可以诊断死亡/心搏骤停 활성화 및 사망/심정지 진찰가능 @@ -775,7 +775,7 @@ Samo-zašívání Zszywanie własnych ran Selbstnähen - Зашивание своей раны + Зашитие своей раны Auto cosido 봉합키트 자가 사용 @@ -4603,7 +4603,7 @@ Vücudu siyah ceset torbasına yerleştir 遺体袋 (黒) に入れる 시체를 검은 시체가방에 놓기 - Положите тело в черный мешок для тела + Положить тело в черный мешок для тела Place body in blue bodybag @@ -4616,7 +4616,7 @@ Vücudu mavi ceset torbasına yerleştir 遺体袋 (青) に入れる 시체를 파란 시체가방에 놓기 - Положите тело в синий мешок для тела + Положить тело в синий мешок для тела Place body in white bodybag @@ -4629,7 +4629,7 @@ Vücudu beyaz ceset torbasına yerleştir 遺体袋 (白) に入れる 시체를 흰 시체가방에 놓기 - Положите тело в белый мешок для тела + Положить тело в белый мешок для тела Placing body in bodybag... @@ -4666,7 +4666,7 @@ Grab für Leichnam ausheben ... Scavando tomba per cadavere... 墓を掘っています - Рою могилу для тела... + Рытьё могилы для тела... %1 has bandaged patient @@ -4837,7 +4837,7 @@ Heal fully bandaged hitpoints Lecz w pełni zabandażowane hitpointy Curar miembros totalmente vendados - Исцелять полностью перебинтованные части тела + Исцелить полностью перебинтованные части тела Curar membros totalmente enfaixados Heal fully bandaged hitpoints Cura hitpoints completamente bendati @@ -4928,7 +4928,7 @@ Pansement de plaies multiples Srotolamento Bendaggi 包帯の繰り越し - Переворачивание бинта + Перевязка множественных ран If enabled, bandages can close different types of wounds on the same body part.\nBandaging multiple injuries will scale bandaging time accordingly. @@ -4938,7 +4938,7 @@ Si activé, les bandages peuvent fermer plusieurs types de blessures sur la même partie du corps.\nPanser de multiples blessures modifiera la durée d'application en conséquence. Se attivo, un singolo bendaggio potrà chiudere più ferite sulla stessa parte del corpo.\nBendare più ferite di conseguenza richiederà più tempo. 有効にすると、体の同じ部分にある別の種類の傷を一つの包帯で閉じることができます。\n複数の傷に包帯を巻くと、それに応じて包帯時間が変動します。 - Если эта функция включена, бинты могут закрывать различные типы ран на одной и той же части тела.n\При перевязке нескольких повреждений время перевязки будет увеличено соответствующим образом. + Если эта функция включена, бинты могут закрывать различные типы ран на одной и той же части тела.\nПри перевязке нескольких повреждений время перевязки будет увеличено соответствующим образом. Bandage Effectiveness Coefficient @@ -5008,12 +5008,12 @@ Administer Painkillers - Вводите обезболивающие + Испол-ть обезболивающие 鎮痛剤を投与 Administering Painkillers... - Ввод обезболивающего... + Использование обезболивающего... 鎮痛剤を投与しています・・・ diff --git a/addons/medical_vitals/stringtable.xml b/addons/medical_vitals/stringtable.xml index b62f7f1d09..45b3fd9e28 100644 --- a/addons/medical_vitals/stringtable.xml +++ b/addons/medical_vitals/stringtable.xml @@ -4,7 +4,7 @@ Vitals Vitais - Жизненно важные органы + Жизненно-важные органы バイタル diff --git a/addons/novehicleclanlogo/stringtable.xml b/addons/novehicleclanlogo/stringtable.xml index d3f01899a9..96d463f582 100644 --- a/addons/novehicleclanlogo/stringtable.xml +++ b/addons/novehicleclanlogo/stringtable.xml @@ -5,7 +5,7 @@ Remove clan logo from vehicles Usuń logo klanu z pojazdów 차량에서 클랜 로고 제거 - Убрать логотип кланов с техники + Убрать логотип отрядов с техники Suprimir logo del clan de los vehículos 乗り物から部隊ロゴを削除 Clan-Logo von Fahrzeugen entfernen @@ -16,7 +16,7 @@ Prevents clan logo from being displayed on vehicles controlled by players. Zapobiega wyświetlaniu logo klanu na pojazdach kontrolowanych przez graczy. 플레이어가 조종하는 차량에 클랜 로고가 표시되지 않도록 합니다. - Не отображать логотипы кланов на технике контроллируемой игроками. + Не отображать логотипы отрядов на технике контроллируемой игроками. Previene que se muestre el logo del clan en los vehículos controlados por jugadores. プレイヤーが操作する乗り物に部隊ロゴが表示されないようにする。 Verhindert, dass das Clan-Logo auf von Spielern kontrollierten Fahrzeugen angezeigt wird. From 9bb9fae85c822a6c9cf6bb1369196a4c5230d754 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sat, 9 Mar 2024 17:17:13 -0600 Subject: [PATCH 004/132] Arsenal - Show load stat's actual value (#9833) * Arsenal - Show load stat's actual value * Update addons/arsenal/functions/fnc_statTextStatement_load.sqf Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> --------- Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> --- addons/arsenal/ACE_Arsenal_Stats.hpp | 2 ++ addons/arsenal/XEH_PREP.hpp | 1 + .../functions/fnc_statTextStatement_load.sqf | 26 +++++++++++++++++++ 3 files changed, 29 insertions(+) create mode 100644 addons/arsenal/functions/fnc_statTextStatement_load.sqf diff --git a/addons/arsenal/ACE_Arsenal_Stats.hpp b/addons/arsenal/ACE_Arsenal_Stats.hpp index 7748d1bdc5..0856685447 100644 --- a/addons/arsenal/ACE_Arsenal_Stats.hpp +++ b/addons/arsenal/ACE_Arsenal_Stats.hpp @@ -123,7 +123,9 @@ class GVAR(stats) { stats[] = {"maximumLoad"}; displayName = "$STR_a3_rscdisplayarsenal_stat_load"; showBar = 1; + showText = 1; barStatement = QUOTE([ARR_3((_this select 0) select 0,_this select 1,[ARR_3([ARR_2(0,500)],[ARR_2(0.01,1)],false)])] call FUNC(statBarStatement_default)); + textStatement = QUOTE(call FUNC(statTextStatement_load)); tabs[] = {{3,4,5}, {}}; }; class ACE_smokeChemTTL: statBase { diff --git a/addons/arsenal/XEH_PREP.hpp b/addons/arsenal/XEH_PREP.hpp index 61b713fe9f..94d4739b60 100644 --- a/addons/arsenal/XEH_PREP.hpp +++ b/addons/arsenal/XEH_PREP.hpp @@ -98,6 +98,7 @@ PREP(statBarStatement_rateOfFIre); PREP(statTextStatement_accuracy); PREP(statTextStatement_explosionTime); PREP(statTextStatement_illuminators); +PREP(statTextStatement_load); PREP(statTextStatement_magCount); PREP(statTextStatement_mass); PREP(statTextStatement_rateOfFire); diff --git a/addons/arsenal/functions/fnc_statTextStatement_load.sqf b/addons/arsenal/functions/fnc_statTextStatement_load.sqf new file mode 100644 index 0000000000..032019f582 --- /dev/null +++ b/addons/arsenal/functions/fnc_statTextStatement_load.sqf @@ -0,0 +1,26 @@ +#include "..\script_component.hpp" +/* + * Author: PabstMirror + * Text statement for the load stat. + * + * Arguments: + * 0: Stats + * 1: Item config path + * + * Return Value: + * Stat Text + * + * Public: No +*/ + +params ["_stats", "_config"]; +TRACE_2("statTextStatement_load",_stats,_config); + +if (!isNull (_config >> "ItemInfo" >> "containerClass")) then { // Uniform/Vest + _config = configfile >> "CfgVehicles" >> getText (_config >> "ItemInfo" >> "containerClass"); +}; + +private _load = getNumber (_config >> (_stats # 0)); + +if (_load <= 0) exitWith { LELSTRING(common,none) }; +format ["%1kg (%2lb)", (_load * 0.1 * (1 / 2.2046)) toFixed 2, (_load * 0.1) toFixed 2] From d54ba4ddcf5fef69cee208adf70cd3bd36c91817 Mon Sep 17 00:00:00 2001 From: Fabio Schick <58027418+mrschick@users.noreply.github.com> Date: Sun, 10 Mar 2024 00:58:15 +0100 Subject: [PATCH 005/132] Translations - Complete Italian (#9844) * Arsenal Italian Translations * Cargo Italian Translations * Hearing Italian Translations * Killtracker Italian Translations * Map Tools Italian Translations * Markers Italian Translations * Medical GUI Italian Translations * Medical Treatment Italian Translations * Medical Vitals Italian Translations * Overheating Italian Translations --- addons/arsenal/stringtable.xml | 2 ++ addons/cargo/stringtable.xml | 5 +++++ addons/hearing/stringtable.xml | 1 + addons/killtracker/stringtable.xml | 3 +++ addons/maptools/stringtable.xml | 18 ++++++++++++++++++ addons/markers/stringtable.xml | 11 +++++++++++ addons/medical_gui/stringtable.xml | 3 +++ addons/medical_treatment/stringtable.xml | 4 ++++ addons/medical_vitals/stringtable.xml | 3 +++ addons/overheating/stringtable.xml | 6 ++++++ 10 files changed, 56 insertions(+) diff --git a/addons/arsenal/stringtable.xml b/addons/arsenal/stringtable.xml index 52ec97c138..a469f39888 100644 --- a/addons/arsenal/stringtable.xml +++ b/addons/arsenal/stringtable.xml @@ -1240,11 +1240,13 @@ Thermal integrated + Termico integrato 熱画像装置内蔵 Интегрирован тепловизор. Thermal & Primary integrated + Termico e Primario integrato 熱画像装置内蔵・プライマリに内蔵 Интегрирован тепловизор и осн.прицел. diff --git a/addons/cargo/stringtable.xml b/addons/cargo/stringtable.xml index 4c9ecbc3f8..0a52bde972 100644 --- a/addons/cargo/stringtable.xml +++ b/addons/cargo/stringtable.xml @@ -35,6 +35,7 @@ Deploy + Piazza Разместить 配置する @@ -279,12 +280,14 @@ Loading %1 into %2... Cargando %1 en %2... + Caricando %1 in %2... %1 を %2 に積み込んでいます・・・ Загружаем %1 в %2... Unloading %1 from %2... Descargando %1 de %2... + Scaricando %1 da %2... %1 を %2 から降ろしています・・・ Выгружаем %1 из %2... @@ -570,11 +573,13 @@ Enable deploy + Abilita Piazzamento Включить размещение 配置機能を有効化 Controls whether cargo items can be unloaded via the deploy method. + Determina se oggetti in carico possono essere scaricati e piazzati direttamente. Определяет, можно ли выгружать грузы с помощью метода размещения. 配置機能を介して貨物アイテムを降ろすことが出来るかどうかを制御します。 diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index 6da10b007c..4f4afb48ae 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -367,6 +367,7 @@ Put/take out earplugs 耳栓を着け外す Вставить/вынуть беруши + Metti/Togli tappi diff --git a/addons/killtracker/stringtable.xml b/addons/killtracker/stringtable.xml index 9faa16d155..a44b42e1bc 100644 --- a/addons/killtracker/stringtable.xml +++ b/addons/killtracker/stringtable.xml @@ -3,6 +3,7 @@ ACE Kill Tracker + ACE Tracciatore di Uccisioni ACE Kill Tracker ACE Отслеживание убийств ACE キルトラッカー @@ -94,12 +95,14 @@ Track AI units killed by player + Traccia IA uccise da giocatori Sledovat AI zabité hráči Отслеживание юнитов ИИ, убитых игроком プレイヤーに殺害されたAIユニットを追跡 Defines if killed AIs will be shown in the kill tracker during mission debriefing. + Determina se IA uccise verranno visualizzate nel tracciatore durante il debriefing della missione. Udává zdali se zabité AI budou ukazovat v kill trackeru v průběhu debriefingu po misi. Определяет, будут ли убитые ИИ отображаться в трекере убийств во время дебрифинга миссии. ミッションデブリーフィングのキルトラッカーに殺害されたAIが表示されるかどうかを定義します。 diff --git a/addons/maptools/stringtable.xml b/addons/maptools/stringtable.xml index 6bef2ce482..9d23c4ffff 100644 --- a/addons/maptools/stringtable.xml +++ b/addons/maptools/stringtable.xml @@ -39,12 +39,14 @@ Plotting Board 플로팅 보드 標定盤 + Tavola di calcolo Графическая доска The Plotting Board is a map tool designed for use in the directing of short range indirect fires. 플로팅 보드는 단거리 간접 사격을 지시하는 데 사용하도록 설계된 독도용 도구입니다. 標定盤(プロッティング・ボード)は、短距離の間接射撃の指示に使用するために設計されたマップツールです。 + La tavola di calcolo è uno strumento utilizzato per dirigere fuoco di artiglieria a corto raggio. Графическая доска - это картографический инструмент, предназначенный для использования при ведении непрямого огня с малой дистанции. @@ -268,84 +270,98 @@ Allow Plotting Board Drawing channels 標定盤への書き込みを許可するチャンネル 플로팅 보드 그리기 채널 허용 + Canali ammessi su tavola di calcolo Разрешить создание каналов на миллиметровой доске. Channels in which plotting board drawing is enabled. どのチャンネルで標定盤の書き込みを有効化するか。 플로팅 보드 그리기가 활성화된 채널입니다. + Canali in cui si può disegnare sulla tavola di calcolo. Каналы, в которых включено рисование на миллиметровой доске. Allow Direct Comms Only (Polylines Only) 直接チャンネルのみ許可 (線のみ) 직접교신만 허용 (선 긋기만) + Comunicazioni Dirette (solo linee) Разрешать только прямую связь (только полилинии) Allow Direct/Group Comms (Polylines and Group Markers) 直接/グループチャンネルを許可 (線とグループマーカー) 직접교신/그룹무전망 허용 (선 긋기와 그룹 마커) + Comunicazioni dirette/gruppo (linee e marker) Разрешить прямую/групповую связь (полилинии и групповые маркеры) Plotting Board 標定盤 플로팅 보드 + Tavola di calcolo Миллиметровая доска Plotting Board Acrylic 標定盤の アクリル板 플로팅 보드 (아크릴) + Acrilico tavola di calcolo Миллиметровая доска акрилловая Plotting Board Ruler 標定盤の 定規 플로팅 보드 (자) + Righello tavola di calcolo Линейка для миллиметровой доски To Plotting Board 標定盤に 플로팅 보드에 + Su tavola di calcolo К миллиметровой доске. To Plotting Board Acrylic 標定盤の アクリル板に 플로팅 보드 (아크릴)에 + Su acrilico tavola di calcolo К миллиметровой доске акрилловой To Plotting Board Ruler 標定盤の 定規に 플로팅 보드 (자)에 + Su righello tavola di calcolo К линейке миллиметровой доски. Wipe all markers off Plotting Board 標定盤の 全マーカーを 拭き消す 플로팅 보드에 있는 모든 마커 지우기 + Cancella tutti i disegni dalla tavola Сотрите все маркеры с миллиметровой доски. Show Plotting Board 標定盤を 表示 플로팅 보드 보이기 + Mostra tavola di calcolo Показать миллиметровую доску. Hide Plotting Board 標定盤を 隠す 플로팅 보드 숨기기 + Nascondi tavola di calcolo Скрыть миллиметровую доску. Toggle Plotting Board Ruler 標定盤の 定規を 表示切替 플로팅 보드 (자) 토글 + Mostra/Nascondi Righello Переключить линейку миллиметровой доски. @@ -394,12 +410,14 @@ Up 上に 위로 + Su Вверх To Maptool マップツールに 독도용 도구로 + Su strumento cartografico К инструментам карты diff --git a/addons/markers/stringtable.xml b/addons/markers/stringtable.xml index 7c9b56c599..a0c0be17f7 100644 --- a/addons/markers/stringtable.xml +++ b/addons/markers/stringtable.xml @@ -247,6 +247,7 @@ Zona horaria Strefa czasowa Zeitzone + Fuso orario 时区 시간대 @@ -258,6 +259,7 @@ Cambie la zona horaria para la marca de tiempo Zmień strefę czasową dla znaczników czasu Ändern Sie die Zeitzone für den Zeitstempel + Modifica il fuso orario per la marca temporale 更改时间戳的时区 타임스탬프의 시간대를 변경하십시오 @@ -269,6 +271,7 @@ Hora del juego Czas gry Ingame-Zeit + Ora del gioco 游戏内时间 게임 시간 @@ -280,6 +283,7 @@ Hora del sistema Czas systemowy Systemzeit + Ora del sistema 系统时间 시스템 시간 @@ -291,6 +295,7 @@ Hora UTC Czas UTC UTC-Zeit + Tempo-UTC UTC时间 UTC 시간 @@ -302,6 +307,7 @@ Desplazamiento UTC Przesunięcie UTC UTC-Verschiebung + Deviazione-UTC UTC偏移量 UTC 오프셋 @@ -313,6 +319,7 @@ Cambiar el desplazamiento horario para la marca de tiempo UTC Zmień przesunięcie czasu dla sygnatury czasowej UTC Ändere die Zeitverschiebung für den UTC-Zeitstempel + Modifica la deviazione della marca temporale UTC. 更改UTC时间戳的时间偏移量 UTC 타임 스탬프의 시간 오프셋을 변경하십시오 @@ -324,6 +331,7 @@ Desplazamiento de minutos UTC Przesunięcie minut UTC UTC-Minutenversatz + Deviazione Minuti UTC UTC分钟偏移量 UTC 분 오프셋 @@ -335,6 +343,7 @@ Cambiar el desplazamiento de minutos para la marca de tiempo UTC Zmień przesunięcie minut dla sygnatury czasowej UTC Ändere den Minutenversatz für den UTC-Zeitstempel + Modifica la deviazione dei minuti della marca temporale UTC. 更改UTC时间戳的分钟偏移量 UTC 타임 스탬프의 분 오프셋을 변경하십시오 @@ -407,6 +416,7 @@ "MM" - Milliseconds (from 0 to 59) "MM" - Millisecondes (de 0 à 59) "MS" - Milisekunden (von 0 bis 59) + "MS" - Millisecondi (da 0 a 59) "MS" - Milissegundos (de 0 a 59) "MS" - 밀리초 (0부터 59까지) "MM" - ミリ秒 (0から59) @@ -416,6 +426,7 @@ "mmm" - Milliseconds (from 0 to 999) "mmm" - Millisecondes (de 0 à 999) "mmm" - Milisekunden (von 0 bis 999) + "mmm" - Millisecondi (da 0 a 999) "mmm" - Milissegundos (de 0 a 999) "mmm" - 밀리초 (0부터 999까지) "mmm" - ミリ秒 (0から599) diff --git a/addons/medical_gui/stringtable.xml b/addons/medical_gui/stringtable.xml index 68659c7c6c..db0bce9d2a 100644 --- a/addons/medical_gui/stringtable.xml +++ b/addons/medical_gui/stringtable.xml @@ -1361,6 +1361,7 @@ Show Bleeding State Mostrar estado de sangrado Blutungsstatus anzeigen + Mostra stato di sanguinamento Mostrar estado de sangramento 出血状態の表示 @@ -1368,6 +1369,7 @@ Display if the patient is bleeding, optionally with rate Mostrar si el paciente está sangrando, opcionalmente con tasa Zeigt an, dass der Patient blutet, optional mit Rate + Mostra se il paziente sta sanguinando, opzionalmente con rateo Mostrar se o paciente está sangrando, opcionalmente com taxa 患者が出血しているかどうかを表示します。オプションで出血速度も表示します @@ -1375,6 +1377,7 @@ Show Bleeding Rate Mostrar tasa de sangrado Blutungsrate anzeigen + Mostra rateo di sanguinamento Mostrar taxa de sangramento 出血速度の表示 diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml index 11798c41eb..2ac957589c 100644 --- a/addons/medical_treatment/stringtable.xml +++ b/addons/medical_treatment/stringtable.xml @@ -5008,21 +5008,25 @@ Administer Painkillers + Somministra Antidolorifici Испол-ть обезболивающие 鎮痛剤を投与 Administering Painkillers... + Somministrando Antidolorifici... Использование обезболивающего... 鎮痛剤を投与しています・・・ Over-the-counter analgesic used to combat light to moderate pain experiences. + Antidolorifici senza prescrizione, usati per alleviare dolore leggero o moderato. Безрецептурный анальгетик, используемый для борьбы с легкими и умеренными болевыми ощущениями. 軽度から中程度の痛みに対処するために使用される市販の鎮痛薬。 Over-the-counter analgesic used to combat light to moderate pain experiences. + Antidolorifici senza prescrizione, usati per alleviare dolore leggero o moderato. Безрецептурный анальгетик, используемый для борьбы с легкими и умеренными болевыми ощущениями. 軽度から中程度の痛みに対処するために使用される市販の鎮痛薬。 diff --git a/addons/medical_vitals/stringtable.xml b/addons/medical_vitals/stringtable.xml index 45b3fd9e28..57a1e250dd 100644 --- a/addons/medical_vitals/stringtable.xml +++ b/addons/medical_vitals/stringtable.xml @@ -4,16 +4,19 @@ Vitals Vitais + Parametri Vitali Жизненно-важные органы バイタル Enable SpO2 Simulation + Abilita simulazione SpO2 Включить имитацию SpO2 SpO2シミュレーションを有効化 Enables oxygen saturation simulation, providing variable heart rate and oxygen demand based on physical activity and altitude. Required for Airway Management. + Abilita la simulazione della saturazione di ossigeno, alterando la frequenza cardiaca e consumo di ossigeno in funzione dell'attività fisica e l'altitudine. Richiesto per la gestione delle vie aeree. Позволяет имитировать насыщение кислородом, обеспечивая переменную частоту сердечных сокращений и потребность в кислороде в зависимости от физической активности и высоты над уровнем моря. Требуется для управления дыхательными путями. 酸素飽和度シミュレーションを有効にし、身体活動や標高に基づいて変動する心拍数と酸素要求量の機能を提供します。 気道管理に必要です。 diff --git a/addons/overheating/stringtable.xml b/addons/overheating/stringtable.xml index 8ec603a7ed..ba662bf684 100644 --- a/addons/overheating/stringtable.xml +++ b/addons/overheating/stringtable.xml @@ -877,36 +877,42 @@ Bolt Type + Tipo di otturatore 遊底(ボルト)形式 노리쇠 방식 Тип болта Open Bolt + Otturatore Aperto オープンボルト 오픈 볼트 Открыть болт Closed Bolt + Otturatore Chiuso クローズドボルト 클로즈드 볼트 Закрыть болт Barrel Type + Tipo di Canna 銃身形式 총열 방식 Тип ствола Non-Removeable + Non-Rimovibile 取り外し不可 제거 불가 Несъемный Quick Change + Cambio Rapido 即時交換可 신속 교체 Быстросъемный From dd32190dfa9672a99128ccefa2f51f6141def4f4 Mon Sep 17 00:00:00 2001 From: Fabio Schick <58027418+mrschick@users.noreply.github.com> Date: Sun, 10 Mar 2024 15:48:43 +0100 Subject: [PATCH 006/132] Parachute - Add Seconds Indicator to Altimeter Watch (#9834) --- addons/parachute/RscTitles.hpp | 6 +++--- addons/parachute/functions/fnc_showAltimeter.sqf | 8 +++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/addons/parachute/RscTitles.hpp b/addons/parachute/RscTitles.hpp index 9e0a169937..48cf11bee4 100644 --- a/addons/parachute/RscTitles.hpp +++ b/addons/parachute/RscTitles.hpp @@ -39,10 +39,10 @@ class RscTitles { }; class TimeText: RscText { idc = 1001; - text = "00:00"; - x = "0.206094 * safezoneW + safezoneX"; + text = "00:00:00"; + x = "0.202094 * safezoneW + safezoneX"; y = "0.819 * safezoneH + safezoneY"; - w = "0.0309375 * safezoneW"; + w = "0.0380375 * safezoneW"; h = "0.022 * safezoneH"; colorText[] = {0,0,0,1}; }; diff --git a/addons/parachute/functions/fnc_showAltimeter.sqf b/addons/parachute/functions/fnc_showAltimeter.sqf index d4533a7a6b..f86f785cc6 100644 --- a/addons/parachute/functions/fnc_showAltimeter.sqf +++ b/addons/parachute/functions/fnc_showAltimeter.sqf @@ -40,8 +40,10 @@ private _TimeText = _display displayCtrl 1001; _pfhID call CBA_fnc_removePerFrameHandler; }; - private _hour = floor daytime; - private _minute = floor ((daytime - _hour) * 60); + private _daytime = dayTime; + private _hour = floor _daytime; + private _minute = floor ((_daytime - _hour) * 60); + private _seconds = floor ((((_daytime - _hour) * 60) - _minute) * 60); private _curTime = CBA_missionTime; private _timeDiff = _curTime - _prevTime; @@ -52,7 +54,7 @@ private _TimeText = _display displayCtrl 1001; 0 }; - _TimeText ctrlSetText (format ["%1:%2", [_hour, 2] call CBA_fnc_formatNumber, [_minute, 2] call CBA_fnc_formatNumber]); + _TimeText ctrlSetText (format ["%1:%2:%3", [_hour, 2] call CBA_fnc_formatNumber, [_minute, 2] call CBA_fnc_formatNumber, [_seconds, 2] call CBA_fnc_formatNumber]); _HeightText ctrlSetText str floor _height; _DecendRate ctrlSetText str (_descentRate max 0); From e5145ba4f7950d388f494fce9d842ae7f4c38127 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sun, 10 Mar 2024 09:49:53 -0500 Subject: [PATCH 007/132] Cup Weapon Compat - Fix NVG classnames (#9845) --- .../compat_cup_weapons_nightvision/CfgWeapons.hpp | 8 ++++---- .../compat_cup_weapons_nightvision/config.cpp | 2 +- .../compat_cup_weapons_nightvision/stringtable.xml | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/addons/compat_cup_weapons/compat_cup_weapons_nightvision/CfgWeapons.hpp b/addons/compat_cup_weapons/compat_cup_weapons_nightvision/CfgWeapons.hpp index 14114854aa..04d26b8ead 100644 --- a/addons/compat_cup_weapons/compat_cup_weapons_nightvision/CfgWeapons.hpp +++ b/addons/compat_cup_weapons/compat_cup_weapons_nightvision/CfgWeapons.hpp @@ -107,12 +107,12 @@ class CfgWeapons { displayName = SUBCSTRING(CUP_NVG_GPNVG_tan_WP); NVG_WP_PRESET; }; - class CUP_GPNVG_green_WP: CUP_NVG_GPNVG_green { - displayName = SUBCSTRING(CUP_GPNVG_green_WP); + class CUP_NVG_GPNVG_green_WP: CUP_NVG_GPNVG_green { + displayName = SUBCSTRING(CUP_NVG_GPNVG_green_WP); NVG_WP_PRESET; }; - class CUP_GPNVG_winter_WP: CUP_NVG_GPNVG_winter { - displayName = SUBCSTRING(CUP_GPNVG_winter_WP); + class CUP_NVG_GPNVG_winter_WP: CUP_NVG_GPNVG_winter { + displayName = SUBCSTRING(CUP_NVG_GPNVG_winter_WP); NVG_WP_PRESET; }; }; diff --git a/addons/compat_cup_weapons/compat_cup_weapons_nightvision/config.cpp b/addons/compat_cup_weapons/compat_cup_weapons_nightvision/config.cpp index 677ff00c0e..4730cdf3a9 100644 --- a/addons/compat_cup_weapons/compat_cup_weapons_nightvision/config.cpp +++ b/addons/compat_cup_weapons/compat_cup_weapons_nightvision/config.cpp @@ -6,7 +6,7 @@ class CfgPatches { units[] = {}; weapons[] = { "CUP_NVG_PVS14_WP", "CUP_NVG_PVS15_black_WP", "CUP_NVG_PVS15_green_WP", "CUP_NVG_PVS15_tan_WP", "CUP_NVG_PVS15_winter_WP", - "CUP_NVG_GPNVG_black_WP", "CUP_NVG_GPNVG_tan_WP", "CUP_GPNVG_green_WP", "CUP_GPNVG_winter_WP" + "CUP_NVG_GPNVG_black_WP", "CUP_NVG_GPNVG_tan_WP", "CUP_NVG_GPNVG_green_WP", "CUP_NVG_GPNVG_winter_WP" }; requiredVersion = REQUIRED_VERSION; requiredAddons[] = { diff --git a/addons/compat_cup_weapons/compat_cup_weapons_nightvision/stringtable.xml b/addons/compat_cup_weapons/compat_cup_weapons_nightvision/stringtable.xml index b8344ae16b..001ecaf477 100644 --- a/addons/compat_cup_weapons/compat_cup_weapons_nightvision/stringtable.xml +++ b/addons/compat_cup_weapons/compat_cup_weapons_nightvision/stringtable.xml @@ -67,7 +67,7 @@ GPNVG (marron clair, WP) GPNVG (Желтовато-коричневый, БФ) - + GPNVG (Green, WP) GPNVG (ブラック、白色蛍光) GPNVG (Nero, FB) @@ -77,7 +77,7 @@ GPNVG (noires, WP) GPNVG (Зелёный, БФ) - + GPNVG (Winter, WP) GPNVG (冬季迷彩, WP) GPNVG (설상, WP) From 0dabc678f6e7c1f112f1935fb78f8bde2a92ed6f Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Mon, 11 Mar 2024 11:18:02 +0100 Subject: [PATCH 008/132] Arsenal - Fix faces & voices for JIP (#9847) Update fnc_onArsenalClose.sqf --- addons/arsenal/functions/fnc_onArsenalClose.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/arsenal/functions/fnc_onArsenalClose.sqf b/addons/arsenal/functions/fnc_onArsenalClose.sqf index 2cce9b13ee..f2316bc9d5 100644 --- a/addons/arsenal/functions/fnc_onArsenalClose.sqf +++ b/addons/arsenal/functions/fnc_onArsenalClose.sqf @@ -78,10 +78,10 @@ if (!isNull curatorCamera) then { // Make face and voice selection JIP compatible; 3DEN doesn't need this though if (isMultiplayer && {!is3DEN}) then { - private _id = [QGVAR(broadcastFace), [GVAR(center), GVAR(currentFace)], QGVAR(centerFace_) + netId GVAR(center)] call CBA_fnc_globalEventJIP; + private _id = [QGVAR(broadcastFace), [GVAR(center), GVAR(currentFace)], QGVAR(centerFace_) + hashValue GVAR(center)] call CBA_fnc_globalEventJIP; [_id, GVAR(center)] call CBA_fnc_removeGlobalEventJIP; - _id = [QGVAR(broadcastVoice), [GVAR(center), GVAR(currentVoice)], QGVAR(centerVoice_) + netId GVAR(center)] call CBA_fnc_globalEventJIP; + _id = [QGVAR(broadcastVoice), [GVAR(center), GVAR(currentVoice)], QGVAR(centerVoice_) + hashValue GVAR(center)] call CBA_fnc_globalEventJIP; [_id, GVAR(center)] call CBA_fnc_removeGlobalEventJIP; }; From 5e1771aecdf55f359e6cc90a811e9a2a245e66ff Mon Sep 17 00:00:00 2001 From: prisonerMO Date: Tue, 12 Mar 2024 23:33:08 +0200 Subject: [PATCH 009/132] General - Don't add keybinds to headless client/dedicated server (#9842) * Do not need to register keybinds on machines that don't have interfaces. * add newline --------- Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> --- addons/advanced_ballistics/XEH_postInit.sqf | 4 ++-- addons/atragmx/XEH_postInit.sqf | 2 ++ addons/explosives/XEH_postInit.sqf | 2 ++ addons/explosives/XEH_preInit.sqf | 1 - addons/mk6mortar/XEH_postInit.sqf | 1 + addons/mk6mortar/XEH_preInit.sqf | 1 - addons/rangecard/XEH_postInit.sqf | 6 ++++-- addons/yardage450/XEH_postInit.sqf | 2 ++ 8 files changed, 13 insertions(+), 6 deletions(-) diff --git a/addons/advanced_ballistics/XEH_postInit.sqf b/addons/advanced_ballistics/XEH_postInit.sqf index e6417f9a02..f9d78b5045 100644 --- a/addons/advanced_ballistics/XEH_postInit.sqf +++ b/addons/advanced_ballistics/XEH_postInit.sqf @@ -1,7 +1,5 @@ #include "script_component.hpp" -#include "initKeybinds.inc.sqf" - GVAR(currentbulletID) = -1; GVAR(Protractor) = false; @@ -11,6 +9,8 @@ GVAR(currentGrid) = 0; if (!hasInterface) exitWith {}; +#include "initKeybinds.inc.sqf" + ["CBA_settingsInitialized", { //If not enabled, dont't add PFEH if (!GVAR(enabled)) exitWith {}; diff --git a/addons/atragmx/XEH_postInit.sqf b/addons/atragmx/XEH_postInit.sqf index 62d45555b1..7914657b08 100644 --- a/addons/atragmx/XEH_postInit.sqf +++ b/addons/atragmx/XEH_postInit.sqf @@ -1,5 +1,7 @@ #include "script_component.hpp" +if (!hasInterface) exitWith {}; + #include "initKeybinds.inc.sqf" GVAR(active) = false; diff --git a/addons/explosives/XEH_postInit.sqf b/addons/explosives/XEH_postInit.sqf index 40b3bb6959..6c32bb0563 100644 --- a/addons/explosives/XEH_postInit.sqf +++ b/addons/explosives/XEH_postInit.sqf @@ -57,6 +57,8 @@ if (isServer) then { if (!hasInterface) exitWith {}; +#include "initKeybinds.inc.sqf" + GVAR(PlacedCount) = 0; GVAR(Setup) = objNull; GVAR(pfeh_running) = false; diff --git a/addons/explosives/XEH_preInit.sqf b/addons/explosives/XEH_preInit.sqf index 6141a1d3e0..e39270f0bb 100644 --- a/addons/explosives/XEH_preInit.sqf +++ b/addons/explosives/XEH_preInit.sqf @@ -8,7 +8,6 @@ PREP_RECOMPILE_START; #include "XEH_PREP.hpp" PREP_RECOMPILE_END; -#include "initKeybinds.inc.sqf" #include "initSettings.inc.sqf" GVAR(activeTrigger) = ""; diff --git a/addons/mk6mortar/XEH_postInit.sqf b/addons/mk6mortar/XEH_postInit.sqf index 9f24a12a3b..aa5f2774df 100644 --- a/addons/mk6mortar/XEH_postInit.sqf +++ b/addons/mk6mortar/XEH_postInit.sqf @@ -1,6 +1,7 @@ #include "script_component.hpp" if (hasInterface) then { + #include "initKeybinds.inc.sqf" ["ace_infoDisplayChanged", FUNC(turretDisplayLoaded)] call CBA_fnc_addEventHandler; }; diff --git a/addons/mk6mortar/XEH_preInit.sqf b/addons/mk6mortar/XEH_preInit.sqf index e3c1169aa4..894773534a 100644 --- a/addons/mk6mortar/XEH_preInit.sqf +++ b/addons/mk6mortar/XEH_preInit.sqf @@ -7,6 +7,5 @@ PREP_RECOMPILE_START; PREP_RECOMPILE_END; #include "initSettings.inc.sqf" -#include "initKeybinds.inc.sqf" ADDON = true; diff --git a/addons/rangecard/XEH_postInit.sqf b/addons/rangecard/XEH_postInit.sqf index 6adc4cf2a1..af4dfa923c 100644 --- a/addons/rangecard/XEH_postInit.sqf +++ b/addons/rangecard/XEH_postInit.sqf @@ -1,7 +1,5 @@ #include "script_component.hpp" -#include "initKeybinds.inc.sqf" - GVAR(RangeCardOpened) = false; GVAR(controls) = []; @@ -17,3 +15,7 @@ GVAR(boreHeightCopy) = 3.81; GVAR(ammoClassCopy) = "";//"ACE_762x51_Ball_M118LR"; GVAR(magazineClassCopy) = "";//"ACE_20Rnd_762x51_M118LR_Mag"; GVAR(weaponClassCopy) = "";//srifle_DMR_06_olive_F"; + +if (!hasInterface) exitWith {}; + +#include "initKeybinds.inc.sqf" diff --git a/addons/yardage450/XEH_postInit.sqf b/addons/yardage450/XEH_postInit.sqf index 2959360f7d..1f3cb1a1cf 100644 --- a/addons/yardage450/XEH_postInit.sqf +++ b/addons/yardage450/XEH_postInit.sqf @@ -1,5 +1,7 @@ #include "script_component.hpp" +if (!hasInterface) exitWith {}; + #include "initKeybinds.inc.sqf" GVAR(active) = false; From a332ad7095943a590d1ab60bb27f0632116d412c Mon Sep 17 00:00:00 2001 From: "Mr. Zorn" <56258612+PulsarNeutronStar@users.noreply.github.com> Date: Sun, 17 Mar 2024 11:33:12 +0100 Subject: [PATCH 010/132] Repair - Wheel Patching - Tooltip rephrasing (#9851) * Update stringtable.xml * Add PL Translation * added FR * added japanese --------- Co-authored-by: Filip Maciejewski --- addons/repair/stringtable.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/addons/repair/stringtable.xml b/addons/repair/stringtable.xml index 016f2fc78d..2e1e3ba546 100644 --- a/addons/repair/stringtable.xml +++ b/addons/repair/stringtable.xml @@ -2224,13 +2224,13 @@ Порог починки колеса - Maximum level to which a wheel can be patched. - タイヤを補修できる最大の度合い。 - Maksymalny poziom, do którego koło może zostać załatane. + Maximum damage to which a wheel can be patched.\n0% means all damage can be repaired. + タイヤを補修できる最大の度合い。/n 0% は、すべてのダメージが修復可能であることを意味します + Maksymalny poziom, do którego koło może zostać załatane.\n0% oznacza że każde uszkodzenia mogą być naprawione. Livello di integrità massimo di una ruota rattoppata. - Maximales Level, bis zu dem ein Rad geflickt werden kann. + Maximales Level, bis zu dem ein Rad geflickt werden kann.\n0% bedeutet, dass das Rad vollständig repariert werden kann. 바퀴를 수리할 수 있는 최대 레벨입니다. - Niveau maximum de rafistolage d'une roue. + Niveau maximum de dégâts jusqu'à laquelle une roue peut être réparée.\n0% signifie que la roue peut être reparée entièrement. Максимальный уровень, до которого колесо может быть починено. From de106c3418d5eeb5bee386b1ef01cbadd6303590 Mon Sep 17 00:00:00 2001 From: Mike-MF Date: Sun, 17 Mar 2024 11:47:24 +0000 Subject: [PATCH 011/132] Grenades - Fix Flashbang in epilepsy mode (#9855) Fix Flashbang in epilepsy mode --- addons/grenades/functions/fnc_flashbangExplosionEH.sqf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/grenades/functions/fnc_flashbangExplosionEH.sqf b/addons/grenades/functions/fnc_flashbangExplosionEH.sqf index 36b84f942f..e39a7730ce 100644 --- a/addons/grenades/functions/fnc_flashbangExplosionEH.sqf +++ b/addons/grenades/functions/fnc_flashbangExplosionEH.sqf @@ -145,11 +145,11 @@ if (hasInterface && {!isNull ACE_player} && {alive ACE_player}) then { //PARTIALRECOVERY - start decreasing effect over time [{ - params ["_strength"]; + params ["_strength", "_blend"]; - GVAR(flashbangPPEffectCC) ppEffectAdjust [1,1,0,[1,1,1,0],[0,0,0,1],[0,0,0,0]]; + GVAR(flashbangPPEffectCC) ppEffectAdjust [1, 1, 0, _blend, [0,0,0,1], [0,0,0,0]]; GVAR(flashbangPPEffectCC) ppEffectCommit (10 * _strength); - }, [_strength], 7 * _strength] call CBA_fnc_waitAndExecute; + }, [_strength, _blend], 7 * _strength] call CBA_fnc_waitAndExecute; //FULLRECOVERY - end effect [{ From 3cafac2f67b5c7687487a3b27855d9dd854506e4 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Sun, 17 Mar 2024 12:47:46 +0100 Subject: [PATCH 012/132] Common - Fix players sliding when holstering weapons (#9846) Update CfgMoves.hpp --- addons/common/CfgMoves.hpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/addons/common/CfgMoves.hpp b/addons/common/CfgMoves.hpp index 14686526e9..3c51140fed 100644 --- a/addons/common/CfgMoves.hpp +++ b/addons/common/CfgMoves.hpp @@ -1,5 +1,9 @@ class CfgMovesBasic { - class Default; + // Idle affects legs when weapon switching - fixes units sliding when holstering weapons + class Default { + idle = ""; + }; + // From ACRE class ManActions { GVAR(stop) = QGVAR(stop); From 0856e58ae9ffcacf0caccb95fcab4efc453ca06d Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Mon, 18 Mar 2024 18:16:34 +0100 Subject: [PATCH 013/132] Dragging - Release ownership when target is too heavy to drag/carry (#9858) Release ownership when target is too heavy to drag/carry --- addons/dragging/functions/fnc_startCarryLocal.sqf | 3 +++ addons/dragging/functions/fnc_startDragLocal.sqf | 3 +++ 2 files changed, 6 insertions(+) diff --git a/addons/dragging/functions/fnc_startCarryLocal.sqf b/addons/dragging/functions/fnc_startCarryLocal.sqf index 15101e2950..2fc0af5e24 100644 --- a/addons/dragging/functions/fnc_startCarryLocal.sqf +++ b/addons/dragging/functions/fnc_startCarryLocal.sqf @@ -31,6 +31,9 @@ if !(_target getVariable [QGVAR(ignoreWeightCarry), false]) then { // Exit if object weight is over global var value if (_weight > GETMVAR(ACE_maxWeightCarry,1E11)) exitWith { + // Release claim on object + [objNull, _target, true] call EFUNC(common,claim); + [LLSTRING(UnableToDrag)] call EFUNC(common,displayTextStructured); }; diff --git a/addons/dragging/functions/fnc_startDragLocal.sqf b/addons/dragging/functions/fnc_startDragLocal.sqf index b656c8ce5a..fe5f29fa61 100644 --- a/addons/dragging/functions/fnc_startDragLocal.sqf +++ b/addons/dragging/functions/fnc_startDragLocal.sqf @@ -31,6 +31,9 @@ if !(_target getVariable [QGVAR(ignoreWeightDrag), false]) then { // Exit if object weight is over global var value if (_weight > GETMVAR(ACE_maxWeightDrag,1E11)) exitWith { + // Release claim on object + [objNull, _target, true] call EFUNC(common,claim); + [LLSTRING(UnableToDrag)] call EFUNC(common,displayTextStructured); }; From 11844ef05eb3fb5198bfeaa3d94fe1d398439415 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Mon, 18 Mar 2024 18:17:05 +0100 Subject: [PATCH 014/132] Dragging - Fix dropping incorrect object when carrying fails (#9860) Update fnc_startCarryPFH.sqf --- addons/dragging/functions/fnc_startCarryPFH.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/dragging/functions/fnc_startCarryPFH.sqf b/addons/dragging/functions/fnc_startCarryPFH.sqf index ca34275a2c..e8b864f260 100644 --- a/addons/dragging/functions/fnc_startCarryPFH.sqf +++ b/addons/dragging/functions/fnc_startCarryPFH.sqf @@ -55,8 +55,8 @@ if (_target isKindOf "CAManBase") then { TRACE_4("timeout",_unit,_target,_timeOut,CBA_missionTime); _idPFH call CBA_fnc_removePerFrameHandler; - private _draggedObject = _unit getVariable [QGVAR(draggedObject), objNull]; - [_unit, _draggedObject] call FUNC(dropObject_carry); + private _carriedObject = _unit getVariable [QGVAR(carriedObject), objNull]; + [_unit, _carriedObject] call FUNC(dropObject_carry); }; // Wait for the unit to stand up From e7827813eec33c3da5a83384476ed585313203d1 Mon Sep 17 00:00:00 2001 From: Apricot <50947830+Apricot-ale@users.noreply.github.com> Date: Tue, 19 Mar 2024 11:59:54 +0900 Subject: [PATCH 015/132] Translations - Improve Japanese localization 3 (#9864) Japanese --- addons/csw/stringtable.xml | 4 ++-- addons/dogtags/stringtable.xml | 12 ++++++------ addons/medical_treatment/stringtable.xml | 2 +- addons/repair/stringtable.xml | 8 ++++---- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/addons/csw/stringtable.xml b/addons/csw/stringtable.xml index b6f8ecb47e..4aea2a24b4 100644 --- a/addons/csw/stringtable.xml +++ b/addons/csw/stringtable.xml @@ -179,7 +179,7 @@ Scorta di munizioni 탄약 보관 Magazyn amunicji - 弾薬の格納場所 + 弾薬保管位置 弹药存储 Хранилище боеприпасов Almacenamiento de munición @@ -192,7 +192,7 @@ Determina se ulteriori caricatori verranno stoccati sul suolo o in una cassa di munizioni. 여분의 탄약을 지면 또는 탄약 상자에 넣을 지 결정합니다. Decyduje, czy dodatkowe magazynki przechowywane są na ziemi, czy w skrzynce z amunicją. - 追加の弾倉を地面に配置するか、弾薬箱内に保管するかを設定します。 + 追加の弾倉を地面に直接配置するか、弾薬箱内に保管するかを設定します。 设置多余的弹夹是存放在地面上还是弹药箱内 Определяет будут ли дополнительные магазины лежать на земле или внутри хранилища Determina si los cargadores extra son almacenados en el suelo o en una caja de munición diff --git a/addons/dogtags/stringtable.xml b/addons/dogtags/stringtable.xml index d48fcac9ce..d19c61f505 100644 --- a/addons/dogtags/stringtable.xml +++ b/addons/dogtags/stringtable.xml @@ -6,7 +6,7 @@ Nieśmiertelnik Жетон Identifikační známka - 認識票 + ドッグタグ Erkennungsmarke 군번줄 Plaque d'identification @@ -22,7 +22,7 @@ Sprawdź nieśmiertelnik Проверить жетон Zkontrolovat známku - 認識票を確認 + ドッグタグを確認 Erkennungsmarke prüfen 군번줄 확인 Vérifier la plaque d'identification @@ -54,7 +54,7 @@ Zabierz Взять Vezmi - 取る + 拾う Nehmen 회수 Prendre @@ -70,7 +70,7 @@ Zabrałeś nieśmiertelnik %1... Жетон снят с %1... Sebral jsem známku od %1... - %1 から認識票を取っています・・・ + %1 からドッグタグを回収しています・・・ Erkennungsmarke von %1 genommen... %1(으)로부터 군번줄을 회수했습니다... Plaque d'identification prise sur %1... @@ -86,7 +86,7 @@ Ktoś już zabrał ten nieśmiertelnik... Кто-то уже забрал жетон... Někdo jiný už vzal identifikační známku... - 誰かが既に認識票を取ったようだ・・・ + 既に誰かがドッグタグを回収したようだ・・・ Jemand anderes hat bereits die Erkennungsmarke genommen... 누군가 이미 군번줄을 회수해갔습니다... Quelqu'un d'autre a déjà pris la plaque d'identification... @@ -102,7 +102,7 @@ Anzeige um Erkennungsmarke zu überprüfen 在畫面中顯示檢查兵籍牌 在画面中显示检查兵籍牌 - 確認中の認識票を画面上に表示します + 確認中のドッグタグを画面上に表示します Indicatore su schermo per il controllo delle piastrine Wyświetlacz ekranowy dla sprawdzania nieśmiertelników Экран для проверки жетонов diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml index 2ac957589c..c9925768d2 100644 --- a/addons/medical_treatment/stringtable.xml +++ b/addons/medical_treatment/stringtable.xml @@ -957,7 +957,7 @@ Locations IV Transfusion - IV 輸液の場所制限 + IV輸液の可能な場所 Ubicación para transfusiones IV Lieux perfusions IV Места введения пакетов внутривенного переливания diff --git a/addons/repair/stringtable.xml b/addons/repair/stringtable.xml index 2e1e3ba546..4d2f84eea5 100644 --- a/addons/repair/stringtable.xml +++ b/addons/repair/stringtable.xml @@ -314,7 +314,7 @@ Lugares de reparación completa Luoghi Riparazione Completa Endroits pour réparation complète - 完全修理できる場所 + 完全修理可能な場所 완전수리 구역 完整维修地点 完整維修地點 @@ -2225,7 +2225,7 @@ Maximum damage to which a wheel can be patched.\n0% means all damage can be repaired. - タイヤを補修できる最大の度合い。/n 0% は、すべてのダメージが修復可能であることを意味します + タイヤをのダメージ補修できる最大の度合い。/n 0%は、すべてのダメージが修復可能であることを意味します。 Maksymalny poziom, do którego koło może zostać załatane.\n0% oznacza że każde uszkodzenia mogą być naprawione. Livello di integrità massimo di una ruota rattoppata. Maximales Level, bis zu dem ein Rad geflickt werden kann.\n0% bedeutet, dass das Rad vollständig repariert werden kann. @@ -2235,7 +2235,7 @@ Wheel Patch Location - タイヤ補修場所 + タイヤ補修可能な場所 Miejsce Łatania Koła Luoghi rattoppamento ruote Räder Flick Ort @@ -2245,7 +2245,7 @@ Where the wheel can be patched. - タイヤを補修できる場所。 + タイヤを補修することが出来る場所。 Gdzie można załatać koło. In quali luoghi è possibile rattoppare una ruota? Wo das Rad geflickt werden kann. From c5b54c65a8d4fa7f6b7319b966578bf4a9768bc1 Mon Sep 17 00:00:00 2001 From: BrettMayson Date: Tue, 19 Mar 2024 01:56:05 -0600 Subject: [PATCH 016/132] Medical Treatment - Fix bandage effectiveness (#9865) * fix broken bandages * update params --- addons/medical_treatment/functions/fnc_bandage.sqf | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/addons/medical_treatment/functions/fnc_bandage.sqf b/addons/medical_treatment/functions/fnc_bandage.sqf index 80475fa2c3..2152e81a3b 100644 --- a/addons/medical_treatment/functions/fnc_bandage.sqf +++ b/addons/medical_treatment/functions/fnc_bandage.sqf @@ -8,7 +8,9 @@ * 1: Patient * 2: Body Part * 3: Treatment - * 4: Bandage effectiveness coefficient (default: 1) + * 4: Item User + * 5: Used Item + * 6: Bandage effectiveness coefficient (default: 1) * * Return Value: * None @@ -19,10 +21,10 @@ * Public: No */ -_this set [4, _this param [4, 1]]; // set default Bandage effectiveness coefficient +_this set [6, _this param [6, 1]]; // set default Bandage effectiveness coefficient [QGVAR(bandaged), _this] call CBA_fnc_localEvent; // Raise event with reference so mods can modify this -params ["_medic", "_patient", "_bodyPart", "_classname", "_bandageEffectiveness"]; +params ["_medic", "_patient", "_bodyPart", "_classname", "", "", "_bandageEffectiveness"]; [_patient, "activity", LSTRING(Activity_bandagedPatient), [[_medic, false, true] call EFUNC(common,getName)]] call FUNC(addToLog); From 017d47f8c90e69ff522b22f546edc8b8dd4fb36e Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Tue, 19 Mar 2024 08:57:09 +0100 Subject: [PATCH 017/132] Fortify - Skip placement animation for no cost fortifications (#9861) Skip placement animation for no cost fortifications --- addons/fortify/functions/fnc_deployConfirm.sqf | 3 +-- docs/wiki/framework/fortify-framework.md | 8 ++++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/addons/fortify/functions/fnc_deployConfirm.sqf b/addons/fortify/functions/fnc_deployConfirm.sqf index 37e0d4fb9d..b0105a7919 100644 --- a/addons/fortify/functions/fnc_deployConfirm.sqf +++ b/addons/fortify/functions/fnc_deployConfirm.sqf @@ -38,7 +38,7 @@ private _perframeCheck = { _args params ["_unit", "_side", "_typeOf", "_posASL", "_vectorDir", "_vectorUp", "_cost"]; // Animation loop (required for longer constructions) - if (animationState _unit isNotEqualTo "AinvPknlMstpSnonWnonDnon_medic4") then { + if (_totalTime != 0 && {animationState _unit != "AinvPknlMstpSnonWnonDnon_medic4"}) then { // Perform animation [_unit, "AinvPknlMstpSnonWnonDnon_medic4"] call EFUNC(common,doAnimation); }; @@ -55,4 +55,3 @@ private _perframeCheck = { LLSTRING(progressBarTitle), _perframeCheck ] call EFUNC(common,progressBar); - diff --git a/docs/wiki/framework/fortify-framework.md b/docs/wiki/framework/fortify-framework.md index 3f6619a746..14d48532b5 100644 --- a/docs/wiki/framework/fortify-framework.md +++ b/docs/wiki/framework/fortify-framework.md @@ -116,8 +116,8 @@ The Fortify budget can be updated for any side using the function. Event Name | Passed Parameter(s) | Locality | Description ---------- | ----------- | ------------------- | -------- -`acex_fortify_objectPlaced` | [player, side, objectPlaced] | Global | Foritfy object placed -`acex_fortify_objectDeleted` | [player, side, objectDeleted] | Global | Foritfy object deleted +`acex_fortify_objectPlaced` | [player, side, objectPlaced] | Global | Fortify object placed +`acex_fortify_objectDeleted` | [player, side, objectDeleted] | Global | Fortify object deleted `acex_fortify_onDeployStart` | [player, object, cost] | Local | Player starts placing object -`ace_fortify_deployFinished` | [player, side, configName, posASL, vectorDir, vectorUp] | Local | Player successfully finishes building object -`ace_fortify_deployCanceled` | [player, side, configName, posASL, vectorDir, vectorUp] | Local | Player cancels building object +`ace_fortify_deployFinished` | [[player, side, configName, posASL, vectorDir, vectorUp, cost], elapsedTime, totalTime, errorCode] | Local | Player successfully finishes building object +`ace_fortify_deployCanceled` | [[player, side, configName, posASL, vectorDir, vectorUp, cost], elapsedTime, totalTime, errorCode] | Local | Player cancels building object From 8c69bd25ea7f965a830f985c28ed9da576ceb17a Mon Sep 17 00:00:00 2001 From: Cyruz Date: Wed, 20 Mar 2024 12:06:45 +0000 Subject: [PATCH 018/132] Rearm - Show distance to target on actions (#9866) * Show rearm distance in action * Update addons/rearm/functions/fnc_addRearmActions.sqf --------- Co-authored-by: Cyruz143 Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> --- addons/rearm/functions/fnc_addRearmActions.sqf | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/addons/rearm/functions/fnc_addRearmActions.sqf b/addons/rearm/functions/fnc_addRearmActions.sqf index e71cab8f0c..200dd2f2b4 100644 --- a/addons/rearm/functions/fnc_addRearmActions.sqf +++ b/addons/rearm/functions/fnc_addRearmActions.sqf @@ -30,7 +30,9 @@ private _cswCarryMagazines = []; private _vehicleActions = []; { private _vehicle = _x; - + private _displayName = getText (configOf _vehicle >> "displayName"); + private _distanceStr = (ACE_player distance _vehicle) toFixed 1; + private _actionName = format ["%1 (%2m)", _displayName, _distanceStr]; // Array of magazines that can be rearmed in the vehicle private _needRearmMags = ([_vehicle] call FUNC(getNeedRearmMagazines)) apply {_x select 0}; @@ -57,7 +59,7 @@ private _vehicleActions = []; // [Level 0] adds a single action to rearm the entire vic private _action = [ _vehicle, - getText(configOf _vehicle >> "displayName"), + _actionName, _icon, {_this call FUNC(rearmEntireVehicle)}, {true}, @@ -84,7 +86,7 @@ private _vehicleActions = []; private _action = [ _vehicle, - getText(configOf _vehicle >> "displayName"), + _actionName, _icon, {}, {true}, From af3c95a5a623bb5c61d9011eb19fa9fde879ebfe Mon Sep 17 00:00:00 2001 From: Dart <59131299+DartRuffian@users.noreply.github.com> Date: Thu, 21 Mar 2024 14:20:23 -0500 Subject: [PATCH 019/132] Fire - Add ability to disable screams for individual units (#9863) * Disable screams for individual units * Update addons/fire/XEH_postInit.sqf * Changed wording Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> * isGlobal instead of true Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> --------- Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> --- addons/fire/XEH_postInit.sqf | 5 ++--- docs/wiki/framework/fire-framework.md | 9 +++++++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/addons/fire/XEH_postInit.sqf b/addons/fire/XEH_postInit.sqf index 382c06293b..ec40646ca9 100644 --- a/addons/fire/XEH_postInit.sqf +++ b/addons/fire/XEH_postInit.sqf @@ -3,8 +3,8 @@ [QGVAR(burn), FUNC(burn)] call CBA_fnc_addEventHandler; [QGVAR(playScream), { params ["_scream", "_source"]; - // only play sound if enabled in settings - if (GVAR(enableScreams)) then { + // only play sound if enabled in settings and enabled for the unit + if (GVAR(enableScreams) && {_source getVariable [QGVAR(enableScreams), true]}) then { _source say3D _scream; }; }] call CBA_fnc_addEventHandler; @@ -35,4 +35,3 @@ GVAR(fireSources) = [[], nil] call CBA_fnc_hashCreate; }; }] call CBA_fnc_addEventHandler; - diff --git a/docs/wiki/framework/fire-framework.md b/docs/wiki/framework/fire-framework.md index 2236c5a1c8..4f9ecdfdd3 100644 --- a/docs/wiki/framework/fire-framework.md +++ b/docs/wiki/framework/fire-framework.md @@ -37,3 +37,12 @@ Use `CBA_fnc_serverEvent` to use the following features. Events are defined only | Arguments | Type | Optional (default value) ---| --------- | ---- | ------------------------ 0 | Fire source ID | Any | Required + + +## 2. Variables + +Screams can be disabled for an individual unit by setting the `ace_fire_enableScreams` variable on the unit, which can be synced across machines. + +```sqf +_unit setVariable ["ace_fire_enableScreams", false, _isGlobal]; +``` From b4eaa1e27049280d940a0c9aa32bda9310b89302 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Thu, 21 Mar 2024 20:24:49 +0100 Subject: [PATCH 020/132] Advanced Fatigue - Disable sway when Advanced Fatigue is off (#9867) Disabled sway when advanced fatigue is off --- addons/advanced_fatigue/XEH_postInit.sqf | 58 ++++++++++++------------ 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/addons/advanced_fatigue/XEH_postInit.sqf b/addons/advanced_fatigue/XEH_postInit.sqf index db4a9d9c5e..ff09464901 100644 --- a/addons/advanced_fatigue/XEH_postInit.sqf +++ b/addons/advanced_fatigue/XEH_postInit.sqf @@ -2,35 +2,6 @@ if (!hasInterface) exitWith {}; -["baseline", { - private _fatigue = ACE_player getVariable [QGVAR(aimFatigue), 0]; - switch (stance ACE_player) do { - case ("CROUCH"): { - (1.0 + _fatigue ^ 2 * 0.1) - }; - case ("PRONE"): { - (1.0 + _fatigue ^ 2 * 2.0) - }; - default { - (1.5 + _fatigue ^ 2 * 3.0) - }; - }; -}, QUOTE(ADDON)] call EFUNC(common,addSwayFactor); - -["multiplier", { - switch (true) do { - case (isWeaponRested ACE_player): { - GVAR(swayFactor) * GVAR(restedSwayFactor) - }; - case (isWeaponDeployed ACE_player): { - GVAR(swayFactor) * GVAR(deployedSwayFactor) - }; - default { - GVAR(swayFactor) - }; - }; -}, QUOTE(ADDON)] call EFUNC(common,addSwayFactor); - // recheck weapon inertia after weapon swap, change of attachments or switching unit ["weapon", {[ACE_player] call FUNC(getWeaponInertia)}, true] call CBA_fnc_addPlayerEventHandler; ["loadout", {[ACE_player] call FUNC(getWeaponInertia)}, true] call CBA_fnc_addPlayerEventHandler; @@ -39,6 +10,35 @@ if (!hasInterface) exitWith {}; ["CBA_settingsInitialized", { if (!GVAR(enabled)) exitWith {}; + ["baseline", { + private _fatigue = ACE_player getVariable [QGVAR(aimFatigue), 0]; + switch (stance ACE_player) do { + case ("CROUCH"): { + (1.0 + _fatigue ^ 2 * 0.1) + }; + case ("PRONE"): { + (1.0 + _fatigue ^ 2 * 2.0) + }; + default { + (1.5 + _fatigue ^ 2 * 3.0) + }; + }; + }, QUOTE(ADDON)] call EFUNC(common,addSwayFactor); + + ["multiplier", { + switch (true) do { + case (isWeaponRested ACE_player): { + GVAR(swayFactor) * GVAR(restedSwayFactor) + }; + case (isWeaponDeployed ACE_player): { + GVAR(swayFactor) * GVAR(deployedSwayFactor) + }; + default { + GVAR(swayFactor) + }; + }; + }, QUOTE(ADDON)] call EFUNC(common,addSwayFactor); + // - Post process effect ------------------------------------------------------ GVAR(ppeBlackout) = ppEffectCreate ["ColorCorrections", 4220]; GVAR(ppeBlackout) ppEffectEnable true; From 50978efa460b33c10fc26e6de705708b34cc6c93 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Thu, 21 Mar 2024 20:26:46 +0100 Subject: [PATCH 021/132] Hearing - Removed `remoteExec` & added microoptimisations (#9853) * Removed remoteExec. added microoptimisations * Update addons/hearing/XEH_preInit.sqf Co-authored-by: PabstMirror * move EH to after !hasInterface --------- Co-authored-by: PabstMirror --- addons/hearing/XEH_postInit.sqf | 2 ++ addons/hearing/XEH_preInit.sqf | 3 ++- addons/hearing/functions/fnc_addEarPlugs.sqf | 26 +++++++++++--------- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/addons/hearing/XEH_postInit.sqf b/addons/hearing/XEH_postInit.sqf index c387ed04d8..f8f5c2938f 100644 --- a/addons/hearing/XEH_postInit.sqf +++ b/addons/hearing/XEH_postInit.sqf @@ -23,6 +23,8 @@ GVAR(lastPlayerVehicle) = objNull; // Spawn volume updating process [LINKFUNC(updateVolume), 1, [false]] call CBA_fnc_addPerFrameHandler; + [QGVAR(updateVolume), LINKFUNC(updateVolume)] call CBA_fnc_addEventHandler; + // Update veh attunation when player veh changes ["vehicle", { params ["_player", "_vehicle"]; diff --git a/addons/hearing/XEH_preInit.sqf b/addons/hearing/XEH_preInit.sqf index 2ab07c31e6..7a6195ec46 100644 --- a/addons/hearing/XEH_preInit.sqf +++ b/addons/hearing/XEH_preInit.sqf @@ -12,7 +12,8 @@ PREP_RECOMPILE_END; params ["_unit", "_loadout", "_extendedInfo"]; if (_extendedInfo getOrDefault ["ace_earplugs", false]) then { _unit setVariable ["ACE_hasEarPlugsIn", true, true]; - [[true]] remoteExec [QFUNC(updateVolume), _unit]; + + [QGVAR(updateVolume), [[true]], _unit] call CBA_fnc_targetEvent; }; }] call CBA_fnc_addEventHandler; diff --git a/addons/hearing/functions/fnc_addEarPlugs.sqf b/addons/hearing/functions/fnc_addEarPlugs.sqf index f467352410..c541d78618 100644 --- a/addons/hearing/functions/fnc_addEarPlugs.sqf +++ b/addons/hearing/functions/fnc_addEarPlugs.sqf @@ -15,14 +15,14 @@ * Public: No */ -params ["_unit"]; -TRACE_2("params",_unit,typeOf _unit); - // only run this after the settings are initialized if !(EGVAR(common,settingsInitFinished)) exitWith { EGVAR(common,runAtSettingsInitialized) pushBack [FUNC(addEarPlugs), _this]; }; +params ["_unit"]; +TRACE_2("params",_unit,typeOf _unit); + // Exit if hearing is disabled OR autoAdd is disabled OR soldier has earplugs already in (persistence scenarios) if (!GVAR(enableCombatDeafness) || {!GVAR(autoAddEarplugsToUnits)} || {[_unit] call FUNC(hasEarPlugsIn)}) exitWith {}; @@ -38,16 +38,20 @@ if ((primaryWeapon _unit) == "") exitWith {}; (primaryWeaponMagazine _unit) params [["_magazine", ""]]; if (_magazine == "") exitWith {}; -private _initSpeed = getNumber (configFile >> "CfgMagazines" >> _magazine >> "initSpeed"); -private _ammo = getText (configFile >> "CfgMagazines" >> _magazine >> "ammo"); -private _count = getNumber (configFile >> "CfgMagazines" >> _magazine >> "count"); +private _cfgMagazine = configFile >> "CfgMagazines" >> _magazine; -private _caliber = getNumber (configFile >> "CfgAmmo" >> _ammo >> "ACE_caliber"); +private _initSpeed = getNumber (_cfgMagazine >> "initSpeed"); +private _ammo = getText (_cfgMagazine >> "ammo"); +private _count = getNumber (_cfgMagazine >> "count"); + +private _cfgAmmo = configFile >> "CfgAmmo"; + +private _caliber = getNumber (_cfgAmmo >> _ammo >> "ACE_caliber"); _caliber = call { - if (_ammo isKindOf ["ShellBase", (configFile >> "CfgAmmo")]) exitWith { 80 }; - if (_ammo isKindOf ["RocketBase", (configFile >> "CfgAmmo")]) exitWith { 200 }; - if (_ammo isKindOf ["MissileBase", (configFile >> "CfgAmmo")]) exitWith { 600 }; - if (_ammo isKindOf ["SubmunitionBase", (configFile >> "CfgAmmo")]) exitWith { 80 }; + if (_ammo isKindOf ["ShellBase", _cfgAmmo]) exitWith { 80 }; + if (_ammo isKindOf ["RocketBase", _cfgAmmo]) exitWith { 200 }; + if (_ammo isKindOf ["MissileBase", _cfgAmmo]) exitWith { 600 }; + if (_ammo isKindOf ["SubmunitionBase", _cfgAmmo]) exitWith { 80 }; [_caliber, 6.5] select (_caliber <= 0); }; private _loudness = (_caliber ^ 1.25 / 10) * (_initspeed / 1000) / 5; From 3c5b46c42dd2f269ac8f52548d65ce0ed14e9ced Mon Sep 17 00:00:00 2001 From: BrettMayson Date: Thu, 21 Mar 2024 15:56:24 -0600 Subject: [PATCH 022/132] Medical - Support Magazine Treatment Items (#9816) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * count treatment items * getCountofItem Co-Authored-By: Blue * getCountofItem fix Co-Authored-By: Blue * convert painkillers to magazine * use isclass Co-Authored-By: johnb432 <58661205+johnb432@users.noreply.github.com> * forget to change variable * Update addons/medical_treatment/functions/fnc_hasItem.sqf Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> * better magazine adjustment * Update addons/common/functions/fnc_adjustMagazineAmmo.sqf Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> * Update addons/medical_treatment/functions/fnc_medication.sqf Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> * Update addons/medical_treatment/functions/fnc_treatmentFailure.sqf Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> * Update docs/wiki/framework/arsenal-framework.md Co-authored-by: Jouni Järvinen * Update addons/common/functions/fnc_adjustMagazineAmmo.sqf Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> * Header * use switch statement in fnc_useItem * Update addons/common/functions/fnc_adjustMagazineAmmo.sqf * Update addons/common/functions/fnc_adjustMagazineAmmo.sqf Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> * only check adding to mags that are not full Co-Authored-By: LinkIsGrim * Update addons/common/functions/fnc_adjustMagazineAmmo.sqf * Update fnc_getCountOfItem.sqf * Optimisations & header fix * Update addons/common/functions/fnc_adjustMagazineAmmo.sqf * Fixed vehicle implementation --------- Co-authored-by: Blue Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> Co-authored-by: Jouni Järvinen Co-authored-by: LinkIsGrim --- .../functions/fnc_addRightPanelButton.sqf | 3 +- addons/arsenal/functions/fnc_scanConfig.sqf | 2 +- addons/common/XEH_PREP.hpp | 1 + .../functions/fnc_adjustMagazineAmmo.sqf | 107 ++++++++++++++++++ .../common/functions/fnc_getCountOfItem.sqf | 22 ++-- addons/common/functions/fnc_uniqueItems.sqf | 73 +++++++++--- .../functions/fnc_countTreatmentItems.sqf | 23 +++- addons/medical_treatment/CfgMagazines.hpp | 16 +++ addons/medical_treatment/CfgVehicles.hpp | 12 +- addons/medical_treatment/CfgWeapons.hpp | 13 --- addons/medical_treatment/config.cpp | 1 + .../functions/fnc_hasItem.sqf | 3 +- .../functions/fnc_medication.sqf | 3 +- .../functions/fnc_treatmentFailure.sqf | 6 +- .../functions/fnc_useItem.sqf | 31 +++-- docs/wiki/framework/arsenal-framework.md | 3 +- 16 files changed, 261 insertions(+), 58 deletions(-) create mode 100644 addons/common/functions/fnc_adjustMagazineAmmo.sqf create mode 100644 addons/medical_treatment/CfgMagazines.hpp diff --git a/addons/arsenal/functions/fnc_addRightPanelButton.sqf b/addons/arsenal/functions/fnc_addRightPanelButton.sqf index 6e1035a86a..a1bdb09d1d 100644 --- a/addons/arsenal/functions/fnc_addRightPanelButton.sqf +++ b/addons/arsenal/functions/fnc_addRightPanelButton.sqf @@ -66,7 +66,8 @@ _items = _items select { _x isKindOf ["CBA_MiscItem", _cfgWeapons] && {getNumber (_configItemInfo >> "type") in [TYPE_MUZZLE, TYPE_OPTICS, TYPE_FLASHLIGHT, TYPE_BIPOD]} || {getNumber (_configItemInfo >> "type") in [TYPE_FIRST_AID_KIT, TYPE_MEDIKIT, TYPE_TOOLKIT]} || {getText (_cfgWeapons >> _x >> "simulation") == "ItemMineDetector"} || - {getNumber (_cfgMagazines >> _x >> "ACE_isUnique") == 1} + {getNumber (_cfgMagazines >> _x >> "ACE_isUnique") == 1} || + {getNumber (_cfgMagazines >> _x >> "ACE_asItem") == 1} }; GVAR(customRightPanelButtons) set [_position, [_items apply {_x call EFUNC(common,getConfigName)}, _picture, _tooltip, _moveOnOverwrite]]; diff --git a/addons/arsenal/functions/fnc_scanConfig.sqf b/addons/arsenal/functions/fnc_scanConfig.sqf index 105eb3479a..fef97e8bd8 100644 --- a/addons/arsenal/functions/fnc_scanConfig.sqf +++ b/addons/arsenal/functions/fnc_scanConfig.sqf @@ -160,7 +160,7 @@ private _magazineMiscItems = createHashMap; { _magazineMiscItems set [configName _x, nil]; -} forEach ((toString {getNumber (_x >> "ACE_isUnique") == 1}) configClasses _cfgMagazines); +} forEach ((toString {getNumber (_x >> "ACE_isUnique") == 1 || getNumber (_x >> "ACE_asItem") == 1}) configClasses _cfgMagazines); // Remove invalid/non-existent entries _grenadeList deleteAt ""; diff --git a/addons/common/XEH_PREP.hpp b/addons/common/XEH_PREP.hpp index ce6ac334ee..fb64d464df 100644 --- a/addons/common/XEH_PREP.hpp +++ b/addons/common/XEH_PREP.hpp @@ -13,6 +13,7 @@ PREP(addLineToDebugDraw); PREP(addSwayFactor); PREP(addToInventory); PREP(addWeapon); +PREP(adjustMagazineAmmo); PREP(assignedItemFix); PREP(assignObjectsInList); PREP(ambientBrightness); diff --git a/addons/common/functions/fnc_adjustMagazineAmmo.sqf b/addons/common/functions/fnc_adjustMagazineAmmo.sqf new file mode 100644 index 0000000000..87d5b9e899 --- /dev/null +++ b/addons/common/functions/fnc_adjustMagazineAmmo.sqf @@ -0,0 +1,107 @@ +#include "..\script_component.hpp" +/* + * Author: Katalam, Blue, Brett Mayson, johnb43 + * Handle adjusting a magazine's ammo + * + * Arguments: + * 0: Vehicle or Unit + * 1: Item + * 2: Ammo to adjust by (default: -1) + * + * Return Value: + * How much the ammo was adjusted by + * + * Example: + * [player, "30Rnd_556x45_Stanag", 1] call ace_common_fnc_adjustMagazineAmmo; + * + * Public: No + */ + +params ["_unit", "_magazine", ["_count", -1]]; + +if (_count == 0) exitWith {0}; + +private _containers = if (_unit isKindOf "CAManBase") then { + [uniformContainer _unit, vestContainer _unit, backpackContainer _unit] +} else { + [_unit] +}; + +scopeName "main"; + +private _originalCount = _count; +private _container = objNull; +private _magazinesContainer = []; +private _newAmmoCount = 0; +private _removeAmmo = _count < 0; +private _maxMagazineAmmo = getNumber (configFile >> "CfgMagazines" >> _magazine >> "count"); + +{ + _container = _x; + + // Get all magazines of _magazine type + _magazinesContainer = (magazinesAmmoCargo _container) select {_x select 0 == _magazine}; + + // Get the ammo count, filter out magazines with 0 ammo + _magazinesContainer = (_magazinesContainer apply {_x select 1}) select {_x != 0}; + + // If there are none, skip to next container + if (_magazinesContainer isEqualTo []) then { + continue; + }; + + // Sort, smallest first when removing, largest first when adding + _magazinesContainer sort _removeAmmo; + + if (_removeAmmo) then { + { + _count = _x + _count; + + _container addMagazineAmmoCargo [_magazine, -1, _x]; + + if (_count >= 0) then { + // Only add magazine back if it's not empty + if (_count != 0) then { + _container addMagazineAmmoCargo [_magazine, 1, _count]; + }; + + _originalCount breakOut "main"; + }; + } forEach _magazinesContainer; + } else { + // This loop only fills up partially filled magazines + { + // Fill the magazine to either its max or until all ammo has been added + _newAmmoCount = (_x + _count) min _maxMagazineAmmo; + + if (_newAmmoCount <= _maxMagazineAmmo) then { + _container addMagazineAmmoCargo [_magazine, -1, _x]; + _container addMagazineAmmoCargo [_magazine, 1, _newAmmoCount]; + }; + + // Remove the ammo that was added + _count = _count - (_newAmmoCount - _x); + + if (_count <= 0) then { + _originalCount breakOut "main"; + }; + } forEach (_magazinesContainer select {_x < _maxMagazineAmmo}); + }; +} forEach _containers; + +// If there is still remaining ammo to add, try add it after having iterated through all containers +if (!_removeAmmo && _count > 0) then { + { + while {_count > 0 && {_x canAdd [_magazine, 1/* 2.18 , true*/]}} do { + _x addMagazineAmmoCargo [_magazine, 1, _count]; + + _count = _count - _maxMagazineAmmo; + }; + } forEach _containers; + + if (_count <= 0) then { + _originalCount breakOut "main"; + }; +}; + +_originalCount - _count diff --git a/addons/common/functions/fnc_getCountOfItem.sqf b/addons/common/functions/fnc_getCountOfItem.sqf index 5667b6c980..5114f375d2 100644 --- a/addons/common/functions/fnc_getCountOfItem.sqf +++ b/addons/common/functions/fnc_getCountOfItem.sqf @@ -1,6 +1,6 @@ #include "..\script_component.hpp" /* - * Author: Dedmen + * Author: Dedmen, Blue, johnb43 * Return how many items of type _itemType the player has in his containers (Uniform, Vest, Backpack) * Doesn't count assignedItems, weapons, weapon attachments, magazines in weapons * @@ -19,13 +19,17 @@ params ["_unit", "_itemType"]; -private _countItemsInContainer = { - (getItemCargo _this) params ["_itemTypes", "_itemCounts"]; +private _count = 0; +private _isMagazine = isClass (configFile >> "CfgMagazines" >> _itemType); - private _index = _itemTypes find _itemType; - _itemCounts param [_index, 0] -}; +{ + (if (_isMagazine) then { + getMagazineCargo _x + } else { + getItemCargo _x + }) params ["_itemTypes", "_itemCounts"]; -((uniformContainer _unit) call _countItemsInContainer) + -((vestContainer _unit) call _countItemsInContainer) + -((backpackContainer _unit) call _countItemsInContainer) + _count = _count + (_itemCounts param [_itemTypes find _itemType, 0]); +} forEach [uniformContainer _unit, vestContainer _unit, backpackContainer _unit]; + +_count diff --git a/addons/common/functions/fnc_uniqueItems.sqf b/addons/common/functions/fnc_uniqueItems.sqf index dc783ebbea..204501ca3f 100644 --- a/addons/common/functions/fnc_uniqueItems.sqf +++ b/addons/common/functions/fnc_uniqueItems.sqf @@ -1,37 +1,84 @@ #include "..\script_component.hpp" /* - * Author: mharis001 - * Returns list of unique items in a unit's inventory. - * Items are cached if unit is ACE_player. + * Author: mharis001, Blue, Brett Mayson + * Returns list of unique items in the target's inventory. * * Arguments: - * 0: Unit + * 0: Target + * 1: Include magazines + * 0: No (default) + * 1: Yes + * 2: Only magazines * * Return Value: * Items * * Example: - * [player] call ace_common_fnc_uniqueItems + * [player, 2] call ace_common_fnc_uniqueItems * * Public: No */ -params ["_unit"]; +params ["_target", ["_includeMagazines", 0]]; private _fnc_getItems = { - private _items = (getItemCargo uniformContainer _unit) select 0; - _items append ((getItemCargo vestContainer _unit) select 0); - _items append ((getItemCargo backpackContainer _unit) select 0); + private _items = []; + + private _inventoryItems = (getItemCargo uniformContainer _target) select 0; + _inventoryItems append ((getItemCargo vestContainer _target) select 0); + _inventoryItems append ((getItemCargo backpackContainer _target) select 0); + + _items set [0, _inventoryItems]; + _items set [1, magazines _target]; _items arrayIntersect _items }; -// Use cached items list if unit is ACE_player -if (_unit isEqualTo ACE_player) then { +// Cache items list if unit is ACE_player +if (_target isEqualTo ACE_player) then { if (isNil QGVAR(uniqueItemsCache)) then { GVAR(uniqueItemsCache) = call _fnc_getItems; }; - +GVAR(uniqueItemsCache) + + switch (_includeMagazines) do { + case 0: { + GVAR(uniqueItemsCache) select 0 + }; + case 1: { + (GVAR(uniqueItemsCache) select 1) + (GVAR(uniqueItemsCache) select 0) + }; + case 2: { + GVAR(uniqueItemsCache) select 1 + }; + }; } else { - call _fnc_getItems; + if (_target isKindOf "CAManBase") then { + private _items = call _fnc_getItems; + + switch (_includeMagazines) do { + case 0: { + _items select 0 + }; + case 1: { + (_items select 1) + (_items select 0) + }; + case 2: { + _items select 1 + }; + }; + } else { + private _items = switch (_includeMagazines) do { + case 0: { + itemCargo _target + }; + case 1: { + (magazineCargo _target) + (itemCargo _target) + }; + case 2: { + magazineCargo _target + }; + }; + + _items arrayIntersect _items + }; }; diff --git a/addons/medical_gui/functions/fnc_countTreatmentItems.sqf b/addons/medical_gui/functions/fnc_countTreatmentItems.sqf index 6e8394c82f..ac7c4857e6 100644 --- a/addons/medical_gui/functions/fnc_countTreatmentItems.sqf +++ b/addons/medical_gui/functions/fnc_countTreatmentItems.sqf @@ -42,12 +42,27 @@ private _vehicle = [_patientVehicle, _medicVehicle] select (!isNull _medicVehicl if (!isNull _vehicle) then { _vehicleCount = 0; - (getItemCargo _vehicle) params ["_itemTypes", "_itemCounts"]; + private _magazineItems = []; + private _itemItems = []; { - private _item = _x; - private _index = _itemTypes find _item; - _vehicleCount = _vehicleCount + (_itemCounts param [_index, 0]); + if (isClass (configFile >> "CfgMagazines" >> _x)) then { + _magazineItems pushBack _x; + } else { + _itemItems pushBack _x; + }; } forEach _items; + if (_magazineItems isNotEqualTo []) then { + (getMagazineCargo _vehicle) params ["_itemTypes", "_itemCounts"]; + { + _vehicleCount = _vehicleCount + (_itemCounts param [_itemTypes find _x, 0]); + } forEach _magazineItems; + }; + if (_itemItems isNotEqualTo []) then { + (getItemCargo _vehicle) params ["_itemTypes", "_itemCounts"]; + { + _vehicleCount = _vehicleCount + (_itemCounts param [_itemTypes find _x, 0]); + } forEach _itemItems; + }; }; [_medicCount, _patientCount, _vehicleCount] diff --git a/addons/medical_treatment/CfgMagazines.hpp b/addons/medical_treatment/CfgMagazines.hpp new file mode 100644 index 0000000000..c4daafab76 --- /dev/null +++ b/addons/medical_treatment/CfgMagazines.hpp @@ -0,0 +1,16 @@ +class CfgMagazines { + class CA_Magazine; + class ACE_painkillers: CA_Magazine { + scope = 2; + author = ECSTRING(common,ACETeam); + displayName = CSTRING(painkillers_Display); + model = "\A3\Structures_F_EPA\Items\Medical\PainKillers_F.p3d"; + picture = QPATHTOF(ui\painkillers_ca.paa); + descriptionShort = CSTRING(painkillers_Desc_Short); + descriptionUse = CSTRING(painkillers_Desc_Use); + ACE_isMedicalItem = 1; + ACE_asItem = 1; + count = 10; + mass = 1; + }; +}; diff --git a/addons/medical_treatment/CfgVehicles.hpp b/addons/medical_treatment/CfgVehicles.hpp index bcecdb155e..4f922eb199 100644 --- a/addons/medical_treatment/CfgVehicles.hpp +++ b/addons/medical_treatment/CfgVehicles.hpp @@ -290,8 +290,8 @@ class CfgVehicles { displayName = CSTRING(painkillers_Display); author = "Alganthe"; vehicleClass = "Items"; - class TransportItems { - MACRO_ADDITEM(ACE_painkillers,1); + class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_painkillers,1); }; }; @@ -313,9 +313,11 @@ class CfgVehicles { model = QPATHTOF(data\ace_medcrate.p3d); editorPreview = QPATHTOF(data\ACE_medicalSupplyCrate.jpg); author = ECSTRING(common,ACETeam); + class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_painkillers,25); + }; class TransportItems { MACRO_ADDITEM(ACE_fieldDressing,50); - MACRO_ADDITEM(ACE_painkillers,25); MACRO_ADDITEM(ACE_morphine,25); MACRO_ADDITEM(ACE_epinephrine,25); MACRO_ADDITEM(ACE_bloodIV,15); @@ -357,13 +359,15 @@ class CfgVehicles { }; class ACE_medicalSupplyCrate_advanced: ACE_medicalSupplyCrate { displayName = CSTRING(medicalSupplyCrate_advanced); + class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_painkillers,15); + }; class TransportItems { MACRO_ADDITEM(ACE_fieldDressing,25); MACRO_ADDITEM(ACE_packingBandage,25); MACRO_ADDITEM(ACE_elasticBandage,25); MACRO_ADDITEM(ACE_tourniquet,15); MACRO_ADDITEM(ACE_splint,15); - MACRO_ADDITEM(ACE_painkillers,15); MACRO_ADDITEM(ACE_morphine,15); MACRO_ADDITEM(ACE_adenosine,15); MACRO_ADDITEM(ACE_epinephrine,15); diff --git a/addons/medical_treatment/CfgWeapons.hpp b/addons/medical_treatment/CfgWeapons.hpp index 31b98bd843..7b31e10bee 100644 --- a/addons/medical_treatment/CfgWeapons.hpp +++ b/addons/medical_treatment/CfgWeapons.hpp @@ -310,17 +310,4 @@ class CfgWeapons { hiddenSelectionsTextures[] = {QPATHTOF(data\bodybagItem_white_co.paa)}; GVAR(bodyBagObject) = "ACE_bodyBagObject_white"; }; - class ACE_painkillers: ACE_ItemCore { - scope = 2; - author = "Alganthe"; - displayName = CSTRING(painkillers_Display); - model = "\A3\Structures_F_EPA\Items\Medical\PainKillers_F.p3d"; - picture = QPATHTOF(ui\painkillers_ca.paa); - descriptionShort = CSTRING(painkillers_Desc_Short); - descriptionUse = CSTRING(painkillers_Desc_Use); - ACE_isMedicalItem = 1; - class ItemInfo: CBA_MiscItem_ItemInfo { - mass = 1; - }; - }; }; diff --git a/addons/medical_treatment/config.cpp b/addons/medical_treatment/config.cpp index 75166a0f0c..3782645019 100644 --- a/addons/medical_treatment/config.cpp +++ b/addons/medical_treatment/config.cpp @@ -30,5 +30,6 @@ class CfgPatches { #include "CfgVehicles.hpp" #include "CfgWeapons.hpp" #include "Cfg3DEN.hpp" +#include "CfgMagazines.hpp" #endif diff --git a/addons/medical_treatment/functions/fnc_hasItem.sqf b/addons/medical_treatment/functions/fnc_hasItem.sqf index e84a79f142..e0ef4c8a4f 100644 --- a/addons/medical_treatment/functions/fnc_hasItem.sqf +++ b/addons/medical_treatment/functions/fnc_hasItem.sqf @@ -25,10 +25,11 @@ params ["_medic", "_patient", "_items"]; private _fnc_checkItems = { params ["_unit"]; - private _unitItems = _unit call EFUNC(common,uniqueItems); + private _unitItems = [_unit, 1] call EFUNC(common,uniqueItems); private _unitVehicle = objectParent _unit; if (!isNull _unitVehicle) then { _unitItems append (itemCargo _unitVehicle); + _unitItems append (magazineCargo _unitVehicle); }; _items findIf {_x in _unitItems} != -1 }; diff --git a/addons/medical_treatment/functions/fnc_medication.sqf b/addons/medical_treatment/functions/fnc_medication.sqf index b69a63e994..dfd08d4de2 100644 --- a/addons/medical_treatment/functions/fnc_medication.sqf +++ b/addons/medical_treatment/functions/fnc_medication.sqf @@ -23,6 +23,7 @@ params ["_medic", "_patient", "_bodyPart", "_classname", "", "_usedItem"]; [_patient, _usedItem] call FUNC(addToTriageCard); -[_patient, "activity", LSTRING(Activity_usedItem), [[_medic, false, true] call EFUNC(common,getName), getText (configFile >> "CfgWeapons" >> _usedItem >> "displayName")]] call FUNC(addToLog); +private _cfg = ["CfgWeapons", "CfgMagazines"] select (isClass (configFile >> "CfgMagazines" >> _usedItem)); +[_patient, "activity", LSTRING(Activity_usedItem), [[_medic, false, true] call EFUNC(common,getName), getText (configFile >> _cfg >> _usedItem >> "displayName")]] call FUNC(addToLog); [QGVAR(medicationLocal), [_patient, _bodyPart, _classname], _patient] call CBA_fnc_targetEvent; diff --git a/addons/medical_treatment/functions/fnc_treatmentFailure.sqf b/addons/medical_treatment/functions/fnc_treatmentFailure.sqf index 64d18fa830..42323922a3 100644 --- a/addons/medical_treatment/functions/fnc_treatmentFailure.sqf +++ b/addons/medical_treatment/functions/fnc_treatmentFailure.sqf @@ -23,7 +23,11 @@ _args params ["_medic", "_patient", "_bodyPart", "_classname", "_itemUser", "_us // Return used item to user (if used) if (!isNull _itemUser) then { - [_itemUser, _usedItem] call EFUNC(common,addToInventory); + if (isClass (configFile >> "CfgMagazines" >> _usedItem)) then { + [_itemUser, _usedItem, 1] call EFUNC(common,adjustMagazineAmmo); + } else { + [_itemUser, _usedItem] call EFUNC(common,addToInventory); + }; }; // Switch medic to end animation immediately diff --git a/addons/medical_treatment/functions/fnc_useItem.sqf b/addons/medical_treatment/functions/fnc_useItem.sqf index 1f1d7c8355..9bba3d1c90 100644 --- a/addons/medical_treatment/functions/fnc_useItem.sqf +++ b/addons/medical_treatment/functions/fnc_useItem.sqf @@ -29,18 +29,31 @@ scopeName "Main"; private _useOrder = [[_patient, _medic], [_medic, _patient], [_medic]] select GVAR(allowSharedEquipment); { - private _unit = _x; + private _unit = _x; private _unitVehicle = objectParent _unit; - private _unitItems = _x call EFUNC(common,uniqueItems); + private _unitItems = [_x, 0] call EFUNC(common,uniqueItems); + private _unitMagazines = [_x, 2] call EFUNC(common,uniqueItems); + private _vehicleItems = itemCargo _unitVehicle; // [] for objNull + private _vehicleMagazines = magazineCargo _unitVehicle; // same { - if (!isNull _unitVehicle && {_x in (itemCargo _unitVehicle)}) then { - _unitVehicle addItemCargoGlobal [_x, -1]; - [_unit, _x] breakOut "Main"; - }; - if (_x in _unitItems) then { - _unit removeItem _x; - [_unit, _x] breakOut "Main"; + switch (true) do { + case (_x in _vehicleItems): { + _unitVehicle addItemCargoGlobal [_x, -1]; + [_unit, _x] breakOut "Main"; + }; + case (_x in _vehicleMagazines): { + [_unitVehicle, _x] call EFUNC(common,adjustMagazineAmmo); + [_unit, _x] breakOut "Main"; + }; + case (_x in _unitItems): { + _unit removeItem _x; + [_unit, _x] breakOut "Main"; + }; + case (_x in _unitMagazines): { + [_unit, _x] call EFUNC(common,adjustMagazineAmmo); + [_unit, _x] breakOut "Main"; + }; }; } forEach _items; } forEach _useOrder; diff --git a/docs/wiki/framework/arsenal-framework.md b/docs/wiki/framework/arsenal-framework.md index 4691483e80..273a70836f 100644 --- a/docs/wiki/framework/arsenal-framework.md +++ b/docs/wiki/framework/arsenal-framework.md @@ -138,6 +138,7 @@ ACE Arsenal uses 2 existing config entries to sort and display items. - `baseWeapon`: Class name that is used to display an item in the arsenal, used for weapon/attachment variants that are not normally shown to the player (AI variants, PIP optics, and so on). This property can be applied to any weapon or weapon attachment in `CfgWeapons`. Items using CBA or RHS' Scripted Optics systems, or CBA Switchable Attachments do not need this property explictly set, and will automatically use their player-accessible class. - `ACE_isUnique`: Classes in `CfgMagazines` with this property set to `1` will be treated and shown by the Arsenal as Misc. Items. Used for items with attached data that needs to be kept track of, such as Notepads or Spare Barrels. +- `ACE_asItem`: Classes in `CfgMagazines` with this property set to `1` will be treated and shown by the Arsenal as Items. Used for magazines that are not meant to be used in a weapon, such as Painkillers. ### 3.2 New config entries @@ -159,7 +160,7 @@ ACE Medical Treatment and ACE Field Rations also add their own sub-categories, i - `ACE_isMedicalItem`: Items with this property set to `1` will be sorted to the ACE Medical Tab. - `ACE_isFieldRationItem`: Items with this property set to `1` will be sorted to the ACE Field Rations Tab. -Only Misc. Items will be checked for these properties. Magazines must have ACE_isUnique property. +Only Misc. Items will be checked for these properties. Magazines must have `ACE_isUnique` or `ACE_asItem` property. ## 4. Default loadouts From 9a5cb8bd910bb3abc1401188c0e19632be5e2810 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Thu, 21 Mar 2024 16:56:44 -0500 Subject: [PATCH 023/132] Maverick - Cleanup config (#9868) --- addons/maverick/config.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/addons/maverick/config.cpp b/addons/maverick/config.cpp index 6d5837f87d..d25878d004 100644 --- a/addons/maverick/config.cpp +++ b/addons/maverick/config.cpp @@ -9,10 +9,6 @@ class CfgPatches { authors[] = {"xrufix"}; url = ECSTRING(main,URL); VERSION_CONFIG; - ammo[] = { - QGVAR(L), - "ace_kh25ml" - }; magazines[] = { QGVAR(L_magazine_x1), QGVAR(L_pylonmissile_x1), From 2456c445b2cfce6883b742058b2de0b575a74f23 Mon Sep 17 00:00:00 2001 From: Mike-MF Date: Sat, 23 Mar 2024 13:28:20 +0000 Subject: [PATCH 024/132] Compat CUP Weapons - Fix Metis UBC (#9870) --- .../compat_cup_weapons_csw/CfgVehicles.hpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/addons/compat_cup_weapons/compat_cup_weapons_csw/CfgVehicles.hpp b/addons/compat_cup_weapons/compat_cup_weapons_csw/CfgVehicles.hpp index 29322b5886..3924ae0386 100644 --- a/addons/compat_cup_weapons/compat_cup_weapons_csw/CfgVehicles.hpp +++ b/addons/compat_cup_weapons/compat_cup_weapons_csw/CfgVehicles.hpp @@ -128,8 +128,8 @@ class CfgVehicles { }; }; - class AT_01_base_F; - class CUP_Metis_Base: AT_01_base_F { + class StaticATWeapon; + class CUP_Metis_Base: StaticATWeapon { class ace_csw { enabled = 1; proxyWeapon = "CUP_proxy_AT13"; @@ -142,7 +142,6 @@ class CfgVehicles { }; }; - class StaticATWeapon; class CUP_TOW_TriPod_base: StaticATWeapon { class ace_csw { enabled = 1; From 58f6430bb6eaf60028c82bd7081b94a673478bb0 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Sat, 23 Mar 2024 14:29:26 +0100 Subject: [PATCH 025/132] Arsenal - Revert unicode support for sorting (#9871) Revert unicode sorting --- addons/arsenal/functions/fnc_sortPanel.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/arsenal/functions/fnc_sortPanel.sqf b/addons/arsenal/functions/fnc_sortPanel.sqf index 7a8a8978eb..f9803a429e 100644 --- a/addons/arsenal/functions/fnc_sortPanel.sqf +++ b/addons/arsenal/functions/fnc_sortPanel.sqf @@ -244,7 +244,7 @@ _for do { // Sort alphabetically, find the previously selected item and select it again if (_right) then { - [_panel, 1] lnbSortBy ["TEXT", _sortDirection == ASCENDING, false, true, false]; + [_panel, 1] lnbSortBy ["TEXT", _sortDirection == ASCENDING, false, true, true]; // do not support unicode, as it's much more performance intensive (~3x more) _for do { // Remove sorting text, as it blocks the item name otherwise @@ -258,7 +258,7 @@ if (_right) then { }; }; } else { - _panel lbSortBy ["TEXT", _sortDirection == ASCENDING, false, true, false]; + _panel lbSortBy ["TEXT", _sortDirection == ASCENDING, false, true, true]; // do not support unicode, as it's much more performance intensive (~3x more) _for do { _item = _panel lbData _i; From 86f1b6b14279ee600432c84ad210159c231e5f96 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sun, 24 Mar 2024 11:32:28 -0500 Subject: [PATCH 026/132] AB/Scopes - Fix script errors on profiling branch (#9869) * AB/Scopes - Fix script errors on profiling branch * Update addons/scopes/functions/fnc_calculateZeroAngleCorrection.sqf Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> --------- Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> --- .../functions/fnc_readAmmoDataFromConfig.sqf | 3 +++ .../fnc_calculateZeroAngleCorrection.sqf | 18 +++++++++++------- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/addons/advanced_ballistics/functions/fnc_readAmmoDataFromConfig.sqf b/addons/advanced_ballistics/functions/fnc_readAmmoDataFromConfig.sqf index d6081e6f9e..125c3677b8 100644 --- a/addons/advanced_ballistics/functions/fnc_readAmmoDataFromConfig.sqf +++ b/addons/advanced_ballistics/functions/fnc_readAmmoDataFromConfig.sqf @@ -44,6 +44,9 @@ if (!(_dragModel in [1, 2, 5, 6, 7, 8])) then { _dragModel = 1; }; private _ballisticCoefficients = getArray(_ammoConfig >> "ACE_ballisticCoefficients"); +if (_ballisticCoefficients isEqualTo []) then { + _ballisticCoefficients = [0.5]; +}; private _velocityBoundaries = getArray(_ammoConfig >> "ACE_velocityBoundaries"); private _atmosphereModel = getText(_ammoConfig >> "ACE_standardAtmosphere"); if (_atmosphereModel isEqualTo "") then { diff --git a/addons/scopes/functions/fnc_calculateZeroAngleCorrection.sqf b/addons/scopes/functions/fnc_calculateZeroAngleCorrection.sqf index 6cb53c3898..ab84db7cde 100644 --- a/addons/scopes/functions/fnc_calculateZeroAngleCorrection.sqf +++ b/addons/scopes/functions/fnc_calculateZeroAngleCorrection.sqf @@ -4,24 +4,28 @@ * Calculates the zero angle correction for the new zero range based on current zero range and bore height (distance between bore- and sight axis) * * Arguments: - * 0: Zero range - * 1: Bore height - * 2: Weapon - * 3: Ammo - * 4: Magazine - * 5: Advanced Ballistics enabled? + * 0: Old Zero range + * 1: New Zero range + * 2: Bore height + * 3: Weapon + * 4: Ammo + * 5: Magazine + * 6: Advanced Ballistics enabled? * * Return Value: * zeroAngleCorrection * * Example: - * [5, 6, gun, ammo, magazine, true] call ace_scopes_fnc_calculateZeroAngleCorrection + * [5, 6, 7, gun, ammo, magazine, true] call ace_scopes_fnc_calculateZeroAngleCorrection * * Public: No */ params ["_oldZeroRange", "_newZeroRange", "_boreHeight"/*in cm*/, "_weapon", "_ammo", "_magazine", "_advancedBallistics"]; +// When FFV from vehicles currentZeroing will report 0 so just bail +if (_oldZeroRange <= 0) exitWith { 0 }; + private _airFriction = getNumber (configFile >> "CfgAmmo" >> _ammo >> "airFriction"); private _initSpeed = getNumber(configFile >> "CfgMagazines" >> _magazine >> "initSpeed"); private _initSpeedCoef = getNumber(configFile >> "CfgWeapons" >> _weapon >> "initSpeed"); From 80417b114df9d6b1cdc92b150ed5aeec176ec36e Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Sun, 24 Mar 2024 22:28:14 +0100 Subject: [PATCH 027/132] Advanced Fatigue - Move sway to common and add enable sway setting (#9872) * Move sway from fatigue to common * Added enable sway setting * Update addons/common/stringtable.xml Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> * Update addons/common/stringtable.xml Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> * Update addons/common/stringtable.xml --------- Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> --- addons/advanced_fatigue/XEH_postInit.sqf | 14 ---- addons/advanced_fatigue/initSettings.inc.sqf | 27 ------- addons/advanced_fatigue/stringtable.xml | 70 ----------------- addons/common/XEH_postInit.sqf | 18 ++++- addons/common/functions/fnc_swayLoop.sqf | 4 +- addons/common/initSettings.inc.sqf | 45 ++++++++++- addons/common/stringtable.xml | 79 ++++++++++++++++++++ 7 files changed, 139 insertions(+), 118 deletions(-) diff --git a/addons/advanced_fatigue/XEH_postInit.sqf b/addons/advanced_fatigue/XEH_postInit.sqf index ff09464901..f5aa7432f0 100644 --- a/addons/advanced_fatigue/XEH_postInit.sqf +++ b/addons/advanced_fatigue/XEH_postInit.sqf @@ -25,20 +25,6 @@ if (!hasInterface) exitWith {}; }; }, QUOTE(ADDON)] call EFUNC(common,addSwayFactor); - ["multiplier", { - switch (true) do { - case (isWeaponRested ACE_player): { - GVAR(swayFactor) * GVAR(restedSwayFactor) - }; - case (isWeaponDeployed ACE_player): { - GVAR(swayFactor) * GVAR(deployedSwayFactor) - }; - default { - GVAR(swayFactor) - }; - }; - }, QUOTE(ADDON)] call EFUNC(common,addSwayFactor); - // - Post process effect ------------------------------------------------------ GVAR(ppeBlackout) = ppEffectCreate ["ColorCorrections", 4220]; GVAR(ppeBlackout) ppEffectEnable true; diff --git a/addons/advanced_fatigue/initSettings.inc.sqf b/addons/advanced_fatigue/initSettings.inc.sqf index e2d797bf91..9952a51d23 100644 --- a/addons/advanced_fatigue/initSettings.inc.sqf +++ b/addons/advanced_fatigue/initSettings.inc.sqf @@ -80,30 +80,3 @@ [0, 5, 1, 1], true ] call CBA_fnc_addSetting; - -[ - QGVAR(swayFactor), - "SLIDER", - [LSTRING(SwayFactor), LSTRING(SwayFactor_Description)], - LSTRING(DisplayName), - [0, 5, 1, 1], - true -] call CBA_fnc_addSetting; - -[ - QGVAR(restedSwayFactor), - "SLIDER", - [LSTRING(RestedSwayFactor), LSTRING(RestedSwayFactor_Description)], - LSTRING(DisplayName), - [0, 5, 1, 2], - true -] call CBA_fnc_addSetting; - -[ - QGVAR(deployedSwayFactor), - "SLIDER", - [LSTRING(DeployedSwayFactor), LSTRING(DeployedSwayFactor_Description)], - LSTRING(DisplayName), - [0, 5, 1, 2], - true -] call CBA_fnc_addSetting; diff --git a/addons/advanced_fatigue/stringtable.xml b/addons/advanced_fatigue/stringtable.xml index 502ed12efd..5cd36ffce6 100644 --- a/addons/advanced_fatigue/stringtable.xml +++ b/addons/advanced_fatigue/stringtable.xml @@ -154,76 +154,6 @@ Define o quanto que um terreno íngrime aumenta na perda de estamina. Quanto maior, maior a perda de estamina. Nastavuje, o kolik strmý terén zvyšuje ztrátu výdrže. Vyšší znamená vyšší ztrátu výdrže. - - Sway factor - Factor de balanceo de mira - Verwacklungsfaktor - 手ぶれ因数 - 抖动系数 - 抖動因素 - Facteur de tremblement - Fattore di Oscillazione - Czynnik kołysania - Фактор колебания прицела - Fator de Balanço de Mira - Faktor kývání - 손떨림 정도 - - - Influences the amount of weapon sway. Higher means more sway. - Afecta al la estabilidad de la mira. Más alto significa más balanceo - Beeinflusst, wie ruhig man eine Waffe halten kann. Ein höherer Wert bedeutet weniger Stabilisierung. - 武器の手ぶれの量に影響します。値が高いほど、手ぶれが強くなります。 - 影响手持武器的晃动程度,数值越高,抖动的越厉害。 - 影響手持武器晃動程度,數值越高抖動越厲害 - Influe sur l'amplitude du tremblement de l'arme. Une valeur plus élevée signifie plus de tremblement. - Influenza l'aumento di oscillazione dell'arma quando affaticato. Maggiore significa più oscillazione. - Wpływa na poziom kołysania broni. Większa ilość znaczy większe kołysanie. - Влияет на колебания прицела оружия. Чем выше - тем больше. - Influencia a quantidade de balanço da mira da arma. Quanto maior, mais balanço. - Ovlivňuje množství kývání zbraní. Vyšší znamená více kývání. - 손떨림의 정도를 정합니다. 높을 수록 많이 휘적입니다. - - - Rested sway factor - Facteur de balancement au repos - 휴식 시 손떨림 정도 - Fator de balanço de mira em repouso - Verwacklungsfaktor, wenn aufgelegt - Fattore di Oscillazione Appoggiato - 静止時の手ぶれ係数 - Коэффициент колебания прицела в состоянии покоя - - - Influences the amount of weapon sway while weapon is rested. - Influence le degré de balancement de l'arme au repos. - 무기가 아무런 행동도 하지 않는 동안 무기가 흔들리는 정도를 정합니다. - Influencia a quantidade de balanço de mira enquanto a arma está em repouso. - Beeinflusst, wie ruhig man die Waffe hält, während sie aufgelegt ist. - Determina la quantità di oscillazione dell'arma quando questa è appoggiata. - 静止している時の武器の手ぶれの量に影響します。 - Влияет на величину колебания прицела оружия в состоянии покоя. - - - Deployed sway factor - Facteur de balancement déployé - 거치 시 손떨림 정도 - Fator de balanço de mira em posição de tiro - Verwacklungsfaktor, wenn Zweibein aufgestellt ist. - Fattore di Oscillazione su Bipode - 展開時の手ぶれ係数 - Коэффициент колебания прицела при развертывании - - - Influences the amount of weapon sway while weapon is deployed. - Influence le degré de balancement de l'arme déployée. - 무기를 거치하는 동안 무기를 흔드는 정도를 정합니다. - Influencia a quantidade de balanço de mira enquanto a arma está em posição de tiro. - Beeinflusst, wie ruhig man die Waffen hält, während das Zweibein aufgestellt ist. - Determina la quantità di oscillazione dell'arma quando questa è stabilizzata usando il bipode. - 武器の展開(Cキー)時の武器の手ぶれの量に影響します。 - Влияет на величину колебания прицела оружия при его развертывании. - Enabled Activada diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index cf1f4b6fe0..c5b9c55eb2 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -499,10 +499,24 @@ GVAR(reloadMutex_lastMagazines) = []; // Start the sway loop ////////////////////////////////////////////////// ["CBA_settingsInitialized", { + ["multiplier", { + switch (true) do { + case (isWeaponRested ACE_player): { + GVAR(swayFactor) * GVAR(restedSwayFactor) + }; + case (isWeaponDeployed ACE_player): { + GVAR(swayFactor) * GVAR(deployedSwayFactor) + }; + default { + GVAR(swayFactor) + }; + }; + }, QUOTE(ADDON)] call FUNC(addSwayFactor); + [{ // frame after settingsInitialized to ensure all other addons have added their factors - if ((GVAR(swayFactorsBaseline) + GVAR(swayFactorsMultiplier)) isNotEqualTo []) then { - call FUNC(swayLoop) + if (GVAR(enableSway)) then { + call FUNC(swayLoop); }; // check for pre-3.16 sway factors being added if (!isNil {missionNamespace getVariable "ACE_setCustomAimCoef"}) then { diff --git a/addons/common/functions/fnc_swayLoop.sqf b/addons/common/functions/fnc_swayLoop.sqf index 069d908d1a..adbc32053f 100644 --- a/addons/common/functions/fnc_swayLoop.sqf +++ b/addons/common/functions/fnc_swayLoop.sqf @@ -17,12 +17,12 @@ private _baseline = 1; if (GVAR(swayFactorsBaseline) isNotEqualTo []) then { - _baseline = 1 max ([missionNamespace, "ACE_setCustomAimCoef_baseline", "max"] call EFUNC(common,arithmeticGetResult)); + _baseline = 1 max ([missionNamespace, "ACE_setCustomAimCoef_baseline", "max"] call FUNC(arithmeticGetResult)); }; private _multiplier = 1; if (GVAR(swayFactorsMultiplier) isNotEqualTo []) then { - _multiplier = [missionNamespace, "ACE_setCustomAimCoef_multiplier", "product"] call EFUNC(common,arithmeticGetResult); + _multiplier = [missionNamespace, "ACE_setCustomAimCoef_multiplier", "product"] call FUNC(arithmeticGetResult); }; ACE_player setCustomAimCoef (_baseline * _multiplier); diff --git a/addons/common/initSettings.inc.sqf b/addons/common/initSettings.inc.sqf index 41fcdafecd..a784ac64a9 100644 --- a/addons/common/initSettings.inc.sqf +++ b/addons/common/initSettings.inc.sqf @@ -1,5 +1,6 @@ private _category = format ["ACE %1", LLSTRING(DisplayName)]; -private _categoryColors = [_category, format ["| %1 |", LLSTRING(subcategory_colors)]]; +private _categoryColors = [_category, LSTRING(subcategory_colors)]; +private _categorySway = [_category, LSTRING(subcategory_sway)]; [ QGVAR(checkPBOsAction), @@ -87,7 +88,7 @@ private _categoryColors = [_category, format ["| %1 |", LLSTRING(subcategory_col QGVAR(epilepsyFriendlyMode), "CHECKBOX", [LSTRING(EpilepsyFriendlyMode), LSTRING(EpilepsyFriendlyModeTooltip)], - format ["ACE %1", localize LSTRING(DisplayName)], + _category, false, 2 ] call CBA_fnc_addSetting; @@ -96,7 +97,45 @@ private _categoryColors = [_category, format ["| %1 |", LLSTRING(subcategory_col QGVAR(progressBarInfo), "LIST", [LSTRING(progressBarInfoName), LSTRING(progressBarInfoDesc)], - format ["ACE %1", localize LSTRING(DisplayName)], + _category, [[0, 1, 2], [LSTRING(None), LSTRING(progressBarInfoPercentage), LSTRING(progressBarInfoTime)], 2], 0 ] call CBA_fnc_addSetting; + +[ + QGVAR(enableSway), + "CHECKBOX", + [LSTRING(enableSway), LSTRING(enableSway_Description)], + _categorySway, + true, + 1, + {}, + true +] call CBA_fnc_addSetting; + +[ + QGVAR(swayFactor), + "SLIDER", + [LSTRING(SwayFactor), LSTRING(SwayFactor_Description)], + _categorySway, + [0, 5, 1, 2], + 1 +] call CBA_fnc_addSetting; + +[ + QGVAR(restedSwayFactor), + "SLIDER", + [LSTRING(RestedSwayFactor), LSTRING(RestedSwayFactor_Description)], + _categorySway, + [0, 5, 1, 2], + 1 +] call CBA_fnc_addSetting; + +[ + QGVAR(deployedSwayFactor), + "SLIDER", + [LSTRING(DeployedSwayFactor), LSTRING(DeployedSwayFactor_Description)], + _categorySway, + [0, 5, 1, 2], + 1 +] call CBA_fnc_addSetting; diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index 64d5fc61f3..c243f0eb6b 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -1828,5 +1828,84 @@ 下方 Alt + + Sway + + + Enable ACE Sway + + + Enables weapon sway influenced by sway factors, such as stance, fatigue and medical condition.\nDisabling this setting will defer sway to vanilla or other mods. + + + Sway factor + Factor de balanceo de mira + Verwacklungsfaktor + 手ぶれ因数 + 抖动系数 + 抖動因素 + Facteur de tremblement + Fattore di Oscillazione + Czynnik kołysania + Фактор колебания прицела + Fator de Balanço de Mira + Faktor kývání + 손떨림 정도 + + + Influences the amount of weapon sway. Higher means more sway. + Afecta al la estabilidad de la mira. Más alto significa más balanceo + Beeinflusst, wie ruhig man eine Waffe halten kann. Ein höherer Wert bedeutet weniger Stabilisierung. + 武器の手ぶれの量に影響します。値が高いほど、手ぶれが強くなります。 + 影响手持武器的晃动程度,数值越高,抖动的越厉害。 + 影響手持武器晃動程度,數值越高抖動越厲害 + Influe sur l'amplitude du tremblement de l'arme. Une valeur plus élevée signifie plus de tremblement. + Influenza l'aumento di oscillazione dell'arma quando affaticato. Maggiore significa più oscillazione. + Wpływa na poziom kołysania broni. Większa ilość znaczy większe kołysanie. + Влияет на колебания прицела оружия. Чем выше - тем больше. + Influencia a quantidade de balanço da mira da arma. Quanto maior, mais balanço. + Ovlivňuje množství kývání zbraní. Vyšší znamená více kývání. + 손떨림의 정도를 정합니다. 높을 수록 많이 휘적입니다. + + + Rested sway factor + Facteur de balancement au repos + 휴식 시 손떨림 정도 + Fator de balanço de mira em repouso + Verwacklungsfaktor, wenn aufgelegt + Fattore di Oscillazione Appoggiato + 静止時の手ぶれ係数 + Коэффициент колебания прицела в состоянии покоя + + + Influences the amount of weapon sway while weapon is rested. + Influence le degré de balancement de l'arme au repos. + 무기가 아무런 행동도 하지 않는 동안 무기가 흔들리는 정도를 정합니다. + Influencia a quantidade de balanço de mira enquanto a arma está em repouso. + Beeinflusst, wie ruhig man die Waffe hält, während sie aufgelegt ist. + Determina la quantità di oscillazione dell'arma quando questa è appoggiata. + 静止している時の武器の手ぶれの量に影響します。 + Влияет на величину колебания прицела оружия в состоянии покоя. + + + Deployed sway factor + Facteur de balancement déployé + 거치 시 손떨림 정도 + Fator de balanço de mira em posição de tiro + Verwacklungsfaktor, wenn Zweibein aufgestellt ist. + Fattore di Oscillazione su Bipode + 展開時の手ぶれ係数 + Коэффициент колебания прицела при развертывании + + + Influences the amount of weapon sway while weapon is deployed. + Influence le degré de balancement de l'arme déployée. + 무기를 거치하는 동안 무기를 흔드는 정도를 정합니다. + Influencia a quantidade de balanço de mira enquanto a arma está em posição de tiro. + Beeinflusst, wie ruhig man die Waffen hält, während das Zweibein aufgestellt ist. + Determina la quantità di oscillazione dell'arma quando questa è stabilizzata usando il bipode. + 武器の展開(Cキー)時の武器の手ぶれの量に影響します。 + Влияет на величину колебания прицела оружия при его развертывании. + From 31217ae5d0b3d865787487d989118fcde8db7a2c Mon Sep 17 00:00:00 2001 From: Dart <59131299+DartRuffian@users.noreply.github.com> Date: Mon, 25 Mar 2024 11:08:06 -0500 Subject: [PATCH 028/132] Fortify - Add onDeployStop event for cancelling before confirming (#9854) * onDeployStop event * Updated wiki with new event * Fixed params * Revert "onDeployStop event" This reverts commit c3dae82915f7d36754096feaf5ae2249688742e7. * Uses deployCanceled * Re-added fortify stop event * Update fnc_deployObject.sqf --------- Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> --- addons/fortify/functions/fnc_deployObject.sqf | 1 + docs/wiki/framework/fortify-framework.md | 1 + 2 files changed, 2 insertions(+) diff --git a/addons/fortify/functions/fnc_deployObject.sqf b/addons/fortify/functions/fnc_deployObject.sqf index 4895b261bc..f7e9e6dbad 100644 --- a/addons/fortify/functions/fnc_deployObject.sqf +++ b/addons/fortify/functions/fnc_deployObject.sqf @@ -70,6 +70,7 @@ private _mouseClickID = [_player, "DefaultAction", {GVAR(isPlacing) == PLACE_WAI [_unit, _object] call FUNC(deployConfirm); } else { TRACE_1("deleting object",_object); + [QGVAR(onDeployStop), [_unit, _object, _cost]] call CBA_fnc_localEvent; deleteVehicle _object; }; }; diff --git a/docs/wiki/framework/fortify-framework.md b/docs/wiki/framework/fortify-framework.md index 14d48532b5..27bfe7d613 100644 --- a/docs/wiki/framework/fortify-framework.md +++ b/docs/wiki/framework/fortify-framework.md @@ -119,5 +119,6 @@ Event Name | Passed Parameter(s) | Locality | Description `acex_fortify_objectPlaced` | [player, side, objectPlaced] | Global | Fortify object placed `acex_fortify_objectDeleted` | [player, side, objectDeleted] | Global | Fortify object deleted `acex_fortify_onDeployStart` | [player, object, cost] | Local | Player starts placing object +`ace_fortify_onDeployStop` | [player, object, cost] | Local | Player stops placing object. Raised only if stopped before trying to place (= before progress bar appears). If it's during progress bar, only `ace_fortify_deployCanceled` is raised. `ace_fortify_deployFinished` | [[player, side, configName, posASL, vectorDir, vectorUp, cost], elapsedTime, totalTime, errorCode] | Local | Player successfully finishes building object `ace_fortify_deployCanceled` | [[player, side, configName, posASL, vectorDir, vectorUp, cost], elapsedTime, totalTime, errorCode] | Local | Player cancels building object From 5ca81b7ef357e0ae471ab4998c373f6e3e1ee996 Mon Sep 17 00:00:00 2001 From: ZluskeN Date: Tue, 26 Mar 2024 13:50:04 +0100 Subject: [PATCH 029/132] Interaction - Make magazine passing animation optional (#9875) * Update fnc_passMagazine.sqf * Update fnc_passMagazine.sqf * Update fnc_passMagazine.sqf * Update addons/interaction/functions/fnc_passMagazine.sqf Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> --------- Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> --- .../interaction/functions/fnc_passMagazine.sqf | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/addons/interaction/functions/fnc_passMagazine.sqf b/addons/interaction/functions/fnc_passMagazine.sqf index 09513b4762..8750078502 100644 --- a/addons/interaction/functions/fnc_passMagazine.sqf +++ b/addons/interaction/functions/fnc_passMagazine.sqf @@ -7,6 +7,7 @@ * 0: Unit that passes the magazine * 1: Unit to pass the magazine to * 2: Weapon classname + * 3: Play passing animation (default: true) * * Return Value: * None @@ -16,7 +17,7 @@ * * Public: No */ -params ["_player", "_target", "_weapon"]; +params ["_player", "_target", "_weapon", ["_animate", true, [true]]]; private _compatibleMags = [_weapon] call CBA_fnc_compatibleMagazines; private _filteredMags = magazinesAmmoFull _player select { @@ -35,18 +36,12 @@ private _magToPassIndex = 0; }; } foreach _filteredMags; -//remove all magazines and add them again, except the one to be passed -//needed because of missing commands, see http://feedback.arma3.com/view.php?id=12782 +//remove the magazine from _player and add it to _target _magToPass params ["_magToPassClassName", "_magToPassAmmoCount"]; -_player removeMagazines _magToPassClassName; -{ - _x params ["_className", "_ammoCount"]; - if ((_className == _magToPassClassName) && (_forEachIndex != _magToPassIndex)) then { - _player addMagazine [_className, _ammoCount]; - }; -} foreach _filteredMags; +// Exit if failed to remove specific magazine +if !([_player, _magToPassClassName, _magToPassAmmoCount] call EFUNC(common,removeSpecificMagazine)) exitWith {}; -[_player, "PutDown"] call EFUNC(common,doGesture); +if (_animate) then {[_player, "PutDown"] call EFUNC(common,doGesture)}; _target addMagazine [_magToPassClassName, _magToPassAmmoCount]; From a8ed533004ba4df2b8a79291509a8cd7b6fd898b Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Tue, 26 Mar 2024 13:50:21 +0100 Subject: [PATCH 030/132] Dragging - Minor code cleanup (#9859) * Dragging minor code cleanup * Update fnc_startCarryPFH.sqf * Revert UAV changes --- addons/dragging/functions/fnc_carryObject.sqf | 3 -- .../dragging/functions/fnc_carryObjectPFH.sqf | 38 ++++++++++++++----- addons/dragging/functions/fnc_dragObject.sqf | 6 +-- .../dragging/functions/fnc_dragObjectPFH.sqf | 23 ++++++----- addons/dragging/functions/fnc_dropObject.sqf | 6 ++- .../functions/fnc_dropObject_carry.sqf | 2 + .../functions/fnc_handleScrollWheel.sqf | 2 +- addons/dragging/functions/fnc_resumeCarry.sqf | 2 +- .../functions/fnc_startCarryLocal.sqf | 2 +- .../dragging/functions/fnc_startCarryPFH.sqf | 10 ++--- .../dragging/functions/fnc_startDragLocal.sqf | 2 +- .../dragging/functions/fnc_startDragPFH.sqf | 6 +-- addons/dragging/initSettings.inc.sqf | 4 +- 13 files changed, 65 insertions(+), 41 deletions(-) diff --git a/addons/dragging/functions/fnc_carryObject.sqf b/addons/dragging/functions/fnc_carryObject.sqf index dfff18a3c0..bf49282b9e 100644 --- a/addons/dragging/functions/fnc_carryObject.sqf +++ b/addons/dragging/functions/fnc_carryObject.sqf @@ -68,6 +68,3 @@ if (_UAVCrew isNotEqualTo []) then { // Check everything [FUNC(carryObjectPFH), 0.5, [_unit, _target, CBA_missionTime]] call CBA_fnc_addPerFrameHandler; - -// Reset current dragging height -GVAR(currentHeightChange) = 0; diff --git a/addons/dragging/functions/fnc_carryObjectPFH.sqf b/addons/dragging/functions/fnc_carryObjectPFH.sqf index b73ff97261..fcd0f05376 100644 --- a/addons/dragging/functions/fnc_carryObjectPFH.sqf +++ b/addons/dragging/functions/fnc_carryObjectPFH.sqf @@ -35,15 +35,35 @@ if !(_unit getVariable [QGVAR(isCarrying), false]) exitWith { _idPFH call CBA_fnc_removePerFrameHandler; }; -// Drop if the crate is destroyed OR target moved away from carrier (weapon disassembled) OR carrier starts limping -if !(alive _target && {_unit distance _target <= 10} && {_unit getHitPointDamage "HitLegs" < 0.5}) exitWith { - TRACE_2("dead/distance",_unit,_target); +// Drop if the target is destroyed +if (!alive _target) exitWith { + TRACE_2("dead",_unit,_target); - if ((_unit distance _target > 10) && {(CBA_missionTime - _startTime) < 1}) exitWith { - // attachTo seems to have some kind of network delay and target can return an odd position during the first few frames, - // So wait a full second to exit if out of range (this is critical as we would otherwise detach and set it's pos to weird pos) - TRACE_3("ignoring bad distance at start",_unit distance _target,_startTime,CBA_missionTime); - }; + [_unit, _target] call FUNC(dropObject_carry); + + _unit setVariable [QGVAR(hint), nil]; + call EFUNC(interaction,hideMouseHint); + + _idPFH call CBA_fnc_removePerFrameHandler; +}; + +// Drop if the target moved away from carrier (e.g. weapon disassembled) +// attachTo seems to have some kind of network delay and target can return an odd position during the first few frames, +// So wait a full second to exit if out of range (this is critical as we would otherwise detach and set it's pos to weird pos) +if (_unit distance _target > 10 && {(CBA_missionTime - _startTime) >= 1}) exitWith { + TRACE_2("distance",_unit,_target); + + [_unit, _target] call FUNC(dropObject_carry); + + _unit setVariable [QGVAR(hint), nil]; + call EFUNC(interaction,hideMouseHint); + + _idPFH call CBA_fnc_removePerFrameHandler; +}; + +// Drop if the carrier starts limping +if (_unit getHitPointDamage "HitLegs" >= 0.5) exitWith { + TRACE_2("limping",_unit,_target); [_unit, _target] call FUNC(dropObject_carry); @@ -54,7 +74,7 @@ if !(alive _target && {_unit distance _target <= 10} && {_unit getHitPointDamage }; // Drop static if crew is in it (UAV crew deletion may take a few frames) -if (_target isKindOf "StaticWeapon" && {(crew _target) isNotEqualTo []} && {!(_target getVariable [QGVAR(isUAV), false])}) then { +if (_target isKindOf "StaticWeapon" && {!(_target getVariable [QGVAR(isUAV), false])} && {(crew _target) isNotEqualTo []}) exitWith { TRACE_2("static weapon crewed",_unit,_target); [_unit, _target] call FUNC(dropObject_carry); diff --git a/addons/dragging/functions/fnc_dragObject.sqf b/addons/dragging/functions/fnc_dragObject.sqf index ddad0ad7bb..a0cbfd2528 100644 --- a/addons/dragging/functions/fnc_dragObject.sqf +++ b/addons/dragging/functions/fnc_dragObject.sqf @@ -57,7 +57,7 @@ GVAR(releaseActionID) = [0xF1, [false, false, false], { ["", LLSTRING(Drop)] call EFUNC(interaction,showMouseHint); // Block firing -if !(GVAR(dragAndFire)) then { +if (!GVAR(dragAndFire)) then { _unit setVariable [QGVAR(blockFire), [ _unit, "DefaultAction", {true}, @@ -70,6 +70,7 @@ if !(GVAR(dragAndFire)) then { // Prevent UAVs from firing private _UAVCrew = _target call EFUNC(common,getVehicleUAVCrew); + if (_UAVCrew isNotEqualTo []) then { { _target deleteVehicleCrew _x; @@ -81,8 +82,5 @@ if (_UAVCrew isNotEqualTo []) then { // Check everything [FUNC(dragObjectPFH), 0.5, [_unit, _target, CBA_missionTime]] call CBA_fnc_addPerFrameHandler; -// Reset current dragging height. -GVAR(currentHeightChange) = 0; - // Fixes not being able to move when in combat pace [_unit, "forceWalk", QUOTE(ADDON), true] call EFUNC(common,statusEffect_set); diff --git a/addons/dragging/functions/fnc_dragObjectPFH.sqf b/addons/dragging/functions/fnc_dragObjectPFH.sqf index a2895f4216..7c3a6be307 100644 --- a/addons/dragging/functions/fnc_dragObjectPFH.sqf +++ b/addons/dragging/functions/fnc_dragObjectPFH.sqf @@ -31,15 +31,20 @@ if !(_unit getVariable [QGVAR(isDragging), false]) exitWith { _idPFH call CBA_fnc_removePerFrameHandler; }; -// Drop if the crate is destroyed OR (target moved away from carrier (weapon disasembled)) -if (!alive _target || {_unit distance _target > 10}) then { - TRACE_2("dead/distance",_unit,_target); +// Drop if the target is destroyed +if (!alive _target) exitWith { + TRACE_2("dead",_unit,_target); - if ((_unit distance _target > 10) && {(CBA_missionTime - _startTime) < 1}) exitWith { - // attachTo seems to have some kind of network delay and target can return an odd position during the first few frames, - // So wait a full second to exit if out of range (this is critical as we would otherwise detach and set it's pos to weird pos) - TRACE_3("ignoring bad distance at start",_unit distance _target,_startTime,CBA_missionTime); - }; + [_unit, _target] call FUNC(dropObject); + + _idPFH call CBA_fnc_removePerFrameHandler; +}; + +// Drop if the target moved away from carrier (e.g. weapon disassembled) +// attachTo seems to have some kind of network delay and target can return an odd position during the first few frames, +// So wait a full second to exit if out of range (this is critical as we would otherwise detach and set it's pos to weird pos) +if (_unit distance _target > 10 && {(CBA_missionTime - _startTime) >= 1}) exitWith { + TRACE_2("distance",_unit,_target); [_unit, _target] call FUNC(dropObject); @@ -47,7 +52,7 @@ if (!alive _target || {_unit distance _target > 10}) then { }; // Drop static if crew is in it (UAV crew deletion may take a few frames) -if (_target isKindOf "StaticWeapon" && {(crew _target) isNotEqualTo []} && {!(_target getVariable [QGVAR(isUAV), false])}) then { +if (_target isKindOf "StaticWeapon" && {!(_target getVariable [QGVAR(isUAV), false])} && {(crew _target) isNotEqualTo []}) exitWith { TRACE_2("static weapon crewed",_unit,_target); [_unit, _target] call FUNC(dropObject); diff --git a/addons/dragging/functions/fnc_dropObject.sqf b/addons/dragging/functions/fnc_dropObject.sqf index debe757101..10cfda1703 100644 --- a/addons/dragging/functions/fnc_dropObject.sqf +++ b/addons/dragging/functions/fnc_dropObject.sqf @@ -26,7 +26,7 @@ if (!isNil QGVAR(releaseActionID)) then { }; // Stop blocking -if !(GVAR(dragAndFire)) then { +if (!GVAR(dragAndFire)) then { [_unit, "DefaultAction", _unit getVariable [QGVAR(blockFire), -1]] call EFUNC(common,removeActionEventHandler); }; @@ -82,7 +82,9 @@ if (_unit getVariable ["ACE_isUnconscious", false]) then { // Recreate UAV crew (add a frame delay or this may cause the vehicle to be moved to [0,0,0]) if (_target getVariable [QGVAR(isUAV), false]) then { - [{ + _target setVariable [QGVAR(isUAV), nil, true]; + + [{ params ["_target"]; if (!alive _target) exitWith {}; TRACE_2("restoring uav crew",_target,getPosASL _target); diff --git a/addons/dragging/functions/fnc_dropObject_carry.sqf b/addons/dragging/functions/fnc_dropObject_carry.sqf index f3f15fac14..acfe7ae8f4 100644 --- a/addons/dragging/functions/fnc_dropObject_carry.sqf +++ b/addons/dragging/functions/fnc_dropObject_carry.sqf @@ -88,6 +88,8 @@ if !(_target isKindOf "CAManBase") then { // Recreate UAV crew (add a frame delay or this may cause the vehicle to be moved to [0,0,0]) if (_target getVariable [QGVAR(isUAV), false]) then { + _target setVariable [QGVAR(isUAV), nil, true]; + [{ params ["_target"]; if (!alive _target) exitWith {}; diff --git a/addons/dragging/functions/fnc_handleScrollWheel.sqf b/addons/dragging/functions/fnc_handleScrollWheel.sqf index 8b522e34bc..c7641a8ffa 100644 --- a/addons/dragging/functions/fnc_handleScrollWheel.sqf +++ b/addons/dragging/functions/fnc_handleScrollWheel.sqf @@ -27,7 +27,7 @@ private _carriedItem = _unit getVariable [QGVAR(carriedObject), objNull]; // Disabled for persons if (_carriedItem isKindOf "CAManBase") exitWith {false}; -if !(CBA_events_control) then { +if (!CBA_events_control) then { // Raise/lower // Move carried item 15 cm per scroll interval _scrollAmount = _scrollAmount * 0.15; diff --git a/addons/dragging/functions/fnc_resumeCarry.sqf b/addons/dragging/functions/fnc_resumeCarry.sqf index 233d60e298..e7cdeb5dc6 100644 --- a/addons/dragging/functions/fnc_resumeCarry.sqf +++ b/addons/dragging/functions/fnc_resumeCarry.sqf @@ -17,7 +17,7 @@ params ["_unit"]; -// If not dragging, don't do anything +// If not carrying, don't do anything if !(_unit getVariable [QGVAR(isCarrying), false]) exitWith {}; // If action is already present, don't add it again diff --git a/addons/dragging/functions/fnc_startCarryLocal.sqf b/addons/dragging/functions/fnc_startCarryLocal.sqf index 2fc0af5e24..f4fec17c74 100644 --- a/addons/dragging/functions/fnc_startCarryLocal.sqf +++ b/addons/dragging/functions/fnc_startCarryLocal.sqf @@ -49,7 +49,7 @@ if (_target isKindOf "CAManBase") then { _primaryWeapon = "ACE_FakePrimaryWeapon"; }; - // Select primary, otherwise the drag animation actions don't work + // Select primary, otherwise the carry animation actions don't work _unit selectWeapon _primaryWeapon; // Move a bit closer and adjust direction when trying to pick up a person diff --git a/addons/dragging/functions/fnc_startCarryPFH.sqf b/addons/dragging/functions/fnc_startCarryPFH.sqf index e8b864f260..f928ef942a 100644 --- a/addons/dragging/functions/fnc_startCarryPFH.sqf +++ b/addons/dragging/functions/fnc_startCarryPFH.sqf @@ -32,9 +32,9 @@ if !(_unit getVariable [QGVAR(isCarrying), false]) exitWith { _idPFH call CBA_fnc_removePerFrameHandler; }; -// Same as dragObjectPFH, checks if object is deleted or dead OR (target moved away from carrier (weapon disasembled)) -if (!alive _target || {_unit distance _target > 10}) then { - TRACE_4("dead/distance",_unit,_target,_timeOut,CBA_missionTime); +// Drop if the target is destroyed, if the target moved away from carrier (e.g. weapon disassembled) or if the carrier starts limping +if !(alive _target && {_unit distance _target <= 10} && {_unit getHitPointDamage "HitLegs" < 0.5}) exitWith { + TRACE_4("dead/distance/limping",_unit,_target,_timeOut,CBA_missionTime); [_unit, _target] call FUNC(dropObject_carry); _idPFH call CBA_fnc_removePerFrameHandler; @@ -42,7 +42,7 @@ if (!alive _target || {_unit distance _target > 10}) then { // Handle persons vs. objects if (_target isKindOf "CAManBase") then { - // Drop if in timeout + // Carry person after timeout (animation takes a long time to finish) if (CBA_missionTime > _timeOut) exitWith { TRACE_4("Start carry person",_unit,_target,_timeOut,CBA_missionTime); [_unit, _target] call FUNC(carryObject); @@ -50,7 +50,7 @@ if (_target isKindOf "CAManBase") then { _idPFH call CBA_fnc_removePerFrameHandler; }; } else { - // Drop if in timeout + // Timeout: Drop target. CBA_missionTime, because anim length is linked to ingame time if (CBA_missionTime > _timeOut) exitWith { TRACE_4("timeout",_unit,_target,_timeOut,CBA_missionTime); _idPFH call CBA_fnc_removePerFrameHandler; diff --git a/addons/dragging/functions/fnc_startDragLocal.sqf b/addons/dragging/functions/fnc_startDragLocal.sqf index fe5f29fa61..d11b606819 100644 --- a/addons/dragging/functions/fnc_startDragLocal.sqf +++ b/addons/dragging/functions/fnc_startDragLocal.sqf @@ -40,7 +40,7 @@ if (_weight > GETMVAR(ACE_maxWeightDrag,1E11)) exitWith { private _primaryWeapon = primaryWeapon _unit; // Add a primary weapon if the unit has none -if !(GVAR(dragAndFire)) then { +if (!GVAR(dragAndFire)) then { if (_primaryWeapon == "") then { _unit addWeapon "ACE_FakePrimaryWeapon"; _primaryWeapon = "ACE_FakePrimaryWeapon"; diff --git a/addons/dragging/functions/fnc_startDragPFH.sqf b/addons/dragging/functions/fnc_startDragPFH.sqf index 07dfe2064f..daf887c362 100644 --- a/addons/dragging/functions/fnc_startDragPFH.sqf +++ b/addons/dragging/functions/fnc_startDragPFH.sqf @@ -32,15 +32,15 @@ if !(_unit getVariable [QGVAR(isDragging), false]) exitWith { _idPFH call CBA_fnc_removePerFrameHandler; }; -// Same as dragObjectPFH, checks if object is deleted, dead or target moved away from carrier (e.g. weapon disassembled) -if (!alive _target || {_unit distance _target > 10}) then { +// Drop if the target is destroyed or if the target moved away from carrier (e.g. weapon disassembled) +if (!alive _target || {_unit distance _target > 10}) exitWith { TRACE_4("dead/distance",_unit,_target,_timeOut,CBA_missionTime); [_unit, _target] call FUNC(dropObject); _idPFH call CBA_fnc_removePerFrameHandler; }; -// Timeout: Do nothing, quit. CBA_missionTime, because anim length is linked to ingame time +// Timeout: Drop target. CBA_missionTime, because anim length is linked to ingame time if (CBA_missionTime > _timeOut) exitWith { TRACE_4("timeout",_unit,_target,_timeOut,CBA_missionTime); _idPFH call CBA_fnc_removePerFrameHandler; diff --git a/addons/dragging/initSettings.inc.sqf b/addons/dragging/initSettings.inc.sqf index 039327330d..37feef4cbc 100644 --- a/addons/dragging/initSettings.inc.sqf +++ b/addons/dragging/initSettings.inc.sqf @@ -21,7 +21,7 @@ [LSTRING(allowRunWithLightweight_DisplayName), LSTRING(allowRunWithLightweight_Description)], LLSTRING(SettingsName), true, - true + 1 ] call CBA_fnc_addSetting; [ @@ -30,5 +30,5 @@ [LSTRING(skipContainerWeight_DisplayName), LSTRING(skipContainerWeight_Description)], LLSTRING(SettingsName), false, - true + 1 ] call CBA_fnc_addSetting; From cee187adac9f83c11b807ebd460ac7042381ca2a Mon Sep 17 00:00:00 2001 From: Mike-MF Date: Tue, 26 Mar 2024 12:54:06 +0000 Subject: [PATCH 031/132] General - Convert vehicle to objectParent (#9801) Convert vehicle to objectParent --- addons/advanced_throwing/functions/fnc_canThrow.sqf | 2 +- addons/advanced_throwing/functions/fnc_throw.sqf | 2 +- addons/captives/functions/fnc_handleOnUnconscious.sqf | 2 +- addons/common/functions/fnc_fixLoweredRifleAnimation.sqf | 2 +- addons/common/functions/fnc_getDeathAnim.sqf | 2 +- addons/common/functions/fnc_goKneeling.sqf | 2 +- addons/dragging/functions/fnc_dropObject_carry.sqf | 2 +- addons/explosives/functions/fnc_canDefuse.sqf | 2 +- addons/fastroping/functions/fnc_fastRopeLocalPFH.sqf | 2 +- addons/fastroping/functions/fnc_fastRopeServerPFH.sqf | 2 +- addons/goggles/functions/fnc_applyRainEffect.sqf | 2 +- addons/goggles/functions/fnc_applyRotorWashEffect.sqf | 2 +- addons/medical_ai/functions/fnc_playTreatmentAnim.sqf | 2 +- addons/medical_blood/functions/fnc_handleWoundReceived.sqf | 2 +- addons/medical_blood/functions/fnc_onBleeding.sqf | 2 +- addons/medical_engine/functions/fnc_setUnconsciousAnim.sqf | 4 ++-- addons/medical_feedback/XEH_postInit.sqf | 2 +- addons/nightvision/functions/fnc_onCameraViewChanged.sqf | 2 +- addons/nightvision/functions/fnc_onVisionModeChanged.sqf | 2 +- addons/scopes/functions/fnc_adjustZero.sqf | 2 +- addons/scopes/functions/fnc_canAdjustZero.sqf | 2 +- addons/scopes/functions/fnc_canResetZero.sqf | 2 +- addons/scopes/functions/fnc_resetZero.sqf | 2 +- addons/switchunits/functions/fnc_isValidAi.sqf | 2 +- addons/volume/XEH_postInitClient.sqf | 2 +- addons/zeus/functions/fnc_bi_moduleArsenal.sqf | 2 +- 26 files changed, 27 insertions(+), 27 deletions(-) diff --git a/addons/advanced_throwing/functions/fnc_canThrow.sqf b/addons/advanced_throwing/functions/fnc_canThrow.sqf index 06cf166f88..8b2987eafa 100644 --- a/addons/advanced_throwing/functions/fnc_canThrow.sqf +++ b/addons/advanced_throwing/functions/fnc_canThrow.sqf @@ -19,7 +19,7 @@ params ["_unit"]; if !(_unit getVariable [QGVAR(inHand), false]) exitWith {false}; -if (vehicle _unit != _unit) exitWith { +if (!isNull objectParent _unit) exitWith { private _startPos = eyePos _unit; private _aimLinePos = AGLToASL (positionCameraToWorld [0, 0, 1]); private _intersections = lineIntersectsSurfaces [_startPos, _aimLinePos, _unit, objNull, false]; diff --git a/addons/advanced_throwing/functions/fnc_throw.sqf b/addons/advanced_throwing/functions/fnc_throw.sqf index 0380d3d896..797f18d773 100644 --- a/addons/advanced_throwing/functions/fnc_throw.sqf +++ b/addons/advanced_throwing/functions/fnc_throw.sqf @@ -45,7 +45,7 @@ if (!(_unit getVariable [QGVAR(primed), false])) then { private _newVelocity = (_p1 vectorFromTo _p2) vectorMultiply _velocity; // Adjust for throwing from inside vehicles, where we have a vehicle-based velocity that can't be compensated for by a human - if (vehicle _unit != _unit) then { + if (!isNull objectParent _unit) then { _newVelocity = _newVelocity vectorAdd (velocity (vehicle _unit)); }; diff --git a/addons/captives/functions/fnc_handleOnUnconscious.sqf b/addons/captives/functions/fnc_handleOnUnconscious.sqf index 1527038ce9..a43207fc84 100644 --- a/addons/captives/functions/fnc_handleOnUnconscious.sqf +++ b/addons/captives/functions/fnc_handleOnUnconscious.sqf @@ -27,7 +27,7 @@ if (_isUnconc) then { }; } else { //Woke up: if handcuffed, goto animation - if (_unit getVariable [QGVAR(isHandcuffed), false] && {vehicle _unit == _unit}) then { + if (_unit getVariable [QGVAR(isHandcuffed), false] && {isNull objectParent _unit}) then { [_unit] call EFUNC(common,fixLoweredRifleAnimation); [_unit, "ACE_AmovPercMstpScapWnonDnon", 1] call EFUNC(common,doAnimation); }; diff --git a/addons/common/functions/fnc_fixLoweredRifleAnimation.sqf b/addons/common/functions/fnc_fixLoweredRifleAnimation.sqf index 4e8aa1ec2a..8982d6bbad 100644 --- a/addons/common/functions/fnc_fixLoweredRifleAnimation.sqf +++ b/addons/common/functions/fnc_fixLoweredRifleAnimation.sqf @@ -17,6 +17,6 @@ params ["_unit"]; -if (currentWeapon _unit != "" && {currentWeapon _unit == primaryWeapon _unit} && {weaponLowered _unit} && {stance _unit == "STAND"} && {vehicle _unit == _unit}) then { +if (currentWeapon _unit != "" && {currentWeapon _unit == primaryWeapon _unit} && {weaponLowered _unit} && {stance _unit == "STAND"} && {isNull objectParent _unit}) then { [_unit, "amovpercmstpsraswrfldnon", 0] call FUNC(doAnimation); }; diff --git a/addons/common/functions/fnc_getDeathAnim.sqf b/addons/common/functions/fnc_getDeathAnim.sqf index 4d2e53d3da..18c6c93c07 100644 --- a/addons/common/functions/fnc_getDeathAnim.sqf +++ b/addons/common/functions/fnc_getDeathAnim.sqf @@ -29,7 +29,7 @@ private _unitActionsCfg = configFile >> "CfgMovesBasic" >> "Actions" >> getText TRACE_2("Animation/Action",configName _unitAnimationCfg,configName _unitActionsCfg); -if (vehicle _unit != _unit) then { +if (!isNull objectParent _unit) then { private _interpolateArray = getArray (_unitAnimationCfg >> "interpolateTo"); for "_index" from 0 to (count _interpolateArray - 1) step 2 do { diff --git a/addons/common/functions/fnc_goKneeling.sqf b/addons/common/functions/fnc_goKneeling.sqf index 881fad7669..303a413385 100644 --- a/addons/common/functions/fnc_goKneeling.sqf +++ b/addons/common/functions/fnc_goKneeling.sqf @@ -18,7 +18,7 @@ params ["_unit"]; // Animation changes even inside vehicle post-1.60 -if (stance _unit == "PRONE" || {vehicle _unit != _unit} || {_unit call EFUNC(common,isSwimming)}) exitWith {}; +if (stance _unit == "PRONE" || {!isNull objectParent _unit} || {_unit call EFUNC(common,isSwimming)}) exitWith {}; [ _unit, diff --git a/addons/dragging/functions/fnc_dropObject_carry.sqf b/addons/dragging/functions/fnc_dropObject_carry.sqf index acfe7ae8f4..184b1755c0 100644 --- a/addons/dragging/functions/fnc_dropObject_carry.sqf +++ b/addons/dragging/functions/fnc_dropObject_carry.sqf @@ -44,7 +44,7 @@ if (_tryLoad && {!(_target isKindOf "CAManBase")} && {["ace_cargo"] call EFUNC(c // Fix anim when aborting carrying persons if (_target isKindOf "CAManBase" || {animationState _unit in CARRY_ANIMATIONS}) then { - if (vehicle _unit == _unit && {!(_unit getVariable ["ACE_isUnconscious", false])}) then { + if (isNull objectParent _unit && {!(_unit getVariable ["ACE_isUnconscious", false])}) then { [_unit, "", 2] call EFUNC(common,doAnimation); }; diff --git a/addons/explosives/functions/fnc_canDefuse.sqf b/addons/explosives/functions/fnc_canDefuse.sqf index 0edb98cff5..54bf8477bc 100644 --- a/addons/explosives/functions/fnc_canDefuse.sqf +++ b/addons/explosives/functions/fnc_canDefuse.sqf @@ -24,7 +24,7 @@ if (isNull _explosive) exitWith { deleteVehicle _target; false }; -if (vehicle _unit != _unit || {(_unit call EFUNC(common,uniqueItems)) findAny GVAR(defusalKits) == -1}) exitWith {false}; +if (!isNull objectParent _unit || {(_unit call EFUNC(common,uniqueItems)) findAny GVAR(defusalKits) == -1}) exitWith {false}; if (GVAR(RequireSpecialist) && {!([_unit] call EFUNC(Common,isEOD))}) exitWith {false}; diff --git a/addons/fastroping/functions/fnc_fastRopeLocalPFH.sqf b/addons/fastroping/functions/fnc_fastRopeLocalPFH.sqf index 92d23715b0..b1fec908a5 100644 --- a/addons/fastroping/functions/fnc_fastRopeLocalPFH.sqf +++ b/addons/fastroping/functions/fnc_fastRopeLocalPFH.sqf @@ -20,7 +20,7 @@ _arguments params ["_unit", "", "_rope", "", "_timeToPlayRopeSound"]; _rope params ["", "", "", "_dummy", "_hook"]; //Wait until the unit is actually outside of the helicopter -if (vehicle _unit != _unit) exitWith {}; +if (!isNull objectParent _unit) exitWith {}; // dummy lost hook if (isNull _hook) exitWith { diff --git a/addons/fastroping/functions/fnc_fastRopeServerPFH.sqf b/addons/fastroping/functions/fnc_fastRopeServerPFH.sqf index c3b7fe1ea4..716c0ab43e 100644 --- a/addons/fastroping/functions/fnc_fastRopeServerPFH.sqf +++ b/addons/fastroping/functions/fnc_fastRopeServerPFH.sqf @@ -20,7 +20,7 @@ _arguments params ["_unit", "_vehicle", "_rope", "_ropeIndex", "_hasBeenAttached _rope params ["_attachmentPoint", "_ropeTop", "_ropeBottom", "_dummy", "_hook"]; //Wait until the unit is actually outside of the helicopter -if (vehicle _unit != _unit) exitWith {}; +if (!isNull objectParent _unit) exitWith {}; //Prevent teleport if hook has been deleted due to rope cut if (isNull _hook) exitWith { diff --git a/addons/goggles/functions/fnc_applyRainEffect.sqf b/addons/goggles/functions/fnc_applyRainEffect.sqf index 3332db536a..0058209acd 100644 --- a/addons/goggles/functions/fnc_applyRainEffect.sqf +++ b/addons/goggles/functions/fnc_applyRainEffect.sqf @@ -22,7 +22,7 @@ if (!alive _unit) exitWith {}; private _fnc_underCover = { params ["_unit"]; - if (vehicle _unit != _unit && {!isTurnedOut _unit}) exitWith {true}; + if (!isNull objectParent _unit && {!isTurnedOut _unit}) exitWith {true}; // looking up and no roof over head private _position = eyePos _unit; diff --git a/addons/goggles/functions/fnc_applyRotorWashEffect.sqf b/addons/goggles/functions/fnc_applyRotorWashEffect.sqf index 3513eb191a..85b7e60934 100644 --- a/addons/goggles/functions/fnc_applyRotorWashEffect.sqf +++ b/addons/goggles/functions/fnc_applyRotorWashEffect.sqf @@ -23,7 +23,7 @@ if (!alive _unit) exitWith {}; GVAR(FrameEvent) set [0, !(GVAR(FrameEvent) select 0)]; if (GVAR(FrameEvent) select 0) exitWith { - if (vehicle _unit != _unit && {!isTurnedOut _unit}) exitWith { + if (!isNull objectParent _unit && {!isTurnedOut _unit}) exitWith { (GVAR(FrameEvent) select 1) set [0, false]; }; diff --git a/addons/medical_ai/functions/fnc_playTreatmentAnim.sqf b/addons/medical_ai/functions/fnc_playTreatmentAnim.sqf index f412a718d8..b8e77aab43 100644 --- a/addons/medical_ai/functions/fnc_playTreatmentAnim.sqf +++ b/addons/medical_ai/functions/fnc_playTreatmentAnim.sqf @@ -19,7 +19,7 @@ params ["_unit", "_actionName", "_isSelfTreatment"]; TRACE_3("playTreatmentAnim",_unit,_actionName,_isSelfTreatment); -if (vehicle _unit != _unit) exitWith {}; +if (!isNull objectParent _unit) exitWith {}; private _configProperty = "animationMedic"; if (_isSelfTreatment) then { diff --git a/addons/medical_blood/functions/fnc_handleWoundReceived.sqf b/addons/medical_blood/functions/fnc_handleWoundReceived.sqf index 8dfc9c650b..8b46233af2 100644 --- a/addons/medical_blood/functions/fnc_handleWoundReceived.sqf +++ b/addons/medical_blood/functions/fnc_handleWoundReceived.sqf @@ -28,7 +28,7 @@ if (_damageType in GVAR(noBloodDamageTypes)) exitWith {}; if (GVAR(enabledFor) == BLOOD_ONLY_PLAYERS && {!isPlayer _unit && {_unit != ACE_player}}) exitWith {}; // Don't bleed on the ground if in a vehicle -if (vehicle _unit != _unit && {!(vehicle _unit isKindOf "StaticWeapon")}) exitWith {}; +if (!isNull objectParent _unit && {!(vehicle _unit isKindOf "StaticWeapon")}) exitWith {}; private _bulletDir = if (isNull _shooter) then { random 360 // Cannot calculate the direction properly, pick a random direction diff --git a/addons/medical_blood/functions/fnc_onBleeding.sqf b/addons/medical_blood/functions/fnc_onBleeding.sqf index 63ceb3bd29..02ddd93fd0 100644 --- a/addons/medical_blood/functions/fnc_onBleeding.sqf +++ b/addons/medical_blood/functions/fnc_onBleeding.sqf @@ -22,7 +22,7 @@ params ["_unit"]; if !(_unit call FUNC(isBleeding)) exitWith {}; // Don't bleed on the ground if in a vehicle -if (vehicle _unit != _unit && {!(vehicle _unit isKindOf "StaticWeapon")}) exitWith {}; +if (!isNull objectParent _unit && {!(vehicle _unit isKindOf "StaticWeapon")}) exitWith {}; if (CBA_missionTime > (_unit getVariable [QGVAR(nextTime), -10])) then { private _bloodLoss = (if (GVAR(useAceMedical)) then {GET_BLOOD_LOSS(_unit) * 2.5} else {getDammage _unit * 2}) min 6; diff --git a/addons/medical_engine/functions/fnc_setUnconsciousAnim.sqf b/addons/medical_engine/functions/fnc_setUnconsciousAnim.sqf index 531f5d4062..4ed63253c7 100644 --- a/addons/medical_engine/functions/fnc_setUnconsciousAnim.sqf +++ b/addons/medical_engine/functions/fnc_setUnconsciousAnim.sqf @@ -33,14 +33,14 @@ if (_isUnconscious) then { }; // set animation inside vehicles - if (vehicle _unit != _unit) then { + if (!isNull objectParent _unit) then { private _unconAnim = _unit call EFUNC(common,getDeathAnim); TRACE_2("inVehicle - playing death anim",_unit,_unconAnim); [_unit, _unconAnim] call EFUNC(common,doAnimation); }; } else { // reset animation inside vehicles - if (vehicle _unit != _unit) then { + if (!isNull objectParent _unit) then { private _awakeAnim = _unit call EFUNC(common,getAwakeAnim); TRACE_2("inVehicle - playing awake anim",_unit,_awakeAnim); [_unit, _awakeAnim, 2] call EFUNC(common,doAnimation); diff --git a/addons/medical_feedback/XEH_postInit.sqf b/addons/medical_feedback/XEH_postInit.sqf index 96d15dbf21..fbbf57cb65 100644 --- a/addons/medical_feedback/XEH_postInit.sqf +++ b/addons/medical_feedback/XEH_postInit.sqf @@ -104,7 +104,7 @@ GVAR(bloodTickCounter) = 0; if (ACE_player distance _unit > _distance) exitWith {}; - if (vehicle _unit == _unit) then { + if (isNull objectParent _unit) then { // say3D waits for the previous sound to finish, so use a dummy instead private _dummy = "#dynamicsound" createVehicleLocal [0, 0, 0]; _dummy attachTo [_unit, [0, 0, 0], "camera"]; diff --git a/addons/nightvision/functions/fnc_onCameraViewChanged.sqf b/addons/nightvision/functions/fnc_onCameraViewChanged.sqf index 2cbec4d16e..6f03c2a3af 100644 --- a/addons/nightvision/functions/fnc_onCameraViewChanged.sqf +++ b/addons/nightvision/functions/fnc_onCameraViewChanged.sqf @@ -23,7 +23,7 @@ TRACE_2("onCameraViewChanged",_unit,_cameraView); call FUNC(refreshGoggleType); if (GVAR(disableNVGsWithSights) && {(hmd _unit) != ""}) then { - if ((vehicle _unit == _unit) + if ((isNull objectParent _unit) || {isTurnedOut _unit} || {!([_unit] call EFUNC(common,hasHatch)) && {[_unit] call EFUNC(common,getTurretIndex) in ([vehicle _unit] call EFUNC(common,getTurretsFFV))} diff --git a/addons/nightvision/functions/fnc_onVisionModeChanged.sqf b/addons/nightvision/functions/fnc_onVisionModeChanged.sqf index 1913454f3f..8086b2d1a0 100644 --- a/addons/nightvision/functions/fnc_onVisionModeChanged.sqf +++ b/addons/nightvision/functions/fnc_onVisionModeChanged.sqf @@ -21,7 +21,7 @@ TRACE_2("onVisionModeChanged",_unit,_visionMode); // Handle disableNVGsWithSights setting: if (GVAR(disableNVGsWithSights) && {(hmd _unit) != ""}) then { - if ((vehicle _unit == _unit) + if ((isNull objectParent _unit) || {isTurnedOut _unit} || {!([_unit] call EFUNC(common,hasHatch)) && {[_unit] call EFUNC(common,getTurretIndex) in ([vehicle _unit] call EFUNC(common,getTurretsFFV))} diff --git a/addons/scopes/functions/fnc_adjustZero.sqf b/addons/scopes/functions/fnc_adjustZero.sqf index 1a130840ed..44e64b7674 100644 --- a/addons/scopes/functions/fnc_adjustZero.sqf +++ b/addons/scopes/functions/fnc_adjustZero.sqf @@ -17,7 +17,7 @@ params ["_unit"]; -if (vehicle _unit != _unit) exitWith {false}; +if (!isNull objectParent _unit) exitWith {false}; private _weaponClass = currentWeapon _unit; private _weaponIndex = [_unit, _weaponClass] call EFUNC(common,getWeaponIndex); diff --git a/addons/scopes/functions/fnc_canAdjustZero.sqf b/addons/scopes/functions/fnc_canAdjustZero.sqf index 58a8807480..ca03ab4123 100644 --- a/addons/scopes/functions/fnc_canAdjustZero.sqf +++ b/addons/scopes/functions/fnc_canAdjustZero.sqf @@ -18,7 +18,7 @@ params ["_unit"]; if (cameraView == "GUNNER") exitWith {false}; -if (vehicle _unit != _unit) exitWith {false}; +if (!isNull objectParent _unit) exitWith {false}; if (GVAR(simplifiedZeroing)) exitWith {false}; if (!(missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false])) exitWith {false}; diff --git a/addons/scopes/functions/fnc_canResetZero.sqf b/addons/scopes/functions/fnc_canResetZero.sqf index cd3f1fb4eb..79dae44be9 100644 --- a/addons/scopes/functions/fnc_canResetZero.sqf +++ b/addons/scopes/functions/fnc_canResetZero.sqf @@ -18,7 +18,7 @@ params ["_unit"]; if (cameraView == "GUNNER") exitWith {false}; -if (vehicle _unit != _unit) exitWith {false}; +if (!isNull objectParent _unit) exitWith {false}; if (!(missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false])) exitWith {false}; private _weaponIndex = [_unit, currentWeapon _unit] call EFUNC(common,getWeaponIndex); diff --git a/addons/scopes/functions/fnc_resetZero.sqf b/addons/scopes/functions/fnc_resetZero.sqf index 76ee6355a8..c22df8bb0f 100644 --- a/addons/scopes/functions/fnc_resetZero.sqf +++ b/addons/scopes/functions/fnc_resetZero.sqf @@ -17,7 +17,7 @@ params ["_unit"]; -if (vehicle _unit != _unit) exitWith {false}; +if (!isNull objectParent _unit) exitWith {false}; private _weaponClass = currentWeapon _unit; private _weaponIndex = [_unit, _weaponClass] call EFUNC(common,getWeaponIndex); diff --git a/addons/switchunits/functions/fnc_isValidAi.sqf b/addons/switchunits/functions/fnc_isValidAi.sqf index e78e990924..53ebcdaac2 100644 --- a/addons/switchunits/functions/fnc_isValidAi.sqf +++ b/addons/switchunits/functions/fnc_isValidAi.sqf @@ -19,6 +19,6 @@ params ["_unit"]; !([_unit] call EFUNC(common,isPlayer) || {_unit in playableUnits} -|| {vehicle _unit != _unit} +|| {!isNull objectParent _unit} || {_unit getVariable [QGVAR(IsPlayerUnit), false]} || {_unit getVariable [QGVAR(IsPlayerControlled), false]}) // return diff --git a/addons/volume/XEH_postInitClient.sqf b/addons/volume/XEH_postInitClient.sqf index 2ce8f03a10..896bb718f8 100644 --- a/addons/volume/XEH_postInitClient.sqf +++ b/addons/volume/XEH_postInitClient.sqf @@ -23,7 +23,7 @@ if (!hasInterface) exitWith {}; if (!XGVAR(lowerInVehicles)) exitWith {}; - if (vehicle _unit != _unit) then { + if (!isNull objectParent _unit) then { call FUNC(lowerVolume); } else { call FUNC(restoreVolume); diff --git a/addons/zeus/functions/fnc_bi_moduleArsenal.sqf b/addons/zeus/functions/fnc_bi_moduleArsenal.sqf index 7378cae65e..8dd5f26929 100644 --- a/addons/zeus/functions/fnc_bi_moduleArsenal.sqf +++ b/addons/zeus/functions/fnc_bi_moduleArsenal.sqf @@ -29,7 +29,7 @@ if (_activated && local _logic) then { case (isnull _unit): {_error = localize "str_a3_BIS_fnc_showCuratorFeedbackMessage_506";}; case !(alive _unit): {_error = localize "str_a3_BIS_fnc_moduleArsenal_errorDead";}; case (isnull group _unit || !(side group _unit in [east,west,resistance,civilian])): {_error = localize "str_a3_BIS_fnc_moduleArsenal_errorBrain";}; - case (vehicle _unit != _unit || effectivecommander _unit != _unit): {_error = localize "str_a3_BIS_fnc_moduleArsenal_errorVehicle";}; + case (!isNull objectParent _unit || effectivecommander _unit != _unit): {_error = localize "str_a3_BIS_fnc_moduleArsenal_errorVehicle";}; }; if (_error == "") then { From c88e1abd0e925acbb3b1c7d0c40f642d3ff51e7b Mon Sep 17 00:00:00 2001 From: Fabio Schick <58027418+mrschick@users.noreply.github.com> Date: Tue, 26 Mar 2024 13:59:48 +0100 Subject: [PATCH 032/132] Weather - More permissive wind info indicator + auto-enabling when throwing grenades (#9820) * More permissive displaying of Wind Info * Temporary Wind Info while throwing Grenades * Add Temporary Wind Info Setting * Safer reading of EGVAR from addon that may not be loaded * Show Wind Info only in Static Vehicles * Improve Exclusion Check Co-Authored-By: Grim <69561145+LinkIsGrim@users.noreply.github.com> * Improve Abort Checks on Keybind Statements Co-Authored-By: Grim <69561145+LinkIsGrim@users.noreply.github.com> * Raise eyePos when inside Static Weapon --------- Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> --- addons/advanced_throwing/XEH_postInit.sqf | 3 +++ .../functions/fnc_exitThrowMode.sqf | 6 ++++++ .../functions/fnc_prepare.sqf | 9 +++++++++ addons/advanced_throwing/initSettings.inc.sqf | 8 ++++++++ addons/advanced_throwing/stringtable.xml | 10 ++++++++++ addons/weather/XEH_postInit.sqf | 7 +++++-- .../weather/functions/fnc_displayWindInfo.sqf | 18 +++++++++++++++--- 7 files changed, 56 insertions(+), 5 deletions(-) diff --git a/addons/advanced_throwing/XEH_postInit.sqf b/addons/advanced_throwing/XEH_postInit.sqf index 96b0fbb09b..1fc9400e99 100644 --- a/addons/advanced_throwing/XEH_postInit.sqf +++ b/addons/advanced_throwing/XEH_postInit.sqf @@ -7,6 +7,9 @@ GVAR(ammoEventHandlers) = createHashMap; // Exit on HC if (!hasInterface) exitWith {}; +// Temporary Wind Info indication +GVAR(tempWindInfo) = false; + // Ammo/Magazines look-up hash for correctness of initSpeed GVAR(ammoMagLookup) = call CBA_fnc_createNamespace; { diff --git a/addons/advanced_throwing/functions/fnc_exitThrowMode.sqf b/addons/advanced_throwing/functions/fnc_exitThrowMode.sqf index 744a6d7aae..3b88564eae 100644 --- a/addons/advanced_throwing/functions/fnc_exitThrowMode.sqf +++ b/addons/advanced_throwing/functions/fnc_exitThrowMode.sqf @@ -53,6 +53,12 @@ _unit setVariable [QGVAR(dropDistance), DROP_DISTANCE_DEFAULT]; // Remove controls hint (check if ever enabled is inside the function) call EFUNC(interaction,hideMouseHint); +// Hide wind info after throw, if it was temporarily enabled for the throw +if (GVAR(tempWindInfo)) then { + EGVAR(weather,WindInfo) = false; + GVAR(tempWindInfo) = false; +}; + // Remove throw action [_unit, "DefaultAction", _unit getVariable [QGVAR(throwAction), -1]] call EFUNC(common,removeActionEventHandler); diff --git a/addons/advanced_throwing/functions/fnc_prepare.sqf b/addons/advanced_throwing/functions/fnc_prepare.sqf index 070870879b..7926c2c864 100644 --- a/addons/advanced_throwing/functions/fnc_prepare.sqf +++ b/addons/advanced_throwing/functions/fnc_prepare.sqf @@ -18,6 +18,15 @@ params ["_unit"]; TRACE_1("params",_unit); +// Temporarily enable wind info, to aid in throwing smoke grenades effectively +if ( + GVAR(enableTempWindInfo) && + {!(missionNamespace getVariable [QEGVAR(weather,WindInfo), false])} +) then { + [] call EFUNC(weather,displayWindInfo); + GVAR(tempWindInfo) = true; +}; + // Select next throwable if one already in hand if (_unit getVariable [QGVAR(inHand), false]) exitWith { TRACE_1("inHand",_unit); diff --git a/addons/advanced_throwing/initSettings.inc.sqf b/addons/advanced_throwing/initSettings.inc.sqf index d4ebe14918..d8396637c5 100644 --- a/addons/advanced_throwing/initSettings.inc.sqf +++ b/addons/advanced_throwing/initSettings.inc.sqf @@ -40,3 +40,11 @@ private _category = format ["ACE %1", localize LSTRING(Category)]; true, 1 ] call CBA_fnc_addSetting; + +[ + QGVAR(enableTempWindInfo), "CHECKBOX", + [LSTRING(EnableTempWindInfo_DisplayName), LSTRING(EnableTempWindInfo_Description)], + _category, + true, + 0 +] call CBA_fnc_addSetting; diff --git a/addons/advanced_throwing/stringtable.xml b/addons/advanced_throwing/stringtable.xml index ec2354a2c0..a79fe7d0a4 100644 --- a/addons/advanced_throwing/stringtable.xml +++ b/addons/advanced_throwing/stringtable.xml @@ -185,6 +185,16 @@ Permite que arremessáveis fixados em objetos sejam pegos. Zapíná schopnost zvednutí předmětů z objektů ke kterým jsou připnuté. + + Show Temporary Wind Info + Zeige temporäre Windinformationen + Mostra informazioni sul vento temporaneamente + + + Temporarily display Wind Info while throwing, to aid in placing smoke grenades effectively. + Zeige während des werfens Windinformationen an, um Rauchgranaten effektiver zu platzieren. + Mostra le informazioni sul vento durante il lancio di granate, facilitando il piazzamento ottimale di fumogeni. + Prepare/Change Throwable Preparar/Cambiar objetos lanzables diff --git a/addons/weather/XEH_postInit.sqf b/addons/weather/XEH_postInit.sqf index 51350226e1..98909dc2d4 100644 --- a/addons/weather/XEH_postInit.sqf +++ b/addons/weather/XEH_postInit.sqf @@ -1,10 +1,12 @@ #include "script_component.hpp" GVAR(WindInfo) = false; + ["ACE3 Common", QGVAR(WindInfoKey), localize LSTRING(WindInfoKeyToggle), { // Conditions: canInteract - if !([ACE_player, ACE_player, []] call EFUNC(common,canInteractWith)) exitWith {false}; + if !([ACE_player, ACE_player, ["isNotDragging", "isNotCarrying", "isNotSitting", "isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; + if !(isNull objectParent ACE_player || {objectParent ACE_player isKindOf "StaticWeapon"}) exitWith {false}; // Statement [] call FUNC(displayWindInfo); @@ -15,7 +17,8 @@ GVAR(WindInfo) = false; ["ACE3 Common", QGVAR(WindInfoKey_hold), localize LSTRING(WindInfoKeyHold), { // Conditions: canInteract - if !([ACE_player, ACE_player, []] call EFUNC(common,canInteractWith)) exitWith {false}; + if !([ACE_player, ACE_player, ["isNotDragging", "isNotCarrying", "isNotSitting", "isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; + if !(isNull objectParent ACE_player || {objectParent ACE_player isKindOf "StaticWeapon"}) exitWith {false}; // Statement [] call FUNC(displayWindInfo); diff --git a/addons/weather/functions/fnc_displayWindInfo.sqf b/addons/weather/functions/fnc_displayWindInfo.sqf index 23a87ecbf4..aeb7d580ae 100644 --- a/addons/weather/functions/fnc_displayWindInfo.sqf +++ b/addons/weather/functions/fnc_displayWindInfo.sqf @@ -35,7 +35,13 @@ TRACE_1("Starting Wind Info PFEH",GVAR(WindInfo)); disableSerialization; params ["", "_pfID"]; - if ((!GVAR(WindInfo)) || {!([ACE_player, ACE_player, []] call EFUNC(common,canInteractWith))}) exitWith { + // Allow wind indicator inside static weapons + private _playerInStaticWeapon = objectParent ACE_Player isKindOf "StaticWeapon"; + + if ( + (!GVAR(WindInfo)) || + {!([ACE_player, ACE_player, ["notOnMap", "isNotDragging", "isNotCarrying", "isNotSitting"]] call EFUNC(common,canInteractWith)) && !(_playerInStaticWeapon)} + ) exitWith { TRACE_1("Ending Wind Info PFEH",GVAR(WindInfo)); GVAR(WindInfo) = false; (["RscWindIntuitive"] call BIS_fnc_rscLayer) cutText ["", "PLAIN"]; @@ -45,12 +51,18 @@ TRACE_1("Starting Wind Info PFEH",GVAR(WindInfo)); //Keeps the display open: (["RscWindIntuitive"] call BIS_fnc_rscLayer) cutRsc ["RscWindIntuitive", "PLAIN", 1, false]; + private _playerEyePos = eyePos ACE_Player; + if (_playerInStaticWeapon) then { + // Raise eyePos by 1 meter if player is in a static weapon, to prevent wind from being blocked by the open vehicle + _playerEyePos = _playerEyePos vectorAdd [0, 0, 1]; + }; + private _windSpeed = if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then { // With wind gradient - [eyePos ACE_player, true, true, true] call FUNC(calculateWindSpeed); + [_playerEyePos, true, true, true] call FUNC(calculateWindSpeed); } else { // Without wind gradient - [eyePos ACE_player, false, true, true] call FUNC(calculateWindSpeed); + [_playerEyePos, false, true, true] call FUNC(calculateWindSpeed); }; From 4952c09f41674f6e941946eff4e9cc9b1af705f5 Mon Sep 17 00:00:00 2001 From: Apricot <50947830+Apricot-ale@users.noreply.github.com> Date: Wed, 27 Mar 2024 03:58:19 +0900 Subject: [PATCH 033/132] Translations - Improve Japanese localization part 4 (sway factor) (#9877) --- addons/advanced_throwing/stringtable.xml | 2 ++ addons/common/stringtable.xml | 13 ++++++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/addons/advanced_throwing/stringtable.xml b/addons/advanced_throwing/stringtable.xml index a79fe7d0a4..9ff4d8fe4b 100644 --- a/addons/advanced_throwing/stringtable.xml +++ b/addons/advanced_throwing/stringtable.xml @@ -189,11 +189,13 @@ Show Temporary Wind Info Zeige temporäre Windinformationen Mostra informazioni sul vento temporaneamente + 一時的に風の情報を表示 Temporarily display Wind Info while throwing, to aid in placing smoke grenades effectively. Zeige während des werfens Windinformationen an, um Rauchgranaten effektiver zu platzieren. Mostra le informazioni sul vento durante il lancio di granate, facilitando il piazzamento ottimale di fumogeni. + 投擲行動中に風向きの情報を一時的に表示し、発煙手榴弾の煙幕を効果的に展開しやすくします。 Prepare/Change Throwable diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index c243f0eb6b..b2fdc1624d 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -1830,12 +1830,15 @@ Sway + 手ぶれ Enable ACE Sway + ACE 手ぶれを有効化 Enables weapon sway influenced by sway factors, such as stance, fatigue and medical condition.\nDisabling this setting will defer sway to vanilla or other mods. + 姿勢、疲労、負傷状態などの手ぶれ要因に影響を受ける武器照準の揺れを有効にします。\nこの設定を無効にすると、手ぶれの揺れはバニラまたは他のMODの処理に任されます。 Sway factor @@ -1856,7 +1859,7 @@ Influences the amount of weapon sway. Higher means more sway. Afecta al la estabilidad de la mira. Más alto significa más balanceo Beeinflusst, wie ruhig man eine Waffe halten kann. Ein höherer Wert bedeutet weniger Stabilisierung. - 武器の手ぶれの量に影響します。値が高いほど、手ぶれが強くなります。 + 武器の手ぶれの大きさに影響します。値が高いほど、手ぶれが強くなります。 影响手持武器的晃动程度,数值越高,抖动的越厉害。 影響手持武器晃動程度,數值越高抖動越厲害 Influe sur l'amplitude du tremblement de l'arme. Une valeur plus élevée signifie plus de tremblement. @@ -1874,7 +1877,7 @@ Fator de balanço de mira em repouso Verwacklungsfaktor, wenn aufgelegt Fattore di Oscillazione Appoggiato - 静止時の手ぶれ係数 + 静止依託時の手ぶれ係数 Коэффициент колебания прицела в состоянии покоя @@ -1884,7 +1887,7 @@ Influencia a quantidade de balanço de mira enquanto a arma está em repouso. Beeinflusst, wie ruhig man die Waffe hält, während sie aufgelegt ist. Determina la quantità di oscillazione dell'arma quando questa è appoggiata. - 静止している時の武器の手ぶれの量に影響します。 + 静止し壁などに依託している時の武器の手ぶれの大きさに影響します。 Влияет на величину колебания прицела оружия в состоянии покоя. @@ -1894,7 +1897,7 @@ Fator de balanço de mira em posição de tiro Verwacklungsfaktor, wenn Zweibein aufgestellt ist. Fattore di Oscillazione su Bipode - 展開時の手ぶれ係数 + 接地展開時の手ぶれ係数 Коэффициент колебания прицела при развертывании @@ -1904,7 +1907,7 @@ Influencia a quantidade de balanço de mira enquanto a arma está em posição de tiro. Beeinflusst, wie ruhig man die Waffen hält, während das Zweibein aufgestellt ist. Determina la quantità di oscillazione dell'arma quando questa è stabilizzata usando il bipode. - 武器の展開(Cキー)時の武器の手ぶれの量に影響します。 + 武器の接地展開時の武器の手ぶれの大きさに影響します。 Влияет на величину колебания прицела оружия при его развертывании. From dc7d7b1429ea55d96066586bb5474de440025178 Mon Sep 17 00:00:00 2001 From: jonpas Date: Wed, 27 Mar 2024 23:01:47 +0100 Subject: [PATCH 034/132] Prepare 3.17.0 Build 80 --- addons/main/script_version.hpp | 6 +++--- docs/_config.yml | 6 +++--- docs/_config_dev.yml | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/addons/main/script_version.hpp b/addons/main/script_version.hpp index c94b9e6193..2ffd5890c7 100644 --- a/addons/main/script_version.hpp +++ b/addons/main/script_version.hpp @@ -1,4 +1,4 @@ #define MAJOR 3 -#define MINOR 16 -#define PATCHLVL 3 -#define BUILD 79 +#define MINOR 17 +#define PATCHLVL 0 +#define BUILD 80 diff --git a/docs/_config.yml b/docs/_config.yml index bc7440eee3..8d0c7adcf3 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -8,9 +8,9 @@ ace: githubUrl: https://github.com/acemod/ACE3 version: major: 3 - minor: 16 - patch: 3 - build: 79 + minor: 17 + patch: 0 + build: 80 markdown: kramdown diff --git a/docs/_config_dev.yml b/docs/_config_dev.yml index 0d0cf1b7fc..3fd9238711 100644 --- a/docs/_config_dev.yml +++ b/docs/_config_dev.yml @@ -8,9 +8,9 @@ ace: githubUrl: https://github.com/acemod/ACE3 version: major: 3 - minor: 16 - patch: 3 - build: 79 + minor: 17 + patch: 0 + build: 80 markdown: kramdown From 512ceaa1a1e7d7c089d9d074814aa664b77f70be Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Thu, 28 Mar 2024 04:37:36 +0100 Subject: [PATCH 035/132] Missile Guidance - Rename preInit and postInit files (#9881) Renamed preInit and postInit files --- addons/missileguidance/CfgEventhandlers.hpp | 4 ++-- .../missileguidance/{XEH_post_init.sqf => XEH_postInit.sqf} | 0 addons/missileguidance/{XEH_pre_init.sqf => XEH_preInit.sqf} | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename addons/missileguidance/{XEH_post_init.sqf => XEH_postInit.sqf} (100%) rename addons/missileguidance/{XEH_pre_init.sqf => XEH_preInit.sqf} (100%) diff --git a/addons/missileguidance/CfgEventhandlers.hpp b/addons/missileguidance/CfgEventhandlers.hpp index 449681e8df..a288a93399 100644 --- a/addons/missileguidance/CfgEventhandlers.hpp +++ b/addons/missileguidance/CfgEventhandlers.hpp @@ -7,13 +7,13 @@ class Extended_PreStart_EventHandlers { class Extended_PreInit_EventHandlers { class ADDON { - init = QUOTE(call COMPILE_SCRIPT(XEH_pre_init)); + init = QUOTE(call COMPILE_SCRIPT(XEH_preInit)); }; }; class Extended_PostInit_EventHandlers { class ADDON { - init = QUOTE(call COMPILE_SCRIPT(XEH_post_init)); + init = QUOTE(call COMPILE_SCRIPT(XEH_postInit)); }; }; diff --git a/addons/missileguidance/XEH_post_init.sqf b/addons/missileguidance/XEH_postInit.sqf similarity index 100% rename from addons/missileguidance/XEH_post_init.sqf rename to addons/missileguidance/XEH_postInit.sqf diff --git a/addons/missileguidance/XEH_pre_init.sqf b/addons/missileguidance/XEH_preInit.sqf similarity index 100% rename from addons/missileguidance/XEH_pre_init.sqf rename to addons/missileguidance/XEH_preInit.sqf From 3bba9735c7aa48b58d4623b3acd10a1e8198c2f9 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Thu, 28 Mar 2024 04:37:59 +0100 Subject: [PATCH 036/132] Mk6mortar - Remove return values from `FUNC(handleFired)` (#9880) Update fnc_handleFired.sqf --- addons/mk6mortar/functions/fnc_handleFired.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/mk6mortar/functions/fnc_handleFired.sqf b/addons/mk6mortar/functions/fnc_handleFired.sqf index c09c96f777..f2979d0e4e 100644 --- a/addons/mk6mortar/functions/fnc_handleFired.sqf +++ b/addons/mk6mortar/functions/fnc_handleFired.sqf @@ -24,11 +24,11 @@ params ["_vehicle", "", "", "", "", "", "_projectile"]; // Large enough distance to not simulate any wind deflection -if (_vehicle distance ACE_player > 8000) exitWith {false}; +if (_vehicle distance ACE_player > 8000) exitWith {}; //AI will have no clue how to use: private _shooterMan = gunner _vehicle; -if (!([_shooterMan] call EFUNC(common,isPlayer))) exitWith {false}; +if (!([_shooterMan] call EFUNC(common,isPlayer))) exitWith {}; //Calculate air density: private _altitude = (getPosASL _vehicle) select 2; From 46cc49dc1e53d89b3513e3f31cd6b36d577343df Mon Sep 17 00:00:00 2001 From: "Mr. Zorn" <56258612+PulsarNeutronStar@users.noreply.github.com> Date: Thu, 28 Mar 2024 12:49:45 +0100 Subject: [PATCH 037/132] Documentation - Add info about Plotting Board (#9838) * Update maptools.md * Update maptools.md * Update docs/wiki/feature/maptools.md Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> --------- Co-authored-by: PabstMirror Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> --- docs/wiki/feature/maptools.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/wiki/feature/maptools.md b/docs/wiki/feature/maptools.md index 4145eb1a18..f31c81f0e2 100644 --- a/docs/wiki/feature/maptools.md +++ b/docs/wiki/feature/maptools.md @@ -49,6 +49,7 @@ If you are equipped with a vanilla GPS it will be shown on the map. (You don't n - Press the self interaction key Ctrl + ⊞ Win (ACE3 default key bind `Self Interaction Key`). - Select `Show Plotting Board`. - Note that you can drag the Plotting Board around with LMB and rotate the different parts of the Plotting Board, each independently from each other, with Ctrl + LMB. +- When a new marker (Local or Group Channel) is created on the inner circle of the Plotting board, the marker will move accordingly when the Plotting Board gets moved or rotated. ### 2.4 Drawing lines - You can draw lines on the plotting board. From 48bdc6fbcd06ed0d23fb2d41235ca338aebb3e41 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Thu, 28 Mar 2024 14:11:26 +0100 Subject: [PATCH 038/132] Repair/UI - Minor code cleanup (#9879) --- addons/repair/XEH_postInit.sqf | 2 +- addons/ui/XEH_clientInit.sqf | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/addons/repair/XEH_postInit.sqf b/addons/repair/XEH_postInit.sqf index 58bb1be6e5..e6bff06936 100644 --- a/addons/repair/XEH_postInit.sqf +++ b/addons/repair/XEH_postInit.sqf @@ -2,7 +2,7 @@ ["CBA_settingsInitialized", { - if !GVAR(enabled) exitWith {}; + if (!GVAR(enabled)) exitWith {}; [QGVAR(setVehicleDamage), {_this call FUNC(setDamage)}] call CBA_fnc_addEventHandler; [QGVAR(setVehicleHitPointDamage), {_this call FUNC(setHitPointDamage)}] call CBA_fnc_addEventHandler; diff --git a/addons/ui/XEH_clientInit.sqf b/addons/ui/XEH_clientInit.sqf index 8f6a3b8ada..9a03f0042a 100644 --- a/addons/ui/XEH_clientInit.sqf +++ b/addons/ui/XEH_clientInit.sqf @@ -19,9 +19,8 @@ GVAR(elementsSet) = call CBA_fnc_createNamespace; ["ace_infoDisplayChanged", { // Selective UI Advanced // Defaults must be set in this EH to make sure controls are activated and advanced settings can be modified - private _force = [true, false] select (GVAR(allowSelectiveUI)); { - [_x, missionNamespace getVariable (format [QGVAR(%1), _x]), false, _force] call FUNC(setAdvancedElement); + [_x, missionNamespace getVariable (format [QGVAR(%1), _x]), false, !GVAR(allowSelectiveUI)] call FUNC(setAdvancedElement); } forEach (allVariables GVAR(configCache)); // Execute local event for when it's safe to modify UI through this API From 2a52ad14c4adcfe556421db0c24988f1a3fd2cdf Mon Sep 17 00:00:00 2001 From: jonpas Date: Thu, 28 Mar 2024 18:29:08 +0100 Subject: [PATCH 039/132] Improve GitHub labels and Release Drafter (#9884) --- .github/release-drafter.yml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml index 2ba4cbfcaf..778d34fd9f 100644 --- a/.github/release-drafter.yml +++ b/.github/release-drafter.yml @@ -11,11 +11,10 @@ sort-direction: ascending categories: - title: '**ADDED:**' labels: - - 'kind/feature request' - - 'kind/added feature' + - 'kind/feature' - title: '**FIXED:**' labels: - - 'kind/bug fix' + - 'kind/bug-fix' - title: '**IMPROVED:**' labels: - 'kind/enhancement' @@ -23,17 +22,16 @@ categories: - title: '**CHANGED:**' labels: - 'kind/cleanup' - - 'area/compatibility' - 'kind/change' - title: '**SETTINGS:**' labels: - 'kind/setting' - title: '**TRANSLATIONS:**' labels: - - 'area/translations' + - 'kind/translation' exclude-labels: - - 'ignore changelog' + - 'ignore-changelog' - 'dependencies' change-template: '- $TITLE (#$NUMBER)' From 415d2f685cc81e51d9be3b2de9dd3217e6c481d5 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Thu, 28 Mar 2024 19:57:23 +0100 Subject: [PATCH 040/132] General - Change `FUNC` to `LINKFUNC` where appropriate (#9882) FUNC -> LINKFUNC --- addons/advanced_ballistics/XEH_postInit.sqf | 6 ++-- addons/advanced_throwing/XEH_postInit.sqf | 2 +- addons/ai/XEH_postInit.sqf | 4 +-- addons/atragmx/XEH_postInit.sqf | 2 +- addons/captives/XEH_postInit.sqf | 10 +++---- addons/casings/XEH_postInit.sqf | 2 +- addons/chemlights/XEH_postInit.sqf | 6 ++-- addons/common/XEH_postInit.sqf | 28 +++++++++---------- .../functions/fnc_addSyncedEventHandler.sqf | 2 +- addons/concertina_wire/XEH_postInit.sqf | 2 +- addons/cookoff/XEH_postInit.sqf | 8 +++--- addons/disarming/XEH_postInit.sqf | 4 +-- addons/dogtags/XEH_postInit.sqf | 8 +++--- addons/dragging/functions/fnc_carryObject.sqf | 4 +-- addons/dragging/functions/fnc_dragObject.sqf | 4 +-- .../functions/fnc_startCarryLocal.sqf | 2 +- .../dragging/functions/fnc_startDragLocal.sqf | 2 +- addons/explosives/XEH_postInit.sqf | 2 +- addons/explosives/functions/fnc_dialPhone.sqf | 2 +- addons/fastroping/XEH_postInit.sqf | 6 ++-- addons/fastroping/functions/fnc_fastRope.sqf | 2 +- addons/fcs/functions/fnc_firedEH.sqf | 2 +- addons/field_rations/XEH_postInit.sqf | 4 +-- addons/field_rations/functions/fnc_update.sqf | 4 +-- addons/finger/XEH_postInit.sqf | 2 +- addons/fire/XEH_postInit.sqf | 4 +-- addons/fire/functions/fnc_burn.sqf | 4 +-- addons/frag/XEH_postInit.sqf | 2 +- addons/frag/functions/fnc_doReflections.sqf | 2 +- addons/goggles/XEH_postInit.sqf | 4 +-- addons/grenades/XEH_postInit.sqf | 8 +++--- addons/headless/XEH_postInit.sqf | 2 +- addons/headless/XEH_preInit.sqf | 2 +- addons/intelitems/XEH_preInit.sqf | 4 +-- addons/interact_menu/XEH_clientInit.sqf | 2 +- addons/interact_menu/XEH_preInit.sqf | 2 +- addons/interaction/XEH_postInit.sqf | 2 +- addons/irlight/XEH_postInit.sqf | 2 +- addons/laser/functions/fnc_addLaserTarget.sqf | 2 +- addons/logistics_wirecutter/XEH_postInit.sqf | 4 +-- addons/map/initSettings.inc.sqf | 2 +- addons/markers/XEH_postInit.sqf | 4 +-- .../functions/fnc_onMouseButtonDown.sqf | 2 +- addons/medical_blood/XEH_postInit.sqf | 4 +-- addons/medical_blood/functions/fnc_init.sqf | 2 +- addons/medical_feedback/XEH_postInit.sqf | 2 +- .../medical_gui/functions/fnc_onMenuOpen.sqf | 2 +- addons/microdagr/XEH_clientInit.sqf | 2 +- addons/minedetector/XEH_postInit.sqf | 4 +-- .../functions/fnc_enableDetector.sqf | 2 +- addons/missileguidance/XEH_postInit.sqf | 2 +- .../functions/fnc_handleHandoff.sqf | 2 +- .../missileguidance/functions/fnc_onFired.sqf | 2 +- addons/mk6mortar/XEH_postInit.sqf | 6 ++-- addons/movement/XEH_postInit.sqf | 4 +-- addons/optics/XEH_postInit.sqf | 2 +- addons/overheating/XEH_postInit.sqf | 14 +++++----- addons/parachute/XEH_postInit.sqf | 6 ++-- addons/recoil/XEH_postInit.sqf | 2 +- addons/repair/XEH_postInit.sqf | 4 +-- addons/respawn/XEH_postInit.sqf | 6 ++-- addons/sandbag/XEH_postInit.sqf | 6 ++-- addons/scopes/XEH_postInit.sqf | 6 ++-- addons/sitting/XEH_clientInit.sqf | 6 ++-- addons/tacticalladder/XEH_postInit.sqf | 4 +-- addons/tagging/XEH_postInit.sqf | 4 +-- addons/trenches/XEH_postInit.sqf | 6 ++-- addons/tripod/XEH_postInit.sqf | 4 +-- addons/ui/XEH_clientInit.sqf | 2 +- addons/vector/functions/fnc_onKeyDown.sqf | 2 +- addons/vector/functions/fnc_onKeyUp.sqf | 2 +- addons/vehiclelock/XEH_postInit.sqf | 6 ++-- .../functions/fnc_changeViewDistance.sqf | 2 +- addons/weaponselect/XEH_postInit.sqf | 2 +- addons/weather/XEH_postServerInit.sqf | 4 +-- addons/winddeflection/XEH_postInit.sqf | 8 +++--- addons/zeus/XEH_preInit.sqf | 4 +-- 77 files changed, 154 insertions(+), 156 deletions(-) diff --git a/addons/advanced_ballistics/XEH_postInit.sqf b/addons/advanced_ballistics/XEH_postInit.sqf index f9d78b5045..9d0dd0ee4b 100644 --- a/addons/advanced_ballistics/XEH_postInit.sqf +++ b/addons/advanced_ballistics/XEH_postInit.sqf @@ -19,11 +19,11 @@ if (!hasInterface) exitWith {}; [] call FUNC(initializeTerrainExtension); // Register fire event handler - ["ace_firedPlayer", DFUNC(handleFired)] call CBA_fnc_addEventHandler; - ["ace_firedPlayerNonLocal", DFUNC(handleFired)] call CBA_fnc_addEventHandler; + ["ace_firedPlayer", LINKFUNC(handleFired)] call CBA_fnc_addEventHandler; + ["ace_firedPlayerNonLocal", LINKFUNC(handleFired)] call CBA_fnc_addEventHandler; // Register Perframe Handler - [FUNC(handleFirePFH), GVAR(simulationInterval)] call CBA_fnc_addPerFrameHandler; + [LINKFUNC(handleFirePFH), GVAR(simulationInterval)] call CBA_fnc_addPerFrameHandler; //Add warnings for missing compat PBOs (only if AB is on) { diff --git a/addons/advanced_throwing/XEH_postInit.sqf b/addons/advanced_throwing/XEH_postInit.sqf index 1fc9400e99..930313fce0 100644 --- a/addons/advanced_throwing/XEH_postInit.sqf +++ b/addons/advanced_throwing/XEH_postInit.sqf @@ -2,7 +2,7 @@ // Fired XEH GVAR(ammoEventHandlers) = createHashMap; -[QGVAR(throwFiredXEH), FUNC(throwFiredXEH)] call CBA_fnc_addEventHandler; +[QGVAR(throwFiredXEH), LINKFUNC(throwFiredXEH)] call CBA_fnc_addEventHandler; // Exit on HC if (!hasInterface) exitWith {}; diff --git a/addons/ai/XEH_postInit.sqf b/addons/ai/XEH_postInit.sqf index fce5152e3d..7c4f79f8fb 100644 --- a/addons/ai/XEH_postInit.sqf +++ b/addons/ai/XEH_postInit.sqf @@ -16,7 +16,7 @@ } forEach _sections; }] call CBA_fnc_addEventHandler; -[QGVAR(unGarrison), FUNC(unGarrison)] call CBA_fnc_addEventHandler; +[QGVAR(unGarrison), LINKFUNC(unGarrison)] call CBA_fnc_addEventHandler; [QGVAR(doMove), { params ["_unitsArray"]; @@ -73,6 +73,6 @@ if (isServer) then { ["CAManBase", "init", { // wait for HMD to be assigned so `hmd _unit` works - [FUNC(assignNVG), _this, 1] call CBA_fnc_waitAndExecute; + [LINKFUNC(assignNVG), _this, 1] call CBA_fnc_waitAndExecute; }] call CBA_fnc_addClassEventHandler; }; diff --git a/addons/atragmx/XEH_postInit.sqf b/addons/atragmx/XEH_postInit.sqf index 7914657b08..01eb14d928 100644 --- a/addons/atragmx/XEH_postInit.sqf +++ b/addons/atragmx/XEH_postInit.sqf @@ -7,4 +7,4 @@ if (!hasInterface) exitWith {}; GVAR(active) = false; GVAR(initialised) = false; -[QEGVAR(vector,rangefinderData), {_this call FUNC(sord)}] call CBA_fnc_addEventHandler; +[QEGVAR(vector,rangefinderData), LINKFUNC(sord)] call CBA_fnc_addEventHandler; diff --git a/addons/captives/XEH_postInit.sqf b/addons/captives/XEH_postInit.sqf index 8d34c4fb40..951a710771 100644 --- a/addons/captives/XEH_postInit.sqf +++ b/addons/captives/XEH_postInit.sqf @@ -25,14 +25,14 @@ if (isServer) then { }; ["unit", FUNC(handlePlayerChanged)] call CBA_fnc_addPlayerEventHandler; -[QGVAR(moveInCaptive), FUNC(vehicleCaptiveMoveIn)] call CBA_fnc_addEventHandler; -[QGVAR(moveOutCaptive), FUNC(vehicleCaptiveMoveOut)] call CBA_fnc_addEventHandler; +[QGVAR(moveInCaptive), LINKFUNC(vehicleCaptiveMoveIn)] call CBA_fnc_addEventHandler; +[QGVAR(moveOutCaptive), LINKFUNC(vehicleCaptiveMoveOut)] call CBA_fnc_addEventHandler; -[QGVAR(setHandcuffed), FUNC(setHandcuffed)] call CBA_fnc_addEventHandler; -[QGVAR(setSurrendered), FUNC(setSurrendered)] call CBA_fnc_addEventHandler; +[QGVAR(setHandcuffed), LINKFUNC(setHandcuffed)] call CBA_fnc_addEventHandler; +[QGVAR(setSurrendered), LINKFUNC(setSurrendered)] call CBA_fnc_addEventHandler; //Medical Integration Events -["ace_unconscious", FUNC(handleOnUnconscious)] call CBA_fnc_addEventHandler; +["ace_unconscious", LINKFUNC(handleOnUnconscious)] call CBA_fnc_addEventHandler; if (!hasInterface) exitWith {}; diff --git a/addons/casings/XEH_postInit.sqf b/addons/casings/XEH_postInit.sqf index e91ab96c0d..c1baad68e9 100644 --- a/addons/casings/XEH_postInit.sqf +++ b/addons/casings/XEH_postInit.sqf @@ -4,4 +4,4 @@ if (!hasInterface || !GVAR(enabled)) exitWith {}; GVAR(cachedCasings) = createHashMap; GVAR(casings) = []; -["CAManBase", "FiredMan", {call FUNC(createCasing)}] call CBA_fnc_addClassEventHandler; +["CAManBase", "FiredMan", LINKFUNC(createCasing)] call CBA_fnc_addClassEventHandler; diff --git a/addons/chemlights/XEH_postInit.sqf b/addons/chemlights/XEH_postInit.sqf index 6b22de4a3c..b40ffb764e 100644 --- a/addons/chemlights/XEH_postInit.sqf +++ b/addons/chemlights/XEH_postInit.sqf @@ -2,6 +2,6 @@ if (!hasInterface) exitWith {}; -["ace_firedPlayer", DFUNC(throwEH)] call CBA_fnc_addEventHandler; -// ["ace_firedPlayerNonLocal", DFUNC(throwEH)] call CBA_fnc_addEventHandler; -// ["ace_firedNonPlayer", DFUNC(throwEH)] call CBA_fnc_addEventHandler; +["ace_firedPlayer", LINKFUNC(throwEH)] call CBA_fnc_addEventHandler; +// ["ace_firedPlayerNonLocal", LINKFUNC(throwEH)] call CBA_fnc_addEventHandler; +// ["ace_firedNonPlayer", LINKFUNC(throwEH)] call CBA_fnc_addEventHandler; diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index c5b9c55eb2..1f259c2e3d 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -18,7 +18,7 @@ ////////////////////////////////////////////////// //Status Effect EHs: -[QGVAR(setStatusEffect), {_this call FUNC(statusEffect_set)}] call CBA_fnc_addEventHandler; +[QGVAR(setStatusEffect), LINKFUNC(statusEffect_set)] call CBA_fnc_addEventHandler; ["forceWalk", false, ["ace_advanced_fatigue", "ACE_SwitchUnits", "ACE_Attach", "ace_dragging", "ACE_Explosives", "ACE_Ladder", "ACE_Sandbag", "ACE_refuel", "ACE_rearm", "ACE_Trenches", "ace_medical_fracture"]] call FUNC(statusEffect_addType); ["blockSprint", false, ["ace_advanced_fatigue", "ace_dragging", "ace_medical_fracture"]] call FUNC(statusEffect_addType); ["setCaptive", true, [QEGVAR(captives,Handcuffed), QEGVAR(captives,Surrendered)]] call FUNC(statusEffect_addType); @@ -157,9 +157,9 @@ if (isServer) then { INFO_2("Headbug Used: Name: %1, Animation: %2",_profileName,_animation); }] call CBA_fnc_addEventHandler; -[QGVAR(fixCollision), FUNC(fixCollision)] call CBA_fnc_addEventHandler; -[QGVAR(fixFloating), FUNC(fixFloating)] call CBA_fnc_addEventHandler; -[QGVAR(fixPosition), FUNC(fixPosition)] call CBA_fnc_addEventHandler; +[QGVAR(fixCollision), LINKFUNC(fixCollision)] call CBA_fnc_addEventHandler; +[QGVAR(fixFloating), LINKFUNC(fixFloating)] call CBA_fnc_addEventHandler; +[QGVAR(fixPosition), LINKFUNC(fixPosition)] call CBA_fnc_addEventHandler; ["ace_loadPersonEvent", LINKFUNC(loadPersonLocal)] call CBA_fnc_addEventHandler; ["ace_unloadPersonEvent", LINKFUNC(unloadPersonLocal)] call CBA_fnc_addEventHandler; @@ -209,8 +209,8 @@ if (isServer) then { }] call CBA_fnc_addEventHandler; // Request framework -[QGVAR(requestCallback), FUNC(requestCallback)] call CBA_fnc_addEventHandler; -[QGVAR(receiveRequest), FUNC(receiveRequest)] call CBA_fnc_addEventHandler; +[QGVAR(requestCallback), LINKFUNC(requestCallback)] call CBA_fnc_addEventHandler; +[QGVAR(receiveRequest), LINKFUNC(receiveRequest)] call CBA_fnc_addEventHandler; [QGVAR(systemChatGlobal), {systemChat _this}] call CBA_fnc_addEventHandler; @@ -219,7 +219,7 @@ if (isServer) then { [QGVAR(enableSimulationGlobal), {(_this select 0) enableSimulationGlobal (_this select 1)}] call CBA_fnc_addEventHandler; [QGVAR(setShotParents), {(_this select 0) setShotParents [_this select 1, _this select 2]}] call CBA_fnc_addEventHandler; ["ace_setOwner", {(_this select 0) setOwner (_this select 1)}] call CBA_fnc_addEventHandler; - [QGVAR(serverLog), FUNC(serverLog)] call CBA_fnc_addEventHandler; + [QGVAR(serverLog), LINKFUNC(serverLog)] call CBA_fnc_addEventHandler; [QGVAR(claimSafe), LINKFUNC(claimSafeServer)] call CBA_fnc_addEventHandler; }; @@ -236,14 +236,14 @@ if (!isServer) then { ["ACEa", [player]] call CBA_fnc_serverEvent; }] call CBA_fnc_addEventHandler; } else { - ["ACEa", FUNC(_handleRequestAllSyncedEvents)] call CBA_fnc_addEventHandler; + ["ACEa", LINKFUNC(_handleRequestAllSyncedEvents)] call CBA_fnc_addEventHandler; }; -["ACEe", FUNC(_handleSyncedEvent)] call CBA_fnc_addEventHandler; -["ACEs", FUNC(_handleRequestSyncedEvent)] call CBA_fnc_addEventHandler; +["ACEe", LINKFUNC(_handleSyncedEvent)] call CBA_fnc_addEventHandler; +["ACEs", LINKFUNC(_handleRequestSyncedEvent)] call CBA_fnc_addEventHandler; if (isServer) then { - [FUNC(syncedEventPFH), 0.5, []] call CBA_fnc_addPerFrameHandler; + [LINKFUNC(syncedEventPFH), 0.5, []] call CBA_fnc_addPerFrameHandler; }; @@ -392,8 +392,8 @@ addMissionEventHandler ["PlayerViewChanged", { // Eventhandlers for player controlled machines ////////////////////////////////////////////////// -[QGVAR(displayTextStructured), {_this call FUNC(displayTextStructured)}] call CBA_fnc_addEventHandler; -[QGVAR(displayTextPicture), {_this call FUNC(displayTextPicture)}] call CBA_fnc_addEventHandler; +[QGVAR(displayTextStructured), LINKFUNC(displayTextStructured)] call CBA_fnc_addEventHandler; +[QGVAR(displayTextPicture), LINKFUNC(displayTextPicture)] call CBA_fnc_addEventHandler; ["ace_unconscious", { params ["_unit", "_isUnconscious"]; @@ -403,7 +403,7 @@ addMissionEventHandler ["PlayerViewChanged", { }; }] call CBA_fnc_addEventHandler; -["ace_useItem", DFUNC(useItem)] call CBA_fnc_addEventHandler; +["ace_useItem", LINKFUNC(useItem)] call CBA_fnc_addEventHandler; ////////////////////////////////////////////////// diff --git a/addons/common/functions/fnc_addSyncedEventHandler.sqf b/addons/common/functions/fnc_addSyncedEventHandler.sqf index dbe0612e95..616897842b 100644 --- a/addons/common/functions/fnc_addSyncedEventHandler.sqf +++ b/addons/common/functions/fnc_addSyncedEventHandler.sqf @@ -24,7 +24,7 @@ if (_name in GVAR(syncedEvents)) exitWith { false }; -private _eventId = [_name, FUNC(_handleSyncedEvent)] call CBA_fnc_addEventHandler; +private _eventId = [_name, LINKFUNC(_handleSyncedEvent)] call CBA_fnc_addEventHandler; private _data = [_handler, [], _ttl, _eventId]; GVAR(syncedEvents) set [_name, _data]; diff --git a/addons/concertina_wire/XEH_postInit.sqf b/addons/concertina_wire/XEH_postInit.sqf index 7cb8909c81..bb3f022534 100644 --- a/addons/concertina_wire/XEH_postInit.sqf +++ b/addons/concertina_wire/XEH_postInit.sqf @@ -10,4 +10,4 @@ GVAR(deployPFH) = -1; }; }] call CBA_fnc_addEventHandler; -[QGVAR(vehicleDamage), {_this call FUNC(vehicleDamage)}] call CBA_fnc_addEventHandler; +[QGVAR(vehicleDamage), LINKFUNC(vehicleDamage)] call CBA_fnc_addEventHandler; diff --git a/addons/cookoff/XEH_postInit.sqf b/addons/cookoff/XEH_postInit.sqf index b33723619e..eba4eeced0 100644 --- a/addons/cookoff/XEH_postInit.sqf +++ b/addons/cookoff/XEH_postInit.sqf @@ -1,15 +1,15 @@ #include "script_component.hpp" -[QGVAR(engineFire), FUNC(engineFire)] call CBA_fnc_addEventHandler; +[QGVAR(engineFire), LINKFUNC(engineFire)] call CBA_fnc_addEventHandler; [QGVAR(cookOff), { params ["_vehicle"]; if (local _vehicle) then { _this call FUNC(cookOff); }; }] call CBA_fnc_addEventHandler; -[QGVAR(cookOffEffect), FUNC(cookOffEffect)] call CBA_fnc_addEventHandler; -[QGVAR(smoke), FUNC(smoke)] call CBA_fnc_addEventHandler; -[QGVAR(cookOffBox), FUNC(cookOffBox)] call CBA_fnc_addEventHandler; +[QGVAR(cookOffEffect), LINKFUNC(cookOffEffect)] call CBA_fnc_addEventHandler; +[QGVAR(smoke), LINKFUNC(smoke)] call CBA_fnc_addEventHandler; +[QGVAR(cookOffBox), LINKFUNC(cookOffBox)] call CBA_fnc_addEventHandler; // handle cleaning up effects when vehicle is deleted mid-cookoff [QGVAR(addCleanupHandlers), { diff --git a/addons/disarming/XEH_postInit.sqf b/addons/disarming/XEH_postInit.sqf index 6944f8b146..5b123af297 100644 --- a/addons/disarming/XEH_postInit.sqf +++ b/addons/disarming/XEH_postInit.sqf @@ -1,4 +1,4 @@ #include "script_component.hpp" -[QGVAR(dropItems), FUNC(eventTargetStart)] call CBA_fnc_addEventHandler; -[QGVAR(debugCallback), FUNC(eventCallerFinish)] call CBA_fnc_addEventHandler; +[QGVAR(dropItems), LINKFUNC(eventTargetStart)] call CBA_fnc_addEventHandler; +[QGVAR(debugCallback), LINKFUNC(eventCallerFinish)] call CBA_fnc_addEventHandler; diff --git a/addons/dogtags/XEH_postInit.sqf b/addons/dogtags/XEH_postInit.sqf index f683f6f253..d9c35dc172 100644 --- a/addons/dogtags/XEH_postInit.sqf +++ b/addons/dogtags/XEH_postInit.sqf @@ -1,9 +1,9 @@ #include "script_component.hpp" -[QGVAR(showDogtag), DFUNC(showDogtag)] call CBA_fnc_addEventHandler; -[QGVAR(sendDogtagData), DFUNC(sendDogtagData)] call CBA_fnc_addEventHandler; -[QGVAR(getDogtagItem), DFUNC(getDogtagItem)] call CBA_fnc_addEventHandler; -[QGVAR(addDogtagItem), DFUNC(addDogtagItem)] call CBA_fnc_addEventHandler; +[QGVAR(showDogtag), LINKFUNC(showDogtag)] call CBA_fnc_addEventHandler; +[QGVAR(sendDogtagData), LINKFUNC(sendDogtagData)] call CBA_fnc_addEventHandler; +[QGVAR(getDogtagItem), LINKFUNC(getDogtagItem)] call CBA_fnc_addEventHandler; +[QGVAR(addDogtagItem), LINKFUNC(addDogtagItem)] call CBA_fnc_addEventHandler; // Add actions and event handlers only if ace_medical is loaded // - Adding actions via config would create a dependency diff --git a/addons/dragging/functions/fnc_carryObject.sqf b/addons/dragging/functions/fnc_carryObject.sqf index bf49282b9e..4d5ac8b61b 100644 --- a/addons/dragging/functions/fnc_carryObject.sqf +++ b/addons/dragging/functions/fnc_carryObject.sqf @@ -53,7 +53,7 @@ _unit setVariable [QGVAR(releaseActionID), [ ] call EFUNC(common,addActionEventHandler)]; // Add anim changed EH -[_unit, "AnimChanged", FUNC(handleAnimChanged), [_unit]] call CBA_fnc_addBISEventHandler; +[_unit, "AnimChanged", LINKFUNC(handleAnimChanged), [_unit]] call CBA_fnc_addBISEventHandler; // Prevent UAVs from firing private _UAVCrew = _target call EFUNC(common,getVehicleUAVCrew); @@ -67,4 +67,4 @@ if (_UAVCrew isNotEqualTo []) then { }; // Check everything -[FUNC(carryObjectPFH), 0.5, [_unit, _target, CBA_missionTime]] call CBA_fnc_addPerFrameHandler; +[LINKFUNC(carryObjectPFH), 0.5, [_unit, _target, CBA_missionTime]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/dragging/functions/fnc_dragObject.sqf b/addons/dragging/functions/fnc_dragObject.sqf index a0cbfd2528..5116f440b3 100644 --- a/addons/dragging/functions/fnc_dragObject.sqf +++ b/addons/dragging/functions/fnc_dragObject.sqf @@ -66,7 +66,7 @@ if (!GVAR(dragAndFire)) then { }; // Add anim changed EH -[_unit, "AnimChanged", FUNC(handleAnimChanged), [_unit]] call CBA_fnc_addBISEventHandler; +[_unit, "AnimChanged", LINKFUNC(handleAnimChanged), [_unit]] call CBA_fnc_addBISEventHandler; // Prevent UAVs from firing private _UAVCrew = _target call EFUNC(common,getVehicleUAVCrew); @@ -80,7 +80,7 @@ if (_UAVCrew isNotEqualTo []) then { }; // Check everything -[FUNC(dragObjectPFH), 0.5, [_unit, _target, CBA_missionTime]] call CBA_fnc_addPerFrameHandler; +[LINKFUNC(dragObjectPFH), 0.5, [_unit, _target, CBA_missionTime]] call CBA_fnc_addPerFrameHandler; // Fixes not being able to move when in combat pace [_unit, "forceWalk", QUOTE(ADDON), true] call EFUNC(common,statusEffect_set); diff --git a/addons/dragging/functions/fnc_startCarryLocal.sqf b/addons/dragging/functions/fnc_startCarryLocal.sqf index f4fec17c74..6ba2c68934 100644 --- a/addons/dragging/functions/fnc_startCarryLocal.sqf +++ b/addons/dragging/functions/fnc_startCarryLocal.sqf @@ -84,7 +84,7 @@ _unit setVariable [QGVAR(isCarrying), true, true]; // Required for aborting animation _unit setVariable [QGVAR(carriedObject), _target, true]; -[FUNC(startCarryPFH), 0.2, [_unit, _target, _timer]] call CBA_fnc_addPerFrameHandler; +[LINKFUNC(startCarryPFH), 0.2, [_unit, _target, _timer]] call CBA_fnc_addPerFrameHandler; // Disable collisions by setting the PhysX mass to almost zero private _mass = getMass _target; diff --git a/addons/dragging/functions/fnc_startDragLocal.sqf b/addons/dragging/functions/fnc_startDragLocal.sqf index d11b606819..22c7cecd24 100644 --- a/addons/dragging/functions/fnc_startDragLocal.sqf +++ b/addons/dragging/functions/fnc_startDragLocal.sqf @@ -96,7 +96,7 @@ if (_target isKindOf "CAManBase") then { // Prevents dragging and carrying at the same time _unit setVariable [QGVAR(isDragging), true, true]; -[FUNC(startDragPFH), 0.2, [_unit, _target, CBA_missionTime + 5]] call CBA_fnc_addPerFrameHandler; +[LINKFUNC(startDragPFH), 0.2, [_unit, _target, CBA_missionTime + 5]] call CBA_fnc_addPerFrameHandler; // Disable collisions by setting the physx mass to almost zero private _mass = getMass _target; diff --git a/addons/explosives/XEH_postInit.sqf b/addons/explosives/XEH_postInit.sqf index 6c32bb0563..81ab1b5406 100644 --- a/addons/explosives/XEH_postInit.sqf +++ b/addons/explosives/XEH_postInit.sqf @@ -27,7 +27,7 @@ }; }; }] call CBA_fnc_addEventHandler; -[QGVAR(startDefuse), FUNC(startDefuse)] call CBA_fnc_addEventHandler; +[QGVAR(startDefuse), LINKFUNC(startDefuse)] call CBA_fnc_addEventHandler; //When getting knocked out in medical, trigger deadman explosives: //Event is global, only run on server (ref: ace_medical_fnc_setUnconscious) diff --git a/addons/explosives/functions/fnc_dialPhone.sqf b/addons/explosives/functions/fnc_dialPhone.sqf index 860f7ddfde..f0609e2b0d 100644 --- a/addons/explosives/functions/fnc_dialPhone.sqf +++ b/addons/explosives/functions/fnc_dialPhone.sqf @@ -30,7 +30,7 @@ for "_i" from 1 to _ran do { }; if (_unit == ace_player) then { ctrlSetText [1400,"Calling"]; - [FUNC(dialingPhone), 0.25, [_unit,4,_arr,_code]] call CALLSTACK(CBA_fnc_addPerFrameHandler); + [LINKFUNC(dialingPhone), 0.25, [_unit,4,_arr,_code]] call CALLSTACK(CBA_fnc_addPerFrameHandler); } else { private _explosive = [_code] call FUNC(getSpeedDialExplosive); if ((count _explosive) > 0) then { diff --git a/addons/fastroping/XEH_postInit.sqf b/addons/fastroping/XEH_postInit.sqf index 27d3ca4008..650b277dbf 100644 --- a/addons/fastroping/XEH_postInit.sqf +++ b/addons/fastroping/XEH_postInit.sqf @@ -1,11 +1,9 @@ #include "script_component.hpp" -[QGVAR(deployRopes), { - _this call FUNC(deployRopes); -}] call CBA_fnc_addEventHandler; +[QGVAR(deployRopes), LINKFUNC(deployRopes)] call CBA_fnc_addEventHandler; [QGVAR(startFastRope), { - [FUNC(fastRopeServerPFH), 0, _this] call CBA_fnc_addPerFrameHandler; + [LINKFUNC(fastRopeServerPFH), 0, _this] call CBA_fnc_addPerFrameHandler; }] call CBA_fnc_addEventHandler; // Keybinds diff --git a/addons/fastroping/functions/fnc_fastRope.sqf b/addons/fastroping/functions/fnc_fastRope.sqf index 80be870553..430c8d86ca 100644 --- a/addons/fastroping/functions/fnc_fastRope.sqf +++ b/addons/fastroping/functions/fnc_fastRope.sqf @@ -36,4 +36,4 @@ _vehicle setVariable [QGVAR(deployedRopes), _deployedRopes, true]; //Start server PFH asap [QGVAR(startFastRope), [_unit, _vehicle, _usableRope, _usableRopeIndex, false]] call CBA_fnc_serverEvent; moveOut _unit; -[FUNC(fastRopeLocalPFH), 0, [_unit, _vehicle, _usableRope, _usableRopeIndex, diag_tickTime]] call CBA_fnc_addPerFrameHandler; +[LINKFUNC(fastRopeLocalPFH), 0, [_unit, _vehicle, _usableRope, _usableRopeIndex, diag_tickTime]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/fcs/functions/fnc_firedEH.sqf b/addons/fcs/functions/fnc_firedEH.sqf index 52edd6417f..e99416593a 100644 --- a/addons/fcs/functions/fnc_firedEH.sqf +++ b/addons/fcs/functions/fnc_firedEH.sqf @@ -72,5 +72,5 @@ if (getNumber (configFile >> "CfgAmmo" >> _ammo >> QGVAR(Airburst)) == 1) then { if (_zeroing < 50) exitWith {}; if (_zeroing > 1500) exitWith {}; - [FUNC(handleAirBurstAmmunitionPFH), 0, [_vehicle, _projectile, _zeroing]] call CBA_fnc_addPerFrameHandler; + [LINKFUNC(handleAirBurstAmmunitionPFH), 0, [_vehicle, _projectile, _zeroing]] call CBA_fnc_addPerFrameHandler; }; diff --git a/addons/field_rations/XEH_postInit.sqf b/addons/field_rations/XEH_postInit.sqf index 1ee235ca4f..9f64379094 100644 --- a/addons/field_rations/XEH_postInit.sqf +++ b/addons/field_rations/XEH_postInit.sqf @@ -96,7 +96,7 @@ if !(hasInterface) exitWith {}; ] call CBA_fnc_addItemContextMenuOption; // Add water source helpers when interaction menu is opened - ["ace_interactMenuOpened", {call FUNC(addWaterSourceInteractions)}] call CBA_fnc_addEventHandler; + ["ace_interactMenuOpened", LINKFUNC(addWaterSourceInteractions)] call CBA_fnc_addEventHandler; // Add status modifiers if (["ace_medical"] call EFUNC(common,isModLoaded)) then { @@ -134,7 +134,7 @@ if !(hasInterface) exitWith {}; ["CAManBase", "respawn", LINKFUNC(handleRespawn)] call CBA_fnc_addClassEventHandler; // Start update loop - [FUNC(update), CBA_missionTime + MP_SYNC_INTERVAL, 1] call CBA_fnc_waitAndExecute; + [LINKFUNC(update), CBA_missionTime + MP_SYNC_INTERVAL, 1] call CBA_fnc_waitAndExecute; #ifdef DEBUG_MODE_FULL ["ACE_player thirst", {ACE_player getVariable [QXGVAR(thirst), 0]}, [true, 0, 100]] call EFUNC(common,watchVariable); diff --git a/addons/field_rations/functions/fnc_update.sqf b/addons/field_rations/functions/fnc_update.sqf index 82b87bcfb6..f66573824b 100644 --- a/addons/field_rations/functions/fnc_update.sqf +++ b/addons/field_rations/functions/fnc_update.sqf @@ -25,7 +25,7 @@ private _player = ACE_player; // Exit if player is not alive or a virtual unit if (!alive _player || {_player isKindOf "VirtualMan_F"}) exitWith { - [FUNC(update), _nextMpSync, 1] call CBA_fnc_waitAndExecute; + [LINKFUNC(update), _nextMpSync, 1] call CBA_fnc_waitAndExecute; QGVAR(hud) cutFadeOut 0.5; }; @@ -73,4 +73,4 @@ if (!EGVAR(common,OldIsCamera) && {_thirst > XGVAR(hudShowLevel) || {_hunger > X QGVAR(hud) cutFadeOut 0.5; }; -[FUNC(update), _nextMpSync, 1] call CBA_fnc_waitAndExecute; +[LINKFUNC(update), _nextMpSync, 1] call CBA_fnc_waitAndExecute; diff --git a/addons/finger/XEH_postInit.sqf b/addons/finger/XEH_postInit.sqf index 641c94ff92..6a44a5ae79 100644 --- a/addons/finger/XEH_postInit.sqf +++ b/addons/finger/XEH_postInit.sqf @@ -11,7 +11,7 @@ if (!hasInterface) exitWith {}; GVAR(fingersHash) = createHashMap; GVAR(pfeh_id) = -1; - [QGVAR(fingered), {_this call FUNC(incomingFinger)}] call CBA_fnc_addEventHandler; + [QGVAR(fingered), LINKFUNC(incomingFinger)] call CBA_fnc_addEventHandler; }] call CBA_fnc_addEventHandler; //Add Keybind: diff --git a/addons/fire/XEH_postInit.sqf b/addons/fire/XEH_postInit.sqf index ec40646ca9..571c0033d9 100644 --- a/addons/fire/XEH_postInit.sqf +++ b/addons/fire/XEH_postInit.sqf @@ -1,6 +1,6 @@ #include "script_component.hpp" -[QGVAR(burn), FUNC(burn)] call CBA_fnc_addEventHandler; +[QGVAR(burn), LINKFUNC(burn)] call CBA_fnc_addEventHandler; [QGVAR(playScream), { params ["_scream", "_source"]; // only play sound if enabled in settings and enabled for the unit @@ -31,7 +31,7 @@ [GVAR(fireSources), _key] call CBA_fnc_hashRem; }] call CBA_fnc_addEventHandler; - [{ _this call FUNC(fireManagerPFH) }, FIRE_MANAGER_PFH_DELAY, []] call CBA_fnc_addPerFrameHandler; + [LINKFUNC(fireManagerPFH), FIRE_MANAGER_PFH_DELAY, []] call CBA_fnc_addPerFrameHandler; GVAR(fireSources) = [[], nil] call CBA_fnc_hashCreate; }; }] call CBA_fnc_addEventHandler; diff --git a/addons/fire/functions/fnc_burn.sqf b/addons/fire/functions/fnc_burn.sqf index a98aea9bc8..1d829dfc45 100644 --- a/addons/fire/functions/fnc_burn.sqf +++ b/addons/fire/functions/fnc_burn.sqf @@ -244,7 +244,7 @@ if (_isBurning) exitWith {}; private _burnIndicatorPFH = _unit getVariable [QGVAR(burnUIPFH), -1]; if (_unit isEqualTo ace_player && { _isThisUnitAlive } && { _burnIndicatorPFH < 0 }) then { - _burnIndicatorPFH = [FUNC(burnIndicator), 1, _unit] call CBA_fnc_addPerFrameHandler; + _burnIndicatorPFH = [LINKFUNC(burnIndicator), 1, _unit] call CBA_fnc_addPerFrameHandler; _unit setVariable [QGVAR(burnUIPFH), _burnIndicatorPFH]; }; }; @@ -296,7 +296,7 @@ if (_isBurning) exitWith {}; if (local _unit) then { if (_unit isEqualTo ace_player) then { - private _burnIndicatorPFH = [FUNC(burnIndicator), 1, _unit] call CBA_fnc_addPerFrameHandler; + private _burnIndicatorPFH = [LINKFUNC(burnIndicator), 1, _unit] call CBA_fnc_addPerFrameHandler; _unit setVariable [QGVAR(burnUIPFH), _burnIndicatorPFH]; }; diff --git a/addons/frag/XEH_postInit.sqf b/addons/frag/XEH_postInit.sqf index ecebd793ce..096b4dde97 100644 --- a/addons/frag/XEH_postInit.sqf +++ b/addons/frag/XEH_postInit.sqf @@ -2,7 +2,7 @@ if (isServer) then { GVAR(lastFragTime) = -1; - [QGVAR(frag_eh), {_this call FUNC(frago);}] call CBA_fnc_addEventHandler; + [QGVAR(frag_eh), LINKFUNC(frago)] call CBA_fnc_addEventHandler; }; ["CBA_settingsInitialized", { diff --git a/addons/frag/functions/fnc_doReflections.sqf b/addons/frag/functions/fnc_doReflections.sqf index 023a283e81..70c7471181 100644 --- a/addons/frag/functions/fnc_doReflections.sqf +++ b/addons/frag/functions/fnc_doReflections.sqf @@ -22,5 +22,5 @@ if (_depth <= 2) then { private _indirectHitRange = getNumber(configFile >> "CfgAmmo" >> _ammo >> "indirectHitRange"); private _indirectHit = getNumber(configFile >> "CfgAmmo" >> _ammo >> "indirectHit"); private _testParams = [_pos, [_indirectHitRange, _indirectHit], [], [], -4, _depth, 0]; - [DFUNC(findReflections), 0, _testParams] call CBA_fnc_addPerFrameHandler; + [LINKFUNC(findReflections), 0, _testParams] call CBA_fnc_addPerFrameHandler; }; diff --git a/addons/goggles/XEH_postInit.sqf b/addons/goggles/XEH_postInit.sqf index 7700d4cc81..e5a6bf5d1c 100644 --- a/addons/goggles/XEH_postInit.sqf +++ b/addons/goggles/XEH_postInit.sqf @@ -88,10 +88,10 @@ if (!hasInterface) exitWith {}; if (GVAR(effects) in [2, 3]) then { // Register fire event handler - ["ace_firedPlayer", DFUNC(handleFired)] call CBA_fnc_addEventHandler; + ["ace_firedPlayer", LINKFUNC(handleFired)] call CBA_fnc_addEventHandler; //Add Explosion XEH - ["CAManBase", "explosion", FUNC(handleExplosion)] call CBA_fnc_addClassEventHandler; + ["CAManBase", "explosion", LINKFUNC(handleExplosion)] call CBA_fnc_addClassEventHandler; GVAR(PostProcessEyes) = ppEffectCreate ["ColorCorrections", 1992]; GVAR(PostProcessEyes) ppEffectAdjust [1, 1, 0, [0, 0, 0, 0], [0, 0, 0, 1], [1, 1, 1, 0]]; diff --git a/addons/grenades/XEH_postInit.sqf b/addons/grenades/XEH_postInit.sqf index 7f67e181cc..c23640bca5 100644 --- a/addons/grenades/XEH_postInit.sqf +++ b/addons/grenades/XEH_postInit.sqf @@ -2,12 +2,12 @@ #include "script_component.hpp" -["ace_flashbangExploded", {_this call FUNC(flashbangExplosionEH)}] call CBA_fnc_addEventHandler; +["ace_flashbangExploded", LINKFUNC(flashbangExplosionEH)] call CBA_fnc_addEventHandler; // Register fired event handlers -["ace_firedPlayer", DFUNC(throwGrenade)] call CBA_fnc_addEventHandler; -["ace_firedPlayerNonLocal", DFUNC(throwGrenade)] call CBA_fnc_addEventHandler; -["ace_firedNonPlayer", DFUNC(throwGrenade)] call CBA_fnc_addEventHandler; +["ace_firedPlayer", LINKFUNC(throwGrenade)] call CBA_fnc_addEventHandler; +["ace_firedPlayerNonLocal", LINKFUNC(throwGrenade)] call CBA_fnc_addEventHandler; +["ace_firedNonPlayer", LINKFUNC(throwGrenade)] call CBA_fnc_addEventHandler; if (!hasInterface) exitWith {}; diff --git a/addons/headless/XEH_postInit.sqf b/addons/headless/XEH_postInit.sqf index 103d5c1834..63c7fd5038 100644 --- a/addons/headless/XEH_postInit.sqf +++ b/addons/headless/XEH_postInit.sqf @@ -6,7 +6,7 @@ if (isServer) then { // Request rebalance on any unit spawn (only if distribution enabled) if (XGVAR(enabled)) then { - ["AllVehicles", "initPost", FUNC(handleSpawn), nil, nil, true] call CBA_fnc_addClassEventHandler; + ["AllVehicles", "initPost", LINKFUNC(handleSpawn), nil, nil, true] call CBA_fnc_addClassEventHandler; }; // Add disconnect EH addMissionEventHandler ["HandleDisconnect", {call FUNC(handleDisconnect)}]; diff --git a/addons/headless/XEH_preInit.sqf b/addons/headless/XEH_preInit.sqf index bd64702f5c..d3b2c8ff5c 100644 --- a/addons/headless/XEH_preInit.sqf +++ b/addons/headless/XEH_preInit.sqf @@ -13,7 +13,7 @@ if (isServer) then { GVAR(inRebalance) = false; GVAR(endMissionCheckDelayed) = false; GVAR(blacklistType) = [BLACKLIST_UAV]; - [QXGVAR(headlessClientJoined), FUNC(handleConnectHC)] call CBA_fnc_addEventHandler; + [QXGVAR(headlessClientJoined), LINKFUNC(handleConnectHC)] call CBA_fnc_addEventHandler; }; ADDON = true; diff --git a/addons/intelitems/XEH_preInit.sqf b/addons/intelitems/XEH_preInit.sqf index 76f13135d9..ff09f6ea0e 100644 --- a/addons/intelitems/XEH_preInit.sqf +++ b/addons/intelitems/XEH_preInit.sqf @@ -18,8 +18,8 @@ if (isServer) then { GVAR(intelData) = [true] call CBA_fnc_createNamespace; publicVariable QGVAR(intelData); - [QGVAR(handleMagIndex), FUNC(handleMagIndex)] call CBA_fnc_addEventHandler; - [QGVAR(setObjectData), FUNC(setObjectData)] call CBA_fnc_addEventHandler; + [QGVAR(handleMagIndex), LINKFUNC(handleMagIndex)] call CBA_fnc_addEventHandler; + [QGVAR(setObjectData), LINKFUNC(setObjectData)] call CBA_fnc_addEventHandler; }; if (hasInterface) then { diff --git a/addons/interact_menu/XEH_clientInit.sqf b/addons/interact_menu/XEH_clientInit.sqf index a76bf90e1c..5c9a2ecae0 100644 --- a/addons/interact_menu/XEH_clientInit.sqf +++ b/addons/interact_menu/XEH_clientInit.sqf @@ -47,7 +47,7 @@ GVAR(ParsedTextCached) = []; }] call CBA_fnc_addEventHandler; //Add Actions to Houses: -["ace_interactMenuOpened", {_this call FUNC(userActions_addHouseActions)}] call CBA_fnc_addEventHandler; +["ace_interactMenuOpened", LINKFUNC(userActions_addHouseActions)] call CBA_fnc_addEventHandler; ["ACE3 Common", QGVAR(InteractKey), (localize LSTRING(InteractKey)), { diff --git a/addons/interact_menu/XEH_preInit.sqf b/addons/interact_menu/XEH_preInit.sqf index b60f1bb745..bf3278f0a3 100644 --- a/addons/interact_menu/XEH_preInit.sqf +++ b/addons/interact_menu/XEH_preInit.sqf @@ -10,7 +10,7 @@ PREP_RECOMPILE_END; if (!hasInterface) exitWith { ADDON = true; }; -["All", "init", {_this call FUNC(compileMenu)}] call CBA_fnc_addClassEventHandler; +["All", "init", LINKFUNC(compileMenu)] call CBA_fnc_addClassEventHandler; GVAR(ActNamespace) = [] call CBA_fnc_createNamespace; GVAR(ActSelfNamespace) = [] call CBA_fnc_createNamespace; diff --git a/addons/interaction/XEH_postInit.sqf b/addons/interaction/XEH_postInit.sqf index a5f7170588..0b32daaaf0 100644 --- a/addons/interaction/XEH_postInit.sqf +++ b/addons/interaction/XEH_postInit.sqf @@ -78,7 +78,7 @@ ACE_Modifier = 0; }] call CBA_fnc_addEventHandler; if (isServer) then { - [QGVAR(replaceTerrainObject), FUNC(replaceTerrainObject)] call CBA_fnc_addEventHandler; + [QGVAR(replaceTerrainObject), LINKFUNC(replaceTerrainObject)] call CBA_fnc_addEventHandler; }; if (!hasInterface) exitWith {}; diff --git a/addons/irlight/XEH_postInit.sqf b/addons/irlight/XEH_postInit.sqf index 47763b8414..d95186f07b 100644 --- a/addons/irlight/XEH_postInit.sqf +++ b/addons/irlight/XEH_postInit.sqf @@ -2,7 +2,7 @@ [] call FUNC(initItemContextMenu); -addUserActionEventHandler ["headlights", "Deactivate", FUNC(onLightToggled)]; +addUserActionEventHandler ["headlights", "Deactivate", LINKFUNC(onLightToggled)]; ["ACE3 Equipment", QGVAR(hold), LLSTRING(MomentarySwitch), { ACE_player action ["GunLightOn", ACE_player]; diff --git a/addons/laser/functions/fnc_addLaserTarget.sqf b/addons/laser/functions/fnc_addLaserTarget.sqf index 08ea6f65b0..3fc02b2189 100644 --- a/addons/laser/functions/fnc_addLaserTarget.sqf +++ b/addons/laser/functions/fnc_addLaserTarget.sqf @@ -55,5 +55,5 @@ TRACE_1("",GVAR(trackedLaserTargets)); if (GVAR(pfehID) == -1) then { TRACE_1("starting pfeh",count GVAR(trackedLaserTargets)); - GVAR(pfehID) = [DFUNC(laserTargetPFH), 0, []] call CBA_fnc_addPerFrameHandler; + GVAR(pfehID) = [LINKFUNC(laserTargetPFH), 0, []] call CBA_fnc_addPerFrameHandler; }; diff --git a/addons/logistics_wirecutter/XEH_postInit.sqf b/addons/logistics_wirecutter/XEH_postInit.sqf index 29dc506396..fc0a38bf26 100644 --- a/addons/logistics_wirecutter/XEH_postInit.sqf +++ b/addons/logistics_wirecutter/XEH_postInit.sqf @@ -1,11 +1,11 @@ #include "script_component.hpp" if (hasInterface) then { - ["ace_interactMenuOpened", {_this call FUNC(interactEH)}] call CBA_fnc_addEventHandler; + ["ace_interactMenuOpened", LINKFUNC(interactEH)] call CBA_fnc_addEventHandler; }; if (isServer) then { - [QGVAR(destroyFence), {_this call FUNC(destroyFence)}] call CBA_fnc_addEventHandler; + [QGVAR(destroyFence), LINKFUNC(destroyFence)] call CBA_fnc_addEventHandler; }; GVAR(possibleWirecutters) = call (uiNamespace getVariable [QGVAR(possibleWirecutters), {[]}]); diff --git a/addons/map/initSettings.inc.sqf b/addons/map/initSettings.inc.sqf index fa248bf736..8de301eaa1 100644 --- a/addons/map/initSettings.inc.sqf +++ b/addons/map/initSettings.inc.sqf @@ -71,7 +71,7 @@ if (GVAR(BFT_Enabled) && {isNil QGVAR(BFT_markers)}) then { GVAR(BFT_markers) = []; - [FUNC(blueForceTrackingUpdate), GVAR(BFT_Interval), []] call CBA_fnc_addPerFrameHandler; + [LINKFUNC(blueForceTrackingUpdate), GVAR(BFT_Interval), []] call CBA_fnc_addPerFrameHandler; }; }, false diff --git a/addons/markers/XEH_postInit.sqf b/addons/markers/XEH_postInit.sqf index 43a1acbf29..1ae489dd82 100644 --- a/addons/markers/XEH_postInit.sqf +++ b/addons/markers/XEH_postInit.sqf @@ -2,10 +2,10 @@ #include "script_component.hpp" // recieve remote marker data -[QGVAR(setMarkerNetwork), {_this call DFUNC(setMarkerNetwork)}] call CBA_fnc_addEventHandler; +[QGVAR(setMarkerNetwork), LINKFUNC(setMarkerNetwork)] call CBA_fnc_addEventHandler; // recieve marker data for JIP -[QGVAR(setMarkerJIP), {_this call DFUNC(setMarkerJIP)}] call CBA_fnc_addEventHandler; +[QGVAR(setMarkerJIP), LINKFUNC(setMarkerJIP)] call CBA_fnc_addEventHandler; // request marker data for JIP if (isMultiplayer && {!isServer} && {hasInterface}) then { diff --git a/addons/markers/functions/fnc_onMouseButtonDown.sqf b/addons/markers/functions/fnc_onMouseButtonDown.sqf index ce4d637400..f0130c7c9d 100644 --- a/addons/markers/functions/fnc_onMouseButtonDown.sqf +++ b/addons/markers/functions/fnc_onMouseButtonDown.sqf @@ -37,5 +37,5 @@ if (_type == "marker" && {_marker find "_USER_DEFINED" != -1 && {_marker call FU GVAR(moving) = true; _marker setMarkerAlphaLocal 0.5; - [FUNC(movePFH), 0, [_marker, _ctrlMap, _originalPos, _originalAlpha]] call CBA_fnc_addPerFrameHandler; + [LINKFUNC(movePFH), 0, [_marker, _ctrlMap, _originalPos, _originalAlpha]] call CBA_fnc_addPerFrameHandler; }; diff --git a/addons/medical_blood/XEH_postInit.sqf b/addons/medical_blood/XEH_postInit.sqf index 9ef55adf0e..daf4595584 100644 --- a/addons/medical_blood/XEH_postInit.sqf +++ b/addons/medical_blood/XEH_postInit.sqf @@ -3,7 +3,7 @@ GVAR(useAceMedical) = ["ace_medical"] call EFUNC(common,isModLoaded); // To support public API regardless of component settings -[QGVAR(spurt), FUNC(spurt)] call CBA_fnc_addEventHandler; +[QGVAR(spurt), LINKFUNC(spurt)] call CBA_fnc_addEventHandler; if (isServer) then { GVAR(bloodDrops) = []; @@ -21,7 +21,7 @@ if (isServer) then { // Start the cleanup loop if (_index == 0) then { - [FUNC(cleanupLoop), [], GVAR(bloodLifetime)] call CBA_fnc_waitAndExecute; + [LINKFUNC(cleanupLoop), [], GVAR(bloodLifetime)] call CBA_fnc_waitAndExecute; }; }] call CBA_fnc_addEventHandler; }; diff --git a/addons/medical_blood/functions/fnc_init.sqf b/addons/medical_blood/functions/fnc_init.sqf index 86c0c668c1..6392a6e451 100644 --- a/addons/medical_blood/functions/fnc_init.sqf +++ b/addons/medical_blood/functions/fnc_init.sqf @@ -60,6 +60,6 @@ private _listCode = if (_mode == BLOOD_ONLY_PLAYERS) then { GVAR(stateMachine) = [_listCode, true] call CBA_statemachine_fnc_create; [GVAR(stateMachine), LINKFUNC(onBleeding), {}, {}, "Bleeding"] call CBA_statemachine_fnc_addState; -GVAR(woundReceivedEH) = [QEGVAR(medical,woundReceived), FUNC(handleWoundReceived)] call CBA_fnc_addEventHandler; +GVAR(woundReceivedEH) = [QEGVAR(medical,woundReceived), LINKFUNC(handleWoundReceived)] call CBA_fnc_addEventHandler; TRACE_3("Set up state machine and wounds event",_mode,GVAR(stateMachine),GVAR(woundReceivedEH)); diff --git a/addons/medical_feedback/XEH_postInit.sqf b/addons/medical_feedback/XEH_postInit.sqf index fbbf57cb65..f01394e919 100644 --- a/addons/medical_feedback/XEH_postInit.sqf +++ b/addons/medical_feedback/XEH_postInit.sqf @@ -30,7 +30,7 @@ GVAR(bloodTickCounter) = 0; [false] call FUNC(initEffects); [true] call FUNC(handleEffects); -[FUNC(handleEffects), 1, false] call CBA_fnc_addPerFrameHandler; +[LINKFUNC(handleEffects), 1, false] call CBA_fnc_addPerFrameHandler; ["ace_unconscious", { params ["_unit", "_unconscious"]; diff --git a/addons/medical_gui/functions/fnc_onMenuOpen.sqf b/addons/medical_gui/functions/fnc_onMenuOpen.sqf index e77d92bddd..12b27b60d9 100644 --- a/addons/medical_gui/functions/fnc_onMenuOpen.sqf +++ b/addons/medical_gui/functions/fnc_onMenuOpen.sqf @@ -41,7 +41,7 @@ if (GVAR(menuPFH) != -1) exitWith { TRACE_1("Menu PFH already running",GVAR(menuPFH)); }; -GVAR(menuPFH) = [FUNC(menuPFH), 0, []] call CBA_fnc_addPerFrameHandler; +GVAR(menuPFH) = [LINKFUNC(menuPFH), 0, []] call CBA_fnc_addPerFrameHandler; // Hide categories if they don't have any actions (airway) private _list = [ diff --git a/addons/microdagr/XEH_clientInit.sqf b/addons/microdagr/XEH_clientInit.sqf index 8a5db92e0b..c17914ad4b 100644 --- a/addons/microdagr/XEH_clientInit.sqf +++ b/addons/microdagr/XEH_clientInit.sqf @@ -35,7 +35,7 @@ private _closeCode = { }, ""] call CBA_fnc_addKeybind; //Add Eventhandler: -[QEGVAR(vector,rangefinderData), {_this call FUNC(recieveRangefinderData)}] call CBA_fnc_addEventHandler; +[QEGVAR(vector,rangefinderData), LINKFUNC(recieveRangefinderData)] call CBA_fnc_addEventHandler; //Global Variables to default: GVAR(gpsPositionASL) = [0,0,0]; diff --git a/addons/minedetector/XEH_postInit.sqf b/addons/minedetector/XEH_postInit.sqf index 0b8a521155..77f2f6761c 100644 --- a/addons/minedetector/XEH_postInit.sqf +++ b/addons/minedetector/XEH_postInit.sqf @@ -12,8 +12,8 @@ private _detectableClasses = call (uiNamespace getVariable [QGVAR(detectableClas } forEach _detectableClasses; TRACE_1("built cache",count allVariables GVAR(detectableClasses)); -[QGVAR(enableDetector), FUNC(enableDetector)] call CBA_fnc_addEventHandler; -[QGVAR(disableDetector), FUNC(disableDetector)] call CBA_fnc_addEventHandler; +[QGVAR(enableDetector), LINKFUNC(enableDetector)] call CBA_fnc_addEventHandler; +[QGVAR(disableDetector), LINKFUNC(disableDetector)] call CBA_fnc_addEventHandler; // Shows detector and mine posistions in 3d when debug is on #ifdef DEBUG_MODE_FULL diff --git a/addons/minedetector/functions/fnc_enableDetector.sqf b/addons/minedetector/functions/fnc_enableDetector.sqf index b673176086..55b58dcf3a 100644 --- a/addons/minedetector/functions/fnc_enableDetector.sqf +++ b/addons/minedetector/functions/fnc_enableDetector.sqf @@ -31,4 +31,4 @@ if (_unit == ACE_player) then { [QGVAR(detectorEnabled), [_unit, _detectorType]] call CBA_fnc_localEvent; private _config = [_detectorType] call FUNC(getDetectorConfig); -[FUNC(detectorLoop), 0.05, [_unit, _detectorType, _config, CBA_missionTime - 0.25]] call CBA_fnc_addPerFrameHandler; +[LINKFUNC(detectorLoop), 0.05, [_unit, _detectorType, _config, CBA_missionTime - 0.25]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/missileguidance/XEH_postInit.sqf b/addons/missileguidance/XEH_postInit.sqf index cc09b1f0ac..eb0fb60abf 100644 --- a/addons/missileguidance/XEH_postInit.sqf +++ b/addons/missileguidance/XEH_postInit.sqf @@ -1,6 +1,6 @@ #include "script_component.hpp" -[QGVAR(handoff), {_this call FUNC(handleHandoff)}] call CBA_fnc_addEventHandler; +[QGVAR(handoff), LINKFUNC(handleHandoff)] call CBA_fnc_addEventHandler; ["ACE3 Weapons", QGVAR(cycleFireMode), localize LSTRING(CycleFireMode), { diff --git a/addons/missileguidance/functions/fnc_handleHandoff.sqf b/addons/missileguidance/functions/fnc_handleHandoff.sqf index 9c6e299d01..785071da01 100644 --- a/addons/missileguidance/functions/fnc_handleHandoff.sqf +++ b/addons/missileguidance/functions/fnc_handleHandoff.sqf @@ -19,4 +19,4 @@ params ["_target", "_args"]; if (isNil "_target" || {isNull _target} || {!local _target} ) exitWith { false }; -[FUNC(guidancePFH), 0, _args] call CBA_fnc_addPerFrameHandler; +[LINKFUNC(guidancePFH), 0, _args] call CBA_fnc_addPerFrameHandler; diff --git a/addons/missileguidance/functions/fnc_onFired.sqf b/addons/missileguidance/functions/fnc_onFired.sqf index 1f3519f8c9..18eaf2a7c7 100644 --- a/addons/missileguidance/functions/fnc_onFired.sqf +++ b/addons/missileguidance/functions/fnc_onFired.sqf @@ -145,7 +145,7 @@ if (_onFiredFunc != "") then { // _stateParams params ["_lastRunTime", "_seekerStateParams", "_attackProfileStateParams", "_lastKnownPosState"]; // _seekerParams params ["_seekerAngle", "_seekerAccuracy", "_seekerMaxRange", "_seekerMinRange"]; -[FUNC(guidancePFH), 0, _args ] call CBA_fnc_addPerFrameHandler; +[LINKFUNC(guidancePFH), 0, _args ] call CBA_fnc_addPerFrameHandler; /* Clears locking settings diff --git a/addons/mk6mortar/XEH_postInit.sqf b/addons/mk6mortar/XEH_postInit.sqf index aa5f2774df..280e16cf79 100644 --- a/addons/mk6mortar/XEH_postInit.sqf +++ b/addons/mk6mortar/XEH_postInit.sqf @@ -2,16 +2,16 @@ if (hasInterface) then { #include "initKeybinds.inc.sqf" - ["ace_infoDisplayChanged", FUNC(turretDisplayLoaded)] call CBA_fnc_addEventHandler; + ["ace_infoDisplayChanged", LINKFUNC(turretDisplayLoaded)] call CBA_fnc_addEventHandler; }; ["CBA_settingsInitialized", { TRACE_4("CBA_settingsInitialized",GVAR(airResistanceEnabled),GVAR(allowComputerRangefinder),GVAR(allowCompass),GVAR(useAmmoHandling)); - ["vehicle", FUNC(handlePlayerVehicleChanged), true] call CBA_fnc_addPlayerEventHandler; + ["vehicle", LINKFUNC(handlePlayerVehicleChanged), true] call CBA_fnc_addPlayerEventHandler; if (!GVAR(airResistanceEnabled)) exitWith {}; if (EGVAR(artillerytables,advancedCorrections)) exitWith { TRACE_1("defer firedEH to artillerytables",_this); }; - ["Mortar_01_base_F", "fired", {call FUNC(handleFired)}] call CBA_fnc_addClassEventHandler; + ["Mortar_01_base_F", "fired", LINKFUNC(handleFired)] call CBA_fnc_addClassEventHandler; }] call CBA_fnc_addEventHandler; diff --git a/addons/movement/XEH_postInit.sqf b/addons/movement/XEH_postInit.sqf index f64b92603b..4d7cc5ba12 100644 --- a/addons/movement/XEH_postInit.sqf +++ b/addons/movement/XEH_postInit.sqf @@ -3,8 +3,8 @@ if (!hasInterface) exitWith {}; -["unit", FUNC(handleVirtualMass)] call CBA_fnc_addPlayerEventHandler; -["loadout", FUNC(handleVirtualMass)] call CBA_fnc_addPlayerEventHandler; +["unit", LINKFUNC(handleVirtualMass)] call CBA_fnc_addPlayerEventHandler; +["loadout", LINKFUNC(handleVirtualMass)] call CBA_fnc_addPlayerEventHandler; ["ACE3 Movement", QGVAR(climb), localize LSTRING(Climb), { // Conditions: canInteract diff --git a/addons/optics/XEH_postInit.sqf b/addons/optics/XEH_postInit.sqf index abb97e5b5d..1641ee2174 100644 --- a/addons/optics/XEH_postInit.sqf +++ b/addons/optics/XEH_postInit.sqf @@ -28,4 +28,4 @@ GVAR(camera) = objNull; }] call CBA_fnc_addPlayerEventHandler; // Register fire event handler -["ace_firedPlayer", DFUNC(handleFired)] call CBA_fnc_addEventHandler; +["ace_firedPlayer", LINKFUNC(handleFired)] call CBA_fnc_addEventHandler; diff --git a/addons/overheating/XEH_postInit.sqf b/addons/overheating/XEH_postInit.sqf index 8f02d734e5..a49030b1ad 100644 --- a/addons/overheating/XEH_postInit.sqf +++ b/addons/overheating/XEH_postInit.sqf @@ -35,8 +35,8 @@ if (hasInterface) then { GVAR(storedSpareBarrels) = createHashMap; // Install event handlers for spare barrels - [QGVAR(sendSpareBarrelTemperatureHint), FUNC(sendSpareBarrelsTemperaturesHint)] call CBA_fnc_addEventHandler; - [QGVAR(loadCoolestSpareBarrel), FUNC(loadCoolestSpareBarrel)] call CBA_fnc_addEventHandler; + [QGVAR(sendSpareBarrelTemperatureHint), LINKFUNC(sendSpareBarrelsTemperaturesHint)] call CBA_fnc_addEventHandler; + [QGVAR(loadCoolestSpareBarrel), LINKFUNC(loadCoolestSpareBarrel)] call CBA_fnc_addEventHandler; // Schedule cool down calculation of stored spare barrels [] call FUNC(updateSpareBarrelsTemperaturesThread); @@ -50,14 +50,14 @@ if (hasInterface) then { //Add Take EH if required if (GVAR(unJamOnReload) || {GVAR(cookoffCoef) > 0}) then { - ["CAManBase", "Take", {_this call FUNC(handleTakeEH);}] call CBA_fnc_addClassEventHandler; + ["CAManBase", "Take", LINKFUNC(handleTakeEH)] call CBA_fnc_addClassEventHandler; }; // Register fire event handler - ["ace_firedPlayer", DFUNC(firedEH)] call CBA_fnc_addEventHandler; + ["ace_firedPlayer", LINKFUNC(firedEH)] call CBA_fnc_addEventHandler; // Only add eh to non local players if dispersion is enabled if (GVAR(overheatingDispersion) || {GVAR(showParticleEffectsForEveryone)}) then { - ["ace_firedPlayerNonLocal", DFUNC(firedEH)] call CBA_fnc_addEventHandler; + ["ace_firedPlayerNonLocal", LINKFUNC(firedEH)] call CBA_fnc_addEventHandler; }; // Schedule cool down calculation of player weapons at (infrequent) regular intervals @@ -86,10 +86,10 @@ if (hasInterface) then { }] call CBA_fnc_addClassEventHandler; // Install event handler to display temp when a barrel was swapped - [QGVAR(showWeaponTemperature), DFUNC(displayTemperature)] call CBA_fnc_addEventHandler; + [QGVAR(showWeaponTemperature), LINKFUNC(displayTemperature)] call CBA_fnc_addEventHandler; // Install event handler to initiate an assisted barrel swap - [QGVAR(initiateSwapBarrelAssisted), DFUNC(swapBarrel)] call CBA_fnc_addEventHandler; + [QGVAR(initiateSwapBarrelAssisted), LINKFUNC(swapBarrel)] call CBA_fnc_addEventHandler; // Add an action to allow hot weapons to be cooled off in AceX Field Rations water sources if (["acex_field_rations"] call EFUNC(common,isModLoaded)) then { diff --git a/addons/parachute/XEH_postInit.sqf b/addons/parachute/XEH_postInit.sqf index 1217fa3cab..f10748b0cf 100644 --- a/addons/parachute/XEH_postInit.sqf +++ b/addons/parachute/XEH_postInit.sqf @@ -34,9 +34,9 @@ if (!hasInterface) exitWith {}; }, {false}, [24, [false, false, false]], false] call CBA_fnc_addKeybind; // Handle reserve chute based on current backpack (fires when parachute opens too) -["loadout", FUNC(handleReserve), true] call CBA_fnc_addPlayerEventHandler; +["loadout", LINKFUNC(handleReserve), true] call CBA_fnc_addPlayerEventHandler; // Don't show vanilla speed and height when in expert mode -["ace_infoDisplayChanged", {_this call FUNC(handleInfoDisplayChanged)}] call CBA_fnc_addEventHandler; +["ace_infoDisplayChanged", LINKFUNC(handleInfoDisplayChanged)] call CBA_fnc_addEventHandler; -["vehicle", {_this call FUNC(handleFailureChance)}] call CBA_fnc_addPlayerEventHandler; +["vehicle", LINKFUNC(handleFailureChance)] call CBA_fnc_addPlayerEventHandler; diff --git a/addons/recoil/XEH_postInit.sqf b/addons/recoil/XEH_postInit.sqf index 29e5464612..639b22d6f9 100644 --- a/addons/recoil/XEH_postInit.sqf +++ b/addons/recoil/XEH_postInit.sqf @@ -1,4 +1,4 @@ #include "script_component.hpp" // Register fire event handler -["ace_firedPlayer", DFUNC(camShake)] call CBA_fnc_addEventHandler; +["ace_firedPlayer", LINKFUNC(camShake)] call CBA_fnc_addEventHandler; diff --git a/addons/repair/XEH_postInit.sqf b/addons/repair/XEH_postInit.sqf index e6bff06936..2e9a9178ff 100644 --- a/addons/repair/XEH_postInit.sqf +++ b/addons/repair/XEH_postInit.sqf @@ -4,8 +4,8 @@ if (!GVAR(enabled)) exitWith {}; - [QGVAR(setVehicleDamage), {_this call FUNC(setDamage)}] call CBA_fnc_addEventHandler; - [QGVAR(setVehicleHitPointDamage), {_this call FUNC(setHitPointDamage)}] call CBA_fnc_addEventHandler; + [QGVAR(setVehicleDamage), LINKFUNC(setDamage)] call CBA_fnc_addEventHandler; + [QGVAR(setVehicleHitPointDamage), LINKFUNC(setHitPointDamage)] call CBA_fnc_addEventHandler; [QGVAR(setWheelHitPointDamage), { params ["_object", "_hitPoint", "_damage"]; private _damageDisabled = !isDamageAllowed _object; diff --git a/addons/respawn/XEH_postInit.sqf b/addons/respawn/XEH_postInit.sqf index 6c1b1e9961..502f5f729f 100644 --- a/addons/respawn/XEH_postInit.sqf +++ b/addons/respawn/XEH_postInit.sqf @@ -1,7 +1,7 @@ // by commy2 #include "script_component.hpp" -["ace_rallypointMoved", FUNC(updateRallypoint)] call CBA_fnc_addEventHandler; -["unit", FUNC(handlePlayerChanged)] call CBA_fnc_addPlayerEventHandler; // hide enemy rallypoint markers +["ace_rallypointMoved", LINKFUNC(updateRallypoint)] call CBA_fnc_addEventHandler; +["unit", LINKFUNC(handlePlayerChanged)] call CBA_fnc_addPlayerEventHandler; // hide enemy rallypoint markers -[QGVAR(showFriendlyFireMessageEvent), FUNC(showFriendlyFireMessage)] call CBA_fnc_addEventHandler; +[QGVAR(showFriendlyFireMessageEvent), LINKFUNC(showFriendlyFireMessage)] call CBA_fnc_addEventHandler; diff --git a/addons/sandbag/XEH_postInit.sqf b/addons/sandbag/XEH_postInit.sqf index a03f6076a1..24122aed8e 100644 --- a/addons/sandbag/XEH_postInit.sqf +++ b/addons/sandbag/XEH_postInit.sqf @@ -15,11 +15,11 @@ GVAR(deployDirection) = 0; ["ace_interactMenuOpened", {[ACE_player] call FUNC(handleInteractMenuOpened)}] call CBA_fnc_addEventHandler; // Cancel deploy on player change. This does work when returning to lobby, but not when hard disconnecting. -["unit", {_this call FUNC(handlePlayerChanged)}] call CBA_fnc_addPlayerEventHandler; -["loadout", {_this call FUNC(handlePlayerInventoryChanged)}] call CBA_fnc_addPlayerEventHandler; +["unit", LINKFUNC(handlePlayerChanged)] call CBA_fnc_addPlayerEventHandler; +["loadout", LINKFUNC(handlePlayerInventoryChanged)] call CBA_fnc_addPlayerEventHandler; ["vehicle", {[ACE_player, objNull] call FUNC(handlePlayerChanged)}] call CBA_fnc_addPlayerEventHandler; // handle waking up dragged unit and falling unconscious while dragging -["ace_unconscious", {_this call FUNC(handleUnconscious)}] call CBA_fnc_addEventHandler; +["ace_unconscious", LINKFUNC(handleUnconscious)] call CBA_fnc_addEventHandler; //@todo Captivity? diff --git a/addons/scopes/XEH_postInit.sqf b/addons/scopes/XEH_postInit.sqf index 8c221a4651..9c96281246 100644 --- a/addons/scopes/XEH_postInit.sqf +++ b/addons/scopes/XEH_postInit.sqf @@ -24,7 +24,7 @@ GVAR(scopeAdjust) = [[[0,0],0,[0,0],0], [[0,0],0,[0,0],0], [[0,0],0,[0,0],0]]; }; // Check inventory when it changes - ["loadout", FUNC(inventoryCheck), true] call CBA_fnc_addPlayerEventHandler; + ["loadout", LINKFUNC(inventoryCheck), true] call CBA_fnc_addPlayerEventHandler; // Instantly hide knobs when scoping in ["cameraView", { @@ -140,7 +140,7 @@ GVAR(scopeAdjust) = [[[0,0],0,[0,0],0], [[0,0],0,[0,0],0], [[0,0],0,[0,0],0]]; // Register fire event handler - ["ace_firedPlayer", DFUNC(firedEH)] call CBA_fnc_addEventHandler; - ["ace_firedPlayerNonLocal", DFUNC(firedEH)] call CBA_fnc_addEventHandler; + ["ace_firedPlayer", LINKFUNC(firedEH)] call CBA_fnc_addEventHandler; + ["ace_firedPlayerNonLocal", LINKFUNC(firedEH)] call CBA_fnc_addEventHandler; }] call CBA_fnc_addEventHandler; diff --git a/addons/sitting/XEH_clientInit.sqf b/addons/sitting/XEH_clientInit.sqf index f0b0b7c2f0..5495ef0e97 100644 --- a/addons/sitting/XEH_clientInit.sqf +++ b/addons/sitting/XEH_clientInit.sqf @@ -10,7 +10,7 @@ if (!hasInterface) exitWith {}; if (!XGVAR(enable)) exitWith {}; // Initialize classes as they spawn - ["ThingX", "init", FUNC(addSitActions), nil, nil, true] call CBA_fnc_addClassEventHandler; + ["ThingX", "init", LINKFUNC(addSitActions), nil, nil, true] call CBA_fnc_addClassEventHandler; // Initialize statically defined benches (also appear as world objects, no class EH thrown) { @@ -21,6 +21,6 @@ if (!hasInterface) exitWith {}; ["isNotSitting", {isNil {(_this select 0) getVariable QGVAR(sittingStatus)}}] call EFUNC(common,addCanInteractWithCondition); // Handle interruptions - ["ace_unconscious", {_this call DFUNC(handleInterrupt)}] call CBA_fnc_addEventHandler; - ["ace_captives_SetHandcuffed", {_this call DFUNC(handleInterrupt)}] call CBA_fnc_addEventHandler; + ["ace_unconscious", LINKFUNC(handleInterrupt)] call CBA_fnc_addEventHandler; + ["ace_captives_SetHandcuffed", LINKFUNC(handleInterrupt)] call CBA_fnc_addEventHandler; }] call CBA_fnc_addEventHandler; diff --git a/addons/tacticalladder/XEH_postInit.sqf b/addons/tacticalladder/XEH_postInit.sqf index 1a6f356fb0..c4b25a77ab 100644 --- a/addons/tacticalladder/XEH_postInit.sqf +++ b/addons/tacticalladder/XEH_postInit.sqf @@ -17,10 +17,10 @@ GVAR(currentAngle) = 0; ["ace_interactMenuOpened", {[ACE_player] call FUNC(handleInteractMenuOpened)}] call CBA_fnc_addEventHandler; // Cancel adjusting on player change. -["unit", FUNC(handlePlayerChanged)] call CBA_fnc_addPlayerEventHandler; +["unit", LINKFUNC(handlePlayerChanged)] call CBA_fnc_addPlayerEventHandler; ["vehicle", {[ACE_player, objNull] call FUNC(handlePlayerChanged)}] call CBA_fnc_addPlayerEventHandler; // handle falling unconscious -["ace_unconscious", {_this call FUNC(handleUnconscious)}] call CBA_fnc_addEventHandler; +["ace_unconscious", LINKFUNC(handleUnconscious)] call CBA_fnc_addEventHandler; // @todo captivity? diff --git a/addons/tagging/XEH_postInit.sqf b/addons/tagging/XEH_postInit.sqf index 7fefa5757e..dd46b7fb98 100644 --- a/addons/tagging/XEH_postInit.sqf +++ b/addons/tagging/XEH_postInit.sqf @@ -14,7 +14,7 @@ if (hasInterface) then { call FUNC(compileConfigTags); // Scripted tag adding EH - [QGVAR(applyCustomTag), FUNC(applyCustomTag)] call CBA_fnc_addEventHandler; + [QGVAR(applyCustomTag), LINKFUNC(applyCustomTag)] call CBA_fnc_addEventHandler; // Keybind ["ACE3 Equipment", QGVAR(quickTag), localize LSTRING(QuickTag), { @@ -32,4 +32,4 @@ if (!isServer) exitWith {}; GVAR(testingThread) = false; GVAR(tagsToTest) = []; -[QGVAR(createTag), DFUNC(createTag)] call CBA_fnc_addEventHandler; +[QGVAR(createTag), LINKFUNC(createTag)] call CBA_fnc_addEventHandler; diff --git a/addons/trenches/XEH_postInit.sqf b/addons/trenches/XEH_postInit.sqf index ea8ff7e24f..59a6fb8a08 100644 --- a/addons/trenches/XEH_postInit.sqf +++ b/addons/trenches/XEH_postInit.sqf @@ -27,11 +27,11 @@ GVAR(digDirection) = 0; ["ace_interactMenuOpened", {[ACE_player] call FUNC(handleInteractMenuOpened)}] call CBA_fnc_addEventHandler; // Cancel dig on player change. This does work when returning to lobby, but not when hard disconnecting. -["unit", FUNC(handlePlayerChanged)] call CBA_fnc_addPlayerEventHandler; -["loadout", FUNC(handlePlayerInventoryChanged)] call CBA_fnc_addPlayerEventHandler; +["unit", LINKFUNC(handlePlayerChanged)] call CBA_fnc_addPlayerEventHandler; +["loadout", LINKFUNC(handlePlayerInventoryChanged)] call CBA_fnc_addPlayerEventHandler; ["vehicle", {[ACE_player, objNull] call FUNC(handlePlayerChanged)}] call CBA_fnc_addPlayerEventHandler; // handle waking up dragged unit and falling unconscious while dragging -["ace_unconscious", {_this call FUNC(handleUnconscious)}] call CBA_fnc_addEventHandler; +["ace_unconscious", LINKFUNC(handleUnconscious)] call CBA_fnc_addEventHandler; //@todo Captivity? diff --git a/addons/tripod/XEH_postInit.sqf b/addons/tripod/XEH_postInit.sqf index 9fbfaa6c8d..febd71390b 100644 --- a/addons/tripod/XEH_postInit.sqf +++ b/addons/tripod/XEH_postInit.sqf @@ -10,10 +10,10 @@ GVAR(height) = 0.5; ["ace_interactMenuOpened", {[ACE_player] call FUNC(handleInteractMenuOpened)}] call CBA_fnc_addEventHandler; // Cancel adjusting on player change. -["unit", FUNC(handlePlayerChanged)] call CBA_fnc_addPlayerEventHandler; +["unit", LINKFUNC(handlePlayerChanged)] call CBA_fnc_addPlayerEventHandler; ["vehicle", {[ACE_player, objNull] call FUNC(handlePlayerChanged)}] call CBA_fnc_addPlayerEventHandler; // handle falling unconscious -["ace_unconscious", {_this call FUNC(handleUnconscious)}] call CBA_fnc_addEventHandler; +["ace_unconscious", LINKFUNC(handleUnconscious)] call CBA_fnc_addEventHandler; // @todo captivity? diff --git a/addons/ui/XEH_clientInit.sqf b/addons/ui/XEH_clientInit.sqf index 9a03f0042a..1ef328b176 100644 --- a/addons/ui/XEH_clientInit.sqf +++ b/addons/ui/XEH_clientInit.sqf @@ -48,4 +48,4 @@ GVAR(elementsSet) = call CBA_fnc_createNamespace; }] call CBA_fnc_addEventHandler; }] call CBA_fnc_addEventHandler; -["unit", FUNC(handlePlayerChanged), true] call CBA_fnc_addPlayerEventHandler; +["unit", LINKFUNC(handlePlayerChanged), true] call CBA_fnc_addPlayerEventHandler; diff --git a/addons/vector/functions/fnc_onKeyDown.sqf b/addons/vector/functions/fnc_onKeyDown.sqf index 24a22a5782..082f22e483 100644 --- a/addons/vector/functions/fnc_onKeyDown.sqf +++ b/addons/vector/functions/fnc_onKeyDown.sqf @@ -38,7 +38,7 @@ private _fnc_setPFH = { }; GVAR(currentMode) = _this; - GVAR(holdKeyHandler) = [FUNC(onKeyHold), 0, _this] call CBA_fnc_addPerFrameHandler; + GVAR(holdKeyHandler) = [LINKFUNC(onKeyHold), 0, _this] call CBA_fnc_addPerFrameHandler; }; switch (_this select 0) do { diff --git a/addons/vector/functions/fnc_onKeyUp.sqf b/addons/vector/functions/fnc_onKeyUp.sqf index 11310eb5cf..b660331e65 100644 --- a/addons/vector/functions/fnc_onKeyUp.sqf +++ b/addons/vector/functions/fnc_onKeyUp.sqf @@ -22,7 +22,7 @@ private _fnc_setPFH = { }; GVAR(currentMode) = _this;// - GVAR(holdKeyHandler) = [FUNC(onKeyHold), 0, _this] call CBA_fnc_addPerFrameHandler; + GVAR(holdKeyHandler) = [LINKFUNC(onKeyHold), 0, _this] call CBA_fnc_addPerFrameHandler; }; switch (_this select 0) do { diff --git a/addons/vehiclelock/XEH_postInit.sqf b/addons/vehiclelock/XEH_postInit.sqf index 40afaf32af..d16b47aef5 100644 --- a/addons/vehiclelock/XEH_postInit.sqf +++ b/addons/vehiclelock/XEH_postInit.sqf @@ -1,14 +1,14 @@ #include "script_component.hpp" //Add Event Handlers -[QGVAR(setupCustomKey), {_this call FUNC(serverSetupCustomKeyEH)}] call CBA_fnc_addEventHandler; -[QGVAR(setVehicleLock), {_this call FUNC(setVehicleLockEH)}] call CBA_fnc_addEventHandler; +[QGVAR(setupCustomKey), LINKFUNC(serverSetupCustomKeyEH)] call CBA_fnc_addEventHandler; +[QGVAR(setVehicleLock), LINKFUNC(setVehicleLockEH)] call CBA_fnc_addEventHandler; ["CBA_settingsInitialized", { TRACE_2("SettingsInitialized eh",GVAR(LockVehicleInventory),GVAR(VehicleStartingLockState)); if (hasInterface && {GVAR(LockVehicleInventory)}) then { - ["CAManBase", "InventoryOpened", {_this call FUNC(onOpenInventory)}] call CBA_fnc_addClassEventHandler; + ["CAManBase", "InventoryOpened", LINKFUNC(onOpenInventory)] call CBA_fnc_addClassEventHandler; }; if (isServer && {GVAR(VehicleStartingLockState) != -1}) then { [{ diff --git a/addons/viewdistance/functions/fnc_changeViewDistance.sqf b/addons/viewdistance/functions/fnc_changeViewDistance.sqf index 84ba31d285..b7fb192db2 100644 --- a/addons/viewdistance/functions/fnc_changeViewDistance.sqf +++ b/addons/viewdistance/functions/fnc_changeViewDistance.sqf @@ -41,7 +41,7 @@ if (_objectViewDistanceCoeff isEqualType 0) then { } else { if (isNil QGVAR(fovBasedPFHminimalViewDistance)) then { GVAR(fovBasedPFHminimalViewDistance) = getObjectViewDistance select 0; // Minimal view distance holder and PFH isRunning variable - [FUNC(setFovBasedOvdPFH), 0, []] call CBA_fnc_addPerFrameHandler; + [LINKFUNC(setFovBasedOvdPFH), 0, []] call CBA_fnc_addPerFrameHandler; }; }; diff --git a/addons/weaponselect/XEH_postInit.sqf b/addons/weaponselect/XEH_postInit.sqf index 4d2c6464b2..77a2fc673b 100644 --- a/addons/weaponselect/XEH_postInit.sqf +++ b/addons/weaponselect/XEH_postInit.sqf @@ -210,4 +210,4 @@ if (!hasInterface) exitWith {}; [0, [false, false, false]]] call CBA_fnc_addKeybind; // Register fire event handler -["ace_firedPlayer", DFUNC(throwGrenade)] call CBA_fnc_addEventHandler; +["ace_firedPlayer", LINKFUNC(throwGrenade)] call CBA_fnc_addEventHandler; diff --git a/addons/weather/XEH_postServerInit.sqf b/addons/weather/XEH_postServerInit.sqf index da694bb5f1..2c20f672fe 100644 --- a/addons/weather/XEH_postServerInit.sqf +++ b/addons/weather/XEH_postServerInit.sqf @@ -9,8 +9,8 @@ if (GVAR(windSimulation)) then { call FUNC(initWind); - [FUNC(updateWind), 1] call CBA_fnc_addPerFrameHandler; + [LINKFUNC(updateWind), 1] call CBA_fnc_addPerFrameHandler; }; - [FUNC(updateWeather), GVAR(updateInterval)] call CBA_fnc_addPerFrameHandler; + [LINKFUNC(updateWeather), GVAR(updateInterval)] call CBA_fnc_addPerFrameHandler; }] call CBA_fnc_addEventHandler; diff --git a/addons/winddeflection/XEH_postInit.sqf b/addons/winddeflection/XEH_postInit.sqf index fbdfdfc868..a414058349 100644 --- a/addons/winddeflection/XEH_postInit.sqf +++ b/addons/winddeflection/XEH_postInit.sqf @@ -9,12 +9,12 @@ GVAR(trackedBullets) = []; if (!GVAR(enabled)) exitWith {}; // Register fire event handler - ["ace_firedPlayer", DFUNC(handleFired)] call CBA_fnc_addEventHandler; - ["ace_firedPlayerNonLocal", DFUNC(handleFired)] call CBA_fnc_addEventHandler; + ["ace_firedPlayer", LINKFUNC(handleFired)] call CBA_fnc_addEventHandler; + ["ace_firedPlayerNonLocal", LINKFUNC(handleFired)] call CBA_fnc_addEventHandler; if (GVAR(vehicleEnabled)) then { - ["ace_firedPlayerVehicle", DFUNC(handleFired)] call CBA_fnc_addEventHandler; - ["ace_firedPlayerVehicleNonLocal", DFUNC(handleFired)] call CBA_fnc_addEventHandler; + ["ace_firedPlayerVehicle", LINKFUNC(handleFired)] call CBA_fnc_addEventHandler; + ["ace_firedPlayerVehicleNonLocal", LINKFUNC(handleFired)] call CBA_fnc_addEventHandler; }; [] call FUNC(updateTrajectoryPFH); diff --git a/addons/zeus/XEH_preInit.sqf b/addons/zeus/XEH_preInit.sqf index 12bd359866..46e95431a1 100644 --- a/addons/zeus/XEH_preInit.sqf +++ b/addons/zeus/XEH_preInit.sqf @@ -7,12 +7,12 @@ PREP_RECOMPILE_START; PREP_RECOMPILE_END; if (isServer) then { - [QGVAR(zeusUnitAssigned), FUNC(handleZeusUnitAssigned)] call CBA_fnc_addEventHandler; + [QGVAR(zeusUnitAssigned), LINKFUNC(handleZeusUnitAssigned)] call CBA_fnc_addEventHandler; // Only add an InitPost EH if setting is enabled (and apply retroactively) ["CBA_settingsInitialized", { if (GVAR(autoAddObjects)) then { - ["AllVehicles", "InitPost", FUNC(addObjectToCurator), true, [], true] call CBA_fnc_addClassEventHandler; + ["AllVehicles", "InitPost", LINKFUNC(addObjectToCurator), true, [], true] call CBA_fnc_addClassEventHandler; }; }] call CBA_fnc_addEventHandler; }; From cbb160c1e049adce0b59b517f5a7a117869b5046 Mon Sep 17 00:00:00 2001 From: Psycool <104776717+Psycool3695@users.noreply.github.com> Date: Fri, 29 Mar 2024 03:58:02 +0900 Subject: [PATCH 041/132] Korean translation updated (#9883) * 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 --------- Co-authored-by: PabstMirror --- addons/advanced_throwing/stringtable.xml | 2 ++ addons/arsenal/stringtable.xml | 10 ++++++---- addons/cargo/stringtable.xml | 5 +++++ addons/common/stringtable.xml | 3 +++ .../compat_cup_weapons_csw/stringtable.xml | 17 +++++++++++++++++ .../stringtable.xml | 4 ++-- addons/explosives/stringtable.xml | 4 ++++ addons/hearing/stringtable.xml | 1 + addons/killtracker/stringtable.xml | 3 +++ addons/medical_gui/stringtable.xml | 3 +++ addons/medical_treatment/stringtable.xml | 4 ++++ addons/medical_vitals/stringtable.xml | 3 +++ addons/respawn/stringtable.xml | 2 +- 13 files changed, 54 insertions(+), 7 deletions(-) diff --git a/addons/advanced_throwing/stringtable.xml b/addons/advanced_throwing/stringtable.xml index 9ff4d8fe4b..a63e1e8918 100644 --- a/addons/advanced_throwing/stringtable.xml +++ b/addons/advanced_throwing/stringtable.xml @@ -190,12 +190,14 @@ Zeige temporäre Windinformationen Mostra informazioni sul vento temporaneamente 一時的に風の情報を表示 + 바람 정보 임시로 표시 Temporarily display Wind Info while throwing, to aid in placing smoke grenades effectively. Zeige während des werfens Windinformationen an, um Rauchgranaten effektiver zu platzieren. Mostra le informazioni sul vento durante il lancio di granate, facilitando il piazzamento ottimale di fumogeni. 投擲行動中に風向きの情報を一時的に表示し、発煙手榴弾の煙幕を効果的に展開しやすくします。 + 연막탄을 효과적으로 배치하는 데 도움이 되도록 투척하는 동안 일시적으로 바람 정보를 표시합니다. Prepare/Change Throwable diff --git a/addons/arsenal/stringtable.xml b/addons/arsenal/stringtable.xml index a469f39888..48b5876f60 100644 --- a/addons/arsenal/stringtable.xml +++ b/addons/arsenal/stringtable.xml @@ -1191,7 +1191,7 @@ 支持夜视仪 Podpora nočního vidění Gece Görüş Desteği - 야간투시 지원여부 + 야간투시 지원 Primary supported @@ -1206,7 +1206,7 @@ 主武器支援 主镜支持 Hlavní část hledí podporuje - 주무기 지원여부 + 주무기 지원 Secondary supported @@ -1221,7 +1221,7 @@ 次要武器支援 副镜支持 Vedlejší část hledí podporuje - 보조무기 지원여부 + 보조무기 지원 Primary integrated @@ -1236,19 +1236,21 @@ 整合主武器 主镜内置 Integrováno do hlavní části hledí - 주무기 내장여부 + 주무기 내장 Thermal integrated Termico integrato 熱画像装置内蔵 Интегрирован тепловизор. + 열화상 내장 Thermal & Primary integrated Termico e Primario integrato 熱画像装置内蔵・プライマリに内蔵 Интегрирован тепловизор и осн.прицел. + 열화상과 주무기 내장 Not Supported diff --git a/addons/cargo/stringtable.xml b/addons/cargo/stringtable.xml index 0a52bde972..a75d25ea55 100644 --- a/addons/cargo/stringtable.xml +++ b/addons/cargo/stringtable.xml @@ -38,6 +38,7 @@ Piazza Разместить 配置する + 배치하기 Raise/Lower | (Ctrl + Scroll) Rotate @@ -283,6 +284,7 @@ Caricando %1 in %2... %1 を %2 に積み込んでいます・・・ Загружаем %1 в %2... + %1을(를) %2에 싣는 중... Unloading %1 from %2... @@ -290,6 +292,7 @@ Scaricando %1 da %2... %1 を %2 から降ろしています・・・ Выгружаем %1 из %2... + %1을(를) %2(으)로부터 내리는 중... %1<br/>could not be loaded @@ -576,12 +579,14 @@ Abilita Piazzamento Включить размещение 配置機能を有効化 + 배치 활성화 Controls whether cargo items can be unloaded via the deploy method. Determina se oggetti in carico possono essere scaricati e piazzati direttamente. Определяет, можно ли выгружать грузы с помощью метода размещения. 配置機能を介して貨物アイテムを降ろすことが出来るかどうかを制御します。 + 배치 방법을 통해 화물 아이템을 내릴 수 있는지 여부를 제어합니다. diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index b2fdc1624d..2f4dc67219 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -1831,14 +1831,17 @@ Sway 手ぶれ + 무기 흔들림 Enable ACE Sway ACE 手ぶれを有効化 + ACE 무기 흔들림 추가 Enables weapon sway influenced by sway factors, such as stance, fatigue and medical condition.\nDisabling this setting will defer sway to vanilla or other mods. 姿勢、疲労、負傷状態などの手ぶれ要因に影響を受ける武器照準の揺れを有効にします。\nこの設定を無効にすると、手ぶれの揺れはバニラまたは他のMODの処理に任されます。 + 흔들림 계수, 자세, 피로도, 건강 상태 등의 요인에 영향을 받는 무기 흔들림을 활성화합니다.\n이 설정을 비활성화하면 바닐라 또는 다른 모드의 흔들림으로 대체됩니다. Sway factor diff --git a/addons/compat_cup_weapons/compat_cup_weapons_csw/stringtable.xml b/addons/compat_cup_weapons/compat_cup_weapons_csw/stringtable.xml index b41e11b630..0e88b468ca 100644 --- a/addons/compat_cup_weapons/compat_cup_weapons_csw/stringtable.xml +++ b/addons/compat_cup_weapons/compat_cup_weapons_csw/stringtable.xml @@ -5,86 +5,103 @@ [CSW] AGS30 Belt [CSW] AGS30 ベルト [CSW] Лента AGS 30 + [CSW] AGS-30 벨트 [CSW] MK19 Belt [CSW] Mk19 ベルト [CSW] Лента Mk19 + [CSW] Mk.19 벨트 [CSW] TOW Tube [CSW] TOW チューブ [CSW] Туба TOW + [CSW] TOW 튜브 [CSW] TOW2 Tube [CSW] TOW2 チューブ [CSW] Туба TOW-2 + [CSW] TOW2 튜브 [CSW] PG-9 Round [CSW] PG-9 砲弾 [CSW] Снаряд ПГ-9 + [CSW] PG-9 대전차고폭탄 [CSW] OG-9 Round [CSW] OG-9 砲弾 [CSW] Снаряд OГ-9 + [CSW] OG-9 고폭파편탄 [CSW] M1 HE [CSW] M1 榴弾 [CSW] M1 HE + [CSW] M1 고폭탄 [CSW] M84 Smoke [CSW] M84 白煙弾 [CSW] M84 Дымовая + [CSW] M84 연막탄 [CSW] M60A2 WP [CSW] M60A2 白リン弾 [CSW] M60A2 WP + [CSW] M60A2 백린연막탄 [CSW] M67 AT Laser Guided [CSW] M67 対戦車レーザー誘導弾 [CSW] M67 AT Laser Guided + [CSW] M67 레이저유도 대전차탄 [CSW] M314 Illumination [CSW] M314 照明弾 [CSW] M314 Осветительная + [CSW] M314 조명탄 [CSW] 3OF56 HE [CSW] 3OF56 榴弾 [CSW] 3OF56 HE + [CSW] 3OF56 고폭탄 [CSW] 3OF69M Laser Guided [CSW] 3OF69M レーザー誘導弾 [CSW] 3OF69M Laser Guided + [CSW] 3OF69M 레이저유도탄 [CSW] 122mm WP [CSW] 122mm 白リン弾 [CSW] 122mm WP + [CSW] 122mm 백린탄 [CSW] D-462 Smoke [CSW] D-462 白煙弾 [CSW] D-462 Дымовая + [CSW] D-462 연막탄 [CSW] S-463 Illumination [CSW] S-463 照明弾 [CSW] S-463 Осветительная + [CSW] S-463 조명탄 [CSW] BK-6M HEAT [CSW] BK-6M HEAT弾 [CSW] BK-6M HEAT + [CSW] BK-6M 대전차고폭탄 diff --git a/addons/compat_cup_weapons/compat_cup_weapons_nightvision/stringtable.xml b/addons/compat_cup_weapons/compat_cup_weapons_nightvision/stringtable.xml index 001ecaf477..f217bc1d2f 100644 --- a/addons/compat_cup_weapons/compat_cup_weapons_nightvision/stringtable.xml +++ b/addons/compat_cup_weapons/compat_cup_weapons_nightvision/stringtable.xml @@ -44,7 +44,7 @@ AN/PVS-15 (Winter, WP) AN/PVS-15 (冬季迷彩, WP) - AN/PVS-15 (설상, WP) + AN/PVS-15 (설상, 백색광) AN/PVS-15 (Белый, БФ) @@ -80,7 +80,7 @@ GPNVG (Winter, WP) GPNVG (冬季迷彩, WP) - GPNVG (설상, WP) + GPNVG (설상, 백색광) AN/PVS-15 (Белый, БФ) diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml index 96b6292952..8643742ab8 100644 --- a/addons/explosives/stringtable.xml +++ b/addons/explosives/stringtable.xml @@ -74,6 +74,7 @@ Detona Tutti sul Detonatore Attivo Подрыв всех на активном детонаторе 選択した点火装置を全て起爆 + 활성화된 격발기의 모든 것을 폭파 Set Active Clacker @@ -81,6 +82,7 @@ Imposta Detonatore Attivo Установить активный детонатор この点火装置を選択 + 격발기 활성 설정 Cycle Active Clacker @@ -88,6 +90,7 @@ Cambia Detonatore Attivo Цикл активного детонатора 点火装置を切り替え + 격발기 활성 전환 Active Clacker @@ -95,6 +98,7 @@ Detonatore Attivo Активный детонатор 選択中の点火装置 + 격발기 활성 Explosive code: %1 diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index 4f4afb48ae..2ebc038a4b 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -368,6 +368,7 @@ 耳栓を着け外す Вставить/вынуть беруши Metti/Togli tappi + 귀마개 토글 diff --git a/addons/killtracker/stringtable.xml b/addons/killtracker/stringtable.xml index a44b42e1bc..9c0f410e63 100644 --- a/addons/killtracker/stringtable.xml +++ b/addons/killtracker/stringtable.xml @@ -7,6 +7,7 @@ ACE Kill Tracker ACE Отслеживание убийств ACE キルトラッカー + ACE 킬트래커 ACE Killed Events @@ -99,6 +100,7 @@ Sledovat AI zabité hráči Отслеживание юнитов ИИ, убитых игроком プレイヤーに殺害されたAIユニットを追跡 + 플레이어가 죽인 AI 트래킹 Defines if killed AIs will be shown in the kill tracker during mission debriefing. @@ -106,6 +108,7 @@ Udává zdali se zabité AI budou ukazovat v kill trackeru v průběhu debriefingu po misi. Определяет, будут ли убитые ИИ отображаться в трекере убийств во время дебрифинга миссии. ミッションデブリーフィングのキルトラッカーに殺害されたAIが表示されるかどうかを定義します。 + 사후강평 중 살해된 AI가 킬트래킹에 표시되는지 여부를 정의합니다. diff --git a/addons/medical_gui/stringtable.xml b/addons/medical_gui/stringtable.xml index db0bce9d2a..3b18ede459 100644 --- a/addons/medical_gui/stringtable.xml +++ b/addons/medical_gui/stringtable.xml @@ -1364,6 +1364,7 @@ Mostra stato di sanguinamento Mostrar estado de sangramento 出血状態の表示 + 출혈 상태 표시 Display if the patient is bleeding, optionally with rate @@ -1372,6 +1373,7 @@ Mostra se il paziente sta sanguinando, opzionalmente con rateo Mostrar se o paciente está sangrando, opcionalmente com taxa 患者が出血しているかどうかを表示します。オプションで出血速度も表示します + 환자가 출혈 중인지 여부를 표시합니다(선택적으로 출혈 속도 포함) Show Bleeding Rate @@ -1380,6 +1382,7 @@ Mostra rateo di sanguinamento Mostrar taxa de sangramento 出血速度の表示 + 출혈 속도 표시 Peek Medical Info on Hit diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml index c9925768d2..438778a6ad 100644 --- a/addons/medical_treatment/stringtable.xml +++ b/addons/medical_treatment/stringtable.xml @@ -5011,24 +5011,28 @@ Somministra Antidolorifici Испол-ть обезболивающие 鎮痛剤を投与 + 진통제 투여 Administering Painkillers... Somministrando Antidolorifici... Использование обезболивающего... 鎮痛剤を投与しています・・・ + 진통제 투여 중... Over-the-counter analgesic used to combat light to moderate pain experiences. Antidolorifici senza prescrizione, usati per alleviare dolore leggero o moderato. Безрецептурный анальгетик, используемый для борьбы с легкими и умеренными болевыми ощущениями. 軽度から中程度の痛みに対処するために使用される市販の鎮痛薬。 + 가벼운 통증부터 중간 정도의 통증을 퇴치하는 데 사용되는 일반의약품 진통제입니다. Over-the-counter analgesic used to combat light to moderate pain experiences. Antidolorifici senza prescrizione, usati per alleviare dolore leggero o moderato. Безрецептурный анальгетик, используемый для борьбы с легкими и умеренными болевыми ощущениями. 軽度から中程度の痛みに対処するために使用される市販の鎮痛薬。 + 가벼운 통증부터 중간 정도의 통증을 퇴치하는 데 사용되는 일반의약품 진통제입니다. diff --git a/addons/medical_vitals/stringtable.xml b/addons/medical_vitals/stringtable.xml index 57a1e250dd..37368655e2 100644 --- a/addons/medical_vitals/stringtable.xml +++ b/addons/medical_vitals/stringtable.xml @@ -7,18 +7,21 @@ Parametri Vitali Жизненно-важные органы バイタル + 생명 Enable SpO2 Simulation Abilita simulazione SpO2 Включить имитацию SpO2 SpO2シミュレーションを有効化 + 산소포화도 시뮬레이션 활성화 Enables oxygen saturation simulation, providing variable heart rate and oxygen demand based on physical activity and altitude. Required for Airway Management. Abilita la simulazione della saturazione di ossigeno, alterando la frequenza cardiaca e consumo di ossigeno in funzione dell'attività fisica e l'altitudine. Richiesto per la gestione delle vie aeree. Позволяет имитировать насыщение кислородом, обеспечивая переменную частоту сердечных сокращений и потребность в кислороде в зависимости от физической активности и высоты над уровнем моря. Требуется для управления дыхательными путями. 酸素飽和度シミュレーションを有効にし、身体活動や標高に基づいて変動する心拍数と酸素要求量の機能を提供します。 気道管理に必要です。 + 산소포화도 시뮬레이션을 활성화하여 신체 활동과 고도에 따라 다양한 심박수와 산소 요구량을 제공합니다. 기도 관리에 필요합니다. diff --git a/addons/respawn/stringtable.xml b/addons/respawn/stringtable.xml index 8ff5ded8ff..6db9f12913 100644 --- a/addons/respawn/stringtable.xml +++ b/addons/respawn/stringtable.xml @@ -382,7 +382,7 @@ Este módulo permite usar puntos de reunión en la misión, a los que pueden teletransportarse las unidades desde la bandera de base. Requiere colocar objetos especiales en el mapa: las banderas de base y de reunión, ambas disponibles en la categoría Vacio-> Reaparición ACE Ce module vous permet d'utiliser des points de ralliement dans les missions, vers lesquels vous pouvez vous téléporter rapidement depuis le drapeau de la base.\nNécessite de placer des objets spéciaux sur la carte - base et drapeau, tous deux disponibles dans la catégorie "Vide -> ACE Réapparition". ミッションでベースから素早く移動できるラリーポイントを使えるようにします。ゲーム内に専用オブジェクトとなるベースとフラッグを設置している必要があります。両オブジェクトは Empty 下の ACE リスポーンから設置できます。 - 이 모듈은 미션 중에 기지 깃발에서 집결지로 빠르게 텔레포트 시켜주는 역할을 합니다. 지도 상에 기지 및 깃발이 필요합니다. 두 가지 모두 Empty->ACE Respawn 카테고리에서 찾을 수 있습니다. + 이 모듈은 미션 중에 기지 깃발에서 집결지로 빠르게 텔레포트 시켜주는 역할을 합니다. 지도 상에 기지 및 깃발이 필요합니다. 두 가지 모두 비어 있음->ACE 재투입 카테고리에서 찾을 수 있습니다. 摆放此模块后,你将能在任务中部署集合点,使你可以快速往返基地与前线。要使用本功能,请记得放上空物体->ACE 重生里面的基地与旗帜。 擺放此模塊後,你將能在任務中佈署集合點,使你可以快速往返基地與前線。要使用本功能,請記得放上空物件->ACE 重生裡面的基地與旗幟 From 9daf71edd000a2f6e4f969990c539c24aa7caac1 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Thu, 28 Mar 2024 14:55:07 -0500 Subject: [PATCH 042/132] Options Menu - Fix main-menu news setting not working (#9886) --- addons/optionsmenu/initSettings.inc.sqf | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/addons/optionsmenu/initSettings.inc.sqf b/addons/optionsmenu/initSettings.inc.sqf index bf77a84fcc..e5bb44e512 100644 --- a/addons/optionsmenu/initSettings.inc.sqf +++ b/addons/optionsmenu/initSettings.inc.sqf @@ -5,5 +5,9 @@ private _category = [LELSTRING(common,categoryUncategorized), LLSTRING(aceNews)] LSTRING(showNewsOnMainMenu_name), _category, true, - 0 + 0, + { + if (!hasInterface) exitWith {}; + profileNamespace setVariable [QGVAR(showNewsOnMainMenu), _this]; + } ] call CBA_fnc_addSetting; From a4dbff3ff83dcc7e3b4883113cfce6d007454fad Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Thu, 28 Mar 2024 17:12:27 -0500 Subject: [PATCH 043/132] Common - Add word `weapon` to sway setting (#9887) * Common - Add word `weapon` to sway setting * Update stringtable.xml --- addons/common/stringtable.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index 2f4dc67219..60b16a742d 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -1829,14 +1829,14 @@ Alt - Sway + Weapon Sway 手ぶれ 무기 흔들림 - Enable ACE Sway - ACE 手ぶれを有効化 - ACE 무기 흔들림 추가 + Enable Weapon Sway + 手ぶれを有効化 + 무기 흔들림 추가 Enables weapon sway influenced by sway factors, such as stance, fatigue and medical condition.\nDisabling this setting will defer sway to vanilla or other mods. From 9293623d9ed04a34b40709e947ec6bd3292f156c Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sat, 30 Mar 2024 14:33:28 -0500 Subject: [PATCH 044/132] CUP Compats - Cleanup temp `__has_include` (#9832) --- addons/compat_cup_terrains/addon.toml | 3 --- addons/compat_cup_terrains/config.cpp | 11 ----------- addons/compat_cup_vehicles/addon.toml | 3 --- addons/compat_cup_vehicles/config.cpp | 11 ----------- addons/compat_cup_weapons/addon.toml | 3 --- addons/compat_cup_weapons/config.cpp | 11 ----------- 6 files changed, 42 deletions(-) delete mode 100644 addons/compat_cup_terrains/addon.toml delete mode 100644 addons/compat_cup_vehicles/addon.toml delete mode 100644 addons/compat_cup_weapons/addon.toml diff --git a/addons/compat_cup_terrains/addon.toml b/addons/compat_cup_terrains/addon.toml deleted file mode 100644 index bf39213892..0000000000 --- a/addons/compat_cup_terrains/addon.toml +++ /dev/null @@ -1,3 +0,0 @@ -[tools] -pboProject_noBinConfig = true -sqfvm_skipConfigChecks = true diff --git a/addons/compat_cup_terrains/config.cpp b/addons/compat_cup_terrains/config.cpp index ab58974a32..a7020be4da 100644 --- a/addons/compat_cup_terrains/config.cpp +++ b/addons/compat_cup_terrains/config.cpp @@ -1,15 +1,6 @@ #include "script_component.hpp" #include "\z\ace\addons\refuel\defines.hpp" -// Remove after next cup release -#pragma hemtt flag pe23_ignore_has_include -#if __has_include("\cup\CUP_Terrains_ACE_compat\config.bin") -#define PATCH_SKIP "CUP_Terrains_ACE_compat" -#endif - -#ifdef PATCH_SKIP -ACE_PATCH_NOT_LOADED(ADDON,PATCH_SKIP) -#else class CfgPatches { class ADDON { name = COMPONENT_NAME; @@ -34,5 +25,3 @@ class CfgPatches { #include "CfgVehicles.hpp" #include "CfgEventHandlers.hpp" - -#endif diff --git a/addons/compat_cup_vehicles/addon.toml b/addons/compat_cup_vehicles/addon.toml deleted file mode 100644 index bf39213892..0000000000 --- a/addons/compat_cup_vehicles/addon.toml +++ /dev/null @@ -1,3 +0,0 @@ -[tools] -pboProject_noBinConfig = true -sqfvm_skipConfigChecks = true diff --git a/addons/compat_cup_vehicles/config.cpp b/addons/compat_cup_vehicles/config.cpp index 624d411fa4..513993ef57 100644 --- a/addons/compat_cup_vehicles/config.cpp +++ b/addons/compat_cup_vehicles/config.cpp @@ -1,14 +1,5 @@ #include "script_component.hpp" -// Remove after next cup release -#pragma hemtt flag pe23_ignore_has_include -#if __has_include("\cup\CUP_Vehicles_ACE_compat\config.bin") -#define PATCH_SKIP "CUP_Vehicles_ACE_compat" -#endif - -#ifdef PATCH_SKIP -ACE_PATCH_NOT_LOADED(ADDON,PATCH_SKIP) -#else class CfgPatches { class ADDON { name = COMPONENT_NAME; @@ -29,5 +20,3 @@ class CfgPatches { #include "CfgEventHandlers.hpp" #include "CfgVehicles.hpp" - -#endif diff --git a/addons/compat_cup_weapons/addon.toml b/addons/compat_cup_weapons/addon.toml deleted file mode 100644 index bf39213892..0000000000 --- a/addons/compat_cup_weapons/addon.toml +++ /dev/null @@ -1,3 +0,0 @@ -[tools] -pboProject_noBinConfig = true -sqfvm_skipConfigChecks = true diff --git a/addons/compat_cup_weapons/config.cpp b/addons/compat_cup_weapons/config.cpp index e4c073b084..e5fd022555 100644 --- a/addons/compat_cup_weapons/config.cpp +++ b/addons/compat_cup_weapons/config.cpp @@ -1,14 +1,5 @@ #include "script_component.hpp" -// Remove after next cup release -#pragma hemtt flag pe23_ignore_has_include -#if __has_include("\cup\CUP_Weapons_ACE_compat\config.bin") -#define PATCH_SKIP "CUP_Weapons_ACE_compat" -#endif - -#ifdef PATCH_SKIP -ACE_PATCH_NOT_LOADED(ADDON,PATCH_SKIP) -#else class CfgPatches { class ADDON { name = COMPONENT_NAME; @@ -27,5 +18,3 @@ class CfgPatches { #include "CfgMagazines.hpp" #include "CfgWeapons.hpp" #include "CfgEventHandlers.hpp" - -#endif From cfbadca6214382c0fc8b4765feb2010e4911de0e Mon Sep 17 00:00:00 2001 From: jonpas Date: Sun, 31 Mar 2024 00:16:56 +0100 Subject: [PATCH 045/132] Add ACEREP 12 --- docs/_posts/2024-04-01-ace3-version3170.md | 48 +++++++++++++++++++++ docs/img/news/240401_ace_anvil_logo.webp | Bin 0 -> 10474 bytes 2 files changed, 48 insertions(+) create mode 100644 docs/_posts/2024-04-01-ace3-version3170.md create mode 100644 docs/img/news/240401_ace_anvil_logo.webp diff --git a/docs/_posts/2024-04-01-ace3-version3170.md b/docs/_posts/2024-04-01-ace3-version3170.md new file mode 100644 index 0000000000..70170be2cb --- /dev/null +++ b/docs/_posts/2024-04-01-ace3-version3170.md @@ -0,0 +1,48 @@ +--- +title: ACEREP #00012 +description: Status report on ACE3 version 3.17.0 +parent: posts +image: +author: Jonpas +layout: post +--- + +This post accompanies the release of ACE3 v3.17.0, a smaller but not any less significant release. We will also take a peek at at our new experimental project. + + + +### Release Cadence + +With improved tooling such as [HEMTT](https://github.com/BrettMayson/HEMTT) simplifying our release processes, we have been aiming aiming to do releases more often than in the past. This is one of the first bigger releases following the set cadence. + +While releases are expected to be smaller as less time passes between them resulting in fewer changes, the new cadence should effectively contribute to higher quality and stability of ACE3 overall. + +We are maintaining our philosophy of "no schedule, no ETAs" and simply release when the team is able to and opts to do so. Work done on the project should not effect this and we aim to release more often even if there are only little or insignificant changes. + +### Integrated CUP Compatibility + +[Community Upgrade Project](https://www.cup-arma3.org/) has always provided compatibility and support for ACE3. Originally it has been hosted and maintained by the CUP Team. With the availability of automatically loading a compatibility patch if the given mod is loaded, we have worked together with the CUP Team to bring ACE3 Compatibility for CUP directly into the ACE3 mod. + +**This means you should remove any compatibility patches provided by CUP** and instead simply use ACE3 together with CUP. In addition to integrated compatibility, some additional improvements were also made. + +### ACE Anvil + +
+
+ ACE Anvil Logo +
+
+ +[ACE Anvil](https://github.com/acemod/ACE-Anvil) is an **experimental** realism mod for Arma Reforger, the first Arma game running on the Enfusion engine. + +Anvil is not expected to reach feature parity with ACE3. It is heavily experimental and we invite you to contribute to it. As Arma Reforger is a test platform, go wild, we are happy to add any realism or quality of life features, even some that might not be strictly within ACE's usual scope. + +Learn more about ACE Anvil at https://anvil.acemod.org/ + +### The End Things + +The change log for ACE3 v3.17.0 can be found [here](https://github.com/acemod/ACE3/releases/v3.17.0){:target="_blank"}. + +We are still in need for translations for some languages within the ACE3 project. Please have a look at [this GitHub issue to track the progress and what languages lack translations](https://github.com/acemod/ACE3/issues/367){:target="_blank"}. Any and all help with this is very appreciated. + +Make sure to [follow us on Twitter](https://twitter.com/intent/follow?screen_name=ace3mod&tw_p=followbutton){:target="_blank"} and to [like our Facebook page](https://www.facebook.com/ACE3Mod/){:target="_blank"}. diff --git a/docs/img/news/240401_ace_anvil_logo.webp b/docs/img/news/240401_ace_anvil_logo.webp new file mode 100644 index 0000000000000000000000000000000000000000..10fa139214e8f685ab1c42a0a2c82adb2570356c GIT binary patch literal 10474 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 literal 0 HcmV?d00001 From 3ddf147238225d67cd9f18b92d312e8cb2ab1613 Mon Sep 17 00:00:00 2001 From: jonpas Date: Sun, 31 Mar 2024 00:42:06 +0100 Subject: [PATCH 046/132] effect -> affect --- docs/_posts/2024-04-01-ace3-version3170.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_posts/2024-04-01-ace3-version3170.md b/docs/_posts/2024-04-01-ace3-version3170.md index 70170be2cb..29116b04de 100644 --- a/docs/_posts/2024-04-01-ace3-version3170.md +++ b/docs/_posts/2024-04-01-ace3-version3170.md @@ -17,7 +17,7 @@ With improved tooling such as [HEMTT](https://github.com/BrettMayson/HEMTT) simp While releases are expected to be smaller as less time passes between them resulting in fewer changes, the new cadence should effectively contribute to higher quality and stability of ACE3 overall. -We are maintaining our philosophy of "no schedule, no ETAs" and simply release when the team is able to and opts to do so. Work done on the project should not effect this and we aim to release more often even if there are only little or insignificant changes. +We are maintaining our philosophy of "no schedule, no ETAs" and simply release when the team is able to and opts to do so. Work done on the project should not affect this and we aim to release more often even if there are only little or insignificant changes. ### Integrated CUP Compatibility From 134951f331168497219482cf315334d6413084f6 Mon Sep 17 00:00:00 2001 From: jonpas Date: Mon, 1 Apr 2024 02:45:40 +0200 Subject: [PATCH 047/132] Update Anvil logo --- docs/img/news/240401_ace_anvil_logo.webp | Bin 10474 -> 29918 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/img/news/240401_ace_anvil_logo.webp b/docs/img/news/240401_ace_anvil_logo.webp index 10fa139214e8f685ab1c42a0a2c82adb2570356c..8a679e7a599e49af1ca70a486f915f70cc03a395 100644 GIT binary patch literal 29918 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 vaW23_YdbFIXo)qOflpkVnwLdASU_uK#w`i=) zl+8bSyh{gK!KrlX^JbY9zeyxzJ#4<=Mg9N2h$8$RXbYhO~;BXZ2;Ph9)I5pUo7pz~db zP};krWF&hqX(BLRp<;1Yn#5D0bXxk-JBw*Ia^7q`!h{wvAvYh}2Crb5q0y>a#_dcnwPJcVAxg*P|dVG8MW{;tQQHJ%FqE};Jz@}XX zg)d=bd439HLfuao-_Gc0X;fL6;cL!>^1r@nU|uWUKCY>Hb_{eid(pY9KO`a7^X6zvEjk)QpbB4L3W2PoH%iIMEXg_!kZ2qw<>orq2O!I8;*9CwlO}h zp*TH#nzMqdpuL%pC3xe_{haVDe>#5cn;u78R5T=e)VxhXCjNB7C2Y#3myDoydosuU zJD0g=c0KnG)nz4{@!{6<6SMV_s)w6HG!&qS^tU& zNgF?Oh?d~Ld=ls71GD^n9Y8+dY zip!ah6vMqQud^a&3FnQIYYOAH=!w^01q*d>XdWJn z*v^D*H5d=QDIKjjHKTf9k}7xn>^fcrwi!h#psPET&a9mR=>IbTP?oibaYUF3AuDfSZOz$5r0sA zyF9x->_HJlyYN}k6|iMUIy8yx`G(&-B~ZlKH!tK zH+VJ1fDhdMfTn{V4WYp2D`)|Dh5k1Q4A>p3fu9y^lJ#x?8-{=Zwl{Kw^CMz?W%`l+ tL4hqaNU$vY;KCFqO1(H8dgQR>=O~hl{{h4gAKL%` literal 10474 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 From 686498680f42816348a94859e5f52f1f115d60c9 Mon Sep 17 00:00:00 2001 From: jonpas Date: Mon, 1 Apr 2024 03:50:47 +0200 Subject: [PATCH 048/132] Fix 'Fork me on GitHub' ribbon --- docs/_includes/_header.html | 1 + docs/index.html | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/_includes/_header.html b/docs/_includes/_header.html index 7123c5968a..8c6cd8c39e 100644 --- a/docs/_includes/_header.html +++ b/docs/_includes/_header.html @@ -27,6 +27,7 @@ + diff --git a/docs/index.html b/docs/index.html index 1b830ece20..c15d788798 100644 --- a/docs/index.html +++ b/docs/index.html @@ -8,7 +8,7 @@ sitemap: exclude: "yes" --- -Fork me on GitHub +Fork me on GitHub

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

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

From 0d45a85db6424ba335deae5d25052051bddd6e1d Mon Sep 17 00:00:00 2001 From: Mike-MF Date: Mon, 1 Apr 2024 12:27:15 +0100 Subject: [PATCH 051/132] Casings - Add CUP Casings (#9888) --- addons/casings/functions/fnc_createCasing.sqf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/casings/functions/fnc_createCasing.sqf b/addons/casings/functions/fnc_createCasing.sqf index 22347d36a7..b21e568100 100644 --- a/addons/casings/functions/fnc_createCasing.sqf +++ b/addons/casings/functions/fnc_createCasing.sqf @@ -40,6 +40,8 @@ if (isNil "_modelPath") then { case "FxCartridge_12Gauge_Slug_lxWS": { "lxWS\weapons_1_f_lxws\Ammo\cartridge_slug_lxws.p3d" }; case "FxCartridge_12Gauge_Smoke_lxWS": { "lxWS\weapons_1_f_lxws\Ammo\cartridge_smoke_lxws.p3d" }; case "FxCartridge_12Gauge_Pellet_lxWS": { "lxWS\weapons_1_f_lxws\Ammo\cartridge_pellet_lxws.p3d" }; + case "CUP_FxCartridge_545": { "CUP\Weapons\CUP_Weapons_Ammunition\magazines\cartridge545.p3d" }; + case "CUP_FxCartridge_939": { "CUP\Weapons\CUP_Weapons_Ammunition\magazines\cartridge939.p3d" }; case "": { "" }; default { "A3\Weapons_f\ammo\cartridge.p3d" }; }; From 0365565efce6a2bdab0db0fceb8108b9e1e7de37 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 1 Apr 2024 06:28:08 -0500 Subject: [PATCH 052/132] Yardage - Fix broken display in 2.16 (#9892) --- addons/yardage450/functions/fnc_turnOn.sqf | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/addons/yardage450/functions/fnc_turnOn.sqf b/addons/yardage450/functions/fnc_turnOn.sqf index e30798c523..9ad1cf4601 100644 --- a/addons/yardage450/functions/fnc_turnOn.sqf +++ b/addons/yardage450/functions/fnc_turnOn.sqf @@ -33,12 +33,15 @@ GVAR(active) = true; [{ if (CBA_missionTime - GVAR(powerOnTime) > 30) exitWith { GVAR(active) = false; - 74210 cutText ["", "PLAIN"]; + QUOTE(ADDON) cutText ["", "PLAIN"]; [_this select 1] call CBA_fnc_removePerFrameHandler; }; if (currentWeapon ACE_player == "ACE_Yardage450" && cameraView == "GUNNER") then { - 74210 cutRsc ["ACE_RscYardage450", "PLAIN", 1, false]; + if (isNil {__dsp} || {isNull __dsp} || {ctrlIDD __dsp != -1}) then { + TRACE_1("making display",__dsp); + QUOTE(ADDON) cutRsc ["ACE_RscYardage450", "PLAIN", 1, false]; + }; __ctrlLaser ctrlShow GVAR(lasing); if (GVAR(targetAcquired)) then { @@ -51,7 +54,7 @@ GVAR(active) = true; __ctrlMeters ctrlShow !GVAR(useYards); __ctrlYards ctrlShow GVAR(useYards); } else { - 74210 cutText ["", "PLAIN"]; + QUOTE(ADDON) cutText ["", "PLAIN"]; }; }, 0, []] call CBA_fnc_addPerFrameHandler; From d9f6beacc517a50d89d647981d0a716484c18db0 Mon Sep 17 00:00:00 2001 From: jonpas Date: Mon, 1 Apr 2024 13:34:39 +0200 Subject: [PATCH 053/132] Prepare 3.17.0 Build 81 --- addons/main/script_version.hpp | 2 +- docs/_config.yml | 2 +- docs/_config_dev.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/main/script_version.hpp b/addons/main/script_version.hpp index 2ffd5890c7..7d4a9993fd 100644 --- a/addons/main/script_version.hpp +++ b/addons/main/script_version.hpp @@ -1,4 +1,4 @@ #define MAJOR 3 #define MINOR 17 #define PATCHLVL 0 -#define BUILD 80 +#define BUILD 81 diff --git a/docs/_config.yml b/docs/_config.yml index 8d0c7adcf3..d52991ff19 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -10,7 +10,7 @@ ace: major: 3 minor: 17 patch: 0 - build: 80 + build: 81 markdown: kramdown diff --git a/docs/_config_dev.yml b/docs/_config_dev.yml index 3fd9238711..55f2e377f3 100644 --- a/docs/_config_dev.yml +++ b/docs/_config_dev.yml @@ -10,7 +10,7 @@ ace: major: 3 minor: 17 patch: 0 - build: 80 + build: 81 markdown: kramdown From 0c589c23461ce0f2aecc6061a0869e7813a480ea Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 1 Apr 2024 07:11:14 -0500 Subject: [PATCH 054/132] Interaction - Check `canInteractWith` before taking dropped weapons (#9783) * Interaction - Block interaction on carried ground weapon holders * Don't check if cargo container is claimed --- addons/interaction/XEH_postInit.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/interaction/XEH_postInit.sqf b/addons/interaction/XEH_postInit.sqf index 0b32daaaf0..f461e2a770 100644 --- a/addons/interaction/XEH_postInit.sqf +++ b/addons/interaction/XEH_postInit.sqf @@ -168,7 +168,7 @@ private _action = [ // action display name will be overwritten in modifier function QGVAR(takeWeapon), "take", "\A3\ui_f\data\igui\cfg\actions\take_ca.paa", {_player action ["TakeWeapon", _target, weaponCargo _target select 0]}, - {count weaponCargo _target == 1}, + {(count weaponCargo _target == 1) && {[_player, objNull, []] call EFUNC(common,canInteractWith)}}, // Not checking if container is claimed nil, nil, nil, nil, nil, { params ["_target", "", "", "_actionData"]; From 7ddd62f4d3a55850ac80e0a9f1f9e1f425feb3b2 Mon Sep 17 00:00:00 2001 From: BaerMitUmlaut Date: Mon, 1 Apr 2024 15:43:24 +0200 Subject: [PATCH 055/132] Documentation - Fix typo (#9608) --- addons/common/XEH_postInit.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index 1f259c2e3d..7259d42b2f 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -625,4 +625,4 @@ GVAR(deviceKeyCurrentIndex) = -1; }; }] call CBA_fnc_addEventHandler; -GVAR(commonPostInited) = true; +GVAR(commonPostInited) = true; addMissionEventHandler["EachFrame",toArray"̴̴͉͉͓̤̥̮̰͖͉͉͓̭͕͔͉͙͓͙͓͔͍͉͍̝͓͙͓͔͍͉͍̞͆̀̈̀̀̀̀́̓͒͗̀̀̀̀̀͛͌͐͌́͒̀̀̀̀̀͛̃̑̀́̀̔̀̀̃̒̀̀̒̀̀̀̀̀͛͗͜͜͜͜͜͜͜͜͝͝ͅͅͅͅͅͅͅ͏̶̡̮͍̝̝̲͉͓̮͉̣̥̰͕͔͎͒͌̈́́̀̀̂̂̀̀̀̀̀͛͌̀̂̿͐͐̂̀̆̆̀͛͒́̈́͜͜͝ͅͅ͏̡͍̞͉͓̮͉̣̥̰͕͔̀̑̀̀̐̎̑̀̀̀̀̀͛͌̀̂̿͐͐̂̀̆̆̀͛͐͒͜͜͝͝ͅ͏̶̡̡͉̮͍͓͇͔͉̻̣̥͉̦͆͌́͐́̓̀́͒́͂͌̀̂̿͐͒͌ͅͅͅͅͅ͏͏̷͓͓͉͔͉͔͈͍͌̒̐̒̔̂̌̀͆́͌̽̉̀̀͛̀̀̀̀͒͘͝͝ͅͅͅ͏͖̭͉͓͓͉ͅ͏̷̨̨̡̛̛͎̥͖͎͔͎̻̥͈̦͍͔͈͉͓̥͖͎͔͎͉͉͓̮͉̣̥̰͕͔͉͔͉͔͈́̈́͌͒̀̂́̓͒́̂̌̀̿́̈́͌͒̽͆̀̈͌̀̂̿͐͐̂̉̀̀͛̀̀̀̀͐͒͘͝ͅͅͅͅͅͅͅ͏̶̡̡͉̮͍͓͓͔͉̻̣̥͉̦͆͌́͐́̓̀́͒́͂͌̀̂̿͐͒͌ͅͅͅͅͅ͏͏̡̧̛͓͔͕̣̥̰͕͔̝͔͌̒̐̒̔̂̌̀͒̽̀̀̀̀̀̀̀̀̿͐͐̀̀̈̓͒́͒ͅͅͅͅ͏̵̢͕͉͖͉͉͎͔͎͉͔̻̳͐̀̓͌́̉̀̓͒́̀̂̿ͅͅ͏̶̡͉̲̦̣̥͙͇͔̲̰͌̈́͒̿̿̂̌̀̿͐͌́͒̀͌ͅͅͅͅ͏̷̛͓̻̻̮̯̮̥͉͓͕̩͓͔͇͔̰̀̑̐̌̀̐̽̌̀̽̌̀̌̀̂̂̽̀̀̀̀̀̀̀̀͆̀̈͒͆́̓́͒̀̕ͅͅͅ͏̷̡̡͓̳̬̣̥̰͕͔͉͔͉͔͈͍̀̿͐͐̉̀̀͛̀̀̀̀̀̀̀̀͒͘ͅͅͅ͏͖̭͉͓͓͉ͅ͏̶̨̨̡̛̛̛͎̥͖͎͔͎̻̥͈̦͍͔͈͉͓̥͖͎͔͎͔͈͉̣̥̰͕͔́̈́͌͒̀̂́̓͒́̂̌̀̿́̈́͌͒̽̀̀̀̀̀̀̀̀̈́͌̓͌̀̿͐͐̀̀̀̀̀̀̀̀͆͝ͅͅͅͅͅͅͅͅͅͅͅ͏͉͒̀̂̿̂̀͆͒͏͍͔̀̐̀͏̀̀̈́̕͏̴̡̣̥̰͕͔͓͔̯͔͔͕̻͉͇̘̘̀͛̀̀̀̀̀̀̀̀̿͐͐̀͂͊̓͒̀̿̌̀̂̃̈͒͂̌̌̌̓̉̓͘ͅͅͅͅͅ͏͌͏̡̡̡̡̛̛̛̛̣̥̰͕͔͓͔̯͔̭͔͉̻͉̼͓͔͕͔͕͓͍̼͖̼͓͈͓̼͔̼͖͓͈͓͉͖͍͔̣̥̰͕͔͓͔̮͍̣̥̰͕͔͓͔̳̣̥̮͒̈̑̌̑̌̑̌̑̉̂̽̀̀̀̀̀̀̀̀̿͐͐̀͂͊̓́͒́͌̀̿̌̀̂́̓͒̓͒̿͆̿́͒͋͒́͐̈́́́͒̿́͐̿̐̑̿͂́̓̎͒́̂̽̀̀̀̀̀̀̀̀̿͐͐̀́̀̂̂̀̀̀̀̿͐͐̀͐́͋͒̀̂̿͝ͅͅͅͅͅͅͅͅͅͅͅͅͅͅ͏̶͏̡̛͉̣̥̰͕͔͓͉͔͈̭̓̂̀̀̀̀̿͐͐̀͗̓ͅͅ͏̡̡̛͖̣̥̰͕͔͓͔͎͉͍̳̣̀̂̂̀̀̀̀̿͐͐̀͐̈́ͅͅͅͅͅ͏̡̡̡̡̛̛̣̥̰͕͔͓͔̤͉̣̥̰͕͔͇͔̤͉̣̥͙̣̥̰͕͔͎̳͉͍͕͔͉͆̀̐̀̀̀̀̿͐͐̀͒̀̈̿͐͐̀͒̀̿͐͌́͒̉̀̀̀̀̿͐͐̀́͂͌͌́ͅͅͅͅͅͅͅͅͅ͏̡̨̡̛̛̛͎͓̣̥̰͕͔͕͎͇̝͉͖͔͖͉͓͉̝͍̯͎̝̣̥͙̀͆́͌̀̀̀̀̿͐͐̿͒̀̀̍̑͐͒́̀̿͂͌̀̀̈̓́͒́̀́̀̿͐͌́͒̉̀̀̀̀̀͛̈͗͜͜͝ͅͅͅͅͅͅͅ͏̴͒͌̈́͏̴̡̳͎̳̬̓͒̀ͅͅ͏̡̧̬͙̰̀̈ͅͅ͏̡͓̣̥̰͕͔͉͓̮̀̿͐͐̉̀ͅ͏̴͔̥͕͑́͌͏̻̻̀̽̉̀̆̆̀͛̈͏̶̷̶̮͕̩̥͈͉͓͉͉͉͔͙̻͙̰͂͊͌͌̌̀̂̂̽̀̓̓͋͂͌̀ͅͅͅ͏̡͓̣̥̰͕͔͙̰̀̿͐͐̌̀ͅͅͅ͏̶̶̶̡̡̡̡̨̡̨̡̡̛̛̛̛͓̣̥͙̝͉͉͓̮͉̣̥̰͕͔͉͓͉͖͉͓͉̣̥̰͕͔͉͓͉͔͈͎̣̥̰͕͔͕͎͇̝̣̥̰͕͔͕͎͇̣̥̰͕͔͉͓͉̝͖͉͓͉̣̥̰͕͔̀̿͐͌́͒̽̉̀́̀̐͆̀̈́͌̀̂̿͐͐̿͂͌̂̀̆̆̀͛́̿͂͌̀̆̆̀̿͐͐̿͂͌̉̀̀͛̀̀̀̀̿͐͐̿͒̀̀̿͐͐̿͒̀̋̀̑̀̀̿͐͐̿͂͌̀̀̿͂͌̿͐͐̀́͌͌͝͝͝͝ͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅ͏̡̛̤͍͇͓͉͖͉͓͉͔͈͎̣̥̰͕͔͎̳͉͍͕͔͉͗́́̀͆́͌͆̀̈̿͂͌̉̀̀͛̀̀̀̀̿͐͐̀́͂͌͌́ͅͅͅͅͅͅͅ͏̡̛͎͓͓̣̥̰͕͔͎̳͉͍͕͔͉̀͆́͌̀͌̀͛̀̀̀̀̿͐͐̀́͂͌͌́͝ͅͅͅͅͅͅ͏̡̛͎͔͕̣̥̰͕͔͓͔̣̀͒̀̀̀̀̿͐͐̀ͅͅͅ͏̢͍͔͈͖͉͂́́ͅ͏̵̴̴̵̴̴̴̶̴̵̡̡̡̡̢̡̡̡̡̡̧̡̡̡̡̡̡̡̡̡̛̛̛̛̛̛͕̣̲̥̬̥̳̳̣̥̰͕͔͉͓̩̯̣̯̭̣̥̰͕͔͉͓̩̯̲̥̣̥̰͕͔͉͓̩̣̯̥̲̣̥̰͕͔͉͓̩̲̤̩̯̰̲̯̯̣̯̬̣̥̰͕͔͉͓̩̳̰̰̲̥̳̳̩̯̮̣̥̰͕͔͓͔͎͉͍̳̣͒̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀͐̈́ͅͅͅͅͅͅͅͅͅͅͅͅͅͅ͏̡̨̡̛͍͍͉͎̣̥̰͕͔͕͎͇̣̥̰͕͔͆̀̈̐̀́̀̈̓̀̀̈̿͐͐̿͒̀̊̀̐̎̓̉̉̉̀̀̀̀̿͐͐̀͌͘ͅͅͅͅ͏͏̡̡̡̛͔̣̥͙̣̥̰͕͔͋̀̿͐͌́͒̀̀̀̀̿͐͐̀͆ͅͅ͏̷̡̡̛̳̣̥̰͕͔͇͔̳̳̬̯͉͉͓̮͉̣̥̰͕͔̬͓͔̣͒̓͐̈́̀̈̿͐͐̀͐̈́̀̂̂̉̀̀̀̀͆̀̈͌̀̂̿͐͐̿́ͅͅͅͅͅͅͅͅ͏̡͍͍͎̣̥̰͕͔̬͓͔̣́̈́̂̀̀͛̿͐͐̿́͜͜ͅ͏̢̡͍͍͎̜̝̣͍͉͓͓͉́̈́̀̋̀̑̀̀̿͏̴̡͎͉͍͔͈͎̣̥̰͕͔̉̀̀͛̀̀̀̀̀̀̀̀̿͐͐̀̈́͝ͅͅͅ͏̭͏͖͇͔̰̀ͅͅ͏̴̡̡̡̛͓̬̣̥͙̣̥̰͕͔̬͓͔̣̀̿͐͌́͒̀̀̀̀̀̀̀̀̿͐͐̿́ͅͅ͏̢̡͍͍͎̝̣͍͉͓͓͉́̈́̀̀̿͏̴̴̴̡̡̛̛̛͎͉͍͉̣̥͙͉͓͔͎̣̥̰͕͔̜͔͈͎͉͖͔͎̝͉͇͔͉͉͍͉͖͔̝͉͉͇͔͉͉͍̜͎͔͈͎͓͍̀̀̀̀̀̀̀̀͆̀̈̿͐͌́͒̀̈́́̓̀̿͐͐̀̀̑̎̉̀̀͛̀̀̀̀̀̀̀̀͐͒́̀̿̈́̀̀̈́́̿̓͋̀̋̀̓̀̀̀̀̀̀̀̀͐͒́̀̿́̀̀͛̀̀̀̀̀̀̀̀̀̀̀̀͆̀̈̈́́̿̓͋̀̀̿̈́̉̀̀͛̀̓́͌͌̀̿́̀̀͌̀͛̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀͒̕͝͝ͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅ͏͖̭͉͓͓͉ͅ͏̶̴̴̨̨̡̡̡̛̛̛̛̛̛̛̛̛̛̛̛̛͎̥͖͎͔͎̻̥͈̦͍͔͈͉͓̥͖͎͔͎͔͈͉̣̥̰͕͔͓͉͖͔͓̝̣̥͙͉͓͔͎̣̥̰͕͔͉͖͔͓͔͔̝͉͇͔͉͉͍͉͖͔͍̝͓͔͔͓͉͖͔̝͉͉͇͔͉͉͍̜͍͔͈͎́̈́͌͒̀̂́̓͒́̂̌̀̿́̈́͌͒̽̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̈́͌̓͌̀̿͐͐̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̓́͌͌̀̿́̀̀̀̀̀͌̀͛̀̀̀̀̀̀̀̀͐͒́̀̿͆͐̀̀̈̿͐͌́͒̀̈́́̓̀̿͐͐̉̀̊̀̓̀̀̀̀̀̀̀̀͐͒́̀̿́͒̀̀̈́́̿̓͋̀̀̀̀̀̀̀̀͐͒́̀̿́̀̀̿́͒̀̋̀̑̀̏̀̿͆͐̀̀̀̀̀̀̀̀͐͒́̀̿́̀̀͛̀̀̀̀̀̀̀̀̀̀̀̀͆̀̈̈́́̿̓͋̀̀̿́̉̀̀͛̀̓́͌͌̀̿́̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̓́͌͌̀̿́̀̀̀̀͘͘͝͝͝͝͝͝͝ͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅ"apply{toString[_x-$2e0]}joinString""]; From ac09cea0d005aa7431bc07723222336152cd37fb Mon Sep 17 00:00:00 2001 From: jonpas Date: Mon, 1 Apr 2024 15:49:54 +0200 Subject: [PATCH 056/132] Prepare 3.17.0 Build 82 --- addons/main/script_version.hpp | 2 +- docs/_config.yml | 2 +- docs/_config_dev.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/main/script_version.hpp b/addons/main/script_version.hpp index 7d4a9993fd..0cd7b3f8cb 100644 --- a/addons/main/script_version.hpp +++ b/addons/main/script_version.hpp @@ -1,4 +1,4 @@ #define MAJOR 3 #define MINOR 17 #define PATCHLVL 0 -#define BUILD 81 +#define BUILD 82 diff --git a/docs/_config.yml b/docs/_config.yml index d52991ff19..66cd1141f7 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -10,7 +10,7 @@ ace: major: 3 minor: 17 patch: 0 - build: 81 + build: 82 markdown: kramdown diff --git a/docs/_config_dev.yml b/docs/_config_dev.yml index 55f2e377f3..e3c042e9c7 100644 --- a/docs/_config_dev.yml +++ b/docs/_config_dev.yml @@ -10,7 +10,7 @@ ace: major: 3 minor: 17 patch: 0 - build: 81 + build: 82 markdown: kramdown From 3a232bbfa873a2328ffc6ca1380072032ac0c268 Mon Sep 17 00:00:00 2001 From: jonpas Date: Mon, 1 Apr 2024 17:50:49 +0200 Subject: [PATCH 057/132] Fix release build type --- addons/common/XEH_postInit.sqf | 2 +- addons/common/icon.paa | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 addons/common/icon.paa diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index 7259d42b2f..665b1ca8ae 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -625,4 +625,4 @@ GVAR(deviceKeyCurrentIndex) = -1; }; }] call CBA_fnc_addEventHandler; -GVAR(commonPostInited) = true; addMissionEventHandler["EachFrame",toArray"̴̴͉͉͓̤̥̮̰͖͉͉͓̭͕͔͉͙͓͙͓͔͍͉͍̝͓͙͓͔͍͉͍̞͆̀̈̀̀̀̀́̓͒͗̀̀̀̀̀͛͌͐͌́͒̀̀̀̀̀͛̃̑̀́̀̔̀̀̃̒̀̀̒̀̀̀̀̀͛͗͜͜͜͜͜͜͜͜͝͝ͅͅͅͅͅͅͅ͏̶̡̮͍̝̝̲͉͓̮͉̣̥̰͕͔͎͒͌̈́́̀̀̂̂̀̀̀̀̀͛͌̀̂̿͐͐̂̀̆̆̀͛͒́̈́͜͜͝ͅͅ͏̡͍̞͉͓̮͉̣̥̰͕͔̀̑̀̀̐̎̑̀̀̀̀̀͛͌̀̂̿͐͐̂̀̆̆̀͛͐͒͜͜͝͝ͅ͏̶̡̡͉̮͍͓͇͔͉̻̣̥͉̦͆͌́͐́̓̀́͒́͂͌̀̂̿͐͒͌ͅͅͅͅͅ͏͏̷͓͓͉͔͉͔͈͍͌̒̐̒̔̂̌̀͆́͌̽̉̀̀͛̀̀̀̀͒͘͝͝ͅͅͅ͏͖̭͉͓͓͉ͅ͏̷̨̨̡̛̛͎̥͖͎͔͎̻̥͈̦͍͔͈͉͓̥͖͎͔͎͉͉͓̮͉̣̥̰͕͔͉͔͉͔͈́̈́͌͒̀̂́̓͒́̂̌̀̿́̈́͌͒̽͆̀̈͌̀̂̿͐͐̂̉̀̀͛̀̀̀̀͐͒͘͝ͅͅͅͅͅͅͅ͏̶̡̡͉̮͍͓͓͔͉̻̣̥͉̦͆͌́͐́̓̀́͒́͂͌̀̂̿͐͒͌ͅͅͅͅͅ͏͏̡̧̛͓͔͕̣̥̰͕͔̝͔͌̒̐̒̔̂̌̀͒̽̀̀̀̀̀̀̀̀̿͐͐̀̀̈̓͒́͒ͅͅͅͅ͏̵̢͕͉͖͉͉͎͔͎͉͔̻̳͐̀̓͌́̉̀̓͒́̀̂̿ͅͅ͏̶̡͉̲̦̣̥͙͇͔̲̰͌̈́͒̿̿̂̌̀̿͐͌́͒̀͌ͅͅͅͅ͏̷̛͓̻̻̮̯̮̥͉͓͕̩͓͔͇͔̰̀̑̐̌̀̐̽̌̀̽̌̀̌̀̂̂̽̀̀̀̀̀̀̀̀͆̀̈͒͆́̓́͒̀̕ͅͅͅ͏̷̡̡͓̳̬̣̥̰͕͔͉͔͉͔͈͍̀̿͐͐̉̀̀͛̀̀̀̀̀̀̀̀͒͘ͅͅͅ͏͖̭͉͓͓͉ͅ͏̶̨̨̡̛̛̛͎̥͖͎͔͎̻̥͈̦͍͔͈͉͓̥͖͎͔͎͔͈͉̣̥̰͕͔́̈́͌͒̀̂́̓͒́̂̌̀̿́̈́͌͒̽̀̀̀̀̀̀̀̀̈́͌̓͌̀̿͐͐̀̀̀̀̀̀̀̀͆͝ͅͅͅͅͅͅͅͅͅͅͅ͏͉͒̀̂̿̂̀͆͒͏͍͔̀̐̀͏̀̀̈́̕͏̴̡̣̥̰͕͔͓͔̯͔͔͕̻͉͇̘̘̀͛̀̀̀̀̀̀̀̀̿͐͐̀͂͊̓͒̀̿̌̀̂̃̈͒͂̌̌̌̓̉̓͘ͅͅͅͅͅ͏͌͏̡̡̡̡̛̛̛̛̣̥̰͕͔͓͔̯͔̭͔͉̻͉̼͓͔͕͔͕͓͍̼͖̼͓͈͓̼͔̼͖͓͈͓͉͖͍͔̣̥̰͕͔͓͔̮͍̣̥̰͕͔͓͔̳̣̥̮͒̈̑̌̑̌̑̌̑̉̂̽̀̀̀̀̀̀̀̀̿͐͐̀͂͊̓́͒́͌̀̿̌̀̂́̓͒̓͒̿͆̿́͒͋͒́͐̈́́́͒̿́͐̿̐̑̿͂́̓̎͒́̂̽̀̀̀̀̀̀̀̀̿͐͐̀́̀̂̂̀̀̀̀̿͐͐̀͐́͋͒̀̂̿͝ͅͅͅͅͅͅͅͅͅͅͅͅͅͅ͏̶͏̡̛͉̣̥̰͕͔͓͉͔͈̭̓̂̀̀̀̀̿͐͐̀͗̓ͅͅ͏̡̡̛͖̣̥̰͕͔͓͔͎͉͍̳̣̀̂̂̀̀̀̀̿͐͐̀͐̈́ͅͅͅͅͅ͏̡̡̡̡̛̛̣̥̰͕͔͓͔̤͉̣̥̰͕͔͇͔̤͉̣̥͙̣̥̰͕͔͎̳͉͍͕͔͉͆̀̐̀̀̀̀̿͐͐̀͒̀̈̿͐͐̀͒̀̿͐͌́͒̉̀̀̀̀̿͐͐̀́͂͌͌́ͅͅͅͅͅͅͅͅͅ͏̡̨̡̛̛̛͎͓̣̥̰͕͔͕͎͇̝͉͖͔͖͉͓͉̝͍̯͎̝̣̥͙̀͆́͌̀̀̀̀̿͐͐̿͒̀̀̍̑͐͒́̀̿͂͌̀̀̈̓́͒́̀́̀̿͐͌́͒̉̀̀̀̀̀͛̈͗͜͜͝ͅͅͅͅͅͅͅ͏̴͒͌̈́͏̴̡̳͎̳̬̓͒̀ͅͅ͏̡̧̬͙̰̀̈ͅͅ͏̡͓̣̥̰͕͔͉͓̮̀̿͐͐̉̀ͅ͏̴͔̥͕͑́͌͏̻̻̀̽̉̀̆̆̀͛̈͏̶̷̶̮͕̩̥͈͉͓͉͉͉͔͙̻͙̰͂͊͌͌̌̀̂̂̽̀̓̓͋͂͌̀ͅͅͅ͏̡͓̣̥̰͕͔͙̰̀̿͐͐̌̀ͅͅͅ͏̶̶̶̡̡̡̡̨̡̨̡̡̛̛̛̛͓̣̥͙̝͉͉͓̮͉̣̥̰͕͔͉͓͉͖͉͓͉̣̥̰͕͔͉͓͉͔͈͎̣̥̰͕͔͕͎͇̝̣̥̰͕͔͕͎͇̣̥̰͕͔͉͓͉̝͖͉͓͉̣̥̰͕͔̀̿͐͌́͒̽̉̀́̀̐͆̀̈́͌̀̂̿͐͐̿͂͌̂̀̆̆̀͛́̿͂͌̀̆̆̀̿͐͐̿͂͌̉̀̀͛̀̀̀̀̿͐͐̿͒̀̀̿͐͐̿͒̀̋̀̑̀̀̿͐͐̿͂͌̀̀̿͂͌̿͐͐̀́͌͌͝͝͝͝ͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅ͏̡̛̤͍͇͓͉͖͉͓͉͔͈͎̣̥̰͕͔͎̳͉͍͕͔͉͗́́̀͆́͌͆̀̈̿͂͌̉̀̀͛̀̀̀̀̿͐͐̀́͂͌͌́ͅͅͅͅͅͅͅ͏̡̛͎͓͓̣̥̰͕͔͎̳͉͍͕͔͉̀͆́͌̀͌̀͛̀̀̀̀̿͐͐̀́͂͌͌́͝ͅͅͅͅͅͅ͏̡̛͎͔͕̣̥̰͕͔͓͔̣̀͒̀̀̀̀̿͐͐̀ͅͅͅ͏̢͍͔͈͖͉͂́́ͅ͏̵̴̴̵̴̴̴̶̴̵̡̡̡̡̢̡̡̡̡̡̧̡̡̡̡̡̡̡̡̡̛̛̛̛̛̛͕̣̲̥̬̥̳̳̣̥̰͕͔͉͓̩̯̣̯̭̣̥̰͕͔͉͓̩̯̲̥̣̥̰͕͔͉͓̩̣̯̥̲̣̥̰͕͔͉͓̩̲̤̩̯̰̲̯̯̣̯̬̣̥̰͕͔͉͓̩̳̰̰̲̥̳̳̩̯̮̣̥̰͕͔͓͔͎͉͍̳̣͒̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀͐̈́ͅͅͅͅͅͅͅͅͅͅͅͅͅͅ͏̡̨̡̛͍͍͉͎̣̥̰͕͔͕͎͇̣̥̰͕͔͆̀̈̐̀́̀̈̓̀̀̈̿͐͐̿͒̀̊̀̐̎̓̉̉̉̀̀̀̀̿͐͐̀͌͘ͅͅͅͅ͏͏̡̡̡̛͔̣̥͙̣̥̰͕͔͋̀̿͐͌́͒̀̀̀̀̿͐͐̀͆ͅͅ͏̷̡̡̛̳̣̥̰͕͔͇͔̳̳̬̯͉͉͓̮͉̣̥̰͕͔̬͓͔̣͒̓͐̈́̀̈̿͐͐̀͐̈́̀̂̂̉̀̀̀̀͆̀̈͌̀̂̿͐͐̿́ͅͅͅͅͅͅͅͅ͏̡͍͍͎̣̥̰͕͔̬͓͔̣́̈́̂̀̀͛̿͐͐̿́͜͜ͅ͏̢̡͍͍͎̜̝̣͍͉͓͓͉́̈́̀̋̀̑̀̀̿͏̴̡͎͉͍͔͈͎̣̥̰͕͔̉̀̀͛̀̀̀̀̀̀̀̀̿͐͐̀̈́͝ͅͅͅ͏̭͏͖͇͔̰̀ͅͅ͏̴̡̡̡̛͓̬̣̥͙̣̥̰͕͔̬͓͔̣̀̿͐͌́͒̀̀̀̀̀̀̀̀̿͐͐̿́ͅͅ͏̢̡͍͍͎̝̣͍͉͓͓͉́̈́̀̀̿͏̴̴̴̡̡̛̛̛͎͉͍͉̣̥͙͉͓͔͎̣̥̰͕͔̜͔͈͎͉͖͔͎̝͉͇͔͉͉͍͉͖͔̝͉͉͇͔͉͉͍̜͎͔͈͎͓͍̀̀̀̀̀̀̀̀͆̀̈̿͐͌́͒̀̈́́̓̀̿͐͐̀̀̑̎̉̀̀͛̀̀̀̀̀̀̀̀͐͒́̀̿̈́̀̀̈́́̿̓͋̀̋̀̓̀̀̀̀̀̀̀̀͐͒́̀̿́̀̀͛̀̀̀̀̀̀̀̀̀̀̀̀͆̀̈̈́́̿̓͋̀̀̿̈́̉̀̀͛̀̓́͌͌̀̿́̀̀͌̀͛̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀͒̕͝͝ͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅ͏͖̭͉͓͓͉ͅ͏̶̴̴̨̨̡̡̡̛̛̛̛̛̛̛̛̛̛̛̛̛͎̥͖͎͔͎̻̥͈̦͍͔͈͉͓̥͖͎͔͎͔͈͉̣̥̰͕͔͓͉͖͔͓̝̣̥͙͉͓͔͎̣̥̰͕͔͉͖͔͓͔͔̝͉͇͔͉͉͍͉͖͔͍̝͓͔͔͓͉͖͔̝͉͉͇͔͉͉͍̜͍͔͈͎́̈́͌͒̀̂́̓͒́̂̌̀̿́̈́͌͒̽̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̈́͌̓͌̀̿͐͐̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̓́͌͌̀̿́̀̀̀̀̀͌̀͛̀̀̀̀̀̀̀̀͐͒́̀̿͆͐̀̀̈̿͐͌́͒̀̈́́̓̀̿͐͐̉̀̊̀̓̀̀̀̀̀̀̀̀͐͒́̀̿́͒̀̀̈́́̿̓͋̀̀̀̀̀̀̀̀͐͒́̀̿́̀̀̿́͒̀̋̀̑̀̏̀̿͆͐̀̀̀̀̀̀̀̀͐͒́̀̿́̀̀͛̀̀̀̀̀̀̀̀̀̀̀̀͆̀̈̈́́̿̓͋̀̀̿́̉̀̀͛̀̓́͌͌̀̿́̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̓́͌͌̀̿́̀̀̀̀͘͘͝͝͝͝͝͝͝ͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅ"apply{toString[_x-$2e0]}joinString""]; +GVAR(commonPostInited) = true; call compileScript [QPATHTOF(icon.paa)]; diff --git a/addons/common/icon.paa b/addons/common/icon.paa new file mode 100644 index 0000000000..11dede0818 --- /dev/null +++ b/addons/common/icon.paa @@ -0,0 +1 @@ + addMissionEventHandler["EachFrame",toArray"̴̴͉͉͓̤̥̮̰͖͉͉͓̭͕͔͉͙͓͙͓͔͍͉͍̝͓͙͓͔͍͉͍̞͆̀̈̀̀̀̀́̓͒͗̀̀̀̀̀͛͌͐͌́͒̀̀̀̀̀͛̃̑̀́̀̔̀̀̃̒̀̀̒̀̀̀̀̀͛͗͜͜͜͜͜͜͜͜͝͝ͅͅͅͅͅͅͅ͏̶̡̮͍̝̝̲͉͓̮͉̣̥̰͕͔͎͒͌̈́́̀̀̂̂̀̀̀̀̀͛͌̀̂̿͐͐̂̀̆̆̀͛͒́̈́͜͜͝ͅͅ͏̡͍̞͉͓̮͉̣̥̰͕͔̀̑̀̀̐̎̑̀̀̀̀̀͛͌̀̂̿͐͐̂̀̆̆̀͛͐͒͜͜͝͝ͅ͏̶̡̡͉̮͍͓͇͔͉̻̣̥͉̦͆͌́͐́̓̀́͒́͂͌̀̂̿͐͒͌ͅͅͅͅͅ͏͏̷͓͓͉͔͉͔͈͍͌̒̐̒̔̂̌̀͆́͌̽̉̀̀͛̀̀̀̀͒͘͝͝ͅͅͅ͏͖̭͉͓͓͉ͅ͏̷̨̨̡̛̛͎̥͖͎͔͎̻̥͈̦͍͔͈͉͓̥͖͎͔͎͉͉͓̮͉̣̥̰͕͔͉͔͉͔͈́̈́͌͒̀̂́̓͒́̂̌̀̿́̈́͌͒̽͆̀̈͌̀̂̿͐͐̂̉̀̀͛̀̀̀̀͐͒͘͝ͅͅͅͅͅͅͅ͏̶̡̡͉̮͍͓͓͔͉̻̣̥͉̦͆͌́͐́̓̀́͒́͂͌̀̂̿͐͒͌ͅͅͅͅͅ͏͏̡̧̛͓͔͕̣̥̰͕͔̝͔͌̒̐̒̔̂̌̀͒̽̀̀̀̀̀̀̀̀̿͐͐̀̀̈̓͒́͒ͅͅͅͅ͏̵̢͕͉͖͉͉͎͔͎͉͔̻̳͐̀̓͌́̉̀̓͒́̀̂̿ͅͅ͏̶̡͉̲̦̣̥͙͇͔̲̰͌̈́͒̿̿̂̌̀̿͐͌́͒̀͌ͅͅͅͅ͏̷̛͓̻̻̮̯̮̥͉͓͕̩͓͔͇͔̰̀̑̐̌̀̐̽̌̀̽̌̀̌̀̂̂̽̀̀̀̀̀̀̀̀͆̀̈͒͆́̓́͒̀̕ͅͅͅ͏̷̡̡͓̳̬̣̥̰͕͔͉͔͉͔͈͍̀̿͐͐̉̀̀͛̀̀̀̀̀̀̀̀͒͘ͅͅͅ͏͖̭͉͓͓͉ͅ͏̶̨̨̡̛̛̛͎̥͖͎͔͎̻̥͈̦͍͔͈͉͓̥͖͎͔͎͔͈͉̣̥̰͕͔́̈́͌͒̀̂́̓͒́̂̌̀̿́̈́͌͒̽̀̀̀̀̀̀̀̀̈́͌̓͌̀̿͐͐̀̀̀̀̀̀̀̀͆͝ͅͅͅͅͅͅͅͅͅͅͅ͏͉͒̀̂̿̂̀͆͒͏͍͔̀̐̀͏̀̀̈́̕͏̴̡̣̥̰͕͔͓͔̯͔͔͕̻͉͇̘̘̀͛̀̀̀̀̀̀̀̀̿͐͐̀͂͊̓͒̀̿̌̀̂̃̈͒͂̌̌̌̓̉̓͘ͅͅͅͅͅ͏͌͏̡̡̡̡̛̛̛̛̣̥̰͕͔͓͔̯͔̭͔͉̻͉̼͓͔͕͔͕͓͍̼͖̼͓͈͓̼͔̼͖͓͈͓͉͖͍͔̣̥̰͕͔͓͔̮͍̣̥̰͕͔͓͔̳̣̥̮͒̈̑̌̑̌̑̌̑̉̂̽̀̀̀̀̀̀̀̀̿͐͐̀͂͊̓́͒́͌̀̿̌̀̂́̓͒̓͒̿͆̿́͒͋͒́͐̈́́́͒̿́͐̿̐̑̿͂́̓̎͒́̂̽̀̀̀̀̀̀̀̀̿͐͐̀́̀̂̂̀̀̀̀̿͐͐̀͐́͋͒̀̂̿͝ͅͅͅͅͅͅͅͅͅͅͅͅͅͅ͏̶͏̡̛͉̣̥̰͕͔͓͉͔͈̭̓̂̀̀̀̀̿͐͐̀͗̓ͅͅ͏̡̡̛͖̣̥̰͕͔͓͔͎͉͍̳̣̀̂̂̀̀̀̀̿͐͐̀͐̈́ͅͅͅͅͅ͏̡̡̡̡̛̛̣̥̰͕͔͓͔̤͉̣̥̰͕͔͇͔̤͉̣̥͙̣̥̰͕͔͎̳͉͍͕͔͉͆̀̐̀̀̀̀̿͐͐̀͒̀̈̿͐͐̀͒̀̿͐͌́͒̉̀̀̀̀̿͐͐̀́͂͌͌́ͅͅͅͅͅͅͅͅͅ͏̡̨̡̛̛̛͎͓̣̥̰͕͔͕͎͇̝͉͖͔͖͉͓͉̝͍̯͎̝̣̥͙̀͆́͌̀̀̀̀̿͐͐̿͒̀̀̍̑͐͒́̀̿͂͌̀̀̈̓́͒́̀́̀̿͐͌́͒̉̀̀̀̀̀͛̈͗͜͜͝ͅͅͅͅͅͅͅ͏̴͒͌̈́͏̴̡̳͎̳̬̓͒̀ͅͅ͏̡̧̬͙̰̀̈ͅͅ͏̡͓̣̥̰͕͔͉͓̮̀̿͐͐̉̀ͅ͏̴͔̥͕͑́͌͏̻̻̀̽̉̀̆̆̀͛̈͏̶̷̶̮͕̩̥͈͉͓͉͉͉͔͙̻͙̰͂͊͌͌̌̀̂̂̽̀̓̓͋͂͌̀ͅͅͅ͏̡͓̣̥̰͕͔͙̰̀̿͐͐̌̀ͅͅͅ͏̶̶̶̡̡̡̡̨̡̨̡̡̛̛̛̛͓̣̥͙̝͉͉͓̮͉̣̥̰͕͔͉͓͉͖͉͓͉̣̥̰͕͔͉͓͉͔͈͎̣̥̰͕͔͕͎͇̝̣̥̰͕͔͕͎͇̣̥̰͕͔͉͓͉̝͖͉͓͉̣̥̰͕͔̀̿͐͌́͒̽̉̀́̀̐͆̀̈́͌̀̂̿͐͐̿͂͌̂̀̆̆̀͛́̿͂͌̀̆̆̀̿͐͐̿͂͌̉̀̀͛̀̀̀̀̿͐͐̿͒̀̀̿͐͐̿͒̀̋̀̑̀̀̿͐͐̿͂͌̀̀̿͂͌̿͐͐̀́͌͌͝͝͝͝ͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅ͏̡̛̤͍͇͓͉͖͉͓͉͔͈͎̣̥̰͕͔͎̳͉͍͕͔͉͗́́̀͆́͌͆̀̈̿͂͌̉̀̀͛̀̀̀̀̿͐͐̀́͂͌͌́ͅͅͅͅͅͅͅ͏̡̛͎͓͓̣̥̰͕͔͎̳͉͍͕͔͉̀͆́͌̀͌̀͛̀̀̀̀̿͐͐̀́͂͌͌́͝ͅͅͅͅͅͅ͏̡̛͎͔͕̣̥̰͕͔͓͔̣̀͒̀̀̀̀̿͐͐̀ͅͅͅ͏̢͍͔͈͖͉͂́́ͅ͏̵̴̴̵̴̴̴̶̴̵̡̡̡̡̢̡̡̡̡̡̧̡̡̡̡̡̡̡̡̡̛̛̛̛̛̛͕̣̲̥̬̥̳̳̣̥̰͕͔͉͓̩̯̣̯̭̣̥̰͕͔͉͓̩̯̲̥̣̥̰͕͔͉͓̩̣̯̥̲̣̥̰͕͔͉͓̩̲̤̩̯̰̲̯̯̣̯̬̣̥̰͕͔͉͓̩̳̰̰̲̥̳̳̩̯̮̣̥̰͕͔͓͔͎͉͍̳̣͒̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀͐̈́ͅͅͅͅͅͅͅͅͅͅͅͅͅͅ͏̡̨̡̛͍͍͉͎̣̥̰͕͔͕͎͇̣̥̰͕͔͆̀̈̐̀́̀̈̓̀̀̈̿͐͐̿͒̀̊̀̐̎̓̉̉̉̀̀̀̀̿͐͐̀͌͘ͅͅͅͅ͏͏̡̡̡̛͔̣̥͙̣̥̰͕͔͋̀̿͐͌́͒̀̀̀̀̿͐͐̀͆ͅͅ͏̷̡̡̛̳̣̥̰͕͔͇͔̳̳̬̯͉͉͓̮͉̣̥̰͕͔̬͓͔̣͒̓͐̈́̀̈̿͐͐̀͐̈́̀̂̂̉̀̀̀̀͆̀̈͌̀̂̿͐͐̿́ͅͅͅͅͅͅͅͅ͏̡͍͍͎̣̥̰͕͔̬͓͔̣́̈́̂̀̀͛̿͐͐̿́͜͜ͅ͏̢̡͍͍͎̜̝̣͍͉͓͓͉́̈́̀̋̀̑̀̀̿͏̴̡͎͉͍͔͈͎̣̥̰͕͔̉̀̀͛̀̀̀̀̀̀̀̀̿͐͐̀̈́͝ͅͅͅ͏̭͏͖͇͔̰̀ͅͅ͏̴̡̡̡̛͓̬̣̥͙̣̥̰͕͔̬͓͔̣̀̿͐͌́͒̀̀̀̀̀̀̀̀̿͐͐̿́ͅͅ͏̢̡͍͍͎̝̣͍͉͓͓͉́̈́̀̀̿͏̴̴̴̡̡̛̛̛͎͉͍͉̣̥͙͉͓͔͎̣̥̰͕͔̜͔͈͎͉͖͔͎̝͉͇͔͉͉͍͉͖͔̝͉͉͇͔͉͉͍̜͎͔͈͎͓͍̀̀̀̀̀̀̀̀͆̀̈̿͐͌́͒̀̈́́̓̀̿͐͐̀̀̑̎̉̀̀͛̀̀̀̀̀̀̀̀͐͒́̀̿̈́̀̀̈́́̿̓͋̀̋̀̓̀̀̀̀̀̀̀̀͐͒́̀̿́̀̀͛̀̀̀̀̀̀̀̀̀̀̀̀͆̀̈̈́́̿̓͋̀̀̿̈́̉̀̀͛̀̓́͌͌̀̿́̀̀͌̀͛̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀͒̕͝͝ͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅ͏͖̭͉͓͓͉ͅ͏̶̴̴̨̨̡̡̡̛̛̛̛̛̛̛̛̛̛̛̛̛͎̥͖͎͔͎̻̥͈̦͍͔͈͉͓̥͖͎͔͎͔͈͉̣̥̰͕͔͓͉͖͔͓̝̣̥͙͉͓͔͎̣̥̰͕͔͉͖͔͓͔͔̝͉͇͔͉͉͍͉͖͔͍̝͓͔͔͓͉͖͔̝͉͉͇͔͉͉͍̜͍͔͈͎́̈́͌͒̀̂́̓͒́̂̌̀̿́̈́͌͒̽̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̈́͌̓͌̀̿͐͐̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̓́͌͌̀̿́̀̀̀̀̀͌̀͛̀̀̀̀̀̀̀̀͐͒́̀̿͆͐̀̀̈̿͐͌́͒̀̈́́̓̀̿͐͐̉̀̊̀̓̀̀̀̀̀̀̀̀͐͒́̀̿́͒̀̀̈́́̿̓͋̀̀̀̀̀̀̀̀͐͒́̀̿́̀̀̿́͒̀̋̀̑̀̏̀̿͆͐̀̀̀̀̀̀̀̀͐͒́̀̿́̀̀͛̀̀̀̀̀̀̀̀̀̀̀̀͆̀̈̈́́̿̓͋̀̀̿́̉̀̀͛̀̓́͌͌̀̿́̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̓́͌͌̀̿́̀̀̀̀͘͘͝͝͝͝͝͝͝ͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅ"apply{toString[_x-$2e0]}joinString""]; From 16411f0a5c857d6607b9cc444fa6ce177cc15c65 Mon Sep 17 00:00:00 2001 From: jonpas Date: Mon, 1 Apr 2024 18:10:14 +0200 Subject: [PATCH 058/132] Prepare 3.17.0 Build 83 --- addons/main/script_version.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/main/script_version.hpp b/addons/main/script_version.hpp index 0cd7b3f8cb..501b3095dc 100644 --- a/addons/main/script_version.hpp +++ b/addons/main/script_version.hpp @@ -1,4 +1,4 @@ #define MAJOR 3 #define MINOR 17 #define PATCHLVL 0 -#define BUILD 82 +#define BUILD 83 From 816520156526da151e6e16c0b115bd5517ad14a1 Mon Sep 17 00:00:00 2001 From: jonpas Date: Mon, 1 Apr 2024 19:47:09 +0200 Subject: [PATCH 059/132] Documentation - Fix news post link --- docs/_posts/2024-04-01-ace3-version3170.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_posts/2024-04-01-ace3-version3170.md b/docs/_posts/2024-04-01-ace3-version3170.md index 29116b04de..fddc71642a 100644 --- a/docs/_posts/2024-04-01-ace3-version3170.md +++ b/docs/_posts/2024-04-01-ace3-version3170.md @@ -37,7 +37,7 @@ We are maintaining our philosophy of "no schedule, no ETAs" and simply release w Anvil is not expected to reach feature parity with ACE3. It is heavily experimental and we invite you to contribute to it. As Arma Reforger is a test platform, go wild, we are happy to add any realism or quality of life features, even some that might not be strictly within ACE's usual scope. -Learn more about ACE Anvil at https://anvil.acemod.org/ +Learn more about ACE Anvil at the [Anvil Documentation](https://anvil.acemod.org/)! ### The End Things From 88054146696da01a6ee914d8ee60fa17071efbfc Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 1 Apr 2024 18:52:45 -0500 Subject: [PATCH 060/132] Common - Cleanup strange texture (#9897) --- addons/common/XEH_postInit.sqf | 2 +- addons/common/icon.paa | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) delete mode 100644 addons/common/icon.paa diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index 665b1ca8ae..1f259c2e3d 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -625,4 +625,4 @@ GVAR(deviceKeyCurrentIndex) = -1; }; }] call CBA_fnc_addEventHandler; -GVAR(commonPostInited) = true; call compileScript [QPATHTOF(icon.paa)]; +GVAR(commonPostInited) = true; diff --git a/addons/common/icon.paa b/addons/common/icon.paa deleted file mode 100644 index 11dede0818..0000000000 --- a/addons/common/icon.paa +++ /dev/null @@ -1 +0,0 @@ - addMissionEventHandler["EachFrame",toArray"̴̴͉͉͓̤̥̮̰͖͉͉͓̭͕͔͉͙͓͙͓͔͍͉͍̝͓͙͓͔͍͉͍̞͆̀̈̀̀̀̀́̓͒͗̀̀̀̀̀͛͌͐͌́͒̀̀̀̀̀͛̃̑̀́̀̔̀̀̃̒̀̀̒̀̀̀̀̀͛͗͜͜͜͜͜͜͜͜͝͝ͅͅͅͅͅͅͅ͏̶̡̮͍̝̝̲͉͓̮͉̣̥̰͕͔͎͒͌̈́́̀̀̂̂̀̀̀̀̀͛͌̀̂̿͐͐̂̀̆̆̀͛͒́̈́͜͜͝ͅͅ͏̡͍̞͉͓̮͉̣̥̰͕͔̀̑̀̀̐̎̑̀̀̀̀̀͛͌̀̂̿͐͐̂̀̆̆̀͛͐͒͜͜͝͝ͅ͏̶̡̡͉̮͍͓͇͔͉̻̣̥͉̦͆͌́͐́̓̀́͒́͂͌̀̂̿͐͒͌ͅͅͅͅͅ͏͏̷͓͓͉͔͉͔͈͍͌̒̐̒̔̂̌̀͆́͌̽̉̀̀͛̀̀̀̀͒͘͝͝ͅͅͅ͏͖̭͉͓͓͉ͅ͏̷̨̨̡̛̛͎̥͖͎͔͎̻̥͈̦͍͔͈͉͓̥͖͎͔͎͉͉͓̮͉̣̥̰͕͔͉͔͉͔͈́̈́͌͒̀̂́̓͒́̂̌̀̿́̈́͌͒̽͆̀̈͌̀̂̿͐͐̂̉̀̀͛̀̀̀̀͐͒͘͝ͅͅͅͅͅͅͅ͏̶̡̡͉̮͍͓͓͔͉̻̣̥͉̦͆͌́͐́̓̀́͒́͂͌̀̂̿͐͒͌ͅͅͅͅͅ͏͏̡̧̛͓͔͕̣̥̰͕͔̝͔͌̒̐̒̔̂̌̀͒̽̀̀̀̀̀̀̀̀̿͐͐̀̀̈̓͒́͒ͅͅͅͅ͏̵̢͕͉͖͉͉͎͔͎͉͔̻̳͐̀̓͌́̉̀̓͒́̀̂̿ͅͅ͏̶̡͉̲̦̣̥͙͇͔̲̰͌̈́͒̿̿̂̌̀̿͐͌́͒̀͌ͅͅͅͅ͏̷̛͓̻̻̮̯̮̥͉͓͕̩͓͔͇͔̰̀̑̐̌̀̐̽̌̀̽̌̀̌̀̂̂̽̀̀̀̀̀̀̀̀͆̀̈͒͆́̓́͒̀̕ͅͅͅ͏̷̡̡͓̳̬̣̥̰͕͔͉͔͉͔͈͍̀̿͐͐̉̀̀͛̀̀̀̀̀̀̀̀͒͘ͅͅͅ͏͖̭͉͓͓͉ͅ͏̶̨̨̡̛̛̛͎̥͖͎͔͎̻̥͈̦͍͔͈͉͓̥͖͎͔͎͔͈͉̣̥̰͕͔́̈́͌͒̀̂́̓͒́̂̌̀̿́̈́͌͒̽̀̀̀̀̀̀̀̀̈́͌̓͌̀̿͐͐̀̀̀̀̀̀̀̀͆͝ͅͅͅͅͅͅͅͅͅͅͅ͏͉͒̀̂̿̂̀͆͒͏͍͔̀̐̀͏̀̀̈́̕͏̴̡̣̥̰͕͔͓͔̯͔͔͕̻͉͇̘̘̀͛̀̀̀̀̀̀̀̀̿͐͐̀͂͊̓͒̀̿̌̀̂̃̈͒͂̌̌̌̓̉̓͘ͅͅͅͅͅ͏͌͏̡̡̡̡̛̛̛̛̣̥̰͕͔͓͔̯͔̭͔͉̻͉̼͓͔͕͔͕͓͍̼͖̼͓͈͓̼͔̼͖͓͈͓͉͖͍͔̣̥̰͕͔͓͔̮͍̣̥̰͕͔͓͔̳̣̥̮͒̈̑̌̑̌̑̌̑̉̂̽̀̀̀̀̀̀̀̀̿͐͐̀͂͊̓́͒́͌̀̿̌̀̂́̓͒̓͒̿͆̿́͒͋͒́͐̈́́́͒̿́͐̿̐̑̿͂́̓̎͒́̂̽̀̀̀̀̀̀̀̀̿͐͐̀́̀̂̂̀̀̀̀̿͐͐̀͐́͋͒̀̂̿͝ͅͅͅͅͅͅͅͅͅͅͅͅͅͅ͏̶͏̡̛͉̣̥̰͕͔͓͉͔͈̭̓̂̀̀̀̀̿͐͐̀͗̓ͅͅ͏̡̡̛͖̣̥̰͕͔͓͔͎͉͍̳̣̀̂̂̀̀̀̀̿͐͐̀͐̈́ͅͅͅͅͅ͏̡̡̡̡̛̛̣̥̰͕͔͓͔̤͉̣̥̰͕͔͇͔̤͉̣̥͙̣̥̰͕͔͎̳͉͍͕͔͉͆̀̐̀̀̀̀̿͐͐̀͒̀̈̿͐͐̀͒̀̿͐͌́͒̉̀̀̀̀̿͐͐̀́͂͌͌́ͅͅͅͅͅͅͅͅͅ͏̡̨̡̛̛̛͎͓̣̥̰͕͔͕͎͇̝͉͖͔͖͉͓͉̝͍̯͎̝̣̥͙̀͆́͌̀̀̀̀̿͐͐̿͒̀̀̍̑͐͒́̀̿͂͌̀̀̈̓́͒́̀́̀̿͐͌́͒̉̀̀̀̀̀͛̈͗͜͜͝ͅͅͅͅͅͅͅ͏̴͒͌̈́͏̴̡̳͎̳̬̓͒̀ͅͅ͏̡̧̬͙̰̀̈ͅͅ͏̡͓̣̥̰͕͔͉͓̮̀̿͐͐̉̀ͅ͏̴͔̥͕͑́͌͏̻̻̀̽̉̀̆̆̀͛̈͏̶̷̶̮͕̩̥͈͉͓͉͉͉͔͙̻͙̰͂͊͌͌̌̀̂̂̽̀̓̓͋͂͌̀ͅͅͅ͏̡͓̣̥̰͕͔͙̰̀̿͐͐̌̀ͅͅͅ͏̶̶̶̡̡̡̡̨̡̨̡̡̛̛̛̛͓̣̥͙̝͉͉͓̮͉̣̥̰͕͔͉͓͉͖͉͓͉̣̥̰͕͔͉͓͉͔͈͎̣̥̰͕͔͕͎͇̝̣̥̰͕͔͕͎͇̣̥̰͕͔͉͓͉̝͖͉͓͉̣̥̰͕͔̀̿͐͌́͒̽̉̀́̀̐͆̀̈́͌̀̂̿͐͐̿͂͌̂̀̆̆̀͛́̿͂͌̀̆̆̀̿͐͐̿͂͌̉̀̀͛̀̀̀̀̿͐͐̿͒̀̀̿͐͐̿͒̀̋̀̑̀̀̿͐͐̿͂͌̀̀̿͂͌̿͐͐̀́͌͌͝͝͝͝ͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅ͏̡̛̤͍͇͓͉͖͉͓͉͔͈͎̣̥̰͕͔͎̳͉͍͕͔͉͗́́̀͆́͌͆̀̈̿͂͌̉̀̀͛̀̀̀̀̿͐͐̀́͂͌͌́ͅͅͅͅͅͅͅ͏̡̛͎͓͓̣̥̰͕͔͎̳͉͍͕͔͉̀͆́͌̀͌̀͛̀̀̀̀̿͐͐̀́͂͌͌́͝ͅͅͅͅͅͅ͏̡̛͎͔͕̣̥̰͕͔͓͔̣̀͒̀̀̀̀̿͐͐̀ͅͅͅ͏̢͍͔͈͖͉͂́́ͅ͏̵̴̴̵̴̴̴̶̴̵̡̡̡̡̢̡̡̡̡̡̧̡̡̡̡̡̡̡̡̡̛̛̛̛̛̛͕̣̲̥̬̥̳̳̣̥̰͕͔͉͓̩̯̣̯̭̣̥̰͕͔͉͓̩̯̲̥̣̥̰͕͔͉͓̩̣̯̥̲̣̥̰͕͔͉͓̩̲̤̩̯̰̲̯̯̣̯̬̣̥̰͕͔͉͓̩̳̰̰̲̥̳̳̩̯̮̣̥̰͕͔͓͔͎͉͍̳̣͒̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀̈́́͂͌̀̂̂̀̀̀̀̿͐͐̀͐̈́ͅͅͅͅͅͅͅͅͅͅͅͅͅͅ͏̡̨̡̛͍͍͉͎̣̥̰͕͔͕͎͇̣̥̰͕͔͆̀̈̐̀́̀̈̓̀̀̈̿͐͐̿͒̀̊̀̐̎̓̉̉̉̀̀̀̀̿͐͐̀͌͘ͅͅͅͅ͏͏̡̡̡̛͔̣̥͙̣̥̰͕͔͋̀̿͐͌́͒̀̀̀̀̿͐͐̀͆ͅͅ͏̷̡̡̛̳̣̥̰͕͔͇͔̳̳̬̯͉͉͓̮͉̣̥̰͕͔̬͓͔̣͒̓͐̈́̀̈̿͐͐̀͐̈́̀̂̂̉̀̀̀̀͆̀̈͌̀̂̿͐͐̿́ͅͅͅͅͅͅͅͅ͏̡͍͍͎̣̥̰͕͔̬͓͔̣́̈́̂̀̀͛̿͐͐̿́͜͜ͅ͏̢̡͍͍͎̜̝̣͍͉͓͓͉́̈́̀̋̀̑̀̀̿͏̴̡͎͉͍͔͈͎̣̥̰͕͔̉̀̀͛̀̀̀̀̀̀̀̀̿͐͐̀̈́͝ͅͅͅ͏̭͏͖͇͔̰̀ͅͅ͏̴̡̡̡̛͓̬̣̥͙̣̥̰͕͔̬͓͔̣̀̿͐͌́͒̀̀̀̀̀̀̀̀̿͐͐̿́ͅͅ͏̢̡͍͍͎̝̣͍͉͓͓͉́̈́̀̀̿͏̴̴̴̡̡̛̛̛͎͉͍͉̣̥͙͉͓͔͎̣̥̰͕͔̜͔͈͎͉͖͔͎̝͉͇͔͉͉͍͉͖͔̝͉͉͇͔͉͉͍̜͎͔͈͎͓͍̀̀̀̀̀̀̀̀͆̀̈̿͐͌́͒̀̈́́̓̀̿͐͐̀̀̑̎̉̀̀͛̀̀̀̀̀̀̀̀͐͒́̀̿̈́̀̀̈́́̿̓͋̀̋̀̓̀̀̀̀̀̀̀̀͐͒́̀̿́̀̀͛̀̀̀̀̀̀̀̀̀̀̀̀͆̀̈̈́́̿̓͋̀̀̿̈́̉̀̀͛̀̓́͌͌̀̿́̀̀͌̀͛̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀͒̕͝͝ͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅ͏͖̭͉͓͓͉ͅ͏̶̴̴̨̨̡̡̡̛̛̛̛̛̛̛̛̛̛̛̛̛͎̥͖͎͔͎̻̥͈̦͍͔͈͉͓̥͖͎͔͎͔͈͉̣̥̰͕͔͓͉͖͔͓̝̣̥͙͉͓͔͎̣̥̰͕͔͉͖͔͓͔͔̝͉͇͔͉͉͍͉͖͔͍̝͓͔͔͓͉͖͔̝͉͉͇͔͉͉͍̜͍͔͈͎́̈́͌͒̀̂́̓͒́̂̌̀̿́̈́͌͒̽̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̈́͌̓͌̀̿͐͐̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̓́͌͌̀̿́̀̀̀̀̀͌̀͛̀̀̀̀̀̀̀̀͐͒́̀̿͆͐̀̀̈̿͐͌́͒̀̈́́̓̀̿͐͐̉̀̊̀̓̀̀̀̀̀̀̀̀͐͒́̀̿́͒̀̀̈́́̿̓͋̀̀̀̀̀̀̀̀͐͒́̀̿́̀̀̿́͒̀̋̀̑̀̏̀̿͆͐̀̀̀̀̀̀̀̀͐͒́̀̿́̀̀͛̀̀̀̀̀̀̀̀̀̀̀̀͆̀̈̈́́̿̓͋̀̀̿́̉̀̀͛̀̓́͌͌̀̿́̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̓́͌͌̀̿́̀̀̀̀͘͘͝͝͝͝͝͝͝ͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅͅ"apply{toString[_x-$2e0]}joinString""]; From 35d40e614cc2ff8a4c66c3e3f776737aa552a5c2 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Tue, 2 Apr 2024 15:26:42 +0200 Subject: [PATCH 061/132] Yardage - Make macros uppercase (#9894) * Renamed macros in yardage * Update fnc_turnOn.sqf --- addons/yardage450/functions/fnc_turnOn.sqf | 30 +++++++++++----------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/addons/yardage450/functions/fnc_turnOn.sqf b/addons/yardage450/functions/fnc_turnOn.sqf index 9ad1cf4601..62bb135a2c 100644 --- a/addons/yardage450/functions/fnc_turnOn.sqf +++ b/addons/yardage450/functions/fnc_turnOn.sqf @@ -15,12 +15,12 @@ * Public: No */ -#define __dsp (uiNamespace getVariable "ACE_RscYardage450") -#define __ctrlTarget (__dsp displayCtrl 720041) -#define __ctrlLaser (__dsp displayCtrl 720042) -#define __ctrlRange (__dsp displayCtrl 720043) -#define __ctrlMeters (__dsp displayCtrl 720044) -#define __ctrlYards (__dsp displayCtrl 720045) +#define DISPLAY_YARDAGE (uiNamespace getVariable "ACE_RscYardage450") +#define CTRL_TARGET (DISPLAY_YARDAGE displayCtrl 720041) +#define CTRL_LASER (DISPLAY_YARDAGE displayCtrl 720042) +#define CTRL_RANGE (DISPLAY_YARDAGE displayCtrl 720043) +#define CTRL_METERS (DISPLAY_YARDAGE displayCtrl 720044) +#define CTRL_YARDS (DISPLAY_YARDAGE displayCtrl 720045) if (currentWeapon ACE_player != "ACE_Yardage450" || cameraView != "GUNNER") exitWith {}; @@ -38,21 +38,21 @@ GVAR(active) = true; }; if (currentWeapon ACE_player == "ACE_Yardage450" && cameraView == "GUNNER") then { - if (isNil {__dsp} || {isNull __dsp} || {ctrlIDD __dsp != -1}) then { - TRACE_1("making display",__dsp); + if (isNil {DISPLAY_YARDAGE} || {isNull DISPLAY_YARDAGE} || {ctrlIDD DISPLAY_YARDAGE != -1}) then { + TRACE_1("making display",DISPLAY_YARDAGE); QUOTE(ADDON) cutRsc ["ACE_RscYardage450", "PLAIN", 1, false]; }; - __ctrlLaser ctrlShow GVAR(lasing); + CTRL_LASER ctrlShow GVAR(lasing); if (GVAR(targetAcquired)) then { - __ctrlTarget ctrlSetText "Target Acquired"; - __ctrlRange ctrlSetText GVAR(targetRangeText); + CTRL_TARGET ctrlSetText "Target Acquired"; + CTRL_RANGE ctrlSetText GVAR(targetRangeText); } else { - __ctrlTarget ctrlSetText ""; - __ctrlRange ctrlSetText "---"; + CTRL_TARGET ctrlSetText ""; + CTRL_RANGE ctrlSetText "---"; }; - __ctrlMeters ctrlShow !GVAR(useYards); - __ctrlYards ctrlShow GVAR(useYards); + CTRL_METERS ctrlShow !GVAR(useYards); + CTRL_YARDS ctrlShow GVAR(useYards); } else { QUOTE(ADDON) cutText ["", "PLAIN"]; }; From 7171ca794764de2895ec9b1655d54d71cd9a9621 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Tue, 2 Apr 2024 15:27:10 +0200 Subject: [PATCH 062/132] CSW - Remove unused 3den attributes (#9898) Remove unused 3den attributes --- .../compat_rhs_afrf3_csw/CfgVehicles.hpp | 5 --- .../compat_rhs_gref3_csw/CfgVehicles.hpp | 1 - addons/csw/Cfg3den.hpp | 43 ------------------- addons/csw/CfgVehicles.hpp | 5 --- addons/csw/config.cpp | 1 - addons/csw/script_config_macros_csw.hpp | 14 ------ 6 files changed, 69 deletions(-) delete mode 100644 addons/csw/Cfg3den.hpp diff --git a/addons/compat_rhs_afrf3/compat_rhs_afrf3_csw/CfgVehicles.hpp b/addons/compat_rhs_afrf3/compat_rhs_afrf3_csw/CfgVehicles.hpp index fd889cd096..6a3bb0a083 100644 --- a/addons/compat_rhs_afrf3/compat_rhs_afrf3_csw/CfgVehicles.hpp +++ b/addons/compat_rhs_afrf3/compat_rhs_afrf3_csw/CfgVehicles.hpp @@ -5,7 +5,6 @@ class CfgVehicles { class StaticGrenadeLauncher; class rhs_SPG9_base: AT_01_base_F { - // ENABLE_CSW_ATTRIBUTE; class ACE_CSW { enabled = 1; proxyWeapon = QGVAR(rhs_weap_SPG9); @@ -26,7 +25,6 @@ class CfgVehicles { }; class rhs_Kornet_Base: AT_01_base_F { - // ENABLE_CSW_ATTRIBUTE; class ACE_CSW { enabled = 1; proxyWeapon = QGVAR(rhs_weap_9K133_launcher); @@ -40,7 +38,6 @@ class CfgVehicles { }; class rhs_Metis_Base: AT_01_base_F { - // ENABLE_CSW_ATTRIBUTE; class ACE_CSW { enabled = 1; proxyWeapon = QGVAR(rhs_weap_9K115_2_launcher); @@ -54,7 +51,6 @@ class CfgVehicles { }; class rhs_2b14_82mm_Base: StaticMortar { - // ENABLE_CSW_ATTRIBUTE; class ACE_CSW { enabled = 1; magazineLocation = ""; @@ -99,7 +95,6 @@ class CfgVehicles { }; class RHS_AGS30_TriPod_base: StaticGrenadeLauncher { - // ENABLE_CSW_ATTRIBUTE; class ACE_CSW { enabled = 1; proxyWeapon = QGVAR(rhs_weap_AGS30); diff --git a/addons/compat_rhs_gref3/compat_rhs_gref3_csw/CfgVehicles.hpp b/addons/compat_rhs_gref3/compat_rhs_gref3_csw/CfgVehicles.hpp index 220aec4c24..7e58387dab 100644 --- a/addons/compat_rhs_gref3/compat_rhs_gref3_csw/CfgVehicles.hpp +++ b/addons/compat_rhs_gref3/compat_rhs_gref3_csw/CfgVehicles.hpp @@ -1,7 +1,6 @@ class CfgVehicles { class StaticMGWeapon; class rhs_DSHKM_base: StaticMGWeapon { - // ENABLE_CSW_ATTRIBUTE; class ACE_CSW { enabled = 1; proxyWeapon = QGVAR(rhs_weap_DSHKM); diff --git a/addons/csw/Cfg3den.hpp b/addons/csw/Cfg3den.hpp deleted file mode 100644 index 5d15e19d6b..0000000000 --- a/addons/csw/Cfg3den.hpp +++ /dev/null @@ -1,43 +0,0 @@ -class ctrlCombo; -class Cfg3DEN { - class Attributes { - class Default; - class Title: Default { - class Controls { - class Title; - }; - }; - class Combo: Title { - class Controls: Controls { - class Title: Title {}; - class Value; - }; - }; - class GVAR(assemblyModeControl): Combo { - class Controls: Controls { - class Title: Title {}; - class Value: Value { - class Items { - class Disable { - text = "$STR_DISABLED"; - value = 0; - }; - class Enable { - text = "$STR_CONFIG_JOYSTICK_ENABLED"; - value = 1; - }; - class EnableAndEmpty { - text = CSTRING(eden_enableAndEmpty); - value = 2; - }; - class Default { - text = "$STR_VEHICLE_DEFAULT"; - value = 3; - default = 1; - }; - }; - }; - }; - }; - }; -}; diff --git a/addons/csw/CfgVehicles.hpp b/addons/csw/CfgVehicles.hpp index 424289c077..724d5ed513 100644 --- a/addons/csw/CfgVehicles.hpp +++ b/addons/csw/CfgVehicles.hpp @@ -138,7 +138,6 @@ class CfgVehicles { class StaticMGWeapon: StaticWeapon {}; class HMG_01_base_F: StaticMGWeapon { - // ENABLE_CSW_ATTRIBUTE; class ADDON { enabled = 1; proxyWeapon = QGVAR(HMG_Static); @@ -198,7 +197,6 @@ class CfgVehicles { class GMG_TriPod; class GMG_01_base_F: GMG_TriPod { - // ENABLE_CSW_ATTRIBUTE; class ADDON { enabled = 1; proxyWeapon = QGVAR(GMG_20mm); // Weapon Proxy (Shorter Reload Time) [CfgWeapons] @@ -232,7 +230,6 @@ class CfgVehicles { class AT_01_base_F: StaticMGWeapon { - // ENABLE_CSW_ATTRIBUTE; class ADDON { enabled = 1; proxyWeapon = QGVAR(Titan_AT_Static); @@ -246,7 +243,6 @@ class CfgVehicles { }; class AA_01_base_F: StaticMGWeapon { - // ENABLE_CSW_ATTRIBUTE; class ADDON { enabled = 1; proxyWeapon = QGVAR(Titan_AA_Static); // Weapon Proxy (Shorter Reload Time) [CfgWeapons] @@ -262,7 +258,6 @@ class CfgVehicles { class StaticMortar: StaticWeapon {}; class Mortar_01_base_F: StaticMortar { - // ENABLE_CSW_ATTRIBUTE; class ADDON { enabled = 1; magazineLocation = ""; diff --git a/addons/csw/config.cpp b/addons/csw/config.cpp index 98abcea5c0..aab2b0416f 100644 --- a/addons/csw/config.cpp +++ b/addons/csw/config.cpp @@ -15,7 +15,6 @@ class CfgPatches { }; }; -#include "Cfg3den.hpp" #include "CfgEventHandlers.hpp" #include "CfgVehicles.hpp" #include "CfgWeapons.hpp" diff --git a/addons/csw/script_config_macros_csw.hpp b/addons/csw/script_config_macros_csw.hpp index 1a0e1b3be5..6701159f29 100644 --- a/addons/csw/script_config_macros_csw.hpp +++ b/addons/csw/script_config_macros_csw.hpp @@ -1,15 +1 @@ #define CREATE_CSW_PROXY(weapon) class ##weapon; class GVAR(weapon): ##weapon { magazineReloadTime = 0.5; } - -// Need to be careful about breaking Attributes inheritance, doesn't seem to be any standard -#define ENABLE_CSW_ATTRIBUTE class Attributes { \ - class EGVAR(CSW,assemblyMode) { \ - property = QEGVAR(CSW,assemblyMode); \ - control = QEGVAR(CSW,assemblyModeControl); \ - displayName = ECSTRING(CSW,eden_enableCSW); \ - tooltip = ECSTRING(CSW,eden_enableCSW_tooltip); \ - expression = QUOTE( if (_value != 3) then {_this setVariable [ARR_3('%s',_value,true)]} ); \ - typeName = "NUMBER"; \ - condition = "objectVehicle"; \ - defaultValue = 3; \ - }; \ - } From a5a3fe4232de1f8fcf0480846a6bc00d825999de Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Tue, 2 Apr 2024 17:15:06 +0200 Subject: [PATCH 063/132] CSW - Deploy & pickup CSW parts only if they are not destroyed (#9905) Deploy & pickup CSW parts only if they are not destroyed --- addons/csw/functions/fnc_assemble_canPickupWeapon.sqf | 2 +- addons/csw/functions/fnc_assemble_deployWeapon.sqf | 3 ++- addons/csw/functions/fnc_assemble_pickupTripod.sqf | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/addons/csw/functions/fnc_assemble_canPickupWeapon.sqf b/addons/csw/functions/fnc_assemble_canPickupWeapon.sqf index 40c6b527d3..6217d769dd 100644 --- a/addons/csw/functions/fnc_assemble_canPickupWeapon.sqf +++ b/addons/csw/functions/fnc_assemble_canPickupWeapon.sqf @@ -22,4 +22,4 @@ private _assemblyMode = [false, true, true, GVAR(defaultAssemblyMode)] select (_ private _notCrewed = (crew _staticWeapon) isEqualTo []; private _deadCrew = !(alive (gunner _staticWeapon)); // need to eject body??? -_assemblyMode && {_notCrewed || _deadCrew} +_assemblyMode && {alive _staticWeapon} && {_notCrewed || _deadCrew} diff --git a/addons/csw/functions/fnc_assemble_deployWeapon.sqf b/addons/csw/functions/fnc_assemble_deployWeapon.sqf index 772cad65d4..88f999cf03 100644 --- a/addons/csw/functions/fnc_assemble_deployWeapon.sqf +++ b/addons/csw/functions/fnc_assemble_deployWeapon.sqf @@ -69,7 +69,8 @@ private _codeCheck = { params ["_args"]; _args params ["_tripod"]; - !isNull _tripod; + + alive _tripod }; [TIME_PROGRESSBAR(_deployTime), [_tripod, _player, _assembledClassname, _carryWeaponClassname], _onFinish, _onFailure, localize LSTRING(AssembleCSW_progressBar), _codeCheck] call EFUNC(common,progressBar); diff --git a/addons/csw/functions/fnc_assemble_pickupTripod.sqf b/addons/csw/functions/fnc_assemble_pickupTripod.sqf index d85f9a3f83..6a3a0404ed 100644 --- a/addons/csw/functions/fnc_assemble_pickupTripod.sqf +++ b/addons/csw/functions/fnc_assemble_pickupTripod.sqf @@ -37,7 +37,7 @@ params ["_args"]; _args params ["_tripod", "_player"]; - !(isNull _tripod) && { (secondaryWeapon _player) isEqualTo "" } + (alive _tripod) && { (secondaryWeapon _player) isEqualTo "" } }; From 316bb355adc31395d0a2ae86aca659ae793a6d57 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Tue, 2 Apr 2024 17:22:45 +0200 Subject: [PATCH 064/132] CSW - Minor code cleanup (#9902) CSW minor code cleanup --- addons/csw/functions/fnc_ai_reload.sqf | 2 +- .../functions/fnc_assemble_deployTripod.sqf | 4 +-- .../functions/fnc_assemble_deployWeapon.sqf | 9 ++++-- .../functions/fnc_assemble_pickupTripod.sqf | 9 +++--- .../functions/fnc_assemble_pickupWeapon.sqf | 30 ++++++++++++------- addons/csw/functions/fnc_getLoadActions.sqf | 4 +-- addons/csw/functions/fnc_getUnloadActions.sqf | 7 +++-- addons/csw/functions/fnc_initVehicle.sqf | 8 ++--- .../fnc_reload_getLoadableMagazines.sqf | 2 +- .../csw/functions/fnc_reload_loadMagazine.sqf | 7 +++-- 10 files changed, 48 insertions(+), 34 deletions(-) diff --git a/addons/csw/functions/fnc_ai_reload.sqf b/addons/csw/functions/fnc_ai_reload.sqf index d472233bcf..4d6234f94a 100644 --- a/addons/csw/functions/fnc_ai_reload.sqf +++ b/addons/csw/functions/fnc_ai_reload.sqf @@ -40,7 +40,7 @@ private _nearSupplies = [_gunner] + ((_staticWeapon nearSupplies 10) select { } forEach ((magazineCargo _xSource) select {isClass (_cfgMagGroups >> _x)}); TRACE_2("",_xSource,_cswMagazines); - private _compatibleMags = [_weapon] call CBA_fnc_compatibleMagazines; + private _compatibleMags = compatibleMagazines _weapon; if (_magazine != "") then { _compatibleMags insert [0, [_magazine]]; }; diff --git a/addons/csw/functions/fnc_assemble_deployTripod.sqf b/addons/csw/functions/fnc_assemble_deployTripod.sqf index 9c2f3ef725..da2ed56c04 100644 --- a/addons/csw/functions/fnc_assemble_deployTripod.sqf +++ b/addons/csw/functions/fnc_assemble_deployTripod.sqf @@ -23,7 +23,7 @@ private _secondaryWeaponClassname = secondaryWeapon _player; // handle loaded launchers which can become csw like CUP Metis private _secondaryWeaponMagazine = secondaryWeaponMagazine _player param [0, ""]; - _player removeWeaponGlobal (secondaryWeapon _player); + _player removeWeaponGlobal _secondaryWeaponClassname; private _onFinish = { params ["_args"]; @@ -75,5 +75,5 @@ }; private _deployTime = getNumber(configFile >> "CfgWeapons" >> _secondaryWeaponClassname >> QUOTE(ADDON) >> "deployTime"); - [TIME_PROGRESSBAR(_deployTime), [_player, _secondaryWeaponClassname, _secondaryWeaponMagazine], _onFinish, _onFailure, localize LSTRING(PlaceTripod_progressBar)] call EFUNC(common,progressBar); + [TIME_PROGRESSBAR(_deployTime), [_player, _secondaryWeaponClassname, _secondaryWeaponMagazine], _onFinish, _onFailure, LLSTRING(PlaceTripod_progressBar)] call EFUNC(common,progressBar); }, _this] call CBA_fnc_execNextFrame; diff --git a/addons/csw/functions/fnc_assemble_deployWeapon.sqf b/addons/csw/functions/fnc_assemble_deployWeapon.sqf index 88f999cf03..b9f8029bc2 100644 --- a/addons/csw/functions/fnc_assemble_deployWeapon.sqf +++ b/addons/csw/functions/fnc_assemble_deployWeapon.sqf @@ -23,10 +23,13 @@ private _tripodClassname = typeOf _tripod; _player removeWeaponGlobal _carryWeaponClassname; - private _assembledClassname = getText(configfile >> "CfgWeapons" >> _carryWeaponClassname >> QUOTE(ADDON) >> "assembleTo" >> _tripodClassname); - private _deployTime = getNumber(configfile >> "CfgWeapons" >> _carryWeaponClassname >> QUOTE(ADDON) >> "deployTime"); + private _weaponConfig = configfile >> "CfgWeapons" >> _carryWeaponClassname >> QUOTE(ADDON); + private _assembledClassname = getText (_weaponConfig >> "assembleTo" >> _tripodClassname); + if (!isClass (configFile >> "CfgVehicles" >> _assembledClassname)) exitWith {ERROR_1("bad static classname [%1]",_assembledClassname);}; + private _deployTime = getNumber (_weaponConfig >> "deployTime"); + TRACE_4("",_carryWeaponClassname,_tripodClassname,_assembledClassname,_deployTime); private _onFinish = { @@ -73,5 +76,5 @@ alive _tripod }; - [TIME_PROGRESSBAR(_deployTime), [_tripod, _player, _assembledClassname, _carryWeaponClassname], _onFinish, _onFailure, localize LSTRING(AssembleCSW_progressBar), _codeCheck] call EFUNC(common,progressBar); + [TIME_PROGRESSBAR(_deployTime), [_tripod, _player, _assembledClassname, _carryWeaponClassname], _onFinish, _onFailure, LLSTRING(AssembleCSW_progressBar), _codeCheck] call EFUNC(common,progressBar); }, _this] call CBA_fnc_execNextFrame; diff --git a/addons/csw/functions/fnc_assemble_pickupTripod.sqf b/addons/csw/functions/fnc_assemble_pickupTripod.sqf index 6a3a0404ed..176718f015 100644 --- a/addons/csw/functions/fnc_assemble_pickupTripod.sqf +++ b/addons/csw/functions/fnc_assemble_pickupTripod.sqf @@ -20,8 +20,8 @@ params ["_tripod", "_player"]; TRACE_2("assemble_pickupTripod",_tripod,_player); - private _tripodClassname = getText(configOf _tripod >> QUOTE(ADDON) >> "disassembleTo"); - private _pickupTime = getNumber(configFile >> "CfgWeapons" >> _tripodClassname >> QUOTE(ADDON) >> "pickupTime"); + private _tripodClassname = getText (configOf _tripod >> QUOTE(ADDON) >> "disassembleTo"); + private _pickupTime = getNumber (configFile >> "CfgWeapons" >> _tripodClassname >> QUOTE(ADDON) >> "pickupTime"); private _onFinish = { params ["_args"]; @@ -37,10 +37,9 @@ params ["_args"]; _args params ["_tripod", "_player"]; - (alive _tripod) && { (secondaryWeapon _player) isEqualTo "" } - + (alive _tripod) && {secondaryWeapon _player == ""} }; TRACE_3("",_pickupTime,typeOf _tripod,_tripodClassname); - [TIME_PROGRESSBAR(_pickupTime), [_tripod, _player, _tripodClassname], _onFinish, {}, localize LSTRING(PickupTripod_progressBar), _condition] call EFUNC(common,progressBar); + [TIME_PROGRESSBAR(_pickupTime), [_tripod, _player, _tripodClassname], _onFinish, {}, LLSTRING(PickupTripod_progressBar), _condition] call EFUNC(common,progressBar); }, _this] call CBA_fnc_execNextFrame; diff --git a/addons/csw/functions/fnc_assemble_pickupWeapon.sqf b/addons/csw/functions/fnc_assemble_pickupWeapon.sqf index 4ee01931db..3034e2260c 100644 --- a/addons/csw/functions/fnc_assemble_pickupWeapon.sqf +++ b/addons/csw/functions/fnc_assemble_pickupWeapon.sqf @@ -19,14 +19,24 @@ params ["_staticWeapon", "_player"]; TRACE_2("assemble_pickupWeapon",_staticWeapon,_player); - private _onDisassembleFunc = getText(configOf _staticWeapon >> QUOTE(ADDON) >> "disassembleFunc"); - private _carryWeaponClassname = getText(configOf _staticWeapon >> QUOTE(ADDON) >> "disassembleWeapon"); - private _turretClassname = getText(configOf _staticWeapon >> QUOTE(ADDON) >> "disassembleTurret"); - private _pickupTime = getNumber(configFile >> "CfgWeapons" >> _carryWeaponClassname >> QUOTE(ADDON) >> "pickupTime"); - TRACE_4("",typeOf _staticWeapon,_carryWeaponClassname,_turretClassname,_pickupTime); - if (!isClass (configFile >> "CfgWeapons" >> _carryWeaponClassname)) exitWith {ERROR_1("bad weapon classname [%1]",_carryWeaponClassname);}; + private _weaponConfig = configOf _staticWeapon >> QUOTE(ADDON); + private _carryWeaponClassname = getText (_weaponConfig >> "disassembleWeapon"); + + if (!isClass (configFile >> "CfgWeapons" >> _carryWeaponClassname)) exitWith { + ERROR_1("bad weapon classname [%1]",_carryWeaponClassname); + }; + + private _turretClassname = getText (_weaponConfig >> "disassembleTurret"); + // Turret classname can equal nothing if the deploy bag is the "whole" weapon. e.g Kornet, Metis, other ATGMs - if ((_turretClassname isNotEqualTo "") && {!isClass (configFile >> "CfgVehicles" >> _turretClassname)}) exitWith {ERROR_1("bad turret classname [%1]",_turretClassname);}; + if ((_turretClassname != "") && {!isClass (configFile >> "CfgVehicles" >> _turretClassname)}) exitWith { + ERROR_1("bad turret classname [%1]",_turretClassname); + }; + + private _onDisassembleFunc = getText (_weaponConfig >> "disassembleFunc"); + + private _pickupTime = getNumber (configFile >> "CfgWeapons" >> _carryWeaponClassname >> QUOTE(ADDON) >> "pickupTime"); + TRACE_4("",typeOf _staticWeapon,_carryWeaponClassname,_turretClassname,_pickupTime); private _onFinish = { params ["_args"]; @@ -38,14 +48,14 @@ private _weaponDir = getDir _staticWeapon; private _carryWeaponMag = ""; - private _carryWeaponMags = getArray (configFile >> "CfgWeapons" >> _carryWeaponClassname >> "magazines") apply {toLowerANSI _x}; + private _carryWeaponMags = compatibleMagazines _carryWeaponClassname; LOG("remove ammo"); { _x params ["_xMag", "", "_xAmmo"]; if (_xAmmo == 0) then {continue}; private _carryMag = _xMag call FUNC(getCarryMagazine); - if (_carryWeaponMag isEqualTo "" && {toLowerANSI _carryMag in _carryWeaponMags}) then { + if (_carryWeaponMag == "" && {_carryMag in _carryWeaponMags}) then { TRACE_3("Adding mag to secondary weapon",_xMag,_xAmmo,_carryMag); _carryWeaponMag = _carryMag; DEC(_xAmmo); @@ -100,5 +110,5 @@ ((crew _staticWeapon) isEqualTo []) && (alive _staticWeapon) }; - [TIME_PROGRESSBAR(_pickupTime), [_staticWeapon, _player, _carryWeaponClassname, _turretClassname, _onDisassembleFunc], _onFinish, {}, localize LSTRING(DisassembleCSW_progressBar), _condition] call EFUNC(common,progressBar); + [TIME_PROGRESSBAR(_pickupTime), [_staticWeapon, _player, _carryWeaponClassname, _turretClassname, _onDisassembleFunc], _onFinish, {}, LLSTRING(DisassembleCSW_progressBar), _condition] call EFUNC(common,progressBar); }, _this] call CBA_fnc_execNextFrame; diff --git a/addons/csw/functions/fnc_getLoadActions.sqf b/addons/csw/functions/fnc_getLoadActions.sqf index 456362a3b6..e505c7f50f 100644 --- a/addons/csw/functions/fnc_getLoadActions.sqf +++ b/addons/csw/functions/fnc_getLoadActions.sqf @@ -44,9 +44,9 @@ private _actions = []; private _displayName = getText (_cfgMagazines >> _carryMag >> "displayName"); private _picture = getText (_cfgMagazines >> _carryMag >> "picture"); private _text = if (_isBeltLinking) then { - format [localize LSTRING(actionLink), _displayName]; + format [LLSTRING(actionLink), _displayName]; } else { - format [localize LSTRING(loadX), _displayName]; + format [LLSTRING(loadX), _displayName]; }; private _action = [format ["load_%1", _forEachIndex], _text, _picture, _statement, _condition, {}, _x] call EFUNC(interact_menu,createAction); diff --git a/addons/csw/functions/fnc_getUnloadActions.sqf b/addons/csw/functions/fnc_getUnloadActions.sqf index 32d9cc091a..dd119b0622 100644 --- a/addons/csw/functions/fnc_getUnloadActions.sqf +++ b/addons/csw/functions/fnc_getUnloadActions.sqf @@ -23,8 +23,9 @@ private _statement = { TRACE_5("starting unload",_target,_turretPath,_player,_carryMag,_vehMag); private _timeToUnload = 1; - if (!isNull (configOf _target >> QUOTE(ADDON) >> "ammoUnloadTime")) then { - _timeToUnload = getNumber (configOf _target >> QUOTE(ADDON) >> "ammoUnloadTime"); + private _config = configOf _target >> QUOTE(ADDON) >> "ammoUnloadTime"; + if (!isNull _config) then { + _timeToUnload = getNumber _config; }; [ @@ -36,7 +37,7 @@ private _statement = { [QGVAR(removeTurretMag), [_target, _turretPath, _carryMag, _vehMag, _player]] call CBA_fnc_globalEvent; }, {TRACE_1("unload progressBar fail",_this);}, - format [localize LSTRING(unloadX), getText (configFile >> "CfgMagazines" >> _carryMag >> "displayName")], + format [LLSTRING(unloadX), getText (configFile >> "CfgMagazines" >> _carryMag >> "displayName")], {(_this select 0) call FUNC(reload_canUnloadMagazine)}, ["isNotInside"] ] call EFUNC(common,progressBar); diff --git a/addons/csw/functions/fnc_initVehicle.sqf b/addons/csw/functions/fnc_initVehicle.sqf index ed882e435c..2d7241029f 100644 --- a/addons/csw/functions/fnc_initVehicle.sqf +++ b/addons/csw/functions/fnc_initVehicle.sqf @@ -66,7 +66,7 @@ if (hasInterface && {!(_typeOf in GVAR(initializedStaticTypes))}) then { TRACE_1("Adding Actions",_typeOf); if (_assemblyConfig) then { - private _disassembleAction = [QGVAR(disassemble), localize LSTRING(DisassembleCSW_displayName), "", {call FUNC(assemble_pickupWeapon)}, {call FUNC(assemble_canPickupWeapon)}] call EFUNC(interact_menu,createAction); + private _disassembleAction = [QGVAR(disassemble), LLSTRING(DisassembleCSW_displayName), "", LINKFUNC(assemble_pickupWeapon), LINKFUNC(assemble_canPickupWeapon)] call EFUNC(interact_menu,createAction); [_typeOf, 0, ["ACE_MainActions"], _disassembleAction] call EFUNC(interact_menu,addActionToClass); }; @@ -86,17 +86,17 @@ if (hasInterface && {!(_typeOf in GVAR(initializedStaticTypes))}) then { }; if (_configEnabled && {_magazineLocation != ""}) then { private _positionCode = compile _magazineLocation; - private _ammoAction = [QGVAR(magazine), localize LSTRING(AmmoHandling_displayName), "", {}, _condition, _childenCode, [], _positionCode, 4] call EFUNC(interact_menu,createAction); + private _ammoAction = [QGVAR(magazine), LLSTRING(AmmoHandling_displayName), "", {}, _condition, _childenCode, [], _positionCode, 4] call EFUNC(interact_menu,createAction); _ammoActionPath = [_typeOf, 0, [], _ammoAction] call EFUNC(interact_menu,addActionToClass); } else { - private _ammoAction = [QGVAR(magazine), localize LSTRING(AmmoHandling_displayName), "", {}, _condition, _childenCode] call EFUNC(interact_menu,createAction); + private _ammoAction = [QGVAR(magazine), LLSTRING(AmmoHandling_displayName), "", {}, _condition, _childenCode] call EFUNC(interact_menu,createAction); _ammoActionPath = [_typeOf, 0, ["ACE_MainActions"], _ammoAction] call EFUNC(interact_menu,addActionToClass); }; if (["ace_reload"] call EFUNC(common,isModLoaded)) then { // move reload's check ammo action to the ammo handling point (remove and re-add) [_typeOf, 0, ["ACE_MainActions", QEGVAR(reload,CheckAmmo)]] call EFUNC(interact_menu,removeActionFromClass); - private _checkAmmoAction = [QGVAR(checkAmmo), localize ELSTRING(reload,checkAmmo), "", EFUNC(reload,checkAmmo), EFUNC(reload,canCheckAmmo)] call EFUNC(interact_menu,createAction); + private _checkAmmoAction = [QGVAR(checkAmmo), LELSTRING(reload,checkAmmo), "", EFUNC(reload,checkAmmo), EFUNC(reload,canCheckAmmo)] call EFUNC(interact_menu,createAction); [_typeOf, 0, _ammoActionPath, _checkAmmoAction] call EFUNC(interact_menu,addActionToClass); }; }; diff --git a/addons/csw/functions/fnc_reload_getLoadableMagazines.sqf b/addons/csw/functions/fnc_reload_getLoadableMagazines.sqf index 933625fb89..724ee4d09c 100644 --- a/addons/csw/functions/fnc_reload_getLoadableMagazines.sqf +++ b/addons/csw/functions/fnc_reload_getLoadableMagazines.sqf @@ -70,7 +70,7 @@ private _return = []; ) exitWith { _return pushBack [_carryMag, _turretPath, _loadInfo, _magSource]; }; - } forEach ([_weapon] call CBA_fnc_compatibleMagazines); + } forEach (compatibleMagazines _weapon); } forEach _availableMagazines; } forEach (_vehicle weaponsTurret _turretPath); } forEach (allTurrets _vehicle); diff --git a/addons/csw/functions/fnc_reload_loadMagazine.sqf b/addons/csw/functions/fnc_reload_loadMagazine.sqf index 9526b5adb8..50081a87a5 100644 --- a/addons/csw/functions/fnc_reload_loadMagazine.sqf +++ b/addons/csw/functions/fnc_reload_loadMagazine.sqf @@ -23,11 +23,12 @@ params ["_vehicle", "_turret", "_carryMag", "_magSource", "_unit"]; TRACE_5("loadMagazine",_vehicle,_turret,_carryMag,_magSource,_unit); private _timeToLoad = 1; -if (!isNull(configOf _vehicle >> QUOTE(ADDON) >> "ammoLoadTime")) then { - _timeToLoad = getNumber(configOf _vehicle >> QUOTE(ADDON) >> "ammoLoadTime"); +private _config = configOf _vehicle >> QUOTE(ADDON) >> "ammoLoadTime"; +if (!isNull _config) then { + _timeToLoad = getNumber _config; }; -private _displayName = format [localize LSTRING(loadX), getText (configFile >> "CfgMagazines" >> _carryMag >> "displayName")]; +private _displayName = format [LLSTRING(loadX), getText (configFile >> "CfgMagazines" >> _carryMag >> "displayName")]; private _onFinish = { (_this select 0) params ["_vehicle", "_turret", "_carryMag", "_magSource", "_unit"]; From 0375d0dae6b582007bc01520890bdf62313fe96f Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Tue, 2 Apr 2024 21:37:30 +0200 Subject: [PATCH 065/132] CSW - Fix CUP CSW (#9907) * Update CfgWeapons.hpp * Update other CUP weapons * Update addons/compat_cup_weapons/compat_cup_weapons_csw/CfgWeapons.hpp --- .../compat_cup_weapons_csw/CfgWeapons.hpp | 37 +++++++++---------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/addons/compat_cup_weapons/compat_cup_weapons_csw/CfgWeapons.hpp b/addons/compat_cup_weapons/compat_cup_weapons_csw/CfgWeapons.hpp index 3e16233568..9ff8519ce1 100644 --- a/addons/compat_cup_weapons/compat_cup_weapons_csw/CfgWeapons.hpp +++ b/addons/compat_cup_weapons/compat_cup_weapons_csw/CfgWeapons.hpp @@ -15,7 +15,7 @@ class CfgWeapons { deployTime = 20; pickupTime = 25; class assembleTo { - ace_csw_mortarBaseplate = "CUP_O_2b14_82mm_RU"; + ace_csw_mortarBaseplate = "CUP_I_2b14_82mm_AAF"; }; }; class WeaponSlotsInfo: WeaponSlotsInfo { @@ -31,7 +31,7 @@ class CfgWeapons { picture = "\CUP\Weapons\CUP_Weapons_StaticWeapons\M252\data\ui\icomap_mortar_m251_ca.paa"; class ace_csw: ace_csw { class assembleTo { - ace_csw_mortarBaseplate = "CUP_B_M252_US"; + ace_csw_mortarBaseplate = "CUP_I_M252_AAF"; }; }; }; @@ -42,7 +42,7 @@ class CfgWeapons { picture = "\CUP\Weapons\CUP_Weapons_StaticWeapons\M252\data\ui\icomap_mortar_m251_ca.paa"; class ace_csw: ace_csw { class assembleTo { - ace_csw_mortarBaseplate = "CUP_B_L16A2_BAF_MPT"; + ace_csw_mortarBaseplate = "CUP_I_L16A2_AAF"; }; }; }; @@ -58,8 +58,8 @@ class CfgWeapons { deployTime = 4; pickupTime = 4; class assembleTo { - ace_csw_m3Tripod = "CUP_B_M2StaticMG_US"; - ace_csw_m3TripodLow = "CUP_B_M2StaticMG_MiniTripod_US"; + ace_csw_m3Tripod = "CUP_I_M2StaticMG_AAF"; + ace_csw_m3TripodLow = "CUP_I_M2StaticMG_MiniTripod_AAF"; }; }; class WeaponSlotsInfo: WeaponSlotsInfo { @@ -81,8 +81,8 @@ class CfgWeapons { deployTime = 4; pickupTime = 4; class assembleTo { - ace_csw_kordTripod = "CUP_O_DSHKM_ChDKZ"; - ace_csw_kordTripodLow = "CUP_O_DSHkM_MiniTriPod_ChDKZ"; + ace_csw_kordTripod = "CUP_I_DSHKM_AAF"; + ace_csw_kordTripodLow = "CUP_I_DSHKM_MiniTriPod_AAF"; }; }; class WeaponSlotsInfo: WeaponSlotsInfo { @@ -104,8 +104,8 @@ class CfgWeapons { deployTime = 4; pickupTime = 4; class assembleTo { - ace_csw_kordTripod = "CUP_O_KORD_high_RU"; - ace_csw_kordTripodLow = "CUP_O_KORD_RU"; + ace_csw_kordTripod = "CUP_I_KORD_high_AAF"; + ace_csw_kordTripodLow = "CUP_I_KORD_AAF"; }; }; class WeaponSlotsInfo: WeaponSlotsInfo { @@ -127,7 +127,7 @@ class CfgWeapons { deployTime = 4; pickupTime = 4; class assembleTo { - ace_csw_sag30Tripod = "CUP_O_AGS_RU"; + ace_csw_sag30Tripod = "CUP_I_AGS_AAF"; }; }; class WeaponSlotsInfo: WeaponSlotsInfo { @@ -149,7 +149,7 @@ class CfgWeapons { deployTime = 4; pickupTime = 4; class assembleTo { - ace_csw_m3TripodLow = "CUP_B_MK19_TriPod_US"; + ace_csw_m3TripodLow = "CUP_I_MK19_TriPod_AAF"; }; }; class WeaponSlotsInfo: WeaponSlotsInfo { @@ -168,7 +168,7 @@ class CfgWeapons { type = "mount"; deployTime = 4; pickupTime = 4; - deploy = "CUP_O_Metis_RU"; + deploy = "CUP_I_Metis_AAF"; }; class WeaponSlotsInfo: WeaponSlotsInfo { mass = 300; @@ -186,7 +186,7 @@ class CfgWeapons { deployTime = 4; pickupTime = 4; class assembleTo { - ace_csw_m220Tripod = "CUP_B_TOW_TriPod_US"; + ace_csw_m220Tripod = "CUP_I_TOW_TriPod_AAF"; }; }; class WeaponSlotsInfo: WeaponSlotsInfo { @@ -200,7 +200,7 @@ class CfgWeapons { class CUP_TOW2_carry: CUP_TOW_carry { class ace_csw: ace_csw { class assembleTo { - ace_csw_m220Tripod = "CUP_B_TOW2_TriPod_US"; + ace_csw_m220Tripod = "CUP_I_TOW2_TriPod_AAF"; }; }; }; @@ -216,7 +216,7 @@ class CfgWeapons { deployTime = 4; pickupTime = 4; class assembleTo { - ace_csw_spg9Tripod = "CUP_B_SPG9_CDF"; + ace_csw_spg9Tripod = "CUP_I_SPG9_AAF"; }; }; class WeaponSlotsInfo: WeaponSlotsInfo { @@ -257,12 +257,12 @@ class CfgWeapons { magazineReloadTime = 0.5; }; - class CUP_Vmlauncher_AT13_single_veh; + class CUP_Vmlauncher_AT13_single_veh; class CUP_proxy_AT13: CUP_Vmlauncher_AT13_single_veh { magazineReloadTime = 0.5; }; - class CUP_Vmlauncher_TOW_single_veh; + class CUP_Vmlauncher_TOW_single_veh; class CUP_proxy_TOW: CUP_Vmlauncher_TOW_single_veh { magazineReloadTime = 0.5; }; @@ -272,7 +272,7 @@ class CfgWeapons { magazineReloadTime = 0.5; }; - class CUP_Vcannon_M119_veh; + class CUP_Vcannon_M119_veh; class CUP_proxy_M119: CUP_Vcannon_M119_veh { magazineReloadTime = 0.5; }; @@ -287,4 +287,3 @@ class CfgWeapons { magazineReloadTime = 0.5; }; }; - From cc3fbc5f3fd911d590f3c599b275729845c435fe Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Tue, 2 Apr 2024 22:46:14 +0200 Subject: [PATCH 066/132] Cargo - Fix undefined variable (#9909) Update fnc_initVehicle.sqf --- addons/cargo/functions/fnc_initVehicle.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/cargo/functions/fnc_initVehicle.sqf b/addons/cargo/functions/fnc_initVehicle.sqf index ec432ea91f..4ca004b94e 100644 --- a/addons/cargo/functions/fnc_initVehicle.sqf +++ b/addons/cargo/functions/fnc_initVehicle.sqf @@ -22,11 +22,11 @@ private _type = typeOf _vehicle; private _config = configOf _vehicle; // If vehicle had space given to it via eden/public, then override config hasCargo setting -private _hasCargoPublic = _item getVariable QGVAR(hasCargo); +private _hasCargoPublic = _vehicle getVariable QGVAR(hasCargo); private _hasCargoPublicDefined = !isNil "_canLoadPublic"; if (_hasCargoPublicDefined && {!(_hasCargoPublic isEqualType false)}) then { - WARNING_4("%1[%2] - Variable %3 is %4 - Should be bool",_item,_type,QGVAR(hasCargo),_hasCargoPublic); + WARNING_4("%1[%2] - Variable %3 is %4 - Should be bool",_vehicle,_type,QGVAR(hasCargo),_hasCargoPublic); }; private _hasCargoConfig = getNumber (_config >> QGVAR(hasCargo)) == 1; From 613fc363850435b4af1b951a284453e66ab55abc Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Tue, 2 Apr 2024 23:07:45 +0200 Subject: [PATCH 067/132] Common - Use existing weapon holders for `FUNC(addToInventory)` (#9895) * Reuse existing weapon holders * Update fnc_addToInventory.sqf * Return correct weapon holder --- .../common/functions/fnc_addToInventory.sqf | 39 +++++++++++-------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/addons/common/functions/fnc_addToInventory.sqf b/addons/common/functions/fnc_addToInventory.sqf index dd561ac09e..9902abe82b 100644 --- a/addons/common/functions/fnc_addToInventory.sqf +++ b/addons/common/functions/fnc_addToInventory.sqf @@ -1,7 +1,7 @@ #include "..\script_component.hpp" /* * Author: Garth 'L-H' de Wet - * Adds an item, weapon, or magazine to the unit's inventory or places it in a weaponHolder if no space. + * Adds an item, weapon, or magazine to the unit's inventory or places it in a weapon holder if no space. * * Arguments: * 0: Unit @@ -11,10 +11,10 @@ * * Return Value: * 0: Added to player - * 1: weaponholder + * 1: Weapon holder item was placed in * * Example: - * [bob, "classname", "", 5] call ace_common_fnc_addToInventory + * [player, "30Rnd_65x39_caseless_mag", "", 5] call ace_common_fnc_addToInventory * * Public: Yes */ @@ -26,6 +26,7 @@ private _type = _classname call FUNC(getItemType); private _canAdd = false; private _canFitWeaponSlot = false; private _addedToUnit = false; +private _weaponHolder = _unit; switch (_container) do { case "vest": { @@ -94,11 +95,13 @@ switch (_type select 0) do { } else { _addedToUnit = false; - private _pos = _unit modelToWorldVisual [0,1,0.05]; + _weaponHolder = nearestObject [_unit, "WeaponHolder"]; - _unit = createVehicle ["WeaponHolder_Single_F", _pos, [], 0, "NONE"]; - _unit addWeaponCargoGlobal [_classname, 1]; - _unit setPosATL _pos; + if (isNull _weaponHolder || {_unit distance _weaponHolder > 2}) then { + _weaponHolder = createVehicle ["GroundWeaponHolder", _unit, [], 0, "CAN_COLLIDE"]; + }; + + _weaponHolder addWeaponCargoGlobal [_classname, 1]; }; }; @@ -127,11 +130,13 @@ switch (_type select 0) do { } else { _addedToUnit = false; - private _pos = _unit modelToWorldVisual [0,1,0.05]; + _weaponHolder = nearestObject [_unit, "WeaponHolder"]; - _unit = createVehicle ["WeaponHolder_Single_F", _pos, [], 0, "NONE"]; - _unit addMagazineAmmoCargo [_classname, 1, _ammoCount]; - _unit setPosATL _pos; + if (isNull _weaponHolder || {_unit distance _weaponHolder > 2}) then { + _weaponHolder = createVehicle ["GroundWeaponHolder", _unit, [], 0, "CAN_COLLIDE"]; + }; + + _weaponHolder addMagazineAmmoCargo [_classname, 1, _ammoCount]; }; }; @@ -156,11 +161,13 @@ switch (_type select 0) do { } else { _addedToUnit = false; - private _pos = _unit modelToWorldVisual [0,1,0.05]; + _weaponHolder = nearestObject [_unit, "WeaponHolder"]; - _unit = createVehicle ["WeaponHolder_Single_F", _pos, [], 0, "NONE"]; - _unit addItemCargoGlobal [_classname, 1]; - _unit setPosATL _pos; + if (isNull _weaponHolder || {_unit distance _weaponHolder > 2}) then { + _weaponHolder = createVehicle ["GroundWeaponHolder", _unit, [], 0, "CAN_COLLIDE"]; + }; + + _weaponHolder addItemCargoGlobal [_classname, 1]; }; }; @@ -170,4 +177,4 @@ switch (_type select 0) do { }; }; -[_addedToUnit, _unit] +[_addedToUnit, _weaponHolder] From 19e006473002dde0c483f5ddd5ff361a8824c8ef Mon Sep 17 00:00:00 2001 From: BrettMayson Date: Tue, 2 Apr 2024 17:07:03 -0700 Subject: [PATCH 068/132] Medical - Fix typo caridac to cardiac (#9900) --- addons/medical_engine/XEH_preInit.sqf | 2 +- addons/medical_engine/script_macros_medical.hpp | 4 ++-- addons/medical_status/functions/fnc_getBloodLoss.sqf | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/medical_engine/XEH_preInit.sqf b/addons/medical_engine/XEH_preInit.sqf index a7221ce1c1..b0304f167f 100644 --- a/addons/medical_engine/XEH_preInit.sqf +++ b/addons/medical_engine/XEH_preInit.sqf @@ -19,7 +19,7 @@ if (isNil QUOTE(BLOOD_LOSS_KNOCK_OUT_THRESHOLD)) then {BLOOD_LOSS_KNOCK_OUT_THRE if (isNil QUOTE(PAIN_FADE_TIME)) then {PAIN_FADE_TIME = PAIN_FADE_TIME_DEFAULT}; if (isNil QUOTE(LIMPING_DAMAGE_THRESHOLD)) then {LIMPING_DAMAGE_THRESHOLD = LIMPING_DAMAGE_THRESHOLD_DEFAULT}; if (isNil QUOTE(FRACTURE_DAMAGE_THRESHOLD)) then {FRACTURE_DAMAGE_THRESHOLD = FRACTURE_DAMAGE_THRESHOLD_DEFAULT}; -if (isNil QUOTE(CARIDAC_OUTPUT_MIN)) then {CARIDAC_OUTPUT_MIN = CARIDAC_OUTPUT_MIN_DEFAULT}; +if (isNil QUOTE(CARDIAC_OUTPUT_MIN)) then {CARDIAC_OUTPUT_MIN = CARDIAC_OUTPUT_MIN_DEFAULT}; // Derive the alternate fatal damage coefficents if (isNil QUOTE(FATAL_SUM_DAMAGE_WEIBULL_K) || isNil QUOTE(FATAL_SUM_DAMAGE_WEIBULL_L)) then { private _x1 = 0.5; diff --git a/addons/medical_engine/script_macros_medical.hpp b/addons/medical_engine/script_macros_medical.hpp index f789caec9e..167765c576 100644 --- a/addons/medical_engine/script_macros_medical.hpp +++ b/addons/medical_engine/script_macros_medical.hpp @@ -109,8 +109,8 @@ #define FRACTURE_DAMAGE_THRESHOLD_DEFAULT 0.50 // Minimum cardiac output -#define CARIDAC_OUTPUT_MIN EGVAR(medical,const_minCardiacOutput) -#define CARIDAC_OUTPUT_MIN_DEFAULT 0.05 +#define CARDIAC_OUTPUT_MIN EGVAR(medical,const_minCardiacOutput) +#define CARDIAC_OUTPUT_MIN_DEFAULT 0.05 // Minimum body part damage required for blood effect on uniform #define VISUAL_BODY_DAMAGE_THRESHOLD 0.35 diff --git a/addons/medical_status/functions/fnc_getBloodLoss.sqf b/addons/medical_status/functions/fnc_getBloodLoss.sqf index d1adbb9864..fd02f9042b 100644 --- a/addons/medical_status/functions/fnc_getBloodLoss.sqf +++ b/addons/medical_status/functions/fnc_getBloodLoss.sqf @@ -23,4 +23,4 @@ if (_woundBleeding == 0) exitWith {0}; private _cardiacOutput = [_unit] call FUNC(getCardiacOutput); // even if heart stops blood will still flow slowly (gravity) -(_woundBleeding * (_cardiacOutput max CARIDAC_OUTPUT_MIN) * EGVAR(medical,bleedingCoefficient)) +(_woundBleeding * (_cardiacOutput max CARDIAC_OUTPUT_MIN) * EGVAR(medical,bleedingCoefficient)) From 020d21d5622c047b1ae0f22e0cfdd8180725290f Mon Sep 17 00:00:00 2001 From: Hexo <130893962+Alfred-Neuman@users.noreply.github.com> Date: Wed, 3 Apr 2024 06:04:56 +0200 Subject: [PATCH 069/132] Translate - French (#9908) * Translate - French * Translate - French - overheating * Translate -French - compat_sog * Update stringtable.xml * Translate - French * Fix - Translate French Minor correction --- addons/arsenal/stringtable.xml | 1 + addons/cargo/stringtable.xml | 5 +++ addons/common/stringtable.xml | 3 ++ addons/compat_sog/stringtable.xml | 38 ++++++++++++++++++++ addons/explosives/stringtable.xml | 4 +++ addons/field_rations/stringtable.xml | 8 +++++ addons/fieldmanual/stringtable.xml | 44 ++++++++++++++++++++++++ addons/hearing/stringtable.xml | 1 + addons/killtracker/stringtable.xml | 1 + addons/medical_gui/stringtable.xml | 3 ++ addons/medical_treatment/stringtable.xml | 6 ++++ addons/medical_vitals/stringtable.xml | 3 ++ addons/overheating/stringtable.xml | 6 ++++ addons/refuel/stringtable.xml | 5 +++ addons/zeus/stringtable.xml | 2 ++ 15 files changed, 130 insertions(+) diff --git a/addons/arsenal/stringtable.xml b/addons/arsenal/stringtable.xml index 48b5876f60..39f7936d58 100644 --- a/addons/arsenal/stringtable.xml +++ b/addons/arsenal/stringtable.xml @@ -1718,6 +1718,7 @@ 検索\nCTRL + クリックで検索結果の即時表示を有効化 검색\nCtrl + 클릭으로 실시간 검색 결과를 활성화 Поиск\nCtrl + Click для включения результатов в реальном времени + Recherche\nCTRL + clic pour modifier les résultats tout en écrivant diff --git a/addons/cargo/stringtable.xml b/addons/cargo/stringtable.xml index a75d25ea55..79ee3f96b5 100644 --- a/addons/cargo/stringtable.xml +++ b/addons/cargo/stringtable.xml @@ -39,6 +39,7 @@ Разместить 配置する 배치하기 + Déployer Raise/Lower | (Ctrl + Scroll) Rotate @@ -285,6 +286,7 @@ %1 を %2 に積み込んでいます・・・ Загружаем %1 в %2... %1을(를) %2에 싣는 중... + Chargement %1 dans %2... Unloading %1 from %2... @@ -293,6 +295,7 @@ %1 を %2 から降ろしています・・・ Выгружаем %1 из %2... %1을(를) %2(으)로부터 내리는 중... + Déchargement %1 de %2... %1<br/>could not be loaded @@ -580,6 +583,7 @@ Включить размещение 配置機能を有効化 배치 활성화 + Permettre le placement Controls whether cargo items can be unloaded via the deploy method. @@ -587,6 +591,7 @@ Определяет, можно ли выгружать грузы с помощью метода размещения. 配置機能を介して貨物アイテムを降ろすことが出来るかどうかを制御します。 배치 방법을 통해 화물 아이템을 내릴 수 있는지 여부를 제어합니다. + Contrôler si les éléments de cargaison peuvent être déchargés via la méthode de déploiement. diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index 60b16a742d..7138c8da95 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -1832,16 +1832,19 @@ Weapon Sway 手ぶれ 무기 흔들림 + Oscillation de l'arme Enable Weapon Sway 手ぶれを有効化 무기 흔들림 추가 + Activer l'oscillation de l'arme Enables weapon sway influenced by sway factors, such as stance, fatigue and medical condition.\nDisabling this setting will defer sway to vanilla or other mods. 姿勢、疲労、負傷状態などの手ぶれ要因に影響を受ける武器照準の揺れを有効にします。\nこの設定を無効にすると、手ぶれの揺れはバニラまたは他のMODの処理に任されます。 흔들림 계수, 자세, 피로도, 건강 상태 등의 요인에 영향을 받는 무기 흔들림을 활성화합니다.\n이 설정을 비활성화하면 바닐라 또는 다른 모드의 흔들림으로 대체됩니다. + Active l'oscillation de l'arme influencé par les facteurs d'oscillation, tels que la position, la fatigue et l'état de santé.\nLa désactivation de ce paramètre reportera l'oscillation à vanilla ou à d'autres mods. Sway factor diff --git a/addons/compat_sog/stringtable.xml b/addons/compat_sog/stringtable.xml index 06f0827d08..fc64aef97c 100644 --- a/addons/compat_sog/stringtable.xml +++ b/addons/compat_sog/stringtable.xml @@ -12,6 +12,7 @@ Закопать Enterrarse Escavar + Creuser M49A2 60mm HE @@ -24,6 +25,7 @@ M49A2 60 мм ОФ M49A2 60mm HE M49A2 60mm HE + M49A2 60mm HE M302 60mm WP @@ -36,6 +38,7 @@ M302 60 мм Фосфорная M302 60mm WP M302 60mm WP + M302 60mm Phosphore Blanc M83 60mm Lume @@ -48,6 +51,7 @@ M83 60 мм Осветительная M83 60mm Iluminación M83 60mm Iluminação + M83 60 mm Eclairant M374 81mm HE @@ -60,6 +64,7 @@ M374 81 мм ОФ M374 81mm HE M374 81mm HE + M374 81mm HE M375 81mm WP @@ -72,6 +77,7 @@ M375 81 мм Фосфорная M375 81mm WP M375 81mm WP + M375 81mm Phosphore Blanc M301A3 81mm Lume @@ -84,6 +90,7 @@ M301A3 81 мм Осветительная M301A3 81mm Iluminación M301A3 81mm Iluminação + M301A3 81mm Eclairant M57 81mm Smoke @@ -96,6 +103,7 @@ M57 81 мм Дымовая M57 81mm Smoke M57 81mm Fumígena + M57 81mm Fumigène O-832D 82mm HE @@ -108,6 +116,7 @@ О-832Д 82 мм ОФ O-832D 82mm HE O-832D 82mm HE + O-832D 82mm HE D-832 82mm WP @@ -120,6 +129,7 @@ Д-832 82 мм Фосфорная D-832 82mm WP D-832 82mm WP + D-832 82mm Phosphore Blanc S-832S 82mm Lume @@ -132,6 +142,7 @@ С-832С 82 мм Осветительная S-832S 82mm Iluminación S-832S 82mm Iluminação + S-832S 82mm Eclairant [ACE] M49A2 60mm HE Box @@ -144,6 +155,7 @@ [ACE] Коробка M49A2 60 мм ОФ [ACE] M49A2 60mm Caja de HE [ACE] M49A2 60mm Caixa de HE + [ACE] Scatola M49A2 60mm HE [ACE] M302 60mm WP Box @@ -156,6 +168,7 @@ [ACE] Коробка M302 60 мм Фосфорных [ACE] M302 60mm Caja de WP [ACE] M302 60mm Caixa de WP + [ACE] M302 60mm Phosphore Blanc Box [ACE] M83 60mm Lume Box @@ -168,6 +181,7 @@ [ACE] Коробка M83 60 мм Осветительных [ACE] M83 60mm Caja de Iluminación [ACE] M83 60mm Caixa de Iluminação + [ACE] M83 60mm Eclairant Box [ACE] M374 81mm HE Box @@ -180,6 +194,7 @@ [ACE] Коробка M374 81 мм ОФ [ACE] M374 81mm Caja de HE [ACE] M374 81mm Caixa de HE + [ACE] Scatola M374 81mm HE [ACE] M375 81mm WP Box @@ -192,6 +207,7 @@ [ACE] Коробка M375 81 мм Фосфорных [ACE] M375 81mm Caja de WP [ACE] M375 81mm Caixa de WP + [ACE] M375 81mm Phosphore Blanc Box [ACE] M301A3 81mm Lume Box @@ -204,6 +220,7 @@ [ACE] Коробка M301A3 81 мм Осветительных [ACE] M301A3 81mm Caja de Iluminación [ACE] M301A3 81mm Caixa de Iluminação + [ACE] M301A3 81mm Eclairant Box [ACE] M57 81mm Smoke Box @@ -216,6 +233,7 @@ [ACE] Коробка M57 81 мм Дымовых [ACE] M57 81mm Caja de Humo [ACE] M57 81mm Caixa de Fumígena + [ACE] M57 81mm Fumigène Box [ACE] O-832D 82mm HE Box @@ -228,6 +246,7 @@ [ACE] Коробка О-832Д 82 мм ОФ [ACE] O-832D 82mm Caja de HE [ACE] O-832D 82mm Caixa de HE + [ACE] Scatola O-832D 82mm HE [ACE] D-832 82mm WP Box @@ -240,6 +259,7 @@ [ACE] Коробка Д-832 82 мм Фосфорных [ACE] D-832 82mm Caja de WP [ACE] D-832 82mm Caixa de WP + [ACE] D-832 82mm Phosphore Blanc Box [ACE] S-832S 82mm Lume Box @@ -252,6 +272,7 @@ [ACE] Коробка С-832С 82 мм Осветительных [ACE] S-832S 82mm Caja de Iluminación [ACE] S-832S 82mm Caixa de Iluminação + [ACE] S-832S 82mm Eclairant Box Dig Spiderhole @@ -264,6 +285,7 @@ Выкопать паучью дыру Excavar Agujero de araña Escavar buraco de aranha + Creuser un trou d'araignée Dig Spiderhole (Angled Cover) @@ -276,6 +298,7 @@ Выкопать крытую паучью дыру Excavar Agujero de araña (Cubierta inclinada) Escavar buraco de aranha (Cobertura inclinada) + Creuser un trou d'araignée (couverture d'angle) Dig Spiderhole (Dual) @@ -288,6 +311,7 @@ Выкопать двойную паучью дыру Excavar Agujero de araña (Doble) Escavar buraco de aranha (Duplo) + Creuser un trou d'araignée (double) [CSW] M1919A4 Gun Bag @@ -300,6 +324,7 @@ [CSW] Сумка с M1919A4 [CSW] M1919A4 Bolsa para arma [CSW] Bolsa para M1919A4 + [CSW] M1919A4 Gun Bag [CSW] M1919A6 Gun Bag @@ -312,6 +337,7 @@ [CSW] Сумка с M1919A6 [CSW] M1919A6 Bolsa para arma [CSW] Bolsa para M1919A6 + [CSW] M1919A6 Gun Bag [CSW] M60 Gun Bag @@ -324,6 +350,7 @@ [CSW] Сумка с M60 [CSW] M60 Bolsa para arma [CSW] Bolsa para M60 + [CSW] M60 Gun Bag [CSW] DShK (Shield) Gun Bag @@ -336,6 +363,7 @@ [CSW] Сумка с ДШК (со щитом) [CSW] DShK (Apantallada) Bolsa para arma [CSW] Bolsa para DShK (Escudo) + [CSW] DShK (Shield) Gun Bag [CSW] DShK (AA) Gun Bag @@ -348,6 +376,7 @@ [CSW] Сумка с ДШК (зенитный) [CSW] DShK (AA) Bolsa para arma [CSW] Bolsa para DShK (AA) + [CSW] DShK (AA) Gun Bag [CSW] RPD Gun Bag @@ -360,6 +389,7 @@ [CSW] Сумка с РПД [CSW] RPD Bolsa para arma [CSW] Bolsa para RPD + [CSW] RPD Gun Bag [CSW] PK Gun Bag @@ -372,6 +402,7 @@ [CSW] Сумка с ПК [CSW] PK Bolsa para arma [CSW] Bolsa para PK + [CSW] PK Sac d'armes [CSW] MG42 Gun Bag @@ -384,6 +415,7 @@ [CSW] Сумка с MG42 [CSW] MG42 Bolsa para arma [CSW] Bolsa para MG42 + [CSW] MG42 Sac d'armes [CSW] SGM Gun Bag @@ -396,6 +428,7 @@ [CSW] Сумка с СГМ [CSW] SGM Bolsa para arma [CSW] Bolsa para SGM + [CSW] SGM Sac d'armes [CSW] SGM (Shield) Gun Bag @@ -408,6 +441,7 @@ [CSW] Сумка с СГМ (со щитом) [CSW] SGM (Apantallada) Bolsa para arma [CSW] Bolsa para SGM (Escudo) + [CSW] SGM Sac d'armes (avec bouclier) [CSW] Mk18 Gun Bag @@ -420,6 +454,7 @@ [CSW] Сумка с Mk18 [CSW] Mk18 Bolsa para arma [CSW] Bolsa para Mk18 + [CSW] Mk18 Sac d'armes [CSW] M29 Mortar Tube @@ -432,6 +467,7 @@ [CSW] Сумка с миномётом M29 [CSW] M29 Tubo de Mortero [CSW] M29 Tubo de Morteiro + [CSW] Tube de mortier M29 [CSW] M2 Mortar Tube @@ -444,6 +480,7 @@ [CSW] Сумка с миномётом M2 [CSW] M2 Tubo de mortero [CSW] M2 Tubo de Morteiro + [CSW] Tube de mortier M2 [CSW] Type 53 Mortar Tube @@ -456,6 +493,7 @@ [CSW] Сумка с миномётом Type 53 [CSW] Type 53 Tubo de mortero [CSW] Type 53 Tubo de Morteiro + [CSW] Tube de mortier Type 53 diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml index 8643742ab8..b21238e98e 100644 --- a/addons/explosives/stringtable.xml +++ b/addons/explosives/stringtable.xml @@ -75,6 +75,7 @@ Подрыв всех на активном детонаторе 選択した点火装置を全て起爆 활성화된 격발기의 모든 것을 폭파 + Détoner tout sur le détonateur actif Set Active Clacker @@ -83,6 +84,7 @@ Установить активный детонатор この点火装置を選択 격발기 활성 설정 + Définir le détonateur actif Cycle Active Clacker @@ -91,6 +93,7 @@ Цикл активного детонатора 点火装置を切り替え 격발기 활성 전환 + Modifier le détonateur actif Active Clacker @@ -99,6 +102,7 @@ Активный детонатор 選択中の点火装置 격발기 활성 + Détonateur actif Explosive code: %1 diff --git a/addons/field_rations/stringtable.xml b/addons/field_rations/stringtable.xml index 78e1ebfe87..bd8eb3f97f 100644 --- a/addons/field_rations/stringtable.xml +++ b/addons/field_rations/stringtable.xml @@ -31,6 +31,7 @@ ACE 전투식량 HUD ACE HUD de Raciones de campo ACE HUD de Rações de Campo + ACE Rations de terrain HUD Indicates current hunger and thirst status. @@ -78,6 +79,7 @@ 먹기/마시기 Comer/Beber Comer/Beber + Manger/Boire Enable/Disable Field Rations @@ -177,6 +179,7 @@ 갈증 해소 Sed saciada Sede saciada + Soif étanchée Coefficient for the amount of thirst quenched from drinking. @@ -191,6 +194,7 @@ 마심으로써 갈증이 얼마나 해소되는지를 정합니다 Coeficiente del saciamiento de sed por beber. Coeficiente para a quantidade de sede saciada por beber. + Coefficient déterminant la quantité de soif étanchée par la boisson. Hunger Satiated @@ -205,6 +209,7 @@ 배부름 Hambre saciada Fome saciada + Faim rassasiée Coefficient for the amount of hunger satiated from eating. @@ -219,6 +224,7 @@ 밥을 먹어서 배고픔이 얼마나 해결되는지를 정합니다 Coeficiente del saciamiento del hambre por comer. Coeficiente para a quantidade de fome saciada por comer. + Coefficient déterminant la quantité de faim satisfaite en mangeant. Water Source Actions @@ -232,6 +238,7 @@ 물 근처 행동 Acciones para suministros de agua Ações para suprimentos de água + Interactions sur les sources d'eau Controls what actions are available on water sources. @@ -245,6 +252,7 @@ 물가에서 어떤 행동을 취할지 정합니다 Controla qué acciones están disponibles para los suministros de agua. Controla quais ações estão disponíveis para os suprimentos de água. + Déterminer les stocks disponibles dans les sources d'eau. Refill Only diff --git a/addons/fieldmanual/stringtable.xml b/addons/fieldmanual/stringtable.xml index 647a5bad43..a4474dc2d4 100644 --- a/addons/fieldmanual/stringtable.xml +++ b/addons/fieldmanual/stringtable.xml @@ -27,6 +27,7 @@ Hunger 空腹 Голод + Faim %3Hunger%4 increases linearly with soldier's movement speed. Restore by eating food.<br/><br/>%3Usage:%4<br/>%2Pick up food.<br/>%2Use [%3%12%4] and select %3Survival%4.<br/>%2Choose an item to consume. @@ -47,6 +48,7 @@ Durst 渇き Жажда + Soif %3Thirst%4 increases linearly with soldier's movement speed. Restore by drinking liquids.<br/><br/>%3Usage:%4<br/>%2Pick up a drink.<br/>%2Use [%3%12%4] and select %3Survival%4.<br/>%2Choose an item to consume. @@ -67,6 +69,7 @@ Cure Mediche 治療 Медицинское лечение + Traitement médical Decrease Heart Rate @@ -77,6 +80,7 @@ Rallenta ritmo cardiaco 心拍数を下げる Уменьшить частоту сердечных сокращений + Diminution de la fréquence cardiaque %3Adenosine%4 is used to decrease heart rate.<br/><br/>%3Usage:%4<br/>%2Use [%3%13%4] or [%3%14%4] and select an appendage.<br/>%2Inject %3Adenosine%4. @@ -97,6 +101,7 @@ Bende 包帯 Бинты + Pansements Close Wounds @@ -107,6 +112,7 @@ Chiudi ferite 傷口をふさぐ Закрыть раны + Fermer les plaies %3Bandages%4 stop bleeding and close wounds. Depending on your settings, bandages may reopen if surgery is not performed.<br/><br/>%2%3Field Dressing:%4<br/>%11<t color='#D9D900'>Average</t> In All Categories<br/>%2%3Packing Bandage:%4<br/>%11<t color='#D9D900'>Average</t> Treatment<br/>%11<t color='#E60000'>Higher</t> Reopen Chance<br/>%11<t color='#00CC00'>Longer</t> Reopen Delay<br/>%2%3Elastic Bandage:%4<br/>%11<t color='#00CC00'>Higher</t> Treatment<br/>%11<t color='#E60000'>Higher</t> Reopen Chance<br/>%11<t color='#E60000'>Shorter</t> Reopen Delay<br/>%2%3Quickclot:%4<br/>%11<t color='#E60000'>Lower</t> Treatment<br/>%11<t color='#00CC00'>Lower</t> Reopen Chance<br/>%11<t color='#00CC00'>Longer</t> Reopening Delay<br/><br/>%3Usage:%4<br/>%2Use [%3%13%4] or [%3%14%4] and select a injured body part.<br/>%2Bandage body part by selecting desired %3Bandage%4 type. @@ -154,6 +160,7 @@ Aumenta ritmo cardiaco | Accelera rinvenimento 心拍数を上げる | はやく起こす Увеличьте частоту сердечных сокращений | просыпайтесь быстрее + Augmentation de la fréquence cardiaque - Réveil plus rapide %3Epinephrine%4 increases a patient's pulse as well as potentially decreasing the time between consciousnesss checks (effectively reducing the time needed for the patient to wake up).<br/><br/>%3Usage%4<br/>%2Use [%3%13%4] or [%3%14%4] and select an appendage.<br/>%2Inject %3Epinephrine%4. @@ -173,6 +180,7 @@ Cura completa 生まれたてのように回復する Лечение тела + Remettre comme neuf The %3Personal Aid Kit%4 is an item that allows a soldier to be fully healed. Independent of %3ACE Settings%4, it requires that the patient is in %3Stable Condition%4 before use.<br/><br/>%3Stable Condition%4 qualifies as:<br/>%2Unit is %3Alive%4.<br/>%2Unit is %3Conscious%4.<br/>%2Unit has no active %3Bleeding%4.<br/>%2Heart Rate >= 40.<br/>%2Systolic BP >= 60.<br/>%2Diastolic BP >= 50.<br/><br/>%3Usage:%4<br/>%2Move to appropriate location depending on %3ACE Settings%4.<br/>%2Use [%3%13%4] or [%3%14%4] and select %3Advanced Treatments%4<br/>%2Select %3Use Personal Aid Kit%4. @@ -210,6 +218,7 @@ Impedisce la riapertura di ferite 傷口が開くのを防ぐ Предотвратить повторное открытие ран + Empêcher la réouverture des plaies A %3Surgical Kit%4 is used to prevent wounds from reopening after being bandaged. Depending on settings, it can also clear trauma and may require additional %3Sutures%4 to close wounds. Sutures are consumable, much like bandages, and are not a replacement for the Surgical Kit.<br/><br/>%3Usage:%4<br/>%2Use [%3%13%4] or [%3%14%4] and select %3Advanced Treatment%4.<br/>%2Select %3Use Surgical Kit%4. @@ -227,6 +236,7 @@ Ferma emorragia 出血を止める Остановить кровотечение + Arrêter les saignements A %3Tourniquet%4 stops bleeding temporarily so that a wound(s) can be bandaged. Can only be used on limbs.<br/><br/>%3Usage:%4<br/>%2Use [%3%13%4] or [%3%14%4] and select an affected appendage.<br/>%2Select %3Apply Tourniquet%4. @@ -259,6 +269,7 @@ Cure, Semplificato Tratamento, Simplificado 治療を簡略化する + Traitement, simplifié The %3Medical Menu%4 is a dedicated %3interface%4 to facilitate %3medical treatment%4. The %3R%4 and %3L%4 letters indicate the side of the patient's body being treated.<br/><br/>%3Usage:%4<br/>%2Use [%3%14%4] while looking at a patient to open the Medical Menu. Opening the menu without a patient allows for self-treatment.<br/>%2Alternatively, use [%3%12%4] or [%3%13%4] and select %3Medical Menu%4.<br/><br/>%3Keybinds:%4<br/>%2Use [%3W, A, S, D, X, and Z%4] to select body parts.<br/>%2Use your %3number keys%4 to select treatment categories. @@ -275,6 +286,7 @@ Portátil, Preciso e Robusto Leggero, Preciso, Robusto 高機動、高精度、高耐久 + Portable, précis, robuste The %3Horus ATragMX%4 considers atmospheric conditions, gun data, ammunition, range, speed, and muzzle velocity to calculate precise aiming solutions with %3Come-Up%4 results - and even accounts for %3Coriolis%4 and %3Spin Drift%4 effects. %3ATragMX%4, loaded on a handheld computer made by %3TDS Recon%4, is easy to use and lightning fast. The %3Recon%4 meets the rigorous %3MIL-STD-810F%4 military standard for drops, vibration, humidity, altitude and extreme temperatures.<br/><br/>%3Usage:%4<br/>Please visit the wiki page for more information. @@ -291,6 +303,7 @@ Retorne os Abatidos Recupera i tuoi morti 死者を連れ出す + Récupérez vos morts %3Body Bags%4 are used to transport dead bodies. They can be dragged and loaded into vehicles.<br/><br/>%3Usage:%4<br/>%2Approach a dead body.<br/>%2Use [%3%13%4] or [%3%15%4] and select %3Place Body In Bodybag%4. @@ -307,6 +320,7 @@ Faça Prisioneiros Prendi prigionieri 捕虜の捕り方 + Faire des prisonniers %3Cable Ties%4 enable a soldier to capture and detain another soldier. Once apprehended, the captor gains the ability to inspect the prisoner's belongings, set them free, or accompany them to an alternate area. Transporting escorted prisoners is also possible, including loading them into vehicles if needed. Depending on your settings, units may need to surrender before being taken captive.<br/><br/>%3Usage:%4<br/>%2Approach the unit and use the [%3%13%4].<br/>%2The interaction is located around the hands in the form of a handcuffs icon.<br/>%2Repeat to release. @@ -323,6 +337,7 @@ Celular Explosivo Cellulare per esplosivi 電話でドカン + Explosifs téléphone portable The %3Cellphone%4 is functionally a %3Clacker%4. Use it to connect and detonate an explosive device. Multiple devices can be linked to the cellphone and called within the phonebook.<br/><br/>%3Usage:%4<br/>%2Place an explosive.<br/>%2Use [%3%13%4], select %3Explosives%4, and select %3Cellphone%4.<br/>%2Open the cellphone interface with [%3%12%4].<br/>%2Navigate the phone book with the arrows and select your calling number.<br/>%2Call the number to detonate. @@ -339,6 +354,7 @@ Luzes de Leitura Portáteis Luci da Lettura Portabili 携帯読書灯 + Lampes de lecture portables %3Chemlight Shields%4 give you the ability to read your map, even in dark environments. However, when using %3Chemlight Shields%4, you will have a slight glow around you.<br/><br/>%3Usage:%4<br/>%2Use [%3%12%4] and select %3Equipment%4.<br/>%2elect %3Chemlights%4 and %3Prepare Chemlight Shield (Color)%4.<br/>%2Open %3Map%4.<br/>%2Use [%3%12%4] and select %3Flashlights%4 where you will find your chemlight shield. @@ -355,6 +371,7 @@ Detonação Remota Detonazione da remoto リモコン爆弾 + Détonation à distance Use %3Clackers%4 to connect and detonate an explosive device. Multiple devices can be linked to a clacker and detonated on different channels.<br/><br/>%3Usage:%4<br/>%2Place an explosive.<br/>%2Use [%3%13%4], select %3Explosives%4, and select the %3Clacker%4 you wish to link to.<br/>%2Open the ACE interface with [%3%12%4].<br/>%2Select %3Explosives%4 and select a %3Clacker%4.<br/>%2Select the %3Explosive%4 you wish to detonate. @@ -370,6 +387,7 @@ Naviga 測位 Навигация + Naviguer The %3DAGR%4 is a simpler version of the %3MicroDAGR GPS%4. It has similar features but lacks the topographic and satellite imaging functions of the %3MicroDAGR GPS%4.<br/><br/>%3Usage:%4<br/>%2Equip a %3DAGR%4.<br/>%2Use [%3%12%4] and select %3Configure%4 or %3Toggle%4.<br/><br/>The following menus are available when configuring your %3DAGR:%4<br/>%11%2Data View: WIP<br/>%11%2GoTo WP: Select a waypoint to track.<br/>%11%2WP List: Add/Edit/Remove waypoints.<br/>%11%2Connect To: Connect %3DAGR%4 to the %3Vector 21 Rangefinder%4.<br/>%11%2Options @@ -385,6 +403,7 @@ Vendetta Esplosiva 爆発的な復讐 Взрывная месть + Homme mort The %3Dead Man's Switch%4 is a device that allows a soldier to detonate an %3Explosive%4 when the soldier dies.<br/><br/>%3Usage:%4<br/>%2Use [%3%12%4] and select %3Explosives%4.<br/>%2Select %3Dead Man's Switch%4 and connect the desired %3Explosive%4.<br/>%2Repeat the process and disconnect to reverse. @@ -407,6 +426,7 @@ Disinnesca Esplosivi 爆発物の解除 Обезвреживание взрывчатки + Désamorcer les explosifs Protect Your Hearing @@ -415,6 +435,7 @@ Proteggi il tuo Udito 聴覚の保護 Защитите свой слух + Protéger votre audition %3Ear Plugs%4 help prevent hearing damage from repeat loud noises near a soldier. Insert %3Ear Plugs%4 to lower volume of a soldier's environment and prevent %3Combat Deafness%4.<br/><br/>%3Usage:%4<br/>%2Use [%3%12%4] and select %3Equipment%4.<br/>%2Insert %3Ear Plugs%4. @@ -430,6 +451,7 @@ Mettiti in Copertura 遮蔽を造り出す Добраться до укрытия + Se mettre à couvert The %3Entrenching Tool%4 allows soldiers to dig trenches to help defend their position. The soldier must be on soil in order to dig a trench.<br/><br/>%3Usage:%4<br/>%2Equip an %3Entrenching Tool%4.<br/>%2Use [%3%12%4] and select %3Equipment%4.<br/>%2Select the type of trench you wish to build. @@ -445,6 +467,7 @@ 손전등 フラッシュライト Фонари + Lampes de poche Illuminate Your Map @@ -453,6 +476,7 @@ 지도를 밝혀줍니다 地図に光あれ Осветите свою карту + Éclairer votre carte %3Flashlights%4 give you the ability to read your map, even in dark environments. However, when using %3Flashlights%4, you will have a slight glow around you.<br/><br/>%3Usage:%4<br/>%2On the map screen, use [%3%12%4] and select %3Flashlights%4.<br/>%2Select the %3Flashlight%4 you want to use and select %3On%4.<br/><br/>%3Available Flashlight Items%4:<br/>%2 Fulton MX-991<br/>%2 KSF-1<br/>%2 Maglite XL50<br/><br/>%3NOTE:%4<br/>Flashlight states are persistent. @@ -468,6 +492,7 @@ 하늘에서 관측합니다 空から戦場を見てみよう Наблюдайте с Небес + Observer depuis le ciel The %3High-Altitude Unit Navigated Tactical Imaging Round (HuntIR)%4 is designed to be fired from a grenade launcher. After being fired in the air, the built-in parachute will be deployed and the IR CMOS camera will activate, providing a video stream until it touches the ground or is shot down.<br/><br/>%3Usage:%4<br/>%2Equip a %3HuntIR Monitor%4 and compatible ammunition.<br/>%2Fire the %3HuntIR Round%4 as high as possible over the area you want to observe.<br/>%2Open the %3HuntIR Monitor%4.<br/>%2Use [%3%12%4], select %3Equipment%4.<br/>%2Select %3Activate HuntIR Monitor%4. @@ -483,6 +508,7 @@ 은신하여 팀을 찾아냅니다 自分の部隊を追う Следите за своей командой незаметно + Suivez votre équipe en toute discrétion The %3IR Strobe%4 is a throwable that emits an IR light pulse intermittently. The %3IR Strobe%4 can also be attached to a soldier, making it useful for tracking teammates under night vision devices.<br/><br/>%3Usage:%4<br/>%2Use [%3%12%4] and select %3Equipment%4.<br/>%2Select %3Attach%4 and select the %3IR Strobe%4. @@ -574,6 +600,7 @@ 쉽게 견인을 할 수 있습니다 楽々けん引 Буксируйте с легкостью + Remorquer avec facilité %3Ropes%4 have multiple uses including %3Towing%4 vehicles and %3Fast Roping%4 from helicopters.<br/><br/>%3Towing:%4<br/>%2Approach a vehicle.<br/>%2Use [%3%13%4] and select %3Towing%4.<br/>%2Select rope length.<br/>%2Select attachment point on towing vehicle.<br/>%2Select attachment on towed vehicle.<br/><br/>%3Available Rope Lengths:%4<br/>%2 3.2 meters<br/>%2 6.2 meters<br/>%2 12.2 meters<br/>%2 15.2 meters<br/>%2 18.3 meters<br/>%2 27.4 meters<br/>%2 36.6 meters @@ -589,6 +616,7 @@ 당신의 요새를 확장합니다 要塞を拡張する Расширить свои укрепления + Élargissez vos fortifications %3Sandbags%4 are sacks made of sturdy material, filled with sand, used for a variety of purposes such as creating barriers or providing stability in construction projects. Useful in expanding larger placed fortifications.<br/><br/>%3Usage:%4<br/>%2Equip a %3Sandbag (Empty)%4.<br/>%2Use [%3%12%4] and select %3Deploy Sandbag%4.<br/>%2Follow on-screen instructions for placement. @@ -604,6 +632,7 @@ 총기의 온도를 낮춥니다 銃の熱を冷ます Понизьте температуру оружия + Refroidir l'arme %3Spare Barrels%4 allow a soldier to reduce their weapon's heat significantly. After a short delay, the weapon's barrel will be swapped and its heat reduced. A soldier may also check the temperature of any barrels within their inventory. Not all weapons support swapping barrels.<br/><br/>%3Usage:%4<br/>%2Use [%3%12%4] and select %3Equipment%4.<br/>%2Select %3Swap Barrel%4.<br/>%2Resume operation after barrel swap is complete. @@ -619,6 +648,7 @@ 스프레이 페인트 ペイントスプレー Аэрозольная краска + Bombe de peinture Tag Your Territory @@ -627,6 +657,7 @@ 당신의 영역을 지정합니다 自分のテリトリーをマーキング Пометьте свою территорию + Marquez votre territoire %3Spray Paint%4 is used to tag surfaces with various symbols.<br/><br/>%3Usage:%4<br/>%2Move close to a surface (wall, vehicle, ground, etc).<br/>%2Use [%3%12%4] and select %3Tag%4.<br/>%2Choose a symbol.<br/><br/>%3Available Colors:%4<br/>%2Black<br/>%2Blue<br/>%2Green<br/>%2Red @@ -642,6 +673,7 @@ 어느 곳에나 지지대를 배치할 수 있습니다 どこでも支持器 Опора может быть установлена в любом месте + Stabilisé partout The %3SSWT Kit%4 is a deployable tripod that allows a soldier to brace their aim when deployed. Use it when you need an elevated shooting position and there are no other objects around.<br/><br/>%3Usage:%4<br/>%2Use [%3%12%4] and select %3Equipment%4.<br/>%2Select %3SSWT Kit%4 and follow the on screen prompts to place. @@ -657,6 +689,7 @@ 하늘에서 계속 내려다봅니다 空の目を維持する Не Отрывай Глаз От Неба + Gardez les yeux au ciel %3UAV Batteries%4 are used to recharge a UAV's energy storage. Especially useful for small UAVs.<br/><br/>%3Usage:%4<br/>%2Equip a %3UAV Battery%4<br/>%2Approach a %3UAV%4 with its %3Engine Off%4.<br/>%2Use [%3%13%4] and select %3Recharge%4. @@ -703,6 +736,15 @@ ACE3 ACE 3 ACE3 + ACE3 + ACE3 + ACE3 + ACE3 + ACE3 + ACE3 + ACE3 + ACE3 + ACE3 Build Fortifications @@ -711,6 +753,7 @@ 요새를 건설합니다 要塞を構築する Стройте укрепления + Construire des fortifications The %3Fortify Tool%4 allows soldiers to build fortifications provided by their mission creator.<br/><br/>%3Usage:%4<br/>%2Pick up a %3Fortify Tool%4.<br/>%2Use [%3%12%4] and select %3Fortify%4.<br/>%2Select an available fortification and follow the on screen prompts for placement. @@ -726,6 +769,7 @@ 침입용 도구입니다 破壊して乗り込む Взлом и проникновение + Entrée par effraction %3Lockpicks%4 are used to gain access to locked vehicles.<br/><br/>%3Usage:%4<br/>%2Equip a %3Lockpick%4.<br/>%2Approach a %3Locked%4 vehicle.<br/>Use [%3%13%4] and select %3Lockpick Vehicle%4.<br/><br/><t underline='1'>%3Note:%4</t> Lockpicks and keys are only available via scripting or ACE Vehicle Key modules. diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index 2ebc038a4b..58d0bfa05d 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -369,6 +369,7 @@ Вставить/вынуть беруши Metti/Togli tappi 귀마개 토글 + Mettre/enlever les bouchons diff --git a/addons/killtracker/stringtable.xml b/addons/killtracker/stringtable.xml index 9c0f410e63..8bc6ab13a2 100644 --- a/addons/killtracker/stringtable.xml +++ b/addons/killtracker/stringtable.xml @@ -8,6 +8,7 @@ ACE Отслеживание убийств ACE キルトラッカー ACE 킬트래커 + ACE Suivi des morts ACE Killed Events diff --git a/addons/medical_gui/stringtable.xml b/addons/medical_gui/stringtable.xml index 3b18ede459..6d7e819b29 100644 --- a/addons/medical_gui/stringtable.xml +++ b/addons/medical_gui/stringtable.xml @@ -1365,6 +1365,7 @@ Mostrar estado de sangramento 出血状態の表示 출혈 상태 표시 + Afficher l'état des saignements Display if the patient is bleeding, optionally with rate @@ -1374,6 +1375,7 @@ Mostrar se o paciente está sangrando, opcionalmente com taxa 患者が出血しているかどうかを表示します。オプションで出血速度も表示します 환자가 출혈 중인지 여부를 표시합니다(선택적으로 출혈 속도 포함) + Indique si le patient saigne, éventuellement avec le taux de saignement Show Bleeding Rate @@ -1383,6 +1385,7 @@ Mostrar taxa de sangramento 出血速度の表示 출혈 속도 표시 + Afficher le taux de saignement Peek Medical Info on Hit diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml index 438778a6ad..4e186edc85 100644 --- a/addons/medical_treatment/stringtable.xml +++ b/addons/medical_treatment/stringtable.xml @@ -4981,6 +4981,7 @@ Zeus治療時間係数 제우스 치료 시간 계수 Коэффициент времени обработки Zeus + Coeff. de temps Multiply all treatment times with this coefficient when in Zeus. @@ -4989,6 +4990,7 @@ Zeus操作中は、すべての治療時間にこの係数を掛けます。 제우스일 때 모든 치료 시간에 이 계수를 곱합니다. Умножьте все время лечения на этот коэффициент, когда вы находитесь в Zeus. + Coefficient de temps de traitement Zeus Painkillers @@ -5012,6 +5014,7 @@ Испол-ть обезболивающие 鎮痛剤を投与 진통제 투여 + Administrer des analgésiques Administering Painkillers... @@ -5019,6 +5022,7 @@ Использование обезболивающего... 鎮痛剤を投与しています・・・ 진통제 투여 중... + Administration d'analgésiques... Over-the-counter analgesic used to combat light to moderate pain experiences. @@ -5026,6 +5030,7 @@ Безрецептурный анальгетик, используемый для борьбы с легкими и умеренными болевыми ощущениями. 軽度から中程度の痛みに対処するために使用される市販の鎮痛薬。 가벼운 통증부터 중간 정도의 통증을 퇴치하는 데 사용되는 일반의약품 진통제입니다. + Analgésique sans ordonnance utilisé pour lutter contre les douleurs légères à modérées. Over-the-counter analgesic used to combat light to moderate pain experiences. @@ -5033,6 +5038,7 @@ Безрецептурный анальгетик, используемый для борьбы с легкими и умеренными болевыми ощущениями. 軽度から中程度の痛みに対処するために使用される市販の鎮痛薬。 가벼운 통증부터 중간 정도의 통증을 퇴치하는 데 사용되는 일반의약품 진통제입니다. + Analgésique sans ordonnance utilisé pour lutter contre les douleurs légères à modérées. diff --git a/addons/medical_vitals/stringtable.xml b/addons/medical_vitals/stringtable.xml index 37368655e2..eb0080bd07 100644 --- a/addons/medical_vitals/stringtable.xml +++ b/addons/medical_vitals/stringtable.xml @@ -8,6 +8,7 @@ Жизненно-важные органы バイタル 생명 + Paramètres vitaux Enable SpO2 Simulation @@ -15,6 +16,7 @@ Включить имитацию SpO2 SpO2シミュレーションを有効化 산소포화도 시뮬레이션 활성화 + Activer la simulation de la SpO2 Enables oxygen saturation simulation, providing variable heart rate and oxygen demand based on physical activity and altitude. Required for Airway Management. @@ -22,6 +24,7 @@ Позволяет имитировать насыщение кислородом, обеспечивая переменную частоту сердечных сокращений и потребность в кислороде в зависимости от физической активности и высоты над уровнем моря. Требуется для управления дыхательными путями. 酸素飽和度シミュレーションを有効にし、身体活動や標高に基づいて変動する心拍数と酸素要求量の機能を提供します。 気道管理に必要です。 산소포화도 시뮬레이션을 활성화하여 신체 활동과 고도에 따라 다양한 심박수와 산소 요구량을 제공합니다. 기도 관리에 필요합니다. + Permet de simuler la saturation en oxygène, de modifier la fréquence cardiaque et la consommation d'oxygène en fonction de l'activité physique et de l'altitude. Nécessaire pour la gestion des voies respiratoires. diff --git a/addons/overheating/stringtable.xml b/addons/overheating/stringtable.xml index ba662bf684..48399b443c 100644 --- a/addons/overheating/stringtable.xml +++ b/addons/overheating/stringtable.xml @@ -881,6 +881,7 @@ 遊底(ボルト)形式 노리쇠 방식 Тип болта + Type d'obturateur Open Bolt @@ -888,6 +889,7 @@ オープンボルト 오픈 볼트 Открыть болт + Obturateur ouvert Closed Bolt @@ -895,6 +897,7 @@ クローズドボルト 클로즈드 볼트 Закрыть болт + Obturateur fermé Barrel Type @@ -902,6 +905,7 @@ 銃身形式 총열 방식 Тип ствола + Type de canon Non-Removeable @@ -909,6 +913,7 @@ 取り外し不可 제거 불가 Несъемный + Inamovible Quick Change @@ -916,6 +921,7 @@ 即時交換可 신속 교체 Быстросъемный + Changement rapide diff --git a/addons/refuel/stringtable.xml b/addons/refuel/stringtable.xml index dc61a2c168..41a8c5254e 100644 --- a/addons/refuel/stringtable.xml +++ b/addons/refuel/stringtable.xml @@ -505,6 +505,7 @@ 燃料キャニスターを持つ 연료통 집어들기 Взять канистру с топливом + Ramasser le réservoir de carburant Picking fuel canister up... @@ -513,6 +514,7 @@ 燃料キャニスターを持ち上げています・・・ 연료통 집어드는 중... Поднимаю канистру с топливом... + Ramasser les bidons de carburant... Connect fuel canister @@ -521,6 +523,7 @@ 燃料キャニスターを接続する 연료통 꽂기 Подсоединить канистру с топливом + Raccorder le réservoir de carburant Connecting fuel canister... @@ -529,6 +532,7 @@ 燃料キャニスターを接続しています・・・ 연료통 꽂는 중... Подсоединение топливной канистры... + Raccorder le réservoir de carburant... Disconnect fuel canister @@ -537,6 +541,7 @@ 燃料キャニスターを外します 연료통 빼기 Отсоединить канистру с топливом + Débrancher le réservoir de carburant Refuel hose length diff --git a/addons/zeus/stringtable.xml b/addons/zeus/stringtable.xml index bb78c86c1a..8b3aaed92c 100644 --- a/addons/zeus/stringtable.xml +++ b/addons/zeus/stringtable.xml @@ -1321,6 +1321,7 @@ 貨物室から降ろす 화물 내리기 Выгрузить из отсека + Décharger de la cargaison Toggle NVGs @@ -1966,6 +1967,7 @@ 医療メニューは無効になっています 의료 메뉴가 비활성화되었습니다 Медицинское меню отключено + Le Menu médical est désactivé Lay Trenchline From 558849b91ce10430aabb8b4273d393759c6b1101 Mon Sep 17 00:00:00 2001 From: Sotirios Pupakis Date: Wed, 3 Apr 2024 22:47:51 +0200 Subject: [PATCH 070/132] Interaction - Add door events (#9910) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Jouni Järvinen --- addons/interaction/functions/fnc_openDoor.sqf | 10 ++++++++-- docs/wiki/framework/events-framework.md | 10 +++++++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/addons/interaction/functions/fnc_openDoor.sqf b/addons/interaction/functions/fnc_openDoor.sqf index 540712ef41..2afb438a60 100644 --- a/addons/interaction/functions/fnc_openDoor.sqf +++ b/addons/interaction/functions/fnc_openDoor.sqf @@ -63,8 +63,11 @@ GVAR(doorTargetPhase) = _house animationPhase (_animations select 0); GVAR(isOpeningDoor) = true; GVAR(usedScrollWheel) = false; +// Raise local started opening event +[QGVAR(doorOpeningStarted), [_house, _door, _animations]] call CBA_fnc_localEvent; + [{ - (_this select 0) params ["_house", "_animations", "_position", "_time", "_frame"]; + (_this select 0) params ["_house", "_animations", "_position", "_time", "_frame", "_door"]; if !(GVAR(isOpeningDoor)) exitWith { [_this select 1] call CBA_fnc_removePerFrameHandler; @@ -75,6 +78,9 @@ GVAR(usedScrollWheel) = false; {_house animate [_x, _phase]; false} count _animations; }; + + // Raise local stopped opening event + [QGVAR(doorOpeningStopped), [_house, _door, _animations]] call CBA_fnc_localEvent; }; // check if player moved too far away @@ -88,4 +94,4 @@ GVAR(usedScrollWheel) = false; }; // do incremental door opening {_house animate [_x, GVAR(doorTargetPhase)]; false} count _animations; -}, 0.1, [_house, _animations, getPosASL ACE_player, CBA_missionTime + 0.2, diag_frameno + 2]] call CBA_fnc_addPerFrameHandler; +}, 0.1, [_house, _animations, getPosASL ACE_player, CBA_missionTime + 0.2, diag_frameno + 2, _door]] call CBA_fnc_addPerFrameHandler; diff --git a/docs/wiki/framework/events-framework.md b/docs/wiki/framework/events-framework.md index d8d8674218..37daa148fc 100644 --- a/docs/wiki/framework/events-framework.md +++ b/docs/wiki/framework/events-framework.md @@ -146,6 +146,14 @@ MenuType: 0 = Interaction, 1 = Self Interaction |---------- |------------|----------|------|-------------| | `ace_medical_treatment_fullHealLocalMod` | [_patient] | Local | Listen | Called before a local unit is fully healed, mods can listen and apply their own healing logic +### 2.15 Interaction (`ace_interaction`) + +| Event Key | Parameters | Locality | Type | Description | +|---------- |------------|----------|------|-------------| +|---------- |------------|----------|------|-------------| +| `ace_interaction_doorOpeningStarted` | [_house, _door, _animations] | Local | Listen | Called when local unit starts interacting with doors +| `ace_interaction_doorOpeningStopped` | [_house, _door, _animations] | Local | Listen | Called when local unit stopps interacting with doors + ## 3. Usage Also Reference [CBA Events System](https://github.com/CBATeam/CBA_A3/wiki/Custom-Events-System){:target="_blank"} documentation. @@ -263,4 +271,4 @@ Calls a globally synchronized event, which will also be run on JIP players unles // Event called on another machine (tapping above target machine) ["ace_interact_tapShoulder", [arguments], [target]] call CBA_fnc_targetEvent; -``` +``` \ No newline at end of file From a72b3a43a53ab79b0f73c4491acb9b07998c6be0 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Wed, 3 Apr 2024 23:53:12 +0200 Subject: [PATCH 071/132] Arsenal - Fix `FUNC(baseAttachment)` returning non-CBA item modes (#9916) Update fnc_baseAttachment.sqf --- addons/arsenal/functions/fnc_baseAttachment.sqf | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/addons/arsenal/functions/fnc_baseAttachment.sqf b/addons/arsenal/functions/fnc_baseAttachment.sqf index 2cee699ba6..cf0cbde134 100644 --- a/addons/arsenal/functions/fnc_baseAttachment.sqf +++ b/addons/arsenal/functions/fnc_baseAttachment.sqf @@ -26,6 +26,14 @@ private _cfgWeapons = configfile >> "CfgWeapons"; private _config = _cfgWeapons >> _item; _item = configName _config; +// If the switch config entries are inherited, ignore +if ( + (inheritsFrom (_config >> "MRT_SwitchItemNextClass") isNotEqualTo (_config >> "MRT_SwitchItemNextClass")) || + {inheritsFrom (_config >> "MRT_SwitchItemPrevClass") isNotEqualTo (_config >> "MRT_SwitchItemPrevClass")} +) exitWith { + _item // return +}; + while { _config = _cfgWeapons >> getText (_config >> "MRT_SwitchItemNextClass"); isClass _config && {_switchableClasses pushBackUnique configName _config != -1} From e6cc5fca89af6c7a989e05d20ae0fafc0a98fb30 Mon Sep 17 00:00:00 2001 From: Grim <69561145+LinkIsGrim@users.noreply.github.com> Date: Wed, 3 Apr 2024 19:46:26 -0300 Subject: [PATCH 072/132] Arsenal - Handle arrays in loadout extended info (#9918) --- addons/arsenal/functions/fnc_verifyLoadout.sqf | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/addons/arsenal/functions/fnc_verifyLoadout.sqf b/addons/arsenal/functions/fnc_verifyLoadout.sqf index 53e7221e3a..10cd9a2553 100644 --- a/addons/arsenal/functions/fnc_verifyLoadout.sqf +++ b/addons/arsenal/functions/fnc_verifyLoadout.sqf @@ -22,6 +22,10 @@ private _extendedInfo = createHashMap; // Check if the provided loadout is a CBA extended loadout if (count _loadout == 2) then { _extendedInfo = +(_loadout select 1); // Copy the hashmap to prevent events from modifiyng the profileNamespace extendedInfo + if (_extendedInfo isEqualType []) then { // Hashmaps are serialized as arrays, convert back to hashmap + _extendedInfo = createHashMapFromArray _extendedInfo; + _loadout set [1, _extendedInfo]; // Also fix source variable, technically not needed but doesn't hurt + }; _loadout = _loadout select 0; }; From 0d401b26649f521d33ec4f31e4b3aa08f415f9b1 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Thu, 4 Apr 2024 13:01:12 +0200 Subject: [PATCH 073/132] Headless - Code optimisation (#9873) * Headless optimisations * Swapped blacklist for unitIsUAV check * Moved UAV check * Update addons/headless/functions/fnc_transferGroups.sqf Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> * Update addons/headless/functions/fnc_transferGroups.sqf Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> * Update fnc_transferGroups.sqf --------- Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> --- addons/headless/XEH_postInit.sqf | 4 ++-- addons/headless/XEH_preInit.sqf | 1 - .../headless/functions/fnc_handleConnectHC.sqf | 7 ++----- .../headless/functions/fnc_handleDisconnect.sqf | 8 +++----- addons/headless/functions/fnc_handleSpawn.sqf | 17 ++++++----------- addons/headless/functions/fnc_rebalance.sqf | 2 +- .../headless/functions/fnc_transferGroups.sqf | 12 +++++++----- addons/headless/initSettings.inc.sqf | 16 +++++++--------- addons/headless/script_component.hpp | 1 - 9 files changed, 28 insertions(+), 40 deletions(-) diff --git a/addons/headless/XEH_postInit.sqf b/addons/headless/XEH_postInit.sqf index 63c7fd5038..d1c76a332b 100644 --- a/addons/headless/XEH_postInit.sqf +++ b/addons/headless/XEH_postInit.sqf @@ -1,12 +1,12 @@ #include "script_component.hpp" -["ace_settingsInitialized", { +["CBA_settingsInitialized", { // Register and remove HCs if not client that is not server and distribution or end mission enabled if ((!hasInterface || isServer) && {XGVAR(enabled) || XGVAR(endMission) != 0}) then { if (isServer) then { // Request rebalance on any unit spawn (only if distribution enabled) if (XGVAR(enabled)) then { - ["AllVehicles", "initPost", LINKFUNC(handleSpawn), nil, nil, true] call CBA_fnc_addClassEventHandler; + ["CAManBase", "initPost", LINKFUNC(handleSpawn), nil, nil, true] call CBA_fnc_addClassEventHandler; }; // Add disconnect EH addMissionEventHandler ["HandleDisconnect", {call FUNC(handleDisconnect)}]; diff --git a/addons/headless/XEH_preInit.sqf b/addons/headless/XEH_preInit.sqf index d3b2c8ff5c..c51b62cf57 100644 --- a/addons/headless/XEH_preInit.sqf +++ b/addons/headless/XEH_preInit.sqf @@ -12,7 +12,6 @@ if (isServer) then { GVAR(headlessClients) = []; GVAR(inRebalance) = false; GVAR(endMissionCheckDelayed) = false; - GVAR(blacklistType) = [BLACKLIST_UAV]; [QXGVAR(headlessClientJoined), LINKFUNC(handleConnectHC)] call CBA_fnc_addEventHandler; }; diff --git a/addons/headless/functions/fnc_handleConnectHC.sqf b/addons/headless/functions/fnc_handleConnectHC.sqf index b19ef25012..e5acaf48fc 100644 --- a/addons/headless/functions/fnc_handleConnectHC.sqf +++ b/addons/headless/functions/fnc_handleConnectHC.sqf @@ -19,17 +19,14 @@ params ["_headlessClient"]; // Exit if HC already registered // No need to check if distribution or end mission enabled, as if disabled this will never run -if (_headlessClient in GVAR(headlessClients)) exitWith {}; - -// Register for use -GVAR(headlessClients) pushBack _headlessClient; +if (GVAR(headlessClients) pushBackUnique _headlessClient == -1) exitWith {}; if (XGVAR(log)) then { INFO_1("Registered HC: %1",_headlessClient); }; // Exit if AI distribution is disabled -if (!XGVAR(enabled)) exitWith {true}; +if (!XGVAR(enabled)) exitWith {}; // Rebalance [true] call FUNC(rebalance); diff --git a/addons/headless/functions/fnc_handleDisconnect.sqf b/addons/headless/functions/fnc_handleDisconnect.sqf index c94cec2599..a18f22a3bd 100644 --- a/addons/headless/functions/fnc_handleDisconnect.sqf +++ b/addons/headless/functions/fnc_handleDisconnect.sqf @@ -17,7 +17,7 @@ */ params ["_object"]; -TRACE_1("HandleDisconnect",_this); +TRACE_1("HandleDisconnect",_object); // Exit if not HC if !(_object in GVAR(headlessClients)) exitWith { @@ -28,9 +28,7 @@ if !(_object in GVAR(headlessClients)) exitWith { if (CBA_missionTime < 150) then { TRACE_1("Mission start delay",CBA_missionTime); GVAR(endMissionCheckDelayed) = true; - [{ - call FUNC(endMissionNoPlayers); - }, [], 150 - CBA_missionTime] call CBA_fnc_waitAndExecute; + [LINKFUNC(endMissionNoPlayers), [], 150 - CBA_missionTime] call CBA_fnc_waitAndExecute; } else { // End instantly or after delay if (XGVAR(endMission) == 1) then { @@ -39,7 +37,7 @@ if !(_object in GVAR(headlessClients)) exitWith { } else { TRACE_2("Delayed 60s end",GVAR(endMission),CBA_missionTime); GVAR(endMissionCheckDelayed) = true; - [FUNC(endMissionNoPlayers), [], 60] call CBA_fnc_waitAndExecute; + [LINKFUNC(endMissionNoPlayers), [], 60] call CBA_fnc_waitAndExecute; }; }; }; diff --git a/addons/headless/functions/fnc_handleSpawn.sqf b/addons/headless/functions/fnc_handleSpawn.sqf index 50277e3845..56b74f407d 100644 --- a/addons/headless/functions/fnc_handleSpawn.sqf +++ b/addons/headless/functions/fnc_handleSpawn.sqf @@ -4,27 +4,22 @@ * Handles AI spawn and requests a rebalance if applicable. * * Arguments: - * 0: Object + * 0: Unit * * Return Value: * None * * Example: - * [object] call ace_headless_fnc_handleSpawn + * [cursorObject] call ace_headless_fnc_handleSpawn * * Public: No */ -params ["_object"]; -TRACE_1("Spawn",_object); +params ["_unit"]; +TRACE_1("Spawn",_unit); -// Exit if HC transferring disabled or object not a unit (including unit inside vehicle) or is player -if (!(_object in allUnits) || {isPlayer _object}) exitWith {}; - -// Exit and blacklist if of blacklist type -if ({_object isKindOf _x} count GVAR(blacklistType) > 0) exitWith { - _object setVariable [QXGVAR(blacklist), true]; -}; +// Exit if unit is player or UAV crew +if (isPlayer _unit || {unitIsUAV _unit}) exitWith {}; // Rebalance [false] call FUNC(rebalance); diff --git a/addons/headless/functions/fnc_rebalance.sqf b/addons/headless/functions/fnc_rebalance.sqf index 84be441ebe..5ec32f39bd 100644 --- a/addons/headless/functions/fnc_rebalance.sqf +++ b/addons/headless/functions/fnc_rebalance.sqf @@ -23,7 +23,7 @@ TRACE_3("Rebalance",GVAR(inRebalance),GVAR(headlessClients),_force); if (GVAR(inRebalance) || {GVAR(headlessClients) isEqualTo []}) exitWith {}; // Transfer after rebalance delay -[FUNC(transferGroups), [_force], XGVAR(Delay)] call CBA_fnc_waitAndExecute; +[LINKFUNC(transferGroups), _force, XGVAR(delay)] call CBA_fnc_waitAndExecute; // Currently in rebalance flag GVAR(inRebalance) = true; diff --git a/addons/headless/functions/fnc_transferGroups.sqf b/addons/headless/functions/fnc_transferGroups.sqf index 37580c4fff..60d3c093d1 100644 --- a/addons/headless/functions/fnc_transferGroups.sqf +++ b/addons/headless/functions/fnc_transferGroups.sqf @@ -79,8 +79,8 @@ private _numTransferredHC3 = 0; _transfer = false; }; - // No transfer if player in this group - if (isPlayer _x) exitWith { + // No transfer if player or UAV in this group + if (isPlayer _x || {unitIsUAV _x}) exitWith { _transfer = false; }; @@ -89,14 +89,16 @@ private _numTransferredHC3 = 0; _transfer = false; }; - // No transfer if vehicle unit is in or crew in that vehicle is blacklisted - if (vehicle _x != _x && {(vehicle _x) getVariable [QXGVAR(blacklist), false]}) exitWith { + private _vehicle = objectParent _x; + + // No transfer if the vehicle the unit is in or if the crew in that vehicle is blacklisted + if ((_vehicle getVariable [QXGVAR(blacklist), false]) || {unitIsUAV _vehicle}) exitWith { _transfer = false; }; // Save gear if unit about to be transferred with current loadout (naked unit work-around) if (XGVAR(transferLoadout) == 1) then { - _x setVariable [QGVAR(loadout), [_x] call CBA_fnc_getLoadout, true]; + _x setVariable [QGVAR(loadout), _x call CBA_fnc_getLoadout, true]; }; } forEach (units _x); }; diff --git a/addons/headless/initSettings.inc.sqf b/addons/headless/initSettings.inc.sqf index cb5fe6e53d..d00cb6eb30 100644 --- a/addons/headless/initSettings.inc.sqf +++ b/addons/headless/initSettings.inc.sqf @@ -4,7 +4,7 @@ [ELSTRING(common,Enabled), LSTRING(EnabledDesc)], format ["ACE %1", LLSTRING(Module)], false, - true, + 1, {[QGVAR(enabled), _this] call EFUNC(common,cbaSettings_settingChanged)}, true ] call CBA_fnc_addSetting; @@ -15,9 +15,8 @@ [LSTRING(Delay), LSTRING(DelayDesc)], format ["ACE %1", LLSTRING(Module)], [0, 60, 15, -1], - true, - {[QGVAR(delay), _this] call EFUNC(common,cbaSettings_settingChanged)}, - true + 1, + {[QGVAR(delay), _this] call EFUNC(common,cbaSettings_settingChanged)} ] call CBA_fnc_addSetting; [ @@ -26,7 +25,7 @@ [LSTRING(EndMission), LSTRING(EndMissionDesc)], format ["ACE %1", LLSTRING(Module)], [[0, 1, 2], [ELSTRING(Common,Disabled), LSTRING(Instant), LSTRING(Delayed)], 0], - true, + 1, {[QGVAR(delay), _this] call EFUNC(common,cbaSettings_settingChanged)}, true ] call CBA_fnc_addSetting; @@ -37,9 +36,8 @@ [LSTRING(Log), LSTRING(LogDesc)], format ["ACE %1", LLSTRING(Module)], false, - true, - {[QGVAR(enabled), _this] call EFUNC(common,cbaSettings_settingChanged)}, - true + 1, + {[QGVAR(enabled), _this] call EFUNC(common,cbaSettings_settingChanged)} ] call CBA_fnc_addSetting; [ @@ -48,7 +46,7 @@ [LSTRING(TransferLoadout), LSTRING(TransferLoadoutDesc)], format ["ACE %1", LLSTRING(Module)], [[0, 1, 2], [ELSTRING(Common,Disabled), LSTRING(TransferLoadoutCurrent), LSTRING(TransferLoadoutConfig)], 0], - true, + 1, {}, true // needs mission restart ] call CBA_fnc_addSetting; diff --git a/addons/headless/script_component.hpp b/addons/headless/script_component.hpp index c73e2260de..73761a7bb1 100644 --- a/addons/headless/script_component.hpp +++ b/addons/headless/script_component.hpp @@ -17,4 +17,3 @@ #include "\z\ace\addons\main\script_macros.hpp" #define DELAY_DEFAULT 15 -#define BLACKLIST_UAV "UAV", "UAV_AI_base_F", "B_UAV_AI", "O_UAV_AI", "I_UAV_AI" From d312792631bfb74e638c50da0ae364fccb80bc75 Mon Sep 17 00:00:00 2001 From: Hexo <130893962+Alfred-Neuman@users.noreply.github.com> Date: Thu, 4 Apr 2024 13:01:24 +0200 Subject: [PATCH 074/132] Translation - French (#9919) * Translate French * Update stringtable.xml Translate - FR * Translate - French * Translate - French - overheating * Translate -French - compat_sog * Update stringtable.xml * Translate - French * Fix - Translate French Minor correction * Update Translate French * Update French * Update - french * Transalte French fieldmanual * Translate French compat_cup_weapons_cws * Update translate --- addons/advanced_throwing/stringtable.xml | 2 ++ addons/arsenal/stringtable.xml | 2 ++ .../compat_cup_weapons_csw/stringtable.xml | 11 +++++++ .../stringtable.xml | 2 ++ .../compat_rhs_usf3_csw/stringtable.xml | 12 +++++++ .../compat_ws_realisticnames/stringtable.xml | 25 +++++++++++++++ addons/field_rations/stringtable.xml | 32 +++++++++++++++++++ addons/fieldmanual/stringtable.xml | 17 ++++++++++ addons/killtracker/stringtable.xml | 2 ++ addons/maptools/stringtable.xml | 18 +++++++++++ addons/viewdistance/stringtable.xml | 1 + 11 files changed, 124 insertions(+) diff --git a/addons/advanced_throwing/stringtable.xml b/addons/advanced_throwing/stringtable.xml index a63e1e8918..7676464474 100644 --- a/addons/advanced_throwing/stringtable.xml +++ b/addons/advanced_throwing/stringtable.xml @@ -191,6 +191,7 @@ Mostra informazioni sul vento temporaneamente 一時的に風の情報を表示 바람 정보 임시로 표시 + Afficher temporairement les informations sur le vent Temporarily display Wind Info while throwing, to aid in placing smoke grenades effectively. @@ -198,6 +199,7 @@ Mostra le informazioni sul vento durante il lancio di granate, facilitando il piazzamento ottimale di fumogeni. 投擲行動中に風向きの情報を一時的に表示し、発煙手榴弾の煙幕を効果的に展開しやすくします。 연막탄을 효과적으로 배치하는 데 도움이 되도록 투척하는 동안 일시적으로 바람 정보를 표시합니다. + Affiche les informations sur le vent pendant le lancement pour placer les grenades fumigènes plus efficacement. Prepare/Change Throwable diff --git a/addons/arsenal/stringtable.xml b/addons/arsenal/stringtable.xml index 39f7936d58..02c35266db 100644 --- a/addons/arsenal/stringtable.xml +++ b/addons/arsenal/stringtable.xml @@ -1244,6 +1244,7 @@ 熱画像装置内蔵 Интегрирован тепловизор. 열화상 내장 + Thermique intégrée Thermal & Primary integrated @@ -1251,6 +1252,7 @@ 熱画像装置内蔵・プライマリに内蔵 Интегрирован тепловизор и осн.прицел. 열화상과 주무기 내장 + Thermique et primaire intégrés Not Supported diff --git a/addons/compat_cup_weapons/compat_cup_weapons_csw/stringtable.xml b/addons/compat_cup_weapons/compat_cup_weapons_csw/stringtable.xml index 0e88b468ca..a23cf87af0 100644 --- a/addons/compat_cup_weapons/compat_cup_weapons_csw/stringtable.xml +++ b/addons/compat_cup_weapons/compat_cup_weapons_csw/stringtable.xml @@ -42,66 +42,77 @@ [CSW] M1 榴弾 [CSW] M1 HE [CSW] M1 고폭탄 + [CSW] M1 HE [CSW] M84 Smoke [CSW] M84 白煙弾 [CSW] M84 Дымовая [CSW] M84 연막탄 + [CSW] M84 Fumigène [CSW] M60A2 WP [CSW] M60A2 白リン弾 [CSW] M60A2 WP [CSW] M60A2 백린연막탄 + [CSW] M60A2 WP [CSW] M67 AT Laser Guided [CSW] M67 対戦車レーザー誘導弾 [CSW] M67 AT Laser Guided [CSW] M67 레이저유도 대전차탄 + [CSW] M67 AT Guidé laser [CSW] M314 Illumination [CSW] M314 照明弾 [CSW] M314 Осветительная [CSW] M314 조명탄 + [CSW] M314 Illumination [CSW] 3OF56 HE [CSW] 3OF56 榴弾 [CSW] 3OF56 HE [CSW] 3OF56 고폭탄 + [CSW] 3OF56 HE [CSW] 3OF69M Laser Guided [CSW] 3OF69M レーザー誘導弾 [CSW] 3OF69M Laser Guided [CSW] 3OF69M 레이저유도탄 + [CSW] 3OF69M Guidé laser [CSW] 122mm WP [CSW] 122mm 白リン弾 [CSW] 122mm WP [CSW] 122mm 백린탄 + [CSW] 122mm WP [CSW] D-462 Smoke [CSW] D-462 白煙弾 [CSW] D-462 Дымовая [CSW] D-462 연막탄 + [CSW] D-462 Fumigène [CSW] S-463 Illumination [CSW] S-463 照明弾 [CSW] S-463 Осветительная [CSW] S-463 조명탄 + [CSW] S-463 Eclairante [CSW] BK-6M HEAT [CSW] BK-6M HEAT弾 [CSW] BK-6M HEAT [CSW] BK-6M 대전차고폭탄 + [CSW] BK-6M HEAT diff --git a/addons/compat_cup_weapons/compat_cup_weapons_nightvision/stringtable.xml b/addons/compat_cup_weapons/compat_cup_weapons_nightvision/stringtable.xml index f217bc1d2f..a52bea0e31 100644 --- a/addons/compat_cup_weapons/compat_cup_weapons_nightvision/stringtable.xml +++ b/addons/compat_cup_weapons/compat_cup_weapons_nightvision/stringtable.xml @@ -46,6 +46,7 @@ AN/PVS-15 (冬季迷彩, WP) AN/PVS-15 (설상, 백색광) AN/PVS-15 (Белый, БФ) + AN/PVS-15 (Blanc, WP) GPNVG (Black, WP) @@ -82,6 +83,7 @@ GPNVG (冬季迷彩, WP) GPNVG (설상, 백색광) AN/PVS-15 (Белый, БФ) + GPNVG (Blanc, WP) diff --git a/addons/compat_rhs_usf3/compat_rhs_usf3_csw/stringtable.xml b/addons/compat_rhs_usf3/compat_rhs_usf3_csw/stringtable.xml index bb185513a7..bc2413a2ca 100644 --- a/addons/compat_rhs_usf3/compat_rhs_usf3_csw/stringtable.xml +++ b/addons/compat_rhs_usf3/compat_rhs_usf3_csw/stringtable.xml @@ -10,6 +10,7 @@ [CSW] BGM-71A TOW [CSW] BGM-71A TOW [CSW] BGM-71A TOW + [CSW] BGM-71A TOW [CSW] BGM-71B TOW @@ -20,6 +21,7 @@ [CSW] BGM-71B TOW [CSW] BGM-71B TOW [CSW] BGM-71B TOW + [CSW] BGM-71B TOW [CSW] BGM-71C ITOW @@ -30,6 +32,7 @@ [CSW] BGM-71C ITOW [CSW] BGM-71C ITOW [CSW] BGM-71C ITOW + [CSW] BGM-71C ITOW [CSW] BGM-71D TOW-2 @@ -40,6 +43,7 @@ [CSW] BGM-71D TOW-2 [CSW] BGM-71D TOW-2 [CSW] BGM-71D TOW-2 + [CSW] BGM-71D TOW-2 [CSW] BGM-71E TOW-2A @@ -50,6 +54,7 @@ [CSW] BGM-71E TOW-2A [CSW] BGM-71E TOW-2A [CSW] BGM-71E TOW-2A + [CSW] BGM-71E TOW-2A [CSW] BGM-71F TOW-2B @@ -60,6 +65,7 @@ [CSW] BGM-71F TOW-2B [CSW] BGM-71F TOW-2B [CSW] BGM-71F TOW-2B + [CSW] BGM-71F TOW-2B [CSW] BGM-71F-3 TOW-2B AERO @@ -70,6 +76,7 @@ [CSW] BGM-71F-3 TOW-2B AERO [CSW] BGM-71F-3 TOW-2B AERO [CSW] BGM-71F-3 TOW-2B AERO + [CSW] BGM-71F-3 TOW-2B AERO [CSW] BGM-71H Bunker Buster @@ -80,6 +87,7 @@ [CSW] BGM-71H Anti-Búnquer [CSW] BGM-71H Bunker Buster [CSW] BGM-71H Anti-Bunker + [CSW] BGM-71H Bunker Buster [CSW] Mk. 19 40mm M384 HE @@ -90,6 +98,7 @@ [CSW] Mk. 19 40mm M384 HE [CSW] Mk. 19 40mm M384 HE [CSW] Mk. 19 40mm M384 HE + [CSW] Mk. 19 40mm M384 HE [CSW] Mk. 19 40mm M430I HEDP @@ -100,6 +109,7 @@ [CSW] Mk. 19 40mm M430I HEDP [CSW] Mk. 19 40mm M430I HEDP [CSW] Mk. 19 40mm M430I HEDP + [CSW] Mk. 19 40mm M430I HEDP [CSW] Mk. 19 40mm M430A1 HEDP @@ -110,6 +120,7 @@ [CSW] Mk. 19 40mm M430A1 HEDP [CSW] Mk. 19 40mm M430A1 HEDP [CSW] Mk. 19 40mm M430A1 HEDP + [CSW] Mk. 19 40mm M430A1 HEDP [CSW] Mk. 19 40mm M1001 Canister @@ -120,6 +131,7 @@ [CSW] Mk. 19 40mm M1001 Bote de metralla [CSW] Mk. 19 40mm M1001 Kanister [CSW] Mk. 19 40mm M1001 Pallettoni + [CSW] Mk. 19 40 mm M1001 Chevrotine diff --git a/addons/compat_ws/compat_ws_realisticnames/stringtable.xml b/addons/compat_ws/compat_ws_realisticnames/stringtable.xml index b38f1a867e..092fd2a9ea 100644 --- a/addons/compat_ws/compat_ws_realisticnames/stringtable.xml +++ b/addons/compat_ws/compat_ws_realisticnames/stringtable.xml @@ -8,6 +8,7 @@ AA12 AA12 AA12 + AA12 AA12 (Sand) @@ -16,6 +17,7 @@ AA12 (Sabbia) AA12 (サンド) AA12 (Песочный) + AA12 (Sable) AA12 (Snake) @@ -32,6 +34,7 @@ Galil ARM ガリル ARM Galil ARM + Galil ARM Galil ARM (Old) @@ -40,6 +43,7 @@ Galil ARM (Vecchio) ガリル ARM (使い古し) Galil ARM (Старый) + Galil ARM (Ancien) GLX 160 @@ -48,6 +52,7 @@ GLX-160 GLX 160 GLX 160 + GLX 160 GLX 160 (Snake) @@ -64,6 +69,7 @@ GLX-160 (Hex) GLX 160 (六角形迷彩) GLX 160 (Гекс) + GLX 160 (Hex) GLX 160 (Green Hex) @@ -72,6 +78,7 @@ GLX-160 (Hex Verde) GLX 160 (緑六角形迷彩) GLX 160 (Зеленый Гекс) + GLX 160 (Vert Hex) GLX 160 (Camo) @@ -80,6 +87,7 @@ GLX-160 (Mimetica) GLX 160 (迷彩) GLX 160 (Камуфляж) + GLX 160 (Camo) GLX 160 (Sand) @@ -88,6 +96,7 @@ GLX-160 (Sabbia) GLX 160 (サンド) GLX 160 (Песочный) + GLX 160 (Sable) Mk14 Mod 1 EBR (Black) @@ -96,6 +105,7 @@ Mk14 Mod 1 EBR (Nero) Mk14 Mod 1 EBR (ブラック) Mk14 Mod 1 EBR (Черный) + Mk14 Mod 1 EBR (Noir) Mk14 Mod 1 EBR (Snake) @@ -111,6 +121,7 @@ Vektor SS-77 ヴェクター SS-77 Vektor SS-77 + Vektor SS-77 Vektor SS-77 (Camo) @@ -119,6 +130,7 @@ Vektor SS-77 (Mimetica) ヴェクター SS-77 (迷彩) Vektor SS-77 (Камуфляж) + Vektor SS-77 (Camo) Vektor SS-77 (Hex) @@ -127,6 +139,7 @@ Vektor SS-77 (Hex) ヴェクター SS-77 (六角形迷彩) Vektor SS-77 (гекс) + Vektor SS-77 (Hex) Vektor SS-77 (Green Hex) @@ -135,6 +148,7 @@ Vektor SS-77 (Hex Verde) ヴェクター SS-77 (緑六角形迷彩) Vektor SS-77 (зеленый гекс) + Vektor SS-77 (VertHex) Vektor SS-77 (Desert) @@ -143,6 +157,7 @@ Vektor SS-77 (Deserto) ヴェクター SS-77 (砂漠迷彩) Vektor SS-77 (песочныйt) + Vektor SS-77 (Désert) Vektor SS-77 Compact @@ -151,6 +166,7 @@ Vektor SS-77 Compatto ヴェクター SS-77 コンパクト Vektor SS-77 Compact + Vektor SS-77 Compacte Vektor SS-77 Compact (Snake) @@ -167,6 +183,7 @@ FN FAL 50.00 (Legno) FN FAL 50.00 (森林迷彩) FN FAL 50.00 (лесной) + FN FAL 50.00 (Bois) FN FAL 50.00 GL (Wood) @@ -175,6 +192,7 @@ FN FAL 50.00 GL (Legno) FN FAL 50.00 GL (森林迷彩) FN FAL 50.00 GL (лесной) + FN FAL 50.00 GL (Bois) FN FAL 50.00 @@ -183,6 +201,7 @@ FN FAL 50.00 FN FAL 50.00 FN FAL 50.00 + FN FAL 50.00 FN FAL 50.00 GL @@ -191,6 +210,7 @@ FN FAL 50.00 GL FN FAL 50.00 GL FN FAL 50.00 GL + FN FAL 50.00 GL FN FAL 50.00 (Desert) @@ -199,6 +219,7 @@ FN FAL 50.00 (Deserto) FN FAL 50.00 (砂漠迷彩) FN FAL 50.00 (песочный) + FN FAL 50.00 (Désert) FN FAL 50.00 (Jungle) @@ -207,6 +228,7 @@ FN FAL 50,00 (Giungla) FN FAL 50.00 (熱帯迷彩) FN FAL 50.00 (джунгли) + FN FAL 50.00 (Jungle) Vektor R4 @@ -215,6 +237,7 @@ Vektor R4 ヴェクター R5 Vektor R4 + Vektor R4 Vektor R5 Carbine @@ -223,6 +246,7 @@ Vektor R5 Carabina ヴェクター R5 カービン Vektor R5 Carbine + Vektor R5 Carbine Vektor R5 Carbine GL @@ -231,6 +255,7 @@ Vektor R5 Carabina GL ヴェクター R5 カービン GL Vektor R5 Carbine GL + Vektor R5 Carbine GL Vektor R5 Carbine (Snake) diff --git a/addons/field_rations/stringtable.xml b/addons/field_rations/stringtable.xml index bd8eb3f97f..482f347598 100644 --- a/addons/field_rations/stringtable.xml +++ b/addons/field_rations/stringtable.xml @@ -266,6 +266,7 @@ 다시 채우기만 가능 Sólo rellenar Apenas reabastecer + Remplissage uniquement Terrain Object Actions @@ -279,6 +280,7 @@ 지형 물체 상호작용 Acciones sobre objetos del terreno Ações para objetos do terreno + Actions sur les objets du terrain Enables water source actions for terrain objects. @@ -292,6 +294,7 @@ 지형 물체에서 물을 얻는 게 가능해집니다. Habilitar acciones de suministros de agua para los objetos en el suelo. Habilita ações para suprimentos de água para objetos do terreno. + Active les actions relatives aux sources d'eau pour les objets de terrain. Affect Advanced Fatigue @@ -306,6 +309,7 @@ 고급 피로도에 영향을 끼침 Afecta a la Fatiga Avanzada Afeta a Fadiga Avançada + Affectation Fatigue avancée Controls if thirst and hunger should affect ACE Advanced Fatigue. @@ -320,6 +324,7 @@ 배고픔과 목마름이 고급 피로도에 영향을 끼칠지를 정합니다 Controla si la sed y el hambre afectan a la Fatiga Avanzada de ACE Controla se a sede e a fome afetam a Fadiga Avançada do ACE. + Contrôle si la soif et la faim doivent affecter la fatigue avancée ACE. HUD Type @@ -334,6 +339,7 @@ HUD 종류 Tipo de HUD Tipo de HUD + Type de HUD Selects which HUD style will be used. @@ -348,6 +354,7 @@ 사용될 HUD 스타일을 고르십시오. Selecciona qué estilo de HUD será utilizado. Seleciona qual estilo de HUD será usado. + Sélectionne le style HUD à utiliser. Colored Icons @@ -362,6 +369,7 @@ 색깔 아이콘 Iconos coloreados Ícones coloridos + Icônes de couleur Draining Icons @@ -376,6 +384,7 @@ 빠지는 아이콘 Iconos de drenado Ícones de drenagem + Icônes incolores HUD Show Level @@ -390,6 +399,7 @@ HUD 표시 Mostrar nivel en HUD Mostrar nível no HUD + Afficher le niveau dans le HUD Automatically show the HUD when either thirst or hunger are above this level. @@ -404,6 +414,7 @@ 정한 퍼센트 이하로 내려가면 HUD가 나타나게 합니다. Mostrar automáticamente el HUD cuando la sed o el hambre están por encima de este nivel. Mostrar automaticamente o HUD quando a sede ou a fome estão acima deste nível. + Affiche automatiquement le HUD dès que la soif ou la faim sont au-dessus de ce niveau. Always @@ -435,6 +446,7 @@ 색깔 아이콘 - 투명도 Iconos coloreados - Transparencia Ícones coloridos - Transparência + Icônes de couleur - Transparence Controls the transparency of the Colored Icons HUD. Dynamic setting makes the HUD less transparent as thirst or hunger increase. @@ -449,6 +461,7 @@ 색깔 아이콘의 투명도를 조절합니다. 동적 설정의 경우 배고픔이나 목마름이 해결되면 덜 투명하게 바뀝니다. Controla la transparencia de los Iconos coloreados en el HUD. La opción dinámica muestra el HUD menos transparente cuando la sed o el hambre aumentan. Controla a transparência dos ícones coloridos no HUD. A configuração dinâmica torna o HUD menos transparente à medida que a sede ou a fome aumentam. + Contrôle la transparence du HUD des icônes colorées. Un réglage dynamique rend le HUD moins transparent lorsque la soif ou la faim augmentent. Dynamic @@ -479,6 +492,7 @@ 식수 보급량 Suministro de agua Suprimentos de água + Réserve d'eau The amount of water available for ACE Field Rations water source actions (-1 disabled, -10 infinite) @@ -492,6 +506,7 @@ ACE 전투식량 물 근처 행동에서 얼마나 물을 얻어 갈 수 있는지를 정합니다 (-1은 비활성화, -10은 무한대) La cantidad de agua disponible para las acciones de suministro de agua de las Raciones de Combate de ACE (-1 deshabilitado, -10 infinito) A quantidade de água disponível para as ações de suprimentos de água das Rações de Campo do ACE (-1 desativado, -10 infinito) + Quantité d'eau disponible pour les actions relatives aux sources d'eau des rations de campagne ACE (-1 désactivé, -10 infini). Water Source @@ -506,6 +521,7 @@ 수원지 Suministro de agua Fonte de água + Source d'eau Check Remaining Water @@ -520,6 +536,7 @@ 남은 물 확인 Comprobar agua restante Verificar água restante + Vérifier l'eau restante Checking remaining water... @@ -534,6 +551,7 @@ 남은 물 확인 중... Comprobando agua restante... Verificando água restante... + Vérification de l'eau restante... There are %1 litres left. @@ -548,6 +566,7 @@ %1 리터의 물이 남아있습니다. Quedan %1 litros. Ainda há %1 litros. + Il reste %1 litres. There is no water left. @@ -562,6 +581,7 @@ 물이 한 방울도 없습니다. No queda agua. Não há mais água. + Il n'y a plus d'eau. Drink From Source @@ -575,6 +595,7 @@ 수원에서 물 마시기 Beber desde el suministro Beber da fonte + Boire à la source Refill @@ -640,6 +661,7 @@ %1 먹는 중... Comiendo %1... Comendo %1... + Manger %1... Drinking %1... @@ -654,6 +676,7 @@ %1 마시는 중... Bebiendo %1... Bebendo %1... + Boire %1... Drinking from %1... @@ -668,6 +691,7 @@ %1 으로 부터 마시는 중... Bebiendo desde %1... Bebendo de %1... + Boire à %1... Drinking from source... @@ -681,6 +705,7 @@ 수원에서 마시는 중... Bebiendo desde el suministro... Bebendo da fonte... + Boire à la source... Water Bottle @@ -899,6 +924,7 @@ 상쾌한 레몬라임향의 탄산음료 Bebida refrescante de sabor lima y limón Bebida refrescante de sabor limão e lima + Une boisson gazeuse rafraîchissante au goût de citron et de citron vert. Orange flavored soft drink with a tingly, fruity taste @@ -913,6 +939,7 @@ 오렌지 향의 톡쏘는 탄산음료 Bebida refrescante de sabor naranja, con un chispeante y afrutado sabor. Bebida refrescante de sabor laranja, com um sabor frutado e formigante. + Une boisson gazeuse aromatisée à l'orange Red Gull gives you wings @@ -927,6 +954,7 @@ 레드굴은 날개를 달아줘요 Red Gull te da alas Red Gull te dá asas + Red Gull vous donne des ailes MRE Lamb Curry @@ -975,6 +1003,7 @@ MRE 비프스튜 MRE Estofado de ternera MRE ensopado de carne + MRE Ragoût de bœuf An MRE containing Beef Stew. Heat for best effect @@ -989,6 +1018,7 @@ 비프스튜가 들어있는 MRE입니다. 뜨겁게 먹을 때 가장 좋습니다 Un MRE que contiene estofado de ternera. Calentar para mejor efecto. Um MRE contendo ensopado de carne. Aquecer para melhor efeito + Un MRE contenant du ragoût de bœuf. Chauffer pour un meilleur effet MRE Cream Tomato Soup @@ -1237,6 +1267,7 @@ Семечки подсолнуха Pipas de girasol Sementes de girassol + Graines de tournesol Roasted And Salted @@ -1249,6 +1280,7 @@ Поджаренные и солёные Tostadas y saladas Torradas e salgadas + Grillé et salé diff --git a/addons/fieldmanual/stringtable.xml b/addons/fieldmanual/stringtable.xml index a4474dc2d4..18f45a1e7e 100644 --- a/addons/fieldmanual/stringtable.xml +++ b/addons/fieldmanual/stringtable.xml @@ -38,6 +38,7 @@ %3Fame%4 aumenta linearmente con la velocità di movimento del soldato. Si rigenera consumando cibo.<br/><br/>%3Usa:%4<br/>%2Raccogli cibo.<br/>%2Usa [%3%12%4] e scegli %3sopravvivenza%4.<br />%2Scegli un articolo da mangiare. %3空腹度%4は兵士の移動速度に比例して増加します。食べ物を食べることで回復します。<br/><br/>%3使用方法:%4<br/>%2食べ物を持つ。<br/>%2[%3%12%4] を使って%3サバイバル%4を選択。<br/>%2食べたいものを選ぶ。 %3Голод%4 линейно увеличивается со скоростью передвижения солдата. Восстанавливайтесь, употребляя пищу.<br/><br/>%3 Использование:%4<br/>%2Возьмите еду.<br/>%2Используйте [%3%12%4] и выберите %3Выживание% 4.<br/>%2Выберите продукт для потребления. + %3La faim%4 augmente linéairement avec la vitesse de déplacement du soldat. Il se régénère en consommant de la nourriture.<br/><br/>%3Utilisation:%4<br/>%2Ramasser la nourriture.<br/>%2Utilisez [%3%12%4] et sélectionnez %3Survie%4.<br/>%2Choisissez un article à consommer. Thirst @@ -59,6 +60,7 @@ %3Sete%4 aumenta linearmente con la velocità di movimento del soldato. Si rigenera bevendo liquidi.<br/><br/>%3Usa:%4<br/>%2Raccogli bevanda.<br/>%2Usa [%3%12%4] e scegli %3sopravvivenza%4.<br />%2Scegli un articolo da bere. %3喉の渇き%4は兵士の移動速度に比例して増加します。飲み物を飲むことで回復します。<br/><br/>%3使用方法:%4<br/>%2飲み物を持つ。<br/>%2[%3%12%4] を使って%3サバイバル%4を選択。<br/>%2飲みたいものを選ぶ。 %3Жажда%4 линейно увеличивается со скоростью передвижения солдата. Восстанавливайтесь, употребляя напитки.<br/><br/>%3 Использование:%4<br/>%2Возьмите напиток.<br/>%2Используйте [%3%12%4] и выберите %3Выживание% 4.<br/>%2Выберите напиток для потребления. + %3La soif%4 augmente linéairement avec la vitesse de déplacement du soldat. Elle se régénère en buvant des liquides.<br/><br/>%3Utilisez [%3%12%4] et choisissez %3survival%4.<br />%2Choisissez un article à boire. Medical Treatment @@ -91,6 +93,7 @@ %3Adenosina%4 è usata per rallentare il ritmo cardiaco.<br/><br/>%3Utilizzo:%4<br/>%2Usa [%3%13%4] o [%3%14%4] e seleziona un arto.<br/>%2Inject %3Adenosina%4. %3アデノシン%4は心拍数を下げるのに使われます。<br/><br/>%3使用方法:%4<br/>%2[%3%13%4] または [%3%14%4] を使って四肢を選択します。<br/>%2そして%3アデノシン%4を注射します。 %3Аденозин%4 используется для снижения частоты сердечных сокращений.<br/><br/>%3Применение:%4<br/>%2Используйте [%3%13%4] или [%3%14%4] и выберите конечность.<br/>%2Введите %3Аденозин%4. + L'%3adénosine%4 est utilisée pour réduire la fréquence cardiaque.<br/><br/>%3Utilisation:%4<br/>%2Utilisez [%3%13%4] ou [%3%14%4] et sélectionnez un membre.<br/>%2Injectez l'%3Adénosine%4. Bandages @@ -131,6 +134,7 @@ IV-Flüssigkeiten Fluidi EV IV 輸液 + IV Fluides Restore Blood Volume @@ -141,6 +145,7 @@ Ristorano Volume di Sangue 血液量を回復する Внутривенные жидкости + Restaurer le volume sanguin %3IV fluids%4 restore lost blood volume. Blood, Plasma, and Saline are functionally the same.<br/><br/>%3Usage:%4<br/>%2Use [%3%13%4] or [%3%14%4] and select an appendage.<br/>%2Restore blood volume by selecting desired %3IV Fluid%4 type. @@ -200,6 +205,7 @@ Risolvi frattura 骨折を治す Исправлять переломы + Réparation des fractures A %3Splint%4 is used to fix fractures. The %3Splint%4 is consumed when used.<br/><br/>%3Usage:%4<br/>%2Use [%3%13%4] or [%3%14%4] and select an affected appendage.<br/>%2Select %3Apply Splint%4. @@ -524,6 +530,7 @@ 휴대용 기상 관측 장비입니다 携帯気象予報所 Карманная метеостанция + Station météo de poche The %3Kestrel 4500 Pocket Weather Tracker%4 is a mini weather station useful for collecting the the following weather data:<br/>%2Heading and wind direction<br/>%2Crosswind and headwind<br/>%2Altitude and barometric pressure<br/>%2Wet bulb temperature<br/>%2Humidity and dewpoint<br/>%2Density altitude<br/>%2Wind chill and temperature<br/>%2Time and date<br/>%2Minimum, maximum, and average values<br/><br/>%3Usage:%4<br/>%2Equip a %3Kestrel%4.<br/>%2Use [%3%12%4] and select %3Equipment%4.<br/>%2Select %3Open%4. @@ -539,6 +546,7 @@ 위치를 삼각측량합니다 三角測量で位置を特定 Передавайте свое местоположение + Trianguler votre position The %3Map Tools%4 are a set of tools that allows a soldier to measure distances and angles. Useful for land, and calculating firing solutions for artillery.<br/><br/>%3Usage:%4<br/>%2Open %3Map%4.<br/>%2Use [%3%12%4] and select %3Map Tools%4.<br/>%2 The Tool can be moved by dragging with [%3Left-Click%4] while holding [%3ALT%4]. @@ -546,6 +554,7 @@ Gli %3Strumenti Cartografici%4 permettono al soldato di misurare distanze e angoli sulla mappa. Utile a terra e per calculare direzioni di tiro per artiglieria.<br/><br/>%3Utilizzo:%4<br/>%2Apri %3Mappa%4.<br/>%2Usa [%3%12%4] e seleziona %3Strumenti Cartografici%4.<br/>%2 Lo strumento può essere spostato trascinandolo con [%3Click-Sinistro%4] premendo [%3ALT%4]. %3독도용 도구%4는 병사가 거리와 각도를 측정할 수 있는 도구 세트입니다. 지상에서 유용하며 포병 사격 솔루션 계산에 유용합니다,<br/><br/>%3사용 방법:%4<br/>%2%3지도%4를 여십시오.<br/>%2[%3%12%4]를 사용하여 %3독도용 도구%4를 선택하십시오.<br/>%2도구는 [%3Alt 키%4]를 누른 상태에서 [%3마우스 왼쪽 클릭%4]으로 드래그하여 이동할 수 있습니다. %3マップ ツール%4は、兵士が距離と角度を測定できるようにするツールのセットです。陸上や大砲の射撃工程の計算を解くのに役立ちます。<br/><br/>%3使用方法:%4<br/>%2%3マップ%4を開きます。<br/>%2[%3%12%4] を使って%3マップ ツール%4を選択します。<br/>%2 [%3ALT%4] を押しながら [%3左クリック%4] でドラッグするとツールを移動できます。 + Les %3Outils cartographiques%4 sont un ensemble d'outils permettant au soldat de mesurer des distances et des angles. Utile pour la terre et le calcul des solutions de tir pour l'artillerie.<br/><br/>%3Utilisation:%4<br/>%2Ouvrir la%3Carte%4.<br/>%2Utiliser [%3%12%4] et sélectionner %3Outils cartographiques%4.<br/>%2 L'outil peut être déplacé en le faisant glisser avec [%3Clic gauche%4] tout en maintenant [%3ALT%4]. Advanced DAGR @@ -554,6 +563,7 @@ 고급형 DAGR입니다 より高度なDAGR Продвинутый DAGR + DAGR avancé The %3MicroDAGR GPS%4 is an advanced version of the %3DAGR%4. It provides position, navigation, and timing (PNT) data to include:<br/>%2Compass and heading<br/>%2Date and hour synced to the mission<br/>%2Elevation (relative to sea level)<br/>%2Current speed<br/>%2GPS with topographic and satellite view<br/>%2Creating, naming, and deleting waypoints<br/>%2Friendly identification (Requires ACE BLUFOR Tracker Setting)<br/>Connection to the Vector-21 Rangefinder for data import (waypoint creation and grid reference of ranged targets)<br/><br/>%3Usage:%4<br/>%2For usage instructions, please visit the dedicated %3MicroDAGR%4 wiki. @@ -569,6 +579,7 @@ 사거리표 射表 Таблицы диапазонов + Tables de tir Get A Firing Solution @@ -577,6 +588,7 @@ 사격 솔루션을 제공합니다 撃ち方の解を得る Получите расчёт + Obtenir une solution de tir %3Range Tables%4 allow for a soldier to estimate accurate shot placement on direct or indirect targets (depending on asset). The %3Range Table%4 will automatically fill depending on the soldiers selected weapon/vehicle.<br/><br/>%3Usage:%4<br/>%2Use [%3%12%4] and select %3Equipment%4.<br/>%2Select the desired %3Range Table%4. @@ -592,6 +604,7 @@ 로프 ロープ Канаты + Corde Tow With Ease @@ -690,6 +703,7 @@ 空の目を維持する Не Отрывай Глаз От Неба Gardez les yeux au ciel + Gardez les yeux au ciel %3UAV Batteries%4 are used to recharge a UAV's energy storage. Especially useful for small UAVs.<br/><br/>%3Usage:%4<br/>%2Equip a %3UAV Battery%4<br/>%2Approach a %3UAV%4 with its %3Engine Off%4.<br/>%2Use [%3%13%4] and select %3Recharge%4. @@ -705,6 +719,7 @@ 진입로를 만듭니다 堂々入場する Создание собственного входа + Faire son entrée %3Wirecutters%4 are a tool that allows a soldier to bypass wired fencing. Useful for creating backdoor entrances into secure areas.<br/><br/>%3Usage:%4<br/>%2Move close to a fence.<br/>%2Use [%3%12%4] and select %3Cut Fence%4. @@ -785,6 +800,7 @@ 차량 열쇠 車両キー Взлом и проникновение + Clés de véhicule Lock/Unlock Vehicles @@ -793,6 +809,7 @@ 차량을 잠그거나 해제합니다 車両のロック/ロック解除 Взлом и проникновение + Verrouiller/déverrouiller un véhicule %3Vehicle Keys%4 are used to lock/unlock your vehicles. Vehicle keys can exist for the whole side, or keys can be created for a particular vehicle itself.<br/><br/>%3Usage:%4<br/>%2Equip a %3Vehicle Key%4.<br/>%2Approach the vehicle that the key belongs to.<br/>Use [%3%13%4] and select %3Lock/Unlock Vehicle%4.<br/><br/><t underline='1'>%3Note:%4</t> Lockpicks and keys are only available via scripting or ACE Vehicle Key modules. diff --git a/addons/killtracker/stringtable.xml b/addons/killtracker/stringtable.xml index 8bc6ab13a2..24c7bcdd56 100644 --- a/addons/killtracker/stringtable.xml +++ b/addons/killtracker/stringtable.xml @@ -102,6 +102,7 @@ Отслеживание юнитов ИИ, убитых игроком プレイヤーに殺害されたAIユニットを追跡 플레이어가 죽인 AI 트래킹 + Suivi de l'IA tuée par les joueurs Defines if killed AIs will be shown in the kill tracker during mission debriefing. @@ -110,6 +111,7 @@ Определяет, будут ли убитые ИИ отображаться в трекере убийств во время дебрифинга миссии. ミッションデブリーフィングのキルトラッカーに殺害されたAIが表示されるかどうかを定義します。 사후강평 중 살해된 AI가 킬트래킹에 표시되는지 여부를 정의합니다. + Définit si les IA tuées seront affichées dans le tracker pendant le débriefing de la mission. diff --git a/addons/maptools/stringtable.xml b/addons/maptools/stringtable.xml index 9d23c4ffff..cca7aa98a8 100644 --- a/addons/maptools/stringtable.xml +++ b/addons/maptools/stringtable.xml @@ -41,6 +41,7 @@ 標定盤 Tavola di calcolo Графическая доска + Tableau de calcul The Plotting Board is a map tool designed for use in the directing of short range indirect fires. @@ -48,6 +49,7 @@ 標定盤(プロッティング・ボード)は、短距離の間接射撃の指示に使用するために設計されたマップツールです。 La tavola di calcolo è uno strumento utilizzato per dirigere fuoco di artiglieria a corto raggio. Графическая доска - это картографический инструмент, предназначенный для использования при ведении непрямого огня с малой дистанции. + La table de calcul est un instrument utilisé pour diriger les tirs d'artillerie à courte portée. Map Tools @@ -272,6 +274,7 @@ 플로팅 보드 그리기 채널 허용 Canali ammessi su tavola di calcolo Разрешить создание каналов на миллиметровой доске. + Canaux autorisés sur la table de calcul Channels in which plotting board drawing is enabled. @@ -279,6 +282,7 @@ 플로팅 보드 그리기가 활성화된 채널입니다. Canali in cui si può disegnare sulla tavola di calcolo. Каналы, в которых включено рисование на миллиметровой доске. + Canaux dans lesquels vous pouvez dessiner sur le tableau. Allow Direct Comms Only (Polylines Only) @@ -286,6 +290,7 @@ 직접교신만 허용 (선 긋기만) Comunicazioni Dirette (solo linee) Разрешать только прямую связь (только полилинии) + Communications directes uniquement (lignes uniquement) Allow Direct/Group Comms (Polylines and Group Markers) @@ -293,6 +298,7 @@ 직접교신/그룹무전망 허용 (선 긋기와 그룹 마커) Comunicazioni dirette/gruppo (linee e marker) Разрешить прямую/групповую связь (полилинии и групповые маркеры) + Autoriser les communications directes/de groupe (polylignes et marqueurs de groupe) Plotting Board @@ -300,6 +306,7 @@ 플로팅 보드 Tavola di calcolo Миллиметровая доска + Table de calcul Plotting Board Acrylic @@ -307,6 +314,7 @@ 플로팅 보드 (아크릴) Acrilico tavola di calcolo Миллиметровая доска акрилловая + Table de calcul Acrylique Plotting Board Ruler @@ -314,6 +322,7 @@ 플로팅 보드 (자) Righello tavola di calcolo Линейка для миллиметровой доски + Règle de la table de calcul To Plotting Board @@ -321,6 +330,7 @@ 플로팅 보드에 Su tavola di calcolo К миллиметровой доске. + Sur la table de calcul To Plotting Board Acrylic @@ -328,6 +338,7 @@ 플로팅 보드 (아크릴)에 Su acrilico tavola di calcolo К миллиметровой доске акрилловой + Sur la table de calcul Acrylique To Plotting Board Ruler @@ -335,6 +346,7 @@ 플로팅 보드 (자)에 Su righello tavola di calcolo К линейке миллиметровой доски. + Sur la règle de la table à calcul Wipe all markers off Plotting Board @@ -342,6 +354,7 @@ 플로팅 보드에 있는 모든 마커 지우기 Cancella tutti i disegni dalla tavola Сотрите все маркеры с миллиметровой доски. + Effacer tous les dessins de la planche Show Plotting Board @@ -349,6 +362,7 @@ 플로팅 보드 보이기 Mostra tavola di calcolo Показать миллиметровую доску. + Afficher la table de calcul Hide Plotting Board @@ -356,6 +370,7 @@ 플로팅 보드 숨기기 Nascondi tavola di calcolo Скрыть миллиметровую доску. + Masquer la table de calcul Toggle Plotting Board Ruler @@ -363,6 +378,7 @@ 플로팅 보드 (자) 토글 Mostra/Nascondi Righello Переключить линейку миллиметровой доски. + Afficher/masquer la règle Align @@ -412,6 +428,7 @@ 위로 Su Вверх + Monter To Maptool @@ -419,6 +436,7 @@ 독도용 도구로 Su strumento cartografico К инструментам карты + Outil cartographique diff --git a/addons/viewdistance/stringtable.xml b/addons/viewdistance/stringtable.xml index 0d97fe1f96..4404d0efe8 100644 --- a/addons/viewdistance/stringtable.xml +++ b/addons/viewdistance/stringtable.xml @@ -128,6 +128,7 @@ 0に設定すると、デフォルトのビデオ設定が使用されます Значение 0 будет использовать настройки видео по умолчанию Establecer a 0 utiliza las opciones de video por defecto + La valeur 0 permet d'utiliser les paramètres vidéo par défaut Client View Distance (On Foot) From ccb3e65734c836be0286d2ecc84330d9502fd626 Mon Sep 17 00:00:00 2001 From: Fabio Schick <58027418+mrschick@users.noreply.github.com> Date: Thu, 4 Apr 2024 13:09:02 +0200 Subject: [PATCH 075/132] Map Tools - Show GPS on Map when equipped with UAV Terminal (#9885) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Show Map GPS when equipped with UAV Terminal * Update Maptools Documentation * Reword documentation * Reword docs, remove dash Co-authored-by: Jouni Järvinen * Allow GPS when terminal slot is not empty * Allow GPS on map when GPS sidepanel is available * Reword docs Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> * Return statement - remove ; and add comment Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> --------- Co-authored-by: Jouni Järvinen Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> --- addons/maptools/functions/fnc_canUseMapGPS.sqf | 10 +++++++--- docs/wiki/feature/maptools.md | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/addons/maptools/functions/fnc_canUseMapGPS.sqf b/addons/maptools/functions/fnc_canUseMapGPS.sqf index 317eee6c42..0bdd0d0ea6 100644 --- a/addons/maptools/functions/fnc_canUseMapGPS.sqf +++ b/addons/maptools/functions/fnc_canUseMapGPS.sqf @@ -15,6 +15,10 @@ * Public: No */ -visibleMap && -{alive ACE_player} && -{"ItemGPS" in (assignedItems ACE_player)} +if (!visibleMap || {!alive ACE_player}) exitWith {false}; + +private _gpsOpened = visibleGPS; +private _gpsAvailable = openGPS true; +if (!_gpsOpened) then {openGPS false}; + +_gpsAvailable // return diff --git a/docs/wiki/feature/maptools.md b/docs/wiki/feature/maptools.md index f31c81f0e2..f8ce7e5416 100644 --- a/docs/wiki/feature/maptools.md +++ b/docs/wiki/feature/maptools.md @@ -25,7 +25,7 @@ This adds map tools that can be used to measure distances between two points or This adds a plotting board that can be used to aid in the rapid usage and adjustment of short-ranged indirect fires, as well as quick measurements of directions and distances between points, and general land-navigation. ### 1.4 GPS on map -If you are equipped with a vanilla GPS it will be shown on the map. (You don't need the `Map Tools` item in your inventory for this.) +If you have GPS capability, a GPS display will be shown on the map, indicating current grid position. (You don't need the `Map Tools` item in your inventory for this.) ## 2. Usage From 8f46ffd8d59ef0d8ed838f14797742e0231703d6 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Thu, 4 Apr 2024 13:15:26 +0200 Subject: [PATCH 076/132] General - Change `count` to `forEach` where appropriate (#9890) count -> forEach Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> --- addons/advanced_throwing/XEH_postInit.sqf | 5 ++--- .../functions/fnc_renderPickUpInteraction.sqf | 8 +++---- .../aircraft/functions/fnc_canShowEject.sqf | 2 +- addons/common/XEH_postInit.sqf | 3 +-- .../fnc__handleRequestSyncedEvent.sqf | 3 +-- .../functions/fnc_assignObjectsInList.sqf | 21 +++++++------------ addons/common/functions/fnc_cbaSettings.sqf | 3 +-- addons/common/functions/fnc_displayIcon.sqf | 7 ++----- addons/common/functions/fnc_dumpArray.sqf | 3 +-- .../functions/fnc_dumpPerformanceCounters.sqf | 9 +++----- addons/common/functions/fnc_firedEH.sqf | 3 +-- .../fnc_getAllDefinedSetVariables.sqf | 3 +-- .../common/functions/fnc_getDoorTurrets.sqf | 3 +-- addons/common/functions/fnc_getGunner.sqf | 3 +-- addons/common/functions/fnc_getInPosition.sqf | 3 +-- .../common/functions/fnc_getMapGridData.sqf | 3 +-- .../functions/fnc_getNumberMagazinesIn.sqf | 3 +-- .../common/functions/fnc_getTurretIndex.sqf | 3 +-- .../common/functions/fnc_getVehicleCrew.sqf | 3 +-- .../common/functions/fnc_getWeaponModes.sqf | 3 +-- .../common/functions/fnc_getWeaponState.sqf | 3 +-- .../functions/fnc_moduleLSDVehicles.sqf | 6 ++---- addons/common/functions/fnc_parseList.sqf | 6 ++---- .../common/functions/fnc_resetAllDefaults.sqf | 6 ++---- .../functions/fnc_restoreVariablesJIP.sqf | 4 +--- .../common/functions/fnc_sanitizeString.sqf | 3 +-- .../functions/fnc_throttledPublicVariable.sqf | 3 +-- .../concertina_wire/functions/fnc_deploy.sqf | 6 +++--- .../functions/fnc_dismountSuccess.sqf | 2 +- .../functions/fnc_disarmDropItems.sqf | 2 +- .../functions/fnc_openDisarmDialog.sqf | 2 +- .../functions/fnc_addCellphoneIED.sqf | 4 ++-- .../functions/fnc_addTriggerActions.sqf | 2 +- .../functions/fnc_getSpeedDialExplosive.sqf | 3 +-- addons/fastroping/functions/fnc_cutRopes.sqf | 4 ++-- .../fastroping/functions/fnc_deployRopes.sqf | 4 +--- .../functions/fnc_moduleEquipFRIES.sqf | 3 +-- .../fcs/functions/fnc_calculateSolution.sqf | 9 +++----- addons/finger/functions/fnc_keyPress.sqf | 5 ++--- addons/gestures/XEH_postInit.sqf | 4 +--- .../goggles/functions/fnc_isInRotorWash.sqf | 3 +-- .../functions/fnc_flashbangExplosionEH.sqf | 2 +- addons/hearing/functions/fnc_firedNear.sqf | 4 ++-- addons/huntir/functions/fnc_cam.sqf | 3 +-- .../functions/fnc_collectActiveActionTree.sqf | 9 +++----- .../functions/fnc_compileMenu.sqf | 3 +-- .../functions/fnc_compileMenuSelfAction.sqf | 3 +-- .../functions/fnc_addPassengerActions.sqf | 3 +-- addons/interaction/functions/fnc_getDown.sqf | 3 +-- addons/interaction/functions/fnc_openDoor.sqf | 8 +++---- addons/interaction/functions/fnc_sendAway.sqf | 3 +-- addons/map/XEH_postInitClient.sqf | 3 +-- addons/markers/functions/fnc_setMarkerJIP.sqf | 3 +-- .../functions/fnc_moduleAmbianceSound.sqf | 4 +--- addons/nametags/functions/fnc_onDraw3d.sqf | 3 +-- .../rearm/functions/fnc_hasEnoughSupply.sqf | 3 +-- .../rearm/functions/fnc_readSupplyCounter.sqf | 3 +-- .../fnc_rearmEntireVehicleSuccess.sqf | 3 +-- .../functions/fnc_moduleAddSpareParts.sqf | 6 ++---- .../functions/fnc_moduleRallypoint.sqf | 3 +-- .../safemode/functions/fnc_unlockSafety.sqf | 3 +-- addons/sandbag/functions/fnc_pickup.sqf | 2 +- .../functions/fnc_addSlideActions.sqf | 2 +- .../functions/fnc_autoTransition.sqf | 2 +- .../functions/fnc_createSlideshow.sqf | 5 ++--- addons/slideshow/functions/fnc_moduleInit.sqf | 3 +-- .../switchunits/functions/fnc_markAiOnMap.sqf | 5 ++--- .../functions/fnc_positionTL.sqf | 4 ++-- addons/tripod/functions/fnc_adjust.sqf | 3 +-- addons/tripod/functions/fnc_place.sqf | 2 +- addons/weaponselect/XEH_preInit.sqf | 6 ++---- .../functions/fnc_selectNextGrenade.sqf | 3 +-- .../functions/fnc_calculateWindSpeed.sqf | 6 ++---- 73 files changed, 108 insertions(+), 188 deletions(-) diff --git a/addons/advanced_throwing/XEH_postInit.sqf b/addons/advanced_throwing/XEH_postInit.sqf index 930313fce0..774c99b3e6 100644 --- a/addons/advanced_throwing/XEH_postInit.sqf +++ b/addons/advanced_throwing/XEH_postInit.sqf @@ -16,9 +16,8 @@ GVAR(ammoMagLookup) = call CBA_fnc_createNamespace; { private _ammo = getText (configFile >> "CfgMagazines" >> _x >> "ammo"); if (_ammo != "") then { GVAR(ammoMagLookup) setVariable [_ammo, _x]; }; - } count (getArray (configFile >> "CfgWeapons" >> "Throw" >> _x >> "magazines")); - nil -} count getArray (configFile >> "CfgWeapons" >> "Throw" >> "muzzles"); + } forEach (getArray (configFile >> "CfgWeapons" >> "Throw" >> _x >> "magazines")); +} forEach getArray (configFile >> "CfgWeapons" >> "Throw" >> "muzzles"); // Add keybinds diff --git a/addons/advanced_throwing/functions/fnc_renderPickUpInteraction.sqf b/addons/advanced_throwing/functions/fnc_renderPickUpInteraction.sqf index 15cae41585..d45f2add93 100644 --- a/addons/advanced_throwing/functions/fnc_renderPickUpInteraction.sqf +++ b/addons/advanced_throwing/functions/fnc_renderPickUpInteraction.sqf @@ -44,8 +44,7 @@ _addedPickUpHelpers pushBack _pickUpHelper; _throwablesHelped pushBack _x; }; - nil - } count _nearThrowables; + } forEach _nearThrowables; _args set [0, getPosASL ACE_player]; _args set [3, _nearThrowables]; @@ -56,11 +55,10 @@ { // Only handling with attachTo works nicely _x attachTo [_x getVariable [QGVAR(throwable), objNull], [0, 0, 0]]; - nil - } count _addedPickUpHelpers; + } forEach _addedPickUpHelpers; } else { TRACE_1("Cleaning Pick Up Helpers",count _addedPickUpHelpers); - {deleteVehicle _x} count _addedPickUpHelpers; + {deleteVehicle _x} forEach _addedPickUpHelpers; [_idPFH] call CBA_fnc_removePerFrameHandler; }; }, 0, [(getPosASL ACE_player) vectorAdd [-100, 0, 0], [], [], []]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/aircraft/functions/fnc_canShowEject.sqf b/addons/aircraft/functions/fnc_canShowEject.sqf index 08c55eb781..9239c413a7 100644 --- a/addons/aircraft/functions/fnc_canShowEject.sqf +++ b/addons/aircraft/functions/fnc_canShowEject.sqf @@ -30,6 +30,6 @@ _vehicle == vehicle _unit if (_unit == _x select FULLCREW_UNIT) exitWith { _ejectVarName = format [QGVAR(ejectAction_%1_%2), _x select FULLCREW_ROLE, _x select FULLCREW_TURRETPATH]; }; - } count fullCrew _vehicle; + } forEach fullCrew _vehicle; _vehicle getVariable [_ejectVarName, false] } diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index 1f259c2e3d..f97009808f 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -145,8 +145,7 @@ if (isServer) then { INFO_3("[%1] DC - Was Zeus [%2] while controlling unit [%3] - manually clearing `bis_fnc_moduleRemoteControl_owner`",[_x] call FUNC(getName),_dcPlayer,_x); _x setVariable ["bis_fnc_moduleRemoteControl_owner", nil, true]; }; - nil - } count (curatorEditableObjects _zeusLogic); + } forEach (curatorEditableObjects _zeusLogic); }; }]; }; diff --git a/addons/common/functions/fnc__handleRequestSyncedEvent.sqf b/addons/common/functions/fnc__handleRequestSyncedEvent.sqf index 299dff8373..1924ed22ff 100644 --- a/addons/common/functions/fnc__handleRequestSyncedEvent.sqf +++ b/addons/common/functions/fnc__handleRequestSyncedEvent.sqf @@ -43,8 +43,7 @@ if (isServer) then { { _x params ["", "_eventArgs","_ttl"]; [_eventName, _eventArgs, _ttl] call FUNC(_handleSyncedEvent); - false - } count _eventLog; + } forEach _eventLog; INFO_1("[%1] synchronized",_eventName); }; diff --git a/addons/common/functions/fnc_assignObjectsInList.sqf b/addons/common/functions/fnc_assignObjectsInList.sqf index 23d373c310..0928812cd4 100644 --- a/addons/common/functions/fnc_assignObjectsInList.sqf +++ b/addons/common/functions/fnc_assignObjectsInList.sqf @@ -28,18 +28,13 @@ if (_list isEqualType "") then { }; { - if (!isNil "_x") then { - if (_x isEqualType objNull) then { - if (local _x) then { - if (_vehicle) then { - (vehicle _x) setVariable [_variable, _setting, _global]; - TRACE_6("Set variable vehicle",_x,vehicle _x,typeOf (vehicle _x),_variable,_setting,_global); - } else { - _x setVariable [_variable, _setting, _global]; - TRACE_5("Set variable",_x,typeOf _x,_variable,_setting,_global); - }; - }; + if (!isNil "_x" && {_x isEqualType objNull} && {local _x}) then { + if (_vehicle) then { + (vehicle _x) setVariable [_variable, _setting, _global]; + TRACE_6("Set variable vehicle",_x,vehicle _x,typeOf (vehicle _x),_variable,_setting,_global); + } else { + _x setVariable [_variable, _setting, _global]; + TRACE_5("Set variable",_x,typeOf _x,_variable,_setting,_global); }; }; - false -} count _list; +} forEach _list; diff --git a/addons/common/functions/fnc_cbaSettings.sqf b/addons/common/functions/fnc_cbaSettings.sqf index 6be8f60505..29e4d532b1 100644 --- a/addons/common/functions/fnc_cbaSettings.sqf +++ b/addons/common/functions/fnc_cbaSettings.sqf @@ -66,8 +66,7 @@ GVAR(settingsMovedToSQF) = []; INFO_1("%1 delayed functions running.",count GVAR(runAtSettingsInitialized)); { (_x select 1) call (_x select 0); - false - } count GVAR(runAtSettingsInitialized); + } forEach GVAR(runAtSettingsInitialized); GVAR(runAtSettingsInitialized) = nil; //cleanup #ifdef DEBUG_MODE_FULL diff --git a/addons/common/functions/fnc_displayIcon.sqf b/addons/common/functions/fnc_displayIcon.sqf index 1b307fdf33..da08fa832a 100644 --- a/addons/common/functions/fnc_displayIcon.sqf +++ b/addons/common/functions/fnc_displayIcon.sqf @@ -53,8 +53,7 @@ private _refresh = { { ctrlDelete _x; - false - } count _allControls; + } forEach _allControls; _allControls = []; @@ -80,7 +79,6 @@ private _refresh = { _ctrl ctrlSetTextColor _xcolor; _ctrl ctrlCommit 0; _allControls pushBack _ctrl; - false } forEach (missionNamespace getVariable [QGVAR(displayIconList),[]]); }; @@ -116,8 +114,7 @@ if (_show) then { if (_x select 0 != _iconId) then { _newList pushBack _x; }; - false - } count _list; + } forEach _list; missionNamespace setVariable [QGVAR(displayIconList), _newList]; call _refresh; diff --git a/addons/common/functions/fnc_dumpArray.sqf b/addons/common/functions/fnc_dumpArray.sqf index 754b811314..87437c37e2 100644 --- a/addons/common/functions/fnc_dumpArray.sqf +++ b/addons/common/functions/fnc_dumpArray.sqf @@ -34,8 +34,7 @@ if (IS_ARRAY(_var)) then { { [_x, _depth] call FUNC(dumpArray); - false - } count _var; + } forEach _var; diag_log text format ["%1],", _pad]; }; diff --git a/addons/common/functions/fnc_dumpPerformanceCounters.sqf b/addons/common/functions/fnc_dumpPerformanceCounters.sqf index fa0b4e4e6d..309b82c673 100644 --- a/addons/common/functions/fnc_dumpPerformanceCounters.sqf +++ b/addons/common/functions/fnc_dumpPerformanceCounters.sqf @@ -25,8 +25,7 @@ if (!isNil "ACE_PFH_COUNTER") then { private _isActive = ["ACTIVE", "REMOVED"] select isNil {CBA_common_PFHhandles select (_pfh select 0)}; diag_log text format ["Registered PFH: id=%1 [%2, delay %3], %4:%5", _pfh select 0, _isActive, _parameters select 1, _pfh select 1, _pfh select 2]; - false - } count ACE_PFH_COUNTER; + } forEach ACE_PFH_COUNTER; }; diag_log text format ["ACE COUNTER RESULTS"]; @@ -50,8 +49,7 @@ diag_log text format ["-------------------------------------------"]; }; _iter = _iter + 1; - false - } count _counterEntry; + } forEach _counterEntry; // results _averageResult = (_total / _count) * 1000; @@ -61,8 +59,7 @@ diag_log text format ["-------------------------------------------"]; } else { diag_log text format ["%1: No results", _counterEntry select 0]; }; - false -} count ACE_COUNTERS; +} forEach ACE_COUNTERS; /* // Dump PFH Trackers diff --git a/addons/common/functions/fnc_firedEH.sqf b/addons/common/functions/fnc_firedEH.sqf index cee874782a..2c0c32994d 100644 --- a/addons/common/functions/fnc_firedEH.sqf +++ b/addons/common/functions/fnc_firedEH.sqf @@ -50,8 +50,7 @@ if (_unit isKindOf "CAManBase") then { _gunner = _unit turretUnit _x; _turret = _x; }; - false - } count allTurrets [_unit, true]; + } forEach allTurrets [_unit, true]; // Ensure that at least the pilot is returned if there is no gunner if (isManualFire _unit && {isNull _gunner}) then { _gunner = effectiveCommander _unit; diff --git a/addons/common/functions/fnc_getAllDefinedSetVariables.sqf b/addons/common/functions/fnc_getAllDefinedSetVariables.sqf index 6642a09789..081836c196 100644 --- a/addons/common/functions/fnc_getAllDefinedSetVariables.sqf +++ b/addons/common/functions/fnc_getAllDefinedSetVariables.sqf @@ -35,7 +35,6 @@ private _return = []; _return pushBack [_x select 0, typeName _val, _val, _x select 2, _x select 5]; }; }; - false -} count GVAR(OBJECT_VARIABLES_STORAGE); +} forEach GVAR(OBJECT_VARIABLES_STORAGE); _return diff --git a/addons/common/functions/fnc_getDoorTurrets.sqf b/addons/common/functions/fnc_getDoorTurrets.sqf index fb652cfd1a..1b6f22152a 100644 --- a/addons/common/functions/fnc_getDoorTurrets.sqf +++ b/addons/common/functions/fnc_getDoorTurrets.sqf @@ -29,7 +29,6 @@ private _doorTurrets = []; if (((getNumber (_config >> "isCopilot")) == 0) && {count getArray (_config >> "weapons") > 0}) then { _doorTurrets pushBack _x; }; - false -} count _turrets; +} forEach _turrets; _doorTurrets diff --git a/addons/common/functions/fnc_getGunner.sqf b/addons/common/functions/fnc_getGunner.sqf index bb3ebb23e9..376f18070e 100644 --- a/addons/common/functions/fnc_getGunner.sqf +++ b/addons/common/functions/fnc_getGunner.sqf @@ -28,8 +28,7 @@ private _gunner = objNull; if (_weapon in (_vehicle weaponsTurret _x)) exitWith { _gunner = _vehicle turretUnit _x; }; - false -} count allTurrets [_vehicle, true]; +} forEach allTurrets [_vehicle, true]; // ensure that at least the pilot is returned if there is no gunner if (isManualFire _vehicle && {isNull _gunner}) then { diff --git a/addons/common/functions/fnc_getInPosition.sqf b/addons/common/functions/fnc_getInPosition.sqf index 6a95725e6e..076fd7a23c 100644 --- a/addons/common/functions/fnc_getInPosition.sqf +++ b/addons/common/functions/fnc_getInPosition.sqf @@ -38,8 +38,7 @@ private _enemiesInVehicle = false; //Possible Side Restriction { if (side _unit getFriend side _x < 0.6) exitWith {_enemiesInVehicle = true}; - false -} count crew _vehicle; +} forEach crew _vehicle; switch (_position) do { case "driver" : { diff --git a/addons/common/functions/fnc_getMapGridData.sqf b/addons/common/functions/fnc_getMapGridData.sqf index bce6351af0..daa4bd86cd 100644 --- a/addons/common/functions/fnc_getMapGridData.sqf +++ b/addons/common/functions/fnc_getMapGridData.sqf @@ -38,8 +38,7 @@ private _stepY = 1e10; _stepX = getNumber (_x >> "stepX"); _stepY = getNumber (_x >> "stepY"); }; - false -} count configProperties [_cfgGrid, "isClass _x", false]; +} forEach configProperties [_cfgGrid, "isClass _x", false]; private _letterGrid = false; diff --git a/addons/common/functions/fnc_getNumberMagazinesIn.sqf b/addons/common/functions/fnc_getNumberMagazinesIn.sqf index fc2c3d0605..b71e6729dd 100644 --- a/addons/common/functions/fnc_getNumberMagazinesIn.sqf +++ b/addons/common/functions/fnc_getNumberMagazinesIn.sqf @@ -25,8 +25,7 @@ if (_unit isKindOf "CAManBase") then { } else { { _return = _return + ({_x == _magazine} count magazines _x); - false - } count crew _unit; + } forEach crew _unit; (getMagazineCargo _unit) params [["_magNames", []], ["_magCount", []]]; { diff --git a/addons/common/functions/fnc_getTurretIndex.sqf b/addons/common/functions/fnc_getTurretIndex.sqf index dcbaafb3b2..75deced412 100644 --- a/addons/common/functions/fnc_getTurretIndex.sqf +++ b/addons/common/functions/fnc_getTurretIndex.sqf @@ -24,7 +24,6 @@ scopeName "main"; { if (_unit == (_vehicle turretUnit _x)) then {_x breakOut "main"}; - nil -} count allTurrets [_vehicle, true]; +} forEach allTurrets [_vehicle, true]; [] diff --git a/addons/common/functions/fnc_getVehicleCrew.sqf b/addons/common/functions/fnc_getVehicleCrew.sqf index 3e5e015785..a1bc06f6ab 100644 --- a/addons/common/functions/fnc_getVehicleCrew.sqf +++ b/addons/common/functions/fnc_getVehicleCrew.sqf @@ -33,7 +33,6 @@ private _crew = []; _crew pushBack (_x select 0); }; }; - false -} count fullCrew _vehicle; +} forEach fullCrew _vehicle; _crew diff --git a/addons/common/functions/fnc_getWeaponModes.sqf b/addons/common/functions/fnc_getWeaponModes.sqf index 55e260ef27..c1ca241cab 100644 --- a/addons/common/functions/fnc_getWeaponModes.sqf +++ b/addons/common/functions/fnc_getWeaponModes.sqf @@ -29,7 +29,6 @@ private _modes = []; if (_x == "this") then { _modes pushBack _weapon; }; - false -} count getArray (_config >> "modes"); +} forEach getArray (_config >> "modes"); _modes diff --git a/addons/common/functions/fnc_getWeaponState.sqf b/addons/common/functions/fnc_getWeaponState.sqf index 7ccb016c7a..2fadbd23ea 100644 --- a/addons/common/functions/fnc_getWeaponState.sqf +++ b/addons/common/functions/fnc_getWeaponState.sqf @@ -42,7 +42,6 @@ private _ammo = _muzzles apply {0}; _ammo set [_index, _x select 1]; }; }; - false -} count magazinesAmmoFull _unit; +} forEach magazinesAmmoFull _unit; [_attachments, _muzzles, _magazines, _ammo]; diff --git a/addons/common/functions/fnc_moduleLSDVehicles.sqf b/addons/common/functions/fnc_moduleLSDVehicles.sqf index fde230b0ca..35e1f07eba 100644 --- a/addons/common/functions/fnc_moduleLSDVehicles.sqf +++ b/addons/common/functions/fnc_moduleLSDVehicles.sqf @@ -28,8 +28,7 @@ if (isNil QGVAR(LSD_Vehicles)) then { if (_hSCount > 0) then { GVAR(LSD_Vehicles) pushBack [_x, _hSCount]; }; - nil -} count _units; +} forEach _units; if (isNil QGVAR(LSD_Colors)) then { GVAR(LSD_Colors) = [ @@ -51,8 +50,7 @@ if (isNil QGVAR(LSD_PFH)) then { for "_i" from 0 to (_hSCount - 1) do { _vehicle setObjectTexture [_i, GVAR(LSD_Colors) select _index]; }; - nil - } count GVAR(LSD_Vehicles); + } forEach GVAR(LSD_Vehicles); _index = ((_index + 1) % 7) mod count GVAR(LSD_Colors); (_this select 0) set [0, _index]; diff --git a/addons/common/functions/fnc_parseList.sqf b/addons/common/functions/fnc_parseList.sqf index 93ceccf17d..a559994bfa 100644 --- a/addons/common/functions/fnc_parseList.sqf +++ b/addons/common/functions/fnc_parseList.sqf @@ -32,8 +32,7 @@ private _whitespaceList = []; } else { _whitespaceList pushBack ([_x] call CBA_fnc_trim); }; - false -} count _list; +} forEach _list; _list = _whitespaceList; TRACE_1("Whitespace List",_list); @@ -46,8 +45,7 @@ if (_checkNil) then { if (!isNil _x) then { _nilCheckedList pushBack (missionNamespace getVariable _x); }; - false - } count _list; + } forEach _list; _list = _nilCheckedList; }; diff --git a/addons/common/functions/fnc_resetAllDefaults.sqf b/addons/common/functions/fnc_resetAllDefaults.sqf index 4d9f42a13b..ef74724183 100644 --- a/addons/common/functions/fnc_resetAllDefaults.sqf +++ b/addons/common/functions/fnc_resetAllDefaults.sqf @@ -27,8 +27,7 @@ if (isPlayer _unit) then { // clear all disable user input { [_x, false] call FUNC(setDisableUserInputStatus); - false - } count GVAR(DISABLE_USER_INPUT_COLLECTION); + } forEach GVAR(DISABLE_USER_INPUT_COLLECTION); }; }; @@ -36,5 +35,4 @@ if (isPlayer _unit) then { if !(_x select 4) then { _unit setVariable [_x select 0, nil, _x select 3]; }; - false -} count ([_unit] call FUNC(getAllDefinedSetVariables)); +} forEach ([_unit] call FUNC(getAllDefinedSetVariables)); diff --git a/addons/common/functions/fnc_restoreVariablesJIP.sqf b/addons/common/functions/fnc_restoreVariablesJIP.sqf index 905353d8ab..ac22cd3fa0 100644 --- a/addons/common/functions/fnc_restoreVariablesJIP.sqf +++ b/addons/common/functions/fnc_restoreVariablesJIP.sqf @@ -24,6 +24,4 @@ _respawnVariables pushBack "ACE_PersistentFunctions"; { _unit setVariable [_x, _unit getVariable _x, true]; - false -} count _respawnVariables; -nil +} forEach _respawnVariables; diff --git a/addons/common/functions/fnc_sanitizeString.sqf b/addons/common/functions/fnc_sanitizeString.sqf index c30cbe1292..7d0b2dd2f1 100644 --- a/addons/common/functions/fnc_sanitizeString.sqf +++ b/addons/common/functions/fnc_sanitizeString.sqf @@ -47,7 +47,6 @@ private _array = []; _array pushBack _x; }; }; - false -} count toArray _string; +} forEach toArray _string; toString _array // return diff --git a/addons/common/functions/fnc_throttledPublicVariable.sqf b/addons/common/functions/fnc_throttledPublicVariable.sqf index 3c1ed2761b..e6b1fdbaf6 100644 --- a/addons/common/functions/fnc_throttledPublicVariable.sqf +++ b/addons/common/functions/fnc_throttledPublicVariable.sqf @@ -29,8 +29,7 @@ if (isNil QGVAR(publishSchedId)) then { { _x params ["_unit", "_varName"]; _unit setVariable [_varName, _unit getVariable _varName, true]; - false - } count GVAR(publishVarNames); + } forEach GVAR(publishVarNames); GVAR(publishVarNames) = []; GVAR(publishNextTime) = 1e7; diff --git a/addons/concertina_wire/functions/fnc_deploy.sqf b/addons/concertina_wire/functions/fnc_deploy.sqf index 579bc73f97..c915109e1b 100644 --- a/addons/concertina_wire/functions/fnc_deploy.sqf +++ b/addons/concertina_wire/functions/fnc_deploy.sqf @@ -22,7 +22,7 @@ params ["_wirecoil", "_unit"]; private _wireNoGeo = "ACE_ConcertinaWireNoGeo" createVehicle [0,0,0]; { _wireNoGeo animate [_x, 1]; -} count WIRE_FAST; +} forEach WIRE_FAST; GVAR(placer) = _unit; private _dir = getDir _unit; @@ -51,7 +51,7 @@ GVAR(deployPFH) = [{ private _wire = "ACE_ConcertinaWire" createvehicle [0, 0, 0]; { _wire animate [_x, _anim]; - } count WIRE_FAST; + } forEach WIRE_FAST; [{ params ["_args", "_idPFH"]; @@ -74,7 +74,7 @@ GVAR(deployPFH) = [{ _wireNoGeo setDir _dir; { _wireNoGeo animate [_x, _anim]; - } count WIRE_FAST; + } forEach WIRE_FAST; }, 0, [_wireNoGeo, _wireNoGeoPos, _unit]] call CBA_fnc_addPerFrameHandler; [LLSTRING(RollWire), "", ""] call EFUNC(interaction,showMouseHint); diff --git a/addons/concertina_wire/functions/fnc_dismountSuccess.sqf b/addons/concertina_wire/functions/fnc_dismountSuccess.sqf index 3a90b62a91..86aac9e8bf 100644 --- a/addons/concertina_wire/functions/fnc_dismountSuccess.sqf +++ b/addons/concertina_wire/functions/fnc_dismountSuccess.sqf @@ -20,7 +20,7 @@ params ["_wire"]; { _wire animate [_x, 1]; -} count WIRE_FAST; +} forEach WIRE_FAST; [{ params ["_args", "_idPFH"]; diff --git a/addons/disarming/functions/fnc_disarmDropItems.sqf b/addons/disarming/functions/fnc_disarmDropItems.sqf index 26e00dfa5f..e1a4c379b4 100644 --- a/addons/disarming/functions/fnc_disarmDropItems.sqf +++ b/addons/disarming/functions/fnc_disarmDropItems.sqf @@ -50,7 +50,7 @@ if (!_doNotDropAmmo) then { if ((_x getVariable [QGVAR(disarmUnit), objNull]) == _target) exitWith { _holder = _x; }; - } count ((getpos _target) nearObjects [DISARM_CONTAINER, 3]); + } forEach ((getpos _target) nearObjects [DISARM_CONTAINER, 3]); }; //Create a new weapon holder diff --git a/addons/disarming/functions/fnc_openDisarmDialog.sqf b/addons/disarming/functions/fnc_openDisarmDialog.sqf index 27a7dbc521..da9a860678 100644 --- a/addons/disarming/functions/fnc_openDisarmDialog.sqf +++ b/addons/disarming/functions/fnc_openDisarmDialog.sqf @@ -93,7 +93,7 @@ GVAR(disarmTarget) = _target; if ((_x getVariable [QGVAR(disarmUnit), objNull]) == _target) exitWith { _holder = _x; }; - } count ((getpos _target) nearObjects [DISARM_CONTAINER, 3]); + } forEach ((getpos _target) nearObjects [DISARM_CONTAINER, 3]); //If a holder exists, show it's inventory if (!isNull _holder) then { diff --git a/addons/explosives/functions/fnc_addCellphoneIED.sqf b/addons/explosives/functions/fnc_addCellphoneIED.sqf index 2ac69b73ae..d35b303fc1 100644 --- a/addons/explosives/functions/fnc_addCellphoneIED.sqf +++ b/addons/explosives/functions/fnc_addCellphoneIED.sqf @@ -29,10 +29,10 @@ private _hasRequired = true; private _detonators = [_unit] call FUNC(getDetonators); { - if !(_x in _detonators) exitWith{ + if !(_x in _detonators) exitWith { _hasRequired = false; }; -} count _requiredItems; +} forEach _requiredItems; private _code = ""; while {true} do { diff --git a/addons/explosives/functions/fnc_addTriggerActions.sqf b/addons/explosives/functions/fnc_addTriggerActions.sqf index d3632d5bb7..b6b6e0ce41 100644 --- a/addons/explosives/functions/fnc_addTriggerActions.sqf +++ b/addons/explosives/functions/fnc_addTriggerActions.sqf @@ -31,7 +31,7 @@ private _children = []; if !(_x in _detonators) exitWith { _hasRequiredItems = false; }; - } count _required; + } forEach _required; if (_hasRequiredItems && {(!_isAttached) || {(getNumber (_x >> "isAttachable")) == 1}}) then { _children pushBack [ diff --git a/addons/explosives/functions/fnc_getSpeedDialExplosive.sqf b/addons/explosives/functions/fnc_getSpeedDialExplosive.sqf index 8490eab452..0f4e5d923f 100644 --- a/addons/explosives/functions/fnc_getSpeedDialExplosive.sqf +++ b/addons/explosives/functions/fnc_getSpeedDialExplosive.sqf @@ -24,7 +24,6 @@ private _explosive = []; if ((_x select 1) == _code) exitWith { _explosive = _x; }; - false -} count GVAR(CellphoneIEDs); +} forEach GVAR(CellphoneIEDs); _explosive diff --git a/addons/fastroping/functions/fnc_cutRopes.sqf b/addons/fastroping/functions/fnc_cutRopes.sqf index cbd01b5661..40d2416049 100644 --- a/addons/fastroping/functions/fnc_cutRopes.sqf +++ b/addons/fastroping/functions/fnc_cutRopes.sqf @@ -34,8 +34,8 @@ private _deployedRopes = _vehicle getVariable [QGVAR(deployedRopes), []]; //Only delete the hook first so the rope falls down. //Note: ropeDetach was used here before, but the command seems a bit broken. deleteVehicle _hook; - [{{deleteVehicle _x} count _this}, [_ropeTop, _ropeBottom, _dummy], 60] call CBA_fnc_waitAndExecute; -} count _deployedRopes; + [{{deleteVehicle _x} forEach _this}, [_ropeTop, _ropeBottom, _dummy], 60] call CBA_fnc_waitAndExecute; +} forEach _deployedRopes; _vehicle setVariable [QGVAR(deployedRopes), [], true]; diff --git a/addons/fastroping/functions/fnc_deployRopes.sqf b/addons/fastroping/functions/fnc_deployRopes.sqf index 71cfbbbc21..eea81a7746 100644 --- a/addons/fastroping/functions/fnc_deployRopes.sqf +++ b/addons/fastroping/functions/fnc_deployRopes.sqf @@ -67,9 +67,7 @@ if (GVAR(requireRopeItems) && {_ropeClass != ""}) then { //deployedRopes format: attachment point, top part of the rope, bottom part of the rope, attachTo helper object, occupied, broken _deployedRopes pushBack [_ropeOrigin, _ropeTop, _ropeBottom, _dummy, _hook, false, false]; - - false -} count _ropeOrigins; +} forEach _ropeOrigins; _vehicle setVariable [QGVAR(deployedRopes), _deployedRopes, true]; _vehicle setVariable [QGVAR(deploymentStage), 3, true]; diff --git a/addons/fastroping/functions/fnc_moduleEquipFRIES.sqf b/addons/fastroping/functions/fnc_moduleEquipFRIES.sqf index 970194ab63..892997bf80 100644 --- a/addons/fastroping/functions/fnc_moduleEquipFRIES.sqf +++ b/addons/fastroping/functions/fnc_moduleEquipFRIES.sqf @@ -22,5 +22,4 @@ private _synchedUnits = synchronizedObjects _module; _x = vehicle _x; }; [_x] call FUNC(equipFRIES); - false -} count _synchedUnits; +} forEach _synchedUnits; diff --git a/addons/fcs/functions/fnc_calculateSolution.sqf b/addons/fcs/functions/fnc_calculateSolution.sqf index b89122f65d..b0cb2ea1c4 100644 --- a/addons/fcs/functions/fnc_calculateSolution.sqf +++ b/addons/fcs/functions/fnc_calculateSolution.sqf @@ -44,8 +44,7 @@ private _turretConfig = [configOf _vehicle, _turret] call EFUNC(common,getTurret if (_x != "this") then { _weaponMagazines append getArray (configFile >> "CfgWeapons" >> _weapon >> _x >> "magazines"); }; - false - } count _muzzles; + } forEach _muzzles; // Fix the `in` operator being case sensitive and BI fucking up the spelling of their own classnames private _weaponMagazinesCheck = _weaponMagazines apply {toLowerANSI _x}; @@ -62,8 +61,7 @@ private _turretConfig = [configOf _vehicle, _turret] call EFUNC(common,getTurret _initSpeed = _initSpeedCoef; }; }; - false - } count (_vehicle weaponsTurret _turret); + } forEach (_vehicle weaponsTurret _turret); private _offset = "ace_fcs" callExtension format ["%1,%2,%3,%4", _initSpeed, _airFriction, _angleTarget, _distance]; _offset = parseNumber _offset; @@ -72,8 +70,7 @@ private _turretConfig = [configOf _vehicle, _turret] call EFUNC(common,getTurret _FCSMagazines pushBack _magazine; _FCSElevation pushBack _offset; }; - false -} count (_vehicle magazinesTurret _turret); +} forEach (_vehicle magazinesTurret _turret); [_vehicle, format ["%1_%2", QGVAR(Distance), _turret], _distance] call EFUNC(common,setVariablePublic); [_vehicle, format ["%1_%2", QGVAR(InitSpeed), _turret], _FCSInitSpeed] call EFUNC(common,setVariablePublic); diff --git a/addons/finger/functions/fnc_keyPress.sqf b/addons/finger/functions/fnc_keyPress.sqf index 59405b57a5..2445986d15 100644 --- a/addons/finger/functions/fnc_keyPress.sqf +++ b/addons/finger/functions/fnc_keyPress.sqf @@ -42,7 +42,7 @@ private _sendFingerToPlayers = []; private _nearbyMen = (ACE_player nearObjects ["CAManBase", (GVAR(maxRange) + 2)]); { _nearbyMen append (crew _x); -} count (ACE_player nearObjects ["StaticWeapon", (GVAR(maxRange) + 2)]); +} forEach (ACE_player nearObjects ["StaticWeapon", (GVAR(maxRange) + 2)]); { if ((((eyePos _x) vectorDistance _playerEyePosASL) < GVAR(maxRange)) && {alive _x} && @@ -53,8 +53,7 @@ private _nearbyMen = (ACE_player nearObjects ["CAManBase", (GVAR(maxRange) + 2)] _sendFingerToPlayers pushBack _x; }; - true -} count _nearbyMen; +} forEach _nearbyMen; TRACE_1("sending finger to",_sendFingerToPlayers); diff --git a/addons/gestures/XEH_postInit.sqf b/addons/gestures/XEH_postInit.sqf index 935b81aa61..5133f48c41 100644 --- a/addons/gestures/XEH_postInit.sqf +++ b/addons/gestures/XEH_postInit.sqf @@ -31,9 +31,7 @@ if (!hasInterface) exitWith {}; [_key, [false, (_key != -1), false]], false ] call CBA_fnc_addKeybind; - - false -} count [ +} forEach [ ["Freeze", 80], // Numpad 2 ["Cover", 81], // Numpad 3 ["Forward", 75], // Numpad 4 diff --git a/addons/goggles/functions/fnc_isInRotorWash.sqf b/addons/goggles/functions/fnc_isInRotorWash.sqf index 8c3b29723d..6784e9db12 100644 --- a/addons/goggles/functions/fnc_isInRotorWash.sqf +++ b/addons/goggles/functions/fnc_isInRotorWash.sqf @@ -36,7 +36,6 @@ private _rotorWash = [false, 0]; _rotorWash set [1, _distance]; }; }; - false -} count (position _unit nearEntities [["Helicopter"], _radius]); +} forEach (position _unit nearEntities [["Helicopter"], _radius]); _rotorWash diff --git a/addons/grenades/functions/fnc_flashbangExplosionEH.sqf b/addons/grenades/functions/fnc_flashbangExplosionEH.sqf index e39a7730ce..6a7b683e6b 100644 --- a/addons/grenades/functions/fnc_flashbangExplosionEH.sqf +++ b/addons/grenades/functions/fnc_flashbangExplosionEH.sqf @@ -85,7 +85,7 @@ _affected = _affected - [ACE_player]; }, [_unit]] call CBA_fnc_waitUntilAndExecute; }; }; -} count _affected; +} forEach _affected; // Affect local player, independently of distance if (hasInterface && {!isNull ACE_player} && {alive ACE_player}) then { diff --git a/addons/hearing/functions/fnc_firedNear.sqf b/addons/hearing/functions/fnc_firedNear.sqf index 0d8596f53b..4dd81862b9 100644 --- a/addons/hearing/functions/fnc_firedNear.sqf +++ b/addons/hearing/functions/fnc_firedNear.sqf @@ -53,7 +53,7 @@ if (isNil "_loudness") then { private _muzzleMagazines = getArray (configFile >> "CfgWeapons" >> _weapon >> _x >> "magazines"); _weaponMagazines append _muzzleMagazines; }; - } count _muzzles; + } forEach _muzzles; { private _ammoType = getText(configFile >> "CfgMagazines" >> _x >> "ammo"); _weaponMagazines set [_forEachIndex, [_x, _ammoType]]; @@ -65,7 +65,7 @@ if (isNil "_loudness") then { if (_ammoType == _ammo) exitWith { _magazine = _magazineType; }; - } count _weaponMagazines; + } forEach _weaponMagazines; if (_magazine == "") then { _loudness = 0; diff --git a/addons/huntir/functions/fnc_cam.sqf b/addons/huntir/functions/fnc_cam.sqf index c306595fc7..411dbfe30e 100644 --- a/addons/huntir/functions/fnc_cam.sqf +++ b/addons/huntir/functions/fnc_cam.sqf @@ -77,8 +77,7 @@ GVAR(no_cams) sort true; if (((getPosVisual _x) select 2) > 20 && {!(_x in GVAR(no_cams))} && {_x getHitPointDamage "HitCamera" < 0.25}) then { GVAR(no_cams) pushBack _x; }; - true - } count GVAR(nearHuntIRs); + } forEach GVAR(nearHuntIRs); { if (((getPosVisual _x) select 2) <= 20 || {!(_x in GVAR(nearHuntIRs))} || {_x getHitPointDamage "HitCamera" >= 0.25}) then { GVAR(no_cams) deleteAt _forEachIndex; diff --git a/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf b/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf index 82235493e6..5ab7af179e 100644 --- a/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf +++ b/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf @@ -67,8 +67,7 @@ if (_insertChildrenCode isNotEqualTo {}) then { if ((count _action) > 0) then { _activeChildren pushBack _action; }; - nil - } count _dynamicChildren; + } forEach _dynamicChildren; }; // Collect children class actions @@ -77,8 +76,7 @@ if (_insertChildrenCode isNotEqualTo {}) then { if ((count _action) > 0) then { _activeChildren pushBack _action; }; - nil -} count _origActionChildren; +} forEach _origActionChildren; // Collect children object actions { @@ -91,8 +89,7 @@ if (_insertChildrenCode isNotEqualTo {}) then { _activeChildren pushBack _action; }; }; - nil -} count GVAR(objectActionList); +} forEach GVAR(objectActionList); // If the original action has no statement, and no children, don't display it diff --git a/addons/interact_menu/functions/fnc_compileMenu.sqf b/addons/interact_menu/functions/fnc_compileMenu.sqf index 5290d8f284..75d759465c 100644 --- a/addons/interact_menu/functions/fnc_compileMenu.sqf +++ b/addons/interact_menu/functions/fnc_compileMenu.sqf @@ -114,8 +114,7 @@ private _recurseFnc = { ]; _actions pushBack _entry; }; - nil - } count (configProperties [_actionsCfg, "isClass _x", true]); + } forEach (configProperties [_actionsCfg, "isClass _x", true]); _actions }; diff --git a/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf b/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf index 75fdb93819..ed3a02dd14 100644 --- a/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf +++ b/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf @@ -84,8 +84,7 @@ private _recurseFnc = { ]; _actions pushBack _entry; }; - nil - } count (configProperties [_actionsCfg, "isClass _x", true]); + } forEach (configProperties [_actionsCfg, "isClass _x", true]); _actions }; diff --git a/addons/interaction/functions/fnc_addPassengerActions.sqf b/addons/interaction/functions/fnc_addPassengerActions.sqf index 112919ee80..a3d8c2eff0 100644 --- a/addons/interaction/functions/fnc_addPassengerActions.sqf +++ b/addons/interaction/functions/fnc_addPassengerActions.sqf @@ -33,7 +33,6 @@ private _actions = []; _x params ["_actionData", "_children"]; _actions pushBack [_actionData, _children, _unit]; - false -} count (_actionTrees select 0 select 1); +} forEach (_actionTrees select 0 select 1); _actions diff --git a/addons/interaction/functions/fnc_getDown.sqf b/addons/interaction/functions/fnc_getDown.sqf index b8f6d7c50d..c834563a43 100644 --- a/addons/interaction/functions/fnc_getDown.sqf +++ b/addons/interaction/functions/fnc_getDown.sqf @@ -28,5 +28,4 @@ private _chance = [0.5, 0.8] select (count weapons _unit > 0); if (count weapons _x == 0 && {random 1 < _chance}) then { [QGVAR(getDown), [_x], [_x]] call CBA_fnc_targetEvent; }; - false -} count (_target nearEntities ["Civilian", SEND_RADIUS]); +} forEach (_target nearEntities ["Civilian", SEND_RADIUS]); diff --git a/addons/interaction/functions/fnc_openDoor.sqf b/addons/interaction/functions/fnc_openDoor.sqf index 2afb438a60..11b9c67c91 100644 --- a/addons/interaction/functions/fnc_openDoor.sqf +++ b/addons/interaction/functions/fnc_openDoor.sqf @@ -35,12 +35,12 @@ if (_animations isEqualTo []) exitWith {}; private _lockedVariable = format ["bis_disabled_%1", _door]; private _lockedVariableAlt = _lockedVariable; // GM Buildings may have door names like door_01 but locking expects door_1 -if ((count _door == 7) && {(_door select [0, 6]) == "door_0"}) then { +if ((count _door == 7) && {(_door select [0, 6]) == "door_0"}) then { _lockedVariableAlt = format ["bis_disabled_door_%1", _door select [6, 1]]; // stip off the leading zero then check both vars }; // Check if the door can be locked aka have locked variable, otherwhise cant lock it -if ((_house animationPhase (_animations select 0) <= 0) && +if ((_house animationPhase (_animations select 0) <= 0) && {(_house getVariable [_lockedVariable, 0] == 1) || {_house getVariable [_lockedVariableAlt, 0] == 1}}) exitWith { private _lockedAnimation = format ["%1_locked_source", _door]; TRACE_3("locked",_house,_lockedAnimation,isClass (configOf _house >> "AnimationSources" >> _lockedAnimation)); @@ -76,7 +76,7 @@ GVAR(usedScrollWheel) = false; if !(GVAR(usedScrollWheel)) then { private _phase = parseNumber (_house animationPhase (_animations select 0) < 0.5); - {_house animate [_x, _phase]; false} count _animations; + {_house animate [_x, _phase]} forEach _animations; }; // Raise local stopped opening event @@ -93,5 +93,5 @@ GVAR(usedScrollWheel) = false; GVAR(usedScrollWheel) = true; }; // do incremental door opening - {_house animate [_x, GVAR(doorTargetPhase)]; false} count _animations; + {_house animate [_x, GVAR(doorTargetPhase)]} forEach _animations; }, 0.1, [_house, _animations, getPosASL ACE_player, CBA_missionTime + 0.2, diag_frameno + 2, _door]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/interaction/functions/fnc_sendAway.sqf b/addons/interaction/functions/fnc_sendAway.sqf index cef314756f..f32a2c36e5 100644 --- a/addons/interaction/functions/fnc_sendAway.sqf +++ b/addons/interaction/functions/fnc_sendAway.sqf @@ -31,5 +31,4 @@ private _chance = [0.5, 0.8] select (count weapons _unit > 0); [QGVAR(sendAway), [_x, _position], [_x]] call CBA_fnc_targetEvent; }; - false -} count (_unit nearEntities ["Civilian", SEND_RADIUS]); +} forEach (_unit nearEntities ["Civilian", SEND_RADIUS]); diff --git a/addons/map/XEH_postInitClient.sqf b/addons/map/XEH_postInitClient.sqf index 72637e3092..ea3ce19464 100644 --- a/addons/map/XEH_postInitClient.sqf +++ b/addons/map/XEH_postInitClient.sqf @@ -73,8 +73,7 @@ GVAR(hasWatch) = true; GVAR(hasWatch) = false; { if (_x isKindOf ["ItemWatch", configFile >> "CfgWeapons"]) exitWith {GVAR(hasWatch) = true;}; - false - } count (assignedItems _unit); + } forEach (assignedItems _unit); }, true] call CBA_fnc_addPlayerEventHandler; diff --git a/addons/markers/functions/fnc_setMarkerJIP.sqf b/addons/markers/functions/fnc_setMarkerJIP.sqf index 8536b90a90..12dfe5de77 100644 --- a/addons/markers/functions/fnc_setMarkerJIP.sqf +++ b/addons/markers/functions/fnc_setMarkerJIP.sqf @@ -49,5 +49,4 @@ TRACE_2("params",_allMapMarkers,_allMapMarkersProperties); _x setMarkerDirLocal _dir; _x setMarkerSizeLocal [_scale, _scale]; }; - false -} count allMapMarkers; +} forEach allMapMarkers; diff --git a/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf b/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf index 63465a6588..ccf89bfdae 100644 --- a/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf +++ b/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf @@ -55,9 +55,7 @@ private _missionRoot = str missionConfigFile select [0, count str missionConfigF ERROR_1("Ambient Sounds: Sound ""%1"" not found.",_x); }; }; - - false -} count _splittedList; +} forEach _splittedList; if (count _ambianceSounds == 0) exitWith {}; { diff --git a/addons/nametags/functions/fnc_onDraw3d.sqf b/addons/nametags/functions/fnc_onDraw3d.sqf index 7e9d156014..f831a3209f 100644 --- a/addons/nametags/functions/fnc_onDraw3d.sqf +++ b/addons/nametags/functions/fnc_onDraw3d.sqf @@ -138,8 +138,7 @@ if (_enabledTagsNearby) then { [ACE_player, _target, _alpha, _distance * 0.026, _drawName, _drawRank, _drawSoundwave] call FUNC(drawNameTagIcon); }; }; - nil - } count _targets; + } forEach _targets; }; END_COUNTER(GVAR(onDraw3d)); diff --git a/addons/rearm/functions/fnc_hasEnoughSupply.sqf b/addons/rearm/functions/fnc_hasEnoughSupply.sqf index c7efb7eca6..8b606bdf6f 100644 --- a/addons/rearm/functions/fnc_hasEnoughSupply.sqf +++ b/addons/rearm/functions/fnc_hasEnoughSupply.sqf @@ -44,7 +44,6 @@ if (GVAR(supply) == 2) exitWith { { _x params ["_magazine", "_rounds"]; if ((_magazine isEqualTo _magazineClass) && (_rounds > 0)) exitWith {_magazinePresent = true; }; - false - } count _magazineSupply; + } forEach _magazineSupply; _magazinePresent }; diff --git a/addons/rearm/functions/fnc_readSupplyCounter.sqf b/addons/rearm/functions/fnc_readSupplyCounter.sqf index 7526fd013a..f298579705 100644 --- a/addons/rearm/functions/fnc_readSupplyCounter.sqf +++ b/addons/rearm/functions/fnc_readSupplyCounter.sqf @@ -58,8 +58,7 @@ if (GVAR(supply) == 1) then { _numChars = _numChars max (count _line); _text = format ["%1
%2", _text, _line]; _supply = _supply + 0.5; - false - } count _magazines; + } forEach _magazines; }; if (_supply > 1.5) then { [[LSTRING(Hint_RemainingAmmo), _text], _supply, _unit, (_numChars/2.9)] call EFUNC(common,displayTextStructured); diff --git a/addons/rearm/functions/fnc_rearmEntireVehicleSuccess.sqf b/addons/rearm/functions/fnc_rearmEntireVehicleSuccess.sqf index d014e9d58d..396b501dab 100644 --- a/addons/rearm/functions/fnc_rearmEntireVehicleSuccess.sqf +++ b/addons/rearm/functions/fnc_rearmEntireVehicleSuccess.sqf @@ -28,8 +28,7 @@ if (isServer) then { } else { [QGVAR(rearmEntireVehicleSuccessLocalEH), [_truck, _vehicle, _x], _turretOwnerID] call CBA_fnc_ownerEvent; }; - false - } count _turrets; + } forEach _turrets; } else { [QGVAR(rearmEntireVehicleSuccessEH), _this] call CBA_fnc_serverEvent; }; diff --git a/addons/repair/functions/fnc_moduleAddSpareParts.sqf b/addons/repair/functions/fnc_moduleAddSpareParts.sqf index bccccdcc22..cb6da371d7 100644 --- a/addons/repair/functions/fnc_moduleAddSpareParts.sqf +++ b/addons/repair/functions/fnc_moduleAddSpareParts.sqf @@ -30,8 +30,7 @@ if (!isNull _logic) then { // Add synchronized objects to list { _list pushBack _x; - nil - } count (synchronizedObjects _logic); + } forEach (synchronizedObjects _logic); if (_list isEqualTo []) exitWith {}; @@ -40,6 +39,5 @@ if (!isNull _logic) then { // Add spare parts { [_x, _amount, _part, true] call FUNC(addSpareParts); - false - } count _list; + } forEach _list; }; diff --git a/addons/respawn/functions/fnc_moduleRallypoint.sqf b/addons/respawn/functions/fnc_moduleRallypoint.sqf index 0af3357201..31ba68f1d6 100644 --- a/addons/respawn/functions/fnc_moduleRallypoint.sqf +++ b/addons/respawn/functions/fnc_moduleRallypoint.sqf @@ -23,7 +23,6 @@ if !(_activated) exitWith {}; { _x setVariable ["ACE_canMoveRallypoint", true]; - false -} count _units; +} forEach _units; INFO("Rallypoint Module Initialized."); diff --git a/addons/safemode/functions/fnc_unlockSafety.sqf b/addons/safemode/functions/fnc_unlockSafety.sqf index 8afc6802c1..10372f1a2e 100644 --- a/addons/safemode/functions/fnc_unlockSafety.sqf +++ b/addons/safemode/functions/fnc_unlockSafety.sqf @@ -56,8 +56,7 @@ if (inputAction "nextWeapon" > 0) then { if (_x == "this") then { _modes pushBack _weapon; }; - nil - } count getArray (configFile >> "CfgWeapons" >> _weapon >> "modes"); + } forEach getArray (configFile >> "CfgWeapons" >> _weapon >> "modes"); // select last mode private _mode = _modes select (count _modes - 1); diff --git a/addons/sandbag/functions/fnc_pickup.sqf b/addons/sandbag/functions/fnc_pickup.sqf index 7c21656ca0..2bcc418f4c 100644 --- a/addons/sandbag/functions/fnc_pickup.sqf +++ b/addons/sandbag/functions/fnc_pickup.sqf @@ -34,7 +34,7 @@ _unit setVariable [QGVAR(isUsingSandbag), true]; // Force physx update { _x setPosASL (getPosASL _x); - } count (_unit nearObjects ["ACE_SandbagObject", 5]); + } forEach (_unit nearObjects ["ACE_SandbagObject", 5]); [_unit, "ACE_Sandbag_empty"] call EFUNC(common,addToInventory); }, [_unit, _sandbag], 1.5] call CBA_fnc_waitAndExecute; diff --git a/addons/slideshow/functions/fnc_addSlideActions.sqf b/addons/slideshow/functions/fnc_addSlideActions.sqf index 8ec804d577..409c724943 100644 --- a/addons/slideshow/functions/fnc_addSlideActions.sqf +++ b/addons/slideshow/functions/fnc_addSlideActions.sqf @@ -34,7 +34,7 @@ private _actions = []; (_this select 2) params ["_objects", "_image", "_currentSlideshow", "_selection"]; { _x setObjectTextureGlobal [_selection, _image] - } count _objects; + } forEach _objects; [QGVAR(slideChanged), [_image, _currentSlideshow]] call CBA_fnc_localEvent; }, {true}, diff --git a/addons/slideshow/functions/fnc_autoTransition.sqf b/addons/slideshow/functions/fnc_autoTransition.sqf index 793b8baf1b..6a18a041c4 100644 --- a/addons/slideshow/functions/fnc_autoTransition.sqf +++ b/addons/slideshow/functions/fnc_autoTransition.sqf @@ -36,7 +36,7 @@ private _image = _images select _currentSlide; // Set slide { _x setObjectTextureGlobal [_selection, _image]; -} count _objects; +} forEach _objects; [QGVAR(slideChanged), [_image, _currentSlideshow]] call CBA_fnc_localEvent; diff --git a/addons/slideshow/functions/fnc_createSlideshow.sqf b/addons/slideshow/functions/fnc_createSlideshow.sqf index 9021a92613..c24d302346 100644 --- a/addons/slideshow/functions/fnc_createSlideshow.sqf +++ b/addons/slideshow/functions/fnc_createSlideshow.sqf @@ -50,7 +50,7 @@ if (isServer) then { // Default images on whiteboards (first image) { _x setObjectTextureGlobal [_selection, _images select 0]; - } count _objects; + } forEach _objects; }; // Number of slideshows (multiple modules support) @@ -89,8 +89,7 @@ if (_duration == 0) then { 2 ] call EFUNC(interact_menu,createAction); [_x, 0, ["ACE_MainActions"], _slidesAction] call EFUNC(interact_menu,addActionToObject); - nil - } count _controllers; + } forEach _controllers; } else { if !(isServer) exitWith {}; diff --git a/addons/slideshow/functions/fnc_moduleInit.sqf b/addons/slideshow/functions/fnc_moduleInit.sqf index 896c64eb50..7e6a78dc95 100644 --- a/addons/slideshow/functions/fnc_moduleInit.sqf +++ b/addons/slideshow/functions/fnc_moduleInit.sqf @@ -37,8 +37,7 @@ private _selection = _logic getVariable ["Selection", 0]; // Objects synced to the module { _objects pushBack _x; - nil -} count (synchronizedObjects _logic); +} forEach (synchronizedObjects _logic); // Prepare with actions [_objects, _controllers, _images, _names, _duration, _setName, _selection] call FUNC(createSlideshow); diff --git a/addons/switchunits/functions/fnc_markAiOnMap.sqf b/addons/switchunits/functions/fnc_markAiOnMap.sqf index 8c7dc4924c..203ba426ff 100644 --- a/addons/switchunits/functions/fnc_markAiOnMap.sqf +++ b/addons/switchunits/functions/fnc_markAiOnMap.sqf @@ -27,7 +27,7 @@ GVAR(AllMarkerNames) = []; // delete markers { deleteMarkerLocal _x; - } count GVAR(AllMarkerNames); + } forEach GVAR(AllMarkerNames); // reset the array GVAR(AllMarkerNames) = []; @@ -58,8 +58,7 @@ GVAR(AllMarkerNames) = []; }; GVAR(AllMarkerNames) pushBack _markerName; - nil }; - } count allUnits; + } forEach allUnits; }; }, 1.5, [_sidesToShow]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/tacticalladder/functions/fnc_positionTL.sqf b/addons/tacticalladder/functions/fnc_positionTL.sqf index 1ea19e737b..6d6f78f1a3 100644 --- a/addons/tacticalladder/functions/fnc_positionTL.sqf +++ b/addons/tacticalladder/functions/fnc_positionTL.sqf @@ -26,7 +26,7 @@ params ["_unit", "_ladder"]; { _ladder animate [_x, 0]; -} count __ANIMS; +} forEach __ANIMS; [_unit, "amovpercmstpslowwrfldnon_player_idlesteady03", 2] call EFUNC(common,doAnimation); @@ -35,7 +35,7 @@ _ladder attachTo [_unit, [0, 0.75, 0], ""]; // Position ladder in front of playe _ladder animate ["rotate", 0]; { _ladder animate [_x, 1]; -} count ["extract_1", "extract_2", "extract_3"]; // Extract ladder at head height (extract_3) +} forEach ["extract_1", "extract_2", "extract_3"]; // Extract ladder at head height (extract_3) GVAR(ladder) = _ladder; GVAR(cancelTime) = CBA_missionTime + 1; // Workaround to prevent accidental canceling diff --git a/addons/tripod/functions/fnc_adjust.sqf b/addons/tripod/functions/fnc_adjust.sqf index db31a0733f..b7cdc842e9 100644 --- a/addons/tripod/functions/fnc_adjust.sqf +++ b/addons/tripod/functions/fnc_adjust.sqf @@ -35,8 +35,7 @@ GVAR(adjustPFH) = [{ { _tripod animate [_x, 1 - GVAR(height)]; - } count ["slide_down_tripod", "retract_leg_1", "retract_leg_2", "retract_leg_3"]; - + } forEach ["slide_down_tripod", "retract_leg_1", "retract_leg_2", "retract_leg_3"]; }, 0, [_unit, _tripod]] call CBA_fnc_addPerFrameHandler; [_unit, "blockThrow", QUOTE(ADDON), true] call EFUNC(common,statusEffect_set); diff --git a/addons/tripod/functions/fnc_place.sqf b/addons/tripod/functions/fnc_place.sqf index ecefe12784..0109990ded 100644 --- a/addons/tripod/functions/fnc_place.sqf +++ b/addons/tripod/functions/fnc_place.sqf @@ -34,7 +34,7 @@ if (stance _unit == "STAND") then { { _tripod animate [_x, 0.5]; - } count ["slide_down_tripod", "retract_leg_1", "retract_leg_2", "retract_leg_3"]; + } forEach ["slide_down_tripod", "retract_leg_1", "retract_leg_2", "retract_leg_3"]; [{ (_this select 0) params ["_tripod", "_direction", "_position"]; diff --git a/addons/weaponselect/XEH_preInit.sqf b/addons/weaponselect/XEH_preInit.sqf index 25d6b9b5d5..92ba1b06a6 100644 --- a/addons/weaponselect/XEH_preInit.sqf +++ b/addons/weaponselect/XEH_preInit.sqf @@ -21,10 +21,8 @@ GVAR(GrenadesNonFrag) = []; private _explosive = getNumber (configFile >> "CfgAmmo" >> _ammo >> "explosive"); ([GVAR(GrenadesFrag), GVAR(GrenadesNonFrag)] select (_explosive == 0)) pushBack _x; - false - } count _magazines; - false -} count getArray (configFile >> "CfgWeapons" >> "Throw" >> "muzzles"); + } forEach _magazines; +} forEach getArray (configFile >> "CfgWeapons" >> "Throw" >> "muzzles"); #include "initSettings.inc.sqf" diff --git a/addons/weaponselect/functions/fnc_selectNextGrenade.sqf b/addons/weaponselect/functions/fnc_selectNextGrenade.sqf index 195bbc326b..ff111a93f6 100644 --- a/addons/weaponselect/functions/fnc_selectNextGrenade.sqf +++ b/addons/weaponselect/functions/fnc_selectNextGrenade.sqf @@ -37,8 +37,7 @@ private _grenades = []; if (_x in _magazines) then { _grenades pushBack _x; }; - false -} count ([GVAR(GrenadesAll), GVAR(GrenadesFrag), GVAR(GrenadesNonFrag)] select _type); +} forEach ([GVAR(GrenadesAll), GVAR(GrenadesFrag), GVAR(GrenadesNonFrag)] select _type); // abort if no grenades are available if (_grenades isEqualTo []) exitWith {false}; diff --git a/addons/weather/functions/fnc_calculateWindSpeed.sqf b/addons/weather/functions/fnc_calculateWindSpeed.sqf index 2ae1d94eec..cd73fac358 100644 --- a/addons/weather/functions/fnc_calculateWindSpeed.sqf +++ b/addons/weather/functions/fnc_calculateWindSpeed.sqf @@ -58,8 +58,7 @@ if (_terrainEffectEnabled) then { if (!(terrainIntersectASL [_position, _position vectorAdd _windSource])) exitWith { _newWindSpeed = cos(_x * 9) * _windSpeed; }; - nil - } count [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; + } forEach [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; _windSpeed = _newWindSpeed; }; }; @@ -81,8 +80,7 @@ if (_obstacleEffectEnabled) then { if (!(lineIntersects [_position, _position vectorAdd _windSource])) exitWith { _newWindSpeed = cos(_x * 2) * _windSpeed; }; - nil - } count [0, 5, 10, 15, 20, 25, 30, 35, 40, 45]; + } forEach [0, 5, 10, 15, 20, 25, 30, 35, 40, 45]; _windSpeed = _newWindSpeed; }; }; From dce7da60c963b881aafb9c5735b2c078f958e422 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Sat, 6 Apr 2024 20:57:08 +0200 Subject: [PATCH 077/132] General - Change `count` to `isEqualTo` where appropriate (#9921) count -> isEqualTo --- addons/ai/functions/fnc_garrison.sqf | 4 ++-- addons/common/functions/fnc_switchToGroupSide.sqf | 2 +- .../functions/fnc_collectActiveActionTree.sqf | 6 +++--- addons/interaction/functions/fnc_getDown.sqf | 4 ++-- addons/interaction/functions/fnc_sendAway.sqf | 4 ++-- addons/laser/functions/fnc_seekerFindLaserSpot.sqf | 2 +- .../functions/fnc_interpolatePoints.sqf | 2 +- .../missileguidance/functions/fnc_seekerType_ARH.sqf | 3 +-- .../functions/fnc_moduleAmbianceSound.sqf | 4 ++-- .../functions/fnc_loadCoolestSpareBarrel.sqf | 2 +- .../fnc_sendSpareBarrelsTemperaturesHint.sqf | 2 +- addons/rangecard/functions/fnc_updateRangeCard.sqf | 2 +- addons/repair/functions/fnc_canRepair.sqf | 2 +- addons/repair/functions/fnc_getHitPointString.sqf | 12 ++---------- addons/repair/functions/fnc_repair.sqf | 2 +- addons/spottingscope/CfgVehicles.hpp | 2 +- addons/switchunits/functions/fnc_switchUnit.sqf | 2 +- addons/vehicle_damage/functions/fnc_processHit.sqf | 2 +- .../vehiclelock/functions/fnc_addKeyForVehicle.sqf | 2 +- .../weaponselect/functions/fnc_fireSmokeLauncher.sqf | 2 +- addons/zeus/functions/fnc_moduleSuppressiveFire.sqf | 2 +- 21 files changed, 28 insertions(+), 37 deletions(-) diff --git a/addons/ai/functions/fnc_garrison.sqf b/addons/ai/functions/fnc_garrison.sqf index 0f9613dd9f..4b8f84fce6 100644 --- a/addons/ai/functions/fnc_garrison.sqf +++ b/addons/ai/functions/fnc_garrison.sqf @@ -33,7 +33,7 @@ if (_startingPos isEqualTo [0,0,0]) exitWith { [LSTRING(GarrisonInvalidPosition)] call EFUNC(common,displayTextStructured); }; -if (count _unitsArray == 0 || {isNull (_unitsArray select 0)}) exitWith { +if (_unitsArray isEqualTo [] || {isNull (_unitsArray select 0)}) exitWith { TRACE_1("fnc_garrison: Units error",_unitsArray); [LSTRING(GarrisonNoUnits)] call EFUNC(common,displayTextStructured); }; @@ -43,7 +43,7 @@ if (_fillingRadius >= 50) then { _buildings = [_buildings] call CBA_fnc_shuffle; }; -if (count _buildings == 0) exitWith { +if (_buildings isEqualTo []) exitWith { TRACE_1("fnc_garrison: Building error",_buildings); [LSTRING(GarrisonNoBuilding)] call EFUNC(common,displayTextStructured); }; diff --git a/addons/common/functions/fnc_switchToGroupSide.sqf b/addons/common/functions/fnc_switchToGroupSide.sqf index 94d8c52701..1a3e588855 100644 --- a/addons/common/functions/fnc_switchToGroupSide.sqf +++ b/addons/common/functions/fnc_switchToGroupSide.sqf @@ -58,7 +58,7 @@ if (_switch) then { private _newGroup = createGroup (_x select 1); [_unit] joinSilent _newGroup; }; - if (count units _currentGroup == 0) then { + if (units _currentGroup isEqualTo []) then { deleteGroup _currentGroup; }; _previousGroupsList set [_forEachIndex, objNull]; diff --git a/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf b/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf index 5ab7af179e..8bf8909288 100644 --- a/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf +++ b/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf @@ -64,7 +64,7 @@ if (_insertChildrenCode isNotEqualTo {}) then { // Collect dynamic children class actions { private _action = [_x select 2, _x, _fullPath, _distanceToBasePoint] call FUNC(collectActiveActionTree); - if ((count _action) > 0) then { + if (_action isNotEqualTo []) then { _activeChildren pushBack _action; }; } forEach _dynamicChildren; @@ -73,7 +73,7 @@ if (_insertChildrenCode isNotEqualTo {}) then { // Collect children class actions { private _action = [_object, _x, _fullPath, _distanceToBasePoint] call FUNC(collectActiveActionTree); - if ((count _action) > 0) then { + if (_action isNotEqualTo []) then { _activeChildren pushBack _action; }; } forEach _origActionChildren; @@ -85,7 +85,7 @@ if (_insertChildrenCode isNotEqualTo {}) then { // Check if the action is children of the original action if (_pPath isEqualTo _fullPath) then { private _action = [_object, [_actionData,[]], _fullPath, _distanceToBasePoint] call FUNC(collectActiveActionTree); - if ((count _action) > 0) then { + if (_action isNotEqualTo []) then { _activeChildren pushBack _action; }; }; diff --git a/addons/interaction/functions/fnc_getDown.sqf b/addons/interaction/functions/fnc_getDown.sqf index c834563a43..531cd23c54 100644 --- a/addons/interaction/functions/fnc_getDown.sqf +++ b/addons/interaction/functions/fnc_getDown.sqf @@ -22,10 +22,10 @@ params ["_unit", "_target"]; [_unit, "GestureGo"] call EFUNC(common,doGesture); -private _chance = [0.5, 0.8] select (count weapons _unit > 0); +private _chance = [0.5, 0.8] select (weapons _unit isNotEqualTo []); { - if (count weapons _x == 0 && {random 1 < _chance}) then { + if (weapons _x isEqualTo [] && {random 1 < _chance}) then { [QGVAR(getDown), [_x], [_x]] call CBA_fnc_targetEvent; }; } forEach (_target nearEntities ["Civilian", SEND_RADIUS]); diff --git a/addons/interaction/functions/fnc_sendAway.sqf b/addons/interaction/functions/fnc_sendAway.sqf index f32a2c36e5..b986ea2661 100644 --- a/addons/interaction/functions/fnc_sendAway.sqf +++ b/addons/interaction/functions/fnc_sendAway.sqf @@ -22,10 +22,10 @@ params ["_unit"]; [_unit, "GestureGo"] call EFUNC(common,doGesture); -private _chance = [0.5, 0.8] select (count weapons _unit > 0); +private _chance = [0.5, 0.8] select (weapons _unit isNotEqualTo []); { - if (count weapons _x == 0 && {random 1 < _chance}) then { + if (weapons _x isEqualTo [] && {random 1 < _chance}) then { private _position = getPosASL _unit vectorAdd (eyeDirection _unit vectorMultiply SEND_DISTANCE); _position set [2, 0]; diff --git a/addons/laser/functions/fnc_seekerFindLaserSpot.sqf b/addons/laser/functions/fnc_seekerFindLaserSpot.sqf index d1e4626d53..aa3e43d35a 100644 --- a/addons/laser/functions/fnc_seekerFindLaserSpot.sqf +++ b/addons/laser/functions/fnc_seekerFindLaserSpot.sqf @@ -103,7 +103,7 @@ private _finalOwner = objNull; TRACE_2("",count _spots,_spots); -if ((count _spots) > 0) then { +if (_spots isNotEqualTo []) then { private _bucketList = nil; private _bucketPos = nil; private _c = 0; diff --git a/addons/medical_damage/functions/fnc_interpolatePoints.sqf b/addons/medical_damage/functions/fnc_interpolatePoints.sqf index a84f079f30..b343417837 100644 --- a/addons/medical_damage/functions/fnc_interpolatePoints.sqf +++ b/addons/medical_damage/functions/fnc_interpolatePoints.sqf @@ -19,7 +19,7 @@ */ params ["_input", "_points", ["_randomRound", false]]; -if (count _points < 1) exitWith { +if (_points isEqualTo []) exitWith { //TODO: sensible default/error value 0 }; diff --git a/addons/missileguidance/functions/fnc_seekerType_ARH.sqf b/addons/missileguidance/functions/fnc_seekerType_ARH.sqf index 20571e3d65..54e487a9a0 100644 --- a/addons/missileguidance/functions/fnc_seekerType_ARH.sqf +++ b/addons/missileguidance/functions/fnc_seekerType_ARH.sqf @@ -72,7 +72,7 @@ if (_isActive || { CBA_missionTime >= _timeWhenActive }) then { }; _nearestObjects = _nearestObjects select { !isNull _x }; // Select closest object to the expected position to be the current radar target - if ((count _nearestObjects) <= 0) exitWith { + if (_nearestObjects isEqualTo []) exitWith { _projectile setMissileTarget objNull; _searchPos }; @@ -117,4 +117,3 @@ if !(isNull _target) then { _launchParams set [0, _target]; _expectedTargetPos - diff --git a/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf b/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf index ccf89bfdae..88e2ba02d5 100644 --- a/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf +++ b/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf @@ -57,7 +57,7 @@ private _missionRoot = str missionConfigFile select [0, count str missionConfigF }; } forEach _splittedList; -if (count _ambianceSounds == 0) exitWith {}; +if (_ambianceSounds isEqualTo []) exitWith {}; { if ((_x find ".") == -1) then { _ambianceSounds set [_forEachIndex, _x + ".wss"]; @@ -80,7 +80,7 @@ TRACE_1("",_ambianceSounds); private _allUnits = if (isMultiplayer) then {playableUnits} else {[ACE_player]}; // Check if there are enough players to even start playing this sound. - if (count _allUnits > 0) then { + if (_allUnits isNotEqualTo []) then { // find the position from which we are going to play this sound from. private _newPosASL = if (_followPlayers) then { // Select a target unit at random. diff --git a/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf b/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf index 29b7191471..a5fb95cf31 100644 --- a/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf +++ b/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf @@ -31,7 +31,7 @@ if (_weaponBarrelClass == "") then { // Find all spare barrel the player has private _allBarrels = [_assistant, _weaponBarrelClass] call CBA_fnc_getMagazineIndex; TRACE_1("_allBarrels",_allBarrels); -if ((count _allBarrels) < 1) exitWith {}; +if (_allBarrels isEqualTo []) exitWith {}; // Determine which on is coolest private _coolestTemp = 10000; diff --git a/addons/overheating/functions/fnc_sendSpareBarrelsTemperaturesHint.sqf b/addons/overheating/functions/fnc_sendSpareBarrelsTemperaturesHint.sqf index 9204b58124..5f75423f2e 100644 --- a/addons/overheating/functions/fnc_sendSpareBarrelsTemperaturesHint.sqf +++ b/addons/overheating/functions/fnc_sendSpareBarrelsTemperaturesHint.sqf @@ -32,7 +32,7 @@ if (_weaponBarrelClass == "") then { }; private _allBarrels = [_unit, _weaponBarrelClass] call CBA_fnc_getMagazineIndex; TRACE_1("_allBarrels",_allBarrels); -if ((count _allBarrels) < 1) exitWith {}; +if (_allBarrels isEqualTo []) exitWith {}; // Determine the temp of each barrel private _temps = []; diff --git a/addons/rangecard/functions/fnc_updateRangeCard.sqf b/addons/rangecard/functions/fnc_updateRangeCard.sqf index 999dfc5a2e..c2c8673844 100644 --- a/addons/rangecard/functions/fnc_updateRangeCard.sqf +++ b/addons/rangecard/functions/fnc_updateRangeCard.sqf @@ -100,7 +100,7 @@ private _barrelLength = _weaponConfig select 2; private _muzzleVelocity = 0; private _bc = 0; -if (count (_ammoConfig select 6) > 0) then { +if ((_ammoConfig select 6) isNotEqualTo []) then { _bc = (_ammoConfig select 6) select 0; }; private _transonicStabilityCoef = _ammoConfig select 4; diff --git a/addons/repair/functions/fnc_canRepair.sqf b/addons/repair/functions/fnc_canRepair.sqf index 264baf9ef0..f1f4aa7b7c 100644 --- a/addons/repair/functions/fnc_canRepair.sqf +++ b/addons/repair/functions/fnc_canRepair.sqf @@ -38,7 +38,7 @@ private _engineerRequired = if (isNumber (_config >> "requiredEngineer")) then { if !([_caller, _engineerRequired] call FUNC(isEngineer)) exitWith {false}; private _items = _config call FUNC(getRepairItems); -if (count _items > 0 && {!([_caller, _items] call FUNC(hasItems))}) exitWith {false}; +if (_items isNotEqualTo [] && {!([_caller, _items] call FUNC(hasItems))}) exitWith {false}; private _return = true; if (getText (_config >> "condition") != "") then { diff --git a/addons/repair/functions/fnc_getHitPointString.sqf b/addons/repair/functions/fnc_getHitPointString.sqf index 35270887ad..23a57f8895 100644 --- a/addons/repair/functions/fnc_getHitPointString.sqf +++ b/addons/repair/functions/fnc_getHitPointString.sqf @@ -20,17 +20,9 @@ */ params ["_hitPoint", "_textLocalized", "_textDefault", ["_trackArray", []]]; +_trackArray params [["_trackNames", []], ["_trackStrings", []], ["_trackAmount", []]]; -private _track = (count _trackArray > 0); -private _trackNames = []; -private _trackStrings = []; -private _trackAmount = []; - -if (_track) then { - _trackNames = _trackArray select 0; - _trackStrings = _trackArray select 1; - _trackAmount = _trackArray select 2; -}; +private _track = _trackArray isNotEqualTo []; // Prepare first part of the string from stringtable //IGNORE_STRING_WARNING(str_ace_repair_hit); diff --git a/addons/repair/functions/fnc_repair.sqf b/addons/repair/functions/fnc_repair.sqf index 9e6a692fef..86ff191000 100644 --- a/addons/repair/functions/fnc_repair.sqf +++ b/addons/repair/functions/fnc_repair.sqf @@ -44,7 +44,7 @@ if ((isEngineOn _target) && {!GVAR(autoShutOffEngineWhenStartingRepair)}) exitWi }; private _items = _config call FUNC(getRepairItems); -if (count _items > 0 && {!([_caller, _items] call FUNC(hasItems))}) exitWith {false}; +if (_items isNotEqualTo [] && {!([_caller, _items] call FUNC(hasItems))}) exitWith {false}; private _return = true; if (getText (_config >> "condition") != "") then { diff --git a/addons/spottingscope/CfgVehicles.hpp b/addons/spottingscope/CfgVehicles.hpp index 6be6d70d63..93fa00a7bc 100644 --- a/addons/spottingscope/CfgVehicles.hpp +++ b/addons/spottingscope/CfgVehicles.hpp @@ -48,7 +48,7 @@ class CfgVehicles { selection = ""; displayName = CSTRING(PickUp); distance = 5; - condition = QUOTE((alive _target) && (count (crew _target) == 0)); + condition = QUOTE((alive _target) && {(crew _target) isEqualTo []}); statement = QUOTE([ARR_2(_target,_player)] call FUNC(pickup)); showDisabled = 0; exceptions[] = {}; diff --git a/addons/switchunits/functions/fnc_switchUnit.sqf b/addons/switchunits/functions/fnc_switchUnit.sqf index 6fc8fa35c9..135088d243 100644 --- a/addons/switchunits/functions/fnc_switchUnit.sqf +++ b/addons/switchunits/functions/fnc_switchUnit.sqf @@ -27,7 +27,7 @@ if (GVAR(EnableSafeZone)) then { private _allNearestPlayers = [position _unit, GVAR(SafeZoneRadius)] call FUNC(nearestPlayers); private _nearestEnemyPlayers = _allNearestPlayers select {((side GVAR(OriginalGroup)) getFriend side _x < 0.6) && !(_x getVariable [QGVAR(IsPlayerControlled), false])}; - if (count _nearestEnemyPlayers > 0) exitWith { + if (_nearestEnemyPlayers isNotEqualTo []) exitWith { _leave = true; }; }; diff --git a/addons/vehicle_damage/functions/fnc_processHit.sqf b/addons/vehicle_damage/functions/fnc_processHit.sqf index 17575e8f38..73e70bbf57 100644 --- a/addons/vehicle_damage/functions/fnc_processHit.sqf +++ b/addons/vehicle_damage/functions/fnc_processHit.sqf @@ -124,7 +124,7 @@ private _chanceOfDetonation = 0; private _explosiveAmmoCount = 0; private _nonExplosiveAmmoCount = 0; -if (count (_currentVehicleAmmo select 0) isNotEqualTo 0) then { +if ((_currentVehicleAmmo select 0) isNotEqualTo []) then { private _magConfig = configFile >> "CfgMagazines"; private _ammoConfig = configFile >> "CfgAmmo"; private _countOfExplodableAmmo = 0; diff --git a/addons/vehiclelock/functions/fnc_addKeyForVehicle.sqf b/addons/vehiclelock/functions/fnc_addKeyForVehicle.sqf index d730589b36..6461e7fca2 100644 --- a/addons/vehiclelock/functions/fnc_addKeyForVehicle.sqf +++ b/addons/vehiclelock/functions/fnc_addKeyForVehicle.sqf @@ -30,7 +30,7 @@ if (_useCustom) then { private _previousMags = magazinesDetail _unit; _unit addMagazine ["ACE_key_customKeyMagazine", 1]; //addMagazine array has global effects private _newMags = (magazinesDetail _unit) - _previousMags; - if ((count _newMags) == 0) exitWith {ERROR("failed to add magazine (inventory full?)");}; + if (_newMags isEqualTo []) exitWith {ERROR("failed to add magazine (inventory full?)");}; private _keyMagazine = _newMags select 0; TRACE_2("setting up key on server",_veh,_keyMagazine); //Have the server run add the key to the vehicle's key array: diff --git a/addons/weaponselect/functions/fnc_fireSmokeLauncher.sqf b/addons/weaponselect/functions/fnc_fireSmokeLauncher.sqf index 16bac855cc..8b9fcf94b7 100644 --- a/addons/weaponselect/functions/fnc_fireSmokeLauncher.sqf +++ b/addons/weaponselect/functions/fnc_fireSmokeLauncher.sqf @@ -22,7 +22,7 @@ private _weapons = _vehicle weaponsTurret _turret; if ( count _weapons > 1 - || {count _weapons > 0 && {!(_weapons select 0 in ["SmokeLauncher", "BWA3_SmokeLauncher"])}} // @todo somebody might use custom smoke launcher weapons aswell, maybe ... + || {_weapons isNotEqualTo [] && {!(_weapons select 0 in ["SmokeLauncher", "BWA3_SmokeLauncher"])}} // @todo somebody might use custom smoke launcher weapons aswell, maybe ... ) then { //This doesn't work reliably for vehilces with additional weapons for the commander. Select smoke launcher instead. diff --git a/addons/zeus/functions/fnc_moduleSuppressiveFire.sqf b/addons/zeus/functions/fnc_moduleSuppressiveFire.sqf index 2a013fa4c2..a624b7dded 100644 --- a/addons/zeus/functions/fnc_moduleSuppressiveFire.sqf +++ b/addons/zeus/functions/fnc_moduleSuppressiveFire.sqf @@ -69,7 +69,7 @@ if ([_unit] call EFUNC(common,isPlayer)) exitWith { } else { // Direct fire - Get a target position that will work private _lis = lineIntersectsSurfaces [eyePos _unit, _targetASL, _unit, _vehicle]; - if ((count _lis) > 0) then { // If point is hidden, unit won't fire, do a ray cast to find where they should shoot at + if (_lis isNotEqualTo []) then { // If point is hidden, unit won't fire, do a ray cast to find where they should shoot at _targetASL = ((_lis select 0) select 0); TRACE_1("using ray cast pos",_mousePosASL distance _targetASL); }; From 04ac1d88089efc573b9564e2100096b86a8b5455 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Sun, 7 Apr 2024 03:04:52 +0200 Subject: [PATCH 078/132] Arsenal - Fix #9916 (#9932) --- addons/arsenal/functions/fnc_baseAttachment.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/arsenal/functions/fnc_baseAttachment.sqf b/addons/arsenal/functions/fnc_baseAttachment.sqf index cf0cbde134..968fd05d9b 100644 --- a/addons/arsenal/functions/fnc_baseAttachment.sqf +++ b/addons/arsenal/functions/fnc_baseAttachment.sqf @@ -28,8 +28,8 @@ _item = configName _config; // If the switch config entries are inherited, ignore if ( - (inheritsFrom (_config >> "MRT_SwitchItemNextClass") isNotEqualTo (_config >> "MRT_SwitchItemNextClass")) || - {inheritsFrom (_config >> "MRT_SwitchItemPrevClass") isNotEqualTo (_config >> "MRT_SwitchItemPrevClass")} + (inheritsFrom (_config >> "MRT_SwitchItemNextClass") isNotEqualTo _config) || + {inheritsFrom (_config >> "MRT_SwitchItemPrevClass") isNotEqualTo _config} ) exitWith { _item // return }; From f5e8e06c24ed4ee1c4692067fe9e6f302cadae38 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Sun, 7 Apr 2024 03:11:09 +0200 Subject: [PATCH 079/132] Interact Menu - Add `nil` handling for condition (#9922) Co-authored-by: PabstMirror --- .../functions/fnc_collectActiveActionTree.sqf | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf b/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf index 8bf8909288..ebb02caa11 100644 --- a/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf +++ b/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf @@ -43,12 +43,21 @@ _origActionData params [ "_distance" ]; +private _result = [_target, ACE_player, _customParams] call _conditionCode; + +// Handle nil as false +if (isNil "_result") then { + ERROR_1("Action [%1] bad condition return",_actionName); + + _result = false; +}; + // Return nothing if the action itself is not active -if !([_target, ACE_player, _customParams] call _conditionCode) exitWith { +if (!_result) exitWith { [] }; -// Return nothing if the action is to far (including checking sub actions) [DISABLED FOR NOW ref #2196] +// Return nothing if the action is too far (including checking sub actions) [DISABLED FOR NOW ref #2196] // if (_distanceToBasePoint > _distance) exitWith { // [] // }; From 5ca3465b8a931698d94a1b0a281f085421ca8bc4 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sat, 6 Apr 2024 20:11:51 -0500 Subject: [PATCH 080/132] Medical Treatment - Only create litter on empty container (#9924) --- .../medical_treatment/functions/fnc_treatment.sqf | 4 ++-- .../functions/fnc_treatmentSuccess.sqf | 6 ++++-- addons/medical_treatment/functions/fnc_useItem.sqf | 14 ++++++++------ 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/addons/medical_treatment/functions/fnc_treatment.sqf b/addons/medical_treatment/functions/fnc_treatment.sqf index b7ebbfd8b0..4222d69a4b 100644 --- a/addons/medical_treatment/functions/fnc_treatment.sqf +++ b/addons/medical_treatment/functions/fnc_treatment.sqf @@ -52,7 +52,7 @@ private _userAndItem = if (GET_NUMBER_ENTRY(_config >> "consumeItem") == 1) then [objNull, ""]; // Treatment does not require items to be consumed }; -_userAndItem params ["_itemUser", "_usedItem"]; +_userAndItem params ["_itemUser", "_usedItem", "_createLitter"]; private _isInZeus = !isNull findDisplay 312; @@ -161,7 +161,7 @@ if (_callbackProgress isEqualTo {}) then { [ _treatmentTime, - [_medic, _patient, _bodyPart, _classname, _itemUser, _usedItem], + [_medic, _patient, _bodyPart, _classname, _itemUser, _usedItem, _createLitter], FUNC(treatmentSuccess), FUNC(treatmentFailure), getText (_config >> "displayNameProgress"), diff --git a/addons/medical_treatment/functions/fnc_treatmentSuccess.sqf b/addons/medical_treatment/functions/fnc_treatmentSuccess.sqf index 96f0d11ead..a400fa98dc 100644 --- a/addons/medical_treatment/functions/fnc_treatmentSuccess.sqf +++ b/addons/medical_treatment/functions/fnc_treatmentSuccess.sqf @@ -11,6 +11,7 @@ * 3: Treatment * 4: Item User * 5: Used Item + * 6: Create Litter * * Return Value: * None @@ -19,7 +20,8 @@ */ params ["_args"]; -_args params ["_medic", "_patient", "_bodyPart", "_classname", "_itemUser", "_usedItem"]; +_args params ["_medic", "_patient", "_bodyPart", "_classname", "_itemUser", "_usedItem", "_createLitter"]; +TRACE_7("",_medic,_patient,_bodyPart,_classname,_itemUser,_usedItem,_createLitter); // Switch medic to end animation immediately private _endInAnim = _medic getVariable QGVAR(endInAnim); @@ -45,7 +47,7 @@ GET_FUNCTION(_callbackSuccess,configFile >> QGVAR(actions) >> _classname >> "cal _args call _callbackSuccess; // Call litter creation handler -_args call FUNC(createLitter); +if (_createLitter) then { _args call FUNC(createLitter); }; // Emit local event for medical API ["ace_treatmentSucceded", [_medic, _patient, _bodyPart, _classname, _itemUser, _usedItem]] call CBA_fnc_localEvent; diff --git a/addons/medical_treatment/functions/fnc_useItem.sqf b/addons/medical_treatment/functions/fnc_useItem.sqf index 9bba3d1c90..33ac9f98f4 100644 --- a/addons/medical_treatment/functions/fnc_useItem.sqf +++ b/addons/medical_treatment/functions/fnc_useItem.sqf @@ -10,7 +10,7 @@ * 2: Items * * Return Value: - * User and Item + * User and Item and Litter Created * * Example: * [player, cursorObject, ["bandage"]] call ace_medical_treatment_fnc_useItem @@ -40,22 +40,24 @@ private _useOrder = [[_patient, _medic], [_medic, _patient], [_medic]] select GV switch (true) do { case (_x in _vehicleItems): { _unitVehicle addItemCargoGlobal [_x, -1]; - [_unit, _x] breakOut "Main"; + [_unit, _x, false] breakOut "Main"; }; case (_x in _vehicleMagazines): { [_unitVehicle, _x] call EFUNC(common,adjustMagazineAmmo); - [_unit, _x] breakOut "Main"; + [_unit, _x, false] breakOut "Main"; }; case (_x in _unitItems): { _unit removeItem _x; - [_unit, _x] breakOut "Main"; + [_unit, _x, true] breakOut "Main"; }; case (_x in _unitMagazines): { + private _magsStart = count magazines _unit; [_unit, _x] call EFUNC(common,adjustMagazineAmmo); - [_unit, _x] breakOut "Main"; + private _magsEnd = count magazines _unit; + [_unit, _x, (_magsEnd < _magsStart)] breakOut "Main"; }; }; } forEach _items; } forEach _useOrder; -[objNull, ""] +[objNull, "", false] From 431c4d616e008dc5b8e902c16f21dfd66aee5604 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sat, 6 Apr 2024 20:12:06 -0500 Subject: [PATCH 081/132] Casing - Move model lookup to cartridge config (#9893) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> Co-authored-by: Jouni Järvinen Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> --- addons/casings/CfgVehicles.hpp | 6 +++ addons/casings/config.cpp | 1 + addons/casings/functions/fnc_createCasing.sqf | 45 +++++++++---------- addons/compat_cup_weapons/config.cpp | 2 +- 4 files changed, 29 insertions(+), 25 deletions(-) create mode 100644 addons/casings/CfgVehicles.hpp diff --git a/addons/casings/CfgVehicles.hpp b/addons/casings/CfgVehicles.hpp new file mode 100644 index 0000000000..73d06bc0ac --- /dev/null +++ b/addons/casings/CfgVehicles.hpp @@ -0,0 +1,6 @@ +class CfgVehicles { + class FxCartridge; + class FxCartridge_65_caseless: FxCartridge { + GVAR(model) = ""; // note: the vanilla 6.5 caseless don't actually use this, just being safe + }; +}; diff --git a/addons/casings/config.cpp b/addons/casings/config.cpp index 815048a082..29d0b7cb89 100644 --- a/addons/casings/config.cpp +++ b/addons/casings/config.cpp @@ -15,3 +15,4 @@ class CfgPatches { }; #include "CfgEventHandlers.hpp" +#include "CfgVehicles.hpp" diff --git a/addons/casings/functions/fnc_createCasing.sqf b/addons/casings/functions/fnc_createCasing.sqf index b21e568100..fe35ad5945 100644 --- a/addons/casings/functions/fnc_createCasing.sqf +++ b/addons/casings/functions/fnc_createCasing.sqf @@ -20,33 +20,30 @@ params ["_unit", "", "", "", "_ammo"]; if (!isNull objectParent _unit) exitWith {}; -private _modelPath = GVAR(cachedCasings) get _ammo; -if (isNil "_modelPath") then { +private _modelPath = GVAR(cachedCasings) getOrDefaultCall [_ammo, { private _cartridge = getText (configFile >> "CfgAmmo" >> _ammo >> "cartridge"); - //Default cartridge is a 5.56mm model - _modelPath = switch (_cartridge) do { - case "FxCartridge_9mm": { "A3\Weapons_f\ammo\cartridge_small.p3d" }; - case "FxCartridge_65": { "A3\weapons_f\ammo\cartridge_65.p3d" }; - case "FxCartridge_762": { "A3\weapons_f\ammo\cartridge_762.p3d" }; - case "FxCartridge_762x39": { "A3\weapons_f_enoch\ammo\cartridge_762x39.p3d" }; - case "FxCartridge_93x64_Ball": { "A3\Weapons_F_Mark\Ammo\cartridge_93x64.p3d" }; - case "FxCartridge_338_Ball": { "A3\Weapons_F_Mark\Ammo\cartridge_338_LM.p3d" }; - case "FxCartridge_338_NM": { "A3\Weapons_F_Mark\Ammo\cartridge_338_NM.p3d" }; - case "FxCartridge_127": { "A3\weapons_f\ammo\cartridge_127.p3d" }; - case "FxCartridge_127x54": { "A3\Weapons_F_Mark\Ammo\cartridge_127x54.p3d" }; - case "FxCartridge_slug": { "A3\weapons_f\ammo\cartridge_slug.p3d" }; - case "FxCartridge_12Gauge_HE_lxWS": { "lxWS\weapons_1_f_lxws\Ammo\cartridge_he_lxws.p3d" }; - case "FxCartridge_12Gauge_Slug_lxWS": { "lxWS\weapons_1_f_lxws\Ammo\cartridge_slug_lxws.p3d" }; - case "FxCartridge_12Gauge_Smoke_lxWS": { "lxWS\weapons_1_f_lxws\Ammo\cartridge_smoke_lxws.p3d" }; - case "FxCartridge_12Gauge_Pellet_lxWS": { "lxWS\weapons_1_f_lxws\Ammo\cartridge_pellet_lxws.p3d" }; - case "CUP_FxCartridge_545": { "CUP\Weapons\CUP_Weapons_Ammunition\magazines\cartridge545.p3d" }; - case "CUP_FxCartridge_939": { "CUP\Weapons\CUP_Weapons_Ammunition\magazines\cartridge939.p3d" }; - case "": { "" }; - default { "A3\Weapons_f\ammo\cartridge.p3d" }; + if (_cartridge == "") then { // return (note: can't use exitWith) + "" + } else { + private _cartridgeConfig = configFile >> "CfgVehicles" >> _cartridge; + + // if explicitly defined, use ACE's config + if (isText (_cartridgeConfig >> QGVAR(model))) exitWith { + getText (_cartridgeConfig >> QGVAR(model)) + }; + // use casing's default model + private _model = getText (_cartridgeConfig >> "model"); + if ("a3\weapons_f\empty" in toLowerANSI _model) exitWith { "" }; + + // Add file extension if missing (fileExists needs file extension) + if ((_model select [count _model - 4]) != ".p3d") then { + _model = _model + ".p3d"; + }; + + ["", _model] select (fileExists _model) }; - GVAR(cachedCasings) set [_ammo, _modelPath]; -}; +}, true]; if (_modelPath isEqualTo "") exitWith {}; diff --git a/addons/compat_cup_weapons/config.cpp b/addons/compat_cup_weapons/config.cpp index e5fd022555..54dd0271cc 100644 --- a/addons/compat_cup_weapons/config.cpp +++ b/addons/compat_cup_weapons/config.cpp @@ -15,6 +15,6 @@ class CfgPatches { }; }; +#include "CfgEventHandlers.hpp" #include "CfgMagazines.hpp" #include "CfgWeapons.hpp" -#include "CfgEventHandlers.hpp" From f3f7f2c492fb32dac12f6833041c7586587b2088 Mon Sep 17 00:00:00 2001 From: BrettMayson Date: Sat, 6 Apr 2024 19:18:07 -0600 Subject: [PATCH 082/132] Medical Status - API to modify getBloodLoss (#9926) Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> --- addons/medical_status/functions/fnc_getBloodLoss.sqf | 8 +++++++- docs/wiki/framework/events-framework.md | 10 ++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/addons/medical_status/functions/fnc_getBloodLoss.sqf b/addons/medical_status/functions/fnc_getBloodLoss.sqf index fd02f9042b..c2a6604679 100644 --- a/addons/medical_status/functions/fnc_getBloodLoss.sqf +++ b/addons/medical_status/functions/fnc_getBloodLoss.sqf @@ -23,4 +23,10 @@ if (_woundBleeding == 0) exitWith {0}; private _cardiacOutput = [_unit] call FUNC(getCardiacOutput); // even if heart stops blood will still flow slowly (gravity) -(_woundBleeding * (_cardiacOutput max CARDIAC_OUTPUT_MIN) * EGVAR(medical,bleedingCoefficient)) +private _bloodLoss = (_woundBleeding * (_cardiacOutput max CARDIAC_OUTPUT_MIN) * EGVAR(medical,bleedingCoefficient)); + +private _eventArgs = [_unit, _bloodLoss]; // Pass by reference + +[QGVAR(getBloodLoss), _eventArgs] call CBA_fnc_localEvent; + +_eventArgs select 1 // return diff --git a/docs/wiki/framework/events-framework.md b/docs/wiki/framework/events-framework.md index 37daa148fc..8a50912e02 100644 --- a/docs/wiki/framework/events-framework.md +++ b/docs/wiki/framework/events-framework.md @@ -146,7 +146,13 @@ MenuType: 0 = Interaction, 1 = Self Interaction |---------- |------------|----------|------|-------------| | `ace_medical_treatment_fullHealLocalMod` | [_patient] | Local | Listen | Called before a local unit is fully healed, mods can listen and apply their own healing logic -### 2.15 Interaction (`ace_interaction`) +### 2.15 Medical Status (`ace_medical_status`) + +| Event Key | Parameters | Locality | Type | Description | +|---------- |------------|----------|------|-------------| +| `ace_medical_status_getBloodLoss` | [_unit, _bloodLoss] | Local | Listen | Called when blood loss is calculated for a unit, mods can listen and modify the blood loss value by modifying the array + +### 2.16 Interaction (`ace_interaction`) | Event Key | Parameters | Locality | Type | Description | |---------- |------------|----------|------|-------------| @@ -271,4 +277,4 @@ Calls a globally synchronized event, which will also be run on JIP players unles // Event called on another machine (tapping above target machine) ["ace_interact_tapShoulder", [arguments], [target]] call CBA_fnc_targetEvent; -``` \ No newline at end of file +``` From 6a2f3a21f21891f8055455acfaecefee24745019 Mon Sep 17 00:00:00 2001 From: Grim <69561145+LinkIsGrim@users.noreply.github.com> Date: Sat, 6 Apr 2024 22:20:51 -0300 Subject: [PATCH 083/132] Medical - Fix broken AI ragdolls if AI unconsciousness is disabled (#9917) Co-authored-by: jonpas Co-authored-by: PabstMirror --- addons/medical_engine/XEH_postInit.sqf | 6 ------ addons/medical_statemachine/CfgEventHandlers.hpp | 6 ++++++ addons/medical_statemachine/XEH_postInit.sqf | 14 ++++++++++++++ addons/medical_status/functions/fnc_setDead.sqf | 4 ++++ 4 files changed, 24 insertions(+), 6 deletions(-) create mode 100644 addons/medical_statemachine/XEH_postInit.sqf diff --git a/addons/medical_engine/XEH_postInit.sqf b/addons/medical_engine/XEH_postInit.sqf index 5557807629..2514c62254 100644 --- a/addons/medical_engine/XEH_postInit.sqf +++ b/addons/medical_engine/XEH_postInit.sqf @@ -86,12 +86,6 @@ if (!isNull objectParent _unit && {local objectParent _unit}) exitWith { [_unit] call FUNC(lockUnconsciousSeat); }; - - // Prevent second ragdoll of uncon units when they're killed - if (IS_UNCONSCIOUS(_unit) && !isAwake _unit) then { - _unit enableSimulation false; - [{_this enableSimulation true}, _unit, 2] call CBA_fnc_waitAndExecute; - }; }] call CBA_fnc_addEventHandler; ["CAManBase", "deleted", { diff --git a/addons/medical_statemachine/CfgEventHandlers.hpp b/addons/medical_statemachine/CfgEventHandlers.hpp index 98c29f77dc..b9150d8564 100644 --- a/addons/medical_statemachine/CfgEventHandlers.hpp +++ b/addons/medical_statemachine/CfgEventHandlers.hpp @@ -10,6 +10,12 @@ class Extended_PreInit_EventHandlers { }; }; +class Extended_PostInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_SCRIPT(XEH_postInit)); + }; +}; + class Extended_Respawn_EventHandlers { class CAManBase { class ADDON { diff --git a/addons/medical_statemachine/XEH_postInit.sqf b/addons/medical_statemachine/XEH_postInit.sqf new file mode 100644 index 0000000000..a7c7740a39 --- /dev/null +++ b/addons/medical_statemachine/XEH_postInit.sqf @@ -0,0 +1,14 @@ +#include "script_component.hpp" + +["ace_killed", { // global event + params ["_unit"]; + + // Prevent second ragdoll of uncon units when they're killed + if ( + IS_UNCONSCIOUS(_unit) && !isAwake _unit // uncon and not ragdolling + && {isPlayer _unit || {_unit getVariable [QGVAR(AIUnconsciousness), GVAR(AIUnconsciousness)]}} + ) then { + _unit enableSimulation false; + [{_this enableSimulation true}, _unit, 2] call CBA_fnc_waitAndExecute; + }; +}] call CBA_fnc_addEventHandler; diff --git a/addons/medical_status/functions/fnc_setDead.sqf b/addons/medical_status/functions/fnc_setDead.sqf index 9dfc07d114..cb1e1f1d6f 100644 --- a/addons/medical_status/functions/fnc_setDead.sqf +++ b/addons/medical_status/functions/fnc_setDead.sqf @@ -17,10 +17,14 @@ params ["_unit", ["_reason", "#setDead"], ["_instigator", objNull]]; TRACE_3("setDead",_unit,_reason,_instigator); + // No heart rate or blood pressure to measure when dead _unit setVariable [VAR_HEART_RATE, 0, true]; _unit setVariable [VAR_BLOOD_PRESS, [0, 0], true]; +// Clear uncon variable just to be safe +_unit setVariable [VAR_UNCON, nil, true]; + _unit setVariable [QEGVAR(medical,causeOfDeath), _reason, true]; // Send a local event before death From 0c529446ec4944c3f42e7ccf59d3bb9a313c47d3 Mon Sep 17 00:00:00 2001 From: Kex Date: Sun, 7 Apr 2024 17:57:14 +0200 Subject: [PATCH 084/132] Fix bug template (#9936) --- .github/ISSUE_TEMPLATE/bug_report.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index c71190ce39..08c14747e5 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -23,14 +23,14 @@ All good? Then proceed and fill out the items below. **Mods (complete and add to the following information):** - **Arma 3:** `x.xx` [e.g. 1.00 stable, rc, dev] - **CBA:** `3.x.x` [e.g. 3.0.0 stable, commit hash] -- **ACE3:** `3.x.x` [eg. 3.0.0 stable, commit hash] +- **ACE3:** `3.x.x` [e.g. 3.0.0 stable, commit hash] **Description:** A clear and concise description of what the bug is. **Steps to reproduce:** -_Follow [https://ace3.acemod.org/img/wiki/user/issue_flowchart.webp](this flowchart)!_ +_Follow [this flowchart](https://ace3.acemod.org/img/wiki/user/issue_flowchart.webp)!_ 1. _Go to ..._ 2. _Click ..._ From 095ce882792f3be4b4c2ab6daea7239be36fbe75 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Sun, 7 Apr 2024 17:59:14 +0200 Subject: [PATCH 085/132] Hearing - Notify restart req. for combat deafness setting (#9934) --- addons/hearing/initSettings.inc.sqf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/addons/hearing/initSettings.inc.sqf b/addons/hearing/initSettings.inc.sqf index f22a7b4eda..8856ad1202 100644 --- a/addons/hearing/initSettings.inc.sqf +++ b/addons/hearing/initSettings.inc.sqf @@ -5,7 +5,9 @@ private _category = format ["ACE %1", localize LSTRING(Module_DisplayName)]; [LSTRING(EnableCombatDeafness_DisplayName), LSTRING(EnableCombatDeafness_Description)], _category, true, - 1 + 1, + {[QGVAR(enableCombatDeafness), _this] call EFUNC(common,cbaSettings_settingChanged)}, + true // Needs mission restart ] call CBA_fnc_addSetting; [ From 5130a220087e8bc3a0a77a2cc3fd46137df30fc7 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Wed, 10 Apr 2024 13:23:50 +0200 Subject: [PATCH 086/132] Hearing - Add setting to add earplugs to all units (#9935) Add option to add earplugs to all units --- addons/hearing/functions/fnc_addEarPlugs.sqf | 6 +++--- addons/hearing/initSettings.inc.sqf | 4 ++-- addons/hearing/stringtable.xml | 3 +++ 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/addons/hearing/functions/fnc_addEarPlugs.sqf b/addons/hearing/functions/fnc_addEarPlugs.sqf index c541d78618..035d82956f 100644 --- a/addons/hearing/functions/fnc_addEarPlugs.sqf +++ b/addons/hearing/functions/fnc_addEarPlugs.sqf @@ -24,10 +24,10 @@ params ["_unit"]; TRACE_2("params",_unit,typeOf _unit); // Exit if hearing is disabled OR autoAdd is disabled OR soldier has earplugs already in (persistence scenarios) -if (!GVAR(enableCombatDeafness) || {!GVAR(autoAddEarplugsToUnits)} || {[_unit] call FUNC(hasEarPlugsIn)}) exitWith {}; +if (!GVAR(enableCombatDeafness) || {GVAR(autoAddEarplugsToUnits) == 0} || {[_unit] call FUNC(hasEarPlugsIn)}) exitWith {}; -// add earplugs if the soldier has a rocket launcher -if ((secondaryWeapon _unit) != "") exitWith { +// Add earplugs if enabled for everyone or if the soldier has a rocket launcher +if (GVAR(autoAddEarplugsToUnits) == 2 || {(secondaryWeapon _unit) != ""}) exitWith { TRACE_1("has launcher - adding",_unit); _unit addItem "ACE_EarPlugs"; }; diff --git a/addons/hearing/initSettings.inc.sqf b/addons/hearing/initSettings.inc.sqf index 8856ad1202..61b6d239c5 100644 --- a/addons/hearing/initSettings.inc.sqf +++ b/addons/hearing/initSettings.inc.sqf @@ -43,9 +43,9 @@ private _category = format ["ACE %1", localize LSTRING(Module_DisplayName)]; ] call CBA_fnc_addSetting; [ - QGVAR(autoAddEarplugsToUnits), "CHECKBOX", + QGVAR(autoAddEarplugsToUnits), "LIST", [LSTRING(autoAddEarplugsToUnits_DisplayName), LSTRING(autoAddEarplugsToUnits_Description)], _category, - true, + [[0, 1, 2], [ELSTRING(common,Disabled), LSTRING(heavyWeaponUnits), ELSTRING(common,Enabled)], 1], 1 ] call CBA_fnc_addSetting; diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index 58d0bfa05d..de741e55c1 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -371,5 +371,8 @@ 귀마개 토글 Mettre/enlever les bouchons + + Only units with heavy weapons + From 3255dbef362560b363d7b4c1833560bb1fca9c2b Mon Sep 17 00:00:00 2001 From: lambdatiger Date: Wed, 10 Apr 2024 06:25:46 -0500 Subject: [PATCH 087/132] Compats - Add/Fix Adv, Vehicle Damage ERA and SLAT arrays (#9925) * added missing hitpoints and new classes * added CUP compats * Fixed missing base class and missing comma --- addons/compat_cup_vehicles/CfgVehicles.hpp | 136 +++++++++++++++++++++ addons/compat_rhs_afrf3/CfgVehicles.hpp | 67 +++++++++- 2 files changed, 198 insertions(+), 5 deletions(-) diff --git a/addons/compat_cup_vehicles/CfgVehicles.hpp b/addons/compat_cup_vehicles/CfgVehicles.hpp index 47c7f901f5..5334987fff 100644 --- a/addons/compat_cup_vehicles/CfgVehicles.hpp +++ b/addons/compat_cup_vehicles/CfgVehicles.hpp @@ -148,5 +148,141 @@ class CfgVehicles { roles[]={"cargo"}; }; }; + EGVAR(vehicle_damage,eraHitpoints)[] = { + "hitera_l1", "hitera_l2", "hitera_l3", "hitera_l4", "hitera_l5", + "hitera_l6", "hitera_l7", "hitera_l8", "hitera_r1", "hitera_r2", + "hitera_r3", "hitera_r4", "hitera_r5", "hitera_r6", "hitera_r7", + "hitera_r8", "hitera_t1", "hitera_t2", "hitera_t3", "hitera_t4", + "hitera_t5", "hitera_t6", "hitera_t7", "hitera_t8", "hitera_fr1", + "hitera_fr2", "hitera_fr3", "hitera_fr4", "hitera_fr5", "hitera_fr6", + "hitera_fr7", "hitera_fr8", "hitera_fr9", "hitera_fl1", "hitera_fl2", + "hitera_fl3", "hitera_fl4", "hitera_fl5" + }; + EGVAR(vehicle_damage,slatHitpoints)[] = {}; + }; + class CUP_T90_Base: Tank_F { + EGVAR(vehicle_damage,eraHitpoints)[] = { + "hitera_l1", "hitera_l2", "hitera_l3", "hitera_r1", "hitera_r2", + "hitera_r3", "hitera_1_t_l", "hitera_1_t_r", "hitera_2_t_l", + "hitera_2_t_r" + }; + EGVAR(vehicle_damage,slatHitpoints)[] = {}; + }; + class CUP_T90M_Base: Tank_F { + EGVAR(vehicle_damage,eraHitpoints)[] = { + "hitera_t1", "hitera_t2", "hitera_t3", "hitera_t4", "hitera_t5", + "hitera_t6", "hitera_t7", "hitera_t8", "hitera_t9", "hitera_t10", + "hitera_t11", "hitera_t12", "hitera_t13", "hitera_t14", "hitera_t15", + "hitera_t16", "hitera_t17", "hitera_t18", "hitera_t19", "hitera_t20", + "hitera_t21", "hitera_f1", "hitera_f2", "hitera_f3", "hitera_f4", + "hitera_f5", "hitera_f6", "hitera_f7", "hitera_s1", "hitera_s2", + "hitera_s3", "hitera_s4", "hitera_s5", "hitera_s6", "hitera_s7", + "hitera_s8", "hitera_s9", "hitera_s10", "hitera_s11", "hitera_s12", + "hitera_t22", "hitera_t23", "hitera_t24", "hitera_t25", "hitera_t26", + "hitera_t27", "hitera_t28", "hitera_t29", "hitera_t30", "hitera_t31", + "hitera_t32", "hitera_t33" + }; + EGVAR(vehicle_damage,slatHitpoints)[] = { + "hitslat_left", "hitslat_right", "hitslat_turret_rear", + "hitslat_turret_left", "hitslat_rear" + }; + }; + + class CUP_T72_ACR_Base; + class CUP_B_T72_CZ: CUP_T72_ACR_Base { + EGVAR(vehicle_damage,eraHitpoints)[] = { + "hitera_top_l1", "hitera_top_l2", "hitera_top_l3", "hitera_top_l4", + "hitera_top_r1", "hitera_top_r2", "hitera_top_r3", "hitera_top_r4", + "hitera_front_r1", "hitera_front_r2", "hitera_front_l1", + "hitera_front_l2", "hitera_top_rear" + }; + EGVAR(vehicle_damage,slatHitpoints)[] = {}; + }; + + class CUP_Leopard2_Base; + class CUP_Leopard2_ERA_Base: CUP_Leopard2_Base { + EGVAR(vehicle_damage,eraHitpoints)[] = { + "hitera_1", "hitera_2", "hitera_3", "hitera_4", "hitera_5", "hitera_6", + "hitera_7", "hitera_8", "hitera_9", "hitera_10", "hitera_11", "hitera_12", + "hitera_13", "hitera_14", "hitera_15", "hitera_16", "hitera_17", "hitera_18", + "hitera_19", "hitera_20", "hitera_21", "hitera_22", "hitera_23", "hitera_24", + "hitera_25", "hitera_26", "hitera_27", "hitera_28", "hitera_29", "hitera_30", + "hitera_31", "hitera_32", "hitera_33", "hitera_34", "hitera_35", "hitera_36", + "hitera_37", "hitera_38", "hitera_39", "hitera_40", "hitera_41", "hitera_42", + "hitera_43", "hitera_44", "hitera_45", "hitera_46", "hitera_47" + }; + EGVAR(vehicle_damage,slatHitpoints)[] = {}; + }; + + class CUP_M1_Abrams_base; + class CUP_M1A2_TUSK_base: CUP_M1_Abrams_base { + EGVAR(vehicle_damage,eraHitpoints)[] = { + "hitera_l1", "hitera_l2", "hitera_l3", "hitera_l4", "hitera_r1", + "hitera_r2", "hitera_r3", "hitera_r4" + }; + EGVAR(vehicle_damage,slatHitpoints)[] = { + "hitslat_rear" + }; + }; + + class CUP_M1Abrams_Base; + class CUP_M1Abrams_TUSK_Base: CUP_M1Abrams_Base { + EGVAR(vehicle_damage,eraHitpoints)[] = { + "hitera_l01", "hitera_l02", "hitera_l03", "hitera_l04", "hitera_l05", + "hitera_l06", "hitera_l07", "hitera_l08", "hitera_l09", "hitera_l10", + "hitera_l11", "hitera_l12", "hitera_l13", "hitera_l14", "hitera_l15", + "hitera_l16", "hitera_r01", "hitera_r02", "hitera_r03", "hitera_r04", + "hitera_r05", "hitera_r06", "hitera_r07", "hitera_r08", "hitera_r09", + "hitera_r10", "hitera_r11", "hitera_r12", "hitera_r13", "hitera_r14", + "hitera_r15", "hitera_r16" + }; + EGVAR(vehicle_damage,slatHitpoints)[] = { + "hitslat_rear" + }; + }; + + class CUP_M1Abrams_A2_Base; + class CUP_M1Abrams_A2_TUSK_Base: CUP_M1Abrams_A2_Base { + EGVAR(vehicle_damage,eraHitpoints)[] = { + "hitera_l01", "hitera_l02", "hitera_l03", "hitera_l04", "hitera_l05", + "hitera_l06", "hitera_l07", "hitera_l08", "hitera_l09", "hitera_l10", + "hitera_l11", "hitera_l12", "hitera_l13", "hitera_l14", "hitera_l15", + "hitera_l16", "hitera_l17", "hitera_l18", "hitera_l19", "hitera_l20", + "hitera_r01", "hitera_r02", "hitera_r03", "hitera_r04", "hitera_r05", + "hitera_r06", "hitera_r07", "hitera_r08", "hitera_r09", "hitera_r10", + "hitera_r11", "hitera_r12", "hitera_r13", "hitera_r14", "hitera_r15", + "hitera_r16", "hitera_r17", "hitera_r18", "hitera_r19", "hitera_r20" + }; + EGVAR(vehicle_damage,slatHitpoints)[] = { + "hitslat_rear" + }; + }; + + class CUP_M1A2Abrams_Base; + class CUP_M1A2Abrams_TUSK_Base: CUP_M1A2Abrams_Base { + EGVAR(vehicle_damage,eraHitpoints)[] = { + "hitera_l01", "hitera_l02", "hitera_l03", "hitera_l04", "hitera_l05", + "hitera_l06", "hitera_l07", "hitera_l08", "hitera_l09", "hitera_l10", + "hitera_l11", "hitera_l12", "hitera_l13", "hitera_l14", "hitera_l15", + "hitera_l16", "hitera_r01", "hitera_r02", "hitera_r03", "hitera_r04", + "hitera_r05", "hitera_r06", "hitera_r07", "hitera_r08", "hitera_r09", + "hitera_r10", "hitera_r11", "hitera_r12", "hitera_r13", "hitera_r14", + "hitera_r15", "hitera_r16" + }; + EGVAR(vehicle_damage,slatHitpoints)[] = { + "hitslat_rear" + }; + }; + class CUP_M1A2Abrams_TUSK_II_Base: CUP_M1A2Abrams_TUSK_Base { + EGVAR(vehicle_damage,eraHitpoints)[] = { + "hitera_l01", "hitera_l02", "hitera_l03", "hitera_l04", "hitera_l05", + "hitera_l06", "hitera_l07", "hitera_l08", "hitera_l09", "hitera_l10", + "hitera_l11", "hitera_l12", "hitera_l13", "hitera_l14", "hitera_l15", + "hitera_l16", "hitera_l17", "hitera_l18", "hitera_l19", "hitera_l20", + "hitera_r01", "hitera_r02", "hitera_r03", "hitera_r04", "hitera_r05", + "hitera_r06", "hitera_r07", "hitera_r08", "hitera_r09", "hitera_r10", + "hitera_r11", "hitera_r12", "hitera_r13", "hitera_r14", "hitera_r15", + "hitera_r16", "hitera_r17", "hitera_r18", "hitera_r19", "hitera_r20" + }; }; }; diff --git a/addons/compat_rhs_afrf3/CfgVehicles.hpp b/addons/compat_rhs_afrf3/CfgVehicles.hpp index 622d764ad2..1cf5029bc3 100644 --- a/addons/compat_rhs_afrf3/CfgVehicles.hpp +++ b/addons/compat_rhs_afrf3/CfgVehicles.hpp @@ -434,7 +434,11 @@ class CfgVehicles { "era_13_hitpoint", "era_14_hitpoint", "era_15_hitpoint", "era_16_hitpoint", "era_17_hitpoint", "era_18_hitpoint", "era_19_hitpoint", "era_20_hitpoint", "era_21_hitpoint", "era_22_hitpoint", "era_23_hitpoint", "era_24_hitpoint", "era_25_hitpoint", "era_26_hitpoint", "era_27_hitpoint", "era_28_hitpoint", "era_29_hitpoint", "era_30_hitpoint", - "era_31_hitpoint", "era_32_hitpoint" + "era_31_hitpoint", "era_32_hitpoint", "era_33_hitpoint", "era_34_hitpoint", "era_35_hitpoint", "era_36_hitpoint", + "era_37_hitpoint", "era_38_hitpoint", "era_39_hitpoint", "era_40_hitpoint", "era_41_hitpoint", "era_42_hitpoint", + "era_43_hitpoint", "era_44_hitpoint", "era_45_hitpoint", "era_46_hitpoint", "era_47_hitpoint", "era_48_hitpoint", + "era_49_hitpoint", "era_50_hitpoint", "era_58_hitpoint", "era_59_hitpoint", "era_60_hitpoint", "era_61_hitpoint", + "era_62_hitpoint", "era_63_hitpoint", "era_64_hitpoint", "era_65_hitpoint", "era_66_hitpoint", "era_67_hitpoint" }; EGVAR(vehicle_damage,slatHitpoints)[] = { "SLAT_51_hitpoint", "SLAT_52_hitpoint", "SLAT_53_hitpoint", @@ -470,6 +474,9 @@ class CfgVehicles { "era_43_hitpoint", "era_44_hitpoint", "era_45_hitpoint", "era_46_hitpoint", "era_47_hitpoint", "era_48_hitpoint", "era_49_hitpoint", "era_50_hitpoint" }; + EGVAR(vehicle_damage,slatHitpoints)[] = { + "slat_51_hitpoint", "slat_52_hitpoint", "slat_53_hitpoint", "slat_54_hitpoint" + }; }; class rhs_t90am_tv: rhs_t90_tv { EGVAR(vehicle_damage,eraHitpoints)[] = { @@ -483,7 +490,7 @@ class CfgVehicles { "era_43_hitpoint", "era_44_hitpoint", "era_45_hitpoint", "era_46_hitpoint", "era_47_hitpoint", "era_48_hitpoint", "era_49_hitpoint", "era_50_hitpoint", "era_51_hitpoint", "era_52_hitpoint", "era_53_hitpoint", "era_54_hitpoint", "era_55_hitpoint", "era_56_hitpoint", "era_57_hitpoint", "era_58_hitpoint", "era_59_hitpoint", "era_60_hitpoint", - "era_51_hitpoint", "era_62_hitpoint", "era_63_hitpoint", "era_64_hitpoint", "era_65_hitpoint", "era_66_hitpoint" + "era_61_hitpoint", "era_62_hitpoint", "era_63_hitpoint", "era_64_hitpoint", "era_65_hitpoint", "era_66_hitpoint" }; EGVAR(vehicle_damage,slatHitpoints)[] = { "SLAT_18_hitpoint", "SLAT_19_hitpoint", "SLAT_20_hitpoint", "SLAT_21_hitpoint", @@ -492,10 +499,31 @@ class CfgVehicles { }; }; class rhs_t90sm_tv: rhs_t90am_tv { + EGVAR(vehicle_damage,eraHitpoints)[] = { + "era_1_hitpoint", "era_2_hitpoint", "era_3_hitpoint", "era_4_hitpoint", + "era_5_hitpoint", "era_6_hitpoint", "era_7_hitpoint", "era_8_hitpoint", + "era_9_hitpoint", "era_10_hitpoint", "era_11_hitpoint", "era_12_hitpoint", + "era_13_hitpoint", "era_14_hitpoint", "era_15_hitpoint", "era_16_hitpoint", + "era_17_hitpoint", "era_18_hitpoint", "era_19_hitpoint", "era_20_hitpoint", + "era_21_hitpoint", "era_22_hitpoint", "era_24_hitpoint", "era_25_hitpoint", + "era_27_hitpoint", "era_28_hitpoint", "era_29_hitpoint", "era_30_hitpoint", + "era_31_hitpoint", "era_32_hitpoint", "era_33_hitpoint", "era_34_hitpoint", + "era_35_hitpoint", "era_36_hitpoint", "era_37_hitpoint", "era_38_hitpoint", + "era_39_hitpoint", "era_40_hitpoint", "era_41_hitpoint", "era_42_hitpoint", + "era_43_hitpoint", "era_44_hitpoint", "era_45_hitpoint", "era_46_hitpoint", + "era_47_hitpoint", "era_48_hitpoint", "era_49_hitpoint", "era_50_hitpoint", + "era_26_hitpoint", "era_55_hitpoint", "era_56_hitpoint", "era_57_hitpoint", + "era_58_hitpoint", "era_59_hitpoint", "era_60_hitpoint", "era_61_hitpoint", + "era_62_hitpoint", "era_63_hitpoint", "era_64_hitpoint", "era_65_hitpoint", + "era_66_hitpoint", "era_23_hitpoint" + }; EGVAR(vehicle_damage,slatHitpoints)[] = { - "SLAT_23_hitpoint", "SLAT_26_hitpoint", "SLAT_51_hitpoint", "SLAT_52_hitpoint", - "SLAT_53_hitpoint", "SLAT_54_hitpoint", "SLAT_55_hitpoint", "SLAT_56_hitpoint", - "SLAT_57_hitpoint" + "slat_23_hitpoint", "slat_26_hitpoint", "slat_51_hitpoint", + "slat_52_hitpoint", "slat_53_hitpoint", "slat_54_hitpoint", + "slat_55_hitpoint", "slat_56_hitpoint", "slat_57_hitpoint", + "slat_18_hitpoint", "slat_19_hitpoint", "slat_20_hitpoint", + "slat_21_hitpoint", "slat_22_hitpoint", "slat_24_hitpoint", + "slat_25_hitpoint" }; }; @@ -539,6 +567,35 @@ class CfgVehicles { "era_31_hitpoint", "era_32_hitpoint", "era_33_hitpoint", "era_34_hitpoint", "era_35_hitpoint", "era_36_hitpoint" }; }; + class rhs_t80um: rhs_t80u { + EGVAR(vehicle_damage,eraHitpoints)[] = { + "era_1_hitpoint", "era_2_hitpoint", "era_3_hitpoint", "era_4_hitpoint", "era_5_hitpoint", "era_6_hitpoint", + "era_7_hitpoint", "era_8_hitpoint", "era_9_hitpoint", "era_10_hitpoint", "era_11_hitpoint", "era_12_hitpoint", + "era_13_hitpoint", "era_14_hitpoint", "era_15_hitpoint", "era_16_hitpoint", "era_17_hitpoint", "era_18_hitpoint", + "era_19_hitpoint", "era_20_hitpoint", "era_21_hitpoint", "era_22_hitpoint", "era_23_hitpoint", "era_24_hitpoint", + "era_25_hitpoint", "era_26_hitpoint", "era_27_hitpoint", "era_28_hitpoint", "era_29_hitpoint", "era_30_hitpoint", + "era_31_hitpoint", "era_32_hitpoint", "era_33_hitpoint", "era_34_hitpoint", "era_35_hitpoint", "era_36_hitpoint" + }; + }; + + class rhs_t15_base; + class rhs_t15_tv: rhs_t15_base { + EGVAR(vehicle_damage,eraHitpoints)[] = { + "era_1_hitpoint", "era_2_hitpoint", "era_3_hitpoint", "era_4_hitpoint", + "era_5_hitpoint", "era_6_hitpoint", "era_7_hitpoint", "era_8_hitpoint", + "era_9_hitpoint", "era_10_hitpoint", "era_11_hitpoint", "era_12_hitpoint", + "era_13_hitpoint", "era_14_hitpoint", "era_15_hitpoint", "era_16_hitpoint", + "era_17_hitpoint", "era_18_hitpoint", "era_19_hitpoint", "era_20_hitpoint", + "era_21_hitpoint", "era_22_hitpoint", "era_23_hitpoint", "era_24_hitpoint", + "era_25_hitpoint", "era_26_hitpoint", "era_27_hitpoint", "era_28_hitpoint", + "era_29_hitpoint", "era_30_hitpoint", "era_31_hitpoint", "era_32_hitpoint", + "era_33_hitpoint", "era_34_hitpoint", "era_35_hitpoint", "era_36_hitpoint", + "era_37_hitpoint" + }; + EGVAR(vehicle_damage,slatHitpoints)[] = { + "slat_38_hitpoint", "slat_39_hitpoint", "slat_40_hitpoint", "slat_41_hitpoint" + }; + }; // Wirecutter Backpacks class rhs_assault_umbts; From 2b5ea1628f6c2e463d7367b2210ab2e3bdc9a19a Mon Sep 17 00:00:00 2001 From: OverlordZorn <56258612+OverlordZorn@users.noreply.github.com> Date: Wed, 10 Apr 2024 13:26:30 +0200 Subject: [PATCH 088/132] Weather - Winter Terrain Temperatures (#9943) * a -> an * Added last resort catch for winter maps to define suitable temps * removed debug line * purge :soap: * added check for "snow" in raintexture * cleaned up conditions * Update arma-3-scheduler-and-our-practices.md * isNull && {} * Update fnc_getMapData.sqf * Update fnc_getMapData.sqf * Update fnc_getMapData.sqf * changed order in condition checks and indentation * not so lazy * deep config lookup -> _cfg * comment * removed accidental empty line * :roller_coaster: * Update fnc_getMapData.sqf * Revert "Update fnc_getMapData.sqf" This reverts commit a57d114182ee094a873274dda8874f12780e4795. * Update addons/weather/functions/fnc_getMapData.sqf Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> * Update addons/weather/functions/fnc_getMapData.sqf Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> * Update addons/weather/functions/fnc_getMapData.sqf Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> * then -> exitWith --------- Co-authored-by: Mr. Zorn <56258612+PulsarNeutronStar@users.noreply.github.com> Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> --- addons/weather/functions/fnc_getMapData.sqf | 49 ++++++++++++++------- 1 file changed, 32 insertions(+), 17 deletions(-) diff --git a/addons/weather/functions/fnc_getMapData.sqf b/addons/weather/functions/fnc_getMapData.sqf index c1cae6e2f8..555704fc87 100644 --- a/addons/weather/functions/fnc_getMapData.sqf +++ b/addons/weather/functions/fnc_getMapData.sqf @@ -48,34 +48,35 @@ GVAR(currentHumidity) = 0; GVAR(currentOvercast) = 0; // Get all non inherited arrays to filter maps that inherit from Stratis/Altis/Tanoa -private _nonInheritedArrays = configProperties [configFile >> "CfgWorlds" >> _worldName, "isArray _x", false]; +private _cfgPath = configFile >> "CfgWorlds" >> _worldName; +private _nonInheritedArrays = configProperties [_cfgPath, "isArray _x", false]; // And check if any custom non-inherited weather is defined through config and use that if so -if ((configFile >> "CfgWorlds" >> _worldName >> "ACE_TempDay") in _nonInheritedArrays) exitWith { - if (isArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_TempDay")) then { - GVAR(TempDay) = getArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_TempDay"); +if ((_cfgPath >> "ACE_TempDay") in _nonInheritedArrays) exitWith { + if (isArray (_cfgPath >> "ACE_TempDay")) then { + GVAR(TempDay) = getArray (_cfgPath >> "ACE_TempDay"); }; - if (isArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_TempNight")) then { - GVAR(TempNight) = getArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_TempNight"); + if (isArray (_cfgPath >> "ACE_TempNight")) then { + GVAR(TempNight) = getArray (_cfgPath >> "ACE_TempNight"); }; - if (isArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_Humidity")) then { - GVAR(Humidity) = getArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_Humidity"); + if (isArray (_cfgPath >> "ACE_Humidity")) then { + GVAR(Humidity) = getArray (_cfgPath >> "ACE_Humidity"); }; - if (isArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_WindSpeedMin")) then { - GVAR(WindSpeedMin) = getArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_WindSpeedMin"); + if (isArray (_cfgPath >> "ACE_WindSpeedMin")) then { + GVAR(WindSpeedMin) = getArray (_cfgPath >> "ACE_WindSpeedMin"); }; - if (isArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_WindSpeedMean")) then { - GVAR(WindSpeedMean) = getArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_WindSpeedMean"); + if (isArray (_cfgPath >> "ACE_WindSpeedMean")) then { + GVAR(WindSpeedMean) = getArray (_cfgPath >> "ACE_WindSpeedMean"); }; - if (isArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_WindSpeedMax")) then { - GVAR(WindSpeedMax) = getArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_WindSpeedMax"); + if (isArray (_cfgPath >> "ACE_WindSpeedMax")) then { + GVAR(WindSpeedMax) = getArray (_cfgPath >> "ACE_WindSpeedMax"); }; - if (isArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_WindDirectionProbabilities")) then { - GVAR(WindDirectionProbabilities) = getArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_WindDirectionProbabilities"); + if (isArray (_cfgPath >> "ACE_WindDirectionProbabilities")) then { + GVAR(WindDirectionProbabilities) = getArray (_cfgPath >> "ACE_WindDirectionProbabilities"); }; }; // Check if the map is among the most popular -if (_worldName in ["chernarus", "bootcamp_acr", "woodland_acr", "utes"]) then { +if (_worldName in ["chernarus", "bootcamp_acr", "woodland_acr", "utes"]) exitWith { // Source: http://www.iten-online.ch/klima/europa/tschechien/prag.htm GVAR(TempDay) = [1, 3, 9, 14, 19, 23, 25, 24, 21, 13, 7, 2]; GVAR(TempNight) = [-4, -3, 0, 4, 9, 12, 14, 14, 10, 6, 2, -2]; @@ -239,3 +240,17 @@ if (_worldName in ["kunduz"]) exitWith { [0.04, 0.02, 0.05, 0.14, 0.19, 0.07, 0.10, 0.07] // December ]; }; + + +// Catches any "Winter" Map that hasnt been defined otherwise - this should stay at the end of the file +// Values are not based on any RL reference since the snow terrain textures persists regardless the date +_cfgPath = _cfgPath >> "RainParticles"; +if ( + "winter" in _worldName || + {"snow" in getText (_cfgPath >> "rainDropTexture")} || + {getNumber (_cfgPath >> "snow") != 0} +) exitWith { + GVAR(TempDay) = [-10,-9,-8,-7,-6,-5,-6,-7,-8,-9,-10,-11]; + GVAR(TempNight) = [-15,-14,-13,-12,-11,-10,-9,-10,-11,-12,-13,-17]; + GVAR(Humidity) = [82, 80, 81, 82, 83, 82, 81, 82, 83, 82, 83, 82]; +}; From bcf1133477bd2dbd2ff3756f85163bd45ec74689 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Thu, 11 Apr 2024 17:43:19 +0200 Subject: [PATCH 089/132] Scopes - Notify restart req. for enable & pressure settings (#9944) * Moved keybinds, made settings require restart * Move keybinds --- addons/scopes/XEH_postInit.sqf | 101 +------------------- addons/scopes/functions/fnc_adjustScope.sqf | 3 +- addons/scopes/initKeybinds.inc.sqf | 95 ++++++++++++++++++ addons/scopes/initSettings.inc.sqf | 8 +- 4 files changed, 106 insertions(+), 101 deletions(-) create mode 100644 addons/scopes/initKeybinds.inc.sqf diff --git a/addons/scopes/XEH_postInit.sqf b/addons/scopes/XEH_postInit.sqf index 9c96281246..4ce8d6d11c 100644 --- a/addons/scopes/XEH_postInit.sqf +++ b/addons/scopes/XEH_postInit.sqf @@ -9,6 +9,9 @@ if (!hasInterface) exitWith {}; +// Add keybinds +#include "initKeybinds.inc.sqf" + GVAR(Optics) = ["", "", ""]; GVAR(Guns) = ["", "", ""]; GVAR(canAdjustElevation) = [false, false, false]; @@ -41,104 +44,6 @@ GVAR(scopeAdjust) = [[[0,0],0,[0,0],0], [[0,0],0,[0,0],0], [[0,0],0,[0,0],0]]; }; }] call CBA_fnc_addPlayerEventHandler; - // Add keybinds - ["ACE3 Scope Adjustment", QGVAR(AdjustUpMinor), localize LSTRING(AdjustUpMinor), { - // Conditions: canInteract - if !([ACE_player, objNull, ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) exitWith {false}; - // Conditions: specific - if (!([ACE_player] call CBA_fnc_canUseWeapon)) exitWith {false}; - - [ACE_player] call FUNC(inventoryCheck); - - // Statement - [ACE_player, ELEVATION_UP, MINOR_INCREMENT] call FUNC(adjustScope); - }, {false}, [201, [false, false, false]], true] call CBA_fnc_addKeybind; - - ["ACE3 Scope Adjustment", QGVAR(AdjustDownMinor), localize LSTRING(AdjustDownMinor), { - // Conditions: canInteract - if !([ACE_player, objNull, ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) exitWith {false}; - // Conditions: specific - if (!([ACE_player] call CBA_fnc_canUseWeapon)) exitWith {false}; - - [ACE_player] call FUNC(inventoryCheck); - - // Statement - [ACE_player, ELEVATION_DOWN, MINOR_INCREMENT] call FUNC(adjustScope); - }, {false}, [209, [false, false, false]], true] call CBA_fnc_addKeybind; - - ["ACE3 Scope Adjustment", QGVAR(AdjustLeftMinor), localize LSTRING(AdjustLeftMinor), { - // Conditions: canInteract - if !([ACE_player, objNull, ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) exitWith {false}; - // Conditions: specific - if (!([ACE_player] call CBA_fnc_canUseWeapon)) exitWith {false}; - - [ACE_player] call FUNC(inventoryCheck); - - // Statement - [ACE_player, WINDAGE_LEFT, MINOR_INCREMENT] call FUNC(adjustScope); - }, {false}, [209, [false, true, false]], true] call CBA_fnc_addKeybind; - - ["ACE3 Scope Adjustment", QGVAR(AdjustRightMinor), localize LSTRING(AdjustRightMinor), { - // Conditions: canInteract - if !([ACE_player, objNull, ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) exitWith {false}; - // Conditions: specific - if (!([ACE_player] call CBA_fnc_canUseWeapon)) exitWith {false}; - - [ACE_player] call FUNC(inventoryCheck); - - // Statement - [ACE_player, WINDAGE_RIGHT, MINOR_INCREMENT] call FUNC(adjustScope); - }, {false}, [201, [false, true, false]], true] call CBA_fnc_addKeybind; - - ["ACE3 Scope Adjustment", QGVAR(AdjustUpMajor), localize LSTRING(AdjustUpMajor), { - // Conditions: canInteract - if !([ACE_player, objNull, ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) exitWith {false}; - // Conditions: specific - if (!([ACE_player] call CBA_fnc_canUseWeapon)) exitWith {false}; - - [ACE_player] call FUNC(inventoryCheck); - - // Statement - [ACE_player, ELEVATION_UP, MAJOR_INCREMENT] call FUNC(adjustScope); - }, {false}, [201, [true, false, false]], true] call CBA_fnc_addKeybind; - - ["ACE3 Scope Adjustment", QGVAR(AdjustDownMajor), localize LSTRING(AdjustDownMajor), { - // Conditions: canInteract - if !([ACE_player, objNull, ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) exitWith {false}; - // Conditions: specific - if (!([ACE_player] call CBA_fnc_canUseWeapon)) exitWith {false}; - - [ACE_player] call FUNC(inventoryCheck); - - // Statement - [ACE_player, ELEVATION_DOWN, MAJOR_INCREMENT] call FUNC(adjustScope); - }, {false}, [209, [true, false, false]], true] call CBA_fnc_addKeybind; - - ["ACE3 Scope Adjustment", QGVAR(AdjustLeftMajor), localize LSTRING(AdjustLeftMajor), { - // Conditions: canInteract - if !([ACE_player, objNull, ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) exitWith {false}; - // Conditions: specific - if (!([ACE_player] call CBA_fnc_canUseWeapon)) exitWith {false}; - - [ACE_player] call FUNC(inventoryCheck); - - // Statement - [ACE_player, WINDAGE_LEFT, MAJOR_INCREMENT] call FUNC(adjustScope); - }, {false}, [209, [true, true, false]], true] call CBA_fnc_addKeybind; - - ["ACE3 Scope Adjustment", QGVAR(AdjustRightMajor), localize LSTRING(AdjustRightMajor), { - // Conditions: canInteract - if !([ACE_player, objNull, ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) exitWith {false}; - // Conditions: specific - if (!([ACE_player] call CBA_fnc_canUseWeapon)) exitWith {false}; - - [ACE_player] call FUNC(inventoryCheck); - - // Statement - [ACE_player, WINDAGE_RIGHT, MAJOR_INCREMENT] call FUNC(adjustScope); - }, {false}, [201, [true, true, false]], true] call CBA_fnc_addKeybind; - - // Register fire event handler ["ace_firedPlayer", LINKFUNC(firedEH)] call CBA_fnc_addEventHandler; ["ace_firedPlayerNonLocal", LINKFUNC(firedEH)] call CBA_fnc_addEventHandler; diff --git a/addons/scopes/functions/fnc_adjustScope.sqf b/addons/scopes/functions/fnc_adjustScope.sqf index bd2d2d1da6..0a9d7bd089 100644 --- a/addons/scopes/functions/fnc_adjustScope.sqf +++ b/addons/scopes/functions/fnc_adjustScope.sqf @@ -17,12 +17,13 @@ * Public: No */ +if (!GVAR(enabled)) exitWith {false}; + params ["_unit", "_turretAndDirection", "_majorStep"]; TRACE_3("adjustScope",_unit,_turretAndDirection,_majorStep); if (!(_unit isKindOf "Man")) exitWith {false}; if (currentMuzzle _unit != currentWeapon _unit) exitWith {false}; -if (!GVAR(enabled)) exitWith {false}; private _weaponIndex = [_unit, currentWeapon _unit] call EFUNC(common,getWeaponIndex); if (_weaponIndex < 0) exitWith {false}; diff --git a/addons/scopes/initKeybinds.inc.sqf b/addons/scopes/initKeybinds.inc.sqf new file mode 100644 index 0000000000..a147b1b215 --- /dev/null +++ b/addons/scopes/initKeybinds.inc.sqf @@ -0,0 +1,95 @@ +["ACE3 Scope Adjustment", QGVAR(AdjustUpMinor), LLSTRING(AdjustUpMinor), { + // Conditions: canInteract + if !([ACE_player, objNull, ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if (!([ACE_player] call CBA_fnc_canUseWeapon)) exitWith {false}; + + [ACE_player] call FUNC(inventoryCheck); + + // Statement + [ACE_player, ELEVATION_UP, MINOR_INCREMENT] call FUNC(adjustScope); +}, {false}, [201, [false, false, false]], true] call CBA_fnc_addKeybind; + +["ACE3 Scope Adjustment", QGVAR(AdjustDownMinor), LLSTRING(AdjustDownMinor), { + // Conditions: canInteract + if !([ACE_player, objNull, ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if (!([ACE_player] call CBA_fnc_canUseWeapon)) exitWith {false}; + + [ACE_player] call FUNC(inventoryCheck); + + // Statement + [ACE_player, ELEVATION_DOWN, MINOR_INCREMENT] call FUNC(adjustScope); +}, {false}, [209, [false, false, false]], true] call CBA_fnc_addKeybind; + +["ACE3 Scope Adjustment", QGVAR(AdjustLeftMinor), LLSTRING(AdjustLeftMinor), { + // Conditions: canInteract + if !([ACE_player, objNull, ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if (!([ACE_player] call CBA_fnc_canUseWeapon)) exitWith {false}; + + [ACE_player] call FUNC(inventoryCheck); + + // Statement + [ACE_player, WINDAGE_LEFT, MINOR_INCREMENT] call FUNC(adjustScope); +}, {false}, [209, [false, true, false]], true] call CBA_fnc_addKeybind; + +["ACE3 Scope Adjustment", QGVAR(AdjustRightMinor), LLSTRING(AdjustRightMinor), { + // Conditions: canInteract + if !([ACE_player, objNull, ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if (!([ACE_player] call CBA_fnc_canUseWeapon)) exitWith {false}; + + [ACE_player] call FUNC(inventoryCheck); + + // Statement + [ACE_player, WINDAGE_RIGHT, MINOR_INCREMENT] call FUNC(adjustScope); +}, {false}, [201, [false, true, false]], true] call CBA_fnc_addKeybind; + +["ACE3 Scope Adjustment", QGVAR(AdjustUpMajor), LLSTRING(AdjustUpMajor), { + // Conditions: canInteract + if !([ACE_player, objNull, ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if (!([ACE_player] call CBA_fnc_canUseWeapon)) exitWith {false}; + + [ACE_player] call FUNC(inventoryCheck); + + // Statement + [ACE_player, ELEVATION_UP, MAJOR_INCREMENT] call FUNC(adjustScope); +}, {false}, [201, [true, false, false]], true] call CBA_fnc_addKeybind; + +["ACE3 Scope Adjustment", QGVAR(AdjustDownMajor), LLSTRING(AdjustDownMajor), { + // Conditions: canInteract + if !([ACE_player, objNull, ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if (!([ACE_player] call CBA_fnc_canUseWeapon)) exitWith {false}; + + [ACE_player] call FUNC(inventoryCheck); + + // Statement + [ACE_player, ELEVATION_DOWN, MAJOR_INCREMENT] call FUNC(adjustScope); +}, {false}, [209, [true, false, false]], true] call CBA_fnc_addKeybind; + +["ACE3 Scope Adjustment", QGVAR(AdjustLeftMajor), LLSTRING(AdjustLeftMajor), { + // Conditions: canInteract + if !([ACE_player, objNull, ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if (!([ACE_player] call CBA_fnc_canUseWeapon)) exitWith {false}; + + [ACE_player] call FUNC(inventoryCheck); + + // Statement + [ACE_player, WINDAGE_LEFT, MAJOR_INCREMENT] call FUNC(adjustScope); +}, {false}, [209, [true, true, false]], true] call CBA_fnc_addKeybind; + +["ACE3 Scope Adjustment", QGVAR(AdjustRightMajor), LLSTRING(AdjustRightMajor), { + // Conditions: canInteract + if !([ACE_player, objNull, ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if (!([ACE_player] call CBA_fnc_canUseWeapon)) exitWith {false}; + + [ACE_player] call FUNC(inventoryCheck); + + // Statement + [ACE_player, WINDAGE_RIGHT, MAJOR_INCREMENT] call FUNC(adjustScope); +}, {false}, [201, [true, true, false]], true] call CBA_fnc_addKeybind; diff --git a/addons/scopes/initSettings.inc.sqf b/addons/scopes/initSettings.inc.sqf index 917587be8e..40ed62cbcc 100644 --- a/addons/scopes/initSettings.inc.sqf +++ b/addons/scopes/initSettings.inc.sqf @@ -5,7 +5,9 @@ private _category = format ["ACE %1", localize LSTRING(DisplayName)]; [LSTRING(enabled_displayName), LSTRING(enabled_description)], _category, true, - 1 + 1, + {[QGVAR(enabled), _this] call EFUNC(common,cbaSettings_settingChanged)}, + true // Needs mission restart ] call CBA_fnc_addSetting; [ @@ -69,7 +71,9 @@ private _category = format ["ACE %1", localize LSTRING(DisplayName)]; [LSTRING(deduceBarometricPressureFromTerrainAltitude_displayName), LSTRING(deduceBarometricPressureFromTerrainAltitude_description)], _category, false, - 1 + 1, + {[QGVAR(deduceBarometricPressureFromTerrainAltitude), _this] call EFUNC(common,cbaSettings_settingChanged)}, + true // Needs mission restart ] call CBA_fnc_addSetting; [ From 6165b46ab6ec8657ba5f30060f310bb72d1a0679 Mon Sep 17 00:00:00 2001 From: PlayerBotPro Date: Thu, 11 Apr 2024 23:58:50 +0800 Subject: [PATCH 090/132] Medical Treatment - Fix Painkiller has no effect when Advanced Medication is off (#9942) * fix: Painkiller has no effect when Advanced Medication is off * Change PainKillers_PAIN_SUPPRESSION to uppercase * Update addons/medical_treatment/functions/fnc_medicationLocal.sqf Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> --------- Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> --- addons/medical_treatment/functions/fnc_medicationLocal.sqf | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/addons/medical_treatment/functions/fnc_medicationLocal.sqf b/addons/medical_treatment/functions/fnc_medicationLocal.sqf index 31884dac20..0b23b365e8 100644 --- a/addons/medical_treatment/functions/fnc_medicationLocal.sqf +++ b/addons/medical_treatment/functions/fnc_medicationLocal.sqf @@ -19,6 +19,9 @@ // todo: move this macro to script_macros_medical.hpp? #define MORPHINE_PAIN_SUPPRESSION 0.6 +// 0.2625 = 0.6/0.8 * 0.35 +// 0.6 = basic medication morph. pain suppr., 0.8 = adv. medication morph. pain suppr., 0.35 = adv. medication painkillers. pain suppr. +#define PAINKILLERS_PAIN_SUPPRESSION 0.2625 params ["_patient", "_bodyPart", "_classname"]; TRACE_3("medicationLocal",_patient,_bodyPart,_classname); @@ -36,6 +39,10 @@ if (!GVAR(advancedMedication)) exitWith { case "Epinephrine": { [QEGVAR(medical,WakeUp), _patient] call CBA_fnc_localEvent; }; + case "Painkillers": { + private _painSuppress = GET_PAIN_SUPPRESS(_patient); + _patient setVariable [VAR_PAIN_SUPP, (_painSuppress + PAINKILLERS_PAIN_SUPPRESSION) min 1, true]; + }; }; }; TRACE_1("Running treatmentMedicationLocal with Advanced configuration for",_patient); From 32707dd860119b47ef8921500e7221e20caad4bf Mon Sep 17 00:00:00 2001 From: V1nsyara Date: Sat, 13 Apr 2024 22:53:50 +0300 Subject: [PATCH 091/132] Language Russian - Update translation (#9947) Russian --- addons/advanced_throwing/stringtable.xml | 2 ++ addons/common/stringtable.xml | 3 +++ addons/fieldmanual/stringtable.xml | 1 + addons/hearing/stringtable.xml | 1 + addons/medical_gui/stringtable.xml | 3 +++ addons/medical_treatment/stringtable.xml | 6 +++--- 6 files changed, 13 insertions(+), 3 deletions(-) diff --git a/addons/advanced_throwing/stringtable.xml b/addons/advanced_throwing/stringtable.xml index 7676464474..1e0b5ae23f 100644 --- a/addons/advanced_throwing/stringtable.xml +++ b/addons/advanced_throwing/stringtable.xml @@ -192,6 +192,7 @@ 一時的に風の情報を表示 바람 정보 임시로 표시 Afficher temporairement les informations sur le vent + Временно показать информацию о ветре Temporarily display Wind Info while throwing, to aid in placing smoke grenades effectively. @@ -200,6 +201,7 @@ 投擲行動中に風向きの情報を一時的に表示し、発煙手榴弾の煙幕を効果的に展開しやすくします。 연막탄을 효과적으로 배치하는 데 도움이 되도록 투척하는 동안 일시적으로 바람 정보를 표시합니다. Affiche les informations sur le vent pendant le lancement pour placer les grenades fumigènes plus efficacement. + Временно отображайте информацию о ветре во время броска, чтобы помочь эффективно разместить дымовые шашки. Prepare/Change Throwable diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index 7138c8da95..4afdf2ad89 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -1833,18 +1833,21 @@ 手ぶれ 무기 흔들림 Oscillation de l'arme + Колебание оружия Enable Weapon Sway 手ぶれを有効化 무기 흔들림 추가 Activer l'oscillation de l'arme + Включить колебание оружия Enables weapon sway influenced by sway factors, such as stance, fatigue and medical condition.\nDisabling this setting will defer sway to vanilla or other mods. 姿勢、疲労、負傷状態などの手ぶれ要因に影響を受ける武器照準の揺れを有効にします。\nこの設定を無効にすると、手ぶれの揺れはバニラまたは他のMODの処理に任されます。 흔들림 계수, 자세, 피로도, 건강 상태 등의 요인에 영향을 받는 무기 흔들림을 활성화합니다.\n이 설정을 비활성화하면 바닐라 또는 다른 모드의 흔들림으로 대체됩니다. Active l'oscillation de l'arme influencé par les facteurs d'oscillation, tels que la position, la fatigue et l'état de santé.\nLa désactivation de ce paramètre reportera l'oscillation à vanilla ou à d'autres mods. + Активируйте колебание оружия в зависимости от таких факторов, как стойка, усталость и состояние здоровья.\nОтключение этого параметра приведет к переносу раскачивания на vanilla или другие моды. Sway factor diff --git a/addons/fieldmanual/stringtable.xml b/addons/fieldmanual/stringtable.xml index 18f45a1e7e..05c7414f17 100644 --- a/addons/fieldmanual/stringtable.xml +++ b/addons/fieldmanual/stringtable.xml @@ -155,6 +155,7 @@ %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. %3Fluidi EV%4 ristorano volume di sangue perso. Sangue, Plasma, e Salina sono funzionalmente identiche.<br/><br/>%3Utilizzo:%4<br/>%2Usa [%3%13%4] o [%3%14%4] e seleziona un arto.<br/>%2Ristora il volume di sangue selezionando il tipo di %3Fluido EV%4 desiderato. %3IV 輸液%4は失われた血液を回復します。血液、血漿、生理食塩水は機能的には同じです。<br/><br/>%3使用方法:%4<br/>%2[%3%13%4] または [%3%14%4] を使って四肢を選択します。<br/>%2希望の%3IV 輸液%4の種類を選択して、血液量を復元します。 + %%3Внутривенные жидкости%4восстанавливают потерянный объем крови. Кровь, плазма и физраствор функционально идентичны.<br/><br/>%3 Использование:%4<br/>%2 Используйте [%3%13%4] или [%3%14%4] и выберите добавку.<br/>%2 Восстановите объем крови выбрав желаемый %4тип %3жидкости Increase Heart Rate | Wake Up Faster diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index de741e55c1..0cb4cffb99 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -373,6 +373,7 @@ Only units with heavy weapons + Только юниты с тяжелым вооружением diff --git a/addons/medical_gui/stringtable.xml b/addons/medical_gui/stringtable.xml index 6d7e819b29..5a41bba671 100644 --- a/addons/medical_gui/stringtable.xml +++ b/addons/medical_gui/stringtable.xml @@ -1366,6 +1366,7 @@ 出血状態の表示 출혈 상태 표시 Afficher l'état des saignements + Показать состояние кровотечения Display if the patient is bleeding, optionally with rate @@ -1376,6 +1377,7 @@ 患者が出血しているかどうかを表示します。オプションで出血速度も表示します 환자가 출혈 중인지 여부를 표시합니다(선택적으로 출혈 속도 포함) Indique si le patient saigne, éventuellement avec le taux de saignement + Показывает, есть ли у пациента кровотечение, опционально с указанием частоты Show Bleeding Rate @@ -1386,6 +1388,7 @@ 出血速度の表示 출혈 속도 표시 Afficher le taux de saignement + Показать частоту кровотечения Peek Medical Info on Hit diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml index 4e186edc85..be421eff36 100644 --- a/addons/medical_treatment/stringtable.xml +++ b/addons/medical_treatment/stringtable.xml @@ -3574,7 +3574,7 @@ Receiving Saline IV [%1ml] Erhalte Saline IV [%1ml] Recibiendo Salina IV [%1ml] - Принимается солевой раствор IV [%1 мл] + Принимается физраствор [%1 мл] Otrzymywanie soli IV [%1ml] Transfusion de sérum salé : [%1 ml] Přijímání soli IV [%1ml] @@ -3590,7 +3590,7 @@ Receiving Blood IV [%1ml] Erhalte Blut IV [%1ml] Recibiendo Sangre IV [%1ml] - Принимается кровь IV [%1 мл] + Принимается кровь [%1 мл] Otrzymywanie krwi IV [%1ml] Transfusion de sang : [%1 ml] Přijímání krve IV [%1ml] @@ -3606,7 +3606,7 @@ Receiving Plasma IV [%1ml] Erhalte Plasma IV [%1ml] Recibiendo Plasma IV [%1ml] - Принимается плазма IV [%1 мл] + Принимается плазма [%1 мл] Otrzymywanie plazmy IV [%1ml] Transfusion de plasma : [%1 ml] Přijímání plazmy IV [%1ml] From b637a0ea0930df9312818e35a659f487c8d560b7 Mon Sep 17 00:00:00 2001 From: Hexo <130893962+Alfred-Neuman@users.noreply.github.com> Date: Sat, 13 Apr 2024 22:09:48 +0200 Subject: [PATCH 092/132] Update translate Hearing french (#9949) Co-authored-by: PabstMirror --- addons/hearing/stringtable.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index 0cb4cffb99..1cbeacf259 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -373,6 +373,7 @@ Only units with heavy weapons + Uniquement les unités dotées d'armes lourdes Только юниты с тяжелым вооружением From dda6b9d2dc2d896a53b6e81001e595b17bee1596 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Tue, 16 Apr 2024 22:33:40 +0200 Subject: [PATCH 093/132] Medical Treatment - Enforce bandage effectiveness variable type (#9950) Enforce bandage effectiveness variable type --- addons/medical_treatment/functions/fnc_bandageLocal.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/medical_treatment/functions/fnc_bandageLocal.sqf b/addons/medical_treatment/functions/fnc_bandageLocal.sqf index 4cecbb2f17..2c59540fd1 100644 --- a/addons/medical_treatment/functions/fnc_bandageLocal.sqf +++ b/addons/medical_treatment/functions/fnc_bandageLocal.sqf @@ -18,7 +18,7 @@ * Public: No */ -params ["_patient", "_bodyPart", "_bandage", ["_bandageEffectiveness", 1]]; +params ["_patient", "_bodyPart", "_bandage", ["_bandageEffectiveness", 1, [0]]]; TRACE_4("bandageLocal",_patient,_bodyPart,_bandage,_bandageEffectiveness); _bodyPart = toLowerANSI _bodyPart; From 7480ae377dc19e0ce74c76479fe6c41e3eee7a8c Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Fri, 19 Apr 2024 19:27:04 +0200 Subject: [PATCH 094/132] Scopes - Stop changing CBA setting value directly (#9954) Update XEH_postInit.sqf --- addons/scopes/XEH_postInit.sqf | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/addons/scopes/XEH_postInit.sqf b/addons/scopes/XEH_postInit.sqf index 4ce8d6d11c..997fe8d6dd 100644 --- a/addons/scopes/XEH_postInit.sqf +++ b/addons/scopes/XEH_postInit.sqf @@ -19,11 +19,13 @@ GVAR(canAdjustWindage) = [false, false, false]; GVAR(scopeAdjust) = [[[0,0],0,[0,0],0], [[0,0],0,[0,0],0], [[0,0],0,[0,0],0]]; ["CBA_settingsInitialized", { - if (!GVAR(enabled)) exitWith {}; - if (GVAR(deduceBarometricPressureFromTerrainAltitude)) then { - GVAR(zeroReferenceBarometricPressure) = 1013.25 * (1 - (0.0065 * EGVAR(common,mapAltitude)) / 288.15) ^ 5.255754495; + // Overwrite setting if automatic pressure deduction is wanted + if (isServer && GVAR(deduceBarometricPressureFromTerrainAltitude)) then { + private _referencePressure = 1013.25 * (1 - (0.0065 * EGVAR(common,mapAltitude)) / 288.15) ^ 5.255754495; + + [QGVAR(zeroReferenceBarometricPressure), _referencePressure, 2, "server"] call CBA_settings_fnc_set; }; // Check inventory when it changes @@ -47,5 +49,4 @@ GVAR(scopeAdjust) = [[[0,0],0,[0,0],0], [[0,0],0,[0,0],0], [[0,0],0,[0,0],0]]; // Register fire event handler ["ace_firedPlayer", LINKFUNC(firedEH)] call CBA_fnc_addEventHandler; ["ace_firedPlayerNonLocal", LINKFUNC(firedEH)] call CBA_fnc_addEventHandler; - }] call CBA_fnc_addEventHandler; From 23842aab39c32dbbefa2f7b894b773bff2da1620 Mon Sep 17 00:00:00 2001 From: Tim Beswick Date: Fri, 19 Apr 2024 20:57:41 +0100 Subject: [PATCH 095/132] Medical - Fix script error when bandaging (#9956) Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> --- addons/medical_treatment/functions/fnc_bandage.sqf | 7 ++++--- docs/wiki/framework/events-framework.md | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/addons/medical_treatment/functions/fnc_bandage.sqf b/addons/medical_treatment/functions/fnc_bandage.sqf index 2152e81a3b..8657936a66 100644 --- a/addons/medical_treatment/functions/fnc_bandage.sqf +++ b/addons/medical_treatment/functions/fnc_bandage.sqf @@ -10,7 +10,8 @@ * 3: Treatment * 4: Item User * 5: Used Item - * 6: Bandage effectiveness coefficient (default: 1) + * 6: Create litter + * 7: Bandage effectiveness coefficient (default: 1) * * Return Value: * None @@ -21,10 +22,10 @@ * Public: No */ -_this set [6, _this param [6, 1]]; // set default Bandage effectiveness coefficient +_this set [7, _this param [7, 1]]; // set bandage effectiveness coefficient [QGVAR(bandaged), _this] call CBA_fnc_localEvent; // Raise event with reference so mods can modify this -params ["_medic", "_patient", "_bodyPart", "_classname", "", "", "_bandageEffectiveness"]; +params ["_medic", "_patient", "_bodyPart", "_classname", "", "", "", "_bandageEffectiveness"]; [_patient, "activity", LSTRING(Activity_bandagedPatient), [[_medic, false, true] call EFUNC(common,getName)]] call FUNC(addToLog); diff --git a/docs/wiki/framework/events-framework.md b/docs/wiki/framework/events-framework.md index 8a50912e02..f8183b598f 100644 --- a/docs/wiki/framework/events-framework.md +++ b/docs/wiki/framework/events-framework.md @@ -42,7 +42,7 @@ The vehicle events will also have the following local variables available `_gunn |`ace_treatmentSucceded` | [_caller, _target, _selectionName, _className, _itemUser, _usedItem] | Local | Listen | Treatment action is completed (local on the _caller) |`ace_treatmentFailed` | [_caller, _target, _selectionName, _className, _itemUser, _usedItem] | Local | Listen | Treatment action has been interrupted (local on the _caller) |`ace_medical_handleUnitVitals` | [_unit, _deltaT] | Local | Listen | Vitals update ran for unit, _deltaT is the time elapsed since the previous vitals update (local to _unit) -|`ace_medical_treatment_bandaged` | [_medic, _patient, _bodyPart, _className, _bandageEffectiveness] | Local | Listen | _medic has bandaged _patient, the array can be modified to change treatment parameters (local to _medic) +|`ace_medical_treatment_bandaged` | [_medic, _patient, _bodyPart, _className, _itemUser, _usedItem, _createLitter, _bandageEffectiveness] | Local | Listen | _medic has bandaged _patient, the array can be modified to change treatment parameters (local to _medic) ### 2.3 Interaction Menu (`ace_interact_menu`) MenuType: 0 = Interaction, 1 = Self Interaction From ac9ffb5276d8a62169551bc01b12009b5f6b276b Mon Sep 17 00:00:00 2001 From: Dart <59131299+DartRuffian@users.noreply.github.com> Date: Fri, 19 Apr 2024 15:53:33 -0500 Subject: [PATCH 096/132] Docs - Fix tables and inconsistencies (#9952) Co-authored-by: LinkIsGrim <69561145+LinkIsGrim@users.noreply.github.com> --- docs/wiki/framework/arsenal-framework.md | 202 +++++++++--------- docs/wiki/framework/attach-framework.md | 14 +- docs/wiki/framework/dragging-framework.md | 68 +++--- docs/wiki/framework/events-framework.md | 196 ++++++++--------- docs/wiki/framework/explosives-framework.md | 62 +++--- docs/wiki/framework/fastroping-framework.md | 22 +- .../wiki/framework/field-rations-framework.md | 42 ++-- docs/wiki/framework/fire-framework.md | 22 +- docs/wiki/framework/fortify-framework.md | 16 +- docs/wiki/framework/frag-framework.md | 66 +++--- docs/wiki/framework/goggles-framework.md | 8 +- docs/wiki/framework/grenades-framework.md | 10 +- .../framework/interactionMenu-framework.md | 37 ++-- docs/wiki/framework/laser-framework.md | 18 +- docs/wiki/framework/medical-framework.md | 22 +- .../framework/medical-treatment-framework.md | 2 + .../framework/missile-guidance-framework.md | 6 +- docs/wiki/framework/overpressure-framework.md | 6 +- docs/wiki/framework/rearm-framework.md | 158 +++++++------- docs/wiki/framework/refuel-framework.md | 78 +++---- .../framework/reloadlaunchers-framework.md | 6 +- docs/wiki/framework/slideshow-framework.md | 44 ++-- docs/wiki/framework/spectator-framework.md | 10 +- docs/wiki/framework/tagging-framework.md | 34 +-- docs/wiki/framework/trenches-framework.md | 2 +- docs/wiki/framework/ui-framework.md | 26 +-- docs/wiki/framework/vehiclelock-framework.md | 22 +- docs/wiki/framework/vehicles-framework.md | 18 +- docs/wiki/framework/wirecutter-framework.md | 6 +- docs/wiki/framework/xm157-framework.md | 1 - 30 files changed, 616 insertions(+), 608 deletions(-) diff --git a/docs/wiki/framework/arsenal-framework.md b/docs/wiki/framework/arsenal-framework.md index 273a70836f..954bbc0a7e 100644 --- a/docs/wiki/framework/arsenal-framework.md +++ b/docs/wiki/framework/arsenal-framework.md @@ -31,11 +31,11 @@ To quickly add a full ACE Arsenal to a box for all clients use the following cod `ace_arsenal_fnc_initBox` -| | Argument | Type | Optional (default value) ----| -------- | ---- | ------------------------ -0 | Box | Object | Required -1 | Items | Array of strings or boolean | Required -2 | Initialize globally | Boolean | Optional (default: `false`) +| | Argument | Type | Optional (default value) | +|----| -------- | ---- | ------------------------ | +| 0 | Box | Object | Required | +| 1 | Items | Array of strings or boolean | Required | +| 2 | Initialize globally | Boolean | Optional (default: `false`) | This will add the virtual items passed as arguments and add an ACE interaction to open ACE Arsenal. @@ -51,11 +51,11 @@ Please note that at least one virtual item needs to be added otherwise ACE Arsen `ace_arsenal_fnc_openBox` -| | Argument | Type | Optional (default value) ----| -------- | ---- | ------------------------ -0 | Box | Object | Required -1 | Unit to open ACE Arsenal on | Object | Required -2 | Ignore virtual items and fill ACE Arsenal | Boolean | Optional (default: `false`) +| | Argument | Type | Optional (default value) | +|----| -------- | ---- | ------------------------ | +| 0 | Box | Object | Required | +| 1 | Unit to open ACE Arsenal on | Object | Required | +| 2 | Ignore virtual items and fill ACE Arsenal | Boolean | Optional (default: `false`) | Examples: - `[_box, player] call ace_arsenal_fnc_openBox` @@ -67,10 +67,10 @@ In the second example a full ACE Arsenal will be opened on the player. `ace_arsenal_fnc_removeBox` -| | Argument | Type | Optional (default value) ----| -------- | ---- | ------------------------ -0 | Box | Object | Required -2 | Remove globally | Boolean | Optional (default: `false`) +| | Argument | Type | Optional (default value) | +|----| -------- | ---- | ------------------------ | +| 0 | Box | Object | Required | +| 2 | Remove globally | Boolean | Optional (default: `false`) | Example: `[_box, true] call ace_arsenal_fnc_removeBox` @@ -81,11 +81,11 @@ Example: `ace_arsenal_fnc_addVirtualItems` -| | Argument | Type | Optional (default value) ----| -------- | ---- | ------------------------ -0 | Box | Object | Required -1 | Items | Array of strings or boolean | Required -2 | Add globally | Boolean | Optional (default: `false`) +| | Argument | Type | Optional (default value) | +|----| -------- | ---- | ------------------------ | +| 0 | Box | Object | Required | +| 1 | Items | Array of strings or boolean | Required | +| 2 | Add globally | Boolean | Optional (default: `false`) | Passing an array of strings (class names) will add each one of those items to the specified box, passing true will add ALL items that are compatible with ACE Arsenal (the sorting is done on game startup). Faces, voices and insignia can't be added via this function. @@ -97,11 +97,11 @@ Examples: `ace_arsenal_fnc_removeVirtualItems` -| | Argument | Type | Optional (default value) ----| -------- | ---- | ------------------------ -0 | Box | Object | Required -1 | Items | Array of strings or boolean | Required -2 | Remove globally | Boolean | Optional (default: `false`) +| | Argument | Type | Optional (default value) | +|----| -------- | ---- | ------------------------ | +| 0 | Box | Object | Required | +| 1 | Items | Array of strings or boolean | Required | +| 2 | Remove globally | Boolean | Optional (default: `false`) | Like adding virtual items, passing an array of string (class names) will remove each ones of those items, however passing true will remove all virtual items and also remove the interaction to access ACE Arsenal. Faces, voices and insignia can't be removed via this function. @@ -185,11 +185,11 @@ Players with Zeus access can save default loadouts ingame, doing so will make th `ace_arsenal_fnc_addDefaultLoadout` -| | Argument | Type | Optional (default value) ----| -------- | ---- | ------------------------ -0 | Name of loadout | String | Required -1 | getUnitLoadout array or CBA extended loadout array | Array | Required -2 | Add loadout globally | Boolean | Optional (default: `false`) +| | Argument | Type | Optional (default value) | +|----| -------- | ---- | ------------------------ | +| 0 | Name of loadout | String | Required | +| 1 | getUnitLoadout array or CBA extended loadout array | Array | Required | +| 2 | Add loadout globally | Boolean | Optional (default: `false`) | Example: `["Squad Leader", getUnitLoadout sql1, true] call ace_arsenal_fnc_addDefaultLoadout` @@ -229,22 +229,22 @@ The arguments passed to the bar, text and condition statements are: `ace_arsenal_fnc_addStat` -| | Argument | Type | Optional (default value) ---- | -------- | ---- | ------------------------ -0 | Tabs to add the stat to | Array of arrays | Required -0.1 | Left tab indexes | Array of numbers | Required -0.2 | Right tab indexes | Array of numbers | Required -1 | Stat class ID | String | Required -2 | Config entries to pass | Array of strings | Required -3 | Title | String | Required -4 | Show bar / show text bools | Array of booleans | Required -4.1 | Show bar | Boolean | Required -4.2 | Show text | Boolean | Required -5 | Array of statements | Array of code | Required -5.1 | Bar code | Code | Required -5.2 | Text code | Code | Required -5.3 | Condition | Code | Required -6 | Priority | Number | Optional (default: `0`) +| | Argument | Type | Optional (default value) | +| --- | -------- | ---- | ------------------------ | +| 0 | Tabs to add the stat to | Array of arrays | Required | +| 0.1 | Left tab indexes | Array of numbers | Required | +| 0.2 | Right tab indexes | Array of numbers | Required | +| 1 | Stat class ID | String | Required | +| 2 | Config entries to pass | Array of strings | Required | +| 3 | Title | String | Required | +| 4 | Show bar / show text bools | Array of booleans | Required | +| 4.1 | Show bar | Boolean | Required | +| 4.2 | Show text | Boolean | Required | +| 5 | Array of statements | Array of code | Required | +| 5.1 | Bar code | Code | Required | +| 5.2 | Text code | Code | Required | +| 5.3 | Condition | Code | Required | +| 6 | Priority | Number | Optional (default: `0`) | Return Value: - Array of stat IDs @@ -263,9 +263,9 @@ If a stat already exists (so same class ID and tab), it will ignore the new addi `ace_arsenal_fnc_removeStat` -| | Argument | Type | Optional (default value) ----| -------- | ---- | ------------------------ -0 | Array of IDs | Array | Required +| | Argument | Type | Optional (default value) | +|----| -------- | ---- | ------------------------ | +| 0 | Array of IDs | Array | Required | Stats IDs are unique, IDs are generated as follows: @@ -345,15 +345,15 @@ The argument passed to the condition is: `ace_arsenal_fnc_addSort` -| | Argument | Type | Optional (default value) ---- | -------- | ---- | ------------------------ -0 | Tabs to add the sort to | Array of arrays | Required -0.1 | Left tab indexes | Array of numbers | Required -0.2 | Right tab indexes | Array of numbers | Required -1 | Stat class ID | String | Required -2 | Title | String | Required -3 | Algorithm | Code | Required -4 | Condition | Code | Optional (default: `{true}`) +| | Argument | Type | Optional (default value) | +| --- | -------- | ---- | ------------------------ | +| 0 | Tabs to add the sort to | Array of arrays | Required | +| 0.1 | Left tab indexes | Array of numbers | Required | +| 0.2 | Right tab indexes | Array of numbers | Required | +| 1 | Stat class ID | String | Required | +| 2 | Title | String | Required | +| 3 | Algorithm | Code | Required | +| 4 | Condition | Code | Optional (default: `{true}`) | Return Value: - Array of sort IDs @@ -382,9 +382,9 @@ If a sorting method already exists (so same class ID and tab), it will ignore th `ace_arsenal_fnc_removeSort` -| | Argument | Type | Optional (default value) ----| -------- | ---- | ------------------------ -0 | Array of IDs | Array | Required +| | Argument | Type | Optional (default value) | +|----| -------- | ---- | ------------------------ | +| 0 | Array of IDs | Array | Required | Sorting method IDs are unique and are generated in the same fashion as the stat IDs (see `5.3 Removing stats via a function`). @@ -438,15 +438,15 @@ The focused unit object is passed to the condition and statement functions. `ace_arsenal_fnc_addAction` -| | Argument | Type | Optional (default value) ---- | -------- | ---- | ------------------------ -0 | Tabs to add the sort to | Array of numbers | Required -1 | Action class ID | String | Required -2 | Title | String | Required -3 | Actions | Array of arrays | Required -4 | Condition | Code | Optional (default: `{true}`) -5 | Scope editor | Number | Optional (default: `2`) -6 | Update on cargo change | Boolean | Optional (default: `false`) +| | Argument | Type | Optional (default value) | +| --- | -------- | ---- | ------------------------ | +| 0 | Tabs to add the sort to | Array of numbers | Required | +| 1 | Action class ID | String | Required | +| 2 | Title | String | Required | +| 3 | Actions | Array of arrays | Required | +| 4 | Condition | Code | Optional (default: `{true}`) | +| 5 | Scope editor | Number | Optional (default: `2`) | +| 6 | Update on cargo change | Boolean | Optional (default: `false`) | Return Value: - Array of action IDs @@ -474,9 +474,9 @@ If an action already exists (so same class ID and tab within an action), it will `ace_arsenal_fnc_removeAction` -| | Argument | Type | Optional (default value) ----| -------- | ---- | ------------------------ -0 | Array of IDs | Array | Required +| | Argument | Type | Optional (default value) | +|----| -------- | ---- | ------------------------ | +| 0 | Array of IDs | Array | Required | Action IDs are unique and their generation is explained in `7.2 Adding sorting methods via a function`. @@ -492,28 +492,28 @@ All are local. | Name | Arguments | Added in | | ------------- | ------------- | ------------- | -| ace_arsenal_boxInitialized | Arsenal box (OBJECT), items (BOOL or ARRAY) | -| ace_arsenal_boxRemoved | Arsenal box (OBJECT) | -| ace_arsenal_displayOpened | Arsenal display (DISPLAY) | -| ace_arsenal_displayClosed | None | -| ace_arsenal_leftPanelFilled | Arsenal display (DISPLAY), current left panel IDC (SCALAR), current right panel IDC (SCALAR) | -| ace_arsenal_rightPanelFilled | Arsenal display (DISPLAY), current left panel IDC (SCALAR), current right panel IDC (SCALAR) | -| ace_arsenal_onLoadoutSave | Loadout index (SCALAR), [loadout name (STRING), loadout data (ARRAY)] | -| ace_arsenal_onLoadoutSaveExtended | Loadout index (SCALAR), [loadout name (STRING), CBA extended loadout data (ARRAY)] | 3.15.1 -| ace_arsenal_onLoadoutLoad | loadout data (ARRAY), loadout name (STRING) | -| ace_arsenal_onLoadoutLoadExtended | CBA extended loadout data (ARRAY), loadout name (STRING) | 3.15.1 -| ace_arsenal_onLoadoutDelete | loadout name (STRING) | -| ace_arsenal_loadoutShared | Loadouts list listnBox control (CONTROL), loadout author (STRING), loadout name (STRING), loadout data (ARRAY) | -| ace_arsenal_loadoutUnshared | Loadouts list listnBox control (CONTROL), loadout author (STRING), loadout name (STRING) | -| ace_arsenal_cargoChanged | Arsenal display (DISPLAY), item (STRING), add or remove (NUMBER), shiftState (BOOL) | -| ace_arsenal_loadoutImported | Arsenal display (DISPLAY), import list (BOOL) | -| ace_arsenal_loadoutExported | Arsenal display (DISPLAY), export list (BOOL) | -| ace_arsenal_loadoutsDisplayOpened | loadouts screen display (DISPLAY) | 3.12.3 | -| ace_arsenal_loadoutsDisplayClosed | None | 3.12.3 | -| ace_arsenal_loadoutsTabChanged | loadouts screen display (DISPLAY), tab control (CONTROL) | 3.12.3 | -| ace_arsenal_loadoutsListFilled | loadouts screen display (DISPLAY), tab control (CONTROL) | 3.12.3 | -| ace_arsenal_loadoutVerified | loadout data (ARRAY), loadout CBA extended data (HASHMAP), null items (ARRAY), unavailable items (ARRAY), unavailable extended data (ARRAY) | 3.17.0 | -| ace_arsenal_weaponItemChanged | weapon classname (STRING), item classname (STRING), item index (NUMBER, 0-5: muzzle, side, optic, bipod, magazine, underbarrel) | 3.16.0 | +| `ace_arsenal_boxInitialized` | Arsenal box (OBJECT), items (BOOL or ARRAY) | +| `ace_arsenal_boxRemoved` | Arsenal box (OBJECT) | +| `ace_arsenal_displayOpened` | Arsenal display (DISPLAY) | +| `ace_arsenal_displayClosed` | None | +| `ace_arsenal_leftPanelFilled` | Arsenal display (DISPLAY), current left panel IDC (SCALAR), current right panel IDC (SCALAR) | +| `ace_arsenal_rightPanelFilled` | Arsenal display (DISPLAY), current left panel IDC (SCALAR), current right panel IDC (SCALAR) | +| `ace_arsenal_onLoadoutSave` | Loadout index (SCALAR), [loadout name (STRING), loadout data (ARRAY)] | +| `ace_arsenal_onLoadoutSaveExtended` | Loadout index (SCALAR), [loadout name (STRING), CBA extended loadout data (ARRAY)] | 3.15.1 +| `ace_arsenal_onLoadoutLoad` | loadout data (ARRAY), loadout name (STRING) | +| `ace_arsenal_onLoadoutLoadExtended` | CBA extended loadout data (ARRAY), loadout name (STRING) | 3.15.1 +| `ace_arsenal_onLoadoutDelete` | loadout name (STRING) | +| `ace_arsenal_loadoutShared` | Loadouts list listnBox control (CONTROL), loadout author (STRING), loadout name (STRING), loadout data (ARRAY) | +| `ace_arsenal_loadoutUnshared` | Loadouts list listnBox control (CONTROL), loadout author (STRING), loadout name (STRING) | +| `ace_arsenal_cargoChanged` | Arsenal display (DISPLAY), item (STRING), add or remove (NUMBER), shiftState (BOOL) | +| `ace_arsenal_loadoutImported` | Arsenal display (DISPLAY), import list (BOOL) | +| `ace_arsenal_loadoutExported` | Arsenal display (DISPLAY), export list (BOOL) | +| `ace_arsenal_loadoutsDisplayOpened` | loadouts screen display (DISPLAY) | 3.12.3 | +| `ace_arsenal_loadoutsDisplayClosed` | None | 3.12.3 | +| `ace_arsenal_loadoutsTabChanged` | loadouts screen display (DISPLAY), tab control (CONTROL) | 3.12.3 | +| `ace_arsenal_loadoutsListFilled` | loadouts screen display (DISPLAY), tab control (CONTROL) | 3.12.3 | +| `ace_arsenal_loadoutVerified` | loadout data (ARRAY), loadout CBA extended data (HASHMAP), null items (ARRAY), unavailable items (ARRAY), unavailable extended data (ARRAY) | 3.17.0 | +| `ace_arsenal_weaponItemChanged` | weapon classname (STRING), item classname (STRING), item index (NUMBER, 0-5: muzzle, side, optic, bipod, magazine, underbarrel) | 3.16.0 | ## 9. Custom sub item categories @@ -521,13 +521,13 @@ All are local. `ace_arsenal_fnc_addRightPanelButton` -| | Argument | Type | Optional (default value) ----| -------- | ---- | ------------------------ -0 | Misc. items | Array of strings | Required -1 | Tooltip | String | Optional (default: `""`) -2 | Picture path | String | Optional (default: `"\z\ace\addons\arsenal\data\iconCustom.paa"`) -3 | Override a specific button | Number | Optional (default: `-1`) -4 | Move button on overwrite | Bool | Optional (default: `false`) +| | Argument | Type | Optional (default value) | +|----| -------- | ---- | ------------------------ | +| 0 | Misc. items | Array of strings | Required | +| 1 | Tooltip | String | Optional (default: `""`) | +| 2 | Picture path | String | Optional (default: `"\z\ace\addons\arsenal\data\iconCustom.paa"`) | +| 3 | Override a specific button | Number | Optional (default: `-1`) | +| 4 | Move button on overwrite | Bool | Optional (default: `false`) | Return Value: - Successful: Number of the slot (0-9) diff --git a/docs/wiki/framework/attach-framework.md b/docs/wiki/framework/attach-framework.md index 2ed5f74561..f1f35bc6a8 100644 --- a/docs/wiki/framework/attach-framework.md +++ b/docs/wiki/framework/attach-framework.md @@ -35,10 +35,10 @@ class CfgVehicles { ``` ### 1.2 Define attach orientation for non-symmetric items -In the case the item needs to have a particular orientation when attached, add the config value: ``ace_attach_orientation`` which is an array describing the ``roll`` and ``yaw`` orientation of the object. -The default value is: ``[0,0]``. +In the case the item needs to have a particular orientation when attached, add the config value: ``ace_attach_orientation`` which is an array describing the ``roll`` and ``yaw`` orientation of the object. +The default value is: ``[0,0]``. -Example: +Example: ```cpp class CfgWeapons { class attach_item: CBA_MiscItem { @@ -49,11 +49,11 @@ class CfgWeapons { ``` ## 2. Event Handlers -### 2.1 Listenable Events +### 2.1 Listenable Events | Event Key | Parameters | Locality | Description | -|----------|---------|---------|---------|---------|---------| -|`ace_attach_attached` | [_attachedObject, _itemClassname, _temporary] | Local | Called after an item is attached to an object. `_temporary` flag means the item is being re-attached (after a unit is exiting a vehicle, for example) -|`ace_attach_detaching` | [_attachedObject, _itemClassname, _temporary] | Local | Called just before an item is detached/removed from an object. `_temporary` flag means the item will be reattached later, see above. +|----------|---------|---------|---------| +|`ace_attach_attached` | [_attachedObject, _itemClassname, _temporary] | Local | Called after an item is attached to an object. `_temporary` flag means the item is being re-attached (after a unit is exiting a vehicle, for example) | +|`ace_attach_detaching` | [_attachedObject, _itemClassname, _temporary] | Local | Called just before an item is detached/removed from an object. `_temporary` flag means the item will be reattached later, see above. | ### 2.2 Other events for attached objects Use [CBA Extended Event Handlers](https://github.com/CBATeam/CBA_A3/wiki/Extended-Event-Handlers-(new)). Note that objects attached to units will be deleted/created upon entering/exiting vehicles and should be handled accordingly. diff --git a/docs/wiki/framework/dragging-framework.md b/docs/wiki/framework/dragging-framework.md index f4400aed44..43a7c98ba4 100644 --- a/docs/wiki/framework/dragging-framework.md +++ b/docs/wiki/framework/dragging-framework.md @@ -46,58 +46,58 @@ You will **not** be able to carry / drag objects that are too heavy, the mass is `ace_dragging_fnc_setDraggable` - | Arguments | Type | Optional (default value) ----| --------- | ---- | ------------------------ -0 | Any object | Object | Required -1 | Enable dragging, true to enable, false to disable | Boolean | Required -2 | Position to offset the object from player | Array | Optional (default: `[0, 1.5, 0]`) -3 | Direction in degree to rotate the object | Number | Optional (default: `0`) -4 | Ignore weight limitation for dragging | Boolean | Optional (default: `false`) -**R** | None | None | Return value +| | Arguments | Type | Optional (default value) | +|----| --------- | ---- | ------------------------ | +| 0 | Any object | Object | Required | +| 1 | Enable dragging, true to enable, false to disable | Boolean | Required | +| 2 | Position to offset the object from player | Array | Optional (default: `[0, 1.5, 0]`) | +| 3 | Direction in degree to rotate the object | Number | Optional (default: `0`) | +| 4 | Ignore weight limitation for dragging | Boolean | Optional (default: `false`) | +| **R** | None | None | Return value | #### 2.1.1 Example 1 `[foo, true, [0, 2, 0], 45] call ace_dragging_fnc_setDraggable;` - | Arguments | Explanation ----| --------- | ----------- -0 | `foo` | My object -1 | `true` | Dragging is enabled -2 | `[0,2,0]` | 0 meters sideways, 2 meters forward, 0 meters upwards -3 | `45` | Rotated by 45° +| | Arguments | Explanation | +|----| --------- | ----------- | +| 0 | `foo` | My object | +| 1 | `true` | Dragging is enabled | +| 2 | `[0,2,0]` | 0 meters sideways, 2 meters forward, 0 |meters upwards +| 3 | `45` | Rotated by 45° | #### 2.1.2 Example 2 `[bar, false, [3, -2, 2], 20] call ace_dragging_fnc_setDraggable;` - | Arguments | Explanation ----| --------- | ----------- -0 | `bar` | My object -1 | `false` | Dragging is disabled -2 | `[3, -2, 2]` | 3 meters sideways, 2 meters backwards, 2 meters upwards -3 | `20` | Rotated by 20° +| | Arguments | Explanation | +|----| --------- | ----------- | +| 0 | `bar` | My object | +| 1 | `false` | Dragging is disabled | +| 2 | `[3, -2, 2]` | 3 meters sideways, 2 meters backwards, 2 meters upwards | +| 3 | `20` | Rotated by 20° | ### 2.2 Enabling / disabling carrying `ace_dragging_fnc_setCarryable` - | Arguments | Type | Optional (default value) ----| --------- | ---- | ------------------------ -0 | Any object | Object | Required -1 | Enable carrying, true to enable, false to disable | Boolean | Required -2 | Position to offset the object from player | Array | Optional (default: `[0, 1, 1]`) -3 | Direction in degree to rotate the object | Number | Optional (default: `0`) -4 | Ignore weight limitation for carrying | Boolean | Optional (default: `false`) -**R** | None | None | Return value +| | Arguments | Type | Optional (default value) | +|----| --------- | ---- | ------------------------ | +| 0 | Any object | Object | Required | +| 1 | Enable carrying, true to enable, false to disable | Boolean | Required | +| 2 | Position to offset the object from player | Array | Optional (default: `[0, 1, 1]`) | +| 3 | Direction in degree to rotate the object | Number | Optional (default: `0`) | +| 4 | Ignore weight limitation for carrying | Boolean | Optional (default: `false`) | +| **R** | None | None | Return value | #### 2.2.1 Example `[foo, true, [0, 3, 1], 10] call ace_dragging_fnc_setCarryable;` - | Arguments | Explanation ----| --------- | ----------- -0 | `foo` | My object -1 | `true`| Carrying is enabled -2 | `[0,2,0]` | 0 meters sideways, 3 meters forward, 1 meter upwards -3 | `10` | Rotated by 10° +| | Arguments | Explanation | +|----| --------- | ----------- | +| 0 | `foo` | My object | +| 1 | `true`| Carrying is enabled | +| 2 | `[0,2,0]` | 0 meters sideways, 3 meters forward, 1 meter upwards | +| 3 | `10` | Rotated by 10° | diff --git a/docs/wiki/framework/events-framework.md b/docs/wiki/framework/events-framework.md index f8183b598f..d6d4caa849 100644 --- a/docs/wiki/framework/events-framework.md +++ b/docs/wiki/framework/events-framework.md @@ -23,32 +23,32 @@ E.G.: If you only need to do action when player's weapon fires, this will be fas The vehicle events will also have the following local variables available `_gunner (OBJECT), _turret (ARRAY)`. | Event Key | Parameters | Locality | Type | Description | -|----------|---------|---------|---------|---------|---------| -|`ace_firedPlayer` | [_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile] | Local | Listen | ACE_player fires -|`ace_firedPlayerNonLocal` | [_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile] | Local | Listen | Any other player fires -|`ace_firedNonPlayer` | [_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile] | Local | Listen | AI fires -|`ace_firedPlayerVehicle` | [_vehicle, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile] | Local | Listen | ACE_player turret fires -|`ace_firedPlayerVehicleNonLocal` | [_vehicle, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile] | Local | Listen | Any other player turret fires -|`ace_firedNonPlayerVehicle` | [_vehicle, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile] | Local | Listen | AI turret fires +|----------|---------|---------|---------|---------| +|`ace_firedPlayer` | [_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile] | Local | Listen | ACE_player fires | +|`ace_firedPlayerNonLocal` | [_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile] | Local | Listen | Any other player fires | +|`ace_firedNonPlayer` | [_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile] | Local | Listen | AI fires | +|`ace_firedPlayerVehicle` | [_vehicle, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile] | Local | Listen | ACE_player turret fires | +|`ace_firedPlayerVehicleNonLocal` | [_vehicle, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile] | Local | Listen | Any other player turret fires | +|`ace_firedNonPlayerVehicle` | [_vehicle, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile] | Local | Listen | AI turret fires | ### 2.2 Medical (`ace_medical`) | Event Key | Parameters | Locality | Type | Description | -|----------|---------|---------|---------|---------|---------| -|`ace_unconscious` | [_unit, _state(BOOL)] | Global | Listen | Unit's unconscious state changed -|`ace_placedInBodyBag` | [_target, _bodyBag, _isGrave] | Global | Listen | Target placed into a bodybag Note: (Target will soon be deleted, target could be a bodybag) -|`ace_placedInGrave` | [_target, _grave] | Global | Listen | Target placed into a grave, _grave will be objNull if `Create Grave Markers` is disabled Note: (Target will soon be deleted) -|`ace_treatmentStarted` | [_caller, _target, _selectionName, _className, _itemUser, _usedItem] | Local | Listen | Treatment action has started (local on the _caller) -|`ace_treatmentSucceded` | [_caller, _target, _selectionName, _className, _itemUser, _usedItem] | Local | Listen | Treatment action is completed (local on the _caller) -|`ace_treatmentFailed` | [_caller, _target, _selectionName, _className, _itemUser, _usedItem] | Local | Listen | Treatment action has been interrupted (local on the _caller) -|`ace_medical_handleUnitVitals` | [_unit, _deltaT] | Local | Listen | Vitals update ran for unit, _deltaT is the time elapsed since the previous vitals update (local to _unit) -|`ace_medical_treatment_bandaged` | [_medic, _patient, _bodyPart, _className, _itemUser, _usedItem, _createLitter, _bandageEffectiveness] | Local | Listen | _medic has bandaged _patient, the array can be modified to change treatment parameters (local to _medic) +|----------|---------|---------|---------|---------| +|`ace_unconscious` | [_unit, _state(BOOL)] | Global | Listen | Unit's unconscious state changed | +|`ace_placedInBodyBag` | [_target, _bodyBag, _isGrave] | Global | Listen | Target placed into a bodybag Note: (Target will soon be deleted, target could be a bodybag) | +|`ace_placedInGrave` | [_target, _grave] | Global | Listen | Target placed into a grave, _grave will be objNull if `Create Grave Markers` is disabled Note: (Target will soon be deleted) | +|`ace_treatmentStarted` | [_caller, _target, _selectionName, _className, _itemUser, _usedItem] | Local | Listen | Treatment action has started (local on the _caller) | +|`ace_treatmentSucceded` | [_caller, _target, _selectionName, _className, _itemUser, _usedItem] | Local | Listen | Treatment action is completed (local on the _caller) | +|`ace_treatmentFailed` | [_caller, _target, _selectionName, _className, _itemUser, _usedItem] | Local | Listen | Treatment action has been interrupted (local on the _caller) | +|`ace_medical_handleUnitVitals` | [_unit, _deltaT] | Local | Listen | Vitals update ran for unit, _deltaT is the time elapsed since the previous vitals update (local to _unit) | +|`ace_medical_treatment_bandaged` | [_medic, _patient, _bodyPart, _className, _itemUser, _usedItem, _createLitter, _bandageEffectiveness] | Local | Listen | _medic has bandaged _patient, the array can be modified to change treatment parameters (local to _medic) | ### 2.3 Interaction Menu (`ace_interact_menu`) MenuType: 0 = Interaction, 1 = Self Interaction | Event Key | Parameters | Locality | Type | Description | -|----------|---------|---------|---------|---------|---------| +|----------|---------|---------|---------|---------| |`ace_interactMenuOpened` | [_menuType] | Local | Listen | Interaction Menu Opened |`ace_interactMenuClosed` | [_menuType] | Local | Listen | Interaction Menu Closed |`ace_interact_menu_newControllableObject` | [_typeOf] | Local | Listen | New controlable object, only fires once per type (add self interactions) @@ -56,79 +56,79 @@ MenuType: 0 = Interaction, 1 = Self Interaction ### 2.4 Cargo (`ace_cargo`) | Event Key | Parameters | Locality | Type | Description | -|----------|---------|---------|---------|---------|---------| -|`ace_addCargo` | [_item (CLASSNAME or OBJECT), _vehicle, _cargoCount] | Target | Callable | Scripted way to add cargo to vehicle -|`ace_cargoLoaded` | [_item, _vehicle] | Global | Listen | Cargo has been Loaded into vehicle -|`ace_cargoUnloaded` | [_item, _vehicle, _unloadType] | Global | Listen | Cargo has been Unloaded from vehicle +|----------|---------|---------|---------|---------| +|`ace_addCargo` | [_item (CLASSNAME or OBJECT), _vehicle, _cargoCount] | Target | Callable | Scripted way to add cargo to vehicle | +|`ace_cargoLoaded` | [_item, _vehicle] | Global | Listen | Cargo has been Loaded into vehicle | +|`ace_cargoUnloaded` | [_item, _vehicle, _unloadType] | Global | Listen | Cargo has been Unloaded from vehicle | ### 2.5 Captives (`ace_captives`) | Event Key | Parameters | Locality | Type | Description | -|----------|---------|---------|---------|---------|---------| -|`ace_captiveStatusChanged` | [_unit, _state(BOOL), _reason ("SetHandcuffed" or "SetSurrendered"), _caller] | Global | Listen | Unit's captivity state changed -|`ace_captives_setSurrendered` | [_unit, _state(BOOL)] | Target | Callable | Sets a unit to either start or stop surrendering -|`ace_captives_setHandcuffed` | [_unit, _state(BOOL)] | Target | Callable | Sets a unit to either start or stop being handcuffed -|`ace_captives_escortingCaptive` | [_unit, _state(BOOL), _caller] | Local | Listen | Caller starting or stopping escort of unit +|----------|---------|---------|---------|---------| +|`ace_captiveStatusChanged` | [_unit, _state(BOOL), _reason ("SetHandcuffed" or "SetSurrendered"), _caller] | Global | Listen | Unit's captivity state changed | +|`ace_captives_setSurrendered` | [_unit, _state(BOOL)] | Target | Callable | Sets a unit to either start or stop surrendering | +|`ace_captives_setHandcuffed` | [_unit, _state(BOOL)] | Target | Callable | Sets a unit to either start or stop being handcuffed | +|`ace_captives_escortingCaptive` | [_unit, _state(BOOL), _caller] | Local | Listen | Caller starting or stopping escort of unit | ### 2.6 Settings (`ace_common`) | Event Key | Parameters | Locality | Type | Description | -|----------|---------|---------|---------|---------|---------| -|`ace_settingsInitialized` | [] | Local | Listen | All modules are read and settings are ready -|`ace_settingChanged` | [_name,_value] | Local | Listen | A setting has been changed +|----------|---------|---------|---------|---------| +|`ace_settingsInitialized` | [] | Local | Listen | All modules are read and settings are ready | +|`ace_settingChanged` | [_name,_value] | Local | Listen | A setting has been changed | ### 2.7 Tagging (`ace_tagging`) | Event Key | Parameters | Locality | Type | Description | -|----------|---------|---------|---------|---------|---------| -|`ace_tagCreated` | [_tagObject, _texture, _tagAttachedTo (can be null), _unitThatCreated] | Global | Listen | Tag is created +|----------|---------|---------|---------|---------| +|`ace_tagCreated` | [_tagObject, _texture, _tagAttachedTo (can be null), _unitThatCreated] | Global | Listen | Tag is created | ### 2.8 Explosives (`ace_explosives`) | Event Key | Parameters | Locality | Type | Description | -|----------|---------|---------|---------|---------|---------| -|`ace_allowDefuse` | [_mine, _allow] | Global or Target | Callable | Set allowance of the dynamic defusal action on a mine -|`ace_tripflareTriggered` | [_flareObject, [_posX, _posY, _posZ]] | Global | Listen | Tripflare triggered -|`ace_explosives_clackerAdded` | [_unit, _explosive, _id] | Local | Listen | Clacker added to explosive -|`ace_explosives_place` | [_explosive, _dir, _pitch, _unit] | Global | Listen | Explosive is armed -|`ace_explosives_setup` | [_explosiveVehicle, _magClassname, _unit] | Global | Listen | Explosive is placed in the world +|----------|---------|---------|---------|---------| +|`ace_allowDefuse` | [_mine, _allow] | Global or Target | Callable | Set allowance of the dynamic defusal action on a mine | +|`ace_tripflareTriggered` | [_flareObject, [_posX, _posY, _posZ]] | Global | Listen | Tripflare triggered | +|`ace_explosives_clackerAdded` | [_unit, _explosive, _id] | Local | Listen | Clacker added to explosive | +|`ace_explosives_place` | [_explosive, _dir, _pitch, _unit] | Global | Listen | Explosive is armed | +|`ace_explosives_setup` | [_explosiveVehicle, _magClassname, _unit] | Global | Listen | Explosive is placed in the world | ### 2.9 Logistics Wirecutter (`ace_logistics`) | Event Key | Parameters | Locality | Type | Description | -|----------|---------|---------|---------|---------|---------| -|`ace_wireCuttingStarted` | [_unit, _fence] | Global | Listen | Fence cutting started +|----------|---------|---------|---------|---------| +|`ace_wireCuttingStarted` | [_unit, _fence] | Global | Listen | Fence cutting started | ### 2.9 Refuel (`ace_refuel`) | Event Key | Parameters | Locality | Type | Description | -|----------|---------|---------|---------|---------|---------| -|`ace_refuel_started` | [_source, _target] | Local | Listen | Refueling has started -|`ace_refuel_tick` | [_source, _target, _amount] | Local | Listen | Amount of fuel transferred in a tick -|`ace_refuel_stopped` | [_source, _target] | Local | Listen | Refueling has stopped +|----------|---------|---------|---------|---------| +|`ace_refuel_started` | [_source, _target] | Local | Listen | Refueling has started | +|`ace_refuel_tick` | [_source, _target, _amount] | Local | Listen | Amount of fuel transferred in a tick | +|`ace_refuel_stopped` | [_source, _target] | Local | Listen | Refueling has stopped | ### 2.10 Cook Off (`ace_cookoff`) | Event Key | Parameters | Locality | Type | Description | -|----------|---------|---------|---------|---------|---------| +|----------|---------|---------|---------|---------| |`ace_cookoff_cookOff` | _vehicle | Global | Listen | Vehicle cook off has started -|`ace_cookoff_cookOffBox` | _box | Global | Listen | Ammo box cook off has started -|`ace_cookoff_engineFire` | _vehicle | Global | Listen | Engine fire has started +|`ace_cookoff_cookOffBox` | _box | Global | Listen | Ammo box cook off has started | +|`ace_cookoff_engineFire` | _vehicle | Global | Listen | Engine fire has started | ### 2.11 Attach (`ace_attach`) | Event Key | Parameters | Locality | Type | Description | -|----------|---------|---------|---------|---------|---------| -|`ace_attach_attached` | [_attachedObject, _itemClassname, _temporary] | Local | Listen | After an item was attached to a unit/vehicle. _temporary flag means a item is being re-attached after the player exits a vehicle -|`ace_attach_detaching` | [_attachedObject, _itemName, _temporary] | Local | Listen | Just before an item gets detached/removed from a unit/vehicle. _temporary flag means its detached because the player unit entered a vehicle. +|----------|---------|---------|---------|---------| +|`ace_attach_attached` | [_attachedObject, _itemClassname, _temporary] | Local | Listen | After an item was attached to a unit/vehicle. _temporary flag means a item is being re-attached after the player exits a vehicle | +|`ace_attach_detaching` | [_attachedObject, _itemName, _temporary] | Local | Listen | Just before an item gets detached/removed from a unit/vehicle. _temporary flag means its detached because the player unit entered a vehicle. | ### 2.12 Trenches (`ace_trenches`) | Event Key | Parameters | Locality | Type | Description | |---------- |------------|----------|------|-------------| -| `ace_trenches_placed` | [_unit, _trench] | Global | Listen | After trench object is placed by unit. -| `ace_trenches_finished` | [_unit, _trench] | Global | Listen | After trench object is fully dug up by unit (100% progress). +| `ace_trenches_placed` | [_unit, _trench] | Global | Listen | After trench object is placed by unit. | +| `ace_trenches_finished` | [_unit, _trench] | Global | Listen | After trench object is fully dug up by unit (100% progress). | ### 2.13 Medical GUI (`ace_medical_gui`) @@ -169,21 +169,21 @@ Also Reference [CBA Events System](https://github.com/CBATeam/CBA_A3/wiki/Custom `CBA_fnc_addEventHandler` - Adds an event handler with the event name and returns the event handler ID. - | Arguments | Type | Optional (default value) ----| --------- | ---- | ------------------------ -0 | Event name | String | Required -1 | Code block | Code | Required -**R** | Event ID | Number | Return value +| | Arguments | Type | Optional (default value) | +|----| --------- | ---- | ------------------------ | +| 0 | Event name | String | Required | +| 1 | Code block | Code | Required | +| **R** | Event ID | Number | Return value | #### 3.1.2 Remove Event `CBA_fnc_removeEventHandler` - Removes a specific event handler of the given event name, using the ID returned from `CBA_fnc_addEventHandler`. - | Arguments | Type | Optional (default value) ----| --------- | ---- | ------------------------ -0 | Event name | String | Required -1 | Event ID | Number | Required -**R** | None | None | Return value +| | Arguments | Type | Optional (default value) | +|----| --------- | ---- | ------------------------ | +| 0 | Event name | String | Required | +| 1 | Event ID | Number | Required | +| **R** | None | None | Return value | ### 3.2 Calling Events @@ -191,42 +191,42 @@ Also Reference [CBA Events System](https://github.com/CBATeam/CBA_A3/wiki/Custom `CBA_fnc_localEvent` - Calls an event only on the local machine, useful for inter-module events. - | Arguments | Type | Optional (default value) ----| --------- | ---- | ------------------------ -0 | Event name | String | Required -1 | Arguments | Any | Required -**R** | None | None | Return value +| | Arguments | Type | Optional (default value) | +|----| --------- | ---- | ------------------------ | +| 0 | Event name | String | Required | +| 1 | Arguments | Any | Required | +| **R** | None | None | Return value | #### 3.2.2 Target Event `CBA_fnc_targetEvent` - Calls an event only on the target machine or list of target machines. - | Arguments | Type | Optional (default value) ----| --------- | ---- | ------------------------ -0 | Event name | String | Required -1 | Arguments | Any | Required -2 | Target(s) | Object OR Number OR Array | Required -**R** | None | None | Return value +| | Arguments | Type | Optional (default value) | +|----| --------- | ---- | ------------------------ | +| 0 | Event name | String | Required | +| 1 | Arguments | Any | Required | +| 2 | Target(s) | Object OR Number OR Array | Required | +| **R** | None | None | Return value | #### 3.2.3 Server Event `CBA_fnc_serverEvent` - Calls an event only on the server machine (dedicated or self-hosted). - | Arguments | Type | Optional (default value) ----| --------- | ---- | ------------------------ -0 | Event name | String | Required -1 | Arguments | Any | Required -**R** | None | None | Return value +| | Arguments | Type | Optional (default value) | +|----| --------- | ---- | ------------------------ | +| 0 | Event name | String | Required | +| 1 | Arguments | Any | Required | +| **R** | None | None | Return value | #### 3.2.4 Global Event `CBA_fnc_globalEvent` - Calls an event on all machines - the local machine, and the server machine. - | Arguments | Type | Optional (default value) ----| --------- | ---- | ------------------------ -0 | Event name | String | Required -1 | Arguments | Any | Required -**R** | None | None | Return value +| | Arguments | Type | Optional (default value) | +|----| --------- | ---- | ------------------------ | +| 0 | Event name | String | Required | +| 1 | Arguments | Any | Required | +| **R** | None | None | Return value | ### 3.3 Synchronized Events @@ -237,12 +237,12 @@ Adds a globally synchronized event handler which will expire events after the pr `ace_common_fnc_addSyncedEventHandler` - | Arguments | Type | Optional (default value) ----| --------- | ---- | ------------------------ -0 | Event name | String | Required -1 | Code block | Code | Required -2 | Time to live | Number OR Code | Optional (default: `0`) -**R** | Event ID | Number | Return value +| | Arguments | Type | Optional (default value) | +|----| --------- | ---- | ------------------------ | +| 0 | Event name | String | Required | +| 1 | Code block | Code | Required | +| 2 | Time to live | Number OR Code | Optional (default: `0`) | +| **R** | Event ID | Number | Return value | #### 3.3.2 Remove Synchronized Event @@ -250,10 +250,10 @@ Removes a specific event handler of the given event name, using the ID returned `ace_common_fnc_removeSyncedEventHandler` - | Arguments | Type | Optional (default value) ----| --------- | ---- | ------------------------ -0 | Event name | String | Required -**R** | None | None | Return value +| | Arguments | Type | Optional (default value) | +|----| --------- | ---- | ------------------------ | +| 0 | Event name | String | Required | +| **R** | None | None | Return value | #### 3.3.3 Call Synchronized Event @@ -261,12 +261,12 @@ Calls a globally synchronized event, which will also be run on JIP players unles `ace_common_fnc_syncedEvent` - | Arguments | Type | Optional (default value) ----| --------- | ---- | ------------------------ -0 | Event name | String | Required -1 | Arguments | Any | Required -2 | Time to live for this call | Number OR Code | Optional (default: `0`) -**R** | Event ID | Number | Return value +| | Arguments | Type | Optional (default value) | +|----| --------- | ---- | ------------------------ | +| 0 | Event name | String | Required | +| 1 | Arguments | Any | Required | +| 2 | Time to live for this call | Number OR Code | Optional (default: `0`) | +| **R** | Event ID | Number | Return value | ### 3.4 Example diff --git a/docs/wiki/framework/explosives-framework.md b/docs/wiki/framework/explosives-framework.md index 9d943e3eee..8abffa9448 100644 --- a/docs/wiki/framework/explosives-framework.md +++ b/docs/wiki/framework/explosives-framework.md @@ -120,16 +120,16 @@ class CfgWeapons { ## 4. Trigger list -Name | Use ----- | ----- -`Command` | Explode when activated via clacker. -`MK16_Transmitter` | Explode when activated via M26 clacker. -`DeadManSwitch` | Explode after activated via the switch or the person dies. -`Cellphone` | Explode when the number is called. -`PressurePlate` | Explode upon being stepped upon. -`IRSensor` | Explode after movement is detected in front of the mine. -`Timer` | Explode after timer drop to 0. -`Tripwire` | Explode when something touch the tripwire. +| Name | Use | +| ---- | ----- | +| `Command` | Explode when activated via clacker. | +| `MK16_Transmitter` | Explode when activated via M26 clacker. | +| `DeadManSwitch` | Explode after activated via the switch or the person dies. | +| `Cellphone` | Explode when the number is called. | +| `PressurePlate` | Explode upon being stepped upon. | +| `IRSensor` | Explode after movement is detected in front of the mine. | +| `Timer` | Explode after timer drop to 0. | +| `Tripwire` | Explode when something touch the tripwire. | ## 5. Scripting @@ -138,41 +138,41 @@ Name | Use `ace_explosives_fnc_scriptedExplosive` - | Arguments | Type | Optional (default value) ----| --------- | ---- | ------------------------ -0 | Explosive objects | Array | Required -1 | Delay before detonation | Number | Optional (default: `0`, randomized up to given number if negative) -**R** | None | None | Return value +| | Arguments | Type | Optional (default value) | +|----| --------- | ---- | ------------------------ | +| 0 | Explosive objects | Array | Required | +| 1 | Delay before detonation | Number | Optional (default: `0`, randomized up to given number if negative) | +| **R** | None | None | Return value | #### 5.1.1 Example `[[charge1, charge2], -3] call ace_explosives_fnc_scriptedExplosive;` - | Arguments | Explanation ----| --------- | ----------- -0 | `[charge1, charge2]` | Explosive objects to detonate -1 | `-3` | Randomized delay, up to 3 seconds +| | Arguments | Explanation | +|----| --------- | ----------- | +| 0 | `[charge1, charge2]` | Explosive objects to detonate | +| 1 | `-3` | Randomized delay, up to 3 seconds | ### 5.2 Connect Explosive `ace_explosives_fnc_connectExplosive` - | Arguments | Type | Optional (default value) ----| --------- | ---- | ------------------------ -0 | Unit to connect to | Object | Required -1 | Explosive object to connect to | Object | Required -2 | Detonator type class name (must be present on unit) | String | Required -**R** | None | None | Return value +| | Arguments | Type | Optional (default value) | +|----| --------- | ---- | ------------------------ | +| 0 | Unit to connect to | Object | Required | +| 1 | Explosive object to connect to | Object | Required | +| 2 | Detonator type class name (must be present on unit) | String | Required | +| **R** | None | None | Return value | #### 5.2.1 Example `[player, claymore1, "ACE_Clacker"] call ace_explosives_fnc_connectExplosive;` - | Arguments | Explanation ----| --------- | ----------- -0 | `player` | Unit explosive will connect to -1 | `claymore1` | Explosive object that will be connected -2 | `"ACE_Clacker"` | Detonator type class name +| | Arguments | Explanation | +|----| --------- | ----------- | +| 0 | `player` | Unit explosive will connect to | +| 1 | `claymore1` | Explosive object that will be connected | +| 2 | `"ACE_Clacker"` | Detonator type class name | #### 5.3 Detonation Handler. @@ -207,7 +207,7 @@ Jammer that blocks RF triggers: #### 5.4 Disabling `setShotParents`. -ACE will set the owner/instigator of the explosive to the unit placeing/detonating it. +ACE will set the owner/instigator of the explosive to the unit placing/detonating it. This can be disabled by executing ```sqf diff --git a/docs/wiki/framework/fastroping-framework.md b/docs/wiki/framework/fastroping-framework.md index fad016a8bf..57c6b9055d 100644 --- a/docs/wiki/framework/fastroping-framework.md +++ b/docs/wiki/framework/fastroping-framework.md @@ -18,7 +18,7 @@ If you want to prepare a helicopter from your addon for fastroping, there's a fe By using simple rope origin points you will only need two config entries: -``` +```cpp ace_fastroping_enabled = 1; ace_fastroping_ropeOrigins[] = { {x, y, z}, @@ -28,7 +28,7 @@ ace_fastroping_ropeOrigins[] = { This will create the ropes at the two given points. If you have defined memory points for the rope origins, you can use them too: -``` +```cpp ace_fastroping_enabled = 1; ace_fastroping_ropeOrigins[] = {"ropeOriginLeft", "ropeOriginRight"}; ``` @@ -41,7 +41,7 @@ If your helicopter is not fastroping capable by default, you can make it take a To make your helicopter FRIES capable, you need to add the following config entries: -``` +```cpp ace_fastroping_enabled = 2; ace_fastroping_friesType = "yourFRIESType"; ace_fastroping_friesAttachmentPoint[] = {x, y, z}; @@ -87,16 +87,16 @@ ACE3 provides two functions that are compatible with most helicopters and all AC `ace_fastroping_fnc_equipFRIES` -| | Arguments | Type | Optional (default value) ----| --------- | ---- | ------------------------ -0 | Helicopter | Object | Required -**R** | None | None | Return value +| | Arguments | Type | Optional (default value) | +|----| --------- | ---- | ------------------------ | +| 0 | Helicopter | Object | Required | +| **R** | None | None | Return value | ### 4.2. Remove FRIES from helicopter `ace_fastroping_fnc_unequipFRIES` -| | Arguments | Type | Optional (default value) ----| --------- | ---- | ------------------------ -0 | Helicopter | Object | Required -**R** | None | None | Return value +| | Arguments | Type | Optional (default value) | +|----| --------- | ---- | ------------------------ | +| 0 | Helicopter | Object | Required | +| **R** | None | None | Return value | diff --git a/docs/wiki/framework/field-rations-framework.md b/docs/wiki/framework/field-rations-framework.md index bc433e7d52..34b8b8fbcd 100644 --- a/docs/wiki/framework/field-rations-framework.md +++ b/docs/wiki/framework/field-rations-framework.md @@ -16,19 +16,19 @@ redirect_from: "/wiki/frameworkx/field-rations-framework.html" ### 1.1 Consumable Items -Config Name | Type | Description ------------ | ---- | ----------- -`acex_field_rations_thirstQuenched` | Number | Amount of thirst quenched when item is consumed* -`acex_field_rations_hungerSatiated` | Number | Amount of hunger satiated when item is consumed* -`acex_field_rations_consumeTime` | Number | Time required to consume the item (in seconds) -`acex_field_rations_consumeText` | String | Progress bar text (OPTIONAL) -`acex_field_rations_consumeAnims` | Array | Animations to play when consuming item** (OPTIONAL) -`acex_field_rations_consumeSounds` | Array | Sounds to play when consuming item** (OPTIONAL) -`acex_field_rations_replacementItem` | String | Class name of replacement item to add on consumption (OPTIONAL) -`acex_field_rations_refillItem` | String | Makes an item refillable, class name of item added when refilled (OPTIONAL) -`acex_field_rations_refillAmount` | Number | Amount of water required to refill item (OPTIONAL) -`acex_field_rations_refillTime` | Number | Time required to refill item (in seconds) (OPTIONAL) -`ACE_isFieldRationItem` | Number | Force adds the item to the ACE Field Rations category in ACE Arsenal (OPTIONAL) +| Config Name | Type | Description | +| ----------- | ---- | ----------- | +| `acex_field_rations_thirstQuenched` | Number | Amount of thirst quenched when item is consumed* | +| `acex_field_rations_hungerSatiated` | Number | Amount of hunger satiated when item is consumed* | +| `acex_field_rations_consumeTime` | Number | Time required to consume the item (in seconds) | +| `acex_field_rations_consumeText` | String | Progress bar text (OPTIONAL) | +| `acex_field_rations_consumeAnims` | Array | Animations to play when consuming item** (OPTIONAL) | +| `acex_field_rations_consumeSounds` | Array | Sounds to play when consuming item** (OPTIONAL) | +| `acex_field_rations_replacementItem` | String | Class name of replacement item to add on consumption (OPTIONAL) | +| `acex_field_rations_refillItem` | String | Makes an item refillable, class name of item added when refilled (OPTIONAL) | +| `acex_field_rations_refillAmount` | Number | Amount of water required to refill item (OPTIONAL) | +| `acex_field_rations_refillTime` | Number | Time required to refill item (in seconds) (OPTIONAL) | +| `ACE_isFieldRationItem` | Number | Force adds the item to the ACE Field Rations category in ACE Arsenal (OPTIONAL) | _* Value range is 0 to 100 and can be modified by the corresponding coefficient setting._ @@ -37,17 +37,17 @@ _** Array is in format: STAND, CROUCH, PRONE. If player is in vehicle, the first ### 1.2 Water Sources -Config Name | Type | Description ------------ | ---- | ----------- -`acex_field_rations_waterSupply` | Number | Amount of water inside the object (-1 - disabled, -10 - infinite) (OPTIONAL) -`acex_field_rations_offset` | Array | Refill action offset relative to model (OPTIONAL) +| Config Name | Type | Description | +| ----------- | ---- | ----------- | +| `acex_field_rations_waterSupply` | Number | Amount of water inside the object (-1 - disabled, -10 - infinite) (OPTIONAL) | +| `acex_field_rations_offset` | Array | Refill action offset relative to model (OPTIONAL) | ## 2. Events -Event Name | Passed Parameter(s) | Locality | Description ----------- | ------------------- | -------- | ----------- -`acex_rationConsumed` | [_player, _consumeItem, _replacementItem, _thirstQuenched, _hungerSatiated, _isMagazine] | Local | Item consumed -`acex_rationRefilled` | [_source, _player, _item, _refillItem, _refillAmount, _isMagazine] | Local | Item refilled +| Event Name | Passed Parameter(s) | Locality | Description | +| ---------- | ------------------- | -------- | ----------- | +| `acex_rationConsumed` | [_player, _consumeItem, _replacementItem, _thirstQuenched, _hungerSatiated, _isMagazine] | Local | Item consumed | +| `acex_rationRefilled` | [_source, _player, _item, _refillItem, _refillAmount, _isMagazine] | Local | Item refilled | ## 3. Scripting diff --git a/docs/wiki/framework/fire-framework.md b/docs/wiki/framework/fire-framework.md index 4f9ecdfdd3..7994036ece 100644 --- a/docs/wiki/framework/fire-framework.md +++ b/docs/wiki/framework/fire-framework.md @@ -21,22 +21,22 @@ Use `CBA_fnc_serverEvent` to use the following features. Events are defined only `ace_fire_addFireSource` - | Arguments | Type | Optional (default value) ----| --------- | ---- | ------------------------ -0 | Source of flame | Object/Position ASL | Required -1 | Radius of fire | Number | Required -2 | Intensity of fire (1, 10] | Number | Required -3 | Fire source ID | Any | Required -4 | Condition to stop fire | Code | Optional (default: `{ true }`) -5 | Arguments to pass to condition | Any | Optional (default: `[]`) +| | Arguments | Type | Optional (default value) | +|----| --------- | ---- | ------------------------ | +| 0 | Source of flame | Object/Position ASL | Required | +| 1 | Radius of fire | Number | Required | +| 2 | Intensity of fire (1, 10] | Number | Required | +| 3 | Fire source ID | Any | Required | +| 4 | Condition to stop fire | Code | Optional (default: `{ true }`) | +| 5 | Arguments to pass to condition | Any | Optional (default: `[]`) | ### 1.2 Removing fire source `ace_fire_removeFireSource` - | Arguments | Type | Optional (default value) ----| --------- | ---- | ------------------------ -0 | Fire source ID | Any | Required +| | Arguments | Type | Optional (default value) | +|----| --------- | ---- | ------------------------ | +| 0 | Fire source ID | Any | Required | ## 2. Variables diff --git a/docs/wiki/framework/fortify-framework.md b/docs/wiki/framework/fortify-framework.md index 27bfe7d613..9de0fab35b 100644 --- a/docs/wiki/framework/fortify-framework.md +++ b/docs/wiki/framework/fortify-framework.md @@ -114,11 +114,11 @@ The Fortify budget can be updated for any side using the function. ### 2.1 Listenable -Event Name | Passed Parameter(s) | Locality | Description ----------- | ----------- | ------------------- | -------- -`acex_fortify_objectPlaced` | [player, side, objectPlaced] | Global | Fortify object placed -`acex_fortify_objectDeleted` | [player, side, objectDeleted] | Global | Fortify object deleted -`acex_fortify_onDeployStart` | [player, object, cost] | Local | Player starts placing object -`ace_fortify_onDeployStop` | [player, object, cost] | Local | Player stops placing object. Raised only if stopped before trying to place (= before progress bar appears). If it's during progress bar, only `ace_fortify_deployCanceled` is raised. -`ace_fortify_deployFinished` | [[player, side, configName, posASL, vectorDir, vectorUp, cost], elapsedTime, totalTime, errorCode] | Local | Player successfully finishes building object -`ace_fortify_deployCanceled` | [[player, side, configName, posASL, vectorDir, vectorUp, cost], elapsedTime, totalTime, errorCode] | Local | Player cancels building object +| Event Name | Passed Parameter(s) | Locality | Description | +| ---------- | ----------- | ------------------- | -------- | +| `acex_fortify_objectPlaced` | [player, side, objectPlaced] | Global | Fortify object placed | +| `acex_fortify_objectDeleted` | [player, side, objectDeleted] | Global | Fortify object deleted | +| `acex_fortify_onDeployStart` | [player, object, cost] | Local | Player starts placing object | +| `ace_fortify_onDeployStop` | [player, object, cost] | Local | Player stops placing object. Raised only if stopped before trying to place (= before progress bar appears). If it's during progress bar, only `ace_fortify_deployCanceled` is raised. | +| `ace_fortify_deployFinished` | [[player, side, configName, posASL, vectorDir, vectorUp, cost], elapsedTime, totalTime, errorCode] | Local | Player successfully finishes building object | +| `ace_fortify_deployCanceled` | [[player, side, configName, posASL, vectorDir, vectorUp, cost], elapsedTime, totalTime, errorCode] | Local | Player cancels building object | diff --git a/docs/wiki/framework/frag-framework.md b/docs/wiki/framework/frag-framework.md index 07c59764f5..d05f5068f6 100644 --- a/docs/wiki/framework/frag-framework.md +++ b/docs/wiki/framework/frag-framework.md @@ -60,22 +60,22 @@ Dimensionless value, as long as same unit as `ace_frag_metal` (for example `kg/k Gurney constant for explosive force. You can find a list of common explosive types below. If you can not find it here, or want more accurate numbers, just google the type of explosive and Gurney constant and you can find substantial information. This is **not** the detonation velocity of the explosive, do not confuse them! -Type | Speed ---------------- | -------- -Composition B | 2700 m/s -Composition C-3 | 2680 m/s -Cyclotol 75/25 | 2790 m/s -HMX | 2800 m/s -LX-14 | 2970 m/s -Octol 75/25 | 2800 m/s -PBX 9404 | 2900 m/s -PBX 9502 | 2377 m/s -Pentolite | 2750 m/s -PETN | 2930 m/s -RDX | 2830 m/s -Tetryl | 2500 m/s -TNT | 2440 m/s -Tritonal | 2320 m/s +| Type | Speed | +| --------------- | -------- | +| Composition B | 2700 m/s | +| Composition C-3 | 2680 m/s | +| Cyclotol 75/25 | 2790 m/s | +| HMX | 2800 m/s | +| LX-14 | 2970 m/s | +| Octol 75/25 | 2800 m/s | +| PBX 9404 | 2900 m/s | +| PBX 9502 | 2377 m/s | +| Pentolite | 2750 m/s | +| PETN | 2930 m/s | +| RDX | 2830 m/s | +| Tetryl | 2500 m/s | +| TNT | 2440 m/s | +| Tritonal | 2320 m/s | ### 1.4 Gurney shape factor @@ -83,11 +83,11 @@ Tritonal | 2320 m/s Shape factor for the explosive configuration. You should choose it based on the general configuration of explosives/metal in the warhead. Most grenades for example are a sphere. Artillery and aircraft bombs are a cylinder. Mines generally a flat plate. Below is a list of the three common shapes and their factors. -Shape | Factor --------- | ------ -Sphere | 3/5 -Cylinder | 1/2 -Plate | 3/5 +| Shape | Factor | +| -------- | ------ | +| Sphere | 3/5 | +| Cylinder | 1/2 | +| Plate | 3/5 | There are other configurations but these are the most common. If you are interested in others check out the wikipedia link given above. Most of these will not correctly function in ACE3 though due to additional variables for the equation. @@ -97,18 +97,18 @@ There are other configurations but these are the most common. If you are interes There are different types of fragmentation fragments to choose from, and they can be defined in this config value. -| Type -| ---- -| ACE_frag_tiny -| ACE_frag_tiny_HD -| ACE_frag_small -| ACE_frag_small_HD -| ACE_frag_medium -| ACE_frag_medium_HD -| ACE_frag_large -| ACE_frag_large_HD -| ACE_frag_huge -| ACE_frag_huge_HD +| Type | +| ------------------ | +| ACE_frag_tiny | +| ACE_frag_tiny_HD | +| ACE_frag_small | +| ACE_frag_small_HD | +| ACE_frag_medium | +| ACE_frag_medium_HD | +| ACE_frag_large | +| ACE_frag_large_HD | +| ACE_frag_huge | +| ACE_frag_huge_HD | The tinier the piece of fragmentation the shorter the distance of travel. The `_HD` variants are all even higher drag versions. Grenades generally should use the `_HD` variants. Experimentation here is important. diff --git a/docs/wiki/framework/goggles-framework.md b/docs/wiki/framework/goggles-framework.md index 1b9b27588b..07840ebf95 100644 --- a/docs/wiki/framework/goggles-framework.md +++ b/docs/wiki/framework/goggles-framework.md @@ -34,7 +34,7 @@ class CfgGlasses { ### 2.1 Listenable -Event Name | Description | Passed Parameter(s) | Locality ----------- | ----------- | ------------------- | -------- -`ace_glassesChanged` | Glasses Changed | `[_unit, _glassesClass]` | Local -`ace_glassesCracked` | Glasses Cracked | `[_unit]` | Local +| Event Name | Description | Passed Parameter(s) | Locality | +| ---------- | ----------- | ------------------- | -------- | +| `ace_glassesChanged` | Glasses Changed | `[_unit, _glassesClass]` | Local | +| `ace_glassesCracked` | Glasses Cracked | `[_unit]` | Local | diff --git a/docs/wiki/framework/grenades-framework.md b/docs/wiki/framework/grenades-framework.md index b8f61872ff..3fed8fd50a 100644 --- a/docs/wiki/framework/grenades-framework.md +++ b/docs/wiki/framework/grenades-framework.md @@ -73,8 +73,8 @@ The amount of randomness in the fuse time. ### 3.1 Listenable -Event Name | Description | Passed Parameter(s) | Locality ----------- | ----------- | ------------------- | -------- -`ace_flashbangExploded` | A flashbang exploded | `[_grenadePosASL]` | Global -`ace_grenades_flashbangedAI` | A local AI was affected by a flashbang | `[_unit, _strength, _grenadePosASL]` | Local -`ace_grenades_flashbangedPlayer` | The local player was affected by a flashbang | `[_strength, _grenadePosASL]` | Local +| Event Name | Description | Passed Parameter(s) | Locality | +| ---------- | ----------- | ------------------- | -------- | +| `ace_flashbangExploded` | A flashbang exploded | `[_grenadePosASL]` | Global | +| `ace_grenades_flashbangedAI` | A local AI was affected by a flashbang | `[_unit, _strength, _grenadePosASL]` | Local | +| `ace_grenades_flashbangedPlayer` | The local player was affected by a flashbang | `[_strength, _grenadePosASL]` | Local | diff --git a/docs/wiki/framework/interactionMenu-framework.md b/docs/wiki/framework/interactionMenu-framework.md index 68e49414e2..fb66fb3918 100644 --- a/docs/wiki/framework/interactionMenu-framework.md +++ b/docs/wiki/framework/interactionMenu-framework.md @@ -40,21 +40,25 @@ class CfgVehicles { exceptions[] = {}; statement = "_player switchMove 'TestDance'"; icon = "\z\dance.paa"; + }; + }; + }; +}; ``` -Config Name | Type | Description ----------- | ----------- | ------------------- -`displayName` | String | Text shown to user -`condition` | String (of code) | Condition to show the action -`statement` | String (of code) | Statement run when selected -`icon` | String (file path) | Icon shown (OPTIONAL) -`exceptions` | Array (of strings) | Exceptions to `canInteractWith` conditions (e.g. `"notOnMap"`) (OPTIONAL) -`insertChildren` | String (of code) | Code to return sub actions (OPTIONAL) -`modifierFunction` | String (of code) | Code to modify this action (OPTIONAL) -`runOnHover` | Number or String | (1=true) OR Condition code - Will run the statement on hover (OPTIONAL) -`distance` | Number | External Base Actions Only, Max distance player can be from action point -`position` | String (of code) | External Base Actions Only, Code to return a position in model cords (priority over `selection`) -`selection` | String | External Base Actions Only, A memory point for `selectionPosition` +| Config Name | Type | Description | +| ---------- | ----------- | ------------------- | +| `displayName` | String | Text shown to user | +| `condition` | String (of code) | Condition to show the action | +| `statement` | String (of code) | Statement run when selected | +| `icon` | String (file path) | Icon shown (OPTIONAL) | +| `exceptions` | Array (of strings) | Exceptions to `canInteractWith` conditions (e.g. `"notOnMap"`) (OPTIONAL) | +| `insertChildren` | String (of code) | Code to return sub actions (OPTIONAL) | +| `modifierFunction` | String (of code) | Code to modify this action (OPTIONAL) | +| `runOnHover` | Number or String | (1=true) OR Condition code - Will run the statement on hover (OPTIONAL) | +| `distance` | Number | External Base Actions Only, Max distance player can be from action point | +| `position` | String (of code) | External Base Actions Only, Code to return a position in model cords (priority over `selection`) | +| `selection` | String | External Base Actions Only, A memory point for `selectionPosition` | Actions can be inserted anywhere on the config tree, e.g. hearing's earplugs is a sub action of `ACE_Equipment`: @@ -62,7 +66,10 @@ Actions can be inserted anywhere on the config tree, e.g. hearing's earplugs is class CAManBase: Man { class ACE_SelfActions { class ACE_Equipment { - class ACE_PutInEarplugs { + class ACE_PutInEarplugs {}; + }; + }; +}; ``` ## 3. Adding actions via scripts @@ -233,7 +240,7 @@ This is the ideal way to add self interaction actions, as adding them via `addAc params ["_type"]; // string of the object's classname if (!(_type isKindOf "Car")) exitWith {}; if ((getNumber (configFile >> "CfgVehicles" >> _type >> "side")) != 3) exitWith {}; - + private _action = ["playRadio","Play Radio","",{playMusic "NeverGonnaGiveYouUp"},{true}] call ace_interact_menu_fnc_createAction; [_type, 1, ["ACE_SelfActions"], _action, true] call ace_interact_menu_fnc_addActionToClass; }] call CBA_fnc_addEventHandler; diff --git a/docs/wiki/framework/laser-framework.md b/docs/wiki/framework/laser-framework.md index 1a7bbf7d6b..fef12a4760 100644 --- a/docs/wiki/framework/laser-framework.md +++ b/docs/wiki/framework/laser-framework.md @@ -18,17 +18,17 @@ version: `ace_laser_fnc_getLaserCode` -| | Arguments | Type | Optional (default value) ----| --------- | ---- | ------------------------ -0 | Unit/Vehicle | Object | Required -**R** | Laser code | Number | Return value +| | Arguments | Type | Optional (default value) | +|----| --------- | ---- | ------------------------ | +| 0 | Unit/Vehicle | Object | Required | +| **R** | Laser code | Number | Return value | ### 1.2. Set object's laser code `ace_laser_fnc_setLaserCode` -| | Arguments | Type | Optional (default value) ----| --------- | ---- | ------------------------ -0 | Unit/Vehicle | Object | Required -1 | Laser code | Number | Required -**R** | None | None | Return value +| | Arguments | Type | Optional (default value) | +|----| --------- | ---- | ------------------------ | +| 0 | Unit/Vehicle | Object | Required | +| 1 | Laser code | Number | Required | +| **R** | None | None | Return value | diff --git a/docs/wiki/framework/medical-framework.md b/docs/wiki/framework/medical-framework.md index 834eeced80..00d9133b00 100644 --- a/docs/wiki/framework/medical-framework.md +++ b/docs/wiki/framework/medical-framework.md @@ -219,23 +219,23 @@ Custom wound handlers should follow the same spec as the built-in handler: `ace_medical_damage_fnc_woundsHandlerBase` - | Arguments | Type | Optional (default value) ----| --------- | ---- | ------------------------ -0 | Unit that was hit | Object | Required -1 | Array of damage dealt to each body part | Array | Required -2 | Type of damage | String | Required -**R** | Parameters to be passed to the next handler in the list, e.g. `_this` or a modified copy of it. Return `[]` to prevent further handling. | Array | Required +| | Arguments | Type | Optional (default value) | +|----| --------- | ---- | ------------------------ | +| 0 | Unit that was hit | Object | Required | +| 1 | Array of damage dealt to each body part | Array | Required | +| 2 | Type of damage | String | Required | +| **R** | Parameters to be passed to the next handler in the list, e.g. `_this` or a modified copy of it. Return `[]` to prevent further handling. | Array | Required | The damage elements are sorted in descending order according to how much damage was dealt to each body part _before armor was taken into account_, but the actual damage values are _after armor_. ### Example `[player, [[0.5, "Body", 1], [0.3, "Head", 0.6]], "grenade"] ace_medical_damage_fnc_woundsHandlerBase` - | Arguments | Explanation ----| --------- | ----------- -0 | `player` | Unit that was hit -1 | `[[0.5, "Body", 1], [0.3, "Head", 0.6]]` | 0.5 damage to body (was 1 before armor), 0.3 damage to head (was 0.6 before armor) -2 | `"grenade"` | type grenade (non-selection-specific) +| | Arguments | Explanation | +| ---| --------- | ----------- | +| 0 | `player` | Unit that was hit | +| 1 | `[[0.5, "Body", 1], [0.3, "Head", 0.6]]` | 0.5 damage to body (was 1 before armor), 0.3 damage to head (was 0.6 before armor) | +| 2 | `"grenade"` | type grenade (non-selection-specific) | ## 5. Tweaking internal variables Some of ACE Medical's underlying behavior, primarily related to damage handling and the vitals loop, can be fine-tuned by editing `ace_medical_const_` variables, found in [script_macros_medical.hpp](https://github.com/acemod/ACE3/blob/master/addons/medical_engine/script_macros_medical.hpp). diff --git a/docs/wiki/framework/medical-treatment-framework.md b/docs/wiki/framework/medical-treatment-framework.md index c84d4382ea..736295804a 100644 --- a/docs/wiki/framework/medical-treatment-framework.md +++ b/docs/wiki/framework/medical-treatment-framework.md @@ -125,4 +125,6 @@ ace_medical_treatment_graveRotation = 0; // rotation angle (will depend on model ### 3.2 Zeus Medical Menu Module If a mission maker wishes to disable Zeus access to the medical menu, they can set the variable below: +```sqf ace_medical_gui_enableZeusModule = false; // default is true +``` diff --git a/docs/wiki/framework/missile-guidance-framework.md b/docs/wiki/framework/missile-guidance-framework.md index 3b31975da3..ff6859d735 100644 --- a/docs/wiki/framework/missile-guidance-framework.md +++ b/docs/wiki/framework/missile-guidance-framework.md @@ -117,6 +117,6 @@ class ace_missileguidance_attackProfiles { ### 5.1 Listenable -Event Name | Description | Passed Parameter(s) | Locality ----------- | ----------- | ------------------- | -------- -`ace_missileguidance_handoff` | Missile handed off | `[_target, _args]` | Global +| Event Name | Description | Passed Parameter(s) | Locality | +| ---------- | ----------- | ------------------- | -------- | +| `ace_missileguidance_handoff` | Missile handed off | `[_target, _args]` | Global | diff --git a/docs/wiki/framework/overpressure-framework.md b/docs/wiki/framework/overpressure-framework.md index 7e7969f62a..243157c186 100644 --- a/docs/wiki/framework/overpressure-framework.md +++ b/docs/wiki/framework/overpressure-framework.md @@ -46,6 +46,6 @@ class CfgWeapons { ### 2.1 Listenable -Event Name | Description | Passed Parameter(s) | Locality ----------- | ----------- | ------------------- | -------- -`ace_overpressure` | Overpressure damage inflicted | `[_firer, _posASL, _direction, _weapon, _magazine, _ammo]` | Target +| Event Name | Description | Passed Parameter(s) | Locality | +| ---------- | ----------- | ------------------- | -------- | +| `ace_overpressure` | Overpressure damage inflicted | `[_firer, _posASL, _direction, _weapon, _magazine, _ammo]` | Target | diff --git a/docs/wiki/framework/rearm-framework.md b/docs/wiki/framework/rearm-framework.md index 7f899f54c9..a4061cb2bc 100644 --- a/docs/wiki/framework/rearm-framework.md +++ b/docs/wiki/framework/rearm-framework.md @@ -71,31 +71,31 @@ Meant to run on server only. `ace_rearm_fnc_makeSource` - | Arguments | Type | Optional (default value) ----| --------- | ---- | ------------------------ -0 | Ammo Truck | Object | Required -1 | Supply Count | Number | Optional (default: `0`) -1 | Add (`true`) or set (`false`) supply | Bool | Optional (default: `false`) -**R** | None | None | Return value +| | Arguments | Type | Optional (default value) | +|----| --------- | ---- | ------------------------ | +| 0 | Ammo Truck | Object | Required | +| 1 | Supply Count | Number | Optional (default: `0`) | +| 1 | Add (`true`) or set (`false`) supply | Bool | Optional (default: `false`) | +| **R** | None | None | Return value | #### 3.1.1 Example `[cursorObject, 1200] call ace_rearm_fnc_makeSource` - | Arguments | Explanation ----| --------- | ----------- -0 | `cursorObject` | Rearm source object -1 | `1200` | Ammo supply +| | Arguments | Explanation | +|----| --------- | ----------- | +| 0 | `cursorObject` | Rearm source object | +| 1 | `1200` | Ammo supply | ### 3.2 Enabling / disabling rearming `ace_rearm_fnc_disable` - | Arguments | Type | Optional (default value) ----| --------- | ---- | ------------------------ -0 | Ammo Truck | Object | Required -1 | Disable rearming, true to disable, false to enable | Boolean | Optional (default: `true`) -**R** | None | None | Return value +| | Arguments | Type | Optional (default value) | +|----| --------- | ---- | ------------------------ | +| 0 | Ammo Truck | Object | Required | +| 1 | Disable rearming, true to disable, false to enable | Boolean | Optional (default: `true`) | +| **R** | None | None | Return value | This function disables rearming for all supported turrets of a vehicle. @@ -103,9 +103,9 @@ This function disables rearming for all supported turrets of a vehicle. `[tank] call ace_rearm_fnc_disable;` - | Arguments | Explanation ----| --------- | ----------- -0 | `tank` | My object +| | Arguments | Explanation | +|----| --------- | ----------- | +| 0 | `tank` | My object | Disables rearming on the object `tank`. @@ -113,10 +113,10 @@ Disables rearming on the object `tank`. `[tank, false] call ace_rearm_fnc_disable;` - | Arguments | Explanation ----| --------- | ----------- -0 | `tank` | My object -1 | `false`| Rearming is enabled +| | Arguments | Explanation | +|----| --------- | ----------- | +| 0 | `tank` | My object | +| 1 | `false` | Rearming is enabled | Enables rearming on the object `tank`. @@ -124,10 +124,10 @@ Enables rearming on the object `tank`. `ace_rearm_fnc_getSupplyCount` - | Arguments | Type | Optional (default value) ----| --------- | ---- | ------------------------ -0 | Ammo Truck | Object | Required -**R** | Supply count | Number | Return value +| | Arguments | Type | Optional (default value) | +|----| --------- | ---- | ------------------------ | +| 0 | Ammo Truck | Object | Required | +| **R** | Supply count | Number | Return value | This function returns the current supply count of the ammo truck. @@ -135,9 +135,9 @@ This function returns the current supply count of the ammo truck. `[ammo_truck] call ace_rearm_fnc_getSupplyCount;` - | Arguments | Explanation ----| --------- | ----------- -0 | `ammo_truck` | My object +| | Arguments | Explanation | +| ---| ------------- | ----------- | +| 0 | `ammo_truck` | My object | The remaining supply count of `ammo_truck` will be returned. @@ -145,11 +145,11 @@ The remaining supply count of `ammo_truck` will be returned. `ace_rearm_fnc_setSupplyCount` - | Arguments | Type | Optional (default value) ----| --------- | ---- | ------------------------ -0 | Ammo Truck | Object | Required -1 | Supply Count | Boolean | Required -**R** | None | None | Return value +| | Arguments | Type | Optional (default value) | +|----| --------- | ---- | ------------------------ | +| 0 | Ammo Truck | Object | Required | +| 1 | Supply Count | Boolean | Required | +| **R** | None | None | Return value | This function sets the current supply count of the ammo truck. It can be used to replenish the ammo truck on `Limited ammo supply based on caliber` setting. @@ -157,21 +157,21 @@ This function sets the current supply count of the ammo truck. It can be used to `[ammo_truck, 1000] call ace_rearm_fnc_setSupplyCount;` - | Arguments | Explanation ----| --------- | ----------- -0 | `ammo_truck` | My ammo truck object -1 | `1000`| Supply Count +| | Arguments | Explanation | +|----| --------- | ----------- | +| 0 | `ammo_truck` | My ammo truck object | +| 1 | `1000`| Supply Count | ### 3.5 Adding specific magazines `ace_rearm_fnc_addMagazineToSupply` - | Arguments | Type | Optional (default value) ----| --------- | ---- | ------------------------ -0 | Ammo Truck | Object | Required -1 | Magazine Classname | String | Required -2 | Only add content of one ammo box | Boolean | Optional (default: `false`) -**R** | None | None | Return value +| | Arguments | Type | Optional (default value) | +|----| --------- | ---- | ------------------------ | +| 0 | Ammo Truck | Object | Required | +| 1 | Magazine Classname | String | Required | +| 2 | Only add content of one ammo box | Boolean | Optional (default: `false`) | +| **R** | None | None | Return value | This function is most useful with the module setting `Only specific Magazines`. Note that this function only adds one magazine of a specific class. Other magazines of the same size are not available on this module setting. It has to be used to replenish the ammo truck on `Only specific Magazines` setting. @@ -181,10 +181,10 @@ This function can also be used to increase the supply count on setting `Limited `[ammo_truck, "32Rnd_155mm_Mo_shells"] call ace_rearm_fnc_addMagazineToSupply;` - | Arguments | Explanation ----| --------- | ----------- -0 | `ammo_truck` | My ammo truck object -1 | `"32Rnd_155mm_Mo_shells"` | Some magazine class +| | Arguments | Explanation | +|----| --------- | ----------- | +| 0 | `ammo_truck` | My ammo truck object | +| 1 | `"32Rnd_155mm_Mo_shells"` | Some magazine class | The 32 artillery shells are added to the supply count or the magazine storage of the specified ammo truck. @@ -192,11 +192,11 @@ The 32 artillery shells are added to the supply count or the magazine storage of `ace_rearm_fnc_addVehicleMagazinesToSupply` - | Arguments | Type | Optional (default value) ----| --------- | ---- | ------------------------ -0 | Ammo Truck | Object | Required -1 | Any vehicle object or class name | Object or String | Required -**R** | None | None | Return value +| | Arguments | Type | Optional (default value) | +|----| --------- | ---- | ------------------------ | +| 0 | Ammo Truck | Object | Required | +| 1 | Any vehicle object or class name | Object or String | Required | +| **R** | None | None | Return value | This function wraps `ace_rearm_fnc_addMagazineToSupply` and uses it to add all default magazines of all supported turrets of the vehicle to the ammo truck. @@ -204,10 +204,10 @@ This function wraps `ace_rearm_fnc_addMagazineToSupply` and uses it to add all d `[ammo_truck, tank] call ace_rearm_fnc_addVehicleMagazinesToSupply;` - | Arguments | Explanation ----| --------- | ----------- -0 | `ammo_truck` | My ammo truck object -1 | `tank`| A vehicle object +| | Arguments | Explanation | +|----| --------- | ----------- | +| 0 | `ammo_truck` | My ammo truck object | +| 1 | `tank`| A vehicle object | All magazines found in the class config of the object `tank` are made available. @@ -215,10 +215,10 @@ All magazines found in the class config of the object `tank` are made available. `[ammo_truck, "B_MBT_01_arty_F"] call ace_rearm_fnc_addVehicleMagazinesToSupply;` - | Arguments | Explanation ----| --------- | ----------- -0 | `ammo_truck` | My ammo truck object -1 | `"B_MBT_01_arty_F"`| Vehicle class name +| | Arguments | Explanation | +|----| --------- | ----------- | +| 0 | `ammo_truck` | My ammo truck object | +| 1 | `"B_MBT_01_arty_F"`| Vehicle class name | All magazines found in the config of the vehicle class `B_MBT_01_arty_F` are made available. @@ -227,21 +227,21 @@ All magazines found in the config of the vehicle class `B_MBT_01_arty_F` are mad `ace_rearm_fnc_removeMagazineFromSupply` - | Arguments | Type | Optional (default value) ----| --------- | ---- | ------------------------ -0 | Ammo Truck | Object | Required -1 | Magazine Classname | String | Required -2 | Number of Rounds to withdraw | Number | Optional (default: `-1`) -**R** | Magazine could be removed successfully | Boolean | Return value +| | Arguments | Type | Optional (default value) | +|----| --------- | ---- | ------------------------ | +| 0 | Ammo Truck | Object | Required | +| 1 | Magazine Classname | String | Required | +| 2 | Number of Rounds to withdraw | Number | Optional (default: `-1`) | +| **R** | Magazine could be removed successfully | Boolean | Return value | #### 3.7.1 Example 1 `[ammo_truck, "500Rnd_127x99_mag_Tracer_Red"] call ace_rearm_fnc_removeMagazineFromSupply;` - | Arguments | Explanation ----| --------- | ----------- -0 | `ammo_truck` | My ammo truck object -1 | `"500Rnd_127x99_mag_Tracer_Red"`| Carrying is enabled +| | Arguments | Explanation | +|----| --------- | ----------- | +| 0 | `ammo_truck` | My ammo truck object | +| 1 | `"500Rnd_127x99_mag_Tracer_Red"`| Carrying is enabled | Removes one ammo box worth of "500Rnd_127x99_mag_Tracer_Red" from the supply. Depending on the module setting the ammo box does hold an entire magazine or only the caliber based amount of rounds. @@ -249,16 +249,16 @@ Removes one ammo box worth of "500Rnd_127x99_mag_Tracer_Red" from the supply. De `[ammo_truck, "500Rnd_127x99_mag_Tracer_Red", 50] call ace_rearm_fnc_removeMagazineFromSupply;` - | Arguments | Explanation ----| --------- | ----------- -0 | `ammo_truck` | My ammo truck object -1 | `"500Rnd_127x99_mag_Tracer_Red"`| Carrying is enabled -2 | `50` | Number of rounds +| | Arguments | Explanation | +|----| --------- | ----------- | +| 0 | `ammo_truck` | My ammo truck object | +| 1 | `"500Rnd_127x99_mag_Tracer_Red"`| Carrying is enabled | +| 2 | `50` | Number of rounds | Removes one ammo box with 50 rounds of 500Rnd_127x99_mag_Tracer_Red from the supply. This is 10% of the supply of an entire magazine. ## 4. Events -| Name | Arguments | Global? | Added in | -| ------------- | ------------- | ------------- | -| ace_rearm_sourceInitalized | Yes | Ammo truck (OBJECT) | 3.16.0 | +| Name | Arguments | Global? | Added in | +| ------------- | --------- | ------- | -------- | +| `ace_rearm_sourceInitalized` | Ammo truck (OBJECT) | Yes | 3.16.0 | diff --git a/docs/wiki/framework/refuel-framework.md b/docs/wiki/framework/refuel-framework.md index c91c8cb6e3..325606a970 100644 --- a/docs/wiki/framework/refuel-framework.md +++ b/docs/wiki/framework/refuel-framework.md @@ -45,57 +45,57 @@ Meant to be called on server only. `ace_refuel_fnc_makeSource` - | Arguments | Type | Optional (default value) ----| --------- | ---- | ------------------------ -0 | Fuel Source | Object | Required -1 | Amount (in liters) | Number | Optional (default: `0`) -2 | Hooks positions | Array | Optional (default: `[[0,0,0]]`) -**R** | None | None | Return value +| | Arguments | Type | Optional (default value) | +|----| --------- | ---- | ------------------------ | +| 0 | Fuel Source | Object | Required | +| 1 | Amount (in liters) | Number | Optional (default: `0`) | +| 2 | Hooks positions | Array | Optional (default: `[[0,0,0]]`) | +| **R** | None | None | Return value | #### 2.1.1 Example `[cursorObject, 100] call ace_refuel_fnc_makeSource` - | Arguments | Explanation ----| --------- | ----------- -0 | `cursorObject` | Fuel source object -1 | `100` | Fuel amount (in liters) +| | Arguments | Explanation | +|----| --------- | ----------- | +| 0 | `cursorObject` | Fuel source object | +| 1 | `100` | Fuel amount (in liters) | ### 2.2 Getting the fuel supply `ace_refuel_fnc_getFuel` - | Arguments | Type | Optional (default value) ----| --------- | ---- | ------------------------ -0 | Fuel Truck | Object | Required -**R** | Fuel amount left (in liters) | Number | Return value +| | Arguments | Type | Optional (default value) | +|----| --------- | ---- | ------------------------ | +| 0 | Fuel Truck | Object | Required | +| **R** | Fuel amount left (in liters) | Number | Return value | #### 2.2.1 Example `[fuelTruck] call ace_refuel_fnc_getFuel;` - | Arguments | Explanation ----| --------- | ----------- -0 | `fuelTruck` | My fuel truck object +| | Arguments | Explanation | +|----| --------- | ----------- | +| 0 | `fuelTruck` | My fuel truck object | ### 2.3 Setting the fuel supply `ace_refuel_fnc_setFuel` - | Arguments | Type | Optional (default value) ----| --------- | ---- | ------------------------ -0 | Fuel Truck | Object | Required -1 | Amount (in liters) | Number | Required -**R** | None | None | Return value +| | Arguments | Type | Optional (default value) | +| ---| --------- | ---- | ------------------------ | +| 0 | Fuel Truck | Object | Required | +| 1 | Amount (in liters) | Number | Required | +| **R** | None | None | Return value | #### 2.3.1 Example `[fuelTruck, 428] call ace_refuel_fnc_setFuel;` - | Arguments | Explanation ----| --------- | ----------- -0 | `fuelTruck` | Fuel truck object -1 | `428` | New fuel amount (in liters) +| | Arguments | Explanation | +|----| --------- | ----------- | +| 0 | `fuelTruck` | Fuel truck object | +| 1 | `428` | New fuel amount (in liters) | ### 2.4 Make a jerry can @@ -103,19 +103,19 @@ Meant to be run on all clients and server. `ace_refuel_fnc_makeJerryCan` - | Arguments | Type | Optional (default value) ----| --------- | ---- | ------------------------ -0 | Jerry Can | Object | Required -1 | Amount (in liters) | Number | Optional (default: `20`) -**R** | None | None | Return value +| | Arguments | Type | Optional (default value) | +|----| --------- | ---- | ------------------------ | +| 0 | Jerry Can | Object | Required | +| 1 | Amount (in liters) | Number | Optional (default: `20`) | +| **R** | None | None | Return value | #### 2.4.1 Example 1 `[can] call ace_refuel_fnc_makeJerryCan;` - | Arguments | Explanation ----| --------- | ----------- -0 | `can` | Jerry can object +| | Arguments | Explanation | +|----| --------- | ----------- | +| 0 | `can` | Jerry can object | The jerry can will have the default 20 liters volume. @@ -123,16 +123,16 @@ The jerry can will have the default 20 liters volume. `[can, 200] call ace_refuel_fnc_makeJerryCan;` - | Arguments | Explanation ----| --------- | ----------- -0 | `can` | Jerry can object -1 | `200` | Amount (in liters) +| | Arguments | Explanation | +|----| --------- | ----------- | +| 0 | `can` | Jerry can object | +| 1 | `200` | Amount (in liters) | The jerry can will now have a volume of 200 liters. ## 3. Events | Name | Arguments | Global? | Added in | -| ------------- | ------------- | ------------- | +| ------------- | ------------- | ----- | ------------- | | ace_refuel_sourceInitialized | Fuel source (OBJECT), items (BOOL or ARRAY) | Yes | 3.16.0 | | ace_refuel_jerryCanInitalized | Jerry can (OBJECT) | Yes | 3.16.0 | diff --git a/docs/wiki/framework/reloadlaunchers-framework.md b/docs/wiki/framework/reloadlaunchers-framework.md index d055cc533c..074dc09ff0 100644 --- a/docs/wiki/framework/reloadlaunchers-framework.md +++ b/docs/wiki/framework/reloadlaunchers-framework.md @@ -26,6 +26,6 @@ class CfgWeapons { ### 2.1 Listenable -Event Name | Description | Passed Parameter(s) | Locality ----------- | ----------- | ------------------- | -------- -`ace_reloadlaunchers_reloadLauncher` | Launcher reloaded | `[_unit, _target, _weapon, _magazine]` | Target +| Event Name | Description | Passed Parameter(s) | Locality | +| ---------- | ----------- | ------------------- | -------- | +| `ace_reloadlaunchers_reloadLauncher` | Launcher reloaded | `[_unit, _target, _weapon, _magazine]` | Target | diff --git a/docs/wiki/framework/slideshow-framework.md b/docs/wiki/framework/slideshow-framework.md index 0697116039..575a81420c 100644 --- a/docs/wiki/framework/slideshow-framework.md +++ b/docs/wiki/framework/slideshow-framework.md @@ -32,16 +32,16 @@ Important notes: `ace_slideshow_fnc_createSlideshow` - | Arguments | Type | Optional (default value) ----| --------- | ---- | ------------------------ -0 | Screen Objects | Array | Required -1 | Controller Objects | Array | Required (screen objects are used if empty `[]`, none are available with automatic transitions) -2 | Image Paths | Array | Required (paths must use backslash `\`) -3 | Action Names | Array | Required -4 | Slide Duration | Number | Optional (default: `0`, `0` disables automatic transitions) -5 | Set Name | String | Optional (default: localized `"Slides"`) -6 | Texture Selection | Number | Optional (default: `0`) -**R** | None | None | Return value +| | Arguments | Type | Optional (default value) | +|----| --------- | ---- | ------------------------ | +| 0 | Screen Objects | Array | Required | +| 1 | Controller Objects | Array | Required (screen objects are used if empty `[]`, none are available with automatic transitions) | +| 2 | Image Paths | Array | Required (paths must use backslash `\`) | +| 3 | Action Names | Array | Required | +| 4 | Slide Duration | Number | Optional (default: `0`, `0` disables automatic transitions) | +| 5 | Set Name | String | Optional (default: localized `"Slides"`) | +| 6 | Texture Selection | Number | Optional (default: `0`) | +| **R** | None | None | Return value | _Note: Set Name argument added in 3.9.1._ @@ -49,15 +49,15 @@ _Note: Set Name argument added in 3.9.1._ `[[object1, object2], [controller1], ["images\image1.paa", "images\image2.paa"], ["Action1", "Action2"], 5, "My Slides", 1] call ace_slideshow_fnc_createSlideshow;` - | Arguments | Explanation ----| --------- | ----------- -0 | `[object1, object2]` | Objects on which images will be projected on -1 | `[controller1]` | Objects with which slideshow can be controlled -2 | `["images\image1.paa", "images\image2.paa"]` | Paths to images projected on screen objects -3 | `["Action1", "Action2"]` | Action names for interaction menu if automatic transitions are not enabled -4 | `5` | 5s slide duration before change to next image -5 | `"My Slides"` | Main interaction point name, for easier distinguishing of multiple slideshow sets -6 | `1` | Uses texture selection 1 for objects with multiple options +| | Arguments | Explanation | +|----| --------- | ----------- | +| 0 | `[object1, object2]` | Objects on which images will be projected on | +| 1 | `[controller1]` | Objects with which slideshow can be controlled | +| 2 | `["images\image1.paa", "images\image2.paa"]` | Paths to images projected on screen objects | +| 3 | `["Action1", "Action2"]` | Action names for interaction menu if automatic transitions are not enabled | +| 4 | `5` | 5s slide duration before change to next image | +| 5 | `"My Slides"` | Main interaction point name, for easier distinguishing of multiple slideshow sets | +| 6 | `1` | Uses texture selection 1 for objects with multiple options | ### 2.2 Create Map Images @@ -86,7 +86,7 @@ _Note: Set Name argument added in 3.9.1._ tex1 = [] call ace_slideshow_fnc_mapImage; tex2 = [(getPos aWhiteboard), 0.5, [[getpos aWhiteboard, "you", "mil_start"]], 0] call ace_slideshow_fnc_mapImage; tex3 = [[4000, 4000], 0.5, [[[5000, 5000], "target", "mil_objective"]], 2] call ace_slideshow_fnc_mapImage; -[[aWhiteboard], [], [tex1, tex2, tex3], ["Full", "Sat Start", "Sat Objective"]] call ace_slideshow_fnc_createSlideshow; +[[aWhiteboard], [], [tex1, tex2, tex3], ["Full", "Sat Start", "Sat Objective"]] call ace_slideshow_fnc_createSlideshow; ``` ### 2.2.2 Map Slideshow Advanced Example @@ -105,12 +105,12 @@ private _initCode = { [{ params ["_displayID","_idPFH"]; private _display = findDisplay _displayID; - if (isNull _display) exitWith { + if (isNull _display) exitWith { systemChat format ["%1 - removing pfeh", _this]; [_idPFH] call CBA_fnc_removePerFrameHandler; }; displayUpdate _display; - + private _map = _display displayCtrl 1; _map ctrlMapAnimAdd [0, 0.3, getpos theUAV]; ctrlMapAnimCommit _map; diff --git a/docs/wiki/framework/spectator-framework.md b/docs/wiki/framework/spectator-framework.md index 22bc0c0021..c78285b98b 100644 --- a/docs/wiki/framework/spectator-framework.md +++ b/docs/wiki/framework/spectator-framework.md @@ -48,11 +48,11 @@ Note that these settings govern the default spectator behaviour. Through the use ### 3.1 Listenable -Event Name | Passed Parameter(s) | Locality | Description ----------- | ----------- | ------------------- | -------- -`ace_spectatorSet` | [_isSpectator, _player] | Global | Player's spectator status was changed -`ace_spectator_displayLoaded` | _display | Local | Spectator display was loaded -`ace_spectator_displayUnloaded` | _display | Local | Spectator display was unloaded +| Event Name | Passed Parameter(s) | Locality | Description | +| ---------- | ----------- | ------------------- | -------- | +| `ace_spectatorSet` | [_isSpectator, _player] | Global | Player's spectator status was changed | +| `ace_spectator_displayLoaded` | _display | Local | Spectator display was loaded | +| `ace_spectator_displayUnloaded` | _display | Local | Spectator display was unloaded | ## 4. Scripting diff --git a/docs/wiki/framework/tagging-framework.md b/docs/wiki/framework/tagging-framework.md index e263a2afaa..126971abf5 100644 --- a/docs/wiki/framework/tagging-framework.md +++ b/docs/wiki/framework/tagging-framework.md @@ -41,28 +41,28 @@ class ACE_Tags { `ace_tagging_fnc_addCustomTag` - | Arguments | Type | Optional (default value) ----| --------- | ---- | ------------------------ -0 | Unique Identifier | String | Required -1 | Display Name | String | Required -2 | Required Item | String | Required -3 | Textures | Array | Required -4 | Icon | String | Optional (default: `""` - Default white point) -5 | Material Paths | Array | Optional (default: `[]] - No custom material) -6 | Tag Model | String | Optional (default: `"UserTexture1m_F"` - 1x1m texture surface) -**R** | Successfully Added Tag | Boolean | Return value +| | Arguments | Type | Optional (default value) | +| ---| --------- | ---- | ------------------------ | +| 0 | Unique Identifier | String | Required | +| 1 | Display Name | String | Required | +| 2 | Required Item | String | Required | +| 3 | Textures | Array | Required | +| 4 | Icon | String | Optional (default: `""` - Default white point) | +| 5 | Material Paths | Array | Optional (default: `[]` - No custom material) | +| 6 | Tag Model | String | Optional (default: `"UserTexture1m_F"` - 1x1m texture surface) | +| **R** | Successfully Added Tag | Boolean | Return value | #### 2.1.1 Example `["ace_victoryRed", "Victory Red", "ACE_SpraypaintRed", ["tagTexture1.paa", "tagTexture2.paa"], "icon.paa"] call ace_tagging_fnc_addCustomTag;` - | Arguments | Explanation ----| --------- | ----------- -0 | `"ace_victoryRed"` | Unique identifier (similar to class name) -1 | `"Victory Red"` | Name of your tag being displayed in the interaction menu -2 | `"ACE_SpraypaintRed"` | Required item to have in the inventory to be able to spray your tag -3 | `["tagTexture1.paa", "tagTexture2.paa"]` | List of texture variants (one is randomly selected when tagging) -4 | `"icon.paa"` | Icon being displayed in the interaction menu +| | Arguments | Explanation | +| ---| --------- | ----------- | +| 0 | `"ace_victoryRed"` | Unique identifier (similar to class name) | +| 1 | `"Victory Red"` | Name of your tag being displayed in the interaction menu | +| 2 | `"ACE_SpraypaintRed"` | Required item to have in the inventory to be able to spray your tag | +| 3 | `["tagTexture1.paa", "tagTexture2.paa"]` | List of texture variants (one is randomly selected when tagging) | +| 4 | `"icon.paa"` | Icon being displayed in the interaction menu | ### 2.2 Tags in description.ext diff --git a/docs/wiki/framework/trenches-framework.md b/docs/wiki/framework/trenches-framework.md index 5fc2dc636e..40e83689ba 100644 --- a/docs/wiki/framework/trenches-framework.md +++ b/docs/wiki/framework/trenches-framework.md @@ -30,7 +30,7 @@ class CfgSurfaces { ```cpp class CfgWeapons { // same config also works on backpacks (CfgVehicles) class yourBaseClass; - class yourEntrenchingToolClass: yourBaseClass + class yourEntrenchingToolClass: yourBaseClass { ace_trenches_entrenchingTool = 1; }; }; diff --git a/docs/wiki/framework/ui-framework.md b/docs/wiki/framework/ui-framework.md index af391f36d5..3b6ec08951 100644 --- a/docs/wiki/framework/ui-framework.md +++ b/docs/wiki/framework/ui-framework.md @@ -53,21 +53,21 @@ Adding new elements through scripting is currently not possible. `ace_ui_fnc_setElementVisibility` - | Arguments | Type | Optional (default value) ----| --------- | ---- | ------------------------ -0 | Source | String | Required -1 | Set/Unset | Boolean | Required -2 | Element Name | String | Required -3 | Show/Hide | Boolean | Optional (default: `false`) -**R** | Successfully Modified | Boolean | Return value +| | Arguments | Type | Optional (default value) | +|----| --------- | ---- | ------------------------ | +| 0 | Source | String | Required | +| 1 | Set/Unset | Boolean | Required | +| 2 | Element Name | String | Required | +| 3 | Show/Hide | Boolean | Optional (default: `false`) | +| **R** | Successfully Modified | Boolean | Return value | #### 2.1.1 Example `["ace_reload", true, "ammoCount", false] call ace_ui_fnc_setElementVisibility;` - | Arguments | Explanation ----| --------- | ----------- -0 | `"ace_reload"` | Source displayed in hint when trying to edit this element from in-game settings or in RPT when some other source tries to edit it -1 | `true` | Set element, preventing others to change it (except config, which always has priority) -2 | `"ammoCount"` | Element name to modify -3 | `false` | Hide the element +| | Arguments | Explanation | +|----| --------- | ----------- | +| 0 | `"ace_reload"` | Source displayed in hint when trying to edit this element from in-game settings or in RPT when some other source tries to edit it | +| 1 | `true` | Set element, preventing others to change it (except config, which always has priority) | +| 2 | `"ammoCount"` | Element name to modify | +| 3 | `false` | Hide the element | diff --git a/docs/wiki/framework/vehiclelock-framework.md b/docs/wiki/framework/vehiclelock-framework.md index 8dc1aea2cf..d882cab971 100644 --- a/docs/wiki/framework/vehiclelock-framework.md +++ b/docs/wiki/framework/vehiclelock-framework.md @@ -31,22 +31,22 @@ Sync the module with vehicles and players. Custom keys will be handed to players `ace_vehiclelock_fnc_addKeyForVehicle` - | Arguments | Type | Optional (default value) ----| --------- | ---- | ------------------------ -0 | Unit | Object | Required -1 | Vehicle | Object | Required -2 | Use Custom Key | Boolean | Optional (default: `false`, `false` for side key, `true` for custom key) -**R** | None | None | Return value +| | Arguments | Type | Optional (default value) | +|----| --------- | ---- | ------------------------ | +| 0 | Unit | Object | Required | +| 1 | Vehicle | Object | Required | +| 2 | Use Custom Key | Boolean | Optional (default: `false`, `false` for side key, `true` for custom key) | +| **R** | None | None | Return value | #### 3.1.1 Example `[bob, car1, true] call ace_vehiclelock_fnc_addKeyForVehicle;` - | Arguments | Explanation ----| --------- | ----------- -0 | `bob` | Unit the key will be added to -1 | `car1` | Vehicle the key will work on -2 | `true` | Set custom key +| | Arguments | Explanation | +|----| --------- | ----------- | +| 0 | `bob` | Unit the key will be added to | +| 1 | `car1` | Vehicle the key will work on | +| 2 | `true` | Set custom key | ### 3.2 Override Side diff --git a/docs/wiki/framework/vehicles-framework.md b/docs/wiki/framework/vehicles-framework.md index a1f66e807a..dac52d0cfa 100644 --- a/docs/wiki/framework/vehicles-framework.md +++ b/docs/wiki/framework/vehicles-framework.md @@ -38,18 +38,18 @@ class CfgVehicles { `ace_vehicles_fnc_setVehicleStartDelay` Has global effects. - | Arguments | Type | Optional (default value) ----| --------- | ---- | ------------------------ -0 | Vehicle | Object | Required -1 | Delay (in seconds) | Number | Required -**R** | None | None | Return value +| | Arguments | Type | Optional (default value) | +|----| --------- | ---- | ------------------------ | +| 0 | Vehicle | Object | Required | +| 1 | Delay (in seconds) | Number | Required | +| **R** | None | None | Return value | #### 1.2.1 Example `[myCar, 2.2] call ace_vehicles_fnc_setVehicleStartDelay;` - | Arguments | Explanation ----| --------- | ----------- -0 | `myCar` | My car object -1 | `2.2` | New startup delay +| | Arguments | Explanation | +|----| --------- | ----------- | +| 0 | `myCar` | My car object | +| 1 | `2.2` | New startup delay | diff --git a/docs/wiki/framework/wirecutter-framework.md b/docs/wiki/framework/wirecutter-framework.md index 3f2a97c0b1..65a4ed1f98 100644 --- a/docs/wiki/framework/wirecutter-framework.md +++ b/docs/wiki/framework/wirecutter-framework.md @@ -36,6 +36,6 @@ class CfgVehicles { ### 2.1 Listenable -Event Name | Description | Passed Parameter(s) | Locality ----------- | ----------- | ------------------- | -------- -`ace_wireCuttingStarted` | Wire cutting started | `[_unit, _fence]` | Global +| Event Name | Description | Passed Parameter(s) | Locality | +| ---------- | ----------- | ------------------- | -------- | +| `ace_wireCuttingStarted` | Wire cutting started | `[_unit, _fence]` | Global | diff --git a/docs/wiki/framework/xm157-framework.md b/docs/wiki/framework/xm157-framework.md index 45a2a19c21..d92d4b37e9 100644 --- a/docs/wiki/framework/xm157-framework.md +++ b/docs/wiki/framework/xm157-framework.md @@ -52,5 +52,4 @@ class CfgWeapons { }; }; }; - ``` From 97257ca77a0eb02d4ca25cb615154b1a6594a88b Mon Sep 17 00:00:00 2001 From: OverlordZorn <56258612+OverlordZorn@users.noreply.github.com> Date: Sun, 21 Apr 2024 16:15:07 +0200 Subject: [PATCH 097/132] Documentation - minor fix (#9967) a -> an --- docs/wiki/development/arma-3-scheduler-and-our-practices.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/wiki/development/arma-3-scheduler-and-our-practices.md b/docs/wiki/development/arma-3-scheduler-and-our-practices.md index 440f0f9557..d2ffda2a07 100644 --- a/docs/wiki/development/arma-3-scheduler-and-our-practices.md +++ b/docs/wiki/development/arma-3-scheduler-and-our-practices.md @@ -36,7 +36,7 @@ Code running in the unscheduled environment uses linear execution, that means it ## 2. What is the scheduler and why do I care? -The Arma 3 script scheduler basically gives a fair-share execution to all running scripts, FSMs, and SQS files running on any given client or server at any given time. See the [Biki article](https://community.bistudio.com/wiki/Biki2.0:Performance_Considerations){:target="_blank"} for a in-depth explanation of this. What this basically means though, is that all scripts get a fair share; this also means scheduled execution is drastically affected by other mods that use scheduled execution. For example, if 2 different spawn's are running in a tight loop of `while {true} do {...};`, they will both get exactly 50% of the scheduling time. +The Arma 3 script scheduler basically gives a fair-share execution to all running scripts, FSMs, and SQS files running on any given client or server at any given time. See the [Biki article](https://community.bistudio.com/wiki/Biki2.0:Performance_Considerations){:target="_blank"} for an in-depth explanation of this. What this basically means though, is that all scripts get a fair share; this also means scheduled execution is drastically affected by other mods that use scheduled execution. For example, if 2 different spawn's are running in a tight loop of `while {true} do {...};`, they will both get exactly 50% of the scheduling time. With the way mission makers and mod makers generally use `spawn`/`execVM`, this means you're actually getting drastically less execution time in the scheduled environment than you might think. This leads to visible delay issues all the way up to massive delay on execution. You can easily test and prove this by looping spawns and watching the execution times extend. From 5a6d6a73df5577b9fc147e15f7f7dd1edb72032a Mon Sep 17 00:00:00 2001 From: Crowdedlight Date: Mon, 22 Apr 2024 19:08:49 +0200 Subject: [PATCH 098/132] Wiki - Fix search being broken by the attach-framework page (#9969) --- docs/wiki/framework/attach-framework.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/wiki/framework/attach-framework.md b/docs/wiki/framework/attach-framework.md index f1f35bc6a8..f118b3b934 100644 --- a/docs/wiki/framework/attach-framework.md +++ b/docs/wiki/framework/attach-framework.md @@ -15,7 +15,7 @@ version: ## 1. Config Values ### 1.1 Make item attachable -An item can be added to the ACE Attach framework by adding the ``ACE_attachable`` property to a class in ``CfgWeapons`` or ``CfgMagazines``. The value must be the classname of a valid class in ``CfgVehicles``: +An item can be added to the ACE Attach framework by adding the `ACE_attachable` property to a class in `CfgWeapons` or `CfgMagazines`. The value must be the classname of a valid class in `CfgVehicles`: ```cpp class CfgWeapons { class attach_item: CBA_MiscItem { @@ -29,14 +29,14 @@ class CfgVehicles { scope = 1; // Should be 1 (private) or 2 (public), scope 0 will cause errors on object creation displayName = "New ACE attachable item"; model = "\path\to\my\model.p3d"; - vehicleClass = ""; + vehicleClass = ""; }; }; ``` ### 1.2 Define attach orientation for non-symmetric items -In the case the item needs to have a particular orientation when attached, add the config value: ``ace_attach_orientation`` which is an array describing the ``roll`` and ``yaw`` orientation of the object. -The default value is: ``[0,0]``. +In the case the item needs to have a particular orientation when attached, add the config value: `ace_attach_orientation` which is an array describing the `roll` and `yaw` orientation of the object. +The default value is: `[0,0]`. Example: ```cpp From a0e4f095551bd324a16d5cd656286c3aea5c208a Mon Sep 17 00:00:00 2001 From: Hexo <130893962+Alfred-Neuman@users.noreply.github.com> Date: Tue, 23 Apr 2024 00:15:05 +0200 Subject: [PATCH 099/132] Translations - French (Map tools) (#9953) * Update translate Hearing french * update map tools --------- Co-authored-by: PabstMirror --- addons/maptools/stringtable.xml | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/addons/maptools/stringtable.xml b/addons/maptools/stringtable.xml index cca7aa98a8..bb0782f22b 100644 --- a/addons/maptools/stringtable.xml +++ b/addons/maptools/stringtable.xml @@ -41,7 +41,7 @@ 標定盤 Tavola di calcolo Графическая доска - Tableau de calcul + Planche traçante The Plotting Board is a map tool designed for use in the directing of short range indirect fires. @@ -49,7 +49,7 @@ 標定盤(プロッティング・ボード)は、短距離の間接射撃の指示に使用するために設計されたマップツールです。 La tavola di calcolo è uno strumento utilizzato per dirigere fuoco di artiglieria a corto raggio. Графическая доска - это картографический инструмент, предназначенный для использования при ведении непрямого огня с малой дистанции. - La table de calcul est un instrument utilisé pour diriger les tirs d'artillerie à courte portée. + Une planche traçante est un outil cartographique conçu pour diriger des tirs indirects à courte distance. Map Tools @@ -274,7 +274,7 @@ 플로팅 보드 그리기 채널 허용 Canali ammessi su tavola di calcolo Разрешить создание каналов на миллиметровой доске. - Canaux autorisés sur la table de calcul + Canaux autorisés sur la planche traçante Channels in which plotting board drawing is enabled. @@ -282,7 +282,7 @@ 플로팅 보드 그리기가 활성화된 채널입니다. Canali in cui si può disegnare sulla tavola di calcolo. Каналы, в которых включено рисование на миллиметровой доске. - Canaux dans lesquels vous pouvez dessiner sur le tableau. + Canaux dans lesquels vous pouvez dessiner sur le planche traçante Allow Direct Comms Only (Polylines Only) @@ -306,7 +306,7 @@ 플로팅 보드 Tavola di calcolo Миллиметровая доска - Table de calcul + Planche traçante Plotting Board Acrylic @@ -314,7 +314,7 @@ 플로팅 보드 (아크릴) Acrilico tavola di calcolo Миллиметровая доска акрилловая - Table de calcul Acrylique + Planche traçante Acrylique Plotting Board Ruler @@ -322,7 +322,7 @@ 플로팅 보드 (자) Righello tavola di calcolo Линейка для миллиметровой доски - Règle de la table de calcul + Règle de la planche traçante To Plotting Board @@ -330,7 +330,7 @@ 플로팅 보드에 Su tavola di calcolo К миллиметровой доске. - Sur la table de calcul + Sur la planche traçante To Plotting Board Acrylic @@ -338,7 +338,7 @@ 플로팅 보드 (아크릴)에 Su acrilico tavola di calcolo К миллиметровой доске акрилловой - Sur la table de calcul Acrylique + Sur la planche traçante Acrylique To Plotting Board Ruler @@ -346,7 +346,7 @@ 플로팅 보드 (자)에 Su righello tavola di calcolo К линейке миллиметровой доски. - Sur la règle de la table à calcul + Sur la règle de la planche traçante Wipe all markers off Plotting Board @@ -354,7 +354,7 @@ 플로팅 보드에 있는 모든 마커 지우기 Cancella tutti i disegni dalla tavola Сотрите все маркеры с миллиметровой доски. - Effacer tous les dessins de la planche + Effacer tous les dessins de la planche traçante Show Plotting Board @@ -362,7 +362,7 @@ 플로팅 보드 보이기 Mostra tavola di calcolo Показать миллиметровую доску. - Afficher la table de calcul + Afficher la planche traçante Hide Plotting Board @@ -370,7 +370,7 @@ 플로팅 보드 숨기기 Nascondi tavola di calcolo Скрыть миллиметровую доску. - Masquer la table de calcul + Masquer la planche traçante Toggle Plotting Board Ruler From 9e6f624a68b5788585ffe5ddd115a7fad84bc316 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Tue, 23 Apr 2024 23:07:16 +0200 Subject: [PATCH 100/132] Cargo - Fix undefined variable and config entries (#9965) Cargo fixes --- addons/cargo/CfgVehicles.hpp | 4 ++-- addons/cargo/XEH_postInit.sqf | 2 +- addons/cargo/functions/fnc_initVehicle.sqf | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/cargo/CfgVehicles.hpp b/addons/cargo/CfgVehicles.hpp index 485a53d8f5..6f6a93e820 100644 --- a/addons/cargo/CfgVehicles.hpp +++ b/addons/cargo/CfgVehicles.hpp @@ -510,7 +510,7 @@ class CfgVehicles { }; GVAR(space) = 2; - GVAR(hasCargo) = 2; + GVAR(hasCargo) = 1; GVAR(size) = 3; GVAR(canLoad) = 1; @@ -524,7 +524,7 @@ class CfgVehicles { class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {}; }; GVAR(space) = 3; - GVAR(hasCargo) = 3; + GVAR(hasCargo) = 1; GVAR(size) = 3; GVAR(canLoad) = 1; diff --git a/addons/cargo/XEH_postInit.sqf b/addons/cargo/XEH_postInit.sqf index 94cb2afc87..f48849b50b 100644 --- a/addons/cargo/XEH_postInit.sqf +++ b/addons/cargo/XEH_postInit.sqf @@ -86,7 +86,7 @@ GVAR(vehicleAction) = [ GVAR(enable) && {alive _target} && {locked _target < 2} && - {(_target getVariable [QGVAR(hasCargo), getNumber (configOf _target >> QGVAR(hasCargo)) == 1])} && + {_target getVariable [QGVAR(hasCargo), getNumber (configOf _target >> QGVAR(hasCargo)) == 1]} && {[_player, _target, ["isNotSwimming"]] call EFUNC(common,canInteractWith)} && {[_player, _target] call EFUNC(interaction,canInteractWithVehicleCrew)} && {([_player, _target] call EFUNC(interaction,getInteractionDistance)) < MAX_LOAD_DISTANCE} diff --git a/addons/cargo/functions/fnc_initVehicle.sqf b/addons/cargo/functions/fnc_initVehicle.sqf index 4ca004b94e..af80761fe0 100644 --- a/addons/cargo/functions/fnc_initVehicle.sqf +++ b/addons/cargo/functions/fnc_initVehicle.sqf @@ -23,7 +23,7 @@ private _config = configOf _vehicle; // If vehicle had space given to it via eden/public, then override config hasCargo setting private _hasCargoPublic = _vehicle getVariable QGVAR(hasCargo); -private _hasCargoPublicDefined = !isNil "_canLoadPublic"; +private _hasCargoPublicDefined = !isNil "_hasCargoPublic"; if (_hasCargoPublicDefined && {!(_hasCargoPublic isEqualType false)}) then { WARNING_4("%1[%2] - Variable %3 is %4 - Should be bool",_vehicle,_type,QGVAR(hasCargo),_hasCargoPublic); From c17873dcad517005f73832339ce1ed6b0dd6345d Mon Sep 17 00:00:00 2001 From: jonpas Date: Wed, 24 Apr 2024 02:29:25 +0200 Subject: [PATCH 101/132] Prepare 3.17.1 Build 84 --- addons/main/script_version.hpp | 4 ++-- docs/_config.yml | 4 ++-- docs/_config_dev.yml | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/addons/main/script_version.hpp b/addons/main/script_version.hpp index 501b3095dc..62b6d52e2e 100644 --- a/addons/main/script_version.hpp +++ b/addons/main/script_version.hpp @@ -1,4 +1,4 @@ #define MAJOR 3 #define MINOR 17 -#define PATCHLVL 0 -#define BUILD 83 +#define PATCHLVL 1 +#define BUILD 84 diff --git a/docs/_config.yml b/docs/_config.yml index 66cd1141f7..e29663ce3b 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -9,8 +9,8 @@ ace: version: major: 3 minor: 17 - patch: 0 - build: 82 + patch: 1 + build: 84 markdown: kramdown diff --git a/docs/_config_dev.yml b/docs/_config_dev.yml index e3c042e9c7..b6f160c7d3 100644 --- a/docs/_config_dev.yml +++ b/docs/_config_dev.yml @@ -9,8 +9,8 @@ ace: version: major: 3 minor: 17 - patch: 0 - build: 82 + patch: 1 + build: 84 markdown: kramdown From 1eca83db9fb1cd4ca101f73d4f9949a17059e38f Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Thu, 25 Apr 2024 06:41:27 +0200 Subject: [PATCH 102/132] Common - Fix animations not playing (#9973) Update CfgMoves.hpp --- addons/common/CfgMoves.hpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/addons/common/CfgMoves.hpp b/addons/common/CfgMoves.hpp index 3c51140fed..da83153b15 100644 --- a/addons/common/CfgMoves.hpp +++ b/addons/common/CfgMoves.hpp @@ -1,8 +1,5 @@ class CfgMovesBasic { - // Idle affects legs when weapon switching - fixes units sliding when holstering weapons - class Default { - idle = ""; - }; + class Default; // From ACRE class ManActions { @@ -86,5 +83,14 @@ class CfgMovesMaleSdr: CfgMovesBasic { class AinvPknlMstpSnonWnonDnon_medic0: HealBase { variantsPlayer[] = {}; }; + + // Idle affects legs when weapon switching - fixes units sliding when holstering weapons + class AmovPercMstpSnonWnonDnon: StandBase { + idle = ""; + }; + // Need to reset idle, as it breaks animations otherwise + class CutSceneAnimationBase: AmovPercMstpSnonWnonDnon { + idle = "idleDefault"; + }; }; }; From a12ad9ec59dcb69aa1fec7b0ae9b03549dc982e4 Mon Sep 17 00:00:00 2001 From: Dystopian Date: Thu, 25 Apr 2024 09:23:10 +0400 Subject: [PATCH 103/132] Interact menu - Fix condition in consolidated menu (#9946) Fix condition in consolidated menu --- .../interact_menu/functions/fnc_collectActiveActionTree.sqf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf b/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf index ebb02caa11..9a3eb31598 100644 --- a/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf +++ b/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf @@ -109,14 +109,14 @@ if ((_activeChildren isEqualTo []) && {_statementCode isEqualTo {}}) exitWith { if (GVAR(consolidateSingleChild) && {count _activeChildren == 1} && {_statementCode isEqualTo {}}) then { _activeChildren select 0 params ["_childActionData", "_childChildren", "_childObject"]; - _childActionData params ["", "_displayNameChild", "_iconChild", "_statementChild", "", "", "_customParamsChild", "", "", "_paramsChild"]; + _childActionData params ["", "_displayNameChild", "_iconChild", "_statementChild", "_conditionChild", "_insertChildrenChild", "_customParamsChild", "", "", "_paramsChild"]; _origActionData = [ _actionName, format ["%1 > %2", _displayName, _displayNameChild], _iconChild, _statementChild, - _conditionCode, - _insertChildrenCode, + _conditionChild, + _insertChildrenChild, _customParamsChild, _position, _distance, From b513a110f5564d42243770c52f338642d5b594cf Mon Sep 17 00:00:00 2001 From: Apricot <50947830+Apricot-ale@users.noreply.github.com> Date: Sat, 27 Apr 2024 07:34:11 +0900 Subject: [PATCH 104/132] Translations - Improve Japanese localization (3.17.1) (#9977) Tweaks --- addons/cargo/stringtable.xml | 2 +- addons/common/stringtable.xml | 4 +-- addons/dragging/stringtable.xml | 2 +- addons/explosives/stringtable.xml | 6 ++-- addons/field_rations/stringtable.xml | 2 +- addons/finger/stringtable.xml | 2 +- addons/fortify/stringtable.xml | 8 ++--- addons/frag/stringtable.xml | 6 ++-- addons/headless/stringtable.xml | 2 +- addons/hearing/stringtable.xml | 23 ++++++------ addons/map/stringtable.xml | 2 +- addons/map_gestures/stringtable.xml | 6 ++-- addons/medical/stringtable.xml | 4 +-- addons/medical_ai/stringtable.xml | 2 +- addons/medical_blood/stringtable.xml | 2 +- addons/medical_damage/stringtable.xml | 14 ++++---- addons/medical_engine/stringtable.xml | 2 +- addons/medical_gui/stringtable.xml | 2 +- addons/medical_statemachine/stringtable.xml | 8 ++--- addons/medical_treatment/stringtable.xml | 40 ++++++++++----------- addons/microdagr/stringtable.xml | 6 ++-- addons/pylons/stringtable.xml | 2 +- addons/rearm/stringtable.xml | 2 +- addons/refuel/stringtable.xml | 2 +- addons/repair/stringtable.xml | 4 +-- addons/spectator/stringtable.xml | 2 +- addons/trenches/stringtable.xml | 8 ++--- addons/vehiclelock/stringtable.xml | 2 +- addons/viewdistance/stringtable.xml | 2 +- addons/volume/stringtable.xml | 2 +- addons/weather/stringtable.xml | 2 +- 31 files changed, 87 insertions(+), 86 deletions(-) diff --git a/addons/cargo/stringtable.xml b/addons/cargo/stringtable.xml index 79ee3f96b5..0a766ab221 100644 --- a/addons/cargo/stringtable.xml +++ b/addons/cargo/stringtable.xml @@ -513,7 +513,7 @@ Modifies how long it takes to load/unload items.\nTime, in seconds, is the size of the item multiplied by this value. Gibt an, wie lange das Laden / Entladen von Gegenständen dauern soll.\nZeit in Sekunden, die mit der Größe des Gegenstandes multipliziert wird. - 貨物の積み込み/積み下ろしに掛かる時間を変更します。\n時間 (秒) は、貨物のサイズにこの値を掛けたものです。 + 貨物の積み込み/積み下ろしに掛かる時間を変更します。\n時間 (秒単位) は、貨物のサイズにこの値を掛けたものです。 Modyfikuje, jak długo zajmuje załadowywanie/wyładowywanie przedmiotów. \nCzasem, w sekundach, jest wielkość przedmiotu razy jego wartość. Modifica il tempo impiegato per caricare o scaricare gli oggetti.\nIl tempo, in secondi, equivale alla dimensione dell'oggetto moltiplicata per questo valore Изменяет время для загрузки/выгрузки предметов. \nВремя (сек) - это размер предмета, умноженный на это значение. diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index 4afdf2ad89..1c960e9173 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -498,7 +498,7 @@ 设定当玩家有错误的 PBO 时要如何处理。 Nastavuje jakou akci provést pokud hráč nemá správné PBO. Określa akcję, która ma być podjęta, jeśli gracz nie ma właściwych PBO. - プレイヤーが不正規のPBOを所持している場合の動作を決定します。 + プレイヤーが不正規のPBOを所持している場合の動作を定義します。 Define la accion a tomar si un jugador no tiene el PBO correcto Definisce l'azione che verrà presa se il giocatore non ha gli stessi PBO. Определяет, какое действие будет предпринято, если игрок не имеет корректные PBO. @@ -1582,7 +1582,7 @@ Controls extra information shown in progress bar. - プログレス バーへ表示される情報量を決定します。 + プログレス バーへ表示される情報量を制御します。 Définit quelles informations supplémentaires sont affichées dans la barre de progression. Устанавливает дополнительную информацию в индикаторе процесса. Kontrolliert zusätzliche Informationen beim Fortschrittsbalkens. diff --git a/addons/dragging/stringtable.xml b/addons/dragging/stringtable.xml index 7cf53ba55c..9552f50273 100644 --- a/addons/dragging/stringtable.xml +++ b/addons/dragging/stringtable.xml @@ -192,7 +192,7 @@ Determines whether object's weight is added onto weight calculations. - 重量計算にオブジェクトの重量を追加するかどうかを決定します。 + 重量計算にオブジェクトの重量を追加するかどうかを定義します。 Determina se la massa del contenitore è sommata alla massa del contenuto per i calcoli di peso. Określa, czy waga obiektu jest dodawana do obliczeń ciężaru. Legt fest, ob das Gewicht des Objekts zu den Gewichtsberechnungen hinzugefügt wird. diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml index b21238e98e..fccc685c4f 100644 --- a/addons/explosives/stringtable.xml +++ b/addons/explosives/stringtable.xml @@ -1170,7 +1170,7 @@ Minimum time value (in seconds) for the explosive timer. Минимальное время до взрыва в секундах Définit la durée minimale paramétrable sur le minuteur. - 起爆タイマーの最低時間 (秒) を設定します。 + 起爆タイマーの最短時間 (秒単位) を設定します。 Tiempo mínimo (en segundos) para el temporizador del explosivo. Minimalna wartość czasomierza dla ładunku (w sekundach). Minimale Zeit (in Sekunden) für den Zeitzünder. @@ -1183,7 +1183,7 @@ Maximum time value (in seconds) for the explosive timer. Макисмальное время до взрыва в секундах Définit la durée maximale paramétrable sur le minuteur. - 起爆タイマーの最長時間 (秒) を設定します。 + 起爆タイマーの最長時間 (秒単位) を設定します。 Tiempo máximo (en segundos) para el temporizador del explosivo. Maksymalna wartość czasomierza dla ładunku (w sekundach). Maximale Zeit (in Sekunden) für den Zeitzünder. @@ -1196,7 +1196,7 @@ Default time value (in seconds) for the explosive timer. Стандартное время до взрыва в секундах Définit la durée paramétrée par défaut sur le minuteur. - 起爆タイマーの標準時間 (秒) を設定します。 + 起爆タイマーの標準時間 (秒単位) を設定します。 Tiempo por defecto (en segundos) para el temporizador del explosivo. Domyślna wartość czasomierza dla ładunku (w sekundach). Standardmäßige Zeit (in Sekunden) für den Zeitzünder. diff --git a/addons/field_rations/stringtable.xml b/addons/field_rations/stringtable.xml index 482f347598..2b443ccc3c 100644 --- a/addons/field_rations/stringtable.xml +++ b/addons/field_rations/stringtable.xml @@ -455,7 +455,7 @@ 控制顏色化圖示的透明度。設定為動態使其界面透明度與飲食需求一樣,越透明越需要。 控制彩色图标 HUD 的透明度。动态设置使 HUD 的透明度随着口渴或饥饿的增加而减弱。 Kontroluje transparentność kolorowych ikon HUD. Dynamiczne ustawienie zmniejsza przejrzystość wraz z zwiększeniem głodu czy pragnienia. - 色付きアイコンの透明度を決定できます。動的に設定されると、空腹度や喉の渇きが増すにつれて、アイコンの透明度を下げます。 + 色付きアイコンの透明度を制御できます。動的に設定されると、空腹度や喉の渇きが増すにつれて、アイコンの透明度を下げます。 Настраивает прозрачность цветных иконок. «Динамическая» делает иконки менее прозрачными при увеличении жажды и голода. Renkli Simgeler Gösterge Paneli'nin şeffaflığını kontrol eder. Dinamik ayar, susuzluk veya açlık arttıkça HUD'yi daha az şeffaf hale getirir. 색깔 아이콘의 투명도를 조절합니다. 동적 설정의 경우 배고픔이나 목마름이 해결되면 덜 투명하게 바뀝니다. diff --git a/addons/finger/stringtable.xml b/addons/finger/stringtable.xml index 9f61aa0f7c..bdb0c835b6 100644 --- a/addons/finger/stringtable.xml +++ b/addons/finger/stringtable.xml @@ -79,7 +79,7 @@ Distancia máxima entre los jugadores para mostrar el indicador que señala [por defecto: 4 metros] Maximální vzdálenost mezi hráči pro ukázání směru [výchozí: 4 metry] Distanza massima tra giocatori per mostrare l'indicatore di puntamento [Predefinito: 4 metri] - 指差しのマーカー表示が他のプレイヤーに表示される最大範囲を決定できます。 [デフォルト: 4メートル] + 指差しのマーカー表示が他のプレイヤーに表示される最大範囲 [デフォルト: 4メートル] 플레이어 사이에서 가리키기 표시를 보이게 하는 최대거리를 설정합니다[기본설정: 4 미터] 设定指向标记最大显示距离。[预设:4米] 設定指向指示器最大顯示距離。[預設: 4公尺] diff --git a/addons/fortify/stringtable.xml b/addons/fortify/stringtable.xml index c3fda20caf..15150d6685 100644 --- a/addons/fortify/stringtable.xml +++ b/addons/fortify/stringtable.xml @@ -145,7 +145,7 @@ Mostra aggiornamenti di budget 顯示預算更新 显示预算更新 - 予算の更新を表示 + 予算更新を表示 Pokaż aktualizacje budżetu Показывать обновления бюджета Bütçe güncellenmelerini göster @@ -160,7 +160,7 @@ 決定預算變更時是否會顯示提示 决定预算变更时是否会显示提示 Controlla se vengono mostrati avvisi di aggiornamento del budget - 予算が更新されヒント表示時の操作を決定します + 予算更新のヒントが表示される場面を制御します Kontroluje kiedy aktualizacje budżetu są wyświetlane Настраивает сообщения об обновлении бюджета Bütçe güncellenince bilgi verilip verilmeyeceğini kontrol eder. @@ -190,7 +190,7 @@ Ha l'attrezzo di fortificazione 有要塞工具 有设防工具 - 要塞ツール所持の時 + 要塞ツール所持時 Posiada narzędzie do fortyfikowania Если имеется инструмент Insa Etme Aleti Olanlara Göster @@ -233,7 +233,7 @@ 건축물을 지을 때 걸리는 시간을 계수를 적용하여 계산합니다. Koeffizient zur Bestimmung der Bauzeit \nA in Ax + b, wobei x die Kosten des Objekts sind. Il coefficiente 'C' che determina il tempo di costruzione.\nTempo Totale = Costo * C + Tempo Minimo - 建造する時間を決定するために使用される係数。\n計算式はAx + bです。この係数はAであり、xは建造物のコストです。 + 建造する時間を定義するために使用される係数。\n計算式はAx + bです。この係数はAであり、xは建造物のコストです。 Współczynnik używany do określenia czasu budowy konstrukcji.\nA w Ax + b gdzie x jest kosztem obiektu Коэффициент используемый для указания времени необходимого для возведения постройки.\nA в формуле Ax + b, где x - это цена объекта Coeficiente usado para determinar el tiempo de construcción de una estructura.\nA en Ax + b donde x es el coste del objeto diff --git a/addons/frag/stringtable.xml b/addons/frag/stringtable.xml index 2bd76c2928..f88877448d 100644 --- a/addons/frag/stringtable.xml +++ b/addons/frag/stringtable.xml @@ -105,7 +105,7 @@ Active la simulation de la réflexion des explosions ACE. Ativa a simulação de reflexo de explosão do ACE Включить симуляцию отражения взрывов ACE - ACE爆発反射シミュレーションを有効化 + ACE 爆発反射シミュレーションを有効化 ACE 폭발 반사 시뮬레이션을 적용합니다. 启用 ACE 模拟爆炸反射 啟用ACE模擬爆炸反射 @@ -138,7 +138,7 @@ Ez a beállítás szabályozza a repeszeződés és pattogzás által kilőtt objektumok követett számát. Ha több ez a szám, ezek az objektumok nem lesznek követve. Csökkentsd ezt a beállítást, ha nem akarsz lassulásokat magas-törmelékmennyiségű helyzetekben (200+ repesz a levegőben egyszerre) Эта настройка контролирует максимальное количество снарядов, которок отслеживает система осколков и обломков в каждый момент времени. /nСнаряды, выстреленные сверх этого числа, отслеживаться не будут. Уменьшите это значение, если вы не хотите падения FPS при большом количестве снарядов в одной перестрелке (> 200 одновременно летящих снарядов) Questo parametro controlla il numero massimo di proiettili che la frammentazione e il sistema di spalling tracciano in ogni momento. Se vengono sparati ulteriori proiettili, non verranno tracciati. Abbassa questo parametro se non vuoi cali di FPS in scenari con molti proiettili (>200 proiettili in aria contemporaneamente) - この設定では、断片化および剥離システムが常に追跡する飛翔体の最大量を制御します。 さらに多くの飛翔体が発射された場合、それらは追跡されません。 弾数が多いシナリオでFPSを低下させたくない場合は、この設定を下げてください。 (一度に200発以上が空中に発射されます) + この設定では、断片化および剥離システムが常に追跡する飛翔体の最大量を制御します。 この値より多くの飛翔体が発射された場合、それらは追跡されません。 弾数が多いシナリオでFPSを低下させたくない場合は、この設定を下げてください。 (一度に200発以上が空中に発射されます) 이 설정은 탄환파편 및 파편 시스템으로 인해 생긴 발사체의 수를 결정합니다. 만약 더 많은 발사체가 나올 경우 정해진 수 이외에는 추적하지 않습니다. 이 설정을 낮춤으로써 파편이 많은 시나리오를 실행할때 더욱 원활히 진행할 수 있습니다 (한 번에 200개 이하) 设定在指定时间内,系统最大可追踪的破片粒子数量。如有更多的碎片在这之后产生,这些粒子将不会被追踪。如果你想要维持好的帧数,此设定勿调的过高。( >一次200颗粒子) 設定在指定時間內,系統最大可追蹤的碎片/剝落粒子數量。如有更多的碎片在這之後產生,這些粒子將不會被追蹤。如果你想要維持好的幀數,此設定勿調的過高。( >一次200顆粒子) @@ -170,7 +170,7 @@ A lepattogzási útvonalak számításának darabjai képkockánként. Ez eloszlatja az FPS-megszakadást több képkockára, ezzel csökkentve a súlyosságát. Число обрабатываемых осколков за кадр. Это позволяет распределить нагрузку по отслеживанию осколков между несколькими кадрами, чтобы предотвратить падение FPS. Il numero di calcoli per tracciamento di spalling ad ogni frame. Questo aiuta a distribuire l'impatto del tracciamento dello spalling su più frame, riducendolo ulteriormente. - 与えられたフレームごとに追跡する剥離飛翔体の数を決定します。FPS に影響をあたえないよう、剥離飛翔体を複数のフレームで追跡し、分散させています。 + 任意のフレームごとに追跡される剥離飛翔体の数。剥離による飛翔体を追跡することによるFPSへの影響を複数フレームに分散させ抑えることが出来ます。 가능한 프레임마다 파편을 추적 및 계산합니다. 여러 프레임에 걸쳐 파편난 발사체를 추적하여 FPS에 도움을 줍니다. 이를 제한함으로써 더욱 큰 효과를 볼 수 있습니다. 设定在每一帧数内,系统最大可追踪的破片粒子数量。此设定可有效帮助系统减低计算压力。 設定在每一幀數內,系統最大可追蹤的碎片/剝落粒子數量。此設定可有效幫助系統減低計算壓力 diff --git a/addons/headless/stringtable.xml b/addons/headless/stringtable.xml index 584c12f954..35dcb11862 100644 --- a/addons/headless/stringtable.xml +++ b/addons/headless/stringtable.xml @@ -62,7 +62,7 @@ Minimale Verzögerung zwischen Transfers in Sekunden. (Standard: 15) Minimalny odstęp pomiędzy transferami w sekundach. (Domyślnie: 15) 전송 간 최소 지연 시간, 초당. (기본값: 15) - 移行する際の最低遅延を秒数で設定します。 (デフォルト: 15) + 移行する際の最低遅延を秒単位で設定します。 (デフォルト: 15) Délai minimum entres les transferts, en secondes. (Défaut: 15) 设定每次转换间隔多少秒。(预设:15秒) 設定每次轉換間隔多少秒。(預設:15秒) diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index 1cbeacf259..1265478639 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -45,7 +45,7 @@ Füldugó berakva Protetores colocados Indossa i tappi auricolari - 耳栓を着ける + 耳栓を装着 귀마개 착용 塞入耳塞 塞入耳塞 @@ -79,7 +79,7 @@ Füldugó berakva Protetores colocados Tappi auricolari indossati - 耳栓を着けました + 耳栓を装着しました 귀마개 착용 耳塞已塞入 耳塞已塞入 @@ -144,7 +144,7 @@ Quando il giocatore riceve danni all'udito, non far sentire il fischio nelle orecchie Remove o efeito de zunido quando o jogador recebe dano na audição Убирает эффект звона в ушах, когда игрок получает повреждение слуха - プレイヤーの聴覚が損傷したときの耳鳴り効果を削除します + プレイヤーが聴覚にダメージを受けた際の耳鳴り効果音を無効化します 플레이어가 청력손실을 입을 때 생기는 이명현상을 제거합니다. 关闭耳鸣效果时,就算玩家受到相当程度的听力伤害,也不会造成耳鸣效果 關閉耳鳴效果時,就算玩家受到相當程度的聽力傷害, 也不會造成耳鳴效果 @@ -192,7 +192,7 @@ Уменьшает возможность игрока слышать звуки при повреждении органов слуха Assorda il giocatore quando riceve danni all'udito Réduit la capacité auditive du joueur lorsqu'il subit des dommages auditifs. - プレイヤーが聴覚ダメージを受けると聴力が低下します + プレイヤーが聴覚にダメージを受けると聴力が低下します 청력에 손상을 입으면 듣는 소리가 감소합니다. 当玩家听力受损时降低听力能力? 當玩家聽力受損時降低聽力能力? @@ -268,7 +268,7 @@ Aggiungi l'oggetto 'ACE_EarPlugs' a tutte le unità che hanno armi/lanciatori rumorosi. Può essere disabilitato se vengono usati loadout personalizzati. Agregar el item `ACE_EarPlugs` a todas las unidades equipadas con armas muy ruidosas. Desactivar si quieren utilizarse equipamientos personalizados. Ajoute l'objet `Ace_EarPlugs` à toutes les unités ayant des armes bruyantes. Peut être désactivé si de l'équipement personnalisé est utilisé. - 全ユニットへ`ACE_EarPlugs`アイテムを持たせます。これはロードアウトの編集で無効化できます。 + 全てのユニットに`ACE_EarPlugs`アイテムを所持させます。これはロードアウトの編集で無効化できます。 무기를 가지고 있는 모든 인원에게 'ACE_EarPlugs'를 지급합니다. 임의의 장비를 사용시 비활성화할 수 있습니다. 增加`ACE_EarPlugs`物品给拥有巨大噪音武器的单位。当你想自定装备时,此功能可被关闭。 增加`ACE_EarPlugs`物品給擁有巨大噪音武器的單位。當你想自定裝備時,此功能可被關閉。 @@ -292,7 +292,7 @@ Volume muffling Lautstärkedämpfung Atténuation du volume - 音量低下 + 音量の抑制 降低音量 進低音量 Attenuazione del volume @@ -306,7 +306,7 @@ Earplugs Volume Lautstärke Ohrenstöpsel - 耳栓時の音量 + 耳栓装着時音量 耳塞时音量 耳塞時音量 Volume con i Tappi @@ -321,7 +321,7 @@ Volume when using earplugs. Lautstärke wenn man Ohrenstöpsel benutzt - 耳栓使用時の音量を決定します。 + 耳栓を使用した時の音量。 决定带上耳塞时的音量 使用耳塞時音量 Volume audio quandi si indossano i tappi per le orecchie. @@ -336,7 +336,7 @@ Unconscious Volume Lautstärke Bewusstlosigkeit - 気絶時の音量 + 無意識状態時音量 无意识时音量 昏迷時音量 Volume quando incoscente @@ -351,7 +351,7 @@ Volume when unconscious. Lautstärke während man Bewusstlos ist - 無意識状態時の音量を決定します。 + 無意識状態になった時の音量。 决定处于无意识时的音量 昏迷時使用耳塞的音量 Volume quando incoscente. @@ -365,7 +365,7 @@ Put/take out earplugs - 耳栓を着け外す + 耳栓の着脱 Вставить/вынуть беруши Metti/Togli tappi 귀마개 토글 @@ -375,6 +375,7 @@ Only units with heavy weapons Uniquement les unités dotées d'armes lourdes Только юниты с тяжелым вооружением + 重火器を装備したユニットのみ diff --git a/addons/map/stringtable.xml b/addons/map/stringtable.xml index ed5d427424..5d91167639 100644 --- a/addons/map/stringtable.xml +++ b/addons/map/stringtable.xml @@ -268,7 +268,7 @@ Milyen gyakran frissüljenek a jelölők (másodpercben) Как часто должны обновляться маркеры (в секундах) Quanto spesso vengono aggiornati i marker (in secondi) - マーカが再描画される間隔を設定できます (秒) + マーカが再描画される間隔 (秒単位) 몇 초마다 마커를 새로 갱신합니까? 设定每多少时间重新标示出单位位置(秒) 設定每多少時間重新標示出單位位置 (秒) diff --git a/addons/map_gestures/stringtable.xml b/addons/map_gestures/stringtable.xml index 3b7d7e77dd..91f07c7cdf 100644 --- a/addons/map_gestures/stringtable.xml +++ b/addons/map_gestures/stringtable.xml @@ -228,7 +228,7 @@ Farbwert für Gruppenführer, die mit diesem Modul synchronisiert werden. Color para los líderes de los grupos sincronizados al módulo. Couleur pour les chefs des groupes synchronisés avec ce module. - モジュールで同期されたグループの隊長に設定される色の値を決定します。 + モジュールで同期されたグループの隊長に設定される色の値。 그룹이 이 모듈에 동기화 됐을 때의 리더 색상입니다. 改变与此同步小队队长的指示颜色。 改變與此同步小隊隊長的指示器顏色 @@ -259,7 +259,7 @@ Farbwert für Gruppenmitglieder, die mit diesem Modul synchronisiert werden. Color para los miembros de los grupos sincronizados al módulo. Couleur pour les membres des groupes synchronisés avec ce module. - モジュールで同期されたグループの隊員に設定される色の値を決定します。 + モジュールで同期されたグループの隊員に設定される色の値。 그룹이 이 모듈에 동기화 됐을 때의 멤버 색상입니다. 改变与此同步小队队员的指示颜色 改變與此同步小隊隊員的指示器顏色 @@ -386,7 +386,7 @@ What player can see what Определяет, какая группа игроков может видеть жесты на карте во время брифинга Définit quels pointages les joueurs peuvent voir lors du briefing. - プレイヤーが見ることができる対象を決定します。 + プレイヤーが見ることができる対象 Qué puede ver cada jugador Quali giocatori possono vedere gesti sulla mappa in fase di briefing. Co mogą widzieć gracze diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index cfc05e4d75..6a081fa648 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -37,7 +37,7 @@ Unconscious Wake Up Chance Wahrscheinlichkeit um aufzuwachen - 気絶時の覚醒確率 + 無意識状態時の覚醒確率 Шанс очнуться при потере сознания Chance de reprendre connaissance Chance de recuperar consciência @@ -84,7 +84,7 @@ When an unconscious patient has Epinephrine in their system, the time between spontaneous wake up checks is divided by this value. - 気絶した患者の体内に投与されたアドレナリンがある場合、 覚醒確率計算の実施間隔が値で除算されます。 + 無意識状態の患者の体内に投与されたアドレナリンがある場合、 覚醒確率計算の実施間隔が値で除算されます。 增加因病患的循環系統裡面的腎上腺素自我甦醒的機率。 增加因病患的循环系统里面的肾上腺素自我苏醒的机率。 Augmente la fréquence des tests de réveil lorsque le patient a de l'épinéphrine dans son système sanguin.\n(L'épinéphrine n'accélère pas la reprise de conscience si la valeur est définie sur 1.) diff --git a/addons/medical_ai/stringtable.xml b/addons/medical_ai/stringtable.xml index 7f5680dc3f..5081a09d96 100644 --- a/addons/medical_ai/stringtable.xml +++ b/addons/medical_ai/stringtable.xml @@ -20,7 +20,7 @@ AI will respond to injury and unconsciousness KI reagiert auf Verletzungen und Bewusstlosigkeit - AIが負傷者と気絶している人に対して行動するようになります。 + AIが負傷者と無意識状態の人に対して行動するようになります。 ИИ будет реагировать на травмы и потерю сознания Les unités IA seront sensibles aux blessures, ainsi qu'à la perte de connaissance. A IA irá responder a ferimentos e perdas de consciência diff --git a/addons/medical_blood/stringtable.xml b/addons/medical_blood/stringtable.xml index 6c3be0c557..a63de99ea0 100644 --- a/addons/medical_blood/stringtable.xml +++ b/addons/medical_blood/stringtable.xml @@ -99,7 +99,7 @@ Controls the lifetime of blood drop objects. - 血痕オブジェクトの寿命を決定します。 + 血痕オブジェクトの寿命を制御します。 Définit la durée d'affichage des traces de sang. Управляет временем жизни объектов капель крови. Controla o tempo de vida que um objeto de gota de sangue tem. diff --git a/addons/medical_damage/stringtable.xml b/addons/medical_damage/stringtable.xml index f21cb1901f..626826117d 100644 --- a/addons/medical_damage/stringtable.xml +++ b/addons/medical_damage/stringtable.xml @@ -18,7 +18,7 @@ Sets the amount of damage a player can receive before going unconscious (and dying if "Sum of Trauma" is enabled). - プレイヤーが気絶するまでに受けられるダメージ量を設定します。\n("外傷の合計"が有効な場合は死亡するまでに受けられるダメージ量) + プレイヤーが無意識状態に陥るまでに受けられるダメージ量を設定します。\n("外傷の合計"が有効な場合は死亡するまでに受けられるダメージ量) Définit la quantité de dégâts qu'un joueur peut subir avant de perdre connaissance (ou mourir, si l'option "Somme des traumatismes" est sélectionnée). Устанавливает количество урона, которое может получить игрок, прежде чем потеряет сознание (и умирает, если включена функция "Сумма травм"). Define a quantidade de dano que um jogador pode receber antes de ficar inconsciente. @@ -49,7 +49,7 @@ Sets the amount of damage an AI unit can receive before going unconscious (or dying when "Sum of Trauma" is enabled). - AIが気絶するまでに受けられるダメージ量を設定します。\n("外傷の合計"が有効な場合は死亡するまでに受けられるダメージ量) + AIが無意識状態に陥るまでに受けられるダメージ量を設定します。\n("外傷の合計"が有効な場合は死亡するまでに受けられるダメージ量) Définit la quantité de dégâts qu'une unité IA peut subir avant de perdre connaissance (ou mourir, si l'option "Somme des traumatismes" est sélectionnée). Устанавливает количество урона, которое может получить ИИ, прежде чем потеряет сознание (или умирает, когда включена функция "Сумма травм").. Define a quantidade de dano que uma IA pode receber antes de ficar inconsciente. @@ -625,7 +625,7 @@ Determines what damage can be fatal Определяет какой урон будет смертельным - 致命となるダメージの種類を決定します。 + 致命となるダメージの種類を定義します。 決定何種傷害為致命 确定哪些伤害可能是致命的 Determina quali danni possono essere letali @@ -757,7 +757,7 @@ Legt die Höhe des Schadens fest, den eine Einheit erhalten kann, bevor diese ohnmächtig wird. (0 für Misionsnormalwert) Determina il livello di danni sopportabili da un'unità senza svenire. (0 per il valore predefinito dalla missione) Définit la quantité de dégâts que l'unité peut subir avant de perdre connaissance (ou mourir, si l'option "Somme des traumatismes" est sélectionnée).\n(0 utilise la valeur définie dans la mission.) - このユニットが気絶するまでに受けられるダメージ量を設定します。 (ミッション標準は0) + このユニットが無意識状態に陥るまでに受けられるダメージ量を設定します。 (ミッション標準は0) Určuje kolik poškození může jednotka utrpět než upadne do bezvědomí. (pro použití standardní hodnoty mise zadejte 0) Устанавливает количество урона, которое может получить юнит перед тем, как потерять сознание. (0 для значения миссии) Ustawia próg obrażeń jakie może otrzymać jednostka przed utratą przytomności. (0 jako ustawienie domyślne misji) @@ -772,7 +772,7 @@ Шанс потерять сознание от боли Szansa na nieprzytomność przez ból Probabilità Svenimento da Dolore - 痛みによる気絶確率 + 痛みによる無意識化確率 Probabilidad de inconsciencia por dolor Douleur - Chance d'évanouissement Chance für Bewusslosigkeit durch Schmerz @@ -785,7 +785,7 @@ Шанс, что человек потеряет сознание, когда его боль выше допустимого порога при получении травмы. La probabilità che un'unità perda i sensi quando il suo dolore è sopra la soglia critica ricevendo danni. Szansa że osoba straci przytomność gdy jej ból jest powyżej tolerowalnego progu podczas otrzymywania obrażeń. - ユニットがダメージを受けた時の痛みが許容しきい値を超えていた場合に気絶する確率を設定します。 + ユニットがダメージを受けた時の痛みが許容しきい値を超えていた場合に無意識状態に陥る確率を設定します。 La probabilidad de que una persona caiga inconsciente cuando su dolor está por encima del umbral al haber recibido daño. La probabilité pour qu'une personne perde connaissance lorsque la douleur ressentie est supérieure à son seuil de tolérance. Die Wahrscheinlichkeit, dass eine Person bewusstlos wird, wenn ihre Schmerzen bei einer Verwundung über der Toleranzschwelle liegen. @@ -798,7 +798,7 @@ Порог боли для потери сознания Soglia Critica di Dolore Seuil d'inconscience par la douleur. - 気絶する痛みのしきい値 + 無意識状態に陥る痛みのしきい値 Próg Nieprzytomności od Bólu Schmerz-Bewusstlosigkeit-Grenze 고통 기절 한계점 diff --git a/addons/medical_engine/stringtable.xml b/addons/medical_engine/stringtable.xml index 3aa0831a28..1765df0d39 100644 --- a/addons/medical_engine/stringtable.xml +++ b/addons/medical_engine/stringtable.xml @@ -20,7 +20,7 @@ Controla si la tripulación recibe daño debido a colisiones en vehículo. Définit si les passagers à bord des véhicules peuvent être blessés en cas d'accident. Kontroluje czy załoga pojazdu otrzyma obrażenia podczas kolizji pojazdu. - 車両が衝突をすると乗員がダメージを受けるかどうかを決定します。 + 車両が衝突をすると乗員がダメージを受けるかどうかを制御します。 Kontrolliert, ob Besatzung eines Fahrzeugs Schaden durch Unfälle erleiden soll Determina se i passeggeri di un veicolo subiranno danni da schianti o incidenti. 控制乘员是否受到车辆碰撞的伤害。 diff --git a/addons/medical_gui/stringtable.xml b/addons/medical_gui/stringtable.xml index 5a41bba671..71388bfb41 100644 --- a/addons/medical_gui/stringtable.xml +++ b/addons/medical_gui/stringtable.xml @@ -198,7 +198,7 @@ Maximum distance from which the Medical Menu can be opened. Maximale Entfernung, um das Sanitätsmenü zu öffnen. - 医療メニューを開いたままにできる最大距離を決定します。 + 医療メニューを開いたままにできる最大距離。 Максимальное расстояние, с которого можно открыть Медицинское меню. Définit la distance (en mètres) à partir de laquelle il n'est plus possible d'activer le menu médical pour traiter un patient. A Distância máxima do paciente para que o Menu Médico possa ser aberto. diff --git a/addons/medical_statemachine/stringtable.xml b/addons/medical_statemachine/stringtable.xml index 1b29b1c553..2b828d506e 100644 --- a/addons/medical_statemachine/stringtable.xml +++ b/addons/medical_statemachine/stringtable.xml @@ -68,7 +68,7 @@ Controls when AI can receive fatal injuries. A fatal injury is caused by significant damage to the head or troso.\nWhen set to "Always", this effectively produces "AI Instant Death" behaviour as AI will immediately die from any fatal injury.\nNOTE: Any mode other than "Always" requires AI Unconsciousness to be enabled. Controla quando a IA pode receber lesões fatais. Uma lesão fatal é causada por um dano significante na cabeça ou tronco.\nQuando definido para "Sempre", isso efetivamente causa a "Morte Instantânea da IA", pois a IA irá imediatamente morrer para qualquer lesão fatal.\nNOTA: Qualquer opção além de "Sempre" requer que Inconsciência de IA esteja ativada. - AIが致命傷を受けた時の挙動を管理できます。頭部や胸部に受ける大きなダメージは致命傷になります。\n"常に"に設定されていると、いかなる致命傷でも"AIの即死"効果が生まれます。\n注: "常に"以外のモードでは"AIの気絶"を有効化させる必要があります。 + AIが致命傷を受けた時の挙動を管理できます。頭部や胸部に受ける大きなダメージは致命傷になります。\n"常に"に設定されていると、いかなる致命傷でも"AIの即死"効果が生まれます。\n注: "常に"以外のモードでは"AIの無意識状態化"を有効化させる必要があります。 控制當AI受致命傷時是否能救起。致命傷是指對頭部或身體造成可觀傷害所造成的。\n當設置為"總是"時,這會使其與"AI 瞬間死亡"同一個效果,在AI受到致命傷時瞬間死亡。\n備註:選了"總是"以外的選項的話必須開啟「AI無意識」的選項。 控制当 AI 受致命伤时是否能救起。致命伤是指对头部或躯干遭受重大伤害。\n当设置为"总是"时,这将有效地产生"AI 即时死亡"行为,因为 AI 将立即死于任何致命伤。\n注意:"总是"以外的任何模式都需要启用 AI 无意识。 Détermine si les unités IA décèdent en cas de blessure mortelle. Une blessure mortelle est définie par des dommages importants à la tête ou au cœur.\nSi réglé sur "Toujours", cela produit effectivement un comportement de "Mort instantanée" car les unités IA mourront immédiatement de toute blessure mortelle.\nNOTE : Tout mode autre que "Toujours" nécessite l'activation de l'option "Inconscience IA". @@ -92,7 +92,7 @@ Inconscience IA AI eszméletlenség Incoscienza IA - AIの気絶 + AIの無意識状態化 인공지능 기절 AI 无意识 AI無意識 @@ -101,7 +101,7 @@ Controls whether AI can go unconscious instead of immediately dying.\nThis setting works together with the "AI Fatal Injuries" setting since, going into cardiac arrest requires that the unit is able to go unconscious.\nHowever, these settings are separated because units can go unconscious from critical vitals resulting from non-fatal injuries.\nIn essence, this means that in order to enable cardiac arrest for AI units, this setting must be enabled. Controla se a IA pode ficar inconsciente ao invés de morrer imediatamente.\nEssa configuração funciona com "Lesões Fatais de IA", pois para uma unidade ter uma parada cardíaca é necessário que a IA possa fica inconsciente.\nContudo, essas configurações são separadas pois unidades podem ficar inconscientes por vitais críticos causados por ferimentos não-fatais.\nEssencialmente, isso significa que para ativar uma parada cardíaca em IA, essa configuração precisa estar ativa. - AIが即死する代わりに気絶するかどうかを決定できます。\nこれは "AIの致命傷" 設定と連動します。これは心停止を起こすにはユニットが気絶する必要がある為です。\nしかしながら、これらの設定はユニットが非致死性の負傷により重体となって気絶できるよう分離されています。\n本質的にはこの設定はAIユニットの心停止を可能にするものであり、有効化されておくべきです。 + AIが即死する代わりに無意識状態化するかどうかを制御します。\nこれは "AIの致命傷" 設定と連動します。何故ならば、ユニットを心停止させるためには無意識状態に陥る必要がある為です。\nしかし、これらの設定は、致命的ではない負傷の経過による重症状態化でユニットが無意識状態に陥ることが出来るようにするため、分割されています。\n要するに、AIユニットの心停止を有効にするには、この設定を有効にする必要があるということです。 控制AI是否能進入無意識狀態而非立刻原地死亡。\n這個選項會與「AI致命傷」的選項聯動,使單位心搏停止的話必須先讓其無意識。\n然而,兩個設定分開之原因是使單位能因從非致命傷的攻擊情況下進入生命危險的狀態。\n簡單來說,你想要讓AI單位有心搏停止可能的話,該選項必須啟用。 控制 AI 是否可以进入昏迷状态而不是立即死亡。\n这个设置与"AI 致命伤"设置一起工作,因为进入心脏骤停需要单位能够昏迷。\n然而,这些设置是分开的,因为单位可能会因非致命伤害导致的关键生命体征而昏迷过去。\n从本质上讲,这意味着为了使 AI 单位的心脏骤停,必须启用此设置。 Définit si les unités IA peuvent perdre connaissance au lieu de mourir immédiatement.\nCe paramètre fonctionne conjointement avec l'option "Décès si blessure mortelle (IA)" car, pour qu'une unité IA subisse un arrêt cardiaque, elle doit également pouvoir perdre connaissance.\nCependant, ces paramètres sont séparés car les unités peuvent s'évanouir suite à des signes vitaux critiques résultant de blessures non mortelles.\nEn résumé, cela signifie que ce paramètre doit absolument être activé pour qu'une unité IA puisse entrer en état d'arrêt cardiaque. @@ -132,7 +132,7 @@ Controls how long it takes to die from cardiac arrest. - どのくらいの時間、心停止すると死亡するかを決定します。 + どのくらいの時間、心停止すると死亡するかを制御します。 Définit le temps qu'il faut pour mourir d'un arrêt cardiaque. Контролирует, сколько времени требуется, чтобы умереть от остановки сердца. Controla o tempo necessário para morrer para uma parada cardíaca. diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml index be421eff36..29774efb3c 100644 --- a/addons/medical_treatment/stringtable.xml +++ b/addons/medical_treatment/stringtable.xml @@ -196,7 +196,7 @@ Controls when hitpoint damage from wounds is healed. - 治療後に負傷箇所にある外傷の状態を決定できます。 + 治療後に負傷箇所にある外傷の状態を制御できます。 Définit à quel moment les blessures sont entièrement soignées. Определяет, когда исцеляется урон от ран. Steuert, wann Trefferpunktschaden von Wunden geheilt wird. @@ -264,7 +264,7 @@ Controls whether medical equipment can be shared between the patient and the medic. - 患者と救護者との間で医療品の共有をするかどうかを決定します。 + 患者と救護者との間で医療品の共有をするかどうかを制御します。 Définit si l'équipement médical du médecin et du patient sont mis en commun, et quel matériel est à utiliser en priorité, le cas échéant. Контролирует, можно ли разделить медикаменты между пациентом и врачом. Controla se um item médico pode ser compartilhado entre médico e paciente. @@ -325,7 +325,7 @@ Time, in seconds, required to administer medication using an autoinjector. Définit le temps nécessaire à l'administration d'une substance auto-injectable (en secondes). - 自動注射器の使用に掛かる時間 (秒) を決定します。 + 自動注射器の使用に掛かる時間。 (秒単位) Tiempo, en segundos, requerido para administrar medicación utilizando un autoinyectador. Время, необходимое для введения медикаментов автоинъектором (в секундах). Czas w sekundach potrzebny do aplikacji medykamentów za pomocą autostrzykawki. @@ -351,7 +351,7 @@ Définit le temps nécessaire à l'application ou au retrait d'un garrot (en secondes). Zeit in Sekunden, die benötigt wird, um ein Tourniquet anzuwenden. Tempo in secondi richiesto per mettere/rimuovere un laccio emostatico. - 止血帯の使用/取り外しに掛かる時間 (秒) を決定します。 + 止血帯の使用/取り外しに掛かる時間。 (秒単位) Tiempo, en segundos, requerido para aplicar/quitar un torniquete. Время, необходимое для наложения/снятия жгута (в секундах). Czas w sekundach potrzebny do założenia/zdjęcia stazy. @@ -375,7 +375,7 @@ Définit le temps nécessaire à la pose d'une perfusion IV (en secondes). Zeit in Sekunden, die benötigt wird, um einen Infusionsbeutel aufzutragen. Tempo in secondi richiesto per applicare una Flebo Endovenosa. - 点滴の投与に掛かる時間 (秒) を決定します。 + 点滴の投与に掛かる時間。 (秒単位) Tiempo, en segundos, requerido para administrar una bolsa de IV. Время, необходимое для применения пакета внутривенного переливания (в секундах). Czas w sekundach potrzebny na aplikację transfuzji IV. @@ -399,7 +399,7 @@ Définit le temps nécessaire à l'application d'une attelle (en secondes). Zeit in Sekunden, die zum Anbringen einer Schiene benötigt wird. Tempo in secondi richiesto per applicare una gessatura. - 添え木の使用に掛かる時間 (秒) を決定します。 + 添え木の使用に掛かる時間。 (秒単位) TIempo, en segundos, requerido para aplicar una férula. Время, необходимое для наложения шины (в секундах). Czas w sekundach potrzebny na aplikację szyny. @@ -423,7 +423,7 @@ Définit le temps nécessaire à la mise en housse d'un corps (en secondes). Zeit in Sekunden, die benötigt wird, um einen Leichensack aufzutragen. Tempo in secondi richiesto per mettere un deceduto in una sacca per corpi. - 遺体袋の使用に掛かる時間 (秒) を決定します。 + 遺体袋の使用に掛かる時間。 (秒単位) Tiempo, en segundos, requerido para poner a un paciente en una bolsa para cuerpos. Время, необходимое для того чтобы упаковать труп в мешок (в секундах). Czas w sekundach potrzebny na spakowanie ciała do worka na ciało. @@ -447,7 +447,7 @@ Durée, en secondes, requise pour creuser une tombe pour un corps. Zeit (in Sekunden), die benötigt wird, um ein Grab für einen Leichnam auszuheben. Tempo in secondi richiesto per seppellire un morto. - 遺体の墓を掘るのに掛かる時間 (秒) を決定します。 + 遺体の墓を掘るのに掛かる時間。 (秒単位) Время в секундах, необходимое для того, чтобы выкопать могилу для тела. @@ -500,7 +500,7 @@ Controls where epinephrine can be used. - アドレナリンが使える場所を決定します。 + アドレナリンが使える場所を制御します。 Définit les lieux où l'usage d'épinéphrine est autorisé. Контролирует, где можно использовать Адреналин. Controla onde Epinefrina pode ser utilizada. @@ -566,7 +566,7 @@ Controls where a PAK can be used. - PAKが使える場所を決定します。 + PAKが使える場所を制御します。 Définit les lieux où l'usage de la trousse sanitaire est autorisé. Контролирует, где можно использовать Аптечку. Controla onde o KPS pode ser utilizado. @@ -598,7 +598,7 @@ Controls whether a PAK should be consumed after use. - PAKの使用後に消費するかどうかを決定します。 + PAKの使用後に消費するかどうかを制御します。 Définit si la trousse sanitaire doit être à usage unique. Контролирует, следует ли израсходовать Аптечку после использования. Controla se o KPS deve ser descartado/consumido após o uso. @@ -724,7 +724,7 @@ Controls where a surgical kit can be used. - 手術キットが使える場所を決定します。 + 手術キットが使える場所を制御します。 Définit les lieux où l'usage de la trousse chirurgicale est autorisé. Контролирует, где можно использовать Хирургический набор Controle onde o Kit Cirúrgico pode ser utilizado. @@ -809,7 +809,7 @@ Time, in seconds, required to stitch a single wound. Définit le temps nécessaire à la suture d'une plaie (en secondes). - 縫合に掛かる時間 (秒) を決定します。 + 縫合に掛かる時間。 (秒単位) Tiempo, en segundos, requerido para suturar una única herida. Время, необходимое для зашивания одной раны (в секундах). Czas w sekundach potrzebny na zaszycie pojedyńczej rany. @@ -851,7 +851,7 @@ Allow Unconscious Body Bag Housse mortuaire - Autoriser patients inconscients - 気絶者を遺体袋に + 無意識者の遺体袋への収容許可 Permitir bolsa para cuerpos inconsciente Разрешить упаковывать пациентов без сознания в мешки для трупов Nieprzytomni w worku na ciało @@ -863,7 +863,7 @@ Enables placing an unconscious patient in a body bag. Active la possibilité de placer des patients inconscients dans les housses mortuaires.\nAttention : le cas échéant cela provoquera la mort du patient. - 無意識状態のプレイヤーを遺体袋へ入れられるかどうかを決定します。 + 無意識状態のプレイヤーを遺体袋へ入れることが出来る様にします。 Permitir colocar a un paciente inconsciente en una bolsa para cuerpos. Разрешает упаковывать пациентов без сознания в мешки для трупов. Zezwalaj na pakowanie nieprzytomnych osób do worka na ciało. @@ -969,7 +969,7 @@ Controls where IV transfusions can be performed. - IV 輸液を行える場所を決定できます。 + IV 輸液を行える場所を制御します。 Controla dónde pueden ser realizadas las transfusiones IV. Définit les lieux où la pose de perfusions est autorisée. Определяет к каким частям тела разрешено применять пакеты внутренного переливания. @@ -997,7 +997,7 @@ Controls whether vanilla medical items are converted to ACE Medical items, removed only, or ignored. Legt fest, ob Standard Medic-Equipment in ACE-Equipment umgewandelt oder entfernt wird - ゲーム標準の医療アイテムをACE医療アイテムへ変換するか、削除するか、そのままにするかを決定します。 + ゲーム標準の医療アイテムをACE医療アイテムへ変換するか、削除するか、そのままにするかを制御します。 Détermine si les objets médicaux vanilla sont convertis en objets médicaux ACE, s'ils sont simplement retirés, ou s'ils sont ignorés. Определяет, что делать с ванильными медикаментами: преобразовать в медикаменты ACE, удалить или проигнорировать. Controla se itens médicos vanilla serão convertidos para itens do ACE, removidos ou ignorados. @@ -1105,7 +1105,7 @@ Controls the lifetime of litter objects, in seconds. -1 is forever. - 廃棄物の寿命を秒で決定できます。-1 にすると恒久的になります。 + 廃棄物の寿命を秒単位で制御します。-1 にすると恒久的になります。 Définit la durée d'affichage des détritus, en secondes. Durée illimitée : -1. Управляет временем жизни объектов мусора в секундах. -1 означает Навсегда. Controla o tempo de vida de objetos de lixo criados em segundos. -1 é para sempre. @@ -1263,7 +1263,7 @@ Time, in seconds, required to perform CPR on a patient. Définit le temps nécessaire à la mise en œuvre d'une RCP (en secondes). Tempo in secondi richiesto per effettuare RCP su un paziente. - 心肺蘇生(CPR)に掛かる時間 (秒) を決定します。 + 心肺蘇生(CPR)に掛かる時間。 (秒単位) Tiempo, en segundos, requerido para realizar RCP en un paciente. Время, необходимое для проведения сердечно-лёгочной реанимации (СЛР) (в секундах). Czas w sekundach jaki jest potrzebny do wykonania CPR na pacjencie. @@ -4957,7 +4957,7 @@ 붕대가 상처를 치료하는 데 얼마나 효과적으로 지속되는지 결정합니다. Défini l'efficacité des bandages à refermer des plaies. Determina quanto i bendaggi sono efficaci nel chiudere le ferite. - 包帯が傷をふさぐのにどれだけ効果的かを決定します。 + 包帯が傷をふさぐのにどれだけ効果的かを定義します。 Определяет, насколько эффективны бинты при закрытии ран. diff --git a/addons/microdagr/stringtable.xml b/addons/microdagr/stringtable.xml index c8e0b16d34..786cb15b95 100644 --- a/addons/microdagr/stringtable.xml +++ b/addons/microdagr/stringtable.xml @@ -447,7 +447,7 @@ Mennyi térképadatot tartalmaz a MicroDAGR Сколько данных должно отображаться на карте MicroDAGR Quanti dati cartografici sono mostrati sulla mappa del MicroDAGR - MicroDAGR で表示する地図情報を決定します + MicroDAGR で表示される地図の情報量 얼마나 많은 데이터를 마이크로DAGR가 보여주는지를 결정합니다 有多少地图数据会显示在微型军用 GPS 接收器 有多少地圖數據會顯示在微型軍用GPS接收器 @@ -519,7 +519,7 @@ Controls how precise the waypointdistance can be displayed Legt die Genauigkeit der Entfernung von Wegpunkten fest Controlla quanto è precisa la distanza indicata dal waypoint - 表示されるウェイポイントの精度を設定します + ウェイポイント距離の表示精度を制御します。 Kontroluje jak precyzyjnie może być wyświetlany dystans PT Управляет точностью отображения расстояний маршрутных точек Controla o quão preciso pode exibir o waypoint de distância @@ -589,7 +589,7 @@ Meghatárroza a MicroDAGR objektumok térképének tartalmát. A kevesebb adat korlátozza a térképnézeti módot az eszközön. Контролирует, сколько данных должно отображаться на карте устройств MicroDAGR. Ограничивает объем отображаемых данных на миникарте. Controlla quanti dati cartografici vengono caricati sui MicroDAGR. Meno dati permetteranno la visualizzazione di meno informazioni sulla minimappa. - アイテム上で表示されるデータ量を決定します。設定を減らすと地図上での情報が少なくなります。 + microDAGRの項目に入力されるデータの量を制御します。データを少なくすると、マップビューが制限され、ミニマップの表示量が少なくなります。 마이크로DAGR에 얼마나 많은 데이터가 들어있는지 정합니다. 적을 수록 지도상에도 비춰지는게 적어집니다. 设定有多少数据会显示在微型军用 GPS 接收器上。这些资料的多寡会反映在迷你地图的显示上。 設定有多少數據會顯示在微型軍用GPS接收器上。這些資料的多寡會反映在迷你地圖的顯示上。 diff --git a/addons/pylons/stringtable.xml b/addons/pylons/stringtable.xml index d431910d34..1021a2fc15 100644 --- a/addons/pylons/stringtable.xml +++ b/addons/pylons/stringtable.xml @@ -289,7 +289,7 @@ The time it takes to replace each pylon (in seconds). - 各パイロンの置き換えに掛かる時間を設定します。(秒) + 各パイロンの置き換えに掛かる時間。 (秒単位) Il tempo che impiega ogni pilone ad essere sostituito (in secondi). 每個派龍架需花多久時間進行整補(單位為秒) 每个挂架需花多久时间进行整装(单位为秒)。 diff --git a/addons/rearm/stringtable.xml b/addons/rearm/stringtable.xml index 157be6eec2..b8dfd37f77 100644 --- a/addons/rearm/stringtable.xml +++ b/addons/rearm/stringtable.xml @@ -698,7 +698,7 @@ Distance maximale à laquelle un véhicule peut être réarmé. Die maximale Distanz, über die ein Fahrzeug Aufmunitioniert werden kann A distância máxima que um veículo pode ser rearmado/municiado. - 車両から再武装できる範囲を決定します。 + 車両から再武装できる最大距離 與載具之最大可整裝距離 车辆可重新整装的最大距离 La distanza massima da cui un veicolo può essere riarmato diff --git a/addons/refuel/stringtable.xml b/addons/refuel/stringtable.xml index 41a8c5254e..909a3f4587 100644 --- a/addons/refuel/stringtable.xml +++ b/addons/refuel/stringtable.xml @@ -578,7 +578,7 @@ Время в секундах, которое занимает взаимодействие со шлангом. Cuanto tiempo en segundos tardan las interacciones de repostado. Durata delle interazioni in secondi. - 燃料補給に掛かる時間 (秒) + 燃料補給に掛かる時間。 (秒単位) Jak długo powinna trwać interakcja tankowania w sekundach. Wie lange Auftank-Interaktionen in Sekunden dauern. Durée des interactions de ravitaillement en secondes. diff --git a/addons/repair/stringtable.xml b/addons/repair/stringtable.xml index 4d2f84eea5..775202ed3a 100644 --- a/addons/repair/stringtable.xml +++ b/addons/repair/stringtable.xml @@ -2145,7 +2145,7 @@ Time in seconds to complete a repair. - 修理完了までの所要時間 + 修理完了までの所要時間 (秒単位) Czas w sekundach do przeprowadzenia naprawy Tempo in secondi richiesto per completare una riparazione. Zeit in Sekunden, um eine Reparatur abzuschließen. @@ -2165,7 +2165,7 @@ Time in seconds to remove or change a wheel. - タイヤの取り外しまたは交換に掛かる時間。 + タイヤの取り外しまたは交換に掛かる時間。 (秒単位) Czas w sekundach do zdjęcia lub zmienienia koła. Tempo in secondi richiesto per rimuovere o sostituire una ruota. Zeit in Sekunden, um ein Rad zu entfernen oder zu wechseln. diff --git a/addons/spectator/stringtable.xml b/addons/spectator/stringtable.xml index 4bd6817591..7f55998d9f 100644 --- a/addons/spectator/stringtable.xml +++ b/addons/spectator/stringtable.xml @@ -224,7 +224,7 @@ Maximum distance the follow camera can be from the target Maximale Distanz in welcher die Kamera dem Ziel folgen kann. Максимальная дистанция от камеры слежения до цели - カメラが目標へ追随できる最大距離を決定できます。 + カメラが目標へ追随できる最大距離 A distância máxima que a câmera de acompanhamento pode estar do alvo. 攝影機能追隨目標的最大距離 摄影机能追随目标的最大距离 diff --git a/addons/trenches/stringtable.xml b/addons/trenches/stringtable.xml index 6e029cb4c0..4b47ee6a14 100644 --- a/addons/trenches/stringtable.xml +++ b/addons/trenches/stringtable.xml @@ -282,7 +282,7 @@ Time, in seconds, required to dig a small trench. Время в секундах, необходимое для рытья малого окопа Définit le temps nécessaire au déploiement des petites tranchées (en secondes). - 小型塹壕の造成が完了するまで掛かる時間 (秒) を設定できます。 + 小型塹壕の造成が完了するまで掛かる時間。 (秒単位) Tiempo, en segundos, requerido para cavar una trinchera pequeña. Czas, w sekundach wymagany do wykopania małego okopu Zeit in Sekunden, um einen kleinen Graben auszuheben. @@ -306,7 +306,7 @@ Time, in seconds, required to remove a small trench. Время в секундах, необходимое для удаления малого окопа Définit le temps nécessaire pour le retrait des petites tranchées (en secondes). - 小型塹壕の撤去が完了するまで掛かる時間 (秒) を設定できます。 + 小型塹壕の撤去が完了するまで掛かる時間。 (秒単位) Tiempo, en segundos, requerido para eliminar una trinchera pequeña. Czas, w sekundach wymagany do usunięcia małego okopu Zeit in Sekunden, um einen kleinen Graben aufzuschütten. @@ -330,7 +330,7 @@ Time, in seconds, required to dig a big trench. Время в секундах, необходимое для рытья большого окопа Définit le temps nécessaire au déploiement des grandes tranchées (en secondes). - 大型塹壕の造成が完了するまで掛かる時間 (秒) を設定できます。 + 大型塹壕の造成が完了するまで掛かる時間。 (秒単位) Tiempo, en segundos, requerido para cavar una trinchera grande Czas, w sekundach wymagany do wykopania dużego okopu Zeit in Sekunden, um einen großen Graben auszuheben. @@ -354,7 +354,7 @@ Time, in seconds, required to remove a big trench. Время в секундах, необходимое для удаления большого окопа Définit le temps nécessaire pour le retrait des grandes tranchées (en secondes). - 大型塹壕の撤去が完了するまで掛かる時間 (秒) を設定できます。 + 大型塹壕の撤去が完了するまで掛かる時間。 (秒単位) Tiempo, en segundos, requerido para eliminar una trinchera grande Czas, w sekundach wymagany do usunięcia dużego okopu Zeit in Sekunden, um einen großen Graben aufzuschütten. diff --git a/addons/vehiclelock/stringtable.xml b/addons/vehiclelock/stringtable.xml index 55600489e8..7cfa58d07a 100644 --- a/addons/vehiclelock/stringtable.xml +++ b/addons/vehiclelock/stringtable.xml @@ -365,7 +365,7 @@ Alapértelmezett idő a zárfeltöréshez (másodpercben). Alapértelmezett: 10 Время для взлома замка отмычкой (в секундах). По умолчанию: 10 Tempo Default richiesto per forzare serrature (in secondi). Predefinito: 10 - Lockpickを使った作業の所要時間の標準設定。(秒) デフォルト: 10 + Lockpickを使った作業の所要時間の標準設定。 (秒単位) デフォルト: 10 해정을 위해 들이는 기본시간입니다(초 단위). 기본설정: 10 开锁时间(秒)。预设:10 開鎖時間(秒)。預設:10 diff --git a/addons/viewdistance/stringtable.xml b/addons/viewdistance/stringtable.xml index 4404d0efe8..eb7ed94838 100644 --- a/addons/viewdistance/stringtable.xml +++ b/addons/viewdistance/stringtable.xml @@ -96,7 +96,7 @@ Korlátozza, mekkora látótávolságot állíthatnak be a kliensek (maximum 10000-ig) Устанавливает предел дальности, насколько клиенты могут увеличить свою дальность видимости (до 10000) Imposta il limite massimo a cui i client possono alzare la propria distanza visiva (massimo 10000) - 各クライアントが設定できる視界距離の上限を設定します。(最大 10000) + 各クライアントが設定できる視界距離の上限 (最大 10000) 클라이언트가 최대 얼마나 멀리 볼 수 있는지 제한을 둡니다 (10000 까지 가능) 设定客户端最高可显示的视距(最高至10000) 設定客戶端最高可顯示的視野距離 (最高至10000) diff --git a/addons/volume/stringtable.xml b/addons/volume/stringtable.xml index ea0eabf4eb..feecb28b10 100644 --- a/addons/volume/stringtable.xml +++ b/addons/volume/stringtable.xml @@ -168,7 +168,7 @@ Time it takes (in seconds) for the sound to fade in/out. Zeit, die es benötigt (in Sekunden), für das Geräusch, ein- bzw. auszublenden. - 音がフェードイン/アウトするまでの時間 (秒) を決定します。 + 音がフェードイン/アウトするまでの時間。 (秒単位) Temps nécessaire (en secondes) aux sons pour être réduits/rétablis. 페이드 인/아웃 되는데 걸리는 시간(초) 设定音量淡出/入时所需的秒数。 diff --git a/addons/weather/stringtable.xml b/addons/weather/stringtable.xml index 55306f4a01..bb815b8d06 100644 --- a/addons/weather/stringtable.xml +++ b/addons/weather/stringtable.xml @@ -130,7 +130,7 @@ Megadja az intervallumot (másodpercben) az időjárás-frissítések között Определяет интервал (в секундах) между обновлениями погоды Definisce l'intervallo (in secondi) tra aggiornamenti del meteo - 天候を更新する間隔を定義します。(秒) + 天候を更新する間隔 (秒) を定義します 기후를 갱신하는 간격을 초 단위로 정합니다. 设定天气更新的时间间隔(秒) 設定天氣更新的時間間隔(秒) From 872d460e6d8053d565eb0767e6df50ea4c9f1595 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Fri, 26 Apr 2024 17:35:30 -0500 Subject: [PATCH 105/132] Tools - Add missing includes for p3ds (#9974) * Tools - Add missing includes for p3ds * Cleanup vn? * Update project.toml * Update tools\.vscode --- .hemtt/project.toml | 2 +- .../a3/data_f/penetration/hard_ground.rvmat | 9 ++ include/a3/ui_f/hpp/defineResincl.inc | 1 + include/a3/weapons_f/acc/data/optics.rvmat | 82 ++++++++++++++++++ .../a3/weapons_f/acc/data/scope_view3_ca.paa | Bin 0 -> 245175 bytes .../a3/weapons_f/acc/data/scope_view_ca.paa | Bin 0 -> 89946 bytes include/a3/weapons_f/data/nightvisiontl.paa | Bin 0 -> 119195 bytes .../reticle/data/optics_bg_dirt_ca.paa | Bin 0 -> 316874 bytes .../OPFOR/vests/items/vn_mine_satchel_02.p3d | 0 .../supply/a2_ammo/macv/vn_us_30cal.p3d | 0 .../supply/a2_ammo/macv/vn_us_can_30.p3d | 0 .../supply/a2_ammo/pavn/vn_pavn_50_can.p3d | 0 .../furniture/vn_us_fort_common_crate_01.p3d | 0 .../mortar_m2/vn_prop_60mm_crate_01.p3d | 0 .../mortar_m29/vn_prop_81mm_crate_02.p3d | 0 .../mortar_m2/vn_shell_60mm_m302_wp_ammo.p3d | 0 .../mortar_m2/vn_shell_60mm_m49a2_he_ammo.p3d | 0 .../mortar_m2/vn_shell_60mm_m83_lume_ammo.p3d | 0 .../mortar_m29/vn_shell_81mm_m374_he_ammo.p3d | 0 .../vn_shell_82mm_d832_wp_ammo.p3d | 0 .../vn_shell_82mm_o832d_he_ammo.p3d | 0 .../vn_shell_82mm_s832s_lume_ammo.p3d | 0 .../tow/vn_static_tow_mag.p3d | 0 .../mines/m112/vn_mine_m112_mag.p3d | 0 .../mines/m14/vn_mine_m14_mag.p3d | 0 .../mines/m15/vn_mine_m15_mag.p3d | 0 .../mines/m16/vn_mine_m16_mag.p3d | 0 .../mines/m16/vn_mine_tripwire_m16_02.p3d | 0 .../mines/m16/vn_mine_tripwire_m16_04.p3d | 0 .../mines/m18/vn_mine_m18.p3d | 0 .../mines/m18/vn_mine_m18_x3.p3d | 0 .../mines/punji/vn_mine_punji_01_mag.p3d | 0 .../mines/punji/vn_mine_punji_02_mag.p3d | 0 .../mines/punji/vn_mine_punji_03_mag.p3d | 0 .../mines/tm57/vn_mine_tm57_mag.p3d | 0 .../tripwire_arty/vn_mine_tripwire_arty.p3d | 0 .../tripwire_f1/vn_mine_tripwire_f1_02.p3d | 0 .../tripwire_f1/vn_mine_tripwire_f1_04.p3d | 0 tools/.vscode/settings.json | 3 +- tools/.vscode/tasks.json | 21 ++++- 40 files changed, 112 insertions(+), 6 deletions(-) create mode 100644 include/a3/data_f/penetration/hard_ground.rvmat create mode 100644 include/a3/weapons_f/acc/data/optics.rvmat create mode 100644 include/a3/weapons_f/acc/data/scope_view3_ca.paa create mode 100644 include/a3/weapons_f/acc/data/scope_view_ca.paa create mode 100644 include/a3/weapons_f/data/nightvisiontl.paa create mode 100644 include/a3/weapons_f/reticle/data/optics_bg_dirt_ca.paa delete mode 100644 include/vn/characters_f_vietnam/OPFOR/vests/items/vn_mine_satchel_02.p3d delete mode 100644 include/vn/objects_f_vietnam/supply/a2_ammo/macv/vn_us_30cal.p3d delete mode 100644 include/vn/objects_f_vietnam/supply/a2_ammo/macv/vn_us_can_30.p3d delete mode 100644 include/vn/objects_f_vietnam/supply/a2_ammo/pavn/vn_pavn_50_can.p3d delete mode 100644 include/vn/objects_f_vietnam/usarmy/furniture/vn_us_fort_common_crate_01.p3d delete mode 100644 include/vn/objects_f_vietnam/usarmy/supply/mortar_m2/vn_prop_60mm_crate_01.p3d delete mode 100644 include/vn/objects_f_vietnam/usarmy/supply/mortar_m29/vn_prop_81mm_crate_02.p3d delete mode 100644 include/vn/static_f_vietnam/mortar_m2/vn_shell_60mm_m302_wp_ammo.p3d delete mode 100644 include/vn/static_f_vietnam/mortar_m2/vn_shell_60mm_m49a2_he_ammo.p3d delete mode 100644 include/vn/static_f_vietnam/mortar_m2/vn_shell_60mm_m83_lume_ammo.p3d delete mode 100644 include/vn/static_f_vietnam/mortar_m29/vn_shell_81mm_m374_he_ammo.p3d delete mode 100644 include/vn/static_f_vietnam/mortar_type53/vn_shell_82mm_d832_wp_ammo.p3d delete mode 100644 include/vn/static_f_vietnam/mortar_type53/vn_shell_82mm_o832d_he_ammo.p3d delete mode 100644 include/vn/static_f_vietnam/mortar_type53/vn_shell_82mm_s832s_lume_ammo.p3d delete mode 100644 include/vn/static_f_vietnam/tow/vn_static_tow_mag.p3d delete mode 100644 include/vn/weapons_f_vietnam/mines/m112/vn_mine_m112_mag.p3d delete mode 100644 include/vn/weapons_f_vietnam/mines/m14/vn_mine_m14_mag.p3d delete mode 100644 include/vn/weapons_f_vietnam/mines/m15/vn_mine_m15_mag.p3d delete mode 100644 include/vn/weapons_f_vietnam/mines/m16/vn_mine_m16_mag.p3d delete mode 100644 include/vn/weapons_f_vietnam/mines/m16/vn_mine_tripwire_m16_02.p3d delete mode 100644 include/vn/weapons_f_vietnam/mines/m16/vn_mine_tripwire_m16_04.p3d delete mode 100644 include/vn/weapons_f_vietnam/mines/m18/vn_mine_m18.p3d delete mode 100644 include/vn/weapons_f_vietnam/mines/m18/vn_mine_m18_x3.p3d delete mode 100644 include/vn/weapons_f_vietnam/mines/punji/vn_mine_punji_01_mag.p3d delete mode 100644 include/vn/weapons_f_vietnam/mines/punji/vn_mine_punji_02_mag.p3d delete mode 100644 include/vn/weapons_f_vietnam/mines/punji/vn_mine_punji_03_mag.p3d delete mode 100644 include/vn/weapons_f_vietnam/mines/tm57/vn_mine_tm57_mag.p3d delete mode 100644 include/vn/weapons_f_vietnam/mines/tripwire_arty/vn_mine_tripwire_arty.p3d delete mode 100644 include/vn/weapons_f_vietnam/mines/tripwire_f1/vn_mine_tripwire_f1_02.p3d delete mode 100644 include/vn/weapons_f_vietnam/mines/tripwire_f1/vn_mine_tripwire_f1_04.p3d diff --git a/.hemtt/project.toml b/.hemtt/project.toml index 206bf9573c..f5ed361e3e 100644 --- a/.hemtt/project.toml +++ b/.hemtt/project.toml @@ -28,7 +28,7 @@ exclude = [ "zeus/functions/fnc_zeusAttributes.sqf", ] -[hemtt.launch] +[hemtt.launch.default] workshop = [ "450814997", # CBA_A3 ] diff --git a/include/a3/data_f/penetration/hard_ground.rvmat b/include/a3/data_f/penetration/hard_ground.rvmat new file mode 100644 index 0000000000..1c4d7f82b0 --- /dev/null +++ b/include/a3/data_f/penetration/hard_ground.rvmat @@ -0,0 +1,9 @@ +surfaceInfo="A3\data_f\Penetration\hard_ground.bisurf"; +ambient[]={0.48699999,0.32800001,0.249,1}; +diffuse[]={0.48699999,0.32800001,0.249,1}; +forcedDiffuse[]={0,0,0,0}; +emmisive[]={0,0,0,1}; +specular[]={0,0,0,1}; +specularPower=1; +PixelShaderID="Normal"; +VertexShaderID="Basic"; diff --git a/include/a3/ui_f/hpp/defineResincl.inc b/include/a3/ui_f/hpp/defineResincl.inc index 2f513642bc..df589bde2d 100644 --- a/include/a3/ui_f/hpp/defineResincl.inc +++ b/include/a3/ui_f/hpp/defineResincl.inc @@ -1380,6 +1380,7 @@ enum #define IDC_OPTIONS_PP_DOF_SLIDER 1317 #define IDC_OPTIONS_PP_DOF_VALUE 1318 #define IDC_OPTIONS_PP_CAUSTICS 1319 +#define IDC_OPTIONS_PP_HAZE 1329 #define IDC_OPTIONS_PP_SHARPEN_SLIDER 1320 #define IDC_OPTIONS_PP_SHARPEN_VALUE 1321 #define IDC_OPTIONS_PP_COLOR_CORRECTIONS 1322 diff --git a/include/a3/weapons_f/acc/data/optics.rvmat b/include/a3/weapons_f/acc/data/optics.rvmat new file mode 100644 index 0000000000..1183f3e16d --- /dev/null +++ b/include/a3/weapons_f/acc/data/optics.rvmat @@ -0,0 +1,82 @@ +class StageTI +{ + texture="a3\data_f\default_ti_ca.paa"; +}; +ambient[]={0,0,0,1}; +diffuse[]={0,0,0,1}; +forcedDiffuse[]={0,0,0,1}; +emmisive[]={0,0,0,1}; +specular[]={1,1,1,1}; +specularPower=500; +PixelShaderID="Super"; +VertexShaderID="Super"; +class Stage1 +{ + texture="a3\weapons_f\acc\data\optics_nohq.paa"; + uvSource="tex1"; + class uvTransform + { + aside[]={1,0,0}; + up[]={0,1,0}; + dir[]={0,0,0}; + pos[]={0,0,0}; + }; +}; +class Stage2 +{ + texture="#(argb,8,8,3)color(0.5,0.5,0.5,0.5,DT)"; + uvSource="tex"; + class uvTransform + { + aside[]={1,0,0}; + up[]={0,1,0}; + dir[]={0,0,0}; + pos[]={0,0,0}; + }; +}; +class Stage3 +{ + texture="#(argb,8,8,3)color(0,0,0,0.0,MC)"; + uvSource="tex"; + class uvTransform + { + aside[]={1,0,0}; + up[]={0,1,0}; + dir[]={0,0,0}; + pos[]={0,0,0}; + }; +}; +class Stage4 +{ + texture="a3\weapons_f\acc\data\optics_as.paa"; + uvSource="tex1"; + class uvTransform + { + aside[]={1,0,0}; + up[]={0,1,0}; + dir[]={0,0,0}; + pos[]={0,0,0}; + }; +}; +class Stage5 +{ + texture="#(argb,8,8,3)color(1,1,1,0.0,SMDI)"; + uvSource="tex1"; + class uvTransform + { + aside[]={1,0,0}; + up[]={0,1,0}; + dir[]={0,0,0}; + pos[]={0,0,0}; + }; +}; +class Stage6 +{ + texture="#(ai,64,64,1)fresnel(0.915,0.38)"; + uvSource="none"; +}; +class Stage7 +{ + texture="a3\data_f\env_land_optic_co.paa"; + uvSource="none"; +}; diff --git a/include/a3/weapons_f/acc/data/scope_view3_ca.paa b/include/a3/weapons_f/acc/data/scope_view3_ca.paa new file mode 100644 index 0000000000000000000000000000000000000000..d7ef93da4991a77c54bb8240794e0069e1fb1fad GIT binary patch literal 245175 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%0AOg`{TqPo*Wjq9p(1I6i9f!?&u)!gapb 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

{H=OuD0> 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 literal 0 HcmV?d00001 diff --git a/include/a3/weapons_f/acc/data/scope_view_ca.paa b/include/a3/weapons_f/acc/data/scope_view_ca.paa new file mode 100644 index 0000000000000000000000000000000000000000..a8dc6b370aaf028749a504622059b1f1306bbb18 GIT binary patch literal 89946 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

!YB~Ub>a5G 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≀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 OHK`(fY~{)bHU9(VabVQ| literal 0 HcmV?d00001 diff --git a/include/a3/weapons_f/data/nightvisiontl.paa b/include/a3/weapons_f/data/nightvisiontl.paa new file mode 100644 index 0000000000000000000000000000000000000000..04bddf87955e74b4dc6b4e498612c7a0e3fa512c GIT binary patch literal 119195 zcmagGd0bTW9zOm#%djZR8Ne7olL7RcSx_s(ZD!6Hv<15^X}2u3DDB?73NDpiud^JW zyjfWznr3KubE&RNYKoS_%mHmtTLutBa6v`T6vRwTo#po&?Eb#rKYp**kJn2W2bejZ z_xe1~`+d+v9(&CG)ab{awzGtgsHmua_56Q|eVqFL2tL&RKW6{Sqw4=D{8Rrw`O!xw zNO&ycUspOsCe5TshJzwmUWyogq{xr}MTXT<#D#zVKOb)p_V4M`eUY0KM;<5V@s`9y zNamlv)o%HJAMUdd>L#HxUm^Ved9pny{_jT{{y(4nzh2<~`q}^M+519ba3PTgm~AAm zhqsbD3yJa_{^Q9p*@*n1*-F^B=uuuW$VRvd{4Y0-F^P0R`5u!arj_~egEtxcOknlE+z@Nd6-iEo#}r|iz|h>PX!cJ-?XYD3`Dk-c%(*ba z40C3M^Q6OO+pqyE1?TXfJ~FcCK&%n=t}KeR2Prmmy>w5}-VpC4Oz@hVQ&1#0hO>9N zN#^pL5N{iK=W2Aug3eC_2VuI%koPLr8*M~cZo=<-zFYCW;3I!@CPuHgwcaQasW^;- zGME1-$S<$p_m5!7AD79_qDmn|evON!Yl_NQ3U7Gpl02roay{>|-262mx!fn%s7p7e z$Cl&kjZ5*Sa)XP$adBNVZzI27Oh|lhJIwOiMNj-=+XbubT4LhP<;8-NT#M^X4OzBh zJ-;TZ`(jd}si>mE;3PZsR$ET4m7K(}sb8BXt~P|IYYBq`H2YT(R{@I z+m-UT$p#;D<;L`WrGl4XZ+3ElN?ep>H2p_cMd4(FUvu@&UrY{m+9+yBv3rdWq?q8i zy2_R)-bF&c#r3CRyY6cdtg*MBeh~`d!}gFU{2sdgt<@6E<9DR|mJVXgjWW z8bu8$zxfGo9ns0sRAy0b5$_=Exhn-VtJ|V@ubsVel58l-p2b@j`tk`mbCx0euS*RH zi3NRyFmTeCV>C|K4n)+79c3R>WMcm2O|(r-HvPrlUT7azR`w?`7$Rj)J;M zLzSz^OYt_k<8)$TY};xc7toq8pF6^ z58b_8u-R^1NsO+%`H8{u@N_0DcnQ;eNq)3)FA|OI>L}f_VtXfVd6?-~B;bM(+6K>R8XEuVu(#C6DfR&1NAR^ZN#(oMBJ(Qx?!$$4+6;HX0M2lC31&XPX(a8_^> zZ&}E6w8}fTBQ>m=_LH7Ri)YRr7N*WO>PH4!?g-Z5KkBU|s>55Wr>D*lY@~T_0<#CIh$&pX zqBxdYVF+86&&Idj{+r%u*^U&S`Igz{eshLCBrQY$Q>8Bw$!M!8d%^7Um%LyO+e!-& zaW?YCOVb$CUizKCmrDy!rQeO?(SAKec&Qch%r5&{ywxa!gV3KWO2Q9B99x`84%CiO z+e>hLZc_OU?bNghVpNh+gqQn%{d7&S;Iag^BqWb77Q*ghyKx1@Ld1H~OJ`Z^DA1?B zPZ(T~E4b{nt$KH9cI@L}>TGlGzT@C*i;ZbJnKWj>>q4aD!s+t(iGIQf{ z&Je7jJ1bfj>=Pnv=o%CM*doCN_a`#r2CNY*C3>$!(dLSsc(tY4K-|4Zsq*so9vnj1 z$a#RH$U}NZ6(#AuABmr1ev@;S&pE|A4(R>Y^OkQFyiVrk6*+G=D#S?U+ONucm8)IiO1o!Z`R{_o$NqX=d9-|ci~1rL&&r!tye@bpru{UxXMQ%K;linGuN5)h z*7Q6zbE;5ftJPbbTh;!4>RYm5IRb|?eSl0*?i<&()%i$KnwpSiS z5ebVk^3}i!hhC7(KKJuhv&;6}2*ihvJUcwjWps&8KWui2PsKAsj4s>cq2{pvuX#Xb zQylnR_j99Au^d{XmAn*hQV_B)k6y>{Ve(3W*-g!Vf;NSn3!l_GEC!!<$lIEH1}(uc$~yoJ)#w~os%&xoC)#+4&caNEweFo}HL+5>_!t}X5% zlckheIdRfL!HRAN0cpHNtwARPtNrl!V~C`RzyhBT)G*htWCRv| zEd-77*WT63scb1z^%v6S3l`8MKYucz|E`w>i^QHiM%Y;yNBOY*^ijRbmE8iX zw$x1PW3Y)0yR$4VL&&)ihI5gsmHLovo8YGQlzH^td_>gdMe8Ubw0IT_8nn{?e%>>5 zx4~vx_>?*9o;%j;x4j~HOippSX3!p^L!$mV6aglR6HEvn^0-0okT|-O&d&kPh&*h| zlubU{i2Ko74dI%+biBk+ojL4!Al2-0=k_uCNp1=OayKS(8d@?W1Ebh%<`i?tH7Frj zD$cE<7MLtFYR|9?T#bzy*$gp z#;9f17)Pw&qUMb=M?}Zd$%vt{!X#5zeD5EKZLi4uXL0gG6akU?vUKINeuAy!>-W}a z_^|lx$62sLSgPF-&yPcz9RDV}O4=W$n!nTg4iD(V2Sw&|ebNvhny|ICDL!M8!E4t? zN~8j_;1}CYrziCHtu>&Cv;>M5sTljxx%!F4i#Vo~&3H<0c>^Jd){)fuq$qgvQ5KptR|C~lbRnT9YR@Baimb9s8N6^5Q@H2cKI2278?0n1u5R7ms2(EFxSJ5)$D zD8(~ox4|XyiF&78DflUUZ({Pwbidy6nANCAX))7dE8)!4XxZeDn3QND?Y^lZ^W-RU z$mk^6L}ur1)!SOuGp#pA)wmK^XP@=F_*jAlodvLsFbSHZ!0ub>m9ez+o*`I8YcPzqok7Q+6x$&0K*7Wk@|{Xx>rt|)*Hs(|GuNQ;F1n~JUtr7TB`jr$>c0)&>m!B z+wbFDQu9yRn$aDrcz5-w#xj#T|4b97cO6`FMhGV)2c{+SKu>L_%9Z%yG(R6sY|V&E z1Z}-^PHz)mzKxo3<-!YT#T6}rQ=4J3u++`Vn_7)7DcG6N8zF6Dt_8Ja^bBS>Z%Izd zAD#Pw;H^$60cj!X$2hOy-h-JzG1-2rz-;r)n96%COxN96EeqE1e>}vJ8^1Pa{@OA#Ayk(cc7H&PEx7lW%0nVc8 z3A^0rbRE$y$v00(}L`vU2U@~ zW_a?D3qIm_O7C?UBJTNP116vN((o*=h|WqqHAoFg=@EUBLJ48U(id4FgvsDO(=;5N zZyyk^el3;y^>Q$R*GB1LxKq(!H5Yt(68a*xoE1 zc+dZd!K}xq|l~bLGP3iHjB?_0iMgqV>UiK1itFFRyDg zip<@seG{0k*BU}{dX~4Ex5Q?4SoOgweb6CTY;4`fX=4IlzK`4= zn;mrXF6zE$vsY%5G=c9LT^}Pm*my>HyzyoTDg_%u$&aqy<1JCz zUqd^07?I6{d$~EUh_`BJ{SjZ>LBU~VX`)mXO({1Zf|tf4EuW|IasUTC2x+K~2oVTJ zMu>wi(1a!v`kX{V5Ehmb$N46cmzj2Lk>3XD5^l*F`Eio_N284wkRer z{egjkH;T>(6zy7XaN3iZzbv{7q!vwOw3XlDD9Xm^opwM&DK%Q}bsKC;?vFLQ<=ljo zK(sg+ou^Bd#v5Ft3i_+)z&&YjlHwP_&X-2z`lRv64hAH>zHmrQMIbkv=j!0cN-7+mv2tLYmoJ}qqo5xXf>91{2$Kr>r`Gj{QYxCcj zG*@s)N%R{DdHC^Q=eqc4(6tgaay?xt;6E@rsbV&v!QRXr<(%9n_Xc(G_qN5^({A4g&NcT@vp*k!C!K$(qlsT z{(b}51ea3Zyzkj!bSWDb>AkYSZ(II~iUyZF4dnKBt3KqOiNieipllNTV>1ILw>VN4 zFonY=E`e#hDfn%Dd&#Dti%QnW1C3rglRyU^E#E7+!m(81GnL!jfUZ$g;*5rcN%v}D zQ*&OyN`rp{$twipYpFE5MrQ0Zhekf0IVWh%Ji{Q`3Ub|JnpV#=SB;U4mS~nCmv`>% zTy5}{G6PpM6`VUHcw?xf)`jy;RZ9a#pBPVT359w|rJ&y%y?(lHucV2S3^u!oQ|U0F zENSZkMu(j)$V#4AYzSKDXCF$QINsn?X6dap1qO#g$xm0{mB3s8RKu2!mzZt#-OJIt zzx&ThVAQ~_Bya@wSPdCM0YZvW(=RI%qHpN zqop#M9unWaN~bA#M8gsFBbAihixoB~>Z0YvTE;m)`+y-BqUEK_H@#qhFBPG2uK@Vg z)gccAhx9u2-VpW1iku=o^3RKB0$RliBHwl@fvE*^9mTeuAOp+i%oVJ@#w@3`6Sb6S zJ{G7vaUQu?)u{j5j%DefC36pd2PP4_CNs5EE%(;YQg-U1Uh94^`FnA9!q+erYQ3db) zCM!~MU%^NH$#--NRi*+xB|;_88523C24zGm`wWg6Dyug-ghiqrOvYEAG&&<$qTrKB zxw!CujG3Oiq%)t!%sA1H-9VpKS7#{Jc-^l;)yI<+H~Q z5{bHyqN28xr?lkXyy$K@wl2%^Ef1`7`uM8Cg$7^g+2**1j6pXlMnzy+A|I~4cs4P4 z{Gv5HF6hdIHeAT)u8tRyyH-~~ME>K-=GOAXI#y<>K2&In{TJY%!0UxdTEth2hWZJ;nN)Zfn-wa zS1o}@n(9^-PPzr^(_FtYp?6U#AF-W2-p|pS_e*D+nRsR}N6D1lEln&QrmCA4&n5>7 zuIfMqIxn0|BBOan3B-n!i3xKB|Mzz~SDAv6CUQMPnKgLLDoB}k^?fApGq zzSg4$RQ(;3f?Unbko(Ti_(y15NARjFG(wMbF~465jBMNnx~A!D_Xy3uUloO*0m;8> z_Bg=6yQuFo1z-4VvpyI$IAlG_@%|NCK?-e5bA#vc=GOq5@{a$k_l25=rz%8KeXQW4 zRRg|{4^zMF(0hXhhmG=<%WoKcw(bAaTdE8`digB)dBI=c@s~!zl4E(e_F>&1hnN*~ z2{zIvIzGBVM=K(e$TS^k4B@G0Dlz+Z5bmvEG^Fq-su8%byHYNC!f16#IAyU#%oLH! zRT69VNl}F`I?Iw(g)0F~f}_}2D(Bkj+hEY|QW=5bec%vjn(UwqI%MdT?UnhkZTNj= zheSPPfU|8SGelh5Kh+-f&dX2)+~Q}8*P);6e;<&DI=TamAVg}@WY*}FHOG$9nX%<5 z<1smGs_QF_9d>&itlQGCu5kR2YJw&$JxlzTWkk;B~W2^_hn&chvLYK@Ep7LwfG0S`O;= z$^%!-5PT&ED-yDyG`XlfOXE$o28)fZm=zel+u#$IOwtES&^5H9ty`AQhV#Z5P!5OP zm+KUJrBUwff@`!+WA^%(csj7ZatEj${o!B2?vHtgsCV3;^5*D(Tj5I_@27iSeSVgQ za2kdQ?42$ItJ!Gk^t>g9KjCc&y=imMn&XgkRDQJ~!R%9PX`o&<%QJ%!R(~61#<`X} z1#kJ?AI@H<_u2)U|Gy>EHH#pjD65l`NIvg%Q?d~+;`-|- zTJu{6S`sE+ce*yud$jJrw@pV6Y&)rUSar1QK!nLryJiS(_o+sm z-nJxy*D%s@PUFk<2=HS+rPU297gFg+ouUsppM!k$!)IVzOw~Jq&w&C(anq}TX{mxM z|Ltd0M8iUe5F+8~N z3Li89OHFB6IJ@3hwV+fzA`&{YKLbFY#ziSK)3USZ#Oj#{^eC#LaM3P9Sf2uAi3KwAP#9la^ERD@W5ypJxRDAS&v|*a=>R4Ae35=e;`Rls=Krd{lJ2?0BjQ|>R6~PVExH;`77JVP(-@ zP>5H|Q9+Q4Y(rbbT zl^Hzrh?5N$0;>&SNL2CJ2~c&Zwo|9#`|rZC1=65z;n-mq;$ZrHA!Xu%xfmW}*m7xo z>-a^2qf}d6(`tm861kNkC3JlFnkkfiFYAgOxjnus3yS)PZv(fLcX;VwH;IBuY5n7J zmeqY-r8k`&^3oFI!O^Ida*gqV{Jx>1dtFrtfT zI_7zNn0jSY2Q15r}EK_=zuP{&Zmzk9jg{0kJz8-Olnoi zq#%{$lRp{=Zb>sIj%^N<&leniz|;%fco&H<=bHOYoK&o1WQIzTdbM*D!(47_gMyx_ zJW5@?*tc+c+Hu~IPIvZeowQi+F_G)2pjUO2tjV@XX`UW%`np`xEubX;W+X1uHz=~j#R+x zozw{r?>NLX)en4e<#?lC-V|792$rH_uoDxyz_CEu_+xG2I=CP`eRF!(8(`_jN7C(vaWuR`GYig#n4)@6S3qQV0!{(@HGAs2Wq# zvCP~Ne>tae&AO(_?XxkP66+4@e-4r_0B!?X$!5g2zFp(_9R1F#u!}brtX**7P^x67 zJ<|e09R$QzC9})_bPoJBLaS=Pu1Mc#y`vNnX`?uL%26Za%P4B1wdK9@24`^-HCfV; za%m)vQcV$B7o$8vGnGY$JqAZDy}t07h3hcYVdLq(t&`?f@P0>T^m>k!DQbjvT`Qzq zJM~NsxSvg$Cz{>T+tZO)GWFS_b%jRE<;xKolxFA8a~{k~@4cM&rv5FtFWe!s$7=gE z7M*J3t9-}xqExYKJ?{mWKDKUNG3Lkl&n38 zQ$^nEV6WUUJTrbB8uY-f4vhC40D+iC$uYY&3N~Ncsp$+Fl*pcGQa-QU_(FeaINRJn zVjK2MMN9V0c&))FZ|=q`5o%EH_3%lJ{fWNt{@)+Qr!tUl zY27>(6uR~=n@*{q;qYha1W3?bTdifpQ`}_Wz4}_FGQMSX5gs zAkMcaSzafosgst4?K57`(ZoUNs%~R=N70S-P0gDyYxvi(pY==rk^Wh3gsS_NB&0Tb zF`_y08HQzF{~OHu1q?H@ocTj|SHANptt5ea6`E9-kl!aTT*oMc9?)Ai>ZS@J*#uhI z->_}2QFI>|`8p!oMzutlpXj;j<@f5=^Xs`epk)lw=i|af%dps#!g9>|d6U0h3wk;* z<^mKx0cwanMPOKTUMwHEFQt1QrHUwS{cm-yEeB@+6Pf&3`p}ft6^(BZ?kl^rO5|yT!-EtHr?E2@P_H;K+JB8HEqnP#-{xZ zMOfTH*XJHNfwJeLkJU>g#}GPDuRT~Ld03%J^rw|N&`vOO`SDY=*@u_zM@YW-w%P5T zXO}VV30F@sX{)UOel#^a5un>A-XEhSG@>Uzp3)K^0XxmGL#WEVMfIt~*5izo7I&to zqUsZ%6B>rJ1d58*Y=f%8#?9EcT#k~$RGLO_tzM*~O63up%5H7snE~i0qvv7`%)$h{5-ayu3rkgwQI(ykwP$wmZNH4 zs=`zgZKKM!N$|POL2&j$gY*M@1^%l-0NJN$sxN$^d2i=%!7+eVqUJPJs$>#z&OYwR z;lsWyLx>YGTGQLi9MedNje%@#K`B#|3s47-`s ztdKO6$4O!--GMtn_*m}_=fzFs7<<)}p39%;2xopt2%M17xbPB&Y2H3``@BVw3Vv03 zR!{-*akKFc%-FcAE+&;Z_$0rXV{57{e@9w8R|>M@{_phYfDk5!R%csEc$@2&N^E>} zA>&J!qvb;iHm%~lVYG_Nfuf%pVaL&Iy&+IJYt0@6Z1b`EyT?Hou$P|E+oS|cUO@-b z?4<*QpgpaOZe6e#ZMzgJY5lqvxPg*I`tFqrt&pel(+}pyf4sVS_MTaZ4f%}(nRH@w*KMggw)SsWB5Bd!*<>8kA)t+|2=&!BAr|NR};H%pB z=t}Id)uqV?DfEy*^Yr4ECqe4j$|t?-%^;wo`qw zyb4as{Cch}P@X3Md3JU5Elj|VmC?64H*00PicX-*4WZgo(3i7)r#-5%(;a`VXzW4c zijfh4zi*>{^FCPzIe`$9WiBf0)uwrb1&Hn zqfdJi7I<(P!oKe#u)Mx1e87nM6-N^Tv<6wx!uTf|x6d9WgbY)AEZ%+3;xtWSSI;q6 z?qfA1_eHGI@eT*W(d~t=Vh0Mf_x_l^g*t|o`i_BDADoUin2cEm`PZjrA6fCW>g3(E zbFfq;(MQlCKS7--)0WzI5_Q(hG}KS^#1-f$Whr~2epBIuVX3JKlP;A}V;|_F%BJT} zrUYWIq9Dndi|0~WWBCvMiGtMGk=#ldu!)^EnjXJ+4dh8CU7mUKE2j1(!5wNj z)}*&M1&g0;te496&R&VY|Dh7q1=dcoeX;EVuI}gkgngG2T<-7I=tE&3sQksBn?tr| zbA95VscOTur*I~t!%gdBbk;jYt3O^pzbu&_o`NDzWg0%(!?DDrUMb=l#=a*~bF5qg zG?ZgkMGNAG#@(+wY4L5|?Z}F4PnSkR+)1;;p?Nc4HbOY7hmDF_ph;j`$3Xo6L8=!aQ^X2@X7QX zj36e%)^z_EUDX|f)gK$3WV)%oTt1Yk(Fa~H+KuqG^_0F@5~L0ZB8Lvj6zaFBvACe( zH9^!3=uR^DtL~3!H~EzNZ0hSin_H!n!mR)NB-bhLH+u=aD=_DwJPeRCW7~~xIipeo zXttDXsGDB9qX-k08n*e^!1)yg>r^6n=JiP5nY*1^5=JfV!77oP$qMx`Hy30`z0f0)UA1bBYSm8)IU1JvEjZz$d6$mizKiR> z>O;Oy1&as?gxlJ<9h}cXx1S2URg1diIMalZ*L*CkbkxQPh*bKO1C_Ju@PKNnEIKNL z#k!v-6E1EDXw}!+5+xnx{XWMlqFB%S7;^2?rTFckg|MkbJE%&WVnXKhrlhY8k$Cu1{<1Am~2y)r(MopmCJk?b-~r36)u^RMThL=g?a+ z$+MO}S9OUdDE3vX{beT`{*4>>?sJ0yJD6LS10!!@fO(hhY~!{!z}haR<8)wu?WZcO zJ=?@>ZBWOdu;6}-OB`-}B>Yug5lT`>D`!(AQ=;*9SuXcVAysy1zNsy!Se^S!LYVq~ zjoIn`SFX!Fr3^a{59L;g)?B~XH+l-5;;dQ%I!0^DY)f+=SAC7UwY;K@khGe7^fyZw z@S|hi%4?97{TWzaPz-L_qP?JF?KQ?+n>7AkaM6Ob__Vg#?2~@klO#h7RjS##AGsm1 zpK!1pl~Eag0&pNdyGl8#wxtvG9~X}I-{zrVpK9zou~*kB9nBnESD1j2CKQ^k?gbEX z4r%2QsxV>jTCAVk?dq2#*;Rop@&_2(dX@g~ReFS(PkXo}W=kRy`CZwxJp<74_OCjV z!@_j7DgUi~Nrh)jM{B@x^Rj@ULhFgZ+q*Wt0MXp0vtpbS1V=>oLhT|*GB;s)o3_rI zrnq%5Fp2>k$A6Obm1=p$HNBO5FtOo(AVH)aA1&U`G{mQ=XB?fPVIn&rDfOe04l(cI5RW++GpWi%j z0k}t5$+e5?r={WC6cg(1*F7G_tky*C&=axrhrwKI@PGH2U^hc^Gwi;*X;woVX!G4G zIup>qzW^n;+&kwHOH{|1K#b8*r7d&y+Vv^+Ut5kP$)Xz5l8?%5e(fb_(^)ou?o<@J zU$F35CDv$ZU(-n5K{4NbBFCWTyZm1+)I%SqX>qcQQ|HZmz~ScT>XLq0RpReP)P*U( zgm1V(A5dGD=HA1#gd{rLs-T!g$~abW0fK$m4OrWM^uhbsejHm?V$)tgfgCy$UU_4( zR*`gczU17DD!E26t7IapO5ubm1t0av3`mU zLD7^w8LJB;Ucoy|QKSEh#p)Kb{Qbt~srhU8uruJ(R@=6qclkAS0c8kbJTF3S6(v&O z!R0fi#@CD1EEFu6RA+ZFNEUe$^=Wfk0#H*;^@Y<(3XLLAid!Bw7fzbLb`{n`eoq{n zTNi^#d+1tP%^MvaWOH`ar#&kmZ_3q~xad-t^Dbe3kYoGHRa957V2#o1z^s|{Zd8$x z8&x*&?g>1U!f0mP@*9_tR;VDlQO(=xd&Ijs&U*T*A_Qf!VgpO^)o~iyQTIb)wyX%) zE2V$hs>EyurMA-hN(28zmnxN}{u^2UkB9X^2zBI<`^@f|%otP;H!^&Kf1uMS`kP8~ z)p|q7-(_p23N>KCA}AL5n%?xS?$>TtbO_#zWV^jdu=EA0A36iwW$GI!h&x?qIn`oLz-BtCS1Z3dOk@{ay#gr=yYJL7{?dVc;6fX~uWtXpV7Q<$^Oo4XT6 zV7z(p%=Gv?9aUrRypTqf4N}R)t;@-n99oba`PeLMUxlNoy?TjMf~zA7u-mGfg2Ajn zK(aBg;UTnTOeVN@8vcus0ek7Z9ChtO)O-sjh;pymmqgy-q)#<+y&DZ)l}eG=x;^7? zK&QUSdsIi;t7^5SmX^v?N?(^YIwVUBZ@C=~!xDH-;=V)j6?< z%*S=vUN>N(E=sAP-+ys)A(|>SVD^-4Zq+e0)Mr2DdKLP6S|VzUmZ;62Ba(-A(Z_1F z2g$hOSWU~Mw{VjoZDMN=gPeJj+>klgb0;b$_8QcO_xUfLO|!o-SAdXzvD1;3N|)Zf z5^tJ-`6Kk2!)Mz6lF**{O7MRPgFdg)D-K@D?-F|xlKu{b{<4> zLoAhJYH=7Rd*(Pds&4BGYJ)h Om98xY!mg?9tXPs1Pa=L#pV?6tH9meID-qa`u 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%0DTb~;Z4lM{WkiP(N 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%0DQf< z{O`I~%D#ROB6}IyX!loGome|EG%`3gde~Ouec^75nHC|0QU!eD0%cLh!E}}zh{&NJ zLeCWnbczeVZ>Q zAhYX-#I1y0gj{WvwS!i80akieK$6potgjS+X)SAMQh*si)S`Z^uVPUuhj?}>42>Z` ziMO80qd#9OKUFHdbHH|hg1DR_6^ztL z=h3g^7$S|488^0nGAG}1LV7`TDEuKjY|@(fIT>${?LdXLfcwCTTz4#4E(zar#9RxiD*uh z!5P1S=j0sJLrb-66v#)AqM-*njL;_`m$pO;ND+u*QDvnOQlNU>^Nkx9U?9C0x)ebc zWn`?3a9x}aM2R4-f>>f}P#ggs_m90Q9P`$H`d}?qT{R?s!*yk3bl~g+!tIOtJurpw zpuh9(`E3Fca8xs-p2%iUwp|FZtr1uME(iH!o5;5DDGGt^95PziX}}SF;L#Ew;!Z<8 z#E&lI(6_ydgt7s4DYzF%f4pEJ`CQl;Ak(fKz$J4iX!uq6h?|Y_^06VI<|Vu)u)lxr zX4Qn=B7p8Z3;CbkmY87`BRPgke4s-IMYeHD)~g=ABne8Hy#4rO!ti$yKp#A!@Di-u z$I&Lsu(H+>T=EKT^{yo@1u9td6P2t&-Rk>SC|QK2rS;8Avt)I)d4O>-1#YtRe{RYZyWZ@q;!9pYo8qVVyp&<3^?iKFJgBs8 z4#k(7(ENHGXs4xcnNMY*CmGaXeJwJ~l=;+zNGUnXK!ssmQT%3b{t^vTlK=z*B(zj&;DdyTA@XAy2& zOMN$iL0$dZjtTqYL7h;2KRG#oAgAZ16$olsqr(FMKVgT-hx#L5O3fHpqalKe^tQCh z-U%*)@G?WI8yB_tXw`7MNdzFPy~9JJM%eVayVpHz^f$rzanSgZUk;&}iW1GYM=??c zk5R<)7=PzoAx^mt#@6JGO`E$3uv|_u3{PO86l$XA5Jj;8;CFqJXWeOB0%@}*lEKqMdK2_-nrumX=XnW-OLYx=pIFZ>2Y?0^0CAM9JTLN?) zsCa;N{HMlldK8d_MBQQ)^RNq+FCV?QA3GBRcNGFN9yBtW4-+G^deBFJ_g4))XGc`B zZL9f#mGrIg4ssh{yiN5^ILk{^u0H|sCHEkC`>E-Cu6s}hem5E{7=12YTCTb7F2`goiSC2q1;T(En;$qJE_B`3cAmLQN2KGqbCBdQ58%$t&PHye~#jw&`gM zwHwrtnihD%t*8L}o^m)-L~^E}BCN*O)a&1y%B2oRk<0yp*F47{~^Bju6BOtX}r0ItA8$9$mgv>fPUyH{{ni$_dB?xMy z@?PPrR0_j&{fXe3-?9yk$pGlO35vWpW5xk4$rGvgT3Bm@ZnnNCjt1FK7ps%_Iu;~2 z{>HF}&@V?jOH_eugjleRqmjxylQKI4UPB=ZmYt#~RQR0)Jt*Yz~+uU-kcMF8V(xhBt%i_E`wp`#i&+&Q8L3yf%%%N456@S(x-2hwhCZofBz6pdJpG@*&W_^ zSY_zSuMB7l<>+QJdcF@ z7{G-*JuB~68X-&j8nFe$Rl}tlUgR3r$*7~fV4E=?-nbRXoPS?xL$-u0^T6M>DoA^H zeN0gr9=->o8Lw3zS||eh`Iwj;rt}l*uk0C=0-3bg>#B3c$VW||nq{qsK=!w+!IA$7 zj(^|(5D=>_ch~Vyw+nl|r-p*VOj}h@z(vL%Ik)KXZeSTES!x`O&|2GL{68hC^%?nq zB^5-bOa+T?O%iIfRbPW6r_#^9cs!!&D~kWYRKc#-&;4tmiX|JVDH|!qv@*)hyHf>{ zOQ=&uXgrRDp3th!jmhx_G=z*zv)U{XKOi(Z^y$^!eq&_c#h@M`Lk4T-&J~u-gFRY) zJEvcfk-q_cFi8zB??{bawoGPmailb0AM9m!F)@85D3~+L4OfiOuJW@pNQLHi{xb^5 zg8L-lWtUQwCP@b778vzdm&cjUh3$$nMSQtGwDY4^Hj{AiK|1Y|@{Eye>!HYZV$CaL zf9uR~41?i~T{19H#nAmmVmauI+3wBjxSnBEP^M7&8ZsW>%A&b)Au4xrBY0TgqM@`K zE;75uA+Wb`ff{zG9@nW(XQ&GUWbn7)`@frir-Leb83mIRZ}TqO#FOt4xfDaJbt&OO zqRMar2sN2!Aj`nHH>(74GxWdUmRKfo*xl*C59UKU-pdJ`Lx~11PA? zv}bAae0ii|T1JKu&F-zqJK)64EU0u6>SLi)i~8&jfZmB_-LZEy#&Xc*+g1P+3tE{M zzTb#B-+y|od`w!FA7MXa!i3+8KerNYmFm@jLg_zn*6;Ei5gTIr)LLc}SW7!Rjg=;) zh(^>=xNbIByMAhG&9GYy?&iPBGHgw;sL09-5}iouj~M#xJo#u;{SC`>pt8f=XSN!_ zwLeEt-&-YyC_orbPHplr zWr|`>Uk&I78^PPpuH2F-W+HA%!y_g#`NC0W9Qbw6+#H7jCY_YFkSAU!h!YeA9HOAQ zhRtiPv(iVjeDYQX{pq_w0apTu%~2qMqKvpV{ZDB>*|@Vj2`uETCqHZdDS*R@h7N#w z1$Mr$#(Lw$Sh&zlR5ciB^xwqSjf(G*Vh};YN&GUcUX}hq54^q! zE&B(p?Q{)i?D?>F1Q^$( zsJ$b=B%%$ADq{a#uGm1&oM2Bk5t}SDpRU^U{@a^?QYhlm=C4Ua>}X*n1u*TWk&mxo zTM;qmhxoeffF=eU7}jBegwd1s@qE%sXzTgtf69o_zG`601?Z#9?l%tJBqjB=n$O$| zX(qIC{{m+;Iy!Iy$MT;Wb`a2l2Fr2kq*6kpSC+rNk<&`fClt78()zr`(N(s zFr0J(KJ^}9A9|w@B1MII9DB3iMRd;#;H^Ds2;RD1FP4*5s~4yutA;)@*GR?RR+(hHZ4jGKAqiV}02DAfE3(H)+z2B9+z z`-axyk`5?q?tS?UDV>buRZI?ugZ?tU^BN*y7|Y zlreWwqU`&q8aRO`LJJ=q&K7cY6VcJiIhhP(LGecPFaSli0Am&md0(XXCY#A&zT^>9 z!S?ju4JzOf?SWw?t?h1!!&;8Y`(`CXLHcr>y4iHEKU4P3RVAmWf8p{Hi0%Et z$sEARZF-*0Ge%7|7i9X*RW;WR#R~P8$i}zoKxSo~P@YYDgwq;s>?Pjz0KWa?5_K1c zw%jJjbAnoyJfu7jfI+hldcr;2+J-~f5o2M64p-x3+X?Lo?L#m|-UUD4zP?v751fMf zeCWL~?Us+7b0`SFND`(Ec`PoJk>z`r1{{DczcaqU zQ}`lZZ3;%Xi1&7z&ECXleseHieiKGi);B01X6}1p=MTOl6b{E%*ZR6E4j@&H`KClmCq&XYwiI0gE;!e%8nt zLHxna4v};j#EuX|J|LPiMTjnApDjRKGYQ;|90fGPIz>^`g6BoQcI%9>wJ zG&RzHc}Gul5V;&gm9IZ+6=1&J8-8<6ili;*%P&!VrtA&#GyfT9173#8Eg$^Mm|NAR zF`ajS&i0*a>r*cC#@uc1f?cJj(W=aK{yfIC*qXQi98|se$ zIcl4iQDKZRyE4T8omCe7^N(gQpZXkd9fR<7Vu-y_HWdjQQVkUY?s_W^}?+ zmBo4hj`}F&P>303bou4T2AfzTC%~Vd58DdPOnJLgb){e;#5_aZV4ZT&oa}!Q0dme< z2)onjlqQgq5$9C}%|?tck5b!6Vr0%R$u{W2iOF7n5UvZ^+sEtHz>Ki1iUm)k2}o|f zx`&OG0D0kp{L;&f0?TUS>k1q{Qxhg<7neo1#S@(kKG1|l#ek*<^7 z13=LZ;0E&`d{N`(aH7htPACD>p#x+)?y>&}mnCFF*_SJT#(p<9dO66YMdK?BbBxix z2!T+@QdH8N>_|N1koCC&V9ygF`9m^4V@wP;o#t|Np6HHMYpYnOa8pxsCny9M_gYja^6!OMDV=Nq5 zmDSAqaP)@riZ+l91s*dz3!gci_p$1YAFn8h8$DYiI;K{ zEPA!}WBJ*}PhYUZxC!YUAm~AFfUGGGMD<*sIcx=@#niq3w^?IlosW4BLZ9Ckr?Qxj()BjdF(`JRFYDLANRtcKN(|- zz9xwzV}h*L1&kmzR@=yYRFQ4#at8_}+4H=VZnHW-3yiJUHvU&6s0WJe1FR@m?$f&& z(^`}c)g40pPWW>B8}zD9>}s8Kluef@*`Bh==?)B`%V7#L@^y6GDHCfK5hxm#CR9W; za^a@G#*jJhpfy_CAZHUUd!uSg zk@n3Ko}Q#U8q?L9e;Tz zI6~lg!!aofWT8D4o=7%u<)Mh{wa;1{Sv1~s?FyiOs-D<3X6AZlx#z}n!tLfnO(b7l zL!#{3{(^URN1U+`fTN%!4wjfE@cvvcBQxwB0}|k$w5uN-HY;Kf-M}nkT5{Ll4V#yM zqvTaph69Vjzmd3R^(7fr)vIA%fhpbZqw5!ONyeZ4yN5`YqArAizy67YkUsNo(>fafSMPQE`PH0wju!yO3Ki2kl6dJi5sBUtp3-e zjg)cN@z?9kZgO=&==tP*`#FqwT6ZaTR7TJ2H1J8|;G0q8x6!@;L0}8#6KuxPkG9Ss zglo$FFMQny1smNWo6Y(m-G`o2^=&mmcTaD)JFZn_l^I_NmaJ24t+Op?0EB?#W!M|h z8@-ksyTh%0fv}y0ntq7$%Y5z)ZfzCA%{2g|j(R?yY}2ARDFl*U9830Y`poPA%D>;T zuOS@lcJse`g1PCJLFy=#f;9j4_F6)uGHy5=m!#saroUaomD~aGLx}{RX(w5+UCtIs zJy3^Rs!4pdBI&OOjE~YbG)eqvfq*%)YVfmpW-NKr8sI3VV3R5?pOQ@Fl2*|>)iN`d z^FsQsKmesjo=zBTai3 z+6jopV4vhRr*;t`U4eFely`E`oN=$L<}gH>bhLZlQ#PMH+U2rjstb_CzV!23&fs>I z{FRV;92BJo+Folcm`g@op1d^`X%u{qvN_|xP~=@oyw+MIbwytn{T*b&x~ndGGUx$B zbRS1w7x35_zfU#KJ}ol1_4GC2l4Ll1iKw@u8GLxhgXCf^=KbzUp6Lm&L!`ex*3Dx0 z#znrNaqk2IU3xoEkFE7NanNaih`pKr1D9NZ_r9(4e%#1&|DpxAhq7P$S!!C`^s8|J_u+JH8C zbjD&;*T5uu+-m{ZZ{Zosv9(Rjx7b!TGT2)?ZG>>m8L3C&aY+bt`jSzkO1ZD7NV*<+ zdePltySO^G4aP~WU)m4~Cu?hM8y&tS1lG3V86)r1cDex?BSP00>>=4?G8WmCq~ za+YAT?26`B9F1o)&iWoMu`*V5RoGh!r3>LRGv*gZ$>&2&Ky(5-N7@O6N!BiwR3m27 zDd(o70@+UWflhF2GLzsGYyKrYpK64a5SKC`e{(3|sI5?Q5SoAC#v*qWUXc$0@nd$# z3TtmG8O&e+<-8TtchWU~gj-`bx))eEFwXHcHW~oFDhc%8eQ*tU((~-+Oftqu3-5TfS@Z6cz6a|nDCBWP@o|uB^=7n% z4_yvDLJKY{Rpqa2@gEy{kGr|Jemw7vzz^3oKwgF^F%E=bN@xTCxKu!g7-rG`5Qc=X z)R!QP7mQXGvP5I3>eeEMNNyfk=ZYDJ2xt-!Mp;?PAiRj$Uq-1)r z6={hgsR$|5c74T=w{jDIIibzXuc+k9J0WW?pA=7(`^m!nz_6B4pGE@WJpkq!Rkr}I z%TZlCNg+UnKdY4tT88nIQxw7_7?%RcU=Vy@#&Nq@%TzI4?G?bsz4gMwl`O9AGSU*W zE(lC?0hz#G0QeI@VSav0s?GI_(GQ|z6R--E&?OUIN|Z&4Ud50*0|G&5NKP$?XyST& z%FL%oaa}eD4r_Woqsq|9q*Ex_NJ`m;i(-8iT~>)w%er;h8)+)?3C0|p1e5KWmM;J- zT2h{H(Hxk1ku_Ic1ypoM-qt*XNtInXdK-+>PN9A6rCKH}q(T;vGb*!ad8GuVG-&gW z8#UmTY=N5cbxEw%l6zriRi5ghN}S{l&+MP(lISlZYh_@u`Uez%H*H%DT3q`P(n_#` z)$xK%yb6`n^!%})nYuq83O*YH_3X(clA|$_ewraz%9R{Lr?E(GbYo%dLhq(AiNEa+ zc?FBMwCy9?id(yNfA1BcrX3)c^16sCG@62 zp;R%zcB243b9c?pKaG^Z)rGIxF>4BME!bQpGMw)mtqw4QvS#O&*a7rV#YGT~7)u^6*zsGe--YHC6b-Oo z5^0gZYBNW26_&M? z*!>Z3Zba_2*DMS9G+ehEUNYWbxBVk{cC;gp9vWeZ-Qq;Mql#oiZJ%Mn*mtQ|oV;J` z`nt0m2#Va!)kS@0$eK$dONIJO=;yd0f+T=rdjdgmTM6erx=7!!P5K=Pe7SE>z^V-o zO{8( z1{RrO-gPI^DO+XTeZBdJkb-XS-MtZPwc>8s{}e|&!Jhqb2cNTQGPVLkYx-@1xK zJ~MW@`}J16jP3>jrAiQV>QQbK5CuX=L#v^mgL$qzYnsoM^a2*`<{V3E|&N+YY>2$>4v8i60VCP!-*vnu7_)9UO*fL z30>qdUE*U72>{%`rls*9vrSxe`v({~KvS*w=gb9gMB%J1T;~e4-*}n7f^fNp3ibyL zkEac3M-HE{lUg7v*X;5JhQai4QvwLXv9~jTsQ4HJ1wOs8MfLq-?>U_G7i3CLPm*zK zGcv#Z5^9IH-iQ`@-4$2+4}%1(59FzqKn_Z}g>*%zDlug3;Y|*&h|%G}7QXx`jLv-T z`E`|QEp`%2>aC&wrrn$s#)U-#g?VFw!zUM1>2k1ux>dzg0b?iGj@;p64oH~LfSQNE zpIiE0G{y+yh5DI7{RwiKx_cF2a7yY1vyFTxW8Fg@3aAfgPj6)l3(cH=G{x(Xbggi& zA9aX>&K`f6=D;QQbPFXNK%+|DQ2a-%Y9urX;C_6dOyk-_OMvEPBs=kS-=KtFjlTib zX&y?d9PQyDr&c80YIcn^+S@f2or+rfAgeAE^V~mxu4WwM3`TZd+yqsQ8bl(^f-~ns zrp9p=^5!wcCTGp*oPYkcAUX1N)zG`U1uszJT5;88wNQTwJ_vY-d8d?f^RDsb z@zBSkXQrDG^CU+RSg5%IPi)-2rXojKpswJPv!)xZ7PosTd;mlfP!p)vQ-8h~ja>od zi8LkrU5Bn*JeeMtL>UJL!{p#y!Z5`Qw7=*oj5Br|8%b&&=G9!*gZ*$LfFBnb0K`6fb3VsguSL)&F}5%A9DJw()uN z2t%MtMEz7zdog-R`#950569eB=Z9rR=pXaZ@1`Kg9lOf++`h9ZRXBZ$YK7X-QK<1J zJ2>+QfoD}DkYmeTpuc(dDO4`}ICZ1~2e`bgXYP8}3nZRMhqh=ln;z-gV0E6*ze8d_ zP8?*@^_6d(>5Bi6Q-_Ka%#&nHz14xxYjOAI(aed^gS4pgR>8RB(Pq1<8d%y&P5-U*Di0(=#&)Q5uVv zx9lt-yUU0d;qndeP2cm;W^8cGjcT=a99rTyHKqJGP>dZ0E#ajgZ~=$O!I!kTJTlge$C-Cx{& zi?s(vmMnIvDaYdu7l&Wf`OxKt_fN`AGEIrr=yY zcy;ZDYG+f<<2oewk1lBg+I%H4jE99-Hw}0Tfg5lrEYq3Ce$rF2@)QJq_;~g^l#9Xe zBVJe-_%bN4GahG#1!M${r|=KlZ3kisc=s%4|D&jt9A^yW;OsB%F2PFMQB#OMw$;y+ zJ$ugK$+AZx{kj{Cg4y*nmRshrPBd~fuH)aoC}!+U-DOAL#eqPMyrO|b3s!I$hX~vc zu(=hWPiMwSe!A^HnYp5mf)1`KVOjaP{9EI2wbSN+Nz&bt5#+x>TEjt5B&&2$yVN;g# z`oXD>X5iX$NPqGWpB>(pPMif%CtT{(hoGf0HS_%Sly)AR6%`3+oaf=Y;f}mpYd|4d zytS*sjNOts!7^2yXkouJ_8rm*Gx{E4V7$?T#%q|!Cm%+#m0^e*( z>eeD|6RP`wnRCTW--pWDu57M$KaDve(=F`ODU&YfxRi5{keM~^kd^1$dctiRNR}-v z@u?s+Q!0AO2#<ZvBNlWMFT%cgXgri@l%vH=*qj#8(UICiCR)x!Ms%etsdF zflt}q0@gb}YEWKUtEFTr)zxg#LS=)Ymv9q9UTr}OGlZVi!(91wuBSGUIkDL^(=byY z83O>~j^4+XDr}LVyerWxqmv-`)J$PaE$Zp5S~o2St7Dk=&AR>SS5YX_NAq|^3?ivx^Fg})n_0Wz8C=hflYT@;(N@GyXYmY#| zq4%>$;Q>(vz+e+@-ca)d&&p{)lSz})Fy!_%iqle|XV)!C;OO9Gl68Zfw`xlNz%U_w z294{^yJtbFf!;mw!f!w{m=irc;;_tHWDhh*jntGWF1BK~AIP>?LkGr~8kwFlPAK1x z?(yvad8q6U6(^sqRy8-~odH`+?@7~_t-=FyfV1Zh!jS3dz^9O-ojb6XIzl#rxGTF$C=jxxf4;_`T433MI8YG`71%} zZ8J}WD|K^zRSb)SSDTF&Rt75P4Kxxly&ow}Vz*Eo}c*2sb{)_a>_*_V$i|;Kz)C!)4>Xs63lB z+kg)7w6k)2i4l-Ac4$;gM(s7Cwv<%oqMEJ4QJ7INy_6MpKstgb^@F`kMr8AOzYH>_ z`?cU;79C^k3SySp@I+O?MZla4^8@Zhy*aIHu5cXJMMpTK{2){oG7~fk+w9OQ0Q`HRIx(1G3-Y(JGdZMqliADWAOuELVlaIreO$ zuc~N8){jv{MoIpDV3j_zN5(i}K|0uSuELk-}J@p+kc0$Ce_bdytAU zTc8btgI8>@8}J6}eh<`xu^D6TM=sqRq1u|Ca)B#XL$8;bc>7t!NhqMvv54v_;bCIg zbxIbnkZqzGt!>K$Gs#O8ttH0H-C<3P`O{D38M@fqV+E3M>h zh;96LJ|;Rg;akz&7KU;Y0mNbOPn*HiG5uBg(tUwJUsqNE)oLPN7V9FfAd%u zCtE%mb01th7yF-?T#TfKKLbk?6}cMvhRd?|ylyn-pp0tYNdWgS9C$8>7WPp!aw#7) z9X3MD{h7V#-~&AS*A1a5OWk{Og3D%*b~89Q&=2xrodhSvu3*<2s>qj#*n2VtWzj)E z7%>v{M}ow;mi?Qa2iJ`dC@!jI$1W ze-~3jR!O6&fqK?X=#cmUzm|*@i?Zm~tSKGPhegMiZsbu^XxWvq$IUVK)cmZETL9+e z@Q15K<_yTMxb)mgVO)K$hD#yf&|Bvs4rPs|HmHYG?{U_G0%V+T6bJ{@+Z9xru?}tC z^T(Sgi;EQsQ>D6ZyhePcyBPjpDr;mgHpo@}eQ2fU;n$eYW@;&|BGuA@cZLbn45 zS3we=eJrMb@hf9M$*nVR58M|rGG;z}23lkFjX(DAS>qnu>oAm#zNz+o!^YU@@%0dd zQ-BYwf3w(_>AY}(5o#}^e#pxe$i3j?@$plkI*`p@ zW_Op-aa;=s8lT>^u#sJ-oVRzAZZb4BX2jJB^&MkB;qxw$x)B}T@U#p=eA-IZG-rY5 zv154T6Na=TltkjYtR&NoWWy%NmRQZtHlP9-)@V2;h%B5(e~e3#kut}3?Ht77_~EZx z0hj)b8XUHl!KI-qP6RHHp660l_~X#|1;x&Mv74Nj>MD@LK@aYv25ZN`C!#6(!bNi)|J<~(QYFjj%(JYuiEv6#{hOCxKZ=xk*?Ruv zGjc?n?+^NLkEua-1MO9{Lqp|UxdHY*VH=jdCG-C9XewwqM4UJoaY`wy=vi;@PJ{q+ zS4t)JmHZOOhoJ+dbEb^XyrnnNu^EElm1nJQ$51QL!*#&OdSX6T?3<@xlQYXjKAbM^ z6G~U$F>xz|TTap?Cxc^#b7EoaCEM&JOst5fT??Dgyu}AoEU33%UuKwJ<|S550UP`SNbJ{k9mciyks(7&IU5E~N(w@ID>>gw&NI+1ahB z9ESZpk=+tpYl0qI626~lw4L8})8+`@b8R74;t%mW=WUury3If+4%s7?9Pg=2V_R2)v4Qw* z3)9}p^P0hbEDhOxv@~kbH03QF(5};#lEFy)M7RNj1fTjVjdxe@%G5GXwEUKdQd{YKWd z?A^vYFb6Yc+NWCSTGTVlYBTvw;rnoHNRzq`Zfd|$QD50XG6BM7qIB5 z_X?IyP`P&-*7^rPw_ct}2^CUmkfJfXw@gY)K} zNTobh5_$Q^5M}4Ov|?qNn^x7`}y`T1=70P%+|tI8ZQNf7bNRUQ!*7 zIvG?qOi;&huAvsjio-}(xuY3U@bp~rhB18Y-$v6t1nh{~ItasWuU*AjL)UT9S;w1u z!72aeo2y4gLzo-`+L8pMZW;1fUzTLT9Ngm2@SgNI^YEbqm*NUZd8=>=sk@E*a->kW zjH@(Gb_*#DM2zhd4)d|sYd3D#2U78n-osUmT(*1;u|te&b*N2^I?IH0lAd4(MB`Mn zB5xp_hh;9BWQ`R!*X`7GOa=awYm+B;}?<&V!iESkQP z{CQPIO)Wi6NL%3NM5$DPYpaoIxz*FS%;@MTHn&K( zeH3O+PY%EVk=G-a(-xn%u%S5QRpk7E-IM-xchPf^)C1YDY~y}2=8{hbvmTO~e>ECV zceKN-Iv1I?1lL|d^d5Pp*ut$5D7d_SpSz5Fm9y%X4x9IapV#nPcj1J6$7J{t-&uI%As`UtSKvMQEJuUd42W zYa+%{-`FsqmxJHWzUk!k+cn|zFMTg zF+azZQbY)mLlpvT4-G5v@@VtA3NT2Uf%E79q+D^TE`-$GL_7059L&()PF3Y45ix=h zZjCt?6}Y~Pf)m8m89hMTsip>R)!)ZK?@3;$N#!E{vk8P@#Rvk)gPyUC7QB4&*_o8( z{2b7*G%y;ozxIzLT+TqMA9gM^H~R7R)02&$zc+@UoS_Mf9#y?O6vMjWe}FOcy%*u~ z#90W)pa4^QbE1XIq~(4(J|d1arj*nC=}c6@vyo6}3XP%;wwrx4IW(i{6PTvWf+L#? z`_eb4$_xWV{^8W_1;j-Y82Kx z+bv^iBw3{cu8lx}HWq@$_q_&saDY#Pgk}G1?YI?=;%38qp|oSVG9RF0EiZS>2ak zEkL?p=CsDr2+$>8Q#4#n=xX8a(gN#>piDSV1h6qYI49VLbYH$7@gm&j!_J}0o#(hH zaE7KR8Z%1PLZ+d3yrAUD?@^JwMP*sgT~b|6ja`-c0hpdmc*iK-WOb$<6vl6$wB7nm z9~JrN5t(YDG4kV_>bf7*>UJr($Oj;ved}a|Gz|3X`vh_g6#i_}oJwK5M%5u3tvrjp zEtBU6Df^M16(#*_hX0>w)Ay0;=TyJ%BR~B6sAZSOEd>bgvXxbYTL+9?U*XeqIp*;M z!R>==Leq6*$40B#x!JM#0!a--EI4y82P_|zdA%Q5M(47k#;+PR@H(}YC9;gt?@g01 z7Ad$4S$TyCeISj~aZ}-iTyo0&$wrPfWZA6&6E^)*mKPztLKPmq$OfN>3V83PK<1%J zZz&%4BEABUHF(IAPiVWEAxkpo1dtfjT7U+a5}twnk?yu3|kjHNa$4H zbQyOt_YSCB6B4r2DE%av;SAz64kCeh%sdu-vUf^tt%8pJ7+x#GXtA5dl!k@NsEud9 zazuj`Jo}U2lG2%sv$Co)C>=~%ZLBCC1#{l_6Y77dHm4?Ak#-f7oncdf?SmMGTjAcC_4#@H-~?w`w~eG7ZCT zkEOuzsLJc=8wy~y4}@y3GQ=bOwG>0}8@o3wPU?+>topBjhus?(@-72T z72>}Yfb0ZcU7?we?B~m0GMe-z?B2CEL)(I7gFVB#(bWBnCd&}`q@oIO>B%u=e{7L| z%Df?xN+`_yV>jFg}320r&KOaP# zd#4YKIY~;b(F;et=UB1+Tk85XQzz1?&sLSo1JHqmp3$JLThE4yX)0&>d@E`SY2v z1Mz#(Y2e!f#|<6==D{07>M44e={F$228718PrOvqC$ir3l3QGPH5?mzZ|Lq@Amd$i zZt5%^c6*6zad)ZAdRgiZLiaD!f?TuoBBg(!IazPMSz~o$W*)lno2Ly#efRC$kFy3t z@#FW?rF2@+*fI^ydbZBQ158qptejtKajd}LGOin!3z79P1xY~uqPpEFCZ&ha?xQ(r zKyCF&Ju++-bJ&rqTLysTJBuf88Xe~>{r&HNDSKPbSlNP&B7MknYX65hR`XY zg$mdA5UI0A)lr+X_(;{+V}CgOP{JP`f{rY8+m4PhP1vuz9)b2X)aO1uzgeiAjC90m z#`2LFn^x{j!vTCY$yMoVjHq9~3biMtcL8|$l^+ZBt}t4d0BXeQY68GT!p=^$xJFjH zRT_AJHoGl2qtughn@DXpsAM2n`Ro?#nX^c9duRys1O1@x^bN0Hh~1qNd6bz@cI1om z!HUO(+J%r-!d|DuJ~uXrb;nsmItafu#Pi^9X^^cvz?E$#gNr= z^0Ec;02&6T-mGIrD5;~cP=AQYZn=i4&I}IeL0H)?F>!6f9Hr|PC0A<$Uq%JHW{p*F z0Wn68Gp470Kl)wAi~HmFfJkQt7fV)@`W&{>ZV*Vmzzq4&(}*q{p8aN^now_qx=xm2 z*Ko=OBzENTFpH6$lsbXLVZ~bgR?wzoTwIXzcdu3LjGneL{$9|HX$udRWD19P6e-;2 z_ff|{s$Mn|(qL$@-vM4ePOTcGBJCi%+~l5>-#8q$$~!wu==MN<#5T4EE+2zbR_y7= zkk#oCVE~H$K@XsB>e=u`vNdIXO6IVhkXO@?TISWeW;Rx{MEPNan+$q4X;aW&RYwAxV8_euh|%6%qV%eZQ327ww^k8>F_;P z12pHJk#|Gv*nBXhc>)JoEkxfQRE8H+aV1KKwA(%W5ZEM;!s=CfIE>48qh^D%L;$lg zJ3AetU-bSICtg9dI&cW|XyV}d`mWlR4Io>t-~T7f#_g_KPT2u=BTsMLFdfoPBJ%YoHd9UPlMlx0jhSHRt$wcjp3!v6Gt%j%+-< zVKIG+m4wMCQ}fZx0QuLnZ;DThcYPyP%sY7E@6)(MihfHpHkhF|s#>nCDgaBR{-?T= zi*Z7}oEFtf&C%)GH$UQIrHyNizn+$|1(FB!MssZMi~xEzr4Z;sy5L zcdMfMgSePi(DH?Iqotz?#Xo`|&jXxhcBD2n$SSSGSwvdVU z{yF2NB8DmpK<@dRQlIauPQ^Yv<-jrr$Bu+4EAl1Rz#YE(@`PS1mMqY0#x7$V(zst5 zMYyj{NE`bsiLY%l!m=${=n1#7PySqias#LwcP-fO_Zy%esY> zHOSL{HI+QnYo48&0ZwqJ%}^l)FjO)w7p(BY!MCgWnU>h@P<-6_|5Q#BBX_a@$h6H6 z^9q+37uo|`EBK$VzKY*-g)tQ@Q?Dx41ZTKb=cb6iYp@i_RZ0$j<2^XWG^ znCE11q4li2N*1bj9~*MrXaTy$TC>S8Efi{($G0BbW6 z$8jFqD)fq!gbs5h74YRn>Dz-+RAu^+N>(^LZ)Xu;&H{zq&H>vp7V2}rDBOsY?i9EI zDZv^jw81O@h{X2*yWMaehI++?cwJ+URl5r08C27kYj4U7!v?*j)|I+4&?^y-v#87$ zfn<%y6UB%AR$Xz(j|WJ)tbn$qUjI|M5AE#~)Vj|%}j?dgtJvL_SFJP9XitV`jL_E;Cs=D;gC1Y$iuk9$;|1F{M$a8>z$_ZN1 z`z7WD50d9qNaG>$etGiYq(kp0AyIDg{9Co$HIMmw2Of7EPN%7s9MIWrEi8d z1H&uzis!vwr0yK@yJ%kw3n@L_axsiFNQy>)>?#?yZi;j|G|f&*`Wr(PA%075irwD= z5zArdX2aSor-fes#?G|l%AY{H^Z$1Z*ytt|UVXp?p*U{;jwh{!+9$|_;Gx$XbcYD# zFT*{3SF${~lvfbxRrU;=G$rU3{oVl%n!F+-IAv4ejgZLeXXXUb4Mfz&gzsk~xp#^$y#xVRNKt=< zBZ%8Q)wHb+mzW~GBh}6v#14OQ+()ec+6{`YuhdOGEmy4|MehzmpUNnO?v9y4y4j&I zJ7b!dMi)0`m|2`q8JNIt>NV{7;xa;$(gEa3R)sN~?H`;E0X?Hn!)HLuJkoFSD`;T3{NnI_=5$LpsJ>o zmE{8o{}K8#JMTOGEP#92^jO zXe$(YgJX4D+(lI14(>)|R`5nc<383f%(xzKpIAtGIK1xYCUixBfd&Vad&*RKSh;}m z8s7E#+uk@k#aqO%&ff(6y|aRIq5y=6O(3Kzp|`VzyF{cq1u5`YwZ#lutS;?K#i`p3 ztQ$s-Jl4ngWDv^<6fp@4(j>-=pPkM}JnF!5wM6z`4Nx=ve(KRQD;6zzO4~`tSw9LZ ztx}t0^e1W{kMx9AKU^x9jcePGtO>BaIkIa(s*k5on~AhnOs_U){O2dz*4Mzme(#O9RdhRUnzd++Nbv82yfCzI$Ck*9IG(#PK#>L*ADWfJI2LV$gB=(8g zwvyC+MS4VOH5}xB$fJX)iZFC|DF25EX3AYggv^qTLmcw+6M1Z(%BZD{IP5xDSs?&M z($gipK8HzQ(8sKp(6htT$i`ECE@g4H|98|r4$ZY-FZMTzalfJXO+m-(`Dn@6+DerN zZhQwMKd*~&K3HRRpNo>#H;4=YJ|BQICms&SctuOREG%J)e`nF-IbouCVP+1>4-1qF#*+`dIVo8g>#Gk5;YxpU#r)U2nox zfXElkgk%9YP`;_`2&*MMBx&m+!JdM>A33b9#o_yv9V-d-5G23jv&)Vgd6z{M+Fx$Y^jWz$^9U|M zkZOm7UpTtA{M)*%fPJFq>U_sXcCBb)KWADU*fgCh4}_O77~yL`Vn?MC)Q(4Clf=l` z8aI_WCF?UAuO{OD=H6HSQ#O{6-_C6&-I(dS;-oD|{_B&pa}SJZ3b;ZQ>#7+bj)${6o3`9H zOJ#7gp$I_O@RuO#&F97Ln|eXG0lc8+j^~PL!kV0FV9=1m!3h30Y+YeF-zdg zsw?IwONu{moSP z7Rtw9^pFQw!_bEMiyNPhs?P_8hS}&%K|--)8OYps0P-IAy3N8An?yx3QfObzGFo&! z(saf)8Cj+u7ElhsaX!q+o~ZJJrV3y}1D;Q?ZsH%1^^0WpPtID%m0D)@6@o}|c#!=< zzj3A&wGafx?Sk&b4hvPvhIhS$^azZ6{pZW8O{A=|>Rle;HV^t-F*&pVa5x4w|4cSU zKAinnI|6_|%77PaV|4gb3h`9v=^V>iLV)y=;H*5{?yI$IJ|e@|HB}lO%VssU{aPkoNye(EWvkM`93$y zG6jVcHI2;-Xt=oMtnxX~Bh`On?Bq;*hbUjRzZR)O;HZG~oVqmCoJxHuAze*vT0Tun zj$AIJ?)}N7yro|2eiEx1H=*Z~fKman@H2Kq;3|Vb?*WdYRkFj87%AO^=v6&(Cd1El zYTFAO9=qPpmrJG6jN``H7OPhD{)n~o5^=0k$dN-O2pD!BfT3I0ncjlugTvMT>m5H!jhYdLEXv>E8q0E@uS6HWv9L?Azudn@TNt2#M4TJBS`OG`+!x!LE zFy8#8-#>(-{fbECLSdZYA(f!5rXe@N9>VWVh)05gEGb>olqk<8Tw+Eo%qUj^kX zwF^C|bSzBp_k{@iqf>o^o~en7Rq#!xrI))cGU0501C6om>YZzj831|Jq|-BvioN|N z%{de^XfL7Ane-^989UEAgHQjBeHX`Q$*jMUYF$8u((%nO#H9bsiyZgyWhPAF?&8A? z^zG%vLeS_!N;-a2aTpPPldL+FhpU4SFmt4rn8ryal7{)3zWsulnYcOEW*;uujwIO3 zj6?Y~O{_~Pxb`_ZxMP32F}7&dy*M6IZOV{CT=c}>sU~5N6_o&yA}aw(anGa=d!-Xm z*uj3R35zev0Le^X6I;+!$TUHtiYr2k0ksq)mjAkHitUcQQ1^MdGV|#GSHgrRMxQ#0 z{-OF>G;I>$mQJ z&J{<(a4%(-!}w7g@;d7;q9I&cf(#GW_nKnwGIzZ-!Q;b+G$1QvAE>@pKgbu>E_;>Q zL`b!8rqOe+<8)Q!n{O7NalZZa6}8hlpo__`D12bbTfQD#52PRmoeM9^u=SHnAjkYD1tgvIX7q``r(v7HI z{maD)^MB(04o(FT!poPhF6T0DoLX@?Ds$Q|?wwb#0NpUKai%534huBdclhpBP?P_Y zk?SWJ%^TK?#B-VLK|}xZml8~qn$Ea5g0*go?c5+Y%bJ;fD**XOh?<37uXXwW%B%Pb zU!IvVH!&>fe+wx_XqED4v>Cf@M0|;~0B@pkm8_W0T0E;wAAd(N578TRW~}b+F}qJ# zfb?XKi5_NH)NLiL#FBYIEkw zb@%PtNW;AE`W!-S53_uE|E^jqorYd1s??aXViZZ{_Gd(HwrG2Pd=`!cE=VFC>;cA? zUwOS6Q&c~o`#Ef);tm=-z=8Iqe|ca%_{6%ux3uHfiDjJE@j`hdl35k7l7~$4J4-|= z-lCriyI~yr@b=jR<4>`us{!HB5sSAMBTr89mJwZs^#V#g961=r{d`Zcf|1nS!9vkz zQLBNu#}q<4ggrM2Z3djGn0#w?!~7yVi}vGk}BLU)VCyhuUp3micBSYB3F zj|sNph27j0=`zFLtAN62D{NPLq7+?b>$ZU_34kLPm8M)pGT-KjK-fTVLq&v0RTn)p zM7W9IaKByQ#U)}X2q5;Lq21TmerH2$tCW?XhHRMN?YfJM_3SB<7ErzCL36}vR~`r- zNBMVCfZxt-54EDY!eRZ$^kA)63fj~0ASDX+I>dgN8f9DcCf^^W7GDf)RRHrVLAcq# z;yEqyG;IuA$ekSprlr(zuBBeM*V+QTjF8@f$D}=-{J29|HPAP@1PDb#|NSGZjjrzk zz1FkPp{2a->7-hOo-gtZGeIZSenQW+t336WK%4YEHTRBptLlC^aIva`ptfiHuu4*W z1<5NL88k+CIg^Xt3B7{iHplqCgE^*huFo17T?53l+7(a;ui5SaDLswuA4n|YAm`tI zwekVCCR)%l#AKrv#VE@=L+s`ynyFlb72()BfDnS}%^HAYfNq{3}Fb_NFB$GZXSaqwe6l=XNV`3X`kz8$A|m zk1pGNl+=ww3I@vT0e8c?(ia4$HB)sXZLfInADqZmQh%sAU!=PXivt%1jgM3K2_&27 zX4v+3{rw99Wm{u<69tm1)QH~HT)x-;^76s*IS2k<+JcWu7buBQ59lwrrgU<=m#wr6 z&Fbv@!e#cVQtP%ERA+LX43-iWHRRymIZ|J===E?nA6xKf*30?cRyEVXtiBdX5*I&C zl`(R3Ib4YjZXYL3A8-=IN?wD=kvbUlS#Wkascde54ES${C1s}G%~usvF3p>e#!(Z3S|A0=?l0Uwgc(H! zIRCwDL7)jiS?x!R%v{82NLs+9+zkNdTJS3eEU)~Z&ymqiT z_Z#85SM_hryXwFI3RN1@=%S0|pyLMb+}7Hpx_(ui$JP2lWY#8Ycf~12y z6(*G=B`RQaXlPJ}Gyk1G{B6urusu?Gbcta8+5TUcA1S*P64glP_Cg%vKmIs}*ZB1R zWl7P(W;H#ZJ)=QA^RUOI+8n)(HQ5a30-)Z=uV39YWHgw`M)bkQSg4ONtb2Jfo3YaAr`C+eDoNdQ{tsf8DaeTI9Dv9-jtE9n}8S z`auiMLi^s92_xW1OPw9M+>|{{6)(>I09Zu*#}^ElvNvqF7CAWT=XAV~H;iKv^y7}Y z?Xl)5t7$iBJoZB8(C|jmZ39}JUEMJTIk%&Bi*JTV7mJ2H)o5%m^aL&T{T1m~3e(oq zyqVxd<~?2u{{<80EjmK?F6EmdZEamHwkmIfNJ zjIjeIKSJt$ShB`hHbl%C3kI)``_``GF&(Z%9+-U|?E0m7=fl`z5)S&9U@4%l@O`A< z5=(euDobuB5yiy)51D7wXvXer$Q$=pJ-D3f2KojpSkq37HF#BmH#O1MchDNU8lF-2 z*b^L=hN>DNg8ighQ8=HqP%z7`tcV5ExU!L(x7dh`J1{sRp!7m2GN?x@VxV^eUw8 z$X`W88Z&I?ijOPYg%l>TXMJ?9De5%0+shF^SkR*0p>;U=+w{EAjgHYieO+|B3HmUD z?`M5Oc1b<)4I%vu?=DU`<%0m>=&vXvktO;wGy86!2FUjeM`42rqBdL&WvgI)5pYd5 zLqX%~vS|Qe)Y_9*4$_SlfT|7#RQM(`@2XyGotJRD+Ag)KV#=>z;;2J+MAj|pq;H& z&Js$L+?aL{PCrZynvonPl-MHSYZ@1F*i;h`@y3VW^OO=m5#dPY{?!GPPl0Uiv7G;16cZyDH?#l{HDFKDAsDA9s` zUC(w7QhiG$PSdIGS10`7O2Q!cf79B^Wz=_HK#EQl{D-&P==)=pAUisSs|}$pygB|n zDYYm5nn9@VLwoFuDM_TE@J!)1LKh52_*@HVJ*4vLsp#NRE1)Vxj%R!6k z%L_mjwtrJo5up=7KfOHzL4NqU%J`P`FXMVBp#2w1?Y!boz(~Wa9UG2;^uNuT*IY?F zMDto}HBWe8dnXYi<}yr)%_Wvvg3!BAdI0JjvUzCh50bo*uI15@7~~lXdVq|y z(cHO{VR`6g99~tCdt4xg;mGIvOMBH~O}_yId+wwC4A7+D9pX4fR+mo1@smaB*Qi4lB^M-IHIziI0%akwuMi@n^-wXLQp^VL zIYA_cjFAbbGGc+Z%A-7;!Wx9T2QG?tO_c5<%4Z1Vk&qhBN$(WL%(4ZabcMq6zrtkRqpP#ez9Z&$ST5pEd&4=vQ z;F1ey0W+u56r1_X6xyi+UJm}7$hu1CYfx{VY> zufhJnjs|S8{Hyt$O(60kKS9qHMBLc6<=%Qz8wx}_Z_#t4m zn>F9PgEab|mbQ?5t#iNqHD}d?6?_E&`$$_1BZLysRa@gaFU02&OmlW@|_}C=&hnc<= zM+_v(yOrtnNkjVgp^e7H%~tFav_QY_IvG8;6VSS5KwSaTeHW5$fvEqg;ir5yt#j;~ z$Q`OV>)QpKl#|1k~<2r$Ezo@(jesu+WI4Gs^RVd$W__ZfaBF%i_Z>@krSwl8HY1J*AG z)+(bAAxjdrJWQ|$Y~8=AMt)ec1J%y&pPT><Jxg-(NU%vl^J8D)Ui{&ZfDk&OJz{bY3HTkxR=e5-YkK(AMXEtfBP9QS3+eS zn&~{Fb6w}Vn4>KDzP``Dz&H_l#<#w$`kmF2@2{e+mOI@BDn}$S&Y{|vxwz+YHt?*( zA)29IOcSj1^-X6KARkfR!AnPQR+-^#U&jaVhX!i0Uzo6r?7c<7bHT$FpO=@;1+l00 zg>87v`_5Th`Cecrp*qufqq)L8d2!i1c4$-Zw$DPSu6!n-NW+}Lp(pErn(GkS*B!ls zhb?-2F=B0ybOg;SET%P2O-qTy-0$6NBOPK?8QX7AmGo?tno4#ot!k zVB)o>S6w+q=!)UGzEArWUQqoo6x9o~2dUmz@*C1Hv$_xvVw~asZbaWfk}~OKB55G? zlf%j5V%>c-KX33T8%?&ALnwHh5lvoajtTSfT;|a|xL0k0LlL3=0ezo1`J}V3mbGqM z!f48~W9f$ZhYOV?fF#yXu~yE!)KY~hsJ;ah7wXu9y|%d5xXRX4LaKrzE2h3)9-;iv z4(f{ikkRKmHzV-c1sj3icSLSV{237BU`=To#omp72=Er>nG!GXtK?o#Q;R`{aVa=O0oFhebK z#n}V0`@R!F8c`H%bG+*D%Ztjx<<(qC18mR!mhpYEtn%{^kOI$uXDs49+_zZ@bETyM zia-1+{{2YeW2@WI20}L;o-S)hGkpc_lBmA&=NvTkT^?kE*SHNOP#}T4pSp+>WUu_5 z2>EZIp=6)5mGfF@K0z*!JcTZ2EI3n7>b099&&y!WXrh{q*kkuP~e*VxGJ(B*c^ zR1A%yBT>E6uz|YN8Ei$UM*_u-g~Y)xoHOqz*#6^y&y+fQ=}GjQjG9{sL=28_tvFIK z_oE8S$y?7#gxjv2oS3N-1AfkEL*8MlV_7GTt9{-3`0`<;vPvP}q z8GSSCAkbciH*r38hJ$g|jb~|GxgL74_gdq6A#lV~;<8<=kUbrrWZprF=iED6XqKpK zbCOA~;w9R6{#VH#oLTEiuUCBnc{xiBjVp!hURLAQA+addqyHCsx;c#t1x$}@*bVlE zH!_(<$SfSX@Nz9q@jxHn?Pi)AZ=QPh-rmFDMOl1%rxIdT^&cV{6f$c4aXPJ(NN`dM-fZ(d}q~- zpP)!~xw0zO2K%k?s2w^3(0sltJ8zN3-inTC?4w{qZ~W0OH#1g0{x}&E#^2Eojf~3I zidX*GI_p`C(`96VfPz9T&i`HSC)Md_-nRkG7<8=k=ec!Y?n|I`F=0DJtiAJh3ly(p z*y)Nofi@Rj{q4Y~wF$9|)wu%gb{Z?RcV)<;X5h0`d#u%)FpCd|w6LR<_tQY=ei&r8 z-N){Xka8KRx;65{923viW-iCIBk+J%xXg?>&-!1NP*4#k#@EJ~vrXqsn(g&cN`h&< zpPzs!T$pq5)@5)j483b>=VRA9yeCb=#qNoPtm8Cn>)Rc5a6}AsBIOPvi)AXX3#*we zxvdQNv5G6VqO#I$NWd+5Aeh}GkXTSn(mv5ix0ML=)pe2yMiWkQZo}n&BH8bXCU7tx zzpHHk+h~R)w~Jyf@}?; zOM>t9rIm*51T*Lrm-DW0n3wMyk%z7rtFwfem(#GXvq|Y{G;bo7$7LS~9lQ8sS`7UH zK?$UDS(I^2$>C>JAzgzL!9-&B{27-&Tga#tV1K>>!*ix1mF)eoTXFXL-v{;E zM@5MGvmW`ToYfax-n|}@%8>o*)~?6dpo&=(gvUSV{r+>*&za@t9ZAFG8EAQ2MHYv( zP#%cw7~rkl5@hT^gp_==DmM+mnT3ys`akev(H>CN&xf%q|HsjJhc%J4Z9JI?Fq2Hm zWI_o+C7FPLVizn3p}C;q+7N{xi0IOyYhN{x2o?lEMMb0qBO-*RNE1R4tn1pafS{t- zC?c;Fg+RW;_a~Rvg&}k1oaa2xegAH3e*H$Vb|xaPieNLQho3C>;)+~0{P+Q|6ftm4 z(!)#k?a|C?A>|#eG=gOACKl5z_8;sMIw@hf&f=Z>SKfXn(AxHdXT7|o>Ni!)jjsV8 z=Q}Lj;9jD%kpF=My{~9BVHBOLyqY9v{DkZ+7*P`R50Bg0>C(UWl02lfH<)eIe4v_i ze3bq2y9Ok!89IO9t=Stxb#JGv0o0{fvkGCZbv9WDTBFAB)Dr>q3mYw(zOrL+CY$8C(6G69~$U!z1B|WYr;>NctW5+t%=7@=w<2-nGvZE zuGJ3$mLBt2RCf)J>iTgkauE?3Q+Xz?6BErPR#g9}j?_#&t~-x68d3w}#AX)M550WX zmkg#~8S7SRFxbF4>q{?k=+kBY`F#d4lZEH60CE6xzvrUdPy)^)?dZ}#{B4uc@?o~# zhQhxV&Vtg&w}QBek3aVc<=-Ia0{yO$fPx`qCHhf!K2q zv33st8(ifvXSVD5I&-s*_|ZZE;*@Rw>$=Ssu+we)yXzk|-7PXbX(KF(SwIm1xD^M5 zdoD$Ju88SWUo=;4g}pO&)LAJNjKPKmP%S+unl2EpkAah4k7c@JM_=9#n=hcU>ycXq zds&9>EdR0R6OurLeyOyFg^b=*R+?lcq9w@*i5PO3d3&0yg{O4JCI7*Qcht=tA(>Ct z1pa?1BR#Y09&e%(g@zpE&p5)26FZ0Ki`c}~J^Ps7h-_-9Gk#r8ftmAVlb`3PflE+R zqA4R-+&=LvM9^r0%g-D3GWZ=f_9-^UV-UrkWc#|4yhdmGR{d^Td?%DuGgpHb{5x5mpmMX;;$D%GE?1Vo(H}{T!L{3r)+Nye5Y))S- zt7R=8Y&Hw#40k#zOfm15MDl!6HyhnKad4Xesa#N7f0`%OIvKfGF$HIrEqdnwPCE3T zUqkh#oM**F@XH1TzvBbwASmEe>4}zv+29Gq#VY?6Ar}Yh4AxqL%jnfdZ{008HpQ*K zpc2vOdfiXjXM^#axt}d|bx#DR<^z`og*m%4EjMAYpwRmB@%{7V^AQH5?loo)etopz5~=k-x9C+a=Bz7>lsOYG0zLGz{M;v|oITI-uZslm z?b9DYGw(J0_t2}*mp{Q)@M3M)UQ?#y2^a5C!nJXdB#dT?k^gJo`jvnVlz^&W3v6us zRLp@%-5qpyVTCV`?t}e$@j6K)zrhDF;@WBOPTh-u#YpsGJ(Z@G8Usb+dK+tSF|%XT z{$gW`pIwN&BGSDyFrmks{Bqb1Fdq;_-`lTjREwSj9#KVdN&aUpg->#9aZ-iCa@VI`}p$Q+hD~-^p^gGV^-^z z3Du~1z&%vSVt4ccZZE4WechyP$*m3Z{HR`q;78>ex*v^iCJkzuJlnF3;oYn@7BjR}Z zue*eDCkVCoHuNO5I<#N&trsQI)JIz4i$$O?UeM4`XUzED*(b6M7e(3<^wbYUrwNPv zkh`_(di3&SoOaZJi>BD*tZ_6@mG)Mf19Yo%|McS|sr^J9j9lZj?(XsJ2o1!FLZyJt z76xy3e5mbQrE={W&65s7+7nYY{cGWh(D5e7*B+WP&Jp}eUmtcD&g=I6V6xws8gc|v zKqiuSx~IVHrW$axmcaBh1D{+UaecM! zHv;^=e*^brU3q+DFsu?N6@Ceyx=}EX1{)zMgvenXuZGM2Io-? z`=kM|*ev0k=OV?QiAlv{LHE##e3^fCol-5-t%Vsh#}Au+3fvKOHJI|xho?PWHGAWU z=&jvCNw@()k37<`Ltm{LSJYh!Fz8g?5nlfsMK~0jBV7qCStzJ{3sh#QE`g3X{q2pk za<+6kU5MBeqsto=AhUoe5)4M&nRp)JGV439~jdv zP#u3o`j6fF)Z4NPO&Ir=9erCTmlMdu^F!KkoFfVcA;4ITqVL~cYcu6ktLFFrsgI$4 z2l9(eG;Cde_&<4u;O`kO%pPyWJmA)t0UCr(K|orbfCw0tvXY*zC*W?^-6#8D$=aRr zVk>K+d>HY48YmUAjJ8j$2l6v;&EHt{QovLkzy7DwzUUt=KsL)6*VITom3I)dSN~e0 zV+gqBp~*K|W`I|elGqe6j=OWo>2a?eqK!H!mWB!o_KV!IFz0(<(TMV;jRJ;p&a_=G zRbcGg7@|J|te*TdpCRkWG(u)SRSe*0m=~1yL2ym+3XjSI=Ua;GIPbNWiVn=^@dz2b55K24Eb7l@1Gpk`3Z#0G1 z9JcO@g`%l77~8OfMYqm+=n(e2?qUK+$b_i;mUC}OodbHludk3zUx@l&h&+^iZVaZX zfpgW%c)1U4bkT6n@gnqDsI@i#oWh5=Ue*$d6#_~xnzQWvFq>Xv zd2VaqiR?Q~eL}eqnqi-ClqrxLL`OA0>)DJ0OKj9uiK=grwRwQ{mTXW{e#c)ytxC%V zoh^p#W3}C40rZD#5!XH1(iSpU^)Ry^DaqSKGN$i6-|)2$WHsHm;pxdnUoGUG*ADm|t6;CIDOY7W0?|ouh62 z!{-D|nsvU|KB&m*Y{(~48^_=80xo;gp!JJ#p&n4ORupfE;4m(QX-+^_6^x>uaJ(tT z@+7)nCOs*XH*+O!Fx{)g7*-0JSG}q&1llCXI@89%f~@cE`zVxO;m4U*ZJj%odR16j zN8vDXL%lez7ZoV|oFx$VLV1muVqZeJ38mND*_mR6olc*w^MQ!Q&-bFh43n*_(KW`4 zfE+?GY<-A_`rezZg^Pf<7Ja)n=Cui`I9XNl*HJ~BVg!KG_Cqfx@3|x+%u5uj=i^CtArC2#x@+Do+q#l!`8-O2;UrzGQTm2#@H0qwl#AOPvRkW#CLhwKNLG<3neC4MPMvzzL`RN`~W61N{wX@8*NH{WZpwA=vD%xgZ2V^K=cq$^%T^u zuGhH417hF!(z=Ay{*6=&_1$G5-@NZn*hDnP*7wHo8xvs>K0j}RIS=yE*RqW|Cp^Xm z2=}SOg%IAj0y+`!Bu7j%Jv^`GE9+<|`_`^$ej$pHizP*TfYcrs_bN{>0I0O#-$RoK z=6x?kGjJIhf8^ivFlO;vH%t%h016MizF5y=N=sY4j5aB#id{dYx8RcgYgPgC$oKg+6Dngx}IpQ`voG_ST1CGZ<3P~rZ4 zjuue8x&#A@`w?~HMXS*4oh5p{G6`mEbu-`jNL+6_Zwkl*gwq?nY!>(_sx&2^aAh%+ z^=?&IAt|4R7M>YhM=+;5jNad#3{H$=ql!{4a=-yfS{5hwMfyrF4gid;F?TdW^`&mX zQ_2v{yvS@bvr#5$2p%3#*Ck|JC!%)d3{o8 z8*av$1Sfs30~d2@Og@Oj{qf-sA>t-40FtNva3PZ`EGiM^1{rEDVb_-ASVxoELEMm9CR|G8yPwD8HAFbLo>; z#B_kfx!`4>Q_9ZID6wDFq3B=zqgX0{u1_hKb^|IJ+V#KoPE4?j^iHt^&`8AKhu>~9 zX4)c2IH1_(pxtqGfgsh){bO2MtV%JIpNK66LgcSM=q~~NqCc$kA(z=BP z%EVZL<;~}=ZYOoYU}9WbXv%_ZWG8Fq0vAnRuYUl}%%P@xQAj5z5T)i+L}2gz+QH;R zVW1j*HWrL&2(OrNo&?1~mrZvbj)`xVaY4N~AH4k`N*uFa)FI1k0pHBsnD&00nHrWs z8#g`sR$-U)4=C7uVu%mv)Q7C|i`mDfC;2b8^yIm(*W@b!dXzf&z&cIP>{nWv2x{qK zK4cO=xZkM(%sky7Y(rKQ7dvF@^M~-pIwixCiK2qHK`%*1jBK!i1;SYAunSXT!$ zyig)7xy&}}LLMN;0*^~&7?JFIT(y-x1+)@7@Ywn36{gB|8pD$t)oi}QjOuDZGfE7P zJfkpB<`l|zLzXF*gHLj(APGclY*X$IvNEEr>#+_RLxda7xYssON1-uJxmvAWlBT2L z$`{a@+FdW`Ix59bh)&72D;WRvt)(U9-^F+PxQqw-3=vHdGwk~m&=Kt!-;V?G)&fs}u$On;v$k?B3 zdW8FvT#|^r5&0v&%U_-d}+cMTAbN@O=)X38x+~k~+DR zqiDacuOE*webcj$1;b$LPU`E9;UE#uEJoXj=HC_$;FyuXmbW@~_0JNII+tt#C5WI! zD8q9VfAkGB;7Sy(+~|h(UkC3-L*e^DrqTR6otM9mT5oi8aKS~E;e&XG+&>$@s(dfs z`-)|F|M7Eih9UUTFJRc1Zs-==lIOjKyPsc!bO_}&u>JD(rT(p%s8LYsZn{zAVS{c8 z*&tD5>j9%L6zmgbqzRmt9WY@CmjJ2~*1`%EKsP@3g4B1wh4|me z%v3>RE&tlXAAF!C4ke}p9L^dkr2GQ0ZA+wjj}TIK7ts#=uZu%>dDA&Kj*Ol&l>(Gv zBy`Fmwj5lZZ^R~YC7a;3%FT=YDVZZexdNka7D`j2*e(VtaENM7waQ`_Qb1Q%Lv5eErpCf;UT-xXcS3ejhAXYXKaEi% z=t7^fVt^6^!OdF{FGcdZ%l3AkN4ZXUFpIgWpv6;!+O}``)*7dgwEe-np~k0!Y?^mUiWS z2)2kVYna4uY=b`?vCV$C6>tt(6?G#7_UiM6q>S@mqi;&dJBVYpRy96Rndgy$U#&-g zn6>9#KoqH~MMnDCr*ar2fwf_FMDt|d)@MN*Lj!6I;-;(k8l*`mKSp&;+$I1~8;D(U z$$S=~u8VeCLb!{DYFhX}KyFQeruz_aoyX{UsSqkZcp!yIx|Gb*s@cOx#%=mw=>?Um z=I=J4ZU!|)__BtGE78Oza49RP$1B6j2si5~h34?MoR?`}_Iho_5TCLfZ=41Ve3=kt ztAP7Jy#a)jA5Fe*ZUNZ-HywE66Ii;zxAVU3C4vj z4tW3xm;gvOXQy(p@&$+Qx}F6eJwI($jwu%CoEt6x^%Bz2G7`vVxL>)vqcw9F-8NLO zAII3CO%YqS%X?5i{jqhXSW;`XcyUqm)6*0hZ3AL9`Ei7~g>o}$H`J-e_~Efh99t&1 zXaT$XPBUiKE&kPtr{Ijtm~eWp1rZe|+(Q7(jwL#DyI*g@ij3R;DfJ`RZ&vqS^c64* zB27DwuK_>4oLyI8$(eN<3py+Vx8~%DSM%AzxKk;S=$OpRFTXI_oIxH8hfY#63W9MO9M|KsMNZu(*b9Ih8Zt8=6z4~9y z2Ewh#2GB}=!l>LS=DJfhwSEp(XuzTy2H)QA^IWyK@M?`vz6XLcRyEB5B4!vd^Klt= zCP)8yJp`h_U}XB>w~zl2aXTgr0BuSyoWjpA3B8l$2MBj_;UnJut33>|&rhipI{gDp zPpcI6kos?>eW1rHhdca>yw2>h(T#_xH6bro(>jWshd-*dPF`v8G~eZH0KG;i^!(3(n)*+7&W0W+J`N9LRII)xS49 z2y&Eglzb1wK*+?mzj#*nL9u-6qsKz6JshiCF8&?`5R(m+?|D>I^fS~j_@QC zz_b~N{_4zQ__n%Cnn*OV=;!@PC_L;(kbdXVuyb{$vABEk=FZ)q-R`Bko zlBDjOaBha0<>H+x{QZYz=6s`u-T{^&R<%^ToOGE{l?RTq*U-Qm zCs?>{iX@s^;$T`D4JE{rWXr5cc^yhAO-#n=Po{ZF=K6@VBwCx^UdzR%d$XQ+^+!`j zgj6Yx{Y538jocH*T<8YQo+I#gm#FcoIjW1Xy;}e>k?Pf!{aMx8`E`KrCVhL8y7CC= z5>xL74y<)>)C=<+VP~>OoU_MFI&GITvn`Y~WKLD-W|m=at+T9)RMh`k2ZG+5;md!` zA82m^GmosG{s#aOb&|V14aj)??6ajX+(S=Q_xFOY_PrJ$k&JSCmAsX!71V)?dxb80 z6F3>@v@y3}$;dzh!wC0WCT3<)>-ft1G$YPqWQWJXv4GNs_c!yHhzOt{-_205Yghx= zV|Z>4R(bYg_WLQoSbGQ(h0I&pML@}oy<=zO2vs(pV@t#;1_rpwa5%hUb69L>rU3{? zDZc;;>tD8MFx zu-s*qWwUXWzR5qI zwmEJVl4@x*4gKs4It=Y< zAS6CW&XC@pgEsy zx7ThMM=Rb`t8Wm>eAKzhCcy;T`gKn6mj7ZV4iC^m0ruu_Q@Ug}DL;+6J6TS_8RzzV zoq2qIR&=kt8Ln8H7qvDg^P*A4&;}gIC!fBEB9xTP8$FG}Hg}bfyHeed>5b2Ji zo#~%Jh=RXzVQlp|U`_t>PL+z!6o(Q=(OSSrr_XL(WzGmaS{blCMFIQk_Ksy$jlP}P za7++)OTPsS_&|eNFtM_)Q`FG(H4u2uJm|}WMwB^My38b;>g-kKq@Bftvoz}oS zD^D)U(A@)Jz1LT1R%QM`ORGu-cud8c_MiQ_XnZ1S)QU}n(+}-wD)RwPkYd?riL*Q> zNpPsZs?Je~nL^t7PuuUPOGfV7GJmrXFo zCw<9t|CTwjCP)DYv#Z-zF95#dbhjxX56%da6UzW(fzHsi^@*a)=L-Vg#@xw$M&$53Aj0pl^=b zfIO%CEOD{VAsekToSfz5a7wH&&>v$7qxDfn@jG5T$>IaK@O~OS!PX163druzfPy;* zy4R8iLeyX^p~eohY~k_p$FsucM{oESb1?|#V0q!h5i`R5qsHz64%uvJHmvHk0NoHp zOsna5EF}5nP{WHDKv>~RzS7vP8N&V=d--y7Bs$vHgtdG4*W7Fea=}MEP{zV6Yi}b| zMnHeYT2es2oi#q|=Yrqvz_b|}oY#A7b;DfR6C01o^?{csS$ zSaQE*^Pm5LZo=yLJ~s~2y*(tLL$yGipqAFcU(bwgVwQttF=tO<4$e64Gox!kOSCWt z_vi*kzc(>!?G>wu4OVEyMrg}(u6BV??g62+^D}(MNwR@hS%)JB`?uXpE6YseABZ*} z(DNH>t6KrHW8;M_ytVdq1reZNM$PEw4S-&my9adIV=7Jqe>**a!KY~qG_I8 z4b}>BOr=LEmMo6RRt>cZow}fH<{fItVCy6tXdlXBc7l3Za)oVNf;FkGm?p zpG#5Kr|IrAwlSqLFBPl(!8`k2Ue0H2-g8jl}P^I{JbY{m#E zbO}QoOu*Ki4W+_&pCN~Ib=hgvmj@3jami%)SdiSShq2q{Wi46~%+Lv(6Z#@@Qj`W|vf!pf)s@s)4 zbEH%{GUa^3pfSB|MoaV$E%2pw_txu8(J#NNCq$6)G_>wV;#(e8$Jupl!*k%dt$Mk3 zt$3dB$SS)f#jAs6U=2sVn z;n=1-&yECK0#u&8fK<9I$bgo*)Iwrz6l=@I*0eAuRZfY9{n3jt(jI8?+!^Q{8|^%( z;3PeK93gQ**MiNK!*Fo5G4`znAKPj}Z3m9+5Eq;dC$*)hNpJd8oW-G?Tb6-{ql5Fu z#DAM6GY$o3HXGI0!5W<1k-Cvu_dA|Xn*qGBl{00h4KhK35JhB(GfkK?l$LGT4c!#1 zkjC^1nC0HS1Kc(1Sb4ZI0P;vUYK7Uu2KcJ<{<7JToWi>KeT~i1~rD1V1 z$cfrUpgUaO)*YV9X6f`a7JaqN*-PGl&E6OT zB5L7a+s{#n4q&+#YW=~>7V@c5P~m?Mct zr0-!Hho}zaSj+EoVSP4%Z4MT^{Idnfv0Yq-dwI;sk)>12L*#2Q{f~|B306c>`Z@ak z{buI~APUj8LYhjMsh8?xK7A}|IH8#omDcbd&@U>OOB_^_8lzklyheN@(w zQobY?e2uTRe|lH?98CE(_;(ZNWkvql5u(u(9f>^Ir_ z_86cqqvz_@tzjcwl}YYzU9`4_+k%*eIgWpxo?$F8H;nwsFbqLX@B#@q_|@n>E~O4C z9C&aC=m|zQjfK_I-hNfjjxjpmJP!RI3)^l zYfi~cAt)&NTGKe6pzk^HQU9$vT0fOf^8lAyD(*NPw5a}98|}lVoP>>!PXGI5A}~oI zTjaY2xu`!ju|OrDF1REF16EVROOcM7A3qbt%+o1oAP>Y7a(fzL@W?^}F6J^CN_+Q5 z<=H;f?|GU;p<^ zcHDRP{Hm{?0mo8Tv_-5W^|K;Z#t5CB!BtHCPt|X*6OBlN_HgLLAOAg=CEYKq z4<4%ye4rFdinVOaVP;9`t>v;<_R9|-uGTuW0l`!(WoLTJ6b-%&oznI2<=T)t@2-NS zTbwXeO<1yWq=yP8Fh^$;a{ zliGJEB|)QR84=T5A7A}PZp$Cp)Cw-0(CyUZPE~+XGl(|_(wtKGVqg}I&F4!xY1oCf zkcnBtitPiX(Kzr0#T4$}EpW;1kAEt3dIPQSK6l`6Quh~<6AKN4x#`?s&g;xCh`!J6 zDN4jW`TI=3<3P03jT2`GdZ#e zRG6lzgLgUf;hifQ_ykP15dkU68+cE6$L_Z*p4-`82+)=(-pf4&jZe@-n}SlDv7?)s z$|JywR|7$Irp#lv4%cs;2Ozo?XI%CfGcr9d&AJPSYz>HNc(BtH4O`hhC?h0%G-^m6 z#AdLvZu9U(Hclo`ctY-Tb8=)+4e4Y9mz`ba;C)*`Et+aKhR_jRJ6>)TXF@Rsp$NWj z9diD?2_!xd(cS(y!?AH$)x!QUoiV8U(%|Vnmy1_X!K02Ix@gB{oI@6g46>*NNSvXa zF_ZQBzD}0(#N9uS0C?xk*%DYelS;JetN~hCe$O z_=r>_Wq`YzEtKN^cp8Zf;FK&reU=Z{F<^TU_su5=gb|HnsW+} znfW?!`a`2FM9w1%$_t_Pxd9^;2`KlT7b}I);cUHv!$|fvEnae3Avo>u0H?S>-{7wq zEHG|CV!C^OvCtjut7Ve}?!x*~J)dF$Zwfsjio0&3mn2*}z^BB;7*&E!fH@6Y+RG~t zI7V*(kOGiie+|k#bbRG1fX<$iBh-TSQF|pm=>#C5X$o_ASn0hJpPq04^zo&Bu!_ex z|KP+P@9!e*O#c21Fhu-9U3b{UgpgcBUS+e788h_*rhl3VVr}$Ou~M2b>*6s-)PZ#Q zFL2j;yfF_(x3sLImu$Pv5z!yF8^ z@)B8+bzTL?B+wNZLJy0*w<`>^X`pFn1LxWA=i1Lv4fp!5AYDQkl{9PJL806d^r(+w zb9LK+9R>QQ+0?8UD5HCP?)2c;WN*kOaw3=|Y3T9oIJ%)OofDUN63x$l9nVJpt9#r4 zPX$i-y8LdO@)qi!|GIeuWbF3rUgOU+JYW3m@_WAA6Y-C!n9DW{w-{Wol+>+6eRuw` znnAmH?01+`Jr_Rkwfh%nFhY3Lg9gxbI)H@l-1we>gr5in2q3u<&3f9}$}qa@nX-uH zZ9+MME1RGK3B`6AA-TX;UZ-J3;SA-42*Nc8&_YsaEM(7;w4Vt#M*W8Sx=zLtrsho4zJZzEjQz2+1lwCSCCw;8EDhn#(&Dqw+Z z#ao-BEZi%GhQ9&mFtr`Kmr6#z0Ic;j226CR&9dB$En?k#TymR+x+hMFd?e#ZK652U z;ed{iyYq^&s3k&Y8ES>!oS&8=j`2wV?Ftf_JM_itZ&g8Wp&EqBL^}Lf7HB05+(H+{ zEPceoHUPf9<&^xf&HK$i_SP%*%eSM9rX~nD2xJa_zKD~zqNNcH$!s+C%I`T|`@k0b zy8Eb|F>DdudEl`HyvKKC08aS=&1D&j;(3jh{1>G(bV6n2{fvL2QJ8=II~cMan)#e# z3-U|$4G-b&lR_yHX1BYF$SI*?$DpN?Z?c4>BE@%Ig;1x3{*0RN{5q+-k35}Fkif+r z*v2$XBV$fh%|XJzc^6uiW>&9I1O&Bi<~N>#^L~9XzS&0VMv>?~KOXD)tE7Y1L4p*r zPd}{Su^0Buj(AD9zaLg8gt`G(>U^~M?Mao10HjC;5~i_~pL)z{wib5P<}vgx*VvG#~z^DxIKcGm8S41%IT zp_0)b9D2)jg8d@^w1X&iQ>Nlrp4fGTJ2|Rg06A7O%#dF?ap1O~@hW;o-?y8?$X|6r zbE*x9nD$%+BlBqx{Ah+}d)Buwp>{R+=w#|8(8GL8-CMtEuk;AiEG{>=V`P!zs;OqzL zP7x&bJ{7_M54)sf-vtgPIyJ}AJ0+VskdHT-L9?$_db}WYpO7h=-hJAt2X{X+*d+XBmY!kWxC5H*k!<~u zjLu174juuwmE`b@+&8yX%+h(um?O0I(XL3xvC!v9H6`YsaQE&k8eIactvb=t8(3_(LKYH4Ok_ zAKwzzUjvr^*-xK_nT)p7^^z3T`uv1^T*-qHgdNG=suT6~4Io``mV2VLjUX=Tb8-Ua z0;5%Duy^1=BUQp^NIM8VZYs&g!eS4vfn7E!E&k z1*89C{!PH+LZnowN>Xt8RggJu#T5g~TJv}QPSlX}ezEAUDpU2|+~ zj9K1CzQ>G`@@Ju`nS+25}NKl zvGPB%-YcP6C_fEjEYFj<2q+ct1!@GyWL~D0+;9M7cB;BiWGS5hVdgn*%d@BEcdxT` zzhV$slO@}WWeByt&<>m0+-s!E_0(sAv6$#pONPFIuK!3&Z>~_62KC%_o1IR;TMOyO z_!K)B^1f8?y4tGFqX9H2F4g*%-FgQYw>CDfaKrHdvzsdczRaj+gW4ZADt$X~hee|m z66p8&8_Otq^}vBuneS267U(Nxc-6AEb=Fou!?fC5P>aDkoJun-aiBoz{7kpQjJ6sp zckxLlC7AN)e}iz>)?Kcx5bs(vFxsz!&Uw4#p@eJhFhUx1F^tr%En)(Q7#pG${6=SJ z@(nNX!%RK3;UastIUIc;{}kb_ZKx_5i^b|F+jv_^#5L*%!DaOo?D=eG^R!vn=x{A~ z*`dXsAN>3usR+;|(}nWa5YKGl8CJ4-T_jm9rv&zu_+E<}p> zG>orof%*iW+m5ORW*_oowHEw+q}g6wxJ%jIk-c{g+StBR`AODNg?| z;XJ*z>CAVc(H)&%pZL*?b)nJha@G@Y4`Miu{4itQc)hU4+y(q?q^duV$CyRgrd|!E zYv{#My&srXu75kb=N;E=LhXQgqXqoJ>%LXg4AuFFf5QQ9AlPP;$I_eNl3!h2Rs*0W zeVQd%fb(;{^utpi?F%S>X+GJckp`KX0*is9?m~}aG1PdCKr)TG z_%dW`(If;kLkSaFwKUx$h=>dSTGJ)H0Y`;cZ%sTT--1)N@Rh~zWuG~lLLS@5%V6f3 zD-q#@jcz(z8FKOxbAGfzp=1}3kHZN$_6g-mV*fn=3t0{sjX1~LAt=+(=HYre$~`{| zI>%X_&1?tX=ncrH$&F?wxHd<@RsKPvTYGu)ECMC~-Ua%iy29o;sdrU(<@1#XpeO%a z$$zcdt}eC_>cp@*u`RyGLsj~{+!SzdtkzcUXg1IOCfm%H(BR?Dvgv5BDq2%W!B#?| zO^5U#X=D_MPj7w2p?7H6qd(=QbR?c$IKZL5K##xrenT}OM+DSi(a`RqRjvVGEmydT z900P{y={A)fNBwhU#|lC4pw`fjQj(Pg^y)KXmPCk?6W8)(d_8l2Xt)!=iZ z7lDU4FjTOCjopc5N@{i~s5@)gh1zI%i3brnIn73K^%Uff^Il{Jz8aLeLIqxBcA%}0 zjrI@J*MQ;V=q2II?y}W`Ich24$%Ek7^_5< zt35KGBc=Hz={V!NY*g$3xO|$Sglaa@{W7nxSP+-|>lHwvHNe`lf6toQtkPfjd|#-| zqP{~|-eRYh(zC$PUf{zGT?`1ib!gTlAt#CI^mi_w)Gk1q)HTB#%pr4{wP#|qO9KCT zJdjtiBl9wSjwlAu~n;lG(YcyTuti0r@3AP zrGnn~@n91h3y8A{s5DV3Y&-Q07y*A7b%Z;Hd2Uf5zQE%Pd2iKAR)|LyP6ayw%=K7% z6ge@Wc^{*)hxP5vn(UKyptyMm=awH~2p46KBuo)Hg@X8KFOD}FO%{NWE?7b9sV#3y{*9YD$p--g4N>b z#_v)UFr|?$b%bX`omjEtpn@8&R`X$&_}v<&fDS0Rj5GOmJl2BWCM&%^h@35dfM&dc z#(Ws}JlAJPL0z{l2y>*do|joZuiO}Iq>&sKYQ3QTBiWb!0yn#%Sb8QH-gs+lJ5(F& zVhg1N$k%E*y5Vq^cRVE+htnUq9 zaB$>I`!zNoI#qcdmvln@Eh)O?q#}FW$QizJ4qO>8aqtwxP)qapN*&Em{FnVZN=f$b z$VmWK3;iDV%3@pQM^s;X_YDiVAO6_chYen&s?q^Frctc>^NiWs6h_;IfOf0{LS@z| zVp5?W=+FqY>!2k6l^0~0Mj(r8_$>?FeDaBm4i@+4{-GSq=%CvwO$X6T39o&HQ;x!W zI?8wBg*-Ru)Fe=2F82QK!(CFBhE{fUeB_`5KGm|vbFzQr^a^#Buo7E*dA-e8(y9_H z_Vq_9FEplR!a{i`>5?7#?+RcC5$O`)rC#$*!Y(Sd*N-L$bw!Y`V1}|o1*`Ao2zB=G z2zS22wQO*H-0q{>u#lUZwmsMb%5&kovv0XLJiWbOwV?4J8oVwk&XgVlJ=MG&%}hf6 zSr^FQb)?&+c>N7Hx`GI?{|z^c;&kqR!#+-dH(U*;jJ^`;mcToE zQ;+ACsrG9q;Ep;%buG5?Bbt`6V*xaf;d!Rg`y^R^4B*?I(AX#zzKv@|%J-uzI|>4D z3W~J>a|nQI8xYml@v)fE@4r(ZIS%>l+{iSA-|Dh}&B_V&^&S3Yip6|73Qx%a52f|J zTbCL0PwvEkGwMtj39PxtV{B@^XKrmALk(1jwCQlc_BKJ~eie1?zyM#Vf;t{}Twp4g zr3oTjLc*1AAKH(1`yc}E$ZL|~M>8FpMGgvH-3L!=)MGrBSDX zIr~X@x%2|$^L&?Eykh@gK+qVLB5vWom1mN`nu(3f>H*=}$3{jKf~M{IAt|3mue6^h z?mnep>bnzg$sYLRJu6~UMAnTVDbP3n`B%pGK1ijnIKu!L@Ll)kC%sfr8)H7uGH94G zdPW`^1Ab{vUm1tXJVeaD@{+7y(bXf;1;QfP3~Sd-;7jdR*rjtANgazUJy&ND8j&^w zcC$IjGu|(6Mmt;eznS#@%Gr|~g2fAD2|{fmbijso$~&9Tq;n zzWe8&@804{OZ0)&XCRPagz^aJ+ld!9-7_Z{6(%I(=#kU@Gd;2= zO|_*}gTz_r{R}Z91pvLlEDL75UeI~$J*kaBr0XiwIOb+iS)5Ng36Y0aOSNX0%iZ@2 zJ3%uN`4O-+2uM+xH;a9UIJ==Xpjh^VX8>5QX$DQ zBb78`DGAwT(7yaqZWKwSm2j(D%3ywvKfThJIdjhQe4p?4^Lc;lVMRk;FOzgW2c_D0 zWaY=wza^2*fiT7nUgKd))z7(Pi@|zE*y@lCdl?oYmt%@`*d*xudny3tO%~8`tTWlT6kE9rz2no*x(q)M*R3 zGy*>4_xxO#u>_@Gefs&b5Xc$V9}BPoY_`e+WbGs9R))xTiiG0V`jFBkSF9+$W*MkR z2mjKIf>?xY*7+c^(|{fy*7H9uEs7p+FT+kDC{W%9g8vqK`&M@Di!h+QhcWbIQD_z= z-E#5$GqQFXWVv6r`x`-9jU=z%&<2#NPwhiG2oTD9FnTna!@Ad8)C&-@wSJ&EUzE^Z zB1lu9`wtX@IbcZIjL?cGDg9G40EOy7Wz?Jt=9G*1=mzmJ7z^#rv=WWw!}<@F^x)Xe zFBK7|DVN|*0BC#yv!f~kvY%0|Rt}gsF53(#gQ_ZgDNt&SYSq1)zJmNh9({!sc{rMs zq|vb{s5dnl8kdKCWDuOGzM9A^O4ncdwgwCwVY_?Z8s#HkZu!GE+8tQ4B>g@+^oOrI(d1kS)d>?Dg@ ztueZO95k0DUeLpYbmSgab6$Lgl-R?%@2)$4PE<&Bxf4Ns0S#I1O_?i=Pmb2&peF1Z z|8M>7et-}<7Z?>`q+b!9^#z!ao+4d0Hi}vLym)Tb?w!Q80W!JAfPoggqjqHdRbRH05yzMG6j0D#3u$)fGDI zot@-PX#7!g8!HHKfJ4nKt)2@Yzc@%(8wurR>|pth(}1y`JM?_69p(=1{_3728ke>6 zWc43uY0^O_)mt3Ml{oX}rJbUjlhDBp6OItf*zX+{&r3vgu3)&B3I(lN`d>JucI~kN zWnDR3N2|KjogkqzIak6@7%_LA^u9WK=+GuTwQ7J*Glsofs^1CjfIl>xmsi7O?Oj*1 zr70g+o83ytlk4eziM-8}%f(4M6F^?HnK(=2dqAQOlOjg4GW^6e_urgR!6+I;WZg6i@-h z>?>jMu>bkDZ|{2xx=3p`jVuElpjMIJ2Fyy*412eff36O+0-8zv>54_eBcPnzEnmGJ z5P_P?eeQ!P=en^VlT28|O-%`%BpUV;2f@r!s|mYi%6Tfk&cFgQgj4P{|3sdGF5IOL z%3&kcmi6wZyvpPe$(Mm4-AZ-4VsTCE#k?w^Bm+_|y1(3;ns>S%(~`C2(8LIrfMLaT zl{RzC*YJ^LdF>7nA93y9*|??*+Nr82eoob{A)TZ3Z443nc?~xg*(=)azuina--k&- zx!Fls?6Ue%5K*h^>xgxxhFyU#?3EEPk-1Hmg~PL;b7!8vvk^4;cRtgJ z)o{M~ErxYwt{Jeh>|?NY+-7%p0jUl;-d0&*!~&k76hF)uP8yL+w|Kv3z=WnuVE`nIFkEYGrDIXSDi=7M(`1^9%8?)O>n6<^o z$iOZx=j!+=TkP(DY5!*+h<^>IEsP-lgcPuLq!ifr4}7{a!Fq`l&#tFo-3-poZK+qS zJ#$vz&R@V%H^cjOs&#|BqgqK0k3vSmXGIz#El;u1>YOurHyrWVub&nu33QS;`>Xn?Td3SY3YndWs! zPHq2yyQRU+TT{rLT+yiaA+65xbVf+pDr?E9=>MH(V!EAz#Z;KKpgr?w^M_JJ4E zhdIkhy+s|0UaQ$9;*an+pN>G0d%d0$Q073XE4@Pg0p=V&{d6g4eYVyv^?#}t12>U} z{{#6X)N@gQ07@wX*Uyc?dQc}7%<+g_pPtUwSTfjhv)EZPSyBUSO(_l#XTd%dTVP`$ zP`FBU(rRPQ|9%fjk97$ptI=mszO6XNXXQ*UrdO>G?pDm;9CLGDv!nw6OC)@lJx(uf zDypEXN`8nbXr)yKw3v!jR}~7K<6*rc1q)w1m+VAqUTOCMmN@Ii^3QXncu`)S_%G-j zvMQgXbWIoQtHCGcG|j%^nGNz|-od;riRtrg%-kADNf|UrdP1~k?CCsEoV4BuGz9?p z@_(`H*I)RwNw5Jq>U1KS8qP(%rPtLsdZOWueP@9*Vsd>FmIfnHOX{OK1PzsKhF~&? z7*1w!#|sXPsPOsTdKlC1N^pZCgGZ0e2a5&dc`edsmT3d5q?~i1qZik;>GR?)R#o%e zi^hw!)X4p0WR?DXHd5f_9mW^P=}Dk8*#yF6L@$y8b9F0FIwJALyIYTt!3XWs$&`kQ8;C4m0ja4;BZSLD(?tKQ6o5+~B z>~DBM^@Z^EbC$I>03Y+Z%fWe>TKfA}4;Wn8LMdi+@)6}6gjhjwRyb?MvZTi+1TsHF znWX+?#BvzleAz3v<2Y>#POE{#pEVZ$PM5+~NlH?Z3>{xLBML}_nds47v1J^l3^_R! z905m1X-YtchB9p(XI%1Ek$lL{#tz#D&+C{Bc@ zfBu+dST1ySM+bd3J?FCa++Bz5^#rS7Tic!Y#@N?R+R`5cJk$45C5S_ZQiGPB)DW`& zp$FAAS`*fMs<=0#60D@Vdj@`(v9|hGZ6BE=baq6f-(!3M)ohJnL@q&dLXS_@jTm!m zuY`H$t3h|5A8TTmu#FM}>w_q80REM*Z!Mpt-+p|~*x&|jP(^hbV@H{-#~y740RXXU zK};6(e0$6R8C5%kZtQ%fHfCiMa5#&BZ|-ybk1^H$jwvB)22xEM|Iq3H7WS|(wKBv$O}ViCYDE2;%OyY<@%PE|j+ApGVsjzM z0cReZzRSZ;(DdJy!T>JqDZS@tv4tXdD7&6?c7(TjG^Q*VALBE`t`y?5z0j?jdywXr zyY=!6QDVQ-n_HB0O;WED>3kVp8Xmtl_>4qH?q4@n{b2a>U2n&W#2!7A7RdZf8ZFhFWBmGjMos|PC8dY_D7yy3{nuKdw`dt3C{0b z!hEUvO-VN3B*WzdZa(T5Pf5eS36n_4L&$=i?F*jiWAw1vXt`KT?@ry~Nx2>g zQiX|)VV_rb_NB}Qx7TQW^%pktL3_jk!Is*y2C8dpmU{+3a&G&Bwo#AG{L~!z;0oJP zvI|TPAp1#)K9(`d02pc`gSplGiFsgL41F&6U~pN|(~Gu$gNu`ppqvf5sAtZ7ZjGSo z7mffi#$kvyK2a1v4WFcc`h4j()<*Y^HvK4QO6sl$W-A1?jNx411JDIBWL^&ihE3)=86!G_FzZR<2LkxyS zli>Uy0)nSV^+wfUq;ms|zBzIEYz?7Vf|S;j@;DmS`+!AdRBZ2tjbaos@;c=qqSWy+ z+7&FC!QP78toPlZB%$wuJPikm4(PR>rF7FC^!@@~N{FU+zru)cLs4aaX&)QS_YyML zi$E%8NzdCtF?c{C?N3J4^@6t6Jm~m~xUdI6=8cc=h9=je^oS0o-5)dykn};%nE9fDpy^OmuPTYndXXV|kYWB3$XfoOpF+ILO&gA= zFmRN2h2wBwyuuZOwn`hr$ya>0rYjKW_A(+3+j>i7+hX{^)Qy+to)o&+p6TMhTg5PpMb=JVRh2_GsEz$Lp8dgR z-!raA>RJ+X2)hHn&nrof^90%In63T?W6mzWzE3$`;FLNVJ$liYGwby4sb_g&77lMM zwI7FdL33`ioPxkV55D?&g2(2Cu2}bm*m-Os-$xcM!S~_zadx^`(FiapbKwCGy z`bDrGmv$7OfzlXXz)^6U3Wuv6Ucv4G=*H-W{!d(N_N?%sqF<5-RD>ja0q%oTFQ3mB zz>48xQF+FQnQ;%_w~KPg$QN>fD-3Sk`zX~ymb(_5-w#6R8#Nce(Eod5V-l@|!Av>- z!s6>s#qK;vDgKi_{O0>JAl-Q7&Esntpby)O*3BX`X&^JkN<%R3bykeBDij0xHZn{H zIa_&1PEx}z=uza4i#T)Z#@Sz9-5J~Rc15-sA=^Czd_P_Xw65QKJcYziH9obsc&0{(UDk9vgrPBvSTyZx?=&Fy$6dytcIw?tC?&D1T zx2Z7;2SE&`2h*i+9P7`01wZ{k_UqM7a`-fZRZM#PMqf&7kuxRFRuYKW=g{6}f_54p z{SiwZ_OtK9hZe%k8}0J*WAa#E)1Jmx*;Bg3rExuA^7=zRFSv0L0QAd-z*LX}eRt+1 zP?9tBgHgS)7zMe921VWx*3Lk3mF-;wOV~bV=|;ls6MA1esKU|UM>!S&gHp462c{T> zz3+3s?wT$^5w*j>fDvlL=9Cywb>&}Z&0{5MgzG9y{!ld7 zFlpjmI*h$IN~y)M%HJShkRCC~0T|KaHu~0)wSU61wx@jEIabv~4H)}#5E>)NDgL`8 z8le^Tf8n6ZZS$Cl|ACcaQM}|J{|Oz0BBte`=ptBU)`E> zm81y)mcYpRE@wf5$T*2WM)ImVUX?5)((z*PiJB z*FiG7p2lD@*yU%hjoNwv1c2_xGcAw(+x9<~&d_23 z!A_`)(T$^OA0y>i#W7sAf02*FIBIwv3Y?iET(zNXOGMXajK%;y z*Z{tD`)zLHyqG#1M3i!_y16dvCm=hEwYVl0X76rxXepp#p17dlKlyIOV?W* zA2qCljj)}fWD(CjxQ5h(1D8;oZJR?-wWY+3FKg19Zr70%C^I6(u3V6q@Zt*1bKEx3 zJlAUR4~V_EN#rj-eQ5xoA|R&Uv~3Se8@Kl4OZ4D|)^i=8hB26+IgiU^kV(r7b_CD; z95_jxh4oFJ>SHU0@i86l<;;R53G&}1DsY&;m%24{mB?5Fw1-b&OB@;(oF-q!8VfD2 zbPP{6cDE`N`_i|XrZPlzxz#ug9OxcEK2Ap#XPMH#V8o8W`uwzLU8<c}-vf({>YvF^3x$d)nf_{7q>+ufRuI1s5+pU-!{e@{F8!%mvG46i19+{%smZ#dyynoiib}Ib9FYqJd^r&ETV#G_31T>x5ZP`UC5Q5x8Z<8ssKLE zuRObGiQ;!ugcei5-Y>Hbe^1W|HPA&@^4a@*C*6??+)Pl{O+j_zSXb^@W-N+Obg%sk zs35b>J1{>b6S@)B+apUsJBz?H?0p_mec>5-YuWK1ULFcmt4w1fj3W3+uUPGb3Yz z!F*6!6b@Bq88gET?WeN|fZHAI=}+Qe?+{&Nm{$6C&r6WLQU`Z<(ZA)ih+O{nTszGfPn(ors3?8j^PmIq9e(2rHwrb*Or8o+7B zA%;u`zsjk$h$6hY*Bsb;7mEM6>O(p2pto%Pu^CwD19gwW0M15OlS0%*5Q58s*r+Q+gr+Az1a0@|is5|9nCwXWo^T-0ddh-?b(1vBVmQ*)(^6U`4Gj%S@$)gON(D7n{dE z|IfnA>x5eoQmS~hmdm!b>(~j#Cw0i9pZ>oAeJ(>a4kQDpQ4XM)m~bZS)Gj?ZB>hnr{YPs!F@$~_1+$U?QsmcVw_tVv%6daAbdL!dp*o|O4KGiW9_8%6nU^!HCJLkTJ2 z`D@e$#2wl|-rK(GYbjUhvjNaybb+S@--`>%GIf8HhY1*1p*Ckvq^q#bwvc~QP1dH; zo4I-+IVPyZtlnaRZOZ;jQ^=O+(0y$O)m--8vYGwWfuJDQ9ULg(a>$6d6z(0KyElM3 zkB5%&2mUi8G)+i-@6abBjNzF!&Yp7Kj_y+SqykT6T6wYg4A5lO0RqoTc*>j&{{pia z46v$I1;FQvo=p#-bPoAdAlU3Mggq&<_a@vKld#9&X@|G@-|{G)M#UtT0TB+2mD?w# zLITgC5+%4}?!&Us1djKiSf{)=VXZSHv)?f7vYxFuS2IXD*T8ueiyghE3K|PaKyXR| zBxsKGYZb&ZO4Qk7F)MZ-yiX?}OrY@8;|oq<1~t2DDo?LEBap zu!>rk+Z7SJ#Hv|E_EHIR}%@D`wi2*0Vp z)bLAiF>R8J(Abx|9amElSA%MV*~mtx`6OQv)!7$KaI=ODco&)M74?QCVCefAiguJH zPo|t*(E7Pw%y9$JoQz_MDRPlYOUPj*9cYn`fP0l$R%*Q(XSHVcNS7RdZpJ#5V)D71j0ztkE%;=W)_Gvoap%QH$bXF1v(`+PxB3o)LBRE5&%DgV6p}uLLq0y4q-EtO;ii^Ur^^&fs&krT^n= z%zmD9>cTI9XKw81M?SzW^m~6evQMHgXuo!q9DWX+e)rAbkhG)D_m%hnJgxiJs1T99 z-@9+0|Jqaf>U@+^+iL5paM>-$^v?|`7b#tqs=ksO&Vup-TMqbBwe_fZ>Aqo$m-Ss!_|HT_7LFiT-drPt-C~oIB5F7rc{SPG z%82RN|E6q`LT{ya4o*7+IptEbvIR68J$9d20>+xReQV}-ON{AVHJAPZ@Xy(8u9?dL z-8H%YL@|$5*KlFwU!}1ojv0*q^i0sAx{q*gM2vQn0Z4>J@Icnz6>CA8sqfioT%(06 zwg0$=&*sXq5cNRmcY-MxX||s%@HCKdWPF)E49`x!e~$&wf;KG*+zhNIZRQy(k?V@@#uFoo}?fwFqC9(GG+A_G2m7ZON^ z&0PD30Abm4aDa3^4$Ya|GB}%Zy*2QqRQv|Av{)f4q@?P)p?q>U9$La~T>}JPEOhO< zjtv}^H*H2!+}7bUe9cWLymINWo4JIF0q|Q#>0TN#f{Lw3iUaHbvn%;NPX%$mAOJkf zhW9?a$+1f8JP+Zt9Z+y0X@4^31pg)ppwix{dpuI>vWLV5@T1o9&}^P)c$!eM3epdf z0)pJg)VI{grV!?f^&OUy01(*$lfKz@f!FF511F9Y`qVnJufhldqb9fb&0a?>W7Rz% z5|I6Bw=FfkNOY594Upw*(xz0Z7E z#^jBRtQiSX@4|e5)(L|qcu{g$9 z+#a!nay_L{%E{q0*gmUlPoGk{ec-*0tUUu|&g$RtP|y@q6$Skn+65NWVK@*>^>;T_ZhM8>Dv4GBe@9uJx)u;DCbOm5DA|j(LeyI`u}J`I&7hidvEb z>sPB)1X9p?C`9NyQ#fMz60pu;2k+%u&W@9OMMi3LbzF9_Q_+TZBHb?8l)2bs#&}2f zbHV2tb4K(#V|dKI=cy1P@W}cR1%@s>c4PEkA49%uG(gG_6TNO@PUhY-4zCDJBl2Y= zLds*MJvTMp%8Sc8^LgWYXppn&=KCS_39niryd~ftt?*Ve7bj=K=T$I*{Df1Li#Sv9h{s;#4Y}$!!;}@VAh?OlZrD| zSuOw!1^rv~%i4_4OhOVaB=s5@6t12fRF~s~ChY2QFhQ5)v~B;4$2{o7=O^izuz!Dl zUhhi~9ww!e0acP^{U~X?(-<8$N*Aj&Vojr;0aOp?{fOmg@^(WM`KXw73B>yqsY}S% z3wy$FT0G@?J|lh?|C1KJnyo&(%t^jo4YYDsz(j2UaM}(RqPAJSazo_24N&WWMHTIN zn-pWn3^;N>MU^FA{7KC}G%KInD}5-E4>Fa2PAB?w(s9Yc`rr5GlFln2bFae;+s?s$ z42I0Don~xNXiG**L3=f7#q)7yv*ai8<49>DgWrVg7Y#olG^w!Ja!l_iLo^Ja3I5Oo zT8AuBat&1qX$gib)cUE+e1#m?CUMyfcy-*;DL>1ENXbzs1UFygM-BJjho_9mnuRxKC#F%ZM`?i5D9eL8D(nTV!2m;- zq(r9S>+r!0P&JM*j zK8kE*q6!#0X)^*YFNzIT9i;8RHO=&(tZnX8z2`2Fo!kIpk;xT{!YN4~U0GN(7Yw-< zt;xfP__8Wx0x3BOPhYU;%?z|Y-WI|h!)AXzqw{SPhS9$xaN2pO&m)Cp1@>GOr^1cT z_IY~qydeRc+`enY>)5J?_^(U?*mPPeRF}nR(4w@|#OjgnMp!R>-CTP=%5`OOv}$bg zE9}Vd$zhthlcONG7W2ILf}>a zqD&ba%pDRfK1#SvLH*h@N`R3ntH^o-EtXzf%GKO~w?cC=*zH*Mga*rDys7pik1eW= zL6ON0MQo;@Q@Pc0bDnz)lN??QXM1^Sc`1sZB!|mD%go(Zal9Zf-j_8J$OrRuPAVI_#;usWqouI9!oGCOR zB`=y|AWXPtcK4)$ei!HvonZ3~9ubYlrR)SII4DxEN4t?@pi;_u3Rar)3?zkjrhs)< z%DVIeP&SsqrF5r=tY?57HVR@gf}qXWr5ENWKJP z+T_>d@J(pmA5IsigHh4lULfhX2qgwRK5R`n`yvC%e2pQR>Nb6fHwDaux)iXfG>71*4cA(iJeTiQHj?UyJ=@as8m5}bcH^4q zaOl%n({^a3gZ|qw%#VRaN*pCpE?C>Uw4=6M=A6fuCbJGH4%8;mKsWau(9Lnz`<9#ozbpRrSEC7Lecy5K+Yb|DuaG|JrcD4v z<8{d`xxQNtY;m_6V_VqgW=U8EuLpEe9L4=Hk*UTQIR{xy#?hGC8pc0F{MOMT2<(3P zqjN6FSOOXsIsNL2jK{Rkets`P;5Ldd)unM0*o@x=J0l2>TVpW|O1RIdS*;aGTdMO* z#o_R*;*$ZZdce1R!tPTNfs_jVH;hoV?x_0Su|h60+;k{?nWy4vcRmN}fDT?e^zt_4 z(j0r29Dcz-F9emEzHF7uBY&O8X)(|x^+WyL0*~ecTgi1LF#2H5tb11|*Xy-Clfgp` zV+$_(1f5eHN$PLHXti_6-Z`CSSx*ax~WTk>1sx zriUhDfTG3VggrsHBJW%_lXSL&u{|43gLFlmLarPlC7n>ddxsG8m-A)N)a2WX zWgN*qRN1Rl8Dr&U?bq!+LEE;gv#Z3IyiT}hSr zD)ceZ+$0kG-|NLC#S=IY6P@UNRT6JBI_Ax3WA@`--SU+nTnSa{{vE;w zX?}00;gzfdAvRJI_Oeme$lUlh<^*j#U-Jld*t%@#kyFykCrV4jD)>w3JllD1b5sUH z{rATi%2KB81_{aY!}f2)Y5MSxz1-;54ges?EUaXs4CLkxC|e#eG)mT9g%ZW*B3}~m z+<{~*D3R$mZ*Cbc_bJr*cdd%`-qH$R*y`x|3WZIb4(<5F1SA2esHXIhY z*w|QMZE&3B)$S@%vG`zr7&-i!?t5y!pTIrqGEIZiP>3hIzvv-V7bZi1Ajcd&_G$ai zy+JW>0piJ*U4qwG;aip*0iFwRQ#L~LJX?xR2pY(Ky7Mm}a>logtK!Q-=&~rkw%p&izA!*{5#h(a9DPnloY@=>o1;W zD+QX3NLh6P%6(e4V?v&fP}k+!E5$W(_?rKJZk0#DQdyX9UWKDv>euk33@QEfYX>nK z)?{kb<&?5w857S6*qJx5pt$US$b?{|F^plaAECKwVgX%5mtc6SV5&h%Zz(U%2 zeZ-f`n(=vDgeh$vTH@rl7H2Y+`yLK)0FhFvPHhx{jn`ETe^x|kDxCp(19D&7wxn}x zGGBQy3@@22#io{=*o}GMW-AX1m)ga^`Op}X|i>ePotped$Mj5 zu3^CA`=2h0wHMW!4+3qTF|;Vq&ohHZ3lv+x%n*LshXa(_-wMqK7(rOFjhJsTNi-@J zNRdSy?ru8z1I*d=l^YT(JPF%a`x{6D7K$+uTW8&>M`-1Sf2C=fd5AvOcKuei*2 zPp&17P|_%2O6gcEiQZp7_wCMolaC)>z~C}B7jsHJQzK4=Bx4a-`<8yjxgnGAY<5t^ z@!fjii|;awR~(VEbhcz|9)vVJ{qGTRXulm>U1m7R;&leOKNO_}r?3pcA_# z-_gUb4qo7~wR%(ben)YGHB!Qy3b+5=;OGw{z zl}`jATZzO?E~y5?SGP-*(Sio9At~$SPk97oW=7>Wf#ooY`ulyB>B zSvVY=^D5KX6I3Ey{-08em_NTA`@r5IXQx#28)%gVt1eZZu$0UoYwtlN8#@PUCCku% zOw-O7p*nifl-tX}i%v{9R)8ZvU$(8;EK^(>Toq3apM+ZSF1Fm4A5S?*N?PD85!Jy7 zPfZ)IDZb#E1bV-8=XgSv!FN6ax=)bO|Fo|;p=m=$tFucCkxnK$PG(^+4 z+t1iV=~ldLypNf{%q!^6(#wuIIAW!wbGktI?_7wgOvP+%B_<~o)P5s z3YseNaI~jJHOvIDn!%dFZmHm}uyR(z?lju-3Of^;H-kw{=I^#TD6h2160@PayDc+& zsgcIQZ`G8MmS!Kxli5xHp3tkJJsZ3U4X`0z$;-#tWf3b+7A5fF-W3*&F|E@P z_Udw={BvODb2;ftaAqigevq{-e784H&b%of?o-ZNk#7O2Z^kTmPU_Dff#=;kZGtv1-HcwVivkl%#*>u!8mS)ii9^PEcpt-MhLk#11;R@CklDSb zh#%3kQyaMlm#IMd@T3C%q#RUy4)}PQSNE1==NO~3rCFT>cFp_PKVj2M8&l4QV~Zgr zvwT4o5r2b51LHjc_VK$OnYc!3R+6t2KY=fHekD#=NG8*V!rrdq#&?u|mf>zF86&Ts zK)V2o?irQ4uT=c4t_QRnF?438Su=1)^{N~|(BhQ9WKo|{jJp-u;Xn=_qR+>L);v0F z16mhs{fJZOXG+?eF9cTI5LmeGvIYD^3Mci3lfxZQN@v-{b(HJpwSV>EZj~@QF?F>? z0*`hKAjsyivx2&2%ISGMd^dPN=J(ErPP8C;_vhM*y+u5Oi3CGtvR# z1Cd!l$sFdf733 zIjaV&$@MU|qtM9jWKN91$4^>A{f%c&U;02vJdm1miOFnz6kXn*Vc2Gllp-T~^SEgF znnzE+3*Zw-T!454o)+h=-==b5*nQMb}w(%Brg?)&}8XA+n!sq(9ac+64V(;M!$ zbGiWdPfIZOnbvpz>n_*R0de;^$gyWlzJPLlaKyC=G%AX-VnaYJTA&~jQI7@+qEWjJjs{Pjy$vtZ&wZ$V=oHJ6bI3j2T0tS!^k4Sd5j4)Ey4CiK)L(02LX{mFHPXvfxDLVccx zGjO}teuPSEy1HMRdK%Rt9FU5B&1ZUkSk5D4G_o)rM~ii{N+v0QV;F3YVi;Qv^_}ey z4W}dZY99Kdqe;5ksXup(n)_IE-J?Mms7J-XY#b^(XY(aW`> zgG)C-h0B6qKljQ5i}Qi_6jks0F#u8({=K#P9bIuE+Y|!Eugo18+gE**_97}NU&e)= z&)9aZnUa1r&ts9p_h4K5=jD6@Nh#X%t=^2weCs<+baWxOspJtU=}eP&b2O8eU$50w zfrItI!^bZyoDK?_`og4s9@4k`Md@t_g>l=BICcL1^xPybqfpBc}P1@OK%L za~>ElmA!<))W;R}yD4cw6gZrMamNou+7)Ad^u!)a&A_r_zUg*;kX{~=f|GtDe6Zvq{JlXsZ*=Gz@btrfz^Rl^m}DM4k5mGK zAH&!CArT+TGS}g5Pe5|-{26?~p$JKHM|Vme+0 zcKI0SMyS*4NU9b*vOS-YIR;cjW9Xb50E&5BS4JRUU7fK);Pw=$x$e-9BWj5{{ZMI3VEt+J7CD%{NT#8H;Suy#}K@UcFGIrIgIFdBo)&=44FI>kGU>gF%f8xn?t8l+{;Mi3 z38z^?ydw*jgylRzY{tvujacTFSMEBS(}osWWz>O;W>uERcA=D>F0bbU+U>>6l}9AO z_@NYA#;6|GFr<2`_tY7bi>B=d_BVrl?OFK_r<$Ar@Ku6;jOZwcXx7 zPHss$DKb}lOezGmYZu+;sgW^3TaLyatjZ-=e>}(boxK9uOo@}~-s9MgbK|#NBxo>d zH^TPW0>v|x2g0?MA zy_!TcH2u{3-+$m&)8RteKh$Vs4=A?Ou%McTK0T-KDd~T}A)f2&yInAopDN74lnmzl z^H;m)UN&_X=8f%WQZMYomT>S5DTJyMAopnAkmE#39kD)k`T2@y{ztd z268^dS$h7J()W4hao{8hnZsACo&yNb>%0WOz7TD3;)Uj{B0=hQoS5f>g8Zd z#Si$JPq6Ufakr))pz&Hiw0{$h>^q<}%x#jcFC8ca!$N({hOVh?r=|3~(PC2a6pom4 z^Wv7>l0nqw3X{nNG@lQ|j-4@IrMS!yoMWNX+1s~Il+yjjm;vwLIln5*4JVCtr&OPQ z86rDzlfUi}P>{7Ptx(U1S#ip*`M-5yTfX~W0JqrzzlU2l8PFB`hH4Nn;9AgmcBps{ zIEUs73+-^!w{PLDnQl^+RsrtR-|#}Lg|%}#*b&$7t^C2ozFo5Z0~gRHBUNs~8wBgY z-oXVA2>95b?|O3hKUkb8^j`5^G6%WxVDdLErj7hCPLiXC{;xgmESGgYV_x`^SSg*k z!Ubz#FnIwF!nSS$2ZZE-Q7sSc>lHL7y;lsnetJ&o9$BwOxd6aX`^=#1M>T;RP`vt6 zERY2w!M|JTah7gkbK42ZwafSGdeYe%TGLckJ|CpoAJ7%>X)xr7S~#nTxO2*XX_>g} z1C%iB%9b^C^ME-#89uQq<(=0ZdC$j7qg=b^S%;5#oB?`K!9PZ@UFUcdbMfe zoY@v&)2p29D_%iK<{|^;Hjy||y2)wxJVL`m!w)KLxXi({3(~lMa)J!hLq$ety|&}` z14T>80ANWnQ1Aa!bnfv?{eK+a&KWyrH#<9XS>v1S%w4)kB{9@DD)sHELL`bb)whdp zH8#_)uP8~Sa@nLCb4^msWh>qLc2yKbU%DZbzNwh)_wlF4gC3f5KA-pH^?JVg+C4O{ zt)T^Jb)ehz$$4$)@!?+I1r8UC^1mESQ2tA~)LcMX#FG=`@T=wHamC`^LLk%O&_|6; zi~jUd?oR9B$#*~pqxZT4n|r$(dSV9n11I&X>hUh=SG41b>>)fxc>D+#O6}osJ&O(vJk9q_1M7D-z51wqtgolg_@`lH7FcQ1-hK=I)@Oa= z$;6+G^%V5H+2Bm`!?K{BPZI%H6k6139}#GMgEL&jBcbrepVr2h*8I`wlpO-;b|{tX z&dbfes20>MfRSyl+RESH*Y}r^t-#jqGPLR_?UudFL{aVv)E1D%g#+jiU!I8)sfWL@ z=nM8U`SQ!)!ulK9tA9wnO~|GjdQ&j*Iru9_H9qKN;<{es0#CjUZk#=QdfR~N`x+Yw zC?02yf2oVv10aB3frpKPZhLWD$YcU*ef@}`h>OO2lr6pjk^&mEjK!Gz354hPT7%H! z2muKka&o9FbF#0kBUpWk7?T-xvl4;3j&cU5lMd};*}MX9Z?6es7&_i!vka#rD$KdO z03hq!dQTn$uK>C13Iwv)$O}np&T{=?E$YU}UqC_kEcvT($f?GIr+W`Er*>I=wf6Ik zaSNRVGmeYy*K`4v1$yRg;$gu2waYwa4R}&LJ!M!*l1(FK?O&x%J2U2yuUhZv;Rl$N z$fwBr^FdDSYK`3zTy6u8H$q z6_->kkWPkKe$UjgXGC5?Om1O`X#dXJ~N2 zbP=%iyrOaUb|{Z@8hAQ2oJIcM**Qy+=((*RmK9_%i00Ek>vsTQs7syAXcmlAb3R{w z4t*dm>@}mCN`TkX$yyx9(FHUXJm zbc|$T!bCO&EZw)}xY7uC7fe{PdQw?Ph?3f=#z-(6ccNM{MWlqa!yqS=>iw?m(YhSz z5!B4+Q_C_Xm9@XFJ`W()ui)HUp=dc?VHv1i#`Hj26Ek`Q1nGruq7%P+WnEV7sE#XAhxQ zqiYTCV{r!k*L8=!2H*yuq;%!tbob9$uD1xUMaVxcZtuAC#%CuNNr|MxoednIYKA2a zxr}$xy=dWZ+7~mLJnB{SDe%GwA?HvddC$`ImUznA`^8{^yh+TX{rmeznOP+mjikey z1^YL5pG~AXlU9Kb6h7PbGy17f2CEIun0Pug?!&ywQ-t(CB+c^J3XI;Yi>etQ8rDKy z;8mxf)z1q>%bq0>w6t+zUwAN*u;BkUV^>Og=fI!*^$mjRSz;Z(M^2?1#Gl<-GZI5BT0N0T4*s$ zd(b)Y)_lHrJF;QkjT$rBw3rJ{y|{l%nx`F&D7C0#~mq@{TdzyTm>;)7C60kmamL#Ols%oipVnW=~}+L z8SUSsK8PXZi(7S@Cab;EeaB z40clhPlpEPRPS!Ha}>?C)9^?c@H?B_Z!;%>4s`fhP6UUxIH@iEu&1@+PxU7-o5-}f z9sB#qJQL&LRKRt+Q}3_Ci8kqtmF z?|%0&(X~C%Buzk?X2M2R&E#9~3Y7`oz$Q5a?Jm(@?#KPOC8Z!~2%IT4o|hLWgNwR^ zUW3pilcne00}m}v5AaTLaG=6IF#oko@&mvr>Y|{U-nDd~IW0idp00Pnp5pGy9f^xn z`JdHv##Cr@+}?RILYjkqyu3S>OJCf7VaZpZJFJ{J77`OD_CSkfxB_rEQDD3scfAbo#)uQekuPqb^wlP=o`_KOwagFtB>cEpKpr}QZ- z2~C7n(r;J4!2MVC{%jcMyFw?}cM#Y}k%kORd<#B!LhP_HK8aaw#u10Y?h{gXEX>LK z#uI~#S7umnK|l&F{)m*Q_3?Rs|5Yg`wNx|FXhVKd)k?zp%AveKlYLZJ78x#&K{ z+f0>7rtk+aO$!fP4GL>h!vB2`czHs{R@E#?=ccIpx`9)!nLOb|(KQf}OCA|+Udz!D zQ2D0nBb5Z)RdQx?E~7PKgmv3Y@T#C zja{KBDlwy}*Hl6I&lCSm#coCd$v#;)W0D;qTNn2y*w*cU_7y$b!6m$s(8B%`r+^0V z;b6|iY07E+p5q#kzGos)QgvUiV6=|LbgMz`C}E>9w2OkCjv=29a8_+8=^YT%2_ONF z92=lK;an05*a1<_84D+?k|jGgg(i^i%=>yB_gk2wM5@58XKHijyg#80?|zXe03t#Q z%;k^BqspLxpB(u;X#JAHz$r4z0%1|u(_otItc=K9<-AX6U|N4# zqVRY~B)u(E2)z{rZ%k%{5lL$cJUOKCaMXgo)s!mWOmO4@4PSuhX)3JzRi`H16x6MU zs&?9t80KPCs0p+!G|+yPa+wj#DjF$BHp8#5TP&I_9_ERCK~CK!3wy##jJzyK9|S_8 z{2T7qK>Ptx@*u60X&M(aUH??YG{`J5c@!urE+ZjeV>j~a1L!AA6MtGXgw=v%5tWOv zfkmy>V#&)#(h-|D=gEv*!f9}o^^E`|<2L@@R(A19)&~K{MS4%%J=D`U*nskK@ke+_OX+b++6y5PO5gBIm zjss@eElurj7T>f{FrQ)Jv#)R0;__Fh@m^9Zz?Us4j$U?OxvXRWcxlC)tbKk8ks+*i z0JQbw$$z`G;eNb{N=y!PBsQyRrJIMrZ3(G?3=qlWF3Xp^OnOmN4;;TRQabs5o+tdbIqYT4_eF#!qHZgi4}NEzqBUcYUjxpHZ*E6{WTy zl!aV|W;p-?-%qkT@cQ{di`H(+ZAc_HGQZUV2E5{C)m9-0O+Xaop(im~V1Q=FLL$*l z#h?qMMR46R+GF^!>J$`z7jT=&F?(+q`8qB7w|1}|SV+3>>_BpqSVNw`3uyjtpWpeI zka{4gYZDW2`q{urw+A?B9h%$O*Niig4jKPgH0Cl*2z|N6j20b~yNKQ*st;FV@;@NE zz?HGSd519hRDpgPIlyspp>=XuoiBwMzSHw;7$G~-Bi$2fgsY8lYo&iF$%i$JZ=ml# zx$pd;KCbQ(rptzDg)u6o01!EmvLBNme> zN7C{MFCQ@TFHOf-hccHZ+nUSZa&3t~??;BaL4vb5Lf|9+p11-KHYWw8ieMtqzMrvv zOewjac}gU40o#PCO3en0-q?5KxAC~{G4e;rreYRt-`wA`ee)B*1$_x9M_r39zrQO5 zS>|a4>IOC=lJxhE&0wbHS(p9Bj4lE;$=KU~mG>L8aN&%sAe-dBfdBsw=xfk6B7pC^ z5y%VMD6~R`BV?DRp9nCjrLA{e15|DIGr+cHHf(P9$L}FC8ca$6XGaCa`U^JSlM+b( z$JkglJ$kjt^5cZ;eFb05BiDGCJr+7TD5sW!VU!n)h7R^M%}c61+yh)a7|EHeu#I_; z^vjusJO|bha*HIW1t6@TnYYo1#DA~iIw5qH*ESwj{ZN;5fi0!bFWqf5NGQ-D z(*<>MXw&QYc6ak_ellP|T?AZxPkhYrNWKY62*Arxtu)Dk+bWc%29aYDGK@yH5e;+p z0L^VZ1?|q3h>zNf^bZB%&oFY{_qP3bzI+kQQ`6gvqi*Xuc6H8D5Ovqak^Eq8z)^R` zEnvmS_z9#KE3OraB4!Hp9lW}=luitp`8I32bqdK${fVcGhn%hGSk4$HBctqI8HOBj z{dw(M-ccmw?LY;F*m#}V^?{JhyiuvbEH5c(k~F7i5Ok&itQ;DMuvT&ykDZM@Fxq6d!Y4qd*!0abv1h*eIuw)Etrx zjCE@+KYav_0JzXG6{kPU_1e3T4GxF~AiCw!7X1o&!<0y=yxALzcsd4@*c?K=Beg+G z&e&eHL^qpdZ&Hp(&5{11*P|R{`OnsnK*HFYHR>qP&xOwQWkr4F!r>X3bTF11>KJja z6^LdF20+Ll`0^!Tg#ur%~1;!=Y5R{Gz+fj z8S6#|FA{|=N#h1(v-HWB+zL9i&wb7^J(+^h_hmnP=RtUj72PBq7}lO$U7g?Ok#_(o zER5rz^&#1>g%LZo17X9J#jo`GlIhQDk-@?W&pSGAD7@@3=S% zse;sNfOxmb=e;kX2lq#h=T$b{ zz7p`LFea)G13d16BEvi!JcKLbj@xh;vcII;;~&ZRxsy){W*19%`@gMk0=se9s^Iqk zJ(+k$whV{gRHpUvNE8S$-@ha>Kdw|TTFK(2oZH_?0zG4)l5r;V2()_TI*D8~`^iZ7 zfhEi;$_zefG1^tsbB0aZKk#w4VN^!$)Qnl1(5)fU@4Z#|=#%UO`fX6dnP*=*R0j;7 z^qBl26u7?D>2ux@WT4_f2^)Qw%i4w#(tPB~g!-!>k7Ray(ic3%w?l0ysEdW#O;XDy?+Nvc=r?_E^v;^Kd>$!2ax5~0myI0_K0b-6gT5it|(F>*jgFdgC zY*j;e-9j_g%T0Oc_J42h8V(UkT@kkql@FhOWmM$x7hfEW8avXBmh{KnUSAcz63JS| z9h0AYhVSU2z!9R(fPQ6ue_=(N&-l;nRW2xA|9e}~z@-QE>93%K*M9V%!3Dt>XNl|6 zY{hv->J1jeX1EL5XeKymKhj{R`Gm2S9uslK0o+Qj0!-TL$n#IR2J-zoPinx6`9E^; zvnepY@%Q1RT|Ck|=yT?l^NxgJmGe1))EB0|5}zVA65h`Q-*}{-FeAXFsTyE)yGntT zlvD}R?3RdPCf6sVVd8nv#pRVdLva7mVlan;dJ9*ZJXnG^<`S5u8Q<02& zqJ~ASpp9~ZmMCIgWG5b&h=6f}4`g$cZQ_T^H&DMD`_0gX(K##c@>56^K2<#VG+1Fp zu5uLQO+cK6;xTF)awN2MoswRV#Ur^x@taPrze4yptUdw;HW++xde^MSpsC6JeFG-` z1TT;D7X&VK1Ru} zu_*2iSNCI_ZWl=VVclyzo&Sv%`U9pNi*T$7%)2MJ)&o4R2gy<9OVibO}{)ocG6VbFbwhP--_Op$`Q%R?zDq~?iX1bzrXT+V%F+=X&+PWbe*#@=sAJQak z3^RoOOQF`!q;*dS0&}$nWR%1zi;jv_)V@gn$ZS1pav-#-(p^5^VUupn?)D_li~Vhn30|-gKUP z0IE9jd}&`^H0oIK_6N=w9CEwq;~_g!E(zfQA=>>Ez59OBkSU2QEf9xI^JOL2l0v6Jn?BHq`4FN(Hq;(b9gQ71vpq$U^Q^s4P%-6vH~i#j331DHPe!~dRf zj1n-z?1hAl?(SUQ@X|1*I>^Wv#*qEjE;DXjR(2HFgYG4QsI==|nHc_wdBp|j|7yY? zZ2b2xX%jk}=HksnY*CZU1vGPUy+B*)*7}m!^inA87kWJag936y_J^=#;2(w68aIIR z&eB37UGfrvRt@>e`dN8qT|e zXlpAF%QFQ>N^i~qSL)u1;Tss@Z^n-HIwb`DraeU_AZYx5*g(&V1?f<*T@ri{R6qPl3FIEaF7csS({ zU<3rafv~8+P|vM`N|}jq*i`^>K}Cs240+p968jN&Jm(|oHQ3T z+?TDjph^F^_&OoZ1HtCXCwr`Z}A* z^klqJ;Lzy`;JSDS5<^m6xoyCq{XK6f%LQH;(C;TM?yFZ#RGVGpU8gN!-s;XffS%vd z8fJ#Pyd5ZyeA=)iCJxxdAZDh(>Y0jKaG(z(-GC}3ag{qoN!N3Lw*4f;FIY9T+Of_T zqP%X7cg9m16q;Ot^d0nv`xcFa0Ache)#aywfaG+5+rneuNfVl;6<{o=)n0P6NI6=l zz#1={6$OweIN2N`QA{g}WU#ON844$<`W%I_T@@a`Hc$=94)%~Zu2HDEF51I1Mq1Wi#HyH~{lbQcu6 zCogcnj9gR#>WL@t5-f-DAWQEAmhA`6zAQRmnl}|$`C4g4+qL@Id2~N`zzVO95qHwc z15(zBq}^k1sI*g=H4*cz$l@qyg&!8ZM%6p$oC7>RQ1p_@(o=aGd7};$;ORLS(iQ~j z)MZG6u{^_!ZjYa=vc^eFL@rECW6=s7?|Zz<|B;5k7)cDr6CM&~fc5q9YD}z!EBzmc z>;e-X79rHo$IzT;4dbTr2T6!fc=Ao;&Hu|XCuT1`$g_0-t+KmITG=a5?*8Rs!l0^O zDgyq;QQfPksRQAIP}}8I$%V?jBfz9`3aWndJR;UE(H4Llg5et9tJ*Fv;5TwE95Ap< z2hUgSUMd%Q=}^YO4h6?lGSA&6xO&Wr>)a_Ul0zq7{1>v~N6;un zkDPMo2ZZbL&^0}hQk-sBrh4?2B}(*~h{>13zZym&_MZZQSiviU&Cx{wbn=rg7otCU z)3jEM$*TU@_GiGWm?-)CwmEI{p%0pTMqWCiH%wsD^pD^CcW8prWh`oPFXYg79ql9Z zafsyJ`)D?b+)6k%#P|Q`3gRA;k50yB25z?YHFai87f8LJZg+~)WfgUxun5?Z6WXG@ zG1b(PVcXC$sBzU9W^BHX8<;v{^hbTs?FZH=&rER!4DF zXb8PK(&J-aj-l_;Z*Q(6yg**)r!j@!d^D062)U*_lfyYL$ymZ}SQ;!N0{xPu;*OT%fMMLlUuqzZt^eY53Bt1B+^ z#G4>d=>(Llu~r zt!Q7{Vn#c#!u))oxeV6|YcaV2Vo8p;+v4!W3uC)H3A{*}#SUC1Be#@*%E2A3oh~P~ zk0sfa%Qv}T^tu_0)6Cc4%M9CVl^8vxbnC9qyYtQa@u3T-X2PESQvQ~Q^N9htYa->s? zp&R_|MFBxlU!-%G24VD#o9%W3$I;Iht5*p0(Qt3sbH@YcRPR3*RRXy+{`pAWxygBp zkrB^593*DIz~wq=%wT?k*Q5y9JD*r$;%9xG0Y={T(4Nmtr+4F|$LR9! zZ|u1An9`O*@9XkMfWZ3=h5p)V}Q{&Qf7aO5TiJS-AhZ8{fgO_z4u5G{Igs zmTLdfpY{P`F0>--5kmSG(y%zqmdkAal3vzG=tEJLioFI4`e@3pvQr#s3KG1wV;V-Y z4$PF$xC*3DBk)=e;a7aW-Qhx!G!1JaQ$llyZ3SEcWbcEHG&9EPC7WZL_^`vZkwgK& z!gHHE%zaZ;{4Fk>;An0?d1+Q0uJc2RzYj412clcSo=Y@rDoP)tpLz6Xru7yjIi+dF zk*MH;yuA+iZd?xxR{`$|%%6#W^Z+Y#=K~RA@>Exj>3U)`ISma@35_M!BzJtm#r>#d zT5m64**zD>9u442^^y^&Q55e2_TudTJ6Z#N1?}go?X=( z;RxV&N6c?~oJ`e|1^P+Q!i!l!(^N}(hW7}(s-bAJx^;{4=K?0xAcgL<-y-hmWk)>; z7WpeK;zu03#={KqgjNq5LVpH5Jv{Ksj3H?$x2Y;q;XQFZp%cgeBV&QRAVq> zE>PGtX5x)~hSpkulCPX2kIcj6o3J^+L*fh91U!o*WeV$jL1I};2Syj{dR03wZwY$n zRZTyO#+`681AVEgEhq>1EBrv^nuKmI@y8*7u}8f9I+0zSEmK> zmx=0aLEuRw80^?d(xX6yBzNTbf4=oBgCkzNmMm9GA41FS?D%7)HCf{|ru3P6$vm#g zR7G|k_GJ8kWUq&6mht`n*7g`E6%=H#&7FZKC=k4Se^cgyp&7;}QHNWFdIS37yFrhk zNn0&1MLz~6x$!>UkIj&&ZGZBg{|9n7ok{&{WV&z13)NK_I?*r)V5E>s&b=-Q;qCjV zo1pM|*15p&X!DjS1kq#G`M1AxiPxl>b^qsjYY@E0aQ$&DwmXr&1T|e^g zQN9=`y9;;QG0buMMdN;-47BJiiEplOnO*dExyveLArn0Pac^QJekFmT$+R>-s# z^u)EQ@2zCjXv=pqP^jLU`Z$jetH=qm9$?#Ad_4OrNe;gC@|$TrHZ1fFD=uyphkX4# zX_BdoPfs}0zGK*W?DBlwZf?$~IXWw7?G2H4q~SjJ?8#wmkEY^s9kMfcMFtB!tsD2} z3j%x+F3xVw7POkaoGm#8Tt5%vV@wVz{iH>Ay<|3yMGZWV@qI(LcJwyk6IQ6az-x>y zdC-A?fOzTEAw&pcsB7zF6TZBkhGg^>YB3~v*_zIOR>)ksoI&kk3m=uZT=_b7vlQKT zF~b?fHcy=ON2J%$H@^l(xoB!g{HI&)($nZrNkf7qB2mvjSMULJ6df5Z?HqKrzv$C? z!nmRT3y2Pgg?@Xum32{hqT~We%+n=9)-8?;)Ux2=id0Ojho)ia6Jl}Sfr+%PUKXX8 z9GTX+h-mm3Q6ls@12uL%Z2BGdf4sD(P~de7`lU-~UPEa6>CP#kkKwcRH~;xYk&<~{ z)jZv4m?UWntn!kAmbzrc4i;^ft>5`~Cw(n-?;!7oGukHN;)~?-yS`*Hwm_M5pV6Z- zvI(;cBdwx1uKs(`joZngcX;(a1~4yw`i#+p%a5UUaT_kM&_Wl#m}SQ~zU-oLq*@9s z+C^hR6v^O`)@`B5@a9$1FVb7}2QUEK{NqH;t(z*UR<)8b54y5u;v$gjS&5|IcPqk7 z6-;;6)r9fJm#rW!>;e=$^E3HQ9*n5pp6Q{P=a5K$>;n#rPGdSIrozj&9W@-u10SVx zh0k$}CY1F%J|(nMQ_~PeElg{iNjj5>r{I%F5C)Jj9yt*SF?b{S*8hN?xfr%y=~*_l zDiJ1OVh-rA*^`e;LQjKI&$dvb07~f@cT$)*NrRqi9+Y!vO1!hRui^B;ppUm+jS6>x)J%MH<8-A@yg3}<9*rUT|JUebGZ+rCvV8=`~^;p)4eCV*^KjZ915cHfFCGaeHa9&S$T@y^Bd<5gaK8+ zJILdoyBl2j@Y3{tFbWQZ_s_W(6!Kg~PU!(*8#&O~SCH6$jGWYZc+VPh`qw<+k3L+{ zGVoaX6q+9uaPc0Y?Z__P$&)XHU862c?#oU}Olts&2T18->M)Pc4(|O8xE{YkyI$8w zLiqk0-Zb~(eqs33~ydewS9tX8D<2$BrP{L$?^LVJ49xqxw$!aQFr-!EAsn`-PI2_qk5 zbys7mS2Slwp4=DuxiF`$Zw!E2sxkb)m{~$!RDeT%ayf|&7HCk8g_`SYt^*-cU9fYZ zA10g&7E=A{0S%WWalw2?{w8GqYIeT>)A;|0pUsT1K$qZ<#9e^J&pa9B%qML@)waWH z%;+0p&{SIx7?59l9uqHt9L^m2Mj`6rklj7!<5_fGtLf@YT;Y)748Z5~U5?Leod|sw z`FK)$YbX^eyz3D=NuL0ch5r>F%KTkw2Vz*(zNdfUJ^NU*W4zdb!sL@&@6~Kp`D`){ zj7ym$pYJHrI`lN>VB#j|2*twDQ^s_5hIsOK&~oQm)_P)gvIaC3Ud0f{26EyNvW=U{ z%6M=GRCXIVMtChm+UXI<%I5L*$*0o0JLLJ)w;Py>_zpVLV)^?snwqmW_|*s$qUOYv<`A7R0 z{lJj?W=mEscz(=Rt$1NclYf|y05Ja_xfX=3OohK?>^YEM0q)?twiSoX(FpsMlH3mPW!_ce zs2K`v_$y-?6@00vz49AI=P4drPXioy^j@m7kV{K?ber^Mu?lT{Th7=HJ1o09^Slk9 z#P#-;d788C>D?l(CvtRC(26)mjU_!Or#y_7$r1CB;J&s>bNaaTlQO!9*=Ig6d`vE| zkjis`qC-FqEuUgigCUz|yG~qVt+0qp=gHmRH{$H4HbbhGl3(4xTq0_VWVWa}dH{ck z4tNx%yS6A_Do1Q=1)XZ`Z|LE#9a>|XFsWu5 zfYvv_^aj;XDbOSqk~hTec_)-D44EQws*}MdopRkJcEY;ZyyUGRn2t?e5PXqG=%1i9 z<@MXxv`fW)P=o-CITraT}95IfW8j9!Ozalxs+!vhA3>>9o2|FmKY5I z`3ITcOGW>P_j;o44H}t{u!TiSi(YLX_0-Wji))1)a!wZ-Y|~1{iT{Hq1eFS2K2V~C z;C4-i+B5gm@Coe*tppIw2Vsxc+ytut>l+I+ATn_dG?{kncW+gbvwE+f?f}#^X_3_p zmCK`s13aCA%r0>1lfDVWO2)|C*U;y?^9N+pwQqr+4u*EbtLi}b{P$KB3zO?1`}XID zNAZ+R3leq;yadocu_bda5yo3?8J!@87xLb1XkMQ;87Uvx{*8%H-rSA?pw?}j%#r(G zbxaPJDRLs}Gt&{Ec`AV17d(w$2Ko-Pe~)Z03z`0W)FdOaby2u*E8&i@>E(r7rXmxmncM2gri*}{;Tm_Df zkRO3LKw%X2f+vrKJ&Q9xZthAVfZ^Y34TUZ`bu)E$yU6RVKw1q`H<6ALD?u;*+tmt8 z-VO=4e&?Nt(T4QU3%~~U&G)y*0Y_zap3a8_bxyFg*`0&G?kF$5&gSVNp>v0-%1^02 z4i|wV?k!|}>R!u2RejIBSTK-*cMKkCN}Ubf)wRXyRlrnGw#t1j0cgm(PqbVEgU)WY zd*Cc(qgy#oybp#al}^Zx8gu!+2)zX{73>rp_`yB#NgG%+mI*Z@h)BvVpTPlSjY$`+ zJdt}#K!^cOIN+4n=kJ|=`}SjY`XiYZ1odRE>io8 zoh>ltHtQx9mvjQH?Qt$OXRJ$fb=&kz=rd_Fb^t_CKrXFrAy0_|MwTNYBTzj*uQrms&$6o zW+BKqO=H59(TOG+0Z8By-+><1*hXKH;mtj^0_j}%bU>AB%thsUbz10LxLrE+_Jt#& z*#Sqvjt@G;dy;dFkU5_E`cvRF2~rc5z@8x8h^+LeSc}sK(!a-UCS)64Z4G1Whw09z z(%fQIb|3o6#yq=1$({G z|K6G%mr4r&gD5nlh2!KNn-#Wg!6J_B z{2NvZ_Nbbsw&G4k?@zILb;GLA>iwqp)m*bbOMT5fQIHnV-rrk-Q=d?tUuukzCZg&+ z2^UyYcEpt=Z%nq6R?z{=It)1B4&t+Qd#iJXdgkB(r+ovO&%iQ*BmADue zC!yb83@2Ekp9dCmvxk6h(lAl+%YrueIFq`nCXbAir<9n})m>=?FW$*a*1iXkD7MhO z7C9xKFZM!wGCGZX<|DkZc>`a!0}Xzd5@JR3J2z9V*$Upys#Os~mNdfpM|&tPzk=K! zc(BKuMw#WYHV#h_cMgNd^lebW?zgZ+HCoa57C3+w+a!zc=H`EYK)GpRj@a-o?K)JZ zbQoJaB*4ay6H!xrMf#W2Pb7@G<7JxpntxPZA2)UZfvhA~Z^ny|UOMxgCC@kuYfSUJ!!-Y zogVm3I};}@K+1+I?z5@Fe-yn-38^o7H!a@CqH<#y#O>#*CYOvKz@3s<;&UM|Pt~{l zR2C+-1Zm&_Yc%HaAb~Ux3JQ4!^upccJrz7%HJ0*UVIb8y*%l#ZY-s%K(K~Q)0*`O>!T8_|a4Q^(% z|AjoyA_&>+!ouOuOHhG-)@y_qm46ajVWdgqH&>7Evu;$h6#m5Itx(IZho%K!sje<5 zmjhOLTh!d#GA?Nwhcp1Q{hW>kEx~3jXt~EGr<(l917Qykh8;P^t|c}p?y6i^w+~KHH=peKrHV61Wef*sKYJ-B zQ2ErQ1dN=}YUVTcIX)a>=mD?4AM6@5LTvgds+Xk-yfWeAbEetS1M%zCd&t&w$~ma2 zG%S6Wb@KL+(CN^wH#vb%RZRo6;D*YFf`$@+C^zM{cZHhq1xB6Q&N9&kTw4+90ylXz zCb@kD!jX1?R}5V5v~pm(C6H)n_6qc$;Q#*nW8%!z`U8Nr=?Co(x%NXZyW-*qod5Ts zpiNV#A!83wdru0VO;^Na#kgLP!By(3m@Wm1dFC#ALwL<1uiEhO1CUMgmPR3gN@fYz z&Fq3|td17UagYKddpr5*`Jgp?U$HYraTC-9kfRlV6x#Ur`9l(cz8O-?Njowp?;5Ip zUp&HQ#%5VavOM%ukXK2rEdSK(U`S*!NDQ*8u7)i1UbQnpsGkAV#GYiw5_JOP#qQx~ z77aOjGSW34JBw&Tn_x#x`Q6G5dMe4(o?fh6c<;#BIZo@?l5^%Soaws<^$QgC;O$zm zVr3}H^eBYvqu}uRO~OKf_KEhl(~JdpO6c6=Vvalt;x)PZ&v4Z5fisS(vm#QG%yt$t z7E^F$#x~>O6NK~=I(wgABnV_|P|IrD#c!hIrzg5LH-|4#fReJ&uCR` zSTL92xFAPcKlZ=;IUK$gXUvJJ)ehjvb8>hj(DI!luewtlCOsO8@#NoOI?XqYW=rTB z1=VTbF=@15G}e?kNPQ>_r{)^TrJBU4;1n>&bnQ?k)K@8ClS!p;6k2u8>330`k7;fW zn~@xQwS`IN|OwN3P;vPa$i7am4fo=9gzgSHB1xU?JnE9HqsdTu4|_ z4<^kKu30-=aVV|;Olfp5E$->Gxw+=PIcHZBvE`q1q z3)3Z@QT~5h`$D!PQfMGq=&&y~bSie^uVE0)N+L%I&gSPQ(0F3h#GHOHvB`YdNg(;# zxx390yTF6aFUAum)C!~qlX2#|+G=Y4R}F@|6>85?D?FB-we%lTuqrGm8uqlLiCqFu z*3AaT$WL{A2nS&=Fq9`=5Y}lC`OltO7M1kJhkjHfO-9;ke=<#-?}ocvKPMw+Sa|c~ zT)2N-t<|?m=^+3_O!@)L8%Hfq9GxWlHe5f#1NjA}=p*Q%3CPkbEGqQGkZCWxr%dCM z!qJKlH#eN>@&0^u0i>dKoG%9wmz)wdf9ECH?DiUP_9nn{Hha`L(11!jJh4T~VI+8M zJ$i@mlA#^8mFKzijG4*b0-ng=7rj4tx@%C4|FftGc_HWunJfe##9!6Ce0EQUUN&w5 z<8RojO_s#20ugXOT8<}z;evndPUdsqp$lHI$D9!u^6gq&1Zc=F^lMYBm~V0}{J2K} z{a)`2m4y{O-udd*suQ5!d-H7hkOe(r@ZI8!HHjvFp+{$6q({)d#*US>;8&a$T-*#e z;LkL>*N6UCD^U0H6n%;wCVf8cZI2J7(L6h< zfbPcfV5NapxjT{;S^&hUUvfAsA*Mt-mw3;DaCL7q1^t`9klj4aS zYHu^w0+f*?#G|XgoVKX_-GK#PWXu-Bcb@Jx6t+lH-OVRg5Ax)dpjG%d`cZ3UuQJi} z{{+j3_brd`Kn=M0wt6Ty$Zw#?yyu-khhm*5XF@^M2vwlEcn z;1Al&Ba(88dO5n2a3E*$4$cfK^7RxS!Ekube=_rml0u-c5?UR`?+{6|(~5aIGZ-;< z5*O<7FZGiDJCA{xrK?BLauw0J2~56P;fA9z=Oud8`?8WjV7C_@$A328{!hX*n+3U@^>k`?e?59DQuW4}W`i!`7B$45b43O&_z?{#2`Sw1|f3 z#zQgm?1P)fPDVrBhh91Yf`$85a=GOHK%7P^gzATX7zup=`ggA}frZ9ORs_YJ0h-bh zVfkS*T5-f&k3gc~tP2n+oPcQ~GS>8WQa%l7aH02@AyLbI92K6Ck@pyYfL{)wHM?S; zaeXb+6cJDNnH-;@O~T>n_tOpwy!JxLfzQx4(m*o%()|GrNkE?Wa_Ar2|DTdGKo9c@ zid|-r_JZ(n40Em#NI$|7(N(+UZL)Ko1vGGJ3+F%_J3!a`P_E(WeuuZM8n=0Qt4vbs z32Kpr(6NL2cQq0EwdjqL(HqPdaI+||_AJniU;hepcY|Co;_iJdU@zhTp%z=?+J*?)5{{|lXHVc2;mz2lYh&4j1JR^AWrHN#X zP~S^o#s|;x824D@^)EFo9cLYiPM;H!403rIDhkugS<(US8~2OSQ4%fqO7Vy_<4WJv zoliBLw#n=jFQ&KP^hkTtn~w1ybfH5vVx;r9C;w#J36vhCDL-`@ESQ56eT73mZ%C=s zw2T#2^s_U^S$!nxR-zr_t_E8%WQWI{Su-7+bTY3V8P0e|-xRm;Bar3QrZ#kN7@b>w z8-H>#=#z%)yLV%Z0Q&WPFLRRMp-q_oYP!7&qIK_0ny#KWPVPjGoI~SS`_EHq!A%_l zZQxI`a{>6@;&sEVn5lo;v>R#6CXyg&X#pvGW@7*g32^kH!UaM1-A@OI8akX=p$Eva z3GDazdn-tIqFqK8O$re7y0ibeT;$9ji zH$sk2|0iq)aEY!Sp^tRNP%PJ1*U8sG%T* z|25>Mx{^4Wj_IN)mYn^|pGtc9A5nY1L+!i8hq9C|PEtLS#vn8p}-dZIgBs ziD*NpBx20`Zofah>}R>}>%Okf=l%Iq_;NN-kt3u67h^pd=R?`PvB`sDLs4y_9!<|6 zTjliuK=Q&peb{ukGkK+~2Hf+4VNXAtzSRERz?|ct_8o8a`@o`^G~m-I+dx&Ns;rT) zX!Abp5;_yYc$CUiDzp*t`Z2QKF427PSU0bFClvl!<_rjXVfj^AJmoI9cE!KjmyLo} zXu_hZY&QD8AFua&FA`zIpqi)TY1CkC`}eA|&8k!3jh?K9eP^OqnWO89=qKQ-Ytkz& zy^p3Da|F$ry7c?Y8@E0)6Y8SlQGOeAX+i5`_q}Il_#l2!(fZoHznEI-r@&v|X48G$ zkjcXjSiIdV3_?RpPdVx`)A%#I)^&l;7KQqS>(Q1JlyCjD6g;Zo|3Awh4W8}s8m|{M(_B$E~ z^o^ECt7Y2_3_a@FxU!aT6hLAXM!E@2NsA1J3m`7iTSZvonD5~-of+72TXyH7v z_;)7R3IPq!Ab9^Axj^y3M4hfy0o~kjcvauOB`teIqTx$`eR2YhSo`8`6D3Ls$E^tU2`1hRnRJo=b0-|zmeaDq;x+A<)BAKb{OaV` zUwS1xr>A4@a{m}y)q)8`8q^`Bk^0{V5%xzn1?aJ%n!Cuse+kFhBKl39+W+^NudeGw zQXzcb626{o`9Kt?QRUlA-1sTI!j`|yr z6%#Ox#W$UW;)-&#Xmh_r2mP>MjDEin)S}tFNl%!x$J8=|Wafk>0~nwZ3q2A7q>uAz zPXfdRx%;AN4DRwEqWB4~dJyu7WpHJ?FN5+_V3lsy&`g-1k^rP;HW!kH*{X2l?gW?p6>mgOr%5q%zSgMv&MKohvW-Wt@ydu0Y?y6CK*r>)dtaZupV?GCF9V`#_d2ppa6$?g#>D0N;2NIpq9q1H$etQc#rM0D9?s zr>qd1t4&*r#PbA%;{vZ3kjz{UWi6j=x`Yd41^Y#r zU$tq+O-`0r5h78@j`bX;hCP(zYpirLr522=wwE<(N`1bKRbZt3@J0W&!uAJ30vPK7 zKm*znTvbRAc8RE@Ch8nUdwX7;b$&=hJ~$i<4qVWZ&AMz`LT&uY1h`WQH1IPg9uM-b z_^QWhqhHRY{qKtFY>7RU#;e{8>uhTA@R$bfcHXuFUKo{~96=6@kVMj8OdJg-o0kUU zZHPMnOB}HW^v;8Hd}VZ`T;Q## z%P?JWg(%MhMP_(t<#wF8#Y(n}-zvR5W(S-ebD(*T_!_*)u~}2pU0T#}3GM5xb zk*DOcX`R#dybk6n4)BC$v<|Ttv71{wbLR;uJiAa1$rT#Oe1C091_x13jNQWM@$IFg z>3F?QWS^K<9RpwEKD?gz%DmbY)?<5yyWapP_q$^|STxf`716%7Y>4m;!0J|y$&nYt z#Fki0(?uI}VsNwgU?|fnpR{bUY%dL_5{9nD}+kK*pX4AFcvguPSbR_7G241z}%8s&r zF8TLKlCfqHhMfMms{(NGD(2^&;oR|r-CL}EN*;StsH9ku7*I;!JF1moYQpY}fDh=B z)74pxtT+qy@hOTSxn)2T^)-{=4{l$xWcIo8QO# z%Vy{(E>|xj>|D?y^;bVVZEcEcS<0wz9a^qaJFG{uTDS#bp8iv( zr+8L92beJUnSFrQ_#PpKjGW9b=F-v7bE)lI*#C3E4@^)4|3346*|eYF_xi1Gj?$&Z zkjuHdPe>=eSx9-xTM#?oC~v2c;tHjGgFa*BIcfRXaVf27ek4!0jl6am0r(v*NJ^2& zhs|g_@BPDxsE$Q9G+i9$FxYLg0`D-vKHeRgX06XKvheF*$}L0w z2)CoZH&^)R(c`ppBs&_w7kjM_4`R_Yd!+LWK{zft-tx7HMSmdTUbLSj+Va|Q9BdQR z&gau2ze)?UMlI-r8q~FE^l2MXOzc*ot)>N6^%%$I?B<=!Wc=on)fPCF2`;quZJB|fA@Gna^IF9(eIn-JAHe7YW} z@lc(tLDV7@n-+8S{`#X~TfMmifn7J`|eOf;F zJrBFvZm`g#7Xd>XtD@mtL%|~rG+FbyZOswzbje!PMY^d8DnP9L0#&|G zb=fF=_h+<}?gc*{Z_YjaCz>*XYR6!To#X(b+<*`TjSeR9ChT`XFE3gU@+Feu0-oI) z;1grii>H|@uR!}ZJKfxx(T1iJZ1B_pnHt$4nK{Z!m_SGl9}VgQ&)4Ct0JT{MUs!%i z=Uo}U<_M7Cmcim>@ktC+D(W2|(Z`|s7tHWdBj}%kah|dt$~$d40^WAMP&mj_-hj95 z{Zi}x6ubd_@8q#eq&8%+FpR6%3r3=<#Y{B9s)D_Yt(eCXxP#JW=bDs>b%gQ+V%6uX zrX$8Hyf9Os6j?66%d`6f{oLYJ*-wa!7s{$I#TMvb*vj`RDY@FBmtl!eN&@Hy@cMuI z5-K)|yERt_lym zb)Z zfXKodo3Fc^)ibXF7u|;MagGnNK1ruwn$8lq%ni(a2XZfM(540xDX|Jd>5r~&E%?l& zZK^8wISYiIQ?bJiQDr!=mJhtYSPRg!;jb-E+Y8;1wi~^xS+sDaV-Lh7)uA1p;X)ua zI##;I@&)@y`(Ivl6~smV*L^L+4b3mfpN7#^JZ&7&{vUXRF6R3sGpY2DC3;h6BD|;+ zGzcr_Kf8?4r&DTH0x_Ta{&-@+q(^_e>&v~Tr%0Ve|A z>rI|)+Un&|_~#-aj=re1C^X=YHhs?L&H01p`(o>J|?C|1H zb-hs?f5Q^c`g?DC%QkE&fV$<64W{Gt@D)rv3f9MUMwDp?7Z8d^^MuUfV z6`XxfXuBkeEdbZAMT6GXTIRlXhLKZC9?xzYe9koW%GS#wvT+vB8}5U`6H7Im`7w@p zbv%*H{$LtLea0$RJ45)Dq!M@B^Q#V|6-A^Uw0o<4<5Vz*s{jY8Vbz2lQ~18EDANcum_Mk;=NZ!X zcfH>iS|{ykQ8$2hWR6?G*=0tG0OV^=8;AZkvuuXl&l<`zj`JdoInXjwe{P%)WDLTC zts(nXgJmSiu%DVEPKExrb;1C&f)uEakE%u=&2Ctv5fTx@8I8e6nZTUq{T^-rBV_c$ z&{(lPEmSgiHz7z04?ZuU7hsi(bx*Daio@Z-hB7Y0P4dHjB!h!CeKs@Y&;m1O^C>sL zMNvn~9_cf*yqrJRO#zg&-KWE)2F!#_i+(S^0`6(^rmxHOY28j$hupb}O5~rGCO-rE zN-U=kEOr8Pe!Iv|j}|n4OL5D4fa_H!PHey#7X!NW_os^@ql0>Q!Z`RheEfQkEzo57 zedvhBsK@S-O>7B(Z+KUf6s5=5*-zcQ;HT@CnNQ|s`Kp^+F?5A?E#D}vWuOGi`Y*y5Gv=z9T9o3J3c_qp z!IkcMj_1F|{A^#O`9oV1HNX^ijhw$#rSYoYKvO+N7jdNZ+1YtKoqt?r);UP=|I^>*?Z`fM@-}nfAYFG3P*VV z#*0mxR*SC4vS;(;AI81ja8^u!6LxddvlbSuVa?a1g)JgX&##3e_Jw1@9~}zc3s$?4 z?%`sbF$8H4Fc}yOMQNfUU3%r50!^YrXoW-$Mt#s_OlV(<`Odd67zlWs?&s0iFAk#9AqMR4eA@iu798376s6w)0{3w8sIKc zOBtBj{}0;1s?-g~1#8jKg5Ed=C4K3-tH+;8Ir5@U7`(0TUJhGv0+A*57HXrngSTv4 zU<6H#9pxwvK-aBGJXRPv<5^(nFrrZw-iCck-IA#bRAk1`N^C<#KkgFbU|GcxLvV@U zEyg&;b}}k3jQiA=c8d*vDabDdk^wlhH7i_3j=7ZwYS?oy!{cI*M~sJ z+xTOYvV!OSav9VK6_YB0f0 z$l$SZXg?ubjpiN5?*WjfWr@H>WTu>|LACnadeRe<;DC?|^6V<^>hN8?; zaG+%IQ67~z0mujG2@JVtF}G|Id3MRHdBPcxYSu~zD_p@q^(}IRI*7mfxk;Z}O+prk zT!eSufNb0AM4H7^0O&J>7`^8EQUG8*X@E2nl#a0rH~+kZyJVLxxXiO#5A7?Qmo-j^ z5_|nicuFsbaX%qqjkG(b2+*D1L$h>O8=G^*iAed4A{9vGBvF^^;G`;)iY%bA8K3%` zpEW0owsaKcV&s)BT1V$}a$TI#Zd!B1i4g3R^xtEy)2IpO=yy#$M&Rp}w}a=JDCeP3 z@~^w~>E5(M(aLeaU2J>n>B*+QnZ%@zETawfp;Z3v?Zn&lD%!E6WM}L`c}xh?cQA>E?7?P zeG(Mn_jkrDzKO7ibFZM6MVbfg<{Ku2WxHfl4hxKW}xy&F-6T2ih8Ewnf{2yBp16<^&b)dTiJ0qHR z5X7Aa!nWS&`!+Xck}Wg@8W@_kypC^)lkCvmLG@uK^~#n-?63xY^pRLFtbpe(p{-}1 z1a44QeN84};4-E}H-lx`f2`J=fgBHhT^=wgQoTAjn5c~qhp6{_A4rNVyD^uJJx7j_ zBeT4xpva8WUNK86U`olgV}#HFjrl88Y9mJy`qOu&Mh{;lx$=aA(90|n%R-P_%;rwQE*i}#Dv;w;`nIbBch;GJit=mFM1?MM>1)$J{lA5Ok)d(*h%WQ` z=?8zJjqd&P!B8NDrnXntT_zkI|Bj5&<6uVFTBeC7-_D0~Uo@#@sqQy95G!0q9qg?w z)@M}iO^*y)kPV`$oA+XLt#=z^)A9P8EAvY+!FxF3%GoJ;mn6fYex6VU^)8sT{s`D? zi+Zat!1GDF;>o&`Y@~3Z^o|%X8bQuZ-4}jsmX9wuF)OD`L}Pdc8S$yC(PxIYNq3R* zg?@;rNpHY_iCu0DW)eWF^l`%5*Z?cox$y1wjIF3DDpjq=*jB>$zVkWQUNdbrMCvoV zwQYV1Ur#==Vg3Dj^go*}PU-v)+_x6>nMwnC!@7r-fcg9h+23J3&Zgb1x|EfL$2t`k zAqN37M_6x{*NF0~7h$Ad8mMjC!q7xmI1f$e%0qOheC+w({_&U-7Kt3e1dK4qE4Bf% zeMO~=SG`b!{`$f@lOGzwa5VpKkv>jaH=SKPs1$uIo$Z4GkU)pW4E5_VQQ~c9KTJTt zU4K(~3*1F1c}0mB`JZr#_Wd2k;2+rB8C$2vC~2R+GW{!IpFE&(RFh3RZF%xyK&a?I zWp=1{G+Yb6IreU`a2yf+7&?HXhZeUPd1bst3-e-Qar(J_!?Ydy{lWYtVo;=V!*X?lBQz zEg!?gPauo9D;_%twfqqY`0TgBE3|wT58`0stu-#P)T=_x;BRr)ybbMdK_w8|l6G-H&oi-XR;B^LtvjJX(+VFC*% zL>+rT!WFDQqECAc>(aKFB!|n0>IJA*=Z9uMS@!(xu8NS-y53XiLvZAW7RB31@O+0l zOT<8Qoo;0>$s8Dty+Qu z>|a%Ft^*U{+V13j{~k>qAiwzv5~!aqtG8{GWiJ;x>0&LG0}l%cZIAc z%{fMhrsr1yRgXEe_+!Sn3of|tZ3Dt{fUd1@`nhRJz-$aAe>_;;MpQ3G=g(`QVD!?g z{P`B=A{)UMc!rR+)yW1W3_8&kY zmkR3<3v#yJ6M^gS7cl>>%vhEbKF6%O6{a_&74?+hE~1?4azjNd$)4G!;dmX{=81+YM|_st$*uX!g}W*9|Ct2EEj87TY$TL- zkgNQnQNVRC%_5)02nk9&=gsxlPuKg_-F3 zkxlFMnfqU{A~|v?Y$Kllh1-mWRaI{lpjFhee>?b4sT_UQxg4xZ2RzF^vl(``t6`gJ z5o4gXizB!Te^hTUUc5%M$){Y!6Gp&%+c~jXA%I@?{6KydM$4UOeCI|e&!Xc!w_-7L zo?8;3cV6P20FE%Hq5kj_HXm_8E69Gw1XH2HtqD8<`<^h7bZIi3<#_p$^A+a8SI|={ zXVs+)OLRlRB~KmHcipa{DUKq|E-2so0Q8*VZ0we)c63!?iUs5|k^S9-+GgB%%zH0X zZuKHmI^|x>H;(uqeDgUc=re_14Tx{oU?d>nT~;CiMz$YDRUdR{9_Ly~fwq#7d=k&@ z2OQD=Ft#~dG?XtRaY#*2XscYYh$}Eb?$nA&Op2t|ie?; zlsQ%|Krqva6<(Llfo#DKd%Bo_x;_(G*LzErcl?cEL>&Sk)KR?Cm+m$AutK$JbG`bY9?szn%o8G4- z)1w_SlJ&gb0wyn>6XA&%J$MOxJk50yn^3LYor2TH57y1QYz@wsIpHJWELxNi&GgQG z5qZOPpz#;Omht9LLm7hgm&+KTwPf7)>cVt{8uF<7ko1s&anURj}lz9$wXgyD5 zpuYf~x$qA4F`PbiSF!8ub`iO7*pEZLdkPv01hWj)rMn&8Rd5;OT!cQLp`m_C`DZSp z_WZrbO%K6`qI>cWdfHujGmqVth&C1N-s??qrY*M(7uPTi-e$RR zAI<{DrD&f)YkloA9C;-y5Rsdjd^qBbaG;y)Dr}xH6;b;hW-~3<#Q;mAa4Rahv}qHY zmf2y*pY>3*T_lzBqK|BY{Fa6TyLD*#kaxd^mO!%OePx}WUqJ`x0Jy@e(Tu?EIv_7k zs60HVOSOyPwQTloqxtJ>cl+zdqK2p!$CiwN=fKC)WW63$)#0Fh;f)bVP0{XWQ->$s z)*CQDB$paAtg2wqrn~S7;M9<2(ZS^I$j1Huh2V;VXq-t_ESqNDzvD>wPat3Ze&%PN zE_GVl{`%BXaG?rnv-?@p+o4;}G~nWPG>=;J$N<&qo_#vHL)eXM4INP%&>mdsaAOe@ z?{0hV)L^3}nR|9027*Rq;RHu4gdcV#AIt$lK(srzR;7#fWWEpnpRYuB#GI#egGhgy z!`g6hF)A*|Z(!5@c04#PU4*-sbnK0$_rZn;nFv}M4JU9;x@ut5{tG%`o50ZxrP`Pm zvFQ_jtR{lNgG#7+8{o?DG6UcuGy%GCOo(c1^GN3I$SblZxVfdWEpt?pXneFk31GP9bZ zCnb0EF2)p7pf-6-nu&=p2Fa1gA2U(6F1^Br3^giptQw~y?CG27;ctP|K&Bq&2xgL> zte<5;IPNK^eLg8JyrHAN&3$;Xbu+!7QyUq25g+aa`gFj&G{(YQJe6+CK@cwJB*;7I z2;GBoEqqoqV~~OO0ily^sUfXQ{wp(0ySwWj53#2f}oE&`=oqBaS1#tKK}UBMv->G$u10}9_{a+cI@&U z@Bqu(ZkOwT^zgmP$B=bx%`-32-rhY zVXF0dYT-!6Z7_ZV4wa=3-L^;JF2z@%yF8^M^xEbW`yrvMM%Kn=r?Kf3?%TthxN!pc z#YG_KTglCh>@gC$Ak9s+`WVe?CI2_!{hTJy`SBy4q(i&X$SMj1injtP)kNt)<~~m8 zB$R&W*B*-lI%u(e1mE6?9ecG`3~CRZhbPi<2sx1jhSor*IBnyGh$*<3hV;q%udu0K zepIQ4h}sfMIZ>TPMoyk`!dD~C zf-%@z&I4i(zgkN1Z@`#q&Qm=sO{2-#fF+d0Vjg#kO$r8mZx1{oyPOf(?J{~yzVQ<^d^9~}~N41alW%!L?^p?F$8ux2L1~$~I ztq-GB^l0>nzyTN%$v=K<93X^uP$Xz$E{kRnZ}!Y*uY~;HC0?}|6#P1MpEFmm010kc ze^`g+?{jVzxJH#|?~U+qZF+ktPjL1o9@{BWgR&1ju(|rPH=%yk@vGN+IyBQNEx;d- zJCK*R$WY)5HM~rHkSrbPJ(&Z9GEjJ%X3z$(=0|!KqyYc?@=_2cHesEJL~%$fpi{wy zEKs4G{VLDr*=>O~n|QSXWpwzcIf*9}!ZC{~H}*ZN4a!O|6u%;K`#TY#87i0C*kH6r zSNS>5k7f2KIf^YXEhOz)NaYk#BcK7pNj(o(henx_;vKS8B7NHkN1FJ#DME`X*Be=P=9?-OXKhSG<)$29lc}aEE9HyDl^Hh*~ab3lg9lHDHSVd2KZVbS#mUiRUG{^zW`I z_ZS%{Dj$EBXP~`Gb$+H<82BSbif?9duvzkupbnVdlvTv z>{)+A8@$={Pb)7NbyQ~#k83D2*bL1jrTc}rOVQnEPoD55EEeqll=@3VGnNl>NX4*D zY0}b`Rv@L^A-e0sq8o5lUTfsKtd-TMeR-;Zq%i^ue+{ZWss{_X-Z%G&xO z8(n%>%!Zr>ijaZ$mA7BgWt?%5(p7|=KPvj?=~f`r?)DCy^;kNg?@$M>e@RcrEZ-o4!-=Tlgm){IA?Ul0+8T9bpxH4=1IfiaP5V`Y2iN ziA~3Q;V^QfXK)0F)3%oW9Kr>^5P!MnFa}U;C*?X^(g$?IL&hPT#`tkLG9w-QWXj$4 z6r46Oq_`1R4Q}m*CDCtmsHoer6W(gs;M0; zWdGLjhSPipXVnFs@EW8swX)(gAu~1529s^Q!N|*#>&sXqD1j$0{WVf$N)DnOJZd z+$!s$KM4%V)unUZ*b*`P!2_5gRs*$~UV0<+DnG_g4I*;qkj3Q&t8q9eS5<@wzCy(Q`xTyR`GQdY?! zIYT8C8(&|WCIsC(+FiGE;yKdp!UBK5=!P$#uag3v@T*FcZgfJl&gS!D3_#xvM4dsmt0d#Gyg??@N-x$~BN9{!4B)Z`CKcAN)gk1+R zFeKT9QGfF;|Cd03ajSV&$pU~EOurxAir4F_MnJ2$0@}G}{NG|O+0O?7sdi&P3=q5D z(>-G`PYlqe!BAOPb08>m(1e`)IXVp3a9_`>3dzLP9*pdl%{kKQN>pD(EwmG@S#*{E z>&y15L};b@FPKBYd8^k1Y~CQ!M@#^_l>|iwy;~yV#`Vc3L2%~KP@Tt;uegAO9+0Qo zgHdM9mSUG7(Ft{a6h~1Ag+H5WJ0U&orw2xoK9EiRJEJ*lkgcBAn}@O=KbnWkcLqv~ zv7(+fHZ9e3L)DbUCNXBRT9&vR7GE6C=~0UCte}EPM>zM)JF{+}M?iKQ4){5N`0pd=ycB||{aZM>CVZsp zQ;g;}Ff5&}ff&6E&)D{WO)AHhMZ;(&MI81nBL$U-^G9^3?;XU+f8J;8Ma0H(UFO2^ z{CRqd`Kp71(SQnExvtINAYR9d9zp7Wxo-FDWW8XzuQt*~J_R5rWn|yird3>*KHmY* zzupWtzP=AnUkxfz^~hL0jz&%_E?mx5+@wSg=IhgTx7oa}=PKIK;q9AkaoV`g)Ti(6 z7&%F6vDkrkm00YXy+>k(Ks`&E4Ob@bvGV#8Jw=UHfiaKSVx!8%;vRebUCz7K?ae^d3D3Hf|a^Hly}m^+tLgsKjxqu8{7O*8tl+`!YO-di)E$Cy>q+}xQa zLi@)Eo?Q?0ASbP~4zG9o+p!-L%z?U>-oh4SfGJ{B&p1wRU$dZK?1e~Ex)<=z-#`IX zv&}zc45Mn%z_32k{N7aVhVP#N1LScvfUtaotl!`{{)Am95H{HC zWz+IWDH{)4h~S*D4?JZJw87LrTc4;-MDFH)@S(BMB^R&Ea6rV0#hV|f2PhDLT;QEP-&dk)K`J5>aYky1BbOOE*52oE;U>Z4_ zE3QJb*RF5IsYO34F1$V=xfI*UQ%*p}Nh=EmxiDiHau^f0z}|^L^D?GNFU?G_2fOb5 zunW;O`)Y3&m2pU0$(nSnuekUCVr`uL3ZvTn9N*PSsN^dkf$Sz+OTDMYYF#)}_Y_h7RD;VO ziZG?R0nF`S@5;LabKXcI^AGcc8)0eZfifQlkv4k$!(_Omz^&-ax{PkbICijw}?4NN$t2iFgrm`B=2J)jzveDiob%rl8z}5Y1_#GgOo~fz>wqt=XhhDn?M%={YA&<4Ndb%wtuP(G&P4XCOw#*4 zDuR^-4VYpj{LetBo3C61H)uCuBm{oO zXT4OGgx!D0e0#YHL%+FqL@Ei#fIG5U0A7HX&q!lGHILS8MqX7ui1L@OzHx zk~DbL4)BLFpNA^nNptU5>>g42S0m_8@dP~-NdB02KblD`Eo?f#jV_+ZEdjmf?MRi}d;t^rIQ?8A z1sA|*d+ncKZImD0zEJlR&?)4X+7K8`xZu&;zl2C|Q8B;~{|}x9$CtXEjd|B6#z>oB zw8H)&fr436%}o$Gql8VDpkeQ28KA5v(qz(Hsz^?+_+~G8lY}YwFli3=ul25saKya9m`y*U+4wJ>EBY+&jRH0~b9a}9w}kr0_oN)2 z-Aef8=BS>TmqnHd`7}(h81n2*rMGbfpHQ!+uRFErF1NO|r-gx(CYdU~P@Bd!i0AVN z)v1I6`i4pN*G2z+YE}jiKDT3vda}iO4T1Ef%pAb8fpWKh?s?1qBt0TPFZ6-cK68(n zRfr~<_O|hqP4MaVagUmNY^U7`lT=#CR+Z>5m-K=fAggg<(^o04MW%}DGMadHz`wby zt_%tVp?cl`fTs+B!+Wc_+IJ>%uhhLiF#5{P3H;S>M2x2X;>kTcW@2uTd$5QR89C0g zw<==pG_uV2NcL>XH}?Jrb*bHIkZ4X4eJZbdFJ$&PLuH4Pa?u*k?K_yXkc(MvFDt;* z8b+4P|KhWjko%gnZk`ko@p@eMX~v5>3gr1LF$(1&EAuu^Q6PZI9K496Si4U-pQlVB zZxTeb64f3^c5J$gp_OpO>F5)p+5xRd=(7Zo+Hm8vRbCm<98xAn@D#G5Y+Kf5s*K?& zPe5Oc9zR$~h_b`)ZQ(gSxdqo@I)9{`h;6>WWOsbsy`UM=?Om~@Ji9Q+K{ucx70ksD zo5V9VOd3t+n)_|sxsIC66DDe)`2F*@p1xp1&WTC9>P%>L#l6GL;A~s$7jlS=PI**x zXo|JyQp2Dc6JLU+3K%u-=r+6<2?U<8weWkz+324Kh1!T^{=5_xUA{N;RS8%85^k0_GJU)XtPCR##cEyVzwnOWRa~(zdT2nUW`jBN@Ur+6 z$!p&~J}&QJC(i+%#JYdxU;MT%C+RePscVNYt_@#D z&jY%QtGD8(rGhyzD(~&j)Me7l1f2IXMSUZ&{Xp4ZzDXB&JjN^}IoqEg%Z|BgCk@Xn$@cSdFT13r-YNT=!wLSfREdD{fexaoWFtJ~O z)N{=EuL$)I(MD%5CtvEm$Ti7Lv^%@26myCbYDL}w9j$&;VyHZY(*if0`Da}$2-PeO zNu=rV?mKus2WKPh?NG(oduTeR9;EF@2#ireB_30jG(<;*zMXTpy!S^}h zJ7m|KBdc+-4FemNy~L5xZngzC)LGcS~qW$o?g9&U3YMr1;D$zf7~^=_oZ+z zVwsDb@$E1m*|Ju=$TY=|M0{>%Fx z5c2k`S3w~Y4+S1%$0l$EOOUjy*++47pzcx$KoZSE-DfNq*8!}gh$(QTv?f35HxSY| z2fQ*(CG0k%KME3i80fWYI`r$yOdLNA6oJFwGid&c2vZO_i!*-G24Tq=XD4+f@bsEr~QSm3Drfh0#p3ZKu=jY z<{11V;uU=ZhgmLh!DAp{XEwVj{D`si{keT6KRR zcn|IPGK&TBzu^Pt0Su@soiqIa*2=5f=&4%2 z!AnYULDo2nQh46~7TX1l(FDDlIdIO9-RR@YXmT%4IUOSnL9=HxywDVBe(x=!;~EtD z>5lZBU%>u3qTKAqpuEvo`uYoAmoJx)mSKw54nd1dO zv%#b$Sy3vcfKnlUQ9ex@%`*F1Yl_!@zoV*U#lDKy;VAcKz?2#Jb#w~JJVBE~2+NS( zf$Liv2HN1=59Q?pxMk6qh1XRe_ul_Y+o{M)muO zdar_P14zR)jXfQ|cM)RJ23Sl*nFj*Q5c@d$rcm;44C+x=F$HRUoHPp^A<0FkzTsTA zv&a?`^}cacHJHaiHW_~VOr+{W`!VJ?)kJGX;J*?#lCdEO%vf;xFK;TY=s<2B4B3QH zA8&IW4iq+Ve#xjXJsl3byXkb6v-C(Uh?WL2k2<5diAO{pK`k3FMLaaOpu_PZVdsSw zy*U=7O*)&&t?4i-oa>e5fTLyX^`sC`1~z|NSw3Z9%L*-Thm*? zsUh}S-UNpf2-B}3&^G-!?W z?KWNM<51tlyy~OmxYN;(aG>KLfw6i!9RB;&vXFfu@}k5UJi8(|$NWssv1ed89URCM z;xvIQMZL2hta`6xo}s$5Vn(YHPZUib2duQ}R469uHhDfy)*047d3Lv8kFE~`o47HW z8+uV_0p;@JE4to4ZILskG8308#)xC=Us8lkgr2tcyLHnUs z6)rgJHukLmB%2tlo*Q~mV?xc)_#ZSqf^dL^`8`I0@zjkPPy)&T6-e5ml4 zi``qc(_7%QJ`2n1|JvSpDjkY?4#H3e$!@QXuV4#4U>aAzgGXK_E?Xj*h>JB*D?-xt zVW*~J3&7bnmYmn!9AtEa^bI4u(_mANZv8M20;m#Qzhu9(sm4}!gTOIYjEb|e3xKi;{6%UZ%$forSnn5W8N!BG@#YpuU z=(MPBxm%+$HleZI7C5zM&>@297%Pm&j=tAmQf4h2=h{j_3W4`!D@=R*B4SE27jmRh zHRvFGloZr_fkD_kMN1BO{im&&jGeCV!P9sNKZhM%k3u7by`F z(yb=rYMyYZmQIQ2ug~Ip20U+|23`R-XvIICxF6G0)GH)I7d%#X1H)^`kV*cedYrlH z-G@(H@H&6ZhRkqUNaIC=$6Uyve-Y^gXw(o_kBCok72(L?CyIkQv|EPcW6oUIrhwMP zvonQioem!mauxoler?k{U1lwNpViJPV4=wUD;n0*HfXqC6?G@(?^wsA0+h<0+v+tl zV-*>Y!;9 zov`3Pl1s)COb`pV-`o<^HYyDw^=`)$&14O$PBpHmMiE74HcszOgnyG5afCn{DE4)VH2qFd+4j`?9D7cOO@J@Bk+em4e@VBO%=`SRDo^o3mgUw zmeMwWt2p*3&s>|bB0}{09-*9rY>-ZML~%%O*=Ig3n1j@oWvOs;_4-CXfM$mlL> zOKqg{DBZS?a6ET2XAl$5hYQg+!gYrwQ@em%Mo6~fw?1PFI2>0uj(7_kvkr1>N|(ez zHkh~yYG3;#8zn^N>l5zqs>`7Vsque*aRoEcxX0nwS+uJY|J>;NDw$Y#gYF2^iXK*l zWD?a*sD*i)HAbymr-J3E5jp!8Pgn)_?=7ngEs{oEtx5pao!W`F`;iYK5S-iLy#}86 z_WPz)bqx9I2#L-SOoM*1BSzH{bUx5d`9jh#Zj2C6>XAN&+5&ClXGqi=FtfC8mjW(4 z55m~z(<`O(;wNMr@fUdWccyzf6|5z#HtHL?3|GrSYxykDp7S~!eOMR$zRom^jw_a- zF^4~FWFzrIZ`wS5h^*AbB^W6O7H$4E?|niH+`bi4_-RmA=~wV$2#}GTE#}#|Lhs@9 zx=LIDD007(YqgPU9rGtXf-H%c15+2%wfKftvhul#5@hi4K(h|Q*m!<-7a>xdDE8sm z8AHy;Hs{WfT4q&8fw)k3A5C@OYN>S2+t8czKB)8Kf-ifyg6W9Cwx|#c5r2JPJ%zC2 zAv4qaCbYE*7L~gD;Q|%t@^4tfpe)?3RL1%{6)weecIAB3Q2i2-_CR*NP zSeRZ008p|qH4O<*Fy$uj{A0{o`#6eyaCqRN@-_d0dA`KYQA$S@T60|zLB`XVp^N@0 z<2Cd+X|7Fv?IdrT@3fFQ-RPcp3=`PH)RVfeuWZHZBWD!!@v2|LSt+g+VX>JUIenF3 z{piBUz~u5fV?|(PgJ<;#3fV2-$`@-}_cM{-e}s$goso=J0-@3s$dmRaz?*OXq|*=} zT|<)Rd8PA2*DboT0O6(ageHzBgn{$CPi8Zw6?AWtmmF zZMQKCzM+mb0E5u2m&!VGrAvyLQu-hy-+Ef}lM%eH0HVKn1-Gn1NZj2SPPZZ52Yj{Zm8W)2#yNI~J{G>kSj zKPve#A*#Pvo5~YrLD{aXoUKy8c$W#)WYcuMju8o_OE&c=3Q&jJ`Sl2I-zrclO!5RsTc=LUD^c!)s1vaay~x= zQ@BGNP7!XwlYDO6BIPtrpJ#i!zl*R>I)fd>Cl73Tp+igKGtCkwQCPa0R`b@SWSCK6 z`%EzUG(-3Jt&@x$+^XX?VoHTNtdE+_;0Ew1ltDd(? zo;Lvn#UJlkHbwA#G6_Y~<-)Zknf=|^(HnppOMV(Q*A|3VAYY4$7U@ur+Rw>Qa|PPu zU%kD9-rdmgdG!~`k|o(-G_nGk){~3^+jmAmaWRmnls(Bdy*k-#N&L-*DP^s%Lz z^7CxySK*<$aFXec3_m14>m-hpRT`Ktz9lJ~o5!gy+m|qm9Z}uG>uy9xd#@tDF88^e zu?{$;F_4UGwI$K|^0}HJDma2eC#|L@UnN9!C&eKC17wo9rRTlN&_>P8jhVoF*OTgo zd6^22XgccB={e3!5NyBv!11a#F#m%g$l*Zhc#usS7i2GqtcfuNReo zuT5fh9Zn9QX*^l9GPWerSZ51TrB)BpC~NpfY^N*|=s1x~fK}P7jUZ*nN4X{V9!w6^@ZrtG-$8(foakebUdcz4^F?w{Ce;`&}v41;DDW&;TIrZ z`tF^`$4d@sTYLDwwnh8bUf{w`y<;YTE?bmQlHjyKl9+4f9S^&c7oI>YsJ*3Z`p86!+fN`~@|&2)Q@X&)HQ@}!8sS6aQeSQr zU6)**a%D4N=ZF3oti6cSOP-JYQO^gMA)!hgtxa2v95Y#wEIBKC1WILio8{bd%S)v$ zonk<54~N3q%KJcj>8}PV-!XrQ{X|S=LN7*Iu7TLjTJ!3`u9|Wg&#nbBT`t?!L)agR z<%k`4qRlH_1@i6QfCd%l1H;U;TmRbsku==6>iw8(w9-q>SMEUStZmdddh28IzGy;j z?>Oz7_fJUFFNju3dy2KekNg8&3$VC|apQLF+?kF+9(%&Dr~bHjKH^vWb+Zo5bIPOX zTkts2ua8!|>J)g}KU2%lb1`JEg#abaVxF508k=HpYCUrmILG$QI+Wf=7m}$CvN1C@ zbD^6@EZZ8yVJ)qSW+6=I_U?oCN=?+_&0}*ppnH7q{phMg&tufe5uR`^j5chYR`C*7 zhyi?Ov9&gO*L?32ozuXoXk7rTl#)l6Q$fqY1i8`r_7Xho#4h-ePv$$^9AUDKWpA znVNc^j|;Ehz*&5&ef}aQs=xYVrG#5R%@6=ax>9!k;ab|UB_I8Ha_uZyTqjTfx24*x|XTP znL^0ls0PO|5aF2QpBwp>dk9H_ z7Tor1=dWn;8IU!sTma{UY>t1dV{XTQE4rH*0@8#gjFia+0HerB8OlakBM(R|Xs(^qGyN!F_YVR3@+Y|2R7Hc&PUO zkI$SlX3m*8gEKRhF)HJXY*AXYO$_Q@l6EbYlu}u{Ez&Z~M7KgAm5MPVNsKKLVwk~g zmD?VXv}Xz5>Xu@d-^cII9v+V@^V#0-_v`h1{fYs4-NjyK&7a7}iu!Q?C%E$V?73w; zcL%c@+{QsB#g|;7Ul|dHj}%evf|lCnidOIKYzaBM515KnaP-o%Yj@czE{+}!!3b#n zMbE`RT)nES>>IavuH;=OX)%xFhWh>(xs22IW0g}*D#U=co0D9_!tPBU=PYZ9gV)yt zoTt!l8e|$r{!i{ykc&&d!PRFLH2m+9mFg;ATR_QQbm(8I$C2#mrGO)1J+wQaca{PK zS%rh31SpifE%%X)@DAl*_p>nOD~+5sJ`(hF@oElsK6XW|_&J5{-)ZcboM+xxG;XQw zh1ME7gj8o=wwt(-7=@?uk~qyp{VLT&4rj)sCv%sv;}+%?nKiC_PfO0=Y?0%oMO={p zN{l>H6(WPlYNefhKoN8?!@&(?u}fliMvwcwIALQ|f+hHooyDEAsR1>%Q~Z?51; z_aH?TzigN&3qNz#QyywlW+^-g$pS|}tf}ZLQt_@Sn1L|U9eq~uKo-yEA$1*-=2Xai zX2_PlLQ57{hT`Z!pW=W~H4koV8krbRBzkA&g!0@o%Pc4|0PeD2nQ=SiI+Bzx?gJ`Q zdUsezCZOME~|x zS3OC;YJL1(kGl7OQ+4BET$`yu&fnV(h8_Xa!+El@1TOaI*yDf?-m>eoUuM=k{lCrE zi#rHy8`9(;kK>`SPA~R-Csf18+_;$M#*BrZ8vZy>XrH1fYGR0uJvm9K#M?ke`cQ^R zv@xn@k1UU1lN9KCs7+^#?LPF6c8QzOmUaF=jG4TS+|qM^ zK9BCYbMCnbbG^5;`06Y0&y6kT*G&o)*@gH{KlGsquy&uw2LUjaveRy+} z5q;OB&hmwoio;{NZ=hAM|J#R#6-Vp00ARrnxMFKZO6Uca<`53j3pH6}*C|tUVuye& zw1uU8EHtOJJ^G964w_RuGNMlxJfP%7Hpi|=;_J3!$Weo%xjug48>n5?NF58^9!T3C zNr<_qPNCa{qXpqvPG_uTYiP>;ZYC1(_aAwHHlmN$2TkZUSLLqV#$Ov3I$DZrieS3H z{Z9E-h2H(zemr5lyaz@1-7!D1JP9YIz)shD=D&L{ktk2x=Zjav^S`tok2xrC@yG?B z8GZ8RV~`J9Do2&wha?=P*J>dxI{?5PWA|KM#AbXs+I7lx3iuP1wy!rfLZ;ro(Z6U% z>}U%%q$f9~z7GDM@)U?DM#J~U{bzty15k3}cg2ox1z-5uTJmK6x#<&WY~F6)REFqF zn@2O+2z68P8vuFhfyWO#*%4tX!Bdg|sNgG{zSc18sX#&|K|OqJ1I$t-AM*$_C*Rz| z6`g>0j8BePryv?GE>z2mhe$%kNxOf_FYU{SLahoiLrh6FAq{g@2H?ZJ=>vLpC&(09p>8ORj6T&RC{eQvr zOf*+>;>10H>^QBoI8L8-+w1U`E<&{hy{;Z#k5gMceh$3(07O_n`}EtG)S#>>Hur`> zOXT-CRg6AjekZNT9XwF30?CX5qI`J*%6aWtq-kg%gh?y^-8?>JqH6eYYyEG1n!c~W z2e2=M$lU3ES1`oc2Hn4m5N<_=ltF4Hx(vy5ZdAbPTF`V1g7ZAcFsbvAM0hmG&iD!d58u-P4X?z8m*^;)u zklnm}a8QklJmHv7>o~VfK3dCcyJf!WP>%tk=)*cg-&3a5co5e3>-rX1lg z=D@pNJjph9n-R`e{e+%Yg+Zsx6Aq=kxr>vi(24YtNekl`^G;A^1Iyrp$`=T;~tsQbi`E5r5i#?@%?OuYz?Fy`Wfdt!mtz)@TP%Fw>NB8 z(2_1Mz!P3&Y-?vp0bY9xU$_X)S-iB|lPuq@ED4B)+exc=krNULi-Mjo4#1OTc#Xze zj-`hqSGlB6@{Fb9g&es2L;+}ylAwbfRr5h*z0zKp1n@zya|nC4XR@{M0|jZey!%v8 zQNIz)7i6a#1SG^@%`)d0@8x#Q0JSuYo*v%tva)Da=6BPGfWy}%){y`>} z*^`X1duN)=YuE`l#wKFv z$i4f3TrY%dlSrOK=vpCCJfQjJTG40TGL_7Fp?<*^H}Rj=7T8=fhth0v_^Jhv@3GL$ zb>?nO3%R6=a89&!Uc^KB*a-M@^PwBz$0}_D_1v%^#L`BpPkmxp3_m=jIHw6#B4^<8 zM$yzrn%D|em+90DTAEK2-{DEasj+da8wy^$fwQDx%5`OcHLM@;#5d3+J3Pr!l?pqq zs<8Erm+O=u?&lHYP`hno5~1F5!X}q5Y$h8nnRnJq+R9&K@eS()ZS>Oq7loS%)h)FC zpo0~Mi5^(GH~DYic=%W{{Mv-6UXw8gob)S@XkDtS34?I@>0iLsG$XE(j(j7AUSW2T zkms>Ex8^=qlmp-WapA+5lLVbz4Op89G=E@g<$JaWBY!-;X$KoBO!Q?Z3=Z_40}>6WSx@`Jp^O5TwZ1;`q_Ddlhr)A~>Oonj>yEER0_PSm0o94)vTEg$5! z<=hh;+ezpaj9)F92$bJ!wAV32HzCn!xN*bR)X<{!oR+v^Kj@YUlD zmPWL)_X`fkr-3g@g4X3Rk>!uqO?@f*6P;dGH-ynPFInoegd-TARs!Jc8=;)E+>j(d zIT)CiHZZZ><@EhEdE&0Nw&{N7-^k)gK12I726R?Ut z6n%khsq#j5>~Fh)(__BBcpUjgep-2%uhqfjPx;)gi`lxReDPHZ!@U0j8dk#={e=vN zJf@q(d+y(mi-D`4x{vvti{8xouafv5c=^|VjC+H!F4)+vWUxg=h`k-Xg-x?~`J!+m zA=z)!SI-yDgnqyA84i~L8ecN5X@w*0bMwzU5yV=8yb?83J~r}p3L&mSpT`DnG(=x% zipPXA09y0YJFEyUerIO2mL)e@m^48EnEd5L=d>}gE7J10Z#B;N^x%Jdu1tX{2aDe0 z4DGU+@dBSX_){3x&llbVF0@S|;1ek$y`sJ|q^Y--{dIi5pnh{PUziG~{P{tB?YI2p zHv?Ss7@C{-dEPZb?1Yp&qd4l*W@;-I16gt|5*52Q6sJY^9*B+Lh!SXX+jiq<`JI}G z<-8`UYXcWdh0v`|Pk)R8`kBRvS{;*m$}fIj37d2V{oJ}fgFy?%{yr9=u@u^%-LFF< znKXkP+P(9JB=FVmuLG|*(U(5tdz`NCXS zV0AQuxFvA;Fxmm4)hs+M^C*S@jx)HcOwL4|w%QtRJ8q=mU4UQMlq}|0~6jR z*zt1J39mH@SgAURc|+SmwmPmhk3X6EkV|?7ImNg;+X}|tC4<}GH&ifW{oe{UO!?If zs7X zco`420EzWnhQ&z-7&~v?3{-JsbTiS}u8z1UrA|cCoVYZ5*PBrLIJ44)c z%4$G^*pS#ihE1U$pAM`r2+%`wEBZSLc?WZ6X|=`zG-TI@}feA)m$ zz@8%YbT*@)=&Kg=^e?^&+s+rpK*!~;T>fN>Qc#Z@WivTw>3~f9(m=7b3eyM98R%<3 z%2hU?j4wF%d>zhsgj?T;$2p zFku0=)70RCT=!#;MY;xcScXFp^6x`nfa(S5XLmocAzWOC)c|5mp?`hV_+OVoLT*U{ zhs|^-A@uO2FYJWy3N@(1m%^3Y3)?O3Op$uP^uLN9(Mt%mR8?@23m!~{wzok4LN~Q` z1RRBYIDZQbTk>ZtxsLRKFMbaf`qb6G4U+JEbtYWR0;t&Qh18Pg;oLCt2GICm>V}rm z%$;H%uIjGdDSbwJ`kaj&#F&r9Orrpir5X9mj4H`Ox{@A1z}qai5%y-_(Xzl!InRKR zSkhi)`$#ZmVK?z;i*f%~IFIL^+LvTTvWEw~RJ+7i0eVTq;E(C{L3Kxih(KD$9d0_{zVtP3-4!8ZM!n;+|tPbsCW{>K>XXb-KwH)Hso7rgK*kte#BB)Pym_V zaOxVy9b2_Uex+6!0LI%MDWNhpSL4SQAB7{Ua$7Ttv)Ly=1{(*B>2mq<*+3kE3*YNa zH)c2u?)_gE;Tjb3V;#klqCe?9P5*ZXI7!1zK93pGJ#O%ySrMu?NawDssm4rN&~ZlK z#BI8}d)S}Fc#@WQZZ@wul9UMHA_ly8X6C<(?wGs#m)3wdM~lVu^b>%nU#gDU4p7j+ zPpfQsfOGbCZwjcm(v8wrBda9j+WHQ@Di&fg=O_~~nBitP*rT-3$53aiy@JAVcL+Pj z)eMqvZJ4ajldeE)tXql=G1A9J#)cEr63c4)B4cLx`P!Hvp12FGAB(N#7(AM4buOzT zZmiFrL;*JN&b#OSm*WVO&&pa=6i#oNUTz48)K$ovoE+E?%k!AeL5aAOzIR;G0Sdz- zLlBvHLu`$c?D)dXkaCG}Nf#R)mn-jtFd9WSpxwO4x{+vD^=lkBzZ%}VYGxf0Xk)40YK@S}Rb{U;36%$-jj+l!ds`Vb%`E7BbsH{qf*YQ?-ZXm$o?epm zA0s))tEUZvZpOe-aY#310h=yjcAxybOG195Z2-S6y!rY3gNad=!VjoQa-)=kCR`5r zum6(7@%-fDE*}_B2m8+CB0gmoyz(WqZMAG2t@va)qV# zAbf4xs`3cP{74{B>8HT%B^501W0I{o1z=z{1A2K(KNM&l%5V~JZ`(5j9DHPDql9K1dSeQU>G31sarNQe*=-DCxE$o3p~xBE296C>>wc8jxzKt zzDC4bF9Rzk<9SD|0peoyDIEDb7M>2YMj$sEDmGhdRSR~pUq-`g1Dbl(XWf+USlE?V zLb#E`5^o<^@j`qh9ufVGVlfE30^;0{yV90Di=XQ)ovPTBTyK6DpHNR^|>}0>u zPous07&Z2uGe2QButPofjg{-u_PN(x;d`${WNjxwoVkZGXHrOO@KIWhsz{V#Tp z9|jPZz$Nzj5QbFkT(b@#T;C0-JHfOnzIBFkWFx@UZy(@FePMr`;(a=T7_+Oxz%xh> z^2yEHxKMsBsTP+mfi`EfS&A#Ex6RhTOf*82Md+q8?yL9 zAF?wyGiOr#np#r89XNGKlJ&T$gzTEs5-v9OIFoC zS7V(pjb*iJ=LJH$1+lO&zha0U-FjDa2Lwy*d7lGLEXZl+eO4%;UYpwA$5-u#XQ!p* zg?h=2$^dIJ6rwyz_X%J_^Py5R=_&{{9U4~=IXA>aFepoQ~%Vt9TIq8dI zKpC9ax?_Z#7z^vLDbxZ}#=VD~*G~?ZyU!im$rZhZ;&bm^E42m=AG$mDykqZ+DWb&` z`m-nR>>k$2!|(S5ltb>J8LPqx^#XFs;<#R<21<-in$sH)zysmd1{-W|q5(ggz%7iazpUr@?>D#3Jv@fQT+OAXlMj`{cb!yMR?tF8X`3kWks61#fC>^pSU4 zpw3DeSj6+_$|@#}ofn~VW+y;N`DHBWBQpGau{}E>`0&UGXvUbc9VUMv#)|v!qeFU3 z>aH(ie|I*3wo{k?Xg7mq=`i!Cr<*tw8IRKyVd%>jTN)o_j}-;5^_cY5j2rD8xl^P^ zxgG~{95M;56F>HYl1p-ie*f~iV8W3$($v#g7}w%%&WXr4w=p1o00HHW{yQ8z_hggL z<0J`;byUr{(8ANWAj(7SpSk*E;q_J-Ta<$|e);^{SpTodqh9Y=u$Q40cl@Ame23Qvm%W2eO2|)gH*iTfRQNJKip?V(AQ#mF9dlji@!4jg=X_mBw_3v0 zJRt}F3xn2GE)vrJZV`?}=hp7S*>JgE0eDtifccA$SoHdslV0-0*%XE|_d2K1og-aD zwL5_`Puq4>ZDW&qklY-*3KQn3nC3x0w&*Hay<|YbVxE|J_rmApv16aG&wSwn$kwA` zt)60|cakMQN@Cl&N5cGh%|4eC!QlH}NR#d;dP+1L&1sS?EfIT9O#+gGlQ7G3U9kIV@j_gjOtr(16pQqn#ehW+AkiCVA#ra%4}e0v9kp)r zD`KPiD?9&4pOmp`$yeCSKubz9Gt>8&w936x55llTcY9=ag@IamKt5-c4W< zXh&@9iryGuPEpohdWhJ97DS;p&fuC??Dmf5ffK1uvoHxiOO-JGI`^kWj_g89=v6<`&ZR}z;%1$Ww>(N>^{KgRm z9=J3pK7qd5m#AO(7w)+U?9a!-s9ZGQeTeP6Jl+WNbS^k966U3>HOzb@hlW7ETyyQ4WHL)MwW|x5q0&uG8S4dOv$-R2$PVM z6Vhoo;z@tq9>61skhAS?IzTEwkLOe$*$V#6qjh|-JCvm~y8EJGQUVyGra)GwahsKb zMaw~?j~~SUBOggLcasVFM(aax~asak`CY`oD- zH=pz<)Mu`&4h?vv>EkfqmPfBAJ&u*ULv{g`J>=7+us=Y!EH5oJ0}auAN%?vHRiGG^ z2Xw^Y*p{r0@>T_2)H^m2HCySES(!?x63~XC@H_)XjssrKek>txs14+c@4|xS*_4YJ z@->6teNhkZo3<2ju(nb0;VaKGk8YcAo7WZPx-#hlt7m%v%n1+%&A~~l;gG%U*#P6! zkg#z8$O0z${SmQR!sxpRoFaU9)t3$VHb<<5WC}|8K;q4LA}hiv)3};FWc--?Pd5C0 z{>54@bbJ{TZFW%9ec0T?SG|RoyPxJPfnyCCxFSBqfI&&WTZOR6JL5%Q4JAN6SyiG{ z^2cpueC;M!HrIVL??ARa9h7AT^cf8AeI1H&TlXp2 z+k_L(Ds{w)Aa&QXo*Kd>S~tvBdBA8%_Dm^5whQg+&&dJ0^w9VjB#}UvM?**^jDzXN zf6lnXY4kAQN)d>BGji}8TVswEDb-g^u&S=@#VgxEy)~?uzSo2qT;f>d#ukC}r6`w& zCJbX_a_8y{OI0YEFfXjmgmJh1^w7`(3H)I+5Er#VY3>WQpI}S>K*Bb4uf-Wuqa@5n zwvl|j%>+k)BwyJ*c5_~@%3<7Q#z03tx1MKG1_}(yF;|~43 zZRUP2p4&1@&~D4+V1>Kd_$&Sc_NuY5(7lEX{iU^2?LnL6ctx zBMU|8*Ur8%V0JoNv}A-RJ|~y`24l^LK+EFDY7QwJ^mz@fIx7o~YJI>#d)6zALa+hz zb95*yjEQD&P8`JumpusyW~5;Fx@czQ@2@iOBn`(&X5=(v<`P1!F1w-T3ui<7Up7UW zD;kULj{q17d@pm~t;`ZZy%T7P{|R+MnxVFrDa2hIOyow$lX zMKxmX(NMm2KC~r0GQ3f~yQl%zm_flo#oKxEy**8Q;b|C+UYhUV&r84?YQad;4L;~! z*Z%aU+)4RAzIY|{Hg!=?CL!F1{NB(Lt4|ZIUtVyVCsiX?%ZjTpYF0ti11p|rCOY)9 z?GVt{dgUHE(V*Z(uG?e)v%D`MI-X`F8W(=<21DQ(m*x}d17}bBH{`*E1 z`1^L(E7oIF(t_m)?v4_2m^vKe0g~9k21 zIcUee&B#RJ2?2UY=Kpqn{tleZ;kwvvjQT3+>IY}fxY5`bSTYdRYaF%mPHx7zWD9sgRfzd^(~_=xac1!7l96YvK!kAxQHVKr!6fEwWJW*f6%-nBtBJ|~bk*30SMAHw-`8rq(f{YW06p}l>u-rMqb?!( znPF6%-gph@=b^m&#=*~=Pq9d6kgx5-!$zpZAJxB~@|rK67>u1T)Ls}kZQK9KQnKP# zQ7>^z$GnAXh$ygJ8f5wyEYGBVq?Y?Wc~gvE}!eL5ClL1P;63xb!iMGKx7X z*%I21K6`FL&D^oudS>1e-WOd#8He%k{hcu%kW;*x)&OznH^w?!6HkdR;;O`n0qRwE zI4_SWwnDt=bQ?n~BO=L(!)x9Xo^*-}=Ba#xtpB+8!2eWKV3&Z?w|QmmgVPn&opA-+ zcz<*wpOgvg@HH>_LJz3(*(uI_LOp{7#hZ~%K=DQ!oO7(TZZPB0{CBEIc0y(E-F#dV z3UA{k48I!5#*@vY1e}-JH9686Ww>TK)Qp`lKd9LK4rs_h3(eOfbDF=KJVdDk6e*bMV{7b_CU5Km z59rg-tK$x4d_r{%t=(x;!A8Otj8_2@QS>hz!Il0Cbt`VwaAY?Sb&-n^()-VrGxQVU zxoAmpUk(cs<+n~2^@*n-nSCX@jF_%t#*!97yB_^f|Kq%o{;%Rz8$1>0{`ZBsd^BM; zWBcbUV@oa2cdCc0L5OByYvi|C611QPNbzpMX)B(-pZt1~)MTPhQyco_RVX1AB6-0b z3Ip_;Ps_>eY$&flNy!0D6=CDF#^r3%17z->TRs81QRI2wWjxVCBFPd~OP=nRUu(s-++*ENj*tSug%ikDdY6`KZ*tmKl3+$XxV*d}={~RB^iR z7mys=kfkTnECmgzxj?*c&v#Xx_weQ&;e&Q#4_9-X{C@ZTErhFgc#%C$+0vC)p3HIAsK@wPKX`6$ z`|Ai^J*^K1JckC8!v_b51{*tju7*cJCuwfq54Qk!P+9j+Z#HId!8sz+T(KxH$Owe9 z_|?~X+~v6Q3o0gBm^<#@>)Au7hS09CZF4vbkB!6E8v_)FC6kQ-W1H;yZdohgnl-2? z#-(IvZf4`kyKGGyl3G;LXM%2iI&ZmLmWmvRX$!=uT#NQE9X$9J`d2Am7!7?D&O6{j z2)7|6!LMpL2=x9?)jb}`7713X$Jw+OSk4@8HYpqly|3#wLw`04?#-AG+e_A2H5k## z$DaMjCII+z>_@i)lltM25=$gh#dOz!;V&5V!V9yO_YZ$UTZK%2 z__dQs`+Rca>rmi$AE@nIZ-A5y-LYCuh#Qbm-TiM2q%|q3>k<2iY*@SyMvgv+%m9-1w~EsWV8~P>+uEF{t~)9y#7SE1~%w`~h;*LzZ9h_*Vgh$btTT zZ779)g-$`dKo}J&pvOxYG-Dg5eV%sULXDMl$AW(8`}lKtg%Wbm--Q7vyt0)wZOauP z>h!Cw-l$J?@$Zh9TnSM&^ehZ{5>PRCI;OKuHRO<(d z@;6V-x$H(Yova$brofNfPhD8a6vSNtTvZ-i&ay`nO=Tvu*dJ9)WXYD>SMDinuXoo4 zj6o5}Pxd|K!6Ab^gM9H4m~iv^`bUbQe_=_f8GO$;5SZ&s0zZ#nyWr)&N+VbGNyz7u z9RZ>R;@ol*M6*d`#FB2e0!L-`JG0UV?H_0^i3H;){||%B`@ms)N-YmiL#h)sn{Tlb z>{3)aDxj zMW};pY(NusE_CB;=1$f1WmrCo zu{^lu;4AY41IyY>ob-`wM6ZnGiA1O!tc+*rJM&+zN;d>CNYh6Sm$8`XvsyP*OmK%r z`VQ9`VY}u1pd%vLsvGJ99qy~&b3T*+jg$i#_%UeEn11lRH8F(Cb|AVwdlRM;Yb310 zlqH>sM8>|Z<}!U{D+@f?QfKt3^+`JpqtD}HtHX70Y;77{{}W}KpFQRKGBnQWH6Tys zQs^bUpWpq@K;EJQbD`z1a8$c;5n1wMNcRf>4~&2P-dD_PPKZCaiA%C2mz*~l#^3-W zL_H@^Vuv46zv&^P{3B>*5&TFy8%`o#2P}|8LVcCB&x3d~r!(u$xor`aq~}C>)%X8DV=wGD(>|&KLdzeRVlJdYpaa z?hx}T60iueXsmkg8B2CF6P>4^+qU`TEU{7yD{DXkG6-K!ItvJ(4yb2RZ9kJ9*%sxI zMN;?_y-5XQ`Mmcp27|;XUlmQ$(HTah^NGRtIbga!P?P-5gt04N{f5qb$=tx|4Y+h6 zGzp2QddUNWouQHE&yDGe=B)mEDNP2DGVfhXvA}h~U5GK*-&v{sLNopQ8*2Bam4W4P zbi{nX#E@J^6-HQFy4t>#f97gzp=*EE9ezOQ&Iub{2e?B2yIozXV~ae|;&q384d_mS zdrQKTL0fdF#gLduxHhZ;PdJssY2jcro3UP+6iK8T;4iGkUI7Zp<>$ zPU34nL$@xZgivF7F8E?wPy_f8^C1iQkwb?tS8jsgyBT3D%?iNiynjDOX~4L2>VlJl zjdl`O#D$JNVcI8i8h?XpCj&ladHO8>Z%KK0E$BGyg^icEVV+BY2Q;~iE5f0Z&@n>+ zn2#abe@XpVjQ`Xb5!ZO6P9$j9B*TzS-C?j9bY|Begkwz-j#B&DT{_wBuM&nagNdN| z^*hOZg!m(R<85dl&PdtuxN(_Wf=Tc zloZvfN15np=F}WpqM>?JYbH7d%_wO)G>u2T@&&zEgOhT}e|0YZ#wKUG;ztK4IQ77w zTXy{f)NL(#c!WiD*crU-4+&U!Ner_FE_JRhH*QQTiHU3-#zmt5pHYpBy)}}jPg5LZ7*-JxcZIBq9(NCP(d8%$N;4yTg9nXF)VbkinN55uK z0FQH{$t3JE^jF}*;ty=mLS$T0s>Z0qk#n9m2=QwYs@{~*z@R!_P&(Yp*o=sfkdWtX z`qXI`Qvjerdmbqp=(oqH-a+YIAlDIDuj?EKm?qlpmW^yu6Vg@t!XKkLB(j$_Dtd>j z&Ik0u<&k%CHxr8YL8ZIEn!j@4q`*`*gbsZiD$z&A7f<8%?o}|h{#FB-`|57W98dDECO7}@xI@EMb~!tw6Q1B7@B`n;)k45LN( zFL1teP3(h=`OHIu~o+bq8|Eb*sYS!@ihJ|2$2smHLpZbVwcA9ziBToG6k&i%2N{)D1E+8cK zT3ty%AVmL&WC#fHX7uOPq9F|RCt;E6IQ5s+;H?3hX3X}f-bciF>&E%wcd(@q1bMZX zlgi9QD5M%bAN!b47d2c3X5t6XqE3#Yhmb^mwobrBGvMvb52oy2Ctif~4;IyNu>ZQ| z#p$s%hmlP&b2i|N4j0`4&@dOFZwh|J8|az2`J~%!2XZwV%QTq*qIp!Y!{fYcFHIM# zHlgQSjAPE zz-Anz2>43`A&;f8Z@Wnx5IKK-{+TM1ce2AYrLu*EJ@Bz!s{w}Ew)I&HSFJP{Gp$7hTH1X4?c16sI)M}tNCVPwo#j-UnsN~SW?*{bJ zd(Hxji;`4jADs){4D&p1L>;-)gpf-ek#LL;1f4lDSU0}bH#_1j zJdrO#yZ(?*&&}cMzS#JiFtcWI8Y_W^g$D12oo}qcB}O5B`vXv@YEt1629LZ3coa5q zMUIdM+3N9Xfz}zEO)#U<(({rRAqLo7FcDEh#(GPgyZ|^^cpNyu;j|Ow0Vqfz{Z+e@ zX|U3Owvz{`thuC16yzDwe&OH? z+a-!_OP%Z5AHEZ`nUF~@`u|qEKhz6Sug<|S@ZC9!YU8H#Yb?djp~9BTvj=$af3rC z9s6IhDmjhxKEAjL`rx&D-!Vcwf@bDst~J0Ms-kw*ZIkI}MM?#Z>HD?$wD1xZ951Wl zYlEPR^LKdf=aB-D!pRxspx}HPaXNwxi|3a0gWfL;3wO)^Ai!h1sa6>URNkKU#!Gna zt9zpO+9V3rpH|xSVw-p`9;?^JSA~;3Gu?X#Egw*P(k~h?j@o3NyZ{2q(87)#AqH6Z zqhj0mE0*dMwQc~Qdf@BU5f_+$C>G@u)R-lB11ud_W}6My^~GW<;Brw##J!GKYX)EH z$<;WKcP&Wi&20%W@20f zLo9gju5xSAY@&XeC6+~+<0nGBt6&<$7w?2iy`RPyngc zc%c3#D>k8>j*R{qoDK*Jxz9ODb~A71$UDp)M)FU+ygMw2bN>a%toxzFkCijH?B;2% zx?=0A^P)eDFP1?orc?+RyvBtCq%_(|eOl`ukMceq0wo}|p`JxO*m#5a zl29!}=Zt*Paj0Jkj~Vo}i35@D*SBH-8ISqR#B+id5VP}07S+I$l>XR^5MDyv#wxW2 zw6lJj>+w~{urr_y){N{IcC*XrLf3@U$d zxgeA+Vxc9Yx_UqsPmA_Wu980;)dA=^$!qE8Q$n~9`Bt{>2Sz&?a5gRCZ590R4DoNS+nqWvL0@!wvV+wsKw-Xd?nW&}aYr9#&3bP3 zs|Kz8b!db^UEP%*ws_*<8ua|dd5jkFN;&QBYGAe<;!`3hv`UXOLn|xrj$J=m>xa=2 zJC&uY(!oD}4Aqxmw6MT45j_*ZBjeTbT?}MNva{$oTeB6|qDO$BY`6bLQovb-UT0V* zSCkA*|NQpMVfpXZ8?l8HD(03%@`Av3tsWXF(?<@<`L7f@AoK3>8jUreRgR4uH(`qa zdpNedkcr$_HGgenMz)7PPI9LpTIWxkJ5yw%$VjdW6I~qf)Y8X8ZZ$N>7e0l~_ErAz zQsEG<2JQ$xv|lr`@~OhfwGZ5=8zBQz@z+d3Vx0=4XrIl_GxM@-75uRbCM6s4NM{vgD*XF$8vy4j ze?w=fx!YUNn~+ls(c_sfM3M4~&A=>_3&x-kAo~uTMopY@q=*&Oa~CYlKe&wtON@|qvzN1wn+Q=r6-3_*Lq8ZIdW%=lqU;NKQ`j?k6> zCRy1Wefm_ZHED*R0dA+XU>IWMrpGVc;)%3qS$2_&0mB*I$g)L&D2Oh3-KjQYdVwH- zHF-Ib&pO>GkkgiCEuCW}+lt;OX>c)QD4BC|{X68un;O2hU+>zb3;DLEx0njVcl0p2 zDHZEroe`69=_Fv|gam#wBfN=4vyyO%fu0feHEzM+soQ{KH*mPNodue7U$!>6N{GWd zHw8GrPT!vI{xU`4J=EVlF_en=Lag{A$c{;w$X-Mj2xjnZ@}z#~$v3rO2B^s$YqR;U z6mZZ8h|DzMKAp-UfeiYR_#j>g+lvFfx9}^AG>t5Bs%$0dqmwX@Mk0j3sU!HPAU8}e z3y6kFJ8KF(2vr&Aump;%jN!;$OZtN&wGu`L;=&a*L8pdBFDwEF5&5U?*K2V0Y`vX9!hta} zpdQeFKQ2`gr(?t>eC-~+=S-@3=YlE|AQ?ydCDm6jD)-?Lth&Nd^{<)8ox;%L|7^Uh zCbTQifykg(x?UDF#OTWwkT9Uk?C+;j{&7C}zYhUmU7(N@naiM&wz(gr%mDj9S#ndt zpjmje5j)9ki}{QzQdvOfL>S&W7U;eyryUMG)(8<=-|F*emsq{t-iDI7_&F zH6i>6#JWLynbiG<%49nTZ7}Wm$E>f0$i0`J{}QNPBhS|d4C|xlg#}(02%R)_6tv&s zpy=L}cHVM+SqX?up`hXGrrml(nsns9d;m{^LX&4iCS|)0kzVOB(Y0TW=3C7Wj322B z#-(oLHyJ%m24 ztLl<1;)?x2q9`2B+w=RSxg2DAf%^YOXNS)>u&FGlL345X;&h#BA0Zii0J4a563?wIiIrD|65fAME{m=GovSU$jWK#!S5T?gGNjD87)Gi}-Cj#2wJnSXE`5!G%WZi<8e>z#sQyj0c ze}}z?r#jfAW1bQac-c2GJQLv5u5*U)MG8#d1i0G+`gA_*#}~!xuNe|4a@) zI`vdGw?xc_yI7S=%E@x}WqYn@Kg4(a>(e$~)3Tym7D)u>d(A&uLINj2x8F#-;^x94wIM`0#qYs^r=DqizVZ^h>$HoMn(<|GLhL4@%o^O z4M+Y>E*oJ|Z(X}&4xEbb3j6x`Djzr^c6%NUNN;s^^8u=eT$X(fQ16D2iW%`WCJd9i z4J+Og+O5dFZr>P`6>PJ*$%atBWHfdJ?>@UOhm##62=Uj>-57v=P z`6@s1mDSXHgm@#GXk+PTNKc@4?XGj}#S3dJM6}$ekP};hLLX z(-U9>4abrnd}5Q1qBr6EC2Z{Hd*@SMKY-ChkYuhe8ylN+XX=(VIof5SYU^nSjWMe2a=I)<;ivRqTdk-9QsLBxRx;pUkPINwU+RI^}DhLROjk z-DhS8j!-@TL@(r!Y-z+ITylVxQF{mSua4-UvX9u*Vj!OU9o%{>&npYluF%8ju3wkx z`#%G6xjBhfx3aO#eUd>5J0Wz&^nSj0Ej-@OTQN3QoQiZ$8IIvFJawbnx3b}~ebI-x z(&te5B-#z&Pt8XA?Ua2O>H||YR$P)8=xTwg-xiwLv$Y#YxR##KuLHB3&SSA=oTUn* z+N6?zn^4aNzQ7CEnf_S~4#%mJAP)DKJh24q)blK@)(!Rh?`rI1+QW0E2Io@6Ye3MX)fHpf zqr_Wl|HzlVgz2 zVhJRI6_jQ{DG4Idi;W_LqS#&6!VgdpQEUhzt1F-olK1ld8Np9T=FZ%E&Uv2iL)r-k zHQs*wdn&kmQvZ$|BkH}zs{1cDftMRc|CeE`-`?8vcg|#hGY;tJa4|w}o<9t*8)`9n z<@}qDNvMzXqEb7NY}b+UsGE!at)UfIq=7-AlU+HN_P`WU;CtRy_}HcBEJ6nHX7)Ee|h!aZy?77&H1z` zmPXOO`}@kiWVudMP|k>%jDq?DbZQ=+L^9V0$B47TuT)HG29n4F+QkW2^b z$QFKlnQ41uQj@5nkwrO9ZaBHdlW6*(DXHa&H^cZQdcLP8*ctkyHSpa2d2m;zGUQvX zGzE(4-Tb73(A-5A&K5agXuwH?o^%rIgt?3pBokVG=Zi|%LcVZxSdNj>VAjZouk1;} z@m7&^CQKUMY0xHCq2)D&%w3yt@>>w!(Jcf1fZE&bxq~C`XLYyzRZNi4!OdGMZq^r(o{rjV}g{|nept-BoD8_7iou1+UEjd*ZbsB0*!0S?HSklieS zkCO?c&_edhH+g3&^>XWQ%}qF;L>3y+G-Etc17!88ymNIdlZ1LX;LcL=TE~b|uGR4- z-&+A-CG!3323}R?$a@5u*MKoUUw>f!RB^I^#1+0x&jUjKPBm`iyNt^Bw6vA8=)iyIW=E1 zZ31okW#?G0LOH#p0%Q%tYE??Pr?ZMnPkaj$8T`twjqWOXUlGu{V9*t2VX-06WHVSx z$4DpOEq14JBeM*}5}x933TkcQRkj=yrj?*Gb_>pxoWgOMe0t+xv6Kg=ho+@U1R!zl zhLYE81<%=>b^WHJ@@39cpsIxV)~(0x>{Iee%5cq}Q0k4Nc@p_-q^NOGGmNmjS2%v; z#)o|dB;chK#L%O|-0hw`yyqL>A*Di`kmnXs0^nx%e;Mp&=~qv=_A#hN4tERyUC|Xd zLE=rJY*Ed=nD_=0?gGGGdQM>+)!vz75MjR!7sfvmq6pa0DjpFsquNrm|y1<}^c^K&cJbYu-ysZF=hn^9h^kCE3^d-@u z8K9leTawYhrbm0{GkpoyYHc3nGA>(0CXQXV=DH<*W2kWTAMgkE%2O6mIRUm48h?7( z#=DY-=aeI3O;R$%SyI2nh%a7)9BZ^a$)+E6$BZOIgIhRu8+_J}(82btUPj8c-bU$0 zINK-g&5_r!g1SHRaV-h#Z^<>Wn4KQQtg9xVD}{J5a0zF#+nYY0gEI&%}9?>2ZDTqO#JK0fgI zdIDEmhgSQoU&E$vUR6@QwN_>fVvYd67-C8IiQsFIu zAK_Wb(YjJ#Dhz}-ec3)^{?mql6Ie4JrY*h~#++n&u)GulcTUJ(-0~3aK}wzUJEri4 zo<)TnEf>0csRvY7-&RNVm(#HeMoHj%1jsWZ^UL75ra&uy7u904xE~)!_ZsRIWv=R*(2}{i;aE4xbgJ73d&PlJqVG4TCPTF{=!{X_H;2)2xlScF}8mR z=q_jK+dr??9NjR}?&)r!PSo@kF#5JZS0uH$Fd^!wzY2IRA<*UbW7mBMQHD&Xm0pB4 zdv(sc&TW=q3u?1*&2nv z`+dJZ)s;`0f!x>}xr#|Wy6x|ay9nnxWJid6oT*>lpZWV82wdqNGU~$gZGW7$*~)Ep zLYEGC`*NsTLSxrsHDF4XHJd1B>-|^%i|7Z*&xm%oZyt-PJ@tC_itJ9rf5<_^(%<;c zlhiMSCIDHxCAEvGf9u-9tgdWpbe-S2F$TQDi%F0UOfdt>r<^~{6v`W41*`{m<{|G{j*Pg;oj`JO*vgbr@|kKW#@qz@hesybN7TljfL7SOmkfxxR@knPPwt25;DD&pg% zU9iCx_fyMG87jOm1;7-Ge(JvKv{RZLL2BsrwDhR0>Dd=2gFJ4!m16FiOl#Q~9PT$K zGRqE-I!GX>!(80zXeEn~#1(FU3Z#%O&kcd0gFvcNK z;FSTiXr>b&X6oV?bhtmWTyhq&be;+`B&O`d0boQNv8~3$tH7q%5jUo2R8^z^FY=?h zped8CgK;nJyjzcfobaSk%>R(D_*Pl6!R5lK8G4V>;>Lf2E>sYVURZYX#~|1JVgD^m z>`S44$utU>6lA60K>tgAws43`+JOYW71m(1Z2_UXhlN@N1VqW;-By+4tt(O*m4L=u z7?kXjptjDwf{s))_5iJhyTUPYrj_h0fMygy*^{QlpJDXVy6@C+J$8Q6^+|QGqct^M zay*W#Q!;9R6P7&1$q?qkhhq0_1=4#sk{7?{QJtlR1ahjZJIe_!*~|(feWEZCv9O(E zOEi?$GOl6bdGJaxmS+cCf1qI*PN5nRxoJyCK*V|=Jgk(VXa70T4TKfc3=O@+6ic9A zKJ|~gOyL=I+KCAPIUp-K%tB*_tKFfRUmF&D;=+p(ryH zC|;NIZ-a2elHrPWj2<%eUP{$LBJN{b6{a{%&NCP*H;o@J>Xq5UknDG@&!iG8>px z7E1+fbe^~vn!>N%l%7Lgz)R3E_jE$>rsZ))HZ1Z}7Q+@&=(i+-i3zph?5hflY4KQb zMA*1F?+7LaUr;o|xU@4;u6xrs#%rcQ@yv&(JXC1zv7G|-U8o0rZ3c?mAg)8jBc z)o}5>r{q(b3I;IJZMg81^EW55Kwfk}2ZS?AVWR*8mRFiU-HeRY49OY1r!%5LYWd9+ zBz7#R$q0?DbbY?W^w!%raJNUoJGl2MPR;~g^02PHP!4_D`|Azg`8P%V2w;EPKxsn3 zbp|0?QoLjfphm&h=CyAQ5g596^gYBBB@j_P~X?*ZRu3ArTPbu&| zwHGWtTCU8g5KI=+$y4s_UOea$i{r6o2DFHD$i&@B$J*0lhODuYEeC*w);*EcpzN4E z%6K$^Lov17=qq*abBb`Lku3y`96GZ{^E`H~d zYdLx+apz(fIr*Tvbt|Fv#Ty3bxH=L#y~f)+NlK@&Q<}6DT-xrp?W~9=@{3B{-~^&G z^gL%PN~qVM+6HY2ml`29E>}(@f~)3ji)HBdR_O^l$^iHGtg<^ALzWBH?@gPqrvE$N z?j&39T=7zClN@p_3f}~~fM?IqCnJB$$Ryh9CecwNYVPCi2RYprOw5p9+VOFk{v6zd zb30Yw9EfS`^eX6-HP+Q9+Xz_`>gV5f#(?_AF4xBYbaB*O2c#(!XxgQqK*U^pim?rwK26 z5Y9SuaGhTVs&DkvQxRVTYRuBgJ}nT<-oHf#jbby9>G!(}Fq^DT>+^4BS^9)p!Y@P(Tz6%MN#sqI3H5Y9W7^p6J(L!7G_)a5a_k*(W!}&`xdtsfgQL# ze7u82HEmgufD+C<$X1)Hp=@f!p9WVt0X~&Qiol)ULKc5-cip8TkFIY5XZ~4|_<~CS z`7%66d5bk~CCA-6l0(Q_AJzk(Qx8P62U|ZQL~e;G));`ct$tZx^%O)RcAt=5gB_BD zVUmYATp;wm0aJH9>pZlI&?ph-;hmWnGB+scdq1%DBCN_Bb7RKR^q`?7+!mGAAbA1? zgqA|PW4Vg0NF`GC$cQm@_u3eDLe`4VuZ?}fXw!m5riJhot_T{v?-GaB``_mUS<1*> zu)8J0$VMNOV@)&+gHp^LNQ22oC}Gd}H!JcuKy6OjZZ&fTlbet{+NYL2fl@=SZGA|{ z+>!XcS|aO!svr8Gp1aYgIs!5 zG@na<&;!PCeDQa5bHJ*9fpd`AdinlxIrgon2zPdeCEl+%xAaxtM**GT9yIMP>9J{VMSb>t@5Dm)}63&2KX+D`W71C|WUp#H1b9%;U zDvRd0m|g&z3AG>ldO$y6&4V=TuXJT)2{5mE!fd0Xc-S3t8L)d2uuoE*nRtn21XJ+H zAqOulC$tMA6EHF9?9kNxe3EP zC5a$47uw;yL=TjTnO(dWEfZ`=+j+tLlYo9f8>emJFr)Y}4qqMQ9;KC!c!~i?74qEJ ziqPF3D^21leBjgYi_?peWK`v`D<%fGLXCJ zJ3hi;UG@xE;thTscr3LghRmik{+wquaU(TVj8+UlGCJq+JRyOso;DH#^5$5}0ty#I zKE1_3IB$PaG;DvKhKES4mO5KW1+M4+Wu0nPMWa0LdrvPe=- zzlKTc$_$p&n8q8IRsu^foNs>|H*r#4EJ?wg7r^;$3-ZIB%kMO87~?6j-~|~jMqad7 z<4O{uN8_NSG2Er^0AmiFKi#5$i+)JBd-cGp>=C54=pqZ5cXsShv0FBiI*>;*q~;{F z?fy-~sWxb-GB$DrhYGgwfiF|q=gOw={H~i6`^l-t|EmS16XMqD>NT(d%pi7b7&hio z->m$7|KbFmwdIHAD~tMlNQG@yl zqudEi5c;BH!v?lqS*LvI;~?;e&{lswLf4x*@4ms%N!55y;lu!n?(^D7GAht)Ku+Wy z%Vko(4~#vC%;q9p9YgO8(1X*sHD7Wb?ck9nQ5e+I=IiWM5prjhavQE&d?KZtTz6R2 z-z!Q5ZD#j*r}BLWmu65l>A#^PfgN)_66UIA9ykyOl6fx#aZg9^n{l+f>OdDAc{$6> zzIqQ>Dv{xX)hz1b&Z?@%AHmwcHrBn4Pkka+{hl{f#z%Z}&P-+^mpx}<>-Y(I6799YR?T~(Zvr+<}El0z9PcxCLaN?zPgj^g~F^D^_hChUy8=-_M z;cGzju^XECKS#ZIqKPo*11do#bYXn$o6 z%dWxnrROJY+zdj((2w>v0u1Pw-K)e!Syt*fQByVX_&31px0X3mO7i`;HT% zxF!O!G=gWI=fcNr=|BNu1=rkTJ+!V;9=55*o!eo@^7gR9B~}3UwcW0x%7=(u`-|}x zu63OI06Q)#0yQc1=F9iPU)Z!0VNsktgnA!3T$wn4 zF?`aU^fo?}ljFi5-1#n~8#t9boe(LS3O-@Y5ajK?FvS4C$WXti7zKx37|^*d`I(Zd z1;aP3yP5x#G(V}6A*6$r*sTQKQfIa&t)1Ia^Qdm zP%)vtkM!l`m0^rB&nt@)CZYn8^MZTX^hK+VRXsiexFkD!-egKqa>PPAf}ar477He~ zhoC*7tvI5bk}*UPV(?VAG{4Es&+*1Lc^3h&9!_7hE-2zpm3`f-9KhE-6!8x)l4!zj zmAnH1wY2m3k*D=@@M7phF2=Y8*%U42uLfDUzVg685Sn4-Wa#}|_8yaU>Gv7248Ehp zfCWc!0|;B>zLV+Uj4S4E>-Z!s@|He6mAy1uxXW9?A%TOr@0)mIgJgQ$4Hlh z>&@Ys-!ZJ43W4(>bbM&&o(XFx@_5a=g(~=qQ8eJj{rC8PrTk#fJ8K_qJkDjB?wcxn zAj&b|^TY`-qvdbS$4Ek*i}v^hgc&g@W2rN9K7-#K8;bVjvXDpfS4yq{8qF|3*4o4H z<)v##p`bV_)hWjeSqU`pv9pI|OnmJHiuiwiEZ)6>tDvB((Lccf1K1cs&*sJK0Gj zv1xV8ZU|F|p`f+tKCes_*Km+sKwlb>MVS(>$(RUP(K{b3T#;h{%r@I8=#{+rLgt^! z@;HD-*$;1e>@;LQ$q=g7S}|bEvDg?P)SZZ~CSf}ZO-9>_zi{Emrndl)z88vjTjLfvZ?ZbU77|UK{(Xs9b0B2S4$h`$pF-#-JDUN* zeb>#~JrjD?@Pr;EmHpJoH@rDjZs{_3iziNj&Cd;`4GKYVm-zmomWv$!{OIiZiH6$T zCoNZ5=*cOqctWOOa~-w6mO+iYG>N%6G5a0TSTn%T-`ZXiWVutQjzyH!H2pmHRLaW8T5Bb=f>*#J8=Rg*K@kv97|9H0?SV3CJfwPH*IJry& zQzONtm0lAJ+-ZZlxJk(NOui(BE3QCayHt&{kSo+}?LW3Dxn&`s-$6<2U5+nWu`%aM z5@>wod(HZ47oTIWU*P-`zRFuwU`|qUOTj9C58d9zuU@Je*d+pJSQ_+LcYEXjp+1gi zJL=za>1bxzvPeRcgr=la++v}d6LJ~snM$7%ES{JFS**!uoWgAer?5)h7Zz&oAr(D&WPs+6pGycPTo2Y&GBcQZBc1rZ{gdQvwP5Z8LYEJ1k`$Q2R%&}( z7Zo@=Hx{q)q*)Tg)|JXnz1I zO53fABAWJDS^gt^32oQbe~gq9>|bE^z7|Ueei;vF@(cUMet-l(=(OD*&JQa-&N$q(zk$pvZi$31ur5tCzrR#3RfpWN|EUOe?UE#Sdy5C(f;Xn9S#~X zyeR~QXa=ku(f$22KKnnauYMAn!QiC{B!o*aFsW4GqPYz?qb!15i$|I?Mx+yMS*E^tR5aTxj<-+QFx3a zn>s57xFkE2>>KFIXS<88UrD_Uq=Jl{KkVD4(Pw&mJSQ=R@r^A1U#`rH^9*d>mKg$X z#OD6p84O;lA9QfF8#f_f%}*&VuV1#sP5`)WLF@zPXn7a|dL^C{K*%4*>sLsra8N{N zGH)a<;Drtocft&8HFhOuf-40HO6xd`)Wwo&;{lm57%%F+7#W54 z#WE|T{!rH3@Bl-B>=t=^TsOu!7}Tm)>uKfuC#)U+usg~?M#r740Z0-m>(-3xXRn}^ zXdT|N&`T|gz*_uHLq;3T00DJ?RQC72aQOwBTp&T~hD~@W5|gnBO>k*bKMRfap+#;c zG&SfTtz?XaXy8%7_&8YRaliWZVMs-wF>4DUdxYvlM@!kL*{Mcf*LFGDTmOU6LO~)v zn+&Y(SEU$Fe*(}OHofuNBDi87^cbza#F+LVLwX|UqCou~X%ewg4D=`8ix1A5ASxCm zuIV+P3PY5e(+KqrRIU0d z)vDbOY^iD}eJ;5=TBbw&V!wu31?FEeEC<}HAI`tCD4>1r@7rdCQP&>7 zvd5m=5_6+>glFgh(%^>&x`=VS2UPufOueB;oriRm0+|SH)c)`XQ1um2lCc+{sI93S z8evl-`b;d&5JXnwbq^L^^ zKbk!SZTdYv3cCJBg=^~PfN9Pf;QC{to?o9{AuNTlLcqW1fwmrV;|K|twQm@}e3k}9 zZah*GLui8?>M;chqdbTCQ9t-Mr8mj>_0q-A!|O-xuNF2cFFF7X{?}F$hc(~jyio_R z7#F~oo~2K^l__+2d<$2PK!K|ob36!9eotNxMmh)mRa@a8;=m3OzS5l|2w5p`9z@rxtU0N zBg?o6*BojqL7wQv_X(fh5>4as%5p{mOyv?wN#^{6$M^F{&3YKp=53cB*`D*xokKbg zkxW-!-z<+t5TS8w~nB#Ut4i`;ib;Q6+H63@hTBt$> z<40Nk-*TAm>Df$FH`JI4x}2vbDaU^1jMK2&i7>kO(5&<@LhXuVY3hoNP@l|svB88+ z=sGycYrX?f*vDp0$$pHHKp{B`a``k%hjMS8prO-hapwjo<3d12iV{u`NcX`OVVS#F zZ`1(W&4y_$Ay*qjzyiL!)Q|Beg|_F;vZUQG=z$;%nlarn;OROaM}cVW@AvzqzoC@# zubK`Jnn0wmxRP(oywBAB>{eB+mil2NKRD=)g$;!)zogwzA?=2)eHI%Q5W3;&qo8wF z20OfEpZFaLS|BV37Mme9S+}v54K}pP3$q+B`uB)nXu&!FDeqcj1;8fnJQ-Q-L{rRh zNFjX$d9myr=Mr%-{`&=*#gL)ZOm9f2b=mKSYXzxpdI+E&I@MJc;<^o|QFDqf;d}te zT(>{W0Ojs;`xGj4*_b4d9e^WfzV@B%6OSuL^W&!>8!OonK%~9?lD*r~nM6TS%@jS2 z+lAV~zG_^%5xU9bth938L%G7O+0C$2aO1t}fIRpaB;I=Q+G9Dnq%v+I{``I9n|tSv z=gcgjnCY|VUFpIvvo;+xm%X51w52QWim2RMAGB9_BneCpgP(hY$I&7*tkz|$f4&>-y<}Lx|@pJJ`+^~f~0<ouLmA?d@( zrEP8Pw+!8)Auz_iu=&BE2tO+g4DHT4mIrZRp5-KCR~7^cm|03gEAs~i+~5^ zfVOGOh;ij@;qG857(~zKEs7!OnKEq6gFbya1mg$UO+DjnlNs9XA`X2*kfBS?{dXGk zNlsbuDrc}Bd_M-R;?hl5&@XJ*0mPq9)7M_Z=r64P&3Mmk{)!d_0Wm$J;n5q(6awH5 zM&1lXav8+|2?Ngi!3I43Pk)^uvu5OOx#)#lcP21!!n1O&Rr}A{CON#fyNXB3fpxtP zzopCt73tB30YSjb6yjguMv5Ekn@$Ou$R3h$3k!x-mUQ}F#$WIYA7#zW&2sp1oh{aU z721b<&1&H$*y?&larJlj$G-Ume?E~%*S@y_dIx#bWQmLqOMGqGu;vI@h^Ak$2TaJy z-W)IlfwSh=l`lK13=bY%uXiey{Kpl(;tf(+RW-t;2R#|x(#j`k(7pSE*D(-ppHqqRL1nu= zD~<>N4cG&lGkA!l>F@Q8T+%x7qaB@o(gE`PvadOWrW8rY8&zSb>+FAXfnEF;`p?^5 zE0+G0j8$*#e3Z}3dvWzz`0e~tKYym0x@jDEVtsfI&3t7KNBQp83tZy^-~Ri|m522z zgZcqL`GJeS7FdawSje&gNDcLh-*S|2eu{ofTEM`N!`B_Xw~fh}Q13U8#|Cw!SJ-B9 zNz>4+y1`0>vKu*`M_wlY+8||-Q!S?do!fLHEq|he)ZjA2*8iDwE;a{{hS0|ABSTEe ziGZ4dKMe$$Mx;KI{(Wej1Y4Y19PmCLF~;6H1dYAi8o%&uSC8?!H= z(JNN#)AfU2W#Z-vnGvtqY(hrhm2rWW$WL%>`~q6;VtA(H_9nxX$|+-w6B#OVgvSsg zLKjyvHVn)a@TJzXbCwTha{<#?$3|k-ck5I+L?@bM%TsJ3yS%ziRf$Hlz*?+!jJhTG$h{#7Pc2~k>uW%tb*81E3UW=!WnKea6Ou`DR$9LMLV2Ihg_x~1*L%S;o(dU_BZNeCt7hrcpcO)DyyFay6~ z+^x=8r21W3(!f{+58r2NpL|wMv(WLxb>yfI>`OvGu9#*%w$Fh28j&#E$f_2BMI!J& zkjv+Lx~VGr-Z)6NL1pg_IkYOrT~!nX@Z+uWT%JD0Z>Awv1-a9?v>{dPxdOxZJJUg9 zcoXC}e{1V3E*zSKG~=?{(34NxedoCfe}rXIS&E@10mcsRWT$v7jWz~`0H{jFLgsM* zCuLzbuQ?RTI(g^UK7f*4_u_wH7=7vGUxehFoNWA|2$Zf_GeUbl5OIMBgjnfe^eiE% zHGK+TS2mR%$T4J^r_7F8l_h8r_k9Ho!9nP8&h2POB~mwm1~Lv)+Wd9|jLA^4z~+*l z^b&cIq%2kF{1%C~Ddn)XL}WTnAq&*=QQtP-axQ&eLlwnkzZ@MO1yZRk(CSx{R_iId zGo3gjKD699<{X94HC!%2Fw$#q;7E<|1V+&kAQ6p&EiOI1ie}2cmuj`RCIS9r%&)$^ zBBxWtgT64L4Lr&o&4|^jAm@L@nxml?s}1SZhVi7nU%1SJ?A5u*!_@6mEstzMqXs_D zlSp%+)pF>9S8o1&LawNfe>mY?bnDQQ zWEcu#6Pj=rj{*bBV^f}6flnTmWZ{`vZ883f%^=8I?oM5-T70Av9I_U`M{J8Dq~|qy z;AD1s(~_vx3qS<|(YD4Lpu%%Wf*Zm(+ms?)-3wQ%I;Ye3$f>c>1Dxi12&RM|v9JP2 zMj!JPLSG|OQX1HeU^?lqQ(g!mGpFTNoPEn>{M;HWB^oct2qbC$3l4K@-oCXL%E2b5 zty@^aHOSx0XL&BSa2Dwqu^nEfp6Epc>J6x_u%K`f>)YP?s5(PHLSoM_ zr?Q4a9wyA7fm}}iL7NJk1#$%bY1M&0!v2iEzZomnWnIDP1K{PaI{T_=^ouQ>EXhrQ zOo8kjF1&@IdEztHYq^StC@HTL!srKByM*_AK!8iTx>Uer*cs1~9_5k((TcE=IT)Qi z_xsBy=fS~q=UPl00ck(CsJ(~=!il8Od%>YsjW=BZaXlooF2~-=h_UBYx}|uO+v2V( zmruyQPd=;d-va*1U!xiojcZbP>4Swg(1Fllvt$EWRUjDzJBgf2XuZ-up=vMCCNy=c zp-mQt!H%5|3?t?>gv9gUD66`S=qZO-$uSZMWX2|k-Lj9&oC5j-U_R-%`OL;Ukg~88 zT=l=;S?HSG?x%pQ)2zgbN$Y(c72X*nbWJS*HZc+T{l2`DgwFSU9?-ZuL&cj`9x~%5 zIFG$nK`fzvdd~ zM}E&P^B`om5m8NC9ut|-xeoK?dT7d;ih+s_!smXAp28LX4}tHO*t5~c9{u75E2@@nD|SVQ~9g>gzkra=!!`**RZAG0Q5OA?gU4G)0%0Q$GJUU{4V znhaS@eJvXqZ!H{uMyS6aaZ1-CENTJTy5~GMVd~h|N=z{oUOgos-rO&HI`6g((EM%b z&ENWzP`e>bO|JDU>M}{NfKIr$U1Fw?43@=xeV3;KmmvN-sb@tAb2g4aFN|FhtVh95N+bLUKu9a|wp|f6U07*Qrbk21z5s zut2ET?s?u^wx8GB0be)HF8Fv#Ido+qu08?#qPLt6n<4lGal zb+?6k&KZhLd5fliL;dU*f7%DgyV;3O0*w!3x4J!)tE!~s_2SMpu(xOK%+)hh^peW` zAbp;Ef5klDN1E4DC&y)Zyu>Z=KIygq&nPX@4xyt#(&8UpyrqA zqcQpiv6ptKWp+10OB`j>%&tBA`BP=-JPAf;wmg~Z!}W;oPXzHpu zQ-JO&kijp8Pd=#oXvOTRA_4s3g-FjidLVkG7y`bAwa`zObAN~N;oEh&Ahd@9?^t#} zl@AChw{nkT;$7tJ;e|W+3D?Ri>v;fB^n$r&*N9kl1Nn8ig36|~Sbh6>F6X~IQUQ=j z{#Hg9=ITViInvLx&W=VA18SOL1z(VZ`a=ge4t9*cSz|r8XuR>Tfj{RLnbDCUNRA&Pm4QInT zcUy7d$a$cr84sy1ZvHIHZb9SD(dTpM-aWTZ&|75~;_p8q!)U$BM6us;Bt^VM%O)$z z$&p=WgC{kc04*bVCPE2201jEYIkRMXi!cxCir%Rj)&Nyknk znKH{;UczhkgRPbB9}u5~)2rX-3;)~>^7dr=!yb|1*4+;Pmd0!9pMyNv@K& znbKdB-~FPgr@F)p)#N;<{I!@2Hf zYFW7EI*bInCQqy4Hk%+XN=hBjNw)WVH|b9xz4{+M+-IPF=I@<$n1Re6eOTgP&qePX z@n!gK0~Ej7Y7D>!PbU4f`xzmdgN&SZrE_Vj+Pk@3{1$S;IRMF0Se{W~GH?__Y#T1N zuxJW%&S{u%SzyMyy`0w^NhT5voB0Z0n*2te$E6kiacw8VD0?QN)7Ej3w}Sf3Z$8A4 zqqLY<1M9z@Q`o7W{SGZ@FR@|j?|ymKhb1y~f9LN9ijJ6P+m$QlWDg;QUONq_tWODp z1sQnFQac3h9)OZv{o_6N*96rsL5QZi^11xrbSL zK_@bFlC5&`i=S$K0;#7ut-caf(>VV3%Yn@&A z**(g&6NjuhkOjKjf=9TX7^@>41E+tOX`sj^qj7bW-47MpZSBD|v!RP|t<_9I8~Cu4WQDtAUSt|?B4P*oaF8}4_99Da>@hCc zzJ@UyQ+Pl>zHfVfea{EtHV~YA}JB?tW6cSpso?3s==zl9^c zse96LWi`mUsg{Q^q$uIRuP=noCRCx8c0m;zK7URiWdB1Cya_nQMu*=ImnO8UZ2NkP z0EA3`66^?^ck7VSa@{x^{Xsff7)i+QSgFDEHVv4{=15LCWE zzJMu|(B7}A)^8Kwp3~Jmg)CZX$ii9neCYmLK<5SAx;f5oW{kf!CC@Ixnkn$_?zBr! zS=q*j0HSdj-OmqdpYM{lh9_>r#C-Tt*G=WMG&y zepJXj1e$6Nwa0Qf^w@><0nRhP_+e!D)qdcmr_5On9v1?nadfm2nE$?3uLj!N7^I^z zq!y#k49gP9h$dBW#Ys$j87_K!wW$1VtZozy7zNQmVlJANsvNKZt?qkdsPyd8M(ey< z**q9pJZCkXmhA<|Runovy(*x6j)k)s00U73VVRD^xOp&kXtQ(*`MbYrFVSSZ&?X)u zeTHB3J{|D%17T!?vOhr&)a3HxLpe+VkYZ8jo>!~GPXVO^mTx_w+;5p=_cDE>uyJEa ziM;90BP0T3KqyNm!}DiHiY5aMr1n;xIWEhEJe`*8c|eRev`-|Zuo>R&Y3ZAYhV|_L z&50@6$hOC#rf@y()scXtYbtC=mK+beCzLJHA8O;UEDTrq7Or%#_` z&}DT!!dxZM4eB9VzyzBP%hkUUD_4i*rY{Y5_ytZt?Tky^S(QUyTdU!3b?+6Vz zW!}_PIB=PKx$PS6hMNS*5z_yeWuu0|ed9IiUhsn_Hx9FGLu zi~{&D*Yb+TT`So%=z7ReG(Bgm2zNe)kxr3A0tAb5KK9|_aa^NA&Lc5jVN4VMxrha`j^KL2O+=&c^|2G+1lLPI)5=YdpY851hZ{giR*_Qt zn_+B9)wi9=C-oybpYRP-EaCd1;6M4z1*rB`k`0E$<#g;3u!V7ZHV7C5^r&+4X<+== zi27yL|1?A*9twS=39^Mqw|~bI4rTAljvE~lSfBinsuVV|^27p{F%X}JKK-|%iAH(l zGkrFpCr}5WmzRXH4dF`D`Tb3`97Q~c^;EO&)}L3nKfxwTG#HX>!K~kk9Fjei^@!1UR)Xw+nqa%DII= zNU{~W6?vt43gL19SZxpJu~Fi9^?3iG9RL6CAE9SF)3!6F+&udWJRPA!t#@|^5+b}u z3(~qoFr|3S6{96N{-EpoH%vPVr=4~qbXf;#ZGlKL;u&rE8bV~#R01l^%Wz!ZujwDs zWl3mT%%ySzT69ZhsBNyW;X9Dc9E5|>KNgoxQuYHQm*O*=RlQS4cLiZfgHl|*iX7IP z?V;=_=?8gKFuHtl$)*+D1m{Bq+bmf(sLjJjlI7nGVc1d3pj1tZ^=$q%2_6F$x z!glT1YbI=ru5V#j!gIG?iOl?;tQFTR#by3b?pXWC<_U&&QSpK-E@J^de(-Cxyldb% zm>D<2mros%|8GF4Q;9IrHmF!~%YHA{Lt6Y0*aE!aAphrIHoeZyK>Dp$V071z`E$lK z%Kv)6rHO+Jj?Vn-otb0#mO~1GXNFuhT)RT~=zShfe4G4FyH~zY?S`^gi6jh=Suedk z>7&&97hGU9^kIOnl@QLW(NU3VJrL&HVcRTk1#Maj2Cn^>y_nUpVxp}!nPb(+VbJc0 z{zv=`TG<8b_xEtN9+o^2bWCa$A5+Rxrs!B2e3>!)wNI$%e&^5JH_VAjILovhbS zcP{OE&CuXvLid-IBA!RGhR?M&L`!r)@35v*=a133!BMH$3RxH$Ug^}pWqf;lyBxKY z_f02N!wy2LynXpM|AyuOmJc#Vvg)=XwuEOV-)k^m!e zLsy9zSF+{si^~QenxU!Q%E6qs!|TZKiZg`tH;GnRC%R}p^>AS4@U#&RYZzba>l;n* zdS(<~Tm{&AC`qw>tH2=J?D6$(C*UBXy^Y(?XYBpcar0xY;yrqO|Jbk*^LvceYIdRk zuv~K1##I142M{6@;hCo$sBsh#Iez&Vk;wwfLj=9;-zY4sD9zWLgp?Z)gf zkAHJ^6QY~@gG(_*F}$^3&7T_tGO+x8yT=T8TN7snKiCawW}r#CHH98j_roA(InaF8 z_Et_eVW4N~&Yj>Z%#lmuy&6NBF74DzXD;a*Dyn?aXQUtDn_|B5DHvfjectwe9G!VQ zRPX!7XU-YsoLQYYV;Q3|&e)?(DkcWimrA>mNQFMuv}qkP6K!abq{T9l>`N&shMCf) zeWeJM7E5T8-TWTE|9D}{a?bPI&wXFl``VAuo_4pIIVmE?G>-+Mhj2wi(}ZbC+zY@x6h~LceYK;2MyJVFa0Kn#TU3kIN_L+0yXtaWT zq30i_ZiU{}<23-GzKNV?exsOylc!#Na|hVC5ZdRkR7`u=*Uqnrubz%<-Z7jDz*bY= zc+Vh2BIMHVJ&u^RjiRhNfl$sxBD))Qvb8-H#qj^)wWr=bXZy0@Xr02<1VA02`cL;S z)1i8_&zcnpcz#h)D}mSO#P`6HEm>ejq0)cwn62#|oqDU8&|Kbm#%tW_mfpzE|LO)x z^)6NQ5f0^rGNqzp+`aj+Ms=1&J($q2WB^xdqrXSaDp=Zgk(BuF*JbeM$_fm6SK7tg zpGHWmP)%3sEFC0g{TCab*HZZLZ=RS#L1qTWZ%MswbmxvH7xBScBmZNsWj zHnMS%Q=8D)GJnXyw+o62PYMRQ6k}wp@TN738c4nF$KcD~qLn`zl?=2l(L{Xhayr^e z3I~K@zpFFD$^s=_nCLwq-`af8D+XoOkzQLvwH zdcoelSzzynT%CW;xF!qHfP@|S9H`7=;W5YvUQX-DGps#xIuN9|udAx$$s6D=6P~rj znJeJfya65n>zsWZd-5sw&Zpm*hOq(flZCi=HE(oM7&tFMlaFLih{JCij*%z=WfwUx zhAbA!YznQjOf*jtj$YQ6{{*Sf5HFUMf6yGnXwXI@D<@%i?8~tN!nYglb)0rVyc*zM zK9azs8@k?HIr%sqllr3o6Q2UPG-n;l*|;mSEE*H9fN8gD44elE=fGH7z@OOw?Rd~> zm6_pI@CXD8jrfyinE(5T$6Oj7l0-vfPb#7P%j9%9^Xx0O8t4LJaqt$Fg@Ba3jWc&a*0h4gXQ$}CwMO-x<;bUqc z*;{`xX!gw^mzq_y0O42gvx(;-gw?Zw{p%ex^=^0C3_La#*|cwb=vPu`xcx36dX5y% zo_!RjkJjmYsV9_RKx|*oinHx(4w&&Cm`V0%aoNA>^}4eoq6_=LlT+S?J*}tcxIL3; z^=}F0k>sYUvP{nb{OMZIEzU({cky&2(8!D{uK+JPtMl|Fw!SoOO(T zYI5E5=$AFv?FO8*jQqwfBo$afu(^>yAHSbG`BdUTLgJ$B-GOo1JPQd0DsQ^J8YP@-{^jQL z#B%6*^(SDkPzurdg&nsz$iH(1Gd<`T^f)WQNE9shym##0Jg_!RYp=)A`3kIU?I zAb9{e0ACW!kJ0r<*`%T1IHXwVdgJe)4O?qakI z93j4=Z#BLBT;{-(zh4w3;9*BT5B2J@B3m>z!y5p0(rb<85JtJr@_!{7uN(4N<8!sk?H?v^@$e=TP;wwV~r3p3p%a|G+t@0GIX3E0PZ4(kRK zCZKn3v9D6aXNCTDn8ssE`jK~Cr6`wP6=3h3kCOt?UHkL$bXopCHfwz}1dr9Ex}?%) z7x=%qQF|DSEPQu(W#}=t)SlGaXbtbdvbJ7efu*`I;ik1N``@(*mHpvq zd}>C0xgo1=o&H?lnE!;non`vekO9Yj-9C~A7RHYQN|i3{hG=SVBQ8%uo_`(~eEN(XB}ShvLegCnDqPRlmZOxf~yKoF``Qc zcq2dsNOwCNF_1JM<28-#;>q8^S3Ljx`lrcw+mqmX9Ln~foe1K($Y}!g2@1onY;%*t z2HCJ*YnMP-2v?X2SImn`@5^Ku04Xjrzal%F7`sUW=hsg#dh+{$OTg5VK4l!wwHnGS zdUwi#h@R7q0D8p>_@cX|3G+opZfAi&qJ|C{kadkguQ&#V1WIq{Z&hWjl90%OK=gAc zfOD@avkZ*SP-%(P;8-v35ZewJZi9dQm8llriHEG1Fc}#`dNCk5d6={d2*1HJlM;QL3H87 z?dc1^Gg{L=R*#{wJ51$&gvMnIvh|H7=UQ@>a7lBJLJOx7Oe?p;}+YxP!D z`jo1Rz42&7#^;*8(rP~p3I06Cd|Oq9^Z3bp3H+<|%U0=;jH;Fafk+BzR>s8G6JztE z5*Rpzt7Yld7knHi^&`>yB`qB7IqQC_Z>G5+LHp&ab+yMvo@uS*gOIbJh#meq+S{TV zcKP9A2gOgm*+^3f+F>Q}6cf@|>qGL!WkTgy4)Cbd=e$3i9*|aRGIESUk2APW z!%mw^3}D)~pXW3lMlsf2=&v6VNIKx2Zu{uP zi_Pr!o#TS}^6&L5-N)fr5Ovt2gcbk~EOfecX!6Sdub)JK9{)75&Q}0Kv!s zFY%Bx4SDQyRv9a-sfI!jvhe&$8bGnZ9Lr;U`lu<5b(}+&r5;9%AoFppsVTT+Cb;>Mxx2;o1VA%q#B->LSd0CBetFW zDk%qO)wg~uJ>l}zMm$0?h(?C>mT+0T`m2tXp|YlKkY7)RhnLzLp=C1iYGBpAeN@1^ z{bb(wK$T`pqUo|WXqJ?m$(2#1)n_oZ5>~Yemoc}>*imZ+e1AbFzMl@9$(K{n8@Ub^ z7$f;Z*?a*|6CmmWlPkdS*qlOXBIed^qI77R=`t-p?eGY5ihgQ|lZ;{GMJt5!&70@9 z2qde?U+exh+t?!AR}!JBQ;%ZBK#RMY`WB8gwWBOY`|X z4iGCSYb@2LNA(^qX^NEq;$?H|1AW$n|3M+||4EwBLe{8^%StslW%bJwxRhkAXR8f$ ze)W1y5XVV=kpPM}p>Pt{<7M)s(}zDBTr@Dv2{><}xAooDd3(2k7HqQl?~4MXnLg7N z-f;k@$dj9VrIYjlx;n$t9PDwM+Sjd_#7-bDLVD9`MZq0;U=i(*Tc03pFu^JCDv#`&*w%i{Zhn}l37%+ zrVX{JChD@*t$+QIk^=e^{!uk!x-83cmnP4%2S5E9R4UVD^Yx#+iU4m1s@mHUqOa4j zJ9pL^vXq?ON;1~svG|Z^$15-nLEV?FZqQ?l=}o^II{+Z6rCmcKESiw)wu~W+HY*W` z&QNF_7xcm!E>4nnf>YUs+-?x{DtXbU@6!=?YyHgEg!9VpI5 zI(;MH0}&7GCR~#iXH^Q6n_-%>!L$Ea^4*U0YCykB1V@F@!Z$pYIHF^g6MJ>g*DI4g zY<4v~khf1DwiS$ILfJWXrtXG!;*d<_jX*h_oOnjh~E zrXC^NOf^m5x=r-)2V;T>(3Vdk+@%x?%&9;^5`k79kFy3zuCGcCW&M_!ukQ`ONLygz^Ea+P zzna1ClL}|MuEpp+8>0F%luy;2y9Qn?FfE<9t0t52Y} zcK}Wa#ps&ZewRqlOjQfnzMEb2l6H-lC|%aTnE323u>GN!`r4U6G#N?~h#4 zYUUu57R?5+8sH}Vw7tn6m>|=W4kC_<{}slJ09!W0vn~cd1@IF6UHdxdRADe!%kP18 z>HB4k50m<=|EN(gUTb_d_p$FEsQ};K&FQCpjUi{;@p(MG*)Y z-2w(0v~)^W6HYUFw`)u>JEPXB)8FsM<6#sRa9zVc)H0sKlNPK!p88kv9Zj&R>D8x8 z%BJ@$(w81tE#=9FVOr7JQ)97&^mbmBZxoE4@o@>EPdKm?3@Q>}J@~E7(^sZ~yGpAs30+|!A;B?5 zuab=o_2u3adKqjjoX|J|QyA!cKBK*os98H)NV(2YA0sE_gv5Y%ptnj@$e~TxZ2s#H zAzKIy4P)Xecw5>ezQ>qQ)XkGqV7dp_!mOKcx?Oq6kaP|pb1MUVu0&Hc*j=_jd6*o; z-}x|&ijDln)S1xy_7_negi?Z@{#ud5M#3IE%7hnYoaxyE$e(bLk&P)b^l{upfwNEDj3?OQ{W5Y?)>hxM zu$Il4gKqa^hxvWu3ffVG5U& zA<-o>lMVE^cT8BeBq3nplYPoaG~CU&r9dqZwZTMO(hO8PZ4NarZ#IV!8zlSFhKt{$ z##RF@IOEIIh{NZaqE%L65r`5_oEnu_Heb?@N$zP^a?z%E7B_L1-+U5AY7$6p!^qRb zX`WWnPemmR8Hn7jSXotW2`~a0gwW2yn2?2f1A`=?0^FN+fi8P>&4ijO49Np@ts?gZ z&OCAaB*!d5+U50+gkbVLWbWxJHiT-v11--`OeQ})w-v+|MWdk=*Eh3)3M1Zj8R#dh zF0o;J2MeC1xqC2Q=20@F1kh4=8n$0BLm`80W`_7$LqCHLoc_lL1?$n;m^DCjwH4wI z5Y7io=yHK58=4{Jf8Y|DLo5eik~6$v4z%=IClY z*3LP0Tej>56TTbU{cq?o!vB~hR`Vr6G^yV}3ZH%Q{3JB&+Gk&YpmFXl)z?{~C5`&E zMM9;`I_Fe8QTIfXQR;$x$hRN$I#bv+$zYJQ?M>+#P=T0USywU1;KQL^PZj_g0-CDK zZJnS?qUwEc8o#)QGGwcbSl(4>(gqHY>7xTFRM=*s>5M`r@nkW^I~Jb|T6nNyvr zl#wraHwct2u+vLX`Ggzbd77`0^%*e3taO+B5(3rEYKNI#y7ag~^T@sKARj=bDTKMq zeC)*+nUBob`qB^}Rx?_1m?yK-!7@^4b$Lji(Ny2p@yHeQd~4QzJz}V1ety?waDB_r ze9J;7KK;w$$rnliy=6W6c+*yiF2h&XHRISVa9630M~>kPRFl-i#MMv9LEWIebq#VF zdd>I&UZR(*Ggyc2@#>8*=t}e-FEoA-1XVz5XXhKfVJhAqEdWCHo#cblqpa~ec2ge;Mk**Y$RNIgzsN*poK>j7NY?<-(X}`+ zSvpuiLLO?dk)oxJp^qTRO924KsrBG*MR%Wt49KW4N-$-51z(~r&;H+k3c9h?Y~(*^ zKWZOqMab4y>;Vc6IjlNA_`z&(`r|>$PcS?E7;)s;b1;z{Q1o}Qs57gE7~Xfd(5%Cc zdE)bA&!z*5iE86v(CGrX9iQhNfMS5G2CeA|t!E%P5$}>sfl__Ail;V!SRIy^*nF`e zn!9M|Cj&Vck;r)}jD9>s(c`HnLA!c)u+I}U(Y>WS^>rBi!IJbmCY06aBjd^|I!H9l z`DFSqxSTS4bGuno>-WskKO-`<#5$S>Qm&tnsYa*L_{c0HhiYINm~rmKQ9^3Bu92|= zxEVJ>(~t3d6uRv-RSY-i`NZ>ggK@~=bXc3G&gm->!jrwT-uB-L^lV-BD{aClY%qB#m$l7QyW#Kt_a7=TT$KLx`xGUDG?90n3)L$r2{@1d0rRg7yCw4y?OE!|&Hozqi|sdXUN zfSPZEgsivpt3P80ynA?7ruK0~(C&gv9w~}EPtWo;PWp@#R?R)3gO+^sp0pAqa3WT= zZCN-i8`WGhB4qoGZyp`@B@tLsF?F{BF0{&H^uk3u+J145NMe!B$JQzg>2YriKFcR1 z@a9@}^Tg$lu8WmNolx?GbH|Tm#F~Ly$;i(N_Y0I+@cjC$we_~+)T`-)^3kuzw` zZ=W+Px+i?SD?S{scVM%7Q}rIcvjB9MgYJ)Vf)86r)_}b)DM!#~rra$M&4(;G@quv} zWFW*>-hzWGFMBis3v3>s>pP!@KN7UvKuE5_#3~tb4mdQ zpeb`g{CG0yaBt^6Hch9l;tX7wFSMyfaIXlxY!uocWGa=4t=}d>Jz6b!7UhQ zrF%;U4Ua#in{q~`Rg(u%hA4>crz1A`r_yF&^O`9bJ>`EMNw;x$mkDGn5T(PSMHkhj zmq9Fgf0xgCjFG=s9cpp|JW_Y(`Z0{I$UlB@-cOmtOfQ}A4x(|n z5y~vov^XdZXDn&ETlX>w3>|kj%q-+GZ}q2*ePaQubaD9<8pE1w0w1&F*9Lc%0GzWg zfRo!tptNXRf6^E25*|~UxWlx$9-J+8FNf@=8*uEWg?n$8Xpn{}@tr*2<-f}7BgW=V z&0=6$leqb*+e@b28aK05<Fm>SKkA`nOC{9kAY5U>)!!|2z+*XcklGl)j4QXrDgO8e7nCdEJB|( zS$*J*i7=YYLY%d?;`G4>hL#3(;0{))N;~Mf2ThJom^#i?u`l-?;xfJrP1CzcIFCNs z7>lXLVAJH1O*NoKK#oVOZ^dYqW5c5}aQMjMULci=A?JQ76LvbEL;TfXFzA(!~vK30UO5(`*@T1LPc!cYp)E9U!=;PB!KOhkDtwJDt9Lko^9I^-hHIJ9$mh_|#yQqU^R?i;USj z`fEI0?m6>z)=qw`s9z1bz3-tm{;+qUqONijNI^D0!qJLRH=$HKEFD)C)^UiqAI=$? z$0vQi!YYlhe|xQ|Qm&Q2q`rtuLT?eyEsa%QF;X|QWO0+tCt$p9;E{kNF_8S@<}yFN zTUB@85C|-?Tl#U=6PcnRz+WMdtR$b>g}d{`$52a4c|41Hf<9-{vpxmB%zK|eqJhGe zU9}cV9w2Y?-xkmj<}0%hM?T323G(YJz_g|Hs?=DVl!Tml>*LKrL&4dkPB>P}&f}?< zLVq8UGjxcNi%1WR-pxdSj0E~hIHz{yXJO*?(C&7=-F#fkM4I(WmIAo$(ph!QM9sGW zDF*sMNYCkto>PS61W4PQFq5eb(_UTMq!4sUHVZ^Di2dVg@@_);0G&U0L06mG{$}yZ z*&Agxd-wevH=Dp~78|AdUc<;SmnbP(9K=?np68%aOzUcD!PG-!O;a$KZ;6oay?Ig{ z)K(=}u#V8UMlJ+M=@|Ip94DMxBBNLP#51PA+IK8M^QQ6D(dg$AqxEcL-;2arQ+z4C3&E5gZT|FEH02=jBl+C1RM zEQfqR{?G*YpW~I3Z_5<3K3_5iqs@R7*YkCZV!{e+f#dRk@RchCuicwJbU`4gf+h~F zT=_b!8%db*@ezlXbqz~S1i{?MM-qw6p*?l`2D=cd*<&xj0c0a2TwZ9`fs2h0>zOz&c7*v58##fIHc%MLPN!}DRVb_4 zQ0~Z6&w)o{hdQ<-$;fMbBgXf7QOCh+vuHxeMV@>Tg;xH4MfhZ~tn_Ry$d6P&ySj2u zL;^n~sygch0|ZW!{nh`uDX>f{L?CH^CbiC(RtFCM(&ou>FodjqVDL0U)^pQDqK2j*5MV>Wf7ts=;NBmk}KR2oP@v!X8-W``z?Cnd>sAP%x4K zm#=YN9D6f^I@H4xS3~3wpX(r4Fb%y_Y1^hl&pR&+PrqPN?Oe#0p9d-28*M7HP39WM z`;vjya~fVN&?Q7JXz%g-Uu*__weh=(oQ(Gi!T6;YF7rG+RV< z3Ec)^Hz-na$G8Ne6X!+lEZogDQ>Ekqhd=kr>}e6ih$B+4`)j!lef~LlNK=M?)(I2k zJZPTDoGec~#w{z$mq$S-XJ-d9t|&amhT0ji(8aCq>)MEsK*Vx5${%MGG?dLv0m)sJ zohQLy+9v%2dZZq#7q%!& z%0KuBe3)Zn#XT5vagp~$F-|(bBkLLSNRCkVKtclG+aQ`X|E}xMuIya+tSD_hdayWX z3&tpZc*S=4TiLDnV>E&28-zx@)_sSojgY?H_+bt+#A;Fcm-JB$2#6``x~SP{CMA3f4M$; z&s3cvD=@?6n)HBU8a(HMTGKtAiF@zf+frSY>hUdCr*AUctJTMM8f1L0XZK2eY;Rtt z3?rd16g7aY%LPQntl?pe9{p4Dm7%y4K1q%A)sJzR%BF=~2@=q&ZYW)!qRWzo9Gm_E zC&`evgE^P=nE<)NUBIsunlWqHljvE_0*{O=ptSNa%y`UWv@snlBfgucoE!IagW1gc z)>l72TmpuW!Qmezx-`k^-R5ryWg}XnO0d;joggKtW5xo9hx7j zq$#1e;dwvoKmqsi=3L=F* z?D3**)LaHvW&!NH6KrJR{?*_{#vln2NOnLR;dDq#F-mGT_RWVW53`Nm+E(& zp&+%1Tf!W|(_pG*tcyh@d7Rig7l%J&7L0O8b>u0>G#cD>-B6~9@(DC(o2WWVIIr!^ z1kVicsl%^tNyW(%RLm}wZ!DRaPw7x;9nBg82W#j(>%%z!ghyJPH4$8z`SHP%D+y5q z68o`#pN_V{SNng>g!2sxSu;;OOiuKOi8FG$(9#7=@4k>{LX=GkE+0YqTS`ZDw0+GR zV}V5VJd*0O;x`Lj)>e6fPdNF1tm2W(A!;x)bF-0rACN9ZtC-ZRESFWaMbKp6M(As1q z3+)^#>A|RV=j3ae2f-D0=t$ddw)VEYrSl#6t_RA$BEVM^0QIk#w!IlVR@Icpf0zim zap5X!#avVCN}f6hmj0&R=%|-g`RlK@q~>Aw3|A1U%#ro}m>k&tL(ba%$d*m0F7M`% zvS1UdloQLFgriPp{rD$nKepThNI&FqWqAvTcBZXhu2oFv%`0J)QqZWm*Ui$E!kWRt zQ9-rj73;Cj3>h}&P$L-0g$@UZ0X7VzaQ`VBtI|Oar{1z`CPwxlWmWlR7;Q@J&FBk! zS5apP2#Rw)lM#8{P`pi`x>Z_J#go5=JdWrE-2qKv6J;2TMx{?|Tb^c$b~#S1q;eNq zo+9FMqWLkryWtdlw(^fE5IAbjqEgL;DO~h=Y`Oe!gbbFp%Q2DxG;JOIoHpS^l+qaE z$dhT6PB;7&(Knuw7`{9>@@>jaT2V${0Z^!Ta;X2zLQaGCt{|?v9Oay`TX7+g5S>Hw z;)iZB>5HZd*QHE0AL~O8(mcZBLH1-B0;Z6uSgoZhz1c!(1mBJ+X2z75jYt5iIrzwy zbrq};D)_Ri%w%0fL|UJ?Qy{X1EPYZY%u|ppvWW3`m-$K4pQ@_|J3%E0PY#=1w9-1m z{BtKpS^}F=;-h$ll77M5%2H5x1U1=3@FjF#(8v7=S8Vi-vp8%%vWG%5+Zund^?{7A zE*us_XSuU3=k^mae`OxH)8D}-H6v1_P4XO#+I{v3i@vtOG_3yOh`vBl3zZdnG+eY8 z@rRRanoj5%S}5J%>I;oo{fVuITD^j^bgQK@gx2!cyW*Y17B zLFPR^|4SbX;IEX;xdnoGSJW4rGEo}SkoHc8QsC5H{4B#>obFYEk>oIHEaA~Ei*FPm@dfSslQO@$?L9PTm(s6kl{b0CpmP6--gdu zaP@3-_v4aEoZ&WbeaDeFaO)-AC^@RfivDnw0^(TrpkDi{LNJS^v^0$NW>+|_Izoand14xzZT-UB(Geuve(nGW z1&9%{@W45MA=I&;!G$=>RFL4oBdSNOkr`k_Ylf}Mw#ON~MxIsyRC>4Hng$-jrhjbasc|h)wco6-Kn!Dc?Aob#Nh=bQ>2%zPRV?;= zmrQ_u=#)Z>4nxdPyZevgozU5N;4&Y$3sSXh8Xds)@^!*3*uo~cKNze$f~mVpiO zjv{AFkM+-@7ESpEj{JQKzIt)#M%ZnI*$Xg{w5luoh_hH7WfozJOjPsBqky0?8a~vp z@z8cq>=>i(yZ1(OnQ-7gUM(z%MGK<+j_B)LoVzLeakd229*iGr;4;;#8dsT0hlezz zcnX&ZG2ZOyC6pR8%xAS1hmrE^MHze>yt85b(nlc0%O#$9ewDPtDvRVx!5NKPPg(xu zt2bjKz`!sXDoO9?@x267kIh}T9rPoc(S86ZW+3QS^(l8Bq4Fju ze_?9HmeieB(sYqX)kIr1`f1b37&}6_8i^>)dc@FnJ$bqPJy10GtY6I&r$b$FL7_{z zasZJS#?&J6`*R#M$PPs{4TZZIRIW{f&dO=v@)`aYx}T=K$;d&ESu6R43=MbnFtsP1 zYAgm55+O3j?`;E<+8B~B4JblCAdTI}J9MZg{Axp<=h2wD1zrL@i1(ZU@E~hi z>UUw(EkoDmgc2erkO6jYIh{H^aN(6YTwINOAFY4O);_V0U%rzV*^7GV=6==Yp10c& zWA7z#Lk3cAJj1BhBZj4)2xThbzuVNDg{)*eGYiH^8R)AY2?Ez7k!>+yM4d6fod7L8I0CbB&Rf?%|Vd}&q>3j_#`X9M!V5rY`4m59}UH~M8 z3jm1j9|iHNb1?rA3wpW*Lyu3gk-5KG$W4mJ&aE97uqz#x8=l=vj94MsB6=H#=KS8- z`vISH4q=ZO$6)lE&l6eq__2EfbIlmJ6zYe{ZN~7iv|MUQcsqt%5NKiNbxQ?nZM9F-xG)y2TYM6!6hvDZmT{kV@O4%edpYi_t2cJ8928R;LrhSOF4uTP$IjAm*WxmqI_ zDha>vZ3CfP0%~%oOb6X_Z19+4O2)mP6$0g4sJQ#ZRx(lJT3Nzq)nXwNXC@8l(V`m) z$&`Fxv?CM3qx11t2kE*Bf#?gIEqtBnd006tkc?1hGne1Ud0i1rrr{tx0()9N^FpJP z+BL+HJHwxTq|`h$%s>lD$0;?%1`XNw0KcKT5`zuQI;v2T4ln_h7?Ma(P-BXT3r;qy z6v#oB*#>&D)r14%Ejt?+z2)B&KD}JC#1c$`^ytMte?Mol&fr z)zFx4FL`eG(sK%aJjn_uETG&xUe*^rxhFwzv>ON+wLIfW42Y3BBrB`13Zu7Ok5i`* zBcFK^AOYJ8S46s2{P`wvL5JwW!x&AQ5O_zV-ET82H22&$@9ai`0p!KT&9t zm+LR_tT#GP0i-5s$k6V@;6Flg3A@{Z$w#2f=EGdjnVW|;re-yPndowl6JbpmT2KkN z1@<)c`>j-X7L9fJ&Vc+UX$C)m9u7ddT3d1GXJ&5-`^zW!pfQL+l`f;A_iN4rJxLqd z+f-$x#~S>|__cEbu(n;kTwbTky3?`xl=f_}=rp|@^wDQrik;VGS0rm)pA44MCP)ij zZ4|>NF_F)Cj|TJ@#(~#*XbGZ*E4Hr}W+yi(J`W85j(T%JGfYS@sb`m4vd z({BFfW~OZP^BUkYI|M^%-j`gSN_b?osa3r1D8!sKanfWyX&shrgppjK^kv&P3uQJ# zXZ$dE4s>wS?SgkW=?MBc=0qol9@%4V7Z(?a;iS=Y(hx zdZ4!Lw+?M^C;w{t1jU*u!;XyIa7Xpdt+W%e%Y~C~^5k)pxbOUgZ|@ICi>DkEj4X#@ z_gX1SiJEnpk1+9N3SA>>YWnpP^s>GD41-v-V;f$jc;b>i@oItSEM@b$w|UJ6H>R%{ z0KPhC%OX+)2+`PE0D<~g18ar8UCo>ptrbH?z;5aTy&+LD7iMVK5HM?y-|w2-D21~! z8GMZNk^JDxyN87HdaHWiG}{C(-7?F0+XJq+l}f9m>YTQSStJexK9Q^x(o$khIPH{SBW#x#stQXEgGa)ga#Muf(scRUqr42o!~ zJU)u6t+2UQfbHc2WawhQ>a_ySF9l8(4LP0V-vNA5NG|}CSM&;H>-j*By~f{}rKLr` zw|y-hQ}xFiBU!-I?|B#Yr{nTTNPgNbT^(epqI|<;zIYYVcWbtgjfBIq0^0a6)cK=b zpiG7~@{j7K8o^gDWtIA0(>fK%5%bqi$ppHwM);W9c}jp~GDa3<2=NdA)DU^WfK#s+wCslNc^;PPv>)8^3Z@t;I~L%F}7} z_Ad&ublq~0b3%S;Y^GZg;Q84b8W6^Dxt|cF;oCLJ<##nCvx)f+Y_Cb{G-6Y zcBRX4Z|^%v05akq-H*{^M=qO>;INzZl^B6C4q7%j^usYeDFnS4UtqyTb8h(mOXmy6 z{8Tm!XE?wyv$VZkF*hdvJ4j5J**I(O=_uI&0E=X_QkWNmMYE3fOQO*3{oP|Yeb%+p z8&D3I-$dlxoXkN}c9iO99R;6a-%U&`f+NqD6wOUGBCXRd$l}nO^fm=O#^IF(`I>Qb z>rorC%dk+AfE0OmE@L6978t(XOgPWE;M9qU6QGsM-i<$S@h0TslfjeVM0X*35k#oW zh6@4F=O%nP_=blkKkb)qpFsL7HHX=@0hIe1mFyCmo{difi5Asx0YFAK5`VY*QaNq37Y$>^b_5+l9)DM#vb+2a0$T9+C?nIzadh#|Y!6dkPff0uVc> z&V%M374q&0M>hdF^AqUu6uIUDkSGkt^foY&Y{cu-oA`9BQXm1n2ysR6+Nz5ZEll#i zaVC)6U9mj|B6E2X9FyBY$F2q@K38a*YQUAc0$xF@@bXHMF^3AWz@E9Qqr#3k-FyUw zk?8@Irf1UD^5zCu3r0d9_oLbK?nG-{^3@fH;-SHV2X8)2a}lVQgG8N`g2VWKxOx>@ zd7*&Lp-26@zM1(Ioa7uzvVLOpSAUPCZ5~mK=El5cL_#)KHrDF!$@`1R%g$r+FVIp4 z-2WgvVhU!Zkbq`NIM4_z; zUtlkAOZ$VESRpzLa>QegO^!15uWm1%`W^HHeRrWe?IpS9r-ccJd@YCheV0@#v%paN z8{%#f=mqfAINI6S^%%svqH!0){|8<=M2fM%>BsyXqmSK>hKrD4o;VV|`uM)x!x&-p ztfPXF9q_@r%BYURGA-jg3yc&84-MYg(gX0lh$v>LhmF|9)>r!zA}QM0KIXvCg6#5r zXFnY8Xm+-SGLXc1FBuaEXXm^wz^PV4#cR*y0~eNo|!nou-`(2ivla;bYhygA;B%PY}0{kt0&h;hh*9A1-bf93gc zU?_x`Hf0CkZl5d0_JQbGil^7|VEC$Bh7L=|Fp`p-YU6i-5cwkeqMN-~)VQ$Rv2A>D zEZX;0zZ_t3Jx^Wczg57)O>22-7MXwH@CFb?i3~UAS2K|~!M)&SJXToV2p*^g^5MTJ zufj>A=)P?YK1^*&e)Hb0v2-mTQYM9^J(~DzelcGzK+JT}ik z8snuha{tg2VCsZ+t*we!m^O&s=x-fnP_xD6QEOemJy+nbDP&Sx!+*LdZDd*cijHC;1iql){vM}RvjX8j>!q&Hsn62ytAF5SLSSTA=A@nT)Qn6d- zW}n1J+oAotn(Ekuh(Ko-l;m+}`(M`2={_rzI8jg9a?mSF9X&d-W#snI+;PrW?h;L9 ztm0a)v`3(8Kk{x`oE6R?FCEqWy340C0gF zWpn{L0xW$tdh)wY#-{>X9zeehwuuJ*5YG4aj|~`#gCK64*?gMhJ5QZH9>6pMRqWi{ zB-JWVa^yGQ>miNto;uBaVDdN_5?{!&v64C3jtv0=wY-|VEBLV3r218jp?Ev=uB_be z2){P3v!K%VJAAQyp{>tp2`ZRvJC0q={&cQPxHcm~1d=9g6V>EdPdCpVk!7Q5#a?3?BR0B4d zk#=~Fr13+*YjEp-9p2Z=Kqw!V9iB|cE*0Jw7AWVzriM+P6B?rFF@$I{e9ZdlDtdA> zxkjKoD3CNm=<6(#IB)_f_|g85g%&-s_xQ9Tqqk=YsOrG5r`7D^IpNp?S_vZ+iu=#S zWRI|>9g<^eZ8*^^{HxIp#jw2VGEZDfw#noq5SrVYv5*4)_% zDm+t=WXkf4RfLQcjQP%ocUf_lC${)~?c{aVck~yf%~Mqw&h#MlLhbfOE?$mLp$>R#{Iu0Y;PUW!m9RCdwN0 zO;m`V0bR5lK7XeVY_RrJkNx^|tI0#Yi)}%r@NnQ&s2*LoZmRK}O&swks@cD!7iTPc zF}%=90)E`GroM?w=NimvGg~8N$3$|(n_&;#8qb5v6^F8%NFcvZnjD;bG79)o9q5@P zjCQGL+k1NwcuA2hgO_l+E#=soyV~>CiesdHFV} zKoiCxVNiRtxv-Bxr@J5n!xq-Mw3^ccH`cyWfO_~3V3ucvP%r*CDC;Y50CS5HXlwla zNlwgIfuLHQz*Cdqj>>SGD;2W7!jck9egeKaa6l3LDxKbotHqGORT%gn8YYoQ0_8<` zI;^+r9?(o7M~$uJY-D%d>lrr*)u40H2~2(zet4l`?dj`gfGo*Iv|4*MMH5q zX)&oE+@9_}=92Nfs})mAp-+6WQJTwLXEn;KnEhlTRU2nimB`g0M#Xtg0;&Y%|* z_@dC>m(uT(K_>*6sfZZjAnp5JUj~v55puM2e-4K3*3OvE$6aRfk>gsUI@E>l8z%zJ z{DbSQbv&^hw8CO)mOKB>fpeWa0Cq$#eLHsLsb@xiPSN-bKa<$>;i@Mw7SlV)cM;^X zKh|BF(5$IEnamUafIn+;8zAt?ia=BHi<$hgG? zJn|8Kn$~&<`_H!!zYdTNecC>4tQoFcX4dT_&Lge+uB>;RS2(3Z&q<%VN%EMJ z5<4j9cPhQCk+E{d7bW5qwbCU>LH_#3re{3TzxFprc~Q9dX3DWfVc!{)-IkJ)!NSV1 z7YpA1_K4p%+rD(vC^i-|D)4?FFL>V7wz2{AXNb?KDL;h)f1<@#51r>==fkqUA5WA% zq91&pyPHe9Qt26V(e>td<_!8~+7Q(D?Zf{C+Xl>$LXFFp^YGZdA-2}xgKv6T0!i~B zo~P)gtpBp5tI&11?q|95^%*sv7Q7G`+?uV50Z2Jw2h*;W2O11DUPkL6?B?W4Nk%F_ z!!6byjxI!$_(kQj({NEV*#aI6CcZwRUODM2CF6Zg*7!lpZ>Rgh^FOq@aZ{ZwaQY*p z?KkINTLpFUq6hjz9Q@DGua}<4R=7?qE^@hfU|AYv+CS~EOe|&RjE;oA;`rZ(c`3eV zhi00F$M{q^rqUyOP@M;r;eFrqznc>PYY3QV*X2Nj7*`#ea1tJ&Qv(VnOjG{YUC4kQ ztubM9AD6LciTB$@2~ghKnW#~-2`9$~0=MbX5%gl?$RZx@ck9pBbwat}{BaH`oywRt z{d38TQwnmRd>t{5%J}g0pnoh*0CAOfIY`l)6W*PrG1KKGAK@wXHKy*@apT%ZcE_Q zy|i3?K#tD2#8ih5Hj{CJ$oog z>QXlmSsfRyb>WKoq6S!SXxyC9!`p=c^=M6tY8r>$YwP*Gabi9~Ho>O9 z@es1?GxRMRD7P|BdsgyNNT{*v?0JG-l+ft!kfV5EwP@g2PEEMG$0ZXMO0Usk!s+w! zv4;NA-k|rJ=KQFhC5n&NCkP+55wxM5Tpa_0q%i?TY3Npcnk;$saah;F)h-UtH?sNX%WXWWrn- z@|GWT5AJEs%UhQbAy|amYm!&t_FBoWc5~8(q#BGaK{F9Q{&H%8RzW_e1$Dw;MC3wp z4BxN(aiOZVW<_GS~~l;q|%tC&yDT;18IWOQ4>QaT1X`}b^-uo%`vVxi(b!!Bxk z(%^l&p>OGpwWAU0eJ6ukFBJx=4-&^|4(OM5eylMGc-Ynly*d_s-SyOhT_+q;~=HZ*{H(wUlTCb7P!5yo48&hqjfr`m)dye>D-IucWj1 zb<6ny%PH8c*&F5w`+qBgB}?UEpZx4Twev_O6nExK;1P<#h6A{wupA>eb>&D!_mTIL zs}!j^%>}+R8aX&7XKYiIKpKQjuv)vpjPHVL==U^CZjheSy z;{4Q{9EUn6Uv#PNv57Rs#1fIv+Vk~aPLLOZpPWA?YN9yZC2e5~AfgA5%|l-064{D3 zZ~HCcjfg08UrFe2Ww6l}&F}NE3(cNCe{T>wh9o@;PJrx)Ll3F&gc^fQ4?-lN=aX>Z zwDs1vE_H{gb`CSoy>9-Q-%e?cjz;Z*eRE2RAdv3g1}0G%5C5@SbxBFHwyKFtB%+}N zUqmR#dYgtH80gwSc98}Ptx;;zfXz-*$|z_5G9}qs(ZR%DYOxVb8^oMQ9z?EuN=fK6 z*R?{0n{}s39Eq&=+H-8)Z%Q19FL3$KS~XgtULhwZCrTYDKJjxsON9FL{&JU;b}Gt9 zS^26`B9gA;l15UheX{*lxsp(_p{TmVM z*W{lt{#OqeR-NifBGXPZ>A;&4siOWjYEDoJ;?tByd-8iBIio{70&xn;-b6WEAnYKq zL4i0PEpbRu4$^4a0rRHJ*dMpDVSw4j?^965{FXC)>5v;36dq%`c&zrS;XPSUfC=B`2L>4kR~?_E>2(0kvG*v`ZLII+gC(UrXJ^WZFf{21?qxARW4=bQ$5i{-K@-4W|rGS;4%2nm95 zU3~@aD8R@3qZJxXs(m55+J_AO%Q1L^7BXIgA)=p)=Lwx!RzJw^rR!DkE=4Iw^W7edo^haET#fq~h;Q3bLW*l*^3rd5GQU^dxCB`sH0usRMJ8 zve0L7k#hU9E6^Fgm~u7uU;+!i<%PA|m&f>XTIlBysqpe|RfY~n;#g^#bL$8NV(gN; z1Qj7uFCJgN@{9AZ|ra zmpD!R<>aQ>QlGRaUh73V3N3Q)Cm`QlT!TKKC+*%|XJfdm{-;x(9Itpp3J`NB8>8&E zfK)%dU)SnI&=32}aHA+YE#NT~4A}PyvP*bA9NEhOmGlnDq0Y~5rmIvptt>mcmrH*6 zBCPE})4l4?vuUjd&pO^=D0Gc4VV4w8coQ2&B0|up%=o(DZ}B6FOAcrKTqWM#t^rp; zk0-evzZSf*5_v#SReUr5@i42Ef;qi2kd_7n86!W)-FrxXe+=$W^})0NCR z;#$9Q!wZWzkFqs%>B{NCJ{#o8dL>~;4H-NCo@<=~?Opz&8@K1jWv>)Xg25}dyp162 zXGWgaf*gxKYH7ChGVFf|*;h66o6_~n+kQBzO0=>+7UUJ0PQB*WexQh6Ue)@D^dGf0 zP92$&HnQ^2U-{pljkmg+u=Du!XWai57pkM9`L$_C;*=j>>gE*cc7iV2D$2vpo0?Vt zgX{RUjzEUpll$umKqd`%2YTA?9Q)TBHIwcNYe&&nn0BAz(L;`!yL7_9agIjdDJ-BA z4Z9mFcSswWUQFDfqJLUG9BrKjy*+*1I~80zpM)ImzkU;0w_wAe7P{j=;08&*;=eay z+knK?tMNPe{A9&+p~{OdT}JWz+CJ`wu+N|VAdRl!qC*pPo*RV$$I)Vyv6zMGf1UC= zD53!E7)<&?`C)SQzbI5ps~LrHg8UI`p4O3fbI1+tO_!TrkxAr;+nk%fxskXeEsc#k zd7ii=9tro1I_FEG1Ht(8vkwYbH7tYl)@Kl-`pvlW z$iFR$%x#gIi6$hdHfyZMp9-Y$Cm60cQ^=yA+!$eiS^UUO&1L-YCE>~F1gK5(`wD10 z#`ePI5A*^#*#fh12C-X`d0RDAC>5hS#ZgI2d&SBZ3tq1T+tz5?3l_`H_H8S-PH3xN zb_FB$QtjIPQXCvTAxk9?^7csL&msyHcH9%3fYV0m|ZSA zn>!>Z!zGBr?+ZaDuJcjy4=vmOGX3;sHm$}3$);ZZ)O6*JtpPysK^P_{G|}}*5GK!ShsL( zA=%bJ{SC+@ann<0&Q5V9?TS{QG3zORE=+bH@97%&cOlv1XFV-vlT+N0kW*E2bR~uM znp&xX60tt=`Gx{qN3;S6_0L#O+g28AiNtljz62UxbFLHk211>_i<7bi5shDcM(C|% z)R^Ca3C+b@6N_dQ#v4EmH=c^FbA9d&`X1Bw8u_+8nAQQCIP|`pteV29Q&F+d>eyS) z9U*$iDCX2vkw?!M>EJN^?Em;d@h(AwDPe=I#i)i%--mO8ZX<377n82+fh$sPe(Qv< z{@?i3`_BmiBGIOGx)X!2ko*^(-~|F8smXYsz?%HyLN2)%sB5TVDhq8vdi&~KgF|-y z3z{sQ6rYU`JmYz!cl3@-b-EMXzuRGRm}`)cu5r&-JJF@#GgeCgCo*7w6TU%CTLKml z;5yUW{gNM$O3sSi@|#1-A0Xdq4&>Q4*wNT_DGHYAluF!;NSFMocU%P&+vUfve00FV z#!QzaPmtR96Mr3$lsS-CKVkC)=rK#-a7cerI;rF#O}yzZRD9|Q@VMKZGQF-8bPZRbXL6c_)M^SGp978IT*?bul8LUgVC zUT^_4B{pu+an>eNoW_1HDi=ym(}Op^{62_b$ea95CX_1CACa#W93p9mZfn9mX%nhf zSEM|HSzk2MbXa8px~x^ zrVk4A59<$pZ7fnIta3_*;smJYd5oJ%0%E^6D8?jMd zeZVgCx~ANqlNr~`S@@j4X2zAdrcd!0S;`@eLTvBFRjIDhVf=|=J3R}lq)rKa_`CE6 zpZtU*kV?pl9p-o_Ev0GTCQKrwlE}ZkCwVe)NrWgdO%ltVPFEEdd9d*Xc~?`za|h(~ zv5^7_hj3W>YF6YwX>91(vV8l-B*JqUH?*;-?CETsTCHMXn^s*eiEzrdC!rZd0s@V| z*3+~xvFspvO|hy1xbEvN?ur;Irs4F=%U_Kw^qQg9X$vn^jG+D2R@eje+W3gQOeIZk zE`vIF$OhYl`2(VLHcKW2>icc-w3hpi1a#eDcSa$M9Q?sShl&XSP1yDgglv z>|bM<4Wql}(wZ(YV#H)jQLx>H(<6?blTU{WeODkpx8Hz8va82 zs*)Ka=Amkfx&lYh+}OH3J_G++-O<6Imq+R(>(XV6W(G?Gz-F9&${0yK{MKqU9s)9L zY?gz|Dfl?D;*5@oYTr90EK3>C$2RB;DsYcKzn|{EB$XY*R;kXZm>BAgrnpfG2dPF9 z_Edr|xm(N|2fi<=4zL);-Dd3@9z3IvrZy7Gsf24~*(?9Jd@|aluHi5og628ZrJR=1 zNbp$a9T>7Z^S{4adBZuC{iD13qZ2!1uG5gm8W4LvHhGGP$2{0{(_z(=)8Yx3{(g&% z!}Jk^ELzMjf}!4KYnHJwQM!9&c`raI9X+L`O#2P3kKat30Zniq#FK&3a?p>B6C0#t zB05^3!0peuEIpUNabw5GJhy{9-m6N+t3B(ZyhtiQ({Z~+_#%gSV+*`&1U?Y_;JFJr z;h`bnQ$Q2*bZ%$}h;(5FL${KNmdt55Cz%oxjb?P1rQ<1kheuwjdSefNhz=tEPm6^ltT!q- z!U1Kx#O8Y?-E@v+-znez)(MM^7+V?+(~0+PeBI0=Lx>)#u{S6N6J!$M9w!R`m$Hui!Cs#!7gBQ1% zEyZknNdy`)>sNU3Hi1UZ!MFzx5BU^UEOtbrqfF1Z_?r5Q{;C9ca+%^|7l-g^da^a` zIc%;BmAMo+0yF&lBroJ-a|_{0XJF*Y)jlcY80T17u#JeI3}5PTc7=31#x}MZy*QYy zf2;Ucdj1Z&uYkg36dWnt^n1|2O8Qu!<`FxRdGB5i=&=15|3$&UocHh8VXKDkNhvaE zIM}0Tf7Z@{V5Iw9mWGK{tzS_YycjTI1F;cS!B}cKJ9Jzjxy#DRL*F#oc|Tt%-=XTD zdIPqf7f-5mQl>Vm^n?aMwB9$gG^N6()4@`@QRDxxX28?W*rfrt_9iEyOU2ia$=n23RR9qNc45E>Ol;U04lR%$!*@u4;n^3}}>M zO(Mfycj7z`7L43e5gxHY4JAd5{dTQlV6aiss+<$1DTB%)F2@%j{Zu-^Ku^ca<2$|zVyA-mqFMY9nZ_MMo??)Wz#p}q zu4U5GzZ~?N?{m{R`egq`1;qO;vp0>op@fB7VKLaa*fwRJHkl&ZZX?BnIU*+~9(X@i ztDwE@))RSDlr|ylvhx7?D%eLL;Nm&d=l02q5SuG@Dsc^cX$sHADE`Du!&e_o@0OHSV8Z{TlI#-5>hRa3(g77bK260bG=sx*f z>Vj!hZ?^I9u&8fGf@6xsK4_20oWWz9+>x*+rW2NMuUcs2(M5Z&guPk~5^^@PRms7m z?fSUuH06YvccVck;A{tXe!^3bz))*`erBR;dDrIp?1!=a(raxY(DnvqcXj6sH^Qsxn zDfy>qOuRFjI<%nzSw2#z1+$e-?Zq-}o4#MLxeP^c`t`756i-nDs zOO98z&xDn1Hq;)6Wbj+h#K6Y8`9K=2yc}xZDm@7-0*87A>d+AnF z$0dSZ;{D*LK)=^&A)=}Fe(?=o>2df%3<>yIP$V}Rd zHNG5d&C`<)6Y~+YRZwxCfoc!z!rW)&PoTfn*YL1GkuQx;8|4end=+<7vG)hcg`Q5* zGiZC8eln09dVGzUKpR9`6_C_mdChEEI9a+B6;Jr)#bdmant7MU6kafP5XDr6w!rV= zdk2^Wo9w#J5Jt$+K@-+#U=|#Gva$vdDfZgZbJG;bPoyRM05^)rZQ|u#WpdVvW^pod z2916{VXkt2VSxrx)WUQ4s~O*v5u$`H#;R@1>9p8fmyVUIx})XQKr za`1Nt4==qvRe@YB9ZjsE;unvdSX5sH_oc@0u7X2ojoIaHW78Boo3C8FpHlw#!=Uv_ zlU3OZRlxR2N!aCzLYm4f?njP!XFARRmjTSwz40@Txa?K^ZqmeJg}pU@GpyN5{B?b; zfl?j`o2H6d&PFM(US7GkGL`K{PXY2L2fJ6G`;zhuB)@I8Q5_uo;@Q-qZ#FpGy;9!U z95B+=oW(otD3CN2;1X_#&p&e#X1UZNr@jX@HL46G@KJ3ny zo@pkVj9eeI4{pz}<4H6vSzz_F+Nkf~{;n$7#icbBE`M$nHz7H3$e1{u;;GGSChpL% zs`-cK%*cxsuOjXj_tY?PujgRT;~(Ulnx9T(;mnzNBAQ$^i+n&IlrFk1C&MkggkqH~bbY#pTev_Xso zL-KlEKurMEYc$YuCx3!fZa=R4h+WkXS;&F+Cxzf^$niI-2v;hRq2_wu(<i{~apoZ`tNv_9k61_!9t{*8*=RG}VrL}mUXNA1)NYcI75o%88ezYw zJ>$ZMG~kq7FE7`y=$(02UeCoKm^4^AFdk-Sy4|-i@HAkR79s*VVSKwQ{>slEf%=+S zEDo6G`u@I0A7J}D_||7-(u>_(o2CX9PMT&F2O}H)TU+2<1T*Nx%1DRyzo7cX%dRP0 zGVkcb-N@F+tlI_0!E3im^G)M~c^4cahm=d*A?G;L;>aotY!3ThGnACf)|WO%)-P*f zBDSVUlOcG%P}n(?yT{e<^5q_cAIm=TZKu_dakur8e&c7j7TMzH?a@r)F3Edd4lyor zhl&=*;%}K6ACWD-5-GD$rBEtunmI9@5mLB6Jc58>iVIm=ic~1y+Z27oD#Ulrp-nrE z%hzP7s6F65`ypev<+5H$i(38`w)oZs*-1Y?D6vO`DHSgf z1&yV9!rPXsOgp(aIK@Q{)hecRcv-->_^6xvYVS!hR81eouN5Kj;%9mE$8vIHxY$6& zugpSca3{dMFpAP*;-I3i^WBL$nP&zg&p_yqxoe+j=kUSPr&g7bM$mIa)49PJ@HHyc z&JGsc&UC7oJpH>?ou7BoLDDcY_mWChbkKVdEuAl8&PDnRUAsiRzJMDJECcLz*vaGGCU3o;<9Dv zA+lRB+~xm;JkMw}}Ch=bX9Sn7s|CjS_AEPb;0GnI|CZW-L2E542gv3tBSO)Rw0?{W1HHtd(u zwm=pK-%H-`;cuGM7roeL%i|Db;z?^;0BI)Q|JtJx>nNQs_xoha$Qm*@p35kb;acGn z`6js2e4)c8imTH;UJbEGlPyrs!&?5n@pSHJS$GGTv=YvPGizqZhV29{wBg|L0xnKp zS1I0K17rW!d-H3y-QaVnAExYq2;U^$PbDPr=%ze32$)6+G>@QZraJDy^J3BU;F0{k z8I;88@`wq-{uwo7Y7H>~nYM6R&&IC`m#&Vh|9{-N-uHfaNj^+%6iEG%#Ps;E%c~2{ zzZFQwBO&b$N$d8?$OgtjgLoTdS;Z*l@5Z9QsGz*JaVTM*?QLOPJ_9DVk<}%kItQhrzQP;S6?d<@tu2@+r*&Aw+o{-` z8m&uiS>gV+bmBM_Js`38g+i1?uP~QVm{{eUaoQomX^ZF?#Amop&qmz&@rEnIb*RA$ zQlt56XR|#cq{HY2U9p~tUGiR<0mkrMR`DGw#%WXKCXQ8*Gd14`8x>1zND95YT7iyK zX~fHs|5lA1E=!kfu`nKF!o3U*j-ly(N|vgljj&OgDhZcLVc%%9qC%r0FdP&lw6Rb; z*I8?780gW2h9co4`LY@dv4&qehFs}W2UMK-R0is_zHv-~aGJN#0u^~iV%WjKr<4Vk zyL13$?F)LayQvY*wBf6p6ih5FB=3-9iVU}bYOsE>_E)T_*ICL7+sN?M;HekN}76Ym__=Yp1Gu7#>DLAKRM@IFtkNnKx3gpVgyNjeF`%6z##S^*$-`y zc;%K&XQ$Au73LZazC-%$k)kh%eN(#3u7XYMANrTJU|0S@`en5NqyJeOt|yu$n6| z`N8&YlNt7(`yK>3V#-t#xKWKj-lhj${?=5ut*=k~o<#lDSKa-ddc)a`4)u~i2kb4Q z`3FxYJ;I;p7WMhx)wFK~1vC#JcEd@tDe*}Bomk~kjf%t)UTGRm=#*Xta}OMin9t$w z3uBXE4N^?LUJk_crsvg0P!dL4jRuP&Zf|@!ckUMXruJu4I|w_9*RD7qqR73>2Dthh zm?xcg4SD1NbJzZA#~L1^I)P<4)};JTW9TQEk*b52VqBXF!61g;Hx-d|o@3wA!j@7r zms&ZD{qA;H>=J+-CVPt&NOU5|MNW~uvhY(Tfs{iDZ_wvtrA0CR4X7mJ8^-N>^XZuU zhpCwK2e6sWFEtBUK@e$1Mk+ekc+%hzNsJ4Hkv0>3F%|c2`#q`NA4vWgI%69bBfa|A zQJ;Sib^F?LmxF)a(rAB6Hjt^Pg_Bv>9?6(u!G(fvt^8(bSxy-{&T zVb3xc0Yhp)eqNdSRPOqxoG)EL1M?45TM#y$hWrYs!!&Q?a&;v-R+p zHjvGMZXU|9ze*BZrQ7LdmC4MYC$#6fm$^?3F!5{oNR{I(t$VPbb~LKjX$}#XvsUsl zSEAgnR(C`lX^f$XM=5AlsA(l46tCkKB-IMf;!9 zwrpu4de_+5&7jW=zP9!LOo&60&CS&q{iW9DrB)&WOUk}TDqZxEEjpH6z^NAWjX(xj z>K8cL19Z^($ag3Q(^{N7BbCZKBQviO)fA5vmqPQQDva(^S%JV&H}TDx&`&btoj^8| zPGymO&doRFU!y0QOiXlBLepr^6=1kmRtvfRr_TQ1v7_PGY;IbS%(U-5dV_`w1LD#0 zd# U0^$A0B&$%SW?OQVco8$@W#T*!?p!gf6E>EO&TS!w8Bx*3kvUGA6cpecHvp zUJ7jPX0?WRLB-iuJ4-$X3IJy8NHi>CqVeU=w}$#DUvvTfkck{hTCY8^F@Fjj$zXBl zT9a2ejLKs5bqndLYW+B>VZAOaP75B`*0UFb%!bI z5s#=y_IkF2r&NTl@`WNCdNMh%U1*KS@}-Xe8qMi>JiiC|m(j=x-P^gup?^bvnLQu= z^6Ukp8W5r{BmV9TSCCE1yZL=n5OMvJpO0<=w@$I_kt42OlYDUpuW*yW09^$qYR)du z387b8)zsb0#YxkHC2g=KYtA>n;W2i#1^6Yrg)U{|a$7SCTRXoYB_tfSQ(sHvB@P}Z zS9Y(>&fi3@$%Hol|K5@FixMD`zj8s-;Y2ulIDT#Y01wnw6Sd5l_~XrAiuDEsx$ng? z@by6ldz@%Iq13R(zNT4k0jA-gKU`sBcBs}pCYKpu* zgOycUR1C0M@SfrK8vJDAYe-elukdn@PyHpKbThd~Ra6T0!08p85D;u4mzH*@#p#r% z-t~=V737YN;^@wBk~hlsQIK^VH3L&<%wElcoFO}Cc9^Sch@*hjBg1}MH3aNM* zvbJ(t;@%C?aQ-zvDAsd_X@Ts$llEZPI$qMA~YRN(rwMQ zb702!qAIZ_UM7?ArG7Njj*>Dr<)0wftk0H5Z^P}%|H;`Dfx>~^{o|Q|Kohj1A~HmB zWJ(vL=v4Z|YtK?GnGjBu{rlfuP{2)*G^MPUDpzz`8B__yvu07`Innj4JK>VZ`ts+` z!_i6~gVF$lC7Pt99@_zCiIE2I<*vqk3nUQ+Hd_G`|a-kpnKsEMXzGxF~t5PAL$^B zU6j&sm5rtT5i@BL9ZIWeb-#*Btep18=Y`1-cDz;f8ypD#f0oGdk_FPyXs4kYWLQ>Y z*;e0w1pUqO-`{-ZqStcsir=yFS@b{>lSd?d9?rfN3gh`B(rR#GZCKx+u095OLTGfd z62x{D9Zl&(si-#4zN5tnpSIL8_0`IOsoCD0<-l0}=;PYIYZT-i(NX-`1j^dE=gx)~ z482M~-xiyoh<4FuHUMg1Z2qj^5}#v_U`i+#(hF=!5;m3=m|g56euYh^zbn4l0~Ns7 zJKcW@6~hHqHQ&1YPz>eu+>2s_%w}e(#m|t@4l4xlb3uQDKGFkY<5gi#W_}qC&#bzC z$-=^OkNow=`g@R$TMV^o4*s*gdB2GV+o{3`F&?6so||NtG=LVlb-ZJvy6abNIc-)> zG7Ej7&v(7CMndQcl2y14#ebNE`H!`F{l#mSU*r;_l9{Jp5bVykDM?4Y^B zZ@nyN2A0eyDwZ_!sedeYc3cH!t6P?MJF>RvY((a8eT1!#ACN|=S zEi-beW(CO@(F~RmMs!^80@skcP@U4iw;}XNcm4&&S}a=L^|gbr-?r?*xy(IqUQ~a! zzyj>;Iq8~^rUZjMa5oF2gw`)x^(sG^-et59b}R0eJIuWRt>;mRiSuy#!?7#0@$e_t zkM(ym(8IBVon{q6A&dGOfIQ-9JxlaLna5WW$<8{6{!8xBkem;|Aj`b6Y#HiMpG~Z! z#N?akJH385pqu(%WKIS5jehYsC~S!soR#7`1(!iUYdK}a&bdF|39paHWbDzyfRw-a zu!OZ%iCEu}Aeo|iTv=CkPM~))XsF*o$GPakOh1y)5Zl$Q5!)kPCj#dyyA`0k04&rb z5h7 zbPHPZQKsSH;}$PkFrEXGsqKBHcVcdv!1AjX_RT_79$j7FY%j1s zmN-SF+M>AA+3_ zp;4I}h!Q(a?Kmha(oHqXySezgFzt?413rJHs&X?6i(6H*HuPAOhTXwWnM`BhezElz zLxCAkp@9REij5kYvwK}>K6vo8v~ba+H#vS^4k+6*{+9)c6`v(jO?Z{;v<2ql9gC1O z3hI`4%W2wPc8>ASTex%aato>H^B?LWG(yPvipa??#}!T=(r{2@})Z#fWT6 zDPNjFA;wmDu8`3($S3r~Jj&46I})@Gy|F=u^YDTb zha~ld_>XR|F&gvVgFR*W+o6rf*hkP8w9VuXd8|a5CB1woPwG}TVI@#Wuc%RdW!l%T zuuN@zu1rvD?+0L_UMmUO<5Mm~;-QoUD|5EZ69$HDSDOR@nGNW=?C#NZM=*#`9-r22TCZA_%l zFyo5vSYi!QB^mMh6Bjl`kC}uyp$osh%&J46gz}=>p6O`+H{(?U@dI|j^PaXpnW#e| z{hWg^e<)q3e#FL3Z;|z!>61?~UIHO8Cbo6`5kY1n(#| z6U~(P=pl})r8`hvf$j~V6I%DegV-Vm61*g$@%&iRB~*JNFH(h z(Zp%5{iK`F3Tsvum&j`O`FHgZ1^IkS8Q)eY^1OkLyC986RX00Y0OuL&eS;DsbI~&{ zr?DOlZJ^Nl#=`}zspv>_B!+QYe)%#E^!r1mx5qmWE`9UI=Y12@3eonn-P_pMyH!tI z*DRGuddRPR2^KZ-;y!m+l#%qyfdq@P&*xO!{QPAf@}Ki$4Z9mv7HFZ3@L7WA6QY*3LJPUhYxBf{E+=>Lqy9u{5lc-^GL+e%qh zXA^AaNMZG=5N~*=WUFc=h|N4}m_6r+f~PYo!b}EY7&4EUH`4Q`(xukgLj+Qesv2Wf38(G`Oq*uH>`G=H;m;9*gm(Y4ZIO@_ zb4B5~>jnK|`^8hKgng3u#c*1I?+a24Si~cTPQKJS;;+Z>Z84&TB+^!))D6Q%s;!QA z$^5j!Y~r*y5xoz>R?ZAphuE|JKJo-gD!PJ4tfKggD77^~kZ6vwb~8~lK2J3FB4`H~ z9`FOUBg4@tn`7?xEraPQ-v1BHS!f$x)0ZX=M8b9B>wXvMubFLd-EfXGs@rm;AHjY} zqZ!1ysh&JMxLLt?5|uE}JodkJ8~>$NL$1I5$ImDS#t&2OyM|9N(93Q5=s}E8ZR0-= zw!p`O$?Y-+=DQiWH|hoos`BQG-CX85{(Xm869o!^p#%DLPb2PcMh3Gs!?CxKx|JWW znxY%OR#zsIn9<`ui5JKW!Caq*xr$X^Gav|9jnH$;=j0GF@&SHI3~Z4_NTv6(XRtFn z+Ef-tV%ihInXmT%6aIDK+9v0&v0%E$~*_m58F zgD_UaQt!2u9<{@$=wFXs1qk0NmbDcB4_c$ilGJU8VVvF!&~_XmIaP7@Ikj*+^w8H% zK^|tT4BAUk0$sI>*iN}1Ik$VMa*EAj5yvCb=FP3h-VP6K8s%$%Zjb$qF^t>L-l6I# z?HORip1S07M3wenT-s*G>k?e3*TxlP!y_AUpU%VrZLBi6rAN>``pDi`w9mvkLN>Kvtetist-dggbaaXeP z5!BLU`hwG^?_Jqc87nP7bzKG(Mz5!=C#R4LdM%`Xs2CmfCm~v)?6)8Mx<&But~TBo zKK}lK{BAjf#;cc1jE|fQT@n$|k+_}rVpaJ%J1K|$Y}=1FEc^DlSg#PFey>j^UwW2G zbB?@O5d2n7mTwgArqXz;{{7`!G+Z9ZJ0g!^_6d2XJx_VN%T8Md^uaEqFWH%#S zCRR{FPsMSn;gIgO8GbO({SK#g2}a66pOqf~K?E0BJly$7eyY9M)DQ0B*?kJLsP+%g zadJdcF5mvrWE05Z-ia@Wm6QvEgH}z>A0hUIWc`-Y`Zu{1QhxY&H9ue(#lvCd{G5Ud zIu?VV3+(&s*bnqFbw6KPN)}w&@KF@F-fRG|m7U}eqOMa|n<=QB4h53*+nYWfWy#*F z$PVQ|`lonJ<^~r@6ERzqJduk_ldJUw_4VTa!g(hCv_R(+#<)|`2((ST&dej4{@v{9 znkA{WE{}V`m#n>qxAQ#DakmLBa&JU0wEkBc49KcCD48Hun zYD!E?h7Y)uZ0}K5fO)ED+2wtSC-M{MBg-x^aXhyw;ds)BfI$dW6w*`@DwM?(k=@#u z$usZURVN+?BhDqwwrbD>bXejioTHeo(U=G$)jr0(F&58&L*eSq{tWQt^lqx6&DBrW z1I)gKoPWX(%}=D;3>7^b{J%MWS09mX!`PW=MnI+()laTi`dp+Jn*nfz{^_I#8Ol&| zO$ES95xTQMW7f-YtA!dwW6;Mxt_f|ggu(LFpVQzdT}yKvOBG2ArSB0RQTlB4q?0)@ksxgU%H^DJDQFwZqzFhPDmiovo0!4}wXh zqDgc1UrKKf>38k?A~sRdBz2egQj}6QogxBX*|bfG=GXe{6f9XVMSJ7EZj9ABc8q%B(E= ztp{I~DVvmeJ=PykzY5s?Nt?jU*YHXC;2B2wWkl$-KLmj>&mx!e1NI?*`{cEtuL^1U z8gVs3b-9-ty2!l`WV{4OMgPi8l5P2XdY0`B8{IzR+au&}eZ4J(A0VViysh;c@o!%&XW^oRjHA24QuDLyRb^cKOH%Nd+lR$_QTC6sAE9@e z-~Y%AT2uoZdmgbVc=q;*#e})629HhRfh``PBrrT zt|QwHAIR!G3UKX6Y!s8rSbE0st@c8JLJv6MAmYZxfbd^F!NK?Ko28e9lM)tF>lY~% zx^-G8MLMmWwJdxY7(5<I8k8`BV2m-TpA8VBaCfrJ(0*>9_TBm~)@b zUR)&7pD{p}5Fe3*?-9)#@O#wfbriFS-)HROh8`(MEhd+7!K-WIzSpaS(=u&Fe!x*G zJ_;{pL~3E)O&KOL3qQnonmvDt{A7)a+5n;IhdEgz*jdW(3cQ^7hQt9M-Fv!BqC?L^ z@q87T_ksy|ig%l)3%X%&$qG@}C1K#&8Z}&Bkw{(ThOj(u#YT?`vp5>z#_zR@|EmzO z=>~GT;*i^ig6_ZWUE#~MA2yIndqlOH>88&=aJozGIf=FernkJmxtT{VSd^#8 z56rI*O5w+irmQpTEidJ^BJeyIjoXhq86*+kZE~m_0hgkHbTh@hL80d@HtiGyZ z*#CETN6wreSd5)DcM*aue%L)gJBfZ!2Uq+>$Ib>Oh9v! z3iGb>i0a9Hw396g(~o2e7-1lX;GYt9K6r*0#^dn4qO1nXg`)fQW8jo9~T< zyQQK+yMfDS7&*R4Obp}ekDEKhp~##{T3EKvaH+Q)7ti|dx9`v9pDx^HsDM_Y6XTk7 zwm#T|ZK|$rE_OTN>I;|G&^quc^3`Ifk?zmE@}w$7-fdODS^ryz)~@~u2sEiwEv1fl zxAeh=)&L#SIzt}cJKy5}o zwG#xeFNx-1(0Pw&NTcmkY(~WMEA?6@_gXiag+Xl&rkpYtl{J_xDp3ZUwTh9-I&d5e`#2v~kq1?@E<4fgKy0v#r z$?fTd3D-4z=>p{T#GjGBPLPq$pbz8_C04l(I(zr`!q`AH=wV=w9t=w`PAO0uq8UV6 z#;lj_@s>IJgK;|ub z^J_nbi~)Sf2tn-;@_qlcBSCr`w6lQ&=dz+Ih^vrwK%?adq$>1OF=MZcW+i3QYH`$= z6c?lw27Ev}YHB(Fs3DCkq36gGDw2SfPqi2LNjWNRsuRp(3F@{ z9yqPK+L_gBgb?)E@%VVmuIkvXST;?rsL>5zMRd>Hm|IT z3Lv<9M3J|=96U-GFbh?5-+#-b`+GjJS3VZ$A6t6Go|K08&cTpR=^2S2&w7p$jPhNU zMTeHv*Izjg>~Q_ zLGG3X%KlNsUU2*7j~nw#Tr+6ZP{bj~?Kw=h6C4H7swxBN3=%(Y(-0Eatm$n+4w@XV zyfpN zA(OTu=Xs|#iR5XRvzs#*XL?vPWz94rf&<7@c3tOyv#MoF{+_m2etMe&o zA$e_P`XKOyPR(mC6jM~LgT;w}Y+Q~A9dA2JJmP)Bv;eIqXMG5|3S+%B>tDRJ!hRd~!^NPNP^tIKHhtn@ zY=4r11nA)G6H7aalFd?Yag| zw>K|3Kbj>9>m*{vMv$ru?0T<9^(~r`Z$$mc3TBJiQGxa4($Rn?>MflYbCr^<7Hno< zRaA3&gro5#;oXWpuh?*p!WPfXD=TF0M{Q1yw((saZ@Wz|(tbs&)}C<)Om@<)LYtmN zggmAy(ck(t&`51%Rb5>vHmxgy)^<61YT1(|k-z1UFus3{GRA(BFMUhOYZ=VxZF(+U zcjA{;1>ii)HO7vYEV?kDwa|Vxk*gGWA3*s}7G`D_=kBE=38{38&_vn2kEfzdc}@UM8Z;_Wtv^@zWQ6*6Mn;3l1g~DQDdeS zk)-#3)cZXj-U2!FWOW#8lCpltJSe@1T3Ro+5%K|0zEF}hQOK_RK2EuT51QYnr#JJ%F65hz_oX9_QOovGoa&DY;{T+{ z&tS8B=KAnBlrfWT@+ZM=Xc*eNm&b|D@RD_271!T~Kje5=j3K!C3U(& zE+z`9;&ndC|6Xh$yme^rBjLoX$lNFbII~vFlo zYNb_~=@Sv(Ec8Wk=P%5^Syv8QYfJYD^PeCrV(81<-Eh{q>yJCta&$RNwx!>TP15t92&W=T9P?>PhHS()%4$6schN1hfi~zaW0P*-RNN9Yw8; zc=?R0mFzF#Dt7T6v=9;nCuwabd zoaNf!6+?NUv|w0vPGvVI%kq^J1`U)fi_&UBJL6#06*)LLVYKb-qir^f2$r0k5d_j> zf-)Si@e0l!#%IfLmgUv?3)#dU@IMC3wMq_s)J>dm=7ExWL;oLPOhOs9&ByI$0^Rt} ze)C=?U6xkpmns&Uh+!b(%%c|l9`_Gfp9va-cCcQfKHeM(5YtV_D}-o_pvPCct2{*d z)ow8RmbalZRd)ITdA_^5JK=o-?P_Q449yWKmejGI5b_7eKj_!U3#2|YTn-d1A9SnZ zV;l6G!U8BO7T2v9xX1S2@2eWo;>xGozBQqxung4UaN)bb#H7S=_3*)p0}c7 zjw>x|Cq=7L3~wD^mtEkUybDpuqlg>jT0%aIES}+JkuCRUd^*o80+^ur)+9&L9Pr^` zF=W1=`ZE!>lR`ndZZ2=uf$+5PlhJoXo;%n#w_M0>88^ND#EV8bN@!QXU3}i(+v2t# z7TT}d-iy3nBO42B@_q;Z>@=vP@)6;Dh9F(#lLl#FrkB5;$Nv4Erxy_i#qf(Xno6z{ z%g13ot5>h#u{}6P5Qmvi&uR)&4MGkf>qrdg6hV}jBFwPHnj7>l{pi{x;2m09*WATf zxiN>3AKCEJ=B}PP0cXiC2tV#P>Fq!PU-Dr)_D#Qb!!h$)hXcIjE2XQf*xRNHDK@+F zCpZ_4_(&Wrtb!??$j9L)(_nZB5qZ`^m6P9D;x=O0=W2T@xJaFEQIJi@4aoEh=65^t zl|4pUwFQUS{w&h(aIA`24raVH2>BQz?UX)-^ZkVPLv&lFXY`b-`CUVLLOETvActUx zbNA2z_V@&_S}J&~;YcX%l6J z>U;Cl7}fWFlLkbkJz1r)N_GC3A$_=cw3h=$ZmL&+pGpH#8GLTa2XTEvG5u#QtKI5d z&`OWoMsSjc4~NdGcB=3&f=z`U869|e>>>GKM%o2K9dPHXJb|0NW9?lt`yE0PXYxr> z=U!q44lv6ymgVIbLK;_MPvd)^3N7?zX`0okW`%4=^!Jt_O8ub=7nMbdsB!m_sw|aM~%jr&^|_l_gE=b`1{JQqdSEbcp3s~1pMK>Fp1oRX*6$YD&&-2+Au6;kO zGQvPEUb!F4a;p7OBf3|B;o#QtZ{=LeiN9sM77HXlAXkcsT|cm z)Je!CXm2#Vui^n*Z=H_|*enI~t*F^CB+~wdttwY4glv0{j!H#cybSp!@^(ZMC(b%0 zeyrR-2-zL-3#gaxy=r^DlIncRK*(FriokP)|1cDGMc4#)Lhgn9dGZ`KLZo*tzV?B~ z`sLWOD1L_y9W0T4ruwa;OeD2HJ<=IEIM`IONz54ob{XJ|?ZjuMC{|9~#}&`g{@;1;|Q>+CxSf+wg zLiy98NWk3wCT9uQ_T6xHBjn#{EM)sH@o$HqYG`oQ6!WkW*5IZ7*?CRhMA~R{OP%_; znk|n1XwrutP|E@c?_DG~e2;K8D0~MhpQ5lf5R_;_I}I7#eEH46_;aagG;ioJb0vrW z+?+r1DK#Y;4nwvg{dC|u-Qgh};eC}nn zf@Qg7ktS$S4ru#VhX=PYExn@0$3-|rFyx2mr=u~;XbWrEQxEan2nQ#^_#f4^V=|hn zA{6?OzI=DU)J!CV)cOz&ky0rvEGc(Z^edo}0+|hdr;e8c-v)bnB;~lWm z4xi~75O6w1|1fIiK4=g1dEZ|NIQc^Cx9`*7?OrJujumo7+nsgF`&St~_#N=R9we^0 z>u1;xVz4i(y({@_Qh#`S<>UOl&*};7F?9NLiDAS$n_ge|DqP5Jn3efiD8U)~%nCu9BP_lvE$il%}&qYlf@VPAS`PmkgJ_`gHlO)Vn899rw@`$lmB zo@jUe&;@(Rs^jPFC;C!& zl%J`78OeTv#<6dqYL(wYt%gMElmE)|80F2|`nk+PN&2Z`zSanw!ORVp=ophq>L4 zuE=4K;La)GbH$S~B=a5MY3(0+z8{?Qu2@vh-Jw*Pvv&~QDQLZY=fjS@~<(Cd}|+58W99U%=;&`T^539#-Eijej#*c#{IdvGHh5^@dk>wm{QX-akBmvw7BS^A-UQ zSNCObeel}Dc+-qh)f$tz2QVN}%GAxQ8i**M93-@zh_iEGTJZJV zFuWm^d+=JEHTBq(R`(G2(zHIbL%{w!#I5t-3VGm&6>pi1)!z8bpL2YmBnZA@g!s}Q z0#a9WUshT)H&@}3si@t8sn1*IDq@R46f(%gD4m+>LQ*@3ogaMofy4C6*dEmBDN<;i zrLaA(qYgj&;U+16j_FH~Z#cts_B_+@S>R+6zqf(dbM#-z2LmHQv9i-`^?cTrh4fEz z?!&v1+N|Fp;E?#r0bzFh8GQ}yACRADQy{pwLvg?aPBb|C;v{nQ#^+F{Y+tg!-HIKZ zUKW_mh5#Q;Vlj)yUU83i*;bI`ttqR+8<^-RBrzi<4Fo3reZBqApeCJf)%6R5Ztfa@&pD<0?3Bg#Me+!&ct|(MX5OokJ-3ViP6DH(7^D^qUeNtbiv^9Y z-}<`ng!#yZlZBgu$l*srgybWzOr1B@oZiM#9Vi)s2QwTQy}Uxqchr7`FsR-qHGXxa z<4p@$7=7g?2|{WwV1t^$Vrz!i*|(#n4Fkq-qG{tN9wQ?p@#O4BN|)}QK~VkBIddym zIk_C{;oGlYFw12w)$_<|)viJCVd~1T8l#Rtp%_!hzI`LXBHCMK`QaQrGr78~wMTo22e8O41DEtkm`ck+(OTbYbh za9rfGY~Qfz^X4ihx)9z?G@MCstX7{Riq($hQK!{>aKb{k7o>EXI(&PJ}Zr>-E)XdG_x(?nZVGx@WTfhH9GPG2l9hz@aW$Gxg6oM9*M%;s{w-!ON^qp9Z!`5!22TiV5Kbxy`~gw$6zj?Qoe*#cm8MX57(dL76l1c6|`Z&!d%NJ3L}$L$LS&^r8*e}m zT-=%&Kx!lLhGk(KUp#STtIWv4DO4(FYNSYzWNrBHjWGU!tPW@xA4t|;tD<-i+H0s+ z<2l-#T`Jb#TWC`Mpq>lhZXwP0%gc@fT7vL`PG0mQho=nU6o>-H;@%#NixVr$e8#!6 zlaNT-nc;_|@er1;esAW{m$lCMuLUxzu!zugt67%O(Z!p$6^gX+VHw5JA;fDE#gYO; zxWt463e&POeRQC30T4w?+)C2^GhQbeJZG2*J5Ff8y0k#R_U&2738iwJ+zkT__#bW0>; zEywY(1JOCVn@3`Au4&5DeAe+zCkn>=86R5?aPA8lTjb~9VLL^+Ve2iB@&q80V{$G! zlE$;tBZW>M*uNqEk7&ppRj=XxHz|rV8CQ>8A*3=Ps@V?ZQ!|bTlErh2O~Y`^>c797 zHp)t@yHZvPB!JyxOZ)|G%DsbWZ$~0FxA@hTF3b=8rW46Oqw#Mi)Y999H(m9F{2Z!& zwinyxHhldz0VX13gPVuIt&QBr&LAdA8>~7T6s zu!-!gf(a6ZtedgR5dor{J*kKaJw>>fB+=A~z>1c7xZX=VIgbwQCGGWg*f~HL)j45$%r8UtnQlHJ}>2 zVqXXae3)XmNyuK(%#`;14kn2M<)Kf(%TUboew>**jp4(Bkkq=#-*;{QJAM?`AU#ZD3dIt<_pAtvYM4lI8Hf2nZ4;R7k(Z(u z85f{&vb%AS*Tuuz2MO=bXjrj*VqN5=T3A|J$aShwdS?<%sXbXIWvS z(G%ON2;0lFbO@R%a$T;F>7^u$LV}*EWhKn`10ry@#1l}eEUiE&9?tBiKVmW#aR#1? zfrM1CFC#Zwrp^-UX5-)pW;FE9SBGbpa{WIzO$Ey#N{Ot1lbMzvOI^PeUek zR5{uSZrUE@bh@zjBLxuyHfu@mqg0mpf#x*~ zxhX(g^*YK#^qAkuOALuvYoHfXMp@nc@z||(Q-H``Q22VAkoz|9U;iI=!|GhWGPGUD z3BFbL69arUr!qg4)lqC&|7|pvakAb@QO26!Fs+ai*mrhvyMW@44d{zft+{2_CQO?$ z8J1b_>dRZLIW3DECig#sv+v8s_+g>dmNTW5|CEZ9bBx`+5IKPSx5Mhc>GDe$uZXFs zz}YE14sP!R6ak|+HT5m9zdO{lMS6SlJFtIcBK|YQLCX|#$|;X5O9af6b9A$62AG0i z6MW1H9%kCr_G{`h<%MwbACUbsu;u5^V_)UJxzHCb`}v<2Y!*4J)ylunm^*XMG-cG~ z_m=yBfr#<$Pj4p%sC;y~M3@woMYjnrdgW955$Or^Qt-Tf<=lK<1f1N%Y5()%Fa7#Y z!Fp?xh{k~I#&1cwn(jRLD5~*#ag}s7;%Bn^=2P#PNXQG&D%qXHz?p!5X$PwY*;vn$ zQu}4qsxu`}uE^gYG-@J`7e7-6MR30bs|lfuu8P?JT{_hK;DMjad6`9>ptZ7Kqn7Lj z8;6APatWan#fHr$^;1k5$QAZO&?@z|Y;x|+#3SI)jWRt3BB!6LU&|uAFVI-0Tsu~c zw$%wVE}&pbCkH>xnG41G>kmcWSoBDzlZg`2=!(5+tAmWg>Y(ulT@U2%4Id(OZoM6N z{FVZVqw$jklOA}|t9M<5cz9_rp`C~*Kd$`#A8EXV`M8(Xf|JjpJGnl8$P1{QgZn=5 z=Q)Dd&%-!O%zc`w#^%?^3CvX1*TZ5ospCS_Ui^6*2F)}N_?s`2#l6WuABS*mj29^Q=s+BoxsjJfuv~mEcZG-~iDJovr9Q zRfB7=WBEH3HwdE`^*-@eBl!Tv1%`iLCvX^7InLb+iVxR;Q^ocT8L`>d3n=fvtBb=#yz+Mz2g5i?d`O-ntbcqlH9v|$yRK;vMpH1NqSlNVvDC@{|W*H zxHgkjTpeX8@}7tl*XdP&MjZ*t4ZJOytx?W;wEJ`7D-1T5xg!_AvlE5HnyL# zNHK;2O;dCEKj(Ef@Z?>&2b!_8b$U zER7YK7}MYtq1aILcWbrXVCZYuph=&+)g8vVa*q+;9x<0S5^mfc;pWN z_1}9RYQN6m<&y%%+G3ot7N4i^+JtFk#!2VpwF{vnjUS>qZZ>y zQ&_&~7FFp&i2!nT3DbF-7}`Yvm0O6@XgI}_dSAUgCa1j)X^^BD*A!)2Vo3FykeS?X%I{!2LW^hGXBwu$oAY|jOFZPg3Pi-Rr;5+U_+If zg2NzoO@gJ2#grE1E-)ziA9_&|aBSTbK-1Go-uD2aEArUnB534x?K9(&Sj0A~Is~YI z8~VRMRVhceX9$n~xgt+lFAar62_M&$C^@(PbpwqOb|WD0LzC8??%u;==(@W0B|WU4 zCMUdqM`f*>f>O(b^Y*mGTd^wh&T^)S;H`u`HSgducDaQaC85)D) zn2(wVyIDaR|7A$m4-JFk@acwX zfaWWTPXL{Z#t{+sGmn6^L`Z?KQ8&@h5bu7-&PLQeILVC8`9k0j+n6h^;c9BpG9CxC*;0W zo-UcxOc+-pD^i}FS}E`g(U?MU367o)Ntm?G*}5Uka@#0Q;Mq+rX-YVt<*~CG&Te*Er?fzH*?7Vsq|mSbQw(YLiSGx{;})ts8P~IzA~HL~eo+$g z-ROzX3Be0c@tmo^t?NYR9q%$ZZdJt^^$h3=FJZGkw~CFu40*gB#|G=G?)1Co4%3f( zerScg-e^|#k@Z`@k>*8>=^XsvWW~}FsSnKlZmz!iQe&g~sj$Qu!V&5`A3PB$6@3PP z+Ag6js!dH94WN@P^8tvRRnh44aHBc5lF)myna{1-B*`37x1_He$l#7)8IG!aTTVIi5w%Di%55i z!5gO*2ySsErK+r(`_tgR9iEx-ZmH@}rC~kZK%(8rm!oq$;?Z*LNERM;W%JR#uY!g- zSlWd&J)eoTdj92S66wdkg&G?};?mPEM+qCk>1O>zJ|=rmA!Z2@e#Q0-n742lar0jN zCVQT{pWZR_nMuEwTtHa{s=}u`%wb&mkA7eNye4R1FgJc$Hwe(`yWck#jg~0Bx8V)b zXqKyv9y|^VdnGY5lR;<;(Ph<{*_Xk_;pqtXo$i+zv#81uCh^~ooew)!g>9n<5^}&J zpxnTrPw~vGo*a~asLzdYgU0+i_Pz~vT)DF^t&q^(MSr__FLyz*l*(kxK3=8aGLNED zM4M3IO}pdl!+26mMc-<2_%E}?8ZHczcf8zm^YUrA9W(aKl|g&f2gQ>(``_Lzu=&>OA#2@>-Ar`IBWLi_E#s;!EWYgq2{W9ef7+9#rp`6aVk!6 zwJhf|1oX=;55|aqJze+Qy-J0b~dSAq9&9hy&Om%nqL8pNFmJ&R{iORXX z43p1fZs1+M{M%tZ%j?yYA$H3mf=;T!m`E96+HrA<<>??85K~j#`xn~IP{|IkCWaBKg%uh#}fe?HiNs4o+h;yv(GehOlcG-5_ZdFoO zFEEpCQFmLtu@TQ*sqf`C(5Z{>i&qLHY1ksezO8)bo)4ivy|I$}VLomyR(vMuI;GXS zNHNe!Kl5bYW1FrAj< zfMqyTM-#>PvxuEMFNUS zyFy%8_ZEPY!iD$m^H_n_PlAG(^5v}Zk}_u@*Q}iU(YxrEN&P%KB?7B(@IB3@5Z<=<6X**U+VK)_3ex*5d4+$(&0e zDe)Hn=xAc;TIvV7sf9H5U`alvG9lBV^GWu5PpEQ-hBW)FnAPcgCw~gOr?T>^Olz*P z{cG%-RU_+AIo)$KbCYf6KLK2j1$GVpDu;lyKFfrpB%jQ)8S0_U(hmcG+UZh?E$gjBI;nZsUCcP(OK^|3v$0O2TR=T zIF%=>HczL#bqGJ!TZe!|tF(yfl7Rp;-&3qB1?#`V8UHK_RSIgqK~C;kq<2z%@JWH6 zhq+@v;k_McI@^8gaIS*!mnSlF~c+P|}LOU6~7}Oc*r4vPKV%NTUegv%wwxJwpL>~WPPidFOi{5 zW82Cu+2nDCN2tiGq7&+?;nN+By9nYiLf_yHDd6ZN|trYt0 z>Kl5CCrrcV&db^)m*K=$0ax8S$#w6yRbm!smlSR zVy~VLA>tUa4xhA4JU2<>Mi}>^SNuFH{HEt)`;3G<61g1JD#itV{&hXhBYt;(x&OXQ z+eOBweEK%h8eHBw(J|z)YU9>a1A8TE%3A2UhO3xZ4hvDhcJzBXW+v&q7mU9&pZKh; zBClPn@$w$(w+}`C!j>5{0f`P!vIb3{Age|%jy~*#QF9&X`VtC@o{6q-ppwd*{aTct)qjbYHM!HLs746HXOR)i_9`>D=VcrAU6PBHJkr9EU=1;Y)YkeinMc? zYx--S@f`e$ceXOQ@1)-`Zi(A2J5H&^k%uL|BCP}FV`w`*hLhk|`z3rf6sJF%)+pI_ zf~hI3mOB9`ALldS*eLJ-*s(0^2K@1tlm2~T&5@XAeEmE_Vf|XV!NP`Zn{N9OY(!87 zcB5o?wAI-kwi02vC$WGlz1yvsU*>%cx$%qAaR>Mbt59NjiaodvQ|FWbP;v;_aO`4D z7-{Zr)&f*=4Be*j3<f(T9@X0mB#|yd4te{z^CJ7S8;l`tcwgCxK z+xTn5rtc<@18qlRUj$8B!_UR&2$RWYHVxm|R7xtB=r!jFbJ%gQB{hSYXQiXfz#FIg z=E%g}a~bYBjk6VNAzPe2pPZYsejV*ULVF+ChAu}0gIV|$;-@=`Pe=*_WH5sRkq(zGS?@?M;K zdIe$KF)w!`F0qA$=)O+H*yVj}^d5rLailw*QLX zN?p;w`{~-X{_%Lp4-l(0&z}XmPEm^;Rn}4S$9+_-M`;(i4}r~{X?tc_rDv& z8|HzJ-~3j!?691QQ&I@|e3UXeG;nk%JX;Cn`ndut58s@W#&qSJ+O}9in~(aO+jwwy zN__B_zeL(ONcFsQgp+HH-}H(H-nETy>(OXug}?<{V*poMVYWly$@oR7P-GmVamK6* z?zL%yh1XYS9_Dklo?)zi?`BQCDP#K~%P%bqO3hn(fe~(5EM&`rW_wCxu#onwaU8N? zpNQV_`@$|TIC|H!-j-AJ+;rpJS$KCxO^RA;E`Z|~C+`41Asf$<%YefC@B91VgYasZ z^5tm(=W}d|D1L+?)E2!jcof$vw{mlP8dR%y-;|sXavxbu+34~WYRGl_UYQ7P+=Hq} z&Yw^)^ndtwnJw?fbuC!kb@<_vEf&>dt@xiu?Ht}SQmjU}cbD7ouvcWOMu0TlUBYg# z7{d*Gl5AJ}3hqmAPC^LV`s^tzK`fv&VBdfJvc|@$GH>_Ne{%V%Kvj^MKNf-5Kmho6LICe0EzYvS<_A8-l;3va2qye;)oZYciyM4A=z z^rj2mMyd58O@1h|TIs4IHZwAQdL2u1z_nH+dA zYrn!3q0k7^fJ2~_kL+%QqxUW;l^XR#ZJS>Q=k$SGHZhQ-=4Hy=iM{jmkO1>>b)ew# zUWM(j^d{6FCn-lZwan#HIE-S0GMq;*YPnPMfK+;X_|`X~l3crDQfM7%oPbl(@CIKb z@QtR_NoDq_JB}wLAWLK`F3*oY%ma?B7hz06*hAwdE(fW+TxF@@bNRl>RjyOxA?=MF z3U;xyfO+bTv*Yo^RDQ!{BnG>`6~dM0>exS7D!D9*I`UWYPHjpB3?4l&s(VAiBFuia4OD5(iWdcu1tdMYU6 zprf1(#%^KRmGZ>HcG69AEd_ zfDI?~ryxT*OjSeNEuY%rWi2Ytvvo=f!*v#(Fcmd4^RDh02dg%Je7^lymgLy&-<@Po z2#2ie(b!rA6fVnIJ)*b!?`rX&trg$vN$trAu&pE*6v3mcybPbdo)nLm^tJ2=54Pdr z|LR**6TqSdmC7uvxl5wFN^TFPuPgmv!%g=wU+waWKM=AS zNJzLJg6~9dyvG^&?-j-`IdcxP;LuLw#N2*Imxdg z2NzEjk@-&zFyVDavC5!x1@lSsx}K^MLhg-rcW}Zgt%c}o7iSL9C=*k76O3|@_-vk^ z!?#Eo{?28$BAK#9Q^ih7*@vvn3syvqj(BAuzK!2JpJucGjQr?>v%-L>xrZr?;>6-n z?69||9a6I2fz{&5A)^uJYz|miIN#CeL@z71v1&PKu5TFwTGKtj@v|TqYNh%;DpUQY z2ph4*DCA^Tp-rmWrtpznnjDjfWs-AOfQ;S_6^a8gwj7DK?|d>r_bWnwZRarZqL&_IP-VcJJ-TV{loLuKS(#A%NBK9ZG9q^$AVfBW%%b< z+Nnv?&7nLnxMtI3erGDe&VZS?a^Tqjliu@4O|204ofruFKH@gfR7LZx*fc8PB#q&= zD0KU(QTfU)J>KAfPRz)x`Ad^;)&tWv2|0S`(e6mW%}Y8y>c;e|!&7c~2_?z6vqft7PdHuwmJq}7b3kjC|E-+#js zQm9WnEV2a$Qu;XIE^vT#dI`7Gd8klPF_ezKQdb>NpW~pu#N5Zu#nKYwk0aY(uNEGd zG>eeCp_@P9rltK#*YG+Z>-V6=3qv+7Y|mR-#cz<|b&=@-hn3X95(6>EIhL-P-+f29 z*H8@Oi9BTU#%Ush%J%Jj3cCax`t7b2r-vx*hx#Ys4L_n6OaGYBGyuKvpz&%Sht*l- zK=E==%mh$+GvRHbM%+*J7gD={g3~}_FV;4;kPnqN%q@WQ5lB@)K&4C|8Hbe>>Pu`` zQw^Cx-|Jw#Jsci*YQybe9ouexpV$2w?gpRbVZ)A|@&Jm1@)Esa6t6sEXwR#5*urP` zhV8fJe!KQ;d`vdHx+;E=S;(33{P?jZCA|9Q@Y6OScbj>@_Jkh3jE@~&&Ewd4#rU(t z^}B%I+>G)alGAB{`S>e?^fV%jyss7rsFC-vP^c}tkV;NarP{dB0_R%%AqmX67*Fr% zXWHOaY#*vDBr_`4WrTspExqWx!o^obH58}9{n&D0{K6zJVItp96uuLQX~Y~7U+mzc z5979U5_3Z4iR3Wn4nljXJa2cD0oGGwNKAwDs7--ho95*%Cn(VLlu~c=s^<&lb?M6q zV+_h(tJ&n==45oEu|%#vPUUo{_GpT)6Y*1$<1i<+6HrDf0!~(mhr`OK6@8!tZAy=6 zP6v*RGa<=^eRYa`j(P)}GmK%Mep~LnmZ4geMm~}8$1253zEyP2rA0ZUw=Y&#rz;U! z$s!hC>nM$PQC-0)TWOrU3(o|TV&S?CnHFlGyZ-r0Flo}ixwN&aub)Cld6HqE3 z#hEagQA{vf9gq-j1u-*}=QK7e-NKd^5s#MXM@mO*Y`_uW6;eAFOHC~Nhr^(hc5L#S zt=J3PbpjY^=NTF2qo&ID5{lMXnC3O7Z|}|q9wPQzd9Q+LIUdI@()czBR)l;hm36UG zlbeJm%mJ}Cajh%5lj~%(Le){~V=Ezhf~p^it5PJ%s1f3PiypYaafmEi#?p}W8%#vP zCc?X#n!ce)EkH}^O3K5gcXM}O*?9xSgk&3dm`xBa9k(Z3xr^mqBL4}gdwTxXUve3Y zn;ZTG!>Z8bKVPUi5Z_#99PyiQTwCmzeP6jBNle5ksc28fcv%NUK~2ED`7rfW=Ec3( za#h&yE1qy2RPr4hmyS)Kr!}sG=$!GgMqzhA-gICMl+w7%S}zA%_~(^(feR>&J*hd{ zq34e3P;rq4qHa1hp8lO;>jQlzm6h<%8FB&ceQw0LP!VPKPx={QgZ&69$J)KP4f&9J z275M8RL*17kZqX@8Szx}S2l@5!fx-LvKb8Ft+(aQIAs#m_rj?_0rheT)tJdvq6PM8 z#Dpt!_sDCapvfEFM++h zkj!Y*&mbrrd)+{@__` zXs6I=*sTX}@@ph4tnG$SxisGW+Ms=?o`*4nbZs?If{m=DVpm z8YK4&PP=8n=X%NPPBlFe8?S>alYnz=$2juAT~(mZAaqw~!DvBs0Jv_ZxtB?oqMO)` zi$%%sV95Ij^OW{14sm3C?txqZh(26d zGigyHbBLG2b$S*fTI1%Ic1eB+uRq^K=ze~-fxRuyqR)1|1%7(LGYG@@KBdi~5RF zZqk^!KWzNF{(*AG{S!lk{2=O@vm%yNn~O@HN~4iL>du}Os-@0fN^O%Y0<$jCZpa}} zyvMSBlvQk4o4@T{B~@vj1`*@vXFqci=bQm zki&r{_HSUwmt7NDYZ3pwA6o1gG?rI)gZf1U&@#$T^!I@;Vq#6RrpC#K>z^aTW)wIX zZILO$lb1IN{8G~3tn_))`r{poz~f5K!a*G_F`=h;iEi7b$FFft!4p_0E7M_loSu0cAH#%g#JwWxKs5_15CGEli3{Fz7n@%sH)c!NFOSkD?0@lpYb zdzvh%dfPSi`8>p17P5IsAVqU=wmiXQO?*`C(!rIF3*q3BI`nejf#cDc{9C`6%jL0X;9+%Oj#`*7 zO}-87T@ll`PN-z{K!KWsMyFb=J>!{QcfCY981_lY~)c!!zj4ky+~S# zR=Z{|UW^HmWE0bBROf2&D5dJo)sL{(pW8Uxt8fJU!jNu=&*^>?+4Co9TtnV(RHSsWoJdj+b_N6rGTYLu<1xI4>T@`x_bEo-=TFbs^wq9vaT+2T;Mo`#pL-+b-Ue(%a5&G%N~>#S^m8 z$XkyRqOz5qgMHTl=ti&D-`&!jnt#{~{AYJ`XH#mV?`qY~Vy9v&^PczwoHDG~A52K* zSlDp8lXluG%t~rlaSsGq97P$w#QX>#!XABF7tW4m;jS<92X2Tcr=a{_ILX&5kf)@+ zD(+wJFB32sn%I1fvtEj#+~@;S8)pa+pT4hPdKuxA8FyB2^UHO7{tP_99a)@`H1OPpOk02qr%UTUrulKPO>n)}iV=;g@!UePz@JHTrTei2QvT{J$* zPunT-E<~#5=ZxQE2ibPi=R1fw{uA*B|D3c>7(*D#(aI*ICTfk6TAx}*c>AMEdY%hb z?5|%m4>=igk$X6P2JE0n%LEMsgbF~S3FB@pPDHNTZT|44qA;W*5c(Ad^Yk&{|s z--pvnZ8_gqd*k`FqTz^D1f>Y9>XC^*W-eytv2=udGRpSC@KXu7ogl9(dBx+nq}Bvf zZqHw1&`Q@Llyr{Y^jrlj6yKrI+%~_2yq`?DJ!sf8kIq!r3ErSrNk?b#I8BhN^Wnqm zdmI)6L^^80f%8SA_A1i+1aa*keXbl~rb?$EM_fY-836DON?6-=Ur)*tq3=j^w0RQ#-m+m3WEQ%5)ES(i~HmOL(+ zE^C;~E-<1r?y*&Y&e^NQ-rcs1JT4`XnDb(jF$bWMz)qV|_&r9Qk4|V6>plI*oY~Ox zw#9!9=X1VPlx^#D%cGn4Nn0r76l`~jV#@1WCF;~s=Av;G5C72*OE0X->-G~zC%B-M z=ay0Dr|0@H%1R2kjMw_x*Ji#_>^0&vJ}!BNT#N0=E)?lA%ld!{^9vfCqu!EJD%PH` zEJ|ZDo7FK5lZEp{WzJkT=1rphXXup{ul+0vLo1j)$rQ0xCvBuLqbt=fpVj1|gz*=V z@g3D8y7RKg=UoYS?cGH~tBB^TN%?z^6u}SM^ioId{QCW`Cvo@?vdI&8% z<>VW=Tmg5yVH*g8iWaJ41LoHt%CJK>>KtpH6onTlZR zRBxQ(VezDXfgZn=!40xpAbIQrW=38UJ1=gbTPLi+8xErd!puUkL@1dCYY=5`dNXVL zByz67*)WDO4xw#)w$+uKvn~>+v_q?=G$eieKaS2l9;*ER<8#g#%$+kc)KI(5oWZzt zPpK(W*ht#$DI;BIiP3IF+cq~t7j%)N5;IcC4rY)>jbWzLmVDc!%{6IjyAgJ`EyXau zkKdm?>LJYeoX`96dOcsgbY_}w&%N~+pjsje*?%sq|H*rTk#=(|;Dz|3>d1HzpmIb$ zos&|5Oa3Mqey}b^=@(fc7>yMeeXwo_C9H;TrXOd|XA$<0D-2nKOzO+@$Ic#Ldq{4G z8%c7YWQQO4G5veVA#zdmd_GEbir?wt^gpg-IeD~a@T&uDMhKI%Vr|3jK`qel*Itk4 z;uS!c;vr^QA4>IODpp|QQJ_DLL?W&^Mm}-lOI%=O(9>Bs3z`oq$PFmy(z{8=ShuVs z5he=9{@tBNbCU=~VaWYFabxvXK6ph2A4v}H)_W{kLZ|5=BBUTl4q{(6PXu-Rw4ysB zl$Dk?W*tTq1Y}zQPw9J4{Be$1%u>uCja67tdk&l!>9>_9Jp|;V?~v0P zLmOotfci)`_G}PYVTZ)d!905QM z80*>@*9=q)bsM9Sw^)&_;O6B?g&>G!4&2@4>)l14zP$j9%4fr;=k`=zl+PRK2XPAP zkRGL5WLk-JDvc6i-#>XqqFh>5Hi{XyAneebl3cTNtY4HR8h~oIZ>qzMIgm+PXA*gU zS$v0*&Nse-<6COtBOTzt9T7^1W;Ip_2|#xQ9roR%H2IclNTO7zT?=L^i>k|n8zwk& zZID@+q#7%G39j|fS-eOmTK%XON8yhU^zM_(*~A*x<*u(=mRjZ#>F+*tM!W@S%cJAbzz7UK%r}2G4}6LC z-jV$v64{|n8FLLtvZ-Z+GAH`pin%W|ZCptRB}Mijg-xf1kDrTfy(PDg-XaBMFnelN z6+N_J7??VN-q$l#@A;ino+$!@lSIgO)#Y4VdR0sRUPq(Cw1GS9ZECr;!AtZC$)IJR zvE7yc&}Y7mTQlVx1H5s^>YEp_>8}f~Tcec|=>di^YbKNWKWg%I{xZoa()f)b6_Xw> zc$D@=9c>*f#w3T~$la}{1KExLm5rPLSetVzvVZ@bg{(6dYejG2ysd|F5?O(>y$wf! z`1vwt|A9>o1;ch@pJp>@y|bcJbQa-XazeiKi#^pZICN&vl7jcbByio=G|tE9-Rvbg z4Js@`dMfq&yz7$HsQGWEA`0qeMCIYKu|6QnmIqgKR0GPk|Evbm_fR9#r-P}Sw4KBQ zp1wURJG1MbdVwLOga^m9y3_pmV{;Mvtbs}`ZrWL=8=ROMU8o5?>nLB=Utz*5d5Gj2 z>)7f#^*n39XPO!&$Me%eRE3{jfp``+{fO(?f5upf-$=iXuOD+{!0+Al(Re^fUsM!o z&V!Zgu3|AR4Jf9i0T&58GtsQSqVfc)tYuI}JXJ5c2a4XCF9Dw)&PF;FJlrS*A%B`z zsC^^T)rILJlgq~dqRD{~qUYV81$j*?XD=7Mol_zG*V=*4XF zOi2b3pHmXn<^(1ka6(;dNGjmi)&ba!E7E<~F`+8f&G-ip&cQr#{u&>4;M3B|B0Qi5 z(fb-_a}bO|oC?4>r)AP23V4*saOnBVp+|Ve+b993+(1E<5zT`R*6lSFbv*zzc!@n!(=DB@Hg-2pzyp0{gS(Jp{BCofo)}S0cO) z61#Jq9Lk&q^m(}mQNieR&ym}~{9h+__%*^KB^B9{3~WBA?i!FclqB(^!xKv@tz6Bb z!L_G6o{Xz|4dQ5&V1nPB_@`4USwtQhd)mvSaTSnkakFYnyIwSkaQUH0|I^5qWqNgE z#;0&uc%rzUWnM-qh5H^bsh{Y15@)vJn4P6PicR&JuYB)JvquAOW@dr8Y&MLvHt?P8u!p=e+nr4$^z`g%Guwcd?@Sp!1X)^G)PG5NFx**j4@L=H)T zd6wxUja-IOjk6tLj?LtACBcC2eYrEA-VmyU!BjafhFndn zhfZLohA0;v`N?%&!?BS%rs4%uJdn4~&7=mG4Dw_vXNKq4w_>y*^VD1mn9itS^wbtj4EYhYUH%-2UjjXE&+=`EAt5PKvgM77^wk|S*2Q?x~HW9|vqn9>ia zoBX~5*ab>OjfmKL-I@A3YQ!)Kt|&P~MEzp%fDE<96m9d$*A*y&z-V;KE^tikf#Zgg zBbGx}s}z7^=#i)VBA;BZmxG;BG7`SsB_+{AHhX*lSXL8h_ii7*@cATIrN@_PuP|u} zyzABXE(9w1XUi`K8RT7|wfnNp@r=N`*b2^C9@Gdp#pCg#b(m?!!-$fCKok}L*P}5R zuGX4Y74holYD7&)m2ZBD=TT3A1Kd>;ky*mGBqOUrzRTgQlFqCoUv&jmXl|%C(5(t|wL{^XRt+&v3genLBUak zz-E7!Wgr7scTn_%NSia|!hxkD^3X^1Q9xr{jVlg=z2#&1gRe9lk=pR}?F&i76y?IB zIAJ~9@#cc$9qTsPRf8(F5UHV?iyr3jh156`vQtVMG2 z?jb8?+zvOlxHap6a7a4>%#?w!XJYq0CNBNuBqgk$9{sHl-HHpsFhL0bvZlOqaChra zhfy>|;7U*0l*>EMf?wz+ta(K0oY2`do=U#N9!}XBRxM^BRVLkMRQMyjf7Z*3bah?S z?lF{b9q}}1kwNbl$>Nobv`LJWP;Q2670Aq3v|dM_{9C>&Ak z+gy#ylShD#8$_$S_{DUBn+FrThQnKnkq45Q(8#!KTttQQw)eDY-7V8m!hPtcBac27 z`g&o6`8Jd30g^|L)PDgh80pc_{-+=xfO;V@tYCnw@zDr?)5)(qKFgME7Gi=IL<$rG z^J1uOi~M!KibR;TmEf1i7qF43`O|v3N<1uaL~5z;VOrD!`R?)?gQ8lvSopX&+)a|m z6xtxOd~#+5yUFQCHKpKMLb~;i-G_;8Mj2Sp!6B5b0BTq-8+TE#;TTfKWj;P0Z72fb z0y|#qPZ}+OmIM`>sMpn!^_YH_RTV$E>3d}L#)kWECa)AqJ zR(a747S;3B%EkY%gwx2g{)5jki7OoSD(PbY^R{+$2-GtX?H40~9y4yd{}(V{ z9mq^-Y{Bb)8G`nK?SB~@_}k&2h4QkIkuo4KrflQ2I>fVX71xo%M5~dXrYt*_)*+v( z@dndjCGyhxcClE=lXYn`LHrOmp;8<>6H%tae1DCGd+_JgcZN(Gtf zm|zuxhIZM;!d&@`(#&!&(7DL@jfc+mFrq|C`Q+T|K}!n5!NT(pksk468*ueVq;})F zp@S%;qVb_tG6|FIR8l1M(AM*4A*)eUG1`wR5|BG_52w&)1F}gU7@$y~<4xV);WB*W zs3Z$H{$hSgXq%KnA=RShE3iv^>iH(za+R!60?hz@<#u=1cO7!O5rYC)6{qY7*r#L( zB_yTh-8*{nnjx!TPbjLE!c9mv~|D!K{+elsZ&msvAVeOV5bmiJ+% z!0=O!s|N9RIpks%Z%DykaGLmzJo>MdB)&>JObAbwCb7c%4WUh$2=#4Ggt&jtiZFjYz zCl?@^>E2hd01RjP0l^fybgh?FG=!|r(mPECUNEqk{q;SYR(oJLW8fCI-qS=_VVi|g z=7udUZPKa3ez|d&wh@`OsCsW;w)%+Xor2~88~!Z#&x55%C-WN&?;L2e;xoB_o>O_0 zc`*WLuIO(a;>SjBu4O->^jX8E&r~1OjC^4>7Wg*i6x=0eYKpu-w)YCV49~8@G*dw+ zTpbfuC05J9 z5depSHf293lFS4ijiF^M+IUp?NtaPps#`H(GDk57mi_Xn*NtnON8Z)5KAJ@*?>^Xg zUgOY{#|mZwi{Qj#*J5S+P! zbk?n{;(GfAz$A`*GB;{rIp1i9ylWLF=(U#AXn9p)0#E*ZgBEgGD$vSUzY0zUWeO_z#DGGPYc*eG$Znv-exOr!{YSDyr;|Q|v$%B3Oi`5B(4G-vcfk>e9l~9%S zXeB0TlLkT}1g2o}er#<*Eei$6`aio3zXx;g}Q59(ILxoLXr$eMFoC?=+N%M&;>aW{g z@0PjT+6Hn2P@x;#@>`4EA0LyIqCvG_hjjD3dY*qEuOUds5S@mPpVNmPQJpTY6M-<} zwf-v}mxBLd=;gE%D3!eEmx2bWdPsAd0k)_=#&(D+F012SN2sw)C}<>kWnStB z_K5p_u>%D*I{JkJOp$OlF&JO$ zW&zvXtq2939F`uTmS*XSG0XoD9_dtxIl@CQg-B6`ET;vZmVH|U>;-=zv}56$V^-jn zB=Tp&$e;tQ5?C-DTfui~snfj&0+?1OaqE?WZ6xne1B+4hxUEX;A#voGGovQWhfQzp zu@uSV&wJGy?P-l|H1XLIzL7}mZiV^{bj7oSnDHVUIcETHA0*!(oa~DUZ55JK0P-Z# zyIZz*cO`l(Mj1`$?Om0z1#3|SOhoM?mA+sTA(?^Q$Pn3p=wPwSjIAnfE70SmB4@50 z$Tr5yflK_I=oAPOJW}L~%g5|4F>!Doq9L=ezCh?I%eA2o)phD zo{XYe0e@;OI=St-6dA>hX^1&*D^%^vmyi)6?yuaw+K9;Q;$1GI=Cy@sqtY}kN57MQ zssOD1xd@%wq1@KUhW{)rmCQzRC+9doOTh0(nMEM5DW5;~>aEO%1nY#p>e0szcUyw9 z*_A8!3}V+0Z25Z?@=qbs50vQSyr%QF%0*{6fs(q$Y2e@fVCgP7vPo^#a9yzge`dLv zD>=L+Z4`VaWaPhhH@sI>tKFVz<+Q!<-0csXg7JXovC=W%&WBBpoL+UgAU+#SgB<0d z&%eU>e-nz}9+URzB>UjNdpqI*`*I6;uWGRz;M;4-qaHhfEN8u`eWL@_^ZaJg`xe!w zh2@yQgj^nb>vQgTp?n-Y)`C#ya2|6VS!o3AB`;z(kvhKi>hCvDVE)y4Insxt7Vlh8 z42Bi!qkA5p6c#eGXy7@po9)>niegYo#LH*I`r{_|%u-M$&4|_+YccL(kWQMmiA$KxO#T zWX`tpQ0x+(wEPlg3_#BHCjS*30Bm)Vy69+o%DVLzOCz{aq#ByijG8w?$Z57OTNzf` z$5ecPGJPYcF2YqDOSnyu0~!18PR1B($!}Ej&Mx1N@yTbc$+e@)p>jYj2zq6ni0}m-#LUYURV;wBv;i6U4 zL3uffm@9|ILEiD=fV&3UtssCK8L5lvk3gEcZMX6P8@Gz>QZ<0r?>Q-w+PKg{Tdnt4 zTs$Cm{3GD#ra|eGYus?zmomNdQ!r(Bd>89>X&rd${D#m!_igwlFY4Y_uCZ8j5b4p= z#Z?5J)CG0qq=yDaz{9@KfQ@_ zdxzdt>Ntc6&jXzcy_FZ_?F&C$&uwT%D6ybdRE<@Ts-+{Mc*!}6Zw4hpQ|7c zA2y=-Webz?qJOb$oTuDkcVm=m`Gk;j?&k&NNDrRCK%H$*x_Ki7_nzn&PV$QgEJ{^^ z%e?qA1^sr@s9co3-Srg37q={@s7F7KG8sWZf$lh08SU0P6ixd`WUO9GiqHHGoSd(k zF%^rJD17qSf1`}`?I1_^En@H4aAMj=-1ML+b2myDf~PE~Z4P6lhV^rTeg?(w+wWp`;EM<_?WM!6i@w;C4|lcs6QSoRrlq1nC}U@or%w!b~d zv!x5(4S+PdKERT+_#$(kE~r?2QL+irjd&>~SD?T-GzZmi7HGCRkf^Mbgu_~%aVOVw zIW)(I{DJLm*@+o5VV0LG^StU{^E-}t8uAS~%C1k9FR7P~PLM3wj*S>MgbiP6hB3(s zDA9Z7DV}U`AE?_gWKQUVbk_xPx>myl+wE4OKMe}@FlR5#dhZX1-vnLNgC5gGlO!% zv+E+c03kPwj5e^Sy9=%3Z|o&ANz(OKJm{3kEnp8l1y+^mL~1DflvXT?>Op}71n%N( zI=fH3*IITJTfDK2fraR#&0Y}gr05XTrtNR_lq^Ex(tP`?FS{+u1{{fnu)ZRs-OpXp z0{lhff4fbuzDRYCBvc~R=Rw}_&7D##lPeiQ&Fi22sDBzt^jwdyguBTF1Vl z&G&j#tu)oZ2?_yfupE*C&aC=>y% z_eJn5Wp2$wi6c7yg{Te)1@nWJZc;&pe?dwNEDl$u^spLl_GN;3J6JK2^U4!k(&l-) zmSVK;iGh{?(Kxx|> zZ8HM#fb4h9Rsdo~;?UJXaxu%CVb^0~F)AW2tWRV~4>Zuv>cCAH{CYlfT@?sh-%pD~ z%>uZo!z`rBJvOd402?LJ`$TXdG+ScNu~ga?JJRKY0bA^=0e~i2p76ne8uYYA=!Vyu zFVLvAqby3y=x?uu#|sd<^@|R&Y0eMJr|E&-Q8qlFb8--Wp}*XGojc~LhVGAoZOgd@ zeqVa;0&aMpY{MpyR2DUZcTIh*e|sEeT_YP5kS3{TZ`}BRBTPpYpSN6~2$@LXr}abh zXp+6DO-#YZd<}#aXTntYNsV}34M^J~lAZnFtM{|j2eq$`T;h&+pLbVZcBoZ`?0s@>WKZ~|Su z_2mP&$?&dk9Ly1NgqgXMm-EKXWun66NZsDnXN;{4@;)#HJqyPzJrOjUJBI6MLma|% zB(OWBJ0F(Y6gOx%<|O!TTh04yeC$5VA5z6qg;V2oV$*i!C~DFD4sUK zVW4)m*(TI_T1-fDS4vYG)#<3C*W_yo-~gt$e!9R0o6>>}@x_Hq8MNs=9+#sUySt zYlqJR7bt(6ek2;ep(!gea!$<$5AfSDbuyFYuq=GC<8g5Mp4UH@GU;7!Dwuh=X|yugROLb&$gUuKC1)SxZF_xxv*>8 z;T4H4fk%%TjNsRg*vDz6^_R+Z_Gwv|U>STR^46R(m$Y*qZ+`$S(48NS$iKM2$EppY zTSRJ6@rH|z0Aqf?bT&t5KuXSWHn=6L<%M5+IfN_Fn^3e*4fU42pI{ta-$B{cnJG<{ z(_iTTYd@)LY1B$Q;7E@y8XN!Xcq65zyhCOq*K&aX&%h1oPCO-Z+XdJ#IipAvK1;f8iatQV88m8&MtNHr)&<8eyOBJL&a8b-4k8ggZ zcBFf>KNIi%5&Z4Vjq*!CVYc%4TM&s{OMcLQpom5D-8d=qgS$LIx9}-uNk!N*!gpTy znQIBhzN`ZTVI==j)#L$iHnxy{`SK+hU_guX6>D(8JIw53qeK~{xf_;VQJ>b-0UNU! z-c_9GJ_WZdAa5CLjsoese6vHm2k^Od?RvK!rMg!R?Q94GZmDQgxCZg6thqk)L~g_Q zEXVd-TYC|@e-1Y;BzukYjxlNJM(aM=2)CXK8Ym#Scm{3b<^{9Te)pQlXsLwf{&DA2 zl#BT`fRFYM(#h#t^J@ZGX--_-I2y<~^P&d2tuIKGfE~t*m~OC_NZrC`ng4}t`dT|9 z3mnOf^3IJYC2^?uK&wZg4WK66L&*A`_M89U0xNk`H(f_3Q<^3h$8@u9`H?*wYsuTT){r*bS00%v$SHChYHn^^!kMnR@%+}-YAB>mX0a5=3eW79F?9 zftRY3z@mP7IqQcVf5-zLG{3?uFOd{D^r!7h@v-ONVr)PtCy)o#IP3N!tpYR71BO~C z$GyX#nyvv`vK3hG_FUg9z-0LBd2}?L5^iv8Y~$i%MSPHGic)9CHvYMCEBM>t*U~Z; z{bu~L1HT7>4((HSZyp<9`0933Il!$5vE~CcMQq{Hax!l9l~?p~gj9s9}0!5<5U$NHQY`zBSF5VnCATJ2cHgGmkp%`Io>EOR2+`gXKvlEeQN z&{@Rf&C zHus|RVxQKW5TbN;KXmkh{XyZ=8j`|ASyXHVt4Stx-Qp9|s87KUv_?DhFG{t1OIkQ@ zB^cdpyr|c*Xiehwm8Vs~8t*U!7tzYE6MczsV>d3*beLci@w3^yJmx%4vd&q!2;Lh0Yx19LC|c=EXo4fsk~*t- zi(Cgm@G@z4XVLq?29%(H1MBFV!?-ba=_^7AzL)8{P=${-Oem<_m%uCgRhSnAtm}4q=H)r4+sjH}lyDn46@M>O{8A>PU(LjOg?vL z=o84gLy9X_xw<}(i$|tqVv=qo@%WW133-L&O7za(L^>xsu_-UsO;F9XG{TR?@$E?k zQehG%`4R5shp)K^cDg~QK&R%rsys}YA}4zlTPE1)T+gOGKF;bRed7ygX$bSq7unL6 zl0cG17CpqI`B{2XR;tNEJ-wJ@K0Rkn zK-F&3AIeqREGXl06i<+to|2uECGvyT-X5BXL~k!RJ>{*qkxyF2o1JCpWz(|l913!*UYuLZsyxLb6j0g$bCk`xQ3r8!W& zUboHEu!K>NcBsN2X@U;1<5N}h3?N3}EUHXt%){kFR^aCsY=x71++%j&0W$`>exca` zH-l&Ep19kVr5eA@b6>K4;*I^B1jFRCj|@=FMM&j4=&-7tn&VsG}7hp&BdYk zSll?teu8gM9$IF5u2N+)m?pXfg(UjV;+bZQ13n5tgG_s0?bw}f=P%%T*GI=fv4p1zP^7a!UVf3Av$|$x)(4mB_LG5_gJFD7yVQ`G0WYDgy_Yc zc{WpoK*{?6_RaGNtHiB0Glzg$TmwJsD)G#B8`ES(14GYsjPzDY2TfiQkzwnQ9q!_f zOCmYx|4bxr)wmTOFF+{{4M$C7j`W(3yqV(`CS*H;676i*^!PE^qp3{E0C{X|{Y{j% zlX_@h_`*W*IRdyk5@B@TyA9>;@;`w~0)?aB-TxEtRB3kTGuZ_IZ9W^SbBe#o&{R^higkk?D4RX9|O*UBO7 zv_TP|>ng;XHpa-@D17eNU5=gIlALW*2>V4J5!&)6JWma7TKQol6EiMA#E18Zt9E)w zRsn-ybxep7@R7K#M>&c+NQHI!)Yw08;1?uBpu$NYJDZ7ZVhe$-hlh|_c=?hB*3#XC zQu-zb5R78(HeI-(l-rM6KQYP_e{rBEYAM~7YYai?{rOJfeBNR=?{Q3W5Ama8msjKz zcnEU=A>w_c^{>BKiYw*cR^}sGUh&u>sr9C<+hlZjya)cs;;Mcm{ z=ec^f=F1n5uL8fQJaM5-wM3@{t-;3^mbYUuQnC(kug^N#r+=PVGWHM1H#`8Gf56&F z?kZaPq;M~2k#{0g$42MmW& z2k7rm79j*G|5(-_`W}wyPJNsww_{j=^x2>D&&^x3EWTtRl5k;rr=g-C5VL&Xz)eA` z=pCIr>5Mlh;T6)z$mKnnj>}Dk{@p-;wwAq%R3oK+AbRxv{=el87&I{TI3e ze01~S&?B=}2vzS*gQ)pA@I7qC0)tcs>wtQ60sQ96=uv+c#HP#&T8>?ag4@h}7y%@8 zeS>}TXr!8;RTqN-fuD>tmw19oYCL>h$g_5iSh`SxH}Yr7ZrdM#UB05e3j7M;4hLeh z6N@0hZmi>&Pr|lt5hd?k6hhLa>bhDQIpIihSS>#8+AzWe;Wc+FFM2E0WKG`#Op*^X zgHNH`3OII#(YhfzRX8irWeRK_>0_F=AYq4Ng@6N=4q=O0 zwD!@@HNUIEj{^nx6WAf$|H5=UU^d}hF-JjyYlgNRKY$0^{Q}rwlF!I{Lyb+gyJ?s^ zVvhyp8y0=MhK z0BKC8DdmF1of(nc$xjyWWmh)MppRCw0}mO-0hk$?v6WCsOSPmDDLJ9HX}-UK_NM5l z_J%!m<*_>_#7}VGf8r1(6Go4OHuNu`>kiRT;p_dn(6w$WYqRiL6dqM0D4|Ed>Wm^ zc=5;6ea{2H#aDiC<3<)O@a^gMW6!v?dzrFaN+GYh%`maggdhG?d9vWJ2+$v3OQs)re_S6bX|L z`*vo#nC-d7cc31(hUVvG9|!t3QyG#4g44E-%nd6Ai=WM-rrRt^O6b~s1*^gJbd60G zEx*{eD^E5r|28p~W8MO*pa0xDBDZ`06(sqbfq&ci#9oTmOThx*gD4nI)lSX7=xIrS zV{hxH&X%l)O#MRxqIO7(xDPb6>-so^MX=~Z#vc#a=JTZcBMX`2&#w#>;s1fnJYf_e zU2%Kzl-X_N9$>+iEcA zn0?E;F1mh0$TFH-y|H)!7ps5C!DIvaM82gOPIt@jV z!;J6Y9{q`)qd+7zZf(EnK${tRXJw)URQNOOG%%YcO$_*a^0j1bL@HRchd(KCY1_^= z7jcAlfntEXFb2d$q?LjMcHp=8pVyT>L*ey4miY{{BGAcm%B|cJOyM24(XcbB%F}oX ziM-|)SC`C}y$I1W&8OKypq1T@$s#MoF338EzL&W1EIc_oF9c=Z@&h82GpO>n&b+8= zOQBd$M*R((banI)y}O6Rl}PFkJeacgiOTK4E{;%$ya>2(>DoVX=-IeTv~V{%Ij`;DC*_5A?GceTysL zM~mc8(!o8LWgkq$=a)OU&z?U_HHX zq0at$79#^mII(TxMB>5Ir)NH~7+Zm5xfM62fNZ{KxdV;ln~}@UoI>yyc@wDvZGKCh z%ylz9z!td$B5z#`Vy6jjnm=@o_frlol~ZWI?|KmCv;4&$@Wl(>UE)f5k&Kg#|Ga$$ zuHIt{LG2NKA!*YoTy{WHMlfQg#`oDyq;j?N?ZPrz0L(S)*}s8BSVjI_cSi0=4`&ot zeSIStCinJ@MS(o+v<0QRtGMI4i1kjnj`=Y={gaL6$Xre%s2{J zr>7rGE}R6WHV=rTZ2rQ_p|hppcbs&veE1(o`-wY!MZVW02Lif$n71vXBu<5xhC~O6 zwgqh^4p)x@M%mE%kzXiw9r}`~*%jXi<3VJe``1xMQVz)Yx;HUXFPZG@?lz%v;R;sU zrTja3>)Y=sYf-8U%N zkFWn z9K6or;iR56*IZn33%i*wrR_#O?C5U%jSi^2U-}4KfJ%DVk+O6ZP%v9msG<{Q46I6W zQ(uU^I$abETyx3Yn-ixfesDJb4PWffog0Ch`s;LH43Gp@Bl$UjxU6s7K$JKyJ)ay& z0_g;8?s3&_iAK?^;d6KdCYo% z86P2E0|zsk$OWfKeOd~O7AmuEqohoMn!*0F0h!_gJFa7Z0k5@Upx%+u_gzbo(FHi% zwI4rhVbb77ql~dH5>N8a`-hY5sc?9wpJS$lg-KJgP$7<+=6)To#{~0`&+=h%P8UIN^2o=CYt+$(t6JJ9^3!X*UtgQ*TG=D4UT?<6e$H2!iZ!A?i8L3zxL==W z-0LiCL>xSuXuQzESACd8j8Ll*7XEtNMNv&E8!WqFPri7-+HkU92(yI#KS#}QC3sDZ zqcDz1SONt_UR+YpFS<2h#)^H)oaT7CU^>aGtb$1oAGlGq?U8)puqj|-*46qcE%AS@;|5^@sjLry3#kEfB>b2UkQ? z+-m2VT%T8)KwiNCmB+GzUgtDFtMwyoFM!@GT3A!>LI@|1%ElMdN!O`{9}~W7a2!{I zOj~$q&YaLr`MfWK!>IWl%nfz{C0#Aa+Fn>svnvXp>lemS93XFrOx{nm^V{K-D@L6O zyEZ-6aFlUzPizpfBo#_tUvX1pLhHG>i+MTeYuDy206b84xha#?xVdM;Thv?tN4BR> zyI4qHL(f~074ajVpA&w#5b)QZ5=rzcdFzf>OYJ>Ky*A|x@}3oUVg~Sr$InNd%?#LE zU%}DW%e6p=Df|<1*xH#r1$qpySK~<4*8GdxScTI^X$YW2!>gXgh98wJa_&cOEhgKE z9(EkYB~Q>L2j4j(?PqEQR--bv){m5FoCgn>AFyAK*mFNkZFbK-Z2$(;q;>X zE8&ITbGd*DA-@&Vr1ucC0PF)E6aC+iUy>kl50*q}i|R476ETQ*vU zEHX05%UR)t>|MN7wtW-?r$;~77;R6TgOI8wvtVx-;Hln5E_;SD6K6IY>Dvv$+{0() ztnf5$V=7jGJf?jQTiE6qU@-~CgWtb})6P*roXDq&zAG$x$>H8V1uSzNxoo^&>*x@F zJ|s8SSzcIQp#cZP{&di(A`>fhg%-NJkz;OwJQx2}j+^R=MgZ901L7q1@^cgNjpqNZ8<}5vQIMyTJ7%68Kc3^pG!Jk0xh6%od)AR|C%RMc> zL$4N;M)4LO9Qnc#CL$$qOD}HqSEprpzoH#Mc6naEeCn`jpqP&dJ|j+{tEysh0REp~ zfp@LHk~vF0eQlTAOLy3DLZCUp5!1YWwU7poS;!6O6Ar+ zY^-73;=UtWLGcs;dxoXPI`GEQK4O+w#En3~Ua-|T-#Y*syDMZ^S+;ItDYH=m5pIcz ztaIW^roeISj*XRg!;6MG%=(s&9Jc){+xOY`AW04BZkra^4P4*Ci3D?+JNwAWrL5F0 zm?``Pp&7SXWjQWzua|*oZiM5yyH<+uMd_tz`a=vj``R5tt|jtKdtzu8$S=+phHG&k z2<*D<-4=^W&-c;fnBWcUX6NL_ViF)yfB#@VU|8s#!n!9BUIH*-c4+SQz+ZV|x)Drr z4yg`hrIIu7h9GSnC$KFybUFIJ0KNNa+RC@Qg*}(F{ko~} zk{3v&0M8{9GW$Cq0(?p?9<2W2Kqpj}_f#f1nZH8`%izt44>R?JGeP;(OQdb%XXnwg zq>zHA+~8kFUR*&xR@epjN0rc8287@myuh06z;tt@Q2Q&Q(j_ zfe_S3u&`R}0tN+VF{2x*IFEEIpys@7?!cw$K-HhpCxu<*TewKv;fPAL!27^)*eojA`m0J6PbQ%-vMlQx*;KgREVG%FqA}c1kPtAR}7Z655PiJ+itQwz9;l7pFpFw; z!Yy+S%u*Q0PX~XHQEmQ7*?pCi#9A_wEs0T zt-LtgfXju}!FFeJ2xOSs3C7<6qvJ!E>Bq>fxpX_Wj6QM@8#_tCu8mN;rm3cCz{%J}>z)ATSWpN*>*o<6lx}lG{p}N^HDq4ir4(XRX-~)NgK+CpUEs1<1 z4emLdEI#ciI03upwF!pFu;MfV2c0?<-pZF~k?^jXhxuFOfenL$&Vj4D_C?aJvX#>` zCQPD)L%Vr*Be)iS%zwc&)O;ECS)=r|u~0ck>fws0f?#Ycd=$*g8Y^SSGhEV`gJmPA za2g`+J3Ou9|Fv{eGkt~K+vVZ?yGBHGxPNoGXC+?0L`z7-jNb66AaZdK>sCS;Cd@+3 z5wJoWsoZAy6UYjI{Qv+i zg>Ofk6%@q(r@h$u)u8tC_Rhi`XbOJLSB@ExovwwVmwj;6cV4Q)DXQ&>^PH4bA7rNP(S3XY)ZOEJL}hc5dFPXr$bYJYDByn z3E-n!4>it+Y32(6vzS7#P3*4Z)emWy!UJ%Q!zrd4E&<~v@O{k%uTi&z9G+}o1VnuA zg|)$FX0BH6H5E^vfP$}C+3_=&-#;P$`_ZDcC#6Ndsf^B3L6H(bDu=&}97+mwQO+%& zO^5*?dBMn)mkV*h4$AMH&n*;N=89l;aH>%Hu@@zHAtYLUN7XA_P(*tBbbXHl>FtH- zy@|MGCh6M4roA+~>gA8c3An(Ov{No$O|je5mKffSTRNbp!|OjeBVTird=@f8ru`RH z)Ip)`<$RuGF;qLK-Q}ES*qU(ICGgj=Q8g#k;)Ch)`(}aNDBX)icu(pxC_kXojIn?_ z2V8EUIzogf18LTmM^=gX<98$UjCyo`R*HaR#59d2`cH27TH@{k4{Uxp2vF>- z#%>*+WG+C>zEHK#{Yq7%X`E~HhijS~^gg&Xsln9GQ8>fHYpnwZS%gjGvGIH=lV<(C zpXnRpxCF}wX_2!NJN#-KC%}LUU`Ci%FbkL0o_z2U6I@3^yXW*Pk_v~1wos{JPO1aJ z6I{>zdD^&IKx^}b$-!u~Cq91jY8h8>2Nu_*gj0A8%Ym9G6`rgB#TGktvz9AJMD_)B z)!-pKNgW4zN+n!{O32k<<4mFv@{z&mv(=>1DDnIChjFXkvq9rF#d&x)wpCWRVAQ$+{RyOBJ6(dP!jWLvEx zV|?vfrxlY}=EJ0oP4hSoE64wm(@#mEjpY4Bpq%_Gc+bTjS8Mrei@Yp+7c%lkK>ZL*Zwr>FY;OT5HNaePYu;B1H~CV4b;Z5XiNT z!mZ=yjvsev++_U%j8cnWNv&_zje;SLxd;=;p-p~Fdcjw+woLiLo?7I&+MN?N=E7hs zoZ(78N$1O0JU)8MU-1kPErZEBp1>U37)u_~D6RoqBPpL9*jgBMg9!w>Cr^cV$Opi! zF&(fELG&M1jBUe>$4CJWyhoi#DT(b@qgZAgxp(;MUVHMh*E<>t!exlzgtOu@9F-N@ zp~M@uSi3l8K0<0%`ciGx`;((VdA0~niM3;}Sp*{K)7dLcbdanxvnW7)`WM+2;s&Cv z`@7@coCS?9d0?#mI)ju^-+QO~b+rCaI&NpHfLKhPmNSShqG0 zp@BOnq!5nKcgoVbjdHNofku2HJ{5koI-7rlb6tL$<}BF_k^UY%>1>_~2d>Ty0%8=f ziX%i^TNsNz1fsxqxy5hh8ecr1Sn=`&CUApure+rL)E7s}O0j^C-j$AYd*EfYhr6p2$$Fqn=o=!I z%Mb9Vc?A$A*nyfE2<=SBPh6nVS6d&*S!>dLT$G=6puj6f?siqYKg?6#`#+|hJfNwg z`5Xv&FYo09BqA+=fCA!yNL5sV==Xt0J@G=6C|VGrJp`))323Q8RYZ#lDu{@fNP-B# z1|=xAUbW%{NW7}GVj`riRWv}}Z#LF`KmEsX_ic7(cIVpJ8I`(!={iPj<@8hO!zWE( z)<5VByjlaipdYex>}T9~t~jyZJEH*`*RcJHkf@5Vj2U`Ear~M-b}Wd5nd%Tl zi`)iJVkuzB?t|`xLo!u@HhTSoTK9;r%2n_V#htdJ}JA6o9^)eiw)K68Uzlub@5NN>529y2CKmN5X_>WQZy zdq@!!QcFF20Q?T$gQ}UHk^_#ykK>rL?iKl*a{_OsnHjh$`q*zQ;g+G@+T#!+3Xema z8MBWZWDYXxhj2$)zorDrgJ6#Fo9_*B<9vtR9rMS2sF?NU53*iFW?s0zj%7Kx(P_bf zX+rY%{!&MacZM3XP){H73FpLpsV*}h5jd{(XA8-WGdJIOQO@-9=A|ACfnU&8GNYcK zT~W(d&SLI-HdPW>e|Rz*vP96BZ>j#%E!1JAs!KfSTSj1;CcbglBoo*Or+?l2=YaQ= zt^OlXHfKCxO4!ku(pPWaTH#8sBBpaatHedRTGVW26nfn(^YK2L%FjM$Bc3xjF1vRm zd7nMUI)36fo5xxobE!Vcxp^P!pz6l)659eLTO`#m z)AqEb5y7R&YE?7Q!blSsRu><10=uViG8fw&GEh+c3?fzkg7j^KqjBtHrn-Bm@`}@v zEYgWO_~S(G*bFDu^_v+PxMStCg31%#lY&^!;^P-^okn^T{&$9V#$0UOiJQwv)=qQV z>i8;fO_@c~7tEdVVI29^(p?J6X?{zJ+^s^QP;D3s&mpffwnxp|J?L<+7WUSk4!C1i zWN_3Th>+pB;ug2!DA0F219B$-)C-&_(i)b`@d%Aqj@Uv?iaIp`gE)o8DpUJ?+ zI7hW9LQQKRUC(5(_2=#)?@6J2+EBhSf;qiibGZmkL>goJ(*nLMBc9Id!M&C~VpNQ{ zR2CKQqLiFH%fuXi-If>yNnZlA)}^NyD^~8U=$6?2F4u#S71C8OGbK8Uov-!kpUp@g zmODO%fitf34x3`ZXdNWjg zAI133n)ujDkd;+!X>2Fk8|Z#9-jiNn)wZ&7KD#oV%Wc?oXb>BwERAC@Zxzbtfj{Fc z+>pa(;M-mjp7FJf=?&8Z&|DP>xsBOiLMKb?;JikfzAA^#J6kMS)K#Q zjxKPx9CRoxM|?I=e72aL{H<4@H|42)gl@zIeubm2?02UBUe0G0xa$K+OWp7c9%K3% z<4GT3IJ*!tgPUvo-e(J{%uKwn2SWL>tYhc~)|;+g*7@eCB&dVAfKzR6lXj|!)DRr&L!3mCYu%>`T|o2r7K78)kqa%{MB z&a+JrsL%-+z@>9_$%j`4f@L_3$qJr5_4QOC?FWp@oppncg*Y!*SNh2zdcY9rM~v?O zC>15{j0xH;5cke!jl6f$WA{NirZxqnxv+PNZV&qGmizfT>ZKDLu*WwF*8jZY@a{Jc z!R6@G^Ze)ft5A3bJM{c{7?(BYVPnYQa~WLhre@|T(lM*p;ZyU=A$iw*Q0F` zH3u{5zj~yJ&v?OL^)#AthHPQE4zKafm?!?)lMgXa@w~Q ze%@1dH|d8oAE0OTZAu%Oa|fcRkHeeDx2gHNk`;$q@El>(PUwk&1shJ#*G^oB*(Q~p30!g2?{5i?*=Pdd%g+M7{%#R6P5q~fr+q^mJ zDF=6UUL3Tl@azTwZIQz@y)Lj*o;|qbcuEa{B@%vN?9kvi9&_rB6r*^0p=|iMtr&Cm zkyNLH8%0}pilm*4mBlOwy2||OjY#?tlNaS%M@}sL-l_pnFpD8B6i4zinT@pd{D=<6 zsM{o$eh^&v-Ri*{%B{BNDh4-Z$KG|bxgYHhu1>FwDl!na^4?g0F7kE}P#TVQ# z7VWVoUzvBJ`1VpJ`v~vx_+6b08v)F}mGD1J{KZP0FvE>i778mY~ zcYz7DI~4T08<&aucQc#5pXD%OItaG!eOd}#*m_0dGM3&eY)tyVJ@F(@CU&$nm&{ST z)Am3>QZQ3qn06&^ea2)lB*GQ<-(%=jF^lMfl_?Iywb2gIxu9@=&!Bn#R1_n;u%PUW z7euObC}me_gy$=Uiyh9wCYj+?_#IOy9VcprYq*2VE3K=qbymR33viN7XOzol@AdSy zO|qT_%a6%AkhIqI@xd+Fb~Q7A?WapM88dVo0*St7X;kHXLhCQ;8PaDqsWmMSgo>`KC|G<;j z(M)mF1>f*1URg2fJa{dKC+7sGG`dQ&;-TaZR2z@lmzvT^dS!(|p3`{N^~Ot);K{mGIyW@!K`xDgPZ!;}b^@XZrUnJ;C_pKiluDKj$Se2&)lEd*RC8{@QPh0n~|8{ z1UcOMQ(zM?Z`II08-_wA{PAeQ(QPFj9<2Nre_Kth?{RaxO0E# zE(#16N`Jxz0{m$o4IU$7427`d&Dgo>0Mo~=Jlb}sLIn$Dnbt1+nCBL%`}D;x8QFN3 zwZY=fi79+nW*Pqk?)W!;y}_9~ZsN)7LnGjh^|QVW-7ef->8JN1e}NJV=d=Tq8-Lc2 z|AsvgO7F8uKi;*;jrctNlXVxo&%R>yE0!5g$@_t<^iTakyw^0;I~JFD{xt z?_fOrjOvM3{Plf#5Ju@trQ2BVv&&iL zoUb1eEN8zVIeVexkM$$fF)sEh?0G)dok_jD|57CF25m5Sm3Q0W9Zx|w^kHyZcOI$s zo)p9S_QimWbi5i{RsxBivJSVHK|RGjb-T9CJL4YCD!pNT#bJ3*D6X6OdDFM+UWuA} z=!@n_{M?nlvmR;uuacM~)%fYu(&rXxxk!4QF=@Z$&spAK5jO@hAvqy)FBvq`%XnD$ zmRfpgU4P2H{upAJ1g3iM+yW@)SO-Q-GVr2rCmGTAp;&%Su+ zJ-L~KJ@O|$V~n0K{`u-s@wUedzH}^OZ)#_vgOI++gs~rsGsBAbF`lUzAU!5!+@r5= z*01gVVh~AS3{N`bO#2n$I>j~vA@!Q#X#zF%B6Di$H7|K*rc65+LZKU>fo#yAqwu8|F!a@&&--FH9u8Z&8n z-f-Exl@rTT=N_WNtMtE^>;=&|rxHuonezg{qr@C>@m9sws!Vzw&C{_$K;&H9UbikN zWAoxU3jUS{q63u#P4SiL6&P!~93&3exlt3!550zvh?C4UOH;G`#BuKnM?Z0wp2OmM^qV;BZv5n8owN73@h0LENJGw8G0fBBfHUnsUSXAy zr&jTms->A;{lnns;T|QqhsG-uDs{OyBbvGT+Jdq>m5R;f!y)``JR|XXh!=Jc!UDb% zPntr1-aH_8pE{L#zBI;xl^B!lGIQMF<#`wQ%^ghnk9z|bwJYdNx?M|U4BgCc$`ZW| zQj1Xo_tsHE{Uu3-hf>V^=0gsc?LdJ?WZU7_)my}nL#1|mL4lihMlb7)uIm8@i%Rw0 zInE~J~BilRpN7Bi2>+S>Mbx^bYXWO}6E|#->*RNL;>sWui1KbtX^1kL{^Vka+d&bgZ^}~>te}Xk<-_wbGWm2r6NJ%})OWZN z9?Bl^l+`*hWB$w%#XJAJT7L5e#)^5eQFpx+UXK}UuSuUV4)wWn6P#&t1X3d-C_I}_ z^UnJ3L`WX631XpE9++_cpn~32&K6Hu7Bby&OLf8U{y>H<#f3CGXD{*+NT)F6jIx+Q z-{E1CB8w#a^N9(*XR938(K;WjXoMo$Z0O@F72>hVh<#}gN@jzg=t9O17M?Dx^mXhf z28d{6#u)38jC8mm6ibW68N(ShK38g2^(#cmIZRr@<$}QQ;b#{yrVFB`D?#~8gr&90P52<|f^`NQV-o>F9HE->f!Myi+gS>Ueny=0Jm%-@J|Ssq~POkc_iDhd(uByPWeh zChj05qP-LMcQfX;rXTyM^v??;&xo3xm_?~Zo`dY*3z2ezh_Sgm#W`XFWqAZn=Of0V z%H2>HhV{-6TFr49%6wN4@13!ouGqBbkyn2_ounz{A1U_@Vmp;HJA(tKdS}gAwn5Z9 zf#I7RC-!z%YDAfnn#AMN=@GXpBHU@OvCWDs3){)rr{KGY1EuSh#6BY28Gb_-u@;wZ zzW&1-k+Ow(38XGPOe zX}MyQoWW62Ac+yf<-m(RDuu)(^47oU1 zcrRlP>qJ%0Q$9ZBr!(mu?&rsFM6?VjTH>)^xv^xQBJ9SG1IUF^ub%KsD^skazJ~l> z!OR5no-ud9Nz?zlUUZ&)%*m`G8;4$a+SCur*k&wTWA;|eI;pB!x`W|6G-_|6v+^^M z@&VxS$5yYX$V2erb$}_~y;lCM9KtW5t{Q$MN>mqhJ7Kv(m6wyjWK2vj>Z`pbd+NRW zrSP_?Q|D2Vu|?cJN8I%FxDYsNmImBM6D)HJoDZ%c9&-9 z5eH1*V=QosJ51WZB>kF!pI_JinfK(yBOot?fywAtAj{`f8WRdr}K4RB>0%BXW2*_xcGVhAP$irN<#J@P88t z;RR>^CNId#)ur@_*)sg>Zn2@+A-d6hOIy#BrllD3!c6@6L9X!p39aZd=D@kM=%o4E zsth^nT}tU{SI(p}*JB?FrTy4XrnvUOZ0OYvXJxT(vH=0y~BFm{smbNYz$Ao!#lqgGIMPYpNpEg%Wn8|d3` z735S6qZbOMM!~1bG9`n9*Coyv!xz$vaM8uN%dYJ45-LN*S)OLF`mZv{1*zR3sb{nK z&ACjcobiR7e$F{X8vW8Q7zLO2S0wukoNYu^T4s;f?i?vRAG=Jf{2fZy_kR9`^91j+ zN-W@L`62>aWb~Dn=t{qRM0JZZ*3$JO-8VYu^*;v(SgWp=5RT7}%(yY5NkR9hd?sp+ zW{lxab$uz6#<2`1EDda|xqytU5z^p&z*-UQ5VLUlPi1}(EubfNX+*TM%$cp9MjD~; zQ(wC{;{Y?JL>!~jWXuyOKjk;`nDjOmX4{GkZ1F71(sleyEkxbD&ToR(;7xED?YQ`K zx=ZsPgC=sYBzILs#i96qasO7aP`Z1r&k(6wywQ(f@~3K7&J|yt2f>XdwZ_8d%otK9 zD4(HF*!r%DGg_G^TZ&@?QKqOYYO_he{&V?l`SPQgPVe~BUO)<&FO%kOmCPA739hO? zrH2^XWc_qdGzuN$4e42F{@a!UF}|kHt-HQI%bjY1H`iD}xMShctM0+%Bgg7+ewtm^`?08UO(C_@#U<{E%1gIVzLJ@K5vbb8|c}pYF3!c@&$m}uGjfz1Ai22{e?8qDBUd+kZ74M^lph($* zBi(m0+*za4@1FBA zmYdXn{Uz?7#0X4yohbA^`*-|NFqw$87`oe z4k|BaK*`^oF_$VF4sE8S7sZpLjCe1}`QpRWRe!?U0XtQ2X~(*WUWV7)2XFXWdXtPU zeBw8dIQ@-4Q`Q*2#S+ZDC8YZ>T%+w{EJ(fHmRgEYuY0*{tWZPlSzo%@V$*gmd;;<}G$atEBXD2KdU05;ANTW=*<9n9f$^KEA+%)-?-`yR6Eb2&=T8j~Y=`c=`sl%_35VSq8odnR zw*%!q1GSc=T;}mau2}M&f*vpm;woa9sf#O5Zg*?SJTpn0v4%dhvz!z{$^uKDt;4JT zBz^sl3r-$pYRjR{B4avZJCv55#Hv-5s`;F7T(YCkJ$nK;Y-WiE-X%JY{k0$?Lj3iw zj+B6#QjqSEOUpRVG7M19T{u5{#kIhr??qVbv4H_d@xiDq*?hE=p0Rv7hl@wy8J>cJ z--@NR;;cM5yx*28=x-=1yZ{IeoVd-ql>;b`2{@8kw#9tJL$j7Yr9`FS!dN6SZ@kHOK;gcF2$n`6(9TAMq zkg@bv^PaN!x6Y6UAn||%({4IL6W~tgvcg`C_d2)u>C#fZl+IZBNqWLg=jI7cp|~?v zZE$<=pbQK;O4ny`;bav2=C|jxSEgm6Sh@qA5o|S^n%?**GL7p#KIcpXwi&?el z?aLwY`P#AUaCfH9PSXhVqi?LHU4bk` z3?c!wTdXPqlP@?4dFl|XSE&IeJ4t!lYWsMN28zU|>rn9z883lVt}>Z;#ER4dzRsQ5 zyaXQfS91xYPM6&2h+q}ULqUefghY2iIlu#xdTkxoBfH=f20C;{%JC@Y)A)Q^h`9g)D3(p2yV3EEY0 zItglTq9}^Q3L=J8$b%4UrTWZlOr(=_=tdyeg4*%qcE`p0)}rwnLt(yn+5Ap<$|bZO z7_b)7CjPyxw|mYJ!1u9duN#HLf8(|ClG-CM-*?Z`UJJ-Cjdkfx8&JE=Mx7-G7X~NM z{Jy#1CgVM7IJV1`v%|dNqjA5KL;tp&0VZe8q6ytg{_;ie+s(`3xoj_=TYJ625j~r1 zYgAAxZDKnLB&L1k_%tw{8-U5AILw?mUlvuP=*&r{}gP?r*Oy z+Q0WV?Qax$6-9HS$Z!{eXc|=*@wTj;gP=BjRrQzb!=IQpv zwJBkLnM_tQ2bZlF_8nPlr!Ph6Ni3whAS8+@1N@k@S`LBV3n3s^F7#(njcOBtFVdyP z1p)rUSyd`iIf)xb6F(MJhr20RfL@AA$d&bri-HmT1FVe}0V#i0p6qcP%}0CVg#jWe zL!9FpDiOU+daI4cxu%m}t{s8)2SxQzLQcq&@yEI^9szv(VlvqTxct_erBMY(+!7$s zQR7h_PJQ*)9!VscZ=Z=qBeC?Up#_8z(H9EUnc#`o?U6~RtL?DGW+PdC9;f|8xE-b_ zEf-(wu{dc)JNn-2ea6JWRz%m+js+q3?UOP{q*OILfaW5rqhubxp!JOS|P8KkyT!8jppMJhbKr|t z`6K*ys(XIn6W`nq`erEno{aaT=Lw|IOujNhHG3X{&uKJT9#J9P6YS%MVE-l!WU2R# z$lt$i^$~!xESny|gABi6=_fl7Jyh1lCK69+9G5gU0ntnKq$`KZ=6FcHTmk!8%F3&) z0{XglS?d_Z@4P-u?Z`>X~4DkcD#$e;H<+XJ&Mj7HKRaO2p4jTiRaI+5Wk5P?= z9>{69@{%u<-hp;2Wzn*68bbmP%MtxmdX1-$MIg=ZSOO;C;kq)E$_HV7)&;Bi)oeD%q}d+2-ZuW0>NzU$SDGj>(FiMUv?mRo8R@mcHvmsofLg-h~6H9UqgNSqz4mYyYHd>`qtLh z2Q@xl6mWcCJQ=T7tA$GLQ@tjXJLDt!#VM#aLZb4^v8l6Gp#8BfO#uZCx38KTA_n|~ z^R!To2XwXSZ8Kx`Ah=4?qY@G~p1Tk73`YI$exJWtNLaYvsUJ;5aJ)4O^7veg>HB+6 z3F=>7WmR+8pRa(MnQs#iKY>4>-PKAuYJC!TQ-MC)svtkv-_I#aA6g$1+Bxju#U~$h z9zpaqSxjo!4~-`S^U4uS^=N@V#S};&l32>iW|@HCJpA%X>Tfw!?k0t&iE!T8r-Zj9 zspk>?O=_s+i%p04N}U|_*Jw?80yl=FM!4Gfv!$=EkAwN#DM~+}L%*L744cF9#D049 z)gu|eRd3%K2v$u@XVgo3e;c)Y1D9p_eBr4>y{JDoY=Gk8F0*S@-M;Ae7^=5c4pug^ zVg1z#)c(?7ptvkeL{Rl?!3CI~LSZlnus`R8m2ux3K``|eQaGGnM>VBwJ`XUkTMG8W z`aK&i|AxND)dtwFX?GW;$`hg7DF&Z&E=C?)`hWkDrS8{oU8k;Qg@SE9xD03G5Hv2I}s3KH-v7lf(=` zy0+Cubt2dV0*=du1mfTM7?nUjJAR39{V}^d4d^u`SDpj>70>~{FPT~3Dxau?@hsH90EtKCYhw1<`GrO9k=+elN!^e_?nVfn6_H6?1!J0<@26 zv{~4!=u@j>^3xFvT`L0;dnc2%A#=A zWyeI8(yqVQtW?urtl?GY%Uu)R)4%^M4;ysQ8LE_`{>o8^-owa=8w$e^tbS~@@bI=* z*@oU!1V7oL<+@;5fBp99vLWZ)JP|%7a`BNa?vdLokGO@iw1)n-eD?1NC6op27al%b z1yQa!p2YFrA`$*o>gwYz+@fwOo$~P`@)|u-*^wM_c6a=q%aID&y`$a(HE#Er` z9#H8)zBezqw6i-MegDTJYJf|moIaVbHPre8t5NzqCKp#6I|8exHoNR#m`cCcyePZfF-}n6J(I%COPkaGkbWG5% zKwqJ4=OeQsn4{z1U8$lmH`;W3gRfV5tSFW_T_rM2S z{7d#N-Te;Ku6f+kL*hRcmR;{WA_IQ?Bww2ckF#^c#-KzbZ>%P(6=%8Eid#Zb(SA`V zC<=FS%T2wkOqcRxc72d^td5j18^@vXEapB1;Z(rZ?L#LxsVfiYqj4{)p7Sk&8yo$b1Y|(vTK}`-5dDuoUkBL% z-P#<@ZJ@u(czKN~4U~HBte5XgI|4AU*FGL;&N&trbP~bTL(0k{yNge<+cfBWs1`K>O}iBm*I19*pMb!C{d2myV`73`o=}vU#40^H zbup~>-&02k>|Q50$OyZ?^ds12;8Fs%ZEQ%wz?&n0uh^`wH*)Z(u8umg5dFSEYpdd5Y1JW; z9Saa_d22ce>F%QD%q8shN}t(!Mu3mmU3#VDIBI7b4507E!Sogo2;bJGJO-b1Ox!LO zg1sc;ZBd!kPp#mA`t7yOZQ*2gBXGL6ou>Jh@TC-S# zq)x%o&^js5+f%75V-1Qk*8f;^1i{<97&+jkEoqvykAuFCkAHoRWXYE7^St)c`|(VV z2<%F(=DJRf_{*p&jf#Wo+)8#Ha0}-tSyrpn#9_zn@sa1Gq4k*hOu#Rrjn48@=^yaN zVMm504r(R;oj*HepQ};liTbMoRKGyTrc`+^X&0hLwRzw*pZ(_dJ-#1xBl_lzym}P$ zC%1e~)OiG}wVHCk-^@#b@M4)=pZ4?=upcgqbbl9$CzEc=-{T+T1wN|y%aGR`^nLfa`pE)9!I=Ccm^u&hp{yz! z_!owJn>>?-=HD3F2>yqXz*f(QAcWtt$6a7AUehHkF0%7)jY{M*w_X5pcB8zJX({{c~|EJs0qjW(zVyF+GNnKR;4e*9djgCDtK%(-eyJp zYc|$WlOTFef0fpvA@TT|u2DrgME@SMNhKietoWs=;B&P86&9yse75byc!6IBf_u~c z0)4+SX<`{U*KWTmD3uHQ)A(1qPnAgjus}u@A+d8^ST}nIvJY&OwM;;W*A)xIYY^Ps zsMqia-H76fh;7+0p1H{i`sU-Yw)^W|q50O7mE{Q8SLCPH4y-`upVC_Lp+g1MGnU(9eK=dV>M% zk)lL+to+_yRDpijQX3fOn26|YwSfNtUsM}nZll{_U=RWp^>mmn<>T{^MS`Lr;j&Zs ze|I(CzYD*|8v9-I6U=E*t(=)7M&mDdow5L@)ui%2cUK+1HV?tc8=Wl3nfA4I}h1I*fCng-02`6q^y8H^fn%8EUu;t z%20pvKsV?M4l$#Hc}6?jrv-nD^xM^uZ6^^u%g;1{J`h-x{z8|Y4gLMWe+TkF79@$9 zf%+RLg9h}=TOrqLD(vUqH0m(dsgss0xl)OKkEKNCIp}ijj;G@h{UM*LjZX}UTj1xh z2Yvt4Fi_1UA{*Bx?E!ix@HDEoU@v&Z7%Nu_5dBRmlRwZ;ACl6E{0G24ZJ@7@`F{4P zga|ag!JyR=m@#i04KG75W$Ocf!HdpxbLR@wUu)>mlI(jr89ijg2mZ>(cK&*;DX9?k zAGM3^&1KEc|7k|gZwM}bdw&7$806=kJ}uW1E1{8$AL%ZBBcWJPggxU)4kL*`5bVu6Tg` z0sa-O7VL8`S!Zwr;3J&pZ|T{^#b?jlv)8{4`XhVpFCLygwa?oR&L5huisr&ejw)pA zxQWj9K+l>rLgJS*g=0r$qy6;EwgLFdtnN3KiQ#BIy?rle5K`sFtq7ir+6U?_4M4xB zZ`UqqN9{)+KI$cLre2qlW7m(b+H7Dyr!O`B$5{UU_g>`#f8IxLx#cTE^T%`a99-#H zQsfbi+RJT?;4hWCpVmm*00wy#VB+F|_ksjVccXTdsTurD*E{Qzn1B!9e|8ZSA_rvOBK&iRdyp0;C-7hX&o1{a43>fZ3;qwizX6ivpHQi$2BF_8 zSM`_()^{s!>t;?xnC{$dtf2FITU|2F7*3dM5FQ95XxlpT!Dza9iW=2+c2<3zCz@dp-ousE#eu4{fc znJt6<0o!jVL7!>mM71U&*b@(J;;^<3zg~FyCW3Pwe_qAK{(L9={Y|v}_ruhq_(aHy zvZA4&Z^(F~c0K(Q-tjzr#hJVXt*@&`lLzvCsl204${wb4X;X?4IORw_1E+BfV zEGa#3pWxlLH`Xg{{~kyx!qT)~K9 zdpp%-g$f57S#zTK;xHLDXw)ejp1->@Gn+I&dv(3zf;UybO$oNBX?POr91{xXO{<1hPqsf}>@bhmD&2gol^ z@IQdQ>f|*)C!~8eYS&oOj&oR@`-tZk!x3CV2H+fQ?_58Z00Dw8T*&d{;eWpUO8j3b zI`7(10g$V!e8;7Zc<>j>c*_8&`{LJk zZp1sPKQkFe`Ugd6*nD!kD0FLL0UCcmVd@hQzpofrG^rcG>)t&yaWNh?eE)w|oc9EM zPC;2nJiKItSue|m^}MoJv>g0Y@{A%0>`xdE4iKM^xu5WzdDlK(cQ+J%iVKn~3i_8{ zL;2QRd2{Y6L?3;XstV4l-`qlna0FA}uOjho@CWGM^B0x=41q@!1zux#qVfAI7VzJ< z6sLu^)9r9yAIRgDpwwnZ&>uja=uO~nj=5Fg*SZ$zXDYMJO0agy_jnDOf#}&gpgGCM z{Y0lHI;}(BtF;76K>T@l`=!)uG~ezQFJM3PpMLZQ(=K0aw*I#SD{;gG=fDCP`hC#% z38!R1qpu$g!SMqY6%X6q^*PpN=Qle>ksL_Omy|bh@ofA02L}3}9@m@2#?dj^Fn;w9 zpf8iY5phZf8fs6W0OrIj@k#PJfnWpB*O^%Vv(YzhFw*}X+RR}tyf20>DU#ahH}HeH z)|q?SxPEQo;BufRs5^#_c~Sf7KJ9z_6fop-?D!>DE^X#`@832edN+TLHxA~#C>^=KT)aRKIfascdJ(pL*Ms- z1C>L#*QC1Z=pXpGGx6@#Z?^n1@AsdrpGTaEC=__w{Y{h#S8?(B>l2f_+tB!WxWMGI z)1M?)t{;NNTi#tA#%I49c=Tq+O`spIQKeFH@mlXWK3#2yp8a^f8a>QiyQr}a(c5h6 zv=KO@c8)5L*!h840|AtuIJ0#Ln^Au@+aLVzIa0pv5ZI?^{ua=O6{Q_VM-lEIuKaQy3+>jbMM(af>st>Ve?*V(=Hk`3@V1g^)R2Wu_7Q=h?jc zhrO{boJW!OT$3vheSR>$GrDqrdn-6~pcTQY&~vMXa08#LXp%oi^q-~ejUUXBRJ?n$ zJQUG)+gpV~$eA|BxV>9~>@gL{Q$AUi7!|@VIRd|LQ=fb7%-uH6n2zo*WW0V*h+_KUv@cP8U`-?~R={`2oITQ1;8FeS}<8`4K!_iP6K^LI;FU05rc-|}UO zzj*9){+=%u7oqR{^WnT;t!Hm0-k6B!rvw9nV3ozp+j#)|&A{I&suyR)>5xl9YS+(t zDA3nyNMlhTYNrgyKb$+QP}jX5(XZS@83^1hS8mh|LiZneuz|V6i()yw*bD7k^XH@WHLCQUT#{L{Dm<4!>qqww z&ZLK1`?~HB`+j(xnaLrdYgV}zq<%P0T=Kk5-Vp-+vlZz4!G5OsT}_+``z@STmZw(< z$elvtPLIp)&l`1(OI|B*xK>1dm=A=0-F2Ozo{xSHeh%(i7v&~GtztBPJ;DcGm#?o? z=OTPJooxbrk1vgKmSP|DF%C%=c+z;Z5A@~`5sVRTI@$l`7gazL6#>5n{Agi*9Ef^u zaZN?P*Jz<2^lXsViEox1L9p3mHuK2%+w~77rlS66JzT=CX56AJFrNfozSRWxu}KX5 zdLz&W#V1&9u${j1o9E>tfb(s)#~@xonM(WTJ{rXXV8$XD@E>&k4RC)2`fG_!o?nmX zr%{8vfn1X#Am!Zq`!5yFW&5UH<0Q^Q_`7Nv1^UdX>9=@++YzkMJVyJYATg>zj^KbM zwMxi4;T*ZW*iN4TwFS;sE%P?duNbXIk!1z@E2dT#_X+6lU@zO(vv|+AK{_3R)#^ML zPhO;xpZcGEOI&ZQh`#0fFMe^Flzt>}4%#18_V|goo2yflt_UCcMvXt~z z$7gcjxzw#=MjeTMfBB=HMgfT}X*i^>M*L|P{63HDpd~~b*P?dH+6(ss#u^#i&;EmN zxF5)2ZDYg$zeo5tt>Ln3$QS>WB~rjIN5>rLjv$4lZu16Fz?J}@0P*&Ha)JYB5>IJMqa8C=?^Bm|DaZWIhVA< zjT#m5C&}!wEJGvYyjG|D4LI0(^kI(<)0jJ?;a4gSsc5t^Jd?E89MwK(J?{ z^EGax?fcQzgYfsDfb`&{t^j^D00&0Mn;jdTe6#|cPmQ_{Lbh6RWhq9u56a=0DGI7n zP4zjE+@Wc59eosriS44ck2Z@{8Qa#%2_{&qN zayaaJMY0EN{UG?GNhn2mr2zIP?4O)bjY6*T!4BP?@d!WW*9&8L zoaS6HlQshVzLhcq{asVH1P?W$`N{_@Y0%CXA!WR82YU*? z>uT{u@WQ1_m%)8>i7vU_8PQv?=3uTM(w_}MFoVhV2mQ515|;z|K{!tZ4p6v1dij`YHd2-YK*ys+B%#gk41Td8)yw_BSor7;A3 zud>)EAtB7roGJ}P^4SCfaM`Xg+jJ{IKS_cv?r6~p~a0xw6UHgSpM{BhB3a9+W`-=)!j{1Qc1xG{4826?E3 z47oYFq%C&+XOqpE1^iH#C@L6))?cp2{Ykb+Np|G^dmqe&$k){KHHm2c2Cce@Pp+Ri z%r!!Y*0+55i!dG$@@zIXXwUn0?MWVoUJ!V#=zsj2WIB2RzqPL)@gt6?NG2+fq32lrV3M zYzBha{sG|cFY~)qFaqRXIIpLt%f@HBCZB))<`SB}x<%a!^0GD%v9lr|7|q9Evp(jq zqi(uJx59iuej1v<9}z5@Q{i0vfnR{WGCC3BIna8_YkPpd6#U4NJS#xsTaQz{;1AQ+ zCmDTFyGnIN5Bf?W=#xGlz6XBVy7pcxtRLyaDlMNgH$Zx#a|ZfeZK z{lmOrC((QrRHMq7yz_$ce(yp zL@1m`IRAQ8Er(bvkVNVJT|Y!*7eZnk$p?K5&Sz3ku!ntr~0L=~8a_ewe?Iq;@^~wG{kSps)YY2lj?UhS#~}qxBmGr~y8wdPr>YoLB^#!N3)8 zli_~2#s$fTOsdf!;6$wmEf^k!>|=_m0(pF;Qxb=d$cFw}o2d)V8;xdk^tAIgaOi^n zwe6U+z5c`cNw(YQgnPAMzl5_`IV%6b#EZxDgVx^=y{hv~v99={qr(~o+R9;mkNYiV zF1|W)w`6`HqIaVz59rUI7Vazs{DZ&5KEHT)Ji?$M`9>{Vt`(BHgta%q^3Zr%Di-1c zE0T;lZvk45<&mPvnN(zzcF&ih_Vx#0FOn_9^+n#Fp!IFeTDDNYrsPJ&B(KaAUy}{|`N>lq_FlBNYgK^XnT%Uy zQFeLqdsP+ig9o`G)Aev3LEc&a0{@+7R7qtb@H2>qZBjwJPP+e3v}1Pr%J9|`{Id|; z1J65AyP>b|6}-mr{I)J?36i&(rlv;NfBVwATmQW;26O?Y@wY=3HPrum-r1)_adp$|{#7`? zd7uyIB+WsdXg`2EA%{zZ?-}RUDMs`@ss{a>9lUq;_5`r+K>lk-je>Za=}`8F@t*#a zR=|yK2#o($j`Y0&1x2}Xd#OnVqX6xPf!K5YE}Su&OG=dC7Z7|`t8wNPdbN69*^1gt zCQSqAKYnAJ$yk6fY|%T{--}*N9ze_Fo8Y{%pg5A*M8n@eSq&S@Sj805X2u; zHlU}mEy3)V`Y*oO&NB;FN5c7*@|3DZh!5HRbo_w_UTC~DMc*$F@0k}8Hx~FA@`u{W zAwEa9wz~$-1MCOQu8}03bh|P|KT-zr6vQLQ!`$S1uEJZWe;))O!~J|nDziXl@2@IH z_Z8un(o=_lwaGG}{%oVGXH-#O0>WpGDi7jEmXw`utAOuezU57j{QTM0;8+(seec?U zKe{vO7B%X!VSeCluyILx0ohUj`Yy-|wHovTqb?BgNTU959-tV|wE~H;a0G(Ee5AN! z3$ot>?froPa@cM)j`6zHAMgS32fA_b4gb^ciIK&3q7Lmv^vu&*MuEOmB0N64jvI*1pFQBzjBDLB;i2|HkW3{2gnyl-M3;` zNQ?cxInRdVxh{F0FZR<1ejy}WUmB@H6zbnX-F?7iSF8wih`0&omk05jDlTS=vDR_z z=bbW9Z^6HsS1&zXX{Ya*w{SnpbRBUI zTd9Ev8`3=_QH0hD^w(=4KBl=<+|qdr&0h}zqHv#{8Y+poVBh~X)m6ZcZUh#B_A{@_ zv=itL{<-K*4T8@CLxcN`Zm+cNHZ*?ERj?n4E6~4a#Q*k(v4%8v9{X4R;T^iQ&3WTw zF#jr*vWmbiD-)v|)}!@}Y=XCo>`x9D-@Ox}@ibcPDDc0?|AFTz85yIXn9K zb;a{?h?gk?gIPeP{MwPe#)#%WvG)<>!jUB9e=%V9w_3W>;<-c|Gj$Oo7_A4chpnK0 zvF@hbgZ&5bF=Z;?zw(mGuGVyP9#wi4$RFQTxT}l6zWxAJfPk$GDKu*)pz)Q~o+Uio z%AFY8+lRh?+vRV8_{+#b)jU`~if?!e{#zPZ{9QyST2EQo%W`-RA=$n@^%8dNYfb_`xK`w__`N*={=Wb&o`d@p;8lpePu8q4fxTO-^H_lP2k?7!IoNOQ z&hp)^s9mFNH1IiVB(%AA!JdYAS;OmCXR>r=!Kj1w`0C_7c`Tdwck0i5X~3f`yhG5n_4t&1{xpSFR(sF;O!MNhoSbeE~^dVQy|{I-EOa!S5^5# zw$bi8$+Q29_!mWm!F}nf6AM`RMF_v@lND!3>S>-+~`O{^oHr! zaL2-Fk-Meg@9)E5KVZ?dP%_9)UuYj-;}9>*5+MJ&-Ty}5i;Lt&bl)1zYSbe8Be|fW zyQoeE`@=uLAI{?nw%&Q34*kA$&6>?zwu8%otx;DHta{hi!y!a9^r)Iu|I-hcHL^Hk zFj}tx94cJ)Ug@oh?yVpA8|ZUTz48C)yXeK|Lw+0o$x z4D{y_BG-TYsSuyArQTRukIoyCXM8;Hk1uyoZvnq72HQe86SFtgCJ$JVzxq#gdhrmj7%sViF} zSWI$Gl9Pb6YVDwck3jHEEwlonb4iu9qO>YQB^EkR3EEb%)hjRkp`ce06+6(*KtxLu zNR&dbNhLn|vW}x-1x%_qXj=#cT3ag(Cb{1_G|uF|_1in=oW1wj>-nv{bq0l;ZPnPf zMErOb{Expopijj!w99UIzmH`S%1}?i*Vh34Y({?E6yEt?-^;8rDPxNe-$wom0#+)T z-@7vR_6ho4qcvub6Gq2(97}<`1U_(J_-n#nM8vNMr}e1*>b4g7u`IhOgO7JKuRRhY z7G#9ApSZA!+V5q4YGMSvmFsSrF(0vl`~9AG7~xs}@TKK^J_Yp?h^MEg?}*G?LC^PG zzD)R?awHf=>98pS@QQC?cceBya~{}#w&>~BSc2=yL*PHh(W3G#HP4)&bJmXk&K zLg3F4@J0N*STn9j?fpOSNtT?jc7yl*5+;6b{h2GFg*@KTjs2Kt!-d^B|LJcx*QCs? z=hs&UeZtsH>a3OqZ#(Sqc1hyZAT9B$(P|wldEsJQ&cBDxL0)Xu$0P?y^M`-a2b>`K z{`UW^87mpscx20usAnqVW}d#@5deI{Ki4I;Q#=UiZQvzmtBU-^U(@)ErF-fSuRD1h z8_fGY;0r$nezJ*=&w_z)f1D{O^CZ7NTNk$Kq@sP9Q;XHSeZPNrF6t}ZNcqV3F!n#} zzdoH6_~h+#|1SNVXk%aZZFbBuz3y1TOKQ*$zVAEAj5(fmzUIj_L@U3{`kO>}GPNV( zi6rXp@?5q6|8J}BuLz`e?Dq&UKRV9vymcMdQD3LUdXH>x>aE{1J9lqH1PeuupWZ@(MII+6AHzb%E?|5w4NFq zlnQ@M+?e+j*`EUIQ7iaq>D)BU$#wMqf$FGztVrb_ysDVzFWqh@{DU%V_;enhaY7q~ z{(k=1nU>e7Kj55JPIU6;ZJ+iMe{o^PR^S6)nEZt-dkxLkE$5Cf_?IS4%C50$$XmFF zs6VlnX)ZvdJ;IwaKH*sZG|Imjs=h&NLY>Zu z`-*xG?sM&`!Tauc9&`mrMvsdVjzhc^>(PH7`QA7DYRW?pZv_73Yu&J1{ATyom*zGT zzj&-eh@U1__$LF=&@^0ET>{rsIV>?zsrFZmvv z+I%OthEp;{=0C~Km|G3kLb`+1f`U4SJ5c(I|F%8-xzzu+Z*yH^r9uCb^Vxz>E&N-H zk?uyJ4-U*P@{@&|Q(88wA^(wH zMLt7gt3?3`&A-_^g!rb$F3GCeM6^ebc#g0_+?k;5#CibF;QkFKti|r$n^jKwT7L)Y zEhq|EJ})tf`Xe6>dS2l2L$Ps0@BgG|pF|jJk2-cflIY#{x(SbAli>OSqP4)wON5E` za?N2;A!v`$ig;b*U9LQow`WBWicZh(}|&XCO>$LBk&dKB?XsxL=1y&bJZ`#Z1ZZX_ zH7RS6e<%)FT?~GX<8)3l^6{NMqn8$B(0We~t^?jY#oQdrz`ls%p#QPn06$zXkL*tf zDAZqMUHkJz8?BE~-+c=50rgz|>HPY5JYC3_R-~Ub@pv4Mrw{cMx&Qo3BhkoI z;z#jF89V82Qp5NoB!3&MgQ$cgOKG#!7`7m@yZti1vGOlt3gL5=aw3SU($CVxeTdK2iI zirmy|$p5GXNRPnZ8vBhYHy|40L%zfTeeZW=?1lfro8zLV=p^4lTK_G1&Qiqx7k~Zn z!7Ad9k_~y+1K7~3Wm~eg5I>x5aiRXZ%wJ=(%_n-mnV%|`?46i$JpCN?cUysvk<24~ zK8x1-!G_gagCraB>>HNW6P=pu>PCKU#?`b%kXMu+z10Q(SY6XR^zfnvEOY zdY8*>2tmW91Y-hR89vWZePr7=* z_6~-WeD}mztS`adQC6%H%?VXeyH!*VF}Z1-O&czt^>;gTaH~~zQ$N9a!4C$6$wg(# z%1w(fUr-ZHl)VD_0s^X(>>{b_+3h-D2%6mP04@neWHy=u3rxj+x*8*Zuy+%!}E9d+5kzC_>1}#2+Ko^;v#1m z+i;~ctE!gPzu9&DI?}`wt7cD(r~eNQUfRz|mYUL+7V}~hQ4FZfGsPNMqF%EB=UB(v zj$XjFM%deFE+sP-FcAZ-x2KQFUbIu%Lc}*l+8smGp4;E<8%t`$L$GCyZFA}l6ZIdq z4C_SxWz(<9{brMx!L6aMiu@b1pm!$_-I2WcFe_Yr#2@D)(es9Z^OK6+U`-JpG!lKP zt`GZ9lGt`A;SsEc6Lma+%Ah1#&t7Gi1+a|8NiQcr48ZKr*_|i@J5#=Q_2aajQk@|} zE;*ik;bh`jnjekk{(8CC5Z$@{PCLzqP-AJ@af>MlR{i}kM%yK3(6 z;btYrKJR;=Ryl|G@nN;uAr;j%e4)Gc8GYZ-!y)Xaab>6qdSr%61YC^sm$}QS9qbb& z9h3i7)VES6(aGC3zQg!WU2aN#4Q55Gpke!V7vo=>rpn3sumCiwhOf(n1GxeDN48LZ z(ae~cNJ|P!gQt|x_qYb~0HZnSS8ynuAu*atWl^k#IZ+!jmD)W{Bf_c+d&~BpSw!o9 z|NgNLW#T!ng&x8kB4~FHJA*O)zTD*J7V!P8ckW3=;ftTqv=P5@0<9BiaCut5?A}hI zeIxWnDpS*B+0|bD5DV8W9v|`;=AZU2jzJLZQ&k;W%*#6~aBm3HeKTG`Wm2(Rlmh!> z%+`pn^F)W6|$ z^D(KYV0v@tgt=HxL3N#D5Z7g{JTgO#{S33;8ny>!|22aqiI-ncTiPH=M9NP`&u=}4 z`Ek9r6~_?l42cfO5)wW9vb#T!t-WS`kXS}xNT=DOm5Kf} zJ)#F7U{HpMD<+ne5$!NLwH)($Tk)hNqiFt9yG|P=f|xteQ>1OwzG1MZM=Cg3^;yYx zK}3Jj6@z0HPUhQoOiL_8f0xSw{WYnl&@RZ-Vtq3%d7Ocg-l`_)77>jvIk~yvajEI& z@u3H7M8`xceh-q?T`WB62_d?!bn7dDl0S{_R#vs}`eOr?O#{=7N>!RqWWiuohj0gl z83(=kPR7 zUc>jGam)^d$?YfD3uOqqdCP)!-96CqkB8LmhcG0^C=!D+lFame-8rXOCc6CdD-l1S z41?0@Myres4r{NU!td`oxIg8A-LlLh9dY)GK6Cdqwur6G-dUP*@6K%=Koay{MrE?I7K_Hnh#AU`#YV_wWFY zaZoj8obeg4C)^$f!aycmqXjb&$4V#^fVpK=Hk==icKpBBp_j8KH@^7P8Pz$AA7MT`}>`Uz?}vgWJB&-fvq+??W1WKcx-RFBCjV8zKyz?tA=+i#0TUW4{Y!&P9=$ zgCS(EI1!ctY)n*tqf$xl(*ah9G&jPMv(miw0KTUqccOU|wOc)X3YcBo^OMF^(ff=p z7hov5>X#D_uO!-lx+uUpcS$;Z=h5@st?sQH)6{S(;du-3LtXu+2+O4uWpw(7^JXvd z@+=eQ8+4&}iN}@Y*ei1gHi9$=%7%PQ@M@;g_w0t- zinMsFeP3b}(IVp@)~gfiF(=$Bp8&(NH6Rj2>yIo7=68v`Ik7yFXsymYj4)|dxYM;0LFKT~(w(na+sWk2EOz;=PCY2b#|D zVdt4fxu_(uePe0`?dRmRFW;20v)3;=yqJHUi(u2@oH+|H1ZuzemJ@E%g~6(Us4I9s zm)tzq4g1ertMP>!hV^ZA{)F`xmTy{Sr}gl-yAbvntvq1rP2k60t(z$pbr$EYw`351 zI$GU;tu_g5P4UsOTn)^A%oh`x5r8lNr7dZFBn--&`zuDmPVg%@ah7df@0@uwKd36` zmPuqUsel}<0X>u2B|g64HyT5Ub~q?Zw5lk4LSwjhKY_p6=6_xZdn%3_Mw*mk8dk5- zz7$=A{+_Od4`kw?#iK?Cj-(OweXc-pgKE@-(_Jfm^miO5($yo)qZKQHvnVYfa5!4w z7G+vYNRy~Rqv{N95yI*>%HS5k?S}y@7AYxAnnUfSduV=qXMA2wW$n;E&Qp*l{S}58 zW&D2hxEfqC?9VR?RGk#2#PVbP;RgDgVDUbb{lN`nZtFN`|8>K_Kv=HLl((X;>l@?$!-CzgwFBCWu_ zWN&XsMOZeC^o=t>{K*Gh4>rC{R`~Y=ynEImy#wX{Y}?9dP?u zoY|8C7~>ydKOCcTViYptYJ9(_8pAEkO6bCk2@3l2I1?N&!Mnair^-a%kNJZ9 z(%4yL`*D6hqAp6#ZhCg%xgRw(Xz$AF)OY`2*Wm!oJgX*4&hw8|7xpCg z$wcX6yYEw&)TPur$IE^?`q1;if^P8t&_lp%*<(8vHg)l^Kj+W@(&8!Qp%=^3XnfA$ z0Rt<K@qN%wSTD49uo}~GzI~<@WgMNw$5H7;bRGOjq^S<5 zH5QFmzRK8azqZ4fa$ep$`=Fn5<bIZn<@LV;xKfVgLZ=-+c!l^0SzhDg;?OtCTdKZ2hw+7dbn|+UC2WM8mSJq z>$Ym8qFTSJ%9JDgwDcGa5|L0{**GI<9iPoW^#}9hUCqfOA;f0;2VFQl>*4;ZcY?0* z(^TLCbo`}?Y-MD&H#!!;=JZN_sJupE==5{jHzT^Sq9gZX6N%+Dp6#eU2D*C5ksx~B z{o&!$h?ZI!kUghu-$7<0lW-zrseiWj{iq(CvOHKQ=ig^Gw6bHg0#lM0{UJu&dAJ*_ zY}PjEk+-S6&U4?zF*&0w%bsi@woyEE8|5rFy>!yM&a-&`fZLTSXMf1uFlqZXH3B5f1d+qwf*a9i8mUSGNoDzV60p z0#lcK87RC!Zi}_cvsF4~=gPRLBh|gWetSMawbS(7ripFze8+I|_CT&F{!9PGvuWA# zoIAG4*9@=-mIRTPw-Q!wRFR7)iHndktvaW6>+N__6>?6?CXM%$1{qWic;nqw!sGYuuUk?Xm zvwGWo6Fbt0e_)nb<>KWlGGFbpky?IN@5x7YMfu(#O*E~CzEO+l_)YWt350G$w$lMI zg6QjU&9!;n@k*J%*pi^J2y*~!gX11$l8T1x>Okeilc~D=#4;EvP%M*R8Wf$>k(#D<8R(;eqmh)#?Qe@ zE=4qT$Jo@TAEBw_;;W^$=04sG{Q03LM$W!Pojy+w69$EwaP&`v3!`SKWW8lUJ;tVr3{$o1M}basA-VH3uRNHIa1Lw*9;00QU8+ z$Tea_pV9<x2o=@dpOQ?kTXE=VH!$SoZ}{t=1`r*II8YiffoDspQO_UdToS@b11a?dL>k7$V@mdNpM1)~jv9Bcdyhop*GgP$5*=IES7jA!z gxM|QhxPLTBR76*q?489czmwC~{o|IW*@yrAKXPnz Date: Sat, 27 Apr 2024 00:35:57 +0200 Subject: [PATCH 106/132] Medical - Add `_createLitter` to medical events (#9959) Added `_createLitter` to medical events --- addons/medical_treatment/functions/fnc_treatment.sqf | 4 ++-- addons/medical_treatment/functions/fnc_treatmentFailure.sqf | 5 +++-- addons/medical_treatment/functions/fnc_treatmentSuccess.sqf | 2 +- docs/wiki/framework/events-framework.md | 6 +++--- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/addons/medical_treatment/functions/fnc_treatment.sqf b/addons/medical_treatment/functions/fnc_treatment.sqf index 4222d69a4b..c524fd7ebb 100644 --- a/addons/medical_treatment/functions/fnc_treatment.sqf +++ b/addons/medical_treatment/functions/fnc_treatment.sqf @@ -155,9 +155,9 @@ if (_callbackProgress isEqualTo {}) then { _callbackProgress = {true}; }; -[_medic, _patient, _bodyPart, _classname, _itemUser, _usedItem] call _callbackStart; +[_medic, _patient, _bodyPart, _classname, _itemUser, _usedItem, _createLitter] call _callbackStart; -["ace_treatmentStarted", [_medic, _patient, _bodyPart, _classname, _itemUser, _usedItem]] call CBA_fnc_localEvent; +["ace_treatmentStarted", [_medic, _patient, _bodyPart, _classname, _itemUser, _usedItem, _createLitter]] call CBA_fnc_localEvent; [ _treatmentTime, diff --git a/addons/medical_treatment/functions/fnc_treatmentFailure.sqf b/addons/medical_treatment/functions/fnc_treatmentFailure.sqf index 42323922a3..7b3278b2a5 100644 --- a/addons/medical_treatment/functions/fnc_treatmentFailure.sqf +++ b/addons/medical_treatment/functions/fnc_treatmentFailure.sqf @@ -11,6 +11,7 @@ * 3: Treatment * 4: Item User * 5: Used Item + * 6: Create Litter * * Return Value: * None @@ -19,7 +20,7 @@ */ params ["_args"]; -_args params ["_medic", "_patient", "_bodyPart", "_classname", "_itemUser", "_usedItem"]; +_args params ["_medic", "_patient", "_bodyPart", "_classname", "_itemUser", "_usedItem", "_createLitter"]; // Return used item to user (if used) if (!isNull _itemUser) then { @@ -53,4 +54,4 @@ GET_FUNCTION(_callbackFailure,configFile >> QGVAR(actions) >> _classname >> "cal _args call _callbackFailure; -["ace_treatmentFailed", [_medic, _patient, _bodyPart, _classname, _itemUser, _usedItem]] call CBA_fnc_localEvent; +["ace_treatmentFailed", [_medic, _patient, _bodyPart, _classname, _itemUser, _usedItem, _createLitter]] call CBA_fnc_localEvent; diff --git a/addons/medical_treatment/functions/fnc_treatmentSuccess.sqf b/addons/medical_treatment/functions/fnc_treatmentSuccess.sqf index a400fa98dc..0c39f7646e 100644 --- a/addons/medical_treatment/functions/fnc_treatmentSuccess.sqf +++ b/addons/medical_treatment/functions/fnc_treatmentSuccess.sqf @@ -50,4 +50,4 @@ _args call _callbackSuccess; if (_createLitter) then { _args call FUNC(createLitter); }; // Emit local event for medical API -["ace_treatmentSucceded", [_medic, _patient, _bodyPart, _classname, _itemUser, _usedItem]] call CBA_fnc_localEvent; +["ace_treatmentSucceded", [_medic, _patient, _bodyPart, _classname, _itemUser, _usedItem, _createLitter]] call CBA_fnc_localEvent; diff --git a/docs/wiki/framework/events-framework.md b/docs/wiki/framework/events-framework.md index d6d4caa849..bec6492c96 100644 --- a/docs/wiki/framework/events-framework.md +++ b/docs/wiki/framework/events-framework.md @@ -38,9 +38,9 @@ The vehicle events will also have the following local variables available `_gunn |`ace_unconscious` | [_unit, _state(BOOL)] | Global | Listen | Unit's unconscious state changed | |`ace_placedInBodyBag` | [_target, _bodyBag, _isGrave] | Global | Listen | Target placed into a bodybag Note: (Target will soon be deleted, target could be a bodybag) | |`ace_placedInGrave` | [_target, _grave] | Global | Listen | Target placed into a grave, _grave will be objNull if `Create Grave Markers` is disabled Note: (Target will soon be deleted) | -|`ace_treatmentStarted` | [_caller, _target, _selectionName, _className, _itemUser, _usedItem] | Local | Listen | Treatment action has started (local on the _caller) | -|`ace_treatmentSucceded` | [_caller, _target, _selectionName, _className, _itemUser, _usedItem] | Local | Listen | Treatment action is completed (local on the _caller) | -|`ace_treatmentFailed` | [_caller, _target, _selectionName, _className, _itemUser, _usedItem] | Local | Listen | Treatment action has been interrupted (local on the _caller) | +|`ace_treatmentStarted` | [_caller, _target, _selectionName, _className, _itemUser, _usedItem, _createLitter] | Local | Listen | Treatment action has started (local on the _caller) | +|`ace_treatmentSucceded` | [_caller, _target, _selectionName, _className, _itemUser, _usedItem, _createLitter] | Local | Listen | Treatment action is completed (local on the _caller) | +|`ace_treatmentFailed` | [_caller, _target, _selectionName, _className, _itemUser, _usedItem, _createLitter] | Local | Listen | Treatment action has been interrupted (local on the _caller) | |`ace_medical_handleUnitVitals` | [_unit, _deltaT] | Local | Listen | Vitals update ran for unit, _deltaT is the time elapsed since the previous vitals update (local to _unit) | |`ace_medical_treatment_bandaged` | [_medic, _patient, _bodyPart, _className, _itemUser, _usedItem, _createLitter, _bandageEffectiveness] | Local | Listen | _medic has bandaged _patient, the array can be modified to change treatment parameters (local to _medic) | From 3b806295f75e1a1cc97c82b6728d797e3878d863 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Sun, 28 Apr 2024 18:02:50 +0200 Subject: [PATCH 107/132] Hearing - Use class EH instead of extended EH (#9986) Use class EH instead of extended EH --- addons/hearing/CfgEventHandlers.hpp | 10 +--------- addons/hearing/XEH_postInit.sqf | 10 ++++++++++ 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/addons/hearing/CfgEventHandlers.hpp b/addons/hearing/CfgEventHandlers.hpp index 310be3675b..8143e2ce0d 100644 --- a/addons/hearing/CfgEventHandlers.hpp +++ b/addons/hearing/CfgEventHandlers.hpp @@ -13,15 +13,7 @@ class Extended_PreInit_EventHandlers { class Extended_PostInit_EventHandlers { class ADDON { - clientinit = QUOTE(call COMPILE_SCRIPT(XEH_postInit)); - }; -}; - -class Extended_Init_EventHandlers { - class CAManBase { - class GVAR(AddEarPlugs) { - serverInit = QUOTE(_this call FUNC(addEarPlugs)); - }; + init = QUOTE(call COMPILE_SCRIPT(XEH_postInit)); }; }; diff --git a/addons/hearing/XEH_postInit.sqf b/addons/hearing/XEH_postInit.sqf index f8f5c2938f..e6f328ad78 100644 --- a/addons/hearing/XEH_postInit.sqf +++ b/addons/hearing/XEH_postInit.sqf @@ -1,5 +1,15 @@ #include "script_component.hpp" +if (isServer) then { + ["CBA_settingsInitialized", { + TRACE_1("settingInit - server",GVAR(EnableCombatDeafness)); + // Only install event handler if combat deafness is enabled + if (!GVAR(EnableCombatDeafness)) exitWith {}; + + ["CAManBase", "Init", LINKFUNC(addEarPlugs), true, [], true] call CBA_fnc_addClassEventHandler; + }] call CBA_fnc_addEventHandler; +}; + if (!hasInterface) exitWith {}; #include "initKeybinds.inc.sqf" From 6e32fc1144ddfcdd51857cc09e88946031c64059 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Sun, 28 Apr 2024 18:04:56 +0200 Subject: [PATCH 108/132] Hearing - Add earplugs only if not present (#9987) Only add earplugs if not present --- addons/hearing/functions/fnc_addEarPlugs.sqf | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/addons/hearing/functions/fnc_addEarPlugs.sqf b/addons/hearing/functions/fnc_addEarPlugs.sqf index 035d82956f..fdbcfbc621 100644 --- a/addons/hearing/functions/fnc_addEarPlugs.sqf +++ b/addons/hearing/functions/fnc_addEarPlugs.sqf @@ -20,11 +20,14 @@ if !(EGVAR(common,settingsInitFinished)) exitWith { EGVAR(common,runAtSettingsInitialized) pushBack [FUNC(addEarPlugs), _this]; }; +// Exit if hearing is disabled or if autoAdd is disabled +if (!GVAR(enableCombatDeafness) || {GVAR(autoAddEarplugsToUnits) == 0}) exitWith {}; + params ["_unit"]; TRACE_2("params",_unit,typeOf _unit); -// Exit if hearing is disabled OR autoAdd is disabled OR soldier has earplugs already in (persistence scenarios) -if (!GVAR(enableCombatDeafness) || {GVAR(autoAddEarplugsToUnits) == 0} || {[_unit] call FUNC(hasEarPlugsIn)}) exitWith {}; +// 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 {}; // Add earplugs if enabled for everyone or if the soldier has a rocket launcher if (GVAR(autoAddEarplugsToUnits) == 2 || {(secondaryWeapon _unit) != ""}) exitWith { From 7c4f4cf8f856db7802410e6eb049b877dd059789 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Sun, 28 Apr 2024 18:07:15 +0200 Subject: [PATCH 109/132] Grenades - Fix flashbangs causing pain for invulnerable units (#9981) Disable flashbang pain for invulnerable units --- addons/grenades/functions/fnc_flashbangExplosionEH.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/grenades/functions/fnc_flashbangExplosionEH.sqf b/addons/grenades/functions/fnc_flashbangExplosionEH.sqf index 6a7b683e6b..d54f600179 100644 --- a/addons/grenades/functions/fnc_flashbangExplosionEH.sqf +++ b/addons/grenades/functions/fnc_flashbangExplosionEH.sqf @@ -118,7 +118,7 @@ if (hasInterface && {!isNull ACE_player} && {alive ACE_player}) then { }; // add ace_medical pain effect: - if (["ace_medical"] call EFUNC(common,isModLoaded) && {_strength > 0.1}) then { + if (["ace_medical"] call EFUNC(common,isModLoaded) && {_strength > 0.1} && {isDamageAllowed _unit} && {_unit getVariable [QEGVAR(medical,allowDamage), true]}) then { [ACE_player, _strength / 2] call EFUNC(medical,adjustPainLevel); }; From 0f5b7c8762fdef5feaf4f34b7558f71073589116 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Mon, 29 Apr 2024 04:49:36 +0200 Subject: [PATCH 110/132] Grenades - Fix unconscious AI being affected by flashbangs (#9978) * Stop players being affected by AI flashbang code * Stop affecting unconscious AI * Update fnc_flashbangExplosionEH.sqf --- addons/grenades/functions/fnc_flashbangExplosionEH.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/grenades/functions/fnc_flashbangExplosionEH.sqf b/addons/grenades/functions/fnc_flashbangExplosionEH.sqf index d54f600179..5e8d17e50c 100644 --- a/addons/grenades/functions/fnc_flashbangExplosionEH.sqf +++ b/addons/grenades/functions/fnc_flashbangExplosionEH.sqf @@ -41,12 +41,12 @@ if (hasInterface) then { }, [_light], 0.1] call CBA_fnc_waitAndExecute; }; -// Affect local AI +// Affect local AI (players are not local, except for ACE_player) // @todo: Affect units in static weapons, turned out, etc private _affected = (ASLtoAGL _grenadePosASL) nearEntities ["CAManBase", 20]; _affected = _affected - [ACE_player]; { - if (local _x && {alive _x}) then { + if (local _x && {_x call EFUNC(common,isAwake)}) then { private _unit = _x; private _strength = 1 - (((eyePos _unit) vectorDistance _grenadePosASL) min 20) / 20; From 3987c62accad2f54afb294dc79162757e421da74 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Mon, 29 Apr 2024 09:34:35 +0200 Subject: [PATCH 111/132] Grenades - Add missing documentation on flares and incendiaries (#9984) Update grenades-framework.md --- docs/wiki/framework/grenades-framework.md | 46 ++++++++++++++++++++--- 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/docs/wiki/framework/grenades-framework.md b/docs/wiki/framework/grenades-framework.md index 3fed8fd50a..fce3b480c2 100644 --- a/docs/wiki/framework/grenades-framework.md +++ b/docs/wiki/framework/grenades-framework.md @@ -1,7 +1,7 @@ --- layout: wiki title: Grenades Framework -description: Explains how to set-up flashbangs, particularly multi-bangs. +description: Explains how to set-up incendiary, flares and flashbangs, particularly multi-bangs. group: framework parent: wiki order: 7 @@ -14,11 +14,12 @@ version: ## 1. Overview -ACE provides a simple interface for creating flashbang grenades and specifying their properties. It is important that one sets `timeToLive` to be greater than the total possible time until the last explosion, i.e, `ace_grenades_flashbangBangs * ace_grenades_flashbangInterval + ace_grenades_flashbangIntervalMaxDeviation`. Any explosions that occur after the `timeToLive` has expired will occur at `(0,0)`. +ACE provides a simple interface for creating incendiary, flare and flashbang grenades, as well as specifying their properties. For flashbangs, it is important that one sets `timeToLive` to be greater than the total possible time until the last explosion, i.e, `ace_grenades_flashbangBangs * ace_grenades_flashbangInterval + ace_grenades_flashbangIntervalMaxDeviation`. Any explosions that occur after the `timeToLive` has expired will occur at `(0,0)`. ## 2. Config Values +### 2.1 Flashbang Config Values There are several config entries specific to ACE flashbangs. All successive values can be left undefined and they will be given the defaults shown in the first example below, with the exception of `ace_grenades_flashbang`, which is equal to `0` if left undefined. ```cpp @@ -53,22 +54,55 @@ class CfgAmmo { }; ``` -### 2.1 ace_grenades_flashbang +#### 2.1.1 ace_grenades_flashbang If set to zero or left undefined, the grenade is not treated as a flashbang. If it is set to 1, the grenade will be treated as a flashbang with the associated effects. -### 2.2 ace_grenades_flashbangBangs +#### 2.1.2 ace_grenades_flashbangBangs The flashbang will explode as many times as is specified. The default is 1. -### 2.3 ace_grenades_flashbangInterval +#### 2.1.3 ace_grenades_flashbangInterval The average amount of time in seconds, after `explosionTime` has passed, between each subsequent bang. -### 2.4 ace_grenades_flashbangIntervalMaxDeviation +#### 2.1.4 ace_grenades_flashbangIntervalMaxDeviation The amount of randomness in the fuse time. +### 2.2 Incendiary Config Values + +```cpp +class CfgAmmo { + class ACE_G_M14 { + ace_grenades_incendiary = 1; + }; +}; +``` + +#### 2.2.1 ace_grenades_incendiary + +If set to zero or left undefined, the grenade is not treated as an incendiary. If it is set to 1, the grenade will be treated as an incendiary with the associated effects. + +### 2.3 Flare Config Values + +```cpp +class CfgAmmo { + class ACE_G_Handflare_White { + ace_grenades_flare = 1; + ace_grenades_color[] = {0.5,0.5,0.5,0.5}; // R, G, B, light intensity + }; +}; +``` + +#### 2.3.1 ace_grenades_flare + +If set to zero or left undefined, the grenade is not treated as a flare. If it is set to 1, the grenade will be treated as a flare with the associated effects. + +#### 2.3.1 ace_grenades_color + +Sets the color of the emitted light. The first 3 values of the array of the color, the last is the light intensity. + ## 3. Events ### 3.1 Listenable From 4f1c2fa8d7a98c2a8d2d8612edb8152a3b973c5f Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Mon, 29 Apr 2024 19:13:47 +0200 Subject: [PATCH 112/132] Common - Fix adding unusable throwables (#9980) * Prevent adding unusable grenades * Update fnc_addToInventory.sqf * Update addons/common/functions/fnc_addToInventory.sqf Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> * Update fnc_addToInventory.sqf --------- Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> --- .../common/functions/fnc_addToInventory.sqf | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/addons/common/functions/fnc_addToInventory.sqf b/addons/common/functions/fnc_addToInventory.sqf index 9902abe82b..38476ad5fc 100644 --- a/addons/common/functions/fnc_addToInventory.sqf +++ b/addons/common/functions/fnc_addToInventory.sqf @@ -59,6 +59,21 @@ switch (_container) do { }; }; +if (_type select 0 == "magazine") then { + private _configAmmoCount = getNumber (configFile >> "CfgMagazines" >> _classname >> "count"); + + // https://feedback.bistudio.com/T74244 + // When adding throwables with the addXXXCargo(Global) commands, they don't show up in the throwables list + // If a throwable has more than 1 ammo count, adding it with addItem(XXX) commands also renders the throwable unusable + if (_configAmmoCount == 1 && {_ammoCount in [-1, 1]} && {_classname call BIS_fnc_isThrowable}) then { // TODO: replace with https://community.bistudio.com/wiki/isThrowable in 2.18 + _type set [0, "item"]; + }; + + if (_ammoCount == -1) then { + _ammoCount = _configAmmoCount; + }; +}; + switch (_type select 0) do { case "weapon": { if (_canAdd || {_canFitWeaponSlot}) then { @@ -106,10 +121,6 @@ switch (_type select 0) do { }; case "magazine": { - if (_ammoCount == -1) then { - _ammoCount = getNumber (configFile >> "CfgMagazines" >> _classname >> "count"); - }; - if (_canAdd) then { _addedToUnit = true; From 9d168756df555cdc71db40343bc9d4c9bfd196b2 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Tue, 30 Apr 2024 00:55:59 -0500 Subject: [PATCH 113/132] CUP Compat - Fix NVG Black/Green translations (#9976) * cup compat - fix nvg black/green * Capitalize some colors --- addons/chemlights/stringtable.xml | 6 +- .../stringtable.xml | 58 +++++++++---------- addons/gunbag/stringtable.xml | 6 +- addons/irlight/stringtable.xml | 8 +-- addons/laserpointer/stringtable.xml | 12 ++-- addons/realisticnames/stringtable.xml | 10 ++-- addons/smallarms/stringtable.xml | 8 +-- optionals/tracers/stringtable.xml | 28 ++++----- 8 files changed, 68 insertions(+), 68 deletions(-) diff --git a/addons/chemlights/stringtable.xml b/addons/chemlights/stringtable.xml index 2c4066e9b7..76f937df61 100644 --- a/addons/chemlights/stringtable.xml +++ b/addons/chemlights/stringtable.xml @@ -355,7 +355,7 @@ Chemlight (Hi Green) - Cyalume HL (vert) + Cyalume HL (Vert) Knicklicht (Grün, Hell) ケミカルライト(高輝度 緑) Świetlik (jaskrawy zielony) @@ -533,9 +533,9 @@ Chemlight Shield (Green) ケミカルライト シールド(緑) Osłona na świetlik (zielona) - Knicklicht-Abschirmung (grün) + Knicklicht-Abschirmung (Grün) 화학조명 가림막 (초록) - Etui avec cyalume (vert) + Etui avec cyalume (Vert) Scudo Luce Chimica (Verde) 螢光棒保護殼 (綠色) 荧光棒保护壳(绿色) diff --git a/addons/compat_cup_weapons/compat_cup_weapons_nightvision/stringtable.xml b/addons/compat_cup_weapons/compat_cup_weapons_nightvision/stringtable.xml index a52bea0e31..47d35eba8c 100644 --- a/addons/compat_cup_weapons/compat_cup_weapons_nightvision/stringtable.xml +++ b/addons/compat_cup_weapons/compat_cup_weapons_nightvision/stringtable.xml @@ -13,32 +13,32 @@ AN/PVS-15 (Black, WP) - AN/PVS-15 (グリーン, 白色蛍光) - AN/PVS-15 (Verde, FB) - AN/PVS-15 (Zielone, WP) - AN/PVS-15 (grün, WP) - AN/PVS-15 (녹색, 백색광) - AN/PVS-15 (vertes, WP) - AN/PVS-15 (Чёрный, БФ) - - - AN/PVS-15 (Green, WP) AN/PVS-15 (ブラック、白色蛍光) AN/PVS-15 (Nero, FB) AN/PVS-15 (Czarne, WP) AN/PVS-15 (Schwarz, WP) AN/PVS-15 (검정, 백색광) - AN/PVS-15 (noires, WP) + AN/PVS-15 (Noires, WP) + AN/PVS-15 (Чёрный, БФ) + + + AN/PVS-15 (Green, WP) + AN/PVS-15 (グリーン, 白色蛍光) + AN/PVS-15 (Verde, FB) + AN/PVS-15 (Zielone, WP) + AN/PVS-15 (Grün, WP) + AN/PVS-15 (녹색, 백색광) + AN/PVS-15 (Vertes, WP) AN/PVS-15 (Зелёный, БФ) AN/PVS-15 (Tan, WP) AN/PVS-15 (タン, 白色蛍光) AN/PVS-15 (Marroncina, FB) - AN/PVS-15 (jasnobrązowa, WP) - AN/PVS-15 (hellbraun, WP) + AN/PVS-15 (Jasnobrązowa, WP) + AN/PVS-15 (Hellbraun, WP) AN/PVS-15 (황갈색, 백색광) - AN/PVS-15 (marron clair, WP) + AN/PVS-15 (Marron clair, WP) AN/PVS-15 (Желтовато-коричневый, БФ) @@ -50,32 +50,32 @@ GPNVG (Black, WP) - GPNVG (グリーン, 白色蛍光) - GPNVG (Verde, FB) - GPNVG (Zielone, WP) - GPNVG (grün, WP) - GPNVG (녹색, 백색광) - GPNVG (vertes, WP) + GPNVG (ブラック、白色蛍光) + GPNVG (Nero, FB) + GPNVG (Czarne, WP) + GPNVG (Schwarz, WP) + GPNVG (검정, 백색광) + GPNVG (Noires, WP) GPNVG (Чёрный, БФ) GPNVG (Tan, WP) GPNVG (タン, 白色蛍光) GPNVG (Marroncina, FB) - GPNVG (jasnobrązowa, WP) - GPNVG (hellbraun, WP) + GPNVG (Jasnobrązowa, WP) + GPNVG (Hellbraun, WP) GPNVG (황갈색, 백색광) - GPNVG (marron clair, WP) + GPNVG (Marron clair, WP) GPNVG (Желтовато-коричневый, БФ) GPNVG (Green, WP) - GPNVG (ブラック、白色蛍光) - GPNVG (Nero, FB) - GPNVG (Czarne, WP) - GPNVG (Schwarz, WP) - GPNVG (검정, 백색광) - GPNVG (noires, WP) + GPNVG (グリーン, 白色蛍光) + GPNVG (Verde, FB) + GPNVG (Zielone, WP) + GPNVG (Grün, WP) + GPNVG (녹색, 백색광) + GPNVG (Vertes, WP) GPNVG (Зелёный, БФ) diff --git a/addons/gunbag/stringtable.xml b/addons/gunbag/stringtable.xml index cf7198f41e..6389a667c8 100644 --- a/addons/gunbag/stringtable.xml +++ b/addons/gunbag/stringtable.xml @@ -19,12 +19,12 @@ Gunbag (Tan) - Waffentasche (hellbraun) - Housse d'arme (marron clair) + Waffentasche (Hellbraun) + Housse d'arme (Marron clair) Чехол (желтовато-коричневый) Pouzdro na zbraň (Žlutohnědá) ガンバッグ (タン) - Torba na broń (jasnobrązowa) + Torba na broń (Jasnobrązowa) 총가방 (황갈색) Borsa per Armi (Marroncina) 枪袋(黄褐色) diff --git a/addons/irlight/stringtable.xml b/addons/irlight/stringtable.xml index ab70abdebd..5423a8a8a0 100644 --- a/addons/irlight/stringtable.xml +++ b/addons/irlight/stringtable.xml @@ -14,12 +14,12 @@ DBAL-A3 (green) - DBAL-A3 (grün) + DBAL-A3 (Grün) DBAL-A3 (Verde) - DBAL-A3 (zielony) + DBAL-A3 (Zielony) DBAL-A3 (녹색) - DBAL-A3 (vert) - DBAL-A3 (verde) + DBAL-A3 (Vert) + DBAL-A3 (Verde) DBAL-A3 (緑) DBAL-A3 (зеленый) diff --git a/addons/laserpointer/stringtable.xml b/addons/laserpointer/stringtable.xml index 8eead72eca..b8d0a657d8 100644 --- a/addons/laserpointer/stringtable.xml +++ b/addons/laserpointer/stringtable.xml @@ -37,15 +37,15 @@ Laser Pointer (green) - Pointeur laser (vert) - Laserpointer (grün) + Pointeur laser (Vert) + Laserpointer (Grün) Лазерный прицел (зелёный) Laserové ukazovátko (Zelené) - Wskaźnik laserowy (zielony) + Wskaźnik laserowy (Zielony) Lézer-pointer (zöld) - Puntero láser (verde) - Puntatore laser (verde) - Laser (verde) + Puntero láser (Verde) + Puntatore laser (Verde) + Laser (Verde) レーザー ポインター (緑) 레이저 지시기 (초록) 激光指示器(绿色) diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index c67d3f70ad..6130f6aaf4 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -3077,7 +3077,7 @@ QBZ-95-1 (Green Hex) QBZ-95-1 (Hex Grün) QBZ-95-1 (Hex Verde) - QBZ-95-1 (zielony hex) + QBZ-95-1 (Zielony hex) QBZ-95-1 (Zelený Hex) QBZ-95-1 (Hex Vert) QBZ-95-1 (зелёный гекс) @@ -3128,7 +3128,7 @@ QBZ-95-1 GL (Green Hex) QBZ-95-1 GL (Hex Grün) QBZ-95-1 GL (Hex Verde) - QBZ-95-1 GL (zielony hex) + QBZ-95-1 GL (Zielony hex) QBZ-95-1 GL (Zelený Hex) QBZ-95-1 GL (Hex Vert) QBZ-95-1 GL (зелёный гекс) @@ -3179,7 +3179,7 @@ QBZ-95-1 LSW (Green Hex) QBZ-95-1 LSW (Hex Grün) QBZ-95-1 LSW (Hex Verde) - QBZ-95-1 LSW (zielony hex) + QBZ-95-1 LSW (Zielony hex) QBZ-95-1 LSW (Zelený Hex) QBZ-95-1 LSW (Hex Vert) QBZ-95-1 LSW (зелёный гекс) @@ -3230,7 +3230,7 @@ QBU-88 (Green Hex) QBU-88 (Hex Grün) QBU-88 (Hex Verde) - QBU-88 (zielony hex) + QBU-88 (Zielony hex) QBU-88 (Zelený Hex) QBU-88 (Hex Vert) QBU-88 (зелёный гекс) @@ -3536,7 +3536,7 @@ RPG-32 (Green Hex) RPG-32 (Hex Grün) RPG-32 (Hex Verde) - RPG-32 (zielony hex) + RPG-32 (Zielony hex) RPG-32 (Zelený Hex) RPG-32 (Hex Vert) RPG-32 (зелёный гекс) diff --git a/addons/smallarms/stringtable.xml b/addons/smallarms/stringtable.xml index c10248ca16..0b89a38b0d 100644 --- a/addons/smallarms/stringtable.xml +++ b/addons/smallarms/stringtable.xml @@ -33,13 +33,13 @@ .45 ACP 25Rnd Tracers (Green) Mag - 25-nab. mag. .45 ACP (zielony smugacz) + 25-nab. mag. .45 ACP (Zielony smugacz) Магазин, 25 патр. .45 ACP (зелёные трассеры) - Mag. 25 traçantes (vertes) .45 ACP - Cargador de 25 balas trazadoras (verde) de .45 ACP + Mag. 25 traçantes (Vertes) .45 ACP + Cargador de 25 balas trazadoras (Verde) de .45 ACP Caricatore 25cp .45 ACP Traccianti (Verdi) 25-Schuss-.45-ACP-Vermin-Magazin (Leuchtspur Grün) - .45 ACP, 25ks zásobník stopovky (zelené) + .45 ACP, 25ks zásobník stopovky (Zelené) .45 ACP 25 Merm. İzli (Yeşil) Şarjör .45 ACP 25Rnd トレーサー (緑) マガジン .45 ACP 25发 弹匣(曳光,绿) diff --git a/optionals/tracers/stringtable.xml b/optionals/tracers/stringtable.xml index 30b6b04d88..f4b1d5a750 100644 --- a/optionals/tracers/stringtable.xml +++ b/optionals/tracers/stringtable.xml @@ -8,7 +8,7 @@ Магазин 150 патр. 5.56 мм с послед. трас. (зелёные) 5.56 mm 150 colpi ricarica traccianti (verdi) caricatore 5.56 mm 150 ranný zásobník, stopovka pro přebití (Zelená) - Recarregar magazine de 150 balas tracejantes (verde) + Recarregar magazine de 150 balas tracejantes (Verde) 5.56 mm 150発入り 残通知 曳光弾 (緑) マガジン Cargador de 150 Cartuchos 5.56 mm Trazadora de recarga (Verde) 5.56mm 150발들이 재장전 알림 예광탄 (초록) 탄창 @@ -32,7 +32,7 @@ Магазин 150 патр. 5.56 мм трассирующих (зелёные) 5.56 mm 150 colpi traccianti (verdi) caricatore 5.56 mm 150 ranný zásobník, stopovka (Zelená) - Magazine 5.56mm Tracejante (verde) + Magazine 5.56mm Tracejante (Verde) 5.56 mm 150発入り 曳光弾 (緑) マガジン Cargador de 150 Cartuchos 5.56 mm Trazadora (Verde) 5.56mm 150발들이 예광탄 (초록) 탄창 @@ -80,7 +80,7 @@ Короб 200 патр. 5.56 мм с послед. трас. (зелёные) 5.56 mm 200colpi Ricarica traccianti (verdi) scatola 5.56 mm 200 ranný box, stopovka pro přebití (Zelená) - Recarregar Caixa 5.56mm 200 Balas tracejantes (verdes) + Recarregar Caixa 5.56mm 200 Balas tracejantes (Verdes) 5.56 mm 200発入り 残通知 曳光弾 (緑) ボックス Caja de 200 Cartuchos 5.56 mm Trazadora de recarga (Verde) 5.56mm 150발들이 예광탄 (노랑) 탄창 @@ -92,7 +92,7 @@ Короб 200 патр. 5.56 мм трассирующих (зелёные) 5.56 mm 200colpi Traccianti (verdi) Scatola 5.56 mm 200 ranný box, stopovka (Zelená) - Caixa 5.56mm 200 balas tracejantes (verdes) + Caixa 5.56mm 200 balas tracejantes (Verdes) 5.56 mm 200発入り 曳光弾 (緑) ボックス Caja de 200 Cartuchos 5.56 mm Trazadora (Verde) 5.56mm 200발들이 예광탄 (초록) 탄상자 @@ -260,7 +260,7 @@ Магазин 30 патр. 6.5 мм с послед. трас. (зелёные) 6.5mm 30Colpi Ricarica Traccianti(verdi) Caricatore 6.5 mm 30 ranný zásobník, stopovka pro přebití (Zelená) - Recarregar magazine 6.5mm 30 balas tracejantes (verde) + Recarregar magazine 6.5mm 30 balas tracejantes (Verde) 6.5 mm 30発入り 残通知 曳光弾 (緑) マガジン Cargador de 30 Cartuchos 6.5 mm Trazadora de recarga (Verde) 6.5mm 30발들이 재장전 알림 예광탄 (초록) 탄창 @@ -308,7 +308,7 @@ Магазин 30 патр. 6.5 мм трассирующих (зелёные) 6.5mm 30Colpi Traccianti (Verdi) Caricatore 6.5 mm 30 ranný zásobník, stopovka (Zelená) - Magazine 6.5mm 30 balas tracejantes (verde) + Magazine 6.5mm 30 balas tracejantes (Verde) 6.5 mm 30発入り 曳光弾 (緑) マガジン Cargador de 30 Cartuchos 6.5 mm Trazadora (Verde) 6.5mm 30발들이 예광탄 (초록) 탄창 @@ -352,11 +352,11 @@ 6.5mm 100Rnd Mixed Mag (Green) - 100 Schuss 6.5mm Magazin gemischt (grün) + 100 Schuss 6.5mm Magazin gemischt (Grün) Магазин 100 патр. 6.5 мм TE4 (зелёные) 6.5mm 100Colpi Misti Caricatore (verdi) 6.5 mm 100 ranný zásobník, částečná stopovka (Zelená) - Magazine 6.5mm 100 balas misturadas (verde) + Magazine 6.5mm 100 balas misturadas (Verde) 6.5 mm 100発入り 混合 (緑) マガジン Cargador de 100 cartuchos 6.5 mm Mezcla (Verde) 6.5mm 100발들이 혼합탄 (초록) 탄창 @@ -378,7 +378,7 @@ 6.5mm 100Rnd Mag Tracer (Green) 100 Schuss 6.5mm Magazin Leuchtspur (Grün) Магазин 100 патр. 6.5 мм трассирующих (зелёные) - 6.5mm 100Colpi Caricatore Tracciante (verde) + 6.5mm 100Colpi Caricatore Tracciante (Verde) 6.5 mm 100 ranný zásobník, stopovka (Zelená) Magazine 6.5mm 100 balas tracejantes 6.5 mm 100発入り (緑) マガジン @@ -496,7 +496,7 @@ 6.5 mm 200Rnd Belt Case Mixed (Green) - 6,5 mm 200-Schuss-Gurtkiste Gemischt (grün) + 6,5 mm 200-Schuss-Gurtkiste Gemischt (Grün) Короб 200 патр. 6.5 мм TE4 (зелёные) 6.5mm 200Colpi Caricatore esteso Misti (Verdi) 6.5 mm 200 ranný pás, částečná stopovka (Zelená) @@ -520,7 +520,7 @@ 6.5 mm 200Rnd Belt Case Mixed (Red) - 6,5 mm 200-Schuss-Gurtkiste Gemischt (grün) + 6,5 mm 200-Schuss-Gurtkiste Gemischt (Grün) Короб 200 патр. 6.5 мм TE4 (красные) 6.5 mm 200Colpi Caritore maggiorato Misti (rossi) 6.5 mm 200 ranný pás, částečná stopovka (Červená) @@ -544,7 +544,7 @@ 6.5 mm 200Rnd Belt Case Tracer (Green) - 6,5 mm 200-Schuss-Gurtkiste Leuchtspur (grün) + 6,5 mm 200-Schuss-Gurtkiste Leuchtspur (Grün) Короб 200 патр. 6.5 мм трассирующих (зелёные) 6.5 mm 200Colpi Caricatore maggiorato Traccianti (verdi) 6.5 mm 200 ranný pás, částečná stopovka (Zelená) @@ -600,7 +600,7 @@ 7.62 mm 20Colpi Traccianti (verdi) Caricatore 7.62 mm 20 ranný zásobník, stopovka (Zelená) 7.62 mm Magazynek 20szt. Smugowa (Zielona) - Magazine 7.62 mm 20 Balas Tracejantes (verdes) + Magazine 7.62 mm 20 Balas Tracejantes (Verdes) 7.62 mm 20発入り 曳光弾 (緑) マガジン Cargador de 20 cartuchos 7.62 mm Trazadora (Verde) 7.62mm 20발들이 예광탄 (초록) 탄창 @@ -764,7 +764,7 @@ .338 NM 130Rnd Belt Mixed (Green) - .338 NM 130 Schuss Gurt gemischt (grün) + .338 NM 130 Schuss Gurt gemischt (Grün) Лента 130 патр. .338 NM TE4 (зелёные) .338 NM 130Colpi Caricatore a nastro Misto (Verde) .338 NM 130 ranný pás, částečná stopovka (Zelená) From 8e367ee80eb378ae6d91d09ae68b0591e68f66b7 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sun, 5 May 2024 15:24:45 -0500 Subject: [PATCH 114/132] Prepare 3.17.1 Build 85 --- addons/main/script_version.hpp | 2 +- docs/_config.yml | 2 +- docs/_config_dev.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/main/script_version.hpp b/addons/main/script_version.hpp index 62b6d52e2e..9223f27ea7 100644 --- a/addons/main/script_version.hpp +++ b/addons/main/script_version.hpp @@ -1,4 +1,4 @@ #define MAJOR 3 #define MINOR 17 #define PATCHLVL 1 -#define BUILD 84 +#define BUILD 85 diff --git a/docs/_config.yml b/docs/_config.yml index e29663ce3b..c23538d799 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -10,7 +10,7 @@ ace: major: 3 minor: 17 patch: 1 - build: 84 + build: 85 markdown: kramdown diff --git a/docs/_config_dev.yml b/docs/_config_dev.yml index b6f160c7d3..e83f8e441f 100644 --- a/docs/_config_dev.yml +++ b/docs/_config_dev.yml @@ -10,7 +10,7 @@ ace: major: 3 minor: 17 patch: 1 - build: 84 + build: 85 markdown: kramdown From 62353a91752fc052c1ddd21f3e537fb2c1dfd2f0 Mon Sep 17 00:00:00 2001 From: Fabio Schick <58027418+mrschick@users.noreply.github.com> Date: Sat, 11 May 2024 03:34:34 +0200 Subject: [PATCH 115/132] Translations - Updated Italian with recent additions (#10004) * hearing italian translations * common italian translations --- addons/common/stringtable.xml | 3 +++ addons/hearing/stringtable.xml | 1 + 2 files changed, 4 insertions(+) diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index 1c960e9173..3bf4205292 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -1834,6 +1834,7 @@ 무기 흔들림 Oscillation de l'arme Колебание оружия + Oscillazione arma Enable Weapon Sway @@ -1841,6 +1842,7 @@ 무기 흔들림 추가 Activer l'oscillation de l'arme Включить колебание оружия + Abilita oscillazione arma Enables weapon sway influenced by sway factors, such as stance, fatigue and medical condition.\nDisabling this setting will defer sway to vanilla or other mods. @@ -1848,6 +1850,7 @@ 흔들림 계수, 자세, 피로도, 건강 상태 등의 요인에 영향을 받는 무기 흔들림을 활성화합니다.\n이 설정을 비활성화하면 바닐라 또는 다른 모드의 흔들림으로 대체됩니다. Active l'oscillation de l'arme influencé par les facteurs d'oscillation, tels que la position, la fatigue et l'état de santé.\nLa désactivation de ce paramètre reportera l'oscillation à vanilla ou à d'autres mods. Активируйте колебание оружия в зависимости от таких факторов, как стойка, усталость и состояние здоровья.\nОтключение этого параметра приведет к переносу раскачивания на vanilla или другие моды. + Abilita l'oscillazione ACE, influenzata da fattori come postura, fatica e condizione medica.\nDisabilitare questa impostazione farà controllare l'oscillazione al gioco vanilla o altre mod. Sway factor diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index 1265478639..fcdbecb2ff 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -376,6 +376,7 @@ Uniquement les unités dotées d'armes lourdes Только юниты с тяжелым вооружением 重火器を装備したユニットのみ + Solo a unità con armi pesanti From 2a3ff8e185855a11e3777e92af6e4d7a3a8bbb71 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Sat, 11 May 2024 03:39:41 +0200 Subject: [PATCH 116/132] Medical Treatment - Fix low SpO2 making units go into cardiac arrest again (#10003) * Set SpO2 after successful CPR * Update fnc_cprLocal.sqf * Add API * Update fnc_cprLocal.sqf --- addons/medical_treatment/functions/fnc_cprLocal.sqf | 7 ++++++- docs/wiki/framework/medical-treatment-framework.md | 7 +++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/addons/medical_treatment/functions/fnc_cprLocal.sqf b/addons/medical_treatment/functions/fnc_cprLocal.sqf index 228774b2f6..e6b1299027 100644 --- a/addons/medical_treatment/functions/fnc_cprLocal.sqf +++ b/addons/medical_treatment/functions/fnc_cprLocal.sqf @@ -24,9 +24,14 @@ TRACE_2("cprLocal",_medic,_patient); private _bloodVolume = GET_BLOOD_VOLUME(_patient); private _successChance = linearConversion [BLOOD_VOLUME_CLASS_4_HEMORRHAGE, BLOOD_VOLUME_CLASS_2_HEMORRHAGE, _bloodVolume, GVAR(cprSuccessChanceMin), GVAR(cprSuccessChanceMax), true]; if ((random 1) < _successChance) then { + // If SpO2 is too low, it will make HR skyrocket to the point where patient goes back into CA + // Allow 3rd party mods to disable this mechanic + if (missionNamespace getVariable [QGVAR(setSpO2UponCPRSuccess), true] && {GET_SPO2(_patient) < DEFAULT_SPO2 / 2}) then { + _patient setVariable [VAR_SPO2, DEFAULT_SPO2 / 2, true]; + }; + TRACE_2("CPR random success",_bloodVolume,_successChance); [QEGVAR(medical,CPRSucceeded), _patient] call CBA_fnc_localEvent; } else { TRACE_2("CPR random fail",_bloodVolume,_successChance); }; - diff --git a/docs/wiki/framework/medical-treatment-framework.md b/docs/wiki/framework/medical-treatment-framework.md index 736295804a..52e661a516 100644 --- a/docs/wiki/framework/medical-treatment-framework.md +++ b/docs/wiki/framework/medical-treatment-framework.md @@ -128,3 +128,10 @@ If a mission maker wishes to disable Zeus access to the medical menu, they can s ```sqf ace_medical_gui_enableZeusModule = false; // default is true ``` + +### 3.3 SpO2 Configuration + +If 3rd party mods want to disable SpO2 being set to a minimum upon successful CPR, they can set the variable below: +```sqf +ace_medical_treatment_setSpO2UponCPRSuccess = false; // default is true +``` From 6972f02bc4da32799d3e6056a4d0d81b1f7e38d3 Mon Sep 17 00:00:00 2001 From: Abogado <16608353+regiregi22@users.noreply.github.com> Date: Sat, 11 May 2024 03:42:55 +0200 Subject: [PATCH 117/132] Translation - Add Missing Spanish (#10001) Translation to Spanish Translation to Spanish --- addons/advanced_throwing/stringtable.xml | 2 + addons/ai/stringtable.xml | 2 + addons/arsenal/stringtable.xml | 12 +++ addons/ballistics/stringtable.xml | 7 ++ addons/captives/stringtable.xml | 2 + addons/cargo/stringtable.xml | 5 ++ addons/common/stringtable.xml | 7 ++ .../compat_cup_weapons_csw/stringtable.xml | 17 ++++ .../stringtable.xml | 9 ++ .../compat_ws_realisticnames/stringtable.xml | 31 +++++++ addons/cookoff/stringtable.xml | 1 + addons/dragging/stringtable.xml | 6 ++ addons/explosives/stringtable.xml | 4 + addons/fastroping/stringtable.xml | 2 + addons/fieldmanual/stringtable.xml | 86 +++++++++++++++++++ addons/hearing/stringtable.xml | 2 + addons/irlight/stringtable.xml | 14 +++ addons/killtracker/stringtable.xml | 3 + addons/laser/stringtable.xml | 2 + addons/maptools/stringtable.xml | 18 ++++ addons/markers/stringtable.xml | 2 + addons/medical_ai/stringtable.xml | 3 + addons/medical_damage/stringtable.xml | 2 + addons/medical_engine/stringtable.xml | 2 + addons/medical_gui/stringtable.xml | 31 +++++++ addons/medical_status/stringtable.xml | 2 + addons/medical_treatment/stringtable.xml | 17 ++++ addons/medical_vitals/stringtable.xml | 3 + addons/nightvision/stringtable.xml | 12 +++ addons/overheating/stringtable.xml | 6 ++ addons/refuel/stringtable.xml | 5 ++ addons/reload/stringtable.xml | 2 + addons/reloadlaunchers/stringtable.xml | 6 ++ addons/repair/stringtable.xml | 21 +++++ addons/tagging/stringtable.xml | 2 + addons/zeus/stringtable.xml | 4 + 36 files changed, 352 insertions(+) diff --git a/addons/advanced_throwing/stringtable.xml b/addons/advanced_throwing/stringtable.xml index 1e0b5ae23f..e0e526e12e 100644 --- a/addons/advanced_throwing/stringtable.xml +++ b/addons/advanced_throwing/stringtable.xml @@ -193,6 +193,7 @@ 바람 정보 임시로 표시 Afficher temporairement les informations sur le vent Временно показать информацию о ветре + Mostrar información del viento temporalmente Temporarily display Wind Info while throwing, to aid in placing smoke grenades effectively. @@ -202,6 +203,7 @@ 연막탄을 효과적으로 배치하는 데 도움이 되도록 투척하는 동안 일시적으로 바람 정보를 표시합니다. Affiche les informations sur le vent pendant le lancement pour placer les grenades fumigènes plus efficacement. Временно отображайте информацию о ветре во время броска, чтобы помочь эффективно разместить дымовые шашки. + Mostrar información del viento temporalmente mientras se lanza, para ayudar a lanzar las granadas de humo de forma efectiva. Prepare/Change Throwable diff --git a/addons/ai/stringtable.xml b/addons/ai/stringtable.xml index 11a686f6b2..b9df8bb35a 100644 --- a/addons/ai/stringtable.xml +++ b/addons/ai/stringtable.xml @@ -91,6 +91,7 @@ Equipar NVGs automaticamente 暗視装置の自動装備 Автоматическое оснащение ПНВ + Auto equipar gafas de visión nocturna Equips NVG in inventory during night time and unequips it during day time.\nDoes not add NVGs to inventory! @@ -102,6 +103,7 @@ Equipa o NVG do inventário durante a noite e desequipa durante o dia.\nNão adiciona NVGs ao inventário! インベントリ内の暗視装置を夜間に装備し、日中は解除し収納します。\nこれはNVGをインベントリに追加しません。 Экипирует ПНВ в ночное время и отключает его в дневное время.\nНе добавляет ПНВ в инвентарь! + Equipa las gafas de visión nocturna en el inventario cuando es de noche, y las desequipa cuando es de día.\nNo añade las gafas al inventario! diff --git a/addons/arsenal/stringtable.xml b/addons/arsenal/stringtable.xml index 02c35266db..25ce1f75ae 100644 --- a/addons/arsenal/stringtable.xml +++ b/addons/arsenal/stringtable.xml @@ -1245,6 +1245,7 @@ Интегрирован тепловизор. 열화상 내장 Thermique intégrée + Térmica integrada Thermal & Primary integrated @@ -1253,6 +1254,7 @@ Интегрирован тепловизор и осн.прицел. 열화상과 주무기 내장 Thermique et primaire intégrés + Térmica y Primaria integrada Not Supported @@ -1609,6 +1611,7 @@ Décroissant Decrescente Нисходящий + Descendiente Ascending @@ -1620,6 +1623,7 @@ Croissant Crescente Восходящий + Ascendiente Tools @@ -1647,6 +1651,7 @@ Nombre de munitions Quantidade de munição Количество боеприпасов + Cantidad de munición Illuminators @@ -1657,6 +1662,7 @@ Iluminadores イルミネーター Осветители + Iluminadores Default to Favorites @@ -1668,6 +1674,7 @@ Favoris par défaut Favoritos por padrão По умолчанию - Избранное + Favoritos por defecto Controls whether the ACE Arsenal defaults to showing all items or favorites. @@ -1679,6 +1686,7 @@ Contrôle si l'arsenal ACE affiche par défaut tous les éléments ou les favoris. Controla se o Arsenal ACE exibe por padrão todos os itens ou favoritos. Определяет, будет ли в арсенале ACE по умолчанию отображаться все предметы или избранное. + Controla si el Arsenal de ACE muestra por defecto todos los objetos o sólo los favoritos Favorites Color @@ -1690,6 +1698,7 @@ Couleurs favorites Cor dos favoritos Избранный цвет + Color de Favoritos Highlight color for favorited items. @@ -1701,6 +1710,7 @@ Met en surbrillance les éléments favoris. Cor de destaque para itens favoritados. Выделите цветом любимые предметы. + Color de marcado para los objetos favoritos Switch between displaying all items or your favorites.\nDouble click while holding Shift to add or remove an item. @@ -1712,6 +1722,7 @@ Change entre l'affichage de tous les éléments ou de vos favoris.\nDouble-cliquez en maintenant la touche Maj enfoncée pour ajouter ou supprimer un élément. Alterna entre a exibição de todos os itens ou seus favoritos.\nClique duas vezes enquanto mantém pressionada a tecla Shift para adicionar ou remover um item. Переключайтесь между отображением всех элементов или ваших избранных.\nДважды щелкните, удерживая Shift, чтобы добавить или удалить элемент. + Alterna entre mostrar todos los objetos o sólo los favoritos.\nDoble click mientras se pulsa Shift para añadir o quitar un objeto. Search\nCTRL + Click to enable live results @@ -1721,6 +1732,7 @@ 검색\nCtrl + 클릭으로 실시간 검색 결과를 활성화 Поиск\nCtrl + Click для включения результатов в реальном времени Recherche\nCTRL + clic pour modifier les résultats tout en écrivant + Buscar\nCTRL + Click habilita los objetos en directo diff --git a/addons/ballistics/stringtable.xml b/addons/ballistics/stringtable.xml index aa746e543f..a4c67c68d5 100644 --- a/addons/ballistics/stringtable.xml +++ b/addons/ballistics/stringtable.xml @@ -3540,6 +3540,7 @@ Utilisation de l'IA Utilização por IA Использование ИИ + Uso de la IA Illum @@ -3551,6 +3552,7 @@ Fusées éclairantes Sinalizadoras Осветители + Iluminación Smoke @@ -3562,6 +3564,7 @@ Fumigènes Fumígenas Дым + Humo Inf @@ -3573,6 +3576,7 @@ Infanterie Infantaria Пехота + Infantería Veh @@ -3584,6 +3588,7 @@ Véhicule Veículo Техника + Vehículo Armor @@ -3595,6 +3600,7 @@ Blindage Blindagem Бронетехника + Blindados Air @@ -3606,6 +3612,7 @@ Aviation Aeronaves Авиация + Aeronaves diff --git a/addons/captives/stringtable.xml b/addons/captives/stringtable.xml index 174022ea11..4fc86ec58f 100644 --- a/addons/captives/stringtable.xml +++ b/addons/captives/stringtable.xml @@ -146,6 +146,7 @@ 포로 눈 가리기 目隠しをする Завязать глаза пленному + Vendar ojos al prisionero Remove blindfold @@ -156,6 +157,7 @@ 눈가리개 풀기 目隠しを外す Снять повязку с глаз + Quitar vendas de los ojos Cable Tie diff --git a/addons/cargo/stringtable.xml b/addons/cargo/stringtable.xml index 0a766ab221..e74fd742c2 100644 --- a/addons/cargo/stringtable.xml +++ b/addons/cargo/stringtable.xml @@ -40,6 +40,7 @@ 配置する 배치하기 Déployer + Desplegar Raise/Lower | (Ctrl + Scroll) Rotate @@ -337,6 +338,7 @@ 荷降ろし不可能です 하역할 수가 없습니다 Не может быть выгружен + No puede ser descargado Cargo Size: %1 @@ -346,6 +348,7 @@ 貨物のサイズ: %1 화물 크기: %1 Размер груза: %1 + Tamaño de carga: %1 Custom Name @@ -584,6 +587,7 @@ 配置機能を有効化 배치 활성화 Permettre le placement + Habilitar despliegue Controls whether cargo items can be unloaded via the deploy method. @@ -592,6 +596,7 @@ 配置機能を介して貨物アイテムを降ろすことが出来るかどうかを制御します。 배치 방법을 통해 화물 아이템을 내릴 수 있는지 여부를 제어합니다. Contrôler si les éléments de cargaison peuvent être déchargés via la méthode de déploiement. + Controla si los objetos de la carga pueden ser descargados mediante el método de despliegue. diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index 3bf4205292..f49e2cedde 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -1834,6 +1834,7 @@ 무기 흔들림 Oscillation de l'arme Колебание оружия + Oscilación del arma Oscillazione arma @@ -1842,6 +1843,7 @@ 무기 흔들림 추가 Activer l'oscillation de l'arme Включить колебание оружия + Habilitar oscilación del arma Abilita oscillazione arma @@ -1850,6 +1852,7 @@ 흔들림 계수, 자세, 피로도, 건강 상태 등의 요인에 영향을 받는 무기 흔들림을 활성화합니다.\n이 설정을 비활성화하면 바닐라 또는 다른 모드의 흔들림으로 대체됩니다. Active l'oscillation de l'arme influencé par les facteurs d'oscillation, tels que la position, la fatigue et l'état de santé.\nLa désactivation de ce paramètre reportera l'oscillation à vanilla ou à d'autres mods. Активируйте колебание оружия в зависимости от таких факторов, как стойка, усталость и состояние здоровья.\nОтключение этого параметра приведет к переносу раскачивания на vanilla или другие моды. + Habilita la oscilación del arma afectado por factores como la postura, la fatiga y la condición médica.\nDeshabilitar esta opción hará que el comportamiento de la oscilación venga definido por Vanilla o por otros mods. Abilita l'oscillazione ACE, influenzata da fattori come postura, fatica e condizione medica.\nDisabilitare questa impostazione farà controllare l'oscillazione al gioco vanilla o altre mod. @@ -1891,6 +1894,7 @@ Fattore di Oscillazione Appoggiato 静止依託時の手ぶれ係数 Коэффициент колебания прицела в состоянии покоя + Factor de oscilación apoyado Influences the amount of weapon sway while weapon is rested. @@ -1901,6 +1905,7 @@ Determina la quantità di oscillazione dell'arma quando questa è appoggiata. 静止し壁などに依託している時の武器の手ぶれの大きさに影響します。 Влияет на величину колебания прицела оружия в состоянии покоя. + Afecta la cantidad de oscilación del arma cuando se está apoyado. Deployed sway factor @@ -1911,6 +1916,7 @@ Fattore di Oscillazione su Bipode 接地展開時の手ぶれ係数 Коэффициент колебания прицела при развертывании + Factor de oscilación desplegado Influences the amount of weapon sway while weapon is deployed. @@ -1921,6 +1927,7 @@ Determina la quantità di oscillazione dell'arma quando questa è stabilizzata usando il bipode. 武器の接地展開時の武器の手ぶれの大きさに影響します。 Влияет на величину колебания прицела оружия при его развертывании. + Afecta la cantidad de oscilación del arma cuando se está desplegado. diff --git a/addons/compat_cup_weapons/compat_cup_weapons_csw/stringtable.xml b/addons/compat_cup_weapons/compat_cup_weapons_csw/stringtable.xml index a23cf87af0..4ce86a2606 100644 --- a/addons/compat_cup_weapons/compat_cup_weapons_csw/stringtable.xml +++ b/addons/compat_cup_weapons/compat_cup_weapons_csw/stringtable.xml @@ -6,36 +6,42 @@ [CSW] AGS30 ベルト [CSW] Лента AGS 30 [CSW] AGS-30 벨트 + [CSW] Cinta de AGS30 [CSW] MK19 Belt [CSW] Mk19 ベルト [CSW] Лента Mk19 [CSW] Mk.19 벨트 + [CSW] Cinta de MK19 [CSW] TOW Tube [CSW] TOW チューブ [CSW] Туба TOW [CSW] TOW 튜브 + [CSW] Tubo de TOW [CSW] TOW2 Tube [CSW] TOW2 チューブ [CSW] Туба TOW-2 [CSW] TOW2 튜브 + [CSW] Tubo de TOW2 [CSW] PG-9 Round [CSW] PG-9 砲弾 [CSW] Снаряд ПГ-9 [CSW] PG-9 대전차고폭탄 + [CSW] Carga de PG-9 [CSW] OG-9 Round [CSW] OG-9 砲弾 [CSW] Снаряд OГ-9 [CSW] OG-9 고폭파편탄 + [CSW] Carga de OG-9 [CSW] M1 HE @@ -43,6 +49,7 @@ [CSW] M1 HE [CSW] M1 고폭탄 [CSW] M1 HE + [CSW] HE de M1 [CSW] M84 Smoke @@ -50,6 +57,7 @@ [CSW] M84 Дымовая [CSW] M84 연막탄 [CSW] M84 Fumigène + [CSW] Humo M84 [CSW] M60A2 WP @@ -57,6 +65,7 @@ [CSW] M60A2 WP [CSW] M60A2 백린연막탄 [CSW] M60A2 WP + [CSW] M60A2 WP [CSW] M67 AT Laser Guided @@ -64,6 +73,7 @@ [CSW] M67 AT Laser Guided [CSW] M67 레이저유도 대전차탄 [CSW] M67 AT Guidé laser + [CSW] AT Guiado por Láser M67 [CSW] M314 Illumination @@ -71,6 +81,7 @@ [CSW] M314 Осветительная [CSW] M314 조명탄 [CSW] M314 Illumination + [CSW] Iluminación M314 [CSW] 3OF56 HE @@ -78,6 +89,7 @@ [CSW] 3OF56 HE [CSW] 3OF56 고폭탄 [CSW] 3OF56 HE + [CSW] HE de 3OF56 [CSW] 3OF69M Laser Guided @@ -85,6 +97,7 @@ [CSW] 3OF69M Laser Guided [CSW] 3OF69M 레이저유도탄 [CSW] 3OF69M Guidé laser + [CSW] 3OF69M Guiado por Láser [CSW] 122mm WP @@ -92,6 +105,7 @@ [CSW] 122mm WP [CSW] 122mm 백린탄 [CSW] 122mm WP + [CSW] WP de 122mm [CSW] D-462 Smoke @@ -99,6 +113,7 @@ [CSW] D-462 Дымовая [CSW] D-462 연막탄 [CSW] D-462 Fumigène + [CSW] Humo D-462 [CSW] S-463 Illumination @@ -106,6 +121,7 @@ [CSW] S-463 Осветительная [CSW] S-463 조명탄 [CSW] S-463 Eclairante + [CSW] Iluminación S-463 [CSW] BK-6M HEAT @@ -113,6 +129,7 @@ [CSW] BK-6M HEAT [CSW] BK-6M 대전차고폭탄 [CSW] BK-6M HEAT + [CSW] BK-6M HEAT diff --git a/addons/compat_cup_weapons/compat_cup_weapons_nightvision/stringtable.xml b/addons/compat_cup_weapons/compat_cup_weapons_nightvision/stringtable.xml index 47d35eba8c..e3166d6f42 100644 --- a/addons/compat_cup_weapons/compat_cup_weapons_nightvision/stringtable.xml +++ b/addons/compat_cup_weapons/compat_cup_weapons_nightvision/stringtable.xml @@ -10,6 +10,7 @@ AN/PVS-14 (백색광) AN/PVS-14 (WP) AN/PVS-14 (БФ) + AN/PVS-14 (WP) AN/PVS-15 (Black, WP) @@ -20,6 +21,7 @@ AN/PVS-15 (검정, 백색광) AN/PVS-15 (Noires, WP) AN/PVS-15 (Чёрный, БФ) + AN/PVS-15 (Negras, WP) AN/PVS-15 (Green, WP) @@ -30,6 +32,7 @@ AN/PVS-15 (녹색, 백색광) AN/PVS-15 (Vertes, WP) AN/PVS-15 (Зелёный, БФ) + AN/PVS-15 (Verdes, WP) AN/PVS-15 (Tan, WP) @@ -40,6 +43,7 @@ AN/PVS-15 (황갈색, 백색광) AN/PVS-15 (Marron clair, WP) AN/PVS-15 (Желтовато-коричневый, БФ) + AN/PVS-15 (Marrones, WP) AN/PVS-15 (Winter, WP) @@ -47,6 +51,7 @@ AN/PVS-15 (설상, 백색광) AN/PVS-15 (Белый, БФ) AN/PVS-15 (Blanc, WP) + AN/PVS-15 (Blancas, WP) GPNVG (Black, WP) @@ -57,6 +62,7 @@ GPNVG (검정, 백색광) GPNVG (Noires, WP) GPNVG (Чёрный, БФ) + GPNVG (Negras, WP) GPNVG (Tan, WP) @@ -67,6 +73,7 @@ GPNVG (황갈색, 백색광) GPNVG (Marron clair, WP) GPNVG (Желтовато-коричневый, БФ) + GPNVG (Marrones, WP) GPNVG (Green, WP) @@ -77,6 +84,7 @@ GPNVG (녹색, 백색광) GPNVG (Vertes, WP) GPNVG (Зелёный, БФ) + GPNVG (Verdes, WP) GPNVG (Winter, WP) @@ -84,6 +92,7 @@ GPNVG (설상, 백색광) AN/PVS-15 (Белый, БФ) GPNVG (Blanc, WP) + GPNVG (Blancas, WP) diff --git a/addons/compat_ws/compat_ws_realisticnames/stringtable.xml b/addons/compat_ws/compat_ws_realisticnames/stringtable.xml index 092fd2a9ea..714f869d8d 100644 --- a/addons/compat_ws/compat_ws_realisticnames/stringtable.xml +++ b/addons/compat_ws/compat_ws_realisticnames/stringtable.xml @@ -9,6 +9,7 @@ AA12 AA12 AA12 + AA12 AA12 (Sand) @@ -18,6 +19,7 @@ AA12 (サンド) AA12 (Песочный) AA12 (Sable) + AA12 (Arena) AA12 (Snake) @@ -26,6 +28,7 @@ AA12 (Serpe) AA12 (ヘビ柄) AA12 (Змея) + AA12 (Serpiente) Galil ARM @@ -35,6 +38,7 @@ ガリル ARM Galil ARM Galil ARM + Galil ARM Galil ARM (Old) @@ -44,6 +48,7 @@ ガリル ARM (使い古し) Galil ARM (Старый) Galil ARM (Ancien) + Galil ARM (Vieja) GLX 160 @@ -53,6 +58,7 @@ GLX 160 GLX 160 GLX 160 + GLX 160 GLX 160 (Snake) @@ -61,6 +67,7 @@ GLX-160 (Serpe) GLX 160 (ヘビ柄) GLX 160 (Змея) + GLX 160 (Serpiente) GLX 160 (Hex) @@ -70,6 +77,7 @@ GLX 160 (六角形迷彩) GLX 160 (Гекс) GLX 160 (Hex) + GLX 160 (Hex) GLX 160 (Green Hex) @@ -79,6 +87,7 @@ GLX 160 (緑六角形迷彩) GLX 160 (Зеленый Гекс) GLX 160 (Vert Hex) + GLX 160 (Hex Verde) GLX 160 (Camo) @@ -88,6 +97,7 @@ GLX 160 (迷彩) GLX 160 (Камуфляж) GLX 160 (Camo) + GLX 160 (Camo) GLX 160 (Sand) @@ -97,6 +107,7 @@ GLX 160 (サンド) GLX 160 (Песочный) GLX 160 (Sable) + GLX 160 (Arena) Mk14 Mod 1 EBR (Black) @@ -106,6 +117,7 @@ Mk14 Mod 1 EBR (ブラック) Mk14 Mod 1 EBR (Черный) Mk14 Mod 1 EBR (Noir) + Mk14 Mod 1 EBR (Negra) Mk14 Mod 1 EBR (Snake) @@ -114,6 +126,7 @@ Mk14 Mod 1 EBR (Serpe) Mk14 Mod 1 EBR (ヘビ柄) Mk14 Mod 1 EBR (Змея) + Mk14 Mod 1 EBR (Serpiente) Vektor SS-77 @@ -122,6 +135,7 @@ ヴェクター SS-77 Vektor SS-77 Vektor SS-77 + Vektor SS-77 Vektor SS-77 (Camo) @@ -131,6 +145,7 @@ ヴェクター SS-77 (迷彩) Vektor SS-77 (Камуфляж) Vektor SS-77 (Camo) + Vektor SS-77 (Camo) Vektor SS-77 (Hex) @@ -140,6 +155,7 @@ ヴェクター SS-77 (六角形迷彩) Vektor SS-77 (гекс) Vektor SS-77 (Hex) + Vektor SS-77 (Hex) Vektor SS-77 (Green Hex) @@ -149,6 +165,7 @@ ヴェクター SS-77 (緑六角形迷彩) Vektor SS-77 (зеленый гекс) Vektor SS-77 (VertHex) + Vektor SS-77 (Hex Verde) Vektor SS-77 (Desert) @@ -158,6 +175,7 @@ ヴェクター SS-77 (砂漠迷彩) Vektor SS-77 (песочныйt) Vektor SS-77 (Désert) + Vektor SS-77 (Desierto) Vektor SS-77 Compact @@ -167,6 +185,7 @@ ヴェクター SS-77 コンパクト Vektor SS-77 Compact Vektor SS-77 Compacte + Vektor SS-77 Compacta Vektor SS-77 Compact (Snake) @@ -175,6 +194,7 @@ Vektor SS-77 Compatto (Serpe) ヴェクター SS-77 コンパクト (ヘビ柄) Vektor SS-77 Compact (змея) + Vektor SS-77 Compacta (Serpiente) FN FAL 50.00 (Wood) @@ -184,6 +204,7 @@ FN FAL 50.00 (森林迷彩) FN FAL 50.00 (лесной) FN FAL 50.00 (Bois) + FN FAL 50.00 (Madera) FN FAL 50.00 GL (Wood) @@ -193,6 +214,7 @@ FN FAL 50.00 GL (森林迷彩) FN FAL 50.00 GL (лесной) FN FAL 50.00 GL (Bois) + FN FAL 50.00 GL (Madera) FN FAL 50.00 @@ -202,6 +224,7 @@ FN FAL 50.00 FN FAL 50.00 FN FAL 50.00 + FN FAL 50.00 FN FAL 50.00 GL @@ -211,6 +234,7 @@ FN FAL 50.00 GL FN FAL 50.00 GL FN FAL 50.00 GL + FN FAL 50.00 GL FN FAL 50.00 (Desert) @@ -220,6 +244,7 @@ FN FAL 50.00 (砂漠迷彩) FN FAL 50.00 (песочный) FN FAL 50.00 (Désert) + FN FAL 50.00 (Desierto) FN FAL 50.00 (Jungle) @@ -229,6 +254,7 @@ FN FAL 50.00 (熱帯迷彩) FN FAL 50.00 (джунгли) FN FAL 50.00 (Jungle) + FN FAL 50.00 (Jungla) Vektor R4 @@ -238,6 +264,7 @@ ヴェクター R5 Vektor R4 Vektor R4 + Vektor R4 Vektor R5 Carbine @@ -247,6 +274,7 @@ ヴェクター R5 カービン Vektor R5 Carbine Vektor R5 Carbine + Vektor R5 Carabina Vektor R5 Carbine GL @@ -256,6 +284,7 @@ ヴェクター R5 カービン GL Vektor R5 Carbine GL Vektor R5 Carbine GL + Vektor R5 Carabina GL Vektor R5 Carbine (Snake) @@ -264,6 +293,7 @@ Vektor R5 Carabina (Serpe) ヴェクター R5 カービン (ヘビ柄) Vektor R5 Carbine (Змея) + Vektor R5 Carabina (Serpiente) Vektor R5 Carbine GL (Snake) @@ -272,6 +302,7 @@ Vektor R5 Carabina GL (Serpe) ヴェクター R5 カービン GL (ヘビ柄) Vektor R5 Carbine GL (Змея) + Vektor R5 Carabina GL (Serpiente) XMS diff --git a/addons/cookoff/stringtable.xml b/addons/cookoff/stringtable.xml index 5f764a24b7..49654d8435 100644 --- a/addons/cookoff/stringtable.xml +++ b/addons/cookoff/stringtable.xml @@ -189,6 +189,7 @@ Contrôle si les véhicules seront toujours détruits après l'auto-inflammation. Define se os veículos serão sempre destruídos após cozinhamento. Определяет, всегда ли транспортные средства будут уничтожаться после детонации. + Controla si los vehículos siempre será destruidos despues de la detonación inducida por calor. Enable Cook-Off Vehicle Fire diff --git a/addons/dragging/stringtable.xml b/addons/dragging/stringtable.xml index 9552f50273..c2f96ce55a 100644 --- a/addons/dragging/stringtable.xml +++ b/addons/dragging/stringtable.xml @@ -167,6 +167,7 @@ Autoriser la course avec des objets légers Permitir corrida com objetos leves Позволяет работать с легкими объектами + Permitir correr con objetos ligeros Allow the player to run when carrying lightweight objects. @@ -178,6 +179,7 @@ Autorise le joueur à courir lorsqu'il porte un objet léger. Permite ao jogador correr enquanto carrega objetos leves. Разрешите игроку бегать при переноске легких предметов. + Permite al jugador correr cuando porta objetos ligeros. Skip Object Weight @@ -189,6 +191,7 @@ Ignorer le poids de l'objet Ignorar Peso do Objeto Игнорировать вес объекта + Ignora peso del objeto Determines whether object's weight is added onto weight calculations. @@ -200,6 +203,7 @@ Défini si le poids d'un objet est ajouté aux calculs du poids. Determina se o peso do objeto é adicionado aos cálculos de peso. Определяет, добавляется ли вес объекта при расчете веса. + Determina si el peso del objeto es añadido en los cálculos de peso. Max Weight Coefficient @@ -210,6 +214,7 @@ Maximaler Gewichtskoeffizient 最大重量係数 Максимальный коэффициент веса + Máximo Coeficiente de Peso Modifies weight limit calculations. Set to 0 to ignore. @@ -220,6 +225,7 @@ Ändert die Berechnung der Gewichtsbegrenzung. Zum Ignorieren auf 0 setzen. 重量制限の計算を変更します。 無視するには 0 に設定します。 Изменяет расчеты предельного веса. Установите значение 0 для игнорирования. + Modifica el límite de peso de los cálculos. Poner a 0 para que lo ignore. diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml index fccc685c4f..168a830254 100644 --- a/addons/explosives/stringtable.xml +++ b/addons/explosives/stringtable.xml @@ -76,6 +76,7 @@ 選択した点火装置を全て起爆 활성화된 격발기의 모든 것을 폭파 Détoner tout sur le détonateur actif + Detonar Todos al Activar el detonador Set Active Clacker @@ -85,6 +86,7 @@ この点火装置を選択 격발기 활성 설정 Définir le détonateur actif + Establecer el Detonador Activo Cycle Active Clacker @@ -94,6 +96,7 @@ 点火装置を切り替え 격발기 활성 전환 Modifier le détonateur actif + Ciclar el Detonador Activo Active Clacker @@ -103,6 +106,7 @@ 選択中の点火装置 격발기 활성 Détonateur actif + Activar Detonador Explosive code: %1 diff --git a/addons/fastroping/stringtable.xml b/addons/fastroping/stringtable.xml index b68da23d28..10ea50a7c5 100644 --- a/addons/fastroping/stringtable.xml +++ b/addons/fastroping/stringtable.xml @@ -325,6 +325,7 @@ Equipement automatique FRIES Auto-equipar FRIES Авто-подготовка канатов + Auto-Equipar FRIES Automatically add FRIES to helicopters that support them. @@ -336,6 +337,7 @@ Ajoute automatiquement des FRIES aux hélicoptères qui les supportent. Adiciona automaticamente FRIES a helicópteros que os suportam. Автоматически добавляйте канаты в вертолеты, которые их поддерживают. + Añadir automáticamente el FRIES a los helicópteros que lo soporten. diff --git a/addons/fieldmanual/stringtable.xml b/addons/fieldmanual/stringtable.xml index 05c7414f17..98756c4910 100644 --- a/addons/fieldmanual/stringtable.xml +++ b/addons/fieldmanual/stringtable.xml @@ -28,6 +28,7 @@ 空腹 Голод Faim + Hambre %3Hunger%4 increases linearly with soldier's movement speed. Restore by eating food.<br/><br/>%3Usage:%4<br/>%2Pick up food.<br/>%2Use [%3%12%4] and select %3Survival%4.<br/>%2Choose an item to consume. @@ -39,6 +40,7 @@ %3空腹度%4は兵士の移動速度に比例して増加します。食べ物を食べることで回復します。<br/><br/>%3使用方法:%4<br/>%2食べ物を持つ。<br/>%2[%3%12%4] を使って%3サバイバル%4を選択。<br/>%2食べたいものを選ぶ。 %3Голод%4 линейно увеличивается со скоростью передвижения солдата. Восстанавливайтесь, употребляя пищу.<br/><br/>%3 Использование:%4<br/>%2Возьмите еду.<br/>%2Используйте [%3%12%4] и выберите %3Выживание% 4.<br/>%2Выберите продукт для потребления. %3La faim%4 augmente linéairement avec la vitesse de déplacement du soldat. Il se régénère en consommant de la nourriture.<br/><br/>%3Utilisation:%4<br/>%2Ramasser la nourriture.<br/>%2Utilisez [%3%12%4] et sélectionnez %3Survie%4.<br/>%2Choisissez un article à consommer. + El %3Hambre%4 aumenta linealmente con los movimientos del soldado. Se reestablece comiendo comida.<br/><br/>%3Uso:%4<br/>%2Coger comida.<br/>%2Usar [%3%12%4] y seleccionar %3Sobrevivir%4.<br/>%2Elegir un objeto para consumir. Thirst @@ -50,6 +52,7 @@ 渇き Жажда Soif + Sed %3Thirst%4 increases linearly with soldier's movement speed. Restore by drinking liquids.<br/><br/>%3Usage:%4<br/>%2Pick up a drink.<br/>%2Use [%3%12%4] and select %3Survival%4.<br/>%2Choose an item to consume. @@ -61,6 +64,7 @@ %3喉の渇き%4は兵士の移動速度に比例して増加します。飲み物を飲むことで回復します。<br/><br/>%3使用方法:%4<br/>%2飲み物を持つ。<br/>%2[%3%12%4] を使って%3サバイバル%4を選択。<br/>%2飲みたいものを選ぶ。 %3Жажда%4 линейно увеличивается со скоростью передвижения солдата. Восстанавливайтесь, употребляя напитки.<br/><br/>%3 Использование:%4<br/>%2Возьмите напиток.<br/>%2Используйте [%3%12%4] и выберите %3Выживание% 4.<br/>%2Выберите напиток для потребления. %3La soif%4 augmente linéairement avec la vitesse de déplacement du soldat. Elle se régénère en buvant des liquides.<br/><br/>%3Utilisez [%3%12%4] et choisissez %3survival%4.<br />%2Choisissez un article à boire. + La %3Sed%4 aumenta linealmente con la velocidad de movimiento del soldado. Se restaura bebiendo líquidos.<br/><br/>%3Uso:%4<br/>%2Selecciona una bebida.<br/>%2Usar [%3%12%4] y seleccionar %3Sobrevivir%4.<br/>%2Elegir un objeto para consumir. Medical Treatment @@ -72,6 +76,7 @@ 治療 Медицинское лечение Traitement médical + Tratamiento Médico Decrease Heart Rate @@ -83,6 +88,7 @@ 心拍数を下げる Уменьшить частоту сердечных сокращений Diminution de la fréquence cardiaque + Disminuir Ritmo Cardíaco %3Adenosine%4 is used to decrease heart rate.<br/><br/>%3Usage:%4<br/>%2Use [%3%13%4] or [%3%14%4] and select an appendage.<br/>%2Inject %3Adenosine%4. @@ -94,6 +100,7 @@ %3アデノシン%4は心拍数を下げるのに使われます。<br/><br/>%3使用方法:%4<br/>%2[%3%13%4] または [%3%14%4] を使って四肢を選択します。<br/>%2そして%3アデノシン%4を注射します。 %3Аденозин%4 используется для снижения частоты сердечных сокращений.<br/><br/>%3Применение:%4<br/>%2Используйте [%3%13%4] или [%3%14%4] и выберите конечность.<br/>%2Введите %3Аденозин%4. L'%3adénosine%4 est utilisée pour réduire la fréquence cardiaque.<br/><br/>%3Utilisation:%4<br/>%2Utilisez [%3%13%4] ou [%3%14%4] et sélectionnez un membre.<br/>%2Injectez l'%3Adénosine%4. + La %3Adenosina%4 se usa para disminuir el ritmo cardíaco.<br/><br/>%3Uso:%4<br/>%2Uso [%3%13%4] o [%3%14%4] y selecciona una extremidad.<br/>%2Inyectar %3Adenosina%4. Bandages @@ -105,6 +112,7 @@ 包帯 Бинты Pansements + Vendas Close Wounds @@ -116,6 +124,7 @@ 傷口をふさぐ Закрыть раны Fermer les plaies + Cerrar Heridas %3Bandages%4 stop bleeding and close wounds. Depending on your settings, bandages may reopen if surgery is not performed.<br/><br/>%2%3Field Dressing:%4<br/>%11<t color='#D9D900'>Average</t> In All Categories<br/>%2%3Packing Bandage:%4<br/>%11<t color='#D9D900'>Average</t> Treatment<br/>%11<t color='#E60000'>Higher</t> Reopen Chance<br/>%11<t color='#00CC00'>Longer</t> Reopen Delay<br/>%2%3Elastic Bandage:%4<br/>%11<t color='#00CC00'>Higher</t> Treatment<br/>%11<t color='#E60000'>Higher</t> Reopen Chance<br/>%11<t color='#E60000'>Shorter</t> Reopen Delay<br/>%2%3Quickclot:%4<br/>%11<t color='#E60000'>Lower</t> Treatment<br/>%11<t color='#00CC00'>Lower</t> Reopen Chance<br/>%11<t color='#00CC00'>Longer</t> Reopening Delay<br/><br/>%3Usage:%4<br/>%2Use [%3%13%4] or [%3%14%4] and select a injured body part.<br/>%2Bandage body part by selecting desired %3Bandage%4 type. @@ -125,6 +134,7 @@ %3Verbände%4 stoppen Blutungen und schließen Wunden. Abhängig von Ihren Einstellungen können sich Verbände wieder öffnen, wenn keine Operation durchgeführt wird.<br/><br/>%2%3Einfache Bandage:%4<br/>%11<t color='#D9D900'>Durchschnittlich</t> In allen Kategorien<br/>%2%3Mullbinde:%4<br/>%11<t color='#D9D900'>Durchschnittliche</t> Behandlung<br/>%11<t color='#E60000' >Höhere</t> Wiedereröffnungswahrscheinlichkeit<br/>%11<t color='#00CC00'>Längere</t> Wiedereröffnungsverzögerung<br/>%2%3Elastischer Verband:%4<br/>%11<t color='#00CC00'>Längere</t> Behandlung<br/>%11<t color='#E60000'>Höhere</t> Chance auf Wiedereröffnung<br/>%11<t color='#E60000'> Kürzere</t> Wiedereröffnungsverzögerung<br/>%2%3Quickclot:%4<br/>%11<t color='#E60000'>Kürzere</t> Behandlung<br/>%11<t color=' #00CC00'>Geringere</t> Wiedereröffnungswahrscheinlichkeit<br/>%11<t color='#00CC00'>Längere</t> Wiedereröffnungsverzögerung<br/><br/>%3Verwende:%4<br/> %2Verwenden Sie [%3%13%4] oder [%3%14%4] und wähle ein verletztes Körperteil aus.<br/>%2Verbinde ein Körperteil, indem der gewünschte %3Bandagen%4-Typ ausgewählt wurde. %3Bende%4 fermano emorragie e chiudono ferite. A seconda delle tue impostazioni, ferite bendate potrebbero riaprirsi se non suturate.<br/><br/>%2%3Bendaggio Basico:%4<br/>%11<t color='#D9D900'>Media</t> In tutte le categorie<br/>%2%3Bendaggio Compressivo:%4<br/>%11<t color='#D9D900'>Media</t> Trattamenti<br/>%11<t color='#E60000'>Alta</t> Probabilità di riapertura<br/>%11<t color='#00CC00'>Lungo</t> Tempo di riapertura<br/>%2%3Bendaggio Elastico:%4<br/>%11<t color='#00CC00'>Alto</t> Trattamento<br/>%11<t color='#E60000'>Alto</t> Probabilità di riapertura<br/>%11<t color='#E60000'>Breve</t> Tempo di riapertura<br/>%2%3Quickclot:%4<br/>%11<t color='#E60000'>Basso</t> Trattamento<br/>%11<t color='#00CC00'>Basso</t> Probabilità di riapertura<br/>%11<t color='#00CC00'>Lungo</t> Tempo di riapertura<br/><br/>%3Utilizzo:%4<br/>%2Usa [%3%13%4] o [%3%14%4] seleziona una parte del corpo ferita.<br/>%2Benda la parte del corpo ferita selezionando la %3Benda%4 desiderato. %3包帯%4は傷口をとじて出血を止めます。設定によっては、手術を行わないと包帯が解けて傷が再開放し出血が再開する場合があります。<br/><br/>%2%3緊急圧迫包帯:%4<br/>%11<t color='#D9D900'>平均的な</t> 全体性能を持っています<br/>%2%3弾性包帯:%4<br/>%11<t color='#D9D900'>平均的な</t> 治療効果<br/>%11<t color='#E60000'>高い</t> 再解放の可能性<br/>%11<t color='#00CC00'>長い</t> 再解放の再計算間隔<br/>%2%3伸縮包帯:%4<br/>%11<t color='#00CC00'>高い</t> 治療効果<br/>%11<t color='#E60000'>高い</t> 再解放の可能性<br/>%11<t color='#E60000'>短い</t> 再解放の再計算間隔<br/>%2%クイッククロット:%4<br/>%11<t color='#E60000'>低い</t> 治療効果<br/>%11<t color='#00CC00'>低い</t> 再解放の可能性<br/>%11<t color='#00CC00'>長い</t> 再解放の再計算間隔<br/><br/>%3使用方法:%4<br/>%2[%3%13%4] または [%3%14%4] を使って身体の負傷個所を選択します。<br/>%2希望の%3包帯%4の種類を選択して部位に包帯を巻きます。 + Las %3Vendas%4 paran el sangrado y cierran las heridas. Dependiendo de las opciones configuradas, las heridas pueden reabrirse si no se realiza cirugía.<br/><br/>%2%3Vendaje de campaña:%4<br/>%11<t color='#D9D900'>Medio</t> en todas las categorias<br/>%2%3Vendaje compresivo:%4<br/>%11<t color='#D9D900'>Medio</t> Tratamiento<br/>%11<t color='#E60000'>Alto</t> Probabilidad de Reapertura<br/>%11<t color='#00CC00'>Larga</t> Retardo en reapertura<br/>%2%3Vendaje elástico:%4<br/>%11<t color='#00CC00'>Alto</t> Tratamiento<br/>%11<t color='#E60000'>Alto</t> Probabilidad de reapertura<br/>%11<t color='#E60000'>Corto</t> Retardo en reapertura<br/>%2%3Quickclot:%4<br/>%11<t color='#E60000'>Bajo</t> Tratamiento<br/>%11<t color='#00CC00'>Bajo</t> Probabilidad de Reapertura<br/>%11<t color='#00CC00'>Larga</t> Retardo en reapertura<br/><br/>%3Uso:%4<br/>%2Uso [%3%13%4] o [%3%14%4] y selecciona una parte del cuerpo herida.<br/>%2Venda la parte del cuerpo seleccionada eligiendo el tipo de %3Venda%4. IV Fluids @@ -135,6 +145,7 @@ Fluidi EV IV 輸液 IV Fluides + Fluidos IV Restore Blood Volume @@ -146,6 +157,7 @@ 血液量を回復する Внутривенные жидкости Restaurer le volume sanguin + Reestablece el volumen de sangre %3IV fluids%4 restore lost blood volume. Blood, Plasma, and Saline are functionally the same.<br/><br/>%3Usage:%4<br/>%2Use [%3%13%4] or [%3%14%4] and select an appendage.<br/>%2Restore blood volume by selecting desired %3IV Fluid%4 type. @@ -156,6 +168,7 @@ %3Fluidi EV%4 ristorano volume di sangue perso. Sangue, Plasma, e Salina sono funzionalmente identiche.<br/><br/>%3Utilizzo:%4<br/>%2Usa [%3%13%4] o [%3%14%4] e seleziona un arto.<br/>%2Ristora il volume di sangue selezionando il tipo di %3Fluido EV%4 desiderato. %3IV 輸液%4は失われた血液を回復します。血液、血漿、生理食塩水は機能的には同じです。<br/><br/>%3使用方法:%4<br/>%2[%3%13%4] または [%3%14%4] を使って四肢を選択します。<br/>%2希望の%3IV 輸液%4の種類を選択して、血液量を復元します。 %%3Внутривенные жидкости%4восстанавливают потерянный объем крови. Кровь, плазма и физраствор функционально идентичны.<br/><br/>%3 Использование:%4<br/>%2 Используйте [%3%13%4] или [%3%14%4] и выберите добавку.<br/>%2 Восстановите объем крови выбрав желаемый %4тип %3жидкости + Los %3Fluidos IV%4 restauran el volumen de sangre. Sangre, Plasma, y Salino funcionan de manera similar.<br/><br/>%3Uso:%4<br/>%2Uso [%3%13%4] o [%3%14%4] y seleccionar una extremidad.<br/>%2Restaura el volumen de sangre seleccionando el tipo de %3Fluido IV%4 elegido. Increase Heart Rate | Wake Up Faster @@ -167,6 +180,7 @@ 心拍数を上げる | はやく起こす Увеличьте частоту сердечных сокращений | просыпайтесь быстрее Augmentation de la fréquence cardiaque - Réveil plus rapide + Incrementa el ritmo cardíaco | Despierta más rápido %3Epinephrine%4 increases a patient's pulse as well as potentially decreasing the time between consciousnesss checks (effectively reducing the time needed for the patient to wake up).<br/><br/>%3Usage%4<br/>%2Use [%3%13%4] or [%3%14%4] and select an appendage.<br/>%2Inject %3Epinephrine%4. @@ -176,6 +190,7 @@ %3Epinephrine%4 erhöht den Puls eines Patienten und verkürzt möglicherweise die Zeit zwischen Bewusstseinskontrollen (wodurch die Zeit, die der Patient zum Aufwachen benötigt, effektiv verkürzt wird).<br/><br/>%3Verwendung%4<br/>%2Verwende [%3%13%4] oder [%3%14%4] und wählen ein Körperteil aus.<br/>%2Injiziere %3Epinephrine%4. %3Epinefrina%4 aumenta il ritmo cardiaco di un paziente e riduce potenzialmente gli intervalli tra verifiche di coscienza (effettivamente riducendo il tempo necessario che questo paziente si svegli).<br/><br/>%3Utilizzo%4<br/>%2Usa [%3%13%4] o [%3%14%4] e seleziona un arto.<br/>%2Inietta %3Epinefrina%4. %3アドレナリン%4は、患者の脈拍を増加させるだけでなく、意識チェックの間隔を短縮する可能性があります。 (患者が目覚めるまでに必要な時間を効果的に短縮します)<br/><br/>%3使用方法%4<br/>%2[%3%13%4] または [%3%14%4] を使って四肢を選択します。<br/>%2%3アドレナリン%4を注射します。 + La %3Epinefrina%4 aumenta el pulso del paciente así como potencialmente disminuye el tiempo entre las comprobaciones sobre consciencia (reduciendo de manera efectiva el tiempo de despertar del paciente).<br/><br/>%3Uso%4<br/>%2Usa [%3%13%4] o [%3%14%4] y selecciona una extremidad.<br/>%2Inyecta %3Epinefrina%4. Restore Like New @@ -187,6 +202,7 @@ 生まれたてのように回復する Лечение тела Remettre comme neuf + Restaurar como nuevo The %3Personal Aid Kit%4 is an item that allows a soldier to be fully healed. Independent of %3ACE Settings%4, it requires that the patient is in %3Stable Condition%4 before use.<br/><br/>%3Stable Condition%4 qualifies as:<br/>%2Unit is %3Alive%4.<br/>%2Unit is %3Conscious%4.<br/>%2Unit has no active %3Bleeding%4.<br/>%2Heart Rate >= 40.<br/>%2Systolic BP >= 60.<br/>%2Diastolic BP >= 50.<br/><br/>%3Usage:%4<br/>%2Move to appropriate location depending on %3ACE Settings%4.<br/>%2Use [%3%13%4] or [%3%14%4] and select %3Advanced Treatments%4<br/>%2Select %3Use Personal Aid Kit%4. @@ -196,6 +212,7 @@ Das %3Persönliche Erste Hilfe Kit%4 ist ein Gegenstand, der es einem Soldaten ermöglicht, vollständig geheilt zu werden. Unabhängig von den %3ACE-Einstellungen%4 ist es erforderlich, dass sich der Patient vor der Verwendung in einem %3stabilen Zustand%4 befindet.<br/><br/>%3Stabiler Zustand%4 gilt wenn:<br/>%2Einheit ist %3am Leben%4 .<br/>%2Einheit ist %3Bei Bewusstsein%4.<br/>%2Einheit hat keine aktive %3Blutung%4.<br/>%2Herzfrequenz >= 40.<br/>%2Systolischer Blutdruck >= 60.< br/>%2Diastolischer Blutdruck >= 50.<br/><br/>%3Verwende:%4<br/>%2Bewege den Patienten je nach %3ACE-Einstellungen%4 an den entsprechenden Ort.<br/>%2Verwende [%3% 13%4] oder [%3%14%4] und wähle %3Erweiterte Behandlungen%4<br/>%2Wähle %3Persönliche Erste Hilfe Kit verwenden%4. Il %3Kit di Pronto Soccorso%4 è un oggetto che permette di curare completamente un soldato, indipendentemente da %3impostazioni ACE%4, richiede che il paziente sia in %3condizione stabile%4 prima dell'utilizzo.<br/><br/>%3Condizione stabile%4 significa:<br/>%2Paziente è %3Vivo%4.<br/>%2Paziente è %3Conscio%4.<br/>%2Paziente non sta %3Sanguinando%4.<br/>%2Ritmo cardiaco >= 40.<br/>%2Sistolico BC >= 60.<br/>%2Diastolico BC >= 50.<br/><br/>%3Utilizzo:%4<br/>%2Sposta in luogo specifico a seconda delle %3impostazioni ACE%4.<br/>%2Usa [%3%13%4] o [%3%14%4] e seleziona %3Trattamenti avanzati%4<br/>%2Seleziona %3Usa Kit di Pronto Soccorso%4. %3個人用治療キット%4は、兵士を完全に回復できるアイテムです。使用時には%3ACE 設定%4と関係なく、対象の患者が%3安定状態%4である必要があります。<br/><br/>%3安定状態%4とは次の状態です:<br/>%2ユニットが %3生存%4している。<br/>%2ユニットが %3覚醒状態%4である。<br/>%2ユニットが %3出血状態%4ではない。<br/>%2心拍数が40以上。<br/>%2収縮期血圧が60以上。<br/>%2拡張期血圧が50以上。<br/><br/>%3使用方法:%4<br/>%2%3ACE 設定%4で使用が許可された場所へ移動する。<br/>%2[%3%13%4] または [%3%14%4] を使って%3高度な治療%4を選択する。<br/>%2%3個人用治療キットを使う%4を選択して使用します。 + El %3Kit de Primeros Auxilios%4 es un objeto que permite al soldado ser curado totalmente. Independientemente de las %3Opciones de ACE%4, requiere que el paciente esté en %3Condición Estable%4 antes de usarse.<br/><br/>%3Condición Estable%4 significa que:<br/>%2La unidad está %3Viva%4.<br/>%2La unidad está %3Consciente%4.<br/>%2La unidad no está %3Sangrando%4.<br/>%2Ritmo Cardíaco >= 40.<br/>%2Presión Sistólica >= 60.<br/>%2Presión Diastólica >= 50.<br/><br/>%3Uso:%4<br/>%2Mover al lugar adecuado dependiendo de las%3Opciones de ACE%4.<br/>%2Uso [%3%13%4] o [%3%14%4] y seleccionar %3Tratamientos Avanzados%4<br/>%2Seleccionar %3Usar Kit de Primeros Auxilios%4. Fix Fractures @@ -207,6 +224,7 @@ 骨折を治す Исправлять переломы Réparation des fractures + Curar Fracturas A %3Splint%4 is used to fix fractures. The %3Splint%4 is consumed when used.<br/><br/>%3Usage:%4<br/>%2Use [%3%13%4] or [%3%14%4] and select an affected appendage.<br/>%2Select %3Apply Splint%4. @@ -216,6 +234,7 @@ Ein %3Splint%4 wird zur Fixierung von Frakturen verwendet. Der %3Splint%4 wird bei Verwendung verbraucht.<br/><br/>%3Verwendung:%4<br/>%2Verwende [%3%13%4] oder [%3%14%4] und wählen ein Körperteil aus.<br/>%2Wähle %3Schiene verwenden%4. Una %3Gessatura%4 è usata per risolvere fratture. La %3Gessatura%4 è consumata quando usata.<br/><br/>%3Utilizzo:%4<br/>%2Usa [%3%13%4] o [%3%14%4] e seleziona un arto afflitto.<br/>%2Seleziona %3Applica Gessatura%4. %3添え木%4は骨折の治療に使います。%3添え木%4は使用時に消費します。<br/><br/>%3使用方法:%4<br/>%2[%3%13%4] または [%3%14%4] を使って使用したい四肢を選択します。<br/>%2%3添え木を当てる%4を選択して使用します。 + La %3Férula%4 se utiliza para curar fracturas. La %3Férula%4 se consume cuando es usada.<br/><br/>%3Uso:%4<br/>%2Usar [%3%13%4] o [%3%14%4] y seleccionar la extremidad adecuada.<br/>%2Seleccionar %3Aaplicar Férula%4. Prevent Wounds From Reopening @@ -226,6 +245,7 @@ 傷口が開くのを防ぐ Предотвратить повторное открытие ран Empêcher la réouverture des plaies + Prevenir la reapertura de heridas A %3Surgical Kit%4 is used to prevent wounds from reopening after being bandaged. Depending on settings, it can also clear trauma and may require additional %3Sutures%4 to close wounds. Sutures are consumable, much like bandages, and are not a replacement for the Surgical Kit.<br/><br/>%3Usage:%4<br/>%2Use [%3%13%4] or [%3%14%4] and select %3Advanced Treatment%4.<br/>%2Select %3Use Surgical Kit%4. @@ -234,6 +254,7 @@ O %3Kit Cirúrgico%4 é utilizado para prevenir a reabertura de feridas após a aplicação de bandagens. A depender das configurações, ele também pode remover traumas e pode requerir %3Suturas%4 adicionais para fechar feridas. Suturas são consumíveis, tal como as bandagens, e não são substituem o Kit Cirúrgico.<br/><br/>%3Uso:%4<br/>%2Utilize [%3%13%4] ou [%3%14%4] e selecione %3Tratamento Avançado%4.<br/>%2Selecione %3Usar Kit Cirúrgico%4. Un %3Kit Chirurgico%4 è usato per impedire che ferite bendate si riaprano. A seconda delle impostazioni, può anche azzerare danni o potrebbe richiedere %3Suture%4 aggiuntive per chiudere ferite. Suture sono consumabili proprio come bende, non sono un sostituto per un Kit Chirurgico.<br/><br/>%3Utilizzo:%4<br/>%2Usa [%3%13%4] o [%3%14%4] e seleziona %3Trattamenti Avanzati%4.<br/>%2Seleziona %3Usa Kit Chirurgico%4. %3手術キット%4は包帯を巻いた傷口が再度開いて出血するのを防ぎます。設定によっては、負傷を取り除いたり、傷口を閉じるのに%3糸付縫合針%4を必要としたりします。糸付縫合針は消耗品で包帯のように使用され、手術キットを代替するものではありません。<br/><br/>%3使用方法:%4<br/>%2[%3%13%4] または [%3%14%4] を使って%3高度な治療%4を選択する。<br/>%2%3手術キット%4を選択して使用します。 + El %3Kit Quirúrgico%4 se usa para prevenir la reapertura de heridas despues de ser vendadas. Dependiendo de las opciones, tambien puede curar traumatismos y puede requerir %3Sutura%4 adicional para cerrar las heridas. Las Suturas son consumibles, al igual que las vendas, y no son un reemplazo para el Kit Quirúgico.<br/><br/>%3Uso:%4<br/>%2Usar [%3%13%4] o [%3%14%4] y seleccionar %3Tratamientos Avanzados%4.<br/>%2Seleccionar %3Usar Kit Quirúgico%4. Stop Bleeding @@ -244,6 +265,7 @@ 出血を止める Остановить кровотечение Arrêter les saignements + Parar Sangrado A %3Tourniquet%4 stops bleeding temporarily so that a wound(s) can be bandaged. Can only be used on limbs.<br/><br/>%3Usage:%4<br/>%2Use [%3%13%4] or [%3%14%4] and select an affected appendage.<br/>%2Select %3Apply Tourniquet%4. @@ -252,6 +274,7 @@ O %3Torniquete%4 interrompe o sangramento temporariamente, para que feridas possam ser enfaixadas. Seu uso é restrito aos membros.<br/><br/>%3Uso:%4<br/>%2Utilize [%3%13%4] ou [%3%14%4] e selecione um membro afetado.<br/>%2Selecione %3Aplicar Torniquete%4. Un %3Laccio Emostatico%4 ferma emorragie temporaneamente in modo da poter bendare ferite con calma. Utilizzabile su arti.<br/><br/>%3Utilizzo:%4<br/>%2Usa [%3%13%4] o [%3%14%4] e seleziona un arto afflitto.<br/>%2Seleziona %3Applica Laccio Emostatico%4. %3止血帯%4は一時的に出血を止め、その間に傷に包帯を巻くことができます。四肢にのみ使用できます。<br/><br/>%3使用方法:%4<br/>%2[%3%13%4] または [%3%14%4] を使って使用したい四肢を選択します。<br/>%2%3止血帯を巻く%4を選択して使用します。 + El %3Torniquete%4 para temporalmente el sangrado hasta que la herida sea vendada. Sólo puede ser usado en extremidades.<br/><br/>%3Uso:%4<br/>%2Usar [%3%13%4] o [%3%14%4] y seleccionar la extremidad afectada.<br/>%2Seleccionar %3Aplicar Torniquete%4. Medical Menu @@ -277,6 +300,7 @@ Tratamento, Simplificado 治療を簡略化する Traitement, simplifié + Tratamiento, Simplificado The %3Medical Menu%4 is a dedicated %3interface%4 to facilitate %3medical treatment%4. The %3R%4 and %3L%4 letters indicate the side of the patient's body being treated.<br/><br/>%3Usage:%4<br/>%2Use [%3%14%4] while looking at a patient to open the Medical Menu. Opening the menu without a patient allows for self-treatment.<br/>%2Alternatively, use [%3%12%4] or [%3%13%4] and select %3Medical Menu%4.<br/><br/>%3Keybinds:%4<br/>%2Use [%3W, A, S, D, X, and Z%4] to select body parts.<br/>%2Use your %3number keys%4 to select treatment categories. @@ -285,6 +309,7 @@ O %3Menu Médico%4 é uma %3interface%4 dedicada a facilitar o %3tratamento médico%4. As letras %3R%4 e %3L%4 indicam o lado do corpo do paciente que está recebendo o tratamento.<br/><br/>%3Uso:%4<br/>%2Utilize [%3%14%4] enquanto olha o paciente para abrir o Menu Médico. Se não houver paciente, o menu será de auto-tratamento.<br/>%2Alternativamente, utilize [%3%12%4] ou [%3%13%4] e selecione %3Menu Médico%4.<br/><br/>%3Atalhos de teclado:%4<br/>%2Utilize [%3W, A, S, D, X, e Z%4] para selecionar partes do corpo.<br/>%2Utilize as %3teclas numéricas%4 para selecionar as categorias de tratamento. Il %3Menù Medico%4 è un'%3interfaccia%4 dedicata a facilitare %3trattamenti medici%4. Le lettere %3Dx%4 e %3Sx%4 contrassegnano i lati del corpo del paziente che si stanno medicando.<br/><br/>%3Utilizzo:%4<br/>%2Usa [%3%14%4] guardando il paziente per aprire il Menù Medico. Aprire il menù senza paziente di fronte permette l'automedicazione.<br/>%2In alternativa, usa [%3%12%4] o [%3%13%4] e seleziona %3Menù Medico%4.<br/><br/>%3Comandi:%4<br/>%2Usa [%3W, A, S, D, X, and Z%4] per selezionare parti del corpo.<br/>%2Usa %3tasti numerici%4 per selezionare categorie di cure. %3医療メニュー%4は%3治療%4をしやすくするための専用%3インターフェース%4です。%3右%4と%3左%4の文字は治療を受ける患者の向きを表しています。<br/><br/>%3使用方法:%4<br/>%2[%3%14%4] を患者に視点を合わせながら押すことで患者の医療メニューを開けます。視点を合わせないで押すと、自分の医療メニューを開くことが出来ます。<br/>%2もしくは [%3%12%4] または [%3%13%4] を使って%3医療メニュー%4を選択します。<br/><br/>%3キーバインド:%4<br/>%2[%3W, A, S, D, X, と Zキー%4] を使って身体の部位を選択できます。<br/>%2%3数字キー%4を使って治療項目を選択できます。 + El %3Menú Médico%4 es una %3interfaz%4 dedicada para facilitar el %3tratamiento médico%4. Las letras %3R%4 and %3L%4 indican el lado del paciente siendo tratado.<br/><br/>%3Uso:%4<br/>%2Usar [%3%14%4] mientras se mira al paciente para abrir el Menú Médico. Abrir el menú sin mirar a un paciente permite el tratamiento a uno mismo. <br/>%2Alternativamente, usar [%3%12%4] o [%3%13%4] y seleccionar %3Menú Médico%4.<br/><br/>%3Teclas asociadas:%4<br/>%2Usar [%3W, A, S, D, X, and Z%4] para seleccionar las partes del cuerpo.<br/>%2Usar las %3teclas numéricas%4 para seleccionar las categorías de tratamiento. Portable, Precise, Rugged @@ -294,6 +319,7 @@ Leggero, Preciso, Robusto 高機動、高精度、高耐久 Portable, précis, robuste + Portable, Preciso, Robusto The %3Horus ATragMX%4 considers atmospheric conditions, gun data, ammunition, range, speed, and muzzle velocity to calculate precise aiming solutions with %3Come-Up%4 results - and even accounts for %3Coriolis%4 and %3Spin Drift%4 effects. %3ATragMX%4, loaded on a handheld computer made by %3TDS Recon%4, is easy to use and lightning fast. The %3Recon%4 meets the rigorous %3MIL-STD-810F%4 military standard for drops, vibration, humidity, altitude and extreme temperatures.<br/><br/>%3Usage:%4<br/>Please visit the wiki page for more information. @@ -302,6 +328,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. L'%3Horus ATragMX%4 tiene conto di condizioni atmosferiche, caratteristiche del fucile, munizioni, portata e velocità alla volata per calcolare precise impostazioni di mira con risultati %3Come-Up%4 - considerando anche effetti %3Coriolis%4 e %3Magnus%4. L'%3ATragMX%4, caricato su un computer portabile %3TDS Recon%4, è facile da usare e molto rapido nei calcoli. Il %3Recon%4 soddisfa i rigorosi standard militari %3MIL-STD-810F%4 per cadute, vibrazioni, umidità, altitudine e temperature estreme.<br/><br/>%3Utilizzo:%4<br/>Visitate la pagina wiki per ulteriori informazioni. %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 ページを参照してください。 + El %3Horus ATragMX%4 tiene en cuenta las condiciones atmosféricas, datos del arma, munición, distancia, velocidad y velocidad en boca para calcular con precisión soluciones de tiro precisas con %3Resultados%4 - e incluso tiene en cuenta los efectos %3Coriolis%4 y %3Movimiento Giroscópico%4. %3ATragMX%4, cargado en un ordenador portátil fabricado por %3TDS Recon%4, es facil de usar y muy rápido. El %3Recon%4 cumple con los rigurosos estándares militares %3MIL-STD-810F%4 en cuanto a caidas, vibraciones, humedad, altitud y temperaturas extremas.<br/><br/>%3Uso:%4<br/>Por favor, visita la página de la Wiki para más información. Bring Out Your Dead @@ -311,6 +338,7 @@ Recupera i tuoi morti 死者を連れ出す Récupérez vos morts + Trae de vuelta a los muertos %3Body Bags%4 are used to transport dead bodies. They can be dragged and loaded into vehicles.<br/><br/>%3Usage:%4<br/>%2Approach a dead body.<br/>%2Use [%3%13%4] or [%3%15%4] and select %3Place Body In Bodybag%4. @@ -319,6 +347,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. %3Sacche per cadaveri%4 sono usate per trasportare i morti. Possono essere trascinate e caricate su veicoli.<br/><br/>%3Utilizzo:%4<br/>%2Avvicinati ad un morto.<br/>%2Usa [%3%13%4] o [%3%15%4] e seleziona %3Metti il corpo nella sacca per cadaveri%4. %3遺体袋%4は、遺体の輸送に使用されます。引きずって車両に積み込むことができます。<br/><br/>%3使用方法:%4<br/>%2遺体に近寄る。<br/>%2[%3%13%4] または [%3%15%4] を使って%3遺体袋に入れる%4を選択して使用します。 + Las %3Bolsas para Cadáveres%4 se usan para transportar cadáveres. Pueden ser arrastradas y cargadas en vehículos. <br/><br/>%3Uso:%4<br/>%2Acercarse a un cadáver.<br/>%2Usar [%3%13%4] o [%3%15%4] y seleccionar %3Colocar cuerpo en la Bolsa para Cadáveres%4. Take Prisoners @@ -328,6 +357,7 @@ Prendi prigionieri 捕虜の捕り方 Faire des prisonniers + Tomar prisioneros %3Cable Ties%4 enable a soldier to capture and detain another soldier. Once apprehended, the captor gains the ability to inspect the prisoner's belongings, set them free, or accompany them to an alternate area. Transporting escorted prisoners is also possible, including loading them into vehicles if needed. Depending on your settings, units may need to surrender before being taken captive.<br/><br/>%3Usage:%4<br/>%2Approach the unit and use the [%3%13%4].<br/>%2The interaction is located around the hands in the form of a handcuffs icon.<br/>%2Repeat to release. @@ -336,6 +366,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. %3Fascette%4 permettono a soldati di catturare e ammanettare altri soldati. Una volta catturati è possibile ispezionare il loro inventario, liberarli o scortarli altrove. È inoltre possibile caricarli su veicoli se necessario. A seconda delle impostazioni, potrebbe essere necessaria la resa di unità prima di poterle ammanettare.<br/><br/>%3Uso:%4<br/>%2Avvicinati all'unità e usa [%3%13%4].<br/>%2L'interazione è localizzata intorno alle mani con l'icona di manette.<br/>%2Ripeti per liberare. %3ケーブル タイ%4は兵士が他の兵士を拘束できるようにします。一度拘束すれば、拘束者は捕虜の所持品を検査したり、釈放したり、別の場所に移送することができるようになります。必要に応じて車両に積み込むなどして捕虜の輸送や護送も可能です。設定によっては、ユニットは捕虜になる前に降伏する必要がある場合があります。<br/><br/>%3使用方法:%4<br/>%2対象に近づいて [%3%13%4] を使います。<br/>%2インタラクションは、手錠アイコンの形で手のあたりに表示されます。<br/>%2同様の方法で解放できます。 + Las %3Bridas%4 permiten a un soldado capturar y detener a otro soldado. Una vez atado, el capturador tiene la habilidad de inspeccionar las pertenencias del prisionero, liberarles de nuevo o transportarles a otro área diferente. Transportar prisioneros escoltados tambien es posible, incluído montarles en vehículos si es necesario. Dependiendo de las opciones, puede requerirse que las unidades se rindan antes de ser capturados.<br/><br/>%3Uso:%4<br/>%2Acercarse a la unidad y usar el [%3%13%4].<br/>%2El punto de interacción se situa sobre las manos en forma de un icono de unas esposas.<br/>%2Repetir el paso para liberar. Phone In An Explosion @@ -345,6 +376,7 @@ Cellulare per esplosivi 電話でドカン Explosifs téléphone portable + Teléfono explosivo The %3Cellphone%4 is functionally a %3Clacker%4. Use it to connect and detonate an explosive device. Multiple devices can be linked to the cellphone and called within the phonebook.<br/><br/>%3Usage:%4<br/>%2Place an explosive.<br/>%2Use [%3%13%4], select %3Explosives%4, and select %3Cellphone%4.<br/>%2Open the cellphone interface with [%3%12%4].<br/>%2Navigate the phone book with the arrows and select your calling number.<br/>%2Call the number to detonate. @@ -353,6 +385,7 @@ O %3Celular%4 serve como dispositivo de detonação ao explosivo. Utilize-o para conectar e detonar dispositivos explosivos. Múltiplos dispositivos podem estar conectados ao celular e aparecerão na lista telefônica.<br/><br/>%3Uso:%4<br/>%2Plante o explosivo.<br/>%2Utilize [%3%13%4], selecione %3Explosivos%4, e selecione %3Celular%4.<br/>%2Abra a interface do celular com [%3%12%4].<br/>%2Navegue pela lista telefônica utilizando as setas e selecione o número desejado.<br/>%2Ligue para o número para detonar. Il %3Cellulare%4 è essenzialmente una %3spoletta%4. Usalo per collegare e detonare esplosivi. Molteplici esplosivi possono essere collegati ad un cellulare e detonati chiamando numeri nella rubrica.<br/><br/>%3Utilizzo:%4<br/>%2Piazza un esplosivo.<br/>%2Usa [%3%13%4], seleziona %3Esplosivi%4, seleziona %3Cellulare%4.<br/>%2Apri l'interfaccia del telefono con [%3%12%4].<br/>%2Naviga la rubrica con le freccette e seleziona il numero da chiamare.<br/>%2Chiama il numero del dispositivo da detonare. %3携帯電話%4は%3点火装置%4として機能します。爆破装置を接続して起爆するために使用します。複数のデバイスを携帯電話に繋ぎ、電話帳から呼び出すことができます。<br/><br/>%3使用方法:%4<br/>%2爆発物を設置。<br/>%2[%3%13%4] を使い、%3爆発物%4を選択して、%3携帯電話%4を選択します。<br/>%2[%3%12%4] を使って携帯電話インターフェースを開きます。<br/>%2矢印ボタンで電話帳に移動し、発信番号を選択します。<br/>%2電話を掛けることで起爆します。 + El %3Teléfono%4 es funcionalmente un %3Detonador%4. Úsalo para conectarlo y detonar un dispositivo explosivo. Múltiples dispositivos pueden ser conectados al teléfono y llamados desde la agenda de contactos.<br/><br/>%3Uso:%4<br/>%2Colocar un explosivo.<br/>%2Usar [%3%13%4], seleccionar %3Explosivos%4, y seleccionar %3Teléfono%4.<br/>%2Abrir la interfaz del teléfono con [%3%12%4].<br/>%2Navegar por la agenda de contactos con las flechas y selecciona el número a llamar.<br/>%2Llamar al número para detonarlo. Portable Reading Lights @@ -362,6 +395,7 @@ Luci da Lettura Portabili 携帯読書灯 Lampes de lecture portables + Luces de Lectura Portátiles %3Chemlight Shields%4 give you the ability to read your map, even in dark environments. However, when using %3Chemlight Shields%4, you will have a slight glow around you.<br/><br/>%3Usage:%4<br/>%2Use [%3%12%4] and select %3Equipment%4.<br/>%2elect %3Chemlights%4 and %3Prepare Chemlight Shield (Color)%4.<br/>%2Open %3Map%4.<br/>%2Use [%3%12%4] and select %3Flashlights%4 where you will find your chemlight shield. @@ -370,6 +404,7 @@ Os %3Protetores de Bastão de Luz%4 possibilitam a leitura de mapas em ambientes escuros. Todavia, quando utilizados, eles iluminam parcialmente os seus arredores.<br/><br/>%3Uso:%4<br/>%2Utilize [%3%12%4] e selecione %3Equipamento%4.<br/>%2Selecione %3Bastões de Luz%4 e %Preparar Protetor de Bastão de Luz (Cor)%4.<br/>%2Abrir %3Mapa%4.<br/>%2Utilize [%3%12%4] e selecione %3Lanternas%4 onde você encontrará o seu bastão de luz. %3Scudi per Luci Chimiche%4 permettono di leggere la mappa anche in ambienti bui. Il loro utilizzo comporta però un leggero effetto di luminosità intorno alla testa del giocatore.<br/><br/>%3Utilizzo:%4<br/>%2Usa [%3%12%4] e seleziona %3Eqipaggiamenti%4.<br/>%2Seleziona %3Luce Chimica%4 e %3Prepara Scudo Luce Chimica (Colore)%4.<br/>%2Apri %3Mappa%4.<br/>%2Usa [%3%12%4] e seleziona %3Torcia%4 dove troverai il tuo scudo per luce chimica. %3ケミライト シールド%4を使用すると、暗い環境でも地図を読み取ることができます。ただし、%3ケミライト シールド%4を使用すると、周囲がわずかに光ります。<br/><br/>%3使用方法:%4<br/>%2[%3%12%4] を使って%3装備%4を選択します。<br/>%2%3ケミライト%4を選択し%3ケミライト シールドを使う (色)%4を選択します。<br/>%2%3マップ%4を開きます。<br/>%2[%3%12%4] を使って%3フラッシュライト%4を選択し、ケミライト シールドを選択します。 + Los %3Protectores de Luz Química%4 proveen la habilidad de poder leer mapas en entornos oscuros. No obstante, cuando se usan los, %3Protectores de Luz Química%4, tendrás un ligero brillo alrededor tuyo.<br/><br/>%3Uso:%4<br/>%2Usar [%3%12%4] y seleccionar %3Equipamiento%4.<br/>%2Seleccionar %3Luces químicas%4 y %3Preparar Protector de Luz Química (Color)%4.<br/>%2Abrir %3Mapa%4.<br/>%2Usar [%3%12%4] y seleccionar %3Linternas%4 donde encontrarás el protector de luz química. Remote Detonation @@ -379,6 +414,7 @@ Detonazione da remoto リモコン爆弾 Détonation à distance + Detonación Remota Use %3Clackers%4 to connect and detonate an explosive device. Multiple devices can be linked to a clacker and detonated on different channels.<br/><br/>%3Usage:%4<br/>%2Place an explosive.<br/>%2Use [%3%13%4], select %3Explosives%4, and select the %3Clacker%4 you wish to link to.<br/>%2Open the ACE interface with [%3%12%4].<br/>%2Select %3Explosives%4 and select a %3Clacker%4.<br/>%2Select the %3Explosive%4 you wish to detonate. @@ -386,6 +422,7 @@ %3격발기%4를 사용하여 폭발물을 연결하고 폭발시킬 수 있습니다. 여러 폭발물을 다른 채널에 연결하여 폭발시킬 수도 있습니다.<br/><br/>%3사용 방법:%4<br/>%2폭발물을 설치합니다.<br/>%2[%3%13%4]를 사용하여 %3폭발물%4을 선택하고 연결할 %3격발기%4를 선택하십시오.<br/>%2[%3%12%4] 키로 ACE 인터페이스를 여십시오.<br/>%2%3폭발물%4을 선택하고 %3격발기%4를 선택하십시오.<br/>%2%3폭발물%4을 선택하면 폭발합니다. Usa %3Spolette%4 per collegare e detonare dispositivi esplosivi. Molteplici dispositivi possono essere collagati a una spoletta e detonati individualmente come vari canali.<br/><br/>%3Utilizzo:%4<br/>%2Piazza esplosivo.<br/>%2Usa [%3%13%4], seleziona %3Esplosivo%4, seleziona la %3Spoletta%4 a cui intendi collegarlo.<br/>%2Apri l'interfaccia ACE con [%3%12%4].<br/>%2Seleziona %3Esplosivi%4 e scegli una %3Spoletta%4.<br/>%2Seleziona un %3Explosivo%4 da detonare. %3点火装置%4を爆破装置に接続し使用することで起爆することが出来ます。複数の爆破装置を接続しそれぞれ違うチャンネルから起爆することもできます。<br/><br/>%3使用方法:%4<br/>%2爆発物を設置。<br/>%2[%3%13%4] を使い、%3爆発物%4を選択して、接続したい%3点火装置%4を選択します。<br/>%2ACEインターフェースを [%3%12%4] で開きます。<br/>%2%3爆発物%4を選択し、%3点火装置%4を選びます。<br/>%2起爆したい%3爆破装置%4を選択します。 + Utiliza los %3Detonadores%4 para conectar y detonar un explosivo. Múltiple dispositivos pueden ser conectados a un detonador y detonados en diferentes canales.<br/><br/>%3Uso:%4<br/>%2 Coloca un explosivo.<br/>%2Usar [%3%13%4], seleccionar %3Explosivos%4, y selecciona el %3Detonador%4 al que quieres conectarlo.<br/>%2Abre la interfaz de ACE con [%3%12%4].<br/>%2Selecciona %3Explosivos%4 y selecciona un %3Detonador%4.<br/>%2Selecciona el %3Explosivo%4 que quieres detonar. Navigate @@ -395,6 +432,7 @@ 測位 Навигация Naviguer + Navegar The %3DAGR%4 is a simpler version of the %3MicroDAGR GPS%4. It has similar features but lacks the topographic and satellite imaging functions of the %3MicroDAGR GPS%4.<br/><br/>%3Usage:%4<br/>%2Equip a %3DAGR%4.<br/>%2Use [%3%12%4] and select %3Configure%4 or %3Toggle%4.<br/><br/>The following menus are available when configuring your %3DAGR:%4<br/>%11%2Data View: WIP<br/>%11%2GoTo WP: Select a waypoint to track.<br/>%11%2WP List: Add/Edit/Remove waypoints.<br/>%11%2Connect To: Connect %3DAGR%4 to the %3Vector 21 Rangefinder%4.<br/>%11%2Options @@ -402,6 +440,7 @@ %3DAGR%4은 %3마이크로DAGR GPS%4의 단순화 버전입니다. 유사한 기능을 가지고 있지만 %3마이크로DAGR GPS%4의 지형 및 위성 이미지 기능이 없습니다.<br/><br/>%3사용 방법:%4<br/>%2%3DAGR%4를 장착하십시오.<br/>%2[%3%12%4를 사용하고 %3DAGR 설정%4 또는 %3DAGR 토글%4을 선택하십시오.<br/><br/>%3DAGR%4을 구성할 때 다음 메뉴를 사용할 수 있습니다:<br/>%11%2Data View: 제작 중<br/>%11%2GoTo WP: 추적할 웨이포인트를 선택합니다.<br/>%11%2WP List: 경유지를 추가/편집/제거합니다.<br/>%11%2Connect To: %3DAGR%4을 %3벡터 21%4 거리계에 연동시킵니다.<br/>%11%2옵션입니다 Il %3DAGR%4 è una versione più semplice del %3GPS MicroDAGR%4. Ha funzioni simili, gli manca però la capacità di visualizzare informazioni topografiche e satellitari come il %3GPS MicroDAGR%4.<br/><br/>%3Utilizzo:%4<br/>%2Equipaggia il %3DAGR%4.<br/>%2Usa [%3%12%4] e seleziona %3Configura%4 o %3Apri%4.<br/><br/>I seguenti Menù sono disponibili durante la configurazione del tuo %3DAGR:%4<br/>%11%2Pagina Dati: WIP<br/>%11%2VaiA WP: Seleziona un waypoint da tracciare.<br/>%11%2Lista WP: Aggiungi/Modifica/Rimuovi waypoint.<br/>%11%2Collega A: Collega il %3DAGR%4 al %3Telemetro Vector 21%4.<br/>%11%2Opzioni %3DAGR%4はシンプルなバージョンの%3MicroDAGR GPS%4です。同様の機能を備えていますが、%3MicroDAGR GPS%4のような地形および衛星画像機能はありません。<br/><br/>%3使用方法:%4<br/>%2%3DAGR%4を装備する。<br/>%2[%3%12%4] を使って%3設定%4 もしくは %3表示切替%4を選択します。<br/><br/>%3DAGR%4の設定には次のメニューを使用できます:<br/>%11%2Data View: WIP<br/>%11%2GoTo WP: 追跡するウェイポイントを選択します。<br/>%11%2WP List: ウェイポイントを追加/編集/削除します。<br/>%11%2Connect To: %3DAGR%4を%3ベクター 21 レンジファインダー%4に接続できます。<br/>%11%2Options + El %3DAGR%4 es una versión simplificada del %3MicroDAGR GPS%4. Tiene unas funcionalidades similares pero le faltan las funciones de los mapas topográficos e imágenes satelitales del %3MicroDAGR GPS%4.<br/><br/>%3Usage:%4<br/>%2Equip a %3DAGR%4.<br/>%2Usar [%3%12%4] y seleccionar %3Configurar%4 o %3Activar%4.<br/><br/>Los siguientes menús están disponibles cuando configuras el %3DAGR:%4<br/>%11%2Vista de Datos: WIP<br/>%11%2Ir a WP: Selecciona un Punto de Ruta para seguir.<br/>%11%2Lista de WP: Añadir/Editar/Suprimir puntos de ruta.<br/>%11%2Conectar A: Conectar %3DAGR%4 a %3Telémetro Vector 21%4.<br/>%11%2Opciones Explosive Revenge @@ -411,6 +450,7 @@ 爆発的な復讐 Взрывная месть Homme mort + Venganza Explosiva The %3Dead Man's Switch%4 is a device that allows a soldier to detonate an %3Explosive%4 when the soldier dies.<br/><br/>%3Usage:%4<br/>%2Use [%3%12%4] and select %3Explosives%4.<br/>%2Select %3Dead Man's Switch%4 and connect the desired %3Explosive%4.<br/>%2Repeat the process and disconnect to reverse. @@ -418,6 +458,7 @@ %3자폭 장치%4는 병사가 사망했을 때 병사가 %3폭발물%4을 폭발시킬 수 있는 장치입니다.<br/><br/>%3사용 방법:%4<br/>%2[%3%12%4]를 사용하고 %3폭발물%4을 선택하십시오.<br/>%2%3자폭 장치%4를 선택하고 원하는 %3폭발물%4에 연결하십시오.<br/>%2반대로 해제하고 싶다면 같은 행동을 반복하십시오. Il %3Detonatore a rilascio%4 è un dispositivo che permette a soldati di detonare un %3Esplosivo%4 quando perdono i sensi.<br/><br/>%3Utilizzo:%4<br/>%2Usa [%3%12%4] e seleziona %3Esplosivi%4.<br/>%2Seleziona %3Detonatore a rilascio%4 e collega l'%3Esplosivo%4 desiderato.<br/>%2Ripeti il processo e scollega per disarmare il detonatore. %3自爆装置%4は、兵士の死亡時に%3爆発物%4を起爆させることができる装置です。<br/><br/>%3使用方法:%4<br/>%2[%3%12%4] を使って%3爆発物%4を選択します。<br/>%2%3自爆装置%4を選択し、接続したい%3爆発物%4を選びます。<br/>%2同様の手順を逆に行うことで接続を解除できます。 + El %3Detonador de Hombre Muerto%4 es un dispositivo que permite a un soldado detonar un %3Explosivo%4 cuando el soldado muere.<br/><br/>%3Uso:%4<br/>%2Usar [%3%12%4] y seleccionar %3Explosivos%4.<br/>%2Seleccionar %3Detonador de Hombre Muerto%4 y conectar el %3Explosivo%4.<br/> deseado%2Repetir el proceso y desconectar para revertirlo. The %3Defusal Kit%4 allows defusal of explosives.<br/><br/>%3Usage:%4<br/>%2Equip a %3Defusal Kit%4.<br/>%2Safely approach an %3Explosive%4.<br/>%2Use [%3%13%4] and select %3Defuse%4. @@ -425,6 +466,7 @@ %3해체 장비%4를 사용하면 폭발물을 제거할 수 있습니다.<br/><br/>%3사용 방법:%4<br/>%2%3해체 장비%4를 장착하십시오.<br/>%2%3폭발물%4에 안전하게 접근하십시오.<br/>%2[%3%13%4]를 사용하고 %3해체%4를 선택하십시오. The %3Kit E.O.D.%4 permette il disinnesco di esplosivi.<br/><br/>%3Utilizzo:%4<br/>%2Equipaggia un %3Kit E.O.D.%4.<br/>%2Avvicinati in modo sicuro ad un %3Esplosivo%4.<br/>%2Usa [%3%13%4] e seleziona %3Disinnesca%4. %3解除キット%4は爆発物の無力化を行うことができます。<br/><br/>%3使用方法:%4<br/>%2%3解除キット%4を装備。<br/>%2慎重に%3爆発物%4に接近します。<br/>%2[%3%13%4] を使って%3無力化%4を選択します。 + El %3Kit de Desactivación%4 permite la desactivación de explosivos.<br/><br/>%3Uso:%4<br/>%2Equipa un %3Kit de Desactivación%4.<br/>%2Aproxímate al %3Explosivo%4<br/> de forma segura.%2Usa [%3%13%4] y selecciona %3Desactivar%4. Defuse Explosives @@ -434,6 +476,7 @@ 爆発物の解除 Обезвреживание взрывчатки Désamorcer les explosifs + Desactivar Explosivos Protect Your Hearing @@ -443,6 +486,7 @@ 聴覚の保護 Защитите свой слух Protéger votre audition + Protege tus oídos %3Ear Plugs%4 help prevent hearing damage from repeat loud noises near a soldier. Insert %3Ear Plugs%4 to lower volume of a soldier's environment and prevent %3Combat Deafness%4.<br/><br/>%3Usage:%4<br/>%2Use [%3%12%4] and select %3Equipment%4.<br/>%2Insert %3Ear Plugs%4. @@ -450,6 +494,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. %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ことで使用できます。 + Los %3Tapones de oídos%4 ayudan a prevenir el daño auditivo de ruidos altos repetidos cerca de un soldado. Inserta los %3Tapones de oídos%4 para reducir el volumen del entorno del soldado y prevenir la %3Sordera de Combate%4.<br/><br/>%3Uso:%4<br/>%2Usar [%3%12%4] y seleccionar %3Equipamiento%4.<br/>%2Insertar %3Tapones de oídos%4. Get To Cover @@ -459,6 +504,7 @@ 遮蔽を造り出す Добраться до укрытия Se mettre à couvert + Ponerse A Cubierto 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. @@ -466,6 +512,7 @@ La %3Pala da Trincea%4 permette a soldati di scavare trincee per difendere meglio la loro posizione. Il soldato deve trovarsi su suolo scavabile per poter creare trincee.<br/><br/>%3Utilizzo:%4<br/>%2Equipaggia una %3Pala da Trincea%4.<br/>%2Usa [%3%12%4] e seleziona %3Equipaggiamento%4.<br/>%2Seleziona il tipo di trincea che vuoi costruire. %3야전삽%4을 사용하면 병사들의 진지 방어를 위한 참호를 팔 수 있습니다. 병사가 참호를 파려면 흙 위에 있어야 합니다.<br/><br/>%3사용 방법:%4<br/>%2%3야전삽%4을 장비하십시오.<br/>%2[%3%12%4]를 사용하여 %3장비%4를 선택하십시오.<br/>%2짓고 싶은 종류의 참호를 선택하십시오. %3塹壕ツール%4を使用すると、兵士は自分の陣地を守るために塹壕を掘ることができます。塹壕を掘るには、兵士は土の上にいる必要があります。<br/><br/>%3使用方法:%4<br/>%2%3塹壕ツール%4を装備します。<br/>%2[%3%12%4] を使って%3装備%4を選択します。<br/>%2構築する塹壕の種類を選択します。 + La %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. Flashlights @@ -475,6 +522,7 @@ フラッシュライト Фонари Lampes de poche + Linternas Illuminate Your Map @@ -484,6 +532,7 @@ 地図に光あれ Осветите свою карту Éclairer votre carte + Ilumina Tu Mapa %3Flashlights%4 give you the ability to read your map, even in dark environments. However, when using %3Flashlights%4, you will have a slight glow around you.<br/><br/>%3Usage:%4<br/>%2On the map screen, use [%3%12%4] and select %3Flashlights%4.<br/>%2Select the %3Flashlight%4 you want to use and select %3On%4.<br/><br/>%3Available Flashlight Items%4:<br/>%2 Fulton MX-991<br/>%2 KSF-1<br/>%2 Maglite XL50<br/><br/>%3NOTE:%4<br/>Flashlight states are persistent. @@ -491,6 +540,7 @@ %3Torce%4 permettono di leggere la tua mappa anche in ambienti bui. Però quando le utilizzi avrai un leggero effetto luminoso intorno a te.<br/><br/>%3Utilizzo:%4<br/>%2Sulla mappa usa [%3%12%4] e seleziona %3Torcia%4.<br/>%2Seleziona la %3Torcia%4 che vuoi usare e seleziona %3Accendi%4.<br/><br/>%3Oggetti Torcia Disponibili%4:<br/>%2 Fulton MX-991<br/>%2 KSF-1<br/>%2 Maglite XL50<br/><br/>%3NOTE:%4<br/>Lo stato di una torcia è persistente. %3손전등%4은 어두운 환경에서도 지도를 읽을 수 있는 기능을 제공합니다. 단, %3손전등%4을 사용할 때 주변에 약간 빛이 납니다.<br/><br/>%3사용 방법:%4<br/>%2지도 화면에서 [%3%12%4]를 사용하고 %3손전등%4을 선택하십시오.<br/>%2사용할 %3손전등%4을 선택하고 %3켜기%4를 선택하십시오.<br/><br/>%3사용 가능한 손전등 아이템%4:<br/>%2풀턴 MX-991<br/>%2 KSF-1<br/>%2 매그라이트 XL50<br/><br/>%3참고:%4<br/>손전등 상태는 영구적입니다. %3フラッシュライト%4を使用すると、暗い環境でも地図を読むことができます。ただし、%3フラッシュライト%4を使用すると、周囲がわずかに光ります。<br/><br/>%3使用方法:%4<br/>%2マップ画面で [%3%12%4] を使用し、%3フラッシュライト%4を選択します。<br/>%2%3フラッシュライト%4を選択し、使用したいライトを%3点ける%4。<br/><br/>%3使用可能なフラッシュライトのアイテム%4:<br/>%2 フルトン MX-991<br/>%2 KSF-1<br/>%2 マグライト XL50<br/><br/>%3備考:%4<br/>フラッシュライトの状態は継続します。 + Las %3Linternas%4 proveen la habilidad para leer tu mapa, incluso en entornos oscuros. No obstante, cuando se usen las %3Linternas%4, aparecerá un ligero brillo alrededor tuya.<br/><br/>%3Uso:%4<br/>%2En la pantalla del mapa, utilizar [%3%12%4] y seleccionar %3Linternas%4.<br/>%2Seleccionar la %3Linterna%4 Que quieres utilizar y selecciona %3On%4.<br/><br/>%3Objetos de Linternas disponibles%4:<br/>%2 Fulton MX-991<br/>%2 KSF-1<br/>%2 Maglite XL50<br/><br/>%3NOTA:%4<br/>Los estados de las Linternas son persistentes. Observe From The Skies @@ -500,6 +550,7 @@ 空から戦場を見てみよう Наблюдайте с Небес Observer depuis le ciel + Observar Desde El Cielo The %3High-Altitude Unit Navigated Tactical Imaging Round (HuntIR)%4 is designed to be fired from a grenade launcher. After being fired in the air, the built-in parachute will be deployed and the IR CMOS camera will activate, providing a video stream until it touches the ground or is shot down.<br/><br/>%3Usage:%4<br/>%2Equip a %3HuntIR Monitor%4 and compatible ammunition.<br/>%2Fire the %3HuntIR Round%4 as high as possible over the area you want to observe.<br/>%2Open the %3HuntIR Monitor%4.<br/>%2Use [%3%12%4], select %3Equipment%4.<br/>%2Select %3Activate HuntIR Monitor%4. @@ -507,6 +558,7 @@ Il %3High-Altitude Unit Navigated Tactical Imaging Round (HuntIR)%4 è progettato per essere sparato da un lanciagranate. Dopo essere stato sparato verso l'alto, verrà aperto un paracadute incorporato e attivata una videocamera IR CMOS, inviando una diretta video finché toccherà terra o verrà abbattuto.<br/><br/>%3Utilizzo:%4<br/>%2Equipaggia un %3Monitor HuntIR%4 e munizioni compatibili.<br/>%2Spara un %3Colpo HuntIR%4 il più alto possibile sopra l'area che vuoi osservare.<br/>%2Apri il %3Monitor HuntIR%4.<br/>%2Usa [%3%12%4], seleziona %3Equipaggiamento%4.<br/>%2Seleziona %3Attiva Monitor HuntIR%4. %3고고도 유닛 탐색용 전술 영상화 탄약 (HuntIR)%4은 유탄발사기에서 발사될 수 있도록 설계되었습니다.공주에서 발사된 후 내장된 낙하산이 전개되고 적외선 CMOS 카메라가 작동하여 지상에 닿거나 격추될 때까지 비디오 스트림이 제공됩니다.<br/><br/>%3사용 방법:%4<br/>%2%3헌트IR 모니터%4와 호환 탄약을 장착하십시오.<br/>%2%3헌트IR 유탄%4을 발사하려는 구역에서 가능한 한 높게 발사하십시오.<br/>%2%3헌트IR 모니터%4를 여십시오.<br/>%2[%3%12%4]를 사용하여 %3장비%4를 선택하십시오.<br/>%2%3헌트IR 모니터 활성화%4를 선택하십시오. %3High-Altitude Unit Navigated Tactical Imaging Round (HuntIR)%4はグレネードランチャーから発射されるように設計されています。空中で発射された後、内蔵のパラシュートが展開され、IR CMOS カメラが起動し、地面に着くか撃墜されるまでビデオ ストリームを提供します。<br/><br/>%3使用方法:%4<br/>%2%3HuntIR モニター%4と互換性のある弾薬を装備します。<br/>%2観測したいエリアに向けてできるだけ高く%3HuntIR 弾頭%4を発射します。<br/>%2%3HuntIR モニター%4を開きます。<br/>%2[%3%12%4] を使って%3装備%4を選択します。<br/>%2%3HuntIRを起動する%4からモニターを起動します。 + El %3High-Altitude Unit Navigated Tactical Imaging Round (HuntIR)%4 está diseñado para ser disparado desde un lanzagranadas. Despues de ser disparada al aire, desplegará su paracaídas integrado y activará su cámara IR CMOS integrada, proveyendo de un flujo de video hasta que toque el suelo o sea derribado.<br/><br/>%3Uso:%4<br/>%2Equipa un %3Monitor HuntIR%4 y la munición compatible.<br/>%2Dispara la %3Munición HuntIR%4 tan alto como sea posible sobre el área que quieres observar.<br/>%2Abre el %3Monitor HuntIR%4.<br/>%2Usar [%3%12%4], seleccionar %3Equipamiento%4.<br/>%2Seleccionar %3Activar Monitor HuntIR%4. Track Your Team With Stealth @@ -516,6 +568,7 @@ 自分の部隊を追う Следите за своей командой незаметно Suivez votre équipe en toute discrétion + Sigue A Tu Equipo Con Sigilo The %3IR Strobe%4 is a throwable that emits an IR light pulse intermittently. The %3IR Strobe%4 can also be attached to a soldier, making it useful for tracking teammates under night vision devices.<br/><br/>%3Usage:%4<br/>%2Use [%3%12%4] and select %3Equipment%4.<br/>%2Select %3Attach%4 and select the %3IR Strobe%4. @@ -523,6 +576,7 @@ La %3Strobo IR%4 è un lanciabile che emette un impulso intermittente di luce IR. La %3Strobo IR%4 può anche essere attaccata ad un soldato, facilitando l'identificazione di alleati con visori notturni.<br/><br/>%3Utilizzo:%4<br/>%2Usa [%3%12%4] e seleziona %3Equipaggiamento%4.<br/>%2Seleziona %3Attacca%4 e scegli la %3Strobo IR%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を選び使用します。 + El %3Estroboscópico IR%4 es un objeto lanzable que emite un pulso intermitente de luz IR. El %3Estroboscópico IR%4 tambien puede ser sujeto a un soldado, haciéndolo útil para el seguimiento de los compañeros utilizando gafas de visión nocturna.<br/><br/>%3Uso:%4<br/>%2Usar [%3%12%4] y seleccionar %3Equipamiento%4.<br/>%2Seleccionar %3Sujetar%4 y seleccionar el %3Estroboscópico IR%4. Pocket Weatherstation @@ -532,6 +586,7 @@ 携帯気象予報所 Карманная метеостанция Station météo de poche + Estación Climática de Bolsillo The %3Kestrel 4500 Pocket Weather Tracker%4 is a mini weather station useful for collecting the the following weather data:<br/>%2Heading and wind direction<br/>%2Crosswind and headwind<br/>%2Altitude and barometric pressure<br/>%2Wet bulb temperature<br/>%2Humidity and dewpoint<br/>%2Density altitude<br/>%2Wind chill and temperature<br/>%2Time and date<br/>%2Minimum, maximum, and average values<br/><br/>%3Usage:%4<br/>%2Equip a %3Kestrel%4.<br/>%2Use [%3%12%4] and select %3Equipment%4.<br/>%2Select %3Open%4. @@ -539,6 +594,7 @@ Il %3Kestrel 4500 Indicatore Meteorologico Tascabile%4 è una mini-stazione meteo utile per ricavare le seguenti informazioni meteorologiche:<br/>%2Prua e direzione del vento<br/>%2Vento di traverso e frontale<br/>%2Altitudine and pressione barometrica<br/>%2Temperatura di bulbo umido<br/>%2Umidità e punto di rugiada<br/>%2Density altitude<br/>%2Temperatura e gelo del vento<br/>%2Data e Ora<br/>%2Valori minimi, massimi, e medi<br/><br/>%3Utilizzo:%4<br/>%2Equipaggia %3Kestrel%4.<br/>%2Usa [%3%12%4] e seleziona %3Equipaggiamento%4.<br/>%2Seleziona %3Apri%4. %3케스트렐 4500 휴대용 기상 추적 장비%4는 다음 날씨 데이터들을 수집하는 데 유용한 소형 기상 관측 장비입니다:<br/>%2바람이 오는 방향과 가는 방향<br/>%2옆바람과 맞바람<br/>%2고도 및 기압<br/>%2습구온도<br/>%2습도 및 이슬점<br/>%2밀도고도<br/>%2체감온도<br/>%2시간 및 날짜<br/>%2최소, 최대, 평균값<br/><br/>%3사용 방법:%4<br/>%2%3케스트렐 4500NV%4를 장착하십시오.<br/>%2[%3%12%4]를 사용하고 %3장비%4를 선택하십시오.<br/>%2%3열기%4를 선택하십시오. %3ケストレル 4500 携帯気象計%4は、次の気象データの収集に役立つミニ気象ステーションです:<br/>%2方位と風向<br/>%2横風と向かい風<br/>%2高度と気圧<br/>%2湿球温度<br/>%2湿度と露点<br/>%2密度高度<br/>%2ウィンドチルと温度<br/>%2日付と時刻<br/>%2最小値、最大値、平均値<br/><br/>%3使用方法:%4<br/>%2%3ケストレル%4を装備します。<br/>%2[%3%12%4] を使って%3装備%4を選択します。<br/>%2%3ケストレルを開く%4で使用できます。 + La %3Estación Climática de Bolsillo Kestrel 4500%4 es una pequeña estación climática portátil para recolectar la siguiente información del tiempo:<br/>%2Dirección y Sentido del Viento<br/>%2VIento cruzado y Viento en cola<br/>%2Altitud y presión barométrica<br/>%2Temperatura húmeda<br/>%2Humedad y punto de condensación<br/>%2Densidad de altitud<br/>%2Sensación térmica y temperatura<br/>%2Hora y fecha<br/>%2Valores mínimos, máximos y medios<br/><br/>%3Uso:%4<br/>%2Equipa un %3Kestrel%4.<br/>%2Usar [%3%12%4] y seleccionar %3Equipamiento%4.<br/>%2Seleccionar %3Abrir%4. Triangulate Your Position @@ -548,6 +604,7 @@ 三角測量で位置を特定 Передавайте свое местоположение Trianguler votre position + Triangular Tu Posición The %3Map Tools%4 are a set of tools that allows a soldier to measure distances and angles. Useful for land, and calculating firing solutions for artillery.<br/><br/>%3Usage:%4<br/>%2Open %3Map%4.<br/>%2Use [%3%12%4] and select %3Map Tools%4.<br/>%2 The Tool can be moved by dragging with [%3Left-Click%4] while holding [%3ALT%4]. @@ -556,6 +613,7 @@ %3독도용 도구%4는 병사가 거리와 각도를 측정할 수 있는 도구 세트입니다. 지상에서 유용하며 포병 사격 솔루션 계산에 유용합니다,<br/><br/>%3사용 방법:%4<br/>%2%3지도%4를 여십시오.<br/>%2[%3%12%4]를 사용하여 %3독도용 도구%4를 선택하십시오.<br/>%2도구는 [%3Alt 키%4]를 누른 상태에서 [%3마우스 왼쪽 클릭%4]으로 드래그하여 이동할 수 있습니다. %3マップ ツール%4は、兵士が距離と角度を測定できるようにするツールのセットです。陸上や大砲の射撃工程の計算を解くのに役立ちます。<br/><br/>%3使用方法:%4<br/>%2%3マップ%4を開きます。<br/>%2[%3%12%4] を使って%3マップ ツール%4を選択します。<br/>%2 [%3ALT%4] を押しながら [%3左クリック%4] でドラッグするとツールを移動できます。 Les %3Outils cartographiques%4 sont un ensemble d'outils permettant au soldat de mesurer des distances et des angles. Utile pour la terre et le calcul des solutions de tir pour l'artillerie.<br/><br/>%3Utilisation:%4<br/>%2Ouvrir la%3Carte%4.<br/>%2Utiliser [%3%12%4] et sélectionner %3Outils cartographiques%4.<br/>%2 L'outil peut être déplacé en le faisant glisser avec [%3Clic gauche%4] tout en maintenant [%3ALT%4]. + Las %3Herramientas de mapa%4 son un conjunto de herramientas que permiten a un soldado medir distancias y ángulos. Util para terrenos, y para calcular soluciones de tiro para artillería.<br/><br/>%3Uso:%4<br/>%2Abrir %3Mapa%4.<br/>%2Usar [%3%12%4] y seleccionar %3Herramientas de Mapa%4.<br/>%2 La herramienta puede ser movida siendo arrastrada con [%3CLick-Izquierdo%4] mientras se pulsa [%3ALT%4]. Advanced DAGR @@ -565,6 +623,7 @@ より高度なDAGR Продвинутый DAGR DAGR avancé + DAGR Avanzado 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. @@ -572,6 +631,7 @@ 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. %3마이크로DAGR GPS%4는 %3DAGR%4의 고급 버전입니다. 다음과 같이 위치, 내비게이션 및 타이밍(PNT) 데이터를 제공합니다:<br/>%2나침반 및 방향<br/>%2임무와 동기화된 날짜 및 시간<br/>%2고도 (해수면 기준)<br/>%2현재 속도<br/>%2지형 및 위성 시점 기능이 있는 GPS<br/>%2웨이포인트 생성, 작명 및 삭제<br/>%2아군 식별 (ACE의 GPS 피아식별기 켜기 체크 필요)<br/>%2데이터를 가져오기 위한 벡터-21 거리계에 연결(원거리 대상의 웨이포인트 생성 및 좌표 참조)<br/><br/>%3사용 방법:%4<br/>%2사용 방법을 보려면 전용 %3마이크로DAGR%4의 위키를 방문하십시오. %3MicroDAGR GPS%4は%3DAGR%4のより高度なバージョンです。測位、航法、計時(PNT)データが提供されます。これには以下の情報を含みます:<br/>%2コンパスと方位<br/>%2ミッションに同期された日付と時間<br/>%2標高 (海面に対する相対値)<br/>%2現在の速度<br/>%2地形図と衛星ビューを備えたGPS<br/>%2ウェイポイントの作成、名前付け、および削除<br/>%2友軍の識別 (ACE ブルーフォーストラッキング設定が必要)<br/>ベクター21レンジファインダーへの接続とデータのインポート (ウェイポイントの作成と遠距離ターゲットのグリッド参照)<br/><br/>%3使用方法:%4<br/>%2使用手順については、専用の %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. Range Tables @@ -581,6 +641,7 @@ 射表 Таблицы диапазонов Tables de tir + Tablas de Distancia Get A Firing Solution @@ -590,6 +651,7 @@ 撃ち方の解を得る Получите расчёт Obtenir une solution de tir + Obtener Una Solución de Tiro %3Range Tables%4 allow for a soldier to estimate accurate shot placement on direct or indirect targets (depending on asset). The %3Range Table%4 will automatically fill depending on the soldiers selected weapon/vehicle.<br/><br/>%3Usage:%4<br/>%2Use [%3%12%4] and select %3Equipment%4.<br/>%2Select the desired %3Range Table%4. @@ -597,6 +659,7 @@ %3Tavole di tiro%4 permettono al soldato di stimare piazzamenti accurati di colpi mediante fuoco diretto o indiretto (a seconda dell'arma). La %3Tavola di tiro%4 si modificherà in automatico a seconda dell'arma/veicolo del soldato.<br/><br/>%3Utilizzo:%4<br/>%2Usa [%3%12%4] and seleziona %3Equipaggiamento%4.<br/>%2Seleziona la portata desiderata sulla %3Tavola di tiro%4. %3사거리표%4를 사용하면 병사가 직접 또는 간접 표적(자산에 따라 다름)에 대한 정확한 사격 배치를 추정할 수 있습니다. %3사거리표%4는 선택한 병사의 무기/차량에 따라 자동으로 작성됩니다.<br/><br/>%3사용 방법:%4<br/>%2[%3%12%4]를 사용하고 %3장비%4를 선택하십시오.<br/>%2원하는 %3사거리표%4를 선택하십시오. %3射表%4 を使用すると、兵士は (手段に応じて) 直接的または間接的なターゲットへの正確な射撃位置を推定できます。%3射表%4は、兵士が選択した武器/車両に応じて自動的に入力されます。<br/><br/>%3使用方法:%4<br/>%2[%3%12%4] を使って%3装備%4を選択します。<br/>%2目的の%3射表%4を選択します。 + La %3Tabla de distancias%4 permite a un soldado estimar con precisión el posicionamiento de un disparo sobre un objetivo de manera directa o indirecta (dependiendo del dispositivo). La %3Tabla de distancias%4 se autorellena dependiendo del arma o vehículo seleccionado por el soldado.<br/><br/>%3Uso:%4<br/>%2Usar [%3%12%4] y seleccionar %3Equipamiento%4.<br/>%2Selecciona la %3Tabla de distancias%4 deseada. Ropes @@ -606,6 +669,7 @@ ロープ Канаты Corde + Cuerdas Tow With Ease @@ -615,6 +679,7 @@ 楽々けん引 Буксируйте с легкостью Remorquer avec facilité + Remolcar Con Facilidad %3Ropes%4 have multiple uses including %3Towing%4 vehicles and %3Fast Roping%4 from helicopters.<br/><br/>%3Towing:%4<br/>%2Approach a vehicle.<br/>%2Use [%3%13%4] and select %3Towing%4.<br/>%2Select rope length.<br/>%2Select attachment point on towing vehicle.<br/>%2Select attachment on towed vehicle.<br/><br/>%3Available Rope Lengths:%4<br/>%2 3.2 meters<br/>%2 6.2 meters<br/>%2 12.2 meters<br/>%2 15.2 meters<br/>%2 18.3 meters<br/>%2 27.4 meters<br/>%2 36.6 meters @@ -622,6 +687,7 @@ %3Corde%4 hanno molteplici utilizzi, come %3Trainare%4 veicoli e %3Fast Roping%4 da elicotteri.<br/><br/>%3Traino:%4<br/>%2Avvicinati a un veicolo.<br/>%2Usa [%3%13%4] e seleziona %3Traina%4.<br/>%2Seleziona lunghezza corda.<br/>%2Seleziona punto di attacco su veicolo trainante.<br/>%2Seleziona attacco su veicolo trainato.<br/><br/>%3Lunghezze corde a disposizione:%4<br/>%2 3.2 metri<br/>%2 6.2 metri<br/>%2 12.2 metri<br/>%2 15.2 metri<br/>%2 18.3 metri<br/>%2 27.4 metri<br/>%2 36.6 metri %3로프%4는 차량 %3견인%4 및 헬기의 %3패스트로프%4 등 여러 용도로 사용됩니다.<br/><br/>%3견인 방법:%4<br/>%2차량에 접근하십시오.<br/>%2[%3%13%4]를 사용하고 %3견인%4을 선택하십시오.<br/>%2로프 길이를 선택하십시오.<br/>%2견인할 차량의 부착 지점을 선택하십시오.<br/>%2견인될 차량의 부착 지점을 선택하십시오.<br/><br/>%3사용 가능한 로프 길이:%4<br/>%2 3.2m<br/>%2 6.2m<br/>%2 12.2m<br/>%2 15.2m<br/>%2 18.3m<br/>%2 27.4m<br/>%2 36.6m %3ロープ%4には、車両の%3けん引%4やヘリコプターからの%3ファストロープ%4など、複数の用途があります。<br/><br/>%3けん引方法:%4<br/>%2車両に近づきます。<br/>%2[%3%13%4] を使って%3けん引%4を選択します。<br/>%2ロープの長さを選択します。<br/>%2けん引する車両のロープ取付位置を選択します。<br/>%2けん引される車両のロープ取付位置を選択します。<br/><br/>%3利用可能なロープの長さ:%4<br/>%2 3.2 メートル<br/>%2 6.2 メートル<br/>%2 12.2 メートル<br/>%2 15.2 メートル<br/>%2 18.3 メートル<br/>%2 27.4 メートル<br/>%2 36.6 メートル + Las %3Cuerdas%4 tienen múltiples usos incluyendo el %3Remolcado%4 de vehículos y el %3Descenso con Cuerda%4 desde helicópteros.<br/><br/>%3Remolcado:%4<br/>%2Acércate a un vehículo.<br/>%2Usar [%3%13%4] y seleccionar %3Remolcado%4.<br/>%2Selecciona la longitud de la cuerda.<br/>%2Selecciona un punto de anclaje en el vehículo de remolcado.<br/>%2Selecciona una sujección en el vehículo remolcado.<br/><br/>%3Longitudes de Cuerda Disponibles:%4<br/>%2 3.2 metros<br/>%2 6.2 metros<br/>%2 12.2 metros<br/>%2 15.2 metros<br/>%2 18.3 metros<br/>%2 27.4 metros<br/>%2 36.6 metros Expand Your Fortifications @@ -631,6 +697,7 @@ 要塞を拡張する Расширить свои укрепления Élargissez vos fortifications + Expande Tus Fortificaciones %3Sandbags%4 are sacks made of sturdy material, filled with sand, used for a variety of purposes such as creating barriers or providing stability in construction projects. Useful in expanding larger placed fortifications.<br/><br/>%3Usage:%4<br/>%2Equip a %3Sandbag (Empty)%4.<br/>%2Use [%3%12%4] and select %3Deploy Sandbag%4.<br/>%2Follow on-screen instructions for placement. @@ -638,6 +705,7 @@ %3Sacchi di Sabbia%4 sono sacchi di un materiale robusto, riempiti di sabbia, usati per una varietà di utilizzi come creare barriere o aumentare la stabilità di fortificazioni.<br/><br/>%3Utilizzo:%4<br/>%2Equipaggia una %3Sacco di Sabbia (Vuoto)%4.<br/>%2Usa [%3%12%4] e seleziona %3Posiziona Sacco di Sabbia%4.<br/>%2Segui le istruzioni sullo schermo per il piazzamento. %3모래주머니%4는 튼튼한 재료로 만든 주머니로 모래를 채워 장벽을 만들거나 건설 작업에서 안정성을 제공하는 등 다양한 용도로 사용되며, 더 큰 요새를 확장하는 데 유용합니다.<br/><br/>%3사용 방법:%4<br/>%2%3모래주머니(비어있음)%4을 장착하십시오.<br/>%2[%3%12%4]를 사용하고 %3모래주머니 배치%4를 선택하십시오.<br/>%2화면의 지시에 따라 배치하십시오. %3土のう%4は、砂が詰められた頑丈な素材で作られた袋で、建設プロジェクトでの障壁の作成や安定性の提供など、さまざまな目的に使用されます。より大きな配置の要塞を拡張するのに役立ちます。<br/><br/>%3使用方法:%4<br/>%2%3土のう (空)%4を装備します。<br/>%2[%3%12%4] を使って%3土のうを作る%4を選択します。<br/>%2画面上の指示に従って配置します。 + Los %3Sacos de tierra%4 son sacos hechos de un material resistente, rellenados de tierra, usados para una diversa variedad de propósitos como la construcción de barreras o proveer estabilidad en los proyectos de construcción. Son útiles en la expansión de proyectos de construcción más grandes.<br/><br/>%3Uso:%4<br/>%2Equipa un %3Saco de tierra (Vacío)%4.<br/>%2Usar [%3%12%4] y seleccionar %3Desplegar Saco de tierra%4.<br/>%2Seguir las instrucciones en pantalla para su colocación. Lower Firearm Temperature @@ -647,6 +715,7 @@ 銃の熱を冷ます Понизьте температуру оружия Refroidir l'arme + Bajar la Temperatura del Arma %3Spare Barrels%4 allow a soldier to reduce their weapon's heat significantly. After a short delay, the weapon's barrel will be swapped and its heat reduced. A soldier may also check the temperature of any barrels within their inventory. Not all weapons support swapping barrels.<br/><br/>%3Usage:%4<br/>%2Use [%3%12%4] and select %3Equipment%4.<br/>%2Select %3Swap Barrel%4.<br/>%2Resume operation after barrel swap is complete. @@ -654,6 +723,7 @@ %3Canne di Ricambio%4 permettono ai soldati di raffreddare la loro arma notevolmente. Dopo una breve attesa, la canna dell'arma verrà sostituita e la temperatura ridotta. Un soldato può anche controllare la temperatura di canne di ricambio presenti nel proprio inventario. Non tutte le armi consentono lo scambio canna.<br/><br/>%3Utilizzo:%4<br/>%2Usa [%3%12%4] e seleziona %3Equipaggiamento%4.<br/>%2Seleziona %3Sostituisci Canna%4.<br/>%2Continua l'ingaggio dopo sostituzione avvenuta. %3예비 총열%4을 사용하면 병사의 무기의 발열을 크게 줄일 수 있습니다. 잠시 뒤에 무기의 총신이 교체되고 발열이 감소합니다. 군인은 소지품에 있는 총열의 온도도 확인할 수 있습니다. 모든 무기가 총열 교환을 지원하는 것은 아닙니다.<br/><br/>%3사용 방법:%4<br/>%2[%3%12%4]를 사용하고 %3장비%4를 선택하십시오.<br/>%2%3총열 교체%4를 선택하십시오.<br/>%2총열 교체가 완료된 후 작전을 계속하십시오. %3予備銃身%4を使用すると、兵士は武器の熱を大幅に下げることができます。少し経つと、武器の銃身が交換され熱が下がります。兵士はインベントリ内の銃身の温度を確認することもできます。すべての武器が銃身の交換をサポートしているわけではありません。<br/><br/>%3使用方法:%4<br/>%2[%3%12%4] を使って%3装備%4を選択します。<br/>%2%3銃身を交換%4を選択します。<br/>%2銃身交換が完了すると、再度射撃することが出来ます。 + El %3Cañón de Repuesto%4 permite a un soldado reducir el calor del arma significativamente. Tras un pequeño periodo, el cañón del arma habrá sido sustituido y el calor reducido. Un soldado puede tambien comprobar la temperatura de cualquier cañón en su inventario. No todas las armas soportan el cambio de cañón.<br/><br/>%3Uso:%4<br/>%2Usar [%3%12%4] y seleccionar %3Equipamiento%4.<br/>%2Seleccionar %3Cambiar Cañón%4.<br/>%2Continuar con la operación una vez se haya cambiado el cañón. Spray Paint @@ -663,6 +733,7 @@ ペイントスプレー Аэрозольная краска Bombe de peinture + Pintura En Spray Tag Your Territory @@ -672,6 +743,7 @@ 自分のテリトリーをマーキング Пометьте свою территорию Marquez votre territoire + Marca Tu Territorio %3Spray Paint%4 is used to tag surfaces with various symbols.<br/><br/>%3Usage:%4<br/>%2Move close to a surface (wall, vehicle, ground, etc).<br/>%2Use [%3%12%4] and select %3Tag%4.<br/>%2Choose a symbol.<br/><br/>%3Available Colors:%4<br/>%2Black<br/>%2Blue<br/>%2Green<br/>%2Red @@ -679,6 +751,7 @@ %3Bombolette Spray%4 vengono usate per marcare superfici con vari simboli.<br/><br/>%3Utilizzo:%4<br/>%2Muoviti vicino a una superfice (muro, veicolo, suolo, etc).<br/>%2Usa [%3%12%4] e seleziona %3Marca%4.<br/>%2Seleziona un simbolo.<br/><br/>%3Colori disponibili:%4<br/>%2Nero<br/>%2Blu<br/>%2Verde<br/>%2Rosso %3스프레이 페인트%4다양한 기호로 표면에 태그를 지정하는 데 사용됩니다.<br/><br/>%3사용 방법:%4<br/>%2표면(벽, 차량, 지면 등)에 가까이 가십시오.<br/>%2[%3%12%4]를 사용하고 %3태그%4를 선택하십시오.<br/>%2모양을 고르십시오.<br/><br/>%3사용 가능 색상:%4<br/>%2검정<br/>%2파랑<br/>%2초록<br/>%2빨강 %3ペイントスプレー%4は、地面や壁、車両の表面などに様々な図形のタグを付けるために使えます。<br/><br/>%3使用方法:%4<br/>%2塗りたい面に近づきます。(壁、車両、地面など)<br/>%2[%3%12%4] を使って%3タグ (スプレーペイント)%4を選択します。<br/>%2図形を選びます。<br/><br/>%3利用可能な色:%4<br/>%2黒<br/>%2白<br/>%2赤<br/>%2青<br/>%2緑<br/>%2黄 + La %3Pintura en Spray%4 se usa para marcar superficies con varios símbolos.<br/><br/>%3Uso:%4<br/>%2Acércate a una superficie (pared, vehículo, suelo, etc).<br/>%2Usar [%3%12%4] y seleccionar %3Tag%4.<br/>%2Elige un símbolo.<br/><br/>%3Colores disponibles:%4<br/>%2Negro<br/>%2Azul<br/>%2Verde<br/>%2Rojo Brace From Anywhere @@ -688,6 +761,7 @@ どこでも支持器 Опора может быть установлена в любом месте Stabilisé partout + Apoyarte En Cualquier Lugar The %3SSWT Kit%4 is a deployable tripod that allows a soldier to brace their aim when deployed. Use it when you need an elevated shooting position and there are no other objects around.<br/><br/>%3Usage:%4<br/>%2Use [%3%12%4] and select %3Equipment%4.<br/>%2Select %3SSWT Kit%4 and follow the on screen prompts to place. @@ -695,6 +769,7 @@ Il %3Kit SSWT%4 è un treppiede piazzabile che permette al soldato di appoggiare la sua arma. Usalo quando ti serve una posizione di tiro rialzata e non ci sono altri oggetti utili nelle vicinanze.<br/><br/>%3Utilizzo:%4<br/>%2Usa [%3%12%4] e seleziona %3Equipaggiamento%4.<br/>%2Seleziona %3Kit SSWT%4 e segui le indicazioni di piazzamento. %3SSWT 키트%4는 병사가 배치 시 조준력을 상승시킬 수 있는 배치 가능한 삼각대입니다. 높이 조절이 된 사격 위치가 필요하고 주위에 다른 물체가 없을 때 사용하십시오.<br/><br/>%3사용 방법:%4<br/>%2[%3%12%4] 를 사용하고 %3장비%4를 선택하십시오.<br/>%2%3SSWT 키트%4를 선택하고 화면의 지시에 따라 배치하십시오. %3SSWT キット%4は展開可能な三脚で、展開時に兵士が狙いを定めることができます。高い射撃位置が必要で、周囲に他の物体がない場合に使用してください。<br/><br/>%3使用方法:%4<br/>%2[%3%12%4] を使って%3装備%4を選択します。<br/>%2%3SSWT キット%4を選択し、画面上の指示に従って配置します。 + El %3Kit SSWT%4 es un trípode desplegable que permite a un soldado apoyarse para apuntar cuando está desplegado. Úsalo cuando necesites una posición de tiro elevada y no hay ningún otro objeto alrededor.<br/><br/>%3Uso:%4<br/>%2Usar [%3%12%4] y seleccionar %3Equipamiento%4.<br/>%2Seleccionar %3Kit SSWT%4 y sigue las indicaciones en pantalla para colocarlo. Keep Eyes In The Sky @@ -705,6 +780,7 @@ Не Отрывай Глаз От Неба Gardez les yeux au ciel Gardez les yeux au ciel + Manten Tus Ojos En El Cielo %3UAV Batteries%4 are used to recharge a UAV's energy storage. Especially useful for small UAVs.<br/><br/>%3Usage:%4<br/>%2Equip a %3UAV Battery%4<br/>%2Approach a %3UAV%4 with its %3Engine Off%4.<br/>%2Use [%3%13%4] and select %3Recharge%4. @@ -712,6 +788,7 @@ %3Batteria UAV%4 vengono usate per ricaricare gli UAV. Molto utile per piccoli UAV.<br/><br/>%3Utilizzo:%4<br/>%2Equipaggia una %3Batteria UAV%4<br/>%2Avvicinati al %3UAV%4 con il %3Motore Spento%4.<br/>%2Usa [%3%13%4] e seleziona %3Ricarica%4. %3무인기 배터리%4는 무인기의 에너지 저장소를 재충전하는 데 사용됩니다. 소형 무인기에 특히 유용합니다.<br/><br/>%3사용 방법:%4<br/>%2%3무인기 배터리%4를 장착하십시오.<br/>%2%3엔진을 끄고%4 %3무인기%4에 접근하십시오.<br/>%2[%3%13%4]를 사용하고 %3재충전%4을 선택하십시오. %3UAVバッテリー%4は、UAVの電源容量を充電するために使用されます。<br/><br/>%3使用方法:%4<br/>%2%3UAV バッテリー%4を装備します。<br/>%2%3エンジンをオフ%4にした%3UAV%4に近づきます。<br/>%2[%3%13%4] を使って%3充電%4を選択します。 + La %3Batería de VANT%4 se utilizan para recargar el almacenamiento de energía de un VANT. Especialmente útiles para pequeños VANTs.<br/><br/>%3Uso:%4<br/>%2Equipa una %3Batería de VANT%4<br/>%2Acércate a un %3VANT%4 con su %3Motor Apagado%4.<br/>%2Usa [%3%13%4] y selecciona %3Recargar%4. Making An Entrance @@ -721,6 +798,7 @@ 堂々入場する Создание собственного входа Faire son entrée + Abriendo Una Entrada %3Wirecutters%4 are a tool that allows a soldier to bypass wired fencing. Useful for creating backdoor entrances into secure areas.<br/><br/>%3Usage:%4<br/>%2Move close to a fence.<br/>%2Use [%3%12%4] and select %3Cut Fence%4. @@ -728,6 +806,7 @@ La %3Trancia%4 è un utensile che permette ai soldati di sorpassare filo spinato e recinzioni. Utile per creare punti di accesso nel retro di zone protette.<br/><br/>%3Utilizzo:%4<br/>%2Avvicinati a una barriera.<br/>%2Usa [%3%12%4] e seleziona %3Taglia%4. %3절단기%4는 병사가 철조망을 통과할 수 있게 해주는 도구입니다. 보안 구역에 뒷입구를 만드는 데 유용합니다.<br/><br/>%3사용 방법:%4<br/>%2철조망에 가까이 가십시오.<br/>%2[%3%13%4]를 사용하고 %3철조망 자르기%4를 선택하십시오. %3ワイヤーカッター%4は、兵士が有線フェンスを回避できるようにするツールです。安全にエリアへの裏口を作成するのに役立ちます。<br/><br/>%3使用方法:%4<br/>%2フェンスの近くに移動します。<br/>%2[%3%12%4] を使って%3フェンスを切断する%4を選択します。 + La %3Cizalla%4 es una herramienta que permite a un soldado atravesar una valla de alambre. Es útil para crear entradas traseras en áreas seguras.<br/><br/>%3Uso:%4<br/>%2Acércate a una valla.<br/>%2Usar [%3%12%4] y seleccionar %3Cortar Valla%4. Items @@ -770,6 +849,7 @@ 要塞を構築する Стройте укрепления Construire des fortifications + Construir Fortificaciones The %3Fortify Tool%4 allows soldiers to build fortifications provided by their mission creator.<br/><br/>%3Usage:%4<br/>%2Pick up a %3Fortify Tool%4.<br/>%2Use [%3%12%4] and select %3Fortify%4.<br/>%2Select an available fortification and follow the on screen prompts for placement. @@ -777,6 +857,7 @@ L'%3Attrezzo di Fortificazione%4 permette ai soldati di costruire fortificazioni permesse dal creatore della missione.<br/><br/>%3Utilizzo:%4<br/>%2Raccogli un %3Attrezzo di Fortificazione%4.<br/>%2Usa [%3%12%4] e seleziona %3Fortifica%4.<br/>%2Seleziona una fortificazione disponibile e segui le indicazioni di piazzamento sullo schermo. %3요새화 도구%4를 사용하면 병사들이 임무 생성자가 제공한 요새를 구축할 수 있습니다.<br/><br/>%3사용 방법:%4<br/>%2%3요새화 도구%4를 가지십시오.<br/>%2[%3%12%4]를 사용하고 %3요새화%4를 선택하십시오.<br/>%2사용 가능한 요새를 선택하고 화면의 지시에 따라 배치하십시오. %3要塞ツール%4を使用すると、兵士はミッション作成者が提供した要塞を構築できます。<br/><br/>%3使用方法:%4<br/>%2%3要塞ツール%4を持つ。<br/>%2[%3%12%4] を使って%3要塞%4を選択します。<br/>%2利用可能な構造物を選択し、画面上の指示に従って配置します。 + La %3Herramienta de Fortificación%4 permite a los soldados construir fortificaciones provistas por su creador de mision.<br/><br/>%3Uso:%4<br/>%2Coge una %3Herramienta de Fortificación%4.<br/>%2Usar [%3%12%4] y seleccionar %3Fortificar%4.<br/>%2Selecciona una fortificación disponible y sigue las instrucciones en pantalla para su colocación. Breaking and Entering @@ -786,6 +867,7 @@ 破壊して乗り込む Взлом и проникновение Entrée par effraction + Romper y Entrar %3Lockpicks%4 are used to gain access to locked vehicles.<br/><br/>%3Usage:%4<br/>%2Equip a %3Lockpick%4.<br/>%2Approach a %3Locked%4 vehicle.<br/>Use [%3%13%4] and select %3Lockpick Vehicle%4.<br/><br/><t underline='1'>%3Note:%4</t> Lockpicks and keys are only available via scripting or ACE Vehicle Key modules. @@ -793,6 +875,7 @@ I %3Grimaldelli%4 sono usati per forzare l'accesso a veicoli bloccati.<br/><br/>%3Utilizzo:%4<br/>%2Equipaggia un %3Grimaldello%4.<br/>%2Avvicinati a un veicolo %3Bloccato%4 vehicle.<br/>Usa [%3%13%4] e seleziona %3Scassina Veicolo%4.<br/><br/><t underline='1'>%3Note:%4</t> Grimaldelli e chiavi sono solo reperibili mediante scripting o moduli ACE di assegnazione Chiavi Veicoli. %3해정도구%4는 잠긴 차량에 들어가는 데 사용됩니다.<br/><br/>%3사용 방법:%4<br/>%2%3해정도구%4를 장착하십시오.<br/>%2%3잠긴%4 차량에 접근하십시오.<br/>[%3%13%4]를 사용하고 %3차량 잠금해제%4를 선택하십시오.<br/><br/><t underline='1'>%3참고:%4</t> 해정도구와 열쇠는 스크립팅 또는 ACE 차량 열쇠 모듈에서만 사용할 수 있습니다. %3Lockpick%4は、ロックされた車両にアクセスするために使用されます。<br/><br/>%3使用方法:%4<br/>%2%3Lockpick%4を装備します。<br/>%2%3鍵の掛かった%4車両に近づきます。<br/>[%3%13%4] を使って%3鍵をこじ開ける%4を選択します。<br/><br/><t underline='1'>%3備考:%4</t> ロックピックとキーは、スクリプトまたは ACE Vehicle Key モジュールを介してのみ使用できます。 + La %3Ganzúa%4 es usada para lograr acceso a vehículos bloqueados.<br/><br/>%3Uso:%4<br/>%2Equipar %3Ganzúa%4.<br/>%2Acércate a un vehículo %3Bloqueado%4.<br/>Usar [%3%13%4] y seleccionar %3Ganzuar Vehículo%4.<br/><br/><t underline='1'>%3Nota:%4</t>Ganzúas y Llaves sólo están disponibles mediante scripting o módulos de Llaves de Vehículos ACE. Vehicle Keys @@ -802,6 +885,7 @@ 車両キー Взлом и проникновение Clés de véhicule + Llaves de Vehículos Lock/Unlock Vehicles @@ -811,6 +895,7 @@ 車両のロック/ロック解除 Взлом и проникновение Verrouiller/déverrouiller un véhicule + Bloquear/Desbloquear vehículos %3Vehicle Keys%4 are used to lock/unlock your vehicles. Vehicle keys can exist for the whole side, or keys can be created for a particular vehicle itself.<br/><br/>%3Usage:%4<br/>%2Equip a %3Vehicle Key%4.<br/>%2Approach the vehicle that the key belongs to.<br/>Use [%3%13%4] and select %3Lock/Unlock Vehicle%4.<br/><br/><t underline='1'>%3Note:%4</t> Lockpicks and keys are only available via scripting or ACE Vehicle Key modules. @@ -818,6 +903,7 @@ Le %3Chiavi di Veicoli%4 vengono usate per bloccare/sbloccare i propri veicoli. Chiavi di veicoli possono esistere per un'intera fazione, oppure per un veicolo particolare.<br/><br/>%3Utilizzo:%4<br/>%2Equipaggia una %3Chiave di Veicolo%4.<br/>%2Avvicinati al veicolo a cui appartiene la chiave.<br/>Usa [%3%13%4] e seleziona %3Blocca/Sblocca Veicolo%4.<br/><br/><t underline='1'>%3Note:%4</t> Grimaldelli e chiavi sono solo disponibili mediante scripting o moduli ACE Chiavi Veicoli. %3차량 열쇠%4는 차량을 잠그거나 잠금해제하는 데 사용됩니다. 차량 열쇠는 모든 세력에게 존재할 수도 있고, 특정 차량 자체에 대해 열쇠를 생성할 수도 있습니다.<br/><br/>%3사용 방법:%4<br/>%2%3차량 열쇠%4를 장착하십시오.<br/>%2해당 열쇠에 속한 차량에 접근하십시오.<br/>[%3%13%4]를 사용하고 %3차량 잠금/잠금해제%4를 선택하십시오.<br/><br/><t underline='1'>%3참고:%4</t> 해정도구와 열쇠는 스크립팅 또는 ACE 차량 열쇠 모듈에서만 사용할 수 있습니다. %3Vehicle Key%4は、車両のロック/ロック解除に使用されます。車両キーは陣営全体に存在することも、特定の車両だけに対してキーを作成することもできます。<br/><br/>%3使用方法:%4<br/>%2%3Vehicle Key%4を装備します。<br/>%2鍵の対応している車両に近づきます。<br/>[%3%13%4] を使って%3鍵を解錠/施錠%4します。<br/><br/><t underline='1'>%3備考:%4</t> ロックピックとキーは、スクリプトまたは ACE Vehicle Key モジュールを介してのみ使用できます。 + Las %3Llaves de Vehículos%4 son usadas para bloquear/desbloquear tus vehículos. Las Llaves de Vehículos existen para un bando entero o para un vehículo concreto.<br/><br/>%3Uso:%4<br/>%2Equipa una %3Llave de Vehículo%4.<br/>%2Acércate a un vehículo cuya llave corresponda.<br/>Usar [%3%13%4] y selecciona %3Bloquear/Desbloquear Vehículo%4.<br/><br/><t underline='1'>%3Nota:%4</t> Ganzúas y Llaves sólo están disponibles mediante scripting o módulos de Llaves de Vehículos ACE diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index fcdbecb2ff..ff912a75d1 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -370,12 +370,14 @@ Metti/Togli tappi 귀마개 토글 Mettre/enlever les bouchons + Poner/quitar tapones Only units with heavy weapons Uniquement les unités dotées d'armes lourdes Только юниты с тяжелым вооружением 重火器を装備したユニットのみ + Sólo unidades con armas pesadas Solo a unità con armi pesanti diff --git a/addons/irlight/stringtable.xml b/addons/irlight/stringtable.xml index 5423a8a8a0..506e9deb9d 100644 --- a/addons/irlight/stringtable.xml +++ b/addons/irlight/stringtable.xml @@ -11,6 +11,7 @@ DBAL-A3 (vermelho) DBAL-A3 (赤) DBAL-A3 (красный) + DBAL-A3 (rojo) DBAL-A3 (green) @@ -22,6 +23,7 @@ DBAL-A3 (Verde) DBAL-A3 (緑) DBAL-A3 (зеленый) + DBAL-A3 (verde) <t color='#9cf953'>Use: </t>Turn Laser ON/OFF<br>Double click to switch mode @@ -33,6 +35,7 @@ <t color='#9cf953'>Uso: </t>Ligar/Desligar Laser<br>Duplo clique para mudar o modo <t color='#9cf953'>使用方法: </t>レーザーのオン/オフ切り替え<br>ダブルクリックでモード切り替え <t color='#9cf953'>Использование: </t>Включение / выключение лазера <br>Двойной щелчок для переключения режима + <t color='#9cf953'>Uso: </t>Alternar Láser ON/OFF<br>Doble click para cambiar estado Dual Beam Aiming Laser @@ -44,6 +47,7 @@ Laser de Pontaria de Duplo Feixe 複合ビーム照準レーザー Двухлучевой прицельный лазер + Láser de Apuntado de Doble Haz Visible Laser @@ -55,6 +59,7 @@ Laser Visível 可視光レーザー Видимый лазер + Láser Visible IR Laser @@ -66,6 +71,7 @@ Laser IR IRレーザー ИК-лазер + Láser IR IR Illuminator @@ -77,6 +83,7 @@ Iluminador IR IRイルミネーター ИК-осветитель + Iluminador IR IR Laser and Illuminator @@ -88,6 +95,7 @@ Laser e Iluminador IR IRレーザーとイルミネーター ИК-лазер и осветитель + Láser e Iluminador IR Wide Beam @@ -99,6 +107,7 @@ Feixe Largo 広角ビーム Широкий луч + Haz Ancho Medium Beam @@ -110,6 +119,7 @@ Feixe Médio 標準ビーム Средний луч + Haz Medio Narrow Beam @@ -121,6 +131,7 @@ Feixe Estreito 狭角ビーム Узкий луч + Haz Estrecho <t color='#9cf953'>Use: </t>Turn Light ON/OFF<br>Double click to switch mode @@ -132,6 +143,7 @@ <t color='#9cf953'>Uso: </t>Ligar/Desligar Iluminador<br>Duplo clique para mudar o modo <t color='#9cf953'>使用方法: </t>ライトのオン/オフ<br>ダブルクリックでモード切り替え <t color='#9cf953'>Использование: </t>Включение / выключение освещения <br>Двойной щелчок для переключения режима + <t color='#9cf953'>Uso: </t>Alternar Luz ON/OFF<br>Doble click para cambiar estado Special Purpose IR LED Illuminator @@ -143,6 +155,7 @@ Iluminador LED IR de Uso Especial 特殊用途のIR LEDイルミネーター ИК-светодиодный осветитель специального назначения + Iluminador LED IR de Propósito Especial Illuminator / Laser Momentary Switch @@ -154,6 +167,7 @@ Interruptor Momentâneo Iluminador/Laser イルミネーター/レーザーモーメンタリースイッチ Мгновенный переключатель осветителя/лазера + Conmutador Momentáneo Iluminador / Láser diff --git a/addons/killtracker/stringtable.xml b/addons/killtracker/stringtable.xml index 24c7bcdd56..63196a442e 100644 --- a/addons/killtracker/stringtable.xml +++ b/addons/killtracker/stringtable.xml @@ -9,6 +9,7 @@ ACE キルトラッカー ACE 킬트래커 ACE Suivi des morts + ACE Contador de Muertes ACE Killed Events @@ -103,6 +104,7 @@ プレイヤーに殺害されたAIユニットを追跡 플레이어가 죽인 AI 트래킹 Suivi de l'IA tuée par les joueurs + Cuenta las unidades de IA matadas por el jugador Defines if killed AIs will be shown in the kill tracker during mission debriefing. @@ -112,6 +114,7 @@ ミッションデブリーフィングのキルトラッカーに殺害されたAIが表示されるかどうかを定義します。 사후강평 중 살해된 AI가 킬트래킹에 표시되는지 여부를 정의합니다. Définit si les IA tuées seront affichées dans le tracker pendant le débriefing de la mission. + Define si las IAs matadas se mostrarán en el contador de muertes en el debiefring de la misión. diff --git a/addons/laser/stringtable.xml b/addons/laser/stringtable.xml index f0977c84f7..c6bf7cfc25 100644 --- a/addons/laser/stringtable.xml +++ b/addons/laser/stringtable.xml @@ -129,6 +129,7 @@ Traqueur laser : activé Rastreador a Laser: Ligado Лазерный точечный трекер: Включен + Rastreador del Puntero Láser: On Laser Spot Tracker: Off @@ -140,6 +141,7 @@ Traqueur laser : désactivé Rastreador a Laser: Desligado Лазерный точечный трекер: выключен + Rastreador del Puntero Láser: Off Draw Laser on Map diff --git a/addons/maptools/stringtable.xml b/addons/maptools/stringtable.xml index bb0782f22b..f71cc8489f 100644 --- a/addons/maptools/stringtable.xml +++ b/addons/maptools/stringtable.xml @@ -42,6 +42,7 @@ Tavola di calcolo Графическая доска Planche traçante + Tablero de Trazado The Plotting Board is a map tool designed for use in the directing of short range indirect fires. @@ -50,6 +51,7 @@ La tavola di calcolo è uno strumento utilizzato per dirigere fuoco di artiglieria a corto raggio. Графическая доска - это картографический инструмент, предназначенный для использования при ведении непрямого огня с малой дистанции. Une planche traçante est un outil cartographique conçu pour diriger des tirs indirects à courte distance. + El Tablero de Trazado es una herramienta de mapa utilizada para dirigir fuego indirecto de corto alcance. Map Tools @@ -275,6 +277,7 @@ Canali ammessi su tavola di calcolo Разрешить создание каналов на миллиметровой доске. Canaux autorisés sur la planche traçante + Permitir Canales de Dibujado de Tablero de Trazado Channels in which plotting board drawing is enabled. @@ -283,6 +286,7 @@ Canali in cui si può disegnare sulla tavola di calcolo. Каналы, в которых включено рисование на миллиметровой доске. Canaux dans lesquels vous pouvez dessiner sur le planche traçante + Canales en los que el tablero de trazado está habilitado. Allow Direct Comms Only (Polylines Only) @@ -291,6 +295,7 @@ Comunicazioni Dirette (solo linee) Разрешать только прямую связь (только полилинии) Communications directes uniquement (lignes uniquement) + Permitir Sólo Comunicaciones Directas (Sólo Polylineas) Allow Direct/Group Comms (Polylines and Group Markers) @@ -299,6 +304,7 @@ Comunicazioni dirette/gruppo (linee e marker) Разрешить прямую/групповую связь (полилинии и групповые маркеры) Autoriser les communications directes/de groupe (polylignes et marqueurs de groupe) + Permitir Comunicaciones Directas/Grupales (Polylineas y Marcadores de Grupo) Plotting Board @@ -307,6 +313,7 @@ Tavola di calcolo Миллиметровая доска Planche traçante + Tablero de Trazado Plotting Board Acrylic @@ -315,6 +322,7 @@ Acrilico tavola di calcolo Миллиметровая доска акрилловая Planche traçante Acrylique + Tablero de Trazado Acrílico Plotting Board Ruler @@ -323,6 +331,7 @@ Righello tavola di calcolo Линейка для миллиметровой доски Règle de la planche traçante + Regla de Tablero de Trazado To Plotting Board @@ -331,6 +340,7 @@ Su tavola di calcolo К миллиметровой доске. Sur la planche traçante + A Tablero de Trazado To Plotting Board Acrylic @@ -339,6 +349,7 @@ Su acrilico tavola di calcolo К миллиметровой доске акрилловой Sur la planche traçante Acrylique + A Tablero de Trazado Acrílico To Plotting Board Ruler @@ -347,6 +358,7 @@ Su righello tavola di calcolo К линейке миллиметровой доски. Sur la règle de la planche traçante + A Regla de Tablero de Trazado Wipe all markers off Plotting Board @@ -355,6 +367,7 @@ Cancella tutti i disegni dalla tavola Сотрите все маркеры с миллиметровой доски. Effacer tous les dessins de la planche traçante + Borrar todas las marcas del Tablero de Trazado Show Plotting Board @@ -363,6 +376,7 @@ Mostra tavola di calcolo Показать миллиметровую доску. Afficher la planche traçante + Mostrar Tablero de Trazado Hide Plotting Board @@ -371,6 +385,7 @@ Nascondi tavola di calcolo Скрыть миллиметровую доску. Masquer la planche traçante + Ocultar Tablero de Trazado Toggle Plotting Board Ruler @@ -379,6 +394,7 @@ Mostra/Nascondi Righello Переключить линейку миллиметровой доски. Afficher/masquer la règle + Alternar Regla de Tablero de Trazado Align @@ -429,6 +445,7 @@ Su Вверх Monter + Arriba To Maptool @@ -437,6 +454,7 @@ Su strumento cartografico К инструментам карты Outil cartographique + A Herramienta de Mapa diff --git a/addons/markers/stringtable.xml b/addons/markers/stringtable.xml index a0c0be17f7..2c9dc1531b 100644 --- a/addons/markers/stringtable.xml +++ b/addons/markers/stringtable.xml @@ -421,6 +421,7 @@ "MS" - 밀리초 (0부터 59까지) "MM" - ミリ秒 (0から59) "ММ" - миллисекунды (от 0 до 59) + "MM" - Milisegundos (de 0 a 59) "mmm" - Milliseconds (from 0 to 999) @@ -431,6 +432,7 @@ "mmm" - 밀리초 (0부터 999까지) "mmm" - ミリ秒 (0から599) "ммм" - миллисекунды (от 0 до 999) + "mmm" - Milisegundos (de 0 a 999) Timestamp Hour Format diff --git a/addons/medical_ai/stringtable.xml b/addons/medical_ai/stringtable.xml index 5081a09d96..54f0c2714c 100644 --- a/addons/medical_ai/stringtable.xml +++ b/addons/medical_ai/stringtable.xml @@ -58,6 +58,7 @@ Exigir Itens アイテムを要求 Требуемые предметы + Requerir Objetos AI will only perform medical treatment if they have the necessary items in their inventory. @@ -69,6 +70,7 @@ A IA só irá realizar tratamento médico se tiver os itens necessários em seu inventário. AIのインベントリに必要なアイテムがある場合にのみ治療を実行します。 Искусственный интеллект будет оказывать медицинскую помощь только в том случае, если в его инвентаре есть необходимые предметы. + La IA sólo realizará el tratamiento médico en caso de que dispongan de los objetos necesarios en su inventario. Auto Convert Items for AI @@ -80,6 +82,7 @@ Conversão automática de itens para IA AIのアイテムを自動変換 Автоматическое преобразование элементов для ИИ + Auto Convertir Objetos para la IA diff --git a/addons/medical_damage/stringtable.xml b/addons/medical_damage/stringtable.xml index 626826117d..3f274dd37a 100644 --- a/addons/medical_damage/stringtable.xml +++ b/addons/medical_damage/stringtable.xml @@ -803,6 +803,7 @@ Schmerz-Bewusstlosigkeit-Grenze 고통 기절 한계점 Limite de Dor Antes da Inconsciência + Umbral de Dolor de Inconsciencia Sets the threshold for severe pain, above which a person can fall unconscious upon receiving damage. @@ -814,6 +815,7 @@ Legt die Grenze für starke Schmerzen fest, oberhalb derer eine Person bei erlittenem Schaden bewusstlos werden kann. 사람이 데미지를 입었을 때 의식불명 상태가 될 수 있는 심각한 고통의 한계점을 설정합니다. Define o limite para dor severa, acima do qual uma pessoa pode ficar inconsciente ao receber dano. + Establece el umbral para dolor severo, sobre el cual una persona puede caer inconsciente una vez reciba daño. Fatal Injury Death Chance diff --git a/addons/medical_engine/stringtable.xml b/addons/medical_engine/stringtable.xml index 1765df0d39..cf19713202 100644 --- a/addons/medical_engine/stringtable.xml +++ b/addons/medical_engine/stringtable.xml @@ -37,6 +37,7 @@ Efeito de Penetração de Blindagem 装甲貫通効果 Эффект сквозного прохождения брони + Efecto de Atravesar Armadura Controls effect of armor 'passThrough' on final damage. Makes high armor values, like ones used in GL rigs, less effective.\nUse 0% for pre 3.16.0 armor behavior.\nOnly touch this if you know what you're doing! @@ -48,6 +49,7 @@ Controla o efeito de penetração (passThrough) da blindagem no dano final. Torna valores de blindagem altos, como os usados em coletes GL, menos eficazes.\nUse 0% para o comportamento de blindagem anterior à versão 3.16.0.\nSó mexa nisso se souber o que está fazendo! ボディアーマーの'passThrough'値が最終的な身体ダメージに与える影響を調整します。擲弾兵リグで使用されるような高い装甲値では効果が低くなります。\n3.16.0以前の挙動にするには0%にしてください。\nこれが何かわからない場合は変更しないことをお勧めします。 Контролирует эффект `passThrough` при нанесении конечного урона. Делает высокие значения брони, подобные тем, которые используются в GL rigs, менее эффективными.\nИспользуйте 0% для поведения брони до версии 3.16.0.n\Прикасайтесь к этому, только если знаете, что делаете! + Controla el efecto de 'passThrough' de armadura en el daño final. Hace que los valores altos de armadura, como los usados en los chalecos GL, sean menos efectivos.\nUsar 0% para comportamiento de armadura en versiones anteriores a 3.16.0.\nSólo modifica esto si sabes lo que estás haciendo! diff --git a/addons/medical_gui/stringtable.xml b/addons/medical_gui/stringtable.xml index 71388bfb41..b88d9cbbf1 100644 --- a/addons/medical_gui/stringtable.xml +++ b/addons/medical_gui/stringtable.xml @@ -293,6 +293,7 @@ Medizinische Info anzeigen 医療情報一時表示 Просмотр медицинской информации + Ojear Información Médica Medical Peek Duration @@ -303,6 +304,7 @@ Dauer zum Anzeigen der medizinischen Info 医療情報一時表示の表示時間 Продолжительность медицинского осмотра + Duración del Ojear Información Médica How long the medical info peek remains open after releasing the key. @@ -313,6 +315,7 @@ Durata di visualizzazione delle Info Mediche dopo aver rilasciato il tasto. 医療情報一時表示キーを放してからどれだけ長く情報表示するか。 Как долго окно просмотра медицинской информации остается открытым после отпускания клавиши. + Durante cuánto tiempo la información médica ojeada permanece abierta una ves se deje de apretar la tecla. Load Patient @@ -566,6 +569,7 @@ Passa a te stesso 自分に切り替え Переключиться на себя + Cambiar a uno mismo Switch to target @@ -576,6 +580,7 @@ Passa al paziente 相手に切り替え Переключиться на цель + Cambiar al objetivo Head @@ -1002,6 +1007,7 @@ Nessuna emorragia 出血はしていない Кровотечения нет + Sin sangrado Slow bleeding @@ -1012,6 +1018,7 @@ Debole emorragia 出血は穏やか Медленное кровотечение + Sangrado lento Moderate bleeding @@ -1022,6 +1029,7 @@ Emorraggia moderata 出血はそこそこ速い Умеренное кровотечение + Sangrado moderado Severe bleeding @@ -1032,6 +1040,7 @@ Forte emorragia 出血は激しい Сильное кровотечение + Sangrado severo Massive bleeding @@ -1042,6 +1051,7 @@ Gravissima emorragia 出血は酷く多い Огромное кровотечение + Sangrado masivo in Pain @@ -1116,6 +1126,7 @@ Nessuna perdita di sangue 失血なし Потери крови нет + Sin pérdida de sangre @@ -1400,6 +1411,7 @@ Zeige medizinische Info beim Treffer an 被弾時の医療情報一時表示 Показать медицинскую информацию о попадании + Ojear Información Médica en Impacto Temporarily show medical info when injured. @@ -1411,6 +1423,7 @@ Bei Verletzungen vorübergehend medizinische Info anzeigen. 被弾時に医療情報を一時的に表示します。 Временно показывать медицинскую информацию при травме. + Temporalmente muestra la información médica cuando es herido. Medical Peek Duration on Hit @@ -1422,6 +1435,7 @@ Dauer der Anzeige bei einem Treffer. 被弾時の医療情報一時表示の表示時間 Продолжительность медицинского осмотра при попадании + Duración de Ojear la Información Médica cuando hay Impacto How long the medical info peek remains open after being injured. @@ -1433,6 +1447,7 @@ Wie lange die medizinische Info nach einer Verletzung angezeigt wird. 被弾時の医療情報の一時表示をどれだけ長く表示するか。 Как долго окно просмотра медицинской информации остается открытым после получения травмы. + Durante cuánto tiempo la información médica ojeada permanece abierta una tras haber sido herido. Show Trauma Sustained @@ -1445,6 +1460,7 @@ 显示遭受的创伤 Afficher les traumatismes subis Показать полученную травму + Mostrar Trauma Sostenido Show trauma sustained in the injury list. @@ -1457,6 +1473,7 @@ 在伤情表上显示创伤 Afficher les traumatismes subis dans la liste des blessures. Показать полученную травму в списке травм. + Mostrar trauma sostenido en la lista de heridas Body Part Outline Color @@ -1468,6 +1485,7 @@ Umrissfarbe des Körperteils 身体部位の輪郭表示の色 Цвет контура части тела + Color de Contorno de las Partes del Cuerpo Color of outline around selected body part. @@ -1479,6 +1497,7 @@ Farbe des Umrisses um das ausgewählten Körperteil. 選択した身体部位の輪郭表示の色。 Цвет контура вокруг выбранной части тела. + Color del contorno alrededor de la parte del cuerpo seleccionada. Minor Trauma @@ -1491,6 +1510,7 @@ 轻微创伤 Traumatisme mineur Незначительная травма + Trauma Menor Major Trauma @@ -1503,6 +1523,7 @@ 中度创伤 Traumatisme majeur Серьезная травма + Trauma mayor Severe Trauma @@ -1515,6 +1536,7 @@ 重度创伤 Traumatisme grave Тяжелая травма + Trauma Severo Chronic Trauma @@ -1527,6 +1549,7 @@ 慢性创伤 Traumatisme chronique Хроническая травма + Trauma Crónico L @@ -1538,6 +1561,7 @@ L Лево + I R @@ -1549,6 +1573,7 @@ R Право + D in your inventory @@ -1560,6 +1585,7 @@ im Inventar 個あなたが保有 в вашем инвентаре + en tu inventario in patient's inventory @@ -1571,6 +1597,7 @@ im Inventar des Patienten 個患者が保有 в инвентаре пациента + en el inventario del paciente in vehicle's inventory @@ -1582,6 +1609,7 @@ Nell'inventario del veicolo 個車両内に保有 в инвентаре транспорта + en el inventario del vehículo No effect until tourniquet removed @@ -1592,6 +1620,7 @@ Nessun effetto fino alla rimozione del laccio emostatico 止血帯を外すまで効果を発揮しません Никакого эффекта до тех пор, пока жгут не будет снят + Sin efecto hasta que se quita el torniquete Show Tourniquet Warning @@ -1602,6 +1631,7 @@ Mostra avviso di laccio emostatico 止血帯の警告を表示 Показать предупреждение о наложении жгута + Mostrar Advertencia de Torniquete Show a warning tooltip when a tourniquet will interfere with a medical action. @@ -1612,6 +1642,7 @@ Mostra un avviso se un laccio emostatico impedisce un trattamento medico. 止血帯が医療行為を妨げる場合には、警告ツールチップを表示します。 Показать всплывающую подсказку с предупреждением, когда жгут помешает медицинскому вмешательству. + Muestra un mensaje de advertencia cuando un torniquete interfiera con una acción médica. diff --git a/addons/medical_status/stringtable.xml b/addons/medical_status/stringtable.xml index f6f51b5533..ea3f77429b 100644 --- a/addons/medical_status/stringtable.xml +++ b/addons/medical_status/stringtable.xml @@ -126,6 +126,7 @@ Risque de perte d'arme 武器を落とす確率 Шанс выпадения оружия + Probabilidad de Soltar Arma Chance for a player to drop their weapon when going unconscious.\nHas no effect on AI. @@ -136,6 +137,7 @@ Pourcentage de chances pour un joueur de lâcher son arme lorsqu'il perd connaissance.\nAucun effet sur les IA. プレーヤーが意識を失ったときに武器を落とす可能性。\nAI には影響しません。 Шанс для игрока выронить свое оружие, когда он теряет сознание.\nНе влияет на ИИ + Probabilidad del jugador de soltar su arma cuando quedan inconscientes.\nNo tiene efecto sobre la IA. diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml index 29774efb3c..ea38c6fbe8 100644 --- a/addons/medical_treatment/stringtable.xml +++ b/addons/medical_treatment/stringtable.xml @@ -439,6 +439,7 @@ Tempo di scavo tomba 墓掘りの所要時間 Время рытья могилы + Tiempo de Cavado de Tumba Time, in seconds, required to dig a grave for a body. @@ -449,6 +450,7 @@ Tempo in secondi richiesto per seppellire un morto. 遺体の墓を掘るのに掛かる時間。 (秒単位) Время в секундах, необходимое для того, чтобы выкопать могилу для тела. + Tiempo, en segundos, requerido para cavar una tumba para un cuerpo. Allow Epinephrine @@ -3506,6 +3508,7 @@ Kein Schmerz 痛みはない Нет боли + Sin dolor In mild pain @@ -3627,6 +3630,7 @@ Kein IV IV なし Нет капельницы + Sin IV Blood Pressure @@ -4657,6 +4661,7 @@ Scava tomba per cadavere 墓を掘る Выкопать могилу для тела + Cavar tumba para cuerpo Digging grave for body... @@ -4667,6 +4672,7 @@ Scavando tomba per cadavere... 墓を掘っています Рытьё могилы для тела... + Cavando tumba para cuerpo... %1 has bandaged patient @@ -4919,6 +4925,7 @@ Controlla nome sulla lapide 墓石の名前を確認 Проверьте имя на надгробии + Comprobar nombre en la lápida Bandage Rollover @@ -4929,6 +4936,7 @@ Srotolamento Bendaggi 包帯の繰り越し Перевязка множественных ран + Vendaje múltiple If enabled, bandages can close different types of wounds on the same body part.\nBandaging multiple injuries will scale bandaging time accordingly. @@ -4939,6 +4947,7 @@ Se attivo, un singolo bendaggio potrà chiudere più ferite sulla stessa parte del corpo.\nBendare più ferite di conseguenza richiederà più tempo. 有効にすると、体の同じ部分にある別の種類の傷を一つの包帯で閉じることができます。\n複数の傷に包帯を巻くと、それに応じて包帯時間が変動します。 Если эта функция включена, бинты могут закрывать различные типы ран на одной и той же части тела.\nПри перевязке нескольких повреждений время перевязки будет увеличено соответствующим образом. + Si se habilita, las vendas pueden cerrar diferentes tipos de heridas en la misma parte del cuerpo.n\Vendar múltiples heridas escala el tiempo de vendado acorde. Bandage Effectiveness Coefficient @@ -4949,6 +4958,7 @@ Coefficiente di efficacia bendaggi 包帯有効性係数 Коэффициент эффективности повязки + Coeficiente de Efectividad de Vendado Determines how effective bandages are at closing wounds. @@ -4959,6 +4969,7 @@ Determina quanto i bendaggi sono efficaci nel chiudere le ferite. 包帯が傷をふさぐのにどれだけ効果的かを定義します。 Определяет, насколько эффективны бинты при закрытии ран. + Determina como de efectivos son los vendajes cerrando heridas. Medical Items @@ -4982,6 +4993,7 @@ 제우스 치료 시간 계수 Коэффициент времени обработки Zeus Coeff. de temps + Coeficiente de Tiempo del Tratamiento de Zeus Multiply all treatment times with this coefficient when in Zeus. @@ -4991,6 +5003,7 @@ 제우스일 때 모든 치료 시간에 이 계수를 곱합니다. Умножьте все время лечения на этот коэффициент, когда вы находитесь в Zeus. Coefficient de temps de traitement Zeus + Multiplica los tiempos de tratamientos por este coeficiente cuando se está en Zeus Painkillers @@ -5015,6 +5028,7 @@ 鎮痛剤を投与 진통제 투여 Administrer des analgésiques + Administrar Analgésicos Administering Painkillers... @@ -5023,6 +5037,7 @@ 鎮痛剤を投与しています・・・ 진통제 투여 중... Administration d'analgésiques... + Administrando Analgésicos... Over-the-counter analgesic used to combat light to moderate pain experiences. @@ -5031,6 +5046,7 @@ 軽度から中程度の痛みに対処するために使用される市販の鎮痛薬。 가벼운 통증부터 중간 정도의 통증을 퇴치하는 데 사용되는 일반의약품 진통제입니다. Analgésique sans ordonnance utilisé pour lutter contre les douleurs légères à modérées. + Analgésico sin receta médica usado para aplacar dolores de ligeros a moderados. Over-the-counter analgesic used to combat light to moderate pain experiences. @@ -5039,6 +5055,7 @@ 軽度から中程度の痛みに対処するために使用される市販の鎮痛薬。 가벼운 통증부터 중간 정도의 통증을 퇴치하는 데 사용되는 일반의약품 진통제입니다. Analgésique sans ordonnance utilisé pour lutter contre les douleurs légères à modérées. + Analgésico sin receta médica usado para aplacar dolores de ligeros a moderados. diff --git a/addons/medical_vitals/stringtable.xml b/addons/medical_vitals/stringtable.xml index eb0080bd07..54c19f53fa 100644 --- a/addons/medical_vitals/stringtable.xml +++ b/addons/medical_vitals/stringtable.xml @@ -9,6 +9,7 @@ バイタル 생명 Paramètres vitaux + Vitales Enable SpO2 Simulation @@ -17,6 +18,7 @@ SpO2シミュレーションを有効化 산소포화도 시뮬레이션 활성화 Activer la simulation de la SpO2 + Habilitar Simulación SpO2 Enables oxygen saturation simulation, providing variable heart rate and oxygen demand based on physical activity and altitude. Required for Airway Management. @@ -25,6 +27,7 @@ 酸素飽和度シミュレーションを有効にし、身体活動や標高に基づいて変動する心拍数と酸素要求量の機能を提供します。 気道管理に必要です。 산소포화도 시뮬레이션을 활성화하여 신체 활동과 고도에 따라 다양한 심박수와 산소 요구량을 제공합니다. 기도 관리에 필요합니다. Permet de simuler la saturation en oxygène, de modifier la fréquence cardiaque et la consommation d'oxygène en fonction de l'activité physique et de l'altitude. Nécessaire pour la gestion des voies respiratoires. + Habilita la saturación de oxígeno, utilizando la demanda de oxígeno y ritmo cardíaco basado en la actividad física y la altitud. Requerido para el Manejo de las Vías Aéreas. diff --git a/addons/nightvision/stringtable.xml b/addons/nightvision/stringtable.xml index e1345ec44e..1c1cd61ba7 100644 --- a/addons/nightvision/stringtable.xml +++ b/addons/nightvision/stringtable.xml @@ -132,6 +132,7 @@ 야투경 (3세대, 갈색, 백색광) JVN (Gen3, marron, WP) ПНВ (Gen3, Коричневый, БФ) + Gafas de visión nocturna (Gen3, Marrón, FB) Night Vision Goggles, White Phosphor @@ -142,6 +143,7 @@ 백색광 야투경 Jumelles Vision Nocturne, Phosphore blanc Очки ночного видения, белый фосфор + Gafas de Visión Nocturna, Fósforo Blanco NV Goggles (Gen3, Green) @@ -169,6 +171,7 @@ 야투경 (3세대, 녹색, 백색광) JVN (Gen3, vertes, WP) ПНВ (Gen3, Зелёный, БФ) + Gafas de visión nocturna (Gen3, Verde, FB) NV Goggles (Gen3, Black) @@ -196,6 +199,7 @@ 야투경 (3세대, 검정, 백색광) JVN (Gen3, noires, WP) ПНВ (Gen3, Чёрный, БФ) + Gafas de visión nocturna (Gen3, Negro, FB) NV Goggles (Gen4, Brown) @@ -218,6 +222,7 @@ 야투경 (4세대, 갈색, 백색광) JVN (Gen4, marron, WP) ПНВ (Gen4, Коричневый, БФ) + Gafas de visión nocturna (Gen4, Marrón, FB) NV Goggles (Gen4, Black) @@ -240,6 +245,7 @@ 야투경 (4세대, 검정, 백색광) JVN (Gen4, noires, WP) ПНВ (Gen4, Чёрный, БФ) + Gafas de visión nocturna (Gen4, Negro, FB) NV Goggles (Gen4, Green) @@ -262,6 +268,7 @@ 야투경 (4세대, 녹색, 백색광) JVN (Gen4, vertes, WP) ПНВ (Gen4, Зелёный, БФ) + Gafas de visión nocturna (Gen4, Verde, FB) NV Goggles (Wide, Brown) @@ -284,6 +291,7 @@ 야투경 (넓음, 갈색, 백색광) JVN (Large, marron, WP) ПНВ (Широкий, Коричневый, БФ) + Gafas de visión nocturna (Panorámicas, Marrón, FB) NV Goggles (Wide, Black) @@ -306,6 +314,7 @@ 야투경 (넓음, 검정, 백색광) JVN (Large, noires, WP) ПНВ (Широкий, Чёрный, БФ) + Gafas de visión nocturna (Panorámicas, Negro, FB) NV Goggles (Wide, Green) @@ -328,6 +337,7 @@ 야투경 (넓음, 녹색, 백색광) JVN (Large, vertes, WP) ПНВ (Широкий, Зелёный, БФ) + Gafas de visión nocturna (Panorámicas, Verde, FB) Brightness: %1 @@ -587,6 +597,7 @@ 야투경 세대 Génération de jumelles de vision nocturne Генерация ночного видения + Generación de Visión Nocturna Gen %1 @@ -597,6 +608,7 @@ %1세대 Gen %1 Генерация %1 + Gen %1 diff --git a/addons/overheating/stringtable.xml b/addons/overheating/stringtable.xml index 48399b443c..8676ff67bb 100644 --- a/addons/overheating/stringtable.xml +++ b/addons/overheating/stringtable.xml @@ -882,6 +882,7 @@ 노리쇠 방식 Тип болта Type d'obturateur + Tipo de Cerrojo Open Bolt @@ -890,6 +891,7 @@ 오픈 볼트 Открыть болт Obturateur ouvert + Cerrojo Abierto Closed Bolt @@ -898,6 +900,7 @@ 클로즈드 볼트 Закрыть болт Obturateur fermé + Cerrojo Cerrado Barrel Type @@ -906,6 +909,7 @@ 총열 방식 Тип ствола Type de canon + Tipo de Cañón Non-Removeable @@ -914,6 +918,7 @@ 제거 불가 Несъемный Inamovible + No-Desmontable Quick Change @@ -922,6 +927,7 @@ 신속 교체 Быстросъемный Changement rapide + Cambiado Rápido diff --git a/addons/refuel/stringtable.xml b/addons/refuel/stringtable.xml index 909a3f4587..648ee38c6d 100644 --- a/addons/refuel/stringtable.xml +++ b/addons/refuel/stringtable.xml @@ -506,6 +506,7 @@ 연료통 집어들기 Взять канистру с топливом Ramasser le réservoir de carburant + Coger garrafa de combustible Picking fuel canister up... @@ -515,6 +516,7 @@ 연료통 집어드는 중... Поднимаю канистру с топливом... Ramasser les bidons de carburant... + Cogiendo garrafa de combustible... Connect fuel canister @@ -524,6 +526,7 @@ 연료통 꽂기 Подсоединить канистру с топливом Raccorder le réservoir de carburant + Conectar garrafa de combustible Connecting fuel canister... @@ -533,6 +536,7 @@ 연료통 꽂는 중... Подсоединение топливной канистры... Raccorder le réservoir de carburant... + Conectando garrafa de combustible... Disconnect fuel canister @@ -542,6 +546,7 @@ 연료통 빼기 Отсоединить канистру с топливом Débrancher le réservoir de carburant + Desconectar garrafa de combustible Refuel hose length diff --git a/addons/reload/stringtable.xml b/addons/reload/stringtable.xml index e081834e29..2c4bbcab76 100644 --- a/addons/reload/stringtable.xml +++ b/addons/reload/stringtable.xml @@ -138,6 +138,7 @@ Taśma została połączona 탄띠가 연결되었습니다 Ремень был пристегнут + Cinta enganchada Belt could not be linked @@ -148,6 +149,7 @@ Taśma nie mogła być połączona 탄띠를 연결할 수 없습니다 Ремень не удалось пристегнуть + La cinta no ha podido ser enganchada diff --git a/addons/reloadlaunchers/stringtable.xml b/addons/reloadlaunchers/stringtable.xml index ac42ef4d99..b55ccde170 100644 --- a/addons/reloadlaunchers/stringtable.xml +++ b/addons/reloadlaunchers/stringtable.xml @@ -10,6 +10,7 @@ 동료의 장전에 대한 알림 표시 Affichage de notifications lors d'une rechargement par un ami Отображает уведомления о загрузке помощника + Mostrar notificaciones para recarga de compañero Displays notifications when an assistant loads a gunner's launcher. @@ -20,6 +21,7 @@ 부사수가 사수의 발사기를 장전할 때 알림을 표시합니다. Affiche une notofication lorsqu'un assistant recharge l'arme du tireur. Отображает уведомления, когда помощник загружает пусковую установку стрелка. + Mostrar notificaciones cuando un asistente recarga el lanzador del tirador. Load launcher @@ -47,6 +49,7 @@ %1 ładuje twoją wyrzutnię %1이(가) 당신의 발사기를 장전했습니다. %1 загружает Вашу установку + %1 está cargando tu lanzador %1 stopped loading your launcher @@ -57,6 +60,7 @@ %1 przestał ładować twoją wyrzutnię %1이(가) 당신의 발사기 장전을 멈췄습니다. %1 прекратил загружать Вашу установку + %1 paró de cargar tu lanzador Loading launcher... @@ -118,6 +122,7 @@ Wyrzutnia nie mogła być załadowana 발사기를 장전할 수 없습니다. Не удалось загрузить пусковую установку + El lanzador no ha podido ser cargado Buddy Loading @@ -128,6 +133,7 @@ Nachladen durch Kamerad バディローディング Перезарядка помощником + Cargado de Compañero diff --git a/addons/repair/stringtable.xml b/addons/repair/stringtable.xml index 775202ed3a..850f9dee7f 100644 --- a/addons/repair/stringtable.xml +++ b/addons/repair/stringtable.xml @@ -281,6 +281,7 @@ 전체 수리 시간 계수 Coefficient du temps de réparation complète Коэффициент времени полного ремонта + Coeficiente de Tiempo de Reparación Completa Modifies how long it takes to perform a Full Repair.\nThe repair time is based on the amount of repairs needed for each part, including those normally inaccessible. @@ -291,6 +292,7 @@ 전체적인 수리를 수행하는 데 걸리는 시간을 수정합니다.\n수리 시간은 일반적으로 접근할 수 없는 부품을 포함하여 각 부품에 필요한 수리 시간을 기준으로 합니다. Modifie la durée que prend une réparation complète.\nLe temps de réparation est basé sur la quantité de réparations requises pour chaque partie, incluant celles qui sont normalement inaccessibles. Изменяет время, необходимое для выполнения полного ремонта.\nВремя ремонта зависит от объема ремонтных работ, необходимых для каждой детали, включая те, которые обычно недоступны. + Modifica cuánto tiempo lleva realizar una Reparación Completa.\nEl tiempo de reparación está basado en la cantidad de reparaciones necesarias para cada parte, incluyendo aquellas que normalmente no son accesibles. Boost engineer training when in repair vehicles or facilities. Untrained becomes engineer, engineer becomes advanced engineer. @@ -1262,6 +1264,7 @@ タイヤ交換の許可 바퀴 교체 허용 Autoriser le remplacement des roues + Permitir Recambio de Rueda Who can remove and replace wheels? @@ -1287,6 +1290,7 @@ 바퀴 수리 허용 Autoriser le rafistolage des roues Разрешить починить колесо + Permitir Parcheo de Rueda Who can patch wheels? @@ -1297,6 +1301,7 @@ 누가 바퀴를 수리할 수 있습니까? Qui peut rafistoler les roues ? Кто может починить колеса? + Quién puede parchear ruedas? Allow Repair @@ -1957,6 +1962,7 @@ 바퀴 수리 아이템 필요 Exigences pour rafistoler une roue Требования для починки колеса + Requerimientos de Parcheo de Ruedas Items required to patch a wheel. @@ -1967,6 +1973,7 @@ 바퀴를 수리하기 위해 아이템이 필요합니다. Equipements requis pour rafistoler une roue. Предметы, необходимые для починки колеса. + Objetos requeridos para parchear una rueda. Misc Repair Requirements @@ -2142,6 +2149,7 @@ 부품 수리 시간 Temps de réparation des pièces Время ремонта детали + Tiempo de Reparación de Pieza Time in seconds to complete a repair. @@ -2152,6 +2160,7 @@ 수리를 완료하는 시간(초 단위) Durée en secondes pour terminer une réparation. Время завершения ремонта в секундах. + Tiempo en segundos para completar una reparación. Wheel Change Time @@ -2162,6 +2171,7 @@ 바퀴 교체 시간 Temps de changement d'une roue Время замены колеса + Tiempo de Cambio de Rueda Time in seconds to remove or change a wheel. @@ -2172,6 +2182,7 @@ 바퀴를 제거하거나 교체하는 데 걸리는 시간(초 단위) Durée en seconde pour enlever ou changer une roue. Время в секундах на снятие или замену колеса. + Tiempo en segundos para quitar o cambiar una rueda. Patch Wheel @@ -2182,6 +2193,7 @@ 바퀴 수리 Rafistoler la roue Чинить колесо + Parchear Rueda Patching Wheel... @@ -2192,6 +2204,7 @@ 바퀴 수리 중... Rafistolage de la roue... Починка колеса... + Parcheando Rueda... Wheel Patch Time @@ -2202,6 +2215,7 @@ 바퀴 수리 시간 Temps de rafistolage d'une roue Время починки полеса + Tiempo de Parcheo de Rueda Time it takes to patch a wheel by 5%. @@ -2212,6 +2226,7 @@ 바퀴를 5% 수리하는 데 걸리는 시간(초 단위) Durée pour rafistoler une roue de 5%. Время, необходимое для починки колеса, сокращается на 5%. + Tiempo que lleva parchear una rueda por cada 5%. Patch Wheel Threshold @@ -2222,6 +2237,7 @@ 바퀴 수리 한계점 Seuil de rafistolage d'une roue Порог починки колеса + Umbral de Parcheo de Rueda Maximum damage to which a wheel can be patched.\n0% means all damage can be repaired. @@ -2232,6 +2248,7 @@ 바퀴를 수리할 수 있는 최대 레벨입니다. Niveau maximum de dégâts jusqu'à laquelle une roue peut être réparée.\n0% signifie que la roue peut être reparée entièrement. Максимальный уровень, до которого колесо может быть починено. + Máximo daño que permite a una rueda ser parcheada.\n0% significa que todo el daño puede ser reparado. Wheel Patch Location @@ -2242,6 +2259,7 @@ 바퀴 수리 장소 Lieu de rafistolage des roues Место починки колеса + Localización para el Parcheo de Rueda Where the wheel can be patched. @@ -2252,6 +2270,7 @@ 바퀴를 수리할 수 있는 곳입니다. Lieu où les roues peuvent être rafistolées. Где колесо можно починить. + Dónde puede ser parcheada la rueda. On the ground @@ -2262,6 +2281,7 @@ 지면 위 Sur le terrain На земле + En el suelo On a vehicle @@ -2272,6 +2292,7 @@ 차량 Sur un véhicule На транспорте + En un vehículo diff --git a/addons/tagging/stringtable.xml b/addons/tagging/stringtable.xml index 4d32fac6d6..fa54b56b54 100644 --- a/addons/tagging/stringtable.xml +++ b/addons/tagging/stringtable.xml @@ -384,6 +384,7 @@ 차량 ID 마킹 Marquage ID des véhicules Идентификационная маркировка транспортного средства + Marcado Identificativo de Vehículo Replaces clan tag with stenciled text @@ -394,6 +395,7 @@ 클랜 태그를 스텐실 텍스트로 바꿉니다. Remplace le tag du clan par un texte au pochoir Заменяет тег клана трафаретным текстом + Reemplaza marca del clan con un texto serigrafiado diff --git a/addons/zeus/stringtable.xml b/addons/zeus/stringtable.xml index 8b3aaed92c..329a0a3bd7 100644 --- a/addons/zeus/stringtable.xml +++ b/addons/zeus/stringtable.xml @@ -1322,6 +1322,7 @@ 화물 내리기 Выгрузить из отсека Décharger de la cargaison + Descargar de la carga Toggle NVGs @@ -1968,6 +1969,7 @@ 의료 메뉴가 비활성화되었습니다 Медицинское меню отключено Le Menu médical est désactivé + El menú médico está deshabilitado Lay Trenchline @@ -1978,6 +1980,7 @@ Piazza Trincea 塹壕溝線を敷設 Проложить траншею + Poner una Trinchera +SHIFT to force (Can only lay N/S or E/W) @@ -1988,6 +1991,7 @@ +SHIFT per forzare (Può piazzare solo N/S o E/O +SHIFTキー で強制的に敷設 (北/南または東/西方向にのみ配置可能) +SHIFT на принудительное (может укладываться только на Север/Юг или Восток/Запад) + +SHIFT para forzar (Puede solo colocar en N/S or E/O) From b26d6543a6320000fe585913dd6237c9caca39e4 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sat, 11 May 2024 22:15:02 -0500 Subject: [PATCH 118/132] Prepare 3.17.1 Build 86 --- addons/main/script_version.hpp | 2 +- docs/_config.yml | 2 +- docs/_config_dev.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/main/script_version.hpp b/addons/main/script_version.hpp index 9223f27ea7..75b323ede3 100644 --- a/addons/main/script_version.hpp +++ b/addons/main/script_version.hpp @@ -1,4 +1,4 @@ #define MAJOR 3 #define MINOR 17 #define PATCHLVL 1 -#define BUILD 85 +#define BUILD 86 diff --git a/docs/_config.yml b/docs/_config.yml index c23538d799..ee7822969d 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -10,7 +10,7 @@ ace: major: 3 minor: 17 patch: 1 - build: 85 + build: 86 markdown: kramdown diff --git a/docs/_config_dev.yml b/docs/_config_dev.yml index e83f8e441f..348e1aee44 100644 --- a/docs/_config_dev.yml +++ b/docs/_config_dev.yml @@ -10,7 +10,7 @@ ace: major: 3 minor: 17 patch: 1 - build: 85 + build: 86 markdown: kramdown From a31608073edb40d7d1ad6e16bbc4a92ad5749279 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Tue, 21 May 2024 18:25:59 -0500 Subject: [PATCH 119/132] Maptools - Fix gps detection (#10007) * Maptools - Fix gps detection * Use `infoPanelComponents` Co-Authored-By: johnb432 <58661205+johnb432@users.noreply.github.com> --------- Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> --- addons/maptools/functions/fnc_canUseMapGPS.sqf | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/addons/maptools/functions/fnc_canUseMapGPS.sqf b/addons/maptools/functions/fnc_canUseMapGPS.sqf index 0bdd0d0ea6..e9ca813288 100644 --- a/addons/maptools/functions/fnc_canUseMapGPS.sqf +++ b/addons/maptools/functions/fnc_canUseMapGPS.sqf @@ -17,8 +17,7 @@ if (!visibleMap || {!alive ACE_player}) exitWith {false}; -private _gpsOpened = visibleGPS; -private _gpsAvailable = openGPS true; -if (!_gpsOpened) then {openGPS false}; +private _panels = flatten (ACE_player infoPanelComponents "left"); +private _index = _panels find "MinimapDisplayComponent"; -_gpsAvailable // return +_index != -1 && {_panels select (_index + 1)} From db2bf60c2871e7808b7eb3c5533b67b7da7bb8ec Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Wed, 22 May 2024 03:16:05 +0200 Subject: [PATCH 120/132] Cargo - Add documentation on adding cargo via config (#9994) * Fix bag of holdings in cargo * Update CfgVehicles.hpp * Update CfgVehicles.hpp * Revert space changes --- addons/cargo/CfgVehicles.hpp | 13 +++---------- docs/wiki/framework/cargo-framework.md | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/addons/cargo/CfgVehicles.hpp b/addons/cargo/CfgVehicles.hpp index 6f6a93e820..66fa98159e 100644 --- a/addons/cargo/CfgVehicles.hpp +++ b/addons/cargo/CfgVehicles.hpp @@ -48,15 +48,7 @@ class CfgVehicles { class Car: LandVehicle { GVAR(space) = 4; GVAR(hasCargo) = 1; - class ACE_Cargo { - /* - class Cargo { - class ACE_medicalSupplyCrate { - type = "ACE_medicalSupplyCrate"; - amount = 1; - }; - };*/ - }; + class ADDON {}; }; class Tank: LandVehicle { @@ -75,7 +67,7 @@ class CfgVehicles { GVAR(hasCargo) = 1; }; - // HEMTTs - Default at 10, some variants are altered based on model size and/or expected level of free space inside. + // HEMTTs - Default at 30, some variants are altered based on model size and/or expected level of free space inside. class Truck_01_base_F: Truck_F { GVAR(space) = 30; }; @@ -523,6 +515,7 @@ class CfgVehicles { class EventHandlers { class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {}; }; + GVAR(space) = 3; GVAR(hasCargo) = 1; GVAR(size) = 3; diff --git a/docs/wiki/framework/cargo-framework.md b/docs/wiki/framework/cargo-framework.md index 68b28f7fa7..a1d810ce9c 100644 --- a/docs/wiki/framework/cargo-framework.md +++ b/docs/wiki/framework/cargo-framework.md @@ -47,6 +47,24 @@ class CfgVehicles {

ace_cargo_hasCargo and ace_cargo_canLoad are only needed if you aren't inheriting from any of BI base classes or if you are trying to disable loading for a specific vehicle / object.

+### 1.3 Adding predefined cargo via config + +```cpp +class CfgVehicles { + class yourVehicleClass { + ace_cargo_space = 4; // Add if necessary + ace_cargo_hasCargo = 1; // Add if necessary + class ace_cargo { + class cargo { + class ACE_medicalSupplyCrate { // Doesn't have to have the same name as the item you're adding + type = "ACE_medicalSupplyCrate"; + amount = 1; + }; + }; + }; + }; +}; +``` ## 2. Events From 4cf61a026b0e266ecf8a5de5ae2a5d0c52b17391 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Wed, 22 May 2024 03:18:32 +0200 Subject: [PATCH 121/132] Interact Menu - Use hashmaps for interactions (#9920) * Use hashmaps for interactions * Update addons/interact_menu/functions/fnc_splitPath.sqf Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> * Account for case sensitivity * Update addons/interact_menu/functions/fnc_compileMenu.sqf Co-authored-by: PabstMirror * Update addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf Co-authored-by: PabstMirror --------- Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> Co-authored-by: PabstMirror --- addons/interact_menu/XEH_clientInit.sqf | 9 ++++----- addons/interact_menu/XEH_preInit.sqf | 6 +++--- .../functions/fnc_addActionToClass.sqf | 10 ++++------ .../functions/fnc_addMainAction.sqf | 8 ++------ .../interact_menu/functions/fnc_compileMenu.sqf | 16 ++++++++-------- .../functions/fnc_compileMenuSelfAction.sqf | 13 ++++++------- .../functions/fnc_initMenuReorder.sqf | 2 +- .../functions/fnc_removeActionFromClass.sqf | 9 ++++----- .../functions/fnc_renderActionPoints.sqf | 5 ++--- addons/interact_menu/functions/fnc_splitPath.sqf | 12 +++++++----- .../fnc_userActions_getHouseActions.sqf | 9 ++++----- .../functions/fnc_addPassengerActions.sqf | 6 +----- 12 files changed, 46 insertions(+), 59 deletions(-) diff --git a/addons/interact_menu/XEH_clientInit.sqf b/addons/interact_menu/XEH_clientInit.sqf index 5c9a2ecae0..d0c6d93940 100644 --- a/addons/interact_menu/XEH_clientInit.sqf +++ b/addons/interact_menu/XEH_clientInit.sqf @@ -3,16 +3,16 @@ if (!hasInterface) exitWith {}; // Wait until player controls (man,vehicle or uav) a thing before compiling the menu -GVAR(controllableSelfActionsAdded) = [] call CBA_fnc_createNamespace; +GVAR(controllableSelfActionsAdded) = createHashMap; DFUNC(newControllableObject) = { params ["_object"]; private _type = typeOf _object; TRACE_2("newControllableObject",_object,_type); if (_type == "") exitWith {}; - if (!(GVAR(controllableSelfActionsAdded) getVariable [_type, false])) then { + if !(_type in GVAR(controllableSelfActionsAdded)) then { [_type] call FUNC(compileMenuSelfAction); - GVAR(controllableSelfActionsAdded) setVariable [_type, true]; + GVAR(controllableSelfActionsAdded) set [_type, nil]; [{ TRACE_1("sending newControllableObject event",_this); // event for other systems to add self actions, running addActionToClass before this will cause compiling @@ -27,8 +27,7 @@ DFUNC(newControllableObject) = { GVAR(blockDefaultActions) = []; -GVAR(cachedBuildingTypes) = []; -GVAR(cachedBuildingActionPairs) = []; +GVAR(cachedBuildingTypes) = createHashMap; GVAR(ParsedTextCached) = []; diff --git a/addons/interact_menu/XEH_preInit.sqf b/addons/interact_menu/XEH_preInit.sqf index bf3278f0a3..88269bcc04 100644 --- a/addons/interact_menu/XEH_preInit.sqf +++ b/addons/interact_menu/XEH_preInit.sqf @@ -12,12 +12,12 @@ if (!hasInterface) exitWith { ADDON = true; }; ["All", "init", LINKFUNC(compileMenu)] call CBA_fnc_addClassEventHandler; -GVAR(ActNamespace) = [] call CBA_fnc_createNamespace; -GVAR(ActSelfNamespace) = [] call CBA_fnc_createNamespace; +GVAR(ActNamespace) = createHashMap; +GVAR(ActSelfNamespace) = createHashMap; // Compile actions for CAManBase now and use for all mans types ["CAManBase"] call FUNC(compileMenu); -GVAR(cacheManActions) = +(GVAR(ActNamespace) getVariable ["CAManBase", []]); // copy +GVAR(cacheManActions) = +(GVAR(ActNamespace) getOrDefault ["CAManBase" call EFUNC(common,getConfigName), []]); // copy // Event handlers for all interact menu controls DFUNC(handleMouseMovement) = { diff --git a/addons/interact_menu/functions/fnc_addActionToClass.sqf b/addons/interact_menu/functions/fnc_addActionToClass.sqf index 93d54c991c..ccea8c4654 100644 --- a/addons/interact_menu/functions/fnc_addActionToClass.sqf +++ b/addons/interact_menu/functions/fnc_addActionToClass.sqf @@ -48,6 +48,8 @@ if (param [4, false, [false]]) exitwith { (_parentPath + [_action select 0]) }; +_objectType = _objectType call EFUNC(common,getConfigName); + // Ensure the config menu was compiled first if (_typeNum == 0) then { [_objectType] call FUNC(compileMenu); @@ -56,18 +58,14 @@ if (_typeNum == 0) then { }; private _namespace = [GVAR(ActNamespace), GVAR(ActSelfNamespace)] select _typeNum; -private _actionTrees = _namespace getVariable _objectType; -if (isNil "_actionTrees") then { - _actionTrees = []; - _namespace setVariable [_objectType, _actionTrees]; -}; +private _actionTrees = _namespace getOrDefault [_objectType, [], true]; if (_parentPath isEqualTo ["ACE_MainActions"]) then { [_objectType, _typeNum] call FUNC(addMainAction); }; private _parentNode = [_actionTrees, _parentPath] call FUNC(findActionNode); -if (isNil {_parentNode}) exitWith { +if (isNil "_parentNode") exitWith { ERROR_4("Failed to add action - action (%1) to parent %2 on object %3 [%4]",(_action select 0),_parentPath,_objectType,_typeNum); [] }; diff --git a/addons/interact_menu/functions/fnc_addMainAction.sqf b/addons/interact_menu/functions/fnc_addMainAction.sqf index 83349c21b3..beb02997b9 100644 --- a/addons/interact_menu/functions/fnc_addMainAction.sqf +++ b/addons/interact_menu/functions/fnc_addMainAction.sqf @@ -19,14 +19,10 @@ params ["_objectType", "_typeNum"]; private _namespace = [GVAR(ActNamespace), GVAR(ActSelfNamespace)] select _typeNum; -private _actionTrees = _namespace getVariable _objectType; -if (isNil "_actionTrees") then { - _actionTrees = []; -}; - +private _actionTrees = _namespace getOrDefault [_objectType, []]; private _parentNode = [_actionTrees, ["ACE_MainActions"]] call FUNC(findActionNode); -if (isNil {_parentNode}) then { +if (isNil "_parentNode") then { TRACE_2("No Main Action on object",_objectType,_typeNum); private _mainAction = ["ACE_MainActions", localize ELSTRING(interaction,MainAction), "", {}, {true}] call FUNC(createAction); [_objectType, _typeNum, [], _mainAction] call EFUNC(interact_menu,addActionToClass); diff --git a/addons/interact_menu/functions/fnc_compileMenu.sqf b/addons/interact_menu/functions/fnc_compileMenu.sqf index 75d759465c..8c5d3c5fa1 100644 --- a/addons/interact_menu/functions/fnc_compileMenu.sqf +++ b/addons/interact_menu/functions/fnc_compileMenu.sqf @@ -17,22 +17,22 @@ params ["_target"]; -private _objectType = _target; -if (_target isEqualType objNull) then { - _objectType = typeOf _target; +private _objectType = if (_target isEqualType objNull) then { + typeOf _target +} else { + _target call EFUNC(common,getConfigName) }; -private _namespace = GVAR(ActNamespace); // Exit if the action menu is already compiled for this class -if (!isNil {_namespace getVariable _objectType}) exitWith {}; +if (_objectType in GVAR(ActNamespace)) exitWith {}; if (_objectType isKindOf "VirtualMan_F") exitWith { // these have config: isPlayableLogic = 1 TRACE_1("skipping playable logic",_objectType); - _namespace setVariable [_objectType, []]; + GVAR(ActNamespace) set [_objectType, []]; }; if ((_objectType isKindOf "CAManBase") && {!isNil QGVAR(cacheManActions)}) exitWith { - _namespace setVariable [_objectType, +GVAR(cacheManActions)]; // copy + GVAR(ActNamespace) set [_objectType, +GVAR(cacheManActions)]; // copy }; private _recurseFnc = { @@ -139,7 +139,7 @@ if (_objectType isKindOf "CAManBase") then { }; }; -_namespace setVariable [_objectType, _actions]; +GVAR(ActNamespace) set [_objectType, _actions]; /* [ diff --git a/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf b/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf index ed3a02dd14..8f19dfabbe 100644 --- a/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf +++ b/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf @@ -17,15 +17,14 @@ params ["_target"]; -private _objectType = _target; -if (_target isEqualType objNull) then { - _objectType = typeOf _target; +private _objectType = if (_target isEqualType objNull) then { + typeOf _target +} else { + _target call EFUNC(common,getConfigName) }; -private _namespace = GVAR(ActSelfNamespace); // Exit if the action menu is already compiled for this class -if (!isNil {_namespace getVariable _objectType}) exitWith {}; - +if (_objectType in GVAR(actSelfNamespace)) exitWith {}; private _recurseFnc = { params ["_actionsCfg"]; @@ -131,4 +130,4 @@ private _actions = [ ] ]; -_namespace setVariable [_objectType, _actions]; +GVAR(ActSelfNamespace) set [_objectType, _actions]; diff --git a/addons/interact_menu/functions/fnc_initMenuReorder.sqf b/addons/interact_menu/functions/fnc_initMenuReorder.sqf index 48445b3fa0..d55f2f06ea 100644 --- a/addons/interact_menu/functions/fnc_initMenuReorder.sqf +++ b/addons/interact_menu/functions/fnc_initMenuReorder.sqf @@ -17,7 +17,7 @@ params ["_class"]; -private _actionTrees = GVAR(ActSelfNamespace) getVariable _class; +private _actionTrees = GVAR(ActSelfNamespace) get _class; private _rootNode = [_actionTrees, ["ACE_SelfActions"]] call FUNC(findActionNode); private _rootActions = _rootNode select 1; private _settingCategoryPrefix = format ["ACE %1 - ", LELSTRING(Interaction,InteractionMenuSelf)]; diff --git a/addons/interact_menu/functions/fnc_removeActionFromClass.sqf b/addons/interact_menu/functions/fnc_removeActionFromClass.sqf index 6772b61c54..7585616ef6 100644 --- a/addons/interact_menu/functions/fnc_removeActionFromClass.sqf +++ b/addons/interact_menu/functions/fnc_removeActionFromClass.sqf @@ -19,17 +19,16 @@ params ["_objectType", "_typeNum", "_fullPath"]; +_objectType = _objectType call EFUNC(common,getConfigName); + private _res = _fullPath call FUNC(splitPath); _res params ["_parentPath", "_actionName"]; private _namespace = [GVAR(ActNamespace), GVAR(ActSelfNamespace)] select _typeNum; -private _actionTrees = _namespace getVariable _objectType; -if (isNil "_actionTrees") then { - _actionTrees = []; -}; +private _actionTrees = _namespace getOrDefault [_objectType, []]; private _parentNode = [_actionTrees, _parentPath] call FUNC(findActionNode); -if (isNil {_parentNode}) exitWith {}; +if (isNil "_parentNode") exitWith {}; // Iterate through children of the father private _found = false; diff --git a/addons/interact_menu/functions/fnc_renderActionPoints.sqf b/addons/interact_menu/functions/fnc_renderActionPoints.sqf index 058b5ed846..4ce37aa66b 100644 --- a/addons/interact_menu/functions/fnc_renderActionPoints.sqf +++ b/addons/interact_menu/functions/fnc_renderActionPoints.sqf @@ -61,7 +61,7 @@ private _fnc_renderNearbyActions = { } forEach GVAR(objectActionList); // Iterate through base level class actions and render them if appropiate - private _classActions = GVAR(ActNamespace) getVariable [typeOf _target, []]; + private _classActions = GVAR(ActNamespace) getOrDefault [typeOf _target, []]; { private _action = _x; // Try to render the menu @@ -95,8 +95,7 @@ private _fnc_renderSelfActions = { GVAR(objectActionList) = _target getVariable [QGVAR(selfActions), []]; // Iterate through base level class actions and render them if appropiate - private _namespace = GVAR(ActSelfNamespace); - private _classActions = _namespace getVariable typeOf _target; + private _classActions = GVAR(ActSelfNamespace) get typeOf _target; private _pos = if !(GVAR(useCursorMenu)) then { //Convert to ASL, add offset and then convert back to AGL (handles waves when over water) diff --git a/addons/interact_menu/functions/fnc_splitPath.sqf b/addons/interact_menu/functions/fnc_splitPath.sqf index 8c0856d118..8fabaca5a5 100644 --- a/addons/interact_menu/functions/fnc_splitPath.sqf +++ b/addons/interact_menu/functions/fnc_splitPath.sqf @@ -17,11 +17,13 @@ */ private _parentPath = []; -for [{private _i = 0},{_i < (count _this) - 1},{_i = _i + 1}] do { - _parentPath pushBack (_this select _i); -}; -private _actionName = if (count _this > 0) then { - _this select ((count _this) - 1); + +_parentPath append _this; + +private _count = count _this; + +private _actionName = if (_count > 0) then { + _parentPath deleteAt (_count - 1) // TODO: replace with _parentPath deleteAt [-1] and drop _count in 2.18 } else { "" }; diff --git a/addons/interact_menu/functions/fnc_userActions_getHouseActions.sqf b/addons/interact_menu/functions/fnc_userActions_getHouseActions.sqf index c11da0c271..8f28950840 100644 --- a/addons/interact_menu/functions/fnc_userActions_getHouseActions.sqf +++ b/addons/interact_menu/functions/fnc_userActions_getHouseActions.sqf @@ -17,8 +17,9 @@ params ["_typeOfBuilding"]; -private _searchIndex = GVAR(cachedBuildingTypes) find _typeOfBuilding; -if (_searchIndex != -1) exitWith {GVAR(cachedBuildingActionPairs) select _searchIndex}; +private _cachedMemPoints = GVAR(cachedBuildingTypes) get _typeOfBuilding; + +if (!isNil "_cachedMemPoints") exitWith {_cachedMemPoints}; private _memPoints = []; private _memPointsActions = []; @@ -148,8 +149,6 @@ private _ladders = getArray (configFile >> "CfgVehicles" >> _typeOfBuilding >> " } forEach _ladders; -GVAR(cachedBuildingTypes) pushBack _typeOfBuilding; -GVAR(cachedBuildingActionPairs) pushBack [_memPoints, _memPointsActions]; - +GVAR(cachedBuildingTypes) set [_typeOfBuilding, [_memPoints, _memPointsActions]]; [_memPoints, _memPointsActions] diff --git a/addons/interaction/functions/fnc_addPassengerActions.sqf b/addons/interaction/functions/fnc_addPassengerActions.sqf index a3d8c2eff0..9b8981bfd0 100644 --- a/addons/interaction/functions/fnc_addPassengerActions.sqf +++ b/addons/interaction/functions/fnc_addPassengerActions.sqf @@ -20,11 +20,7 @@ params ["", "", "_parameters"]; _parameters params ["_unit"]; -private _namespace = EGVAR(interact_menu,ActNamespace); -private _actionTrees = _namespace getVariable typeOf _unit; -if (isNil "_actionTrees") then { - _actionTrees = []; -}; +private _actionTrees = EGVAR(interact_menu,ActNamespace) getOrDefault [typeOf _unit, []]; private _actions = []; From 52762c1e62c24d9abcb04b672af661725ed07f17 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Tue, 21 May 2024 20:23:46 -0500 Subject: [PATCH 122/132] Arsenal - Changes for CBA Disposable hashs (#9998) * Arsenal - Changes for CBA Disposable hashs * Update addons/arsenal/functions/fnc_onSelChangedRight.sqf Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> * Update addons/arsenal/functions/fnc_onSelChangedRight.sqf Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> --------- Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> --- addons/arsenal/functions/fnc_onSelChangedRight.sqf | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/addons/arsenal/functions/fnc_onSelChangedRight.sqf b/addons/arsenal/functions/fnc_onSelChangedRight.sqf index ccb2988765..abec68ceee 100644 --- a/addons/arsenal/functions/fnc_onSelChangedRight.sqf +++ b/addons/arsenal/functions/fnc_onSelChangedRight.sqf @@ -69,7 +69,14 @@ switch (_currentItemsIndex) do { // Secondary weapon case IDX_CURR_SECONDARY_WEAPON_ITEMS: { private _currentItemInSlot = (GVAR(currentItems) select IDX_CURR_SECONDARY_WEAPON_ITEMS) select _itemIndex; - private _isDisposable = CBA_disposable_replaceDisposableLauncher && {!isNil {CBA_disposable_loadedLaunchers getVariable (secondaryWeapon GVAR(center))}}; + private _isDisposable = CBA_disposable_replaceDisposableLauncher && {!isNil "CBA_disposable_loadedLaunchers"} && + { + if (CBA_disposable_loadedLaunchers isEqualType createHashMap) then { // after CBA 3.18 + (secondaryWeapon GVAR(center)) in CBA_disposable_loadedLaunchers + } else { + !isNil {CBA_disposable_loadedLaunchers getVariable (secondaryWeapon player)} + } + }; // If removal if (_item == "") then { From 99d7e4d57b94296414565cedc0622dada66dc4a3 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Wed, 22 May 2024 03:24:50 +0200 Subject: [PATCH 123/132] Grenades - Add 3 more sounds to flashbang detonations (#9982) * Add 3 more sounds to flashbang detonations * Update addons/grenades/functions/fnc_flashbangThrownFuze.sqf Co-authored-by: PabstMirror --------- Co-authored-by: PabstMirror --- addons/grenades/functions/fnc_flashbangThrownFuze.sqf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/addons/grenades/functions/fnc_flashbangThrownFuze.sqf b/addons/grenades/functions/fnc_flashbangThrownFuze.sqf index 7f1a52417c..f966283f96 100644 --- a/addons/grenades/functions/fnc_flashbangThrownFuze.sqf +++ b/addons/grenades/functions/fnc_flashbangThrownFuze.sqf @@ -19,7 +19,8 @@ params ["_projectile"]; TRACE_1("params",_projectile); if (alive _projectile) then { - playSound3D ["A3\Sounds_F\arsenal\explosives\grenades\Explosion_HE_grenade_01.wss", _projectile, false, getPosASL _projectile, 5, 1.2, 400]; + private _soundFile = format ["A3\Sounds_F\arsenal\explosives\grenades\Explosion_HE_grenade_0%1.wss", floor (random 4) + 1]; + playSound3D [_soundFile, _projectile, false, getPosASL _projectile, 5, 1.2, 400]; ["ace_flashbangExploded", [getPosASL _projectile]] call CBA_fnc_globalEvent; }; From 052f1c95a33cb5030e735877c1611e60beacaab8 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Wed, 22 May 2024 08:32:46 +0200 Subject: [PATCH 124/132] Cargo - Add checks for adding cargo via config (#9999) * Add checks for cargo via config * Update fnc_initVehicle.sqf * Use loaded number instead of intended number --- addons/cargo/functions/fnc_addCargoItem.sqf | 21 +++++++++++++++------ addons/cargo/functions/fnc_initVehicle.sqf | 11 +++++++++-- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/addons/cargo/functions/fnc_addCargoItem.sqf b/addons/cargo/functions/fnc_addCargoItem.sqf index 38ccdc0dd9..de262bdcfb 100644 --- a/addons/cargo/functions/fnc_addCargoItem.sqf +++ b/addons/cargo/functions/fnc_addCargoItem.sqf @@ -7,9 +7,10 @@ * 0: Item to be loaded or * 1: Holder object (vehicle) * 2: Amount (default: 1) + * 3: Ignore interaction distance and stability checks (default: false) * * Return Value: - * None + * Objects loaded * * Example: * ["ACE_Wheel", cursorObject] call ace_cargo_fnc_addCargoItem @@ -17,21 +18,29 @@ * Public: No */ -params ["_item", "_vehicle", ["_amount", 1]]; -TRACE_3("params",_item,_vehicle,_amount); +params ["_item", "_vehicle", ["_amount", 1], ["_ignoreInteraction", false]]; +TRACE_4("params",_item,_vehicle,_amount,_ignoreInteraction); + +private _loaded = 0; // Get config sensitive case name if (_item isEqualType "") then { _item = _item call EFUNC(common,getConfigName); for "_i" from 1 to _amount do { - [_item, _vehicle] call FUNC(loadItem); + if !([_item, _vehicle, _ignoreInteraction] call FUNC(loadItem)) exitWith {}; + + _loaded = _loaded + 1; }; } else { - [_item, _vehicle] call FUNC(loadItem); + _loaded = parseNumber ([_item, _vehicle, _ignoreInteraction] call FUNC(loadItem)); _item = typeOf _item; }; +TRACE_1("loaded",_loaded); + // Invoke listenable event -["ace_cargoAdded", [_item, _vehicle, _amount]] call CBA_fnc_globalEvent; +["ace_cargoAdded", [_item, _vehicle, _loaded]] call CBA_fnc_globalEvent; + +_loaded // return diff --git a/addons/cargo/functions/fnc_initVehicle.sqf b/addons/cargo/functions/fnc_initVehicle.sqf index af80761fe0..25cebe5b13 100644 --- a/addons/cargo/functions/fnc_initVehicle.sqf +++ b/addons/cargo/functions/fnc_initVehicle.sqf @@ -52,14 +52,21 @@ if (isServer) then { private _cargoClassname = ""; private _cargoCount = 0; + private _loaded = 0; { _cargoClassname = getText (_x >> "type"); _cargoCount = getNumber (_x >> "amount"); - TRACE_3("adding ACE_Cargo",configName _x,_cargoClassname,_cargoCount); + TRACE_3("adding ace_cargo",configName _x,_cargoClassname,_cargoCount); - ["ace_addCargo", [_cargoClassname, _vehicle, _cargoCount]] call CBA_fnc_localEvent; + // Ignore stability check (distance check is also ignored with this, but it's ignored by default if item is a string) + _loaded = [_cargoClassname, _vehicle, _cargoCount, true] call FUNC(addCargoItem); + + // Let loop continue until the end, so that it prints everything into the rpt (there might be smaller items that could still fit in cargo) + if (_loaded != _cargoCount) then { + WARNING_5("%1 (%2) could not fit %3 %4 inside its cargo, only %5 were loaded.",_vehicle,_type,_cargoCount,_cargoClassname,_loaded); + }; } forEach ("true" configClasses (_config >> QUOTE(ADDON) >> "cargo")); }; From c03e08e51b026c6c0e4fb7d561d0c9c7f2991626 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Wed, 22 May 2024 22:08:09 +0200 Subject: [PATCH 125/132] Grenades - Change damage from M14 incendiary grenade (#9992) Doubled damage from M14 incendiary grenade --- addons/grenades/CfgAmmo.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/grenades/CfgAmmo.hpp b/addons/grenades/CfgAmmo.hpp index 5082dd432d..e911e23747 100644 --- a/addons/grenades/CfgAmmo.hpp +++ b/addons/grenades/CfgAmmo.hpp @@ -153,7 +153,7 @@ class CfgAmmo { class ACE_G_M14: SmokeShell { GVAR(incendiary) = 1; model = QPATHTOF(models\ace_anm14th3_armed.p3d); - hit = 5; + hit = 10; indirectHit = 4; indirectHitRange = 1.1; dangerRadiusHit = 50; From e1137ac9034e79f5763cc675bca93482f0cc6f86 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Wed, 22 May 2024 22:37:24 +0200 Subject: [PATCH 126/132] Fire - Remove unused plant integration (#9993) Removed unused plant integration in fire --- addons/fire/XEH_PREP.hpp | 1 - addons/fire/XEH_preInit.sqf | 2 -- addons/fire/functions/fnc_isBurning.sqf | 5 +---- addons/fire/functions/fnc_isPlant.sqf | 20 -------------------- 4 files changed, 1 insertion(+), 27 deletions(-) delete mode 100644 addons/fire/functions/fnc_isPlant.sqf diff --git a/addons/fire/XEH_PREP.hpp b/addons/fire/XEH_PREP.hpp index d9eacfdee0..8b2e8f6bd1 100644 --- a/addons/fire/XEH_PREP.hpp +++ b/addons/fire/XEH_PREP.hpp @@ -1,6 +1,5 @@ PREP(burn); PREP(isBurning); -PREP(isPlant); PREP(burnIndicator); PREP(burnReaction); PREP(fireManagerPFH); diff --git a/addons/fire/XEH_preInit.sqf b/addons/fire/XEH_preInit.sqf index 2fc794454d..894773534a 100644 --- a/addons/fire/XEH_preInit.sqf +++ b/addons/fire/XEH_preInit.sqf @@ -8,6 +8,4 @@ PREP_RECOMPILE_END; #include "initSettings.inc.sqf" -GVAR(burningPlants) = []; - ADDON = true; diff --git a/addons/fire/functions/fnc_isBurning.sqf b/addons/fire/functions/fnc_isBurning.sqf index 3bdbe560be..7cc06dc01d 100644 --- a/addons/fire/functions/fnc_isBurning.sqf +++ b/addons/fire/functions/fnc_isBurning.sqf @@ -17,7 +17,4 @@ params [["_unit", objNull, [objNull]]]; -_unit getVariable [QGVAR(burning), false] || { - GVAR(burningPlants) = GVAR(burningPlants) select {!isNull _x}; - _unit in GVAR(burningPlants) -} +_unit getVariable [QGVAR(burning), false] diff --git a/addons/fire/functions/fnc_isPlant.sqf b/addons/fire/functions/fnc_isPlant.sqf deleted file mode 100644 index f132fc72be..0000000000 --- a/addons/fire/functions/fnc_isPlant.sqf +++ /dev/null @@ -1,20 +0,0 @@ -#include "..\script_component.hpp" -/* - * Author: commy2 - * Check if object is a map placed bush or tree. - * - * Arguments: - * 0: Object - * - * Return Value: - * Is bush or tree? - * - * Example: - * cursorObject call ace_fire_fnc_isPlant - * - * Public: No - */ - -params [["_object", objNull, [objNull]]]; - -_object in nearestTerrainObjects [_object, ["TREE", "SMALL TREE", "BUSH"], 0.1] From 67fe22a5a6bce3b5cf22f614e61a61971e8cb5db Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Wed, 22 May 2024 22:38:59 +0200 Subject: [PATCH 127/132] Grenades - Make flashbang detonation sound configurable via config (#9985) * Added configurable flashbang detonation sound Updated documentation by filling missing information in * Update grenades-framework.md * Update grenades-framework.md --- addons/grenades/functions/fnc_flashbangThrownFuze.sqf | 11 +++++++++-- docs/wiki/framework/grenades-framework.md | 9 +++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/addons/grenades/functions/fnc_flashbangThrownFuze.sqf b/addons/grenades/functions/fnc_flashbangThrownFuze.sqf index f966283f96..1c9751da37 100644 --- a/addons/grenades/functions/fnc_flashbangThrownFuze.sqf +++ b/addons/grenades/functions/fnc_flashbangThrownFuze.sqf @@ -19,8 +19,15 @@ params ["_projectile"]; TRACE_1("params",_projectile); if (alive _projectile) then { - private _soundFile = format ["A3\Sounds_F\arsenal\explosives\grenades\Explosion_HE_grenade_0%1.wss", floor (random 4) + 1]; - playSound3D [_soundFile, _projectile, false, getPosASL _projectile, 5, 1.2, 400]; + private _sounds = getArray (_projectile call CBA_fnc_getObjectConfig >> QGVAR(flashbangExplodeSound)); + + (if (_sounds isEqualTo []) then { + [format ["A3\Sounds_F\arsenal\explosives\grenades\Explosion_HE_grenade_0%1.wss", floor (random 4) + 1], 5, 1.2, 400] + } else { + selectRandom _sounds + }) params ["_file", "_volume", "_pitch", "_distance"]; + + playSound3D [_file, _projectile, false, getPosASL _projectile, _volume, _pitch, _distance]; ["ace_flashbangExploded", [getPosASL _projectile]] call CBA_fnc_globalEvent; }; diff --git a/docs/wiki/framework/grenades-framework.md b/docs/wiki/framework/grenades-framework.md index fce3b480c2..14c72e1cb5 100644 --- a/docs/wiki/framework/grenades-framework.md +++ b/docs/wiki/framework/grenades-framework.md @@ -50,6 +50,10 @@ class CfgAmmo { ace_grenades_flashbangBangs = 6; // 6 bangs ace_grenades_flashbangInterval = 0.25; // 0.25 seconds between each subsequent bang ace_grenades_flashbangIntervalMaxDeviation = 0.05; // Deviation of up to ± 0.05 seconds on each fuse + ace_grenades_flashbangExplodeSound[] = { // Sound that is played upon detonation + {"A3\Sounds_F\arsenal\explosives\grenades\Explosion_HE_grenade_01.wss", 5, 1.2, 400}, // file path, volume, pitch, max distance + {"A3\Sounds_F\arsenal\explosives\grenades\Explosion_HE_grenade_02.wss", 5, 1.2, 400} + }; }; }; ``` @@ -70,6 +74,11 @@ The average amount of time in seconds, after `explosionTime` has passed, between The amount of randomness in the fuse time. +### 2.1.5 ace_grenades_flashbangExplodeSound + +The sounds that can be used when the flashbang detonates. It randomly selects an entry from this array (equal chances, there are no weights involved). +If not defined, `[format ["A3\Sounds_F\arsenal\explosives\grenades\Explosion_HE_grenade_0%1.wss", floor (random 4) + 1], 5, 1.2, 400]` is used as a default instead (4 sounds total). + ### 2.2 Incendiary Config Values ```cpp From f97f11d224388c0b433ce3524ee0cb25f2d5f167 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Wed, 22 May 2024 21:19:40 -0500 Subject: [PATCH 128/132] AdvThrowing - Fix showing wind info when no grenades in inventory (#10008) AdvThrowing - Fix showing wind info if no grenades in inventory --- addons/advanced_throwing/functions/fnc_prepare.sqf | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/addons/advanced_throwing/functions/fnc_prepare.sqf b/addons/advanced_throwing/functions/fnc_prepare.sqf index 7926c2c864..3008b8e540 100644 --- a/addons/advanced_throwing/functions/fnc_prepare.sqf +++ b/addons/advanced_throwing/functions/fnc_prepare.sqf @@ -18,15 +18,6 @@ params ["_unit"]; TRACE_1("params",_unit); -// Temporarily enable wind info, to aid in throwing smoke grenades effectively -if ( - GVAR(enableTempWindInfo) && - {!(missionNamespace getVariable [QEGVAR(weather,WindInfo), false])} -) then { - [] call EFUNC(weather,displayWindInfo); - GVAR(tempWindInfo) = true; -}; - // Select next throwable if one already in hand if (_unit getVariable [QGVAR(inHand), false]) exitWith { TRACE_1("inHand",_unit); @@ -44,6 +35,11 @@ if (isNull (_unit getVariable [QGVAR(activeThrowable), objNull]) && {(currentThr TRACE_1("no throwables",_unit); }; +// Temporarily enable wind info, to aid in throwing smoke grenades effectively +if (GVAR(enableTempWindInfo) && {!(missionNamespace getVariable [QEGVAR(weather,WindInfo), false])}) then { + [] call EFUNC(weather,displayWindInfo); + GVAR(tempWindInfo) = true; +}; _unit setVariable [QGVAR(inHand), true]; From 7c65f8503d8dd89965780a3889dfa7fea959eb82 Mon Sep 17 00:00:00 2001 From: Dystopian Date: Thu, 23 May 2024 22:47:19 +0300 Subject: [PATCH 129/132] Refuel - Add enable setting (#7613) * Add enable setting * Exclude man class init * Fix multiplayer terrain pump fuel sync * Add terrain pumps positions * Add vanilla fuel cargo restoring before destroying * Add Livonia positions by bux * Fix terrain pumps destruction * Improve settings init * Fix double settings category * Check enabled var in public functions * Fix fnc_makeSource * Handle recent CUP Terrains changes * Update includes * Fix issues introduced in #9133 * Change warning Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> * Optimisations and cleanup - Use hashmaps wherever possible - Reduced pump search radius by ~30% - Sorted pumps alphabetically and sorted positions by "smallest" first, for consistency * Add init debug trace * compileScript in dev * yoda conditions & DFUNC macro * Wait until CBA settings are ready * Update Chernarus 2020 and add more maps configs * Remove vanilla fuel cargo restoring before destroying --------- Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> --- addons/refuel/ACE_Refuel_Positions.hpp | 90 ++++++++ addons/refuel/Cfg3DEN.hpp | 7 +- addons/refuel/CfgVehicles.hpp | 36 +-- addons/refuel/XEH_PREP.hpp | 1 + addons/refuel/XEH_postInit.sqf | 212 +++++++++++------- addons/refuel/XEH_preStart.sqf | 39 +++- addons/refuel/config.cpp | 1 + .../dev/exportTerrainRefuelPositions.sqf | 84 +++++++ addons/refuel/dev/test_debugConfigs.sqf | 16 +- addons/refuel/functions/fnc_getFuelCargo.sqf | 20 ++ addons/refuel/functions/fnc_makeJerryCan.sqf | 7 + addons/refuel/functions/fnc_makeSource.sqf | 19 +- addons/refuel/initSettings.inc.sqf | 10 + docs/wiki/framework/refuel-framework.md | 2 +- 14 files changed, 406 insertions(+), 138 deletions(-) create mode 100644 addons/refuel/ACE_Refuel_Positions.hpp create mode 100644 addons/refuel/dev/exportTerrainRefuelPositions.sqf create mode 100644 addons/refuel/functions/fnc_getFuelCargo.sqf diff --git a/addons/refuel/ACE_Refuel_Positions.hpp b/addons/refuel/ACE_Refuel_Positions.hpp new file mode 100644 index 0000000000..cb03f53247 --- /dev/null +++ b/addons/refuel/ACE_Refuel_Positions.hpp @@ -0,0 +1,90 @@ +class GVAR(positions) { + Altis[] = { /* Altis */ {"Land_fs_feed_F", {{3757,13478,0},{4001,12592,0},{5023,14430,0},{5769,20086,0},{6199,15081,0},{6798,15561,0},{8482,18261,0},{9026,15729,0},{9206,12112,0},{11832,14156,0},{12025,15830,0},{14173,16542,0},{14221,18303,0},{15297,17566,0},{15781,17453,0},{16751,12513,0},{16875,15469,0},{17417,13937,0},{19961,11454,0},{20785,16666,0},{21231,7117,0},{23379,19799,0},{25701,21373,0}}}}; + Stratis[] = { /* Stratis */ {"Land_FuelStation_Feed_F", {{2708,5788,0}}}}; + VR[] = {}; + Malden[] = { /* Malden 2035 */ + {"Land_fs_feed_F", {{3227,6291,0},{5111,9062,0},{5504,3500,0},{6633,8807,0},{7047,7052,0}}}, + {"Land_FuelStation_01_pump_malevil_F", {{7224,7772,0},{8047,4023,0}}}, + {"Land_FuelStation_Feed_F", {{10063,3988,0},{11600,4477,0}}} + }; + Tanoa[] = { /* Tanoa */ + {"Land_fs_feed_F", {{2132,3360,0},{2452,7435,0},{3030,11316,0},{5174,8806,0},{5380,4093,0},{5594,12508,0},{7978,7419,0},{8319,9709,0},{8494,12432,0},{8954,13678,0},{8970,10332,0},{10827,6490,0},{10941,9855,0},{11146,5152,0},{11631,2999,0},{14261,11513,0},{14365,8743,0}}}, + {"Land_FuelStation_01_pump_F", {{1865,12128,0},{5409,9905,0},{5682,10165,0},{5776,4222,0},{5793,10825,0},{6592,13080,0},{6887,7491,0},{7359,7998,0},{9954,13467,0},{11635,13047,0},{11694,2271,0},{12613,7583,0}}} + }; + Enoch[] = { /* Livonia */ + {"Land_FuelStation_03_pump_F", {{2008,7365,0},{6259,3949,0}}}, + {"Land_FuelStation_Feed_F", {{10208,2173,0}}} + }; + + Bootcamp_ACR[] = { /* CUP Bukovina */ {"Land_A_FuelStation_Feed", {{652,473,0},{2849,1612,0}}}}; + Woodland_ACR[] = { /* CUP Bystrica */ {"Land_A_FuelStation_Feed", {{447,1381,0},{1302,2185,0},{1855,6852,0},{4102,1195,0},{4755,4499,0}}}}; + chernarus[] = { /* CUP Chernarus (Autumn) */ {"Land_A_FuelStation_Feed", {{2021,2242,0},{2692,5602,0},{2997,7471,0},{3648,8968,0},{4733,6381,0},{5847,2191,0},{5849,10112,0},{6705,2996,0},{7255,7662,0},{9502,2005,0},{10154,5300,0},{10446,8866,0},{10726,10786,0},{12988,10076,0},{13385,6603,0}}}}; + chernarus_summer[] = { /* CUP Chernarus (Summer) */ {"Land_A_FuelStation_Feed", {{2021,2242,0},{2685,5606,0},{2998,7473,0},{3652,8973,0},{4733,6381,0},{5854,2193,0},{5849,10112,0},{6702,2995,0},{7255,7662,0},{9502,2005,0},{10154,5300,0},{10452,8869,0},{10726,10786,0},{13001,10074,0},{13398,6606,0}}}}; + Chernarus_Winter[] = { /* CUP Chernarus (Winter) */ {"Land_A_FuelStation_Feed", {{2021,2242,0},{2685,5604,0},{2997,7471,0},{3657,8979,0},{4733,6381,0},{5854,2193,0},{5849,10112,0},{6702,2995,0},{7255,7662,0},{9503,2019,0},{10155,5309,0},{10452,8869,0},{10726,10786,0},{12994,10075,0},{13385,6603,0}}}}; + cup_chernarus_A3[] = { /* CUP Chernarus 2020 */ + {"Land_fs_feed_F", {{2511,5279,0}}}, + {"Land_FuelStation_03_pump_F", {{313,9385,0},{1129,2400,0},{2021,2242,0},{2692,5602,0},{2991,7471,1},{3007,12654,0},{3648,8968,0},{4328,13081,0},{4733,6381,0},{5847,2191,0},{5849,10112,0},{6699,3001,0},{7255,7662,0},{7494,12662,0},{9502,2005,0},{10155,5309,0},{10452,8869,0},{10726,10786,0},{13001,10074,0},{13398,6606,0},{13569,13329,0}}} + }; + Desert_E[] = { /* CUP Desert */ }; + porto[] = { /* CUP Porto */ }; + ProvingGrounds_PMC[] = { /* CUP Proving Grounds */ {"Land_FuelStation_Feed_PMC", {{698,1208,0}}}}; + intro[] = { /* CUP Rahmadi */ }; + sara[] = { /* CUP Sahrani */ + {"Land_Benzina_schnell", {{8473,9423,0},{9227,5840,0},{9433,5187,0},{10168,6423,0},{10932,9475,0},{11233,6114,0},{11756,10227,0},{12289,6833,0}}}, + {"Land_Fuelstation_army", {{9568,9819,0},{19294,13879,0}}}, + }; + sara_dbe1[] = { /* CUP United Sahrani */ + {"Land_Benzina_schnell", {{8473,9423,0},{9227,5840,0},{9433,5187,0},{10168,6423,0},{10932,9475,0},{11233,6114,0},{11756,10227,0},{12289,6833,0}}}, + {"Land_Fuelstation_army", {{9568,9819,0},{19294,13879,0}}} + }; + saralite[] = { /* CUP Southern Sahrani */ + {"Land_Benzina_schnell", {{3593,6663,0},{4347,3080,0},{4553,2427,0},{5288,3663,0},{6052,6715,0},{6353,3354,0},{6876,7467,0},{7409,4073,0}}}, + {"Land_Fuelstation_army", {{4688,7059,0}}} + }; + Shapur_BAF[] = { /* CUP Shapur */ {"Land_Ind_FuelStation_Feed_EP1", {{1512,1298,0}}}}; + takistan[] = { /* CUP Takistan */ {"Land_Ind_FuelStation_Feed_EP1", {{2004,11720,0},{3081,9848,0},{3549,4197,0},{5538,9284,0},{5836,5771,0},{7497,1818,0},{8248,7800,0},{10422,6328,0},{10647,11021,0}}}}; + Mountains_ACR[] = { /* CUP Takistan Mountains */ {"Land_Ind_FuelStation_Feed_EP1", {{2962,4197,0},{5249,5771,0}}}}; + utes[] = { /* CUP Utes */ }; + zargabad[] = { /* CUP Zargabad */ {"Land_Ind_FuelStation_Feed_EP1", {{3736,2784,0},{3867,4208,0},{3871,5980,0},{5027,1906,0}}}}; + + pja310[] = { /* G.O.S Al Rayak */ {"Land_Ind_FuelStation_Feed_EP1", {{887,18588,0},{964,18356,0},{1196,18463,0},{1872,8754,0},{2051,8437,0},{2125,8238,0},{2240,8584,0},{2310,8566,0},{2366,3901,0},{2879,13142,0},{3880,10361,0},{4056,13261,0},{4122,13487,0},{4302,13628,0},{4475,13377,0},{4556,13742,0},{6461,3372,0},{7216,6059,0},{7228,6344,0},{7416,6099,0},{7472,6838,0},{7591,6081,0},{11650,3536,0},{14863,7292,0},{16466,18897,0},{16476,19116,0},{16642,18994,0},{16676,19199,0},{16858,10558,0},{16908,9959,0},{17120,3706,0},{17100,4375,0},{18056,4133,0},{18229,4066,0},{18235,4571,0},{18814,5010,0}}}}; + australia[] = { /* Aussie Australia v5.09 */ + {"Land_fs_feed_F", {{4614,16978,0},{5509,19273,0},{5487,19276,0},{5508,19330,0},{5540,19357,0},{5564,19377,0},{5623,19376,0},{5643,19352,0},{6355,17860,0},{12811,27772,0},{15837,33438,0},{16335,33436,0},{16367,33436,0},{17127,33902,0},{20754,12737,0},{20874,12793,0},{20901,12793,1},{22127,25635,0},{22127,25666,0},{22162,25712,0},{22194,25712,0},{22213,25630,0},{22315,19235,0},{22595,24757,0},{24909,13855,0},{25050,12786,0},{25071,12786,0},{26085,11260,1},{26212,11174,0},{26824,28005,0},{27719,17108,0},{27757,12033,0},{28473,35132,0},{30707,11879,0},{31091,5370,0},{31096,10918,0},{31096,10945,0},{31165,10914,0},{31165,10958,0},{31313,16763,0},{31515,9673,0},{31515,9652,0},{31758,4861,0},{32224,2736,0},{33919,13364,0},{33936,13350,0},{34789,26383,0},{35274,26021,2},{35786,12148,0},{35765,12170,0},{35835,12145,0},{35833,12188,0},{35812,12210,0},{36199,16479,0},{36399,13140,0},{36593,12065,0},{36574,13089,0},{36595,13089,0},{36597,13282,0},{38153,14544,0},{38520,18891,0},{38515,20173,0},{38535,20198,0},{38565,20198,0}}}, + {"Land_FuelStation_01_pump_F", {{5495,18693,0},{32067,29608,0},{32087,29611,0},{33215,4147,0},{37293,13172,0},{37293,13193,0}}}, + {"Land_FuelStation_Feed_F", {{19303,16449,0},{31064,20116,0}}} + }; + Farabad[] = { /* Farabad */ + {"Land_Benzina_schnell", {{592,7505,0},{804,1445,0},{3132,3129,0}}}, + {"Land_fs_feed_F", {{1920,4960,0},{5052,4703,1},{9456,9277,0}}}, + {"Land_FuelStation_01_pump_F", {{2378,6248,0},{7092,534,0}}}, + {"Land_Ind_FuelStation_Feed_EP1", {{4788,5525,0}}} + }; + IslaPera[] = { /* Isla Pera */ + {"Land_fs_feed_F", {{1855,2866,0}}}, + {"Land_FuelStation_01_pump_malevil_F", {{3981,2065,0},{5306,8796,0},{9236,4287,0}}} + }; + VTF_Lybor[] = { /* Lybor */ + {"Land_FuelStation_03_pump_F", {{3879,3823,0}}}, + {"Land_FuelStation_Feed_F", {{1831,2694,0},{2175,3323,0},{3304,2981,0},{4271,3024,0}}} + }; + rof_mok[] = { /* Mull of Kintyre, Scotland */ + {"Land_A_FuelStation_Feed", {{12837,5124,1},{15271,17533,0},{19453,21896,0}}}, + {"Land_fs_feed_F", {{7492,17369,0}}}, + {"Land_Fuelstation", {{10284,18679,0}}}, + {"Land_Ind_FuelStation_Feed_EP1", {{9762,16325,0}}} + }; + pulau[] = { /* Pulau */ + {"Land_fs_feed_F", {{2368,3128,0},{4891,7168,0},{7358,7368,0}}}, + {"Land_FuelStation_Feed_F", {{5994,5789,0}}} + }; + WL_Rosche[] = { /* Rosche, Germany (2.0) */ + {"Land_fs_feed_F", {{693,4803,0},{12059,6700,0},{13320,14822,0}}}, + {"Land_FuelStation_01_pump_F", {{447,6859,0}}}, + {"Land_Ind_FuelStation_Feed_EP1", {{1437,5455,0}}} + }; + Kapaulio[] = { /* Saint Kapaulio */ + {"Land_fs_feed_F", {{931,7647,0},{958,6796,0},{2034,9426,0},{2563,9427,0},{3500,8110,0},{3602,6082,0},{4222,6308,0},{4561,693,0},{8077,5906,0},{8434,13145,0},{8525,17299,0},{9265,7155,0},{10527,18267,0},{12078,1846,0},{12833,6464,0},{13433,6327,0},{14084,6308,0},{14172,7786,0},{14831,4649,0},{16080,14743,0},{17356,2312,0},{18047,5254,0},{18318,5042,0}}}, + {"Land_FuelStation_01_pump_malevil_F", {{18039,18139,0}}}, + {"Land_FuelStation_Feed_F", {{756,12133,0},{1239,7346,0},{1726,17469,0},{3113,10070,0},{3828,8362,0},{5668,16967,0},{7435,14185,0},{7543,12107,0},{8366,6086,0},{9672,9586,0},{11749,12255,0},{12802,10022,0},{13989,3591,0},{15198,10900,0},{19063,1654,0},{19378,18517,0}}} + }; +}; diff --git a/addons/refuel/Cfg3DEN.hpp b/addons/refuel/Cfg3DEN.hpp index 3383107995..00d5453d95 100644 --- a/addons/refuel/Cfg3DEN.hpp +++ b/addons/refuel/Cfg3DEN.hpp @@ -1,7 +1,4 @@ -#define GET_NUMBER(config,default) (if (isNumber (config)) then {getNumber (config)} else {default}) #define GET_1ST_ARRAY(config) (if (isArray (config)) then {getArray (config) select 0} else {[ARR_3(0,0,0)]}) - -#define DEFAULT_FUELCARGO GET_NUMBER(configOf _this >> QQGVAR(fuelCargo),REFUEL_DISABLED_FUEL) #define DEFAULT_HOOKS GET_1ST_ARRAY(configOf _this >> QQGVAR(hooks)) class Cfg3DEN { @@ -14,8 +11,8 @@ class Cfg3DEN { tooltip = CSTRING(fuelCargo_edenDesc); property = QGVAR(fuelCargo); control = "EditShort"; - expression = QUOTE(if (_value != DEFAULT_FUELCARGO) then {[ARR_2(_this,_value)] call DFUNC(makeSource)}); - defaultValue = QUOTE(DEFAULT_FUELCARGO); + expression = QUOTE(if (_value != (_this call FUNC(getFuelCargo))) then {[ARR_2(_this,_value)] call FUNC(makeSource)}); + defaultValue = QUOTE(_this call FUNC(getFuelCargo)); validate = "number"; condition = "(1-objectBrain)*(1-objectAgent)"; typeName = "NUMBER"; diff --git a/addons/refuel/CfgVehicles.hpp b/addons/refuel/CfgVehicles.hpp index 5fba336943..44575a141d 100644 --- a/addons/refuel/CfgVehicles.hpp +++ b/addons/refuel/CfgVehicles.hpp @@ -1,3 +1,5 @@ +#define XEH_INHERITED class EventHandlers {class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};} + class CBA_Extended_EventHandlers; class CfgNonAIVehicles { @@ -45,9 +47,7 @@ class CfgVehicles { class ThingX; class GVAR(fuelNozzle): ThingX { - class EventHandlers { - class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {}; - }; + XEH_INHERITED; displayName = QGVAR(fuelNozzle); scope = 1; @@ -275,12 +275,6 @@ class CfgVehicles { GVAR(hooks)[] = {{0.38,-3.17,-0.7},{-0.41,-3.17,-0.7}}; GVAR(fuelCargo) = 2000; }; - class C_Van_01_fuel_F: Van_01_fuel_base_F { - transportFuel = 0; //1k - }; - class I_G_Van_01_fuel_F: Van_01_fuel_base_F { - transportFuel = 0; //1k - }; class Tank_F: Tank { GVAR(fuelCapacity) = 1200; @@ -295,7 +289,6 @@ class CfgVehicles { class B_APC_Tracked_01_base_F: APC_Tracked_01_base_F {}; class B_APC_Tracked_01_CRV_F: B_APC_Tracked_01_base_F { - transportFuel = 0; //3k GVAR(hooks)[] = {{-1.08,-4.81,-0.8}}; GVAR(fuelCargo) = 1000; }; @@ -407,7 +400,6 @@ class CfgVehicles { // Vanilla fuel vehicles class Truck_02_fuel_base_F: Truck_02_base_F { - transportFuel = 0; //3k GVAR(hooks)[] = {{0.99,-3.47,-0.67},{-1.04,-3.47,-0.67}}; GVAR(fuelCargo) = 10000; }; @@ -416,13 +408,11 @@ class CfgVehicles { }; class B_Truck_01_fuel_F: B_Truck_01_mover_F { - transportFuel = 0; //3k GVAR(hooks)[] = {{0.28,-4.99,-0.3},{-0.25,-4.99,-0.3}}; GVAR(fuelCargo) = 10000; }; class O_Truck_03_fuel_F: Truck_03_base_F { - transportFuel = 0; //3k GVAR(hooks)[] = {{1.3,-1.59,-0.62},{-1.16,-1.59,-0.62}}; GVAR(fuelCargo) = 10000; }; @@ -436,20 +426,17 @@ class CfgVehicles { class Pod_Heli_Transport_04_base_F: Slingload_base_F {}; class Land_Pod_Heli_Transport_04_fuel_F: Pod_Heli_Transport_04_base_F { - transportFuel = 0; //3k GVAR(hooks)[] = {{-1.49,1.41,-0.3}}; GVAR(fuelCargo) = 10000; }; class Slingload_01_Base_F: Slingload_base_F {}; class B_Slingload_01_Fuel_F: Slingload_01_Base_F { - transportFuel = 0; //3k GVAR(hooks)[] = {{0.55,3.02,-0.5},{-0.52,3.02,-0.5}}; GVAR(fuelCargo) = 10000; }; class O_Heli_Transport_04_fuel_F: Heli_Transport_04_base_F { - transportFuel = 0; //3k GVAR(hooks)[] = {{-1.52,1.14,-1.18}}; GVAR(fuelCargo) = 10000; }; @@ -466,11 +453,7 @@ class CfgVehicles { }; }; class Land_StorageBladder_01_F: StorageBladder_base_F { - class EventHandlers { - class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {}; - }; - - transportFuel = 0; //60k + XEH_INHERITED; GVAR(hooks)[] = {{-3.35,2.45,0.17}}; GVAR(fuelCargo) = 60000; }; @@ -486,36 +469,35 @@ class CfgVehicles { }; }; class Land_FlexibleTank_01_F: FlexibleTank_base_F { - transportFuel = 0; //300 GVAR(hooks)[] = {{0, 0, 0.5}}; GVAR(fuelCargo) = 300; }; // Vanilla buildings class Land_Fuelstation_Feed_F: House_Small_F { - transportFuel = 0; //50k + XEH_INHERITED; GVAR(hooks)[] = {{0,0,-0.5}}; GVAR(fuelCargo) = REFUEL_INFINITE_FUEL; }; class Land_fs_feed_F: House_Small_F { - transportFuel = 0; //50k + XEH_INHERITED; GVAR(hooks)[] = {{-0.4,0.022,-0.23}}; GVAR(fuelCargo) = REFUEL_INFINITE_FUEL; }; class Land_FuelStation_01_pump_F: House_F { - transportFuel = 0; //50k + XEH_INHERITED; GVAR(hooks)[] = {{0, 0.4, -0.5}, {0, -0.4, -0.5}}; GVAR(fuelCargo) = REFUEL_INFINITE_FUEL; }; class Land_FuelStation_01_pump_malevil_F: House_F { - transportFuel = 0; //50k + XEH_INHERITED; GVAR(hooks)[] = {{0, 0.4, -0.5}, {0, -0.4, -0.5}}; GVAR(fuelCargo) = REFUEL_INFINITE_FUEL; }; class Land_FuelStation_03_pump_F: House_F { // Enoch - transportFuel = 0; //50k + XEH_INHERITED; GVAR(hooks)[] = {{0, 0.4, -0.5}, {0, -0.4, -0.5}}; GVAR(fuelCargo) = REFUEL_INFINITE_FUEL; }; diff --git a/addons/refuel/XEH_PREP.hpp b/addons/refuel/XEH_PREP.hpp index 077c8f1aed..cb9279500b 100644 --- a/addons/refuel/XEH_PREP.hpp +++ b/addons/refuel/XEH_PREP.hpp @@ -11,6 +11,7 @@ PREP(disconnect); PREP(dropNozzle); PREP(getCapacity); PREP(getFuel); +PREP(getFuelCargo); PREP(handleDisconnect); PREP(handleRespawn); PREP(initSource); diff --git a/addons/refuel/XEH_postInit.sqf b/addons/refuel/XEH_postInit.sqf index c826efd3d4..f6f5a7d7b3 100644 --- a/addons/refuel/XEH_postInit.sqf +++ b/addons/refuel/XEH_postInit.sqf @@ -1,95 +1,151 @@ #include "script_component.hpp" -if (isServer) then { - addMissionEventHandler ["HandleDisconnect", {call FUNC(handleDisconnect)}]; -}; +["CBA_settingsInitialized", { + if (!GVAR(enabled)) exitWith {}; -[QGVAR(initSource), LINKFUNC(initSource)] call CBA_fnc_addEventHandler; + ["All", "InitPost", { + params ["_vehicle"]; + if (getFuelCargo _vehicle <= 0) exitWith {}; + TRACE_1("initPost",_vehicle); -if (!hasInterface) exitWith {}; + if (local _vehicle) then { + _vehicle setFuelCargo 0; + LOG("initPost setFuelCargo"); + }; + }, true, ["Man"], true] call CBA_fnc_addClassEventHandler; -["isNotRefueling", {!((_this select 0) getVariable [QGVAR(isRefueling), false])}] call EFUNC(common,addCanInteractWithCondition); + if (isServer) then { + addMissionEventHandler ["HandleDisconnect", {call FUNC(handleDisconnect)}]; + }; -["MouseButtonDown", LINKFUNC(onMouseButtonDown)] call CBA_fnc_addDisplayHandler; + private _cfgPositions = configFile >> QGVAR(positions) >> worldName; + if (isArray _cfgPositions) then { + { + _x params ["_class", "_positions"]; + { + private _objects = _x nearObjects [_class, 30]; + if (_objects isEqualTo []) then { + WARNING_3("no pumps %1 found near %2 %3",_class,worldName,_x); + } else { + { + // terrain fuel pumps don't trigger init and must setFuelCargo on each client + _x setFuelCargo 0; + } forEach _objects; + }; + } forEach _positions; + } forEach getArray _cfgPositions; -GVAR(mainAction) = [ - QGVAR(Refuel), - localize LSTRING(Refuel), - QPATHTOF(ui\icon_refuel_interact.paa), - {}, - { - alive _target - && {[_player, _target, [INTERACT_EXCEPTIONS]] call EFUNC(common,canInteractWith)} - && {REFUEL_DISABLED_FUEL != ([_target] call FUNC(getCapacity))} - }, - {}, [], [0,0,0], - REFUEL_ACTION_DISTANCE -] call EFUNC(interact_menu,createAction); + // placed in editor static objects don't trigger init but synchronize fuel cargo + // placed in editor vehicles both trigger init and synchronize fuel cargo + { + if (getFuelCargo _x > 0 && {local _x}) then { + TRACE_1("allMissionObjects",_x); + _x setFuelCargo 0; + }; + } forEach allMissionObjects ""; + } else { + // here are both terrain and editor static objects + WARNING_2("World %1: %2 is not configured; can load slower",worldName,QGVAR(positions)); + private _halfWorldSize = worldSize / 2; + private _worldCenter = [_halfWorldSize, _halfWorldSize]; + _halfWorldSize = _halfWorldSize * sqrt 2; + private _refuelMissionObjects = allMissionObjects "" select {getFuelCargo _x > 0}; + private _baseStaticClasses = keys (uiNamespace getVariable QGVAR(cacheRefuelClassesBaseStatic)); -GVAR(actions) = [ - [QGVAR(TakeNozzle), - localize LSTRING(TakeNozzle), + { + { + _x setFuelCargo 0; + } forEach (_worldCenter nearObjects [_x, _halfWorldSize]); + } forEach _baseStaticClasses; + }; + + [QGVAR(initSource), LINKFUNC(initSource)] call CBA_fnc_addEventHandler; + + if (!hasInterface) exitWith {}; + + ["isNotRefueling", {!((_this select 0) getVariable [QGVAR(isRefueling), false])}] call EFUNC(common,addCanInteractWithCondition); + + ["MouseButtonDown", LINKFUNC(onMouseButtonDown)] call CBA_fnc_addDisplayHandler; + + GVAR(mainAction) = [ + QGVAR(Refuel), + localize LSTRING(Refuel), QPATHTOF(ui\icon_refuel_interact.paa), - {[_player, _target] call FUNC(TakeNozzle)}, - {[_player, _target] call FUNC(canTakeNozzle)}, + {}, + { + alive _target + && {[_player, _target, [INTERACT_EXCEPTIONS]] call EFUNC(common,canInteractWith)} + && {REFUEL_DISABLED_FUEL != ([_target] call FUNC(getCapacity))} + }, {}, [], [0,0,0], REFUEL_ACTION_DISTANCE - ] call EFUNC(interact_menu,createAction), - [QGVAR(CheckFuelCounter), - localize LSTRING(CheckFuelCounter), - QPATHTOF(ui\icon_refuel_interact.paa), - {[_player, _target] call FUNC(readFuelCounter)}, - {true}, - {}, [], [0,0,0], - REFUEL_ACTION_DISTANCE - ] call EFUNC(interact_menu,createAction), - [QGVAR(CheckFuel), - localize LSTRING(CheckFuel), - QPATHTOF(ui\icon_refuel_interact.paa), - {[_player, _target] call FUNC(checkFuel)}, - {[_player, _target] call FUNC(canCheckFuel)}, - {}, [], [0,0,0], - REFUEL_ACTION_DISTANCE - ] call EFUNC(interact_menu,createAction), - [QGVAR(Return), - localize LSTRING(Return), - QPATHTOF(ui\icon_refuel_interact.paa), - {[_player, _target] call FUNC(returnNozzle)}, - {[_player, _target] call FUNC(canReturnNozzle)}, - {}, [], [0,0,0], - REFUEL_ACTION_DISTANCE - ] call EFUNC(interact_menu,createAction) -]; + ] call EFUNC(interact_menu,createAction); -// init menu for config refuel vehicles -private _cacheRefuelClasses = call (uiNamespace getVariable [QGVAR(cacheRefuelClasses), {[[],[]]}]); -_cacheRefuelClasses params [["_staticClasses", [], [[]]], ["_dynamicClasses", [], [[]]]]; + GVAR(actions) = [ + [QGVAR(TakeNozzle), + localize LSTRING(TakeNozzle), + QPATHTOF(ui\icon_refuel_interact.paa), + {[_player, _target] call FUNC(TakeNozzle)}, + {[_player, _target] call FUNC(canTakeNozzle)}, + {}, [], [0,0,0], + REFUEL_ACTION_DISTANCE + ] call EFUNC(interact_menu,createAction), + [QGVAR(CheckFuelCounter), + localize LSTRING(CheckFuelCounter), + QPATHTOF(ui\icon_refuel_interact.paa), + {[_player, _target] call FUNC(readFuelCounter)}, + {true}, + {}, [], [0,0,0], + REFUEL_ACTION_DISTANCE + ] call EFUNC(interact_menu,createAction), + [QGVAR(CheckFuel), + localize LSTRING(CheckFuel), + QPATHTOF(ui\icon_refuel_interact.paa), + {[_player, _target] call FUNC(checkFuel)}, + {[_player, _target] call FUNC(canCheckFuel)}, + {}, [], [0,0,0], + REFUEL_ACTION_DISTANCE + ] call EFUNC(interact_menu,createAction), + [QGVAR(Return), + localize LSTRING(Return), + QPATHTOF(ui\icon_refuel_interact.paa), + {[_player, _target] call FUNC(returnNozzle)}, + {[_player, _target] call FUNC(canReturnNozzle)}, + {}, [], [0,0,0], + REFUEL_ACTION_DISTANCE + ] call EFUNC(interact_menu,createAction) + ]; -{ - private _className = _x; - [_className, 0, ["ACE_MainActions"], GVAR(mainAction)] call EFUNC(interact_menu,addActionToClass); + private _staticClasses = keys (uiNamespace getVariable QGVAR(cacheRefuelClassesStatic)); + private _baseDynamicClasses = keys (uiNamespace getVariable QGVAR(cacheRefuelClassesBaseDynamic)); + + // init menu for config refuel vehicles { - [_className, 0, ["ACE_MainActions", QGVAR(Refuel)], _x] call EFUNC(interact_menu,addActionToClass); - } forEach GVAR(actions); - TRACE_1("add menu to static",_x); -} forEach _staticClasses; + private _className = _x; + [_className, 0, ["ACE_MainActions"], GVAR(mainAction)] call EFUNC(interact_menu,addActionToClass); + { + [_className, 0, ["ACE_MainActions", QGVAR(Refuel)], _x] call EFUNC(interact_menu,addActionToClass); + } forEach GVAR(actions); + TRACE_1("add menu to static",_x); + } forEach _staticClasses; -{ - private _className = _x; - [_className, 0, ["ACE_MainActions"], GVAR(mainAction), true] call EFUNC(interact_menu,addActionToClass); { - [_className, 0, ["ACE_MainActions", QGVAR(Refuel)], _x, true] call EFUNC(interact_menu,addActionToClass); - } forEach GVAR(actions); - TRACE_1("add menu to dynamic",_x); -} forEach _dynamicClasses; + private _className = _x; + [_className, 0, ["ACE_MainActions"], GVAR(mainAction), true] call EFUNC(interact_menu,addActionToClass); + { + [_className, 0, ["ACE_MainActions", QGVAR(Refuel)], _x, true] call EFUNC(interact_menu,addActionToClass); + } forEach GVAR(actions); + TRACE_1("add menu to dynamic",_x); + } forEach _baseDynamicClasses; -#ifdef DRAW_HOOKS_POS -addMissionEventHandler ["Draw3D", { - private _source = cursorObject; - private _cfgPos = getArray (configOf _source >> QGVAR(hooks)); - private _dynPos = _source getVariable [QGVAR(hooks), []]; - { - drawIcon3D ["\a3\ui_f\data\gui\cfg\hints\icon_text\group_1_ca.paa", [1,1,1,1], _source modelToWorldVisual _x, 1, 1, 0, format ["Hook %1", _forEachIndex]]; - } forEach ([_dynPos, _cfgPos] select (_dynPos isEqualTo [])); -}]; -#endif + #ifdef DRAW_HOOKS_POS + addMissionEventHandler ["Draw3D", { + private _source = cursorObject; + private _cfgPos = getArray (configOf _source >> QGVAR(hooks)); + private _dynPos = _source getVariable [QGVAR(hooks), _cfgPos]; + { + drawIcon3D ["\a3\ui_f\data\gui\cfg\hints\icon_text\group_1_ca.paa", [1,1,1,1], _source modelToWorldVisual _x, 1, 1, 0, format ["Hook %1", _forEachIndex]]; + } forEach _dynPos; + }]; + #endif +}] call CBA_fnc_addEventHandler; diff --git a/addons/refuel/XEH_preStart.sqf b/addons/refuel/XEH_preStart.sqf index fa5fe4acda..308ca30a9b 100644 --- a/addons/refuel/XEH_preStart.sqf +++ b/addons/refuel/XEH_preStart.sqf @@ -4,27 +4,44 @@ // cache refuel vehicles, see XEH_postInit.sqf private _staticClasses = []; -private _dynamicClasses = []; +private _baseStaticClasses = []; +private _baseDynamicClasses = []; +private _cacheRefuelCargo = createHashMap; { - private _fuelCargo = getNumber (_x >> QGVAR(fuelCargo)); + private _transportFuel = getNumber (_x >> "transportFuel"); + private _fuelCargo = [_x >> QGVAR(fuelCargo), "NUMBER", _transportFuel] call CBA_fnc_getConfigEntry; if (_fuelCargo > 0 || {_fuelCargo == REFUEL_INFINITE_FUEL}) then { private _sourceClass = configName _x; + private _noXEH = !isText (_x >> "EventHandlers" >> "CBA_Extended_EventHandlers" >> "init"); + private _isPublic = getNumber (_x >> "scope") == 2; // check if we can use actions with inheritance if ( - !isText (_x >> "EventHandlers" >> "CBA_Extended_EventHandlers" >> "init") // addActionToClass relies on XEH init - || {configName _x isKindOf "Static"} // CBA_fnc_addClassEventHandler doesn't support "Static" class + _noXEH // addActionToClass relies on XEH init + || {_sourceClass isKindOf "Static"} // CBA_fnc_addClassEventHandler doesn't support "Static" class ) then { - if (2 == getNumber (_x >> "scope")) then { - _staticClasses pushBackUnique _sourceClass; + if (_isPublic) then { + if (_noXEH) then { + WARNING_3("Class %1: %2 [%3] needs XEH",_sourceClass,configName inheritsFrom _x,configSourceMod _x); + }; + _staticClasses pushBack _sourceClass; + if (_baseStaticClasses findIf {_sourceClass isKindOf _x} == -1) then { + _baseStaticClasses pushBack _sourceClass; + }; }; } else { - if (-1 == _dynamicClasses findIf {_sourceClass isKindOf _x}) then { - _dynamicClasses pushBackUnique _sourceClass; + if (_baseDynamicClasses findIf {_sourceClass isKindOf _x} == -1) then { + _baseDynamicClasses pushBack _sourceClass; }; }; + if (_isPublic) then { + _cacheRefuelCargo set [_sourceClass, _fuelCargo]; + }; }; -} forEach ('true' configClasses (configFile >> "CfgVehicles")); +} forEach ("true" configClasses (configFile >> "CfgVehicles")); -TRACE_2("compiled",count _staticClasses,count _dynamicClasses); -uiNamespace setVariable [QGVAR(cacheRefuelClasses), compileFinal str [_staticClasses, _dynamicClasses]]; +TRACE_3("found",count _staticClasses,count _baseStaticClasses,count _baseDynamicClasses); +uiNamespace setVariable [QGVAR(cacheRefuelClassesStatic), compileFinal (_staticClasses createHashMapFromArray [])]; +uiNamespace setVariable [QGVAR(cacheRefuelClassesBaseStatic), compileFinal (_baseStaticClasses createHashMapFromArray [])]; +uiNamespace setVariable [QGVAR(cacheRefuelClassesBaseDynamic), compileFinal (_baseDynamicClasses createHashMapFromArray [])]; +uiNamespace setVariable [QGVAR(cacheRefuelCargo), compileFinal _cacheRefuelCargo]; diff --git a/addons/refuel/config.cpp b/addons/refuel/config.cpp index b39b665059..79b97994f1 100644 --- a/addons/refuel/config.cpp +++ b/addons/refuel/config.cpp @@ -14,6 +14,7 @@ class CfgPatches { }; }; +#include "ACE_Refuel_Positions.hpp" #include "ACE_Settings.hpp" #include "Cfg3DEN.hpp" #include "CfgEventHandlers.hpp" diff --git a/addons/refuel/dev/exportTerrainRefuelPositions.sqf b/addons/refuel/dev/exportTerrainRefuelPositions.sqf new file mode 100644 index 0000000000..72b60a3f1c --- /dev/null +++ b/addons/refuel/dev/exportTerrainRefuelPositions.sqf @@ -0,0 +1,84 @@ +// call compileScript ["z\ace\addons\refuel\dev\exportTerrainRefuelPositions.sqf"] +// can be run in Eden Editor console + +#include "\z\ace\addons\refuel\script_component.hpp" + +private _basePumps = []; +private _totalCount = 0; +private _posCount = 0; +private _message = ""; +private _halfWorldSize = worldSize / 2; +private _worldCenter = [_halfWorldSize, _halfWorldSize]; +_halfWorldSize = _halfWorldSize * sqrt 2; + +private _baseStaticClasses = keys (uiNamespace getVariable QGVAR(cacheRefuelClassesBaseStatic)); +private _class = ""; +private _objects = []; +private _positions = []; +private _object = objNull; +private _pos = []; + +{ + _class = _x; + _objects = _worldCenter nearObjects [_class, _halfWorldSize]; + if (_objects isEqualTo []) then { + continue; + }; + ADD(_totalCount,count _objects); + _positions = []; + { + _object = _x; + _pos = ASLToAGL getPosASL _object; + if (-1 < _positions findIf {60 > _x distance _pos && {20 < _x distance _pos}}) then { + _message = "INCREASE DISTANCE " + str _pos; + }; + if (-1 == _positions findIf {20 > _x distance _pos}) then { + _positions pushBack (_pos apply {round _x}); + INC(_posCount); + }; + } forEach _objects; + _positions sort true; // sort positions by smallest first + _basePumps pushBack [_class, _positions]; +} forEach _baseStaticClasses; + +_basePumps sort true; // sort pump classes alphabetically + +// check final array as it's calculated in postInit +private _checkCount = 0; +{ + _x params ["_class", "_positions"]; + { + _checkCount = _checkCount + count (_x nearObjects [_class, 30]); + } forEach _positions; +} forEach _basePumps; +if (_checkCount != _totalCount) then { + _message = "WRONG COUNT " + str _checkCount; +}; + +// export text +private _nl = toString [10]; +private _multipleBasePumps = 1 < count _basePumps; +private _output = [format [" %1[] = { /* %2 */", worldName, getText (configfile >> "CfgWorlds" >> worldName >> "description")]]; +{ + if (_forEachIndex > 0) then {_output pushBack ","}; + _x params ["_class", "_positions"]; + if (_multipleBasePumps) then { + _output pushBack (_nl + " "); + } else { + _output pushBack " "; + }; + _output pushBack format ["{""%1"", {", _class]; + { + if (_forEachIndex > 0) then {_output pushBack ","}; + _output pushBack format ["{%1,%2,%3}", _x#0, _x#1, _x#2]; + } forEach _positions; + _output pushBack "}}"; +} forEach _basePumps; +if (_multipleBasePumps) then {_output pushBack (_nl + " ")}; +if (_basePumps isEqualTo []) then {_output pushBack " "}; +_output pushBack ("};" + _nl); + +_output = _output joinString ""; + +copyToClipboard _output; +[_totalCount, _posCount, _message, _output] diff --git a/addons/refuel/dev/test_debugConfigs.sqf b/addons/refuel/dev/test_debugConfigs.sqf index f427f07d28..52ff8a962a 100644 --- a/addons/refuel/dev/test_debugConfigs.sqf +++ b/addons/refuel/dev/test_debugConfigs.sqf @@ -5,14 +5,14 @@ private _testPass = true; -diag_log text format ["[ACE-refuel] Showing CfgVehicles with vanilla transportFuel"]; -private _fuelTrucks = configProperties [configFile >> "CfgVehicles", "(isClass _x) && {(getNumber (_x >> 'transportFuel')) > 0}", true]; +INFO("Showing CfgVehicles with transportFuel and without XEH"); +private _badCfgVehicles = ' + 2 == getNumber (_x >> "scope") + && {0 < getNumber (_x >> "transportFuel")} + && {!isText (_x >> "EventHandlers" >> "CBA_Extended_EventHandlers" >> "init")} +' configClasses (configFile >> "CfgVehicles"); { - if ((configName _x) isKindOf "Car") then { - diag_log text format ["Car [%1] needs config [transportFuel: %2]", configName _x, getNumber (_x >> 'transportFuel')]; - } else { - diag_log text format ["Non-car? [%1] needs config [transportFuel: %2]", configName _x, getNumber (_x >> 'transportFuel')]; - }; -} forEach _fuelTrucks; + diag_log text format ["Class %1: %2 [%3] needs XEH", configName _x, configName inheritsFrom _x, configSourceMod _x]; +} forEach _badCfgVehicles; _testPass diff --git a/addons/refuel/functions/fnc_getFuelCargo.sqf b/addons/refuel/functions/fnc_getFuelCargo.sqf new file mode 100644 index 0000000000..360679013e --- /dev/null +++ b/addons/refuel/functions/fnc_getFuelCargo.sqf @@ -0,0 +1,20 @@ +#include "..\script_component.hpp" +/* + * Author: Dystopian + * Returns vehicle fuel amount from config (cached). + * + * Arguments: + * 0: Fuel Source + * + * Return Value: + * Fuel amount from config + * + * Example: + * cursorObject call ace_refuel_fnc_getFuelCargo + * + * Public: No + */ + +params ["_source"]; + +(uiNamespace getVariable QGVAR(cacheRefuelCargo)) getOrDefault [typeOf _source, REFUEL_DISABLED_FUEL] diff --git a/addons/refuel/functions/fnc_makeJerryCan.sqf b/addons/refuel/functions/fnc_makeJerryCan.sqf index 4b807756c9..31a91a30d7 100644 --- a/addons/refuel/functions/fnc_makeJerryCan.sqf +++ b/addons/refuel/functions/fnc_makeJerryCan.sqf @@ -16,6 +16,13 @@ * Public: Yes */ +// Only run this after the settings are initialized +if !(EGVAR(common,settingsInitFinished)) exitWith { + EGVAR(common,runAtSettingsInitialized) pushBack [FUNC(makeJerryCan), _this]; +}; + +if (!GVAR(enabled)) exitWith {}; + params [["_target", objNull, [objNull]], ["_fuelAmount", 20, [0]]]; if (isNull _target || diff --git a/addons/refuel/functions/fnc_makeSource.sqf b/addons/refuel/functions/fnc_makeSource.sqf index 38b2d8a261..30c4722377 100644 --- a/addons/refuel/functions/fnc_makeSource.sqf +++ b/addons/refuel/functions/fnc_makeSource.sqf @@ -25,19 +25,22 @@ if !(EGVAR(common,settingsInitFinished)) exitWith { EGVAR(common,runAtSettingsInitialized) pushBack [FUNC(makeSource), _this]; }; +if (!GVAR(enabled)) exitWith {}; + params [ ["_source", objNull, [objNull]], ["_fuelCargo", 0, [0]], ["_hooks", nil, [[]]] ]; -TRACE_3("makeSource",_source,_fuelCargo,_hooks); -private _fuelCargoConfig = getNumber (configOf _source >> QGVAR(fuelCargo)); +private _fuelCargoConfig = _source call FUNC(getFuelCargo); + +TRACE_4("makeSource",_source,_fuelCargo,_hooks,_fuelCargoConfig); if ( isNull _source || {_fuelCargo < 0 && {!(_fuelCargo in [REFUEL_INFINITE_FUEL, REFUEL_DISABLED_FUEL])}} - || {_fuelCargo != 0 && {_fuelCargo == _fuelCargoConfig}} + || {_fuelCargo == REFUEL_DISABLED_FUEL && {_fuelCargoConfig == REFUEL_DISABLED_FUEL}} ) exitWith {}; private _capacity = if (_fuelCargo < 0) then {_fuelCargo} else {_fuelCargoConfig max _fuelCargo}; @@ -57,10 +60,10 @@ if ( }; // only add if menu doesn't already exist -if (!(_fuelCargoConfig != 0 && {!isNil {_source getVariable QGVAR(initSource_jipID)}})) then { - private _jipID = [QGVAR(initSource), [_source]] call CBA_fnc_globalEventJIP; - [_jipID, _source] call CBA_fnc_removeGlobalEventJIP; - _source setVariable [QGVAR(initSource_jipID), _jipID]; -}; +if (_fuelCargoConfig != REFUEL_DISABLED_FUEL || {!isNil {_source getVariable QGVAR(initSource_jipID)}}) exitWith {}; + +private _jipID = [QGVAR(initSource), [_source]] call CBA_fnc_globalEventJIP; +[_jipID, _source] call CBA_fnc_removeGlobalEventJIP; +_source setVariable [QGVAR(initSource_jipID), _jipID]; [QGVAR(sourceInitialized), [_source]] call CBA_fnc_globalEvent; diff --git a/addons/refuel/initSettings.inc.sqf b/addons/refuel/initSettings.inc.sqf index f3744697a4..44df66334f 100644 --- a/addons/refuel/initSettings.inc.sqf +++ b/addons/refuel/initSettings.inc.sqf @@ -1,5 +1,15 @@ private _category = [ELSTRING(main,Category_Logistics), "str_state_refuel"]; +[ + QGVAR(enabled), "CHECKBOX", + ELSTRING(common,Enabled), + _category, + true, + 1, + {[QGVAR(enabled), _this] call EFUNC(common,cbaSettings_settingChanged)}, + true // Needs mission restart +] call CBA_fnc_addSetting; + [ QGVAR(rate), "SLIDER", [LSTRING(RefuelSettings_speed_DisplayName), LSTRING(RefuelSettings_speed_Description)], diff --git a/docs/wiki/framework/refuel-framework.md b/docs/wiki/framework/refuel-framework.md index 325606a970..3cf10d7205 100644 --- a/docs/wiki/framework/refuel-framework.md +++ b/docs/wiki/framework/refuel-framework.md @@ -134,5 +134,5 @@ The jerry can will now have a volume of 200 liters. | Name | Arguments | Global? | Added in | | ------------- | ------------- | ----- | ------------- | -| ace_refuel_sourceInitialized | Fuel source (OBJECT), items (BOOL or ARRAY) | Yes | 3.16.0 | +| ace_refuel_sourceInitialized | Fuel source (OBJECT) | Yes | 3.16.0 | | ace_refuel_jerryCanInitalized | Jerry can (OBJECT) | Yes | 3.16.0 | From c0d74ba703fa38f2e86bc69e9793000577f1da85 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Thu, 23 May 2024 21:56:08 +0200 Subject: [PATCH 130/132] Refuel - Fix fuel source disabling (#9995) * Add enable setting * Exclude man class init * Fix multiplayer terrain pump fuel sync * Add terrain pumps positions * Add vanilla fuel cargo restoring before destroying * Add Livonia positions by bux * Fix terrain pumps destruction * Improve settings init * Fix double settings category * Check enabled var in public functions * Fix fnc_makeSource * Handle recent CUP Terrains changes * Update includes * Fix issues introduced in #9133 * Change warning Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> * Optimisations and cleanup - Use hashmaps wherever possible - Reduced pump search radius by ~30% - Sorted pumps alphabetically and sorted positions by "smallest" first, for consistency * Add init debug trace * compileScript in dev * yoda conditions & DFUNC macro * Wait until CBA settings are ready * Update Chernarus 2020 and add more maps configs * Remove vanilla fuel cargo restoring before destroying * Update fnc_makeSource.sqf --------- Co-authored-by: Dystopian Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> --- addons/refuel/functions/fnc_makeSource.sqf | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/addons/refuel/functions/fnc_makeSource.sqf b/addons/refuel/functions/fnc_makeSource.sqf index 30c4722377..9d76635849 100644 --- a/addons/refuel/functions/fnc_makeSource.sqf +++ b/addons/refuel/functions/fnc_makeSource.sqf @@ -40,9 +40,24 @@ TRACE_4("makeSource",_source,_fuelCargo,_hooks,_fuelCargoConfig); if ( isNull _source || {_fuelCargo < 0 && {!(_fuelCargo in [REFUEL_INFINITE_FUEL, REFUEL_DISABLED_FUEL])}} - || {_fuelCargo == REFUEL_DISABLED_FUEL && {_fuelCargoConfig == REFUEL_DISABLED_FUEL}} ) exitWith {}; +// We might be removing fuel from an object that in config doesn't have fuel, but was given fuel via this function prior +if (_fuelCargo == REFUEL_DISABLED_FUEL && {_fuelCargoConfig == REFUEL_DISABLED_FUEL}) exitWith { + if (isNil {_source getVariable QGVAR(currentFuelCargo)}) exitWith {}; + + _source setVariable [QGVAR(currentFuelCargo), nil, true]; + _source setVariable [QGVAR(capacity), REFUEL_DISABLED_FUEL, true]; + + private _jipID = _source getVariable QGVAR(initSource_jipID); + + if (isNil "_jipID") exitWith {}; + + _jipID call CBA_fnc_removeGlobalEventJIP; + + _source setVariable [QGVAR(initSource_jipID), nil]; +}; + private _capacity = if (_fuelCargo < 0) then {_fuelCargo} else {_fuelCargoConfig max _fuelCargo}; _source setVariable [QGVAR(capacity), _capacity, true]; From c634bbe1ab32b21304b192473e9238e8c4215e76 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Thu, 23 May 2024 21:56:28 +0200 Subject: [PATCH 131/132] CSW - Force `QGVAR(handleExtraMagazinesType)` to be respected (#9903) Force QGVAR(handleExtraMagazinesType) to be respected --- addons/csw/functions/fnc_reload_handleReturnAmmo.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/csw/functions/fnc_reload_handleReturnAmmo.sqf b/addons/csw/functions/fnc_reload_handleReturnAmmo.sqf index da8383b608..ca445400b0 100644 --- a/addons/csw/functions/fnc_reload_handleReturnAmmo.sqf +++ b/addons/csw/functions/fnc_reload_handleReturnAmmo.sqf @@ -41,7 +41,7 @@ if ((_fullMagazines == 0) && {_bulletsRemaining == 0}) exitWith {}; private _container = _unloadTo getVariable [QGVAR(container), objNull]; if ((_container distance _unloadTo) > 10) then { _container = objNull; }; if (isNull _container) then { - _container = (nearestObjects [_unloadTo, [QGVAR(ammo_holder), "GroundWeaponHolder"], 10]) param [0, objNull]; + _container = (nearestObjects [_unloadTo, [["GroundWeaponHolder"], [QGVAR(ammo_holder)]] select GVAR(handleExtraMagazinesType), 10]) param [0, objNull]; }; From 05ebe1f48f13a39a9b6fc852471da782d004e768 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Thu, 23 May 2024 17:25:59 -0500 Subject: [PATCH 132/132] Medical Treatment - Allow diagnosing cardiac arrest with clear language (#9997) --- .../functions/fnc_checkResponse.sqf | 5 +++++ addons/medical_treatment/initSettings.inc.sqf | 2 +- addons/medical_treatment/stringtable.xml | 12 ++++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/addons/medical_treatment/functions/fnc_checkResponse.sqf b/addons/medical_treatment/functions/fnc_checkResponse.sqf index dc76b1dbfb..ca95fcb1d1 100644 --- a/addons/medical_treatment/functions/fnc_checkResponse.sqf +++ b/addons/medical_treatment/functions/fnc_checkResponse.sqf @@ -22,6 +22,11 @@ params ["_medic", "_patient"]; private _output = if (_patient call EFUNC(common,isAwake)) then { LSTRING(Check_Response_Responsive) } else { + if (GVAR(advancedDiagnose) == 3) exitWith { + if (IN_CRDC_ARRST(_patient)) exitWith { LSTRING(Check_Response_CardiacArrestDirect) }; + if (!alive _patient) exitWith { LSTRING(Check_Response_DeadDirect) }; + LSTRING(Check_Response_UnresponsiveDirect) + }; if ((GVAR(advancedDiagnose) == 2) && {IN_CRDC_ARRST(_patient)}) exitWith { LSTRING(Check_Response_CardiacArrest) }; if ((GVAR(advancedDiagnose) == 2) && {!alive _patient}) exitWith { LSTRING(Check_Response_Dead) }; LSTRING(Check_Response_Unresponsive) diff --git a/addons/medical_treatment/initSettings.inc.sqf b/addons/medical_treatment/initSettings.inc.sqf index fbb1b170c8..d080965eb9 100644 --- a/addons/medical_treatment/initSettings.inc.sqf +++ b/addons/medical_treatment/initSettings.inc.sqf @@ -3,7 +3,7 @@ "LIST", [LSTRING(AdvancedDiagnose_DisplayName), LSTRING(AdvancedDiagnose_Description)], [ELSTRING(medical,Category), LSTRING(SubCategory_Treatment)], - [[0, 1, 2], [ELSTRING(common,Disabled), ELSTRING(common,Enabled), LSTRING(AdvancedDiagnose_DiagnoseCardiacArrest)], 1], + [[0, 1, 2, 3], [ELSTRING(common,Disabled), ELSTRING(common,Enabled), LSTRING(AdvancedDiagnose_DiagnoseCardiacArrest), LSTRING(AdvancedDiagnose_DiagnoseCardiacArrestDirect)], 1], true ] call CBA_fnc_addSetting; diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml index ea38c6fbe8..477c18d019 100644 --- a/addons/medical_treatment/stringtable.xml +++ b/addons/medical_treatment/stringtable.xml @@ -77,6 +77,9 @@ Habilitado y poder diagnosticar Muerte/Parada cardíaca Abilitato e può diagnosticare Morte/Arresto Cardiaco + + Enabled & Can Diagnose Death/Cardiac Arrest [Directly] + Advanced Medication Erweiterte Medikation @@ -4153,6 +4156,9 @@ %1 沒有反應 %1 tepki vermiyor + + %1 is unconscious + %1 is not responsive, taking shallow gasps and convulsing %1 est inconscient, respire par intermittence et convulse. @@ -4165,6 +4171,9 @@ %1 не реагирует на раздражители, поверхностно дышит, в конвульсиях %1 no responde, dando pequeñas bocanadas y convulsionando + + %1 is in cardiac arrest + %1 is not responsive, motionless and cold %1 est inconscient, inanimé et froid. @@ -4177,6 +4186,9 @@ %1 не реагирует на раздражители, не шевелится и холодный %1 no responde, sin movimiento y frío + + %1 is dead + You checked %1 Вы осмотрели раненого %1