diff --git a/AUTHORS.txt b/AUTHORS.txt index bab4c9b873..f9e55823b1 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -109,6 +109,7 @@ Riccardo Petricca Robert Boklahánics ruPaladin simon84 +Skengman2 Sniperwolf572 System98 SzwedzikPL diff --git a/README.md b/README.md index 37b5f2a626..99c739980c 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- ACE3 Version + ACE3 Version ACE3 Issues diff --git a/ace_advanced_ballistics.dll b/ace_advanced_ballistics.dll index 0a3d2366f1..705a90b2ef 100644 Binary files a/ace_advanced_ballistics.dll and b/ace_advanced_ballistics.dll differ diff --git a/ace_break_line.dll b/ace_break_line.dll index 812455aa6b..8fc92175fe 100644 Binary files a/ace_break_line.dll and b/ace_break_line.dll differ diff --git a/ace_clipboard.dll b/ace_clipboard.dll index a21c2da4ab..8cf6744964 100644 Binary files a/ace_clipboard.dll and b/ace_clipboard.dll differ diff --git a/ace_fcs.dll b/ace_fcs.dll index f732a8ca03..9c2a871b3d 100644 Binary files a/ace_fcs.dll and b/ace_fcs.dll differ diff --git a/ace_medical.dll b/ace_medical.dll index 0091bc67bd..f85f1bc974 100644 Binary files a/ace_medical.dll and b/ace_medical.dll differ diff --git a/ace_parse_imagepath.dll b/ace_parse_imagepath.dll index 2235393dd4..f252410bcd 100644 Binary files a/ace_parse_imagepath.dll and b/ace_parse_imagepath.dll differ diff --git a/addons/advanced_ballistics/config.cpp b/addons/advanced_ballistics/config.cpp index 692a9391a0..488b812fc6 100644 --- a/addons/advanced_ballistics/config.cpp +++ b/addons/advanced_ballistics/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/advanced_ballistics/functions/fnc_displayProtractor.sqf b/addons/advanced_ballistics/functions/fnc_displayProtractor.sqf index 62663c843b..528b3e2e97 100644 --- a/addons/advanced_ballistics/functions/fnc_displayProtractor.sqf +++ b/addons/advanced_ballistics/functions/fnc_displayProtractor.sqf @@ -3,10 +3,10 @@ * * Displays a protractor in the top left corner of the screen * - * Argument: + * Arguments: * None * - * Return value: + * Return Value: * None * * Public: No diff --git a/addons/advanced_ballistics/script_component.hpp b/addons/advanced_ballistics/script_component.hpp index 47af939863..bc8baa3121 100644 --- a/addons/advanced_ballistics/script_component.hpp +++ b/addons/advanced_ballistics/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT advanced_ballistics +#define COMPONENT_BEAUTIFIED Advanced Ballistics #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/advanced_ballistics/stringtable.xml b/addons/advanced_ballistics/stringtable.xml index 718057a5b4..b3399357c3 100644 --- a/addons/advanced_ballistics/stringtable.xml +++ b/addons/advanced_ballistics/stringtable.xml @@ -68,7 +68,7 @@ Für Scharfschützen aktiviert Povoleno pro odstřelovače Ativar para caçadores - Activer pour les snipers + Activé pour les snipers Mesterlövészeknek engedélyezve Включена для снайперов Abilita per Tiratori Scelti @@ -92,7 +92,7 @@ Für Gruppenmitglieder aktiviert Povoleno pro členy skupiny Ativada para membros do grupo - Activer pour les membres du groupe + Activé pour les membres groupés Csoporttagoknak engedélyezve Включена для группы Abilita per Membri del Gruppo @@ -116,7 +116,7 @@ Für jeden aktiviert Povoleno pro všechny Ativada para todos - Activer pour tout le monde + Activé pour tout le monde Mindenkinek engedélyezve Включена для всех Abilita per tutti @@ -164,7 +164,7 @@ Beim vollautomatischen Feuern deaktiviert Zakázáno v automatickém režimu střelby Desabilitar no modo automático - Désactiver en mode rafale libre + Désactiver en mode automatique Automata módban letiltva Выкл. для автомат. режима Disabilita in modalità di fuoco automatico @@ -176,7 +176,7 @@ Deaktiviert die erweiterte Ballistik beim vollautomatischen Feuern Zákáže pokročilou balistiku během střelby v režimu automat Desabilitar a balística avançada durante fogo automático - Désactive la balistique avancée pour les tirs en rafale libre + Désactive la balistique avancée pour les tirs en automatique Letiltja a fejlett ballisztikát automata tüzelés folyamán Выключает продвинутую баллистику при стрельбе в полностью автоматическом режиме Disabilita Balistica Avanzata durante fuoco automatico @@ -188,7 +188,7 @@ Simulation der Munitionstemperatur aktivieren Povolit simulaci teploty munice Ativar simulação de temperatura de munição - Activer la simulation de la température + Active la simulation de la température Lőszer-hő szimuláció engedélyezése Симуляция температуры для боеприпасов Abilita simulazione della temperatura delle munizioni @@ -236,7 +236,7 @@ Geschossspureffekt aktivieren Povolit efekt trasírek Ativa efeito traçante de projétil - Activer l'effet traçante + Activer l'effet balle traçante Nyomkövető-effekt engedélyezése Следы пуль Abilita effetto di tracciatura dei proiettili @@ -307,11 +307,11 @@ Moduł ten pozwala aktywować zaawansowaną balistykę biorącą przy obliczeniach trajektorii lotu pocisku pod uwagę takie rzeczy jak temperatura powietrza, ciśnienie atmosferyczne, wilgotność powietrza, siły Coriolisa i Eotvosa, grawitację a także broń z jakiej wykonywany jest strzał oraz rodzaj amunicji. Wszystko to sprowadza się na bardzo dokładne odwzorowanie balistyki. Tento modul umožňuje aktivovat pokročilou balistiku, která vypočítává trajektorii kulky a bere do úvahy věci jako je teplota vzduchu, atmosférický tlak, vlhkost vzduchu, gravitaci, typ munice a zbraň, ze které je náboj vystřelen. To vše přispívá k velmi přesné balistice. Este módulo permite que você ative cálculos de balística avançada, fazendo a trajetória do projétil levar em consideração coisas como temperatura do ar, pressão atmosférica, umidade, força de Coriolis, a gravidade, o modelo da arma no qual o disparo é realizado e o tipo de munição. Tudo isso acrescenta-se a um balística muito precisa. - Ce module active la simulation de balistique avancée - ie les projectiles sont influencés par des varibles comme le vent, la température, la pression atmosphérique, l'humidité, la gravité, le type de munition et l'arme avec laquelle ils sont tirés. + Ce module active la simulation de balistique avancée - les projectiles sont influencés par des variables comme le vent, la température, la pression atmosphérique, l'humidité, la gravité, le type de munition et l'arme avec laquelles ils sont tirés. Ez a modul engedélyezi a fejlett ballisztikai szimulációt - a lövedékek röppályáját befolyásolni fogja a levegő hőmérséklete, légnyomás, páratartalom, gravitáció, a lövedék fajtája, valamint a fegyver, amiből kilőtték a lövedéket. Этот модуль включает симуляцию продвинутой баллистики - при этом на траекторию полета снаряда влияют различные параметры, такие как температура воздуха, атмосферное давление, влажность, гравитация, тип боеприпаса и оружия, из которого произвели выстрел. Este módulo permite la simulación balística avanzada - es decir, la trayectoria de los proyectiles está influenciada por variables como la temperatura del aire, la presión atmosférica, la humedad, la gravedad, el tipo de municiones y el arma desde el que fue disparada. Questo modulo abilita la simulazione della Balistica Avanzata - cioè la traiettoria dei proiettili è influenzata da variabili come la temperatura dell'aria, pressione atmosferica, umidità, gravità, il tipo di munizione e l'arma da cui è sparata - + \ No newline at end of file diff --git a/addons/ai/config.cpp b/addons/ai/config.cpp index 504c8b6e3c..60bf7184a4 100644 --- a/addons/ai/config.cpp +++ b/addons/ai/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/ai/script_component.hpp b/addons/ai/script_component.hpp index 0910bf6472..08d24079ba 100644 --- a/addons/ai/script_component.hpp +++ b/addons/ai/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT ai +#define COMPONENT_BEAUTIFIED AI #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL @@ -14,4 +15,4 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_AI #endif -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/aircraft/config.cpp b/addons/aircraft/config.cpp index f989749383..863797ebeb 100644 --- a/addons/aircraft/config.cpp +++ b/addons/aircraft/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; @@ -10,6 +11,9 @@ class CfgPatches { authors[] = {"KoffeinFlummi","Crusty","commy2","jaynus","Kimi"}; url = ECSTRING(main,URL); VERSION_CONFIG; + + // this prevents any patched class from requiring this addon + addonRootClass = "A3_Characters_F"; }; }; diff --git a/addons/aircraft/script_component.hpp b/addons/aircraft/script_component.hpp index baa8e7ee21..e2379c0791 100644 --- a/addons/aircraft/script_component.hpp +++ b/addons/aircraft/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT aircraft +#define COMPONENT_BEAUTIFIED Aircraft #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL @@ -14,4 +15,4 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_AIRCRAFT #endif -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/aircraft/stringtable.xml b/addons/aircraft/stringtable.xml index 5480cb9740..5516551d42 100644 --- a/addons/aircraft/stringtable.xml +++ b/addons/aircraft/stringtable.xml @@ -7,7 +7,7 @@ Ráfaga Seria Dávka - Contre mesures + Rafale Очередь Sorozat Rajada @@ -50,4 +50,4 @@ Fechar porta de carga - + \ No newline at end of file diff --git a/addons/apl/config.cpp b/addons/apl/config.cpp index bd97757a1c..6e2c852035 100644 --- a/addons/apl/config.cpp +++ b/addons/apl/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/apl/script_component.hpp b/addons/apl/script_component.hpp index f2ae3d53f1..969c9dca7f 100644 --- a/addons/apl/script_component.hpp +++ b/addons/apl/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT APL +#define COMPONENT_BEAUTIFIED APL #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL @@ -14,4 +15,4 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_APL #endif -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/atragmx/config.cpp b/addons/atragmx/config.cpp index 4bbde93706..aec53ba837 100644 --- a/addons/atragmx/config.cpp +++ b/addons/atragmx/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {"ACE_Item_ATragMX"}; weapons[] = {"ACE_ATragMX"}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/atragmx/script_component.hpp b/addons/atragmx/script_component.hpp index ca6a5d24a0..d5da1ee973 100644 --- a/addons/atragmx/script_component.hpp +++ b/addons/atragmx/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT atragmx +#define COMPONENT_BEAUTIFIED ATragMX #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/atragmx/stringtable.xml b/addons/atragmx/stringtable.xml index 3790fb1f2d..c4f358f5bc 100644 --- a/addons/atragmx/stringtable.xml +++ b/addons/atragmx/stringtable.xml @@ -18,7 +18,7 @@ Otwórz ATragMX Открыть ATragMX Abrir ATragMX - Ouvrir ATragMX + Ouvrir l'ATragMX ATragMX öffnen Apri ATragMX ATragMX elővétele @@ -42,7 +42,7 @@ Otwórz ATragMX Открыть ATragMX Abrir ATragMX - Ouvrir ATragMX + Ouvrir l'ATragMX ATragMX öffnen Apri ATragMX ATragMX elővétele @@ -50,4 +50,4 @@ Abrir ATragMX - + \ No newline at end of file diff --git a/addons/attach/config.cpp b/addons/attach/config.cpp index 59f733f9ea..cadc84705b 100644 --- a/addons/attach/config.cpp +++ b/addons/attach/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {"ACE_IR_Strobe_Item"}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/attach/functions/fnc_detach.sqf b/addons/attach/functions/fnc_detach.sqf index 0cf5c78082..5b5b317cbd 100644 --- a/addons/attach/functions/fnc_detach.sqf +++ b/addons/attach/functions/fnc_detach.sqf @@ -19,7 +19,7 @@ params ["_attachToVehicle","_unit"], TRACE_2("params",_attachToVehicle,_unit); -private ["_attachedList", "_itemDisplayName", "_attachedObject", "_attachedIndex", "_itemName", "_minDistance"]; +private ["_attachedList", "_itemDisplayName", "_attachedObject", "_attachedIndex", "_itemName", "_minDistance", "_isChemlight"]; _attachedList = _attachToVehicle getVariable [QGVAR(attached), []]; @@ -44,13 +44,18 @@ _minDistance = 1000; // Check if unit has an attached item if (isNull _attachedObject || {_itemName == ""}) exitWith {ERROR("Could not find attached object")}; +// Check if item is a chemlight +_isChemlight = _attachedObject isKindOf "Chemlight_base"; + // Exit if can't add the item -if !(_unit canAdd _itemName) exitWith { +if (!(_unit canAdd _itemName) && {!_isChemlight}) exitWith { [localize LSTRING(Inventory_Full)] call EFUNC(common,displayTextStructured); }; -// Add item to inventory -_unit addItem _itemName; +// Add item to inventory (unless it's a chemlight) +if (!_isChemlight) then { + _unit addItem _itemName; +}; if (toLower _itemName in ["b_ir_grenade", "o_ir_grenade", "i_ir_grenade"]) then { // Hack for dealing with X_IR_Grenade effect not dissapearing on deleteVehicle @@ -60,6 +65,7 @@ if (toLower _itemName in ["b_ir_grenade", "o_ir_grenade", "i_ir_grenade"]) then [{deleteVehicle (_this select 0)}, [_attachedObject], 2] call CBA_fnc_waitAndExecute; } else { // Delete attached item + detach _attachedObject; deleteVehicle _attachedObject; }; diff --git a/addons/attach/functions/fnc_getChildrenAttachActions.sqf b/addons/attach/functions/fnc_getChildrenAttachActions.sqf index 9f811197e0..0b2e4e705c 100644 --- a/addons/attach/functions/fnc_getChildrenAttachActions.sqf +++ b/addons/attach/functions/fnc_getChildrenAttachActions.sqf @@ -3,11 +3,11 @@ * Show the ammo counts for a static weapon. * Called from "insertChildren" on interact_menu * - * Argument: + * Arguments: * 0: Target * 1: Player * - * Return value: + * Return Value: * ChildActiosn * * Example: diff --git a/addons/attach/script_component.hpp b/addons/attach/script_component.hpp index 68300f47cd..aa6165ae8e 100644 --- a/addons/attach/script_component.hpp +++ b/addons/attach/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT attach +#define COMPONENT_BEAUTIFIED Attach #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/backpacks/config.cpp b/addons/backpacks/config.cpp index 5328a1e4ee..80439533e2 100644 --- a/addons/backpacks/config.cpp +++ b/addons/backpacks/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/backpacks/script_component.hpp b/addons/backpacks/script_component.hpp index 653e8ac684..6cfb663dd2 100644 --- a/addons/backpacks/script_component.hpp +++ b/addons/backpacks/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT backpacks +#define COMPONENT_BEAUTIFIED Backpacks #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL @@ -14,4 +15,4 @@ #define DEBUG_SETTINGS DEBUG_ENABLED_BACKPACKS #endif -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/ballistics/config.cpp b/addons/ballistics/config.cpp index 59c29f0a7f..7f63a36dd2 100644 --- a/addons/ballistics/config.cpp +++ b/addons/ballistics/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {"ACE_TargetWall","ACE_Box_Ammo"}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/ballistics/script_component.hpp b/addons/ballistics/script_component.hpp index b648c74e76..0b2f31da6a 100644 --- a/addons/ballistics/script_component.hpp +++ b/addons/ballistics/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT ballistics +#define COMPONENT_BEAUTIFIED Ballistics #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL @@ -14,4 +15,4 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_BALLISTICS #endif -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/captives/CfgEventHandlers.hpp b/addons/captives/CfgEventHandlers.hpp index 916990f1b5..e2e8df28f1 100644 --- a/addons/captives/CfgEventHandlers.hpp +++ b/addons/captives/CfgEventHandlers.hpp @@ -55,3 +55,11 @@ class Extended_Respawn_EventHandlers { }; }; }; + +class Extended_Local_EventHandlers { + class CAManBase { + class ADDON { + local = QUOTE(call FUNC(handleLocal)); + }; + }; +}; diff --git a/addons/captives/XEH_PREP.hpp b/addons/captives/XEH_PREP.hpp index 2722214e1b..bfb1ade5e0 100644 --- a/addons/captives/XEH_PREP.hpp +++ b/addons/captives/XEH_PREP.hpp @@ -14,8 +14,11 @@ PREP(doLoadCaptive); PREP(doRemoveHandcuffs); PREP(doUnloadCaptive); PREP(findEmptyNonFFVCargoSeat); +PREP(handleAnimChangedHandcuffed); +PREP(handleAnimChangedSurrendered); PREP(handleGetIn); PREP(handleGetOut); +PREP(handleLocal); PREP(handleOnUnconscious); PREP(handlePlayerChanged); PREP(handleRespawn); diff --git a/addons/captives/XEH_postInit.sqf b/addons/captives/XEH_postInit.sqf index 9709508fa2..c5a8a38ed3 100644 --- a/addons/captives/XEH_postInit.sqf +++ b/addons/captives/XEH_postInit.sqf @@ -24,15 +24,15 @@ if (isServer) then { }]; }; -["ace_playerChanged", {_this call FUNC(handlePlayerChanged)}] call CBA_fnc_addEventHandler; -[QGVAR(moveInCaptive), {_this call FUNC(vehicleCaptiveMoveIn)}] call CBA_fnc_addEventHandler; -[QGVAR(moveOutCaptive), {_this call FUNC(vehicleCaptiveMoveOut)}] call CBA_fnc_addEventHandler; +["unit", FUNC(handlePlayerChanged)] call CBA_fnc_addPlayerEventHandler; +[QGVAR(moveInCaptive), FUNC(vehicleCaptiveMoveIn)] call CBA_fnc_addEventHandler; +[QGVAR(moveOutCaptive), FUNC(vehicleCaptiveMoveOut)] call CBA_fnc_addEventHandler; -[QGVAR(setHandcuffed), {_this call FUNC(setHandcuffed)}] call CBA_fnc_addEventHandler; -[QGVAR(setSurrendered), {_this call FUNC(setSurrendered)}] call CBA_fnc_addEventHandler; +[QGVAR(setHandcuffed), FUNC(setHandcuffed)] call CBA_fnc_addEventHandler; +[QGVAR(setSurrendered), FUNC(setSurrendered)] call CBA_fnc_addEventHandler; //Medical Integration Events -["ace_unconscious", {_this call ACE_Captives_fnc_handleOnUnconscious}] call CBA_fnc_addEventHandler; +["ace_unconscious", FUNC(handleOnUnconscious)] call CBA_fnc_addEventHandler; if (!hasInterface) exitWith {}; diff --git a/addons/captives/config.cpp b/addons/captives/config.cpp index 883fbebe32..b879e906fa 100644 --- a/addons/captives/config.cpp +++ b/addons/captives/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {QGVAR(ModuleSettings), QGVAR(ModuleSurrender), QGVAR(ModuleHandcuffed)}; weapons[] = {"ACE_CableTie"}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/captives/functions/fnc_handleAnimChangedHandcuffed.sqf b/addons/captives/functions/fnc_handleAnimChangedHandcuffed.sqf new file mode 100644 index 0000000000..2f55d51fc3 --- /dev/null +++ b/addons/captives/functions/fnc_handleAnimChangedHandcuffed.sqf @@ -0,0 +1,37 @@ +/* + * Author: Nic547, commy2 + * Restart the handcuffing animation if it got interrupted. Called from a AnimChanged EH. + * + * Arguments: + * 0: The Unit + * 1: New animation + * + * ReturnValue: + * None + * + * Public: No + */ + + +#include "script_component.hpp" + +params ["_unit", "_newAnimation"]; +TRACE_2("AnimChanged",_unit,_newAnimation); +if (_unit == (vehicle _unit)) then { + if ((_newAnimation != "ACE_AmovPercMstpSsurWnonDnon") && {!(_unit getVariable ["ACE_isUnconscious", false])}) then { + TRACE_1("Handcuff animation interrupted",_newAnimation); + [_unit, "ACE_AmovPercMstpScapWnonDnon", 1] call EFUNC(common,doAnimation); + }; +} else { + _turretPath = []; + { + _x params ["_xUnit", "", "", "_xTurretPath"]; + if (_unit == _xUnit) exitWith {_turretPath = _xTurretPath}; + } forEach (fullCrew (vehicle _unit)); + TRACE_1("turret Path",_turretPath); + if (_turretPath isEqualTo []) exitWith {}; + + TRACE_1("Handcuff (FFV) animation interrupted",_newAnimation); + [_unit, "ACE_HandcuffedFFV", 2] call EFUNC(common,doAnimation); + [_unit, "ACE_HandcuffedFFV", 1] call EFUNC(common,doAnimation); +}; diff --git a/addons/captives/functions/fnc_handleAnimChangedSurrendered.sqf b/addons/captives/functions/fnc_handleAnimChangedSurrendered.sqf new file mode 100644 index 0000000000..cf17d8b873 --- /dev/null +++ b/addons/captives/functions/fnc_handleAnimChangedSurrendered.sqf @@ -0,0 +1,24 @@ +/* + * Author: Nic547, commy2 + * Restart the surrendering animation if it got interrupted. Called from a AnimChanged EH. + * + * Arguments: + * 0: The Unit + * 1: New animation + * + * ReturnValue: + * None + * + * Public: No + */ + + +#include "script_component.hpp" + +params ["_unit", "_newAnimation"]; + +TRACE_2("AnimChanged",_unit,_newAnimation); +if ((_newAnimation != "ACE_AmovPercMstpSsurWnonDnon") && {!(_unit getVariable ["ACE_isUnconscious", false])}) then { + TRACE_1("Surrender animation interrupted",_newAnimation); + [_unit, "ACE_AmovPercMstpSsurWnonDnon", 1] call EFUNC(common,doAnimation); +}; diff --git a/addons/captives/functions/fnc_handleLocal.sqf b/addons/captives/functions/fnc_handleLocal.sqf new file mode 100644 index 0000000000..693eb844fd --- /dev/null +++ b/addons/captives/functions/fnc_handleLocal.sqf @@ -0,0 +1,63 @@ +/* + * Author: esteldunedain + * Called when a unit switched locality + * + * Arguments: + * 0: The Unit + * 1: Is local + * + * ReturnValue: + * None + * + * Public: No + */ + + +#include "script_component.hpp" + +params ["_unit", "_local"]; + +// Make sure that if the unit is captive or surrendered it has a AnimChanged EH running ONLY on the machine that owns it +if (_local) then { + + // If the unit is handcuffed + if (_unit getVariable [QGVAR(isHandcuffed), false]) then { + // If the unit already has an AnimChanged EH here then there's nothing to do either + if (_unit getVariable [QGVAR(handcuffAnimEHID), -1] != -1) exitWith {}; + + // Otherwise, restart the AnimChanged EH in the new machine + private _animChangedEHID = _unit addEventHandler ["AnimChanged", DFUNC(handleAnimChangedHandcuffed)]; + TRACE_2("Adding animChangedEH",_unit,_animChangedEHID); + _unit setVariable [QGVAR(handcuffAnimEHID), _animChangedEHID]; + }; + + // If the unit is surrendering + if (_unit getVariable [QGVAR(isSurrendering), false]) then { + // If the unit already has an AnimChanged EH here then there's nothing to do either + if (_unit getVariable [QGVAR(surrenderAnimEHID), -1] != -1) exitWith {}; + + // Otherwise, restart the AnimChanged EH in the new machine + private _animChangedEHID = _unit addEventHandler ["AnimChanged", DFUNC(handleAnimChangedSurrendered)]; + TRACE_2("Adding animChangedEH",_unit,_animChangedEHID); + _unit setVariable [QGVAR(surrenderAnimEHID), _animChangedEHID]; + }; + +} else { + + private _animChangedEHID = _unit getVariable [QGVAR(handcuffAnimEHID), -1]; + if (_animChangedEHID != -1) then { + // If the unit had a AnimChanged EH for handcuffing in the old machine then remove it + TRACE_1("Removing animChanged EH",_animChangedEHID); + _unit removeEventHandler ["AnimChanged", _animChangedEHID]; + _unit setVariable [QGVAR(handcuffAnimEHID), -1]; + }; + + _animChangedEHID = _unit getVariable [QGVAR(surrenderAnimEHID), -1]; + if (_animChangedEHID != -1) then { + // If the unit had a AnimChanged EH for handcuffing in the old machine then remove it + TRACE_1("Removing animChanged EH",_animChangedEHID); + _unit removeEventHandler ["AnimChanged", _animChangedEHID]; + _unit setVariable [QGVAR(surrenderAnimEHID), -1]; + }; + +}; diff --git a/addons/captives/functions/fnc_setHandcuffed.sqf b/addons/captives/functions/fnc_setHandcuffed.sqf index 4fbedaef87..1859bfb0b1 100644 --- a/addons/captives/functions/fnc_setHandcuffed.sqf +++ b/addons/captives/functions/fnc_setHandcuffed.sqf @@ -73,28 +73,7 @@ if (_state) then { TRACE_1("removing animChanged EH",_animChangedEHID); _unit removeEventHandler ["AnimChanged", _animChangedEHID]; }; - _animChangedEHID = _unit addEventHandler ["AnimChanged", { - params ["_unit", "_newAnimation"]; - TRACE_2("AnimChanged",_unit,_newAnimation); - if (_unit == (vehicle _unit)) then { - if ((_newAnimation != "ACE_AmovPercMstpSsurWnonDnon") && {!(_unit getVariable ["ACE_isUnconscious", false])}) then { - TRACE_1("Handcuff animation interrupted",_newAnimation); - [_unit, "ACE_AmovPercMstpScapWnonDnon", 1] call EFUNC(common,doAnimation); - }; - } else { - _turretPath = []; - { - _x params ["_xUnit", "", "", "_xTurretPath"]; - if (_unit == _xUnit) exitWith {_turretPath = _xTurretPath}; - } forEach (fullCrew (vehicle _unit)); - TRACE_1("turret Path",_turretPath); - if (_turretPath isEqualTo []) exitWith {}; - - TRACE_1("Handcuff (FFV) animation interrupted",_newAnimation); - [_unit, "ACE_HandcuffedFFV", 2] call EFUNC(common,doAnimation); - [_unit, "ACE_HandcuffedFFV", 1] call EFUNC(common,doAnimation); - }; - }]; + _animChangedEHID = _unit addEventHandler ["AnimChanged", DFUNC(handleAnimChangedHandcuffed)]; TRACE_2("Adding animChangedEH",_unit,_animChangedEHID); _unit setVariable [QGVAR(handcuffAnimEHID), _animChangedEHID]; diff --git a/addons/captives/functions/fnc_setSurrendered.sqf b/addons/captives/functions/fnc_setSurrendered.sqf index ba7468da0d..6acd3436aa 100644 --- a/addons/captives/functions/fnc_setSurrendered.sqf +++ b/addons/captives/functions/fnc_setSurrendered.sqf @@ -64,13 +64,7 @@ if (_state) then { TRACE_1("removing animChanged EH",_animChangedEHID); _unit removeEventHandler ["AnimChanged", _animChangedEHID]; }; - _animChangedEHID = _unit addEventHandler ["AnimChanged", { - params ["_unit", "_newAnimation"]; - if ((_newAnimation != "ACE_AmovPercMstpSsurWnonDnon") && {!(_unit getVariable ["ACE_isUnconscious", false])}) then { - TRACE_1("Surrender animation interrupted",_newAnimation); - [_unit, "ACE_AmovPercMstpSsurWnonDnon", 1] call EFUNC(common,doAnimation); - }; - }]; + _animChangedEHID = _unit addEventHandler ["AnimChanged", DFUNC(handleAnimChangedSurrendered)]; _unit setVariable [QGVAR(surrenderAnimEHID), _animChangedEHID]; }; }, [_unit], 0.01] call CBA_fnc_waitAndExecute; diff --git a/addons/captives/script_component.hpp b/addons/captives/script_component.hpp index 95a842f15f..415ca8f4fd 100644 --- a/addons/captives/script_component.hpp +++ b/addons/captives/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT captives +#define COMPONENT_BEAUTIFIED Captives #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL @@ -14,4 +15,4 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_CAPTIVES #endif -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/captives/stringtable.xml b/addons/captives/stringtable.xml index 4044723c4a..fbb3d11541 100644 --- a/addons/captives/stringtable.xml +++ b/addons/captives/stringtable.xml @@ -5,7 +5,7 @@ Take Prisoner Gefangen nehmen Tomar prisionero - Prendre prisonnier + Prendre le prisonnier Aresztuj Zajmout osobu Arresta il prigioniero @@ -190,7 +190,7 @@ Spoutat jednotku Metti manette all'unità Hacer que la unidad esté esposada - Rend une unité captive + Rendre une unité captive Sync a unit to make them handcuffed. diff --git a/addons/cargo/XEH_postInit.sqf b/addons/cargo/XEH_postInit.sqf index eeee387018..58a009c9f5 100644 --- a/addons/cargo/XEH_postInit.sqf +++ b/addons/cargo/XEH_postInit.sqf @@ -1,6 +1,6 @@ #include "script_component.hpp" -["ace_addCargoByClass", {_this call FUNC(addCargoItem)}] call CBA_fnc_addEventHandler; +["ace_addCargo", {_this call FUNC(addCargoItem)}] call CBA_fnc_addEventHandler; ["ace_loadCargo", { params ["_item", "_vehicle"]; diff --git a/addons/cargo/config.cpp b/addons/cargo/config.cpp index 1980fe207d..c368cab8d5 100644 --- a/addons/cargo/config.cpp +++ b/addons/cargo/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; @@ -22,8 +23,8 @@ class ACE_newEvents { LoadCargo = "ace_loadCargo"; cargoUnloaded = "ace_cargoUnloaded"; cargoLoaded = "ace_cargoLoaded"; - AddCargoByClass = "ace_addCargoByClass"; + AddCargoByClass = "ace_addCargo"; ServerUnloadCargo = QGVAR(serverUnload); UnloadCargo = "ace_unloadCargo"; - cargoAddedByClass = "ace_cargoAddedByClass"; + cargoAddedByClass = "ace_cargoAdded"; }; diff --git a/addons/cargo/functions/fnc_addCargoItem.sqf b/addons/cargo/functions/fnc_addCargoItem.sqf index bc179b8912..6e1b311098 100644 --- a/addons/cargo/functions/fnc_addCargoItem.sqf +++ b/addons/cargo/functions/fnc_addCargoItem.sqf @@ -26,4 +26,4 @@ for "_i" from 1 to _amount do { }; // Invoke listenable event -["ace_cargoAddedByClass", [_itemClass, _vehicle, _amount]] call CBA_fnc_globalEvent; +["ace_cargoAdded", [_itemClass, _vehicle, _amount]] call CBA_fnc_globalEvent; diff --git a/addons/cargo/functions/fnc_canLoad.sqf b/addons/cargo/functions/fnc_canLoad.sqf index bf1098dbf1..f576ea3e79 100644 --- a/addons/cargo/functions/fnc_canLoad.sqf +++ b/addons/cargo/functions/fnc_canLoad.sqf @@ -6,7 +6,7 @@ * 0: Player * 1: Object to load * - * Return value: + * Return Value: * Can load * * Example: diff --git a/addons/cargo/functions/fnc_canLoadItemIn.sqf b/addons/cargo/functions/fnc_canLoadItemIn.sqf index d6092c2a2d..e2bb1ecc4d 100644 --- a/addons/cargo/functions/fnc_canLoadItemIn.sqf +++ b/addons/cargo/functions/fnc_canLoadItemIn.sqf @@ -6,7 +6,7 @@ * 0: Item * 1: Holder Object (Vehicle) * - * Return value: + * Return Value: * Can load in * * Example: diff --git a/addons/cargo/functions/fnc_canUnloadItem.sqf b/addons/cargo/functions/fnc_canUnloadItem.sqf index ea6cb7a6eb..1e8753cc27 100644 --- a/addons/cargo/functions/fnc_canUnloadItem.sqf +++ b/addons/cargo/functions/fnc_canUnloadItem.sqf @@ -7,7 +7,7 @@ * 1: Object * 2: Unloader (player) * - * Return value: + * Return Value: * Can be unloaded * * Example: diff --git a/addons/cargo/functions/fnc_findNearestVehicle.sqf b/addons/cargo/functions/fnc_findNearestVehicle.sqf index b5b441df92..6d5b7ce1a8 100644 --- a/addons/cargo/functions/fnc_findNearestVehicle.sqf +++ b/addons/cargo/functions/fnc_findNearestVehicle.sqf @@ -5,7 +5,7 @@ * Arguments: * 0: Unit * - * Return value: + * Return Value: * Vehicle in Distance * * Example: diff --git a/addons/cargo/functions/fnc_getCargoSpaceLeft.sqf b/addons/cargo/functions/fnc_getCargoSpaceLeft.sqf index 7d94570749..7e8594ffe4 100644 --- a/addons/cargo/functions/fnc_getCargoSpaceLeft.sqf +++ b/addons/cargo/functions/fnc_getCargoSpaceLeft.sqf @@ -5,7 +5,7 @@ * Arguments: * 0: Object * - * Return value: + * Return Value: * Cargo space left * * Example: diff --git a/addons/cargo/functions/fnc_getSizeItem.sqf b/addons/cargo/functions/fnc_getSizeItem.sqf index 775bdefd10..c53c05ee28 100644 --- a/addons/cargo/functions/fnc_getSizeItem.sqf +++ b/addons/cargo/functions/fnc_getSizeItem.sqf @@ -5,7 +5,7 @@ * Arguments: * 0: Item * - * Return value: + * Return Value: * Cargo size (default: -1) * * Example: diff --git a/addons/cargo/functions/fnc_handleDestroyed.sqf b/addons/cargo/functions/fnc_handleDestroyed.sqf index d50ea488d6..88b3cb9351 100644 --- a/addons/cargo/functions/fnc_handleDestroyed.sqf +++ b/addons/cargo/functions/fnc_handleDestroyed.sqf @@ -5,7 +5,7 @@ * Arguments: * 0: Object * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/cargo/functions/fnc_initObject.sqf b/addons/cargo/functions/fnc_initObject.sqf index f740d0e371..92403b8dd9 100644 --- a/addons/cargo/functions/fnc_initObject.sqf +++ b/addons/cargo/functions/fnc_initObject.sqf @@ -5,7 +5,7 @@ * Arguments: * 0: Object * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/cargo/functions/fnc_initVehicle.sqf b/addons/cargo/functions/fnc_initVehicle.sqf index 64ed4c4273..2dfc8b796b 100644 --- a/addons/cargo/functions/fnc_initVehicle.sqf +++ b/addons/cargo/functions/fnc_initVehicle.sqf @@ -29,7 +29,7 @@ if (isServer) then { _cargoClassname = getText (_x >> "type"); _cargoCount = getNumber (_x >> "amount"); TRACE_3("adding ACE_Cargo", (configName _x), _cargoClassname, _cargoCount); - ["ace_addCargoByClass", [_cargoClassname, _vehicle, _cargoCount]] call CBA_fnc_localEvent; + ["ace_addCargo", [_cargoClassname, _vehicle, _cargoCount]] call CBA_fnc_localEvent; }; } count ("true" configClasses (configFile >> "CfgVehicles" >> _type >> "ACE_Cargo" >> "Cargo")); }; diff --git a/addons/cargo/functions/fnc_loadItem.sqf b/addons/cargo/functions/fnc_loadItem.sqf index 6e9bf4cc9d..1d59cc1e64 100644 --- a/addons/cargo/functions/fnc_loadItem.sqf +++ b/addons/cargo/functions/fnc_loadItem.sqf @@ -7,7 +7,7 @@ * 0: Item * 1: Vehicle * - * Return value: + * Return Value: * Object loaded * * Example: diff --git a/addons/cargo/functions/fnc_makeLoadable.sqf b/addons/cargo/functions/fnc_makeLoadable.sqf index ceb1dc1acd..27513a1864 100644 --- a/addons/cargo/functions/fnc_makeLoadable.sqf +++ b/addons/cargo/functions/fnc_makeLoadable.sqf @@ -7,7 +7,7 @@ * 1: Set as loadable (default: true) * 2: Size. (default: 1) * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/cargo/functions/fnc_onMenuOpen.sqf b/addons/cargo/functions/fnc_onMenuOpen.sqf index a045862e36..a9f558ac76 100644 --- a/addons/cargo/functions/fnc_onMenuOpen.sqf +++ b/addons/cargo/functions/fnc_onMenuOpen.sqf @@ -5,7 +5,7 @@ * Arguments: * 0: Display * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/cargo/functions/fnc_startLoadIn.sqf b/addons/cargo/functions/fnc_startLoadIn.sqf index 86ab85b701..466471c375 100644 --- a/addons/cargo/functions/fnc_startLoadIn.sqf +++ b/addons/cargo/functions/fnc_startLoadIn.sqf @@ -6,7 +6,7 @@ * 0: Player * 1: Object * - * Return value: + * Return Value: * Load ProgressBar Started * * Example: diff --git a/addons/cargo/functions/fnc_startUnload.sqf b/addons/cargo/functions/fnc_startUnload.sqf index da493e5f96..8f2dcfb2e2 100644 --- a/addons/cargo/functions/fnc_startUnload.sqf +++ b/addons/cargo/functions/fnc_startUnload.sqf @@ -5,7 +5,7 @@ * Arguments: * None * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/cargo/functions/fnc_unloadItem.sqf b/addons/cargo/functions/fnc_unloadItem.sqf index 35c9075614..ce84772c1f 100644 --- a/addons/cargo/functions/fnc_unloadItem.sqf +++ b/addons/cargo/functions/fnc_unloadItem.sqf @@ -6,7 +6,7 @@ * 0: Item * 1: Vehicle * - * Return value: + * Return Value: * Object unloaded * * Example: diff --git a/addons/cargo/functions/fnc_validateCargoSpace.sqf b/addons/cargo/functions/fnc_validateCargoSpace.sqf index ecb011aed3..6e3d79cf8d 100644 --- a/addons/cargo/functions/fnc_validateCargoSpace.sqf +++ b/addons/cargo/functions/fnc_validateCargoSpace.sqf @@ -5,7 +5,7 @@ * Arguments: * 0: Object * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/cargo/script_component.hpp b/addons/cargo/script_component.hpp index 55079a16c2..905a8b0613 100644 --- a/addons/cargo/script_component.hpp +++ b/addons/cargo/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT cargo +#define COMPONENT_BEAUTIFIED Cargo #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/cargo/stringtable.xml b/addons/cargo/stringtable.xml index 6a4cf5acfb..1bc494b6fe 100644 --- a/addons/cargo/stringtable.xml +++ b/addons/cargo/stringtable.xml @@ -65,7 +65,7 @@ Povolit náklad Habilitar carga Abilita Cargo - Activer la cargaison + Activer la mise en cargaison Enable the load in cargo module @@ -76,7 +76,7 @@ Habilitar la carga en el módulo de carga Umožňuje naložit předměty do nákladového prostoru vozidla Abilita il modulo di caricamento in cargo - Activer le chargement dans le module de cargaison. + Active le chargement de cargaison dans un vehicule Cargo Settings @@ -87,7 +87,7 @@ Nastavení nákladu Ajustes de carga Impostazioni Cargo - Réglages de cargaison + Paramètres de cargaison Configure the cargo module settings @@ -98,7 +98,7 @@ Configure los ajustes del módulo de carga Konfigurace nákladního modulu Configura le impostazioni del modulo cargo - Configurer les réglages du module de cargaison + Configure les paramètres du module de cargaison %1<br/>loaded into<br/>%2 diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index 93589bb7f5..e7a43e68d2 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -284,7 +284,7 @@ enableCamShake true; ////////////////////////////////////////////////// // Set the name for the current player -["ace_playerChanged", { +["unit", { params ["_newPlayer","_oldPlayer"]; if (alive _newPlayer) then { @@ -294,124 +294,60 @@ enableCamShake true; if (alive _oldPlayer) then { [_oldPlayer] call FUNC(setName); }; -}] call CBA_fnc_addEventHandler; +}] call CBA_fnc_addPlayerEventHandler; ////////////////////////////////////////////////// // Set up numerous eventhanders for player controlled units ////////////////////////////////////////////////// -// default variables -GVAR(OldPlayerVehicle) = vehicle objNull; -GVAR(OldPlayerTurret) = [objNull] call FUNC(getTurretIndex); -GVAR(OldPlayerWeapon) = currentWeapon objNull; -GVAR(OldPlayerInventory) = []; -GVAR(OldPlayerInventoryNoAmmo) = []; -GVAR(OldPlayerVisionMode) = currentVisionMode objNull; -GVAR(OldCameraView) = ""; -GVAR(OldVisibleMap) = false; -GVAR(OldInventoryDisplayIsOpen) = nil; //@todo check this +// "playerChanged" event +["unit", { + ACE_player = (_this select 0); + ["ace_playerChanged", _this] call CBA_fnc_localEvent; +}] call CBA_fnc_addPlayerEventHandler; + +// "playerVehicleChanged" event +["vehicle", { + ["ace_playerVehicleChanged", _this] call CBA_fnc_localEvent; +}] call CBA_fnc_addPlayerEventHandler; + +// "playerTurretChanged" event +["turret", { + ["ace_playerTurretChanged", _this] call CBA_fnc_localEvent; +}] call CBA_fnc_addPlayerEventHandler; + +// "playerWeaponChanged" event +["weapon", { + ["ace_playerWeaponChanged", _this] call CBA_fnc_localEvent; +}] call CBA_fnc_addPlayerEventHandler; + +// "playerInventoryChanged" event +["loadout", { + ["ace_playerInventoryChanged", [ACE_player, [ACE_player, false] call FUNC(getAllGear)]] call CBA_fnc_localEvent; +}] call CBA_fnc_addPlayerEventHandler; + +// "playerVisionModeChanged" event +["visionMode", { + ["ace_playerVisionModeChanged", _this] call CBA_fnc_localEvent; +}] call CBA_fnc_addPlayerEventHandler; + +// "cameraViewChanged" event +["cameraView", { + ["ace_cameraViewChanged", _this] call CBA_fnc_localEvent; +}] call CBA_fnc_addPlayerEventHandler; + +["visibleMap", { + ["ace_visibleMapChanged", _this] call CBA_fnc_localEvent; +}] call CBA_fnc_addPlayerEventHandler; + GVAR(OldIsCamera) = false; -// PFH to raise varios events [{ BEGIN_COUNTER(stateChecker); - // "playerChanged" event - private _data = call FUNC(player); - if !(_data isEqualTo ACE_player) then { - private _oldPlayer = ACE_player; - - ACE_player = _data; - uiNamespace setVariable ["ACE_player", _data]; - - // Raise ACE event locally - ["ace_playerChanged", [ACE_player, _oldPlayer]] call CBA_fnc_localEvent; - }; - - // "playerVehicleChanged" event - _data = vehicle ACE_player; - if !(_data isEqualTo GVAR(OldPlayerVehicle)) then { - // Raise ACE event locally - GVAR(OldPlayerVehicle) = _data; - ["ace_playerVehicleChanged", [ACE_player, _data]] call CBA_fnc_localEvent; - }; - - // "playerTurretChanged" event - _data = [ACE_player] call FUNC(getTurretIndex); - if !(_data isEqualTo GVAR(OldPlayerTurret)) then { - // Raise ACE event locally - GVAR(OldPlayerTurret) = _data; - ["ace_playerTurretChanged", [ACE_player, _data]] call CBA_fnc_localEvent; - }; - - // "playerWeaponChanged" event - _data = currentWeapon ACE_player; - if (_data != GVAR(OldPlayerWeapon)) then { - // Raise ACE event locally - GVAR(OldPlayerWeapon) = _data; - ["ace_playerWeaponChanged", [ACE_player, _data]] call CBA_fnc_localEvent; - }; - - // "playerInventoryChanged" event - _data = getUnitLoadout ACE_player; - if !(_data isEqualTo GVAR(OldPlayerInventory)) then { - // Raise ACE event locally - GVAR(OldPlayerInventory) = _data; - - // we don't want to trigger this just because your ammo counter decreased. - _data = + GVAR(OldPlayerInventory); - - private _weaponInfo = _data param [0, []]; - if !(_weaponInfo isEqualTo []) then { - _weaponInfo set [4, primaryWeaponMagazine ACE_player]; - _weaponInfo deleteAt 5; - }; - - _weaponInfo = _data param [1, []]; - if !(_weaponInfo isEqualTo []) then { - _weaponInfo set [4, secondaryWeaponMagazine ACE_player]; - _weaponInfo deleteAt 5; - }; - - _weaponInfo = _data param [2, []]; - if !(_weaponInfo isEqualTo []) then { - _weaponInfo set [4, handgunMagazine ACE_player]; - _weaponInfo deleteAt 5; - }; - - if !(_data isEqualTo GVAR(OldPlayerInventoryNoAmmo)) then { - GVAR(OldPlayerInventoryNoAmmo) = _data; - ["ace_playerInventoryChanged", [ACE_player, [ACE_player, false] call FUNC(getAllGear)]] call CBA_fnc_localEvent; - }; - }; - - // "playerVisionModeChanged" event - _data = currentVisionMode ACE_player; - if !(_data isEqualTo GVAR(OldPlayerVisionMode)) then { - // Raise ACE event locally - GVAR(OldPlayerVisionMode) = _data; - ["ace_playerVisionModeChanged", [ACE_player, _data]] call CBA_fnc_localEvent; - }; - - // "cameraViewChanged" event - _data = cameraView; - if !(_data isEqualTo GVAR(OldCameraView)) then { - // Raise ACE event locally - GVAR(OldCameraView) = _data; - ["ace_cameraViewChanged", [ACE_player, _data]] call CBA_fnc_localEvent; - }; - - // "visibleMapChanged" event - _data = visibleMap; - if (!_data isEqualTo GVAR(OldVisibleMap)) then { - // Raise ACE event locally - GVAR(OldVisibleMap) = _data; - ["ace_visibleMapChanged", [ACE_player, _data]] call CBA_fnc_localEvent; - }; - // "activeCameraChanged" event - _data = call FUNC(isfeatureCameraActive); + private _data = call FUNC(isfeatureCameraActive); if !(_data isEqualTo GVAR(OldIsCamera)) then { // Raise ACE event locally GVAR(OldIsCamera) = _data; @@ -419,7 +355,7 @@ GVAR(OldIsCamera) = false; }; END_COUNTER(stateChecker); -}, 0, []] call CBA_fnc_addPerFrameHandler; +}, 0.5, []] call CBA_fnc_addPerFrameHandler; ////////////////////////////////////////////////// diff --git a/addons/common/config.cpp b/addons/common/config.cpp index 0210634ee8..3985b8f70d 100644 --- a/addons/common/config.cpp +++ b/addons/common/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {"ACE_Box_Misc", "ACE_bananaItem"}; weapons[] = {"ACE_ItemCore","ACE_FakePrimaryWeapon", "ACE_Banana"}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/common/functions/fnc_assignedItemFix.sqf b/addons/common/functions/fnc_assignedItemFix.sqf index 4604e1b987..9a4ac5bf47 100644 --- a/addons/common/functions/fnc_assignedItemFix.sqf +++ b/addons/common/functions/fnc_assignedItemFix.sqf @@ -28,7 +28,7 @@ GVAR(AssignedItemsShownItems) = [ ACE_isGPSEnabled ]; -["ace_playerInventoryChanged", { +["loadout", { params ["_unit"]; private _assignedItems = getUnitLoadout _unit param [9, ["","","","","",""]]; // ["ItemMap","ItemGPS","ItemRadio","ItemCompass","ItemWatch","NVGoggles"] @@ -48,4 +48,4 @@ GVAR(AssignedItemsShownItems) = [ showWatch _showWatch; showRadio _showRadio; showGPS (_showGPS || {cameraOn == getConnectedUAV _unit}); //If player is activly controling a UAV, showGPS controls showing the map (m key) -}] call CBA_fnc_addEventHandler; +}] call CBA_fnc_addPlayerEventHandler; diff --git a/addons/common/functions/fnc_codeToString.sqf b/addons/common/functions/fnc_codeToString.sqf index b4fe37db35..62e4cb5698 100644 --- a/addons/common/functions/fnc_codeToString.sqf +++ b/addons/common/functions/fnc_codeToString.sqf @@ -5,7 +5,7 @@ * Arguments: * 0: Code * - * Return value: + * Return Value: * Code * * Public: Yes diff --git a/addons/common/functions/fnc_dropBackpack.sqf b/addons/common/functions/fnc_dropBackpack.sqf index 7b7ee5765e..b0d77af7d5 100644 --- a/addons/common/functions/fnc_dropBackpack.sqf +++ b/addons/common/functions/fnc_dropBackpack.sqf @@ -5,7 +5,7 @@ * Arguments: * 0: Unit that has a backpack * - * Return value: + * Return Value: * Ground wepaon holder with backpack * * Public: Yes diff --git a/addons/common/functions/fnc_firedEH.sqf b/addons/common/functions/fnc_firedEH.sqf index 488766faff..29e58a4c6a 100644 --- a/addons/common/functions/fnc_firedEH.sqf +++ b/addons/common/functions/fnc_firedEH.sqf @@ -2,7 +2,7 @@ * Author: esteldunedain * Unfied handling of weapon fire * - * Argument: + * Arguments: * 0: unit - Object the event handler is assigned to * 1: weapon - Fired weapon * 2: muzzle - Muzzle that was used @@ -11,7 +11,7 @@ * 5: magazine - magazine name which was used * 6: projectile - Object of the projectile that was shot * - * Return value: + * Return Value: * None * * Public: No diff --git a/addons/common/functions/fnc_fixPosition.sqf b/addons/common/functions/fnc_fixPosition.sqf index 689512d925..883a502c4e 100644 --- a/addons/common/functions/fnc_fixPosition.sqf +++ b/addons/common/functions/fnc_fixPosition.sqf @@ -3,7 +3,7 @@ * * Fixes position of an object. E.g. moves object above ground and adjusts to terrain slope. Requires local object. * - * Argument: + * Arguments: * Object * * Return Value: diff --git a/addons/common/functions/fnc_getMGRSdata.sqf b/addons/common/functions/fnc_getMGRSdata.sqf index a2a9756e23..6b29b6625a 100644 --- a/addons/common/functions/fnc_getMGRSdata.sqf +++ b/addons/common/functions/fnc_getMGRSdata.sqf @@ -4,7 +4,7 @@ * Also gets longitude, latitude and altitude offset for the map. * Writes return values to GVAR(MGRS_data) if run on the current map. * - * Argument: + * Arguments: * 0: Map name (default: worldName) * * Return Value: diff --git a/addons/common/functions/fnc_getMapData.sqf b/addons/common/functions/fnc_getMapData.sqf index 5a621a8dfc..7d7bef817f 100644 --- a/addons/common/functions/fnc_getMapData.sqf +++ b/addons/common/functions/fnc_getMapData.sqf @@ -2,7 +2,7 @@ * Author: VKing, bux * Gets the current latitude and altitude offset for the map. * - * Argument: + * Arguments: * 0: Map name (default: worldName) * * Return Value: @@ -23,6 +23,7 @@ if (_map in ["altis"]) exitWith { [40, 0] }; if (_map in ["stratis"]) exitWith { [40, 0] }; if (_map in ["abbottabad"]) exitWith { [34, 1256] }; //Abbottabad elevation 1256m (Wikipedia) +if (_map in ["abel"]) exitWith { [39, 0] }; //CWR2 Malden if (_map in ["abramia"]) exitWith { [60, 0] }; if (_map in ["af_kandahar_province"]) exitWith { [42, 0] }; if (_map in ["angel"]) exitWith { [38, 0] }; @@ -31,14 +32,18 @@ if (_map in ["australia"]) exitWith { [-25, 0] }; if (_map in ["bootcamp_acr"]) exitWith { [50, 0] }; if (_map in ["bornholm"]) exitWith { [55, 0] }; if (_map in ["bozcaada"]) exitWith { [40, 0] }; +if (_map in ["cain"]) exitWith { [40, 0] }; //CWR2 Kolgujev if (_map in ["caribou"]) exitWith { [68, 0] }; +if (_map in ["cartercity"]) exitWith { [43, 130] }; //Pecher, based on Grozny (1995 - 1996) elevation 130m (Wikipedia) if (_map in ["catalina"]) exitWith { [33, 0] }; if (_map in ["chernarus", "chernarus_summer", "chernarus_winter"]) exitWith { [50, 0] }; if (_map in ["chernobylzone", "chernobylzonea2"]) exitWith { [51, 0] }; if (_map in ["clafghan"]) exitWith { [34, 640] }; -if (_map in ["dakrong"]) exitWith { [17, 0] }; //Unsung Mod +if (_map in ["dakrong"]) exitWith { [16, 0] }; //Unsung Mod if (_map in ["desert_e"]) exitWith { [40, 800] }; +if (_map in ["desert_island"]) exitWith { [40, 0] }; //CWR2 Desert Island if (_map in ["dya"]) exitWith { [34, 110] }; //Diyala Iraq - default elevationOffset +if (_map in ["eden"]) exitWith { [45, 0] }; //CWR2 Everon if (_map in ["esseker"]) exitWith { [43, 2000] }; if (_map in ["evergreen"]) exitWith { [41, 0] }; //Burgazada, Turkey - default elevationOffset if (_map in ["fallujah"]) exitWith { [33, 0] }; @@ -53,16 +58,19 @@ if (_map in ["jacobi"]) exitWith { [34, 2000] }; //default elevationOffset if (_map in ["kapaulio"]) exitWith { [0, 0] }; if (_map in ["kerama"]) exitWith { [26, 0] }; //Kerama Islands, Japan - default elevationOffset if (_map in ["kholm"]) exitWith { [36, 0] }; +if (_map in ["kidal"]) exitWith { [18, 0] }; //Kidal, Mali - default elevationOffset if (_map in ["koplic"]) exitWith { [42, 0] }; if (_map in ["kunduz"]) exitWith { [37, 0] }; if (_map in ["lingor", "lingor3"]) exitWith { [-4, 0] }; if (_map in ["lost", "lostw"]) exitWith { [60, 0] }; -if (_map in ["mcn_aliabad"]) exitWith { [36, 0] }; if (_map in ["malvinas"]) exitWith { [-52, 0] }; -if (_map in ["namalsk"]) exitWith { [65, 0] }; +if (_map in ["mcn_aliabad"]) exitWith { [36, 0] }; if (_map in ["mef_alaska"]) exitWith { [60, 5] }; if (_map in ["mountains_acr"]) exitWith { [35, 2000] }; +if (_map in ["namalsk"]) exitWith { [65, 0] }; if (_map in ["napf", "napfwinter"]) exitWith { [47, 0] }; +if (_map in ["newyork_lumnuon"]) exitWith { [41, 5] }; //Governer´s Island, New York - default elevationOffset +if (_map in ["noe"]) exitWith { [45, 0] }; //CWR2 Nogova if (_map in ["panthera3"]) exitWith { [46, 0] }; if (_map in ["pianosa_aut"]) exitWith { [43, 0] }; //Pianosa, Italy - default elevationOffset if (_map in ["pja305"]) exitWith { [0, 0] }; //G.O.S N'Ziwasogo @@ -75,12 +83,13 @@ if (_map in ["porquerolles"]) exitWith { [43, 0] }; if (_map in ["porto"]) exitWith { [40, 0] }; if (_map in ["provinggrounds_pmc"]) exitWith { [35, 100] }; if (_map in ["reshmaan"]) exitWith { [35, 2000] }; +if (_map in ["rungsat"]) exitWith { [10, 0] }; //Unsung Mod if (_map in ["sara", "sara_dbe1"]) exitWith { [40, 0] }; if (_map in ["saralite"]) exitWith { [40, 0] }; if (_map in ["sb3"]) exitWith { [53, 25] }; //TrpUebPl Einfelde Nord (Munster North Training Area, Germany) - default elevationOffset -if (_map in ["shapur_baf"]) exitWith { [35, 100] }; if (_map in ["sfp_sturko"]) exitWith { [56, 0] }; if (_map in ["sfp_wamako"]) exitWith { [14, 0] }; +if (_map in ["shapur_baf"]) exitWith { [35, 100] }; if (_map in ["sugarlake"]) exitWith { [29, 0] }; if (_map in ["takistan"]) exitWith { [35, 2000] }; if (_map in ["thirsk"]) exitWith { [65, 0] }; diff --git a/addons/common/functions/fnc_isInBuilding.sqf b/addons/common/functions/fnc_isInBuilding.sqf index e5234b9200..d4a9307cd6 100644 --- a/addons/common/functions/fnc_isInBuilding.sqf +++ b/addons/common/functions/fnc_isInBuilding.sqf @@ -5,7 +5,7 @@ * Arguments: * 0: Unit * - * Return value: + * Return Value: * Is the unit in a building? * * Public: Yes diff --git a/addons/common/functions/fnc_monitor.sqf b/addons/common/functions/fnc_monitor.sqf index 4672d6eec0..8aef62895c 100644 --- a/addons/common/functions/fnc_monitor.sqf +++ b/addons/common/functions/fnc_monitor.sqf @@ -2,7 +2,7 @@ * Author: commy2 * hint retun value of given function every frame * - * Argument: + * Arguments: * * * Return Value: diff --git a/addons/common/functions/fnc_runAfterSettingsInit.sqf b/addons/common/functions/fnc_runAfterSettingsInit.sqf index cf3faa1d7e..15631a626a 100644 --- a/addons/common/functions/fnc_runAfterSettingsInit.sqf +++ b/addons/common/functions/fnc_runAfterSettingsInit.sqf @@ -2,11 +2,11 @@ * Author: PabstMirror * Executes code after setting are initilized. * - * Argument: + * Arguments: * 0: Code to execute * 1: Parameters to run the code with * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/common/functions/fnc_setApproximateVariablePublic.sqf b/addons/common/functions/fnc_setApproximateVariablePublic.sqf index 5131f99058..549dea9eb4 100644 --- a/addons/common/functions/fnc_setApproximateVariablePublic.sqf +++ b/addons/common/functions/fnc_setApproximateVariablePublic.sqf @@ -2,13 +2,13 @@ * Author: esteldunedain * Publish a variable if it's different enough from the previously published value. * - * Argument: + * Arguments: * 0: Object the variable should be assigned to * 1: Name of the variable * 2: Value of the variable * 3: Absolute tolerance * - * Return value: + * Return Value: * Nothing. * * Example: diff --git a/addons/common/functions/fnc_setProne.sqf b/addons/common/functions/fnc_setProne.sqf index 75be8bac2d..c40b0de254 100644 --- a/addons/common/functions/fnc_setProne.sqf +++ b/addons/common/functions/fnc_setProne.sqf @@ -9,8 +9,6 @@ * None * * Public: Yes - * - * Note: Not functional, because FUNC(localAnim) does no longer exist */ #include "script_component.hpp" @@ -19,4 +17,4 @@ params ["_unit"]; [ _unit, ["amovppnemstpsnonwnondnon", "amovppnemstpsraswrfldnon", "amovppnemstpsraswlnrdnon", "amovppnemstpsraswpstdnon"] select (([primaryWeapon _unit, secondaryWeapon _unit, handgunWeapon _unit] find currentWeapon _unit) + 1) -] call FUNC(localAnim); +] call FUNC(doAnimation); diff --git a/addons/common/functions/fnc_setVariablePublic.sqf b/addons/common/functions/fnc_setVariablePublic.sqf index 1cfba0a422..5eeff87aee 100644 --- a/addons/common/functions/fnc_setVariablePublic.sqf +++ b/addons/common/functions/fnc_setVariablePublic.sqf @@ -2,13 +2,13 @@ * Author: commy2 and CAA-Picard and joko and PabstMirror * Publish a variable, but wait a certain amount of time before allowing it to be published it again. * - * Argument: + * Arguments: * 0: Object the variable should be assigned to * 1: Name of the variable * 2: Value of the variable * 3: Embargo delay (Optional. Default: 1) * - * Return value: + * Return Value: * Nothing. * * Example: diff --git a/addons/common/functions/fnc_showUser.sqf b/addons/common/functions/fnc_showUser.sqf index b783fb4ec5..2e7af12a3f 100644 --- a/addons/common/functions/fnc_showUser.sqf +++ b/addons/common/functions/fnc_showUser.sqf @@ -2,7 +2,7 @@ * Author: commy2 * hint the Variable ACE_isUsedBy from the input Object every frame * - * Argument: + * Arguments: * * * Return Value: diff --git a/addons/common/functions/fnc_waitUntilAndExecute.sqf b/addons/common/functions/fnc_waitUntilAndExecute.sqf index 76f3d22ce1..52c596c70a 100644 --- a/addons/common/functions/fnc_waitUntilAndExecute.sqf +++ b/addons/common/functions/fnc_waitUntilAndExecute.sqf @@ -2,12 +2,12 @@ * Author: joko // Jonas * Executes a code once with after the Condition is True, using a PFH * - * Argument: + * Arguments: * 0: Condition * 1: Code to execute * 2: Parameters to run the code with * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/common/script_component.hpp b/addons/common/script_component.hpp index 4e941943fa..f5dec2fd55 100644 --- a/addons/common/script_component.hpp +++ b/addons/common/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT common +#define COMPONENT_BEAUTIFIED Common #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index 7521b65982..5065acbc91 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -738,7 +738,7 @@ ACE3 Vybavení ACE3 Equipo Equipaggiamento ACE3 - Equipement ACE3 + ACE3 Equipement ACE3 Common @@ -749,7 +749,7 @@ ACE3 Común ACE3 Obecné Comune ACE3 - Commun ACE3 + ACE3 Commun ACE3 Weapons @@ -760,7 +760,7 @@ ACE3 Zbraně ACE3 Armas Armi ACE3 - Armes ACE3 + ACE3 Armes ACE3 Movement @@ -771,7 +771,7 @@ ACE3 Movimiento ACE3 Pohyb Movimento ACE3 - Mouvement ACE3 + ACE3 Mouvement ACE3 Scope Adjustment @@ -782,7 +782,7 @@ ACE3 Nastavení optiky ACE3 Ajuste de miras Regolazione Ottiche ACE3 - Ajustement de la lunette ACE3 + ACE3 Ajustement de la lunette ACE3 Vehicles @@ -793,7 +793,7 @@ ACE3 Vozidla ACE3 Vehículos Veicoli ACE3 - Vehicules ACE3 + ACE3 Vehicules No Room to unload diff --git a/addons/concertina_wire/config.cpp b/addons/concertina_wire/config.cpp index 2091a5ffc6..326c1cd0ea 100644 --- a/addons/concertina_wire/config.cpp +++ b/addons/concertina_wire/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {"ACE_ConcertinaWire", "ACE_ConcertinaWireNoGeo", "ACE_ConcertinaWireCoil"}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/concertina_wire/script_component.hpp b/addons/concertina_wire/script_component.hpp index cdde4d05be..38af41b899 100644 --- a/addons/concertina_wire/script_component.hpp +++ b/addons/concertina_wire/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT concertina_wire +#define COMPONENT_BEAUTIFIED Concertina Wire #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/dagr/config.cpp b/addons/dagr/config.cpp index 97d5300067..f84f4aeb38 100644 --- a/addons/dagr/config.cpp +++ b/addons/dagr/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {"ACE_Item_DAGR"}; weapons[] = {"ACE_DAGR"}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/dagr/script_component.hpp b/addons/dagr/script_component.hpp index 792ef7f119..e392295765 100644 --- a/addons/dagr/script_component.hpp +++ b/addons/dagr/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT dagr +#define COMPONENT_BEAUTIFIED DAGR #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/disarming/config.cpp b/addons/disarming/config.cpp index 8ed2f523cf..d8f249a9c6 100644 --- a/addons/disarming/config.cpp +++ b/addons/disarming/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {"ACE_DebugPotato"}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/disarming/script_component.hpp b/addons/disarming/script_component.hpp index af0ede134c..7bd87ade59 100644 --- a/addons/disarming/script_component.hpp +++ b/addons/disarming/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT disarming +#define COMPONENT_BEAUTIFIED Disarming #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/disposable/XEH_postInit.sqf b/addons/disposable/XEH_postInit.sqf index 9c54456620..4b395c6a64 100644 --- a/addons/disposable/XEH_postInit.sqf +++ b/addons/disposable/XEH_postInit.sqf @@ -3,11 +3,11 @@ if (!hasInterface) exitWith {}; -["ace_playerInventoryChanged", { +["loadout", { params ["_unit"]; [_unit] call FUNC(takeLoadedATWeapon); [_unit] call FUNC(updateInventoryDisplay); -}] call CBA_fnc_addEventHandler; +}] call CBA_fnc_addPlayerEventHandler; // Register fire event handler // Only for the local player and for AI. Non-local players will handle it themselves diff --git a/addons/disposable/config.cpp b/addons/disposable/config.cpp index e240206938..19b02871bc 100644 --- a/addons/disposable/config.cpp +++ b/addons/disposable/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/disposable/script_component.hpp b/addons/disposable/script_component.hpp index cd15715601..32402bc3e5 100644 --- a/addons/disposable/script_component.hpp +++ b/addons/disposable/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT disposable +#define COMPONENT_BEAUTIFIED Disposable #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL @@ -14,4 +15,4 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_ATTACH #endif -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/dragging/XEH_postInit.sqf b/addons/dragging/XEH_postInit.sqf index c9a1fbea1b..6b2fd02dde 100644 --- a/addons/dragging/XEH_postInit.sqf +++ b/addons/dragging/XEH_postInit.sqf @@ -20,9 +20,9 @@ if (isNil "ACE_maxWeightCarry") then { ["isNotCarrying", {!((_this select 0) getVariable [QGVAR(isCarrying), false])}] call EFUNC(common,addCanInteractWithCondition); // release object on player change. This does work when returning to lobby, but not when hard disconnecting. -["ace_playerChanged", {_this call FUNC(handlePlayerChanged)}] call CBA_fnc_addEventHandler; -["ace_playerVehicleChanged", {[ACE_player, objNull] call FUNC(handlePlayerChanged)}] call CBA_fnc_addEventHandler; -["ace_playerWeaponChanged", {_this call FUNC(handlePlayerWeaponChanged)}] call CBA_fnc_addEventHandler; +["unit", FUNC(handlePlayerChanged)] call CBA_fnc_addEventHandler; +["vehicle", {[ACE_player, objNull] call FUNC(handlePlayerChanged)}] call CBA_fnc_addEventHandler; +["weapon", FUNC(handlePlayerWeaponChanged)] call CBA_fnc_addEventHandler; // handle waking up dragged unit and falling unconscious while dragging ["ace_unconscious", {_this call FUNC(handleUnconscious)}] call CBA_fnc_addEventHandler; diff --git a/addons/dragging/config.cpp b/addons/dragging/config.cpp index a3e87c5824..8747ee44ea 100644 --- a/addons/dragging/config.cpp +++ b/addons/dragging/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/dragging/functions/fnc_initObject.sqf b/addons/dragging/functions/fnc_initObject.sqf index b9f623395e..d36ffe9339 100644 --- a/addons/dragging/functions/fnc_initObject.sqf +++ b/addons/dragging/functions/fnc_initObject.sqf @@ -2,7 +2,7 @@ * Author: commy2 * Initialize variables for drag or carryable objects. Called from init EH. * - * Argument: + * Arguments: * 0: Any object * * Return Value: diff --git a/addons/dragging/functions/fnc_initPerson.sqf b/addons/dragging/functions/fnc_initPerson.sqf index 9e4aefeead..c8c26a4f8c 100644 --- a/addons/dragging/functions/fnc_initPerson.sqf +++ b/addons/dragging/functions/fnc_initPerson.sqf @@ -2,10 +2,10 @@ * Author: commy2 * Initialize variables for drag or carryable persons. Called from init EH. * - * Argument: + * Arguments: * 0: Unit * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/dragging/functions/fnc_isObjectOnObject.sqf b/addons/dragging/functions/fnc_isObjectOnObject.sqf index c113688322..cec6ce764e 100644 --- a/addons/dragging/functions/fnc_isObjectOnObject.sqf +++ b/addons/dragging/functions/fnc_isObjectOnObject.sqf @@ -2,10 +2,10 @@ * Author: commy2 * Check if Object is Overlapping * - * Argument: + * Arguments: * 0: Object * - * Return value: + * Return Value: * * * Example; diff --git a/addons/dragging/functions/fnc_setCarryable.sqf b/addons/dragging/functions/fnc_setCarryable.sqf index 0253c6ed4b..4de52e7bd8 100644 --- a/addons/dragging/functions/fnc_setCarryable.sqf +++ b/addons/dragging/functions/fnc_setCarryable.sqf @@ -2,7 +2,7 @@ * Author: commy2 * Enable the object to be carried. * - * Argument: + * Arguments: * 0: Any object * 1: true to enable carrying, false to disable * 2: Position offset for attachTo command (default: [0,1,1]) diff --git a/addons/dragging/functions/fnc_setDraggable.sqf b/addons/dragging/functions/fnc_setDraggable.sqf index 4c4d11ecf6..1fbcb995dc 100644 --- a/addons/dragging/functions/fnc_setDraggable.sqf +++ b/addons/dragging/functions/fnc_setDraggable.sqf @@ -2,13 +2,13 @@ * Author: commy2 * Enable the object to be dragged. * - * Argument: + * Arguments: * 0: Any object * 1: true to enable dragging, false to disable * 2: Position offset for attachTo command (Array, optinal; default: [0,0,0]) * 3: Direction in degree to rotate the object after attachTo (Number, optional; default: 0) * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/dragging/functions/fnc_startDrag.sqf b/addons/dragging/functions/fnc_startDrag.sqf index 8c46fbe122..5ddaa0ede4 100644 --- a/addons/dragging/functions/fnc_startDrag.sqf +++ b/addons/dragging/functions/fnc_startDrag.sqf @@ -2,11 +2,11 @@ * Author: commy2 * Start the dragging process. * - * Argument: + * Arguments: * 0: Unit that should do the dragging * 1: Object to drag * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/dragging/script_component.hpp b/addons/dragging/script_component.hpp index b4acb948c9..13915637ab 100644 --- a/addons/dragging/script_component.hpp +++ b/addons/dragging/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT dragging +#define COMPONENT_BEAUTIFIED Dragging #include "\z\ace\addons\main\script_mod.hpp" //#define DEBUG_ENABLED_DRAGGING diff --git a/addons/explosives/CfgVehicles.hpp b/addons/explosives/CfgVehicles.hpp index dcfb01c489..b2cd562b18 100644 --- a/addons/explosives/CfgVehicles.hpp +++ b/addons/explosives/CfgVehicles.hpp @@ -44,7 +44,7 @@ class CfgVehicles { class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {}; }; - author = ECSTRING(common,Author); + author = ECSTRING(common,aceteam); _generalMacro = "ACE_DefuseObject"; displayName = "ACE Defuse Helper"; model = "\A3\Weapons_f\dummyweapon.p3d"; @@ -67,7 +67,7 @@ class CfgVehicles { class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {}; }; - author = "ACE"; + author = ECSTRING(common,aceteam); _generalMacro = "ACE_Explosives_Place"; displayName = "Multi-meter"; mapSize = 0.2; diff --git a/addons/explosives/XEH_postInit.sqf b/addons/explosives/XEH_postInit.sqf index 365e772023..1ddd52cc53 100644 --- a/addons/explosives/XEH_postInit.sqf +++ b/addons/explosives/XEH_postInit.sqf @@ -29,16 +29,16 @@ if (isServer) then { [_unit] call FUNC(onIncapacitated); }] call CBA_fnc_addEventHandler; - [QGVAR(clientRequestOrientations), { + [QGVAR(sendOrientations), { params ["_logic"]; - TRACE_1("clientRequestsOrientations received:",_logic); + TRACE_1("sendOrientations received:",_logic); // Filter the array before sending it GVAR(explosivesOrientations) = GVAR(explosivesOrientations) select { _x params ["_explosive"]; (!isNull _explosive && {alive _explosive}) }; - TRACE_1("serverSendsOrientations sent:",GVAR(explosivesOrientations)); - [QGVAR(serverSendOrientations), [GVAR(explosivesOrientations)], _logic] call CBA_fnc_targetEvent; + TRACE_1("orientationsSent sent:",GVAR(explosivesOrientations)); + [QGVAR(orientationsSent), [GVAR(explosivesOrientations)], _logic] call CBA_fnc_targetEvent; }] call CBA_fnc_addEventHandler; }; @@ -52,9 +52,9 @@ GVAR(CurrentSpeedDial) = 0; // In case we are a JIP client, ask the server for orientation of any previously // placed mine. if (didJIP) then { - [QGVAR(serverSendOrientations), { + [QGVAR(orientationsSent), { params ["_explosivesOrientations"]; - TRACE_1("serverSendsOrientations received:",_explosivesOrientations); + TRACE_1("orientationsSent received:",_explosivesOrientations); { _x params ["_explosive","_direction","_pitch"]; TRACE_3("orientation set:",_explosive,_direction,_pitch); @@ -66,8 +66,8 @@ if (didJIP) then { // Create a logic to get the client ID GVAR(localLogic) = ([sideLogic] call CBA_fnc_getSharedGroup) createUnit ["Logic", [0,0,0], [], 0, "NONE"]; - TRACE_1("clientRequestsOrientations sent:",GVAR(localLogic)); - [QGVAR(clientRequestOrientations), [GVAR(localLogic)]] call CBA_fnc_serverEvent; + TRACE_1("sendOrientations sent:",GVAR(localLogic)); + [QGVAR(sendOrientations), [GVAR(localLogic)]] call CBA_fnc_serverEvent; }; ["ace_interactMenuOpened", { diff --git a/addons/explosives/config.cpp b/addons/explosives/config.cpp index 83033cbddc..8b660197e9 100644 --- a/addons/explosives/config.cpp +++ b/addons/explosives/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {"ACE_ModuleMine_SLAMBottomMine", "ACE_ModuleExplosive_IEDUrbanBig_Range", "ACE_ModuleExplosive_IEDLandBig_Range", "ACE_ModuleExplosive_IEDUrbanSmall_Range", "ACE_ModuleExplosive_IEDLandSmall_Range"}; weapons[] = {"ACE_Clacker", "ACE_DefusalKit", "ACE_M26_Clacker", "ACE_DeadManSwitch", "ACE_Cellphone"}; requiredVersion = REQUIRED_VERSION; @@ -45,6 +46,6 @@ class CfgMineTriggers { }; class ACE_newEvents { - clientRequestsOrientations = QGVAR(clientRequestOrientations); - serverSendsOrientations = QGVAR(serverSendOrientations); + clientRequestsOrientations = QGVAR(sendOrientations); + serverSendsOrientations = QGVAR(orientationsSent); }; diff --git a/addons/explosives/script_component.hpp b/addons/explosives/script_component.hpp index 86eefd72b6..7245801cc9 100644 --- a/addons/explosives/script_component.hpp +++ b/addons/explosives/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT explosives +#define COMPONENT_BEAUTIFIED Explosives #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml index 65d19364de..ec80081cb0 100644 --- a/addons/explosives/stringtable.xml +++ b/addons/explosives/stringtable.xml @@ -30,7 +30,7 @@ Zünden Detonar Detonuj - Mise à feu + Détoner Odpálit Detona Robbantás @@ -45,7 +45,7 @@ Odpálit VŠE Detonuj wszystkie Detona Tutti - Tout mettre à feu + Tout détoner Detonar Tudo @@ -460,7 +460,7 @@ Brak dostępnych zapalników dla %1 No hay detonadores disponibles para %1 Keine Auslöser für %1 vorhanden - Pas de mise à feu disponible pour %1 + Pas de détonateur disponible pour %1 Žádný detonátor k dispozici pro %1 Nessun attivatore disponibile per %1 Nincs elérhető gyújtóeszköz ide: %1 @@ -506,7 +506,7 @@ Dead Man's Switch Totmannschalter - Mise à feu par relâchement de pression + Détonateur par relâchement de pression Spínač mrtvého muže Czuwak Detonador de hombre muerto @@ -518,7 +518,7 @@ Used to remotely trigger explosives when released. Zündet Sprengladungen wenn losgelassen. - Déclenche la mise à feu d'un explosif lorsqu'il est relaché. + Utilisé pour déclencher des explosifs à distance quand relaché. Používaný k vzdálenému odpálení, při uvolnění odpálí výbušniny Używany w celu zdalnej detonacji ładunków, kiedy jego operator zostanie zabity. Utilizado para detonar explosivos remotamente al soltarlo. diff --git a/addons/fastroping/config.cpp b/addons/fastroping/config.cpp index c451a1b0dd..f2bf1d4a5e 100644 --- a/addons/fastroping/config.cpp +++ b/addons/fastroping/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/fastroping/script_component.hpp b/addons/fastroping/script_component.hpp index 3770bfe0d4..bb0b891f2b 100644 --- a/addons/fastroping/script_component.hpp +++ b/addons/fastroping/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT fastroping +#define COMPONENT_BEAUTIFIED Fastroping #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/fastroping/stringtable.xml b/addons/fastroping/stringtable.xml index 6d64fc24f5..7525921b2f 100644 --- a/addons/fastroping/stringtable.xml +++ b/addons/fastroping/stringtable.xml @@ -65,7 +65,7 @@ Equip helicopter with FRIES Rüste Helicopter mit FRIES aus Wyposaż helikopter w FRIES - Equiper l'hélicoptère avec le FRIED + Equiper l'hélicoptère avec le FRIES Equipar helicoptero con FRIES Equipaggia l'elicottero con FRIES Vybavit vrtulník pomocí FRIES @@ -86,6 +86,7 @@ EINHEITEN ABSEILEN LASSEN SCENDI DALLE CORDE Equipa o helicóptero selecionado com o Fast Rope Insertion Extraction System + LAISSER LES UNITES UTILISER LA CORDE \ No newline at end of file diff --git a/addons/fcs/CfgWeapons.hpp b/addons/fcs/CfgWeapons.hpp index ec72bc6f44..760e39e2de 100644 --- a/addons/fcs/CfgWeapons.hpp +++ b/addons/fcs/CfgWeapons.hpp @@ -12,7 +12,7 @@ class CfgWeapons { }; class autocannon_35mm: CannonCore { canLock = 0; - ballisticsComputer = 0; + ballisticsComputer = 4; //was "4 + 2", 2 is for manual zeroing, 4 is for the lead indicator - https://community.bistudio.com/wiki/A3_Locking_Review#ballisticsComputer magazines[] += {"ACE_120Rnd_35mm_ABM_shells","ACE_120Rnd_35mm_ABM_shells_Tracer_Red","ACE_120Rnd_35mm_ABM_shells_Tracer_Green","ACE_120Rnd_35mm_ABM_shells_Tracer_Yellow"}; }; diff --git a/addons/fcs/config.cpp b/addons/fcs/config.cpp index a38cee5d7d..29aba659b5 100644 --- a/addons/fcs/config.cpp +++ b/addons/fcs/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; @@ -10,6 +11,9 @@ class CfgPatches { authors[] = {"KoffeinFlummi","BadGuy (simon84)","commy2"}; url = ECSTRING(main,URL); VERSION_CONFIG; + + // this prevents any patched class from requiring this addon + addonRootClass = "A3_Characters_F"; }; }; diff --git a/addons/fcs/functions/fnc_calculateSolution.sqf b/addons/fcs/functions/fnc_calculateSolution.sqf index 6d489de006..61bfbd8c58 100644 --- a/addons/fcs/functions/fnc_calculateSolution.sqf +++ b/addons/fcs/functions/fnc_calculateSolution.sqf @@ -8,7 +8,7 @@ * 2: Target distance * 3: Azimuth offset * - * Return value: + * Return Value: * None * * Public: No diff --git a/addons/fcs/functions/fnc_canResetFCS.sqf b/addons/fcs/functions/fnc_canResetFCS.sqf index b57435f388..cf0dcf2674 100644 --- a/addons/fcs/functions/fnc_canResetFCS.sqf +++ b/addons/fcs/functions/fnc_canResetFCS.sqf @@ -2,7 +2,7 @@ * Author: KoffeinFlummi * Called from config. Can player reset FCS? * - * Argument: + * Arguments: * Nothing * * Return Value: diff --git a/addons/fcs/functions/fnc_canUseFCS.sqf b/addons/fcs/functions/fnc_canUseFCS.sqf index 3899584788..de4af99d7a 100644 --- a/addons/fcs/functions/fnc_canUseFCS.sqf +++ b/addons/fcs/functions/fnc_canUseFCS.sqf @@ -18,3 +18,4 @@ getNumber ([configFile >> "CfgVehicles" >> typeOf vehicle ACE_player, [ACE_player] call EFUNC(common,getTurretIndex)] call EFUNC(common,getTurretConfigPath) >> QGVAR(Enabled)) == 1 && {cameraView == "GUNNER"} && {!([ACE_player] call CBA_fnc_canUseWeapon)} //Not Turned Out +&& {cameraOn != (getConnectedUAV ACE_player)} //Not Controlling a UAV diff --git a/addons/fcs/functions/fnc_getRange.sqf b/addons/fcs/functions/fnc_getRange.sqf index 64619241c4..ba49621047 100644 --- a/addons/fcs/functions/fnc_getRange.sqf +++ b/addons/fcs/functions/fnc_getRange.sqf @@ -2,13 +2,13 @@ * Author: commy2 * Read laser distance measurement from engine. * - * Argument: + * Arguments: * 0: Measurement Accuracy (default: 1) * 1: Maximum measure distance (default: 5000) * 2: Minimum measure distance (default: 0) * 3: Blank display on range error (default: false) * - * Return value: + * Return Value: * Measured distance * * Public: No diff --git a/addons/fcs/functions/fnc_updateRangeHUD.sqf b/addons/fcs/functions/fnc_updateRangeHUD.sqf index 374254c620..0bb15b2507 100644 --- a/addons/fcs/functions/fnc_updateRangeHUD.sqf +++ b/addons/fcs/functions/fnc_updateRangeHUD.sqf @@ -2,10 +2,10 @@ * Author: commy2 * Update compatible info elements. * - * Argument: + * Arguments: * None * - * Return value: + * Return Value: * None * * Public: No diff --git a/addons/fcs/script_component.hpp b/addons/fcs/script_component.hpp index e3f9181526..6f5aa2cc86 100644 --- a/addons/fcs/script_component.hpp +++ b/addons/fcs/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT fcs +#define COMPONENT_BEAUTIFIED FCS #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/fcs/stringtable.xml b/addons/fcs/stringtable.xml index 8750d2a4e3..2623351972 100644 --- a/addons/fcs/stringtable.xml +++ b/addons/fcs/stringtable.xml @@ -19,7 +19,7 @@ Ajustado a Wyzerowany na Nastaveno na - Zéroté à + Remise à zéro à Выставлено на Nullázási táv Fixado em diff --git a/addons/finger/XEH_postInit.sqf b/addons/finger/XEH_postInit.sqf index 2b3da6eb64..a1b7ebb9f0 100644 --- a/addons/finger/XEH_postInit.sqf +++ b/addons/finger/XEH_postInit.sqf @@ -7,17 +7,17 @@ GVAR(fingersHash) = HASH_CREATE; GVAR(pfeh_id) = -1; ["ace_settingsInitialized", { - //If not enabled, dont't bother adding keybind or eventhandler + //If not enabled, dont't bother adding eventhandler + TRACE_1("ace_settingsInitialized eh", GVAR(enabled)); if (!GVAR(enabled)) exitWith {}; - [QGVAR(fingered), {_this call FUNC(incomingFinger)}] call CBA_fnc_addEventHandler; - - ["ACE3 Common", - QGVAR(finger), - [(localize LSTRING(keyComb)), (localize LSTRING(keyComb_description))], - { - _this call FUNC(keyPress); - }, - {false}, - [41, [true, false, false]], true] call CBA_fnc_addKeybind; // Shift + Tilda (hold) }] call CBA_fnc_addEventHandler; + +//Add Keybind: +["ACE3 Common", QGVAR(finger), [(localize LSTRING(keyComb)), (localize LSTRING(keyComb_description))], +{ + if (!GVAR(enabled)) exitWith {false}; + _this call FUNC(keyPress); +}, +{false}, +[41, [true, false, false]], true] call CBA_fnc_addKeybind; // Shift + Tilda (hold) diff --git a/addons/finger/config.cpp b/addons/finger/config.cpp index fa953b4298..ec1fd596b0 100644 --- a/addons/finger/config.cpp +++ b/addons/finger/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {QGVAR(moduleSettings)}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/finger/functions/fnc_incomingFinger.sqf b/addons/finger/functions/fnc_incomingFinger.sqf index 0b21bd4930..0f34f3f215 100644 --- a/addons/finger/functions/fnc_incomingFinger.sqf +++ b/addons/finger/functions/fnc_incomingFinger.sqf @@ -4,7 +4,7 @@ * * Arguments: * 0: Source Unit (can be self) - * 1: Position being pointed at (from positionCameraToWorld) + * 1: Position being pointed at (ASL) * * Return Value: * None @@ -16,18 +16,18 @@ */ #include "script_component.hpp" -private ["_data", "_fingerPos"]; +params ["_sourceUnit", "_fingerPosPrecise", "_distance"]; -params ["_sourceUnit", "_fingerPosPrecise"]; - -//add some random float to location if it's not our own finger: -_fingerPos = if (_sourceUnit == ACE_player) then { +// Add some random float to location if it's not our own finger: +private _fingerPos = if (_sourceUnit == ACE_player) then { _fingerPosPrecise } else { - _fingerPosPrecise vectorAdd [random (2*FP_RANDOMIZATION_X) - FP_RANDOMIZATION_X, random (2*FP_RANDOMIZATION_X) - FP_RANDOMIZATION_X, random (2*FP_RANDOMIZATION_Y) - FP_RANDOMIZATION_Y] + _fingerPosPrecise vectorAdd ([random (2*FP_RANDOMIZATION_X) - FP_RANDOMIZATION_X, random (2*FP_RANDOMIZATION_X) - FP_RANDOMIZATION_X, random (2*FP_RANDOMIZATION_Y) - FP_RANDOMIZATION_Y] vectorMultiply _distance) }; -_data = [diag_tickTime, _fingerPos, ([_sourceUnit, false, true] call EFUNC(common,getName))]; +TRACE_3("incoming finger:", _sourceUnit, _fingerPosPrecise, _fingerPos); + +private _data = [diag_tickTime, _fingerPos, ([_sourceUnit, false, true] call EFUNC(common,getName))]; HASH_SET(GVAR(fingersHash), _sourceUnit, _data); if (GVAR(pfeh_id) == -1) then { diff --git a/addons/finger/functions/fnc_keyPress.sqf b/addons/finger/functions/fnc_keyPress.sqf index d0d8bce811..ec2d7722ad 100644 --- a/addons/finger/functions/fnc_keyPress.sqf +++ b/addons/finger/functions/fnc_keyPress.sqf @@ -15,7 +15,6 @@ */ #include "script_component.hpp" -private["_fingerPosPrecise", "_playerEyePos", "_sendFingerToPlayers", "_nearbyMen"]; if (!alive ACE_player) exitWith {false}; // Conditions: canInteract @@ -29,23 +28,27 @@ if (diag_tickTime < (GVAR(lastFPTime) + FP_ACTION_TIMEOUT)) exitWith {true}; GVAR(lastFPTime) = diag_tickTime; -_fingerPosPrecise = positionCameraToWorld [0, 0, FP_DISTANCE]; -_playerEyePos = eyePos ACE_player; +// Find where is the finger pointing +private _originASL = AGLtoASL positionCameraToWorld [0, 0, 0]; +private _fingerPosASL = AGLtoASL positionCameraToWorld [0, 0, FP_DISTANCE]; +private _intersections = lineIntersectsSurfaces [_originASL, _fingerPosASL, ACE_player, vehicle ACE_player, true, 1]; +if !(_intersections isEqualTo []) then { + _fingerPosASL = _intersections select 0 select 0; +}; -_sendFingerToPlayers = []; - - -_nearbyMen = (ACE_player nearObjects ["CAManBase", (GVAR(maxRange) + 2)]); +// Find who should the finger be sent to +private _playerEyePosASL = eyePos ACE_player; +private _sendFingerToPlayers = []; +private _nearbyMen = (ACE_player nearObjects ["CAManBase", (GVAR(maxRange) + 2)]); { _nearbyMen append (crew _x); } count (ACE_player nearObjects ["StaticWeapon", (GVAR(maxRange) + 2)]); - { - if ((((eyePos _x) vectorDistance _playerEyePos) < GVAR(maxRange)) && + if ((((eyePos _x) vectorDistance _playerEyePosASL) < GVAR(maxRange)) && {alive _x} && {(_x == (vehicle _x)) || {(vehicle _x) isKindOf "StaticWeapon"}} && {GVAR(indicatorForSelf) || {_x != ACE_player}} && - {!(lineIntersects [(eyePos _x), _playerEyePos, ACE_player, _x])} && + {!(lineIntersects [(eyePos _x), _playerEyePosASL, ACE_player, _x])} && {[_x] call EFUNC(common,isPlayer)}) then { _sendFingerToPlayers pushBack _x; @@ -55,7 +58,7 @@ _nearbyMen = (ACE_player nearObjects ["CAManBase", (GVAR(maxRange) + 2)]); TRACE_1("sending finger to",_sendFingerToPlayers); -[QGVAR(fingered), [ACE_player, _fingerPosPrecise], _sendFingerToPlayers] call CBA_fnc_targetEvent; +[QGVAR(fingered), [ACE_player, _fingerPosASL, _originASL vectorDistance _fingerPosASL], _sendFingerToPlayers] call CBA_fnc_targetEvent; ACE_player playActionNow "GestureGo"; diff --git a/addons/finger/functions/fnc_perFrameEH.sqf b/addons/finger/functions/fnc_perFrameEH.sqf index 41fb718146..0263462d04 100644 --- a/addons/finger/functions/fnc_perFrameEH.sqf +++ b/addons/finger/functions/fnc_perFrameEH.sqf @@ -15,33 +15,26 @@ */ #include "script_component.hpp" -private["_drawColor", "_fovCorrection", "_iconSize", "_timeLeftToShow", "_cameraOffset"]; - if (!alive ACE_player) then {GVAR(fingersHash) = HASH_CREATE;}; // Conditions: canInteract if !([ACE_player, ACE_player, ["isNotInside"]] call EFUNC(common,canInteractWith)) then {GVAR(fingersHash) = HASH_CREATE;}; -//make sure player is dismounted or in a static weapon: +// Make sure player is dismounted or in a static weapon: if ((ACE_player != vehicle ACE_player) && {!((vehicle ACE_player) isKindOf "StaticWeapon")}) then {GVAR(fingersHash) = HASH_CREATE;}; -_cameraOffset = worldToScreen (positionCameraToWorld [1000, 0, 10000]); -_fovCorrection = 0; -if (count _cameraOffset > 0) then {_fovCorrection = (_cameraOffset select 0) - 0.5;}; -_iconSize = BASE_SIZE * _fovCorrection; +private _iconSize = BASE_SIZE * 0.10713 * (call EFUNC(common,getZoom)); { - _data = HASH_GET(GVAR(fingersHash), _x); + private _data = HASH_GET(GVAR(fingersHash), _x); _data params ["_lastTime", "_pos", "_name"]; - _timeLeftToShow = _lastTime + FP_TIMEOUT - diag_tickTime; + private _timeLeftToShow = _lastTime + FP_TIMEOUT - diag_tickTime; if (_timeLeftToShow <= 0) then { HASH_REM(GVAR(fingersHash), _x); } else { - _drawColor = + GVAR(indicatorColor); - //Fade out: - if (_timeLeftToShow < 0.5) then { - _drawColor set [3, ((_drawColor select 3) * (_timeLeftToShow / 0.5))]; - }; + private _drawColor = + GVAR(indicatorColor); + // Fade out: + _drawColor set [3, ((_drawColor select 3) * ((_timeLeftToShow min 0.5) / 0.5))]; - drawIcon3D [QPATHTOF(UI\fp_icon2.paa), _drawColor, _pos, _iconSize, _iconSize, 0, _name, 1, 0.03, "RobotoCondensed"]; + drawIcon3D [QPATHTOF(UI\fp_icon2.paa), _drawColor, ASLtoAGL _pos, _iconSize, _iconSize, 0, _name, 1, 0.03, "RobotoCondensed"]; }; } count (GVAR(fingersHash) select 0); diff --git a/addons/finger/script_component.hpp b/addons/finger/script_component.hpp index c9164763e7..85abc395f5 100644 --- a/addons/finger/script_component.hpp +++ b/addons/finger/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT finger +#define COMPONENT_BEAUTIFIED Finger #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL @@ -21,6 +22,6 @@ #define FP_TIMEOUT 2 #define FP_ACTION_TIMEOUT 1 -#define FP_DISTANCE 10000 -#define FP_RANDOMIZATION_X 350 -#define FP_RANDOMIZATION_Y 100 +#define FP_DISTANCE 5000 +#define FP_RANDOMIZATION_X 0.0350 +#define FP_RANDOMIZATION_Y 0.0100 diff --git a/addons/finger/stringtable.xml b/addons/finger/stringtable.xml index 3f68d337f2..113b3e5c2e 100644 --- a/addons/finger/stringtable.xml +++ b/addons/finger/stringtable.xml @@ -5,7 +5,7 @@ Show pointing indicator to self Zeigersymbol einem selbst anzeigen Индикатор пальца для показывающего - Afficher un indicateur de pointage pour soi-même + Afficher un indicateur de pointage à soi-même Pokaż indykator wskazywania palcem dla siebie Saját mutatási indikátor megjelenítése Mostrar indicador para si mesmo @@ -41,7 +41,7 @@ Color of the pointing indicator circle Farbe des Zeigersymbols Цвет индикатора указания пальцем - Couleur de l'indicateur de pointage + Couleur du cercle de l'indicateur de pointage Kolor okręgu wyświetlanego przy wskazywaniu palcem Mutatási indikátor körének színe Cor do círculo de indicação @@ -64,7 +64,7 @@ Points, and shows a virtual marker of where you are looking to nearby units. Can be held down. Zeigt in der Nähe befindlichen Spielern die eigene Blickrichtung mit Hilfe eines Kreissymbols an. - Montre du doigt et affiche un marqueur virtuel de la direction pointée aux uinités proches. Peut être maintenu + Montre, et affiche un marqueur virtuel là ou vous regardez aux unités proches. Peut être maintenu. Wskazuje a także wyświetla wirtualny marker-okrąg w miejscu, w które patrzysz, dla wszystkich pobliskich jednostek. Może być przytrzymywany. Mutat, és elhelyez egy virtuális jelölőt a nézett területhez közeli egységekhez. Lenyomva tartható. Aponta e mostra um marcador virtual para onde você está olhando para unidades próximas. Pode ser utilizado para baixo. @@ -76,7 +76,7 @@ Pointing Settings Zeigen Einstellungen - Options "Montrer du doigt" + Options de pointage Ustawienia wskazywania palcem Ujj beállításai Preferências de apontamento @@ -88,7 +88,7 @@ Pointing Enabled Zeigen aktiviert - "Montrer du doigt" activé + Pointage activé Aktywuj wskazywanie Mutatás engedélyezése Apontamento ativado @@ -100,7 +100,7 @@ Pointing Max Range Maximale Zeigerreichweite - Distance maximale du pointage + Distance maximale de pointage Maks. zasięg wskazywania Ujj maximum hatótávja Distância máxima do apontamento @@ -122,4 +122,4 @@ Distanza massima tra giocatori per mostrare l'indicatore di puntamento [default: 4 metri] - + \ No newline at end of file diff --git a/addons/flashlights/config.cpp b/addons/flashlights/config.cpp index 08349be0a7..2242171822 100644 --- a/addons/flashlights/config.cpp +++ b/addons/flashlights/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {"ACE_Flashlight_MX991", "ACE_Flashlight_KSF1", "ACE_Flashlight_XL50"}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/flashlights/script_component.hpp b/addons/flashlights/script_component.hpp index 90a91c3b72..3c89c041c5 100644 --- a/addons/flashlights/script_component.hpp +++ b/addons/flashlights/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT flashlights +#define COMPONENT_BEAUTIFIED Flashlights #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL @@ -14,4 +15,4 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_FLASHLIGHTS #endif -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/flashlights/stringtable.xml b/addons/flashlights/stringtable.xml index dad3158b38..d8719d95ae 100644 --- a/addons/flashlights/stringtable.xml +++ b/addons/flashlights/stringtable.xml @@ -21,7 +21,7 @@ Svítilna s červeným filtrem. Pro nahlédnutí do mapy. Linterna con filtro rojo. Para su uso en el mapa. Torcia con filtro rosso. Da usare in mappa. - Lampe de poche avec un filtre rouge. Pour éclairer une carte. + Lampe torche avec un filtre rouge. Pour utilisation sur carte. Maglite XL50 @@ -43,7 +43,7 @@ Bílá mini svítilna. Pro nahlédnutí do mapy. Mini linterna blanca. Para su uso en el mapa. Mini-torcia bianca. Da usare in mappa. - Lampe de poche (blanche). Pour éclairer une carte. + Mini lampe torche blanche. Pour utilisation sur carte. KSF-1 @@ -65,7 +65,7 @@ Svítilna s červeným filtrem. Pro nahlédnutí do mapy. Linterna con filtro rojo. Para su uso en el mapa. Torcia con filtro rosso. Da usare in mappa. - Lampe de poche avec un filtre rouge. Pour éclairer une carte. + Lampe torche avec un filtre rouge. Pour utilisation sur carte. - + \ No newline at end of file diff --git a/addons/flashsuppressors/config.cpp b/addons/flashsuppressors/config.cpp index 378858d71c..7f499bb787 100644 --- a/addons/flashsuppressors/config.cpp +++ b/addons/flashsuppressors/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = { "ACE_muzzle_mzls_H", diff --git a/addons/flashsuppressors/script_component.hpp b/addons/flashsuppressors/script_component.hpp index cb61bb6007..cfc61f8990 100644 --- a/addons/flashsuppressors/script_component.hpp +++ b/addons/flashsuppressors/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT flashsuppressors +#define COMPONENT_BEAUTIFIED Flash Suppressors #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL @@ -14,4 +15,4 @@ #define DEBUG_SETTINGS DEBUG_ENABLED_FLASHSUPPRESSORS #endif -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/fonts/config.cpp b/addons/fonts/config.cpp index dc6b4c705f..a698b681a0 100644 --- a/addons/fonts/config.cpp +++ b/addons/fonts/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/fonts/script_component.hpp b/addons/fonts/script_component.hpp index 3a7589b72a..735276e31c 100644 --- a/addons/fonts/script_component.hpp +++ b/addons/fonts/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT fonts +#define COMPONENT_BEAUTIFIED Fonts #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL @@ -14,4 +15,4 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_FONTS #endif -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/frag/config.cpp b/addons/frag/config.cpp index 1727570003..7ac109d29f 100644 --- a/addons/frag/config.cpp +++ b/addons/frag/config.cpp @@ -1,6 +1,7 @@ #include "script_component.hpp" class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/frag/script_component.hpp b/addons/frag/script_component.hpp index b75c58452a..73655e84e5 100644 --- a/addons/frag/script_component.hpp +++ b/addons/frag/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT frag +#define COMPONENT_BEAUTIFIED Frag #include "\z\ace\addons\main\script_mod.hpp" //#define DEBUG_ENABLED_FRAG @@ -17,4 +18,4 @@ #include "\z\ace\addons\main\script_macros.hpp" -#define ACE_TRACE_DRAW_INC 1 \ No newline at end of file +#define ACE_TRACE_DRAW_INC 1 diff --git a/addons/gestures/config.cpp b/addons/gestures/config.cpp index 660c1eeff5..a33e149df6 100644 --- a/addons/gestures/config.cpp +++ b/addons/gestures/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/gestures/script_component.hpp b/addons/gestures/script_component.hpp index 96ca2cf680..ddf7ddb401 100644 --- a/addons/gestures/script_component.hpp +++ b/addons/gestures/script_component.hpp @@ -1,4 +1,5 @@ -#define COMPONENT Gestures +#define COMPONENT gestures +#define COMPONENT_BEAUTIFIED Gestures #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/gestures/stringtable.xml b/addons/gestures/stringtable.xml index bd9474f8c1..fdb772462d 100644 --- a/addons/gestures/stringtable.xml +++ b/addons/gestures/stringtable.xml @@ -6,7 +6,7 @@ ACE Gesten ACE Gesty ACE Posunky - ACE Signaux + ACE Gestes ACE Kézjelek ACE Gesti ACE Gestos @@ -19,7 +19,7 @@ Gestos Gesty Posunky - Signaux + Gestes Жесты Kézjelek Gestos @@ -79,7 +79,7 @@ Alto el fuego Wstrzymać ogień Zastavit palbu - Halte au feu + Cesser le feu Прекратить огонь Tüzet szüntess Cessar Fogo @@ -114,7 +114,7 @@ Cubrirse Do osłony Krýt se - A couvert + À couvert Укрыться Fedezékbe Proteger-se @@ -193,7 +193,7 @@ Pokaż gesty w menu interakcji Mostra Gesti su Menù Interazione Mostrar gestos en el menú de interacción - Afficher les gestes au menu d'interaction. + Afficher les gestes dans le menu d'interaction. Mostrar gestos no menu de interação @@ -227,4 +227,4 @@ Atalhos + Menu de Interação - + \ No newline at end of file diff --git a/addons/gforces/XEH_postInit.sqf b/addons/gforces/XEH_postInit.sqf index 4401b1f5dd..9eb049c9f5 100644 --- a/addons/gforces/XEH_postInit.sqf +++ b/addons/gforces/XEH_postInit.sqf @@ -19,7 +19,7 @@ GVAR(pfID) = -1; [] call FUNC(addPFEH); TRACE_1("adding temp PFEH [start in]",GVAR(pfID)); }; - ["ace_playerVehicleChanged", { + ["vehicle", { params ["", "_vehicle"]; TRACE_2("playerVehicleChanged",_vehicle,typeOf _vehicle); if (_vehicle isKindOf "Air") then { @@ -35,5 +35,5 @@ GVAR(pfID) = -1; GVAR(pfID) = -1; }; }; - }] call CBA_fnc_addEventHandler; + }] call CBA_fnc_addPlayerEventHandler; }] call CBA_fnc_addEventHandler; diff --git a/addons/gforces/config.cpp b/addons/gforces/config.cpp index 58f11020eb..e05f582d08 100644 --- a/addons/gforces/config.cpp +++ b/addons/gforces/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; @@ -10,6 +11,9 @@ class CfgPatches { authors[] = {"KoffeinFlummi", "esteldunedain"}; url = ECSTRING(main,URL); VERSION_CONFIG; + + // this prevents any patched class from requiring this addon + addonRootClass = "A3_Characters_F"; }; }; diff --git a/addons/gforces/functions/fnc_addPFEH.sqf b/addons/gforces/functions/fnc_addPFEH.sqf index 50311c3a06..9bd4d7fa1a 100644 --- a/addons/gforces/functions/fnc_addPFEH.sqf +++ b/addons/gforces/functions/fnc_addPFEH.sqf @@ -2,10 +2,10 @@ * Author: KoffeinFlummi and esteldunedain * Adds the PFEH * - * Argument: + * Arguments: * None * - * Return value: + * Return Value: * None * * Public: No diff --git a/addons/gforces/functions/fnc_pfhUpdateGForces.sqf b/addons/gforces/functions/fnc_pfhUpdateGForces.sqf index 7909f3d0ee..48370c2431 100644 --- a/addons/gforces/functions/fnc_pfhUpdateGForces.sqf +++ b/addons/gforces/functions/fnc_pfhUpdateGForces.sqf @@ -2,11 +2,11 @@ * Author: KoffeinFlummi and esteldunedain * Calculates average g-forces and triggers g-effects * - * Argument: + * Arguments: * 0: Arguments * 1: pfh_id * - * Return value: + * Return Value: * None * * Public: No diff --git a/addons/gforces/script_component.hpp b/addons/gforces/script_component.hpp index c017eb4a62..6adfb95cf6 100644 --- a/addons/gforces/script_component.hpp +++ b/addons/gforces/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT gforces +#define COMPONENT_BEAUTIFIED G-Forces #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/gforces/stringtable.xml b/addons/gforces/stringtable.xml index 921515f560..b28ffcdac9 100644 --- a/addons/gforces/stringtable.xml +++ b/addons/gforces/stringtable.xml @@ -7,6 +7,7 @@ Efectos Gforces G Force efekty Efeitos de ForçaG + Effets de force gravitationnelle Only Aircraft @@ -14,6 +15,7 @@ Sólo Aeronave Pouze letadla Somente Aeronave + Avions seulement \ No newline at end of file diff --git a/addons/goggles/XEH_postInit.sqf b/addons/goggles/XEH_postInit.sqf index 032e1316ac..ea610afff0 100644 --- a/addons/goggles/XEH_postInit.sqf +++ b/addons/goggles/XEH_postInit.sqf @@ -43,7 +43,7 @@ GVAR(surfaceCacheIsDust) = false; // init GlassesChanged eventhandler GVAR(OldGlasses) = ""; -["ace_playerInventoryChanged", { +["loadout", { params ["_unit"]; private _currentGlasses = goggles _unit; @@ -52,7 +52,7 @@ GVAR(OldGlasses) = ""; ["ace_glassesChanged", [_unit, _currentGlasses]] call CBA_fnc_localEvent; GVAR(OldGlasses) = _currentGlasses; }; -}] call CBA_fnc_addEventHandler; +}] call CBA_fnc_addPlayerEventHandler; // add glasses eventhandlers ["ace_glassesChanged", { @@ -110,7 +110,7 @@ private _fnc_checkGoggles = { }; }; -["ace_cameraViewChanged", _fnc_checkGoggles] call CBA_fnc_addEventHandler; +["cameraView", _fnc_checkGoggles] call CBA_fnc_addPlayerEventHandler; ["ace_activeCameraChanged", _fnc_checkGoggles] call CBA_fnc_addEventHandler; // goggles effects main PFH diff --git a/addons/goggles/config.cpp b/addons/goggles/config.cpp index 062300d4d5..8341caa9f4 100644 --- a/addons/goggles/config.cpp +++ b/addons/goggles/config.cpp @@ -3,6 +3,7 @@ #define COLOUR 8.0 class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/goggles/functions/fnc_applyDirtEffect.sqf b/addons/goggles/functions/fnc_applyDirtEffect.sqf index 4b5ee13a0f..46f079dc38 100644 --- a/addons/goggles/functions/fnc_applyDirtEffect.sqf +++ b/addons/goggles/functions/fnc_applyDirtEffect.sqf @@ -32,6 +32,10 @@ if ([_unit] call FUNC(isGogglesVisible)) then { if (_dirtImage != "") then { GVAR(GogglesEffectsLayer) cutRsc ["RscACE_GogglesEffects", "PLAIN", 0.1, false]; (GETUVAR(GVAR(DisplayEffects),displayNull) displayCtrl 10660) ctrlSetText _dirtImage; + + private _effectBrightness = linearConversion [0,1,([] call EFUNC(common,ambientBrightness)),0.25,1]; + (GETUVAR(GVAR(DisplayEffects),displayNull) displayCtrl 10660) ctrlSetTextColor [_effectBrightness, _effectBrightness, _effectBrightness, 1]; + TRACE_1("dirt",_effectBrightness); }; }; diff --git a/addons/goggles/functions/fnc_applyDustEffect.sqf b/addons/goggles/functions/fnc_applyDustEffect.sqf index 9921bfdfd9..6277d34c21 100644 --- a/addons/goggles/functions/fnc_applyDustEffect.sqf +++ b/addons/goggles/functions/fnc_applyDustEffect.sqf @@ -26,6 +26,10 @@ if ([_unit] call FUNC(isGogglesVisible)) exitWith { ((GETUVAR(GVAR(DisplayEffects),displayNull)) displayCtrl 10662) ctrlSetText format [getText (configFile >> "CfgGlasses" >> goggles _unit >> "ACE_DustPath"), GETDUSTT(DAMOUNT) + 1]; + private _effectBrightness = linearConversion [0,1,([] call EFUNC(common,ambientBrightness)),0.25,1]; + ((GETUVAR(GVAR(DisplayEffects),displayNull)) displayCtrl 10662) ctrlSetTextColor [_effectBrightness, _effectBrightness, _effectBrightness, 1]; + TRACE_1("dust",_effectBrightness); + SETDUST(DAMOUNT,CLAMP(GETDUSTT(DAMOUNT) + 1,0,1)); SETDUST(DBULLETS,0); }; diff --git a/addons/goggles/script_component.hpp b/addons/goggles/script_component.hpp index 23dc4f428f..3074c10b81 100644 --- a/addons/goggles/script_component.hpp +++ b/addons/goggles/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT goggles +#define COMPONENT_BEAUTIFIED Goggles #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/grenades/config.cpp b/addons/grenades/config.cpp index 0d5ab09d0b..6fc14ece0c 100644 --- a/addons/grenades/config.cpp +++ b/addons/grenades/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/grenades/script_component.hpp b/addons/grenades/script_component.hpp index 67a958b27e..299a1cd69a 100644 --- a/addons/grenades/script_component.hpp +++ b/addons/grenades/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT grenades +#define COMPONENT_BEAUTIFIED Grenades #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/grenades/stringtable.xml b/addons/grenades/stringtable.xml index 44d9e7ad47..aadd1432d2 100644 --- a/addons/grenades/stringtable.xml +++ b/addons/grenades/stringtable.xml @@ -89,7 +89,7 @@ Also known as flashbang. Causes immediate flash blindness, deafness, tinnitus, and inner ear disturbance. Verursacht temporäre Blind- und Taubheit. Tambien conocida como granada cegadora. Produce de manera inmediata ceguera, sordera, tinitus y afecta el oído interior. - Les grenades incapacitantes servent à désorienter ou distraire une menace pendant quelques secondes. + Aussi connu en tant que "Flashbang". Explose en causant cécité, surdité, bourdonnements d'oreilles et perturbation de l'oreille interne. Znany też jako flashbang. Powoduje natychmiastową tymczasową ślepotę, głuchotę, dzwonienie w uszach i inne zaburzenia ucha wewnętrznego. Omračující granát je taktická nesmrtící zbraň používaná při záchraně rukojmí a zvládání davu. XM84 (M84) - граната нелетального действия, и предназначена для отвлечения и временного вывода из строя, либо дезориентации противника. Основное использование нашла при освобождении заложников, захвате преступников и террористов, а также проведении диверсионных миссий. diff --git a/addons/gunbag/CfgVehicles.hpp b/addons/gunbag/CfgVehicles.hpp index bf73d63755..1377a8f84d 100644 --- a/addons/gunbag/CfgVehicles.hpp +++ b/addons/gunbag/CfgVehicles.hpp @@ -3,29 +3,29 @@ class CfgVehicles { class CAManBase: Man { class ACE_Actions { class ACE_MainActions { - class GVAR(WeapontoGunbag) { - displayName = CSTRING(toGunbag); + class GVAR(weaponTo) { + displayName = CSTRING(ToGunbag); condition = QUOTE(([_target] call FUNC(hasGunbag)) && {[ARR_2(_player,_target)] call FUNC(canInteract) == 0}); statement = QUOTE([ARR_2(_player,_target)] call FUNC(toGunbag)); showDisabled = 0; priority = 1; - icon = PATHTOF(ui\gunbag_icon_ca.paa); + icon = QPATHTOF(ui\gunbag_icon_ca.paa); }; - class GVAR(WeaponoffGunbag) { - displayName = CSTRING(offGunbag); + class GVAR(weaponOff) { + displayName = CSTRING(OffGunbag); condition = QUOTE(([_target] call FUNC(hasGunbag)) && {[ARR_2(_player,_target)] call FUNC(canInteract) == 1}); statement = QUOTE([ARR_2(_player,_target)] call FUNC(offGunbag)); showDisabled = 0; priority = 1; - icon = PATHTOF(ui\gunbag_icon_ca.paa); + icon = QPATHTOF(ui\gunbag_icon_ca.paa); }; - class GVAR(StatusGunbag) { + class GVAR(status) { displayName = CSTRING(Status); condition = QUOTE([_target] call FUNC(hasGunbag)); statement = QUOTE([_target] call FUNC(status)); showDisabled = 0; priority = 2; - icon = PATHTOF(ui\gunbag_icon_ca.paa); + icon = QPATHTOF(ui\gunbag_icon_ca.paa); }; }; }; @@ -33,35 +33,35 @@ class CfgVehicles { class ACE_SelfActions { class ACE_Equipment { class GVAR(actions) { - displayName = CSTRING(displayname); + displayName = CSTRING(Displayname); condition = QUOTE([_player] call FUNC(hasGunbag)); showDisabled = 0; priority = 0.1; - icon = PATHTOF(ui\gunbag_icon_ca.paa); + icon = QPATHTOF(ui\gunbag_icon_ca.paa); - class GVAR(WeapontoGunbag) { - displayName = CSTRING(toGunbag); + class GVAR(weaponTo) { + displayName = CSTRING(ToGunbag); condition = QUOTE([ARR_2(_player,_player)] call FUNC(canInteract) == 0); statement = QUOTE([ARR_2(_player,_player)] call FUNC(toGunbag)); showDisabled = 0; priority = 1; - icon = PATHTOF(ui\gunbag_icon_ca.paa); + icon = QPATHTOF(ui\gunbag_icon_ca.paa); }; - class GVAR(WeaponoffGunbag) { - displayName = CSTRING(offGunbag); + class GVAR(weaponOff) { + displayName = CSTRING(OffGunbag); condition = QUOTE([ARR_2(_player,_player)] call FUNC(canInteract) == 1); statement = QUOTE([ARR_2(_player,_player)] call FUNC(offGunbag)); showDisabled = 0; priority = 1; - icon = PATHTOF(ui\gunbag_icon_ca.paa); + icon = QPATHTOF(ui\gunbag_icon_ca.paa); }; - class GVAR(StatusGunbag) { + class GVAR(status) { displayName = CSTRING(Status); condition = QUOTE([_player] call FUNC(hasGunbag)); statement = QUOTE([_player] call FUNC(status)); showDisabled = 0; priority = 2; - icon = PATHTOF(ui\gunbag_icon_ca.paa); + icon = QPATHTOF(ui\gunbag_icon_ca.paa); }; }; }; @@ -69,33 +69,33 @@ class CfgVehicles { }; class Bag_Base; - class CLASSNAME: Bag_Base { - _generalMacro = QUOTE(CLASSNAME); + class ADDON: Bag_Base { + _generalMacro = QUOTE(ADDON); author = "Ir0n1E"; scope = 2; displayName = CSTRING(Displayname); - model = PATHTOF(data\gunbag.p3d); - picture = PATHTOF(ui\gunbag_ca.paa); - icon = PATHTOF(ui\gunbag_icon_ca.paa); - hiddenSelections[] = {QUOTE(Camo),QUOTE(insignia)}; - hiddenSelectionsTextures[] = {PATHTOF(data\gunbag_co.paa)}; + model = QPATHTOF(data\ace_gunbag.p3d); + picture = QPATHTOF(ui\gunbag_ca.paa); + icon = QPATHTOF(ui\gunbag_icon_ca.paa); + hiddenSelections[] = {"Camo", "insignia"}; + hiddenSelectionsTextures[] = {QPATHTOF(data\gunbag_co.paa)}; maximumLoad = 80; mass = 11; }; - class DOUBLES(CLASSNAME,Tan): CLASSNAME { - _generalMacro = QUOTE(DOUBLES(CLASSNAME,Tan)); + class GVAR(Tan): ADDON { + _generalMacro = QGVAR(Tan); author = "Ir0n1E"; displayName = CSTRING(Displayname_Tan); - picture = PATHTOF(ui\gunbag_tan_ca.paa); - hiddenSelectionsTextures[] = {PATHTOF(data\gunbag_tan_co.paa)}; + picture = QPATHTOF(ui\gunbag_tan_ca.paa); + hiddenSelectionsTextures[] = {QPATHTOF(data\gunbag_tan_co.paa)}; }; class Box_NATO_Support_F; class ACE_Box_Misc: Box_NATO_Support_F { class TransportBackpacks { - MACRO_ADDBACKPACK(CLASSNAME,3); - MACRO_ADDBACKPACK(DOUBLES(CLASSNAME,Tan),3); + MACRO_ADDBACKPACK(ADDON,3); + MACRO_ADDBACKPACK(GVAR(Tan),3); }; }; }; diff --git a/addons/gunbag/README.md b/addons/gunbag/README.md index 6a7d4f6f6d..734c18f3c5 100644 --- a/addons/gunbag/README.md +++ b/addons/gunbag/README.md @@ -8,3 +8,4 @@ Adds a gunbag for DMRs. The people responsible for merging changes to this component or answering potential questions. +- [commy2](https://github.com/commy2) diff --git a/addons/gunbag/config.cpp b/addons/gunbag/config.cpp index d5f4696bfe..87fcd84f1c 100644 --- a/addons/gunbag/config.cpp +++ b/addons/gunbag/config.cpp @@ -2,11 +2,14 @@ class CfgPatches { class ADDON { - units[] = {CLASSNAME, DOUBLES(CLASSNAME,Tan)}; + name = COMPONENT_NAME; + units[] = {QUOTE(ADDON), QGVAR(Tan)}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_interaction", "ace_movement"}; - author[] = {"Ir0n1E"}; + author = ECSTRING(common,ACETeam); + authors[] = {"Ir0n1E"}; + url = ECSTRING(main,URL); VERSION_CONFIG; }; }; diff --git a/addons/gunbag/data/gunbag.p3d b/addons/gunbag/data/ace_gunbag.p3d similarity index 100% rename from addons/gunbag/data/gunbag.p3d rename to addons/gunbag/data/ace_gunbag.p3d diff --git a/addons/gunbag/data/model.cfg b/addons/gunbag/data/model.cfg index 7d08da7342..894edab2ac 100644 --- a/addons/gunbag/data/model.cfg +++ b/addons/gunbag/data/model.cfg @@ -1,148 +1,148 @@ class CfgSkeletons { - class Default { - isDiscrete = 1; - skeletonInherit = ""; - skeletonBones[] = {}; - }; - class OFP2_ManSkeleton { - isDiscrete = 0; - skeletonInherit = ""; - skeletonBones[] = { - "Pelvis","", - "Spine","Pelvis", - "Spine1","Spine", - "Spine2","Spine1", - "Spine3","Spine2", - "Camera","Pelvis", - "weapon","Spine1", - "launcher","Spine1", - //Head skeleton in hierarchy - "neck","Spine3", - "neck1","neck", - "head","neck1", - //New facial features - "Face_Hub","head", - "Face_Jawbone","Face_Hub", - "Face_Jowl","Face_Jawbone", - "Face_chopRight","Face_Jawbone", - "Face_chopLeft","Face_Jawbone", - "Face_LipLowerMiddle","Face_Jawbone", - "Face_LipLowerLeft","Face_Jawbone", - "Face_LipLowerRight","Face_Jawbone", - "Face_Chin","Face_Jawbone", - "Face_Tongue","Face_Jawbone", - "Face_CornerRight","Face_Hub", - "Face_CheekSideRight","Face_CornerRight", - "Face_CornerLeft","Face_Hub", - "Face_CheekSideLeft","Face_CornerLeft", - "Face_CheekFrontRight","Face_Hub", - "Face_CheekFrontLeft","Face_Hub", - "Face_CheekUpperRight","Face_Hub", - "Face_CheekUpperLeft","Face_Hub", - "Face_LipUpperMiddle","Face_Hub", - "Face_LipUpperRight","Face_Hub", - "Face_LipUpperLeft","Face_Hub", - "Face_NostrilRight","Face_Hub", - "Face_NostrilLeft","Face_Hub", - "Face_Forehead","Face_Hub", - "Face_BrowFrontRight","Face_Forehead", - "Face_BrowFrontLeft","Face_Forehead", - "Face_BrowMiddle","Face_Forehead", - "Face_BrowSideRight","Face_Forehead", - "Face_BrowSideLeft","Face_Forehead", - "Face_Eyelids","Face_Hub", - "Face_EyelidUpperRight","Face_Hub", - "Face_EyelidUpperLeft","Face_Hub", - "Face_EyelidLowerRight","Face_Hub", - "Face_EyelidLowerLeft","Face_Hub", - "EyeLeft","Face_Hub", - "EyeRight","Face_Hub", - //Left upper side - "LeftShoulder","Spine3", - "LeftArm","LeftShoulder", - "LeftArmRoll","LeftArm", - "LeftForeArm","LeftArmRoll", - "LeftForeArmRoll","LeftForeArm", - "LeftHand","LeftForeArmRoll", - "LeftHandRing","LeftHand", - "LeftHandRing1","LeftHandRing", - "LeftHandRing2","LeftHandRing1", - "LeftHandRing3","LeftHandRing2", - "LeftHandPinky1","LeftHandRing", - "LeftHandPinky2","LeftHandPinky1", - "LeftHandPinky3","LeftHandPinky2", - "LeftHandMiddle1","LeftHand", - "LeftHandMiddle2","LeftHandMiddle1", - "LeftHandMiddle3","LeftHandMiddle2", - "LeftHandIndex1","LeftHand", - "LeftHandIndex2","LeftHandIndex1", - "LeftHandIndex3","LeftHandIndex2", - "LeftHandThumb1","LeftHand", - "LeftHandThumb2","LeftHandThumb1", - "LeftHandThumb3","LeftHandThumb2", - //Right upper side - "RightShoulder","Spine3", - "RightArm","RightShoulder", - "RightArmRoll","RightArm", - "RightForeArm","RightArmRoll", - "RightForeArmRoll","RightForeArm", - "RightHand","RightForeArmRoll", - "RightHandRing","RightHand", - "RightHandRing1","RightHandRing", - "RightHandRing2","RightHandRing1", - "RightHandRing3","RightHandRing2", - "RightHandPinky1","RightHandRing", - "RightHandPinky2","RightHandPinky1", - "RightHandPinky3","RightHandPinky2", - "RightHandMiddle1","RightHand", - "RightHandMiddle2","RightHandMiddle1", - "RightHandMiddle3","RightHandMiddle2", - "RightHandIndex1","RightHand", - "RightHandIndex2","RightHandIndex1", - "RightHandIndex3","RightHandIndex2", - "RightHandThumb1","RightHand", - "RightHandThumb2","RightHandThumb1", - "RightHandThumb3","RightHandThumb2", - //Left lower side - "LeftUpLeg","Pelvis", - "LeftUpLegRoll","LeftUpLeg", - "LeftLeg","LeftUpLegRoll", - "LeftLegRoll","LeftLeg", - "LeftFoot","LeftLegRoll", - "LeftToeBase","LeftFoot", - //Right lower side - "RightUpLeg","Pelvis", - "RightUpLegRoll","RightUpLeg", - "RightLeg","RightUpLegRoll", - "RightLegRoll","RightLeg", - "RightFoot","RightLegRoll", - "RightToeBase","RightFoot" + class Default { + isDiscrete = 1; + skeletonInherit = ""; + skeletonBones[] = {}; }; - // location of pivot points (local axes) for hierarchical animation - pivotsModel="A3\anims_f\data\skeleton\SkeletonPivots.p3d"; + class OFP2_ManSkeleton { + isDiscrete = 0; + skeletonInherit = ""; + skeletonBones[] = { + "Pelvis","", + "Spine","Pelvis", + "Spine1","Spine", + "Spine2","Spine1", + "Spine3","Spine2", + "Camera","Pelvis", + "weapon","Spine1", + "launcher","Spine1", + //Head skeleton in hierarchy + "neck","Spine3", + "neck1","neck", + "head","neck1", + //New facial features + "Face_Hub","head", + "Face_Jawbone","Face_Hub", + "Face_Jowl","Face_Jawbone", + "Face_chopRight","Face_Jawbone", + "Face_chopLeft","Face_Jawbone", + "Face_LipLowerMiddle","Face_Jawbone", + "Face_LipLowerLeft","Face_Jawbone", + "Face_LipLowerRight","Face_Jawbone", + "Face_Chin","Face_Jawbone", + "Face_Tongue","Face_Jawbone", + "Face_CornerRight","Face_Hub", + "Face_CheekSideRight","Face_CornerRight", + "Face_CornerLeft","Face_Hub", + "Face_CheekSideLeft","Face_CornerLeft", + "Face_CheekFrontRight","Face_Hub", + "Face_CheekFrontLeft","Face_Hub", + "Face_CheekUpperRight","Face_Hub", + "Face_CheekUpperLeft","Face_Hub", + "Face_LipUpperMiddle","Face_Hub", + "Face_LipUpperRight","Face_Hub", + "Face_LipUpperLeft","Face_Hub", + "Face_NostrilRight","Face_Hub", + "Face_NostrilLeft","Face_Hub", + "Face_Forehead","Face_Hub", + "Face_BrowFrontRight","Face_Forehead", + "Face_BrowFrontLeft","Face_Forehead", + "Face_BrowMiddle","Face_Forehead", + "Face_BrowSideRight","Face_Forehead", + "Face_BrowSideLeft","Face_Forehead", + "Face_Eyelids","Face_Hub", + "Face_EyelidUpperRight","Face_Hub", + "Face_EyelidUpperLeft","Face_Hub", + "Face_EyelidLowerRight","Face_Hub", + "Face_EyelidLowerLeft","Face_Hub", + "EyeLeft","Face_Hub", + "EyeRight","Face_Hub", + //Left upper side + "LeftShoulder","Spine3", + "LeftArm","LeftShoulder", + "LeftArmRoll","LeftArm", + "LeftForeArm","LeftArmRoll", + "LeftForeArmRoll","LeftForeArm", + "LeftHand","LeftForeArmRoll", + "LeftHandRing","LeftHand", + "LeftHandRing1","LeftHandRing", + "LeftHandRing2","LeftHandRing1", + "LeftHandRing3","LeftHandRing2", + "LeftHandPinky1","LeftHandRing", + "LeftHandPinky2","LeftHandPinky1", + "LeftHandPinky3","LeftHandPinky2", + "LeftHandMiddle1","LeftHand", + "LeftHandMiddle2","LeftHandMiddle1", + "LeftHandMiddle3","LeftHandMiddle2", + "LeftHandIndex1","LeftHand", + "LeftHandIndex2","LeftHandIndex1", + "LeftHandIndex3","LeftHandIndex2", + "LeftHandThumb1","LeftHand", + "LeftHandThumb2","LeftHandThumb1", + "LeftHandThumb3","LeftHandThumb2", + //Right upper side + "RightShoulder","Spine3", + "RightArm","RightShoulder", + "RightArmRoll","RightArm", + "RightForeArm","RightArmRoll", + "RightForeArmRoll","RightForeArm", + "RightHand","RightForeArmRoll", + "RightHandRing","RightHand", + "RightHandRing1","RightHandRing", + "RightHandRing2","RightHandRing1", + "RightHandRing3","RightHandRing2", + "RightHandPinky1","RightHandRing", + "RightHandPinky2","RightHandPinky1", + "RightHandPinky3","RightHandPinky2", + "RightHandMiddle1","RightHand", + "RightHandMiddle2","RightHandMiddle1", + "RightHandMiddle3","RightHandMiddle2", + "RightHandIndex1","RightHand", + "RightHandIndex2","RightHandIndex1", + "RightHandIndex3","RightHandIndex2", + "RightHandThumb1","RightHand", + "RightHandThumb2","RightHandThumb1", + "RightHandThumb3","RightHandThumb2", + //Left lower side + "LeftUpLeg","Pelvis", + "LeftUpLegRoll","LeftUpLeg", + "LeftLeg","LeftUpLegRoll", + "LeftLegRoll","LeftLeg", + "LeftFoot","LeftLegRoll", + "LeftToeBase","LeftFoot", + //Right lower side + "RightUpLeg","Pelvis", + "RightUpLegRoll","RightUpLeg", + "RightLeg","RightUpLegRoll", + "RightLegRoll","RightLeg", + "RightFoot","RightLegRoll", + "RightToeBase","RightFoot" + }; + // location of pivot points (local axes) for hierarchical animation + pivotsModel="A3\anims_f\data\skeleton\SkeletonPivots.p3d"; }; }; class CfgModels { - class Default { - sectionsInherit=""; - sections[] = {}; - skeletonName = ""; - }; - class ArmaMan: Default { - htMin = 60; // Minimum half-cooling time (in seconds) - htMax = 1800; // Maximum half-cooling time (in seconds) - afMax = 30; // Maximum temperature in case the model is alive (in celsius) - mfMax = 0; // Maximum temperature when the model is moving (in celsius) - mFact = 1; // Metabolism factor - number from interval <0, 1> (0 - metabolism has no influence, 1 - metabolism has full influence (no other temperature source will be considered)). - tBody = 37; // Metabolism temperature of the model (in celsius) - - sections[] = { - "osobnost","Head_Injury","Body_Injury","l_leg_injury","l_arm_injury","r_arm_injury","r_leg_injury","injury_body", "injury_legs", "injury_hands", - "clan","clan_sign","Camo","CamoB","Camo1","Camo2","personality","hl", "injury_head", "insignia" + class Default { + sectionsInherit=""; + sections[] = {}; + skeletonName = ""; }; - skeletonName = "OFP2_ManSkeleton"; - }; + class ArmaMan: Default { + htMin = 60; // Minimum half-cooling time (in seconds) + htMax = 1800; // Maximum half-cooling time (in seconds) + afMax = 30; // Maximum temperature in case the model is alive (in celsius) + mfMax = 0; // Maximum temperature when the model is moving (in celsius) + mFact = 1; // Metabolism factor - number from interval <0, 1> (0 - metabolism has no influence, 1 - metabolism has full influence (no other temperature source will be considered)). + tBody = 37; // Metabolism temperature of the model (in celsius) - class gunbag: ArmaMan {}; + sections[] = { + "osobnost","Head_Injury","Body_Injury","l_leg_injury","l_arm_injury","r_arm_injury","r_leg_injury","injury_body", "injury_legs", "injury_hands", + "clan","clan_sign","Camo","CamoB","Camo1","Camo2","personality","hl", "injury_head", "insignia" + }; + skeletonName = "OFP2_ManSkeleton"; + }; + + class ace_gunbag: ArmaMan {}; }; diff --git a/addons/gunbag/functions/fnc_calculateMass.sqf b/addons/gunbag/functions/fnc_calculateMass.sqf index 47e8a9151d..e365930d16 100644 --- a/addons/gunbag/functions/fnc_calculateMass.sqf +++ b/addons/gunbag/functions/fnc_calculateMass.sqf @@ -1,6 +1,6 @@ /* * Author: Ir0n1E - * calculate mass of weapon an items + * Calculate mass of weapon an items. * * Arguments: * 0: Weapon @@ -10,6 +10,9 @@ * Return Value: * Mass * + * Example: + * ["weapon", ["item1", "item2"], ["mag1", "mag2"]] call ace_gunbag_fnc_calculateMass + * * Public: No */ #include "script_component.hpp" diff --git a/addons/gunbag/functions/fnc_canInteract.sqf b/addons/gunbag/functions/fnc_canInteract.sqf index 0d098b9f7e..b24533f632 100644 --- a/addons/gunbag/functions/fnc_canInteract.sqf +++ b/addons/gunbag/functions/fnc_canInteract.sqf @@ -1,6 +1,6 @@ /* * Author: Ir0n1E - * Check if client able to interact with gunbag + * Check if client able to interact with gunbag. * * Arguments: * 0: Unit @@ -9,6 +9,9 @@ * Return Value: * -1: can't interact 0: empty gunbag 1: full gunbag * + * Example: + * _canInteract = [player, target] call ace_gunbag_fnc_canInteract + * * Public: No */ #include "script_component.hpp" diff --git a/addons/gunbag/functions/fnc_hasGunbag.sqf b/addons/gunbag/functions/fnc_hasGunbag.sqf index f7cab0435d..8c8fdd6147 100644 --- a/addons/gunbag/functions/fnc_hasGunbag.sqf +++ b/addons/gunbag/functions/fnc_hasGunbag.sqf @@ -1,12 +1,15 @@ /* * Author: Ir0n1E - * switches gunbag full/empty for mass calculation + * Switches gunbag full/empty for mass calculation. * * Arguments: * 0: Unit * * Return Value: - * (BOOL) + * Has Gunbag + * + * Example: + * [player] call ace_gunbag_fnc_hasGunbag * * Public: No */ @@ -14,4 +17,4 @@ params ["_unit"]; -backpackContainer _unit isKindOf QUOTE(CLASSNAME) +(backpackContainer _unit) isKindOf QUOTE(ADDON) diff --git a/addons/gunbag/functions/fnc_offGunbag.sqf b/addons/gunbag/functions/fnc_offGunbag.sqf index d11043f065..a46d49675d 100644 --- a/addons/gunbag/functions/fnc_offGunbag.sqf +++ b/addons/gunbag/functions/fnc_offGunbag.sqf @@ -1,13 +1,16 @@ /* * Author: Ir0n1E - * get weapon out of gunbag + * Get weapon out of gunbag. * * Arguments: * 0: Unit * 1: Target * * Return Value: - * Nothing + * None + * + * Example: + * [player, target] call ace_gunbag_fnc_toGunbag * * Public: No */ @@ -20,7 +23,7 @@ private _gunbag = backpackContainer _target; _unit call EFUNC(common,goKneeling); // play sound -if (!isNil "ACE_Backpacks") then { +if (["ace_backpacks"] call EFUNC(common,isModLoaded)) then { [_target, _gunbag] call EFUNC(backpacks,backpackOpened); }; diff --git a/addons/gunbag/functions/fnc_offGunbagCallback.sqf b/addons/gunbag/functions/fnc_offGunbagCallback.sqf index 2bee565bd1..5d548d0e9c 100644 --- a/addons/gunbag/functions/fnc_offGunbagCallback.sqf +++ b/addons/gunbag/functions/fnc_offGunbagCallback.sqf @@ -1,13 +1,16 @@ /* * Author: Ir0n1E - * get weapon out of gunbag + * Get weapon out of gunbag. * * Arguments: * 0: Unit * 1: Target * * Return Value: - * Nothing + * None + * + * Example: + * [player, target] call ace_gunbag_fnc_offGunbagCallback * * Public: No */ @@ -43,6 +46,6 @@ private _mass = [_weapon, _items, _magazines] call FUNC(calculateMass); _gunbag setVariable [QGVAR(gunbagWeapon), [], true]; // play sound -if (!isNil "ACE_Backpacks") then { +if (["ace_backpacks"] call EFUNC(common,isModLoaded)) then { [_target, _gunbag] call EFUNC(backpacks,backpackOpened); }; diff --git a/addons/gunbag/functions/fnc_status.sqf b/addons/gunbag/functions/fnc_status.sqf index 6b6196ba01..33c30ec0e1 100644 --- a/addons/gunbag/functions/fnc_status.sqf +++ b/addons/gunbag/functions/fnc_status.sqf @@ -1,12 +1,15 @@ /* * Author: Ir0n1E - * check gunbag status full/empty + * Check gunbag status full/empty. * * Arguments: * 0: Unit * * Return Value: - * Nothing + * None + * + * Example: + * [player] call ace_gunbag_fnc_status * * Public: No */ diff --git a/addons/gunbag/functions/fnc_toGunbag.sqf b/addons/gunbag/functions/fnc_toGunbag.sqf index 27ca4e2924..8851e5610b 100644 --- a/addons/gunbag/functions/fnc_toGunbag.sqf +++ b/addons/gunbag/functions/fnc_toGunbag.sqf @@ -1,13 +1,16 @@ /* * Author: Ir0n1E - * put weapon into gunbag + * Put weapon into gunbag. * * Arguments: * 0: Unit * 1: Target * * Return Value: - * Nothing + * None + * + * Example: + * [player, target] call ace_gunbag_fnc_toGunbag * * Public: No */ @@ -20,7 +23,7 @@ private _gunbag = backpackContainer _target; _unit call EFUNC(common,goKneeling); // play sound -if (!isNil "ACE_Backpacks") then { +if (["ace_backpacks"] call EFUNC(common,isModLoaded)) then { [_target, _gunbag] call EFUNC(backpacks,backpackOpened); }; diff --git a/addons/gunbag/functions/fnc_toGunbagCallback.sqf b/addons/gunbag/functions/fnc_toGunbagCallback.sqf index c02d29e0e3..3587c9e6b8 100644 --- a/addons/gunbag/functions/fnc_toGunbagCallback.sqf +++ b/addons/gunbag/functions/fnc_toGunbagCallback.sqf @@ -1,13 +1,16 @@ /* * Author: Ir0n1E - * put weapon into gunbag + * Put weapon into gunbag. * * Arguments: * 0: Unit * 1: Target * * Return Value: - * Nothing + * None + * + * Example: + * [player, target] call ace_gunbag_fnc_toGunbagCallback * * Public: No */ @@ -40,6 +43,6 @@ _unit removeWeapon _weapon; _gunbag setVariable [QGVAR(gunbagWeapon), [_weapon, _items, _magazines], true]; // play sound -if (!isNil "ACE_Backpacks") then { +if (["ace_backpacks"] call EFUNC(common,isModLoaded)) then { [_target, _gunbag] call EFUNC(backpacks,backpackOpened); }; diff --git a/addons/gunbag/script_component.hpp b/addons/gunbag/script_component.hpp index 2bfb3235a8..5627e1048b 100644 --- a/addons/gunbag/script_component.hpp +++ b/addons/gunbag/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT gunbag +#define COMPONENT_BEAUTIFIED Gunbag #include "\z\ace\addons\main\script_mod.hpp" //#define DEBUG_ENABLED_GUNBAG @@ -16,5 +17,4 @@ #include "\z\ace\addons\main\script_macros.hpp" -#define CLASSNAME ACE_Gunbag #define PROGRESSBAR_TIME 5 diff --git a/addons/gunbag/stringtable.xml b/addons/gunbag/stringtable.xml index d779918988..50a4ebfc0c 100644 --- a/addons/gunbag/stringtable.xml +++ b/addons/gunbag/stringtable.xml @@ -1,29 +1,35 @@ - + - + Gunbag Waffentasche + Housse d'arme Gunbag (Tan) Waffentasche (Tan) + Housse d'arme (marron clair) - + Put weapon into gunbag Lege Waffe in Waffentasche + Placer l'arme dans la housse d'arme - + Get weapon out of gunbag Hole Waffe aus Waffentasche + Sortir l'arme hors de la housse - Status Gunbag - Status Waffentasche + Status + Status + Status - + Gunbag Empty Waffentasche leer + Housse d'arme vide - + \ No newline at end of file diff --git a/addons/hearing/XEH_postInit.sqf b/addons/hearing/XEH_postInit.sqf index cdf2e6d74b..34664525da 100644 --- a/addons/hearing/XEH_postInit.sqf +++ b/addons/hearing/XEH_postInit.sqf @@ -28,18 +28,18 @@ GVAR(volumeAttenuation) = 1; [FUNC(updateVolume), 1, [false]] call CBA_fnc_addPerFrameHandler; // Update veh attunation when player veh changes - ["ace_playerVehicleChanged", FUNC(updatePlayerVehAttenuation)] call CBA_fnc_addEventHandler; - ["ace_playerTurretChanged", FUNC(updatePlayerVehAttenuation)] call CBA_fnc_addEventHandler; + ["vehicle", FUNC(updatePlayerVehAttenuation)] call CBA_fnc_addPlayerEventHandler; + ["turret", FUNC(updatePlayerVehAttenuation)] call CBA_fnc_addPlayerEventHandler; // Reset deafness on respawn (or remote control player switch) - ["ace_playerChanged", { + ["unit", { GVAR(deafnessDV) = 0; GVAR(deafnessPrior) = 0; ACE_player setVariable [QGVAR(deaf), false]; GVAR(time3) = 0; [] call FUNC(updateHearingProtection); - }] call CBA_fnc_addEventHandler; + }] call CBA_fnc_addPlayerEventHandler; // Update protection on possible helmet change - ["ace_playerInventoryChanged", {[] call FUNC(updateHearingProtection);}] call CBA_fnc_addEventHandler; + ["loadout", FUNC(updateHearingProtection)] call CBA_fnc_addPlayerEventHandler; }] call CBA_fnc_addEventHandler; diff --git a/addons/hearing/config.cpp b/addons/hearing/config.cpp index 455bc20dd1..79ab61cb8b 100644 --- a/addons/hearing/config.cpp +++ b/addons/hearing/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {"ACE_EarPlugs"}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/hearing/script_component.hpp b/addons/hearing/script_component.hpp index de1ff267e4..7c0413898f 100644 --- a/addons/hearing/script_component.hpp +++ b/addons/hearing/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT hearing +#define COMPONENT_BEAUTIFIED Hearing #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index f52b0c9812..e2f1977e70 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -20,7 +20,7 @@ Stopery do uszu umożliwiają użytkownikowi przebywać w pobliżu głośnej broni bez poniesienia konsekwencji jaką jest utrata słuchu. Ochranné špunty umožňují uživateli, aby neutrpěl zranění jeho sluchu v blízkosti hlasitých zbraní. Беруши позволяют носителю находиться возле громкого вооружения без потери слуха. - Bouchons Anti-Bruits pour la prévention des traumatismes sonores aigüs. + Bouchons Anti-Bruits permettant au porteur d'être près d'arme bruyante sans risque d'endommager son ouïe. Erősebb hanghatásoktól védő füldugó, megakadályozza a nagy hanggal járó fegyverzettől való halláskárosodást. Protetor para ouvidos permitem que o usuário esteja próximo a ruídos sem danificar sua audição. Proteggono l'apparato uditivo, permettendo a chi li indossa di resistere ai suoni particolarmente forti senza alcun danno. @@ -32,7 +32,7 @@ Włóż stopery Dát špunty do uší Надеть беруши - Bouchons mis + Mettre les bouchons Füldugó berakva Protetores colocados Indossa i tappi auricolari @@ -44,7 +44,7 @@ Wyjmij stopery Vyndat špunty z uší Снять беруши - Bouchons enlevés + Enlever les bouchons Füldugó kivéve Protetores retirados Levati i tappi auricolari @@ -174,7 +174,7 @@ Efecto Zeus RC Vliv na Zeus RC Effetto Zeus RC - Effets Zeus RC + Effet sur le CàD du Zeus Allow zeus remote controlled units to be able to take hearing damage. @@ -185,7 +185,7 @@ Permitir a las unidades por control remoto de zeus que puedan tener daños auditivos. Aktivovat efekt ztráty sluchu pro vzdáleně ovládané jednotky. Consenti alle unità controllate in remoto da Zeus di ricevere danni all'udito. - Autoriser le Zeus contrôlé à distance de prendre des dommages auditifs. + Permet aux unités controlées à distance de subir des traumatismes sonores. Add earplugs to units @@ -196,7 +196,7 @@ Přidat špunty jednotce Aggiungi Tappi per Orecchie alle unità Agregar tapones de oida a la unidad - Ajouter des bouchons anti-bruits aux unités. + Ajouter des bouchons anti-bruits aux unités Add the `ACE_EarPlugs` item to all units that have loud weapons. Can disable if using custom loadouts. @@ -207,7 +207,7 @@ Přidat `ACE_EarPlugs` všem jednotkám které mají zbraň. Můžete vypnout, pokud používáte vlastní výbavu. Aggiungi l'oggetto 'ACE_EarPlugs' a tutte le unità che hanno armi rumorose. 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. - Ajouter l'item "ACE_EarPlugs" à toutes les unités qui ont des armes lourdes. Peut être desactivé si des équipements personnels sont utilisés. + Ajoute l'objet "Ace_EarPlugs" à toutes les unités ayant des armes bruyantes. Peut être désactivé par des loadouts personalisés. - \ No newline at end of file + diff --git a/addons/hitreactions/config.cpp b/addons/hitreactions/config.cpp index d6146a6b29..3d066e6af1 100644 --- a/addons/hitreactions/config.cpp +++ b/addons/hitreactions/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/hitreactions/script_component.hpp b/addons/hitreactions/script_component.hpp index f445ce3f8d..9252f1bca0 100644 --- a/addons/hitreactions/script_component.hpp +++ b/addons/hitreactions/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT hitreactions +#define COMPONENT_BEAUTIFIED Hit Reactions #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL @@ -14,4 +15,4 @@ #define DEBUG_SETTINGS DEBUG_ENABLED_HITREACTIONS #endif -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/huntir/config.cpp b/addons/huntir/config.cpp index ce4b10bab1..0adf9670a0 100644 --- a/addons/huntir/config.cpp +++ b/addons/huntir/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {"ACE_HuntIR", "ACE_HuntIRBox"}; weapons[] = {"ACE_HuntIR_monitor"}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/huntir/script_component.hpp b/addons/huntir/script_component.hpp index 5c99e04d46..01b4f92fec 100644 --- a/addons/huntir/script_component.hpp +++ b/addons/huntir/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT huntir +#define COMPONENT_BEAUTIFIED HuntIR #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/huntir/stringtable.xml b/addons/huntir/stringtable.xml index 8648f58ea9..8db0e6afd1 100644 --- a/addons/huntir/stringtable.xml +++ b/addons/huntir/stringtable.xml @@ -9,7 +9,7 @@ Ящик с HuntIR HuntIR Transport Box Skrzynia HuntIR - HuntIR Transport Box + Boite de transport HuntIR HuntIR Transport Box Caixa de transporte do HuntIR @@ -45,7 +45,7 @@ Включить HuntIR монитор Activate HuntIR monitor Włącz odbiornik HuntIR - Allumer écran HuntIR + Allumer l'écran du HuntIR HuntIR monitor aktiválása Ativar monitor do HuntIR @@ -57,7 +57,7 @@ Камера: Camera: Kamera: - Caméra: + Caméra : Kamera: Câmera: @@ -69,7 +69,7 @@ Высота: Altitude: Wysokość: - Altitude: + Altitude : Magasság: Altitude: @@ -81,7 +81,7 @@ Время записи: Recording Time: Czas nagrywania: - Temps d'enregistrement: + Temps d'enregistrement : Felvételi idő: Tempo de gravação: @@ -93,7 +93,7 @@ Нажмите ESC чтобы выйти из режима камеры Press ESC to quit camera Wciśnij ESC by wyjść z widoku kamery - Appuyer sur ESC pour quitter camera + Appuyer sur ESC pour quitter la camera Nyomj ESC-ket a kamerából való kilépéshez Pressione ESC para sair da câmera @@ -117,7 +117,7 @@ A/D - Приближение A/D - Cycle zoom A/D - powiększenie - A/D - Changement zoom + Q/D - Changement de zoom A/D - Nagyítás A/D - Troca zoom @@ -129,7 +129,7 @@ W/S - Выбрать камеру W/S - Select camera W/S - wybór kamery - W/S - Sélectionner caméra + Z/S - Sélectionner la caméra W/S - Kamera váltás W/S - Seleciona câmera @@ -141,7 +141,7 @@ Влево/Вправо - Вращать камеру Left/Right - Rotate camera Lewo/Prawo - obrót kamery w poziomie - Gauche/Droite - Rotation caméra + Gauche/Droite - Rotation de la caméra Jobb/Bal - Kamera forgatás Esquerda/Direita - Rotaciona câmera @@ -153,7 +153,7 @@ Вверх/Вниз - Поднять/Опустить камеру Up/Down - Elevate/lower camera Góra/Dół - obrót kamery w pionie - Haut/Bas - Monter/descendre caméra + Haut/Bas - Monter/descendre la caméra Fel/Le - Kamera döntése/süllyesztése Acima/Abaixo - Eleva/Abaixa a câmera @@ -177,7 +177,7 @@ R - Сбросить настройки камеры R - Reset camera R - resetuj kamerę - R - Reset caméra + R - Reset de la caméra R - Kamera visszaállítása R - Redefine a câmera @@ -194,4 +194,4 @@ Esc - Sai do Ajuda - + \ No newline at end of file diff --git a/addons/interact_menu/XEH_clientInit.sqf b/addons/interact_menu/XEH_clientInit.sqf index 30277ed877..e4b7655efc 100644 --- a/addons/interact_menu/XEH_clientInit.sqf +++ b/addons/interact_menu/XEH_clientInit.sqf @@ -54,7 +54,7 @@ GVAR(ParsedTextCached) = []; }] call CBA_fnc_addEventHandler; // disable firing while the interact menu is is is opened -["ace_playerChanged", {_this call FUNC(handlePlayerChanged)}] call CBA_fnc_addEventHandler; +["unit", FUNC(handlePlayerChanged)] call CBA_fnc_addPlayerEventHandler; // background options ["ace_interactMenuOpened", { diff --git a/addons/interact_menu/config.cpp b/addons/interact_menu/config.cpp index e8731df93c..95561f4579 100644 --- a/addons/interact_menu/config.cpp +++ b/addons/interact_menu/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/interact_menu/functions/fnc_addActionToClass.sqf b/addons/interact_menu/functions/fnc_addActionToClass.sqf index 56ae64e5f9..32c086f692 100644 --- a/addons/interact_menu/functions/fnc_addActionToClass.sqf +++ b/addons/interact_menu/functions/fnc_addActionToClass.sqf @@ -3,13 +3,13 @@ * Insert an ACE action to a class, under a certain path * Note: This function is NOT global. * - * Argument: + * Arguments: * 0: TypeOf of the class * 1: Type of action, 0 for actions, 1 for self-actions * 2: Parent path of the new action * 3: Action * - * Return value: + * Return Value: * The entry full path, which can be used to remove the entry, or add children entries . * * Example: diff --git a/addons/interact_menu/functions/fnc_addActionToObject.sqf b/addons/interact_menu/functions/fnc_addActionToObject.sqf index 31e15ae7aa..d307f8b9ad 100644 --- a/addons/interact_menu/functions/fnc_addActionToObject.sqf +++ b/addons/interact_menu/functions/fnc_addActionToObject.sqf @@ -3,13 +3,13 @@ * Insert an ACE action to an object, under a certain config path * Note: This function is NOT global. * - * Argument: + * Arguments: * 0: Object the action should be assigned to * 1: Type of action, 0 for actions, 1 for self-actions * 2: Parent path of the new action * 3: Action * - * Return value: + * Return Value: * The entry full path, which can be used to remove the entry, or add children entries . * * Example: diff --git a/addons/interact_menu/functions/fnc_addMainAction.sqf b/addons/interact_menu/functions/fnc_addMainAction.sqf index 4370f4d2ee..43273ef967 100644 --- a/addons/interact_menu/functions/fnc_addMainAction.sqf +++ b/addons/interact_menu/functions/fnc_addMainAction.sqf @@ -2,11 +2,11 @@ * Author: Jonpas, PabstMirror * Makes sure there is a ACE_MainActions on the object type * - * Argument: + * Arguments: * 0: Object classname * 1: Type of action, 0 for actions, 1 for self-actions * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf b/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf index 42fcf96cc7..ae066576f7 100644 --- a/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf +++ b/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf @@ -2,13 +2,13 @@ * Author: esteldunedain * Collect a entire tree of active actions * - * Argument: + * Arguments: * 0: Object * 1: Original action tree * 2: Parent path * 3: Distance to base point (will be 0 for self/zeus/in-vehicle) * - * Return value: + * Return Value: * Active children * * Public: No diff --git a/addons/interact_menu/functions/fnc_compileMenu.sqf b/addons/interact_menu/functions/fnc_compileMenu.sqf index 7f2ca38540..4cf657a3bc 100644 --- a/addons/interact_menu/functions/fnc_compileMenu.sqf +++ b/addons/interact_menu/functions/fnc_compileMenu.sqf @@ -2,10 +2,10 @@ * Author: NouberNou and esteldunedain * Compile the action menu from config for an object's class * - * Argument: + * Arguments: * 0: Object or class name or * - * Return value: + * Return Value: * None * * Public: No diff --git a/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf b/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf index eb9727a072..0c5e236f0b 100644 --- a/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf +++ b/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf @@ -2,10 +2,10 @@ * Author: NouberNou and esteldunedain * Compile the self action menu from config for an object's class * - * Argument: + * Arguments: * 0: Object or class name or * - * Return value: + * Return Value: * None * * Public: No diff --git a/addons/interact_menu/functions/fnc_compileMenuZeus.sqf b/addons/interact_menu/functions/fnc_compileMenuZeus.sqf index 6026735154..c0797269e6 100644 --- a/addons/interact_menu/functions/fnc_compileMenuZeus.sqf +++ b/addons/interact_menu/functions/fnc_compileMenuZeus.sqf @@ -2,10 +2,10 @@ * Author: SilentSpike * Compile the zeus action menu (only to be done once) * - * Argument: + * Arguments: * nil * - * Return value: + * Return Value: * None * * Public: No diff --git a/addons/interact_menu/functions/fnc_createAction.sqf b/addons/interact_menu/functions/fnc_createAction.sqf index db31200c47..b7616b9718 100644 --- a/addons/interact_menu/functions/fnc_createAction.sqf +++ b/addons/interact_menu/functions/fnc_createAction.sqf @@ -3,7 +3,7 @@ * Creates an isolated ACE action * Note: This function is NOT global. * - * Argument: + * Arguments: * 0: Action name * 1: Name of the action shown in the menu * 2: Icon @@ -16,7 +16,7 @@ * 9: Other parameters [showDisabled,enableInside,canCollapse,runOnHover,doNotCheckLOS] (Optional) * 10: Modifier function (Optional) * - * Return value: + * Return Value: * Action * * Example: diff --git a/addons/interact_menu/functions/fnc_ctrlSetParsedTextCached.sqf b/addons/interact_menu/functions/fnc_ctrlSetParsedTextCached.sqf index 1c4e535d66..38e5a42460 100644 --- a/addons/interact_menu/functions/fnc_ctrlSetParsedTextCached.sqf +++ b/addons/interact_menu/functions/fnc_ctrlSetParsedTextCached.sqf @@ -2,12 +2,12 @@ * Author: commy2 * Sets the controls structured text if it isn't already set. * - * Argument: + * Arguments: * 0: Structured Text Ctrl * 1: Index * 2: Text * - * Return value: + * Return Value: * None * * Public: No diff --git a/addons/interact_menu/functions/fnc_findActionNode.sqf b/addons/interact_menu/functions/fnc_findActionNode.sqf index edd0cace04..c328e03f39 100644 --- a/addons/interact_menu/functions/fnc_findActionNode.sqf +++ b/addons/interact_menu/functions/fnc_findActionNode.sqf @@ -3,11 +3,11 @@ * Return action point from path * Note: This function is NOT global. * - * Argument: + * Arguments: * 0: List of Action Tree * 1: Path * - * Return value: + * Return Value: * Action node or if not found * * Example: diff --git a/addons/interact_menu/functions/fnc_handlePlayerChanged.sqf b/addons/interact_menu/functions/fnc_handlePlayerChanged.sqf index d8ad91c434..f995ffa454 100644 --- a/addons/interact_menu/functions/fnc_handlePlayerChanged.sqf +++ b/addons/interact_menu/functions/fnc_handlePlayerChanged.sqf @@ -2,11 +2,11 @@ * Author: commy2 * Disables firing while the menu is opened. Called from playerChanged eh. * - * Argument: + * Arguments: * 0: New unit to add the addAction eh * 1: Old unit to remove the addAction eh * - * Return value: + * Return Value: * None */ #include "script_component.hpp" diff --git a/addons/interact_menu/functions/fnc_isSubPath.sqf b/addons/interact_menu/functions/fnc_isSubPath.sqf index 53d88eb9d1..5933e2c462 100644 --- a/addons/interact_menu/functions/fnc_isSubPath.sqf +++ b/addons/interact_menu/functions/fnc_isSubPath.sqf @@ -2,11 +2,11 @@ * Author: esteldunedain * Check if the first path is a subpath of the other * - * Argument: + * Arguments: * 0: LongPath * 1: ShortPath * - * Return value: + * Return Value: * Bool * * Example: diff --git a/addons/interact_menu/functions/fnc_keyDown.sqf b/addons/interact_menu/functions/fnc_keyDown.sqf index ab9969a994..1aa9b4c653 100644 --- a/addons/interact_menu/functions/fnc_keyDown.sqf +++ b/addons/interact_menu/functions/fnc_keyDown.sqf @@ -2,10 +2,10 @@ * Author: NouberNou and esteldunedain * Handle interactions key down * - * Argument: + * Arguments: * 0: Type of key: 0 interaction / 1 self interaction * - * Return value: + * Return Value: * true * * Public: No diff --git a/addons/interact_menu/functions/fnc_keyUp.sqf b/addons/interact_menu/functions/fnc_keyUp.sqf index 969e1f2b08..ce96250552 100644 --- a/addons/interact_menu/functions/fnc_keyUp.sqf +++ b/addons/interact_menu/functions/fnc_keyUp.sqf @@ -2,10 +2,10 @@ * Author: NouberNou and esteldunedain * Handle interactions key up * - * Argument: + * Arguments: * 0: Type of key: 0 interaction / 1 self interaction * - * Return value: + * Return Value: * true * * Public: No diff --git a/addons/interact_menu/functions/fnc_removeActionFromClass.sqf b/addons/interact_menu/functions/fnc_removeActionFromClass.sqf index a01078ad3b..f3db5fc8c3 100644 --- a/addons/interact_menu/functions/fnc_removeActionFromClass.sqf +++ b/addons/interact_menu/functions/fnc_removeActionFromClass.sqf @@ -2,12 +2,12 @@ * Author: esteldunedain * Removes an action from a class * - * Argument: + * Arguments: * 0: TypeOf of the class * 1: Type of action, 0 for actions, 1 for self-actions * 2: Full path of the new action * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/interact_menu/functions/fnc_removeActionFromObject.sqf b/addons/interact_menu/functions/fnc_removeActionFromObject.sqf index e630bf4ad1..3b720d3c71 100644 --- a/addons/interact_menu/functions/fnc_removeActionFromObject.sqf +++ b/addons/interact_menu/functions/fnc_removeActionFromObject.sqf @@ -2,12 +2,12 @@ * Author: commy2, NouberNou and esteldunedain * Removes an action from an object * - * Argument: + * Arguments: * 0: Object the action is assigned to * 1: Type of action, 0 for actions, 1 for self-actions * 2: Full path of the action to remove * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/interact_menu/functions/fnc_render.sqf b/addons/interact_menu/functions/fnc_render.sqf index a05ad79670..1c3ed50c92 100644 --- a/addons/interact_menu/functions/fnc_render.sqf +++ b/addons/interact_menu/functions/fnc_render.sqf @@ -2,10 +2,10 @@ * Author: NouberNou and esteldunedain * Render all available nearby interactions * - * Argument: + * Arguments: * None * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/interact_menu/functions/fnc_renderActionPoints.sqf b/addons/interact_menu/functions/fnc_renderActionPoints.sqf index d3df02ca40..e30ee55c10 100644 --- a/addons/interact_menu/functions/fnc_renderActionPoints.sqf +++ b/addons/interact_menu/functions/fnc_renderActionPoints.sqf @@ -2,10 +2,10 @@ * Author: NouberNou and esteldunedain * Render all action points * - * Argument: + * Arguments: * None * - * Return value: + * Return Value: * None * * Public: No @@ -16,8 +16,8 @@ GVAR(currentOptions) = []; private _player = ACE_player; -private _cameraPosASL = AGLtoASL (positionCameraToWorld [0, 0, 0]); -private _cameraDir = (AGLtoASL (positionCameraToWorld [0, 0, 1])) vectorDiff _cameraPosASL; +GVAR(cameraPosASL) = AGLtoASL (positionCameraToWorld [0, 0, 0]); +GVAR(cameraDir) = (AGLtoASL (positionCameraToWorld [0, 0, 1])) vectorDiff GVAR(cameraPosASL); private _fnc_renderNearbyActions = { // Render all nearby interaction menus @@ -32,7 +32,7 @@ private _fnc_renderNearbyActions = { private _target = _x; // Quick oclussion test. Skip objects more than 1 m behind the camera plane - private _lambda = ((getPosASL _x) vectorDiff _cameraPosASL) vectorDotProduct _cameraDir; + private _lambda = ((getPosASL _x) vectorDiff GVAR(cameraPosASL)) vectorDotProduct GVAR(cameraDir); if ((_lambda > -1) && {!isObjectHidden _target}) then { private _numInteractions = 0; // Prevent interacting with yourself or your own vehicle diff --git a/addons/interact_menu/functions/fnc_renderBaseMenu.sqf b/addons/interact_menu/functions/fnc_renderBaseMenu.sqf index 57ded33be0..852c2b332f 100644 --- a/addons/interact_menu/functions/fnc_renderBaseMenu.sqf +++ b/addons/interact_menu/functions/fnc_renderBaseMenu.sqf @@ -2,12 +2,12 @@ * Author: NouberNou and esteldunedain * Render the interaction menu for a base action * - * Argument: + * Arguments: * 0: Object * 1: Action node * 2: 3D position or 2D position (Optional) * - * Return value: + * Return Value: * Was the menu rendered * * Public: No @@ -90,9 +90,8 @@ if (_activeActionTree isEqualTo []) exitWith {false}; BEGIN_COUNTER(fnc_renderMenus); -// IGNORE_PRIVATE_WARNING(_cameraPosASL,_cameraDir); if (count _pos > 2) then { - _sPos pushBack (((AGLtoASL _pos) vectorDiff _cameraPosASL) vectorDotProduct _cameraDir); + _sPos pushBack (((AGLtoASL _pos) vectorDiff GVAR(cameraPosASL)) vectorDotProduct GVAR(cameraDir)); } else { _sPos pushBack 0; }; diff --git a/addons/interact_menu/functions/fnc_renderIcon.sqf b/addons/interact_menu/functions/fnc_renderIcon.sqf index 9ead5c65cf..ceeeb9991d 100644 --- a/addons/interact_menu/functions/fnc_renderIcon.sqf +++ b/addons/interact_menu/functions/fnc_renderIcon.sqf @@ -2,13 +2,13 @@ * Author: NouberNou and esteldunedain * Render a single interaction icon * - * Argument: + * Arguments: * 0: Text * 1: Icon * 2: 2d position * 3: Text Settings * - * Return value: + * Return Value: * None * * Public: No diff --git a/addons/interact_menu/functions/fnc_renderMenu.sqf b/addons/interact_menu/functions/fnc_renderMenu.sqf index f975db17f1..687c56d2c3 100644 --- a/addons/interact_menu/functions/fnc_renderMenu.sqf +++ b/addons/interact_menu/functions/fnc_renderMenu.sqf @@ -2,13 +2,13 @@ * Author: NouberNou and esteldunedain * Render an interaction menu and it's children recursively * - * Argument: + * Arguments: * 0: Parent path * 1: Action data * 2: 2D position * 3: Angle range available for rendering * - * Return value: + * Return Value: * None * * Public: No diff --git a/addons/interact_menu/functions/fnc_renderSelector.sqf b/addons/interact_menu/functions/fnc_renderSelector.sqf index 69f8a81b95..ef10456b5a 100644 --- a/addons/interact_menu/functions/fnc_renderSelector.sqf +++ b/addons/interact_menu/functions/fnc_renderSelector.sqf @@ -2,11 +2,11 @@ * Author: esteldunedain * Render a single interaction icon * - * Argument: + * Arguments: * 0: 2d position * 1: Icon * - * Return value: + * Return Value: * None * * Public: No diff --git a/addons/interact_menu/functions/fnc_setupTextColors.sqf b/addons/interact_menu/functions/fnc_setupTextColors.sqf index cbdd56fb07..120c5b18e3 100644 --- a/addons/interact_menu/functions/fnc_setupTextColors.sqf +++ b/addons/interact_menu/functions/fnc_setupTextColors.sqf @@ -2,10 +2,10 @@ * Author: PabstMirror * Builds color strings needed for displaying interaction text * - * Argument: + * Arguments: * None * - * Return value: + * Return Value: * None * * Public: No diff --git a/addons/interact_menu/functions/fnc_splitPath.sqf b/addons/interact_menu/functions/fnc_splitPath.sqf index ba07dc1d9e..eba203aa6f 100644 --- a/addons/interact_menu/functions/fnc_splitPath.sqf +++ b/addons/interact_menu/functions/fnc_splitPath.sqf @@ -2,10 +2,10 @@ * Author: esteldunedain * Take full path and split it between parent path and action name * - * Argument: + * Arguments: * Full path of the action to remove * - * Return value: + * Return Value: * 0: Parent path * 1: Action name * diff --git a/addons/interact_menu/script_component.hpp b/addons/interact_menu/script_component.hpp index 6a2f4e86f3..1d38d205d7 100644 --- a/addons/interact_menu/script_component.hpp +++ b/addons/interact_menu/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT interact_menu +#define COMPONENT_BEAUTIFIED Interact Menu #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/interact_menu/stringtable.xml b/addons/interact_menu/stringtable.xml index aac120ddbc..d44252e8e1 100644 --- a/addons/interact_menu/stringtable.xml +++ b/addons/interact_menu/stringtable.xml @@ -321,7 +321,7 @@ Rychlost animace interakce Velocità Animazioni Interazioni Velocidad de animación del menú de interacción - Vitesse des animations du menu d'interaction + Vitesse de l'aniamtion d'interaction Makes menu animations faster and decreases the time needed to hover to show sub actions @@ -332,7 +332,7 @@ Zrychlí animaci menu a sníží tak čas potřebný pro plné zobrazení podmenu Rende le animazioni Menù più veloci e diminuisce il tempo richiesto per mostrare sotto-azioni Hace la animación del menú más rápida, reduciendo el tiempo necesario para abrir sub-acciones. - Rendre le menu d'interaction plus rapide et reduire le temps nécessaire de survol d'une action pour afficher les sous-actions. + Rend les animations de menu plus rapide et réduit le temps nécessaire à l'affichage des sous menus d'action \ No newline at end of file diff --git a/addons/interaction/CfgVehicles.hpp b/addons/interaction/CfgVehicles.hpp index dd6ca32de6..0aa65cd762 100644 --- a/addons/interaction/CfgVehicles.hpp +++ b/addons/interaction/CfgVehicles.hpp @@ -307,8 +307,9 @@ class CfgVehicles { class ACE_Actions { class ACE_MainActions { displayName = CSTRING(MainAction); + position = QUOTE(call DFUNC(getVehiclePos)); selection = ""; - distance = 10; + distance = 4; condition = "true"; class ACE_Passengers { displayName = CSTRING(Passengers); @@ -333,8 +334,9 @@ class CfgVehicles { class ACE_Actions { class ACE_MainActions { displayName = CSTRING(MainAction); + position = QUOTE(call DFUNC(getVehiclePos)); selection = ""; - distance = 10; + distance = 4; condition = "true"; class ACE_Passengers { displayName = CSTRING(Passengers); @@ -386,8 +388,9 @@ class CfgVehicles { class ACE_Actions { class ACE_MainActions { displayName = CSTRING(MainAction); + position = QUOTE(call DFUNC(getVehiclePos)); selection = ""; - distance = 10; + distance = 4; condition = "true"; class ACE_Passengers { displayName = CSTRING(Passengers); @@ -413,7 +416,7 @@ class CfgVehicles { class ACE_MainActions { displayName = CSTRING(MainAction); selection = ""; - distance = 10; + distance = 4; condition = "true"; class ACE_Passengers { displayName = CSTRING(Passengers); @@ -439,8 +442,9 @@ class CfgVehicles { class ACE_Actions { class ACE_MainActions { displayName = CSTRING(MainAction); + position = QUOTE(call DFUNC(getVehiclePos)); selection = ""; - distance = 10; + distance = 4; condition = "true"; class ACE_Push { @@ -475,7 +479,7 @@ class CfgVehicles { class ACE_MainActions { displayName = CSTRING(MainAction); selection = "gunnerview"; - distance = 2; + distance = 4; condition = "true"; class ACE_Passengers { displayName = CSTRING(Passengers); diff --git a/addons/interaction/XEH_PREP.hpp b/addons/interaction/XEH_PREP.hpp index be6158cdd5..db6b1d3298 100644 --- a/addons/interaction/XEH_PREP.hpp +++ b/addons/interaction/XEH_PREP.hpp @@ -2,6 +2,7 @@ // interaction menu PREP(addPassengerActions); PREP(addPassengersActions); +PREP(getVehiclePos); PREP(getWeaponPos); PREP(moduleInteraction); diff --git a/addons/interaction/XEH_postInit.sqf b/addons/interaction/XEH_postInit.sqf index 0bb6e2386a..9aa9cfb157 100644 --- a/addons/interaction/XEH_postInit.sqf +++ b/addons/interaction/XEH_postInit.sqf @@ -18,12 +18,12 @@ ACE_Modifier = 0; _unit doMove _position; }] call CBA_fnc_addEventHandler; -[QGVAR(lampTurnOn), { +[QGVAR(setLampOn), { params ["_lamp", "_hitPointsDamage", "_disabledLampDMG"]; {if((_x select 1) == _disabledLampDMG) then {_lamp setHit [_x select 0, 0];};nil} count _hitPointsDamage; }] call CBA_fnc_addEventHandler; -[QGVAR(lampTurnOff), { +[QGVAR(setLampOff), { params ["_lamp", "_hitPointsDamage", "_disabledLampDMG"]; {_lamp setHit [_x select 0, (_x select 1) max _disabledLampDMG];nil} count _hitPointsDamage; }] call CBA_fnc_addEventHandler; diff --git a/addons/interaction/config.cpp b/addons/interaction/config.cpp index b984570059..c6aff730cf 100644 --- a/addons/interaction/config.cpp +++ b/addons/interaction/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; @@ -24,6 +25,6 @@ class ACE_newEvents { pardon = QGVAR(pardon); tapShoulder = QGVAR(tapShoulder); sendAway = QGVAR(sendAway); - lampTurnOff = QGVAR(lampTurnOff); - lampTurnOn = QGVAR(lampTurnOn); + lampTurnOff = QGVAR(setLampOff); + lampTurnOn = QGVAR(setLampOn); }; diff --git a/addons/interaction/functions/fnc_canJoinTeam.sqf b/addons/interaction/functions/fnc_canJoinTeam.sqf index b91a5abd5c..7732e164e7 100644 --- a/addons/interaction/functions/fnc_canJoinTeam.sqf +++ b/addons/interaction/functions/fnc_canJoinTeam.sqf @@ -6,7 +6,7 @@ * 0: Player * 1: Target * - * Return value: + * Return Value: * Able to join a team * * Example: diff --git a/addons/interaction/functions/fnc_getVehiclePos.sqf b/addons/interaction/functions/fnc_getVehiclePos.sqf new file mode 100644 index 0000000000..1b8ebc69f6 --- /dev/null +++ b/addons/interaction/functions/fnc_getVehiclePos.sqf @@ -0,0 +1,81 @@ +/* + * Author: esteldunedain + * Return a suitable position for the action point for the given target vehicle + * + * Arguments: + * None (uses local variable _target) + * + * Return value: + * Children actions + * + * Example: + * call ace_interaction_fnc_getVehiclePos + * + * Public: No + */ +#include "script_component.hpp" +// IGNORE_PRIVATE_WARNING(_target); + +private _bb = boundingBoxReal _target; +(_bb select 0) params ["_bbX", "_bbY", "_bbZ"]; + +//Helicopter's rotors distort the bounding box, assume a max of 3 meters width for the body +if (_target isKindOf "Helicopter") then {_bbX = (_bbx min 3) max -3;}; + +private _relPos = _target worldToModelVisual ASLToAGL EGVAR(interact_menu,cameraPosASL); +#ifdef DEBUG_MODE_FULL + _relPos = _target worldToModelVisual ASLToAGL eyePos ACE_player; +#endif +_relPos params ["_dx", "_dy", "_dz"]; + +private _ndx = (abs _dx) / ((abs (_bbx)) - 1); +private _ndy = (abs _dy) / ((abs (_bbY)) - 1); +private _ndz = (abs _dz) / ((abs (_bbZ)) - 1); + +private "_pos"; +if (_ndx > _ndy) then { + if (_ndx > _ndz) then { + // _ndx is greater, will colide with x plane first + _pos = _relPos vectorMultiply ((1 / _ndx) min 0.8); + } else { + // _ndz is greater, will colide with z plane first + _pos = _relPos vectorMultiply ((1 / _ndz) min 0.8); + }; +} else { + if (_ndy > _ndz) then { + // _ndy is greater, will colide with y plane first + _pos = _relPos vectorMultiply ((1 / _ndy) min 0.8); + } else { + // _ndz is greater, will colide with z plane first + _pos = _relPos vectorMultiply ((1 / _ndz) min 0.8); + }; +}; +//Set max height at player's eye level (prevent very high interactin point on choppers) +_pos set [2, (_pos select 2) min _dz]; +TRACE_4("",_bb,_bbX,_relPos, _pos); +_pos + +/////////////////// +// The code belows works very well for cursor mode, but not at all in normal mode +// maybe it could be enabled by default only for that mode +/* +if (cursorObject isEqualTo _target) exitWith { + private _dest = EGVAR(interact_menu,cameraPosASL) vectorAdd (EGVAR(interact_menu,cameraDir) vectorMultiply 50); + private _origin = EGVAR(interact_menu,cameraPosASL); + //private _origin = EGVAR(interact_menu,cameraPosASL) vectorAdd [0, 0, -0.35] vectorDiff (EGVAR(interact_menu,cameraDir) vectorMultiply 1.5); + //private _dest = AGLtoASL (_target modelToWorldVisual [0,0,0]); + private _results = lineIntersectsSurfaces [_origin, _dest, ACE_player, objNull, true, 5]; + private _finalPos = [0,0,0]; + { + _x params ["_pos", "", "_obj"]; + TRACE_3("",_forEachIndex,_obj,_target); + if (_obj isEqualTo _target) exitWith { + _finalPos = _target worldToModelVisual ASLtoAGL (_pos vectorAdd (EGVAR(interact_menu,cameraDir) vectorMultiply 1.0)); + }; + } forEach _results; + _finalPos +}; +[0,0,0] +*/ +/////////////////// + diff --git a/addons/interaction/functions/fnc_getWeaponPos.sqf b/addons/interaction/functions/fnc_getWeaponPos.sqf index 58c8756076..d0db3cee77 100644 --- a/addons/interaction/functions/fnc_getWeaponPos.sqf +++ b/addons/interaction/functions/fnc_getWeaponPos.sqf @@ -5,7 +5,7 @@ * Arguments: * None (uses local variable _target) * - * Return value: + * Return Value: * Children actions * * Example: diff --git a/addons/interaction/functions/fnc_hideMouseHint.sqf b/addons/interaction/functions/fnc_hideMouseHint.sqf index 709b798fed..757fe952e5 100644 --- a/addons/interaction/functions/fnc_hideMouseHint.sqf +++ b/addons/interaction/functions/fnc_hideMouseHint.sqf @@ -5,7 +5,7 @@ * Arguments: * None * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/interaction/functions/fnc_showMouseHint.sqf b/addons/interaction/functions/fnc_showMouseHint.sqf index 57c8a7bf50..821abda14e 100644 --- a/addons/interaction/functions/fnc_showMouseHint.sqf +++ b/addons/interaction/functions/fnc_showMouseHint.sqf @@ -7,7 +7,7 @@ * 1: Right Click Text * 2: Scroll Text (Optional) * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/interaction/functions/fnc_switchLamp.sqf b/addons/interaction/functions/fnc_switchLamp.sqf index bf386f9ef3..f1d9509de8 100644 --- a/addons/interaction/functions/fnc_switchLamp.sqf +++ b/addons/interaction/functions/fnc_switchLamp.sqf @@ -5,7 +5,7 @@ * Arguments: * 0: Lamp * - * Return value: + * Return Value: * None * * Example: @@ -29,7 +29,7 @@ private _hitPointsDamage = []; } count _reflectors; //if lamp is on turn it off -private _eventName = [QGVAR(lampTurnOn), QGVAR(lampTurnOff)] select _isOn; +private _eventName = [QGVAR(setLampOn), QGVAR(setLampOff)] select _isOn; [_eventName, [_lamp, _hitPointsDamage, DISABLED_LAMP_DMG], [_lamp]] call CBA_fnc_targetEvent; _lamp setVariable ["ACE_lampOn", !_isOn, true]; diff --git a/addons/interaction/script_component.hpp b/addons/interaction/script_component.hpp index fd6ce8ce58..460550300d 100644 --- a/addons/interaction/script_component.hpp +++ b/addons/interaction/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT interaction +#define COMPONENT_BEAUTIFIED Interaction #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/interaction/stringtable.xml b/addons/interaction/stringtable.xml index d9adf095fe..b92e2a6dd7 100644 --- a/addons/interaction/stringtable.xml +++ b/addons/interaction/stringtable.xml @@ -127,7 +127,7 @@ Abrir / Cerrar puerta Otwórz / Zamknij drzwi Otevřít / Zavřít dveře - Ouvrir / Fermer Portes + Ouvrir / Fermer la porte Открыть / Закрыть двери Ajtó nyitása / zárása Abrir / Fechar Porta @@ -137,7 +137,7 @@ Lock Door Tür sperren Bloquear puerta - Verrouiller Porte + Verrouiller la porte Blocca la porta Заблокировать дверь Trancar Porta @@ -149,7 +149,7 @@ Unlock Door Tür entsperren Desbloquear puerta - Déverrouiller Porte + Déverrouiller la porte Sblocca la porta Разблокировать дверь Destrancar Porta @@ -161,7 +161,7 @@ Locked Door Tür gesperrt Puerta bloqueada - Porte Verrouillée + Porte verrouillée Porta bloccata Дверь заблокирована Porta Trancada @@ -173,7 +173,7 @@ Unlocked Door Tür entsperrt Puerta desbloqueada - Porte Déverrouillée + Porte déverrouillée Porta sbloccata Дверь разблокирована Porta Destrancada @@ -187,7 +187,7 @@ Unirse al grupo Dołącz do grupy Přidat se do skupiny - Rejoindre Groupe + Rejoindre le groupe Вступить в группу Csatlakozás a csoporthoz Unir-se ao grupo @@ -199,7 +199,7 @@ Dejar grupo Opuść grupę Opustit skupinu - Quitter Groupe + Quitter le groupe Выйти из группы Csoport elhagyása Deixar grupo @@ -211,7 +211,7 @@ Asumir el liderazgo Przejmij dowodzenie Stát se velitelem - Devenir Chef de groupe + Devenir chef de groupe Стать лидером Vezetés átvétele Tornar-se Líder @@ -223,7 +223,7 @@ BAILAR! TAŃCZ! TANCUJ! - Danse! + Danser ! ТАНЦЕВАТЬ! TÁNC! DANCE! @@ -281,7 +281,7 @@ You were tapped on the RIGHT shoulder Te tocaron el hombro DERECHO Dir wurde auf die rechte Schulter geklopft - On te tape sur l'épaule droite + On vous tape sur l'épaule droite Zostałeś klepnięty w prawe ramię Megveregették a JOBB válladat. Někdo tě poklepal na PRAVÉ rameno @@ -293,7 +293,7 @@ You were tapped on the LEFT shoulder. Te tocaron el hombro IZQUIERDO. Dir wurde auf die linke Schulter geklopft - On te tape sur l'épaule gauche + On vous tape sur l'épaule gauche Zostałeś klepnięty w lewe ramię Megveregették a BAL válladat. Někdo tě poklepal na LEVÉ rameno @@ -331,7 +331,7 @@ Aléjate! Odejdź! Jděte pryč! - Allez-vous-en! + Allez-vous-en ! Уходите отсюда! Tűnés! Vá Embora! @@ -343,7 +343,7 @@ Al suelo! Padnij! K zemi! - A terre! + A terre ! A földre! Ложись! Abaixe-se! @@ -356,8 +356,6 @@ Aussteigen! Sal del vehículo! Sortez ! - Vystupte - Saia Team Management @@ -519,7 +517,7 @@ You joined Team %1 Du bist Gruppe %1 beigetreten Te has unido al equipo %1 - Tu as rejoint l'équipe %1 + Vous avez rejoint l'équipe %1 Dołączyłeś do %1 Připojili jste se do %1 týmu Вы присоединились к группе %1 @@ -543,7 +541,7 @@ You left the Team Du hast die Gruppe verlassen Has dejado el equipo - Tu as quitté l'équipe + Vous avez quitté l'équipe Opuściłeś drużynę Opustili jste tým Вы покинули группу @@ -556,7 +554,7 @@ Begnadigen Perdonar Przebacz - Pardon + Pardonner Pardon Извините Perdão @@ -590,7 +588,7 @@ Not in Range Außer Reichweite - Hors de portée. + Hors de portée Fuera de rango Слишком далеко Fora do Alcançe @@ -678,7 +676,7 @@ Aktiviere Gruppenverwaltung Povolit správu týmu Управление группами - Active la gestion d'équipe + Activer la gestion d'équipe Csapatkezelés engedélyezése Habilitar gestão de equipes Abilità Management Squadra @@ -690,7 +688,7 @@ Sollen Spieler das Gruppenverwaltungsmenü verwenden dürfen? Standard: Ja Mohou hráči použít menu správy týmu? Výchozí: Ano Разрешить ли игрокам использовать меню управления группами? По-умолчани: Да - Permettre aux joueurs d'utiliser la gestion de groupe? Défaut: oui + Permettre aux joueurs d'utiliser la gestion de groupe? Défaut : oui A játékosoknak engedélyezve legyen a csapatkezelő menü? Alapértelmezett: Igen Devem os jogadores ter permissão de usar o menu de gestão de equipes? Padrão: Sim Possono i giocatori usare il Menù Managment Squadra? Default: Si @@ -736,7 +734,7 @@ Podat zásobník Passa caricatore Pasar cargador - Donner un chargeur + Passer un chargeur Primary magazine @@ -747,7 +745,7 @@ Zásobník do primární zbraně Caricatore Primario Cargador primario - Chargeur d'arme principale + Chargeur de l'arme principale Pistol magazine @@ -758,7 +756,7 @@ Zásobník do pistole Caricatore Pistola Cargador de pistola - Chargeur d'arme secondaire + Chargeur de pistolet %1 passed you a %2 magazine. @@ -769,7 +767,7 @@ %1 ti podal zásobník %2. %1 ti ha passato un caricatore %2 . %1 te pasó un cargador %2. - %1 vous a passé un chargeur %2. + %1 vous a passé un chargeur de %2. Show "pass magazine" interaction @@ -780,7 +778,7 @@ Zobrazit "interakci "podat zásobník" Mostra interazione "passa caricatore" Mostrar "Pasar cargador" en el menú de interacción - Montrer l'interaction "donner un chargeur". + Montrer l'interaction "Passer un chargeur" \ No newline at end of file diff --git a/addons/inventory/config.cpp b/addons/inventory/config.cpp index adef451644..bc0d4291f8 100644 --- a/addons/inventory/config.cpp +++ b/addons/inventory/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/inventory/script_component.hpp b/addons/inventory/script_component.hpp index e95ad43b83..defacb991a 100644 --- a/addons/inventory/script_component.hpp +++ b/addons/inventory/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT inventory +#define COMPONENT_BEAUTIFIED Inventory #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/inventory/stringtable.xml b/addons/inventory/stringtable.xml index 56412a00b3..42a86b2133 100644 --- a/addons/inventory/stringtable.xml +++ b/addons/inventory/stringtable.xml @@ -20,7 +20,7 @@ Обычно, размер окна инвентаря зависит от размеров пользовательского интерфейса. Эта настройка позволяет увеличить размер окна инвентаря, не увеличивая размеры шрифтов, так что отображется большее количество строк. Normálně se velikost invetáře škáluje s velikostí UI. Toto nastavení dovoluje škálování velikost inventáře ale nežvětšuje velikost fontu. To dovoluje zobrazení více řad v inventáři. Ekwipunek skalowany jest poprzez rozmiar UI. Ta opcja pozwala powiększyć rozmiar UI ekwipunku, lecz nie zwiększa rozmiaru fontu pozwalając na wyświetlanie większej ilości wierszy. - L'inventaire est normalement affiché en fonction de la taille de l'UI. Cette option permet d'agrandir l'affichage de l'inventaire, mais n'a aucun effet sur la taille des polices permettant d'afficher plus de ligne + L'inventaire est normalement affiché en fonction de la taille de l'UI. Cette option permet d'agrandir l'affichage de l'inventaire, mais n'a aucun effet sur la taille des polices permettant d'afficher plus de lignes. Alaphelyzetben a kezelőfelület mérete skálázza a felszerelési menüt. Ez az opció engedélyezi a menü felskálázását, de megtartja a betűméreteket, így növelve a láthatóságot. Normalmente il menù inventario è scalato in base alle dimensioni interfaccia. Questa opzione di permette di ingrandirlo ulteriormente ma senza aumentare la dimensione del testo. Normalmente o tamanho da tela do inventário é ditada pelo tamanho da UI. Isso permite aumentar o tamanho da tela de inventário, mas não aumenta o tamanho da fonte, permitindo que mais linhas sejam visualizadas. @@ -42,7 +42,7 @@ Hełmy Copricapi Cascos - Equipement de tête + Couvre-chefs Capacetes @@ -72,7 +72,7 @@ Kamizelki Vests Chalecos - Gilets + Vestes Coletes diff --git a/addons/javelin/config.cpp b/addons/javelin/config.cpp index 31871ccb53..92f2f2d969 100644 --- a/addons/javelin/config.cpp +++ b/addons/javelin/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/javelin/script_component.hpp b/addons/javelin/script_component.hpp index 81b6bcb8c1..11bb4a5a33 100644 --- a/addons/javelin/script_component.hpp +++ b/addons/javelin/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT javelin +#define COMPONENT_BEAUTIFIED Javelin #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL @@ -64,4 +65,4 @@ #define __ColorOrange [0.9255,0.5216,0.1216,1] #define __ColorGreen [0.2941,0.8745,0.2157,1] #define __ColorGray [0.2941,0.2941,0.2941,1] -#define __ColorNull [0,0,0,0] \ No newline at end of file +#define __ColorNull [0,0,0,0] diff --git a/addons/kestrel4500/config.cpp b/addons/kestrel4500/config.cpp index 74e2f18f19..11bc51f801 100644 --- a/addons/kestrel4500/config.cpp +++ b/addons/kestrel4500/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {"ACE_Item_Kestrel4500"}; weapons[] = {"ACE_Kestrel4500"}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/kestrel4500/script_component.hpp b/addons/kestrel4500/script_component.hpp index 87a0c0b594..f098cd2a57 100644 --- a/addons/kestrel4500/script_component.hpp +++ b/addons/kestrel4500/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT kestrel4500 +#define COMPONENT_BEAUTIFIED Kestrel 4500 #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/kestrel4500/stringtable.xml b/addons/kestrel4500/stringtable.xml index 3ad9e8824f..88f0e90363 100644 --- a/addons/kestrel4500/stringtable.xml +++ b/addons/kestrel4500/stringtable.xml @@ -30,7 +30,7 @@ Otwórz Kestrel 4500 Kestrel 4500 elővétele Открыть Kestrel 4500NV - Ouvrir Kestrel 4500 + Ouvrir le Kestrel 4500 Accendi Kestrel 4500 Abrir Kestrel 4500 Kestrel 4500 öffnen @@ -41,7 +41,7 @@ Show Kestrel 4500 Pokaż Kestrel 4500 Показать Kestrel 4500NV - Afficher Kestrel 4500 + Afficher le Kestrel 4500 Mostra Kestrel 4500 Mostrar Kestrel 4500 Kestrel 4500 anzeigen @@ -53,7 +53,7 @@ Hide Kestrel 4500 Ukryj Kestrel 4500 Убрать Kestrel 4500NV - Cacher Kestrel 4500 + Cacher le Kestrel 4500 Nascondi Kestrel 4500 Ocultar Kestrel 4500 Kestrel 4500 wegstecken @@ -65,7 +65,7 @@ Open Kestrel 4500 Otwórz Kestrel 4500 Открыть Kestrel 4500NV - Ouvrir Kestrel 4500 + Ouvrir le Kestrel 4500 Accendi Kestrel 4500 Abrir Kestrel 4500 Kestrel 4500 öffnen @@ -77,7 +77,7 @@ Show Kestrel 4500 Pokaż Kestrel 4500 Показать Kestrel 4500NV - Afficher Kestrel 4500 + Afficher le Kestrel 4500 Mostra Kestrel 4500 Mostrar Kestrel 4500 Kestrel 4500 anzeigen diff --git a/addons/laser/config.cpp b/addons/laser/config.cpp index 2681c11294..d989c4f85b 100644 --- a/addons/laser/config.cpp +++ b/addons/laser/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/laser/functions/fnc_laserOff.sqf b/addons/laser/functions/fnc_laserOff.sqf index 6ba5d95150..9a3e663d14 100644 --- a/addons/laser/functions/fnc_laserOff.sqf +++ b/addons/laser/functions/fnc_laserOff.sqf @@ -5,7 +5,7 @@ * Arguments: * 0: UUID (from laserOn) * - * Return value: + * Return Value: * None */ diff --git a/addons/laser/functions/fnc_laserOn.sqf b/addons/laser/functions/fnc_laserOn.sqf index b6e3258b90..a9e5a00d4c 100644 --- a/addons/laser/functions/fnc_laserOn.sqf +++ b/addons/laser/functions/fnc_laserOn.sqf @@ -10,7 +10,7 @@ * 4: Laser code * 5: Beam divergence (in mils off beam center). * - * Return value: + * Return Value: * String, UUID for sending to laserOff function. */ diff --git a/addons/laser/functions/fnc_seekerFindLaserSpot.sqf b/addons/laser/functions/fnc_seekerFindLaserSpot.sqf index a5d3e2714c..05e4a50dcf 100644 --- a/addons/laser/functions/fnc_seekerFindLaserSpot.sqf +++ b/addons/laser/functions/fnc_seekerFindLaserSpot.sqf @@ -9,7 +9,7 @@ * 3: Seeker wavelength sensitivity range, [1550,1550] is common eye safe. * 4: Seeker laser code. * - * Return value: + * Return Value: * Array, [Strongest compatible laser spot ASL pos, owner object] Nil array values if nothing found. */ diff --git a/addons/laser/functions/fnc_unitTurretCanLockLaser.sqf b/addons/laser/functions/fnc_unitTurretCanLockLaser.sqf index a82e42400a..9fe478f623 100644 --- a/addons/laser/functions/fnc_unitTurretCanLockLaser.sqf +++ b/addons/laser/functions/fnc_unitTurretCanLockLaser.sqf @@ -2,10 +2,10 @@ * Author: jaynus * Checks if the turret occupied by the given unit can lock a laser designator and select laser code. * - * Argument: + * Arguments: * 0: Unit * - * Return value: + * Return Value: * Has designator? */ #include "script_component.hpp" diff --git a/addons/laser/functions/fnc_vanillaLaserSeekerHandler.sqf b/addons/laser/functions/fnc_vanillaLaserSeekerHandler.sqf index 16e9a7a159..5464e9711c 100644 --- a/addons/laser/functions/fnc_vanillaLaserSeekerHandler.sqf +++ b/addons/laser/functions/fnc_vanillaLaserSeekerHandler.sqf @@ -2,11 +2,11 @@ * Author: jaynus * Handler function for laser network code. * - * Argument: + * Arguments: * 0: Emitter * 1: Owner * - * Return value: + * Return Value: * [position, direction] */ //#define DEBUG_MODE_FULL diff --git a/addons/laser/script_component.hpp b/addons/laser/script_component.hpp index 3ff3f48c49..a1c69183df 100644 --- a/addons/laser/script_component.hpp +++ b/addons/laser/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT laser +#define COMPONENT_BEAUTIFIED Laser #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL @@ -24,4 +25,4 @@ #define __LaserDesignatorIGUI_LaserCode (__LaserDesignatorIGUI displayCtrl 123001) #define __LaserDesignatorIGUI_ACE_Distance (__LaserDesignatorIGUI displayCtrl 123002) #define __LaserDesignatorIGUI_CA_Distance (__LaserDesignatorIGUI displayCtrl 151) -#define __LaserDesignatorIGUI_LaserOn (__LaserDesignatorIGUI displayCtrl 158) \ No newline at end of file +#define __LaserDesignatorIGUI_LaserOn (__LaserDesignatorIGUI displayCtrl 158) diff --git a/addons/laser_selfdesignate/CfgWeapons.hpp b/addons/laser_selfdesignate/CfgWeapons.hpp index 4ef2ee4692..802e2ba6a5 100644 --- a/addons/laser_selfdesignate/CfgWeapons.hpp +++ b/addons/laser_selfdesignate/CfgWeapons.hpp @@ -6,6 +6,6 @@ class CfgWeapons { }; class missiles_DAGR: RocketPods { - canLock = 1; + //canLock = 1; }; }; diff --git a/addons/laser_selfdesignate/config.cpp b/addons/laser_selfdesignate/config.cpp index 015775de06..e95d754809 100644 --- a/addons/laser_selfdesignate/config.cpp +++ b/addons/laser_selfdesignate/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/laser_selfdesignate/functions/fnc_findLaserSource.sqf b/addons/laser_selfdesignate/functions/fnc_findLaserSource.sqf index 092fff214b..f05a0e2323 100644 --- a/addons/laser_selfdesignate/functions/fnc_findLaserSource.sqf +++ b/addons/laser_selfdesignate/functions/fnc_findLaserSource.sqf @@ -2,7 +2,7 @@ * Author: jaynus * Handler function for laser network code. * - * Argument: + * Arguments: * 0: Emitter * * Return Value: diff --git a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOff.sqf b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOff.sqf index 2e4b745946..be1793668d 100644 --- a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOff.sqf +++ b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOff.sqf @@ -2,7 +2,7 @@ * Author: jaynus * Turns off passed laser self designation. * - * Argument: + * Arguments: * 0: Shooter, player shooting the laser * 1: LaserUUID, the UUID of the laser returned by EFUNC(laser,laserOn) * 2: Local laser target, unused. diff --git a/addons/laser_selfdesignate/script_component.hpp b/addons/laser_selfdesignate/script_component.hpp index f7032720e0..583aca5e95 100644 --- a/addons/laser_selfdesignate/script_component.hpp +++ b/addons/laser_selfdesignate/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT laser_selfdesignate +#define COMPONENT_BEAUTIFIED Laser Selfdesignate #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/laserpointer/config.cpp b/addons/laserpointer/config.cpp index c727bc6407..add36aeff5 100644 --- a/addons/laserpointer/config.cpp +++ b/addons/laserpointer/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {"ACE_acc_pointer_red","ACE_acc_pointer_green","ACE_acc_pointer_green_IR"}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/laserpointer/script_component.hpp b/addons/laserpointer/script_component.hpp index cee00afdca..0e450721fd 100644 --- a/addons/laserpointer/script_component.hpp +++ b/addons/laserpointer/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT laserpointer +#define COMPONENT_BEAUTIFIED Laser Pointer #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL @@ -14,4 +15,4 @@ #define DEBUG_SETTINGS DEBUG_ENABLED_LASERPOINTER #endif -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/laserpointer/stringtable.xml b/addons/laserpointer/stringtable.xml index 1e4b150c3d..b161b0998c 100644 --- a/addons/laserpointer/stringtable.xml +++ b/addons/laserpointer/stringtable.xml @@ -27,7 +27,7 @@ Emits visible light. - Emettre de la lumière visible + Émet de la lumière visible. Strahlt sichtbares Licht aus. Испускает узкий пучок видимого света. Vyzařuje viditelné světlo. diff --git a/addons/logistics_uavbattery/config.cpp b/addons/logistics_uavbattery/config.cpp index 5197a899e3..dccdbde247 100644 --- a/addons/logistics_uavbattery/config.cpp +++ b/addons/logistics_uavbattery/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {"ACE_UAVBattery"}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/logistics_uavbattery/script_component.hpp b/addons/logistics_uavbattery/script_component.hpp index 836a39c415..464118c01f 100644 --- a/addons/logistics_uavbattery/script_component.hpp +++ b/addons/logistics_uavbattery/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT logistics_uavbattery +#define COMPONENT_BEAUTIFIED Logistics UAV Battery #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/logistics_uavbattery/stringtable.xml b/addons/logistics_uavbattery/stringtable.xml index 6ff6e4b52d..ea0cea97eb 100644 --- a/addons/logistics_uavbattery/stringtable.xml +++ b/addons/logistics_uavbattery/stringtable.xml @@ -5,7 +5,7 @@ Drone is full Drohne ist voll El VANT está lleno - L'UAV est chargé + Le drone est chargé Dron jest naładowany A drón fel van töltve Dron je nabitý @@ -17,7 +17,7 @@ You need a UAV Battery Du brauchst eine UAV-Batterie Necesitas una batería para VANT - L'UAV nécessite une batterie + Le drone nécessite une batterie Potrzebujesz baterii UAV Szükséged van egy UAV akkumulátorra Potřebuješ UAV baterii @@ -41,7 +41,7 @@ UAV Battery UAV-Batterie Batería para VANT - Batterie UAV + Batterie pour drone Bateria UAV UAV akkumulátor UAV baterie @@ -53,7 +53,7 @@ Used to refuel Carried UAV's Verwendet zum Aufladen von tragbaren UAVs Usada para reabastecer el VANT - Utilisée pour recharger l'UAV + Utilisée pour recharger un drone Używana do naładowania baterii przenośnego UAV Hordozható UAV-k feltöltéséhez való akkumulátor Používané k dobíjení UAV diff --git a/addons/logistics_wirecutter/config.cpp b/addons/logistics_wirecutter/config.cpp index 10612568e1..25c58f1604 100644 --- a/addons/logistics_wirecutter/config.cpp +++ b/addons/logistics_wirecutter/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {"ACE_wirecutter"}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/logistics_wirecutter/functions/fnc_interactEH.sqf b/addons/logistics_wirecutter/functions/fnc_interactEH.sqf index f926a53e01..bf0f5d3bc9 100644 --- a/addons/logistics_wirecutter/functions/fnc_interactEH.sqf +++ b/addons/logistics_wirecutter/functions/fnc_interactEH.sqf @@ -46,9 +46,14 @@ TRACE_1("Starting wire-cut action PFEH",_interactionType); [_player, _attachedFence] call FUNC(cutDownFence); }; _fncCondition = { - params ["", "_player", "_attachedFence"]; + params ["_helper", "_player", "_attachedFence"]; if (!([_player, _attachedFence, []] call EFUNC(common,canInteractWith))) exitWith {false}; - ((!isNull _attachedFence) && {(damage _attachedFence) < 1} && {("ACE_wirecutter" in (items _player))}) + ((!isNull _attachedFence) && {(damage _attachedFence) < 1} && {("ACE_wirecutter" in (items _player))} && { + //Custom LOS check for fence + private _headPos = ACE_player modelToWorldVisual (ACE_player selectionPosition "pilot"); + ((!(lineIntersects [AGLtoASL _headPos, AGLtoASL (_helper modelToWorldVisual [0,0,1.25]), _attachedFence, ACE_player])) || + {!(lineIntersects [AGLtoASL _headPos, getPosASL _attachedFence, _attachedFence, ACE_player])}) + }) }; { @@ -56,7 +61,7 @@ TRACE_1("Starting wire-cut action PFEH",_interactionType); if ([_x] call FUNC(isFence)) then { _fencesHelped pushBack _x; _helper = "ACE_LogicDummy" createVehicleLocal (getpos _x); - _action = [QGVAR(helperCutFence), (localize LSTRING(CutFence)), QPATHTOF(ui\wirecutter_ca.paa), _fncStatement, _fncCondition, {}, _x, {[0,0,0]}, 5.5] call EFUNC(interact_menu,createAction); + _action = [QGVAR(helperCutFence), (localize LSTRING(CutFence)), QPATHTOF(ui\wirecutter_ca.paa), _fncStatement, _fncCondition, {}, _x, {[0,0,0]}, 5.5, [false, false, false, false, true]] call EFUNC(interact_menu,createAction); [_helper, 0, [],_action] call EFUNC(interact_menu,addActionToObject); _helper setPosASL ((getPosASL _x) vectorAdd [0,0,1.25]); _addedHelpers pushBack _helper; diff --git a/addons/logistics_wirecutter/script_component.hpp b/addons/logistics_wirecutter/script_component.hpp index a66a7bba08..9e52593ba7 100644 --- a/addons/logistics_wirecutter/script_component.hpp +++ b/addons/logistics_wirecutter/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT logistics_wirecutter +#define COMPONENT_BEAUTIFIED Logistics Wire Cutter #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/logistics_wirecutter/stringtable.xml b/addons/logistics_wirecutter/stringtable.xml index 1f9955f4be..6790d67ec6 100644 --- a/addons/logistics_wirecutter/stringtable.xml +++ b/addons/logistics_wirecutter/stringtable.xml @@ -31,7 +31,7 @@ Cortar alambrado Przetnij płot Přestřihnout plot - Cisailler Clôture + Cisailler l'obstacle Cortar Cerca Taglia Drótkerítés átvágása @@ -43,7 +43,7 @@ Cortando alambrado / cables... Przecinanie płotu / drutów... Přestřihávám plot / dráty... - Cisaille l'obstacle... + Cisaillement de l'obstacle... Cortando Cerca / Arame... Sto tagliando... Drótok elvágása... @@ -55,11 +55,11 @@ Alambrado cortado Płot przecięty Plot přestřižen - Clôture cisaillée + Obstacle cisaillé Cerca cortada Fatto! Drótkerítés átvágva Забор разрезан - + \ No newline at end of file diff --git a/addons/magazinerepack/config.cpp b/addons/magazinerepack/config.cpp index c660b44ca7..1434275e84 100644 --- a/addons/magazinerepack/config.cpp +++ b/addons/magazinerepack/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/magazinerepack/functions/fnc_getMagazineChildren.sqf b/addons/magazinerepack/functions/fnc_getMagazineChildren.sqf index 88cd0ff275..f8a18438e9 100644 --- a/addons/magazinerepack/functions/fnc_getMagazineChildren.sqf +++ b/addons/magazinerepack/functions/fnc_getMagazineChildren.sqf @@ -2,11 +2,11 @@ * Author: PabstMirror, commy2, esteldunedain, Ruthberg * Gets magazine children for interaciton menu. * - * Argument: + * Arguments: * 0: Target * 1: Player * - * Return value: + * Return Value: * ChildActions * * Example: diff --git a/addons/magazinerepack/script_component.hpp b/addons/magazinerepack/script_component.hpp index 947c8c1ca1..79c1a20652 100644 --- a/addons/magazinerepack/script_component.hpp +++ b/addons/magazinerepack/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT magazinerepack +#define COMPONENT_BEAUTIFIED Magazine Repack #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL @@ -14,4 +15,4 @@ #define DEBUG_SETTINGS DEBUG_ENABLED_MAGAZINEREPACK #endif -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/magazinerepack/stringtable.xml b/addons/magazinerepack/stringtable.xml index b89b4b587d..75cd177ed9 100644 --- a/addons/magazinerepack/stringtable.xml +++ b/addons/magazinerepack/stringtable.xml @@ -17,7 +17,7 @@ Select Magazine Menu Magazinauswahlmenü Menú de selección de cargador - Sélectionner menu des chargeurs + Sélectionner le menu des chargeurs Menu wyboru magazynków Zvolit menu zásobníků Seleziona menù di ricarica @@ -29,7 +29,7 @@ Select Mag Magazin auswählen Seleccionar cargador - Sélectionner chargeur + Sélectionner le chargeur Wybierz magazynek Vyber zásobník Seleziona caricatore @@ -110,4 +110,4 @@ %1 Total e %2 Parcial - + \ No newline at end of file diff --git a/addons/main/config.cpp b/addons/main/config.cpp index 9969e52447..9aebb11e36 100644 --- a/addons/main/config.cpp +++ b/addons/main/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/main/script_component.hpp b/addons/main/script_component.hpp index 99069a4911..2f40ce8e8d 100644 --- a/addons/main/script_component.hpp +++ b/addons/main/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT main +#define COMPONENT_BEAUTIFIED Main #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/main/script_macros.hpp b/addons/main/script_macros.hpp index 891114b93c..c7997dee28 100644 --- a/addons/main/script_macros.hpp +++ b/addons/main/script_macros.hpp @@ -9,6 +9,8 @@ #define DFUNC(var1) TRIPLES(ADDON,fnc,var1) #define DEFUNC(var1,var2) TRIPLES(DOUBLES(PREFIX,var1),fnc,var2) +#undef QFUNC +#undef QEFUNC #define QFUNC(var1) QUOTE(DFUNC(var1)) #define QEFUNC(var1,var2) QUOTE(DEFUNC(var1,var2)) @@ -16,12 +18,14 @@ #define SETVAR_SYS(var1,var2) setVariable [ARR_2(QUOTE(var1),var2)] #define SETPVAR_SYS(var1,var2) setVariable [ARR_3(QUOTE(var1),var2,true)] +#undef GETVAR #define GETVAR(var1,var2,var3) var1 GETVAR_SYS(var2,var3) #define GETMVAR(var1,var2) missionNamespace GETVAR_SYS(var1,var2) #define GETUVAR(var1,var2) uiNamespace GETVAR_SYS(var1,var2) #define GETPRVAR(var1,var2) profileNamespace GETVAR_SYS(var1,var2) #define GETPAVAR(var1,var2) parsingNamespace GETVAR_SYS(var1,var2) +#undef SETVAR #define SETVAR(var1,var2,var3) var1 SETVAR_SYS(var2,var3) #define SETPVAR(var1,var2,var3) var1 SETPVAR_SYS(var2,var3) #define SETMVAR(var1,var2) missionNamespace SETVAR_SYS(var1,var2) @@ -82,6 +86,7 @@ #ifdef DISABLE_COMPILE_CACHE #define PREP(fncName) DFUNC(fncName) = compile preprocessFileLineNumbers QPATHTOF(functions\DOUBLES(fnc,fncName).sqf) #else + #undef PREP #define PREP(fncName) [QPATHTOF(functions\DOUBLES(fnc,fncName).sqf), QFUNC(fncName)] call CBA_fnc_compileFunction #endif diff --git a/addons/main/script_mod.hpp b/addons/main/script_mod.hpp index cda38b0458..dcf84348a5 100644 --- a/addons/main/script_mod.hpp +++ b/addons/main/script_mod.hpp @@ -4,13 +4,19 @@ #define PREFIX ace #define MAJOR 3 -#define MINOR 5 -#define PATCHLVL 1 +#define MINOR 6 +#define PATCHLVL 0 #define BUILD 0 #define VERSION MAJOR.MINOR.PATCHLVL.BUILD #define VERSION_AR MAJOR,MINOR,PATCHLVL,BUILD // MINIMAL required version for the Mod. Components can specify others.. -#define REQUIRED_VERSION 1.56 -#define REQUIRED_CBA_VERSION {2,4,0} +#define REQUIRED_VERSION 1.60 +#define REQUIRED_CBA_VERSION {2,4,1} + +#ifdef COMPONENT_BEAUTIFIED + #define COMPONENT_NAME QUOTE(ACE3 - COMPONENT_BEAUTIFIED) +#else + #define COMPONENT_NAME QUOTE(ACE3 - COMPONENT) +#endif diff --git a/addons/map/XEH_postInitClient.sqf b/addons/map/XEH_postInitClient.sqf index f598266695..00d6fea0fb 100644 --- a/addons/map/XEH_postInitClient.sqf +++ b/addons/map/XEH_postInitClient.sqf @@ -100,15 +100,15 @@ call FUNC(determineZoom); GVAR(flashlightInUse) = ""; GVAR(glow) = objNull; - ["ace_playerInventoryChanged", { + ["loadout", { private _flashlights = [ACE_player] call FUNC(getUnitFlashlights); if ((GVAR(flashlightInUse) != "") && !(GVAR(flashlightInUse) in _flashlights)) then { GVAR(flashlightInUse) = ""; }; - }] call CBA_fnc_addEventHandler; + }] call CBA_fnc_addPlayerEventHandler; if (GVAR(mapGlow)) then { - ["ace_visibleMapChanged", { + ["visibleMap", { params ["_player", "_mapOn"]; if (_mapOn) then { if (!alive _player && !isNull GVAR(glow)) then { @@ -128,7 +128,7 @@ call FUNC(determineZoom); [""] call FUNC(flashlightGlow); }; }; - }] call CBA_fnc_addEventHandler; + }] call CBA_fnc_addPlayerEventHandler; }; }; }] call CBA_fnc_addEventHandler; @@ -136,7 +136,7 @@ call FUNC(determineZoom); // hide clock on map if player has no watch GVAR(hasWatch) = true; -["ace_playerInventoryChanged", { +["loadout", { if (isNull (_this select 0)) exitWith { GVAR(hasWatch) = true; }; @@ -145,4 +145,4 @@ GVAR(hasWatch) = true; if (_x isKindOf ["ItemWatch", configFile >> "CfgWeapons"]) exitWith {GVAR(hasWatch) = true;}; false } count (assignedItems ACE_player); -}] call CBA_fnc_addEventHandler; +}] call CBA_fnc_addPlayerEventHandler; diff --git a/addons/map/config.cpp b/addons/map/config.cpp index 17e9aae0ab..1d830a8bd6 100644 --- a/addons/map/config.cpp +++ b/addons/map/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/map/functions/fnc_compileFlashlightMenu.sqf b/addons/map/functions/fnc_compileFlashlightMenu.sqf index 836b483a20..5b91f15ca4 100644 --- a/addons/map/functions/fnc_compileFlashlightMenu.sqf +++ b/addons/map/functions/fnc_compileFlashlightMenu.sqf @@ -7,7 +7,7 @@ * 1: Player * 3: Parameters * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/map/functions/fnc_flashlightGlow.sqf b/addons/map/functions/fnc_flashlightGlow.sqf index 799b99e3d2..07567b9079 100644 --- a/addons/map/functions/fnc_flashlightGlow.sqf +++ b/addons/map/functions/fnc_flashlightGlow.sqf @@ -5,7 +5,7 @@ * Arguments: * 0: Flashlight classname ("" for off) * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/map/functions/fnc_getUnitFlashlights.sqf b/addons/map/functions/fnc_getUnitFlashlights.sqf index 41874cc0ca..eeaf504156 100644 --- a/addons/map/functions/fnc_getUnitFlashlights.sqf +++ b/addons/map/functions/fnc_getUnitFlashlights.sqf @@ -5,7 +5,7 @@ * Arguments: * 0: Unit to check * - * Return value: + * Return Value: * Flashlight classnames (empty for none) * * Example: diff --git a/addons/map/functions/fnc_switchFlashlight.sqf b/addons/map/functions/fnc_switchFlashlight.sqf index e177f886fa..e270ee0c11 100644 --- a/addons/map/functions/fnc_switchFlashlight.sqf +++ b/addons/map/functions/fnc_switchFlashlight.sqf @@ -5,7 +5,7 @@ * Arguments: * 0: Flashlight classname ("" for off) * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/map/script_component.hpp b/addons/map/script_component.hpp index c8767d76a0..414d4d17c9 100644 --- a/addons/map/script_component.hpp +++ b/addons/map/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT map +#define COMPONENT_BEAUTIFIED Map #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/map/stringtable.xml b/addons/map/stringtable.xml index 73bf0cc774..364f595637 100644 --- a/addons/map/stringtable.xml +++ b/addons/map/stringtable.xml @@ -20,7 +20,7 @@ ¿Iluminación de mapa? Osvětlení mapy Iluminação do mapa? - Luminosité + Illumination de la carte ? Térkép megvilágítása? Освещение карты? Illuminazione Mappa? @@ -29,7 +29,7 @@ Simulate map lighting based on ambient lighting and player's items? Simuliere Kartenbeleuchtung auf Basis des Umgebungslichts sowie der mitgeführten Gegenstände? Symuluj oświetlenie mapy bazujące na oświetleniu otoczenia oraz przedmiotach gracza? - Calcul la luminosité de la carte en fonction des conditions de lumière ? + Calculer la luminosité de la carte en fonction des conditions de lumière ? Симулировать освещение карты на основе окружающего света и приборов игрока? Simular a luz do mapa baseado em luz ambiente e itens do jogador? Simular iluminación de mapa basada en la iluminación ambiente y los elementos de los jugadores? @@ -45,7 +45,7 @@ Resplandor de linterna en el mapa? Nasvícení mapy pomocí baterky? Luce della torcia in mappa? - Lumière de la lampe de carte + Lumière de la lampe de carte ? Add external glow to players who use flashlight on map? @@ -65,7 +65,7 @@ Kamerawackeln Třesení mapy? Tremor de mapa? - Tremblement de la carte? + Tremblement de la carte ? Térkép-rázkódás? Тряска карты? Scuoti la mappa? @@ -77,7 +77,7 @@ Kamerawackeln beim Gehen? Umožnit třesení mapy za pochodu? Tremer o mapa enquanto caminha? - La carte tremble lors d'un déplacement ? + Faire trembler la carte lors d'un déplacement? Rázkódjon-e a térkép mozgáskor? Заставлять карту трястись при ходьбе? Far scuotere la mappa mentre cammini? @@ -89,7 +89,7 @@ Kartenvergrößerung einschränken Omezit přiblížení mapy? Limitar zoom do mapa? - Limiter le zoom de la carte? + Limiter le zoom de la carte ? Térkép-nagyítás korlátozása? Ограничить приближение карты? Limita lo zoom in mappa? @@ -101,7 +101,7 @@ Schränkt die maximale Kartenvergrößerung ein. Omezit stupeň přiblížení pro mapu? Limitar a quantidade de zoom disponível para o mapa? - Limite le zoom maximum pour la carte? + Limiter le zoom maximum de la carte ? Korlátozva legyen-e a nagyítás mennyisége a térképnél? Ограничить максимальное приближение, доступное на карте? Limita l'ammontare di zoom disponibile per la mappa? @@ -125,7 +125,7 @@ Gitter-Koordinaten auf dem Mauszeiger anzeigen? Zobrazit souřadnice u kurzoru v mapě? Mostrar as coordenadas de grade no ponteiro do mouse? - Affiche les coordonnées à coté du curseur ? + Afficher les coordonnées de la grille à coté du curseur ? Mutatva legyen-e a kurzornál található rész rácskoordinátája? Показывать координаты около курсора мыши? Mostra la griglia coordinate sul cursore mouse? @@ -136,7 +136,7 @@ Dieses Modul erweitert die Kartenfunktionen. Tento modul umožňuje přizpůsobit mapu s obrazem. Este módulo permite que você personalize a tela de mapa. - Ce module permet de personnaliser l'écran de la carte + Ce module permet de personnaliser l'écran de la carte. Ez a modul lehetővé teszi a térképnézet testreszabását. Этот модуль позволяет настроить отображение карты. Este módulo permite personalizar la pantalla del mapa. @@ -149,7 +149,7 @@ Blue Force Tracking Blue Force Tracking Rastreio de forças azuis - Blue Force Tracking + Blue Force Tracking (SFA) Blue Force követés Система слежения Blue Force Tracking Blue Force Tracking @@ -173,7 +173,7 @@ Aktywuj Blue Force Tracking. Domyślnie: Nie Povolit Blue Force Tracking. Výchozí: Ne Activar Blue Force Tracking. Por defecto: No - Activer le SFA. Défaut: non + Active le SFA. Défaut : non Blue Force követés engedélyezése. Alapértelmezett: Nem Включает систему служения BFT. По-умолчанию: Нет Abilita Blue Force Tracking. Default: No @@ -209,7 +209,7 @@ KI-Gruppen verstecken? Skrýt AI skupiny? Esconder grupos de IA? - Cacher les groupes IA ? + Cacher les groupes d'IA ? AI csoportok elrejtése? Скрыть группы ботов? Nascondere gruppi IA? @@ -233,7 +233,7 @@ Zeigen Sie die Namen der Spieler? Zobrazit jména hráčů? Mostrar os nomes dos jogadores? - Afficher les noms des joueurs? + Afficher les noms des joueurs ? Itt található az a játékos nevét? Показать имена игроков? Mostra i nomi dei giocatori? @@ -245,7 +245,7 @@ Zeigen einzelnen Spielernamen? Zobrazit názvy jednotlivých hráčů? Mostrar nomes individuais dos jogadores? - Afficher les noms des joueurs individuels? + Affiche les noms des joueurs individuels ? Itt található az adott játékos neveket? Показать отдельные имена игроков? Mostra i nomi dei giocatori singoli? @@ -278,7 +278,7 @@ NSG Noktowizja Óculos de Visão Noturna - Lunettes de vision nocturne + JVN ПНВ NVG NVG @@ -289,7 +289,7 @@ Ein Włącz Ligado - Allumer + Allumé Вкл. Zapnout Encendido @@ -300,7 +300,7 @@ Aus Wyłącz Desligado - Éteindre + Éteins Выкл. Vypnout Apagado @@ -361,7 +361,7 @@ Zvolit kanál po startu Imposta Canale all'Avvio Setear canal al comenzar - Définir le canal de départ + Mettre un canal par défaut Change the starting marker channel at mission start @@ -372,7 +372,7 @@ Nastavit kanál po startu mise Cambia il canale marker iniziale all'avvio di missione Cambiar el canal de marcadores inicial al comenzar la misión - Changer le marqueur du canal de départ au départ de la mission + Change le canal de communication par défaut au début de la mission. \ No newline at end of file diff --git a/addons/map_gestures/config.cpp b/addons/map_gestures/config.cpp index 52f333c717..b7bbf791e7 100644 --- a/addons/map_gestures/config.cpp +++ b/addons/map_gestures/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/map_gestures/script_component.hpp b/addons/map_gestures/script_component.hpp index bcf6a1a97c..96189555f9 100644 --- a/addons/map_gestures/script_component.hpp +++ b/addons/map_gestures/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT map_gestures +#define COMPONENT_BEAUTIFIED Map Gestures #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/maptools/XEH_postInitClient.sqf b/addons/maptools/XEH_postInitClient.sqf index 388ffd6b81..8569f0eb9f 100644 --- a/addons/maptools/XEH_postInitClient.sqf +++ b/addons/maptools/XEH_postInitClient.sqf @@ -22,7 +22,7 @@ GVAR(mapTool_isRotating) = false; ((findDisplay 12) displayCtrl 51) ctrlAddEventHandler ["Draw", {_this call FUNC(updateMapToolMarkers);}]; }, []] call CBA_fnc_waitUntilAndExecute; -["ace_visibleMapChanged", { +["visibleMap", { params ["", "_mapOn"]; if (_mapOn) then { // Show GPS if required @@ -31,4 +31,4 @@ GVAR(mapTool_isRotating) = false; // Hide GPS [false] call FUNC(openMapGps); }; -}] call CBA_fnc_addEventHandler; +}] call CBA_fnc_addPlayerEventHandler; diff --git a/addons/maptools/config.cpp b/addons/maptools/config.cpp index 1b5e3359bd..e94ec2edcd 100644 --- a/addons/maptools/config.cpp +++ b/addons/maptools/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {"ACE_MapTools"}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/maptools/functions/fnc_calculateMapScale.sqf b/addons/maptools/functions/fnc_calculateMapScale.sqf index 525955cdcd..926ed558fe 100644 --- a/addons/maptools/functions/fnc_calculateMapScale.sqf +++ b/addons/maptools/functions/fnc_calculateMapScale.sqf @@ -5,7 +5,7 @@ * Arguments: * None * - * Return value: + * Return Value: * No * * Public: No diff --git a/addons/maptools/functions/fnc_canUseMapGPS.sqf b/addons/maptools/functions/fnc_canUseMapGPS.sqf index 381136a1cc..a327c2bc8d 100644 --- a/addons/maptools/functions/fnc_canUseMapGPS.sqf +++ b/addons/maptools/functions/fnc_canUseMapGPS.sqf @@ -5,7 +5,7 @@ * Arguments: * None * - * Return value: + * Return Value: * * * Public: No diff --git a/addons/maptools/functions/fnc_canUseMapTools.sqf b/addons/maptools/functions/fnc_canUseMapTools.sqf index 7658c2c1d2..8c16425082 100644 --- a/addons/maptools/functions/fnc_canUseMapTools.sqf +++ b/addons/maptools/functions/fnc_canUseMapTools.sqf @@ -5,7 +5,7 @@ * Arguments: * None * - * Return value: + * Return Value: * * * Public: No diff --git a/addons/maptools/functions/fnc_handleMouseButton.sqf b/addons/maptools/functions/fnc_handleMouseButton.sqf index 29a8f8cbf0..bf30a32ce1 100644 --- a/addons/maptools/functions/fnc_handleMouseButton.sqf +++ b/addons/maptools/functions/fnc_handleMouseButton.sqf @@ -2,11 +2,11 @@ * Author: esteldunedain * Handle mouse buttons. * - * Argument: + * Arguments: * 0: 1 if mouse down down, 0 if mouse button up (Number) * 1: Parameters of the mouse button event * - * Return value: + * Return Value: * Boolean, true if event was handled */ #include "script_component.hpp" diff --git a/addons/maptools/functions/fnc_handleMouseMove.sqf b/addons/maptools/functions/fnc_handleMouseMove.sqf index 86c0c11212..a52163ba32 100644 --- a/addons/maptools/functions/fnc_handleMouseMove.sqf +++ b/addons/maptools/functions/fnc_handleMouseMove.sqf @@ -2,11 +2,11 @@ * Author: esteldunedain * Handle mouse movement over the map tool. * - * Argument: + * Arguments: * 0: Map Control * 1: Mouse position on screen coordinates * - * Return value: + * Return Value: * Boolean, true if event was handled */ diff --git a/addons/maptools/functions/fnc_isInsideMapTool.sqf b/addons/maptools/functions/fnc_isInsideMapTool.sqf index d86828ad07..1bcb35f86a 100644 --- a/addons/maptools/functions/fnc_isInsideMapTool.sqf +++ b/addons/maptools/functions/fnc_isInsideMapTool.sqf @@ -6,7 +6,7 @@ * 0: x Position (in meters) * 1: y Position (in meters) * - * Return value: + * Return Value: * Boolean */ #include "script_component.hpp" diff --git a/addons/maptools/functions/fnc_openMapGps.sqf b/addons/maptools/functions/fnc_openMapGps.sqf index 0f4bb62c87..c3e2a8bfee 100644 --- a/addons/maptools/functions/fnc_openMapGps.sqf +++ b/addons/maptools/functions/fnc_openMapGps.sqf @@ -5,7 +5,7 @@ * Arguments: * 0: Open GPS? * - * Return value: + * Return Value: * Nothing * * Public: No diff --git a/addons/maptools/functions/fnc_updateMapToolMarkers.sqf b/addons/maptools/functions/fnc_updateMapToolMarkers.sqf index 5a3b0e0821..47688cdb91 100644 --- a/addons/maptools/functions/fnc_updateMapToolMarkers.sqf +++ b/addons/maptools/functions/fnc_updateMapToolMarkers.sqf @@ -5,7 +5,7 @@ * Arguments: * 0: The Map * - * Return value: + * Return Value: * Nothing * * Public: No diff --git a/addons/maptools/script_component.hpp b/addons/maptools/script_component.hpp index 497ee14dc1..d5f5b0f2d7 100644 --- a/addons/maptools/script_component.hpp +++ b/addons/maptools/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT maptools +#define COMPONENT_BEAUTIFIED Map Tools #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/maptools/stringtable.xml b/addons/maptools/stringtable.xml index 67773353fa..778357751c 100644 --- a/addons/maptools/stringtable.xml +++ b/addons/maptools/stringtable.xml @@ -53,7 +53,7 @@ Show Normal Map Tool Zeige Kartenwerkzeug (normal) Mostrar herr. de mapa normal - Montrer outils normaux + Montrer les outils de cartographie (normaux) Visualizza Strumenti Cartografici standard Mostrar Ferramenta de Mapa Padrão Térképészeti eszköz megjelenítése (normál méret) @@ -65,7 +65,7 @@ Show Small Map Tool Zeige Kartenwerkzeug (klein) Mostrar herr. de mapa pequeñas - Montrer petits outils + Montrer les outils de cartographie (petits) Visualizza Strumenti Cartografici piccoli Mostrar Ferramenta de Mapa Pequena Térképészeti eszköz megjelenítése (kicsinyített) @@ -77,7 +77,7 @@ Align Map Tool to North Kartenwerkzeug nach Norden ausrichten Alinear herr. de mapa al norte - Aligner au nord + Aligner les outils sur le nord Allinea gli Strumenti Cartografici con il Nord Alinhar Ferramenta de Mapa com o Norte Térképészeti eszköz Északhoz állítása @@ -89,7 +89,7 @@ Align Map Tool to Compass Kartenwerkzeug am Kompass ausrichten Alinear herr. de mapa a la brújula - Aligner sur la boussole + Aligner les outils sur la boussole Allinea gli Strumenti Cartografici con la bussola Alinhar Ferramenta de Mapa com a Bússola Térképészeti eszköz iránytűhöz állítása @@ -124,7 +124,7 @@ Direction: %1° Drehung: %1° - Direction: %1° + Direction : %1° Směr: %1° Kierunek: %1° Dirección: %1° @@ -135,9 +135,11 @@ Rotate Map Tools Key + Touche de rotation des outils de naviguation Modifier key to allow rotating map tools + Touche modificatrice permettant la rotation des outils de naviguation \ No newline at end of file diff --git a/addons/markers/config.cpp b/addons/markers/config.cpp index 658a3ab370..1a8c310735 100644 --- a/addons/markers/config.cpp +++ b/addons/markers/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/markers/script_component.hpp b/addons/markers/script_component.hpp index 1da213875a..458f5cfabf 100644 --- a/addons/markers/script_component.hpp +++ b/addons/markers/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT markers +#define COMPONENT_BEAUTIFIED Markers #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/medical/ACE_Medical_Treatments.hpp b/addons/medical/ACE_Medical_Treatments.hpp index b89afc8b1a..cbe2e48b1e 100644 --- a/addons/medical/ACE_Medical_Treatments.hpp +++ b/addons/medical/ACE_Medical_Treatments.hpp @@ -312,10 +312,11 @@ class ACE_Medical_Actions { itemConsumed = QGVAR(consumeItem_PAK); animationPatient = ""; animationPatientUnconscious = "AinjPpneMstpSnonWrflDnon_rolltoback"; - animationCaller = "AinvPknlMstpSlayWnonDnon_medicOther"; + animationPatientUnconsciousExcludeOn[] = {"ainjppnemstpsnonwrfldnon"}; + animationCaller = "AinvPknlMstpSlayWrflDnon_medicOther"; animationCallerProne = "AinvPpneMstpSlayW[wpn]Dnon_medicOther"; - animationCallerSelf = ""; - animationCallerSelfProne = ""; + animationCallerSelf = "AinvPknlMstpSlayW[wpn]Dnon_medic"; + animationCallerSelfProne = "AinvPpneMstpSlayW[wpn]Dnon_medic"; litter[] = { {"All", "", {"ACE_MedicalLitter_gloves"}}, {"All", "_bloodLossOnSelection > 0", {{"ACE_MedicalLitterBase", "ACE_MedicalLitter_bandage1", "ACE_MedicalLitter_bandage2", "ACE_MedicalLitter_bandage3"}}}, {"All", "_bloodLossOnSelection > 0", {{"ACE_MedicalLitterBase", "ACE_MedicalLitter_bandage1", "ACE_MedicalLitter_bandage2", "ACE_MedicalLitter_bandage3"}}}, @@ -981,7 +982,7 @@ class ACE_Medical_Advanced { reopeningMaxDelay = 150; }; class AbrasionMinor: Abrasion { - effectiveness = 43; + effectiveness = 4; }; class AbrasionMedium: Abrasion { effectiveness = 3; @@ -1124,7 +1125,7 @@ class ACE_Medical_Advanced { }; class AbrasionLarge: Abrasion { effectiveness = 0.7; - reopeningChance = 5; + reopeningChance = 0.5; }; class Avulsions: Abrasion { diff --git a/addons/medical/XEH_postInit.sqf b/addons/medical/XEH_postInit.sqf index 487858ca6c..2b1e31e04a 100644 --- a/addons/medical/XEH_postInit.sqf +++ b/addons/medical/XEH_postInit.sqf @@ -150,12 +150,16 @@ GVAR(effectTimeBlood) = CBA_missionTime; // Bleeding Indicator if (_bleeding > 0 and GVAR(effectTimeBlood) + 3.5 < CBA_missionTime) then { GVAR(effectTimeBlood) = CBA_missionTime; - [600 * _bleeding] call BIS_fnc_bloodEffect; + [600 * _bleeding] call FUNC(showBloodEffect); }; // Blood Volume Effect - _blood = (ACE_player getVariable [QGVAR(bloodVolume), 100]) / 100; - // TODO scale up to 200% + _blood = if (GVAR(level) < 2) then { + (ACE_player getVariable [QGVAR(bloodVolume), 100]) / 100; + } else { + (((ACE_player getVariable [QGVAR(bloodVolume), 100]) - 60) max 0) / 40; + }; + if (_blood > 0.99) then { GVAR(effectBloodVolumeCC) ppEffectEnable false; } else { @@ -282,7 +286,7 @@ GVAR(lastHeartBeatSound) = CBA_missionTime; ["isNotUnconscious", {!((_this select 0) getVariable ["ACE_isUnconscious", false])}] call EFUNC(common,addCanInteractWithCondition); // Item Event Handler -["ace_playerInventoryChanged", FUNC(itemCheck)] call CBA_fnc_addEventHandler; +["loadout", FUNC(itemCheck)] call CBA_fnc_addPlayerEventHandler; if (hasInterface) then { ["ace_playerJIP", { diff --git a/addons/medical/config.cpp b/addons/medical/config.cpp index ce9c6ea0e9..ed490b6e20 100644 --- a/addons/medical/config.cpp +++ b/addons/medical/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {"ACE_medicalSupplyCrate", "ACE_medicalSupplyCrate_advanced", "ACE_fieldDressingItem", "ACE_packingBandageItem", "ACE_elasticBandageItem", "ACE_tourniquetItem", "ACE_morphineItem", "ACE_atropineItem", "ACE_epinephrineItem", "ACE_plasmaIVItem", "ACE_bloodIVItem", "ACE_salineIVItem", "ACE_quikclotItem", "ACE_personalAidKitItem", "ACE_surgicalKitItem", "ACE_bodyBagItem", "ACE_bodyBagObject"}; weapons[] = {"ACE_fieldDressing", "ACE_packingBandage", "ACE_elasticBandage", "ACE_tourniquet", "ACE_morphine", "ACE_atropine", "ACE_epinephrine", "ACE_plasmaIV", "ACE_plasmaIV_500", "ACE_plasmaIV_250", "ACE_bloodIV", "ACE_bloodIV_500", "ACE_bloodIV_250", "ACE_salineIV", "ACE_salineIV_500", "ACE_salineIV_250", "ACE_quikclot", "ACE_personalAidKit", "ACE_surgicalKit", "ACE_bodyBag"}; requiredVersion = REQUIRED_VERSION; @@ -28,12 +29,12 @@ class CfgPatches { class ACE_newEvents { medical_onUnconscious = "ace_unconscious"; - medical_treatmentSuccess = "ace_treatmentSuccess"; + medical_treatmentSuccess = "ace_treatmentSucceded"; medical_onSetDead = "ace_killed"; - Medical_onEnteredCardiacArrest = "ace_enteredCardiacArrest"; - Medical_onItemAddedToTriageCard = "ace_itemAddedToTriageCard"; + Medical_onEnteredCardiacArrest = "ace_cardiacArrestEntered"; + Medical_onItemAddedToTriageCard = "ace_triageCardItemAdded"; medical_onLogEntryAdded = "ace_medicalLogEntryAdded"; - Medical_onHeartRateAdjustmentAdded = "ace_addedHeartRateAdjustment"; + Medical_onHeartRateAdjustmentAdded = "ace_heartRateAdjustmentAdded"; placedInBodyBag = "ace_placedInBodyBag"; actionPlaceInBodyBag = QGVAR(actionPlaceInBodyBag); treatmentTourniquetLocal = QGVAR(treatmentTourniquetLocal); diff --git a/addons/medical/functions/fnc_addHeartRateAdjustment.sqf b/addons/medical/functions/fnc_addHeartRateAdjustment.sqf index 64acf71bb7..a23ea45023 100644 --- a/addons/medical/functions/fnc_addHeartRateAdjustment.sqf +++ b/addons/medical/functions/fnc_addHeartRateAdjustment.sqf @@ -22,4 +22,4 @@ private _adjustment = _unit getVariable [QGVAR(heartRateAdjustments), []]; _adjustment pushBack [_value, _time, _callBack]; _unit setVariable [QGVAR(heartRateAdjustments), _adjustment]; -["ace_addedHeartRateAdjustment", [_unit, _value, _time]] call CBA_fnc_localEvent; +["ace_heartRateAdjustmentAdded", [_unit, _value, _time]] call CBA_fnc_localEvent; diff --git a/addons/medical/functions/fnc_addToTriageCard.sqf b/addons/medical/functions/fnc_addToTriageCard.sqf index cfd58f09b4..0e11f38f77 100644 --- a/addons/medical/functions/fnc_addToTriageCard.sqf +++ b/addons/medical/functions/fnc_addToTriageCard.sqf @@ -39,4 +39,4 @@ if (!_inList) then { _log pushBack [_newItem, 1, CBA_missionTime]; }; _unit setVariable [QGVAR(triageCard), _log, true]; -["ace_itemAddedToTriageCard", [_unit, _newItem, _amount]] call CBA_fnc_localEvent; +["ace_triageCardItemAdded", [_unit, _newItem, _amount]] call CBA_fnc_localEvent; diff --git a/addons/medical/functions/fnc_addUnloadPatientActions.sqf b/addons/medical/functions/fnc_addUnloadPatientActions.sqf index 2725365bc1..596a536de6 100644 --- a/addons/medical/functions/fnc_addUnloadPatientActions.sqf +++ b/addons/medical/functions/fnc_addUnloadPatientActions.sqf @@ -2,12 +2,12 @@ * Author: esteldunedain * Create one unload action per unconscious passenger * - * Argument: + * Arguments: * 0: Vehicle * 1: Player * 3: Parameters * - * Return value: + * Return Value: * Children actions * * Public: No diff --git a/addons/medical/functions/fnc_setCardiacArrest.sqf b/addons/medical/functions/fnc_setCardiacArrest.sqf index 925ff4cc03..f41dda8591 100644 --- a/addons/medical/functions/fnc_setCardiacArrest.sqf +++ b/addons/medical/functions/fnc_setCardiacArrest.sqf @@ -21,7 +21,7 @@ if (_unit getVariable [QGVAR(inCardiacArrest),false]) exitWith {}; _unit setVariable [QGVAR(inCardiacArrest), true,true]; _unit setVariable [QGVAR(heartRate), 0]; -["ace_enteredCardiacArrest", [_unit]] call CBA_fnc_localEvent; +["ace_cardiacArrestEntered", [_unit]] call CBA_fnc_localEvent; [_unit, true] call FUNC(setUnconscious); _timeInCardiacArrest = 120 + round(random(600)); diff --git a/addons/medical/functions/fnc_showBloodEffect.sqf b/addons/medical/functions/fnc_showBloodEffect.sqf index 3e1e8931b3..7659064aaa 100644 --- a/addons/medical/functions/fnc_showBloodEffect.sqf +++ b/addons/medical/functions/fnc_showBloodEffect.sqf @@ -72,7 +72,7 @@ if (_bloodRemaining < 25) exitWith { [{ (_this select 0) ctrlSetFade 1; (_this select 0) ctrlCommit 0.8; - }, _fxBloodControls, 0.7] call EFUNC(common,waitAndExecute); + }, _fxBloodControls, 0.7] call CBA_fnc_waitAndExecute; }; if (_bloodRemaining < 40) exitWith { @@ -85,11 +85,11 @@ if (_bloodRemaining < 40) exitWith { (_this select 0) ctrlSetFade 1; (_this select 1) ctrlSetFade 1; (_this select 1) ctrlCommit 1; - }, _fxBloodControls, 0.7] call EFUNC(common,waitAndExecute); + }, _fxBloodControls, 0.7] call CBA_fnc_waitAndExecute; [{ (_this select 0) ctrlCommit 0.8; - }, _fxBloodControls, 1.2] call EFUNC(common,waitAndExecute); + }, _fxBloodControls, 1.2] call CBA_fnc_waitAndExecute; }; if (_bloodRemaining < 55) exitWith { @@ -103,11 +103,11 @@ if (_bloodRemaining < 55) exitWith { (_this select 1) ctrlSetFade 1; (_this select 2) ctrlSetFade 1; (_this select 1) ctrlCommit 1; - }, _fxBloodControls, 0.7] call EFUNC(common,waitAndExecute); + }, _fxBloodControls, 0.7] call CBA_fnc_waitAndExecute; [{ (_this select 0) ctrlCommit 0.8; - }, _fxBloodControls, 1.2] call EFUNC(common,waitAndExecute); + }, _fxBloodControls, 1.2] call CBA_fnc_waitAndExecute; }; if (_bloodRemaining < 70) exitWith { @@ -123,15 +123,15 @@ if (_bloodRemaining < 70) exitWith { (_this select 1) ctrlSetFade 1; (_this select 2) ctrlSetFade 1; (_this select 2) ctrlCommit 1.5; - }, _fxBloodControls, 0.7] call EFUNC(common,waitAndExecute); + }, _fxBloodControls, 0.7] call CBA_fnc_waitAndExecute; [{ (_this select 1) ctrlCommit 1; - }, _fxBloodControls, 1.7] call EFUNC(common,waitAndExecute); + }, _fxBloodControls, 1.7] call CBA_fnc_waitAndExecute; [{ (_this select 0) ctrlCommit 0.8; - }, _fxBloodControls, 2.2] call EFUNC(common,waitAndExecute); + }, _fxBloodControls, 2.2] call CBA_fnc_waitAndExecute; }; //default @@ -147,12 +147,12 @@ _bloodCtrl3 ctrlCommit 0.2; (_this select 1) ctrlSetFade 1; (_this select 2) ctrlSetFade 1; (_this select 2) ctrlCommit 1.5; -}, _fxBloodControls, 0.7] call EFUNC(common,waitAndExecute); +}, _fxBloodControls, 0.7] call CBA_fnc_waitAndExecute; [{ (_this select 1) ctrlCommit 1; -}, _fxBloodControls, 1.7] call EFUNC(common,waitAndExecute); +}, _fxBloodControls, 1.7] call CBA_fnc_waitAndExecute; [{ (_this select 0) ctrlCommit 0.8; -}, _fxBloodControls, 2.2] call EFUNC(common,waitAndExecute); +}, _fxBloodControls, 2.2] call CBA_fnc_waitAndExecute; diff --git a/addons/medical/functions/fnc_treatment_success.sqf b/addons/medical/functions/fnc_treatment_success.sqf index d85d0cf739..eb52d20e3c 100644 --- a/addons/medical/functions/fnc_treatment_success.sqf +++ b/addons/medical/functions/fnc_treatment_success.sqf @@ -88,4 +88,4 @@ if (!(_target getVariable [QGVAR(addedToUnitLoop),false])) then { [_target] call FUNC(addVitalLoop); }; -["ace_treatmentSuccess", [_caller, _target, _selectionName, _className]] call CBA_fnc_localEvent; +["ace_treatmentSucceded", [_caller, _target, _selectionName, _className]] call CBA_fnc_localEvent; diff --git a/addons/medical/script_component.hpp b/addons/medical/script_component.hpp index 0af2736f50..bb0db0cd74 100644 --- a/addons/medical/script_component.hpp +++ b/addons/medical/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT medical +#define COMPONENT_BEAUTIFIED Medical #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index dd6f3ca7d5..811d5cf6e7 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -77,7 +77,7 @@ Inyectar Epinefrina Wstrzyknij adrenalinę Aplikovat adrenalin - Injecter de l'épinéphrine + Injecter épinéphrine Ввести адреналин Epinefrin beadása Injetar Epinefrina @@ -90,7 +90,7 @@ Wstrzyknij morfinę Aplikovat morfin Ввести морфин - Injecter de la morphine + Injecter morphine Morfium beadása Injetar Morfina Inietta morfina @@ -102,7 +102,7 @@ Przetocz krew Transfúze krve Перелить кровь - Transfusion + Transfuser du sang Infúzió (vér) Transfundir Sangue Trasfusione di sangue @@ -149,7 +149,7 @@ Venda Bandażuj Obvázat - Pansement + Panser Benda Kötözés Atadura @@ -162,7 +162,7 @@ Bandażuj głowę Obvázat hlavu Перевязать голову - Pansement Tête + Panser Tête Fej kötözése Atar Cabeça Benda la testa @@ -174,7 +174,7 @@ Bandażuj tors Obvázat hruď Перевязать торс - Pansement Torse + Panser Torse Testtörzs kötözése Atar Tronco Benda il torso @@ -186,7 +186,7 @@ Bandażuj lewe ramię Obvázat levou ruku Перевязать левую руку - Pansement Bras Gauche + Panser Bras Gauche Bal kar kötözése Atar Braço Esquerdo Benda il braccio sinistro @@ -198,7 +198,7 @@ Bandażuj prawe ramię Obvázat pravou ruku Перевязать правую руку - Pansement Bras Droit + Panser Bras Droit Jobb kar kötözése Atar Braço Direito Benda il braccio destro @@ -210,7 +210,7 @@ Bandażuj lewą nogę Obvázat levou nohu Перевязать левую ногу - Pansement Jambe Gauche + Panser Jambe Gauche Bal láb kötözése Atar Perna Esquerda Benda la gamba sinistra @@ -222,7 +222,7 @@ Bandażuj prawą nogę Obvázat pravou nohu Перевязать правую ногу - Pansement Jambe Droite + Panser Jambe Droite Jobb láb kötözése Atar Perna Direita Benda la gamba destra @@ -2912,6 +2912,7 @@ Ubicación mejora entrenamiento. Miejsca zwiększają wyszkolenie Localização melhora treinamento + Locations boost l'entraînement de médecin Boost medic rating in medical vehicles or near medical facilities [untrained becomes medic, medic becomes doctor] @@ -2921,6 +2922,7 @@ Mejora el entrenamiento médico dentro de vehículos médicos o cerca de instalaciones médicas (no entrenados se convierten en médicos, médicos se convierten en doctores) Zwiększa poziom wyszkolenia medyków wewnątrz pojazdów medycznych lub w pobliżu budynków medycznych [niedoświadczony zostaje medykiem, medyk zostaje doktorem] Aumenta a classificação do médico dentro de veículos médicos ou perto de instalações médicas [sem treinamento vira médico, médico vira doutor] + Boost le rang médical dans les véhicules ou bâtiments médicaux [non entraînés deviennent médecins, médecins deviennent docteurs] Disable medics @@ -4165,6 +4167,7 @@ Ritarda il cessate il fuoco dell'IA quando il giocatore è svenuto per motivi medici. Prodleva zastavení palby pro AI, pokud je hráč v bezvědomí ze zdravotních důvodů. Atraso durante cessar fogo da AI durante inconsciência médica + Délai de cessez le feu pour l'IA pendant que le joueur est inconscient pour des raisons médicales Delay cease fire of AI for unconsciousness @@ -4174,6 +4177,7 @@ Ritarda il cessate il fuoco dell'IA quando si è svenuti Prodleva zastavení palby AI na bezvědomé Atraso durante cessar fogo da AI durante inconsciência + Délai de cessez le feu de l'IA pour la perte de conscience \ No newline at end of file diff --git a/addons/medical_menu/XEH_postInit.sqf b/addons/medical_menu/XEH_postInit.sqf index e7b7ec40cb..b028a16e75 100644 --- a/addons/medical_menu/XEH_postInit.sqf +++ b/addons/medical_menu/XEH_postInit.sqf @@ -6,7 +6,7 @@ GVAR(MenuPFHID) = -1; GVAR(lastOpenedOn) = -1; GVAR(pendingReopen) = false; -["ace_treatmentSuccess", { +["ace_treatmentSucceded", { if (GVAR(openAfterTreatment) && {GVAR(pendingReopen)}) then { GVAR(pendingReopen) = false; [{ diff --git a/addons/medical_menu/config.cpp b/addons/medical_menu/config.cpp index 67d3966771..633323c2cf 100644 --- a/addons/medical_menu/config.cpp +++ b/addons/medical_menu/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/medical_menu/script_component.hpp b/addons/medical_menu/script_component.hpp index afa50c04f3..cb437060a3 100644 --- a/addons/medical_menu/script_component.hpp +++ b/addons/medical_menu/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT medical_menu +#define COMPONENT_BEAUTIFIED Medical Menu #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/medical_menu/stringtable.xml b/addons/medical_menu/stringtable.xml index e9812128f4..a5b75c00e2 100644 --- a/addons/medical_menu/stringtable.xml +++ b/addons/medical_menu/stringtable.xml @@ -127,7 +127,7 @@ STATUS СОСТОЯНИЕ ESTADO - ÉTATS + ÉTAT STATUS ESTADO STAV @@ -138,7 +138,7 @@ ÜBERSICHT ОБЩАЯ ИНФОРМАЦИЯ DESCRIPCIÓN - DESCRIPTION + APERÇU OPIS VISÃO GERAL PŘEHLED @@ -149,7 +149,7 @@ AKTIVITÄTSVERLAUF ПРОВЕДЕННЫЕ МАНИПУЛЯЦИИ REGISTRO DE ACTIVIDAD - REGISTRE DES SOINS + REGISTRE D'ACTIVITÉ LOGI AKTYWNOŚCI REGISTRO DE ATIVIDADE PROTOKOL @@ -214,7 +214,7 @@ Airway Management Дыхательные пути Vías Aéreas - Gestion Des Voie REspiratoire + Gestion des voies respiratoires Drogi oddechowe Vias aéreas Dýchací systém @@ -226,7 +226,7 @@ Erweiterte Behandlungen Специальная медпомощь Tratamientos Avanzados - Traitement Avancé + Traitements Avancés Zaawansowane zabiegi Tratamentos avançados Pokročilé ošetření @@ -237,7 +237,7 @@ Ziehen/Tragen Тащить/нести Arrastrar/Cargar - Glisser/Porter + Traîner/Porter Ciągnij/Nieś Arrastar/Carregar Táhnout/Nést @@ -247,7 +247,7 @@ Toggle (Self) Umschalter (Selbst) Лечить себя/другого раненого - Activer (sois) + Basculer (soi) Przełącz (na siebie) Alternar Alternar (Si mesmo) @@ -259,7 +259,7 @@ Setze Status auf der Triagekarte Сортировка Seleccionar estado de Triage - Selectioner l'état de Triage + Selectioner l'état de triage Wybierz priorytet Selecionar estado de triagem Vybrat prioritu @@ -512,7 +512,7 @@ Normale Atmung Дыхание в норме Respiración normal - Respiration Normale + Respiration normale Normalny oddech Respiração normal Normální dýchání @@ -523,7 +523,7 @@ Keine Atmung Дыхания нет No respira - Apnée + Aucune respiration Brak oddechu Sem respiração Nedýchá @@ -534,7 +534,7 @@ Schwere Atmung Дыхание затруднено Dificultad para respirar - Difficultée Respiratoire + Respiration difficile Trudności z oddychaniem Dificuldade para respirar Potíže s dýcháním @@ -545,7 +545,7 @@ Beinahe keine Atmung Дыхания почти нет Casi sin respirar - Respiration Faible + Respiration faible Prawie brak oddechu Quase sem respiração Téměř nedýchá diff --git a/addons/microdagr/config.cpp b/addons/microdagr/config.cpp index 9da8434fe7..5d33c073e1 100644 --- a/addons/microdagr/config.cpp +++ b/addons/microdagr/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {"ACE_microDAGR_Item"}; weapons[] = {"ACE_microDAGR"}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/microdagr/script_component.hpp b/addons/microdagr/script_component.hpp index c2f2b9b0a6..60d7caaa80 100644 --- a/addons/microdagr/script_component.hpp +++ b/addons/microdagr/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT microdagr +#define COMPONENT_BEAUTIFIED MicroDAGR #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/minedetector/$PBOPREFIX$ b/addons/minedetector/$PBOPREFIX$ new file mode 100644 index 0000000000..d8c7d764ef --- /dev/null +++ b/addons/minedetector/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\minedetector \ No newline at end of file diff --git a/addons/minedetector/ACE_detector.hpp b/addons/minedetector/ACE_detector.hpp new file mode 100644 index 0000000000..b6effc2436 --- /dev/null +++ b/addons/minedetector/ACE_detector.hpp @@ -0,0 +1,12 @@ +class ACE_detector { + class detectableObjects { + }; + class detectors { + class ACE_VMM3 { + radius = 2.5; + sounds[] = {"ace_detector_1", "ace_detector_2", "ace_detector_3", "ace_detector_4"}; + }; + class ACE_VMH3: ACE_VMM3 { + }; + }; +}; diff --git a/addons/minedetector/CfgAmmo.hpp b/addons/minedetector/CfgAmmo.hpp new file mode 100644 index 0000000000..bd2a3fdca6 --- /dev/null +++ b/addons/minedetector/CfgAmmo.hpp @@ -0,0 +1,30 @@ +class CfgAmmo { + + // seems to not get inherited + class Default; + class TimeBombCore: Default { + GVAR(detectable) = 1; + }; + + // these below do get inherited + class DirectionalBombCore; + class DirectionalBombBase: DirectionalBombCore { + GVAR(detectable) = 1; + }; + + class BoundingMineCore; + class BoundingMineBase: BoundingMineCore { + GVAR(detectable) = 1; + }; + + class MineCore; + class MineBase: MineCore { + GVAR(detectable) = 1; + }; + + class PipeBombCore; + class PipeBombBase: PipeBombCore { + GVAR(detectable) = 1; + }; + +}; diff --git a/addons/minedetector/CfgEventHandlers.hpp b/addons/minedetector/CfgEventHandlers.hpp new file mode 100644 index 0000000000..3daad1425a --- /dev/null +++ b/addons/minedetector/CfgEventHandlers.hpp @@ -0,0 +1,10 @@ +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preInit)); + }; +}; +class Extended_PostInit_EventHandlers { + class ADDON { + clientInit = QUOTE( call COMPILE_FILE(XEH_clientInit) ); + }; +}; diff --git a/addons/minedetector/CfgSounds.hpp b/addons/minedetector/CfgSounds.hpp new file mode 100644 index 0000000000..544bf94379 --- /dev/null +++ b/addons/minedetector/CfgSounds.hpp @@ -0,0 +1,22 @@ +class CfgSounds { + class ace_detector_1 { + name = "ace_detector_1"; + sound[] = {QUOTE(PATHTOF(sounds\metal_detector.wav)), "db+1", 1}; + titles[] = {}; + }; + class ace_detector_2 { + name = "ace_detector_2"; + sound[] = {QUOTE(PATHTOF(sounds\metal_detector.wav)), "db+1", 0.9}; + titles[] = {}; + }; + class ace_detector_3 { + name = "ace_detector_3"; + sound[] = {QUOTE(PATHTOF(sounds\metal_detector.wav)), "db+1", 0.8}; + titles[] = {}; + }; + class ace_detector_4 { + name = "ace_detector_4"; + sound[] = {QUOTE(PATHTOF(sounds\metal_detector.wav)), "db+1", 0.7}; + titles[] = {}; + }; +}; diff --git a/addons/minedetector/CfgVehicles.hpp b/addons/minedetector/CfgVehicles.hpp new file mode 100644 index 0000000000..c486a049e3 --- /dev/null +++ b/addons/minedetector/CfgVehicles.hpp @@ -0,0 +1,51 @@ +class CfgVehicles { + class Box_NATO_Support_F; + class ACE_Box_Misc: Box_NATO_Support_F { + class TransportItems { + MACRO_ADDITEM(ACE_VMM3,4); + MACRO_ADDITEM(ACE_VMH3,4); + }; + }; + + class Man; + class CAManBase: Man { + class ACE_SelfActions { + class ACE_Equipment { + class GVAR(activate) { + displayName = CSTRING(ActivateDetector); + condition = QUOTE(call FUNC(canActivateDetector)); + statement = QUOTE(call FUNC(activateDetector)); + showDisabled = 0; + priority = 0.1; + icon = QPATHTOF(ui\icon_mineDetectorOn.paa); + exceptions[] = {}; + }; + class GVAR(deactivate) { + displayName = CSTRING(DeactivateDetector); + condition = QUOTE(call FUNC(canDeactivateDetector)); + statement = QUOTE(call FUNC(deactivateDetector)); + showDisabled = 0; + priority = 0.1; + icon = QPATHTOF(ui\icon_mineDetectorOff.paa); + exceptions[] = {}; + }; + }; + }; + }; + class Items_base_F; + class ACE_Explosives_Place: Items_base_F { + GVAR(detectable) = 1; + }; + + // Editor placed mines + class Static; + class MineGeneric: Static { + GVAR(detectable) = 1; + }; + + // Zeus placed mines + class ModuleEmpty_F; + class ModuleMine_F: ModuleEmpty_F { + GVAR(detectable) = 1; + }; +}; diff --git a/addons/minedetector/CfgWeapons.hpp b/addons/minedetector/CfgWeapons.hpp new file mode 100644 index 0000000000..8495aaf32e --- /dev/null +++ b/addons/minedetector/CfgWeapons.hpp @@ -0,0 +1,50 @@ +class Mode_SemiAuto; + +class CfgWeapons { + class Pistol; + class Pistol_Base_F: Pistol { + class WeaponSlotsInfo; + }; + class ACE_VMM3: Pistol_Base_F { + scope = 2; + author = ECSTRING(common,ACETeam); + displayName = "VMM3"; + descriptionShort = CSTRING(VMM3_Description); + model = QUOTE(PATHTOF(ace_wallon_vmm3.p3d)); + picture = QUOTE(PATHTOF(data\equip\w_vmm3_ca.paa)); + magazines[] = { }; + modes[] = { "Single" }; + class Single: Mode_SemiAuto { + displayName = ""; + sounds[] = {}; + begin1[] = { "", 1.77828, 1, 1000 }; + soundBegin[] = { "begin1", 1 }; + reloadTime = 0.075; + recoil = "recoil_pistol_light"; + recoilProne = "recoil_prone_pistol_light"; + dispersion = 0.001; + minRange = 2; + minRangeProbab = 0.3; + midRange = 250; + midRangeProbab = 0.7; + maxRange = 400; + maxRangeProbab = 0.05; + }; + class WeaponSlotsInfo: WeaponSlotsInfo { + holsterScale = 0; + mass = 77; + class CowsSlot {}; + class MuzzleSlot {}; + }; + }; + class ACE_VMH3: ACE_VMM3 { + scope = 2; + displayName = "VMH3"; + author = ECSTRING(common,ACETeam); + model = QUOTE(PATHTOF(ace_wallon_vmh3.p3d)); + picture = QUOTE(PATHTOF(data\equip\w_vmh3_ca.paa)); + class WeaponSlotsInfo: WeaponSlotsInfo { + mass = 55; + }; + }; +}; diff --git a/addons/minedetector/README.md b/addons/minedetector/README.md new file mode 100644 index 0000000000..5de7970013 --- /dev/null +++ b/addons/minedetector/README.md @@ -0,0 +1,11 @@ +ace_minedetector +=========== + +Add mine detectors + +## Maintainers + +The people responsible for merging changes to this component or answering potential questions. + +- [Glowbal](https://github.com/Glowbal) +- [Grey](https://github.com/Grey-Soldierman) diff --git a/addons/minedetector/XEH_PREP.hpp b/addons/minedetector/XEH_PREP.hpp new file mode 100644 index 0000000000..9fdb771723 --- /dev/null +++ b/addons/minedetector/XEH_PREP.hpp @@ -0,0 +1,13 @@ + +PREP(canActivateDetector); +PREP(canDeactivateDetector); +PREP(activateDetector); +PREP(deactivateDetector); +PREP(hasDetector); +PREP(detectorLoop); +PREP(disableDetector); +PREP(enableDetector); +PREP(getDetectedObject); +PREP(isDetectorEnabled); +PREP(playDetectorSound); +PREP(getDetectorConfig); diff --git a/addons/minedetector/XEH_clientInit.sqf b/addons/minedetector/XEH_clientInit.sqf new file mode 100644 index 0000000000..83aca7467a --- /dev/null +++ b/addons/minedetector/XEH_clientInit.sqf @@ -0,0 +1,40 @@ +#include "script_component.hpp" + + +[QGVAR(detectorEnabled), { + params ["_unit", "_type"]; + private _config = [_type] call FUNC(getDetectorConfig); + + private _helperObject = "ACE_LogicDummy" createVehicleLocal (getPos _unit); + _unit setVariable [QGVAR(helperLogic), _helperObject]; + + [FUNC(detectorLoop), 0.01, [_unit, _type, _config, CBA_missionTime, _helperObject]] call CBA_fnc_addPerFrameHandler; +}] call CBA_fnc_addEventHandler; + +[QGVAR(detectorDisabled), { + params ["_unit", "_type"]; + private _helperObject = _unit getVariable [QGVAR(helperLogic), objNull]; + if !(isNull _helperObject) then { + deleteVehicle _helperObject; + }; +}] call CBA_fnc_addEventHandler; + + + +//Shows detector and mine posistions in 3d when debug is on +#ifdef DEBUG_MODE_FULL +GVAR(debugDetector) = []; +addMissionEventHandler ["Draw3D", { + if (GVAR(debugDetector) isEqualTo []) exitWith {}; + GVAR(debugDetector) params ["_detectorPointAGL", "_mines"]; + drawIcon3D ["\A3\ui_f\data\map\markers\military\dot_CA.paa", [0,0,1,1], _detectorPointAGL, 1, 1, 0, "detector", 1, 0.02, "PuristaMedium"]; + { + _name = format ["%1@%2", typeOf _x, (floor ((_x distance _detectorPointAGL) * 10)) / 10]; + if ((getNumber (configFile >> "CfgVehicles" >> (typeOf _x) >> QGVAR(detectable))) == 1) then { + drawIcon3D ["\A3\ui_f\data\map\markers\military\dot_CA.paa", [1,0,0,1], (ASLtoAGL (getPosASL _x)), 1, 1, 0, _name, 1, 0.02, "PuristaMedium"]; + } else { + drawIcon3D ["\A3\ui_f\data\map\markers\military\dot_CA.paa", [1,1,0,1], (ASLtoAGL (getPosASL _x)), 1, 1, 0, _name, 1, 0.02, "PuristaMedium"]; + }; + } forEach _mines; +}]; +#endif diff --git a/addons/minedetector/XEH_preInit.sqf b/addons/minedetector/XEH_preInit.sqf new file mode 100644 index 0000000000..9529c201c5 --- /dev/null +++ b/addons/minedetector/XEH_preInit.sqf @@ -0,0 +1,10 @@ +#include "script_component.hpp" + +ADDON = false; + +#include "XEH_PREP.hpp" + +// TODO load from config instead of hardcoded in sqf +GVAR(ALL_DETECTABLE_TYPES) = ["ACE_Explosive_Object", "ACE_Explosive_Helper", "ACE_Explosives_Place", "ModuleMine_F", "TimeBombCore", "MineBase", "DirectionalBombBase", "BoundingMineBase", "PipeBombBase"]; + +ADDON = true; diff --git a/addons/minedetector/ace_wallon_vmh3.p3d b/addons/minedetector/ace_wallon_vmh3.p3d new file mode 100644 index 0000000000..d0fb3a0452 Binary files /dev/null and b/addons/minedetector/ace_wallon_vmh3.p3d differ diff --git a/addons/minedetector/ace_wallon_vmm3.p3d b/addons/minedetector/ace_wallon_vmm3.p3d new file mode 100644 index 0000000000..a072c9250f Binary files /dev/null and b/addons/minedetector/ace_wallon_vmm3.p3d differ diff --git a/addons/minedetector/config.cpp b/addons/minedetector/config.cpp new file mode 100644 index 0000000000..9926d08f8c --- /dev/null +++ b/addons/minedetector/config.cpp @@ -0,0 +1,22 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + name = COMPONENT_NAME; + units[] = {}; + weapons[] = {"ACE_VMH3","ACE_VMM3"}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_explosives"}; + author = ECSTRING(common,ACETeam); + authors[] = {"Grey", "Glowbal", "Rocko"}; + url = ECSTRING(main,URL); + VERSION_CONFIG; + }; +}; + +#include "CfgEventHandlers.hpp" +#include "CfgWeapons.hpp" +#include "CfgAmmo.hpp" +#include "CfgVehicles.hpp" +#include "CfgSounds.hpp" +#include "ACE_detector.hpp" diff --git a/addons/minedetector/data/ace_vmh3.rvmat b/addons/minedetector/data/ace_vmh3.rvmat new file mode 100644 index 0000000000..30836cbb49 --- /dev/null +++ b/addons/minedetector/data/ace_vmh3.rvmat @@ -0,0 +1,92 @@ +ambient[] = {1.0, 1.0, 1.0, 1.0}; +diffuse[] = {1.0, 1.0, 1.0, 1.0}; +forcedDiffuse[] = {0.0, 0.0, 0.0, 0.0}; +emmisive[] = {0.0, 0.0, 0.0, 1.0}; +specular[] = {0.93, 0.93, 0.93, 1.0}; +specularPower = 200.0; +PixelShaderID = "Super"; +VertexShaderID = "Super"; + +class Stage1 { + texture="z\ace\addons\minedetector\data\ace_vmh3_nohq.paa"; + uvSource = "tex"; + + class uvTransform { + aside[] = {1.0, 0.0, 0.0}; + up[] = {0.0, 1.0, 0.0}; + dir[] = {0.0, 0.0, 0.0}; + pos[] = {0.0, 0.0, 0.0}; + }; +}; + +class Stage2 { + texture = "a3\weapons_f\data\detailmaps\metal_detail_dt.paa"; + uvSource = "tex"; + + class uvTransform { + aside[] = {6.0, 0.0, 0.0}; + up[] = {0.0, 3.0, 0.0}; + dir[] = {0.0, 0.0, 0.0}; + pos[] = {0.0, 0.0, 0.0}; + }; +}; + +class Stage3 { + texture = "#(argb,8,8,3)color(0,0,0,0,MC)"; + uvSource = "tex"; + + class uvTransform { + aside[] = {1.0, 0.0, 0.0}; + up[] = {0.0, 1.0, 0.0}; + dir[] = {0.0, 0.0, 0.0}; + pos[] = {0.0, 0.0, 0.0}; + }; +}; + +class Stage4 { + texture = "#(argb,8,8,3)color(1,0,0,1,AS)"; + uvSource = "tex"; + + class uvTransform { + aside[] = {1.0, 0.0, 0.0}; + up[] = {0.0, 1.0, 0.0}; + dir[] = {0.0, 0.0, 0.0}; + pos[] = {0.0, 0.0, 0.0}; + }; +}; + +class Stage5 { + texture="z\ace\addons\minedetector\data\ace_vmh3_smdi.paa"; + uvSource = "tex"; + + class uvTransform { + aside[] = {1.0, 0.0, 0.0}; + up[] = {0.0, 1.0, 0.0}; + dir[] = {0.0, 0.0, 0.0}; + pos[] = {0.0, 0.0, 0.0}; + }; +}; + +class Stage6 { + texture = "#(ai,64,64,1)fresnel(1.29,0.5)"; + uvSource = "tex"; + + class uvTransform { + aside[] = {1.0, 0.0, 0.0}; + up[] = {0.0, 1.0, 0.0}; + dir[] = {0.0, 0.0, 0.0}; + pos[] = {0.0, 0.0, 0.0}; + }; +}; + +class Stage7 { + texture = "a3\data_f\env_land_co.paa"; + uvSource = "tex"; + + class uvTransform { + aside[] = {1.0, 0.0, 0.0}; + up[] = {0.0, 1.0, 0.0}; + dir[] = {0.0, 0.0, 0.0}; + pos[] = {0.0, 0.0, 0.0}; + }; +}; \ No newline at end of file diff --git a/addons/minedetector/data/ace_vmh3_co.paa b/addons/minedetector/data/ace_vmh3_co.paa new file mode 100644 index 0000000000..da4cf3ac6e Binary files /dev/null and b/addons/minedetector/data/ace_vmh3_co.paa differ diff --git a/addons/minedetector/data/ace_vmh3_nohq.paa b/addons/minedetector/data/ace_vmh3_nohq.paa new file mode 100644 index 0000000000..e58b063d7b Binary files /dev/null and b/addons/minedetector/data/ace_vmh3_nohq.paa differ diff --git a/addons/minedetector/data/ace_vmh3_smdi.paa b/addons/minedetector/data/ace_vmh3_smdi.paa new file mode 100644 index 0000000000..9cbdbedfad Binary files /dev/null and b/addons/minedetector/data/ace_vmh3_smdi.paa differ diff --git a/addons/minedetector/data/ace_vmm3.rvmat b/addons/minedetector/data/ace_vmm3.rvmat new file mode 100644 index 0000000000..e62993f4e3 --- /dev/null +++ b/addons/minedetector/data/ace_vmm3.rvmat @@ -0,0 +1,92 @@ +ambient[] = {1.0, 1.0, 1.0, 1.0}; +diffuse[] = {1.0, 1.0, 1.0, 1.0}; +forcedDiffuse[] = {0.0, 0.0, 0.0, 0.0}; +emmisive[] = {0.0, 0.0, 0.0, 1.0}; +specular[] = {0.93, 0.93, 0.93, 1.0}; +specularPower = 200.0; +PixelShaderID = "Super"; +VertexShaderID = "Super"; + +class Stage1 { + texture="z\ace\addons\minedetector\data\ace_vmm3_nohq.paa"; + uvSource = "tex"; + + class uvTransform { + aside[] = {1.0, 0.0, 0.0}; + up[] = {0.0, 1.0, 0.0}; + dir[] = {0.0, 0.0, 0.0}; + pos[] = {0.0, 0.0, 0.0}; + }; +}; + +class Stage2 { + texture = "a3\weapons_f\data\detailmaps\metal_detail_dt.paa"; + uvSource = "tex"; + + class uvTransform { + aside[] = {6.0, 0.0, 0.0}; + up[] = {0.0, 3.0, 0.0}; + dir[] = {0.0, 0.0, 0.0}; + pos[] = {0.0, 0.0, 0.0}; + }; +}; + +class Stage3 { + texture = "#(argb,8,8,3)color(0,0,0,0,MC)"; + uvSource = "tex"; + + class uvTransform { + aside[] = {1.0, 0.0, 0.0}; + up[] = {0.0, 1.0, 0.0}; + dir[] = {0.0, 0.0, 0.0}; + pos[] = {0.0, 0.0, 0.0}; + }; +}; + +class Stage4 { + texture = "#(argb,8,8,3)color(1,0,0,1,AS)"; + uvSource = "tex"; + + class uvTransform { + aside[] = {1.0, 0.0, 0.0}; + up[] = {0.0, 1.0, 0.0}; + dir[] = {0.0, 0.0, 0.0}; + pos[] = {0.0, 0.0, 0.0}; + }; +}; + +class Stage5 { + texture="z\ace\addons\minedetector\data\ace_vmm3_smdi.paa"; + uvSource = "tex"; + + class uvTransform { + aside[] = {1.0, 0.0, 0.0}; + up[] = {0.0, 1.0, 0.0}; + dir[] = {0.0, 0.0, 0.0}; + pos[] = {0.0, 0.0, 0.0}; + }; +}; + +class Stage6 { + texture = "#(ai,64,64,1)fresnel(1.29,0.5)"; + uvSource = "tex"; + + class uvTransform { + aside[] = {1.0, 0.0, 0.0}; + up[] = {0.0, 1.0, 0.0}; + dir[] = {0.0, 0.0, 0.0}; + pos[] = {0.0, 0.0, 0.0}; + }; +}; + +class Stage7 { + texture = "a3\data_f\env_land_co.paa"; + uvSource = "tex"; + + class uvTransform { + aside[] = {1.0, 0.0, 0.0}; + up[] = {0.0, 1.0, 0.0}; + dir[] = {0.0, 0.0, 0.0}; + pos[] = {0.0, 0.0, 0.0}; + }; +}; \ No newline at end of file diff --git a/addons/minedetector/data/ace_vmm3_co.paa b/addons/minedetector/data/ace_vmm3_co.paa new file mode 100644 index 0000000000..dbd9885016 Binary files /dev/null and b/addons/minedetector/data/ace_vmm3_co.paa differ diff --git a/addons/minedetector/data/ace_vmm3_nohq.paa b/addons/minedetector/data/ace_vmm3_nohq.paa new file mode 100644 index 0000000000..b4239ee8b0 Binary files /dev/null and b/addons/minedetector/data/ace_vmm3_nohq.paa differ diff --git a/addons/minedetector/data/ace_vmm3_smdi.paa b/addons/minedetector/data/ace_vmm3_smdi.paa new file mode 100644 index 0000000000..b202f5991c Binary files /dev/null and b/addons/minedetector/data/ace_vmm3_smdi.paa differ diff --git a/addons/minedetector/data/equip/w_vmh3_ca.paa b/addons/minedetector/data/equip/w_vmh3_ca.paa new file mode 100644 index 0000000000..10d79f16db Binary files /dev/null and b/addons/minedetector/data/equip/w_vmh3_ca.paa differ diff --git a/addons/minedetector/data/equip/w_vmm3_ca.paa b/addons/minedetector/data/equip/w_vmm3_ca.paa new file mode 100644 index 0000000000..8e75581652 Binary files /dev/null and b/addons/minedetector/data/equip/w_vmm3_ca.paa differ diff --git a/addons/minedetector/functions/fnc_activateDetector.sqf b/addons/minedetector/functions/fnc_activateDetector.sqf new file mode 100644 index 0000000000..f22dae1ee9 --- /dev/null +++ b/addons/minedetector/functions/fnc_activateDetector.sqf @@ -0,0 +1,21 @@ +/* + * Author: Glowbal + * Activate the mine detector + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * [] call ace_minedetector_fnc_activateDetector + * + * Public: No + */ + +#include "script_component.hpp" + +if (call FUNC(canActivateDetector)) then { + [ACE_player, currentWeapon ACE_player] call FUNC(enableDetector); +}; diff --git a/addons/minedetector/functions/fnc_canActivateDetector.sqf b/addons/minedetector/functions/fnc_canActivateDetector.sqf new file mode 100644 index 0000000000..7caf22d95c --- /dev/null +++ b/addons/minedetector/functions/fnc_canActivateDetector.sqf @@ -0,0 +1,19 @@ +/* + * Author: Glowbal + * Check if the mine detector can be activated + * + * Arguments: + * None + * + * Return Value: + * Can be activated + * + * Example: + * [] call ace_minedetector_fnc_canActivateDetector + * + * Public: No + */ + +#include "script_component.hpp" + +([ACE_player] call FUNC(hasDetector)) && !([ACE_player, currentWeapon ACE_player] call FUNC(isDetectorEnabled)); diff --git a/addons/minedetector/functions/fnc_canDeactivateDetector.sqf b/addons/minedetector/functions/fnc_canDeactivateDetector.sqf new file mode 100644 index 0000000000..3423d0685c --- /dev/null +++ b/addons/minedetector/functions/fnc_canDeactivateDetector.sqf @@ -0,0 +1,19 @@ +/* + * Author: Glowbal + * Check if the mine detector can be deactivated + * + * Arguments: + * None + * + * Return Value: + * Can be deactivated + * + * Example: + * [] call ace_minedetector_fnc_canDeactivateDetector + * + * Public: No + */ + +#include "script_component.hpp" + +([ACE_player] call FUNC(hasDetector)) && {[ACE_player, currentWeapon ACE_player] call FUNC(isDetectorEnabled)}; diff --git a/addons/minedetector/functions/fnc_deactivateDetector.sqf b/addons/minedetector/functions/fnc_deactivateDetector.sqf new file mode 100644 index 0000000000..05ce00d978 --- /dev/null +++ b/addons/minedetector/functions/fnc_deactivateDetector.sqf @@ -0,0 +1,21 @@ +/* + * Author: Glowbal + * Deactivate the mine detector + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * [] call ace_minedetector_fnc_deactivateDetector + * + * Public: No + */ + +#include "script_component.hpp" + +if (call FUNC(canDeactivateDetector)) then { + [ACE_player, currentWeapon ACE_player] call FUNC(disableDetector); +}; diff --git a/addons/minedetector/functions/fnc_detectorLoop.sqf b/addons/minedetector/functions/fnc_detectorLoop.sqf new file mode 100644 index 0000000000..4a708147e2 --- /dev/null +++ b/addons/minedetector/functions/fnc_detectorLoop.sqf @@ -0,0 +1,55 @@ +/* + * Author: Glowbal + * Handle mine detection in a PFH loop + * + * Arguments: + * 0: args + * 1: PHD Id + * + * Return Value: + * None + * + * Public: No + */ + +#include "script_component.hpp" + +params ["_args", "_idPFH"]; +_args params ["_unit", "_type", "_detectorConfig", "_lastPlayed"]; + +if !([_unit, _type] call FUNC(hasDetector)) exitWith { + // disable detector type + [_unit, _type] call FUNC(disableDetector); + [_idPFH] call CBA_fnc_removePerFrameHandler; +}; + +if (!alive _unit) exitWith { + [_unit, _type] call FUNC(disableDetector); + [_idPFH] call CBA_fnc_removePerFrameHandler; +}; + +if !([_unit, _type] call FUNC(isDetectorEnabled)) exitWith { + [_idPFH] call CBA_fnc_removePerFrameHandler; +}; + +if (ACE_player == _unit && {currentWeapon _unit == _type}) then { + private _detected = [_unit, _detectorConfig] call FUNC(getDetectedObject); + _detected params ["_hasDetected", "_object", "_distance"]; + private _distanceTiming = switch (true) do { + case (_distance >= 2): {1}; + case (_distance >= 1.25): {0.85}; + case (_distance >= 0.75): {0.7}; + default {0.5}; + }; + if (_hasDetected && {(CBA_missionTime - _lastPlayed > _distanceTiming)}) then { + _args set [3, CBA_missionTime]; + _detectorConfig params ["_type", "_radius", "_detectableTypes", "_sounds"]; + private _sound = switch (true) do { + case (_distance >= 2): {_sounds select 3}; + case (_distance >= 1.25): {_sounds select 2}; + case (_distance >= 0.5): {_sounds select 1}; + default {_sounds select 0}; + }; + [_unit, _sound, true] call FUNC(playDetectorSound); + }; +}; diff --git a/addons/minedetector/functions/fnc_disableDetector.sqf b/addons/minedetector/functions/fnc_disableDetector.sqf new file mode 100644 index 0000000000..a4e755e6c3 --- /dev/null +++ b/addons/minedetector/functions/fnc_disableDetector.sqf @@ -0,0 +1,24 @@ +/* + * Author: Glowbal + * Disables the mine detector + * + * Arguments: + * 0: Unit + * 1: detecter type + * + * Return Value: + * None + * + * Example: + * [UNIT, DETECTOR_CLASS_NAME] call ace_minedetector_fnc_disableDetector + * + * Public: No + */ + +#include "script_component.hpp" + +params ["_unit", "_detectorType"]; + +_unit setVariable [format[QGVAR(enable_%1), _detectorType], false]; + +[QGVAR(detectorDisabled), [_unit, _detectorType]] call CBA_fnc_localEvent; diff --git a/addons/minedetector/functions/fnc_enableDetector.sqf b/addons/minedetector/functions/fnc_enableDetector.sqf new file mode 100644 index 0000000000..e8440a730b --- /dev/null +++ b/addons/minedetector/functions/fnc_enableDetector.sqf @@ -0,0 +1,24 @@ +/* + * Author: Glowbal + * Enables the mine detector + * + * Arguments: + * 0: Unit + * 1: detecter type + * + * Return Value: + * None + * + * Example: + * [UNIT, DETECTOR_CLASS_NAME] call ace_minedetector_fnc_enableDetector + * + * Public: No + */ + +#include "script_component.hpp" + +params ["_unit", "_detectorType"]; + +_unit setVariable [format[QGVAR(enable_%1), _detectorType], true]; + +[QGVAR(detectorEnabled), [_unit, _detectorType]] call CBA_fnc_localEvent; diff --git a/addons/minedetector/functions/fnc_getDetectedObject.sqf b/addons/minedetector/functions/fnc_getDetectedObject.sqf new file mode 100644 index 0000000000..79c20964ca --- /dev/null +++ b/addons/minedetector/functions/fnc_getDetectedObject.sqf @@ -0,0 +1,64 @@ +/* + * Author: Glowbal + * Enables the mine detector + * + * Arguments: + * 0: Unit + * 1: Configuration + * + * Return Value: + * [isDetected , mine , distance ] + * + * Example: + * [ace_player, DETECTOR_CONFIG] call ace_minedetector_fnc_getDetectedObject + * + * Public: No + */ + +#define __DR 1.3 + +#include "script_component.hpp" + +params ["_unit", "_detectorConfig"]; +_detectorConfig params ["_type", "_radius", "_detectableTypes", "_sounds"]; + +private _worldPosition = _unit modelToWorld (_unit selectionPosition "granat"); +private _direction = _unit weaponDirection "Put"; + +private _detectorPointAGL = _worldPosition vectorAdd (_direction vectorMultiply __DR); + +private _nearestObjects = nearestObjects [_detectorPointAGL, [], _radius]; + +#ifdef DEBUG_MODE_FULL +GVAR(debugDetector) = [_detectorPointAGL, _nearestObjects]; +#endif + +private _isDetectable = false; +private _mine = objNull; +private _distance = -1; + +{ + private _object = _x; + + if ({_object isKindOf _x} count _detectableTypes > 0) then { + //Try all unprepared mines in range and use first detectable one: + if ((getNumber (configFile >> "CfgVehicles" >> (typeOf _x) >> QGVAR(detectable))) == 1) exitWith { + _isDetectable = true; + _mine = _x; + _distance = _detectorPointAGL distance _x; + }; + //Try all prepared mines in range and use first detectable one: + if ((getNumber (configFile >> "CfgAmmo" >> (typeOf _x) >> QGVAR(detectable))) == 1) exitWith { + _isDetectable = true; + _mine = _x; + _distance = _detectorPointAGL distance _x; + }; + }; + + if (!isNull _mine) exitWith {}; + +} forEach _nearestObjects; + +TRACE_3("return",_isDetectable,_mine,_distance); + +[_isDetectable, _mine, _distance]; diff --git a/addons/minedetector/functions/fnc_getDetectorConfig.sqf b/addons/minedetector/functions/fnc_getDetectorConfig.sqf new file mode 100644 index 0000000000..87b9d0a88a --- /dev/null +++ b/addons/minedetector/functions/fnc_getDetectorConfig.sqf @@ -0,0 +1,31 @@ +/* + * Author: Glowbal + * Get the mine detector configuration from the config file + * + * Arguments: + * 0: Detector class name + * + * Return Value: + * Detector configuration or empty array if invalid + * + * Example: + * ["my_detector"] call ace_minedetector_fnc_getDetectorConfig + * + * Public: No + */ + +#include "script_component.hpp" + +params ["_detectorType"]; + +private _config = (configFile >> "ACE_detector" >> "detectors" >> _detectorType); +if (isClass _config) then { + [ + _detectorType, + getNumber (_config >> "radius"), + GVAR(ALL_DETECTABLE_TYPES), // TODO read from config and use this as a back up value instead + getArray (_config >> "sounds") + ]; +} else { + []; +}; diff --git a/addons/minedetector/functions/fnc_hasDetector.sqf b/addons/minedetector/functions/fnc_hasDetector.sqf new file mode 100644 index 0000000000..fcd6eb1c19 --- /dev/null +++ b/addons/minedetector/functions/fnc_hasDetector.sqf @@ -0,0 +1,21 @@ +/* + * Author: Glowbal + * Check if unit has a mine detector in hands + * + * Arguments: + * 0: Unit + * + * Return Value: + * Current weapon is a mine detector + * + * Example: + * [ace_player] call ace_minedetector_fnc_hasDetector + * + * Public: No + */ + +#include "script_component.hpp" + +params ["_unit"]; + +!(([currentWeapon _unit] call FUNC(getDetectorConfig)) isEqualTo []); diff --git a/addons/minedetector/functions/fnc_isDetectorEnabled.sqf b/addons/minedetector/functions/fnc_isDetectorEnabled.sqf new file mode 100644 index 0000000000..9e75788794 --- /dev/null +++ b/addons/minedetector/functions/fnc_isDetectorEnabled.sqf @@ -0,0 +1,21 @@ +/* + * Author: Glowbal + * Check if the mine detector is enabled + * + * Arguments: + * 0: detecter type + * + * Return Value: + * None + * + * Example: + * ["example"] call ace_minedetector_fnc_[functionName] + * + * Public: No + */ + +#include "script_component.hpp" + +params ["_unit", "_detectorType"]; + +alive _unit && {(_unit getVariable [format[QGVAR(enable_%1), _detectorType], false])}; diff --git a/addons/minedetector/functions/fnc_playDetectorSound.sqf b/addons/minedetector/functions/fnc_playDetectorSound.sqf new file mode 100644 index 0000000000..4da6b5f45c --- /dev/null +++ b/addons/minedetector/functions/fnc_playDetectorSound.sqf @@ -0,0 +1,42 @@ +/* + * Author: Glowbal + * Play the detector sound + * + * Arguments: + * 0: Unit + * 1: Sound class name + * + * Return Value: + * None + * + * Example: + * [player, "ace_buzz_1"] call ace_minedetector_fnc_playDetectorSound + * + * Public: No + */ + +#include "script_component.hpp" + +params ["_unit", "_detectorSound"]; + +if (isNull _unit) exitWith { + ACE_LOGERROR_1("unit does not exist [%1]",_unit); +}; +if (!alive _unit) exitWith { + ACE_LOGERROR_1("unit is not alive [%1]",_unit); +}; + +private _helperObject = _unit getVariable [QGVAR(helperLogic), objNull]; +if (!isNull _helperObject) then { + deleteVehicle _helperObject; +}; +_helperObject = "ACE_LogicDummy" createVehicleLocal (getPos _unit); + +if !(isNull _helperObject) then { + _helperObject attachTo [_unit,[0,0,-3],""]; + _unit setVariable [QGVAR(helperLogic), _helperObject]; + + [_helperObject, _unit] say3D _detectorSound; +} else { + ACE_LOGERROR_1("helper does not exist [%1]",_helperObject); +}; diff --git a/addons/minedetector/functions/script_component.hpp b/addons/minedetector/functions/script_component.hpp new file mode 100644 index 0000000000..03333c8bae --- /dev/null +++ b/addons/minedetector/functions/script_component.hpp @@ -0,0 +1 @@ +#include "\z\ace\addons\minedetector\script_component.hpp" diff --git a/addons/minedetector/script_component.hpp b/addons/minedetector/script_component.hpp new file mode 100644 index 0000000000..935825a31c --- /dev/null +++ b/addons/minedetector/script_component.hpp @@ -0,0 +1,18 @@ +#define COMPONENT minedetector +#define COMPONENT_BEAUTIFIED Mine Detector +#include "\z\ace\addons\main\script_mod.hpp" + +// #define DEBUG_MODE_FULL +// #define DISABLE_COMPILE_CACHE +// #define CBA_DEBUG_SYNCHRONOUS +// #define ENABLE_PERFORMANCE_COUNTERS + +#ifdef DEBUG_ENABLED_MINEDETECTOR + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_MINEDETECTOR + #define DEBUG_SETTINGS DEBUG_SETTINGS_MINEDETECTOR +#endif + +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/minedetector/sounds/metal_detector.wav b/addons/minedetector/sounds/metal_detector.wav new file mode 100644 index 0000000000..0e4076725f Binary files /dev/null and b/addons/minedetector/sounds/metal_detector.wav differ diff --git a/addons/minedetector/stringtable.xml b/addons/minedetector/stringtable.xml new file mode 100644 index 0000000000..e78c34dab8 --- /dev/null +++ b/addons/minedetector/stringtable.xml @@ -0,0 +1,17 @@ + + + + + Metal detector + Détecteur de métaux + + + Activate Detector + Activer le détecteur + + + Deactivate Detector + Désactiver le détecteur + + + \ No newline at end of file diff --git a/addons/minedetector/ui/icon_mineDetectorOff.paa b/addons/minedetector/ui/icon_mineDetectorOff.paa new file mode 100644 index 0000000000..23e029c2f0 Binary files /dev/null and b/addons/minedetector/ui/icon_mineDetectorOff.paa differ diff --git a/addons/minedetector/ui/icon_mineDetectorOn.paa b/addons/minedetector/ui/icon_mineDetectorOn.paa new file mode 100644 index 0000000000..3c45c7b89e Binary files /dev/null and b/addons/minedetector/ui/icon_mineDetectorOn.paa differ diff --git a/addons/missileguidance/CfgAmmo.hpp b/addons/missileguidance/CfgAmmo.hpp index ad3b854334..592cf6d996 100644 --- a/addons/missileguidance/CfgAmmo.hpp +++ b/addons/missileguidance/CfgAmmo.hpp @@ -10,34 +10,34 @@ class CfgAmmo { model = "\A3\Weapons_F\Ammo\Rocket_01_fly_F"; proxyShape = "\A3\Weapons_F\Ammo\Rocket_01_F"; - irLock = 0; - laserLock = 1; - airLock = 0; - weaponLockSystem = "4 + 16"; + // Reenable this settings when ACE laser targeting and missile guidance is reenabled + //laserLock = 1; + //airLock = 0; + //irLock = 0; + //weaponLockSystem = "4 + 16"; + //fuseDistance = 2; + //timeToLive = 60; + // Turn off arma crosshair-guidance + //manualControl = 0; + // ACE uses these values + //trackOversteer = 1; + //trackLead = 0; maxSpeed = 720; maxControlRange = 5000; maneuvrability = 8; - timeToLive = 60; + simulationStep = 0.01; airFriction = 0.1; sideAirFriction = 0.16; initTime = 0.002; thrustTime = 1.07; thrust = 530; - fuseDistance = 2; effectsMissileInit = "MissileDAR1"; effectsMissile = "missile2"; whistleDist = 4; muzzleEffect = ""; - - // Turn off arma crosshair-guidance - manualControl = 0; - - // ACE uses these values - trackOversteer = 1; - trackLead = 0; }; class ACE_Hydra70_DAGR: M_PG_AT { diff --git a/addons/missileguidance/config.cpp b/addons/missileguidance/config.cpp index 81c0aedc5e..c97a542a7f 100644 --- a/addons/missileguidance/config.cpp +++ b/addons/missileguidance/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {"ACE_Comanche_Test"}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/missileguidance/functions/fnc_checkLos.sqf b/addons/missileguidance/functions/fnc_checkLos.sqf index 764769b2f2..bf9cec5777 100644 --- a/addons/missileguidance/functions/fnc_checkLos.sqf +++ b/addons/missileguidance/functions/fnc_checkLos.sqf @@ -2,11 +2,11 @@ * Author: jaynus * Returns whether the seeker object can see the target position with lineIntersect * - * Argument: + * Arguments: * 0: Seeker [Object] * 1: Target [Object] * - * Return value: + * Return Value: * Boolean */ #include "script_component.hpp" @@ -14,6 +14,8 @@ private["_seeker", "_seekerPos", "_target", "_targetPos", "_return", "_vectorTo" _seeker = _this select 0; _target = _this select 1; +if ((isNil "_seeker") || {isNil "_target"}) exitWith {false}; + _targetPos = getPosASL _target; _seekerPos = getPosASL _seeker; _return = true; diff --git a/addons/missileguidance/functions/fnc_checkSeekerAngle.sqf b/addons/missileguidance/functions/fnc_checkSeekerAngle.sqf index ff87b00e42..93cf40adfe 100644 --- a/addons/missileguidance/functions/fnc_checkSeekerAngle.sqf +++ b/addons/missileguidance/functions/fnc_checkSeekerAngle.sqf @@ -3,12 +3,12 @@ * Returns whether the target position is within the maximum angle FOV of the provided seeker * objects current direction. * - * Argument: + * Arguments: * 0: Seeker [Object] * 1: Target [Position] * 2: Max Angle [Degrees] * - * Return value: + * Return Value: * Boolean */ diff --git a/addons/missileguidance/functions/fnc_onFired.sqf b/addons/missileguidance/functions/fnc_onFired.sqf index 2a263721de..e1e966b793 100644 --- a/addons/missileguidance/functions/fnc_onFired.sqf +++ b/addons/missileguidance/functions/fnc_onFired.sqf @@ -70,6 +70,12 @@ if(isNil "_target") then { }; }; +//ToDo: Add correct configs for new apex titans (in ace_javelin) +if ((isNil "_target") && {(_weapon == "launch_B_Titan_short_tna_F") || {_weapon == "launch_O_Titan_short_ghex_F"}}) then { + ACE_LOGWARNING_1("APEX Launcher [%1] not supported - Wait for ACE 3.6.1",_weapon); + if (!isNull cursorObject) then {_target = cursorObject;}; //Attempt to give some kind of target or it will +}; + TRACE_4("Beginning ACE guidance system",_target,_ammo,_seekerType,_attackProfile); _args = [_this, [_shooter, diff --git a/addons/missileguidance/functions/fnc_seekerType_Optic.sqf b/addons/missileguidance/functions/fnc_seekerType_Optic.sqf index 8c9062fd49..c9b44b8a82 100644 --- a/addons/missileguidance/functions/fnc_seekerType_Optic.sqf +++ b/addons/missileguidance/functions/fnc_seekerType_Optic.sqf @@ -27,7 +27,7 @@ _angleOkay = [_projectile, _foundTargetPos, _angleFov] call FUNC(checkSeekerAngl _losOkay = false; if(_angleOkay) then { - _losOkay = [_projectile, _target] call FUNC(checkSeekerLos); //Note: Func does not exist? probably FUNC(checkLos)?? + _losOkay = [_projectile, _target] call FUNC(checkLos); }; TRACE_2("", _angleOkay, _losOkay); @@ -36,16 +36,17 @@ if(!_angleOkay || !_losOkay) then { _foundTargetPos = _sensorPos vectorAdd ((velocity _projectile) vectorMultiply 5); } else { TRACE_2("", _target, _foundTargetPos); - private["_projectileSpeed", "_distanceToTarget", "_eta", "_adjustVelocity"]; + private["_projectileSpeed", "_distanceToTarget", "_eta", "_adjustDistance"]; // @TODO: Configurable lead for seekers _projectileSpeed = (vectorMagnitude velocity _projectile); _distanceToTarget = (getPosASL _projectile) vectorDistance _foundTargetPos; _eta = _distanceToTarget / _projectileSpeed; - _adjustVelocity = (velocity _target) vectorMultiply _eta; - _foundTargetPos = _foundTargetPos vectorAdd _adjustVelocity; + _adjustDistance = (velocity _target) vectorMultiply _eta; + TRACE_3("leading target",_distanceToTarget,_eta,_adjustDistance); + _foundTargetPos = _foundTargetPos vectorAdd _adjustDistance; }; - +TRACE_2("return",_foundTargetPos,(aimPos _target) distance _foundTargetPos); _foundTargetPos; diff --git a/addons/missileguidance/script_component.hpp b/addons/missileguidance/script_component.hpp index b7a1eafbbc..beac3e318d 100644 --- a/addons/missileguidance/script_component.hpp +++ b/addons/missileguidance/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT missileguidance +#define COMPONENT_BEAUTIFIED Missile Guidance #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL @@ -16,4 +17,4 @@ #include "\z\ace\addons\main\script_macros.hpp" -#define FIREMODE_DIRECT_LOAL 1 \ No newline at end of file +#define FIREMODE_DIRECT_LOAL 1 diff --git a/addons/missionmodules/config.cpp b/addons/missionmodules/config.cpp index 2f58f5c42f..3a92c65ebc 100644 --- a/addons/missionmodules/config.cpp +++ b/addons/missionmodules/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/missionmodules/script_component.hpp b/addons/missionmodules/script_component.hpp index 8146b5cb8a..d1fdd10580 100644 --- a/addons/missionmodules/script_component.hpp +++ b/addons/missionmodules/script_component.hpp @@ -1,4 +1,5 @@ -#define COMPONENT missionModules +#define COMPONENT missionmodules +#define COMPONENT_BEAUTIFIED Mission Modules #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL @@ -14,4 +15,4 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_MISSIONMODULES #endif -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/mk6mortar/XEH_postInit.sqf b/addons/mk6mortar/XEH_postInit.sqf index 594b0cc231..aceb721d70 100644 --- a/addons/mk6mortar/XEH_postInit.sqf +++ b/addons/mk6mortar/XEH_postInit.sqf @@ -19,5 +19,5 @@ if (!hasInterface) exitWith {}; -["ace_playerVehicleChanged", FUNC(handlePlayerVehicleChanged)] call CBA_fnc_addEventHandler; +["vehicle", FUNC(handlePlayerVehicleChanged)] call CBA_fnc_addPlayerEventHandler; ["ace_infoDisplayChanged", FUNC(turretDisplayLoaded)] call CBA_fnc_addEventHandler; diff --git a/addons/mk6mortar/config.cpp b/addons/mk6mortar/config.cpp index 929f28b4d5..a63f7086f9 100644 --- a/addons/mk6mortar/config.cpp +++ b/addons/mk6mortar/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {"ACE_Box_82mm_Mo_HE","ACE_Box_82mm_Mo_Smoke", "ACE_Box_82mm_Mo_Illum","ACE_Box_82mm_Mo_Combo"}; weapons[] = {"ACE_RangeTable_82mm","ace_mortar_82mm"}; diff --git a/addons/mk6mortar/script_component.hpp b/addons/mk6mortar/script_component.hpp index 97e1c8b50a..d7f0b92cee 100644 --- a/addons/mk6mortar/script_component.hpp +++ b/addons/mk6mortar/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT mk6mortar +#define COMPONENT_BEAUTIFIED Mk6 Mortar #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL @@ -16,4 +17,4 @@ #include "\z\ace\addons\main\script_macros.hpp" -#define MK6_82mm_AIR_FRICTION -0.0001 \ No newline at end of file +#define MK6_82mm_AIR_FRICTION -0.0001 diff --git a/addons/modules/config.cpp b/addons/modules/config.cpp index 543bbe2551..662b1cb349 100644 --- a/addons/modules/config.cpp +++ b/addons/modules/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/modules/script_component.hpp b/addons/modules/script_component.hpp index 4e4e64e8e3..0ba8e441e8 100644 --- a/addons/modules/script_component.hpp +++ b/addons/modules/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT modules +#define COMPONENT_BEAUTIFIED Modules #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/movement/XEH_postInit.sqf b/addons/movement/XEH_postInit.sqf index b0db0d3681..f64b92603b 100644 --- a/addons/movement/XEH_postInit.sqf +++ b/addons/movement/XEH_postInit.sqf @@ -3,8 +3,8 @@ if (!hasInterface) exitWith {}; -["ace_playerChanged", FUNC(handleVirtualMass)] call CBA_fnc_addEventHandler; -["ace_playerInventoryChanged", FUNC(handleVirtualMass)] call CBA_fnc_addEventHandler; +["unit", FUNC(handleVirtualMass)] call CBA_fnc_addPlayerEventHandler; +["loadout", FUNC(handleVirtualMass)] call CBA_fnc_addPlayerEventHandler; ["ACE3 Movement", QGVAR(climb), localize LSTRING(Climb), { // Conditions: canInteract diff --git a/addons/movement/config.cpp b/addons/movement/config.cpp index 247d686978..14a3b8f68d 100644 --- a/addons/movement/config.cpp +++ b/addons/movement/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/movement/script_component.hpp b/addons/movement/script_component.hpp index 14728cbcbb..f64f10fdd4 100644 --- a/addons/movement/script_component.hpp +++ b/addons/movement/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT movement +#define COMPONENT_BEAUTIFIED Movement #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/mx2a/config.cpp b/addons/mx2a/config.cpp index c59dc43dd3..3892b9bb99 100644 --- a/addons/mx2a/config.cpp +++ b/addons/mx2a/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {"ACE_Item_MX2A"}; weapons[] = {"ACE_MX2A"}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/mx2a/script_component.hpp b/addons/mx2a/script_component.hpp index 9b36572497..c2fc0e12e6 100644 --- a/addons/mx2a/script_component.hpp +++ b/addons/mx2a/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT mx2a +#define COMPONENT_BEAUTIFIED MX-2A #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL @@ -14,4 +15,4 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_MX2A #endif -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/nametags/UI/icons_russia/captain_gs.paa b/addons/nametags/UI/icons_russia/captain_gs.paa new file mode 100644 index 0000000000..e346178118 Binary files /dev/null and b/addons/nametags/UI/icons_russia/captain_gs.paa differ diff --git a/addons/nametags/UI/icons_russia/colonel_gs.paa b/addons/nametags/UI/icons_russia/colonel_gs.paa new file mode 100644 index 0000000000..55023e5034 Binary files /dev/null and b/addons/nametags/UI/icons_russia/colonel_gs.paa differ diff --git a/addons/nametags/UI/icons_russia/corporal_gs.paa b/addons/nametags/UI/icons_russia/corporal_gs.paa new file mode 100644 index 0000000000..7e1ec60e95 Binary files /dev/null and b/addons/nametags/UI/icons_russia/corporal_gs.paa differ diff --git a/addons/nametags/UI/icons_russia/lieutenant_gs.paa b/addons/nametags/UI/icons_russia/lieutenant_gs.paa new file mode 100644 index 0000000000..8ca42e4040 Binary files /dev/null and b/addons/nametags/UI/icons_russia/lieutenant_gs.paa differ diff --git a/addons/nametags/UI/icons_russia/major_gs.paa b/addons/nametags/UI/icons_russia/major_gs.paa new file mode 100644 index 0000000000..92343ae3a9 Binary files /dev/null and b/addons/nametags/UI/icons_russia/major_gs.paa differ diff --git a/addons/nametags/UI/icons_russia/private_gs.paa b/addons/nametags/UI/icons_russia/private_gs.paa new file mode 100644 index 0000000000..8509568254 Binary files /dev/null and b/addons/nametags/UI/icons_russia/private_gs.paa differ diff --git a/addons/nametags/UI/icons_russia/sergeant_gs.paa b/addons/nametags/UI/icons_russia/sergeant_gs.paa new file mode 100644 index 0000000000..f00db77656 Binary files /dev/null and b/addons/nametags/UI/icons_russia/sergeant_gs.paa differ diff --git a/addons/nametags/XEH_PREP.hpp b/addons/nametags/XEH_PREP.hpp index 93a8ff6626..5d99258d27 100644 --- a/addons/nametags/XEH_PREP.hpp +++ b/addons/nametags/XEH_PREP.hpp @@ -8,3 +8,4 @@ PREP(moduleNameTags); PREP(onDraw3d); PREP(setText); PREP(updateSettings); +PREP(setFactionRankIcons); diff --git a/addons/nametags/config.cpp b/addons/nametags/config.cpp index b02dfa9297..0f491efce1 100644 --- a/addons/nametags/config.cpp +++ b/addons/nametags/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/nametags/functions/fnc_drawNameTagIcon.sqf b/addons/nametags/functions/fnc_drawNameTagIcon.sqf index 3d26b72ebf..bfe065cf30 100644 --- a/addons/nametags/functions/fnc_drawNameTagIcon.sqf +++ b/addons/nametags/functions/fnc_drawNameTagIcon.sqf @@ -11,7 +11,7 @@ * 5: Draw rank * 6: Draw soundwave * - * Return value: + * Return Value: * None * * Example: @@ -37,7 +37,12 @@ _fnc_parameters = { _size = 1; } else { if (_drawRank && {rank _target != ""}) then { - _icon = format["\A3\Ui_f\data\GUI\Cfg\Ranks\%1_gs.paa", toLower rank _target]; + _icon = GVAR(factionRanks) getVariable (_target getVariable [QGVAR(faction), faction _target]); + if (!isNil "_icon") then { + _icon = _icon param [ALL_RANKS find rank _target, ""]; + } else { + _icon = format ["\A3\Ui_f\data\GUI\Cfg\Ranks\%1_gs.paa", rank _target]; + }; _size = 1; }; }; diff --git a/addons/nametags/functions/fnc_initIsSpeaking.sqf b/addons/nametags/functions/fnc_initIsSpeaking.sqf index 1e6484c7fa..08a72e57b3 100644 --- a/addons/nametags/functions/fnc_initIsSpeaking.sqf +++ b/addons/nametags/functions/fnc_initIsSpeaking.sqf @@ -28,14 +28,13 @@ if (isServer) then { if (!hasInterface) exitWith {}; -["ace_playerChanged", { +["unit", { //When player changes, make sure to reset old unit's variable params ["", "_oldUnit"]; if ((!isNull _oldUnit) && {_oldUnit getVariable [QGVAR(isSpeakingInGame), false]}) then { _oldUnit setVariable [QGVAR(isSpeakingInGame), false, true]; }; -}] call CBA_fnc_addEventHandler; - +}] call CBA_fnc_addPlayerEventHandler; if (isClass (configFile >> "CfgPatches" >> "acre_api")) then { ACE_LOGINFO("ACRE Detected."); diff --git a/addons/nametags/functions/fnc_setFactionRankIcons.sqf b/addons/nametags/functions/fnc_setFactionRankIcons.sqf new file mode 100644 index 0000000000..c0a315636b --- /dev/null +++ b/addons/nametags/functions/fnc_setFactionRankIcons.sqf @@ -0,0 +1,37 @@ +/* + * Author: commy2 + * Sets a custom set of icons for a specified faction. + * + * Arguments: + * 0: Faction + * 1: Rank Icons + * + * Return Value: + * Successful? + * + * Example: + * ["BLU_F", [ + * "\A3\Ui_f\data\GUI\Cfg\Ranks\private_gs.paa", + * "\A3\Ui_f\data\GUI\Cfg\Ranks\corporal_gs.paa", + * "\A3\Ui_f\data\GUI\Cfg\Ranks\sergeant_gs.paa", + * "\A3\Ui_f\data\GUI\Cfg\Ranks\lieutenant_gs.paa", + * "\A3\Ui_f\data\GUI\Cfg\Ranks\captain_gs.paa", + * "\A3\Ui_f\data\GUI\Cfg\Ranks\major_gs.paa", + * "\A3\Ui_f\data\GUI\Cfg\Ranks\colonel_gs.paa" + * ]] call ace_nametags_fnc_setFactionRankIcons + * + * Public: Yes + */ +#include "script_component.hpp" + +if (isNil QGVAR(factionRanks)) then { + GVAR(factionRanks) = [] call CBA_fnc_createNamespace; +}; + +params [["_faction", "", [""]], ["_icons", [], [[]], [7]]]; + +if !(_faction != "" && {_icons isEqualTypeAll ""}) exitWith {false}; + +GVAR(factionRanks) setVariable [_faction, _icons]; + +true diff --git a/addons/nametags/script_component.hpp b/addons/nametags/script_component.hpp index 5b777aee71..fff9a31de3 100644 --- a/addons/nametags/script_component.hpp +++ b/addons/nametags/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT nametags +#define COMPONENT_BEAUTIFIED Name Tags #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL @@ -21,3 +22,5 @@ #define ICON_NAME_RANK 2 #define ICON_NAME_SPEAK 3 #define ICON_SPEAK 4 + +#define ALL_RANKS ["PRIVATE", "CORPORAL", "SERGEANT", "LIEUTENANT", "CAPTAIN", "MAJOR", "COLONEL"] diff --git a/addons/nightvision/XEH_postInitClient.sqf b/addons/nightvision/XEH_postInitClient.sqf index 186412cdde..de0b629d76 100644 --- a/addons/nightvision/XEH_postInitClient.sqf +++ b/addons/nightvision/XEH_postInitClient.sqf @@ -29,22 +29,16 @@ GVAR(ppEffectMuzzleFlash) ppEffectAdjust [1, 1, 0, [0, 0, 0, 0], [0, 0, 0, 1], [ GVAR(ppEffectMuzzleFlash) ppEffectCommit 0; // Setup the event handlers -["ace_playerInventoryChanged", FUNC(updatePPEffects)] call CBA_fnc_addEventHandler; -["ace_playerVisionModeChanged", { - _this call FUNC(updatePPEffects); - _this call FUNC(onVisionModeChanged); -}] call CBA_fnc_addEventHandler; - -["ace_cameraViewChanged", { - _this call FUNC(updatePPEffects); - _this call FUNC(onCameraViewChanged); -}] call CBA_fnc_addEventHandler; -["ace_playerVehicleChanged", {_this call FUNC(updatePPEffects)}] call CBA_fnc_addEventHandler; -["ace_playerTurretChanged", {_this call FUNC(updatePPEffects)}] call CBA_fnc_addEventHandler; +["loadout", FUNC(updatePPEffects)] call CBA_fnc_addPlayerEventHandler; +["visionMode", FUNC(updatePPEffects)] call CBA_fnc_addPlayerEventHandler; +["visionMode", FUNC(onVisionModeChanged)] call CBA_fnc_addPlayerEventHandler; +["cameraView", FUNC(updatePPEffects)] call CBA_fnc_addPlayerEventHandler; +["cameraView", FUNC(onCameraViewChanged)] call CBA_fnc_addPlayerEventHandler; +["vehicle", FUNC(updatePPEffects)] call CBA_fnc_addPlayerEventHandler; +["turret", FUNC(updatePPEffects)] call CBA_fnc_addPlayerEventHandler; // Add keybinds -["ACE3 Equipment", QGVAR(IncreaseNVGBrightness), localize LSTRING(IncreaseNVGBrightness), -{ +["ACE3 Equipment", QGVAR(IncreaseNVGBrightness), localize LSTRING(IncreaseNVGBrightness), { // Conditions: canInteract if !([ACE_player, objNull, ["isNotEscorting", "isNotInside", "isNotSitting"]] call EFUNC(common,canInteractWith)) exitWith {false}; // Conditions: specific @@ -53,12 +47,9 @@ GVAR(ppEffectMuzzleFlash) ppEffectCommit 0; // Statement [ACE_player, 1] call FUNC(changeNVGBrightness); true -}, -{false}, -[201, [false, false, true]], false] call CBA_fnc_addKeybind; //PageUp + ALT +}, {false}, [201, [false, false, true]], false] call CBA_fnc_addKeybind; //PageUp + ALT -["ACE3 Equipment", QGVAR(DecreaseNVGBrightness), localize LSTRING(DecreaseNVGBrightness), -{ +["ACE3 Equipment", QGVAR(DecreaseNVGBrightness), localize LSTRING(DecreaseNVGBrightness), { // Conditions: canInteract if !([ACE_player, objNull, ["isNotEscorting", "isNotInside", "isNotSitting"]] call EFUNC(common,canInteractWith)) exitWith {false}; // Conditions: specific @@ -67,9 +58,7 @@ GVAR(ppEffectMuzzleFlash) ppEffectCommit 0; // Statement [ACE_player, -1] call FUNC(changeNVGBrightness); true -}, -{false}, -[209, [false, false, true]], false] call CBA_fnc_addKeybind; //PageDown + ALT +}, {false}, [209, [false, false, true]], false] call CBA_fnc_addKeybind; //PageDown + ALT // Register fire event handler ["ace_firedPlayer", DFUNC(blending)] call CBA_fnc_addEventHandler; diff --git a/addons/nightvision/config.cpp b/addons/nightvision/config.cpp index 9397740e61..673a7d31c0 100644 --- a/addons/nightvision/config.cpp +++ b/addons/nightvision/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {"ACE_NVG_Gen1", "ACE_NVG_Gen2", /*"ACE_NVG_Gen3",*/ "ACE_NVG_Gen4", "ACE_NVG_Wide"}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/nightvision/script_component.hpp b/addons/nightvision/script_component.hpp index ffe3ba3ff5..32ded9ac5a 100644 --- a/addons/nightvision/script_component.hpp +++ b/addons/nightvision/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT nightvision +#define COMPONENT_BEAUTIFIED Night Vision #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL @@ -14,4 +15,4 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_NIGHTVISION #endif -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/noidle/config.cpp b/addons/noidle/config.cpp index b0792486f7..961d84d81a 100644 --- a/addons/noidle/config.cpp +++ b/addons/noidle/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/noidle/script_component.hpp b/addons/noidle/script_component.hpp index bf20a9a420..4931efb771 100644 --- a/addons/noidle/script_component.hpp +++ b/addons/noidle/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT noidle +#define COMPONENT_BEAUTIFIED No Idle #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL @@ -14,4 +15,4 @@ #define DEBUG_SETTINGS DEBUG_ENABLED_NOIDLE #endif -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/noradio/XEH_postInit.sqf b/addons/noradio/XEH_postInit.sqf index 1606c674a9..e3b98f1a3a 100644 --- a/addons/noradio/XEH_postInit.sqf +++ b/addons/noradio/XEH_postInit.sqf @@ -11,7 +11,7 @@ if (isServer) then { if (!hasInterface) exitWith {}; // mutes/unmutes units when the player changes -["ace_playerChanged", { +["unit", { params ["_newPlayer", "_oldPlayer"]; // mute the new player @@ -21,4 +21,4 @@ if (!hasInterface) exitWith {}; if (alive _oldPlayer) then { [_oldPlayer, "isPlayer"] call EFUNC(common,unmuteUnit); }; -}] call CBA_fnc_addEventHandler; +}] call CBA_fnc_addPlayerEventHandler; diff --git a/addons/noradio/config.cpp b/addons/noradio/config.cpp index 0781a4a15e..a4a390caac 100644 --- a/addons/noradio/config.cpp +++ b/addons/noradio/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/noradio/script_component.hpp b/addons/noradio/script_component.hpp index 0a60edb063..d55efd222b 100644 --- a/addons/noradio/script_component.hpp +++ b/addons/noradio/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT noradio +#define COMPONENT_BEAUTIFIED No Radio #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/norearm/config.cpp b/addons/norearm/config.cpp index 2b670e0db1..269b763d7a 100644 --- a/addons/norearm/config.cpp +++ b/addons/norearm/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/norearm/script_component.hpp b/addons/norearm/script_component.hpp index 3f09149587..f5b481fe0d 100644 --- a/addons/norearm/script_component.hpp +++ b/addons/norearm/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT norearm +#define COMPONENT_BEAUTIFIED No Rearm #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL @@ -14,4 +15,4 @@ #define DEBUG_SETTINGS DEBUG_ENABLED_NOREARM #endif -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/optics/config.cpp b/addons/optics/config.cpp index c63049356c..c1524320c7 100644 --- a/addons/optics/config.cpp +++ b/addons/optics/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = { "ACE_optic_Hamr_2D", diff --git a/addons/optics/script_component.hpp b/addons/optics/script_component.hpp index ca0176360c..428017bda8 100644 --- a/addons/optics/script_component.hpp +++ b/addons/optics/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT optics +#define COMPONENT_BEAUTIFIED Optics #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/optionsmenu/config.cpp b/addons/optionsmenu/config.cpp index 0e564535b9..a239e55498 100644 --- a/addons/optionsmenu/config.cpp +++ b/addons/optionsmenu/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {"ACE_moduleAllowConfigExport"}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/optionsmenu/script_component.hpp b/addons/optionsmenu/script_component.hpp index b257b0a5ba..2bb7482252 100644 --- a/addons/optionsmenu/script_component.hpp +++ b/addons/optionsmenu/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT optionsmenu +#define COMPONENT_BEAUTIFIED Options Menu // #define DEBUG_MODE_FULL // #define DISABLE_COMPILE_CACHE diff --git a/addons/overheating/XEH_postInit.sqf b/addons/overheating/XEH_postInit.sqf index f5a162e075..bc3dfad795 100644 --- a/addons/overheating/XEH_postInit.sqf +++ b/addons/overheating/XEH_postInit.sqf @@ -35,8 +35,8 @@ if (hasInterface) then { GVAR(storedSpareBarrels) = [] call CBA_fnc_hashCreate; // Install event handlers for spare barrels - [QGVAR(spareBarrelsSendTemperatureHint), FUNC(sendSpareBarrelsTemperaturesHint)] call CBA_fnc_addEventHandler; - [QGVAR(spareBarrelsLoadCoolest), FUNC(loadCoolestSpareBarrel)] call CBA_fnc_addEventHandler; + [QGVAR(sendSpareBarrelTemperatureHint), FUNC(sendSpareBarrelsTemperaturesHint)] call CBA_fnc_addEventHandler; + [QGVAR(loadCoolestSpareBarrel), FUNC(loadCoolestSpareBarrel)] call CBA_fnc_addEventHandler; // Schedule cool down calculation of stored spare barrels [] call FUNC(updateSpareBarrelsTemperaturesThread); @@ -60,7 +60,7 @@ if (hasInterface) then { // Schedule cool down calculation of player weapons at (infrequent) regular intervals [] call FUNC(updateTemperatureThread); - + // Install event handler to display temp when a barrel was swapped [QGVAR(showWeaponTemperature), DFUNC(displayTemperature)] call CBA_fnc_addEventHandler; // Install event handler to initiate an assisted barrel swap diff --git a/addons/overheating/config.cpp b/addons/overheating/config.cpp index 576ee1e190..1d8e2d3755 100644 --- a/addons/overheating/config.cpp +++ b/addons/overheating/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {"ACE_SpareBarrel"}; requiredVersion = REQUIRED_VERSION; @@ -54,7 +55,7 @@ class CfgGesturesMale { class ACE_newEvents { initiateSwapBarrelAssisted = QGVAR(initiateSwapBarrelAssisted); showWeaponTemperature = QGVAR(showWeaponTemperature); - spareBarrelsLoadCoolest = QGVAR(spareBarrelsLoadCoolest); - spareBarrelsSendTemperatureHint = QGVAR(spareBarrelsSendTemperatureHint); + loadCoolestSpareBarrel = QGVAR(loadCoolestSpareBarrel); + sendSpareBarrelTemperatureHint = QGVAR(sendSpareBarrelTemperatureHint); weaponJammed = "ace_weaponJammed"; }; diff --git a/addons/overheating/functions/fnc_calculateCooling.sqf b/addons/overheating/functions/fnc_calculateCooling.sqf index 955c41441e..ced682d6d7 100644 --- a/addons/overheating/functions/fnc_calculateCooling.sqf +++ b/addons/overheating/functions/fnc_calculateCooling.sqf @@ -2,12 +2,12 @@ * Author: esteldunedain * Calculate the cooling down of a weapon over a time interval. * - * Argument: + * Arguments: * 0: Initial temperature * 1: Barrel mass * 2: Time interval * - * Return value: + * Return Value: * Final temperature * * Example: diff --git a/addons/overheating/functions/fnc_checkSpareBarrelsTemperatures.sqf b/addons/overheating/functions/fnc_checkSpareBarrelsTemperatures.sqf index be2e1ae1a5..8a634409ee 100644 --- a/addons/overheating/functions/fnc_checkSpareBarrelsTemperatures.sqf +++ b/addons/overheating/functions/fnc_checkSpareBarrelsTemperatures.sqf @@ -29,7 +29,7 @@ if (!([_player, objNull, ["isNotInside", "isNotSitting"]] call EFUNC(common,canI params ["_args", "_elapsedTime", "_totalTime", "_errorCode"]; _args params ["_player"]; // Time has enlapsed, ask the server to send the hint - [QGVAR(spareBarrelsSendTemperatureHint), [_player, _player]] call CBA_fnc_serverEvent; + [QGVAR(sendSpareBarrelTemperatureHint), [_player, _player]] call CBA_fnc_serverEvent; }, {}, (localize LSTRING(CheckingSpareBarrelsTemperatures)), diff --git a/addons/overheating/functions/fnc_firedEH.sqf b/addons/overheating/functions/fnc_firedEH.sqf index 5bd725b74d..e392190bb0 100644 --- a/addons/overheating/functions/fnc_firedEH.sqf +++ b/addons/overheating/functions/fnc_firedEH.sqf @@ -2,10 +2,10 @@ * Author: Commy2 and esteldunedain * Handle weapon fire. Called from the unified fired EH 1- always for the local player 2- and for non local players if dispersion is simulated. * - * Argument: + * Arguments: * None. Parameters inherited from EFUNC(common,firedEH) * - * Return value: + * Return Value: * None * * Public: No diff --git a/addons/overheating/functions/fnc_getWeaponData.sqf b/addons/overheating/functions/fnc_getWeaponData.sqf index e7da350e91..b1525f0f41 100644 --- a/addons/overheating/functions/fnc_getWeaponData.sqf +++ b/addons/overheating/functions/fnc_getWeaponData.sqf @@ -2,10 +2,10 @@ * Author: PabstMirror and esteldunedain * Get weapon data with caching * - * Argument: + * Arguments: * 0: weapon type * - * Return value: + * Return Value: * 0: dispresion * 1: slowdownFactor * 2: jamChance diff --git a/addons/overheating/functions/fnc_handleTakeEH.sqf b/addons/overheating/functions/fnc_handleTakeEH.sqf index ffcead342f..b4eecbf236 100644 --- a/addons/overheating/functions/fnc_handleTakeEH.sqf +++ b/addons/overheating/functions/fnc_handleTakeEH.sqf @@ -3,12 +3,12 @@ * Handle "take" event * I think it fixs jams when manually dragging a new magazine in from player's inventory * - * Argument: + * Arguments: * 0: unit - Object the event handler is assigned to * 1: container * 2: item * - * Return value: + * Return Value: * None * * Public: No diff --git a/addons/overheating/functions/fnc_jamWeapon.sqf b/addons/overheating/functions/fnc_jamWeapon.sqf index f41262c4e9..02966d0067 100644 --- a/addons/overheating/functions/fnc_jamWeapon.sqf +++ b/addons/overheating/functions/fnc_jamWeapon.sqf @@ -2,11 +2,11 @@ * Author: Commy2, based on KK_fnc_playerWeaponMulfunction from KillzoneKid * Jam the weapon * - * Argument: + * Arguments: * 0: Unit * 1: Weapon * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf b/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf index 098ad70fcc..d6a9ccfe37 100644 --- a/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf +++ b/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf @@ -3,14 +3,14 @@ * Collect the temperature of all the spare barrels a unit has and load the * coolest on the unit weapon. Runs on the server. * - * Argument: + * Arguments: * 0: Unit that has the spare barrels * 1: Unit that has the weapon * 2: Weapon * 3: Weapon temp before switching * 4: Mass of the removed barrel * - * Return value: + * Return Value: * None * * diff --git a/addons/overheating/functions/fnc_overheat.sqf b/addons/overheating/functions/fnc_overheat.sqf index 57a4bd7cba..84ab7e152f 100644 --- a/addons/overheating/functions/fnc_overheat.sqf +++ b/addons/overheating/functions/fnc_overheat.sqf @@ -2,7 +2,7 @@ * Author: Commy2 and esteldunedain * Handle weapon fire, heat up the weapon * - * Argument: + * Arguments: * 0: Unit * 1: Weapon * 3: Muzzle @@ -10,7 +10,7 @@ * 5: Magazine * 6: Projectile * - * Return value: + * Return Value: * None * * Public: No diff --git a/addons/overheating/functions/fnc_sendSpareBarrelsTemperaturesHint.sqf b/addons/overheating/functions/fnc_sendSpareBarrelsTemperaturesHint.sqf index f377d0ba12..8bca16c589 100644 --- a/addons/overheating/functions/fnc_sendSpareBarrelsTemperaturesHint.sqf +++ b/addons/overheating/functions/fnc_sendSpareBarrelsTemperaturesHint.sqf @@ -3,11 +3,11 @@ * Collect the temperature of all the spare barrels a unit has and send a hint * to a client. Runs on the server. * - * Argument: + * Arguments: * 0: Target unit of the hint * 1: Unit that has the spare barrels * - * Return value: + * Return Value: * None * * diff --git a/addons/overheating/functions/fnc_swapBarrel.sqf b/addons/overheating/functions/fnc_swapBarrel.sqf index a63ef5a36a..b904936403 100644 --- a/addons/overheating/functions/fnc_swapBarrel.sqf +++ b/addons/overheating/functions/fnc_swapBarrel.sqf @@ -2,12 +2,12 @@ * Author: Commy2 * Make a unit start swapping it's barrel * - * Argument: + * Arguments: * 0: Unit initiating the action * 1: Unit that has the weapon * 2: Weapon * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/overheating/functions/fnc_swapBarrelAssistant.sqf b/addons/overheating/functions/fnc_swapBarrelAssistant.sqf index dd6d51d109..2a98e0fa8b 100644 --- a/addons/overheating/functions/fnc_swapBarrelAssistant.sqf +++ b/addons/overheating/functions/fnc_swapBarrelAssistant.sqf @@ -2,12 +2,12 @@ * Author: esteldunedain, Commy2 * Make a unit start swapping the barrel of another unit * - * Argument: + * Arguments: * 0: Unit initiating the action * 1: Unit that has the weapon * 2: Weapon * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/overheating/functions/fnc_swapBarrelCallback.sqf b/addons/overheating/functions/fnc_swapBarrelCallback.sqf index a136828b70..b2d559d1e2 100644 --- a/addons/overheating/functions/fnc_swapBarrelCallback.sqf +++ b/addons/overheating/functions/fnc_swapBarrelCallback.sqf @@ -2,12 +2,12 @@ * Author: Commy2, esteldunedain * Swap barrel callback * - * Argument: + * Arguments: * 0: Unit initiating the action * 1: Unit that has the weapon * 2: Weapon * - * Return value: + * Return Value: * None * * Example: @@ -37,7 +37,7 @@ private _barrelMass = 0.50 * (getNumber (configFile >> "CfgWeapons" >> _weapon > // store the removed barrel with the former weapon temperature. The server // also updates the current weapon temperature to match that of the new // loaded barrel. -[QGVAR(spareBarrelsLoadCoolest), [_assistant, _gunner, _weapon, _temp, _barrelMass]] call CBA_fnc_serverEvent; +[QGVAR(loadCoolestSpareBarrel), [_assistant, _gunner, _weapon, _temp, _barrelMass]] call CBA_fnc_serverEvent; // Store the update time _gunner setVariable [format [QGVAR(%1_time), _weapon], CBA_missionTime]; diff --git a/addons/overheating/functions/fnc_updateSpareBarrelsTemperaturesThread.sqf b/addons/overheating/functions/fnc_updateSpareBarrelsTemperaturesThread.sqf index 602de01c3b..0bb240533c 100644 --- a/addons/overheating/functions/fnc_updateSpareBarrelsTemperaturesThread.sqf +++ b/addons/overheating/functions/fnc_updateSpareBarrelsTemperaturesThread.sqf @@ -2,10 +2,10 @@ * Author: esteldunedain * Calculate cooldown of all the stored spare barrels. * - * Argument: + * Arguments: * None * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/overheating/functions/fnc_updateTemperature.sqf b/addons/overheating/functions/fnc_updateTemperature.sqf index d5e29a150b..51b4b13ae3 100644 --- a/addons/overheating/functions/fnc_updateTemperature.sqf +++ b/addons/overheating/functions/fnc_updateTemperature.sqf @@ -2,12 +2,12 @@ * Author: esteldunedain * Update temperature of a weapon. * - * Argument: + * Arguments: * 0: Unit * 1: Weapon * 2: Heat increment (J) * - * Return value: + * Return Value: * Current temperature * * Example: diff --git a/addons/overheating/functions/fnc_updateTemperatureThread.sqf b/addons/overheating/functions/fnc_updateTemperatureThread.sqf index 476ff3e352..1d1574b1ed 100644 --- a/addons/overheating/functions/fnc_updateTemperatureThread.sqf +++ b/addons/overheating/functions/fnc_updateTemperatureThread.sqf @@ -2,10 +2,10 @@ * Author: esteldunedain * Update cooldown calculation of all player weapons at regular intervals. * - * Argument: + * Arguments: * None * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/overheating/script_component.hpp b/addons/overheating/script_component.hpp index 262accc43b..6d2db895aa 100644 --- a/addons/overheating/script_component.hpp +++ b/addons/overheating/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT overheating +#define COMPONENT_BEAUTIFIED Overheating #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/overheating/stringtable.xml b/addons/overheating/stringtable.xml index 07fdedd681..7fd24bb39a 100644 --- a/addons/overheating/stringtable.xml +++ b/addons/overheating/stringtable.xml @@ -126,7 +126,7 @@ Cañón de repuesto Zapasowa lufa Náhradní hlaveň - Deuxième canon + Canon de rechange Запасной ствол Tartalék cső Cano Reserva @@ -265,10 +265,12 @@ Check spare barrels temperatures Verifica temperatura de canos reservas + Vérifier la température des canons de rechange Checking spare barrels temperatures... Verificando temperatura de canos reservas + Vérification de la température des canons de rechange... Temperature @@ -285,32 +287,39 @@ Cool Spare Barrel/s Cano/s reserva/s frio/s + Canon(s) de rechange froid Warm Spare Barrel/s Cano/s reserva/s morno/s + Canon(s) de rechange tiède Hot Spare Barrel/s Cano/s reserva/s quente/s + Canon(s) de rechange chaud Very Hot Spare Barrel/s Cano/s reserva/s muito quente/s + Canon(s) de rechange très chaud Extremely Hot Spare Barrel/s Cano/s reserva/s extremamente quente/s + Canon(s) de rechange extrêmement chaud Overheating Enabled Überhitzen Aktiviert Activada Sobrecalentamiento Superaquecimento ativado + Surchauffe activée Master enable for the overheating/jamming module Chave mestra para o módulo de superaquecimento/emperramento + Activateur maître pour le module de surchauffe / enrayement \ No newline at end of file diff --git a/addons/overpressure/config.cpp b/addons/overpressure/config.cpp index f4b5fdf951..0aa455de7d 100644 --- a/addons/overpressure/config.cpp +++ b/addons/overpressure/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/overpressure/functions/fnc_cacheOverPressureValues.sqf b/addons/overpressure/functions/fnc_cacheOverPressureValues.sqf index 273843ce8f..4b447b5012 100644 --- a/addons/overpressure/functions/fnc_cacheOverPressureValues.sqf +++ b/addons/overpressure/functions/fnc_cacheOverPressureValues.sqf @@ -3,12 +3,12 @@ * Cache the shot data for a given weapon/mag/ammo combination. * Will use the config that has the highest priority. * - * Argument: + * Arguments: * 0: Weapon * 1: Magazine * 2: Ammo * - * Return value: + * Return Value: * Shot Config : * 0: Angle * 1: Range diff --git a/addons/overpressure/functions/fnc_firedEHBB.sqf b/addons/overpressure/functions/fnc_firedEHBB.sqf index aa2997d0e7..ad7234b08c 100644 --- a/addons/overpressure/functions/fnc_firedEHBB.sqf +++ b/addons/overpressure/functions/fnc_firedEHBB.sqf @@ -5,7 +5,7 @@ * Arguments: * None. Parameters inherited from EFUNC(common,firedEH) * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/overpressure/functions/fnc_firedEHOP.sqf b/addons/overpressure/functions/fnc_firedEHOP.sqf index b8c47a826b..a846d723a1 100644 --- a/addons/overpressure/functions/fnc_firedEHOP.sqf +++ b/addons/overpressure/functions/fnc_firedEHOP.sqf @@ -5,7 +5,7 @@ * Arguments: * None. Parameters inherited from EFUNC(common,firedEH) * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/overpressure/functions/fnc_getDistance.sqf b/addons/overpressure/functions/fnc_getDistance.sqf index 616feb8660..febb4ea747 100644 --- a/addons/overpressure/functions/fnc_getDistance.sqf +++ b/addons/overpressure/functions/fnc_getDistance.sqf @@ -8,7 +8,7 @@ * 2: Max distance to search * 3: Shooter * - * Return value: + * Return Value: * Distance to intersection (999 if distance is greater than max) * * Example: diff --git a/addons/overpressure/functions/fnc_overpressureDamage.sqf b/addons/overpressure/functions/fnc_overpressureDamage.sqf index 3b8d4ea6f2..5852cf3bfd 100644 --- a/addons/overpressure/functions/fnc_overpressureDamage.sqf +++ b/addons/overpressure/functions/fnc_overpressureDamage.sqf @@ -3,7 +3,7 @@ * Calculate and apply backblast damage to potentially affected local units * Handles the "overpressure" event. * - * Argument: + * Arguments: * 0: Unit that fired * 1: Pos ASL of the projectile * 2: Direction of the projectile (reversed for launcher backblast) @@ -11,7 +11,7 @@ * 4: Magazine * 5: Ammo * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/overpressure/script_component.hpp b/addons/overpressure/script_component.hpp index 5f4005374b..c9e5ff587d 100644 --- a/addons/overpressure/script_component.hpp +++ b/addons/overpressure/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT overpressure +#define COMPONENT_BEAUTIFIED Overpressure #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/parachute/XEH_postInit.sqf b/addons/parachute/XEH_postInit.sqf index 799acf92b6..1570d3cd98 100644 --- a/addons/parachute/XEH_postInit.sqf +++ b/addons/parachute/XEH_postInit.sqf @@ -17,8 +17,7 @@ if (!hasInterface) exitWith {}; -["ACE3 Equipment", QGVAR(showAltimeter), localize LSTRING(showAltimeter), -{ +["ACE3 Equipment", QGVAR(showAltimeter), localize LSTRING(showAltimeter), { // Conditions: canInteract if !([ACE_player, objNull, ["isNotEscorting", "isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; if (!('ACE_Altimeter' in assignedItems ace_player)) exitWith {false}; @@ -28,19 +27,17 @@ if (!hasInterface) exitWith {}; call FUNC(hideAltimeter); }; true -}, -{false}, -[24, [false, false, false]], false] call CBA_fnc_addKeybind; +}, {false}, [24, [false, false, false]], false] call CBA_fnc_addKeybind; GVAR(PFH) = false; -["ace_playerVehicleChanged",{ +["vehicle",{ if (!GVAR(PFH) && {(vehicle ACE_player) isKindOf "ParachuteBase"}) then { GVAR(PFH) = true; [FUNC(onEachFrame), 0.1, []] call CALLSTACK(CBA_fnc_addPerFrameHandler); }; -}] call CBA_fnc_addEventHandler; +}] call CBA_fnc_addPlayerEventHandler; // don't show speed and height when in expert mode ["ace_infoDisplayChanged", {_this call FUNC(handleInfoDisplayChanged)}] call CBA_fnc_addEventHandler; -["ace_playerInventoryChanged", FUNC(storeParachute)] call CBA_fnc_addEventHandler; +["loadout", FUNC(storeParachute)] call CBA_fnc_addPlayerEventHandler; diff --git a/addons/parachute/config.cpp b/addons/parachute/config.cpp index dec722ea96..a251f3d6a6 100644 --- a/addons/parachute/config.cpp +++ b/addons/parachute/config.cpp @@ -1,7 +1,8 @@ #include "script_component.hpp" class CfgPatches { - class ACE_Parachute { + class ADDON { + name = COMPONENT_NAME; units[] = {"ACE_NonSteerableParachute"}; weapons[] = {"ACE_Altimeter"}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/parachute/functions/fnc_storeParachute.sqf b/addons/parachute/functions/fnc_storeParachute.sqf index 55e887f3e6..8980a8ff82 100644 --- a/addons/parachute/functions/fnc_storeParachute.sqf +++ b/addons/parachute/functions/fnc_storeParachute.sqf @@ -7,7 +7,6 @@ * * Return Value: * 0: Unit - * 1: getAllGear-Array * * Example: * None @@ -16,8 +15,8 @@ */ #include "script_component.hpp" -params ["_unit", "_gear"]; -private _backpack = _gear select 6; +params ["_unit"]; +private _backpack = backpack _unit; if ((vehicle _unit) isKindOf "ParachuteBase" && {backpack _unit == ""} && {!(_unit getVariable [QGVAR(chuteIsCut),false])} && {_unit getVariable [QGVAR(hasReserve),false]}) then { _unit addBackpackGlobal (_unit getVariable[QGVAR(backpackClass),"ACE_NonSteerableParachute"]); diff --git a/addons/parachute/script_component.hpp b/addons/parachute/script_component.hpp index d86d153f22..cb341ba5ce 100644 --- a/addons/parachute/script_component.hpp +++ b/addons/parachute/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT parachute +#define COMPONENT_BEAUTIFIED Parachute #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/rangecard/config.cpp b/addons/rangecard/config.cpp index 6e4a90c0ad..9017583606 100644 --- a/addons/rangecard/config.cpp +++ b/addons/rangecard/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {"ACE_Item_RangeCard"}; weapons[] = {"ACE_RangeCard"}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/rangecard/script_component.hpp b/addons/rangecard/script_component.hpp index 251fb7263f..95344973fe 100644 --- a/addons/rangecard/script_component.hpp +++ b/addons/rangecard/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT rangecard +#define COMPONENT_BEAUTIFIED Range Card #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/realisticnames/config.cpp b/addons/realisticnames/config.cpp index d85fe9771d..c97c9a82e0 100644 --- a/addons/realisticnames/config.cpp +++ b/addons/realisticnames/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; @@ -10,6 +11,9 @@ class CfgPatches { authors[] = {"KoffeinFlummi","TaoSensai","commy2"}; url = ECSTRING(main,URL); VERSION_CONFIG; + + // this prevents any patched class from requiring this addon + addonRootClass = "A3_Characters_F"; }; }; diff --git a/addons/realisticnames/script_component.hpp b/addons/realisticnames/script_component.hpp index 33cd56777a..dda1fc93c5 100644 --- a/addons/realisticnames/script_component.hpp +++ b/addons/realisticnames/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT realisticnames +#define COMPONENT_BEAUTIFIED Realistic Names #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL @@ -14,4 +15,4 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_REALISTICNAMES #endif -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/rearm/XEH_postInit.sqf b/addons/rearm/XEH_postInit.sqf index a3038494da..cfbbdf9d4d 100644 --- a/addons/rearm/XEH_postInit.sqf +++ b/addons/rearm/XEH_postInit.sqf @@ -1,8 +1,15 @@ #include "script_component.hpp" ["ace_unconscious", {_this call FUNC(handleUnconscious)}] call CBA_fnc_addEventHandler; -["ace_playerVehicleChanged", {params ["_unit"]; [_unit] call FUNC(dropAmmo)}] call CBA_fnc_addEventHandler; +["vehicle", { + params ["_unit"]; + [_unit] call FUNC(dropAmmo); +}] call CBA_fnc_addPlayerEventHandler; if (isServer) then { addMissionEventHandler ["HandleDisconnect", {params ["_unit"]; [_unit] call FUNC(dropAmmo)}]; }; + +[QGVAR(makeDummyEH), FUNC(makeDummy)] call CBA_fnc_addEventHandler; +[QGVAR(rearmEntireVehicleSuccessLocalEH), FUNC(rearmEntireVehicleSuccessLocal)] call CBA_fnc_addEventHandler; +[QGVAR(rearmSuccessLocalEH), FUNC(rearmSuccessLocal)] call CBA_fnc_addEventHandler; diff --git a/addons/rearm/config.cpp b/addons/rearm/config.cpp index bd0a4980e2..a4c130c974 100644 --- a/addons/rearm/config.cpp +++ b/addons/rearm/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/rearm/functions/fnc_addRearmActions.sqf b/addons/rearm/functions/fnc_addRearmActions.sqf index 6040fd6fc5..db92df470d 100644 --- a/addons/rearm/functions/fnc_addRearmActions.sqf +++ b/addons/rearm/functions/fnc_addRearmActions.sqf @@ -2,10 +2,10 @@ * Author: GitHawk * Show the resupplyable ammunition of all surrounding vehicles. * - * Argument: + * Arguments: * 0: Target * - * Return value: + * Return Value: * ChildActions * * Example: diff --git a/addons/rearm/functions/fnc_dropAmmo.sqf b/addons/rearm/functions/fnc_dropAmmo.sqf index 48433c2f4a..eafc8bee50 100644 --- a/addons/rearm/functions/fnc_dropAmmo.sqf +++ b/addons/rearm/functions/fnc_dropAmmo.sqf @@ -20,6 +20,8 @@ private ["_dummy", "_actionID"]; params [["_unit", objNull, [objNull]], ["_delete", false, [false]], ["_unholster", true, [true]]]; +if (isNull _unit) exitWith {}; + _dummy = _unit getVariable [QGVAR(dummy), objNull]; if !(isNull _dummy) then { detach _dummy; diff --git a/addons/rearm/functions/fnc_pickUpAmmo.sqf b/addons/rearm/functions/fnc_pickUpAmmo.sqf index 546fc318b7..1368b4e959 100644 --- a/addons/rearm/functions/fnc_pickUpAmmo.sqf +++ b/addons/rearm/functions/fnc_pickUpAmmo.sqf @@ -25,7 +25,7 @@ if !(isNull _dummy) exitWith {}; //_target attachTo [_unit, [0,0.7,0], "pelvis"]; _target attachTo [_unit, [0,1,0], "pelvis"]; { - [[_target, [[-1,0,0],[0,0,1]]], QFUNC(makeDummy), _x] call EFUNC(common,execRemoteFnc); + [QGVAR(makeDummyEH), [_dummy, [[-1,0,0],[0,0,1]]], _x] call CBA_fnc_targetEvent; } count (position _unit nearObjects ["CAManBase", 100]); _unit setVariable [QGVAR(dummy), _target]; //_unit setVariable [QEGVAR(dragging,isCarrying), true, true]; // breaks things, since it hides interact menu on _target diff --git a/addons/rearm/functions/fnc_rearmEntireVehicleSuccess.sqf b/addons/rearm/functions/fnc_rearmEntireVehicleSuccess.sqf index c12286516c..2eb0b408f9 100644 --- a/addons/rearm/functions/fnc_rearmEntireVehicleSuccess.sqf +++ b/addons/rearm/functions/fnc_rearmEntireVehicleSuccess.sqf @@ -17,17 +17,27 @@ private ["_turretPath", "_magazines", "_magazine", "_currentMagazines", "_maxMagazines", "_maxRounds", "_currentRounds"]; params [["_vehicle", objNull, [objNull]]]; +TRACE_1("params",_vehicle); + +//ToDo: Cleanup with CBA_fnc_ownerEvent in CBA 2.4.2 +{ + [QGVAR(rearmEntireVehicleSuccessLocalEH), [_vehicle, _x]] call CBA_fnc_globalEvent; +} forEach REARM_TURRET_PATHS; + + +/* if (isServer) then { { _turretOwnerID = _vehicle turretOwner _x; if (_turretOwnerID == 0) then { - [[_vehicle, _x], QFUNC(rearmEntireVehicleSuccessLocal), _target] call EFUNC(common,execRemoteFnc); + //wtf is _truck from??? + [QGVAR(rearmEntireVehicleSuccessLocalEH), [_truck, _vehicle, _x], _truck] call CBA_fnc_targetEvent; } else { - EGVAR(common,remoteFnc) = [[_vehicle, _x], QFUNC(rearmEntireVehicleSuccessLocal), 0]; - _turretOwnerID publicVariableClient QEGVAR(common,remoteFnc); + [QGVAR(rearmEntireVehicleSuccessLocalEH), [_truck, _vehicle, _x], _turretOwnerID] call CBA_fnc_targetEvent; }; } count REARM_TURRET_PATHS; } else { - [_this, QFUNC(rearmEntireVehicleSuccess), 1] call EFUNC(common,execRemoteFnc); + [QGVAR(rearmEntireVehicleSuccessLocalEH), _this] call CBA_fnc_serverEvent; }; +*/ diff --git a/addons/rearm/functions/fnc_rearmEntireVehicleSuccessLocal.sqf b/addons/rearm/functions/fnc_rearmEntireVehicleSuccessLocal.sqf index 7ebd4b8eba..7d81aa6345 100644 --- a/addons/rearm/functions/fnc_rearmEntireVehicleSuccessLocal.sqf +++ b/addons/rearm/functions/fnc_rearmEntireVehicleSuccessLocal.sqf @@ -18,6 +18,10 @@ private ["_magazines", "_magazine", "_currentMagazines", "_maxMagazines", "_maxRounds", "_currentRounds"]; params [["_vehicle", objNull, [objNull]], ["_turretPath", [], [[]]]]; +TRACE_2("params",_vehicle,_turretPath); + +//ToDo: Cleanup with CBA_fnc_ownerEvent in CBA 2.4.2 +if (!(_vehicle turretLocal _turretPath)) exitWith {TRACE_1("not local turret",_turretPath);}; _magazines = [_vehicle, _turretPath] call FUNC(getConfigMagazines); { diff --git a/addons/rearm/functions/fnc_rearmSuccess.sqf b/addons/rearm/functions/fnc_rearmSuccess.sqf index 81cda9f262..4a8e4972ed 100644 --- a/addons/rearm/functions/fnc_rearmSuccess.sqf +++ b/addons/rearm/functions/fnc_rearmSuccess.sqf @@ -24,6 +24,7 @@ private ["_dummy", "_weaponSelect", "_turretOwnerID"]; params [["_args", [objNull, objNull, [], 0, "", 0], [[]], [6]]]; _args params ["_target", "_unit", "_turretPath", "_numMagazines", "_magazineClass", "_numRounds"]; +TRACE_6("params",_target,_unit,_turretPath,_numMagazines,_magazineClass,_numRounds); //hint format ["Target: %1\nTurretPath: %2\nNumMagazines: %3\nMagazine: %4\nNumRounds: %5", _target, _turretPath, _numMagazines, _magazineClass, _numRounds]; @@ -31,14 +32,18 @@ if (local _unit) then { [_unit, true, true] call FUNC(dropAmmo); }; +//ToDo: Cleanup with CBA_fnc_ownerEvent in CBA 2.4.2 +[QGVAR(rearmSuccessLocalEH), _this] call CBA_fnc_globalEvent; + +/* if (isServer) then { _turretOwnerID = _target turretOwner _turretPath; if (_turretOwnerID == 0) then { - [_this, QFUNC(rearmSuccessLocal), _target] call EFUNC(common,execRemoteFnc); + [QGVAR(rearmSuccessLocalEH), _this, _vehicle] call CBA_fnc_targetEvent; } else { - EGVAR(common,remoteFnc) = [_this, QFUNC(rearmSuccessLocal), 0]; - _turretOwnerID publicVariableClient QEGVAR(common,remoteFnc); + [QGVAR(rearmSuccessLocalEH), _this, _turretOwnerID] call CBA_fnc_targetEvent; }; } else { - [_this, QFUNC(rearmSuccess), 1] call EFUNC(common,execRemoteFnc); + [QGVAR(rearmSuccessLocalEH), _this] call CBA_fnc_serverEvent; }; + */ \ No newline at end of file diff --git a/addons/rearm/functions/fnc_rearmSuccessLocal.sqf b/addons/rearm/functions/fnc_rearmSuccessLocal.sqf index 44761d3d17..dc4afbc886 100644 --- a/addons/rearm/functions/fnc_rearmSuccessLocal.sqf +++ b/addons/rearm/functions/fnc_rearmSuccessLocal.sqf @@ -24,6 +24,10 @@ private ["_rounds", "_currentRounds", "_maxMagazines", "_currentMagazines", "_dummy", "_weaponSelect"]; params [["_args", [objNull, objNull, [], 0, "", 0], [[]], [6]]]; _args params ["_target", "_unit", "_turretPath", "_numMagazines", "_magazineClass", "_numRounds"]; +TRACE_6("params",_target,_unit,_turretPath,_numMagazines,_magazineClass,_numRounds); + +//ToDo: Cleanup with CBA_fnc_ownerEvent in CBA 2.4.2 +if (!(_target turretLocal _turretPath)) exitWith {TRACE_1("not local turret",_turretPath);}; //hint format ["Target: %1\nTurretPath: %2\nNumMagazines: %3\nMagazine: %4\nNumRounds: %5\nUnit: %6", _target, _turretPath, _numMagazines, _magazineClass, _numRounds, _unit]; diff --git a/addons/rearm/script_component.hpp b/addons/rearm/script_component.hpp index 5d69987a56..43b9a8bb5f 100644 --- a/addons/rearm/script_component.hpp +++ b/addons/rearm/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT rearm +#define COMPONENT_BEAUTIFIED Rearm #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL @@ -32,5 +33,8 @@ #define REARM_UNHOLSTER_WEAPON \ _weaponSelect = _unit getVariable QGVAR(selectedWeaponOnRearm); \ - _unit selectWeapon _weaponSelect; \ - _unit setVariable [QGVAR(selectedWeaponOnRearm), nil]; + TRACE_2("REARM_UNHOLSTER_WEAPON",_unit,_weaponSelect); \ + if (!isNil "_weaponSelect") then { \ + _unit selectWeapon _weaponSelect; \ + _unit setVariable [QGVAR(selectedWeaponOnRearm), nil]; \ + }; diff --git a/addons/recoil/config.cpp b/addons/recoil/config.cpp index e6eee4a9af..1a80a3b945 100644 --- a/addons/recoil/config.cpp +++ b/addons/recoil/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/recoil/script_component.hpp b/addons/recoil/script_component.hpp index aa80910be1..d3147f056b 100644 --- a/addons/recoil/script_component.hpp +++ b/addons/recoil/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT recoil +#define COMPONENT_BEAUTIFIED Recoil #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL @@ -14,4 +15,4 @@ #define DEBUG_SETTINGS DEBUG_ENABLED_RECOIL #endif -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/refuel/config.cpp b/addons/refuel/config.cpp index 2ace24fb92..ffdd202c54 100644 --- a/addons/refuel/config.cpp +++ b/addons/refuel/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {"ACE_refuel_fuelNozzle"}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/refuel/script_component.hpp b/addons/refuel/script_component.hpp index f05018d3e8..124b5acd64 100644 --- a/addons/refuel/script_component.hpp +++ b/addons/refuel/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT refuel +#define COMPONENT_BEAUTIFIED Refuel #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/reload/XEH_postInit.sqf b/addons/reload/XEH_postInit.sqf index 193fdaf79b..b4579a96ee 100644 --- a/addons/reload/XEH_postInit.sqf +++ b/addons/reload/XEH_postInit.sqf @@ -27,7 +27,7 @@ if (!hasInterface) exitWith {}; }] call CBA_fnc_addEventHandler; // Listen for attempts to link ammo -[QGVAR(linkedAmmo), { +[QGVAR(ammoLinked), { params ["_receiver", "_giver", "_magazine"]; private _magazineType = currentMagazine _receiver; @@ -35,7 +35,7 @@ if (!hasInterface) exitWith {}; // Return the magazine if it's the wrong type if (_magazineType != (_magazine select 0)) exitWith { - [QGVAR(returnedAmmo), [_giver,_receiver,_magazine], [_giver]] call CBA_fnc_targetEvent; + [QGVAR(ammoReturned), [_giver,_receiver,_magazine], [_giver]] call CBA_fnc_targetEvent; }; private _ammoCount = _receiver ammo currentWeapon _receiver; @@ -43,7 +43,7 @@ if (!hasInterface) exitWith {}; // Return the magazine if the belt is full or empty if ((_ammoCount == 0) || _ammoMissing == 0) exitWith { - [QGVAR(returnedAmmo), [_giver,_receiver,_magazine], [_giver]] call CBA_fnc_targetEvent; + [QGVAR(ammoReturned), [_giver,_receiver,_magazine], [_giver]] call CBA_fnc_targetEvent; }; // Add the ammo @@ -51,14 +51,14 @@ if (!hasInterface) exitWith {}; [QGVAR(syncAmmo), [_receiver, currentWeapon _receiver, _ammoCount + _ammoAdded]] call CBA_fnc_globalEvent; if ((_magazine select 1) - _ammoAdded > 0) then { - [QGVAR(returnedAmmo), [_giver, _receiver, [_magazineType, (_magazine select 1) - _ammoAdded]], [_giver]] call CBA_fnc_targetEvent; + [QGVAR(ammoReturned), [_giver, _receiver, [_magazineType, (_magazine select 1) - _ammoAdded]], [_giver]] call CBA_fnc_targetEvent; }; }] call CBA_fnc_addEventHandler; // Listen for returned magazines -[QGVAR(returnedAmmo), { +[QGVAR(ammoReturned), { params ["_receiver", "", "_magazine"]; - TRACE_2("returnedAmmo EH",_receiver,_magazine); + TRACE_2("ammoReturned EH",_receiver,_magazine); _receiver addMagazine _magazine; }] call CBA_fnc_addEventHandler; diff --git a/addons/reload/config.cpp b/addons/reload/config.cpp index d3015f9dfa..9c66dd4828 100644 --- a/addons/reload/config.cpp +++ b/addons/reload/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; @@ -22,6 +23,6 @@ class CfgPatches { class ACE_newEvents { setAmmoSync = QGVAR(syncAmmo); - returnedAmmo = QGVAR(returnedAmmo); - linkedAmmo = QGVAR(linkedAmmo); + returnedAmmo = QGVAR(ammoReturned); + linkedAmmo = QGVAR(ammoLinked); }; diff --git a/addons/reload/functions/fnc_canCheckAmmo.sqf b/addons/reload/functions/fnc_canCheckAmmo.sqf index 41a46ea465..7f38e3fbfa 100644 --- a/addons/reload/functions/fnc_canCheckAmmo.sqf +++ b/addons/reload/functions/fnc_canCheckAmmo.sqf @@ -2,11 +2,11 @@ * Author: CAA-Picard * Check if the player can check the ammo of the target. * - * Argument: + * Arguments: * 0: Unit * 1: Target * - * Return value: + * Return Value: * Can link belt * * Example: diff --git a/addons/reload/functions/fnc_canLinkBelt.sqf b/addons/reload/functions/fnc_canLinkBelt.sqf index 13fad4d460..7d25b5ea22 100644 --- a/addons/reload/functions/fnc_canLinkBelt.sqf +++ b/addons/reload/functions/fnc_canLinkBelt.sqf @@ -2,11 +2,11 @@ * Author: esteldunedain * Check if the target has an MG equiped with belt system that the player can link * - * Argument: + * Arguments: * 0: Player * 1: Target * - * Return value: + * Return Value: * Can link belt */ #include "script_component.hpp" diff --git a/addons/reload/functions/fnc_checkAmmo.sqf b/addons/reload/functions/fnc_checkAmmo.sqf index 8edfd172c0..49a1f0728d 100644 --- a/addons/reload/functions/fnc_checkAmmo.sqf +++ b/addons/reload/functions/fnc_checkAmmo.sqf @@ -2,11 +2,11 @@ * Author: commy2 and esteldunedain * Count the ammo of the currently loaded magazine or count rifle grenades. Play animation and display message. * - * Argument: + * Arguments: * 0: Player * 1: Target. Optional, if not suplied the player counts his personal or static weapon ammo * - * Return value: + * Return Value: * Nothing */ #include "script_component.hpp" diff --git a/addons/reload/functions/fnc_displayAmmo.sqf b/addons/reload/functions/fnc_displayAmmo.sqf index 7fff5564c0..6aa8f013d9 100644 --- a/addons/reload/functions/fnc_displayAmmo.sqf +++ b/addons/reload/functions/fnc_displayAmmo.sqf @@ -2,10 +2,10 @@ * Author: commy2 and esteldunedain * Display the ammo of the currently loaded magazine of the target or count rifle grenades. * - * Argument: + * Arguments: * 0: Target * - * Return value: + * Return Value: * Nothing */ #include "script_component.hpp" diff --git a/addons/reload/functions/fnc_startLinkingBelt.sqf b/addons/reload/functions/fnc_startLinkingBelt.sqf index 8b8768dbba..1590abbfab 100644 --- a/addons/reload/functions/fnc_startLinkingBelt.sqf +++ b/addons/reload/functions/fnc_startLinkingBelt.sqf @@ -2,11 +2,11 @@ * Author: esteldunedain * Start linking the belt * - * Argument: + * Arguments: * 0: Player * 1: Target * - * Return value: + * Return Value: * None */ #include "script_component.hpp" @@ -46,7 +46,7 @@ private _onFinish = { (_this select 0) params ["_player", "_target", "_magazine"]; // Raise event on remote unit - [QGVAR(linkedAmmo), [_target, _player, _magazine], [_target]] call CBA_fnc_targetEvent; + [QGVAR(ammoLinked), [_target, _player, _magazine], [_target]] call CBA_fnc_targetEvent; }; private _onFailure = { diff --git a/addons/reload/script_component.hpp b/addons/reload/script_component.hpp index eece5acec7..c2dc3b55a1 100644 --- a/addons/reload/script_component.hpp +++ b/addons/reload/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT reload +#define COMPONENT_BEAUTIFIED Reload #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/reloadlaunchers/config.cpp b/addons/reloadlaunchers/config.cpp index ff4c00bb22..16ae8cb867 100644 --- a/addons/reloadlaunchers/config.cpp +++ b/addons/reloadlaunchers/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/reloadlaunchers/functions/fnc_addMissileReloadActions.sqf b/addons/reloadlaunchers/functions/fnc_addMissileReloadActions.sqf index f6cd923845..6a9d779d02 100644 --- a/addons/reloadlaunchers/functions/fnc_addMissileReloadActions.sqf +++ b/addons/reloadlaunchers/functions/fnc_addMissileReloadActions.sqf @@ -2,11 +2,11 @@ * Author: commy2 * Create one action per reloadable missile * - * Argument: + * Arguments: * 1: Target (Object) * 0: Player (Object) * - * Return value: + * Return Value: * Children actions (Array) * * Public: No diff --git a/addons/reloadlaunchers/functions/fnc_canLoad.sqf b/addons/reloadlaunchers/functions/fnc_canLoad.sqf index 116a900092..5072d44a48 100644 --- a/addons/reloadlaunchers/functions/fnc_canLoad.sqf +++ b/addons/reloadlaunchers/functions/fnc_canLoad.sqf @@ -2,13 +2,13 @@ * Author: commy2 * Check of the unit can reload the launcher of target unit. * - * Argument: + * Arguments: * 0: Unit to do the reloading (Object) * 1: Unit eqipped with launcher (Object) * 2: weapon name (String) * 3: missile name (String) * - * Return value: + * Return Value: * NONE * * Public: No diff --git a/addons/reloadlaunchers/functions/fnc_getLoadableMissiles.sqf b/addons/reloadlaunchers/functions/fnc_getLoadableMissiles.sqf index f466490b64..40766a5905 100644 --- a/addons/reloadlaunchers/functions/fnc_getLoadableMissiles.sqf +++ b/addons/reloadlaunchers/functions/fnc_getLoadableMissiles.sqf @@ -2,11 +2,11 @@ * Author: commy2 * Return all magazine types from reloaders inventory that are compatible with given weapon. * - * Argument: + * Arguments: * 0: Unit to to the reload (Object) * 1: A launcher (String) * - * Return value: + * Return Value: * Reloable magazines (Array) * * Public: No diff --git a/addons/reloadlaunchers/functions/fnc_load.sqf b/addons/reloadlaunchers/functions/fnc_load.sqf index 863d1e9189..2f822bb6d7 100644 --- a/addons/reloadlaunchers/functions/fnc_load.sqf +++ b/addons/reloadlaunchers/functions/fnc_load.sqf @@ -2,13 +2,13 @@ * Author: commy2 * Reload a launcher * - * Argument: + * Arguments: * 0: Unit with magazine (Object) * 1: Unit with launcher (Object) * 2: weapon name (String) * 3: missile name (String) * - * Return value: + * Return Value: * NONE * * Public: No diff --git a/addons/reloadlaunchers/functions/fnc_reloadLauncher.sqf b/addons/reloadlaunchers/functions/fnc_reloadLauncher.sqf index 2aec180d22..96db7cdca5 100644 --- a/addons/reloadlaunchers/functions/fnc_reloadLauncher.sqf +++ b/addons/reloadlaunchers/functions/fnc_reloadLauncher.sqf @@ -2,13 +2,13 @@ * Author: commy2 * Reload a launcher * - * Argument: + * Arguments: * 0: Unit to do the reloading (Object) * 1: Target to rload (Object) * 2: weapon name (String) * 3: missile name (String) * - * Return value: + * Return Value: * NONE * * Public: No diff --git a/addons/reloadlaunchers/script_component.hpp b/addons/reloadlaunchers/script_component.hpp index fc78723f2a..9051d0c36f 100644 --- a/addons/reloadlaunchers/script_component.hpp +++ b/addons/reloadlaunchers/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT reloadlaunchers +#define COMPONENT_BEAUTIFIED Reload Launchers #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL @@ -14,4 +15,4 @@ #define DEBUG_SETTINGS DEBUG_ENABLED_RELOADLAUNCHERS #endif -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/repair/config.cpp b/addons/repair/config.cpp index 56465ba1f5..dab412eb93 100644 --- a/addons/repair/config.cpp +++ b/addons/repair/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {"ACE_Wheel", "ACE_Track"}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/repair/script_component.hpp b/addons/repair/script_component.hpp index adae522925..c2bad9328d 100644 --- a/addons/repair/script_component.hpp +++ b/addons/repair/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT repair +#define COMPONENT_BEAUTIFIED Repair #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/repair/stringtable.xml b/addons/repair/stringtable.xml index 48a647290f..7f82d9c881 100644 --- a/addons/repair/stringtable.xml +++ b/addons/repair/stringtable.xml @@ -1323,6 +1323,7 @@ El motor necesita desactivado para la reparación Pro opravu je zapotřebí vypnout motor O motor deve estar desligado para manutenção + Le moteur doit être éteins pour réparer \ No newline at end of file diff --git a/addons/respawn/XEH_postInit.sqf b/addons/respawn/XEH_postInit.sqf index f589d5abac..6c1b1e9961 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", {_this call FUNC(updateRallypoint)}] call CBA_fnc_addEventHandler; -["ace_playerChanged", {_this call FUNC(handlePlayerChanged)}] call CBA_fnc_addEventHandler; // hide enemy rallypoint markers +["ace_rallypointMoved", FUNC(updateRallypoint)] call CBA_fnc_addEventHandler; +["unit", FUNC(handlePlayerChanged)] call CBA_fnc_addPlayerEventHandler; // hide enemy rallypoint markers -[QGVAR(showFriendlyFireMessageEvent), DFUNC(showFriendlyFireMessage)] call CBA_fnc_addEventHandler; +[QGVAR(showFriendlyFireMessageEvent), FUNC(showFriendlyFireMessage)] call CBA_fnc_addEventHandler; diff --git a/addons/respawn/config.cpp b/addons/respawn/config.cpp index 3a887b48b2..cd87087e20 100644 --- a/addons/respawn/config.cpp +++ b/addons/respawn/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {"ACE_Rallypoint_West", "ACE_Rallypoint_East", "ACE_Rallypoint_Independent", "ACE_Rallypoint_West_Base", "ACE_Rallypoint_East_Base", "ACE_Rallypoint_Independent_Base"}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/respawn/script_component.hpp b/addons/respawn/script_component.hpp index ee681d1d98..2fcd01ee37 100644 --- a/addons/respawn/script_component.hpp +++ b/addons/respawn/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT respawn +#define COMPONENT_BEAUTIFIED Respawn #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/safemode/config.cpp b/addons/safemode/config.cpp index 05510a53a5..bb1016792e 100644 --- a/addons/safemode/config.cpp +++ b/addons/safemode/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/safemode/script_component.hpp b/addons/safemode/script_component.hpp index 8afc534fa2..d9972b6226 100644 --- a/addons/safemode/script_component.hpp +++ b/addons/safemode/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT safemode +#define COMPONENT_BEAUTIFIED Safe Mode #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/sandbag/XEH_postInit.sqf b/addons/sandbag/XEH_postInit.sqf index 0bc5b6d2b1..a03f6076a1 100644 --- a/addons/sandbag/XEH_postInit.sqf +++ b/addons/sandbag/XEH_postInit.sqf @@ -15,9 +15,9 @@ 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. -["ace_playerChanged", {_this call FUNC(handlePlayerChanged)}] call CBA_fnc_addEventHandler; -["ace_playerInventoryChanged", {_this call FUNC(handlePlayerInventoryChanged)}] call CBA_fnc_addEventHandler; -["ace_playerVehicleChanged", {[ACE_player, objNull] call FUNC(handlePlayerChanged)}] call CBA_fnc_addEventHandler; +["unit", {_this call FUNC(handlePlayerChanged)}] call CBA_fnc_addPlayerEventHandler; +["loadout", {_this call FUNC(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; diff --git a/addons/sandbag/config.cpp b/addons/sandbag/config.cpp index cb8884ac7e..9c28b948ac 100644 --- a/addons/sandbag/config.cpp +++ b/addons/sandbag/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {"ACE_Item_Sandbag", "ACE_Item_Sandbag_empty"}; weapons[] = {"ACE_Sandbag", "ACE_Sandbag_empty"}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/sandbag/script_component.hpp b/addons/sandbag/script_component.hpp index 422e1b203e..a7ce4ddb59 100644 --- a/addons/sandbag/script_component.hpp +++ b/addons/sandbag/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT sandbag +#define COMPONENT_BEAUTIFIED Sand Bag #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/scopes/XEH_postInit.sqf b/addons/scopes/XEH_postInit.sqf index 4ebfe39bf3..bef16a0bc1 100644 --- a/addons/scopes/XEH_postInit.sqf +++ b/addons/scopes/XEH_postInit.sqf @@ -10,28 +10,25 @@ if (!hasInterface) exitWith {}; // Check inventory when it changes -["ace_playerInventoryChanged", FUNC(inventoryCheck)] call CBA_fnc_addEventHandler; +["loadout", FUNC(inventoryCheck)] call CBA_fnc_addPlayerEventHandler; // Instantly hide knobs when scoping in -["ace_cameraViewChanged", { - EXPLODE_2_PVT(_this,_player,_newCameraView); - if (_newCameraView == "GUNNER") then { - private "_layer"; - _layer = [QGVAR(Zeroing)] call BIS_fnc_rscLayer; - _layer cutText ["", "PLAIN", 0]; +["cameraView", { + params ["_player", "_newCameraView"]; + if (_newCameraView == "GUNNER") then { + private _layer = [QGVAR(Zeroing)] call BIS_fnc_rscLayer; + _layer cutText ["", "PLAIN", 0]; if !(isNil QGVAR(fadePFH)) then { [GVAR(fadePFH)] call CBA_fnc_removePerFrameHandler; GVAR(fadePFH) = nil; }; }; -}] call CBA_fnc_addEventHandler; - +}] call CBA_fnc_addPlayerEventHandler; // Add keybinds -["ACE3 Scope Adjustment", QGVAR(AdjustUpMinor), localize LSTRING(AdjustUpMinor), -{ +["ACE3 Scope Adjustment", QGVAR(AdjustUpMinor), localize LSTRING(AdjustUpMinor), { // Conditions: canInteract if !([ACE_player, objNull, ["isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; // Conditions: specific @@ -41,12 +38,9 @@ if (!hasInterface) exitWith {}; // Statement [ACE_player, ELEVATION_UP, MINOR_INCREMENT] call FUNC(adjustScope); -}, -{false}, -[201, [false, false, false]], true] call CBA_fnc_addKeybind; +}, {false}, [201, [false, false, false]], true] call CBA_fnc_addKeybind; -["ACE3 Scope Adjustment", QGVAR(AdjustDownMinor), localize LSTRING(AdjustDownMinor), -{ +["ACE3 Scope Adjustment", QGVAR(AdjustDownMinor), localize LSTRING(AdjustDownMinor), { // Conditions: canInteract if !([ACE_player, objNull, ["isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; // Conditions: specific @@ -56,12 +50,9 @@ if (!hasInterface) exitWith {}; // Statement [ACE_player, ELEVATION_DOWN, MINOR_INCREMENT] call FUNC(adjustScope); -}, -{false}, -[209, [false, false, false]], true] call CBA_fnc_addKeybind; +}, {false}, [209, [false, false, false]], true] call CBA_fnc_addKeybind; -["ACE3 Scope Adjustment", QGVAR(AdjustLeftMinor), localize LSTRING(AdjustLeftMinor), -{ +["ACE3 Scope Adjustment", QGVAR(AdjustLeftMinor), localize LSTRING(AdjustLeftMinor), { // Conditions: canInteract if !([ACE_player, objNull, ["isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; // Conditions: specific @@ -71,12 +62,9 @@ if (!hasInterface) exitWith {}; // Statement [ACE_player, WINDAGE_LEFT, MINOR_INCREMENT] call FUNC(adjustScope); -}, -{false}, -[209, [false, true, false]], true] call CBA_fnc_addKeybind; +}, {false}, [209, [false, true, false]], true] call CBA_fnc_addKeybind; -["ACE3 Scope Adjustment", QGVAR(AdjustRightMinor), localize LSTRING(AdjustRightMinor), -{ +["ACE3 Scope Adjustment", QGVAR(AdjustRightMinor), localize LSTRING(AdjustRightMinor), { // Conditions: canInteract if !([ACE_player, objNull, ["isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; // Conditions: specific @@ -86,12 +74,9 @@ if (!hasInterface) exitWith {}; // Statement [ACE_player, WINDAGE_RIGHT, MINOR_INCREMENT] call FUNC(adjustScope); -}, -{false}, -[201, [false, true, false]], true] call CBA_fnc_addKeybind; +}, {false}, [201, [false, true, false]], true] call CBA_fnc_addKeybind; -["ACE3 Scope Adjustment", QGVAR(AdjustUpMajor), localize LSTRING(AdjustUpMajor), -{ +["ACE3 Scope Adjustment", QGVAR(AdjustUpMajor), localize LSTRING(AdjustUpMajor), { // Conditions: canInteract if !([ACE_player, objNull, ["isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; // Conditions: specific @@ -101,12 +86,9 @@ if (!hasInterface) exitWith {}; // Statement [ACE_player, ELEVATION_UP, MAJOR_INCREMENT] call FUNC(adjustScope); -}, -{false}, -[201, [true, false, false]], true] call CBA_fnc_addKeybind; +}, {false}, [201, [true, false, false]], true] call CBA_fnc_addKeybind; -["ACE3 Scope Adjustment", QGVAR(AdjustDownMajor), localize LSTRING(AdjustDownMajor), -{ +["ACE3 Scope Adjustment", QGVAR(AdjustDownMajor), localize LSTRING(AdjustDownMajor), { // Conditions: canInteract if !([ACE_player, objNull, ["isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; // Conditions: specific @@ -116,12 +98,9 @@ if (!hasInterface) exitWith {}; // Statement [ACE_player, ELEVATION_DOWN, MAJOR_INCREMENT] call FUNC(adjustScope); -}, -{false}, -[209, [true, false, false]], true] call CBA_fnc_addKeybind; +}, {false}, [209, [true, false, false]], true] call CBA_fnc_addKeybind; -["ACE3 Scope Adjustment", QGVAR(AdjustLeftMajor), localize LSTRING(AdjustLeftMajor), -{ +["ACE3 Scope Adjustment", QGVAR(AdjustLeftMajor), localize LSTRING(AdjustLeftMajor), { // Conditions: canInteract if !([ACE_player, objNull, ["isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; // Conditions: specific @@ -131,12 +110,9 @@ if (!hasInterface) exitWith {}; // Statement [ACE_player, WINDAGE_LEFT, MAJOR_INCREMENT] call FUNC(adjustScope); -}, -{false}, -[209, [true, true, false]], true] call CBA_fnc_addKeybind; +}, {false}, [209, [true, true, false]], true] call CBA_fnc_addKeybind; -["ACE3 Scope Adjustment", QGVAR(AdjustRightMajor), localize LSTRING(AdjustRightMajor), -{ +["ACE3 Scope Adjustment", QGVAR(AdjustRightMajor), localize LSTRING(AdjustRightMajor), { // Conditions: canInteract if !([ACE_player, objNull, ["isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; // Conditions: specific @@ -146,9 +122,7 @@ if (!hasInterface) exitWith {}; // Statement [ACE_player, WINDAGE_RIGHT, MAJOR_INCREMENT] call FUNC(adjustScope); -}, -{false}, -[201, [true, true, false]], true] call CBA_fnc_addKeybind; +}, {false}, [201, [true, true, false]], true] call CBA_fnc_addKeybind; // Register fire event handler diff --git a/addons/scopes/config.cpp b/addons/scopes/config.cpp index c9ff1feb20..8388b2d04b 100644 --- a/addons/scopes/config.cpp +++ b/addons/scopes/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/scopes/functions/fnc_adjustScope.sqf b/addons/scopes/functions/fnc_adjustScope.sqf index 5b0c6d11a6..9a38ef40cb 100644 --- a/addons/scopes/functions/fnc_adjustScope.sqf +++ b/addons/scopes/functions/fnc_adjustScope.sqf @@ -2,12 +2,12 @@ * Author: KoffeinFlummi, Ruthberg * Changes the adjustment for the current scope * - * Argument: + * Arguments: * 0: Unit * 1: Turret and Direction * 2: Major Step * - * Return value: + * Return Value: * Did we adjust anything? * * Example: diff --git a/addons/scopes/functions/fnc_adjustZero.sqf b/addons/scopes/functions/fnc_adjustZero.sqf index 363407e090..9e953d0523 100644 --- a/addons/scopes/functions/fnc_adjustZero.sqf +++ b/addons/scopes/functions/fnc_adjustZero.sqf @@ -2,10 +2,10 @@ * Author: KoffeinFlummi, Ruthberg * Updates the zero reference for the current scope * - * Argument: + * Arguments: * 0: Unit * - * Return value: + * Return Value: * true * * Example: diff --git a/addons/scopes/functions/fnc_applyScopeAdjustment.sqf b/addons/scopes/functions/fnc_applyScopeAdjustment.sqf index af2f018e11..7067b0442c 100644 --- a/addons/scopes/functions/fnc_applyScopeAdjustment.sqf +++ b/addons/scopes/functions/fnc_applyScopeAdjustment.sqf @@ -2,13 +2,13 @@ * Author: KoffeinFlummi, Ruthberg * Applies the adjustment for the current scope * - * Argument: + * Arguments: * 0: Unit * 1: Absolute elevation * 2: Absolute windage * 3: Absolute zero reference * - * Return value: + * Return Value: * True * * Example: diff --git a/addons/scopes/functions/fnc_canAdjustZero.sqf b/addons/scopes/functions/fnc_canAdjustZero.sqf index 36ea4ac793..477dc12635 100644 --- a/addons/scopes/functions/fnc_canAdjustZero.sqf +++ b/addons/scopes/functions/fnc_canAdjustZero.sqf @@ -2,10 +2,10 @@ * Author: KoffeinFlummi, Ruthberg * Changes the adjustment for the current scope * - * Argument: + * Arguments: * 0: Unit * - * Return value: + * Return Value: * Can we update the zero reference? * * Example: diff --git a/addons/scopes/functions/fnc_firedEH.sqf b/addons/scopes/functions/fnc_firedEH.sqf index 07eadb5620..444b768eb5 100644 --- a/addons/scopes/functions/fnc_firedEH.sqf +++ b/addons/scopes/functions/fnc_firedEH.sqf @@ -2,10 +2,10 @@ * Author: KoffeinFlummi, esteldunedain * Adjusts the flight path of the bullet according to the zeroing. Called from the unified fired EH only for local and non-local players on foot. * - * Argument: + * Arguments: * None. Parameters inherited from EFUNC(common,firedEH) * - * Return value: + * Return Value: * None * * Public: No diff --git a/addons/scopes/script_component.hpp b/addons/scopes/script_component.hpp index 0266705af2..402f390f63 100644 --- a/addons/scopes/script_component.hpp +++ b/addons/scopes/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT scopes +#define COMPONENT_BEAUTIFIED Scopes #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL @@ -22,4 +23,4 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_SCOPES #endif -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/sitting/config.cpp b/addons/sitting/config.cpp index e6a730c492..785cb75aeb 100644 --- a/addons/sitting/config.cpp +++ b/addons/sitting/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/sitting/functions/fnc_canSit.sqf b/addons/sitting/functions/fnc_canSit.sqf index 1dd0c9676f..0ea8f06bc8 100644 --- a/addons/sitting/functions/fnc_canSit.sqf +++ b/addons/sitting/functions/fnc_canSit.sqf @@ -19,5 +19,5 @@ params ["_seat"]; // Sitting enabled, is seat object, not occupied and standing up (or not on a big slope) GVAR(enable) && -{isNil {_seat getVariable QGVAR(seatOccupied)}} && +{!(_seat call EFUNC(common,owned))} && {round (vectorUp _seat select 0) == 0 && {round (vectorUp _seat select 1) == 0} && {round (vectorUp _seat select 2) == 1}} diff --git a/addons/sitting/functions/fnc_sit.sqf b/addons/sitting/functions/fnc_sit.sqf index 7aa1c4c55b..c2ca725d5d 100644 --- a/addons/sitting/functions/fnc_sit.sqf +++ b/addons/sitting/functions/fnc_sit.sqf @@ -49,7 +49,7 @@ _player setPosASL (AGLtoASL (_seat modelToWorld _sitPosition)); // Set variables, save seat object on player _player setVariable [QGVAR(isSitting), [_seat, _actionID]]; -_seat setVariable [QGVAR(seatOccupied), true, true]; // To prevent multiple people sitting on one seat +[_player, _seat] call EFUNC(common,claim); // To prevent multiple people sitting on one seat // Add automatical stand PFH in case of interruptions diff --git a/addons/sitting/functions/fnc_stand.sqf b/addons/sitting/functions/fnc_stand.sqf index a51f4203fc..7c6a93c662 100644 --- a/addons/sitting/functions/fnc_stand.sqf +++ b/addons/sitting/functions/fnc_stand.sqf @@ -35,4 +35,4 @@ private _animation = switch (currentWeapon _player) do { // Set variables to nil _player setVariable [QGVAR(isSitting), nil]; if (isNull _seat) exitWith {}; -_seat setVariable [QGVAR(seatOccupied), nil, true]; +[objNull, _seat] call EFUNC(common,claim); diff --git a/addons/sitting/script_component.hpp b/addons/sitting/script_component.hpp index 40afbe8450..7324da1875 100644 --- a/addons/sitting/script_component.hpp +++ b/addons/sitting/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT sitting +#define COMPONENT_BEAUTIFIED Sitting #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL @@ -14,4 +15,4 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_SITTING #endif -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/slideshow/config.cpp b/addons/slideshow/config.cpp index 3a2e757e6a..6149ad71d7 100644 --- a/addons/slideshow/config.cpp +++ b/addons/slideshow/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/slideshow/script_component.hpp b/addons/slideshow/script_component.hpp index cf4272325d..eb8b8746ee 100644 --- a/addons/slideshow/script_component.hpp +++ b/addons/slideshow/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT slideshow +#define COMPONENT_BEAUTIFIED Slideshow #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/smallarms/config.cpp b/addons/smallarms/config.cpp index 5b211fa37e..23fd1e49a7 100644 --- a/addons/smallarms/config.cpp +++ b/addons/smallarms/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/smallarms/script_component.hpp b/addons/smallarms/script_component.hpp index 63d516cee5..ebb2d1539d 100644 --- a/addons/smallarms/script_component.hpp +++ b/addons/smallarms/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT smallarms +#define COMPONENT_BEAUTIFIED Small Arms #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/spectator/config.cpp b/addons/spectator/config.cpp index 7e9937a70b..cadde0db9d 100644 --- a/addons/spectator/config.cpp +++ b/addons/spectator/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/spectator/script_component.hpp b/addons/spectator/script_component.hpp index 575765a01d..7084a88a6d 100644 --- a/addons/spectator/script_component.hpp +++ b/addons/spectator/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT spectator +#define COMPONENT_BEAUTIFIED Spectator #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/spectator/stringtable.xml b/addons/spectator/stringtable.xml index bdb88a2675..1a6fef2473 100644 --- a/addons/spectator/stringtable.xml +++ b/addons/spectator/stringtable.xml @@ -424,6 +424,7 @@ Cámara panorámica Otáčet kameru Camera Panoramica + Tourner la caméra Dolly Camera @@ -434,6 +435,7 @@ Cámara dolly Posouvat kameru Camera dolly + Bouger la caméra Lock Camera to Target diff --git a/addons/spottingscope/CfgVehicles.hpp b/addons/spottingscope/CfgVehicles.hpp index 6ea8562936..f86b9d16c7 100644 --- a/addons/spottingscope/CfgVehicles.hpp +++ b/addons/spottingscope/CfgVehicles.hpp @@ -110,7 +110,7 @@ class CfgVehicles { weapons[] = {}; magazines[] = {}; gunnerOpticsColor[] = {1,1,1,1}; - gunnerOpticsModel = "\A3\Weapons_F\empty"; //QPATHTOF(data\m144_optic.p3d); + gunnerOpticsModel = "\A3\Weapons_F\empty"; gunnerOpticsEffect[] = {"OpticsCHAbera1","OpticsBlur2"}; gunnerOutOpticsShowCursor = 0; gunnerOpticsShowCursor = 0; diff --git a/addons/spottingscope/config.cpp b/addons/spottingscope/config.cpp index 3849382690..4fa5bd4d58 100644 --- a/addons/spottingscope/config.cpp +++ b/addons/spottingscope/config.cpp @@ -2,7 +2,7 @@ class CfgPatches { class ADDON { - name = CSTRING(component); + name = COMPONENT_NAME; units[] = {"ACE_B_SpottingScope", "ACE_O_SpottingScope", "ACE_I_SpottingScope", "ACE_Item_SpottingScope"}; weapons[] = {"ACE_SpottingScope"}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/spottingscope/data/ace_ssvzs.p3d b/addons/spottingscope/data/ace_ssvzs.p3d deleted file mode 100644 index a4d58c13f4..0000000000 Binary files a/addons/spottingscope/data/ace_ssvzs.p3d and /dev/null differ diff --git a/addons/spottingscope/data/m144_ca.paa b/addons/spottingscope/data/m144_ca.paa deleted file mode 100644 index a2d299d937..0000000000 Binary files a/addons/spottingscope/data/m144_ca.paa and /dev/null differ diff --git a/addons/spottingscope/data/m144_optic.p3d b/addons/spottingscope/data/m144_optic.p3d deleted file mode 100644 index 15ad16fe92..0000000000 Binary files a/addons/spottingscope/data/m144_optic.p3d and /dev/null differ diff --git a/addons/spottingscope/data/optic_ssvzs.p3d b/addons/spottingscope/data/optic_ssvzs.p3d deleted file mode 100644 index ffb5834768..0000000000 Binary files a/addons/spottingscope/data/optic_ssvzs.p3d and /dev/null differ diff --git a/addons/spottingscope/data/w_spottingscope.p3d b/addons/spottingscope/data/w_spottingscope.p3d deleted file mode 100644 index 040ef5158e..0000000000 Binary files a/addons/spottingscope/data/w_spottingscope.p3d and /dev/null differ diff --git a/addons/spottingscope/functions/fnc_animateReticle.sqf b/addons/spottingscope/functions/fnc_animateReticle.sqf index 109d81a2b9..10bbf9b564 100644 --- a/addons/spottingscope/functions/fnc_animateReticle.sqf +++ b/addons/spottingscope/functions/fnc_animateReticle.sqf @@ -5,7 +5,7 @@ * Arguments: * 0: Reticles RSC info display * - * Return value: + * Return Value: * None * * Public: No diff --git a/addons/spottingscope/functions/fnc_pickup.sqf b/addons/spottingscope/functions/fnc_pickup.sqf index cdcc78bea3..1a15bd7880 100644 --- a/addons/spottingscope/functions/fnc_pickup.sqf +++ b/addons/spottingscope/functions/fnc_pickup.sqf @@ -6,7 +6,7 @@ * 0: spotting scope * 1: unit * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/spottingscope/functions/fnc_place.sqf b/addons/spottingscope/functions/fnc_place.sqf index 21560f948f..06f0e0d63a 100644 --- a/addons/spottingscope/functions/fnc_place.sqf +++ b/addons/spottingscope/functions/fnc_place.sqf @@ -6,7 +6,7 @@ * 0: unit * 1: scope class * - * Return value: + * Return Value: * None * * Example: @@ -27,15 +27,30 @@ if ((_unit call CBA_fnc_getUnitAnim) select 0 == "stand") then { [{ params ["_unit"]; - private ["_direction", "_position", "_spottingScope"]; - _direction = getDir _unit; - _position = (getPosASL _unit) vectorAdd [0.8 * sin(_direction), 0.8 * cos(_direction), 0.02]; + // prevent collision damage + [QEGVAR(common,fixCollision), _unit] call CBA_fnc_localEvent; - _spottingScope = "ACE_SpottingScopeObject" createVehicle [0, 0, 0]; + // Check for a place to land the spotting scope + private _direction = getDir _unit; + private _position = (getPosASL _unit) vectorAdd [0.8 * sin(_direction), 0.8 * cos(_direction), 0]; + private _vectorUp = [0, 0, 1]; + private _intersections = lineIntersectsSurfaces [_position vectorAdd [0, 0, 1.5], _position vectorDiff [0, 0, 1.5], _unit, objNull, true, 1, "GEOM", "FIRE"]; + if (_intersections isEqualTo []) then { + TRACE_1("No intersections",_intersections); + } else { + (_intersections select 0) params ["_touchingPoint", "_surfaceNormal"]; + _position = _touchingPoint vectorAdd [0, 0, 0.05]; + _vectorUp = _surfaceNormal; + }; + + // Create the scope and set its position and orientation + private _spottingScope = "ACE_SpottingScopeObject" createVehicle [0, 0, 0]; _spottingScope setDir _direction; _spottingScope setPosASL _position; - if ((getPosATL _spottingScope select 2) - (getPos _spottingScope select 2) < 1E-5) then { - _spottingScope setVectorUp (surfaceNormal (position _spottingScope)); - }; + _spottingScope setVectorUp _vectorUp; + [QEGVAR(common,fixPosition), _spottingScope, _spottingScope] call CBA_fnc_targetEvent; + [QEGVAR(common,fixFloating), _spottingScope, _spottingScope] call CBA_fnc_targetEvent; + _unit reveal _spottingScope; + }, [_unit], 1, 0] call CBA_fnc_waitAndExecute; diff --git a/addons/spottingscope/script_component.hpp b/addons/spottingscope/script_component.hpp index 0a730e13d6..f6cc09af7a 100644 --- a/addons/spottingscope/script_component.hpp +++ b/addons/spottingscope/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT spottingscope +#define COMPONENT_BEAUTIFIED Spotting Scope #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/spottingscope/stringtable.xml b/addons/spottingscope/stringtable.xml index 3df7c05ec5..3a0b89b857 100644 --- a/addons/spottingscope/stringtable.xml +++ b/addons/spottingscope/stringtable.xml @@ -1,18 +1,6 @@  - - Advanced Combat Environment 3 - Spotting Scope - Advanced Combat Environment 3 - Teleskop - Advanced Combat Environment 3 - Зрительная труба - Advanced Combat Environment 3 - Teleskop - Advanced Combat Environment 3 - Telescopio - Advanced Combat Environment 3 - Téléscope de visée - Advanced Combat Environment 3 - Zaměřovací dalekohled - Advanced Combat Environment 3 - Spotting Scope - Advanced Combat Environment 3 - Megfigyelő távcső - Advanced Combat Environment 3 - Luneta de observador - Spotting Scope Teleskop diff --git a/addons/switchunits/config.cpp b/addons/switchunits/config.cpp index 1bdec70729..f722219562 100644 --- a/addons/switchunits/config.cpp +++ b/addons/switchunits/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/switchunits/script_component.hpp b/addons/switchunits/script_component.hpp index 938d34d9a8..868fbc0a5d 100644 --- a/addons/switchunits/script_component.hpp +++ b/addons/switchunits/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT switchunits +#define COMPONENT_BEAUTIFIED Switch Units #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/tacticalladder/XEH_postInit.sqf b/addons/tacticalladder/XEH_postInit.sqf index 723c5b1421..1a6f356fb0 100644 --- a/addons/tacticalladder/XEH_postInit.sqf +++ b/addons/tacticalladder/XEH_postInit.sqf @@ -17,8 +17,8 @@ GVAR(currentAngle) = 0; ["ace_interactMenuOpened", {[ACE_player] call FUNC(handleInteractMenuOpened)}] call CBA_fnc_addEventHandler; // Cancel adjusting on player change. -["ace_playerChanged", {_this call FUNC(handlePlayerChanged)}] call CBA_fnc_addEventHandler; -["ace_playerVehicleChanged", {[ACE_player, objNull] call FUNC(handlePlayerChanged)}] call CBA_fnc_addEventHandler; +["unit", FUNC(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; diff --git a/addons/tacticalladder/config.cpp b/addons/tacticalladder/config.cpp index 53ce7384f6..eddca58449 100644 --- a/addons/tacticalladder/config.cpp +++ b/addons/tacticalladder/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/tacticalladder/script_component.hpp b/addons/tacticalladder/script_component.hpp index 1341795f37..b58aa42e38 100644 --- a/addons/tacticalladder/script_component.hpp +++ b/addons/tacticalladder/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT tacticalladder +#define COMPONENT_BEAUTIFIED Tactical Ladder #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/tagging/config.cpp b/addons/tagging/config.cpp index 7e495892e9..634f7c57af 100644 --- a/addons/tagging/config.cpp +++ b/addons/tagging/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {"ACE_Item_SpraypaintBlack", "ACE_Item_SpraypaintRed", "ACE_Item_SpraypaintGreen", "ACE_Item_SpraypaintBlue"}; weapons[] = {"ACE_SpraypaintBlack", "ACE_SpraypaintRed", "ACE_SpraypaintGreen", "ACE_SpraypaintBlue"}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/tagging/functions/fnc_tag.sqf b/addons/tagging/functions/fnc_tag.sqf index d14e65ae7f..165441f80e 100644 --- a/addons/tagging/functions/fnc_tag.sqf +++ b/addons/tagging/functions/fnc_tag.sqf @@ -72,6 +72,11 @@ if (_surfaceNormal vectorDotProduct (_endPosASL vectorDiff _startPosASL) > 0) t // Check if its a valid surface: big enough, reasonably plane private _v1 = vectorNormalized (_surfaceNormal vectorMultiply -1); private _v2 = vectorNormalized (_v1 vectorCrossProduct (_endPosASL vectorDiff _startPosASL)); +// If the surface is not horizontal (>20º), create vup _v2 pointing upward instead of away +if (abs (_v1 select 2) < 0.94) then { + private _v3Temp = _v1 vectorCrossProduct [0, 0, 1]; + _v2 = _v3Temp vectorCrossProduct _v1; +}; private _v3 = _v2 vectorCrossProduct _v1; TRACE_3("Reference:", _v1, _v2, _v3); diff --git a/addons/tagging/script_component.hpp b/addons/tagging/script_component.hpp index 4836d2f209..18066d4c0d 100644 --- a/addons/tagging/script_component.hpp +++ b/addons/tagging/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT tagging +#define COMPONENT_BEAUTIFIED Tagging #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/thermals/config.cpp b/addons/thermals/config.cpp index b4ad00f41c..a61598929d 100644 --- a/addons/thermals/config.cpp +++ b/addons/thermals/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/thermals/script_component.hpp b/addons/thermals/script_component.hpp index bd829f035e..c7ac2263ce 100644 --- a/addons/thermals/script_component.hpp +++ b/addons/thermals/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT thermals +#define COMPONENT_BEAUTIFIED Thermals #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL @@ -14,4 +15,4 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_THERMALS #endif -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/trenches/XEH_postInit.sqf b/addons/trenches/XEH_postInit.sqf index af6038d992..1fbfa24116 100644 --- a/addons/trenches/XEH_postInit.sqf +++ b/addons/trenches/XEH_postInit.sqf @@ -16,9 +16,9 @@ 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. -["ace_playerChanged", {_this call FUNC(handlePlayerChanged)}] call CBA_fnc_addEventHandler; -["ace_playerInventoryChanged", {_this call FUNC(handlePlayerInventoryChanged)}] call CBA_fnc_addEventHandler; -["ace_playerVehicleChanged", {[ACE_player, objNull] call FUNC(handlePlayerChanged)}] call CBA_fnc_addEventHandler; +["unit", FUNC(handlePlayerChanged)] call CBA_fnc_addPlayerEventHandler; +["loadout", FUNC(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; diff --git a/addons/trenches/config.cpp b/addons/trenches/config.cpp index f090a3ecf4..2b4f3c9051 100644 --- a/addons/trenches/config.cpp +++ b/addons/trenches/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {"ACE_envelope_small","ACE_envelope_big"}; weapons[] = {"ACE_EntrenchingTool"}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/trenches/script_component.hpp b/addons/trenches/script_component.hpp index 432308fa51..f3e97493e5 100644 --- a/addons/trenches/script_component.hpp +++ b/addons/trenches/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT trenches +#define COMPONENT_BEAUTIFIED Trenches #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/trenches/stringtable.xml b/addons/trenches/stringtable.xml index 77b845c2db..b3ec6d14ca 100644 --- a/addons/trenches/stringtable.xml +++ b/addons/trenches/stringtable.xml @@ -125,16 +125,19 @@ Continue Digging Trench Wzów kopanie wnęki Continuar cavando trincheira + Continuer à creuser la tranchée Remove Trench Usuń wnękę Remover trincheira + Retirer la tranchée Removing Trench Usuwanie wnęki Removendo tricnheira + Retirement de la tranchée \ No newline at end of file diff --git a/addons/tripod/XEH_postInit.sqf b/addons/tripod/XEH_postInit.sqf index df62d653ab..86fda03b48 100644 --- a/addons/tripod/XEH_postInit.sqf +++ b/addons/tripod/XEH_postInit.sqf @@ -10,8 +10,8 @@ GVAR(height) = 0; ["ace_interactMenuOpened", {[ACE_player] call FUNC(handleInteractMenuOpened)}] call CBA_fnc_addEventHandler; // Cancel adjusting on player change. -["ace_playerChanged", {_this call FUNC(handlePlayerChanged)}] call CBA_fnc_addEventHandler; -["ace_playerVehicleChanged", {[ACE_player, objNull] call FUNC(handlePlayerChanged)}] call CBA_fnc_addEventHandler; +["unit", FUNC(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; diff --git a/addons/tripod/config.cpp b/addons/tripod/config.cpp index 3891a59d57..8251e0c469 100644 --- a/addons/tripod/config.cpp +++ b/addons/tripod/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {"ACE_Item_Tripod"}; weapons[] = {"ACE_Tripod"}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/tripod/functions/fnc_adjust.sqf b/addons/tripod/functions/fnc_adjust.sqf index 2b8659b2a4..b12f713ace 100644 --- a/addons/tripod/functions/fnc_adjust.sqf +++ b/addons/tripod/functions/fnc_adjust.sqf @@ -5,7 +5,7 @@ * Arguments: * 0: tripod * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/tripod/functions/fnc_pickup.sqf b/addons/tripod/functions/fnc_pickup.sqf index 9a291480ad..dc8b990515 100644 --- a/addons/tripod/functions/fnc_pickup.sqf +++ b/addons/tripod/functions/fnc_pickup.sqf @@ -6,7 +6,7 @@ * 0: unit * 1: tripod * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/tripod/functions/fnc_place.sqf b/addons/tripod/functions/fnc_place.sqf index 64dc0786e8..b4b6790ef6 100644 --- a/addons/tripod/functions/fnc_place.sqf +++ b/addons/tripod/functions/fnc_place.sqf @@ -6,7 +6,7 @@ * 0: unit * 1: tripod class * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/tripod/script_component.hpp b/addons/tripod/script_component.hpp index 95d11d3a65..28be9b780e 100644 --- a/addons/tripod/script_component.hpp +++ b/addons/tripod/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT tripod +#define COMPONENT_BEAUTIFIED Tripod #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/ui/CfgEventHandlers.hpp b/addons/ui/CfgEventHandlers.hpp index 36c0fca8a3..89c91283ed 100644 --- a/addons/ui/CfgEventHandlers.hpp +++ b/addons/ui/CfgEventHandlers.hpp @@ -15,3 +15,10 @@ class Extended_PostInit_EventHandlers { clientInit = QUOTE(call COMPILE_FILE(XEH_clientInit)); }; }; + +// Closing diary resets showHUD +class Extended_DisplayUnload_EventHandlers { + class RscDiary { + ADDON = QUOTE([{[false] call FUNC(setElements)}] call CBA_fnc_execNextFrame); + }; +}; diff --git a/addons/ui/XEH_PREP.hpp b/addons/ui/XEH_PREP.hpp index 8a6b4d2ce1..5c01ea1c3e 100644 --- a/addons/ui/XEH_PREP.hpp +++ b/addons/ui/XEH_PREP.hpp @@ -1,3 +1,4 @@ +PREP(findSetElement); PREP(moduleInit); PREP(setAdvancedElement); PREP(setElements); diff --git a/addons/ui/XEH_clientInit.sqf b/addons/ui/XEH_clientInit.sqf index 8ab7f35ab2..450ea0904f 100644 --- a/addons/ui/XEH_clientInit.sqf +++ b/addons/ui/XEH_clientInit.sqf @@ -5,7 +5,7 @@ if (!hasInterface) exitWith {}; ["ace_settingsInitialized", { // Initial settings - [true] call FUNC(setElements); + [false] call FUNC(setElements); // On load and entering/exiting a vehicle ["ace_infoDisplayChanged", { @@ -30,7 +30,7 @@ if (!hasInterface) exitWith {}; params ["_name"]; if (_name in ELEMENTS_BASIC) then { - [false] call FUNC(setElements); + [true] call FUNC(setElements); } else { if (isClass (configFile >> "ACE_UI" >> _name select [7])) then { [_name select [7], missionNamespace getVariable _name, true] call FUNC(setAdvancedElement); diff --git a/addons/ui/config.cpp b/addons/ui/config.cpp index 0b680ca136..d480a5f33b 100644 --- a/addons/ui/config.cpp +++ b/addons/ui/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/ui/functions/fnc_findSetElement.sqf b/addons/ui/functions/fnc_findSetElement.sqf new file mode 100644 index 0000000000..939d371c04 --- /dev/null +++ b/addons/ui/functions/fnc_findSetElement.sqf @@ -0,0 +1,25 @@ +/* + * Author: Jonpas + * Finds set element by element name and returns index, source of the set element and state. + * + * Arguments: + * 0: Element Name + * + * Return Value: + * None + * + * Example: + * ["ace_ui_ammoCount"] call ace_ui_fnc_findSetElement + * + * Public: No + */ +#include "script_component.hpp" + +params ["_element"]; + +{ + if (_element in _x) exitWith { + [_forEachIndex, _x select 0, _x select 2] + }; + [-1, "", false] +} forEach GVAR(elementsSet); diff --git a/addons/ui/functions/fnc_setAdvancedElement.sqf b/addons/ui/functions/fnc_setAdvancedElement.sqf index 956dc3db5b..f068c48ed0 100644 --- a/addons/ui/functions/fnc_setAdvancedElement.sqf +++ b/addons/ui/functions/fnc_setAdvancedElement.sqf @@ -39,10 +39,10 @@ private _elements = getArray (_config >> "elements"); { private _condition = call compile (getText _x); if !(_condition) exitWith { - TRACE_2("Condition False",_element,_x); // Display and print info which component forced the element except for default vehicle check if (_showHint) then { [LSTRING(Disabled), 2] call EFUNC(common,displayTextStructured); + ACE_LOGINFO_2("Attempted modification of a forced User Interface element '%1' by '%2'",_element,configName _x); }; _show = false; }; @@ -50,15 +50,15 @@ private _elements = getArray (_config >> "elements"); // Get setting from scripted API if (!_force) then { - private _index = GVAR(elementsSet) find [_element, _show]; - if (_index == -1) then { - _index = GVAR(elementsSet) find [_element, !_show]; - if (_index != -1) then { - if (_showHint) then { - [LSTRING(Disabled), 2] call EFUNC(common,displayTextStructured); - }; - _show = ((GVAR(elementsSet)) select _index) select 1; + private _setElement = [_element] call FUNC(findSetElement); + _setElement params ["_indexSet", "_sourceSet", "_showSet"]; + + if (_indexSet != -1) then { + if (_showHint) then { + [LSTRING(Disabled), 2] call EFUNC(common,displayTextStructured); + ACE_LOGINFO_2("Attempted modification of a forced User Interface element '%1' by '%2'",_element,_sourceSet); }; + _show = _showSet; }; }; diff --git a/addons/ui/functions/fnc_setElementVisibility.sqf b/addons/ui/functions/fnc_setElementVisibility.sqf index 8fbe4cf294..f8ed74c4ad 100644 --- a/addons/ui/functions/fnc_setElementVisibility.sqf +++ b/addons/ui/functions/fnc_setElementVisibility.sqf @@ -3,21 +3,23 @@ * Setter for toggling advanced element visibility. * * Arguments: - * 0: Set/Unset - * 1: Element Name - * 2: Show/Hide Element (default: false) + * 0: Source + * 1: Set/Unset + * 2: Element Name + * 3: Show/Hide Element (default: false) * * Return Value: * None * * Example: - * [true, "ace_ui_ammoCount", false] call ace_ui_fnc_setElementVisibility + * ["ace_reload", true, "ace_ui_ammoCount", false] call ace_ui_fnc_setElementVisibility * * Public: Yes */ #include "script_component.hpp" params [ + ["_source", "", [""]], ["_set", true, [true]], ["_element", "", [""]], ["_show", false, [true]] @@ -28,32 +30,35 @@ if (!isClass (configFile >> "ACE_UI" >> _element)) exitWith { ACE_LOGWARNING_1("Element '%1' does not exist",_element); }; +if (_source == "" || {_element == ""}) exitWith { + ACE_LOGWARNING("Source or Element may not be empty strings!"); +}; + private _return = false; +private _setElement = [_element] call FUNC(findSetElement); +_setElement params ["_indexSet", "_sourceSet"]; + if (_set) then { // Exit if element has been set from another component, print warning if after interface initialization - if ([_element, _show] in GVAR(elementsSet) || {[_element, !_show] in GVAR(elementsSet)}) exitWith { + if (_indexSet != -1) exitWith { if (GVAR(interfaceInitialized)) then { - ACE_LOGWARNING_2("Element '%1' already set in %2",_element,GVAR(elementsSet)); + ACE_LOGWARNING_2("Element '%1' already set by %2",_element,_sourceSet); }; }; - TRACE_3("Setting element",_element,_show,GVAR(elementsSet)); + TRACE_4("Setting element",_source,_element,_show,GVAR(elementsSet)); private _success = [_element, _show, false, true] call FUNC(setAdvancedElement); if (_success) then { - GVAR(elementsSet) pushBack [_element, _show]; + GVAR(elementsSet) pushBack [_source, _element, _show]; _return = true; }; } else { - if ([_element, _show] in GVAR(elementsSet) || {[_element, !_show] in GVAR(elementsSet)}) then { - TRACE_3("Unsetting element",_element,_show,GVAR(elementsSet)); + if (_indexSet != -1) then { + TRACE_4("Unsetting element",_sourceSet,_element,_show,GVAR(elementsSet)); - private _index = GVAR(elementsSet) find [_element, _show]; - if (_index == -1) then { - _index = GVAR(elementsSet) find [_element, !_show]; - }; - GVAR(elementsSet) deleteAt _index; + GVAR(elementsSet) deleteAt _indexSet; [_element, _show, false, true] call FUNC(setAdvancedElement); _return = true; diff --git a/addons/ui/functions/fnc_setElements.sqf b/addons/ui/functions/fnc_setElements.sqf index 877489aba4..f029a9f5ae 100644 --- a/addons/ui/functions/fnc_setElements.sqf +++ b/addons/ui/functions/fnc_setElements.sqf @@ -3,7 +3,7 @@ * Sets basic visible elements of the UI using showHUD setter. * * Arguments: - * 0: Force change even when disallowed (default: false) + * 0: Show Hint (default: false) * * Return Value: * None @@ -15,9 +15,13 @@ */ #include "script_component.hpp" -if (isArray (missionConfigFile >> "showHUD")) exitWith {}; +params [["_showHint", false]]; -params [ ["_force", false, [true]] ]; +if (isArray (missionConfigFile >> "showHUD")) exitWith { + if (_showHint) then { + [LSTRING(Disabled)] call EFUNC(common,displayTextStructured); + }; +}; ["ui", [ true, diff --git a/addons/ui/script_component.hpp b/addons/ui/script_component.hpp index d57697867c..44ca977563 100644 --- a/addons/ui/script_component.hpp +++ b/addons/ui/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT ui +#define COMPONENT_BEAUTIFIED UI #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/ui/stringtable.xml b/addons/ui/stringtable.xml index a3d5cbbd25..77b9ad66a9 100644 --- a/addons/ui/stringtable.xml +++ b/addons/ui/stringtable.xml @@ -5,198 +5,240 @@ User Interface Uživatelské rozhraní Interface do usuário + Interface utilisateur User Interface Uživatelské rozhraní Interface do usuário + Interface utilisateur This module allows toggling visible user interface parts. Este módulo permite ligar ou desligar partes da interface do usuário + Ce module permet le basculement de parties visibles de l'interface utlisateur Allow Selective UI Povolit selektivní UI Permitir IU Selecionável + Permettre l'IU selective Allow client to modify their UI. Povolit klientovi měnit jeho UI Permite o cliente modificar sua IU. + Permet aux clients de modifier leur IU Soldier/Vehicle/Weapon Information Informace o Vojákovi/Vozidlu/Zbrani Informação de Soldado/Veículo/Armamento + Soldat/Véhicule/Arme/Informations Vehicle Radar Radar vozidla Radar de Veículo + Radar de véhicule Vehicle Compass Kompas vozidla Bússola de Veículo + Compas de véhicule Command Menu Menu rozkazů Menu de Comando + Menu de commandement Group Bar Panel skupiny Barra de Grupo + Barre de groupe Weapon Name Název zbraně Nome do Armamento + Nom de l''arme Weapon Name Background Název zbraně v pozadí Fundo do Nome do Armamento + Arrière-plan du nom de l'arme Firing Mode Režim palby Modo de Disparo + Mode de tir Ammo Type Typ munice Tipo de Munição + Type de munitions Ammo Count Počet munice Quantidade de Munição + Nombre de munitions Magazine Count Počet zásobníků Quantidade de Carregadores + Nombre de chargeurs Throwable Type Typ granátů apod. Tipo de Arremessável + Type d'objets de lancer Throwable Count Počet granátů apod. Quantidade de Arremessável + Nombre d'objets de lancer Zeroing Náměr Zerar a mira + Mise à zéro Weapon Lower Info Background Informações na parte de baixo do fundo do Armamento + Arrière-plan des informations inférieures de l'arme Stance Postoj Postura + Posture Stamina Bar Panel výdrže Barra de Energia + Barre d'endurance Gunner Weapon Name Nome da arma do fuzileiro + Nom de l'arme du tireur Gunner Weapon Name Background Fundo do nome da arma do fuzileiro + Arrière-plan du nom de l'arme (tireur) Gunner Firing Mode Modo de disparo do fuzileiro + Mode de tir (tireur) Gunner Ammo Type Tipo de Munição do fuzileiro + Type de munitions (tireur) Gunner Ammo Count Quantidade de Munição do fuzileiro + Nombre de munitions (tireur) Gunner Magazine Count Quantidade de Carregadores do fuzileiro + Nombre de chargeurs (tireur) Gunner Launchable Type Tipo de Arremessável do fuzileiro + Type d'objets jetable ( tireur) Gunner Launchable Count Quantidade de Arremessável do fuzileiro + Nombre d'objets jetable (tireur) Gunner Zeroing Zerar a mira do fuzileiro + Mise à zéro ( tireur) Gunner Weapon Lower Info Background Informações na parte de baixo do fundo do Armamento do fuzileiro + Arrière-plan des informations inférieures (tireur) Vehicle Name Název vozidla Nome do Veículo + Nom du véhicule Vehicle Name Background Název vozidla v pozadí Fundo do Nome do Veículo + Arrière-plan du nom du véhicule Vehicle Fuel Bar Ukazatel paliva Barra de Combustível do Veículo + Barre d'éssence du véhicule Vehicle Speed Rychlost vozidla Velocidade do Veículo + Vitesse du véhicule Vehicle Altitude Výška vozidla Altitude do Veículo + Altitude du véhicule Vehicle Damage Poškození vozidla Dano do Veículo + Dégats du véhicule Vehicle Info Background Info o vozidle v pozadí Fundo das informações do veículo + Arrière-plan des informations du véhicule Requires Soldier/Vehicle/Weapon Information. Vyžaduje informace o Vojákovi/Vozidlu/Zbrani Requer informações de Soldado/Veículo/Armamento + Requiert les informations de soldat/Vehicule/Arme. Modifying User Interface is disabled. Změna uživatelského rozhraní je zakázána. A modificação da interface do usuário está desabilitada. + Modifications de l'interface utilisateur désactivé. Cannot modify a forced User Interface element. Não é possível modificar um elemento forçado da interface do usuário. + Impossible de modifier un élément de l'interface utilisateur forcé \ No newline at end of file diff --git a/addons/vector/config.cpp b/addons/vector/config.cpp index 8c1dd84ddb..2f2302d9af 100644 --- a/addons/vector/config.cpp +++ b/addons/vector/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {"ACE_Item_Vector"}; weapons[] = {"ACE_Vector", "ACE_VectorDay"}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/vector/script_component.hpp b/addons/vector/script_component.hpp index 3a84d60fc4..091481fbcd 100644 --- a/addons/vector/script_component.hpp +++ b/addons/vector/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT vector +#define COMPONENT_BEAUTIFIED Vector #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL @@ -14,4 +15,4 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_VECTOR #endif -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/vehiclelock/config.cpp b/addons/vehiclelock/config.cpp index cb67bca1c3..52299ca512 100644 --- a/addons/vehiclelock/config.cpp +++ b/addons/vehiclelock/config.cpp @@ -1,17 +1,18 @@ #include "script_component.hpp" class CfgPatches { - class ADDON { - units[] = {}; - weapons[] = {}; - requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"ace_interaction"}; + class ADDON { + name = COMPONENT_NAME; + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_interaction"}; author = ECSTRING(common,ACETeam); url = ECSTRING(main,URL); - authors[] = {"PabstMirror"}; - authorUrl = "https://github.com/acemod/ACE3"; - VERSION_CONFIG; - }; + authors[] = {"PabstMirror"}; + authorUrl = "https://github.com/acemod/ACE3"; + VERSION_CONFIG; + }; }; #include "ACE_Settings.hpp" diff --git a/addons/vehiclelock/script_component.hpp b/addons/vehiclelock/script_component.hpp index 23b0ea9795..8846951780 100644 --- a/addons/vehiclelock/script_component.hpp +++ b/addons/vehiclelock/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT vehiclelock +#define COMPONENT_BEAUTIFIED Vehicle Lock #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/vehicles/config.cpp b/addons/vehicles/config.cpp index 9d2cd3caac..9b0d595fc8 100644 --- a/addons/vehicles/config.cpp +++ b/addons/vehicles/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; @@ -10,6 +11,9 @@ class CfgPatches { authors[] = {"commy2","KoffeinFlummi"}; url = ECSTRING(main,URL); VERSION_CONFIG; + + // this prevents any patched class from requiring this addon + addonRootClass = "A3_Characters_F"; }; }; diff --git a/addons/vehicles/script_component.hpp b/addons/vehicles/script_component.hpp index 1f1b678acf..d8143e3fdc 100644 --- a/addons/vehicles/script_component.hpp +++ b/addons/vehicles/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT vehicles +#define COMPONENT_BEAUTIFIED Vehicles #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/viewdistance/XEH_clientInit.sqf b/addons/viewdistance/XEH_clientInit.sqf index 2572931935..1fed0bd818 100644 --- a/addons/viewdistance/XEH_clientInit.sqf +++ b/addons/viewdistance/XEH_clientInit.sqf @@ -23,7 +23,7 @@ if (!hasInterface) exitWith {}; // Set the EH which waits for a vehicle change to automatically swap between On Foot/In Land Vehicle/In Air Vehicle // Also run when SettingsInitialized runs (not guaranteed) - ["ace_playerVehicleChanged",{ + ["vehicle",{ [false] call FUNC(adaptViewDistance); - }] call CBA_fnc_addEventHandler; + }] call CBA_fnc_addPlayerEventHandler; }] call CBA_fnc_addEventHandler; diff --git a/addons/viewdistance/config.cpp b/addons/viewdistance/config.cpp index bf3dd29d24..cf986569e0 100644 --- a/addons/viewdistance/config.cpp +++ b/addons/viewdistance/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/viewdistance/script_component.hpp b/addons/viewdistance/script_component.hpp index f5cd31f8ce..f78bfcbc1c 100644 --- a/addons/viewdistance/script_component.hpp +++ b/addons/viewdistance/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT viewdistance +#define COMPONENT_BEAUTIFIED View Distance #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/weaponselect/config.cpp b/addons/weaponselect/config.cpp index b6a98e6d88..cf8e08a3ba 100644 --- a/addons/weaponselect/config.cpp +++ b/addons/weaponselect/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/weaponselect/script_component.hpp b/addons/weaponselect/script_component.hpp index 7ab95f9887..743d471a2a 100644 --- a/addons/weaponselect/script_component.hpp +++ b/addons/weaponselect/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT weaponselect +#define COMPONENT_BEAUTIFIED Weapon Select #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL @@ -14,4 +15,4 @@ #define DEBUG_SETTINGS DEBUG_ENABLED_WEAPONSELECT #endif -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/weather/CfgEventhandlers.hpp b/addons/weather/CfgEventhandlers.hpp index 74dfaab913..f913c4c22b 100644 --- a/addons/weather/CfgEventhandlers.hpp +++ b/addons/weather/CfgEventhandlers.hpp @@ -17,3 +17,9 @@ class Extended_PostInit_EventHandlers { init = QUOTE(call COMPILE_FILE(XEH_postInit)); }; }; + +class Extended_DisplayLoad_EventHandlers { + class Display3DEN { + ADDON = QUOTE(call COMPILE_FILE(init3DEN)); + }; +}; diff --git a/addons/weather/config.cpp b/addons/weather/config.cpp index 2444064f41..f8b8130d37 100644 --- a/addons/weather/config.cpp +++ b/addons/weather/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/weather/functions/fnc_displayWindInfo.sqf b/addons/weather/functions/fnc_displayWindInfo.sqf index 5ea69c59a0..10a1e45861 100644 --- a/addons/weather/functions/fnc_displayWindInfo.sqf +++ b/addons/weather/functions/fnc_displayWindInfo.sqf @@ -2,10 +2,10 @@ * Author: Ruthberg * Displays a wind info (colored arrow) in the top left corner of the screen * - * Argument: + * Arguments: * None * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/weather/functions/fnc_getMapData.sqf b/addons/weather/functions/fnc_getMapData.sqf index e1b56f2ed2..08a6f38568 100644 --- a/addons/weather/functions/fnc_getMapData.sqf +++ b/addons/weather/functions/fnc_getMapData.sqf @@ -2,10 +2,10 @@ * Author: Ruthberg, esteldunedain * Get the weather data for the current map * - * Argument: + * Arguments: * None * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/weather/functions/fnc_getWind.sqf b/addons/weather/functions/fnc_getWind.sqf index 7c08e813e1..2d29335026 100644 --- a/addons/weather/functions/fnc_getWind.sqf +++ b/addons/weather/functions/fnc_getWind.sqf @@ -2,10 +2,10 @@ * Author: ACE2 Team, Ruthberg * Calculate current wind locally from the data broadcasted by the server * - * Argument: + * Arguments: * None * - * Return value: + * Return Value: * Wind * * Example: diff --git a/addons/weather/functions/fnc_initWind.sqf b/addons/weather/functions/fnc_initWind.sqf index ddd314c0c6..634542c1e4 100644 --- a/addons/weather/functions/fnc_initWind.sqf +++ b/addons/weather/functions/fnc_initWind.sqf @@ -2,10 +2,10 @@ * Author: Ruthberg * Inits the wind variables on mission start * - * Argument: + * Arguments: * None * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/weather/functions/fnc_serverController.sqf b/addons/weather/functions/fnc_serverController.sqf index 9791049914..79d2aab93e 100644 --- a/addons/weather/functions/fnc_serverController.sqf +++ b/addons/weather/functions/fnc_serverController.sqf @@ -2,10 +2,10 @@ * Author: Ruthberg * Gather weather parameters and broadcast them to the clients * - * Argument: + * Arguments: * None * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/weather/functions/fnc_updateAceWeather.sqf b/addons/weather/functions/fnc_updateAceWeather.sqf index 3f2f9a356c..db8783cd83 100644 --- a/addons/weather/functions/fnc_updateAceWeather.sqf +++ b/addons/weather/functions/fnc_updateAceWeather.sqf @@ -2,10 +2,10 @@ * Author: ACE2 Team, esteldunedain, ruthberg * Updates the wind and rain evolution on the server. Broadcasts the current and next values to the clients * - * Argument: + * Arguments: * None * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/weather/functions/fnc_updateHumidity.sqf b/addons/weather/functions/fnc_updateHumidity.sqf index 66a351096c..acd103615b 100644 --- a/addons/weather/functions/fnc_updateHumidity.sqf +++ b/addons/weather/functions/fnc_updateHumidity.sqf @@ -2,10 +2,10 @@ * Author: ACE2 Team * Updates GVAR(currentHumidity) * - * Argument: + * Arguments: * Nothing * - * Return value: + * Return Value: * Nothing * * Example: diff --git a/addons/weather/functions/fnc_updateRain.sqf b/addons/weather/functions/fnc_updateRain.sqf index ccacb09955..b073a6a24c 100644 --- a/addons/weather/functions/fnc_updateRain.sqf +++ b/addons/weather/functions/fnc_updateRain.sqf @@ -2,10 +2,10 @@ * Author: ACE2 Team, Ruthberg * Updates rain based on ACE_RAIN_PARAMS * - * Argument: + * Arguments: * Nothing * - * Return value: + * Return Value: * Nothing * * Example: diff --git a/addons/weather/functions/fnc_updateTemperature.sqf b/addons/weather/functions/fnc_updateTemperature.sqf index 9ff11859f4..6f2d911c15 100644 --- a/addons/weather/functions/fnc_updateTemperature.sqf +++ b/addons/weather/functions/fnc_updateTemperature.sqf @@ -2,10 +2,10 @@ * Author: ACE2 Team * Updates GVAR(currentTemperature) based on the map data * - * Argument: + * Arguments: * Nothing * - * Return value: + * Return Value: * Nothing * * Example: diff --git a/addons/weather/functions/fnc_updateWind.sqf b/addons/weather/functions/fnc_updateWind.sqf index 75724e3674..72ae0470ba 100644 --- a/addons/weather/functions/fnc_updateWind.sqf +++ b/addons/weather/functions/fnc_updateWind.sqf @@ -2,10 +2,10 @@ * Author: ACE2 Team, Ruthberg * Updates wind, gusts and waves based on ACE_wind * - * Argument: + * Arguments: * Nothing * - * Return value: + * Return Value: * Nothing * * Example: diff --git a/addons/weather/init3DEN.sqf b/addons/weather/init3DEN.sqf new file mode 100644 index 0000000000..1bae6c4d95 --- /dev/null +++ b/addons/weather/init3DEN.sqf @@ -0,0 +1,15 @@ +// point of this file is to disable "auto-weather" by default +// we want this, because it breaks weather commands we use in this component +#include "script_component.hpp" + +// cannot create checkboxes which have the default value "true" +// 3den uses inverted checkboxes instead, but those only change in appearence +// we have to auto set these settings manually - on mission creation +add3DENEventHandler ["onMissionNew", { + set3DENMissionAttributes [ + ["Intel", "IntelRainIsForced", true], + ["Intel", "IntelLightningIsForced", true], + ["Intel", "IntelWavesIsForced", true], + ["Intel", "IntelWindIsForced", true] + ]; +}]; diff --git a/addons/weather/script_component.hpp b/addons/weather/script_component.hpp index 84d7e9987b..7148fa4bb1 100644 --- a/addons/weather/script_component.hpp +++ b/addons/weather/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT weather +#define COMPONENT_BEAUTIFIED Weather #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/winddeflection/config.cpp b/addons/winddeflection/config.cpp index 2faf536423..0e193dace5 100644 --- a/addons/winddeflection/config.cpp +++ b/addons/winddeflection/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/winddeflection/script_component.hpp b/addons/winddeflection/script_component.hpp index e4cc1df840..10deceddd8 100644 --- a/addons/winddeflection/script_component.hpp +++ b/addons/winddeflection/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT winddeflection +#define COMPONENT_BEAUTIFIED Wind Deflection #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL @@ -14,4 +15,4 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_WINDDEFLECTION #endif -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/yardage450/config.cpp b/addons/yardage450/config.cpp index 18779bd5be..4af07b18fb 100644 --- a/addons/yardage450/config.cpp +++ b/addons/yardage450/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {"ACE_Item_Yardage450"}; weapons[] = {"ACE_Yardage450"}; requiredVersion = REQUIRED_VERSION; diff --git a/addons/yardage450/script_component.hpp b/addons/yardage450/script_component.hpp index d49c301359..bb901a9b50 100644 --- a/addons/yardage450/script_component.hpp +++ b/addons/yardage450/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT yardage450 +#define COMPONENT_BEAUTIFIED Yardage 450 #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL @@ -14,4 +15,4 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_YARDAGE450 #endif -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/zeus/CfgEventHandlers.hpp b/addons/zeus/CfgEventHandlers.hpp index 6af3e0ef56..becf395052 100644 --- a/addons/zeus/CfgEventHandlers.hpp +++ b/addons/zeus/CfgEventHandlers.hpp @@ -16,11 +16,3 @@ class Extended_PostInit_EventHandlers { init = QUOTE(call COMPILE_FILE(XEH_postInit)); }; }; - -class Extended_InitPost_EventHandlers { - class AllVehicles { - class ADDON { - serverInit = QUOTE(call FUNC(addObjectToCurator)); - }; - }; -}; diff --git a/addons/zeus/XEH_postInit.sqf b/addons/zeus/XEH_postInit.sqf index c6ca259789..9062ae5e9a 100644 --- a/addons/zeus/XEH_postInit.sqf +++ b/addons/zeus/XEH_postInit.sqf @@ -1,5 +1,12 @@ #include "script_component.hpp" +["ace_settingsInitialized",{ + // Only add an InitPost EH if setting is enabled (and apply retroactively) + if (isServer && GVAR(autoAddObjects)) then { + ["AllVehicles", "InitPost", FUNC(addObjectToCurator), true, [], true] call CBA_fnc_addClassEventHandler; + }; +}] call CBA_fnc_addEventHandler; + // Global skill module PVs values for persistence, just listen for the PV QGVAR(GlobalSkillAI) addPublicVariableEventHandler FUNC(moduleGlobalSetSkill); diff --git a/addons/zeus/config.cpp b/addons/zeus/config.cpp index 0d348333e7..3ec87b637c 100644 --- a/addons/zeus/config.cpp +++ b/addons/zeus/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = { QGVAR(moduleDefendArea), QGVAR(moduleGlobalSetSkill), diff --git a/addons/zeus/functions/fnc_addObjectToCurator.sqf b/addons/zeus/functions/fnc_addObjectToCurator.sqf index d727bb6826..cab5b3da6f 100644 --- a/addons/zeus/functions/fnc_addObjectToCurator.sqf +++ b/addons/zeus/functions/fnc_addObjectToCurator.sqf @@ -15,11 +15,6 @@ params ["_object"]; -if !(EGVAR(common,settingsInitFinished)) exitWith { - TRACE_1("pushing to runAtSettingsInitialized", _this); - EGVAR(common,runAtSettingsInitialized) pushBack [FUNC(addObjectToCurator), _this]; -}; - if (!(_object getVariable [QGVAR(addObject), GVAR(autoAddObjects)])) exitWith {}; [{ diff --git a/addons/zeus/script_component.hpp b/addons/zeus/script_component.hpp index 953418761f..ba32164b87 100644 --- a/addons/zeus/script_component.hpp +++ b/addons/zeus/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT zeus +#define COMPONENT_BEAUTIFIED Zeus #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/addons/zeus/stringtable.xml b/addons/zeus/stringtable.xml index 186dc4cfc5..cc37293a25 100644 --- a/addons/zeus/stringtable.xml +++ b/addons/zeus/stringtable.xml @@ -8,7 +8,7 @@ Nastavení Zeuse Zeus-Einstellungen Ajustes do Zeus - Paramètres du Zeus + Paramètres de Zeus Zeus beállítások Настройки Зевса Impostazioni Zeus @@ -32,7 +32,7 @@ Zpráva o novém Zeusovi Aufstiegsnachrichten Mensagens de ascensão - Message ascension + Message d'ascension Felemelkedési üzenetek Сообщения о вознесении Messaggi di Ascesa @@ -44,7 +44,7 @@ Zobrazit globální zprávu když je hráč přiřazen jako Zeus. Zeige globale Popup-Nachrichten wenn ein Spieler zu Zeus wird. Mostra uma mensagem popup quando um jogador é atribuido ao Zeus. - Affiche un message en global quand un joueur est assigner comme Zeus + Affiche un message global quand un joueur est assigné en tant que Zeus Globális üzeneteket jelez ki, ha egy játékos Zeus-nak lesz beosztva. Отображает глобальное всплывающее сообщение, когда один из игроков становится Зевсом. Mostra messaggi popup globali quando un giocatore viene assegnato come Zeus. @@ -183,51 +183,67 @@ Defend Area + Défendre la zone Global AI Skill + Compétence global de l'IA General Skill + Compétence générale Changes: general, commanding, courage + Change: general, commanding, courage Accuracy + Précision Changes: aimingAccuracy + Change: aimingAccuracy Weapon Handling + Maniement d'armes Changes: aimingShake, aimingSpeed, reloadSpeed + Change: aimingShake, aimingSpeed, reloadSpeed Spotting + repérage Changes: spotDistance, spotTime + Change: spotDistance, spotTime Seek Cover + Chercher couverture Should AI seek cover + L'IA devrait elle chercher couverture Auto Combat + Combat automatique Should AI automatically switch to combat mode + L'IA devrait elle passer automatiquement en mode combat Group Side + Côté du groupe Patrol Area + Zone de patrouille Toggle Surrender @@ -243,18 +259,23 @@ Teleport Players + Téléporter joueurs Player + Joueur Teleport selected player to module position + Téléporter le joueur sélectionné à la position du module Teleport Group + Téléporter le groupe Teleports all units in group + Téléporte toutes les unités du groupe Toggle Unconscious @@ -270,9 +291,11 @@ Search Area + Chercher la zone Search Nearby Building + Chercher le bâtiment proche Assign Medic @@ -411,13 +434,15 @@ Unit must belong to an appropriate side + L'unité doit appartenir à un côté approprié Nearest building is too far away + Le bâtiment le plus proche est trop loin Place on a unit - Rien sous le curseur + Placez sur une unité Es wurde nichts ausgewählt Nada bajo el ratón Coloque em uma unidade @@ -463,21 +488,27 @@ Cargo: + Cargo: Task Position + Position de la tâche Select a position to perform the task at + Sélectionne une position où accomplir la tâche Task Radius + Rayon de la tâche Radius to perform the task within + Rayon dans lequel la tâche prend place Invalid radius entered + rayon invalide entré - + \ No newline at end of file diff --git a/docs/README_DE.md b/docs/README_DE.md index 95a7b3c406..f7985229ae 100644 --- a/docs/README_DE.md +++ b/docs/README_DE.md @@ -4,7 +4,7 @@

- ACE3 Version + ACE3 Version ACE3 Fehlermeldungen diff --git a/docs/README_PL.md b/docs/README_PL.md index 87884e3a68..0122aa9c78 100644 --- a/docs/README_PL.md +++ b/docs/README_PL.md @@ -3,7 +3,7 @@

- ACE3 Wersja + ACE3 Wersja ACE3 Zagadnienia diff --git a/extensions/CMakeLists.txt b/extensions/CMakeLists.txt index a0959dad5c..7ed8386dba 100644 --- a/extensions/CMakeLists.txt +++ b/extensions/CMakeLists.txt @@ -1,9 +1,9 @@ cmake_minimum_required (VERSION 3.0) project (ACE) -set_property(GLOBAL PROPERTY USE_FOLDERS ON) +set_property(GLOBAL PROPERTY USE_FOLDERS ON) -if(WIN32) +if(WIN32) add_definitions(/DWINVER=0x0600 /D_WIN32_WINNT=0x0600) endif() @@ -41,7 +41,7 @@ if(USE_BULLET) set(BACKUP_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}) set(BACKUP_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}) set(BACKUP_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) - + add_definitions(-DUSE_DIRECTX) add_subdirectory(lib/bullet3) @@ -58,7 +58,7 @@ if(USE_BULLET) set_target_properties(BulletDynamics PROPERTIES FOLDER Bullet3) set_target_properties(BulletFileLoader PROPERTIES FOLDER Bullet3) set_target_properties(BulletSoftBody PROPERTIES FOLDER Bullet3) - + set_target_properties(BulletWorldImporter PROPERTIES FOLDER Bullet3) set_target_properties(BulletXmlWorldImporter PROPERTIES FOLDER Bullet3) set_target_properties(ConvexDecomposition PROPERTIES FOLDER Bullet3) @@ -68,11 +68,11 @@ if(USE_BULLET) set_target_properties(HACD PROPERTIES FOLDER Bullet3) set_target_properties(OpenGLWindow PROPERTIES FOLDER Bullet3) set_target_properties(LinearMath PROPERTIES FOLDER Bullet3) - + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${BACKUP_ARCHIVE_OUTPUT_DIRECTORY}) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${BACKUP_LIBRARY_OUTPUT_DIRECTORY}) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${BACKUP_RUNTIME_OUTPUT_DIRECTORY}) - + include_directories(BEFORE "lib/bullet3/src") endif() if(USE_DIRECTX) @@ -89,7 +89,7 @@ endif() string(TIMESTAMP ACE_BUILDSTAMP "%Y-%m-%dT%H:%M:%SZ") set(ACE_VERSION_MAJOR 3) -set(ACE_VERSION_MINOR 5) +set(ACE_VERSION_MINOR 6) set(ACE_VERSION_REVISION 0) EXECUTE_PROCESS(COMMAND git rev-parse --verify HEAD OUTPUT_VARIABLE T_ACE_VERSION_BUILD @@ -100,14 +100,14 @@ string(SUBSTRING ${T_ACE_VERSION_BUILD} 0 7 ACE_VERSION_BUILD ) message("Building for: " ${ACE_VERSION_MAJOR}.${ACE_VERSION_MINOR}.${ACE_VERSION_REVISION}-${ACE_VERSION_BUILD}) configure_file( - "${CMAKE_CURRENT_SOURCE_DIR}/common/ace_version.hpp.in" - "${CMAKE_CURRENT_BINARY_DIR}/common/ace_version.hpp" + "${CMAKE_CURRENT_SOURCE_DIR}/common/ace_version.hpp.in" + "${CMAKE_CURRENT_BINARY_DIR}/common/ace_version.hpp" @ONLY) if(MSVC) configure_file( - "${CMAKE_CURRENT_SOURCE_DIR}/common/ace_version_win32.rc.in" - "${CMAKE_CURRENT_BINARY_DIR}/common/ace_version_win32.rc" + "${CMAKE_CURRENT_SOURCE_DIR}/common/ace_version_win32.rc.in" + "${CMAKE_CURRENT_BINARY_DIR}/common/ace_version_win32.rc" @ONLY) set(GLOBAL_RC ${CMAKE_CURRENT_BINARY_DIR}/common/ace_version_win32.rc) endif() @@ -139,4 +139,4 @@ endif() -message("Build Type: ${CMAKE_BUILD_TYPE}") \ No newline at end of file +message("Build Type: ${CMAKE_BUILD_TYPE}") diff --git a/extras/assets/icons/icon_mineDetector.ai b/extras/assets/icons/icon_mineDetector.ai new file mode 100644 index 0000000000..595bc7f512 --- /dev/null +++ b/extras/assets/icons/icon_mineDetector.ai @@ -0,0 +1,1459 @@ +%PDF-1.5 % +1 0 obj <> endobj 2 0 obj <>stream + + + + + application/vnd.adobe.illustrator + + + icon_mineDetector + + + + + 2016-06-18T20:02:47-03:00 + 2016-06-18T20:02:47-03:00 + 2016-06-18T20:02:47-02:00 + Adobe Illustrator CS5 + + + + 256 + 112 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAcAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A6j5o80eYLXzBfW9vfSxw xylURSKAUHtiqV/4x8z/APVxm+8f0xV3+MfM/wD1cZvvH9MVd/jHzP8A9XGb7x/TFXf4x8z/APVx m+8f0xV3+MfM/wD1cZvvH9MVd/jHzP8A9XGb7x/TFXf4x8z/APVxm+8f0xV3+MfM/wD1cZvvH9MV d/jHzP8A9XGb7x/TFXf4x8z/APVxm+8f0xV3+MfM/wD1cZvvH9MVd/jHzP8A9XGb7x/TFXf4x8z/ APVxm+8f0xV3+MfM/wD1cZvvH9MVd/jHzP8A9XGb7x/TFXf4x8z/APVxm+8f0xV3+MfM/wD1cZvv H9MVd/jHzP8A9XGb7x/TFXf4x8z/APVxm+8f0xV3+MfM/wD1cZvvH9MVd/jHzP8A9XGb7x/TFXf4 x8z/APVxm+8f0xV3+MfM/wD1cZvvH9MVd/jHzP8A9XGb7x/TFXf4x8z/APVxm+8f0xV3+MfM/wD1 cZvvH9MVd/jHzP8A9XGb7x/TFXf4x8z/APVxm+8f0xV3+MfM/wD1cZvvH9MVd/jHzP8A9XGb7x/T FU08r+aPMF15gsbe4vpZIZJQroxFCKH2xVK/OP8Ayk+o/wDGY/qGKpNirsVdirsVdirsVdirsVdi rsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVTnyd/yk+nf8Zh+o4q7zj/yk +o/8Zj+oYqk2KuxV2KuxV2KuxV2Ko5tE1NdJXVjAfqLP6Yl9/Gn8tdq+OKoHFXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYqjoNF1K40yfUooS1pbMFlce/UgdwvfwxVA4q7FXYq7FXYq7FXYqnPk7/lJ9 O/4zD9RxV3nH/lJ9R/4zH9QxVJsVdirsVdirsVdiqf8Ak/yxLrmoUcFbGAhrmQbV8EU+Lfhir197 CzeyNi0K/VCnpejT4eFKUpirxzzX5an0LUTFu9pLVrWU91/lP+UvfFUkxV2KuxV2KuxV2KuxV2Ku xV2Kpn5cs9NvNYt7fUpvQtXPxN05Hshb9nl44qybzx5GFmp1LSoj9UA/0i3WpMdP21rvx8fD5dFW K6Ho11rGpRWVvsX3kkpUIg+0xxV7ZY6ZZ2Wnx2EEY+rRpw4HfkD9ot48u+KvKfO3lR9FvfWtwTp1 wT6J68G6mMn9XtirGsVdirsVdirsVdiqc+Tv+Un07/jMP1HFXecf+Un1H/jMf1DFUmxV2KuxV2Ku xVG6NpF3q2oRWVqtXc1Zj9lEHVm9hir2vR9JtNK0+KytVpHGPibu7Hqze5xVG4ql+u6Laaxp0lnc igbeKQdUcdGGKvFdV0y70y/lsrpeMsRpXsw7MPYjFUJirsVdirsVdirsVdirsVdirsVeieRfOwkE ekao9WNI7S4bv2Eb+/gcVZhpXl/S9KluZbKIRtdPzfwA/lXwWtTTFUxxVDalp1pqNlLZ3Sc4ZRQ+ IPZh7g9MVeK6/od1ouovZzioHxQy9nQ9GH8cVS3FXYq7FXYq7FU58nf8pPp3/GYfqOKu84/8pPqP /GY/qGKpNirsVdirsVXwwyzzJDCheWRgqIu5JOwAxV7J5Q8sRaHp/F6NfT0a5kHj2RfZfxxVPsVd irsVY75z8rR63Y84QF1C3BMD9OQ6mNj4Ht4HFXj0kbxyNHIpSRCVdGFCCNiCDiq3FXYq7FXYq7FX Yq7FXYq2qszBVBLE0AG5JOKsl1TyHq9ho0OpEc248ru3UfFEDuD70H2vDFWT+RfO/wBc9PStTf8A 0sfDbXDf7sA/Zc/z+B7/AD6qs4xV2KpP5o8uW+uacYGolzHVraY/st4H/Jbvirxe7tbi0uZLa4Qx zwsVkQ9QRiqlirsVdirsVTnyd/yk+nf8Zh+o4q7zj/yk+o/8Zj+oYqk2KuxV2KuxV6f+X3lL6nEu rXqUu5V/0aNhvGjftH/KYfcMVZtirsVdirsVdirA/wAw/KXro2s2KfvkFbyJf2lH+7B7r39sVebY q7FXYq7FXYq7FXYq7FXoP5d+UuRTWr5NhvZRMOp/36f+Nfv8MVeiEAih3B6jFXmfnfyQ1kz6rpSE WwPOeBOsR680p+z+r5dFU48jedf0gq6bqLgXyCkMx29UDsf8sfjirNMVdirEPPvlIanbHULNP9yE C/GijeWMdv8AWXt93hirynFXYq7FXYqnPk7/AJSfTv8AjMP1HFXecf8AlJ9R/wCMx/UMVSbFXYq7 FWY/l75Wj1K5Oo3YDWlq9EiNDzlG/wAQ/lXr74q9UxV2KuxV2KuxV2KuIrsemKvJvP3lZNJvFvLU BbG6Y0jH+65OpUD+U9RirE8VdirsVdirsVdirJfI/lhda1BpLin1G1Iada7uT9lPGhpucVevqqoo RAFVRRVGwAHQAYq3iriAQQRUHYg9KYq8w86+SpNNkbVdKUi0B5yxJXlC1a8lp+z+rFWQeR/OiapE thfuF1JB8DnYTKB1H+WO4+nxoqy/FXYq8z/MbytHaSfpi0AWCd6XMWwpI37Sj/K7++KsGxV2KuxV OfJ3/KT6d/xmH6jirvOP/KT6j/xmP6hiqTYq7FXYqjtJ1rUtJuRcWMxjb9teqOPBl6HFXo2h/mVp V2qx6iPqVx0L7tET7Hqv0/firLoJ4J4xLBIssTfZkQhlPyI2xVfirsVdiqncXNvbRGW4lSGJftSS MFUfScVYfrv5mabahotLX65P09U1WIH/AIk30ffirzrVNW1DVLo3N9MZZD9kHZVHgq9AMVQeKuxV 2KuxV2KuxVE6dqV9p10t1ZTNDMv7S9x4EHYj2OKvRNC/M2xnVYdWT6tN09dAWiPuRuy/jirM7W7t buITWsyTxHo8bBh94xVVxVzKrKVYAqRQg7gg4q8w86eTJNLlOraVVbVWDyRoSGgauzKRvxr92Ksk 8lec4tXhWyvGCanGvXYCYD9pf8r+YfSPZVMPNXmRtCslnFq9w0h4owoI1btzbqPbbfFXk2ta/qms 3HrXsvILX04l2jQH+Vf49cVS7FXYq7FU58nf8pPp3/GYfqOKu84/8pPqP/GY/qGKpNirsVdirsVd iqvaX99ZvztLiS3f+aNyh+mhxVO7f8wPNUIA+uCVR2kjQ/jQH8cVRX/KzfMvDj+4r/N6Zr/xKmKo S58/+apwR9c9JT2jRF/GnL8cVSS6vby7k9S6nknf+aRix/E4qo4q7FXYq7FXYq7FXYq7FXYq7FVW 2u7q1k9W2meCT+eNih+8EYqndr5981W4Ci9MijtKiP8A8MRy/HFUYPzN8yhafuCf5jGa/wDEqYqh brz/AOaLmNo2uVSNwVdEjjoQeo3BOKsfjkkjkWSNikiEMjqaEEbggjFXpejeetI1HRZ4Ne4rLFHS ZCKidelUH8/t9I9lXm1yYGuJTbqyQFiYkc1YLX4QSO9MVU8VdirsVTnyd/yk+nf8Zh+o4q7zj/yk +o/8Zj+oYqk2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV 2KuxV2KuxVOfJ3/KT6d/xmH6jirvOP8Ayk+o/wDGY/qGKpNirsVdirsVdirsVdirsVdirsVdirsV dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVTnyd/yk+nf8Zh+o4q7zj/yk+o/8Zj+o Yqk2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku xVOfJ3/KT6d/xmH6jirJPMPkHXL/AFq7vIGhEM8hZOTMDSneinFUv/5Vl5j/AJrf/g3/AOaMVd/y rLzH/Nb/APBv/wA0Yq7/AJVl5j/mt/8Ag3/5oxV3/KsvMf8ANb/8G/8AzRirv+VZeY/5rf8A4N/+ aMVd/wAqy8x/zW//AAb/APNGKu/5Vl5j/mt/+Df/AJoxV3/KsvMf81v/AMG//NGKu/5Vl5j/AJrf /g3/AOaMVd/yrLzH/Nb/APBv/wA0Yq7/AJVl5j/mt/8Ag3/5oxV3/KsvMf8ANb/8G/8AzRirv+VZ eY/5rf8A4N/+aMVd/wAqy8x/zW//AAb/APNGKu/5Vl5j/mt/+Df/AJoxV3/KsvMf81v/AMG//NGK u/5Vl5j/AJrf/g3/AOaMVd/yrLzH/Nb/APBv/wA0Yq7/AJVl5j/mt/8Ag3/5oxV3/KsvMf8ANb/8 G/8AzRirv+VZeY/5rf8A4N/+aMVd/wAqy8x/zW//AAb/APNGKu/5Vl5j/mt/+Df/AJoxV3/KsvMf 81v/AMG//NGKu/5Vl5j/AJrf/g3/AOaMVd/yrLzH/Nb/APBv/wA0Yq7/AJVl5j/mt/8Ag3/5oxV3 /KsvMf8ANb/8G/8AzRirv+VZeY/5rf8A4N/+aMVd/wAqy8x/zW//AAb/APNGKph5e8g65Ya1aXk7 QmGCQM/FmJpTtVRir//Z + + + + + + uuid:3b343354-3711-493c-a685-1730c0f2c706 + xmp.did:6DDF9D21A735E61183EAF19D29B4D002 + uuid:5D20892493BFDB11914A8590D31508C8 + default + + uuid:29e17876-faee-8948-9286-1741a44a591b + xmp.did:F77F11740720681188C6A5613A2C864B + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + + + + saved + xmp.iid:6DDF9D21A735E61183EAF19D29B4D002 + 2016-06-18T20:02:40-03:00 + Adobe Illustrator CS5 + / + + + + + + Document + Print + + + False + False + 1 + + 64.000000 + 64.000000 + Pixels + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 35 + 31 + 32 + + + CMYK Red + RGB + PROCESS + 237 + 28 + 36 + + + CMYK Yellow + RGB + PROCESS + 255 + 242 + 0 + + + CMYK Green + RGB + PROCESS + 0 + 166 + 81 + + + CMYK Cyan + RGB + PROCESS + 0 + 174 + 239 + + + CMYK Blue + RGB + PROCESS + 46 + 49 + 146 + + + CMYK Magenta + RGB + PROCESS + 236 + 0 + 140 + + + C=15 M=100 Y=90 K=10 + RGB + PROCESS + 190 + 30 + 45 + + + C=0 M=90 Y=85 K=0 + RGB + PROCESS + 239 + 65 + 54 + + + C=0 M=80 Y=95 K=0 + RGB + PROCESS + 241 + 90 + 41 + + + C=0 M=50 Y=100 K=0 + RGB + PROCESS + 247 + 148 + 30 + + + C=0 M=35 Y=85 K=0 + RGB + PROCESS + 251 + 176 + 64 + + + C=5 M=0 Y=90 K=0 + RGB + PROCESS + 249 + 237 + 50 + + + C=20 M=0 Y=100 K=0 + RGB + PROCESS + 215 + 223 + 35 + + + C=50 M=0 Y=100 K=0 + RGB + PROCESS + 141 + 198 + 63 + + + C=75 M=0 Y=100 K=0 + RGB + PROCESS + 57 + 181 + 74 + + + C=85 M=10 Y=100 K=10 + RGB + PROCESS + 0 + 148 + 68 + + + C=90 M=30 Y=95 K=30 + RGB + PROCESS + 0 + 104 + 56 + + + C=75 M=0 Y=75 K=0 + RGB + PROCESS + 43 + 182 + 115 + + + C=80 M=10 Y=45 K=0 + RGB + PROCESS + 0 + 167 + 157 + + + C=70 M=15 Y=0 K=0 + RGB + PROCESS + 39 + 170 + 225 + + + C=85 M=50 Y=0 K=0 + RGB + PROCESS + 28 + 117 + 188 + + + C=100 M=95 Y=5 K=0 + RGB + PROCESS + 43 + 57 + 144 + + + C=100 M=100 Y=25 K=25 + RGB + PROCESS + 38 + 34 + 98 + + + C=75 M=100 Y=0 K=0 + RGB + PROCESS + 102 + 45 + 145 + + + C=50 M=100 Y=0 K=0 + RGB + PROCESS + 146 + 39 + 143 + + + C=35 M=100 Y=35 K=10 + RGB + PROCESS + 158 + 31 + 99 + + + C=10 M=100 Y=50 K=0 + RGB + PROCESS + 218 + 28 + 92 + + + C=0 M=95 Y=20 K=0 + RGB + PROCESS + 238 + 42 + 123 + + + C=25 M=25 Y=40 K=0 + RGB + PROCESS + 194 + 181 + 155 + + + C=40 M=45 Y=50 K=5 + RGB + PROCESS + 155 + 133 + 121 + + + C=50 M=50 Y=60 K=25 + RGB + PROCESS + 114 + 102 + 88 + + + C=55 M=60 Y=65 K=40 + RGB + PROCESS + 89 + 74 + 66 + + + C=25 M=40 Y=65 K=0 + RGB + PROCESS + 196 + 154 + 108 + + + C=30 M=50 Y=75 K=10 + RGB + PROCESS + 169 + 124 + 80 + + + C=35 M=60 Y=80 K=25 + RGB + PROCESS + 139 + 94 + 60 + + + C=40 M=65 Y=90 K=35 + RGB + PROCESS + 117 + 76 + 41 + + + C=40 M=70 Y=100 K=50 + RGB + PROCESS + 96 + 57 + 19 + + + C=50 M=70 Y=80 K=70 + RGB + PROCESS + 60 + 36 + 21 + + + + + + Grays + 1 + + + + C=0 M=0 Y=0 K=100 + RGB + PROCESS + 35 + 31 + 32 + + + C=0 M=0 Y=0 K=90 + RGB + PROCESS + 65 + 64 + 66 + + + C=0 M=0 Y=0 K=80 + RGB + PROCESS + 88 + 89 + 91 + + + C=0 M=0 Y=0 K=70 + RGB + PROCESS + 109 + 110 + 113 + + + C=0 M=0 Y=0 K=60 + RGB + PROCESS + 128 + 130 + 133 + + + C=0 M=0 Y=0 K=50 + RGB + PROCESS + 147 + 149 + 152 + + + C=0 M=0 Y=0 K=40 + RGB + PROCESS + 167 + 169 + 172 + + + C=0 M=0 Y=0 K=30 + RGB + PROCESS + 188 + 190 + 192 + + + C=0 M=0 Y=0 K=20 + RGB + PROCESS + 209 + 211 + 212 + + + C=0 M=0 Y=0 K=10 + RGB + PROCESS + 230 + 231 + 232 + + + C=0 M=0 Y=0 K=5 + RGB + PROCESS + 241 + 242 + 242 + + + + + + Brights + 1 + + + + C=0 M=100 Y=100 K=0 + RGB + PROCESS + 237 + 28 + 36 + + + C=0 M=75 Y=100 K=0 + RGB + PROCESS + 242 + 101 + 34 + + + C=0 M=10 Y=95 K=0 + RGB + PROCESS + 255 + 222 + 23 + + + C=85 M=10 Y=100 K=0 + RGB + PROCESS + 0 + 161 + 75 + + + C=100 M=90 Y=0 K=0 + RGB + PROCESS + 33 + 64 + 154 + + + C=60 M=90 Y=0 K=0 + RGB + PROCESS + 127 + 63 + 152 + + + + + + + + + Adobe PDF library 9.90 + + + + + + + + + + + + + + + + + + + + + + + + + +endstream endobj 3 0 obj <> endobj 6 0 obj <>/Resources<>>>/Thumb 10 0 R/TrimBox[0.0 0.0 64.0 64.0]/Type/Page>> endobj 7 0 obj <>stream +H!0 aSMx5^T,c!"?7)[Ozn2veHD2`CE祼}hq7b4Q 5jC,=, su&30yRH +endstream endobj 10 0 obj <>stream +8;Xp,SMC0V?i\Z%28K~> +endstream endobj 11 0 obj [/Indexed/DeviceRGB 255 12 0 R] endobj 12 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> +endstream endobj 9 0 obj <>/ExtGState<>/Font<>/ProcSet[/PDF/Text]>>/Subtype/Form>>stream +BT +/CS0 cs 0 0 0 scn +/GS0 gs +/T1_0 1 Tf +0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 12 0 0 -12 -103.0967 -61.2773 Tm +[(T)7(his is an A)12(dobe\256 I)-10(llustr)5(a)4(t)6(or\256 F)26(ile tha)4(t w)4(as)]TJ +0 -1.2 TD +[(sa)8(v)10(ed without PDF C)11(on)4(t)6(en)4(t)3(.)]TJ +T* +[(T)71(o P)5(lac)6(e or open this \037le in other)]TJ +0 -1.2 TD +[(applica)4(tions)11(, it should be r)10(e)-28(-sa)8(v)10(ed fr)10(om)]TJ +0 -1.2 TD +[(A)12(dobe I)-10(llustr)5(a)4(t)6(or with the ")3(C)3(r)10(ea)4(t)6(e PDF)]TJ +0 -1.2 TD +[(C)11(ompa)4(tible F)26(ile" option tur)-4(ned on. )41(T)7(his)]TJ +T* +[(option is in the I)-10(llustr)5(a)4(t)6(or Na)4(tiv)10(e F)31(or)-4(ma)4(t)]TJ +0 -1.2 TD +[(Options dialog bo)14(x, which appears when)]TJ +0 -1.2 TD +[(sa)8(ving an A)12(dobe I)-10(llustr)5(a)4(t)6(or \037le using the)]TJ +0 -1.2 TD +[(S)-3(a)8(v)10(e A)6(s c)6(ommand)10(.)]TJ +ET + +endstream endobj 5 0 obj <> endobj 15 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <>stream +H|TyPwffzcmӦ{VK,[A(a@hNJ@gC Ed +!M}?l[[mUw^1 ܽZPG,ݥ +W,7f gPM|}>i昀|H#0H+]nQ:LI%2˗OI:EDRyDUid[V MAhdjF6:J9yx>;q?TR Re<@Ӫ0u,iG +X2pN?\G" +תUJͲM^G"2 Ƴcf`Ycؗs1WS]yX10k#`%Xn:|g$dLU ] +m"HbB Mg~ezt4iӧ%4p 8/h $Q w"xC CјO_O65RF - U8I nOlrIQ'E-xΔ.Y炝12~AEg\#eQ;M%hhǯ@ +ܥCJXs DGU]*#"KY =)1Vr[ AT +#p_D/wQGD9{#*G4"K%?w-=nŘ&W o7U;kƒ3Z4R!5XIGnU14M-xF%Nj?K^;2MvW,z[‰u4V>E۬磝(Fˏ~| 0@ dL/B +'bNG'ÄXRų =! LN|Τ֮[;јj%*#<˴2Iɡ^ߡ9(~-DH`k_s^ ݄+_SfX Sh:Cl +)4ZH xXty=pH$ +YB!x(~b}[ZUzO[x)]p7z%7qrz%=g|e&aVr\ 1o6@*414?z]wQڔ\m,7 Y[w0/|Of}b+0Tݥ}<QH +8ga!uOHuѐ +3; l5ZZ\ܤߦf*hgLaoݍt!"K7NuYmLv~ճe4 1PY3YzHFU4GЀ+LOw(IWlڙlA~sXÊ/{vX6)+9;[*⷏/SJK/^ =x]{SٟC#G±`q;/zm\鱞P^\[FfVc*_-MStd8}}{"v̠%'3dXow6Ճ[rt]jN*auX h*-+5'_"d9"Y! a`S٫LlXBFۭz6jͬ~I-rJf%(߾c'ş +łsNdV,81PÜe=B&$+b7K[tN:%H 0u|r9ܒz=q!$Wu3eh,wkٴd>۝{ B͢C?k[UboVvPj4?xUy ^ﳎ*\6CMTϲoAߖZ"75tSWs'm.,j}[p艸CLd\TG9@G a1f™ +Rh]U“x?Xƪƒ< +辔Yi$8YMV"ɱN[e_PVSNM/Jڛfzo3Րu8,RSAH#sw . NL;GKK^хߌSj:0"GgO^/該OD_)t;5!Y%8fq-y-E9uGX.Ztj,PMҰQ, ~҄#2zVq?[*J==Eɘ\2ؕv |ё(3\/p*r%+ +.yKIȃT%Ȣګ2D +x^^⶯>)ȕ΂;PɝѶawZo"F8 [<ڂ8=T#''P+ґ9DklX/ȸj-lN3) U#12b kuqƙS^2xe@ XȊWgJ8`z> endobj 13 0 obj [/ICCBased 18 0 R] endobj 18 0 obj <>stream +HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  + 2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 +V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= +x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- +ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 +N')].uJr + wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 +n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! +zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km +endstream endobj 8 0 obj <> endobj 19 0 obj <> endobj 20 0 obj <>stream +%!PS-Adobe-3.0 +%%Creator: Adobe Illustrator(R) 15.0 +%%AI8_CreatorVersion: 15.0.0 +%%For: (nico) () +%%Title: (Untitled-1) +%%CreationDate: 6/18/2016 8:02 PM +%%Canvassize: 16383 +%%BoundingBox: 68 -73 247 5 +%%HiResBoundingBox: 68.834 -72.167 246.834 4.83301 +%%DocumentProcessColors: Cyan Magenta Yellow Black +%AI5_FileFormat 11.0 +%AI12_BuildNumber: 348 +%AI3_ColorUsage: Color +%AI7_ImageSettings: 0 +%%RGBProcessColor: 0 0 0 ([Registration]) +%AI3_Cropmarks: 168 -64 232 0 +%AI3_TemplateBox: 32.5 -32.5 32.5 -32.5 +%AI3_TileBox: -106 -428 506 364 +%AI3_DocumentPreview: None +%AI5_ArtSize: 14400 14400 +%AI5_RulerUnits: 6 +%AI9_ColorModel: 1 +%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 +%AI5_TargetResolution: 800 +%AI5_NumLayers: 1 +%AI9_OpenToView: -95 53 3 1823 947 282 0 0 48 120 0 0 0 1 1 0 1 1 0 1 +%AI5_OpenViewLayers: 7 +%%PageOrigin:-274 -428 +%AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 +%AI9_Flatten: 1 +%AI12_CMSettings: 00.MS +%%EndComments + +endstream endobj 21 0 obj <>stream +%%BoundingBox: 68 -73 247 5 +%%HiResBoundingBox: 68.834 -72.167 246.834 4.83301 +%AI7_Thumbnail: 128 56 8 +%%BeginData: 3950 Hex Bytes +%0000330000660000990000CC0033000033330033660033990033CC0033FF +%0066000066330066660066990066CC0066FF009900009933009966009999 +%0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 +%00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 +%3333663333993333CC3333FF3366003366333366663366993366CC3366FF +%3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 +%33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 +%6600666600996600CC6600FF6633006633336633666633996633CC6633FF +%6666006666336666666666996666CC6666FF669900669933669966669999 +%6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 +%66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF +%9933009933339933669933999933CC9933FF996600996633996666996699 +%9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 +%99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF +%CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 +%CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 +%CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF +%CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC +%FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 +%FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 +%FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 +%000011111111220000002200000022222222440000004400000044444444 +%550000005500000055555555770000007700000077777777880000008800 +%000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB +%DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF +%00FF0000FFFFFF0000FF00FFFFFF00FFFFFF +%524C45FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF +%A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF +%A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF +%A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF +%A8FFA8FFA8FFA8FFA8FFFFA8FD7E7DFFFFFD7E7DA8A8FD7E7DFFFFFD7E7D +%A8A8FD7E7DFFFFFD7E7DA8A8FD7E7DA8FFFD7E7DA8A8FD7E7DFFFFFD217D +%A8FD3B7DA8FD207DA8A8FD207DFFA8FD3A7DA8FFA8FD1F7DFFFFFD1F7DFF +%FFFFA8FD307DA8FD077DA8FFFFFFFD1F7DA8A8FD1D7D52A8FD04FFFD2F7D +%A8FFA852FD057DA8FFFFFFA8FD1E7DFFFFFD1D7DA8FD06FFFD2D7DA8FFFF +%FFA8FD047DA8FD05FFA8FD1D7DA8A8FD1B7D527DFD08FFFD2D7DA8FFFFFF +%A8527D7DFD07FFFD1D7DA8FFFD1C7DFD0AFFFD2D7DFD04FFA87DFD09FFFD +%1C7DA8A8FD1B7DA8FD0AFFA852FD2C7DA8FFFFA8FD0BFFFD1B7DFFFFFD1A +%7DA8FD0CFFA8FD2D7DFD0FFFFD1A7DA8A8FD1A7DFD0EFF7D52FD2B7D52A8 +%FD0DFFA852FD187DFFFFFD197DFD0FFFA8FD2E7DFD0EFFA8FD187DA8A8FD +%187DFD11FFA8FD2E7DFD0DFFA8FD187DFFFFFD177DFD13FFA8FD287DA8FF +%A87D7D7DFD0DFFA8FD177DA8A8FD157D52A8FD14FFFD287DA8FFFFA8527D +%7DFD0DFFA8FD167DA8FFFD157DA8FD16FFFD267DA8FD04FFA87D7D7DFD0D +%FFA8FD157DA8A8FD157DFD18FFFD247DA8FD06FFA87D7D7DFD0DFFFD157D +%FFFFFD147DA8FD19FFFD227DA8FD08FFA87D7D7DFD0DFFFD147DA8A8FD13 +%7DA8FD1AFFA852FD207DFD0AFFA87D7D7DFD0DFFFD137DFFFFFD127DA8FD +%1CFFA8FD1F7DFD0CFFA87D7D7DFD0DFFFD127DA8A8FD127DFD1EFFFD1E7D +%FD0EFF7D527D7DFD0CFFA852FD107DFFFFFD117DFD1FFFA8FD1C7DA8FD0F +%FFA87D7D7DFD0CFFA8FD107DA8A8FD0F7D52A8FD20FFFD1A7D527DFD11FF +%7D527D7DFD0BFFA8FD107DA8FFFD117DA8FD1EFFA8FD1C7DA8FD11FFA87D +%7D7DFD09FFA8A8FD107DA8A8FD137DA8FD1AFFA8FD207DA8FD0FFFA8A87D +%7D7DFD07FFFD137DFFFFFD157DFD17FFA8A8FD237DFD10FFA87D7D7DFD04 +%FFA8FD147DA8A8FD167DA8A8FD11FFA8A87D7D52FD237D527DA8FD0DFFA8 +%FD047DFFFFFFFD157DFFFFFD197DA8A8FD0BFFA8A87DA8FD2B7DA8A8FD0B +%FFA8FD047DFFFFFFA8FD137DA8A8FD197D52FD047DA87DA87DA8FD377DA8 +%7DA87DA8FD097DFFFFFFA8FD127DFFFFFD687DA8FFFFA8FD127DA8A8FD6B +%7D52FD127DA8FFFD6B7DA8FD127DA8A8FD7E7DFFFFFD7E7DA8A8FD7E7DFF +%FFFD7E7DA8A8FD7E7DFFFFFD7E7DA8A8FD7E7DA8FFFD7E7DA8A8FD7E7DFF +%FFFD7E7DA8A8FD7E7DFFFFFD7E7DA8A87D527D7D7D527D7D7D527D7D7D52 +%7D7D7D527D7D7D527D7D7D527D7D7D527D7D7D527D7D7D527D7D7D527D7D +%7D527D7D7D527D7D7D527D7D7D527D7D7D527D7D7D527D7D7D527D7D7D52 +%7D7D7D527D7D7D527D7D7D527D7D7D527D7D7D527D7D7D527D7D7D527D7D +%7D527D7D7D527D7D7D527D7D7D527D7D7D527D7D7D52FFFFFD7FA8FD7FFF +%FF +%%EndData + +endstream endobj 22 0 obj <>stream +%AI12_CompressedDataxiǕ&C ؍aMq@fVV-x(=@$%Q@+l*[v=9~?^<7?͋go_Łȇ_zoçl_ʓ|滗~Aw?{x?9R~@[sk [w{p/\8|+z_}%w_|?k'5B_}ꉛ<n|dǿ}_ywߝ_z_pճog?xWϞo/w/_=>|yzW~w/`bjD_R3뗿^} Fi/@o^҄ϵ7cQ!pp_ +#|xB =ĻrxB;dK8ׯ^`߼OSJo߽z/B :Ư^Ũ3*~+Oٛo^ ~[ZvZ/p4o_<Oz>xB|BGߢq_}d|nzrԛz>?}yzVvкZAj: . gA]JR$);)RNR\K4,:ۻa?0\w'?,<> ƀQJ*ҏ;Z9RMo~iVt_]XPL@>I"q PG.? p%gY)zLw#_ haY\l\p}*%s>&)V;,RRppĺƱJ)RUW (=,Xrù]\%A` [`HmmJ`l pv(0_"p:/xG<9 s!#qKH8q#q \%{ V7-(%IRiiRY$q9I9Kr"}#T%Z L%KK9J9I9so\((R,E.Mw9J9I9KrLqDǖμ˓SKJJJJ$S9Mlv*܍|xݞTTXւQ%=c6>TNS9ODnTFYLi4?y*e*u*m*}*QFiU G~&SXq̼FJSqWvde~kg&J\W;骴ZQOՆ5ey@6:)i>'-'83tēON'btbE;2p hSw~yh?~.rSΛ21R;N:ݺM]Y)iMJ+HiGI$W|,,J|vթwq4N-uEۖ5{m{|PXMj*h7Ye,f2~$xXid틴 6\Mjekj,][6[ٖ ȗҾDZ\m׵IgzDЬ1ZWIk- t$XO%u$ѐlo/RD7tW'15nIJ'k%Cթ5ehl,_5a,$eP3zBŬBlCj!;ۈHG/j<5I-JfWwjky؝D\G-`Z2e,{O,%B1j6= y]AE\>)[/r| t;[.4L*{OO:f 6ފՋ'mwG">U/^LF3݊gՓLhÂ>n;ugn=_'^ț?ZA @X (|)PA'CQ =ҏY/_ (%5d)jh5cw$lVE:TP|԰Kd$>k[s1s<͟G_ߚbC Ւ,EMdfEM:r}E=[_֛n58W Alw:tX]ڧ_2 m33333{h77777777777?țțțh h?'Z5kF18bq# ġH38uA4(V8^>Dˉ:LZ$;.*u+U;GmY^D@B#u͢H3SglÁA= -|l$TEoQiW;jn/P%p_cx3NRˤ|}`wc;/ +?a$,m jtWlK/qгa?mqF +hw71Y?Qs6t\XFFEQ?۲\+kJBTunm[6Jw#Z"5WcIGhF ?gK X>EoƨT]Ss=;8]Η6yas=~庸쬕v7~/H]?Q?aMWX]\swQl3g.S˫[n!lUH>>Q5q=6Bݯh(\?~H5ќºsя}/ŧ\?SDkHlC^!VX2C~Ɋ*#}`*Y2YɂN~fQ6┳x94Oż b1 Ê?$[2o17Q}U|)k+G< ,~O QPQ>} ٷXv7 !Θv)yjq>ogsVhPﰿp^ ?h /@%F~_"jݔ˪ls0߆wJ-8k^-mYƶ/Ǐ(Sݞ> ~oj'')~T~D(kw ɼ a;xƣw"mxɋ,p5 07l3cx(u,*b'b]XG[mIX,|Ͼ_W=&\W۲C]GH^=o{{G4ɲ{?T~ ʰ~q5.<̔jv]̝k)VgS7'd$qzaPJń5eJ*It;pϨש{V駇 ̵ +*}P9QpӪ˭Ѱ8˨w?.ӏT?݄)3O=}y#1çڗTLŻ7߾zq-tKidyJHsg1֌ 9JY1oqCrLLa6Hx@wfE1lWaCba>eͲ$: @@^$6%t c뙨ѱ϶;{p g? F_藠y D^)4B:^Z[Ac~MB_eXI>}ha|u7ݿ@\&;l5KLX4f5MŠe|Uw jT@(fIT+`}UQ"$9$4U$#i%Vh B_o%(CMY̐br4 5.f|`,A d'(ёCPS&S#_(Zb&5ɼ'#>&LG/ź0E![ TOrUUWg~æī%kyh|^@s + A` ;n@%Hd<]Kd@&WAIO; 3$NGy6N 37&2O`&a`Ʒb%ѻ7:݋x |,)0P -~ M")Ԑ L&TjZ3C0kw$-9e%)1T[)\e셧.8R/x(0Ma88K_FJe2żZÇxp>q61#5)MjSWMːMda/)§q| \RLi\vݡk_X`lSA7Rutu]f{~[Go^_~[b1𭀮c8|JL،Y|j}hsI+:wZA+;H]5齇 ri>}ݼ~d7%2.^ӊojכ4o6~ύ򇇇g/:|#޸GڶC N ptZʺ5If&#!A gH|< +mx,÷w(ommGIS) t'I +dNGv3Ozn;%LRtqs"ң+IB,iH+ϺA8edn/%~vO[C֟F;2Ղj2Hv>u Rp֐ieqf Wh5~y.!Yx5CF"nh?@6yR(%E)Ai%!wfA(-$IN/l@(&d}$riYl$M숲-I 灄=Ia8]R FnIӤ 4H? FBk'X/@KI@& iL#Es0i8< j `F~Ȃ': XI$ЖB.4bkg?2݋X'w<~vӴn+I<S͗ɃFE '?=A[fRkYR'F8(@4 ZDJ0jk9xȎF 11*ڜi ,9Ǩt7ddv42#$B +4ۂ=h +Ͷ!eGɏ" ʌqŧhʎ!M&єMD', w7X1 '(&4Is< MS~%dp7L0   |Y$g!4|%Yj؃9^$I(j؂$Z^,Z@5|˚gPO}RSNBB$EW 5Za21[D3!CfdUX%-]- aX0r1 iuDpAK)5:$J'qS $GD[0V[g[ם3Z̹- +初=A\)*#K媰|#s +\/r7rP\ PYcޏ=I9(6Uf ϞZhƋ[v}aʔ'q  *_1a݃yvg‘K4э?ܠ,iC0ssj,;Ԧ̠\{܁ԸXq7/5h6=Vnz$W#?\q(2 pD(p8ݔ$ w(iLzO]$(gMh܃1D033^:˭#&eŲ/#5q\nᄗMY+qWAHW  KJe;IOUN8else\fB9LPϰ-S|̏7$j!X.Po~h?aSӝ (`q@1@ +cY@aqV dyWЀ\"g^iQBPZ^8[[ʾ%N%GN|Ui ӊD;\i|yidْ浉 ޭO ha{ ;WƊd9k{O}T?R +ˁ?.6e3s}oql1'+?U mFŒLQ~Z]3訇L`aaED{/{OY+ں|<\s7gkEk?1r ߭lM#ړMd ՂGݖjo`K|-o`]n/b7)bwLs;4s]埀{5iywI]H"gh% \6IL6 0Mu \:E E`G q,d1򻞂í|h1.6]Ɲ_ÑMthVP3~:GC܇ye^_d>%:O<(= ݎa [#l$9_Zf4'xra$`C&4ܥNNLL'{=솟): SAJU3g|jCtoKDSYL(*Wqc>Eb2I`uŎ!l˲we{|pۨqlƷu:YJVb, >V 1"WW6,/m1 ZXa`+X_ՅY,p,O1c>gVZ8hqgbHŎ8+L\syEwEFTƩIH;Q! + 1N;7JBS~ +O9H ~*Vzc_>ƧNJ)9)@l9ږyv3 o4Ԝm-sm7 +P)LwL,om4M]˜lz/2"7ֹжYζYLdzS5n\ٻ7bx +\fN9;vYW)w{ 6v{˕j{^M+oS% 04Cbn +5jE D %C'ʻLw?~$69X;֬H`tIREvBV¼[0Cv.J ى5 XLb@E$ {rIUA,p]4odDFsQJr +z+O c@*/gR[$z[2k|2wz6әaJ)zJlS]MWwX]j}+{{ +ڎ%_XB$ADr"%Khzد`{#,MW8_~E:{22nӝzGW(|aIw(eu?b(Z~u'b[Q(Jf*({2Ȟ;rJMP9BRǧ9Z@5d4!]xWL jbW8@S `6罢DPZn8mg+Ksw> ᱭ(Jھ+Bӗa/:m  +떯%/SJvoWѼ+필m`{ňpbWj7!y D[2tU~.vvT"iM6!wJ!Igƻ~kr("UklK{!H5$;քpnßQVcĆЧ# ~rSu?zfSþ Ox?7K6d)^=]=`ÿtT2 +L![Ot!.(@0D!4 2ha˭,zajSz{Z~Pϛ:ҥZG[p +XXj[=,or.{T\q3?`><{7ї=F|_5@?AoeF=i:TA,}٥Q5r)lFɽŠ/\oFq=mZۦ}Ĩ}tC퀃|n\on mWa/\oI퀧|)MQ5|pmۦ}Ĩ}Nh]/ +e64F_4 AdLKGIHxW:]jxPc~XA_@UQ!*'$¡KaAC"zYŷH g?ʊN"4 +3+p #Ŋ^cso}h#UO5CAH_m3 3%Us 18AZ(YK;$ϕ}t$j[B͢8zyPT@ԀiykI߲Ow;E}3~.Oj@_%O&v>9Ҙ +l{=1YaQ+8:[~Wz-|҆qG@n*:ձK|oK]~*PYGN-vTk:TW$' .tXr# 7-(D`"`ړjX"H&p=ظq~Ѓvuf{&;k .V+POuw`*tǘ5U)5CxtEFy:bb6+\8Qi,N/ Ц;Q- +Q!B=cƦge {IׄGe'119taq㾊M#* .V@N&&P M[|̈́,dVh1 +A;lLȼ胈%t!VH'YńXjqLY+myQlU٤t >C'haR2>Sd@r3WX/"lA%Q@ɱyy6Ĥ;*p^ęr(k,8؉b/ V;jKĹkg1 +TaY D3Pvr\0km/̓ANʍOvV1,(Yi#N{\r f9OT2еeCѺގFUec@!F5 _u@ݞ%tWCE4,U18>'l5$RӀ@c+6|ޥ <' 4zǍgxGb{{$5/Mrvz๋WpVٖ’TC߽ Zh&dea"~@m$k IcbdAXI* + evxL?\-bRANJ4;Is! E\FۛIs;>*$4-h[Xl43ɱ ޑdF9k5HSEĢГ%h~%>QctPDSҵ գcqr*`LjGG0Iʭ ۪R8֌c+sN'R"򋢒2д"Ϣ +!m ]"gVH?闧,2*2V,,B- Ɩ'4ƾao Ϋi`XZɌ׸Y?IIL]DdQxu}/G# ;\VQ +JN/)LA"Bw 1MĪ M/l8z;"ax'i3:"lc6p?BdVxyEi4QCIn*zG{PdNYdxu;q&5,lIEx*JGtf0y0S訄ebNM\8g4eu8 LgP"h0گ"e{V܄? /3 !ZB4P+4ه:ڗ(*UD 1V2)7ŧ*7U{/aNxsT%i-csBܯ]Oh*jN"`鑍ɫP9^`EoQ.r/f +\XrŌ,slZڠYdwUb.BTi#x:clЅ].KnӠ; +품=$5'TDuɼ%b`DƱt[u A{fMIŤYb&@$퀡c'$]Eٰ 8ξZU],+aN'ԁ똡8a2<9:HOn3(t2#*.p3'D:écl)plI.Rߣ,&BQhI@ r8{rph6FKV\NQ &ޙIl0DE8)#/Q??/o" _q%i0\/`"ZO>z: +:r1áE0ZAnt-AB %+ qQO/r iͥ5GUƲtg?UN-~e5xp)RTYAb""iRsnJom҄J@UPV^DaԶZ#SY#6:hyS ;]BF9 Wt:hob8 \QD΂kLNƻk<bľM]9ڎB ]L)Gd0XxlRGqj X 'bn0$.+:F I"љI(yYyOX"I("CgRclW^)2W_,"_Q& M[Q޶f9񂺧mG݋9J5BOb'S|N2О,6ՔIJHL$mANBTqTtƖtt^Bing$!pz.;E%G6p6LO4I{JUUZ+H<Ǻ?Y2JpwN{I1ש>\gDgaFkKSsKAbj[Uѯxe1W,k .^xl@ EKbs|Pz33gveyIP̂cy/K;*9t |hOXIHFq48,"ab@Hk(Π0 _x/9&p1OTx w!R$ ul]=uWjH$jYUv|۬\Cn02Yh3'MfE!337pk)ғI\w:8ƍJ8%D09%FO#| qM::œsL|HR$擴1YS O/kdS'"̈&ʐ,C&H;L85Y\jx#1{[sC#18wKqk)-F[JU0}g-Rb0.0UnGG "+fn6I )y( y * & #<&xA#: BK\@*63fc۱dՑފ,cwLJz7tx$qT-ꛠ'+p7EiV}Cm81/E@^eu#oUZl!( c sz",\E1,gh$œ/U! ̑] +&Ť , a @ [(=Xy \]:-?aیs6 + ~[`.H(>-I.H0,7uAV+҇\q:ֈp|klG[CHY~R+u Q+PuDsc"TH,M$Ǹ, a tQlF>LUSDD8q)Cq``N4RIb,Sk}&c(x2i<oցn*5҇ x'K\]2$JyY`R Ȉ^]CG:*T-B!6y Q\`8e-0&1Ai@%w +4T?W.fiPZ&*EHHeN -Ւ3\kp#*7^r-E4%C yX?Ek@08AJ94(`,$DB6$Nl`}v^g~22ԒPiT i(I>bs4OQ)n @juQg:HRR90,F  Fb9)@kI >U sU }, i&or`jH +T:kA!y!C" +hf8f1~ݶ;W6NfĦ7+֥h8΢b}D9Iyc:&6hF,?aïh@4t{X["*xg OĭVO:}yX@  `>FaDfYD(1$tѰ{ΒUd1c+\Y L㢪a5+F=Rio&!2E3E@1n/O&)1V!ێoJ̩Tex ~ ŵIl$wy])ڀD `NF?vQbժb15A/8L|&y{%7떬saٳqfI !w8`80 .- qTl%#-,+)6枓^=^}w7l|N", /Ȳo[HEnL5(%4_)]heqOpJ4t]Ein!O`X`!RKv*:RG[>59);Sh(D @'LN.I^'qc_S"[!)M0\:AvlC¤#|B"1QȻC%y;Oi+~K' ɜ)DdH[(485p Qļ+)OgOm3f]u&Mi&_4&cUMiҭer_/?DB}D\W˦7?g7l¬W˦7ZTWM L!K_6ߚfCX搖A +/7l(d5k"LY*rlz!:n5K4!ۻZŌD1ȯuvŬ"y9e9x +1hrv?G<F"Q5uU2o#tgA4NY-4q.lMӒyӴ'7M\K=}4&CĺiLS}4:ճnzonl,lFz6M2.ȡ:#U"@b30Aln0vyM6s>ꑦ6MӃ؇89r{d惉9 vڶ8`Wt o +;"vv;lP4ZA#,_$5/ubk뮣oN֑MYK%tW'$>d$犌Y3F>7n{̬A`t{d(8N[~Te{*}⦓sZO.f3]Ʋmq ݔvVl}l}CI$,bB#sj_/4Q|W?aq1qQo}PUE*U9')8׼`a8O>?ѿv[ +,7 -_-KNS!(V1^S)[aKe'CH}(z! i|jQusI o T(I=ђO!JTBqB)I(e|`I/q!tr`' 2aa٦\#D0$/9уnE. s[Q2AM`9ssL>R)dͰI,Y(UEg 5vO|{$t5SfkY"qa{|s80.lWPhwM%(=Z's'5,i +^ťP320SJ4s )rurA.vàͥCӸ} ݄Iإ7{R̩ځ)\B}ѓkv4v!ٻvR!`Kh g! F,~pW'o2v6}ݶZ5ZHzA&m;"q}MtJW?R v.Bgmр? 5hroRGĉ<Gғq@F0.4bcږjKvZ̓l-MNfܙkt8k&\U5˰Q5Y6UAm}l1Fz׮.D>w$+( ?پ<|uz|ozzˇ%gxxxvCcw8"OӻB??C:o_-`?x(tE.3D=% +F~ #0=Mwm#ҀN[OϨC~pP3u JsuS'"L "R1 "ݓ#JDc:ɄL8~z`{SE.A!q i.gx]ibzJ2^4 {X 3ta,ƠÄKz`)Ovl"}sL?&v[s0:d UWe8x)D@(*TBDBxVGnͣ)is&)Y,[c.Ɇg/JձlȥHtJ\tcJ ug٣=@?sj {9{m7B@_ɅטsD@[.jzTL\a aӅ1'x1ɤx%:]T*d8D7:QH "|-̗FfsBwhNon-:Wκ}A0B?xbb!L>蹆Œe_W}C@S"^Ж/cY B\[:!Տ>t[˛zsXN.z9D::*w}e]+|uE„l3wrc;+qY|hƇڸ7zzSc"Ro"P8 d^ TiUƸΑl,./2p8sv lb3e"Zk bg@,9&w{``I׎"k3ozq[ΕҸ];F@|u%Ӛ*z;J9HiJ=-p14N,w?2l>:{|D,A`/19|4y]?-j:_MD861MQv18 Of6/%:y,|-NڧCYx4(*] _u\z\eR#cc>3"scu,%<`tL&f 3B?x +zj^532!@ݙTy]\d?DhscOSj&  ab#ky6V~L,&9.#ChR0>{JD I1ۡepGsDj=(FZ ,J6R%..EAMp +5hM dm݉ٓa[0=LI?@4|.֒TuE*!/TEL4`z$g.kV8˥rӇ}ք}m0Dȗ9kBXaekEem 9Ma6oRÇwbd[DqFf+ K/F`?򜌍QuM4HSMbӤkbݯw_b+@NFUtV0x!DbʲBH.gI^?W]^g +|gԞgC*$Fpحw־(;L3YhA8=$0҄?DO\eA4B"|8]\36q\T\T.SkAb)Vјgoev˫1{1Eb~ر3*/Đ}jT4ևau"p>U5_)TPAKR~e6*HOgQAc +lP,OD_g>]yZj49zĠ!%֩T9ͮp$Z)*I TqVc.)YTtӇ:t: cA[ьJ.*1Ta뛞ʳa>@6d5*5z wtX _nG.ޜ)kDIo˖5lLQpqS<'y;%s6l8d(&+d#nnlH1/e{[UIH̫ʕ^Co~{JTpF5:H qjA:sS|_3Y#n`b1&S!e+0]D*/ԏa|&B 8MlQ-q0!z}}οDqFΕaAaHU1W[V{+ABeD9Qg![ةJO3"N{{D2ߴvzL!Dv7tGʮ99{#@%1U|`sbPbVLX25$ +& w>lId? +h+Y~ 3Eftmln`j0ZLZ֘l{0mUuN*\U14)$ +L%PF)Iv2㱭{Ɔ}kGU+M8G9k ɩ3]TAji.0-F!ilރK^y. 2vë`Gu# \OxQb rΰN 18V˘ &SXlbnw< +D` ~Θ'5|%8*TRHa\ȣ۝d<9gA?_3Sh᳕ +W + nWu"kSƣj@/{j'I0+ֳ^֚X"aNxŐ63blB@N{PX{ @ccK(q}AWgؾhAmevIſ"e[S.h۫B3)%zW0ZP1CgT3m';* f1]UU™lqI\<$׏pн{?jxq#&])D^H4=ƖAk]taNz*۲N^WRp,LL&ecNPqڜٝ>,Oq@9gBhv| lv`8PVTBz7@0l2 O?áFıx`HUbrʗ.bqv+5'*&^D Kg܊7 ?# 靱od Jc9u5rFa.AQ$Dik*L7A\ofFvاrtB~2d4۟HdC`E̼2Hfxa9E{U92mK+} ǛQ KFg9$t/5E&.p7QZE^}32Y[^{[۰ȍt~'ԺWp`,VW (&k0nZ!ϲ- +m-kCa1h/ Wy $56{oq~W(Ba/'%;<-!ʶ  atEѿYY(4"XwltVxAq YjFɾiS: +\lL*%\A5OP,cX$>8Fj b]LJn(,chUVrXpٴΡ_19 sȭܖ5D\8 i#"e^'7duqLr+oY-2{"IޥW%iTt4`RpGڭG<%o[BmsPP& B4s3§D]\J#Bc[ƠeAD:F ~^wPT5d ހoB⡿P!* L?8i6l]"NA:|XIОCeJ3JbUTW !eik"m +soA_ Rf) au5Z*Lv̴R2X fbzqؗSK|RM@nD)DL7/}1Tq?8In$L,,>6DUE.@2؄Xc^RLZ`km%|[%DMc5VJnAMմZMhkՌ\~M"z Wa951LP6@V"^0bNo +4VuaDxIn!Th UNLSCLŪA&3Nd,V" +:h=\&HViQ`,EpsaF"UI$10uٗrr-9j4-0ONP蟇UnAJ{HRS ;E*! A9sS5Z2WaC7o +-#V6so*Q?X?t5sU3,TKBd| @oLT-&74[YWIzE{H˞4%RH<&zrDHOuIE*% dP/Lξ4'Ϋ" `ׂd Qty hA_L4U$Q{IPEpc"*Gӭm2.%e{$r +VU%K1Xh™)h4֘誎SнuRC +J-dG*ɯJᲆca-T%P +<9CHh5%K]hՐ$m$2P*t/G>d=5HT:,H`~NcpL)u/]sSj4(,{%*d`-ȂFغQu*e +1G.r,C]6DA`9b"Nie ҵgfi/Dv!‰ qK +hYcI8o 5̠X@4qYgO&8S ü4]t&4 +S"lʜIT>Zx2MHuWwt*M 7Y{&H +xRڮyFc!Cȁ)\QG;HR>B:֌%T^UPxU! 8xy_KT +75ᜣshs+L{م~Ith:h"[CCfYS.cDMX@.`eI"# ه(BAeR1uX(Qh I\fTfg(R޺9}Ϥnl ƌ"$sWx`I_DZs6L#u/C!*>H1{;E53O{k \[vaӫa +0Ͼb+qzzA0[9NTHF:QJSG9ݚ^DcN\s#5vA OLY,:@tީ0G{Hq$ *\-H?3r3oj0[yE5jTMސ>^cIlTJ\KW3;Ł(IAyTl$tni ז 45aF.fsy!H>m/tva' YԥiҶ%N +ɴd ~h6{ f>&8_a=lefSKin i`x/&ōHv{9ݛ ӧC#g{ 4:gK"]zWd0RBEtWp8# +OC] tu G=4-i(21'fYs5ĠU`aUL1O)Ma<_JT9ȍՅT/Szn5M,U}"64?wy(]y%Ȇ?_RUG$\ucVl|-_H4j#kE, \rRsad:'W2/mM NP-؁B2',NJ71I&.t#)Q)!zj>55Wo6UyN4a !*9TYy[_I]Qq:b*,Қ9O4hDvm9ɓAJ QCIkQlLqƒg U*jTlA;n_ռs%qCH:B]8MWP[5(ԴuEbC3D/g!ֈ_]h-Y/4Rzе,=𱎰覺v:I!%ƓfyyN˕?$1TDp4K]!YפȡXԜr95A)BuRASMb/CCn;Pen~%cepV5TzJt5EH>i;jgd{⃅<_h&"ƼJP$LYIAt[_Qeozm"|576Db(>6&ؑB!UZ`m=CXaesCͨy1 zKV< *DdGąj/![Hϟas(}rU>0DG8 Qb3ux?B_hqymBI%:ǯ6Ja5h %4Lp:Uk !bjt72BaNU:FZ V}q> ++Qhy.I<뫹ܶ7$}0O,Ax +Lm,f^%@г"+7KŻ`] 5GbǥmUǕCMP*>gViiD3ɂl/R>0CMg 9 íәUY%%SKɠo2]tgJ:'}7 ڱz@Y|D%/YB X -7{w0q +x}⭴ Ӏ $pԃ4jE {YfX7-" 'ytuʄXa^J u +oi +~ٹP-N[oٮ Їڤf{{H(&ь |=`hn43DeSE4[ހsN9K^Dѝ `(Y*7,[O\96%CHtb~m'l!$kt*&A'0}mtHYlHpV=(Og\3^u6쁮YS}kPP]5g:3X]21WaK3fai]7)XWG0hV5ĽZUBt\\@K_C2;(=ь"4EKmJ;Xc8(傅DI%|+CWP S.Xl\.,m2/u^0a!E6pB~`]VlxGA6)3+΋ʯ$?.pSOq^i):l3 vm3M 7'dYdG܄5ȍiQVXR%`Ŝ7=Kt:&{j7pSqemL( B˻T$|-]25 l՗ +5Ůw_Muq)o"̯ ^&!_NKH%W1,<#mGTlÕb\IIİb Z4*~FXU)fx5&X *p_ӡe9{h8g +Cm.hJoIEnŬx?+UPp`ʉy%y,3RlGR  Ң`O=HgE!kմ?>G@]Υ_~,nni553{Z}O[\*DUsAռKMTmUD 2IAqo\xMx&8KRN0OASO?Omݢ[KG"߂aK-E"K쌋#ὑ6.YeL˽t1Z`Z/7E;Ȉ_ xМW tW0C*‚ +[ufL@-"<Ũ\~N{U8PfjpcP6$ 7Aw;QYaͰoe| +&wGG7t#x=i)޴e}<~R8{C_t rkIqbiky`#Ax'\AcaG |R֪yK}xx[U5 +;~gHNk)5vLs +@Ѡ +`ѡU >FM De+EͯU)-UsKKk`l*i kN)m& KvK5s].$ ?q֏ffkdι9,ZAbӁ7}*1ݼ¡-W4y|[x7PƫZj`0؎iO ԎPイ D"7Xe 6 ,Z7[-<4zbҫiS :.-R!e+%e͚'dy[m dЖy#9)8 /*ǜJrB/9:HRF  +of% S#ZSW+KQq){!p&FTr\ݯ ݖd؄$߶xϡcD*'-I-)ӘU#%HňB N_*+FFk%Z = UD,ma:Ѽ[;7EͻW.%G#2j֙:aqRG %p"s*bhq|ʳM"UWX5 eD#jZ$cA0XMJKQĻ-Ƨ‰Gc-*$zQN5UUPq5YB`\C1fldiPm"/%&QFt\hJCRTLcfT%?x҂̃83Vbf4.\!:kZX+&^CtrRGK34/,K<+d%6]Z_JlC-dC+ג%8$vwLD}vSI^6IEE"mVe8َ,4$T6PE7 +TFMVY\J)d'+J7,8 B7e& У$uF˥d#V;⪠\FJڸ2`.jj`nZ7dB'YH6=qQP jS%6+VPuخmtĘx mڱ[_s(M5ueUfy.j'DBlJ|c&aԡ$!zy$* + ~@lVg PgEUrǰPKfq +| r#;Ơt*z0<Ť%sMCZJDJ*d8+~BZHAN5ta#@ڪm؞qյ (܈,Y8C !D!s֙p8ۘ6T3ixNK֝{ rX=nrbV3Ů4oQ@Њr, h&c'+[G1~,~5Yf 7UUpmFB%ă'l$vXywp3QMyMCEq򤙲ca {;R~wN8APj_hT@#(R4$,Gz "Nۤ7d@6 I54+̝V 98M^!+dB4 +G9)U3lI3oMSEWq.P"}ܼ[vѭ=yx ԴG; &qyRxN``Zx#{T6K_ ,J$nlbQ"ȍz.B3HIu3b ,&Xq0hI^m/!Ut\*,S8Yiheɩxj*ս*]-[,RP{bҊٚ#˚s,˄ë/ M!w&7ϬBRf1Hx=) +: !4IK)U&}5txDP&(@# ̏jd'*帾qSv7"r-Π#S E mR|<) 54C?%3}Iqn`=L%:7",%tKJ iغI2JQC! > B9Cɓ< P(vq5]RhlEGQ]-ID=F"B0ՔW@1ۦ䀶_eni|!b2b٭ r֑2}`Qg,),XYHs:L-Tq%P4ez`[ +/D#X[p:HtիV!3* gx,GWMhtJP/ɒPx~L J:]kЁzYA0'@O7^cSuk0ȒDs-,6a6qY$B2jCoXU=8`ʩta663oISeڻ5}!K@ׄ˰pC!, #9! <ǛEWXt,݈sRe$=(LJnAr 8LQ +gbR2ȡ3,d)L / h 뮘w)⮢]R " a-KbiLf,5B7k7apKL1ݡ1KB$fE 3XD!U ZAe5Tkc83FD`vmut)'6?sRCDRf  9%`1PZӚwmAncu׺3|of-A_ +ǩAd +[z/|3ofcXaT +RkH>ãKuEH@b39,dMC3)6 M/Lәtّ:(ct`&cKT%Xi?4AtTQ +}5㟜XZ#iQ-1:BrPٝ+g$SGCc8i]B"S+ڄ1|q =+L#ʫfiIάd9YаVPk0Ty р! @3X-}&4E+'PDFmH[2ENa x> &zD!3ja1YOfnz?} UZX2uh`*IB6-iV+h,vcP%]N|jzHS9Ѧj}|I}HPS1%NÊn(QUVŊ? sÔ z0f8"eҵzLn)4 Yú ݗkd͔iKM}ĨhרlS9+넊a@5E|puVG +Q=liN( uuzY0L U+J::h>-{?'W#̜}wrڒP,)LDzfC2 P$ +1dER43!dU4%2$)()VT,D{`tI.,[k? Hye +px0E&[\lf2AIM:÷NV~NkVahio&+SW Q-Er|pYIJ7 Ѱs=#?Pt*5jZs@2t1=AfF@R~`:ӦHO +4F T20߷?x Ec|ab,Đ^4&T䖉2Bȿs0QN'=Oء bL#Pf߽ŧOt0v Qb5ڽ%X7Jkv)-y#b04Tq-:͙Xʡ؄ҫ샢3 +5h(5S`(̐uDVg)E +=0A]$7|oul΀f*]4j\P#J #3 +9,58ƵnNQ#|ыF=j)w|"ʈq,UGb`D`{6v7cL7 S `Fn$ +c*\HzND x?^?:%{EeBB0C70?Y[Ր8Ot@Ea25r4<0BGI RP~!X,A"B4 ϼiIrQff{O%΃Afq6cz} Jt $6{WE`s62:Llޕ!̥Y/1^[h?ySTd-|ؘX@xU&% Ax_g6F%dR{TNv5r$X#S+hSQ›k;鰇iFP䊣ĒU RU]j`Ab  9XZ] +~H/w`<*ͫ#hpFЗ=g([=KgŒa: +Lٚwփ7&e f  +֗-.[,j9Vh\Mq'@91uBh==g` +NBn8 J-d Z2te^j :Pc!)ok1 +<9Il۩ +,&g4MEDjD,m:"N" ,,AZ@D7`^v<ыAo)řUqR,L h+ʴ)~B(zUU7:0k&f-8^P+D8 8IȹԢCy0# %wc(C kMP Nδ2Ϊ"9gY+7+"\溔.Zx0W шgѭh OF<%lEPJ/g _KVQ̅dDsCekyyvOԌ1~$8"4 + vAO(r}iE*-+`"Kym|seeo^ Kn Wb`װ~}Hur\%Xg'a{Bčt)ݱ}3u-8_e;KWc%ZiI}NL: yD՜gKgQ[#{Y)x<$U~Vy‘r" +B' +A"&z,32~X . `Հݙαq+f-QLc/Ye@qۨi j^RU!6BQjHVg=tpo wz +R"4{ #ΥxgzI#wzͨxa,FgHya/ ) ˨*//,MP.„ +VQ!+Yk}vF 5ҔK2a#h ,xD̫jhaÀ> +7VL{/L\ےFbRM^;(bONWK ;kmm֦#q^"gO3R4,$^x_Z<.tIVCzҎ-;S+02joC~DK% +e\CN)%dpjtQNy"j̀kDܺ5 ɼuXhkБT2-k$<ϖ]JƎ~#'"!;HpOBr6YwuV-_-c6z"bE|/:{f& Rf,JTv7z6DܰTD~~Zǰ!ĵ%&K.&&lv؆nz5g'7WaR&K5(l̍)Kddy/iY!z׶7 ϑfL AO)+\wB?Aldm80Z9K~BSD5~* 9?ʼni}hEcTKk$^p.ΐ7(&ݜ";IDnk`Y2ttd> +4x:[pܣ\ +UkJd\b= M`L.UO9i`9y*;pQGdIE8G֯֘=*"RTlR?9EtN73@K"7@1ĥ\)^UVDDqS%vmt""5{X _ӯP#Zbз`ãwbuV1k"idsI6{65sMIJC7 cKz4"[;n6ּhVڲGpnoj9bNfWe*.+dy=yAq wrQhdLAzp9l㓟O>_yߟ]Q//|yIܜ]_>bѠ%O/(O|w?r?}s~s;z=~?6X5_@D+N RzdO7If?а~7苍dA|Dy3;G.3Xyqu 4jUeKפ)f\ f#ɩQfܘs̎)^d|A 64Xb֚/1(Dfp["Ry_Q 23ϥ6JO DB&b&ܖӇQ:>y0S&&Tu $c|A$頓jU6A]A' [.D(bsB4s05O6Hԡ6MR<`L)13ebOnKC%(]\VA[:TP&W>5|zmCBda[I6l8Yv1&BqWbe(R\dJ3ښ|nRJD0E= `BME5"38NDjs E8g)K],LbLdZ& CwBz/L( UOT3m +=$3 +1gZb&#:6PQܘ%L/Rm)<%N0qĀw1]ыOEI 9^֡P4zpڤMݒ6cA{ 0Ok2Eo6tͫ A6tmmmpJc'%$l\ikfYyRoDVgQ6!qbqc`&s҈{&Rܗ#<9)Cv ê\C^}LiJue!޴ԹD+* 3vzfo=$RK@(E{`0q8h뒃:LUK p K(.oz/R W{rCe{8 Z#D}8.rihJl.!-Ħ728{ȱz' +ubA{dHZNN%29v|r@X5Fds^V1;#>[ޔK]B=i ɓB1:`ʴD>"Q叉炉\IegWNJVcv&})Űh[*:GTT2!s^4IXKZF؝|IڝȄة̼8FY$Q{r^(LX$/kΰ|ᰛv =(L . fuNp!ȋJ^Vy(f>f=0ڍK,{yy({!+X!%m +'n{-A.ÉaC]',LX2(%Qe"J0(1؉bm dwZDJZe ,s@zx/ۼ*x qq^JN8ʶTFhr8D ȔKg]&qh3̑cJfAPY@D`}:07d@&o\GXf.IDDU朱&ZjAT3[/+eA^gF?j$OW`@\EL慝2\rB*`UsN*E㟉Qz/ےM!MLAF@ 3DZ10Z6U&'d*e)Ky~%JAAn +٠/ ,U1d)C=nm"Vs҉#L@!f"CSyϚuXAl~Z/\[9yw#QDFw#ࣤ%}%{><\\.zt<*~^ci2B(>\Rmza&K>!r5aSI:+;BIb].; VhbbSZD<>1YHs$^A!ED1Ɲgd7C^J"e 0hgUx 6.)D_Yb&ʧ(x}P8H|pT327O E;6 yB|O/͊:$9,DLgai"kx +K5βV-ߦjj,={*˧Zd9Xs{A((΋:I8Up.z[4DUT.v)'$NMv0oIE'939VSٟ$(3ێN[^0Sy!@onNJ13<ᠳ-c=NǪj QtP?OuAx}(6WZp 4N}.~ȧЃ0u1Ds ex\EqzVPyYR=и2E x_3)< UØ`qyL,T+UpN >`@J"z3ѡq d%0bH$0xc7$Z[nU!tTؒ W.4Ÿ]:`s!q +`(ܸ (Ĭ27rd6Tƒ7N|VLdNj,c1689WGxhIuHoM/Q ˓2KPݫB;Uizɢ)ߊ'v9{hj͡{C&XLEfUZ'MoI;xB6vE=qHnSbMD-idPx'XacHE&2༙2F$ZYB]cه&)GNl! Hg#-:?{UVRH]KV%dȩfa;E /batJ(&^qyF`GL$LrMOZ0P.b'3"̈́N ʂs:HXRRDn0:z|2)W%*548%:pt2ǒww%rὰS;ؚԩMc|/3+07b"4[mSg +vbLY>6UJ*DYdFڔA2LaMnW5ȝJRU%]qT~] &7NDrw.PژDZCq*5DdoiqLlSDk#Fa" W"2HW"*gW#kg,֌rEJ!v1!l ћ\o;՛u!%pj)i;a!aeHw~ +ėXTdڱ+,$}]rIU) (M`z6ZpJ8DOrtKKT!0DzoQ&翽˛˛?+';jtO>_oo__߿<9{ӣf/]?x~.^n#ow??<F7l׳ww_}wk +c8aj_]\ jrqWgGOhyQbB>~B>݄nw}wz ؆e~_2m>~?M1ػwoxwuqs~赒?vSO6GOwW;0Y~vwyw'o[n˫NƏjsyw󻳿27OƌI~q_\w,}5^qe=wg-78B5~s7.w.{}h˔nxsvwx۷wX?(X8W_}zCz19CA==_9oo/4у&,&d5mӳ΃"zPDEM/Wej{W}u=/N!iJ;c̦qokfWW޽_/hXd믞Xwo^RvtD'40ކO8.~ۋ_8SL;\KWo囯Dz,{jc6?\qRo8ݻ\=5ݛ//>;?Lnr7noޝ찓ۿ|ٺ}}{s1ӝS5i({PλiO4|F :%TcOfuL/J-{)r}c_\, +$AyZ\ɺ9 ;(Ōv`yBé7f.~v!-p7w_]_wx?5}ś?_к3yѻ}ɞOo..޷ŕe{bK+'xsO~+lxGvOWg7w9z/#֟~GOAD';Ӿ/wiOZ(7`5%x67hְ/o8vK-˫nnwnnFgWߜ}Qjޝl?ʈ{B==~R_PL3/^6S6gW翹}7TSyRo+|lԁ~+q`Fx`/͠ƒ@| A<Ѳ/>~%~>n=~%wps~_}ɴ9N*Q?#x(Ѷ󒽹x ,<;8z7/닳_rbԤG>Ȥ Ĵ/> 0u%i-`e'>}؍7 8퐚aȇ6e8_a+{ח_~nB>^#~7ֱCjl7埿 s翥z_޼;nǿ||9=`Gc;">o..n>ŧ7/|_/o.>}s7g7~u<=彃`e>~~w<,lVO`KVN7/9cH? ?,D1.MMۿ܇]Ao_ c;y0:N21I-Pl{:F`t:Fi޻zs0rPLմ1 `x@y0=AaF{͞7ˮtuy>`{ڞcq<;?Y C~l;Kg쫳׷߼iܲ8{'`<R#_C޷Owvƌ'b_x_{nlO+~31*"^h?ϲ?[tPAi׻Djz'}aj_]|82q?䦲؏}~ >ӔvPM8d&IL2{$gaF$s0<~sۧIfk&}0ɐjwKѳW*K図󻳫^ ?2Ǟd; {ogww0hoW@l試Tͻ ]橦Nۋ}s]ܜ`=}X^02;y|)ۧӋG;{`g;p/^pøS$@_L9}p?l_|wWtbc/ʪ ej{7?O>l?Bv!a{mVilhzVLEG8A}H:U^3A} <(/C}<*A}zyEAqꢻLmu}7g;g42Bݲ$eyѸ..O=P /j7F,y;sN|quvOtݷuݷW;SSc)jO/ܿaU_ȣwaW}{GqxlĖܸ%CHy7kv7~Ts]@;3?1\zwGly{wƒ?|>>7__x|7Wﹽ7>>~.ZSv/<vjn6'O,YȩП,2c yکr,_1EM +qI(Wa8 bۿ|> oo.>f칊d }Lo^d/;cd|΃s?;@0ú9N3hƌ^h'^3O7n{ +`˻ߟ]~HMGWT-:<ϟcߓxcéۓ}yw~o-xmb!r#:</\!Pqw})~Dpd?ZlzFwG٧w92ʣp~ގ}ym퇃?וsE;%f?>] _gslQ6'0/o5O%b0?vigQɯ~ś|l;mξaj$UͲ?zb.nz~\GGyAcc|V(aon~4>|l˾q>J.'W6%9c΃{ġ:^U=~(r;V/ݻ}*1-~SJş/o'ZI}{ o'O~nwGĹr9r'QcDqzC>7Gm|򾖣?Q?ӷ_k훣t1?ᓟ|MG$^5R+-kG4>ƿPX둇kG؝Z| G2r(LFR}?^sҘ?'ڏB?]>ޗpÉԓP/Gq|@MIt)112V'OI-#Od̩h؏?4NkգxbhwcxQ՝Ǥh zD3d곹1˱!ҎV{|qR>n~ru8?wۻitj?3;޴G4>=x0HXi̩t2iqLJ3:n'^hGE?%dXQhݘnϴhEI 9A! 'qΉ8u?:Tr?'ӑyu8})Ӧ&y8vuzgޅW|k[gSXRK|cb5r.vWt6ce"gBǗ(1'Θ@t^ BcXǑB9܅򘃜cZ؅KF+Fdu;Z<=:-x\䱈X!h<3u:s}XʭڏvmiA'ST}G/y|>{{P:XԱvqL9Oi}A2m67>1븳kscL+]f.Ֆ\iq;Zyt<5:e!eL:B4#':/6q(8D̘6()sx uꨧ!P% 0Ti_Cn܆Ec;~ogtEx%z$d[c=x +=.%NתGOӠ9]S~Y`JO عs?P,ǖDw<yi;}).7Y\eBs +mp*ǂ8РDhC9NZe4ixv0ԣ};xlsk!gA=nFOS2- f0q-gZ\L@V "]!#Uz ZEʖjt#9+ĕc3w_"~H7IUju^ujw/񎵠;&|lG_E~G[y(dX1Kc5n: $:UOrmI1|09#0S!% 5#fj%g8U{3$=Y)ɷ(8ځyDnJDQ> {&#cϏӳ{{!|ڙZҦn* XO]|i=t&Yro0O~zR[W^K녋}H)L^=8c}rRu C:ҥ+I^2YC d =C׍g5ieXѯ=svyn2F"t_Il C=VA#ོo&Z ؠDn#KQXu۟kfi. 3-7L"JS5 Ar_K$R8i9&Z˃zöv<|g:Vn0K qq#ffI,֒"BHBJ5y%̲3ߊ2'sDѧ"yMˉ}to7윁WfSbFWhjdY374 Coɣx>F&,@.Q?ab<6dSmb| 1\2M5aHpduo2gfդJO8gVmD&!ԭRiL2ʜWOU&N64E$U-m.qke>NӰԒ{;l D[zw? Bw>ʥ&R-D]*}VWu<z/~ZkgH?-<~_ NC:}n]-3?پsm=ŧ7?DH=lA~].çbln0߹۾W.bju'/z|-y{>rNj@[~ͯd _.c0#%/ᾁVmww:nNp؎w˿/~3~2?VoϸLwapy v-=8ɿ/ͩ9Yv,fiQx4=jo6DĨ<ئeg V`~Z?ͯH}I.h6a-zنۮPmecr=Wx/BG(izc# ]slIr{5o7g~7@gY?c6+ ̻mqy?,H />y왗~7o8nٵYCۂMTmⅭ߳9y26>H#ִ}vï='k8sIK%n$n53k l$/pï鋷Y-݂_X9S\ +c>u՜g*=tS DΛH0W0c+|%z~3Q9<ؗ;qAx؛ڟW=|TBM8>i|_^լ`HL#Y^3eV>bj}~>{.IW!'+_o_&{T1JG~o0u`(/A(8^z=Sz潸Ȅv&P~0t|ab8_9^] 6q8c?ҿ?o*Ӏ}W|vyGw5(? //79u_!8My8 ~!n}vBd }߅=˾; V|sP?O~?Wk e%+ccwnz؉[>ƃ7H#|!~g o?uk9?{?w(_wߢo7_Qߟ?~{?@g&]9ƻFHaS%WwϿ?E 7y9L0Cq#4<Ѯv,\0]^$@D7ۆo\4k[[qchn@=R6lÅUPL:  GNXN<-8)Wn3NAm eQIJm^gCM={L Oc!@pOU.Zh\=v6q}`IH\`]8;ݵ[:,tXJAwhaȵQWDNv_^]U3F(Bm!Fd CB7hw48C^gq@*7cKʬ0Bs\ZpA;|v{ `%ޝ1q65'Wcm9nOeޖ=ǿӿ}O:<8nƞacV:ZDe>h5@Y*;[Rk;&LzGf3u |`," ՚.{+/Z*j&Ӌ8=qU_-K8$^TඳȔ{=Buq314 v&7=ō_c򤞬:#0 ٤TfsV'NQGv=dp㻓-` +~LmG;?j0 NTm34!w86L Udԏr1KE}iC5p#}kێs^= 2 0wAdpA[6,`=wCv|5׈2> (SA~y<ۻkW5i۫A~==y_JƂ3V0Wg @'e}lpL9wCnUjfn.b +?gY3SI7G܆S]OZ{*j^x]04@MW8+lo+rϪɔOދm{YDـ' }AY.y}p+J.'Mr?)k+M?8,.ӍEvDLѮȽܻC_统LAQ_E1scBb7[fA:qYܓm?x[V$ᰊ3969$Wtڽjں`yu8J6-/H;dpdAF&<.WA|e䖊sR:} +-Qn8[{.ŵrhܧbh +cr辍*ˠGىo;vv4@,ܞdjtM>#pLnK/^7->' `ݎ-$jןo~_w}w[p^чݥ|͙:^Az +㥳2F~F^ 0?Lҙyz&tfԉ +q,6%Ο9rf3oЮ;#uӯd"N][8M@vDp5`X[4Q*BBP+ǽμ]zD>c&y,{rU\QB+pA ZEJr(<MG{]gob01Є^wtv%<<KPѽ-o'v tϬi!Ѽjk +> 7F k^ZZPDqu)I`ptiMcs-TQy]#'pS@5,RM$|9;uf]MLK{b4~Q}0VlcUc +b1Ssj 8roCgTvG? +U jto=LDM{M@XeAb$:(_k[$ݻeN{&n/AՔqCke]q˜:( buWOoe\ lSqVUiTڽ䕯9!Vމ H79? +At"W]Cg^#€0מDPgQBe+ka_LaGn pix=hYdFen+yq^FFyjVZ>⿅g9vr ݑ m~*8(.9-s2^|+vduȢV"kڣ_9{O%IgjZq+׻^nenyˋCy]ߞl`owY4F öJ~(|@FN- +`Wz:>"Dx>lBL3%;[P m71DIT4챥| 㫶\d_9 CZҮ vD~BB> ߯ΣrYKosFIv^X9_8/#MϺh&qe /ۣKFڶdGo$^-ac&OUӖ;LJ`ON #?q7dOlVڵx\6k$hPą8 ْK9򊠩y3D[:c԰ ^˵A] ]BW~mNe2JF6ëPk+3<}allEQ`AYA_Z!'Me=]asN:BtzVsFGPB`ȡx*(΃1 VqU8窱V +_UŋGd}X?+ɞ;'yUڰWn1UY3-?rhĔ0 6\8L_&"2)8 V1Kn؀;g2*7 wo;8~iiM"6H,y +"!FR/7hQvi[rז5|mgiU0Okل.($iCgբ!c6.EF 02G7;uFi|L~!dƀO/$_N{C#Hp~ϬO'x"(,bB/T`擖3} \eQ$tN# *$޺/+RA\ek". [dj(4~ՙP9~5M1W7G]S*Hj-شd5i=R\A@#Dua|!τ|Wɐxi[HS|+x9L -srwҕ {*V`ܻIzfan.)6C@mFu?RA@UэЏ+r[B/22ۡVϫcrV63!v?}$ѳM|M02HX).DU0瓍E(u4rLfILdB +ؒ:1DnAD47i@j]9)w 7u'lǐٓzqp 3m%jZ gj. 81}Pfi=@՞І&βkYOs t'__{q҄*S8fjTp!](=iGA&"hk[{nU܅9 rMn\$z{e= oZ7>ݷ'a>oXۜ~mDTޞ yXmzǬJ:;#oit2qJKХew 0iRNΣWmԩ-r 챢Y/ S-fhhvan @UawGC5VN4{8VQے 2hZ"$:ܽy(rͺ)ϞPS܂{ +ٶ6/enڟKE +cpFH0/T-c"!pE i NO;0%Z0vs=)g

J5W_ 82C gވ{{έ*&`ΑHbqrDA{ؗ5\YzмɯQt&IIC(_Bpge8tG.7D'AT(йΓiչ=%0 :ϗDd洚NOp<8߄V#;#O-HI4 /[x6 ū\$~ +;{`ǹ;U c: +endstream endobj 23 0 obj <>stream +RŠm7"_- +Gc;{*#5ohC`>k! hjRI7ƙ=* =A6HT6,/qD']-C"X< $QuJ]P'KݼaHNJbP4pYkuZGe-pCbM)۾^?P8"CU&e@f_<6'f`UhvאF>NvJXdxrSB*ȑĹQ7BĬ0QpwO,jG)ș{ڎB +D*ZeT:(]k=8CvBIx͚QtjxT4PX)GVdhOI m4Lz,oVeT1)6I<2lӻEJ1]xU+-!(\nˤ@lVj(;<#V DUo9c Y#{]W;@ãLy?jW,];E5}K U\Ǘ1ݐ{k/aF$(TVK" o(up rlF ,7"GvvI<8TٳAŎc3yw2#H@hҰUTFS@r}2R"@jYV64B9y{1R8wvɠ,Iܓ>ѭjU6Vh9Ģʝ%%V$,/8^)9ߙ}p݋,"ȩ[ƞTЛ&b n2aF3],Y^4"Z1?Xb6g +6Ut9A+D6 ;z*҅(5%ɨZ3<7 CѬvCl_mS\AJAtفb>Fr4֏}"Ẍ0 p2bfM\ Uc[b>V +Ji=tf`s + 0s$ތ-ήKG=ڬW@e=$f$W<Ŋ D_Os ”qـ^zbVq -|ĶUqN!&/r ,e%^O !R:WGYYOă uZyU g!EGq2Y)KRڋRxې_EP2d +vӘ,0 g*vIe;3%p ~SE&PжGaC\_jW)>:#(`rOy.%Gۃy"Sa7 hfG)¾:oc. Xu_/uG&77Q0h%ȶb=W4[lG,ULe(WxyB--aVmA|+3B839ZZMZ +nO/bg9л#֒_Km/P(A +GRئ@XH8R~$;D @¾I5tǤ|ˈTMӷ `w c/ca2@jhq lv8B5y~T,VVY卄y +; ++*7⛲t;=M=ZslR +H[[W +ǼL+8yO@3PƳ4.T^fTw(wUឰ`|A&O?[33HI*I{g'2HD<_A,de T<҇i$]-=USz2c]Jv)[9G"L(o8__,,'M >LY;I+άtmh),S0=L:K|.O% VfF9>#_HE#j$N%FeTeߟy'J[ru?%h*_%uM^c*ī %ta4Pˌ-w$WDar>">NU9oQƇD $Ͱqϑcd\yUڭg+Eؐt ﴘ)i1AiWEhf&&l .u@|:'s)3%<fvi2Oa[p 8Wt}l| yQeZg1ot>~ŃyX-Ӊ̿E]!] +e[2P:+dgK韽24uo5ƞS8:&M|ih:$mAn_~nئ[5 Fp8H݋^AO d.ᢢ?騸όa۟ʵ(a^&,]ܽ-\eO; $mz{xDc#i߯8MmW +(3(=(%֘K\mlphpR0Q|Um:ſ$c4Z0,/.䏱Kݳ*8-M0Yv ֺuݪpS$?[<$6>[zͻ7)îVʶbXAGT2°$6`$1‰BaQOg2$611'(X\`!t4p$r"ddqAGtb6aJUZ[No{i1m!*44zQbHa!OhXDV! :==lv kc"FnTRKa&g&udȗ5+E[e? +oЎ*pZLg*DG꺞 𾫅h\cַf=AZ],㉂ZDIaђAAi,U#mv'7ۨ k7'vraGOH?zJ֪ :rXVdwa@xLVHiI03^6i6x׍q&u;l#Z,F(ci,X9}<mY4I~_ 1q>,e` IؐW6ާpu eA_" zxJ *")8kmb[U ČG7R*𽍈˳Q!}BBRrK).|C C1$2m핛,aS\# vV#m\CY=RSuvS^\!'ZDp7jUg?$ƭ1[I+ e +A_W՜kv#<4{~t?N#/ /3V^>xkV 18%hfMٓ%VHZ~ s^GT :@OpB/D5"](Ѵ*1!Zl! u^D" |rBB^)H8X@ƪqf.U'Gx|"@Cڶy\z&Vx#J߉SD;.fL2D@a +=1ˬjK} Rw[,J雭T02| +;ab Zi*`ġ:[^,F*> *pP| #$u {XT)+g4O? ]A% B5h%uI+[*c+~hHyQׅje)`F 5GN}E"4ÙRcm2"Buw^IM&va]"MwEDi*6M|1Kyv@[/K%JZ)\Ea6@" w$Bt]* ._C[?e^̡fk9 gALfzO^=.YV$[EC5Cc#>3eG!jB +˅l)9m8IsGGd:).&P0gdF`m@)t)yfd9O֖]j) +%C` +TJ6DK7fr2$Ui\ Rj=)0<1ᩳ]Xv&5/003v[9^9_pfTsNƨy)UDwK*+EgBTg!\8FӦ'+R1S bP%^dK &t5:&Ȭ0hZ\Q /(,՝*rTTEYpnWCݚ_Hhp?KAb,)߂,8Fa̗tJB^B0JP#Vrϥ3IqQԸvy]mAf"dN{z K1g\g WPaCXW%f=gtߞ4:PRs9GR[Cy&_nR,6=S"pxd0}1hC_ɆȃQH#jۻe 6Ht"VQV(z#bREU ƝA? IE@ T2G>+03Gϕ x*YOQz:_ϔ_;VM %БBz﯊SNi^[19A#Eڮd37 @QW!ч;jXcWUP#`t`x8yڢIT!xqs@0 WZ"~}$a ҁd׌ +)v%apđyrrkGMEI{ 2+o0>?g_E) ɝur}W:,Vr,SޫdV==Z]Ea=JWW2%AVq4C,yA}yOm@I](˲uԁ#LHﺶ/s:FM[Ub4+f!yؓuzF:^Οj' %:U6&IcKpG{OM{Ld;v`,sKMex 跺w|#bsO[|RbWE-iK謞S-!ף@?Sg %wŖfm2rc-&̩oh_a2 ~)v=S'C&6̡.|SOPzZ^ K5"'_*ru,H[b@ǰCqEArUJj&Z}ŪOpF5HgLv'.ھvG^53Ɠ;#\Zzo75< >+j1C\k}jrwOΆX҈Pj`'cH qaq`xD4銩|64!A6%x7=,E'`tV2 ^Zk0!drDΉT%G24R5` ++U)FMDGI)%{j"e#]} Eo!-UcCbD8ڻHQҸ%dR ~*E{ 6/ivZ ;S%,|77z8"IO=M"#aBW"DXbްzuVp5pSUc4xqU +E`/6K4eECLA.rC]یW|z*A%@ +F&5G*56t~)#?{ys#Y4T$lW B +TjkƒPᬓC|l3̸_hHQ4jM(&%A +JwkD63*djN[VqCBÚWeb#L(qƧĊO%ưV[Io.`Q{P+iLV + !c{ [KZl$H}(ɪ_fm0U젿ΪکxDB"[XQDovO_cl:('RZ8G)Gæ&U4nE 2-fN(Kkd rJa f/ f.?&p]g8 }!$@^\d@a$A:a&/z4m"8ބ00ZxQMDʨ[Vx5nVCx:?:C| 6Zd՟:Y>߂Xߤ_D(t")P쟾\s1>b.ټgwZU6G{5l .ǃ=r`wf*]t@UE@-a}BU~>H[ԙ# F/^CMJfkpԩ}U"EWj^kQ=4͙-U5o_Wj@-b:Hsc0 (:ҧK7黶/D ',5DuJ1CL(eq9Ld僗Xw#^;i^6jZ dWh)x~ o;L_1XV7 +j(jv +.[/: +\ʹ> P%99ǃ[WwؓPy;La2_-/pTT_n{P ?at\08wl9c͇ t9d5jG_zc# L 4:wA~UXX\7\2;Ylml֊ 2>D'vfV_2 ppbr" 3=T\tU~\1÷P챒BJC6e]^!S#oK՘UKC +΍גY¯d.&i =I&| +XH28E]R%,n{\|VRUl%uxv +'l(u)8rلXd8g(>CW̹<̩=0E37 v,` 8}  UF%0$Iךi)!I<˜`)vr,IzH*n86K21$Ί`OhY^a(/\!F}KXCVK,Xgn\xwO6?+y =($PZ===%LHGP&#IG*'!s9NbNh҆Զ)H=/ׇIJ:C@򒳤~*7tmtί?`Uu`r=-37a]LHwڄޓ 3NO!eGUBڤ*Ix[9JėꖌaHȮ<:ʳn?&5:y)3[߅U-\Jj1T+32KX8ӗ +ɰ` LT1sާV&@0@Y1VHU-W81p-UF茰3F)Yb&P5IWE zBTPs2 +x0\>y!z]2}Y#R/*1Cn?%guŝjIǽ:kX]쏘lEWG&[DI8,nS~\E!qUUV{1ZST72(یS @g* Pl`6RQ<%Z*Q滮[ey}JWh2_$.| +Ii^f*\yU-ˇBah5A9<F߬@kf!US!U ^ZyA/o ~ Le)}zi_Vw+Vj znxq;!^J4:SUt/m%fCboˊVRuaIu9uSo˟x(r%\z FyĒpH +jR+K +2$f!-a|UKi(MkO]UR>_D +VğJNbUt(LbDzjy4oBv,M{ByK'*"Lfc~#aK2WQAGħ" +:DL"ۥU@)PnH&IZ׮ {K]э[SU5@{z Uhº|VJUsuLEAYE@!S^NUp=fnHz=8´(WanŎ9,Fb#9Zbxu-4'٦%ѣΫ|v WhD/ YEPE[8S #|Ɛ=&:r HW-$vtYܻEi7wb1 Uߒ?u>vS=ei9:O 'o?2](Kc IBqW*FJĒE +~?e$Qbu.YĪSR}Vv +{} w]ߎat!P7K]ԦB=g2yJdh(8gqg.c6;7ٰ !Iy>T+`#W\uVݱ5a+  @HK:Nng-,ڀ%^! th3^7ʹ#©&`q+kLÛouQd2~SIB|ؕTKZuJo^Į$ ]US:=Dʀ;ގ^2 (0D m *#ѰG1^ xUqU2-']yh 'zDf)&tirEg~&تC5CSB('_#sd9)a̲^UF٢Ԃ<2*-MAL6+T+ +>W$I.nd-ț3`vYd*!z?t3,sÖ_%V|஛JP'=QҨI':cz#%oee^?[Ç|<t|ďR*2J +6ZPiT<\ Z^ _/)@}oQ6`R e\ۑݟ\NW|$>(jOoeuO KyLV4f*ay6JLmI2n͚(Xh?nH:<$UIil,p,K]zp$ ꦣh)NnʲMțYQ5h {Z>]6&9NrhXIO7&Sխ?V,Vf<(ɿ؁<jc'mq|%)IrJ!u%Ud>J@f}(4\U(Sy(2`x?/ +Igi+,S +MϿ"VNSj[V^}&_ pƳ7ba-n^?WX^SƔt䦧 Zug>\JH{{Pr=dvt{IԅFZ~?lebC !KÎOܬWIZti1!]"JfW*x8/#T\ͷ#sD AbLh*IV,tsm(]Fg|P 'KCl2q!smV(lx5x敊 +߻ Ѧ,3ޫ#,hãB{dQKf OpoĔ) z4Lx'!:DXY_7~s}a⯺oKdۢ CEgO45 z1}FG] =1<`SyhaQ$*v(V Xu#+JyV$+TJClVinkQBS.:<~=8u*WZY&`8ˈc!]B)UO=ꗸ{S;ZK9#j@4N~f&;*j C<m '{ cVNvR6?ڴbJji +4 8D1kUſ-bSh -f@JUf8?" +iv=_}FL]nnBQVC@Ҹ FU7^A^KB4mgUÕXU0 sQ)CT'gѝ5@e۠meC{ugG<С:F17@G3AØb +*rV)vD,U,yҖ("0X5GH¤:4 ?e<2 +8zjPշ[P9\{T!pߓ+@ ˯vca رo,kʯt 灥MF@>fSR#u/E^\(BQ&gS $e/ iN6ajL5j_w/.!@d69` ;XdX%?1IMkA =0(t YIoHD2pR8``$2VӠȉ+mQ-Ty )rW9Թ=t;)W[IewX2x[U<oJ/ +:|r ѧQ/ gc-B+U![ꩨ,jnG;3_ ~(KvtZv,NlFRb4b gtfلcQ|"&> > /Wc*@Mߧɹ[%54sW=Eܟ%Α5>+L0RX15tf o_a)88nhI=ݦf OƈAKM:?V*hj s1(%H{gj5MqBTy]l|E4KoTyQPjϏH8QF~etm-_«ML[r3a4.ٮW]dZ*^T"AFU佺 +'URsD3W r9ɑg:wܶ9brE4iF*Yh=˿Wi@: UC\)"X@U4eBFO R)I *+gѫπ|g PQۿG[Idg T&LկG1K"vb1rDYa64UHzn P9\*Jݶq- r^UaH,B%Age3=I2߇/!uVbKCf+4!^XLԔH-(h"×DX韧m"&oLt ~yvի- +IQ fQ-#D̺j#h=)xl,o$8^ yj}7F};KM9T6YM?XeZ*"y0g~!gmtұT5b *Ş"''UFl#1\`А}3M&sp-6;qTԛD[,J["rgΎODE娞Ue]1m;+UY dru"LQ xzYO;rD/U __q"+ *PdS@WiM'C2Xe ţ;X0˿?ө{\,Vi ۢM#,ci8" DeĮE(j:lpxdlp:lr'v;G܏:K3}af7F7ERѹJZdi\u|@3R RkT^ C嫝zJd4*|iV8]UjAدbuo))+nry3[!֛ߔrF:Txign$(Fn\z`60V5EDKug6y(H_륍ԯ34G/~!9өjضҩ+ +͡O(BX?yR/LLV֖=őzdч3 $-})Gɡ8F%n)+"!Z6GOȉDQŽ*l- +TX D){ݺ#@tY h38<?>m. :Vnt>BY+:rY\i^%w3 [5j9P4ߎ igyF 㑒 m_ +U(܄^z[0OtB4~Oș'gʘesrZ56mǶLLOo ygte֦Vk:d?*_Р7$!ː(/G5o($<]MʄLb02@yj߶QrWL#vem(Sڭ+a"?Ȇc"44dF656$$< A#%zW3i ?R`ɀcK1?$O5³_|TJz.MO+x@?=Az*go2ϭmE[QғAgg~ !mBEKK5D" Roz4g{i4cg*J3#%=U3k;B +Mk䩲7fe_*If/-mV>ρ3Sڶ]iC;e_UX ꢏ_J7ûHNj< U Ӭ+"|o̳)m$i(Wf+s[FkytDsM51++ %?#߄bCqSg=[;#>HtqR_uQrjUdՒrK-p!I3thW $1@Sj/웖H%vpUUr R(jxler^)ūs>s0hڄXe$ KIKMwx03,*1UagJژ[ [1vѬAի!;Bkad{7*k@:Q6G 1bG{|9OJ] >AkPZHXAm4LR +RyE@ YxQWԏEN66ખm;iG@hC9BVZhЀ'~$-65`EHHq*XUJ'|֧dZpŷk P3*70KeAW;u',O/-ab ~nJᨗwpR|4.X; !#>Q~ۮ(7gI r:0˄|?flܟF.5 `_OKoYV3,њb7@}B.A*UKMʀ Fvߕ_ G%-Q#3g5Ta@wl=#r' +d2zqT~Tgz񰺆c=VZq6y=s{]aPU7ybU/󖢻sMxF `ZR0|Yz&WhG*-3z.\lܓ$Qy$oOWIS"j>r3r-X3FoCMQ> C9%eem+^{^&B-M򵼙'e,3LU7zv}sseNҪij($Pm*G}-VZiSUf֞댷z\d=Qtki)s=Z)",﫵4Zl.2LF\zE1n҄(I2U)bK44ԔګeIMJNYSwu-[GAß]M +fצ& Z23R6}}tK&c4F5mݖE"XQ w8uR-]M 9GMΏjg‘9Ҋ"çMue{1_\(‰\scb d@R3WM۷ǥe +(t9a(ґ?֣%PF aHcJsSZATɌ{*yM(t|][1*aޠf(̆d<D|- 'vRUw*Vw}55&Z$@|8 {m[>G~X¨϶xRs>U|{!F]{7h?>iK ș(, *,v]{ u.xӃۑ<4fe  j1Ba72{`a̬#(+ SuTIzzl|[ -6-7a]%7k_ mv/K5c.$Ӫ$;4]L΍39׆3wJfݚYRZ + %xS)}*nhCr]7AO}$FFBeBBAQ[| Suݬw`LZu}Fhۗ}[n7J`8>2Fz/tQF0c7UGOV!L? ²tܵ?Z1nI^3ُ"T|Ф1F x||^~LwU=[(yB6 mҶkSwޅB*aD"*5l=lx-9p2flG܁~gCTSкUZ+_$fhcT"T!֛3k\ItLLT䶼"*pEAT"{Ht{nU>F#pH&5T{}m2D-!3e; 13^u&kOVQߴ7@ PSוqD!q%YS3߼gCO?FN{ʾ7Yr+&lHՈp("Uaz*=/ޡS0?~\U$b=9͗֝s,eJj+ 咅 ӛ]yCOpвNnz:5+^*^k,!H"$vN{͈ 1 @ +O)g |hdW2\a zbu' ʔqrЊ"t?#ݚ5=ROm> + a:tT蓆k #NT\Pt{93 u~= +|haVD=nV|J*Oql %9Ky z$ZۜllykҖcs&+cd@ŨVPűBb?~{eg :\a`H';\4ytm1=P8@-U<6_yzEk(-"x1b^Gb]HQ +t9f'}!%wmB7p@?būx s_9c̝QBkYϦ{1㐴5n(5AN=FTO Wi!RbMŘUVbLxp+xSK]Yq\ʂtlz CBcHg$P9|; +:N f  y\A*C̃P%rೊnjBjEQ]\-(z/hiDҘN\,ZFxfwSd! LXAtPIm=M q'Ycgp=HZ |]4[HlJ#G34 ~E44hkO+S^)kjB. ļɜf}M^yEjcFySb%FuoИgcϻO^*}H'b$\OC\}.cXJX[0`Ѵ&hVUăG`H] '{HIW2s6z`~["!4pxdO0hV&KqCϧΟswHB"=Z[WFDi' qWZ3,'&DWO=A> b!Nv(06P ~BϗBțU4@ǭ- '."єziN %_,ZGᵭr8н +t $<57Q"b1&ַ{5uO +/93ͧQjAq^|7,ag޼"jwrU:knF)薻E{@Zw\ Dn'!9G#dϏ2L~ bE}HZyZ|]^#yX+q#z6x w?}/2eԉ"E+qWa/\-X1-(Dǖv +Trn H۾X/w.74C7i|D -Cט#&RU$O= ^˶? +GbpTƌ{p;Y<"i^xHq OEY3 ψiJThGY7fNy(\?j1Rdw9Vxv=j۫l*'M*h(CHiLK;}ȵZ)Ş+"A9o 3 rYSe<"_'!O_MSíܦ;z"WCZ%k#1ϣB2ɤbFtUI@԰+`h6'^ciEN-`P}rW.CBOhӕZGT5_i㚧Sw6#]Vyod/il:=h[x(2?Q.XFXdwkڊ2R/Q0}w6ymq3~/[56[厐AJBMdSv"P+ sQaq|M$1LeWjE~uWIۅo^x/4Z .gjs$l9RwrxpDdDQ֙nl_" +{ CU"];6;?9޵C;S+O ZH]Tz:b-SQ'$])?j'Y2UsوcYC[;mN5ΑIwg|, I4MwDAQ#.چ_,б`ͅsK&ez UcnI,6ݹl]MTY7tDȾ^y-<;* Z="Es~>P-gfib0 ~IOh~p/3g_gQ~ߵ}sŐ(5 |=0& Øb?E+| ػtF՜]o*ȥ$>?|֓<Q>qI<~Rs}~2y G~}Oک +)ʣꔠV:oBz;p~OrbÉ!؂_dVprs;KB}p|GBq:_?Yv29={-\TՖgpr8#r[ߖ۟a$6%qXQ %DSrikK_7ۮ܁/|%Q;#Kq,hԭnDL3? W5&Wi z\yLSc jSoa8,P”ξ…% QH}H L(9qοWQ3CwDE\>)Qs)(#z>20=2Qq.X0:+M:-Mb@\꼓 @Wx-]@}*f)ew-2q凘I,.`@T3wӒ=9 _?Băr"L 6Għf)ر6TotcF”?-&GO})&Q@S +γ.vžL|Og. o >Zpy8,* !++,zV|ǫ"R&0 (cvɑL߼@4 |] ̱w{Ƥ"GL~; oWw ˾|\wò^gn\>+xG J~Uه3;Qj-+#2`}Z|Cx~P?\1@W ކ8[=G ´2z̬-!7˗s} +k8WXOa__㳒*qD[;nHGtVҏax0|G<Ὺtry?Cu)}sab)79=~ + {+x9oJM1 ukҗW3x*`.G vIZ1$ܟ9Οz8 02etwcֻ]zV`+/hU"pix@Ge<)%ڿ|P`5+"PktKn\̅igF?<ѬD:,ONQAP H] GN_=Hﵔ2a>YLGAFi爿CNsafmu{/HO<"+܅rYZO/gF#i +i8{ %zZ<ց㝺i/@F Vgmk/{W}Z*d}sv㝟 -z}̝RƠ|抗;R +#p]Vn)CЬqK%@&S.F+Pq}(WWr,gDUoQP ϴU(8yY c@.7L]vֲ鵙#[ȕU׼֛lP#~%UܼZ% @=2cM!*xc _u!1":,v]lj.Öo6=bۄ:i5XϾVHIocZ-z_s~*Mj;|"6`y+9JC&oPV-DR4".W2?㾨C$FTT%sJܧb4S<bAFwR/Sc_ #A0|vٿOHSJSQu)Q+N$A Ad;N;˒} GO0쟐^ wF\JNzVɇ]AYϾ3GJ^١w@]nUCxE*h)mns$vu%!urQ@b ,DM}G؀we^y̿]l,Y#M+nar#%_;nS2 f@vj}MIv%XY #0d” x{C +$luuCd @r{XPD$6NïA,qzx)xgLX 2FgRl_sg + mݿnU9`EWYс.*Iʓ_Rf<уS}>#G1u>w6Z^ee(a[1 F.6dLU x42n}HGnBpD?'`'I|?H6 H*槩T[UpKk6 7yN?sY +?lGl{;# daU@gEx"zMS;8NXU[=GkJoK `P;(z98"qmWOfwF]}/]̩X r`U#1qj5Aj<2W=="Жy[Y~`v +gױbH;B6GNo>znFYEUر3u{bD!(cT[c^7HkTu$@P5#!+t4֌$[.C r;A8NQ;*ļ‚OiJ)r_@U ݛ|6o +#o֐9k-e:uj-ۏr":~8\OEO y;yDs1xO AniQH|~L=x-mlڸ^숛/mTg-~ LP̛*qy514K `3sCJiNRO1:|0fY5teC4b'ShQcQ1'q,LGK 1I8 sUO-)utrx9lU|gz2}aoRٺ =j=S8ҭ-DiWΔaӭruV٭'$BY"{j+DǬU?D} $`UV؇bN7ڳꆕaooK$ Waqu蕤YD!yegQw&U:fUNkz5 ?`agti˩el; +N<5;gE^ڂ#΂gRXg%IR |hiHjVvC@c PϪfORxf>S}V^clݔRԑ Q(ڥ"۶FbA)VtcV|>c{R늆6՞anX]-ke-Φ|WYe\Gn+*)ZW094䋔aTFDܬYUtr ='HE=C&9iapʑvU/fse[G3L>}FJoۧzK +RLQDfn7y+i㽇|a\~D@OXLB~ϛ.weҲiW0=UtǾroT*xe0 +l3|D^w';%au5nhߥbvH=>(u0;ҍ_ܧ:6WNvkr2wpB-FijWnIQ?ׅQ;#J~x޴Ks"kQJGN"ovj^Nf[RozOaй:K ;4O mxQHpX3;ƳrlGz"gB\Ybm3pC2paOHVLoUtH,TFȑ\īpڙP6榔QY#}møGT_s|? &IOJz6[p>{;Fr-ȯdd +[wAIFڙR_/Rz.냚"]O!@ϪKu^YQ3 k-7NqGw.T(Þ㕦u.y5Yu2Kysm|T-T#^K6s5_~}hgJ +lv O0Zy +;⿝2U9k~boGqDN5 -Oo:+2#J/P^$.2 'Z<[gJ6jW _Gzw܈cWݯrQ€&GnYJ˔dآ΃[Iy)Kzw"8LV&oْ}JMX_nˌT[b ת: #Q{/4^WLE*JRS8O]n%}w{sNF$,Ok_}; 9Ġ8݀RWX7؊?3uoWJD +lpq,g 玀''<|WJLG}5 X?GvY!۞Tvo^gk8Lz"F0G6ʟ -5|U4]˳EԹrp}7g|Z,cV<0Xp#'15O8+gcy{=9=|$=6ʭt:V[=0q®ّ0@Be}-'$9"7> +`v%.UH]W:b?[i.j*(pJ ox({Փ%ūS!t~ER:{} oAr6m4nWe D!NEQ%Yr-{WL4q=q_a1Z]H\IeJ}/e|IPTfzTSy Hwdgz_K X} XJboU$'ɳ6,lw16&S^I~"ؙ\yKOu'_2x<[pC_G>tOˮ +7Q/#^OZN3 i0}~CB;TȖh1U-[VxTM OHOq@bSTTLMXZjS'f  e֥QVGU4)g,$&N'#^qG&uYu躊 +{,kϵ|Ajk!¥xuD)1 MI qO6v z"#g8RAU= +gm\6@^˅p"&]dJʗϨRpX].~GbobD U'X1Ha;%Jw_+xóe5L$!X]eԩҴ?K + +%C*s9EZ} Ԩ_ Y{ j@o+Zg5^WRH{jwEfFaٻh {^S:^BXd C6s2Qzn59 \n|G$4y4%YbcS^r~ksCSİ_ Ryou!$2*D!EvյG}廀A'TYiۅ#yO=pzFnw` i^륢Df"އ‡@RQ}sUPzk;sqgKB۩vlM ->Fu50aGc}rPRsZ&q{En +H>4 ˬ\B( t"C.`ЏK]V{Iz/M* xxAzzuRYDM Dýy7/&ͦVbb{*?-BFfܪU_[5|Ci Os(s/M5|*kEd؞QgZ/n +3p{G~N`"k~_:Q:{^2ucn 'nʃJ4!#zz.J~6ꠃ-GZ¹XkWeo{)q/^c)*a<33p5r5 4ϘeE,"b1v/mc*qWt>t?"R+]cjL(S𢅵c4UB?fW ) iɏ#ZR7-UHTB + yIuw F +sP;k +yqZ c^X'9ݕe}UdV?I˲Zs?=* EW_U6E z{%afʘqYːHR_(a+1)OUb o^ƢH'Wܷ5Pɖ+qw0ᅥLa) !P@VV9Nc%{WlkrH%] +nH_rҌiX?~+J e~@,Ñ*DAO.76 H*U[/~zպ {wXDw1 q]ldjwv3qɮOȬgG&WI'8C?:v"#T%o}J?2=b8 HaV7ʍ8VJ1(k +!%} ٔ<(=T"?PP7آDq)2Ќ,sOȾ}1R,;K +掕7jLRъ^D ,6b≯ +:{7s5_x#sZ +P =Iӆ\F/0} hX+f5-WU[O)$Hz:-%%ԉ1Qo`wV9̤B{f2mcUbMA(}h*Clt&=|( hpƋ% DdO\_$D_)]fv~0p^)|^+%gJtV9iش.ew]mbgm3=[ڢ81b#U9V^TJΒsȄGC,dKdfAhRc?q`ŊA•F*:?浪ny\ώ˜(*U"ǷgӒߥB|9Yd|,`O9v-G6B'^GCmlDdjFxʝ!j]cg4aX61wIp!ZWm+sޖ Vɶ"N匿 "\6. + ծ_Ҋ~!hTS9 v1 mh;fg9rqaY*WYĘ f7]n찀kX ^}~J*T̎P+c4cK1|LÊ !'cVUl*<(/Ԗ=V<)-cl8?0"l*O%:}a"|}gu-!%o['2mUJ}HֶVsM-7KAm?ZS2Z90w!YkXC;]Rj{/DZpr`r ) q]P3Z@a*y:φ׵8hE$?K%X#1X)nNXˎWN%Ǫ +N..TJ<v:=MUE `C ujGLG7vy{xzLTV :eM͊=ӫ*d7#Gf /pvNc [a3@Hgv|@/I9*=vhY/OuTs p* +LGp 6ZG0vVefH׎SkluWv^<9Xe4ʍpҲWCFV01OO[YNs0݅{)I\x"1BY Ww@n<_а!oHt"G87ҳ2l[j $F4ܬ}ϖ5qflΗ^eXaST H^iz*s!9PvJ3NUNyjHM Q[N:[ʖ*:ah@kTR1mK3*Dϔ?N^CG4%dBZ 2fH}t@.&f4DiOUU+ΖSSHæ?"K#Z]WLS;׸T!My:O|m'Kw7(mѕX**GE£r:>XTUn줎z*LȻIuHT ſ[ΟKB ?i~p+/+?^1 }^?t]FylEmq!Gf`)nݐweEԴd4{6w\RqrͱQ&w,1f M}Mgq>w: +czQ*ݙLģCI8WDoZO|5{w ͠O]Xw;Jm^n)bBk}<.0Zs?\?le2xYdC[e:ZqK\:}`ŐˬZ#%GI4bGpxDA^WRpc$3X.lO?xKm}^ +vk_v񈪔pc ?9>=;%e?RI+:gwy-UFcI|R`KhExJoC sŦ%X[B?C< 1 M ݢo/\!t?3Wsu\[X}4۞/E24 +yo7E|K(>XMՄWŀہۛiuFz1ϥhߢQƶxC:I( *O7"?/]Δ K|S.:7*_CA_ 7b N9zKI]3] +uLxZf۝_6% oaN? >1"3A_\}^ci%Τ8UdH\)~Ȗ2eB5#{2H-@/Jr/Y۹6n-gדͣT@ R.{Du}YNeZ,Rs󓙸lpX%" E#YֈBKTOl*ᕅw 2u\~>i,ZG5ȾI58}qFNu7{0 +J +ˆ +F/Լ%K}L埈#ܰ!.)p%*0N `ׅ51}D *ɲ +X]lİ=;4@x)nSW +)(Jx3[3& 4Kx1ە cȧ@1"8L~>qIXG` 2PPD"ӟk\@! X^QB^*]uzmgHLoR\[ A%=#)f} 5nU5~Ȝ kSha,R^X]jomnxQv)`SnO8!cBcO5O~,„R3)]OIϢwA\Ӕ3 ;$c~4FƌaV,07 +GP52Ճw飚PbKKD呰d`?6!/۪犤熮'2bBBQ*[ ' H,4׷0wAcҦtLGqOGWX3J+Ftoԁ>4+1FWM֌#h_N=>N1mNG/r \ 'Pő^ ~d:j.v +DG ,,=8wS24dtw)kbؚfҸB =>=$I:YT^ܸxs6g%hϥw9br<)!kqr)1t:$zglb^W6-Sz#w~WS1!ʅ*JZ5 ;MsX_6[]ϡ׶x_BI{Z[* ԩ*EnvHŁ3S ͉{]UJT{O b#x*G7Z}l+^g1I]Qr׆[ +#`#k +2ts= +)^"[|չGls5 uA0Nyq92r%}w Re#RQ'LSk&fgYwTC<+?.O98^ +-Bp\+ 6č3=LzDZ=q +?zeꑢf,ث:USm~YbvVJZ^W"q8^vqx絝jVEނSz:+nwWai5&BVlrTbow6gg@C n7AS)@LV`jZPY׻:LUvGSTSd˩$hhR#E&\M;0&rvhH?m!YIIȯ19Op$c`ͪU\^z{(z?% \s]Z/L.0?p:CQE?/`lc+> GyuXjruY }pbZԐ_hO''h-ĀVXOKXe]zzxVeΏN(W-]UYk_ǘg~7>vFy*f ōerޙ)k Ze$ >hrP3~oܷʕ)gy +(9uHJ$pԭLwKl#j^.:sΪ(e ~fDǔ9L紤buPs+1K7~E/AI~CԠJx@zx[PBO#NN$(@OV9PU<ۊgʽ0dqMALv#XQT4g!~5cl=Q:0A~ҺRVx+j"(!VgU3],n ?-͐fUԞD`X9.I㌑ws&rSao~JgXc[j&̙0rk^bGA_Q,{cOv|t\'\Wa19 #CcIf[֤vMJk(Ojg59-J&Cד<$T#'q~t^ PuMi%&~ .m3Ru!ҾZg:a/94?FRV>+ٟV]=C7?$&{/h>7*`wGjxzi;5{*t'8=l7Fо]6'H2G_%q"Gch"vS 8_˜]u +3 +ڨ _XɟP\ו^p4!Q uq X <FQߓ FaZ%ƃ)˅X{obN6nsI<-^6- oUi# D mE"{]rЈ 94PEb3ˏv%vg}s{l~v6ZӫSU*r=%JFZи&}k^1?/܆ Zh~]6gT0fkS'DkųDhX#4&gX sW`+T}EwF{~O:Ijj@󳎲*yR +30 ^(zUy5QR!=S{Sd{nq3*̓󙥸 0S~u$>yj{܊Fv_8xq%g}ׇrvU3TlSi0 W~Vy)ح+һ< 5&w\CZ9Ԕ\9Z,şkOS}v3Ze)/: +{Tuf#-uWY>g9äBoҰMmQGއ;MKri8j6R&Y[-n=UII?gtAAI;( i0LH>RoeYߕ iOSU|# +̔8NƝx`  +yr >,hfBMAw֜ q6Z4 ogB~-q>j\+ػߧ;r4O|YtB2SgPg)("G~tr1-#^[!L0q:jIJ7Pw_֓/Njt(@%AWò; Zbwv U*E%3N8 %˦eS[c<5j2~gݟV]s3R[\=*j')EAQ6ܗR݁yZRzBMK="=ĕEՎgjholuX84w8aZeԅ2.bҝ< [g?Y;OJĺ0Vu*840@nqe+2WJ㏝_FG +ru[yP|%?c$cOE']1/sxcP}Odzis^YQX,3>gXt"o $%9IDf2VABJ71 UTh i"*_ojw9AԄ_x+ŲyݳgU>`NMx]= ͊/s͍fʥ9/z8{TgMyzbVmEJH`\>h5sڬ^]H<)r2 &ہ'yPS  I|uG"3#LIo;.=$]AGw-"* +sd&,mtƁ JBePE鱗:EU V !@0=l-zDKN<cv"G)H&b{{?Qr^nBǮ\o<%g:L駋<4D3]?omݻ{SZvȇa@h \d;tkր̥?ĬW_-Ga> :=i#a"GE72 U[|t6 gM\K[g`TM +_(Q.JTQ6qD\3\;I#v%tx85>Yq?u/ +uEqV/4qzI_0j~BK"R}t_Ok8VHʵW8Gܧ>5Du +ɫCoOS\J_xDzf[$)u?.2(V=}ɗ2Eʦ r?:e宗v~|0,`O[SY U.c$G Z[sQFz̔HQfҭd؈?P1Tݡ^AeOSҙ[}mr<\:PSbL;`~G].3ȐHg%8%ҁ*+b?v+U ;%25pǻON 3-zD3!2FSa1{g.?c}Gi=,Rm +m|R}j>; p/$vA̎P'G{;aP|EC6hҲ;NjC  +~Fs(ĈqőQܨUC(sAv9F>Ϯ֏1qƤ?aMҹgM/^")y-ۉƷ'1rUJ}rS`k`v/7,GNK6PeCyBGYY&xW QvzZOׂEA;x3e*Uw$xLwsCa5GԊtң(uTi۴ + jfJ3D\ZC6ek:q0k3tdx.=iPaEY-k--8Q/93,<'e*Zʬr%xtGӬkz7EpN g?=2ڎEbzmZ=GcQpלm[C +ڪ̏ZAKz*FR9Gu>Uu?/r61#.n]Ͽե9N5O8Kk'«t|p8`}Zo^6Xh q1CZ~PVBe==#יov 2CzZ +|ё{0~u)'aB=3тRIn`>΄a"κ_eMmF-rp*^2o) N3nc{i[^SR퇈Xn#O )lc"!\ZB׶UJҋbcp0XyΊD^mg0] !U7 |ׇ]6MtYU7]Wiݫݭ'(C˂W5Ĥ|s=⦨a>Ae *D"r+qb_]` +hh-URŻ)&lEH[5pVA$͎٦]OUBi"LCG)L1gcM0l@|wHhMbnum/"f}p/&OTS&$ ?>("'kњl.U\=]Yk`l-#9׹|ڟ7#nFnv|קʳM`ޅ')^>ZhVsC؅ؼ(]=]5Jo}_UWP1gUpz +^S+9gah }CJ6:qUa}$o 'R+54aiq(ZwiMTdGByʤ+m/m[ YJF#coOk XH?|<7GdHBK u?qgSv+*rPq$=3@lVTѿasgq 1h?>"gT\Z'~VH +4t%(cE_:T ALVd>9g4;B6484yƄ:탱U?߲U'wK*aKnQ^dG Rv"h:6Ҕ<]):G1' bcAm-j![yz~]BZo?2m~5gh[⅋w- ֚rQSW.QUhDM +GXog$U)Q@h)g> FFi J\i\UBreٲFI^;{KZ| Sƺkfq1ka-$Q4>KJ(HRL$}0{E>3!ضF*>|ruVQz]([ƾ—!=3+W+^vrbl]Nh$0-RHoVIV/ABJ9˚e(bv^BftY쩒”wcW~ + +e¨xݙ,Mpa mA2e+B], uijlè'1s&ҩn\ߞ5zg,/GH0$o!uN-@lR.%;)7 oEm.~F 8DHV{|x kف@ic6f|9'2+vK4},"/'NzӨ85yhY&6 Ni gPRRU;_,ҷ+?3x]B2˓3x\Xt\+vD&Jk$Qّ\;k&K.$% +*g'ػIXu;,Z.oXG޷{ؚۅUN09$@:<82@zżZ &K$*B!rvKTFybb6 FOH'R s(ۍXxiMٺcVc=-FFI*[FCT35=i Fשob)YLH7nVؔ D%1.,#ц'ìNeU+S9vdym\Y6\ wU9Oj@G<{^{<*eH]TNīe",BN (B( A BŰh0S'l0l+'sNZ$M20*V}h.g^jyO1/IE@q 27;M|-41jB2xK-b?y5jZ;^@S*ŁRQgu[A#Ƈ!#eAףt$aɨ<_Efi!;)L0܈@.F*`ZBqc#/L6 #8TOHY6;_ 6=B|#t@@JvVu/d uhf0G^$X1M$O*XٯdjRThϥ` ~<}ɦj+5bhpfPE_,K}pDW Δ/L(:(J5'|R9@DJ9X$Ze,Gԗ˖GaW,(zi!6VV`Hu2,A!VHяC6 LBGOr^U!^w'+DoﳵĬVF6b={dQmmL5W28ol,"i9E h-C@kU ]$:MQC,&DHfDҏĤ? +anhRsmqVh$ϒLJ-4ڍ`G@+2<ԍ{X_xr`Mq]Hd̺ȩkT'"7^rK: ʧYm7L*ʢ3/{p䍓ykhI-L~rkU0Og@.(ax%PR kUCJNSS^z`%̟JV QX<(D2CK}A$a3Hjya ɅV:%&3C&rtcX*ba@,gdo#E[0S/ˢvl3ߥM>`($A {! 8BaΦDD *3Q*)%| YTh2 kJ0ИbUi^4ZYlڃLt+mk CN{y~x>LLPnB}Uʀ6$ŧ#TY!$J p`hDuff3!^tt9B(؋Z7g'9 ھdȦ&01ջ+@eFjW6YktQ!ޞ)N l e1I lI8ػߴSjv\H^2 9]%s֠8/u(PVm}9a[awqbo/_ #YW6DARnU<1cf LW Vf)Fy"JLȰd.5 H뷸FĹ!4:"[+Q\Ó8` %V)A}U3"q3 K+!% +/35K81F"~axH:] 'v.KY#A_VpLH(h&VkB xU" q!gW"Bv/(RyR#yQbyWُW3H +FY ,y,'$%8Kee+gofaDIR[ c֦/xVS$66S"lTe".h6ٗkmEJҹ^mh%<)>ٗk+4]MSMا4c54P u8Ic\SȒYEDJJq#DZ/EJtOC NSV 2sZ}@REu`L:۞,*7DR +{#X77UjۂdqCv";h`>$u ېȋv(i5BSl &Ms0Fa^򓖙i,Aj̥IFf{AԖ$V0Vv獲C`yJ,U+gp!'ޖvb,<>p ,KW/ɈFnd$tnL4$XyR[39:UYys(%ɵ9^q1Ƈ^?.y8rP,J# *h3ov-ᡒ@),X!x(by.-s$Jrƞ<]E^l(CJfbAmsؒL$#n,=xZFWM5/3^doN*%I:b>9R=Ȗf +6ۣJ*)[uGygO#}ނ +䎛IM]A>sR9Q!CT2``T9KN eZ?x ľCC%ε[Vb'z$^fL +IC2i{kH[ATiMd(b6O-D܇Id⇵$ ) FdFcoCZ2Ag2 Ѥ=l^$l,蜄L*q%7"$FHPb^,cݗQ@ܐۍ;2ƈ -5Y5Бjq +qS c:!9hY1 IG$ZOUUkƤʱ̃5X(Fc%ú*]k<>,XWINkP‹;F81 :ZHH7Sa0jǬŊ;U+=[ezf0 @May򈚝WLP&'  QIgԬRb *@ɬkd1M1{a-iUrY,s%d Xe[#ZK6L=/a"zL * R{A BK]XRcP^& J'r@+{# /tDžkHh%˅N,#$?V%9 uKv_duy%#C'$h1Z_Dq@bX"q -8SCB) ^le)Gx%\QfN95*Y6+I{I@)WQA9dqRB=^f"k"+G:<0ꉪG04w*l +:8@g=ҩEpS-(L3Mb8 +eV@q9-tXJAHԤJ+iWk/#P `a+ZVY쩢ᬟZ +I} ~j +8R/bP) Wg +CnLBTp”ي0Zo)+h+bCSӪ,K؂h*.a,p3BPՈɤ!n TR/z:ox`j@9JBHqbJ6܆l+iNoYg$U-쭥E[k٠/*KA$ *p'e6'6x)֞`ܗZ.H>x + %ʫիfzUw"Y,%"ɀMЌCuYfnyVR$$#;3@5-S+jC0Bi|uZaE\3УcV۴Dft^h{n3pL?d,EIf`-ڎ@QPJB+{F N101$i`M(Ռ2( #j#U2s،$$V*Zu-}-G]h +yc**2X@0݊)|K"ޠ܉;<1S#fsgF4l@-B/" 7Yvqt|:裂%neq!D(+4@](bCMDr=T!Fӎbg +ȃ9Ayrl*FeTuS`Yi;1\mY7Xg8OE\fÊ%_6$4oJV.PգDWAW%#PoUV29ۨӭKD3K`IfzNB"LzO;,Nz;F6 &Bt3I4 ɢ +,V|60ޮTE0]11b!]Az4}^f' v<f&YZ< +'{5 +CPgѼ( +@TjIlC,6e8`I2{N{*f ׵ZWp`cn8KT8ϒhh (H{)4cmk}̎f117mN]$q,ɑJ +S|MuN\Qz>F!ƹqMVem -L<4;mժ4 +ee s }*)G" g\MK3EX+:iϬ9rIb`O^/qj NJ3P5yI(G@0I%>MјTCRYL.15hϜa,dj#d21jq5nF!ӆ4cV2,GKaXt4DSL⮵vE̔_ֵE.-eU#r)A"ґ m-3 pg2uw9Ƽ@kZ$̖ +^E8?>i  Jz:ǣ&IrGm v|f\|NJM΢Tu.Nq[Ţg3o#lT{8qrhVm 0T/N0'*#f2[ ƺ qPt(kBo0 /p9— XKKu +'FxF bG9ENXTH`Y30f`+zFQf-wȓBH=3 >}bb:R >51ɋ^ɓs 0@`Je{g>=:g "x*rEetPgahݡ6 bedx#Rrt%ʍPܐ8|Yl>5c/Πdg29bZZ @@P)W`NZ5CtFD +ߗ5dB GըӨ+QDEA(KLĞQM(o &fd$>LvT +Ho@ef؋d`an$ڜyIq`u׾)gPu^QQad".DIz윌|I/ L:B~!03 u;ȣE!t"C ^I28ʄ(y8 6zAK$AB4XYZTS,+, .9 ƒV rQ зa`HeK6ĢX)ޠ[&j%H[B0 5[0D3_)Ɋfrtavb_Px0'fNpzQI5)$˚t5t#$Tn ǂ>lJs9 L U56v=l8LMPcaCPd IeJ*K%<| G`Aq|@TXb/&dYJBQ5UF6DHRRߍO +X=10U Ԧv&UeNINqn [2*gq|! +j8-0q'$Dca=rD350Zu&`TB lĜCiJkƥ?::˒*"MvYsP̪.6,f0&,OZ>bvtY[p`|!Y5IvউP I$XZ0&! 9Ddd*'nl AuHf~G01뮨$ZhEDDܑ͘~{Eg"X1eӬ(Rn 8v!p jx`BH}> "Y +<˾EGB_!BU1|5P!Js9qC('٪ DtYijəN6B~KRpgw&bzǧ A(}Vqu, )<֏VYUlR Y=3tgg>KuHCApL_%H*7Q+Mj'|`dAB0 0'T$S“N9ߟ#d%})C$ $Xs6fD.4!cW3ķJ8 =4<i3i@zB} ZfnJvÜADl0:CBRjÓj^2\Di3%[Ӭ!&i1zGyo(` Gn N)1<Fa߼j$rYU@TcW%0*Aak #I|p֤C HoekxDIh+fD~I@N@7z!o 0,Q)B3o,;鋓0{AcI!\?ˌby_YQ6CGXs-X@֕efNi >'?ߊ0A,0v$P`5٩:fxCXhd5t_1kT;%!G( 3uH"MClNIsVK7@O]yZuEDi}{Zj/ԅOno/nW/onͫ +i8/.~;.K^Ӌ^~͋/_^]|c7v~H~'Zox8J@ Bt~#|~uy~i?|/_?W%_|>XL19 FG6=۶^ ~_Op?ï?S&񰇊 NRYrc.t!YT#]aggMboŲi$a^pRG?e |V_da=2"S-3ȢiDEd Z:=J-HF:x}`GmQIj@YUHX~Dh2fiLRc.ްcbG,ND̤-1tfX9ԌIlf%т< )Z[TNrU +j:rBtQvИEU!zʖZ&"PYh-=#|({*(L62BJhY~W5-1[_yͱqU?; %> +YneQJ+Zˤn`f GyhPBbzmvv9c.?)!*΅%RbE`{yzE7Z,*p2gA#+[JbryEuY\DF{W (oM[#Ə68 XBcN +pu,F󤽏FqH HxṬV̈́mgVUt'BT}E9e V#atF,uny S-FY!#>`g0vnA4-Kɷ| +b4sbDi kRF5ۓ<ؾ4%3 d!:6<~gMrJF-?ajOJn1ҿ}wI.I2\X}(Vd%W\HhtToB: K aIX~p*V +7%K`x`d 9/gpY͋pP'eQ="me=>cӪ5)X&-vjtjf,M\ +jsSi7y9x9O(^.]BH0bʐHEFfVtʇ> M+:ZJr!3I 3ވÉ|y%>& i=MGޫ:e_[&a(IƔş + 'v_dGTRX'8*$QHk0<%XС~LAqB'.6s +si=h%㞌y4r]P/LdShѝK&!hX~EeoCbҧ$6n8A9'>1kiD-b%~ӽq\>(.OLPPS: BhJuŝˣL@85Rvdά{I /D4s7Nuxu +w23@w + +!W]w@0R`w'.W$64o@~*Cf[DBr']KʚH; qF +8` s nHu1>Arr@qA#F Hv1l> BbbA5l,l \tFjR #CVfYUF0a.ɗI[ρ F ` 4f+#\?3x5pj"xJa\iP> U2k$&.C Gβre'˭Z@k~7nRrs͕ mNK ](Nc< +EMO*¹\oO<{d-D2BuBg;]<|ϙ ysģg:L*a4%bFÔd/J0,|#YtáHn}LH@WO^u%pk`{3k^ BV.=kw +O3"`J /ѻ P ZˮTRuN=U6$Vg>_X|>s&X=VƟu|ޟD¼KAƭ FEeC噽H]_S:RE4d̬]./_zg./^> g_?߅5j_>t/ή|q^|_ǯ^ƭ'ƭWTGbWtevu ̬\X^?L +G5?>^a6/BG(JifM)6چ6 {~o?m ;"6nBnBu ?pX8) 0Uچek@Xnߨ4O 닽\^7GOwii0@P9=ۻ^c\1u%sWwۇwv)bFEl"SȀ׉3\(=$3?JNϋk U/?sZ786+t#./6WDP'E}zNz/!VoF I LTTBb-Zuڎv+S`ooUƥ^ru+,t2"o R"$-]lRtQoe܅g@wak+cBaxG}!>\HNQa.nNU+IiSY^RGc)bƑ|f<^έ5$mr +DwF#F PhiAhG<2. pTzrEJM|d=H,Tn;t܃hH􆽀z0݅H +zI +J-̎IR1nBbs~"ZKJ9>d+3b-Hۤ(fF. 5`1%U-NvȷR\g{%BaNX":NfR%SzI=#zZhN5..ܨ{]St* QH[lb]˂9ƳR̈́\O$t6E'BPMHI_lTJs-}G;\dxADCפI!u=-H;*ƺ5M6Gf m8\ 4m@FnjRG&{ގd+ˤ }Kys&1ڹ4e j0Z +?lהimitEl R m[HJ]ANRGB!ET:ѦQ²IkknW/ ,u#*O1]u08$iٴ[ՊQ TrCKP}~VmHQR+b.&6\EM-PҤA6HƎ7ʈ|RZ)&@m{&p"N0F& vI1oRx(bJ4n' nev7ή=*qUQi&k3$KkoPj6͝q%q0F4j[X?0zo.0u&"_*+jmZѽ}c ߷:NIs>hT<%X&v* YʩJiRIEmRکU;H7SxH(f{&5C sM4y& +pۭe ݂(p' Ciյ:2 7*&vD Ť/;&f>$crL쇄~d  ;3sۥ{$e +` jm "@} +|!z EL/Mڔ iDDl]Rq3'ӫljTsRцgl|hǯ>% Ƿnrg6i[iͫ&0JV8TW(n-eq#'2V>`!yDn qj2^ ݾIzҽ߯)DťҁHhAhTz"2-HEKKi nihUUvNԏNy"WxmHmLb}hy4BzM:iLV'Iߪ +UnsvQuNΨhiZ.K cqljjh5^!*چgYvfXwm(ZaKx] KDFF]y䕪'v| ZdfÅKM&wKJVĕ:j7܇:i qXp%Y8$0Hk΢Y .?D휾EKWsv$ʜ"[zAme]S]:B@[pTZt4ud&V +endstream endobj 24 0 obj <>stream +Aw-Hx]=xοQ‘du{NQ}ts?,u PςㆻE찷6c3YcRKH[I j:d*6cSV$i"`J缻nƴOYCvvkݖI6U'4w'|WY s{u"z3AFo*;*}5No\{U* ]ר7UXCm;i 2y%:i9Q#qE٨T)57;qnnl_-y2MM-ua&1twA^҂m9řscLM4ę6i1+s}TsU oq&izoB[#A{ZxJ4.*AНh + rf?t&peUԚH*J[U[/ Qb8a{o5z ǯLbkۂzNF$nT+ml̲{iݪPSP⣦D$ZCM_MMDapѼ=Jm2.hqjvsjO51rNoH~[5Ukjj +u,Ӗ`ŚُcnU8 q:n rDqz:'4;.ִ8K6ϡkrDŎ['VpXҧцkbZFq+< +亏AF {g6Mr ¡ eMeU.iY_ Vtsˣ]In?po.הp%Cp385Jop5WSVէtE΀ &ƒ*Dmf*cTT;S6,4"KklTkͮI +7Q\7i[BAT?8 uD 3M0ś߄ xK^Єcj68 R*jM2lUZ Nlxʬn +%LU'U! gBaA rܡEQSD#Ik0Q5 iD]4Q)R꨹r _,4BMlS >wt`m&'8]h6"x7dR'2vwlSz{(|o< S3䫩v 6}J*K 'YuLȱ|-sљX^{aֹD)X7,[ɨTaIv~KY7.$x^Z"s:; 4[+٩d^UP nXh(r< +Q]'wK8趀~@slv0؎bOmwE6KmKvE#imɘ4}6ۍͼa3Ol1ܮHg1$LdI/*NFtzF0zn_{ s)-^һoFotx-AS'^s})n]}iֈkv0aqh +7iETms l-=PxZn$sXW& +ȜR{)]UJs6MjK b;,Dmҹb> b}3G[bF`F65M/Cv=]! ^ƮzFѶ#Jp377 B6zmw>zںf}ؕpK "?{mB}6Q^t3Wh3H7א8mjLSnnvgziSiv52L BH:ha33=Sc!kj^9繽۩ ]zR]/{5>q9>݁..ǧp9Smވ.\OGp9>݅iiyn@.-m|:t.ǧ#\O{\=t_U.ǧ#\Owr uCDHr|:t.\OGp9>݅.ǧp9Åt.\OGp9>ޅ[*r|r| .#\N Lzx]^Ӕ,GxSE#.gP>ށ]p9>r.\p90vKx]p9>r| .LJ#\wr 3~ox]p9>݅.ǧp9>r|:t.o.eҏ~vJll.0jzrDŽx>{ɱWi{?w 8=G?@~* /`+Uu;[ouOƮ~n`I+6TNY4jIKaw~16  LG?D~Z|KmTkIol2ţ`^t=]T?@7vЍpTQʎK]-t`xY/~Mt`g~ǚ0 r`?gR=L{s={?@}7zѱi{?8]~nxQU|$=Ta(0wBq_q*@dNy:{qK2}r? 1\{$U}RI%$4_@RyB6_@2B$JJLuv+ÅB+P}ڐf`4_@eBIcj_pt/ 5_DN-κ6< HƷB +$0_"}C +P u*B$6_&4W@B +H^htU@ldb{=zW@ E/%'f-7g&'VO@n 8 <ilvφw~2]wa7CJTX"cKmpu +H +s2IVk*V-݅ujDoK T1p$\0c$+>NV7O@zܦ4UHV @ =kjmaR 1sp_UQ Um0ٜ^㷢d͔Ognz:QhP . ҙmW/@S H!0$V67].*nQӶmh^dj`yc0%'{ ,m^i9N,p[cU\s-L{ pbu;8`ږoֻI [NI#˳mgrmۼm ݱ +h=ٗʳzl*s)v0ݹ!*lUlZ O 1SԳRҖ;`6bVc8#^Rݎc3TQ^R4gR*9hKnҊ/)#^UE%M5?q~ΏŦ8[\ubS!5gp*8D5Mͭ+ 8\3z*z6j }#JgJaVИ]ۓٱUAu*cdIX|8UuXMNaY `IlL7xX-U `:;=t`&ڄ;v4cY_eRqۏyW%)ǙTqӶ btڗ"i2l=CDRI\ҥi8V\rґwۏi~i=ᔘ^Kw6C*;ۢ0k0Bt,-Ѹ}7В~(n77,u3[qh0'a jMGItmQ..ѵ0uꍻv\52.Qbg@]DHQ1ADEIў'Z@b5n(n1 +>N:IAwJ:ͣT{bv1sd6:OvImM{7\3YE6őR{YD˃1.-fY/ջ4Jz6W+;ys (7:z՗z_&m R +čC"t·FM~zX<[L汴 u{ + Mb-)-}D}nҦDڡp 1nт˳DR^Nuk\uoacX"E[Ri[/QGlhcc}05I:]䥨W^m#EDB +bO:!jS2K7R$VCߟўAOJ2tuȯaXKFlxVt5 a"o];8L<5_ƜqsH{N|ޔQ wjߨV *YPEC5$ sH)qrquTV\̥AOM*>n\BBx48JMn<͌oK +ChW VZ*;S+c2+$cLO5YCobvI5  X{Gz:t EG_;VTY 9n#as}HIOtV h&0C8*|8aq<3q4{D#[o7 >pJ'`9xGRm%< ^<ƋYd؀UAO^/zIl]N/6MA vFnl:GH8Ú0̰P݆ئqa`Wg卫E{x6Ip;7GZz)&ӫqa^r)聯ACG{s=g1pb́,bMb `O|tabOH4g}mN2*(NNC8!v9*@]6qۆDfe +޶Jv{-%A +H$UDD<6ў5ŭ~ d*hm-@bWz*5M6m?vSqq'8I=΅~3h^}W_1O5͒Iz4^dɛ͆߻I7˰mWp Ǟ_~ҵy8uϷ_=]6~ku!]a: _9S1M/ݡ~ZЮcޫt3s=JC:1qog hftVC?lfnDAm":d7'O)s4vShNSUd9Kv4ڷ[aY u?Q ЦƎؿ>9qvB?uӳۋ˛_~?5|y5^t}O\>xmG?p)zWu '3>g7ĵϯ./>??'7{?~w/m?~7/|yEA_Oo.oGz/ϋ?ᓛ7>쫋/n_|m<ή.9{]˵?:ëۧ_lOTo!^~>^gqGyڷt|:Qqó}}vÓ7_oZx=tŋ{JW_^ܴ^9wCtq(f:ƹrnWXz8ZPe/Of]Wg_g_`N|LUo'~w|_)ݭ-ؖO>aa~zϽ\=w:z[͎o}ש>w'^"w84o5c?:ًѡSG3#%߾B޷R5z[crp;"o$mGDC> |7NOeJцe|\u`?b=8|//p`M~Ռ[]GG5={Vպ]{y}%)j:;|r|x])/nV<7nxyfuz㯺zc':to_Oy=).^X?ݣ?x3?_>ononx:0[ ,m?#K_k>C^߫[cuqziX|!#e˼oгu/A]S?~rqoԘןݜx6?؟qhSo.oy0mӮlM6gaM=2ճ´/_|[G{~Nj7hGUA|_ +rU= + ֋^_"rЗ?o@r[g۞|XN? 'g + y 3Π0Ѐti>)ȓ| +2R8~|8ޢsrOtҏG?"y Li =f@AyGpIA>RO +(Hڱ#GcMs'xRK=z|_18MyDd2ܭKa8س<ϓ|\s>urP 0'Av(!ߙO>\NIԧ{LMAyP% |_0G@hOw|ywopQK_xIҟe`> +͹ ͔aHITߣQ}Ԝ-Շ-ƠL wOZ;%Լ7Syl7C<{ \R~kBMG,pIARr+cЏэ^%ŋ%<tl>ǿ +xJyȒ8xʘyh /N"pR yZI?_~<ļ7q~Cp8#rwI?>xyyoa8eXBsoI>)ȓ|T +r9弼7SQ(81D=DzO~t@:Wq?Ǔ~|4c􏄲ga!;Lh@<)xllyHۘ!N{hR,ۧI{XgVFSNz<崼J|,,9nGL|w +޽ET\|;ɷ+%~<ǥO9-S#=qt;fxmO._՛.כ/8qz//o_|>HWOtuv۾ʚ|9V5e}R!ND|[db}:g~tvgǏ.^/}qx>~sy7÷nOP,iYG# +MSXG,jsdlA{;uQWomOg2AY])c0ggL2au/y[2{ܣoߦ[὾9}ywy"}Ԡ/._|y}'ȭ߾iO=?=.ڷN{>9CO>q/^ixt{Iq}%v}Ήu?\Ͼն'<#;|u{ITNs=ϡnS>+L_|J-K9}ޯ> NmK{v#<'SfXõޗΛ_}~>yދgyX +د%NGHOu߾y^Ӿ!}mw=įM~]<:>?[_iv|XzV矇{n^ޞ^|񣋯n..Ԑ`Wןn^;}ol +S^=>g_!uų./x??-]Lǡy=<{ys}qo~u{9,t\]'wMvN{QL}NF +t}wo_G7/_z]Uv÷r^Je\aNQDh0AKF }~u3ؙ_^]+,j%Y +n~WeI~y_=f7fN?m,H|uv7_^~+|i8meX&?#%wS,q*s#Ի%O#8>g߾xEŧ׷N'3:֖L'lzǟ?O İo{zv~qnߗ'?XݞI1O5*tS= ٤x.r}rK19 9G` ,݄2m⽮rZ=?9O0>: #q}WW{N>oGޟv?~-5E /7X_=ybO.֕텎P~?fD>g@ay,Rz?!گ }=گ/o/ڭeNkI `eq|0l'Dov2OEJ7r0Z3HXk\ m1/)2!"P&NO ;iNkP˺qz-D~Cf Nugߜm[*\rZωxFKZ&M4P<}caJe>78W/ЍYQ??zin +gn,e)Qf̩pyVҟpx$6 ++/|hx܎vUw~tZ*YMf]:$k±亝.̡|`$g+~ cfGi5^0v-0Bk7Y6lG"!?3J;^+OxY>84D;7gIfbOֳ(2MuW)Y Tf47$SO0Qđ(jeP)^,\ϗ_ ,9>C:ϩ7 п?y PY3f'Yz7rBp;A_Ȧ9\4=_dPz`vbL4|=f5`l'mkDU Ӛg꾌_)+;LEݗ'@Amo&-'gr^xbav4C!$j 00نe@i8$76p0lDݟ-лMWwyvoD/}sMz@W^fx[}i}N i52R܌v3Kڬ.W ;vn.w&6>ڭKM7;¯ +=`Kљd)-m0Nr>/l͊)ae ~I͉wzGDnexX 1%)Bo)0)W=&PYn~v^Ocla~_/ߋz`iI60oh5shbP].\/A_oԦ763ȁwu;>]]F86{b]n$'xtw` tO`D#Hof-S٬62 kʤcgkۃ@ahMoQeTimJ9*5h%Bsi60pe5; ݛ6_Ci^$m>8[ i6oj |&$t]zb4QfX1wR#]aOߐp(m9}nŏn4o`(/&>OX̉|#8 >5i91gva̍@[ƼmZv$[e BiⰘ9~͂tōnYYy%Eͼb6 *~{{~SVsv:7&/,&_QmD3tِ*Q m[WW=t|5ُӻRN``NbZ/L/8"J{!ѐ=B ~u3 +1c!&F?R9N !O!tq?BL(?aa 4J 2e PMЩ6Z ;{ /{ \Hh{XPwTJ%NՋF.o~-~aWzTvVց/JRN?VI_GW~E] e|ЛDtv:¯5Uq#q9[A":qe|\5I5lkĨ/dz<h,ު^|,tbseJ^}D5DO+f@bKK,m[b48N!#Z8VrВs^SXSYiOe'@Z;@?0Te~_5K GvR)6ϙCĩ?::ŴIPi+.ZLvtD$]s͹kstp%FR'\dX#|tsk4Ikw.I)p[j#q<6PT9IlZc|>XbFA&U8bib `S ;0'?#5Mիo҄j2h7YpGzt(zL`2vɝ`+;\J)W&5`ڒ$:1Xƌ3m%|v0"ìך+|̡1yp\s'l)Sw2ӄ 'd +X_`YE<HX\qa1..XV c|jp8* 5~`ͽ.%Dm֜Xbê] +6md|a肭ؾ`HbI]tK!("RDl$h$џC)?J=Gx=$$S(.IIҽF +4o7vW%- o$AH[zM[$zCѕh.ʚC*dR-WT_qfk%+Zk;:K}C\*LA\c%K[RRs$PEe+d]JϊB&)2.iɥXm+swGY {dјY)KYzY^۰ʺ_0x^<Ҏl.e*;\9kʮ3VQӼ"O.KKy>W+NCHޒ\f}OW`X擭l +zZRۃx*FtԳ|sST:]J#ʦX.0(zuC87JT=[vަL*Se*+Aٿ.ʹUns4T0w7Uã.xT偌TUwMT!DL%Dmjjg.Pg:yEznf peի@Q7.F;j5EGqbGM0e[kRVLSRG~5Yze?hEOkqZoJ2ƆGhI;߼ˠHNFH#:K"]X +Tm^zy@wza}g7nZn#_Ku6NP7uUPdQ2l2QryltMvc خeFvTdIצ}0e.E5LnfyZh쯨Ȕ7NylͻTnWaůZƒ[Ɛi9J:VY6k֢3ܲ7p$ /Qs*lVbkjd۬%;Vٮ]k.vw)'Qf,d?4NF :\aʑ+j2p7n)t %٦^Gj<+f˃gU,{md)jN225|& EWr\]8o`+hjh9견[dƽOV yu0s \18Jba Ic(*C MCa먳 +ǧEhÿ2#uLH?F~4hؒ D+K&:'1Y:9 ?X`0ze8v+q"G\ufJ(׸t'~fZb\GO~2h=$'͸Vڻ*<'_Gqt"_ ;h㋗\yAt-<XER o,D2+9F;>aa?M_5~{:MOgh1pP3pfVoЛu00mH:ރdY* +mu7]*$zܳ/R#v,@,hCa +Wf'_xD͐@ ,]d4wm lXxm ضxRgO?8֦jhrS1 + G PotbЂz`PwaӛE1oug·OP=h9rVQs6;c b& +mhǚ`5qhQѦVK`.ft;s%`C;bqw5vs!ɍڝhw0?ahxt: ʂNchMIOLQsq›;X=њ&7\DsF95@QUi JC]xMxs֎~VHj%ؠ.5xL#)8u2\ rdG1Uk!!I_3F`-@#Lhc"4٦8;gT0ӑDb,Ax;.L'"a WzGM]ƪ(#Sr,vX&Tjd8T!j@|t8qK%7lR-t&Y7hB>:g-F&a'UYJ6DW$f0(wr@%g;y"^sprYj5ߍ̘;N7\XTѥmV6£Z":jtLFkisKd9O+гg<ԟk8WQ!of C:z/M[?5:]&1@NbsPΩ9VԳG`yJE6C+'E>i#s~,qH辯էe,! )Ht GiI=idI1ȧH` q}5hLcIچh ׈gQ]|C,iM6,Oj}O^!b'рV̭ = f [l7; a4vNد667fH)8Ƶ(o…hWVбY4[: vLY[ؚB"DWw/ѹ h:Bp!&biIk| @ %m>:C +8\z~p,(ANF󄑠*`0\"ޞ/3%!+З贑Ϟ/&qKN>GC'U& 2f7>;LYC䫶-jY߇Iǵ%T:tqmΐ J| +5VV'UGag`C13Kqnz4j~&Er5WQSZd9'n1Y=\ uqMm6ϨqMx8:=sCXcALͮWM%;;|6$D9@K\$)ljM&ضlkəN.W;FCҍ >cE֪*KU4Q.kFt&ͦ5z +Zuq.@g֛>ρHu W(|4ց<)"u\6)j ee:M< +|  ѝәIMK'dʪqg1e0)?Ϊ(Dͼ7 zfVoOjwxĀ¡] >&DA؊0hݿYOcDw>!( >RvKи:JN|u<|4 ̥jASWC$!}%p?$~".DÜ-}v2X3A`I^DN$"x;+4} NF̴1HSWhnxC7X>._ 4\‡AR6jؘAh&hH=pj 0Bx8f_7Ԕ1'Z2ʄu@gU뗘Yr?dD&>8fz _K̈0N4!v@~BC +c:&\gwrVvB?=0$0nk"5 3u!-  +|oKܡ"2wƴxPWc :ŴKmz {$ Օ*wty-c1BRd0 wB?PTDEǴĞ(QwZ?'1Y4/b3M9i Mo+M28 +%"ͣl˘GWTďQH6sr[hvx.Jux g[)>46ݺu$ $bєߜ{,`{fCŌ Uhl e3Z!]q\//1Wݶ v4܃񱱽bj6H~wOlTN5> XP T Ґ/XSU'b7 ᒦZܞ'{<=|cNN52jd}WU!$RE+6$l\2],RCI^,knw.,9Z>ǵǜ: "P]vP4/0%Fa^5ϔ)I-ug,偮 'bkpvvu;]Vug-xg}9KgIRoJ{D4(d~s:6MšP%| ;@.K%!Ocrer[4_Kc?&_rjd +7Ƕu-+3t*ByJpd1CyGɞ4:$]8c""[2@1.g!INTKn2y pd{)Ivn#kVgjͫ'`[RL{äM4Bκ#Pv}E jOX$'@79 ;+V1U*T +֪dO MLk MIdR#Xd+AǏʡg6ԋl!4Qw +)@n3FH=``DUN5cCwU(uT$ w܀&P4By2:aB ܰ7BMBMW* c' F8ݔʯ*[Ђ1뒭cr6+yt}Bףy[0겚:p"Idװk|Xv$~ۥQ +({w~؂xioΘ@/eH+1;e(<ࡆ()Jx>P,&nSG֫h*L%|%k?$sgkPOKW5Yt 5؆pyco0D:X6c/+Pl;+4c C]+Gਉ3IsL)o&HDȴ3asZ)`Г^Y}PU?z#N'Ue)F6zs5l7w`n.7鏯aDw, IUmh2nBU*/79ٷlѮH`4lɁ+]5՚JϽ Rz{t|?#+UcqӵK+8joz "T8б"p!箋ѧw1+OU\րѷ8B6DxB}ɫ+.]".] Pk5z E;k( +X_>3 {XoՒ`TKo `҄*q)u{ tMFjq;%&PHMt,iix. bPճEэe | Ӭhf Bw Gȍ :t?#퉊Zx^OkzO)8ܵxG^4% >}C?\]N.̬Pzl-!W9_7a3 .zC '~;dWO SᑅA Y=ֽua/U,%5.߳[Lsʏ"yQ1Buivmmq)i /Ga@-pap97Xq}/bn&62/OWyG̙e8yWLQNz ++ w dsDVEI)`>?z`= S$")q`UmۂoO '߰v*xo!P8f-?*3CB ]Dwʳx+iڲ>EyO-/,.of Q +v(Wf3j.b(FYuyݎwF̔μh|b W]!ԞZqB2X7*n +tsaB ɢ*=y5i-]44d\h4ſWu o L/7 D ,}r>0Gof.NTY &_@Z @qpj/!}dWw`~_dB7aktd Pj2Ƕ2 +zSWnk '1Xp:8IF8NWY `wpC0zV]-Uޜ/ u2.[Ê<;y&1?oVwW^PJ;VWs:›Me){>/%EMY!a h?qiS&6+dJA =ZK$6w')i?S_v,15F%Sݘnφsz*.ߌazSb2[*ߎE%r΃ֶ`aF\VضQ r4QOM ŜN8;dBY9JľmOݶ)N ?1k*+izM 9`͹ehwr{,hvv%.uKV +3B]zw]$@C&6Ϯu xcbznkٷ{}'־SXlR΍ՇNgčh$ +PJ]^σվT87VYc$0FUZ;lr\5%"VT;#SR7scMʙBX6/R]ҫXDu3z3ĪaahΒl(y`q`uHiχ5fkznqk'{)sbxV^YjŠ6[Go %V8֕/ʲ4#p;IS={qcYDzHB IɅȝƸAqbi7m٧ ]w蹱Š"9 AZ%I^bBnDaRt-j T9s뉐3Ja8U¦ jR`)/GĀ!j+% H;&1PZ'b9 Lצ [8$f +tV({ՐµzB8PT0ixsс2vl`Q\ZӬn4*ueDPt#?DqcJwpnnDxÊJo#Ԑ5H%~K C$5/(iٞWQܤqJvS@i 6-;#LzD4z1^ +L)dBH H>ix4 +\ +qG Ad:A>|-=+y'rq%y~pm Wȝ*ΞĴq15ڸfE`;h)lIm=}V5c!ǟ*"&pJEu#[EKtµ׻ȅwj M~*EP?$Z9;')㴌xLwV\Jz Kb5p3 +Πm72\4b4JD:S#!G.ۙ0{# Hxڣyʌbw&se/8B3-hHxݔ/.$"4>6ω[o9 aDxYBǷ 4!pIjvV3I -BӆβgGiGruDX5tk1Ғ_\7Zxp=K~eo|C8ps|Ekr;[O{6}u[|j. k{/\b4w)A!p\71 =2<-uµWEeh|^Z.-axyi!'V!A@9=:)|il>Rġ,N +MB? p@c4>2OʡS1(Do֣B?),`ШF5iVI} (Bq;S6ҭFI~φXQ~gPҍZ t{^ +@K{/}|8NETS #MaxR}/dgO ̊FѝWQm+"I+pZՄ9 ձ$.</T0WuYL+`W<$N煂l*} _[(AH`g;?UG}{9xS-=rmOokpqlk;? ms|c[C8.(H(9¦{|{dl3P'(8ݓEvЩslfhsZ8n҄DhL&0Q+^6 +HZDxuީ65ٞ"v*K9 YQS"? P!qU>LDs>w:ynqh<˾%鋳:,F!["n4 .`8 bPyw>l 8W.~|m>r:p..?Nj}.>'EO]|'O8'H]|#O8K ut>\/t>v_D|w+Go zt>F@[Q"XA4" =׈KJ-oclŘÉ A܉15福~RcGL*۾6[X'BЄč>J=Bc݈'>qfEn ;ĕFT(gŗТK<_Bħq) H`<qY{/$b!{#e8;Xgg!F9ߥbT1o9_-E(PrZօsEOK]~3^&KX7*|'}eyS"' &OB oE}{Aޛw,!O +$<;_ P <.u} ̇cyoXʭ\AS3!qA0[,< -.D)11,H ĪQV*#3$F񔔟yT"ý5o`&/4`/G)~Orâ?1)~dVdIV~-2kUo"w>r4AOCh>''p<ΰәyx<' <~s)̣V! "_R~:3}*<ځ<桗25s!S},b^jbB/{Qym}W5 qH@bXxz􁄲 ;㫿h|xBG]`2X5Ԭ' ^)xc v= +ٔ}$/3f=1U`|?΍fպ{̂}͒WNh5?46*6Iv$-֓,\ͷ#+)G}:)#DR|<) _'h&3Iyt_Ir?xi"-H +_abngiQIlex{VBٓ/Z|K@s44)~] |{ͥʱ]P+q!$ M}4Ix- @12^p#HT*kOpQD#I41faمʁܟf 3#+ QDT?ULLN +yӚվ}/j +MXMjD0O^XG|XXz7 +;#̣=v;[smdITBiwf Nw˗Jk/#}췯Vy*rARk䥰lgBnj%>Վp?0ں9Q m"ގLsfF {9e*1)SQLr`XQDgkz(x0q?Y^ 0"|QBsub#1$g7\>;pxzPYww71VĎPDuфTc}EX7=&ZU8_I{glb@>'>7w>W1<$1C,^c}\\fBb߫}\<>>_3}\Y}bHғ&fw4KaD~&+j7 +(P&qhMCP7ؠW`~)WlbD{'C}>L%d}: D>vDbߣ%o>Eľ eII}FS6"hiv_ÓeFξ:>X |*UtAD'r#E|T0I!_<|bIPF tyR@S-' ~a#@*:<mkL)hΜY&U></ʻmk.EKJ?^aèn׾}%s |%[/1evZ=vBBڼ]l] {PO!;Yx"~,鐥qpуr)1,0„>hb ;E􉉠h;GNvhRuZ\1Zd4`yGu߁Q}1jXA P+q|P+Mdp$5I|$ZdDB|b)"(wi_ ̏34Qپ/پ}oe !}9 W`ofԬrQ{nƦPԶt&އl |Q۳31W/A客N1)AY=Uܛ֢{[>ޭC!#{>U=0bc=EPs޿]+zx,>R_U'JnD?'"un_uQbS^%T{a +پ#𚸢}͌z={iyڌ(^w^# yHk! \V"MϥUɾJbBY[Ճ"k̥H*}[K+\*JTuO-OJH؊˶gD*$XWR`}Ncl~oT!`i>6[8F !:}ODZU}({ T1G/-KD:['ByNFɍ a]_ш1ӈIg?:d&Ԣ HbF<43,ӱ22*=[thœ<]3KBRMDDT,{|]^p4;\SRڮbUdž_i:5PFhа2sJhe%]UΆ +@̮H YWdv֨=4x"@j=K8[6:z;!]C4*_|"3]jtDlb"4El\ؙŸu'݊ɯz\uTa~TF)&;}fV7@Eo=8b=;B s.Aӧu#Oŀ4B/?'(:DW0Oc^4ynODclazF[Z1Q?_Tݽw/qCE$fFwo7oUsߝOcp֎Ox6Yңĝy [~PB^xvWRx v0&s mu<ިT'MTh}bLB>燪:O 蛶~K\D~K|TǩB9URޥ +@c2oa6a2O@%ÒB-g@bRI(6QD5QB!"R#rIIHþ(6ww+.Dh$R$ _LgS#RK)<}Gd{= +{X!}4bJ¯GE>SXV[/VC_x{X!g~NBv-J2 +'Ro[sHF&B׿H>Z + +]^/x$8۠|EU,x( gVC>(b,x ϕ(K}!#~W?X@[`շ  ++?|tCj_o_7E<|;(ࡘ\<vt—R٢jt4o2dJDSb>ɘEtU>K>oUߨo9L5= 8az۹;<)}+ m^f&e|Q0KH9+Jj@; +mqnftU;~`@\~2$pZd)( +QZ奥 8.J(&*1%MOt* /Lxzno}@] 7@# /2kNXꇼ9C@7Ssqc:['dZo\pl' +M;թA@_ lk%j LqKLژN~MRY\nm2jUػY5{ #YАϢz%Ү,^^Q_9j "}LO)| [38qSx;e-~Yps(ѵ^Re7.y$@3ەLj,=cn5h^T-ԌXԛv  ׌Ϗ&8VO3ٞi J~ b~eRSi$^_wL䧾֝1r;멕<ǖ>f$N2h[ZֈytH"E3#ouH!Q? ,֣ 2ɜ4TL~Zv@/^~mwݱ_ :uxn"MiAJWp +:b7":qm>RVY>LeiG6ǾAX-1KPѓΨZN +e +|aMvW IHa2bCs$ң\w-7ח5O;L^VM /N9-#d -XƷ7$zHv MKLњɐ0!J ,ʀ*Mɀ8^OIp'펙VB{sBSᙒXI-s, +4:2g%* YpY@s'hpF٧yO@v*SnW04hnZE6|!S_k Xb)?7 8b%6)؉OtɣoK\=, ;A;A  69Z&͛oMw_gfi6(\^#B.NX6U[HzɤEHѲ""V5=#{3X'*;)6ZYvmݝBK6I\Bu0>ևw̳%!.HIw`qOi`q7uXn-.»o{J7!e@pP\FJFm[ /b9 +;-kbU0 %D&K"LKQaXMFGӵ<G 7w״~2}W&Kx$qD$7R IŒI)H=$.1&KMh.$qI|J0&K7$qI\xa M$quM>MX#5$. +G%ChPTB͠IBrchMIh1#UCh/9xby +@ChiY;#6@" um!ݳ4s%:W*׬N޺ _^x "&dȤcr yVB!R?vN^տe*S?ڮus7!3xCҊM[ଌ QlWn2n;.")!yȽ>Bיh},ß#OPfsnk]@ '  +o;`V12G1q G 6#*u'-W2Z,ϊ`)"+9+STQnT& i;y\; %ƹE"Ζ³=_`6:w!._%%jҤW(9U("ȆIiS}2mKv<{UC\ +U=+BߖLhؤJG+w9]b]7{`/w뭰YR)L [Gy TC-zHȽHEX@T5F_ _0SB8WB!.Zt+ɴ/&fҟv|ouhZcv$v? { >n0O>eUn?ldW +endstream endobj 25 0 obj <> endobj xref +0 26 +0000000000 65535 f +0000000016 00000 n +0000000076 00000 n +0000038644 00000 n +0000000000 00000 f +0000040984 00000 n +0000038695 00000 n +0000038981 00000 n +0000047986 00000 n +0000039898 00000 n +0000039177 00000 n +0000039336 00000 n +0000039384 00000 n +0000045302 00000 n +0000045189 00000 n +0000041498 00000 n +0000041582 00000 n +0000041964 00000 n +0000045337 00000 n +0000048059 00000 n +0000048277 00000 n +0000049294 00000 n +0000053443 00000 n +0000119032 00000 n +0000184621 00000 n +0000220302 00000 n +trailer +<<16D92CE0DCE31942B68CF3988DB2DE90>]>> +startxref +220483 +%%EOF diff --git a/extras/blank/config.cpp b/extras/blank/config.cpp index f78545d212..91aa2afd4e 100644 --- a/extras/blank/config.cpp +++ b/extras/blank/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/extras/blank/script_component.hpp b/extras/blank/script_component.hpp index 770711ec9c..581cd319bb 100644 --- a/extras/blank/script_component.hpp +++ b/extras/blank/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT blank +#define COMPONENT_BEAUTIFIED Blank #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL diff --git a/mod.cpp b/mod.cpp index a0ee3b211e..7cf6e85aa6 100644 --- a/mod.cpp +++ b/mod.cpp @@ -1,8 +1,8 @@ -name = "Advanced Combat Environment 3.5.1"; +name = "Advanced Combat Environment 3.6.0"; picture = "logo_ace3_ca.paa"; actionName = "GitHub"; action = "https://github.com/acemod/ACE3"; -description = "ACE3 - Version 3.5.1"; +description = "ACE3 - Version 3.6.0"; logo = "logo_ace3_ca.paa"; logoOver = "logo_ace3_ca.paa"; tooltip = "ACE3"; diff --git a/optionals/compat_adr_97/config.cpp b/optionals/compat_adr_97/config.cpp index aca323c98c..84a20ed781 100644 --- a/optionals/compat_adr_97/config.cpp +++ b/optionals/compat_adr_97/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/optionals/compat_adr_97/script_component.hpp b/optionals/compat_adr_97/script_component.hpp index 4b2da4eadb..200b189b42 100644 --- a/optionals/compat_adr_97/script_component.hpp +++ b/optionals/compat_adr_97/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT compat_adr_97 +#define COMPONENT_BEAUTIFIED ADR-97 Compatibility #include "\z\ace\addons\main\script_mod.hpp" diff --git a/optionals/compat_r3f/CfgAmmo.hpp b/optionals/compat_r3f/CfgAmmo.hpp index 27865a0430..12db3179bf 100644 --- a/optionals/compat_r3f/CfgAmmo.hpp +++ b/optionals/compat_r3f/CfgAmmo.hpp @@ -47,7 +47,7 @@ class CfgAmmo { ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={900}; - ACE_barrelLengths[]={736.6}; + ACE_barrelLengths[]={700}; }; class R3F_127x99_PEI: R3F_127x99_Ball { ACE_caliber=12.954; @@ -59,7 +59,7 @@ class CfgAmmo { ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={900}; - ACE_barrelLengths[]={736.6}; + ACE_barrelLengths[]={700}; }; class R3F_127x99_Ball2: BulletBase { ACE_caliber=12.954; @@ -97,4 +97,4 @@ class CfgAmmo { ACE_muzzleVelocities[]={900}; ACE_barrelLengths[]={736.6}; }; -}; \ No newline at end of file +}; diff --git a/optionals/compat_r3f/config.cpp b/optionals/compat_r3f/config.cpp index c7e42c35ad..f85ece396a 100644 --- a/optionals/compat_r3f/config.cpp +++ b/optionals/compat_r3f/config.cpp @@ -2,10 +2,11 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"R3F_Armes", "R3F_Acc"}; + requiredAddons[] = {"r3f_armes_c", "r3f_armes", "r3f_acc"}; author = ECSTRING(common,ACETeam); authors[] = {"Ruthberg"}; url = ECSTRING(main,URL); diff --git a/optionals/compat_r3f/script_component.hpp b/optionals/compat_r3f/script_component.hpp index 86bb669119..32cd305587 100644 --- a/optionals/compat_r3f/script_component.hpp +++ b/optionals/compat_r3f/script_component.hpp @@ -1,4 +1,5 @@ -#define COMPONENT BWA3_Weapons_comp +#define COMPONENT compat_r3f +#define COMPONENT_BEAUTIFIED R3F Compatibilty #include "\z\ace\addons\main\script_mod.hpp" diff --git a/optionals/compat_rh_acc/config.cpp b/optionals/compat_rh_acc/config.cpp index b66be68593..37737d296e 100644 --- a/optionals/compat_rh_acc/config.cpp +++ b/optionals/compat_rh_acc/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/optionals/compat_rh_acc/script_component.hpp b/optionals/compat_rh_acc/script_component.hpp index 4b36a38ce0..31bfc4cc86 100644 --- a/optionals/compat_rh_acc/script_component.hpp +++ b/optionals/compat_rh_acc/script_component.hpp @@ -1,4 +1,5 @@ -#define COMPONENT RH_acc_comp +#define COMPONENT rh_acc_comp +#define COMPONENT_BEAUTIFIED RH Accessories Compatibility #include "\z\ace\addons\main\script_mod.hpp" diff --git a/optionals/compat_rh_de/config.cpp b/optionals/compat_rh_de/config.cpp index 77dc828105..4f9ba42f19 100644 --- a/optionals/compat_rh_de/config.cpp +++ b/optionals/compat_rh_de/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/optionals/compat_rh_de/script_component.hpp b/optionals/compat_rh_de/script_component.hpp index 07ed06ae3f..18621635d0 100644 --- a/optionals/compat_rh_de/script_component.hpp +++ b/optionals/compat_rh_de/script_component.hpp @@ -1,4 +1,5 @@ -#define COMPONENT RH_de_cfg_comp +#define COMPONENT rh_de_cfg_comp +#define COMPONENT_BEAUTIFIED RH Desert Eagle Compatibility #include "\z\ace\addons\main\script_mod.hpp" diff --git a/optionals/compat_rh_m4/config.cpp b/optionals/compat_rh_m4/config.cpp index 4bacb9dedf..e2dd39ed49 100644 --- a/optionals/compat_rh_m4/config.cpp +++ b/optionals/compat_rh_m4/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/optionals/compat_rh_m4/script_component.hpp b/optionals/compat_rh_m4/script_component.hpp index 167c926dd7..5e52334c38 100644 --- a/optionals/compat_rh_m4/script_component.hpp +++ b/optionals/compat_rh_m4/script_component.hpp @@ -1,4 +1,5 @@ -#define COMPONENT RH_m4_cfg_comp +#define COMPONENT rh_m4_cfg_comp +#define COMPONENT_BEAUTIFIED RH M4 Compatibility #include "\z\ace\addons\main\script_mod.hpp" diff --git a/optionals/compat_rh_pdw/config.cpp b/optionals/compat_rh_pdw/config.cpp index e3c5d15a07..52f1cff567 100644 --- a/optionals/compat_rh_pdw/config.cpp +++ b/optionals/compat_rh_pdw/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/optionals/compat_rh_pdw/script_component.hpp b/optionals/compat_rh_pdw/script_component.hpp index 67c4617e06..1ea9b9f6ad 100644 --- a/optionals/compat_rh_pdw/script_component.hpp +++ b/optionals/compat_rh_pdw/script_component.hpp @@ -1,4 +1,5 @@ -#define COMPONENT RH_PDW_comp +#define COMPONENT rh_pdw_comp +#define COMPONENT_BEAUTIFIED RH PDW Compatibility #include "\z\ace\addons\main\script_mod.hpp" diff --git a/optionals/compat_rhs_afrf3/CfgEventHandlers.hpp b/optionals/compat_rhs_afrf3/CfgEventHandlers.hpp index 93e3311cf2..0d3301d6e0 100644 --- a/optionals/compat_rhs_afrf3/CfgEventHandlers.hpp +++ b/optionals/compat_rhs_afrf3/CfgEventHandlers.hpp @@ -9,3 +9,9 @@ class Extended_PreInit_EventHandlers { init = QUOTE(call COMPILE_FILE(XEH_preInit)); }; }; + +class Extended_PostInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_postInit)); + }; +}; diff --git a/optionals/compat_rhs_afrf3/XEH_postInit.sqf b/optionals/compat_rhs_afrf3/XEH_postInit.sqf new file mode 100644 index 0000000000..be180179a5 --- /dev/null +++ b/optionals/compat_rhs_afrf3/XEH_postInit.sqf @@ -0,0 +1,25 @@ +#include "script_component.hpp" + +private _russianRankIcons = [ + QPATHTOEF(nametags,UI\icons_russia\private_gs.paa), + QPATHTOEF(nametags,UI\icons_russia\corporal_gs.paa), + QPATHTOEF(nametags,UI\icons_russia\sergeant_gs.paa), + QPATHTOEF(nametags,UI\icons_russia\lieutenant_gs.paa), + QPATHTOEF(nametags,UI\icons_russia\captain_gs.paa), + QPATHTOEF(nametags,UI\icons_russia\major_gs.paa), + QPATHTOEF(nametags,UI\icons_russia\colonel_gs.paa) +]; + +{ + [_x, _russianRankIcons] call EFUNC(nametags,setFactionRankIcons); +} forEach [ + "rhs_faction_msv", + "rhs_faction_vdv", + "rhs_faction_vmf", + "rhs_faction_vv", + "rhs_faction_tv", + "rhs_faction_vpvo", + "rhs_faction_vvs", + "rhs_faction_vvs_c", + "rhs_faction_rva" +]; diff --git a/optionals/compat_rhs_afrf3/config.cpp b/optionals/compat_rhs_afrf3/config.cpp index bf36181ce8..b074ab32d2 100644 --- a/optionals/compat_rhs_afrf3/config.cpp +++ b/optionals/compat_rhs_afrf3/config.cpp @@ -2,12 +2,13 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"rhs_c_weapons", "rhs_c_troops", "rhs_c_bmd", "rhs_c_bmp", "rhs_c_bmp3", "rhs_c_a2port_armor", "rhs_c_btr", "rhs_c_sprut", "rhs_c_t72", "rhs_c_tanks", "rhs_c_a2port_air", "rhs_c_a2port_car", "rhs_c_cars", "rhs_c_2s3", "rhs_c_rva"}; author = ECSTRING(common,ACETeam); - authors[] = {"Ruthberg", "GitHawk", "BaerMitUmlaut"}; + authors[] = {"Ruthberg", "GitHawk", "BaerMitUmlaut", "commy2", "Skengman2"}; url = ECSTRING(main,URL); VERSION_CONFIG; }; diff --git a/optionals/compat_rhs_afrf3/script_component.hpp b/optionals/compat_rhs_afrf3/script_component.hpp index 307b1f8de6..69297e6029 100644 --- a/optionals/compat_rhs_afrf3/script_component.hpp +++ b/optionals/compat_rhs_afrf3/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT compat_rhs_afrf3 +#define COMPONENT_BEAUTIFIED RHS AFRF Compatibility #include "\z\ace\addons\main\script_mod.hpp" diff --git a/optionals/compat_rhs_usf3/CfgGlasses.hpp b/optionals/compat_rhs_usf3/CfgGlasses.hpp new file mode 100644 index 0000000000..cc6dcd0ca1 --- /dev/null +++ b/optionals/compat_rhs_usf3/CfgGlasses.hpp @@ -0,0 +1,44 @@ + +class CfgGlasses { + class G_Combat; + class rhs_googles_black: G_Combat { + ACE_Color[] = {0,0,0}; + ACE_TintAmount = 16.0; + ACE_Overlay = ""; + ACE_OverlayDirt = "A3\Ui_f\data\igui\rsctitles\HealthTextures\dust_upper_ca.paa"; + ACE_OverlayCracked = QPATHTOEF(goggles,textures\HUD\Cracked.paa); + ACE_Resistance = 1; + ACE_Protection = 0; + ACE_DustPath = QPATHTOEF(goggles,textures\fx\dust\%1.paa); + }; + class rhs_googles_clear: G_Combat { + ACE_Color[] = {0,0,0}; + ACE_TintAmount = 0; + ACE_Overlay = ""; + ACE_OverlayDirt = "A3\Ui_f\data\igui\rsctitles\HealthTextures\dust_upper_ca.paa"; + ACE_OverlayCracked = QPATHTOEF(goggles,textures\HUD\Cracked.paa); + ACE_Resistance = 1; + ACE_Protection = 0; + ACE_DustPath = QPATHTOEF(goggles,textures\fx\dust\%1.paa); + }; + class rhs_googles_orange: G_Combat { + ACE_Color[] = {1,0.5,0}; + ACE_TintAmount = 8.0; + ACE_Overlay = ""; + ACE_OverlayDirt = "A3\Ui_f\data\igui\rsctitles\HealthTextures\dust_upper_ca.paa"; + ACE_OverlayCracked = QPATHTOEF(goggles,textures\HUD\Cracked.paa); + ACE_Resistance = 1; + ACE_Protection = 0; + ACE_DustPath = QPATHTOEF(goggles,textures\fx\dust\%1.paa); + }; + class rhs_googles_yellow: G_Combat { + ACE_Color[] = {0,0,-1.5}; + ACE_TintAmount = 8.0; + ACE_Overlay = ""; + ACE_OverlayDirt = "A3\Ui_f\data\igui\rsctitles\HealthTextures\dust_upper_ca.paa"; + ACE_OverlayCracked = QPATHTOEF(goggles,textures\HUD\Cracked.paa); + ACE_Resistance = 1; + ACE_Protection = 0; + ACE_DustPath = QPATHTOEF(goggles,textures\fx\dust\%1.paa); + }; +}; diff --git a/optionals/compat_rhs_usf3/config.cpp b/optionals/compat_rhs_usf3/config.cpp index e218f77d2e..f4f5a19665 100644 --- a/optionals/compat_rhs_usf3/config.cpp +++ b/optionals/compat_rhs_usf3/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; @@ -18,3 +19,4 @@ class CfgPatches { #include "CfgMagazines.hpp" #include "CfgWeapons.hpp" #include "CfgVehicles.hpp" +#include "CfgGlasses.hpp" diff --git a/optionals/compat_rhs_usf3/script_component.hpp b/optionals/compat_rhs_usf3/script_component.hpp index 32aecef74e..6696224e28 100644 --- a/optionals/compat_rhs_usf3/script_component.hpp +++ b/optionals/compat_rhs_usf3/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT compat_rhs_usf3 +#define COMPONENT_BEAUTIFIED RHS USF Compatibility #include "\z\ace\addons\main\script_mod.hpp" diff --git a/optionals/compat_rksl_pm_ii/config.cpp b/optionals/compat_rksl_pm_ii/config.cpp index ca0a7189f2..8cb36802b1 100644 --- a/optionals/compat_rksl_pm_ii/config.cpp +++ b/optionals/compat_rksl_pm_ii/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/optionals/compat_rksl_pm_ii/script_component.hpp b/optionals/compat_rksl_pm_ii/script_component.hpp index a98639b0e8..a3f12941a2 100644 --- a/optionals/compat_rksl_pm_ii/script_component.hpp +++ b/optionals/compat_rksl_pm_ii/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT RKSL_PMII_comp +#define COMPONENT_BEAUTIFIED RKSL PMII Compatibility #include "\z\ace\addons\main\script_mod.hpp" diff --git a/optionals/compat_sma3_iansky/config.cpp b/optionals/compat_sma3_iansky/config.cpp index 5611c2d4af..3259115c0a 100644 --- a/optionals/compat_sma3_iansky/config.cpp +++ b/optionals/compat_sma3_iansky/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/optionals/compat_sma3_iansky/script_component.hpp b/optionals/compat_sma3_iansky/script_component.hpp index 5b627ce63a..6f222299af 100644 --- a/optionals/compat_sma3_iansky/script_component.hpp +++ b/optionals/compat_sma3_iansky/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT sma3_iansky_comp +#define COMPONENT_BEAUTIFIED Iansky Scope Mod Compatibility #include "\z\ace\addons\main\script_mod.hpp" diff --git a/optionals/noactionmenu/config.cpp b/optionals/noactionmenu/config.cpp index 77e0457643..bb0e964482 100644 --- a/optionals/noactionmenu/config.cpp +++ b/optionals/noactionmenu/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; ACE_isOptional = 1; units[] = {}; weapons[] = {}; diff --git a/optionals/noactionmenu/script_component.hpp b/optionals/noactionmenu/script_component.hpp index ee07b73c4f..6a79de00e2 100644 --- a/optionals/noactionmenu/script_component.hpp +++ b/optionals/noactionmenu/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT noactionmenu +#define COMPONENT_BEAUTIFIED No Action Menu #include "\z\ace\addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_NOACTIONMENU @@ -9,4 +10,4 @@ #define DEBUG_SETTINGS DEBUG_ENABLED_NOACTIONMENU #endif -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/optionals/server/config.cpp b/optionals/server/config.cpp index ab354fa4d8..c27ed4a341 100644 --- a/optionals/server/config.cpp +++ b/optionals/server/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/optionals/server/script_component.hpp b/optionals/server/script_component.hpp index c81bf390de..188fe5f319 100644 --- a/optionals/server/script_component.hpp +++ b/optionals/server/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT server +#define COMPONENT_BEAUTIFIED Server #include "\z\ace\addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_SERVER diff --git a/optionals/tracers/config.cpp b/optionals/tracers/config.cpp index 32f1bfbb2d..8b44cec0d3 100644 --- a/optionals/tracers/config.cpp +++ b/optionals/tracers/config.cpp @@ -2,6 +2,7 @@ class CfgPatches { class ADDON { + name = COMPONENT_NAME; units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; diff --git a/optionals/tracers/script_component.hpp b/optionals/tracers/script_component.hpp index 14a316a220..4109ddbb5a 100644 --- a/optionals/tracers/script_component.hpp +++ b/optionals/tracers/script_component.hpp @@ -1,4 +1,5 @@ #define COMPONENT tracers +#define COMPONENT_BEAUTIFIED Tracers #include "\z\ace\addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_SYS_TRACERS diff --git a/tools/cba/addons/main/script_macros_common.hpp b/tools/cba/addons/main/script_macros_common.hpp index fa24f29432..461e407256 100644 --- a/tools/cba/addons/main/script_macros_common.hpp +++ b/tools/cba/addons/main/script_macros_common.hpp @@ -632,6 +632,9 @@ Author: #define CFGSETTINGS CFGSETTINGSS(PREFIX,COMPONENT) #define PATHTO(var1) PATHTO_SYS(PREFIX,COMPONENT_F,var1) #define PATHTOF(var1) PATHTOF_SYS(PREFIX,COMPONENT,var1) +#define PATHTOEF(var1,var2) PATHTOF_SYS(PREFIX,var1,var2) +#define QPATHTOF(var1) QUOTE(PATHTOF(var1)) +#define QPATHTOEF(var1,var2) QUOTE(PATHTOEF(var1,var2)) #define COMPILE_FILE(var1) COMPILE_FILE_SYS(PREFIX,COMPONENT_F,var1) #define COMPILE_FILE_CFG(var1) COMPILE_FILE_CFG_SYS(PREFIX,COMPONENT_F,var1) @@ -674,6 +677,8 @@ Author: #define EGVAR(var1,var2) TRIPLES(PREFIX,var1,var2) #define QGVAR(var1) QUOTE(GVAR(var1)) #define QEGVAR(var1,var2) QUOTE(EGVAR(var1,var2)) +#define QQGVAR(var1) QUOTE(QGVAR(var1)) +#define QQEGVAR(var1,var2) QUOTE(QEGVAR(var1,var2)) /* ------------------------------------------- Macro: GVARMAIN() @@ -693,6 +698,7 @@ Author: ------------------------------------------- */ #define GVARMAIN(var1) GVARMAINS(PREFIX,var1) #define QGVARMAIN(var1) QUOTE(GVARMAIN(var1)) +#define QQGVARMAIN(var1) QUOTE(QGVARMAIN(var1)) // TODO: What's this? #define SETTINGS DOUBLES(PREFIX,settings) #define CREATELOGIC CREATELOGICS(PREFIX,COMPONENT) @@ -719,6 +725,14 @@ Author: #define FUNCMAIN(var1) TRIPLES(PREFIX,fnc,var1) #define FUNC_INNER(var1,var2) TRIPLES(DOUBLES(PREFIX,var1),fnc,var2) #define EFUNC(var1,var2) FUNC_INNER(var1,var2) +#define QFUNC(var1) QUOTE(FUNC(var1)) +#define QFUNCMAIN(var1) QUOTE(FUNCMAIN(var1)) +#define QFUNC_INNER(var1,var2) QUOTE(FUNC_INNER(var1,var2)) +#define QEFUNC(var1,var2) QUOTE(EFUNC(var1,var2)) +#define QQFUNC(var1) QUOTE(QFUNC(var1)) +#define QQFUNCMAIN(var1) QUOTE(QFUNCMAIN(var1)) +#define QQFUNC_INNER(var1,var2) QUOTE(QFUNC_INNER(var1,var2)) +#define QQEFUNC(var1,var2) QUOTE(QEFUNC(var1,var2)) #ifndef PRELOAD_ADDONS #define PRELOAD_ADDONS class CfgAddons \ @@ -1258,6 +1272,39 @@ Author: TEST_FAIL('(A OPERATOR B)') \ }; +/* ------------------------------------------- +Macro: TEST_DEFINED_AND_OP() + Tests that A and B are defined and (A OPERATOR B) is true. + If the test fails, an error is raised with the given MESSAGE. + +Parameters: + A - First value [Any] + OPERATOR - Binary operator to use [Operator] + B - Second value [Any] + MESSSAGE - Message to display [String] + +Example: + (begin example) + TEST_OP(_fish,>,5,"Too few fish!"); + (end) + +Author: + Killswitch, PabstMirror +------------------------------------------- */ +#define TEST_DEFINED_AND_OP(A,OPERATOR,B,MESSAGE) \ + if (isNil #A) then { \ + TEST_FAIL('(A is not defined) ' + (MESSAGE)); \ + } else { \ + if (isNil #B) then { \ + TEST_FAIL('(B is not defined) ' + (MESSAGE)); \ + } else { \ + if ((A) OPERATOR (B)) then { \ + TEST_SUCCESS('(A OPERATOR B) ' + (MESSAGE)) \ + } else { \ + TEST_FAIL('(A OPERATOR B) ' + (MESSAGE)) \ + }; }; }; + + /* ------------------------------------------- Macro: TEST_DEFINED() Tests that a VARIABLE is defined. @@ -1417,3 +1464,5 @@ Author: #define XEH_POST_INIT QUOTE(call COMPILE_FILE(XEH_PostInit_Once)) #define XEH_POST_CINIT QUOTE(call COMPILE_FILE(XEH_PostClientInit_Once)) #define XEH_POST_SINIT QUOTE(call COMPILE_FILE(XEH_PostServerInit_Once)) + +#define IS_LINUX (productVersion select 2 <= 154) diff --git a/tools/cba/addons/xeh/script_xeh.hpp b/tools/cba/addons/xeh/script_xeh.hpp index 82fb724c03..ef62f1df53 100644 --- a/tools/cba/addons/xeh/script_xeh.hpp +++ b/tools/cba/addons/xeh/script_xeh.hpp @@ -27,7 +27,9 @@ firedNear = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_fir fuel = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_cba_xeh_fuel"")"; \ gear = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_gear"")"; \ getIn = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_getIn"")"; \ +getInMan = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_getInMan"")"; \ getOut = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_getOut"")"; \ +getOutMan = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_getOutMan"")"; \ handleHeal = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_handleHeal"")"; \ hit = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_hit"")"; \ hitPart = "{_this call _x} forEach ((_this select 0 select 0) getVariable ""cba_xeh_hitPart"")"; \ @@ -42,11 +44,13 @@ respawn = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_respa put = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_put"")"; \ take = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_take"")"; \ seatSwitched = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_seatSwitched"")"; \ +seatSwitchedMan = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_seatSwitchedMan"")"; \ soundPlayed = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_soundPlayed"")"; \ weaponAssembled = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_weaponAssembled"")"; \ weaponDisassembled = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_weaponDisassembled"")"; \ weaponDeployed = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_weaponDeployed"")"; \ -weaponRested = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_weaponRested"")"; +weaponRested = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_weaponRested"")"; \ +reloaded = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_reloaded"")"; /* @@ -73,7 +77,9 @@ firedNear = ""; \ fuel = ""; \ gear = ""; \ getIn = ""; \ +getInMan = ""; \ getOut = ""; \ +getOutMan = ""; \ handleHeal = ""; \ hit = ""; \ hitPart = ""; \ @@ -92,4 +98,5 @@ soundPlayed = ""; \ weaponAssembled = ""; \ weaponDisassembled = ""; \ weaponDeployed = ""; \ -weaponRested = ""; +weaponRested = ""; \ +reloaded = "";