From 623ab02a125b29fbcb4b878625df3b539cbf65ff Mon Sep 17 00:00:00 2001 From: commy2 <commy-2@gmx.de> Date: Wed, 8 Apr 2015 13:06:06 +0200 Subject: [PATCH 001/257] fix falling over static weapons --- addons/vehicles/CfgEventHandlers.hpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/addons/vehicles/CfgEventHandlers.hpp b/addons/vehicles/CfgEventHandlers.hpp index 049b154088..2725e526bc 100644 --- a/addons/vehicles/CfgEventHandlers.hpp +++ b/addons/vehicles/CfgEventHandlers.hpp @@ -18,3 +18,12 @@ class Extended_Engine_EventHandlers { }; }; }; + +class Extended_Init_EventHandlers { + class StaticWeapon { + class ACE_FixMass { + init = QUOTE(if (local (_this select 0)) then {(_this select 0) setMass (getMass (_this select 0) max 250)};); + exclude[] = {"TargetSoldierBase","Static_Designator_01_base_F","Static_Designator_02_base_F","Pod_Heli_Transport_04_base_F"}; + }; + }; +}; From e7b5218d52189599d1bcb95c72dcd091186d04ea Mon Sep 17 00:00:00 2001 From: Tenga <tenga6@gmail.com> Date: Sat, 11 Apr 2015 00:14:06 +0200 Subject: [PATCH 002/257] Altimeter fix, division by zero when no time has passed (game paused, etc.) --- addons/parachute/functions/fnc_showAltimeter.sqf | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/addons/parachute/functions/fnc_showAltimeter.sqf b/addons/parachute/functions/fnc_showAltimeter.sqf index a8200fb2ca..45816cc883 100644 --- a/addons/parachute/functions/fnc_showAltimeter.sqf +++ b/addons/parachute/functions/fnc_showAltimeter.sqf @@ -14,19 +14,24 @@ * Public: Yes */ #include "script_component.hpp" + private ["_unit"]; + _unit = _this select 0; -(["ACE_Altimeter"] call BIS_fnc_rscLayer) cutRsc ["ACE_Altimeter", "PLAIN",0,true]; + +(["ACE_Altimeter"] call BIS_fnc_rscLayer) cutRsc ["ACE_Altimeter", "PLAIN", 0, true]; if (isNull (uiNamespace getVariable ["ACE_Altimeter", displayNull])) exitWith {}; GVAR(AltimeterActive) = true; + [{ - if (!GVAR(AltimeterActive)) exitWith {[_this select 1] call CALLSTACK(cba_fnc_removePerFrameEventHandler);}; + if (!GVAR(AltimeterActive)) exitWith {[_this select 1] call CALLSTACK(cba_fnc_removePerFrameEventHandler)}; disableSerialization; EXPLODE_4_PVT(_this select 0,_display,_unit,_oldHeight,_prevTime); - if !("ACE_Altimeter" in assignedItems _unit) exitWith {[_this select 1] call CALLSTACK(cba_fnc_removePerFrameEventHandler);call FUNC(hideAltimeter);}; + if !("ACE_Altimeter" in assignedItems _unit) exitWith {[_this select 1] call CALLSTACK(cba_fnc_removePerFrameEventHandler); call FUNC(hideAltimeter)}; + + private ["_height", "_hour", "_minute", "_descentRate","_HeightText", "_DecendRate", "_TimeText", "_curTime", "_timeDiff"]; - private ["_height", "_hour", "_minute", "_descentRate","_HeightText", "_DecendRate", "_TimeText", "_curTime"]; _HeightText = _display displayCtrl 1100; _DecendRate = _display displayCtrl 1000; _TimeText = _display displayCtrl 1001; @@ -35,7 +40,8 @@ GVAR(AltimeterActive) = true; _height = (getPosASL _unit) select 2; _curTime = time; - _descentRate = floor ((_oldHeight - _height) / (_curTime - _prevTime)); + _timeDiff = _curTime - _prevTime; + _descentRate = if(_timeDiff > 0) then {floor((_oldHeight - _height) / _timeDiff)} else {0}; _TimeText ctrlSetText (format ["%1:%2",[_hour, 2] call EFUNC(common,numberToDigitsString),[_minute, 2] call EFUNC(common,numberToDigitsString)]); _HeightText ctrlSetText (format ["%1", floor(_height)]); From dd7e7463686ed731af9468726fbe7cc8716be089 Mon Sep 17 00:00:00 2001 From: Glowbal <thomasskooi@live.nl> Date: Sat, 11 Apr 2015 19:52:30 +0200 Subject: [PATCH 003/257] formatting --- .../common/functions/fnc_disableUserInput.sqf | 132 ++++++++++-------- 1 file changed, 73 insertions(+), 59 deletions(-) diff --git a/addons/common/functions/fnc_disableUserInput.sqf b/addons/common/functions/fnc_disableUserInput.sqf index 57be44fe43..a1486438b6 100644 --- a/addons/common/functions/fnc_disableUserInput.sqf +++ b/addons/common/functions/fnc_disableUserInput.sqf @@ -1,14 +1,16 @@ /* * Author: commy2 - * * Disables key input. ESC can still be pressed to open the menu. * - * Argument: - * 0: True to disable key inputs, false to re-enable them (Bool) + * Arguments: + * 0: True to disable key inputs, false to re-enable them <BOOL> * * Return value: * Nothing + * + * Public: Yes */ + #include "script_component.hpp" private ["_state", "_dlg"]; @@ -16,76 +18,88 @@ private ["_state", "_dlg"]; _state = _this select 0; if (_state) then { - disableSerialization; + disableSerialization; - if (!isNull (uiNamespace getVariable [QGVAR(dlgDisableMouse), displayNull])) exitWith {}; - if ("ACE_DisableUserInput" in ([BIS_stackedEventHandlers_onEachFrame, {_this select 0}] call FUNC(map))) exitWith {}; + if (!isNull (uiNamespace getVariable [QGVAR(dlgDisableMouse), displayNull])) exitWith {}; + if ("ACE_DisableUserInput" in ([BIS_stackedEventHandlers_onEachFrame, {_this select 0}] call FUNC(map))) exitWith {}; - // end TFAR and ACRE2 radio transmissions - 0 spawn FUNC(endRadioTransmission); + // end TFAR and ACRE2 radio transmissions + call FUNC(endRadioTransmission); - // Close map - if (visibleMap && {!(player getVariable ["ACE_canSwitchUnits", false])}) then {openMap false}; + // Close map + if (visibleMap && {!(player getVariable ["ACE_canSwitchUnits", false])}) then { + openMap false; + }; - closeDialog 0; - createDialog QGVAR(DisableMouse_Dialog); + closeDialog 0; + createDialog QGVAR(DisableMouse_Dialog); - _dlg = uiNamespace getVariable QGVAR(dlgDisableMouse); + _dlg = uiNamespace getVariable QGVAR(dlgDisableMouse); - _dlg displayAddEventHandler ["KeyDown", { - _key = _this select 1; - - if (_key == 1 && {alive player}) then { - createDialog (["RscDisplayInterrupt", "RscDisplayMPInterrupt"] select isMultiplayer); - - disableSerialization; - _dlg = finddisplay 49; - _dlg displayAddEventHandler ["KeyDown", { + _dlg displayAddEventHandler ["KeyDown", { _key = _this select 1; - !(_key == 1) - }]; - for "_index" from 100 to 2000 do { - (_dlg displayCtrl _index) ctrlEnable false; - }; + if (_key == 1 && {alive player}) then { + createDialog (["RscDisplayInterrupt", "RscDisplayMPInterrupt"] select isMultiplayer); - _ctrl = _dlg displayctrl 103; - _ctrl ctrlSetEventHandler ["buttonClick", QUOTE(while {!isNull (uiNamespace getVariable [ARR_2(QUOTE(QGVAR(dlgDisableMouse)),displayNull)])} do {closeDialog 0}; failMission 'LOSER'; [false] call DFUNC(disableUserInput);)]; - _ctrl ctrlEnable true; - _ctrl ctrlSetText "ABORT"; - _ctrl ctrlSetTooltip "Abort."; + disableSerialization; + _dlg = finddisplay 49; + _dlg displayAddEventHandler ["KeyDown", { + _key = _this select 1; + !(_key == 1) + }]; - _ctrl = _dlg displayctrl ([104, 1010] select isMultiplayer); - _ctrl ctrlSetEventHandler ["buttonClick", QUOTE(closeDialog 0; player setDamage 1; [false] call DFUNC(disableUserInput);)]; - _ctrl ctrlEnable (call {_config = missionConfigFile >> "respawnButton"; !isNumber _config || {getNumber _config == 1}}); - _ctrl ctrlSetText "RESPAWN"; - _ctrl ctrlSetTooltip "Respawn."; - }; + for "_index" from 100 to 2000 do { + (_dlg displayCtrl _index) ctrlEnable false; + }; - if (_key in actionKeys "TeamSwitch" && {teamSwitchEnabled}) then {(uiNamespace getVariable [QGVAR(dlgDisableMouse), displayNull]) closeDisplay 0; teamSwitch};//_acc = accTime; teamSwitch; setAccTime _acc}; - if (_key in actionKeys "CuratorInterface" && {getAssignedCuratorLogic player in allCurators}) then {(uiNamespace getVariable [QGVAR(dlgDisableMouse), displayNull]) closeDisplay 0; openCuratorInterface}; - if (_key in actionKeys "ShowMap" && {player getVariable ["ACE_canSwitchUnits", false]}) then {(uiNamespace getVariable [QGVAR(dlgDisableMouse), displayNull]) closeDisplay 0; openMap true}; + _ctrl = _dlg displayctrl 103; + _ctrl ctrlSetEventHandler ["buttonClick", QUOTE(while {!isNull (uiNamespace getVariable [ARR_2(QUOTE(QGVAR(dlgDisableMouse)),displayNull)])} do {closeDialog 0}; failMission 'LOSER'; [false] call DFUNC(disableUserInput);)]; + _ctrl ctrlEnable true; + _ctrl ctrlSetText "ABORT"; + _ctrl ctrlSetTooltip "Abort."; - if (serverCommandAvailable "#missions" || {player getVariable ["ACE_isUnconscious", false] && {(call FUNC(player)) getVariable [QEGVAR(medical,AllowChatWhileUnconscious), missionNamespace getVariable [QEGVAR(medical,AllowChatWhileUnconscious), false]]}}) then { - if (!(_key in (actionKeys "DefaultAction" + actionKeys "Throw")) && {_key in (actionKeys "Chat" + actionKeys "PrevChannel" + actionKeys "NextChannel")}) then { - _key = 0; - }; - }; + _ctrl = _dlg displayctrl ([104, 1010] select isMultiplayer); + _ctrl ctrlSetEventHandler ["buttonClick", QUOTE(closeDialog 0; player setDamage 1; [false] call DFUNC(disableUserInput);)]; + _ctrl ctrlEnable (call {_config = missionConfigFile >> "respawnButton"; !isNumber _config || {getNumber _config == 1}}); + _ctrl ctrlSetText "RESPAWN"; + _ctrl ctrlSetTooltip "Respawn."; + }; - _key > 0 - }]; - _dlg displayAddEventHandler ["KeyUp", {true}]; + if (_key in actionKeys "TeamSwitch" && {teamSwitchEnabled}) then { + (uiNamespace getVariable [QGVAR(dlgDisableMouse), displayNull]) closeDisplay 0; teamSwitch + };//_acc = accTime; teamSwitch; setAccTime _acc}; + + if (_key in actionKeys "CuratorInterface" && {getAssignedCuratorLogic player in allCurators}) then { + (uiNamespace getVariable [QGVAR(dlgDisableMouse), displayNull]) closeDisplay 0; openCuratorInterface; + }; + + if (_key in actionKeys "ShowMap" && {player getVariable ["ACE_canSwitchUnits", false]}) then { + (uiNamespace getVariable [QGVAR(dlgDisableMouse), displayNull]) closeDisplay 0; openMap true + }; + + if (serverCommandAvailable "#missions" || {player getVariable ["ACE_isUnconscious", false] && {(call FUNC(player)) getVariable [QEGVAR(medical,AllowChatWhileUnconscious), missionNamespace getVariable [QEGVAR(medical,AllowChatWhileUnconscious), false]]}}) then { + if (!(_key in (actionKeys "DefaultAction" + actionKeys "Throw")) && {_key in (actionKeys "Chat" + actionKeys "PrevChannel" + actionKeys "NextChannel")}) then { + _key = 0; + }; + }; + + _key > 0 + }]; + + _dlg displayAddEventHandler ["KeyUp", {true}]; + + ["ACE_DisableUserInput", "onEachFrame", { + if (isNull (uiNamespace getVariable [QGVAR(dlgDisableMouse), displayNull]) && {!visibleMap && isNull findDisplay 49 && isNull findDisplay 312 && isNull findDisplay 632}) then { + ["ACE_DisableUserInput", "onEachFrame"] call BIS_fnc_removeStackedEventHandler; + [true] call FUNC(disableUserInput); + }; + }] call BIS_fnc_addStackedEventHandler; - ["ACE_DisableUserInput", "onEachFrame", { - if (isNull (uiNamespace getVariable [QGVAR(dlgDisableMouse), displayNull]) && {!visibleMap && isNull findDisplay 49 && isNull findDisplay 312 && isNull findDisplay 632}) then { - ["ACE_DisableUserInput", "onEachFrame"] call BIS_fnc_removeStackedEventHandler; - [true] call FUNC(disableUserInput); - }; - }] call BIS_fnc_addStackedEventHandler; } else { - if ("ACE_DisableUserInput" in ([BIS_stackedEventHandlers_onEachFrame, {_this select 0}] call FUNC(map))) then { - ["ACE_DisableUserInput", "onEachFrame"] call BIS_fnc_removeStackedEventHandler; - }; + if ("ACE_DisableUserInput" in ([BIS_stackedEventHandlers_onEachFrame, {_this select 0}] call FUNC(map))) then { + ["ACE_DisableUserInput", "onEachFrame"] call BIS_fnc_removeStackedEventHandler; + }; - (uiNamespace getVariable [QGVAR(dlgDisableMouse), displayNull]) closeDisplay 0; + (uiNamespace getVariable [QGVAR(dlgDisableMouse), displayNull]) closeDisplay 0; }; From 24765741ab3c9cacb0ad3e0aec9e6af4030311a8 Mon Sep 17 00:00:00 2001 From: Glowbal <thomasskooi@live.nl> Date: Sat, 11 Apr 2015 20:05:22 +0200 Subject: [PATCH 004/257] Enabled setAccTime fix from commy --- addons/common/functions/fnc_disableUserInput.sqf | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/addons/common/functions/fnc_disableUserInput.sqf b/addons/common/functions/fnc_disableUserInput.sqf index a1486438b6..0b1275e9cf 100644 --- a/addons/common/functions/fnc_disableUserInput.sqf +++ b/addons/common/functions/fnc_disableUserInput.sqf @@ -67,15 +67,20 @@ if (_state) then { }; if (_key in actionKeys "TeamSwitch" && {teamSwitchEnabled}) then { - (uiNamespace getVariable [QGVAR(dlgDisableMouse), displayNull]) closeDisplay 0; teamSwitch - };//_acc = accTime; teamSwitch; setAccTime _acc}; + (uiNamespace getVariable [QGVAR(dlgDisableMouse), displayNull]) closeDisplay 0; + _acc = accTime; + teamSwitch; + setAccTime _acc; + }; if (_key in actionKeys "CuratorInterface" && {getAssignedCuratorLogic player in allCurators}) then { - (uiNamespace getVariable [QGVAR(dlgDisableMouse), displayNull]) closeDisplay 0; openCuratorInterface; + (uiNamespace getVariable [QGVAR(dlgDisableMouse), displayNull]) closeDisplay 0; + openCuratorInterface; }; if (_key in actionKeys "ShowMap" && {player getVariable ["ACE_canSwitchUnits", false]}) then { - (uiNamespace getVariable [QGVAR(dlgDisableMouse), displayNull]) closeDisplay 0; openMap true + (uiNamespace getVariable [QGVAR(dlgDisableMouse), displayNull]) closeDisplay 0; + openMap true; }; if (serverCommandAvailable "#missions" || {player getVariable ["ACE_isUnconscious", false] && {(call FUNC(player)) getVariable [QEGVAR(medical,AllowChatWhileUnconscious), missionNamespace getVariable [QEGVAR(medical,AllowChatWhileUnconscious), false]]}}) then { From f57f7186c203f0e2f7faf4f30dc40aeea6e2a149 Mon Sep 17 00:00:00 2001 From: OnkelDisMaster <arrows96@gmx.de> Date: Sat, 11 Apr 2015 21:08:00 +0200 Subject: [PATCH 005/257] Config for compatiblity to ASDG Joint Rails Added the scopes and railitems to the according ASDG rails. --- optionals/asdg_comp/config.cpp | 42 ++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 optionals/asdg_comp/config.cpp diff --git a/optionals/asdg_comp/config.cpp b/optionals/asdg_comp/config.cpp new file mode 100644 index 0000000000..c82d5e0624 --- /dev/null +++ b/optionals/asdg_comp/config.cpp @@ -0,0 +1,42 @@ +#include "script_component.hpp" + +class CfgPatches +{ + class ADDON + { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"asdg_jointrails","ace_laserpointer","ace_optics"}; + author[]={"OnkelDisMaster"}; + authorUrl = "http://2.xn--gebirgsjgerkompanie-nwb.de/"; + VERSION_CONFIG; + }; +}; + +class asdg_SlotInfo; +class asdg_FrontSideRail: asdg_SlotInfo +{ + class compatibleItems + { + ACE_acc_pointer_red = 1; + ACE_acc_pointer_green = 1; + }; +}; + +class asdg_OpticRail; +class asdg_OpticRail1913: asdg_OpticRail +{ + class compatibleItems + { + ACE_optic_Hamr_2D = 1; + ACE_optic_Hamr_PIP = 1; + ACE_optic_Arco_2D = 1; + ACE_optic_Arco_PIP = 1; + ACE_optic_MRCO_2D = 1; + ACE_optic_SOS_2D = 1; + ACE_optic_SOS_PIP = 1; + ACE_optic_LRPS_2D = 1; + ACE_optic_LRPS_PIP = 1; + }; +}; From a18171547e231ad7f01bf5b2aa6ed4916203e7a7 Mon Sep 17 00:00:00 2001 From: OnkelDisMaster <arrows96@gmx.de> Date: Sat, 11 Apr 2015 21:11:06 +0200 Subject: [PATCH 006/257] script_component.hpp for asdg_comp Included in config.cpp of #485 --- optionals/asdg_comp/script_component.hpp | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 optionals/asdg_comp/script_component.hpp diff --git a/optionals/asdg_comp/script_component.hpp b/optionals/asdg_comp/script_component.hpp new file mode 100644 index 0000000000..e67bf3b9e4 --- /dev/null +++ b/optionals/asdg_comp/script_component.hpp @@ -0,0 +1,5 @@ +#define COMPONENT asdg_comp + +#include "\z\ace\addons\main\script_mod.hpp" + +#include "\z\ace\addons\main\script_macros.hpp" From 6899659f1c9fe5f055dd6207a852edd32a6d2952 Mon Sep 17 00:00:00 2001 From: OnkelDisMaster <arrows96@gmx.de> Date: Sat, 11 Apr 2015 21:19:37 +0200 Subject: [PATCH 007/257] Update config.cpp --- optionals/asdg_comp/config.cpp | 54 +++++++++++++++++----------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/optionals/asdg_comp/config.cpp b/optionals/asdg_comp/config.cpp index c82d5e0624..1a51ba0432 100644 --- a/optionals/asdg_comp/config.cpp +++ b/optionals/asdg_comp/config.cpp @@ -2,41 +2,41 @@ class CfgPatches { - class ADDON - { - units[] = {}; - weapons[] = {}; - requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"asdg_jointrails","ace_laserpointer","ace_optics"}; - author[]={"OnkelDisMaster"}; - authorUrl = "http://2.xn--gebirgsjgerkompanie-nwb.de/"; - VERSION_CONFIG; - }; + class ADDON + { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"asdg_jointrails","ace_laserpointer","ace_optics"}; + author[]={"OnkelDisMaster"}; + authorUrl = "http://2.xn--gebirgsjgerkompanie-nwb.de/"; + VERSION_CONFIG; + }; }; class asdg_SlotInfo; class asdg_FrontSideRail: asdg_SlotInfo { - class compatibleItems - { - ACE_acc_pointer_red = 1; - ACE_acc_pointer_green = 1; - }; + class compatibleItems + { + ACE_acc_pointer_red = 1; + ACE_acc_pointer_green = 1; + }; }; class asdg_OpticRail; class asdg_OpticRail1913: asdg_OpticRail { - class compatibleItems - { - ACE_optic_Hamr_2D = 1; - ACE_optic_Hamr_PIP = 1; - ACE_optic_Arco_2D = 1; - ACE_optic_Arco_PIP = 1; - ACE_optic_MRCO_2D = 1; - ACE_optic_SOS_2D = 1; - ACE_optic_SOS_PIP = 1; - ACE_optic_LRPS_2D = 1; - ACE_optic_LRPS_PIP = 1; - }; + class compatibleItems + { + ACE_optic_Hamr_2D = 1; + ACE_optic_Hamr_PIP = 1; + ACE_optic_Arco_2D = 1; + ACE_optic_Arco_PIP = 1; + ACE_optic_MRCO_2D = 1; + ACE_optic_SOS_2D = 1; + ACE_optic_SOS_PIP = 1; + ACE_optic_LRPS_2D = 1; + ACE_optic_LRPS_PIP = 1; + }; }; From 876cec35df5b2f0a0859f4a460f2ffbc1ef09a9c Mon Sep 17 00:00:00 2001 From: OnkelDisMaster <arrows96@gmx.de> Date: Sat, 11 Apr 2015 21:20:59 +0200 Subject: [PATCH 008/257] Update config.cpp --- optionals/asdg_comp/config.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/optionals/asdg_comp/config.cpp b/optionals/asdg_comp/config.cpp index 1a51ba0432..d76a4da654 100644 --- a/optionals/asdg_comp/config.cpp +++ b/optionals/asdg_comp/config.cpp @@ -31,7 +31,7 @@ class asdg_OpticRail1913: asdg_OpticRail { ACE_optic_Hamr_2D = 1; ACE_optic_Hamr_PIP = 1; - ACE_optic_Arco_2D = 1; + ACE_optic_Arco_2D = 1; ACE_optic_Arco_PIP = 1; ACE_optic_MRCO_2D = 1; ACE_optic_SOS_2D = 1; From 57bcb555e940730359c2c12fd5c79ffc1eaf5b29 Mon Sep 17 00:00:00 2001 From: OnkelDisMaster <arrows96@gmx.de> Date: Sat, 11 Apr 2015 21:22:07 +0200 Subject: [PATCH 009/257] Update config.cpp --- optionals/asdg_comp/config.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/optionals/asdg_comp/config.cpp b/optionals/asdg_comp/config.cpp index d76a4da654..81115fc96f 100644 --- a/optionals/asdg_comp/config.cpp +++ b/optionals/asdg_comp/config.cpp @@ -19,8 +19,8 @@ class asdg_FrontSideRail: asdg_SlotInfo { class compatibleItems { - ACE_acc_pointer_red = 1; - ACE_acc_pointer_green = 1; + ACE_acc_pointer_red = 1; + ACE_acc_pointer_green = 1; }; }; From 85acaa3ab8d4f31edd3cdfe0e7ef0bba2c472349 Mon Sep 17 00:00:00 2001 From: OnkelDisMaster <arrows96@gmx.de> Date: Sat, 11 Apr 2015 21:22:20 +0200 Subject: [PATCH 010/257] Update config.cpp --- optionals/asdg_comp/config.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/optionals/asdg_comp/config.cpp b/optionals/asdg_comp/config.cpp index 81115fc96f..18ef70cb1c 100644 --- a/optionals/asdg_comp/config.cpp +++ b/optionals/asdg_comp/config.cpp @@ -4,7 +4,7 @@ class CfgPatches { class ADDON { - units[] = {}; + units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"asdg_jointrails","ace_laserpointer","ace_optics"}; From 7c6b84b1f106f5870b95398a10790472d72e33cb Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Sun, 12 Apr 2015 16:52:10 -0700 Subject: [PATCH 011/257] Begin laserdesignator UI changes. --- addons/laser/RscInGameUI.hpp | 113 ++++++++++++++++++++++++++++++++++- addons/laser/config.cpp | 3 +- 2 files changed, 114 insertions(+), 2 deletions(-) diff --git a/addons/laser/RscInGameUI.hpp b/addons/laser/RscInGameUI.hpp index 457d320520..15a0ea015d 100644 --- a/addons/laser/RscInGameUI.hpp +++ b/addons/laser/RscInGameUI.hpp @@ -1 +1,112 @@ -// TODO: RscOptics_LaserDesignator for laser code designation \ No newline at end of file +class RscInGameUI { + class RscOptics_LaserDesignator { + idd = 300; + controls[] = {"CA_IGUI_elements_group"}; + class CA_IGUI_elements_group: RscControlsGroup { + idc = 170; + class VScrollbar: VScrollbar { + width = 0; + }; + class HScrollbar: HScrollbar { + height = 0; + }; + x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))"; + y = "0 * (0.025 * SafezoneH) + (SafezoneY)"; + w = "53.5 * (0.01875 * SafezoneH)"; + h = "40 * (0.025 * SafezoneH)"; + class controls { + class CA_OpticsZoom: RscText { + idc = 180; + style = 1; + colorText[] = {0.706,0.0745,0.0196,1}; + sizeEx = "0.038*SafezoneH"; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "4.5"; + x = "43.85 * (0.01875 * SafezoneH)"; + y = "19.6 * (0.025 * SafezoneH)"; + w = "4.5 * (0.01875 * SafezoneH)"; + h = "1.1 * (0.025 * SafezoneH)"; + }; + class CA_Distance: RscText { + idc = 151; + style = 0; + sizeEx = "0.038*SafezoneH"; + colorText[] = {0.706,0.0745,0.0196,1}; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "2456"; + x = "24.5 * (0.01875 * SafezoneH)"; + y = "3 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.5 * (0.025 * SafezoneH)"; + }; + class CA_Elev: RscText { + idc = 175; + style = 1; + sizeEx = "0.038*SafezoneH"; + colorText[] = {0.706,0.0745,0.0196,1}; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "80.5"; + x = "32.7 * (0.01875 * SafezoneH)"; + y = "3 * (0.025 * SafezoneH)"; + w = "5 * (0.01875 * SafezoneH)"; + h = "1.5 * (0.025 * SafezoneH)"; + }; + class CA_VisionMode: RscText { + idc = 179; + style = 0; + sizeEx = "0.038*SafezoneH"; + colorText[] = {0.706,0.0745,0.0196,1}; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "VIS"; + x = "6.5 * (0.01875 * SafezoneH)"; + y = "19.6 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.1 * (0.025 * SafezoneH)"; + }; + class CA_Laser: RscText { + idc = 158; + style = "0x30 + 0x800"; + sizeEx = "0.038*SafezoneH"; + colorText[] = {0.706,0.0745,0.0196,1}; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics\laser_designator_iconLaserOn.paa"; + x = "29.2 * (0.01875 * SafezoneH)"; + y = "3 * (0.025 * SafezoneH)"; + w = "3.5 * (0.01875 * SafezoneH)"; + h = "1.5 * (0.025 * SafezoneH)"; + }; + class CA_Heading: RscText { + idc = 156; + style = 0; + sizeEx = "0.038*SafezoneH"; + colorText[] = {0.706,0.0745,0.0196,1}; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "023"; + x = "16.1 * (0.01875 * SafezoneH)"; + y = "3 * (0.025 * SafezoneH)"; + w = "3.5 * (0.01875 * SafezoneH)"; + h = "1.6 * (0.025 * SafezoneH)"; + }; + + class ACE_LaserCode : RscText { + idc = 123001; + style = 0; + sizeEx = "0.038*SafezoneH"; + colorText[] = {0.706,0.0745,0.0196,1}; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "Code: 1001"; + x = "20.1 * (0.01875 * SafezoneH)"; + y = "3 * (0.025 * SafezoneH)"; + w = "3.5 * (0.01875 * SafezoneH)"; + h = "1.6 * (0.025 * SafezoneH)"; + }; + }; + }; + }; \ No newline at end of file diff --git a/addons/laser/config.cpp b/addons/laser/config.cpp index 3f430619ef..ad368cdc2d 100644 --- a/addons/laser/config.cpp +++ b/addons/laser/config.cpp @@ -12,4 +12,5 @@ class CfgPatches { #include "CfgEventhandlers.hpp" #include "CfgVehicles.hpp" -#include "CfgWeapons.hpp" \ No newline at end of file +#include "CfgWeapons.hpp" +#include "RscInGameUI.hpp" \ No newline at end of file From af255604ac098030613ab983a313e790dac2a02e Mon Sep 17 00:00:00 2001 From: Glowbal <thomasskooi@live.nl> Date: Tue, 14 Apr 2015 21:17:36 +0200 Subject: [PATCH 012/257] Switched to event based sync system for open wounds --- addons/medical/XEH_postInit.sqf | 2 +- addons/medical/functions/fnc_handleDamage_wounds.sqf | 1 - .../medical/functions/fnc_onWoundUpdateRequest.sqf | 12 +++++------- addons/medical/functions/fnc_requestWoundSync.sqf | 4 ++-- addons/medical/script_component.hpp | 2 +- 5 files changed, 9 insertions(+), 12 deletions(-) diff --git a/addons/medical/XEH_postInit.sqf b/addons/medical/XEH_postInit.sqf index 1b0a38f1af..3743511790 100644 --- a/addons/medical/XEH_postInit.sqf +++ b/addons/medical/XEH_postInit.sqf @@ -247,7 +247,7 @@ if (USE_WOUND_EVENT_SYNC) then { // We are only pulling the wounds for the units in the player group. Anything else will come when the unit interacts with them. { [_x, _newPlayer] call FUNC(requestWoundSync); - }foreach units group player; + }foreach units group _newPlayer; }; }] call EFUNC(common,addEventhandler); }; diff --git a/addons/medical/functions/fnc_handleDamage_wounds.sqf b/addons/medical/functions/fnc_handleDamage_wounds.sqf index 5933651e57..b45a974166 100644 --- a/addons/medical/functions/fnc_handleDamage_wounds.sqf +++ b/addons/medical/functions/fnc_handleDamage_wounds.sqf @@ -133,7 +133,6 @@ if (count _woundsCreated > 0) then { }; if (USE_WOUND_EVENT_SYNC) then { - // TODO Should this be done in a single broadcast? // Broadcast the new injuries across the net in parts. One broadcast per injury. Prevents having to broadcast one massive array of injuries. { ["medical_propagateWound", [_unit, _x]] call EFUNC(common,globalEvent); diff --git a/addons/medical/functions/fnc_onWoundUpdateRequest.sqf b/addons/medical/functions/fnc_onWoundUpdateRequest.sqf index c160e47ea0..ccbb373648 100644 --- a/addons/medical/functions/fnc_onWoundUpdateRequest.sqf +++ b/addons/medical/functions/fnc_onWoundUpdateRequest.sqf @@ -1,11 +1,10 @@ /* * Author: Glowbal - * Enabled the vitals loop for a unit. + * Handles an wound update request. * * Arguments: * 0: The Unit <OBJECT> - * 1: the last known ID <NUMBER> - * 2: Origin object <OBJECT> + * 1: Origin object <OBJECT> * * ReturnValue: * <NIL> @@ -14,12 +13,11 @@ */ #include "script_component.hpp" -private ["_unit", "_lastId", "_openWounds"]; +private ["_unit", "_openWounds"]; _unit = _this select 0; -_lastId = _this select 1; -_originOfrequest = _this select 2; +_originOfrequest = _this select 1; -if (local _unit) then { +if (local _unit && !(local _originOfrequest)) then { _openWounds = _unit getvariable [QGVAR(openWounds), []]; { ["medical_propagateWound", [_originOfrequest], [_unit, _x]] call EFUNC(common,targetEvent); diff --git a/addons/medical/functions/fnc_requestWoundSync.sqf b/addons/medical/functions/fnc_requestWoundSync.sqf index bf6f881930..7144c49684 100644 --- a/addons/medical/functions/fnc_requestWoundSync.sqf +++ b/addons/medical/functions/fnc_requestWoundSync.sqf @@ -14,11 +14,11 @@ #include "script_component.hpp" -private [ "_target", "_caller", "_openWounds","_lastId"]; +private [ "_target", "_caller", "_openWounds"]; _target = _this select 0; _caller = _this select 1; if (local _target || GVAR(level) < 2) exitwith {}; // if the target is local, we already got the most update to date information if (_target getvariable [QGVAR(isWoundSynced), false]) exitwith {}; _target setvariable [QGVAR(isWoundSynced), true]; -["medical_woundUpdateRequest", [_target], [_target, _lastId, _caller]] call EFUNC(common,targetEvent); +["medical_woundUpdateRequest", [_target], [_target, _caller]] call EFUNC(common,targetEvent); diff --git a/addons/medical/script_component.hpp b/addons/medical/script_component.hpp index 939a811a41..bac6744bc1 100644 --- a/addons/medical/script_component.hpp +++ b/addons/medical/script_component.hpp @@ -11,4 +11,4 @@ #include "\z\ace\addons\main\script_macros.hpp" -#define USE_WOUND_EVENT_SYNC false +#define USE_WOUND_EVENT_SYNC true From f85fc12fc8392c1377fbf4d7eb7a0bd66854b289 Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Tue, 14 Apr 2015 14:24:50 -0700 Subject: [PATCH 013/257] string overflow fix, perf fix for pass-by-ref. --- extensions/breakLine/ace_breakLine.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/extensions/breakLine/ace_breakLine.cpp b/extensions/breakLine/ace_breakLine.cpp index 74a32cc66d..fb5775b861 100644 --- a/extensions/breakLine/ace_breakLine.cpp +++ b/extensions/breakLine/ace_breakLine.cpp @@ -19,13 +19,13 @@ #define MAXCHARACTERS 14 -static char version[] = "1.0"; +static char VERSION[] = "1.0"; extern "C" { __declspec (dllexport) void __stdcall RVExtension(char *output, int outputSize, const char *function); }; -std::vector<std::string> splitString(std::string input) { +std::vector<std::string> splitString(const std::string & input) { std::istringstream ss(input); std::string token; @@ -38,10 +38,10 @@ std::vector<std::string> splitString(std::string input) { } std::string addLineBreaks(const std::vector<std::string> &words) { - std::stringstream sstream; int numChar = 0; int i = 0; + while (i < words.size()) { if (numChar == 0) { sstream << words[i]; @@ -58,6 +58,7 @@ std::string addLineBreaks(const std::vector<std::string> &words) { } } } + return sstream.str(); } @@ -66,12 +67,10 @@ std::string addLineBreaks(const std::vector<std::string> &words) { #pragma warning( disable : 4996 ) void __stdcall RVExtension(char *output, int outputSize, const char *function) { - //strncpy(output, function, outputSize); - if (!strcmp(function, "version")) { - strncpy(output, version, outputSize); + strncpy(output, VERSION, outputSize); } else { - strcpy(output, addLineBreaks(splitString(function)).c_str()); + strncpy(output, addLineBreaks(splitString(function)).c_str(), outputSize); output[outputSize - 1] = '\0'; } } From 971566fc3ea075b845b197f0019362a17a607b68 Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Tue, 14 Apr 2015 16:05:01 -0700 Subject: [PATCH 014/257] Laser code dialog entry. ACTUALLY HIDE THE DAMN LASER --- addons/laser/CfgVehicles.hpp | 22 +++------------- addons/laser/RscInGameUI.hpp | 26 ++++++++++++------- .../functions/fnc_drawVisibleLaserTargets.sqf | 10 ++++++- 3 files changed, 30 insertions(+), 28 deletions(-) diff --git a/addons/laser/CfgVehicles.hpp b/addons/laser/CfgVehicles.hpp index f4e2ed42ab..361f3e1867 100644 --- a/addons/laser/CfgVehicles.hpp +++ b/addons/laser/CfgVehicles.hpp @@ -4,30 +4,16 @@ class CfgVehicles { class LaserTarget: All { // @TODO: Changing the model and simulation hides it, but THEN IT DOESNT SPAWN WTF!? model = "\A3\Weapons_F\empty.p3d"; - simulation = "nvmarker"; - nvTarget = 1; - //simulation = "laserTarget"; - //threat[] = {0,0,0}; + simulation = "house"; + class EventHandlers { init = QUOTE(_this call FUNC(laser_init)); }; - - diffuse[] = {0,0,0}; - ambient[] = {0,0,0}; - brightness = 0; - name = "pozicni blik"; - drawLight = 0; - drawLightSize = 0; - drawLightCenterSize = 0; - activeLight = 0; - blinking = 0; - dayLight = 0; - onlyInNvg = 0; - useFlare = 0; }; // Visual laserTarget override class ACE_LaserTarget_Visual : LaserTarget { - //model = "\A3\Weapons_f\laserTgt.p3d"; + simulation = "LaserTarget"; + model = "\A3\Weapons_f\laserTgt.p3d"; }; }; \ No newline at end of file diff --git a/addons/laser/RscInGameUI.hpp b/addons/laser/RscInGameUI.hpp index 15a0ea015d..366d779fde 100644 --- a/addons/laser/RscInGameUI.hpp +++ b/addons/laser/RscInGameUI.hpp @@ -1,20 +1,27 @@ +class RscControlsGroup; +class VScrollbar; +class HScrollbar; +class RscText; + class RscInGameUI { class RscOptics_LaserDesignator { idd = 300; controls[] = {"CA_IGUI_elements_group"}; + class CA_IGUI_elements_group: RscControlsGroup { idc = 170; + + x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))"; + y = "0 * (0.025 * SafezoneH) + (SafezoneY)"; + w = "53.5 * (0.01875 * SafezoneH)"; + h = "40 * (0.025 * SafezoneH)"; class VScrollbar: VScrollbar { width = 0; }; class HScrollbar: HScrollbar { height = 0; }; - x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))"; - y = "0 * (0.025 * SafezoneH) + (SafezoneY)"; - w = "53.5 * (0.01875 * SafezoneH)"; - h = "40 * (0.025 * SafezoneH)"; - class controls { + class controls { class CA_OpticsZoom: RscText { idc = 180; style = 1; @@ -102,11 +109,12 @@ class RscInGameUI { shadow = 0; font = "EtelkaMonospacePro"; text = "Code: 1001"; - x = "20.1 * (0.01875 * SafezoneH)"; - y = "3 * (0.025 * SafezoneH)"; - w = "3.5 * (0.01875 * SafezoneH)"; + x = "32.7 * (0.01875 * SafezoneH)"; + y = "35.5 * (0.025 * SafezoneH)"; + w = "12 * (0.01875 * SafezoneH)"; h = "1.6 * (0.025 * SafezoneH)"; }; }; }; - }; \ No newline at end of file + }; +}; \ No newline at end of file diff --git a/addons/laser/functions/fnc_drawVisibleLaserTargets.sqf b/addons/laser/functions/fnc_drawVisibleLaserTargets.sqf index 161364c0f2..10d5f1e1b6 100644 --- a/addons/laser/functions/fnc_drawVisibleLaserTargets.sqf +++ b/addons/laser/functions/fnc_drawVisibleLaserTargets.sqf @@ -1 +1,9 @@ -// @TODO: This is to draw the actual LaserTarget positions to utilize for laser shooting. \ No newline at end of file +// This is a debug function for displaying visible lasers for ourselves +#include "script_component.hpp" + +diag_log text format["[ACE]: Laser Emitter Dump"]; + +{ + diag_log text format[" %1", _x]; + diag_log text format[" %2", HASH_GET(GVAR(laserEmitters), _x)]; +} forEach GVAR(laserEmitters) select 0; \ No newline at end of file From 2ec74a6a3e07935cc8eddd6c50a52b84546394c5 Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Tue, 14 Apr 2015 16:20:03 -0700 Subject: [PATCH 015/257] align correctly, create event, remove FCS from laserDesignator. --- addons/fcs/CfgOptics.hpp | 7 ------- addons/javelin/CfgWeapons.hpp | 1 + addons/laser/CfgVehicles.hpp | 1 + addons/laser/RscInGameUI.hpp | 13 ++++++++++++- addons/laser/XEH_pre_init.sqf | 2 ++ .../laser/functions/fnc_onLaserDesignatorDraw.sqf | 5 +++++ addons/laser/script_component.hpp | 6 +++++- 7 files changed, 26 insertions(+), 9 deletions(-) create mode 100644 addons/laser/functions/fnc_onLaserDesignatorDraw.sqf diff --git a/addons/fcs/CfgOptics.hpp b/addons/fcs/CfgOptics.hpp index c9704081f9..91f83dd6f6 100644 --- a/addons/fcs/CfgOptics.hpp +++ b/addons/fcs/CfgOptics.hpp @@ -35,13 +35,6 @@ class RscInGameUI { }; }; }; - class RscOptics_LaserDesignator { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; class RscWeaponRangeFinderMAAWS { class CA_IGUI_elements_group: RscControlsGroup { class controls { diff --git a/addons/javelin/CfgWeapons.hpp b/addons/javelin/CfgWeapons.hpp index cef967e32e..8573218048 100644 --- a/addons/javelin/CfgWeapons.hpp +++ b/addons/javelin/CfgWeapons.hpp @@ -10,5 +10,6 @@ class CfgWeapons { lockingTargetSound[] = {"",0,1}; lockedTargetSound[] = {"",0,1}; + }; }; \ No newline at end of file diff --git a/addons/laser/CfgVehicles.hpp b/addons/laser/CfgVehicles.hpp index 361f3e1867..1e83f66cc9 100644 --- a/addons/laser/CfgVehicles.hpp +++ b/addons/laser/CfgVehicles.hpp @@ -4,6 +4,7 @@ class CfgVehicles { class LaserTarget: All { // @TODO: Changing the model and simulation hides it, but THEN IT DOESNT SPAWN WTF!? model = "\A3\Weapons_F\empty.p3d"; + destrType = "DestructNo"; simulation = "house"; class EventHandlers { diff --git a/addons/laser/RscInGameUI.hpp b/addons/laser/RscInGameUI.hpp index 366d779fde..770c2104b6 100644 --- a/addons/laser/RscInGameUI.hpp +++ b/addons/laser/RscInGameUI.hpp @@ -2,12 +2,17 @@ class RscControlsGroup; class VScrollbar; class HScrollbar; class RscText; +class RscMapControl; class RscInGameUI { class RscOptics_LaserDesignator { idd = 300; controls[] = {"CA_IGUI_elements_group"}; + onLoad = "uiNameSpace setVariable ['ACE_RscOptics_LaserDesignator',(_this select 0)];"; + onUnload = "uiNameSpace setVariable ['ACE_RscOptics_LaserDesignator',nil];"; + + class CA_IGUI_elements_group: RscControlsGroup { idc = 170; @@ -43,7 +48,7 @@ class RscInGameUI { shadow = 0; font = "EtelkaMonospacePro"; text = "2456"; - x = "24.5 * (0.01875 * SafezoneH)"; + x = "24.6 * (0.01875 * SafezoneH)"; y = "3 * (0.025 * SafezoneH)"; w = "4 * (0.01875 * SafezoneH)"; h = "1.5 * (0.025 * SafezoneH)"; @@ -101,6 +106,12 @@ class RscInGameUI { h = "1.6 * (0.025 * SafezoneH)"; }; + class ACE_LaserCode_Helper : RscMapControl { + idc = -1; + onDraw = QUOTE(_this call FUNC(onLaserDesignatorDraw)); + w = 0; + h = 0; + }; class ACE_LaserCode : RscText { idc = 123001; style = 0; diff --git a/addons/laser/XEH_pre_init.sqf b/addons/laser/XEH_pre_init.sqf index e160a533f2..de56274759 100644 --- a/addons/laser/XEH_pre_init.sqf +++ b/addons/laser/XEH_pre_init.sqf @@ -11,6 +11,8 @@ PREP(findStrongestRay); PREP(translateToModelSpace); PREP(translateToWeaponSpace); +PREP(onLaserDesignatorDraw); + PREP(seekerFindLaserSpot); PREP(laserOn); PREP(laserOff); diff --git a/addons/laser/functions/fnc_onLaserDesignatorDraw.sqf b/addons/laser/functions/fnc_onLaserDesignatorDraw.sqf new file mode 100644 index 0000000000..3f756443fa --- /dev/null +++ b/addons/laser/functions/fnc_onLaserDesignatorDraw.sqf @@ -0,0 +1,5 @@ +#define DEBUG_MODE_FULL +#include "script_component.hpp" + + +TRACE_1("", _this); \ No newline at end of file diff --git a/addons/laser/script_component.hpp b/addons/laser/script_component.hpp index 2be1e9e14b..6bd4063f4e 100644 --- a/addons/laser/script_component.hpp +++ b/addons/laser/script_component.hpp @@ -12,4 +12,8 @@ #include "\z\ace\Addons\main\script_macros.hpp" -#define FIREMODE_DIRECT_LOAL 1 \ No newline at end of file +#define FIREMODE_DIRECT_LOAL 1 + + +#define __LaserDesignatorIGUI (uiNamespace getVariable ["ACE_RscOptics_LaserDesignator", nil]) +#define __LaserDesignatorIGUI_LaserCode (__LaserDesignatorIGUI displayCtrl 123001) \ No newline at end of file From 934f2ce097637ac140eeb5b994b66c4b32f01bea Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Tue, 14 Apr 2015 16:29:49 -0700 Subject: [PATCH 016/257] Display current laser code. Standardize GVARs --- addons/laser/XEH_post_init.sqf | 1 + addons/laser/functions/fnc_onLaserDesignatorDraw.sqf | 8 ++++++-- .../functions/fnc_laserHudDesignateOn.sqf | 10 +++++----- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/addons/laser/XEH_post_init.sqf b/addons/laser/XEH_post_init.sqf index fb189d5041..f868ef9895 100644 --- a/addons/laser/XEH_post_init.sqf +++ b/addons/laser/XEH_post_init.sqf @@ -2,3 +2,4 @@ ["laser_laserOn", {_this call DFUNC(handleLaserOn)}] call EFUNC(common,addEventHandler); ["laser_laserOff", {_this call DFUNC(handleLaserOff)}] call EFUNC(common,addEventHandler); + diff --git a/addons/laser/functions/fnc_onLaserDesignatorDraw.sqf b/addons/laser/functions/fnc_onLaserDesignatorDraw.sqf index 3f756443fa..a5da33b236 100644 --- a/addons/laser/functions/fnc_onLaserDesignatorDraw.sqf +++ b/addons/laser/functions/fnc_onLaserDesignatorDraw.sqf @@ -1,5 +1,9 @@ #define DEBUG_MODE_FULL #include "script_component.hpp" +TRACE_1("", _this); +private["_laserCode"]; - -TRACE_1("", _this); \ No newline at end of file +_laserCode = ACE_player getVariable[QGVAR(code), ACE_DEFAULT_LASER_CODE]; +if(!isNil "_laserCode") then { + __LaserDesignatorIGUI_LaserCode ctrlSetText format["Code: %1", [_laserCode, 4, 0, false] call CBA_fnc_formatNumber]; +}; \ No newline at end of file diff --git a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf index c480c051bb..6301f6f5e4 100644 --- a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf +++ b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf @@ -43,8 +43,8 @@ FUNC(laserHudDesignatePFH) = { _turretInfo = [_vehicle, _gunnerInfo select 1] call EFUNC(common,getTurretDirection); _povPos = _turretInfo select 0; - _laserCode = (vehicle ACE_player) getVariable[QGVAR(currentCode), ACE_DEFAULT_LASER_CODE]; - _waveLength = (vehicle ACE_player) getVariable[QGVAR(currentWaveLength), ACE_DEFAULT_LASER_WAVELENGTH]; + _laserCode = (vehicle ACE_player) getVariable["ace_laser_code", ACE_DEFAULT_LASER_CODE]; + _waveLength = (vehicle ACE_player) getVariable["ace_laser_waveLength", ACE_DEFAULT_LASER_WAVELENGTH]; _laserResult = [_povPos, [_waveLength,_waveLength], _laserCode] call EFUNC(laser,seekerFindLaserSpot); @@ -73,9 +73,9 @@ if(!GVAR(active)) then { TRACE_1("Activating laser", ""); // Get the self-designation variables, or use defaults - _laserCode = (vehicle ACE_player) getVariable[QGVAR(currentCode), ACE_DEFAULT_LASER_CODE]; - _waveLength = (vehicle ACE_player) getVariable[QGVAR(currentWaveLength), ACE_DEFAULT_LASER_WAVELENGTH]; - _beamSpread = (vehicle ACE_player) getVariable[QGVAR(currentBeamSpread), ACE_DEFAULT_LASER_BEAMSPREAD]; + _laserCode = (vehicle ACE_player) getVariable["ace_laser_code", ACE_DEFAULT_LASER_CODE]; + _waveLength = (vehicle ACE_player) getVariable["ace_laser_waveLength", ACE_DEFAULT_LASER_WAVELENGTH]; + _beamSpread = (vehicle ACE_player) getVariable["ace_laser_beamSpread", ACE_DEFAULT_LASER_BEAMSPREAD]; _laserUuid = [(vehicle ACE_player), ACE_player, QFUNC(findLaserSource), _waveLength, _laserCode, _beamSpread] call EFUNC(laser,laserOn); From fb6553a7a7b68968508f6fef5042029cae63f763 Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Tue, 14 Apr 2015 16:57:01 -0700 Subject: [PATCH 017/257] Only show distance if laser is on. --- addons/laser/RscInGameUI.hpp | 17 +++++++++++++++-- .../functions/fnc_onLaserDesignatorDraw.sqf | 10 ++++++++-- addons/laser/script_component.hpp | 5 ++++- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/addons/laser/RscInGameUI.hpp b/addons/laser/RscInGameUI.hpp index 770c2104b6..d3dfaa5d43 100644 --- a/addons/laser/RscInGameUI.hpp +++ b/addons/laser/RscInGameUI.hpp @@ -40,8 +40,8 @@ class RscInGameUI { w = "4.5 * (0.01875 * SafezoneH)"; h = "1.1 * (0.025 * SafezoneH)"; }; - class CA_Distance: RscText { - idc = 151; + class ACE_Distance: RscText { + idc = 123002; style = 0; sizeEx = "0.038*SafezoneH"; colorText[] = {0.706,0.0745,0.0196,1}; @@ -53,6 +53,19 @@ class RscInGameUI { w = "4 * (0.01875 * SafezoneH)"; h = "1.5 * (0.025 * SafezoneH)"; }; + class CA_Distance: RscText { + idc = 151; + style = 0; + sizeEx = "0.038*SafezoneH"; + colorText[] = {0.706,0.0745,0.0196,1}; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "2456"; + x = 0; + y = 0; + w = 0; + h = 0; + }; class CA_Elev: RscText { idc = 175; style = 1; diff --git a/addons/laser/functions/fnc_onLaserDesignatorDraw.sqf b/addons/laser/functions/fnc_onLaserDesignatorDraw.sqf index a5da33b236..7f8537ab9b 100644 --- a/addons/laser/functions/fnc_onLaserDesignatorDraw.sqf +++ b/addons/laser/functions/fnc_onLaserDesignatorDraw.sqf @@ -1,9 +1,15 @@ -#define DEBUG_MODE_FULL +//#define DEBUG_MODE_FULL #include "script_component.hpp" -TRACE_1("", _this); private["_laserCode"]; _laserCode = ACE_player getVariable[QGVAR(code), ACE_DEFAULT_LASER_CODE]; if(!isNil "_laserCode") then { __LaserDesignatorIGUI_LaserCode ctrlSetText format["Code: %1", [_laserCode, 4, 0, false] call CBA_fnc_formatNumber]; +}; + +if(! (ctrlShown __LaserDesignatorIGUI_LaserOn) ) then { + // TODO: hide distance + __LaserDesignatorIGUI_ACE_Distance ctrlSetText "----"; +} else { + __LaserDesignatorIGUI_ACE_Distance ctrlSetText (ctrlText __LaserDesignatorIGUI_CA_Distance); }; \ No newline at end of file diff --git a/addons/laser/script_component.hpp b/addons/laser/script_component.hpp index 6bd4063f4e..77369ead96 100644 --- a/addons/laser/script_component.hpp +++ b/addons/laser/script_component.hpp @@ -16,4 +16,7 @@ #define __LaserDesignatorIGUI (uiNamespace getVariable ["ACE_RscOptics_LaserDesignator", nil]) -#define __LaserDesignatorIGUI_LaserCode (__LaserDesignatorIGUI displayCtrl 123001) \ No newline at end of file +#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 From 5eededd3e1a9808418cd3ca73797bfe47513bcba Mon Sep 17 00:00:00 2001 From: commy2 <commy-2@gmx.de> Date: Wed, 15 Apr 2015 15:01:07 +0200 Subject: [PATCH 018/257] Recoil overhaul initial commmit --- addons/recoil/$PBOPREFIX$ | 1 + addons/recoil/CfgRecoils.hpp | 240 +++++++++++++++++++++++++++++ addons/recoil/config.cpp | 15 ++ addons/recoil/script_component.hpp | 12 ++ 4 files changed, 268 insertions(+) create mode 100644 addons/recoil/$PBOPREFIX$ create mode 100644 addons/recoil/CfgRecoils.hpp create mode 100644 addons/recoil/config.cpp create mode 100644 addons/recoil/script_component.hpp diff --git a/addons/recoil/$PBOPREFIX$ b/addons/recoil/$PBOPREFIX$ new file mode 100644 index 0000000000..1ab9ffa5e1 --- /dev/null +++ b/addons/recoil/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\recoil \ No newline at end of file diff --git a/addons/recoil/CfgRecoils.hpp b/addons/recoil/CfgRecoils.hpp new file mode 100644 index 0000000000..27283e71f1 --- /dev/null +++ b/addons/recoil/CfgRecoils.hpp @@ -0,0 +1,240 @@ + +class CfgRecoils { + class Default { + muzzleOuter[] = {0,"0.4f","0.5f","0.6f"}; + muzzleInner[] = {0,"0.05f","0.2f","0.2f"}; + kickBack[] = {"0.05f",0.1}; + permanent = 0.1; + temporary = 0.01; + }; + + class recoil_default: Default { + muzzleOuter[] = {0.3,1,0.3,0.2}; + muzzleInner[] = {0,0,0.1,0.1}; + kickBack[] = {0.03,0.06}; + permanent = 0.1; + temporary = 0.01; + }; + + class recoil_mk20: recoil_default { + muzzleOuter[] = {0.2,0.6,0.2,0.2}; + kickBack[] = {0.01,0.03}; + temporary = 0.01; + }; + + class recoil_mk20c: recoil_default { + muzzleOuter[] = {0.2,0.8,0.3,0.2}; + kickBack[] = {0.02,0.04}; + temporary = 0.015; + }; + + class recoil_trg20: recoil_default { + muzzleOuter[] = {0.2,1,0.3,0.3}; + kickBack[] = {0.02,0.04}; + temporary = 0.015; + }; + + class recoil_trg21: recoil_default { + muzzleOuter[] = {0.2,0.8,0.3,0.2}; + kickBack[] = {0.01,0.03}; + temporary = 0.01; + }; + + class recoil_mx: recoil_default { + muzzleOuter[] = {0.3,1,0.4,0.3}; + kickBack[] = {0.02,0.04}; + temporary = 0.01; + }; + + class recoil_mxc: recoil_default { + muzzleOuter[] = {0.3,1.2,0.4,0.3}; + kickBack[] = {0.03,0.06}; + temporary = 0.015; + }; + + class recoil_sw: recoil_default { + muzzleOuter[] = {0.3,0.8,0.5,0.2}; + kickBack[] = {0.02,0.04}; + temporary = 0.005; + }; + + class recoil_mxm: recoil_default { + muzzleOuter[] = {0.3,0.8,0.4,0.3}; + kickBack[] = {0.02,0.04}; + temporary = 0.01; + }; + + class recoil_ktb: recoil_default { + muzzleOuter[] = {0.3,1,0.3,0.3}; + kickBack[] = {0.02,0.04}; + temporary = 0.01; + }; + + class recoil_ktbc: recoil_default { + muzzleOuter[] = {0.3,1.2,0.3,0.3}; + kickBack[] = {0.03,0.06}; + temporary = 0.015; + }; + + class recoil_smg_01: recoil_default { + muzzleOuter[] = {0.1,0.8,0.3,0.2}; + kickBack[] = {0.01,0.03}; + temporary = 0.015; + }; + + class recoil_smg_02: recoil_default { + muzzleOuter[] = {0.1,0.6,0.2,0.2}; + kickBack[] = {0.01,0.02}; + temporary = 0.01; + }; + + class recoil_pdw: recoil_default { + muzzleOuter[] = {0.2,1,0.3,0.3}; + kickBack[] = {0.02,0.04}; + temporary = 0.02; + }; + + class recoil_sdar: recoil_default { + muzzleOuter[] = {0.2,1,0.3,0.3}; + kickBack[] = {0.02,0.04}; + temporary = 0.01; + }; + + class recoil_pistol_p07: recoil_default { + muzzleOuter[] = {0.2,1,0.2,0.3}; + kickBack[] = {0.03,0.06}; + temporary = 0.03; + }; + + class recoil_pistol_rook40: recoil_default { + muzzleOuter[] = {0.2,1,0.2,0.3}; + kickBack[] = {0.03,0.06}; + temporary = 0.02; + }; + + class recoil_pistol_acpc2: recoil_default { + muzzleOuter[] = {0.2,1.5,0.2,0.3}; + kickBack[] = {0.04,0.08}; + temporary = 0.04; + }; + + class recoil_pistol_4five: recoil_default { + muzzleOuter[] = {0.2,1.5,0.2,0.3}; + kickBack[] = {0.04,0.08}; + temporary = 0.06; + }; + + class recoil_pistol_zubr: recoil_default { + muzzleOuter[] = {0.2,1.5,0.2,0.3}; + kickBack[] = {0.04,0.08}; + temporary = 0.08; + }; + + class recoil_pistol_signal: recoil_default { + muzzleOuter[] = {0.2,1.5,0.2,0.3}; + kickBack[] = {0.02,0.04}; + temporary = 0.02; + }; + + class recoil_rpg: recoil_default { + muzzleOuter[] = {2,3,1,0.5}; + kickBack[] = {0.08,0.1}; + temporary = 0.1; + }; + + class recoil_nlaw: recoil_default { + muzzleOuter[] = {2,3,1,0.5}; + kickBack[] = {0.06,0.08}; + temporary = 0.08; + }; + + class recoil_titan_long: recoil_default { + muzzleOuter[] = {2,3,1,0.5}; + kickBack[] = {0.1,0.12}; + temporary = 0.15; + }; + + class recoil_titan_short: recoil_default { + muzzleOuter[] = {2,3,1,0.5}; + kickBack[] = {0.1,0.12}; + temporary = 0.12; + }; + + class recoil_mk200: recoil_default { + muzzleOuter[] = {0.4,0.6,0.6,0.2}; + kickBack[] = {0.03,0.06}; + temporary = 0.005; + }; + + class recoil_zafir: recoil_default { + muzzleOuter[] = {0.5,1,0.7,0.3}; + kickBack[] = {0.02,0.08}; + temporary = 0.005; + }; + + class recoil_m320: recoil_default { + muzzleOuter[] = {1,3,0.5,0.6}; + kickBack[] = {0.08,0.1}; + temporary = 0.02; + }; + + class recoil_gm6: recoil_default { + muzzleOuter[] = {1.4,3.5,0.7,0.8}; + kickBack[] = {0.1,0.12}; + temporary = 0.025; + }; + + class recoil_ebr: recoil_default { + muzzleOuter[] = {0.4,1.5,0.6,0.4}; + kickBack[] = {0.04,0.07}; + temporary = 0.01; + }; + + class recoil_dmr_01: recoil_default { + muzzleOuter[] = {0.5,2,0.5,0.5}; + kickBack[] = {0.03,0.08}; + temporary = 0.015; + }; + + class recoil_dmr_02: recoil_default { + muzzleOuter[] = {0.5,2.5,0.6,0.5}; + kickBack[] = {0.06,0.08}; + temporary = 0.01; + }; + + class recoil_dmr_03: recoil_default { + muzzleOuter[] = {0.3,1.5,0.5,0.4}; + kickBack[] = {0.03,0.06}; + temporary = 0.005; + }; + + class recoil_dmr_04: recoil_default { + muzzleOuter[] = {0.4,1.5,0.5,0.4}; + kickBack[] = {0.02,0.04}; + temporary = 0.015; + }; + + class recoil_dmr_05: recoil_default { + muzzleOuter[] = {0.5,2.5,0.8,0.6}; + kickBack[] = {0.08,0.1}; + temporary = 0.01; + }; + + class recoil_dmr_06: recoil_default { + muzzleOuter[] = {0.5,2,0.7,0.5}; + kickBack[] = {0.05,0.1}; + temporary = 0.01; + }; + + class recoil_mmg_01: recoil_default { + muzzleOuter[] = {0.6,1.5,0.8,0.3}; + kickBack[] = {0.02,0.08}; + temporary = 0.005; + }; + + class recoil_mmg_02: recoil_default { + muzzleOuter[] = {0.5,1.5,0.6,0.4}; + kickBack[] = {0.04,0.08}; + temporary = 0.005; + }; +}; diff --git a/addons/recoil/config.cpp b/addons/recoil/config.cpp new file mode 100644 index 0000000000..1e2ce69fae --- /dev/null +++ b/addons/recoil/config.cpp @@ -0,0 +1,15 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_common"}; + author[] = {"commy2"}; + authorUrl = ""; + VERSION_CONFIG; + }; +}; + +#include "CfgRecoils.hpp" diff --git a/addons/recoil/script_component.hpp b/addons/recoil/script_component.hpp new file mode 100644 index 0000000000..b5a74ec8dd --- /dev/null +++ b/addons/recoil/script_component.hpp @@ -0,0 +1,12 @@ +#define COMPONENT recoil +#include "\z\ace\addons\main\script_mod.hpp" + +#ifdef DEBUG_ENABLED_RECOIL + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_ENABLED_RECOIL + #define DEBUG_SETTINGS DEBUG_ENABLED_RECOIL +#endif + +#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file From c88479d54d49e169a0eaab2fb6f48b966b6ac833 Mon Sep 17 00:00:00 2001 From: Glowbal <thomasskooi@live.nl> Date: Wed, 15 Apr 2015 19:45:42 +0200 Subject: [PATCH 019/257] staged work --- .../functions/fnc_handleBandageOpening.sqf | 16 +++++++++++++--- addons/medical/functions/fnc_init.sqf | 1 + .../fnc_treatmentAdvanced_bandageLocal.sqf | 3 ++- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/addons/medical/functions/fnc_handleBandageOpening.sqf b/addons/medical/functions/fnc_handleBandageOpening.sqf index b4e40984ae..21211c9c1b 100644 --- a/addons/medical/functions/fnc_handleBandageOpening.sqf +++ b/addons/medical/functions/fnc_handleBandageOpening.sqf @@ -59,20 +59,30 @@ if (isClass (_config >> _className)) then { _bandagedWounds = _target getvariable [QGVAR(bandagedWounds), []]; _exist = false; _injuryId = _injury select 0; +_bandagedInjury = []; { if ((_x select 0) == _injuryId) exitwith { _exist = true; _existingInjury = _x; _existingInjury set [3, (_existingInjury select 3) + _impact]; _bandagedWounds set [_foreachIndex, _existingInjury]; + + _bandagedInjury = _existingInjury; }; }foreach _bandagedWounds; if !(_exist) then { // [ID, classID, bodypart, percentage treated, bloodloss rate] - _bandagedWounds pushback [_injuryId, _injury select 1, _injury select 2, _impact, _injury select 4]; + _bandagedInjury = [_injuryId, _injury select 1, _injury select 2, _impact, _injury select 4]; + _bandagedWounds pushback _bandagedInjury; +}; + +_target setvariable [QGVAR(bandagedWounds), _bandagedWounds, !USE_WOUND_EVENT_SYNC]; + +if (USE_WOUND_EVENT_SYNC) then { + // sync _bandagedInjury + }; -_target setvariable [QGVAR(bandagedWounds), _bandagedWounds, true]; // Check if we are ever going to reopen this if (random(1) <= _reopeningChance) then { @@ -109,7 +119,7 @@ if (random(1) <= _reopeningChance) then { }foreach _bandagedWounds; if (_exist) then { - _target setvariable [QGVAR(bandagedWounds), _bandagedWounds, true]; + _target setvariable [QGVAR(bandagedWounds), _bandagedWounds, !USE_WOUND_EVENT_SYNC]; }; }; // Otherwise something went wrong, we we don't reopen them.. diff --git a/addons/medical/functions/fnc_init.sqf b/addons/medical/functions/fnc_init.sqf index ed8301b6b2..fa6aa357c2 100644 --- a/addons/medical/functions/fnc_init.sqf +++ b/addons/medical/functions/fnc_init.sqf @@ -28,6 +28,7 @@ _unit setvariable [QGVAR(tourniquets), [0,0,0,0,0,0], true]; _unit setvariable [QGVAR(openWounds), [], true]; _unit setvariable [QGVAR(bandagedWounds), [], true]; _unit setVariable [QGVAR(internalWounds), [], true]; +_unit setvariable [QGVAR(lastUniqueWoundID), 1]; // vitals _unit setVariable [QGVAR(heartRate), 80]; diff --git a/addons/medical/functions/fnc_treatmentAdvanced_bandageLocal.sqf b/addons/medical/functions/fnc_treatmentAdvanced_bandageLocal.sqf index 217a69cd4d..02626ff1fe 100644 --- a/addons/medical/functions/fnc_treatmentAdvanced_bandageLocal.sqf +++ b/addons/medical/functions/fnc_treatmentAdvanced_bandageLocal.sqf @@ -92,7 +92,8 @@ if (USE_WOUND_EVENT_SYNC) then { }; // Handle the reopening of bandaged wounds if (_impact > 0 && {GVAR(enableAdvancedWounds)}) then { - [_target, _impact, _part, _mostEffectiveSpot, _mostEffectiveInjury, _bandage] call FUNC(handleBandageOpening); +// TODO temp disabled until bandaged wounds are supported by event sync. +// [_target, _impact, _part, _mostEffectiveSpot, _mostEffectiveInjury, _bandage] call FUNC(handleBandageOpening); }; // If all wounds have been bandaged, we will reset all damage to 0, so the unit is not showing any blood on the model anymore. From 23f47f97ae2b818381e6d42b4d7b4536cfc00ac5 Mon Sep 17 00:00:00 2001 From: PabstMirror <elephantisaterriblemascot@gmail.com> Date: Wed, 15 Apr 2015 18:32:47 -0500 Subject: [PATCH 020/257] Wirecutter - better sound effects, cleanup --- .../logistics_wirecutter/CfgEventHandlers.hpp | 1 - addons/logistics_wirecutter/CfgSounds.hpp | 15 ++++-------- addons/logistics_wirecutter/CfgWeapons.hpp | 24 +++++++++---------- addons/logistics_wirecutter/config.cpp | 2 +- .../functions/fnc_cutDownFence.sqf | 19 ++++++++++----- .../functions/fnc_getNearestFence.sqf | 6 ++--- .../functions/fnc_interactEH.sqf | 2 +- .../functions/fnc_isFence.sqf | 13 +++++----- 8 files changed, 41 insertions(+), 41 deletions(-) diff --git a/addons/logistics_wirecutter/CfgEventHandlers.hpp b/addons/logistics_wirecutter/CfgEventHandlers.hpp index 79c3aaa959..3daad1425a 100644 --- a/addons/logistics_wirecutter/CfgEventHandlers.hpp +++ b/addons/logistics_wirecutter/CfgEventHandlers.hpp @@ -1,4 +1,3 @@ - class Extended_PreInit_EventHandlers { class ADDON { init = QUOTE(call COMPILE_FILE(XEH_preInit)); diff --git a/addons/logistics_wirecutter/CfgSounds.hpp b/addons/logistics_wirecutter/CfgSounds.hpp index 9958190ec1..aa5f3464f6 100644 --- a/addons/logistics_wirecutter/CfgSounds.hpp +++ b/addons/logistics_wirecutter/CfgSounds.hpp @@ -1,12 +1,7 @@ class CfgSounds { - class ACE_Wirecutter_sound { - name = "ACE_wirecutter_sound"; - sound[] = {QUOTE(PATHTOF(sound\wire_cut.ogg)), "db-0", 1}; - titles[] = {}; - }; - class ACE_Wirecutter_sound_long { - name = "ACE_wirecutter_sound_long"; - sound[] = {QUOTE(PATHTOF(sound\wire_cut_long.ogg)), "db-0", 1}; - titles[] = {}; - }; + class ACE_Wirecutter_sound { + name = "ACE_wirecutter_sound"; + sound[] = {QUOTE(PATHTOF(sound\wirecut.ogg)), "db-0", 1}; + titles[] = {}; + }; }; diff --git a/addons/logistics_wirecutter/CfgWeapons.hpp b/addons/logistics_wirecutter/CfgWeapons.hpp index 76b1003f34..648bc3a3f8 100644 --- a/addons/logistics_wirecutter/CfgWeapons.hpp +++ b/addons/logistics_wirecutter/CfgWeapons.hpp @@ -1,16 +1,16 @@ class CfgWeapons { - class InventoryItem_Base_F; - class ACE_ItemCore; + class InventoryItem_Base_F; + class ACE_ItemCore; - class ACE_wirecutter: ACE_ItemCore { - author = "$STR_ACE_Common_ACETeam"; - displayName = "$STR_ACE_logistics_wirecutter_wirecutterName"; - descriptionShort = "$STR_ACE_logistics_wirecutter_wirecutterDescription"; - model = "\A3\weapons_F\ammo\mag_univ.p3d"; - picture = QUOTE(PATHTOF(ui\item_wirecutter_ca.paa)); - scope = 2; - class ItemInfo: InventoryItem_Base_F { - mass = 100; + class ACE_wirecutter: ACE_ItemCore { + author = "$STR_ACE_Common_ACETeam"; + displayName = "$STR_ACE_logistics_wirecutter_wirecutterName"; + descriptionShort = "$STR_ACE_logistics_wirecutter_wirecutterDescription"; + model = "\A3\weapons_F\ammo\mag_univ.p3d"; + picture = QUOTE(PATHTOF(ui\item_wirecutter_ca.paa)); + scope = 2; + class ItemInfo: InventoryItem_Base_F { + mass = 100; + }; }; - }; }; diff --git a/addons/logistics_wirecutter/config.cpp b/addons/logistics_wirecutter/config.cpp index 6e1db15061..8e14bde892 100644 --- a/addons/logistics_wirecutter/config.cpp +++ b/addons/logistics_wirecutter/config.cpp @@ -3,7 +3,7 @@ class CfgPatches { class ADDON { units[] = {}; - weapons[] = {}; + weapons[] = {"ACE_wirecutter"}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_interaction"}; author[] = {"gpgpgpgp", "PabstMirror"}; diff --git a/addons/logistics_wirecutter/functions/fnc_cutDownFence.sqf b/addons/logistics_wirecutter/functions/fnc_cutDownFence.sqf index ee4c512cd2..0186ea4b3a 100644 --- a/addons/logistics_wirecutter/functions/fnc_cutDownFence.sqf +++ b/addons/logistics_wirecutter/functions/fnc_cutDownFence.sqf @@ -16,19 +16,26 @@ */ #include "script_component.hpp" +#define SOUND_CLIP_TIME_SPACEING 1.5 private ["_timeToCut"]; PARAMS_2(_unit,_fenceObject); if (_unit != ACE_player) exitWith {}; -_timeToCut = if ([ACE_player] call EFUNC(common,isEngineer)) then {5} else {10}; +_timeToCut = if ([ACE_player] call EFUNC(common,isEngineer)) then {7.5} else {11}; [ACE_player, "AinvPknlMstpSnonWnonDr_medic5", 0] call EFUNC(common,doAnimation); -if (_timeToCut > 5) then { - playSound "ACE_wirecutter_sound_long"; -} else { - playSound "ACE_wirecutter_sound"; +_progressCheck = { + PARAMS_2(_args,_passedTime); + EXPLODE_2_PVT(_args,_fenceObject,_lastSoundEffectTime); + if (_passedTime > (_lastSoundEffectTime + SOUND_CLIP_TIME_SPACEING)) then { + // playSound "ACE_wirecutter_sound"; + playSound3D [QUOTE(PATHTO_R(sound\wirecut.ogg)), objNull, false, (getPosASL ACE_player), 1, 1, 10]; + _args set [1, _passedTime]; + }; + + ((!isNull _fenceObject) && {(damage _fenceObject) < 1} && {("ACE_wirecutter" in (items ACE_player))}) }; -[_timeToCut, [_fenceObject], {(_this select 0) call FUNC(cutDownFenceCallback)}, {(_this select 0) call FUNC(cutDownFenceAbort)}, localize "STR_ACE_logistics_wirecutter_CuttingFence"] call EFUNC(common,progressBar); +[_timeToCut, [_fenceObject,0], {(_this select 0) call FUNC(cutDownFenceCallback)}, {(_this select 0) call FUNC(cutDownFenceAbort)}, localize "STR_ACE_logistics_wirecutter_CuttingFence", _progressCheck] call EFUNC(common,progressBar); diff --git a/addons/logistics_wirecutter/functions/fnc_getNearestFence.sqf b/addons/logistics_wirecutter/functions/fnc_getNearestFence.sqf index c9e59b41a0..15bfbdb8ef 100644 --- a/addons/logistics_wirecutter/functions/fnc_getNearestFence.sqf +++ b/addons/logistics_wirecutter/functions/fnc_getNearestFence.sqf @@ -20,9 +20,9 @@ PARAMS_1(_unit); _nearestFence = objNull; { - if ((isNull _nearestFence) && {[_x] call FUNC(isFence)}) then { - _nearestFence = _x; - }; + if ((isNull _nearestFence) && {[_x] call FUNC(isFence)}) then { + _nearestFence = _x; + }; } forEach nearestObjects [_unit, [], 15]; _nearestFence diff --git a/addons/logistics_wirecutter/functions/fnc_interactEH.sqf b/addons/logistics_wirecutter/functions/fnc_interactEH.sqf index 6dace9c42d..ddd180047c 100644 --- a/addons/logistics_wirecutter/functions/fnc_interactEH.sqf +++ b/addons/logistics_wirecutter/functions/fnc_interactEH.sqf @@ -35,7 +35,7 @@ if (!("ACE_wirecutter" in (items ace_player))) exitWith {}; } else { // Prevent Rare Error when ending mission with interact key down: if (isNull ace_player) exitWith {}; - + //If player moved >5 meters from last pos, then rescan if (((getPosASL ace_player) distance _setPosition) > 5) then { diff --git a/addons/logistics_wirecutter/functions/fnc_isFence.sqf b/addons/logistics_wirecutter/functions/fnc_isFence.sqf index aee9a22ef9..1ab97a67af 100644 --- a/addons/logistics_wirecutter/functions/fnc_isFence.sqf +++ b/addons/logistics_wirecutter/functions/fnc_isFence.sqf @@ -17,11 +17,9 @@ #include "script_component.hpp" //find is case sensitive, so keep everything lowercase -#define FENCE_A3_TYPENAMES ["land_net_fence_4m_f", "land_net_fence_8m_f", "land_net_fenced_8m_f", "land_new_wiredfence_5m_f", "land_new_wiredfence_10m_dam_f", "land_new_wiredfence_10m_f", "land_pipe_fence_4m_f", "land_pipe_fence_4mnolc_f", "land_sportground_fence_f", "land_wired_fence_4m_f", "land_wired_fence_4md_f", "land_wired_fence_8m_f", "land_wired_fence_8md_f", "land_razorwire_f"] -#define FENCE_A3_P3DS ["mil_wiredfence_f.p3d"] +#define FENCE_TYPENAMES ["land_net_fence_4m_f", "land_net_fence_8m_f", "land_net_fenced_8m_f", "land_new_wiredfence_5m_f", "land_new_wiredfence_10m_dam_f", "land_new_wiredfence_10m_f", "land_pipe_fence_4m_f", "land_pipe_fence_4mnolc_f", "land_sportground_fence_f", "land_wired_fence_4m_f", "land_wired_fence_4md_f", "land_wired_fence_8m_f", "land_wired_fence_8md_f", "land_razorwire_f"] -#define FENCE_AIA_TYPENAMES [] -#define FENCE_AIA_P3DS ["wall_indfnc_3.p3d", "wall_indfnc_9.p3d", "wall_indfnc_corner.p3d", "pletivo_wired.p3d", "wall_fen1_5.p3d"] +#define FENCE_P3DS ["mil_wiredfence_f.p3d","wall_indfnc_3.p3d", "wall_indfnc_9.p3d", "wall_indfnc_corner.p3d", "pletivo_wired.p3d", "wall_fen1_5.p3d"] private ["_typeOf", "_returnValue"]; PARAMS_1(_object); @@ -30,14 +28,15 @@ _typeOf = toLower (typeOf _object); _returnValue = false; if (_typeOf != "") then { - _returnValue = _typeOf in (FENCE_A3_TYPENAMES + FENCE_AIA_TYPENAMES); + //If the fence has configEntry we can check it directly + _returnValue = _typeOf in FENCE_TYPENAMES; } else { _typeOf = toLower (str _object); //something like "123201: wall_indfnc_9.p3d" { - if ((_typeOf find _x) != -1) then { + if ((_typeOf find _x) != -1) exitWith { _returnValue = true; }; - } forEach (FENCE_A3_P3DS + FENCE_AIA_P3DS); + } forEach FENCE_P3DS; }; _returnValue From 80516f4f6197c87e7fe9080cb1734b5d1461175a Mon Sep 17 00:00:00 2001 From: PabstMirror <elephantisaterriblemascot@gmail.com> Date: Wed, 15 Apr 2015 22:27:12 -0500 Subject: [PATCH 021/257] Increase Sound Volume --- addons/logistics_wirecutter/functions/fnc_cutDownFence.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/logistics_wirecutter/functions/fnc_cutDownFence.sqf b/addons/logistics_wirecutter/functions/fnc_cutDownFence.sqf index 0186ea4b3a..5153176de2 100644 --- a/addons/logistics_wirecutter/functions/fnc_cutDownFence.sqf +++ b/addons/logistics_wirecutter/functions/fnc_cutDownFence.sqf @@ -31,7 +31,7 @@ _progressCheck = { EXPLODE_2_PVT(_args,_fenceObject,_lastSoundEffectTime); if (_passedTime > (_lastSoundEffectTime + SOUND_CLIP_TIME_SPACEING)) then { // playSound "ACE_wirecutter_sound"; - playSound3D [QUOTE(PATHTO_R(sound\wirecut.ogg)), objNull, false, (getPosASL ACE_player), 1, 1, 10]; + playSound3D [QUOTE(PATHTO_R(sound\wirecut.ogg)), objNull, false, (getPosASL ACE_player), 3, 1, 10]; _args set [1, _passedTime]; }; From 58dfc6aa97c80dae442483c477ae7c2816466287 Mon Sep 17 00:00:00 2001 From: PabstMirror <elephantisaterriblemascot@gmail.com> Date: Wed, 15 Apr 2015 22:34:24 -0500 Subject: [PATCH 022/257] Add item to ace misc box --- addons/logistics_wirecutter/CfgVehicles.hpp | 8 ++++++++ addons/logistics_wirecutter/config.cpp | 1 + 2 files changed, 9 insertions(+) create mode 100644 addons/logistics_wirecutter/CfgVehicles.hpp diff --git a/addons/logistics_wirecutter/CfgVehicles.hpp b/addons/logistics_wirecutter/CfgVehicles.hpp new file mode 100644 index 0000000000..a31d9c0d99 --- /dev/null +++ b/addons/logistics_wirecutter/CfgVehicles.hpp @@ -0,0 +1,8 @@ +class CfgVehicles { + class Box_NATO_Support_F; + class ACE_Box_Misc: Box_NATO_Support_F { + class TransportItems { + MACRO_ADDITEM(ACE_wirecutter,4); + }; + }; +}; diff --git a/addons/logistics_wirecutter/config.cpp b/addons/logistics_wirecutter/config.cpp index 8e14bde892..89fbd1c10f 100644 --- a/addons/logistics_wirecutter/config.cpp +++ b/addons/logistics_wirecutter/config.cpp @@ -15,3 +15,4 @@ class CfgPatches { #include "CfgEventHandlers.hpp" #include "CfgSounds.hpp" #include "CfgWeapons.hpp" +#include "CfgVehicles.hpp" From a129f18a2ad51ffb73dc1be6012c66bc3d8e8c14 Mon Sep 17 00:00:00 2001 From: Marco <ramius86@users.noreply.github.com> Date: Thu, 16 Apr 2015 10:13:50 +0200 Subject: [PATCH 023/257] Update stringtable.xml Italian --- addons/winddeflection/stringtable.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/addons/winddeflection/stringtable.xml b/addons/winddeflection/stringtable.xml index 897a3c556b..8e2e00d96e 100644 --- a/addons/winddeflection/stringtable.xml +++ b/addons/winddeflection/stringtable.xml @@ -11,6 +11,7 @@ <French>Vent</French> <German>Windinformationen</German> <Hungarian>Szélinformáció</Hungarian> + <Italian>Informazioni sul vento</Italian> </Key> <Key ID="STR_ACE_WEATHER_METER_WIND_DIRECTION"> <English>Direction: %1</English> @@ -21,6 +22,7 @@ <French>Direction %1</French> <German>Windrichtung: %1</German> <Hungarian>Irány: %1</Hungarian> + <Italian>Direzione: %1</Italian> </Key> <Key ID="STR_ACE_WEATHER_METER_WIND_SPEED"> <English>Speed: %1 m/s</English> @@ -31,6 +33,7 @@ <French>Vitesse %1 m/s</French> <German>Geschwindigkeit: %1m/s</German> <Hungarian>Sebesség: %1 m/s</Hungarian> + <Italian>Velocità: %1 m/s</Italian> </Key> <Key ID="STR_ACE_WEATHER_METER_WEATHER_CATEGORY"> <English>Weather Information</English> @@ -41,6 +44,7 @@ <French>Météo</French> <German>Wetterinformationen</German> <Hungarian>Időjárás-Információ</Hungarian> + <Italian>Meteo</Italian> </Key> <Key ID="STR_ACE_WEATHER_METER_WEATHER_HUMIDITY"> <English>Humidity: %1%</English> @@ -51,6 +55,7 @@ <French>Humidité: %1%</French> <German>Luftfeuchtigkeit: %1</German> <Hungarian>Páratartalom: %1%</Hungarian> + <Italian>Umidità: %1%</Italian> </Key> </Container> </Package> From b3d4e2f48f0011d4371ff61607e4c90673c14632 Mon Sep 17 00:00:00 2001 From: Marco <ramius86@users.noreply.github.com> Date: Thu, 16 Apr 2015 10:14:18 +0200 Subject: [PATCH 024/257] Update stringtable.xml IT --- addons/weather/stringtable.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/weather/stringtable.xml b/addons/weather/stringtable.xml index 46a0653269..0837919e34 100644 --- a/addons/weather/stringtable.xml +++ b/addons/weather/stringtable.xml @@ -7,6 +7,7 @@ <Polish>Pokaż inf. o wietrze</Polish> <Russian>Показать информацию о погоде</Russian> <French>Afficher information du vent</French> + <Italian>Mostra informazioni sul vento</Italian> </Key> </Package> </Project> From c1655aa9a9f79e8e0935b95abb765cf7ebd275df Mon Sep 17 00:00:00 2001 From: Marco <ramius86@users.noreply.github.com> Date: Thu, 16 Apr 2015 10:16:17 +0200 Subject: [PATCH 025/257] Update stringtable.xml IT --- addons/weaponselect/stringtable.xml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/addons/weaponselect/stringtable.xml b/addons/weaponselect/stringtable.xml index d534ecd29b..d7d2929a5f 100644 --- a/addons/weaponselect/stringtable.xml +++ b/addons/weaponselect/stringtable.xml @@ -10,6 +10,7 @@ <Polish>Wyświetl tekst przy rzucie granatem</Polish> <French>Afficher texte lors d'un lancé de grenade</French> <Hungarian>Szöveg mutatása gránát eldobásakor</Hungarian> + <Italian>Mostra indicazioni nel lancio granate</Italian> </Key> <Key ID="STR_ACE_Weaponselect_SettingDisplayTextDesc"> <English>Display a hint or text on grenade throw.</English> @@ -20,6 +21,7 @@ <Polish>Wyświetla powiadomienie lub tekst przy rzucie granatem.</Polish> <French>Afficher texte/info au lancé de grenade</French> <Hungarian>Jelez egy súgót vagy szöveget a gránát eldobásakor.</Hungarian> + <Italian>Mostra un suggerimento quando si lanciano granate</Italian> </Key> <Key ID="STR_ACE_WeaponSelect_SelectPistol"> <English>Select Pistol</English> @@ -55,7 +57,7 @@ <French>Sélectionner Lanceur</French> <Hungarian>Rakétavető Kiválasztása</Hungarian> <Portuguese>Selecionar Lançador</Portuguese> - <Italian>Seleziona il Lanciatore</Italian> + <Italian>Seleziona il Lanciamissili</Italian> </Key> <Key ID="STR_ACE_WeaponSelect_SelectRifleMuzzle"> <English>Select Grenade Launcher</English> @@ -162,6 +164,7 @@ <Hungarian>Gránát: %1</Hungarian> <Russian>Граната %1</Russian> <French>Grenade %1</French> + <Italian>Granata %1</Italian> </Key> <Key ID="STR_ACE_WeaponSelect_ReadyGrenade"> <English>Ready Grenade</English> @@ -172,6 +175,7 @@ <Hungarian>Gránát előkészítése</Hungarian> <Russian>Подготовить гранату</Russian> <French>Grenade prête</French> + <Italian>Granata pronta</Italian> </Key> <Key ID="STR_ACE_WeaponSelect_SelectGrenadeFrag"> <English>Select Frag Grenade</English> @@ -194,7 +198,7 @@ <Hungarian>Nem-robbanó Gránát Kiválasztása</Hungarian> <Czech>Zvolit Ne-Výbušný Granát</Czech> <Portuguese>Selecionar Granada</Portuguese> - <Italian>Seleziona Altre Granate</Italian> + <Italian>Seleziona granate non a frammentazione</Italian> <Russian>Выбрать гранату</Russian> </Key> <Key ID="STR_ACE_WeaponSelect_ThrowGrenade"> @@ -218,6 +222,7 @@ <Czech>Žádné granáty</Czech> <Hungarian>Nincs több gránát</Hungarian> <Russian>Гранат не осталось</Russian> + <Italian>Granate esaurite</Italian> </Key> <Key ID="STR_ACE_WeaponSelect_NoFragsLeft"> <English>No frags left</English> @@ -264,6 +269,7 @@ <Polish>Wystrzel granat dymny</Polish> <Hungarian>Füstvető eltüzelése</Hungarian> <Russian>Запустить дымовую завесу</Russian> + <Italian>Lancia fumogeno</Italian> </Key> </Package> </Project> From 5e7fb0fb6467012b9155948be7e9e8cf283526ab Mon Sep 17 00:00:00 2001 From: Marco <ramius86@users.noreply.github.com> Date: Thu, 16 Apr 2015 10:18:49 +0200 Subject: [PATCH 026/257] Update stringtable.xml IT --- addons/vehiclelock/stringtable.xml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/addons/vehiclelock/stringtable.xml b/addons/vehiclelock/stringtable.xml index a327352f9b..349cd46e98 100644 --- a/addons/vehiclelock/stringtable.xml +++ b/addons/vehiclelock/stringtable.xml @@ -10,6 +10,7 @@ <Czech>Odemknout vozidlo</Czech> <Hungarian>Jármű nyitása</Hungarian> <Russian>Открыть машину</Russian> + <Italian>Apri il veicolo</Italian> </Key> <Key ID="STR_ACE_Vehicle_Action_Lock"> <English>Lock Vehicle</English> @@ -20,6 +21,7 @@ <Czech>Zamknout vozidlo</Czech> <Hungarian>Jármű zárása</Hungarian> <Russian>Закрыть машину</Russian> + <Italian>Chiudi il veicolo</Italian> </Key> <Key ID="STR_ACE_Vehicle_Action_Lockpick"> <English>Lockpick Vehicle</English> @@ -30,6 +32,7 @@ <Czech>Vypáčit vozidlo</Czech> <Hungarian>Jármű feltörése</Hungarian> <Russian>Взломать замок</Russian> + <Italian>Scassina veicolo</Italian> </Key> <Key ID="STR_ACE_Vehicle_Action_LockpickInUse"> <English>Picking Lock....</English> @@ -40,6 +43,7 @@ <Czech>Páčim vozidlo...</Czech> <Hungarian>Zár feltörése...</Hungarian> <Russian>Взламываем замок...</Russian> + <Italian>Scassino il veicolo....</Italian> </Key> <Key ID="STR_ACE_Vehicle_Item_Custom_Description"> <English>A custom key that will open a specific vehicle.</English> @@ -50,6 +54,7 @@ <Czech>Vlastní klíč, který otevře konkrétní vozidlo.</Czech> <Hungarian>Egy egyedi kulcs, ami egy meghatározott járművet nyit ki.</Hungarian> <Russian>Ключ от конкретной машины.</Russian> + <Italian>Una chiave personalizzata che apre determinati veicoli.</Italian> </Key> <Key ID="STR_ACE_Vehicle_Item_Master_Description"> <English>A Master Key will open any lock, no matter what!</English> @@ -60,6 +65,7 @@ <Czech>Hlavní klíč otevře libovolný zámek, bez vyjímek!</Czech> <Hungarian>Egy főkulcs, ami minden zárat kinyit, helyzettől függetlenül!</Hungarian> <Russian>Универсальный ключ, открывающий любой замок.</Russian> + <Italian>Una chiave principale che apre qualsiasi serratura!</Italian> </Key> <Key ID="STR_ACE_Vehicle_Item_Lockpick_Description"> <English>A lockpick set that can pick the locks of most vehicles.</English> @@ -70,6 +76,7 @@ <Czech>Sada paklíčů, která dokáže odemknout zámky u většiny vozidel.</Czech> <Hungarian>Egy tolvajkulcs-készlet, mely a legtöbb jármű zárjait fel tudja törni.</Hungarian> <Russian>Набор отмычек, которым можно взломать почти любую машину.</Russian> + <Italian>Un grimardello per forzare la maggior parte dei veicoli</Italian> </Key> <Key ID="STR_ACE_Vehicle_Item_West_Description"> <English>A key that should open most WEST vehicles.</English> @@ -80,6 +87,7 @@ <Czech>Klíč který by měl otevřít většinou Západních vozidel.</Czech> <Hungarian>Egy kulcs, ami a NYUGAT egységeinek legtöbb járművét ki tudja nyitni.</Hungarian> <Russian>Ключ для открытия большинства машин Запада.</Russian> + <Italian>Una chiave che apre la maggior parte dei veicoli WEST</Italian> </Key> <Key ID="STR_ACE_Vehicle_Item_East_Description"> <English>A key that should open most EAST vehicle.</English> @@ -90,6 +98,7 @@ <Hungarian>Egy kulcs, ami a KELET egységeinek legtöbb járművét ki tudja nyitni.</Hungarian> <Czech>Klíč který by měl otevřít vetšinu Východních vozidel.</Czech> <Russian>Ключ для открытия большинства машин Востока.</Russian> + <Italian>Una chaive che apr ela maggior parte dei veicoli EAST</Italian> </Key> <Key ID="STR_ACE_Vehicle_Item_Indp_Description"> <English>A key that should open most INDEP vehicle.</English> @@ -100,6 +109,7 @@ <Hungarian>Egy kulcs, ami a FÜGGETLEN egységek legtöbb járművét ki tudja nyitni.</Hungarian> <Czech>Klíč který by měl otevřít většinu Nezávislých vozidel.</Czech> <Russian>Ключ для открытия большинства машин Независимых.</Russian> + <Italian>Una chaive che apr ela maggior parte dei veicoli INDEP</Italian> </Key> <Key ID="STR_ACE_Vehicle_Item_Civ_Description"> <English>A key that should open most CIV vehicle.</English> @@ -110,6 +120,7 @@ <Czech>Klíč který by měl otevřít většinu Civilních vozidel.</Czech> <Hungarian>Egy kulcs, ami a CIVIL járművek többségét ki tudja nyitni.</Hungarian> <Russian>Ключ для открытия большинства машин Гражданских.</Russian> + <Italian>Una chaive che apr ela maggior parte dei veicoli CIV</Italian> </Key> </Package> </Project> From 59643152bd7bc5e23251db5ce1563270a6fe307b Mon Sep 17 00:00:00 2001 From: Marco <ramius86@users.noreply.github.com> Date: Thu, 16 Apr 2015 10:19:43 +0200 Subject: [PATCH 027/257] Update stringtable.xml IT --- addons/switchunits/stringtable.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/switchunits/stringtable.xml b/addons/switchunits/stringtable.xml index c95da37337..58b0b46d6d 100644 --- a/addons/switchunits/stringtable.xml +++ b/addons/switchunits/stringtable.xml @@ -10,6 +10,7 @@ <Spanish>Cambiado de unidad</Spanish> <French>Unité changée</French> <Hungarian>Egység átváltva</Hungarian> + <Italian>Cambia unità</Italian> </Key> <Key ID="STR_ACE_SwitchUnits_TooCloseToEnemy"> <English>This unit is too close to the enemy.</English> @@ -20,6 +21,7 @@ <Spanish>Esta unidad está demasiado cerca del enemigo.</Spanish> <French>Cette unité est trop proche des ennemis</French> <Hungarian>Ez az egység túl közel van az ellenséghez.</Hungarian> + <Italian>Questa unità è troppo vicina al nemico.</Italian> </Key> </Package> </Project> From fda1febc30f8e4c86bf2547e78f368fb5a4181eb Mon Sep 17 00:00:00 2001 From: Marco <ramius86@users.noreply.github.com> Date: Thu, 16 Apr 2015 10:21:49 +0200 Subject: [PATCH 028/257] Update stringtable.xml IT --- addons/scopes/stringtable.xml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/addons/scopes/stringtable.xml b/addons/scopes/stringtable.xml index 16d6b60c4c..396e32c6d6 100644 --- a/addons/scopes/stringtable.xml +++ b/addons/scopes/stringtable.xml @@ -5,46 +5,55 @@ <English>Minor adjustment up</English> <Polish>Zerowanie powoli w górę</Polish> <Russian>Малая корректировка ВВЕРХ</Russian> + <Italian>Regola leggermente alzata in alto</Italian> </Key> <Key ID="STR_ACE_Scopes_AdjustDownMinor"> <English>Minor adjustment down</English> <Polish>Zerowanie powoli w dół</Polish> <Russian>Малая корректировка ВНИЗ</Russian> + <Italian>Regola leggermente alzata in basso</Italian> </Key> <Key ID="STR_ACE_Scopes_AdjustRightMinor"> <English>Minor adjustment right</English> <Polish>Zerowanie powoli w prawo</Polish> <Russian>Малая корректировка ВПРАВО</Russian> + <Italian>Regola leggermente il tiro a destra</Italian> </Key> <Key ID="STR_ACE_Scopes_AdjustLeftMinor"> <English>Minor adjustment left</English> <Polish>Zerowanie powoli w lewo</Polish> <Russian>Малая корректировка ВЛЕВО</Russian> + <Italian>Regola leggermete il tiro a sinistra</Italian> </Key> <Key ID="STR_ACE_Scopes_AdjustUpMajor"> <English>Major adjustment up</English> <Polish>Zerowanie w górę</Polish> <Russian>Большая корректировка ВВЕРХ</Russian> + <Italian>Regola l'alzata in alto</Italian> </Key> <Key ID="STR_ACE_Scopes_AdjustDownMajor"> <English>Major adjustment down</English> <Polish>Zerowanie w dół</Polish> <Russian>Большая корректировка ВНИЗ</Russian> + <Italian>Regola l'alzata in basso</Italian> </Key> <Key ID="STR_ACE_Scopes_AdjustRightMajor"> <English>Major adjustment right</English> <Polish>Zerowanie w prawo</Polish> <Russian>Большая корректировка ВПРАВО</Russian> + <Italian>Regola il tiro a destra</Italian> </Key> <Key ID="STR_ACE_Scopes_AdjustLeftMajor"> <English>Major adjustment left</English> <Polish>Zerowanie w lewo</Polish> <Russian>Большая корректировка ВЛЕВО</Russian> + <Italian>Regola il tiro a sinistra</Italian> </Key> <Key ID="STR_ACE_Scopes_AdjustZero"> <English>Set zero adjustment</English> <Polish>Zresetuj wyzerowanie</Polish> <Russian>Сбросить корректировку</Russian> + <Italian>Resetta i valori del tiro</Italian> </Key> </Package> </Project> From 0655c3f3b69e1186b54e71c0d326cb68eb4dad52 Mon Sep 17 00:00:00 2001 From: Marco <ramius86@users.noreply.github.com> Date: Thu, 16 Apr 2015 10:22:32 +0200 Subject: [PATCH 029/257] Update stringtable.xml IT --- addons/safemode/stringtable.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/addons/safemode/stringtable.xml b/addons/safemode/stringtable.xml index 40691bd7da..521651999a 100644 --- a/addons/safemode/stringtable.xml +++ b/addons/safemode/stringtable.xml @@ -10,6 +10,7 @@ <Hungarian>Biztonságos mód</Hungarian> <Russian>Предохранитель</Russian> <French>Sécurité</French> + <Italian>Sicura inserita</Italian> </Key> <Key ID="STR_ACE_SafeMode_TakeOffSafety"> <English>Take off Safety</English> @@ -20,6 +21,7 @@ <Hungarian>Biztonsági kapcsoló eltolása</Hungarian> <Russian>Снять с предохранителя</Russian> <French>Enlever sécurité</French> + <Italian>Togli la sicura</Italian> </Key> <Key ID="STR_ACE_SafeMode_PutOnSafety"> <English>Put on Safety</English> @@ -30,6 +32,7 @@ <Hungarian>Biztonsági kapcsoló helyretolása</Hungarian> <Russian>Поставить на предохранитель</Russian> <French>Sécurité mise</French> + <Italian>Inserisci la sicura</Italian> </Key> <Key ID="STR_ACE_SafeMode_TookOffSafety"> <English>Took off Safety</English> @@ -40,6 +43,7 @@ <Hungarian>Biztonságos mód megszüntetve</Hungarian> <Russian>Снят с предохранителя</Russian> <French>Sécurité enlevée</French> + <Italian>Togli la sicura</Italian> </Key> </Package> </Project> From 13de953aaba349e36aaba4b4b03f8af56fbff74a Mon Sep 17 00:00:00 2001 From: Marco <ramius86@users.noreply.github.com> Date: Thu, 16 Apr 2015 10:23:34 +0200 Subject: [PATCH 030/257] Update stringtable.xml IT --- addons/respawn/stringtable.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/addons/respawn/stringtable.xml b/addons/respawn/stringtable.xml index af003b4c28..7b3d997a1c 100644 --- a/addons/respawn/stringtable.xml +++ b/addons/respawn/stringtable.xml @@ -10,6 +10,7 @@ <Polish>Rozmieszczenie za 5 sekund ...</Polish> <Czech>Respawn za 5 sekund...</Czech> <Hungarian>Kihelyezés 5 másodperc múlva ...</Hungarian> + <Italian>Dispiegamento in 5 secondi ...</Italian> </Key> <Key ID="STR_ACE_Respawn_Deployed"> <English>Rallypoint deployed</English> @@ -20,6 +21,7 @@ <Polish>Punkt zbiórki rozmieszczony</Polish> <Czech>Rallypoint umístěn</Czech> <Hungarian>Gyülekezőpont elhelyezve</Hungarian> + <Italian>Rallypoint dispiegato</Italian> </Key> <Key ID="STR_ACE_Respawn_TeleportedToBase"> <English>Teleported to Base</English> @@ -30,6 +32,7 @@ <Polish>Przeteleportowano do bazy</Polish> <Czech>Odteleportován na základnu</Czech> <Hungarian>Bázisra teleportálva</Hungarian> + <Italian>Teleportato alla base</Italian> </Key> <Key ID="STR_ACE_Respawn_TeleportedToRallypoint"> <English>Teleported to Rallypoint</English> @@ -40,6 +43,7 @@ <Polish>Przeteleportowano do punktu zbiórki</Polish> <Czech>Odteleportován na rallypoint</Czech> <Hungarian>Gyülekezőpontra teleportálva</Hungarian> + <Italian>Teleportato al rallypoint</Italian> </Key> <Key ID="STR_ACE_Respawn_RallypointWestBase"> <English>Rallypoint West (Base)</English> From 66ba74e79d997b9b86e0fa0ac1d771b66e13d730 Mon Sep 17 00:00:00 2001 From: Marco <ramius86@users.noreply.github.com> Date: Thu, 16 Apr 2015 10:24:17 +0200 Subject: [PATCH 031/257] Update stringtable.xml IT --- addons/reloadlaunchers/stringtable.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/addons/reloadlaunchers/stringtable.xml b/addons/reloadlaunchers/stringtable.xml index ff5637eaf6..7716050334 100644 --- a/addons/reloadlaunchers/stringtable.xml +++ b/addons/reloadlaunchers/stringtable.xml @@ -11,6 +11,7 @@ <Polish>Załaduj wyrzutnię</Polish> <French>Charger lanceur</French> <Hungarian>Kilövö betöltése</Hungarian> + <Italian>Carica lanciamissili</Italian> </Key> <Key ID="STR_ACE_ReloadLaunchers_LoadingLauncher"> <English>Loading launcher ...</English> @@ -21,6 +22,7 @@ <Czech>Nabíjím odpalovač ...</Czech> <Polish>Ładowanie wyrzutni ...</Polish> <Hungarian>Kilövő betöltés alatt ...</Hungarian> + <Italian>Carico il lanciamissili ...</Italian> </Key> <Key ID="STR_ACE_ReloadLaunchers_LauncherLoaded"> <English>Launcher loaded</English> @@ -31,6 +33,7 @@ <Czech>Odpalovač nabit</Czech> <Polish>Wyrzutnia załadowana</Polish> <Hungarian>Kilövő betöltve</Hungarian> + <Italian>Lanciamissili caricato</Italian> </Key> <Key ID="STR_ACE_ReloadLaunchers_LoadMagazine"> <English>Load %1</English> @@ -41,6 +44,7 @@ <Czech>Nabít %1</Czech> <Polish>Załadowano %1</Polish> <Hungarian>%1 betöltése</Hungarian> + <Italian>Caricato %1</Italian> </Key> </Package> </Project> From 500098d0610c07189276a69777f0e5f00e14a440 Mon Sep 17 00:00:00 2001 From: Marco <ramius86@users.noreply.github.com> Date: Thu, 16 Apr 2015 10:25:39 +0200 Subject: [PATCH 032/257] Update stringtable.xml IT --- addons/reload/stringtable.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/addons/reload/stringtable.xml b/addons/reload/stringtable.xml index 7c401fec05..51956670b7 100644 --- a/addons/reload/stringtable.xml +++ b/addons/reload/stringtable.xml @@ -10,6 +10,7 @@ <Polish>Sprawdź stan amunicji przy przeładowaniu broni</Polish> <French>Vérification des munitions au rechargement</French> <Hungarian>Lőszer ellenőrzése a fegyver újratöltésekor</Hungarian> + <Italian>Controlla le munizioni ricaricando</Italian> </Key> <Key ID="STR_ACE_reload_SettingDisplayTextDesc"> <English>Check the ammo in your new magazine on magazine reload.</English> @@ -20,6 +21,7 @@ <Polish>Pokaż stan amunicji w nowym magazynku przy przeładowaniu broni</Polish> <French>Vérification du nombre de munition au rechargement</French> <Hungarian>A lőszer ellenőrzése az új tárad behelyezésekor újratöltés közben.</Hungarian> + <Italian>Controlla le munizioni rimanenti nel caricatore in fase di cambio caricatore.</Italian> </Key> <Key ID="STR_ACE_Reload_checkAmmo"> <English>Check Ammo</English> @@ -54,6 +56,7 @@ <Polish>Podłącz taśmę</Polish> <German>Gurt anhängen</German> <Hungarian>Töltényheveder összekötése</Hungarian> + <Italian>Attacca la tracolla</Italian> </Key> <Key ID="STR_ACE_Reload_LinkingBelt"> <English>Linking belt...</English> @@ -64,6 +67,7 @@ <Polish>Podłączanie taśmy...</Polish> <German>Gurt anhängen ...</German> <Hungarian>Töltényheveder összekötése folyamatban...</Hungarian> + <Italian>Attacco la tracolla...</Italian> </Key> </Package> </Project> From 23cb1058fc386ea282fcd832c37853d803948686 Mon Sep 17 00:00:00 2001 From: Marco <ramius86@users.noreply.github.com> Date: Thu, 16 Apr 2015 10:26:55 +0200 Subject: [PATCH 033/257] Update stringtable.xml IT --- addons/parachute/stringtable.xml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/addons/parachute/stringtable.xml b/addons/parachute/stringtable.xml index 52ccaefe77..a1de714331 100644 --- a/addons/parachute/stringtable.xml +++ b/addons/parachute/stringtable.xml @@ -11,6 +11,7 @@ <Spanish>Altímetro</Spanish> <Hungarian>Magasságmérő</Hungarian> <Russian>Высотомер</Russian> + <Italian>Altimetro</Italian> </Key> <Key ID="STR_ACE_Parachute_AltimeterDisplayName"> <English>Altimeter Watch</English> @@ -21,6 +22,7 @@ <Spanish>Reloj altímetro</Spanish> <Hungarian>Magasságmérős karóra</Hungarian> <Russian>Часы с высотомером</Russian> + <Italian>Controlla l'altimetro</Italian> </Key> <Key ID="STR_ACE_Parachute_AltimeterDescription"> <English>Used to show height, descent rate and the time.</English> @@ -31,6 +33,7 @@ <Spanish>Utilizado para mostrar altura, tasa de descenso y hora.</Spanish> <Hungarian>Mutatja a magasságot, a zuhanási sebességet, és az időt.</Hungarian> <Russian>Используется для определения высоты, скорости снижения и времени.</Russian> + <Italian>Usato per mostrare l'altitudine, la velocità di discesa e l'ora.</Italian> </Key> <Key ID="STR_ACE_Parachute_NonSteerableParachute"> <English>Non-Steerable Parachute</English> @@ -41,6 +44,7 @@ <Czech>Neříditelný padák</Czech> <Hungarian>Irányíthatatlan ejtőernyő</Hungarian> <Russian>Неуправляемый парашют</Russian> + <Italian>Paracadute non manovrabile</Italian> </Key> </Package> -</Project> \ No newline at end of file +</Project> From ba510facbd550549e432b7ec5fb1e71b9e3deee9 Mon Sep 17 00:00:00 2001 From: Marco <ramius86@users.noreply.github.com> Date: Thu, 16 Apr 2015 10:29:17 +0200 Subject: [PATCH 034/257] Update stringtable.xml IT --- addons/optionsmenu/stringtable.xml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/addons/optionsmenu/stringtable.xml b/addons/optionsmenu/stringtable.xml index c4ac2b1593..f9bd537e3f 100644 --- a/addons/optionsmenu/stringtable.xml +++ b/addons/optionsmenu/stringtable.xml @@ -22,6 +22,7 @@ <Polish>Napraw animację</Polish> <French>Corriger animation</French> <Hungarian>Animációk kijavítása</Hungarian> + <Italian>Fixa l'animazione</Italian> </Key> <Key ID="STR_ACE_OptionsMenu_ResetAll"> <English>Reset All</English> @@ -32,6 +33,7 @@ <Polish>Resetuj wszystko</Polish> <French>Défaut</French> <Hungarian>Minden visszaállítása</Hungarian> + <Italian>Resetta tutto</Italian> </Key> <Key ID="STR_ACE_OptionsMenu_TabColors"> <English>Colors</English> @@ -42,6 +44,7 @@ <Czech>Barvy</Czech> <Polish>Kolory</Polish> <Hungarian>Színek</Hungarian> + <Italian>Colori</Italian> </Key> <Key ID="STR_ACE_OptionsMenu_TabOptions"> <English>Options</English> @@ -64,6 +67,7 @@ <French>Valeurs</French> <German>Werte</German> <Hungarian>Értékek</Hungarian> + <Italian>Valori</Italian> </Key> <Key ID="STR_ACE_OptionsMenu_Enabled"> <English>Yes</English> @@ -98,6 +102,7 @@ <Polish>Ustawienie:</Polish> <French>Paramètres</French> <Hungarian>Opció:</Hungarian> + <Italian>Parametri:</Italian> </Key> <Key ID="STR_ACE_OptionsMenu_Export"> <English>Export</English> @@ -108,6 +113,7 @@ <Polish>Eksport</Polish> <French>Exporter</French> <Hungarian>Exportálás</Hungarian> + <Italian>Esporta</Italian> </Key> <Key ID="STR_ACE_OptionsMenu_OpenExport"> <English>Open Export Menu</English> @@ -118,6 +124,7 @@ <Polish>Otwórz menu eksportowania</Polish> <French>Ouvrir le menu d'exportation</French> <Hungarian>Exportálási menü megnyitása</Hungarian> + <Italian>Apri menù esportazione</Italian> </Key> <Key ID="STR_ACE_OptionsMenu_stringType"> <English>String input.</English> @@ -127,6 +134,7 @@ <Polish>Wpisywanie tekstu.</Polish> <French>Entrée</French> <Hungarian>String bevitel.</Hungarian> + <Italian>Stringa di unput.</Italian> </Key> <Key ID="STR_ACE_OptionsMenu_arrayType"> <English>Array. Seperate elements by using ,.</English> @@ -137,6 +145,7 @@ <French>Tableau. Séparation par ,.</French> <Czech>Tabulka. Odděl elementy použitím ,.</Czech> <Hungarian>Array. Válasszad el az elemeket vesszővel.</Hungarian> + <Italian>Array. Separa gli elementi usando ,.</Italian> </Key> <Key ID="STR_ACE_OptionsMenu_scalarType"> <English>Number</English> @@ -147,6 +156,7 @@ <Polish>Cyfra</Polish> <French>Nombre</French> <Hungarian>Szám</Hungarian> + <Italian>Numero</Italian> </Key> <Key ID="STR_ACE_optionsMenu_unknownType"> <English>Uknown input type</English> @@ -157,6 +167,7 @@ <Polish>Nieznany rodzaj danych</Polish> <French>Type d'entrée inconnue</French> <Hungarian>Ismeretlen beviteli típus</Hungarian> + <Italian>Input inserito sconosciuto</Italian> </Key> <Key ID="STR_ACE_OptionsMenu_SaveInput"> <English>Save input</English> @@ -167,6 +178,7 @@ <Polish>Zapisz dane</Polish> <French>Sauvegarder</French> <Hungarian>Bevitel elmentése</Hungarian> + <Italian>Salva input</Italian> </Key> <Key ID="STR_ACE_OptionsMenu_inClientSettings"> <English>Include Client Settings</English> @@ -177,6 +189,7 @@ <Polish>Zawrzyj ustawienia klienta</Polish> <French>Inclure paramètres client</French> <Hungarian>Kliens-beállítások melléklése</Hungarian> + <Italian>Includi i parametri del client</Italian> </Key> <Key ID="STR_ACE_OptionsMenu_exClientSettings"> <English>Exclude Client Settings</English> @@ -187,6 +200,7 @@ <Polish>Wyklucz ustawienia klienta</Polish> <French>Exclure paramètres client</French> <Hungarian>Kliens-beállítások elhagyása</Hungarian> + <Italian>Escludi i parametri del client</Italian> </Key> <Key ID="STR_ACE_OptionsMenu_settingsExported"> <English>Settings exported to clipboard</English> @@ -197,6 +211,7 @@ <Polish>Ustawienia wyeksportowano do schowka</Polish> <French>Paramètres exportés dans le presse papier</French> <Hungarian>Beállítások exportálva a vágólapba</Hungarian> + <Italian>Parametri esportati alla clipboard</Italian> </Key> </Package> </Project> From 00c0839ce5e284c3224153cf7828f7214c5eee0a Mon Sep 17 00:00:00 2001 From: Marco <ramius86@users.noreply.github.com> Date: Thu, 16 Apr 2015 10:33:15 +0200 Subject: [PATCH 035/257] Update stringtable.xml IT --- addons/nametags/stringtable.xml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/addons/nametags/stringtable.xml b/addons/nametags/stringtable.xml index 32eb35781b..4f6e2cfb93 100644 --- a/addons/nametags/stringtable.xml +++ b/addons/nametags/stringtable.xml @@ -10,6 +10,7 @@ <Polish>Pokaż imiona</Polish> <Hungarian>Nevek mutatása</Hungarian> <Russian>Показать имена</Russian> + <Italian>Mostra i nomi</Italian> </Key> <Key ID="STR_ACE_NameTags_ShowPlayerNames"> <English>Show player names</English> @@ -30,7 +31,7 @@ <German>Zeige Spielernamen nur an, wenn die Maus auf sie gerrichtet ist (benötigt Spielernamen)</German> <French>Noms uniquement sous le curseur (si noms affichés)</French> <Czech>Zobrazit jméno hráče jenom na kurzor (vyžaduje jména hráčů)</Czech> - <Italian>Mostra i nomi solo se puntati (richiede i nomi dei giocatori abilitati)</Italian> + <Italian>Mostra i nomi solo se puntati (richiede mostra nomi abilitato)</Italian> <Portuguese>Mostrar nome de jogador somente no cursor (requer nome de jogadores)</Portuguese> <Hungarian>Játékosok nevének mutatása csak a kurzoron (a nevek mutatása szükséges)</Hungarian> <Russian>Показать имена игроков только под курсором (требует имен игроков)</Russian> @@ -44,6 +45,7 @@ <Polish>Pokaż imiona graczy tylko po przytrzymaniu klawisza (wymagana opcja Pokaż imiona graczy)</Polish> <Hungarian>Játékosnevek mutatása csak gombnyomásra (a nevek mutatása szükséges)</Hungarian> <Russian>Показать имена игроков только по нажатию клавиши (требует имен игроков)</Russian> + <Italian>Mostra i nomi solo se si preme il tasto (richiede mostra nomi abilitato)</Italian> </Key> <Key ID="STR_ACE_NameTags_ShowPlayerRanks"> <English>Show player ranks (requires player names)</English> @@ -52,7 +54,7 @@ <Spanish>Mostrar rango de los jugadores (requiere Mostrar nombres de jugadores)</Spanish> <French>Grade des joueurs (si noms affichés)</French> <Czech>Zobrazit hodnosti hráčů (vyžaduje jména hráčů)</Czech> - <Italian>Mostra i gradi (richiede i nomi dei giocatori abilitati)</Italian> + <Italian>Mostra i gradi (richiede mostra nomi abilitato)</Italian> <Portuguese>Mostrar patente de jogadores (requer nome de jogadores)</Portuguese> <Hungarian>Játékosok rendfokozatának mutatása (a nevek mutatása szükséges)</Hungarian> <Russian>Показать звания игроков (требует имен игроков)</Russian> @@ -66,6 +68,7 @@ <Czech>Zobrazit info o posádce vozidla</Czech> <Russian>Показать экипаж</Russian> <Hungarian>Jármű-legénység adatainak mutatása</Hungarian> + <Italian>Mostra le informazioni sull'equipaggio del veicolo</Italian> </Key> <Key ID="STR_ACE_NameTags_ShowNamesForAI"> <English>Show name tags for AI units</English> @@ -76,6 +79,7 @@ <Polish>Wyświetl imiona jednostek AI</Polish> <French>Afficher les noms des IA</French> <Hungarian>Névcímkék mutatása MI-egységeknél</Hungarian> + <Italian>Mostra le tag nomi per le unità AI</Italian> </Key> <Key ID="STR_ACE_NameTags_ShowSoundWaves"> <English>Show SoundWaves (requires player names)</English> @@ -86,6 +90,7 @@ <Polish>Pokaż fale dźwiękowe (wymagana opcja Pokaż imiona graczy)</Polish> <French>Afficher "qui parle" (si noms affichés)</French> <Hungarian>"Hanghullámok" mutatása (a nevek mutatása szükséges)</Hungarian> + <Italian>Mostra barra movimento audio (richiede mostra nomi abilitato)</Italian> </Key> <Key ID="STR_ACE_NameTags_DefaultNametagColor"> <English>Default Nametag Color (Non Group Members)</English> @@ -96,6 +101,7 @@ <French>Couleur d'affichage par défaut (si dans aucun groupe)</French> <Czech>Standardní barva jmenovek (pro nečleny jednotky)</Czech> <Hungarian>Alap névcímke-szín (csoporton kívüli személyek)</Hungarian> + <Italian>Colore nametag di default (membri non del gruppo)</Italian> </Key> </Package> </Project> From 58d7ff792b4a3295d531bc12304f32ad940975df Mon Sep 17 00:00:00 2001 From: Lex Rivera <me@lex.io> Date: Thu, 16 Apr 2015 13:28:50 +0300 Subject: [PATCH 036/257] Add link to issue reporting format --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index dd464966f2..f56811dbd8 100644 --- a/README.md +++ b/README.md @@ -37,10 +37,11 @@ The mod is **built modularly** — almost any PBO can be removed, thus a team ca #### Guides & How-Tos If you installed ACE3, but have trouble understanding how it all works, or where to start — see [Getting Started](https://github.com/acemod/ACE3/blob/master/documentation/user/getting-started.md). + #### Contributing If you want to help put with the ongoing development, you can do so by looking for possible bugs or by contributing new features. To contribute something to ACE, simply fork this repository and submit your pull requests for review by other collaborators. In the process, please add yourself to the author array of any .pbo you will be editing and the AUTHORS.txt file; including a valid email address. -To report a bug, propose a feature, or suggest a change to the existing one — please, use our [Issue Tracker](https://github.com/acemod/ACE3/issues). +To report a bug, propose a feature, or suggest a change to the existing one — please, use our [Issue Tracker](https://github.com/acemod/ACE3/issues). See [this link](http://ace3mod.com/wiki/user/how-to-report-an-issue.html) for details. #### Testing & Building If you want to help us test the latest development changes, feel free to download our master branch, using either git — if familiar with the process — or directly, by following [this link](https://github.com/acemod/ACE3/archive/master.zip). From aa5972a03a2cf124c6a706adf11a4d318c16725b Mon Sep 17 00:00:00 2001 From: Lex Rivera <me@lex.io> Date: Thu, 16 Apr 2015 13:30:09 +0300 Subject: [PATCH 037/257] Damn you, web editor --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index f56811dbd8..3ec6fe0683 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,6 @@ The mod is **built modularly** — almost any PBO can be removed, thus a team ca #### Guides & How-Tos If you installed ACE3, but have trouble understanding how it all works, or where to start — see [Getting Started](https://github.com/acemod/ACE3/blob/master/documentation/user/getting-started.md). - #### Contributing If you want to help put with the ongoing development, you can do so by looking for possible bugs or by contributing new features. To contribute something to ACE, simply fork this repository and submit your pull requests for review by other collaborators. In the process, please add yourself to the author array of any .pbo you will be editing and the AUTHORS.txt file; including a valid email address. From 6d93fe45a68a0cb21aa5d760e05da34982755afd Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Thu, 16 Apr 2015 09:35:21 -0700 Subject: [PATCH 038/257] Guidance handoff to guiding unit/laser shooter. This needs LOBL vs. LOAL capability. --- addons/missileguidance/XEH_post_init.sqf | 1 + addons/missileguidance/XEH_pre_init.sqf | 3 ++ .../functions/fnc_doHandoff.sqf | 4 ++ .../functions/fnc_handleHandoff.sqf | 6 +++ .../missileguidance/functions/fnc_onFired.sqf | 50 +++++++++++-------- tools/github_privates_bot.py | 22 ++++++++ 6 files changed, 66 insertions(+), 20 deletions(-) create mode 100644 addons/missileguidance/functions/fnc_doHandoff.sqf create mode 100644 addons/missileguidance/functions/fnc_handleHandoff.sqf create mode 100644 tools/github_privates_bot.py diff --git a/addons/missileguidance/XEH_post_init.sqf b/addons/missileguidance/XEH_post_init.sqf index dc30361926..deaeef669d 100644 --- a/addons/missileguidance/XEH_post_init.sqf +++ b/addons/missileguidance/XEH_post_init.sqf @@ -1,2 +1,3 @@ #include "script_component.hpp" +[QGVAR(handoff), {_this call FUNC(handleHandoff)}] call EFUNC(common,addEventHandler); diff --git a/addons/missileguidance/XEH_pre_init.sqf b/addons/missileguidance/XEH_pre_init.sqf index d19b8475c9..08219e02f0 100644 --- a/addons/missileguidance/XEH_pre_init.sqf +++ b/addons/missileguidance/XEH_pre_init.sqf @@ -14,6 +14,9 @@ PREP(guidancePFH); PREP(doAttackProfile); PREP(doSeekerSearch); +PREP(doHandoff); +PREP(handleHandoff); + // Attack Profiles PREP(attackProfile_LIN); PREP(attackProfile_DIR); diff --git a/addons/missileguidance/functions/fnc_doHandoff.sqf b/addons/missileguidance/functions/fnc_doHandoff.sqf new file mode 100644 index 0000000000..d99998c8c4 --- /dev/null +++ b/addons/missileguidance/functions/fnc_doHandoff.sqf @@ -0,0 +1,4 @@ +#include "script_component.hpp" +PARAMS_2(_target,_args); + +[QGVAR(handoff), [_target, _args]] call EFUNC(common,globalEvent); \ No newline at end of file diff --git a/addons/missileguidance/functions/fnc_handleHandoff.sqf b/addons/missileguidance/functions/fnc_handleHandoff.sqf new file mode 100644 index 0000000000..2f1dfac8e7 --- /dev/null +++ b/addons/missileguidance/functions/fnc_handleHandoff.sqf @@ -0,0 +1,6 @@ +#include "script_component.hpp" +PARAMS_2(_target,_args); + +if(!local _target) exitWith {}; + +[FUNC(guidancePFH), 0, _args] call cba_fnc_addPerFrameHandler; \ No newline at end of file diff --git a/addons/missileguidance/functions/fnc_onFired.sqf b/addons/missileguidance/functions/fnc_onFired.sqf index dd96821692..e36742bce5 100644 --- a/addons/missileguidance/functions/fnc_onFired.sqf +++ b/addons/missileguidance/functions/fnc_onFired.sqf @@ -60,27 +60,37 @@ if(isNil "_target") then { }; TRACE_4("Beginning ACE guidance system",_target,_ammo,_seekerType,_attackProfile); -[FUNC(guidancePFH), 0, [_this, - [_shooter, - [_target, _targetPos, _launchPos], - _seekerType, - _attackProfile, - _lockMode - ], - [ - getNumber ( _config >> "minDeflection" ), - getNumber ( _config >> "maxDeflection" ), - getNumber ( _config >> "incDeflection" ) - ], - [ - getNumber ( _config >> "seekerAngle" ), - getNumber ( _config >> "seekerAccuracy" ), - getNumber ( _config >> "seekerMaxRange" ) - ], - [ diag_tickTime, [], [] ] - ] -] call cba_fnc_addPerFrameHandler; +_args = [_this, + [_shooter, + [_target, _targetPos, _launchPos], + _seekerType, + _attackProfile, + _lockMode + ], + [ + getNumber ( _config >> "minDeflection" ), + getNumber ( _config >> "maxDeflection" ), + getNumber ( _config >> "incDeflection" ) + ], + [ + getNumber ( _config >> "seekerAngle" ), + getNumber ( _config >> "seekerAccuracy" ), + getNumber ( _config >> "seekerMaxRange" ) + ], + [ diag_tickTime, [], [] ] + ]; + +// Hand off to the guiding unit. We just use local player so local PFH fires for now +// Laser code needs to give us a shooter for LOBL, or the seeker unit needs to be able to shift locality +// Based on its homing laser +// Lasers need to be handled in a special LOAL/LOBL case +_guidingUnit = ACE_player; +if(local _guidingUnit) then { + [FUNC(guidancePFH), 0, _args ] call cba_fnc_addPerFrameHandler; +} else { + [QGVAR(handoff), [_guidingUnit, _args] ] call FUNC(doHandoff); +}; /* Clears locking settings (vehicle _shooter) setVariable [QGVAR(target), nil]; (vehicle _shooter) setVariable [QGVAR(seekerType), nil]; diff --git a/tools/github_privates_bot.py b/tools/github_privates_bot.py new file mode 100644 index 0000000000..4ef04eb33c --- /dev/null +++ b/tools/github_privates_bot.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python3 + +import os +import argparse + +from pygithub3 import Github + +def main(): + gh = Github(user='acemod', repo='ACE3') + + pull_requests = gh.pull_requests.list().all() + + for request in pull_requests: + files = gh.pull_requests.list_files(request.number).all() + + for file in files: + # print file.filename + if '.sqf' in file.filename: + print file + +if __name__ == "__main__": + main() \ No newline at end of file From aeffc5585911139cfa4aec51445ecc0a012ec7e5 Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Thu, 16 Apr 2015 18:52:48 +0200 Subject: [PATCH 039/257] Added missing privates --- addons/winddeflection/functions/fnc_updateTrajectoryPFH.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/winddeflection/functions/fnc_updateTrajectoryPFH.sqf b/addons/winddeflection/functions/fnc_updateTrajectoryPFH.sqf index 42bac3eac8..f5f1d3861e 100644 --- a/addons/winddeflection/functions/fnc_updateTrajectoryPFH.sqf +++ b/addons/winddeflection/functions/fnc_updateTrajectoryPFH.sqf @@ -16,7 +16,7 @@ #include "script_component.hpp" [{ - private ["_bullet", "_airFriction", "_args", "_deltaT", "_bulletVelocity", "_bulletSpeed", "_trueVelocity", "_trueVelocity", "_dragRef", "_drag", "_accelRef", "_accel"]; + private ["_args", "_bullet", "_airFriction", "_time", "_deltaT", "_bulletVelocity", "_bulletSpeed", "_trueVelocity", "_trueSpeed", "_dragRef", "_drag", "_accelRef", "_accel"]; _args = _this select 0; _bullet = _args select 0; From 9db256ad8d80a43374056490b2eabbd9b7258d89 Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Thu, 16 Apr 2015 09:54:52 -0700 Subject: [PATCH 040/257] ignore preceeding numbers --- tools/search_privates.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/search_privates.py b/tools/search_privates.py index 55a6dfc791..9cc55fbdcc 100644 --- a/tools/search_privates.py +++ b/tools/search_privates.py @@ -53,7 +53,7 @@ def check_privates(filepath): # Regex search privates - srch = re.compile('(?<![_a-zA-Z])(_[a-zA-Z]*?)[ ,\}\]\)";]') + srch = re.compile('(?<![_a-zA-Z0-9])(_[a-zA-Z]*?)[ ,\}\]\)";]') priv_use = srch.findall(content) priv_use = sorted(set(priv_use)) From 668888de818f4416a2e968d508c049f8a369680f Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Thu, 16 Apr 2015 19:00:37 +0200 Subject: [PATCH 041/257] Fixed constant name not following the coding-guideline --- addons/atragmx/functions/fnc_create_dialog.sqf | 2 +- addons/atragmx/functions/fnc_show_gun_list.sqf | 2 +- .../atragmx/functions/fnc_show_range_card_setup.sqf | 2 +- .../functions/fnc_show_target_range_assist.sqf | 2 +- .../functions/fnc_show_target_speed_assist.sqf | 2 +- .../functions/fnc_target_speed_assist_timer.sqf | 2 +- addons/atragmx/functions/fnc_toggle_range_card.sqf | 2 +- .../functions/fnc_update_target_selection.sqf | 12 ++++++------ .../atragmx/functions/fnc_update_unit_selection.sqf | 8 ++++---- addons/atragmx/script_component.hpp | 2 +- 10 files changed, 18 insertions(+), 18 deletions(-) diff --git a/addons/atragmx/functions/fnc_create_dialog.sqf b/addons/atragmx/functions/fnc_create_dialog.sqf index 8dc0f3e34f..73945a4030 100644 --- a/addons/atragmx/functions/fnc_create_dialog.sqf +++ b/addons/atragmx/functions/fnc_create_dialog.sqf @@ -29,7 +29,7 @@ GVAR(showAddNewGun) call FUNC(show_add_new_gun); GVAR(showGunList) call FUNC(show_gun_list); GVAR(showRangeCard) call FUNC(show_range_card); if (GVAR(showRangeCard)) then { - ctrlSetFocus (_dsp displayCtrl 5001); + ctrlSetFocus (__DSP displayCtrl 5001); [] call FUNC(update_range_card); }; GVAR(showRangeCardSetup) call FUNC(show_range_card_setup); diff --git a/addons/atragmx/functions/fnc_show_gun_list.sqf b/addons/atragmx/functions/fnc_show_gun_list.sqf index e51aaba13b..565da71ce6 100644 --- a/addons/atragmx/functions/fnc_show_gun_list.sqf +++ b/addons/atragmx/functions/fnc_show_gun_list.sqf @@ -20,7 +20,7 @@ GVAR(showGunList) = _this; {ctrlShow [_x, _this]} forEach [6000, 6001, 6002, 6003, 6004, 6005, 6006, 6007]; if (_this) then { - ctrlSetFocus (_dsp displayCtrl 6002); + ctrlSetFocus (__DSP displayCtrl 6002); lbSetCurSel [6000, GVAR(currentGun)]; }; diff --git a/addons/atragmx/functions/fnc_show_range_card_setup.sqf b/addons/atragmx/functions/fnc_show_range_card_setup.sqf index e9afe41cc5..98e5f57998 100644 --- a/addons/atragmx/functions/fnc_show_range_card_setup.sqf +++ b/addons/atragmx/functions/fnc_show_range_card_setup.sqf @@ -20,7 +20,7 @@ GVAR(showRangeCardSetup) = _this; {ctrlShow [_x, _this]} forEach [10000, 10001, 10002, 10003, 10004, 10005, 10006, 10007, 10008, 10009]; if (_this) then { - ctrlSetFocus (_dsp displayCtrl 10006); + ctrlSetFocus (__DSP displayCtrl 10006); ctrlSetText [10003, Str(Round(GVAR(rangeCardStartRange)))]; ctrlSetText [10004, Str(Round(GVAR(rangeCardEndRange)))]; diff --git a/addons/atragmx/functions/fnc_show_target_range_assist.sqf b/addons/atragmx/functions/fnc_show_target_range_assist.sqf index e3ca0a2626..f7b973876f 100644 --- a/addons/atragmx/functions/fnc_show_target_range_assist.sqf +++ b/addons/atragmx/functions/fnc_show_target_range_assist.sqf @@ -20,7 +20,7 @@ GVAR(showTargetRangeAssist) = _this; {ctrlShow [_x, _this]} forEach [7000, 7001, 7002, 7003, 7004, 7005, 7006, 7007, 7008, 7009, 7010, 7011, 7012, 7013, 7014, 7015, 7016, 7017, 7018, 7019, 7020]; if (_this) then { - ctrlSetFocus (_dsp displayCtrl 7018); + ctrlSetFocus (__DSP displayCtrl 7018); ctrlSetText [7012, Str(parseNumber(ctrlText 320))]; ctrlSetText [7013, Str(parseNumber(ctrlText 340))]; diff --git a/addons/atragmx/functions/fnc_show_target_speed_assist.sqf b/addons/atragmx/functions/fnc_show_target_speed_assist.sqf index 90425e26db..43b9afe470 100644 --- a/addons/atragmx/functions/fnc_show_target_speed_assist.sqf +++ b/addons/atragmx/functions/fnc_show_target_speed_assist.sqf @@ -20,7 +20,7 @@ GVAR(showTargetSpeedAssist) = _this; {ctrlShow [_x, _this]} forEach [8000, 8001, 8002, 8003, 8004, 8005, 8006, 8007, 8008, 8009, 8010, 8011, 8012, 8013, 8014, 8015]; if (_this) then { - ctrlSetFocus (_dsp displayCtrl 8012); + ctrlSetFocus (__DSP displayCtrl 8012); ctrlSetText [8004, Str(Round((GVAR(targetRange) select GVAR(currentTarget))))]; diff --git a/addons/atragmx/functions/fnc_target_speed_assist_timer.sqf b/addons/atragmx/functions/fnc_target_speed_assist_timer.sqf index d8414ba692..da4b68a7c7 100644 --- a/addons/atragmx/functions/fnc_target_speed_assist_timer.sqf +++ b/addons/atragmx/functions/fnc_target_speed_assist_timer.sqf @@ -20,7 +20,7 @@ if !(ctrlVisible 9000) then { false call FUNC(show_target_speed_assist); true call FUNC(show_target_speed_assist_timer); - ctrlSetFocus (_dsp displayCtrl 9002); + ctrlSetFocus (__DSP displayCtrl 9002); [{ private ["_args", "_startTime"]; diff --git a/addons/atragmx/functions/fnc_toggle_range_card.sqf b/addons/atragmx/functions/fnc_toggle_range_card.sqf index 6a75ea5445..e5d5cb0269 100644 --- a/addons/atragmx/functions/fnc_toggle_range_card.sqf +++ b/addons/atragmx/functions/fnc_toggle_range_card.sqf @@ -24,7 +24,7 @@ if (ctrlVisible 5006) then false call FUNC(show_main_page); true call FUNC(show_range_card); - ctrlSetFocus (_dsp displayCtrl 5001); + ctrlSetFocus (__DSP displayCtrl 5001); [] call FUNC(calculate_range_card); [] call FUNC(update_range_card); diff --git a/addons/atragmx/functions/fnc_update_target_selection.sqf b/addons/atragmx/functions/fnc_update_target_selection.sqf index 476c22d658..2a29d05fb1 100644 --- a/addons/atragmx/functions/fnc_update_target_selection.sqf +++ b/addons/atragmx/functions/fnc_update_target_selection.sqf @@ -15,13 +15,13 @@ */ #include "script_component.hpp" -(_dsp displayCtrl 500) ctrlEnable true; -(_dsp displayCtrl 501) ctrlEnable true; -(_dsp displayCtrl 502) ctrlEnable true; -(_dsp displayCtrl 503) ctrlEnable true; +(__DSP displayCtrl 500) ctrlEnable true; +(__DSP displayCtrl 501) ctrlEnable true; +(__DSP displayCtrl 502) ctrlEnable true; +(__DSP displayCtrl 503) ctrlEnable true; -(_dsp displayCtrl 500 + GVAR(currentTarget)) ctrlEnable false; +(__DSP displayCtrl 500 + GVAR(currentTarget)) ctrlEnable false; -ctrlSetFocus (_dsp displayCtrl 3000); +ctrlSetFocus (__DSP displayCtrl 3000); [] call FUNC(update_unit_selection); diff --git a/addons/atragmx/functions/fnc_update_unit_selection.sqf b/addons/atragmx/functions/fnc_update_unit_selection.sqf index f6a51c5cfc..5468d2d0fc 100644 --- a/addons/atragmx/functions/fnc_update_unit_selection.sqf +++ b/addons/atragmx/functions/fnc_update_unit_selection.sqf @@ -15,11 +15,11 @@ */ #include "script_component.hpp" -(_dsp displayCtrl 600) ctrlEnable true; -(_dsp displayCtrl 601) ctrlEnable true; -(_dsp displayCtrl 602) ctrlEnable true; +(__DSP displayCtrl 600) ctrlEnable true; +(__DSP displayCtrl 601) ctrlEnable true; +(__DSP displayCtrl 602) ctrlEnable true; -(_dsp displayCtrl 600 + GVAR(currentUnit)) ctrlEnable false; +(__DSP displayCtrl 600 + GVAR(currentUnit)) ctrlEnable false; [] call FUNC(update_gun); [] call FUNC(update_atmosphere); diff --git a/addons/atragmx/script_component.hpp b/addons/atragmx/script_component.hpp index 014524c6dd..60b3083a96 100644 --- a/addons/atragmx/script_component.hpp +++ b/addons/atragmx/script_component.hpp @@ -11,4 +11,4 @@ #include "\z\ace\addons\main\script_macros.hpp" -#define _dsp (uiNamespace getVariable "ATragMX_Display") +#define __DSP (uiNamespace getVariable "ATragMX_Display") From 6a942ac8209cce075fcb7284e6c8eb8e5d5c8b47 Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Thu, 16 Apr 2015 10:10:24 -0700 Subject: [PATCH 042/257] Fixed: ACE_Fake**** Was showing in arsenal. Fixes #670 --- addons/common/CfgMagazines.hpp | 1 + addons/common/CfgWeapons.hpp | 2 ++ 2 files changed, 3 insertions(+) diff --git a/addons/common/CfgMagazines.hpp b/addons/common/CfgMagazines.hpp index 815ab6db9f..465ea57f78 100644 --- a/addons/common/CfgMagazines.hpp +++ b/addons/common/CfgMagazines.hpp @@ -2,6 +2,7 @@ class CfgMagazines { class CA_Magazine; class ACE_FakeMagazine: CA_Magazine { + scopeCurator = 1; descriptionShort = ""; displayName = ""; displayNameShort = ""; diff --git a/addons/common/CfgWeapons.hpp b/addons/common/CfgWeapons.hpp index c2d1532f40..cf8c06798e 100644 --- a/addons/common/CfgWeapons.hpp +++ b/addons/common/CfgWeapons.hpp @@ -14,6 +14,8 @@ class CfgWeapons { class ACE_FakePrimaryWeapon: Rifle_Base_F { scope = 2; + scopeCurator = 1; + displayName = ""; model = "\A3\Weapons_f\empty"; picture = ""; From e06fd7350e7980da734f3452ab4603be74750d97 Mon Sep 17 00:00:00 2001 From: PabstMirror <elephantisaterriblemascot@gmail.com> Date: Thu, 16 Apr 2015 12:10:40 -0500 Subject: [PATCH 043/257] DEFAULT_PARAM KEY_PARAM private check --- tools/search_privates.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/search_privates.py b/tools/search_privates.py index 9cc55fbdcc..404c56f4db 100644 --- a/tools/search_privates.py +++ b/tools/search_privates.py @@ -21,7 +21,7 @@ def get_private_declare(content): priv_split = sorted(set(priv_split)) priv_declared += priv_split; - srch = re.compile('PARAMS_[0-9].*|EXPLODE_[0-9]_PVT.*') + srch = re.compile('PARAMS_[0-9].*|EXPLODE_[0-9]_PVT.*|DEFAULT_PARAM.*|KEY_PARAM.*') priv_srch_declared = srch.findall(content) priv_srch_declared = sorted(set(priv_srch_declared)) From 638433614c8778ec7b9b80b269ec6829376fa130 Mon Sep 17 00:00:00 2001 From: PabstMirror <elephantisaterriblemascot@gmail.com> Date: Thu, 16 Apr 2015 12:36:12 -0500 Subject: [PATCH 044/257] Some missing private defines. --- addons/attach/functions/fnc_attach.sqf | 1 + addons/attach/functions/fnc_canAttach.sqf | 2 +- addons/attach/functions/fnc_detach.sqf | 2 +- addons/attach/functions/fnc_getChildrenAttachActions.sqf | 1 + addons/backpacks/functions/fnc_backpackOpened.sqf | 6 +----- addons/captives/XEH_postInit.sqf | 1 + addons/captives/functions/fnc_doLoadCaptive.sqf | 1 + addons/captives/functions/fnc_moduleSurrender.sqf | 1 + addons/captives/functions/fnc_setHandcuffed.sqf | 2 ++ addons/captives/functions/fnc_setSurrendered.sqf | 2 ++ addons/disarming/functions/fnc_canBeDisarmed.sqf | 2 ++ addons/disarming/functions/fnc_disarmDropItems.sqf | 5 +++++ addons/disarming/functions/fnc_eventTargetStart.sqf | 2 ++ addons/disarming/functions/fnc_getAllGearUnit.sqf | 2 ++ addons/disarming/functions/fnc_openDisarmDialog.sqf | 3 +++ addons/disarming/functions/fnc_showItemsInListbox.sqf | 2 +- addons/disarming/functions/fnc_verifyMagazinesMoved.sqf | 2 +- addons/disposable/XEH_postInitClient.sqf | 5 ++--- 18 files changed, 30 insertions(+), 12 deletions(-) diff --git a/addons/attach/functions/fnc_attach.sqf b/addons/attach/functions/fnc_attach.sqf index 3bb54eee16..45b1c0a336 100644 --- a/addons/attach/functions/fnc_attach.sqf +++ b/addons/attach/functions/fnc_attach.sqf @@ -62,6 +62,7 @@ if (_unit == _attachToVehicle) then { //Self Attachment _actionID = _unit addAction [format ["<t color='#FF0000'>%1</t>", localize "STR_ACE_Attach_CancelAction"], {GVAR(placeAction) = 0}]; [{ + private "_startingPosition"; PARAMS_2(_args,_pfID); EXPLODE_7_PVT(_args,_unit,_attachToVehicle,_itemClassname,_itemVehClass,_tempObject,_onAtachText,_actionID); diff --git a/addons/attach/functions/fnc_canAttach.sqf b/addons/attach/functions/fnc_canAttach.sqf index d0930dc069..18071092d5 100644 --- a/addons/attach/functions/fnc_canAttach.sqf +++ b/addons/attach/functions/fnc_canAttach.sqf @@ -19,7 +19,7 @@ PARAMS_3(_attachToVehicle,_player,_args); -private ["_itemName", "_attachLimit", "_attachedObjects"]; +private ["_itemName", "_attachLimit", "_attachedObjects","_playerPos"]; _itemName = [_args, 0, ""] call CBA_fnc_defaultParam; _attachLimit = [6, 1] select (_player == _attachToVehicle); diff --git a/addons/attach/functions/fnc_detach.sqf b/addons/attach/functions/fnc_detach.sqf index 99ac646013..a56936301d 100644 --- a/addons/attach/functions/fnc_detach.sqf +++ b/addons/attach/functions/fnc_detach.sqf @@ -18,7 +18,7 @@ PARAMS_2(_attachToVehicle,_unit); -private ["_attachedObjects", "_attachedItems"]; +private ["_attachedObjects", "_attachedItems", "_itemDisplayName"]; _attachedObjects = _attachToVehicle getVariable [QGVAR(Objects), []]; _attachedItems = _attachToVehicle getVariable [QGVAR(ItemNames), []]; diff --git a/addons/attach/functions/fnc_getChildrenAttachActions.sqf b/addons/attach/functions/fnc_getChildrenAttachActions.sqf index 3594e10bd6..fb432146be 100644 --- a/addons/attach/functions/fnc_getChildrenAttachActions.sqf +++ b/addons/attach/functions/fnc_getChildrenAttachActions.sqf @@ -17,6 +17,7 @@ */ #include "script_component.hpp" +private ["_listed", "_actions", "_item", "_displayName", "_picture", "_action"]; PARAMS_2(_target,_player); _listed = []; diff --git a/addons/backpacks/functions/fnc_backpackOpened.sqf b/addons/backpacks/functions/fnc_backpackOpened.sqf index 1894d68f23..3f5cf53994 100644 --- a/addons/backpacks/functions/fnc_backpackOpened.sqf +++ b/addons/backpacks/functions/fnc_backpackOpened.sqf @@ -13,11 +13,7 @@ */ #include "script_component.hpp" -private ["_unit", "_target"]; - -_unit = _this select 0; -_target = _this select 1; -_backpack = _this select 2; +PARAMS_3(_unit,_target,_backpack); // do cam shake if the target is the player if ([_target] call EFUNC(common,isPlayer)) then { diff --git a/addons/captives/XEH_postInit.sqf b/addons/captives/XEH_postInit.sqf index 651edbcf86..f91f24025e 100644 --- a/addons/captives/XEH_postInit.sqf +++ b/addons/captives/XEH_postInit.sqf @@ -7,6 +7,7 @@ if (isServer) then { addMissionEventHandler ["HandleDisconnect", { PARAMS_1(_disconnectedPlayer); + private "_escortedUnit"; _escortedUnit = _disconnectedPlayer getVariable [QGVAR(escortedUnit), objNull]; if ((!isNull _escortedUnit) && {(attachedTo _escortedUnit) == _disconnectedPlayer}) then { detach _escortedUnit; diff --git a/addons/captives/functions/fnc_doLoadCaptive.sqf b/addons/captives/functions/fnc_doLoadCaptive.sqf index 9fd65a130d..97ecd98a0a 100644 --- a/addons/captives/functions/fnc_doLoadCaptive.sqf +++ b/addons/captives/functions/fnc_doLoadCaptive.sqf @@ -18,6 +18,7 @@ #include "script_component.hpp" PARAMS_3(_unit,_target,_vehicle); +private "_objects"; if (isNull _target) then { _objects = attachedObjects _unit; diff --git a/addons/captives/functions/fnc_moduleSurrender.sqf b/addons/captives/functions/fnc_moduleSurrender.sqf index 0506b0cc17..bf0e04cd6a 100644 --- a/addons/captives/functions/fnc_moduleSurrender.sqf +++ b/addons/captives/functions/fnc_moduleSurrender.sqf @@ -18,6 +18,7 @@ #include "script_component.hpp" PARAMS_3(_logic,_units,_activated); +private ["_bisMouseOver", "_mouseOverObject"]; if (!_activated) exitWith {}; diff --git a/addons/captives/functions/fnc_setHandcuffed.sqf b/addons/captives/functions/fnc_setHandcuffed.sqf index 5f134ab03b..bd141988bb 100644 --- a/addons/captives/functions/fnc_setHandcuffed.sqf +++ b/addons/captives/functions/fnc_setHandcuffed.sqf @@ -50,6 +50,7 @@ if (_state) then { //Adds an animation changed eh //If we get a change in animation then redo the animation (handles people vaulting to break the animation chain) + private "_animChangedEHID"; _animChangedEHID = _unit addEventHandler ["AnimChanged", { PARAMS_2(_unit,_newAnimation); if ((_newAnimation != "ACE_AmovPercMstpSsurWnonDnon") && {!(_unit getVariable ["ACE_isUnconscious", false])}) then { @@ -66,6 +67,7 @@ if (_state) then { [_unit, QGVAR(Handcuffed), false] call EFUNC(common,setCaptivityStatus); //remove AnimChanged EH + private "_animChangedEHID"; _animChangedEHID = _unit getVariable [QGVAR(handcuffAnimEHID), -1]; _unit removeEventHandler ["AnimChanged", _animChangedEHID]; _unit setVariable [QGVAR(handcuffAnimEHID), -1]; diff --git a/addons/captives/functions/fnc_setSurrendered.sqf b/addons/captives/functions/fnc_setSurrendered.sqf index d774e7f6e0..22de70921d 100644 --- a/addons/captives/functions/fnc_setSurrendered.sqf +++ b/addons/captives/functions/fnc_setSurrendered.sqf @@ -48,6 +48,7 @@ if (_state) then { if (_unit getVariable [QGVAR(isSurrendering), false] && {(vehicle _unit) == _unit}) then { //Adds an animation changed eh //If we get a change in animation then redo the animation (handles people vaulting to break the animation chain) + private "_animChangedEHID"; _animChangedEHID = _unit addEventHandler ["AnimChanged", { PARAMS_2(_unit,_newAnimation); if ((_newAnimation != "ACE_AmovPercMstpSsurWnonDnon") && {!(_unit getVariable ["ACE_isUnconscious", false])}) then { @@ -63,6 +64,7 @@ if (_state) then { [_unit, QGVAR(Surrendered), false] call EFUNC(common,setCaptivityStatus); //remove AnimChanged EH + private "_animChangedEHID"; _animChangedEHID = _unit getVariable [QGVAR(surrenderAnimEHID), -1]; _unit removeEventHandler ["AnimChanged", _animChangedEHID]; _unit setVariable [QGVAR(surrenderAnimEHID), -1]; diff --git a/addons/disarming/functions/fnc_canBeDisarmed.sqf b/addons/disarming/functions/fnc_canBeDisarmed.sqf index 04171a900d..25ec884919 100644 --- a/addons/disarming/functions/fnc_canBeDisarmed.sqf +++ b/addons/disarming/functions/fnc_canBeDisarmed.sqf @@ -17,6 +17,8 @@ PARAMS_1(_target); +private ["_animationStateCfgMoves", "_putDownAnim"]; + //Check animationState for putDown anim //This ensures the unit doesn't have to actualy do any animation to drop something //This should always be true for the 3 possible status effects that allow disarming diff --git a/addons/disarming/functions/fnc_disarmDropItems.sqf b/addons/disarming/functions/fnc_disarmDropItems.sqf index 24ab96a2cf..2cb3e89b5d 100644 --- a/addons/disarming/functions/fnc_disarmDropItems.sqf +++ b/addons/disarming/functions/fnc_disarmDropItems.sqf @@ -20,6 +20,9 @@ #define TIME_MAX_WAIT 5 +private ["_fncSumArray", "_return", "_holder", "_dropPos", "_targetMagazinesStart", "_holderMagazinesStart", "_xClassname", "_xAmmo", "_targetMagazinesEnd", "_holderMagazinesEnd", "_holderItemsStart", "_targetItemsStart", "_addToCrateClassnames", "_addToCrateCount", "_index", "_holderItemsEnd", "_targetItemsEnd", "_holderIsEmpty"]; + + PARAMS_3(_caller,_target,_listOfItemsToRemove); DEFAULT_PARAM(3,_doNotDropAmmo,false); //By default units drop all weapon mags when dropping a weapon @@ -154,6 +157,8 @@ if (_holderIsEmpty) then { //Start the PFEH to do the actions (which could take >1 frame) [{ + private ["_needToRemoveWeapon", "_needToRemoveMagazines", "_needToRemoveBackpack", "_needToRemoveVest", "_needToRemoveUniform", "_error", "_magsToPickup", "_index", "_magazinesInHolder"]; + PARAMS_2(_args,_pfID); EXPLODE_8_PVT(_args,_caller,_target,_listOfItemsToRemove,_holder,_holderIsEmpty,_maxWaitTime,_doNotDropAmmo,_startingMagazines); diff --git a/addons/disarming/functions/fnc_eventTargetStart.sqf b/addons/disarming/functions/fnc_eventTargetStart.sqf index c91f717e2a..316ec2b656 100644 --- a/addons/disarming/functions/fnc_eventTargetStart.sqf +++ b/addons/disarming/functions/fnc_eventTargetStart.sqf @@ -20,6 +20,8 @@ PARAMS_3(_caller,_target,_listOfObjectsToRemove); +private "_itemsToAdd"; + _itemsToAdd = []; { if (_x == (uniform _target)) then { diff --git a/addons/disarming/functions/fnc_getAllGearUnit.sqf b/addons/disarming/functions/fnc_getAllGearUnit.sqf index d07f40c972..a319c006ee 100644 --- a/addons/disarming/functions/fnc_getAllGearUnit.sqf +++ b/addons/disarming/functions/fnc_getAllGearUnit.sqf @@ -17,6 +17,8 @@ PARAMS_1(_target); +private ["_allItems", "_classnamesCount", "_index", "_uniqueClassnames"]; + _allItems = ((weapons _target) + (magazines _target) + (items _target) + (assignedItems _target)); if ((backpack _target) != "") then { diff --git a/addons/disarming/functions/fnc_openDisarmDialog.sqf b/addons/disarming/functions/fnc_openDisarmDialog.sqf index 6da123b831..832f32ced5 100644 --- a/addons/disarming/functions/fnc_openDisarmDialog.sqf +++ b/addons/disarming/functions/fnc_openDisarmDialog.sqf @@ -28,6 +28,7 @@ ] PARAMS_2(_caller,_target); +private "_display"; //Sanity Checks if (_caller != ACE_player) exitwith {ERROR("Player isn't caller?");}; @@ -59,6 +60,7 @@ GVAR(disarmTarget) = _target; //Setup PFEH [{ + private ["_groundContainer", "_targetContainer", "_playerName", "_rankPicture", "_rankIndex", "_targetUniqueItems", "_holderUniqueItems"]; disableSerialization; EXPLODE_2_PVT(_this,_args,_pfID); EXPLODE_3_PVT(_args,_player,_target,_display); @@ -71,6 +73,7 @@ GVAR(disarmTarget) = _target; GVAR(disarmTarget) = objNull; if (!isNull _display) then {closeDialog 0;}; //close dialog if still open } else { + _groundContainer = _display displayCtrl 632; _targetContainer = _display displayCtrl 633; _playerName = _display displayCtrl 111; diff --git a/addons/disarming/functions/fnc_showItemsInListbox.sqf b/addons/disarming/functions/fnc_showItemsInListbox.sqf index e040233b82..5c809de4a2 100644 --- a/addons/disarming/functions/fnc_showItemsInListbox.sqf +++ b/addons/disarming/functions/fnc_showItemsInListbox.sqf @@ -19,7 +19,7 @@ disableSerialization; PARAMS_2(_listBoxCtrl,_itemsCountArray); -private "_classname"; +private ["_classname", "_count", "_displayName", "_picture"]; { _displayName = ""; diff --git a/addons/disarming/functions/fnc_verifyMagazinesMoved.sqf b/addons/disarming/functions/fnc_verifyMagazinesMoved.sqf index 779a5e39ba..e1753f390a 100644 --- a/addons/disarming/functions/fnc_verifyMagazinesMoved.sqf +++ b/addons/disarming/functions/fnc_verifyMagazinesMoved.sqf @@ -20,7 +20,7 @@ */ #include "script_component.hpp" -private ["_problem", "_beginingArray"]; +private ["_problem", "_beginingArray", "_index"]; PARAMS_4(_startA,_endA,_startB,_endB); diff --git a/addons/disposable/XEH_postInitClient.sqf b/addons/disposable/XEH_postInitClient.sqf index 1fe598137f..c20dfa886b 100644 --- a/addons/disposable/XEH_postInitClient.sqf +++ b/addons/disposable/XEH_postInitClient.sqf @@ -5,7 +5,6 @@ #include "script_component.hpp" ["inventoryDisplayLoaded",{ - _player = ACE_player; - [_player] call FUNC(takeLoadedATWeapon); - [_player, (_this select 0)] call FUNC(updateInventoryDisplay); + [ACE_player] call FUNC(takeLoadedATWeapon); + [ACE_player, (_this select 0)] call FUNC(updateInventoryDisplay); }] call EFUNC(common,addEventHandler); \ No newline at end of file From 3d14b171a6a671af160f3cf0d296c3db72546840 Mon Sep 17 00:00:00 2001 From: KoffeinFlummi <koffeinflummi@gmail.com> Date: Thu, 16 Apr 2015 19:38:07 +0200 Subject: [PATCH 045/257] Make make.py itself support 32-&64-bit systems ... ... because having two different files is dumb. --- tools/make.py | 15 +- tools/make64.py | 837 ------------------------------------------------ 2 files changed, 12 insertions(+), 840 deletions(-) delete mode 100644 tools/make64.py diff --git a/tools/make.py b/tools/make.py index bd27f893f5..29cf3f1956 100644 --- a/tools/make.py +++ b/tools/make.py @@ -200,7 +200,10 @@ def find_depbo_tools(regKey): reg = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE) try: - k = winreg.OpenKey(reg, r"Software\Mikero\pboProject") + try: + k = winreg.OpenKey(reg, r"Software\Wow6432Node\Mikero\pboProject") + except FileNotFoundError: + k = winreg.OpenKey(reg, r"Software\Mikero\pboProject") try: pboproject_path = winreg.QueryValueEx(k, "exe")[0] winreg.CloseKey(k) @@ -208,7 +211,10 @@ def find_depbo_tools(regKey): except: print_error("ERROR: Could not find pboProject.") - k = winreg.OpenKey(reg, r"Software\Mikero\rapify") + try: + k = winreg.OpenKey(reg, r"Software\Wow6432Node\Mikero\rapify") + except FileNotFoundError: + k = winreg.OpenKey(reg, r"Software\Mikero\rapify") try: rapify_path = winreg.QueryValueEx(k, "exe")[0] winreg.CloseKey(k) @@ -216,7 +222,10 @@ def find_depbo_tools(regKey): except: print_error("Could not find rapify.") - k = winreg.OpenKey(reg, r"Software\Mikero\MakePbo") + try: + k = winreg.OpenKey(reg, r"Software\Wow6432Node\Mikero\MakePbo") + except FileNotFoundError: + k = winreg.OpenKey(reg, r"Software\Mikero\MakePbo") try: makepbo_path = winreg.QueryValueEx(k, "exe")[0] winreg.CloseKey(k) diff --git a/tools/make64.py b/tools/make64.py deleted file mode 100644 index b6635f884e..0000000000 --- a/tools/make64.py +++ /dev/null @@ -1,837 +0,0 @@ -#!/usr/bin/env python -# vim: set fileencoding=utf-8 : - -# make.py -# An Arma 3 addon build system - -############################################################################### - -# The MIT License (MIT) - -# Copyright (c) 2013-2014 Ryan Schultz - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - -############################################################################### - -__version__ = "0.3dev" - -import sys - -if sys.version_info[0] == 2: - print("Python 3 is required.") - sys.exit(1) - -import os -import os.path -import shutil -import platform -import glob -import subprocess -import hashlib -import configparser -import json -import traceback -import time -import re - -if sys.platform == "win32": - import winreg - -############################################################################### -# http://akiscode.com/articles/sha-1directoryhash.shtml -# Copyright (c) 2009 Stephen Akiki -# MIT License (Means you can do whatever you want with this) -# See http://www.opensource.org/licenses/mit-license.php -# Error Codes: -# -1 -> Directory does not exist -# -2 -> General error (see stack traceback) -def get_directory_hash(directory): - directory_hash = hashlib.sha1() - if not os.path.exists (directory): - return -1 - - try: - for root, dirs, files in os.walk(directory): - for names in files: - path = os.path.join(root, names) - try: - f = open(path, 'rb') - except: - # You can't open the file for some reason - f.close() - continue - - while 1: - # Read file in as little chunks - buf = f.read(4096) - if not buf: break - new = hashlib.sha1(buf) - directory_hash.update(new.digest()) - f.close() - - except: - # Print the stack traceback - traceback.print_exc() - return -2 - - return directory_hash.hexdigest() - -# Copyright (c) André Burgaud -# http://www.burgaud.com/bring-colors-to-the-windows-console-with-python/ -if sys.platform == "win32": - from ctypes import windll, Structure, c_short, c_ushort, byref - - SHORT = c_short - WORD = c_ushort - - class COORD(Structure): - """struct in wincon.h.""" - _fields_ = [ - ("X", SHORT), - ("Y", SHORT)] - - class SMALL_RECT(Structure): - """struct in wincon.h.""" - _fields_ = [ - ("Left", SHORT), - ("Top", SHORT), - ("Right", SHORT), - ("Bottom", SHORT)] - - class CONSOLE_SCREEN_BUFFER_INFO(Structure): - """struct in wincon.h.""" - _fields_ = [ - ("dwSize", COORD), - ("dwCursorPosition", COORD), - ("wAttributes", WORD), - ("srWindow", SMALL_RECT), - ("dwMaximumWindowSize", COORD)] - - # winbase.h - STD_INPUT_HANDLE = -10 - STD_OUTPUT_HANDLE = -11 - STD_ERROR_HANDLE = -12 - - # wincon.h - FOREGROUND_BLACK = 0x0000 - FOREGROUND_BLUE = 0x0001 - FOREGROUND_GREEN = 0x0002 - FOREGROUND_CYAN = 0x0003 - FOREGROUND_RED = 0x0004 - FOREGROUND_MAGENTA = 0x0005 - FOREGROUND_YELLOW = 0x0006 - FOREGROUND_GREY = 0x0007 - FOREGROUND_INTENSITY = 0x0008 # foreground color is intensified. - - BACKGROUND_BLACK = 0x0000 - BACKGROUND_BLUE = 0x0010 - BACKGROUND_GREEN = 0x0020 - BACKGROUND_CYAN = 0x0030 - BACKGROUND_RED = 0x0040 - BACKGROUND_MAGENTA = 0x0050 - BACKGROUND_YELLOW = 0x0060 - BACKGROUND_GREY = 0x0070 - BACKGROUND_INTENSITY = 0x0080 # background color is intensified. - - stdout_handle = windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE) - SetConsoleTextAttribute = windll.kernel32.SetConsoleTextAttribute - GetConsoleScreenBufferInfo = windll.kernel32.GetConsoleScreenBufferInfo - - def get_text_attr(): - """Returns the character attributes (colors) of the console screen - buffer.""" - csbi = CONSOLE_SCREEN_BUFFER_INFO() - GetConsoleScreenBufferInfo(stdout_handle, byref(csbi)) - return csbi.wAttributes - - def set_text_attr(color): - """Sets the character attributes (colors) of the console screen - buffer. Color is a combination of foreground and background color, - foreground and background intensity.""" - SetConsoleTextAttribute(stdout_handle, color) -############################################################################### - -def find_bi_tools(work_drive): - """Find BI tools.""" - - reg = winreg.ConnectRegistry(None, winreg.HKEY_CURRENT_USER) - try: - k = winreg.OpenKey(reg, r"Software\bohemia interactive\arma 3 tools") - arma3tools_path = winreg.QueryValueEx(k, "path")[0] - winreg.CloseKey(k) - except: - raise Exception("BadTools","Arma 3 Tools are not installed correctly or the P: drive needs to be created.") - - addonbuilder_path = os.path.join(arma3tools_path, "AddonBuilder", "AddonBuilder.exe") - dssignfile_path = os.path.join(arma3tools_path, "DSSignFile", "DSSignFile.exe") - dscreatekey_path = os.path.join(arma3tools_path, "DSSignFile", "DSCreateKey.exe") - cfgconvert_path = os.path.join(arma3tools_path, "CfgConvert", "CfgConvert.exe") - - if os.path.isfile(addonbuilder_path) and os.path.isfile(dssignfile_path) and os.path.isfile(dscreatekey_path) and os.path.isfile(cfgconvert_path): - return [addonbuilder_path, dssignfile_path, dscreatekey_path, cfgconvert_path] - else: - raise Exception("BadTools","Arma 3 Tools are not installed correctly or the P: drive needs to be created.") - -def find_depbo_tools(regKey): - """Use registry entries to find DePBO-based tools.""" - stop = False - - if regKey == "HKCU": - reg = winreg.ConnectRegistry(None, winreg.HKEY_CURRENT_USER) - stop = True - else: - reg = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE) - - try: - k = winreg.OpenKey(reg, r"Software\Wow6432Node\Mikero\pboProject") - try: - pboproject_path = winreg.QueryValueEx(k, "exe")[0] - winreg.CloseKey(k) - print("Found pboproject.") - except: - print_error("ERROR: Could not find pboProject.") - - k = winreg.OpenKey(reg, r"Software\Wow6432Node\Mikero\rapify") - try: - rapify_path = winreg.QueryValueEx(k, "exe")[0] - winreg.CloseKey(k) - print("Found rapify.") - except: - print_error("Could not find rapify.") - - k = winreg.OpenKey(reg, r"Software\Wow6432Node\Mikero\MakePbo") - try: - makepbo_path = winreg.QueryValueEx(k, "exe")[0] - winreg.CloseKey(k) - print("Found makepbo.") - except: - print_error("Could not find makepbo.") - except: - if stop == True: - raise Exception("BadDePBO", "DePBO tools not installed correctly") - return -1 - - - #Strip any quotations from the path due to a MikeRo tool bug which leaves a trailing space in some of its registry paths. - return [pboproject_path.strip('"'),rapify_path.strip('"'),makepbo_path.strip('"')] - -def color(color): - """Set the color. Works on Win32 and normal terminals.""" - if sys.platform == "win32": - if color == "green": - set_text_attr(FOREGROUND_GREEN | get_text_attr() & 0x0070 | FOREGROUND_INTENSITY) - elif color == "red": - set_text_attr(FOREGROUND_RED | get_text_attr() & 0x0070 | FOREGROUND_INTENSITY) - elif color == "blue": - set_text_attr(FOREGROUND_BLUE | get_text_attr() & 0x0070 | FOREGROUND_INTENSITY) - elif color == "reset": - set_text_attr(FOREGROUND_GREY | get_text_attr() & 0x0070) - elif color == "grey": - set_text_attr(FOREGROUND_GREY | get_text_attr() & 0x0070) - else : - if color == "green": - sys.stdout.write('\033[92m') - elif color == "red": - sys.stdout.write('\033[91m') - elif color == "blue": - sys.stdout.write('\033[94m') - elif color == "reset": - sys.stdout.write('\033[0m') - -def print_error(msg): - color("red") - print ("ERROR: " + msg) - color("reset") - -def print_green(msg): - color("green") - print(msg) - color("reset") - -def print_blue(msg): - color("blue") - print(msg) - color("reset") - -def print_yellow(msg): - color("yellow") - print(msg) - color("reset") - -############################################################################### - -def main(argv): - """Build an Arma addon suite in a directory from rules in a make.cfg file.""" - print_blue(("\nmake.py for Arma, v" + __version__)) - - if sys.platform != "win32": - print_error("Non-Windows platform (Cygwin?). Please re-run from cmd.") - sys.exit(1) - - reg = winreg.ConnectRegistry(None, winreg.HKEY_CURRENT_USER) - try: - k = winreg.OpenKey(reg, r"Software\bohemia interactive\arma 3 tools") - arma3tools_path = winreg.QueryValueEx(k, "path")[0] - winreg.CloseKey(k) - except: - raise Exception("BadTools","Arma 3 Tools are not installed correctly or the P: drive needs to be created.") - - # Default behaviors - test = False # Copy to Arma 3 directory? - arg_modules = False # Only build modules on command line? - make_release = False # Make zip file from the release? - release_version = 0 # Version of release - use_pboproject = True # Default to pboProject build tool - make_target = "DEFAULT" # Which section in make.cfg to use for the build - new_key = False # Make a new key and use it to sign? - quiet = False # Suppress output from build tool? - - # Parse arguments - if "help" in argv or "-h" in argv or "--help" in argv: - print (""" -make.py [help] [test] [force] [key <name>] [target <name>] [release <version>] - [module name] [module name] [...] - -test -- Copy result to Arma 3. -release <version> -- Make archive with <version>. -force -- Ignore cache and build all. -target <name> -- Use rules in make.cfg under heading [<name>] rather than - default [Make] -key <name> -- Use key in working directory with <name> to sign. If it does not - exist, create key. -quiet -- Suppress command line output from build tool. - -If module names are specified, only those modules will be built. - -Examples: - make.py force test - Build all modules (ignoring cache) and copy the mod folder to the Arma 3 - directory. - make.py mymodule_gun - Only build the module named 'mymodule_gun'. - make.py force key MyNewKey release 1.0 - Build all modules (ignoring cache), sign them with NewKey, and pack them - into a zip file for release with version 1.0. - - -If a file called $NOBIN$ is found in the module directory, that module will not be binarized. - -See the make.cfg file for additional build options. -""") - sys.exit(0) - - if "force" in argv: - argv.remove("force") - force_build = True - else: - force_build = False - - if "test" in argv: - test = True - argv.remove("test") - - if "release" in argv: - make_release = True - release_version = argv[argv.index("release") + 1] - argv.remove(release_version) - argv.remove("release") - - if "target" in argv: - make_target = argv[argv.index("target") + 1] - argv.remove("target") - argv.remove(make_target) - force_build = True - - if "key" in argv: - new_key = True - key_name = argv[argv.index("key") + 1] - argv.remove("key") - argv.remove(key_name) - - if "quiet" in argv: - quiet = True - argv.remove("quiet") - - # Get the directory the make script is in. - make_root = os.path.dirname(os.path.realpath(__file__)) - make_root_parent = os.path.abspath(os.path.join(os.getcwd(), os.pardir)) - os.chdir(make_root) - - # Get latest commit ID - try: - gitpath = os.path.join(os.path.dirname(make_root), ".git") - assert os.path.exists(gitpath) - - commit_id = subprocess.check_output(["git", "rev-parse", "HEAD"]) - commit_id = str(commit_id, "utf-8")[:8] - except: - print_error("FAILED TO DETERMINE COMMIT ID.") - commit_id = "NOGIT" - - cfg = configparser.ConfigParser(); - try: - cfg.read(os.path.join(make_root, "make.cfg")) - - # Project name (with @ symbol) - project = cfg.get(make_target, "project", fallback="@"+os.path.basename(os.getcwd())) - - # Private key path - key = cfg.get(make_target, "key", fallback=None) - - # Project prefix (folder path) - prefix = cfg.get(make_target, "prefix", fallback="") - - # Should we autodetect modules on a complete build? - module_autodetect = cfg.getboolean(make_target, "module_autodetect", fallback=True) - - # Manual list of modules to build for a complete build - modules = cfg.get(make_target, "modules", fallback=None) - # Parse it out - if modules: - modules = [x.strip() for x in modules.split(',')] - else: - modules = [] - - # List of directories to ignore when detecting - ignore = [x.strip() for x in cfg.get(make_target, "ignore", fallback="release").split(',')] - - # BI Tools work drive on Windows - work_drive = cfg.get(make_target, "work_drive", fallback="P:\\") - - # Which build tool should we use? - build_tool = cfg.get(make_target, "build_tool", fallback="addonbuilder").lower() - - # Release/build directory, relative to script dir - release_dir = cfg.get(make_target, "release_dir", fallback="release") - - # Project PBO file prefix (files are renamed to prefix_name.pbo) - pbo_name_prefix = cfg.get(make_target, "pbo_name_prefix", fallback=None) - - # Project module Root - module_root_parent = os.path.abspath(os.path.join(os.path.join(work_drive, prefix), os.pardir)) - module_root = cfg.get(make_target, "module_root", fallback=os.path.join(make_root_parent, "addons")) - print_green ("module_root: " + module_root) - if (os.path.isdir(module_root)): - os.chdir(module_root) - else: - print_error ("Directory " + module_root + " does not exist.") - sys.exit() - - except: - raise - print_error("Could not parse make.cfg.") - sys.exit(1) - - - - # See if we have been given specific modules to build from command line. - if len(argv) > 1 and not make_release: - arg_modules = True - modules = argv[1:] - - # Find the tools we need. - try: - tools = find_bi_tools(work_drive) - addonbuilder = tools[0] - dssignfile = tools[1] - dscreatekey = tools[2] - cfgconvert = tools[3] - - except: - print_error("Arma 3 Tools are not installed correctly or the P: drive has not been created.") - sys.exit(1) - - if build_tool == "pboproject": - try: - depbo_tools = find_depbo_tools("HKLM") - if depbo_tools == -1: - depbo_tools = find_depbo_tools("HKCU") - pboproject = depbo_tools[0] - rapifyTool = depbo_tools[1] - makepboTool = depbo_tools[2] - except: - raise - print_error("Could not find dePBO tools. Download the needed tools from: https://dev.withsix.com/projects/mikero-pbodll/files") - sys.exit(1) - - # Try to open and deserialize build cache file. - try: - cache = {} - with open(os.path.join(make_root, "make.cache"), 'r') as f: - cache_raw = f.read() - - cache = json.loads(cache_raw) - - except: - print ("No cache found.") - cache = {} - - # Get list of subdirs in make root. - dirs = next(os.walk(module_root))[1] - - # Autodetect what directories to build. - if module_autodetect and not arg_modules: - modules = [] - for path in dirs: - # Any dir that has a config.cpp in its root is an addon to build. - config_path = os.path.join(path, 'config.cpp') - if os.path.isfile(config_path) and not path in ignore: - modules.append(path) - - # Make the key specified from command line if necessary. - if new_key: - if not os.path.isfile(os.path.join(module_root, key_name + ".biprivatekey")): - print_green("\nRequested key does not exist.") - ret = subprocess.call([dscreatekey, key_name]) # Created in make_root - if ret == 0: - print_blue("Created: " + os.path.join(module_root, key_name + ".biprivatekey")) - else: - print_error("Failed to create key!") - - try: - print_blue("Copying public key to release directory.") - - try: - os.makedirs(os.path.join(module_root, release_dir, "Keys")) - except: - pass - - shutil.copyfile(os.path.join(module_root, key_name + ".bikey"), os.path.join(module_root, release_dir, "Keys", key_name + ".bikey")) - - except: - raise - print_error("Could not copy key to release directory.") - - else: - print_green("\nNOTE: Using key " + os.path.join(module_root, key_name + ".biprivatekey")) - - key = os.path.join(module_root, key_name + ".biprivatekey") - - - # For each module, prep files and then build. - for module in modules: - print_green("\nMaking " + module + "-"*max(1, (60-len(module)))) - - # Cache check - if module in cache: - old_sha = cache[module] - else: - old_sha = "" - - #We always build ACE_common so we can properly show the correct version stamp in the RPT file. - if module == "common": - old_sha = "" - - # Hash the module - new_sha = get_directory_hash(os.path.join(module_root, module)) - - # Check if it needs rebuilt - # print ("Hash:", new_sha) - if old_sha == new_sha: - if not force_build: - print("Module has not changed.") - # Skip everything else - continue - - # Only do this if the project isn't stored directly on the work drive. - # Split the path at the drive name and see if they are on the same drive (usually P:) - if os.path.splitdrive(module_root)[0] != os.path.splitdrive(work_drive)[0]: - try: - # Remove old work drive version (ignore errors) - shutil.rmtree(os.path.join(work_drive, prefix, module), True) - - # Copy module to the work drive - shutil.copytree(module, os.path.join(work_drive, prefix, module)) - - except: - raise - print_error("ERROR: Could not copy module to work drive. Does the module exist?") - input("Press Enter to continue...") - print("Resuming build...") - continue - #else: - #print("WARNING: Module is stored on work drive (" + work_drive + ").") - - try: - # Remove the old pbo, key, and log - old = os.path.join(module_root, release_dir, project, "Addons", module) + "*" - files = glob.glob(old) - for f in files: - os.remove(f) - - if pbo_name_prefix: - old = os.path.join(module_root, release_dir, project, "Addons", pbo_name_prefix+module) + "*" - files = glob.glob(old) - for f in files: - os.remove(f) - except: - raise - print_error("ERROR: Could not copy module to work drive. Does the module exist?") - input("Press Enter to continue...") - print("Resuming build...") - continue - - # Build the module into a pbo - print_blue("Building: " + os.path.join(work_drive, prefix, module)) - print_blue("Destination: " + os.path.join(module_root, release_dir, project, "Addons")) - - # Make destination folder (if needed) - try: - os.makedirs(os.path.join(module_root, release_dir, project, "Addons")) - except: - pass - - # Run build tool - build_successful = False - if build_tool == "pboproject": - try: - #PABST: Convert config (run the macro'd config.cpp through CfgConvert twice to produce a de-macro'd cpp that pboProject can read without fucking up: - shutil.copyfile(os.path.join(work_drive, prefix, module, "config.cpp"), os.path.join(work_drive, prefix, module, "config.backup")) - - os.chdir("P:\\") - - cmd = [os.path.join(arma3tools_path, "CfgConvert", "CfgConvert.exe"), "-bin", "-dst", os.path.join(work_drive, prefix, module, "config.bin"), os.path.join(work_drive, prefix, module, "config.cpp")] - ret = subprocess.call(cmd) - if ret != 0: - print_error("CfgConvert -bin return code == " + str(ret) + ". Usually means there is a syntax error within the config.cpp file.") - os.remove(os.path.join(work_drive, prefix, module, "config.cpp")) - shutil.copyfile(os.path.join(work_drive, prefix, module, "config.backup"), os.path.join(work_drive, prefix, module, "config.cpp")) - - cmd = [os.path.join(arma3tools_path, "CfgConvert", "CfgConvert.exe"), "-txt", "-dst", os.path.join(work_drive, prefix, module, "config.cpp"), os.path.join(work_drive, prefix, module, "config.bin")] - ret = subprocess.call(cmd) - if ret != 0: - print_error("CfgConvert -txt return code == " + str(ret) + ". Usually means there is a syntax error within the config.cpp file.") - os.remove(os.path.join(work_drive, prefix, module, "config.cpp")) - shutil.copyfile(os.path.join(work_drive, prefix, module, "config.backup"), os.path.join(work_drive, prefix, module, "config.cpp")) - - - # Include build number - try: - configpath = os.path.join(work_drive, prefix, module, "config.cpp") - f = open(configpath, "r") - configtext = f.read() - f.close() - - if configtext: - patchestext = re.search(r"class CfgPatches\n\{(.*?)\n\}", configtext, re.DOTALL).group(1) - patchestext = re.sub(r'version(.*?)="(.*?)"', r'version\1="\2-{}"'.format(commit_id), patchestext) - configtext = re.sub(r"class CfgPatches\n\{(.*?)\n\}", "class CfgPatches\n{"+patchestext+"\n}", configtext, flags=re.DOTALL) - f = open(configpath, "w") - f.write(configtext) - f.close() - else: - os.remove(os.path.join(work_drive, prefix, module, "config.cpp")) - os.rename(os.path.join(work_drive, prefix, module, "config.backup"), os.path.join(work_drive, prefix, module, "config.cpp")) - except: - raise - print_error("Failed to include build number") - continue - - if os.path.isfile(os.path.join(work_drive, prefix, module, "$NOBIN$")): - print_green("$NOBIN$ Found. Proceeding with non-binarizing!") - cmd = [makepboTool, "-P","-A","-L","-N","-G", os.path.join(work_drive, prefix, module),os.path.join(module_root, release_dir, project,"Addons")] - - else: - cmd = [pboproject, "-P", os.path.join(work_drive, prefix, module), "+Engine=Arma3", "-S","+Noisy", "+X", "+Clean", "+Mod="+os.path.join(module_root, release_dir, project), "-Key"] - - color("grey") - if quiet: - devnull = open(os.devnull, 'w') - ret = subprocess.call(cmd, stdout=devnull) - devnull.close() - else: - ret = subprocess.call(cmd) - color("reset") - - if ret == 0: - print_green("pboProject return code == " + str(ret)) - # Prettyprefix rename the PBO if requested. - if pbo_name_prefix: - try: - os.rename(os.path.join(module_root, release_dir, project, "Addons", module+".pbo"), os.path.join(module_root, release_dir, project, "Addons", pbo_name_prefix+module+".pbo")) - except: - raise - print_error("Could not rename built PBO with prefix.") - # Sign result - if key: - print("Signing with " + key + ".") - if pbo_name_prefix: - ret = subprocess.call([dssignfile, key, os.path.join(module_root, release_dir, project, "Addons", pbo_name_prefix + module + ".pbo")]) - else: - ret = subprocess.call([dssignfile, key, os.path.join(module_root, release_dir, project, "Addons", module + ".pbo")]) - - if ret == 0: - build_successful = True - else: - build_successful = True - - if not build_successful: - print_error("pboProject return code == " + str(ret)) - print_error("Module not successfully built/signed.") - print ("Resuming build...") - continue - - #PABST: cleanup config BS (you could comment this out to see the "de-macroed" cpp - #print_green("\Pabst (restoring): " + os.path.join(work_drive, prefix, module, "config.cpp")) - os.remove(os.path.join(work_drive, prefix, module, "config.cpp")) - os.remove(os.path.join(work_drive, prefix, module, "config.bin")) - os.rename(os.path.join(work_drive, prefix, module, "config.backup"), os.path.join(work_drive, prefix, module, "config.cpp")) - - # Back to the root - os.chdir(module_root) - - except: - raise - print_error("Could not run Addon Builder.") - input("Press Enter to continue...") - print ("Resuming build...") - continue - - elif build_tool== "addonbuilder": - # Detect $NOBIN$ and do not binarize if found. - if os.path.isfile(os.path.join(work_drive, prefix, module, "$NOBIN$")): - do_binarize = False - print("$NOBIN$ file found in module, packing only.") - else: - do_binarize = True - try: - # Call AddonBuilder - os.chdir("P:\\") - - cmd = [addonbuilder, os.path.join(work_drive, prefix, module), os.path.join(make_root, release_dir, project, "Addons"), "-clear", "-project="+work_drive] - if not do_binarize: - cmd.append("-packonly") - - if quiet: - previousDirectory = os.getcwd() - os.chdir(arma3tools_path) - devnull = open(os.devnull, 'w') - ret = subprocess.call(cmd, stdout=devnull) - devnull.close() - os.chdir(previousDirectory) - else: - previousDirectory = os.getcwd() - os.chdir(arma3tools_path) - print_error("Current directory - " + os.getcwd()) - ret = subprocess.call(cmd) - os.chdir(previousDirectory) - print_error("Current directory - " + os.getcwd()) - color("reset") - print_green("completed") - # Prettyprefix rename the PBO if requested. - if pbo_name_prefix: - try: - os.rename(os.path.join(make_root, release_dir, project, "Addons", module+".pbo"), os.path.join(make_root, release_dir, project, "Addons", pbo_name_prefix+module+".pbo")) - except: - raise - print_error("Could not rename built PBO with prefix.") - - if ret == 0: - # Sign result - if key: - print("Signing with " + key + ".") - if pbo_name_prefix: - ret = subprocess.call([dssignfile, key, os.path.join(make_root, release_dir, project, "Addons", pbo_name_prefix + module + ".pbo")]) - else: - ret = subprocess.call([dssignfile, key, os.path.join(make_root, release_dir, project, "Addons", module + ".pbo")]) - - if ret == 0: - build_successful = True - else: - build_successful = True - - if not build_successful: - print_error("Module not successfully built.") - - # Back to the root - os.chdir(make_root) - - except: - raise - print_error("Could not run Addon Builder.") - input("Press Enter to continue...") - print ("Resuming build...") - continue - - else: - print_error("Unknown build_tool " + build_tool + "!") - - # Update the hash for a successfully built module - if build_successful: - cache[module] = new_sha - - # Done building all modules! - - # Write out the cache state - cache_out = json.dumps(cache) - with open(os.path.join(make_root, "make.cache"), 'w') as f: - f.write(cache_out) - - # Delete the pboproject temp files if building a release. - if make_release and build_tool == "pboproject": - try: - shutil.rmtree(os.path.join(module_root, release_dir, project, "temp"), True) - except: - print_error("ERROR: Could not delete pboProject temp files.") - - print_green("\nDone.") - - # Make release - if make_release: - print_blue("\nMaking release: " + project + "-" + release_version + ".zip") - - try: - # Delete all log files - for root, dirs, files in os.walk(os.path.join(module_root, release_dir, project, "Addons")): - for currentFile in files: - if currentFile.lower().endswith("log"): - os.remove(os.path.join(root, currentFile)) - - # Create a zip with the contents of release/ in it - shutil.make_archive(project + "-" + release_version, "zip", os.path.join(module_root, release_dir)) - except: - raise - print_error("Could not make release.") - - # Copy to Arma 3 folder for testing - if test: - print_blue("\nCopying to Arma 3.") - - if sys.platform == "win32": - reg = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE) - try: - k = winreg.OpenKey(reg, r"SOFTWARE\Wow6432Node\Bohemia Interactive\Arma 3") - a3_path = winreg.EnumValue(k, 1)[1] - winreg.CloseKey(k) - except: - print_error("Could not find Arma 3's directory in the registry.") - else: - a3_path = cygwin_a3path - - if os.path.exists(a3_path): - try: - shutil.rmtree(os.path.join(a3_path, project), True) - shutil.copytree(os.path.join(module_root, release_dir, project), os.path.join(a3_path, project)) - except: - print_error("Could not copy files. Is Arma 3 running?") - -if __name__ == "__main__": - main(sys.argv) -input("Press Enter to continue...") From 17946063049486dc8d87f75da088138c771f7efb Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Thu, 16 Apr 2015 19:52:20 +0200 Subject: [PATCH 046/257] Got rid of the __DSP macro --- addons/atragmx/functions/fnc_create_dialog.sqf | 2 +- addons/atragmx/functions/fnc_show_gun_list.sqf | 2 +- .../atragmx/functions/fnc_show_range_card_setup.sqf | 2 +- .../functions/fnc_show_target_range_assist.sqf | 2 +- .../functions/fnc_show_target_speed_assist.sqf | 2 +- .../functions/fnc_target_speed_assist_timer.sqf | 2 +- addons/atragmx/functions/fnc_toggle_range_card.sqf | 2 +- .../functions/fnc_update_target_selection.sqf | 12 ++++++------ .../atragmx/functions/fnc_update_unit_selection.sqf | 8 ++++---- addons/atragmx/script_component.hpp | 2 -- 10 files changed, 17 insertions(+), 19 deletions(-) diff --git a/addons/atragmx/functions/fnc_create_dialog.sqf b/addons/atragmx/functions/fnc_create_dialog.sqf index 73945a4030..59ec3528af 100644 --- a/addons/atragmx/functions/fnc_create_dialog.sqf +++ b/addons/atragmx/functions/fnc_create_dialog.sqf @@ -29,7 +29,7 @@ GVAR(showAddNewGun) call FUNC(show_add_new_gun); GVAR(showGunList) call FUNC(show_gun_list); GVAR(showRangeCard) call FUNC(show_range_card); if (GVAR(showRangeCard)) then { - ctrlSetFocus (__DSP displayCtrl 5001); + ctrlSetFocus ((uiNamespace getVariable "ATragMX_Display") displayCtrl 5001); [] call FUNC(update_range_card); }; GVAR(showRangeCardSetup) call FUNC(show_range_card_setup); diff --git a/addons/atragmx/functions/fnc_show_gun_list.sqf b/addons/atragmx/functions/fnc_show_gun_list.sqf index 565da71ce6..5e1cdfa453 100644 --- a/addons/atragmx/functions/fnc_show_gun_list.sqf +++ b/addons/atragmx/functions/fnc_show_gun_list.sqf @@ -20,7 +20,7 @@ GVAR(showGunList) = _this; {ctrlShow [_x, _this]} forEach [6000, 6001, 6002, 6003, 6004, 6005, 6006, 6007]; if (_this) then { - ctrlSetFocus (__DSP displayCtrl 6002); + ctrlSetFocus ((uiNamespace getVariable "ATragMX_Display") displayCtrl 6002); lbSetCurSel [6000, GVAR(currentGun)]; }; diff --git a/addons/atragmx/functions/fnc_show_range_card_setup.sqf b/addons/atragmx/functions/fnc_show_range_card_setup.sqf index 98e5f57998..3d44c14b53 100644 --- a/addons/atragmx/functions/fnc_show_range_card_setup.sqf +++ b/addons/atragmx/functions/fnc_show_range_card_setup.sqf @@ -20,7 +20,7 @@ GVAR(showRangeCardSetup) = _this; {ctrlShow [_x, _this]} forEach [10000, 10001, 10002, 10003, 10004, 10005, 10006, 10007, 10008, 10009]; if (_this) then { - ctrlSetFocus (__DSP displayCtrl 10006); + ctrlSetFocus ((uiNamespace getVariable "ATragMX_Display") displayCtrl 10006); ctrlSetText [10003, Str(Round(GVAR(rangeCardStartRange)))]; ctrlSetText [10004, Str(Round(GVAR(rangeCardEndRange)))]; diff --git a/addons/atragmx/functions/fnc_show_target_range_assist.sqf b/addons/atragmx/functions/fnc_show_target_range_assist.sqf index f7b973876f..60de30930f 100644 --- a/addons/atragmx/functions/fnc_show_target_range_assist.sqf +++ b/addons/atragmx/functions/fnc_show_target_range_assist.sqf @@ -20,7 +20,7 @@ GVAR(showTargetRangeAssist) = _this; {ctrlShow [_x, _this]} forEach [7000, 7001, 7002, 7003, 7004, 7005, 7006, 7007, 7008, 7009, 7010, 7011, 7012, 7013, 7014, 7015, 7016, 7017, 7018, 7019, 7020]; if (_this) then { - ctrlSetFocus (__DSP displayCtrl 7018); + ctrlSetFocus ((uiNamespace getVariable "ATragMX_Display") displayCtrl 7018); ctrlSetText [7012, Str(parseNumber(ctrlText 320))]; ctrlSetText [7013, Str(parseNumber(ctrlText 340))]; diff --git a/addons/atragmx/functions/fnc_show_target_speed_assist.sqf b/addons/atragmx/functions/fnc_show_target_speed_assist.sqf index 43b9afe470..3ac05f3f4f 100644 --- a/addons/atragmx/functions/fnc_show_target_speed_assist.sqf +++ b/addons/atragmx/functions/fnc_show_target_speed_assist.sqf @@ -20,7 +20,7 @@ GVAR(showTargetSpeedAssist) = _this; {ctrlShow [_x, _this]} forEach [8000, 8001, 8002, 8003, 8004, 8005, 8006, 8007, 8008, 8009, 8010, 8011, 8012, 8013, 8014, 8015]; if (_this) then { - ctrlSetFocus (__DSP displayCtrl 8012); + ctrlSetFocus ((uiNamespace getVariable "ATragMX_Display") displayCtrl 8012); ctrlSetText [8004, Str(Round((GVAR(targetRange) select GVAR(currentTarget))))]; diff --git a/addons/atragmx/functions/fnc_target_speed_assist_timer.sqf b/addons/atragmx/functions/fnc_target_speed_assist_timer.sqf index da4b68a7c7..6e47461cf3 100644 --- a/addons/atragmx/functions/fnc_target_speed_assist_timer.sqf +++ b/addons/atragmx/functions/fnc_target_speed_assist_timer.sqf @@ -20,7 +20,7 @@ if !(ctrlVisible 9000) then { false call FUNC(show_target_speed_assist); true call FUNC(show_target_speed_assist_timer); - ctrlSetFocus (__DSP displayCtrl 9002); + ctrlSetFocus ((uiNamespace getVariable "ATragMX_Display") displayCtrl 9002); [{ private ["_args", "_startTime"]; diff --git a/addons/atragmx/functions/fnc_toggle_range_card.sqf b/addons/atragmx/functions/fnc_toggle_range_card.sqf index e5d5cb0269..572a4fe6ae 100644 --- a/addons/atragmx/functions/fnc_toggle_range_card.sqf +++ b/addons/atragmx/functions/fnc_toggle_range_card.sqf @@ -24,7 +24,7 @@ if (ctrlVisible 5006) then false call FUNC(show_main_page); true call FUNC(show_range_card); - ctrlSetFocus (__DSP displayCtrl 5001); + ctrlSetFocus ((uiNamespace getVariable "ATragMX_Display") displayCtrl 5001); [] call FUNC(calculate_range_card); [] call FUNC(update_range_card); diff --git a/addons/atragmx/functions/fnc_update_target_selection.sqf b/addons/atragmx/functions/fnc_update_target_selection.sqf index 2a29d05fb1..d63f84a90c 100644 --- a/addons/atragmx/functions/fnc_update_target_selection.sqf +++ b/addons/atragmx/functions/fnc_update_target_selection.sqf @@ -15,13 +15,13 @@ */ #include "script_component.hpp" -(__DSP displayCtrl 500) ctrlEnable true; -(__DSP displayCtrl 501) ctrlEnable true; -(__DSP displayCtrl 502) ctrlEnable true; -(__DSP displayCtrl 503) ctrlEnable true; +((uiNamespace getVariable "ATragMX_Display") displayCtrl 500) ctrlEnable true; +((uiNamespace getVariable "ATragMX_Display") displayCtrl 501) ctrlEnable true; +((uiNamespace getVariable "ATragMX_Display") displayCtrl 502) ctrlEnable true; +((uiNamespace getVariable "ATragMX_Display") displayCtrl 503) ctrlEnable true; -(__DSP displayCtrl 500 + GVAR(currentTarget)) ctrlEnable false; +((uiNamespace getVariable "ATragMX_Display") displayCtrl 500 + GVAR(currentTarget)) ctrlEnable false; -ctrlSetFocus (__DSP displayCtrl 3000); +ctrlSetFocus ((uiNamespace getVariable "ATragMX_Display") displayCtrl 3000); [] call FUNC(update_unit_selection); diff --git a/addons/atragmx/functions/fnc_update_unit_selection.sqf b/addons/atragmx/functions/fnc_update_unit_selection.sqf index 5468d2d0fc..2882954c5b 100644 --- a/addons/atragmx/functions/fnc_update_unit_selection.sqf +++ b/addons/atragmx/functions/fnc_update_unit_selection.sqf @@ -15,11 +15,11 @@ */ #include "script_component.hpp" -(__DSP displayCtrl 600) ctrlEnable true; -(__DSP displayCtrl 601) ctrlEnable true; -(__DSP displayCtrl 602) ctrlEnable true; +((uiNamespace getVariable "ATragMX_Display") displayCtrl 600) ctrlEnable true; +((uiNamespace getVariable "ATragMX_Display") displayCtrl 601) ctrlEnable true; +((uiNamespace getVariable "ATragMX_Display") displayCtrl 602) ctrlEnable true; -(__DSP displayCtrl 600 + GVAR(currentUnit)) ctrlEnable false; +((uiNamespace getVariable "ATragMX_Display") displayCtrl 600 + GVAR(currentUnit)) ctrlEnable false; [] call FUNC(update_gun); [] call FUNC(update_atmosphere); diff --git a/addons/atragmx/script_component.hpp b/addons/atragmx/script_component.hpp index 60b3083a96..f7ec6e68e8 100644 --- a/addons/atragmx/script_component.hpp +++ b/addons/atragmx/script_component.hpp @@ -10,5 +10,3 @@ #endif #include "\z\ace\addons\main\script_macros.hpp" - -#define __DSP (uiNamespace getVariable "ATragMX_Display") From fa6cb3e75ce2390614203def390b3dd179450dba Mon Sep 17 00:00:00 2001 From: PabstMirror <elephantisaterriblemascot@gmail.com> Date: Thu, 16 Apr 2015 12:58:54 -0500 Subject: [PATCH 047/257] #672 - Don't show speaking icon for unconc players --- addons/nametags/functions/fnc_initIsSpeaking.sqf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/nametags/functions/fnc_initIsSpeaking.sqf b/addons/nametags/functions/fnc_initIsSpeaking.sqf index d8ffda756c..daddd36c05 100644 --- a/addons/nametags/functions/fnc_initIsSpeaking.sqf +++ b/addons/nametags/functions/fnc_initIsSpeaking.sqf @@ -41,14 +41,14 @@ if (isClass (configFile >> "cfgPatches" >> "acre_api")) then { diag_log text format ["[ACE_nametags] - ACRE Detected"]; DFUNC(isSpeaking) = { PARAMS_1(_unit); - ([_unit] call acre_api_fnc_isSpeaking) || ([ACE_player] call acre_api_fnc_isBroadcasting) + (([_unit] call acre_api_fnc_isSpeaking) || ([ACE_player] call acre_api_fnc_isBroadcasting)) && {!(_unit getVariable ["ACE_isUnconscious", false])} }; } else { if (isClass (configFile >> "cfgPatches" >> "task_force_radio")) then { diag_log text format ["[ACE_nametags] - TFR Detected"]; DFUNC(isSpeaking) = { PARAMS_1(_unit); - (_unit getVariable ["tf_isSpeaking", false]) + (_unit getVariable ["tf_isSpeaking", false]) && {!(_unit getVariable ["ACE_isUnconscious", false])} }; } else { //No Radio Mod - Start a PFEH to watch the internal VON icon @@ -64,7 +64,7 @@ if (isClass (configFile >> "cfgPatches" >> "acre_api")) then { DFUNC(isSpeaking) = { PARAMS_1(_unit); - (_unit getVariable [QGVAR(isSpeakingInGame), false]) + (_unit getVariable [QGVAR(isSpeakingInGame), false]) && {!(_unit getVariable ["ACE_isUnconscious", false])} }; }; }; From ce4a9c36763177faa7482ba0db384146d9f6e963 Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Thu, 16 Apr 2015 11:32:47 -0700 Subject: [PATCH 048/257] Apply javelin guidance to static titans. --- addons/javelin/CfgVehicles.hpp | 29 ++++++++++++++++++++ addons/javelin/CfgWeapons.hpp | 14 +++++++++- addons/javelin/config.cpp | 3 +- addons/javelin/functions/fnc_onFired.sqf | 5 +++- addons/javelin/functions/fnc_onOpticDraw.sqf | 19 +++++++++++-- addons/missileguidance/CfgAmmo.hpp | 5 ++-- 6 files changed, 67 insertions(+), 8 deletions(-) create mode 100644 addons/javelin/CfgVehicles.hpp diff --git a/addons/javelin/CfgVehicles.hpp b/addons/javelin/CfgVehicles.hpp new file mode 100644 index 0000000000..02b8789e1a --- /dev/null +++ b/addons/javelin/CfgVehicles.hpp @@ -0,0 +1,29 @@ +class CfgVehicles { + class LandVehicle; + class StaticWeapon : LandVehicle { + class Turrets; + }; + + class StaticMGWeapon : StaticWeapon { + class Turrets : Turrets { + class MainTurret; + }; + }; + + + class AT_01_base_F: StaticMGWeapon { + class Turrets : Turrets { + class MainTurret : MainTurret { + turretInfoType = "ACE_RscOptics_javelin"; + gunnerOpticsModel = PATHTOF(data\reticle_titan.p3d); + opticsZoomMin = 0.08333; + opticsZoomMax = 0.04167; + opticsZoomInit = 0.08333; + opticsPPEffects[] = {"OpticsCHAbera1","OpticsBlur1"}; + opticsFlare = 0; + discretefov[] = {0.08333,0.04167}; + discreteInitIndex = 0; + }; + }; + }; +}; \ No newline at end of file diff --git a/addons/javelin/CfgWeapons.hpp b/addons/javelin/CfgWeapons.hpp index 4e7091c653..0898fa6d3c 100644 --- a/addons/javelin/CfgWeapons.hpp +++ b/addons/javelin/CfgWeapons.hpp @@ -1,14 +1,26 @@ class CfgWeapons { class Launcher; + class MissileLauncher; + class Launcher_Base_F : Launcher { class WeaponSlotsInfo; }; + class missiles_titan : MissileLauncher { + weaponInfoType = "ACE_RscOptics_javelin"; + modelOptics = PATHTOF(data\reticle_titan.p3d); + + canLock = 0; + + lockingTargetSound[] = {"",0,1}; + lockedTargetSound[] = {"",0,1}; + }; + class launch_Titan_base : Launcher_Base_F { weaponInfoType = "ACE_RscOptics_javelin"; modelOptics = PATHTOF(data\reticle_titan.p3d); - canLock = 1; + canLock = 0; lockingTargetSound[] = {"",0,1}; diff --git a/addons/javelin/config.cpp b/addons/javelin/config.cpp index 9d7c14e448..cb76da0010 100644 --- a/addons/javelin/config.cpp +++ b/addons/javelin/config.cpp @@ -13,4 +13,5 @@ class CfgPatches { #include "CfgEventhandlers.hpp" #include "RscInGameUI.hpp" #include "CfgSounds.hpp" -#include "CfgWeapons.hpp" \ No newline at end of file +#include "CfgWeapons.hpp" +#include "CfgVehicles.hpp" \ No newline at end of file diff --git a/addons/javelin/functions/fnc_onFired.sqf b/addons/javelin/functions/fnc_onFired.sqf index 04a023c9d8..a4e351cd92 100644 --- a/addons/javelin/functions/fnc_onFired.sqf +++ b/addons/javelin/functions/fnc_onFired.sqf @@ -6,7 +6,10 @@ PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); // Bail on not missile if( _shooter != ACE_player) exitWith { false }; -if( ! ([ (configFile >> "CfgWeapons" >> (currentWeapon (vehicle ACE_player)) ), "launch_Titan_base"] call EFUNC(common,inheritsFrom)) ) exitWith { }; +if( ! ([ (configFile >> "CfgWeapons" >> (currentWeapon (vehicle ACE_player)) ), "launch_Titan_base"] call EFUNC(common,inheritsFrom)) + && + { ! ([ (configFile >> "CfgWeapons" >> (currentWeapon (vehicle ACE_player)) ), "missiles_titan"] call EFUNC(common,inheritsFrom)) } +) exitWith { }; _pfh_handle = uiNamespace getVariable ["ACE_RscOptics_javelin_PFH", nil]; if(!isNil "_pfh_handle") then { diff --git a/addons/javelin/functions/fnc_onOpticDraw.sqf b/addons/javelin/functions/fnc_onOpticDraw.sqf index 13669b9d2e..bc17865480 100644 --- a/addons/javelin/functions/fnc_onOpticDraw.sqf +++ b/addons/javelin/functions/fnc_onOpticDraw.sqf @@ -30,7 +30,10 @@ _soundTime = _args select 4; _randomLockInterval = _args select 5; _fireDisabledEH = _args select 6; -if( ! ([ (configFile >> "CfgWeapons" >> (currentWeapon (vehicle ACE_player)) ), "launch_Titan_base"] call EFUNC(common,inheritsFrom)) ) exitWith { +if( ! ([ (configFile >> "CfgWeapons" >> (currentWeapon (vehicle ACE_player)) ), "launch_Titan_base"] call EFUNC(common,inheritsFrom)) + && + { ! ([ (configFile >> "CfgWeapons" >> (currentWeapon (vehicle ACE_player)) ), "missiles_titan"] call EFUNC(common,inheritsFrom)) } + ) exitWith { __JavelinIGUITargeting ctrlShow false; __JavelinIGUITargetingGate ctrlShow false; __JavelinIGUITargetingLines ctrlShow false; @@ -55,8 +58,16 @@ if ((velocity ACE_player) distance [0,0,0] > 0.5 && {cameraView == "GUNNER"} && // bail on not loaded -if (ACE_player ammo (currentWeapon ACE_player) == 0) exitWith { }; - +if( (vehicle ACE_player) != ACE_player) then { + if( (vehicle player) magazineTurretAmmo ["1Rnd_GAT_missiles", [0]] < 1) exitWith { + TRACE_1("No turret ammo, exit", ""); + }; +} else { + if (ACE_player ammo (currentWeapon ACE_player) < 1 ) exitWith { + TRACE_1("No ammo, exit", ""); + }; +}; + _range = parseNumber (ctrlText __JavelinIGUIRangefinder); TRACE_1("Viewing range", _range); if (_range > 50 && {_range < 2500}) then { @@ -144,6 +155,8 @@ if (isNull _newTarget) then { // Disallow fire _fireDisabledEH = [_fireDisabledEH] call FUNC(disableFire); } else { + _fov = [] call CBA_fnc_getFoV; + TRACE_1("FOV", _fov); if (_newTarget distance ACE_player < 2500 && {(call CBA_fnc_getFoV) select 1 > 9} && { (currentVisionMode ACE_player == 2)} diff --git a/addons/missileguidance/CfgAmmo.hpp b/addons/missileguidance/CfgAmmo.hpp index 3b74c87065..82045a1720 100644 --- a/addons/missileguidance/CfgAmmo.hpp +++ b/addons/missileguidance/CfgAmmo.hpp @@ -105,8 +105,9 @@ class CfgAmmo { // Turn off arma crosshair-guidance manualControl = 0; - hit = 1400; - + hit = 1400; // default: 800 + indirectHit = 20; + indirectHitRange = 2; // ACE uses these values //trackOversteer = 1; //trackLead = 0; From e12831bee474814bee5fd4f02f4dc10a9ccb40b6 Mon Sep 17 00:00:00 2001 From: PabstMirror <elephantisaterriblemascot@gmail.com> Date: Thu, 16 Apr 2015 15:17:53 -0500 Subject: [PATCH 049/257] #678 - Missing Text Height in settingMenu --- addons/optionsmenu/gui/settingsMenu.hpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/addons/optionsmenu/gui/settingsMenu.hpp b/addons/optionsmenu/gui/settingsMenu.hpp index 93d35b284c..5361aa7172 100644 --- a/addons/optionsmenu/gui/settingsMenu.hpp +++ b/addons/optionsmenu/gui/settingsMenu.hpp @@ -94,6 +94,8 @@ class ACE_settingsMenu { periodFocus = 1; periodOver = 1; action = QUOTE([MENU_TAB_OPTIONS] call FUNC(onListBoxShowSelectionChanged);); + SizeEx = (UNITY * 1); + Size = (UNITY * 1); }; class selectionAction_2: selectionAction_1 { idc = 1001; @@ -221,6 +223,8 @@ class ACE_settingsMenu { periodFocus = 1; periodOver = 1; action = "closedialog 0;"; + SizeEx = (UNITY * 1); + Size = (UNITY * 1); }; class action_reset: actionClose { idc = 1100; From 4e5c2ef187f900c364c125cc51559726a25b8f44 Mon Sep 17 00:00:00 2001 From: PabstMirror <elephantisaterriblemascot@gmail.com> Date: Thu, 16 Apr 2015 19:11:42 -0500 Subject: [PATCH 050/257] option menu ui scaling --- addons/optionsmenu/config.cpp | 12 +- addons/optionsmenu/gui/settingsMenu.hpp | 300 ++++++++++++------------ addons/optionsmenu/stringtable.xml | 5 +- 3 files changed, 170 insertions(+), 147 deletions(-) diff --git a/addons/optionsmenu/config.cpp b/addons/optionsmenu/config.cpp index 675e415e47..69249b36c4 100644 --- a/addons/optionsmenu/config.cpp +++ b/addons/optionsmenu/config.cpp @@ -26,4 +26,14 @@ class CfgAddons { #include "gui\settingsMenu.hpp" #include "gui\pauseMenu.hpp" -#include "CFgVehicles.hpp" +#include "CfgVehicles.hpp" + +class ACE_Settings { + class GVAR(optionMenuDisplaySize) { + value = 0; + typeName = "SCALAR"; + isClientSettable = 1; + displayName = "$STR_ACE_optionsMenu_uiScaing"; + values[] = {"$str_medium", "$str_large", "$str_very_large"}; + }; +}; diff --git a/addons/optionsmenu/gui/settingsMenu.hpp b/addons/optionsmenu/gui/settingsMenu.hpp index 5361aa7172..9225564eea 100644 --- a/addons/optionsmenu/gui/settingsMenu.hpp +++ b/addons/optionsmenu/gui/settingsMenu.hpp @@ -4,46 +4,56 @@ class ACE_settingsMenu { onLoad = QUOTE(uiNamespace setVariable [ARR_2('ACE_settingsMenu', _this select 0)]; [] call FUNC(onSettingsMenuOpen);); onUnload = QUOTE(uiNamespace setVariable [ARR_2('ACE_settingsMenu', nil)]; saveProfileNamespace;); - #define SIZEX (((safezoneW / safezoneH) min 1.2)) - #define SIZEY (SIZEX / 1.2) - #define UNITX (SIZEX / 40) - #define UNITY (SIZEY / 25) - #define OFFSETX (safezoneX + (safezoneW - SIZEX)/2) - #define OFFSETY (safezoneY + (safezoneH - (SIZEX / 1.2))/2) +#define SIZEX (((safezoneW / safezoneH) min 1.2)) +#define SIZEY (SIZEX / 1.2) +#define X_ORIGINAL(num) (num * (SIZEX / 40) + (safezoneX + (safezoneW - SIZEX)/2)) +#define Y_ORIGINAL(num) (num * (SIZEY / 25) + (safezoneY + (safezoneH - (SIZEX / 1.2))/2)) +#define W_ORIGINAL(num) (num * (SIZEX / 40)) +#define H_ORIGINAL(num) (num * (SIZEY / 25)) +#define X_MAKEITBIGGA(num) (num * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)) +#define Y_MAKEITBIGGA(num) (num * (safeZoneH / 30) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)) +#define W_MAKEITBIGGA(num) (num * (safeZoneH / 40)) +#define H_MAKEITBIGGA(num) (num * (safeZoneH / 30)) + +#define X_PART(num) QUOTE(linearConversion [ARR_5(0, 2, (missionNamespace getVariable [ARR_2(QUOTE(QGVAR(optionMenuDisplaySize)), 0)]), X_ORIGINAL(num), X_MAKEITBIGGA(num))]) +#define Y_PART(num) QUOTE(linearConversion [ARR_5(0, 2, (missionNamespace getVariable [ARR_2(QUOTE(QGVAR(optionMenuDisplaySize)), 0)]), Y_ORIGINAL(num), Y_MAKEITBIGGA(num))]) +#define W_PART(num) QUOTE(linearConversion [ARR_5(0, 2, (missionNamespace getVariable [ARR_2(QUOTE(QGVAR(optionMenuDisplaySize)), 0)]), W_ORIGINAL(num), W_MAKEITBIGGA(num))]) +#define H_PART(num) QUOTE(linearConversion [ARR_5(0, 2, (missionNamespace getVariable [ARR_2(QUOTE(QGVAR(optionMenuDisplaySize)), 0)]), H_ORIGINAL(num), H_MAKEITBIGGA(num))]) + class controlsBackground { class HeaderBackground: ACE_gui_backgroundBase { idc = -1; type = CT_STATIC; - x = 1 * UNITX + OFFSETX; - y = 1 * UNITY + OFFSETY; - w = 38 * UNITX; - h = 1 * UNITY; + x = X_PART(1); + y = Y_PART(1); + w = W_PART(38); + h = H_PART(1); style = ST_LEFT + ST_SHADOW; font = "PuristaMedium"; - SizeEx = (UNITY * 1); + SizeEx = H_PART(1); colorText[] = {0.95, 0.95, 0.95, 0.75}; colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.9])"}; text = ""; }; class CenterBackground: HeaderBackground { - y = 2.1 * UNITY + OFFSETY; - h = 2.5 * UNITY; + y = Y_PART(2.1); + h = H_PART(2.5); text = ""; colorText[] = {0, 0, 0, "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.9])"}; colorBackground[] = {0,0,0,"(profilenamespace getvariable ['GUI_BCG_RGB_A',0.9])"}; }; class LeftBackground: CenterBackground { - y = 4.8 * UNITY + OFFSETY; - h = 17.4 * UNITY; - w = 25 * UNITX; + y = Y_PART(4.8); + h = H_PART(17.4); + w = W_PART(25); }; class RightBackground: LeftBackground { - x = 26.1 * UNITX + OFFSETX; - w = 12.9 * UNITX; + x = X_PART(26.1); + w = W_PART(12.9); }; class RightBackgroundHeader: RightBackground { - h = 1.4 * UNITY; + h = H_PART(1.4); colorBackground[] = {0,0,0,1}; }; }; @@ -52,32 +62,32 @@ class ACE_settingsMenu { class HeaderName { idc = 1; type = CT_STATIC; - x = 1 * UNITX + OFFSETX; - y = 1 * UNITY + OFFSETY; - w = 38 * UNITX; - h = 1 * UNITY; + x = X_PART(1); + y = Y_PART(1); + w = W_PART(38); + h = H_PART(1); style = ST_LEFT + ST_SHADOW; font = "PuristaMedium"; - SizeEx = (UNITY * 1); + SizeEx = H_PART(1); colorText[] = {0.95, 0.95, 0.95, 0.75}; colorBackground[] = {0,0,0,0}; text = "$STR_ACE_OptionsMenu_OpenConfigMenu"; }; class labelSubHeader: ACE_gui_staticBase { idc = 13; - x = 2 * UNITX + OFFSETX; - y = 3.4 * UNITY + OFFSETY; - w = 30 * UNITX; - h = 1 * UNITY; + x = X_PART(2); + y = Y_PART(3.4); + w = W_PART(30); + h = H_PART(1); text = ""; }; class selectionAction_1: ACE_gui_buttonBase { idc = 1000; text = "$STR_ACE_OptionsMenu_TabOptions"; - x = 1 * UNITX + OFFSETX; - y = 2.1 * UNITY + OFFSETY; - w = 9.5 * UNITX; - h = 1 * UNITY; + x = X_PART(1); + y = Y_PART(2.1); + w = W_PART(9.5); + h = H_PART(1); animTextureNormal = "#(argb,8,8,3)color(0,0,0,0.9)"; animTextureDisabled = "#(argb,8,8,3)color(0,0,0,0.8)"; animTextureOver = "#(argb,8,8,3)color(1,1,1,1)"; @@ -94,34 +104,34 @@ class ACE_settingsMenu { periodFocus = 1; periodOver = 1; action = QUOTE([MENU_TAB_OPTIONS] call FUNC(onListBoxShowSelectionChanged);); - SizeEx = (UNITY * 1); - Size = (UNITY * 1); + SizeEx = H_PART(1); + Size = H_PART(1); }; class selectionAction_2: selectionAction_1 { idc = 1001; text = "$STR_ACE_OptionsMenu_TabColors"; - x = 10.5 * UNITX + OFFSETX; + x = X_PART(10.5); action = QUOTE([MENU_TAB_COLORS] call FUNC(onListBoxShowSelectionChanged);); }; class selectionAction_3: selectionAction_1 { idc = 1002; text = ""; - x = 20 * UNITX + OFFSETX; + x = X_PART(20); action = ""; }; class selectionAction_4: selectionAction_1 { idc = 1003; text = ""; - x = 29.5 * UNITX + OFFSETX; + x = X_PART(29.5); action = ""; }; class listBoxSettingsList: ACE_gui_listNBox { idc = 200; - x = 2 * UNITX + OFFSETX; - y = 5.5 * UNITY + OFFSETY; - w = 23 * UNITX; - h = 15 * UNITY; - SizeEx = (UNITY * 0.8); + x = X_PART(2); + y = Y_PART(5.5); + w = W_PART(23); + h = H_PART(15); + SizeEx = H_ORIGINAL(0.8); colorBackground[] = {0, 0, 0, 0.9}; colorSelectBackground[] = {0, 0, 0, 0.9}; columns[] = {0.0, 0.6}; @@ -129,83 +139,83 @@ class ACE_settingsMenu { }; class labelTitle: ACE_gui_staticBase { idc = 250; - x = 27.1 * UNITX + OFFSETX; - y = 5.1 * UNITY + OFFSETY; - w = 11 * UNITX; - h = 1 * UNITY; + x = X_PART(27.1); + y = Y_PART(5.1); + w = W_PART(11); + h = H_PART(1); text = ""; - SizeEx = (UNITY *1); + SizeEx = H_PART(1); }; class labelKey: ACE_gui_staticBase { //Variable Name idc = 300; - x = 27.1 * UNITX + OFFSETX; - y = 6.2 * UNITY + OFFSETY; - w = 11 * UNITX; - h = 1 * UNITY; + x = X_PART(27.1); + y = Y_PART(6.2); + w = W_PART(11); + h = H_PART(1); text = ""; - SizeEx = (UNITY * 0.65); + SizeEx = H_PART(0.65); }; class Label2: labelKey { idc = 301; - y = 7.3 * UNITY + OFFSETY; + y = Y_PART(7.3); text = "$STR_ACE_OptionsMenu_Setting"; - SizeEx = (UNITY * 1); + SizeEx = H_PART(1); }; class comboBox1: ACE_gui_comboBoxBase { idc = 400; - x = 31.1 * UNITX + OFFSETX; - y = 7.3 * UNITY + OFFSETY; - w = 7 * UNITX; - h = 1 * UNITY; + x = X_PART(31.1); + y = Y_PART(7.3); + w = W_PART(7); + h = H_PART(1); onLBSelChanged = QUOTE( call FUNC(onListBoxSettingsChanged)); - SizeEx = (UNITY * 0.9); + SizeEx = H_PART(0.9); }; class sliderBar1: RscXSliderH { idc = 410; - x = 27.1 * UNITX + OFFSETX; - y = 7.3 * UNITY + OFFSETY; - w = 11 * UNITX; - h = 0.75 * UNITY; + x = X_PART(27.1); + y = Y_PART(7.3); + w = W_PART(11); + h = H_PART(0.75); onSliderPosChanged = QUOTE(_this call FUNC(onSliderPosChanged)); color[] = {1,0,0,0.4}; colorActive[] = {1,0,0,1}; }; class sliderBar2: sliderBar1 { idc = 411; - y = 8.2 * UNITY + OFFSETY; + y = Y_PART(8.2); color[] = {0,1,0,0.4}; colorActive[] = {0,1,0,1}; }; class sliderBar3: sliderBar1 { idc = 412; - y = 9.1 * UNITY + OFFSETY; + y = Y_PART(9.1); color[] = {0,0,1,0.4}; colorActive[] = {0,0,1,1}; }; class sliderBar4: sliderBar1 { idc = 413; - y = 10 * UNITY + OFFSETY; + y = Y_PART(10); color[] = {1,1,1,0.4}; colorActive[] = {1,1,1,1}; }; class labelDesc: ACE_gui_staticBase { idc = 251; - x = 27.1 * UNITX + OFFSETX; - y = 11 * UNITY + OFFSETY; - w = 11 * UNITX; - h = 11 * UNITY; + x = X_PART(27.1); + y = Y_PART(11); + w = W_PART(11); + h = H_PART(11); text = ""; style = ST_LEFT + ST_MULTI; lineSpacing = 1; - SizeEx = (UNITY * 0.8); + SizeEx = H_PART(0.8); }; class actionClose: ACE_gui_buttonBase { idc = 10; text = "$STR_DISP_CLOSE"; - x = 1 * UNITX + OFFSETX; - y = 22.3 * UNITY + OFFSETY; - w = 7.5 * UNITX; - h = 1 * UNITY; + x = X_PART(1); + y = Y_PART(22.3); + w = W_PART(7.5); + h = H_PART(1); style = ST_LEFT; animTextureNormal = "#(argb,8,8,3)color(0,0,0,0.8)"; animTextureDisabled = "#(argb,8,8,3)color(0,0,0,0.5)"; @@ -223,19 +233,19 @@ class ACE_settingsMenu { periodFocus = 1; periodOver = 1; action = "closedialog 0;"; - SizeEx = (UNITY * 1); - Size = (UNITY * 1); + SizeEx = H_PART(1); + Size = H_PART(1); }; class action_reset: actionClose { idc = 1100; text = "$STR_ACE_OptionsMenu_ResetAll"; - x = 26.1 * (SIZEX / 40) + OFFSETX; + x = X_PART(9.5); action = QUOTE([] call FUNC(resetSettings)); }; class action_exportServerConfig: actionClose { idc = 1102; text = "$STR_ACE_OptionsMenu_OpenExport"; - x = 1 * (SIZEX / 40) + OFFSETX; + x = X_PART(18); action = QUOTE(if (GVAR(serverConfigGeneration) > 0) then {createDialog 'ACE_serverSettingsMenu'; }); }; }; @@ -247,32 +257,32 @@ class ACE_serverSettingsMenu: ACE_settingsMenu { class HeaderName { idc = 1; type = CT_STATIC; - x = 1 * UNITX + OFFSETX; - y = 1 * UNITY + OFFSETY; - w = 38 * UNITX; - h = 1 * UNITY; + x = X_PART(1); + y = Y_PART(1); + w = W_PART(38); + h = H_PART(1); style = ST_LEFT + ST_SHADOW; font = "PuristaMedium"; - SizeEx = (UNITY * 1); + SizeEx = H_PART(1); colorText[] = {0.95, 0.95, 0.95, 0.75}; colorBackground[] = {0,0,0,0}; text = "$STR_ACE_OptionsMenu_OpenConfigMenu"; }; class labelSubHeader: ACE_gui_staticBase { idc = 13; - x = 2 * UNITX + OFFSETX; - y = 3.4 * UNITY + OFFSETY; - w = 30 * UNITX; - h = 1 * UNITY; + x = X_PART(2); + y = Y_PART(3.4); + w = W_PART(30); + h = H_PART(1); text = ""; }; class selectionAction_1: ACE_gui_buttonBase { idc = 1000; text = "$STR_ACE_OptionsMenu_TabOptions"; - x = 1 * UNITX + OFFSETX; - y = 2.1 * UNITY + OFFSETY; - w = 9.5 * UNITX; - h = 1 * UNITY; + x = X_PART(1); + y = Y_PART(2.1); + w = W_PART(9.5); + h = H_PART(1); animTextureNormal = "#(argb,8,8,3)color(0,0,0,0.9)"; animTextureDisabled = "#(argb,8,8,3)color(0,0,0,0.8)"; animTextureOver = "#(argb,8,8,3)color(1,1,1,1)"; @@ -293,28 +303,28 @@ class ACE_serverSettingsMenu: ACE_settingsMenu { class selectionAction_2: selectionAction_1 { idc = 1001; text = "$STR_ACE_OptionsMenu_TabColors"; - x = 10.5 * UNITX + OFFSETX; + x = X_PART(10.5); action = QUOTE([MENU_TAB_SERVER_COLORS] call FUNC(onServerListBoxShowSelectionChanged);); }; class selectionAction_3: selectionAction_1 { idc = 1002; text = "$STR_ACE_OptionsMenu_TabValues"; - x = 20 * UNITX + OFFSETX; + x = X_PART(20); action = QUOTE([MENU_TAB_SERVER_VALUES] call FUNC(onServerListBoxShowSelectionChanged);); }; class selectionAction_4: selectionAction_1 { idc = 1003; text = ""; - x = 29.5 * UNITX + OFFSETX; + x = X_PART(29.5); action = ""; }; class listBoxSettingsList: ACE_gui_listNBox { idc = 200; - x = 2 * UNITX + OFFSETX; - y = 5.5 * UNITY + OFFSETY; - w = 23 * UNITX; - h = 15 * UNITY; - SizeEx = (UNITY * 0.8); + x = X_PART(2); + y = Y_PART(5.5); + w = W_PART(23); + h = H_PART(15); + SizeEx = H_PART(0.8); colorBackground[] = {0, 0, 0, 0.9}; colorSelectBackground[] = {0, 0, 0, 0.9}; columns[] = {0.0, 0.6}; @@ -322,120 +332,120 @@ class ACE_serverSettingsMenu: ACE_settingsMenu { }; class labelTitle: ACE_gui_staticBase { idc = 250; - x = 27.1 * UNITX + OFFSETX; - y = 5.1 * UNITY + OFFSETY; - w = 11 * UNITX; - h = 1 * UNITY; + x = X_PART(27.1); + y = Y_PART(5.1); + w = W_PART(11); + h = H_PART(1); text = ""; - SizeEx = (UNITY *1); + SizeEx = H_PART(1); }; class labelKey: ACE_gui_staticBase { //Variable Name idc = 300; - x = 27.1 * UNITX + OFFSETX; - y = 6.2 * UNITY + OFFSETY; - w = 11 * UNITX; - h = 1 * UNITY; + x = X_PART(27.1); + y = Y_PART(6.2); + w = W_PART(11); + h = H_PART(1); text = ""; - SizeEx = (UNITY * 0.65); + SizeEx = H_PART(0.65); }; class Label2: labelKey { idc = 301; - y = 7.3 * UNITY + OFFSETY; + y = Y_PART(7.3); text = "$STR_ACE_OptionsMenu_Setting"; - SizeEx = (UNITY * 1); + SizeEx = H_PART(1); }; class comboBox1: ACE_gui_comboBoxBase { idc = 400; - x = 31.1 * UNITX + OFFSETX; - y = 7.3 * UNITY + OFFSETY; - w = 7 * UNITX; - h = 1 * UNITY; + x = X_PART(31.1); + y = Y_PART(7.3); + w = W_PART(7); + h = H_PART(1); onLBSelChanged = QUOTE( call FUNC(onListBoxSettingsChanged)); - SizeEx = (UNITY * 0.9); + SizeEx = H_PART(0.9); }; class sliderBar1: RscXSliderH { idc = 410; - x = 27.1 * UNITX + OFFSETX; - y = 7.3 * UNITY + OFFSETY; - w = 11 * UNITX; - h = 0.75 * UNITY; + x = X_PART(27.1); + y = Y_PART(7.3); + w = W_PART(11); + h = H_PART(0.75); onSliderPosChanged = QUOTE(_this call FUNC(onSliderPosChanged)); color[] = {1,0,0,0.4}; colorActive[] = {1,0,0,1}; }; class sliderBar2: sliderBar1 { idc = 411; - y = 8.2 * UNITY + OFFSETY; + y = Y_PART(8.2); color[] = {0,1,0,0.4}; colorActive[] = {0,1,0,1}; }; class sliderBar3: sliderBar1 { idc = 412; - y = 9.1 * UNITY + OFFSETY; + y = Y_PART(9.1); color[] = {0,0,1,0.4}; colorActive[] = {0,0,1,1}; }; class sliderBar4: sliderBar1 { idc = 413; - y = 10 * UNITY + OFFSETY; + y = Y_PART(10); color[] = {1,1,1,0.4}; colorActive[] = {1,1,1,1}; }; class inputField1: ACE_gui_editBase { idc = 414; - x = 27.1 * UNITX + OFFSETX; - y = 7.3 * UNITY + OFFSETY; - w = 11 * UNITX; - h = 0.75 * UNITY; + x = X_PART(27.1); + y = Y_PART(7.3); + w = W_PART(11); + h = H_PART(0.75); }; class inputFieldTypeLabel: ACE_gui_staticBase { idc = 415; - x = 27.1 * UNITX + OFFSETX; - y = 8.2 * UNITY + OFFSETY; - w = 11 * UNITX; - h = 0.75 * UNITY; + x = X_PART(27.1); + y = Y_PART(8.2); + w = W_PART(11); + h = H_PART(0.75); text = ""; style = ST_LEFT + ST_MULTI; lineSpacing = 1; - SizeEx = (UNITY * 0.8); + SizeEx = H_PART(0.8); }; class saveInputButton: selectionAction_1 { idc = 416; text = "$STR_ACE_OptionsMenu_SaveInput"; - x = 27.1 * UNITX + OFFSETX; - y = 9.1 * UNITY + OFFSETY; - w = 11 * UNITX; - h = 1 * UNITY; + x = X_PART(27.1); + y = Y_PART(9.1); + w = W_PART(11); + h = H_PART(1); action = QUOTE([] call FUNC(onServerSaveInputField);); }; class labelDesc: ACE_gui_staticBase { idc = 251; - x = 27.1 * UNITX + OFFSETX; - y = 11 * UNITY + OFFSETY; - w = 11 * UNITX; - h = 11 * UNITY; + x = X_PART(27.1); + y = Y_PART(11); + w = W_PART(11); + h = H_PART(11); text = ""; style = ST_LEFT + ST_MULTI; lineSpacing = 1; - SizeEx = (UNITY * 0.8); + SizeEx = H_PART(0.8); }; class actionClose; class action_reset: actionClose { idc = 1100; text = "$STR_ACE_OptionsMenu_ResetAll"; - x = 26.1 * (SIZEX / 40) + OFFSETX; + x = X_PART(26.1); action = QUOTE([] call FUNC(serverResetSettings)); }; class action_exportServerConfig: actionClose { idc = 1101; text = "$STR_ACE_OptionsMenu_Export"; - x = 1 * (SIZEX / 40) + OFFSETX; + x = X_PART(1); action = QUOTE([] call FUNC(exportSettings)); }; class action_toggleIncludeClientSettings: actionClose { idc = 1102; text = "$STR_ACE_OptionsMenu_inClientSettings"; - x = 9 * (SIZEX / 40) + OFFSETX; + x = X_PART(9); action = QUOTE([] call FUNC(toggleIncludeClientSettings)); }; }; diff --git a/addons/optionsmenu/stringtable.xml b/addons/optionsmenu/stringtable.xml index c4ac2b1593..6e512b7d25 100644 --- a/addons/optionsmenu/stringtable.xml +++ b/addons/optionsmenu/stringtable.xml @@ -198,5 +198,8 @@ <French>Paramètres exportés dans le presse papier</French> <Hungarian>Beállítások exportálva a vágólapba</Hungarian> </Key> + <Key ID="STR_ACE_optionsMenu_uiScaing"> + <English>Option Menu UI Scaling</English> + </Key> </Package> -</Project> +</Project> \ No newline at end of file From 53af014eab292835bf0a23b3d37b77fb095b9c4b Mon Sep 17 00:00:00 2001 From: PabstMirror <elephantisaterriblemascot@gmail.com> Date: Thu, 16 Apr 2015 19:29:39 -0500 Subject: [PATCH 051/257] Fix Localization in value[] array --- addons/common/functions/fnc_setSettingFromConfig.sqf | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/addons/common/functions/fnc_setSettingFromConfig.sqf b/addons/common/functions/fnc_setSettingFromConfig.sqf index 4d81ef3535..347320edec 100644 --- a/addons/common/functions/fnc_setSettingFromConfig.sqf +++ b/addons/common/functions/fnc_setSettingFromConfig.sqf @@ -75,6 +75,18 @@ if (isNil _name) then { getNumber (_optionEntry >> "force") > 0, _value ]; + + //Strings in the values array won't be localized from the config, so just do that now: + private "_values"; + _values = _settingData select 5; + { + _text = _x; + if (((typeName _text) == "STRING") && {(count _text) > 1} && {(_text select [0,1]) == "$"}) then { + _text = localize (_text select [1, ((count _text) - 1)]); //chop off the leading $ + _values set [_forEachIndex, _text]; + }; + } forEach _values; + GVAR(settings) pushBack _settingData; From 1729c781bd01135182053cdfcc8ad733afc6bf83 Mon Sep 17 00:00:00 2001 From: PabstMirror <elephantisaterriblemascot@gmail.com> Date: Thu, 16 Apr 2015 19:46:42 -0500 Subject: [PATCH 052/257] Cleanup / private vars --- addons/inventory/config.cpp | 2 +- .../functions/fnc_exportSettings.sqf | 6 + .../functions/fnc_onServerSaveInputField.sqf | 22 +- .../fnc_onServerSettingsMenuOpen.sqf | 3 +- .../functions/fnc_onSettingsMenuOpen.sqf | 4 +- .../fnc_serverSettingsMenuUpdateKeyView.sqf | 2 +- .../fnc_serverSettingsMenuUpdateList.sqf | 2 +- .../functions/fnc_settingsMenuUpdateList.sqf | 2 +- addons/optionsmenu/gui/settingsMenu.hpp | 850 +++++++++--------- 9 files changed, 451 insertions(+), 442 deletions(-) diff --git a/addons/inventory/config.cpp b/addons/inventory/config.cpp index 1268f8b886..622dacc624 100644 --- a/addons/inventory/config.cpp +++ b/addons/inventory/config.cpp @@ -21,7 +21,7 @@ class ACE_Settings { isClientSettable = 1; displayName = "$STR_ACE_Inventory_SettingName"; description = "$STR_ACE_Inventory_SettingDescription"; - values[] = {"Normal (Default Size)", "Medium", "Bigger"}; + values[] = {"$str_medium", "$str_large", "$str_very_large"}; }; }; diff --git a/addons/optionsmenu/functions/fnc_exportSettings.sqf b/addons/optionsmenu/functions/fnc_exportSettings.sqf index 3ac2455a64..f98c3548e8 100644 --- a/addons/optionsmenu/functions/fnc_exportSettings.sqf +++ b/addons/optionsmenu/functions/fnc_exportSettings.sqf @@ -16,6 +16,8 @@ #include "script_component.hpp" +private ["_compiledConfig", "_name", "_typeName", "_isClientSetable", "_localizedName", "_localizedDescription", "_possibleValues", "_defaultValue", "_value", "_compiledConfigEntry"]; + _compiledConfig = " "; { @@ -52,6 +54,10 @@ class %1 { typeName = %3; force = 1; };", _name, _value, format['"%1"', _typeName]]; + + //clipboard seems to be getting cuttoff, so do a backup dump to rpt: + diag_log text _compiledConfigEntry; + _compiledConfig = _compiledConfig + _compiledConfigEntry; }; } forEach EGVAR(common,settings); diff --git a/addons/optionsmenu/functions/fnc_onServerSaveInputField.sqf b/addons/optionsmenu/functions/fnc_onServerSaveInputField.sqf index ca4a00891a..b8eb630f85 100644 --- a/addons/optionsmenu/functions/fnc_onServerSaveInputField.sqf +++ b/addons/optionsmenu/functions/fnc_onServerSaveInputField.sqf @@ -16,28 +16,28 @@ #include "script_component.hpp" -private ["_settingIndex", "_inputText"]; +private ["_settingIndex", "_inputText", "_setting", "_settingName", "_convertedValue"]; _settingIndex = lbCurSel 200; //Index of left list _inputText = ctrlText 414; //Index of right drop down switch (GVAR(optionMenu_openTab)) do { case (MENU_TAB_SERVER_VALUES): { - if ((_settingIndex >= 0) && (_settingIndex < (count GVAR(serverSideValues)))) then { - try { - _setting = (GVAR(serverSideValues) select _settingIndex); - _settingName = _setting select 0; + if ((_settingIndex >= 0) && (_settingIndex < (count GVAR(serverSideValues)))) then { + try { + _setting = (GVAR(serverSideValues) select _settingIndex); + _settingName = _setting select 0; - _convertedValue = switch (toUpper (_setting select 1)) do { + _convertedValue = switch (toUpper (_setting select 1)) do { case "STRING": {format ['"%1"', _inputText]}; case "ARRAY": {format [call compile "[%1]", _inputText]}; case "SCALAR": {parseNumber _inputText;}; - default {throw "Error"}; + default {throw "Error"}; + }; + [MENU_TAB_SERVER_VALUES, _settingName, _convertedValue] call FUNC(updateSetting); + } catch { }; - [MENU_TAB_SERVER_VALUES, _settingName, _convertedValue] call FUNC(updateSetting); - } catch { }; + [false] call FUNC(serverSettingsMenuUpdateList); }; - [false] call FUNC(serverSettingsMenuUpdateList); - }; }; diff --git a/addons/optionsmenu/functions/fnc_onServerSettingsMenuOpen.sqf b/addons/optionsmenu/functions/fnc_onServerSettingsMenuOpen.sqf index 7894d2ff1a..f5501d0860 100644 --- a/addons/optionsmenu/functions/fnc_onServerSettingsMenuOpen.sqf +++ b/addons/optionsmenu/functions/fnc_onServerSettingsMenuOpen.sqf @@ -16,6 +16,8 @@ #include "script_component.hpp" +private ["_name", "_typeName", "_isClientSetable", "_localizedName", "_localizedDescription", "_possibleValues", "_defaultValue", "_setting", "_menu", "_settingsMenu"]; + if (GVAR(serverConfigGeneration) == 0 || isMultiplayer) exitwith {closeDialog 145246;}; // Filter only user setable setting @@ -54,7 +56,6 @@ GVAR(serverSideValues) = []; //Delay a frame [{ [MENU_TAB_SERVER_OPTIONS] call FUNC(onServerListBoxShowSelectionChanged) }, []] call EFUNC(common,execNextFrame); -private "_menu"; disableSerialization; _menu = uiNamespace getvariable "ACE_serverSettingsMenu"; (_menu displayCtrl 1003) ctrlEnable false; diff --git a/addons/optionsmenu/functions/fnc_onSettingsMenuOpen.sqf b/addons/optionsmenu/functions/fnc_onSettingsMenuOpen.sqf index 3a4c6ec561..050abcf295 100644 --- a/addons/optionsmenu/functions/fnc_onSettingsMenuOpen.sqf +++ b/addons/optionsmenu/functions/fnc_onSettingsMenuOpen.sqf @@ -16,9 +16,12 @@ #include "script_component.hpp" +private ["_setting", "_menu"]; + // Filter only user setable setting GVAR(clientSideOptions) = []; GVAR(clientSideColors) = []; + { // If the setting is user setable and not forced if ((_x select 2) && !(_x select 6)) then { @@ -40,7 +43,6 @@ GVAR(clientSideColors) = []; //Delay a frame [{ [MENU_TAB_OPTIONS] call FUNC(onListBoxShowSelectionChanged) }, []] call EFUNC(common,execNextFrame); -private "_menu"; disableSerialization; _menu = uiNamespace getvariable "ACE_settingsMenu"; (_menu displayCtrl 1002) ctrlEnable false; diff --git a/addons/optionsmenu/functions/fnc_serverSettingsMenuUpdateKeyView.sqf b/addons/optionsmenu/functions/fnc_serverSettingsMenuUpdateKeyView.sqf index 2dcf9f7fe7..52984b78f3 100644 --- a/addons/optionsmenu/functions/fnc_serverSettingsMenuUpdateKeyView.sqf +++ b/addons/optionsmenu/functions/fnc_serverSettingsMenuUpdateKeyView.sqf @@ -16,7 +16,7 @@ #include "script_component.hpp" -private ["_settingsMenu", "_ctrlList", "_collection", "_settingIndex", "_setting", "_entryName", "_localizedName", "_localizedDescription", "_possibleValues", "_settingsValue", "_currentColor"]; +private ["_settingsMenu", "_ctrlList", "_collection", "_settingIndex", "_setting", "_entryName", "_localizedName", "_localizedDescription", "_possibleValues", "_settingsValue", "_currentColor", "_expectedType"]; disableSerialization; _settingsMenu = uiNamespace getVariable 'ACE_serverSettingsMenu'; diff --git a/addons/optionsmenu/functions/fnc_serverSettingsMenuUpdateList.sqf b/addons/optionsmenu/functions/fnc_serverSettingsMenuUpdateList.sqf index ad5d647c16..dad3012e1b 100644 --- a/addons/optionsmenu/functions/fnc_serverSettingsMenuUpdateList.sqf +++ b/addons/optionsmenu/functions/fnc_serverSettingsMenuUpdateList.sqf @@ -16,7 +16,7 @@ #include "script_component.hpp" -private ["_settingsMenu", "_ctrlList", "_settingsText", "_color", "_settingsColor", "_updateKeyView"]; +private ["_settingsMenu", "_ctrlList", "_settingsText", "_color", "_settingsColor", "_updateKeyView", "_settingsValue"]; DEFAULT_PARAM(0,_updateKeyView,true); disableSerialization; diff --git a/addons/optionsmenu/functions/fnc_settingsMenuUpdateList.sqf b/addons/optionsmenu/functions/fnc_settingsMenuUpdateList.sqf index 0138b9e87d..513b187d7d 100644 --- a/addons/optionsmenu/functions/fnc_settingsMenuUpdateList.sqf +++ b/addons/optionsmenu/functions/fnc_settingsMenuUpdateList.sqf @@ -16,7 +16,7 @@ #include "script_component.hpp" -private ["_settingsMenu", "_ctrlList", "_settingsText", "_color", "_settingsColor", "_updateKeyView"]; +private ["_settingsMenu", "_ctrlList", "_settingsText", "_color", "_settingsColor", "_updateKeyView", "_settingsValue"]; DEFAULT_PARAM(0,_updateKeyView,true); disableSerialization; diff --git a/addons/optionsmenu/gui/settingsMenu.hpp b/addons/optionsmenu/gui/settingsMenu.hpp index 9225564eea..04e7ee5aaa 100644 --- a/addons/optionsmenu/gui/settingsMenu.hpp +++ b/addons/optionsmenu/gui/settingsMenu.hpp @@ -1,8 +1,8 @@ class ACE_settingsMenu { - idd = 145246; - movingEnable = false; - onLoad = QUOTE(uiNamespace setVariable [ARR_2('ACE_settingsMenu', _this select 0)]; [] call FUNC(onSettingsMenuOpen);); - onUnload = QUOTE(uiNamespace setVariable [ARR_2('ACE_settingsMenu', nil)]; saveProfileNamespace;); + idd = 145246; + movingEnable = false; + onLoad = QUOTE(uiNamespace setVariable [ARR_2('ACE_settingsMenu', _this select 0)]; [] call FUNC(onSettingsMenuOpen);); + onUnload = QUOTE(uiNamespace setVariable [ARR_2('ACE_settingsMenu', nil)]; saveProfileNamespace;); #define SIZEX (((safezoneW / safezoneH) min 1.2)) #define SIZEY (SIZEX / 1.2) @@ -20,433 +20,433 @@ class ACE_settingsMenu { #define Y_PART(num) QUOTE(linearConversion [ARR_5(0, 2, (missionNamespace getVariable [ARR_2(QUOTE(QGVAR(optionMenuDisplaySize)), 0)]), Y_ORIGINAL(num), Y_MAKEITBIGGA(num))]) #define W_PART(num) QUOTE(linearConversion [ARR_5(0, 2, (missionNamespace getVariable [ARR_2(QUOTE(QGVAR(optionMenuDisplaySize)), 0)]), W_ORIGINAL(num), W_MAKEITBIGGA(num))]) #define H_PART(num) QUOTE(linearConversion [ARR_5(0, 2, (missionNamespace getVariable [ARR_2(QUOTE(QGVAR(optionMenuDisplaySize)), 0)]), H_ORIGINAL(num), H_MAKEITBIGGA(num))]) - - class controlsBackground { - class HeaderBackground: ACE_gui_backgroundBase { - idc = -1; - type = CT_STATIC; - x = X_PART(1); - y = Y_PART(1); - w = W_PART(38); - h = H_PART(1); - style = ST_LEFT + ST_SHADOW; - font = "PuristaMedium"; - SizeEx = H_PART(1); - colorText[] = {0.95, 0.95, 0.95, 0.75}; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.9])"}; - text = ""; - }; - class CenterBackground: HeaderBackground { - y = Y_PART(2.1); - h = H_PART(2.5); - text = ""; - colorText[] = {0, 0, 0, "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.9])"}; - colorBackground[] = {0,0,0,"(profilenamespace getvariable ['GUI_BCG_RGB_A',0.9])"}; - }; - class LeftBackground: CenterBackground { - y = Y_PART(4.8); - h = H_PART(17.4); - w = W_PART(25); - }; - class RightBackground: LeftBackground { - x = X_PART(26.1); - w = W_PART(12.9); - }; - class RightBackgroundHeader: RightBackground { - h = H_PART(1.4); - colorBackground[] = {0,0,0,1}; - }; - }; - class controls { - class HeaderName { - idc = 1; - type = CT_STATIC; - x = X_PART(1); - y = Y_PART(1); - w = W_PART(38); - h = H_PART(1); - style = ST_LEFT + ST_SHADOW; - font = "PuristaMedium"; - SizeEx = H_PART(1); - colorText[] = {0.95, 0.95, 0.95, 0.75}; - colorBackground[] = {0,0,0,0}; - text = "$STR_ACE_OptionsMenu_OpenConfigMenu"; + class controlsBackground { + class HeaderBackground: ACE_gui_backgroundBase { + idc = -1; + type = CT_STATIC; + x = X_PART(1); + y = Y_PART(1); + w = W_PART(38); + h = H_PART(1); + style = ST_LEFT + ST_SHADOW; + font = "PuristaMedium"; + SizeEx = H_PART(1); + colorText[] = {0.95, 0.95, 0.95, 0.75}; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.9])"}; + text = ""; + }; + class CenterBackground: HeaderBackground { + y = Y_PART(2.1); + h = H_PART(2.5); + text = ""; + colorText[] = {0, 0, 0, "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.9])"}; + colorBackground[] = {0,0,0,"(profilenamespace getvariable ['GUI_BCG_RGB_A',0.9])"}; + }; + class LeftBackground: CenterBackground { + y = Y_PART(4.8); + h = H_PART(17.4); + w = W_PART(25); + }; + class RightBackground: LeftBackground { + x = X_PART(26.1); + w = W_PART(12.9); + }; + class RightBackgroundHeader: RightBackground { + h = H_PART(1.4); + colorBackground[] = {0,0,0,1}; + }; }; - class labelSubHeader: ACE_gui_staticBase { - idc = 13; - x = X_PART(2); - y = Y_PART(3.4); - w = W_PART(30); - h = H_PART(1); - text = ""; + + class controls { + class HeaderName { + idc = 1; + type = CT_STATIC; + x = X_PART(1); + y = Y_PART(1); + w = W_PART(38); + h = H_PART(1); + style = ST_LEFT + ST_SHADOW; + font = "PuristaMedium"; + SizeEx = H_PART(1); + colorText[] = {0.95, 0.95, 0.95, 0.75}; + colorBackground[] = {0,0,0,0}; + text = "$STR_ACE_OptionsMenu_OpenConfigMenu"; + }; + class labelSubHeader: ACE_gui_staticBase { + idc = 13; + x = X_PART(2); + y = Y_PART(3.4); + w = W_PART(30); + h = H_PART(1); + text = ""; + }; + class selectionAction_1: ACE_gui_buttonBase { + idc = 1000; + text = "$STR_ACE_OptionsMenu_TabOptions"; + x = X_PART(1); + y = Y_PART(2.1); + w = W_PART(9.5); + h = H_PART(1); + animTextureNormal = "#(argb,8,8,3)color(0,0,0,0.9)"; + animTextureDisabled = "#(argb,8,8,3)color(0,0,0,0.8)"; + animTextureOver = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureFocused = "#(argb,8,8,3)color(1,1,1,1)"; + animTexturePressed = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureDefault = "#(argb,8,8,3)color(1,1,1,1)"; + color[] = {1, 1, 1, 1}; + color2[] = {0,0,0, 1}; + colorBackgroundFocused[] = {1,1,1,1}; + colorBackground[] = {1,1,1,1}; + colorbackground2[] = {1,1,1,1}; + colorDisabled[] = {1,1,1,1}; + colorFocused[] = {0,0,0,1}; + periodFocus = 1; + periodOver = 1; + action = QUOTE([MENU_TAB_OPTIONS] call FUNC(onListBoxShowSelectionChanged);); + SizeEx = H_PART(1); + Size = H_PART(1); + }; + class selectionAction_2: selectionAction_1 { + idc = 1001; + text = "$STR_ACE_OptionsMenu_TabColors"; + x = X_PART(10.5); + action = QUOTE([MENU_TAB_COLORS] call FUNC(onListBoxShowSelectionChanged);); + }; + class selectionAction_3: selectionAction_1 { + idc = 1002; + text = ""; + x = X_PART(20); + action = ""; + }; + class selectionAction_4: selectionAction_1 { + idc = 1003; + text = ""; + x = X_PART(29.5); + action = ""; + }; + class listBoxSettingsList: ACE_gui_listNBox { + idc = 200; + x = X_PART(2); + y = Y_PART(5.5); + w = W_PART(23); + h = H_PART(15); + SizeEx = H_ORIGINAL(0.8); + colorBackground[] = {0, 0, 0, 0.9}; + colorSelectBackground[] = {0, 0, 0, 0.9}; + columns[] = {0.0, 0.6}; + onLBSelChanged = QUOTE(_this call FUNC(settingsMenuUpdateKeyView)); + }; + class labelTitle: ACE_gui_staticBase { + idc = 250; + x = X_PART(27.1); + y = Y_PART(5.1); + w = W_PART(11); + h = H_PART(1); + text = ""; + SizeEx = H_PART(1); + }; + class labelKey: ACE_gui_staticBase { //Variable Name + idc = 300; + x = X_PART(27.1); + y = Y_PART(6.2); + w = W_PART(11); + h = H_PART(1); + text = ""; + SizeEx = H_PART(0.65); + }; + class Label2: labelKey { + idc = 301; + y = Y_PART(7.3); + text = "$STR_ACE_OptionsMenu_Setting"; + SizeEx = H_PART(1); + }; + class comboBox1: ACE_gui_comboBoxBase { + idc = 400; + x = X_PART(31.1); + y = Y_PART(7.3); + w = W_PART(7); + h = H_PART(1); + onLBSelChanged = QUOTE( call FUNC(onListBoxSettingsChanged)); + SizeEx = H_PART(0.9); + }; + class sliderBar1: RscXSliderH { + idc = 410; + x = X_PART(27.1); + y = Y_PART(7.3); + w = W_PART(11); + h = H_PART(0.75); + onSliderPosChanged = QUOTE(_this call FUNC(onSliderPosChanged)); + color[] = {1,0,0,0.4}; + colorActive[] = {1,0,0,1}; + }; + class sliderBar2: sliderBar1 { + idc = 411; + y = Y_PART(8.2); + color[] = {0,1,0,0.4}; + colorActive[] = {0,1,0,1}; + }; + class sliderBar3: sliderBar1 { + idc = 412; + y = Y_PART(9.1); + color[] = {0,0,1,0.4}; + colorActive[] = {0,0,1,1}; + }; + class sliderBar4: sliderBar1 { + idc = 413; + y = Y_PART(10); + color[] = {1,1,1,0.4}; + colorActive[] = {1,1,1,1}; + }; + class labelDesc: ACE_gui_staticBase { + idc = 251; + x = X_PART(27.1); + y = Y_PART(11); + w = W_PART(11); + h = H_PART(11); + text = ""; + style = ST_LEFT + ST_MULTI; + lineSpacing = 1; + SizeEx = H_PART(0.8); + }; + class actionClose: ACE_gui_buttonBase { + idc = 10; + text = "$STR_DISP_CLOSE"; + x = X_PART(1); + y = Y_PART(22.3); + w = W_PART(7.5); + h = H_PART(1); + style = ST_LEFT; + animTextureNormal = "#(argb,8,8,3)color(0,0,0,0.8)"; + animTextureDisabled = "#(argb,8,8,3)color(0,0,0,0.5)"; + animTextureOver = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureFocused = "#(argb,8,8,3)color(1,1,1,1)"; + animTexturePressed = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureDefault = "#(argb,8,8,3)color(1,1,1,1)"; + color[] = {1, 1, 1, 1}; + color2[] = {0,0,0, 1}; + colorBackgroundFocused[] = {1,1,1,1}; + colorBackground[] = {1,1,1,1}; + colorbackground2[] = {1,1,1,1}; + colorDisabled[] = {0.5,0.5,0.5,0.8}; + colorFocused[] = {0,0,0,1}; + periodFocus = 1; + periodOver = 1; + action = "closedialog 0;"; + SizeEx = H_PART(1); + Size = H_PART(1); + }; + class action_reset: actionClose { + idc = 1100; + text = "$STR_ACE_OptionsMenu_ResetAll"; + x = X_PART(9.5); + action = QUOTE([] call FUNC(resetSettings)); + }; + class action_exportServerConfig: actionClose { + idc = 1102; + text = "$STR_ACE_OptionsMenu_OpenExport"; + x = X_PART(18); + action = QUOTE(if (GVAR(serverConfigGeneration) > 0) then {createDialog 'ACE_serverSettingsMenu'; }); + }; }; - class selectionAction_1: ACE_gui_buttonBase { - idc = 1000; - text = "$STR_ACE_OptionsMenu_TabOptions"; - x = X_PART(1); - y = Y_PART(2.1); - w = W_PART(9.5); - h = H_PART(1); - animTextureNormal = "#(argb,8,8,3)color(0,0,0,0.9)"; - animTextureDisabled = "#(argb,8,8,3)color(0,0,0,0.8)"; - animTextureOver = "#(argb,8,8,3)color(1,1,1,1)"; - animTextureFocused = "#(argb,8,8,3)color(1,1,1,1)"; - animTexturePressed = "#(argb,8,8,3)color(1,1,1,1)"; - animTextureDefault = "#(argb,8,8,3)color(1,1,1,1)"; - color[] = {1, 1, 1, 1}; - color2[] = {0,0,0, 1}; - colorBackgroundFocused[] = {1,1,1,1}; - colorBackground[] = {1,1,1,1}; - colorbackground2[] = {1,1,1,1}; - colorDisabled[] = {1,1,1,1}; - colorFocused[] = {0,0,0,1}; - periodFocus = 1; - periodOver = 1; - action = QUOTE([MENU_TAB_OPTIONS] call FUNC(onListBoxShowSelectionChanged);); - SizeEx = H_PART(1); - Size = H_PART(1); - }; - class selectionAction_2: selectionAction_1 { - idc = 1001; - text = "$STR_ACE_OptionsMenu_TabColors"; - x = X_PART(10.5); - action = QUOTE([MENU_TAB_COLORS] call FUNC(onListBoxShowSelectionChanged);); - }; - class selectionAction_3: selectionAction_1 { - idc = 1002; - text = ""; - x = X_PART(20); - action = ""; - }; - class selectionAction_4: selectionAction_1 { - idc = 1003; - text = ""; - x = X_PART(29.5); - action = ""; - }; - class listBoxSettingsList: ACE_gui_listNBox { - idc = 200; - x = X_PART(2); - y = Y_PART(5.5); - w = W_PART(23); - h = H_PART(15); - SizeEx = H_ORIGINAL(0.8); - colorBackground[] = {0, 0, 0, 0.9}; - colorSelectBackground[] = {0, 0, 0, 0.9}; - columns[] = {0.0, 0.6}; - onLBSelChanged = QUOTE(_this call FUNC(settingsMenuUpdateKeyView)); - }; - class labelTitle: ACE_gui_staticBase { - idc = 250; - x = X_PART(27.1); - y = Y_PART(5.1); - w = W_PART(11); - h = H_PART(1); - text = ""; - SizeEx = H_PART(1); - }; - class labelKey: ACE_gui_staticBase { //Variable Name - idc = 300; - x = X_PART(27.1); - y = Y_PART(6.2); - w = W_PART(11); - h = H_PART(1); - text = ""; - SizeEx = H_PART(0.65); - }; - class Label2: labelKey { - idc = 301; - y = Y_PART(7.3); - text = "$STR_ACE_OptionsMenu_Setting"; - SizeEx = H_PART(1); - }; - class comboBox1: ACE_gui_comboBoxBase { - idc = 400; - x = X_PART(31.1); - y = Y_PART(7.3); - w = W_PART(7); - h = H_PART(1); - onLBSelChanged = QUOTE( call FUNC(onListBoxSettingsChanged)); - SizeEx = H_PART(0.9); - }; - class sliderBar1: RscXSliderH { - idc = 410; - x = X_PART(27.1); - y = Y_PART(7.3); - w = W_PART(11); - h = H_PART(0.75); - onSliderPosChanged = QUOTE(_this call FUNC(onSliderPosChanged)); - color[] = {1,0,0,0.4}; - colorActive[] = {1,0,0,1}; - }; - class sliderBar2: sliderBar1 { - idc = 411; - y = Y_PART(8.2); - color[] = {0,1,0,0.4}; - colorActive[] = {0,1,0,1}; - }; - class sliderBar3: sliderBar1 { - idc = 412; - y = Y_PART(9.1); - color[] = {0,0,1,0.4}; - colorActive[] = {0,0,1,1}; - }; - class sliderBar4: sliderBar1 { - idc = 413; - y = Y_PART(10); - color[] = {1,1,1,0.4}; - colorActive[] = {1,1,1,1}; - }; - class labelDesc: ACE_gui_staticBase { - idc = 251; - x = X_PART(27.1); - y = Y_PART(11); - w = W_PART(11); - h = H_PART(11); - text = ""; - style = ST_LEFT + ST_MULTI; - lineSpacing = 1; - SizeEx = H_PART(0.8); - }; - class actionClose: ACE_gui_buttonBase { - idc = 10; - text = "$STR_DISP_CLOSE"; - x = X_PART(1); - y = Y_PART(22.3); - w = W_PART(7.5); - h = H_PART(1); - style = ST_LEFT; - animTextureNormal = "#(argb,8,8,3)color(0,0,0,0.8)"; - animTextureDisabled = "#(argb,8,8,3)color(0,0,0,0.5)"; - animTextureOver = "#(argb,8,8,3)color(1,1,1,1)"; - animTextureFocused = "#(argb,8,8,3)color(1,1,1,1)"; - animTexturePressed = "#(argb,8,8,3)color(1,1,1,1)"; - animTextureDefault = "#(argb,8,8,3)color(1,1,1,1)"; - color[] = {1, 1, 1, 1}; - color2[] = {0,0,0, 1}; - colorBackgroundFocused[] = {1,1,1,1}; - colorBackground[] = {1,1,1,1}; - colorbackground2[] = {1,1,1,1}; - colorDisabled[] = {0.5,0.5,0.5,0.8}; - colorFocused[] = {0,0,0,1}; - periodFocus = 1; - periodOver = 1; - action = "closedialog 0;"; - SizeEx = H_PART(1); - Size = H_PART(1); - }; - class action_reset: actionClose { - idc = 1100; - text = "$STR_ACE_OptionsMenu_ResetAll"; - x = X_PART(9.5); - action = QUOTE([] call FUNC(resetSettings)); - }; - class action_exportServerConfig: actionClose { - idc = 1102; - text = "$STR_ACE_OptionsMenu_OpenExport"; - x = X_PART(18); - action = QUOTE(if (GVAR(serverConfigGeneration) > 0) then {createDialog 'ACE_serverSettingsMenu'; }); - }; - }; }; class ACE_serverSettingsMenu: ACE_settingsMenu { onLoad = QUOTE(uiNamespace setVariable [ARR_2('ACE_serverSettingsMenu', _this select 0)]; [] call FUNC(onServerSettingsMenuOpen);); onUnload = QUOTE(uiNamespace setVariable [ARR_2('ACE_serverSettingsMenu', nil)];); - class controls: controls { - class HeaderName { - idc = 1; - type = CT_STATIC; - x = X_PART(1); - y = Y_PART(1); - w = W_PART(38); - h = H_PART(1); - style = ST_LEFT + ST_SHADOW; - font = "PuristaMedium"; - SizeEx = H_PART(1); - colorText[] = {0.95, 0.95, 0.95, 0.75}; - colorBackground[] = {0,0,0,0}; - text = "$STR_ACE_OptionsMenu_OpenConfigMenu"; + class controls: controls { + class HeaderName { + idc = 1; + type = CT_STATIC; + x = X_PART(1); + y = Y_PART(1); + w = W_PART(38); + h = H_PART(1); + style = ST_LEFT + ST_SHADOW; + font = "PuristaMedium"; + SizeEx = H_PART(1); + colorText[] = {0.95, 0.95, 0.95, 0.75}; + colorBackground[] = {0,0,0,0}; + text = "$STR_ACE_OptionsMenu_OpenConfigMenu"; + }; + class labelSubHeader: ACE_gui_staticBase { + idc = 13; + x = X_PART(2); + y = Y_PART(3.4); + w = W_PART(30); + h = H_PART(1); + text = ""; + }; + class selectionAction_1: ACE_gui_buttonBase { + idc = 1000; + text = "$STR_ACE_OptionsMenu_TabOptions"; + x = X_PART(1); + y = Y_PART(2.1); + w = W_PART(9.5); + h = H_PART(1); + animTextureNormal = "#(argb,8,8,3)color(0,0,0,0.9)"; + animTextureDisabled = "#(argb,8,8,3)color(0,0,0,0.8)"; + animTextureOver = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureFocused = "#(argb,8,8,3)color(1,1,1,1)"; + animTexturePressed = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureDefault = "#(argb,8,8,3)color(1,1,1,1)"; + color[] = {1, 1, 1, 1}; + color2[] = {0,0,0, 1}; + colorBackgroundFocused[] = {1,1,1,1}; + colorBackground[] = {1,1,1,1}; + colorbackground2[] = {1,1,1,1}; + colorDisabled[] = {1,1,1,1}; + colorFocused[] = {0,0,0,1}; + periodFocus = 1; + periodOver = 1; + action = QUOTE([MENU_TAB_SERVER_OPTIONS] call FUNC(onServerListBoxShowSelectionChanged);); + }; + class selectionAction_2: selectionAction_1 { + idc = 1001; + text = "$STR_ACE_OptionsMenu_TabColors"; + x = X_PART(10.5); + action = QUOTE([MENU_TAB_SERVER_COLORS] call FUNC(onServerListBoxShowSelectionChanged);); + }; + class selectionAction_3: selectionAction_1 { + idc = 1002; + text = "$STR_ACE_OptionsMenu_TabValues"; + x = X_PART(20); + action = QUOTE([MENU_TAB_SERVER_VALUES] call FUNC(onServerListBoxShowSelectionChanged);); + }; + class selectionAction_4: selectionAction_1 { + idc = 1003; + text = ""; + x = X_PART(29.5); + action = ""; + }; + class listBoxSettingsList: ACE_gui_listNBox { + idc = 200; + x = X_PART(2); + y = Y_PART(5.5); + w = W_PART(23); + h = H_PART(15); + SizeEx = H_ORIGINAL(0.8); + colorBackground[] = {0, 0, 0, 0.9}; + colorSelectBackground[] = {0, 0, 0, 0.9}; + columns[] = {0.0, 0.6}; + onLBSelChanged = QUOTE(_this call FUNC(serverSettingsMenuUpdateKeyView)); + }; + class labelTitle: ACE_gui_staticBase { + idc = 250; + x = X_PART(27.1); + y = Y_PART(5.1); + w = W_PART(11); + h = H_PART(1); + text = ""; + SizeEx = H_PART(1); + }; + class labelKey: ACE_gui_staticBase { //Variable Name + idc = 300; + x = X_PART(27.1); + y = Y_PART(6.2); + w = W_PART(11); + h = H_PART(1); + text = ""; + SizeEx = H_PART(0.65); + }; + class Label2: labelKey { + idc = 301; + y = Y_PART(7.3); + text = "$STR_ACE_OptionsMenu_Setting"; + SizeEx = H_PART(1); + }; + class comboBox1: ACE_gui_comboBoxBase { + idc = 400; + x = X_PART(31.1); + y = Y_PART(7.3); + w = W_PART(7); + h = H_PART(1); + onLBSelChanged = QUOTE( call FUNC(onListBoxSettingsChanged)); + SizeEx = H_PART(0.9); + }; + class sliderBar1: RscXSliderH { + idc = 410; + x = X_PART(27.1); + y = Y_PART(7.3); + w = W_PART(11); + h = H_PART(0.75); + onSliderPosChanged = QUOTE(_this call FUNC(onSliderPosChanged)); + color[] = {1,0,0,0.4}; + colorActive[] = {1,0,0,1}; + }; + class sliderBar2: sliderBar1 { + idc = 411; + y = Y_PART(8.2); + color[] = {0,1,0,0.4}; + colorActive[] = {0,1,0,1}; + }; + class sliderBar3: sliderBar1 { + idc = 412; + y = Y_PART(9.1); + color[] = {0,0,1,0.4}; + colorActive[] = {0,0,1,1}; + }; + class sliderBar4: sliderBar1 { + idc = 413; + y = Y_PART(10); + color[] = {1,1,1,0.4}; + colorActive[] = {1,1,1,1}; + }; + class inputField1: ACE_gui_editBase { + idc = 414; + x = X_PART(27.1); + y = Y_PART(7.3); + w = W_PART(11); + h = H_PART(0.75); + }; + class inputFieldTypeLabel: ACE_gui_staticBase { + idc = 415; + x = X_PART(27.1); + y = Y_PART(8.2); + w = W_PART(11); + h = H_PART(0.75); + text = ""; + style = ST_LEFT + ST_MULTI; + lineSpacing = 1; + SizeEx = H_PART(0.8); + }; + class saveInputButton: selectionAction_1 { + idc = 416; + text = "$STR_ACE_OptionsMenu_SaveInput"; + x = X_PART(27.1); + y = Y_PART(9.1); + w = W_PART(11); + h = H_PART(1); + action = QUOTE([] call FUNC(onServerSaveInputField);); + }; + class labelDesc: ACE_gui_staticBase { + idc = 251; + x = X_PART(27.1); + y = Y_PART(11); + w = W_PART(11); + h = H_PART(11); + text = ""; + style = ST_LEFT + ST_MULTI; + lineSpacing = 1; + SizeEx = H_PART(0.8); + }; + class actionClose; + class action_reset: actionClose { + idc = 1100; + text = "$STR_ACE_OptionsMenu_ResetAll"; + x = X_PART(26.1); + action = QUOTE([] call FUNC(serverResetSettings)); + }; + class action_exportServerConfig: actionClose { + idc = 1101; + text = "$STR_ACE_OptionsMenu_Export"; + x = X_PART(1); + action = QUOTE([] call FUNC(exportSettings)); + }; + class action_toggleIncludeClientSettings: actionClose { + idc = 1102; + text = "$STR_ACE_OptionsMenu_inClientSettings"; + x = X_PART(9); + action = QUOTE([] call FUNC(toggleIncludeClientSettings)); + }; }; - class labelSubHeader: ACE_gui_staticBase { - idc = 13; - x = X_PART(2); - y = Y_PART(3.4); - w = W_PART(30); - h = H_PART(1); - text = ""; - }; - class selectionAction_1: ACE_gui_buttonBase { - idc = 1000; - text = "$STR_ACE_OptionsMenu_TabOptions"; - x = X_PART(1); - y = Y_PART(2.1); - w = W_PART(9.5); - h = H_PART(1); - animTextureNormal = "#(argb,8,8,3)color(0,0,0,0.9)"; - animTextureDisabled = "#(argb,8,8,3)color(0,0,0,0.8)"; - animTextureOver = "#(argb,8,8,3)color(1,1,1,1)"; - animTextureFocused = "#(argb,8,8,3)color(1,1,1,1)"; - animTexturePressed = "#(argb,8,8,3)color(1,1,1,1)"; - animTextureDefault = "#(argb,8,8,3)color(1,1,1,1)"; - color[] = {1, 1, 1, 1}; - color2[] = {0,0,0, 1}; - colorBackgroundFocused[] = {1,1,1,1}; - colorBackground[] = {1,1,1,1}; - colorbackground2[] = {1,1,1,1}; - colorDisabled[] = {1,1,1,1}; - colorFocused[] = {0,0,0,1}; - periodFocus = 1; - periodOver = 1; - action = QUOTE([MENU_TAB_SERVER_OPTIONS] call FUNC(onServerListBoxShowSelectionChanged);); - }; - class selectionAction_2: selectionAction_1 { - idc = 1001; - text = "$STR_ACE_OptionsMenu_TabColors"; - x = X_PART(10.5); - action = QUOTE([MENU_TAB_SERVER_COLORS] call FUNC(onServerListBoxShowSelectionChanged);); - }; - class selectionAction_3: selectionAction_1 { - idc = 1002; - text = "$STR_ACE_OptionsMenu_TabValues"; - x = X_PART(20); - action = QUOTE([MENU_TAB_SERVER_VALUES] call FUNC(onServerListBoxShowSelectionChanged);); - }; - class selectionAction_4: selectionAction_1 { - idc = 1003; - text = ""; - x = X_PART(29.5); - action = ""; - }; - class listBoxSettingsList: ACE_gui_listNBox { - idc = 200; - x = X_PART(2); - y = Y_PART(5.5); - w = W_PART(23); - h = H_PART(15); - SizeEx = H_PART(0.8); - colorBackground[] = {0, 0, 0, 0.9}; - colorSelectBackground[] = {0, 0, 0, 0.9}; - columns[] = {0.0, 0.6}; - onLBSelChanged = QUOTE(_this call FUNC(serverSettingsMenuUpdateKeyView)); - }; - class labelTitle: ACE_gui_staticBase { - idc = 250; - x = X_PART(27.1); - y = Y_PART(5.1); - w = W_PART(11); - h = H_PART(1); - text = ""; - SizeEx = H_PART(1); - }; - class labelKey: ACE_gui_staticBase { //Variable Name - idc = 300; - x = X_PART(27.1); - y = Y_PART(6.2); - w = W_PART(11); - h = H_PART(1); - text = ""; - SizeEx = H_PART(0.65); - }; - class Label2: labelKey { - idc = 301; - y = Y_PART(7.3); - text = "$STR_ACE_OptionsMenu_Setting"; - SizeEx = H_PART(1); - }; - class comboBox1: ACE_gui_comboBoxBase { - idc = 400; - x = X_PART(31.1); - y = Y_PART(7.3); - w = W_PART(7); - h = H_PART(1); - onLBSelChanged = QUOTE( call FUNC(onListBoxSettingsChanged)); - SizeEx = H_PART(0.9); - }; - class sliderBar1: RscXSliderH { - idc = 410; - x = X_PART(27.1); - y = Y_PART(7.3); - w = W_PART(11); - h = H_PART(0.75); - onSliderPosChanged = QUOTE(_this call FUNC(onSliderPosChanged)); - color[] = {1,0,0,0.4}; - colorActive[] = {1,0,0,1}; - }; - class sliderBar2: sliderBar1 { - idc = 411; - y = Y_PART(8.2); - color[] = {0,1,0,0.4}; - colorActive[] = {0,1,0,1}; - }; - class sliderBar3: sliderBar1 { - idc = 412; - y = Y_PART(9.1); - color[] = {0,0,1,0.4}; - colorActive[] = {0,0,1,1}; - }; - class sliderBar4: sliderBar1 { - idc = 413; - y = Y_PART(10); - color[] = {1,1,1,0.4}; - colorActive[] = {1,1,1,1}; - }; - class inputField1: ACE_gui_editBase { - idc = 414; - x = X_PART(27.1); - y = Y_PART(7.3); - w = W_PART(11); - h = H_PART(0.75); - }; - class inputFieldTypeLabel: ACE_gui_staticBase { - idc = 415; - x = X_PART(27.1); - y = Y_PART(8.2); - w = W_PART(11); - h = H_PART(0.75); - text = ""; - style = ST_LEFT + ST_MULTI; - lineSpacing = 1; - SizeEx = H_PART(0.8); - }; - class saveInputButton: selectionAction_1 { - idc = 416; - text = "$STR_ACE_OptionsMenu_SaveInput"; - x = X_PART(27.1); - y = Y_PART(9.1); - w = W_PART(11); - h = H_PART(1); - action = QUOTE([] call FUNC(onServerSaveInputField);); - }; - class labelDesc: ACE_gui_staticBase { - idc = 251; - x = X_PART(27.1); - y = Y_PART(11); - w = W_PART(11); - h = H_PART(11); - text = ""; - style = ST_LEFT + ST_MULTI; - lineSpacing = 1; - SizeEx = H_PART(0.8); - }; - class actionClose; - class action_reset: actionClose { - idc = 1100; - text = "$STR_ACE_OptionsMenu_ResetAll"; - x = X_PART(26.1); - action = QUOTE([] call FUNC(serverResetSettings)); - }; - class action_exportServerConfig: actionClose { - idc = 1101; - text = "$STR_ACE_OptionsMenu_Export"; - x = X_PART(1); - action = QUOTE([] call FUNC(exportSettings)); - }; - class action_toggleIncludeClientSettings: actionClose { - idc = 1102; - text = "$STR_ACE_OptionsMenu_inClientSettings"; - x = X_PART(9); - action = QUOTE([] call FUNC(toggleIncludeClientSettings)); - }; - }; }; From bdd34221507f8a3e8375935089da32153c3db8b0 Mon Sep 17 00:00:00 2001 From: esteldunedain <nicolas.d.badano@gmail.com> Date: Thu, 16 Apr 2015 23:53:54 -0300 Subject: [PATCH 053/257] Allow to dynamically modify actions at runtime. An optional code entry called modifierFunction can be added. That code is called before evaluating the action, allowing to dynamically change the actions name, icon, etc --- .../functions/fnc_collectActiveActionTree.sqf | 7 +++++++ addons/interact_menu/functions/fnc_compileMenu.sqf | 6 ++++-- .../functions/fnc_compileMenuSelfAction.sqf | 6 ++++-- addons/interact_menu/functions/fnc_createAction.sqf | 12 ++++++++++-- 4 files changed, 25 insertions(+), 6 deletions(-) diff --git a/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf b/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf index 582fe750a8..6abcebf47e 100644 --- a/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf +++ b/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf @@ -22,6 +22,13 @@ private ["_target","_player","_fullPath","_activeChildren","_dynamicChildren","_ _target = _object; _player = ACE_player; +// Check if the function should be modified first +if !((_origActionData select 10) isEqualTo {}) then { + // It should, so make a copy and pass it to the modifierFunction + _origActionData = +_origActionData; + [_target, ACE_player, _origActionData select 6, _origActionData] call (_origActionData select 10); +}; + // Return nothing if the action itself is not active if !([_target, ACE_player, _origActionData select 6] call (_origActionData select 4)) exitWith { [] diff --git a/addons/interact_menu/functions/fnc_compileMenu.sqf b/addons/interact_menu/functions/fnc_compileMenu.sqf index baf8e1c272..7983c493e1 100644 --- a/addons/interact_menu/functions/fnc_compileMenu.sqf +++ b/addons/interact_menu/functions/fnc_compileMenu.sqf @@ -27,7 +27,7 @@ if !(isNil {missionNamespace getVariable [_actionsVarName, nil]}) exitWith {}; private "_recurseFnc"; _recurseFnc = { private ["_actions", "_displayName", "_distance", "_icon", "_statement", "_selection", "_condition", "_showDisabled", - "_enableInside", "_canCollapse", "_runOnHover", "_children", "_entry", "_entryCfg", "_insertChildren"]; + "_enableInside", "_canCollapse", "_runOnHover", "_children", "_entry", "_entryCfg", "_insertChildren", "_modifierFunction"]; EXPLODE_1_PVT(_this,_actionsCfg); _actions = []; @@ -56,6 +56,7 @@ _recurseFnc = { _condition = _condition + format [QUOTE( && {[ARR_3(ACE_player, _target, %1)] call EFUNC(common,canInteractWith)} ), getArray (_entryCfg >> "exceptions")]; _insertChildren = compile (getText (_entryCfg >> "insertChildren")); + _modifierFunction = compile (getText (_entryCfg >> "modifierFunction")); _showDisabled = (getNumber (_entryCfg >> "showDisabled")) > 0; _enableInside = (getNumber (_entryCfg >> "enableInside")) > 0; @@ -76,7 +77,8 @@ _recurseFnc = { [], _selection, _distance, - [_showDisabled,_enableInside,_canCollapse,_runOnHover] + [_showDisabled,_enableInside,_canCollapse,_runOnHover], + _modifierFunction ], _children ]; diff --git a/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf b/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf index 968b143701..0258b3dc8a 100644 --- a/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf +++ b/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf @@ -27,7 +27,7 @@ if !(isNil {missionNamespace getVariable [_actionsVarName, nil]}) exitWith {}; private "_recurseFnc"; _recurseFnc = { private ["_actions", "_displayName", "_distance", "_icon", "_statement", "_selection", "_condition", "_showDisabled", - "_enableInside", "_canCollapse", "_runOnHover", "_children", "_entry", "_entryCfg", "_insertChildren"]; + "_enableInside", "_canCollapse", "_runOnHover", "_children", "_entry", "_entryCfg", "_insertChildren", "_modifierFunction"]; EXPLODE_1_PVT(_this,_actionsCfg); _actions = []; @@ -46,6 +46,7 @@ _recurseFnc = { _condition = _condition + format [QUOTE( && {[ARR_3(ACE_player, _target, %1)] call EFUNC(common,canInteractWith)} ), getArray (_entryCfg >> "exceptions")]; _insertChildren = compile (getText (_entryCfg >> "insertChildren")); + _modifierFunction = compile (getText (_entryCfg >> "modifierFunction")); _showDisabled = (getNumber (_entryCfg >> "showDisabled")) > 0; _enableInside = (getNumber (_entryCfg >> "enableInside")) > 0; @@ -66,7 +67,8 @@ _recurseFnc = { [], [0,0,0], 10, //distace - [_showDisabled,_enableInside,_canCollapse,_runOnHover] + [_showDisabled,_enableInside,_canCollapse,_runOnHover], + _modifierFunction ], _children ]; diff --git a/addons/interact_menu/functions/fnc_createAction.sqf b/addons/interact_menu/functions/fnc_createAction.sqf index 0b0030a1b4..fb3f05b7b5 100644 --- a/addons/interact_menu/functions/fnc_createAction.sqf +++ b/addons/interact_menu/functions/fnc_createAction.sqf @@ -14,6 +14,7 @@ * 7: Position (Position or Selection Name) <POSITION> or <STRING> (Optional) * 8: Distance <NUMBER> (Optional) * 9: Other parameters <ARRAY> (Optional) + * 10: Modifier function <CODE> (Optional) * * Return value: * Action <ARRAY> @@ -27,7 +28,7 @@ EXPLODE_5_PVT(_this,_actionName,_displayName,_icon,_statement,_condition); -private ["_insertChildren","_customParams","_position","_distance","_params"]; +private ["_insertChildren","_customParams","_position","_distance","_params", "_modifierFunction"]; _insertChildren = if (count _this > 5) then { _this select 5 @@ -59,6 +60,12 @@ _params = if (count _this > 9) then { [false,false,false,false] }; +_modifierFunction = if (count _this > 10) then { + _this select 10 +} else { + {} +}; + [ _actionName, _displayName, @@ -70,5 +77,6 @@ _params = if (count _this > 9) then { _customParams, _position, _distance, - _params + _params, + _modifierFunction ] From 7d5a70246b6f352d9a25e1e69927bfa8d7484f68 Mon Sep 17 00:00:00 2001 From: PabstMirror <elephantisaterriblemascot@gmail.com> Date: Thu, 16 Apr 2015 22:10:33 -0500 Subject: [PATCH 054/257] Remove unnecessary cfgSounds --- addons/logistics_wirecutter/CfgSounds.hpp | 7 ------- addons/logistics_wirecutter/config.cpp | 1 - 2 files changed, 8 deletions(-) delete mode 100644 addons/logistics_wirecutter/CfgSounds.hpp diff --git a/addons/logistics_wirecutter/CfgSounds.hpp b/addons/logistics_wirecutter/CfgSounds.hpp deleted file mode 100644 index aa5f3464f6..0000000000 --- a/addons/logistics_wirecutter/CfgSounds.hpp +++ /dev/null @@ -1,7 +0,0 @@ -class CfgSounds { - class ACE_Wirecutter_sound { - name = "ACE_wirecutter_sound"; - sound[] = {QUOTE(PATHTOF(sound\wirecut.ogg)), "db-0", 1}; - titles[] = {}; - }; -}; diff --git a/addons/logistics_wirecutter/config.cpp b/addons/logistics_wirecutter/config.cpp index 89fbd1c10f..d83cff4035 100644 --- a/addons/logistics_wirecutter/config.cpp +++ b/addons/logistics_wirecutter/config.cpp @@ -13,6 +13,5 @@ class CfgPatches { }; #include "CfgEventHandlers.hpp" -#include "CfgSounds.hpp" #include "CfgWeapons.hpp" #include "CfgVehicles.hpp" From 54daa02aa4dbd216d497eeba5d8955024eeeaa36 Mon Sep 17 00:00:00 2001 From: esteldunedain <nicolas.d.badano@gmail.com> Date: Fri, 17 Apr 2015 01:44:38 -0300 Subject: [PATCH 055/257] Weather: headers + privates --- addons/weather/XEH_postInit.sqf | 2 ++ addons/weather/functions/fnc_displayWindInfo.sqf | 7 +++---- addons/weather/functions/fnc_getMapData.sqf | 1 - addons/weather/functions/fnc_getWind.sqf | 11 +++++++++++ addons/weather/functions/fnc_serverController.sqf | 11 +++++++++++ 5 files changed, 27 insertions(+), 5 deletions(-) diff --git a/addons/weather/XEH_postInit.sqf b/addons/weather/XEH_postInit.sqf index 75e1277fee..9276e710da 100644 --- a/addons/weather/XEH_postInit.sqf +++ b/addons/weather/XEH_postInit.sqf @@ -39,6 +39,7 @@ _fnc_updateWind = { // Update Rain _fnc_updateRain = { + private ["_oldStrength","_rainStrength","_transitionTime","_periodPosition","_periodPercent"]; if(GVAR(enableRain)) then { if(!isNil "ACE_RAIN_PARAMS" && {!isNil QGVAR(rain_period_start_time)}) then { _oldStrength = ACE_RAIN_PARAMS select 0; @@ -56,6 +57,7 @@ _fnc_updateRain = { // Update Temperature _fnc_updateTemperature = { + private ["_time","_month","_hourlyCoef","_avgTemperature","_pS1","_pS2"]; _time = daytime; _month = date select 1; diff --git a/addons/weather/functions/fnc_displayWindInfo.sqf b/addons/weather/functions/fnc_displayWindInfo.sqf index 61d556a27c..d84cddd106 100644 --- a/addons/weather/functions/fnc_displayWindInfo.sqf +++ b/addons/weather/functions/fnc_displayWindInfo.sqf @@ -1,6 +1,5 @@ /* * Author: Ruthberg - * * Displays a wind info (colored arrow) in the top left corner of the screen * * Argument: @@ -29,13 +28,13 @@ GVAR(WindInfo) = true; [{ private ["_windSpeed", "_windDir", "_playerDir", "_windIndex", "_windColor", "_newWindSpeed", "_windSource", "_height"]; - + if !(GVAR(WindInfo) && !(underwater ACE_player) && vehicle ACE_player == ACE_player) exitWith { GVAR(WindInfo) = false; 0 cutText ["", "PLAIN"]; [_this select 1] call cba_fnc_removePerFrameHandler; }; - + _windIndex = 12; _windColor = [1, 1, 1, 1]; @@ -46,7 +45,7 @@ GVAR(WindInfo) = true; } else { vectorMagnitude ACE_wind; }; - + if (_windSpeed > 0.2) then { _playerDir = getDir ACE_player; _windDir = (ACE_wind select 0) atan2 (ACE_wind select 1); diff --git a/addons/weather/functions/fnc_getMapData.sqf b/addons/weather/functions/fnc_getMapData.sqf index 86a05fb225..fecf9f34f7 100644 --- a/addons/weather/functions/fnc_getMapData.sqf +++ b/addons/weather/functions/fnc_getMapData.sqf @@ -1,6 +1,5 @@ /* * Author: Ruthberg, esteldunedain - * * Get the weather data for the current map * * Argument: diff --git a/addons/weather/functions/fnc_getWind.sqf b/addons/weather/functions/fnc_getWind.sqf index e25d53309d..b0fbf5e8fa 100644 --- a/addons/weather/functions/fnc_getWind.sqf +++ b/addons/weather/functions/fnc_getWind.sqf @@ -1,4 +1,15 @@ +/* + * Author: ACE2 Team + * Calculate current wind locally from the data broadcasted by the server + * + * Argument: + * None + * + * Return value: + * Wind <ARRAY> + */ #include "script_component.hpp" +private ["_dir","_dirInc","_dirRange","_period","_periodPercent","_periodPosition","_return","_spd","_spdInc","_spdRange"]; _return = [0,0,0]; if(!isNil "ACE_WIND_PARAMS") then { diff --git a/addons/weather/functions/fnc_serverController.sqf b/addons/weather/functions/fnc_serverController.sqf index 7646475e81..e29836fc18 100644 --- a/addons/weather/functions/fnc_serverController.sqf +++ b/addons/weather/functions/fnc_serverController.sqf @@ -1,4 +1,15 @@ +/* + * Author: ACE2 Team, esteldunedain + * Calculate the wind and rain evolution on the server. Broadcast the current and next values to the clients + * + * Argument: + * None + * + * Return value: + * None + */ #include "script_component.hpp" +private ["_gustCount","_gustDir","_gustSpeed","_gustTime","_gusts","_i","_lastRain","_maxInterval","_rainOverCast","_startDir","_startSpeed","_time","_timeTillGust","_transitionTime"]; // Rain simulation if(GVAR(rain_period_count) > GVAR(rain_next_period)) then { From e38a6fc62bed074ec3ec399d327adfc9b5bf884a Mon Sep 17 00:00:00 2001 From: ruPaladin <happyworm24@rambler.ru> Date: Fri, 17 Apr 2015 12:01:01 +0300 Subject: [PATCH 056/257] one more russian fix --- addons/captives/stringtable.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/captives/stringtable.xml b/addons/captives/stringtable.xml index 5683eaf0d3..f609aabd93 100644 --- a/addons/captives/stringtable.xml +++ b/addons/captives/stringtable.xml @@ -95,7 +95,7 @@ <Portuguese>Algema Plástica</Portuguese> <Italian>Fascietta</Italian> <Hungarian>Gyorskötöző</Hungarian> - <Russian>Пластиковые наручники</Russian> + <Russian>Кабельная стяжка</Russian> </Key> <Key ID="STR_ACE_Captives_CableTieDescription"> <English>Cable ties that allow you to restrain prisoners.</English> @@ -107,7 +107,7 @@ <Portuguese>A algema plástica permite que você contenha prisioneiros.</Portuguese> <Italian>Fascietta che ti consente di arrestare i prigionieri.</Italian> <Hungarian>Gyorskötöző, emberek foglyulejtéséhez használható.</Hungarian> - <Russian>Пластиковые наручники позволяют связывать пленников.</Russian> + <Russian>Кабельные стяжки позволяют связывать пленников.</Russian> </Key> <Key ID="STR_ACE_Captives_FriskMenuHeader"> <English>Inventory of frisked person</English> From 20565e8b026a89789721feb49bad1f4bf0457ce5 Mon Sep 17 00:00:00 2001 From: commy2 <commy-2@gmx.de> Date: Fri, 17 Apr 2015 11:02:01 +0200 Subject: [PATCH 057/257] hide height / velocity while parachuting, freefallig in expert mode, fix 692 --- addons/parachute/XEH_postInit.sqf | 3 +- addons/parachute/XEH_preInit.sqf | 1 + .../fnc_handleInfoDisplayChanged.sqf | 41 +++++++++++++++++++ 3 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 addons/parachute/functions/fnc_handleInfoDisplayChanged.sqf diff --git a/addons/parachute/XEH_postInit.sqf b/addons/parachute/XEH_postInit.sqf index ead4b33943..2b449d9674 100644 --- a/addons/parachute/XEH_postInit.sqf +++ b/addons/parachute/XEH_postInit.sqf @@ -40,5 +40,4 @@ GVAR(PFH) = false; }] call EFUNC(common,addEventHandler); // don't show speed and height when in expert mode -["Parachute", {if (!cadetMode) then {_dlg = _this select 0; {(_dlg displayCtrl _x) ctrlShow false} forEach [121, 122, 1004, 1005, 1006, 1014];};}] call EFUNC(common,addInfoDisplayEventHandler); //@todo addEventHandler infoDisplayChanged with select 1 == "Parachute" -["Soldier", {if (!cadetMode) then {_dlg = _this select 0; {_ctrl = (_dlg displayCtrl _x); _ctrl ctrlSetPosition [0,0,0,0]; _ctrl ctrlCommit 0;} forEach [380, 382]};}] call EFUNC(common,addInfoDisplayEventHandler); //@todo addEventHandler infoDisplayChanged with select 1 == "Soldier" +["infoDisplayChanged", {_this call FUNC(handleInfoDisplayChanged)}] call EFUNC(common,addEventHandler); diff --git a/addons/parachute/XEH_preInit.sqf b/addons/parachute/XEH_preInit.sqf index 91c24606c6..f446d955b8 100644 --- a/addons/parachute/XEH_preInit.sqf +++ b/addons/parachute/XEH_preInit.sqf @@ -18,6 +18,7 @@ ADDON = false; PREP(doLanding); +PREP(handleInfoDisplayChanged); PREP(hideAltimeter); PREP(onEachFrame); PREP(showAltimeter); diff --git a/addons/parachute/functions/fnc_handleInfoDisplayChanged.sqf b/addons/parachute/functions/fnc_handleInfoDisplayChanged.sqf new file mode 100644 index 0000000000..9b076256dd --- /dev/null +++ b/addons/parachute/functions/fnc_handleInfoDisplayChanged.sqf @@ -0,0 +1,41 @@ +/* + * Author: commy2 + * Hides the height and velocity display while freefalling or parachuting on higher difficulties. + * + * Arguments: + * Stuff from infoDisplayChanged eventhandler. + * + * Return Value: + * None + * + * Public: No + */ +#include "script_component.hpp" + +private ["_dialog", "_type"]; + +_dialog = _this select 0; +_type = _this select 1; + +// don't do anything in noob mode +if (cadetMode) exitWith {}; + +switch (_type) do { + case ("Parachute"): { + { + (_dialog displayCtrl _x) ctrlShow false; + } forEach [121, 122, 1004, 1005, 1006, 1014]; + }; + + case ("Soldier"): { + { + private "_control"; + _control = (_dialog displayCtrl _x); + + // these reset ctrlShow every frame by the engine. Set height/width to 0 as work around. + _control ctrlSetPosition [0,0,0,0]; + _control ctrlCommit 0; + } forEach [380, 382]; + }; +}; +nil // switch might return true if no case was found. Just to make sure the return value matches From e04a0c438aa8441e4a01e958a2505c8135cfb7f5 Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Fri, 17 Apr 2015 11:05:24 +0200 Subject: [PATCH 058/257] Fixed deprecated delete_gun function --- addons/atragmx/functions/fnc_delete_gun.sqf | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/addons/atragmx/functions/fnc_delete_gun.sqf b/addons/atragmx/functions/fnc_delete_gun.sqf index d16e1f84a0..be230da59a 100644 --- a/addons/atragmx/functions/fnc_delete_gun.sqf +++ b/addons/atragmx/functions/fnc_delete_gun.sqf @@ -20,10 +20,8 @@ _index = lbCurSel 6000; if (_index == -1) exitWith {}; -for "_i" from 0 to (count GVAR(currentGun)) - 1 do { - if ((GVAR(currentGun) select _i) > _index) then { - GVAR(currentGun) set [_i, (GVAR(currentGun) select _i) - 1]; - }; +if (GVAR(currentGun) > _index) then { + GVAR(currentGun) = GVAR(currentGun) - 1; }; GVAR(gunList) set [_index, 0]; From 8813315f365d42081d50b79724105d1a6df60c6f Mon Sep 17 00:00:00 2001 From: nomisum <nomisum@googlemail.com> Date: Fri, 17 Apr 2015 11:40:31 +0200 Subject: [PATCH 059/257] added missing translations german --- addons/advanced_ballistics/stringtable.xml | 4 +++- addons/atragmx/stringtable.xml | 5 ++++- addons/interact_menu/stringtable.xml | 3 ++- addons/kestrel4500/stringtable.xml | 8 +++++++- addons/overheating/stringtable.xml | 3 ++- addons/scopes/stringtable.xml | 11 ++++++++++- addons/weather/stringtable.xml | 3 ++- 7 files changed, 30 insertions(+), 7 deletions(-) diff --git a/addons/advanced_ballistics/stringtable.xml b/addons/advanced_ballistics/stringtable.xml index 6890937a45..103256a722 100644 --- a/addons/advanced_ballistics/stringtable.xml +++ b/addons/advanced_ballistics/stringtable.xml @@ -9,6 +9,7 @@ <Russian>Показать информацию о ветре</Russian> <French>Afficher les info du vent</French> <Spanish>Mostrar información del viento</Spanish> + <German>Windinformation anzeigen</German> </Key> <Key ID="STR_ACE_AdvancedBallistics_ProtractorKey"> <English>Show Protractor</English> @@ -17,6 +18,7 @@ <Russian>Показать транспортир</Russian> <French>Afficher le rapporteur</French> <Spanish>Mostrar transportador</Spanish> + <German>Winkelmesser anzeigen</German> </Key> </Package> -</Project> +</Project> \ No newline at end of file diff --git a/addons/atragmx/stringtable.xml b/addons/atragmx/stringtable.xml index 1baa4fb38c..245e5d5f1c 100644 --- a/addons/atragmx/stringtable.xml +++ b/addons/atragmx/stringtable.xml @@ -19,18 +19,21 @@ <Polish>Otwórz ATragMX</Polish> <Russian>Открыть ATragMX</Russian> <Spanish>Abrir ATragMX</Spanish> + <German>ATragMX öffnen</German> </Key> <Key ID="STR_ACE_ATragMX_Description"> <English>Rugged PDA with ATragMX</English> <Polish>Przenośny PDA z kalkulatorem balistycznym ATragMX</Polish> <Russian>Защищенный КПК с ATragMX</Russian> <Spanish>PDA rugerizada con ATragMX</Spanish> + <German>Robuster PDA mit ATragMX</German> </Key> <Key ID="STR_ACE_ATragMX_ATragMXDialogKey"> <English>Open ATragMX</English> <Polish>Otwórz ATragMX</Polish> <Russian>Открыть ATragMX</Russian> <Spanish>Abrir ATragMX</Spanish> + <German>ATragMX öffnen</German> </Key> </Package> -</Project> +</Project> \ No newline at end of file diff --git a/addons/interact_menu/stringtable.xml b/addons/interact_menu/stringtable.xml index 98cac6116a..a926c98063 100644 --- a/addons/interact_menu/stringtable.xml +++ b/addons/interact_menu/stringtable.xml @@ -19,6 +19,7 @@ <French>Afficher le menu d'interaction au format liste</French> <Italian>Mostra il menù di interazione come lista</Italian> <Polish>Wyświetlaj menu interakcji jako listę</Polish> + <German>Interaktionsmenü in Listen anzeigen</German> </Key> <Key ID="STR_ACE_Interact_Menu_InteractKey"> <English>Interact Key</English> @@ -65,4 +66,4 @@ <Italian>Interazioni con veicoli</Italian> </Key> </Package> -</Project> +</Project> \ No newline at end of file diff --git a/addons/kestrel4500/stringtable.xml b/addons/kestrel4500/stringtable.xml index 4757159ff5..2703e34e9f 100644 --- a/addons/kestrel4500/stringtable.xml +++ b/addons/kestrel4500/stringtable.xml @@ -19,6 +19,7 @@ <Russian>Карманная метеостанция Kestrel 4500NV</Russian> <French>Station météo portable Kestrel 4500</French> <Spanish>Kestrel 4500 Pocket Weather Tracker</Spanish> + <German>Kestrel 4500 Taschenwettermessgerät</German> </Key> <Key ID="STR_ACE_Kestrel4500_OpenKestrel"> <English>Open Kestrel 4500</English> @@ -28,6 +29,7 @@ <French>Ouvrir Kestrel 4500</French> <Italian>Accendi Kestrel 4500</Italian> <Spanish>Abrir Kestrel 4500</Spanish> + <German>Kestrel 4500 öffnen</German> </Key> <Key ID="STR_ACE_Kestrel4500_ShowKestrel"> <English>Show Kestrel 4500</English> @@ -36,6 +38,7 @@ <French>Afficher Kestrel 4500</French> <Italian>Mostra Kestrel 4500</Italian> <Spanish>Mostrar Kestrel 4500</Spanish> + <German>Kestrel 4500 anzeigen</German> </Key> <Key ID="STR_ACE_Kestrel4500_HideKestrel"> <English>Hide Kestrel 4500</English> @@ -44,6 +47,7 @@ <French>Cacher Kestrel 4500</French> <Italian>Nascondi Kestrel 4500</Italian> <Spanish>Esconder Kestrel 4500</Spanish> + <German>Kestrel 4500 wegstecken</German> </Key> <Key ID="STR_ACE_Kestrel4500_KestrelDialogKey"> <English>Open Kestrel 4500</English> @@ -52,6 +56,7 @@ <French>Ouvrir Kestrel 4500</French> <Italian>Accendi Kestrel 4500</Italian> <Spanish>Abrir Kestrel 4500</Spanish> + <German>Kestrel 4500 öffnen</German> </Key> <Key ID="STR_ACE_Kestrel4500_DisplayKestrelKey"> <English>Show Kestrel 4500</English> @@ -60,6 +65,7 @@ <French>Afficher Kestrel 4500</French> <Italian>Mostra Kestrel 4500</Italian> <Spanish>Mostrar Kestrel 4500</Spanish> + <German>Kestrel 4500 anzeigen</German> </Key> </Package> -</Project> +</Project> \ No newline at end of file diff --git a/addons/overheating/stringtable.xml b/addons/overheating/stringtable.xml index 4bb91688fa..89993dee62 100644 --- a/addons/overheating/stringtable.xml +++ b/addons/overheating/stringtable.xml @@ -137,6 +137,7 @@ <French>Vérifier la température</French> <Hungarian>Fegyverhő ellenőrzése</Hungarian> <Russian>Проверить температуру оружия</Russian> + <German>Waffentemperatur prüfen</German> </Key> <Key ID="STR_ACE_Overheating_CheckingTemperature"> <English>Checking temperature ...</English> @@ -163,4 +164,4 @@ <Russian>Температура</Russian> </Key> </Package> -</Project> +</Project> \ No newline at end of file diff --git a/addons/scopes/stringtable.xml b/addons/scopes/stringtable.xml index 4a06a779b5..a47f480bb8 100644 --- a/addons/scopes/stringtable.xml +++ b/addons/scopes/stringtable.xml @@ -6,54 +6,63 @@ <Polish>Zerowanie powoli w górę</Polish> <Russian>Малая корректировка ВВЕРХ</Russian> <Spanish>Ajuste menor arriba</Spanish> + <German>Kleine Korrektur nach oben</German> </Key> <Key ID="STR_ACE_Scopes_AdjustDownMinor"> <English>Minor adjustment down</English> <Polish>Zerowanie powoli w dół</Polish> <Russian>Малая корректировка ВНИЗ</Russian> <Spanish>Ajuste menor abajo</Spanish> + <German>Kleine Korrektur nach unten</German> </Key> <Key ID="STR_ACE_Scopes_AdjustRightMinor"> <English>Minor adjustment right</English> <Polish>Zerowanie powoli w prawo</Polish> <Russian>Малая корректировка ВПРАВО</Russian> <Spanish>Ajuste menor derecha</Spanish> + <German>Kleine Korrektur nach rechts</German> </Key> <Key ID="STR_ACE_Scopes_AdjustLeftMinor"> <English>Minor adjustment left</English> <Polish>Zerowanie powoli w lewo</Polish> <Russian>Малая корректировка ВЛЕВО</Russian> <Spanish>Ajuste menor izquierda</Spanish> + <German>Kleine Korrektur nach links</German> </Key> <Key ID="STR_ACE_Scopes_AdjustUpMajor"> <English>Major adjustment up</English> <Polish>Zerowanie w górę</Polish> <Russian>Большая корректировка ВВЕРХ</Russian> <Spanish>Ajuste mayor arriba</Spanish> + <German>Große Korrektur nach oben</German> </Key> <Key ID="STR_ACE_Scopes_AdjustDownMajor"> <English>Major adjustment down</English> <Polish>Zerowanie w dół</Polish> <Russian>Большая корректировка ВНИЗ</Russian> <Spanish>Ajuste mayor abajo</Spanish> + <German>Große Korrektur nach unten</German> </Key> <Key ID="STR_ACE_Scopes_AdjustRightMajor"> <English>Major adjustment right</English> <Polish>Zerowanie w prawo</Polish> <Russian>Большая корректировка ВПРАВО</Russian> <Spanish>Ajuste mayor derecha</Spanish> + <German>Große Korrektur nach rechts</German> </Key> <Key ID="STR_ACE_Scopes_AdjustLeftMajor"> <English>Major adjustment left</English> <Polish>Zerowanie w lewo</Polish> <Russian>Большая корректировка ВЛЕВО</Russian> <Spanish>Ajuste mayor izquierda</Spanish> + <German>Große Korrektur nach links</German> </Key> <Key ID="STR_ACE_Scopes_AdjustZero"> <English>Set zero adjustment</English> <Polish>Zresetuj wyzerowanie</Polish> <Russian>Сбросить корректировку</Russian> <Spanish>Establecer ajuste a cero</Spanish> + <German>Auf 0 justieren</German> </Key> </Package> -</Project> +</Project> \ No newline at end of file diff --git a/addons/weather/stringtable.xml b/addons/weather/stringtable.xml index 060d9b6f51..e3cbaa02d4 100644 --- a/addons/weather/stringtable.xml +++ b/addons/weather/stringtable.xml @@ -7,6 +7,7 @@ <Russian>Показать информацию о погоде</Russian> <French>Afficher information du vent</French> <Spanish>Mostrar información del viento</Spanish> + <German>Zeige Windinformationen</German> </Key> </Package> -</Project> +</Project> \ No newline at end of file From d865e9c038641e7bfb48e0c9729395f64e67a7c1 Mon Sep 17 00:00:00 2001 From: nomisum <nomisum@googlemail.com> Date: Fri, 17 Apr 2015 11:42:47 +0200 Subject: [PATCH 060/257] fixed typo --- addons/advanced_ballistics/stringtable.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/advanced_ballistics/stringtable.xml b/addons/advanced_ballistics/stringtable.xml index 103256a722..f92375986e 100644 --- a/addons/advanced_ballistics/stringtable.xml +++ b/addons/advanced_ballistics/stringtable.xml @@ -9,7 +9,7 @@ <Russian>Показать информацию о ветре</Russian> <French>Afficher les info du vent</French> <Spanish>Mostrar información del viento</Spanish> - <German>Windinformation anzeigen</German> + <German>Windinformationen anzeigen</German> </Key> <Key ID="STR_ACE_AdvancedBallistics_ProtractorKey"> <English>Show Protractor</English> From 45d639b395c5c843ced5babaaf3b3ee2414a2ad0 Mon Sep 17 00:00:00 2001 From: commy2 <commy-2@gmx.de> Date: Fri, 17 Apr 2015 12:28:06 +0200 Subject: [PATCH 061/257] disposable cleanup, fix #696 --- addons/disposable/CfgEventHandlers.hpp | 26 +++++------------------- addons/disposable/CfgMagazines.hpp | 1 + addons/disposable/XEH_postInit.sqf | 10 +++++++++ addons/disposable/XEH_postInitClient.sqf | 10 --------- 4 files changed, 16 insertions(+), 31 deletions(-) create mode 100644 addons/disposable/XEH_postInit.sqf delete mode 100644 addons/disposable/XEH_postInitClient.sqf diff --git a/addons/disposable/CfgEventHandlers.hpp b/addons/disposable/CfgEventHandlers.hpp index 02d0cb625f..4b5614f553 100644 --- a/addons/disposable/CfgEventHandlers.hpp +++ b/addons/disposable/CfgEventHandlers.hpp @@ -1,44 +1,28 @@ class Extended_PreInit_EventHandlers { class ADDON { - init = QUOTE( call COMPILE_FILE(XEH_preInit) ); + init = QUOTE(call COMPILE_FILE(XEH_preInit)); }; }; class Extended_PostInit_EventHandlers { class ADDON { - clientInit = QUOTE( call COMPILE_FILE(XEH_postInitClient) ); + init = QUOTE(call COMPILE_FILE(XEH_postInit)); }; }; class Extended_FiredBIS_EventHandlers { class CAManBase { class ADDON { - firedBIS = QUOTE( _this call FUNC(replaceATWeapon) ); + firedBIS = QUOTE(_this call FUNC(replaceATWeapon)); }; }; }; // handle preloaded missile -class Extended_Init_EventHandlers { +class Extended_InitPost_EventHandlers { class CAManBase { class ADDON { - init = QUOTE( _this call FUNC(takeLoadedATWeapon) ); - }; - }; -}; - -class Extended_Take_EventHandlers { - class CAManBase { - class ADDON { - take = QUOTE( _this call FUNC(takeLoadedATWeapon); [_this select 0] call FUNC(updateInventoryDisplay); ); - }; - }; -}; - -class Extended_Put_EventHandlers { - class CAManBase { - class ADDON { - put = QUOTE( [_this select 0] call FUNC(updateInventoryDisplay); ); + init = QUOTE([ARR_2(_this select 0, secondaryWeapon (_this select 0))] call FUNC(takeLoadedATWeapon); systemChat str [ARR_2(_this select 0, secondaryWeapon (_this select 0))]); }; }; }; diff --git a/addons/disposable/CfgMagazines.hpp b/addons/disposable/CfgMagazines.hpp index 8fbae08dfd..6265c06f50 100644 --- a/addons/disposable/CfgMagazines.hpp +++ b/addons/disposable/CfgMagazines.hpp @@ -3,6 +3,7 @@ class CfgMagazines { class ACE_PreloadedMissileDummy: NLAW_F { // The dummy magazine author = "$STR_ACE_Common_ACETeam"; scope = 1; + scopeArsenal = 1; displayName = "$STR_ACE_Disposable_PreloadedMissileDummy"; picture = PATHTOEF(common,UI\blank_CO.paa); weaponPoolAvailable = 0; diff --git a/addons/disposable/XEH_postInit.sqf b/addons/disposable/XEH_postInit.sqf new file mode 100644 index 0000000000..bc51974bc6 --- /dev/null +++ b/addons/disposable/XEH_postInit.sqf @@ -0,0 +1,10 @@ +// by commy2 +#include "script_component.hpp" + +if (!hasInterface) exitWith {}; + +["inventoryDisplayLoaded", {[ACE_player, _this select 0] call FUNC(updateInventoryDisplay)}] call EFUNC(common,addEventHandler); +["playerInventoryChanged", { + [_this select 0, _this select 1 select 11] call FUNC(takeLoadedATWeapon); + [_this select 0] call FUNC(updateInventoryDisplay); +}] call EFUNC(common,addEventHandler); diff --git a/addons/disposable/XEH_postInitClient.sqf b/addons/disposable/XEH_postInitClient.sqf deleted file mode 100644 index c20dfa886b..0000000000 --- a/addons/disposable/XEH_postInitClient.sqf +++ /dev/null @@ -1,10 +0,0 @@ -// by commy2 - -// The Arma InventoryOpened EH fires actually before the inventory dialog is opened (findDisplay 602 => displayNull). - -#include "script_component.hpp" - -["inventoryDisplayLoaded",{ - [ACE_player] call FUNC(takeLoadedATWeapon); - [ACE_player, (_this select 0)] call FUNC(updateInventoryDisplay); -}] call EFUNC(common,addEventHandler); \ No newline at end of file From 26944ea84e8eb07d81c9558cf110604e5d89edc7 Mon Sep 17 00:00:00 2001 From: commy2 <commy-2@gmx.de> Date: Fri, 17 Apr 2015 13:01:38 +0200 Subject: [PATCH 062/257] make altimeter actually usable with parachutes --- addons/parachute/XEH_postInit.sqf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/addons/parachute/XEH_postInit.sqf b/addons/parachute/XEH_postInit.sqf index 2b449d9674..19e6d413a2 100644 --- a/addons/parachute/XEH_postInit.sqf +++ b/addons/parachute/XEH_postInit.sqf @@ -14,12 +14,13 @@ * Public: No */ #include "script_component.hpp" + if (!hasInterface) exitWith {}; ["ACE3", QGVAR(showAltimeter), localize "STR_ACE_Parachute_showAltimeter", { // Conditions: canInteract - if !([ACE_player, objNull, ["isNotEscorting"]] call EFUNC(common,canInteractWith)) exitWith {false}; + if !([ACE_player, objNull, ["isNotEscorting", "isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; if (!('ACE_Altimeter' in assignedItems ace_player)) exitWith {false}; if (!(missionNamespace getVariable [QGVAR(AltimeterActive), false])) then { [ace_player] call FUNC(showAltimeter); From c2214efeb1c8175be8e37a8a55cd5bd9732ffacb Mon Sep 17 00:00:00 2001 From: EpMAK <epmak777@gmail.com> Date: Fri, 17 Apr 2015 14:54:28 +0300 Subject: [PATCH 063/257] Russian stringtables finished Filled all the missing lines, little errors fixed. --- addons/respawn/stringtable.xml | 6 ++++++ addons/vehiclelock/stringtable.xml | 6 +++--- addons/weaponselect/stringtable.xml | 4 ++-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/addons/respawn/stringtable.xml b/addons/respawn/stringtable.xml index 409a149f83..dceeb687fe 100644 --- a/addons/respawn/stringtable.xml +++ b/addons/respawn/stringtable.xml @@ -45,31 +45,37 @@ <English>Rallypoint West (Base)</English> <German>Sammelpunkt West (Basis)</German> <Spanish>Punto de reunión Oeste (Base)</Spanish> + <Russian>Точка сбора Синих (База)</Russian> </Key> <Key ID="STR_ACE_Respawn_RallypointEastBase"> <English>Rallypoint East (Base)</English> <German>Sammelpunkt Ost (Basis)</German> <Spanish>Punto de reunión Este (Base)</Spanish> + <Russian>Точка сбора Красных (База)</Russian> </Key> <Key ID="STR_ACE_Respawn_RallypointIndependentBase"> <English>Rallypoint Independent (Base)</English> <German>Sammelpunkt Widerstand (Basis)</German> <Spanish>Punto de reunión Independiente (Base)</Spanish> + <Russian>Точка сбора Независимых (База</Russian> </Key> <Key ID="STR_ACE_Respawn_RallypointWest"> <English>Rallypoint West</English> <German>Sammelpunkt West</German> <Spanish>Punto de reunión Oeste</Spanish> + <Russian>Точка сбора Синих</Russian> </Key> <Key ID="STR_ACE_Respawn_RallypointEast"> <English>Rallypoint East</English> <German>Sammelpunkt Ost</German> <Spanish>Punto de reunión Este</Spanish> + <Russian>Точка сбора Красных</Russian> </Key> <Key ID="STR_ACE_Respawn_RallypointIndependent"> <English>Rallypoint Independent</English> <German>Sammelpunkt Widerstand</German> <Spanish>Punto de reunión Independiente</Spanish> + <Russian>Точка сбора Независимых</Russian> </Key> </Package> </Project> \ No newline at end of file diff --git a/addons/vehiclelock/stringtable.xml b/addons/vehiclelock/stringtable.xml index a327352f9b..6bf62bb671 100644 --- a/addons/vehiclelock/stringtable.xml +++ b/addons/vehiclelock/stringtable.xml @@ -79,7 +79,7 @@ <Polish>Klucz, który powinien otworzyć większość pojazdów ZACHODU.</Polish> <Czech>Klíč který by měl otevřít většinou Západních vozidel.</Czech> <Hungarian>Egy kulcs, ami a NYUGAT egységeinek legtöbb járművét ki tudja nyitni.</Hungarian> - <Russian>Ключ для открытия большинства машин Запада.</Russian> + <Russian>Ключ для открытия большинства машин Красных.</Russian> </Key> <Key ID="STR_ACE_Vehicle_Item_East_Description"> <English>A key that should open most EAST vehicle.</English> @@ -89,7 +89,7 @@ <Polish>Klucz, który powinien otworzyć większość pojazdów WSCHODU.</Polish> <Hungarian>Egy kulcs, ami a KELET egységeinek legtöbb járművét ki tudja nyitni.</Hungarian> <Czech>Klíč který by měl otevřít vetšinu Východních vozidel.</Czech> - <Russian>Ключ для открытия большинства машин Востока.</Russian> + <Russian>Ключ для открытия большинства машин Синих.</Russian> </Key> <Key ID="STR_ACE_Vehicle_Item_Indp_Description"> <English>A key that should open most INDEP vehicle.</English> @@ -112,4 +112,4 @@ <Russian>Ключ для открытия большинства машин Гражданских.</Russian> </Key> </Package> -</Project> +</Project> \ No newline at end of file diff --git a/addons/weaponselect/stringtable.xml b/addons/weaponselect/stringtable.xml index d534ecd29b..ae99f3e032 100644 --- a/addons/weaponselect/stringtable.xml +++ b/addons/weaponselect/stringtable.xml @@ -229,7 +229,7 @@ <Czech>Už nejsou granáty</Czech> <Portuguese>Não há granadas de fragmentação restantes</Portuguese> <Italian>Nessuna granata a frammentazione rimanente</Italian> - <Russian>Осколочныких гранат нет</Russian> + <Russian>Осколочных гранат нет</Russian> </Key> <Key ID="STR_ACE_WeaponSelect_NoMiscGrenadeLeft"> <English>No misc. grenades left</English> @@ -266,4 +266,4 @@ <Russian>Запустить дымовую завесу</Russian> </Key> </Package> -</Project> +</Project> \ No newline at end of file From af876e337018b9ecc1e97bbe012e464449fef81f Mon Sep 17 00:00:00 2001 From: ruPaladin <happyworm24@rambler.ru> Date: Fri, 17 Apr 2015 15:27:53 +0300 Subject: [PATCH 064/257] attach --- addons/attach/stringtable.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/attach/stringtable.xml b/addons/attach/stringtable.xml index db98c4fffc..fc419148f8 100644 --- a/addons/attach/stringtable.xml +++ b/addons/attach/stringtable.xml @@ -189,7 +189,7 @@ <Portuguese>%1<br/>Acoplada</Portuguese> <Italian>%1<br/>attaccata</Italian> <Hungarian>%1<br/>hozzácsatolva</Hungarian> - <Russian>%1<br/>присоединена</Russian> + <Russian>%1<br/>присоединен(-а)</Russian> </Key> <Key ID="STR_ACE_Attach_Item_Detached"> <English>%1<br/>Detached</English> @@ -201,7 +201,7 @@ <Portuguese>%1<br/>Separada</Portuguese> <Italian>%1<br/>staccata</Italian> <Hungarian>%1<br/>lecsatolva</Hungarian> - <Russian>%1<br/>отсоединена</Russian> + <Russian>%1<br/>отсоединен(-а)</Russian> </Key> </Package> </Project> From b80ec3f7905bb11a0692b84ee86b67b50bc267de Mon Sep 17 00:00:00 2001 From: ruPaladin <happyworm24@rambler.ru> Date: Fri, 17 Apr 2015 15:57:25 +0300 Subject: [PATCH 065/257] ballistics russian fixes + multilanguage fix --- addons/ballistics/stringtable.xml | 90 +++++++++++++++++++++++++++++-- 1 file changed, 87 insertions(+), 3 deletions(-) diff --git a/addons/ballistics/stringtable.xml b/addons/ballistics/stringtable.xml index c95da8d760..cfe91258d5 100644 --- a/addons/ballistics/stringtable.xml +++ b/addons/ballistics/stringtable.xml @@ -445,6 +445,7 @@ <Polish>Taśma .338 NM 130rd Smugacz</Polish> <French>Bande .338 NM 130Cps Traçante</French> <Spanish>Cinta de 130 balas trazadoras de .338 NM</Spanish> + <Russian>Лента из 130-ти .338 NM трассирующих</Russian> </Key> <Key ID="STR_ACE_130Rnd_338_Mag_TracerNameShort"> <English>.338 NM Tracer</English> @@ -453,6 +454,7 @@ <Czech>.338 NM Svítící</Czech> <French>.338 NM Traçante</French> <Spanish>.338 NM trazadora</Spanish> + <Russian>.338 NM трассирующие</Russian> </Key> <Key ID="STR_ACE_130Rnd_338_Mag_TracerDescription"> <English>Caliber: .338 Norma Magnum Tracer<br />Rounds: 130<br />Used in: SPMG</English> @@ -460,6 +462,7 @@ <Polish>Kaliber: .338 Norma Magnum Smugacz<br />Pociski: 130<br />Używany w: SPMG</Polish> <French>Calibre: .338 Norma Magnum Traçante<br />Cartouches: 130<br />Utilisé dans: SPMG</French> <Spanish>Calibre: .338 Norma Magnum trazadora<br />Balas: 130<br />Se usa en: SPMG</Spanish> + <Russian>Калибр: .338 Norma Magnum трассирующие<br />Патронов: 130<br />Применимы в: SPMG</Russian> </Key> <Key ID="STR_ACE_130Rnd_338_Mag_Tracer_DimName"> <English>.338 NM 130Rnd IR-DIM Belt</English> @@ -467,6 +470,7 @@ <Polish>Taśma .338 NM 130rd IR-DIM</Polish> <French>Bande .338 NM 130Cps IR-DIM</French> <Spanish>Cinta de 130 balas IR-DIM de .338 NM</Spanish> + <Russian>Лента из 130-ти .338 NM трассирующих под ПНВ</Russian> </Key> <Key ID="STR_ACE_130Rnd_338_Mag_Tracer_DimNameShort"> <English>.338 NM IR-DIM</English> @@ -475,6 +479,7 @@ <Czech>.338 NM IR-DIM</Czech> <French>.338 NM IR-DIM</French> <Spanish>.338 NM IR-DIM</Spanish> + <Russian>.338 NM трассирующих под ПНВ</Russian> </Key> <Key ID="STR_ACE_130Rnd_338_Mag_Tracer_DimDescription"> <English>Caliber: .338 Norma Magnum Tracer IR-DIM<br />Rounds: 130<br />Used in: SPMG</English> @@ -482,6 +487,7 @@ <Polish>Kaliber: .338 Norma Magnum Smugacz IR-DIM<br />Pociski: 130<br />Używany w: SPMG</Polish> <French>Calibre: .338 Norma Magnum Traçante IR-DIM<br />Cartouches: 130<br />Utilisé dans: SPMG</French> <Spanish>Calibre: .338 Norma Magnum trazadora IR-DIM<br />Balas: 130<br />Se usa en: SPMG</Spanish> + <Russian>Калибр: .338 Norma Magnum трассирующие под ПНВ<br />Патронов: 130<br />Применимы в: SPMG</Russian> </Key> <Key ID="STR_ACE_130Rnd_338_Mag_APName"> <English>.338 NM 130Rnd AP Belt</English> @@ -489,6 +495,7 @@ <Polish>Taśma .338 NM 130rd AP</Polish> <French>Bande .338 NM 130Cps AP</French> <Spanish>Cinta de 130 balas AP de .338 NM</Spanish> + <Russian>Лента из 130-ти .338 NM бронебойных</Russian> </Key> <Key ID="STR_ACE_130Rnd_338_Mag_APNameShort"> <English>.338 NM AP</English> @@ -497,6 +504,7 @@ <Czech>.338 NM AP</Czech> <French>.338 NM AP</French> <Spanish>.338 NM AP</Spanish> + <Russian>.338 NM бронебойные</Russian> </Key> <Key ID="STR_ACE_130Rnd_338_Mag_APDescription"> <English>Caliber: .338 Norma Magnum AP<br />Rounds: 130<br />Used in: SPMG</English> @@ -504,6 +512,7 @@ <Polish>Kaliber: .338 Norma Magnum AP<br />Pociski: 130<br />Używane w: SPMG</Polish> <French>Calibre: .338 Norma Magnum AP<br />Cartouches: 130<br />Utilisé dans: SPMG</French> <Spanish>Calibre: .338 Norma Magnum AP<br />Balas: 130<br />Se usa en: SPMG</Spanish> + <Russian>Калибр: .338 Norma Magnum бронебойные<br />Патронов: 130<br />Применимы в: SPMG</Russian> </Key> <!-- 9.3x64mm 10Rnd --> <Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_TracerName"> @@ -512,6 +521,7 @@ <Polish>Magazynek 9.3mm 10rd Smugacz</Polish> <French>Chargeur 9.3mm 10Cps Traçante</French> <Spanish>Cargador de 10 balas trazadoras de 9.3mm</Spanish> + <Russian>Магазин из 10-ти 9.3 мм трассирующих</Russian> </Key> <Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_TracerNameShort"> <English>9.3mm Tracer</English> @@ -520,6 +530,7 @@ <Czech>9.3mm Svítící</Czech> <French>9.3mm Traçante</French> <Spanish>9.3mm trazadora</Spanish> + <Russian>9.3 мм трассирующие</Russian> </Key> <Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_TracerDescription"> <English>Caliber: 9.3x64mm Tracer<br />Rounds: 10<br />Used in: Cyrus</English> @@ -527,6 +538,7 @@ <Polish>Kaliber: 9,3x64 mm Smugacz<br />Pociski: 10<br />Używany w: Cyrus</Polish> <French>Calibre: 9.3x64mm Traçante<br />Cartouches: 10<br />Utilisé dans: Cyrus</French> <Spanish>Calibre: 9.3x64mm trazadora<br />Balas: 10<br />Se usa en: Cyrus</Spanish> + <Russian>Калибр: 9.3x64 мм трассирующие<br />Патронов: 10<br />Применимы в: Cyrus</Russian> </Key> <Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_Tracer_DimName"> <English>9.3mm 10Rnd Tracer IR-DIM Mag</English> @@ -534,6 +546,7 @@ <Polish>Magazynek 9,3mm 10rd Smugacz IR-DIM</Polish> <French>Chargeur 9.3mm 10Cps Traçante IR-DIM</French> <Spanish>Cargador de 10 balas trazadoras IR-DIM de 9.3mm</Spanish> + <Russian>Магазин из 10-ти 9.3 мм трассирующих под ПНВ</Russian> </Key> <Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_Tracer_DimNameShort"> <English>9.3mm IR-DIM</English> @@ -542,6 +555,7 @@ <Czech>9.3mm IR-DIM</Czech> <French>9.3mm IR-DIM</French> <Spanish>9.3mm IR-DIM</Spanish> + <Russian>9.3 мм трассирующие под ПНВ</Russian> </Key> <Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_Tracer_DimDescription"> <English>Caliber: 9.3x64mm Tracer IR-DIM<br />Rounds: 10<br />Used in: Cyrus</English> @@ -549,6 +563,7 @@ <Polish>Kaliber: 9,3x64 mm Smugacz IR-DIM<br />Pociski: 10<br />Używany w: Cyrus</Polish> <French>Calibre: 9.3x64mm Traçante IR-DIM<br />Cartouches: 10<br />Utilisé dans: Cyrus</French> <Spanish>Calibre: 9.3x64mm trazadora IR-DIM<br />Balas: 10<br />Se usa en: Cyrus</Spanish> + <Russian>Калибр: 9.3x64 мм трассирующие под ПНВ<br />Патронов: 10<br />Применимы в: Cyrus</Russian> </Key> <Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_APName"> <English>9.3mm 10Rnd AP Mag</English> @@ -556,6 +571,7 @@ <Polish>Magazynek 9,3mm 10rd AP</Polish> <French>Chargeur 9.3mm 10Cps AP</French> <Spanish>Cargador de 10 balas AP de 9.3mm</Spanish> + <Russian>Магазин из 10-ти 9.3 мм бронебойных</Russian> </Key> <Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_APNameShort"> <English>9.3mm AP</English> @@ -564,6 +580,7 @@ <Czech>9.3mm AP</Czech> <French>9.3mm AP</French> <Spanish>9.3mm AP</Spanish> + <Russian>9.3 мм бронебойные</Russian> </Key> <Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_APDescription"> <English>Caliber: 9.3x64mm AP<br />Rounds: 10<br />Used in: Cyrus</English> @@ -571,6 +588,7 @@ <Polish>Kaliber: 9,3x64 mm AP<br />Pociski: 10<br />Używany w: Cyrus</Polish> <French>Calibre: 9.3x64mm AP<br />Cartouches: 10<br />Utilisé dans: Cyrus</French> <Spanish>Calibre: 9.3x64mm AP<br />Balas: 10<br />Se usa en: Cyrus</Spanish> + <Russian>Калибр: 9.3x64 мм бронебойные<br />Патронов: 10<br />Применимы в: Cyrus</Russian> </Key> <!-- 9.3x64mm 150Rnd Belt--> <Key ID="STR_ACE_150Rnd_93x64_Mag_TracerName"> @@ -579,6 +597,7 @@ <Polish>Taśma 9,3mm 150rd Smugacz</Polish> <French>Bande 9.3mm 150Cps Traçante</French> <Spanish>Cinta de 150 balas trazadoras de 9.3mm</Spanish> + <Russian>Лента из 150-ти 9.3 мм трассирующих</Russian> </Key> <Key ID="STR_ACE_150Rnd_93x64_Mag_TracerNameShort"> <English>9.3mm Tracer</English> @@ -587,6 +606,7 @@ <Czech>9.3mm Svítící</Czech> <French>9.3mm Traçante</French> <Spanish>9.3mm trazadora</Spanish> + <Russian>9.3 мм трассирующие</Russian> </Key> <Key ID="STR_ACE_150Rnd_93x64_Mag_TracerDescription"> <English>Caliber: 9.3x64mm Tracer<br />Rounds: 150<br />Used in: Navid</English> @@ -594,6 +614,7 @@ <Polish>Kaliber: 9,3x64 mm Smugacz<br />Pociski: 150<br />Używane w: Navid</Polish> <French>Calibre: 9.3x64mm Traçante<br />Cartouches: 150<br />Utilisé dans: Navid</French> <Spanish>Calibre: 9.3x64mm trazadora<br />Balas: 150<br />Se usa en: Navid</Spanish> + <Russian>Калибр: 9.3x64 мм трассирующие<br />Патронов: 150<br />Применимы в: Navid</Russian> </Key> <Key ID="STR_ACE_150Rnd_93x64_Mag_Tracer_DimName"> <English>9.3mm 150Rnd Tracer IR-DIM Belt</English> @@ -601,6 +622,7 @@ <Polish>Taśma 9,3mm 150rd Smugacz IR-DIM</Polish> <French>Bande 9.3mm 150Cps Traçante IR-DIM</French> <Spanish>Cinta de 150 balas trazadoras IR-DIM de 9.3mm</Spanish> + <Russian>Лента из 150-ти 9.3 мм трассирующих под ПНВ</Russian> </Key> <Key ID="STR_ACE_150Rnd_93x64_Mag_Tracer_DimNameShort"> <English>9.3mm IR-DIM</English> @@ -609,6 +631,7 @@ <Czech>9.3mm IR-DIM</Czech> <French>9.3mm IR-DIM</French> <Spanish>9.3mm IR-DIM</Spanish> + <Russian>9.3 мм трассирующие под ПНВ</Russian> </Key> <Key ID="STR_ACE_150Rnd_93x64_Mag_Tracer_DimDescription"> <English>Caliber: 9.3x64mm Tracer IR-DIM<br />Rounds: 150<br />Used in: Navid</English> @@ -616,6 +639,7 @@ <Polish>Kaliber: 9,3x64 mm Smugacz IR-DIM<br />Pociski: 150<br />Używane w: Navid</Polish> <French>Calibre: 9.3x64mm Traçante IR-DIM<br />Cartouches: 150<br />Utilisé dans: Navid</French> <Spanish>Calibre: 9.3x64mm trazadora IR-DIM<br />Balas: 150<br />Se usa en: Navid</Spanish> + <Russian>Калибр: 9.3x64 мм трассирующие под ПНВ<br />Патронов: 150<br />Применимы в: Navid</Russian> </Key> <Key ID="STR_ACE_150Rnd_93x64_Mag_APName"> <English>9.3mm 150Rnd AP Belt</English> @@ -623,6 +647,7 @@ <Polish>Taśma 9,3mm 150rd AP</Polish> <French>Bande 9.3mm 150Cps AP</French> <Spanish>Cinta de 150 balas AP de 9.3mm</Spanish> + <Russian>Лента из 150-ти 9.3 мм бронебойных</Russian> </Key> <Key ID="STR_ACE_150Rnd_93x64_Mag_APNameShort"> <English>9.3mm AP</English> @@ -631,6 +656,7 @@ <Czech>9.3mm AP</Czech> <French>9.3mm AP</French> <Spanish>9.3mm AP</Spanish> + <Russian>9.3 мм бронебойные</Russian> </Key> <Key ID="STR_ACE_150Rnd_93x64_Mag_APDescription"> <English>Caliber: 9.3x64mm AP<br />Rounds: 150<br />Used in: Navid</English> @@ -638,333 +664,391 @@ <Polish>Kaliber: 9,3x64 mm AP<br />Pociski: 150<br />Używane w: Navid</Polish> <French>Calibre: 9.3x64mm AP<br />Cartouches: 150<br />Utilisé dans: Navid</French> <Spanish>Calibre: 9.3x64mm AP<br />Balas: 150<br />Se usa en: Navid</Spanish> + <Russian>Калибр: 9.3x64 мм бронебойные<br />Патронов: 150<br />Применимы в: Navid</Russian> </Key> <Key ID="STR_ACE_16Rnd_9x19_mag_Name"> <English>9x19mm 16Rnd Mag</English> <Polish>Magazynek 9x19mm 16rd</Polish> <French>Chargeur 9x19mm 16Cps</French> <Spanish>Cargador de 16 balas de 9x19mm</Spanish> + <Russian>Магазин из 16-ти 9x19 мм патронов</Russian> </Key> <Key ID="STR_ACE_16Rnd_9x19_mag_NameShort"> <English>9x19mm</English> <Polish>9x19mm</Polish> <French>9x19mm</French> <Spanish>9x19mm</Spanish> + <Russian>9x19 мм патрон</Russian> </Key> <Key ID="STR_ACE_16Rnd_9x19_mag_Description"> - <English>9x19mm 30Rnd Mag</English> + <English>9x19mm 16Rnd Mag</English> <Polish>Magazynek 9x19mm 16rd</Polish> - <French>9x19mm 30Cps</French> + <French>9x19mm 16Cps</French> <Spanish>Cargador de 16 balas de 9x19mm</Spanish> + <Russian>Магазин из 16-ти 9x19 мм патронов</Russian> </Key> <Key ID="STR_ACE_30Rnd_9x19_mag_Name"> <English>9x19mm 30Rnd Mag</English> <Polish>Magazynek 9x19mm 30rd</Polish> <French>9x19mm 30Cps</French> <Spanish>Cargador de 30 balas de 9x19mm</Spanish> + <Russian>Магазин из 30-ти 9x19 мм патронов</Russian> </Key> <Key ID="STR_ACE_30Rnd_9x19_mag_NameShort"> <English>9x19mm</English> <Polish>9x19mm</Polish> <French>9x19mm</French> <Spanish>9x19mm</Spanish> + <Russian>9x19 мм патрон</Russian> </Key> <Key ID="STR_ACE_30Rnd_9x19_mag_Description"> <English>9x19mm 30Rnd Mag</English> <Polish>Magazynek 9x19mm 30rd</Polish> <French>9x19mm 30Cps</French> <Spanish>Cargador de 30 balas de 9x19mm</Spanish> + <Russian>Магазин из 30-ти 9x19 мм патронов</Russian> </Key> <Key ID="STR_ACE_10Rnd_762x54_Tracer_mag_Name"> <English>7.62x54mm 10Rnd Tracer IR-DIM Mag</English> <Polish>Magazynek 7,62x54 mm 10rd Smugacz IR-DIM</Polish> <French>Chargeur 7.62x54mm 10Rnd Traçante IR-DIM</French> <Spanish>Cargador de 10 balas trazadoras IR-DIM de 7.62x54mm</Spanish> + <Russian>Магазин из 10-ти 7.62x54 мм трассирующих под ПНВ</Russian> </Key> <Key ID="STR_ACE_10Rnd_762x54_Tracer_mag_NameShort"> <English>7.62mm IR-DIM</English> <Polish>7,62mm IR-DIM</Polish> <French>7.62mm IR-DIM</French> <Spanish>7.62mm IR-DIM</Spanish> + <Russian>7.62x54 мм трассирующие под ПНВ</Russian> </Key> <Key ID="STR_ACE_10Rnd_762x54_Tracer_mag_Description"> <English>7.62x54mm 10Rnd Tracer IR-DIM Mag</English> <Polish>Magazynek 7,62x54 mm 10rd Smugacz IR-DIM</Polish> <French>Chargeur 7.62x54mm 10Cps Traçante IR-DIM</French> <Spanish>Cargador de 10 balas trazadoras IR-DIM de 7.62x54mm</Spanish> + <Russian>Магазин из 10-ти 7.62x54 мм трассирующих под ПНВ</Russian> </Key> <Key ID="STR_ACE_100Rnd_65x39_caseless_mag_Tracer_DimName"> <English>6.5mm 100Rnd Tracer IR-DIM Mag</English> <Polish>Magazynek 6,5mm 100rd Smugacz IR-DIM</Polish> <French>Chargeur 6.5mm 100Rnd Traçante IR-DIM</French> <Spanish>Cargador de 100 balas trazadoras IR-DIM de 6.5mm</Spanish> + <Russian>Магазин из 100-та 6.5 мм трассирующих под ПНВ</Russian> </Key> <Key ID="STR_ACE_100Rnd_65x39_caseless_mag_Tracer_DimNameShort"> <English>6.5mm IR-DIM</English> <Polish>6,5mm IR-DIM</Polish> <French>6.5mm IR-DIM</French> <Spanish>6.5mm IR-DIM</Spanish> + <Russian>6.5 мм трассирующие под ПНВ</Russian> </Key> <Key ID="STR_ACE_100Rnd_65x39_caseless_mag_Tracer_DimDescription"> <English>6.5mm 100Rnd Tracer IR-DIM Mag</English> <Polish>Magazynek 6,5mm 100rd Smugacz IR-DIM</Polish> <French>Chargeur 6.5mm 100Rnd Traçante IR-DIM</French> <Spanish>Cargador de 100 balas trazadoras IR-DIM de 6.5mm</Spanish> + <Russian>Магазин из 100-та 6.5 мм трассирующих под ПНВ</Russian> </Key> <Key ID="STR_ACE_200Rnd_65x39_cased_Box_Tracer_DimName"> <English>6.5mm 200Rnd Tracer IR-DIM Belt</English> <Polish>Magazynek 6,5mm 200rd Smugacz IR-DIM</Polish> <French>Bande 6.5mm 200Rnd Traçante IR-DIM</French> <Spanish>Cinta de 200 balas trazadoras IR-DIM de 6.5mm</Spanish> + <Russian>Лента из 200-от 6.5 мм трассирующих под ПНВ</Russian> </Key> <Key ID="STR_ACE_200Rnd_65x39_cased_Box_Tracer_DimNameShort"> <English>6.5mm IR-DIM</English> <Polish>6,5mm IR-DIM</Polish> <French>6.5mm IR-DIM</French> <Spanish>6.5mm IR-DIM</Spanish> + <Russian>6.5 мм трассирующие под ПНВ</Russian> </Key> <Key ID="STR_ACE_200Rnd_65x39_cased_Box_Tracer_DimDescription"> <English>6.5mm 200Rnd Tracer IR-DIM Belt</English> <Polish>Magazynek 6,5mm 200rd Smugacz IR-DIM</Polish> <French>Bande 6.5mm 200Cps Traçante IR-DIM</French> <Spanish>Cinta de 200 balas trazadoras IR-DIM de 6.5mm</Spanish> + <Russian>Лента из 200-от 6.5 мм трассирующих под ПНВ</Russian> </Key> <Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk262_mag_Name"> <English>5.56mm 30Rnd Mag (Mk262)</English> <Polish>Magazynek 5,56mm 30rd Mk262</Polish> <French>5.56mm 30Cps (Mk262)</French> <Spanish>Cargador de 30 balas de 5.56mm (Mk262)</Spanish> + <Russian>Магазин из 30-ти 5.56 мм (Mk262)</Russian> </Key> <Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk262_mag_NameShort"> <English>5.56mm Mk262</English> <Polish>5,56mm Mk262</Polish> <French>5.56mm Mk262</French> <Spanish>5.56mm (Mk262)</Spanish> + <Russian>5.56 мм (Mk262) патрон</Russian> </Key> <Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk262_mag_Description"> <English>Caliber: 5.56x45 mm NATO (Mk262)<br />Rounds: 30</English> <Polish>Kaliber: 5,56x45 mm NATO (Mk262)<br />Pociski: 30</Polish> <French>Calibre: 5.56x45 mm NATO (Mk262)<br />Cartouches: 30</French> <Spanish>Calibre: 5.56x45 mm NATO (Mk262)<br />Balas: 30</Spanish> + <Russian>Калибр: 5.56x45 мм НАТО (Mk262)<br />Патронов: 30</Russian> </Key> <Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk318_mag_Name"> <English>5.56mm 30Rnd Mag (Mk318)</English> <Polish>Magazynek 5,56mm 30rd Mk318</Polish> <French>5.56mm 30Cps (Mk318)</French> <Spanish>Cargador de 30 balas de 5.56mm (Mk318)</Spanish> + <Russian>Магазин из 30-ти 5.56 мм (Mk318)</Russian> </Key> <Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk318_mag_NameShort"> <English>5.56mm Mk318</English> <Polish>5,56mm Mk318</Polish> <French>5.56mm Mk318</French> <Spanish>5.56mm (Mk318)</Spanish> + <Russian>5.56 мм (Mk318) патрон</Russian> </Key> <Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk318_mag_Description"> <English>Caliber: 5.56x45 mm NATO (Mk318)<br />Rounds: 30</English> <Polish>Kaliber: 5,56x45 mm NATO (Mk318)<br />Pociski: 30</Polish> <French>Calibre: 5.56x45 mm NATO (Mk318)<br />Cartouches: 30</French> <Spanish>Calibre: 5.56x45 mm NATO (Mk318)<br />Balas: 30</Spanish> + <Russian>Калибр: 5.56x45 мм НАТО (Mk318)<br />Патронов: 30</Russian> </Key> <Key ID="STR_ACE_10Rnd_762x51_M118LR_Mag_Name"> <English>7.62mm 10Rnd Mag (M118LR)</English> <Polish>Magazynek 7,62mm 10rd (M118LR)</Polish> <French>7.62mm 10Cps (M118LR)</French> <Spanish>Cargador de 10 balas de 7.62mm (M118LR)</Spanish> + <Russian>Магазин из 10-ти 7.62 мм (M118LR)</Russian> </Key> <Key ID="STR_ACE_10Rnd_762x51_M118LR_Mag_NameShort"> <English>7.62mm M118LR</English> <Polish>7,62mm M118LR</Polish> <French>7.62mm M118LR</French> <Spanish>7.62mm (M118LR)</Spanish> + <Russian>7.62 мм (M118LR) патрон</Russian> </Key> <Key ID="STR_ACE_10Rnd_762x51_M118LR_Mag_Description"> <English>Caliber: 7.62x51 mm NATO (M118LR)<br />Rounds: 10</English> <Polish>Kaliber: 7,62x51 mm NATO (M118LR)<br />Pociski: 10</Polish> <French>Calibre: 7.62x51 mm NATO (M118LR)<br />Cartouches: 10</French> <Spanish>Calibre: 7.62x51 mm NATO (M118LR)<br />Balas: 10</Spanish> + <Russian>Калибр: 7.62x51 мм НАТО (M118LR)<br />Патронов: 10</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x51_M118LR_Mag_Name"> <English>7.62mm 20Rnd Mag (M118LR)</English> <Polish>Magazynek 7,62mm 20rd (M118LR)</Polish> <French>7.62mm 20Cps (M118LR)</French> <Spanish>Cargador de 20 balas de 7.62mm (M118LR)</Spanish> + <Russian>Магазин из 20-ти 7.62 мм (M118LR)</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x51_M118LR_Mag_NameShort"> <English>7.62mm M118LR</English> <Polish>7,62mm M118LR</Polish> <French>7.62mm M118LR</French> <Spanish>7.62mm (M118LR)</Spanish> + <Russian>7.62 мм (M118LR) патрон</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x51_M118LR_Mag_Description"> <English>Caliber: 7.62x51 mm NATO (M118LR)<br />Rounds: 20</English> <Polish>Kaliber: 7,62x51 mm NATO (M118LR)<br />Pociski: 20</Polish> <French>Calibre: 7.62x51 mm NATO (M118LR)<br />Cartouches: 20</French> <Spanish>Calibre: 7.62x51 mm NATO (M118LR)<br />Balas: 20</Spanish> + <Russian>Калибр: 7.62x51 мм НАТО (M118LR)<br />Патронов: 20</Russian> </Key> <Key ID="STR_ACE_10Rnd_762x51_Mk319_Mod_0_Mag_Name"> <English>7.62mm 10Rnd Mag (Mk319 Mod 0)</English> <Polish>Magazynek 7,62mm 10rd (Mk319 Mod 0)</Polish> <French>7.62mm 10Cps (Mk319 Mod 0)</French> <Spanish>Cargador de 10 balas de 7.62mm (Mk319 Mod 0)</Spanish> + <Russian>Магазин из 10-ти 7.62 мм (Mk319 Mod 0)</Russian> </Key> <Key ID="STR_ACE_10Rnd_762x51_Mk319_Mod_0_Mag_NameShort"> <English>7.62mm Mk319</English> <Polish>7,62mm Mk319</Polish> <French>7.62mm Mk319</French> <Spanish>7.62mm Mk319</Spanish> + <Russian>7.62 мм Mk319 патрон</Russian> </Key> <Key ID="STR_ACE_10Rnd_762x51_Mk319_Mod_0_Mag_Description"> <English>Caliber: 7.62x51 mm NATO (Mk319 Mod 0)<br />Rounds: 10</English> <Polish>Kaliber: 7,62x51 mm NATO (Mk319 Mod 0)<br />Pociski: 10</Polish> <French>Calibre: 7.62x51 mm NATO (Mk319 Mod 0)<br />Cartouches: 10</French> <Spanish>Calibre: 7.62x51 mm NATO (Mk319 Mod 0)<br />Balas: 10</Spanish> + <Russian>Калибр: 7.62x51 мм НАТО (Mk319 Mod 0)<br />Патронов: 10</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x51_Mk319_Mod_0_Mag_Name"> <English>7.62mm 20Rnd Mag (Mk319 Mod 0)</English> <Polish>Magazynek 7,62mm 20rd (Mk319 Mod 0)</Polish> <French>7.62mm 20Cps (Mk319 Mod 0)</French> <Spanish>Cargador de 20 balas de 7.62mm (Mk319 Mod 0)</Spanish> + <Russian>Магазин из 20-ти 7.62 мм (Mk319 Mod 0)</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x51_Mk319_Mod_0_Mag_NameShort"> <English>7.62mm Mk319</English> <Polish>7,62mm Mk319</Polish> <French>7.62mm Mk319</French> <Spanish>7.62mm Mk319</Spanish> + <Russian>7.62 мм Mk319 патрон</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x51_Mk319_Mod_0_Mag_Description"> <English>Caliber: 7.62x51 mm NATO (Mk319 Mod 0)<br />Rounds: 20</English> <Polish>Kaliber: 7,62x51 mm NATO (Mk319 Mod 0)<br />Pociski: 20</Polish> <French>Calibre: 7.62x51 mm NATO (Mk319 Mod 0)<br />Cartouches: 20</French> <Spanish>Calibre: 7.62x51 mm NATO (Mk319 Mod 0)<br />Balas: 20</Spanish> + <Russian>Калибр: 7.62x51 мм НАТО (Mk319 Mod 0)<br />Патронов: 20</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x67_Mk248_Mod_0_Mag_Name"> <English>7.62mm 20Rnd Mag (Mk248 Mod 0)</English> <Polish>Magazynek 7,62mm 20rd (Mk248 Mod 0)</Polish> <French>7.62mm 20Cps (Mk248 Mod 0)</French> <Spanish>Cargador de 20 balas de 7.62mm (Mk248 Mod 0)</Spanish> + <Russian>Магазин из 20-ти 7.62 мм (Mk248 Mod 0)</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x67_Mk248_Mod_0_Mag_NameShort"> <English>7.62mm (Mk248 Mod 0)</English> <Polish>7,62mm (Mk248 Mod 0)</Polish> <French>7.62mm (Mk248 Mod 0)</French> <Spanish>7.62mm (Mk248 Mod 0)</Spanish> + <Russian>7.62 мм (Mk248 Mod 0) патрон</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x67_Mk248_Mod_0_Mag_Description"> <English>Caliber: 7.62x67 mm NATO (Mk248 Mod 0)<br />Rounds: 20</English> <Polish>Kaliber: 7,62x67 mm NATO (Mk248 Mod 0)<br />Pociski: 20</Polish> <French>Calibre: 7.62x67mm NATO (Mk248 Mod 0)<br />Cartouches: 20</French> <Spanish>Calibre: 7.62x67 mm NATO (Mk248 Mod 0)<br />Balas: 20</Spanish> + <Russian>Калибр: 7.62x67 мм НАТО (Mk248 Mod 0)<br />Патронов: 20</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x67_Mk248_Mod_1_Mag_Name"> <English>7.62mm 20Rnd Mag (Mk248 Mod 1)</English> <Polish>Magazynek 7,62mm 20rd (Mk248 Mod 1)</Polish> <French>7.62mm 20Cps (Mk248 Mod 1)</French> <Spanish>Cargador de 20 balas de 7.62mm (Mk248 Mod 1)</Spanish> + <Russian>Магазин из 20-ти 7.62 мм (Mk248 Mod 1)</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x67_Mk248_Mod_1_Mag_NameShort"> <English>7.62mm (Mk248 Mod 1)</English> <Polish>7,62mm (Mk248 Mod 1)</Polish> <French>7.62mm (Mk248 Mod 1)</French> <Spanish>7.62mm (Mk248 Mod 1)</Spanish> + <Russian>7.62 мм (Mk248 Mod 1) патрон</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x67_Mk248_Mod_1_Mag_Description"> <English>Caliber: 7.62x67 mm NATO (Mk248 Mod 1)<br />Rounds: 20</English> <Polish>Kaliber: 7,62x67 mm NATO (Mk248 Mod 1)<br />Pociski: 20</Polish> <French>Calibre: 7.62x67mm NATO (Mk248 Mod 1)<br />Cartouches: 20</French> <Spanish>Calibre: 7.62x67 mm NATO (Mk248 Mod 1)<br />Balas: 20</Spanish> + <Russian>Калибр: 7.62x67 мм НАТО (Mk248 Mod 1)<br />Патронов: 20</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x67_Berger_Hybrid_OTM_Mag_Name"> <English>7.62mm 20Rnd Mag (Berger Hybrid OTM)</English> <Polish>Magazynek 7,62mm 20rd (Berger Hybrid OTM)</Polish> <French>7.62 20Cps (Berger Hybrid OTM)</French> <Spanish>Cargador de 20 balas de 7.62mm (Berger Hybrid OTM)</Spanish> + <Russian>Магазин из 20-ти 7.62 мм (Berger Hybrid OTM)</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x67_Berger_Hybrid_OTM_Mag_NameShort"> <English>7.62mm (OTM)</English> <Polish>7,62mm (OTM)</Polish> <French>7.62mm (OTM)</French> <Spanish>7.62mm (OTM)</Spanish> + <Russian>7.62 мм (OTM) патрон</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x67_Berger_Hybrid_OTM_Mag_Description"> <English>Caliber: 7.62x67 mm NATO (Berger Hybrid OTM)<br />Rounds: 20</English> <Polish>Kaliber: 7,62x67 mm NATO (Berger Hybrid OTM)<br />Pociski: 20</Polish> <French>Calibre: 7.62x67mm NATO (Berger Hybrid OTM)<br />Cartouches: 20</French> <Spanish>Calibre: 7.62x67 mm NATO (Berger Hybrid OTM)<br />Balas: 20</Spanish> + <Russian>Калибр: 7.62x67 мм НАТО (Berger Hybrid OTM)<br />Патронов: 20</Russian> </Key> <Key ID="STR_ACE_30Rnd_65x47_Scenar_mag_Name"> <English>6.5x47mm 30Rnd Mag (HPBT Scenar)</English> <French>6.5x47mm 30Cps (HPBT Scenar)</French> <Spanish>Cargador de 30 balas de 6.5x47mm (HPBT Scenar)</Spanish> + <Russian>Магазин из 30-ти 6.5x47 мм (HPBT Scenar)</Russian> </Key> <Key ID="STR_ACE_30Rnd_65x47_Scenar_mag_NameShort"> <English>6.5mm Scenar</English> <French>6.5mm Scenar</French> <Spanish>6.5mm Scenar</Spanish> + <Russian>6.5 мм (Scenar) патрон</Russian> </Key> <Key ID="STR_ACE_30Rnd_65x47_Scenar_mag_Description"> <English>Caliber: 6.5x47mm (HPBT Scenar)<br />Rounds: 30</English> <French>Calibre: 6.5x47mm (HPBT Scenar)<br />Cartouches: 30</French> <Spanish>Calibre: 6.5x47mm (HPBT Scenar)<br />Balas: 30</Spanish> + <Russian>Калибр: 6.5x47 мм (HPBT Scenar)<br />Патронов: 30</Russian> </Key> <Key ID="STR_ACE_10Rnd_338_300gr_HPBT_Mag_Name"> <English>.338 10Rnd Mag (300gr Sierra MatchKing HPBT)</English> <French>.338 10 Cps (300gr Sierra MatchKing HPBT)</French> <Spanish>Cargador de 10 balas de 8.6x70mm (300gr Sierra MatchKing HPBT)</Spanish> + <Russian>Магазин из 10-ти .338 (300gr Sierra MatchKing HPBT)</Russian> </Key> <Key ID="STR_ACE_10Rnd_338_300gr_HPBT_Mag_NameShort"> <English>.338 (HPBT)</English> <French>.338 (HPBT)</French> <Spanish>.338 (HPBT)</Spanish> + <Russian>.338 (HPBT) патрон</Russian> </Key> <Key ID="STR_ACE_10Rnd_338_300gr_HPBT_Mag_Description"> <English>Caliber: 8.6x70mm (300gr Sierra MatchKing HPBT)<br />Rounds: 10</English> <French>Calibre: 8.6x70mm (300gr Sierra MatchKing HPBT)<br />Cartouches: 10</French> <Spanish>Calibre: 8.6x70mm (300gr Sierra MatchKing HPBT)<br />Balas: 10</Spanish> + <Russian>Калибр: .338 (300gr Sierra MatchKing HPBT)<br />Патронов: 10</Russian> </Key> <Key ID="STR_ACE_10Rnd_338_API526_Mag_Name"> <English>.338 10Rnd Mag (API526)</English> <French>.338 10Cps (API526)</French> <Spanish>Cargador de 10 balas de .338 (API526)</Spanish> + <Russian>Магазин из 10-ти .338 (API526)</Russian> </Key> <Key ID="STR_ACE_10Rnd_338_API526_Mag_NameShort"> <English>.338 AP</English> <French>.338 AP</French> <Spanish>.338 AP</Spanish> + <Russian>.338 бронебойные</Russian> </Key> <Key ID="STR_ACE_10Rnd_338_API526_Mag_Description"> <English>Caliber: 8.6x70mm (API526)<br />Rounds: 10</English> <French>Calibre: 8.6x70mm (API526)<br />Cartouches: 10</French> <Spanish>Calibre: 8.6x70mm (API526)<br />Balas: 10</Spanish> + <Russian>Калибр: .338 (API526)<br />Патронов: 10</Russian> </Key> <Key ID="STR_ACE_5Rnd_127x99_Mag_Name"> <English>12.7x99mm 5Rnd Mag</English> <French>12.7x99mm 5Cps</French> <Spanish>Cargador de 5 balas de 12.7x99mm</Spanish> + <Russian>Магазин из 5-ти 12.7x99 мм патронов</Russian> </Key> <Key ID="STR_ACE_5Rnd_127x99_Mag_NameShort"> <English>12.7mm</English> <French>12.7mm</French> <Spanish>12.7mm</Spanish> + <Russian>12.7x99 мм патрон</Russian> </Key> <Key ID="STR_ACE_5Rnd_127x99_Mag_Description"> <English>Caliber: 12.7x99mm<br />Rounds: 5</English> <French>Calibre: 12.7x99mm<br />Cartouches: 5</French> <Spanish>Calibre: 12.7x99mm<br />Balas: 5</Spanish> + <Russian>Калибр: 12.7x99 мм<br />Патронов: 5</Russian> </Key> <Key ID="STR_ACE_5Rnd_127x99_AMAX_Mag_Name"> <English>12.7x99mm 5Rnd Mag (AMAX)</English> <French>12.7x99mm 5Rnd Mag (AMAX)</French> <Spanish>Cargador de 5 balas de 12.7x99mm (AMAX)</Spanish> + <Russian>Магазин из 5-ти 12.7x99 мм (AMAX)</Russian> </Key> <Key ID="STR_ACE_5Rnd_127x99_AMAX_Mag_NameShort"> <English>12.7mm</English> <French>12.7mm</French> <Spanish>12.7mm</Spanish> + <Russian>12.7x99 мм (AMAX)</Russian> </Key> <Key ID="STR_ACE_5Rnd_127x99_AMAX_Mag_Description"> <English>Caliber: 12.7x99mm (AMAX)<br />Rounds: 5</English> <French>Calibre: 12.7x99mm (AMAX)<br />Cartouches: 5</French> <Spanish>Calibre: 12.7x99mm (AMAX)<br />Balas: 5</Spanish> + <Russian>Калибр: 12.7x99 мм (AMAX)<br />Патронов: 5</Russian> </Key> </Package> -</Project> \ No newline at end of file +</Project> From 766321224b5d783b30daf9e4125df54d179c0975 Mon Sep 17 00:00:00 2001 From: ruPaladin <happyworm24@rambler.ru> Date: Fri, 17 Apr 2015 15:59:29 +0300 Subject: [PATCH 066/257] hearing --- addons/hearing/stringtable.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index f57bc2545a..20466db84d 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -31,7 +31,7 @@ <Spanish>Poner tapones</Spanish> <Polish>Włóż stopery</Polish> <Czech>Dát špunty do uší</Czech> - <Russian>Беруши надеты</Russian> + <Russian>Надеть беруши</Russian> <French>Bouchons mis</French> <Hungarian>Füldugó berakva</Hungarian> <Portuguese>Protetores colocados</Portuguese> @@ -43,7 +43,7 @@ <Spanish>Quitar tapones</Spanish> <Polish>Wyjmij stopery</Polish> <Czech>Vyndat špunty z uší</Czech> - <Russian>Беруши сняты</Russian> + <Russian>Снять беруши</Russian> <French>Bouchons enlevés</French> <Hungarian>Füldugó kivéve</Hungarian> <Portuguese>Protetores retirados</Portuguese> From a6e0cac734960ebd205cc0e2f9dfa13b31287240 Mon Sep 17 00:00:00 2001 From: ruPaladin <happyworm24@rambler.ru> Date: Fri, 17 Apr 2015 16:02:46 +0300 Subject: [PATCH 067/257] interact_menu (fixes to prevent text overlapping) --- addons/interact_menu/stringtable.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/interact_menu/stringtable.xml b/addons/interact_menu/stringtable.xml index 98cac6116a..ad1263b38c 100644 --- a/addons/interact_menu/stringtable.xml +++ b/addons/interact_menu/stringtable.xml @@ -5,7 +5,7 @@ <English>Always display cursor for self interaction</English> <German>Immer den Cursor für Selbst-Interaktionen anzeigen.</German> <Spanish>Mostrar siempre el cursor para la interacción propia</Spanish> - <Russian>Всегда показывать курсор для взаимодействия с собой</Russian> + <Russian>Показывать курсор (взаимодействия с собой)</Russian> <Czech>Zobrazit kurzor v menu pro vlastní interakci</Czech> <Polish>Zawsze wyświetlaj kursor dla własnej interakcji</Polish> <French>Toujours afficher le curseur pour les interactions sur soi-même</French> @@ -15,7 +15,7 @@ <Key ID="STR_ACE_Interact_Menu_UseListMenu"> <English>Display interaction menus as lists</English> <Spanish>Mostrar los menus de interacción como listas</Spanish> - <Russian>Показывать меню взаимодействия в виде списка</Russian> + <Russian>Меню взаимодействий в виде списка</Russian> <French>Afficher le menu d'interaction au format liste</French> <Italian>Mostra il menù di interazione come lista</Italian> <Polish>Wyświetlaj menu interakcji jako listę</Polish> From a4980a91e1d9ce81fa741e9c809deb0f63bc1eb4 Mon Sep 17 00:00:00 2001 From: ruPaladin <happyworm24@rambler.ru> Date: Fri, 17 Apr 2015 16:04:26 +0300 Subject: [PATCH 068/257] inventory (semantic correction) --- addons/inventory/stringtable.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/inventory/stringtable.xml b/addons/inventory/stringtable.xml index f1d1e70f9d..da132cc3f1 100644 --- a/addons/inventory/stringtable.xml +++ b/addons/inventory/stringtable.xml @@ -5,7 +5,7 @@ <English>Make Inventory Display Bigger</English> <German>Erhöhe die angezeigte Inventargröße</German> <Spanish>Hacer la pantalla de inventario mas grande</Spanish> - <Russian>Сделать окно инвентаря больше</Russian> + <Russian>Изменить размер окна инвентаря</Russian> <Czech>Zvětšit zobrazení inventáře</Czech> <Polish>Powiększ UI ekwipunku</Polish> <French>Agrandir la taille d'affichage de l'inventaire</French> @@ -16,7 +16,7 @@ <English>Normally inventory display is scaled by UI size. This allows scaling the Inventory UI size up, but doesn't increase font size allowing more rows displayed.</English> <German>Im Regelfall wird die Inventargröße durch die Größe der Nutzeroberfläche bestimmt. Diese Einstellung erlaubt es das Inventar unter Ausschluss der Schriftgröße zu vergrößern. Dadurch können mehr Gegenstände angezeigt werden.</German> <Spanish>Normalmente la pantalla de inventario se escala por el tamaño de la interfaz de usuario. Esto permite ampliar el tamaño de la interfaz de usuario de inventario, pero no aumenta el tamaño de fuente, permitiendo mostrar más filas.</Spanish> - <Russian>Обычно, окно инвентаря зависит от размеров пользовательского интерфейса. Эта настройка позволяет увеличить размер окна инвентаря в пользовательском интерфейсе, не увеличивая размера шрифтов, так что отображется большее количество строк.</Russian> + <Russian>Обычно, размер окна инвентаря зависит от размеров пользовательского интерфейса. Эта настройка позволяет увеличить размер окна инвентаря, не увеличивая размеры шрифтов, так что отображется большее количество строк.</Russian> <Czech>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.</Czech> <Polish>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.</Polish> <French>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</French> From 52dc5d66a47d22662d1be290007f36e24a68dc9c Mon Sep 17 00:00:00 2001 From: ruPaladin <happyworm24@rambler.ru> Date: Fri, 17 Apr 2015 16:09:17 +0300 Subject: [PATCH 069/257] nametags (fix text overlapping, semantic correct) --- addons/nametags/stringtable.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/nametags/stringtable.xml b/addons/nametags/stringtable.xml index 32eb35781b..c4e6f3315e 100644 --- a/addons/nametags/stringtable.xml +++ b/addons/nametags/stringtable.xml @@ -55,7 +55,7 @@ <Italian>Mostra i gradi (richiede i nomi dei giocatori abilitati)</Italian> <Portuguese>Mostrar patente de jogadores (requer nome de jogadores)</Portuguese> <Hungarian>Játékosok rendfokozatának mutatása (a nevek mutatása szükséges)</Hungarian> - <Russian>Показать звания игроков (требует имен игроков)</Russian> + <Russian>Показать звания игроков (имена обязательны)</Russian> </Key> <Key ID="STR_ACE_NameTags_ShowVehicleCrewInfo"> <English>Show vehicle crew info</English> @@ -71,7 +71,7 @@ <English>Show name tags for AI units</English> <German>Zeige Namen für KI Einheiten</German> <Spanish>Mostrar etiquetas de nombre para unidades IA </Spanish> - <Russian>Показывать именые метки ИИ</Russian> + <Russian>Показывать имена ботов</Russian> <Czech>Zobrazit jména AI</Czech> <Polish>Wyświetl imiona jednostek AI</Polish> <French>Afficher les noms des IA</French> @@ -81,7 +81,7 @@ <English>Show SoundWaves (requires player names)</English> <German>Zeigen Schallwellen (benötigt Spielernamen)</German> <Spanish>Mostrar onda sonora (requiere Mostrar nombres de jugadores)</Spanish> - <Russian>Показывать звуковые волны (требует имен игроков)</Russian> + <Russian>Индикатор разговора (имена обязательны)</Russian> <Czech>Zobrazit SoundWaves (vyžaduje jména hráčů)</Czech> <Polish>Pokaż fale dźwiękowe (wymagana opcja Pokaż imiona graczy)</Polish> <French>Afficher "qui parle" (si noms affichés)</French> From 874cc752713ce862062e5cf67dc7d6e3072945b6 Mon Sep 17 00:00:00 2001 From: ruPaladin <happyworm24@rambler.ru> Date: Fri, 17 Apr 2015 16:22:02 +0300 Subject: [PATCH 070/257] medical (semantic correction) --- addons/medical/stringtable.xml | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 9f651e90b7..e80be2fc65 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -369,7 +369,7 @@ <English>Give Blood IV (1000ml)</English> <German>Bluttransfusion IV (1000ml)</German> <Spanish>Dar Sangre IV (1000ml)</Spanish> - <Russian>Дать кровь для в/в вливания (1000 мл)</Russian> + <Russian>Перелить пакет крови (1000 мл)</Russian> <Polish>Podaj krew IV (1000ml)</Polish> <French>Administrer du Sang en IV (1000ml)</French> <Czech>Podat krev. transfúzi (1000ml)</Czech> @@ -380,7 +380,7 @@ <English>Give Blood IV (500ml)</English> <German>Bluttransfusion IV (500ml)</German> <Spanish>Dar Sangre IV (500ml)</Spanish> - <Russian>Дать кровь для в/в вливания (500 мл)</Russian> + <Russian>Перелить пакет крови (500 мл)</Russian> <Polish>Podaj krew IV (500ml)</Polish> <French>Administrer du Sang en IV (500ml)</French> <Czech>Podat krev. transfúzi (500ml) </Czech> @@ -391,7 +391,7 @@ <English>Give Blood IV (250ml)</English> <German>Bluttransfusion IV (250ml)</German> <Spanish>Dar Sangre IV (250ml)</Spanish> - <Russian>Дать кровь для в/в вливания (250 мл)</Russian> + <Russian>Перелить пакет крови (250 мл)</Russian> <Polish>Podaj krew IV (250ml)</Polish> <French>Administrer du Sang en IV (250ml)</French> <Czech>Podat krev. transfúzi (250ml)</Czech> @@ -402,7 +402,7 @@ <English>Give Plasma IV (1000ml)</English> <German>Plasmatransfusion IV (1000ml)</German> <Spanish>Dar Plasma IV (1000ml)</Spanish> - <Russian>Дать плазму для в/в вливания (1000 мл)</Russian> + <Russian>Перелить пакет плазмы (1000 мл)</Russian> <Polish>Podaj osocze IV (1000ml)</Polish> <French>Administrer du Plasma en IV (1000ml)</French> <Czech>Podat plazmu (1000ml)</Czech> @@ -413,7 +413,7 @@ <English>Give Plasma IV (500ml)</English> <German>Plasmatransfusion IV (500ml)</German> <Spanish>Dar Plasma IV (500ml)</Spanish> - <Russian>Дать плазму для в/в вливания (500 мл)</Russian> + <Russian>Перелить пакет плазмы (500 мл)</Russian> <Polish>Podaj osocze IV (500ml)</Polish> <French>Administrer du Plasma en IV (500ml)</French> <Czech>Podat plazmu (500ml)</Czech> @@ -424,7 +424,7 @@ <English>Give Plasma IV (250ml)</English> <German>Plasmatransfusion IV (250ml)</German> <Spanish>Dar Plasma IV (250ml)</Spanish> - <Russian>Дать плазму для в/в вливания (250 мл)</Russian> + <Russian>Перелить пакет плазмы (250 мл)</Russian> <Polish>Podaj osocze IV (250ml)</Polish> <French>Administrer du Plasma en IV (250ml)</French> <Czech>Podat plazmu (250ml)</Czech> @@ -435,7 +435,7 @@ <English>Give Saline IV (1000ml)</English> <German>Kochsaltzlösung IV (1000ml)</German> <Spanish>Dar Salino IV (1000ml)</Spanish> - <Russian>Дать физраствор для в/в вливания (1000 мл)</Russian> + <Russian>Перелить пакет физраствора (1000 мл)</Russian> <Polish>Podaj solankę IV (1000ml)</Polish> <French>Administrer de la Solution Saline en IV (1000ml)</French> <Czech>Podaz fyz. roztok (1000ml)</Czech> @@ -446,7 +446,7 @@ <English>Give Saline IV (500ml)</English> <German>Kochsaltzlösung IV (500ml)</German> <Spanish>Dar Salino IV (500ml)</Spanish> - <Russian>Дать физраствор для в/в вливания (500 мл)</Russian> + <Russian>Перелить пакет физраствора (500 мл)</Russian> <Polish>Podaj solankę IV (500ml)</Polish> <French>Administrer de la Solution Saline en IV (500ml)</French> <Czech>Podaz fyz. roztok (500ml)</Czech> @@ -457,7 +457,7 @@ <English>Give Saline IV (250ml)</English> <German>Kochsaltzlösung IV (250ml)</German> <Spanish>Dar Salino IV (250ml)</Spanish> - <Russian>Дать физраствор для в/в вливания (250 мл)</Russian> + <Russian>Перелить пакет физраствора (250 мл)</Russian> <Polish>Podaj solankę IV (250ml)</Polish> <French>Administrer de la Solution Saline en IV (250ml)</French> <Czech>Podaz fyz. roztok (250ml)</Czech> @@ -468,7 +468,7 @@ <English>Minor</English> <German>Gering</German> <Spanish>Menor</Spanish> - <Russian>Незначительная</Russian> + <Russian>Легкие ранения</Russian> <Polish>Normalny</Polish> <French>Mineur</French> <Czech>Minimální</Czech> @@ -478,7 +478,7 @@ <Key ID="STR_ACE_MEDICAL_TRIAGE_STATUS_DELAYED"> <English>Delayed</English> <Spanish>Retrasado</Spanish> - <Russian>Груз 300</Russian> + <Russian>Средние ранения</Russian> <Polish>Opóźniony</Polish> <French>Différé</French> <German>Verzögert</German> @@ -489,7 +489,7 @@ <Key ID="STR_ACE_MEDICAL_TRIAGE_STATUS_IMMEDIATE"> <English>Immediate</English> <Spanish>Inmediato</Spanish> - <Russian>Помощь отложена</Russian> + <Russian>Тяжелые ранения</Russian> <Polish>Natychmiastowy</Polish> <French>Urgence Immédiate</French> <German>Sofort</German> @@ -500,7 +500,7 @@ <Key ID="STR_ACE_MEDICAL_TRIAGE_STATUS_DECEASED"> <English>Deceased</English> <Spanish>Fallecido</Spanish> - <Russian>Груз 200</Russian> + <Russian>Труп</Russian> <Polish>Nie żyje</Polish> <French>Décédé</French> <German>Verstorben</German> @@ -511,7 +511,7 @@ <Key ID="STR_ACE_MEDICAL_TRIAGE_STATUS_NONE"> <English>None</English> <Spanish>Ninguno</Spanish> - <Russian>Нет</Russian> + <Russian>Отсутствует</Russian> <Polish>Brak</Polish> <French>Aucun</French> <German>Keine</German> @@ -1590,7 +1590,7 @@ <English>Pain Effect Type</English> <German>Schmerzeffekt-Typ</German> <Polish>Rodzaj efektu bólu</Polish> - <Russian>Вид боли</Russian> + <Russian>Эффект боли</Russian> <Italian>Pain Effect Type</Italian> <Spanish>Tipo de efecto de dolor</Spanish> </Key> @@ -1598,7 +1598,7 @@ <English>Colour Flashing</English> <German>Farbblinken</German> <Polish>Pulsujące kolory</Polish> - <Russian>Разноцветные вспышки</Russian> + <Russian>Пульсирующий свет</Russian> <Italian>Colore lampeggiante</Italian> <Spanish>Parpadeo de color</Spanish> </Key> From 469dafd0c086d0cd463b1505245b99923118c9ff Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Fri, 17 Apr 2015 07:25:49 -0700 Subject: [PATCH 071/257] tab --- addons/laser/CfgVehicles.hpp | 2 +- addons/laser/RscInGameUI.hpp | 232 +++++++++++++++++------------------ 2 files changed, 117 insertions(+), 117 deletions(-) diff --git a/addons/laser/CfgVehicles.hpp b/addons/laser/CfgVehicles.hpp index 1e83f66cc9..23eb00c37c 100644 --- a/addons/laser/CfgVehicles.hpp +++ b/addons/laser/CfgVehicles.hpp @@ -5,7 +5,7 @@ class CfgVehicles { // @TODO: Changing the model and simulation hides it, but THEN IT DOESNT SPAWN WTF!? model = "\A3\Weapons_F\empty.p3d"; destrType = "DestructNo"; - simulation = "house"; + simulation = "house"; class EventHandlers { init = QUOTE(_this call FUNC(laser_init)); diff --git a/addons/laser/RscInGameUI.hpp b/addons/laser/RscInGameUI.hpp index d3dfaa5d43..d87136c960 100644 --- a/addons/laser/RscInGameUI.hpp +++ b/addons/laser/RscInGameUI.hpp @@ -6,118 +6,118 @@ class RscMapControl; class RscInGameUI { class RscOptics_LaserDesignator { - idd = 300; - controls[] = {"CA_IGUI_elements_group"}; + idd = 300; + controls[] = {"CA_IGUI_elements_group"}; onLoad = "uiNameSpace setVariable ['ACE_RscOptics_LaserDesignator',(_this select 0)];"; onUnload = "uiNameSpace setVariable ['ACE_RscOptics_LaserDesignator',nil];"; - class CA_IGUI_elements_group: RscControlsGroup { - idc = 170; + class CA_IGUI_elements_group: RscControlsGroup { + idc = 170; - x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))"; - y = "0 * (0.025 * SafezoneH) + (SafezoneY)"; - w = "53.5 * (0.01875 * SafezoneH)"; - h = "40 * (0.025 * SafezoneH)"; - class VScrollbar: VScrollbar { - width = 0; - }; - class HScrollbar: HScrollbar { - height = 0; - }; + x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))"; + y = "0 * (0.025 * SafezoneH) + (SafezoneY)"; + w = "53.5 * (0.01875 * SafezoneH)"; + h = "40 * (0.025 * SafezoneH)"; + class VScrollbar: VScrollbar { + width = 0; + }; + class HScrollbar: HScrollbar { + height = 0; + }; class controls { - class CA_OpticsZoom: RscText { - idc = 180; - style = 1; - colorText[] = {0.706,0.0745,0.0196,1}; - sizeEx = "0.038*SafezoneH"; - shadow = 0; - font = "EtelkaMonospacePro"; - text = "4.5"; - x = "43.85 * (0.01875 * SafezoneH)"; - y = "19.6 * (0.025 * SafezoneH)"; - w = "4.5 * (0.01875 * SafezoneH)"; - h = "1.1 * (0.025 * SafezoneH)"; - }; + class CA_OpticsZoom: RscText { + idc = 180; + style = 1; + colorText[] = {0.706,0.0745,0.0196,1}; + sizeEx = "0.038*SafezoneH"; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "4.5"; + x = "43.85 * (0.01875 * SafezoneH)"; + y = "19.6 * (0.025 * SafezoneH)"; + w = "4.5 * (0.01875 * SafezoneH)"; + h = "1.1 * (0.025 * SafezoneH)"; + }; class ACE_Distance: RscText { - idc = 123002; - style = 0; - sizeEx = "0.038*SafezoneH"; - colorText[] = {0.706,0.0745,0.0196,1}; - shadow = 0; - font = "EtelkaMonospacePro"; - text = "2456"; - x = "24.6 * (0.01875 * SafezoneH)"; - y = "3 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "1.5 * (0.025 * SafezoneH)"; - }; - class CA_Distance: RscText { - idc = 151; - style = 0; - sizeEx = "0.038*SafezoneH"; - colorText[] = {0.706,0.0745,0.0196,1}; - shadow = 0; - font = "EtelkaMonospacePro"; - text = "2456"; - x = 0; + idc = 123002; + style = 0; + sizeEx = "0.038*SafezoneH"; + colorText[] = {0.706,0.0745,0.0196,1}; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "2456"; + x = "24.6 * (0.01875 * SafezoneH)"; + y = "3 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.5 * (0.025 * SafezoneH)"; + }; + class CA_Distance: RscText { + idc = 151; + style = 0; + sizeEx = "0.038*SafezoneH"; + colorText[] = {0.706,0.0745,0.0196,1}; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "2456"; + x = 0; y = 0; w = 0; h = 0; - }; - class CA_Elev: RscText { - idc = 175; - style = 1; - sizeEx = "0.038*SafezoneH"; - colorText[] = {0.706,0.0745,0.0196,1}; - shadow = 0; - font = "EtelkaMonospacePro"; - text = "80.5"; - x = "32.7 * (0.01875 * SafezoneH)"; - y = "3 * (0.025 * SafezoneH)"; - w = "5 * (0.01875 * SafezoneH)"; - h = "1.5 * (0.025 * SafezoneH)"; - }; - class CA_VisionMode: RscText { - idc = 179; - style = 0; - sizeEx = "0.038*SafezoneH"; - colorText[] = {0.706,0.0745,0.0196,1}; - shadow = 0; - font = "EtelkaMonospacePro"; - text = "VIS"; - x = "6.5 * (0.01875 * SafezoneH)"; - y = "19.6 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "1.1 * (0.025 * SafezoneH)"; - }; - class CA_Laser: RscText { - idc = 158; - style = "0x30 + 0x800"; - sizeEx = "0.038*SafezoneH"; - colorText[] = {0.706,0.0745,0.0196,1}; - shadow = 0; - font = "EtelkaMonospacePro"; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics\laser_designator_iconLaserOn.paa"; - x = "29.2 * (0.01875 * SafezoneH)"; - y = "3 * (0.025 * SafezoneH)"; - w = "3.5 * (0.01875 * SafezoneH)"; - h = "1.5 * (0.025 * SafezoneH)"; - }; - class CA_Heading: RscText { - idc = 156; - style = 0; - sizeEx = "0.038*SafezoneH"; - colorText[] = {0.706,0.0745,0.0196,1}; - shadow = 0; - font = "EtelkaMonospacePro"; - text = "023"; - x = "16.1 * (0.01875 * SafezoneH)"; - y = "3 * (0.025 * SafezoneH)"; - w = "3.5 * (0.01875 * SafezoneH)"; - h = "1.6 * (0.025 * SafezoneH)"; - }; + }; + class CA_Elev: RscText { + idc = 175; + style = 1; + sizeEx = "0.038*SafezoneH"; + colorText[] = {0.706,0.0745,0.0196,1}; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "80.5"; + x = "32.7 * (0.01875 * SafezoneH)"; + y = "3 * (0.025 * SafezoneH)"; + w = "5 * (0.01875 * SafezoneH)"; + h = "1.5 * (0.025 * SafezoneH)"; + }; + class CA_VisionMode: RscText { + idc = 179; + style = 0; + sizeEx = "0.038*SafezoneH"; + colorText[] = {0.706,0.0745,0.0196,1}; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "VIS"; + x = "6.5 * (0.01875 * SafezoneH)"; + y = "19.6 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.1 * (0.025 * SafezoneH)"; + }; + class CA_Laser: RscText { + idc = 158; + style = "0x30 + 0x800"; + sizeEx = "0.038*SafezoneH"; + colorText[] = {0.706,0.0745,0.0196,1}; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics\laser_designator_iconLaserOn.paa"; + x = "29.2 * (0.01875 * SafezoneH)"; + y = "3 * (0.025 * SafezoneH)"; + w = "3.5 * (0.01875 * SafezoneH)"; + h = "1.5 * (0.025 * SafezoneH)"; + }; + class CA_Heading: RscText { + idc = 156; + style = 0; + sizeEx = "0.038*SafezoneH"; + colorText[] = {0.706,0.0745,0.0196,1}; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "023"; + x = "16.1 * (0.01875 * SafezoneH)"; + y = "3 * (0.025 * SafezoneH)"; + w = "3.5 * (0.01875 * SafezoneH)"; + h = "1.6 * (0.025 * SafezoneH)"; + }; class ACE_LaserCode_Helper : RscMapControl { idc = -1; @@ -126,19 +126,19 @@ class RscInGameUI { h = 0; }; class ACE_LaserCode : RscText { - idc = 123001; - style = 0; - sizeEx = "0.038*SafezoneH"; - colorText[] = {0.706,0.0745,0.0196,1}; - shadow = 0; - font = "EtelkaMonospacePro"; - text = "Code: 1001"; - x = "32.7 * (0.01875 * SafezoneH)"; - y = "35.5 * (0.025 * SafezoneH)"; - w = "12 * (0.01875 * SafezoneH)"; - h = "1.6 * (0.025 * SafezoneH)"; - }; - }; - }; - }; + idc = 123001; + style = 0; + sizeEx = "0.038*SafezoneH"; + colorText[] = {0.706,0.0745,0.0196,1}; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "Code: 1001"; + x = "32.7 * (0.01875 * SafezoneH)"; + y = "35.5 * (0.025 * SafezoneH)"; + w = "12 * (0.01875 * SafezoneH)"; + h = "1.6 * (0.025 * SafezoneH)"; + }; + }; + }; + }; }; \ No newline at end of file From 6c3e699fdb6c4511286998bea569a2a32c90a508 Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Fri, 17 Apr 2015 07:28:19 -0700 Subject: [PATCH 072/257] tabs --- addons/javelin/CfgWeapons.hpp | 6 +- addons/javelin/RscInGameUI.hpp | 6 +- addons/missileguidance/CfgAmmo.hpp | 58 +++++++++---------- .../Example_ACE_MissileGuidance.hpp | 38 ++++++------ 4 files changed, 54 insertions(+), 54 deletions(-) diff --git a/addons/javelin/CfgWeapons.hpp b/addons/javelin/CfgWeapons.hpp index 0898fa6d3c..79e7c7358c 100644 --- a/addons/javelin/CfgWeapons.hpp +++ b/addons/javelin/CfgWeapons.hpp @@ -4,7 +4,7 @@ class CfgWeapons { class Launcher_Base_F : Launcher { class WeaponSlotsInfo; - }; + }; class missiles_titan : MissileLauncher { weaponInfoType = "ACE_RscOptics_javelin"; @@ -13,7 +13,7 @@ class CfgWeapons { canLock = 0; lockingTargetSound[] = {"",0,1}; - lockedTargetSound[] = {"",0,1}; + lockedTargetSound[] = {"",0,1}; }; class launch_Titan_base : Launcher_Base_F { @@ -24,6 +24,6 @@ class CfgWeapons { lockingTargetSound[] = {"",0,1}; - lockedTargetSound[] = {"",0,1}; + lockedTargetSound[] = {"",0,1}; }; }; \ No newline at end of file diff --git a/addons/javelin/RscInGameUI.hpp b/addons/javelin/RscInGameUI.hpp index d845c1d00b..ea1e12626c 100644 --- a/addons/javelin/RscInGameUI.hpp +++ b/addons/javelin/RscInGameUI.hpp @@ -255,9 +255,9 @@ class RscInGameUI { idc = 6999; x = "SafezoneX"; - y = "SafezoneY"; - w = "SafezoneW"; - h = "SafezoneH"; + y = "SafezoneY"; + w = "SafezoneW"; + h = "SafezoneH"; enabled = 0; class Controls { diff --git a/addons/missileguidance/CfgAmmo.hpp b/addons/missileguidance/CfgAmmo.hpp index 82045a1720..a4a4f7e25d 100644 --- a/addons/missileguidance/CfgAmmo.hpp +++ b/addons/missileguidance/CfgAmmo.hpp @@ -8,29 +8,29 @@ class CfgAmmo { class M_PG_AT : MissileBase { model = "\A3\Weapons_F\Ammo\Rocket_01_fly_F"; - proxyShape = "\A3\Weapons_F\Ammo\Rocket_01_F"; + proxyShape = "\A3\Weapons_F\Ammo\Rocket_01_F"; irLock = 0; - laserLock = 0; - airLock = 0; - weaponLockSystem = "2 + 16"; + laserLock = 0; + airLock = 0; + weaponLockSystem = "2 + 16"; - 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; + 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 = ""; + effectsMissileInit = "MissileDAR1"; + effectsMissile = "missile2"; + whistleDist = 4; + muzzleEffect = ""; // Turn off arma crosshair-guidance manualControl = 0; @@ -73,17 +73,17 @@ class CfgAmmo { class ACE_Hydra70_DAGR : M_PG_AT { displayName = "$STR_ACE_Hydra70_DAGR"; - displayNameShort = "$STR_ACE_Hydra70_DAGR_Short"; + displayNameShort = "$STR_ACE_Hydra70_DAGR_Short"; description = "$STR_ACE_Hydra70_DAGR"; - descriptionShort = "$STR_ACE_Hydra70_DAGR_Desc"; + descriptionShort = "$STR_ACE_Hydra70_DAGR_Desc"; }; class ACE_Hellfire_AGM114K : ACE_Hydra70_DAGR { displayName = "$STR_ACE_Hellfire_AGM114K"; - displayNameShort = "$STR_ACE_Hellfire_AGM114K_Short"; + displayNameShort = "$STR_ACE_Hellfire_AGM114K_Short"; - description = "$STR_ACE_Hellfire_AGM114K_desc"; + description = "$STR_ACE_Hellfire_AGM114K_desc"; descriptionShort = "$STR_ACE_Hellfire_AGM114K_desc"; // @TODO: placeholder model to at least make it look different @@ -92,22 +92,22 @@ class CfgAmmo { hit = 1400; indirectHit = 71; - indirectHitRange = 4.5; - effectsMissile = "missile2"; + indirectHitRange = 4.5; + effectsMissile = "missile2"; }; // Titan class M_Titan_AT : MissileBase { irLock = 0; - laserLock = 0; - airLock = 0; + laserLock = 0; + airLock = 0; // Turn off arma crosshair-guidance manualControl = 0; hit = 1400; // default: 800 - indirectHit = 20; - indirectHitRange = 2; + indirectHit = 20; + indirectHitRange = 2; // ACE uses these values //trackOversteer = 1; //trackLead = 0; diff --git a/addons/missileguidance/Example_ACE_MissileGuidance.hpp b/addons/missileguidance/Example_ACE_MissileGuidance.hpp index 400a3a9a41..d9c1ea8a2c 100644 --- a/addons/missileguidance/Example_ACE_MissileGuidance.hpp +++ b/addons/missileguidance/Example_ACE_MissileGuidance.hpp @@ -3,29 +3,29 @@ THIS IS A WIP FUNCTIONALITY, DUE TO CHANGE class M_PG_AT : MissileBase { model = "\A3\Weapons_F\Ammo\Rocket_01_fly_F"; - proxyShape = "\A3\Weapons_F\Ammo\Rocket_01_F"; + proxyShape = "\A3\Weapons_F\Ammo\Rocket_01_F"; irLock = 0; - laserLock = 0; - airLock = 0; - weaponLockSystem = "2 + 16"; + laserLock = 0; + airLock = 0; + weaponLockSystem = "2 + 16"; - 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; + 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 = ""; + effectsMissileInit = "MissileDAR1"; + effectsMissile = "missile2"; + whistleDist = 4; + muzzleEffect = ""; // Turn off arma crosshair-guidance manualControl = 0; From 3a94753645f695086cb4518e14e3922a5cae7158 Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Fri, 17 Apr 2015 07:28:59 -0700 Subject: [PATCH 073/257] tab --- addons/laser/CfgVehicles.hpp | 2 +- addons/laser/RscInGameUI.hpp | 232 +++++++++++++++++------------------ 2 files changed, 117 insertions(+), 117 deletions(-) diff --git a/addons/laser/CfgVehicles.hpp b/addons/laser/CfgVehicles.hpp index 1e83f66cc9..23eb00c37c 100644 --- a/addons/laser/CfgVehicles.hpp +++ b/addons/laser/CfgVehicles.hpp @@ -5,7 +5,7 @@ class CfgVehicles { // @TODO: Changing the model and simulation hides it, but THEN IT DOESNT SPAWN WTF!? model = "\A3\Weapons_F\empty.p3d"; destrType = "DestructNo"; - simulation = "house"; + simulation = "house"; class EventHandlers { init = QUOTE(_this call FUNC(laser_init)); diff --git a/addons/laser/RscInGameUI.hpp b/addons/laser/RscInGameUI.hpp index d3dfaa5d43..d87136c960 100644 --- a/addons/laser/RscInGameUI.hpp +++ b/addons/laser/RscInGameUI.hpp @@ -6,118 +6,118 @@ class RscMapControl; class RscInGameUI { class RscOptics_LaserDesignator { - idd = 300; - controls[] = {"CA_IGUI_elements_group"}; + idd = 300; + controls[] = {"CA_IGUI_elements_group"}; onLoad = "uiNameSpace setVariable ['ACE_RscOptics_LaserDesignator',(_this select 0)];"; onUnload = "uiNameSpace setVariable ['ACE_RscOptics_LaserDesignator',nil];"; - class CA_IGUI_elements_group: RscControlsGroup { - idc = 170; + class CA_IGUI_elements_group: RscControlsGroup { + idc = 170; - x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))"; - y = "0 * (0.025 * SafezoneH) + (SafezoneY)"; - w = "53.5 * (0.01875 * SafezoneH)"; - h = "40 * (0.025 * SafezoneH)"; - class VScrollbar: VScrollbar { - width = 0; - }; - class HScrollbar: HScrollbar { - height = 0; - }; + x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))"; + y = "0 * (0.025 * SafezoneH) + (SafezoneY)"; + w = "53.5 * (0.01875 * SafezoneH)"; + h = "40 * (0.025 * SafezoneH)"; + class VScrollbar: VScrollbar { + width = 0; + }; + class HScrollbar: HScrollbar { + height = 0; + }; class controls { - class CA_OpticsZoom: RscText { - idc = 180; - style = 1; - colorText[] = {0.706,0.0745,0.0196,1}; - sizeEx = "0.038*SafezoneH"; - shadow = 0; - font = "EtelkaMonospacePro"; - text = "4.5"; - x = "43.85 * (0.01875 * SafezoneH)"; - y = "19.6 * (0.025 * SafezoneH)"; - w = "4.5 * (0.01875 * SafezoneH)"; - h = "1.1 * (0.025 * SafezoneH)"; - }; + class CA_OpticsZoom: RscText { + idc = 180; + style = 1; + colorText[] = {0.706,0.0745,0.0196,1}; + sizeEx = "0.038*SafezoneH"; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "4.5"; + x = "43.85 * (0.01875 * SafezoneH)"; + y = "19.6 * (0.025 * SafezoneH)"; + w = "4.5 * (0.01875 * SafezoneH)"; + h = "1.1 * (0.025 * SafezoneH)"; + }; class ACE_Distance: RscText { - idc = 123002; - style = 0; - sizeEx = "0.038*SafezoneH"; - colorText[] = {0.706,0.0745,0.0196,1}; - shadow = 0; - font = "EtelkaMonospacePro"; - text = "2456"; - x = "24.6 * (0.01875 * SafezoneH)"; - y = "3 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "1.5 * (0.025 * SafezoneH)"; - }; - class CA_Distance: RscText { - idc = 151; - style = 0; - sizeEx = "0.038*SafezoneH"; - colorText[] = {0.706,0.0745,0.0196,1}; - shadow = 0; - font = "EtelkaMonospacePro"; - text = "2456"; - x = 0; + idc = 123002; + style = 0; + sizeEx = "0.038*SafezoneH"; + colorText[] = {0.706,0.0745,0.0196,1}; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "2456"; + x = "24.6 * (0.01875 * SafezoneH)"; + y = "3 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.5 * (0.025 * SafezoneH)"; + }; + class CA_Distance: RscText { + idc = 151; + style = 0; + sizeEx = "0.038*SafezoneH"; + colorText[] = {0.706,0.0745,0.0196,1}; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "2456"; + x = 0; y = 0; w = 0; h = 0; - }; - class CA_Elev: RscText { - idc = 175; - style = 1; - sizeEx = "0.038*SafezoneH"; - colorText[] = {0.706,0.0745,0.0196,1}; - shadow = 0; - font = "EtelkaMonospacePro"; - text = "80.5"; - x = "32.7 * (0.01875 * SafezoneH)"; - y = "3 * (0.025 * SafezoneH)"; - w = "5 * (0.01875 * SafezoneH)"; - h = "1.5 * (0.025 * SafezoneH)"; - }; - class CA_VisionMode: RscText { - idc = 179; - style = 0; - sizeEx = "0.038*SafezoneH"; - colorText[] = {0.706,0.0745,0.0196,1}; - shadow = 0; - font = "EtelkaMonospacePro"; - text = "VIS"; - x = "6.5 * (0.01875 * SafezoneH)"; - y = "19.6 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "1.1 * (0.025 * SafezoneH)"; - }; - class CA_Laser: RscText { - idc = 158; - style = "0x30 + 0x800"; - sizeEx = "0.038*SafezoneH"; - colorText[] = {0.706,0.0745,0.0196,1}; - shadow = 0; - font = "EtelkaMonospacePro"; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics\laser_designator_iconLaserOn.paa"; - x = "29.2 * (0.01875 * SafezoneH)"; - y = "3 * (0.025 * SafezoneH)"; - w = "3.5 * (0.01875 * SafezoneH)"; - h = "1.5 * (0.025 * SafezoneH)"; - }; - class CA_Heading: RscText { - idc = 156; - style = 0; - sizeEx = "0.038*SafezoneH"; - colorText[] = {0.706,0.0745,0.0196,1}; - shadow = 0; - font = "EtelkaMonospacePro"; - text = "023"; - x = "16.1 * (0.01875 * SafezoneH)"; - y = "3 * (0.025 * SafezoneH)"; - w = "3.5 * (0.01875 * SafezoneH)"; - h = "1.6 * (0.025 * SafezoneH)"; - }; + }; + class CA_Elev: RscText { + idc = 175; + style = 1; + sizeEx = "0.038*SafezoneH"; + colorText[] = {0.706,0.0745,0.0196,1}; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "80.5"; + x = "32.7 * (0.01875 * SafezoneH)"; + y = "3 * (0.025 * SafezoneH)"; + w = "5 * (0.01875 * SafezoneH)"; + h = "1.5 * (0.025 * SafezoneH)"; + }; + class CA_VisionMode: RscText { + idc = 179; + style = 0; + sizeEx = "0.038*SafezoneH"; + colorText[] = {0.706,0.0745,0.0196,1}; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "VIS"; + x = "6.5 * (0.01875 * SafezoneH)"; + y = "19.6 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.1 * (0.025 * SafezoneH)"; + }; + class CA_Laser: RscText { + idc = 158; + style = "0x30 + 0x800"; + sizeEx = "0.038*SafezoneH"; + colorText[] = {0.706,0.0745,0.0196,1}; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics\laser_designator_iconLaserOn.paa"; + x = "29.2 * (0.01875 * SafezoneH)"; + y = "3 * (0.025 * SafezoneH)"; + w = "3.5 * (0.01875 * SafezoneH)"; + h = "1.5 * (0.025 * SafezoneH)"; + }; + class CA_Heading: RscText { + idc = 156; + style = 0; + sizeEx = "0.038*SafezoneH"; + colorText[] = {0.706,0.0745,0.0196,1}; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "023"; + x = "16.1 * (0.01875 * SafezoneH)"; + y = "3 * (0.025 * SafezoneH)"; + w = "3.5 * (0.01875 * SafezoneH)"; + h = "1.6 * (0.025 * SafezoneH)"; + }; class ACE_LaserCode_Helper : RscMapControl { idc = -1; @@ -126,19 +126,19 @@ class RscInGameUI { h = 0; }; class ACE_LaserCode : RscText { - idc = 123001; - style = 0; - sizeEx = "0.038*SafezoneH"; - colorText[] = {0.706,0.0745,0.0196,1}; - shadow = 0; - font = "EtelkaMonospacePro"; - text = "Code: 1001"; - x = "32.7 * (0.01875 * SafezoneH)"; - y = "35.5 * (0.025 * SafezoneH)"; - w = "12 * (0.01875 * SafezoneH)"; - h = "1.6 * (0.025 * SafezoneH)"; - }; - }; - }; - }; + idc = 123001; + style = 0; + sizeEx = "0.038*SafezoneH"; + colorText[] = {0.706,0.0745,0.0196,1}; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "Code: 1001"; + x = "32.7 * (0.01875 * SafezoneH)"; + y = "35.5 * (0.025 * SafezoneH)"; + w = "12 * (0.01875 * SafezoneH)"; + h = "1.6 * (0.025 * SafezoneH)"; + }; + }; + }; + }; }; \ No newline at end of file From e83ab4049fd6e3bbcc3d3e2e74306f5f1ecf52a4 Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Fri, 17 Apr 2015 07:30:55 -0700 Subject: [PATCH 074/257] Fixed: Tabs everywhere. --- addons/aircraft/CfgAmmo.hpp | 6 +++--- addons/aircraft/Heli_Attack_01_base_F.hpp | 8 ++++---- addons/optics/CfgWeapons.hpp | 16 ++++++++-------- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/addons/aircraft/CfgAmmo.hpp b/addons/aircraft/CfgAmmo.hpp index 41462354d8..8aa5d3173e 100644 --- a/addons/aircraft/CfgAmmo.hpp +++ b/addons/aircraft/CfgAmmo.hpp @@ -2,7 +2,7 @@ class CfgAmmo { class BulletBase; class B_20mm : BulletBase { - hit = 80; + hit = 80; indirectHit = 12; indirectHitRange = 2; //2; caliber = 1.4; @@ -13,7 +13,7 @@ class CfgAmmo { tracerEndTime = 3.5; CraterEffects = "ExploAmmoCrater"; - explosionEffects = "ExploAmmoExplosion"; + explosionEffects = "ExploAmmoExplosion"; model = "\A3\Weapons_f\Data\bullettracer\tracer_red"; }; class ACE_20mm_HE : B_20mm {}; @@ -23,7 +23,7 @@ class CfgAmmo { indirectHitRange = 0.3; //2; explosive = 0; CraterEffects = ""; - explosionEffects = ""; + explosionEffects = ""; }; // adjust minigun caliber and deflection to other ammo diff --git a/addons/aircraft/Heli_Attack_01_base_F.hpp b/addons/aircraft/Heli_Attack_01_base_F.hpp index 7276b3e402..22f2da3833 100644 --- a/addons/aircraft/Heli_Attack_01_base_F.hpp +++ b/addons/aircraft/Heli_Attack_01_base_F.hpp @@ -907,7 +907,7 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { thermalMode[] = {0,1}; gunnerOpticsColor[] = {0,0,0,1}; directionStabilized = 1; - horizontallyStabilized = 1; + horizontallyStabilized = 1; gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_wide_F"; }; class Medium: Wide @@ -918,7 +918,7 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { maxFov = 0.093; gunnerOpticsColor[] = {0,0,0,1}; directionStabilized = 1; - horizontallyStabilized = 1; + horizontallyStabilized = 1; gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_medium_F"; }; class Narrow: Wide @@ -929,7 +929,7 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { maxFov = 0.029; gunnerOpticsColor[] = {0,0,0,1}; directionStabilized = 1; - horizontallyStabilized = 1; + horizontallyStabilized = 1; gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_narrow_F"; }; @@ -941,7 +941,7 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { maxFov = 0.01; gunnerOpticsColor[] = {0,0,0,1}; directionStabilized = 1; - horizontallyStabilized = 1; + horizontallyStabilized = 1; gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_narrow_F"; }; diff --git a/addons/optics/CfgWeapons.hpp b/addons/optics/CfgWeapons.hpp index 7749db0bc4..6d61ff98a2 100644 --- a/addons/optics/CfgWeapons.hpp +++ b/addons/optics/CfgWeapons.hpp @@ -5,20 +5,20 @@ class CfgWeapons { class Default; class Binocular: Default { - forceOptics = 0; // Allow using compass with Binocular - opticsZoomMin = 0.056889; // 5.25x power - opticsZoomMax = 0.056889; // 9 px/mil - modelOptics = "\z\ace\addons\optics\models\NWD_M22_5x"; // 7� horizontal field of view - visionMode[] = {"Normal"}; // Can't use nvgs with binoculars any more than you can with scopes - // Fix AI using Binocs on short range - #18737 + forceOptics = 0; // Allow using compass with Binocular + opticsZoomMin = 0.056889; // 5.25x power + opticsZoomMax = 0.056889; // 9 px/mil + modelOptics = "\z\ace\addons\optics\models\NWD_M22_5x"; // 7� horizontal field of view + visionMode[] = {"Normal"}; // Can't use nvgs with binoculars any more than you can with scopes + // Fix AI using Binocs on short range - #18737 // minRange = 300; // 300 = uses Rangefinder often (runs a few meters, stops, uses RF, repeats) minRange = 500; //500 = seem almost never use it..? - minRangeProbab = 0.001; + minRangeProbab = 0.001; midRange = 1000; midRangeProbab = 0.01; maxRange = 5000; maxRangeProbab = 0.01; - }; + }; // zooming reticle scopes class optic_DMS: ItemCore { From 26984905693c99441a61288c16849b381a218578 Mon Sep 17 00:00:00 2001 From: ruPaladin <happyworm24@rambler.ru> Date: Fri, 17 Apr 2015 17:49:03 +0300 Subject: [PATCH 075/257] medical (patient status semantic fixes) --- addons/medical/stringtable.xml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index e80be2fc65..959662c9f1 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -1518,7 +1518,7 @@ <English>Heavily wounded</English> <German>Schwer verwundet:</German> <Polish>Ciężko ranny</Polish> - <Russian>Сильно ранен</Russian> + <Russian>Сильные ранения</Russian> <Italian>Gravemente ferito</Italian> <Spanish>Gravemente herido</Spanish> </Key> @@ -1526,7 +1526,7 @@ <English>Lightly wounded</English> <German>Leicht verwundet:</German> <Polish>Lekko ranny</Polish> - <Russian>Легко ранен</Russian> + <Russian>Легкие ранения</Russian> <Italian>Leggermente ferito</Italian> <Spanish>Levemente herido</Spanish> </Key> @@ -1534,7 +1534,7 @@ <English>Very lightly wounded</English> <German>Sehr leicht verwundet:</German> <Polish>B. lekko ranny</Polish> - <Russian>Очень легко ранен</Russian> + <Russian>Царапины</Russian> <Italian>Ferito lievemente</Italian> <Spanish>Muy levemente herido</Spanish> </Key> @@ -1542,7 +1542,7 @@ <English>Head</English> <German>Kopf</German> <Polish>Głowa</Polish> - <Russian>Голова</Russian> + <Russian>Головы</Russian> <Italian>Testa</Italian> <Spanish>Cabeza</Spanish> </Key> @@ -1550,7 +1550,7 @@ <English>Torso</English> <German>Torso</German> <Polish>Tors</Polish> - <Russian>Торс</Russian> + <Russian>Торса</Russian> <Italian>Torso</Italian> <Spanish>Torso</Spanish> </Key> @@ -1558,7 +1558,7 @@ <English>Left Arm</English> <German>Linker Arm</German> <Polish>Lewe ramię</Polish> - <Russian>Левая рука</Russian> + <Russian>Левой руки</Russian> <Italian>Braccio sinistro</Italian> <Spanish>Brazo izquierdo</Spanish> </Key> @@ -1566,7 +1566,7 @@ <English>Right Arm</English> <German>Rechter Arm</German> <Polish>Prawe ramię</Polish> - <Russian>Правая рука</Russian> + <Russian>Правой руки</Russian> <Italian>Braccio destro</Italian> <Spanish>Brazo derecho</Spanish> </Key> @@ -1574,7 +1574,7 @@ <English>Left Leg</English> <German>Linkes Bein</German> <Polish>Lewa noga</Polish> - <Russian>Левая нога</Russian> + <Russian>Левой ноги</Russian> <Italian>Gamba sinistra</Italian> <Spanish>Pierna izquierda</Spanish> </Key> @@ -1582,7 +1582,7 @@ <English>Right Leg</English> <German>Rechtes Bein</German> <Polish>Prawa noga</Polish> - <Russian>Правая нога</Russian> + <Russian>Правой ноги</Russian> <Italian>Gamba destra</Italian> <Spanish>Pierna derecha</Spanish> </Key> From bb2383cffd960fb01d7be37448df87706cf5fd60 Mon Sep 17 00:00:00 2001 From: PabstMirror <elephantisaterriblemascot@gmail.com> Date: Fri, 17 Apr 2015 09:51:43 -0500 Subject: [PATCH 076/257] #700 - ProgressBar Visual Improvement --- addons/common/ProgressScreen.hpp | 33 ++++++++++++--------- addons/common/functions/fnc_progressBar.sqf | 10 ++++--- 2 files changed, 25 insertions(+), 18 deletions(-) diff --git a/addons/common/ProgressScreen.hpp b/addons/common/ProgressScreen.hpp index df07e5ca2f..ab624669cf 100644 --- a/addons/common/ProgressScreen.hpp +++ b/addons/common/ProgressScreen.hpp @@ -1,7 +1,7 @@ class GVAR(ProgressBar_Dialog) { idd = -1; movingEnable = false; - onLoad = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QGVAR(ctrlProgressBar)),(_this select 0) displayCtrl 1)]; uiNamespace setVariable [ARR_2(QUOTE(QGVAR(ctrlProgressBarTitle)),(_this select 0) displayCtrl 2)];); + onLoad = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QGVAR(ctrlProgressBG)),(_this select 0) displayCtrl 1)]; uiNamespace setVariable [ARR_2(QUOTE(QGVAR(ctrlProgressBar)),(_this select 0) displayCtrl 2)]; uiNamespace setVariable [ARR_2(QUOTE(QGVAR(ctrlProgressBarTitle)),(_this select 0) displayCtrl 3)];); objects[] = {}; class controlsBackground { @@ -23,26 +23,31 @@ class GVAR(ProgressBar_Dialog) { w = "safezoneW"; h = "safezoneH"; }; - class Progress: ACE_gui_RscProgress { + class TitleBackground: ACE_gui_staticBase { idc = 1; - x = "1.2 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - y = "0.1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - w = "37.8 * (((safezoneW / safezoneH) min 1.2) / 40)"; - h = ".8 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - colorFrame[] = {0,0,0,0.0}; - colorBar[] = {0.27,0.5,0.31,0.8}; - texture = "#(argb,8,8,3)color(1,1,1,0.7)"; - }; - class Title_Bar : ACE_gui_staticBase { - idc = 2; - style = 0x22; - colorBackground[] = {0, 0, 0, 0}; + style = ST_CENTER; + sizeEx = "1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + colorBackground[] = {0, 0, 0, 0.5}; colorText[] = {1, 1, 1, 1}; x = "1 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; y = "0 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; w = "38 * (((safezoneW / safezoneH) min 1.2) / 40)"; h = "1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; }; + class Progress: ACE_gui_RscProgress { + idc = 2; + x = "1.2 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; + y = "0.1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; + w = "38 * (((safezoneW / safezoneH) min 1.2) / 40)"; + h = "1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + colorFrame[] = {1,1,1,0.5}; + colorBar[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.77])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.51])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.08])","(profilenamespace getvariable ['GUI_BCG_RGB_A',0.8])"}; + texture = "#(argb,8,8,3)color(1,1,1,0.7)"; + }; + class TitleText: TitleBackground { + idc = 3; + colorBackground[] = {0, 0, 0, 0}; + }; }; }; diff --git a/addons/common/functions/fnc_progressBar.sqf b/addons/common/functions/fnc_progressBar.sqf index 03c56398c4..f7d927556c 100644 --- a/addons/common/functions/fnc_progressBar.sqf +++ b/addons/common/functions/fnc_progressBar.sqf @@ -38,12 +38,14 @@ createDialog QGVAR(ProgressBar_Dialog); //Adjust position based on user setting: _ctrlPos = ctrlPosition (uiNamespace getVariable QGVAR(ctrlProgressBarTitle)); _ctrlPos set [1, ((0 + 29 * GVAR(SettingProgressBarLocation)) * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2))]; -(uiNamespace getVariable QGVAR(ctrlProgressBarTitle)) ctrlSetPosition _ctrlPos; -(uiNamespace getVariable QGVAR(ctrlProgressBarTitle)) ctrlCommit 0; -_ctrlPos = ctrlPosition (uiNamespace getVariable QGVAR(ctrlProgressBar)); -_ctrlPos set [1, ((0.1 + 29 * GVAR(SettingProgressBarLocation)) * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2))]; + +(uiNamespace getVariable QGVAR(ctrlProgressBG)) ctrlSetPosition _ctrlPos; +(uiNamespace getVariable QGVAR(ctrlProgressBG)) ctrlCommit 0; (uiNamespace getVariable QGVAR(ctrlProgressBar)) ctrlSetPosition _ctrlPos; (uiNamespace getVariable QGVAR(ctrlProgressBar)) ctrlCommit 0; +(uiNamespace getVariable QGVAR(ctrlProgressBarTitle)) ctrlSetPosition _ctrlPos; +(uiNamespace getVariable QGVAR(ctrlProgressBarTitle)) ctrlCommit 0; + _perFrameFunction = { From 38f32cad0dc505798cbccd1da2ff423aa75e3913 Mon Sep 17 00:00:00 2001 From: jonpas <jonpas33@gmail.com> Date: Fri, 17 Apr 2015 17:40:13 +0200 Subject: [PATCH 077/257] bracket -> brace --- documentation/development/coding-guidelines.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/documentation/development/coding-guidelines.md b/documentation/development/coding-guidelines.md index f72263eeaa..e39581a9d4 100644 --- a/documentation/development/coding-guidelines.md +++ b/documentation/development/coding-guidelines.md @@ -35,8 +35,8 @@ Tabs can be tricky sometimes, especially when it comes to sharing code with othe ## Braces -- opening bracket on the same line as keyword -- closing bracket in own line, same level of indentation as keyword +- opening brace on the same line as keyword +- closing brace in own line, same level of indentation as keyword **Yes:** @@ -70,7 +70,7 @@ class Something : Or { }; ``` -When using `if`/`else`, it is encouraged to put `else` on the same line as the closing bracket to save space: +When using `if`/`else`, it is encouraged to put `else` on the same line as the closing brace to save space: ```c++ if (alive player) then { @@ -90,7 +90,7 @@ class Three {foo = 3;}; #### Reasoning -Putting the opening bracket in it's own line wastes a lot of space, and keeping the closing bracket on the same level as the keyword makes it easier to recognize what exactly the bracket closes. +Putting the opening brace in it's own line wastes a lot of space, and keeping the closing brace on the same level as the keyword makes it easier to recognize what exactly the brace closes. ## How to create a new module From ba576c5763cf0310576eba7e45cbb9d898d236c0 Mon Sep 17 00:00:00 2001 From: jonpas <jonpas33@gmail.com> Date: Fri, 17 Apr 2015 17:42:03 +0200 Subject: [PATCH 078/257] Capitalized Visual Studio, Corrected togglable spelling --- documentation/development/extension-guidelines.md | 2 +- documentation/development/modularity-and-pbo-structure.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/documentation/development/extension-guidelines.md b/documentation/development/extension-guidelines.md index 0558d49d5e..b5e7e98586 100644 --- a/documentation/development/extension-guidelines.md +++ b/documentation/development/extension-guidelines.md @@ -11,7 +11,7 @@ order: 9 ### Requirements - A compiler (VS/GCC/Clang) - - If starting with visual studio, you need to make sure to use the Visual studio command prompt + - If starting with Visual Studio, you need to make sure to use the Visual studio command prompt - cmake 3.0 or later in your path ### Cross-Platform Guidelines diff --git a/documentation/development/modularity-and-pbo-structure.md b/documentation/development/modularity-and-pbo-structure.md index ad1194e39c..e3e8c5002a 100644 --- a/documentation/development/modularity-and-pbo-structure.md +++ b/documentation/development/modularity-and-pbo-structure.md @@ -10,7 +10,7 @@ order: 4 Main principles: - As much stuff as possible should be modular -- Strive to make as much stuff as possible run-time toogable. Adding/removing PBOS would still be requiring to toogle any feature relying on config changes. +- Strive to make as much stuff as possible run-time togglable. Adding/removing PBOS would still be requiring to toggle any feature relying on config changes. ### PBO Structure From 2d5b10fb601d0cafa8b975798ce3ff96e5902a1d Mon Sep 17 00:00:00 2001 From: jonpas <jonpas33@gmail.com> Date: Fri, 17 Apr 2015 17:45:10 +0200 Subject: [PATCH 079/257] Module names --- .../development/modularity-and-pbo-structure.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/documentation/development/modularity-and-pbo-structure.md b/documentation/development/modularity-and-pbo-structure.md index e3e8c5002a..0c16c4bc97 100644 --- a/documentation/development/modularity-and-pbo-structure.md +++ b/documentation/development/modularity-and-pbo-structure.md @@ -17,16 +17,16 @@ Main principles: Main principles: - Try to keep single module dependencies as much as possible -- InteractionMenu would be the requirement for most modules. -- Anything that is 100% config should require common and not interaction. +- Interact_Menu would be the requirement for most modules. +- Anything that is 100% config should require Common and not Interact_Menu. ``` -Main -> Common -> OptionsMenu -> InteractionMenu -> Most things +Main -> Common -> OptionsMenu -> Interact_Menu -> Most things Main -> Common -> Config things -Main -> Common -> 3D Models | - InteractionMenu | -> Feature +Main -> Common -> 3D Models | + Interact_Menu | -> Feature ``` From 31a2f1b279f049a39bda74c4af0c4c5fb97a3b37 Mon Sep 17 00:00:00 2001 From: EpMAK <epmak777@gmail.com> Date: Fri, 17 Apr 2015 19:36:07 +0300 Subject: [PATCH 080/257] Russian translations Again, filling strings, fixing errors --- addons/ballistics/stringtable.xml | 156 +++++++++++++++++++------ addons/laserpointer/stringtable.xml | 4 +- addons/medical/stringtable.xml | 4 +- addons/missileguidance/stringtable.xml | 16 +-- addons/movement/stringtable.xml | 4 +- addons/nametags/stringtable.xml | 16 ++- addons/nightvision/stringtable.xml | 6 +- addons/reload/stringtable.xml | 8 +- addons/respawn/stringtable.xml | 6 +- addons/weaponselect/stringtable.xml | 14 ++- addons/winddeflection/stringtable.xml | 9 +- 11 files changed, 176 insertions(+), 67 deletions(-) diff --git a/addons/ballistics/stringtable.xml b/addons/ballistics/stringtable.xml index c95da8d760..a60cefcf9d 100644 --- a/addons/ballistics/stringtable.xml +++ b/addons/ballistics/stringtable.xml @@ -13,7 +13,7 @@ <Czech>6.5mm 30ks Svítící IR-DIM Zásobník</Czech> <Portuguese>Carregador de 30 projéteis traçantes IR-DIM de 6,5mm</Portuguese> <Italian>Caricatore 6.5mm 30Rnd Traccianti IR-DIM</Italian> - <Russian>Магазин из 30-ти 6.5 мм трассирующих под ПНВ</Russian> + <Russian>Магазин из 30-ти 6,5 мм трассирующих под ПНВ</Russian> </Key> <Key ID="STR_ACE_30Rnd_65x39_caseless_mag_Tracer_DimNameShort"> <English>6.5mm IR-DIM</English> @@ -25,7 +25,7 @@ <Czech>6.5mm IR-DIM</Czech> <Portuguese>6,5mm IR-DIM</Portuguese> <Italian>6.5 IR-DIM</Italian> - <Russian>6.5 мм ИК-трассирующие</Russian> + <Russian>6,5 мм ИК-трассирующие</Russian> </Key> <Key ID="STR_ACE_30Rnd_65x39_caseless_mag_Tracer_DimDescription"> <English>Caliber: 6.5x39 mm Tracer IR-DIM<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL</English> @@ -37,7 +37,7 @@ <Czech>Ráže: 6.5x39 mm Svítící IR-DIM<br />Munice: 30<br />Použití: MX/C/M/SW/3GL</Czech> <Portuguese>Calibre: 6,5x39 mm Traçante IR-DIM<br />Projéteis: 30<br />Usado em: MX/C/M/SW/3GL</Portuguese> <Italian>Calibro: 6.5x39 mm Traccianti IR-DIM <br />Munizioni: 30<br />In uso su: MX/C/M/SW/3GL</Italian> - <Russian>Калибр: 6.5x39 мм трассирующие под ПНВ<br />Патронов: 30<br />Применимы в: MX/C/M/SW/3GL</Russian> + <Russian>Калибр: 6,5x39 мм трассирующие под ПНВ<br />Патронов: 30<br />Используются с: MX/C/M/SW/3GL</Russian> </Key> <Key ID="STR_ACE_30Rnd_65x39_caseless_mag_SDName"> <English>6.5mm 30Rnd SD Mag</English> @@ -49,7 +49,7 @@ <Czech>6.5mm 30ks SD Zásobník</Czech> <Portuguese>Carregador de 30 projéteis SD de 6,5mm</Portuguese> <Italian>Caricatore 6.5mm 30Rnd Sil.</Italian> - <Russian>Магазин из 30-ти 6.5 мм дозвуковых</Russian> + <Russian>Магазин из 30-ти 6,5 мм дозвуковых</Russian> </Key> <Key ID="STR_ACE_30Rnd_65x39_caseless_mag_SDNameShort"> <English>6.5mm SD</English> @@ -61,7 +61,7 @@ <Czech>6.5mm SD</Czech> <Portuguese>6,5mm SD</Portuguese> <Italian>6.5mm Sil.</Italian> - <Russian>6.5 мм дозвуковые</Russian> + <Russian>6,5 мм дозвуковые</Russian> </Key> <Key ID="STR_ACE_30Rnd_65x39_caseless_mag_SDDescription"> <English>Caliber: 6.5x39 mm SD<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL</English> @@ -73,7 +73,7 @@ <Czech>Ráže: 6.5x39 mm SD<br />Munice: 30<br />Použití: MX/C/M/SW/3GL</Czech> <Portuguese>Calibre: 6,5x39 mm SD<br />Projéteis: 30<br />Usado em: MX/C/M/SW/3GL</Portuguese> <Italian>Calibro: 6.5x39 mm Sil.<br />Munizioni: 30<br />In uso su: MX/C/M/SW/3GL </Italian> - <Russian>Калибр: 6.5x39 мм дозвуковые<br />Патронов: 30<br />Применимы в: MX/C/M/SW/3GL</Russian> + <Russian>Калибр: 6,5x39 мм дозвуковые<br />Патронов: 30<br />Используются с: MX/C/M/SW/3GL</Russian> </Key> <Key ID="STR_ACE_30Rnd_65x39_caseless_mag_APName"> <English>6.5mm 30Rnd AP Mag</English> @@ -85,7 +85,7 @@ <Czech>6.5mm 30ks AP Zásobník</Czech> <Portuguese>Carregador de 30 projéteis AP de 6,5mm</Portuguese> <Italian>Caricatore 6.5mm 30Rnd AP</Italian> - <Russian>Магазин из 30-ти 6.5 мм бронебойных</Russian> + <Russian>Магазин из 30-ти 6,5 мм бронебойных</Russian> </Key> <Key ID="STR_ACE_30Rnd_65x39_caseless_mag_APNameShort"> <English>6.5mm AP</English> @@ -97,7 +97,7 @@ <Czech>6.5mm AP</Czech> <Portuguese>6,5mm AP</Portuguese> <Italian>6.5mm AP</Italian> - <Russian>6.5 мм бронебойные</Russian> + <Russian>6,5 мм бронебойные</Russian> </Key> <Key ID="STR_ACE_30Rnd_65x39_caseless_mag_APDescription"> <English>Caliber: 6.5x39 mm AP<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL</English> @@ -109,7 +109,7 @@ <Czech>Ráže: 6.5x39 mm AP<br />Munice: 30<br />Použití: MX/C/M/SW/3GL</Czech> <Portuguese>Calibre: 6,5x39 mm AP<br />Projéteis: 30<br />Usado em: MX/C/M/SW/3GL</Portuguese> <Italian>Calibro: 6.5x39 mm AP<br />Munizioni: 30<br />In uso su: MX/C/M/SW/3GL</Italian> - <Russian>Калибр: 6.5x39 мм бронебойные<br />Патронов: 30<br />Применимы в: MX/C/M/SW/3GL</Russian> + <Russian>Калибр: 6,5x39 мм бронебойные<br />Патронов: 30<br />Используются с: MX/C/M/SW/3GL</Russian> </Key> <!-- KATIBA --> <Key ID="STR_ACE_30Rnd_65x39_caseless_green_mag_Tracer_DimName"> @@ -122,7 +122,7 @@ <Czech>6.5mm 30ks Svítící IR-DIM Zásobník</Czech> <Portuguese>Carregador de 30 projéteis traçantes IR-DIM de 6,5mm</Portuguese> <Italian>Caricatore 6.5mm 30Rnd Traccianti IR-DIM</Italian> - <Russian>Магазин из 30-ти 6.5 мм трассирующих под ПНВ</Russian> + <Russian>Магазин из 30-ти 6,5 мм трассирующих под ПНВ</Russian> </Key> <Key ID="STR_ACE_30Rnd_65x39_caseless_green_mag_Tracer_DimNameShort"> <English>6.5mm IR-DIM</English> @@ -134,7 +134,7 @@ <Czech>6.5mm IR-DIM</Czech> <Portuguese>6,5mm IR-DIM</Portuguese> <Italian>6.5mm IR-DIM</Italian> - <Russian>6.5 мм ИК-трассирующие</Russian> + <Russian>6,5 мм ИК-трассирующие</Russian> </Key> <Key ID="STR_ACE_30Rnd_65x39_caseless_green_mag_Tracer_DimDescription"> <English>Caliber: 6.5x39 mm Tracer IR-DIM<br />Rounds: 30<br />Used in: Katiba</English> @@ -146,7 +146,7 @@ <Czech>Ráže: 6.5x39 mm Svítící IR-DIM<br />Munice: 30<br />Použití: Katiba</Czech> <Portuguese>Calibre: 6,5x39 mm Traçante IR-DIM<br />Projéteis: 30<br />Usado em: Katiba</Portuguese> <Italian>Calibro: 6.5x39 mm Tracciant IR-DIM<br />Munizioni: 30<br />In uso su: Katiba</Italian> - <Russian>Калибр: 6.5x39 мм трассирующие под ПНВ<br />Патронов: 30<br />Применимы в: Katiba</Russian> + <Russian>Калибр: 6,5x39 мм трассирующие под ПНВ<br />Патронов: 30<br />Используются с: Katiba</Russian> </Key> <Key ID="STR_ACE_30Rnd_65x39_caseless_green_mag_SDName"> <English>6.5mm 30Rnd SD Mag</English> @@ -158,7 +158,7 @@ <Czech>6.5mm 30ks SD Zásobník</Czech> <Portuguese>Carregador de 30 projéteis SD de 6,5mm</Portuguese> <Italian>Caricatore 6.5mm 30Rnd Sil.</Italian> - <Russian>Магазин из 30-ти 6.5 мм дозвуковых</Russian> + <Russian>Магазин из 30-ти 6,5 мм дозвуковых</Russian> </Key> <Key ID="STR_ACE_30Rnd_65x39_caseless_green_mag_SDNameShort"> <English>6.5mm SD</English> @@ -170,7 +170,7 @@ <Czech>6.5mm SD</Czech> <Portuguese>6,5mm SD</Portuguese> <Italian>6.5mm Sil.</Italian> - <Russian>6.5 мм дозвуковые</Russian> + <Russian>6,5 мм дозвуковые</Russian> </Key> <Key ID="STR_ACE_30Rnd_65x39_caseless_green_mag_SDDescription"> <English>Caliber: 6.5x39 mm SD<br />Rounds: 30<br />Used in: Katiba</English> @@ -182,7 +182,7 @@ <Czech>Ráže: 6.5x39 mm SD<br />Munice: 30<br />Použití: Katiba</Czech> <Portuguese>Calibre: 6,5x39 mm SD<br />Projéteis: 30<br />Usado em: Katiba</Portuguese> <Italian>Calibro: 6.5x39 mm Sil.<br />Munizioni: 30<br />In uso su: Katiba</Italian> - <Russian>Калибр: 6.5x39 мм дозвуковые<br />Патронов: 30<br />Применимы в: Katiba</Russian> + <Russian>Калибр: 6,5x39 мм дозвуковые<br />Патронов: 30<br />Используются с: Katiba</Russian> </Key> <Key ID="STR_ACE_30Rnd_65x39_caseless_green_mag_APName"> <English>6.5mm 30Rnd AP Mag</English> @@ -194,7 +194,7 @@ <Czech>6.5mm 30ks AP Zásobník</Czech> <Portuguese>Carregador de 30 projéteis AP de 6,5mm</Portuguese> <Italian>Caricatore 6.5mm 30Rnd AP</Italian> - <Russian>Магазин из 30-ти 6.5 мм бронебойных</Russian> + <Russian>Магазин из 30-ти 6,5 мм бронебойных</Russian> </Key> <Key ID="STR_ACE_30Rnd_65x39_caseless_green_mag_APNameShort"> <English>6.5mm AP</English> @@ -206,7 +206,7 @@ <Czech>6.5mm AP</Czech> <Portuguese>6,5mm AP</Portuguese> <Italian>6.5mm AP</Italian> - <Russian>6.5 мм бронебойные</Russian> + <Russian>6,5 мм бронебойные</Russian> </Key> <Key ID="STR_ACE_30Rnd_65x39_caseless_green_mag_APDescription"> <English>Caliber: 6.5x39 mm AP<br />Rounds: 30<br />Used in: Katiba</English> @@ -218,7 +218,7 @@ <Czech>Ráže: 6.5x39 mm AP<br />Munice: 30<br />Použití: Katiba</Czech> <Portuguese>Calibre: 6,5x39 mm AP<br />Projéteis: 30<br />Usado em: Katiba</Portuguese> <Italian>Calibro: 6.5x39 mm AP<br />Munizioni: 30<br />In uso su: Katiba</Italian> - <Russian>Калибр: 6.5x39 мм бронебойные<br />Патронов: 30<br />Применимы в: Katiba</Russian> + <Russian>Калибр: 6,5x39 мм бронебойные<br />Патронов: 30<br />Используются с: Katiba</Russian> </Key> <!-- 5.56x45mm --> <Key ID="STR_ACE_30Rnd_556x45_mag_Tracer_DimName"> @@ -231,7 +231,7 @@ <Czech>5.56mm 30ks Svítící IR-DIM Zásobník</Czech> <Portuguese>Carregador de 30 projéteis traçantes IR-DIM de 5,56mm</Portuguese> <Italian>Caricatore 5.56mm 30rnd Traccianti IR-DIM</Italian> - <Russian>Магазин из 30-ти 5.56 мм трассирующих под ПНВ</Russian> + <Russian>Магазин из 30-ти 5,56 мм трассирующих под ПНВ</Russian> </Key> <Key ID="STR_ACE_30Rnd_556x45_mag_Tracer_DimNameShort"> <English>5.56mm IR-DIM</English> @@ -243,7 +243,7 @@ <Czech>5.56mm IR-DIM</Czech> <Portuguese>5,56mm IR-DIM</Portuguese> <Italian>5.56mm IR-DIM</Italian> - <Russian>5.56 мм ИК-трассирующие</Russian> + <Russian>5,56 мм ИК-трассирующие</Russian> </Key> <Key ID="STR_ACE_30Rnd_556x45_mag_Tracer_DimDescription"> <English>Caliber: 5.56x45 mm Tracer IR-DIM<br />Rounds: 30<br />Used in: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</English> @@ -255,7 +255,7 @@ <Czech>Ráže: 5.56x45 mm Svítící IR-DIM<br />Munice: 30<br />Použití: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Czech> <Portuguese>Calibre: 5,56x45 mm Traçante IR-DIM<br />Projéteis: 30<br />Usado em: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Portuguese> <Italian>Calibro: 5.56x45 mm Traccianti IR-DIM<br />Munizioni: 30<br />In uso su: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Italian> - <Russian>Калибр: 5.56x45 мм трассирующие под ПНВ<br />Патронов: 30<br />Применимы в: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Russian> + <Russian>Калибр: 5,56x45 мм трассирующие под ПНВ<br />Патронов: 30<br />Используются с: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Russian> </Key> <Key ID="STR_ACE_30Rnd_556x45_mag_APName"> <English>5.56mm 30Rnd AP Mag</English> @@ -267,7 +267,7 @@ <Czech>5.56mm 30ks AP Zásobník</Czech> <Portuguese>Carregador de 30 projéteis AP de 5,56mm</Portuguese> <Italian>Caricatore 5.56mm 30Rnd AP</Italian> - <Russian>Магазин из 30-ти 5.56 мм бронебойных</Russian> + <Russian>Магазин из 30-ти 5,56 мм бронебойных</Russian> </Key> <Key ID="STR_ACE_30Rnd_556x45_mag_APNameShort"> <English>5.56mm AP</English> @@ -279,7 +279,7 @@ <Czech>5.56mm AP</Czech> <Portuguese>5,56mm AP</Portuguese> <Italian>5.56mm AP</Italian> - <Russian>5.56 мм бронебойные</Russian> + <Russian>5,56 мм бронебойные</Russian> </Key> <Key ID="STR_ACE_30Rnd_556x45_mag_APDescription"> <English>Caliber: 5.56x45 mm AP<br />Rounds: 30<br />Used in: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</English> @@ -291,7 +291,7 @@ <Czech>Ráže: 5.56x45 mm AP<br />Munice: 30<br />Použití: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Czech> <Portuguese>Calibre: 5,56x45 mm AP<br />Projéteis: 30<br />Usado em: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Portuguese> <Italian>Calibro: 5.56x45 mm AP<br />Munizioni: 30<br />In uso su: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Italian> - <Russian>Калибр: 5.56x45 мм бронебойные<br />Патронов: 30<br />Применимы в: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Russian> + <Russian>Калибр: 5,56x45 мм бронебойные<br />Патронов: 30<br />Используются с: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Russian> </Key> <!-- 7.62x51mm --> <Key ID="STR_ACE_20Rnd_762x51_mag_TracerName"> @@ -304,7 +304,7 @@ <Czech>7.62mm 20ks Svítící Zásobník</Czech> <Portuguese>Carregador de 20 projéteis traçantes de 7,62mm</Portuguese> <Italian>Caricatore 7.62mm 20Rnd Traccianti</Italian> - <Russian>Магазин из 20-ти 7.62 мм трассирующих</Russian> + <Russian>Магазин из 20-ти 7,62 мм трассирующих</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x51_mag_TracerNameShort"> <English>7.62mm Tracer</English> @@ -316,7 +316,7 @@ <Czech>7.62mm Svítící</Czech> <Portuguese>7,62mm Traçante</Portuguese> <Italian>7.62mm Traccianti</Italian> - <Russian>7.62 мм трассирущие</Russian> + <Russian>7,62 мм трассирущие</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x51_mag_TracerDescription"> <English>Caliber: 7.62x51 mm Tracer<br />Rounds: 20<br />Used in: Mk18 ABR</English> @@ -328,7 +328,7 @@ <Czech>Ráže: 7.62x51 mm Svítící<br />Munice: 20<br />Použití: Mk18 ABR</Czech> <Portuguese>Calibre: 7,62x51 mm Traçante<br />Projéteis: 20<br />Usado em: Mk18 ABR</Portuguese> <Italian>Calibro: 7.62x51 mm Traccianti<br />Munizioni: 20<br />In uso su: Mk18 ABR</Italian> - <Russian>Калибр: 7.62x51 мм трассирующие<br />Патронов: 20<br />Применимы в: Mk18 ABR</Russian> + <Russian>Калибр: 7,62x51 мм трассирующие<br />Патронов: 20<br />Используются с: Mk18 ABR</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x51_mag_Tracer_DimName"> <English>7.62mm 20rnd Tracer IR-DIM Mag</English> @@ -340,7 +340,7 @@ <Czech>7.62mm 20ks Svítící IR-DIM Zásobník</Czech> <Portuguese>Carregador de 20 projéteis IR-DIM de 7,62mm</Portuguese> <Italian>Caricatore 7.62mm 20rnd Traccianti IR-DIM</Italian> - <Russian>Магазин из 20-ти 7.62 мм трассирующих под ПНВ</Russian> + <Russian>Магазин из 20-ти 7,62 мм трассирующих под ПНВ</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x51_mag_Tracer_DimNameShort"> <English>7.62mm IR-DIM</English> @@ -352,7 +352,7 @@ <Czech>7.62mm IR-DIM</Czech> <Portuguese>7,62mm IR-DIM</Portuguese> <Italian>7.62mm IR-DIM</Italian> - <Russian>7.62 мм ИК-трассирующие</Russian> + <Russian>7,62 мм ИК-трассирующие</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x51_mag_Tracer_DimDescription"> <English>Caliber: 7.62x51 mm Tracer IR-DIM<br />Rounds: 20<br />Used in: Mk18 ABR</English> @@ -364,7 +364,7 @@ <Czech>Ráže: 7.62x51 mm Svítící IR-DIM<br />Munice: 20<br />Použití: Mk18 ABR</Czech> <Portuguese>Calibre: 7,62x51 mm Traçante IR-DIM<br />Projéteis: 20<br />Usado em: Mk18 ABR</Portuguese> <Italian>Calibro: 7.62x51 mm Traccianti IR-DIM<br />Munizioni: 20<br />In uso su: Mk18 ABR</Italian> - <Russian>Калибр: 7.62x51 мм трассирующие под ПНВ<br />Патронов: 20<br />Применимы в: Mk18 ABR</Russian> + <Russian>Калибр: 7,62x51 мм трассирующие под ПНВ<br />Патронов: 20<br />Используются с: Mk18 ABR</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x51_mag_SDName"> <English>7.62mm 20Rnd SD Mag</English> @@ -376,7 +376,7 @@ <Czech>7.62mm 20ks SD Zásobník</Czech> <Portuguese>Carregador de 20 projéteis SD de 7,62mm</Portuguese> <Italian>Caricatore 7.62mm 20Rnd Sil.</Italian> - <Russian>Магазин из 20-ти 7.62 мм дозвуковых</Russian> + <Russian>Магазин из 20-ти 7,62 мм дозвуковых</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x51_mag_SDNameShort"> <English>7.62mm SD</English> @@ -388,7 +388,7 @@ <Czech>7.62mm SD</Czech> <Portuguese>7,62mm SD</Portuguese> <Italian>7.62mm Sil.</Italian> - <Russian>7.62 мм дозвуковые</Russian> + <Russian>7,62 мм дозвуковые</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x51_mag_SDDescription"> <English>Caliber: 7.62x51 mm SD<br />Rounds: 20<br />Used in: Mk18 ABR</English> @@ -400,7 +400,7 @@ <Czech>Ráže: 7.62x51 mm SD<br />Munice: 20<br />Použití: Mk18 ABR</Czech> <Portuguese>Calibre: 7,62x51 mm SD<br />Projéteis: 20<br />Usado em: Mk18 ABR</Portuguese> <Italian>Calibro: 7.62x51 mm Sil.<br />Munizioni: 20<br />In uso su: Mk18 ABR</Italian> - <Russian>Калибр: 7.62x51 мм дозвуковые<br />Патронов: 20<br />Применимы в: Mk18 ABR</Russian> + <Russian>Калибр: 7,62x51 мм дозвуковые<br />Патронов: 20<br />Используются с: Mk18 ABR</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x51_mag_APName"> <English>7.62mm 20Rnd AP Mag</English> @@ -412,7 +412,7 @@ <Czech>7.62mm 20ks AP Zásobník</Czech> <Portuguese>Carregador de 20 projéteis AP de 7,62mm</Portuguese> <Italian>Caricatore 7.62mm 20Rnd AP</Italian> - <Russian>Магазин из 20-ти 7.62 мм бронебойных</Russian> + <Russian>Магазин из 20-ти 7,62 мм бронебойных</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x51_mag_APNameShort"> <English>7.62mm AP</English> @@ -424,7 +424,7 @@ <Czech>7.62mm AP</Czech> <Portuguese>7,62mm AP</Portuguese> <Italian>7.62mm AP</Italian> - <Russian>7.62 мм бронебойные</Russian> + <Russian>7,62 мм бронебойные</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x51_mag_APDescription"> <English>Caliber: 7.62x51 mm AP<br />Rounds: 20<br />Used in: Mk18 ABR</English> @@ -436,7 +436,7 @@ <Czech>Ráže: 7.62x51 mm AP<br />Munice: 20<br />Použití: Mk18 ABR</Czech> <Portuguese>Calibre: 7,62x51 mm AP<br />Projéteis: 20<br />Usado em: Mk18 ABR</Portuguese> <Italian>Calibro: 7.62x51 mm AP<br />Munizioni: 20<br />In uso su: Mk18 ABR</Italian> - <Russian>Калибр: 7.62x51 мм дозвуковые<br />Патронов: 20<br />Применимы в: Mk18 ABR</Russian> + <Russian>Калибр: 7,62x51 мм дозвуковые<br />Патронов: 20<br />Используются с: Mk18 ABR</Russian> </Key> <!-- .338 Norma Magnum --> <Key ID="STR_ACE_130Rnd_338_Mag_TracerName"> @@ -445,6 +445,7 @@ <Polish>Taśma .338 NM 130rd Smugacz</Polish> <French>Bande .338 NM 130Cps Traçante</French> <Spanish>Cinta de 130 balas trazadoras de .338 NM</Spanish> + <Russian>Лента из 130-ти .338 NM трассирующих</Russian> </Key> <Key ID="STR_ACE_130Rnd_338_Mag_TracerNameShort"> <English>.338 NM Tracer</English> @@ -453,6 +454,7 @@ <Czech>.338 NM Svítící</Czech> <French>.338 NM Traçante</French> <Spanish>.338 NM trazadora</Spanish> + <Russian>.338 NM трассирующие</Russian> </Key> <Key ID="STR_ACE_130Rnd_338_Mag_TracerDescription"> <English>Caliber: .338 Norma Magnum Tracer<br />Rounds: 130<br />Used in: SPMG</English> @@ -460,6 +462,7 @@ <Polish>Kaliber: .338 Norma Magnum Smugacz<br />Pociski: 130<br />Używany w: SPMG</Polish> <French>Calibre: .338 Norma Magnum Traçante<br />Cartouches: 130<br />Utilisé dans: SPMG</French> <Spanish>Calibre: .338 Norma Magnum trazadora<br />Balas: 130<br />Se usa en: SPMG</Spanish> + <Russian>Калибр: .338 Norma Magnum трассирующие<br />Патронов: 130<br />Используются в: SPMG</Russian> </Key> <Key ID="STR_ACE_130Rnd_338_Mag_Tracer_DimName"> <English>.338 NM 130Rnd IR-DIM Belt</English> @@ -467,6 +470,7 @@ <Polish>Taśma .338 NM 130rd IR-DIM</Polish> <French>Bande .338 NM 130Cps IR-DIM</French> <Spanish>Cinta de 130 balas IR-DIM de .338 NM</Spanish> + <Russian>Лента из 130-ти .338 NM трасирующих под ПНВ</Russian> </Key> <Key ID="STR_ACE_130Rnd_338_Mag_Tracer_DimNameShort"> <English>.338 NM IR-DIM</English> @@ -475,6 +479,7 @@ <Czech>.338 NM IR-DIM</Czech> <French>.338 NM IR-DIM</French> <Spanish>.338 NM IR-DIM</Spanish> + <Russian>.338 NM ИК-трассирующие</Russian> </Key> <Key ID="STR_ACE_130Rnd_338_Mag_Tracer_DimDescription"> <English>Caliber: .338 Norma Magnum Tracer IR-DIM<br />Rounds: 130<br />Used in: SPMG</English> @@ -482,6 +487,7 @@ <Polish>Kaliber: .338 Norma Magnum Smugacz IR-DIM<br />Pociski: 130<br />Używany w: SPMG</Polish> <French>Calibre: .338 Norma Magnum Traçante IR-DIM<br />Cartouches: 130<br />Utilisé dans: SPMG</French> <Spanish>Calibre: .338 Norma Magnum trazadora IR-DIM<br />Balas: 130<br />Se usa en: SPMG</Spanish> + <Russian>Калибр: .338 Norma Magnum ИК-трассирующие<br />Патронов: 130<br />Используются с: SPMG</Russian> </Key> <Key ID="STR_ACE_130Rnd_338_Mag_APName"> <English>.338 NM 130Rnd AP Belt</English> @@ -489,6 +495,7 @@ <Polish>Taśma .338 NM 130rd AP</Polish> <French>Bande .338 NM 130Cps AP</French> <Spanish>Cinta de 130 balas AP de .338 NM</Spanish> + <Russian>Лента из 130-ти .338 NM бронебойных</Russian> </Key> <Key ID="STR_ACE_130Rnd_338_Mag_APNameShort"> <English>.338 NM AP</English> @@ -497,6 +504,7 @@ <Czech>.338 NM AP</Czech> <French>.338 NM AP</French> <Spanish>.338 NM AP</Spanish> + <Russian>.338 NM бронебойные</Russian> </Key> <Key ID="STR_ACE_130Rnd_338_Mag_APDescription"> <English>Caliber: .338 Norma Magnum AP<br />Rounds: 130<br />Used in: SPMG</English> @@ -504,6 +512,7 @@ <Polish>Kaliber: .338 Norma Magnum AP<br />Pociski: 130<br />Używane w: SPMG</Polish> <French>Calibre: .338 Norma Magnum AP<br />Cartouches: 130<br />Utilisé dans: SPMG</French> <Spanish>Calibre: .338 Norma Magnum AP<br />Balas: 130<br />Se usa en: SPMG</Spanish> + <Russian>Калибр: .338 Norma Magnum бронебойные<br />Патронов: 130<br />Используются с: SPMG</Russian> </Key> <!-- 9.3x64mm 10Rnd --> <Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_TracerName"> @@ -512,6 +521,7 @@ <Polish>Magazynek 9.3mm 10rd Smugacz</Polish> <French>Chargeur 9.3mm 10Cps Traçante</French> <Spanish>Cargador de 10 balas trazadoras de 9.3mm</Spanish> + <Russian>Магазин из 10-ти 9,3 мм трассирующих</Russian> </Key> <Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_TracerNameShort"> <English>9.3mm Tracer</English> @@ -520,6 +530,7 @@ <Czech>9.3mm Svítící</Czech> <French>9.3mm Traçante</French> <Spanish>9.3mm trazadora</Spanish> + <Russian>9,3 мм трассирующие</Russian> </Key> <Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_TracerDescription"> <English>Caliber: 9.3x64mm Tracer<br />Rounds: 10<br />Used in: Cyrus</English> @@ -527,6 +538,7 @@ <Polish>Kaliber: 9,3x64 mm Smugacz<br />Pociski: 10<br />Używany w: Cyrus</Polish> <French>Calibre: 9.3x64mm Traçante<br />Cartouches: 10<br />Utilisé dans: Cyrus</French> <Spanish>Calibre: 9.3x64mm trazadora<br />Balas: 10<br />Se usa en: Cyrus</Spanish> + <Russian>Калибр: 9,3x64 мм трассирующие<br />Патронов: 10<br />Используются с: Cyrus</Russian> </Key> <Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_Tracer_DimName"> <English>9.3mm 10Rnd Tracer IR-DIM Mag</English> @@ -534,6 +546,7 @@ <Polish>Magazynek 9,3mm 10rd Smugacz IR-DIM</Polish> <French>Chargeur 9.3mm 10Cps Traçante IR-DIM</French> <Spanish>Cargador de 10 balas trazadoras IR-DIM de 9.3mm</Spanish> + <Russian>Магазин из 10-ти 9,3 мм ИК-трассирующих</Russian> </Key> <Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_Tracer_DimNameShort"> <English>9.3mm IR-DIM</English> @@ -542,6 +555,7 @@ <Czech>9.3mm IR-DIM</Czech> <French>9.3mm IR-DIM</French> <Spanish>9.3mm IR-DIM</Spanish> + <Russian>9,3 мм ИК-трассирующие</Russian> </Key> <Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_Tracer_DimDescription"> <English>Caliber: 9.3x64mm Tracer IR-DIM<br />Rounds: 10<br />Used in: Cyrus</English> @@ -549,6 +563,7 @@ <Polish>Kaliber: 9,3x64 mm Smugacz IR-DIM<br />Pociski: 10<br />Używany w: Cyrus</Polish> <French>Calibre: 9.3x64mm Traçante IR-DIM<br />Cartouches: 10<br />Utilisé dans: Cyrus</French> <Spanish>Calibre: 9.3x64mm trazadora IR-DIM<br />Balas: 10<br />Se usa en: Cyrus</Spanish> + <Russian>Калибр: 9,3x64 мм ИК-трассирующие<br />Патронов: 10<br />Используются с: Cyrus</Russian> </Key> <Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_APName"> <English>9.3mm 10Rnd AP Mag</English> @@ -556,6 +571,7 @@ <Polish>Magazynek 9,3mm 10rd AP</Polish> <French>Chargeur 9.3mm 10Cps AP</French> <Spanish>Cargador de 10 balas AP de 9.3mm</Spanish> + <Russian>Магазин из 10-ти 9,3 мм бронебойных</Russian> </Key> <Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_APNameShort"> <English>9.3mm AP</English> @@ -564,6 +580,7 @@ <Czech>9.3mm AP</Czech> <French>9.3mm AP</French> <Spanish>9.3mm AP</Spanish> + <Russian>9,3 мм бронебойные</Russian> </Key> <Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_APDescription"> <English>Caliber: 9.3x64mm AP<br />Rounds: 10<br />Used in: Cyrus</English> @@ -571,6 +588,7 @@ <Polish>Kaliber: 9,3x64 mm AP<br />Pociski: 10<br />Używany w: Cyrus</Polish> <French>Calibre: 9.3x64mm AP<br />Cartouches: 10<br />Utilisé dans: Cyrus</French> <Spanish>Calibre: 9.3x64mm AP<br />Balas: 10<br />Se usa en: Cyrus</Spanish> + <Russian>Калибр: 9,3x64 мм бронебойные<br />Патронов: 10<br />Используются с: Cyrus</Russian> </Key> <!-- 9.3x64mm 150Rnd Belt--> <Key ID="STR_ACE_150Rnd_93x64_Mag_TracerName"> @@ -579,6 +597,7 @@ <Polish>Taśma 9,3mm 150rd Smugacz</Polish> <French>Bande 9.3mm 150Cps Traçante</French> <Spanish>Cinta de 150 balas trazadoras de 9.3mm</Spanish> + <Russian>Лента из 150-ти 9,3 мм трассирующих</Russian> </Key> <Key ID="STR_ACE_150Rnd_93x64_Mag_TracerNameShort"> <English>9.3mm Tracer</English> @@ -587,6 +606,7 @@ <Czech>9.3mm Svítící</Czech> <French>9.3mm Traçante</French> <Spanish>9.3mm trazadora</Spanish> + <Russian>9,3 мм трассирующие</Russian> </Key> <Key ID="STR_ACE_150Rnd_93x64_Mag_TracerDescription"> <English>Caliber: 9.3x64mm Tracer<br />Rounds: 150<br />Used in: Navid</English> @@ -594,6 +614,7 @@ <Polish>Kaliber: 9,3x64 mm Smugacz<br />Pociski: 150<br />Używane w: Navid</Polish> <French>Calibre: 9.3x64mm Traçante<br />Cartouches: 150<br />Utilisé dans: Navid</French> <Spanish>Calibre: 9.3x64mm trazadora<br />Balas: 150<br />Se usa en: Navid</Spanish> + <Russian>Калибр: 9,3x64 мм трассирующие<br />Патронов: 150<br />Используются с: Навид</Russian> </Key> <Key ID="STR_ACE_150Rnd_93x64_Mag_Tracer_DimName"> <English>9.3mm 150Rnd Tracer IR-DIM Belt</English> @@ -601,6 +622,7 @@ <Polish>Taśma 9,3mm 150rd Smugacz IR-DIM</Polish> <French>Bande 9.3mm 150Cps Traçante IR-DIM</French> <Spanish>Cinta de 150 balas trazadoras IR-DIM de 9.3mm</Spanish> + <Russian>Лента из 150-ти 9,3 мм ИК-трассирующих</Russian> </Key> <Key ID="STR_ACE_150Rnd_93x64_Mag_Tracer_DimNameShort"> <English>9.3mm IR-DIM</English> @@ -609,6 +631,7 @@ <Czech>9.3mm IR-DIM</Czech> <French>9.3mm IR-DIM</French> <Spanish>9.3mm IR-DIM</Spanish> + <Russian>9,3 мм ИК-трассирующие</Russian> </Key> <Key ID="STR_ACE_150Rnd_93x64_Mag_Tracer_DimDescription"> <English>Caliber: 9.3x64mm Tracer IR-DIM<br />Rounds: 150<br />Used in: Navid</English> @@ -616,6 +639,7 @@ <Polish>Kaliber: 9,3x64 mm Smugacz IR-DIM<br />Pociski: 150<br />Używane w: Navid</Polish> <French>Calibre: 9.3x64mm Traçante IR-DIM<br />Cartouches: 150<br />Utilisé dans: Navid</French> <Spanish>Calibre: 9.3x64mm trazadora IR-DIM<br />Balas: 150<br />Se usa en: Navid</Spanish> + <Russian>Калибр: 9,3x64 мм ИК-трассирующие<br />Патронов: 150<br />Используются с: Навид</Russian> </Key> <Key ID="STR_ACE_150Rnd_93x64_Mag_APName"> <English>9.3mm 150Rnd AP Belt</English> @@ -623,6 +647,7 @@ <Polish>Taśma 9,3mm 150rd AP</Polish> <French>Bande 9.3mm 150Cps AP</French> <Spanish>Cinta de 150 balas AP de 9.3mm</Spanish> + <Russian>Лента из 150-ти 9,3 мм бронебойных</Russian> </Key> <Key ID="STR_ACE_150Rnd_93x64_Mag_APNameShort"> <English>9.3mm AP</English> @@ -631,6 +656,7 @@ <Czech>9.3mm AP</Czech> <French>9.3mm AP</French> <Spanish>9.3mm AP</Spanish> + <Russian>9,3 мм бронебойные</Russian> </Key> <Key ID="STR_ACE_150Rnd_93x64_Mag_APDescription"> <English>Caliber: 9.3x64mm AP<br />Rounds: 150<br />Used in: Navid</English> @@ -638,333 +664,391 @@ <Polish>Kaliber: 9,3x64 mm AP<br />Pociski: 150<br />Używane w: Navid</Polish> <French>Calibre: 9.3x64mm AP<br />Cartouches: 150<br />Utilisé dans: Navid</French> <Spanish>Calibre: 9.3x64mm AP<br />Balas: 150<br />Se usa en: Navid</Spanish> + <Russian>Калибр: 9,3x64 мм бронебойные<br />Патронов: 150<br />Используются с: Навид</Russian> </Key> <Key ID="STR_ACE_16Rnd_9x19_mag_Name"> <English>9x19mm 16Rnd Mag</English> <Polish>Magazynek 9x19mm 16rd</Polish> <French>Chargeur 9x19mm 16Cps</French> <Spanish>Cargador de 16 balas de 9x19mm</Spanish> + <Russian>Магазин из 16-ти 9х19 мм</Russian> </Key> <Key ID="STR_ACE_16Rnd_9x19_mag_NameShort"> <English>9x19mm</English> <Polish>9x19mm</Polish> <French>9x19mm</French> <Spanish>9x19mm</Spanish> + <Russian>9х19 мм</Russian> </Key> <Key ID="STR_ACE_16Rnd_9x19_mag_Description"> <English>9x19mm 30Rnd Mag</English> <Polish>Magazynek 9x19mm 16rd</Polish> <French>9x19mm 30Cps</French> <Spanish>Cargador de 16 balas de 9x19mm</Spanish> + <Russian>Магазин из 30-ти 9х19 мм</Russian> </Key> <Key ID="STR_ACE_30Rnd_9x19_mag_Name"> <English>9x19mm 30Rnd Mag</English> <Polish>Magazynek 9x19mm 30rd</Polish> <French>9x19mm 30Cps</French> <Spanish>Cargador de 30 balas de 9x19mm</Spanish> + <Russian>Магазин из 30-ти 9х19 мм</Russian> </Key> <Key ID="STR_ACE_30Rnd_9x19_mag_NameShort"> <English>9x19mm</English> <Polish>9x19mm</Polish> <French>9x19mm</French> <Spanish>9x19mm</Spanish> + <Russian>9х19 мм</Russian> </Key> <Key ID="STR_ACE_30Rnd_9x19_mag_Description"> <English>9x19mm 30Rnd Mag</English> <Polish>Magazynek 9x19mm 30rd</Polish> <French>9x19mm 30Cps</French> <Spanish>Cargador de 30 balas de 9x19mm</Spanish> + <Russian>Магазин из 30-ти 9х19 мм</Russian> </Key> <Key ID="STR_ACE_10Rnd_762x54_Tracer_mag_Name"> <English>7.62x54mm 10Rnd Tracer IR-DIM Mag</English> <Polish>Magazynek 7,62x54 mm 10rd Smugacz IR-DIM</Polish> <French>Chargeur 7.62x54mm 10Rnd Traçante IR-DIM</French> <Spanish>Cargador de 10 balas trazadoras IR-DIM de 7.62x54mm</Spanish> + <Russian>Магазин из 10-ти 7,62 мм ИК-трассирующих</Russian> </Key> <Key ID="STR_ACE_10Rnd_762x54_Tracer_mag_NameShort"> <English>7.62mm IR-DIM</English> <Polish>7,62mm IR-DIM</Polish> <French>7.62mm IR-DIM</French> <Spanish>7.62mm IR-DIM</Spanish> + <Russian>7,62 мм ИК-трассирующие</Russian> </Key> <Key ID="STR_ACE_10Rnd_762x54_Tracer_mag_Description"> <English>7.62x54mm 10Rnd Tracer IR-DIM Mag</English> <Polish>Magazynek 7,62x54 mm 10rd Smugacz IR-DIM</Polish> <French>Chargeur 7.62x54mm 10Cps Traçante IR-DIM</French> <Spanish>Cargador de 10 balas trazadoras IR-DIM de 7.62x54mm</Spanish> + <Russian>Магазин из 10-ти 7,62 мм ИК-трассирующих</Russian> </Key> <Key ID="STR_ACE_100Rnd_65x39_caseless_mag_Tracer_DimName"> <English>6.5mm 100Rnd Tracer IR-DIM Mag</English> <Polish>Magazynek 6,5mm 100rd Smugacz IR-DIM</Polish> <French>Chargeur 6.5mm 100Rnd Traçante IR-DIM</French> <Spanish>Cargador de 100 balas trazadoras IR-DIM de 6.5mm</Spanish> + <Russian>Магазин из 100-ти 6,5 мм ИК-трассирующих</Russian> </Key> <Key ID="STR_ACE_100Rnd_65x39_caseless_mag_Tracer_DimNameShort"> <English>6.5mm IR-DIM</English> <Polish>6,5mm IR-DIM</Polish> <French>6.5mm IR-DIM</French> <Spanish>6.5mm IR-DIM</Spanish> + <Russian>6,5 мм ИК-трассирующие</Russian> </Key> <Key ID="STR_ACE_100Rnd_65x39_caseless_mag_Tracer_DimDescription"> <English>6.5mm 100Rnd Tracer IR-DIM Mag</English> <Polish>Magazynek 6,5mm 100rd Smugacz IR-DIM</Polish> <French>Chargeur 6.5mm 100Rnd Traçante IR-DIM</French> <Spanish>Cargador de 100 balas trazadoras IR-DIM de 6.5mm</Spanish> + <Russian>Магазин из 100-ти 6,5 мм ИК-трассирующих</Russian> </Key> <Key ID="STR_ACE_200Rnd_65x39_cased_Box_Tracer_DimName"> <English>6.5mm 200Rnd Tracer IR-DIM Belt</English> <Polish>Magazynek 6,5mm 200rd Smugacz IR-DIM</Polish> <French>Bande 6.5mm 200Rnd Traçante IR-DIM</French> <Spanish>Cinta de 200 balas trazadoras IR-DIM de 6.5mm</Spanish> + <Russian>Магазин из 200-ти 6,5 мм ИК-трассирующих</Russian> </Key> <Key ID="STR_ACE_200Rnd_65x39_cased_Box_Tracer_DimNameShort"> <English>6.5mm IR-DIM</English> <Polish>6,5mm IR-DIM</Polish> <French>6.5mm IR-DIM</French> <Spanish>6.5mm IR-DIM</Spanish> + <Russian>6,5 мм ИК-трассирующие</Russian> </Key> <Key ID="STR_ACE_200Rnd_65x39_cased_Box_Tracer_DimDescription"> <English>6.5mm 200Rnd Tracer IR-DIM Belt</English> <Polish>Magazynek 6,5mm 200rd Smugacz IR-DIM</Polish> <French>Bande 6.5mm 200Cps Traçante IR-DIM</French> <Spanish>Cinta de 200 balas trazadoras IR-DIM de 6.5mm</Spanish> + <Russian>Магазин из 200-ти 6,5 мм ИК-трассирующих</Russian> </Key> <Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk262_mag_Name"> <English>5.56mm 30Rnd Mag (Mk262)</English> <Polish>Magazynek 5,56mm 30rd Mk262</Polish> <French>5.56mm 30Cps (Mk262)</French> <Spanish>Cargador de 30 balas de 5.56mm (Mk262)</Spanish> + <Russian>Магазин из 30-ти 5.56 мм Mk262</Russian> </Key> <Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk262_mag_NameShort"> <English>5.56mm Mk262</English> <Polish>5,56mm Mk262</Polish> <French>5.56mm Mk262</French> <Spanish>5.56mm (Mk262)</Spanish> + <Russian>5,56 мм Mk262</Russian> </Key> <Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk262_mag_Description"> <English>Caliber: 5.56x45 mm NATO (Mk262)<br />Rounds: 30</English> <Polish>Kaliber: 5,56x45 mm NATO (Mk262)<br />Pociski: 30</Polish> <French>Calibre: 5.56x45 mm NATO (Mk262)<br />Cartouches: 30</French> <Spanish>Calibre: 5.56x45 mm NATO (Mk262)<br />Balas: 30</Spanish> + <Russian>Калибр: 5,56x45 mm NATO (Mk262)<br />Патронов: 30</Russian> </Key> <Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk318_mag_Name"> <English>5.56mm 30Rnd Mag (Mk318)</English> <Polish>Magazynek 5,56mm 30rd Mk318</Polish> <French>5.56mm 30Cps (Mk318)</French> <Spanish>Cargador de 30 balas de 5.56mm (Mk318)</Spanish> + <Russian>Магазин из 30-ти 5.56 мм Mk318</Russian> </Key> <Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk318_mag_NameShort"> <English>5.56mm Mk318</English> <Polish>5,56mm Mk318</Polish> <French>5.56mm Mk318</French> <Spanish>5.56mm (Mk318)</Spanish> + <Russian>5.56 мм Mk318</Russian> </Key> <Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk318_mag_Description"> <English>Caliber: 5.56x45 mm NATO (Mk318)<br />Rounds: 30</English> <Polish>Kaliber: 5,56x45 mm NATO (Mk318)<br />Pociski: 30</Polish> <French>Calibre: 5.56x45 mm NATO (Mk318)<br />Cartouches: 30</French> <Spanish>Calibre: 5.56x45 mm NATO (Mk318)<br />Balas: 30</Spanish> + <Russian>Калибр: 5,56x45 mm NATO (Mk318)<br />Патронов: 30</Russian> </Key> <Key ID="STR_ACE_10Rnd_762x51_M118LR_Mag_Name"> <English>7.62mm 10Rnd Mag (M118LR)</English> <Polish>Magazynek 7,62mm 10rd (M118LR)</Polish> <French>7.62mm 10Cps (M118LR)</French> <Spanish>Cargador de 10 balas de 7.62mm (M118LR)</Spanish> + <Russian>Магазин из 10-ти 7,62 мм (M118LR)</Russian> </Key> <Key ID="STR_ACE_10Rnd_762x51_M118LR_Mag_NameShort"> <English>7.62mm M118LR</English> <Polish>7,62mm M118LR</Polish> <French>7.62mm M118LR</French> <Spanish>7.62mm (M118LR)</Spanish> + <Russian>7,62 мм M118LR</Russian> </Key> <Key ID="STR_ACE_10Rnd_762x51_M118LR_Mag_Description"> <English>Caliber: 7.62x51 mm NATO (M118LR)<br />Rounds: 10</English> <Polish>Kaliber: 7,62x51 mm NATO (M118LR)<br />Pociski: 10</Polish> <French>Calibre: 7.62x51 mm NATO (M118LR)<br />Cartouches: 10</French> <Spanish>Calibre: 7.62x51 mm NATO (M118LR)<br />Balas: 10</Spanish> + <Russian>Калибр: 7,62x51 мм NATO (M118LR)<br />Патронов: 10</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x51_M118LR_Mag_Name"> <English>7.62mm 20Rnd Mag (M118LR)</English> <Polish>Magazynek 7,62mm 20rd (M118LR)</Polish> <French>7.62mm 20Cps (M118LR)</French> <Spanish>Cargador de 20 balas de 7.62mm (M118LR)</Spanish> + <Russian>Магазин из 20-ти 7,62 мм (M118LR)</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x51_M118LR_Mag_NameShort"> <English>7.62mm M118LR</English> <Polish>7,62mm M118LR</Polish> <French>7.62mm M118LR</French> <Spanish>7.62mm (M118LR)</Spanish> + <Russian>7,62 мм M118LR</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x51_M118LR_Mag_Description"> <English>Caliber: 7.62x51 mm NATO (M118LR)<br />Rounds: 20</English> <Polish>Kaliber: 7,62x51 mm NATO (M118LR)<br />Pociski: 20</Polish> <French>Calibre: 7.62x51 mm NATO (M118LR)<br />Cartouches: 20</French> <Spanish>Calibre: 7.62x51 mm NATO (M118LR)<br />Balas: 20</Spanish> + <Russian>Калибр: 7,62x51 мм NATO (M118LR)<br />Патронов: 20</Russian> </Key> <Key ID="STR_ACE_10Rnd_762x51_Mk319_Mod_0_Mag_Name"> <English>7.62mm 10Rnd Mag (Mk319 Mod 0)</English> <Polish>Magazynek 7,62mm 10rd (Mk319 Mod 0)</Polish> <French>7.62mm 10Cps (Mk319 Mod 0)</French> <Spanish>Cargador de 10 balas de 7.62mm (Mk319 Mod 0)</Spanish> + <Russian>Магазин из 10-ти 7,62 мм (Mk319 Mod 0)</Russian> </Key> <Key ID="STR_ACE_10Rnd_762x51_Mk319_Mod_0_Mag_NameShort"> <English>7.62mm Mk319</English> <Polish>7,62mm Mk319</Polish> <French>7.62mm Mk319</French> <Spanish>7.62mm Mk319</Spanish> + <Russian>7,62mm Mk319</Russian> </Key> <Key ID="STR_ACE_10Rnd_762x51_Mk319_Mod_0_Mag_Description"> <English>Caliber: 7.62x51 mm NATO (Mk319 Mod 0)<br />Rounds: 10</English> <Polish>Kaliber: 7,62x51 mm NATO (Mk319 Mod 0)<br />Pociski: 10</Polish> <French>Calibre: 7.62x51 mm NATO (Mk319 Mod 0)<br />Cartouches: 10</French> <Spanish>Calibre: 7.62x51 mm NATO (Mk319 Mod 0)<br />Balas: 10</Spanish> + <Russian>Калибр: 7,62x51 мм NATO (Mk319 Mod 0)<br />Патронов: 10</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x51_Mk319_Mod_0_Mag_Name"> <English>7.62mm 20Rnd Mag (Mk319 Mod 0)</English> <Polish>Magazynek 7,62mm 20rd (Mk319 Mod 0)</Polish> <French>7.62mm 20Cps (Mk319 Mod 0)</French> <Spanish>Cargador de 20 balas de 7.62mm (Mk319 Mod 0)</Spanish> + <Russian>Магазин из 20-ти 7,62 мм (Mk319 Mod 0)</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x51_Mk319_Mod_0_Mag_NameShort"> <English>7.62mm Mk319</English> <Polish>7,62mm Mk319</Polish> <French>7.62mm Mk319</French> <Spanish>7.62mm Mk319</Spanish> + <Russian>7,62 мм Mk319</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x51_Mk319_Mod_0_Mag_Description"> <English>Caliber: 7.62x51 mm NATO (Mk319 Mod 0)<br />Rounds: 20</English> <Polish>Kaliber: 7,62x51 mm NATO (Mk319 Mod 0)<br />Pociski: 20</Polish> <French>Calibre: 7.62x51 mm NATO (Mk319 Mod 0)<br />Cartouches: 20</French> <Spanish>Calibre: 7.62x51 mm NATO (Mk319 Mod 0)<br />Balas: 20</Spanish> + <Russian>Калибр: 7,62x51 мм NATO (Mk319 Mod 0)<br />Патронов: 20</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x67_Mk248_Mod_0_Mag_Name"> <English>7.62mm 20Rnd Mag (Mk248 Mod 0)</English> <Polish>Magazynek 7,62mm 20rd (Mk248 Mod 0)</Polish> <French>7.62mm 20Cps (Mk248 Mod 0)</French> <Spanish>Cargador de 20 balas de 7.62mm (Mk248 Mod 0)</Spanish> + <Russian>Магазин из 20-ти 7,62 мм (Mk248 Mod 0)</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x67_Mk248_Mod_0_Mag_NameShort"> <English>7.62mm (Mk248 Mod 0)</English> <Polish>7,62mm (Mk248 Mod 0)</Polish> <French>7.62mm (Mk248 Mod 0)</French> <Spanish>7.62mm (Mk248 Mod 0)</Spanish> + <Russian>7,62 мм (Mk248 Mod 0)</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x67_Mk248_Mod_0_Mag_Description"> <English>Caliber: 7.62x67 mm NATO (Mk248 Mod 0)<br />Rounds: 20</English> <Polish>Kaliber: 7,62x67 mm NATO (Mk248 Mod 0)<br />Pociski: 20</Polish> <French>Calibre: 7.62x67mm NATO (Mk248 Mod 0)<br />Cartouches: 20</French> <Spanish>Calibre: 7.62x67 mm NATO (Mk248 Mod 0)<br />Balas: 20</Spanish> + <Russian>Калибр: 7,62x67 мм NATO (Mk248 Mod 0)<br />Патронов: 20</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x67_Mk248_Mod_1_Mag_Name"> <English>7.62mm 20Rnd Mag (Mk248 Mod 1)</English> <Polish>Magazynek 7,62mm 20rd (Mk248 Mod 1)</Polish> <French>7.62mm 20Cps (Mk248 Mod 1)</French> <Spanish>Cargador de 20 balas de 7.62mm (Mk248 Mod 1)</Spanish> + <Russian>Магазин из 20-ти 7,62 мм (Mk248 Mod 1)</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x67_Mk248_Mod_1_Mag_NameShort"> <English>7.62mm (Mk248 Mod 1)</English> <Polish>7,62mm (Mk248 Mod 1)</Polish> <French>7.62mm (Mk248 Mod 1)</French> <Spanish>7.62mm (Mk248 Mod 1)</Spanish> + <Russian>7,62 мм (Mk248 Mod 1)</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x67_Mk248_Mod_1_Mag_Description"> <English>Caliber: 7.62x67 mm NATO (Mk248 Mod 1)<br />Rounds: 20</English> <Polish>Kaliber: 7,62x67 mm NATO (Mk248 Mod 1)<br />Pociski: 20</Polish> <French>Calibre: 7.62x67mm NATO (Mk248 Mod 1)<br />Cartouches: 20</French> <Spanish>Calibre: 7.62x67 mm NATO (Mk248 Mod 1)<br />Balas: 20</Spanish> + <Russian>Калибр: 7,62x67 мм NATO (Mk248 Mod 1)<br />Патронов: 20</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x67_Berger_Hybrid_OTM_Mag_Name"> <English>7.62mm 20Rnd Mag (Berger Hybrid OTM)</English> <Polish>Magazynek 7,62mm 20rd (Berger Hybrid OTM)</Polish> <French>7.62 20Cps (Berger Hybrid OTM)</French> <Spanish>Cargador de 20 balas de 7.62mm (Berger Hybrid OTM)</Spanish> + <Russian>Магазин из 20-ти 7,62 мм (Berger Hybrid OTM)</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x67_Berger_Hybrid_OTM_Mag_NameShort"> <English>7.62mm (OTM)</English> <Polish>7,62mm (OTM)</Polish> <French>7.62mm (OTM)</French> <Spanish>7.62mm (OTM)</Spanish> + <Russian>7,62 мм (OTM)</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x67_Berger_Hybrid_OTM_Mag_Description"> <English>Caliber: 7.62x67 mm NATO (Berger Hybrid OTM)<br />Rounds: 20</English> <Polish>Kaliber: 7,62x67 mm NATO (Berger Hybrid OTM)<br />Pociski: 20</Polish> <French>Calibre: 7.62x67mm NATO (Berger Hybrid OTM)<br />Cartouches: 20</French> <Spanish>Calibre: 7.62x67 mm NATO (Berger Hybrid OTM)<br />Balas: 20</Spanish> + <Russian>Калибр: 7,62x67 мм NATO (Berger Hybrid OTM)<br />Патронов: 20</Russian> </Key> <Key ID="STR_ACE_30Rnd_65x47_Scenar_mag_Name"> <English>6.5x47mm 30Rnd Mag (HPBT Scenar)</English> <French>6.5x47mm 30Cps (HPBT Scenar)</French> <Spanish>Cargador de 30 balas de 6.5x47mm (HPBT Scenar)</Spanish> + <Russian>Магазин из 30-ти 6,5x47 мм (HPBT Scenar)</Russian> </Key> <Key ID="STR_ACE_30Rnd_65x47_Scenar_mag_NameShort"> <English>6.5mm Scenar</English> <French>6.5mm Scenar</French> <Spanish>6.5mm Scenar</Spanish> + <Russian>6,5 мм Scenar</Russian> </Key> <Key ID="STR_ACE_30Rnd_65x47_Scenar_mag_Description"> <English>Caliber: 6.5x47mm (HPBT Scenar)<br />Rounds: 30</English> <French>Calibre: 6.5x47mm (HPBT Scenar)<br />Cartouches: 30</French> <Spanish>Calibre: 6.5x47mm (HPBT Scenar)<br />Balas: 30</Spanish> + <Russian>Калибр: 6,5x47 мм (HPBT Scenar)<br />Патронов: 30</Russian> </Key> <Key ID="STR_ACE_10Rnd_338_300gr_HPBT_Mag_Name"> <English>.338 10Rnd Mag (300gr Sierra MatchKing HPBT)</English> <French>.338 10 Cps (300gr Sierra MatchKing HPBT)</French> <Spanish>Cargador de 10 balas de 8.6x70mm (300gr Sierra MatchKing HPBT)</Spanish> + <Russian>Магазин из 10-ти .338 (300 гран Sierra MatchKing HPBT)</Russian> </Key> <Key ID="STR_ACE_10Rnd_338_300gr_HPBT_Mag_NameShort"> <English>.338 (HPBT)</English> <French>.338 (HPBT)</French> <Spanish>.338 (HPBT)</Spanish> + <Russian>.338 (HPBT)</Russian> </Key> <Key ID="STR_ACE_10Rnd_338_300gr_HPBT_Mag_Description"> <English>Caliber: 8.6x70mm (300gr Sierra MatchKing HPBT)<br />Rounds: 10</English> <French>Calibre: 8.6x70mm (300gr Sierra MatchKing HPBT)<br />Cartouches: 10</French> <Spanish>Calibre: 8.6x70mm (300gr Sierra MatchKing HPBT)<br />Balas: 10</Spanish> + <Russian>Калибр: 8,6x70 мм (300 гран Sierra MatchKing HPBT)<br />Патронов: 10</Russian> </Key> <Key ID="STR_ACE_10Rnd_338_API526_Mag_Name"> <English>.338 10Rnd Mag (API526)</English> <French>.338 10Cps (API526)</French> <Spanish>Cargador de 10 balas de .338 (API526)</Spanish> + <Russian>Магазин из 10-ти .338 (API526)</Russian> </Key> <Key ID="STR_ACE_10Rnd_338_API526_Mag_NameShort"> <English>.338 AP</English> <French>.338 AP</French> <Spanish>.338 AP</Spanish> + <Russian>.338 бронебойные</Russian> </Key> <Key ID="STR_ACE_10Rnd_338_API526_Mag_Description"> <English>Caliber: 8.6x70mm (API526)<br />Rounds: 10</English> <French>Calibre: 8.6x70mm (API526)<br />Cartouches: 10</French> <Spanish>Calibre: 8.6x70mm (API526)<br />Balas: 10</Spanish> + <Russian>Калибр: 8,6x70mm (API526)<br />Патронов: 10</Russian> </Key> <Key ID="STR_ACE_5Rnd_127x99_Mag_Name"> <English>12.7x99mm 5Rnd Mag</English> <French>12.7x99mm 5Cps</French> <Spanish>Cargador de 5 balas de 12.7x99mm</Spanish> + <Russian>Магазин из 5-ти 12,7x99 мм</Russian> </Key> <Key ID="STR_ACE_5Rnd_127x99_Mag_NameShort"> <English>12.7mm</English> <French>12.7mm</French> <Spanish>12.7mm</Spanish> + <Russian>12,7 мм</Russian> </Key> <Key ID="STR_ACE_5Rnd_127x99_Mag_Description"> <English>Caliber: 12.7x99mm<br />Rounds: 5</English> <French>Calibre: 12.7x99mm<br />Cartouches: 5</French> <Spanish>Calibre: 12.7x99mm<br />Balas: 5</Spanish> + <Russian>Калибр: 12,7x99mm<br />Патронов: 5</Russian> </Key> <Key ID="STR_ACE_5Rnd_127x99_AMAX_Mag_Name"> <English>12.7x99mm 5Rnd Mag (AMAX)</English> <French>12.7x99mm 5Rnd Mag (AMAX)</French> <Spanish>Cargador de 5 balas de 12.7x99mm (AMAX)</Spanish> + <Russian>Магазин из 5-ти 12,7x99 мм (A-MAX)</Russian> </Key> <Key ID="STR_ACE_5Rnd_127x99_AMAX_Mag_NameShort"> <English>12.7mm</English> <French>12.7mm</French> <Spanish>12.7mm</Spanish> + <Russian>12,7 мм</Russian> </Key> <Key ID="STR_ACE_5Rnd_127x99_AMAX_Mag_Description"> <English>Caliber: 12.7x99mm (AMAX)<br />Rounds: 5</English> <French>Calibre: 12.7x99mm (AMAX)<br />Cartouches: 5</French> <Spanish>Calibre: 12.7x99mm (AMAX)<br />Balas: 5</Spanish> + <Russian>Калибр: 12,7x99 мм (A-MAX)<br />Патронов: 5</Russian> </Key> </Package> </Project> \ No newline at end of file diff --git a/addons/laserpointer/stringtable.xml b/addons/laserpointer/stringtable.xml index 6be6baf82b..8fa38e24dd 100644 --- a/addons/laserpointer/stringtable.xml +++ b/addons/laserpointer/stringtable.xml @@ -42,7 +42,7 @@ <Italian><t color='#9cf953'>Uso: </t>Laser ON/OFF</Italian> <Polish><t color='#9cf953'>Użyj: </t>wł./wył. laser</Polish> <Portuguese><t color='#9cf953'>Uso: </t>Ativar/Desativar laser</Portuguese> - <Russian><t color='#9cf953'>Использовать: </t>вкл/выкл лазер</Russian> + <Russian><t color='#9cf953'>Использовать: </t>ВКЛ/ВЫКЛ лазер</Russian> <Spanish><t color='#9cf953'>Usar: </t>encender/apagar láser</Spanish> <Hungarian><t color='#9cf953'>Használat: </t>Lézer BE/KI kapcsolása</Hungarian> </Key> @@ -72,4 +72,4 @@ <Spanish>Cambiar Laser / Laser IR</Spanish> </Key> </Package> -</Project> +</Project> \ No newline at end of file diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 9f651e90b7..598e64efb0 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -468,7 +468,7 @@ <English>Minor</English> <German>Gering</German> <Spanish>Menor</Spanish> - <Russian>Незначительная</Russian> + <Russian>Незначительные травмы</Russian> <Polish>Normalny</Polish> <French>Mineur</French> <Czech>Minimální</Czech> @@ -1611,4 +1611,4 @@ <Spanish>Aberración cromática</Spanish> </Key> </Package> -</Project> +</Project> \ No newline at end of file diff --git a/addons/missileguidance/stringtable.xml b/addons/missileguidance/stringtable.xml index c9cb4c4c6b..aec2303301 100644 --- a/addons/missileguidance/stringtable.xml +++ b/addons/missileguidance/stringtable.xml @@ -11,7 +11,7 @@ <Italian>Guida missili avanzata</Italian> <Portuguese>Avançado Missile Guidance</Portuguese> <Hungarian>Fejlett rakétairányító</Hungarian> - <Russian>Расширенный ракетой</Russian> + <Russian>Продвинутое наведение ракет</Russian> </Key> <Key ID="STR_ACE_Hydra70_DAGR"> <English>Hydra-70 DAGR Missile</English> @@ -23,7 +23,7 @@ <Italian>Missile Hydra-70 DAGR</Italian> <Portuguese></Portuguese> <Hungarian>Hydra-70 DAGR rakéta</Hungarian> - <Russian></Russian> + <Russian>Hydra-70 DAGR</Russian> </Key> <Key ID="STR_ACE_Hydra70_DAGR_Short"> <English>DAGR</English> @@ -35,7 +35,7 @@ <Italian>DAGR</Italian> <Portuguese></Portuguese> <Hungarian>DAGR</Hungarian> - <Russian></Russian> + <Russian>DAGR</Russian> </Key> <Key ID="STR_ACE_Hydra70_DAGR_Desc"> <English>Hydra-70 DAGR Laser Guided Missile</English> @@ -47,7 +47,7 @@ <Italian>Hydra-70 DAGR missile guida laser</Italian> <Portuguese></Portuguese> <Hungarian>Hydra-70 DAGR lézer-irányÃtott rakéta</Hungarian> - <Russian></Russian> + <Russian>Управляемая ракета лазерного наведения Hydra-70 DAGR</Russian> </Key> <Key ID="STR_ACE_Hellfire_AGM114K"> <English>Hellfire II AGM-114K Missile</English> @@ -59,7 +59,7 @@ <Italian>Missile Hellfire II AGM-114K</Italian> <Portuguese></Portuguese> <Hungarian>Hellfire II AGM-114K rakéta</Hungarian> - <Russian></Russian> + <Russian>Hellfire II AGM-114K</Russian> </Key> <Key ID="STR_ACE_Hellfire_AGM114K_Short"> <English>AGM-114K</English> @@ -71,7 +71,7 @@ <Italian>AGM-114K</Italian> <Portuguese></Portuguese> <Hungarian>AGM-114K</Hungarian> - <Russian></Russian> + <Russian>AGM-114K</Russian> </Key> <Key ID="STR_ACE_Hellfire_AGM114K_desc"> <English>Hellfire II AGM-114K Laser Guided Missile</English> @@ -83,7 +83,7 @@ <Italian>Missile guida laser Hellfire II AGM-114K</Italian> <Portuguese></Portuguese> <Hungarian>Hellfire II AGM-114K lézer-irányÃtott rakéta</Hungarian> - <Russian></Russian> + <Russian>Управляемая ракета лазерного наведения Hellfire II AGM-114K</Russian> </Key> </Package> -</Project> +</Project> \ No newline at end of file diff --git a/addons/movement/stringtable.xml b/addons/movement/stringtable.xml index eb91496de8..843705ebea 100644 --- a/addons/movement/stringtable.xml +++ b/addons/movement/stringtable.xml @@ -11,7 +11,7 @@ <Italian>Mostra peso in libbre</Italian> <Portuguese>Mostrar peso em libras</Portuguese> <Hungarian>Súly megjelenítése fontban.</Hungarian> - <Russian>Показать вес в фунтах</Russian> + <Russian>Показывать вес в фунтах</Russian> </Key> <Key ID="STR_ACE_Movement_Weight"> <English>Weight:</English> @@ -48,4 +48,4 @@ <Italian>Non puoi arrampicarti qui</Italian> </Key> </Package> -</Project> +</Project> \ No newline at end of file diff --git a/addons/nametags/stringtable.xml b/addons/nametags/stringtable.xml index 32eb35781b..5ad5b4b956 100644 --- a/addons/nametags/stringtable.xml +++ b/addons/nametags/stringtable.xml @@ -10,6 +10,7 @@ <Polish>Pokaż imiona</Polish> <Hungarian>Nevek mutatása</Hungarian> <Russian>Показать имена</Russian> + <Italian>Mostra i nomi</Italian> </Key> <Key ID="STR_ACE_NameTags_ShowPlayerNames"> <English>Show player names</English> @@ -30,7 +31,7 @@ <German>Zeige Spielernamen nur an, wenn die Maus auf sie gerrichtet ist (benötigt Spielernamen)</German> <French>Noms uniquement sous le curseur (si noms affichés)</French> <Czech>Zobrazit jméno hráče jenom na kurzor (vyžaduje jména hráčů)</Czech> - <Italian>Mostra i nomi solo se puntati (richiede i nomi dei giocatori abilitati)</Italian> + <Italian>Mostra i nomi solo se puntati (richiede mostra nomi abilitato)</Italian> <Portuguese>Mostrar nome de jogador somente no cursor (requer nome de jogadores)</Portuguese> <Hungarian>Játékosok nevének mutatása csak a kurzoron (a nevek mutatása szükséges)</Hungarian> <Russian>Показать имена игроков только под курсором (требует имен игроков)</Russian> @@ -44,6 +45,7 @@ <Polish>Pokaż imiona graczy tylko po przytrzymaniu klawisza (wymagana opcja Pokaż imiona graczy)</Polish> <Hungarian>Játékosnevek mutatása csak gombnyomásra (a nevek mutatása szükséges)</Hungarian> <Russian>Показать имена игроков только по нажатию клавиши (требует имен игроков)</Russian> + <Italian>Mostra i nomi solo se si preme il tasto (richiede mostra nomi abilitato)</Italian> </Key> <Key ID="STR_ACE_NameTags_ShowPlayerRanks"> <English>Show player ranks (requires player names)</English> @@ -52,10 +54,10 @@ <Spanish>Mostrar rango de los jugadores (requiere Mostrar nombres de jugadores)</Spanish> <French>Grade des joueurs (si noms affichés)</French> <Czech>Zobrazit hodnosti hráčů (vyžaduje jména hráčů)</Czech> - <Italian>Mostra i gradi (richiede i nomi dei giocatori abilitati)</Italian> + <Italian>Mostra i gradi (richiede mostra nomi abilitato)</Italian> <Portuguese>Mostrar patente de jogadores (requer nome de jogadores)</Portuguese> <Hungarian>Játékosok rendfokozatának mutatása (a nevek mutatása szükséges)</Hungarian> - <Russian>Показать звания игроков (требует имен игроков)</Russian> + <Russian>Показывать звания игроков (требует имен игроков)</Russian> </Key> <Key ID="STR_ACE_NameTags_ShowVehicleCrewInfo"> <English>Show vehicle crew info</English> @@ -64,8 +66,9 @@ <Spanish>Mostrar tripulantes</Spanish> <Polish>Pokaż załogę pojazdu</Polish> <Czech>Zobrazit info o posádce vozidla</Czech> - <Russian>Показать экипаж</Russian> + <Russian>Показывать информацию об экипаже</Russian> <Hungarian>Jármű-legénység adatainak mutatása</Hungarian> + <Italian>Mostra le informazioni sull'equipaggio del veicolo</Italian> </Key> <Key ID="STR_ACE_NameTags_ShowNamesForAI"> <English>Show name tags for AI units</English> @@ -76,6 +79,7 @@ <Polish>Wyświetl imiona jednostek AI</Polish> <French>Afficher les noms des IA</French> <Hungarian>Névcímkék mutatása MI-egységeknél</Hungarian> + <Italian>Mostra le tag nomi per le unità AI</Italian> </Key> <Key ID="STR_ACE_NameTags_ShowSoundWaves"> <English>Show SoundWaves (requires player names)</English> @@ -86,6 +90,7 @@ <Polish>Pokaż fale dźwiękowe (wymagana opcja Pokaż imiona graczy)</Polish> <French>Afficher "qui parle" (si noms affichés)</French> <Hungarian>"Hanghullámok" mutatása (a nevek mutatása szükséges)</Hungarian> + <Italian>Mostra barra movimento audio (richiede mostra nomi abilitato)</Italian> </Key> <Key ID="STR_ACE_NameTags_DefaultNametagColor"> <English>Default Nametag Color (Non Group Members)</English> @@ -96,6 +101,7 @@ <French>Couleur d'affichage par défaut (si dans aucun groupe)</French> <Czech>Standardní barva jmenovek (pro nečleny jednotky)</Czech> <Hungarian>Alap névcímke-szín (csoporton kívüli személyek)</Hungarian> + <Italian>Colore nametag di default (membri non del gruppo)</Italian> </Key> </Package> -</Project> +</Project> \ No newline at end of file diff --git a/addons/nightvision/stringtable.xml b/addons/nightvision/stringtable.xml index 20c916104a..a2e24d79df 100644 --- a/addons/nightvision/stringtable.xml +++ b/addons/nightvision/stringtable.xml @@ -91,7 +91,7 @@ <Spanish>Sistema de visión nocturna (Panorámicas)</Spanish> <Polish>Gogle noktowizyjne (panoramiczne)</Polish> <Czech>Noktovizor (Širokoúhlý)</Czech> - <Russian>ПНВ (Широкий)</Russian> + <Russian>ПНВ (Широкоугольный)</Russian> <French>JVN (Large)</French> <Hungarian>Éjjellátó szemüveg (széles látószögű)</Hungarian> </Key> @@ -102,7 +102,7 @@ <Polish>Czułość: %1</Polish> <Czech>Jas: %1</Czech> <French>Luminosité : %1</French> - <Russian>Контраст: </Russian> + <Russian>Яркость: %1</Russian> <Hungarian>Fényerő: %1</Hungarian> <Portuguese>Luminosidade: %1</Portuguese> <Italian>Luminosità: %1</Italian> @@ -132,4 +132,4 @@ <Italian>Riduci la luminosità dell'NVG</Italian> </Key> </Package> -</Project> +</Project> \ No newline at end of file diff --git a/addons/reload/stringtable.xml b/addons/reload/stringtable.xml index 7c401fec05..425c2ba8db 100644 --- a/addons/reload/stringtable.xml +++ b/addons/reload/stringtable.xml @@ -10,6 +10,7 @@ <Polish>Sprawdź stan amunicji przy przeładowaniu broni</Polish> <French>Vérification des munitions au rechargement</French> <Hungarian>Lőszer ellenőrzése a fegyver újratöltésekor</Hungarian> + <Italian>Controlla le munizioni ricaricando</Italian> </Key> <Key ID="STR_ACE_reload_SettingDisplayTextDesc"> <English>Check the ammo in your new magazine on magazine reload.</English> @@ -20,6 +21,7 @@ <Polish>Pokaż stan amunicji w nowym magazynku przy przeładowaniu broni</Polish> <French>Vérification du nombre de munition au rechargement</French> <Hungarian>A lőszer ellenőrzése az új tárad behelyezésekor újratöltés közben.</Hungarian> + <Italian>Controlla le munizioni rimanenti nel caricatore in fase di cambio caricatore.</Italian> </Key> <Key ID="STR_ACE_Reload_checkAmmo"> <English>Check Ammo</English> @@ -31,7 +33,7 @@ <Czech>Zkontrolovat Munici</Czech> <Italian>Controlla le munizioni</Italian> <Portuguese>Conferir munições</Portuguese> - <Russian>Kонтроль Боеприпасы</Russian> + <Russian>Проверить боеприпасы</Russian> </Key> <Key ID="STR_ACE_Reload_Ammo"> <English>Ammo</English> @@ -54,6 +56,7 @@ <Polish>Podłącz taśmę</Polish> <German>Gurt anhängen</German> <Hungarian>Töltényheveder összekötése</Hungarian> + <Italian>Attacca la tracolla</Italian> </Key> <Key ID="STR_ACE_Reload_LinkingBelt"> <English>Linking belt...</English> @@ -64,6 +67,7 @@ <Polish>Podłączanie taśmy...</Polish> <German>Gurt anhängen ...</German> <Hungarian>Töltényheveder összekötése folyamatban...</Hungarian> + <Italian>Attacco la tracolla...</Italian> </Key> </Package> -</Project> +</Project> \ No newline at end of file diff --git a/addons/respawn/stringtable.xml b/addons/respawn/stringtable.xml index dceeb687fe..67273ff96d 100644 --- a/addons/respawn/stringtable.xml +++ b/addons/respawn/stringtable.xml @@ -10,6 +10,7 @@ <Polish>Rozmieszczenie za 5 sekund ...</Polish> <Czech>Respawn za 5 sekund...</Czech> <Hungarian>Kihelyezés 5 másodperc múlva ...</Hungarian> + <Italian>Dispiegamento in 5 secondi ...</Italian> </Key> <Key ID="STR_ACE_Respawn_Deployed"> <English>Rallypoint deployed</English> @@ -20,6 +21,7 @@ <Polish>Punkt zbiórki rozmieszczony</Polish> <Czech>Rallypoint umístěn</Czech> <Hungarian>Gyülekezőpont elhelyezve</Hungarian> + <Italian>Rallypoint dispiegato</Italian> </Key> <Key ID="STR_ACE_Respawn_TeleportedToBase"> <English>Teleported to Base</English> @@ -30,6 +32,7 @@ <Polish>Przeteleportowano do bazy</Polish> <Czech>Odteleportován na základnu</Czech> <Hungarian>Bázisra teleportálva</Hungarian> + <Italian>Teleportato alla base</Italian> </Key> <Key ID="STR_ACE_Respawn_TeleportedToRallypoint"> <English>Teleported to Rallypoint</English> @@ -40,6 +43,7 @@ <Polish>Przeteleportowano do punktu zbiórki</Polish> <Czech>Odteleportován na rallypoint</Czech> <Hungarian>Gyülekezőpontra teleportálva</Hungarian> + <Italian>Teleportato al rallypoint</Italian> </Key> <Key ID="STR_ACE_Respawn_RallypointWestBase"> <English>Rallypoint West (Base)</English> @@ -57,7 +61,7 @@ <English>Rallypoint Independent (Base)</English> <German>Sammelpunkt Widerstand (Basis)</German> <Spanish>Punto de reunión Independiente (Base)</Spanish> - <Russian>Точка сбора Независимых (База</Russian> + <Russian>Точка сбора Независимых (База)</Russian> </Key> <Key ID="STR_ACE_Respawn_RallypointWest"> <English>Rallypoint West</English> diff --git a/addons/weaponselect/stringtable.xml b/addons/weaponselect/stringtable.xml index ae99f3e032..14f24b92e1 100644 --- a/addons/weaponselect/stringtable.xml +++ b/addons/weaponselect/stringtable.xml @@ -10,6 +10,7 @@ <Polish>Wyświetl tekst przy rzucie granatem</Polish> <French>Afficher texte lors d'un lancé de grenade</French> <Hungarian>Szöveg mutatása gránát eldobásakor</Hungarian> + <Italian>Mostra indicazioni nel lancio granate</Italian> </Key> <Key ID="STR_ACE_Weaponselect_SettingDisplayTextDesc"> <English>Display a hint or text on grenade throw.</English> @@ -20,6 +21,7 @@ <Polish>Wyświetla powiadomienie lub tekst przy rzucie granatem.</Polish> <French>Afficher texte/info au lancé de grenade</French> <Hungarian>Jelez egy súgót vagy szöveget a gránát eldobásakor.</Hungarian> + <Italian>Mostra un suggerimento quando si lanciano granate</Italian> </Key> <Key ID="STR_ACE_WeaponSelect_SelectPistol"> <English>Select Pistol</English> @@ -55,7 +57,7 @@ <French>Sélectionner Lanceur</French> <Hungarian>Rakétavető Kiválasztása</Hungarian> <Portuguese>Selecionar Lançador</Portuguese> - <Italian>Seleziona il Lanciatore</Italian> + <Italian>Seleziona il Lanciamissili</Italian> </Key> <Key ID="STR_ACE_WeaponSelect_SelectRifleMuzzle"> <English>Select Grenade Launcher</English> @@ -162,6 +164,7 @@ <Hungarian>Gránát: %1</Hungarian> <Russian>Граната %1</Russian> <French>Grenade %1</French> + <Italian>Granata %1</Italian> </Key> <Key ID="STR_ACE_WeaponSelect_ReadyGrenade"> <English>Ready Grenade</English> @@ -172,6 +175,7 @@ <Hungarian>Gránát előkészítése</Hungarian> <Russian>Подготовить гранату</Russian> <French>Grenade prête</French> + <Italian>Granata pronta</Italian> </Key> <Key ID="STR_ACE_WeaponSelect_SelectGrenadeFrag"> <English>Select Frag Grenade</English> @@ -194,7 +198,7 @@ <Hungarian>Nem-robbanó Gránát Kiválasztása</Hungarian> <Czech>Zvolit Ne-Výbušný Granát</Czech> <Portuguese>Selecionar Granada</Portuguese> - <Italian>Seleziona Altre Granate</Italian> + <Italian>Seleziona granate non a frammentazione</Italian> <Russian>Выбрать гранату</Russian> </Key> <Key ID="STR_ACE_WeaponSelect_ThrowGrenade"> @@ -218,6 +222,7 @@ <Czech>Žádné granáty</Czech> <Hungarian>Nincs több gránát</Hungarian> <Russian>Гранат не осталось</Russian> + <Italian>Granate esaurite</Italian> </Key> <Key ID="STR_ACE_WeaponSelect_NoFragsLeft"> <English>No frags left</English> @@ -241,7 +246,7 @@ <Czech>Už nejsou žádné ostatní granáty</Czech> <Portuguese>Não há outras granadas restantes</Portuguese> <Italian>Nessun'altra granata rimanente.</Italian> - <Russian>Летальные гранаты закончились</Russian> + <Russian>Нелетальные гранаты закончились</Russian> </Key> <Key ID="STR_ACE_WeaponSelect_NoGrenadeSelected"> <English>No grenade selected</English> @@ -263,7 +268,8 @@ <French>Tirer le lance-pots fumigènes</French> <Polish>Wystrzel granat dymny</Polish> <Hungarian>Füstvető eltüzelése</Hungarian> - <Russian>Запустить дымовую завесу</Russian> + <Russian>Пустить дымовую завесу</Russian> + <Italian>Lancia fumogeno</Italian> </Key> </Package> </Project> \ No newline at end of file diff --git a/addons/winddeflection/stringtable.xml b/addons/winddeflection/stringtable.xml index 897a3c556b..73d07eddd4 100644 --- a/addons/winddeflection/stringtable.xml +++ b/addons/winddeflection/stringtable.xml @@ -11,16 +11,18 @@ <French>Vent</French> <German>Windinformationen</German> <Hungarian>Szélinformáció</Hungarian> + <Italian>Informazioni sul vento</Italian> </Key> <Key ID="STR_ACE_WEATHER_METER_WIND_DIRECTION"> <English>Direction: %1</English> <Polish>Kierunek: %1</Polish> <Spanish>Dirección: %1</Spanish> - <Russian>Направление: %1</Russian> + <Russian>Направление: %1°</Russian> <Czech>Směr: %1</Czech> <French>Direction %1</French> <German>Windrichtung: %1</German> <Hungarian>Irány: %1</Hungarian> + <Italian>Direzione: %1</Italian> </Key> <Key ID="STR_ACE_WEATHER_METER_WIND_SPEED"> <English>Speed: %1 m/s</English> @@ -31,6 +33,7 @@ <French>Vitesse %1 m/s</French> <German>Geschwindigkeit: %1m/s</German> <Hungarian>Sebesség: %1 m/s</Hungarian> + <Italian>Velocità: %1 m/s</Italian> </Key> <Key ID="STR_ACE_WEATHER_METER_WEATHER_CATEGORY"> <English>Weather Information</English> @@ -41,6 +44,7 @@ <French>Météo</French> <German>Wetterinformationen</German> <Hungarian>Időjárás-Információ</Hungarian> + <Italian>Meteo</Italian> </Key> <Key ID="STR_ACE_WEATHER_METER_WEATHER_HUMIDITY"> <English>Humidity: %1%</English> @@ -51,7 +55,8 @@ <French>Humidité: %1%</French> <German>Luftfeuchtigkeit: %1</German> <Hungarian>Páratartalom: %1%</Hungarian> + <Italian>Umidità: %1%</Italian> </Key> </Container> </Package> -</Project> +</Project> \ No newline at end of file From 9cede7cf85ab3882f54c879570edbcfd2172328a Mon Sep 17 00:00:00 2001 From: jonpas <jonpas33@gmail.com> Date: Fri, 17 Apr 2015 19:10:41 +0200 Subject: [PATCH 081/257] Module name Interact_Menu -> Interaction in documentation --- .../development/modularity-and-pbo-structure.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/documentation/development/modularity-and-pbo-structure.md b/documentation/development/modularity-and-pbo-structure.md index 0c16c4bc97..036ebb35d4 100644 --- a/documentation/development/modularity-and-pbo-structure.md +++ b/documentation/development/modularity-and-pbo-structure.md @@ -17,16 +17,14 @@ Main principles: Main principles: - Try to keep single module dependencies as much as possible -- Interact_Menu would be the requirement for most modules. -- Anything that is 100% config should require Common and not Interact_Menu. +- Interaction would be the requirement for most modules. +- Anything that is 100% config should require Common and not Interaction. ``` -Main -> Common -> OptionsMenu -> Interact_Menu -> Most things +Main -> Common -> OptionsMenu -> Interaction -> Most things Main -> Common -> Config things Main -> Common -> 3D Models | - Interact_Menu | -> Feature + Interaction | -> Feature ``` - - From 6e077de829d2a7c95a1f443553e40289f939a278 Mon Sep 17 00:00:00 2001 From: PabstMirror <elephantisaterriblemascot@gmail.com> Date: Fri, 17 Apr 2015 12:13:23 -0500 Subject: [PATCH 082/257] Medical - Use default value instead of 0 for getVar #683 - should prevent people getting knocked out from any damage source if the variables are undefined --- addons/medical/XEH_postInit.sqf | 2 +- addons/medical/functions/fnc_addToInjuredCollection.sqf | 6 +++--- addons/medical/functions/fnc_handleUnitVitals.sqf | 4 ++-- addons/medical/functions/fnc_setCardiacArrest.sqf | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/addons/medical/XEH_postInit.sqf b/addons/medical/XEH_postInit.sqf index 309bb2a888..ae6c87c1c6 100644 --- a/addons/medical/XEH_postInit.sqf +++ b/addons/medical/XEH_postInit.sqf @@ -248,7 +248,7 @@ if (USE_WOUND_EVENT_SYNC) then { }; [ - {(((_this select 0) getvariable [QGVAR(bloodVolume), 0]) < 65)}, + {(((_this select 0) getvariable [QGVAR(bloodVolume), 100]) < 65)}, {(((_this select 0) getvariable [QGVAR(pain), 0]) > 0.9)}, {(((_this select 0) call FUNC(getBloodLoss)) > 0.25)}, {((_this select 0) getvariable [QGVAR(inReviveState), false])}, diff --git a/addons/medical/functions/fnc_addToInjuredCollection.sqf b/addons/medical/functions/fnc_addToInjuredCollection.sqf index 82c385f0e1..cbe146d701 100644 --- a/addons/medical/functions/fnc_addToInjuredCollection.sqf +++ b/addons/medical/functions/fnc_addToInjuredCollection.sqf @@ -33,10 +33,10 @@ if ([_unit] call FUNC(hasMedicalEnabled) || _force) then { [_this select 1] call CBA_fnc_removePerFrameHandler; if (!local _unit) then { if (GVAR(level) >= 2) then { - _unit setvariable [QGVAR(heartRate), _unit getvariable [QGVAR(heartRate), 0], true]; - _unit setvariable [QGVAR(bloodPressure), _unit getvariable [QGVAR(bloodPressure), [0, 0]], true]; + _unit setvariable [QGVAR(heartRate), _unit getvariable [QGVAR(heartRate), 80], true]; + _unit setvariable [QGVAR(bloodPressure), _unit getvariable [QGVAR(bloodPressure), [80, 120]], true]; }; - _unit setvariable [QGVAR(bloodVolume), _unit getvariable [QGVAR(bloodVolume), 0], true]; + _unit setvariable [QGVAR(bloodVolume), _unit getvariable [QGVAR(bloodVolume), 100], true]; }; } else { [_unit] call FUNC(handleUnitVitals); diff --git a/addons/medical/functions/fnc_handleUnitVitals.sqf b/addons/medical/functions/fnc_handleUnitVitals.sqf index 81c9ffea40..2b175d7ca2 100644 --- a/addons/medical/functions/fnc_handleUnitVitals.sqf +++ b/addons/medical/functions/fnc_handleUnitVitals.sqf @@ -27,7 +27,7 @@ if (_syncValues) then { _unit setvariable [QGVAR(lastMomentValuesSynced), time]; }; -_bloodVolume = (_unit getvariable [QGVAR(bloodVolume), 0]) + ([_unit] call FUNC(getBloodVolumeChange)); +_bloodVolume = (_unit getvariable [QGVAR(bloodVolume), 100]) + ([_unit] call FUNC(getBloodVolumeChange)); _bloodVolume = _bloodVolume max 0; _unit setvariable [QGVAR(bloodVolume), _bloodVolume, _syncValues]; @@ -100,7 +100,7 @@ if (GVAR(level) >= 2) then { }; // Set the vitals - _heartRate = (_unit getvariable [QGVAR(heartRate), 0]) + (([_unit] call FUNC(getHeartRateChange)) * _interval); + _heartRate = (_unit getvariable [QGVAR(heartRate), 80]) + (([_unit] call FUNC(getHeartRateChange)) * _interval); _unit setvariable [QGVAR(heartRate), _heartRate, _syncValues]; _bloodPressure = [_unit] call FUNC(getBloodPressure); diff --git a/addons/medical/functions/fnc_setCardiacArrest.sqf b/addons/medical/functions/fnc_setCardiacArrest.sqf index cebf968898..b4483defc2 100644 --- a/addons/medical/functions/fnc_setCardiacArrest.sqf +++ b/addons/medical/functions/fnc_setCardiacArrest.sqf @@ -33,7 +33,7 @@ _timeInCardiacArrest = 120 + round(random(600)); _startTime = _args select 1; _timeInCardiacArrest = _args select 2; - _heartRate = _unit getvariable [QGVAR(heartRate), 0]; + _heartRate = _unit getvariable [QGVAR(heartRate), 80]; if (_heartRate > 0 || !alive _unit) exitwith { [(_this select 1)] call cba_fnc_removePerFrameHandler; _unit setvariable [QGVAR(inCardiacArrest), nil,true]; From bf7a7b5bc9df70d570fc23954de9e97b683d9ad5 Mon Sep 17 00:00:00 2001 From: Aleksey Yermakov <epmak777@gmail.com> Date: Fri, 17 Apr 2015 20:18:41 +0300 Subject: [PATCH 083/257] Update stringtable.xml --- addons/ballistics/stringtable.xml | 38 +++++++++++++++---------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/addons/ballistics/stringtable.xml b/addons/ballistics/stringtable.xml index a60cefcf9d..238cdabaf3 100644 --- a/addons/ballistics/stringtable.xml +++ b/addons/ballistics/stringtable.xml @@ -13,7 +13,7 @@ <Czech>6.5mm 30ks Svítící IR-DIM Zásobník</Czech> <Portuguese>Carregador de 30 projéteis traçantes IR-DIM de 6,5mm</Portuguese> <Italian>Caricatore 6.5mm 30Rnd Traccianti IR-DIM</Italian> - <Russian>Магазин из 30-ти 6,5 мм трассирующих под ПНВ</Russian> + <Russian>Магазин из 30-ти 6,5 мм ИК-трассирующих</Russian> </Key> <Key ID="STR_ACE_30Rnd_65x39_caseless_mag_Tracer_DimNameShort"> <English>6.5mm IR-DIM</English> @@ -37,7 +37,7 @@ <Czech>Ráže: 6.5x39 mm Svítící IR-DIM<br />Munice: 30<br />Použití: MX/C/M/SW/3GL</Czech> <Portuguese>Calibre: 6,5x39 mm Traçante IR-DIM<br />Projéteis: 30<br />Usado em: MX/C/M/SW/3GL</Portuguese> <Italian>Calibro: 6.5x39 mm Traccianti IR-DIM <br />Munizioni: 30<br />In uso su: MX/C/M/SW/3GL</Italian> - <Russian>Калибр: 6,5x39 мм трассирующие под ПНВ<br />Патронов: 30<br />Используются с: MX/C/M/SW/3GL</Russian> + <Russian>Калибр: 6,5x39 мм ИК-трассирующие<br />Патронов: 30<br />Используются с: MX/C/M/SW/3GL</Russian> </Key> <Key ID="STR_ACE_30Rnd_65x39_caseless_mag_SDName"> <English>6.5mm 30Rnd SD Mag</English> @@ -122,7 +122,7 @@ <Czech>6.5mm 30ks Svítící IR-DIM Zásobník</Czech> <Portuguese>Carregador de 30 projéteis traçantes IR-DIM de 6,5mm</Portuguese> <Italian>Caricatore 6.5mm 30Rnd Traccianti IR-DIM</Italian> - <Russian>Магазин из 30-ти 6,5 мм трассирующих под ПНВ</Russian> + <Russian>Магазин из 30-ти 6,5 мм ИК-трассирующих</Russian> </Key> <Key ID="STR_ACE_30Rnd_65x39_caseless_green_mag_Tracer_DimNameShort"> <English>6.5mm IR-DIM</English> @@ -146,7 +146,7 @@ <Czech>Ráže: 6.5x39 mm Svítící IR-DIM<br />Munice: 30<br />Použití: Katiba</Czech> <Portuguese>Calibre: 6,5x39 mm Traçante IR-DIM<br />Projéteis: 30<br />Usado em: Katiba</Portuguese> <Italian>Calibro: 6.5x39 mm Tracciant IR-DIM<br />Munizioni: 30<br />In uso su: Katiba</Italian> - <Russian>Калибр: 6,5x39 мм трассирующие под ПНВ<br />Патронов: 30<br />Используются с: Katiba</Russian> + <Russian>Калибр: 6,5x39 мм ИК-трассирующие<br />Патронов: 30<br />Используются с: Katiba</Russian> </Key> <Key ID="STR_ACE_30Rnd_65x39_caseless_green_mag_SDName"> <English>6.5mm 30Rnd SD Mag</English> @@ -168,7 +168,7 @@ <French>6,5mm SD</French> <Polish>6,5mm SD</Polish> <Czech>6.5mm SD</Czech> - <Portuguese>6,5mm SD</Portuguese> + <Portuguese>6,5 мм SD</Portuguese> <Italian>6.5mm Sil.</Italian> <Russian>6,5 мм дозвуковые</Russian> </Key> @@ -231,7 +231,7 @@ <Czech>5.56mm 30ks Svítící IR-DIM Zásobník</Czech> <Portuguese>Carregador de 30 projéteis traçantes IR-DIM de 5,56mm</Portuguese> <Italian>Caricatore 5.56mm 30rnd Traccianti IR-DIM</Italian> - <Russian>Магазин из 30-ти 5,56 мм трассирующих под ПНВ</Russian> + <Russian>Магазин из 30-ти 5,56 мм ИК-трассирующих</Russian> </Key> <Key ID="STR_ACE_30Rnd_556x45_mag_Tracer_DimNameShort"> <English>5.56mm IR-DIM</English> @@ -255,7 +255,7 @@ <Czech>Ráže: 5.56x45 mm Svítící IR-DIM<br />Munice: 30<br />Použití: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Czech> <Portuguese>Calibre: 5,56x45 mm Traçante IR-DIM<br />Projéteis: 30<br />Usado em: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Portuguese> <Italian>Calibro: 5.56x45 mm Traccianti IR-DIM<br />Munizioni: 30<br />In uso su: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Italian> - <Russian>Калибр: 5,56x45 мм трассирующие под ПНВ<br />Патронов: 30<br />Используются с: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Russian> + <Russian>Калибр: 5,56x45 мм ИК-трассирующие<br />Патронов: 30<br />Используются с: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Russian> </Key> <Key ID="STR_ACE_30Rnd_556x45_mag_APName"> <English>5.56mm 30Rnd AP Mag</English> @@ -340,7 +340,7 @@ <Czech>7.62mm 20ks Svítící IR-DIM Zásobník</Czech> <Portuguese>Carregador de 20 projéteis IR-DIM de 7,62mm</Portuguese> <Italian>Caricatore 7.62mm 20rnd Traccianti IR-DIM</Italian> - <Russian>Магазин из 20-ти 7,62 мм трассирующих под ПНВ</Russian> + <Russian>Магазин из 20-ти 7,62 мм ИК-трассирующих</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x51_mag_Tracer_DimNameShort"> <English>7.62mm IR-DIM</English> @@ -364,7 +364,7 @@ <Czech>Ráže: 7.62x51 mm Svítící IR-DIM<br />Munice: 20<br />Použití: Mk18 ABR</Czech> <Portuguese>Calibre: 7,62x51 mm Traçante IR-DIM<br />Projéteis: 20<br />Usado em: Mk18 ABR</Portuguese> <Italian>Calibro: 7.62x51 mm Traccianti IR-DIM<br />Munizioni: 20<br />In uso su: Mk18 ABR</Italian> - <Russian>Калибр: 7,62x51 мм трассирующие под ПНВ<br />Патронов: 20<br />Используются с: Mk18 ABR</Russian> + <Russian>Калибр: 7,62x51 мм ИК-трассирующие<br />Патронов: 20<br />Используются с: Mk18 ABR</Russian> </Key> <Key ID="STR_ACE_20Rnd_762x51_mag_SDName"> <English>7.62mm 20Rnd SD Mag</English> @@ -470,7 +470,7 @@ <Polish>Taśma .338 NM 130rd IR-DIM</Polish> <French>Bande .338 NM 130Cps IR-DIM</French> <Spanish>Cinta de 130 balas IR-DIM de .338 NM</Spanish> - <Russian>Лента из 130-ти .338 NM трасирующих под ПНВ</Russian> + <Russian>Лента из 130-ти .338 NM ИК-трассирующих</Russian> </Key> <Key ID="STR_ACE_130Rnd_338_Mag_Tracer_DimNameShort"> <English>.338 NM IR-DIM</English> @@ -734,7 +734,7 @@ <Polish>Magazynek 6,5mm 100rd Smugacz IR-DIM</Polish> <French>Chargeur 6.5mm 100Rnd Traçante IR-DIM</French> <Spanish>Cargador de 100 balas trazadoras IR-DIM de 6.5mm</Spanish> - <Russian>Магазин из 100-ти 6,5 мм ИК-трассирующих</Russian> + <Russian>Магазин из 100 6,5 мм ИК-трассирующих</Russian> </Key> <Key ID="STR_ACE_100Rnd_65x39_caseless_mag_Tracer_DimNameShort"> <English>6.5mm IR-DIM</English> @@ -748,14 +748,14 @@ <Polish>Magazynek 6,5mm 100rd Smugacz IR-DIM</Polish> <French>Chargeur 6.5mm 100Rnd Traçante IR-DIM</French> <Spanish>Cargador de 100 balas trazadoras IR-DIM de 6.5mm</Spanish> - <Russian>Магазин из 100-ти 6,5 мм ИК-трассирующих</Russian> + <Russian>Магазин из 100 6,5 мм ИК-трассирующих</Russian> </Key> <Key ID="STR_ACE_200Rnd_65x39_cased_Box_Tracer_DimName"> <English>6.5mm 200Rnd Tracer IR-DIM Belt</English> <Polish>Magazynek 6,5mm 200rd Smugacz IR-DIM</Polish> <French>Bande 6.5mm 200Rnd Traçante IR-DIM</French> <Spanish>Cinta de 200 balas trazadoras IR-DIM de 6.5mm</Spanish> - <Russian>Магазин из 200-ти 6,5 мм ИК-трассирующих</Russian> + <Russian>Магазин из 200-т 6,5 мм ИК-трассирующих</Russian> </Key> <Key ID="STR_ACE_200Rnd_65x39_cased_Box_Tracer_DimNameShort"> <English>6.5mm IR-DIM</English> @@ -769,7 +769,7 @@ <Polish>Magazynek 6,5mm 200rd Smugacz IR-DIM</Polish> <French>Bande 6.5mm 200Cps Traçante IR-DIM</French> <Spanish>Cinta de 200 balas trazadoras IR-DIM de 6.5mm</Spanish> - <Russian>Магазин из 200-ти 6,5 мм ИК-трассирующих</Russian> + <Russian>Магазин из 200-т 6,5 мм ИК-трассирующих</Russian> </Key> <Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk262_mag_Name"> <English>5.56mm 30Rnd Mag (Mk262)</English> @@ -790,7 +790,7 @@ <Polish>Kaliber: 5,56x45 mm NATO (Mk262)<br />Pociski: 30</Polish> <French>Calibre: 5.56x45 mm NATO (Mk262)<br />Cartouches: 30</French> <Spanish>Calibre: 5.56x45 mm NATO (Mk262)<br />Balas: 30</Spanish> - <Russian>Калибр: 5,56x45 mm NATO (Mk262)<br />Патронов: 30</Russian> + <Russian>Калибр: 5,56x45 мм NATO (Mk262)<br />Патронов: 30</Russian> </Key> <Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk318_mag_Name"> <English>5.56mm 30Rnd Mag (Mk318)</English> @@ -811,7 +811,7 @@ <Polish>Kaliber: 5,56x45 mm NATO (Mk318)<br />Pociski: 30</Polish> <French>Calibre: 5.56x45 mm NATO (Mk318)<br />Cartouches: 30</French> <Spanish>Calibre: 5.56x45 mm NATO (Mk318)<br />Balas: 30</Spanish> - <Russian>Калибр: 5,56x45 mm NATO (Mk318)<br />Патронов: 30</Russian> + <Russian>Калибр: 5,56x45 мм NATO (Mk318)<br />Патронов: 30</Russian> </Key> <Key ID="STR_ACE_10Rnd_762x51_M118LR_Mag_Name"> <English>7.62mm 10Rnd Mag (M118LR)</English> @@ -1012,7 +1012,7 @@ <English>Caliber: 8.6x70mm (API526)<br />Rounds: 10</English> <French>Calibre: 8.6x70mm (API526)<br />Cartouches: 10</French> <Spanish>Calibre: 8.6x70mm (API526)<br />Balas: 10</Spanish> - <Russian>Калибр: 8,6x70mm (API526)<br />Патронов: 10</Russian> + <Russian>Калибр: 8,6x70 мм (API526)<br />Патронов: 10</Russian> </Key> <Key ID="STR_ACE_5Rnd_127x99_Mag_Name"> <English>12.7x99mm 5Rnd Mag</English> @@ -1030,7 +1030,7 @@ <English>Caliber: 12.7x99mm<br />Rounds: 5</English> <French>Calibre: 12.7x99mm<br />Cartouches: 5</French> <Spanish>Calibre: 12.7x99mm<br />Balas: 5</Spanish> - <Russian>Калибр: 12,7x99mm<br />Патронов: 5</Russian> + <Russian>Калибр: 12,7x99 мм<br />Патронов: 5</Russian> </Key> <Key ID="STR_ACE_5Rnd_127x99_AMAX_Mag_Name"> <English>12.7x99mm 5Rnd Mag (AMAX)</English> @@ -1051,4 +1051,4 @@ <Russian>Калибр: 12,7x99 мм (A-MAX)<br />Патронов: 5</Russian> </Key> </Package> -</Project> \ No newline at end of file +</Project> From 2be38c493c647caa5962fb45b0519402be54dce8 Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Fri, 17 Apr 2015 10:21:41 -0700 Subject: [PATCH 084/257] ACE JIP synchronized event infastructure. --- addons/common/XEH_postInit.sqf | 7 ++- addons/common/XEH_preInit.sqf | 12 +++++ .../fnc__handleRequestSyncedEvent.sqf | 37 +++++++++++++ .../functions/fnc__handleSyncedEvent.sqf | 36 +++++++++++++ .../functions/fnc_addSyncedEventHandler.sqf | 32 ++++++++++++ .../fnc_removeSyncedEventHandler.sqf | 24 +++++++++ .../functions/fnc_requestSyncedEvent.sqf | 17 ++++++ addons/common/functions/fnc_syncedEvent.sqf | 31 +++++++++++ .../common/functions/fnc_syncedEventPFH.sqf | 52 +++++++++++++++++++ 9 files changed, 247 insertions(+), 1 deletion(-) create mode 100644 addons/common/functions/fnc__handleRequestSyncedEvent.sqf create mode 100644 addons/common/functions/fnc__handleSyncedEvent.sqf create mode 100644 addons/common/functions/fnc_addSyncedEventHandler.sqf create mode 100644 addons/common/functions/fnc_removeSyncedEventHandler.sqf create mode 100644 addons/common/functions/fnc_requestSyncedEvent.sqf create mode 100644 addons/common/functions/fnc_syncedEvent.sqf create mode 100644 addons/common/functions/fnc_syncedEventPFH.sqf diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index e470e91c95..96b0f34356 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -87,7 +87,7 @@ enableCamShake true; // Set the name for the current player ["playerChanged", { EXPLODE_2_PVT(_this,_newPlayer,_oldPlayer); - + diag_log text format["PLAYER CHANGED!", _this]; if (alive _newPlayer) then { [_newPlayer] call FUNC(setName) }; @@ -188,3 +188,8 @@ GVAR(OldPlayerWeapon) = currentWeapon ACE_player; // Players can always interact with passengers of the same vehicle {!((_this select 0) isEqualTo (_this select 1)) && {vehicle (_this select 0) == vehicle (_this select 1)}} }] call FUNC(addCanInteractWithCondition); + +// Synced ACE events +["SEH", FUNC(_handleSyncedEvent)] call FUNC(addEventHandler); +["SEH_s", FUNC(_handleRequestSyncedEvent)] call FUNC(addEventHandler); +[FUNC(syncedEventPFH), 0.5, []] call cba_fnc_addPerFrameHandler; diff --git a/addons/common/XEH_preInit.sqf b/addons/common/XEH_preInit.sqf index b5382d0b5e..5bacea7505 100644 --- a/addons/common/XEH_preInit.sqf +++ b/addons/common/XEH_preInit.sqf @@ -269,6 +269,18 @@ PREP(hashListSelect); PREP(hashListSet); PREP(hashListPush); +// Synchronized Events +PREP(syncedEventPFH); +PREP(addSyncedEventHandler); +PREP(removeSyncedEventHandler); +PREP(syncedEvent); +PREP(_handleSyncedEvent); +PREP(_handleRequestSyncedEvent); +PREP(requestSyncedEvent); +GVAR(syncedEvents) = HASH_CREATE; + +// @TODO: Generic local-managed global-synced objects (createVehicleLocal) + //Debug ACE_COUNTERS = []; diff --git a/addons/common/functions/fnc__handleRequestSyncedEvent.sqf b/addons/common/functions/fnc__handleRequestSyncedEvent.sqf new file mode 100644 index 0000000000..643ce40916 --- /dev/null +++ b/addons/common/functions/fnc__handleRequestSyncedEvent.sqf @@ -0,0 +1,37 @@ +/* + * Author: jaynus + * + * + * Argument: + * + * Return value: + * Boolean of success + */ + #define DEBUG_MODE_FULL +#include "script_component.hpp" + +//SEH_s +if(isServer) then { + // Find the event name, and shovel out the events to the client + PARAMS_2(_eventName,_client); + private["_eventEntry", "_eventLog"]; + + if(!HASH_HASKEY(GVAR(syncedEvents),_eventName)) exitWith { + diag_log text format["[ACE] Error, request for synced event - key not found."]; + false + }; + _eventEntry = HASH_GET(GVAR(syncedEvents),_eventName); + _eventLog = _eventEntry select 1; + + ["SEH_s", _client, [_eventName, _eventLog] ] call FUNC(targetEvent); +} else { + PARAMS_2(_eventName,_eventLog); + // This is the client handling the response from the server + // Start running the events + { + _eventArgs = _x select 1; + [_eventName, _eventArgs, (_x select 2)] call FUNC(_handleSyncedEvent); + } forEach _eventLog; +}; + +true \ No newline at end of file diff --git a/addons/common/functions/fnc__handleSyncedEvent.sqf b/addons/common/functions/fnc__handleSyncedEvent.sqf new file mode 100644 index 0000000000..14dfc32bae --- /dev/null +++ b/addons/common/functions/fnc__handleSyncedEvent.sqf @@ -0,0 +1,36 @@ +/* + * Author: jaynus + * + * Call and propegate a synced event + * + * Argument: + * 0: Name (String) + * 1: Arguments (Array) + * 2: TTL (Number or Code) [Optional] + * + * Return value: + * Boolean of success + */ +#define DEBUG_MODE_FULL +#include "script_component.hpp" +PARAMS_3(_name,_args,_ttl); +private["_internalData", "_eventLog", "_eventCode"]; + +if(!HASH_HASKEY(GVAR(syncedEvents),_name)) exitWith { + diag_log text format["[ACE] Error, synced event key not found."]; + false +}; + +_internalData = HASH_GET(GVAR(syncedEvents),_name); + +if(isServer) then { + // Server needs to internally log it for synchronization + if(_ttl > -1) then { + _internalData = HASH_GET(GVAR(syncedEvents),_name); + _eventLog = _internalData select 1; + _eventLog pushback [diag_tickTime, _args, _ttl]; + }; +}; + +_eventCode = _internalData select 0; +_args call _eventCode; \ No newline at end of file diff --git a/addons/common/functions/fnc_addSyncedEventHandler.sqf b/addons/common/functions/fnc_addSyncedEventHandler.sqf new file mode 100644 index 0000000000..ab9d8bb829 --- /dev/null +++ b/addons/common/functions/fnc_addSyncedEventHandler.sqf @@ -0,0 +1,32 @@ +/* + * Author: jaynus + * + * Register an event handler for an ACE synced event + * + * Argument: + * 0: Name (String) + * 1: Handler (Code) + * 2: TTL (Number or Code) [Optional] + * + * Return value: + * Boolean of success + */ +#define DEBUG_MODE_FULL +#include "script_component.hpp" +PARAMS_2(_name,_handler); + +private["_ttl", "_eventId", "_data"]; +if( (count _this) > 2) then { + _ttl = _this select 2; +} else { + _ttl = 0; +}; + +if(HASH_HASKEY(GVAR(syncedEvents),_name)) exitWith { + diag_log text format["[ACE] Error, duplicate synced event creation."]; + false +}; + +_eventId = [_name, FUNC(_handleSyncedEvent)] call FUNC(addEventHandler); +_data = [_handler,[],_ttl,_eventId]; +HASH_SET(GVAR(syncedEvents),_name,_data); \ No newline at end of file diff --git a/addons/common/functions/fnc_removeSyncedEventHandler.sqf b/addons/common/functions/fnc_removeSyncedEventHandler.sqf new file mode 100644 index 0000000000..6429120bbe --- /dev/null +++ b/addons/common/functions/fnc_removeSyncedEventHandler.sqf @@ -0,0 +1,24 @@ +/* + * Author: jaynus + * + * Remove a synced event handler + * + * Argument: + * 0: Name (String) + * + * Return value: + * Boolean of success + */ +#include "script_component.hpp" +PARAMS_1(_name); + +if(!HASH_HASKEY(GVAR(syncedEvents),_name)) exitWith { + diag_log text format["[ACE] Error, synced event key not found."]; + false +}; + +_data = HASH_GET(GVAR(syncedEvents),_name); +_eventId = _data select 3; + +[_eventId] call ace_common_fnc_removeEventHandler; +HASH_REM(GVAR(syncedEvents),_name); \ No newline at end of file diff --git a/addons/common/functions/fnc_requestSyncedEvent.sqf b/addons/common/functions/fnc_requestSyncedEvent.sqf new file mode 100644 index 0000000000..f18c3542b5 --- /dev/null +++ b/addons/common/functions/fnc_requestSyncedEvent.sqf @@ -0,0 +1,17 @@ +/* + * Author: jaynus + * + * + * Argument: + * + * Return value: + * Boolean of success + */ +#define DEBUG_MODE_FULL +#include "script_component.hpp" +PARAMS_1(_eventName); + +// Only JIP machines on initialization send this off, requesting sync on events with the serverCommand +if(isServer) exitWith { false }; + +["SEH_s", [_eventName, ACE_player] ] call ace_common_fnc_serverEvent; \ No newline at end of file diff --git a/addons/common/functions/fnc_syncedEvent.sqf b/addons/common/functions/fnc_syncedEvent.sqf new file mode 100644 index 0000000000..43f4feb5bd --- /dev/null +++ b/addons/common/functions/fnc_syncedEvent.sqf @@ -0,0 +1,31 @@ +/* + * Author: jaynus + * + * Call and propegate a synced event + * + * Argument: + * 0: Name (String) + * 1: Arguments (Array) + * 2: TTL (Number or Code) [Optional] for this specific event call + * + * Return value: + * Boolean of success + */ +#define DEBUG_MODE_FULL +#include "script_component.hpp" +PARAMS_2(_name,_args); +private["_ttl", "_eventData", "_internalData", "_eventLog"]; + +if( (count _this) > 2) then { + _ttl = _this select 2; +} else { + _ttl = 0; +}; + +if(!HASH_HASKEY(GVAR(syncedEvents),_name)) exitWith { + diag_log text format["[ACE] Error, synced event key not found."]; + false +}; + +_eventData = [_name, _args,_ttl]; +["SEH", _eventData] call FUNC(globalEvent); \ No newline at end of file diff --git a/addons/common/functions/fnc_syncedEventPFH.sqf b/addons/common/functions/fnc_syncedEventPFH.sqf new file mode 100644 index 0000000000..e8a21202ab --- /dev/null +++ b/addons/common/functions/fnc_syncedEventPFH.sqf @@ -0,0 +1,52 @@ +//#define DEBUG_MODE_FULL +#include "script_component.hpp" + +if(!isServer) exitWith { false }; + +// Walk through the local synced events and clean up anything thats already EOL +// @TODO: This should be iteration limited to prevent FPS lag +private["_data"]; +{ + private["_data", "_ttl", "_eventLog", "_newEventLog", "_name"]; + _name = _x; + + _data = HASH_GET(GVAR(syncedEvents),_name); + _eventLog = _data select 1; + _globalEventTTL = _data select 2; + _newEventLog = []; + + // @TODO: This should be iteration limited to prevent FPS lag + { + private["_eventEntry", "_ttlReturn"]; + _eventEntry = _x; + + _ttlReturn = true; + if(typeName _globalEventTTL == "CODE") then { + _ttlReturn = [(_data select 0),_eventEntry] call _globalEventTTL; + } else { + _ttlReturn = call { _globalEventTTL < 1 || {diag_tickTime < (_eventEntry select 0) + _globalEventTTL} }; + }; + + if(_ttlReturn) then { + // Do event based TTL check + private["_eventTTL"]; + _eventTTL = _eventEntry select 2; + + if(typeName _eventTTL == "CODE") then { + _ttlReturn = [(_data select 0),_eventEntry] call _eventTTL; + } else { + _ttlReturn = call { _eventTTL < 1 || {diag_tickTime < (_eventEntry select 0) + _eventTTL} }; + }; + }; + + // Finally drop it if the TTL check fails + if(_ttlReturn) then { + _newEventLog pushBack _x; + }; + } forEach _eventLog; + + _data set[1, _newEventLog]; +} forEach (GVAR(syncedEvents) select 0); + + +// @TODO: Next, detect if we had a new request from a JIP player, and we need to continue syncing events From 2f1ee94d91598278d26a975bbb99d176bef0a486 Mon Sep 17 00:00:00 2001 From: Aleksey Yermakov <epmak777@gmail.com> Date: Fri, 17 Apr 2015 20:24:32 +0300 Subject: [PATCH 085/257] Update stringtable.xml --- addons/ballistics/stringtable.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/ballistics/stringtable.xml b/addons/ballistics/stringtable.xml index 238cdabaf3..d79855b916 100644 --- a/addons/ballistics/stringtable.xml +++ b/addons/ballistics/stringtable.xml @@ -685,7 +685,7 @@ <Polish>Magazynek 9x19mm 16rd</Polish> <French>9x19mm 30Cps</French> <Spanish>Cargador de 16 balas de 9x19mm</Spanish> - <Russian>Магазин из 30-ти 9х19 мм</Russian> + <Russian>Магазин из 16-ти 9х19 мм</Russian> </Key> <Key ID="STR_ACE_30Rnd_9x19_mag_Name"> <English>9x19mm 30Rnd Mag</English> From 8a669c390a16a23a0cee27680092501f15add04d Mon Sep 17 00:00:00 2001 From: Aleksey Yermakov <epmak777@gmail.com> Date: Fri, 17 Apr 2015 20:35:34 +0300 Subject: [PATCH 086/257] Update stringtable.xml --- addons/ballistics/stringtable.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/ballistics/stringtable.xml b/addons/ballistics/stringtable.xml index d79855b916..30aa21b748 100644 --- a/addons/ballistics/stringtable.xml +++ b/addons/ballistics/stringtable.xml @@ -994,7 +994,7 @@ <English>Caliber: 8.6x70mm (300gr Sierra MatchKing HPBT)<br />Rounds: 10</English> <French>Calibre: 8.6x70mm (300gr Sierra MatchKing HPBT)<br />Cartouches: 10</French> <Spanish>Calibre: 8.6x70mm (300gr Sierra MatchKing HPBT)<br />Balas: 10</Spanish> - <Russian>Калибр: 8,6x70 мм (300 гран Sierra MatchKing HPBT)<br />Патронов: 10</Russian> + <Russian>Калибр: .338 (300 гран Sierra MatchKing HPBT)<br />Патронов: 10</Russian> </Key> <Key ID="STR_ACE_10Rnd_338_API526_Mag_Name"> <English>.338 10Rnd Mag (API526)</English> @@ -1012,7 +1012,7 @@ <English>Caliber: 8.6x70mm (API526)<br />Rounds: 10</English> <French>Calibre: 8.6x70mm (API526)<br />Cartouches: 10</French> <Spanish>Calibre: 8.6x70mm (API526)<br />Balas: 10</Spanish> - <Russian>Калибр: 8,6x70 мм (API526)<br />Патронов: 10</Russian> + <Russian>Калибр: .338 (API526)<br />Патронов: 10</Russian> </Key> <Key ID="STR_ACE_5Rnd_127x99_Mag_Name"> <English>12.7x99mm 5Rnd Mag</English> From c86be1266800b7683d0dcbb4dbfcf5a598d3111a Mon Sep 17 00:00:00 2001 From: Glowbal <thomasskooi@live.nl> Date: Fri, 17 Apr 2015 20:24:05 +0200 Subject: [PATCH 087/257] fixes #599 --- addons/medical/functions/fnc_determineIfFatal.sqf | 6 +++--- addons/medical/functions/fnc_handleDamage.sqf | 6 ++++++ addons/medical/functions/fnc_setUnconscious.sqf | 7 ++++++- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/addons/medical/functions/fnc_determineIfFatal.sqf b/addons/medical/functions/fnc_determineIfFatal.sqf index 6c90e54da3..aedcf161ee 100644 --- a/addons/medical/functions/fnc_determineIfFatal.sqf +++ b/addons/medical/functions/fnc_determineIfFatal.sqf @@ -21,10 +21,10 @@ if ((vehicle _unit != _unit) && {!alive (vehicle _unit)}) exitwith { true }; // Find the correct Damage threshold for unit. _damageThreshold = [1,1,1]; -if (isPlayer _unit) then { - //_damageThreshold =_unit getvariable[QGVAR(unitDamageThreshold), [GVAR(damageThreshold_Players), GVAR(damageThreshold_Players), GVAR(damageThreshold_Players) * 1.7]]; +if ([_unit] call EFUNC(common,IsPlayer)) then { + _damageThreshold =_unit getvariable[QGVAR(unitDamageThreshold), [GVAR(playerDamageThreshold), GVAR(playerDamageThreshold), GVAR(playerDamageThreshold) * 1.7]]; } else { - //_damageThreshold =_unit getvariable[QGVAR(unitDamageThreshold), [GVAR(damageThreshold_AI), GVAR(damageThreshold_AI), GVAR(damageThreshold_AI) * 1.7]]; + _damageThreshold =_unit getvariable[QGVAR(unitDamageThreshold), [GVAR(AIDamageThreshold), GVAR(AIDamageThreshold), GVAR(AIDamageThreshold) * 1.7]]; }; _damageBodyPart = ((_unit getvariable [QGVAR(bodyPartStatus),[0, 0, 0, 0, 0, 0]]) select _part) + _withDamage; diff --git a/addons/medical/functions/fnc_handleDamage.sqf b/addons/medical/functions/fnc_handleDamage.sqf index 1632a8f55b..c80f0c63e8 100644 --- a/addons/medical/functions/fnc_handleDamage.sqf +++ b/addons/medical/functions/fnc_handleDamage.sqf @@ -36,6 +36,12 @@ if !(_selection in (GVAR(SELECTIONS) + [""])) exitWith {0}; _damageReturn = _damage; if (GVAR(level) < 2) then { + if ([_unit] call EFUNC(isPlayer)) then { + _this set [2, _damage / (GVAR(playerDamageThreshold) max 0.01)]; + } else { + _this set [2, _damage / (GVAR(AIDamageThreshold) max 0.01)]; + }; + _damageReturn = _this call FUNC(handleDamage_basic); }; diff --git a/addons/medical/functions/fnc_setUnconscious.sqf b/addons/medical/functions/fnc_setUnconscious.sqf index 89ab5ee3b3..7fcfa0d24b 100644 --- a/addons/medical/functions/fnc_setUnconscious.sqf +++ b/addons/medical/functions/fnc_setUnconscious.sqf @@ -23,7 +23,7 @@ _set = if (count _this > 1) then {_this select 1} else {true}; _minWaitingTime = if (count _this > 2) then {_this select 2} else {DEFAULT_DELAY}; if !(_set) exitwith { - _unit setvariable ["ACE_isUnconscious", false,true]; + _unit setvariable ["ACE_isUnconscious", false, true]; }; if !(!(isNull _unit) && {(_unit isKindOf "CaManBase") && ([_unit] call EFUNC(common,isAwake))}) exitwith{}; @@ -40,6 +40,11 @@ if (_unit == ACE_player) then { closeDialog 0; }; +// if we have unconsciousness for AI disabled, we will kill the unit instead +if (!([_unit] call EFUNC(common,IsPlayer)) && (GVAR(enableUnsconsiousnessAI) == 0 || (GVAR(enableUnsconsiousnessAI) == 2 && random(1) <= 0.5))) exitwith { + [_unit, true] call FUNC(setDead); // force, to avoid getting into a loop in case revive is enabled. +}; + // If a unit has the launcher out, it will sometimes start selecting the primairy weapon while unconscious, // therefor we force it to select the primairy weapon before going unconscious if ((vehicle _unit) isKindOf "StaticWeapon") then { From 8b7e46c45f9421d2d87fefa19becf65e2c73aec0 Mon Sep 17 00:00:00 2001 From: Glowbal <thomasskooi@live.nl> Date: Fri, 17 Apr 2015 20:26:28 +0200 Subject: [PATCH 088/257] fixes #656 --- addons/medical/functions/fnc_setUnconscious.sqf | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/addons/medical/functions/fnc_setUnconscious.sqf b/addons/medical/functions/fnc_setUnconscious.sqf index 7fcfa0d24b..c6a0e80c9b 100644 --- a/addons/medical/functions/fnc_setUnconscious.sqf +++ b/addons/medical/functions/fnc_setUnconscious.sqf @@ -91,6 +91,12 @@ _startingTime = time; _hasMovedOut = _args select 5; if (!alive _unit) exitwith { + [_unit, QGVAR(unconscious), false] call EFUNC(common,setCaptivityStatus); + [_unit, false] call EFUNC(common,disableAI); + _unit setUnitPos _originalPos; + _unit setUnconscious false; + ["medical_onUnconscious", [_unit, false]] call EFUNC(common,globalEvent); + [(_this select 1)] call cba_fnc_removePerFrameHandler; }; From 0e90199e23a75feb5a4390a1b93bbafee913160e Mon Sep 17 00:00:00 2001 From: commy2 <commy-2@gmx.de> Date: Fri, 17 Apr 2015 20:29:01 +0200 Subject: [PATCH 089/257] remove debug message --- addons/disposable/CfgEventHandlers.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/disposable/CfgEventHandlers.hpp b/addons/disposable/CfgEventHandlers.hpp index 4b5614f553..e4e4abffd8 100644 --- a/addons/disposable/CfgEventHandlers.hpp +++ b/addons/disposable/CfgEventHandlers.hpp @@ -22,7 +22,7 @@ class Extended_FiredBIS_EventHandlers { class Extended_InitPost_EventHandlers { class CAManBase { class ADDON { - init = QUOTE([ARR_2(_this select 0, secondaryWeapon (_this select 0))] call FUNC(takeLoadedATWeapon); systemChat str [ARR_2(_this select 0, secondaryWeapon (_this select 0))]); + init = QUOTE([ARR_2(_this select 0, secondaryWeapon (_this select 0))] call FUNC(takeLoadedATWeapon)); }; }; }; From 0234eedd54ac6d87203c1db89b85bbf3e4d8211f Mon Sep 17 00:00:00 2001 From: Glowbal <thomasskooi@live.nl> Date: Fri, 17 Apr 2015 20:33:13 +0200 Subject: [PATCH 090/257] Changed, only drop unit is player goes unconscious, otherwise keep carrying/dragging unit --- .../dragging/functions/fnc_handleUnconscious.sqf | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/addons/dragging/functions/fnc_handleUnconscious.sqf b/addons/dragging/functions/fnc_handleUnconscious.sqf index 41562756a2..31c703f37b 100644 --- a/addons/dragging/functions/fnc_handleUnconscious.sqf +++ b/addons/dragging/functions/fnc_handleUnconscious.sqf @@ -9,8 +9,6 @@ _isUnconscious = _this select 1; private "_player"; _player = ACE_player; -if ((_unit getHitPointDamage "HitLeftLeg") + (_unit getHitPointDamage "HitRightLeg") > 0.4) exitwith {}; - if (_player getVariable [QGVAR(isDragging), false]) then { private "_draggedObject"; @@ -22,9 +20,9 @@ if (_player getVariable [QGVAR(isDragging), false]) then { }; // handle waking up dragged unit - if (_unit == _draggedObject) then { - [_player, _draggedObject] call FUNC(dropObject); - }; + //if (_unit == _draggedObject) then { + // [_player, _draggedObject] call FUNC(dropObject); + //}; }; @@ -39,8 +37,8 @@ if (_player getVariable [QGVAR(isCarrying), false]) then { }; // handle waking up dragged unit - if (_unit == _carriedObject) then { - [_player, _carriedObject] call FUNC(dropObject_carry); - }; + //if (_unit == _carriedObject) then { + // [_player, _carriedObject] call FUNC(dropObject_carry); + //}; }; From 847ee7e2294312c1c48da0b0585388062241e642 Mon Sep 17 00:00:00 2001 From: Glowbal <thomasskooi@live.nl> Date: Fri, 17 Apr 2015 20:38:02 +0200 Subject: [PATCH 091/257] Moved unconscious event, so it won't conflict in case the unit is still being carried --- addons/medical/functions/fnc_setUnconscious.sqf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/addons/medical/functions/fnc_setUnconscious.sqf b/addons/medical/functions/fnc_setUnconscious.sqf index c6a0e80c9b..63be3fe5a0 100644 --- a/addons/medical/functions/fnc_setUnconscious.sqf +++ b/addons/medical/functions/fnc_setUnconscious.sqf @@ -118,6 +118,7 @@ _startingTime = time; // TODO: what if the unit switched vehicle? [_unit, _oldAnimation, 2] call EFUNC(common,doAnimation); }; + ["medical_onUnconscious", [_unit, false]] call EFUNC(common,globalEvent); // EXIT PFH [(_this select 1)] call cba_fnc_removePerFrameHandler; }; @@ -133,7 +134,7 @@ _startingTime = time; _unit setUnitPos _originalPos; // This is not position but stance (DOWN, MIDDLE, UP) _unit setUnconscious false; - ["medical_onUnconscious", [_unit, false]] call EFUNC(common,globalEvent); + // ensure this statement runs only once _args set [5, true]; }; From b333e6e662c7e1e8389a1fe3fa169c5dc449d23b Mon Sep 17 00:00:00 2001 From: Glowbal <thomasskooi@live.nl> Date: Fri, 17 Apr 2015 20:40:24 +0200 Subject: [PATCH 092/257] Keep units longer unconscious, instead of quickly fading in/out --- addons/medical/functions/fnc_handleUnitVitals.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/medical/functions/fnc_handleUnitVitals.sqf b/addons/medical/functions/fnc_handleUnitVitals.sqf index 2b175d7ca2..411f64b49e 100644 --- a/addons/medical/functions/fnc_handleUnitVitals.sqf +++ b/addons/medical/functions/fnc_handleUnitVitals.sqf @@ -94,7 +94,7 @@ if (GVAR(level) >= 2) then { if ([_unit] call EFUNC(common,isAwake)) then { if (_bloodVolume < 60) then { if (random(1) > 0.9) then { - [_unit] call FUNC(setUnconscious); + [_unit, true, 15 + random(20)] call FUNC(setUnconscious); }; }; }; @@ -136,7 +136,7 @@ if (GVAR(level) >= 2) then { if (!(_unit getvariable [QGVAR(inCardiacArrest),false])) then { if (_heartRate < 10 || _bloodPressureH < 30 || _bloodVolume < 20) then { - [_unit] call FUNC(setUnconscious); // safety check to ensure unconsciousness for units if they are not dead already. + [_unit, true, 10+ random(20)] call FUNC(setUnconscious); // safety check to ensure unconsciousness for units if they are not dead already. }; if (_bloodPressureH > 260) then { From 80139521bcc030eb21e8eda97edebe0d80d93249 Mon Sep 17 00:00:00 2001 From: Glowbal <thomasskooi@live.nl> Date: Fri, 17 Apr 2015 20:49:24 +0200 Subject: [PATCH 093/257] fixes #691 --- addons/medical/functions/fnc_handleDamage.sqf | 2 +- addons/medical/functions/fnc_setUnconscious.sqf | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/addons/medical/functions/fnc_handleDamage.sqf b/addons/medical/functions/fnc_handleDamage.sqf index c80f0c63e8..876feae637 100644 --- a/addons/medical/functions/fnc_handleDamage.sqf +++ b/addons/medical/functions/fnc_handleDamage.sqf @@ -36,7 +36,7 @@ if !(_selection in (GVAR(SELECTIONS) + [""])) exitWith {0}; _damageReturn = _damage; if (GVAR(level) < 2) then { - if ([_unit] call EFUNC(isPlayer)) then { + if ([_unit] call EFUNC(common,isPlayer)) then { _this set [2, _damage / (GVAR(playerDamageThreshold) max 0.01)]; } else { _this set [2, _damage / (GVAR(AIDamageThreshold) max 0.01)]; diff --git a/addons/medical/functions/fnc_setUnconscious.sqf b/addons/medical/functions/fnc_setUnconscious.sqf index 63be3fe5a0..99651fc085 100644 --- a/addons/medical/functions/fnc_setUnconscious.sqf +++ b/addons/medical/functions/fnc_setUnconscious.sqf @@ -81,7 +81,7 @@ _unit setUnitPos "DOWN"; _startingTime = time; [{ - private ["_unit", "_vehicleOfUnit","_minWaitingTime", "_oldAnimation", "_captiveSwitch", "_hasMovedOut"]; + private ["_unit", "_vehicleOfUnit","_minWaitingTime", "_oldAnimation", "_captiveSwitch", "_hasMovedOut", "_parachuteCheck"]; _args = _this select 0; _unit = _args select 0; _oldAnimation = _args select 1; @@ -89,6 +89,7 @@ _startingTime = time; _startingTime = _args select 3; _minWaitingTime = _args select 4; _hasMovedOut = _args select 5; + _parachuteCheck = _args select 6; if (!alive _unit) exitwith { [_unit, QGVAR(unconscious), false] call EFUNC(common,setCaptivityStatus); @@ -140,6 +141,13 @@ _startingTime = time; }; }; + if (_parachuteCheck) then { + if !(vehicle _unit isKindOf "ParachuteBase") then { + [_unit, [_unit] call EFUNC(common,getDeathAnim), 1, true] call EFUNC(common,doAnimation); + _args set [6, false]; + }; + }; + // Ensure we are waiting at least a minimum period before checking if we can wake up the unit again, allows for temp knock outs if ((time - _startingTime) >= _minWaitingTime) exitwith { @@ -147,6 +155,6 @@ _startingTime = time; _unit setvariable ["ACE_isUnconscious", false, true]; }; }; -}, 0.1, [_unit,_animState, _originalPos, _startingTime, _minWaitingTime, false] ] call CBA_fnc_addPerFrameHandler; +}, 0.1, [_unit,_animState, _originalPos, _startingTime, _minWaitingTime, false, vehicle _unit isKindOf "ParachuteBase"] ] call CBA_fnc_addPerFrameHandler; ["medical_onUnconscious", [_unit, true]] call EFUNC(common,globalEvent); From 9b4435827ecfe5c29ac27ed1432880f784aaddfe Mon Sep 17 00:00:00 2001 From: Glowbal <thomasskooi@live.nl> Date: Fri, 17 Apr 2015 20:51:57 +0200 Subject: [PATCH 094/257] Added setting for unconscious animations on treatment --- addons/medical/ACE_Settings.hpp | 4 ++++ addons/medical/functions/fnc_treatment.sqf | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/addons/medical/ACE_Settings.hpp b/addons/medical/ACE_Settings.hpp index 56e5a531ec..0007352dda 100644 --- a/addons/medical/ACE_Settings.hpp +++ b/addons/medical/ACE_Settings.hpp @@ -124,4 +124,8 @@ class ACE_Settings { values[] = {"$STR_ACE_Medical_painEffect_Flash", "$STR_ACE_Medical_painEffect_Chroma"}; isClientSettable = 1; }; + class GVAR(allowUnconsciousAnimationOnTreatment) { + typeName = "BOOL"; + value = 0; + }; }; diff --git a/addons/medical/functions/fnc_treatment.sqf b/addons/medical/functions/fnc_treatment.sqf index e010279be1..bb291d6c98 100644 --- a/addons/medical/functions/fnc_treatment.sqf +++ b/addons/medical/functions/fnc_treatment.sqf @@ -129,7 +129,7 @@ if (isNil _callbackProgress) then { // Patient Animation _patientAnim = getText (_config >> "animationPatient"); -if (_target getvariable ["ACE_isUnconscious", false]) then { +if (_target getvariable ["ACE_isUnconscious", false] && GVAR(allowUnconsciousAnimationOnTreatment)) then { if !(animationState _target in (getArray (_config >> "animationPatientUnconsciousExcludeOn"))) then { _patientAnim = getText (_config >> "animationPatientUnconscious"); }; From 8bfb76c9651cc4e34fea01cdaaaa8a9996691540 Mon Sep 17 00:00:00 2001 From: ViperMaul <vipermaul@gmail.com> Date: Fri, 17 Apr 2015 12:05:49 -0700 Subject: [PATCH 095/257] #552 - Default: don't check external files --- tools/make.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/tools/make.py b/tools/make.py index 29cf3f1956..4af9341b6b 100644 --- a/tools/make.py +++ b/tools/make.py @@ -321,6 +321,7 @@ make.py [help] [test] [force] [key <name>] [target <name>] [release <version>] test -- Copy result to Arma 3. release <version> -- Make archive with <version>. force -- Ignore cache and build all. +checkexternal -- Check External Files target <name> -- Use rules in make.cfg under heading [<name>] rather than default [Make] key <name> -- Use key in working directory with <name> to sign. If it does not @@ -378,6 +379,12 @@ See the make.cfg file for additional build options. quiet = True argv.remove("quiet") + if "checkexternal" in argv: + argv.remove("checkexternal") + check_external = True + else: + check_external = False + # Get the directory the make script is in. make_root = os.path.dirname(os.path.realpath(__file__)) make_root_parent = os.path.abspath(os.path.join(os.getcwd(), os.pardir)) @@ -658,8 +665,12 @@ See the make.cfg file for additional build options. cmd = [makepboTool, "-P","-A","-L","-N","-G", os.path.join(work_drive, prefix, module),os.path.join(module_root, release_dir, project,"Addons")] else: - cmd = [pboproject, "-P", os.path.join(work_drive, prefix, module), "+Engine=Arma3", "-S","+Noisy", "+X", "+Clean", "+Mod="+os.path.join(module_root, release_dir, project), "-Key"] + if check_external: + cmd = [pboproject, "-P", os.path.join(work_drive, prefix, module), "+Engine=Arma3", "-S","+Noisy", "+X", "+Clean", "+Mod="+os.path.join(module_root, release_dir, project), "-Key"] + else: + cmd = [pboproject, "-P", os.path.join(work_drive, prefix, module), "+Engine=Arma3", "-S","+Noisy", "-X", "+Clean", "+Mod="+os.path.join(module_root, release_dir, project), "-Key"] + print_yellow(cmd) color("grey") if quiet: devnull = open(os.devnull, 'w') From 31bc09a9a32d0135144cd029cb83a04d8ae75fba Mon Sep 17 00:00:00 2001 From: Glowbal <thomasskooi@live.nl> Date: Fri, 17 Apr 2015 21:06:30 +0200 Subject: [PATCH 096/257] fixed AI standing up before being killed Doesn't matter if we enable AI again on dead units --- addons/common/functions/fnc_disableAI.sqf | 2 +- addons/medical/functions/fnc_setUnconscious.sqf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/common/functions/fnc_disableAI.sqf b/addons/common/functions/fnc_disableAI.sqf index 92ad35c0f9..0e1985eced 100644 --- a/addons/common/functions/fnc_disableAI.sqf +++ b/addons/common/functions/fnc_disableAI.sqf @@ -27,7 +27,7 @@ if ((local _unit) && {!([_unit] call EFUNC(common,isPlayer))}) then { _unit disableConversation true; } else { //Sanity check to make sure we don't enable unconsious AI - if (_unit getVariable ["ace_isunconscious", false]) exitWith {ERROR("Enabling AI for unconsious unit");}; + if (_unit getVariable ["ace_isunconscious", false] && alive _unit) exitWith {ERROR("Enabling AI for unconsious unit");}; _unit enableAI "MOVE"; _unit enableAI "TARGET"; _unit enableAI "AUTOTARGET"; diff --git a/addons/medical/functions/fnc_setUnconscious.sqf b/addons/medical/functions/fnc_setUnconscious.sqf index 99651fc085..3ef4df4d3f 100644 --- a/addons/medical/functions/fnc_setUnconscious.sqf +++ b/addons/medical/functions/fnc_setUnconscious.sqf @@ -94,7 +94,7 @@ _startingTime = time; if (!alive _unit) exitwith { [_unit, QGVAR(unconscious), false] call EFUNC(common,setCaptivityStatus); [_unit, false] call EFUNC(common,disableAI); - _unit setUnitPos _originalPos; + //_unit setUnitPos _originalPos; _unit setUnconscious false; ["medical_onUnconscious", [_unit, false]] call EFUNC(common,globalEvent); From eb731b116939cf81289dcff585ad87ea77119e62 Mon Sep 17 00:00:00 2001 From: Glowbal <thomasskooi@live.nl> Date: Fri, 17 Apr 2015 21:07:09 +0200 Subject: [PATCH 097/257] fixes #653 --- addons/medical/functions/fnc_treatment.sqf | 2 ++ addons/medical/functions/fnc_treatment_failure.sqf | 9 ++++++++- addons/medical/functions/fnc_treatment_success.sqf | 9 ++++++++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/addons/medical/functions/fnc_treatment.sqf b/addons/medical/functions/fnc_treatment.sqf index bb291d6c98..df6cc173d0 100644 --- a/addons/medical/functions/fnc_treatment.sqf +++ b/addons/medical/functions/fnc_treatment.sqf @@ -149,6 +149,8 @@ if (_caller == _target) then { _callerAnim = [getText (_config >> "animationCallerSelf"), getText (_config >> "animationCallerSelfProne")] select (stance _caller == "PRONE"); }; +_caller setvariable [QGVAR(selectedWeaponOnTreatment), currentWeapon _caller]; + // Cannot use secondairy weapon for animation if (currentWeapon _caller == secondaryWeapon _caller) then { _caller selectWeapon (primaryWeapon _caller); diff --git a/addons/medical/functions/fnc_treatment_failure.sqf b/addons/medical/functions/fnc_treatment_failure.sqf index d4f853374c..fe8bafb0c7 100644 --- a/addons/medical/functions/fnc_treatment_failure.sqf +++ b/addons/medical/functions/fnc_treatment_failure.sqf @@ -17,7 +17,7 @@ #include "script_component.hpp" -private ["_caller", "_target","_selectionName","_className","_config","_callback", "_usersOfItems"]; +private ["_caller", "_target","_selectionName","_className","_config","_callback", "_usersOfItems", "_weaponSelect"]; _args = _this select 0; _caller = _args select 0; @@ -34,6 +34,13 @@ if (vehicle _caller == _caller) then { }; _caller setvariable [QGVAR(treatmentPrevAnimCaller), nil]; +_weaponSelect = (_caller getvariable [QGVAR(selectedWeaponOnTreatment), ""]); +if (_weaponSelect != "") then { + _caller selectWeapon _weaponSelect; +} else { + _caller action ["SwitchWeapon", _caller, _caller, 99]; +}; + { (_x select 0) addItem (_x select 1); }foreach _usersOfItems; diff --git a/addons/medical/functions/fnc_treatment_success.sqf b/addons/medical/functions/fnc_treatment_success.sqf index 5910a4be86..6822f674c7 100644 --- a/addons/medical/functions/fnc_treatment_success.sqf +++ b/addons/medical/functions/fnc_treatment_success.sqf @@ -17,7 +17,7 @@ #include "script_component.hpp" -private ["_caller", "_target","_selectionName","_className","_config","_callback"]; +private ["_caller", "_target","_selectionName","_className","_config","_callback", "_weaponSelect"]; _args = _this select 0; _caller = _args select 0; _target = _args select 1; @@ -32,6 +32,13 @@ if (vehicle _caller == _caller) then { }; _caller setvariable [QGVAR(treatmentPrevAnimCaller), nil]; +_weaponSelect = (_caller getvariable [QGVAR(selectedWeaponOnTreatment), ""]); +if (_weaponSelect != "") then { + _caller selectWeapon _weaponSelect; +} else { + _caller action ["SwitchWeapon", _caller, _caller, 99]; +}; + // Record specific callback _config = (configFile >> "ACE_Medical_Actions" >> "Basic" >> _className); if (GVAR(level) >= 2) then { From e816907c503c88cedce17a26946cafb4901a458b Mon Sep 17 00:00:00 2001 From: ViperMaul <vipermaul@gmail.com> Date: Fri, 17 Apr 2015 12:21:32 -0700 Subject: [PATCH 098/257] #552 - Tab clean up --- tools/make.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/make.py b/tools/make.py index 4af9341b6b..166d21c49d 100644 --- a/tools/make.py +++ b/tools/make.py @@ -665,10 +665,10 @@ See the make.cfg file for additional build options. cmd = [makepboTool, "-P","-A","-L","-N","-G", os.path.join(work_drive, prefix, module),os.path.join(module_root, release_dir, project,"Addons")] else: - if check_external: - cmd = [pboproject, "-P", os.path.join(work_drive, prefix, module), "+Engine=Arma3", "-S","+Noisy", "+X", "+Clean", "+Mod="+os.path.join(module_root, release_dir, project), "-Key"] - else: - cmd = [pboproject, "-P", os.path.join(work_drive, prefix, module), "+Engine=Arma3", "-S","+Noisy", "-X", "+Clean", "+Mod="+os.path.join(module_root, release_dir, project), "-Key"] + if check_external: + cmd = [pboproject, "-P", os.path.join(work_drive, prefix, module), "+Engine=Arma3", "-S","+Noisy", "+X", "+Clean", "+Mod="+os.path.join(module_root, release_dir, project), "-Key"] + else: + cmd = [pboproject, "-P", os.path.join(work_drive, prefix, module), "+Engine=Arma3", "-S","+Noisy", "-X", "+Clean", "+Mod="+os.path.join(module_root, release_dir, project), "-Key"] print_yellow(cmd) color("grey") From 008c36ac763de4036389469d9edf405b81099d4c Mon Sep 17 00:00:00 2001 From: Glowbal <thomasskooi@live.nl> Date: Fri, 17 Apr 2015 21:27:57 +0200 Subject: [PATCH 099/257] fixes #699 --- addons/medical/XEH_preInit.sqf | 1 + addons/medical/functions/fnc_handleLocal.sqf | 10 ++ .../medical/functions/fnc_setUnconscious.sqf | 77 +-------------- .../medical/functions/fnc_unconsciousPFH.sqf | 93 +++++++++++++++++++ 4 files changed, 105 insertions(+), 76 deletions(-) create mode 100644 addons/medical/functions/fnc_unconsciousPFH.sqf diff --git a/addons/medical/XEH_preInit.sqf b/addons/medical/XEH_preInit.sqf index f15b4ec109..a54b6d0d8f 100644 --- a/addons/medical/XEH_preInit.sqf +++ b/addons/medical/XEH_preInit.sqf @@ -97,6 +97,7 @@ PREP(moduleAssignMedicalFacility); PREP(moduleTreatmentConfiguration); PREP(copyDeadBody); PREP(requestWoundSync); +PREP(unconsciousPFH); GVAR(injuredUnitCollection) = []; GVAR(IVBags) = []; diff --git a/addons/medical/functions/fnc_handleLocal.sqf b/addons/medical/functions/fnc_handleLocal.sqf index 5d9c5865a4..5a6123d9f7 100644 --- a/addons/medical/functions/fnc_handleLocal.sqf +++ b/addons/medical/functions/fnc_handleLocal.sqf @@ -22,4 +22,14 @@ if (_local) then { if (_unit getvariable[QGVAR(addedToUnitLoop),false]) then { [_unit, true] call FUNC(addToInjuredCollection); }; + + if (count (_unit getvariable [QGVAR(unconsciousArguments), []]) >= 7) then { + private "_arguments"; + _arguments = (_unit getvariable [QGVAR(unconsciousArguments), []]); + _arguments set [ 3, time]; + + [DFUNC(unconsciousPFH), 0.1, _arguments ] call CBA_fnc_addPerFrameHandler; + + _unit setvariable [QGVAR(unconsciousArguments), nil, true]; + }; }; diff --git a/addons/medical/functions/fnc_setUnconscious.sqf b/addons/medical/functions/fnc_setUnconscious.sqf index 3ef4df4d3f..ef9ccb246d 100644 --- a/addons/medical/functions/fnc_setUnconscious.sqf +++ b/addons/medical/functions/fnc_setUnconscious.sqf @@ -80,81 +80,6 @@ _unit setUnitPos "DOWN"; _startingTime = time; -[{ - private ["_unit", "_vehicleOfUnit","_minWaitingTime", "_oldAnimation", "_captiveSwitch", "_hasMovedOut", "_parachuteCheck"]; - _args = _this select 0; - _unit = _args select 0; - _oldAnimation = _args select 1; - _originalPos = _args select 2; - _startingTime = _args select 3; - _minWaitingTime = _args select 4; - _hasMovedOut = _args select 5; - _parachuteCheck = _args select 6; - - if (!alive _unit) exitwith { - [_unit, QGVAR(unconscious), false] call EFUNC(common,setCaptivityStatus); - [_unit, false] call EFUNC(common,disableAI); - //_unit setUnitPos _originalPos; - _unit setUnconscious false; - ["medical_onUnconscious", [_unit, false]] call EFUNC(common,globalEvent); - - [(_this select 1)] call cba_fnc_removePerFrameHandler; - }; - - // In case the unit is no longer in an unconscious state, we are going to check if we can already reset the animation - if !(_unit getvariable ["ACE_isUnconscious",false]) exitwith { - - // TODO, handle this with carry instead, so we can remove the PFH here. - // Wait until the unit isn't being carried anymore, so we won't end up with wierd animations - if !(([_unit] call FUNC(isBeingCarried)) || ([_unit] call FUNC(isBeingDragged))) then { - if (vehicle _unit == _unit) then { - if (animationState _unit == "AinjPpneMstpSnonWrflDnon") then { - [_unit,"AinjPpneMstpSnonWrflDnon_rolltofront", 2] call EFUNC(common,doAnimation); - [_unit,"amovppnemstpsnonwnondnon", 1] call EFUNC(common,doAnimation); - } else { - [_unit,"amovppnemstpsnonwnondnon", 2] call EFUNC(common,doAnimation); - }; - } else { - // Switch to the units original animation, assuming - // TODO: what if the unit switched vehicle? - [_unit, _oldAnimation, 2] call EFUNC(common,doAnimation); - }; - ["medical_onUnconscious", [_unit, false]] call EFUNC(common,globalEvent); - // EXIT PFH - [(_this select 1)] call cba_fnc_removePerFrameHandler; - }; - if (!_hasMovedOut) then { - // Reset the unit back to the previous captive state. - [_unit, QGVAR(unconscious), false] call EFUNC(common,setCaptivityStatus); - - // Swhich the unit back to its original group - //Unconscious units shouldn't be put in another group #527: - // [_unit, false, "ACE_isUnconscious", side group _unit] call EFUNC(common,switchToGroupSide); - - [_unit, false] call EFUNC(common,disableAI); - _unit setUnitPos _originalPos; // This is not position but stance (DOWN, MIDDLE, UP) - - _unit setUnconscious false; - - // ensure this statement runs only once - _args set [5, true]; - }; - }; - - if (_parachuteCheck) then { - if !(vehicle _unit isKindOf "ParachuteBase") then { - [_unit, [_unit] call EFUNC(common,getDeathAnim), 1, true] call EFUNC(common,doAnimation); - _args set [6, false]; - }; - }; - - // Ensure we are waiting at least a minimum period before checking if we can wake up the unit again, allows for temp knock outs - if ((time - _startingTime) >= _minWaitingTime) exitwith { - - if (!([_unit] call FUNC(getUnconsciousCondition))) then { - _unit setvariable ["ACE_isUnconscious", false, true]; - }; - }; -}, 0.1, [_unit,_animState, _originalPos, _startingTime, _minWaitingTime, false, vehicle _unit isKindOf "ParachuteBase"] ] call CBA_fnc_addPerFrameHandler; +[DFUNC(unconsciousPFH), 0.1, [_unit,_animState, _originalPos, _startingTime, _minWaitingTime, false, vehicle _unit isKindOf "ParachuteBase"] ] call CBA_fnc_addPerFrameHandler; ["medical_onUnconscious", [_unit, true]] call EFUNC(common,globalEvent); diff --git a/addons/medical/functions/fnc_unconsciousPFH.sqf b/addons/medical/functions/fnc_unconsciousPFH.sqf new file mode 100644 index 0000000000..406d0278c1 --- /dev/null +++ b/addons/medical/functions/fnc_unconsciousPFH.sqf @@ -0,0 +1,93 @@ +/* + * Author: Glowbal + * PFH logic for unconscious state + * + * Arguments: + * 0: The unit that will be put in an unconscious state <OBJECT> + * + * ReturnValue: + * nil + * + * Public: yes + */ + +#include "script_component.hpp" + +private ["_unit", "_vehicleOfUnit","_minWaitingTime", "_oldAnimation", "_captiveSwitch", "_hasMovedOut", "_parachuteCheck"]; +_args = _this select 0; +_unit = _args select 0; +_oldAnimation = _args select 1; +_originalPos = _args select 2; +_startingTime = _args select 3; +_minWaitingTime = _args select 4; +_hasMovedOut = _args select 5; +_parachuteCheck = _args select 6; + +if (!alive _unit) exitwith { + [_unit, QGVAR(unconscious), false] call EFUNC(common,setCaptivityStatus); + [_unit, false] call EFUNC(common,disableAI); + //_unit setUnitPos _originalPos; + _unit setUnconscious false; + ["medical_onUnconscious", [_unit, false]] call EFUNC(common,globalEvent); + + [(_this select 1)] call cba_fnc_removePerFrameHandler; +}; + +// In case the unit is no longer in an unconscious state, we are going to check if we can already reset the animation +if !(_unit getvariable ["ACE_isUnconscious",false]) exitwith { + // TODO, handle this with carry instead, so we can remove the PFH here. + // Wait until the unit isn't being carried anymore, so we won't end up with wierd animations + if !(([_unit] call FUNC(isBeingCarried)) || ([_unit] call FUNC(isBeingDragged))) then { + if (vehicle _unit == _unit) then { + if (animationState _unit == "AinjPpneMstpSnonWrflDnon") then { + [_unit,"AinjPpneMstpSnonWrflDnon_rolltofront", 2] call EFUNC(common,doAnimation); + [_unit,"amovppnemstpsnonwnondnon", 1] call EFUNC(common,doAnimation); + } else { + [_unit,"amovppnemstpsnonwnondnon", 2] call EFUNC(common,doAnimation); + }; + } else { + // Switch to the units original animation, assuming + // TODO: what if the unit switched vehicle? + [_unit, _oldAnimation, 2] call EFUNC(common,doAnimation); + }; + ["medical_onUnconscious", [_unit, false]] call EFUNC(common,globalEvent); + // EXIT PFH + [(_this select 1)] call cba_fnc_removePerFrameHandler; + }; + if (!_hasMovedOut) then { + // Reset the unit back to the previous captive state. + [_unit, QGVAR(unconscious), false] call EFUNC(common,setCaptivityStatus); + + // Swhich the unit back to its original group + //Unconscious units shouldn't be put in another group #527: + // [_unit, false, "ACE_isUnconscious", side group _unit] call EFUNC(common,switchToGroupSide); + + [_unit, false] call EFUNC(common,disableAI); + _unit setUnitPos _originalPos; // This is not position but stance (DOWN, MIDDLE, UP) + + _unit setUnconscious false; + + // ensure this statement runs only once + _args set [5, true]; + }; +}; + +if (_parachuteCheck) then { + if !(vehicle _unit isKindOf "ParachuteBase") then { + [_unit, [_unit] call EFUNC(common,getDeathAnim), 1, true] call EFUNC(common,doAnimation); + _args set [6, false]; + }; +}; + +if (!local _unit) exitwith { + _args set [ 4, _minWaitingTime - (time - _startingTime)]; + _unit setvariable [QGVAR(unconsciousArguments), _args, true]; + [(_this select 1)] call cba_fnc_removePerFrameHandler; +}; + +// Ensure we are waiting at least a minimum period before checking if we can wake up the unit again, allows for temp knock outs +if ((time - _startingTime) >= _minWaitingTime) exitwith { + if (!([_unit] call FUNC(getUnconsciousCondition))) then { + _unit setvariable ["ACE_isUnconscious", false, true]; + }; +}; From fa7bb5f9c64b51e2c5eb9e0a0598c2ea20334e07 Mon Sep 17 00:00:00 2001 From: Glowbal <thomasskooi@live.nl> Date: Fri, 17 Apr 2015 21:28:47 +0200 Subject: [PATCH 100/257] Added unconscious state check --- addons/medical/functions/fnc_handleLocal.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/medical/functions/fnc_handleLocal.sqf b/addons/medical/functions/fnc_handleLocal.sqf index 5a6123d9f7..98b390b51a 100644 --- a/addons/medical/functions/fnc_handleLocal.sqf +++ b/addons/medical/functions/fnc_handleLocal.sqf @@ -23,7 +23,7 @@ if (_local) then { [_unit, true] call FUNC(addToInjuredCollection); }; - if (count (_unit getvariable [QGVAR(unconsciousArguments), []]) >= 7) then { + if ((_unit getvariable ["ACE_isUnconscious",false]) && {count (_unit getvariable [QGVAR(unconsciousArguments), []]) >= 7}) then { private "_arguments"; _arguments = (_unit getvariable [QGVAR(unconsciousArguments), []]); _arguments set [ 3, time]; From 7489e514ce3538bb88eb122f06137e9ba87a9d99 Mon Sep 17 00:00:00 2001 From: Grzegorz Sikora <gienkov.grzegorz@gmail.com> Date: Fri, 17 Apr 2015 21:48:04 +0200 Subject: [PATCH 101/257] PL translation --- addons/ballistics/stringtable.xml | 15 +++++++++++++++ addons/medical/stringtable.xml | 22 ++++++++++++---------- addons/respawn/stringtable.xml | 7 +++++++ 3 files changed, 34 insertions(+), 10 deletions(-) diff --git a/addons/ballistics/stringtable.xml b/addons/ballistics/stringtable.xml index c95da8d760..eb8e3a25c7 100644 --- a/addons/ballistics/stringtable.xml +++ b/addons/ballistics/stringtable.xml @@ -895,76 +895,91 @@ <English>6.5x47mm 30Rnd Mag (HPBT Scenar)</English> <French>6.5x47mm 30Cps (HPBT Scenar)</French> <Spanish>Cargador de 30 balas de 6.5x47mm (HPBT Scenar)</Spanish> + <Polish>Magazynek 6,5x47 mm 30rd (HPBT Scenar)</Polish> </Key> <Key ID="STR_ACE_30Rnd_65x47_Scenar_mag_NameShort"> <English>6.5mm Scenar</English> <French>6.5mm Scenar</French> <Spanish>6.5mm Scenar</Spanish> + <Polish>6,5mm Scenar</Polish> </Key> <Key ID="STR_ACE_30Rnd_65x47_Scenar_mag_Description"> <English>Caliber: 6.5x47mm (HPBT Scenar)<br />Rounds: 30</English> <French>Calibre: 6.5x47mm (HPBT Scenar)<br />Cartouches: 30</French> <Spanish>Calibre: 6.5x47mm (HPBT Scenar)<br />Balas: 30</Spanish> + <Polish>Kaliber: 6,5x47 mm (HPBT Scenar)<br />Pociski: 30</Polish> </Key> <Key ID="STR_ACE_10Rnd_338_300gr_HPBT_Mag_Name"> <English>.338 10Rnd Mag (300gr Sierra MatchKing HPBT)</English> <French>.338 10 Cps (300gr Sierra MatchKing HPBT)</French> <Spanish>Cargador de 10 balas de 8.6x70mm (300gr Sierra MatchKing HPBT)</Spanish> + <Polish>Magazynek .338 10rd (300gr Sierra MatchKing HPBT)</Polish> </Key> <Key ID="STR_ACE_10Rnd_338_300gr_HPBT_Mag_NameShort"> <English>.338 (HPBT)</English> <French>.338 (HPBT)</French> <Spanish>.338 (HPBT)</Spanish> + <Polish>.338 (HPBT)</Polish> </Key> <Key ID="STR_ACE_10Rnd_338_300gr_HPBT_Mag_Description"> <English>Caliber: 8.6x70mm (300gr Sierra MatchKing HPBT)<br />Rounds: 10</English> <French>Calibre: 8.6x70mm (300gr Sierra MatchKing HPBT)<br />Cartouches: 10</French> <Spanish>Calibre: 8.6x70mm (300gr Sierra MatchKing HPBT)<br />Balas: 10</Spanish> + <Polish>Kaliber: 8,6x70 mm (300gr Sierra MatchKing HPBT)<br />Pociski: 10</Polish> </Key> <Key ID="STR_ACE_10Rnd_338_API526_Mag_Name"> <English>.338 10Rnd Mag (API526)</English> <French>.338 10Cps (API526)</French> <Spanish>Cargador de 10 balas de .338 (API526)</Spanish> + <Polish>Magazynek .338 10rd (API526)</Polish> </Key> <Key ID="STR_ACE_10Rnd_338_API526_Mag_NameShort"> <English>.338 AP</English> <French>.338 AP</French> <Spanish>.338 AP</Spanish> + <Polish>.338 AP</Polish> </Key> <Key ID="STR_ACE_10Rnd_338_API526_Mag_Description"> <English>Caliber: 8.6x70mm (API526)<br />Rounds: 10</English> <French>Calibre: 8.6x70mm (API526)<br />Cartouches: 10</French> <Spanish>Calibre: 8.6x70mm (API526)<br />Balas: 10</Spanish> + <Polish>Kaliber: 8,6x70 mm (API526)<br />Pociski: 10</Polish> </Key> <Key ID="STR_ACE_5Rnd_127x99_Mag_Name"> <English>12.7x99mm 5Rnd Mag</English> <French>12.7x99mm 5Cps</French> <Spanish>Cargador de 5 balas de 12.7x99mm</Spanish> + <Polish>Magazynek 12,7x99 mm 5rd</Polish> </Key> <Key ID="STR_ACE_5Rnd_127x99_Mag_NameShort"> <English>12.7mm</English> <French>12.7mm</French> <Spanish>12.7mm</Spanish> + <Polish>12,7mm</Polish> </Key> <Key ID="STR_ACE_5Rnd_127x99_Mag_Description"> <English>Caliber: 12.7x99mm<br />Rounds: 5</English> <French>Calibre: 12.7x99mm<br />Cartouches: 5</French> <Spanish>Calibre: 12.7x99mm<br />Balas: 5</Spanish> + <Polish>Kaliber: 12,7x99 mm<br />Pociski: 5</Polish> </Key> <Key ID="STR_ACE_5Rnd_127x99_AMAX_Mag_Name"> <English>12.7x99mm 5Rnd Mag (AMAX)</English> <French>12.7x99mm 5Rnd Mag (AMAX)</French> <Spanish>Cargador de 5 balas de 12.7x99mm (AMAX)</Spanish> + <Polish>Magazynek 12,7x99 mm 5rd (AMAX)</Polish> </Key> <Key ID="STR_ACE_5Rnd_127x99_AMAX_Mag_NameShort"> <English>12.7mm</English> <French>12.7mm</French> <Spanish>12.7mm</Spanish> + <Polish>12,7mm</Polish> </Key> <Key ID="STR_ACE_5Rnd_127x99_AMAX_Mag_Description"> <English>Caliber: 12.7x99mm (AMAX)<br />Rounds: 5</English> <French>Calibre: 12.7x99mm (AMAX)<br />Cartouches: 5</French> <Spanish>Calibre: 12.7x99mm (AMAX)<br />Balas: 5</Spanish> + <Polish>Kaliber: 12,7x99 mm (AMAX)<br />Pociski: 5</Polish> </Key> </Package> </Project> \ No newline at end of file diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 9f651e90b7..a8a8017160 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -1,4 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> +<!-- Edited with tabler. --> <Project name="ACE"> <Package name="Medical"> <Key ID="STR_ACE_Medical_Inject_Atropine"> @@ -64,7 +65,7 @@ <German>Salzlösungtransfusion</German> <Spanish>Transfundir salino</Spanish> <Czech>Transfúze fyziologický roztoku</Czech> - <Polish>Przetocz solankę</Polish> + <Polish>Przetocz sól fizjologiczną</Polish> <French>Transfuser de la Saline</French> <Russian>Перелить физраствор</Russian> <Hungarian>Infúzió (sós víz)</Hungarian> @@ -216,7 +217,7 @@ <German>Sallösungtransfusion ...</German> <Spanish>Transfusión de salino ...</Spanish> <Czech>Probíha transfúze fyziologický roztoku ...</Czech> - <Polish>Przetaczanie solanki ...</Polish> + <Polish>Przetaczanie soli fizjologicznej ...</Polish> <French>Transfusion de saline ...</French> <Russian>Переливание физраствора ...</Russian> <Hungarian>Infúzió sós vizzel ...</Hungarian> @@ -436,7 +437,7 @@ <German>Kochsaltzlösung IV (1000ml)</German> <Spanish>Dar Salino IV (1000ml)</Spanish> <Russian>Дать физраствор для в/в вливания (1000 мл)</Russian> - <Polish>Podaj solankę IV (1000ml)</Polish> + <Polish>Podaj sól fizjologiczną IV (1000ml)</Polish> <French>Administrer de la Solution Saline en IV (1000ml)</French> <Czech>Podaz fyz. roztok (1000ml)</Czech> <Hungarian>Sós víz adása intravénásan (1000ml)</Hungarian> @@ -447,7 +448,7 @@ <German>Kochsaltzlösung IV (500ml)</German> <Spanish>Dar Salino IV (500ml)</Spanish> <Russian>Дать физраствор для в/в вливания (500 мл)</Russian> - <Polish>Podaj solankę IV (500ml)</Polish> + <Polish>Podaj sól fizjologiczną IV (500ml)</Polish> <French>Administrer de la Solution Saline en IV (500ml)</French> <Czech>Podaz fyz. roztok (500ml)</Czech> <Hungarian>Sós víz adása intravénásan (500ml)</Hungarian> @@ -458,7 +459,7 @@ <German>Kochsaltzlösung IV (250ml)</German> <Spanish>Dar Salino IV (250ml)</Spanish> <Russian>Дать физраствор для в/в вливания (250 мл)</Russian> - <Polish>Podaj solankę IV (250ml)</Polish> + <Polish>Podaj sól fizjologiczną IV (250ml)</Polish> <French>Administrer de la Solution Saline en IV (250ml)</French> <Czech>Podaz fyz. roztok (250ml)</Czech> <Hungarian>Sós víz adása intravénásan (250ml)</Hungarian> @@ -930,7 +931,7 @@ <Russian>Физраствор для в/в вливания (1000 мл)</Russian> <Spanish>Solución Salina IV (1000ml)</Spanish> <French>Solution Saline 0.9% IV (1000ml)</French> - <Polish>Solanka 0,9% IV (1000ml)</Polish> + <Polish>Sól fizjologiczna IV (1000ml)</Polish> <German>Kochsalzlösung (1000ml)</German> <Hungarian>0,9%-os sósvíz-infúzió (1000ml)</Hungarian> <Italian>Soluzione salina IV (1000ml)</Italian> @@ -940,7 +941,7 @@ <Russian>Пакет физраствора для возмещения объема потерянной крови</Russian> <Spanish>Solución salina intravenosa, para restaurar el volumen sanguíneo</Spanish> <French>Solution Saline 0.9% IV, pour rétablir temporairement la tension artérielle</French> - <Polish>Solanka 0,9%, podawana dożylnie (IV), używana w celu uzupełnienia krwi u pacjenta</Polish> + <Polish>Sól fizjologiczna, podawana dożylnie (IV), używana w celu uzupełnienia krwi u pacjenta</Polish> <Hungarian>0,9%-os sósvíz-infúzió, a páciens vérmennyiségének helyreállítására</Hungarian> <Italian>Soluzione salina, usata per ripristinare sangue nei pazienti.</Italian> </Key> @@ -958,7 +959,7 @@ <Russian>Физраствор для в/в вливания (500 мл)</Russian> <Spanish>Salino IV (500ml)</Spanish> <French>Solution Saline 0.9% IV (500ml)</French> - <Polish>Solanka 0,9% IV (500ml)</Polish> + <Polish>Sól fizjologiczna IV (500ml)</Polish> <German>Kochsalzlösung (500ml)</German> <Hungarian>0,9%-os sósvíz-infúzió (500ml)</Hungarian> <Italian>Soluzione salina IV (500ml)</Italian> @@ -968,7 +969,7 @@ <Russian>Физраствор для в/в вливания (250 мл)</Russian> <Spanish>Salino IV (250ml)</Spanish> <French>Solution Saline 0.9% IV (250ml)</French> - <Polish>Solanka 0,9% IV (250ml)</Polish> + <Polish>Sól fizjologiczna IV (250ml)</Polish> <German>Kochsalzlösung (250ml)</German> <Hungarian>0,9%-os sósvíz-infúzió (250ml)</Hungarian> <Italian>Soluzione salina IV (250ml)</Italian> @@ -1128,6 +1129,7 @@ <Spanish>La Presión Arterial es %2/%3</Spanish> <Hungarian>A vérnyomás %2/%3</Hungarian> <Italian>Hai riscontrato una pressione di %2/%3</Italian> + <Polish>Wyczuwasz ciśnienie krwi o wartości %2/%3</Polish> </Key> <Key ID="STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_OUTPUT_2"> <English>You find a low blood pressure</English> @@ -1611,4 +1613,4 @@ <Spanish>Aberración cromática</Spanish> </Key> </Package> -</Project> +</Project> \ No newline at end of file diff --git a/addons/respawn/stringtable.xml b/addons/respawn/stringtable.xml index 65e21c0107..5874b095ae 100644 --- a/addons/respawn/stringtable.xml +++ b/addons/respawn/stringtable.xml @@ -1,4 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> +<!-- Edited with tabler. --> <Project name="ACE"> <Package name="Interaction"> <Key ID="STR_ACE_Respawn_Deploy"> @@ -50,36 +51,42 @@ <German>Sammelpunkt West (Basis)</German> <Spanish>Punto de reunión Oeste (Base)</Spanish> <Russian>Точка сбора Синих (База)</Russian> + <Polish>Punkt zbiórki Zachodu (Baza)</Polish> </Key> <Key ID="STR_ACE_Respawn_RallypointEastBase"> <English>Rallypoint East (Base)</English> <German>Sammelpunkt Ost (Basis)</German> <Spanish>Punto de reunión Este (Base)</Spanish> <Russian>Точка сбора Красных (База)</Russian> + <Polish>Punkt zbiórki Wschodu (Baza)</Polish> </Key> <Key ID="STR_ACE_Respawn_RallypointIndependentBase"> <English>Rallypoint Independent (Base)</English> <German>Sammelpunkt Widerstand (Basis)</German> <Spanish>Punto de reunión Independiente (Base)</Spanish> <Russian>Точка сбора Независимых (База</Russian> + <Polish>Punkt zbiórki Ruchu oporu (Baza)</Polish> </Key> <Key ID="STR_ACE_Respawn_RallypointWest"> <English>Rallypoint West</English> <German>Sammelpunkt West</German> <Spanish>Punto de reunión Oeste</Spanish> <Russian>Точка сбора Синих</Russian> + <Polish>Punkt zbiórki Zachodu</Polish> </Key> <Key ID="STR_ACE_Respawn_RallypointEast"> <English>Rallypoint East</English> <German>Sammelpunkt Ost</German> <Spanish>Punto de reunión Este</Spanish> <Russian>Точка сбора Красных</Russian> + <Polish>Punkt zbiórki Wschodu</Polish> </Key> <Key ID="STR_ACE_Respawn_RallypointIndependent"> <English>Rallypoint Independent</English> <German>Sammelpunkt Widerstand</German> <Spanish>Punto de reunión Independiente</Spanish> <Russian>Точка сбора Независимых</Russian> + <Polish>Punkt zbiórki Ruchu oporu</Polish> </Key> </Package> </Project> \ No newline at end of file From 0e858be1b17cdbe1a749887afe567f81bd441c63 Mon Sep 17 00:00:00 2001 From: Glowbal <thomasskooi@live.nl> Date: Fri, 17 Apr 2015 22:00:07 +0200 Subject: [PATCH 102/257] Changed conditions for body parts are now always true. This way the medical information is always available, and should help a bit with performance as well. --- addons/medical/ACE_Medical_Actions.hpp | 6 ++++++ addons/medical/ACE_Medical_SelfActions.hpp | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/addons/medical/ACE_Medical_Actions.hpp b/addons/medical/ACE_Medical_Actions.hpp index 036dd5e9d9..3acc53cf05 100644 --- a/addons/medical/ACE_Medical_Actions.hpp +++ b/addons/medical/ACE_Medical_Actions.hpp @@ -3,6 +3,7 @@ class ACE_Head { displayName = "$STR_ACE_Interaction_Head"; runOnHover = 1; statement = QUOTE([ARR_3(_target, true, 0)] call DFUNC(displayPatientInformation)); + condition = "true"; EXCEPTIONS icon = PATHTOF(UI\icons\medical_cross.paa); distance = MEDICAL_ACTION_DISTANCE; @@ -74,6 +75,7 @@ class ACE_Torso { displayName = "$STR_ACE_Interaction_Torso"; runOnHover = 1; statement = QUOTE([ARR_3(_target, true, 1)] call DFUNC(displayPatientInformation)); + condition = "true"; EXCEPTIONS icon = PATHTOF(UI\icons\medical_cross.paa); distance = MEDICAL_ACTION_DISTANCE; @@ -173,6 +175,7 @@ class ACE_ArmLeft { displayName = "$STR_ACE_Interaction_ArmLeft"; runOnHover = 1; statement = QUOTE([ARR_3(_target, true, 2)] call DFUNC(displayPatientInformation)); + condition = "true"; EXCEPTIONS icon = PATHTOF(UI\icons\medical_cross.paa); distance = MEDICAL_ACTION_DISTANCE; @@ -329,6 +332,7 @@ class ACE_ArmRight { displayName = "$STR_ACE_Interaction_ArmRight"; runOnHover = 1; statement = QUOTE([ARR_3(_target, true, 3)] call DFUNC(displayPatientInformation)); + condition = "true"; EXCEPTIONS icon = PATHTOF(UI\icons\medical_cross.paa); distance = MEDICAL_ACTION_DISTANCE; @@ -482,6 +486,7 @@ class ACE_LegLeft { displayName = "$STR_ACE_Interaction_LegLeft"; runOnHover = 1; statement = QUOTE([ARR_3(_target, true, 4)] call DFUNC(displayPatientInformation)); + condition = "true"; EXCEPTIONS icon = PATHTOF(UI\icons\medical_cross.paa); distance = MEDICAL_ACTION_DISTANCE; @@ -623,6 +628,7 @@ class ACE_LegRight { displayName = "$STR_ACE_Interaction_LegRight"; runOnHover = 1; statement = QUOTE([ARR_3(_target, true, 5)] call DFUNC(displayPatientInformation)); + condition = "true"; EXCEPTIONS icon = PATHTOF(UI\icons\medical_cross.paa); distance = MEDICAL_ACTION_DISTANCE; diff --git a/addons/medical/ACE_Medical_SelfActions.hpp b/addons/medical/ACE_Medical_SelfActions.hpp index c2a60898f4..e31e99ad01 100644 --- a/addons/medical/ACE_Medical_SelfActions.hpp +++ b/addons/medical/ACE_Medical_SelfActions.hpp @@ -4,6 +4,7 @@ class Medical { hotkey = "M"; exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_3(_target, true, 0)] call DFUNC(displayPatientInformation)); + condition = "true"; icon = PATHTOF(UI\icons\medical_cross.paa); class ACE_Head { @@ -11,6 +12,7 @@ class Medical { icon = PATHTOF(UI\icons\medical_cross.paa); exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_3(_target, true, 0)] call DFUNC(displayPatientInformation)); + condition = "true"; runOnHover = 1; class Bandage { @@ -78,6 +80,7 @@ class Medical { runOnHover = 1; exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_3(_target, true, 1)] call DFUNC(displayPatientInformation)); + condition = "true"; showDisabled = 1; priority = 2; hotkey = ""; @@ -146,6 +149,7 @@ class Medical { runOnHover = 1; exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_3(_target, true, 2)] call DFUNC(displayPatientInformation)); + condition = "true"; icon = PATHTOF(UI\icons\medical_cross.paa); class Bandage { @@ -246,6 +250,7 @@ class Medical { runOnHover = 1; exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_3(_target, true, 3)] call DFUNC(displayPatientInformation)); + condition = "true"; icon = PATHTOF(UI\icons\medical_cross.paa); class Bandage { @@ -342,6 +347,7 @@ class Medical { runOnHover = 1; exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_3(_target, true, 4)] call DFUNC(displayPatientInformation)); + condition = "true"; icon = PATHTOF(UI\icons\medical_cross.paa); class Bandage { @@ -427,6 +433,7 @@ class Medical { runOnHover = 1; exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_3(_target, true, 5)] call DFUNC(displayPatientInformation)); + condition = "true"; icon = PATHTOF(UI\icons\medical_cross.paa); class Bandage { From 6d18e484c148aa3e4e783e8ec6b2066e81b98b81 Mon Sep 17 00:00:00 2001 From: Glowbal <thomasskooi@live.nl> Date: Fri, 17 Apr 2015 22:02:43 +0200 Subject: [PATCH 103/257] Cache condition for target instead of caller --- addons/medical/functions/fnc_canTreatCached.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/medical/functions/fnc_canTreatCached.sqf b/addons/medical/functions/fnc_canTreatCached.sqf index 34d753b119..b1dfaf7d12 100644 --- a/addons/medical/functions/fnc_canTreatCached.sqf +++ b/addons/medical/functions/fnc_canTreatCached.sqf @@ -19,4 +19,4 @@ #define MAX_DURATION_CACHE 2 // parameters, function, namespace, uid -[_this, DFUNC(canTreat), _this select 0, format[QGVAR(canTreat_%1_%2), _this select 2, _this select 3], MAX_DURATION_CACHE, "clearConditionCaches"] call EFUNC(common,cachedCall); +[_this, DFUNC(canTreat), _this select 1, format[QGVAR(canTreat_%1_%2), _this select 2, _this select 3], MAX_DURATION_CACHE, "clearConditionCaches"] call EFUNC(common,cachedCall); From f5effca21636f18ebbcaef1f48bbb5eac9d7f6b1 Mon Sep 17 00:00:00 2001 From: Glowbal <thomasskooi@live.nl> Date: Fri, 17 Apr 2015 22:21:15 +0200 Subject: [PATCH 104/257] fixed handleDamage basic --- addons/medical/functions/fnc_handleDamage.sqf | 6 ------ addons/medical/functions/fnc_handleDamage_basic.sqf | 6 ++++++ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/addons/medical/functions/fnc_handleDamage.sqf b/addons/medical/functions/fnc_handleDamage.sqf index 876feae637..1632a8f55b 100644 --- a/addons/medical/functions/fnc_handleDamage.sqf +++ b/addons/medical/functions/fnc_handleDamage.sqf @@ -36,12 +36,6 @@ if !(_selection in (GVAR(SELECTIONS) + [""])) exitWith {0}; _damageReturn = _damage; if (GVAR(level) < 2) then { - if ([_unit] call EFUNC(common,isPlayer)) then { - _this set [2, _damage / (GVAR(playerDamageThreshold) max 0.01)]; - } else { - _this set [2, _damage / (GVAR(AIDamageThreshold) max 0.01)]; - }; - _damageReturn = _this call FUNC(handleDamage_basic); }; diff --git a/addons/medical/functions/fnc_handleDamage_basic.sqf b/addons/medical/functions/fnc_handleDamage_basic.sqf index aa9c2f61df..6e343b127a 100644 --- a/addons/medical/functions/fnc_handleDamage_basic.sqf +++ b/addons/medical/functions/fnc_handleDamage_basic.sqf @@ -63,6 +63,12 @@ if (_selectionName in GVAR(SELECTIONS)) then { _newDamage = _damage - (_unit getHitPointDamage (GVAR(HITPOINTS) select (GVAR(SELECTIONS) find _selectionName))); }; +if ([_unit] call EFUNC(common,isPlayer)) then { + _newDamage = _newDamage / (GVAR(playerDamageThreshold) max 0.01); +} else { + _newDamage = _newDamage / (GVAR(AIDamageThreshold) max 0.01); +}; + _damage = _damage - _newDamage; From 9670267d2001cf7bd8aeb61f65546d250a2e3f63 Mon Sep 17 00:00:00 2001 From: Glowbal <thomasskooi@live.nl> Date: Fri, 17 Apr 2015 22:21:54 +0200 Subject: [PATCH 105/257] Fixed wrong classnames for IV treatments --- addons/medical/ACE_Medical_Actions.hpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/addons/medical/ACE_Medical_Actions.hpp b/addons/medical/ACE_Medical_Actions.hpp index 3acc53cf05..ed5670f814 100644 --- a/addons/medical/ACE_Medical_Actions.hpp +++ b/addons/medical/ACE_Medical_Actions.hpp @@ -427,8 +427,8 @@ class ACE_ArmRight { }; class PlasmaIV: BloodIV { displayName = "$STR_ACE_MEDICAL_ACTIONS_Plasma4_1000"; - condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'BloodIV')] call DFUNC(canTreatCached)); - statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'BloodIV')] call DFUNC(treatment)); + condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'PlasmaIV')] call DFUNC(canTreatCached)); + statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'PlasmaIV')] call DFUNC(treatment)); EXCEPTIONS }; class PlasmaIV_500: PlasmaIV { @@ -583,8 +583,8 @@ class ACE_LegLeft { }; class PlasmaIV: BloodIV { displayName = "$STR_ACE_MEDICAL_ACTIONS_Plasma4_1000"; - condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'BloodIV')] call DFUNC(canTreatCached)); - statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'BloodIV')] call DFUNC(treatment)); + condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'PlasmaIV')] call DFUNC(canTreatCached)); + statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'PlasmaIV')] call DFUNC(treatment)); EXCEPTIONS }; class PlasmaIV_500: PlasmaIV { @@ -724,8 +724,8 @@ class ACE_LegRight { }; class PlasmaIV: BloodIV { displayName = "$STR_ACE_MEDICAL_ACTIONS_Plasma4_1000"; - condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'BloodIV')] call DFUNC(canTreatCached)); - statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'BloodIV')] call DFUNC(treatment)); + condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'PlasmaIV')] call DFUNC(canTreatCached)); + statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'PlasmaIV')] call DFUNC(treatment)); EXCEPTIONS }; class PlasmaIV_500: PlasmaIV { From cbc3584f9d6624f8e4bba525c0632d98b0d57e04 Mon Sep 17 00:00:00 2001 From: Glowbal <thomasskooi@live.nl> Date: Fri, 17 Apr 2015 22:24:42 +0200 Subject: [PATCH 106/257] removed duplicate condition attribute --- addons/medical/ACE_Medical_SelfActions.hpp | 1 - 1 file changed, 1 deletion(-) diff --git a/addons/medical/ACE_Medical_SelfActions.hpp b/addons/medical/ACE_Medical_SelfActions.hpp index e31e99ad01..9c79503f3d 100644 --- a/addons/medical/ACE_Medical_SelfActions.hpp +++ b/addons/medical/ACE_Medical_SelfActions.hpp @@ -80,7 +80,6 @@ class Medical { runOnHover = 1; exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_3(_target, true, 1)] call DFUNC(displayPatientInformation)); - condition = "true"; showDisabled = 1; priority = 2; hotkey = ""; From bc4d102d0890023f59bfea846bc4cdc85651f92b Mon Sep 17 00:00:00 2001 From: Glowbal <thomasskooi@live.nl> Date: Fri, 17 Apr 2015 22:43:31 +0200 Subject: [PATCH 107/257] changed variable initialization - everything is now done local --- addons/medical/XEH_init.sqf | 5 +-- addons/medical/XEH_respawn.sqf | 3 +- addons/medical/functions/fnc_init.sqf | 49 ++++++++++++++------------- 3 files changed, 28 insertions(+), 29 deletions(-) diff --git a/addons/medical/XEH_init.sqf b/addons/medical/XEH_init.sqf index 2f840fe950..f3fb2b1e93 100644 --- a/addons/medical/XEH_init.sqf +++ b/addons/medical/XEH_init.sqf @@ -4,7 +4,4 @@ private ["_unit"]; _unit = _this select 0; _unit addEventHandler ["HandleDamage", {_this call FUNC(handleDamage)}]; - -if (local _unit) then { - [_unit] call FUNC(init); -}; +[_unit] call FUNC(init); diff --git a/addons/medical/XEH_respawn.sqf b/addons/medical/XEH_respawn.sqf index b2101b1d4e..5047f0026c 100644 --- a/addons/medical/XEH_respawn.sqf +++ b/addons/medical/XEH_respawn.sqf @@ -6,8 +6,7 @@ _unit = _this select 0; if !(local _unit) exitWith {}; -diag_log "running respawn"; -[_unit] call FUNC(init); +[_unit, true] call FUNC(init); //Reset captive status for respawning unit if (!(_unit getVariable ["ACE_isUnconscious", false])) then { diff --git a/addons/medical/functions/fnc_init.sqf b/addons/medical/functions/fnc_init.sqf index fa6aa357c2..0147b99204 100644 --- a/addons/medical/functions/fnc_init.sqf +++ b/addons/medical/functions/fnc_init.sqf @@ -13,21 +13,24 @@ #include "script_component.hpp" -private ["_unit", "_allUsedMedication", "_logs"]; +private ["_unit", "_allUsedMedication", "_logs", "_forceNew"]; _unit = _this select 0; +_forceNew = if (count _this > 1) then {_this select 1} else {false}; -_unit setVariable [QGVAR(pain), 0, true]; -_unit setVariable [QGVAR(morphine), 0, true]; -_unit setVariable [QGVAR(bloodVolume), 100, true]; +if (!(isnil {_unit getvariable QGVAR(triageLevel)}) && !_forceNew) exitwith {}; + +_unit setVariable [QGVAR(pain), 0]; +_unit setVariable [QGVAR(morphine), 0]; +_unit setVariable [QGVAR(bloodVolume), 100]; // tourniquets -_unit setvariable [QGVAR(tourniquets), [0,0,0,0,0,0], true]; +_unit setvariable [QGVAR(tourniquets), [0,0,0,0,0,0]]; // wounds and injuries -_unit setvariable [QGVAR(openWounds), [], true]; -_unit setvariable [QGVAR(bandagedWounds), [], true]; -_unit setVariable [QGVAR(internalWounds), [], true]; +_unit setvariable [QGVAR(openWounds), []]; +_unit setvariable [QGVAR(bandagedWounds), []]; +_unit setVariable [QGVAR(internalWounds), []]; _unit setvariable [QGVAR(lastUniqueWoundID), 1]; // vitals @@ -40,8 +43,8 @@ _unit setVariable [QGVAR(peripheralResistance), 100]; _unit setVariable [QGVAR(fractures), []]; // triage card and logs -_unit setvariable [QGVAR(triageLevel), 0, true]; -_unit setvariable [QGVAR(triageCard), [], true]; +_unit setvariable [QGVAR(triageLevel), 0]; +_unit setvariable [QGVAR(triageCard), []]; // IVs _unit setVariable [QGVAR(salineIVVolume), 0]; @@ -49,21 +52,21 @@ _unit setVariable [QGVAR(plasmaIVVolume), 0]; _unit setVariable [QGVAR(bloodIVVolume), 0]; // damage storage -_unit setvariable [QGVAR(bodyPartStatus), [0,0,0,0,0,0], true]; +_unit setvariable [QGVAR(bodyPartStatus), [0,0,0,0,0,0]]; // airway -_unit setvariable [QGVAR(airwayStatus), 100, true]; -_unit setVariable [QGVAR(airwayOccluded), false, true]; -_unit setvariable [QGVAR(airwayCollapsed), false, true]; +_unit setvariable [QGVAR(airwayStatus), 100]; +_unit setVariable [QGVAR(airwayOccluded), false]; +_unit setvariable [QGVAR(airwayCollapsed), false]; // generic medical admin -_unit setvariable [QGVAR(addedToUnitLoop), false, true]; -_unit setvariable [QGVAR(inCardiacArrest), false, true]; -_unit setVariable ["ACE_isUnconscious", false, true]; -_unit setvariable [QGVAR(hasLostBlood), false, true]; -_unit setvariable [QGVAR(isBleeding), false, true]; -_unit setvariable [QGVAR(hasPain), false, true]; -_unit setvariable [QGVAR(amountOfReviveLives), GVAR(amountOfReviveLives), true]; +_unit setvariable [QGVAR(addedToUnitLoop), false]; +_unit setvariable [QGVAR(inCardiacArrest), false]; +_unit setVariable ["ACE_isUnconscious", false]; +_unit setvariable [QGVAR(hasLostBlood), false]; +_unit setvariable [QGVAR(isBleeding), false]; +_unit setvariable [QGVAR(hasPain), false]; +_unit setvariable [QGVAR(amountOfReviveLives), GVAR(amountOfReviveLives)]; // medication _allUsedMedication = _unit getVariable [QGVAR(allUsedMedication), []]; @@ -74,9 +77,9 @@ _unit setVariable [QGVAR(allUsedMedication), []]; _logs = _unit getvariable [QGVAR(allLogs), []]; { - _unit setvariable [_x, nil, true]; + _unit setvariable [_x, nil]; } foreach _logs; -_unit setvariable [QGVAR(allLogs), [], true]; +_unit setvariable [QGVAR(allLogs), []]; // items [{ From 00f26144ecfffef3ef6deaa2401aad7277490867 Mon Sep 17 00:00:00 2001 From: PabstMirror <elephantisaterriblemascot@gmail.com> Date: Fri, 17 Apr 2015 15:45:00 -0500 Subject: [PATCH 108/257] More Privates --- .../functions/fnc_pfhUpdateGForces.sqf | 2 + .../functions/fnc_flashbangExplosionEH.sqf | 2 +- .../functions/fnc_flashbangThrownFuze.sqf | 3 +- addons/markers/XEH_preInit.sqf | 2 + .../functions/fnc_initInsertMarker.sqf | 2 + addons/microdagr/XEH_clientInit.sqf | 2 + .../functions/fnc_deviceAddWaypoint.sqf | 2 + .../functions/fnc_deviceDeleteWaypoint.sqf | 2 + .../functions/fnc_mapDoubleTapEH.sqf | 2 + .../microdagr/functions/fnc_mapOnDrawEH.sqf | 3 +- .../fnc_saveCurrentAndSetNewMode.sqf | 14 +++---- addons/movement/functions/fnc_canClimb.sqf | 6 +-- addons/movement/functions/fnc_getWeight.sqf | 2 +- .../functions/fnc_drawNameTagIcon.sqf | 2 +- .../nametags/functions/fnc_initIsSpeaking.sqf | 1 + .../nametags/functions/fnc_moduleNameTags.sqf | 4 +- addons/nametags/functions/fnc_onDraw3d.sqf | 28 ++++++------- addons/nightvision/XEH_postInitClient.sqf | 4 +- .../functions/fnc_updatePPEffects.sqf | 4 +- addons/noradio/XEH_post_initClient.sqf | 6 +-- .../functions/fnc_addMapFunction.sqf | 6 +-- .../functions/fnc_handleMapClick.sqf | 2 +- .../switchunits/functions/fnc_initPlayer.sqf | 5 +-- .../functions/fnc_nearestPlayers.sqf | 15 +++---- .../switchunits/functions/fnc_switchBack.sqf | 16 +++----- .../switchunits/functions/fnc_switchUnit.sqf | 4 +- .../vehiclelock/functions/fnc_moduleSync.sqf | 1 + .../functions/fnc_onOpenInventory.sqf | 1 + addons/weaponselect/XEH_preInit.sqf | 1 + .../fnc_countMagazinesForGrenadeMuzzle.sqf | 11 ++--- .../fnc_displayGrenadeTypeAndNumber.sqf | 4 +- .../functions/fnc_selectGrenadeAll.sqf | 40 +++++++++---------- .../functions/fnc_selectGrenadeFrag.sqf | 34 ++++++++-------- .../functions/fnc_selectGrenadeOther.sqf | 34 ++++++++-------- .../functions/fnc_setNextGrenadeMuzzle.sqf | 14 +++---- tools/search_privates.py | 15 +++++-- 36 files changed, 151 insertions(+), 145 deletions(-) diff --git a/addons/gforces/functions/fnc_pfhUpdateGForces.sqf b/addons/gforces/functions/fnc_pfhUpdateGForces.sqf index 01c00511cf..29a4859651 100644 --- a/addons/gforces/functions/fnc_pfhUpdateGForces.sqf +++ b/addons/gforces/functions/fnc_pfhUpdateGForces.sqf @@ -13,6 +13,8 @@ */ #include "script_component.hpp" +private ["_interval", "_player", "_newVel", "_accel", "_currentGForce", "_average", "_sum", "_classCoef", "_suitCoef", "_gBlackOut", "_gRedOut", "_g", "_gBO", "_coef", "_strength"]; + EXPLODE_2_PVT(_this,_params,_pfhId); _interval = time - GVAR(lastUpdateTime); diff --git a/addons/grenades/functions/fnc_flashbangExplosionEH.sqf b/addons/grenades/functions/fnc_flashbangExplosionEH.sqf index c84ee33b33..75e61dab56 100644 --- a/addons/grenades/functions/fnc_flashbangExplosionEH.sqf +++ b/addons/grenades/functions/fnc_flashbangExplosionEH.sqf @@ -15,7 +15,7 @@ */ #include "script_component.hpp" -private ["_affected", "_strength", "_posGrenade", "_posUnit", "_angleGrenade", "_angleView", "_angleDiff", "_light", "_losCount"]; +private ["_affected", "_strength", "_posGrenade", "_posUnit", "_angleGrenade", "_angleView", "_angleDiff", "_light", "_losCount", "_dirToUnitVector", "_eyeDir", "_eyePos"]; PARAMS_1(_grenade); diff --git a/addons/grenades/functions/fnc_flashbangThrownFuze.sqf b/addons/grenades/functions/fnc_flashbangThrownFuze.sqf index a83c81e660..377793ca7b 100644 --- a/addons/grenades/functions/fnc_flashbangThrownFuze.sqf +++ b/addons/grenades/functions/fnc_flashbangThrownFuze.sqf @@ -19,7 +19,8 @@ PARAMS_1(_projectile); if (alive _projectile) then { playSound3D ["A3\Sounds_F\weapons\Explosion\explosion_mine_1.wss", _projectile, false, getPosASL _projectile, 5, 1.2, 400]; - + + private "_affected"; _affected = _projectile nearEntities ["CAManBase", 50]; ["flashbangExplosion", _affected, [_projectile]] call EFUNC(common,targetEvent); }; diff --git a/addons/markers/XEH_preInit.sqf b/addons/markers/XEH_preInit.sqf index fd97aeda0c..b2b9ed5c00 100644 --- a/addons/markers/XEH_preInit.sqf +++ b/addons/markers/XEH_preInit.sqf @@ -12,6 +12,8 @@ PREP(sendMarkersJIP); PREP(setMarkerJIP); PREP(setMarkerNetwork); +private ["_config", "_marker", "_a", "_scope", "_icon", "_rgba", "_name"]; + // init marker types if (isNil QGVAR(MarkersCache)) then { _config = configfile >> "CfgMarkers"; diff --git a/addons/markers/functions/fnc_initInsertMarker.sqf b/addons/markers/functions/fnc_initInsertMarker.sqf index 6ac13f9e80..6c5160c031 100644 --- a/addons/markers/functions/fnc_initInsertMarker.sqf +++ b/addons/markers/functions/fnc_initInsertMarker.sqf @@ -19,6 +19,8 @@ #define BORDER 0.005 [{ + private ["_display", "_text", "_picture", "_channel", "_buttonOK", "_buttonCancel", "_description", "_title", "_descriptionChannel", "_sizeX", "_sizeY", "_aceShapeLB", "_aceColorLB", "_aceAngleSlider", "_aceAngleSliderText", "_mapIDD", "_pos", "_posX", "_posY", "_posW", "_posH", "_offsetButtons", "_buttonOk", "_curSelShape", "_curSelColor", "_curSelAngle"]; + disableserialization; PARAMS_1(_display); diff --git a/addons/microdagr/XEH_clientInit.sqf b/addons/microdagr/XEH_clientInit.sqf index c917eb0a8d..99c94b4512 100644 --- a/addons/microdagr/XEH_clientInit.sqf +++ b/addons/microdagr/XEH_clientInit.sqf @@ -54,6 +54,8 @@ GVAR(rangeFinderPositionASL) = []; GVAR(mapAltitude) = getNumber (configFile >> "CfgWorlds" >> worldName >> "elevationOffset"); +private ["_worldMapLong", "_worldMapLat", "_zone", "_band", "_squareID"]; + //Calculate the map's MGRS: _worldMapLong = getNumber (configFile >> "CfgWorlds" >> worldName >> "longitude"); _worldMapLat = getNumber (configFile >> "CfgWorlds" >> worldName >> "latitude"); diff --git a/addons/microdagr/functions/fnc_deviceAddWaypoint.sqf b/addons/microdagr/functions/fnc_deviceAddWaypoint.sqf index 6912810f58..c383d0a95e 100644 --- a/addons/microdagr/functions/fnc_deviceAddWaypoint.sqf +++ b/addons/microdagr/functions/fnc_deviceAddWaypoint.sqf @@ -19,6 +19,8 @@ PARAMS_2(_waypointName,_waypointPosASL); +private "_waypoints"; + _waypoints = ace_player getVariable [QGVAR(waypoints), []]; _waypoints pushBack [_waypointName, _waypointPosASL]; ace_player setVariable [QGVAR(waypoints), _waypoints]; diff --git a/addons/microdagr/functions/fnc_deviceDeleteWaypoint.sqf b/addons/microdagr/functions/fnc_deviceDeleteWaypoint.sqf index 3d1e8ec852..62ca5a222a 100644 --- a/addons/microdagr/functions/fnc_deviceDeleteWaypoint.sqf +++ b/addons/microdagr/functions/fnc_deviceDeleteWaypoint.sqf @@ -18,6 +18,8 @@ PARAMS_1(_wpIndex); +private "_waypoints"; + _waypoints = ace_player getVariable [QGVAR(waypoints), []]; if ((_wpIndex < 0) || (_wpIndex > ((count _waypoints) - 1))) exitWith {ERROR("out of bounds wp");}; diff --git a/addons/microdagr/functions/fnc_mapDoubleTapEH.sqf b/addons/microdagr/functions/fnc_mapDoubleTapEH.sqf index f36d5f2548..21a164ff2e 100644 --- a/addons/microdagr/functions/fnc_mapDoubleTapEH.sqf +++ b/addons/microdagr/functions/fnc_mapDoubleTapEH.sqf @@ -20,6 +20,8 @@ PARAMS_4(_theMap,_mouseButton,_xPos,_yPos); +private ["_worldPos"]; + //Only handle LMB if (_mouseButton != 0) exitWith {}; diff --git a/addons/microdagr/functions/fnc_mapOnDrawEH.sqf b/addons/microdagr/functions/fnc_mapOnDrawEH.sqf index 3acf3e889c..bff20a4b67 100644 --- a/addons/microdagr/functions/fnc_mapOnDrawEH.sqf +++ b/addons/microdagr/functions/fnc_mapOnDrawEH.sqf @@ -17,7 +17,8 @@ PARAMS_1(_theMap); -_theMap = _this select 0; +private ["_mapSize", "_waypoints", "_size", "_targetPos", "_relBearing", "_wpName", "_wpPos", "_alpha"]; + _mapSize = (ctrlPosition _theMap) select 3; _waypoints = [] call FUNC(deviceGetWaypoints); diff --git a/addons/microdagr/functions/fnc_saveCurrentAndSetNewMode.sqf b/addons/microdagr/functions/fnc_saveCurrentAndSetNewMode.sqf index 1f4982d87f..64a5cab991 100644 --- a/addons/microdagr/functions/fnc_saveCurrentAndSetNewMode.sqf +++ b/addons/microdagr/functions/fnc_saveCurrentAndSetNewMode.sqf @@ -1,7 +1,7 @@ /* * Author: PabstMirror * Saves the current mode and sets a new mode - * Used to backup display when switching display modes + * Used to backup display when switching display modes * * Arguments: * 0: New Mode <NUMBER> @@ -16,7 +16,7 @@ */ #include "script_component.hpp" -private ["_display", "_theMap", "_mapSize", "_centerPos"]; +private ["_display", "_theMap", "_mapSize", "_centerPos", "_mapCtrlPos"]; PARAMS_1(_newMode); @@ -36,16 +36,16 @@ if (GVAR(currentApplicationPage) == 2) then { _centerPos = [((_mapCtrlPos select 0) + (_mapCtrlPos select 2) / 2), ((_mapCtrlPos select 1) + (_mapCtrlPos select 3) / 2)]; GVAR(mapPosition) = _theMap ctrlMapScreenToWorld _centerPos; GVAR(mapZoom) = (ctrlMapScale _theMap) * _mapSize; - + //Hit button again, toggle map modes: if (_newMode == 2) then { - if (GVAR(mapShowTexture)) then { - GVAR(mapShowTexture) = false; - } else { + if (GVAR(mapShowTexture)) then { + GVAR(mapShowTexture) = false; + } else { if (GVAR(MapDataAvailable) == MAP_DETAIL_SAT) then { GVAR(mapShowTexture) = true; }; - }; + }; }; }; diff --git a/addons/movement/functions/fnc_canClimb.sqf b/addons/movement/functions/fnc_canClimb.sqf index 27753d8a12..d9946f381c 100644 --- a/addons/movement/functions/fnc_canClimb.sqf +++ b/addons/movement/functions/fnc_canClimb.sqf @@ -9,15 +9,15 @@ * The return value <BOOL> * * Example: - * _bool = [player] call ace_movement_fnc_canClimb + * [player] call ace_movement_fnc_canClimb * * Public: No */ #include "script_component.hpp" -private ["_unit", "_pos", "_dir"]; +private ["_pos", "_dir"]; -_unit = _this select 0; +PARAMS_1(_unit); _pos = getPosASL _unit; _dir = getDir _unit; diff --git a/addons/movement/functions/fnc_getWeight.sqf b/addons/movement/functions/fnc_getWeight.sqf index 955be1a215..6941173fde 100644 --- a/addons/movement/functions/fnc_getWeight.sqf +++ b/addons/movement/functions/fnc_getWeight.sqf @@ -9,7 +9,7 @@ * The return value <NUMBER> * * Example: - * _bool = [player] call ace_movement_fnc_getWeight + * [player] call ace_movement_fnc_getWeight * * Public: No */ diff --git a/addons/nametags/functions/fnc_drawNameTagIcon.sqf b/addons/nametags/functions/fnc_drawNameTagIcon.sqf index f0a9bb89d4..6a7db7d5ac 100644 --- a/addons/nametags/functions/fnc_drawNameTagIcon.sqf +++ b/addons/nametags/functions/fnc_drawNameTagIcon.sqf @@ -27,7 +27,7 @@ "\A3\Ui_f\data\GUI\Cfg\Ranks\colonel_gs.paa" \ ] -private ["_height", "_position", "_color", "_name", "_rank", "_size"]; +private ["_height", "_position", "_color", "_name", "_rank", "_size", "_icon"]; PARAMS_5(_player,_target,_alpha,_heightOffset,_iconType); diff --git a/addons/nametags/functions/fnc_initIsSpeaking.sqf b/addons/nametags/functions/fnc_initIsSpeaking.sqf index daddd36c05..c6087541a8 100644 --- a/addons/nametags/functions/fnc_initIsSpeaking.sqf +++ b/addons/nametags/functions/fnc_initIsSpeaking.sqf @@ -55,6 +55,7 @@ if (isClass (configFile >> "cfgPatches" >> "acre_api")) then { //Note: class RscDisplayVoiceChat {idd = 55} - only present when talking [{ + private ["_oldSetting", "_newSetting"]; _oldSetting = ACE_player getVariable [QGVAR(isSpeakingInGame), false]; _newSetting = (!(isNull findDisplay 55)); if (!(_oldSetting isEqualTo _newSetting)) then { diff --git a/addons/nametags/functions/fnc_moduleNameTags.sqf b/addons/nametags/functions/fnc_moduleNameTags.sqf index 6050b99c67..1bbd4d8efb 100644 --- a/addons/nametags/functions/fnc_moduleNameTags.sqf +++ b/addons/nametags/functions/fnc_moduleNameTags.sqf @@ -14,9 +14,7 @@ if !(isServer) exitWith {}; -_logic = _this select 0; -_units = _this select 1; -_activated = _this select 2; +PARAMS_3(_logic,_units,_activated); if !(_activated) exitWith {}; diff --git a/addons/nametags/functions/fnc_onDraw3d.sqf b/addons/nametags/functions/fnc_onDraw3d.sqf index d35cef0d67..9efc70aeb9 100644 --- a/addons/nametags/functions/fnc_onDraw3d.sqf +++ b/addons/nametags/functions/fnc_onDraw3d.sqf @@ -1,9 +1,9 @@ #include "script_component.hpp" -_player = ACE_player; +private ["_onKeyPressAlphaMax", "_defaultIcon", "_distance", "_alpha", "_icon", "_targets", "_pos2", "_vecy", "_relPos", "_projDist", "_pos", "_target"]; //don't show nametags in spectator -if (!alive _player) exitWith {}; +if (!alive ACE_player) exitWith {}; _onKeyPressAlphaMax = if ((GVAR(showPlayerNames) in [3,4])) then { 2 + (GVAR(ShowNamesTime) - time); //after release 1 second of full opacity, 1 second of fading to 0 @@ -24,14 +24,14 @@ if (GVAR(showCursorTagForVehicles) && {_onKeyPressAlphaMax > 0}) then { if ((!(_target isKindOf "CAManBase")) && {!(_target in allUnitsUAV)}) then { _target = effectiveCommander _target; if ((!isNull _target) && - {(side (group _target)) == (side (group _player))} && - {_target != _player} && + {(side (group _target)) == (side (group ACE_player))} && + {_target != ACE_player} && {GVAR(ShowNamesForAI) || {[_target] call EFUNC(common,isPlayer)}} && {!(_target getVariable ["ACE_hideName", false])}) then { - _distance = _player distance _target; + _distance = ACE_player distance _target; _alpha = ((1 - 0.2 * (_distance - GVAR(PlayerNamesViewDistance))) min 1) * GVAR(PlayerNamesMaxAlpha); _alpha = _alpha min _onKeyPressAlphaMax; - [_player, _target, _alpha, _distance * 0.026, _defaultIcon] call FUNC(drawNameTagIcon); + [ACE_player, _target, _alpha, _distance * 0.026, _defaultIcon] call FUNC(drawNameTagIcon); }; }; }; @@ -41,11 +41,11 @@ if ((GVAR(showPlayerNames) in [2,4]) && {_onKeyPressAlphaMax > 0}) then { _target = cursorTarget; if ((!isNull _target) && {_target isKindOf "CAManBase"} && - {(side (group _target)) == (side (group _player))} && - {_target != _player} && + {(side (group _target)) == (side (group ACE_player))} && + {_target != ACE_player} && {GVAR(ShowNamesForAI) || {[_target] call EFUNC(common,isPlayer)}} && {!(_target getVariable ["ACE_hideName", false])}) then { - _distance = _player distance _target; + _distance = ACE_player distance _target; _alpha = ((1 - 0.2 * (_distance - GVAR(PlayerNamesViewDistance))) min 1) * GVAR(PlayerNamesMaxAlpha); _alpha = _alpha min _onKeyPressAlphaMax; _icon = ICON_NONE; @@ -55,7 +55,7 @@ if ((GVAR(showPlayerNames) in [2,4]) && {_onKeyPressAlphaMax > 0}) then { _icon = if (([_target] call FUNC(isSpeaking)) && {(vehicle _target) == _target} && {GVAR(showSoundWaves) > 0}) then {ICON_NAME_SPEAK} else {_defaultIcon}; }; - [_player, _target, _alpha, _distance * 0.026, _icon] call FUNC(drawNameTagIcon); + [ACE_player, _target, _alpha, _distance * 0.026, _icon] call FUNC(drawNameTagIcon); }; }; @@ -84,12 +84,12 @@ if (((GVAR(showPlayerNames) in [1,3]) && {_onKeyPressAlphaMax > 0}) || {GVAR(sho }; if ((_icon != ICON_NONE) && - {(side (group _target)) == (side (group _player))} && - {_target != _player} && + {(side (group _target)) == (side (group ACE_player))} && + {_target != ACE_player} && {GVAR(ShowNamesForAI) || {[_target] call EFUNC(common,isPlayer)}} && {!(_target getVariable ["ACE_hideName", false])}) then { - if (lineIntersects [_pos, (visiblePositionASL _target) vectorAdd [0,0,1], vehicle _player, _target]) exitWith {}; // Check if there is line of sight + if (lineIntersects [_pos, (visiblePositionASL _target) vectorAdd [0,0,1], vehicle ACE_player, _target]) exitWith {}; // Check if there is line of sight _relPos = (visiblePositionASL _target) vectorDiff _pos; _distance = vectorMagnitude _relPos; _projDist = _relPos vectorDistance (_vecy vectorMultiply (_relPos vectorDotProduct _vecy)); @@ -102,7 +102,7 @@ if (((GVAR(showPlayerNames) in [1,3]) && {_onKeyPressAlphaMax > 0}) || {GVAR(sho _alpha = _alpha min _onKeyPressAlphaMax; }; - [_player, _target, _alpha, _distance * 0.026, _icon] call FUNC(drawNameTagIcon); + [ACE_player, _target, _alpha, _distance * 0.026, _icon] call FUNC(drawNameTagIcon); }; } forEach _targets; }; diff --git a/addons/nightvision/XEH_postInitClient.sqf b/addons/nightvision/XEH_postInitClient.sqf index 376059ce1b..db5d395096 100644 --- a/addons/nightvision/XEH_postInitClient.sqf +++ b/addons/nightvision/XEH_postInitClient.sqf @@ -42,7 +42,7 @@ GVAR(ppEffectMuzzleFlash) ppEffectCommit 0; // Conditions: canInteract if !([ACE_player, objNull, ["isNotEscorting", "isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; // Conditions: specific - if ((currentVisionMode _player != 1)) exitWith {false}; + if ((currentVisionMode ACE_player != 1)) exitWith {false}; // Statement [ACE_player, 1] call FUNC(changeNVGBrightness); @@ -56,7 +56,7 @@ GVAR(ppEffectMuzzleFlash) ppEffectCommit 0; // Conditions: canInteract if !([ACE_player, objNull, ["isNotEscorting", "isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; // Conditions: specific - if ((currentVisionMode _player != 1)) exitWith {false}; + if ((currentVisionMode ACE_player != 1)) exitWith {false}; // Statement [ACE_player, -1] call FUNC(changeNVGBrightness); diff --git a/addons/nightvision/functions/fnc_updatePPEffects.sqf b/addons/nightvision/functions/fnc_updatePPEffects.sqf index a90186fe10..9906a440fc 100644 --- a/addons/nightvision/functions/fnc_updatePPEffects.sqf +++ b/addons/nightvision/functions/fnc_updatePPEffects.sqf @@ -15,7 +15,7 @@ */ #include "script_component.hpp" -private ["_currentVehicle", "_grainSetting", "_blurSetting", "_radBlurSetting", "_config"]; +private ["_currentVehicle", "_grainSetting", "_blurSetting", "_radBlurSetting", "_config", "_hmd", "_cameraView", "_turret"]; _currentVehicle = vehicle ACE_player; @@ -41,7 +41,7 @@ _fnc_isUsingHMD = { !("NVG" in getArray (_config >> "ViewOptics" >> "visionMode")); }; - private ["_result", "_turretConfig", "_turretConfigOpticsIn"]; + private ["_result", "_turretConfig", "_turretConfigOpticsIn", "_index"]; _result = true; _turretConfig = [_config, _turret] call EFUNC(common,getTurretConfigPath); _turretConfigOpticsIn = _turretConfig >> "OpticsIn"; diff --git a/addons/noradio/XEH_post_initClient.sqf b/addons/noradio/XEH_post_initClient.sqf index 4f35a1ced9..ecd80a6436 100644 --- a/addons/noradio/XEH_post_initClient.sqf +++ b/addons/noradio/XEH_post_initClient.sqf @@ -2,15 +2,13 @@ #include "script_component.hpp" /* -_setupPlayer = { +[{ if (!isNull ACE_player) then { [(_this select 1)] call cba_fnc_removePerFrameHandler; [ACE_player, "isPlayer"] call EFUNC(common,muteUnit); }; -}; - -[_setupPlayer, 0, []] call CBA_fnc_addPerFrameHandler; +}, 0, []] call CBA_fnc_addPerFrameHandler; */ if (!hasInterface) exitWith {}; diff --git a/addons/switchunits/functions/fnc_addMapFunction.sqf b/addons/switchunits/functions/fnc_addMapFunction.sqf index 62a7c42a22..7204e73d36 100644 --- a/addons/switchunits/functions/fnc_addMapFunction.sqf +++ b/addons/switchunits/functions/fnc_addMapFunction.sqf @@ -17,12 +17,10 @@ #include "script_component.hpp" -private ["_unit", "_sides"]; -_unit = _this select 0; -_sides = _this select 1; +PARAMS_2(_unit,_sides); ["theMapClick", "onMapSingleClick", { - + // IGNORE_PRIVATE_WARNING(_pos,_shift,_alt) if (alive ACE_player && {GVAR(OriginalUnit) getVariable ["ACE_CanSwitchUnits", false]}) then { [_this, _pos, _shift, _alt] call FUNC(handleMapClick); }; diff --git a/addons/switchunits/functions/fnc_handleMapClick.sqf b/addons/switchunits/functions/fnc_handleMapClick.sqf index 3033071984..bfe36f13ea 100644 --- a/addons/switchunits/functions/fnc_handleMapClick.sqf +++ b/addons/switchunits/functions/fnc_handleMapClick.sqf @@ -10,7 +10,7 @@ * None * * Example: - * [_unit, _sides] call FUNC(handleMapClick) + * [unit, _sides] call FUNC(handleMapClick) * * Public: No */ diff --git a/addons/switchunits/functions/fnc_initPlayer.sqf b/addons/switchunits/functions/fnc_initPlayer.sqf index 9c71f8cefc..c2857f1091 100644 --- a/addons/switchunits/functions/fnc_initPlayer.sqf +++ b/addons/switchunits/functions/fnc_initPlayer.sqf @@ -10,7 +10,7 @@ * None * * Example: - * [_player, _sides] call FUNC(initPlayer) + * [player, [west]] call FUNC(initPlayer) * * Public: No */ @@ -19,8 +19,7 @@ private ["_playerUnit", "_sides"]; -_playerUnit = _this select 0; -_sides = _this select 1; +PARAMS_2(_playerUnit,_sides); if (vehicle _playerUnit == _playerUnit) then { diff --git a/addons/switchunits/functions/fnc_nearestPlayers.sqf b/addons/switchunits/functions/fnc_nearestPlayers.sqf index b79c54054f..987c4e3528 100644 --- a/addons/switchunits/functions/fnc_nearestPlayers.sqf +++ b/addons/switchunits/functions/fnc_nearestPlayers.sqf @@ -10,14 +10,15 @@ * Player units <ARRAY<OBJECT>> * * Example: - * [_pos, 100] call FUNC(nearestPlayers) + * [[300,300,0], 100] call FUNC(nearestPlayers) * * Public: Yes */ - #include "script_component.hpp" -private ["_position", "_radius", "_nearestPlayers"]; +private ["_nearestPlayers"]; + +PARAMS_2(_position,_radius); _position = _this select 0; _radius = _this select 1; @@ -25,9 +26,9 @@ _radius = _this select 1; _nearestPlayers = []; { - if ([_x] call EFUNC(common,isPlayer) && {alive _x}) then { - _nearestPlayers pushBack _x; - }; + if ([_x] call EFUNC(common,isPlayer) && {alive _x}) then { + _nearestPlayers pushBack _x; + }; } forEach (nearestObjects [_position, ["Man"], _radius]); - _nearestPlayers +_nearestPlayers diff --git a/addons/switchunits/functions/fnc_switchBack.sqf b/addons/switchunits/functions/fnc_switchBack.sqf index d54713bbe4..9a5253cb3d 100644 --- a/addons/switchunits/functions/fnc_switchBack.sqf +++ b/addons/switchunits/functions/fnc_switchBack.sqf @@ -10,26 +10,20 @@ * None * * Example: - * [_origPlayer, _respPlayer] call FUNC(switchBack) + * [_originalPlayerUnit, _currentUnit] call FUNC(switchBack) * * Public: Yes */ #include "script_component.hpp" -private ["_origPlayerUnit"]; +PARMAS_1(_originalPlayerUnit); -_origPlayerUnit = _this select 0; -[_origPlayerUnit] joinSilent GVAR(OriginalGroup); +[_originalPlayerUnit] joinSilent GVAR(OriginalGroup); DFUNC(pfhSwitchBack) = { - - private ["_args", "_originalPlayerUnit", "_currentUnit"]; - - _args = _this select 0; - - _originalPlayerUnit = _args select 0; - _currentUnit = _args select 1; + PARAMS_2(_args,_pfID); + EXPLODE_2_PVT(_args,_originalPlayerUnit,_currentUnit); if (local _originalPlayerUnit) exitWith { selectPlayer _originalPlayerUnit; diff --git a/addons/switchunits/functions/fnc_switchUnit.sqf b/addons/switchunits/functions/fnc_switchUnit.sqf index abd053ffae..b1879b0999 100644 --- a/addons/switchunits/functions/fnc_switchUnit.sqf +++ b/addons/switchunits/functions/fnc_switchUnit.sqf @@ -18,9 +18,9 @@ #include "script_component.hpp" -private ["_unit", "_allNearestPlayers", "_oldUnit", "_leave"]; +private ["_nearestEnemyPlayers", "_allNearestPlayers", "_oldUnit", "_leave"]; -_unit = _this select 1; +PARAMS_1(_unit); // don't switch to original player units if (!([_unit] call FUNC(isValidAi))) exitWith {}; diff --git a/addons/vehiclelock/functions/fnc_moduleSync.sqf b/addons/vehiclelock/functions/fnc_moduleSync.sqf index feed42e3ab..ede20e3196 100644 --- a/addons/vehiclelock/functions/fnc_moduleSync.sqf +++ b/addons/vehiclelock/functions/fnc_moduleSync.sqf @@ -37,6 +37,7 @@ if (!isServer) exitWith {}; }; { + private "_unit"; _unit = _x; if (_unit isKindOf "CAManBase") then { { diff --git a/addons/vehiclelock/functions/fnc_onOpenInventory.sqf b/addons/vehiclelock/functions/fnc_onOpenInventory.sqf index 55fee28cc6..65c3068dce 100644 --- a/addons/vehiclelock/functions/fnc_onOpenInventory.sqf +++ b/addons/vehiclelock/functions/fnc_onOpenInventory.sqf @@ -21,6 +21,7 @@ PARAMS_2(_unit,_container); //Only check for player: if (_unit != ace_player) exitWith {false}; +private "_handeled"; _handeled = false; if (GVAR(LockVehicleInventory) && //if setting not enabled diff --git a/addons/weaponselect/XEH_preInit.sqf b/addons/weaponselect/XEH_preInit.sqf index 790dfe7a99..4c5216c2f6 100644 --- a/addons/weaponselect/XEH_preInit.sqf +++ b/addons/weaponselect/XEH_preInit.sqf @@ -26,6 +26,7 @@ GVAR(CurrentGrenadeMuzzleOther) = ""; // Collect frag and other muzzles separately with uiNamespace do { + private ["_magazines", "_magazine", "_ammo", "_explosive"]; if (isNil QGVAR(FragMuzzles)) then { GVAR(FragMuzzles) = []; GVAR(NonFragMuzzles) = []; diff --git a/addons/weaponselect/functions/fnc_countMagazinesForGrenadeMuzzle.sqf b/addons/weaponselect/functions/fnc_countMagazinesForGrenadeMuzzle.sqf index f73f2444c4..f45ed0ea57 100644 --- a/addons/weaponselect/functions/fnc_countMagazinesForGrenadeMuzzle.sqf +++ b/addons/weaponselect/functions/fnc_countMagazinesForGrenadeMuzzle.sqf @@ -12,18 +12,13 @@ */ #include "script_component.hpp" -private ["_unit", "_muzzle"]; +PARAMS_2(_unit,_muzzle); -_unit = _this select 0; -_muzzle = _this select 1; - -private ["_uniformMags", "_vestMags", "_backPackMags"]; +private ["_uniformMags", "_vestMags", "_backpackMags", "_numberOfMagazines", "_magazineClasses", "_firstMagazine"]; _uniformMags = getMagazineCargo uniformContainer _unit; _vestMags = getMagazineCargo vestContainer _unit; -_backPackMags = getMagazineCargo backpackContainer _unit; - -private ["_numberOfMagazines", "_magazineClasses", "_firstMagazine"]; +_backpackMags = getMagazineCargo backpackContainer _unit; _numberOfMagazines = 0; _magazineClasses = getArray (configFile >> "CfgWeapons" >> "Throw" >> _muzzle >> "magazines"); diff --git a/addons/weaponselect/functions/fnc_displayGrenadeTypeAndNumber.sqf b/addons/weaponselect/functions/fnc_displayGrenadeTypeAndNumber.sqf index 1922ffdbb9..d7a68e7f50 100644 --- a/addons/weaponselect/functions/fnc_displayGrenadeTypeAndNumber.sqf +++ b/addons/weaponselect/functions/fnc_displayGrenadeTypeAndNumber.sqf @@ -21,10 +21,10 @@ _numberofMagazines = _this select 1; private ["_color", "_name", "_text", "_picture"]; -_color = [[1,0,0], [1,1,1]] select (_numberOfMagazines > 0); +_color = [[1,0,0], [1,1,1]] select (_numberofMagazines > 0); _name = getText (configFile >> "CfgMagazines" >> _magazine >> "displayNameShort"); -_text = [format["%1 x%2", _name, _numberOfMagazines], _color] call EFUNC(common,stringToColoredText); +_text = [format["%1 x%2", _name, _numberofMagazines], _color] call EFUNC(common,stringToColoredText); _picture = getText (configFile >> "CfgMagazines" >> _magazine >> "picture"); [_text, _picture] call EFUNC(common,displayTextPicture); diff --git a/addons/weaponselect/functions/fnc_selectGrenadeAll.sqf b/addons/weaponselect/functions/fnc_selectGrenadeAll.sqf index 31999ad0b9..a75a11c202 100644 --- a/addons/weaponselect/functions/fnc_selectGrenadeAll.sqf +++ b/addons/weaponselect/functions/fnc_selectGrenadeAll.sqf @@ -11,41 +11,41 @@ */ #include "script_component.hpp" -private ["_unit", "_nextMuzzle"]; +private ["_text", "_nextMuzzle"]; -_unit = _this select 0; +PARAMS_1(_unit); _nextMuzzle = ["All"] call FUNC(findNextGrenadeMuzzle); if (_nextMuzzle != "") then { - private ["_magazines", "_magazine", "_count", "_return"]; - _magazines = GVAR(AllMagazines) select (GVAR(AllMuzzles) find _nextMuzzle); - reverse _magazines; + private ["_magazines", "_magazine", "_count", "_return"]; + _magazines = GVAR(AllMagazines) select (GVAR(AllMuzzles) find _nextMuzzle); + reverse _magazines; - _magazine = ""; - _count = {_return = _x in _magazines; if (_return) then {_magazine = _x}; _return} count magazines _unit; + _magazine = ""; + _count = {_return = _x in _magazines; if (_return) then {_magazine = _x}; _return} count magazines _unit; - // There is a muzzle with magazines --> cycle to it - [_unit, _nextMuzzle] call FUNC(setNextGrenadeMuzzle); + // There is a muzzle with magazines --> cycle to it + [_unit, _nextMuzzle] call FUNC(setNextGrenadeMuzzle); - [_magazine, _count] call FUNC(displayGrenadeTypeAndNumber); + [_magazine, _count] call FUNC(displayGrenadeTypeAndNumber); } else { - // There is a no muzzle with magazines --> select nothing - GVAR(CurrentGrenadeMuzzleFrag) = ""; GVAR(CurrentGrenadeMuzzleOther) = ""; + // There is a no muzzle with magazines --> select nothing + GVAR(CurrentGrenadeMuzzleFrag) = ""; GVAR(CurrentGrenadeMuzzleOther) = ""; - if (GVAR(DisplayText)) then { - _text = [localize "STR_ACE_WeaponSelect_NoGrenadesLeft", [1,0,0]] call EFUNC(common,stringToColoredText); - [composeText [lineBreak, _text]] call EFUNC(common,displayTextStructured); - }; + if (GVAR(DisplayText)) then { + _text = [localize "STR_ACE_WeaponSelect_NoGrenadesLeft", [1,0,0]] call EFUNC(common,stringToColoredText); + [composeText [lineBreak, _text]] call EFUNC(common,displayTextStructured); + }; }; if (_nextMuzzle in GVAR(FragMuzzles)) then { - GVAR(CurrentGrenadeMuzzleFrag) = _nextMuzzle; - GVAR(CurrentGrenadeMuzzleIsFrag) = true; + GVAR(CurrentGrenadeMuzzleFrag) = _nextMuzzle; + GVAR(CurrentGrenadeMuzzleIsFrag) = true; } else { - GVAR(CurrentGrenadeMuzzleOther) = _nextMuzzle; - GVAR(CurrentGrenadeMuzzleIsFrag) = false; + GVAR(CurrentGrenadeMuzzleOther) = _nextMuzzle; + GVAR(CurrentGrenadeMuzzleIsFrag) = false; }; diff --git a/addons/weaponselect/functions/fnc_selectGrenadeFrag.sqf b/addons/weaponselect/functions/fnc_selectGrenadeFrag.sqf index 408cf0e608..0dee3e5c57 100644 --- a/addons/weaponselect/functions/fnc_selectGrenadeFrag.sqf +++ b/addons/weaponselect/functions/fnc_selectGrenadeFrag.sqf @@ -11,34 +11,34 @@ */ #include "script_component.hpp" -private ["_unit", "_nextMuzzle"]; +private ["_text", "_nextMuzzle"]; -_unit = _this select 0; +PARAMS_1(_unit); _nextMuzzle = ["Frag"] call FUNC(findNextGrenadeMuzzle); if (_nextMuzzle != "") then { - GVAR(CurrentGrenadeMuzzleFrag) = _nextMuzzle; + GVAR(CurrentGrenadeMuzzleFrag) = _nextMuzzle; - private ["_magazines", "_magazine", "_count", "_return"]; - _magazines = GVAR(FragMagazines) select (GVAR(FragMuzzles) find _nextMuzzle); - reverse _magazines; + private ["_magazines", "_magazine", "_count", "_return"]; + _magazines = GVAR(FragMagazines) select (GVAR(FragMuzzles) find _nextMuzzle); + reverse _magazines; - _magazine = ""; - _count = {_return = _x in _magazines; if (_return) then {_magazine = _x}; _return} count magazines _unit; + _magazine = ""; + _count = {_return = _x in _magazines; if (_return) then {_magazine = _x}; _return} count magazines _unit; - // There is a muzzle with magazines --> cycle to it - [_unit, _nextMuzzle] call FUNC(setNextGrenadeMuzzle); + // There is a muzzle with magazines --> cycle to it + [_unit, _nextMuzzle] call FUNC(setNextGrenadeMuzzle); - [_magazine, _count] call FUNC(displayGrenadeTypeAndNumber); + [_magazine, _count] call FUNC(displayGrenadeTypeAndNumber); } else { - // There is a no muzzle with magazines --> select nothing - GVAR(CurrentGrenadeMuzzleFrag) = ""; - if (GVAR(DisplayText)) then { - _text = [localize "STR_ACE_WeaponSelect_NoFragsLeft", [1,0,0]] call EFUNC(common,stringToColoredText); - [composeText [lineBreak, _text]] call EFUNC(common,displayTextStructured); - }; + // There is a no muzzle with magazines --> select nothing + GVAR(CurrentGrenadeMuzzleFrag) = ""; + if (GVAR(DisplayText)) then { + _text = [localize "STR_ACE_WeaponSelect_NoFragsLeft", [1,0,0]] call EFUNC(common,stringToColoredText); + [composeText [lineBreak, _text]] call EFUNC(common,displayTextStructured); + }; }; GVAR(CurrentGrenadeMuzzleIsFrag) = true; diff --git a/addons/weaponselect/functions/fnc_selectGrenadeOther.sqf b/addons/weaponselect/functions/fnc_selectGrenadeOther.sqf index c732010a2b..4ab65e5bf3 100644 --- a/addons/weaponselect/functions/fnc_selectGrenadeOther.sqf +++ b/addons/weaponselect/functions/fnc_selectGrenadeOther.sqf @@ -11,34 +11,34 @@ */ #include "script_component.hpp" -private ["_unit", "_nextMuzzle"]; +private ["_nextMuzzle", "_text"]; -_unit = _this select 0; +PARAMS_1(_unit); _nextMuzzle = ["NonFrag"] call FUNC(findNextGrenadeMuzzle); if (_nextMuzzle != "") then { - GVAR(CurrentGrenadeMuzzleOther) = _nextMuzzle; + GVAR(CurrentGrenadeMuzzleOther) = _nextMuzzle; - private ["_magazines", "_magazine", "_count", "_return"]; - _magazines = GVAR(NonFragMagazines) select (GVAR(NonFragMuzzles) find _nextMuzzle); - reverse _magazines; + private ["_magazines", "_magazine", "_count", "_return"]; + _magazines = GVAR(NonFragMagazines) select (GVAR(NonFragMuzzles) find _nextMuzzle); + reverse _magazines; - _magazine = ""; - _count = {_return = _x in _magazines; if (_return) then {_magazine = _x}; _return} count magazines _unit; + _magazine = ""; + _count = {_return = _x in _magazines; if (_return) then {_magazine = _x}; _return} count magazines _unit; - // There is a muzzle with magazines --> cycle to it - [_unit, _nextMuzzle] call FUNC(setNextGrenadeMuzzle); + // There is a muzzle with magazines --> cycle to it + [_unit, _nextMuzzle] call FUNC(setNextGrenadeMuzzle); - [_magazine, _count] call FUNC(displayGrenadeTypeAndNumber); + [_magazine, _count] call FUNC(displayGrenadeTypeAndNumber); } else { - // There is a no muzzle with magazines --> select nothing - GVAR(CurrentGrenadeMuzzleOther) = ""; - if (GVAR(DisplayText)) then { - _text = [localize "STR_ACE_WeaponSelect_NoMiscGrenadeLeft", [1,0,0]] call EFUNC(common,stringToColoredText); - [composeText [lineBreak, _text]] call EFUNC(common,displayTextStructured); - }; + // There is a no muzzle with magazines --> select nothing + GVAR(CurrentGrenadeMuzzleOther) = ""; + if (GVAR(DisplayText)) then { + _text = [localize "STR_ACE_WeaponSelect_NoMiscGrenadeLeft", [1,0,0]] call EFUNC(common,stringToColoredText); + [composeText [lineBreak, _text]] call EFUNC(common,displayTextStructured); + }; }; GVAR(CurrentGrenadeMuzzleIsFrag) = false; diff --git a/addons/weaponselect/functions/fnc_setNextGrenadeMuzzle.sqf b/addons/weaponselect/functions/fnc_setNextGrenadeMuzzle.sqf index ced1fa87b3..81d1a59ed1 100644 --- a/addons/weaponselect/functions/fnc_setNextGrenadeMuzzle.sqf +++ b/addons/weaponselect/functions/fnc_setNextGrenadeMuzzle.sqf @@ -17,19 +17,15 @@ private ["_unit", "_muzzle"]; _unit = _this select 0; _muzzle = _this select 1; -private ["_uniformMags", "_vestMags", "_backPackMags"]; +private ["_uniformMags", "_vestMags", "_backpackMags", "_i", "_uniformMagsToRemove", "_vestMagsToRemove", "_backpackMagsToRemove", "_firstMagazine", "_throwMuzzleNames"]; _uniformMags = getMagazineCargo uniformContainer _unit; _vestMags = getMagazineCargo vestContainer _unit; -_backPackMags = getMagazineCargo backpackContainer _unit; - -private ["_uniformMagsToRemove", "_vestMagsToRemove", "_backPackMagsToRemove"]; +_backpackMags = getMagazineCargo backpackContainer _unit; _uniformMagsToRemove = []; _vestMagsToRemove = []; -_backPackMagsToRemove = []; - -private ["_firstMagazine", "_throwMuzzleNames"]; +_backpackMagsToRemove = []; _firstMagazine = ""; _throwMuzzleNames = getArray (configfile >> "CfgWeapons" >> "Throw" >> "muzzles"); @@ -99,7 +95,7 @@ _throwMuzzleNames = getArray (configfile >> "CfgWeapons" >> "Throw" >> "muzzles" for [{_i = 0}, {_i < (_x select 1)}, {_i = _i + 1}] do { _unit removeItem (_x select 0); }; -} forEach _backPackMagsToRemove; +} forEach _backpackMagsToRemove; // Readd magazines { @@ -118,4 +114,4 @@ _throwMuzzleNames = getArray (configfile >> "CfgWeapons" >> "Throw" >> "muzzles" for [{_i = 0}, {_i < (_x select 1)}, {_i = _i + 1}] do { _unit addItemToBackpack (_x select 0); }; -} forEach _backPackMagsToRemove; +} forEach _backpackMagsToRemove; diff --git a/tools/search_privates.py b/tools/search_privates.py index 404c56f4db..56626c5bfd 100644 --- a/tools/search_privates.py +++ b/tools/search_privates.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 +#!/usr/bin/env python3 import fnmatch import os @@ -21,7 +21,7 @@ def get_private_declare(content): priv_split = sorted(set(priv_split)) priv_declared += priv_split; - srch = re.compile('PARAMS_[0-9].*|EXPLODE_[0-9]_PVT.*|DEFAULT_PARAM.*|KEY_PARAM.*') + srch = re.compile('PARAMS_[0-9].*|EXPLODE_[0-9]_PVT.*|DEFAULT_PARAM.*|KEY_PARAM.*|IGNORE_PRIVATE_WARNING.*') priv_srch_declared = srch.findall(content) priv_srch_declared = sorted(set(priv_srch_declared)) @@ -37,7 +37,7 @@ def get_private_declare(content): return priv_declared def check_privates(filepath): - + bad_count_file = 0 def pushClosing(t): closingStack.append(closing.expr) closing << Literal( closingFor[t[0]] ) @@ -81,6 +81,9 @@ def check_privates(filepath): print (filepath) for bad_priv in missing: print ('\t' + bad_priv) + bad_count_file = bad_count_file + 1 + + return bad_count_file def main(): @@ -89,6 +92,7 @@ def main(): print("#########################") sqf_list = [] + bad_count = 0 parser = argparse.ArgumentParser() parser.add_argument('-m','--module', help='only search specified module addon folder', required=False, default=".") @@ -99,7 +103,10 @@ def main(): sqf_list.append(os.path.join(root, filename)) for filename in sqf_list: - check_privates(filename) + bad_count = bad_count + check_privates(filename) + + + print ("Bad Count {0}".format(bad_count)) if __name__ == "__main__": main() From d1a09ae7fc1429fe5d69d5d797110395b3aa51ea Mon Sep 17 00:00:00 2001 From: Glowbal <thomasskooi@live.nl> Date: Fri, 17 Apr 2015 23:15:41 +0200 Subject: [PATCH 109/257] fixed vehicle crashes for adv --- addons/medical/functions/fnc_handleDamage.sqf | 6 ++++++ addons/medical/functions/fnc_handleDamage_advanced.sqf | 2 ++ addons/medical/functions/fnc_handleDamage_caching.sqf | 2 +- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/addons/medical/functions/fnc_handleDamage.sqf b/addons/medical/functions/fnc_handleDamage.sqf index 1632a8f55b..c13818bbcd 100644 --- a/addons/medical/functions/fnc_handleDamage.sqf +++ b/addons/medical/functions/fnc_handleDamage.sqf @@ -57,6 +57,12 @@ if (GVAR(level) >= 2) then { _minLethalDamage = GVAR(minLethalDamages) select _typeIndex; }; + if (vehicle _unit != _unit && {!(vehicle _unit isKindOf "StaticWeapon")} && {isNull _source} && {_projectile == ""} && {_selection == ""}) then { + if (GVAR(enableVehicleCrashes)) then { + _selection = GVAR(SELECTIONS) select (floor(random(count GVAR(SELECTIONS)))); + }; + }; + if ((_minLethalDamage <= _newDamage) && {[_unit, [_selection] call FUNC(selectionNameToNumber), _newDamage] call FUNC(determineIfFatal)} && {_selection in ["", "head", "body"]}) then { if ([_unit] call FUNC(setDead)) then { _damageReturn = 1; diff --git a/addons/medical/functions/fnc_handleDamage_advanced.sqf b/addons/medical/functions/fnc_handleDamage_advanced.sqf index ba0eb8af24..8bd0267d3f 100644 --- a/addons/medical/functions/fnc_handleDamage_advanced.sqf +++ b/addons/medical/functions/fnc_handleDamage_advanced.sqf @@ -33,10 +33,12 @@ if (isNull _sourceOfDamage && {_typeOfProjectile == ""} && {vehicle _unit == _un }; _typeOfDamage = [_typeOfProjectile] call FUNC(getTypeOfDamage); _part = [_selectionName] call FUNC(selectionNameToNumber); +if (_part < 0) exitwith {}; _hitPoints = ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"]; // Sorting out the damage _damageBodyParts = _unit getvariable [QGVAR(bodyPartStatus), [0,0,0,0,0,0]]; + _damageBodyParts set [_part, (_damageBodyParts select _part) + _newDamage]; _unit setvariable [QGVAR(bodyPartStatus), _damageBodyParts, true]; diff --git a/addons/medical/functions/fnc_handleDamage_caching.sqf b/addons/medical/functions/fnc_handleDamage_caching.sqf index 98b2373c74..95d750843d 100644 --- a/addons/medical/functions/fnc_handleDamage_caching.sqf +++ b/addons/medical/functions/fnc_handleDamage_caching.sqf @@ -38,7 +38,7 @@ if (_selectionName in _hitSelections) then { // Check for vehicle crash if (vehicle _unit != _unit && {!(vehicle _unit isKindOf "StaticWeapon")} && {isNull _source} && {_projectile == ""} && {_selectionName == ""}) then { - if (missionNamespace getvariable [QGVAR(allowVehicleCrashDamage), true]) then { + if (GVAR(enableVehicleCrashes)) then { _selectionName = _hitSelections select (floor(random(count _hitSelections))); _projectile = "vehiclecrash"; }; From 25d8c6c93e0670fba02cb58d0507925cb40fa405 Mon Sep 17 00:00:00 2001 From: commy2 <commy-2@gmx.de> Date: Fri, 17 Apr 2015 23:24:43 +0200 Subject: [PATCH 110/257] function to show error message box --- addons/common/XEH_preInit.sqf | 1 + addons/common/functions/fnc_errorMessage.sqf | 144 +++++++++++++++++++ 2 files changed, 145 insertions(+) create mode 100644 addons/common/functions/fnc_errorMessage.sqf diff --git a/addons/common/XEH_preInit.sqf b/addons/common/XEH_preInit.sqf index b5382d0b5e..c484fd985e 100644 --- a/addons/common/XEH_preInit.sqf +++ b/addons/common/XEH_preInit.sqf @@ -42,6 +42,7 @@ PREP(doAnimation); PREP(dropBackpack); PREP(endRadioTransmission); PREP(eraseCache); +PREP(errorMessage); PREP(execNextFrame); PREP(execPersistentFnc); PREP(execRemoteFnc); diff --git a/addons/common/functions/fnc_errorMessage.sqf b/addons/common/functions/fnc_errorMessage.sqf new file mode 100644 index 0000000000..46f2d2c9d4 --- /dev/null +++ b/addons/common/functions/fnc_errorMessage.sqf @@ -0,0 +1,144 @@ +/* + * Author: commy2, based on BIS_fnc_errorMsg and BIS_fnc_guiMessage by Karel Moricky (BI) + * Stops simulation and opens a textbox with error message. + * + * Arguments: + * 0: Error name <STRING> + * + * Return Value: + * None + * + * Public: No + */ +#include "script_component.hpp" + +disableSerialization; +endLoadingScreen; + +private ["_textHeader", "_textMessage", "_onOK", "_onCancel"]; + +_textHeader = _this select 0; +_textMessage = _this select 1; +_onOK = ARR_SELECT(_this,2,{}); +_onCancel = ARR_SELECT(_this,3,{}); + +if (typeName _textMessage == "STRING") then { + _textMessage = parseText _textMessage; +}; + +(call BIS_fnc_displayMission) createDisplay "RscDisplayCommonMessagePause"; + +private ["_display", "_ctrlRscMessageBox", "_ctrlBcgCommonTop", "_ctrlBcgCommon", "_ctrlText", "_ctrlBackgroundButtonOK", "_ctrlBackgroundButtonMiddle", "_ctrlBackgroundButtonCancel", "_ctrlButtonOK", "_ctrlButtonCancel"]; + +_display = uiNamespace getVariable "RscDisplayCommonMessage_display"; +_ctrlRscMessageBox = _display displayCtrl 2351; +_ctrlBcgCommonTop = _display displayCtrl 235100; +_ctrlBcgCommon = _display displayCtrl 235101; +_ctrlText = _display displayCtrl 235102; +_ctrlBackgroundButtonOK = _display displayCtrl 235103; +_ctrlBackgroundButtonMiddle = _display displayCtrl 235104; +_ctrlBackgroundButtonCancel = _display displayCtrl 235105; +_ctrlButtonOK = _display displayCtrl 235106; +_ctrlButtonCancel = _display displayCtrl 235107; + +_ctrlBcgCommonTop ctrlSetText _textHeader; + +private ["_ctrlButtonOKPos", "_ctrlBcgCommonPos", "_bottomSpaceY", "_ctrlTextPos", "_marginX", "_marginY"]; + +_ctrlButtonOKPos = ctrlPosition _ctrlButtonOK; +_ctrlBcgCommonPos = ctrlPosition _ctrlBcgCommon; +_bottomSpaceY = (_ctrlButtonOKPos select 1) - ((_ctrlBcgCommonPos select 1) + (_ctrlBcgCommonPos select 3)); + +_ctrlTextPos = ctrlPosition _ctrlText; +_marginX = (_ctrlTextPos select 0) - (_ctrlBcgCommonPos select 0); +_marginY = (_ctrlTextPos select 1) - (_ctrlBcgCommonPos select 1); + +private ["_ctrlTextPosH", "_bottomPosY"]; + +_ctrlText ctrlSetStructuredText _textMessage; +_ctrlTextPosH = ctrlTextHeight _ctrlText; + +_ctrlBcgCommon ctrlSetPosition [ + _ctrlBcgCommonPos select 0, + _ctrlBcgCommonPos select 1, + _ctrlBcgCommonPos select 2, + _ctrlTextPosH + _marginY * 2 +]; +_ctrlBcgCommon ctrlCommit 0; + +_ctrlText ctrlSetPosition [ + (_ctrlBcgCommonPos select 0) + _marginX, + (_ctrlBcgCommonPos select 1) + _marginY, + (_ctrlBcgCommonPos select 2) - _marginX * 2, + _ctrlTextPosH +]; +_ctrlText ctrlCommit 0; + +_bottomPosY = (_ctrlBcgCommonPos select 1) + _ctrlTextPosH + (_marginY * 2) + _bottomSpaceY; + +{ + private "_xPos"; + _xPos = ctrlPosition _x; + + _xPos set [1, _bottomPosY]; + _x ctrlSetPosition _xPos; + _x ctrlCommit 0; +} foreach [ + _ctrlBackgroundButtonOK, + _ctrlBackgroundButtonMiddle, + _ctrlBackgroundButtonCancel, + _ctrlButtonOK, + _ctrlButtonCancel +]; + +private ["_ctrlRscMessageBoxPos", "_ctrlRscMessageBoxPosH"]; + +_ctrlRscMessageBoxPos = ctrlPosition _ctrlRscMessageBox; +_ctrlRscMessageBoxPosH = _bottomPosY + (_ctrlButtonOKPos select 3); + +_ctrlRscMessageBox ctrlSetPosition [ + 0.5 - (_ctrlBcgCommonPos select 2) / 2, + 0.5 - _ctrlRscMessageBoxPosH / 2, + (_ctrlBcgCommonPos select 2) + 0.5, + _ctrlRscMessageBoxPosH +]; + +_ctrlRscMessageBox ctrlEnable true; +_ctrlRscMessageBox ctrlCommit 0; + +if (_onOK isEqualTo {}) then { + _ctrlButtonOK ctrlEnable false; + _ctrlButtonOK ctrlSetFade 0; + _ctrlButtonOK ctrlSetText ""; + _ctrlButtonOK ctrlCommit 0; +} else { + _ctrlButtonOK ctrlEnable true; + _ctrlButtonOK ctrlSetFade 0; + _ctrlButtonOK ctrlSetText localize "STR_DISP_OK"; + _ctrlButtonOK ctrlCommit 0; + + ctrlSetFocus _ctrlButtonOK; +}; + +if (_onCancel isEqualTo {}) then { + _ctrlButtonCancel ctrlEnable false; + _ctrlButtonCancel ctrlSetFade 0; + _ctrlButtonCancel ctrlSetText ""; + _ctrlButtonCancel ctrlCommit 0; +} else { + _ctrlButtonCancel ctrlEnable true; + _ctrlButtonCancel ctrlSetFade 0; + _ctrlButtonCancel ctrlSetText localize "STR_DISP_CANCEL"; + _ctrlButtonCancel ctrlCommit 0; + + ctrlSetFocus _ctrlButtonCancel; +}; + +_ctrlButtonOK ctrlAddEventHandler ["buttonClick", {(ctrlParent (_this select 0)) closeDisplay 1; true}]; +_ctrlButtonCancel ctrlAddEventHandler ["buttonClick", {(ctrlParent (_this select 0)) closeDisplay 2; true}]; + +GVAR(errorOnOK) = _onOK; +GVAR(errorOnCancel) = _onCancel; + +_display displayAddEventHandler ["unload", {call ([{}, GVAR(errorOnOK), GVAR(errorOnCancel)] select (_this select 1))}]; +_display displayAddEventHandler ["keyDown", {_this select 1 == 1}]; From dce344c85ffaf93a501d58e3133468182218789e Mon Sep 17 00:00:00 2001 From: PabstMirror <elephantisaterriblemascot@gmail.com> Date: Fri, 17 Apr 2015 16:51:27 -0500 Subject: [PATCH 111/257] Ignore Case --- .../functions/fnc_teleportToRallypoint.sqf | 40 +++++++++---------- .../switchunits/functions/fnc_switchBack.sqf | 2 +- tools/search_privates.py | 4 +- 3 files changed, 22 insertions(+), 24 deletions(-) diff --git a/addons/respawn/functions/fnc_teleportToRallypoint.sqf b/addons/respawn/functions/fnc_teleportToRallypoint.sqf index 82a1d68e05..dc3cc16b92 100644 --- a/addons/respawn/functions/fnc_teleportToRallypoint.sqf +++ b/addons/respawn/functions/fnc_teleportToRallypoint.sqf @@ -1,31 +1,29 @@ /* - Name: ACE_Respawn_fnc_teleportToRallypoint - - Author(s): - commy2 - - Description: - teleports a unit to a rallypoint - - Parameters: - 0: OBJECT - unit - 1: OBJECT - side - 2: BOOLEAN - teleport to base - - Returns: - VOID -*/ - + * Author: commy2 + * teleports a unit to a rallypoint + * + * Arguments: + * 0: unit <OBJECT> + * 1: side? <OBJECT> + * 2: teleport to base <BOOLEAN> + * + * Return Value: + * Nothing + * + * Example: + * [,,] call ACE_Respawn_fnc_teleportToRallypoint; + * + * Public: No + */ #include "script_component.hpp" -private ["_unit", "_side", "_rallypoint", "_toBase"]; +PARAMS_3(_unit,_side,_rallypoint); -_unit = _this select 0; -_side = _this select 1; -_rallypoint = _this select 2; +private ["_toBase"]; // rallypoint names are defined in CfgVehicles.hpp +//IGNORE_PRIVATE_WARNING("_Base") _toBase = _rallypoint find "_Base" != -1; _rallypoint = missionNamespace getVariable [_rallypoint, objNull], diff --git a/addons/switchunits/functions/fnc_switchBack.sqf b/addons/switchunits/functions/fnc_switchBack.sqf index 9a5253cb3d..69be77dd8b 100644 --- a/addons/switchunits/functions/fnc_switchBack.sqf +++ b/addons/switchunits/functions/fnc_switchBack.sqf @@ -17,7 +17,7 @@ #include "script_component.hpp" -PARMAS_1(_originalPlayerUnit); +PARAMS_1(_originalPlayerUnit); [_originalPlayerUnit] joinSilent GVAR(OriginalGroup); diff --git a/tools/search_privates.py b/tools/search_privates.py index 56626c5bfd..6e1430a8ca 100644 --- a/tools/search_privates.py +++ b/tools/search_privates.py @@ -73,8 +73,8 @@ def check_privates(filepath): missing = [] for s in priv_use: - if s not in priv_declared: - if s not in missing: + if s.lower() not in map(str.lower,priv_declared): + if s.lower() not in map(str.lower,missing): missing.append(s) if len(missing) > 0: From 314b0d23d68803ab66e860d0ebfa0a3e22a7bd15 Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Sat, 18 Apr 2015 00:11:53 +0200 Subject: [PATCH 112/257] ATragMX Feature Expansion: *Added Gun and Ammo Data Screen *Added Atomospheric and Environmental Data Screen *Added Target Data Screen *Added support for coriolis- and spin drift *Added a second option (AT) to enter atmospheric data *Target data is now saved/restored in/from the profileNamespace *Atmosphere data is now saved/restored in/from the profileNamespace *Selected gun profile is now saved/restored in/from the profileNamespace *Fixed several bugs in the dual-/imperial unit systems *Minor bug fixes in the target range assist screen *Minor bug fix in the target speed assist screen --- addons/atragmx/RscTitles.hpp | 318 ++++++++++++++++-- addons/atragmx/XEH_postInit.sqf | 47 +-- addons/atragmx/XEH_preInit.sqf | 17 + .../functions/fnc_calculate_range_card.sqf | 51 ++- .../fnc_calculate_scope_base_angle.sqf | 2 +- .../functions/fnc_calculate_solution.sqf | 66 +++- .../fnc_calculate_target_range_assist.sqf | 2 +- .../fnc_calculate_target_solution.sqf | 57 +++- .../fnc_calculate_target_speed_assist.sqf | 21 +- addons/atragmx/functions/fnc_change_gun.sqf | 19 +- .../functions/fnc_change_target_slot.sqf | 2 +- .../atragmx/functions/fnc_create_dialog.sqf | 3 + .../atragmx/functions/fnc_cycle_gun_list.sqf | 18 + .../functions/fnc_cycle_image_size_units.sqf | 19 ++ .../functions/fnc_cycle_num_ticks_units.sqf | 20 ++ .../functions/fnc_cycle_target_size_units.sqf | 19 ++ addons/atragmx/functions/fnc_init.sqf | 15 +- addons/atragmx/functions/fnc_parse_input.sqf | 80 +++-- .../functions/fnc_restore_atmo_default.sqf | 25 ++ .../functions/fnc_restore_user_data.sqf | 36 ++ .../functions/fnc_show_atmo_env_data.sqf | 25 ++ .../functions/fnc_show_gun_ammo_data.sqf | 24 ++ .../atragmx/functions/fnc_show_main_page.sqf | 10 +- .../functions/fnc_show_target_data.sqf | 24 ++ .../fnc_show_target_range_assist.sqf | 6 +- .../fnc_show_target_speed_assist.sqf | 12 +- .../atragmx/functions/fnc_store_user_data.sqf | 36 ++ .../functions/fnc_toggle_atmo_env_data.sqf | 28 ++ .../functions/fnc_toggle_gun_ammo_data.sqf | 29 ++ .../atragmx/functions/fnc_toggle_gun_list.sqf | 12 +- .../functions/fnc_toggle_range_card.sqf | 6 +- .../functions/fnc_toggle_range_card_setup.sqf | 13 +- .../functions/fnc_toggle_target_data.sqf | 28 ++ .../fnc_toggle_target_range_assist.sqf | 16 +- .../fnc_toggle_target_speed_assist.sqf | 15 +- .../functions/fnc_update_atmo_env_data.sqf | 45 +++ .../functions/fnc_update_atmo_selection.sqf | 31 ++ .../functions/fnc_update_atmosphere.sqf | 15 +- addons/atragmx/functions/fnc_update_gun.sqf | 36 +- .../functions/fnc_update_gun_ammo_data.sqf | 74 ++++ .../functions/fnc_update_range_card.sqf | 46 +-- .../atragmx/functions/fnc_update_result.sqf | 14 +- .../atragmx/functions/fnc_update_target.sqf | 25 +- .../functions/fnc_update_target_data.sqf | 40 +++ .../functions/fnc_update_unit_selection.sqf | 4 + .../functions/fnc_update_zero_range.sqf | 15 +- 46 files changed, 1174 insertions(+), 292 deletions(-) create mode 100644 addons/atragmx/functions/fnc_cycle_gun_list.sqf create mode 100644 addons/atragmx/functions/fnc_cycle_image_size_units.sqf create mode 100644 addons/atragmx/functions/fnc_cycle_num_ticks_units.sqf create mode 100644 addons/atragmx/functions/fnc_cycle_target_size_units.sqf create mode 100644 addons/atragmx/functions/fnc_restore_atmo_default.sqf create mode 100644 addons/atragmx/functions/fnc_restore_user_data.sqf create mode 100644 addons/atragmx/functions/fnc_show_atmo_env_data.sqf create mode 100644 addons/atragmx/functions/fnc_show_gun_ammo_data.sqf create mode 100644 addons/atragmx/functions/fnc_show_target_data.sqf create mode 100644 addons/atragmx/functions/fnc_store_user_data.sqf create mode 100644 addons/atragmx/functions/fnc_toggle_atmo_env_data.sqf create mode 100644 addons/atragmx/functions/fnc_toggle_gun_ammo_data.sqf create mode 100644 addons/atragmx/functions/fnc_toggle_target_data.sqf create mode 100644 addons/atragmx/functions/fnc_update_atmo_env_data.sqf create mode 100644 addons/atragmx/functions/fnc_update_atmo_selection.sqf create mode 100644 addons/atragmx/functions/fnc_update_gun_ammo_data.sqf create mode 100644 addons/atragmx/functions/fnc_update_target_data.sqf diff --git a/addons/atragmx/RscTitles.hpp b/addons/atragmx/RscTitles.hpp index b60ff03fdc..592374ddad 100644 --- a/addons/atragmx/RscTitles.hpp +++ b/addons/atragmx/RscTitles.hpp @@ -230,12 +230,12 @@ class ATragMX_Display { w=0.03; h=0.03; colorBackground[]={0,0,0,0.0}; - action=QUOTE((GVAR(currentGun) + (count GVAR(gunList)) - 1) % (count GVAR(gunList)) call FUNC(change_gun)); + action=QUOTE(-1 call FUNC(cycle_gun_list)); }; class BOTTOM: TOP { idc=-1; y=0.265*safezoneH+safezoneY+0.955; - action=QUOTE((GVAR(currentGun) + (count GVAR(gunList)) + 1) % (count GVAR(gunList)) call FUNC(change_gun)); + action=QUOTE(+1 call FUNC(cycle_gun_list)); }; class LEFT: ATragMX_RscButton { idc=-1; @@ -316,6 +316,7 @@ class ATragMX_Display { colorBackground[]={0.15,0.21,0.23,0.3}; colorFocused[]={0.15,0.21,0.23,0.2}; text="Gun"; + action=QUOTE(call FUNC(toggle_gun_ammo_data)); }; class TEXT_BORE_HEIGHT: TEXT_GUN_PROFILE { idc=10; @@ -323,12 +324,12 @@ class ATragMX_Display { y=0.265*safezoneH+safezoneY+0.285; text="BH"; }; - class TEXT_BORE_HEIGHT_INPUT: ATragMX_RscEdit { + class TEXT_BORE_HEIGHT_OUTPUT: TEXT_BORE_HEIGHT { idc=100; + style=ST_RIGHT; w=0.058; x=0.550*safezoneW+safezoneX+0.145; y=0.265*safezoneH+safezoneY+0.285; - onKeyUp=QUOTE(if (_this select 1 == 28) then {call FUNC(calculate_target_solution)}); }; class TEXT_BULLET_MASS: TEXT_BORE_HEIGHT { idc=11; @@ -336,7 +337,7 @@ class ATragMX_Display { y=0.265*safezoneH+safezoneY+0.320; text="BW"; }; - class TEXT_BULLET_MASS_INPUT: TEXT_BORE_HEIGHT_INPUT { + class TEXT_BULLET_MASS_OUTPUT: TEXT_BORE_HEIGHT_OUTPUT { idc=110; y=0.265*safezoneH+safezoneY+0.320; }; @@ -345,7 +346,7 @@ class ATragMX_Display { y=0.265*safezoneH+safezoneY+0.355; text="C1"; }; - class TEXT_AIR_FRICTION_INPUT: TEXT_BORE_HEIGHT_INPUT { + class TEXT_AIR_FRICTION_OUTPUT: TEXT_BORE_HEIGHT_OUTPUT { idc=120; y=0.265*safezoneH+safezoneY+0.355; }; @@ -359,7 +360,7 @@ class ATragMX_Display { colorFocused[]={0.15,0.21,0.23,0.2}; text="MV"; }; - class TEXT_MUZZLE_VELOCITY_INPUT: TEXT_BORE_HEIGHT_INPUT { + class TEXT_MUZZLE_VELOCITY_OUTPUT: TEXT_BORE_HEIGHT_OUTPUT { idc=130; y=0.265*safezoneH+safezoneY+0.390; }; @@ -368,35 +369,35 @@ class ATragMX_Display { y=0.265*safezoneH+safezoneY+0.425; text="ZR"; }; - class TEXT_ZERO_RANGE_INPUT: TEXT_BORE_HEIGHT_INPUT { + class TEXT_ZERO_RANGE_OUTPUT: TEXT_BORE_HEIGHT_OUTPUT { idc=140; y=0.265*safezoneH+safezoneY+0.425; - onKeyUp=QUOTE(if (_this select 1 == 28) then {call FUNC(update_zero_range)}); }; class TEXT_ATMOSPHERE: TEXT_GUN { idc=4001; x=0.550*safezoneW+safezoneX+0.205; text="Atmsphr"; + action=QUOTE(0 call FUNC(toggle_atmo_env_data)); }; class TEXT_TEMPERATURE: TEXT_BULLET_MASS { idc=20; x=0.550*safezoneW+safezoneX+0.20; text="Tmp"; }; - class TEXT_TEMPERATURE_INPUT: ATragMX_RscEdit { + class TEXT_TEMPERATURE_OUTPUT: TEXT_TEMPERATURE { idc=200; + style=ST_RIGHT; w=0.050; x=0.550*safezoneW+safezoneX+0.245; y=0.265*safezoneH+safezoneY+0.320; text=""; - onKeyUp=QUOTE(if (_this select 1 == 28) then {call FUNC(calculate_target_solution)}); }; class TEXT_BAROMETRIC_PRESSURE: TEXT_AIR_FRICTION { idc=21; x=0.550*safezoneW+safezoneX+0.20; text="BP"; }; - class TEXT_BAROMETRIC_PRESSURE_INPUT: TEXT_TEMPERATURE_INPUT { + class TEXT_BAROMETRIC_PRESSURE_OUTPUT: TEXT_TEMPERATURE_OUTPUT { idc=210; y=0.265*safezoneH+safezoneY+0.355; }; @@ -406,10 +407,19 @@ class ATragMX_Display { y=0.265*safezoneH+safezoneY+0.390; text="RH"; }; - class TEXT_RELATIVE_HUMIDITY_INPUT: TEXT_TEMPERATURE_INPUT { + class TEXT_RELATIVE_HUMIDITY_OUTPUT: TEXT_TEMPERATURE_OUTPUT { idc=220; y=0.265*safezoneH+safezoneY+0.390; }; + class TEXT_ALTITUDE: TEXT_BORE_HEIGHT { + idc=23; + x=0.550*safezoneW+safezoneX+0.20; + text="Alt"; + }; + class TEXT_ALTITUDE_OUTPUT: TEXT_TEMPERATURE_OUTPUT { + idc=230; + y=0.265*safezoneH+safezoneY+0.285; + }; class TEXT_TARGET_A: ATragMX_RscButton { idc=500; w=0.0231; @@ -445,18 +455,18 @@ class ATragMX_Display { idc=4002; x=0.550*safezoneW+safezoneX+0.3; text="Target"; + action=QUOTE(0 call FUNC(toggle_target_data)); }; class TEXT_WIND_SPEED: TEXT_BORE_HEIGHT { idc=30; x=0.550*safezoneW+safezoneX+0.3; text="WS"; }; - class TEXT_WIND_SPEED_INPUT: ATragMX_RscEdit { + class TEXT_WIND_SPEED_OUTPUT: TEXT_BORE_HEIGHT_OUTPUT { idc=300; w=0.058; x=0.550*safezoneW+safezoneX+0.335; y=0.265*safezoneH+safezoneY+0.285; - onKeyUp=QUOTE(if (_this select 1 == 28) then {call FUNC(calculate_target_solution)}); text="0"; }; class TEXT_WIND_DIRECTION: TEXT_BULLET_MASS { @@ -464,7 +474,7 @@ class ATragMX_Display { x=0.550*safezoneW+safezoneX+0.3; text="WD"; }; - class TEXT_WIND_DIRECTION_INPUT: TEXT_WIND_SPEED_INPUT { + class TEXT_WIND_DIRECTION_OUTPUT: TEXT_WIND_SPEED_OUTPUT { idc=310; y=0.265*safezoneH+safezoneY+0.32; }; @@ -473,7 +483,7 @@ class ATragMX_Display { x=0.550*safezoneW+safezoneX+0.3; text="IA"; }; - class TEXT_INCLINATION_ANGLE_INPUT: TEXT_WIND_SPEED_INPUT { + class TEXT_INCLINATION_ANGLE_OUTPUT: TEXT_WIND_SPEED_OUTPUT { idc=320; y=0.265*safezoneH+safezoneY+0.355; }; @@ -481,9 +491,9 @@ class ATragMX_Display { idc=33; x=0.550*safezoneW+safezoneX+0.3; text="TS"; - action=QUOTE(call FUNC(toggle_target_speed_assist)); + action=QUOTE(0 call FUNC(toggle_target_speed_assist)); }; - class TEXT_TARGET_SPEED_INPUT: TEXT_WIND_SPEED_INPUT { + class TEXT_TARGET_SPEED_OUTPUT: TEXT_WIND_SPEED_OUTPUT { idc=330; y=0.265*safezoneH+safezoneY+0.39; }; @@ -493,7 +503,7 @@ class ATragMX_Display { text="TR"; action=QUOTE(0 call FUNC(toggle_target_range_assist)); }; - class TEXT_TARGET_RANGE_INPUT: TEXT_WIND_SPEED_INPUT { + class TEXT_TARGET_RANGE_INPUT: TEXT_WIND_SPEED_OUTPUT { idc=340; y=0.265*safezoneH+safezoneY+0.425; }; @@ -563,6 +573,7 @@ class ATragMX_Display { x=0.550*safezoneW+safezoneX+0.11; y=0.265*safezoneH+safezoneY+0.57; text="Lead"; + action=""; }; class TEXT_LEAD_OUTPUT: TEXT_ELEVATION_OUTPUT_ABSOLUTE { idc=420; @@ -814,13 +825,13 @@ class ATragMX_Display { w=0.07; x=0.550*safezoneW+safezoneX+0.32; text="cm"; - action=QUOTE(GVAR(rangeAssistTargetSizeUnit)=(GVAR(rangeAssistTargetSizeUnit)+1) % (count GVAR(GVAR(rangeAssistTargetSizeUnit)s)); ctrlSetText [7014, GVAR(GVAR(rangeAssistTargetSizeUnit)s) select GVAR(rangeAssistTargetSizeUnit)]); + action=QUOTE(call FUNC(cycle_target_size_units)); }; class TEXT_TARGET_RANGE_ASSIST_IMAGE_SIZE_UNIT: TEXT_TARGET_RANGE_ASSIST_TARGET_SIZE_UNIT { idc=7015; y=0.265*safezoneH+safezoneY+0.45; text="MIL"; - action=QUOTE(GVAR(rangeAssistImageSizeUnit)=(GVAR(rangeAssistImageSizeUnit)+1) % (count GVAR(rangeAssistImageSizeUnits)); ctrlSetText [7015, GVAR(rangeAssistImageSizeUnits) select GVAR(rangeAssistImageSizeUnit)]); + action=QUOTE(call FUNC(cycle_image_size_units)); }; class TEXT_TARGET_RANGE_ASSIST_ESTIMATED_RANGE_UNIT: TEXT_TARGET_RANGE_ASSIST_ESTIMATED_RANGE { idc=7016; @@ -861,22 +872,22 @@ class ATragMX_Display { class TEXT_TARGET_SPEED_ASSIST_TARGET_RANGE: TEXT_TARGET_RANGE_ASSIST_TARGET_SIZE { idc=8000; - x=0.550*safezoneW+safezoneX+0.12; + x=0.550*safezoneW+safezoneX+0.13; text="Target Range"; }; class TEXT_TARGET_SPEED_ASSIST_NUM_TICKS: TEXT_TARGET_RANGE_ASSIST_IMAGE_SIZE { idc=8001; - x=0.550*safezoneW+safezoneX+0.12; + x=0.550*safezoneW+safezoneX+0.13; text="Num Ticks"; }; class TEXT_TARGET_SPEED_ASSIST_TIME: TEXT_TARGET_RANGE_ASSIST_ANGLE { idc=8002; - x=0.550*safezoneW+safezoneX+0.12; + x=0.550*safezoneW+safezoneX+0.13; text="Time (secs)"; }; class TEXT_TARGET_SPEED_ASSIST_TARGET_ESTIMATED_SPEED: TEXT_TARGET_RANGE_ASSIST_ESTIMATED_RANGE { idc=8003; - x=0.550*safezoneW+safezoneX+0.12; + x=0.550*safezoneW+safezoneX+0.13; text="Est Speed"; }; class TEXT_TARGET_SPEED_ASSIST_TARGET_RANGE_INPUT: TEXT_TARGET_RANGE_ASSIST_TARGET_SIZE_INPUT { @@ -907,7 +918,7 @@ class ATragMX_Display { class TEXT_TARGET_SPEED_ASSIST_NUM_TICKS_UNIT: TEXT_TARGET_RANGE_ASSIST_IMAGE_SIZE_UNIT { idc=8009; text="MIL"; - action=QUOTE(GVAR(speedAssistNumTicksUnit)=(GVAR(speedAssistNumTicksUnit)+1) % (count GVAR(speedAssistNumTicksUnits)); ctrlSetText [8009, GVAR(speedAssistNumTicksUnits) select GVAR(speedAssistNumTicksUnit)]; call FUNC(calculate_target_speed_assist)); + action=QUOTE(call FUNC(cycle_num_ticks_units)); }; class TEXT_TARGET_SPEED_ASSIST_TIMER_START: TEXT_TARGET_RANGE_ASSIST_IMAGE_SIZE_UNIT { idc=8010; @@ -1046,5 +1057,258 @@ class ATragMX_Display { text="Cancel"; action=QUOTE(false call FUNC(show_add_new_gun); true call FUNC(show_gun_list)); }; + + class TEXT_GUN_AMMO_DATA_BORE_HEIGHT: TEXT_BORE_HEIGHT { + idc=12000; + w=0.22; + y=0.265*safezoneH+safezoneY+0.28; + text="Bore (cm)"; + }; + class TEXT_GUN_AMMO_DATA_BORE_HEIGHT_INPUT: ATragMX_RscEdit { + idc=120000; + w=0.06; + x=0.550*safezoneW+safezoneX+0.335; + y=0.265*safezoneH+safezoneY+0.28; + }; + class TEXT_GUN_AMMO_DATA_BULLET_MASS: TEXT_GUN_AMMO_DATA_BORE_HEIGHT { + idc=12001; + y=0.265*safezoneH+safezoneY+0.320; + text="Bullet Weight (grams)"; + }; + class TEXT_GUN_AMMO_DATA_BULLET_MASS_INPUT: TEXT_GUN_AMMO_DATA_BORE_HEIGHT_INPUT { + idc=120010; + y=0.265*safezoneH+safezoneY+0.320; + }; + class TEXT_GUN_AMMO_DATA_BULLET_DIAMETER: TEXT_GUN_AMMO_DATA_BORE_HEIGHT { + idc=12002; + y=0.265*safezoneH+safezoneY+0.360; + text="Bullet Diam (cm)"; + }; + class TEXT_GUN_AMMO_DATA_BULLET_DIAMETER_INPUT: TEXT_GUN_AMMO_DATA_BORE_HEIGHT_INPUT { + idc=120020; + y=0.265*safezoneH+safezoneY+0.360; + }; + class TEXT_GUN_AMMO_DATA_AIR_FRICTION: TEXT_GUN_AMMO_DATA_BORE_HEIGHT { + idc=12003; + y=0.265*safezoneH+safezoneY+0.400; + text="C1 Coefficient"; + }; + class TEXT_GUN_AMMO_DATA_AIR_FRICTION_INPUT: TEXT_GUN_AMMO_DATA_BORE_HEIGHT_INPUT { + idc=120030; + y=0.265*safezoneH+safezoneY+0.400; + }; + class TEXT_GUN_AMMO_DATA_RIFLE_TWIST: TEXT_GUN_AMMO_DATA_BORE_HEIGHT { + idc=12004; + y=0.265*safezoneH+safezoneY+0.440; + text="Rifle Twist (cm/trn)"; + }; + class TEXT_GUN_AMMO_DATA_RIFLE_TWIST_INPUT: TEXT_GUN_AMMO_DATA_BORE_HEIGHT_INPUT { + idc=120040; + y=0.265*safezoneH+safezoneY+0.440; + }; + class TEXT_GUN_AMMO_DATA_MUZZLE_VELOCITY: TEXT_GUN_AMMO_DATA_BORE_HEIGHT { + idc=12005; + y=0.265*safezoneH+safezoneY+0.480; + text="Muzzle Velocity (m/s)"; + }; + class TEXT_GUN_AMMO_DATA_MUZZLE_VELOCITY_INPUT: TEXT_GUN_AMMO_DATA_BORE_HEIGHT_INPUT { + idc=120050; + y=0.265*safezoneH+safezoneY+0.480; + }; + class TEXT_GUN_AMMO_DATA_ZERO_RANGE: TEXT_GUN_AMMO_DATA_BORE_HEIGHT { + idc=12006; + y=0.265*safezoneH+safezoneY+0.520; + text="Zero Range (meters)"; + }; + class TEXT_GUN_AMMO_DATA_ZERO_RANGE_INPUT: TEXT_GUN_AMMO_DATA_BORE_HEIGHT_INPUT { + idc=120060; + y=0.265*safezoneH+safezoneY+0.520; + }; + class TEXT_GUN_AMMO_DATA_DONE: TEXT_TARGET_SPEED_ASSIST_DONE { + idc=12008; + action=QUOTE(1 call FUNC(toggle_gun_ammo_data)); + }; + class TEXT_GUN_AMMO_DATA_CANCEL: TEXT_TARGET_SPEED_ASSIST_CANCEL { + idc=12009; + action=QUOTE(0 call FUNC(toggle_gun_ammo_data)); + }; + class TEXT_GUN_AMMO_DATA_PREV: TEXT_TARGET_SPEED_ASSIST_PREV { + idc=12010; + }; + class TEXT_GUN_AMMO_DATA_NEXT: TEXT_TARGET_SPEED_ASSIST_NEXT { + idc=12011; + }; + + class TEXT_ATMO_ENV_DATA_DEFAULT: TEXT_LEAD { + idc=13000; + w=0.08; + x=0.550*safezoneW+safezoneX+0.15; + y=0.265*safezoneH+safezoneY+0.320; + text="Default"; + action=QUOTE(call FUNC(restore_atmo_default)); + }; + class TEXT_ATMO_ENV_DATA_AT: TEXT_TARGET_A { + idc=13001; + w=0.04; + x=0.550*safezoneW+safezoneX+0.24; + y=0.265*safezoneH+safezoneY+0.320; + text="AT"; + action=QUOTE(GVAR(atmosphereModeTBH) = false; call FUNC(update_atmo_selection)); + }; + class TEXT_ATMO_ENV_DATA_TBH: TEXT_ATMO_ENV_DATA_AT { + idc=13002; + x=0.550*safezoneW+safezoneX+0.28; + text="TBH"; + action=QUOTE(GVAR(atmosphereModeTBH) = true; call FUNC(update_atmo_selection)); + }; + class TEXT_ATMO_ENV_DATA_ALTITUDE: TEXT_GUN_AMMO_DATA_BORE_HEIGHT { + idc=13003; + x=0.550*safezoneW+safezoneX+0.115; + y=0.265*safezoneH+safezoneY+0.400; + text="Altitude (ft)"; + }; + class TEXT_ATMO_ENV_DATA_ALTITUDE_INPUT: TEXT_GUN_AMMO_DATA_BORE_HEIGHT_INPUT { + idc=130030; + x=0.550*safezoneW+safezoneX+0.330; + y=0.265*safezoneH+safezoneY+0.400; + }; + class TEXT_ATMO_ENV_DATA_TEMPERATURE: TEXT_ATMO_ENV_DATA_ALTITUDE { + idc=13004; + y=0.265*safezoneH+safezoneY+0.440; + text="temperature (F)"; + }; + class TEXT_ATMO_ENV_DATA_TEMPERATURE_INPUT: TEXT_ATMO_ENV_DATA_ALTITUDE_INPUT { + idc=130040; + y=0.265*safezoneH+safezoneY+0.440; + }; + class TEXT_ATMO_ENV_DATA_BAROMETRIC_PRESSURE: TEXT_ATMO_ENV_DATA_ALTITUDE { + idc=13005; + y=0.265*safezoneH+safezoneY+0.480; + text="Barom Pres (in.merc.)"; + }; + class TEXT_ATMO_ENV_DATA_BAROMETRIC_PRESSURE_INPUT: TEXT_ATMO_ENV_DATA_ALTITUDE_INPUT { + idc=130050; + y=0.265*safezoneH+safezoneY+0.480; + }; + class TEXT_ATMO_ENV_DATA_RELATIVE_HUMIDITY: TEXT_ATMO_ENV_DATA_ALTITUDE { + idc=13006; + y=0.265*safezoneH+safezoneY+0.520; + text="Relative Humidity (%)"; + }; + class TEXT_ATMO_ENV_DATA_RELATIVE_HUMIDITY_INPUT: TEXT_ATMO_ENV_DATA_ALTITUDE_INPUT { + idc=130060; + y=0.265*safezoneH+safezoneY+0.520; + }; + class TEXT_ATMO_ENV_DATA_DONE: TEXT_TARGET_SPEED_ASSIST_DONE { + idc=13007; + action=QUOTE(1 call FUNC(toggle_atmo_env_data)); + }; + class TEXT_ATMO_ENV_DATA_CANCEL: TEXT_TARGET_SPEED_ASSIST_CANCEL { + idc=13008; + action=QUOTE(0 call FUNC(toggle_atmo_env_data)); + }; + class TEXT_ATMO_ENV_DATA_PREV: TEXT_TARGET_SPEED_ASSIST_PREV { + idc=13009; + }; + class TEXT_ATMO_ENV_DATA_NEXT: TEXT_TARGET_SPEED_ASSIST_NEXT { + idc=13010; + }; + + class TEXT_TARGET_DATA_LATITUDE: TEXT_BORE_HEIGHT { + idc=14000; + w=0.22; + y=0.265*safezoneH+safezoneY+0.28; + text="Latitude"; + }; + class TEXT_TARGET_DATA_LATITUDE_INPUT: ATragMX_RscEdit { + idc=140000; + w=0.06; + x=0.550*safezoneW+safezoneX+0.335; + y=0.265*safezoneH+safezoneY+0.28; + }; + class TEXT_TARGET_DATA_DIR_OF_FIRE: TEXT_TARGET_DATA_LATITUDE { + idc=14001; + y=0.265*safezoneH+safezoneY+0.320; + text="Dir of Fire (deg from N)"; + }; + class TEXT_TARGET_DATA_DIR_OF_FIRE_INPUT: TEXT_TARGET_DATA_LATITUDE_INPUT { + idc=140010; + y=0.265*safezoneH+safezoneY+0.320; + }; + class TEXT_TARGET_DATA_WIND_SPEED: TEXT_TARGET_DATA_LATITUDE { + idc=14002; + y=0.265*safezoneH+safezoneY+0.360; + text="Wind Speed (m/s)"; + }; + class TEXT_TARGET_DATA_WIND_SPEED_INPUT_1: TEXT_TARGET_DATA_LATITUDE_INPUT { + idc=140020; + w=0.045; + x=0.550*safezoneW+safezoneX+0.300; + y=0.265*safezoneH+safezoneY+0.360; + }; + class TEXT_TARGET_DATA_WIND_SPEED_INPUT_2: TEXT_TARGET_DATA_LATITUDE_INPUT { + idc=140021; + w=0.045; + x=0.550*safezoneW+safezoneX+0.350; + y=0.265*safezoneH+safezoneY+0.360; + }; + class TEXT_TARGET_DATA_WIND_DIRECTION: TEXT_TARGET_DATA_LATITUDE { + idc=14003; + y=0.265*safezoneH+safezoneY+0.400; + text="Wind Direction (clock)"; + }; + class TEXT_TARGET_DATA_WIND_DIRECTION_INPUT: TEXT_TARGET_DATA_LATITUDE_INPUT { + idc=140030; + y=0.265*safezoneH+safezoneY+0.400; + }; + class TEXT_TARGET_DATA_INCLINATION_ANGLE: TEXT_TARGET_DATA_LATITUDE { + idc=14004; + y=0.265*safezoneH+safezoneY+0.440; + text="Inclination Angle"; + }; + class TEXT_TARGET_DATA_INCLINATION_ANGLE_INPUT_COSINE: TEXT_TARGET_DATA_LATITUDE_INPUT { + idc=140041; + w=0.045; + x=0.550*safezoneW+safezoneX+0.300; + y=0.265*safezoneH+safezoneY+0.440; + }; + class TEXT_TARGET_DATA_INCLINATION_ANGLE_INPUT_DEGREE: TEXT_TARGET_DATA_LATITUDE_INPUT { + idc=140040; + w=0.045; + x=0.550*safezoneW+safezoneX+0.350; + y=0.265*safezoneH+safezoneY+0.440; + }; + class TEXT_TARGET_DATA_TARGET_SPEED: TEXT_TARGET_DATA_LATITUDE { + idc=14005; + y=0.265*safezoneH+safezoneY+0.480; + text="Target Speed (m/s)"; + }; + class TEXT_TARGET_DATA_TARGET_SPEED_INPUT: TEXT_TARGET_DATA_LATITUDE_INPUT { + idc=140050; + y=0.265*safezoneH+safezoneY+0.480; + }; + class TEXT_TARGET_DATA_TARGET_RANGE: TEXT_TARGET_DATA_LATITUDE { + idc=14006; + y=0.265*safezoneH+safezoneY+0.520; + text="Target Range (meters)"; + }; + class TEXT_TARGET_DATA_TARGET_RANGE_INPUT: TEXT_TARGET_DATA_LATITUDE_INPUT { + idc=140060; + y=0.265*safezoneH+safezoneY+0.520; + }; + class TEXT_TARGET_DATA_DONE: TEXT_TARGET_SPEED_ASSIST_DONE { + idc=14008; + action=QUOTE(1 call FUNC(toggle_target_data)); + }; + class TEXT_TARGET_DATA_CANCEL: TEXT_TARGET_SPEED_ASSIST_CANCEL { + idc=14009; + action=QUOTE(0 call FUNC(toggle_target_data)); + }; + class TEXT_TARGET_DATA_PREV: TEXT_TARGET_SPEED_ASSIST_PREV { + idc=14010; + }; + class TEXT_TARGET_DATA_NEXT: TEXT_TARGET_SPEED_ASSIST_NEXT { + idc=14011; + }; }; }; \ No newline at end of file diff --git a/addons/atragmx/XEH_postInit.sqf b/addons/atragmx/XEH_postInit.sqf index 9d769d84a3..01b13fc85e 100644 --- a/addons/atragmx/XEH_postInit.sqf +++ b/addons/atragmx/XEH_postInit.sqf @@ -5,43 +5,44 @@ if (count (profileNamespace getVariable ["ACE_ATragMX_gunList", []]) > 0) then { GVAR(gunList) = profileNamespace getVariable "ACE_ATragMX_gunList"; } else { - // Profile Name, Muzzle Velocity, Zero Range, Scope Base Angle, AirFriction, Bore Height, Scope Unit, Elevation Scope Step, Windage Scope Step, Maximum Elevation, Dialed Elevation, Dialed Windage, Mass, Ammo Class Name, Magazine Class Name, BC, Drag Model, Atmosphere Model - GVAR(gunList) = [["12.7x108mm" , 820, 100, 0.0659, -0.0008600, 3.81, 0, 0.338, 0.338, 120, 0, 0, 48.28, "B_127x108_Ball" , "5Rnd_127x108_Mag" , 0.630, 1, "ASM" ], + // Profile Name, Muzzle Velocity, Zero Range, Scope Base Angle, AirFriction, Bore Height, Scope Unit, Elevation Scope Step, Windage Scope Step, Maximum Elevation, Dialed Elevation, Dialed Windage, Mass, Bullet Diameter, Rifle Twist, BC, Drag Model, Atmosphere Model + GVAR(gunList) = [["12.7x108mm" , 820, 100, 0.0659, -0.0008600, 3.81, 0, 0.338, 0.338, 120, 0, 0, 48.28, 12.7, 38.10, 0.630, 1, "ASM" ], - ["12.7x99mm AMAX" , 860, 100, 0.0612, -0.0008600, 3.81, 0, 0.338, 0.338, 120, 0, 0, 48.60, "B_127x99_Ball" , "5Rnd_mas_127x99_Stanag" , 1.050, 1, "ASM" ], - ["12.7x99mm" , 853, 100, 0.0623, -0.0008600, 3.81, 0, 0.338, 0.338, 120, 0, 0, 41.92, "B_127x99_Ball" , "5Rnd_mas_127x99_Stanag" , 0.670, 1, "ASM" ], + ["12.7x99mm AMAX" , 860, 100, 0.0612, -0.0008600, 3.81, 0, 0.338, 0.338, 120, 0, 0, 48.60, 12.7, 38.10, 1.050, 1, "ASM" ], + ["12.7x99mm" , 853, 100, 0.0623, -0.0008600, 3.81, 0, 0.338, 0.338, 120, 0, 0, 41.92, 12.7, 38.10, 0.670, 1, "ASM" ], - ["12.7x54mm" , 300, 100, 0.3394, -0.0014000, 3.81, 0, 0.338, 0.338, 120, 0, 0, 48.60, "B_127x54_Ball" , "10Rnd_127x54_Mag" , 1.050, 1, "ASM" ], + ["12.7x54mm" , 300, 100, 0.3394, -0.0014000, 3.81, 0, 0.338, 0.338, 120, 0, 0, 48.60, 12.7, 24.13, 1.050, 1, "ASM" ], - [".408 Chey Tac" , 910, 100, 0.0569, -0.0004800, 3.81, 0, 0.338, 0.338, 120, 0, 0, 27.15, "B_408_Ball" , "7Rnd_408_Mag" , 0.970, 1, "ASM" ], + [".408 Chey Tac" , 910, 100, 0.0569, -0.0004800, 3.81, 0, 0.338, 0.338, 120, 0, 0, 27.15, 10.4, 33.02, 0.970, 1, "ASM" ], - ["9.3×64mm" , 870, 100, 0.0619, -0.0007500, 3.81, 0, 0.338, 0.338, 120, 0, 0, 14.90, "B_93x64_Ball" , "10Rnd_93x64_DMR_05_Mag" , 0.368, 1, "ASM" ], + ["9.3×64mm" , 870, 100, 0.0619, -0.0007500, 3.81, 0, 0.338, 0.338, 120, 0, 0, 14.90, 9.30, 35.56, 0.368, 1, "ASM" ], - [".338LM 250gr" , 880, 100, 0.0598, -0.0006060, 3.81, 0, 0.338, 0.338, 120, 0, 0, 16.20, "B_338_Ball" , "10Rnd_338_Mag" , 0.322, 7, "ICAO"], - [".338LM 300gr" , 800, 100, 0.0677, -0.0005350, 3.81, 0, 0.338, 0.338, 120, 0, 0, 19.44, "ACE_338_Ball" , "ACE_10Rnd_338_300gr_HPBT_Mag" , 0.381, 7, "ICAO"], - [".338LM API526" , 880, 100, 0.0601, -0.0006730, 3.81, 0, 0.338, 0.338, 120, 0, 0, 16.39, "ACE_338_Ball_API526" , "ACE_10Rnd_338_API526_Mag" , 0.290, 7, "ICAO"], + [".338LM 250gr" , 880, 100, 0.0598, -0.0006060, 3.81, 0, 0.338, 0.338, 120, 0, 0, 16.20, 8.58, 25.40, 0.322, 7, "ICAO"], + [".338LM 300gr" , 800, 100, 0.0677, -0.0005350, 3.81, 0, 0.338, 0.338, 120, 0, 0, 19.44, 8.58, 25.40, 0.381, 7, "ICAO"], + [".338LM API526" , 880, 100, 0.0601, -0.0006730, 3.81, 0, 0.338, 0.338, 120, 0, 0, 16.39, 8.58, 25.40, 0.290, 7, "ICAO"], - [".300WM Mk248 Mod 0", 900, 100, 0.0584, -0.0008300, 3.81, 0, 0.338, 0.338, 120, 0, 0, 13.31, "ACE_762x67_Ball_Mk248_Mod_0" , "ACE_20Rnd_762x67_Mk248_Mod_0_Mag" , 0.268, 7, "ICAO"], - [".300WM Mk248 Mod 1", 867, 100, 0.0611, -0.0008150, 3.81, 0, 0.338, 0.338, 120, 0, 0, 14.26, "ACE_762x67_Ball_Mk248_Mod_1" , "ACE_20Rnd_762x67_Mk248_Mod_1_Mag" , 0.310, 7, "ICAO"], - [".300WM Berger OTM" , 853, 100, 0.0622, -0.0007600, 3.81, 0, 0.338, 0.338, 120, 0, 0, 14.90, "ACE_762x67_Ball_Berger_Hybrid_OTM", "ACE_20Rnd_762x67_Berger_Hybrid_OTM_Mag", 0.368, 7, "ICAO"], + [".300WM Mk248 Mod 0", 900, 100, 0.0584, -0.0008300, 3.81, 0, 0.338, 0.338, 120, 0, 0, 13.31, 7.80, 25.40, 0.268, 7, "ICAO"], + [".300WM Mk248 Mod 1", 867, 100, 0.0611, -0.0008150, 3.81, 0, 0.338, 0.338, 120, 0, 0, 14.26, 7.80, 25.40, 0.310, 7, "ICAO"], + [".300WM Berger OTM" , 853, 100, 0.0622, -0.0007600, 3.81, 0, 0.338, 0.338, 120, 0, 0, 14.90, 7.80, 25.40, 0.368, 7, "ICAO"], - ["7.62x54mmR" , 800, 100, 0.0692, -0.0010230, 3.81, 0, 0.338, 0.338, 120, 0, 0, 9.849, "B_762x54_Ball" , "10Rnd_762x54_Mag" , 0.400, 1, "ICAO"], + ["7.62x54mmR" , 800, 100, 0.0692, -0.0010230, 3.81, 0, 0.338, 0.338, 120, 0, 0, 9.849, 7.92, 24.13, 0.400, 1, "ICAO"], - ["7.62x51mm M80" , 810, 100, 0.0679, -0.0010350, 3.81, 0, 0.338, 0.338, 120, 0, 0, 9.525, "B_762x51_Ball" , "20Rnd_762x51_Mag" , 0.200, 7, "ICAO"], - ["7.62x51mm M118LR" , 820, 100, 0.0662, -0.0008525, 3.81, 0, 0.338, 0.338, 120, 0, 0, 11.34, "ACE_762x51_Ball_M118LR" , "ACE_20Rnd_762x51_M118LR_Mag" , 0.243, 7, "ICAO"], - ["7.62x51mm Mk319" , 820, 100, 0.0670, -0.0010300, 3.81, 0, 0.338, 0.338, 120, 0, 0, 8.424, "ACE_762x51_Ball_Mk319_Mod_0" , "ACE_20Rnd_762x51_Mk319_Mod_0_Mag" , 0.377, 1, "ICAO"], - ["7.62x51mm Subsonic", 320, 100, 0.3060, -0.0004910, 3.81, 0, 0.338, 0.338, 120, 0, 0, 12.96, "ACE_762x51_Ball_Subsonic" , "ACE_20Rnd_762x51_Mag_SD" , 0.235, 7, "ICAO"], + ["7.62x51mm M80" , 810, 100, 0.0679, -0.0010350, 3.81, 0, 0.338, 0.338, 120, 0, 0, 9.525, 7.82, 25.40, 0.200, 7, "ICAO"], + ["7.62x51mm M118LR" , 820, 100, 0.0662, -0.0008525, 3.81, 0, 0.338, 0.338, 120, 0, 0, 11.34, 7.82, 25.40, 0.243, 7, "ICAO"], + ["7.62x51mm Mk319" , 820, 100, 0.0670, -0.0010300, 3.81, 0, 0.338, 0.338, 120, 0, 0, 8.424, 7.82, 25.40, 0.377, 1, "ICAO"], + ["7.62x51mm Subsonic", 320, 100, 0.3060, -0.0004910, 3.81, 0, 0.338, 0.338, 120, 0, 0, 12.96, 7.82, 25.40, 0.235, 7, "ICAO"], - ["6.5x39mm" , 800, 100, 0.0683, -0.0007850, 3.81, 0, 0.338, 0.338, 120, 0, 0, 7.970, "B_65x39_Caseless" , "30Rnd_65x39_caseless_mag" , 0.263, 7, "ICAO"], - ["6.5x47mm Lapua" , 800, 100, 0.0682, -0.0007710, 3.81, 0, 0.338, 0.338, 120, 0, 0, 9.007, "ACE_65x47_Ball_Scenar" , "ACE_30Rnd_65x47_Scenar_mag" , 0.290, 7, "ICAO"], + ["6.5x39mm" , 800, 100, 0.0683, -0.0007850, 3.81, 0, 0.338, 0.338, 120, 0, 0, 7.970, 6.71, 22.86, 0.263, 7, "ICAO"], + ["6.5x47mm Lapua" , 800, 100, 0.0682, -0.0007710, 3.81, 0, 0.338, 0.338, 120, 0, 0, 9.007, 6.71, 22.86, 0.290, 7, "ICAO"], - ["5.56x45mm M855" , 870, 100, 0.0626, -0.0012650, 3.81, 0, 0.338, 0.338, 120, 0, 0, 4.018, "B_556x45_Ball" , "30Rnd_556x45_Stanag" , 0.151, 7, "ASM" ], - ["5.56x45mm Mk262" , 820, 100, 0.0671, -0.0011250, 3.81, 0, 0.338, 0.338, 120, 0, 0, 4.990, "ACE_556x45_Ball_Mk262" , "ACE_30Rnd_556x45_Stanag_Mk262_mag" , 0.361, 1, "ASM" ], - ["5.56x45mm Mk318" , 880, 100, 0.0616, -0.0011200, 3.81, 0, 0.338, 0.338, 120, 0, 0, 4.018, "ACE_556x45_Ball_Mk318" , "ACE_30Rnd_556x45_Stanag_Mk318_mag" , 0.307, 1, "ASM" ]]; + ["5.56x45mm M855" , 870, 100, 0.0626, -0.0012650, 3.81, 0, 0.338, 0.338, 120, 0, 0, 4.018, 5.70, 17.78, 0.151, 7, "ASM" ], + ["5.56x45mm Mk262" , 820, 100, 0.0671, -0.0011250, 3.81, 0, 0.338, 0.338, 120, 0, 0, 4.990, 5.70, 17.78, 0.361, 1, "ASM" ], + ["5.56x45mm Mk318" , 880, 100, 0.0616, -0.0011200, 3.81, 0, 0.338, 0.338, 120, 0, 0, 4.018, 5.70, 17.78, 0.307, 1, "ASM" ]]; profileNamespace setVariable ["ACE_ATragMX_gunList", GVAR(gunList)]; }; [] call FUNC(init); +[] call FUNC(restore_user_data); ["RangerfinderData", {_this call FUNC(sord)}] call EFUNC(common,addEventHandler); diff --git a/addons/atragmx/XEH_preInit.sqf b/addons/atragmx/XEH_preInit.sqf index 0224fc3e9c..10e0aff61c 100644 --- a/addons/atragmx/XEH_preInit.sqf +++ b/addons/atragmx/XEH_preInit.sqf @@ -13,35 +13,52 @@ PREP(can_show); PREP(change_gun); PREP(change_target_slot); PREP(create_dialog); +PREP(cycle_gun_list); +PREP(cycle_image_size_units); +PREP(cycle_num_ticks_units); PREP(cycle_range_card_columns); PREP(cycle_scope_unit); +PREP(cycle_target_size_units); PREP(delete_gun); PREP(init); PREP(parse_input); PREP(reset_relative_click_memory); +PREP(restore_atmo_default); +PREP(restore_user_data); PREP(save_gun); PREP(show_add_new_gun); +PREP(show_atmo_env_data); +PREP(show_gun_ammo_data); PREP(show_gun_list); PREP(show_main_page); PREP(show_range_card); PREP(show_range_card_setup); +PREP(show_target_data); PREP(show_target_range_assist); PREP(show_target_speed_assist); PREP(show_target_speed_assist_timer); PREP(sord); +PREP(store_user_data); PREP(target_speed_assist_timer); +PREP(toggle_atmo_env_data); +PREP(toggle_gun_ammo_data); PREP(toggle_gun_list); PREP(toggle_range_card); PREP(toggle_range_card_setup); +PREP(toggle_target_data); PREP(toggle_target_range_assist); PREP(toggle_target_speed_assist); PREP(update_atmosphere); +PREP(update_atmo_env_data); +PREP(update_atmo_selection); PREP(update_gun); +PREP(update_gun_ammo_data); PREP(update_range_card); PREP(update_relative_click_memory); PREP(update_result); PREP(update_scope_unit); PREP(update_target); +PREP(update_target_data); PREP(update_target_selection); PREP(update_unit_selection); PREP(update_zero_range); diff --git a/addons/atragmx/functions/fnc_calculate_range_card.sqf b/addons/atragmx/functions/fnc_calculate_range_card.sqf index aecd6496af..f506726be2 100644 --- a/addons/atragmx/functions/fnc_calculate_range_card.sqf +++ b/addons/atragmx/functions/fnc_calculate_range_card.sqf @@ -20,43 +20,64 @@ private ["_scopeBaseAngle"]; _scopeBaseAngle = (GVAR(workingMemory) select 3); -private ["_bulletMass", "_boreHeight", "_airFriction", "_muzzleVelocity", "_bc", "_dragModel", "_atmosphereModel"]; +private ["_bulletMass", "_bulletDiameter", "_boreHeight", "_airFriction", "_barrelTwist", "_muzzleVelocity", "_bc", "_dragModel", "_atmosphereModel", "_twistDirection"]; _bulletMass = GVAR(workingMemory) select 12; +_bulletDiameter = GVAR(workingMemory) select 13; _boreHeight = GVAR(workingMemory) select 5; _airFriction = GVAR(workingMemory) select 4; +_barrelTwist = GVAR(workingMemory) select 14; _muzzleVelocity = GVAR(workingMemory) select 1; _bc = GVAR(workingMemory) select 15; _dragModel = GVAR(workingMemory) select 16; _atmosphereModel = GVAR(workingMemory) select 17; -private ["_temperature", "_barometricPressure", "_relativeHumidity"]; +_twistDirection = 0; +if (_barrelTwist > 0) then { + _twistDirection = 1; +} else { + if (_barrelTwist < 0) then { + _twistDirection = -1; + }; +}; +_barrelTwist = abs(_barrelTwist); + +private ["_altitude", "_temperature", "_barometricPressure", "_relativeHumidity"]; +_altitude = GVAR(altitude); _temperature = GVAR(temperature); _barometricPressure = GVAR(barometricPressure); _relativeHumidity = GVAR(relativeHumidity); -if (GVAR(currentUnit) == 1) then -{ - _temperature = (_temperature - 32) / 1.8; - _barometricPressure = _barometricPressure * 33.8638866667; +if (!GVAR(atmosphereModeTBH)) then { + _barometricPressure = 1013.25 * exp(-(_altitude) / 7990); + _relativeHumidity = 50; }; -private ["_windSpeed", "_windDirection", "_inclinationAngle", "_targetSpeed", "_targetRange"]; -_windSpeed = (GVAR(windSpeed) select GVAR(currentTarget)); +private ["_bulletLength", "_stabilityFactor"]; +_bulletLength = 1.8; +_stabilityFactor = 1.5; +if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,SpinDriftEnabled), false])) then { + if (_bulletDiameter > 0 && _bulletLength > 0 && _bulletMass > 0 && _barrelTwist > 0) then { + _stabilityFactor = [_bulletDiameter / 10 / 2.54, _bulletLength, _bulletMass * 15.4323584, _barrelTwist / 2.54, _muzzleVelocity, _temperature, _barometricPressure] call EFUNC(advanced_ballistics,calculateStabilityFactor); + }; +}; + +private ["_latitude", "_directionOfFire", "_windSpeed", "_windDirection", "_inclinationAngle", "_targetSpeed", "_targetRange"]; +_latitude = GVAR(latitude) select GVAR(currentTarget); +_directionOfFire = GVAR(directionOfFire) select GVAR(currentTarget); +_windSpeed = (GVAR(windSpeed1) select GVAR(currentTarget)); _windDirection = (GVAR(windDirection) select GVAR(currentTarget)); _inclinationAngle = (GVAR(inclinationAngle) select GVAR(currentTarget)); _targetSpeed = (GVAR(targetSpeed) select GVAR(currentTarget)); _targetRange = GVAR(rangeCardEndRange); -if (GVAR(currentUnit) != 2) then -{ - _targetRange = _targetRange / 1.0936133; -}; -if (GVAR(currentUnit) == 1) then -{ +if (GVAR(currentUnit) != 2) then { _windSpeed = _windSpeed / 2.23693629; _targetSpeed = _targetSpeed / 2.23693629; }; +if (GVAR(currentUnit) == 1) then { + _targetRange = _targetRange / 1.0936133; +}; GVAR(rangeCardData) = []; private ["_result"]; _result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000, - _windSpeed, _windDirection, _inclinationAngle, _targetSpeed, _targetRange, _bc, _dragModel, _atmosphereModel, true] call FUNC(calculate_solution); + _windSpeed, _windDirection, _inclinationAngle, _targetSpeed, _targetRange, _bc, _dragModel, _atmosphereModel, true, _stabilityFactor, _twistDirection, _latitude] call FUNC(calculate_solution); diff --git a/addons/atragmx/functions/fnc_calculate_scope_base_angle.sqf b/addons/atragmx/functions/fnc_calculate_scope_base_angle.sqf index 17370c82b2..4995c31a61 100644 --- a/addons/atragmx/functions/fnc_calculate_scope_base_angle.sqf +++ b/addons/atragmx/functions/fnc_calculate_scope_base_angle.sqf @@ -35,6 +35,6 @@ _barometricPressure = 1013.25; _relativeHumidity = 0; private ["_result"]; -_result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000, 0, 0, 0, 0, _zeroRange, _airFriction, 1, "ICAO", false] call FUNC(calculate_solution); +_result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000, 0, 0, 0, 0, _zeroRange, _airFriction, 1, "ICAO", false, 1.5, 0, 0] call FUNC(calculate_solution); _scopeBaseAngle + (_result select 0) / 60 diff --git a/addons/atragmx/functions/fnc_calculate_solution.sqf b/addons/atragmx/functions/fnc_calculate_solution.sqf index 4e7f5981c1..f7f23044e3 100644 --- a/addons/atragmx/functions/fnc_calculate_solution.sqf +++ b/addons/atragmx/functions/fnc_calculate_solution.sqf @@ -21,6 +21,9 @@ * 15: drag model <NUMBER> * 16: atmosphere model <STRING> * 17: Store range card data? <BOOL> + * 18: Stability factor <NUMBER> + * 19: Twist Direction <NUMBER> + * 20: Latitude <NUMBER> * * Return Value: * 0: Elevation <NUMBER> @@ -28,7 +31,10 @@ * 2: Lead <NUMBER> * 3: Time of fligth <NUMBER> * 4: Remaining velocity <NUMBER> - * 4: Remaining kinetic energy <NUMBER> + * 5: Remaining kinetic energy <NUMBER> + * 6: Vertical coriolis drift <NUMBER> + * 7: Horizontal coriolis drift <NUMBER> + * 8: Spin drift <NUMBER> * * Example: * call ace_atragmx_calculate_target_range_assist @@ -37,7 +43,7 @@ */ #include "script_component.hpp" -private ["_scopeBaseAngle", "_bulletMass", "_boreHeight", "_airFriction", "_muzzleVelocity", "_temperature", "_barometricPressure", "_relativeHumidity", "_simSteps", "_windSpeed", "_windDirection", "_inclinationAngle", "_targetSpeed", "_targetRange", "_bc", "_dragModel", "_atmosphereModel", "_storeRangeCardData"]; +private ["_scopeBaseAngle", "_bulletMass", "_boreHeight", "_airFriction", "_muzzleVelocity", "_temperature", "_barometricPressure", "_relativeHumidity", "_simSteps", "_windSpeed", "_windDirection", "_inclinationAngle", "_targetSpeed", "_targetRange", "_bc", "_dragModel", "_atmosphereModel", "_storeRangeCardData", "_stabilityFactor", "_twistDirection", "_latitude"]; _scopeBaseAngle = _this select 0; _bulletMass = _this select 1; _boreHeight = _this select 2; @@ -56,6 +62,9 @@ _bc = _this select 14; _dragModel = _this select 15; _atmosphereModel = _this select 16; _storeRangeCardData = _this select 17; +_stabilityFactor = _this select 18; +_twistDirection = _this select 19; +_latitude = _this select 20; private ["_bulletPos", "_bulletVelocity", "_bulletAccel", "_bulletSpeed", "_gravity", "_deltaT"]; _bulletPos = [0, 0, 0]; @@ -65,20 +74,26 @@ _bulletSpeed = 0; _gravity = [0, sin(_scopeBaseAngle + _inclinationAngle) * -9.80665, cos(_scopeBaseAngle + _inclinationAngle) * -9.80665]; _deltaT = 1 / _simSteps; -private ["_elevation", "_windage", "_lead", "_TOF", "_trueVelocity", "_trueSpeed", "_kineticEnergy"]; +private ["_elevation", "_windage", "_lead", "_TOF", "_trueVelocity", "_trueSpeed", "_kineticEnergy", "_verticalCoriolis", "_verticalDeflection", "_horizontalCoriolis", "_horizontalDeflection", "_spinDrift", "_spinDeflection"]; _elevation = 0; _windage = 0; _lead = 0; _TOF = 0; _trueVelocity = [0, 0, 0]; _trueSpeed = 0; +_verticalCoriolis = 0; +_verticalDeflection = 0; +_horizontalCoriolis = 0; +_horizontalDeflection = 0; +_spinDrift = 0; +_spinDeflection = 0; private ["_n", "_range", "_rangeFactor"]; _n = 0; _range = 0; _rangeFactor = 1; if (_storeRangeCardData) then { - if (GVAR(currentUnit) != 2) then { + if (GVAR(currentUnit) == 1) then { _rangeFactor = 1.0936133; }; GVAR(rangeCardData) = []; @@ -90,6 +105,11 @@ if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) _bc = [_bc, _temperature, _barometricPressure, _relativeHumidity, _atmosphereModel] call EFUNC(advanced_ballistics,calculateAtmosphericCorrection); }; +private ["_speedTotal", "_stepsTotal", "_speedAverage"]; +_speedTotal = 0; +_stepsTotal = 0; +_speedAverage = 0; + _TOF = 0; _bulletPos set [0, 0]; @@ -102,6 +122,10 @@ _bulletVelocity set [2, Sin(_scopeBaseAngle) * _muzzleVelocity]; while {_TOF < 15 && (_bulletPos select 1) < _targetRange} do { _bulletSpeed = vectorMagnitude _bulletVelocity; + + _speedTotal = _speedTotal + _bulletSpeed; + _stepsTotal = _stepsTotal + 1; + _speedAverage = (_speedTotal / _stepsTotal); _trueVelocity = _bulletVelocity vectorDiff _wind; _trueSpeed = vectorMagnitude _trueVelocity; @@ -139,7 +163,22 @@ while {_TOF < 15 && (_bulletPos select 1) < _targetRange} do { }; _kineticEnergy = 0.5 * (_bulletMass / 1000 * (_bulletSpeed ^ 2)); _kineticEnergy = _kineticEnergy * 0.737562149; - + + if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,CoriolisEnabled), false])) then { + if ((_bulletPos select 1) > 0) then { + _horizontalDeflection = 0.0000729 * ((_bulletPos select 0) ^ 2) * sin(_latitude) / _speedAverage; + _horizontalCoriolis = - atan(_horizontalDeflection / (_bulletPos select 1)); + _windage = _windage + _horizontalCoriolis; + }; + }; + if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,SpinDriftEnabled), false])) then { + if ((_bulletPos select 1) > 0) then { + _spinDeflection = _twistDirection * 0.0254 * 1.25 * (_stabilityFactor + 1.2) * _TOF ^ 1.83; + _spinDrift = - atan(_spinDeflection / (_bulletPos select 1)); + _windage = _windage + _spinDrift; + }; + }; + GVAR(rangeCardData) set [_n, [_range, _elevation * 60, _windage * 60, _lead, _TOF, _bulletSpeed, _kineticEnergy]]; _n = _n + 1; }; @@ -158,4 +197,19 @@ if (_targetRange != 0) then { _kineticEnergy = 0.5 * (_bulletMass / 1000 * (_bulletSpeed ^ 2)); _kineticEnergy = _kineticEnergy * 0.737562149; -[_elevation * 60, _windage * 60, _lead, _TOF, _bulletSpeed, _kineticEnergy] +if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,CoriolisEnabled), false])) then { + if ((_bulletPos select 1) > 0) then { + _horizontalDeflection = 0.0000729 * ((_bulletPos select 0) ^ 2) * sin(_latitude) / _speedAverage; + _horizontalCoriolis = - atan(_horizontalDeflection / (_bulletPos select 1)); + _windage = _windage + _horizontalCoriolis; + }; +}; +if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,SpinDriftEnabled), false])) then { + if ((_bulletPos select 1) > 0) then { + _spinDeflection = _twistDirection * 0.0254 * 1.25 * (_stabilityFactor + 1.2) * _TOF ^ 1.83; + _spinDrift = - atan(_spinDeflection / (_bulletPos select 1)); + _windage = _windage + _spinDrift; + }; +}; + +[_elevation * 60, _windage * 60, _lead, _TOF, _bulletSpeed, _kineticEnergy, _verticalCoriolis, _horizontalCoriolis, _spinDrift] diff --git a/addons/atragmx/functions/fnc_calculate_target_range_assist.sqf b/addons/atragmx/functions/fnc_calculate_target_range_assist.sqf index 6280f19339..91eb9ae20c 100644 --- a/addons/atragmx/functions/fnc_calculate_target_range_assist.sqf +++ b/addons/atragmx/functions/fnc_calculate_target_range_assist.sqf @@ -46,7 +46,7 @@ switch (GVAR(rangeAssistImageSizeUnit)) do { }; }; _estRange = parseNumber(ctrlText 7013); -if (GVAR(currentUnit) != 2) then { +if (GVAR(currentUnit) == 1) then { _estRange = _estRange / 1.0936133; }; diff --git a/addons/atragmx/functions/fnc_calculate_target_solution.sqf b/addons/atragmx/functions/fnc_calculate_target_solution.sqf index 3f4c92c191..f6dd92bc7f 100644 --- a/addons/atragmx/functions/fnc_calculate_target_solution.sqf +++ b/addons/atragmx/functions/fnc_calculate_target_solution.sqf @@ -20,44 +20,65 @@ private ["_scopeBaseAngle"]; _scopeBaseAngle = (GVAR(workingMemory) select 3); -private ["_bulletMass", "_boreHeight", "_airFriction", "_muzzleVelocity", "_bc", "_dragModel", "_atmosphereModel"]; +private ["_bulletMass", "_bulletDiameter", "_boreHeight", "_airFriction", "_barrelTwist", "_muzzleVelocity", "_bc", "_dragModel", "_atmosphereModel", "_twistDirection"]; _bulletMass = GVAR(workingMemory) select 12; +_bulletDiameter = GVAR(workingMemory) select 13; _boreHeight = GVAR(workingMemory) select 5; _airFriction = GVAR(workingMemory) select 4; +_barrelTwist = GVAR(workingMemory) select 14; _muzzleVelocity = GVAR(workingMemory) select 1; _bc = GVAR(workingMemory) select 15; _dragModel = GVAR(workingMemory) select 16; _atmosphereModel = GVAR(workingMemory) select 17; -private ["_temperature", "_barometricPressure", "_relativeHumidity"]; +_twistDirection = 0; +if (_barrelTwist > 0) then { + _twistDirection = 1; +} else { + if (_barrelTwist < 0) then { + _twistDirection = -1; + }; +}; +_barrelTwist = abs(_barrelTwist); + +private ["_altitude", "_temperature", "_barometricPressure", "_relativeHumidity"]; +_altitude = GVAR(altitude); _temperature = GVAR(temperature); _barometricPressure = GVAR(barometricPressure); _relativeHumidity = GVAR(relativeHumidity); -if (GVAR(currentUnit) == 1) then -{ - _temperature = (_temperature - 32) / 1.8; - _barometricPressure = _barometricPressure * 33.8638866667; +if (!GVAR(atmosphereModeTBH)) then { + _barometricPressure = 1013.25 * exp(-(_altitude) / 7990); + _relativeHumidity = 50; }; -private ["_windSpeed", "_windDirection", "_inclinationAngle", "_targetSpeed", "_targetRange"]; -_windSpeed = (GVAR(windSpeed) select GVAR(currentTarget)); -_windDirection = (GVAR(windDirection) select GVAR(currentTarget)); -_inclinationAngle = (GVAR(inclinationAngle) select GVAR(currentTarget)); -_targetSpeed = (GVAR(targetSpeed) select GVAR(currentTarget)); -_targetRange = (GVAR(targetRange) select GVAR(currentTarget)); -if (GVAR(currentUnit) != 2) then -{ - _targetRange = _targetRange / 1.0936133; +private ["_bulletLength", "_stabilityFactor"]; +_bulletLength = 1.8; +_stabilityFactor = 1.5; +if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,SpinDriftEnabled), false])) then { + if (_bulletDiameter > 0 && _bulletLength > 0 && _bulletMass > 0 && _barrelTwist > 0) then { + _stabilityFactor = [_bulletDiameter / 10 / 2.54, _bulletLength, _bulletMass * 15.4323584, _barrelTwist / 2.54, _muzzleVelocity, _temperature, _barometricPressure] call EFUNC(advanced_ballistics,calculateStabilityFactor); + }; }; -if (GVAR(currentUnit) == 1) then -{ + +private ["_latitude", "_directionOfFire", "_windSpeed", "_windDirection", "_inclinationAngle", "_targetSpeed", "_targetRange"]; +_latitude = GVAR(latitude) select GVAR(currentTarget); +_directionOfFire = GVAR(directionOfFire) select GVAR(currentTarget); +_windSpeed = GVAR(windSpeed1) select GVAR(currentTarget); +_windDirection = GVAR(windDirection) select GVAR(currentTarget); +_inclinationAngle = GVAR(inclinationAngle) select GVAR(currentTarget); +_targetSpeed = GVAR(targetSpeed) select GVAR(currentTarget); +_targetRange = GVAR(targetRange) select GVAR(currentTarget); +if (GVAR(currentUnit) != 2) then { _windSpeed = _windSpeed / 2.23693629; _targetSpeed = _targetSpeed / 2.23693629; }; +if (GVAR(currentUnit) == 1) then { + _targetRange = _targetRange / 1.0936133; +}; private ["_result"]; _result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000, - _windSpeed, _windDirection, _inclinationAngle, _targetSpeed, _targetRange, _bc, _dragModel, _atmosphereModel, false] call FUNC(calculate_solution); + _windSpeed, _windDirection, _inclinationAngle, _targetSpeed, _targetRange, _bc, _dragModel, _atmosphereModel, false, _stabilityFactor, _twistDirection, _latitude] call FUNC(calculate_solution); GVAR(elevationOutput) set [GVAR(currentTarget), _result select 0]; GVAR(windageOutput) set [GVAR(currentTarget), _result select 1]; diff --git a/addons/atragmx/functions/fnc_calculate_target_speed_assist.sqf b/addons/atragmx/functions/fnc_calculate_target_speed_assist.sqf index 7ee7e9ff78..d055af5a71 100644 --- a/addons/atragmx/functions/fnc_calculate_target_speed_assist.sqf +++ b/addons/atragmx/functions/fnc_calculate_target_speed_assist.sqf @@ -22,34 +22,27 @@ _numTicks = parseNumber(ctrlText 8005); _timeSecs = parseNumber(ctrlText 8006); _estSpeed = 0; -if (GVAR(currentUnit) != 2) then -{ +if (GVAR(currentUnit) == 1) then { _targetRange = _targetRange / 1.0936133; }; -switch (GVAR(rangeAssistImageSizeUnit)) do -{ - case 0: - { +switch (GVAR(rangeAssistImageSizeUnit)) do { + case 0: { _numTicks = _numTicks / 6400 * 360; }; - case 1: - { + case 1: { _numTicks = _numTicks / 60; }; - case 2: - { + case 2: { _numTicks = _numTicks / 60 / 1.047; }; }; -if (_timeSecs > 0) then -{ +if (_timeSecs > 0) then { _estSpeed = tan(_numTicks) * _targetRange / _timeSecs; }; -if (GVAR(currentUnit) == 1) then -{ +if (GVAR(currentUnit) != 2) then { _estSpeed = _estSpeed * 2.23693629; }; diff --git a/addons/atragmx/functions/fnc_change_gun.sqf b/addons/atragmx/functions/fnc_change_gun.sqf index 520e4e85be..9b0f18c185 100644 --- a/addons/atragmx/functions/fnc_change_gun.sqf +++ b/addons/atragmx/functions/fnc_change_gun.sqf @@ -4,6 +4,7 @@ * * Arguments: * gunID <number> + * update solution <BOOL> * * Return Value: * Nothing @@ -15,19 +16,23 @@ */ #include "script_component.hpp" -if (_this < 0 || _this > (count GVAR(gunList)) - 1) exitWith {}; +private ["_gunID", "_updateSolution"]; +_gunID = _this select 0; +_updateSolution = _this select 1; -GVAR(workingMemory) = +(GVAR(gunList) select _this); -GVAR(currentGun) = _this; +if (_gunID < 0 || _gunID > (count GVAR(gunList)) - 1) exitWith {}; + +GVAR(workingMemory) = +(GVAR(gunList) select _gunID); +GVAR(currentGun) = _gunID; lbSetCurSel [6000, GVAR(currentGun)]; -if ((GVAR(scopeUnits) select GVAR(currentScopeUnit)) != "Clicks") then -{ +if ((GVAR(scopeUnits) select GVAR(currentScopeUnit)) != "Clicks") then { GVAR(currentScopeUnit) = GVAR(workingMemory) select 6; }; [] call FUNC(update_gun); +[] call FUNC(update_gun_ammo_data); GVAR(elevationOutput) set [GVAR(currentTarget), 0]; GVAR(windageOutput) set [GVAR(currentTarget), 0]; @@ -35,4 +40,6 @@ GVAR(leadOutput) set [GVAR(currentTarget), 0]; GVAR(tofOutput) set [GVAR(currentTarget), 0]; GVAR(velocityOutput) set [GVAR(currentTarget), 0]; -[] call FUNC(calculate_target_solution); +if (_updateSolution) then { + [] call FUNC(calculate_target_solution); +}; diff --git a/addons/atragmx/functions/fnc_change_target_slot.sqf b/addons/atragmx/functions/fnc_change_target_slot.sqf index 6e6951c6bf..ed8c622b8d 100644 --- a/addons/atragmx/functions/fnc_change_target_slot.sqf +++ b/addons/atragmx/functions/fnc_change_target_slot.sqf @@ -23,4 +23,4 @@ call FUNC(parse_input); GVAR(currentTarget) = _target; call FUNC(update_target_selection); -call FUNC(calculate_target_solution); +[] call FUNC(calculate_target_solution); diff --git a/addons/atragmx/functions/fnc_create_dialog.sqf b/addons/atragmx/functions/fnc_create_dialog.sqf index 59ec3528af..5be6e4ecb4 100644 --- a/addons/atragmx/functions/fnc_create_dialog.sqf +++ b/addons/atragmx/functions/fnc_create_dialog.sqf @@ -26,6 +26,8 @@ call FUNC(update_target_selection); GVAR(showMainPage) call FUNC(show_main_page); GVAR(showAddNewGun) call FUNC(show_add_new_gun); +GVAR(showAtmoEnvData) call FUNC(show_atmo_env_data); +GVAR(showGunAmmoData) call FUNC(show_gun_ammo_data); GVAR(showGunList) call FUNC(show_gun_list); GVAR(showRangeCard) call FUNC(show_range_card); if (GVAR(showRangeCard)) then { @@ -33,6 +35,7 @@ if (GVAR(showRangeCard)) then { [] call FUNC(update_range_card); }; GVAR(showRangeCardSetup) call FUNC(show_range_card_setup); +GVAR(showTargetData) call FUNC(show_target_data); GVAR(showTargetRangeAssist) call FUNC(show_target_range_assist); GVAR(showTargetSpeedAssist) call FUNC(show_target_speed_assist); GVAR(showTargetSpeedAssistTimer) call FUNC(show_target_speed_assist_timer); diff --git a/addons/atragmx/functions/fnc_cycle_gun_list.sqf b/addons/atragmx/functions/fnc_cycle_gun_list.sqf new file mode 100644 index 0000000000..3d4bef70c1 --- /dev/null +++ b/addons/atragmx/functions/fnc_cycle_gun_list.sqf @@ -0,0 +1,18 @@ +/* + * Author: Ruthberg + * Cycles through the gun list + * + * Arguments: + * step <NUMBER> + * + * Return Value: + * Nothing + * + * Example: + * call ace_atragmx_cycle_scope_unit + * + * Public: No + */ +#include "script_component.hpp" + +[(GVAR(currentGun) + (count GVAR(gunList)) + _this) % (count GVAR(gunList)), true] call FUNC(change_gun); diff --git a/addons/atragmx/functions/fnc_cycle_image_size_units.sqf b/addons/atragmx/functions/fnc_cycle_image_size_units.sqf new file mode 100644 index 0000000000..d78b13731c --- /dev/null +++ b/addons/atragmx/functions/fnc_cycle_image_size_units.sqf @@ -0,0 +1,19 @@ +/* + * Author: Ruthberg + * Cycles through the image size units + * + * Arguments: + * step <NUMBER> + * + * Return Value: + * Nothing + * + * Example: + * call ace_atragmx_cycle_image_size_units + * + * Public: No + */ +#include "script_component.hpp" + +GVAR(rangeAssistImageSizeUnit) = (GVAR(rangeAssistImageSizeUnit) + 1) % (count GVAR(rangeAssistImageSizeUnits)); +ctrlSetText [7015, GVAR(rangeAssistImageSizeUnits) select GVAR(rangeAssistImageSizeUnit)]; diff --git a/addons/atragmx/functions/fnc_cycle_num_ticks_units.sqf b/addons/atragmx/functions/fnc_cycle_num_ticks_units.sqf new file mode 100644 index 0000000000..6afc105f62 --- /dev/null +++ b/addons/atragmx/functions/fnc_cycle_num_ticks_units.sqf @@ -0,0 +1,20 @@ +/* + * Author: Ruthberg + * Cycles through the num ticks units + * + * Arguments: + * step <NUMBER> + * + * Return Value: + * Nothing + * + * Example: + * call ace_atragmx_cycle_num_ticks_units + * + * Public: No + */ +#include "script_component.hpp" + +GVAR(speedAssistNumTicksUnit) = (GVAR(speedAssistNumTicksUnit) + 1) % (count GVAR(speedAssistNumTicksUnits)); +ctrlSetText [8009, GVAR(speedAssistNumTicksUnits) select GVAR(speedAssistNumTicksUnit)]; +call FUNC(calculate_target_speed_assist); diff --git a/addons/atragmx/functions/fnc_cycle_target_size_units.sqf b/addons/atragmx/functions/fnc_cycle_target_size_units.sqf new file mode 100644 index 0000000000..e055c8282c --- /dev/null +++ b/addons/atragmx/functions/fnc_cycle_target_size_units.sqf @@ -0,0 +1,19 @@ +/* + * Author: Ruthberg + * Cycles through the target size units + * + * Arguments: + * step <NUMBER> + * + * Return Value: + * Nothing + * + * Example: + * call ace_atragmx_cycle_target_size_units + * + * Public: No + */ +#include "script_component.hpp" + +GVAR(rangeAssistTargetSizeUnit) = (GVAR(rangeAssistTargetSizeUnit) + 1) % (count GVAR(rangeAssistTargetSizeUnits)); +ctrlSetText [7014, GVAR(rangeAssistTargetSizeUnits) select GVAR(rangeAssistTargetSizeUnit)]; diff --git a/addons/atragmx/functions/fnc_init.sqf b/addons/atragmx/functions/fnc_init.sqf index 8fda3570fa..efbd39ef81 100644 --- a/addons/atragmx/functions/fnc_init.sqf +++ b/addons/atragmx/functions/fnc_init.sqf @@ -9,7 +9,7 @@ * Nothing * * Example: - * call ace_atragmx_init + * call ace_atragmx_fnc_init * * Public: No */ @@ -26,7 +26,7 @@ GVAR(rangeCardLastColumns) = ["Lead", "RemV", "RemE", "TmFlt"]; GVAR(rangeCardCurrentColumn) = 3; GVAR(rangeCardData) = []; -GVAR(GVAR(rangeAssistTargetSizeUnit)s) = ["in", "ft", "cm", "m"]; +GVAR(rangeAssistTargetSizeUnits) = ["in", "ft", "cm", "m"]; GVAR(rangeAssistTargetSizeUnit) = 2; GVAR(rangeAssistImageSizeUnits) = ["MIL", "TMOA", "IOA"]; GVAR(rangeAssistImageSizeUnit) = 0; @@ -41,11 +41,16 @@ GVAR(currentGun) = 0; GVAR(currentTarget) = 0; GVAR(currentScopeUnit) = 0; +GVAR(atmosphereModeTBH) = true; +GVAR(altitude) = 0; GVAR(temperature) = 15; GVAR(barometricPressure) = 1013.25; GVAR(relativeHumidity) = 0.5; -GVAR(windSpeed) = [0, 0, 0, 0]; +GVAR(latitude) = [38, 38, 38, 38]; +GVAR(directionOfFire) = [0, 0, 0, 0]; +GVAR(windSpeed1) = [0, 0, 0, 0]; +GVAR(windSpeed2) = [0, 0, 0, 0]; GVAR(windDirection) = [12, 12, 12, 12]; GVAR(inclinationAngle) = [0, 0, 0, 0]; GVAR(targetSpeed) = [0, 0, 0, 0]; @@ -59,10 +64,12 @@ GVAR(velocityOutput) = [0, 0, 0, 0]; GVAR(showMainPage) = true; GVAR(showAddNewGun) = false; +GVAR(showAtmoEnvData) = false; +GVAR(showGunAmmoData) = false; GVAR(showGunList) = false; GVAR(showRangeCard) = false; GVAR(showRangeCardSetup) = false; +GVAR(showTargetData) = false; GVAR(showTargetRangeAssist) = false; GVAR(showTargetSpeedAssist) = false; GVAR(showTargetSpeedAssistTimer) = false; - diff --git a/addons/atragmx/functions/fnc_parse_input.sqf b/addons/atragmx/functions/fnc_parse_input.sqf index 7d364cbdfc..be91ecc593 100644 --- a/addons/atragmx/functions/fnc_parse_input.sqf +++ b/addons/atragmx/functions/fnc_parse_input.sqf @@ -15,64 +15,78 @@ */ #include "script_component.hpp" -GVAR(temperature) = parseNumber(ctrlText 200); -GVAR(barometricPressure) = 0 max parseNumber(ctrlText 210); -GVAR(relativeHumidity) = (0 max parseNumber(ctrlText 220) min 100) / 100; - -GVAR(windSpeed) set [GVAR(currentTarget), 0 max abs(parseNumber(ctrlText 300)) min 50]; -GVAR(windDirection) set [GVAR(currentTarget), 1 max Round(parseNumber(ctrlText 310)) min 12]; -GVAR(inclinationAngle) set [GVAR(currentTarget), -60 max parseNumber(ctrlText 320) min 60]; -GVAR(targetSpeed) set [GVAR(currentTarget), 0 max abs(parseNumber(ctrlText 330)) min 50]; -GVAR(targetRange) set [GVAR(currentTarget), 0 max abs(parseNumber(ctrlText 340)) min 4000]; - -private ["_boreHeight", "_bulletMass", "_airFriction", "_muzzleVelocity"]; -_boreHeight = parseNumber(ctrlText 100); -_bulletMass = parseNumber(ctrlText 110); -if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false])) then { - _airFriction = 0.1 max parseNumber(ctrlText 120) min 2; -} else { - _airFriction = parseNumber(ctrlText 120) / -1000; +GVAR(altitude) = -1000 max parseNumber(ctrlText 130030) min 20000; +GVAR(temperature) = -50 max parseNumber(ctrlText 130040) min 160; +GVAR(barometricPressure) = 0 max parseNumber(ctrlText 130050) min 1350; +GVAR(relativeHumidity) = (0 max parseNumber(ctrlText 130060) min 100) / 100; +if (GVAR(currentUnit) == 1) then { + GVAR(altitude) = GVAR(altitude) * 0.3048; + GVAR(temperature) = (GVAR(temperature) - 32) / 1.8; + GVAR(barometricPressure) = GVAR(barometricPressure) * 33.86389; }; -_muzzleVelocity = parseNumber(ctrlText 130); -if (GVAR(currentUnit) == 1) then -{ + +GVAR(latitude) set [GVAR(currentTarget), -90 max Round(parseNumber(ctrlText 140000)) min 90]; +GVAR(directionOfFire) set [GVAR(currentTarget), 0 max abs(Round(parseNumber(ctrlText 140010))) min 359]; +GVAR(windSpeed1) set [GVAR(currentTarget), 0 max abs(parseNumber(ctrlText 140020)) min 50]; +GVAR(windSpeed2) set [GVAR(currentTarget), 0 max abs(parseNumber(ctrlText 140021)) min 50]; +GVAR(windDirection) set [GVAR(currentTarget), 1 max Round(parseNumber(ctrlText 140030)) min 12]; +GVAR(inclinationAngle) set [GVAR(currentTarget), -60 max parseNumber(ctrlText 140040) min 60]; +GVAR(targetSpeed) set [GVAR(currentTarget), 0 max abs(parseNumber(ctrlText 140050)) min 50]; +GVAR(targetRange) set [GVAR(currentTarget), 0 max abs(parseNumber(ctrlText 140060)) min 4000]; + +private ["_boreHeight", "_bulletMass", "_bulletDiameter", "_airFriction", "_rifleTwist", "_muzzleVelocity", "_zeroRange"]; +_boreHeight = parseNumber(ctrlText 120000); +_bulletMass = parseNumber(ctrlText 120010); +_bulletDiameter = parseNumber(ctrlText 120020); +if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false])) then { + _airFriction = 0.1 max parseNumber(ctrlText 120030) min 2; +} else { + _airFriction = parseNumber(ctrlText 120030) / -1000; +}; +_rifleTwist = parseNumber(ctrlText 120040); +_muzzleVelocity = parseNumber(ctrlText 120050); +_zeroRange = parseNumber (ctrlText 120060); +if (GVAR(currentUnit) != 2) then { _boreHeight = _boreHeight * 2.54; _bulletMass = _bulletMass * 0.06479891; + _bulletDiameter = _bulletDiameter * 10 * 2.54; + _rifleTwist = _rifleTwist * 2.54; _muzzleVelocity = _muzzleVelocity / 3.2808399; }; +if (GVAR(currentUnit) == 1) then { + _zeroRange = _zeroRange / 1.0936133; +}; _boreHeight = 0.1 max _boreHeight min 10; _bulletMass = 1 max _bulletMass min 100; +_bulletDiameter = 1 max _bulletDiameter min 25; _muzzleVelocity = 100 max _muzzleVelocity min 1400; - +_zeroRange = 0 max _zeroRange min 1000; GVAR(workingMemory) set [5, _boreHeight]; GVAR(workingMemory) set [12, _bulletMass]; +GVAR(workingMemory) set [13, _bulletDiameter]; +GVAR(workingMemory) set [14, _rifleTwist]; if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false])) then { GVAR(workingMemory) set [15, _airFriction]; } else { GVAR(workingMemory) set [4, _airFriction]; }; GVAR(workingMemory) set [1, _muzzleVelocity]; +GVAR(workingMemory) set [2, _zeroRange]; private ["_elevationCur", "_windageCur", "_elevationScopeStep", "_windageScopeStep"]; _elevationCur = parseNumber(ctrlText 402); _windageCur = parseNumber(ctrlText 412); -switch (GVAR(currentScopeUnit)) do -{ - case 0: - { +switch (GVAR(currentScopeUnit)) do { + case 0: { _elevationCur = _elevationCur * 3.38; _windageCur = _windageCur * 3.38; }; - - case 2: - { + case 2: { _elevationCur = _elevationCur / 1.047; _windageCur = _windageCur / 1.047; }; - - case 3: - { + case 3: { _elevationScopeStep = (GVAR(workingMemory) select 7); _windageScopeStep = (GVAR(workingMemory) select 8); @@ -85,5 +99,9 @@ GVAR(workingMemory) set [10, _elevationCur]; GVAR(workingMemory) set [11, _windageCur]; [] call FUNC(update_gun); +[] call FUNC(update_gun_ammo_data); [] call FUNC(update_atmosphere); +[] call FUNC(update_atmo_env_data); [] call FUNC(update_target); + +[] call FUNC(store_user_data); diff --git a/addons/atragmx/functions/fnc_restore_atmo_default.sqf b/addons/atragmx/functions/fnc_restore_atmo_default.sqf new file mode 100644 index 0000000000..08b7c56d86 --- /dev/null +++ b/addons/atragmx/functions/fnc_restore_atmo_default.sqf @@ -0,0 +1,25 @@ +/* + * Author: Ruthberg + * Restores the atmospheric data defaults + * + * Arguments: + * Nothing + * + * Return Value: + * Nothing + * + * Example: + * call ace_atragmx_fnc_restore_atmo_default + * + * Public: No + */ +#include "script_component.hpp" + +GVAR(atmosphereModeTBH) = true; +GVAR(altitude) = 0; +GVAR(temperature) = 15; +GVAR(barometricPressure) = 1013.25; +GVAR(relativeHumidity) = 0.5; + +[] call FUNC(update_atmo_selection); +[] call FUNC(update_atmosphere); diff --git a/addons/atragmx/functions/fnc_restore_user_data.sqf b/addons/atragmx/functions/fnc_restore_user_data.sqf new file mode 100644 index 0000000000..7c011198d6 --- /dev/null +++ b/addons/atragmx/functions/fnc_restore_user_data.sqf @@ -0,0 +1,36 @@ +/* + * Author: Ruthberg + * Reads user data from profileNamespace + * + * Arguments: + * Nothing + * + * Return Value: + * Nothing + * + * Example: + * call ace_atragmx_fnc_restore_user_data + * + * Public: No + */ +#include "script_component.hpp" + +GVAR(currentUnit) = 0 max (profileNamespace getVariable ["ACE_ATragMX_currentUnit", 2]) min 2; +[profileNamespace getVariable ["ACE_ATragMX_currentGun", 0], false] call FUNC(change_gun); +GVAR(currentTarget) = 0 max (profileNamespace getVariable ["ACE_ATragMX_currentTarget", 0]) min 3; +GVAR(currentScopeUnit) = 0 max (profileNamespace getVariable ["ACE_ATragMX_currentScopeUnit", 0]) min 3; + +GVAR(atmosphereModeTBH) = profileNamespace getVariable ["ACE_ATragMX_atmosphereModeTBH", true]; +GVAR(altitude) = -1000 max (profileNamespace getVariable ["ACE_ATragMX_altitude", 0]) min 20000; +GVAR(temperature) = -50 max (profileNamespace getVariable ["ACE_ATragMX_temperature", 15]) min 160; +GVAR(barometricPressure) = 340 max (profileNamespace getVariable ["ACE_ATragMX_barometricPressure", 1013.25]) min 1350; +GVAR(relativeHumidity) = 0 max (profileNamespace getVariable ["ACE_ATragMX_relativeHumidity", 0.5]) min 1; + +GVAR(latitude) = profileNamespace getVariable ["ACE_ATragMX_latitude", [38, 38, 38, 38]]; +GVAR(directionOfFire) = profileNamespace getVariable ["ACE_ATragMX_directionOfFire", [0, 0, 0, 0]]; +GVAR(windSpeed1) = profileNamespace getVariable ["ACE_ATragMX_windSpeed1", [0, 0, 0, 0]]; +GVAR(windSpeed2) = profileNamespace getVariable ["ACE_ATragMX_windSpeed2", [0, 0, 0, 0]]; +GVAR(windDirection) = profileNamespace getVariable ["ACE_ATragMX_windDirection", [12, 12, 12, 12]]; +GVAR(inclinationAngle) = profileNamespace getVariable ["ACE_ATragMX_inclinationAngle", [0, 0, 0, 0]]; +GVAR(targetSpeed) = profileNamespace getVariable ["ACE_ATragMX_targetSpeed", [0, 0, 0, 0]]; +GVAR(targetRange) = profileNamespace getVariable ["ACE_ATragMX_targetRange", [0, 0, 0, 0]]; diff --git a/addons/atragmx/functions/fnc_show_atmo_env_data.sqf b/addons/atragmx/functions/fnc_show_atmo_env_data.sqf new file mode 100644 index 0000000000..9386956067 --- /dev/null +++ b/addons/atragmx/functions/fnc_show_atmo_env_data.sqf @@ -0,0 +1,25 @@ +/* + * Author: Ruthberg + * Shows/Hides the atmosphere and environmental data controls + * + * Arguments: + * visible - <BOOL> + * + * Return Value: + * Nothing + * + * Example: + * false call ace_atragmx_fnc_show_atmo_env_data + * + * Public: No + */ +#include "script_component.hpp" + +GVAR(showAtmoEnvData) = _this; + +{ctrlShow [_x, _this]} forEach [13000, 13001, 13002, 13003, 130030, 13004, 130040, 13005, 130050, 13006, 130060, 13007, 13008, 13009, 13010]; + +if (_this) then { + [] call FUNC(update_atmo_selection); + [] call FUNC(update_atmo_env_data); +}; diff --git a/addons/atragmx/functions/fnc_show_gun_ammo_data.sqf b/addons/atragmx/functions/fnc_show_gun_ammo_data.sqf new file mode 100644 index 0000000000..06ab20b3b7 --- /dev/null +++ b/addons/atragmx/functions/fnc_show_gun_ammo_data.sqf @@ -0,0 +1,24 @@ +/* + * Author: Ruthberg + * Shows/Hides the gun ammo data controls + * + * Arguments: + * visible - <BOOL> + * + * Return Value: + * Nothing + * + * Example: + * false call ace_atragmx_fnc_show_gun_ammo_data + * + * Public: No + */ +#include "script_component.hpp" + +GVAR(showGunAmmoData) = _this; + +{ctrlShow [_x, _this]} forEach [12000, 120000, 12001, 120010, 12002, 120020, 12003, 120030, 12004, 120040, 12005, 120050, 12006, 120060, 12007, 12008, 12009, 12010, 12011]; + +if (_this) then { + [] call FUNC(update_gun_ammo_data); +}; diff --git a/addons/atragmx/functions/fnc_show_main_page.sqf b/addons/atragmx/functions/fnc_show_main_page.sqf index 941c7559c8..607527a18e 100644 --- a/addons/atragmx/functions/fnc_show_main_page.sqf +++ b/addons/atragmx/functions/fnc_show_main_page.sqf @@ -17,5 +17,13 @@ GVAR(showMainPage) = _this; -{ctrlShow [_x, _this]} forEach [10, 100, 11, 110, 12, 120, 13, 130, 14, 140, 20, 200, 21, 210, 22, 220, 30, 300, 31, 310, 32, 320, 33, 330, 34, 340, 40, 400, 401, 402, 403, 41, 410, 411, 412, 42, 420, +{ctrlShow [_x, _this]} forEach [10, 100, 11, 110, 12, 120, 13, 130, 14, 140, 20, 200, 21, 210, 22, 220, 23, 230, 30, 300, 31, 310, 32, 320, 33, 330, 34, 340, 40, 400, 401, 402, 403, 41, 410, 411, 412, 42, 420, 500, 501, 502, 503, 600, 601, 602, 603, 1000, 2000, 3000, 4000, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008]; + +if (_this) then { + if (GVAR(atmosphereModeTBH)) then { + {ctrlShow [_x, false]} forEach [23, 230]; + } else { + {ctrlShow [_x, false]} forEach [21, 210, 22, 220]; + }; +}; diff --git a/addons/atragmx/functions/fnc_show_target_data.sqf b/addons/atragmx/functions/fnc_show_target_data.sqf new file mode 100644 index 0000000000..8b206fee3a --- /dev/null +++ b/addons/atragmx/functions/fnc_show_target_data.sqf @@ -0,0 +1,24 @@ +/* + * Author: Ruthberg + * Shows/Hides the target data controls + * + * Arguments: + * visible - <BOOL> + * + * Return Value: + * Nothing + * + * Example: + * false call ace_atragmx_fnc_show_target_data + * + * Public: No + */ +#include "script_component.hpp" + +GVAR(showTargetData) = _this; + +{ctrlShow [_x, _this]} forEach [14000, 140000, 14001, 140010, 14002, 140020, 140021, 14003, 140030, 14004, 140040, 140041, 14005, 140050, 14006, 140060, 14007, 14008, 14009, 14010, 14011]; + +if (_this) then { + [] call FUNC(update_target_data); +}; diff --git a/addons/atragmx/functions/fnc_show_target_range_assist.sqf b/addons/atragmx/functions/fnc_show_target_range_assist.sqf index 60de30930f..4f46932a0b 100644 --- a/addons/atragmx/functions/fnc_show_target_range_assist.sqf +++ b/addons/atragmx/functions/fnc_show_target_range_assist.sqf @@ -25,11 +25,9 @@ if (_this) then { ctrlSetText [7012, Str(parseNumber(ctrlText 320))]; ctrlSetText [7013, Str(parseNumber(ctrlText 340))]; - if (GVAR(currentUnit) != 2) then - { + if (GVAR(currentUnit) == 1) then { ctrlSetText [7016, "Yards"]; - } else - { + } else { ctrlSetText [7016, "Meters"]; }; }; \ No newline at end of file diff --git a/addons/atragmx/functions/fnc_show_target_speed_assist.sqf b/addons/atragmx/functions/fnc_show_target_speed_assist.sqf index 3ac05f3f4f..2e66b5ea7b 100644 --- a/addons/atragmx/functions/fnc_show_target_speed_assist.sqf +++ b/addons/atragmx/functions/fnc_show_target_speed_assist.sqf @@ -24,19 +24,15 @@ if (_this) then { ctrlSetText [8004, Str(Round((GVAR(targetRange) select GVAR(currentTarget))))]; - if (GVAR(currentUnit) != 2) then - { + if (GVAR(currentUnit) == 1) then { ctrlSetText [8008, "Yards"]; - } else - { + } else { ctrlSetText [8008, "Meters"]; }; - if (GVAR(currentUnit) != 1) then - { + if (GVAR(currentUnit) == 2) then { ctrlSetText [8011, "m/s"]; - } else - { + } else { ctrlSetText [8011, "mph"]; }; }; diff --git a/addons/atragmx/functions/fnc_store_user_data.sqf b/addons/atragmx/functions/fnc_store_user_data.sqf new file mode 100644 index 0000000000..81a4476d75 --- /dev/null +++ b/addons/atragmx/functions/fnc_store_user_data.sqf @@ -0,0 +1,36 @@ +/* + * Author: Ruthberg + * Saves user data into profileNamespace + * + * Arguments: + * Nothing + * + * Return Value: + * Nothing + * + * Example: + * call ace_atragmx_fnc_store_user_data + * + * Public: No + */ +#include "script_component.hpp" + +profileNamespace setVariable ["ACE_ATragMX_currentUnit", GVAR(currentUnit)]; +profileNamespace setVariable ["ACE_ATragMX_currentGun", GVAR(currentGun)]; +profileNamespace setVariable ["ACE_ATragMX_currentTarget", GVAR(currentTarget)]; +profileNamespace setVariable ["ACE_ATragMX_currentScopeUnit", GVAR(currentScopeUnit)]; + +profileNamespace setVariable ["ACE_ATragMX_atmosphereModeTBH", GVAR(atmosphereModeTBH)]; +profileNamespace setVariable ["ACE_ATragMX_altitude", GVAR(altitude)]; +profileNamespace setVariable ["ACE_ATragMX_temperature", GVAR(temperature)]; +profileNamespace setVariable ["ACE_ATragMX_barometricPressure", GVAR(barometricPressure)]; +profileNamespace setVariable ["ACE_ATragMX_relativeHumidity", GVAR(relativeHumidity)]; + +profileNamespace setVariable ["latitude", GVAR(latitude)]; +profileNamespace setVariable ["directionOfFire", GVAR(directionOfFire)]; +profileNamespace setVariable ["ACE_ATragMX_windSpeed1", GVAR(windSpeed1)]; +profileNamespace setVariable ["ACE_ATragMX_windSpeed2", GVAR(windSpeed2)]; +profileNamespace setVariable ["ACE_ATragMX_windDirection", GVAR(windDirection)]; +profileNamespace setVariable ["ACE_ATragMX_inclinationAngle", GVAR(inclinationAngle)]; +profileNamespace setVariable ["ACE_ATragMX_targetSpeed", GVAR(targetSpeed)]; +profileNamespace setVariable ["ACE_ATragMX_targetRange", GVAR(targetRange)]; diff --git a/addons/atragmx/functions/fnc_toggle_atmo_env_data.sqf b/addons/atragmx/functions/fnc_toggle_atmo_env_data.sqf new file mode 100644 index 0000000000..ce761c2216 --- /dev/null +++ b/addons/atragmx/functions/fnc_toggle_atmo_env_data.sqf @@ -0,0 +1,28 @@ +/* + * Author: Ruthberg + * Toggles the atmospheric data screen on/off + * + * Arguments: + * Apply new data? <NUMBER> + * + * Return Value: + * Nothing + * + * Example: + * 1 call ace_atragmx_fnc_toggle_atmo_env_data + * + * Public: No + */ +#include "script_component.hpp" + +if (ctrlVisible 13000) then { + false call FUNC(show_atmo_env_data); + true call FUNC(show_main_page); + + if (_this == 1) then { + call FUNC(calculate_target_solution); + }; +} else { + true call FUNC(show_atmo_env_data); + false call FUNC(show_main_page); +}; diff --git a/addons/atragmx/functions/fnc_toggle_gun_ammo_data.sqf b/addons/atragmx/functions/fnc_toggle_gun_ammo_data.sqf new file mode 100644 index 0000000000..0fd4b913b8 --- /dev/null +++ b/addons/atragmx/functions/fnc_toggle_gun_ammo_data.sqf @@ -0,0 +1,29 @@ +/* + * Author: Ruthberg + * Toggles the gun ammo data screen on/off + * + * Arguments: + * Apply new data? <NUMBER> + * + * Return Value: + * Nothing + * + * Example: + * 1 call ace_atragmx_fnc_toggle_gun_ammo_data + * + * Public: No + */ +#include "script_component.hpp" + +if (ctrlVisible 12000) then { + false call FUNC(show_gun_ammo_data); + true call FUNC(show_main_page); + + if (_this == 1) then { + call FUNC(update_zero_range); + call FUNC(calculate_target_solution); + }; +} else { + true call FUNC(show_gun_ammo_data); + false call FUNC(show_main_page); +}; diff --git a/addons/atragmx/functions/fnc_toggle_gun_list.sqf b/addons/atragmx/functions/fnc_toggle_gun_list.sqf index cd4acb1f76..714e6e848d 100644 --- a/addons/atragmx/functions/fnc_toggle_gun_list.sqf +++ b/addons/atragmx/functions/fnc_toggle_gun_list.sqf @@ -3,28 +3,26 @@ * Toggles the gun list screen on/off * * Arguments: - * Nothing + * change gun? <BOOL> * * Return Value: * Nothing * * Example: - * call ace_atragmx_fnc_toggle_gun_list + * false call ace_atragmx_fnc_toggle_gun_list * * Public: No */ #include "script_component.hpp" -if (ctrlVisible 6000) then -{ +if (ctrlVisible 6000) then { false call FUNC(show_gun_list); true call FUNC(show_main_page); if (_this) then { - (lbCurSel 6000) call FUNC(change_gun); + [lbCurSel 6000, true] call FUNC(change_gun); }; -} else -{ +} else { false call FUNC(show_main_page); true call FUNC(show_gun_list); }; diff --git a/addons/atragmx/functions/fnc_toggle_range_card.sqf b/addons/atragmx/functions/fnc_toggle_range_card.sqf index 572a4fe6ae..059bc7e40b 100644 --- a/addons/atragmx/functions/fnc_toggle_range_card.sqf +++ b/addons/atragmx/functions/fnc_toggle_range_card.sqf @@ -15,12 +15,10 @@ */ #include "script_component.hpp" -if (ctrlVisible 5006) then -{ +if (ctrlVisible 5006) then { false call FUNC(show_range_card); true call FUNC(show_main_page); -} else -{ +} else { false call FUNC(show_main_page); true call FUNC(show_range_card); diff --git a/addons/atragmx/functions/fnc_toggle_range_card_setup.sqf b/addons/atragmx/functions/fnc_toggle_range_card_setup.sqf index 71da18349b..738a154d17 100644 --- a/addons/atragmx/functions/fnc_toggle_range_card_setup.sqf +++ b/addons/atragmx/functions/fnc_toggle_range_card_setup.sqf @@ -3,25 +3,23 @@ * Toggles the range card setup screen on/off * * Arguments: - * Apply new range card settings <BOOL> + * Apply new range card settings <NUMBER> * * Return Value: * Nothing * * Example: - * call ace_atragmx_fnc_toggle_range_card_setup + * 1 call ace_atragmx_fnc_toggle_range_card_setup * * Public: No */ #include "script_component.hpp" -if (ctrlVisible 10000) then -{ +if (ctrlVisible 10000) then { false call FUNC(show_range_card_setup); true call FUNC(show_range_card); - if (_this == 1) then - { + if (_this == 1) then { GVAR(rangeCardStartRange) = 0 max Round(parseNumber(ctrlText 10003)) min 3000; GVAR(rangeCardEndRange) = 0 max Round(parseNumber(ctrlText 10004)) min 3000; GVAR(rangeCardIncrement) = 1 max Round(parseNumber(ctrlText 10005)) min 3000; @@ -29,8 +27,7 @@ if (ctrlVisible 10000) then [] call FUNC(calculate_range_card); [] call FUNC(update_range_card); }; -} else -{ +} else { false call FUNC(show_range_card); true call FUNC(show_range_card_setup); }; diff --git a/addons/atragmx/functions/fnc_toggle_target_data.sqf b/addons/atragmx/functions/fnc_toggle_target_data.sqf new file mode 100644 index 0000000000..90fefbf37e --- /dev/null +++ b/addons/atragmx/functions/fnc_toggle_target_data.sqf @@ -0,0 +1,28 @@ +/* + * Author: Ruthberg + * Toggles the target data screen on/off + * + * Arguments: + * Apply new data? <NUMBER> + * + * Return Value: + * Nothing + * + * Example: + * 1 call ace_atragmx_fnc_toggle_target_data + * + * Public: No + */ +#include "script_component.hpp" + +if (ctrlVisible 14000) then { + false call FUNC(show_target_data); + true call FUNC(show_main_page); + + if (_this == 1) then { + call FUNC(calculate_target_solution); + }; +} else { + true call FUNC(show_target_data); + false call FUNC(show_main_page); +}; diff --git a/addons/atragmx/functions/fnc_toggle_target_range_assist.sqf b/addons/atragmx/functions/fnc_toggle_target_range_assist.sqf index 04e9307ded..d13ef4fb2e 100644 --- a/addons/atragmx/functions/fnc_toggle_target_range_assist.sqf +++ b/addons/atragmx/functions/fnc_toggle_target_range_assist.sqf @@ -3,30 +3,30 @@ * Toggles the target range assist screen on/off * * Arguments: - * Nothing + * update range? <NUMBER> * * Return Value: * Nothing * * Example: - * call ace_atragmx_fnc_toggle_target_range_assist + * 1 call ace_atragmx_fnc_toggle_target_range_assist * * Public: No */ #include "script_component.hpp" -if (ctrlVisible 7000) then -{ +if (ctrlVisible 7000) then { false call FUNC(show_target_range_assist); true call FUNC(show_main_page); - if (_this == 1) then - { + if (_this == 1) then { ctrlSetText [320, Str(parseNumber(ctrlText 7012))]; + ctrlSetText [140040, Str(parseNumber(ctrlText 7012))]; ctrlSetText [340, Str(parseNumber(ctrlText 7013))]; + ctrlSetText [140060, Str(parseNumber(ctrlText 7013))]; + [] call FUNC(calculate_target_solution); }; -} else -{ +} else { false call FUNC(show_main_page); true call FUNC(show_target_range_assist); }; diff --git a/addons/atragmx/functions/fnc_toggle_target_speed_assist.sqf b/addons/atragmx/functions/fnc_toggle_target_speed_assist.sqf index 66ffaa5d07..e227cf0716 100644 --- a/addons/atragmx/functions/fnc_toggle_target_speed_assist.sqf +++ b/addons/atragmx/functions/fnc_toggle_target_speed_assist.sqf @@ -3,30 +3,29 @@ * Toggles the target speed assist screen on/off * * Arguments: - * Nothing + * update speed? <NUMBER> * * Return Value: * Nothing * * Example: - * call ace_atragmx_fnc_toggle_target_speed_assist + * 1 call ace_atragmx_fnc_toggle_target_speed_assist * * Public: No */ #include "script_component.hpp" -if (ctrlVisible 8000) then -{ +if (ctrlVisible 8000) then { false call FUNC(show_target_speed_assist); true call FUNC(show_main_page); - if (_this == 1) then - { + if (_this == 1) then { [] call FUNC(calculate_target_speed_assist); ctrlSetText [330, Str(parseNumber(ctrlText 8007))]; + ctrlSetText [140050, Str(parseNumber(ctrlText 8007))]; + [] call FUNC(calculate_target_solution); }; -} else -{ +} else { false call FUNC(show_main_page); true call FUNC(show_target_speed_assist); }; diff --git a/addons/atragmx/functions/fnc_update_atmo_env_data.sqf b/addons/atragmx/functions/fnc_update_atmo_env_data.sqf new file mode 100644 index 0000000000..8dcbc89280 --- /dev/null +++ b/addons/atragmx/functions/fnc_update_atmo_env_data.sqf @@ -0,0 +1,45 @@ +/* + * Author: Ruthberg + * Updates the atmospheric data fields + * + * Arguments: + * Nothing + * + * Return Value: + * Nothing + * + * Example: + * call ace_atragmx_fnc_update_atmo_env_data + * + * Public: No + */ +#include "script_component.hpp" + +ctrlSetFocus ((uiNamespace getVariable "ATragMX_Display") displayCtrl 13007); + +if (GVAR(currentUnit) != 1) then { + ctrlSetText [130040, Str(Round(GVAR(temperature) * 10) / 10)]; +} else { + ctrlSetText [130040, Str(Round((GVAR(temperature) * 1.8 + 32) * 10) / 10)]; +}; +if (GVAR(currentUnit) != 1) then { + ctrlSetText [130050, Str(Round(GVAR(barometricPressure)))]; +} else { + ctrlSetText [130050, Str(Round(GVAR(barometricPressure) / 33.8638866667 * 100) / 100)]; +}; +ctrlSetText [130060, Str(Round(GVAR(relativeHumidity) * 100 * 10) / 10)]; +if (GVAR(currentUnit) != 1) then { + ctrlSetText [130030, Str(Round(GVAR(altitude)))]; +} else { + ctrlSetText [130030, Str(Round(GVAR(altitude) * 3.2808399))]; +}; + +if (GVAR(currentUnit) == 2) then { + ctrlSetText [13003, "Altitude (m)"]; + ctrlSetText [13004, "temperature (C)"]; + ctrlSetText [13005, "Barom Pres (milibars)"]; +} else { + ctrlSetText [13003, "Altitude (ft)"]; + ctrlSetText [13004, "temperature (F)"]; + ctrlSetText [13005, "Barom Pres (in.merc.)"]; +}; diff --git a/addons/atragmx/functions/fnc_update_atmo_selection.sqf b/addons/atragmx/functions/fnc_update_atmo_selection.sqf new file mode 100644 index 0000000000..18036178b4 --- /dev/null +++ b/addons/atragmx/functions/fnc_update_atmo_selection.sqf @@ -0,0 +1,31 @@ +/* + * Author: Ruthberg + * Updates the atmospheric data input method + * + * Arguments: + * Nothing + * + * Return Value: + * Nothing + * + * Example: + * call ace_atragmx_fnc_update_atmo_selection + * + * Public: No + */ +#include "script_component.hpp" + +((uiNamespace getVariable "ATragMX_Display") displayCtrl 13001) ctrlEnable true; +((uiNamespace getVariable "ATragMX_Display") displayCtrl 13002) ctrlEnable true; + +if (GVAR(atmosphereModeTBH)) then { + ((uiNamespace getVariable "ATragMX_Display") displayCtrl 13002) ctrlEnable false; + {ctrlShow [_x, false]} forEach [13003, 130030]; + {ctrlShow [_x, true]} forEach [13005, 130050, 13006, 130060]; +} else { + ((uiNamespace getVariable "ATragMX_Display") displayCtrl 13001) ctrlEnable false; + {ctrlShow [_x, false]} forEach [13005, 130050, 13006, 130060]; + {ctrlShow [_x, true]} forEach [13003, 130030]; +}; + +[] call FUNC(update_atmo_env_data); diff --git a/addons/atragmx/functions/fnc_update_atmosphere.sqf b/addons/atragmx/functions/fnc_update_atmosphere.sqf index 68a60f72e9..fa555f50e7 100644 --- a/addons/atragmx/functions/fnc_update_atmosphere.sqf +++ b/addons/atragmx/functions/fnc_update_atmosphere.sqf @@ -15,10 +15,19 @@ */ #include "script_component.hpp" -ctrlSetText [200, Str(Round(GVAR(temperature) * 10) / 10)]; -if (GVAR(currentUnit) == 1) then { - ctrlSetText [210, Str(Round(GVAR(barometricPressure) * 100) / 100)]; +if (GVAR(currentUnit) != 1) then { + ctrlSetText [200, Str(Round(GVAR(temperature) * 10) / 10)]; } else { + ctrlSetText [200, Str(Round((GVAR(temperature) * 1.8 + 32) * 10) / 10)]; +}; +if (GVAR(currentUnit) != 1) then { ctrlSetText [210, Str(Round(GVAR(barometricPressure)))]; +} else { + ctrlSetText [210, Str(Round(GVAR(barometricPressure) / 33.8638866667 * 100) / 100)]; }; ctrlSetText [220, Str(Round(GVAR(relativeHumidity) * 100 * 10) / 10)]; +if (GVAR(currentUnit) != 1) then { + ctrlSetText [230, Str(Round(GVAR(altitude)))]; +} else { + ctrlSetText [230, Str(Round(GVAR(altitude) * 3.2808399))]; +}; diff --git a/addons/atragmx/functions/fnc_update_gun.sqf b/addons/atragmx/functions/fnc_update_gun.sqf index 1e12439878..f3d173ba11 100644 --- a/addons/atragmx/functions/fnc_update_gun.sqf +++ b/addons/atragmx/functions/fnc_update_gun.sqf @@ -16,37 +16,29 @@ #include "script_component.hpp" ctrlSetText [1000, GVAR(workingMemory) select 0]; -if (GVAR(currentUnit) == 1) then -{ - ctrlSetText [ 100, Str(Round((GVAR(workingMemory) select 5) / 2.54 * 100) / 100)]; -} else -{ - ctrlSetText [ 100, Str(Round((GVAR(workingMemory) select 5) * 100) / 100)]; +if (GVAR(currentUnit) != 2) then { + ctrlSetText [100, Str(Round((GVAR(workingMemory) select 5) / 2.54 * 100) / 100)]; +} else { + ctrlSetText [100, Str(Round((GVAR(workingMemory) select 5) * 100) / 100)]; }; -if (GVAR(currentUnit) == 1) then -{ - ctrlSetText [ 110, Str(Round((GVAR(workingMemory) select 12) * 15.4323584))]; -} else -{ - ctrlSetText [ 110, Str(Round(GVAR(workingMemory) select 12))]; +if (GVAR(currentUnit) != 2) then { + ctrlSetText [110, Str(Round((GVAR(workingMemory) select 12) * 15.4323584))]; +} else { + ctrlSetText [110, Str(Round(GVAR(workingMemory) select 12))]; }; if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false])) then { - ctrlSetText [ 120, Str(Round((GVAR(workingMemory) select 15) * 1000) / 1000)]; + ctrlSetText [120, Str(Round((GVAR(workingMemory) select 15) * 1000) / 1000)]; } else { - ctrlSetText [ 120, Str(Round((GVAR(workingMemory) select 4) * -1000 * 1000) / 1000)]; + ctrlSetText [120, Str(Round((GVAR(workingMemory) select 4) * -1000 * 1000) / 1000)]; }; -if (GVAR(currentUnit) == 1) then -{ +if (GVAR(currentUnit) != 2) then { ctrlSetText [130, Str(Round((GVAR(workingMemory) select 1) * 3.2808399))]; -} else -{ +} else { ctrlSetText [130, Str(Round(GVAR(workingMemory) select 1))]; }; -if (GVAR(currentUnit) == 2) then -{ +if (GVAR(currentUnit) != 1) then { ctrlSetText [140, Str(Round(GVAR(workingMemory) select 2))]; -} else -{ +} else { ctrlSetText [140, Str(Round((GVAR(workingMemory) select 2) * 1.0936133))]; }; diff --git a/addons/atragmx/functions/fnc_update_gun_ammo_data.sqf b/addons/atragmx/functions/fnc_update_gun_ammo_data.sqf new file mode 100644 index 0000000000..3627197185 --- /dev/null +++ b/addons/atragmx/functions/fnc_update_gun_ammo_data.sqf @@ -0,0 +1,74 @@ +/* + * Author: Ruthberg + * Updates the gun ammo data fields + * + * Arguments: + * Nothing + * + * Return Value: + * Nothing + * + * Example: + * call ace_atragmx_fnc_update_gun_ammo_data + * + * Public: No + */ +#include "script_component.hpp" + +ctrlSetFocus ((uiNamespace getVariable "ATragMX_Display") displayCtrl 12008); + +if (GVAR(currentUnit) != 2) then { + ctrlSetText [120000, Str(Round((GVAR(workingMemory) select 5) / 2.54 * 100) / 100)]; +} else { + ctrlSetText [120000, Str(Round((GVAR(workingMemory) select 5) * 100) / 100)]; +}; +if (GVAR(currentUnit) != 2) then { + ctrlSetText [120010, Str(Round((GVAR(workingMemory) select 12) * 15.4323584))]; +} else { + ctrlSetText [120010, Str(Round(GVAR(workingMemory) select 12))]; +}; +if (GVAR(currentUnit) != 2) then { + ctrlSetText [120020, Str(Round((GVAR(workingMemory) select 13) / 10 / 2.54 * 1000) / 1000)]; +} else { + ctrlSetText [120020, Str(Round((GVAR(workingMemory) select 13) * 1000) / 1000)]; +}; +if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false])) then { + ctrlSetText [120030, Str(Round((GVAR(workingMemory) select 15) * 1000) / 1000)]; +} else { + ctrlSetText [120030, Str(Round((GVAR(workingMemory) select 4) * -1000 * 1000) / 1000)]; +}; +if (GVAR(currentUnit) != 2) then { + ctrlSetText [120040, Str(Round((GVAR(workingMemory) select 14) / 2.54 * 10) / 10)]; +} else { + ctrlSetText [120040, Str(Round((GVAR(workingMemory) select 14) * 100) / 100)]; +}; +if (GVAR(currentUnit) != 2) then { + ctrlSetText [120050, Str(Round((GVAR(workingMemory) select 1) * 3.2808399))]; +} else { + ctrlSetText [120050, Str(Round(GVAR(workingMemory) select 1))]; +}; +if (GVAR(currentUnit) == 2) then { + ctrlSetText [120060, Str(Round(GVAR(workingMemory) select 2))]; +} else { + ctrlSetText [120060, Str(Round((GVAR(workingMemory) select 2) * 1.0936133))]; +}; + +if (GVAR(currentUnit) == 2) then { + ctrlSetText [12000, "Bore (cm)"]; + ctrlSetText [12001, "Bullet Weight (grams)"]; + ctrlSetText [12002, "Bullet Diam (cm)"]; + ctrlSetText [12004, "Rifle Twist (cm/trn)"]; + ctrlSetText [12005, "Muzzle Velocity (m/s)"]; +} else { + ctrlSetText [12000, "Bore (inches)"]; + ctrlSetText [12001, "Bullet Weight (grains)"]; + ctrlSetText [12002, "Bullet Diam (inches)"]; + ctrlSetText [12004, "Rifle Twist (inches/trn)"]; + ctrlSetText [12005, "Muzzle Velocity (feet/sec)"]; +}; + +if (GVAR(currentUnit) == 1) then { + ctrlSetText [12006, "Zero Range (yards)"]; +} else { + ctrlSetText [12006, "Zero Range (meters)"]; +}; diff --git a/addons/atragmx/functions/fnc_update_range_card.sqf b/addons/atragmx/functions/fnc_update_range_card.sqf index 358a74ce5d..871e5fa268 100644 --- a/addons/atragmx/functions/fnc_update_range_card.sqf +++ b/addons/atragmx/functions/fnc_update_range_card.sqf @@ -20,11 +20,9 @@ _lastColumnOutput = ""; ctrlSetText [5006, (GVAR(rangeCardLastColumns) select GVAR(rangeCardCurrentColumn))]; -if (GVAR(currentUnit) != 2) then -{ +if (GVAR(currentUnit) == 1) then { ctrlSetText [5003, "Yards"]; -} else -{ +} else { ctrlSetText [5003, "Meters"]; }; @@ -39,22 +37,16 @@ lnbClear 5007; _velocity = _x select 5; _kineticEnergy = _x select 6; - switch (GVAR(currentScopeUnit)) do - { - case 0: - { + switch (GVAR(currentScopeUnit)) do { + case 0: { _elevation = _elevation / 3.38; _windage = _windage / 3.38; - }; - - case 2: - { + }; + case 2: { _elevation = _elevation * 1.047; _windage = _windage * 1.047; }; - - case 3: - { + case 3: { _elevationScopeStep = (GVAR(workingMemory) select 7); _windageScopeStep = (GVAR(workingMemory) select 8); @@ -67,35 +59,25 @@ lnbClear 5007; _windageOutput = Str(Round(_windage * 100) / 100); _rangeOutput = Str(_range); - if (_velocity < 340.29) then - { + if (_velocity < 340.29) then { _rangeOutput = _rangeOutput + "*"; }; - if (GVAR(currentUnit) == 1) then - { + if (GVAR(currentUnit) == 1) then { _velocity = _velocity * 3.2808399; }; - switch (GVAR(rangeCardCurrentColumn)) do - { - case 0: - { + switch (GVAR(rangeCardCurrentColumn)) do { + case 0: { _lastColumnOutput = Str(Round(_lead * 100) / 100); }; - - case 1: - { + case 1: { _lastColumnOutput = Str(Round(_velocity)); }; - - case 2: - { + case 2: { _lastColumnOutput = Str(Round(_kineticEnergy)); }; - - case 3: - { + case 3: { _lastColumnOutput = Str(Round(_TOF * 100) / 100); } }; diff --git a/addons/atragmx/functions/fnc_update_result.sqf b/addons/atragmx/functions/fnc_update_result.sqf index addd1034b2..6898920eac 100644 --- a/addons/atragmx/functions/fnc_update_result.sqf +++ b/addons/atragmx/functions/fnc_update_result.sqf @@ -27,10 +27,8 @@ _windageRel = _windageAbs - _windageCur; _lead = (GVAR(leadOutput) select GVAR(currentTarget)); -switch (GVAR(currentScopeUnit)) do -{ - case 0: - { +switch (GVAR(currentScopeUnit)) do { + case 0: { _elevationAbs = _elevationAbs / 3.38; _windageAbs = _windageAbs / 3.38; @@ -40,9 +38,7 @@ switch (GVAR(currentScopeUnit)) do _elevationCur = _elevationCur / 3.38; _windageCur = _windageCur / 3.38; }; - - case 2: - { + case 2: { _elevationAbs = _elevationAbs * 1.047; _windageAbs = _windageAbs * 1.047; @@ -52,9 +48,7 @@ switch (GVAR(currentScopeUnit)) do _elevationCur = _elevationCur * 1.047; _windageCur = _windageCur * 1.047; }; - - case 3: - { + case 3: { _elevationScopeStep = (GVAR(workingMemory) select 7); _windageScopeStep = (GVAR(workingMemory) select 8); diff --git a/addons/atragmx/functions/fnc_update_target.sqf b/addons/atragmx/functions/fnc_update_target.sqf index 18d7a72cd2..30b33eb55f 100644 --- a/addons/atragmx/functions/fnc_update_target.sqf +++ b/addons/atragmx/functions/fnc_update_target.sqf @@ -15,23 +15,8 @@ */ #include "script_component.hpp" -if (!isNil QGVAR(windSpeed)) then -{ - ctrlSetText [300, Str(Round((GVAR(windSpeed) select GVAR(currentTarget)) * 100) / 100)]; -}; -if (!isNil QGVAR(windDirection)) then -{ - ctrlSetText [310, Str(Round((GVAR(windDirection) select GVAR(currentTarget))))]; -}; -if (!isNil QGVAR(inclinationAngle)) then -{ - ctrlSetText [320, Str(Round((GVAR(inclinationAngle) select GVAR(currentTarget))))]; -}; -if (!isNil QGVAR(targetSpeed)) then -{ - ctrlSetText [330, Str(Round((GVAR(targetSpeed) select GVAR(currentTarget)) * 100) / 100)]; -}; -if (!isNil QGVAR(targetRange)) then -{ - ctrlSetText [340, Str(Round((GVAR(targetRange) select GVAR(currentTarget))))]; -}; +ctrlSetText [300, Str(Round((GVAR(windSpeed1) select GVAR(currentTarget)) * 100) / 100)]; +ctrlSetText [310, Str(Round((GVAR(windDirection) select GVAR(currentTarget))))]; +ctrlSetText [320, Str(Round((GVAR(inclinationAngle) select GVAR(currentTarget))))]; +ctrlSetText [330, Str(Round((GVAR(targetSpeed) select GVAR(currentTarget)) * 100) / 100)]; +ctrlSetText [340, Str(Round((GVAR(targetRange) select GVAR(currentTarget))))]; diff --git a/addons/atragmx/functions/fnc_update_target_data.sqf b/addons/atragmx/functions/fnc_update_target_data.sqf new file mode 100644 index 0000000000..35711acd5b --- /dev/null +++ b/addons/atragmx/functions/fnc_update_target_data.sqf @@ -0,0 +1,40 @@ +/* + * Author: Ruthberg + * Updates all target column input fields + * + * Arguments: + * Nothing + * + * Return Value: + * Nothing + * + * Example: + * call ace_atragmx_fnc_update_target + * + * Public: No + */ +#include "script_component.hpp" + +ctrlSetText [140000, Str(Round((GVAR(latitude) select GVAR(currentTarget)) * 100) / 100)]; +ctrlSetText [140010, Str(Round((GVAR(directionOfFire) select GVAR(currentTarget)) * 100) / 100)]; +ctrlSetText [140020, Str(Round((GVAR(windSpeed1) select GVAR(currentTarget)) * 100) / 100)]; +ctrlSetText [140021, Str(Round((GVAR(windSpeed2) select GVAR(currentTarget)) * 100) / 100)]; +ctrlSetText [140030, Str(Round((GVAR(windDirection) select GVAR(currentTarget))))]; +ctrlSetText [140040, Str(Round((GVAR(inclinationAngle) select GVAR(currentTarget))))]; +ctrlSetText [140041, Str(floor(cos(GVAR(inclinationAngle) select GVAR(currentTarget)) * 100) / 100)]; +ctrlSetText [140050, Str(Round((GVAR(targetSpeed) select GVAR(currentTarget)) * 100) / 100)]; +ctrlSetText [140060, Str(Round((GVAR(targetRange) select GVAR(currentTarget))))]; + +if (GVAR(currentUnit) == 2) then { + ctrlSetText [14002, "Wind Speed (m/s)"]; + ctrlSetText [14005, "Target Speed (m/s)"]; +} else { + ctrlSetText [14002, "Wind Speed (mph)"]; + ctrlSetText [14005, "Target Speed (mph)"]; +}; + +if (GVAR(currentUnit) == 1) then { + ctrlSetText [14006, "Target Range (yards)"]; +} else { + ctrlSetText [14006, "Target Range (meters)"]; +}; diff --git a/addons/atragmx/functions/fnc_update_unit_selection.sqf b/addons/atragmx/functions/fnc_update_unit_selection.sqf index 2882954c5b..77d96bfdd6 100644 --- a/addons/atragmx/functions/fnc_update_unit_selection.sqf +++ b/addons/atragmx/functions/fnc_update_unit_selection.sqf @@ -22,6 +22,10 @@ ((uiNamespace getVariable "ATragMX_Display") displayCtrl 600 + GVAR(currentUnit)) ctrlEnable false; [] call FUNC(update_gun); +[] call FUNC(update_gun_ammo_data); [] call FUNC(update_atmosphere); +[] call FUNC(update_atmo_env_data); [] call FUNC(update_target); +[] call FUNC(update_target_data); + [] call FUNC(update_result); diff --git a/addons/atragmx/functions/fnc_update_zero_range.sqf b/addons/atragmx/functions/fnc_update_zero_range.sqf index e7f0c2c301..6e2a9c566c 100644 --- a/addons/atragmx/functions/fnc_update_zero_range.sqf +++ b/addons/atragmx/functions/fnc_update_zero_range.sqf @@ -28,9 +28,8 @@ _dragModel = GVAR(workingMemory) select 16; _atmosphereModel = GVAR(workingMemory) select 17; private ["_zeroRange"]; -_zeroRange = Round(parseNumber(ctrlText 140)); -if (GVAR(currentUnit) != 2) then -{ +_zeroRange = Round(parseNumber(ctrlText 120060)); +if (GVAR(currentUnit) == 1) then { _zeroRange = _zeroRange / 1.0936133; }; if (_zeroRange < 10) exitWith { @@ -38,18 +37,14 @@ if (_zeroRange < 10) exitWith { GVAR(workingMemory) set [3, 0]; }; -private ["_temperature", "_barometricPressure", "_relativeHumidity"]; +private ["_altitude", "_temperature", "_barometricPressure", "_relativeHumidity"]; +_altitude = GVAR(altitude); _temperature = GVAR(temperature); _barometricPressure = GVAR(barometricPressure); _relativeHumidity = GVAR(relativeHumidity); -if (GVAR(currentUnit) == 1) then -{ - _temperature = (_temperature - 32) / 1.8; - _barometricPressure = _barometricPressure * 33.8638866667; -}; private ["_result"]; -_result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000, 0, 0, 0, 0, _zeroRange, _bc, _dragModel, _atmosphereModel, false] call FUNC(calculate_solution); +_result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000, 0, 0, 0, 0, _zeroRange, _bc, _dragModel, _atmosphereModel, false, 1.5, 0, 0] call FUNC(calculate_solution); GVAR(workingMemory) set [2, _zeroRange]; GVAR(workingMemory) set [3, _scopeBaseAngle + (_result select 0) / 60]; From 1e446fb0607929fd0ca4cf849ab09055eebd15c3 Mon Sep 17 00:00:00 2001 From: Tachii <zaveruha007@gmail.com> Date: Sat, 18 Apr 2015 02:01:09 +0300 Subject: [PATCH 113/257] Update stringtable.xml --- addons/movement/stringtable.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/movement/stringtable.xml b/addons/movement/stringtable.xml index eb91496de8..efed949036 100644 --- a/addons/movement/stringtable.xml +++ b/addons/movement/stringtable.xml @@ -11,7 +11,7 @@ <Italian>Mostra peso in libbre</Italian> <Portuguese>Mostrar peso em libras</Portuguese> <Hungarian>Súly megjelenítése fontban.</Hungarian> - <Russian>Показать вес в фунтах</Russian> + <Russian>Показывать вес в фунтах</Russian> </Key> <Key ID="STR_ACE_Movement_Weight"> <English>Weight:</English> @@ -32,7 +32,7 @@ <Polish>Wspinaczka</Polish> <Spanish>Trepar</Spanish> <Czech>Vylézt</Czech> - <Russian>Подняться</Russian> + <Russian>Взобраться</Russian> <Hungarian>Mászás</Hungarian> <Italian>Arrampicati</Italian> </Key> @@ -43,7 +43,7 @@ <Polish>Nie możesz wspiąć się tutaj</Polish> <Spanish>No se puede trepar aquí</Spanish> <Czech>Zde není možné vylézt</Czech> - <Russian>Не можете подняться здесь</Russian> + <Russian>Здесь невозможно взобраться</Russian> <Hungarian>Itt nem tudsz mászni</Hungarian> <Italian>Non puoi arrampicarti qui</Italian> </Key> From 3ec5acbdb0a72f04ae89485fd442485d64196fe1 Mon Sep 17 00:00:00 2001 From: commy2 <commy-2@gmx.de> Date: Sat, 18 Apr 2015 01:05:30 +0200 Subject: [PATCH 114/257] stuff --- addons/common/config.cpp | 8 ++++++++ addons/common/functions/fnc_errorMessage.sqf | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/addons/common/config.cpp b/addons/common/config.cpp index 769ba37de1..21d6a6facb 100644 --- a/addons/common/config.cpp +++ b/addons/common/config.cpp @@ -152,3 +152,11 @@ class CfgUIGrids { }; }; }; + +/* +// check dll +class RscStandardDisplay; +class RscDisplayMain: RscStandardDisplay { + onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscDisplayMain"",'GUI')] call (uinamespace getvariable 'BIS_fnc_initDisplay'); [ARR_5('header','tail',{0},{},_this select 0)] call COMPILE_FILE(functions\fnc_errorMessage)); +}; +*/ diff --git a/addons/common/functions/fnc_errorMessage.sqf b/addons/common/functions/fnc_errorMessage.sqf index 46f2d2c9d4..e061772942 100644 --- a/addons/common/functions/fnc_errorMessage.sqf +++ b/addons/common/functions/fnc_errorMessage.sqf @@ -3,7 +3,7 @@ * Stops simulation and opens a textbox with error message. * * Arguments: - * 0: Error name <STRING> + * ? * * Return Value: * None @@ -26,7 +26,7 @@ if (typeName _textMessage == "STRING") then { _textMessage = parseText _textMessage; }; -(call BIS_fnc_displayMission) createDisplay "RscDisplayCommonMessagePause"; +(ARR_SELECT(_this,4,call BIS_fnc_displayMission)) createDisplay "RscDisplayCommonMessagePause"; private ["_display", "_ctrlRscMessageBox", "_ctrlBcgCommonTop", "_ctrlBcgCommon", "_ctrlText", "_ctrlBackgroundButtonOK", "_ctrlBackgroundButtonMiddle", "_ctrlBackgroundButtonCancel", "_ctrlButtonOK", "_ctrlButtonCancel"]; From bd3ef35c88e9d54f4bc0f51c84ed89b861109bcf Mon Sep 17 00:00:00 2001 From: Tachii <zaveruha007@gmail.com> Date: Sat, 18 Apr 2015 02:07:49 +0300 Subject: [PATCH 115/257] Update stringtable.xml --- addons/hearing/stringtable.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index f57bc2545a..25eedec9b9 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -19,7 +19,7 @@ <Spanish>Los tapones para los oídos permiten al usuario operar armamento ruidoso sin sufrir pérdida de audición.</Spanish> <Polish>Stopery do uszu umożliwiają użytkownikowi przebywać w pobliżu głośnej broni bez poniesienia konsekwencji jaką jest utrata słuchu.</Polish> <Czech>Ochranné špunty umožňují uživateli, aby neutrpěl zranění jeho sluchu v blízkosti hlasitých zbraní.</Czech> - <Russian>Беруши позволяют избежать потери слуха при близкой громкой стрельбе.</Russian> + <Russian>Беруши позволяют носителю находиться возле громкого вооружения без потери слуха</Russian> <French>Bouchons Anti-Bruits pour la prévention des traumatismes sonores aigus.</French> <Hungarian>Erősebb hanghatásoktól védő füldugó, megakadályozza a nagy hanggal járó fegyverzettől való halláskárosodást.</Hungarian> <Portuguese>Protetor para ouvidos permitem que o usuário esteja próximo a ruídos sem danificar sua audição.</Portuguese> From 0bb3238db18050339f2bda1640a6fa6fb9ec5a9f Mon Sep 17 00:00:00 2001 From: Tachii <zaveruha007@gmail.com> Date: Sat, 18 Apr 2015 02:09:59 +0300 Subject: [PATCH 116/257] Update stringtable.xml --- addons/disposable/stringtable.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/disposable/stringtable.xml b/addons/disposable/stringtable.xml index 214b3f228a..9b7121e3ca 100644 --- a/addons/disposable/stringtable.xml +++ b/addons/disposable/stringtable.xml @@ -31,7 +31,7 @@ <Polish>Wstępnie załadowana atrapa pocisku</Polish> <Spanish>Preloaded Missile Dummy</Spanish> <Hungarian>Előtöltött műrakéta</Hungarian> - <Russian>Заряженная ракетная пустышка</Russian> + <Russian>Предзаряженная Рокетная Болванка</Russian> <Italian>Missile stupido precaricato</Italian> </Key> </Package> From 7f942a06f8d4f8fe93471ad61bf3717ade6c0efb Mon Sep 17 00:00:00 2001 From: Tachii <zaveruha007@gmail.com> Date: Sat, 18 Apr 2015 02:11:16 +0300 Subject: [PATCH 117/257] Update stringtable.xml --- addons/logistics_uavbattery/stringtable.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/logistics_uavbattery/stringtable.xml b/addons/logistics_uavbattery/stringtable.xml index b60353e29c..23588586cf 100644 --- a/addons/logistics_uavbattery/stringtable.xml +++ b/addons/logistics_uavbattery/stringtable.xml @@ -11,7 +11,7 @@ <Czech>Dron je nabitý</Czech> <Portuguese>O VANT está cheio</Portuguese> <Italian>Il drone è pieno</Italian> - <Russian>БПЛА заполнен</Russian> + <Russian>БПЛА полностью заряжен</Russian> </Key> <Key ID="STR_ACE_logistics_uavbattery_NoBattery"> <English>You need a UAV Battery</English> @@ -59,7 +59,7 @@ <Czech>Používané k dobíjení UAV</Czech> <Portuguese>Usada para reabastecer VANT</Portuguese> <Italian>Usata per ricaricare la Batteria dell'UAV</Italian> - <Russian>Используется для зарядки БПЛА</Russian> + <Russian>Используется для зарядки переносных БПЛА</Russian> </Key> <Key ID="STR_ACE_logistics_uavbattery_Battery_Recharge"> <English>Recharging ...</English> From ed2e847247d4d91b30c2731975b416bf1713649c Mon Sep 17 00:00:00 2001 From: PabstMirror <elephantisaterriblemascot@gmail.com> Date: Fri, 17 Apr 2015 18:13:09 -0500 Subject: [PATCH 118/257] More Privates --- addons/maptools/XEH_postInitClient.sqf | 1 + addons/maptools/functions/fnc_addLineMarker.sqf | 9 +++++---- .../functions/fnc_calculateMapScale.sqf | 2 ++ .../functions/fnc_copyMapReceiveMarkers.sqf | 1 + addons/maptools/functions/fnc_handleKeyDown.sqf | 9 +++------ .../functions/fnc_handleMouseButton.sqf | 5 ++--- .../maptools/functions/fnc_handleMouseMove.sqf | 1 + .../maptools/functions/fnc_isInsideMapTool.sqf | 1 + addons/maptools/functions/fnc_openMapGps.sqf | 5 ++++- .../maptools/functions/fnc_openMapGpsUpdate.sqf | 2 ++ .../maptools/functions/fnc_removeLineMarker.sqf | 2 +- .../maptools/functions/fnc_updateLineMarker.sqf | 9 +++++---- .../functions/fnc_updateMapToolMarkers.sqf | 2 ++ .../functions/fnc_reloadLauncher.sqf | 7 +------ .../functions/fnc_handleInitPostServer.sqf | 6 ++---- addons/respawn/functions/fnc_initRallypoint.sqf | 17 ++++++----------- addons/respawn/functions/fnc_module.sqf | 8 ++++---- .../functions/fnc_moduleFriendlyFire.sqf | 10 +++------- .../respawn/functions/fnc_moduleRallypoint.sqf | 8 +++----- addons/respawn/functions/fnc_moveRallypoint.sqf | 7 ++++--- .../functions/fnc_removeDisconnectedPlayer.sqf | 2 +- addons/respawn/functions/fnc_restoreGear.sqf | 5 ++--- addons/safemode/XEH_postInit.sqf | 1 + addons/scopes/functions/fnc_adjustScope.sqf | 6 +++--- addons/scopes/functions/fnc_adjustZero.sqf | 7 ++++--- .../functions/fnc_applyScopeAdjustment.sqf | 4 ++-- addons/scopes/functions/fnc_canAdjustZero.sqf | 7 ++++--- tools/search_privates.py | 2 ++ 28 files changed, 72 insertions(+), 74 deletions(-) diff --git a/addons/maptools/XEH_postInitClient.sqf b/addons/maptools/XEH_postInitClient.sqf index 26fb005e9f..8129a75b15 100644 --- a/addons/maptools/XEH_postInitClient.sqf +++ b/addons/maptools/XEH_postInitClient.sqf @@ -24,6 +24,7 @@ GVAR(drawing_controls) = [36732, 36733, 36734, 36735, 36736, 36737]; // The thread dies as soon as the mission start, so it's not really compiting for scheduler space. [] spawn { _fnc_installMapEvents = { + private "_d"; _d = _this; ((finddisplay _d) displayctrl 51) ctrlAddEventHandler ["MouseMoving", {_this call FUNC(handleMouseMove);}]; ((finddisplay _d) displayctrl 51) ctrlAddEventHandler ["MouseButtonDown", {[1, _this] call FUNC(handleMouseButton);}]; diff --git a/addons/maptools/functions/fnc_addLineMarker.sqf b/addons/maptools/functions/fnc_addLineMarker.sqf index 83e983d0e3..157891a262 100644 --- a/addons/maptools/functions/fnc_addLineMarker.sqf +++ b/addons/maptools/functions/fnc_addLineMarker.sqf @@ -15,10 +15,11 @@ */ #include "script_component.hpp" -_name = _this select 0; -_startPos = _this select 1; -_difPos = (_this select 2) vectorDiff _startPos ; -_color = _this select 3; +PARAMS_4(_name,_startPos,_endPos,_color); + +private ["_marker", "_difPos", "_mag"]; + +_difPos = _endPos vectorDiff _startPos; _marker = createMarkerLocal [_name, _startPos]; _name setMarkerShapeLocal "RECTANGLE"; diff --git a/addons/maptools/functions/fnc_calculateMapScale.sqf b/addons/maptools/functions/fnc_calculateMapScale.sqf index 700e089a88..4723a4f5e1 100644 --- a/addons/maptools/functions/fnc_calculateMapScale.sqf +++ b/addons/maptools/functions/fnc_calculateMapScale.sqf @@ -12,6 +12,8 @@ */ #include "script_component.hpp" +private ["_screenOffset", "_pos"]; + _pos = ((finddisplay 12) displayctrl 51) ctrlMapScreenToWorld [0.5, 0.5]; _screenOffset = ((finddisplay 12) displayctrl 51) posWorldToScreen [(_pos select 0) + 100, (_pos select 1)]; diff --git a/addons/maptools/functions/fnc_copyMapReceiveMarkers.sqf b/addons/maptools/functions/fnc_copyMapReceiveMarkers.sqf index e3de77316a..44f6ed6203 100644 --- a/addons/maptools/functions/fnc_copyMapReceiveMarkers.sqf +++ b/addons/maptools/functions/fnc_copyMapReceiveMarkers.sqf @@ -15,6 +15,7 @@ PARAMS_1(_lineMarkers); { + private "_marker"; _marker = _x; //Add marker if we don't already have it if (({(_x select 0) == (_marker select 0)} count GVAR(drawing_lineMarkers)) == 0) then { diff --git a/addons/maptools/functions/fnc_handleKeyDown.sqf b/addons/maptools/functions/fnc_handleKeyDown.sqf index d2b3a060b8..d1f9e199c9 100644 --- a/addons/maptools/functions/fnc_handleKeyDown.sqf +++ b/addons/maptools/functions/fnc_handleKeyDown.sqf @@ -15,13 +15,10 @@ #include "script_component.hpp" -private ["_dir", "_params", "_control", "_button", "_screenPos", "_shiftKey", "_ctrlKey", "_handled", "_pos"]; +PARAMS_5(_display,_code,_shiftKey,_ctrlKey,_altKey); + +private ["_handled", "_relPos", "_diffVector", "_magDiffVector", "_lambdaLong", "_lambdaTrasAbs"]; -_display = _this select 0; -_code = _this select 1; -_shiftKey = _this select 2; -_ctrlKey = _this select 3; -_altKey = _this select 4; _handled = false; #define DIK_ESCAPE 0x01 diff --git a/addons/maptools/functions/fnc_handleMouseButton.sqf b/addons/maptools/functions/fnc_handleMouseButton.sqf index 8db6b8b0f1..16cabe9719 100644 --- a/addons/maptools/functions/fnc_handleMouseButton.sqf +++ b/addons/maptools/functions/fnc_handleMouseButton.sqf @@ -13,10 +13,9 @@ #include "script_component.hpp" -private ["_dir", "_params", "_control", "_button", "_screenPos", "_shiftKey", "_ctrlKey", "_handled", "_pos"]; +private ["_control", "_button", "_screenPos", "_shiftKey", "_ctrlKey", "_handled", "_pos", "_altKey", "_gui", "_marker"]; -_dir = _this select 0; -_params = _this select 1; +PARAMS_2(_dir,_params); _control = _params select 0; _button = _params select 1; _screenPos = [_params select 2, _params select 3]; diff --git a/addons/maptools/functions/fnc_handleMouseMove.sqf b/addons/maptools/functions/fnc_handleMouseMove.sqf index 4111c8fad4..2148c5a162 100644 --- a/addons/maptools/functions/fnc_handleMouseMove.sqf +++ b/addons/maptools/functions/fnc_handleMouseMove.sqf @@ -51,6 +51,7 @@ if (GVAR(mapTool_isDragging)) exitWith { // Rotation if (GVAR(mapTool_isRotating)) exitWith { + private "_angle"; // Get new angle _angle = (180 + ((GVAR(mousePosition) select 0) - (GVAR(mapTool_startPos) select 0)) atan2 ((GVAR(mousePosition) select 1) - (GVAR(mapTool_startPos) select 1)) mod 360); GVAR(mapTool_angle) = GVAR(mapTool_startAngle) + _angle - GVAR(mapTool_startDragAngle); diff --git a/addons/maptools/functions/fnc_isInsideMapTool.sqf b/addons/maptools/functions/fnc_isInsideMapTool.sqf index 4dd66e2b9a..eeaf8f346a 100644 --- a/addons/maptools/functions/fnc_isInsideMapTool.sqf +++ b/addons/maptools/functions/fnc_isInsideMapTool.sqf @@ -16,6 +16,7 @@ #define DIST_TOP_TO_CENTER_PERC 0.65 #define DIST_LEFT_TO_CENTER_PERC 0.30 +private ["_textureWidth", "_relPos", "_dirVector", "_lambdaLong", "_lambdaTrasAbs", "_pos"]; if (GVAR(mapTool_Shown) == 0) exitWith {false}; _textureWidth = [TEXTURE_WIDTH_IN_M, TEXTURE_WIDTH_IN_M / 2] select (GVAR(mapTool_Shown) - 1); diff --git a/addons/maptools/functions/fnc_openMapGps.sqf b/addons/maptools/functions/fnc_openMapGps.sqf index c4e2436b3b..7d29d9e169 100644 --- a/addons/maptools/functions/fnc_openMapGps.sqf +++ b/addons/maptools/functions/fnc_openMapGps.sqf @@ -12,7 +12,10 @@ */ #include "script_component.hpp" -_shouldOpenGps = _this select 0; +PARAMS_1(_shouldOpenGps); + +private ["_isOpen"]; + _isOpen = !(isNull (uiNamespace getVariable [QGVAR(ui_mapGpsDisplay), displayNull])); if (_shouldOpenGps && {"ItemGPS" in assignedItems ACE_player} && {!_isOpen}) then { diff --git a/addons/maptools/functions/fnc_openMapGpsUpdate.sqf b/addons/maptools/functions/fnc_openMapGpsUpdate.sqf index ddc177f182..092f0720c2 100644 --- a/addons/maptools/functions/fnc_openMapGpsUpdate.sqf +++ b/addons/maptools/functions/fnc_openMapGpsUpdate.sqf @@ -3,6 +3,8 @@ #include "script_component.hpp" +private ["_mapGpsDisplay", "_ctrl"]; + if ((!("ItemGPS" in assigneditems ACE_player)) || {isNull (uiNamespace getVariable [QGVAR(ui_mapGpsDisplay), displayNull])}) exitWith { ("RscACE_MapGps" call BIS_fnc_rscLayer) cutText ["","PLAIN"]; //close GPS RSC [(_this select 1)] call CBA_fnc_removePerFrameHandler; //remove frameHandler diff --git a/addons/maptools/functions/fnc_removeLineMarker.sqf b/addons/maptools/functions/fnc_removeLineMarker.sqf index 45c39611db..be82970524 100644 --- a/addons/maptools/functions/fnc_removeLineMarker.sqf +++ b/addons/maptools/functions/fnc_removeLineMarker.sqf @@ -11,7 +11,7 @@ #include "script_component.hpp" -_name = _this select 0; +PARAMS_1(_name); deleteMarkerLocal _name; { diff --git a/addons/maptools/functions/fnc_updateLineMarker.sqf b/addons/maptools/functions/fnc_updateLineMarker.sqf index cf80c1ac26..a745bfa123 100644 --- a/addons/maptools/functions/fnc_updateLineMarker.sqf +++ b/addons/maptools/functions/fnc_updateLineMarker.sqf @@ -13,10 +13,11 @@ */ #include "script_component.hpp" -_name = _this select 0; -_startPos = _this select 1; -_difPos = (_this select 2) vectorDiff _startPos ; -_color = _this select 3; +PARAMS_4(_name,_startPos,_endPos,_color); + +private ["_difPos", "_mag"]; + +_difPos = _endPos vectorDiff _startPos; _name setMarkerShapeLocal "RECTANGLE"; _name setMarkerAlphaLocal 1; diff --git a/addons/maptools/functions/fnc_updateMapToolMarkers.sqf b/addons/maptools/functions/fnc_updateMapToolMarkers.sqf index 3a7b919b8b..fa6db8872a 100644 --- a/addons/maptools/functions/fnc_updateMapToolMarkers.sqf +++ b/addons/maptools/functions/fnc_updateMapToolMarkers.sqf @@ -18,6 +18,8 @@ PARAMS_1(_theMap); +private ["_rotatingTexture", "_textureWidth", "_scale", "_xPos", "_yPos"]; + if (!("ACE_MapTools" in items ACE_player)|| {GVAR(mapTool_Shown) == 0}) exitWith {}; _rotatingTexture = ""; diff --git a/addons/reloadlaunchers/functions/fnc_reloadLauncher.sqf b/addons/reloadlaunchers/functions/fnc_reloadLauncher.sqf index 36772f9dfd..fc802a025c 100644 --- a/addons/reloadlaunchers/functions/fnc_reloadLauncher.sqf +++ b/addons/reloadlaunchers/functions/fnc_reloadLauncher.sqf @@ -14,12 +14,7 @@ */ #include "script_component.hpp" -private ["_unit", "_weapon", "_magazine"]; - -_unit = _this select 0; -_target = _this select 1; -_weapon = _this select 2; -_magazine = _this select 3; +PARAMS_4(_unit,_target,_weapon,_magazine); _target selectWeapon _weapon; diff --git a/addons/respawn/functions/fnc_handleInitPostServer.sqf b/addons/respawn/functions/fnc_handleInitPostServer.sqf index f8a0479717..914334cc25 100644 --- a/addons/respawn/functions/fnc_handleInitPostServer.sqf +++ b/addons/respawn/functions/fnc_handleInitPostServer.sqf @@ -2,13 +2,11 @@ // execute on server only! #include "script_component.hpp" -private "_unit"; - -_unit = _this select 0; +PARAMS_1(_unit); private ["_group0", "_rallypoint"]; -_group0 = group _unit; // _group is a reserved veriable and shouldn't be used +_group0 = group _unit; // _group-is a reserved veriable and shouldn't be used _rallypoint = [ objNull, diff --git a/addons/respawn/functions/fnc_initRallypoint.sqf b/addons/respawn/functions/fnc_initRallypoint.sqf index 44671b7c45..2ef158a419 100644 --- a/addons/respawn/functions/fnc_initRallypoint.sqf +++ b/addons/respawn/functions/fnc_initRallypoint.sqf @@ -16,11 +16,7 @@ #include "script_component.hpp" -private ["_rallypoint", "_respawnMarker", "_side"]; - -_rallypoint = _this select 0; -_respawnMarker = _this select 1; -_side = _this select 2; +PARAMS_3(_rallypoint,_respawnMarker,_side); private "_name"; _name = typeOf _rallypoint; @@ -29,12 +25,11 @@ _name = typeOf _rallypoint; if (hasInterface) then { // fix init having wrong position, vars etc. [_rallypoint, _respawnMarker, _side, _name] spawn { - _rallypoint = _this select 0; - _respawnMarker = _this select 1; - _side = _this select 2; - _name = _this select 3; - - _marker = format ["ACE_Marker_%1", _name]; + PARAMS_4(_rallypoint,_respawnMarker,_side,_name); + + private ["_marker", "_type"]; + + _marker = format ["ACE_Marker_%1", _name]; // exit if it already exist if (_marker in allMapMarkers) exitWith {}; diff --git a/addons/respawn/functions/fnc_module.sqf b/addons/respawn/functions/fnc_module.sqf index 6d03c1eda3..4f22bdfcd4 100644 --- a/addons/respawn/functions/fnc_module.sqf +++ b/addons/respawn/functions/fnc_module.sqf @@ -18,10 +18,9 @@ #include "script_component.hpp" -if !(isServer) exitWith {}; +PARAMS_3(_logic,_units,_activated); -_logic = _this select 0; -_activated = _this select 2; +if !(isServer) exitWith {}; if !(_activated) exitWith {}; @@ -32,9 +31,10 @@ GVAR(Module) = true; if (isServer) then { if (GVAR(RemoveDeadBodiesDisconnected)) then { + private "_fnc_deleteDisconnected"; _fnc_deleteDisconnected = { _this spawn { - _unit = _this select 0; + PARAMS_1(_unit); sleep 4; diff --git a/addons/respawn/functions/fnc_moduleFriendlyFire.sqf b/addons/respawn/functions/fnc_moduleFriendlyFire.sqf index 35857b43e4..7641db806d 100644 --- a/addons/respawn/functions/fnc_moduleFriendlyFire.sqf +++ b/addons/respawn/functions/fnc_moduleFriendlyFire.sqf @@ -19,17 +19,13 @@ #include "script_component.hpp" _this spawn { - _logic = _this select 0; - _units = _this select 1; - _activated = _this select 2; + PARAMS_3(_logic,_units,_activated); if !(_activated) exitWith {}; if (isServer) then { - _varName = QGVAR(showFriendlyFireMessage); - - missionNamespace setVariable [_varName, true]; - publicVariable _varName; + missionNamespace setVariable [QGVAR(showFriendlyFireMessage), true]; + publicVariable QGVAR(showFriendlyFireMessage); }; diag_log text "[ACE]: Friendly Fire Messages Module Initialized."; diff --git a/addons/respawn/functions/fnc_moduleRallypoint.sqf b/addons/respawn/functions/fnc_moduleRallypoint.sqf index 1646fa72da..15c415027d 100644 --- a/addons/respawn/functions/fnc_moduleRallypoint.sqf +++ b/addons/respawn/functions/fnc_moduleRallypoint.sqf @@ -16,11 +16,9 @@ VOID */ - #include "script_component.hpp" - -_logic = _this select 0; -_units = _this select 1; -_activated = _this select 2; +#include "script_component.hpp" + +PARAMS_3(_logic,_units,_activated); if !(_activated) exitWith {}; diff --git a/addons/respawn/functions/fnc_moveRallypoint.sqf b/addons/respawn/functions/fnc_moveRallypoint.sqf index 62d2742ef9..2453c68344 100644 --- a/addons/respawn/functions/fnc_moveRallypoint.sqf +++ b/addons/respawn/functions/fnc_moveRallypoint.sqf @@ -18,9 +18,10 @@ #include "script_component.hpp" _this spawn { - _unit = _this select 0; - _side = _this select 1; - + PARAMS_2(_unit,_side); + + private ["_rallypoint", "_position"]; + // rallypoint names are defined in CfgVehicles.hpp _rallypoint = [ diff --git a/addons/respawn/functions/fnc_removeDisconnectedPlayer.sqf b/addons/respawn/functions/fnc_removeDisconnectedPlayer.sqf index 492cd990a4..7bd0a6707f 100644 --- a/addons/respawn/functions/fnc_removeDisconnectedPlayer.sqf +++ b/addons/respawn/functions/fnc_removeDisconnectedPlayer.sqf @@ -16,7 +16,7 @@ #include "script_component.hpp" -private ["_forceRemove", "_body"]; +private ["_forceRemove", "_body", "_uid"]; _forceRemove = _this select 0; diff --git a/addons/respawn/functions/fnc_restoreGear.sqf b/addons/respawn/functions/fnc_restoreGear.sqf index 5a00e3425c..85863bb6c2 100644 --- a/addons/respawn/functions/fnc_restoreGear.sqf +++ b/addons/respawn/functions/fnc_restoreGear.sqf @@ -17,11 +17,10 @@ #include "script_component.hpp" -private ["_unit", "_allGear", "_headgear", "_goggles", "_uniform", "_uniformitems", "_vest", "_vestitems", "_backpack", "_backpackitems", "_primaryweapon", "_primaryweaponitems", "_primaryweaponmagazine", "_handgunweapon", "_handgunweaponitems", "_handgunweaponmagazine", "_assigneditems", "_binocular"]; +PARAMS_2(_unit,_allGear); +private ["_unit", "_allGear", "_headgear", "_goggles", "_uniform", "_uniformitems", "_vest", "_vestitems", "_backpack", "_backpackitems", "_primaryweapon", "_primaryweaponitems", "_primaryweaponmagazine", "_handgunweapon", "_handgunweaponitems", "_handgunweaponmagazine", "_assigneditems", "_binocular", "_backpa", "_secondaryweapon", "_secondaryweaponitems", "_secondaryweaponmagazine"]; -_unit = _this select 0; -_allGear = _this select 1; // remove all starting gear of a player removeAllWeapons _unit; diff --git a/addons/safemode/XEH_postInit.sqf b/addons/safemode/XEH_postInit.sqf index aa13029547..be6b79d82a 100644 --- a/addons/safemode/XEH_postInit.sqf +++ b/addons/safemode/XEH_postInit.sqf @@ -3,6 +3,7 @@ if (!hasInterface) exitWith {}; +// IGNORE_PRIVATE_WARNING(_player) //["Soldier", {_player = ACE_player; if (currentWeapon _player in (_player getVariable [QGVAR(safedWeapons), []])) then {[false] call FUNC(setSafeModeVisual)}] call EFUNC(common,addInfoDisplayEventHandler); //@todo addEventHandler infoDisplayChanged with select 1 == "Soldier" diff --git a/addons/scopes/functions/fnc_adjustScope.sqf b/addons/scopes/functions/fnc_adjustScope.sqf index 76c62a4688..a59095d127 100644 --- a/addons/scopes/functions/fnc_adjustScope.sqf +++ b/addons/scopes/functions/fnc_adjustScope.sqf @@ -14,11 +14,11 @@ */ #include "script_component.hpp" -if !(vehicle _unit == _unit) exitWith {false}; +PARAMS_3(_unit,_turretAndDirection,_majorStep); -private ["_unit", "_turretAndDirection", "_majorStep", "_weaponIndex", "_zeroing", "_optic", "_increment", "_maxVertical", "_maxHorizontal", "_elevation", "_windage", "_zero"]; +if (vehicle _unit != _unit) exitWith {false}; -EXPLODE_3_PVT(_this,_unit,_turretAndDirection,_majorStep); +private ["_weaponIndex", "_zeroing", "_optic", "_increment", "_maxVertical", "_maxHorizontal", "_elevation", "_windage", "_zero", "_adjustment"]; _weaponIndex = [_unit, currentWeapon _unit] call EFUNC(common,getWeaponIndex); if (_weaponIndex < 0) exitWith {false}; diff --git a/addons/scopes/functions/fnc_adjustZero.sqf b/addons/scopes/functions/fnc_adjustZero.sqf index 4dbab48f49..12e911b537 100644 --- a/addons/scopes/functions/fnc_adjustZero.sqf +++ b/addons/scopes/functions/fnc_adjustZero.sqf @@ -12,10 +12,11 @@ */ #include "script_component.hpp" -if !(vehicle _unit == _unit) exitWith {false}; +PARAMS_1(_unit); -private ["_unit", "_adjustment", "_zeroing", "_elevation", "_windage", "_zero"]; -_unit = _this select 0; +if (vehicle _unit != _unit) exitWith {false}; + +private ["_weaponIndex", "_adjustment", "_zeroing", "_elevation", "_windage", "_zero"]; _weaponIndex = [_unit, currentWeapon _unit] call EFUNC(common,getWeaponIndex); if (_weaponIndex < 0) exitWith {false}; diff --git a/addons/scopes/functions/fnc_applyScopeAdjustment.sqf b/addons/scopes/functions/fnc_applyScopeAdjustment.sqf index 6bb72558b1..4950fe9ece 100644 --- a/addons/scopes/functions/fnc_applyScopeAdjustment.sqf +++ b/addons/scopes/functions/fnc_applyScopeAdjustment.sqf @@ -15,10 +15,10 @@ */ #include "script_component.hpp" -private ["_unit", "_elevation", "_windage", "_zero", "_adjustmentDifference", "_pitchbankyaw", "_pitch", "_bank", "_yaw"]; - EXPLODE_4_PVT(_this,_unit,_elevation,_windage,_zero); +private ["_adjustmentDifference", "_pitchbankyaw", "_pitch", "_bank", "_yaw", "_adjustment", "_weaponIndex"]; + _weaponIndex = [_unit, currentWeapon _unit] call EFUNC(common,getWeaponIndex); _adjustment = _unit getVariable QGVAR(Adjustment); diff --git a/addons/scopes/functions/fnc_canAdjustZero.sqf b/addons/scopes/functions/fnc_canAdjustZero.sqf index c9663ea711..619d82cf6e 100644 --- a/addons/scopes/functions/fnc_canAdjustZero.sqf +++ b/addons/scopes/functions/fnc_canAdjustZero.sqf @@ -12,13 +12,14 @@ */ #include "script_component.hpp" +PARAMS_1(_unit); + +private ["_weaponIndex", "_adjustment", "_elevation"]; + if (cameraView == "GUNNER") exitWith {false}; if !(vehicle _unit == _unit) exitWith {false}; if !(missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) exitWith {false}; -private ["_unit", "_adjustment", "_elevation"]; -_unit = _this select 0; - _weaponIndex = [_unit, currentWeapon _unit] call EFUNC(common,getWeaponIndex); if (_weaponIndex < 0) exitWith {false}; diff --git a/tools/search_privates.py b/tools/search_privates.py index 6e1430a8ca..4b418de8d6 100644 --- a/tools/search_privates.py +++ b/tools/search_privates.py @@ -70,6 +70,8 @@ def check_privates(filepath): if '_forEachIndex' in priv_use: priv_use.remove('_forEachIndex') if '_foreachIndex' in priv_declared: priv_declared.remove('_foreachIndex') if '_foreachIndex' in priv_use: priv_use.remove('_foreachIndex') + if '_foreachindex' in priv_declared: priv_declared.remove('_foreachindex') + if '_foreachindex' in priv_use: priv_use.remove('_foreachindex') missing = [] for s in priv_use: From 04858bb6733f0a941e205fdaaa0085328cc6acf8 Mon Sep 17 00:00:00 2001 From: Tachii <zaveruha007@gmail.com> Date: Sat, 18 Apr 2015 02:19:09 +0300 Subject: [PATCH 119/257] Update stringtable.xml --- addons/microdagr/stringtable.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/microdagr/stringtable.xml b/addons/microdagr/stringtable.xml index d7d550fc32..2acb0ec574 100644 --- a/addons/microdagr/stringtable.xml +++ b/addons/microdagr/stringtable.xml @@ -95,7 +95,7 @@ <Key ID="STR_ACE_microdagr_wpEnterCords"> <English>Enter Grid Cords:</English> <Spanish>Introducir coordenadas de cuadrícula:</Spanish> - <Russian>Введите координаты:</Russian> + <Russian>Введите Сеточные Координаты:</Russian> <Polish>Wprowadź współrzędne:</Polish> <French>Entrer coordonnées</French> <German>Koordinaten eingeben:</German> @@ -183,7 +183,7 @@ <Key ID="STR_ACE_microdagr_menuConnectTo"> <English>Connect To</English> <Spanish>Conectar a</Spanish> - <Russian>Соединиться с </Russian> + <Russian>Подключиться к</Russian> <German>Verbinde zu</German> <Czech>Připojit k</Czech> <Polish>Podłącz do</Polish> From 708a2aa374567e84ab500eead2d5320a0ab7513f Mon Sep 17 00:00:00 2001 From: commy2 <commy-2@gmx.de> Date: Sat, 18 Apr 2015 01:44:53 +0200 Subject: [PATCH 120/257] check if ddls are present on mission start --- addons/common/XEH_postInit.sqf | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index e470e91c95..eda61c66ad 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -188,3 +188,14 @@ GVAR(OldPlayerWeapon) = currentWeapon ACE_player; // Players can always interact with passengers of the same vehicle {!((_this select 0) isEqualTo (_this select 1)) && {vehicle (_this select 0) == vehicle (_this select 1)}} }] call FUNC(addCanInteractWithCondition); + +// check dlls +{ + if (_x callExtension "version" == "") then { + private "_errorMsg"; + _errorMsg = format ["Extension %1.dll not installed.", _x]; + + diag_log text format ["[ACE] ERROR: %1", _errorMsg]; + ["[ACE] ERROR", _errorMsg, {findDisplay 46 closeDisplay 0}] call FUNC(errorMessage); + }; +} forEach ["ace_breakLine", "ace_advanced_ballistics", "ace_fcs"]; From b7c7d2ff152c9c59020b17adb98fcae4ed1af4d3 Mon Sep 17 00:00:00 2001 From: Tachii <zaveruha007@gmail.com> Date: Sat, 18 Apr 2015 03:04:14 +0300 Subject: [PATCH 121/257] Update stringtable.xml --- addons/hearing/stringtable.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index 25eedec9b9..3fa947ead9 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -19,7 +19,7 @@ <Spanish>Los tapones para los oídos permiten al usuario operar armamento ruidoso sin sufrir pérdida de audición.</Spanish> <Polish>Stopery do uszu umożliwiają użytkownikowi przebywać w pobliżu głośnej broni bez poniesienia konsekwencji jaką jest utrata słuchu.</Polish> <Czech>Ochranné špunty umožňují uživateli, aby neutrpěl zranění jeho sluchu v blízkosti hlasitých zbraní.</Czech> - <Russian>Беруши позволяют носителю находиться возле громкого вооружения без потери слуха</Russian> + <Russian>Беруши позволяют носителю находиться возле громкого вооружения без потери слуха.</Russian> <French>Bouchons Anti-Bruits pour la prévention des traumatismes sonores aigus.</French> <Hungarian>Erősebb hanghatásoktól védő füldugó, megakadályozza a nagy hanggal járó fegyverzettől való halláskárosodást.</Hungarian> <Portuguese>Protetor para ouvidos permitem que o usuário esteja próximo a ruídos sem danificar sua audição.</Portuguese> From 711be038fcc49c06cf0b2e806865a0f54f9d2d02 Mon Sep 17 00:00:00 2001 From: Tachii <zaveruha007@gmail.com> Date: Sat, 18 Apr 2015 03:09:51 +0300 Subject: [PATCH 122/257] Update stringtable.xml --- addons/disposable/stringtable.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/disposable/stringtable.xml b/addons/disposable/stringtable.xml index 9b7121e3ca..7f57998157 100644 --- a/addons/disposable/stringtable.xml +++ b/addons/disposable/stringtable.xml @@ -31,7 +31,7 @@ <Polish>Wstępnie załadowana atrapa pocisku</Polish> <Spanish>Preloaded Missile Dummy</Spanish> <Hungarian>Előtöltött műrakéta</Hungarian> - <Russian>Предзаряженная Рокетная Болванка</Russian> + <Russian>Предзаряженная ракетная болванка</Russian> <Italian>Missile stupido precaricato</Italian> </Key> </Package> From ad6155755779787b53ebff7fb3909f7527fb6c31 Mon Sep 17 00:00:00 2001 From: Tachii <zaveruha007@gmail.com> Date: Sat, 18 Apr 2015 03:10:28 +0300 Subject: [PATCH 123/257] Update stringtable.xml --- addons/microdagr/stringtable.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/microdagr/stringtable.xml b/addons/microdagr/stringtable.xml index 2acb0ec574..f98c7f438c 100644 --- a/addons/microdagr/stringtable.xml +++ b/addons/microdagr/stringtable.xml @@ -95,7 +95,7 @@ <Key ID="STR_ACE_microdagr_wpEnterCords"> <English>Enter Grid Cords:</English> <Spanish>Introducir coordenadas de cuadrícula:</Spanish> - <Russian>Введите Сеточные Координаты:</Russian> + <Russian>Введите сеточные координаты:</Russian> <Polish>Wprowadź współrzędne:</Polish> <French>Entrer coordonnées</French> <German>Koordinaten eingeben:</German> From 8fa0c91632289fbae1138da693f038e5fe234884 Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Fri, 17 Apr 2015 18:23:26 -0700 Subject: [PATCH 124/257] Added PlayerJIP event, handled full requests on JIP. --- addons/common/XEH_postInit.sqf | 27 ++++++++++++++++++- .../fnc__handleRequestAllSyncedEvents.sqf | 23 ++++++++++++++++ .../fnc__handleRequestSyncedEvent.sqf | 2 +- 3 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 addons/common/functions/fnc__handleRequestAllSyncedEvents.sqf diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index 96b0f34356..d228d77d7b 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -107,7 +107,6 @@ GVAR(OldPlayerWeapon) = currentWeapon ACE_player; // PFH to raise varios events [{ - // "playerInventoryChanged" event _newPlayerInventory = [ACE_player] call FUNC(getAllGear); if !(_newPlayerInventory isEqualTo GVAR(OldPlayerInventory)) then { @@ -190,6 +189,32 @@ GVAR(OldPlayerWeapon) = currentWeapon ACE_player; }] call FUNC(addCanInteractWithCondition); // Synced ACE events +// Handle JIP scenario +if(!isServer) then{ + ["PlayerJip", { + diag_log text format["[ACE] - JIP event synchronization initialized"]; + ["SEH_all", [player]] call FUNC(serverEvent); + }] call FUNC(addEventHandler); +} else { + ["SEH_all", FUNC(_handleRequestAllSyncedEvents)] call FUNC(addEventHandler); +}; ["SEH", FUNC(_handleSyncedEvent)] call FUNC(addEventHandler); ["SEH_s", FUNC(_handleRequestSyncedEvent)] call FUNC(addEventHandler); [FUNC(syncedEventPFH), 0.5, []] call cba_fnc_addPerFrameHandler; + + +// JIP Detection and event trigger. Run this at the very end, just in case anything uses it +if(isNull player) then { + // We are jipping! Get ready and wait, and throw the event + [{ + PARAMS_2(_args,_handle); + + if(!isNull player) then { + ["PlayerJip", [player] ] call FUNC(localEvent); + [_handle] call cba_fnc_removePerFrameHandler; + }; + }, 0, []] call cba_fnc_addPerFrameHandler; +}; + + + diff --git a/addons/common/functions/fnc__handleRequestAllSyncedEvents.sqf b/addons/common/functions/fnc__handleRequestAllSyncedEvents.sqf new file mode 100644 index 0000000000..62981092fb --- /dev/null +++ b/addons/common/functions/fnc__handleRequestAllSyncedEvents.sqf @@ -0,0 +1,23 @@ +/* + * Author: jaynus + * + * + * Argument: + * + * Return value: + * Boolean of success + */ +#define DEBUG_MODE_FULL +#include "script_component.hpp" +PARAMS_1(_client); + +{ + private["_eventName", "_eventEntry", "_eventLog"]; + _eventName = _x; + _eventEntry = HASH_GET(GVAR(syncedEvents),_eventName); + _eventLog = _eventEntry select 1; + + ["SEH_s", _client, [_eventName, _eventLog] ] call FUNC(targetEvent); +} forEach (GVAR(syncedEvents) select 0); + +true \ No newline at end of file diff --git a/addons/common/functions/fnc__handleRequestSyncedEvent.sqf b/addons/common/functions/fnc__handleRequestSyncedEvent.sqf index 643ce40916..c9b81f8ef7 100644 --- a/addons/common/functions/fnc__handleRequestSyncedEvent.sqf +++ b/addons/common/functions/fnc__handleRequestSyncedEvent.sqf @@ -7,7 +7,7 @@ * Return value: * Boolean of success */ - #define DEBUG_MODE_FULL +#define DEBUG_MODE_FULL #include "script_component.hpp" //SEH_s From da09b74fe4bfcdc663f5c977e451f9c5c8b5b90e Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Fri, 17 Apr 2015 18:27:35 -0700 Subject: [PATCH 125/257] Don't JIP check server side, but still have it fire for HC. --- addons/common/XEH_postInit.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index d228d77d7b..34ada15480 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -204,7 +204,7 @@ if(!isServer) then{ // JIP Detection and event trigger. Run this at the very end, just in case anything uses it -if(isNull player) then { +if(!isServer && {isNull player}) then { // We are jipping! Get ready and wait, and throw the event [{ PARAMS_2(_args,_handle); From 93d03b404fdef3153a6d689cf8c87e2e713340db Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Fri, 17 Apr 2015 19:26:27 -0700 Subject: [PATCH 126/257] JIP Sync events complete. --- addons/common/XEH_postInit.sqf | 49 +++++++++++-------- addons/common/XEH_preInit.sqf | 5 +- .../fnc__handleRequestAllSyncedEvents.sqf | 4 +- .../fnc__handleRequestSyncedEvent.sqf | 14 ++++-- .../functions/fnc__handleSyncedEvent.sqf | 14 +++--- .../functions/fnc_addSyncedEventHandler.sqf | 2 +- .../functions/fnc_requestSyncedEvent.sqf | 4 +- addons/common/functions/fnc_syncedEvent.sqf | 2 +- 8 files changed, 58 insertions(+), 36 deletions(-) diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index 34ada15480..2a20c0204d 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -65,9 +65,31 @@ if (_currentVersion != _previousVersion) then { 0 spawn COMPILE_FILE(scripts\Version\checkVersionNumber); +// ACE events "ACEg" addPublicVariableEventHandler { _this call FUNC(_handleNetEvent); }; "ACEc" addPublicVariableEventHandler { _this call FUNC(_handleNetEvent); }; +// Synced ACE events +// Handle JIP scenario +if(!isServer) then { + ["PlayerJip", { + diag_log text format["[ACE] * JIP event synchronization initialized"]; + ["SEH_all", [player]] call FUNC(serverEvent); + }] call FUNC(addEventHandler); +} else { + ["SEH_all", FUNC(_handleRequestAllSyncedEvents)] call FUNC(addEventHandler); +}; +["SEH", FUNC(_handleSyncedEvent)] call FUNC(addEventHandler); +["SEH_s", FUNC(_handleRequestSyncedEvent)] call FUNC(addEventHandler); +[FUNC(syncedEventPFH), 0.5, []] call cba_fnc_addPerFrameHandler; + + +/***************************************************************/ +/***************************************************************/ +/***************************************************************/ +/***************************************************************/ +/***************************************************************/ + // everything that only player controlled machines need, goes below this if (!hasInterface) exitWith {}; @@ -87,7 +109,7 @@ enableCamShake true; // Set the name for the current player ["playerChanged", { EXPLODE_2_PVT(_this,_newPlayer,_oldPlayer); - diag_log text format["PLAYER CHANGED!", _this]; + if (alive _newPlayer) then { [_newPlayer] call FUNC(setName) }; @@ -188,30 +210,15 @@ GVAR(OldPlayerWeapon) = currentWeapon ACE_player; {!((_this select 0) isEqualTo (_this select 1)) && {vehicle (_this select 0) == vehicle (_this select 1)}} }] call FUNC(addCanInteractWithCondition); -// Synced ACE events -// Handle JIP scenario -if(!isServer) then{ - ["PlayerJip", { - diag_log text format["[ACE] - JIP event synchronization initialized"]; - ["SEH_all", [player]] call FUNC(serverEvent); - }] call FUNC(addEventHandler); -} else { - ["SEH_all", FUNC(_handleRequestAllSyncedEvents)] call FUNC(addEventHandler); -}; -["SEH", FUNC(_handleSyncedEvent)] call FUNC(addEventHandler); -["SEH_s", FUNC(_handleRequestSyncedEvent)] call FUNC(addEventHandler); -[FUNC(syncedEventPFH), 0.5, []] call cba_fnc_addPerFrameHandler; - - +// Lastly, do JIP events // JIP Detection and event trigger. Run this at the very end, just in case anything uses it -if(!isServer && {isNull player}) then { +if(isMultiplayer && { time > 0 || isNull player } ) then { // We are jipping! Get ready and wait, and throw the event [{ - PARAMS_2(_args,_handle); - - if(!isNull player) then { + diag_log text format["JIP Detected, waiting"]; + if(!(isNull player)) then { ["PlayerJip", [player] ] call FUNC(localEvent); - [_handle] call cba_fnc_removePerFrameHandler; + [(_this select 1)] call cba_fnc_removePerFrameHandler; }; }, 0, []] call cba_fnc_addPerFrameHandler; }; diff --git a/addons/common/XEH_preInit.sqf b/addons/common/XEH_preInit.sqf index 5bacea7505..077d69578b 100644 --- a/addons/common/XEH_preInit.sqf +++ b/addons/common/XEH_preInit.sqf @@ -273,10 +273,13 @@ PREP(hashListPush); PREP(syncedEventPFH); PREP(addSyncedEventHandler); PREP(removeSyncedEventHandler); +PREP(requestSyncedEvent); PREP(syncedEvent); + PREP(_handleSyncedEvent); PREP(_handleRequestSyncedEvent); -PREP(requestSyncedEvent); +PREP(_handleRequestAllSyncedEvents); + GVAR(syncedEvents) = HASH_CREATE; // @TODO: Generic local-managed global-synced objects (createVehicleLocal) diff --git a/addons/common/functions/fnc__handleRequestAllSyncedEvents.sqf b/addons/common/functions/fnc__handleRequestAllSyncedEvents.sqf index 62981092fb..7c566ce4d1 100644 --- a/addons/common/functions/fnc__handleRequestAllSyncedEvents.sqf +++ b/addons/common/functions/fnc__handleRequestAllSyncedEvents.sqf @@ -1,13 +1,15 @@ /* * Author: jaynus * + * Handles a server-side request for synchronization ALL events on JIP to a client. * * Argument: + * 0: client (object) * * Return value: * Boolean of success */ -#define DEBUG_MODE_FULL +//#define DEBUG_MODE_FULL #include "script_component.hpp" PARAMS_1(_client); diff --git a/addons/common/functions/fnc__handleRequestSyncedEvent.sqf b/addons/common/functions/fnc__handleRequestSyncedEvent.sqf index c9b81f8ef7..2d58aae869 100644 --- a/addons/common/functions/fnc__handleRequestSyncedEvent.sqf +++ b/addons/common/functions/fnc__handleRequestSyncedEvent.sqf @@ -1,13 +1,20 @@ /* * Author: jaynus + * + * Receives either requests for synchronization from clients, or the synchronization data from the server. * - * - * Argument: + * Arguments [Client] : + * 0: eventName (String) + * 1: eventLog (Array) + * + * Arguments [Server] : + * 0: eventName (String) + * 1: client (Object) * * Return value: * Boolean of success */ -#define DEBUG_MODE_FULL +//#define DEBUG_MODE_FULL #include "script_component.hpp" //SEH_s @@ -32,6 +39,7 @@ if(isServer) then { _eventArgs = _x select 1; [_eventName, _eventArgs, (_x select 2)] call FUNC(_handleSyncedEvent); } forEach _eventLog; + diag_log text format["[ACE] + [%1] synchronized", _eventName]; }; true \ No newline at end of file diff --git a/addons/common/functions/fnc__handleSyncedEvent.sqf b/addons/common/functions/fnc__handleSyncedEvent.sqf index 14dfc32bae..9807896358 100644 --- a/addons/common/functions/fnc__handleSyncedEvent.sqf +++ b/addons/common/functions/fnc__handleSyncedEvent.sqf @@ -1,17 +1,17 @@ /* * Author: jaynus + * + * Handles synced events being received. Server will log them, and server/client will execute them. * - * Call and propegate a synced event - * - * Argument: - * 0: Name (String) - * 1: Arguments (Array) - * 2: TTL (Number or Code) [Optional] + * Arguments [Client] : + * 0: eventName (String) + * 1: arguments (Array) + * 2: ttl (Scalar) * * Return value: * Boolean of success */ -#define DEBUG_MODE_FULL +//#define DEBUG_MODE_FULL #include "script_component.hpp" PARAMS_3(_name,_args,_ttl); private["_internalData", "_eventLog", "_eventCode"]; diff --git a/addons/common/functions/fnc_addSyncedEventHandler.sqf b/addons/common/functions/fnc_addSyncedEventHandler.sqf index ab9d8bb829..5d2b221178 100644 --- a/addons/common/functions/fnc_addSyncedEventHandler.sqf +++ b/addons/common/functions/fnc_addSyncedEventHandler.sqf @@ -11,7 +11,7 @@ * Return value: * Boolean of success */ -#define DEBUG_MODE_FULL +//#define DEBUG_MODE_FULL #include "script_component.hpp" PARAMS_2(_name,_handler); diff --git a/addons/common/functions/fnc_requestSyncedEvent.sqf b/addons/common/functions/fnc_requestSyncedEvent.sqf index f18c3542b5..dea0c7adef 100644 --- a/addons/common/functions/fnc_requestSyncedEvent.sqf +++ b/addons/common/functions/fnc_requestSyncedEvent.sqf @@ -1,13 +1,15 @@ /* * Author: jaynus * + * Send a request to synchronize an event name from the client->server. Execute on client only. * * Argument: + * 0: eventName (String) * * Return value: * Boolean of success */ -#define DEBUG_MODE_FULL +//#define DEBUG_MODE_FULL #include "script_component.hpp" PARAMS_1(_eventName); diff --git a/addons/common/functions/fnc_syncedEvent.sqf b/addons/common/functions/fnc_syncedEvent.sqf index 43f4feb5bd..70c30a19da 100644 --- a/addons/common/functions/fnc_syncedEvent.sqf +++ b/addons/common/functions/fnc_syncedEvent.sqf @@ -11,7 +11,7 @@ * Return value: * Boolean of success */ -#define DEBUG_MODE_FULL +//#define DEBUG_MODE_FULL #include "script_component.hpp" PARAMS_2(_name,_args); private["_ttl", "_eventData", "_internalData", "_eventLog"]; From 32df4a2adcd827eff4b0cf3cff08f2b240571c9f Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Fri, 17 Apr 2015 19:33:07 -0700 Subject: [PATCH 127/257] synced events implemented into litter. --- addons/medical/XEH_postInit.sqf | 4 + addons/medical/XEH_preInit.sqf | 5 +- .../functions/fnc__handleCreateLitter.sqf | 115 ++++++++++++++++++ addons/medical/functions/fnc_createLitter.sqf | 103 +--------------- 4 files changed, 127 insertions(+), 100 deletions(-) create mode 100644 addons/medical/functions/fnc__handleCreateLitter.sqf diff --git a/addons/medical/XEH_postInit.sqf b/addons/medical/XEH_postInit.sqf index 309bb2a888..68e3b7965b 100644 --- a/addons/medical/XEH_postInit.sqf +++ b/addons/medical/XEH_postInit.sqf @@ -265,3 +265,7 @@ if (USE_WOUND_EVENT_SYNC) then { ["playerInventoryChanged", { [ACE_player] call FUNC(itemCheck); }] call EFUNC(common,addEventHandler); + + +// Synchronized litter creation +[QGVAR(createLitter), FUNC(_handleCreateLitter)] call EFUNC(common,addEventHandler); \ No newline at end of file diff --git a/addons/medical/XEH_preInit.sqf b/addons/medical/XEH_preInit.sqf index f15b4ec109..bdfbedb429 100644 --- a/addons/medical/XEH_preInit.sqf +++ b/addons/medical/XEH_preInit.sqf @@ -21,7 +21,6 @@ PREP(adjustPainLevel); PREP(canAccessMedicalEquipment); PREP(canTreat); PREP(canTreatCached); -PREP(createLitter); PREP(determineIfFatal); PREP(getBloodLoss); PREP(getBloodPressure); @@ -98,6 +97,10 @@ PREP(moduleTreatmentConfiguration); PREP(copyDeadBody); PREP(requestWoundSync); +// Litter handling functionality test +PREP(createLitter); +PREP(_handleCreateLitter); + GVAR(injuredUnitCollection) = []; GVAR(IVBags) = []; diff --git a/addons/medical/functions/fnc__handleCreateLitter.sqf b/addons/medical/functions/fnc__handleCreateLitter.sqf new file mode 100644 index 0000000000..e7751e153b --- /dev/null +++ b/addons/medical/functions/fnc__handleCreateLitter.sqf @@ -0,0 +1,115 @@ +/* + * Author: Glowbal + * Spawns litter for the treatment action on the ground around the target + * + * Arguments: + * 0: The target <OBJECT> + * 1: The treatment classname <STRING> + * + * Return Value: + * + * + * Public: No + */ + +#include "script_component.hpp" + +#define MIN_ENTRIES_LITTER_CONFIG 3 + +if(hasInterface) then { + private ["_config", "_litter", "_createLitter", "_litterObject", "_position", "_createdLitter"]; + PARAMS_6(_caller,_target,_selectionName,_className,_usersOfItems); + + _caller = _this select 0; + _target = _this select 1; + _selectionName = _this select 2; + _className = _this select 3; + _usersOfItems = _this select 5; + + if !(GVAR(allowLitterCreation)) exitwith {}; + if (vehicle _caller != _caller || vehicle _target != _target) exitwith {}; + + _config = (configFile >> "ACE_Medical_Actions" >> "Basic" >> _className); + if (GVAR(level) >= 2) then { + _config = (configFile >> "ACE_Medical_Actions" >> "Advanced" >> _className); + }; + if !(isClass _config) exitwith {false}; + + + if !(isArray (_config >> "litter")) exitwith {}; + _litter = getArray (_config >> "litter"); + + _createLitter = { + _position = getPos (_this select 0); + _litterClass = _this select 1; + _litterObject = createVehicle [_litterClass, _position, [], 0, "NONE"]; + if (random(1) >= 0.5) then { + _litterObject setPos [(_position select 0) + random 2, (_position select 1) + random 2, _position select 2]; + } else { + _litterObject setPos [(_position select 0) - random 2, (_position select 1) - random 2, _position select 2]; + }; + _litterObject setDir (random 360); + _litterObject; + }; + + if (isnil QGVAR(allCreatedLitter)) then { + GVAR(allCreatedLitter) = []; + GVAR(litterPFHRunning) = false; + }; + + _createdLitter = []; + { + if (typeName _x == "ARRAY") then { + if (count _x < MIN_ENTRIES_LITTER_CONFIG) exitwith {}; + private ["_selection", "_litterCondition", "_litterOptions"]; + _selection = _x select 0; + if (toLower _selection in [toLower _selectionName, "all"]) then { // in is case sensitve. We can be forgiving here, so lets use toLower. + _litterCondition = _x select 1; + _litterOptions = _x select 2; + + if (isnil _litterCondition) then { + _litterCondition = if (_litterCondition != "") then {compile _litterCondition} else {{true}}; + } else { + _litterCondition = missionNamespace getvariable _litterCondition; + }; + if !([_caller, _target, _selectionName, _className, _usersOfItems] call _litterCondition) exitwith {}; + + if (typeName _litterOptions == "ARRAY") then { + // Loop through through the litter options and place the litter + { + if (typeName _x == "ARRAY" && {(count _x > 0)}) then { + _createdLitter pushback ([_target, _x select (floor(random(count _x)))] call _createLitter); + }; + if (typeName _x == "STRING") then { + _createdLitter pushback ([_target, _x] call _createLitter); + }; + }foreach _litterOptions; + }; + }; + }; + }foreach _litter; + + if (GVAR(litterCleanUpDelay) >= 0) then { + GVAR(allCreatedLitter) pushback [time, GVAR(litterCleanUpDelay), _createdLitter]; + }; + + if !(GVAR(litterPFHRunning)) then { + GVAR(litterPFHRunning) = true; + [{ + { + if (time - (_x select 0) >= (_x select 1)) then { + { + deleteVehicle _x; + }foreach (_this select 2); + GVAR(allCreatedLitter) set[_foreachIndex, objNull]; + }; + }foreach GVAR(allCreatedLitter); + GVAR(allCreatedLitter) = GVAR(allCreatedLitter) - [objNull]; + + if (count GVAR(allCreatedLitter) == 0) exitwith { + GVAR(litterPFHRunning) = false; + [_this select 1] call CBA_fnc_removePerFrameHandler; + }; + }, 30, []] call CBA_fnc_addPerFrameHandler; + }; +}; \ No newline at end of file diff --git a/addons/medical/functions/fnc_createLitter.sqf b/addons/medical/functions/fnc_createLitter.sqf index 570c6d63d3..edc16c186e 100644 --- a/addons/medical/functions/fnc_createLitter.sqf +++ b/addons/medical/functions/fnc_createLitter.sqf @@ -1,10 +1,8 @@ /* - * Author: Glowbal - * Spawns litter for the treatment action on the ground around the target + * Author: jaynus * * Arguments: - * 0: The target <OBJECT> - * 1: The treatment classname <STRING> + * * * Return Value: * @@ -14,98 +12,5 @@ #include "script_component.hpp" -#define MIN_ENTRIES_LITTER_CONFIG 3 - -private ["_target", "_className", "_config", "_litter", "_createLitter", "_litterObject", "_position", "_createdLitter"]; -_caller = _this select 0; -_target = _this select 1; -_selectionName = _this select 2; -_className = _this select 3; -_usersOfItems = _this select 5; - -if !(GVAR(allowLitterCreation)) exitwith {}; -if (vehicle _caller != _caller || vehicle _target != _target) exitwith {}; - -_config = (configFile >> "ACE_Medical_Actions" >> "Basic" >> _className); -if (GVAR(level) >= 2) then { - _config = (configFile >> "ACE_Medical_Actions" >> "Advanced" >> _className); -}; -if !(isClass _config) exitwith {false}; - - -if !(isArray (_config >> "litter")) exitwith {}; -_litter = getArray (_config >> "litter"); - -_createLitter = { - _position = getPos (_this select 0); - _litterClass = _this select 1; - _litterObject = createVehicle [_litterClass, _position, [], 0, "NONE"]; - if (random(1) >= 0.5) then { - _litterObject setPos [(_position select 0) + random 2, (_position select 1) + random 2, _position select 2]; - } else { - _litterObject setPos [(_position select 0) - random 2, (_position select 1) - random 2, _position select 2]; - }; - _litterObject setDir (random 360); - _litterObject; -}; - -if (isnil QGVAR(allCreatedLitter)) then { - GVAR(allCreatedLitter) = []; - GVAR(litterPFHRunning) = false; -}; - -_createdLitter = []; -{ - if (typeName _x == "ARRAY") then { - if (count _x < MIN_ENTRIES_LITTER_CONFIG) exitwith {}; - private ["_selection", "_litterCondition", "_litterOptions"]; - _selection = _x select 0; - if (toLower _selection in [toLower _selectionName, "all"]) then { // in is case sensitve. We can be forgiving here, so lets use toLower. - _litterCondition = _x select 1; - _litterOptions = _x select 2; - - if (isnil _litterCondition) then { - _litterCondition = if (_litterCondition != "") then {compile _litterCondition} else {{true}}; - } else { - _litterCondition = missionNamespace getvariable _litterCondition; - }; - if !([_caller, _target, _selectionName, _className, _usersOfItems] call _litterCondition) exitwith {}; - - if (typeName _litterOptions == "ARRAY") then { - // Loop through through the litter options and place the litter - { - if (typeName _x == "ARRAY" && {(count _x > 0)}) then { - _createdLitter pushback ([_target, _x select (floor(random(count _x)))] call _createLitter); - }; - if (typeName _x == "STRING") then { - _createdLitter pushback ([_target, _x] call _createLitter); - }; - }foreach _litterOptions; - }; - }; - }; -}foreach _litter; - -if (GVAR(litterCleanUpDelay) >= 0) then { - GVAR(allCreatedLitter) pushback [time, GVAR(litterCleanUpDelay), _createdLitter]; -}; - -if !(GVAR(litterPFHRunning)) then { - GVAR(litterPFHRunning) = true; - [{ - { - if (time - (_x select 0) >= (_x select 1)) then { - { - deleteVehicle _x; - }foreach (_this select 2); - GVAR(allCreatedLitter) set[_foreachIndex, objNull]; - }; - }foreach GVAR(allCreatedLitter); - GVAR(allCreatedLitter) = GVAR(allCreatedLitter) - [objNull]; - - if (count GVAR(allCreatedLitter) == 0) exitwith { - GVAR(litterPFHRunning) = false; - [_this select 1] call CBA_fnc_removePerFrameHandler; - }; - }, 30, []] call CBA_fnc_addPerFrameHandler; -}; +// Create a synchronized, 30 second TTL event for litter +[QGVAR(createLitter), _this, 30] call EFUNC(common,syncedEvent); \ No newline at end of file From c952a97de83ba462ffcb76630af1addfe6e2ba40 Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Fri, 17 Apr 2015 19:38:05 -0700 Subject: [PATCH 128/257] Revert "synced events implemented into litter." This reverts commit 32df4a2adcd827eff4b0cf3cff08f2b240571c9f. --- addons/medical/XEH_postInit.sqf | 4 - addons/medical/XEH_preInit.sqf | 5 +- .../functions/fnc__handleCreateLitter.sqf | 115 ------------------ addons/medical/functions/fnc_createLitter.sqf | 103 +++++++++++++++- 4 files changed, 100 insertions(+), 127 deletions(-) delete mode 100644 addons/medical/functions/fnc__handleCreateLitter.sqf diff --git a/addons/medical/XEH_postInit.sqf b/addons/medical/XEH_postInit.sqf index 68e3b7965b..309bb2a888 100644 --- a/addons/medical/XEH_postInit.sqf +++ b/addons/medical/XEH_postInit.sqf @@ -265,7 +265,3 @@ if (USE_WOUND_EVENT_SYNC) then { ["playerInventoryChanged", { [ACE_player] call FUNC(itemCheck); }] call EFUNC(common,addEventHandler); - - -// Synchronized litter creation -[QGVAR(createLitter), FUNC(_handleCreateLitter)] call EFUNC(common,addEventHandler); \ No newline at end of file diff --git a/addons/medical/XEH_preInit.sqf b/addons/medical/XEH_preInit.sqf index bdfbedb429..f15b4ec109 100644 --- a/addons/medical/XEH_preInit.sqf +++ b/addons/medical/XEH_preInit.sqf @@ -21,6 +21,7 @@ PREP(adjustPainLevel); PREP(canAccessMedicalEquipment); PREP(canTreat); PREP(canTreatCached); +PREP(createLitter); PREP(determineIfFatal); PREP(getBloodLoss); PREP(getBloodPressure); @@ -97,10 +98,6 @@ PREP(moduleTreatmentConfiguration); PREP(copyDeadBody); PREP(requestWoundSync); -// Litter handling functionality test -PREP(createLitter); -PREP(_handleCreateLitter); - GVAR(injuredUnitCollection) = []; GVAR(IVBags) = []; diff --git a/addons/medical/functions/fnc__handleCreateLitter.sqf b/addons/medical/functions/fnc__handleCreateLitter.sqf deleted file mode 100644 index e7751e153b..0000000000 --- a/addons/medical/functions/fnc__handleCreateLitter.sqf +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Author: Glowbal - * Spawns litter for the treatment action on the ground around the target - * - * Arguments: - * 0: The target <OBJECT> - * 1: The treatment classname <STRING> - * - * Return Value: - * - * - * Public: No - */ - -#include "script_component.hpp" - -#define MIN_ENTRIES_LITTER_CONFIG 3 - -if(hasInterface) then { - private ["_config", "_litter", "_createLitter", "_litterObject", "_position", "_createdLitter"]; - PARAMS_6(_caller,_target,_selectionName,_className,_usersOfItems); - - _caller = _this select 0; - _target = _this select 1; - _selectionName = _this select 2; - _className = _this select 3; - _usersOfItems = _this select 5; - - if !(GVAR(allowLitterCreation)) exitwith {}; - if (vehicle _caller != _caller || vehicle _target != _target) exitwith {}; - - _config = (configFile >> "ACE_Medical_Actions" >> "Basic" >> _className); - if (GVAR(level) >= 2) then { - _config = (configFile >> "ACE_Medical_Actions" >> "Advanced" >> _className); - }; - if !(isClass _config) exitwith {false}; - - - if !(isArray (_config >> "litter")) exitwith {}; - _litter = getArray (_config >> "litter"); - - _createLitter = { - _position = getPos (_this select 0); - _litterClass = _this select 1; - _litterObject = createVehicle [_litterClass, _position, [], 0, "NONE"]; - if (random(1) >= 0.5) then { - _litterObject setPos [(_position select 0) + random 2, (_position select 1) + random 2, _position select 2]; - } else { - _litterObject setPos [(_position select 0) - random 2, (_position select 1) - random 2, _position select 2]; - }; - _litterObject setDir (random 360); - _litterObject; - }; - - if (isnil QGVAR(allCreatedLitter)) then { - GVAR(allCreatedLitter) = []; - GVAR(litterPFHRunning) = false; - }; - - _createdLitter = []; - { - if (typeName _x == "ARRAY") then { - if (count _x < MIN_ENTRIES_LITTER_CONFIG) exitwith {}; - private ["_selection", "_litterCondition", "_litterOptions"]; - _selection = _x select 0; - if (toLower _selection in [toLower _selectionName, "all"]) then { // in is case sensitve. We can be forgiving here, so lets use toLower. - _litterCondition = _x select 1; - _litterOptions = _x select 2; - - if (isnil _litterCondition) then { - _litterCondition = if (_litterCondition != "") then {compile _litterCondition} else {{true}}; - } else { - _litterCondition = missionNamespace getvariable _litterCondition; - }; - if !([_caller, _target, _selectionName, _className, _usersOfItems] call _litterCondition) exitwith {}; - - if (typeName _litterOptions == "ARRAY") then { - // Loop through through the litter options and place the litter - { - if (typeName _x == "ARRAY" && {(count _x > 0)}) then { - _createdLitter pushback ([_target, _x select (floor(random(count _x)))] call _createLitter); - }; - if (typeName _x == "STRING") then { - _createdLitter pushback ([_target, _x] call _createLitter); - }; - }foreach _litterOptions; - }; - }; - }; - }foreach _litter; - - if (GVAR(litterCleanUpDelay) >= 0) then { - GVAR(allCreatedLitter) pushback [time, GVAR(litterCleanUpDelay), _createdLitter]; - }; - - if !(GVAR(litterPFHRunning)) then { - GVAR(litterPFHRunning) = true; - [{ - { - if (time - (_x select 0) >= (_x select 1)) then { - { - deleteVehicle _x; - }foreach (_this select 2); - GVAR(allCreatedLitter) set[_foreachIndex, objNull]; - }; - }foreach GVAR(allCreatedLitter); - GVAR(allCreatedLitter) = GVAR(allCreatedLitter) - [objNull]; - - if (count GVAR(allCreatedLitter) == 0) exitwith { - GVAR(litterPFHRunning) = false; - [_this select 1] call CBA_fnc_removePerFrameHandler; - }; - }, 30, []] call CBA_fnc_addPerFrameHandler; - }; -}; \ No newline at end of file diff --git a/addons/medical/functions/fnc_createLitter.sqf b/addons/medical/functions/fnc_createLitter.sqf index edc16c186e..570c6d63d3 100644 --- a/addons/medical/functions/fnc_createLitter.sqf +++ b/addons/medical/functions/fnc_createLitter.sqf @@ -1,8 +1,10 @@ /* - * Author: jaynus + * Author: Glowbal + * Spawns litter for the treatment action on the ground around the target * * Arguments: - * + * 0: The target <OBJECT> + * 1: The treatment classname <STRING> * * Return Value: * @@ -12,5 +14,98 @@ #include "script_component.hpp" -// Create a synchronized, 30 second TTL event for litter -[QGVAR(createLitter), _this, 30] call EFUNC(common,syncedEvent); \ No newline at end of file +#define MIN_ENTRIES_LITTER_CONFIG 3 + +private ["_target", "_className", "_config", "_litter", "_createLitter", "_litterObject", "_position", "_createdLitter"]; +_caller = _this select 0; +_target = _this select 1; +_selectionName = _this select 2; +_className = _this select 3; +_usersOfItems = _this select 5; + +if !(GVAR(allowLitterCreation)) exitwith {}; +if (vehicle _caller != _caller || vehicle _target != _target) exitwith {}; + +_config = (configFile >> "ACE_Medical_Actions" >> "Basic" >> _className); +if (GVAR(level) >= 2) then { + _config = (configFile >> "ACE_Medical_Actions" >> "Advanced" >> _className); +}; +if !(isClass _config) exitwith {false}; + + +if !(isArray (_config >> "litter")) exitwith {}; +_litter = getArray (_config >> "litter"); + +_createLitter = { + _position = getPos (_this select 0); + _litterClass = _this select 1; + _litterObject = createVehicle [_litterClass, _position, [], 0, "NONE"]; + if (random(1) >= 0.5) then { + _litterObject setPos [(_position select 0) + random 2, (_position select 1) + random 2, _position select 2]; + } else { + _litterObject setPos [(_position select 0) - random 2, (_position select 1) - random 2, _position select 2]; + }; + _litterObject setDir (random 360); + _litterObject; +}; + +if (isnil QGVAR(allCreatedLitter)) then { + GVAR(allCreatedLitter) = []; + GVAR(litterPFHRunning) = false; +}; + +_createdLitter = []; +{ + if (typeName _x == "ARRAY") then { + if (count _x < MIN_ENTRIES_LITTER_CONFIG) exitwith {}; + private ["_selection", "_litterCondition", "_litterOptions"]; + _selection = _x select 0; + if (toLower _selection in [toLower _selectionName, "all"]) then { // in is case sensitve. We can be forgiving here, so lets use toLower. + _litterCondition = _x select 1; + _litterOptions = _x select 2; + + if (isnil _litterCondition) then { + _litterCondition = if (_litterCondition != "") then {compile _litterCondition} else {{true}}; + } else { + _litterCondition = missionNamespace getvariable _litterCondition; + }; + if !([_caller, _target, _selectionName, _className, _usersOfItems] call _litterCondition) exitwith {}; + + if (typeName _litterOptions == "ARRAY") then { + // Loop through through the litter options and place the litter + { + if (typeName _x == "ARRAY" && {(count _x > 0)}) then { + _createdLitter pushback ([_target, _x select (floor(random(count _x)))] call _createLitter); + }; + if (typeName _x == "STRING") then { + _createdLitter pushback ([_target, _x] call _createLitter); + }; + }foreach _litterOptions; + }; + }; + }; +}foreach _litter; + +if (GVAR(litterCleanUpDelay) >= 0) then { + GVAR(allCreatedLitter) pushback [time, GVAR(litterCleanUpDelay), _createdLitter]; +}; + +if !(GVAR(litterPFHRunning)) then { + GVAR(litterPFHRunning) = true; + [{ + { + if (time - (_x select 0) >= (_x select 1)) then { + { + deleteVehicle _x; + }foreach (_this select 2); + GVAR(allCreatedLitter) set[_foreachIndex, objNull]; + }; + }foreach GVAR(allCreatedLitter); + GVAR(allCreatedLitter) = GVAR(allCreatedLitter) - [objNull]; + + if (count GVAR(allCreatedLitter) == 0) exitwith { + GVAR(litterPFHRunning) = false; + [_this select 1] call CBA_fnc_removePerFrameHandler; + }; + }, 30, []] call CBA_fnc_addPerFrameHandler; +}; From 71e62711c6cbdf149a180508254906f06dfd73a8 Mon Sep 17 00:00:00 2001 From: PabstMirror <elephantisaterriblemascot@gmail.com> Date: Fri, 17 Apr 2015 22:02:23 -0500 Subject: [PATCH 129/257] #731 - stop error if target offscreen --- addons/common/functions/fnc_worldToScreenBounds.sqf | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/addons/common/functions/fnc_worldToScreenBounds.sqf b/addons/common/functions/fnc_worldToScreenBounds.sqf index 7b88350c6a..afb5817d81 100644 --- a/addons/common/functions/fnc_worldToScreenBounds.sqf +++ b/addons/common/functions/fnc_worldToScreenBounds.sqf @@ -40,12 +40,13 @@ if (true) then { { _ppos = worldToScreen (_object modelToWorld _x); - _pposX = _ppos select 0; - _pposY = _ppos select 1; - if (_pposX < _minX) then {_minX = _pposX}; - if (_pposX > _maxX) then {_maxX = _pposX}; - if (_pposY < _minY) then {_minY = _pposY}; - if (_pposY > _maxY) then {_maxY = _pposY}; + if (count _ppos >= 2) then { + EXPLODE_2_PVT(_ppos,_pposX,_pposY); + if (_pposX < _minX) then {_minX = _pposX}; + if (_pposX > _maxX) then {_maxX = _pposX}; + if (_pposY < _minY) then {_minY = _pposY}; + if (_pposY > _maxY) then {_maxY = _pposY}; + }; //else - what to do if it is offscreen? } forEach _boundsCorners; }; From db4de5100d63d2c76d4753d483113efed30877a2 Mon Sep 17 00:00:00 2001 From: ViperMaul <vipermaul@gmail.com> Date: Fri, 17 Apr 2015 20:23:39 -0700 Subject: [PATCH 130/257] #552 - Copy important files and extensions --- tools/make.py | 62 ++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 57 insertions(+), 5 deletions(-) diff --git a/tools/make.py b/tools/make.py index 166d21c49d..380c29faa7 100644 --- a/tools/make.py +++ b/tools/make.py @@ -284,6 +284,50 @@ def print_yellow(msg): print(msg) color("reset") + +def copy_important_files(source_dir,destination_dir): + + originalDir = os.getcwd() + importantFiles = ["mod.cpp", + "README.md", + "AUTHORS.txt", + "LICENSE", + "logo_ace3_ca.paa" + ] + + print_yellow ("source_dir: " + source_dir) + print_yellow("destination_dir: " + destination_dir) + + #copy importantFiles + try: + print_blue("Searching for important files in " + source_dir) + for file in importantFiles: + print_green("Copying file => " + os.path.join(source_dir,file)) + shutil.copyfile(os.path.join(source_dir,file),os.path.join(destination_dir,file)) + except: + print_error("COPYING IMPORTANT FILES.") + raise + + print("") + + #copy all extension dlls + try: + os.chdir(os.path.join(source_dir)) + print_blue("Searching for DLLs in " + os.getcwd()) + filenames = glob.glob("*.dll") + + if not filenames: + print ("Empty SET") + + for dll in filenames: + print_green("Copying dll => " + os.path.join(source_dir,dll)) + if os.path.isfile(dll): + shutil.copyfile(os.path.join(source_dir,dll),os.path.join(destination_dir,dll)) + except: + print_error("COPYING DLL FILES.") + raise + finally: + os.chdir(originalDir) ############################################################################### def main(argv): @@ -436,27 +480,36 @@ See the make.cfg file for additional build options. # Release/build directory, relative to script dir release_dir = cfg.get(make_target, "release_dir", fallback="release") - + # Project PBO file prefix (files are renamed to prefix_name.pbo) pbo_name_prefix = cfg.get(make_target, "pbo_name_prefix", fallback=None) # Project module Root module_root_parent = os.path.abspath(os.path.join(os.path.join(work_drive, prefix), os.pardir)) module_root = cfg.get(make_target, "module_root", fallback=os.path.join(make_root_parent, "addons")) + ace_optionals_root = os.path.join(module_root_parent, "optionals") print_green ("module_root: " + module_root) + if (os.path.isdir(module_root)): os.chdir(module_root) else: print_error ("Directory " + module_root + " does not exist.") sys.exit() + if (os.path.isdir(ace_optionals_root)): + print_green ("ace_optionals_root: " + ace_optionals_root) + else: + print_error ("Directory " + ace_optionals_root + " does not exist.") + sys.exit() + + print_green ("release_dir: " + release_dir) + copy_important_files(module_root_parent,os.path.join(release_dir, "@ace")) + except: raise print_error("Could not parse make.cfg.") sys.exit(1) - - # See if we have been given specific modules to build from command line. if len(argv) > 1 and not make_release: arg_modules = True @@ -501,7 +554,7 @@ See the make.cfg file for additional build options. # Get list of subdirs in make root. dirs = next(os.walk(module_root))[1] - + # Autodetect what directories to build. if module_autodetect and not arg_modules: modules = [] @@ -670,7 +723,6 @@ See the make.cfg file for additional build options. else: cmd = [pboproject, "-P", os.path.join(work_drive, prefix, module), "+Engine=Arma3", "-S","+Noisy", "-X", "+Clean", "+Mod="+os.path.join(module_root, release_dir, project), "-Key"] - print_yellow(cmd) color("grey") if quiet: devnull = open(os.devnull, 'w') From caef5c105f9cd290bc1cc34d552d55a2d09c0a70 Mon Sep 17 00:00:00 2001 From: PabstMirror <elephantisaterriblemascot@gmail.com> Date: Fri, 17 Apr 2015 22:40:37 -0500 Subject: [PATCH 131/257] More Privates --- addons/goggles/XEH_postInit.sqf | 1 + addons/goggles/functions/fnc_applyDirtEffect.sqf | 2 +- addons/goggles/functions/fnc_clearGlasses.sqf | 3 ++- addons/goggles/functions/fnc_getExplosionIndex.sqf | 2 +- addons/goggles/functions/fnc_isGogglesVisible.sqf | 6 ++++-- addons/hearing/functions/fnc_firedNear.sqf | 2 +- addons/hearing/functions/fnc_moduleHearing.sqf | 3 +-- addons/hearing/functions/fnc_updateVolume.sqf | 2 ++ addons/logistics_uavbattery/functions/fnc_refuelUAV.sqf | 2 ++ addons/logistics_wirecutter/functions/fnc_cutDownFence.sqf | 2 +- addons/logistics_wirecutter/functions/fnc_interactEH.sqf | 2 +- addons/magazinerepack/functions/fnc_getMagazineChildren.sqf | 2 +- .../magazinerepack/functions/fnc_simulateRepackEvents.sqf | 2 +- addons/map/functions/fnc_blueForceTrackingModule.sqf | 4 +--- addons/map/functions/fnc_blueForceTrackingUpdate.sqf | 2 ++ addons/map/functions/fnc_determineMapLight.sqf | 2 +- addons/map/functions/fnc_determineZoom.sqf | 2 +- addons/map/functions/fnc_moduleMap.sqf | 3 +-- addons/overheating/functions/fnc_checkTemperature.sqf | 2 ++ addons/overheating/functions/fnc_displayTemperature.sqf | 2 +- addons/overheating/functions/fnc_overheat.sqf | 5 ++--- addons/reload/functions/fnc_canCheckAmmo.sqf | 2 ++ addons/reload/functions/fnc_displayAmmo.sqf | 2 +- addons/reload/functions/fnc_startLinkingBelt.sqf | 4 ++-- 24 files changed, 35 insertions(+), 26 deletions(-) diff --git a/addons/goggles/XEH_postInit.sqf b/addons/goggles/XEH_postInit.sqf index ee62dfdd66..4fcf4fc055 100644 --- a/addons/goggles/XEH_postInit.sqf +++ b/addons/goggles/XEH_postInit.sqf @@ -56,6 +56,7 @@ FUNC(CheckGlasses) = { }; player addEventHandler ["Explosion", { + private "_effects"; if (alive ace_player) then { call FUNC(ApplyDirtEffect); if (GETBROKEN) exitWith {}; diff --git a/addons/goggles/functions/fnc_applyDirtEffect.sqf b/addons/goggles/functions/fnc_applyDirtEffect.sqf index 182ffac910..068f7639d2 100644 --- a/addons/goggles/functions/fnc_applyDirtEffect.sqf +++ b/addons/goggles/functions/fnc_applyDirtEffect.sqf @@ -16,7 +16,7 @@ #include "script_component.hpp" if (cameraOn != ace_player || {call FUNC(externalCamera)}) exitWith{false}; -private "_dirtImage"; +private ["_dirtImage", "_applied", "_effects"]; _effects = GETGLASSES(ace_player); _effects set [DIRT, true]; SETGLASSES(ace_player,_effects); diff --git a/addons/goggles/functions/fnc_clearGlasses.sqf b/addons/goggles/functions/fnc_clearGlasses.sqf index b70b962940..7fcb05a511 100644 --- a/addons/goggles/functions/fnc_clearGlasses.sqf +++ b/addons/goggles/functions/fnc_clearGlasses.sqf @@ -16,7 +16,8 @@ */ #include "script_component.hpp" -private "_broken"; +private ["_broken", "_effects"]; + _broken = GETBROKEN; _effects = GLASSESDEFAULT; _effects set [BROKEN, _broken]; diff --git a/addons/goggles/functions/fnc_getExplosionIndex.sqf b/addons/goggles/functions/fnc_getExplosionIndex.sqf index 5519bf397c..6e16085b2c 100644 --- a/addons/goggles/functions/fnc_getExplosionIndex.sqf +++ b/addons/goggles/functions/fnc_getExplosionIndex.sqf @@ -9,7 +9,7 @@ * The rating [0-3] <NUMBER> * * Example: - * _rating = 0.05 call ace_goggles_fnc_getExplosionIndex; + * 0.05 call ace_goggles_fnc_getExplosionIndex; * * Public: No */ diff --git a/addons/goggles/functions/fnc_isGogglesVisible.sqf b/addons/goggles/functions/fnc_isGogglesVisible.sqf index 9206965995..253a82f0a3 100644 --- a/addons/goggles/functions/fnc_isGogglesVisible.sqf +++ b/addons/goggles/functions/fnc_isGogglesVisible.sqf @@ -14,8 +14,10 @@ * Public: Yes */ #include "script_component.hpp" -private ["_currentGlasses", "_result", "_unit"]; -_unit = _this select 0; + +PARAMS_1(_unit); + +private ["_currentGlasses", "_result", "_position", "_visible"]; _currentGlasses = goggles _unit; _result = false; diff --git a/addons/hearing/functions/fnc_firedNear.sqf b/addons/hearing/functions/fnc_firedNear.sqf index 72776b68c6..7e9472e72a 100644 --- a/addons/hearing/functions/fnc_firedNear.sqf +++ b/addons/hearing/functions/fnc_firedNear.sqf @@ -21,7 +21,7 @@ */ #include "script_component.hpp" -private ["_unit", "_firer", "_distance", "_weapon", "_muzzle", "_mode", "_ammo", "_silencer", "_audibleFireCoef", "_loudness", "_strength"]; +private ["_unit", "_firer", "_distance", "_weapon", "_muzzle", "_mode", "_ammo", "_silencer", "_audibleFireCoef", "_loudness", "_strength", "_audibleFire", "_audibleFireTime", "_audibleFireTimeCoef"]; _unit = _this select 0; _firer = _this select 1; diff --git a/addons/hearing/functions/fnc_moduleHearing.sqf b/addons/hearing/functions/fnc_moduleHearing.sqf index d7b43e0092..a560a712a6 100644 --- a/addons/hearing/functions/fnc_moduleHearing.sqf +++ b/addons/hearing/functions/fnc_moduleHearing.sqf @@ -10,8 +10,7 @@ */ #include "script_component.hpp" -_logic = _this select 0; -_activated = _this select 2; +PARAMS_3(_logic,_units,_activated); if !(_activated) exitWith {}; diff --git a/addons/hearing/functions/fnc_updateVolume.sqf b/addons/hearing/functions/fnc_updateVolume.sqf index dd51f30e19..a0ca6af457 100644 --- a/addons/hearing/functions/fnc_updateVolume.sqf +++ b/addons/hearing/functions/fnc_updateVolume.sqf @@ -18,6 +18,8 @@ #define STRENGHTODEAFNESS 3 #define MAXDEAFNESS 1.1 +private ["_recoverRate", "_volume"]; + // Exit if combat deafness is disabled if !(GVAR(enableCombatDeafness)) exitWith {}; diff --git a/addons/logistics_uavbattery/functions/fnc_refuelUAV.sqf b/addons/logistics_uavbattery/functions/fnc_refuelUAV.sqf index b5c6664657..6fda0fed10 100644 --- a/addons/logistics_uavbattery/functions/fnc_refuelUAV.sqf +++ b/addons/logistics_uavbattery/functions/fnc_refuelUAV.sqf @@ -18,6 +18,8 @@ PARAMS_2(_caller,_target); +private ["_onFinish", "_onFailure"]; + if (!(_this call FUNC(canRefuelUAV))) exitWith {}; _onFinish = { diff --git a/addons/logistics_wirecutter/functions/fnc_cutDownFence.sqf b/addons/logistics_wirecutter/functions/fnc_cutDownFence.sqf index 5153176de2..0cab7ab461 100644 --- a/addons/logistics_wirecutter/functions/fnc_cutDownFence.sqf +++ b/addons/logistics_wirecutter/functions/fnc_cutDownFence.sqf @@ -17,7 +17,7 @@ #include "script_component.hpp" #define SOUND_CLIP_TIME_SPACEING 1.5 -private ["_timeToCut"]; +private ["_timeToCut", "_progressCheck"]; PARAMS_2(_unit,_fenceObject); if (_unit != ACE_player) exitWith {}; diff --git a/addons/logistics_wirecutter/functions/fnc_interactEH.sqf b/addons/logistics_wirecutter/functions/fnc_interactEH.sqf index ddd180047c..efb8f292c9 100644 --- a/addons/logistics_wirecutter/functions/fnc_interactEH.sqf +++ b/addons/logistics_wirecutter/functions/fnc_interactEH.sqf @@ -25,7 +25,7 @@ if (_interactionType != 0) exitWith {}; if (!("ACE_wirecutter" in (items ace_player))) exitWith {}; [{ - private ["_fncStatement", "_attachedFence", "_fncCondition", "_helper"]; + private ["_fncStatement", "_attachedFence", "_fncCondition", "_helper", "_action"]; PARAMS_2(_args,_pfID); EXPLODE_3_PVT(_args,_setPosition,_addedHelpers,_fencesHelped); diff --git a/addons/magazinerepack/functions/fnc_getMagazineChildren.sqf b/addons/magazinerepack/functions/fnc_getMagazineChildren.sqf index 7a2b81371c..fbd07cf31a 100644 --- a/addons/magazinerepack/functions/fnc_getMagazineChildren.sqf +++ b/addons/magazinerepack/functions/fnc_getMagazineChildren.sqf @@ -28,7 +28,7 @@ _unitMagCounts = []; _xFullMagazineCount = getNumber (configfile >> "CfgMagazines" >> _xClassname >> "count"); //for every partial magazine, that is either in inventory or can be moved there - if ((_xCount < _xFullMagazineCount) && {_xCount > 0} && {(!_xLoaded) || {_player canAdd _magazineClassname}}) then { + if ((_xCount < _xFullMagazineCount) && {_xCount > 0} && {(!_xLoaded) || {_player canAdd _xClassname}}) then { _index = _unitMagazines find _xClassname; if (_index == -1) then { _unitMagazines pushBack _xClassname; diff --git a/addons/magazinerepack/functions/fnc_simulateRepackEvents.sqf b/addons/magazinerepack/functions/fnc_simulateRepackEvents.sqf index fb37a0dd4e..4ef69044da 100644 --- a/addons/magazinerepack/functions/fnc_simulateRepackEvents.sqf +++ b/addons/magazinerepack/functions/fnc_simulateRepackEvents.sqf @@ -19,7 +19,7 @@ */ #include "script_component.hpp" -private ["_newMagFnc", "_time", "_events", "_swapAmmoFnc", "_ammoSwaped", "_lowIndex", "_highIndex", "_ammoToTransfer", "_ammoAvailable", "_ammoNeeded"]; +private ["_newMagFnc", "_time", "_events", "_swapAmmoFnc", "_ammoSwaped", "_lowIndex", "_highIndex", "_ammoToTransfer", "_ammoAvailable", "_ammoNeeded", "_swapProgress"]; PARAMS_3(_fullMagazineCount,_arrayOfAmmoCounts,_isBelt); diff --git a/addons/map/functions/fnc_blueForceTrackingModule.sqf b/addons/map/functions/fnc_blueForceTrackingModule.sqf index cecfd348d2..c156c9527d 100644 --- a/addons/map/functions/fnc_blueForceTrackingModule.sqf +++ b/addons/map/functions/fnc_blueForceTrackingModule.sqf @@ -14,9 +14,7 @@ if !(hasInterface) exitWith {}; -_logic = _this select 0; -_units = _this select 1; -_activated = _this select 2; +PARAMS_3(_logic,_units,_activated); if !(_activated) exitWith {}; diff --git a/addons/map/functions/fnc_blueForceTrackingUpdate.sqf b/addons/map/functions/fnc_blueForceTrackingUpdate.sqf index 030daeaa36..edbe484f04 100644 --- a/addons/map/functions/fnc_blueForceTrackingUpdate.sqf +++ b/addons/map/functions/fnc_blueForceTrackingUpdate.sqf @@ -1,5 +1,7 @@ #include "script_component.hpp" +private ["_groupsToDrawMarkers", "_playerSide", "_anyPlayers", "_markerType", "_colour", "_marker"]; + // Delete last set of markers (always) { deleteMarkerLocal _x; diff --git a/addons/map/functions/fnc_determineMapLight.sqf b/addons/map/functions/fnc_determineMapLight.sqf index fbc847c313..a5168bd8a1 100644 --- a/addons/map/functions/fnc_determineMapLight.sqf +++ b/addons/map/functions/fnc_determineMapLight.sqf @@ -15,7 +15,7 @@ EXPLODE_1_PVT(_this,_unit); -private ["_isEnclosed","_nearObjects","_light","_ll","_flashlight"]; +private ["_isEnclosed","_nearObjects","_light","_ll","_flashlight", "_flareTint", "_lightTint", "_l"]; // Blend two colors _fnc_blendColor = { diff --git a/addons/map/functions/fnc_determineZoom.sqf b/addons/map/functions/fnc_determineZoom.sqf index fdc620b417..345fc68583 100644 --- a/addons/map/functions/fnc_determineZoom.sqf +++ b/addons/map/functions/fnc_determineZoom.sqf @@ -12,7 +12,7 @@ */ #include "script_component.hpp" -private ["_grids", "_fourSize", "_sixSize", "_continue", "_size"]; +private ["_grids", "_fourSize", "_sixSize", "_continue", "_size", "_i"]; _grids = configFile >> "CfgWorlds" >> worldName >> "Grid"; _fourSize = -1; _sixSize = -1; diff --git a/addons/map/functions/fnc_moduleMap.sqf b/addons/map/functions/fnc_moduleMap.sqf index a22bbbb385..4bcdb69269 100644 --- a/addons/map/functions/fnc_moduleMap.sqf +++ b/addons/map/functions/fnc_moduleMap.sqf @@ -10,8 +10,7 @@ */ #include "script_component.hpp" -_logic = _this select 0; -_activated = _this select 2; +PARAMS_3(_logic,_units,_activated); if !(_activated) exitWith {}; diff --git a/addons/overheating/functions/fnc_checkTemperature.sqf b/addons/overheating/functions/fnc_checkTemperature.sqf index 6c15068815..0b811f9792 100644 --- a/addons/overheating/functions/fnc_checkTemperature.sqf +++ b/addons/overheating/functions/fnc_checkTemperature.sqf @@ -18,6 +18,8 @@ EXPLODE_2_PVT(_this,_player,_weapon); +private ["_action"]; + // Play animation and report temperature _action = getText (configFile >> "CfgWeapons" >> _weapon >> "ACE_checkTemperatureAction"); diff --git a/addons/overheating/functions/fnc_displayTemperature.sqf b/addons/overheating/functions/fnc_displayTemperature.sqf index 6112bea178..3012e480e3 100644 --- a/addons/overheating/functions/fnc_displayTemperature.sqf +++ b/addons/overheating/functions/fnc_displayTemperature.sqf @@ -16,7 +16,7 @@ EXPLODE_2_PVT(_this,_player,_weapon); // Calculate cool down of weapon since last shot -private ["_string", "_overheat", "_temperature", "_time", "_barrelMass"]; +private ["_string", "_overheat", "_temperature", "_time", "_barrelMass", "_a"]; _string = format [QGVAR(%1), _weapon]; _overheat = _player getVariable [_string, [0, 0]]; _temperature = _overheat select 0; diff --git a/addons/overheating/functions/fnc_overheat.sqf b/addons/overheating/functions/fnc_overheat.sqf index 2468265f8f..05e5bbba9c 100644 --- a/addons/overheating/functions/fnc_overheat.sqf +++ b/addons/overheating/functions/fnc_overheat.sqf @@ -17,7 +17,8 @@ */ #include "\z\ace\addons\overheating\script_component.hpp" -private ["_unit", "_weapon", "_ammo", "_projectile"]; +private ["_unit", "_weapon", "_ammo", "_projectile", "_velocity", "_variableName", "_overheat", "_temperature", "_time", "_bulletMass", "_energyIncrement", "_barrelMass", "_scaledTemperature", "_intensity", "_position", "_direction", "_dispersion", "_count", "_slowdownFactor", "_jamChance", "_surface"]; + _unit = _this select 0; _weapon = _this select 1; _ammo = _this select 4; @@ -25,8 +26,6 @@ _projectile = _this select 6; _velocity = velocity _projectile; -private ["_variableName", "_overheat", "_temperature", "_time", "_energyIncrement", "_barrelMass", "_scaledTemperature"]; - // each weapon has it's own variable. Can't store the temperature in the weapon since they are not objects unfortunately. _variableName = format [QGVAR(%1), _weapon]; diff --git a/addons/reload/functions/fnc_canCheckAmmo.sqf b/addons/reload/functions/fnc_canCheckAmmo.sqf index 63c302bf07..4075e7a151 100644 --- a/addons/reload/functions/fnc_canCheckAmmo.sqf +++ b/addons/reload/functions/fnc_canCheckAmmo.sqf @@ -13,6 +13,8 @@ EXPLODE_2_PVT(_this,_player,_target); +private ["_magazineType", "_magazineCfg"]; + // Return true for static weapons if they have been fired once, @todo 1.40 this work-around doesn't work anymore if (_target isKindOf "StaticWeapon") exitWith { if (currentMagazine _target != "") exitWith {true}; diff --git a/addons/reload/functions/fnc_displayAmmo.sqf b/addons/reload/functions/fnc_displayAmmo.sqf index 77578caa68..06f3a39da3 100644 --- a/addons/reload/functions/fnc_displayAmmo.sqf +++ b/addons/reload/functions/fnc_displayAmmo.sqf @@ -14,7 +14,7 @@ EXPLODE_1_PVT(_this,_target); -private ["_weapon","_muzzle","_magazine","_showNumber","_ammo","_maxRounds","_count","_text","_color","_picture"]; +private ["_weapon","_muzzle","_magazine","_showNumber","_ammo","_maxRounds","_count","_text","_color","_picture", "_a", "_string"]; _weapon = currentWeapon _target; _muzzle = currentMuzzle _target; diff --git a/addons/reload/functions/fnc_startLinkingBelt.sqf b/addons/reload/functions/fnc_startLinkingBelt.sqf index 412fcabb97..8b9145c237 100644 --- a/addons/reload/functions/fnc_startLinkingBelt.sqf +++ b/addons/reload/functions/fnc_startLinkingBelt.sqf @@ -15,7 +15,7 @@ EXPLODE_2_PVT(_this,_player,_target); if (vehicle _target != _target) exitWith {false}; -private ["_magazineCfg","_magazineType"]; +private ["_magazineCfg","_magazineType", "_condition", "_onFailure", "_onFinish"]; _magazineType = currentMagazine _target; _magazineCfg = configFile >> "CfgMagazines" >> _magazineType; if (getNumber (_magazineCfg >> "ACE_isBelt") == 0) exitWith {false}; @@ -54,7 +54,7 @@ _onFinish = { _onFailure = { EXPLODE_3_PVT((_this select 0),_player,_target,_magazine); - [_caller, "AmovPknlMstpSrasWrflDnon", 1] call EFUNC(common,doAnimation); + [_player, "AmovPknlMstpSrasWrflDnon", 1] call EFUNC(common,doAnimation); // Add back the magazine with the former ammo count _player addMagazine _magazine; From 9633547d6bf1e6e538baf50cc7b74a763065e0a4 Mon Sep 17 00:00:00 2001 From: commy2 <commy-2@gmx.de> Date: Sat, 18 Apr 2015 09:26:47 +0200 Subject: [PATCH 132/257] tweak ability to climb --- addons/movement/functions/fnc_canClimb.sqf | 33 ++++++++++++++++++---- 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/addons/movement/functions/fnc_canClimb.sqf b/addons/movement/functions/fnc_canClimb.sqf index 27753d8a12..1bc0d43bd8 100644 --- a/addons/movement/functions/fnc_canClimb.sqf +++ b/addons/movement/functions/fnc_canClimb.sqf @@ -25,15 +25,36 @@ _dir = [sin _dir, cos _dir, 0]; private ["_checkPos0beg", "_checkPos0end", "_checkPos1beg", "_checkPos1end"]; -_checkPos0beg = _pos vectorAdd [0, 0, 1.0]; +_checkPos0beg = _pos vectorAdd [0, 0, 0.9]; _checkPos0end = _checkPos0beg vectorAdd (_dir vectorMultiply 1.3); -_checkPos1beg = _pos vectorAdd [0, 0, 1.5]; -_checkPos1end = _checkPos1beg vectorAdd _dir; +_checkPos1beg = _pos vectorAdd [0, 0, 1.75]; +_checkPos1end = _checkPos1beg vectorAdd (_dir vectorMultiply 1.3); + +_checkPos2beg = _pos vectorAdd [0.3 * (_dir select 1), 0.3 * -(_dir select 0), 2.0]; +_checkPos2end = _checkPos2beg vectorAdd (_dir vectorMultiply 1.3); + +_checkPos3beg = _pos vectorAdd [-0.2 * (_dir select 1), -0.2 * -(_dir select 0), 2.0]; +_checkPos3end = _checkPos3beg vectorAdd (_dir vectorMultiply 1.3); + +_checkPos4beg = _pos vectorAdd [0.3 * (_dir select 1), 0.3 * -(_dir select 0), 1.5]; +_checkPos4end = _checkPos4beg vectorAdd (_dir vectorMultiply 1.3); + +_checkPos5beg = _pos vectorAdd [-0.2 * (_dir select 1), -0.2 * -(_dir select 0), 1.5]; +_checkPos5end = _checkPos5beg vectorAdd (_dir vectorMultiply 1.3); /* -drawLine3D [ASLToATL _checkPos0beg, ASLToATL _checkPos0end, [1,0,0,1]]; +drawLine3D [ASLToATL _checkPos0beg, ASLToATL _checkPos0end, [0,1,0,1]]; drawLine3D [ASLToATL _checkPos1beg, ASLToATL _checkPos1end, [1,0,0,1]]; - */ +drawLine3D [ASLToATL _checkPos2beg, ASLToATL _checkPos2end, [1,0.5,0.5,1]]; +drawLine3D [ASLToATL _checkPos3beg, ASLToATL _checkPos3end, [1,0.5,0.5,1]]; +drawLine3D [ASLToATL _checkPos4beg, ASLToATL _checkPos4end, [1,0.5,0.5,1]]; +drawLine3D [ASLToATL _checkPos5beg, ASLToATL _checkPos5end, [1,0.5,0.5,1]]; +*/ -lineIntersects [_checkPos0beg, _checkPos0end] && {!(lineIntersects [_checkPos1beg, _checkPos1end])} + lineIntersects [_checkPos0beg, _checkPos0end] +&& {!(lineIntersects [_checkPos1beg, _checkPos1end])} +&& {!(lineIntersects [_checkPos2beg, _checkPos2end])} +&& {!(lineIntersects [_checkPos3beg, _checkPos3end])} +&& {!(lineIntersects [_checkPos4beg, _checkPos4end])} +&& {!(lineIntersects [_checkPos5beg, _checkPos5end])} From 4264f78128dcc6ef2aa9eba7ced0b11019241d6d Mon Sep 17 00:00:00 2001 From: commy2 <commy-2@gmx.de> Date: Sat, 18 Apr 2015 10:16:10 +0200 Subject: [PATCH 133/257] player has to put weapon on back before climbing, check if still can climb --- addons/movement/functions/fnc_climb.sqf | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/addons/movement/functions/fnc_climb.sqf b/addons/movement/functions/fnc_climb.sqf index aff27ffe9d..f88884195e 100644 --- a/addons/movement/functions/fnc_climb.sqf +++ b/addons/movement/functions/fnc_climb.sqf @@ -24,6 +24,15 @@ if !([_unit] call FUNC(canClimb)) exitWith { }; if !(_unit getVariable [QGVAR(isClimbInit), false]) then { + _unit addEventHandler ["AnimChanged", { + if (local (_this select 0) && {_this select 1 == "ACE_Climb"}) then { + // abort climb animation + if !(_this call FUNC(canClimb)) then { + [_this select 0, "AmovPercMstpSnonWnonDnon", 2] call EFUNC(common,doAnimation); + }; + }; + }]; + _unit addEventHandler ["AnimDone", { if (local (_this select 0) && {_this select 1 == "ACE_Climb"}) then {_this call FUNC(handleClimb)}; }]; @@ -32,5 +41,5 @@ if !(_unit getVariable [QGVAR(isClimbInit), false]) then { }; [_unit] call EFUNC(common,fixLoweredRifleAnimation); -[_unit, "AmovPercMstpSnonWnonDnon", 2] call EFUNC(common,doAnimation); +[_unit, "AmovPercMstpSnonWnonDnon", 0] call EFUNC(common,doAnimation); [_unit, "ACE_Climb", 0] call EFUNC(common,doAnimation); From 9057edb1e24d22b6e5622b6b6dfffdfaf214343c Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Sat, 18 Apr 2015 11:10:05 +0200 Subject: [PATCH 134/257] Added a new module option for wind deflection: *enabled - true/false --- addons/winddeflection/ACE_Settings.hpp | 6 ++++++ addons/winddeflection/CfgVehicles.hpp | 6 ++++++ addons/winddeflection/functions/fnc_handleFired.sqf | 1 + 3 files changed, 13 insertions(+) diff --git a/addons/winddeflection/ACE_Settings.hpp b/addons/winddeflection/ACE_Settings.hpp index 89235fe5af..f84bdeace3 100644 --- a/addons/winddeflection/ACE_Settings.hpp +++ b/addons/winddeflection/ACE_Settings.hpp @@ -1,4 +1,10 @@ class ACE_Settings { + class GVAR(enabled) { + displayName = "Wind Deflection"; + description = "Enables wind deflection"; + typeName = "BOOL"; + value = 1; + }; class GVAR(simulationInterval) { displayName = "Simulation Interval"; description = "Defines the interval between every calculation step"; diff --git a/addons/winddeflection/CfgVehicles.hpp b/addons/winddeflection/CfgVehicles.hpp index f9362a2711..09dc1b69be 100644 --- a/addons/winddeflection/CfgVehicles.hpp +++ b/addons/winddeflection/CfgVehicles.hpp @@ -11,6 +11,12 @@ class CfgVehicles { isTriggerActivated = 0; author = "$STR_ACE_Common_ACETeam"; class Arguments { + class enabled { + displayName = "Wind Deflection"; + description = "Enables wind deflection"; + typeName = "BOOL"; + defaultValue = 1; + }; class simulationInterval { displayName = "Simulation Interval"; description = "Defines the interval between every calculation step"; diff --git a/addons/winddeflection/functions/fnc_handleFired.sqf b/addons/winddeflection/functions/fnc_handleFired.sqf index 5ee22ecf4f..241fbcf839 100644 --- a/addons/winddeflection/functions/fnc_handleFired.sqf +++ b/addons/winddeflection/functions/fnc_handleFired.sqf @@ -28,6 +28,7 @@ _unit = _this select 0; _bullet = _this select 6; if (!hasInterface) exitWith {false}; +if (!(GVAR(enabled))) exitWith {false}; if (!(_bullet isKindOf "BulletBase")) exitWith {false}; if (_unit distance ACE_player > GVAR(simulationRadius)) exitWith {false}; if (!([_unit] call EFUNC(common,isPlayer))) exitWith {false}; From 2a6dcbfbcb276b43935b2c8725b57f0513a9c972 Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Sat, 18 Apr 2015 12:12:19 +0200 Subject: [PATCH 135/257] Added automatic unit conversion for the target data --- .../functions/fnc_calculate_range_card.sqf | 4 ---- .../functions/fnc_calculate_solution.sqf | 2 ++ .../fnc_calculate_target_solution.sqf | 7 ------- addons/atragmx/functions/fnc_parse_input.sqf | 10 ++++++++- .../atragmx/functions/fnc_update_target.sqf | 18 +++++++++++++--- .../functions/fnc_update_target_data.sqf | 21 +++++++++++++++---- 6 files changed, 43 insertions(+), 19 deletions(-) diff --git a/addons/atragmx/functions/fnc_calculate_range_card.sqf b/addons/atragmx/functions/fnc_calculate_range_card.sqf index f506726be2..359f7ab4ee 100644 --- a/addons/atragmx/functions/fnc_calculate_range_card.sqf +++ b/addons/atragmx/functions/fnc_calculate_range_card.sqf @@ -68,10 +68,6 @@ _windDirection = (GVAR(windDirection) select GVAR(currentTarget)); _inclinationAngle = (GVAR(inclinationAngle) select GVAR(currentTarget)); _targetSpeed = (GVAR(targetSpeed) select GVAR(currentTarget)); _targetRange = GVAR(rangeCardEndRange); -if (GVAR(currentUnit) != 2) then { - _windSpeed = _windSpeed / 2.23693629; - _targetSpeed = _targetSpeed / 2.23693629; -}; if (GVAR(currentUnit) == 1) then { _targetRange = _targetRange / 1.0936133; }; diff --git a/addons/atragmx/functions/fnc_calculate_solution.sqf b/addons/atragmx/functions/fnc_calculate_solution.sqf index f7f23044e3..db8a475b93 100644 --- a/addons/atragmx/functions/fnc_calculate_solution.sqf +++ b/addons/atragmx/functions/fnc_calculate_solution.sqf @@ -43,6 +43,8 @@ */ #include "script_component.hpp" +systemChat format["%1", _this]; + private ["_scopeBaseAngle", "_bulletMass", "_boreHeight", "_airFriction", "_muzzleVelocity", "_temperature", "_barometricPressure", "_relativeHumidity", "_simSteps", "_windSpeed", "_windDirection", "_inclinationAngle", "_targetSpeed", "_targetRange", "_bc", "_dragModel", "_atmosphereModel", "_storeRangeCardData", "_stabilityFactor", "_twistDirection", "_latitude"]; _scopeBaseAngle = _this select 0; _bulletMass = _this select 1; diff --git a/addons/atragmx/functions/fnc_calculate_target_solution.sqf b/addons/atragmx/functions/fnc_calculate_target_solution.sqf index f6dd92bc7f..764f21cfc9 100644 --- a/addons/atragmx/functions/fnc_calculate_target_solution.sqf +++ b/addons/atragmx/functions/fnc_calculate_target_solution.sqf @@ -68,13 +68,6 @@ _windDirection = GVAR(windDirection) select GVAR(currentTarget); _inclinationAngle = GVAR(inclinationAngle) select GVAR(currentTarget); _targetSpeed = GVAR(targetSpeed) select GVAR(currentTarget); _targetRange = GVAR(targetRange) select GVAR(currentTarget); -if (GVAR(currentUnit) != 2) then { - _windSpeed = _windSpeed / 2.23693629; - _targetSpeed = _targetSpeed / 2.23693629; -}; -if (GVAR(currentUnit) == 1) then { - _targetRange = _targetRange / 1.0936133; -}; private ["_result"]; _result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000, diff --git a/addons/atragmx/functions/fnc_parse_input.sqf b/addons/atragmx/functions/fnc_parse_input.sqf index be91ecc593..172df7bd58 100644 --- a/addons/atragmx/functions/fnc_parse_input.sqf +++ b/addons/atragmx/functions/fnc_parse_input.sqf @@ -31,8 +31,16 @@ GVAR(windSpeed1) set [GVAR(currentTarget), 0 max abs(parseNumber(ctrlText 140020 GVAR(windSpeed2) set [GVAR(currentTarget), 0 max abs(parseNumber(ctrlText 140021)) min 50]; GVAR(windDirection) set [GVAR(currentTarget), 1 max Round(parseNumber(ctrlText 140030)) min 12]; GVAR(inclinationAngle) set [GVAR(currentTarget), -60 max parseNumber(ctrlText 140040) min 60]; -GVAR(targetSpeed) set [GVAR(currentTarget), 0 max abs(parseNumber(ctrlText 140050)) min 50]; +GVAR(targetSpeed) set [GVAR(currentTarget), -50 max abs(parseNumber(ctrlText 140050)) min 50]; GVAR(targetRange) set [GVAR(currentTarget), 0 max abs(parseNumber(ctrlText 140060)) min 4000]; +if (GVAR(currentUnit) != 2) then { + GVAR(windSpeed1) set [GVAR(currentTarget), (GVAR(windSpeed1) select GVAR(currentTarget)) * 0.44704]; + GVAR(windSpeed2) set [GVAR(currentTarget), (GVAR(windSpeed2) select GVAR(currentTarget)) * 0.44704]; + GVAR(targetSpeed) set [GVAR(currentTarget), (GVAR(targetSpeed) select GVAR(currentTarget)) * 0.44704]; +}; +if (GVAR(currentUnit) == 1) then { + GVAR(targetRange) set [GVAR(currentTarget), (GVAR(targetRange) select GVAR(currentTarget)) * 0.9144]; +}; private ["_boreHeight", "_bulletMass", "_bulletDiameter", "_airFriction", "_rifleTwist", "_muzzleVelocity", "_zeroRange"]; _boreHeight = parseNumber(ctrlText 120000); diff --git a/addons/atragmx/functions/fnc_update_target.sqf b/addons/atragmx/functions/fnc_update_target.sqf index 30b33eb55f..c5a02c0164 100644 --- a/addons/atragmx/functions/fnc_update_target.sqf +++ b/addons/atragmx/functions/fnc_update_target.sqf @@ -15,8 +15,20 @@ */ #include "script_component.hpp" -ctrlSetText [300, Str(Round((GVAR(windSpeed1) select GVAR(currentTarget)) * 100) / 100)]; +if (GVAR(currentUnit) != 2) then { + ctrlSetText [300, Str(Round((GVAR(windSpeed1) select GVAR(currentTarget)) * 2.23693629 * 100) / 100)]; +} else { + ctrlSetText [300, Str(Round((GVAR(windSpeed1) select GVAR(currentTarget)) * 100) / 100)]; +}; ctrlSetText [310, Str(Round((GVAR(windDirection) select GVAR(currentTarget))))]; ctrlSetText [320, Str(Round((GVAR(inclinationAngle) select GVAR(currentTarget))))]; -ctrlSetText [330, Str(Round((GVAR(targetSpeed) select GVAR(currentTarget)) * 100) / 100)]; -ctrlSetText [340, Str(Round((GVAR(targetRange) select GVAR(currentTarget))))]; +if (GVAR(currentUnit) != 2) then { + ctrlSetText [330, Str(Round((GVAR(targetSpeed) select GVAR(currentTarget)) * 2.23693629 * 100) / 100)]; +} else { + ctrlSetText [330, Str(Round((GVAR(targetSpeed) select GVAR(currentTarget)) * 100) / 100)]; +}; +if (GVAR(currentUnit) == 1) then { + ctrlSetText [340, Str(Round((GVAR(targetRange) select GVAR(currentTarget)) * 1.0936133))]; +} else { + ctrlSetText [340, Str(Round((GVAR(targetRange) select GVAR(currentTarget))))]; +}; diff --git a/addons/atragmx/functions/fnc_update_target_data.sqf b/addons/atragmx/functions/fnc_update_target_data.sqf index 35711acd5b..bfd7fced05 100644 --- a/addons/atragmx/functions/fnc_update_target_data.sqf +++ b/addons/atragmx/functions/fnc_update_target_data.sqf @@ -17,13 +17,26 @@ ctrlSetText [140000, Str(Round((GVAR(latitude) select GVAR(currentTarget)) * 100) / 100)]; ctrlSetText [140010, Str(Round((GVAR(directionOfFire) select GVAR(currentTarget)) * 100) / 100)]; -ctrlSetText [140020, Str(Round((GVAR(windSpeed1) select GVAR(currentTarget)) * 100) / 100)]; -ctrlSetText [140021, Str(Round((GVAR(windSpeed2) select GVAR(currentTarget)) * 100) / 100)]; +if (GVAR(currentUnit) != 2) then { + ctrlSetText [140020, Str(Round((GVAR(windSpeed1) select GVAR(currentTarget)) * 2.23693629 * 100) / 100)]; + ctrlSetText [140021, Str(Round((GVAR(windSpeed2) select GVAR(currentTarget)) * 2.23693629 * 100) / 100)]; +} else { + ctrlSetText [140020, Str(Round((GVAR(windSpeed1) select GVAR(currentTarget)) * 100) / 100)]; + ctrlSetText [140021, Str(Round((GVAR(windSpeed2) select GVAR(currentTarget)) * 100) / 100)]; +}; ctrlSetText [140030, Str(Round((GVAR(windDirection) select GVAR(currentTarget))))]; ctrlSetText [140040, Str(Round((GVAR(inclinationAngle) select GVAR(currentTarget))))]; ctrlSetText [140041, Str(floor(cos(GVAR(inclinationAngle) select GVAR(currentTarget)) * 100) / 100)]; -ctrlSetText [140050, Str(Round((GVAR(targetSpeed) select GVAR(currentTarget)) * 100) / 100)]; -ctrlSetText [140060, Str(Round((GVAR(targetRange) select GVAR(currentTarget))))]; +if (GVAR(currentUnit) != 2) then { + ctrlSetText [140050, Str(Round((GVAR(targetSpeed) select GVAR(currentTarget)) * 2.23693629 * 100) / 100)]; +} else { + ctrlSetText [140050, Str(Round((GVAR(targetSpeed) select GVAR(currentTarget)) * 100) / 100)]; +}; +if (GVAR(currentUnit) == 1) then { + ctrlSetText [140060, Str(Round((GVAR(targetRange) select GVAR(currentTarget)) * 1.0936133))]; +} else { + ctrlSetText [140060, Str(Round((GVAR(targetRange) select GVAR(currentTarget))))]; +}; if (GVAR(currentUnit) == 2) then { ctrlSetText [14002, "Wind Speed (m/s)"]; From 4449c99ebaaaa7a62e299438e49b361365a94824 Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Sat, 18 Apr 2015 12:13:27 +0200 Subject: [PATCH 136/257] Removed debug output --- addons/atragmx/functions/fnc_calculate_solution.sqf | 2 -- 1 file changed, 2 deletions(-) diff --git a/addons/atragmx/functions/fnc_calculate_solution.sqf b/addons/atragmx/functions/fnc_calculate_solution.sqf index db8a475b93..f7f23044e3 100644 --- a/addons/atragmx/functions/fnc_calculate_solution.sqf +++ b/addons/atragmx/functions/fnc_calculate_solution.sqf @@ -43,8 +43,6 @@ */ #include "script_component.hpp" -systemChat format["%1", _this]; - private ["_scopeBaseAngle", "_bulletMass", "_boreHeight", "_airFriction", "_muzzleVelocity", "_temperature", "_barometricPressure", "_relativeHumidity", "_simSteps", "_windSpeed", "_windDirection", "_inclinationAngle", "_targetSpeed", "_targetRange", "_bc", "_dragModel", "_atmosphereModel", "_storeRangeCardData", "_stabilityFactor", "_twistDirection", "_latitude"]; _scopeBaseAngle = _this select 0; _bulletMass = _this select 1; From 0f7bcf8d622882f62b7425c60ce8f45ff6fb8bde Mon Sep 17 00:00:00 2001 From: Grzegorz Sikora <gienkov.grzegorz@gmail.com> Date: Sat, 18 Apr 2015 13:56:34 +0200 Subject: [PATCH 137/257] PL translation --- addons/optionsmenu/stringtable.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/optionsmenu/stringtable.xml b/addons/optionsmenu/stringtable.xml index 2bc66b8b52..5c292ea16f 100644 --- a/addons/optionsmenu/stringtable.xml +++ b/addons/optionsmenu/stringtable.xml @@ -1,4 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> +<!-- Edited with tabler. --> <Project name="ACE"> <Package name="OptionsMenu"> <Key ID="STR_ACE_OptionsMenu_OpenConfigMenu"> @@ -215,6 +216,7 @@ </Key> <Key ID="STR_ACE_optionsMenu_uiScaing"> <English>Option Menu UI Scaling</English> + <Polish>Skalowanie UI menu ustawień</Polish> </Key> </Package> </Project> \ No newline at end of file From 422e175f09229fc7c80b8a1ff5903eae33cea1b9 Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Sat, 18 Apr 2015 15:08:54 +0200 Subject: [PATCH 138/257] Implemented the dual wind speed feature --- addons/atragmx/RscTitles.hpp | 2 +- .../functions/fnc_calculate_range_card.sqf | 7 +- .../fnc_calculate_scope_base_angle.sqf | 2 +- .../functions/fnc_calculate_solution.sqf | 66 +++++++++++-------- .../fnc_calculate_target_solution.sqf | 10 +-- addons/atragmx/functions/fnc_change_gun.sqf | 3 +- addons/atragmx/functions/fnc_init.sqf | 4 +- .../functions/fnc_restore_user_data.sqf | 1 + .../atragmx/functions/fnc_store_user_data.sqf | 1 + .../functions/fnc_update_range_card.sqf | 30 ++++++--- .../fnc_update_relative_click_memory.sqf | 2 +- .../atragmx/functions/fnc_update_result.sqf | 28 ++++++-- .../atragmx/functions/fnc_update_target.sqf | 14 +++- .../functions/fnc_update_zero_range.sqf | 2 +- 14 files changed, 115 insertions(+), 57 deletions(-) diff --git a/addons/atragmx/RscTitles.hpp b/addons/atragmx/RscTitles.hpp index 592374ddad..0752f8beb7 100644 --- a/addons/atragmx/RscTitles.hpp +++ b/addons/atragmx/RscTitles.hpp @@ -573,7 +573,7 @@ class ATragMX_Display { x=0.550*safezoneW+safezoneX+0.11; y=0.265*safezoneH+safezoneY+0.57; text="Lead"; - action=""; + action=QUOTE(GVAR(showWind2) = !GVAR(showWind2); call FUNC(update_result); call FUNC(update_target)); }; class TEXT_LEAD_OUTPUT: TEXT_ELEVATION_OUTPUT_ABSOLUTE { idc=420; diff --git a/addons/atragmx/functions/fnc_calculate_range_card.sqf b/addons/atragmx/functions/fnc_calculate_range_card.sqf index 359f7ab4ee..c11cf90550 100644 --- a/addons/atragmx/functions/fnc_calculate_range_card.sqf +++ b/addons/atragmx/functions/fnc_calculate_range_card.sqf @@ -60,10 +60,11 @@ if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) }; }; -private ["_latitude", "_directionOfFire", "_windSpeed", "_windDirection", "_inclinationAngle", "_targetSpeed", "_targetRange"]; +private ["_latitude", "_directionOfFire", "_windSpeed1", "_windSpeed2", "_windDirection", "_inclinationAngle", "_targetSpeed", "_targetRange"]; _latitude = GVAR(latitude) select GVAR(currentTarget); _directionOfFire = GVAR(directionOfFire) select GVAR(currentTarget); -_windSpeed = (GVAR(windSpeed1) select GVAR(currentTarget)); +_windSpeed1 = (GVAR(windSpeed1) select GVAR(currentTarget)); +_windSpeed2 = (GVAR(windSpeed2) select GVAR(currentTarget)); _windDirection = (GVAR(windDirection) select GVAR(currentTarget)); _inclinationAngle = (GVAR(inclinationAngle) select GVAR(currentTarget)); _targetSpeed = (GVAR(targetSpeed) select GVAR(currentTarget)); @@ -76,4 +77,4 @@ GVAR(rangeCardData) = []; private ["_result"]; _result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000, - _windSpeed, _windDirection, _inclinationAngle, _targetSpeed, _targetRange, _bc, _dragModel, _atmosphereModel, true, _stabilityFactor, _twistDirection, _latitude] call FUNC(calculate_solution); + [_windSpeed1, _windSpeed2], _windDirection, _inclinationAngle, _targetSpeed, _targetRange, _bc, _dragModel, _atmosphereModel, true, _stabilityFactor, _twistDirection, _latitude] call FUNC(calculate_solution); diff --git a/addons/atragmx/functions/fnc_calculate_scope_base_angle.sqf b/addons/atragmx/functions/fnc_calculate_scope_base_angle.sqf index 4995c31a61..76c54f63a9 100644 --- a/addons/atragmx/functions/fnc_calculate_scope_base_angle.sqf +++ b/addons/atragmx/functions/fnc_calculate_scope_base_angle.sqf @@ -35,6 +35,6 @@ _barometricPressure = 1013.25; _relativeHumidity = 0; private ["_result"]; -_result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000, 0, 0, 0, 0, _zeroRange, _airFriction, 1, "ICAO", false, 1.5, 0, 0] call FUNC(calculate_solution); +_result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000, [0, 0], 0, 0, 0, _zeroRange, _airFriction, 1, "ICAO", false, 1.5, 0, 0] call FUNC(calculate_solution); _scopeBaseAngle + (_result select 0) / 60 diff --git a/addons/atragmx/functions/fnc_calculate_solution.sqf b/addons/atragmx/functions/fnc_calculate_solution.sqf index f7f23044e3..242e2e9c48 100644 --- a/addons/atragmx/functions/fnc_calculate_solution.sqf +++ b/addons/atragmx/functions/fnc_calculate_solution.sqf @@ -12,7 +12,7 @@ * 6: barometric pressure <NUMBER> * 7: relative humidity <NUMBER> * 8: simulation steps <NUMBER> - * 9: wind speed <NUMBER> + * 9: wind speed <ARRAY> * 10: wind direction <NUMBER> * 11: inclination angle <NUMBER> * 12: target speed <NUMBER> @@ -26,15 +26,15 @@ * 20: Latitude <NUMBER> * * Return Value: - * 0: Elevation <NUMBER> - * 1: Windage <NUMBER> - * 2: Lead <NUMBER> - * 3: Time of fligth <NUMBER> - * 4: Remaining velocity <NUMBER> - * 5: Remaining kinetic energy <NUMBER> - * 6: Vertical coriolis drift <NUMBER> - * 7: Horizontal coriolis drift <NUMBER> - * 8: Spin drift <NUMBER> + * 0: Elevation (MOA) <NUMBER> + * 1: Windage (MOA) <ARRAY> + * 2: Lead (MOA) <NUMBER> + * 3: Time of fligth (SECONDS) <NUMBER> + * 4: Remaining velocity (m/s) <NUMBER> + * 5: Remaining kinetic energy (ft·lb) <NUMBER> + * 6: Vertical coriolis drift (MOA) <NUMBER> + * 7: Horizontal coriolis drift (MOA) <NUMBER> + * 8: Spin drift (MOA) <NUMBER> * * Example: * call ace_atragmx_calculate_target_range_assist @@ -43,7 +43,7 @@ */ #include "script_component.hpp" -private ["_scopeBaseAngle", "_bulletMass", "_boreHeight", "_airFriction", "_muzzleVelocity", "_temperature", "_barometricPressure", "_relativeHumidity", "_simSteps", "_windSpeed", "_windDirection", "_inclinationAngle", "_targetSpeed", "_targetRange", "_bc", "_dragModel", "_atmosphereModel", "_storeRangeCardData", "_stabilityFactor", "_twistDirection", "_latitude"]; +private ["_scopeBaseAngle", "_bulletMass", "_boreHeight", "_airFriction", "_muzzleVelocity", "_temperature", "_barometricPressure", "_relativeHumidity", "_simSteps", "_windSpeed1", "_windSpeed2", "_windDirection", "_inclinationAngle", "_targetSpeed", "_targetRange", "_bc", "_dragModel", "_atmosphereModel", "_storeRangeCardData", "_stabilityFactor", "_twistDirection", "_latitude"]; _scopeBaseAngle = _this select 0; _bulletMass = _this select 1; _boreHeight = _this select 2; @@ -53,7 +53,8 @@ _temperature = _this select 5; _barometricPressure = _this select 6; _relativeHumidity = _this select 7; _simSteps = _this select 8; -_windSpeed = _this select 9; +_windSpeed1 = (_this select 9) select 0; +_windSpeed2 = (_this select 9) select 1; _windDirection = _this select 10; _inclinationAngle = _this select 11; _targetSpeed = _this select 12; @@ -74,9 +75,10 @@ _bulletSpeed = 0; _gravity = [0, sin(_scopeBaseAngle + _inclinationAngle) * -9.80665, cos(_scopeBaseAngle + _inclinationAngle) * -9.80665]; _deltaT = 1 / _simSteps; -private ["_elevation", "_windage", "_lead", "_TOF", "_trueVelocity", "_trueSpeed", "_kineticEnergy", "_verticalCoriolis", "_verticalDeflection", "_horizontalCoriolis", "_horizontalDeflection", "_spinDrift", "_spinDeflection"]; +private ["_elevation", "_windage1", "_windage2", "_lead", "_TOF", "_trueVelocity", "_trueSpeed", "_kineticEnergy", "_verticalCoriolis", "_verticalDeflection", "_horizontalCoriolis", "_horizontalDeflection", "_spinDrift", "_spinDeflection"]; _elevation = 0; -_windage = 0; +_windage1 = 0; +_windage2 = 0; _lead = 0; _TOF = 0; _trueVelocity = [0, 0, 0]; @@ -99,8 +101,10 @@ if (_storeRangeCardData) then { GVAR(rangeCardData) = []; }; -private ["_wind"]; -_wind = [cos(270 - _windDirection * 30) * _windSpeed, sin(270 - _windDirection * 30) * _windSpeed, 0]; +private ["_wind1", "_wind2", "_windDrift"]; +_wind1 = [cos(270 - _windDirection * 30) * _windSpeed1, sin(270 - _windDirection * 30) * _windSpeed1, 0]; +_wind2 = [cos(270 - _windDirection * 30) * _windSpeed2, sin(270 - _windDirection * 30) * _windSpeed2, 0]; +_windDrift = 0; if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false])) then { _bc = [_bc, _temperature, _barometricPressure, _relativeHumidity, _atmosphereModel] call EFUNC(advanced_ballistics,calculateAtmosphericCorrection); }; @@ -127,7 +131,7 @@ while {_TOF < 15 && (_bulletPos select 1) < _targetRange} do { _stepsTotal = _stepsTotal + 1; _speedAverage = (_speedTotal / _stepsTotal); - _trueVelocity = _bulletVelocity vectorDiff _wind; + _trueVelocity = _bulletVelocity vectorDiff _wind1; _trueSpeed = vectorMagnitude _trueVelocity; if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then { @@ -156,7 +160,9 @@ while {_TOF < 15 && (_bulletPos select 1) < _targetRange} do { if ((_bulletPos select 1) * _rangeFactor >= _range && _range <= GVAR(rangeCardEndRange)) then { if ((_bulletPos select 1) > 0) then { _elevation = - atan((_bulletPos select 2) / (_bulletPos select 1)); - _windage = - atan((_bulletPos select 0) / (_bulletPos select 1)); + _windage1 = - atan((_bulletPos select 0) / (_bulletPos select 1)); + _windDrift = (_wind2 select 0) * (_TOF - (_range / _rangeFactor) / _muzzleVelocity); + _windage2 = - atan(_windDrift / (_bulletPos select 1)); }; if (_range != 0) then { _lead = (_targetSpeed * _TOF) / (Tan(3.38 / 60) * _range); @@ -166,20 +172,22 @@ while {_TOF < 15 && (_bulletPos select 1) < _targetRange} do { if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,CoriolisEnabled), false])) then { if ((_bulletPos select 1) > 0) then { - _horizontalDeflection = 0.0000729 * ((_bulletPos select 0) ^ 2) * sin(_latitude) / _speedAverage; + _horizontalDeflection = 0.0000729 * ((_bulletPos select 1) ^ 2) * sin(_latitude) / _speedAverage; _horizontalCoriolis = - atan(_horizontalDeflection / (_bulletPos select 1)); - _windage = _windage + _horizontalCoriolis; + _windage1 = _windage1 + _horizontalCoriolis; + _windage2 = _windage2 + _horizontalCoriolis; }; }; if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,SpinDriftEnabled), false])) then { if ((_bulletPos select 1) > 0) then { _spinDeflection = _twistDirection * 0.0254 * 1.25 * (_stabilityFactor + 1.2) * _TOF ^ 1.83; _spinDrift = - atan(_spinDeflection / (_bulletPos select 1)); - _windage = _windage + _spinDrift; + _windage1 = _windage1 + _spinDrift; + _windage2 = _windage2 + _spinDrift; }; }; - GVAR(rangeCardData) set [_n, [_range, _elevation * 60, _windage * 60, _lead, _TOF, _bulletSpeed, _kineticEnergy]]; + GVAR(rangeCardData) set [_n, [_range, _elevation * 60, [_windage1 * 60, _windage2 * 60], _lead, _TOF, _bulletSpeed, _kineticEnergy]]; _n = _n + 1; }; }; @@ -187,7 +195,9 @@ while {_TOF < 15 && (_bulletPos select 1) < _targetRange} do { if ((_bulletPos select 1) > 0) then { _elevation = - atan((_bulletPos select 2) / (_bulletPos select 1)); - _windage = - atan((_bulletPos select 0) / (_bulletPos select 1)); + _windage1 = - atan((_bulletPos select 0) / (_bulletPos select 1)); + _windDrift = (_wind2 select 0) * (_TOF - _targetRange / _muzzleVelocity); + _windage2 = - atan(_windDrift / (_bulletPos select 1)); }; if (_targetRange != 0) then { @@ -199,17 +209,19 @@ _kineticEnergy = _kineticEnergy * 0.737562149; if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,CoriolisEnabled), false])) then { if ((_bulletPos select 1) > 0) then { - _horizontalDeflection = 0.0000729 * ((_bulletPos select 0) ^ 2) * sin(_latitude) / _speedAverage; + _horizontalDeflection = 0.0000729 * ((_bulletPos select 1) ^ 2) * sin(_latitude) / _speedAverage; _horizontalCoriolis = - atan(_horizontalDeflection / (_bulletPos select 1)); - _windage = _windage + _horizontalCoriolis; + _windage1 = _windage1 + _horizontalCoriolis; + _windage2 = _windage2 + _horizontalCoriolis; }; }; if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,SpinDriftEnabled), false])) then { if ((_bulletPos select 1) > 0) then { _spinDeflection = _twistDirection * 0.0254 * 1.25 * (_stabilityFactor + 1.2) * _TOF ^ 1.83; _spinDrift = - atan(_spinDeflection / (_bulletPos select 1)); - _windage = _windage + _spinDrift; + _windage1 = _windage1 + _spinDrift; + _windage2 = _windage2 + _spinDrift; }; }; -[_elevation * 60, _windage * 60, _lead, _TOF, _bulletSpeed, _kineticEnergy, _verticalCoriolis, _horizontalCoriolis, _spinDrift] +[_elevation * 60, [_windage1 * 60, _windage2 * 60], _lead, _TOF, _bulletSpeed, _kineticEnergy, _verticalCoriolis * 60, _horizontalCoriolis * 60, _spinDrift * 60] diff --git a/addons/atragmx/functions/fnc_calculate_target_solution.sqf b/addons/atragmx/functions/fnc_calculate_target_solution.sqf index 764f21cfc9..c8a3683498 100644 --- a/addons/atragmx/functions/fnc_calculate_target_solution.sqf +++ b/addons/atragmx/functions/fnc_calculate_target_solution.sqf @@ -60,10 +60,11 @@ if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) }; }; -private ["_latitude", "_directionOfFire", "_windSpeed", "_windDirection", "_inclinationAngle", "_targetSpeed", "_targetRange"]; +private ["_latitude", "_directionOfFire", "_windSpeed1", "_windSpeed2", "_windDirection", "_inclinationAngle", "_targetSpeed", "_targetRange"]; _latitude = GVAR(latitude) select GVAR(currentTarget); _directionOfFire = GVAR(directionOfFire) select GVAR(currentTarget); -_windSpeed = GVAR(windSpeed1) select GVAR(currentTarget); +_windSpeed1 = GVAR(windSpeed1) select GVAR(currentTarget); +_windSpeed2 = GVAR(windSpeed2) select GVAR(currentTarget); _windDirection = GVAR(windDirection) select GVAR(currentTarget); _inclinationAngle = GVAR(inclinationAngle) select GVAR(currentTarget); _targetSpeed = GVAR(targetSpeed) select GVAR(currentTarget); @@ -71,10 +72,11 @@ _targetRange = GVAR(targetRange) select GVAR(currentTarget); private ["_result"]; _result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000, - _windSpeed, _windDirection, _inclinationAngle, _targetSpeed, _targetRange, _bc, _dragModel, _atmosphereModel, false, _stabilityFactor, _twistDirection, _latitude] call FUNC(calculate_solution); + [_windSpeed1, _windSpeed2], _windDirection, _inclinationAngle, _targetSpeed, _targetRange, _bc, _dragModel, _atmosphereModel, false, _stabilityFactor, _twistDirection, _latitude] call FUNC(calculate_solution); GVAR(elevationOutput) set [GVAR(currentTarget), _result select 0]; -GVAR(windageOutput) set [GVAR(currentTarget), _result select 1]; +GVAR(windage1Output) set [GVAR(currentTarget), (_result select 1) select 0]; +GVAR(windage2Output) set [GVAR(currentTarget), (_result select 1) select 1]; GVAR(leadOutput) set [GVAR(currentTarget), _result select 2]; GVAR(tofOutput) set [GVAR(currentTarget), _result select 3]; GVAR(velocityOutput) set [GVAR(currentTarget), _result select 4]; diff --git a/addons/atragmx/functions/fnc_change_gun.sqf b/addons/atragmx/functions/fnc_change_gun.sqf index 9b0f18c185..c753f644a4 100644 --- a/addons/atragmx/functions/fnc_change_gun.sqf +++ b/addons/atragmx/functions/fnc_change_gun.sqf @@ -35,7 +35,8 @@ if ((GVAR(scopeUnits) select GVAR(currentScopeUnit)) != "Clicks") then { [] call FUNC(update_gun_ammo_data); GVAR(elevationOutput) set [GVAR(currentTarget), 0]; -GVAR(windageOutput) set [GVAR(currentTarget), 0]; +GVAR(windage1Output) set [GVAR(currentTarget), 0]; +GVAR(windage2Output) set [GVAR(currentTarget), 0]; GVAR(leadOutput) set [GVAR(currentTarget), 0]; GVAR(tofOutput) set [GVAR(currentTarget), 0]; GVAR(velocityOutput) set [GVAR(currentTarget), 0]; diff --git a/addons/atragmx/functions/fnc_init.sqf b/addons/atragmx/functions/fnc_init.sqf index efbd39ef81..881f65a6b0 100644 --- a/addons/atragmx/functions/fnc_init.sqf +++ b/addons/atragmx/functions/fnc_init.sqf @@ -56,8 +56,10 @@ GVAR(inclinationAngle) = [0, 0, 0, 0]; GVAR(targetSpeed) = [0, 0, 0, 0]; GVAR(targetRange) = [0, 0, 0, 0]; +GVAR(showWind2) = false; GVAR(elevationOutput) = [0, 0, 0, 0]; -GVAR(windageOutput) = [0, 0, 0, 0]; +GVAR(windage1Output) = [0, 0, 0, 0]; +GVAR(windage2Output) = [0, 0, 0, 0]; GVAR(leadOutput) = [0, 0, 0, 0]; GVAR(tofOutput) = [0, 0, 0, 0]; GVAR(velocityOutput) = [0, 0, 0, 0]; diff --git a/addons/atragmx/functions/fnc_restore_user_data.sqf b/addons/atragmx/functions/fnc_restore_user_data.sqf index 7c011198d6..6fddc4bed5 100644 --- a/addons/atragmx/functions/fnc_restore_user_data.sqf +++ b/addons/atragmx/functions/fnc_restore_user_data.sqf @@ -26,6 +26,7 @@ GVAR(temperature) = -50 max (profileNamespace getVariable ["ACE_ATragMX_temperat GVAR(barometricPressure) = 340 max (profileNamespace getVariable ["ACE_ATragMX_barometricPressure", 1013.25]) min 1350; GVAR(relativeHumidity) = 0 max (profileNamespace getVariable ["ACE_ATragMX_relativeHumidity", 0.5]) min 1; +GVAR(showWind2) = profileNamespace getVariable ["ACE_ATragMX_showWind2", false]; GVAR(latitude) = profileNamespace getVariable ["ACE_ATragMX_latitude", [38, 38, 38, 38]]; GVAR(directionOfFire) = profileNamespace getVariable ["ACE_ATragMX_directionOfFire", [0, 0, 0, 0]]; GVAR(windSpeed1) = profileNamespace getVariable ["ACE_ATragMX_windSpeed1", [0, 0, 0, 0]]; diff --git a/addons/atragmx/functions/fnc_store_user_data.sqf b/addons/atragmx/functions/fnc_store_user_data.sqf index 81a4476d75..6a66b96ea3 100644 --- a/addons/atragmx/functions/fnc_store_user_data.sqf +++ b/addons/atragmx/functions/fnc_store_user_data.sqf @@ -26,6 +26,7 @@ profileNamespace setVariable ["ACE_ATragMX_temperature", GVAR(temperature)]; profileNamespace setVariable ["ACE_ATragMX_barometricPressure", GVAR(barometricPressure)]; profileNamespace setVariable ["ACE_ATragMX_relativeHumidity", GVAR(relativeHumidity)]; +profileNamespace setVariable ["ACE_ATragMX_showWind2", GVAR(showWind2)]; profileNamespace setVariable ["latitude", GVAR(latitude)]; profileNamespace setVariable ["directionOfFire", GVAR(directionOfFire)]; profileNamespace setVariable ["ACE_ATragMX_windSpeed1", GVAR(windSpeed1)]; diff --git a/addons/atragmx/functions/fnc_update_range_card.sqf b/addons/atragmx/functions/fnc_update_range_card.sqf index 871e5fa268..0c49b6f794 100644 --- a/addons/atragmx/functions/fnc_update_range_card.sqf +++ b/addons/atragmx/functions/fnc_update_range_card.sqf @@ -15,10 +15,14 @@ */ #include "script_component.hpp" -private ["_range", "_elevation", "_windage", "_elevationScopeStep", "_windageScopeStep", "_lead", "_TOF", "_velocity", "_kineticEnergy", "_rangeOutput", "_elevationOutput", "_windageOutput", "_lastColumnOutput"]; +private ["_range", "_elevation", "_windage1", "_windage2", "_elevationScopeStep", "_windageScopeStep", "_lead", "_TOF", "_velocity", "_kineticEnergy", "_rangeOutput", "_elevationOutput", "_windageOutput", "_lastColumnOutput"]; _lastColumnOutput = ""; -ctrlSetText [5006, (GVAR(rangeCardLastColumns) select GVAR(rangeCardCurrentColumn))]; +if (GVAR(showWind2) && GVAR(rangeCardCurrentColumn) == 0) then { + ctrlSetText [5006, "Wind2"]; +} else { + ctrlSetText [5006, (GVAR(rangeCardLastColumns) select GVAR(rangeCardCurrentColumn))]; +}; if (GVAR(currentUnit) == 1) then { ctrlSetText [5003, "Yards"]; @@ -31,7 +35,8 @@ lnbClear 5007; { _range = _x select 0; _elevation = _x select 1; - _windage = _x select 2; + _windage1 = (_x select 2) select 0; + _windage2 = (_x select 2) select 1; _lead = _x select 3; _TOF = _x select 4; _velocity = _x select 5; @@ -40,23 +45,26 @@ lnbClear 5007; switch (GVAR(currentScopeUnit)) do { case 0: { _elevation = _elevation / 3.38; - _windage = _windage / 3.38; - }; + _windage1 = _windage1 / 3.38; + _windage2 = _windage2 / 3.38; + }; case 2: { _elevation = _elevation * 1.047; - _windage = _windage * 1.047; + _windage1 = _windage1 * 1.047; + _windage2 = _windage2 * 1.047; }; case 3: { _elevationScopeStep = (GVAR(workingMemory) select 7); _windageScopeStep = (GVAR(workingMemory) select 8); _elevation = Round(_elevation / _elevationScopeStep); - _windage = Round(_windage / _windageScopeStep); + _windage1 = Round(_windage1 / _windageScopeStep); + _windage2 = Round(_windage2 / _windageScopeStep); }; }; _elevationOutput = Str(Round(_elevation * 100) / 100); - _windageOutput = Str(Round(_windage * 100) / 100); + _windageOutput = Str(Round(_windage1 * 100) / 100); _rangeOutput = Str(_range); if (_velocity < 340.29) then { @@ -69,7 +77,11 @@ lnbClear 5007; switch (GVAR(rangeCardCurrentColumn)) do { case 0: { - _lastColumnOutput = Str(Round(_lead * 100) / 100); + if (GVAR(showWind2)) then { + _lastColumnOutput = Str(Round(_windage2 * 100) / 100); + } else { + _lastColumnOutput = Str(Round(_lead * 100) / 100); + }; }; case 1: { _lastColumnOutput = Str(Round(_velocity)); diff --git a/addons/atragmx/functions/fnc_update_relative_click_memory.sqf b/addons/atragmx/functions/fnc_update_relative_click_memory.sqf index 1d5add83db..1dc534ce4b 100644 --- a/addons/atragmx/functions/fnc_update_relative_click_memory.sqf +++ b/addons/atragmx/functions/fnc_update_relative_click_memory.sqf @@ -16,6 +16,6 @@ #include "script_component.hpp" GVAR(workingMemory) set [10, (GVAR(elevationOutput) select GVAR(currentTarget))]; -GVAR(workingMemory) set [11, (GVAR(windageOutput) select GVAR(currentTarget))]; +GVAR(workingMemory) set [11, (GVAR(windage1Output) select GVAR(currentTarget))]; [] call FUNC(update_result); diff --git a/addons/atragmx/functions/fnc_update_result.sqf b/addons/atragmx/functions/fnc_update_result.sqf index 6898920eac..a86170fd45 100644 --- a/addons/atragmx/functions/fnc_update_result.sqf +++ b/addons/atragmx/functions/fnc_update_result.sqf @@ -15,9 +15,11 @@ */ #include "script_component.hpp" -private ["_elevationAbs", "_elevationRel", "_elevationCur", "_windageAbs", "_windageRel", "_windageCur", "_lead", "_elevationScopeStep", "_windageScopeStep"]; -_elevationAbs = (GVAR(elevationOutput) select GVAR(currentTarget)); -_windageAbs = (GVAR(windageOutput) select GVAR(currentTarget)); +private ["_elevationAbs", "_elevationRel", "_elevationCur", "_windageAbs", "_wind2", "_windageRel", "_windageCur", "_lead", "_elevationScopeStep", "_windageScopeStep"]; +_elevationAbs = GVAR(elevationOutput) select GVAR(currentTarget); +_windageAbs = GVAR(windage1Output) select GVAR(currentTarget); + +_wind2 = GVAR(windage2Output) select GVAR(currentTarget); _elevationCur = GVAR(workingMemory) select 10; _windageCur = GVAR(workingMemory) select 11; @@ -25,13 +27,15 @@ _windageCur = GVAR(workingMemory) select 11; _elevationRel = _elevationAbs - _elevationCur; _windageRel = _windageAbs - _windageCur; -_lead = (GVAR(leadOutput) select GVAR(currentTarget)); +_lead = GVAR(leadOutput) select GVAR(currentTarget); switch (GVAR(currentScopeUnit)) do { case 0: { _elevationAbs = _elevationAbs / 3.38; _windageAbs = _windageAbs / 3.38; + _wind2 = _wind2 / 3.38; + _elevationRel = _elevationRel / 3.38; _windageRel = _windageRel / 3.38; @@ -42,6 +46,8 @@ switch (GVAR(currentScopeUnit)) do { _elevationAbs = _elevationAbs * 1.047; _windageAbs = _windageAbs * 1.047; + _wind2 = _wind2 / 1.047; + _elevationRel = _elevationRel * 1.047; _windageRel = _windageRel * 1.047; @@ -55,6 +61,8 @@ switch (GVAR(currentScopeUnit)) do { _elevationAbs = Round(_elevationAbs / _elevationScopeStep); _windageAbs = Round(_windageAbs / _windageScopeStep); + _wind2 = Round(_wind2 / _windageScopeStep); + _elevationRel = Round(_elevationRel / _elevationScopeStep); _windageRel = Round(_windageRel / _windageScopeStep); @@ -63,6 +71,12 @@ switch (GVAR(currentScopeUnit)) do { }; }; +if (GVAR(showWind2)) then { + ctrlSetText [42, "Wind2"]; +} else { + ctrlSetText [42, "Lead"]; +}; + ctrlSetText [400, Str(Round(_elevationAbs * 100) / 100)]; ctrlSetText [401, Str(Round(_elevationRel * 100) / 100)]; ctrlSetText [402, Str(Round(_elevationCur * 100) / 100)]; @@ -71,4 +85,8 @@ ctrlSetText [410, Str(Round(_windageAbs * 100) / 100)]; ctrlSetText [411, Str(Round(_windageRel * 100) / 100)]; ctrlSetText [412, Str(Round(_windageCur * 100) / 100)]; -ctrlSetText [420, Str(Round(_lead * 100) / 100)]; +if (GVAR(showWind2)) then { + ctrlSetText [420, Str(Round(_wind2 * 100) / 100)]; +} else { + ctrlSetText [420, Str(Round(_lead * 100) / 100)]; +}; \ No newline at end of file diff --git a/addons/atragmx/functions/fnc_update_target.sqf b/addons/atragmx/functions/fnc_update_target.sqf index c5a02c0164..dab62e099d 100644 --- a/addons/atragmx/functions/fnc_update_target.sqf +++ b/addons/atragmx/functions/fnc_update_target.sqf @@ -15,10 +15,18 @@ */ #include "script_component.hpp" -if (GVAR(currentUnit) != 2) then { - ctrlSetText [300, Str(Round((GVAR(windSpeed1) select GVAR(currentTarget)) * 2.23693629 * 100) / 100)]; +if (GVAR(showWind2)) then { + if (GVAR(currentUnit) != 2) then { + ctrlSetText [300, format["%1/%2", Round((GVAR(windSpeed1) select GVAR(currentTarget)) * 2.23693629), Round((GVAR(windSpeed2) select GVAR(currentTarget)) * 2.23693629)]]; + } else { + ctrlSetText [300, format["%1/%2", Round(GVAR(windSpeed1) select GVAR(currentTarget)), Round(GVAR(windSpeed2) select GVAR(currentTarget))]]; + }; } else { - ctrlSetText [300, Str(Round((GVAR(windSpeed1) select GVAR(currentTarget)) * 100) / 100)]; + if (GVAR(currentUnit) != 2) then { + ctrlSetText [300, Str(Round((GVAR(windSpeed1) select GVAR(currentTarget)) * 2.23693629 * 100) / 100)]; + } else { + ctrlSetText [300, Str(Round((GVAR(windSpeed1) select GVAR(currentTarget)) * 100) / 100)]; + }; }; ctrlSetText [310, Str(Round((GVAR(windDirection) select GVAR(currentTarget))))]; ctrlSetText [320, Str(Round((GVAR(inclinationAngle) select GVAR(currentTarget))))]; diff --git a/addons/atragmx/functions/fnc_update_zero_range.sqf b/addons/atragmx/functions/fnc_update_zero_range.sqf index 6e2a9c566c..a5cab3755e 100644 --- a/addons/atragmx/functions/fnc_update_zero_range.sqf +++ b/addons/atragmx/functions/fnc_update_zero_range.sqf @@ -44,7 +44,7 @@ _barometricPressure = GVAR(barometricPressure); _relativeHumidity = GVAR(relativeHumidity); private ["_result"]; -_result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000, 0, 0, 0, 0, _zeroRange, _bc, _dragModel, _atmosphereModel, false, 1.5, 0, 0] call FUNC(calculate_solution); +_result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000, [0, 0], 0, 0, 0, _zeroRange, _bc, _dragModel, _atmosphereModel, false, 1.5, 0, 0] call FUNC(calculate_solution); GVAR(workingMemory) set [2, _zeroRange]; GVAR(workingMemory) set [3, _scopeBaseAngle + (_result select 0) / 60]; From 5319fe5b98037544f63bb9af65f083b86dfa3fad Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Sat, 18 Apr 2015 15:08:54 +0200 Subject: [PATCH 139/257] Implemented the dual wind speed feature --- addons/atragmx/RscTitles.hpp | 2 +- .../functions/fnc_calculate_range_card.sqf | 7 +- .../fnc_calculate_scope_base_angle.sqf | 2 +- .../functions/fnc_calculate_solution.sqf | 66 +++++++++++-------- .../fnc_calculate_target_solution.sqf | 10 +-- addons/atragmx/functions/fnc_change_gun.sqf | 3 +- addons/atragmx/functions/fnc_init.sqf | 4 +- .../functions/fnc_restore_user_data.sqf | 1 + .../atragmx/functions/fnc_store_user_data.sqf | 1 + .../functions/fnc_update_range_card.sqf | 30 ++++++--- .../fnc_update_relative_click_memory.sqf | 2 +- .../atragmx/functions/fnc_update_result.sqf | 28 ++++++-- .../atragmx/functions/fnc_update_target.sqf | 14 +++- .../functions/fnc_update_zero_range.sqf | 2 +- 14 files changed, 115 insertions(+), 57 deletions(-) diff --git a/addons/atragmx/RscTitles.hpp b/addons/atragmx/RscTitles.hpp index 592374ddad..0752f8beb7 100644 --- a/addons/atragmx/RscTitles.hpp +++ b/addons/atragmx/RscTitles.hpp @@ -573,7 +573,7 @@ class ATragMX_Display { x=0.550*safezoneW+safezoneX+0.11; y=0.265*safezoneH+safezoneY+0.57; text="Lead"; - action=""; + action=QUOTE(GVAR(showWind2) = !GVAR(showWind2); call FUNC(update_result); call FUNC(update_target)); }; class TEXT_LEAD_OUTPUT: TEXT_ELEVATION_OUTPUT_ABSOLUTE { idc=420; diff --git a/addons/atragmx/functions/fnc_calculate_range_card.sqf b/addons/atragmx/functions/fnc_calculate_range_card.sqf index 359f7ab4ee..c11cf90550 100644 --- a/addons/atragmx/functions/fnc_calculate_range_card.sqf +++ b/addons/atragmx/functions/fnc_calculate_range_card.sqf @@ -60,10 +60,11 @@ if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) }; }; -private ["_latitude", "_directionOfFire", "_windSpeed", "_windDirection", "_inclinationAngle", "_targetSpeed", "_targetRange"]; +private ["_latitude", "_directionOfFire", "_windSpeed1", "_windSpeed2", "_windDirection", "_inclinationAngle", "_targetSpeed", "_targetRange"]; _latitude = GVAR(latitude) select GVAR(currentTarget); _directionOfFire = GVAR(directionOfFire) select GVAR(currentTarget); -_windSpeed = (GVAR(windSpeed1) select GVAR(currentTarget)); +_windSpeed1 = (GVAR(windSpeed1) select GVAR(currentTarget)); +_windSpeed2 = (GVAR(windSpeed2) select GVAR(currentTarget)); _windDirection = (GVAR(windDirection) select GVAR(currentTarget)); _inclinationAngle = (GVAR(inclinationAngle) select GVAR(currentTarget)); _targetSpeed = (GVAR(targetSpeed) select GVAR(currentTarget)); @@ -76,4 +77,4 @@ GVAR(rangeCardData) = []; private ["_result"]; _result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000, - _windSpeed, _windDirection, _inclinationAngle, _targetSpeed, _targetRange, _bc, _dragModel, _atmosphereModel, true, _stabilityFactor, _twistDirection, _latitude] call FUNC(calculate_solution); + [_windSpeed1, _windSpeed2], _windDirection, _inclinationAngle, _targetSpeed, _targetRange, _bc, _dragModel, _atmosphereModel, true, _stabilityFactor, _twistDirection, _latitude] call FUNC(calculate_solution); diff --git a/addons/atragmx/functions/fnc_calculate_scope_base_angle.sqf b/addons/atragmx/functions/fnc_calculate_scope_base_angle.sqf index 4995c31a61..76c54f63a9 100644 --- a/addons/atragmx/functions/fnc_calculate_scope_base_angle.sqf +++ b/addons/atragmx/functions/fnc_calculate_scope_base_angle.sqf @@ -35,6 +35,6 @@ _barometricPressure = 1013.25; _relativeHumidity = 0; private ["_result"]; -_result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000, 0, 0, 0, 0, _zeroRange, _airFriction, 1, "ICAO", false, 1.5, 0, 0] call FUNC(calculate_solution); +_result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000, [0, 0], 0, 0, 0, _zeroRange, _airFriction, 1, "ICAO", false, 1.5, 0, 0] call FUNC(calculate_solution); _scopeBaseAngle + (_result select 0) / 60 diff --git a/addons/atragmx/functions/fnc_calculate_solution.sqf b/addons/atragmx/functions/fnc_calculate_solution.sqf index f7f23044e3..242e2e9c48 100644 --- a/addons/atragmx/functions/fnc_calculate_solution.sqf +++ b/addons/atragmx/functions/fnc_calculate_solution.sqf @@ -12,7 +12,7 @@ * 6: barometric pressure <NUMBER> * 7: relative humidity <NUMBER> * 8: simulation steps <NUMBER> - * 9: wind speed <NUMBER> + * 9: wind speed <ARRAY> * 10: wind direction <NUMBER> * 11: inclination angle <NUMBER> * 12: target speed <NUMBER> @@ -26,15 +26,15 @@ * 20: Latitude <NUMBER> * * Return Value: - * 0: Elevation <NUMBER> - * 1: Windage <NUMBER> - * 2: Lead <NUMBER> - * 3: Time of fligth <NUMBER> - * 4: Remaining velocity <NUMBER> - * 5: Remaining kinetic energy <NUMBER> - * 6: Vertical coriolis drift <NUMBER> - * 7: Horizontal coriolis drift <NUMBER> - * 8: Spin drift <NUMBER> + * 0: Elevation (MOA) <NUMBER> + * 1: Windage (MOA) <ARRAY> + * 2: Lead (MOA) <NUMBER> + * 3: Time of fligth (SECONDS) <NUMBER> + * 4: Remaining velocity (m/s) <NUMBER> + * 5: Remaining kinetic energy (ft·lb) <NUMBER> + * 6: Vertical coriolis drift (MOA) <NUMBER> + * 7: Horizontal coriolis drift (MOA) <NUMBER> + * 8: Spin drift (MOA) <NUMBER> * * Example: * call ace_atragmx_calculate_target_range_assist @@ -43,7 +43,7 @@ */ #include "script_component.hpp" -private ["_scopeBaseAngle", "_bulletMass", "_boreHeight", "_airFriction", "_muzzleVelocity", "_temperature", "_barometricPressure", "_relativeHumidity", "_simSteps", "_windSpeed", "_windDirection", "_inclinationAngle", "_targetSpeed", "_targetRange", "_bc", "_dragModel", "_atmosphereModel", "_storeRangeCardData", "_stabilityFactor", "_twistDirection", "_latitude"]; +private ["_scopeBaseAngle", "_bulletMass", "_boreHeight", "_airFriction", "_muzzleVelocity", "_temperature", "_barometricPressure", "_relativeHumidity", "_simSteps", "_windSpeed1", "_windSpeed2", "_windDirection", "_inclinationAngle", "_targetSpeed", "_targetRange", "_bc", "_dragModel", "_atmosphereModel", "_storeRangeCardData", "_stabilityFactor", "_twistDirection", "_latitude"]; _scopeBaseAngle = _this select 0; _bulletMass = _this select 1; _boreHeight = _this select 2; @@ -53,7 +53,8 @@ _temperature = _this select 5; _barometricPressure = _this select 6; _relativeHumidity = _this select 7; _simSteps = _this select 8; -_windSpeed = _this select 9; +_windSpeed1 = (_this select 9) select 0; +_windSpeed2 = (_this select 9) select 1; _windDirection = _this select 10; _inclinationAngle = _this select 11; _targetSpeed = _this select 12; @@ -74,9 +75,10 @@ _bulletSpeed = 0; _gravity = [0, sin(_scopeBaseAngle + _inclinationAngle) * -9.80665, cos(_scopeBaseAngle + _inclinationAngle) * -9.80665]; _deltaT = 1 / _simSteps; -private ["_elevation", "_windage", "_lead", "_TOF", "_trueVelocity", "_trueSpeed", "_kineticEnergy", "_verticalCoriolis", "_verticalDeflection", "_horizontalCoriolis", "_horizontalDeflection", "_spinDrift", "_spinDeflection"]; +private ["_elevation", "_windage1", "_windage2", "_lead", "_TOF", "_trueVelocity", "_trueSpeed", "_kineticEnergy", "_verticalCoriolis", "_verticalDeflection", "_horizontalCoriolis", "_horizontalDeflection", "_spinDrift", "_spinDeflection"]; _elevation = 0; -_windage = 0; +_windage1 = 0; +_windage2 = 0; _lead = 0; _TOF = 0; _trueVelocity = [0, 0, 0]; @@ -99,8 +101,10 @@ if (_storeRangeCardData) then { GVAR(rangeCardData) = []; }; -private ["_wind"]; -_wind = [cos(270 - _windDirection * 30) * _windSpeed, sin(270 - _windDirection * 30) * _windSpeed, 0]; +private ["_wind1", "_wind2", "_windDrift"]; +_wind1 = [cos(270 - _windDirection * 30) * _windSpeed1, sin(270 - _windDirection * 30) * _windSpeed1, 0]; +_wind2 = [cos(270 - _windDirection * 30) * _windSpeed2, sin(270 - _windDirection * 30) * _windSpeed2, 0]; +_windDrift = 0; if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false])) then { _bc = [_bc, _temperature, _barometricPressure, _relativeHumidity, _atmosphereModel] call EFUNC(advanced_ballistics,calculateAtmosphericCorrection); }; @@ -127,7 +131,7 @@ while {_TOF < 15 && (_bulletPos select 1) < _targetRange} do { _stepsTotal = _stepsTotal + 1; _speedAverage = (_speedTotal / _stepsTotal); - _trueVelocity = _bulletVelocity vectorDiff _wind; + _trueVelocity = _bulletVelocity vectorDiff _wind1; _trueSpeed = vectorMagnitude _trueVelocity; if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then { @@ -156,7 +160,9 @@ while {_TOF < 15 && (_bulletPos select 1) < _targetRange} do { if ((_bulletPos select 1) * _rangeFactor >= _range && _range <= GVAR(rangeCardEndRange)) then { if ((_bulletPos select 1) > 0) then { _elevation = - atan((_bulletPos select 2) / (_bulletPos select 1)); - _windage = - atan((_bulletPos select 0) / (_bulletPos select 1)); + _windage1 = - atan((_bulletPos select 0) / (_bulletPos select 1)); + _windDrift = (_wind2 select 0) * (_TOF - (_range / _rangeFactor) / _muzzleVelocity); + _windage2 = - atan(_windDrift / (_bulletPos select 1)); }; if (_range != 0) then { _lead = (_targetSpeed * _TOF) / (Tan(3.38 / 60) * _range); @@ -166,20 +172,22 @@ while {_TOF < 15 && (_bulletPos select 1) < _targetRange} do { if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,CoriolisEnabled), false])) then { if ((_bulletPos select 1) > 0) then { - _horizontalDeflection = 0.0000729 * ((_bulletPos select 0) ^ 2) * sin(_latitude) / _speedAverage; + _horizontalDeflection = 0.0000729 * ((_bulletPos select 1) ^ 2) * sin(_latitude) / _speedAverage; _horizontalCoriolis = - atan(_horizontalDeflection / (_bulletPos select 1)); - _windage = _windage + _horizontalCoriolis; + _windage1 = _windage1 + _horizontalCoriolis; + _windage2 = _windage2 + _horizontalCoriolis; }; }; if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,SpinDriftEnabled), false])) then { if ((_bulletPos select 1) > 0) then { _spinDeflection = _twistDirection * 0.0254 * 1.25 * (_stabilityFactor + 1.2) * _TOF ^ 1.83; _spinDrift = - atan(_spinDeflection / (_bulletPos select 1)); - _windage = _windage + _spinDrift; + _windage1 = _windage1 + _spinDrift; + _windage2 = _windage2 + _spinDrift; }; }; - GVAR(rangeCardData) set [_n, [_range, _elevation * 60, _windage * 60, _lead, _TOF, _bulletSpeed, _kineticEnergy]]; + GVAR(rangeCardData) set [_n, [_range, _elevation * 60, [_windage1 * 60, _windage2 * 60], _lead, _TOF, _bulletSpeed, _kineticEnergy]]; _n = _n + 1; }; }; @@ -187,7 +195,9 @@ while {_TOF < 15 && (_bulletPos select 1) < _targetRange} do { if ((_bulletPos select 1) > 0) then { _elevation = - atan((_bulletPos select 2) / (_bulletPos select 1)); - _windage = - atan((_bulletPos select 0) / (_bulletPos select 1)); + _windage1 = - atan((_bulletPos select 0) / (_bulletPos select 1)); + _windDrift = (_wind2 select 0) * (_TOF - _targetRange / _muzzleVelocity); + _windage2 = - atan(_windDrift / (_bulletPos select 1)); }; if (_targetRange != 0) then { @@ -199,17 +209,19 @@ _kineticEnergy = _kineticEnergy * 0.737562149; if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,CoriolisEnabled), false])) then { if ((_bulletPos select 1) > 0) then { - _horizontalDeflection = 0.0000729 * ((_bulletPos select 0) ^ 2) * sin(_latitude) / _speedAverage; + _horizontalDeflection = 0.0000729 * ((_bulletPos select 1) ^ 2) * sin(_latitude) / _speedAverage; _horizontalCoriolis = - atan(_horizontalDeflection / (_bulletPos select 1)); - _windage = _windage + _horizontalCoriolis; + _windage1 = _windage1 + _horizontalCoriolis; + _windage2 = _windage2 + _horizontalCoriolis; }; }; if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,SpinDriftEnabled), false])) then { if ((_bulletPos select 1) > 0) then { _spinDeflection = _twistDirection * 0.0254 * 1.25 * (_stabilityFactor + 1.2) * _TOF ^ 1.83; _spinDrift = - atan(_spinDeflection / (_bulletPos select 1)); - _windage = _windage + _spinDrift; + _windage1 = _windage1 + _spinDrift; + _windage2 = _windage2 + _spinDrift; }; }; -[_elevation * 60, _windage * 60, _lead, _TOF, _bulletSpeed, _kineticEnergy, _verticalCoriolis, _horizontalCoriolis, _spinDrift] +[_elevation * 60, [_windage1 * 60, _windage2 * 60], _lead, _TOF, _bulletSpeed, _kineticEnergy, _verticalCoriolis * 60, _horizontalCoriolis * 60, _spinDrift * 60] diff --git a/addons/atragmx/functions/fnc_calculate_target_solution.sqf b/addons/atragmx/functions/fnc_calculate_target_solution.sqf index 764f21cfc9..c8a3683498 100644 --- a/addons/atragmx/functions/fnc_calculate_target_solution.sqf +++ b/addons/atragmx/functions/fnc_calculate_target_solution.sqf @@ -60,10 +60,11 @@ if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) }; }; -private ["_latitude", "_directionOfFire", "_windSpeed", "_windDirection", "_inclinationAngle", "_targetSpeed", "_targetRange"]; +private ["_latitude", "_directionOfFire", "_windSpeed1", "_windSpeed2", "_windDirection", "_inclinationAngle", "_targetSpeed", "_targetRange"]; _latitude = GVAR(latitude) select GVAR(currentTarget); _directionOfFire = GVAR(directionOfFire) select GVAR(currentTarget); -_windSpeed = GVAR(windSpeed1) select GVAR(currentTarget); +_windSpeed1 = GVAR(windSpeed1) select GVAR(currentTarget); +_windSpeed2 = GVAR(windSpeed2) select GVAR(currentTarget); _windDirection = GVAR(windDirection) select GVAR(currentTarget); _inclinationAngle = GVAR(inclinationAngle) select GVAR(currentTarget); _targetSpeed = GVAR(targetSpeed) select GVAR(currentTarget); @@ -71,10 +72,11 @@ _targetRange = GVAR(targetRange) select GVAR(currentTarget); private ["_result"]; _result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000, - _windSpeed, _windDirection, _inclinationAngle, _targetSpeed, _targetRange, _bc, _dragModel, _atmosphereModel, false, _stabilityFactor, _twistDirection, _latitude] call FUNC(calculate_solution); + [_windSpeed1, _windSpeed2], _windDirection, _inclinationAngle, _targetSpeed, _targetRange, _bc, _dragModel, _atmosphereModel, false, _stabilityFactor, _twistDirection, _latitude] call FUNC(calculate_solution); GVAR(elevationOutput) set [GVAR(currentTarget), _result select 0]; -GVAR(windageOutput) set [GVAR(currentTarget), _result select 1]; +GVAR(windage1Output) set [GVAR(currentTarget), (_result select 1) select 0]; +GVAR(windage2Output) set [GVAR(currentTarget), (_result select 1) select 1]; GVAR(leadOutput) set [GVAR(currentTarget), _result select 2]; GVAR(tofOutput) set [GVAR(currentTarget), _result select 3]; GVAR(velocityOutput) set [GVAR(currentTarget), _result select 4]; diff --git a/addons/atragmx/functions/fnc_change_gun.sqf b/addons/atragmx/functions/fnc_change_gun.sqf index 9b0f18c185..c753f644a4 100644 --- a/addons/atragmx/functions/fnc_change_gun.sqf +++ b/addons/atragmx/functions/fnc_change_gun.sqf @@ -35,7 +35,8 @@ if ((GVAR(scopeUnits) select GVAR(currentScopeUnit)) != "Clicks") then { [] call FUNC(update_gun_ammo_data); GVAR(elevationOutput) set [GVAR(currentTarget), 0]; -GVAR(windageOutput) set [GVAR(currentTarget), 0]; +GVAR(windage1Output) set [GVAR(currentTarget), 0]; +GVAR(windage2Output) set [GVAR(currentTarget), 0]; GVAR(leadOutput) set [GVAR(currentTarget), 0]; GVAR(tofOutput) set [GVAR(currentTarget), 0]; GVAR(velocityOutput) set [GVAR(currentTarget), 0]; diff --git a/addons/atragmx/functions/fnc_init.sqf b/addons/atragmx/functions/fnc_init.sqf index efbd39ef81..881f65a6b0 100644 --- a/addons/atragmx/functions/fnc_init.sqf +++ b/addons/atragmx/functions/fnc_init.sqf @@ -56,8 +56,10 @@ GVAR(inclinationAngle) = [0, 0, 0, 0]; GVAR(targetSpeed) = [0, 0, 0, 0]; GVAR(targetRange) = [0, 0, 0, 0]; +GVAR(showWind2) = false; GVAR(elevationOutput) = [0, 0, 0, 0]; -GVAR(windageOutput) = [0, 0, 0, 0]; +GVAR(windage1Output) = [0, 0, 0, 0]; +GVAR(windage2Output) = [0, 0, 0, 0]; GVAR(leadOutput) = [0, 0, 0, 0]; GVAR(tofOutput) = [0, 0, 0, 0]; GVAR(velocityOutput) = [0, 0, 0, 0]; diff --git a/addons/atragmx/functions/fnc_restore_user_data.sqf b/addons/atragmx/functions/fnc_restore_user_data.sqf index 7c011198d6..6fddc4bed5 100644 --- a/addons/atragmx/functions/fnc_restore_user_data.sqf +++ b/addons/atragmx/functions/fnc_restore_user_data.sqf @@ -26,6 +26,7 @@ GVAR(temperature) = -50 max (profileNamespace getVariable ["ACE_ATragMX_temperat GVAR(barometricPressure) = 340 max (profileNamespace getVariable ["ACE_ATragMX_barometricPressure", 1013.25]) min 1350; GVAR(relativeHumidity) = 0 max (profileNamespace getVariable ["ACE_ATragMX_relativeHumidity", 0.5]) min 1; +GVAR(showWind2) = profileNamespace getVariable ["ACE_ATragMX_showWind2", false]; GVAR(latitude) = profileNamespace getVariable ["ACE_ATragMX_latitude", [38, 38, 38, 38]]; GVAR(directionOfFire) = profileNamespace getVariable ["ACE_ATragMX_directionOfFire", [0, 0, 0, 0]]; GVAR(windSpeed1) = profileNamespace getVariable ["ACE_ATragMX_windSpeed1", [0, 0, 0, 0]]; diff --git a/addons/atragmx/functions/fnc_store_user_data.sqf b/addons/atragmx/functions/fnc_store_user_data.sqf index 81a4476d75..6a66b96ea3 100644 --- a/addons/atragmx/functions/fnc_store_user_data.sqf +++ b/addons/atragmx/functions/fnc_store_user_data.sqf @@ -26,6 +26,7 @@ profileNamespace setVariable ["ACE_ATragMX_temperature", GVAR(temperature)]; profileNamespace setVariable ["ACE_ATragMX_barometricPressure", GVAR(barometricPressure)]; profileNamespace setVariable ["ACE_ATragMX_relativeHumidity", GVAR(relativeHumidity)]; +profileNamespace setVariable ["ACE_ATragMX_showWind2", GVAR(showWind2)]; profileNamespace setVariable ["latitude", GVAR(latitude)]; profileNamespace setVariable ["directionOfFire", GVAR(directionOfFire)]; profileNamespace setVariable ["ACE_ATragMX_windSpeed1", GVAR(windSpeed1)]; diff --git a/addons/atragmx/functions/fnc_update_range_card.sqf b/addons/atragmx/functions/fnc_update_range_card.sqf index 871e5fa268..0c49b6f794 100644 --- a/addons/atragmx/functions/fnc_update_range_card.sqf +++ b/addons/atragmx/functions/fnc_update_range_card.sqf @@ -15,10 +15,14 @@ */ #include "script_component.hpp" -private ["_range", "_elevation", "_windage", "_elevationScopeStep", "_windageScopeStep", "_lead", "_TOF", "_velocity", "_kineticEnergy", "_rangeOutput", "_elevationOutput", "_windageOutput", "_lastColumnOutput"]; +private ["_range", "_elevation", "_windage1", "_windage2", "_elevationScopeStep", "_windageScopeStep", "_lead", "_TOF", "_velocity", "_kineticEnergy", "_rangeOutput", "_elevationOutput", "_windageOutput", "_lastColumnOutput"]; _lastColumnOutput = ""; -ctrlSetText [5006, (GVAR(rangeCardLastColumns) select GVAR(rangeCardCurrentColumn))]; +if (GVAR(showWind2) && GVAR(rangeCardCurrentColumn) == 0) then { + ctrlSetText [5006, "Wind2"]; +} else { + ctrlSetText [5006, (GVAR(rangeCardLastColumns) select GVAR(rangeCardCurrentColumn))]; +}; if (GVAR(currentUnit) == 1) then { ctrlSetText [5003, "Yards"]; @@ -31,7 +35,8 @@ lnbClear 5007; { _range = _x select 0; _elevation = _x select 1; - _windage = _x select 2; + _windage1 = (_x select 2) select 0; + _windage2 = (_x select 2) select 1; _lead = _x select 3; _TOF = _x select 4; _velocity = _x select 5; @@ -40,23 +45,26 @@ lnbClear 5007; switch (GVAR(currentScopeUnit)) do { case 0: { _elevation = _elevation / 3.38; - _windage = _windage / 3.38; - }; + _windage1 = _windage1 / 3.38; + _windage2 = _windage2 / 3.38; + }; case 2: { _elevation = _elevation * 1.047; - _windage = _windage * 1.047; + _windage1 = _windage1 * 1.047; + _windage2 = _windage2 * 1.047; }; case 3: { _elevationScopeStep = (GVAR(workingMemory) select 7); _windageScopeStep = (GVAR(workingMemory) select 8); _elevation = Round(_elevation / _elevationScopeStep); - _windage = Round(_windage / _windageScopeStep); + _windage1 = Round(_windage1 / _windageScopeStep); + _windage2 = Round(_windage2 / _windageScopeStep); }; }; _elevationOutput = Str(Round(_elevation * 100) / 100); - _windageOutput = Str(Round(_windage * 100) / 100); + _windageOutput = Str(Round(_windage1 * 100) / 100); _rangeOutput = Str(_range); if (_velocity < 340.29) then { @@ -69,7 +77,11 @@ lnbClear 5007; switch (GVAR(rangeCardCurrentColumn)) do { case 0: { - _lastColumnOutput = Str(Round(_lead * 100) / 100); + if (GVAR(showWind2)) then { + _lastColumnOutput = Str(Round(_windage2 * 100) / 100); + } else { + _lastColumnOutput = Str(Round(_lead * 100) / 100); + }; }; case 1: { _lastColumnOutput = Str(Round(_velocity)); diff --git a/addons/atragmx/functions/fnc_update_relative_click_memory.sqf b/addons/atragmx/functions/fnc_update_relative_click_memory.sqf index 1d5add83db..1dc534ce4b 100644 --- a/addons/atragmx/functions/fnc_update_relative_click_memory.sqf +++ b/addons/atragmx/functions/fnc_update_relative_click_memory.sqf @@ -16,6 +16,6 @@ #include "script_component.hpp" GVAR(workingMemory) set [10, (GVAR(elevationOutput) select GVAR(currentTarget))]; -GVAR(workingMemory) set [11, (GVAR(windageOutput) select GVAR(currentTarget))]; +GVAR(workingMemory) set [11, (GVAR(windage1Output) select GVAR(currentTarget))]; [] call FUNC(update_result); diff --git a/addons/atragmx/functions/fnc_update_result.sqf b/addons/atragmx/functions/fnc_update_result.sqf index 6898920eac..a86170fd45 100644 --- a/addons/atragmx/functions/fnc_update_result.sqf +++ b/addons/atragmx/functions/fnc_update_result.sqf @@ -15,9 +15,11 @@ */ #include "script_component.hpp" -private ["_elevationAbs", "_elevationRel", "_elevationCur", "_windageAbs", "_windageRel", "_windageCur", "_lead", "_elevationScopeStep", "_windageScopeStep"]; -_elevationAbs = (GVAR(elevationOutput) select GVAR(currentTarget)); -_windageAbs = (GVAR(windageOutput) select GVAR(currentTarget)); +private ["_elevationAbs", "_elevationRel", "_elevationCur", "_windageAbs", "_wind2", "_windageRel", "_windageCur", "_lead", "_elevationScopeStep", "_windageScopeStep"]; +_elevationAbs = GVAR(elevationOutput) select GVAR(currentTarget); +_windageAbs = GVAR(windage1Output) select GVAR(currentTarget); + +_wind2 = GVAR(windage2Output) select GVAR(currentTarget); _elevationCur = GVAR(workingMemory) select 10; _windageCur = GVAR(workingMemory) select 11; @@ -25,13 +27,15 @@ _windageCur = GVAR(workingMemory) select 11; _elevationRel = _elevationAbs - _elevationCur; _windageRel = _windageAbs - _windageCur; -_lead = (GVAR(leadOutput) select GVAR(currentTarget)); +_lead = GVAR(leadOutput) select GVAR(currentTarget); switch (GVAR(currentScopeUnit)) do { case 0: { _elevationAbs = _elevationAbs / 3.38; _windageAbs = _windageAbs / 3.38; + _wind2 = _wind2 / 3.38; + _elevationRel = _elevationRel / 3.38; _windageRel = _windageRel / 3.38; @@ -42,6 +46,8 @@ switch (GVAR(currentScopeUnit)) do { _elevationAbs = _elevationAbs * 1.047; _windageAbs = _windageAbs * 1.047; + _wind2 = _wind2 / 1.047; + _elevationRel = _elevationRel * 1.047; _windageRel = _windageRel * 1.047; @@ -55,6 +61,8 @@ switch (GVAR(currentScopeUnit)) do { _elevationAbs = Round(_elevationAbs / _elevationScopeStep); _windageAbs = Round(_windageAbs / _windageScopeStep); + _wind2 = Round(_wind2 / _windageScopeStep); + _elevationRel = Round(_elevationRel / _elevationScopeStep); _windageRel = Round(_windageRel / _windageScopeStep); @@ -63,6 +71,12 @@ switch (GVAR(currentScopeUnit)) do { }; }; +if (GVAR(showWind2)) then { + ctrlSetText [42, "Wind2"]; +} else { + ctrlSetText [42, "Lead"]; +}; + ctrlSetText [400, Str(Round(_elevationAbs * 100) / 100)]; ctrlSetText [401, Str(Round(_elevationRel * 100) / 100)]; ctrlSetText [402, Str(Round(_elevationCur * 100) / 100)]; @@ -71,4 +85,8 @@ ctrlSetText [410, Str(Round(_windageAbs * 100) / 100)]; ctrlSetText [411, Str(Round(_windageRel * 100) / 100)]; ctrlSetText [412, Str(Round(_windageCur * 100) / 100)]; -ctrlSetText [420, Str(Round(_lead * 100) / 100)]; +if (GVAR(showWind2)) then { + ctrlSetText [420, Str(Round(_wind2 * 100) / 100)]; +} else { + ctrlSetText [420, Str(Round(_lead * 100) / 100)]; +}; \ No newline at end of file diff --git a/addons/atragmx/functions/fnc_update_target.sqf b/addons/atragmx/functions/fnc_update_target.sqf index c5a02c0164..dab62e099d 100644 --- a/addons/atragmx/functions/fnc_update_target.sqf +++ b/addons/atragmx/functions/fnc_update_target.sqf @@ -15,10 +15,18 @@ */ #include "script_component.hpp" -if (GVAR(currentUnit) != 2) then { - ctrlSetText [300, Str(Round((GVAR(windSpeed1) select GVAR(currentTarget)) * 2.23693629 * 100) / 100)]; +if (GVAR(showWind2)) then { + if (GVAR(currentUnit) != 2) then { + ctrlSetText [300, format["%1/%2", Round((GVAR(windSpeed1) select GVAR(currentTarget)) * 2.23693629), Round((GVAR(windSpeed2) select GVAR(currentTarget)) * 2.23693629)]]; + } else { + ctrlSetText [300, format["%1/%2", Round(GVAR(windSpeed1) select GVAR(currentTarget)), Round(GVAR(windSpeed2) select GVAR(currentTarget))]]; + }; } else { - ctrlSetText [300, Str(Round((GVAR(windSpeed1) select GVAR(currentTarget)) * 100) / 100)]; + if (GVAR(currentUnit) != 2) then { + ctrlSetText [300, Str(Round((GVAR(windSpeed1) select GVAR(currentTarget)) * 2.23693629 * 100) / 100)]; + } else { + ctrlSetText [300, Str(Round((GVAR(windSpeed1) select GVAR(currentTarget)) * 100) / 100)]; + }; }; ctrlSetText [310, Str(Round((GVAR(windDirection) select GVAR(currentTarget))))]; ctrlSetText [320, Str(Round((GVAR(inclinationAngle) select GVAR(currentTarget))))]; diff --git a/addons/atragmx/functions/fnc_update_zero_range.sqf b/addons/atragmx/functions/fnc_update_zero_range.sqf index 6e2a9c566c..a5cab3755e 100644 --- a/addons/atragmx/functions/fnc_update_zero_range.sqf +++ b/addons/atragmx/functions/fnc_update_zero_range.sqf @@ -44,7 +44,7 @@ _barometricPressure = GVAR(barometricPressure); _relativeHumidity = GVAR(relativeHumidity); private ["_result"]; -_result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000, 0, 0, 0, 0, _zeroRange, _bc, _dragModel, _atmosphereModel, false, 1.5, 0, 0] call FUNC(calculate_solution); +_result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000, [0, 0], 0, 0, 0, _zeroRange, _bc, _dragModel, _atmosphereModel, false, 1.5, 0, 0] call FUNC(calculate_solution); GVAR(workingMemory) set [2, _zeroRange]; GVAR(workingMemory) set [3, _scopeBaseAngle + (_result select 0) / 60]; From 5e45734cf401f46d53e87fcfec0768852fe66269 Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Sat, 18 Apr 2015 15:52:06 +0200 Subject: [PATCH 140/257] Implemented the dual inclination angle input method --- addons/atragmx/RscTitles.hpp | 2 ++ addons/atragmx/XEH_preInit.sqf | 1 + addons/atragmx/functions/fnc_parse_input.sqf | 11 +++++++- .../fnc_update_inclination_angle.sqf | 26 +++++++++++++++++++ 4 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 addons/atragmx/functions/fnc_update_inclination_angle.sqf diff --git a/addons/atragmx/RscTitles.hpp b/addons/atragmx/RscTitles.hpp index 0752f8beb7..6497606683 100644 --- a/addons/atragmx/RscTitles.hpp +++ b/addons/atragmx/RscTitles.hpp @@ -1271,12 +1271,14 @@ class ATragMX_Display { w=0.045; x=0.550*safezoneW+safezoneX+0.300; y=0.265*safezoneH+safezoneY+0.440; + onKeyUp=QUOTE(if (_this select 1 == 28) then {0 call FUNC(update_inclination_angle)}); }; class TEXT_TARGET_DATA_INCLINATION_ANGLE_INPUT_DEGREE: TEXT_TARGET_DATA_LATITUDE_INPUT { idc=140040; w=0.045; x=0.550*safezoneW+safezoneX+0.350; y=0.265*safezoneH+safezoneY+0.440; + onKeyUp=QUOTE(if (_this select 1 == 28) then {1 call FUNC(update_inclination_angle)}); }; class TEXT_TARGET_DATA_TARGET_SPEED: TEXT_TARGET_DATA_LATITUDE { idc=14005; diff --git a/addons/atragmx/XEH_preInit.sqf b/addons/atragmx/XEH_preInit.sqf index 10e0aff61c..6a640f162e 100644 --- a/addons/atragmx/XEH_preInit.sqf +++ b/addons/atragmx/XEH_preInit.sqf @@ -53,6 +53,7 @@ PREP(update_atmo_env_data); PREP(update_atmo_selection); PREP(update_gun); PREP(update_gun_ammo_data); +PREP(update_inclination_angle); PREP(update_range_card); PREP(update_relative_click_memory); PREP(update_result); diff --git a/addons/atragmx/functions/fnc_parse_input.sqf b/addons/atragmx/functions/fnc_parse_input.sqf index 172df7bd58..ca22c62663 100644 --- a/addons/atragmx/functions/fnc_parse_input.sqf +++ b/addons/atragmx/functions/fnc_parse_input.sqf @@ -25,12 +25,21 @@ if (GVAR(currentUnit) == 1) then { GVAR(barometricPressure) = GVAR(barometricPressure) * 33.86389; }; +private ["_inclinationAngleCosine", "_inclinationAngleDegree"]; GVAR(latitude) set [GVAR(currentTarget), -90 max Round(parseNumber(ctrlText 140000)) min 90]; GVAR(directionOfFire) set [GVAR(currentTarget), 0 max abs(Round(parseNumber(ctrlText 140010))) min 359]; GVAR(windSpeed1) set [GVAR(currentTarget), 0 max abs(parseNumber(ctrlText 140020)) min 50]; GVAR(windSpeed2) set [GVAR(currentTarget), 0 max abs(parseNumber(ctrlText 140021)) min 50]; GVAR(windDirection) set [GVAR(currentTarget), 1 max Round(parseNumber(ctrlText 140030)) min 12]; -GVAR(inclinationAngle) set [GVAR(currentTarget), -60 max parseNumber(ctrlText 140040) min 60]; +_inclinationAngleCosine = 0.5 max parseNumber(ctrlText 140041) max 1; +_inclinationAngleDegree = -60 max parseNumber(ctrlText 140040) min 60; +if (_inclinationAngleDegree != GVAR(inclinationAngle) select GVAR(currentTarget)) then { + GVAR(inclinationAngle) set [GVAR(currentTarget), _inclinationAngleDegree]; +} else { + if (_inclinationAngleCosine != cos(GVAR(inclinationAngle) select GVAR(currentTarget))) then { + GVAR(inclinationAngle) set [GVAR(currentTarget), acos(_inclinationAngleCosine)]; + }; +}; GVAR(targetSpeed) set [GVAR(currentTarget), -50 max abs(parseNumber(ctrlText 140050)) min 50]; GVAR(targetRange) set [GVAR(currentTarget), 0 max abs(parseNumber(ctrlText 140060)) min 4000]; if (GVAR(currentUnit) != 2) then { diff --git a/addons/atragmx/functions/fnc_update_inclination_angle.sqf b/addons/atragmx/functions/fnc_update_inclination_angle.sqf new file mode 100644 index 0000000000..b47936b2c0 --- /dev/null +++ b/addons/atragmx/functions/fnc_update_inclination_angle.sqf @@ -0,0 +1,26 @@ +/* + * Author: Ruthberg + * Updates the inclination angle input fields + * + * Arguments: + * Reference input field ID <NUMBER> + * + * Return Value: + * Nothing + * + * Example: + * 0 call ace_atragmx_fnc_update_inclination_angle + * + * Public: No + */ +#include "script_component.hpp" + +private ["_inclinationAngleCosine", "_inclinationAngleDegree"]; +_inclinationAngleCosine = 0.5 max parseNumber(ctrlText 140041) max 1; +_inclinationAngleDegree = -60 max parseNumber(ctrlText 140040) min 60; + +if (_this == 0) then { + ctrlSetText [140040, Str(round(acos(_inclinationAngleCosine)))]; +} else { + ctrlSetText [140041, Str(floor(cos(_inclinationAngleDegree) * 100) / 100)]; +}; From 170a8d064120cded61757ba92dd050eb07d8d90a Mon Sep 17 00:00:00 2001 From: Grzegorz Sikora <gienkov.grzegorz@gmail.com> Date: Sat, 18 Apr 2015 13:56:34 +0200 Subject: [PATCH 141/257] PL translation --- addons/optionsmenu/stringtable.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/optionsmenu/stringtable.xml b/addons/optionsmenu/stringtable.xml index 2bc66b8b52..5c292ea16f 100644 --- a/addons/optionsmenu/stringtable.xml +++ b/addons/optionsmenu/stringtable.xml @@ -1,4 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> +<!-- Edited with tabler. --> <Project name="ACE"> <Package name="OptionsMenu"> <Key ID="STR_ACE_OptionsMenu_OpenConfigMenu"> @@ -215,6 +216,7 @@ </Key> <Key ID="STR_ACE_optionsMenu_uiScaing"> <English>Option Menu UI Scaling</English> + <Polish>Skalowanie UI menu ustawień</Polish> </Key> </Package> </Project> \ No newline at end of file From f31e3c1fd4b335c6a2785af15c8edc1d999da7b3 Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Sat, 18 Apr 2015 08:31:03 -0700 Subject: [PATCH 142/257] litter simulation createVehicleLocal /w temporal network sync. --- addons/medical/ACE_Settings.hpp | 6 +++ addons/medical/XEH_postInit.sqf | 4 ++ addons/medical/XEH_preInit.sqf | 5 +- addons/medical/functions/fnc_createLitter.sqf | 48 +++++-------------- .../functions/fnc_handleCreateLitter.sqf | 23 +++++++++ 5 files changed, 48 insertions(+), 38 deletions(-) create mode 100644 addons/medical/functions/fnc_handleCreateLitter.sqf diff --git a/addons/medical/ACE_Settings.hpp b/addons/medical/ACE_Settings.hpp index 56e5a531ec..81dd34a01a 100644 --- a/addons/medical/ACE_Settings.hpp +++ b/addons/medical/ACE_Settings.hpp @@ -124,4 +124,10 @@ class ACE_Settings { values[] = {"$STR_ACE_Medical_painEffect_Flash", "$STR_ACE_Medical_painEffect_Chroma"}; isClientSettable = 1; }; + + class GVAR(litterSimulationDetail) { + typeName = "SCALAR"; + value = 2; + values[] = {"None", "500", "All"}; + }; }; diff --git a/addons/medical/XEH_postInit.sqf b/addons/medical/XEH_postInit.sqf index 309bb2a888..c7390c18be 100644 --- a/addons/medical/XEH_postInit.sqf +++ b/addons/medical/XEH_postInit.sqf @@ -265,3 +265,7 @@ if (USE_WOUND_EVENT_SYNC) then { ["playerInventoryChanged", { [ACE_player] call FUNC(itemCheck); }] call EFUNC(common,addEventHandler); + + +// Networked litter +[QGVAR(createLitter), FUNC(handleCreateLitter)] call EFUNC(common,addSyncedEventHandler); \ No newline at end of file diff --git a/addons/medical/XEH_preInit.sqf b/addons/medical/XEH_preInit.sqf index f15b4ec109..78a2e7f71b 100644 --- a/addons/medical/XEH_preInit.sqf +++ b/addons/medical/XEH_preInit.sqf @@ -21,7 +21,6 @@ PREP(adjustPainLevel); PREP(canAccessMedicalEquipment); PREP(canTreat); PREP(canTreatCached); -PREP(createLitter); PREP(determineIfFatal); PREP(getBloodLoss); PREP(getBloodPressure); @@ -98,6 +97,10 @@ PREP(moduleTreatmentConfiguration); PREP(copyDeadBody); PREP(requestWoundSync); +// Networked litter +PREP(createLitter); +PREP(handleCreateLitter); + GVAR(injuredUnitCollection) = []; GVAR(IVBags) = []; diff --git a/addons/medical/functions/fnc_createLitter.sqf b/addons/medical/functions/fnc_createLitter.sqf index 570c6d63d3..cc3e32eb5e 100644 --- a/addons/medical/functions/fnc_createLitter.sqf +++ b/addons/medical/functions/fnc_createLitter.sqf @@ -37,21 +37,19 @@ if !(isArray (_config >> "litter")) exitwith {}; _litter = getArray (_config >> "litter"); _createLitter = { + private["_position", "_litterClass", "_direction"]; _position = getPos (_this select 0); _litterClass = _this select 1; - _litterObject = createVehicle [_litterClass, _position, [], 0, "NONE"]; if (random(1) >= 0.5) then { - _litterObject setPos [(_position select 0) + random 2, (_position select 1) + random 2, _position select 2]; + _position = [(_position select 0) + random 2, (_position select 1) + random 2, _position select 2]; } else { - _litterObject setPos [(_position select 0) - random 2, (_position select 1) - random 2, _position select 2]; + _position = [(_position select 0) - random 2, (_position select 1) - random 2, _position select 2]; }; - _litterObject setDir (random 360); - _litterObject; -}; - -if (isnil QGVAR(allCreatedLitter)) then { - GVAR(allCreatedLitter) = []; - GVAR(litterPFHRunning) = false; + _direction = (random 360); + + [QGVAR(createLitter), [_litterClass,_position,_direction], 0] call EFUNC(common,syncedEvent); + + true }; _createdLitter = []; @@ -75,37 +73,13 @@ _createdLitter = []; // Loop through through the litter options and place the litter { if (typeName _x == "ARRAY" && {(count _x > 0)}) then { - _createdLitter pushback ([_target, _x select (floor(random(count _x)))] call _createLitter); + [_target, _x select (floor(random(count _x)))] call _createLitter; }; if (typeName _x == "STRING") then { - _createdLitter pushback ([_target, _x] call _createLitter); + [_target, _x] call _createLitter; }; }foreach _litterOptions; }; }; }; -}foreach _litter; - -if (GVAR(litterCleanUpDelay) >= 0) then { - GVAR(allCreatedLitter) pushback [time, GVAR(litterCleanUpDelay), _createdLitter]; -}; - -if !(GVAR(litterPFHRunning)) then { - GVAR(litterPFHRunning) = true; - [{ - { - if (time - (_x select 0) >= (_x select 1)) then { - { - deleteVehicle _x; - }foreach (_this select 2); - GVAR(allCreatedLitter) set[_foreachIndex, objNull]; - }; - }foreach GVAR(allCreatedLitter); - GVAR(allCreatedLitter) = GVAR(allCreatedLitter) - [objNull]; - - if (count GVAR(allCreatedLitter) == 0) exitwith { - GVAR(litterPFHRunning) = false; - [_this select 1] call CBA_fnc_removePerFrameHandler; - }; - }, 30, []] call CBA_fnc_addPerFrameHandler; -}; +}foreach _litter; \ No newline at end of file diff --git a/addons/medical/functions/fnc_handleCreateLitter.sqf b/addons/medical/functions/fnc_handleCreateLitter.sqf new file mode 100644 index 0000000000..f6bd821831 --- /dev/null +++ b/addons/medical/functions/fnc_handleCreateLitter.sqf @@ -0,0 +1,23 @@ +#include "script_component.hpp" +PARAMS_3(_litterClass,_position,_direction); +private["_litterObject"]; + + + +if (isnil QGVAR(allCreatedLitter)) then { + GVAR(allCreatedLitter) = []; + GVAR(litterPFHRunning) = false; +}; + +if((count GVAR(allCreatedLitter)) <= GVAR(litterSimulationDetail) )then { + _litterObject = createVehicleLocal [_litterClass, _position, [], 0, "NONE"]; + _litterObject setDir _direction; +} else { + // @TODO: We hit max litter items, remove a few of them to work with what we have. + // Basically, we should just start FIFO'ing these +}; + +GVAR(allCreatedLitter) pushBack _litterObject; +//GVAR(allCreatedLitter) = GVAR(allCreatedLitter) - [objNull]; + +true \ No newline at end of file From c5f5b11d31e4c1a9820eae60b3fc08b0ced480b6 Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Sat, 18 Apr 2015 08:37:21 -0700 Subject: [PATCH 143/257] strings. --- addons/medical/ACE_Settings.hpp | 6 ++++-- addons/medical/stringtable.xml | 6 ++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/addons/medical/ACE_Settings.hpp b/addons/medical/ACE_Settings.hpp index 81dd34a01a..51ff72f465 100644 --- a/addons/medical/ACE_Settings.hpp +++ b/addons/medical/ACE_Settings.hpp @@ -126,8 +126,10 @@ class ACE_Settings { }; class GVAR(litterSimulationDetail) { + displayName = "$STR_ACE_Medical_litterSimulationDetail"; + description = "$STR_ACE_Medical_litterSimulationDetail_Desc"; typeName = "SCALAR"; - value = 2; - values[] = {"None", "500", "All"}; + value = 500; + isClientSettable = 1; }; }; diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 9f651e90b7..b77649a072 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -1,6 +1,12 @@ <?xml version="1.0" encoding="utf-8"?> <Project name="ACE"> <Package name="Medical"> + <Key ID="TR_ACE_Medical_litterSimulationDetail"> + <English>Litter Simulation Detail</English> + </Key> + <Key ID="TR_ACE_Medical_litterSimulationDetail_Desc"> + <English>Litter simulation detail level sets the number of litter items which will be locally spawned in the client. Excessive amounts in local areas could cause FPS lag, so this is a client only setting.</English> + </Key> <Key ID="STR_ACE_Medical_Inject_Atropine"> <English>Inject Atropine</English> <German>Atropin injizieren</German> From d1993836aef8d2509f25381cd33ef42f5f22a4f0 Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Sat, 18 Apr 2015 08:40:28 -0700 Subject: [PATCH 144/257] Cleanup. missing string. --- addons/missileguidance/CfgAmmo.hpp | 6 -- addons/missileguidance/CfgVehicles.hpp | 3 +- .../Example_ACE_MissileGuidance.hpp | 65 ------------------- addons/missileguidance/stringtable.xml | 3 + 4 files changed, 5 insertions(+), 72 deletions(-) delete mode 100644 addons/missileguidance/Example_ACE_MissileGuidance.hpp diff --git a/addons/missileguidance/CfgAmmo.hpp b/addons/missileguidance/CfgAmmo.hpp index a4a4f7e25d..680a410506 100644 --- a/addons/missileguidance/CfgAmmo.hpp +++ b/addons/missileguidance/CfgAmmo.hpp @@ -46,9 +46,6 @@ class CfgAmmo { minDeflection = 0.00025; // Minium flap deflection for guidance maxDeflection = 0.001; // Maximum flap deflection for guidance incDeflection = 0.0005; // The incrmeent in which deflection adjusts. - //minDeflection = 0.005; - //maxDeflection = 0.5; - //incDeflection = 0.005; canVanillaLock = 0; // Can this default vanilla lock? Only applicable to non-cadet mode @@ -119,9 +116,6 @@ class CfgAmmo { minDeflection = 0.00005; // Minium flap deflection for guidance maxDeflection = 0.025; // Maximum flap deflection for guidance incDeflection = 0.00005; // The incrmeent in which deflection adjusts. - //minDeflection = 0.005; - //maxDeflection = 0.5; - //incDeflection = 0.005; canVanillaLock = 0; diff --git a/addons/missileguidance/CfgVehicles.hpp b/addons/missileguidance/CfgVehicles.hpp index 7707717c9e..301795b8d7 100644 --- a/addons/missileguidance/CfgVehicles.hpp +++ b/addons/missileguidance/CfgVehicles.hpp @@ -17,7 +17,7 @@ class CfgVehicles { class MainTurret; }; }; - + class ACE_Comanche_Test : B_Heli_Attack_01_F { displayName = "ACE_Comanche_Test"; author = "ACE Team"; @@ -30,4 +30,5 @@ class CfgVehicles { }; }; }; + }; diff --git a/addons/missileguidance/Example_ACE_MissileGuidance.hpp b/addons/missileguidance/Example_ACE_MissileGuidance.hpp deleted file mode 100644 index d9c1ea8a2c..0000000000 --- a/addons/missileguidance/Example_ACE_MissileGuidance.hpp +++ /dev/null @@ -1,65 +0,0 @@ -THIS IS A WIP FUNCTIONALITY, DUE TO CHANGE - - - class M_PG_AT : MissileBase { - model = "\A3\Weapons_F\Ammo\Rocket_01_fly_F"; - proxyShape = "\A3\Weapons_F\Ammo\Rocket_01_F"; - - irLock = 0; - laserLock = 0; - airLock = 0; - weaponLockSystem = "2 + 16"; - - 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; - - // Begin ACE guidance Configs - class ACE_MissileGuidance { - enabled = 1; - - minDeflection = 0.005; // Minium flap deflection for guidance - maxDeflection = 0.025; // Maximum flap deflection for guidance - incDeflection = 0.005; // The incrmeent in which deflection adjusts. - //minDeflection = 0.005; - //maxDeflection = 0.5; - //incDeflection = 0.005; - - // Guidance type for munitions - defaultSeekerType = "SALH"; - seekerTypes[] = { "SALH", "LIDAR", "SARH", "Optic", "Thermal", "GPS", "SACLOS", "MCLOS" }; - - defaultSeekerLockMode = "LOAL"; - seekerLockModes[] = { "LOAL", "LOBL" }; - - seekerAngle = 90; // Angle in front of the missile which can be searched - seekerAccuracy = 1; // seeker accuracy multiplier - - seekerMinRange = 1; - seekerMaxRange = 2500; // Range from the missile which the seeker can visually search - - // Attack profile type selection - defaultAttackProfile = "LIN"; - attackProfiles[] = { "LIN", "DIR", "MID", "HI", "TOP", "PYM" }; - }; - }; \ No newline at end of file diff --git a/addons/missileguidance/stringtable.xml b/addons/missileguidance/stringtable.xml index c9cb4c4c6b..ab3a449aa6 100644 --- a/addons/missileguidance/stringtable.xml +++ b/addons/missileguidance/stringtable.xml @@ -13,6 +13,9 @@ <Hungarian>Fejlett rakétairányító</Hungarian> <Russian>Расширенный ракетой</Russian> </Key> + <Key ID="STR_ACE_MissileGuidance_Desc"> + <English>Advanced missile guidance, or AMG, provides multiple enhancements to missile locking and firing. It is also a framework required for missile weapon types.</English> + </Key> <Key ID="STR_ACE_Hydra70_DAGR"> <English>Hydra-70 DAGR Missile</English> <Spanish></Spanish> From 370e6bd9a7c7b43f7fa19a1e1896f23258b00953 Mon Sep 17 00:00:00 2001 From: commy2 <commy-2@gmx.de> Date: Sat, 18 Apr 2015 17:42:13 +0200 Subject: [PATCH 145/257] maybe fix for #741, Speedlimiter locking vehicle controls --- addons/vehicles/functions/fnc_speedLimiter.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/vehicles/functions/fnc_speedLimiter.sqf b/addons/vehicles/functions/fnc_speedLimiter.sqf index 2332336e0a..053d96d470 100644 --- a/addons/vehicles/functions/fnc_speedLimiter.sqf +++ b/addons/vehicles/functions/fnc_speedLimiter.sqf @@ -35,7 +35,7 @@ _maxSpeed = speed _vehicle max 10; _speed = speed _vehicle; if (_speed > _maxSpeed) then { - _vehicle setVelocity ((velocity _vehicle) vectorMultiply (_maxSpeed / _speed)); + _vehicle setVelocity ((velocity _vehicle) vectorMultiply ((_maxSpeed / _speed) - 0.00001)); // fix 1.42-hotfix PhysX libraries applying force in previous direction when turning }; } , 0, [_driver, _vehicle, _maxSpeed]] call CBA_fnc_addPerFrameHandler; From fc39b81c958284193b78afbee69d72025b774569 Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Sat, 18 Apr 2015 17:45:32 +0200 Subject: [PATCH 146/257] *Fixed a minor bug in the dual inclination calculation *Added a profile namespace format version *The profileNamespace data is now automatically reset on version mismatch --- addons/atragmx/XEH_postInit.sqf | 3 +- addons/atragmx/XEH_preInit.sqf | 1 + .../atragmx/functions/fnc_clear_user_data.sqf | 39 +++++++++++++++++++ addons/atragmx/functions/fnc_parse_input.sqf | 5 ++- .../atragmx/functions/fnc_store_user_data.sqf | 2 + .../fnc_toggle_target_speed_assist.sqf | 10 +++-- .../fnc_update_inclination_angle.sqf | 4 +- .../functions/fnc_update_target_data.sqf | 2 +- addons/atragmx/script_component.hpp | 2 + 9 files changed, 59 insertions(+), 9 deletions(-) create mode 100644 addons/atragmx/functions/fnc_clear_user_data.sqf diff --git a/addons/atragmx/XEH_postInit.sqf b/addons/atragmx/XEH_postInit.sqf index 01b13fc85e..e5f7dd42d3 100644 --- a/addons/atragmx/XEH_postInit.sqf +++ b/addons/atragmx/XEH_postInit.sqf @@ -2,7 +2,7 @@ #include "initKeybinds.sqf" -if (count (profileNamespace getVariable ["ACE_ATragMX_gunList", []]) > 0) then { +if ((profileNamespace getVariable ["ACE_ATragMX_profileNamespaceVersion", 0]) == ATRAGMX_PROFILE_NAMESPACE_VERSION && count (profileNamespace getVariable ["ACE_ATragMX_gunList", []]) > 0) then { GVAR(gunList) = profileNamespace getVariable "ACE_ATragMX_gunList"; } else { // Profile Name, Muzzle Velocity, Zero Range, Scope Base Angle, AirFriction, Bore Height, Scope Unit, Elevation Scope Step, Windage Scope Step, Maximum Elevation, Dialed Elevation, Dialed Windage, Mass, Bullet Diameter, Rifle Twist, BC, Drag Model, Atmosphere Model @@ -39,6 +39,7 @@ if (count (profileNamespace getVariable ["ACE_ATragMX_gunList", []]) > 0) then { ["5.56x45mm Mk262" , 820, 100, 0.0671, -0.0011250, 3.81, 0, 0.338, 0.338, 120, 0, 0, 4.990, 5.70, 17.78, 0.361, 1, "ASM" ], ["5.56x45mm Mk318" , 880, 100, 0.0616, -0.0011200, 3.81, 0, 0.338, 0.338, 120, 0, 0, 4.018, 5.70, 17.78, 0.307, 1, "ASM" ]]; + [] call FUNC(clear_user_data); profileNamespace setVariable ["ACE_ATragMX_gunList", GVAR(gunList)]; }; diff --git a/addons/atragmx/XEH_preInit.sqf b/addons/atragmx/XEH_preInit.sqf index 6a640f162e..b85e325494 100644 --- a/addons/atragmx/XEH_preInit.sqf +++ b/addons/atragmx/XEH_preInit.sqf @@ -12,6 +12,7 @@ PREP(calculate_target_speed_assist); PREP(can_show); PREP(change_gun); PREP(change_target_slot); +PREP(clear_user_data); PREP(create_dialog); PREP(cycle_gun_list); PREP(cycle_image_size_units); diff --git a/addons/atragmx/functions/fnc_clear_user_data.sqf b/addons/atragmx/functions/fnc_clear_user_data.sqf new file mode 100644 index 0000000000..10f31741f2 --- /dev/null +++ b/addons/atragmx/functions/fnc_clear_user_data.sqf @@ -0,0 +1,39 @@ +/* + * Author: Ruthberg + * Removes all user data from the profileNamespace + * + * Arguments: + * Nothing + * + * Return Value: + * Nothing + * + * Example: + * call ace_atragmx_fnc_clear_user_data + * + * Public: No + */ +#include "script_component.hpp" + +profileNamespace setVariable ["ACE_ATragMX_gunList", nil]; + +profileNamespace setVariable ["ACE_ATragMX_currentUnit", nil]; +profileNamespace setVariable ["ACE_ATragMX_currentGun", nil]; +profileNamespace setVariable ["ACE_ATragMX_currentTarget", nil]; +profileNamespace setVariable ["ACE_ATragMX_currentScopeUnit", nil]; + +profileNamespace setVariable ["ACE_ATragMX_atmosphereModeTBH", nil]; +profileNamespace setVariable ["ACE_ATragMX_altitude", nil]; +profileNamespace setVariable ["ACE_ATragMX_temperature", nil]; +profileNamespace setVariable ["ACE_ATragMX_barometricPressure", nil]; +profileNamespace setVariable ["ACE_ATragMX_relativeHumidity", nil]; + +profileNamespace setVariable ["ACE_ATragMX_showWind2", nil]; +profileNamespace setVariable ["latitude", nil]; +profileNamespace setVariable ["directionOfFire", nil]; +profileNamespace setVariable ["ACE_ATragMX_windSpeed1", nil]; +profileNamespace setVariable ["ACE_ATragMX_windSpeed2", nil]; +profileNamespace setVariable ["ACE_ATragMX_windDirection", nil]; +profileNamespace setVariable ["ACE_ATragMX_inclinationAngle", nil]; +profileNamespace setVariable ["ACE_ATragMX_targetSpeed", nil]; +profileNamespace setVariable ["ACE_ATragMX_targetRange", nil]; diff --git a/addons/atragmx/functions/fnc_parse_input.sqf b/addons/atragmx/functions/fnc_parse_input.sqf index ca22c62663..aa77fc8111 100644 --- a/addons/atragmx/functions/fnc_parse_input.sqf +++ b/addons/atragmx/functions/fnc_parse_input.sqf @@ -31,12 +31,12 @@ GVAR(directionOfFire) set [GVAR(currentTarget), 0 max abs(Round(parseNumber(ctrl GVAR(windSpeed1) set [GVAR(currentTarget), 0 max abs(parseNumber(ctrlText 140020)) min 50]; GVAR(windSpeed2) set [GVAR(currentTarget), 0 max abs(parseNumber(ctrlText 140021)) min 50]; GVAR(windDirection) set [GVAR(currentTarget), 1 max Round(parseNumber(ctrlText 140030)) min 12]; -_inclinationAngleCosine = 0.5 max parseNumber(ctrlText 140041) max 1; +_inclinationAngleCosine = 0.5 max parseNumber(ctrlText 140041) min 1; _inclinationAngleDegree = -60 max parseNumber(ctrlText 140040) min 60; if (_inclinationAngleDegree != GVAR(inclinationAngle) select GVAR(currentTarget)) then { GVAR(inclinationAngle) set [GVAR(currentTarget), _inclinationAngleDegree]; } else { - if (_inclinationAngleCosine != cos(GVAR(inclinationAngle) select GVAR(currentTarget))) then { + if (_inclinationAngleCosine != Round(cos(GVAR(inclinationAngle) select GVAR(currentTarget)) * 100) / 100) then { GVAR(inclinationAngle) set [GVAR(currentTarget), acos(_inclinationAngleCosine)]; }; }; @@ -120,5 +120,6 @@ GVAR(workingMemory) set [11, _windageCur]; [] call FUNC(update_atmosphere); [] call FUNC(update_atmo_env_data); [] call FUNC(update_target); +[] call FUNC(update_target_data); [] call FUNC(store_user_data); diff --git a/addons/atragmx/functions/fnc_store_user_data.sqf b/addons/atragmx/functions/fnc_store_user_data.sqf index 6a66b96ea3..66207444d2 100644 --- a/addons/atragmx/functions/fnc_store_user_data.sqf +++ b/addons/atragmx/functions/fnc_store_user_data.sqf @@ -15,6 +15,8 @@ */ #include "script_component.hpp" +profileNamespace setVariable ["ACE_ATragMX_profileNamespaceVersion", ATRAGMX_PROFILE_NAMESPACE_VERSION]; + profileNamespace setVariable ["ACE_ATragMX_currentUnit", GVAR(currentUnit)]; profileNamespace setVariable ["ACE_ATragMX_currentGun", GVAR(currentGun)]; profileNamespace setVariable ["ACE_ATragMX_currentTarget", GVAR(currentTarget)]; diff --git a/addons/atragmx/functions/fnc_toggle_target_speed_assist.sqf b/addons/atragmx/functions/fnc_toggle_target_speed_assist.sqf index e227cf0716..5b88a6cfce 100644 --- a/addons/atragmx/functions/fnc_toggle_target_speed_assist.sqf +++ b/addons/atragmx/functions/fnc_toggle_target_speed_assist.sqf @@ -21,9 +21,13 @@ if (ctrlVisible 8000) then { if (_this == 1) then { [] call FUNC(calculate_target_speed_assist); - ctrlSetText [330, Str(parseNumber(ctrlText 8007))]; - ctrlSetText [140050, Str(parseNumber(ctrlText 8007))]; - [] call FUNC(calculate_target_solution); + private ["_targetSpeed"]; + _targetSpeed = parseNumber(ctrlText 8007); + if (_targetSpeed != 0) then { + ctrlSetText [330, Str(_targetSpeed)]; + ctrlSetText [140050, Str(_targetSpeed)]; + [] call FUNC(calculate_target_solution); + }; }; } else { false call FUNC(show_main_page); diff --git a/addons/atragmx/functions/fnc_update_inclination_angle.sqf b/addons/atragmx/functions/fnc_update_inclination_angle.sqf index b47936b2c0..ea5599bf2d 100644 --- a/addons/atragmx/functions/fnc_update_inclination_angle.sqf +++ b/addons/atragmx/functions/fnc_update_inclination_angle.sqf @@ -16,11 +16,11 @@ #include "script_component.hpp" private ["_inclinationAngleCosine", "_inclinationAngleDegree"]; -_inclinationAngleCosine = 0.5 max parseNumber(ctrlText 140041) max 1; +_inclinationAngleCosine = 0.5 max parseNumber(ctrlText 140041) min 1; _inclinationAngleDegree = -60 max parseNumber(ctrlText 140040) min 60; if (_this == 0) then { ctrlSetText [140040, Str(round(acos(_inclinationAngleCosine)))]; } else { - ctrlSetText [140041, Str(floor(cos(_inclinationAngleDegree) * 100) / 100)]; + ctrlSetText [140041, Str(round(cos(_inclinationAngleDegree) * 100) / 100)]; }; diff --git a/addons/atragmx/functions/fnc_update_target_data.sqf b/addons/atragmx/functions/fnc_update_target_data.sqf index bfd7fced05..733118d583 100644 --- a/addons/atragmx/functions/fnc_update_target_data.sqf +++ b/addons/atragmx/functions/fnc_update_target_data.sqf @@ -26,7 +26,7 @@ if (GVAR(currentUnit) != 2) then { }; ctrlSetText [140030, Str(Round((GVAR(windDirection) select GVAR(currentTarget))))]; ctrlSetText [140040, Str(Round((GVAR(inclinationAngle) select GVAR(currentTarget))))]; -ctrlSetText [140041, Str(floor(cos(GVAR(inclinationAngle) select GVAR(currentTarget)) * 100) / 100)]; +ctrlSetText [140041, Str(Round(cos(GVAR(inclinationAngle) select GVAR(currentTarget)) * 100) / 100)]; if (GVAR(currentUnit) != 2) then { ctrlSetText [140050, Str(Round((GVAR(targetSpeed) select GVAR(currentTarget)) * 2.23693629 * 100) / 100)]; } else { diff --git a/addons/atragmx/script_component.hpp b/addons/atragmx/script_component.hpp index f7ec6e68e8..5290ba6a1f 100644 --- a/addons/atragmx/script_component.hpp +++ b/addons/atragmx/script_component.hpp @@ -10,3 +10,5 @@ #endif #include "\z\ace\addons\main\script_macros.hpp" + +#define ATRAGMX_PROFILE_NAMESPACE_VERSION 1.0 From e14ee452497f1d9ecbf3b9cd7eb80173d40f6d89 Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Sat, 18 Apr 2015 09:29:58 -0700 Subject: [PATCH 147/257] debug checking. --- addons/missileguidance/functions/fnc_guidancePFH.sqf | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/addons/missileguidance/functions/fnc_guidancePFH.sqf b/addons/missileguidance/functions/fnc_guidancePFH.sqf index f7fd56c164..2487e3b28f 100644 --- a/addons/missileguidance/functions/fnc_guidancePFH.sqf +++ b/addons/missileguidance/functions/fnc_guidancePFH.sqf @@ -92,6 +92,10 @@ if(accTime > 0) then { drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,1,1,1], ASLtoATL _projectilePos, 0.75, 0.75, 0, str _vectorTo, 1, 0.025, "TahomaB"]; drawLine3D [ASLtoATL _projectilePos, ASLtoATL _profileAdjustedTargetPos, [1,0,0,1]]; +_ps = "#particlesource" createVehicleLocal (ASLtoATL _projectilePos); +_PS setParticleParams [["\A3\Data_f\cl_basic", 8, 3, 1], "", "Billboard", 1, 3.0141, [0, 0, 2], [0, 0, 0], 1, 1.275, 1, 0, [1, 1], [[1, 0, 0, 1], [1, 0, 0, 1], [1, 0, 0, 1]], [1], 1, 0, "", "", nil]; +_PS setDropInterval 3.0; + hintSilent format["d: %1", _distanceToTarget]; #endif From d1e03d8e7aa027290008e571914f5344ad5cc064 Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Sat, 18 Apr 2015 09:40:46 -0700 Subject: [PATCH 148/257] Slight tweaks. --- addons/javelin/functions/fnc_onOpticDraw.sqf | 2 +- addons/missileguidance/functions/fnc_attackProfile_JAV_DIR.sqf | 2 +- addons/missileguidance/functions/fnc_attackProfile_JAV_TOP.sqf | 2 +- addons/missileguidance/functions/fnc_seekerType_Optic.sqf | 1 + 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/addons/javelin/functions/fnc_onOpticDraw.sqf b/addons/javelin/functions/fnc_onOpticDraw.sqf index bc17865480..73f07d3e90 100644 --- a/addons/javelin/functions/fnc_onOpticDraw.sqf +++ b/addons/javelin/functions/fnc_onOpticDraw.sqf @@ -72,7 +72,7 @@ _range = parseNumber (ctrlText __JavelinIGUIRangefinder); TRACE_1("Viewing range", _range); if (_range > 50 && {_range < 2500}) then { _pos = positionCameraToWorld [0,0,_range]; - _targetArray = _pos nearEntities ["AllVehicles", _range/25]; + _targetArray = _pos nearEntities ["AllVehicles", _range/100]; TRACE_1("Searching at range", _targetArray); if (count (_targetArray) > 0) then { _newTarget = _targetArray select 0; diff --git a/addons/missileguidance/functions/fnc_attackProfile_JAV_DIR.sqf b/addons/missileguidance/functions/fnc_attackProfile_JAV_DIR.sqf index ecb469527a..1e13c57ccc 100644 --- a/addons/missileguidance/functions/fnc_attackProfile_JAV_DIR.sqf +++ b/addons/missileguidance/functions/fnc_attackProfile_JAV_DIR.sqf @@ -53,7 +53,7 @@ switch( (_state select 0) ) do { }; case STAGE_TERMINAL: { TRACE_1("STAGE_TERMINAL",""); - _returnTargetPos = _seekerTargetPos vectorAdd [0,0,_distanceToTarget * 0.002]; + _returnTargetPos = _seekerTargetPos; }; }; diff --git a/addons/missileguidance/functions/fnc_attackProfile_JAV_TOP.sqf b/addons/missileguidance/functions/fnc_attackProfile_JAV_TOP.sqf index c5933e6df9..e9064da404 100644 --- a/addons/missileguidance/functions/fnc_attackProfile_JAV_TOP.sqf +++ b/addons/missileguidance/functions/fnc_attackProfile_JAV_TOP.sqf @@ -70,7 +70,7 @@ switch( (_state select 0) ) do { case STAGE_TERMINAL: { TRACE_1("STAGE_TERMINAL",""); //_returnTargetPos = _seekerTargetPos vectorAdd [0,0,_distanceToTarget * 0.02]; - _returnTargetPos = _seekerTargetPos vectorAdd [0,0,_distanceToTarget * 0.002]; + _returnTargetPos = _seekerTargetPos; }; }; diff --git a/addons/missileguidance/functions/fnc_seekerType_Optic.sqf b/addons/missileguidance/functions/fnc_seekerType_Optic.sqf index 74d3b0fc71..45e378c975 100644 --- a/addons/missileguidance/functions/fnc_seekerType_Optic.sqf +++ b/addons/missileguidance/functions/fnc_seekerType_Optic.sqf @@ -17,6 +17,7 @@ TRACE_1("", _launchParams); _foundTargetPos = [0,0,0]; if(!isNil "_target") then { _foundTargetPos = getPosASL _target; + //_foundTargetPos = (_target modelToWorldVisual (getCenterOfMass _target)); }; // @TODO: This is seeker LOS and angle checks for LOAL only; LOBL does not need visual From 34cf11e02223d12186d29ab611f1290ca28f024c Mon Sep 17 00:00:00 2001 From: Grzegorz <gienkov.grzegorz@gmail.com> Date: Sat, 18 Apr 2015 18:48:56 +0200 Subject: [PATCH 149/257] PL translation fix Did not saw that one --- addons/realisticnames/stringtable.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index 2b02d7f5b7..7f2cf20e96 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -1135,7 +1135,7 @@ <English>Mini-Spike (AT)</English> <German>Mini-Spike (PALR)</German> <Czech>Mini-Spike (PT)</Czech> - <Polish>Mini-Spike (AA)</Polish> + <Polish>Mini-Spike (AT)</Polish> <French>Mini-Spike (AT)</French> <Hungarian>Mini-Spike (Tankelhárító)</Hungarian> <Spanish>Mini-Spike (AT)</Spanish> From f55bd5a6295680b1719b24823e6b4ff71b63fae6 Mon Sep 17 00:00:00 2001 From: FreeZbe <FreeZbe@users.noreply.github.com> Date: Sat, 18 Apr 2015 18:49:46 +0200 Subject: [PATCH 150/257] French: updates / fixes stringtable --- addons/advanced_ballistics/stringtable.xml | 4 +- addons/atragmx/stringtable.xml | 4 +- addons/attach/stringtable.xml | 10 +- addons/captives/stringtable.xml | 10 +- addons/common/stringtable.xml | 14 +-- addons/disarming/stringtable.xml | 3 +- addons/explosives/stringtable.xml | 8 +- addons/grenades/stringtable.xml | 12 +-- addons/hearing/stringtable.xml | 4 +- addons/interact_menu/stringtable.xml | 4 +- addons/javelin/stringtable.xml | 6 +- addons/laser_selfdesignate/stringtable.xml | 6 +- addons/magazinerepack/stringtable.xml | 4 +- addons/medical/stringtable.xml | 102 ++++++++++++--------- addons/missileguidance/stringtable.xml | 16 ++-- addons/nametags/stringtable.xml | 4 +- addons/optionsmenu/stringtable.xml | 1 + addons/realisticnames/stringtable.xml | 4 +- addons/respawn/stringtable.xml | 6 ++ addons/scopes/stringtable.xml | 11 ++- addons/weather/stringtable.xml | 4 +- 21 files changed, 135 insertions(+), 102 deletions(-) diff --git a/addons/advanced_ballistics/stringtable.xml b/addons/advanced_ballistics/stringtable.xml index 6890937a45..4d09dac3ef 100644 --- a/addons/advanced_ballistics/stringtable.xml +++ b/addons/advanced_ballistics/stringtable.xml @@ -7,7 +7,7 @@ <Polish>Pokaż inf. o wietrze</Polish> <Italian>Mostra indicazioni del vento</Italian> <Russian>Показать информацию о ветре</Russian> - <French>Afficher les info du vent</French> + <French>Afficher les info sur le vent</French> <Spanish>Mostrar información del viento</Spanish> </Key> <Key ID="STR_ACE_AdvancedBallistics_ProtractorKey"> @@ -19,4 +19,4 @@ <Spanish>Mostrar transportador</Spanish> </Key> </Package> -</Project> +</Project> \ No newline at end of file diff --git a/addons/atragmx/stringtable.xml b/addons/atragmx/stringtable.xml index 1baa4fb38c..f1cfa25e9a 100644 --- a/addons/atragmx/stringtable.xml +++ b/addons/atragmx/stringtable.xml @@ -19,6 +19,7 @@ <Polish>Otwórz ATragMX</Polish> <Russian>Открыть ATragMX</Russian> <Spanish>Abrir ATragMX</Spanish> + <French>Ouvrir ATragMX</French> </Key> <Key ID="STR_ACE_ATragMX_Description"> <English>Rugged PDA with ATragMX</English> @@ -31,6 +32,7 @@ <Polish>Otwórz ATragMX</Polish> <Russian>Открыть ATragMX</Russian> <Spanish>Abrir ATragMX</Spanish> + <French>Ouvrir ATragMX</French> </Key> </Package> -</Project> +</Project> \ No newline at end of file diff --git a/addons/attach/stringtable.xml b/addons/attach/stringtable.xml index db98c4fffc..4d3b57e944 100644 --- a/addons/attach/stringtable.xml +++ b/addons/attach/stringtable.xml @@ -42,7 +42,7 @@ <German>IR-Stroboskop befestigt</German> <Spanish>Marcador IR acoplado</Spanish> <Polish>Przyczepiono stroboskop IR</Polish> - <French>Strobe IR attaché</French> + <French>Balise IR attachée</French> <Czech>IR Značkovač připnutý</Czech> <Portuguese>Marcador IV Acoplado</Portuguese> <Italian>Strobo IR attaccata</Italian> @@ -54,7 +54,7 @@ <German>IR-Stroboskop entfernt</German> <Spanish>Marcador IR quitado</Spanish> <Polish>Odczepiono stroboskop IR</Polish> - <French>Strobe IR détaché</French> + <French>Balise IR détachée</French> <Czech>IR Značkovač odepnutý</Czech> <Portuguese>Marcador IV Separado</Portuguese> <Italian>Strobo IR staccata</Italian> @@ -126,7 +126,7 @@ <German>IR-Stroboskop</German> <Spanish>Marcador IR</Spanish> <Polish>Stroboskop IR</Polish> - <French>Strobe IR</French> + <French>Balise IR</French> <Czech>IR Značkovač</Czech> <Portuguese>Marcador IV</Portuguese> <Italian>Strobo IR</Italian> @@ -138,7 +138,7 @@ <German>Das IR-Stroboskop erlaubt es dir deine Position mit einem blinkenden Leuchtfeuer zu signalisieren, welches nur mit Nachtsichtgerät zu erkennen ist.</German> <Polish>Stroboskop światła podczerwieni umożliwia oznaczenie swojej pozycji pulsacyjnym światłem widocznym tylko przez optykę noktowizyjną i gogle noktowizyjne.</Polish> <Spanish>El Marcador IR permite señalizar su posisición a través de una baliza visible solo a través de dispositivos de visión nocturna. </Spanish> - <French>Le Strobe IR permet de signaler votre position grace à un clignotement visible par des JVN.</French> + <French>La balise IR permet de signaler votre position grace à un clignotement visible par des JVN.</French> <Czech>IR Značkovač je Infračerveně zářící stroboskop umožňující signalizaci vaší pozice díky blikajícímu světlu, které je vidět pouze při užití noktovizoru.</Czech> <Portuguese>O Marcador IV permite que você sinalize sua posição através de um pulso visível somente com equipamento de visão noturna.</Portuguese> <Italian>La Strobo IR è una luce stroboscopica che ti permette di segnalare la tua posizione grazie all'emissione di impulsi ad infrarossi visibili solo con i visori notturni.</Italian> @@ -204,4 +204,4 @@ <Russian>%1<br/>отсоединена</Russian> </Key> </Package> -</Project> +</Project> \ No newline at end of file diff --git a/addons/captives/stringtable.xml b/addons/captives/stringtable.xml index f609aabd93..0a88c5d7d8 100644 --- a/addons/captives/stringtable.xml +++ b/addons/captives/stringtable.xml @@ -134,7 +134,7 @@ </Key> <Key ID="STR_ACE_Captives_StartSurrendering"> <English>Surrender</English> - <French>Capituler</French> + <French>Se rendre</French> <German>Kapitulieren</German> <Spanish>Rendirse</Spanish> <Czech>Vzdát se</Czech> @@ -156,7 +156,7 @@ </Key> <Key ID="STR_ACE_Captives_Zeus_OnlyAlive"> <English>Only use on alive units</English> - <French>Utiliser uniquement sur unité vivante</French> + <French>Utiliser uniquement sur une unité vivante</French> <German>Nur bei lebenden Einheiten verwendbar</German> <Spanish>Utilizar solo en unidades vivas</Spanish> <Czech>Použitelné jen na živé jednotky</Czech> @@ -167,7 +167,7 @@ </Key> <Key ID="STR_ACE_Captives_Zeus_OnlyInfantry"> <English>Only use on dismounted inf</English> - <French>Utiliser uniquement sur personnel à pied</French> + <French>Utiliser uniquement sur du personnel à pied</French> <German>Nur bei abgesessener Infanterie verwendbar</German> <Spanish>Utilizar solo en infanteria desmontada</Spanish> <Czech>Použitelné jen na pěsích jednotkách</Czech> @@ -178,7 +178,7 @@ </Key> <Key ID="STR_ACE_Captives_Zeus_NothingSelected"> <English>Nothing under mouse</English> - <French>Rien sous la souris</French> + <French>Rien sous le curseur</French> <German>Es wurde nichts ausgewählt</German> <Spanish>Nada bajo el ratón</Spanish> <Czech>Nic není vybráno</Czech> @@ -188,4 +188,4 @@ <Italian>Niente selezionato</Italian> </Key> </Package> -</Project> +</Project> \ No newline at end of file diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index d9ee389166..de10a60893 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -272,7 +272,7 @@ <Spanish>Desactivar menú de mando</Spanish> <Polish>Wyłącz menu dowodzenia</Polish> <Czech>Vypnout velící menu</Czech> - <French>Désactiver Menu Commande</French> + <French>Désactiver menu commande</French> <Russian>Выключить командное меню</Russian> <Hungarian>Parancsnoki menü kikapcsolása</Hungarian> <Italian>Disabilita Menù di comando</Italian> @@ -329,7 +329,7 @@ <Italian>Accetta le richieste degli altri giocatori. Queste possono riguardare l'uso o la condivisione dell'equipaggiamento, o di determinate azioni.</Italian> <Czech>Přijimutí žádosti poslané jinými hráči. Mohou to být žádosti k použítí/sdílení vybavení nebo k vykonání určité činnosti.</Czech> <Russian>Принять запросы, отправленные другими игроками. Например, запросы на использование/совместное использование снаряжения, выполнение определенных действий</Russian> - <French>Accepter les requêtes d'autres joueurs. Comme l'utilisation / l'échange d'équipement, la réalistion d'actions.</French> + <French>Accepter les requêtes d'autres joueurs. Comme l'utilisation / l'échange d'équipement, la réalisation d'actions.</French> <Hungarian>Más játékosok általi kérések elfogadása. Ezek a kérések vonatkozhatnak a felszerelés használatára/megosztására, valamint különböző cselekményekre.</Hungarian> </Key> <Key ID="STR_ACE_ACTION_DECLINE_REQUEST_KEY_TOOLTIP"> @@ -340,7 +340,7 @@ <Italian>Rifiuta le richieste degli altri giocatori. Queste possono riguardare l'uso o la condivisione dell'equipaggiamento, o di determinate azioni.</Italian> <Czech>Zamítnutí žádostii poslané jinými hráči. Mohou to být žádosti k použítí/sdílení vybavení nebo k vykonání určité činnosti.</Czech> <Russian>Отклонить запросы, отправленные другими игроками. Например, запросы на использование/совместное использование снаряжения, выполнение определенных действий</Russian> - <French>Rejeter les requêtes d'autres joueurs. Comme l'utilisation / l'échange d'équipement, la réalistion d'actions.</French> + <French>Rejeter les requêtes d'autres joueurs. Comme l'utilisation / l'échange d'équipement, la réalisation d'actions.</French> <Hungarian>Más játékosok általi kérések elutasítása. Ezek a kérések vonatkozhatnak a felszerelés használatára/megosztására, valamint különböző cselekményekre.</Hungarian> </Key> <Key ID="STR_ACE_Common_SettingFeedbackIconsName"> @@ -383,7 +383,7 @@ <Italian>Modifica la posizione su schermo della barra di avanzamento.</Italian> <Russian>Установите желаемое положение строки состояния на экране.</Russian> <Polish>Ustaw pożądaną lokalizację paska postępu na ekranie</Polish> - <French>Appliquer la postion de la barre de progression sur l'écran</French> + <French>Appliquer la position de la barre de progression sur l'écran</French> <Czech>Nastavuje pozici ukazetele průběhu činnosti na vaší obrazovce.</Czech> <Hungarian>Itt beállítható az állapotjelző sáv képernyődön lévő helyzete.</Hungarian> </Key> @@ -405,7 +405,7 @@ <Italian>Il colore di sfondo dei suggerimenti dell'ACE.</Italian> <Russian>Цвет фона всплывающих подсказок АСЕ.</Russian> <Polish>Kolor tła dla powiadomień ACE</Polish> - <French>Notifications ACE: couleur de l'arrière plan</French> + <French>Notification ACE: couleur de l'arrière plan</French> <Czech>Barva pozadí ACE nápověd.</Czech> <Hungarian>Az ACE-súgók hátterének színe.</Hungarian> </Key> @@ -427,7 +427,7 @@ <Italian>Il colore del testo dei suggerimenti dell'ACE. Questo è il colore standard per tutti i caratteri mostrati dal sistema di suggerimenti dell'ACE, se questo non è altrimenti specificato.</Italian> <Russian>Цвет шрифта текста всплывающих подсказок АСЕ. Этот цвет является стандартным для всего текста, транслирующегося через систему подсказок АСЕ, если не установлено другого цвета для текста подсказок.</Russian> <Polish>Kolor tekstu dla powiadomień ACE. Ten kolor jest domyślnym dla wszystkich tekstów wyświetlanych poprzez System Powiadomień ACE, jeżeli dla powiadomienia nie określono innego koloru.</Polish> - <French>Notification ACE: couleur du texte. C'est la couleur par défaut de tout texte afficher dans les notifications ACE, si aucune couleur n'est spécifiée pour les notifications</French> + <French>Notification ACE: couleur du texte. C'est la couleur par défaut de tout texte affiché dans les notifications ACE, si aucune couleur n'est spécifiée pour les notifications</French> <Czech>Barva fontu ACE nápověd. Toto je standardní barva pro všechen text zobrazovaný ACE nápovědami, pokud nemá nápověda žádnou specifikanou barvu.</Czech> <Hungarian>Az ACE-súgók betűkészletének színek. Ez a szín alapértelmezett az összes szövegre az ACE-súgórendszerben, ha a súgószöveg maga nem ad meg más színt.</Hungarian> </Key> @@ -454,4 +454,4 @@ <French>Une banane est un fruit qui, d'un point de vue botanique, fait partie du groupe des baies. Produite par plusieurs sortes de grandes plantes à fleurs herbacées du type Musa.</French> </Key> </Package> -</Project> +</Project> \ No newline at end of file diff --git a/addons/disarming/stringtable.xml b/addons/disarming/stringtable.xml index 625f156b95..583080ff08 100644 --- a/addons/disarming/stringtable.xml +++ b/addons/disarming/stringtable.xml @@ -9,6 +9,7 @@ <Spanish>Abrir inventario</Spanish> <Russian>Открыть инвентарь</Russian> <Italian>Apri l'inventario</Italian> + <French>Ouvrir l'inventaire</French> </Key> </Package> -</Project> +</Project> \ No newline at end of file diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml index d0b61d0814..9d4937ed65 100644 --- a/addons/explosives/stringtable.xml +++ b/addons/explosives/stringtable.xml @@ -114,7 +114,7 @@ <German>Mobiltelefon</German> <Spanish>Télefono móvil</Spanish> <Polish>Telefon komórkowy</Polish> - <French>Téléphone Portable</French> + <French>Téléphone portable</French> <Czech>Telefon</Czech> <Italian>Cellulare</Italian> <Hungarian>Mobiltelefon</Hungarian> @@ -294,7 +294,7 @@ <German>"Platzieren"-Menü</German> <Spanish>Menú de colocación</Spanish> <Polish>Menu umieszczania</Polish> - <French>Menu Placement</French> + <French>Menu placement</French> <Czech>Menu Umístění</Czech> <Italian>Menù di collocamento</Italian> <Hungarian>Elhelyezési menü</Hungarian> @@ -450,7 +450,7 @@ <Polish>Czujnik magnetyczny (wybuch w górę)</Polish> <Spanish>Sensor IM (ataque inferior)</Spanish> <German>Magnetfeldsensor (Bodenangriff)</German> - <French>Capteur Magnétique (par le bas)</French> + <French>Capteur magnétique (par le bas)</French> <Czech>Magnetický Senzor (Výbuch ze spoda)</Czech> <Italian>Sensore Magnetico di Prossimità (Attacco inferiore)</Italian> <Hungarian>Mágneses mező érzékelő (Bottom Attack)</Hungarian> @@ -502,4 +502,4 @@ <Italian>Raccogli</Italian> </Key> </Package> -</Project> +</Project> \ No newline at end of file diff --git a/addons/grenades/stringtable.xml b/addons/grenades/stringtable.xml index 758e6eb9a0..7f8321d6c6 100644 --- a/addons/grenades/stringtable.xml +++ b/addons/grenades/stringtable.xml @@ -20,7 +20,7 @@ <Spanish>Lanzamiento normal</Spanish> <Polish>Normalny rzut</Polish> <Czech>Normální hod</Czech> - <French>Lancer Normal</French> + <French>Lancer normal</French> <Russian>Нормальный бросок</Russian> <Hungarian>Normál dobás</Hungarian> <Italian>Lancio normale</Italian> @@ -32,7 +32,7 @@ <Spanish>Lanzamiento alto</Spanish> <Polish>Wysoki rzut</Polish> <Czech>Vysoký hod</Czech> - <French>Lancer Haut</French> + <French>Lancer haut</French> <Russian>Высокий бросок</Russian> <Hungarian>Magas dobás</Hungarian> <Italian>Lancio verso l'alto</Italian> @@ -44,7 +44,7 @@ <Spanish>Lanzamiento preciso</Spanish> <Polish>Precyzyjny rzut</Polish> <Czech>Přesný hod</Czech> - <French>Lancer Précis</French> + <French>Lancer précis</French> <Russian>Точный бросок</Russian> <Hungarian>Pontos dobás</Hungarian> <Italian>Lancio preciso</Italian> @@ -56,7 +56,7 @@ <Spanish>Rodar granada</Spanish> <Polish>Po ziemi</Polish> <Czech>Po zemi</Czech> - <French>Lancer Roulé</French> + <French>Lancer roulé</French> <Russian>Катить гранату</Russian> <Hungarian>Gránát gurítása</Hungarian> <Italian>Fai rotolare la granata</Italian> @@ -78,7 +78,7 @@ <English>M84 Stun Grenade</English> <German>M84 Blendgranate</German> <Spanish>Granada aturdidora M84</Spanish> - <French>M84 Grenade Incapacitante</French> + <French>M84 Grenade incapacitante</French> <Polish>Granat hukowy M84</Polish> <Czech>Omračující granát M84</Czech> <Russian>M84 светозвуковая граната</Russian> @@ -243,4 +243,4 @@ <Spanish>M127A1 (Amarilla)</Spanish> </Key> </Package> -</Project> +</Project> \ No newline at end of file diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index 3fa947ead9..7ae1120b17 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -80,7 +80,7 @@ <Polish>Nie masz stoperów</Polish> <Czech>Nemáš žádné špunty</Czech> <Russian>У вас нет беруш</Russian> - <French>Vous n'avez pas de Bouchons Anti-Bruits</French> + <French>Vous n'avez pas de bouchons anti-bruits</French> <Hungarian>Nincsen füldugód</Hungarian> <Portuguese>Você não possui protetores auriculares</Portuguese> <Italian>Non hai i tappi auricolari</Italian> @@ -109,4 +109,4 @@ <Italian>Disabilita il ronzio</Italian> </Key> </Package> -</Project> +</Project> \ No newline at end of file diff --git a/addons/interact_menu/stringtable.xml b/addons/interact_menu/stringtable.xml index 98cac6116a..c1999b424b 100644 --- a/addons/interact_menu/stringtable.xml +++ b/addons/interact_menu/stringtable.xml @@ -16,7 +16,7 @@ <English>Display interaction menus as lists</English> <Spanish>Mostrar los menus de interacción como listas</Spanish> <Russian>Показывать меню взаимодействия в виде списка</Russian> - <French>Afficher le menu d'interaction au format liste</French> + <French>Afficher le menu d'interaction sous forme de liste</French> <Italian>Mostra il menù di interazione come lista</Italian> <Polish>Wyświetlaj menu interakcji jako listę</Polish> </Key> @@ -65,4 +65,4 @@ <Italian>Interazioni con veicoli</Italian> </Key> </Package> -</Project> +</Project> \ No newline at end of file diff --git a/addons/javelin/stringtable.xml b/addons/javelin/stringtable.xml index 32aed563a1..33abcc1e49 100644 --- a/addons/javelin/stringtable.xml +++ b/addons/javelin/stringtable.xml @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="utf-8"?> <Project name="ACE"> <Package name="WEP_JAVELIN"> <Key ID="STR_ACE_JAVELIN_LockTarget"> @@ -7,7 +7,7 @@ <Russian>Захватить цель (удерживать)</Russian> <Czech>Zamknout cíl(držet)</Czech> <Polish>Namierz cel (przytrzymaj)</Polish> - <French>Verrouiller cible (maintenir)</French> + <French>Verrouiller la cible (maintenir)</French> <Hungarian>Célpontra állás (Lenyomva tartott)</Hungarian> <Italian>Aggangia il bersagio</Italian> <Spanish>Fijar objetivo (Mantener)</Spanish> @@ -24,4 +24,4 @@ <Spanish>Cambiar modo de disparo</Spanish> </Key> </Package> -</Project> +</Project> \ No newline at end of file diff --git a/addons/laser_selfdesignate/stringtable.xml b/addons/laser_selfdesignate/stringtable.xml index f38c015c44..f587763bce 100644 --- a/addons/laser_selfdesignate/stringtable.xml +++ b/addons/laser_selfdesignate/stringtable.xml @@ -8,7 +8,7 @@ <Russian>ЛЦУ ВКЛ</Russian> <Czech>Laserový značkovač zapnut</Czech> <Polish>Desygnator laserowy wł.</Polish> - <French>Désignateur Laser Allumé</French> + <French>Désignateur laser allumé</French> <Hungarian>Lézeres Megjelölő Be</Hungarian> <Italian>Designatore laser acceso</Italian> </Key> @@ -19,9 +19,9 @@ <Russian>ЛЦУ ВЫКЛ</Russian> <Czech>Laserový značkovat vypnut</Czech> <Polish>Desygnator laserowy wył.</Polish> - <French>Désignateur Laser Éteint</French> + <French>Désignateur laser éteint</French> <Hungarian>Lézeres Megjelölő Ki</Hungarian> <Italian>Designatore laser spento</Italian> </Key> </Package> -</Project> +</Project> \ No newline at end of file diff --git a/addons/magazinerepack/stringtable.xml b/addons/magazinerepack/stringtable.xml index 1e02260d1b..3c84a9109e 100644 --- a/addons/magazinerepack/stringtable.xml +++ b/addons/magazinerepack/stringtable.xml @@ -5,7 +5,7 @@ <English>Repack Magazines</English> <German>Magazine umpacken</German> <Spanish>Reorganizar cargadores</Spanish> - <French>Réorganiser chargeurs</French> + <French>Réorganiser les chargeurs</French> <Polish>Przepakuj magazynki</Polish> <Czech>Přepáskovat Zásobníky</Czech> <Italian>Ricarica Caricatori</Italian> @@ -107,4 +107,4 @@ <Italian>%1 pieno e %2 parziale</Italian> </Key> </Package> -</Project> +</Project> \ No newline at end of file diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index a8a8017160..d14e532c26 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -66,7 +66,7 @@ <Spanish>Transfundir salino</Spanish> <Czech>Transfúze fyziologický roztoku</Czech> <Polish>Przetocz sól fizjologiczną</Polish> - <French>Transfuser de la Saline</French> + <French>Transfuser de la solution saline</French> <Russian>Перелить физраствор</Russian> <Hungarian>Infúzió (sós víz)</Hungarian> <Italian>Effettua trasfusione di soluzione salina</Italian> @@ -288,6 +288,7 @@ <Polish>Bandaż uciskowy</Polish> <Hungarian>Nyomókötszer</Hungarian> <Italian>Bendaggio compressivo</Italian> + <French>Bandage gauze</French> </Key> <Key ID="STR_ACE_MEDICAL_ACTIONS_ElasticBandage"> <English>Elastic Bandage</English> @@ -329,7 +330,7 @@ <Russian>Проверить давление</Russian> <Czech>Zkontrolovat krevní tlak</Czech> <Polish>Sprawdź ciśnienie krwi</Polish> - <French>Vérification de la Tension</French> + <French>Vérification de la tension</French> <Hungarian>Vérnyomás megmérése</Hungarian> <Italian>Controlla pressionsa sanguigna</Italian> </Key> @@ -340,7 +341,7 @@ <Russian>Медкарта</Russian> <Polish>Karta segregacyjna</Polish> <Czech>Karta Triage</Czech> - <French>Carte de Triage</French> + <French>Carte de triage</French> <Hungarian>Orvosi lap</Hungarian> <Italian>Triage Card</Italian> </Key> @@ -362,7 +363,7 @@ <Russian>Снять жгут</Russian> <Czech>Sundat škrtidlo</Czech> <Polish>Zdejmij stazę</Polish> - <French>Enlever le Garrot</French> + <French>Enlever le garrot</French> <Hungarian>Érszorító leszedése</Hungarian> <Italian>Rimuovi laccio emostatico</Italian> </Key> @@ -372,7 +373,7 @@ <Spanish>Dar Sangre IV (1000ml)</Spanish> <Russian>Дать кровь для в/в вливания (1000 мл)</Russian> <Polish>Podaj krew IV (1000ml)</Polish> - <French>Administrer du Sang en IV (1000ml)</French> + <French>Administrer du sang en IV (1000ml)</French> <Czech>Podat krev. transfúzi (1000ml)</Czech> <Hungarian>Vér adása intravénásan (1000ml)</Hungarian> <Italian>Effettua trasfusione sangue IV (1000ml)</Italian> @@ -383,7 +384,7 @@ <Spanish>Dar Sangre IV (500ml)</Spanish> <Russian>Дать кровь для в/в вливания (500 мл)</Russian> <Polish>Podaj krew IV (500ml)</Polish> - <French>Administrer du Sang en IV (500ml)</French> + <French>Administrer du sang en IV (500ml)</French> <Czech>Podat krev. transfúzi (500ml) </Czech> <Hungarian>Vér adása intravénásan (500ml)</Hungarian> <Italian>Effettua trasfusione sangue IV (500ml)</Italian> @@ -394,7 +395,7 @@ <Spanish>Dar Sangre IV (250ml)</Spanish> <Russian>Дать кровь для в/в вливания (250 мл)</Russian> <Polish>Podaj krew IV (250ml)</Polish> - <French>Administrer du Sang en IV (250ml)</French> + <French>Administrer du sang en IV (250ml)</French> <Czech>Podat krev. transfúzi (250ml)</Czech> <Hungarian>Vér adása intravénásan (250ml)</Hungarian> <Italian>Effettua trasfusione sangue IV (250ml)</Italian> @@ -405,7 +406,7 @@ <Spanish>Dar Plasma IV (1000ml)</Spanish> <Russian>Дать плазму для в/в вливания (1000 мл)</Russian> <Polish>Podaj osocze IV (1000ml)</Polish> - <French>Administrer du Plasma en IV (1000ml)</French> + <French>Administrer du plasma en IV (1000ml)</French> <Czech>Podat plazmu (1000ml)</Czech> <Hungarian>Vérplazma adása intravénásan (1000ml)</Hungarian> <Italian>Effettua trasfusione plasma IV (1000ml)</Italian> @@ -416,7 +417,7 @@ <Spanish>Dar Plasma IV (500ml)</Spanish> <Russian>Дать плазму для в/в вливания (500 мл)</Russian> <Polish>Podaj osocze IV (500ml)</Polish> - <French>Administrer du Plasma en IV (500ml)</French> + <French>Administrer du plasma en IV (500ml)</French> <Czech>Podat plazmu (500ml)</Czech> <Hungarian>Vérplazma adása intravénásan (500ml)</Hungarian> <Italian>Effettua trasfusione plasma IV (500ml)</Italian> @@ -427,7 +428,7 @@ <Spanish>Dar Plasma IV (250ml)</Spanish> <Russian>Дать плазму для в/в вливания (250 мл)</Russian> <Polish>Podaj osocze IV (250ml)</Polish> - <French>Administrer du Plasma en IV (250ml)</French> + <French>Administrer du plasma en IV (250ml)</French> <Czech>Podat plazmu (250ml)</Czech> <Hungarian>Vérplazma adása intravénásan (250ml)</Hungarian> <Italian>Effettua trasfusione plasma IV (250ml)</Italian> @@ -438,7 +439,7 @@ <Spanish>Dar Salino IV (1000ml)</Spanish> <Russian>Дать физраствор для в/в вливания (1000 мл)</Russian> <Polish>Podaj sól fizjologiczną IV (1000ml)</Polish> - <French>Administrer de la Solution Saline en IV (1000ml)</French> + <French>Administrer de la solution saline en IV (1000ml)</French> <Czech>Podaz fyz. roztok (1000ml)</Czech> <Hungarian>Sós víz adása intravénásan (1000ml)</Hungarian> <Italian>Effettua trasfusione salina IV (1000ml)</Italian> @@ -449,7 +450,7 @@ <Spanish>Dar Salino IV (500ml)</Spanish> <Russian>Дать физраствор для в/в вливания (500 мл)</Russian> <Polish>Podaj sól fizjologiczną IV (500ml)</Polish> - <French>Administrer de la Solution Saline en IV (500ml)</French> + <French>Administrer de la solution saline en IV (500ml)</French> <Czech>Podaz fyz. roztok (500ml)</Czech> <Hungarian>Sós víz adása intravénásan (500ml)</Hungarian> <Italian>Effettua trasfusione salina IV (500ml)</Italian> @@ -460,7 +461,7 @@ <Spanish>Dar Salino IV (250ml)</Spanish> <Russian>Дать физраствор для в/в вливания (250 мл)</Russian> <Polish>Podaj sól fizjologiczną IV (250ml)</Polish> - <French>Administrer de la Solution Saline en IV (250ml)</French> + <French>Administrer de la solution saline en IV (250ml)</French> <Czech>Podaz fyz. roztok (250ml)</Czech> <Hungarian>Sós víz adása intravénásan (250ml)</Hungarian> <Italian>Effettua trasfusione salina IV (250ml)</Italian> @@ -471,7 +472,7 @@ <Spanish>Menor</Spanish> <Russian>Незначительная</Russian> <Polish>Normalny</Polish> - <French>Mineur</French> + <French>Léger</French> <Czech>Minimální</Czech> <Hungarian>Enyhe</Hungarian> <Italian>Minore</Italian> @@ -524,7 +525,7 @@ <English>Normal breathing</English> <Russian>Дыхание в норме</Russian> <Spanish>Respiración normal</Spanish> - <French>Respiration Normale</French> + <French>Respiration normale</French> <Polish>Normalny oddech</Polish> <German>Normale Atmung</German> <Czech>Dýchá normálně</Czech> @@ -536,7 +537,7 @@ <German>Keine Atmung</German> <Russian>Дыхание отсутствует</Russian> <Spanish>No respira</Spanish> - <French>Aucune Respiration</French> + <French>Aucune respiration</French> <Polish>Brak oddechu</Polish> <Czech>Nedýchá</Czech> <Hungarian>Nincs légzés</Hungarian> @@ -546,7 +547,7 @@ <English>Difficult breathing</English> <Russian>Дыхание затруднено</Russian> <Spanish>Dificultad para respirar</Spanish> - <French>Difficultée Respiratoire</French> + <French>Difficultée respiratoire</French> <Polish>Trudności z oddychaniem</Polish> <German>Schwere Atmung</German> <Czech>Dýchá s obtížemi</Czech> @@ -558,7 +559,7 @@ <German>Fast keine Atmung</German> <Russian>Дыхание очень слабое</Russian> <Spanish>Casi sin respiración</Spanish> - <French>Respiration Faible</French> + <French>Respiration faible</French> <Polish>Prawie brak oddechu</Polish> <Czech>Skoro nedýchá</Czech> <Hungarian>Alig van légzés</Hungarian> @@ -580,7 +581,7 @@ <German>Hat Schmerzen</German> <Russian>Испытывает боль</Russian> <Spanish>Con dolor</Spanish> - <French>Ressent de la Douleur</French> + <French>Ressent de la douleur</French> <Polish>W bólu</Polish> <Czech>V bolestech</Czech> <Hungarian>Fájdalom alatt</Hungarian> @@ -591,7 +592,7 @@ <German>Hat eine große Menge Blut verloren</German> <Russian>Большая кровопотеря</Russian> <Spanish>Mucha sangre perdida</Spanish> - <French>A Perdu Bcp de Sang</French> + <French>A perdu beaucoup de sang</French> <Polish>Stracił dużo krwi</Polish> <Czech>Ztratil hodně krve</Czech> <Hungarian>Sok vért vesztett</Hungarian> @@ -634,7 +635,7 @@ <English>Used to cover a wound</English> <Russian>Для перевязки ран</Russian> <Spanish>Utilizado para cubrir una herida</Spanish> - <French>Utilisé Pour Couvrir Une Blessure</French> + <French>Utilisé pour couvrir une blessure</French> <Polish>Używany w celu przykrycia i ochrony miejsca zranienia</Polish> <German>Verwendet, um Wunden abzudecken</German> <Hungarian>Sebesülések befedésére alkalmas</Hungarian> @@ -655,7 +656,7 @@ <German>Mullbinde</German> <Russian>Тампонирующая повязка</Russian> <Spanish>Vendaje compresivo</Spanish> - <French>Bandage Mèche</French> + <French>Bandage gauze</French> <Polish>Bandaż (uciskowy)</Polish> <Hungarian>Nyomókötszer</Hungarian> <Italian>Bendaggio compressivo</Italian> @@ -665,7 +666,7 @@ <German>Verwendet, um mittlere bis große Wunden abzudecken und Blutungen zu stoppen</German> <Russian>Для тампонирования ран среднего и большого размера и остановки кровотечения.</Russian> <Spanish>Se utiliza para vendar heridas medianas o grandes y detener el sangrado</Spanish> - <French>Utilisé pour remplir la cavité créée dans une blessure de taille moyenne à grande.</French> + <French>Utilisé pour couvrir des blessures de taille moyenne à grande. Arrête l'hémorragies</French> <Polish>Używany w celu opatrywania średnich i dużych ran oraz tamowania krwawienia.</Polish> <Hungarian>Közepestől nagyig terjedő sebek betakarására és vérzés elállítására használt kötszer</Hungarian> <Italian>Usato su medie o larghe ferite per fermare emorragie.</Italian> @@ -674,7 +675,7 @@ <English>A bandage used to pack the wound to stem bleeding and facilitate wound healing. Packing a wound is an option in large polytrauma injuries.</English> <Russian>Повязка для тампонирования раны, остановки кровотечения и лучшего заживления. При тяжелых сочетанных ранениях возможно тампонирование раны.</Russian> <Spanish>Se utiliza para detener la hemorragia de una herida y favorecer su cicatrización. Se usa en grandes lesiones o politraumatismos.</Spanish> - <French>Bandage pouvant être inseré dans les blessures pour éponger le saignement et faciliter la guerrison. Ce bandage est optionnel pour soigner les lésions polytraumatique.</French> + <French>Bandage servant à recouvrir les blessures pour arrêter les hémmoragies et faciliter la guérisson. Recouvrir une blessure est optionnel dans le cas de blessures polytraumatiques</French> <Polish>Opatrunek stosowany w celu zatrzymania krwawienia i osłony większych ran.</Polish> <Hungarian>Egy kötszerfajta, melyet a sebek nyomására használnak a vérzés elállítása és sebgyógyulás érdekében. A nyomókötés egy lehetőség nagyobb polytraumatikus sérülések esetén.</Hungarian> <Italian>Un bendaggio usato per bendare ferite con emorragie e facilitare la guarigione. Bendare una ferita è una opzione su ferite di vario tipo.</Italian> @@ -695,7 +696,7 @@ <German>Elastische Binde (Kompressionsbinde)</German> <Russian>Давящая повязка</Russian> <Spanish>Kit de vendaje (Elástico)</Spanish> - <French>Bandage Compressif Élastique</French> + <French>Bandage compressif élastique</French> <Polish>Zestaw bandaży elastycznych.</Polish> <Hungarian>Rugalmas kötszercsomag, "rögzítő"</Hungarian> <Italian>Kit bendaggio, elastico</Italian> @@ -766,7 +767,7 @@ <English>An analgesic used to combat moderate to severe pain experiences.</English> <Russian>Обезболивающее для снятия средних и сильных болевых ощущений.</Russian> <Spanish>Analgésico usado para combatir los estados dolorosos de moderados a severos.</Spanish> - <French>Un Analgésique puissant servant à réduire les douleurs modérées à sévères.</French> + <French>Un analgésique puissant servant à réduire les douleurs modérées à sévères.</French> <Polish>Organiczny związek chemiczny z grupy alkaloidów. Ma silne działanie przeciwbólowe.</Polish> <German>Ein Schmerzmittel um mäßige bis starke Schmerzen zu behandeln</German> <Hungarian>Egy fájdalomcsillapító anyag, jellemzően mérsékelt vagy erős fájdalom esetén alkalmazandó.</Hungarian> @@ -864,7 +865,7 @@ <English>Plasma IV (500ml)</English> <Russian>Плазма для в/в вливания (500 мл)</Russian> <Spanish>Plasma IV (500ml)</Spanish> - <French>Plasma Sanguin IV (500ml)</French> + <French>Plasma sanguin IV (500ml)</French> <Polish>Osocze IV (500ml)</Polish> <German>Plasma IV (500ml)</German> <Hungarian>Vérplazma-infúzió (500ml)</Hungarian> @@ -874,7 +875,7 @@ <English>Plasma IV (250ml)</English> <Russian>Плазма для в/в вливания (250 мл)</Russian> <Spanish>Plasma IV (250ml)</Spanish> - <French>Plasma Sanguin (250ml)</French> + <French>Plasma sanguin (250ml)</French> <Polish>Osocze IV (250ml)</Polish> <German>Plasma IV (250ml)</German> <Hungarian>Vérplazma-infúzió (250ml)</Hungarian> @@ -884,7 +885,7 @@ <English>Blood IV (1000ml)</English> <Russian>Кровь для переливания (1000 мл)</Russian> <Spanish>Sangre IV (1000ml)</Spanish> - <French>Cullot Sanguin IV (1000ml)</French> + <French>Cullot sanguin IV (1000ml)</French> <Polish>Krew IV (1000ml)</Polish> <German>Blut IV (1000ml)</German> <Hungarian>Vér-infúzió (1000ml)</Hungarian> @@ -894,7 +895,7 @@ <English>Blood IV, for restoring a patients blood (keep cold)</English> <Russian>Пакет крови для возмещения объема потерянной крови (хранить в холодильнике)</Russian> <Spanish>Sangre intravenosa, para restarurar el volumen sanguíneo (mantener frío)</Spanish> - <French>Cullot Sanguin O- ,utiliser seulement lors de perte sanguine majeur afin de remplacer le volume sanguin perdu. Habituelment utiliser lors du transport ou dans un etablisement de soin. </French> + <French>Cullot sanguin O- ,utiliser seulement lors de perte sanguine majeur afin de remplacer le volume sanguin perdu. Habituelment utiliser lors du transport ou dans un etablisement de soin. </French> <Polish>Krew IV, używana do uzupełnienia krwi u pacjenta, trzymać w warunkach chłodniczych</Polish> <Hungarian>Vér-infúzió, intravénás bejuttatásra egy páciensnek (hidegen tárolandó)</Hungarian> <Italian>Sangue usato per ripristinare pazienti in cui si è verificata una perdita di sangue (conservare al fresco)</Italian> @@ -905,12 +906,13 @@ <Polish>Krew 0 Rh-, używana w rzadkich i szczególnych przypadkach do uzupełnienia krwi u pacjenta, zazwyczaj w trakcie fazie transportu rannej osoby do szpitala.</Polish> <Spanish>Utilice sólo durante gran pérdida de sangre para reemplazar el volumen de sangre perdida. Uso habitual durante el transporte de heridos.</Spanish> <Italian>Sangue 0 negativo usato per ripristinare sangue in pazienti in cui si è verificata una perdita di sangue.</Italian> + <French>Cullot sanguin O- utilisé dans de rares et stricts cas pour compléter une perte de sang importante. Administré normalement lors d'un MEDEVAC</French> </Key> <Key ID="STR_ACE_MEDICAL_BLOOD_IV_500"> <English>Blood IV (500ml)</English> <Russian>Кровь для переливания (500 мл)</Russian> <Spanish>Sangre IV (500ml)</Spanish> - <French>Cullot Sanguin IV (500ml)</French> + <French>Cullot sanguin IV (500ml)</French> <Polish>Krew IV (500ml)</Polish> <German>Blut IV (500ml)</German> <Hungarian>Vér-infúzió (500ml)</Hungarian> @@ -920,7 +922,7 @@ <English>Blood IV (250ml)</English> <Russian>Кровь для переливания (250 мл)</Russian> <Spanish>Sangre IV (250ml)</Spanish> - <French>Cullot Sanguin IV (250ml)</French> + <French>Cullot sanguin IV (250ml)</French> <Polish>Krew IV (250ml)</Polish> <German>Blut IV (250ml)</German> <Hungarian>Vér-infúzió (250ml)</Hungarian> @@ -930,7 +932,7 @@ <English>Saline IV (1000ml)</English> <Russian>Физраствор для в/в вливания (1000 мл)</Russian> <Spanish>Solución Salina IV (1000ml)</Spanish> - <French>Solution Saline 0.9% IV (1000ml)</French> + <French>Solution saline 0.9% IV (1000ml)</French> <Polish>Sól fizjologiczna IV (1000ml)</Polish> <German>Kochsalzlösung (1000ml)</German> <Hungarian>0,9%-os sósvíz-infúzió (1000ml)</Hungarian> @@ -940,7 +942,7 @@ <English>Saline IV, for restoring a patients blood</English> <Russian>Пакет физраствора для возмещения объема потерянной крови</Russian> <Spanish>Solución salina intravenosa, para restaurar el volumen sanguíneo</Spanish> - <French>Solution Saline 0.9% IV, pour rétablir temporairement la tension artérielle</French> + <French>Solution saline 0.9% IV, pour rétablir temporairement la tension artérielle</French> <Polish>Sól fizjologiczna, podawana dożylnie (IV), używana w celu uzupełnienia krwi u pacjenta</Polish> <Hungarian>0,9%-os sósvíz-infúzió, a páciens vérmennyiségének helyreállítására</Hungarian> <Italian>Soluzione salina, usata per ripristinare sangue nei pazienti.</Italian> @@ -949,7 +951,7 @@ <English>A medical volume-replenishing agent introduced into the blood system through an IV infusion.</English> <Russian>Пакет физиологического раствора для возмещения объема потерянной крови путем внутривенного вливания</Russian> <Spanish>Suero fisiológico inoculado al torrente sanguíneo de forma intravenosa.</Spanish> - <French>Un remplacement temporaire pour rétablir la tension artérielle lors de perte sanguine, administré par intra-veineuse</French> + <French>Un remplacant temporaire pour rétablir la tension artérielle lors de perte sanguine, administré par intra-veineuse</French> <Polish>Używany w medycynie w formie płynu infuzyjnego jako środek nawadniający i uzupełniający niedobór elektrolitów, podawany dożylnie (IV).</Polish> <Hungarian>Egy orvosi térfogat-helyreállító készítmény, melyet intravénás módon lehet a szervezetbe juttatni.</Hungarian> <Italian>Una soluzione medica per ripristinare il volume del sangue introdotta tramite trasfusione IV.</Italian> @@ -958,7 +960,7 @@ <English>Saline IV (500ml)</English> <Russian>Физраствор для в/в вливания (500 мл)</Russian> <Spanish>Salino IV (500ml)</Spanish> - <French>Solution Saline 0.9% IV (500ml)</French> + <French>Solution saline 0.9% IV (500ml)</French> <Polish>Sól fizjologiczna IV (500ml)</Polish> <German>Kochsalzlösung (500ml)</German> <Hungarian>0,9%-os sósvíz-infúzió (500ml)</Hungarian> @@ -968,7 +970,7 @@ <English>Saline IV (250ml)</English> <Russian>Физраствор для в/в вливания (250 мл)</Russian> <Spanish>Salino IV (250ml)</Spanish> - <French>Solution Saline 0.9% IV (250ml)</French> + <French>Solution saline 0.9% IV (250ml)</French> <Polish>Sól fizjologiczna IV (250ml)</Polish> <German>Kochsalzlösung (250ml)</German> <Hungarian>0,9%-os sósvíz-infúzió (250ml)</Hungarian> @@ -978,7 +980,7 @@ <English>Basic Field Dressing (QuikClot)</English> <Russian>Первичный перевязочный пакет (QuikClot)</Russian> <Spanish>Vendaje básico (QuickClot)</Spanish> - <French>Bandage Regulier (Coagulant)</French> + <French>Bandage basique (Hémostatique)</French> <Polish>Podstawowy pakiet opatrunkowy (QuikClot)</Polish> <German>Verbandpäckchen(Gerinnungsmittel)</German> <Hungarian>Általános zárókötszer (QuikClot)</Hungarian> @@ -988,7 +990,7 @@ <English>QuikClot bandage</English> <Russian>Гемостатический пакет QuikClot</Russian> <Spanish>Vendaje QuikClot</Spanish> - <French>Bandage coagulant</French> + <French>Bandage hémostatique</French> <Polish>Hemostatyczny pakiet QuikClot. Podstawowy opatrunek stosowany na rany.</Polish> <German>Bandage mit Gerinnungsmittel</German> <Hungarian>QuikClot kötszer</Hungarian> @@ -1064,7 +1066,7 @@ </Key> <Key ID="STR_ACE_MEDICAL_BODYBAG_DISPLAY"> <English>Bodybag</English> - <French>Sac à corps</French> + <French>Housse mortuaire</French> <Russian>Мешок для трупов</Russian> <Spanish>Bolsa para cadáveres</Spanish> <Polish>Worek na zwłoki</Polish> @@ -1427,7 +1429,7 @@ <Polish>Załaduj pacjenta</Polish> <Czech>Naložit pacianta do</Czech> <Russian>Погрузить пациента в</Russian> - <French>Embarquer le Patient</French> + <French>Embarquer le patient</French> <Hungarian>Sebesült berakása</Hungarian> <Portuguese>Carregar Paciente Em</Portuguese> <Italian>Carica paziente nel</Italian> @@ -1439,7 +1441,7 @@ <Polish>Wyładuj pacjenta</Polish> <Czech>Vyložit pacienta</Czech> <Russian>Выгрузить пациента</Russian> - <French>Débarquer le Patient</French> + <French>Débarquer le patient</French> <Hungarian>Sebesült kihúzása</Hungarian> <Portuguese>Descarregar Paciente</Portuguese> <Italian>Scarica il paziente</Italian> @@ -1449,7 +1451,7 @@ <Spanish>Descargar el paciente</Spanish> <Russian>Выгрузить пациента</Russian> <Polish>Wyładuj pacjenta</Polish> - <French>Débarquer le Patient</French> + <French>Débarquer le patient</French> <Hungarian>Sebesült kihúzása</Hungarian> <Italian>Scarica il paziente</Italian> </Key> @@ -1458,7 +1460,7 @@ <Spanish>Cargar el paciente en</Spanish> <Russian>Погрузить пациента</Russian> <Polish>Załaduj pacjenta</Polish> - <French>Embarquer le Patient</French> + <French>Embarquer le patient</French> <Hungarian>Sebesült berakása</Hungarian> <Italian>Carica il paziente</Italian> </Key> @@ -1523,6 +1525,7 @@ <Russian>Сильно ранен</Russian> <Italian>Gravemente ferito</Italian> <Spanish>Gravemente herido</Spanish> + <French>Lourdement blessé</French> </Key> <Key ID="STR_ACE_Medical_LightlyWounded"> <English>Lightly wounded</English> @@ -1531,6 +1534,7 @@ <Russian>Легко ранен</Russian> <Italian>Leggermente ferito</Italian> <Spanish>Levemente herido</Spanish> + <French>Légèrement blessé</French> </Key> <Key ID="STR_ACE_Medical_VeryLightlyWounded"> <English>Very lightly wounded</English> @@ -1539,6 +1543,7 @@ <Russian>Очень легко ранен</Russian> <Italian>Ferito lievemente</Italian> <Spanish>Muy levemente herido</Spanish> + <French>Très légèrement blessé</French> </Key> <Key ID="STR_ACE_Medical_Head"> <English>Head</English> @@ -1547,6 +1552,7 @@ <Russian>Голова</Russian> <Italian>Testa</Italian> <Spanish>Cabeza</Spanish> + <French>Tête</French> </Key> <Key ID="STR_ACE_Medical_Torso"> <English>Torso</English> @@ -1555,6 +1561,7 @@ <Russian>Торс</Russian> <Italian>Torso</Italian> <Spanish>Torso</Spanish> + <French>Torse</French> </Key> <Key ID="STR_ACE_Medical_LeftArm"> <English>Left Arm</English> @@ -1563,6 +1570,7 @@ <Russian>Левая рука</Russian> <Italian>Braccio sinistro</Italian> <Spanish>Brazo izquierdo</Spanish> + <French>Bras gouche</French> </Key> <Key ID="STR_ACE_Medical_RightArm"> <English>Right Arm</English> @@ -1571,6 +1579,7 @@ <Russian>Правая рука</Russian> <Italian>Braccio destro</Italian> <Spanish>Brazo derecho</Spanish> + <French>Bras droit</French> </Key> <Key ID="STR_ACE_Medical_LeftLeg"> <English>Left Leg</English> @@ -1579,6 +1588,7 @@ <Russian>Левая нога</Russian> <Italian>Gamba sinistra</Italian> <Spanish>Pierna izquierda</Spanish> + <French>Jambe gauche</French> </Key> <Key ID="STR_ACE_Medical_RightLeg"> <English>Right Leg</English> @@ -1587,6 +1597,7 @@ <Russian>Правая нога</Russian> <Italian>Gamba destra</Italian> <Spanish>Pierna derecha</Spanish> + <French>Jambe droite</French> </Key> <Key ID="STR_ACE_Medical_painEffectType"> <English>Pain Effect Type</English> @@ -1595,6 +1606,7 @@ <Russian>Вид боли</Russian> <Italian>Pain Effect Type</Italian> <Spanish>Tipo de efecto de dolor</Spanish> + <French>Type d'effet de douleur</French> </Key> <Key ID="STR_ACE_Medical_painEffect_Flash"> <English>Colour Flashing</English> @@ -1603,6 +1615,7 @@ <Russian>Разноцветные вспышки</Russian> <Italian>Colore lampeggiante</Italian> <Spanish>Parpadeo de color</Spanish> + <French>Flash de couleur</French> </Key> <Key ID="STR_ACE_Medical_painEffect_Chroma"> <English>Chromatic Aberration</English> @@ -1611,6 +1624,7 @@ <Russian>Хроматическая аберрация</Russian> <Italian>Aberrazione cromatica</Italian> <Spanish>Aberración cromática</Spanish> + <French>Aberration chromatique</French> </Key> </Package> </Project> \ No newline at end of file diff --git a/addons/missileguidance/stringtable.xml b/addons/missileguidance/stringtable.xml index c9cb4c4c6b..fdd7e5ee42 100644 --- a/addons/missileguidance/stringtable.xml +++ b/addons/missileguidance/stringtable.xml @@ -4,7 +4,7 @@ <Key ID="STR_ACE_MissileGuidance"> <English>Advanced Missile Guidance</English> <Spanish>Avanzada Misiles Orientación</Spanish> - <French>Avancée Missile orientation</French> + <French>Guidage avancé de missile</French> <Polish>Zaawansowane naprowadzanie rakiet</Polish> <German>Erweitertes Raketenlenksystem</German> <Czech>Pokročilé řízení střel</Czech> @@ -16,7 +16,7 @@ <Key ID="STR_ACE_Hydra70_DAGR"> <English>Hydra-70 DAGR Missile</English> <Spanish></Spanish> - <French></French> + <French>Hydra-70 DAGR</French> <Polish>Hydra-70 DAGR</Polish> <German>Hydra-70 DAGR Rackete</German> <Czech>Hydra-70 DAGR</Czech> @@ -28,7 +28,7 @@ <Key ID="STR_ACE_Hydra70_DAGR_Short"> <English>DAGR</English> <Spanish></Spanish> - <French></French> + <French>DAGR</French> <Polish>DAGR</Polish> <German>DAGR</German> <Czech>DAGR</Czech> @@ -40,7 +40,7 @@ <Key ID="STR_ACE_Hydra70_DAGR_Desc"> <English>Hydra-70 DAGR Laser Guided Missile</English> <Spanish></Spanish> - <French></French> + <French>Missile à guidage Hydra-70 DAGR</French> <Polish>Laserowo naprowadzana rakieta Hydra-70 DAGR</Polish> <German>Hydra-70 DAGR lasergelenkte Rakete</German> <Czech>Hydra-70 DAGR laserem naváděná střela</Czech> @@ -52,7 +52,7 @@ <Key ID="STR_ACE_Hellfire_AGM114K"> <English>Hellfire II AGM-114K Missile</English> <Spanish></Spanish> - <French></French> + <French>Hellfire II AGM-114K</French> <Polish>Hellfire II AGM-114K</Polish> <German>Hellfire II AGM-114K</German> <Czech>Hellfire II AGM-114K</Czech> @@ -64,7 +64,7 @@ <Key ID="STR_ACE_Hellfire_AGM114K_Short"> <English>AGM-114K</English> <Spanish></Spanish> - <French></French> + <French>AGM-114K</French> <Polish>AGM-114K</Polish> <German>AGM-114K</German> <Czech>AGM-114K</Czech> @@ -76,7 +76,7 @@ <Key ID="STR_ACE_Hellfire_AGM114K_desc"> <English>Hellfire II AGM-114K Laser Guided Missile</English> <Spanish></Spanish> - <French></French> + <French>Missile à guidage laser Hellfire II AGM-114K</French> <Polish>Laserowo naprowadzana rakieta Hellfire II AGM-114K</Polish> <German>Hellfire II AGM-114K Lasergelenkte Rakete</German> <Czech>Hellfire II AGM-114K laserem naváděná střela</Czech> @@ -86,4 +86,4 @@ <Russian></Russian> </Key> </Package> -</Project> +</Project> \ No newline at end of file diff --git a/addons/nametags/stringtable.xml b/addons/nametags/stringtable.xml index 4f6e2cfb93..39a87f2ff4 100644 --- a/addons/nametags/stringtable.xml +++ b/addons/nametags/stringtable.xml @@ -17,7 +17,7 @@ <German>Spielernamen anzeigen</German> <Spanish>Mostrar nombres de jugadores</Spanish> <Polish>Pokaż imiona graczy</Polish> - <French>Afficher nom des joueurs</French> + <French>Afficher les nom des joueurs</French> <Hungarian>Játékosnevek mutatása</Hungarian> <Czech>Zobrazit jména hráčů</Czech> <Portuguese>Mostrar nomes de jogadores</Portuguese> @@ -104,4 +104,4 @@ <Italian>Colore nametag di default (membri non del gruppo)</Italian> </Key> </Package> -</Project> +</Project> \ No newline at end of file diff --git a/addons/optionsmenu/stringtable.xml b/addons/optionsmenu/stringtable.xml index 2bc66b8b52..660cfdb4e1 100644 --- a/addons/optionsmenu/stringtable.xml +++ b/addons/optionsmenu/stringtable.xml @@ -215,6 +215,7 @@ </Key> <Key ID="STR_ACE_optionsMenu_uiScaing"> <English>Option Menu UI Scaling</English> + <French>Menu option: taille de l'UI</French> </Key> </Package> </Project> \ No newline at end of file diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index 2b02d7f5b7..04dd81e02e 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -1554,7 +1554,7 @@ <Key ID="STR_ACE_RealisticNames_srifle_DMR_03_spotter"> <English>TODO: NATO DMR (provisional) spotter</English> <Czech>TODO: NATO DMR (provisional) spotter</Czech> - <French>NATO DMR (provisoire) Observateur</French> + <French>NATO DMR (provisoire) observateur</French> <Spanish>TODO: NATO DMR (provisional) observador</Spanish> <Russian>TODO: NATO DMR (provisional) корректировщик</Russian> </Key> @@ -1678,4 +1678,4 @@ <Russian>TODO: SPMG .338 (песочный)</Russian> </Key> </Package> -</Project> +</Project> \ No newline at end of file diff --git a/addons/respawn/stringtable.xml b/addons/respawn/stringtable.xml index 5874b095ae..8b06099c3a 100644 --- a/addons/respawn/stringtable.xml +++ b/addons/respawn/stringtable.xml @@ -52,6 +52,7 @@ <Spanish>Punto de reunión Oeste (Base)</Spanish> <Russian>Точка сбора Синих (База)</Russian> <Polish>Punkt zbiórki Zachodu (Baza)</Polish> + <French>Point de ralliement OUEST (Base)</French> </Key> <Key ID="STR_ACE_Respawn_RallypointEastBase"> <English>Rallypoint East (Base)</English> @@ -59,6 +60,7 @@ <Spanish>Punto de reunión Este (Base)</Spanish> <Russian>Точка сбора Красных (База)</Russian> <Polish>Punkt zbiórki Wschodu (Baza)</Polish> + <French>Point de ralliement EST (Base)</French> </Key> <Key ID="STR_ACE_Respawn_RallypointIndependentBase"> <English>Rallypoint Independent (Base)</English> @@ -66,6 +68,7 @@ <Spanish>Punto de reunión Independiente (Base)</Spanish> <Russian>Точка сбора Независимых (База</Russian> <Polish>Punkt zbiórki Ruchu oporu (Baza)</Polish> + <French>Point de ralliement Indépendant (Base)</French> </Key> <Key ID="STR_ACE_Respawn_RallypointWest"> <English>Rallypoint West</English> @@ -73,6 +76,7 @@ <Spanish>Punto de reunión Oeste</Spanish> <Russian>Точка сбора Синих</Russian> <Polish>Punkt zbiórki Zachodu</Polish> + <French>Point de ralliement OUEST</French> </Key> <Key ID="STR_ACE_Respawn_RallypointEast"> <English>Rallypoint East</English> @@ -80,6 +84,7 @@ <Spanish>Punto de reunión Este</Spanish> <Russian>Точка сбора Красных</Russian> <Polish>Punkt zbiórki Wschodu</Polish> + <French>Point de ralliement EST</French> </Key> <Key ID="STR_ACE_Respawn_RallypointIndependent"> <English>Rallypoint Independent</English> @@ -87,6 +92,7 @@ <Spanish>Punto de reunión Independiente</Spanish> <Russian>Точка сбора Независимых</Russian> <Polish>Punkt zbiórki Ruchu oporu</Polish> + <French>Point de ralliement Indépendant</French> </Key> </Package> </Project> \ No newline at end of file diff --git a/addons/scopes/stringtable.xml b/addons/scopes/stringtable.xml index dd5abdef55..caaff182f3 100644 --- a/addons/scopes/stringtable.xml +++ b/addons/scopes/stringtable.xml @@ -7,6 +7,7 @@ <Russian>Малая корректировка ВВЕРХ</Russian> <Spanish>Ajuste menor arriba</Spanish> <Italian>Regola leggermente alzata in alto</Italian> + <French>Hausse +</French> </Key> <Key ID="STR_ACE_Scopes_AdjustDownMinor"> <English>Minor adjustment down</English> @@ -14,6 +15,7 @@ <Russian>Малая корректировка ВНИЗ</Russian> <Spanish>Ajuste menor abajo</Spanish> <Italian>Regola leggermente alzata in basso</Italian> + <French>Hausse -</French> </Key> <Key ID="STR_ACE_Scopes_AdjustRightMinor"> <English>Minor adjustment right</English> @@ -21,6 +23,7 @@ <Russian>Малая корректировка ВПРАВО</Russian> <Spanish>Ajuste menor derecha</Spanish> <Italian>Regola leggermente il tiro a destra</Italian> + <French>Dérive +</French> </Key> <Key ID="STR_ACE_Scopes_AdjustLeftMinor"> <English>Minor adjustment left</English> @@ -28,6 +31,7 @@ <Russian>Малая корректировка ВЛЕВО</Russian> <Spanish>Ajuste menor izquierda</Spanish> <Italian>Regola leggermete il tiro a sinistra</Italian> + <French>Dérive -</French> </Key> <Key ID="STR_ACE_Scopes_AdjustUpMajor"> <English>Major adjustment up</English> @@ -35,6 +39,7 @@ <Russian>Большая корректировка ВВЕРХ</Russian> <Spanish>Ajuste mayor arriba</Spanish> <Italian>Regola l'alzata in alto</Italian> + <French>Hausse +++</French> </Key> <Key ID="STR_ACE_Scopes_AdjustDownMajor"> <English>Major adjustment down</English> @@ -42,6 +47,7 @@ <Russian>Большая корректировка ВНИЗ</Russian> <Spanish>Ajuste mayor abajo</Spanish> <Italian>Regola l'alzata in basso</Italian> + <French>Hausse ---</French> </Key> <Key ID="STR_ACE_Scopes_AdjustRightMajor"> <English>Major adjustment right</English> @@ -49,6 +55,7 @@ <Russian>Большая корректировка ВПРАВО</Russian> <Spanish>Ajuste mayor derecha</Spanish> <Italian>Regola il tiro a destra</Italian> + <French>Dérive +++</French> </Key> <Key ID="STR_ACE_Scopes_AdjustLeftMajor"> <English>Major adjustment left</English> @@ -56,6 +63,7 @@ <Russian>Большая корректировка ВЛЕВО</Russian> <Spanish>Ajuste mayor izquierda</Spanish> <Italian>Regola il tiro a sinistra</Italian> + <French>Dérive ---</French> </Key> <Key ID="STR_ACE_Scopes_AdjustZero"> <English>Set zero adjustment</English> @@ -63,6 +71,7 @@ <Russian>Сбросить корректировку</Russian> <Spanish>Establecer ajuste a cero</Spanish> <Italian>Resetta i valori del tiro</Italian> + <French>RAZ corrections</French> </Key> </Package> -</Project> +</Project> \ No newline at end of file diff --git a/addons/weather/stringtable.xml b/addons/weather/stringtable.xml index 2278bf350d..7d1e1a1a2c 100644 --- a/addons/weather/stringtable.xml +++ b/addons/weather/stringtable.xml @@ -5,9 +5,9 @@ <English>Show Wind Info</English> <Polish>Pokaż inf. o wietrze</Polish> <Russian>Показать информацию о погоде</Russian> - <French>Afficher information du vent</French> + <French>Afficher information sur le vent</French> <Spanish>Mostrar información del viento</Spanish> <Italian>Mostra informazioni sul vento</Italian> </Key> </Package> -</Project> +</Project> \ No newline at end of file From 9c076364ec79b44f18e6f4882f24693b2881d3a0 Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Sat, 18 Apr 2015 10:18:33 -0700 Subject: [PATCH 151/257] Titan AA asset functionality is now vanilla, locking doesn't override AA/AP stuff. --- addons/javelin/CfgVehicles.hpp | 3 +++ addons/javelin/CfgWeapons.hpp | 15 ++++++++++++--- addons/javelin/functions/fnc_onFired.sqf | 4 ++-- addons/javelin/functions/fnc_onOpticDraw.sqf | 8 +++++--- 4 files changed, 22 insertions(+), 8 deletions(-) diff --git a/addons/javelin/CfgVehicles.hpp b/addons/javelin/CfgVehicles.hpp index 02b8789e1a..5ea7e3327c 100644 --- a/addons/javelin/CfgVehicles.hpp +++ b/addons/javelin/CfgVehicles.hpp @@ -14,6 +14,9 @@ class CfgVehicles { class AT_01_base_F: StaticMGWeapon { class Turrets : Turrets { class MainTurret : MainTurret { + weapons[] = { "missiles_titan_static_at" }; + magazines[] = {"1Rnd_GAT_missiles","1Rnd_GAT_missiles","1Rnd_GAT_missiles","1Rnd_GAT_missiles"}; + turretInfoType = "ACE_RscOptics_javelin"; gunnerOpticsModel = PATHTOF(data\reticle_titan.p3d); opticsZoomMin = 0.08333; diff --git a/addons/javelin/CfgWeapons.hpp b/addons/javelin/CfgWeapons.hpp index 79e7c7358c..1392cd1a56 100644 --- a/addons/javelin/CfgWeapons.hpp +++ b/addons/javelin/CfgWeapons.hpp @@ -5,18 +5,27 @@ class CfgWeapons { class Launcher_Base_F : Launcher { class WeaponSlotsInfo; }; - + + // @TODO: AA by default, motherfuckers class missiles_titan : MissileLauncher { + + }; + + class missiles_titan_at : missiles_titan { weaponInfoType = "ACE_RscOptics_javelin"; modelOptics = PATHTOF(data\reticle_titan.p3d); canLock = 0; - + magazines[] = {"1Rnd_GAT_missiles"}; lockingTargetSound[] = {"",0,1}; lockedTargetSound[] = {"",0,1}; }; + class missiles_titan_static_at : missiles_titan_at { }; - class launch_Titan_base : Launcher_Base_F { + // @TODO: AA by default, motherfuckers + class launch_Titan_base : Launcher_Base_F {}; + + class launch_Titan_short_base : launch_Titan_base { weaponInfoType = "ACE_RscOptics_javelin"; modelOptics = PATHTOF(data\reticle_titan.p3d); diff --git a/addons/javelin/functions/fnc_onFired.sqf b/addons/javelin/functions/fnc_onFired.sqf index a4e351cd92..8c6590f5df 100644 --- a/addons/javelin/functions/fnc_onFired.sqf +++ b/addons/javelin/functions/fnc_onFired.sqf @@ -6,9 +6,9 @@ PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); // Bail on not missile if( _shooter != ACE_player) exitWith { false }; -if( ! ([ (configFile >> "CfgWeapons" >> (currentWeapon (vehicle ACE_player)) ), "launch_Titan_base"] call EFUNC(common,inheritsFrom)) +if( ! ([ (configFile >> "CfgWeapons" >> (currentWeapon (vehicle ACE_player)) ), "launch_Titan_short_base"] call EFUNC(common,inheritsFrom)) && - { ! ([ (configFile >> "CfgWeapons" >> (currentWeapon (vehicle ACE_player)) ), "missiles_titan"] call EFUNC(common,inheritsFrom)) } + { ! ([ (configFile >> "CfgWeapons" >> (currentWeapon (vehicle ACE_player)) ), "missiles_titan_at"] call EFUNC(common,inheritsFrom)) } ) exitWith { }; _pfh_handle = uiNamespace getVariable ["ACE_RscOptics_javelin_PFH", nil]; diff --git a/addons/javelin/functions/fnc_onOpticDraw.sqf b/addons/javelin/functions/fnc_onOpticDraw.sqf index 73f07d3e90..adbd2fde1c 100644 --- a/addons/javelin/functions/fnc_onOpticDraw.sqf +++ b/addons/javelin/functions/fnc_onOpticDraw.sqf @@ -30,16 +30,18 @@ _soundTime = _args select 4; _randomLockInterval = _args select 5; _fireDisabledEH = _args select 6; -if( ! ([ (configFile >> "CfgWeapons" >> (currentWeapon (vehicle ACE_player)) ), "launch_Titan_base"] call EFUNC(common,inheritsFrom)) +if( ! ([ (configFile >> "CfgWeapons" >> (currentWeapon (vehicle ACE_player)) ), "launch_Titan_short_base"] call EFUNC(common,inheritsFrom)) && - { ! ([ (configFile >> "CfgWeapons" >> (currentWeapon (vehicle ACE_player)) ), "missiles_titan"] call EFUNC(common,inheritsFrom)) } + { ! ([ (configFile >> "CfgWeapons" >> (currentWeapon (vehicle ACE_player)) ), "missiles_titan_at"] call EFUNC(common,inheritsFrom)) } ) exitWith { __JavelinIGUITargeting ctrlShow false; __JavelinIGUITargetingGate ctrlShow false; __JavelinIGUITargetingLines ctrlShow false; __JavelinIGUITargetingConstraints ctrlShow false; - _fireDisabledEH = [_fireDisabledEH] call FUNC(enableFire); + if(!isNil "_fireDisabledEH") then { + _fireDisabledEH = [_fireDisabledEH] call FUNC(enableFire); + }; [(_this select 1)] call cba_fnc_removePerFrameHandler; uiNamespace setVariable["ACE_RscOptics_javelin_PFH", nil]; From c1ee623808b197ae2694dee08c8e30cf86762d85 Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Sat, 18 Apr 2015 19:22:24 +0200 Subject: [PATCH 152/257] Added a few static gui elements --- addons/atragmx/RscTitles.hpp | 42 ++++++++++++++++++- .../functions/fnc_show_atmo_env_data.sqf | 2 +- .../functions/fnc_show_target_data.sqf | 2 +- 3 files changed, 42 insertions(+), 4 deletions(-) diff --git a/addons/atragmx/RscTitles.hpp b/addons/atragmx/RscTitles.hpp index 6497606683..c421f5df70 100644 --- a/addons/atragmx/RscTitles.hpp +++ b/addons/atragmx/RscTitles.hpp @@ -1213,6 +1213,12 @@ class ATragMX_Display { class TEXT_ATMO_ENV_DATA_NEXT: TEXT_TARGET_SPEED_ASSIST_NEXT { idc=13010; }; + class TEXT_ATMO_ENV_DATA_CALC_METHOD: TEXT_GUN_AMMO_DATA_BORE_HEIGHT { + idc=13011; + x=0.550*safezoneW+safezoneX+0.24; + y=0.265*safezoneH+safezoneY+0.29; + text="Calc Method"; + }; class TEXT_TARGET_DATA_LATITUDE: TEXT_BORE_HEIGHT { idc=14000; @@ -1237,15 +1243,31 @@ class ATragMX_Display { }; class TEXT_TARGET_DATA_WIND_SPEED: TEXT_TARGET_DATA_LATITUDE { idc=14002; + w=1.2; y=0.265*safezoneH+safezoneY+0.360; text="Wind Speed (m/s)"; }; + class TEXT_TARGET_DATA_WIND_SPEED_1: TEXT_TARGET_DATA_LATITUDE { + idc=141020; + colorText[]={0,0,0,0.6}; + w=0.05; + h=0.03; + sizeEx=0.025; + x=0.550*safezoneW+safezoneX+0.270; + y=0.265*safezoneH+safezoneY+0.357; + text="1"; + }; class TEXT_TARGET_DATA_WIND_SPEED_INPUT_1: TEXT_TARGET_DATA_LATITUDE_INPUT { idc=140020; w=0.045; - x=0.550*safezoneW+safezoneX+0.300; + x=0.550*safezoneW+safezoneX+0.290; y=0.265*safezoneH+safezoneY+0.360; }; + class TEXT_TARGET_DATA_WIND_SPEED_2: TEXT_TARGET_DATA_WIND_SPEED_1 { + idc=141021; + x=0.550*safezoneW+safezoneX+0.330; + text="2"; + }; class TEXT_TARGET_DATA_WIND_SPEED_INPUT_2: TEXT_TARGET_DATA_LATITUDE_INPUT { idc=140021; w=0.045; @@ -1263,16 +1285,32 @@ class ATragMX_Display { }; class TEXT_TARGET_DATA_INCLINATION_ANGLE: TEXT_TARGET_DATA_LATITUDE { idc=14004; + w=1.2; y=0.265*safezoneH+safezoneY+0.440; text="Inclination Angle"; }; + class TEXT_TARGET_DATA_INCLINATION_ANGLE_COSINE: TEXT_TARGET_DATA_LATITUDE { + idc=141041; + colorText[]={0,0,0,0.6}; + w=0.05; + h=0.03; + sizeEx=0.025; + x=0.550*safezoneW+safezoneX+0.270; + y=0.265*safezoneH+safezoneY+0.437; + text="c"; + }; class TEXT_TARGET_DATA_INCLINATION_ANGLE_INPUT_COSINE: TEXT_TARGET_DATA_LATITUDE_INPUT { idc=140041; w=0.045; - x=0.550*safezoneW+safezoneX+0.300; + x=0.550*safezoneW+safezoneX+0.290; y=0.265*safezoneH+safezoneY+0.440; onKeyUp=QUOTE(if (_this select 1 == 28) then {0 call FUNC(update_inclination_angle)}); }; + class TEXT_TARGET_DATA_INCLINATION_ANGLE_DEGREE: TEXT_TARGET_DATA_INCLINATION_ANGLE_COSINE { + idc=141040; + x=0.550*safezoneW+safezoneX+0.330; + text="d"; + }; class TEXT_TARGET_DATA_INCLINATION_ANGLE_INPUT_DEGREE: TEXT_TARGET_DATA_LATITUDE_INPUT { idc=140040; w=0.045; diff --git a/addons/atragmx/functions/fnc_show_atmo_env_data.sqf b/addons/atragmx/functions/fnc_show_atmo_env_data.sqf index 9386956067..56f75f7844 100644 --- a/addons/atragmx/functions/fnc_show_atmo_env_data.sqf +++ b/addons/atragmx/functions/fnc_show_atmo_env_data.sqf @@ -17,7 +17,7 @@ GVAR(showAtmoEnvData) = _this; -{ctrlShow [_x, _this]} forEach [13000, 13001, 13002, 13003, 130030, 13004, 130040, 13005, 130050, 13006, 130060, 13007, 13008, 13009, 13010]; +{ctrlShow [_x, _this]} forEach [13000, 13001, 13002, 13003, 130030, 13004, 130040, 13005, 130050, 13006, 130060, 13007, 13008, 13009, 13010, 13011]; if (_this) then { [] call FUNC(update_atmo_selection); diff --git a/addons/atragmx/functions/fnc_show_target_data.sqf b/addons/atragmx/functions/fnc_show_target_data.sqf index 8b206fee3a..4e696ae331 100644 --- a/addons/atragmx/functions/fnc_show_target_data.sqf +++ b/addons/atragmx/functions/fnc_show_target_data.sqf @@ -17,7 +17,7 @@ GVAR(showTargetData) = _this; -{ctrlShow [_x, _this]} forEach [14000, 140000, 14001, 140010, 14002, 140020, 140021, 14003, 140030, 14004, 140040, 140041, 14005, 140050, 14006, 140060, 14007, 14008, 14009, 14010, 14011]; +{ctrlShow [_x, _this]} forEach [14000, 140000, 14001, 140010, 14002, 141020, 140020, 141021, 140021, 14003, 140030, 14004, 140040, 141040, 141041, 140041, 14005, 140050, 14006, 140060, 14007, 14008, 14009, 14010, 14011]; if (_this) then { [] call FUNC(update_target_data); From 22456a4301f89e45f1c4734f45922b3bd0ecd1e0 Mon Sep 17 00:00:00 2001 From: Glowbal <thomasskooi@live.nl> Date: Sat, 18 Apr 2015 19:49:29 +0200 Subject: [PATCH 153/257] use pain instead --- addons/medical/functions/fnc_init.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/medical/functions/fnc_init.sqf b/addons/medical/functions/fnc_init.sqf index 0147b99204..a9e3625c2b 100644 --- a/addons/medical/functions/fnc_init.sqf +++ b/addons/medical/functions/fnc_init.sqf @@ -18,7 +18,7 @@ private ["_unit", "_allUsedMedication", "_logs", "_forceNew"]; _unit = _this select 0; _forceNew = if (count _this > 1) then {_this select 1} else {false}; -if (!(isnil {_unit getvariable QGVAR(triageLevel)}) && !_forceNew) exitwith {}; +if (!(isnil {_unit getvariable QGVAR(pain)}) && !_forceNew) exitwith {}; _unit setVariable [QGVAR(pain), 0]; _unit setVariable [QGVAR(morphine), 0]; From 34b62a0a86237b62c5ba85c9356f3653f8f86cfc Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Sat, 18 Apr 2015 10:50:16 -0700 Subject: [PATCH 154/257] Print privates declaration for file. --- tools/search_privates.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/tools/search_privates.py b/tools/search_privates.py index 4b418de8d6..f3fbf60c10 100644 --- a/tools/search_privates.py +++ b/tools/search_privates.py @@ -81,10 +81,25 @@ def check_privates(filepath): if len(missing) > 0: print (filepath) + + private_output = 'private['; + first = True + for bad_priv in missing: + if first: + first = False + private_output = private_output + '"' + bad_priv + else: + private_output = private_output + '", "' + bad_priv + + private_output = private_output + '"];'; + print private_output + for bad_priv in missing: print ('\t' + bad_priv) bad_count_file = bad_count_file + 1 - + + + return bad_count_file def main(): From 87337bcb7a51a4e4be2728be25cdb3edb9b8eec3 Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Sat, 18 Apr 2015 10:50:22 -0700 Subject: [PATCH 155/257] ace_javelin privates --- addons/javelin/functions/fnc_onOpticDraw.sqf | 7 +++++-- addons/javelin/functions/fnc_onOpticUnload.sqf | 1 + 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/addons/javelin/functions/fnc_onOpticDraw.sqf b/addons/javelin/functions/fnc_onOpticDraw.sqf index adbd2fde1c..74f7c49746 100644 --- a/addons/javelin/functions/fnc_onOpticDraw.sqf +++ b/addons/javelin/functions/fnc_onOpticDraw.sqf @@ -5,12 +5,15 @@ TRACE_1("enter", _this); #define __TRACKINTERVAL 0 // how frequent the check should be. #define __LOCKONTIME 3 // Lock on won't occur sooner +private["_apos", "_aposX", "_aposY", "_args", "_boundsInput", "_bpos", "_canFire", "_constraintBottom"]; +private["_constraintLeft", "_constraintRight", "_constraintTop", "_currentTarget", "_fireDisabledEH"]; +private["_firedEH", "_fov", "_lastTick", "_lockTime", "_maxX", "_maxY", "_minX", "_minY", "_newTarget"]; +private["_offsetX", "_offsetY", "_pos", "_randomLockInterval", "_randomPosWithinBounds", "_range"]; +private["_runTime", "_soundTime", "_targetArray", "_zamerny"]; #define __OffsetX ((ctrlPosition __JavelinIGUITargetingLineV) select 0) - 0.5 #define __OffsetY ((ctrlPosition __JavelinIGUITargetingLineH) select 1) - 0.5 -private["_isJavelin", "_args", "_lastTick", "_runTime", "_soundTime", "_lockTime", "_newTarget", "_currentTarget", "_range", "_pos", "_targetArray"]; - // Reset arguments if we havnt rendered in over a second _args = uiNamespace getVariable[QGVAR(arguments), [] ]; if( (count _args) > 0) then { diff --git a/addons/javelin/functions/fnc_onOpticUnload.sqf b/addons/javelin/functions/fnc_onOpticUnload.sqf index 4086c02766..187b6cf589 100644 --- a/addons/javelin/functions/fnc_onOpticUnload.sqf +++ b/addons/javelin/functions/fnc_onOpticUnload.sqf @@ -1,6 +1,7 @@ //#define DEBUG_MODE_FULL #include "script_component.hpp" TRACE_1("enter", _this); +private["_args", "_disableFireEH", "_pfh"]; uiNameSpace setVariable ['ACE_RscOptics_javelin',nil]; From 953faf3d4b1a4125ff75f1210da905c498bbf5e8 Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Sat, 18 Apr 2015 10:53:21 -0700 Subject: [PATCH 156/257] ace_missileguidance privates. --- addons/missileguidance/functions/fnc_attackProfile_JAV_DIR.sqf | 1 + addons/missileguidance/functions/fnc_attackProfile_JAV_TOP.sqf | 2 ++ addons/missileguidance/functions/fnc_attackProfile_LIN.sqf | 2 +- addons/missileguidance/functions/fnc_doAttackProfile.sqf | 3 +-- addons/missileguidance/functions/fnc_doSeekerSearch.sqf | 2 +- addons/missileguidance/functions/fnc_guidancePFH.sqf | 1 + addons/missileguidance/functions/fnc_onFired.sqf | 2 ++ addons/missileguidance/functions/fnc_rotateVectLine.sqf | 1 + addons/missileguidance/functions/fnc_seekerType_Optic.sqf | 1 + addons/missileguidance/functions/fnc_seekerType_SALH.sqf | 2 +- 10 files changed, 12 insertions(+), 5 deletions(-) diff --git a/addons/missileguidance/functions/fnc_attackProfile_JAV_DIR.sqf b/addons/missileguidance/functions/fnc_attackProfile_JAV_DIR.sqf index 1e13c57ccc..d84b3b126b 100644 --- a/addons/missileguidance/functions/fnc_attackProfile_JAV_DIR.sqf +++ b/addons/missileguidance/functions/fnc_attackProfile_JAV_DIR.sqf @@ -9,6 +9,7 @@ EXPLODE_7_PVT(((_this select 1) select 0),_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); private["_targetPos", "_projectilePos", "_target", "_seekerTargetPos", "_launchParams", "_targetLaunchParams"]; private["_distanceToTarget", "_distanceToShooter", "_addHeight", "_returnTargetPos", "_state"]; +private["_cruisAlt", "_distanceShooterToTarget", "_shooterPos"]; _seekerTargetPos = _this select 0; _launchParams = _this select 1; diff --git a/addons/missileguidance/functions/fnc_attackProfile_JAV_TOP.sqf b/addons/missileguidance/functions/fnc_attackProfile_JAV_TOP.sqf index e9064da404..393abebc19 100644 --- a/addons/missileguidance/functions/fnc_attackProfile_JAV_TOP.sqf +++ b/addons/missileguidance/functions/fnc_attackProfile_JAV_TOP.sqf @@ -9,6 +9,8 @@ EXPLODE_7_PVT(((_this select 1) select 0),_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); private["_targetPos", "_projectilePos", "_target", "_seekerTargetPos", "_launchParams", "_targetLaunchParams"]; private["_distanceToTarget", "_distanceToShooter", "_addHeight", "_returnTargetPos", "_state"]; +private["_cruisAlt", "_distanceShooterToTarget", "_shooterPos"]; + _seekerTargetPos = _this select 0; _launchParams = _this select 1; diff --git a/addons/missileguidance/functions/fnc_attackProfile_LIN.sqf b/addons/missileguidance/functions/fnc_attackProfile_LIN.sqf index 032ae51791..8c67e68402 100644 --- a/addons/missileguidance/functions/fnc_attackProfile_LIN.sqf +++ b/addons/missileguidance/functions/fnc_attackProfile_LIN.sqf @@ -3,7 +3,7 @@ EXPLODE_7_PVT(((_this select 1) select 0),_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); private["_targetPos", "_projectilePos", "_target", "_seekerTargetPos", "_launchParams", "_targetLaunchParams"]; -private["_distanceToTarget", "_distanceToShooter", "_addHeight", "_returnTargetPos"]; +private["_distanceToTarget", "_distanceToShooter", "_addHeight", "_returnTargetPos", "_shooterPos"]; _seekerTargetPos = _this select 0; _launchParams = _this select 1; diff --git a/addons/missileguidance/functions/fnc_doAttackProfile.sqf b/addons/missileguidance/functions/fnc_doAttackProfile.sqf index fa7c6f4f8b..b9a3502035 100644 --- a/addons/missileguidance/functions/fnc_doAttackProfile.sqf +++ b/addons/missileguidance/functions/fnc_doAttackProfile.sqf @@ -2,8 +2,7 @@ #include "script_component.hpp" EXPLODE_7_PVT(((_this select 1) select 0),_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); -private["_attackProfilePos"]; - +private["_testName", "_attackProfilePos", "_attackProfile", "_attackProfileName", "_attackProfilesCfg", "_i", "_launchParams", "_testame", "_testProfile"]; _launchParams = ((_this select 1) select 1); _attackProfileName = _launchParams select 3; diff --git a/addons/missileguidance/functions/fnc_doSeekerSearch.sqf b/addons/missileguidance/functions/fnc_doSeekerSearch.sqf index 1e43d83218..081ab16353 100644 --- a/addons/missileguidance/functions/fnc_doSeekerSearch.sqf +++ b/addons/missileguidance/functions/fnc_doSeekerSearch.sqf @@ -2,7 +2,7 @@ #include "script_component.hpp" EXPLODE_7_PVT(((_this select 1) select 0),_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); -private["_seekerProfilePos"]; +private["_seekerProfilePos", "_i", "_launchParams", "_seekerType", "_seekerTypeName", "_seekerTypesCfg", "_testName", "_testProfile"]; _launchParams = ((_this select 1) select 1); _seekerTypeName = _launchParams select 2; diff --git a/addons/missileguidance/functions/fnc_guidancePFH.sqf b/addons/missileguidance/functions/fnc_guidancePFH.sqf index 2487e3b28f..614323d63f 100644 --- a/addons/missileguidance/functions/fnc_guidancePFH.sqf +++ b/addons/missileguidance/functions/fnc_guidancePFH.sqf @@ -7,6 +7,7 @@ private["_launchParams", "_targetLaunchParams", "_flightParams", "_seekerParams" private["_lastRunTime", "_runtimeDelta", "_adjustTime", "_args", "_seekerTargetPos", "_projectilePos"]; private["_profileAdjustedTargetPos", "_incDeflection", "_minDeflection", "_maxDeflection"]; private["_targetVector", "_adjustVector", "_finalAdjustVector", "_changeVector", "_pitch", "_yaw", "_roll"]; +private["_PS", "_distanceToTarget", "_targetRelativeVector", "_vectorTo"]; _args = _this select 0; EXPLODE_7_PVT((_args select 0),_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); diff --git a/addons/missileguidance/functions/fnc_onFired.sqf b/addons/missileguidance/functions/fnc_onFired.sqf index e36742bce5..071b2bbf99 100644 --- a/addons/missileguidance/functions/fnc_onFired.sqf +++ b/addons/missileguidance/functions/fnc_onFired.sqf @@ -8,6 +8,8 @@ if(GVAR(enabled) < 1 || {!local _projectile} ) exitWith { false }; if( !isPlayer _shooter && { GVAR(enabled) < 2 } ) exitWith { false }; private["_config", "_enabled", "_target", "_seekerType", "_attackProfile"]; +private["_args", "_canUseLock", "_guidingUnit", "_launchPos", "_lockMode", "_targetPos", "_vanillaTarget"]; + PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); // Bail on not missile diff --git a/addons/missileguidance/functions/fnc_rotateVectLine.sqf b/addons/missileguidance/functions/fnc_rotateVectLine.sqf index b0360cc330..b9904f0e5a 100644 --- a/addons/missileguidance/functions/fnc_rotateVectLine.sqf +++ b/addons/missileguidance/functions/fnc_rotateVectLine.sqf @@ -1,4 +1,5 @@ #include "script_component.hpp" +private["_d", "_map", "_p", "_theta", "_u"]; _map = _this select 0; _theta = _this select 1; diff --git a/addons/missileguidance/functions/fnc_seekerType_Optic.sqf b/addons/missileguidance/functions/fnc_seekerType_Optic.sqf index 45e378c975..872f33a917 100644 --- a/addons/missileguidance/functions/fnc_seekerType_Optic.sqf +++ b/addons/missileguidance/functions/fnc_seekerType_Optic.sqf @@ -3,6 +3,7 @@ EXPLODE_7_PVT(((_this select 1) select 0),_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); private["_targets", "_foundTargetPos", "_launchParams", "_seekerParams", "_targetLaunchParams"]; +private["_angleFov", "_angleOkay", "_losOkay", "_seekerTargetPos", "_sensorPos", "_target"]; _seekerTargetPos = _this select 0; diff --git a/addons/missileguidance/functions/fnc_seekerType_SALH.sqf b/addons/missileguidance/functions/fnc_seekerType_SALH.sqf index 07f997a041..7aafad1114 100644 --- a/addons/missileguidance/functions/fnc_seekerType_SALH.sqf +++ b/addons/missileguidance/functions/fnc_seekerType_SALH.sqf @@ -2,8 +2,8 @@ #include "script_component.hpp" EXPLODE_7_PVT(((_this select 1) select 0),_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); +private["_angleFov", "_canSeeTarget", "_foundTargetPos", "_laserResult", "_launchParams", "_seekerParams", "_seekerTargetPos", "_sensorPos", "_target"]; _seekerTargetPos = _this select 0; - _launchParams = _this select 1; _seekerParams = _launchParams select 3; _angleFov = _seekerParams select 0; From 8361ec3812d099edf34dd49519faffcea3e639ef Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Sat, 18 Apr 2015 10:57:11 -0700 Subject: [PATCH 157/257] ace_lasers --- addons/laser/XEH_pre_init.sqf | 3 --- .../laser/functions/fnc_findStrongestRay.sqf | 2 +- addons/laser/functions/fnc_laserTargetPFH.sqf | 2 +- addons/laser/functions/fnc_laser_init.sqf | 1 + addons/laser/functions/fnc_rotateVectLine.sqf | 2 +- .../functions/fnc_seekerFindLaserSpot.sqf | 9 ++++---- addons/laser/functions/fnc_shootCone.sqf | 3 +-- .../functions/fnc_translateToModelSpace.sqf | 16 -------------- .../functions/fnc_translateToWeaponSpace.sqf | 22 ------------------- .../fnc_vanillaLaserSeekerHandler.sqf | 2 +- 10 files changed, 11 insertions(+), 51 deletions(-) delete mode 100644 addons/laser/functions/fnc_translateToModelSpace.sqf delete mode 100644 addons/laser/functions/fnc_translateToWeaponSpace.sqf diff --git a/addons/laser/XEH_pre_init.sqf b/addons/laser/XEH_pre_init.sqf index de56274759..2dd6e666eb 100644 --- a/addons/laser/XEH_pre_init.sqf +++ b/addons/laser/XEH_pre_init.sqf @@ -8,9 +8,6 @@ PREP(checkLos); PREP(findStrongestRay); -PREP(translateToModelSpace); -PREP(translateToWeaponSpace); - PREP(onLaserDesignatorDraw); PREP(seekerFindLaserSpot); diff --git a/addons/laser/functions/fnc_findStrongestRay.sqf b/addons/laser/functions/fnc_findStrongestRay.sqf index e4238361cb..811b75d351 100644 --- a/addons/laser/functions/fnc_findStrongestRay.sqf +++ b/addons/laser/functions/fnc_findStrongestRay.sqf @@ -1,5 +1,5 @@ #include "script_component.hpp" - +private["_checkPos", "_i", "_largest", "_largestSpot", "_list", "_outliers", "_remainingSpots", "_samplePos", "_spot", "_spots", "_testPos"]; _list = _this select 0; _checkPos = _this select 1; _spots = []; diff --git a/addons/laser/functions/fnc_laserTargetPFH.sqf b/addons/laser/functions/fnc_laserTargetPFH.sqf index d73d9f070a..4c4f242482 100644 --- a/addons/laser/functions/fnc_laserTargetPFH.sqf +++ b/addons/laser/functions/fnc_laserTargetPFH.sqf @@ -2,7 +2,7 @@ #include "script_component.hpp" TRACE_1("enter", _this); -private["_args", "_laserTarget"]; +private["_args", "_laserTarget", "_pos", "_shooter", "_uuid"]; //TRACE_1("enter", _this); _args = _this select 0; _laserTarget = _args select 0; diff --git a/addons/laser/functions/fnc_laser_init.sqf b/addons/laser/functions/fnc_laser_init.sqf index 378ee38407..2be349c294 100644 --- a/addons/laser/functions/fnc_laser_init.sqf +++ b/addons/laser/functions/fnc_laser_init.sqf @@ -3,6 +3,7 @@ TRACE_1("enter", _this); PARAMS_1(_laserTarget); +private["_uuid"]; // Add the target to the global targets array // Everyone tracks them diff --git a/addons/laser/functions/fnc_rotateVectLine.sqf b/addons/laser/functions/fnc_rotateVectLine.sqf index ec85a83cb7..8bae491c4e 100644 --- a/addons/laser/functions/fnc_rotateVectLine.sqf +++ b/addons/laser/functions/fnc_rotateVectLine.sqf @@ -1,5 +1,5 @@ #include "script_component.hpp" - +private["_d", "_map", "_p", "_theta", "_u"]; _map = _this select 0; _theta = _this select 1; diff --git a/addons/laser/functions/fnc_seekerFindLaserSpot.sqf b/addons/laser/functions/fnc_seekerFindLaserSpot.sqf index 41ea877739..77713eb591 100644 --- a/addons/laser/functions/fnc_seekerFindLaserSpot.sqf +++ b/addons/laser/functions/fnc_seekerFindLaserSpot.sqf @@ -15,10 +15,11 @@ #include "script_component.hpp" -private ["_pos", "_seekerWavelengths", "_seekerCode", "_spots", "_buckets", "_excludes", "_bucketIndex", "_finalPos", "_owner", "_obj", "_x", "_method", - "_emitterWavelength", "_laserCode", "_divergence", "_laser", "_laserPos", "_laserDir", "_res", "_bucketPos", "_bucketList", "_c", "_forEachIndex", "_index", - "_testPos", "_finalBuckets", "_largest", "_largestIndex", "_finalBucket", "_owners", "_avgX", "_avgY", "_avgZ", "_count", "_maxOwner", "_maxOwnerIndex", "_finalOwner"]; - +private ["_pos", "_seekerWavelengths", "_seekerCode", "_spots", "_buckets", "_excludes", "_bucketIndex", "_finalPos", "_owner", "_obj", "_x", "_method"]; +private ["_emitterWavelength", "_laserCode", "_divergence", "_laser", "_laserPos", "_laserDir", "_res", "_bucketPos", "_bucketList", "_c", "_forEachIndex", "_index"]; +private ["_testPos", "_finalBuckets", "_largest", "_largestIndex", "_finalBucket", "_owners", "_avgX", "_avgY", "_avgZ", "_count", "_maxOwner", "_maxOwnerIndex", "_finalOwner"]; +private["_dir", "_seekerCos", "_seekerFov", "_testDotProduct", "_testPoint", "_testPointVector"]; + _pos = _this select 0; _dir = vectorNormalized (_this select 1); _seekerFov = _this select 2; diff --git a/addons/laser/functions/fnc_shootCone.sqf b/addons/laser/functions/fnc_shootCone.sqf index 801353d4f7..a7187aa0e4 100644 --- a/addons/laser/functions/fnc_shootCone.sqf +++ b/addons/laser/functions/fnc_shootCone.sqf @@ -1,7 +1,6 @@ #include "script_component.hpp" //#define DEBUG_MODE_FULL -private ["_divergence","_pos","_vec","_longestReturn","_shortestReturn","_resultPositions","_p1","_p2","_p","_v","_cp","_vecRotateMap","_result", - "_resultPos","_distance","_count","_pos2","_radOffset","_offset","_offsetPos","_offsetVector"]; +private ["_i", "_divergence","_pos","_vec","_longestReturn","_shortestReturn","_resultPositions","_p1","_p2","_p","_v","_cp","_vecRotateMap","_result", "_resultPos","_distance","_count","_pos2","_radOffset","_offset","_offsetPos","_offsetVector"]; _divergence = 0.3; _pos = _this select 0; _vec = _this select 1; diff --git a/addons/laser/functions/fnc_translateToModelSpace.sqf b/addons/laser/functions/fnc_translateToModelSpace.sqf deleted file mode 100644 index 1e2e930ac7..0000000000 --- a/addons/laser/functions/fnc_translateToModelSpace.sqf +++ /dev/null @@ -1,16 +0,0 @@ -_object = _this select 0; -_origin = getPosASL _object; -_matrix = _this select 1; -_xVec = _matrix select 0; -_yVec = _matrix select 1; -_zVec = _matrix select 2; - -_offset = _this select 2; - -_x = _offset select 0; -_y = _offset select 1; -_z = _offset select 2; - -_out = (((_xVec vectorMultiply _x) vectorAdd (_yVec vectorMultiply _y)) vectorAdd (_zVec vectorMultiply _z)) vectorAdd _origin; - -_out; \ No newline at end of file diff --git a/addons/laser/functions/fnc_translateToWeaponSpace.sqf b/addons/laser/functions/fnc_translateToWeaponSpace.sqf deleted file mode 100644 index 2c7dc5e6da..0000000000 --- a/addons/laser/functions/fnc_translateToWeaponSpace.sqf +++ /dev/null @@ -1,22 +0,0 @@ -_object = _this select 0; -_origin = getPosASL _object; -_matrix = _this select 1; -_xVec = _matrix select 0; -_yVec = _matrix select 1; -_zVec = _matrix select 2; - -_offset = _this select 2; - -_offset = _offset vectorDiff _origin; - -_x = _offset select 0; -_y = _offset select 1; -_z = _offset select 2; - -_out = [ - ((_xVec select 0)*_x) + ((_xVec select 1)*_y) + ((_xVec select 2)*_z), - ((_yVec select 0)*_x) + ((_yVec select 1)*_y) + ((_yVec select 2)*_z), - ((_zVec select 0)*_x) + ((_zVec select 1)*_y) + ((_zVec select 2)*_z) - ]; - -_out; \ No newline at end of file diff --git a/addons/laser/functions/fnc_vanillaLaserSeekerHandler.sqf b/addons/laser/functions/fnc_vanillaLaserSeekerHandler.sqf index 38cd1839f9..091c4f7acf 100644 --- a/addons/laser/functions/fnc_vanillaLaserSeekerHandler.sqf +++ b/addons/laser/functions/fnc_vanillaLaserSeekerHandler.sqf @@ -12,7 +12,7 @@ //#define DEBUG_MODE_FULL #include "script_component.hpp" -private["_emitter", "_owner", "_gunnerInfo", "_turretInfo", "_povPos", "_povDir"]; +private["_emmiter", "_owner", "_gunnerInfo", "_turretInfo", "_povPos", "_povDir"]; _emmiter = _this select 0; _owner = _this select 1; From dea95f7947ad0b1b15e938f4363a685a5ef5f2d8 Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Sat, 18 Apr 2015 10:57:35 -0700 Subject: [PATCH 158/257] ace_laser_selfdesignate --- addons/laser_selfdesignate/functions/fnc_findLaserSource.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/laser_selfdesignate/functions/fnc_findLaserSource.sqf b/addons/laser_selfdesignate/functions/fnc_findLaserSource.sqf index ac1ae7e438..27beed3c6a 100644 --- a/addons/laser_selfdesignate/functions/fnc_findLaserSource.sqf +++ b/addons/laser_selfdesignate/functions/fnc_findLaserSource.sqf @@ -13,7 +13,7 @@ //#define DEBUG_MODE_FULL #include "script_component.hpp" -private["_emitter", "_owner", "_gunnerInfo", "_turretInfo", "_povPos", "_povDir"]; +private["_emmiter", "_owner", "_gunnerInfo", "_turretInfo", "_povPos", "_povDir"]; _emmiter = _this select 0; _owner = _this select 1; From 85e5293c37ac85fc864667efbc7e9f25d390c0a7 Mon Sep 17 00:00:00 2001 From: Glowbal <thomasskooi@live.nl> Date: Sat, 18 Apr 2015 19:59:41 +0200 Subject: [PATCH 159/257] Fix settings localization is done by the server instead of client #744 --- .../functions/fnc_loadSettingsFromProfile.sqf | 30 +++++++++++++++++++ .../functions/fnc_setSettingFromConfig.sqf | 8 ++--- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/addons/common/functions/fnc_loadSettingsFromProfile.sqf b/addons/common/functions/fnc_loadSettingsFromProfile.sqf index 69d86eac98..1817e2f40e 100644 --- a/addons/common/functions/fnc_loadSettingsFromProfile.sqf +++ b/addons/common/functions/fnc_loadSettingsFromProfile.sqf @@ -13,6 +13,29 @@ */ #include "script_component.hpp" +private ["_parseConfigForDisplayNames", "_name", "_isClientSetable", "_isForced", "_profileValue"]; + +_parseConfigForDisplayNames = { + private "_optionEntry"; + _optionEntry = _this select 0; + if !(isClass _optionEntry) exitwith {false}; + _x set [3, getText (_optionEntry >> "displayName")]; + _x set [4, getText (_optionEntry >> "description")]; + + private "_values"; + _values = _x select 5; + { + private "_text"; + _text = _x; + if (((typeName _text) == "STRING") && {(count _text) > 1} && {(_text select [0,1]) == "$"}) then { + _text = localize (_text select [1, ((count _text) - 1)]); //chop off the leading $ + _values set [_forEachIndex, _text]; + }; + } forEach _values; + true; +}; + + // Iterate through settings { _name = _x select 0; @@ -34,4 +57,11 @@ }; }; }; + + if !([configFile >> "ACE_Settings" >> _name] call _parseConfigForDisplayNames) then { + if !([configFile >> "ACE_ServerSettings" >> _name] call _parseConfigForDisplayNames) then { + [missionConfigFile >> "ACE_Settings" >> _name] call _parseConfigForDisplayNames; + }; + }; + } forEach GVAR(settings); diff --git a/addons/common/functions/fnc_setSettingFromConfig.sqf b/addons/common/functions/fnc_setSettingFromConfig.sqf index 347320edec..3a1b6fd055 100644 --- a/addons/common/functions/fnc_setSettingFromConfig.sqf +++ b/addons/common/functions/fnc_setSettingFromConfig.sqf @@ -75,9 +75,9 @@ if (isNil _name) then { getNumber (_optionEntry >> "force") > 0, _value ]; - + //Strings in the values array won't be localized from the config, so just do that now: - private "_values"; + /*private "_values"; _values = _settingData select 5; { _text = _x; @@ -85,8 +85,8 @@ if (isNil _name) then { _text = localize (_text select [1, ((count _text) - 1)]); //chop off the leading $ _values set [_forEachIndex, _text]; }; - } forEach _values; - + } forEach _values;*/ + GVAR(settings) pushBack _settingData; From 54a70f26b1e37d5d4ba553aab4153d7377dee6d7 Mon Sep 17 00:00:00 2001 From: Glowbal <thomasskooi@live.nl> Date: Sat, 18 Apr 2015 20:06:01 +0200 Subject: [PATCH 160/257] Moved to own function. --- addons/common/XEH_postInit.sqf | 1 + addons/common/XEH_preInit.sqf | 1 + .../functions/fnc_loadSettingsFromProfile.sqf | 29 +---------- .../fnc_loadSettingsLocalizedText.sqf | 48 +++++++++++++++++++ 4 files changed, 51 insertions(+), 28 deletions(-) create mode 100644 addons/common/functions/fnc_loadSettingsLocalizedText.sqf diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index e470e91c95..a5fdb5bd76 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -4,6 +4,7 @@ // Load settings from profile if (hasInterface) then { call FUNC(loadSettingsFromProfile); + call FUNC(loadSettingsLocalizedText); }; // Listens for global "SettingChanged" events, to update the force status locally diff --git a/addons/common/XEH_preInit.sqf b/addons/common/XEH_preInit.sqf index b5382d0b5e..5cb3aedc44 100644 --- a/addons/common/XEH_preInit.sqf +++ b/addons/common/XEH_preInit.sqf @@ -119,6 +119,7 @@ PREP(loadPerson); PREP(loadPersonLocal); PREP(loadSettingsFromProfile); PREP(loadSettingsOnServer); +PREP(loadSettingsLocalizedText); PREP(map); PREP(moduleCheckPBOs); PREP(moduleLSDVehicles); diff --git a/addons/common/functions/fnc_loadSettingsFromProfile.sqf b/addons/common/functions/fnc_loadSettingsFromProfile.sqf index 1817e2f40e..7cb99e3400 100644 --- a/addons/common/functions/fnc_loadSettingsFromProfile.sqf +++ b/addons/common/functions/fnc_loadSettingsFromProfile.sqf @@ -13,28 +13,7 @@ */ #include "script_component.hpp" -private ["_parseConfigForDisplayNames", "_name", "_isClientSetable", "_isForced", "_profileValue"]; - -_parseConfigForDisplayNames = { - private "_optionEntry"; - _optionEntry = _this select 0; - if !(isClass _optionEntry) exitwith {false}; - _x set [3, getText (_optionEntry >> "displayName")]; - _x set [4, getText (_optionEntry >> "description")]; - - private "_values"; - _values = _x select 5; - { - private "_text"; - _text = _x; - if (((typeName _text) == "STRING") && {(count _text) > 1} && {(_text select [0,1]) == "$"}) then { - _text = localize (_text select [1, ((count _text) - 1)]); //chop off the leading $ - _values set [_forEachIndex, _text]; - }; - } forEach _values; - true; -}; - +private ["_name", "_isClientSetable", "_isForced", "_profileValue"]; // Iterate through settings { @@ -58,10 +37,4 @@ _parseConfigForDisplayNames = { }; }; - if !([configFile >> "ACE_Settings" >> _name] call _parseConfigForDisplayNames) then { - if !([configFile >> "ACE_ServerSettings" >> _name] call _parseConfigForDisplayNames) then { - [missionConfigFile >> "ACE_Settings" >> _name] call _parseConfigForDisplayNames; - }; - }; - } forEach GVAR(settings); diff --git a/addons/common/functions/fnc_loadSettingsLocalizedText.sqf b/addons/common/functions/fnc_loadSettingsLocalizedText.sqf new file mode 100644 index 0000000000..280a1e9907 --- /dev/null +++ b/addons/common/functions/fnc_loadSettingsLocalizedText.sqf @@ -0,0 +1,48 @@ +/* + * Author: Glowbal + * Parse all settings and load the localized displayName and description for all text + * + * Arguments: + * None + * + * Return Value: + * None + * + * Public: No + */ +#include "script_component.hpp" + +private ["_parseConfigForDisplayNames", "_name"]; + +_parseConfigForDisplayNames = { + private "_optionEntry"; + _optionEntry = _this select 0; + if !(isClass _optionEntry) exitwith {false}; + _x set [3, getText (_optionEntry >> "displayName")]; + _x set [4, getText (_optionEntry >> "description")]; + + private "_values"; + _values = _x select 5; + { + private "_text"; + _text = _x; + if (((typeName _text) == "STRING") && {(count _text) > 1} && {(_text select [0,1]) == "$"}) then { + _text = localize (_text select [1, ((count _text) - 1)]); //chop off the leading $ + _values set [_forEachIndex, _text]; + }; + } forEach _values; + true; +}; + + +// Iterate through settings +{ + _name = _x select 0; + + if !([configFile >> "ACE_Settings" >> _name] call _parseConfigForDisplayNames) then { + if !([configFile >> "ACE_ServerSettings" >> _name] call _parseConfigForDisplayNames) then { + [missionConfigFile >> "ACE_Settings" >> _name] call _parseConfigForDisplayNames; + }; + }; + +} forEach GVAR(settings); From 852b4df61df411717f4fbfe057f90af7a31b2398 Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Sat, 18 Apr 2015 11:16:18 -0700 Subject: [PATCH 161/257] Settings changes. createVehicleLocal derp. --- addons/medical/ACE_Settings.hpp | 19 +++++++++---------- .../functions/fnc_handleCreateLitter.sqf | 8 +++----- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/addons/medical/ACE_Settings.hpp b/addons/medical/ACE_Settings.hpp index 51ff72f465..a4c4e8dd04 100644 --- a/addons/medical/ACE_Settings.hpp +++ b/addons/medical/ACE_Settings.hpp @@ -73,11 +73,18 @@ class ACE_Settings { }; class GVAR(allowLitterCreation) { typeName = "BOOL"; - value = true; + value = 1; + }; + class GVAR(litterSimulationDetail) { + displayName = "$STR_ACE_Medical_litterSimulationDetail"; + description = "$STR_ACE_Medical_litterSimulationDetail_Desc"; + typeName = "SCALAR"; + value = 500; + isClientSettable = 1; }; class GVAR(litterCleanUpDelay) { typeName = "SCALAR"; - value = 1800; + value = -1; }; class GVAR(medicSetting_PAK) { typeName = "SCALAR"; @@ -124,12 +131,4 @@ class ACE_Settings { values[] = {"$STR_ACE_Medical_painEffect_Flash", "$STR_ACE_Medical_painEffect_Chroma"}; isClientSettable = 1; }; - - class GVAR(litterSimulationDetail) { - displayName = "$STR_ACE_Medical_litterSimulationDetail"; - description = "$STR_ACE_Medical_litterSimulationDetail_Desc"; - typeName = "SCALAR"; - value = 500; - isClientSettable = 1; - }; }; diff --git a/addons/medical/functions/fnc_handleCreateLitter.sqf b/addons/medical/functions/fnc_handleCreateLitter.sqf index f6bd821831..ac3ce5da5c 100644 --- a/addons/medical/functions/fnc_handleCreateLitter.sqf +++ b/addons/medical/functions/fnc_handleCreateLitter.sqf @@ -2,15 +2,13 @@ PARAMS_3(_litterClass,_position,_direction); private["_litterObject"]; - - -if (isnil QGVAR(allCreatedLitter)) then { +if (isNil QGVAR(allCreatedLitter)) then { GVAR(allCreatedLitter) = []; GVAR(litterPFHRunning) = false; }; -if((count GVAR(allCreatedLitter)) <= GVAR(litterSimulationDetail) )then { - _litterObject = createVehicleLocal [_litterClass, _position, [], 0, "NONE"]; +if((count GVAR(allCreatedLitter)) <= GVAR(litterSimulationDetail) ) then { + _litterObject = _litterClass createVehicleLocal _position; _litterObject setDir _direction; } else { // @TODO: We hit max litter items, remove a few of them to work with what we have. From 43dee5643fb47b170577889a7eecbac90d851506 Mon Sep 17 00:00:00 2001 From: PabstMirror <elephantisaterriblemascot@gmail.com> Date: Sat, 18 Apr 2015 13:20:10 -0500 Subject: [PATCH 162/257] Python3 compatibility: parentheses for print --- tools/search_privates.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/search_privates.py b/tools/search_privates.py index f3fbf60c10..6445a24dd7 100644 --- a/tools/search_privates.py +++ b/tools/search_privates.py @@ -92,7 +92,7 @@ def check_privates(filepath): private_output = private_output + '", "' + bad_priv private_output = private_output + '"];'; - print private_output + print (private_output) for bad_priv in missing: print ('\t' + bad_priv) From e54c68f7f905c490f8f23d1c07750970aba85467 Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Sat, 18 Apr 2015 11:37:06 -0700 Subject: [PATCH 163/257] handle cleanup --- .../functions/fnc_handleCreateLitter.sqf | 42 +++++++++++++++---- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/addons/medical/functions/fnc_handleCreateLitter.sqf b/addons/medical/functions/fnc_handleCreateLitter.sqf index ac3ce5da5c..b46f4397cf 100644 --- a/addons/medical/functions/fnc_handleCreateLitter.sqf +++ b/addons/medical/functions/fnc_handleCreateLitter.sqf @@ -1,4 +1,8 @@ +//#define DEBUG_MODE_FULL #include "script_component.hpp" + +if(!hasInterface) exitWith { false }; + PARAMS_3(_litterClass,_position,_direction); private["_litterObject"]; @@ -7,15 +11,37 @@ if (isNil QGVAR(allCreatedLitter)) then { GVAR(litterPFHRunning) = false; }; -if((count GVAR(allCreatedLitter)) <= GVAR(litterSimulationDetail) ) then { - _litterObject = _litterClass createVehicleLocal _position; - _litterObject setDir _direction; -} else { - // @TODO: We hit max litter items, remove a few of them to work with what we have. - // Basically, we should just start FIFO'ing these +_litterObject = _litterClass createVehicleLocal _position; +_litterObject setDir _direction; + +if((count GVAR(allCreatedLitter)) > GVAR(litterSimulationDetail) ) then { + // gank the first litter object, and spawn ours. + private["_oldLitter"]; + _oldLitter = GVAR(allCreatedLitter) deleteAt 0; + { + deleteVehicle _x; + } forEach (_oldLitter select 1); }; -GVAR(allCreatedLitter) pushBack _litterObject; -//GVAR(allCreatedLitter) = GVAR(allCreatedLitter) - [objNull]; +GVAR(allCreatedLitter) pushBack [time, [_litterObject]]; + +if(!GVAR(litterPFHRunning) && {GVAR(litterCleanUpDelay) > 0}) then { + [{ + { + if (time - (_x select 0) >= GVAR(litterCleanUpDelay)) then { + { + deleteVehicle _x; + } foreach (_this select 1); + GVAR(allCreatedLitter) set[_foreachIndex, objNull]; + }; + }foreach GVAR(allCreatedLitter); + GVAR(allCreatedLitter) = GVAR(allCreatedLitter) - [objNull]; + + if ( (count GVAR(allCreatedLitter)) == 0) exitwith { + [(_this select 1)] call CBA_fnc_removePerFrameHandler; + GVAR(litterPFHRunning) = false; + }; + }, 30, []] call cba_fnc_addPerFrameHandler; +}; true \ No newline at end of file From ca74ce721d8eb61aa7278bb69df78a1f8a3ffe11 Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Sat, 18 Apr 2015 11:48:44 -0700 Subject: [PATCH 164/257] Use cleanup settings, and force server TTL on the events. --- addons/medical/ACE_Settings.hpp | 2 +- addons/medical/XEH_postInit.sqf | 2 +- addons/medical/functions/fnc_createLitter.sqf | 2 ++ addons/medical/functions/fnc_handleCreateLitter.sqf | 4 ++-- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/addons/medical/ACE_Settings.hpp b/addons/medical/ACE_Settings.hpp index a4c4e8dd04..b42d5bc5a6 100644 --- a/addons/medical/ACE_Settings.hpp +++ b/addons/medical/ACE_Settings.hpp @@ -84,7 +84,7 @@ class ACE_Settings { }; class GVAR(litterCleanUpDelay) { typeName = "SCALAR"; - value = -1; + value = 0; }; class GVAR(medicSetting_PAK) { typeName = "SCALAR"; diff --git a/addons/medical/XEH_postInit.sqf b/addons/medical/XEH_postInit.sqf index b4d7d30d7a..9b384c67b7 100644 --- a/addons/medical/XEH_postInit.sqf +++ b/addons/medical/XEH_postInit.sqf @@ -268,4 +268,4 @@ if (USE_WOUND_EVENT_SYNC) then { // Networked litter -[QGVAR(createLitter), FUNC(handleCreateLitter)] call EFUNC(common,addSyncedEventHandler); +[QGVAR(createLitter), FUNC(handleCreateLitter), GVAR(litterCleanUpDelay)] call EFUNC(common,addSyncedEventHandler); diff --git a/addons/medical/functions/fnc_createLitter.sqf b/addons/medical/functions/fnc_createLitter.sqf index cc3e32eb5e..5299fbb244 100644 --- a/addons/medical/functions/fnc_createLitter.sqf +++ b/addons/medical/functions/fnc_createLitter.sqf @@ -47,6 +47,8 @@ _createLitter = { }; _direction = (random 360); + // Create the litter, and timeout the event based on the cleanup delay + // The cleanup delay for events in MP is handled by the server side [QGVAR(createLitter), [_litterClass,_position,_direction], 0] call EFUNC(common,syncedEvent); true diff --git a/addons/medical/functions/fnc_handleCreateLitter.sqf b/addons/medical/functions/fnc_handleCreateLitter.sqf index b46f4397cf..aca47250cd 100644 --- a/addons/medical/functions/fnc_handleCreateLitter.sqf +++ b/addons/medical/functions/fnc_handleCreateLitter.sqf @@ -31,10 +31,10 @@ if(!GVAR(litterPFHRunning) && {GVAR(litterCleanUpDelay) > 0}) then { if (time - (_x select 0) >= GVAR(litterCleanUpDelay)) then { { deleteVehicle _x; - } foreach (_this select 1); + } forEach (_x select 1); GVAR(allCreatedLitter) set[_foreachIndex, objNull]; }; - }foreach GVAR(allCreatedLitter); + } forEach GVAR(allCreatedLitter); GVAR(allCreatedLitter) = GVAR(allCreatedLitter) - [objNull]; if ( (count GVAR(allCreatedLitter)) == 0) exitwith { From f5705a91e637148a45160ff4a3559c10e03056de Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Sat, 18 Apr 2015 12:04:48 -0700 Subject: [PATCH 165/257] oops. --- addons/common/XEH_postInit.sqf | 1 - 1 file changed, 1 deletion(-) diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index 2a20c0204d..27f234970e 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -215,7 +215,6 @@ GVAR(OldPlayerWeapon) = currentWeapon ACE_player; if(isMultiplayer && { time > 0 || isNull player } ) then { // We are jipping! Get ready and wait, and throw the event [{ - diag_log text format["JIP Detected, waiting"]; if(!(isNull player)) then { ["PlayerJip", [player] ] call FUNC(localEvent); [(_this select 1)] call cba_fnc_removePerFrameHandler; From d8b461db913a3ef596f5ce22a07374a0a766da8b Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Sat, 18 Apr 2015 21:17:37 +0200 Subject: [PATCH 166/257] Enabled wind deflection for grenades and vehicle gunners: *Added a new module option to disable WD for vehicle gunners *Fixed enabled setting not being initialized --- addons/winddeflection/ACE_Settings.hpp | 6 ++++++ addons/winddeflection/CfgEventHandlers.hpp | 2 +- addons/winddeflection/CfgVehicles.hpp | 6 ++++++ addons/winddeflection/functions/fnc_handleFired.sqf | 7 ++++--- addons/winddeflection/functions/fnc_initModuleSettings.sqf | 2 ++ .../winddeflection/functions/fnc_updateTrajectoryPFH.sqf | 2 +- 6 files changed, 20 insertions(+), 5 deletions(-) diff --git a/addons/winddeflection/ACE_Settings.hpp b/addons/winddeflection/ACE_Settings.hpp index f84bdeace3..b10b78db0c 100644 --- a/addons/winddeflection/ACE_Settings.hpp +++ b/addons/winddeflection/ACE_Settings.hpp @@ -5,6 +5,12 @@ class ACE_Settings { typeName = "BOOL"; value = 1; }; + class GVAR(vehicleEnabled) { + displayName = "Vehicle Enabled"; + description = "Enables wind deflection for static/vehicle gunners"; + typeName = "BOOL"; + value = 1; + }; class GVAR(simulationInterval) { displayName = "Simulation Interval"; description = "Defines the interval between every calculation step"; diff --git a/addons/winddeflection/CfgEventHandlers.hpp b/addons/winddeflection/CfgEventHandlers.hpp index 4f54a73c84..d856993322 100644 --- a/addons/winddeflection/CfgEventHandlers.hpp +++ b/addons/winddeflection/CfgEventHandlers.hpp @@ -5,7 +5,7 @@ class Extended_PreInit_EventHandlers { }; class Extended_FiredBIS_EventHandlers { - class CAManBase { + class AllVehicles { class ADDON { firedBIS = QUOTE(_this call FUNC(handleFired)); }; diff --git a/addons/winddeflection/CfgVehicles.hpp b/addons/winddeflection/CfgVehicles.hpp index 09dc1b69be..76ac0c13d3 100644 --- a/addons/winddeflection/CfgVehicles.hpp +++ b/addons/winddeflection/CfgVehicles.hpp @@ -17,6 +17,12 @@ class CfgVehicles { typeName = "BOOL"; defaultValue = 1; }; + class vehicleEnabled { + displayName = "Vehicle Enabled"; + description = "Enables wind deflection for static/vehicle gunners"; + typeName = "BOOL"; + defaultValue = 1; + }; class simulationInterval { displayName = "Simulation Interval"; description = "Defines the interval between every calculation step"; diff --git a/addons/winddeflection/functions/fnc_handleFired.sqf b/addons/winddeflection/functions/fnc_handleFired.sqf index 241fbcf839..f7090cfc2a 100644 --- a/addons/winddeflection/functions/fnc_handleFired.sqf +++ b/addons/winddeflection/functions/fnc_handleFired.sqf @@ -21,15 +21,16 @@ */ #include "script_component.hpp" -if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) exitWith {false}; - private ["_unit", "_bullet"]; _unit = _this select 0; _bullet = _this select 6; +if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false] && (_bullet isKindOf "BulletBase") && (_unit isKindOf "Man")) exitWith {false}; + if (!hasInterface) exitWith {false}; if (!(GVAR(enabled))) exitWith {false}; -if (!(_bullet isKindOf "BulletBase")) exitWith {false}; +if (!(GVAR(vehicleEnabled)) && !(_unit isKindOf "Man")) exitWith {false}; +if (!((_bullet isKindOf "BulletBase") || (_bullet isKindOf "GrenadeBase"))) exitWith {false}; if (_unit distance ACE_player > GVAR(simulationRadius)) exitWith {false}; if (!([_unit] call EFUNC(common,isPlayer))) exitWith {false}; diff --git a/addons/winddeflection/functions/fnc_initModuleSettings.sqf b/addons/winddeflection/functions/fnc_initModuleSettings.sqf index 4cf75c885a..40be14a2b2 100644 --- a/addons/winddeflection/functions/fnc_initModuleSettings.sqf +++ b/addons/winddeflection/functions/fnc_initModuleSettings.sqf @@ -22,6 +22,8 @@ _activated = _this select 2; if !(_activated) exitWith {}; +[_logic, QGVAR(enabled), "enabled"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(vehicleEnabled), "vehicleEnabled"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(simulationInterval), "simulationInterval"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(simulationRadius), "simulationRadius"] call EFUNC(common,readSettingFromModule); diff --git a/addons/winddeflection/functions/fnc_updateTrajectoryPFH.sqf b/addons/winddeflection/functions/fnc_updateTrajectoryPFH.sqf index f5f1d3861e..4c2859f9b6 100644 --- a/addons/winddeflection/functions/fnc_updateTrajectoryPFH.sqf +++ b/addons/winddeflection/functions/fnc_updateTrajectoryPFH.sqf @@ -26,7 +26,7 @@ _bulletVelocity = velocity _bullet; _bulletSpeed = vectorMagnitude _bulletVelocity; - if (!alive _bullet || _bulletSpeed < 100) exitwith { + if (!alive _bullet || ((_bullet isKindOf "BulletBase") && _bulletSpeed < 100)) exitwith { [_this select 1] call cba_fnc_removePerFrameHandler; }; From c08125e0f3c1ec3c282312cb996c4b1fbbcb0a40 Mon Sep 17 00:00:00 2001 From: Grzegorz Sikora <gienkov.grzegorz@gmail.com> Date: Sat, 18 Apr 2015 22:00:37 +0200 Subject: [PATCH 167/257] PL translation --- addons/medical/stringtable.xml | 6 ++++-- addons/missileguidance/stringtable.xml | 2 ++ addons/optionsmenu/stringtable.xml | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 6039d9e5b2..66d84c321d 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -4,9 +4,11 @@ <Package name="Medical"> <Key ID="TR_ACE_Medical_litterSimulationDetail"> <English>Litter Simulation Detail</English> + <Polish>Detale zużytych medykamentów</Polish> </Key> <Key ID="TR_ACE_Medical_litterSimulationDetail_Desc"> <English>Litter simulation detail level sets the number of litter items which will be locally spawned in the client. Excessive amounts in local areas could cause FPS lag, so this is a client only setting.</English> + <Polish>Opcja ta ustawia liczbę zużytych medykamentów, jakie pojawiają się lokalnie wokół gracza. Ich zbyt duża ilość może spowodować spadki FPS, dlatego jest to ustawienie tylko po stronie klienta.</Polish> </Key> <Key ID="STR_ACE_Medical_Inject_Atropine"> <English>Inject Atropine</English> @@ -91,7 +93,7 @@ <English>Bandage</English> <German>Verbinden</German> <Spanish>Venda</Spanish> - <Polish>Bandaż</Polish> + <Polish>Bandażuj</Polish> <Czech>Obvázat</Czech> <French>Pansement</French> <Italian>Benda</Italian> @@ -1633,4 +1635,4 @@ <French>Aberration chromatique</French> </Key> </Package> -</Project> +</Project> \ No newline at end of file diff --git a/addons/missileguidance/stringtable.xml b/addons/missileguidance/stringtable.xml index 4cc5278031..50c25a7a96 100644 --- a/addons/missileguidance/stringtable.xml +++ b/addons/missileguidance/stringtable.xml @@ -1,4 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> +<!-- Edited with tabler. --> <Project name="ACE"> <Package name="missileguidance"> <Key ID="STR_ACE_MissileGuidance"> @@ -15,6 +16,7 @@ </Key> <Key ID="STR_ACE_MissileGuidance_Desc"> <English>Advanced missile guidance, or AMG, provides multiple enhancements to missile locking and firing. It is also a framework required for missile weapon types.</English> + <Polish>Zaawansowane namierzanie rakiet, lub ZNR, dostarcza wiele poprawek do systemu namierzania rakiet oraz dodaje nowe tryby strzału. Jest to wymagana opcja dla broni rakietowych.</Polish> </Key> <Key ID="STR_ACE_Hydra70_DAGR"> <English>Hydra-70 DAGR Missile</English> diff --git a/addons/optionsmenu/stringtable.xml b/addons/optionsmenu/stringtable.xml index 660cfdb4e1..63717719b4 100644 --- a/addons/optionsmenu/stringtable.xml +++ b/addons/optionsmenu/stringtable.xml @@ -1,4 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> +<!-- Edited with tabler. --> <Project name="ACE"> <Package name="OptionsMenu"> <Key ID="STR_ACE_OptionsMenu_OpenConfigMenu"> @@ -99,7 +100,7 @@ <German>Einstellung:</German> <Russian>Установки:</Russian> <Spanish>Ajuste:</Spanish> - <Polish>Ustawienie:</Polish> + <Polish>Ustaw:</Polish> <French>Paramètres</French> <Hungarian>Opció:</Hungarian> <Italian>Parametri:</Italian> @@ -216,6 +217,7 @@ <Key ID="STR_ACE_optionsMenu_uiScaing"> <English>Option Menu UI Scaling</English> <French>Menu option: taille de l'UI</French> + <Polish>Skalowanie UI menu ustawień</Polish> </Key> </Package> </Project> \ No newline at end of file From 8dac6d3f3dbdd8b3d53b2de7be9b56eab87a8280 Mon Sep 17 00:00:00 2001 From: Grzegorz <gienkov.grzegorz@gmail.com> Date: Sat, 18 Apr 2015 22:03:36 +0200 Subject: [PATCH 168/257] Update stringtable.xml --- addons/optionsmenu/stringtable.xml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/addons/optionsmenu/stringtable.xml b/addons/optionsmenu/stringtable.xml index 946148fa79..e65087936e 100644 --- a/addons/optionsmenu/stringtable.xml +++ b/addons/optionsmenu/stringtable.xml @@ -216,11 +216,8 @@ </Key> <Key ID="STR_ACE_optionsMenu_uiScaing"> <English>Option Menu UI Scaling</English> -<<<<<<< HEAD <French>Menu option: taille de l'UI</French> -======= ->>>>>>> b2edeb01e48ce6e618b18f38f295cb5d6f0efb1d <Polish>Skalowanie UI menu ustawień</Polish> </Key> </Package> -</Project> \ No newline at end of file +</Project> From 7ac7bc3f294e8ba47d6805a7bc2c8cd70858c9d2 Mon Sep 17 00:00:00 2001 From: commy2 <commy-2@gmx.de> Date: Sat, 18 Apr 2015 22:06:42 +0200 Subject: [PATCH 169/257] eventhandler for creating and deleting cameras --- addons/common/XEH_postInit.sqf | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index e470e91c95..cff64e75c6 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -174,6 +174,31 @@ GVAR(OldPlayerWeapon) = currentWeapon ACE_player; }, 0, []] call cba_fnc_addPerFrameHandler; + +// PFH to raise camera created event. Only works on these cams by BI. +#define ALL_CAMERAS [ \ + missionNamespace getVariable ["BIS_DEBUG_CAM", objNull], \ + missionNamespace getVariable ["BIS_fnc_camera_cam", objNull], \ + uiNamespace getVariable ["BIS_fnc_arsenal_cam", objNull], \ + uiNamespace getVariable ["BIS_fnc_animViewer_cam", objNull], \ + missionNamespace getVariable ["BIS_fnc_establishingShot_fakeUAV", objNull] \ +] + +GVAR(OldIsCamera) = false; + +[{ + + // "activeCameraChanged" event + _isCamera = {!isNull _x} count ALL_CAMERAS > 0; + if !(_isCamera isEqualTo GVAR(OldIsCamera)) then { + // Raise ACE event locally + GVAR(OldIsCamera) = _isCamera; + ["activeCameraChanged", [ACE_player, _isCamera]] call FUNC(localEvent); + }; + +}, 1, []] call cba_fnc_addPerFrameHandler; // feel free to decrease the sleep time if you need it. + + [QGVAR(StateArrested),false,true,QUOTE(ADDON)] call FUNC(defineVariable); ["displayTextStructured", FUNC(displayTextStructured)] call FUNC(addEventhandler); From 283388eb7c2963cbef63cfb0a87749f0da50b3b8 Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Sat, 18 Apr 2015 22:12:37 +0200 Subject: [PATCH 170/257] Fixed a small calculation error in the wind speed output --- addons/kestrel4500/functions/fnc_generateOutputData.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/kestrel4500/functions/fnc_generateOutputData.sqf b/addons/kestrel4500/functions/fnc_generateOutputData.sqf index e7679df53f..3e392bd55b 100644 --- a/addons/kestrel4500/functions/fnc_generateOutputData.sqf +++ b/addons/kestrel4500/functions/fnc_generateOutputData.sqf @@ -88,7 +88,7 @@ switch (GVAR(Menu)) do { if (!GVAR(MinAvgMax)) then { if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then { _textCenterBig = Str(round(abs(sin(GVAR(RefHeading) - _playerDir) * _windSpeed) * 10) / 10); - _textInfoLine1 = format["%1 m/s @ %2", round((cos(_playerDir - _windDir) * _windSpeed) * 10) / 10, round(_playerDir)]; + _textInfoLine1 = format["%1 m/s @ %2", round((abs(cos(_playerDir - _windDir)) * _windSpeed) * 10) / 10, round(_playerDir)]; } else { _textCenterBig = Str(round(abs(sin(GVAR(RefHeading)) * _windSpeed) * 10) / 10); _textInfoLine1 = format["%1 m/s @ %2", round(_windSpeed * 10) / 10, round(_windDir)]; @@ -120,7 +120,7 @@ switch (GVAR(Menu)) do { if (!GVAR(MinAvgMax)) then { if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then { _textCenterBig = Str(round(abs(cos(GVAR(RefHeading) - _playerDir) * _windSpeed) * 10) / 10); - _textInfoLine1 = format["%1 m/s @ %2", round((cos(_playerDir - _windDir) * _windSpeed) * 10) / 10, round(_playerDir)]; + _textInfoLine1 = format["%1 m/s @ %2", round((abs(cos(_playerDir - _windDir)) * _windSpeed) * 10) / 10, round(_playerDir)]; } else { _textCenterBig = Str(round(abs(cos(GVAR(RefHeading)) * _windSpeed) * 10) / 10); _textInfoLine1 = format["%1 m/s @ %2", round(_windSpeed * 10) / 10, round(_windDir)]; From 454c6dfbfec05d29ec41a947a596fcd1557ffab8 Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Sat, 18 Apr 2015 22:58:23 +0200 Subject: [PATCH 171/257] Added more GUI elements to structure the ATragMX main page --- addons/atragmx/RscTitles.hpp | 35 ++++++++++++++++--- .../atragmx/functions/fnc_show_main_page.sqf | 2 +- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/addons/atragmx/RscTitles.hpp b/addons/atragmx/RscTitles.hpp index c421f5df70..6562e694d1 100644 --- a/addons/atragmx/RscTitles.hpp +++ b/addons/atragmx/RscTitles.hpp @@ -263,7 +263,31 @@ class ATragMX_Display { idc=-1; x=0.55*safezoneW+safezoneX+0.315; }; - + + class TEXT_GUN_FRAME: ATragMX_RscText { + idc=1001; + style=64; + x=0.550*safezoneW+safezoneX+0.11; + y=0.265*safezoneH+safezoneY+0.25; + w=0.0925; + h=0.205; + text=""; + }; + class TEXT_ATMOSPHERE_FRAME: TEXT_GUN_FRAME { + idc=1002; + x=0.550*safezoneW+safezoneX+0.205; + }; + class TEXT_TARGET_FRAME: TEXT_GUN_FRAME { + idc=1003; + x=0.550*safezoneW+safezoneX+0.3; + }; + class TEXT_RESULT_FRAME: TEXT_GUN_FRAME { + idc=1004; + x=0.550*safezoneW+safezoneX+0.11; + y=0.265*safezoneH+safezoneY+0.46; + w=0.2825; + h=0.15; + }; class TEXT_GUN_PROFILE: ATragMX_RscText { idc=1000; x=0.550*safezoneW+safezoneX+0.11; @@ -438,13 +462,13 @@ class ATragMX_Display { text="B"; action=QUOTE(1 call FUNC(change_target_slot)); }; - class TEXT_TARGET_C: TEXT_TARGET_B { + class TEXT_TARGET_C: TEXT_TARGET_A { idc=502; x=0.550*safezoneW+safezoneX+0.2512; text="C"; action=QUOTE(2 call FUNC(change_target_slot)); }; - class TEXT_TARGET_D: TEXT_TARGET_B { + class TEXT_TARGET_D: TEXT_TARGET_A { idc=503; x=0.550*safezoneW+safezoneX+0.2743; text="D"; @@ -511,7 +535,7 @@ class ATragMX_Display { class TEXT_ELEVATION: TEXT_GUN_PROFILE { idc=40; w=0.05; - x=0.550*safezoneW+safezoneX+0.11; + x=0.550*safezoneW+safezoneX+0.115; y=0.265*safezoneH+safezoneY+0.50; text="Elev"; }; @@ -570,7 +594,7 @@ class ATragMX_Display { class TEXT_LEAD: TEXT_GUN { idc=42; w=0.05; - x=0.550*safezoneW+safezoneX+0.11; + x=0.550*safezoneW+safezoneX+0.115; y=0.265*safezoneH+safezoneY+0.57; text="Lead"; action=QUOTE(GVAR(showWind2) = !GVAR(showWind2); call FUNC(update_result); call FUNC(update_target)); @@ -679,6 +703,7 @@ class ATragMX_Display { h=0.45; x=0.550*safezoneW+safezoneX+0.11; y=0.265*safezoneH+safezoneY+0.24; + sizeEx=0.025; colorSelectBackground[]={0.15,0.21,0.23,0.3}; colorSelectBackground2[]={0.15,0.21,0.23,0.3}; onMouseButtonDblClick=QUOTE(true call FUNC(toggle_gun_list)); diff --git a/addons/atragmx/functions/fnc_show_main_page.sqf b/addons/atragmx/functions/fnc_show_main_page.sqf index 607527a18e..ed999948b0 100644 --- a/addons/atragmx/functions/fnc_show_main_page.sqf +++ b/addons/atragmx/functions/fnc_show_main_page.sqf @@ -18,7 +18,7 @@ GVAR(showMainPage) = _this; {ctrlShow [_x, _this]} forEach [10, 100, 11, 110, 12, 120, 13, 130, 14, 140, 20, 200, 21, 210, 22, 220, 23, 230, 30, 300, 31, 310, 32, 320, 33, 330, 34, 340, 40, 400, 401, 402, 403, 41, 410, 411, 412, 42, 420, - 500, 501, 502, 503, 600, 601, 602, 603, 1000, 2000, 3000, 4000, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008]; + 500, 501, 502, 503, 600, 601, 602, 603, 1000, 1001, 1002, 1003, 1004, 2000, 3000, 4000, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008]; if (_this) then { if (GVAR(atmosphereModeTBH)) then { From 21c772aa8d36512ef84ecd9e9bf9ea808ca2125a Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Sat, 18 Apr 2015 23:14:40 +0200 Subject: [PATCH 172/257] Fixed scope adjustment conflicting with vehicle weapon zeroing --- addons/scopes/functions/fnc_adjustScope.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/scopes/functions/fnc_adjustScope.sqf b/addons/scopes/functions/fnc_adjustScope.sqf index a59095d127..d13ff57ffc 100644 --- a/addons/scopes/functions/fnc_adjustScope.sqf +++ b/addons/scopes/functions/fnc_adjustScope.sqf @@ -16,7 +16,7 @@ PARAMS_3(_unit,_turretAndDirection,_majorStep); -if (vehicle _unit != _unit) exitWith {false}; +if (!(_unit isKindOf "Man")) exitWith {false}; private ["_weaponIndex", "_zeroing", "_optic", "_increment", "_maxVertical", "_maxHorizontal", "_elevation", "_windage", "_zero", "_adjustment"]; From 365d6c81c4a0f49866505fa990bef465ca486135 Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Sat, 18 Apr 2015 14:39:51 -0700 Subject: [PATCH 173/257] Update javelin.md Small description update just so something is here. --- documentation/feature/javelin.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/documentation/feature/javelin.md b/documentation/feature/javelin.md index eecfa8844a..b253a25fc9 100644 --- a/documentation/feature/javelin.md +++ b/documentation/feature/javelin.md @@ -7,4 +7,15 @@ parent: wiki --- ## 1. Overview -Blah blah blah \ No newline at end of file +Blah blah blah + +Steps to lock titan/Javelin: + +1. You must be zoomed ALL THE WAY IN +2. You must be in thermal view +3. You must have a missile loaded +4. Hold TAB over a target, it will start beeping and the constraint boxes will appear +5. Once the beeping changes to LOCK tone, and the lock crosshairs appear, click fire without releasing tab + + +CTRL+TAB is default key to change firemode (configurable as a key) From 43e287dc0f75373b1ca50fcdac3c020ca76f5c3d Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Sat, 18 Apr 2015 14:41:17 -0700 Subject: [PATCH 174/257] Added PlayerJIP event. --- documentation/development/ace3-events-system.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/documentation/development/ace3-events-system.md b/documentation/development/ace3-events-system.md index d7c99e558e..17bd431c12 100644 --- a/documentation/development/ace3-events-system.md +++ b/documentation/development/ace3-events-system.md @@ -52,6 +52,13 @@ PREP(onTapShoulder); <td>[_newPlayer, _oldPlayer]</td> <td>local</td> </tr> + <tr> + <td>"PlayerJIP"</td> + <td>Player was a JIP player, and `player` object is now created.</td> + <td>common</td> + <td>[_player]</td> + <td>local</td> + </tr> </tr> <tr> <td>"playerInventoryChanged"</td> From bce0d8498920e244df9371a5b0f5dd638fd95fc0 Mon Sep 17 00:00:00 2001 From: esteldunedain <nicolas.d.badano@gmail.com> Date: Sat, 18 Apr 2015 18:41:36 -0300 Subject: [PATCH 175/257] Fix interact menu object ordering --- addons/interact_menu/functions/fnc_renderActionPoints.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/interact_menu/functions/fnc_renderActionPoints.sqf b/addons/interact_menu/functions/fnc_renderActionPoints.sqf index 8d4734c8f8..6ed4b41de4 100644 --- a/addons/interact_menu/functions/fnc_renderActionPoints.sqf +++ b/addons/interact_menu/functions/fnc_renderActionPoints.sqf @@ -25,7 +25,7 @@ _fnc_renderNearbyActions = { _cameraDir = ((positionCameraToWorld [0, 0, 1]) call EFUNC(common,positionToASL)) vectorDiff _cameraPos; _numInteractObjects = 0; - _nearestObjects = nearestObjects [((getPosASL ACE_player) vectorAdd (_cameraDir vectorMultiply 5)) call EFUNC(common,ASLToPosition), ["All"], 8]; + _nearestObjects = nearestObjects [ACE_player, ["All"], 13]; { _target = _x; From 41bd3cb6f506f8775db4210573f791397190a21d Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Sat, 18 Apr 2015 14:43:22 -0700 Subject: [PATCH 176/257] documented synchronized events. --- documentation/development/ace3-events-system.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/documentation/development/ace3-events-system.md b/documentation/development/ace3-events-system.md index 17bd431c12..33412aa8fa 100644 --- a/documentation/development/ace3-events-system.md +++ b/documentation/development/ace3-events-system.md @@ -23,6 +23,11 @@ Events can be removed or cleared with the following commands. * `[eventName, eventHandlerId] call ace_common_fnc_removeEventHandler` <br/> will remove a specific event handler of the event name, using the ID returned from `ace_common_fnc_addEventHandler`. * `[eventName] call ace_common_fnc_removeAllEventHandlers` <br/> will remove all event handlers for that type of event. +### Synchronized Events +* `[eventName, eventCodeBlock, ttlNumberOrCodeBlock] call ace_common_fnc_addSyncedEventHandler` <br/> adds a globally synchronized event handler which will expire events after the provided TTL, or the code returns true. +* `[eventName] call ace_common_fnc_removeSyncedEventHandler` <br/> will remove a specific event handler of the event name, using the ID returned from `ace_common_fnc_addSyncedEventHandler`. +* * `[eventName, args, ttlNumberOrCodeBlock] call ace_common_fnc_syncedEvent` <br/> calls a global synchronized event, which will also be run on JIP players unless it has expired; event will expire after the provided TTL, or the code returns true. + ### Pattern: ```c++ // tapper machine From b3b172e13b3f18668e969df34540728f04a47948 Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Sat, 18 Apr 2015 14:46:01 -0700 Subject: [PATCH 177/257] drop bad docs. --- documentation/features/feature-list.md | 20 ------------------- documentation/features/titan-javelin-usage.md | 10 ---------- 2 files changed, 30 deletions(-) delete mode 100644 documentation/features/feature-list.md delete mode 100644 documentation/features/titan-javelin-usage.md diff --git a/documentation/features/feature-list.md b/documentation/features/feature-list.md deleted file mode 100644 index 9edc405ba2..0000000000 --- a/documentation/features/feature-list.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -layout: wiki -title: Features Documentation -group: features -order: 0 -parent: wiki ---- - - -**This page will get updated soon.** - - -## Table of Contents - - 1. [][[Advanced Missile Guidanced Framework|WikiLink]] - 2. [yy](#yy) - 3. [zz](#zz) - - -## What ACE3 has to offer diff --git a/documentation/features/titan-javelin-usage.md b/documentation/features/titan-javelin-usage.md deleted file mode 100644 index 8115e6812b..0000000000 --- a/documentation/features/titan-javelin-usage.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -layout: wiki -title: ACE Titan and Javelin -group: features -order: 0 -parent: wiki ---- - - -**This page will get updated soon.** From 0bfd0840246955f958c15c04613022b9fa661fcc Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Sat, 18 Apr 2015 14:54:32 -0700 Subject: [PATCH 178/257] extensions recompiled --- ace_advanced_ballistics.dll | Bin 613888 -> 613888 bytes ace_breakLine.dll | Bin 208384 -> 712192 bytes ace_fcs.dll | Bin 779264 -> 787968 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/ace_advanced_ballistics.dll b/ace_advanced_ballistics.dll index 568e7c16db7de74c45b5a9a0b78735a3db594a49..3349bb5b38df8a69b01736e1346a576c8ef4fcb4 100644 GIT binary patch delta 121 zcmZqJquQ`Xbpa!D(Ium1X2y1AMi6EKVrC#_0b*7lX4}rp$ew5^4^$M&00c}xoC?Hq zUUM+axyb<%VgSmuH(Rl9Z?@u)oiBL4HC-*D`LSPr{wL=C)ef7Owr{-2u~-pg&Gzu$ H94nImPeCLu delta 121 zcmZqJquQ`Xbpa!@&pNecX2y1AMi6EKVrC#_0b*7lX4}rp$ew5^zi6#mC<72M0dXo2 z&w0(kFy|%*NQeO_*WPT!zP;IsLw3I4t(%{pEK%O%yVLW~b=|rC)y&&B-sD)U$P84q KJ^VMv$|L|-t0hSQ diff --git a/ace_breakLine.dll b/ace_breakLine.dll index edd00c78eb0218bb0d24ec14735be5de37c859d9..428df80092994ec765c2ee73530a7c9e4c7a216f 100644 GIT binary patch literal 712192 zcmeFa2UJu`vo<^fBMb;KDk^4F%!(*x41f~MAP7dxis&&A%o#a4ZZYSabB>rnlrdsf zR8&;dK~OPacK+wtGb2$w=e_U!*SGG%wN6cUS9NuDb$4}jb#G3a&a)+k5{X2H|1=tj zBm%$u=P1J8gH)jNl|GVBvft!VnFwj?OJ%(M2LxFU4II)xu;*Xay?YKGJS5n<S6}PE zkipgi23t38=VkrZkUo8F&CN}1bgb8T+uwg)r`t^Zf7ZSIW_?25x_8G}ZN=YCv-aV) z;rWF#6GghNGY{Z5s#nKZ&&1zuy5F@kwfXL1zWspS{^Xgp2OcgGNo%QGGW1%l4tiXI z#Gp)GX+DW0O)ilXFc6CmRltve|Cuna5Ys>zF^7NpUrCR=TIHe4K;kGBE3qCch`+iY zKT}B`VE0FvN-7bZYAWeOrDyw>S7OydBAHmqL{dK+4&xJNBC$gG#Oo%R$0*WNvLF0^ z_0KlA@5o>vcfCg+DHr>irG0COq=#)_pPs=zC6Yev*cJ5M1HWHDo8g}$riZPTOk(K` zL=RJm*r}HI&G64rB8jvepe1YvHAx_�<ZI+2|Z?g9in%stG6K72qk`_-u5Mwsv;C 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 literal 208384 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%0DW-oa!0L`}7h%jO-I(cf{G3Uut^ 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%0DLay@1l6!W&PO5K~W3goEGIzD0$zL{AsiQ%=T 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 K)WCr>@V@{>WK5v| diff --git a/ace_fcs.dll b/ace_fcs.dll index 3385e53463fc10130194216fee9e317fea4aea3d..9cef4549c76b8eb75bd9ad1e417e62ca58cb4bcc 100644 GIT binary patch delta 256546 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%0A;;Uw;ANk?W_QYiH~j@0L~#I*^KqIJJ- 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%0DIw=?~p51&R+8Q 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 Rw7z_cp8EOVefsL>e*ttb$KU_} delta 248597 zcma&P30%!v_dk9<r+J{F38|2TC_*ViC}nO^rpVkihB9-IRE~%bK88@nkTHa7XrPQC z^DNhJB4nPO|NDJ1-skx~zyE!`o@KAShQ0RQYp=ET{v4he^IT_~a7q5qvEz2f?y~Ry z-IK{{7zq_+vP%XsnTK4{JHruwnBsqB=wpj*kaUURzaM|fqQtg>qow^IBU!j0lkK@+ zBy-X*7|VKUFRW47*wk1S(NQLw@y$Ty0o?Z3KZY`Ea75iPlzD47zk~BevOU7W8dWPb zj2=8O8l879VrUL~N&F<(Hk%d${j_F0{=BBK>ZiE3Oy=EiQ2*%u=<yB)h%%CC?C2_X zmD?FWwagg3<Hhm7?g7&VHcMO$tPB{ZJV(q2MmA0@L3}Q+TCq<EnwWqr6o1YaEw#!N zMoxONl9!9MWhEP31X)SUTeS8y0+{#-gvkCnvXW+R(6Y=y-#LE+SxMF_pleR(%1W}U zgSw<xUsm#NFIpR)%4H>&@&T^y18Qplkoyp5+cPp*$=AyO^_0+(c@3>b^`K?LEd}r~ z##*wHh3ObQ`2<7~DJ-i1)cXQJJ$H=xtsS^^BS5HL6T_{&0}U0*0Gu8G%;QKE51=*m zHTZG{0ln7{t$OFsH_#ngK7YnQ+qa=_Q#wFk7bw-n<P;@?+QGs_cObII0Ie~$U=&6H zU7*4g?;b|0xih${P+`RiptjtMzJNruqy~`4a0g-PN%Ym`8ok(r*28OPt$Yau)+Iny zR#4!#6|H|L+p99blL*LORXhOW<#;T>*yaF{w=ugkQ-Fk103#2=^s!9=mcPUxb*;ec z@;CT8*rIR99H{B}8B^3RfUfBt7$mJ0T7Pfh6zhU|zz68L>0rLjrCojy=$2;Sv($pB z2E{T3>~98cw_6}T^+v0V=rscjqW+9lHy<!A`HDftt$><0WVy2teL*&0d0P_-eKJ5u z4T6GIc4$TBfw=}JGT07%HQ1ND2VlW2tjGAa7(HPR6f|~3pQ7DCGU`FsoUKqD*BGFM zBS57q;AyrEJjy5l=gSyrW+n6)T?N>E5oj&0jAtQ+i))XO?2n^$dNCJ06X-3<_PGyc z-*x~Avmvo66r-<w4)qgj1FU?c0QWpD&5&2%2`A`7hj8KUq!vKou*NVjnwx6CN#tw< zc-{h_L0#zbpc{9o2=i0Uq3>foi1p3^bCV2!(B9}9G7GJki_koGIDpqqD4ovTt<qWx z{%3!b`X9p%k+xo*0bL(W&{tv$IsHaJKRG~+Zxw(AmH@q9V9fjf0PHUS%jiQGGm(9x zDgeFl5?bPRqZRH0+0t&1FgSu%`}b(wPXds?0L!)<h^<mA1B|Hy(2z&0PFFClB+t_G zFw=ovSIFrkQft^;w8l*WHG^A{HV@2=Qqg+S8cT6xKa5tNfY?W_Ou}JERPhJPTMvNx z8^AZLIY2v(QJ{;Kp+XP-cb)4aTm^o17r=#u03~~&X09I?S6D*VY5}_5vaeDsm`hzL zOgHFt1!&|Im_L%6bDQWL8-U3NA-i%D`j%S(MBKncjxlPiErgZVEWvX522e$6D&VdI zz^&dv;mn-?jhlj}s|~>L44^w(L%7)+?9lcn0GV~5Fl!$Or+1*W<_Tmir=b;B33eo0 z0EqL3(I!o4c~yW%N6?o^pLClCvD-W^>5MpCb}0Zq?t=d2H0~QsIM)j3mfJur(gBQW zL%3QdS_hti&^-<;Rk;Th5cEs#^JE&-g{gJj(6^)>z>3E}yS)L>KM&c;$O0wpDEqnu z68Sm+9w$L)4OCH5D+Mcc<`UGz2Vizb{6JoH8fd~b*yb=FXep!gol<Cca0`UHML^Hq zg@zkbz;eA0&<WhSNpu%;ee@LsgIbAa<KbMWzhVuRF}CQ_O9Wp~BKijY4FjhtsCu$J znyb#Cb?PR7=_(9jUjxDlE~eg9m{oWPS|@RjOB4`(lMI6E8L*7w@gJ&2pKWjSnHK>~ z{Rk}~31Hqd6<|+wfQ46}#oP%?kxBEXJAhfIkpTa*sS4E@U(h*!AQ*LOgJ;}RaCcyW zS$qLhRV7e$0zh!F0a(gY`1vfTd)vT--b`w38-oz_46TOCVa(S}pz1Mxe5``W#b$!f zU^qa`KhT`k2?|be>l7CE0e5BqEUg9&H%^1Q8INKhGx6k(Xl<nF1I9pP;wkWDc17Q? z3!rWoi%G~CkaD)e%G`Yz_|+vSux<r{k1<+j>VmH*57e=Y_^){wQe&Xtco(qDvsM5P zo&fy17eGl*FnV&8t4@Wkhw*4xi~zxviNBc{z_~rp+SC@{)+~Sr6TlbP9lEyiP#PIS zLG*f{1O5hxQlf8Jb%>qXhS4WX1X#2XgoKs={oyl;l7|dh3%M5QX=pVeca}9&H@J;y z4@`ncKXR9G9p`KTx|35Jc?Q(4Bcb1v3l$(oYZG_!%5@MN7647y2eGWT(0qC=TC*6X zt*L4h^G3syAb2a7D);zc%=%Rz?6MBzIj%s@(DgFrf>B8~t3t<=F$7<}0(AUYfa-qW z%i9aS&s?(Cj5aNAVD!BdYrcUj4*?!sgyyX202{&pGD@M!jO%-2JN@q!$%$vssa*)U z8>|re-h|c~{Q&lJI%lo{G=2(QDjDUNoIaBJU<p9zYRshYD8$0)6=fn=LJos4XEyZ7 zsNiNe(4Ndt`+@-mt$@U&?a-%qwH>&;6=tGfq<zDAt~?8HtpNyoJ<&I}D}+B@gqk)d zA+pyD`ejo9Qp`c^KNrj$)_{4<F|c$q2ccjmBzBGkdVe5VEBArgpLwrNWiStJ43?HX zKxooR0fir!T$gh7hBC%%mLMl)fn0V2+>r+XPQC|vdL8%%YLXg<^U8u7{H20~6$^{( zXtX9z0rU7MFpn<*+M*_acM-%qnJq>!@M@yy@JZ;i!fGi>#u}nIaVIE~LeWZRRISB9 z7BIRWSqJo65)`_yjyb&#W10>`UsfG}7aS>PEC`<TqrPqcXSwnXEy3p^$MU$`g>AX! zV0lvsz`i@i`0Fe{u`|XnQJev{)p<}>$3vmXF)Y&Izd`=YFnY5McyhU-l{bUhOAnx? zHV7{_Ln6!z`U6g(&#VJjdiw%ww+7fe5_Z(=3%<bm;H%1Tr56ogkPm`hJ_t%(ik)En z=jMRU$6p}VKMg!d8(_jvW@|A8tud@B^I2^4XJ1uTNKr@}B^D0>b{+#kkqd?SPr=;i zD!{Hr=xdq{=GkLFIIP4B*ImGRyjzUELT24O`i!h6P(^GM20m4S&MGb#>0vbp_hvNn zVGXp8{!u>&j9Y22T`XGtQqb3e`6i$C+U|j@j5YZB)c~hxpj~sQszSc=OR@Z6-!R6} zb5Lr=fu{9^MbZ<r#3RhV6-=R~@e;H?Zv&-v3kaVM26~!X;=wXCgEx$hWuPj}Vb($e zph29|jM`w4hk{V>Hx#~Kg_gkMX~5&T;4n;hvI@+jn*&up04ma$!Ms}>e<6earSkMn z<4Lkh0$J}X$gU<3*}`HyZw*?57;~R40zqV{GdTnx-3q{P1Z-2YQk%=$$y<7lAuVsU z41}$90pbIIdYS{+W<tUEO!T#(Z?!jq<)T6kIOha(8Ss7<k_WrSsL*$97y3q42dK>$ z_D>c>`t!2Vi)kgJ1bkKu`@u(`u$?ZbX%*1=Vh`q_JZwHE0FJGMQt>S$dJO^LfDJ%0 z*P~5kfOcoK;eQLZLas$A7~}T?4CJw!&$~tjlT$yQ8Ur4z&^WZJGaAfy0lN7)Mz6|~ z*`ATsdOSeJ8i2RFye*2sWb3fDtH8;oUj^TxF_86QZjEt7E5QbR3TFYvO=t=HAaAJ) zY_Sp9FVV934Dzhw5MKER)T7+HkF06Ca*8(ppykAsfBgtxaUl3w^H9!P3t)E`eUo`3 zI?QurGZ?MpLl{Ul2-E^6fFxdP4Ik0JgSvtIArGDD^r7GZ=u<fZxG{#gb6|fi=Dw<6 z*{~ffttvs++v)&^H-eBC1;VDwXf-C^1m>1EbhDZ){d%>9g4wkJE{;H7zph{&8HCAo zbZ7p3OaHUV1b&kzM0x<NSv=e4cA&4r0)TPF5H>4CYjrOOPg)7SUYEd<z*IJPI>3?% z06vU6+gOjpZw7N5qwh*902e(-RK5e2hg2}48bBhRS4vJOm=*SAV9Y7BtBR)ZWR<4F zJY~w0?-B?QejjQYe}etayi+Y)4ly-nJi7=Zo$UzltP2RXboYL|UaF^qdD~csJ>wb5 z<|9L|!x%`HFCI><!16kc`S&>E)xsPo+_)L7IW)5)YcWHH)+^nh^(JlWr~@_8E5Q=N z2Mjff^Gz(Jy3*87qd|4G23qU~W8U))uWN?B_S-<M-xaOe0U&h04W&!CITPrFiVLht zB3U+d;LFJX27<%-0CwDWbwvmd&<6U_5x|^Tac(5~wmU)psUu)9H-+rp4<Oj3Lg8{# zoXq|_t-U@#b5$Ox1si~N<V9^!G+6GAg4pbQv`)QXF&$wBijN!gcV}E{$PILpLw}29 zV07OK)eqbNKKOwpO+uf|MDRVfKwoH6sIli^@Ma|#vL3P%27zT3(L@GImpeco(S;_m z*dIF{gx-uKM{ztAB`$Q33@b1mXR)qx0qE_KXf@*{`wO2p6by3%j$&fd@_`QHmQSG8 z$7xX0l96g-9Kaebu-6bUH{}^JOvXsf$ajlonTb%4!80^;7qr~G4MKt<74Q(lZ8u-& z3N{BihKF=6-zm<n1tE)-vNiqBkGi~gLrmpSkD10**bd9DN@#t~BVPenrl+EnNfUZ8 zXP!*MaJM<!D^B~+B~S}kAj~La{@v6XJVRKG9_<Fos&wc&I|r@huR-X@J4s&(ck77O zLte5QGP-Ze2dGE0YBmCM_kB=cdk!tHics)O8*|sAZE=jbb&i4>T!;m@&y8?u3s6@8 zpTc4!Oe#78@YWWcM|lonmqYcO6ad*$pldlu{7SIQ7SWee3&1fR!u8LiPrn1k3_gpI zq-Pj&(`5{@IU8V@3@kf%1=?N#)YD7Byf+uJ9l4!{SnSUjLyxfE4?OJvc+NcoI+kx+ z@)kfV7eGyKUaXAo!33+j05#$<TvKL-!OV89yoEK6fmp|lP^hF<2QFxX&S+h%3yF5j z>?e|->MiZ?Aj?!1%2NyF@IT=kc#2pAjx&K=Y8DiRtOgpi66i6O@`LCB-RVP>HiJ5n zb<wt&(9oYzPiF}Tf8C}XU!dyT28?ucEEJ?g0({#I*-UG&gmQ<v^G^JlMPKC==#wjW zK9e>=#EI8{Rjh)OxZYj&0`1Jm)o(SZ&P*`FGBI3(HURei(9oWy`Z7$Mi$b4Gb%0KV z03#XtoXSAm&RXxz0w}l<h1SVqppK~wS;H@&`fuR-OD!g~mk+Ttw?9JH#qMBy&<Wt$ zB&gAZV0YfpX7NpPA<vI%2cT7$;|B4qFP`On3QbL6rp(NM{?N6MeaT=vum-3ddAIPS z7Yoc0CfQ)wMbB0QtDvD_F+dg0bJ=KU2>T0i-FHI6LB_<v?;$c}B+y4m04;e{ir5Pv z20%jw1N6{#(C@`{GiByc8Dch78S6$#kcerEzW7_9W_Cc|@cEF)X3>{iSpi0sKZfhM z6_i}sI%zFhv0CUe=S&73f^8NQK2ih&kI~^2?6ag_S*Cz+hXqrSfRS={K%dJ_h`Ar7 zK03r6UT;Rbpf6@M)KBgYu$sqgc^^IapBvvja!3(&L-;YbD1uL2r&-tzVeDAF4r(g# zS#lG@;p!n!xRPa!M6pb+;Pd>snQ;<sMqaJi&u=p(^to%-YH&Goq8MW_j|Gj}y_{ zuquiWbe<&7Sw29$UIg-1T6kv%(Cmt^NQ=kr8z0bAJQg380#up-u`#b;(fbiV%Nk($ zkN1VxRbI>AB!F;uBNSLs^PXf7u6sbD3Ip#sI>|U5uB&P-_@8e!8F}w~T>|dW#?UpM zkF`!*xZb`1jo*NJlL_qpdFUT_5E2D+*3UG*=mD6=UI4*U3Bo8wv}!zYRaySL^u-*^ z(m~xj6spv|V4gJwegBLCpW<2s)U?(CckxZM8W^IbT>#4c&oJiEFrZ_&dQCXR-Ml}A z4+D5)3ZTz=#E^HpwR~kTZVlD?uhCM=z}zAk!#!O9aF<U}_bx%p*OLHu4IumM3R-6@ z>3?-N(yZ&~oVpdljRvE&F&4VAG9lN4C3zn%m(@^!106tJngXq^JdclS0rcT}nvp%I z3j~0<40CH)H<y-y**OO+uVTS6RR<t}7d215)D6U;RFpho)EiSD2G2ACSiqO#ItI{i zWDN)vH^Pp(JJ8qoGt?BH1{g61YPxaSUR;#({XzAYKuBd-bAl@$^%wN3=R<bI5ez3; z0F7sy>CMrvoB(*33{<Ju3Cae#V((7Cx1NN^+Iav1bMjRtoyL_gh&f|`Nfwskf)VuR zwFgV9%4pdw1YhS*;H&=_U?>CQbzV6ut^!pt5uh#6;9D4T2H$Q5>wquhF-(0hp8n_D z2hGW=!E=GN&B_!oF6VjwOB<kwPIH}e-_6*sX0UHi5rl?Z87~un>o~_H(OhpAK1QB8 z4Pe5j3oAodK80y&4p(6o7jGKB5X_wf=Ee`vr+Bsn(3`99g=g;w5A$^vnF&mvGdZzd zD}bKl<4VLF03%+umZ?Fw!O@FZ5rlG&{l1~KjE?EV5?AxJ$e1_UGDduVe%Cq5FHNI+ z1Dv&igr$uFy1Lc_?#2V|L0{X+?DUw?U<ZSJ;CP@fCA4Pcg2m@L<lG5D2LrTz2fmLi z*o$_7T7^EjY6c{hdI2n^<5VQ`o4OdI_yqde9fhh8J_S4jswgSqI*yb9U&_(D@tr9p z9&%-rbBh7t3(J%J8v)kwY%6$#ORHhB)fu@Z3Fz&L0C}v>bh$Ei9{`r}+lCIoZkFzL zTu^H+XcYOHQvE#zzhlZ)12<xAHj@v@7JRyF&kMEF5wtq<tn}dVG+qE>w(J0?stsUr z3RFv7*r6K@F-NB3y=~EIF$t>X+CgFvzvfiq;nmb^ZseQ9`#~ZL*^ps6@V^$v!Tplo zZ{p%$Ofsw1434yq39);BpbNP?C;2HM^9zJ)vgA5{2x7Z>fbe(&SPrm&e8Ei&WzpJ} zYjk)5N6J8-O&M73v*Jh(fY{%>_51RDL18i)@I5b(x`WX=K)GZdokPs93$8)<Aa4c6 zOh5Aln6P&pW_*<4_WnMA8cc&74uH8K-(=(qVaM&`U~bq8Xyz)QS$s4vXahcTo}q=T zECb`AdBRrKe{ViPVE{wsgMR3g@rZ@*0O7_8fC0xreH#h;r?Q&Ur$gN54dWo=<V<g9 z?Zh3r#DMyo*OnlD%?Ta{)RN~hXB{N^EI><O2(G}QQkVypFVVdJ)*|H*3;3$6Uqkq2 zFpxQUE}tZho5HLjX49if0j@A7?_>qpiry5l0uqB5kdjJ3_`p4=$lFzVe}EB}01P<o z9()jK$7@{l8W`C3GYBgw@ka3#6ytRO+n+*LI0JSarXMwHmJ@fuW6fC9<u$Bs!|2|H zUu0y>Kz+!7abOU{8qvS?_}yVAeeD3LXU?F{oukj(2Z`D*Kuut<8Mh3eTMqPHy3YD< z9-AY0V|37kTpH`>^I;I_ErKy`ANscN8-FG%ngiVEkGxq{evj7uHlUUmW6Y3nSUD{b zvU%<R8_htSUmH~W$)L7MK;KqgkY0}gdU7gS@Ay2b_{`uY837z+VKIx|WX*4F$-}|; z@ght(#@psO#_#ux-|e{NhK>LQj3V<)&}YxfVGgg`IYiG;OA6nbM{@3OQULaG69<uR z5)Yg|*E~f_0UIXkLnMk{*m^R~59apzje~_ld6&s*0w5g(!Syouh8zKU@i0I`5okEQ zLYrQ_r#%+MViEd0<p8q9VEOtMeG5rAZ2`V^S3y|C8}mo5^prmQ{edR0Mh*r~GFQ)^ z!FfHeUBy{oRPZEKWQrbl5yC<3!IDWgHep<|-T+|5Bj(By@fJUG2wbDZ&!Huqm-c$g zff`V0>uIn^#<!sh-$3ZWji{?wiJe{V4gA42XzfbMr1co&^nRds)6x3M7s*X80V24I zjzd9^N`da6BhBG)`pA!bH|9ZMSqMO3O^i8k4^-{pOU7s}-YnLW(s@v8v8svJ1<02( z{zXQDyp*x2Q)}o?76CSJx0PJ)w0<DW;lXM%849E5aPqG}PjEjw@p`t07ImVpJyO9A zvrnLYIs(}RyjN||l#K@9GiBLp#+%462A{w9Jw;)^3&UMJ3l070+OwAfWJLo6-voD` zTHscG0HYgU22S$R;rwc7?dI%KxlN{vpkR?Tfaw}g3wRD}=yiQr^)+B|8=MC;{tj%r z!wa+tqo^6TX=9cGYGTaM*)$o9Z&^Vu{|ZV0-|=T=0*xIA;S?_LV<w#)%z(2hlO-N4 zZH}Js8m+O^@{vJ%^iqgrUq@>R<CxtVp#AoMy7fM^)Zj`-+W@S^qky6$kWN{J$tsXp z_XBS~IxOW6dxQIB3ka`dF2B4Di}{?d>z(-c=E9#3%;k;9*^~>g9)vElA(l-$66S(s zP%99wy#YbSm#KrBffk*|K&fg_FKkC^pn~`r*8Rs8L$1+gDC}2=zMc&rvW1m#b-vi% z%*AkLmjm1=17RyGt9~q|qZdM~Ba@`O2B`NufcEA$23_t|;1=kM3`XB3{`w}Kt*<;5 zub35Ut>gQP=Q1!R^K$f+q4g54h;8`zTf~LCw-&nMS^i9Wgh7hW0lo4!jpiwjS`Fsc z55aedfk0$>c+TtgoxYqBtG??@XYqWq)8@Rc^I^B{D^NF&LZ8BnDQcAy)QmI+xX*iB z?K!YD#S%ONd3Cx&zr8*RglW4WJenyZP6U|5Z;zGju@niVAXssBIWxd~aR<<9RRAXK z1YZMYvS`M{*L*A6rv#sOJV4jQ^uK3x%9r{ew_v?9z6Ze8l@Mu0|8`_RwQK}6&v@O5 zFG9fB!#NG$IXlW-Ol2xC=1Af~fZjS#@FWc_OP;3SVE`^~Ae*`!gk79)1D=v)SDAm; z)`9&O4+BrG2+))DYgaw!zeum%m;w<SUYI5ghlXNiP75u7^&3DP-Wb$=tTR&Lp><*k z2yVP)+~CTj%>u!I5Bf&g=zGHL%;h%8&w}qO&%t2@A6z2VLHId4Z}BEFf|EEF0Z{M= zeam!dAZK?i6wIZ5Xie`7!ghLq=Gi@)r^KJ>zO^f;s~DB)FM-mHvjEIE`k+Aoj<o@F zx`8_F0GJa!<?z2@dJv9g!FP=mtqY)p2mlWAVT>6Q(X=qMZvTS?IAjWzfzAMWj9Cgk z&I)v{5H6XjA)MrL83>aZt}62N@exbJm(3t+LeMl7s*Z4Jk8)oWCA@a^=XbjsVG!xd z$YQ}nonVKJUQ4e?<URi|Kfac11z$ds<SIs`GmLP(-eOEI`sCS<0JePl9K+B$s}yLv z0)SlJS=(<yYb}q(l;%)Xd<K07p0NHK!kL7h0=}H3h(90NO!-m}!NtsDog0t>V`_6Z zHgT^;=wM4Kv#&Sz?*W~w`A`5qK7R#>FhN1zUCo!69Ohc@<<MN2amVB}2R;t)^(+0) zHW?y!!l338J;0+8z#M+V?aRYlotxjHI}Bbi11yvIYYihk^tD`t(Qol(;By?n5q^wL z*@Qtdn}Y9i6G(jJ3t1~Zg--a37A*ryDYLEvk3a_PRV#QFKQh)8bNN3{1^34-K*Olo zvoF8}GY|&<h1PAF^^66XE`N&QOqN;%S9q`Jy#{=N0;tE+X}JV~jt$WKOtgxtp_RhN zE58ufwzoa{w(g++4X69$G9SBZ!9sl|fcd<tR^YPU+X6xY3-Konp~2!AS`&E=W}n1x zZ|{PolwT!kenww?rmpGqis|D4mM|ZDV(K-2hk=V&OP^r{b9n)@JgW|7MFFct%}<mb zeZ|~s%myWk`d3knXGiGwU>(|kc_fg8e)<3@!!f2J5rid1P|)E4_>AtM@3aDapDKg7 z3a@da_(Quuj&y=wbFvNqoM#@rR)oINg9?oKg=MunS9!{ApxXVQ>o_m*^C`0WHCj^{ za$<?rq&w;qgQY5cdFXbaj|plo1<PKZu2tPYc<2MA!}+eXgcVZjGT7nO11zma0~9TR zZOz<y|LuGY`s?mT=e)Y$?*0mB6rYn)>VwDiJqVY0Q|lWAu;Bv;(_Ao!9}nQl5R7z} z=iR{r)Lp#0RN`;4bf{$??OnD7Amco!I{XlIQd9Nu$}@pqDtr`kK#t`UbtZEuIPlFl zfZM!Dt=IuMS5^&bevNO&nzL*O^rtZ_=lMcIH@f3e7AlXaFlRl0jAq5r*HROp)PWV9 z?lz#wr$PM|1n_zVB=qL+`&+;X;7dmVB=dkzX25H}2s)m5X$l!{lw$Pr-Z1s<N3<dq z6I=ixg&AcU&rn4*z%KenSu^x)P=lp61JbfY^o22=zL^daTF!(qDn1!><{Bwn`OtBZ z54g*E!fHFJ9z_ktbs)FsHmJGUpn5Qpcjf3~mx7wJAD}g3mR1$CRLn+8=%*vMp{4y5 zeYzjOT*(vYNiw_e;b+2UtjEMX07jpH);dmaJ)#4i@pSyDx6oOSn`OvL_MDl}U;hBm zzo&q2A|DfG@iyzs$dbiR8drF_Mn<A_i5F-g16r!`;VzB&>-})F?(!#bI#y8Co8Lr= z$ucCJ;0o)%g)Gby_=PZr<$b@V02O$lF=t-2qiaMYf%|WMj$6gF6{Q7qq8etk_yQ2Y zT0PAKePJJgs<|5*XhK#UFi)NjqmB7&?Gytm!}tXGH<Or(10^b$2Ew^JtuCQc5fAY6 z9p-+ThoRYC$Q4h3T<%-wPwWFwT?-o4#)9fiN1DO}Q_Le9!B|m~`@Vt0jppVwT?cBX zD<Ev_2#G3kw2D{_RZyT+uaLh#Xw4#G-c*o-2Lr^?`#(*Eunm17m}x76<##<kBYH6E zEn*7Ut_GOQLpkRY3`}FmzmgU7l7B!5VU0iTAP9rg!D2rXnm3P!W`SEgCJAWoF93>^ zCr};5mmd9X5FW=vKOqp5T;9wkGzVcPFUC2{?@GQ<Xv!Mf)zD?YBCY2~ur%b0%?-XP z1}}$L1E$sF$57?42gWSmjaHAPdl(O;V+i^he}GuRPQL&7HUik}4DPLbn%8B-Kg@8x zeH;jdoY)|KVw}R4(I?iJSSw!e9xyxiVnLS4=c%)cK%FO`FOsM|S@zQ1efS6%$6Iep z9rUf>PL3Z8Fnl8YuRUwkqc<?IQLY$dT@ZwC(OUzbL*YB#ntb@s;T8ZeDG7Z+Jgqs5 z5TE(HdwCWHS<TYDvLzIR=7QxVGvH<x?75X;Z~hl7N&<hj@a#R9t+`~U_@HX4VBXW_ zORODhoBh1%?acugIUR)Y_tAQk0fO63Xqb5bA_M3y@^5I}=I7N5e72eU8m(wwNSuC! zmgYzDDR0m^H-mHM1M|4`FmOr+#5VI+7$e9$>6kwJ?-i?~QvQT3oWI<g)ByV1Kf#!5 zSQJ}T0$9nb^*O!`&Ed3DE<*Kv{&0RnIQq<DG04I?5L-S0=w3sBv{e{xBu~kj{m?v} zX6@j-{+<nHH^#POEMpWWMq$iErlWEEb~T%Y%N)LBPR|9}gSu|t1WR@a(8m)%^*;(~ zEO-0v5>UVKQ9hg}^Eva4(=9N!rRC22X4^dp62a@Bz9x^|T@fsvP8j{`PJr}8I_h2q z$_-5SO?g)j%7)x#?$b<e^e#Sa2ablCdEL=E8V_A>SuG#>46&LCKwGldn8llRSt-yA zj;{H<TF5V$Coh7q_Za$SEro(Me*?tw)BTKn^uMosM_4}$cwP<^URq3Bw}D%W(`h7u zV1FHIY+33YnFL)6Ifw&4%vIuwZsHfP^Sq00p#$qa1mBlppz2_>;u(vEt_2wI7pC-> zZ=J{ZLaWypKv%)x490@&(+0Y7cx5@tJAFPK`q?Ca>ffNIA~SIvzHtou2$ov!0V;7L zg6P^#chS;f$+CiO8&wNp7dk;~5cl8|Ur*9$jQ&0-m^>69kT-m@UA+Iksto*#9q_As zr!DM;(M2twwWx5~Zs@Yy4VG9Ih82{c*5(z<m(gr75ARxf^_>nNXf8h1RGq~S!z)=_ z4DN-22XLAhmtg8A#?y3uS;^&tg2IF$a~=at9D_wGre~96a9h%ZW4veG<DwL>W@#+} zoi-SJlP^Q7!xiw^_k+Sx9-1Lc!tZ!1UCys4qq>7-#%{Dej{{KVLiQz#csu&S>gUiR zo5}cho9`L^tR)@!sc9Ge@7PrcU)qko$#gSUUhy~Z0T(NVoIDvIglT*wFA}abF>p_! zhbZ=y`VP{mBkA4&fdJ0D0W{tK=1r|&LMGFyZ>lc*uZVB<-X>7}FcBg}<3Kj44>e)y z!Q;V-V*pw9aE+wr&=r3cy0jU0hA>Ii;lb)5f+eF9fbux(xbP478u5YQZ4-d*d}{5u z3w_^Medd@!LCcLGOjW#qaGQ7xq6t-dU{c9AhG_>r8K%q7+BXG^f0Gd10DXP<wKa+F zsGArLbGg8tboWO*Ae!Hd9_|4&(i>t9&gkpKqO#R;^!c*ZwWp&S(<@8_)_>_#V@lWa zqyGDBr85)v;^th6Lo0-7+$ja17ybJYw=$I<ZDOJ!yN+kWtpuPG_kBrw5Ki+MVH7je ziy=@NwFp#g`pmsq0BcyFMloF~5?L|^Ga*de1QDy&K<)W;e(NTTzK%6vOXl)Zcc4pt z32M5X0jS5A*rNp`{O*BJfipg(kG{o>Hs{tr-#{*-fdcyS#sajb*X2`lbN&kL3|VgV zBKa<Vwtn0mT4&It*IPhtcoU30_kwVS(Y*_=UGq;t|3tnxc~YSlkM;G(P!q@%twRG- zJphiI0L`?8K7YDda00-cDF9J?6cu>GU(K`pWGUm{3@VI$28EA!n46dbeZZ%ZiGu(> zZvi;+7NAQEGz?^}(!~C@%$Y650)2iL64m|zdXR%WWvQd&yp;R}z*ts8OAP?DjQ}38 zJnq0?X~w@A^h81Z?U<vxuEI<Pv!JZcOWFtCvu^TfE_Va^IzNZ-gc2xRat(6*J%Jvw zfY`d}piY^F;o2Vqvl9ny$e-ZMbpzj(&EPv70}wD71k;)T$xT6c%_ro^t62Z3KR`ns z|7K5w6PEfqy<`f@)Lyi;Dv#Y|7VF~|Vqa$P2=BfPLOAbPXX%p@#-Oj=8nn_FURpjx zOW}`J;A0FD#@Mgo#@6CXi9V~9LO-Ch`1Gk5&f?C4fwEU?bb7P|+Oa2EXOb}H7|M0$ zj|VMSFxaeuu29WaH--dhJitMICisURnd__sx}PDZE&b!}W!O8EZz0j=fXca`J?X3# zEdJe|f%#SxqggBBV>#SE%#DeyF!#fAfR^-zT*nlE=8Tr%3<RxiLhC1fF`4ZOG=yhc zmk)QDbb||bA(r$FeYGy4?{XZ_dOk4!A}81I6bJ?f0Pgd4d=1~L6(v^jVEpF-#?;@6 zK{|0$^Z84JCVX_wVB%NOp`S3Cjr2mR@CHU&!5i~bM^Ix}+w|izh%6SvHKFRX`#{q- z0t9SEU-1I)P3DiFyE4Q)UI7yxa%t@qbD`!MwN~exmKlMZv<D(CMgZqn2t~euS<hNQ zS3)t+Y93&zmH}#?KG0xI6L!(pp0hkL<k>#`3KGSJV5!I(xr#pHvK3VSRDfE1<KD0W zpxpu1e-UZue8*F6&nen)ed77Pb2t`+EsUUD_;S~VpHVyrUeJV#RRGj1f4r#wi5%bx z<DX+KsG76_d~4?d++z9qya|}Y`4o^}2#Gmu!BUS(72COb4!moe<(l1`kCtN*bj_yl ztb5?u#lNrdpf&nV-9~Gu3M@4_#o9N)A}2821g(*LTbO?f)F3hkuqa;1`^V(w08I%t zxj?}e?%!IzJ63%||2ujRl(#RS@FC+#1)lAqHn6a3G8Fcez!LZfx>mVD*v1hfZKQ^q zbjKYd!TgQEcpuNLBX1{a{yHX}1*GaK___>*f>SJ$-me1lny&!TOrU?^hv<qDGaBMK z0z4%SkXuC6o%nVBl{*w_zFr>TDPOw*B2Bn@iTu#u#F|s*6?C=d?|jzJ0=QHU676{3 zo6JSuunZ<>w*`x9DOw+yf3GP4vY9AGkng^NiT~nD@Fb91V)mck9jyiY=sA@S!u>}8 zoaFbz`Qsq`o@ur#UmDl4uqZABYTE+T8(Gj2J04;g{0O3d5GL$m4%#=17KMVZC!Zkm z7NM^Non*rT)_->%LrojH_IQ3fsJj>BIZ@zl7y&S}1nAYJkXsfEzRFDZ33q`;FgD9r zjb|zVJV$~sEfCDl>j3R^4y_fOO(L~uelViuJ6qd&82BCus?lIkbYBEDefb6(L!Wox z1@EvfC{=mW>CTgSsWn83SU-gE!(7fpP!BQSDTbpphgCvIDO&qh!>rot(9-<%y-)m* zQ|tg^3R6K4W&&L!2XiJJXLWB7yqYmxj2R7G+gXwhjs`i0?ikMe`@#<*zI@aeat~++ zmY@wEfI6cl`pO?gyMX032foL@5;4OUR1a!t!R>sH8%D`QK6-88nAbQPtvsxU;Up;d zf}dU}N_-dz0+}Tbu7O-a4JdRVkDUr4;k>l2Wgwg16)bHbQlkF?!`)_bT{;D*NMqgy zgZUMI3y{Z(F`kFA3;Qhi$$!i~$Y#!gs?&UC`o>orXDf_bPeIjYWoRbR0|r!vi0~R} zqE7<|oc6r?P<XZ-M25uz%^!zWI#=0?SA&)D05iA|Md6SLTMJ`e4FX@6On~_7kky+D z&~G59<}7lmxB!f1D!A~N_1`P*tfD<YC%%gp`J#1@H>rzce8_j%S8dT(lO~u4K#d!p z|9#Ft>!2ebROAt8&MWdgx>O_HK!=4v_FOd3%6<UxeEpss1D1w9pf+ZVolm0`54bVG zk-)z(1~dx-s!b<1XTE$m3UX7|U?gD-TH|>X7t?v~JcMw{BJfp-0($o^fN5cnSkKqN z=Um`c44_x6fR5&UESIMwgB4@)b}V<FO0Z*%paA}c)pG!ori%50#9z>SnhEYF8mHlx z5Pg<;=F`Auy&eP~9)HCppjBD$t!#mvUE=_SgSaK3T*08TTm{Z%G*fS$5BfZqUp$UN z-;rGy*8?nyl8-DS+nmJ|YqbQq`VF8__khk=jMfD%*I~x6x2!KOj{sOS41C7bscQrX zxB0ULbN;|+>jU%^^5g`wwyAR&%%@nJc9@KocQ#ngGHmW`1CTQYeDf6arf*EWR<v+8 z=Xqc(T8<29>q9Wv0aMZHKNMhNBLL|xm@T@2&oUEyU;2Z^>={raeW3N20sUseKdjW~ z>yi$13aJ-S?3VmRSKG=1H=e(zdHPBh{&$VuzlHJYSsZ3^W)lXPGar3p7>n*CfY9j) z<lMR5E4jd{xgKG>e+VhyGi2>JoYhcL8e0AAV9`5XZpV_@Wd?vHza`o7@Aew|0nE*S ztUMkpic>6hoo=A1#m~HVh5&qI-aEx4KbpDgH1A$54?^oawrX62#2J=4ow=X+cc81r zM4;CETN7?PfE$@N#&8cFvbc3SgVrdPQ%8qGU;P;{VQ3)c`faxY3fHsFT@(Yx76ZXE z?+|!uvm$sM2|@r}C7}txMTU}`ooE^GfXuxCmgB514O!SW;g2nDGJ787(}iI-5H4&5 zv*z7k5evMcD-b)p1fZi92%Vep``dATE$Lhce8pIp<jL=c^H{%bXn?*v7qn#jOEKM8 z6Q1K_Cx$@(qhjzi;?whir?BJ6TM(pnP+&__y(a-o?+?_CA5k-@bOXcu={X>bu8zLy zY3OUE;FHiJW{Rhr@m4;dtr!mUILm_I#y~UZxB7Fz{mus9ENiFiCtwbe1I^%8Zei6l zj1K^b-0d?9(fUL_`^`Xo7X#St28-5Qn9z%7zQaoNEiUHww}TAR1DJIyr9fd+GK7u# z1H@=y#`74pp9}#Q!!XyD7KQDEa3!9kPE_ONjMn@$Anf75ZhZ9W)evaSbwC{+f$GJA zW;Oq++e~JjDJ*!8grcRGs|(eJ&mf}BXUc@t=$!wM7TpAoTUWHqZliUIwSli2TGx(( zPcQ(O$~Qq1Cdmf%!Ix4GAd&9k#Ana++Zg>@ALtvk1F}U#qxlWs(lYebn~pvm{QX1h zQxG(4T!7X?6M**uG^8}*n7nnYpd)qRi^Yfv=rgAOb>Kl=!DWr$qUi9Z<I6Ja`DJLW z%u;y6F-Wwi1mHdgX1!xcWU>?bhBITI8cY@psVKP|f@b1BpmdLdhL9*|uzC!I3&~Th z5ZsZRXWwl=x84U|<vQrgafiaIc)>35W8ybrP#I(dmW>@?k@IL!4-ElWUVy%N*I~y6 zp4RTnG@H233#I~;D0-uF_5y&wVraO*=|u2n4DsjCI>7w<oQG)DS5W)&l6^_@aV;0r zc?+Q-W(|P%04UhUQqm$3t=9Z%C3_DmKhfyYlK^fu+!Eer_H_i|{tSo}PG<hC#Rq_m z4?sDd4@N)w)rC0BxOaV^!8{xNMnO22Ru69oYSwlT+C4>UKIdfA8NlfvESkwnq&7oX z9vAc=|8ieP77`T#Kq$5ZU;BEH?MD+duY8IeF7@X{z-Raatf>uf<|IT++YxZLefYE3 zHT;N^!f%5+0s-3bCqqHAp>PNb%9I?4Sr?#BlXS9}IJ-^+y6PTeKhmt;9ne=24s<Ff ze3f~0%TgAP6Ioqo{@soPFJVl@2jJOv7ho2DK9#|zkuRnIbB_Wo<f+L!j)@sQ1oKi; zpl{fkyaT5Cjs#fS7vMZ=y(av1@iM-zexi$B6`|k*w^-l_8;N>SQSyu<Ew2d5(u!dG zz{{r|tNjBpu&vV=aF?|P=)qIy#I5vZi1*?xNqZu+J`D%orSVX(H3tMk9{&Z*p6B^X zg!{B@&2jW~%Yj8(_M@dW9ergz&=M3(_ddO$;XUKkB6^coEXd~9p+A$CvV*)*bmZ!_ z;pXQL0O9pw5URI_hPHfzjbN2Cji1X}(uHI#L1@SW(wMi`9$i6=ql7Pyw(}qmmh-c2 z`w0I2^yCCk3i#0G&RgCSzMk&oliNG?{msm&%iCKdpN7+|07mjl+==d>-V8$P3jfM# zB#*#Eo|nlluoS&{7d^_u){Upcp2bC$8Tjs;13H~<`!E81iscb#9!Udb5~tXjZ$;a9 z9jRpjvo`R&U*q?R*?&RTIo3*M^pCv<(ei5v=AC>y%wWoE$G|u*9)!O;V-R0{e6?jj z`Vb42LyU=c@1k!c(_nRe@>{=(`Paf1a+2oq%nG6ZN$5JV90Y++M@3<ftIBvX;2h8- zeuO(T9(?`UfiH{G)?Dizr^A>91`zXTh|x>igHYihSd4fxt9u?2ZY)$B`LOYrrOk~Z z{`&_xEZ<_8gF5kbv-T&n632tQjU`M5^FirO^hx)j--?fR-t+($zQuLqlW7Las|z0h z-sb?FF%M(LM?-7`RaGhi-#`W~%`bl&^IATQNwPlgE_W4ttqEBH+=rc)xd1`yp=Jx$ z$Ga4AXIYt4XaK$sx6pTjby4%NAefO)&JwqTB|vxHPQ0F>HG@mthuPD4C|avJ0^~92 ze7Fym#H(Ow#7cYiJ-)xJh=m#}zO{U62{4N_;!CFcb2R;g1zM~A0{4dg0D))GH=5H9 z<0qr48_+VOgf$nq;VKwt&3C4vD?r<vhpA>!5WCNh?r+loVj0aVlf{TBPO+9RlzZx8 zkh#nhkDUQVQQ^jw&^4Wx?5`t0oh$$hxCX6F#{rD32Xq@>qP^xr|CYf3EuO-*Wm}-2 zF<<mv@I_onH<-_b>ccU&F9Bf>?YMCaeK&5?|EltvvnP}HV(QN&w@A>Fce}O>p5ZL{ z-5I_raFAQPb@=n1Kb-!jTMXu|H=$|{XIw22gy#HKwP7!q@A9rVkbyCC8cgV)jlM%$ z0URIm@4uC9hn&c>;>8SJcpQwI6QEzgFBgOC(05`x&?kc-aw8nAaU8vmJ;1{(3>Whd z3Y__ij$zYa{s9gbz>4(sUyxOt2VWDG$LV~({ZJq1+2KIHUV(Zy1sStvL-jM(SZfbM zVU0YX{rHm;%URHs&bezc;En-capAOkaCSPqK|M<aDyp8qf$f;tJVpccz7B#X)6aay z1xH>TH?w4!d;)0RC5)l<l>XO=iT?=g_pAn<qmBUM`R2Ho2g_tK#_Sab)tbM_@}2>t zcqW96d4G!HVe{q>H5xnxi#H2>lTb+1WL;5#4t$619ml6tdwTI4Cc9X7fXB(OQZbjS zCve6ad0TG8Rk*(pWNR;g3rv1)EZ-h8A9Q85JIVLI=~QUwh1LjG(8>Hk)Mu864qS>U zG3dJ$2K4@4AS~*O))T&$@8EYBmoaF0@)mQ!o3GVx`G{%w4srt-(gLr8TgJ=h<F^>S z-y^j4*@0l{3SAXhR8_eOV~Pf$Pa2Na3VO9L2Ox;&aV~vwXG1XG;3HZm1GI*8!Wc0; zIi3U2_lX(m#S+$k_vo#I9%GPvM$6I7A$**tFue{9W(g|r20Hx___p((vT%P5z6+B8 zo~;M4^aSu_6@0ccwC-sJu`l%Jk>h~A;Vo>E1zPis0o)@&*nAAktxSL_6uh@I&Bf?r zc?HtpneDm(gRDFbo*rDJ4P2hjd@otWAGcVJ2CDZ4YHBmwM)FIA#ILevO*pYS=o_tv z(C3~6%hO4)n+Dn3VNexL+jevAgE;P|L~UCv*IZC`^A1t{2s#xyK({cNbeW_h2}$zN zyF)7m_BxQd)W}qId9hj@nRd~@RCQ&(THQ164F8MV#*X7ZIwB7c-S-ncPIS``^gzHe z=t-iU3na{+FS@1IGMi{*`g%jZA?sq$SUUkgT3BDO5ND)&n<{-AwBxd4guK`fYLob~ zXwh`DRimrXYIUG$=`^)kc_Q|hcHBvm*?%uptCQN)ioJI)(f><cfNBzmBxRe-PF<>& z%=!z~V$^2SfawrT()P}|r!`}$gRv~yr6vDS&aqBO{<XYLn9S*?(QNy>=63(mEd0{! zRIb@x4A`RWqcQNy61BQqqcbf}w=;<=L6_413$(}HL9>2N><4X=Sr^fa{ZMPXLCHzd zJ3D9xs)B}!savd}%t*dsi5R}c%6aB5+3~+*hyRrA|5NtK5Xd%?hbM{`w*<)t4iW2Y zts&pGSZWla<tUbI*H!!#Z(uqoO@{vh0z<>nY{nXyx*ZQl@_jRC9Xnr{nEIN=mg*Py zmJu!R{Zig*rtP4PF;?j=gOM@%vB!*+AC!f|WJ!KPL3?u(a<<3%L216OO!Wy%6+7MB z^t&{42_TKtR_Z<-C0FKa#z^WWV3=1X<%$CXRPR%uy1i-aF>|jE6PhPZH>HNLRg}8< z+8#1xzOu`kL5USOM9+SGl@G)7l=&LMzq^OY>cg@ymBSRM%NJ8G1uP1!&|^@VGbEK2 zrmiqDRT?LxrNEE9W@^K%>F$w4RJ)WKM~Q7oOdV4rG9*Z5TA;HGn7Pc*R3*%XvuZdy zr;}5EKS|<+&G4rTb3rb~Wh~HJHk%}CvHw#GF>1T1=)KKK=q~oy79@`tAvVaVE+##x zC|=zbA;gFt+mD#+`fV?;6Qa%z51~M8wZp^Y<$t00X(){ne(j$|W~WAGr-#Xye^YjN z$o(X-^$vHFUH^qtuv9~O`EL^R`H4q%wU)OYDXMqb%I!vqcDro_wb*KRsJz}-ap~?> z!V~fG?$*K<(IPX=+%@s1L9wMa!5W_uPi3~2cjzt}?Kx=vWehe#FH=Yef1&i&R(AIA zP(2W@@2M}}oGt3^b+6NtC$Y;lRl_9k75uTyy}8fBWW!{t2lME`VT(d*>y(`Au2zdn zGHWOze;?VpeB?j984lV-r79c>%`H<UY<=~`*tG9%nHXLcr;c$6OX^ap+6tED8kQK- zv}AC4uOnPXA=0NV_^G0czOsY1*CgX{V%$DU;hUJUuV%M}^E57jqaWj75|&-yd+W_N z1JlSowvhI{HN@nK@4bKm-+MAOVqG6Nnlh$LS(w<A#wab-LE53J>5Db)M|1Db7oQy% zE;pBD_Bv=SIG%_1DRat$?3pv&m8HYfkr}_wTtAe4V12k|-3MSTXm3r4KaZYL7l&6J zqmK<J(AK>r69*o4(B3y4>sTYZwUoR`FtCDFtGU1Jr0Msad~&#^!6g9-{UXlG#4~?e z%OUP^#L=U25A2(tX+gUdJd}y;Jd~%Cd>;g;{+Xm!W3pf5=vB$bYo?X&`$b6V@<3Up z>fA+4I#N^aH(K0vq`JcyC|2qz{k4<Yq$c__|Dr5Z4M<k2-LfH|{Vq=^(48TOuZ}d8 z_nIu$Jvu>*$kwxX!_$~GOrtk0JK8{bLRDj#I5m5RTpf-x7A22YifeKj%7?~@=W?3X z?gVp``F(S>Wy%X-Nt1=S^0u?HV?Nfu+Ak;&!#QinQn8s}B}U~sI`;Ur27z4HKmAGh zGBKu1H7Q9vlxr=AX;*Sx<-;e4`g#5g{i619Q@sf8v27Qz+VLS`oBWx59f1GZz5?OF zzi<YZU-a_rJ@w0o*i!5N!wj5?)qO?#g20w=H3V=~fv?IK%He<czNJEd#_LpWvoxLw zk9+_&IAdgXbtBUNRe$scgsM)4h}#RYgt6j~6ZPx6#jDloXb1l!9|tG?8KAlpip4`} zb%>pWSS(i>B(>Kr&^`3cKs<E9x?|}KP{E5}SfESwu^&vwns_I5b}$Zrys0X2AQ(D3 zI4koLyBee6n%LD8e>fEAX2a0FZf8_cqiCK30;b)f&{|@|$x0T`1Jh*~DL~a0BNXU? zS&To~%<ek{LmJ0sgZf%gJ~v$+Hf26H(OfJ$S<xNJ3j}ulI5lUOgcI9nD{~5j&Y;2@ zG)2o#P#~mWkfx`4RQmTIwG`r-Q*DjV%@viau1pt8Pc@Wd32aW=X?Z}Z)oF(Y-=#E0 z2jN_4j7BcgSGG4!^fN|YOY}2U78K}3V7sN_6*@KOFoB_1CVk~gb(FT+Rb|Y{>XL!} zs{bzw&lCtz|HV~g%AaRe69z2K1lD!^v+v(7JWNnoO;D>7+iQ!-#aOVS>f+9m75;N| zr+!~u?(Fx~U33CYe%8DWdf;Y>Ar9JH6d4>wKOo=7!BkMK{#{CZdCE>aa;lc)&(&-H zFLD*uB&LzS4AvYvG5@T)ymmWLeb&!x+3z&gD`Hq-N4fTNab01*KbAdr^8Z-&OW5@C zWyg4CCw}Qf%A(Gp=ltaXqr_e3ESts9X}grhel#6hp-rGV<{FdJ?mp<uFVLl)KT?#k zOPSkQRmxED>$$%2V~Jw;d0YAVL~+{rDvq*wKey&T0!d)`ZmPzN5>4(p7%SVT7@B?b zRS2$qF4PNh{U!TfiZta%rC(}Nx1Aapk5o+*^-EO-XeYHr81+mk@Y^{9kyZ6P4pvWi z0Q8MaJXmC3+0>7FstxJyq8QGosJobaN3YgzBmRfE$}vrFpfoz<ecOw-ihSf1dx@5r zwxah%UAN@_Df*H@9L7vXZB(Gk=&c;zL_AbvD^K%<rY7REOGYk?nsM3F4b|g~RX69T z)lUs48L@qPkj7y3cyrY;bi?)nT|`tVYMD?)OulR`-!fF(c)5l=Xu5dva&rZP?awoh z6N5wjKk)KkoBhA74^{O?m{GQO#@I|Z0jd*NRT|QsC8bQ+-l4pESDad$dBwcfiXUW~ za<X|jIrc}ld3m>SdH0AP-NxnJ-^b`)-mNSwz$bD1r@B88$-216MY?xer?wfAb=fbo z>A)dZgDTo5{qAt$o~uEcu%$}x$6K2C@~VY`2T_%v!GFfS@<xI1zZWm5jdp>6$Pan{ z|3C7-@mv4o7awjna}4;y%s->kk8{yKlIMcKq2i1`*hTZ}-)H6DS2L@b_bn^@$$_P4 zaPL>we@maLO_6Ff$^boOMU~@hvGR>}<tx=AT%)timdaxE4I9z^b_6bq+T!}#Evjd9 z#;&)L#Z>sMJWSL@uG3b{iWa}#4mLt8*G6pp6oQ>vcpBH%3wmwm|Gp!CPE{!+1zHDb z&Y>xeJ&r|Nm8KF>CHj~>D3CMStC|ePI=G9e5A<Arsrt_uC5?$dEz`J@S{+)Ts}al} zgtO&jR=>lSlK3HN^_eql8MRbPyH0CW_JaRJ{V#pWmp}A$EkA(oeD#HBgHTmQOVPH( zBQ*7Y2`7zFDRq-V|DSWqMxezx`k~skr8vL1v2^c=wuK+;JOA4d|9MSKnv|L}fpcEn z;n$oS|E@4hmE1zSalb_!*@B;Y@ZUn|OXc(?3`^qef9%bSTKr+s7ca5mgCP6W-PG!L zNOAwV>f)x$C7J6b&UoP1*!BN0%=akxjP>SkBbs{sF`~c`+b#;#5z8*=d;K02>mzgi zh>8t*X@nRR%{2+NJSv)MjHFEyJYkbPF217oBSS+TZ1y%|uZ^aQfstLh|Jik=xrQs? zv4NH5wC_a?$Zg^RP-I1OG3s&Ma$3y4XuX<?J0I8kIiO>?D%$X4z;_;hYQK!j-0#{C zdi<eb&cE0P|BJmN>5d)|zb*cMCa<5)JRc$BH;*fIr!$)*|0ygEE^(EQbEh*d3e^*T zu0vCt>)$P{>i%mT-Uk0kyU|Q^ec~y<*IFF$WW8wr)Kh-0x7g=tJ@f2eW5t#lf4^d_ zc-p6yvn#f@uF_W@rAMN#zIWo_vH)Cy<f_UbB>JlMk9aIrDXnMyycI`6L21rn+sIp4 z7@%&Z+Uqa&E^Q+p>o2Y@wU*x-thp?UCeK{tGeSl0XKgYAU+W0wpMM|R|NG#>-qesU z^AnTa*jV|&DV`cC+gRhFO)II5O+ZqY3{^y+nEl4Q{8}^JS-knCnn9qGTD_mwJJBpF zP;`B-FIU$WJ>NTuJKxuoTa6Yky>}MvKX{8#AEwE-1&S{|G^y0e^M~2WLhpd?DkC4U z>Bm-j_Hx9ywqt2-GjZp~2r>K9CX<zQ)#_jbQ*-5qFx4s#as1~E^3G0T^)I!=fNx!` zJld<(!}L|F+iI2^S=1OeK>a9j@3$Otr{te!J+}164R)^DMcyYu{99eqCKxA~cT-JD z9gA>@4duP`gDShG_)*<WKHq0aN5MxvYS5Bop`M%FOPOh&GNu#~YW(+fspc(WUmqOd zHpa0h<gt@HWHDN?C$xvj0#q;Bsnw0MmqZEX(vzw>R*OP=ND(@MrCG%9Hrc~FrFb2| zxy2bQc2XB})lFogB;RXTYhzVNe@smcWgzg%tf~}&p?piZ)fK!^hX$Y=RSB)67dk>c zc?~zIny%n1--*lTE5EE{T|rl<l=^G5!15iI()EN;`3di(`htb_*f%m$Y1cxbj#SoK z(3AZ1h2~;FiC*PjQa{~N@-z^t+TBA&<io+W@2fUU78b0Ypq&_As&-cy`Ag#rga-1} z9i+7eLQT1Egp_X}cp4eNY|T<t=)tY^mF^h|;~nc(Rjajf!@ctRnY7LC+dI+6LA%5P zef|3O#(gZZltrR_Bn6sCJB@_;@=HTB<@BB*(pMwFt&*9`?>-c)y5k|WH5MYYeQ+ei zoNOB@*I4M|yl}8)R~Z}UlsEh4mDiGS*dXjTDI>}$(wJp}rKXJR)m~FZ%EP6T6@<vP z8oyi&rt;dT+_u@jaBcc+0erfgULx53Xlgo2VtY#CDhdreU%O-f%AcmAYyW(f#%u#r z*Fb_bIBL01O;kFVn@UFTDgfYF0GGiL#fP4xXCl<_9R7bR3izq$AQVk&2=R#o!>DMm zMv<*F1OMENc21b4GN~-3ng}8CeQl+8CPH_)V|}TMsnDRBW=^X;@XD!~eH$dx@|OER z8q-O-2QJH1ZPe;Gbu{ny=E}lg^>|a2r@30HWhQho)5wJl_#xM20OcA<JIw?WxqDwJ z$4s!1SLrL=H4_F~>mrb2-}PlsgxjUEu>Q5+P*quo)TffrQf}rgt*j*Y$`?A(HY@34 zB^)G;`h9S%a<eibs6IflHy1j{J^ZEN=7PQaTq`NbT<9e4P^Vn*rMX~PKC_%A5Y)^u zi!F_^Uj3+|s}yA+ILeQ;l$KctedV><N*^qQy5+-#AY+vCcI->uR^_uP^DduFk$3rQ zyo3JRZ0ZF`Hdcb2+^&Vx(n@G0-{>Gsvl8l;N4>LssIQGwW+j-(t-U2JYr$6w5m@SE zElj9l-uQQi8pc)9SE(D7SC&$lwa{2Gs3Z2b31U&?L{y3a!vwy&s4P&XMmq4_5yz_l z|Koc?fXbcBdSqVw8?y=#@V_t{lKDn&(02aD{P&;ChCfu_?!bvO6}>-e;|dp}!>5)! z9B$(hmzvU>DnbjpYgVYLvDK;;2;C}og2n_52%OqeyoPRxejuhSy{jU4+V%J$aL5-N zSp>TYwh^TJY6PURs)C2zJ<IQ^eMo9e;7QPwz*WOpg(bWcT}`Mi&9o8hjb_;6O!_#O zBa2ExbuDwrwT@6hKD4!T&QWleH*78G*Abe^@6{siA=D!3B$+x1HS{Cw$|c3VPpzZ? zCn4WVw(z%nqtDo0r>?M8U*l$@>#L;;b%jw{Q*6{y+j>G>Jx%x7dNjYGlv+<PmCEV~ zmQB3>Q1YL}z4E0}7uN)3XIGE7lhIR^LSjs*IK8k|%}A^tNdDTfQyUq}OcrM+_?96| z^IOa8?C1u{&W)sNdV*uc;(B~xFI7E2u*D}4+#(l++Dh5=g?55m(smXc>wd1TR^RU9 z;Dkq=*kevZOkA`b##g+JZ_S3Lw+1;hi9KeYhmSVErC?{l$8bK_fmi4um(rXCYk9U@ z`rBEk4sF++1#d0m>T1cRfzaGA8}d+Q0lt0>gtV%G>M^c(|1+jvYEtkxgi!2-eotJO zEG6%Tg1zYd#WG^zpDXg8<-hWys-Y=FQ7)ZJ^z%saEe$B})4W5gzTuGkO!3tb2xD<o zFVEjt1H3>F(oswA8VWT``qfdZXH3JlKZ7t;Pb;<L=puB~Dw!K7Wx65^)C-g<Hxe=` z7=la57<C?sq+M_$`H;ra(?)`W+`F-4)>!Ca?Tu5y&t7*hG@kD0>Udg>up`w@N^LB( zt>JI+`+4544T)dx6leA~k!5MQ35J5@LmjBVTj@1rT|`-vu<pUCVusfy!hWsOwbWU6 zng~4w1I@BJogR`bF3hMR^=u~iOS_s07G}A>)~)>8o^-VtqUk<Q$<keLk;i#Te(pj8 z{cP5d?X|7N;`{J~+LEb<P{T1$^NH0fcS5DaHl{zGd-L&y4A~0b)N%t<cWgA_r;4NU z|K`;PrzWwlvZ0$-m0Udp594c=hNg*fWv;TqElVldLs+NJ9%V~lcFlzgzpxL@g-*Y) zPM*THKV`MOgzn|^29WLVB}_M<rl;-Fu32WOyaZ9uGODW1n%+{-7t9?N{XCpAOV7aH zcs^IO5}Ilq)m2MHtpsn^giqfz`Po=0;Do*N(KptOX^3hJRkf;G0~9gNn$j!|1+O|l z)$5bgwzc5k>0cS=DT#fmByM>Z`=5`6#w_EUK>y=|W#95w!YZ~X)B+@LZ^5i-8uDlX z&j24!P2n!Z@Uz%s`Z$H!UU0W)chz*T#Cp_>c4sILP(7-vmgaa1war?vQ0jwwV`LAu zDqC`;9i$m;1v4qFt>EGuh_lHza(u<b+2R<Q&#aLX!Opy`dWfirV`q(Tt<ua;1M6xJ zKE#%W@UyJ-E0exD>F}>mi1=EozPU&*+6q>cE8rF~#Kh?YdF;!1q$=%%nnQM?W_e}O z)7J_7J`Nrlx+?ESr`tPpAawzba6l+<Dg<u@f9OX~?TO`ohB#nU2;(W)={V>*<@BBv zA~p1$I*|x7?SwIQW3@G5XCxJsfw5e1X9tZkf4S7iN2rDv)Wt^=iiZ0LcEFTALVf&^ z<s;O>A2)r3%VNNJ9qFO3a9$txTl{9gH%FSeT+gx-9vvqBav7}Ne}-ZP8r5Z-gP#%R zjrD&<7_TzP)=vnMcKQkJ<e$GtZ~cTOTG!<2EN6c~Ptf|uRxLH_Ah>BQ6V%d(4#Fv? z*wX0oTkA2Lov2`Cxc-5A*sD-w3`(Og<uv2OsSYhn?0lqA9ff+;YlTJP{|VGISXBwm zhb)Hr89_A)UsHT7)YATrLTyDwWnt1JVXn|d^Qr4xV5stxYD_hFtq;HIWXZAp(GHzs zkJ)IxvCEasR98^={q#p?_@gC~UAaH{!ylbZW;e%;PqhPV@JW-|!NAJ3Rjz>#b|(=W zhv26T^SscnR75+t#^zi9R6hCN$`7JmE?3^8T=`=pEmiOj<?n$(c@LP1Wc^Dye)c4T z;n3~+Q@8EEb@#PZE50lDE?2&U%HOk0rsXTkm3s%MdjFvu|4hbr<^DgF=R)X@RgwQR zJfK{6JL+EfLpT1C4Gpgp5TH_H{eD?qM~dn!SSWlPA~dc}kM(hwsA=<X_&7wOt?i(? zpv8r;hK>=pZ5#qreHftjILv08z#c27Iz(Z|W51ayFPgMFXJRLtD<pLg668ri0=D`U z4t0xsA8WM?9AhgcwHE@yAT~nvK~Hnw6|M*f6E(lq@NtM{V8BP4K{Eb0Ch04}S+qk7 zur~>0BS00+DAC!$fB)7kTk2uiy<?A=)-QZt0v6YtPYCBZDm$%Qx(XsC7^lJ!;e<;o z0ecvpYb=Y@L@FghM|o?e-OuKPpRJK>X#$yp5d#^%@y~C)KLKCHe@l>95B-2Nc4|st z-o1IhR5zW6t^n2USKrjJC$Vrgn2LW+o@lb&qOpb@Ga)no_+4PkzXZy!aZ+eE!M*}j zs+)2w)yig4Y&W6t?_GVGNx9vG+Es7>W2%H6Ne5e~>LBI-fA2Z-Tcor!Kya`=fpq^A zFEskoOonG$>yRrz^~F^!)d&?TOWgtl1I1#npjhA}V^65dOmcLzp>xttolWRz-*p<9 zPJOQ7EVolBaL2YH4E<|_6l*?TmouGl%l7`E^_Qjh5ScYv6)^Q*YX7Sl+fnNMA7(^y zS}IG-T{9-WrYO4@$DNGP4KLYmj>-Az#}?})>JQKPu>emoc+c>1`=ro7!AubczSw(u zzt-sRZ!DY#mHO%rm;F$&lQ)C!D#~fNa$vy42yTBUivNv~iXuHQT~%MIrvc??#R23Z zUSjj{n_7x;H<%_#8A1hVdXQkIKN{6zf$lZAWSypE)Aa$eQGsv`@cRm5{7^oPyi~br z7&~jBrpfOc{`2E<Y=8XdASbrJz6@WTLHth8d`6LkV4<r1KR7uBy2e^k{Scvwz5@>b zFDy+%v-wWDkC<Jc`vdEzp?#5;%cW{)Kd|Z=n)7$Lz8cyO?4~odwD?Z5(a?Z(4iT#9 zOQh*VYe}O+kU@r)d{g%fP@Yre33z|}|44fi@S3jgeLQDp5Ru455<x^n5CkD;3_*|> z!_{bvK}$(vZWE<Mq7f2T3`MuGC~dV>RW+n-N=%`~P-<#5ihj1SD2kH&-?jHS_ufSM z{du0h=efD=9@cvI+H0*no^{@Jr?cxMv|*TC`$(>K$2{}O>%z28e7CH`H_A$ku}@4j z&YHsQQ;ozrWhGWDEAfe|fr)y{a?iNG0CT*AEINA_m{cxK<ljVd?K+P)iPI{3$^Gvy z?8|*{lLy3U0V-#*ea=w(oKE&R4efI(+UGpFVMpx(e6$tMUi+L+?Q`ba=e%v7Gw24t z8>a=PZfvfZa?;RO@%wV_s;>b~^4B@_749s5EmU7ZeRXt^iCffHcscniPkn{D%3p`n z*Oc<|*E02$Bfl)gt-v(`pDxYurzbwI;xiDR;rNWkXFNX1_)Nzq9iO@QEW&45bB)hz z<lKx;+~(rKn-0+2t3Jm51!h=}rO8D-Ae$4Lsu%N`12q5C=>anH0a=uofh8@eq56kD z#`Yy_GCSshc>cTy<4!HQf%V{E)B|@EH;dl?UH%xA-(W58C(HZ4P(IblU^P{^Wvvh* zE8MB}pMb_u`4&L00JW3lcfD91+roFz1~C{uEg?^qziSpt^@1a0Q%khen+Vgj9z~e$ zYna8T5`=RGfZIOQiWPsl!#BsfCNhf9=8)wmZe1=a&g$$ma3J>5{p0$J!Poezfm-!? z9j;+i9pQ?rT~6YyKQRyK=#<r&j;-CyqAo_Sf%s+F$JY(U&I<a@ty2GtN6DTdkcv)m z6}{byIid%KI~HJV-Di+in`K<(IYYGmZeZIVx0gKY7xQZI+Gzf4pypBG>Qz<ERH2v; z8iHym*fv=@1l77;p=v`NPu7*?lUeY6zA#=3@!yQuy7=ZI>e00<oRovGgC)f^?9@S* zqviR9c&&-==6glO{o~|jdIC8J7`Zt8dl8+`*5naGHTU3Op}^U_ef8>86N}Y2*Q_}A ztT<C<v{zQ8%)U;d>pebcC|2{Shc$1$WT;lT;%VDjffknAhH5=0&=_;M0!}1Ft1IMC zS}s8fq;lDA^hPIOrSZ^K`^9C3Jbon{A{CvLKEu~xU{d+w$-ZKA5Soxa%GW{Of-qq# zrydX8<KoPh57R0+`UMs9uZC%Ul`a87mLv6Ng}DA^k#>u3I)<IB!p$zurhB5$O*tC! zdrkk~&rWH+71z|YrIr7KhY!~pr+WW`CV+;?;z7;G!qJp#RyU`cEG%z5CFsMj)W>zJ zkgzY&DaU^?`eg69BJBS|jm6<R(4jY<Iapd!0Z5{4oX7=T%iTDUR}A_C6ABIan>wKT zWR0wr%XozlljS(>Et;Ly;fHDcHvCD$qa8`*u;q0e$wWS$rl|Si<gfhRBrVVj{JRtX z`d0o;@9^l?wdSVYfe;+kxB|r$17&%-d*sxGZkIaHGyqLacFv(QFs!>=&Dp(!#MRqC zPdh}o5RCbwI7hpUsvKzz%7lnKl;M^BX5KvDI&<MpZ)jeri)1;Qe1K~*;c9jkatRQf zAChhy%EHy5ysW5a*wk|+dtU}$Bj!P!_4$R>r=g08s-Q3ACC)=)-=m`9_<dn{Ru)jI zw1|9&$RW9MLXYkdnknCzerlqPCop3UwVpb_S{}5~o;lEjfjL`{K`cR|FZC5N#v=n) z8CE>xm*3F3*X(`^4u<NBZ!u1$*QNhDK%CD+05+$(j?i9dmsZKm)Y>(vQhJ_i#N8@x zrsVrMhp;n)YuX*1?6`slv?wRkQ<knsrPC_$??-60d{%%o@(xD2N;B^3YH?b6l=Htv zXf;gWm*t*u6ko)&R~77|ROe||FkZA7skN?;^tovd@OM^Tsvj-|9DfW_lS4BeC1D{f z;!hXBAUFP2#4DLyz4+#lTDeB`iCNcRNYv93Y8KOe!_WMI(9e76qk|nRT|<nV*MH-M zBemd;t_8aE$b20V)?yJweYOdL!h%e1A@Yz|?CoGzSSC0X@NREvO&yae7xVYt)M|EF z0d>%C;j5Lu-4*<sH7riq!OJR`BF$MICM*hyy-gqpM69^LB2&_zxV?R0apab|-NAAl zm7x{EIV={zuG@N5$sLtc@hnBpt{;vb-J;QO0KJCHMJ*a!S87!qo$(*MW~v&WI7(~a zx{s80wP!J3H%jZ^xCRb=#YZ?gbQ`S=^m&A}29}(`mZ<${Q=A-dmFAGRc%M%lt)+zy zS9w0gQAaID#7N8_(_`|AEw3HD4zEZjgSZTQPPCyuh{_Z7Zj<#U@U-JD&TqL}*j$Iq zNOwyoC;Ik?-`hgJ2nn=vqg<&C_#c@lZuw{TwQh182GOZnf3X{rT1x?}^i)zc+CsG) zZghOEOQut^==8s|<cGs7dxysF6PvE_lO36N%S5l7f2onJ3yO-vE@Fc?R&=ECD`Gn2 z|J_*p$%=oLm2y|q`U9yku4Xa59PZF;)~fbBi7EpJ(v|N({i1haR{T|SRy;1^UUh&Q z!G&+SgDQfdBl?AJqAGn_oali~LYUAkvBg9Bu%OfY^4D6E=Jl4K%A^xkI8!hRTOuYB zoZ&V&{V`@sIG<uGQ^J`8Eq^IE!!Zo%aEPi7=Y6c&B^=x#CYL(oX9cG(!TJ2S70wnK zrX!LF&PW@a1%*1COW0hOa2~(}Ukc7LOo(+jL{*3LeI*@EfP%B+l!7yz;9Ndtg(IL) zmWU|?C&32iAO?6T9UlWuHH?Ta1*d>^O4RLqqN>BWZ_?om03Ar@=t;gOO>4r(9Ms&{ z(W-pWL7am4sqfAstHSRY_jlp?KO@XXjsg-*Q!G*LxOrQgY$8_+Ydz?)7UjiJ>48Mx z$)aNHoGg94oEKj>RCB^Q=rOrbV@;{w(kuCeb&XD?0Af>91AW4w7qsjF0cke(+9tau zxzi;B@D`C$y7o&tRmjpC4^t(16epK=6@D0|q2*jVfekEV8)pL;QylkLfdNC>47dSj zu@{5I+-PS705{u_BM$zH)~n49q=1M4AOW^v&_FV+e`IUql_kti;z+A)>oPw7j8;iq zFG6OM(|qO`&ENXl<upHeMyp;;3N#H}M&y(@Xs+|~&$QaA%5NoV<*ju-|Cwlb^LAr2 z*D6CX%91xXIuAnQxxZ;Yy568J{1K)$^ODxa-Q<fShrsM;_Pv)cKX^&2mAVE4epXa& zVv_-*vZ8XtH{?Pb;J>1BvZHd${Y5JBv3r&kwIn-gmF0+8bRkYq0L;@dK~0Z&M#i@) zD{7ng<`C)bw!~12R%{N)jM@TM8HOiHZqc?K?tg5;WuVNcbD|#Y6sFuVS)$Gz<eyy8 zsyFw`j@m%9Pd_LsR(FT~{E4LZm}bA(F&nZ{=7|oVo*k8EIbjwbITrJKS2XX}Go#kF zP1%&}VTlSdznbmNvSPN~jJCw!d9M)16ZioDuL@6)Do);l=e>%PgXt!UcrJm?Bbe?4 zWbPqAdB+h4CMcKb9*#$0@Mz6Bapn+jR;V>+>kjd?SGCtY7h@7ccOrblBz|tXhJAVy z551;UW1k%3rpubYXCstJ-ya%Qd^3nh^N7n@wF>btdsLGNuV2<`c{t{qU+s%Vn`1@r zF+TsY78JDc7g;eoCXYrLu^xWO7;ZTEsC+T&4;pRGyCsI_G+c^a{rmtg9HV)&FR$=> zH?%61XJh=p{hM5oiHTijEC;IcwYN2Ix5fKGiVYA)f1>&|sr~?}Uth1^K(Fs))OS(! z;T2^4N>txzfaqbXKbz`*vS0E447iB@`xq@H|5>mj@E@tyU$9TrKXgd)?*RU1sD2&L z4ZDbEnXvG|csHnZt>m~wUs0FFtGffUl3i=ZKf^?*8TRIcgF&0!;(2$ps)5o{?!m?| zsehF93ZA%0!rD1kJl(69g-K?$`S3c-xh>AZPSbKC&IQgev4RDz%oW;&CpPJMJi|lL ztTpE<eAd3iq@3Cx0%2Q+Vm@N5)}-yb7}d~$*AaBcAv-FK4%w>yg(PVQ4bTqV4$@#J zViq7+Vqh;@%;Jyd{ODM%dbcxJO(@O&=LR%8J0_D<8)v$msjyErp0Y})2jfie#UCsZ zUiFK`4%TW6c$ld~hj(?tEailleT6p}r&X&o3!A_<1JdyDu}mIvg%22~jqOn58EN_k z%L&kS47(_<VSt*I=b6zI(^5;+p{%H7)++lT<hfm)Gov<wb#d}Wv+%sb9mnHn*w>dg z7_Y@NZKq1KiTWxzL@DAS!Jvqp6(yhvgZ)c(qN-~#|75(DI%eqwv?hMT%|t?<i2(`d zCs~<J#L(}#qpP!-nk(|4B{Z<Pz0=wfvnu^b&~)eGsI@n}v6zuAd~O=aBGV;0GAm{k zwdre3biG?tOr#rQDzjh$+*bv~qlF=%2XZ)HGIyA>wC*<Nl6^!A8lX-{ujUe+mAp|1 zbRAHpr>t`D%s@CN2O_x#x&gGUEXixFfIkH_NU2R!VY076&|7?o%2a+4mFJBoYIQok zfnv6HZN=nJwJSumE5)O%rbO#>Lg1Sh;_6)^ZwbIN!w<b>H0LR%0}{aPq-s`F*M8?G zCSpYUA9M=x54#A_IN&xx{1UMjhwx}bc=#}-Fkc$=ZzenEyEM94)yVk3$heVQA>XC3 z<wUetrpTdb=m?_H4l=Sbech-~m|Rtf!d;9;4H88R<|-2=X}*!oRmBJcehpNz31$pw zzU*+n^nYDb+^kaRtoN?-9e!w%R?F=a`PrzoV%Pbda99(yax=&nTR!0l?`REE8wkVj z+Wu%5UiL(s0cAyHip4*mYD^}%R&ftYO&F_wuf&Y?)SdqsR%p5^tuRfu!XZ=*R(RT+ zkU&=0%dkSr_UWK(IT4#5^|6E41P@selIdVHaOtnSR+3gdb?UErKix?7#M8YF5NP&9 zO-zF-gyoGo=n^_5J)dPpt%tO-l4rq5z!pVMPy?}egIEiL$m!(nkZOBWCg}#LV$F?W z9!9a-N#1(*R5>9YWA!aH<yLZeRAM*zktD5uhaWMb7AH&dkuG5l{HV<(<Yq-JwD$0u zib7`8EXbiad6pTI0seY2TtY8jJ|`J2;S#J{@>plMgj}%!8y0X0L<wxqVDDYB6W_sg zI!@M7o4oQf8QUu55*j+lCJ(hTtqhX7hMYEwH?Hw5leGXp62CJ1C8QebHE|uCPQo}* z%x|GY>Q}`@Bs;6!e|TQ@dkMS$<qXnnc0WtZ1rb0=Pg!DT_ahV~*uBj=b^|rp(9_E9 z*K55+jE*3T%5%%RTAfrU6tjWvM=AyN_IU?(zXbk_?Eb};2<RZS<aiOaAZhE|sP*WO zS>&TBd8bS+=>=9n#uCn7c3xo4xl}#%j%UVSaANr`6UmITKp$N|USYlT3YlW0q-paC zF$TTTUZI7NVe<-Y6geRCS5)8?R;lg_K%%2j<Fs-M=&JI11OLL%H$|%!dHT8RDyviY z5!P*!ng{JRN~sx6K^K{H3Ly8{pS<2wt#SELw9d^Fv8Tu<Bx<~1wpOF**qlS;8otFy zgw=^9-VgT<NE4&HVre8kyB+C|;SA(?&_{o9(==?ue+L7?2z<J)#bh~@5KZ<Tf<G8@ zE%6I6_9ic}>?8Xe@vj8lK0KP7>2c8u`h?{{n<x^SW22kCa@jyR&5fKJ$)<eA#@U@U zJR=PXVNeN6if^LZ%>Ox5bZ{7)6+dq#Hae$i&4ygWjt3bcosSy~@-Ur|3{EFc+yWAC z7@1M4#9rEZ0I1{QQ&}mwyHR0*QGr|mtzihvd#8Du>9E>ySNQPhTE`k4Fq^YLCe*O> zyjtY(FzbS^ba={tn6CK+T!e*s?ue#g88+DHcj}O~2jA(Dmh!Q~+{_SP{?Bx6WRw0V zH8*Nqc(k+4_-kU#r;L9U8284ELE&uvglDB_UwUO6fv(e*$p-Nr{%biXMjxX&;BUUy z3o#|OL}Igw?(2tQYb56u&Aj;bNVd|+Bpmkg_NiJ>D&}U1BXgcoC%1l#8d!%4agSD{ z=dz=6u?E3RC`{gk8<;i26`>chW_V?#JWDE%Wrutyz{S$pH7n{?cGN<%XpO>DtABCw zE%Da@3?5k6M7zqQ1e*AX3o;SQTpUQCTta68B@P&=Uh>ji#Zd>N-J67nW#3}O>*`=} z#BwRx-O`!1eWE>X{?CFZ;opVd4J+>7U-Z3B+ch;mi1SHJ?3L4&qah!`v0IXZNMU1q zEhzz6QCqTNHesggIk#N9MoCWX8Yer4UF?jB?L|wZS6$Ma2nSq-O0JpRnYGP-*C(xA zt<YrC+<vvRw5L;&oYS5TNM<CDZSbJ*r)pL@i`Elrb+!!)JaHoRD>5KsITnWnj=mm? zr2$o6kEuJDaxG+u$u(y?wKrQT^(WJa*(4b-Fi;a&udksf#u9B?R!XiI2M+oY?Wm-A z+GI(g2jU$;FvXmQ=A|ZeoRv4D9ca`1%#<0Gd$R!&8hP$IWXW%|ukE3C0*aG!8{GrC zL@iFV*bItYwX|@D8O-vS>L;JHq-?T82{eg6X1L$Fq$jJ{qdsN=YGw9FwnWQ{GFc*> zvZB0<m0hg4c#>0bvzzgHOJx(0nCyjSVNV19a}{mAE#iwDwOY-0<&tuQhCRAj=Y{ep zOp>7T_qI|o>$<MW;0E!zj{DF6oKndJ-bO6&cB2qZ+u@qFSX{GWOxRXVA06P3K01iv zn7~hYiB5{0vG$9|#~Mc8YHWu8W9{cJmos0`Il)xYp|`)JB6KY9-X1<VRjcPw1-?%0 z@QbWG{&}j_t=t`Sf*AQVSzLpd#1=W5sOGm{fMC3P+nRJXk=#TbV#MT$uTP;ZSkIsX z<qk_?2eWt&z5q4?T;jXWvE&#)EZxQXd3=1D=Ii+;Jb6}ES9z=;R`2FZ)3mzf>JrnH zn`xJ6WSwIC7&x$Nda?72t8v(!|4aV192$(v7H-%GP58Au?>1AbQ+fODqT*q+Te2^K zA_0i+zL#dh3;mrcra~4D;$2zw#gmS~sEIDYb}+8<U_y#r5Ky7Dob?}sc7>XLYa=!B zF4jUAD!kGQnI#3I#oeUWGA<^!z{>L)WKBmEp0Vg$Yzj9x1X10+nTi$WcN9)TeEU6= zALop5@P*)Wv!+U3h2&VQ<#uC;io>1>O?e<Tut_h3^D!mGfkAUT`IAANc^8}YNfl}j z#glJ-*gvE7tK1(Iuj$kuQ%^|hv~4Qdr|RUtJ+8=~m-!$sx6Tn*$w4PyzZ7}e&XeS6 zzf=74odUnYN?s-xBALL`qKLpxv!k9g5tRElLo~+@@P_F)p_j|<O*v}WP3}c*UWzoG zb{#8i+S3$o>9nUq@I>25(N0gf>yQ+ygYFOKYA=(c258#C7WH+)hcVJXCY>O1nQqc4 zr*2V{zm)kVs8lSxJ5*r^R+svJPu-^$#=G~&V;W~~a*tVB)$-3^aTt!8eo4l$6!$8f zTq|PV&{I76lpmj^)vhgf6O;YWRaJ3~(bscFx$GF6O?!Y}*YrDD@*Upr4d%}qOk|ZE zfBw3Nx1Y!YBd`HjJlR#8fhg(ml4J7QOB}#Asijpb<u+nM`DNCV6go)d6OL=uD+Wn* z#tDH)f<Z6t`$sU&`kY@?o1RZFpD?y7;6I1E<0zzg-oCk!?l@8FNV}7`r;exmUCEHe zI}iajI!f$tB(}?G4z^<2WnM4`C)864c<tGmZ<Q_>%cwiEV{+iopbn?k^S&8cwJKrf z2|HYXyX9_nl$Tl5y2(>A@JPtdyZNL{t=R{0E^Z*2NJP^L715LvifH$(rHG#YSQ7OL z$E>jg(V!be{O)|#n*F*<r|L{pKPIYkf0tAp=NvEM3l^{%p?$ug+P;{s?8m3TECymO zVFhmj_~YwnAo9Xyl)Gqsop;F8LfOARO3Fm`0+HQ(Ns;~Xm`?T`bZrT;Df$R1WkO`{ zueFhl7m92xNw&52HvckHYw7iCo<U>_u;rPB`;j6(W)Z7i<$nM<@O*skKm*vc|MA*c zcy6P{A>PrVh0C2Pr+%ae^XG!nEhvJ5vrSR*I9$YgFJ`_haW%g;SMzer{IiIsE@rJ* z@WC=EJlR!>!tGN!g?Cpe3QMo)6k6sJg|@DhmqRkoE)?;ni&+g;^b=oe(W<vSv<ZZy za^x!I7_gcIanu}V?SeeA>^F00cp%SrSE|a!t3`b564r!``OYf)9>l@_f|7lWpOoyI zU%_xzLiQ%2XXqp7S)PjFt8CIga)qCqr-iY(Ig)UNqv+N5iE_L1igN2iI%Tai<tiXk zit>z=Hp<ukP?R_Bl$70%VlVIlQ66-zh_CvP1=jl&4mUeyNnZ>QJq}W<X)k<;P8FUE zc_L>8A2(m~O>K*XL3Y$yyDf+m%w6>dC37${V%X#`2K%)%H5Y$uGk)iY&*9}zowgf) zyHui{qnKT)-WRBso^lk!LJrMsa?FV=o2PK*+TgRVOSYJ%7Gf%j-<+8K<|?!$joOl! zU&J?aR;OM=jP$B6GL?C?IAPRJL*LT6X5;cAzGWU>SpIJzU$;ODW(T%QX?+kE$qPp~ zJ8{3Qtb(Ka<s!c4Ec4>;FVt%D*B5G$F6p;=k%EVwVBP_KmM3_iF~J>6FANQ{Nr3w) z8ql`Hj%M)y(r&hgRq<{DgR;at!(_~|FYFlZ>5ATYMf_wQYY3CGr{k*V6rnHe=!`Y! zd<t_aNhg1|q*Ip{|HNEDtjST<i}yRsf^peC1z+w9LGj$l-x0PV&6j_3nDu58eYtjo zy<U0oGJ{EG;#jlz;+G<xbc6+Xw}zoeCS5G~3hX~W7V*!Iuvv=!>=$Tu{O}m7NOVod z*c+A8KP*9a#c7>x1Ddmu5Uh0n_d^k1c!JgWAg-r!99^Vbk2CM^XBa@Sda*nqIsSyH z2xOXz>8dX#p)^g3?JpdEC@qXSpa-G)D`G|`)vD&Cq<Y#4O!iKvpY`6Ej;V<R*23r= z%!MSd(u5oop>8D!?SMy;-Fz3CUXqYW5vn(~-U?XXP0W2P=PfB-7~CvTzF9F_{^{!F z(9r=0Rk_KvEwA}m!aR4JdKFV|4FA;1zLq1!aadz*xsK4+nAC2ggQEkqVJPkO><941 z*)iMT)n8deiNb+aM!Z&C%_r!%IjNjj4%5BqEYA}#j+_&@@Of%do+rk9S;U7Gu%@P5 zwRiwOO!NcS74eS>m|s1Nz;v911y)QB7K4bylY`?atQlfOCyx0FEfA8o@WKM-TkQbG z6eu^XcgQUBsHgMASDSF<<0Ko*x75>|Dywmwnl8t67wELKtB)6I0ae^E8e-aGUH(7a zQpBHKV2yZ08%KBE<u_KP4JH9<){y9$GnJ&dW&xIhkLXA@##Pk0h#wcTlAm?PnSLCO zW5fraU|t{pOw|8{H(7*9!qgqS?;<=TJ@q(GUZe$7?~l$HI50ZB$a%&Ex(C28w1J06 zUQDy8P~LGO?sau&<5-h-{GEBG&V<9nlOVXH-DpqSgOgKn){~I!)S7}Ynh`KS1g?=g zVg2N@3r-fFo6Pcy{{M>j|8az%YP2t@3KpZ)@u}u`5HY}{)NrK;XC?jdIEe)SaK)>) zio8hC8WF59-^tYhYYN|?gXNWe`3&Qx&A1OFpP=n?USF73azWexOJ6^3zQ?@lRkK8f z79&nxfTdD)CoN0E#f?nnxg+nUJ58l3;eY1hSKSxC{znx$VHj@WU$=1#jI?O+#l!v7 zrSHf9OWz>6<&iZhz>@5qH7N+E)J9A!i_F#Uubhu^?b{a*ONeW8`Q1g>P|TZ4%3$2d zIVyTUuwi-X-pIPUm=9xJ66Q>y-HHor7kAceM2<>Maz=>~dE5SvJlEwVDOOe!RH)m! zC3-cUw**lEaz4N@qhA3(@qy;!y3EMB{Q*3G7nRy}zl{$L-^l`XB#Bdsy}fXsr@8IQ z7Zzs3W0gT@(PAy2{JKqcKZ8;oBsO=wwRVk?Rnu(T%ISRKi|Yn~jlSq3`m?NsP$bET z#8T`XiZa&aA(hH3t5k4m>0<Njic!-HdLi}&kFLwH7Q>aNLMcyTl50!Gg*ihs3hTN& zTPEtr{yyp<n^~aeP%rp0uL3@7InI5~S<BnuXkm|I-BD{1f>G=pj@+<Q`uc+a{fYvp zU4}9(v{fzHkveW~=3BrgF4cS*-71rY#UpbfE_MAh)kD<4!~vHDk-)!MipzzoFa{KR zw*wYS%Z~K-aY8PV`WOGAa3ma}U+bxJtx2b45_P3D>8ebkezPV$kV(`>)+FC*M2lKu zB&8;V$TZSzBQ2qeOd_4OCJmQKq@C8JDKcrTebQQ)w81_pS0<4)S}UHDNt<L+s@}@G zGHr`}G1uw@mTc9ixt=sBA(+yQqy)1pMY?27nkbV<gRDuJGKuWbnzU9Xr5>_R+a}XU zQLM$z$s|%bYtmzxblN^Cpax+jCA606B9o*}8C^MCCKcM3N==h#SMAf*$|PZ*lp~X* zav8)<%cQ&Zr5?zn2X;y8ALB=Y$<JP5q4aD0GgYdo^qdL3WSaCZ2K@w?<U}q<Pa3w~ zbvd7~OxqSnRLiy$k_vTc3F~wvC6TGqmumqPsh3r^Csim;=GqEe*x9{YbFL8p{g-|S z)(C&OPKqE|`aAyna?PiL1f47^f4D-cnkvziX|YlWW#*7}>fB#&JLCmqSCm;(cAR~V zk91b3)OQ`J5luv7D>tpcwaQlpYrerASnXSivdW1JEOBsAOdP_f9QIS|0j{1)_GI;O z#g<>gSg~Lwe|NAp+tdy1$5xwj>*Qxi6-Ceq?lD9Qahi-O{NxI)sh>9{gvw82kE6tm z&klLqZzbH}<s9B>rB;VI<nh5PwT5jEV`}A?mzH93NNS`4SO>|F*psjI74KlafP2e; z;Cy{KEvk$-+wlmr9k-U}t<=KW4*5R_INK3uRGNTTLj(f3d6ibhF>!4X-}N^O;Imh0 zRoTECzGjuy#c>|C0c@%KTV89m){foW$+xUV92|2NzqDGb<{sr9fz#&H$<Ei8={e6c zDd+8SU(&Q~UM^odO6$nxf5(@9q|NmC7i%~if`%9uS>3RV3!KG6*J!gsUsrkhMb=H2 zryCbpf5+yOn#i6Lb+M44i>#Ga(9G>Ex*Bvva{6B9v{P~Ffcm95l{=s~eFAYHPv?|R zQyBfqYza=7_)AX9tek4Bq&DU7{vRV=O4fG%(Z^bb&wcE|fLcSNO>{Z8S{iS?UVFd! zAeHB<F6Vx-Lvg|>39jc}uxpjy62;5)L*g}tS`|yYX6{hDW_+u7H3Egwy#CHpybzR$ z@^oI?X8#wjN?1rxyPnIr?-*YABj&ydpK5+%o=&6PaTDfqX)~HQ$?N&=I$ELwVkzX( zZ!(i2d8Ex~>XfsgzMF|MgJfo&%=AU1Ed2D`f#N<Zi;73dXso_Qk|UDR_Xi=h;xJx# znjvgc6}9LJrKMotXIlNR)hno4XLs5qvqU4-lO#3=sdBC5i@b_zo%-fSNW)dA7K{6S zU0sslyC1NMj&;5(;sp<wPk7B4SV)Q;@1a;S7NR)1!a@><XX4=$%2<tz*!~Gi>f#BM zXm>FmKe2~^bF{^U&x7dkjdHy1My*Qo*6&E6<g7x2Nh|}Y)!odZwoLcRSu4|<s`OrF zQT`pCxKW$f<^E0>aAJjl*jbw9`}ZewCF~<?Dx1ZOx5=_&+_O5nih0mIvlxpMwE3V@ z(5iYkyo;v-!-i&cHt|Z|IM-CqIz)c14P!s<;U9mlbz>FZ=C?lA>a)Gmxc3*Z%30HR z>=#;p)@T|}`x1_3$|roqmk6_S{XKr?3pkwinR4Z@c<q%ce8Lx6Th{+QRdB-wRnS{6 zm^jB)u<9o52NtoFpWdXkbA5j??c=&SaC1Ix%Z7ZVZD11?@`{_aAb#N?^I;!Pq92o* zSx9T&oj~g|dBJ-|2E-q6730)*8*v_?U+|8fN&V?+7MnihTQ+OHeb;58$v9L0f8OsN zg{>a_$}kbtuMB5yMRi)&-J$J_eDTIR@&<FW9faoV@m4fDW)Yfggl2;c&C)a-&DBp7 znw}{3QfR0{bu>g&N0W#3twd8#p;_@ZzxSioG?c*nZ=4m(opb`TpTG>qA6+!ZQgtwX zIv6iFyq5y=%V$<FL{ta!7#>K18H#O1i00HJB^vitKvT<xrk+HzgwTZB&^Q}t`fX66 zaa{P4Xe!#!5K$dXsDb7~wQJxuiO<{((GZyaW38eY`aX$f7J<pJ^-}~4T58R_^$N^# z__&u6P4uT$(GXD`Ov2Z?XpWOo<%>=em1y1|Gz-R9(R@hS8j(h5Hrdc5r|4+*e@tkq znO{~iGq6{oD-F@q!K}qHU-pxW0`uMkUTKdmnS+T|EXPS#BMuRkk@%x4%~#WPEYH>{ z$+RJAFJn(THdw(BQ60>=uXHf&Nx}2Q*6~U*IV73lx2$MfB${P}rkxGVH4Fx_pIYc> z=D>Np6q-Bht!Rj-j>cr5nM^vBFK&!eXs!^NS8Qn7ld?t}B{T^(G&K!0W7jI#ELiiB zXzJO}5K$dXHyE|-sLiBQ`65t9Q*kxWOh~ZGW-@7O#41A5(T3(V8ji^GZCInwM7;Tu zXoh}_n(AQ*BC4ZFgH=m3f09<^i$P<RY+4hV&qiC(Y$k1uC?GUrZD_Km>S%ubNTFev z^So3~eTefa9SsrH(d59YB^rN)=7TW`%}7G?`zR}#KS^IB))Ja7HZ%t?E=$>X>1bX< zjh8}m9CKYA4H4DR+=V4cG;yTl`QmV*LbHI-RJEb;muSurnj{;V=kMxhdaYKn`F7Gv zqH(dIA)-2(U<1v3QmcHybTr=+nm*71eZ-6-eT_IxXeQdwv^3DnTBU0-+VoPgX%BVR zWkW=DG{a%oQa1UdR{5gMTS_+92+f?4Rx~s%vP5hoG`(zS#!W^lX>smKg=RM9F)xK? zGR@kQ786k&%`zCaL{mg+l`q~-P-sja0nP3aRy6sfuMryvO*b2wPm*;s4^}8N0T@1B z3e9Hhkn3oOsE(!phAq*wQfR&yt<bb3H2=I|MN>rj8j(Y2`q|L@mZYNz(b1fJ*#Z1d z94P5%h^UUn)j%_z)GA;6F-oBsMQEDZ(6o|hG6_wH4UM;fX5?}uoBpuOmy(UY4Gj_1 z(R8HhG}HQ&)GA+8*U>B@G^1a)%4R(2YeX)g8DK*bgE_O*n^nscn!=a0sW_}1blDJ5 z9nBOn0zz|%)GA-R`lgaiE}>a7+=}K?($|Q2geKI6CIj<qiRLs{XnMY^znQ<niiU{l zXtuzxB^n=vX6{IZ=6{6d>@X{uOQf$6d4y(&4b6`bg+$}7qxmBBC3`A=xfKl&)zJtT zwnWpLlssST9ih-vUIR3qHZ(pG%|b%c!iMJIL>*0+50z}r%zjBUMNoIWr--PICcr>L zr=~#j^bLh3g3xpwYL!iI($|Pz3C$E6n#Km2=}Q%wSK*;vN{d_B&=64_%>Wp-l+7+u zt9;R1N0UHkQsb>?W|O`~Y$7yf8=5z<ypcV%ZHYoNGV3MLjOVDSydM$O(JX{vOEiy2 zt@1_U>q<6@3C+$SRy4avUn2?$&2$@@)mYw0G`AKjG}AGUeks{}iosq-Lqv5nhhW$e zO%sLY<KYU;E<*FyU@MwOq^}WM2u-jJ%^9pHB$^-{%`8axrO;ejYDGgtbu<nJno*?W z`QpMbzHYD9q}+8vQ-3h8y-)LNY7WBX`{-b?iCkd5m;&YAYbyOp7hI|HT8m1*4w98B zg#@Zf4<Ig7YCMeh-lv^nV>oYf0P!2|eMB)Rs(cuyIq}5(cwEjkk*_|WHLlnOo^7BR z`>VL{)L{%2^5(Y>AW~(8G2A_0Ys|krfL*j-rztXr#+4%T?G#1kuQVH(tR;42URy$B zBFp_+3tIv2t>8RgYs6FYwMykSQpzhbC9GUQ9sFpxfuGFR>XqA68$X_}rysR=;dAEZ zIwSxod#4xi%da?j@!y^^4_6Z<eX>kX8ha3-Eg#fTPtz9ER^Prs>idEIyM_MS6v&?( z)M~m8haWxYQV_)b4{3E=TgqPx<*ypN;vvn|_03sSU{jzf&_@0m8_3rj()?L~&g@x$ zVv?YKr*;8&>v1D`sRQ-W#eV3OvLE5yKrLTK^H~_~K=}x-euSpJKq8SyEc<T~X(X@K zKnD`3e+?*;#!{m3T4@^cJo})F3A;vOu~NyeslIVqYK4$T)qVb>`Yq_5$cdHw*~9_7 z!eK42LKo0XABD)h6W-<FhqXEtuA;+aLifIW)L|_&bt4jt%XD<whVxzhJxjU&nNwh& zBOmuAYY|W3&PzPJEVIZaL<P9F5?S(?|N9k1sT3?j{@|Du;{Pu^8I8BdKs~5`0x;+d zEJ5X{ylRMisjLoV=BLjvA=(P*E`?xm7Z)&C45S$1C+R<_CFzl<K~vQs<yLh*GwOUq z|9P=WNznh-FPpTEXOKwb8*lV0k+!^VWgb04ZJ#A2xgXB31OQn}W_?~d>;DO4L!DH} z^%f-mB1x&w7qQBIF-vOd8hH8_v!oVo!uq*%7H)(dbRl&VL&$p@*<F-!qY<(Isi$aX zUqIy-Hxu<J^#uiyP2{f~!@Z2_EBI7=SNimQ?0njS=X4uE!E+jVUV-uG5j$-6Opjsk zRBreEY<1662HD|lj%yX`KV3q`RO;b+g#K|_R|cgJxNt>jCWchHv1+4KVHl<sIwfv8 zfz8xY<9Wjqi0D)OgjSJ_AG#AiDrw9+mPZu8(O+K5;|jDol^$XafNFGL4FL&<Av@<5 zXbrV$V;0#iz{-O&SKOKTyEhJv)}7R<RND(EhDlqqYs0H?&r`U9R{fM#qnb3>b*V+A z9<k5v#}}T~{HjTPT85>5$tUm!^ef{D{3iWMJ;mRTp5piQ6cb_eRG*&R|2<a4DXN)i zOZ!ewYla1fQEsuG*28Q|8yCyR|BNTLjhF(_u_YP$m-_wa)sp$gOa1<|)bAOus;~o6 zCc`iYlx%d*SCvd;cEcC4ee`T8vf6K!u6?<$okVXz4@wf>)VB<YzTdZG0|u4)-MrLq zx4x<Yaui#HIaEm=XUz(NwCGV-RhP{ESkIPLZGst;%pRv_OUrh|`ln=eI0E>`Y1KW& zR(K!EqTcp2tKR-@x-IQ`pOU?}w@=ANt|;~U?LPdivv@Z}N)mr^R_n^sa&da{=UD{X zUptUema;Q*_~mm5bz?f<<jgmp)0(kaG9|EFU0A4iKbuEf(9Ep=7{1_wR>PwWc3<%f z6i#h&d`|G47qoh&?t|%o#+}9=%)Gqj@!J=)TGiKflY=krtjU4tszqLTa}c9u=y#>+ zxFx#hL=%rb^AwN6QxuP{Fk94lbT3dmE<uxRJg{FRd5r5?g2xK%#)6rH2uqPX_}cGS zJ=_!ZqC>0+7x4~)?LGLyi<+-fC`$6$4_P%Hu+h=Q(V8Ep=bwb{RrxX;U&CLu8f;;A zzVKJA9-r{GvkR9gUAyl@%5|;W9BRdg={)U{*7n7?7%@@vs6E!W82yL9A=$^psEd4g z8`g-6aRczw-9jJC<miSm=KV4*M*sGF{1v<uq;VfU{C6#+K{86JN2q#XC1!nuN=CUT zjG!C8GRno^(fsZet-V(yBwI3mMbjy~Tp{jWIZsjXDNepC<5RGuk^E4h7R_#tm$4{V z<47KQ83$LNjOPO`Yc1G>@ha5B=N$<<?i{L66Yb-Sn~mp0aXL9(QELF5oL+QGOvw3- z<P<#RzvScww`M0NKTO|B$mzzMQgZql+X6~X7dw=clV2Mpr|pB3oZ6tIlGFJ%rRDTV zYpa}I8?5Bi3WZ9_DX5K-)6>>UPWi2soF+|Ea@v=m<Wzo|lGC&VC8wwaC8rEb5A5XR z_^M4#Utv`QIbDt2S?N!$qBgwd$B@$5R!Bq;zeko!xJHR<j-6Y-lH4J&g*c0u>p)y} z#3f7IdGM#x%WYT;<6dd5*n#Cb)_9%c%wlCU{(ILhn8m)9;E2c_&)QIT_>I6pc28n7 z;J+9Rc#%;{gV8HCMl<`AV$?-vl%g0_NF0*$0WsSBHg5B3j@8+jSRN@bK<^*P2MMiu z_m%Mw%_uya={Q)QqrO9vk7x=$Xhh^-NfokVmZe{LE<S7lZ-@vT(%;Z!+Fk&FCsssw zUuswg@w-L*?oQJAx#;{Jj!^uL!v3uM<eYcI%>U+hFsu~66ig9_-&<zMZyW^Kcs=;F z1u*I{ib8_^>Vps@Jrlc#2=ugl2$Fi#W4;((WRF$XvEW)hqMXRJ;h&ge7|qrLk<<hR z>btmb{>=?7FmW*P`x=R5@cX838T{tKIY@r<$yY<xil1C~j>0xmDSnHZD}IMxk^IVK z5x+WNDnv_N$eBX4I2be;XaYQztTM!l2UT_%AfjI(`N$A4JE{IUyw#3E%&dppsQwI0 zY$T?%L9#xUy0X5dnX13Pm9_pgs$Wa5Ut6#L4BIQReh~x){#YW*`sJy<;{eggR=>&y z)L-39@n6$N@qf>#KV8+w(puJ^6RPUxwY2h&r1~}V`Ze|Xk1<qB{!ihjz#mI;S>IW& z-`-Y#0@Yt0s`#($t@uwi>Q7Piv6Pqf)0-;(xh<^xcTxSSp}g5&ns-1o=%2kpwIPL~ zy%GuLQGXfJrV-7vGKU6>u`#rYD8R2$eSEEnV&gB_1W_a%?@z$yZLqhCq%#s~JUnrL zNCF*uu5F2HAA@UO#WjSu=0^uRi2Po}cHxU`JLqhugi-5)=swL@VtcfSYTa>EwC5vR z_c<mVvUOj^sn*dnky^J6qYv$BywJK8jaBP@ZZ6qS>-G_w`e0v1>l&2eDqH7daCK2! zLx`(vT}8=u?2Bw4gebO+6<ccE6Jk5FvFiKuo~rMM(y&b)d-!Wocd!E^`+f}7M|h+S z&8&T2|5Ma24pH?rz5cJ5pUC=`;H05@*twDQuQyWl18wzRqxva&{nQ?c{~)9O5LF*L zKC=F3z5d!z$)6Y8(41U|z`u<Yfal#6fpZBufD5q_Ko{M3t~FEu{1pL``zfkF6@=~N zK1h$xG_8Bd-j?y1;tbjYVpV)5IU{!m(o!mH)|q8BCA77PS%c5OtPtsCF#7{DQhU{s z%zni3OiFV1tBRSN-}i<~D#dJP1J$y-O(e4lU^a!Ab!}M0L!BLcx^)G4+rS(|_7P+d zuSbJ`9GEi^ND+@kH0e)R?1tyYMBaIT7$wR36Zr!~KCgjJJ`Z!<Qsh_Dq=vL;4f%X~ z@*UfjBL8WyBL911Lhqjn@=u6-Yp}H&L}Jk|eG=V8TQIX1RYPixkHO9t?9?ElHX}OI zUYJ>M7*Q#qRn^&=VUDx_H~#VBNm^wBQGX*qY(%LtKzt#mFt*@b5<~{phO*6b%r+3T z;h}@5SnmZ8v+Jw2?}l-`2m)(+Q4K>N<d>yc_GI;SGFJU~cfh{u)p5od*B|=^SJ9W2 z#~9d6{j+;JiIDb)s4Tj^jZR5Nv<$p{F`C|D=awDqdeb>44VQq2*`Co=%}${B966Jy z#S3XG1My(u-TAubTK&{%5H0SwU7tlU!7?ZS5k05(7HmsRZ#!a$Qp*56I?*igGa71% zL3|xVCyIeAvNNWjn(gVptoUUz&QK7DsF|-BleU4`*;I_44#eY13y20n6*WYxqBgkT zmJotJ6frEsLUDfL#4}7!aC5Pn5ih8I2%l7h9d*|bzOV>uqVgm7S4G+zm4{$OYYPqZ zNVFTmYZq(POhaJyo;$m`;IXmOW)azd_b5g*k&t?PVzJhjooUEZ9&1&rx9?I^94+Ji z%tIKMqd2Qnaev+#%r`&Q(wdxvtO4j|VjQwBz%&8L775G=)^6i*y*?lE1Yv)uC7F($ z5$_AJgk;#CLSQ5Use_hYVgZ%o6`fW_(=r=ylg7NNjE@8}73s&ZGlVEohx2<+v?@N8 zRE2O${1R)(q3{NLI4Zey)M@`dkk8Oqz0~{AXd9-p5Hp>$xKT8pg?cof7Xe<xI)DJa zht9T(<`acy&M0|=O!mxZj^768x!^O(($!^D+o(H9HLS4MJHh<-r&{&8$skDqd>-im ze3EC0@{&w)M}tI*VDA5~R-O3<^EAeM+WV_2VE6;(C6IJyh<<MTdMokYVNN>F)5+eJ z6W?m$1~iKxW)0x;|J7<nCaRj&Fg;6A#U_sT>KfwkOD~eKyL4GZ>peAVD8KbDVs||t zFNV-Ng%La9v=TME$=5>}(J3;b9`StnbFFFW&rpvSji(O0kusjW0WTO&b}dlWji((t z{J)InQcuHp+z50D<LOQ`bmJLM#xuN>@jNYMJo%%Q@q9K~8P9KxmGStXN9>KKjcz>u z!YSCKRy|%B&v4y%l13@xdECz4c-F$lDdQQf8;|7`z%-2KTxsK34|i(gv3IaC9%@NR z<Jks7rXEgF#xuB-@zj4)8BcH<FtazF*hb2DJj*bivm=%9c<Ho%(~V~loTClX7Sw#f zcwPkfHM{@;oKm*&yk3U!GytEnjHmKQWjx(MvXt?ZD`h-Ck5I<5bA&RU`xs7@_`fUL zcxGTYDP=snP=}Du(Tyjel<~Ac6`MF>fk27FFdkhNhVcw&pp0iTEk|KID_YqZ&juQS z!aj%bIK}bbomfMU$MC(%OiuK`1N<J$+aunW_Cqo$i0ZjWzRrVH8L$JT)FAQ)R@<<H zA+|xJHj0xS<d_rAks0LL%peWAusQ)n@#=xu4q_HoF62-Q*YkBv?p~4ku|+lc9%ojS zeb|p*aAtK!_^5ItjB=4Rl?34Ba*|^ps@|9jlE`jjQ38TiAMR@_cq6H*)njS4WFaHk zRqV%)RAi$n$73Q>oD7r{S19a}h=}1AT$rC}ke^lLIcCwJI-lUl8nWDae5EHF#P-+V z^UJZSH5<2-mbW%5BMD6eoE*&ZBsuX~FW$(+K4|hK7E_kww40L&?KU_QpiQ*mx>Vhs z%|2g#)5Pl4BKb+<lS4gWo1+O@)e{YKPaax{HRw=R(Q0Ri$P7}JY`mo&s`9Rjj8{3T z?cL;RA`Gi>n?<gs!Cyr7<xR`uYIs2pzNHeLo_|oys+2h@NZlN*r+9`*1+iS&gHJEd znwvgGDP0dClsQ%TF3@<rOtcw#)u0~K;-pP;qvlXtx_<gd<{^_kGa~IqvKBTB_9I!% zYW$<htY)wuC_=O}kj-&G;KS|IRPj~!k_vUsm%r!6s<T{QUR;?~Yrh-HsybwdD%l;K zF*kmWwFlCmySh2%=wq1$b*R}5yYt&_tWKn}s%ag|LQ%yg25%o_jy~@g=BNuqnj<={ zRv+HC0t+oa1CALX=f*TKtg)*{g0#jZWQ{9hlr=7ZGgsEwq>^rp4?L~bh*hDq#u$`R z);QI>v^D0SxNeQl$Qld((;9~<<FQ&}qXEhq@wRGdja~hfHQvKO3bnOb<BwRnkN~XK zSPb(bi5*e}t=722R?yxWQ*6n~8h6)J*7%@XNo(}&rL6H6>?zwM{;-#_#zNg1JH{z% z+z$a`5^1x>w_wDo^Fw<oYwUz+h}9YwNF}th#zC*yvzgjcStH5s1#5hxhH7!69?BXW z6fLVY9)*7@(;5%M*O#_Nyu(3S<Coo)HBLljt4_*Lv1E;3!N5t#le;Tx^hYV1P$GIL zYb+COE4^wl<XeU{3YlEe8n<B4P{z=>JXTrbF&OKM)|e>?+1z`-SY?gjvC0}Js#<8o zE2?B^YkUU(X>GZhS++wRYPNGXWsQYhr7~KraTBW8#Bc<3X>hbzqb?A`8Vh`tHF^h0 zYh?AT))<C&Ae<#r?Bj~P;21<RKp=5p7SSyXi+sC-nnqgA;V?#sZRLviL>Ii(-Oq<r zsNTQ>9qVX0La~)97n{S|luPbT5rdj`;gLSfyX{kVl2~O~q#J_Op&!muz5@nUBZ$w+ z2-!b}Z|+X7$c)6<5qyyk^K~hxfTOM;u4S_>1eJXOs1D^yK>Y`<UOA6C;6}?u9qOAd z_E2|YbS(?&Q!fQ|A@a+Ddc?~Hbz$c+pib+opw4u&LiI?<q!~v`Lc63B?}OI^nBJuc zDFSKElYumsHsSs?S^XhP;nN`3Top)j5V@|7_(Mz4)pB?}UaZ3BBAjNLh{DPMKB<!t zymBH~dhU!SpL9b7)U0j|V$siyudB&?9S1}f@!XoMd#`WXP-V}IY(O&zTqtiPkemFj z3Ycj@_*(IMM@U0)J}#!pn#nOntqtXQUw`J!vdi-Xe^$>iy(41&`Lj;!VFW*edsS>- zYyOWvs}=AYl#1}l@F`-i3#lo>V#cJU%tcttj`et}T5OEttFA>Hi)!zhxwWyWW{KL6 z6*UVdsy(21RtQ(a`7gEDW-otuHyI9do~VNVBL0|zKgTNRt}gOvB=UO^O603Fdy&`2 zB`^~CeP?@-&nJ;5{kO>fl-g+%`BvE4e~J9VZc5}QD(WKdCo7i}xu1<dNs-4@v}<p5 z#nvkFKf5ZCpXjPY{?tPk`Kzs!$VawQBCiEcVH0_Kkg*qek}mQk(Yna1)wCD+9x_*> z*E8BGkx#2?75PN`7b1_ZCPhxqI8xM~MYUN2@4>Lbu!~U6SHg#?Sg*6RB7UMa3l4lY z98{A}BN%J^MNtXmP%6cea@r`^TI2WXuo`Y{P_92Z{(LjuK9Ko2K5{7H@qvgUbRDK6 z35eOv_@Y1-Sg8-T7I1Woz$SP?@3e?*##aTgR*shfix&62KcWP%gQ#2**rHB4u<xLr zR$wV8R|;5kCk1Re$`P=rR}?Tu5Rkwc83e@rRtng=@UV8kcDGW%Txv^T9tla9`{k_q z5=#0}OWwOV>*YBSHRy%H$Z!y2v7ud;)vVJ+PsICl9mEOPBA(jJ$|wNb?Cd4@E57)L z7uIDX+U=^N=0r~7MiWx&>@?(NW#r;7P3}eAf1Vdx<WI|?;_Z1zPN)iHx0n*#>+#fj z><5<Ggtx2D`gt!6MdtQG{E_Q|3YNdc+aY{&3s$T3ynmlVr?8!+D2NG9p6iRTPIJ@T ziCp$k)XU6Rg}=qy=`ZdSo%1T<&+D^DR{3AvF_=}YGYy^;Q<Za;_*+>Sha@B62z4;H ziq(zyd%<i;m3y!Rx;>E{vr#tUGVG~#1Lj{T4;eQnSj!)5$juE{jn3DA#~$AyG+Hed zo9OtCWM*uV*yt~?wX6a~J|PaH%{0uu)sSy)!0NJ24f&;3tVW&TI>AwG^F1@jm7`3e zoqU8-L+<wq^Np!ninFVgbE}e)Su45IUvQsPnYc#_Ix@31W=#V=^A#5D=v5h^i5kMY zc4&aRvdoKhyT|V|WOW^D-+Rt$g|mi^rpM2DuW;7XaZsBgJ|mpfZxc!m`eITzU><}T zShg2{aCU~kUo-S}>fPtGd7LL4F<eW*W>c1U(z=NM9*z~!tU!LJ5m>|r7U7-j#Nr>Y zXiY3oWJYUZ(OR<TKr9;DSkS_XSZs&uRxIE`6brfLdJ+y6ty#@hk$*kc(?e0kGSMUs z!rU_+dCscz3|J9d`G{Ez02S5o3#r5>;k-d(*0fP>Gce4^0c5Cy^P`SluE~ul(Dx_s z0x;Ry#%i$O;d4H(4Qo*Otx_3F9`ap{SxvUHD*p`xYj%046lPRgmt-Hy2?UlGeL^V0 z<q2`8E^p9;HDyV!@Ig&j{c20F0R|pjEYdWrE2x|Yd_@yh(`~1|i4#|s?`gvN2R?`4 zqIg3CQt*T4`rOWi7FwcJBi^Pdy0$*VannQD4Q}r2fElQU=ZSE-nLq&`ibX#+8N+JG z*0|10_Z@$4g6~)wtbE64_+zW@XdR|}M_WBn`i>>fU<##t$GRKJcWlQZj@DC7;xf>@ z=sWywyx=?PE8pR#`;MG)%6H6z7cvwX1j%=NRZsbj1oWM~ZDwFGqHGhs!|%U*#|g|b z$#*#32`%E0!OW-5+nDr~b{<}^HiNA=S64X?fk9u1QaO)v7>1<t*oh1~=fUbK=dq`0 zNr0DV$5ZZF!+A)6rJY9z<}v8Xi%=qR9vgy`^GFF&&ZC`9(B64WLs=`*4nfL!Xr(y& zTRFpd*o&rw^GLw-g`9_vJ;@7ol=G<ItUHhQ>PY9|_{g`2|J9HMu@k=BKb$pUw;J=F z;Vjg#4JHuMcbMQ4bl-9AZ*+Jm-%;OJH|)jF4Fi_G<Gj1>I|h3w-_ZgD$#<|@A-rd6 z;(!v;b(r81z=2%Hx%)N_hU=JzZ0R}{Ls#uw$N37n>-Y<Ls?rVD@flVHrCdi-P*L43 zT}MU*={g#AfZCMhItl}%omySTrbgV-hBd6Rp;Y?BMn!ygV{F#(M#^;rz~D)r?Oez3 zd(WloXb_-W2WH;nI;x+*PI(!wV+l@9S2kgOZinEONr4vClD?x(xGHb;9dyE@)`iM< zbiMnWw{6PW2mAj~!g+iJy-`ii6TX<x>&~O+^PTIOvbC&*JjaW;4#^wmc<$md{8E4M zEEu|;J_GN##5o>b?n>u)CY<95KR%-aOApv`6O5Y6i0!^Ovv{Y9CDPRP?mGw!XT~u0 zRb5`YBdb?V#)2yjrn`p$e0)dd6A%gu`R{sFobBpO58jD-Gc|VqH{P!k0-X-^=d(Jo z`a#3Kf}^_t$6`636_4Qad1g`39}QIjEJFVNM5I3ECpuwP@G<01_Xs<?T8{LO6UYDI zMV(l9)H%2>&s|-cX7>y-<2!`@G&Uosq1c5S*(kT1phi<BXSrl`4ia9!KbN8C@$lXl zOf$kB#l?wBUiziY8ubzTJB<*X2((A!i0QK(qNINmB95N5Lp0}Kg{TXBU)hKnBIgA} z<u6$g&4aN^L_b$C5XlH5?jbl~#A}%>PegGIexeI&%nIbUzaL%tJ`c@M7s`g}Z)l>_ zeRX+w6btaWdl4#uU?7Ozzu)``{)sng@Uc;>rPpUK<W!S6b@_!T7UaK<1n~jTWyR#; z6=9-1(BaKz*gQ9jt<||-Gz&`A-yD#VV@U;lWK6?$Om+rspqmjsGxUy<5WPAe&m5~> z9pLsWC8}2kP@;Tuz(Zh>iR#S(jb!=6CL#)x(oqPMqJD>nmiUe1FeFtJ6aL`4qgi$D zA5750-|#{;@sR_q0%Bvum`b_;gLu=f%%$ef)Rw`&K@w22ZNe3HVKilWHU4T>R^Mn! zSHvMluu3$g6Lx3xrcfYC@$i;vOlR4cIMtZXp{#_vGa`xRnd4MrmKce4jfq2J8bbM0 zlo=FF3=!4wTQ;V1MZsEJ=1;q_8WkqP6-y;(ZPMF-yTq<J&YRJKK!2Xtja9Fc=8Dkq z^U&<9XfGkoLxFJV4Jv&c(htisqklZ9t~XVzM-}sHs)~alW)Z4aoM)@J;x;soD#odb zDmbml*Rew7g-$R9dRuaO0JeXgi3YX!`0lJKH+N_5l?Ru~eBe)+U%8GZrh809yiN}` zFg&9e?Ud0(zrj|9e&biZYvKMW$`J^yt6qRt4zqA`9A2<@PF%S1oWK6N=ED#7U|tRC zfP~r=ehQWYE$1)+!OCG<R(!6Q4<eAh<p`qSJmckhvM5J^QK?T)_C|#-enFqhH_<)f zCkydrz@K|!2JGmhUSGf>f8l<;uq622kuJ3Q@nOA~x8oegBK~eK77(=m4E0Z_as787 z{G{^0=R|cV2d=fYxy>iVvrQH7#)==Q$!}wLlud4hQBF1a4I-j0Im;%mKk=VU?hV&( zYw~HRx@z(}1vI_0Z*m6^(VP6&UD;&z(+S?YCmT`W?MguQLW>U+J(n+Ra4e6l_nN&} zkmGcu47{w>kZoq&i}>VTtacD7m0gqFgssWjVE<_H&FiwsbiY09Ycx6H7|$~^|I}8H z4sO*T4!pN~$R&&7_RBk;k1!oTn9;vwP!;hE9>q)%cExH;>|i@LYpIMY$moxI8zyvc z9G-MEiRrR{_4NRElLloJ<NX7!;xNrw)$0Kyn}9lQskj0N7W72CSYc(+*2+R=%+y)j z0wTqty20Wuy<PVd)K6!TP>MwY9xsy|=(%zcZsl<Pk!nO}E&0T`sHL;`?y|umN0vY< zz#=IL<on_^0d6;Vz(5w*Ti*WK40lAdNloOl+2TjIDkY?$I{jKIV*@fsNYgP-Q!R*4 z<l*%0KjaGsvTCWRGzpN>@sZMzPsa6uTQP1OLr%k~6<w@cuAy&LSICS;I+wPXOe-$? zWdW1rHTOq*1FZevZRJ!!a(X~QYDN7(QDVe3czV@}*;e{8<0vwy6^$^RQ}o|_$cGMM z)p~vdg|qKjUwO$A1QUqhOe?`aD?yo&pcB0Jry&;YA>SO!s`l(tieL+a;8-G9%Std0 zeV`;DGhB3n{Fy;;%>!=ghjZN9|KkyZS>PLV8<cKo#{TcQ^)jg5g%gQ1hpSbM54Vz* z88eVUjrYL*fNFeISwPp28PJfyxRd(U|M(v8>8;;7)x>eM&A9BUGfE;xm931v#mru{ zL1sL;pcp-&8K^X<5B}!OhOnxsg&>9Nc6f{Nvl^uGwl{fPfL!q=4?`L0VR*3?bW}?s ztqf$w9G$^-AW#efWC5~R&>V@DMB={P+u)}9)EAxsijrzMuI|=l4RsZN((IE|h8`{# zEv>wMfsLxh$P7Q7S9uJ5ir02oz=YS%IN-%3#dvQ>3*kx)18Wcc#UxkGg7rBW158}N zaA!ukNi>>frA^Vn#2(~OkDRr-g+Yq8@ISf}{(YQA-fjbVy9W8n+XY@V+GOYL<c;$? zSc}N^P|zkJ06@tuOU@R_+sTX*$RM824jZydP}51{Whgdpx8sVzOIg{o0K?mbkjQ3R zS=6_(kQw827Qx327A^*h(%!CLDHil_v}{BuaR{<<IDjn#>J)f8nNvY$F~Zs_8)S)6 z-tN&K%G=57r^)u-t_9Km{1-z=J#_lDWKamP5E&$-&;v#b8YuGcc1!=KyxkZqlkB~n zeCDAo20=S-7fxJ4tz1sZX(@Gu%&4k!DQD%fMa^4Fc{|O@N%cbk2}ydpc0~W=8KV_% zTj|S;9Ar={KE@<Vsczpp%G<5RAYt$A9vEWpNCd}O30AZclo|bWg6HAe6v5lKmA7kK zil9l};)Zc`A%YdG1UCVSGA@~M|FlAww#Oi7xvjk2`9kIGj63P4Q1YOQx*V=Mp>9Mv z9qCHXgRG=wMxsvo;LiqWM_Hhhw|lKnc{}|Ux+Y>IqfI(~IWqPlMn#~b7_E`>aq2~x zaSa(H<sYy%RzjI^OL@Dam}Zyl?S`R_owqX+gLzg4jjar1#ydKL504lvaaSvXlHP78 zxV`A@=n^k^y9>K?Zx>9wYFl~jg%?yEA~RfdUdbm7Uh8CmlHTqC<{I|it_6G~ydA|D z6#1thC*|!%TWQOjuaHB6>UYkd9j#~!w*%zu=4&kC9!J>6DyB<d4^)=?VR%!NXndMi z`i*(>*27q%@~((Ki9LiR_4v49EY|MlPs7+&=Kd>B8O~l|ADyS~#{9}~mdHN;oA-I0 zVNLoMeYfNuZ?H<N`rka@4c37BZ`52=%7=F-rD?eeTi|cAA9K&QSV!|1jIuNt)<hy) z6(+;k*#of1%!*ILTe>sMwB8h5^)gJHag=KW9HwSxQywZhh_Ao5&Y92L=WE`=_HV6+ zyx=W1hHZVoBNADEw)6)7Z3L_8+c5{+=<%z=&_aE`N$kTGqx(o!$M@P(nY&Reu*=QV zias2}b~C55e9ss*m9^i?+l^(_n+$}*q62BXLECd@9!|w^>P|@q8%4E{dYqjR421Mz z1cBAakvCZ{ws8-yHVQ8d$-TqdjbiVyerNckao98oI>XnEW3RG|Jl<|JYZks5{L}Y) z;Q$4PrJ`>UHmK-0<(!B%{+lPp7wD-$A{42Zz?)C)96FxGYaR(#G4|)Ak(f{4Q)1p) zXoz_ZCO&10dA?qTi5qa3C{t3*kG{2vdFUx6<`1_iF*n$z#GHFkin(fgjMh@jUmUTC z`R@z7!blcWHHX|ankFXLW#(MqcvcMWG&!!MeEq(X@=zL%OG>#XC6y&*yjf97IrhGi z@}4V7%I_UjQtok7NjdbMlJY+Aw@G;>Mm$~0la2r8iS0jGr92#|kTO3)Ql6l(2G{tB z39KdCQb^woc+-i@o&9i?M@&RwC%D&%tWK;7ZXovlgAHW759@pR?IpI#Z(p1P5(FdC zgS>FB*I206$kc13={2VO!*5K)y|%Oalm$n7b;L_G-aXGlCb2%IjxYtXYn2**hEkjG z;T~GK)U}Tkgk|#EODx1UirTLG>x`%9<tFOo68@u{S?0ToZhHBS|4}YjmFq16^n$)G z6r=|ge#Z>Py20rs_Mwyei`x&Ohj<Z&+~D+58=SsyP77=D?6;Y3i<SrND*1`&veKuj zlAo;Prz!=Y(r|zIbOT>B!`a7CoH@uR`8aw<s#jsO2PQ~g{b;8Dkgv;l7fM1o@<*cj zfrl>=HT6ESF(>(qcUU#{=y&zqQvI%(hrt5UwLX+VRp4+iO%~(+;@jR~(X7ix{_GuW zxF5^o!AY!sCCQ-&W{nEP?FZzP5jnWOV+Fn-iPiR*|JieFNGH{SOTjxoNS*Hg^1PVO zoC4Q<F^RdUo!r-Dy&Ck+G*`uN;c3P2>VCzr<qkWBHx3yLv;Qv5u*v??4AZ}Qk)bB* z5knWx-S9at1lni?x2VEn+(ZW%FLcwvjk(2}PG!xiWgbUY;;n?o%{WgRx(kD8bfQCl zQS%c%bt=w3HvP!g;Jcg@QpiDtbm1_q9G|$RoD+XCmAQK_*dXBsD*1rS0}Qsj_q(hb z`oYyfiFM>Xs#}!;bU1kts(a!On355J>3=)<`1f!Z(|nK5eUJG!yo=p}o00VHJbGD6 ztoU`k<Pid;bbVWY%Svp2vzVI8r%z#BJqybcz)wdF0r*4Or3B#gy%InT%$}?QnDeC} zfP;BT0RCI;1n|rLG6m2&uap25eEy;UD*p9?00sh|A%MSsR|1%JNC_YdBc{CoX74Ur z05`Xg0J`vrE1jIn(dz<4=W9H08V0v2*Z8Z`*lbpPJI}k!g3I6Crc7fWZ~PnU!C#xs zOsw5;o;Dq8@Pxza+fD!7>M-9r9d{7A{lNbWa%{+JrC?^!_zwMO#R9kTytB*~vAy)y z0xdkk{p&jV@bxL!NdNwuQn|rL_`?*|fc5y92h3o#{XKz$-e`lE-(E&=uf&cy<-ftO zIqO$GYzC`W`Ozw1#RjKwuPyBipP7bZxRF2e&1tNuhx>P+u}?gK+r>4vJsDaEJv<pn zB)+=H17@;%-nDEbEb#?$p77~uJ}DJWLmcJvQrY<O&X6&v-2aZ>p2;H0cg&ee1Xf&7 z7`m(}iQ&Qph2g!E3Pa#dS=$p(>@a*oB=((G7{+~MC1GH2xS%jRxuh`E*deL7<`9Ms zuGgvhmUGYf$vIj8`|2R?o6dZzguyOp#%_H_V)>PP=KHLgR{|y@7{|~${l#~QC!g~f z8CnE$-O1NwFnUR11-zlI_EwPHepV;DHD8ep|FIO=iYp}9D&tO+B0Hgg|23brVU>31 zRGo?HK%%<)7oBSE0X}~L^J~^Vmnz%6Bym36nH4>~&Cqc<&1lq15@(%w&O2rzP+RDB zNt);`BDz=3=yVJBE4pv|P>Sx>W2NZUUuL7b@wiU6-!`Iaye6^AT}&(#I{h_?k$ZXK zB37e{AI-h&-;$VrjQ5?5DYtnyKe>o?#EmU_J7N_FD*^rOh@JNEn8nblHA{HyOk6zq z`6!>U81>?Jm8j<d7o-^L^#Tv8dYcxjdWA<+y~H1>Ubq`<;wKVBvs3)ZV%+Nr+w+{S zvuM@Y?1bVedFn4k%w9t6wtp$&Ljqa)rHFqY=3|y%lD>9}RnpqGU=RzPk?Lm7lag+J z3OZS$2cw9bp?~U~h)WmSWbJd9Yjar`+x@j9j5imy%V|xNCl%<F$M05@?`|(exf{ro zqWtX#Hp(r2Qj~w&tRT}n5f>5V1t<8*4_T8Msbm@QBqUDPGAtG8J&3m#@zoYqJ@xd* zM9uy^h+Vc~Zj3nr=ECYdh*4*a$+G?)MC@LvHA;@im!g&LK|BY4U{}vkc$BL51?u5F zh<Hm}srMiT-zU|zlOItRQ&GIcdk|Ou$iLz&sBTs1sL6oz*C3A0H>w-2LA<z-e?5-{ zvMvXC^<^xWJ>Dec^FdrEvY#^~p|_6dvLBVJto=I8Q4J9EqSd_%loP29%`f3ZMx&~9 zB745n$x0{Uu?=L$AJxf@`9YDr^Ia*j2j?p%Qja>s-Zzass+`E-FLbKXi9`|ADMxgw z$=@que*o89LIu0pvmqyvn{88*nW!$E$o0>ao<ImGM0eF;o$m7Q6kXrabjR$qgHLn| z=h^6fg6fj4hoozDB2BHXNOvMncPJ-v1}IB7k$pcYCsKY}31`qjt{13_b!YJJcI6BP zWGQD*a7Z}=pKnXl>qSzKzE!VxahIz1W~Qq5+d);Y&Q_}v*-nDEk*}P{t?jxK8AnPc zwLy0x(OJ}PdndA4+E%GItKQ95PGsOGR!QF`2JZQ~q|0wtrk;sqYl$8#vL9`f6X~64 zlXaDRW$IHlNW#*I)ZGrs4G-v)>u*z(KZOC8psaz6RkIc4v2$#cn;lS;KU}XMlM_iH z%H8%WClXFjr4u=eYD7tQBA?DyPQ;8AKuIT(xx9okU}7eD6?yqmIgweLjo&%qy!4gQ zi5$x)QO{9yFIBG>>Xq$82LD{LmC}jSK=BezByOv6BFDC%wA2*ci3C`Ekl{p@WGE*R zxlcKfZ`Miqz=<?NRGd8|p>}|4c_N=~z}t>nd;^+NPQz)8Cppp64F%%kSv+kut5yE{ zMa)zjlreM>H!Wv_*~q$l+;Ut3Iy#G6mNS1Av4nrQoVBgw0H>P1-><yO^{;V#HzBPq zU+@tYWCs@WA3nmnPVq9w3Ts$s&4q|uhzA9)@53!Q`F<C?$<hlZgN>cF%Xr=jR;T_3 zS!B!gbSjb~e{8%y89%U57nIoUx)U~n686{SZYwbXJzbX{TLU;tKj1glumO&VInVj! zs;uhBZL=|j3wFrv?yzn?GZo-dZviu<<FgQ-)%XN1WTqMTSn&A}pY`}SqOng<b{O(6 z;&U6HW=L<3&m?@d;<E>z<M=dPv~$l|R$mK6v>}q~hBSM*uG(bC^$_H3Cs(&LCD&I! zlyZHvw4_{N>{6~DZ&z}CQ;x1L$hF~iCD#kv{-1Ikw*UW!T%Ufc<m&T-E?2+z4Y{^n z%uEUR?82wU5@rg<rzJk$<KwfGnd;!v1fRC}ti)##%Kd}SJIK$#=O=uA!KXa(df+n< zpHcW6TuO3npf#(y15$OL4yhv8tS}T-+h_>3F`2kcVJA%EH9lswYFvayTT%k(`Hn}} zyQ5clCA(raEuN?G+|L+xO)WfNBXq~f!h3FH9a!TuUi>-pX&Qz(m@$Pt4pYPaz+vO} zF8LeJeMFfQF_FqoZe;aXUaG7dmjD0p_9k#u7GL}@_n8N{Ajm~Q5s*azQ7}<l5KwVJ zNkzd0M8&1lh}`9-<pOr4#4G8~tZ8vgODoGY#ihdJCzz&KmYP~rRznvJlM)lX@Au4e zFN^j2{eSQKe%?2Gc<yXx&YU^t%$a%4%)q{~XP){{;Zzy+$Ug*h>H#dw<yW>T%ap<b zK4Cl7F|!N!vhBE!`^Yj4n__gl9pHrBO|cm!!;P>p;z&KhCRr;SFuGCUn@}f>oAT`k ze9OD2$hwptc~_aF^jOJ#--Er;Y$d<;mJ+Yjz0U)qn2$1eiA{Bg?%5$l1E@3JditTx zcpa9QraewBZqgb0r?t)~LLdEOXDt3$>x_TDr*+2b?`fU!-bY&Ve>OEV|2^o_#w~b5 zh8s11#z$K7`)Y-wpJ`OM??Z(jk>Q6r<BwxnXS9D;>kNl?wa$n+reU)HTyO7;81PqP zY{F%@5jMAvYS^4UDhmfVH7b1iA=Ws$N9&BGN43s4y;JLqtvj{OxV&5IjPIVdcLp!E zIH`O>SLUu{zrm|^E53Y1SJu8!^k*N{M~5ZNqJG;n7rk&<N>Ejbc*Qo0P7$AC43rX7 z3zc6bRLYhdf`+D>j_XsiTa!Tz)jV1x<?$`=E3JHAHzJ3#`J8=|TYRjsBZ=0QUA+8# z@YI7`9=Tib^Bwm0e4&&tbr+wyTk#6qpNooVw6HMjbfc96+_{B6hJqwjbj-1})oU1B zvtFeJOq|oW0b|~<b6s9elLmY``#&{+y`?pv4`lqG8n9@o)&P7Lk`1^?Q~0J0l?~{) zRBOO&tdIT22K+ML-T<vvuI*ObmBFu4uZ&RMKEmVoC<%|8pmsew3)N_2F*;^G3=mD4 zHW7Hc%~B;QX7YFUV3Z45%FFg(bJ?7ER6#^nkmn|WIX1H~m;;zHYhWtoH38Gk24?b` z8koIvC76aw)|JEi<w6e+*r&KCuQU!UXdFn90q@>eV~a@Cn<^gAnd@TbJ1~?p>W>T8 zPQh-R;f4APeEEK5kaA%@FWs-az*p^8;uM1nysXS9;FAt0e##ItUwi--L|a?<!72*- z^NIsXjPlW3{?UiZ3?5bJ=*aUwRC+4DGG>9YZZ_Y3Q0cBroXx*EsKlt5mD}fOF|+4U zOqP<gNNeN7Luli{fAJ>{DPgn_a7Y=ZWY6YT4q<5MH=8>ZDS^u8i+G13tdT4%<ZI3; zA?woGN?%jepUw-FC5Fw?N(9Z)N_?<TD=}_$eTkq-#fhIfjCHj2Myfh^nz9D{r7f4K z^~+_$i-HfKFL!MrXVM}h<GT)2X8|r7PxMK}&9{kr#BLPSy7tQJjk<QHX!|%I;s}OI zDOtb4WXif8%9kENgBH)=pB=%Z^5YNq%_B;yK}FMP`ScRp;!IUO<})c`^eYsB8^jM- zjsE83BAj_?HDWOr%Z_eo;?w11@ut&;nHS$h4JXA1%kJ~?9&DIv_LQQ>3E#n+`NpGg z7pME}qpftq{huZMpAC`M+<$XaiEym}KH1?Z;?Xy`$1$aY|7lF}v^Lx!Mg^DC<h~$r zi-?)Z=Y4_|L0qAidrax-={5}?jDTlh;vPcvo%Q_qF{O>S9}F$cEZ-x3hBW}JoR-=o zE;0pPhHnvGg&Y419oJ$)sNrx71gV#_o#MgddOA8|M@CkiosOF{Ixf!D=y)3v*MyG# z&_w^4j-A2zHad>ObOac$S=>O!UkKk08~#T+cG|4ban~w)8!n;q8`H7PB#n;ymT7bx z@>CN#&Y!Q*@p))}J017Xq~N6Z<rzC2H9j9sd>(a9@ecGi-^F3?S#Id%lys4gAr0#Q zG}p~eND+HB^1Y`NFR#Z*?I+_x$0+j&?IuXqe4ctriGX}HhN9P?+y{3xf)Z|nas{Mp z3gx*K1SO1HPsv@DkDO74^D&<(;W~vc#mkL&k2p^<-QLfjW#{^E-Dzd2=LJw(t72vL z%oH)>4Zh&C6701N>prrILFSVhqWhoYJ5MY5KoroQ{~N@FS3Xyo6I8?J%441-WYWv# zOQ>nDX;5DR%Qc0%EzhO}hH3O1B<Xop@$OaEnkGWW%y)@?`49xq@)*>p4|#n;_TU&E zBZuS0)ch`&=n&YnZvuT(jhtV?RBlAh2VCovy)<@Gr*yY>%D7yK)x%&MG%!P&f|+jv z6Z$tWXO<C|4$d8mz`i?P;vbz;5?kjHXUO?vI%e>Y>>{kc{63bqDOWlK_(Gs9j$#PR zNUYRd5_(LcH4ZEmw>I)g<w_r=|9HN!94dat3;bfa66|w5gIX1Z>~eBEm}q=b%)kiP zMagX1gonA*xV8yFy1c9r<Xcd?DSs6#`7d00gLG~KukTo|K}q`?6rF_f|Ab3-(Ky|} zPd}~G_~|cbsiyqY?b-huT)F{0)(GlXYc;69LT@yM+772~%hBz>bEyh){+&zrqYs-> zbJD{9#-%4nZ8eZ{=^Blkk#;ckTzc{8|Hh@gnu59Yq6TKmIvY0iV1`LB9h{#cE)6ql zTxxv=NJuW-G@_nM=Ot@g`qgmBrKwYFTzUmd33e{cFlt<SagD~My_RZR`mAJ<dM^Ed zRM<)JQ<mgXKkS%!i>jZA^|*rMVsoN@;nM5oO#R2>Lix(`N~+Q)gI_rhqvu&OuRX7H z^I0p^7MxbJJ3W>x0Jsxk{}VRt>`D-?5yXiQvVVlwd7K6@dzA+9JsRi84Mu}FbH0SQ zZH9!%_q^fgzGLl|icX0w;7@;rFCDr9zWXaBO?hV}y}QuYLMK%(=C0%uzk;EkIa13O zGE&QSW<*0aKfQQ~s0vfiX5HZ0m$1XY_U$2De-R!XKO1?!i%O@Upfrh8++f4gbadh; zqiO%_TQrEA6mJc~=iRB6z;$WPt|<QmmH%U~Rz9jgE5ByYKa~FsBtiL_q4njZf$MIa z=Vkx6c?O5o!VXhn=h5362gLi3Vt#N@iBh~r@Tf~l?^Xrl2)3Ip8q94jojfV}^9f?Y zES`Hw>5f4{W}Td@W&JY!?^)lPNm;u%WmXnFfe**0FDsGC$|v~U%SsF{zpQjn@|RN} zR(W(e@9~Xtpv4nOK-;LVKeQq}iQoH1>D7Xno5tT>Me&h*?iK7elb`U}<9zv5<#DCu zT>7jX?26CxGJe5h^mV#Jqnv?{X*u_gX_|A*)I-Smn4+AH=f>}ps8+LK-jMIhSqw($ zqlE*4pdF9OQ35sJiccolT^$}PpjzNt5ui5bZ7cA}=w^ln#5=VK5U+s`1NkA-4kUkN zBOrfOC?!hf2>FHEFB+Ug&L8#1cH*1xPU3}%MV$Sh^yr(9xqh}XfjGx?H1eKS|2(1O zc-RD%&I^BQ?ER+ag|9~hIAl4xjn6x;w&QDK_3EJwKPXS=l(-lk^eYyH&OO1W{)*{` zDTNpQs`OT}p5VbhDQ)>@*OjqK%?t`WuB?IhSd^(Oa>ji=E1voCz$$z!yf>Zu{){Qe zzo+w*pOtV=xhe20#zn1LT91=$U6;0%_|lQjzM<%q4$tw-U*MY&*_Us+p**elPUH6| z9N3))3!t<AalZ5>?D#pu`PQ3CN39cnMLRT4jKVw{%y_zyy0a2KoR6#o_S3WZ;!0(k z5`^0&s8umTv{ps+*IIRcaHCdb%E04FZKBqymlGSeYFeV!sz(wVwQ4_X1+7(essGTb z!m(Pbj(5{qWg4ipN*%7X%738ND*rx>T6J!uy;bv{ZPF^;YCfV8(}Uzu)Tl6S7^gZZ zdnWRd-;}6;vZ(v=5^U|DRr#0vgrt{H=3JRaxe$A3P&H<N?yVPsXIf1vh!U?Yyw7v1 zom%y7-&gWkbg`u;tS`D$-DSLtfz!N;_!<^Vb}NfpZ=>6SmZFS8?Wp)r6hB+-6v4M_ z)Hy~PSTQU(H<}CY?$d;Afr>e?QS#w<KJ7MqDW|0Hk8VRDCUoaDx0T`XBNL#`|I;n+ z-DKi_xaHkDfiJ1SNMe18pQ}+?$J_-yQpC1?qzHQca%K7tZfAz^gG4eN^$#Fquz z4ePH|J2`q}V}v+EbNI~4#T_9ifxC2({PkTrSHAiWC04zXg}8)|m^c6K55<!;PrlDR zKG3!Afs=`@lXzb1fX#B+J>%Cw3v(a+>$r_hz@gW6FY<}rQXQm-7L)Juy&vdWr_P23 zr0wSa$BV|#Or=&;o6i>XAgH$M=x%1qk-SQb!B7YBE{ouB)QupFJdOY(?*@$gB}Q(9 zQB?y*_hM`q4V`4eXnoKB5hJw$BZ6wfD9n!0YS_KN$e{tFSi&edte!?=;*q0|fiS9W zz$n^|(Q}zLjK+ga|0f#7!+NpNh@jdqn)IZNMkTafa8kr{s;AL(!YDtq9;4N9gpn6v zRMUXbQ@s#Nx62-xXv3%*CYS#cMmdw~F(Rloj9vjB$;HRI$0SB`JJw^gmN5D#q#mP^ zSi;DkFsf_7XdC)SV)Xk28%9r$`5!Ubg+a_lBZ6wf=q$!-iBWeAqn+XP7#$^y{%Bv1 zQ62GcA0NV~wgICnJ!}|tvSYOSf2GlNjEFXj2&xSuCp$(niOo)miVpP{{Y)5jZosI! z#3+a`a=;&(thKab^w{|O+_OmMlQQIgB$0muLIl)?P~RCg5^X0gJ1Kk`5b`_<gr>Kv zC(%q|;XWaRklKLIu<nQ@HhMk7)@fuV{ZDK(W+IAe!cS0b7(ES{mz{Q%xD5W=VUk2- zImQ!48-w|jI>p~JG8`Mya2@56M`bn~aZ*^P^b5eG+YMKz8TF<axaDrJmj}MooOE&! z6EPN<Px31#b^gw~;LI;>&f?$JVJ~cX2it9owznZ%yM^)UVA}ez3nwb$7RIE#GBgu) z%3I6a>}!2z$e<;(It2lK<Es>HcNkWoh-gK<c2cYexzF7`(*@@Sb+p|%xQ9$dx=^jr z&4%zeE_I^TiG2ZtLeop{<mG>|0Sf7)Cdm(76==Kct^wX-Hh8%Y-J(Zz4f%(<N}VM3 zJ39Rn8o0cUnjw~uB5I0;bnDGp1+p~qdTnNi{x{~FHPf~^@Mq8JJepqyKcSys?RD&; z`G3;btMcjRuy6U@bGnv%f>q(Zk`ib9Vff)HEv+89P-|=0eIA^KW64Dll!^VCtwo5P z^QF$enf+$8)Uf-nJf&+}AMW^2SSQ0?FBdaMt){zv57%@y6nlv;==`+wlE0<DW>1&I zat(jD{4}H!rXJ#1$e10|xKKV%$67m|CFTju;A?cukHy78s4I1?Sf^q4`2?YB^QeyI zMfUr2WVc_2nzirsivE*s9cZ{ur_L7@G`>$~9~h7Bx7pN-gb4TP#1wfPLxpqw@Dcba zomYqXq-Clb&gGYP5G9Y3^W|e=<iPuMBLzf6-Y791;ORD)mjVe|TY}bypxyMfL8~Se z@i4U0FwU_?bWD6cKtijrLA%rj&~UelX9KjS2--|LwAudz?NK|lVHz}utHdqM25n7% z#4Q219U*AHBEHf65s%|igvr=$T1BH@BTVJhB&BIKOi%T{&yU~KwTd9-qg}7B_1BaE zZ4=apZoAE=$VY3$t+rg}$U5}#{0Ma>Hm%cs?aGjc>Xa9gw6oV4VyiQf>XbK=+)kiM zXCnAer7dig4$~@io<fyw_TgO|S?i?DWa-r3DJ8G2STfeuu4RA-WsN(fY*$yj345@~ z)fM@z(H>k~@v%RVQQj@Fo}l}n%73`l!Iy^YMr4%NI{blATXy&zvPI<uMVhX#UF)z7 zSUl9CKU-<lc7dGN&ktex^W03OMK{=e#e~EQK(5hop3A_U+S1P!s>tp?AVgIwKF5ir zc6A{JvK{2<X-x^oL7qwU?a~!v=8#n$D^3|-vBWlb6?}tBj+~fx2x)%%C*qGWYT^^| zX-hG_ZrUT?felBlDNZg>2JkM%L7oE}tqSAlKtKM0Gi&bUh0^kvzBv1_fcJXxa%a{# z?59LhezxNSPhub>Cx?8DRgI1i+$r;Vdqo*ro6nw1yrL6ZP>Rm%dwwDxu4n$rRGGtz zFVnL&Zo}*#MVE<uo1V4vYz{(WfzE!QVBG}%wVw548{_ZeK*1;6v-0TNzOx^LvRzZT z$%PH~U?@?4_ST3r{;dmZ8*&lUrAT@9R(L$v3!9*9=k_guH;?Gk5{J0Cvds82%8A`) zs#pY@6NhiDKyraRr4F%7eAEIRB7<~rAD!oym5wn42lox{$ctRr^UB_FJfRs&@t%Q| zJNwyEC`yNKb<W^#HDiGt9i#7CR}FDonZFk0tsiQC36^-YFDjL%T;UilK)lh6wN^Gq zaVIx6Aa;2-Su8fc6j_Zuv{i*mVi0Cm^+#}>K@!d`ngeOKS1wY<@#oywh8FuU3TlP4 zBe>q|#G~BVlb*d0Z+WIZdw4p3*PZz#t6gnazACZQ{z@#9h=TUBxQ0{n&#uhhDRa?Z z_@2J`2*`xnF+fc^y{$Nnw`k5n;$DZUAU4?zHd%4SW5o_~LK#BmQl1kF(TteMjvo2z zh=<OJJd~}+X=)mu*PQvJCm@rg9G$jk{ZRWWaauv$C2_(jT@t6lGUQpA-{h38Z#olR z1BGW};P@g?(VPwTU5Z50O&#pHkG7*|r2qnS5Y)P{Ji&u`DJN6u#6Mp?*Ml`<n^Wbn zf35g>N(%16-}PXRD778<(ikOpd=jt&8P0Y<d$j`qzv_dUH<kl#VZIMiQ*hwX-4v;2 zibWk3iwX-Vn)*j@6s!Cb=kM81{hA^RoE0N5==~Ofdm?8WSTm)A9}nn_EiV#-_K)zL z24L`47+>033GZDVCab2?y)L4=>{UD1s$PzP5E`ynJQ!tTib6^fuZ8j6p3JZJNf?_N zugG(|W&s+V>~-oM;V;koI-Mdq&}d3NiG}tPz!JlFp(pFuDGDhMo$nPvq*TyQoV^uj z?{o`pg7ReHEy{pJ<M_Ri+_weu^ZN#9;Jg5X*?4IID>PoJXNc!U@st*<Q=5^InoKwu zz3B9{3~&K4T)$ELr53DD*j+3zXyWQ|aHOL-!R=2qDJe%g%=yn)Y^O!utEv3Y7HmY& zYAg`~hj2S?MwA7w#cHQ~<;C)8Em^<tv#t;poDfLNg{?@LSQ6CeR4iIxdT5p>Xo`EG zbja5missHRWs9TA#QG%KndTD``w7(5=VZ*+pP;213MdUHXw47N&Z~O4t<-+@6ST6% zXy;WGyZ@&XwBAO_-_EOYZUz;vm&Xkm9ih$X1g-N4w$&^zKKBPlHLM5vrRj-OST5K8 zhhN78!g$+=`~0aSrA_;@=quq41w&^UJqdEy&N3S1NtPOpB#M^6y|uQ>BZ<1UKx-Qv zN#vBmJNvNKE#D=;CPE733KFZu@Gze4!vb^XU>1o{8E4b93SNd|X{6oQ4;44qjdJ}) zbjN_2k~UgggaM9~B}-c^x-Ft<%k=qSv}Jm<D3Zx^%*D>2oHTj%gkHGTSJF&YQcgRh zVH_Q<%Ebg)e1j34KrgKaP3tq_1fmJ_0SGC9o>ULoRH32`_2745;;FSk17BkYPm3yI zi4A&SJ#-m8T|#%O7JbnI0`Jg;=e1$2hm3d#n!#pN$psM+V1srXdRHR@t&<368?IYm zMi8(!AK~8um{J|g@3dhdlcaHo8R!RK^#(hQ>=3zzAYS#>NDx;KmX;R8azqmezD6+u z>o1dS2LwC|>Sn+`ogK`d@n!8Ew;6*v(OFiq%Z9hCgqBW3Yg;8pNd3w#l+g~hN=Cvc zpi175$<&3W3PVAnTh0trGyqpxRtE70zRV}r+LGu^9VlVbl7o21OKZUJde}009ipiL z<1p1B*q!TP<0z6TfZGqJpyUSG`_BjLL7yLN6UN|WdJ%-iNM50Z1Tg^cIuoz_1a+jf zLB>be>RAsvkLo!olMP~(6WONM<;MIj^&9gsjwb8#Pvy7+2`95dfzHy>6zm|j!H_6* zXoXQxgd}63b9p6<Gi-BodL@LZ9)9LTFOP#bkIOAZeBpYZcW=wOI=dG`u9EujnQd8Y zQY0$XcH%#a2?tCX+F);KTbNJ#@l%AmEm;v$K@B8RH0{4PUlNO~*b}B5)WrtV)^I=W z62QFJ7>D~jD1c=uHCCP*z=lPA?FMqRhJk9v8R4f3<egzSJT^u2LX{Y2E{RxlqisMD zxESNF0M@ScXDEflokG_r5wn2kKz2gO?Z9gT*)svYQb4>apM|N{dujKD3#}j03G8GA zFLb`o*90*iHW5GG4Pt)Eo-ke-#6~K{N4QTg>&QNJy3Yp%vqj3`Q2uc+hR1?XelwU2 zRYrH_vF%vb7}rqhF#C@Dbnu*QulR8L&tlQv{xd}M#7``Pv~Nv&#nW~6Zg5lXFxo8M zewb~u^<8v0ZREWr-(I3pzJ0{^c*CA;*qkkIfww-b7o{?XoA^Y&4dT#1z9fWYDVqjp zn<D2Y&>qOn0Yf3uHg~Ot-HqLg#!!zB>%pH4WnnE+iDdYqY`6Bi_TyVaS%eZ1$<Kze zF797KQ{xkEF$AW5XJKT~Y66kdohO8`Fz;tcq%{!c%&U^S();qoVXO`N)%`x_VQjj~ z1%m{0yajD7jO_-W{t^O_56h*&r++E*mNv!NjP;rNDNebt{87i3Z&U(Y=LIox>h}&} z-19YDXfsXo>Ss%Tuj8v<!|}k+#A@#6@ffiG!L45xtGS==?frjrKi}r^|HA$Je2nIP zz7b0t(yjmgojRLa|G2iy@B*G|cwz&XVF;cvcrN4V5y%V!@Fe3IkLL)UJ;>JzY3uN8 z$0P9kfhQbkPvTjGCm+wxfrs{XVjXq8ej~!(xCO#qw)>v{M8<)18*qlPB?(JA)5_tV zE>b9GOY><S{3bRIz8%9OBOxXEE#T(WnYHGVA|WF8d+^<ntfTTp5B^Og>oa5@F-4-M z$H6k3IV#O0ACj>H(1Lb8dZiaxNI9qN;pb)8IK1AEe75I({@o)iG<onp150WItkXll zd}Y`p{}`G7V+||5FyfA7H&JJhNay8_@2>T}vjrRFh1p21!KRajv~0I*9aiPYGq@MB zxHyAFtj+Bx4(*9n83pXRZuMApA--+W(pFSc*T9CBwnQ;Yy~DjDLbxNNQA2NdXbnyM zx5vY<B-Kj6>vk00>Cu#GuW4bu$wR3;+qAI@0ao_V%r0z%Qr(Ro>%zj6vTpo(7uH+Z z-(C7&vz8Ey>SM~pb!o>Nd0H>mHS)CfJq~_pTUF05RVl(7>mM4w^unkl`9<@zHd&DE zA3d#)L}`x7$Dya~4#>0$VfVED)K7C%o*Sh(D$oCWKIy2uz)w0V2Zdtx_8%RUcm5_@ zHK@T&nf+$1<9+rh{kkMlbIiX2&%1WVaTD~Q)||IsT-LLHmAF+|$KTrn|CNv~(zBT5 z-K^tNUQs$}_Nf0prJ1s_tMs+tZM$O{^<xL#sXObU^ytbbbZ5P%{RJ%l<`A1uw1{v} zFb^t7E|Ctg2c$zR9B4F$*ki&GgM)@r2e5xVN(aOO0nFhLdp#v<2xiM!@f~?>clIdz z*$bmn4;B@<5sitq4lymg>QJz>j=tJnhjUE2Xzh$)1iur{*gRxw9q;okJ(!>OaID)% zC(bj%RRO*y#T_P{I7c}jk;Dr5A3Zo<>_8rzts_b7u3fgAF(>aVOkAHL3>X}=#&iRV zQ)8f9q-X5XpK+iz*z)%v?$nD#wVdThNbZ7TtPRN#s^-)A7A<JXEo*zkV-6C@k&4Z0 zC?YI7vZ#hIy@&w<-J0kRA0*TC3WtKkvaQ`gC7gD*1s7W0?Zx5)XRAPA>2(-?<(LL0 zmRlFXAz6%0wHhl@#DdOzObqMdlkbj9G?bT9rJ^rv7YuR{I$Mp-d{3B8rH?RuK1H=R zuJi9>Sd=pB9&g#3bqsp!r#dQacmFAt?mwOH0me!3JNl2@fB4!RI@d$_z1cpUGVnI< z9mo19IW_#*IKXN12j3OPdMPe7{HHjUuRM2~&x~ht6wllIT09%89QmDh?}Pl${LYPi zSgg|LcfPj|3)37j5@1bgt_uYYwu#x>JnFcUlirXv8YfxwzRHXHvUUm-`1QVQnzFr` z5ADZ76t~~_+<q)Z8C1>R?T0S8UCqDf$3iuaj0F$sY#te{I@*BtAdd_KpO=7P{4f-2 zVFGK<hW%8>msG-&GoU~7cYhm3pyrMc-qGfcu<th_jawskgjbspsoh{GyNKzsfZZJ- zokG$b;c~d<j)3z+R9-!VHS^i+M5PRN_ZfU+F;z_@UnkL@wPPJIcDN6Kg+u&y*>Nsd z0GZ|4zLzfhhh(!!Y49Pq%A*Fd)}E`bN|Y>caoB_C)>nDn0OlX`_K#RJ$@yr{5Xc&$ zf4x#?O(U@@Osq!miL3k=a*ewSg>kjV6j^~=<!vxNWk?a<lOic`tNb1@rdmZCiqZ=c zchRv=a7jNVe*dNpsLgDI+Vy(WPG8Yb+lNYN3SdL6-xWg5i_aX$^toq$sK@UT5Ne^} zcgcp|8d)+b?%t9zbLLJu3QVFE4z#3v6{TFxEE01_x0HBU0!_8dsK4yEWo|Qr#luvq zQeY1Sl*>1f(X@2C!{kX5a#~=EV~QyM9Rkd64`iO~mW~!r*Vgw7`wW`n!4TFOu4Kmt zvF@yI^ZPtGiS-Ta34MOeaivBmyHS7antupzpV$nV=uzg|qMzgigJq)CNJKu5Imq%v z77~0FD+B0@YV^f+#J_<c`eHlUdI7=p_@w0bC=2kN4FkNPGg`yQryMxfIFvs~WRC=1 zx>yGs7B$6TyN1II)Fp9v6u`kOb{wv_NF4k-+H3pSr5=}KsQfJify*%)E}QUC({m_m z-8~lzI96j-VLn|FnQ~3u6)8#(N%U?f>3z*Hd|o}huQ|rd;}eInAZ07g)CUCi;e$HR z_MHaWCIQ99w5>!~()N4(f2QqIu&`yjMo5)b->zTXY_wGo--xyc&`*tMI}61nZU02J zf1>TT?iy`P7ydJCji^iFFb=>Q(Y6Ntj{a?+ZF8jCa3R`$40dQl+l2rlY3ocVKTO** zvfmnLyR$KEi)^&@y`|B1$~{S2Uh$EWBOg2r9~=LG%9u8c1+h0U|9fE=v~b4&UOWPR zKxc=sq0AYve#2Q5YleIyhO?EEUcjK1ky5lC+>|1|f_@|=R-DtjAhY%`MRq#wvHQD~ zi7h=oE>35c277$$giR@p%WSomF`ij9wxxxw8r!V5u_kA-$Hy-m>&Uw&LkB<auc0t6 znQd|Dim_3uJRUcUg|Sw!?+9U~<Q$(qg5f-2Kg#^1^586w7zs@8q3b4%WG}bKhK&kL zs|nMB#47ROJ?@you!s3e-Zh1_@o3p7T}-{lGg2_W^XbH&PhoMMLvPku;}UC(j&WnF zbApATjfT-LDXggVk-Heuszo%q-khT5f05%dO8l<e=Lb_+C)c}QB6gfA=H2DLrn0t5 z&9~fT6zlBKUuvcxxW%>*n_9!WYAlP>90v18F+;OKC}y4OC3cfMj$(tLNPZf{`gxs) z(!nu2C-VO^wk=G2HANgi^I}G`WdHJJ2GG5kIk60fl;f^)%L;RH87+1UXod3wMzis{ za$Yx@b#Rv%J@UIiAS<(Z|EJhEo_E&CiN81oACJ16=ex$RF&^_SQ&0Lx^e(`r0(#p! zhn1u9WW6~7i*j_tm`~ijg@!`4AM~;zRrJ-gwE2!@&S>%IAG~5L^JPaczTO`TG2Vh7 zt<zW+$A4qU%HVSqm*912tuzDj`84JM>|RM@QFxW6v5D+o;IFWBR=^zbV_!NO?SA2N zR8BR!iAQhq7URGd7ccSHam=6f0uN-2V;!2glU-F3GI^5u1mAmGA4b-N3qLZBwP35% z`~2KEmdqAFd;&Ar4rRh;yexy|g0fvQ!QYwVSs&%OQ+&gC7V0tK6m&aU_+5dqM7&YK z%g3|MO5iDO9nab;f0gl&3G8>psf_zf1RCF#@`Q;Hj;AU~nqF(PX#s%8BoFTdhlnWf zk0u$h(Wh`{d0E`j3%M;iQ`)M$Y52QxP@hXfEQ*y4&Td6Qk|m4Xy<sb6JXc^W7jInS z<(aHYyi7Y_Ps@q<FCeYWngGnb!Q&>eyNW2`JtqVA;u1b-GH_4+nQ-61tGDYNxh2LW zlk;6VcYb^d>&G%Mn6as>y>9NI4pUi~PU(A#-+BzpvZRK4JkDCRc@4~Z*dfosVTRdZ zM*HI)hpGz`p$(q<l2<&(ygUl=jS$wO@&%3bd*<?~kFykINj2a9IIB^f|Bb&hjdeB5 zJ6~t@_#{z}0R%<+Rr6n`v8?zjARA)c3KHuqS%c$l=j56bYf~;`8O9AGw?Q05dbZoR z6p9sRz@C&D>{u(__>I3fo%K+%Zyx&hbmps5RvhBr&tP2n;Vggl3HFNe%x`@83(TKC zlEs{Lb9v7!)}htDGD2}Zx+5b4R!BOzdba(DFUVq%%6Ockl*L+hpMX5L1Ax-tI-U0s zN(jurDEnx!?n5mx4Zo)&DSb4q>4-bXMHXAA6zt<upJaoTtWsY5ENi8PkfC<sNfxSX zy}@;hSu172X|80m4TIKH(juYA#scJ<r)8ta;1VffE+%Z36H%WR>cbwQ4f`ovWh&8M znl3J9R$NZ3&=O4h`48D_xKjEJk9vxoG_?6QGCIpvVNG?_VeT}Ob?$t%1TvNAhG_K# z^U32C3QP1sd5k&z4<p4ElSa$1C-(6vGg*LQILz~Avf165?E^r^)pk<Z{9;!X)mg73 z!XZ_U-npD;05Drh;$9v!izO-l{+VabVqu1(Afv6n>rzC)FMP`^Hbp6@<jQQ8l)D|% zgUjOETd9{b>n<nO5l(<3Ufm<bAzK*-hKQ?P_LM{s{p|+Qe@Y0gwIc+Stp}+y^l9n% zz2lJf8(9&04WY}9E0Gslj|ez2?A9`jriz$Ybcmms&HQ{PASb9j!Qzc=k46L7__32z z7Hq7W!%WI|AMoerur5#{2j{T3+?@cK3V@nv{nrO|R*PrWtB8~lcdiH@Fo=06t|o9J zmz<Wi(_5-j($a-D&_z|}@8yJ%k*e9-;s9}iJmSS}bKd|6Q%R8JW0YBe8q7;eE@zfq zPAt28({QcwyNZmANq?3MS{zDtEYF+ELL%ZZK$SYQgAJZ<&0!`F9Wq;7vstR>fbtm` z*a9(`_CIv|ij=?z?AT{cy!|}ZUwQQ+pD~Yx=;j?V&tsn`N_wRx`M+J`d!K{kCqZie zLGrtvC&~BI?<gi~2o~M39EkkOf;TrZp}hAC@3#UX|M<Cj7J$eb|KNEm*hIzc7yj)E z7T{m?Geq0hCfc8!Z6w;)YWVr5SvO_V&xeNRGjE-8@OSRNh;2~PKIgg@*fL!p_sn8# z^~Go~8JB$0GpvL6D)i(v$8zEin7R;OHxc|b|NaGt-)~>@<Ig~}<1{9rG|2DfuZagS z2vYXZICWDpNIHr33M5I<PQArPu4G2#sjWQsSxiM!50YrN0Xqa20Pwhrnp_V$!lx9l z4SlP=m%W+o3uT272K-MGl`|>gTg(TqVM(IIfXX1(zu%<rRmjoR>1VX4?{4zgRnQ*C zPVu-U?1YCWIOCc#wFTV!!57?pDeD~h74!iK^fk4VM1w(|DFb#!LiyTbq&(lg!QVHt zK&AT^{H&QxR?5EMT~-79g70|LGS=D9rPN08LQ<{$Z}3^mSQl@{@2FEo3jraJs&=%v zU&Z$>W2+V4FL}RQ7Vov-B9RTEn@TlHGN0#ba+&Xl8GES*ifugrtgT=GyMP{r@}}P? zfRy(Uy5_hCSs|cW6Dy(mD1#JGvAUf1eG&3G2N|2nXD^6{<hjT^maByR%HPkE@_8+f z#dV+=szgi^&=-IJ8RA}96^&%H<FCBma@MA2N1199NRqxYAmm-Cnm44tAU|W1QJu`E z3FKy+$F>~9%{*>h18dJ$@PM_<$1n_n&>&~dCA@k$8?AZ)c|LQL&L7*@hg9+>o`W@d zdWR-q`z~k_b`Bc#A0(`(NRzNBP{Y?8Vb@CubJ?LuSm4{5gv|s)+mtLM%v`QXSl(Nj zgiU#?k%WB-?IU}X2G85)Gzn|*mQBLa&uJ32=YW(j<%e@Lc(z9~rECp+hp=cOTe+WW zvgL+Tib=L=c533I$<|je<{HUX9)jpwDO*SITgq0<SxvS=UeaXCb!QXV@;j@^*8TT1 z*_yJYUbemhqczA@&1XQak!-z$5%nS2$~&#emhq@2Tc3e4^|IymnI>B=BJv+)s|2Fl zM7F;9Op~p3r!?96>69j0ziiZGD`vNi)>5|8%QV?~W}_xsx1f`4vemLoldWr~G}($o zO-*I1Z<!`rf!nAD8p&2B<kv1+w`{*P+4>Qohh%G&ErTXopO$K}^%i2A%2xH;R21AM zW$WZglC4hO*An%am8X#zzIk#5YAzWz|0HiOLv3jC<`B^^Chj<?$y<s{eMsIGBC;^C ziM)l&e44y@pCEZ_qwKT^T*+lk;Eux@Xb`x)ACkbOV!J$Z<Qvwq2i}7((U2I75hC*h zyl;JSnu+L3eD}ZDb~k^Z=J83X*)2alf=^z@-crV%KjichyR5hjN0Qm?qnQz0yv(jC zz4r0aSJ+dt$D_w=dugTtH~G^N2<nR?FuQ0T(ZaM;Z#6oL1CTQ8kPgO+l5az}k(_hE zzJRA~Z>szYiXm$_K7(7m^_Z@0&B9M)b55~(k16L{I6lo&s#v~~=;@ZV0b9GR-tow4 z?vp@&FJ%S!xf(`WFJ|S@8`hHbA_}`9Eo%zJY@12Y?Q!NZb7EbA`&`6Lo`8yiO?@cc zA;$;b&b>^bRKG*kG%8XaT}<;&KXNa@S0bx7O+2@02pX?vJByuLc<>jjbFK|(qnB2$ z2LZQw8<5*tegfsj(XSp<(CR%AzZ-jap0PDvwZ+?l4z?gMSs#g$5g)GfGSya#Y!=nh z1=ZZS<X3#>Qs#-Y^iPOf=~iz7h!XaCryvNY1*^A1Iq&=$>(q*}rBM(xOw^}gCQW5< zBpPcS-#E?PYrf3Uzd-&<E6`8d8VP1HyDtF*v)jt8l%Zg`ip4hxq4+fxEc?s`94_vC z2pLmf2jg&4bE{>By+!`n)BdqRXpiN*Mu>~q(;By+5p^uPO?|C72mTqEW`vCm0uSEf z)Uik9)YVwlaQ6qUM&<U2%89Tkz=EZ^)nN1!ATv3p%dG+wK_2!|tLxx8@5QgZ&f2;x zhh_ygFMXM_H(38%kqVZ4W&^aCgHRv`8Th{E99>-b6$m4KUQ=gXnRuPPf0+7=*+k6c z3~tGT(kpeOFmS{D1eg_|ly~+6GJ&%QG4bOn$>f#~#UF1#EHYX-7{sT0>Z~FP<8G-M z@?an$_U@_6rNE#&E{3e|Kkzj|2X&o6vUfoE<rCDL_p(B2km^v4)Ks)IBSWhh(^Cg{ zvcmfeFbRu$Z$qJ1qib@!)5O0~3tE!n3hkM#5c9OMI_9C5$%Q`XwL0qwd`=PzchvC# z8`zLs{V1T^9f)qFJo&}BDi--iCT*jT*!to_L{KCV;y^QT57R|csHBV?8M>E9+v51+ zazZ!y6g)j&K5jlPo_H1YilJx(Rel)wW@z%mhi+iLxTz;AobY({bso79J{;>K_@f(H zzm9X>qlOh2ubZqoV>s53LPlfqq!;OkC*7|XkyujPitKwg!WO~%+C~;=7`_(n1oGGl z%CdGJciV(--`#i}_nfK=<~Wxllu@C%o0vS;^z}`wZ=1F|>a3NAO_HH-FJJWMq8Y{P zF!5WPSO6?!!)DeOuaTSC04MY_HiGbLn^_1yx>*{~Uu|Z+xnT?YCHRu!YN+39E|n{x zif=fZpj}IyHbiirt;~POPOxaHZUb?yrbY|<tEIYQ4_sjS?0?fvAuu%<x^OT&;IyPy zkwk2sLF}EEUq{<ATJgwnI*-=10nH5Xajv}%1WFTY2oLe;!8+b{oGzeM5(rF*vf9KN zs#g>q<d&_>Pq&FXzscG<ub@7!c$Y`K$zBLdf0xV$73#V)ai_O~LqcidF5-C{0A%%^ zR?g4A$pQkP5y&R6dS~Gmc-P(I;0e-V!Hxurr%uDxTHHnN$R}-Mt{z)qb^)F|S;Tv8 zIbXO9^p7v+Teq<keW!K~(5y4d`Q2@7fN~mSKgL?NHH8u&2T%xvpxzWqAX6@?L$MfK z!e?#A$P!rWNVj1*W-A$=cigt}4d^lV74+9TkN&n@LVtTKqQ8A|@OQ>)?=AA>zFxlC z&Xq66ner8yC10JV;k99n<Ewa?6CJj#mTz_2TD%Jr_1iX3I3J&&tWT9XUIL0b2c5%K zO5L^|p;E_{_)BP(I<A(f5Lw4pZNIYBaZeRHl;&+fn1opio26bW817h$@bL=hW*@K_ zg|kYiv%cR<v)zI8VIfy9ra}bdC=9wRukvSr(pp^nSR(}%J^w!?MLKBmFfFcw7XSAM z04xhu5)HKWm29H+_2zl5PL8=jT7$m)=>MMvJ=~r^bZ*6eX%Nra!NNVMKW%-dHHB~8 z!NNSYAlh<OYt*wFsZm2|iNXNo(RC;D?S@{p%)llxh)s7naMwmB){x2Lorhpo`msd& zQJ7eTOpD6-(w*#)W+->(e1YT&{(Y|6xh*vMr)~~eNf?c+-YZaq6p0LqQQKa5hi!6R z3!xXmFY>qEVar$#v!(#orKy=k{wI*VTk#3e76aWL9ZKSlxQl@R;~Ap_kC)_cXEAm? zhRqw|N`Wo>@d|`1Wf@Iz;jgH|0-V^66cM(b?|heq<VK@B4&AURH)PoYwNE!T`fbHv zKxH;;l4Ebg%g9*y>0GILrA59}?_hL3>6l5wthkJ1(Y{btu68TNrAEp!8F0n8Jshwy zES2IWX3;?06H%sTwGqABR-XJG3mZUC9CDn<Dca~qDx?H+4|>NTBfTpz6N6gXqievG z+Lf06agawd!zV!oe(gOL;EHg#C&J+^C>#=4(MmPIu7UhIm<NRz3TB2F3h_i#j803Z z2}RH@Hm2JYs@zoNKRWu#K$o@&=)!DQ;a5al?Xe;m`ZW4fL0ifcUF`8@nz={9eE#+> z_6S(zt6gkb%V|h4ozoTcp&u3}Gv0jo`>aha02Pc=3zBe1VQoQ*n>kUu;{a8X<8C^q z*m5h;#dnT7IH2vxrn73PBh^CMrT~?IlaS<~&*>)LhMZ2OvwAHH1kaWQe$p*XXM?n8 z$NFfTJyOiCzt5(py$Xn$iA>#T?a>g1K31&dbd!pRSU_x08P2utCCbv6);Kphfs9(R z_P4#diEsXZbyv{PuRdTMJb<ds<GF8C2M3QMq0=@UYPOrbs~bCR2S)gcJEerI(ffF% zV)}uZ?&{}vy8V_l<Yh`-Yc4%PsisPGKHP;FD}#gK%(qc2q!7YuSc`WRf@_!H&rUpN z-sY}*SqEj@4j#Q1jum)k>}CF;1PsUaj>Ib-Pj@_#ctY^_<MG1dwu8UEmnC^oR<o6$ z&&9I@&)OaQ&%JC~d=13kY`t?Cm2SsRz_X)wS3@s?(5poW<e<!J_4pHsXUtCi%08@n z)$HVl_F=fh`}=(?DwHw-%uc-a;3>jWjHe7wIi5>+EIWD6{Xk2rTzv<K;_=55_0FLI zCCsWEx^<8((6PmP>Ufmu><88B?8MR$nsZhEh!VDkA1z|t!oNh<X<qDYti493iFsJV z!NP+1EQAL82=yluR9%`lvzvP##wV%5-F(bpeBUgO;7=cBL-B#^_+b|1Hv^V?wnG{Y zZNuhYG7=4NjwR^}eV4l(0lhn{=G~64{#}nrBOwSCm==XN7@HvvELrh6qT$qI`&XD) zmy*>U;v=rj;@gj)n)&><BUtXg{Q>tl3OAW;vv~ATmKxY`F9?srJay2OmG2WjOfQ4+ zd?so)GmwyOJIcl@-PUmHQC6)ie2R>YoR+KhF$19pC#*WE-W#iTi#}o_2V_ADnUlf` zMyMhaKMUrD)4u0=4JR2}45Um(ecaq|V{_4y0wW-(;dC2Ycp-QBm<22G*;J9Y69hs0 zx|$F9m<>}lzQuh%VeR<ckI~!X8wXm;Kv%{1Bv1YXm!tf5(b#$DzljE={-bCdJ1BXt zh|<A>@$^1}xLQ2^hcwaHc}NotyrpOmF!11JyjJ5`foBPx96U4eOv5wrkR}?G)odl` z#dyx(sW_yG#-PLXqES=yA4MYxNkEG-uN{ZqOYm$j(nMp>VNEpfmZCwKfL1NCIN+xq zj{%Plo*+Eoc;XIgqM=m|el<+QGZRnVVG@lNjHsMe%G&8Q1+?GH^Gex5=cv&bP{Zf) z2c_)Mo`W&m+2%f$(CFfrL^qF@i%*!R3*k5gM!L?B<6%zlF_S~TlUbK)P0@?Kvuu-) zsM|P&GcQx;<RTu&Fj(s35Gkhx0dA2rEpWhJ8(%e=7A#uKZ<Jy41{l`q6btf}bA_12 zjV1&^ljMY;rE7LnR>dgbdUiG+hpe5tOd~a1ka$77kGYvS!K)w<hpNk;J_U(q1jo;U zMP6dfa{lHid^ApZgO{EHC*nLPaf;1WvM2FzpRus;*rzaf)1666aS6qxf`Jf_3*xsY z0bIP22f)eY1xa4QoX6k(j1BO)1>=GijC@Qu_8P?TI9QD18f)gga+)paKAoKKR>I;C z@8n_xUKHeDY)kWP@yleyy^J_mh$Qg^NkO7B1W6Q4<a<uDju96@F|5m(mPXQnI!2am zVOC?LoMooLE!f%<2N&Yl&~)+fM6RA;UDdr~uyTDX+c}uL-<<fAGpw82MpzN_Av!6< ze4O|Hp804qm7{0al8D-+gpikm#|ruwEGiK+!@J>oyt8#_ClfE}(6I%HHDXL2f9!LX z;8Q3I1UcmN7tc}V1RRuFAr|6H>(8+vw97g^;4E9B9DR}(pJjQ<zFB<0ITq`+A6+Lt zpg-^6PXTJ!x|pv$$70f+Kv+`584g^ufF)LslXVNjETl{?#wX=trs*XP85vpS;7QEv ziY4bH9wXKfXR*?T^XbJ9*lyWYd?E50Ew+z46j08X&bK)XA9JRUX_1>lP9hYY9C_gp z^5-)=?mYa#{nGi2^B4+$c#*F;&(<nK(rAfnvvPPk|MUxdHJUz_!tkbr8%|(4?Wq2< zcduok=5NhI)U287F*6#(R8z5<B7VV1nP0*!W&c9H>`V5(5;ulQM)I{zI3pqR0&`Yo zZsId8uo!0p3D)w*`CAu&K$kVV`~qv!|6C3+ZHo12pLCIs46D<paIikby1++#*eK<D zu#0^OVj~3a1a!TW!oH)awhp{{kE%Km{L_!|316|{sWV}?fGZ=c<pqfbtO|;{g;Wuu zT4w9OpCG;rIpPRtOINXW6p<baY}UCxe;(K8go`uw{6A9ulEu9CE7mr2vpx18#d158 zof!1A!s+6%@jUix7T963w2BIxD`~rQ?@2z!{vyd%+GE88tn3hk_{BW$Yv$WKKxT&E z+{qxmceC^p&h?pnZJF<(QweF06?(*gWTO3Q{^i%K8`}?^AQwLJK6D(#C%=O=<-Cim zyX#_rwI=w3TEzZsc%HM9EC2o?TjKe}d^`JZ1$yGdd_MaUi|qOx2#xA7&vzYZI-%xU zbHB4>id<v{7}HYR<u?K1NGoCBw>0s~zxe4(te0PB8#E&=Ej1GXT7FbJc>@1egs#iF zv~ZqtnLRpc{yZsWvb(<>P0bOLDGJJJh+d45KYa>@z@Y{|AuSfYX{6q28tG;gy%1wf z@)uq3o;=C4$lqb9i)c5Gdwhd6uE_Dg8|MGf#}~}1$S^JtWteLKYHuIo6XKZm+qB5Q zj2YqsEwp@*SCHdNZF1U)jr9@16yYgW*GIHNgfUDk)*`?g!WSBlxX2UV-KQa%JfZ?0 zgCavq#%kGm`%Ey76iHe@R@z_0YN3WoJJv_oD)p(4kd-#4*5v4g4$;)=yK~T<5qi?R zH|0;af+U}M!-NmJqi?Y;Euvocsr-#AthL`#WHn9kcc^@CI5f~43W09e**0ws|NIKp zgZ9t>(qkgObp@7H&>Zf0l?_f`ip&;w`0<I$&!b@^Xr#2w#tN*{S+<MchBZi|7q}<R z=w<vB>|Zb!wjTKRgc&P<FU_v6Y$bl84P4h=iKYXzom^l%nZg`I|Jl6yDvR(4dI4BW z%p@WfIAQ7mmhq9QM@<($&*H<b;Uj#TVTazi#um!mSSnwCkYyeU{*HBXW~XnkLuo%V z#}>I?ea8&9eq@H80t0;&GmJubJi?oQVTP|P%y9HuX8806W^hKhFT(8+jzD<s&&=@l zudr~gF~j=rv7zTDX7E7xkE_gZzXBV35METt43iL^f$)3Rnc;iXQF?_LzC#^e2tO(q zUmoE&d|%qjj^wiBbm;g4*2z&B((KR;rvB=g`_6q7(y4}tPO72SRW<k`JOSa4996@U z2rsT<hGPz@ApqgeTvWr=d(6-l;apWUL?GM;;bm4BRZKOk)~kk1f1&aR%+Md<8_uf1 zdY2jcA-q*l4I>bqjPM@Rp&*Rg5^czBaHNC8u`U3+RQ`y@mol<Kv@jp<ufCFd6~jx` z1^ROgUvV(OJ3v--iQQVs5|mUyf66FbC)PJjuc4$W`g4KO6_L|4-Jvs*YAO9Xr86<6 zNxFNM8)Z=GPmK>>(pG)6`4Xt}=;CURy&klN#=mT<#snr{G6_j^(^l1@%U<xXG?Q(* zQ~m-L`N<dvBL8}4*XUE}(Zz-F8|QA~69QD<2!GU_mgS(Qwd~PW?=1jiuEyGP2dnp5 z{5I958{N~=WD4IBpawfrhLe*flLudW+79T<e-BVYm4tHMCQuCul!zGp8%on*kYu-L zuu1o}G=RccjVa3)2dcgqAt*}|X4`+1>2Kt%!wNXa4|r&<YAw$^VfBtexkl3x*@0P& z3D0i^s%?V9|0!Ez`t$H0)xTZj!`X-*ns&pCAT-#goS$2#^X4fVbZRf}^(ckKt5+Ke zqZAn%GZ7<OPiw|DEM?E6f3jo~zZRtW_{~L!(&vn3u;jcqARF|7>7=^+0WuhZ)j026 zAy9aO_2v<7>|C^446eGad@Y1e306Bsf`760jj5r7+1XV4AjjQ2Qe|hO-J--8Dl|lI z9_glq2ZittgVn*x^+<j{SPe+3#VV^qPGA<jMfLz_s1h6lo6|g7C()&7IJlU{((Mr9 z0n%v_JhrxXid&9Be)>r>mkHrg#~*K}#>@a7Y39>M<X4)lF39{4Hu3Edmu|<Vn~0=v zVvWt*t4G?Kq8lOYNa5sa^VjA_^<qgd)TX+k`P?@3OHrUCf2qAX9Q1=Dh9tv4z39&B z_;2mi&dQZw9uT5V3$Ew`<F`2aO7yAdFQTp1pV2p1w#s%GmDS2ug>!5e-xi`i?dCHE zy7%oC7#?<o^3YH<C~aI&!#a+}mSSNjP)Z>7!<tX!7Nve2FSGI>lFpo|e5qHR6*Yj2 zVkLgopTuj6%jw162vrw6V(kf<hdE?udt+%IZBJoo5?AysuscyyNq_nAH=MnAN|@^0 z>I?Mj!$9Bc$!CSBU0cm*0zd;gp(j5OroQb>aIy$wO5rd^95<AjB9?dMb2_Lo%5&}c zI~`QN*r5Z7-g;W<APv(D#*ZglPCzp(4|s0}Z(?jqM_Ccr14v9x6Rq(^Tn2spz~Q>l zE>5{t@14j90(qvHqj1kjcjP#UqYaF=>IZ2oht?#3&L{u8XBEXxay3&f!_H*#x3hTB zi<V)VEW3)Hv2sZjv(7VTpo;s&0R@=@l+B}6)D~i9%erK%7=^;fFyC8dsMif*WJ}xX z?+N=n0FbcyYY$;PPFq&Cb(Ow*<E5hO(b`fG+m9bxT%EmgoA=p(0{HST)<rk!6L1Ou zY)yes;6Tls4w$9s(fsBq;sv5swM@yNV@~tYT^SkpvSp~VHX@E>wKQ=rhH|5%KHE{~ zsRn3X+dSFSCuM#vsTLMpj8EvAzP0wCI?c5rNY+EgNi;)}7xmjo%Yf`ia`e4(kJh&+ ztp(O4serH|J6Y34d+unf#s1U$00(G@{oSZ`oWyLaUSi1SbW+<qxh9~_x{bi#FdCo( za%K@#aMg_+s<T++iQfFFNpGGxQ%@iers&o^tI3_9*t(P|(0aj!V^R-(tCQNd(@Z_~ zIHg<5;YNNf6El{vX3O%s_#EY6bUaK8zNum;a%5&qIE5W-tq#qJQ2Xdy!rQ?rfINEf z4<pqMieDT4ZKN9AJPOgaMQzd~ft}T-Ln+Q^FsHhiN4fP*)f*j)NUfY0oqBW%u(LFi zKlqW(>Sg~bG}8f9=kzWds2fn=oEPI@+%+l{r#<cH%y&PcZeq@z>-g~!oQwB(7qx|V zE%FOjhy!E;t8IEH(3-Y<RTnjjJr-HVb+KwI{@oioC!X0|b>)6hYFoD7y^hC4sdQQD zk|=eE@<kZ`ca$35@`(tr2F}J#yc+%a<VoTl7@i0Jp#<}kv#Psem2_T??y7cqBsvU} zhs=t+<5A{ID?OThYW%q{xi;clDxFF7btetTN$r5`Y_B@LwyPS_M)Zaw&2jWJI)H51 z{%X>lOQpJ)SpIoewMTLVnz8LF{$Mi&^nqcU!0!U@>-cMFZVIKhgDI3E9k5q)8&L^o zHWc)@fFIjxD0IBQy&Uh8j@6s^$Zl$v)^(_{{v)zhD~>{p<u7+r`}G_iONsTzEh3q2 zqsL6#t<=eYG`P)1V=ra?m7GZI5IroZyd;XdMyn&6Q-C_YeH48_<ZfNm{%lvcty4aZ zRs*z7+190Trxdo~w@{dQX&GDdJysRVDBV?0_ACaxobGCx@^(jlrn?%cRBYmZbyvf3 zi5@s@Ou(@o0+x{?JtWrlz&#Vm6{7AJ$XuC-Xa#zYtu`muSQ6tyjLC(G74TVfcO>C6 zC#hyb-d!c9MSdTmn6dp<0tuGNX|uJS;wX_Kf~f*qer61Y563YFzPX3$oJ9HZ7AXnF zua|$X;CLg`DaG;)0rj;3b+rRE>I=r!79`hMJgq&b6qrIhhQSUa{MPH6_{|<_tIpJe zrebGP1%2`+LT;n3r5RseYY$39p%mc;PNX7Td#d3oW#D@~oTqD-1C{nv-Ccj{2(V>h zJ-F-Jo@#s7n4cvvp0I}pbdc$>2*>nN!<qTUJ^p<!Na<NOUV#W@O_cWj3~Mly;Rhiz zwB!LXYMX%l;-1ywOP)GzW?g}kxxZR~?KLjeu3+$5>npKpAV1ezb>z>)sD?-CbkIW` zV3F!IHnBhg(4J<c4#a^g$Ei5tq&Nj7U$fq`PT*0!ReAD=BR|_49B?g0ZK34-#&5-_ zULAfypIX|FwnLh$L2^w;Qzt?i&6h?4Ot6(l_Erb?yx@;|qp)>ftCne*Tj%wIpUvRB zcp!f_jY<w^i;~r_q{NN~_pE&H=kS)^;^E><^#^)Az~Goc*o{S^1zWWacu1|$)mid< za!1}fRy}AS_PJBOla_GIYQCW}x5ldNTgxn&;j+D6=H{j(H@MghkHw~5HBp(~ndim9 zU^>x`?~YS_6u&@zDo%ZGtd!ld<CW~ZxO4tadHb?IkLz+CA(sX*{x^-y52R!V6(*O6 z5VAMR#Hr?ZB_6=iD{k#ANW5f$7yW@05vk=)z94p5`KfrdyK*^@TjN#l+|zEd+!&O@ z(I^*0Dd;MTbgQ~&{TLtg95V8INQvmHUG91;B|DNTe41>-GT|pHJXV;DI&oQ3an_ce zw3oU_#K9VqB>;3jfM#t+0@cvYmLP7p)>&1vchx4&`>0)e-D@WSZgHm;Gyu%T;%1Rp z03!wM!l9Vhp(~qKEVpgm{Fz((sK%(rFbYB&%fyO;L?m9NrM6-AXrPAZB3pF#0KUDi z8sygk$&h_2cSdF?w`I87mVeh5$5c_nO%+q(r;t9$X(@`pNEv3i$t$@8JI5^^;w_2- z=}JVO`;aVmG$*#7+WzrCnBf^9kSh^bD{;ZrA-ht9j#4GTf33TRmEqpaa|ZNIzJO1p zj#MYn-53Tp>T21&yM#|Lpp=P^nh{a4{{eLD{1Y$kr$%(~#^8>1OHzJW@`};q?IQM? z6!Ir!b|JH0zJAY2z`1V%rje2z2esz|5+Kp980z?}1T{W<r|hEbV&zp?{17?_AA9XY zugZ=DWyLC(_vaH-?>3HrD3i6Wm&rw9B9g60RxbX?TlH51bBk<1>#j(k5fW&l{sqt? z@c@Rrom=vMgm}4UmD%_unwp-70}8ZiD(X4R7YX(<sVGCceZ>oRHMszrh8HI95{6EJ zl5!u?tf(<tb);%nHmcU+NB%A0d-I2T)~(bD$3;t$V*-n%xbweDz##nR$bgP7u8&Cg ztG<N3QHeTCWwbtiLn~pak7$k(65Ub{d!BnhoT}wZ2B>|MZa?s&1Jtg{j@$g^0M&28 z=WPi63-nP1LI7^Ql)ac5&<h&%Z*ozRBKCc6lQ@jN=s&RxI?>X`d?M7L4y$Cxjjc#} zXk>P_@M#0p3Cg9O{P;k1q?1E097;BvR}E1^`R0Mpy8Q>KZC&FLOFTCqfM*R-Uut3J zv!0h^pH6qG<L-%SfU@ZZ@0_T{D`2yy64lWy7Rhqk#e$16-<ytgygX689=^gBzw~Pv zze|;^fLn@PabZ*2B~XK39jvCSYmu989)iJO)DZQN78`7Z_kJY{SAgNx4N*rZyL#~- zhNy8;Yf1qMr$!QoWEI(p=(HkH(Bx)NacogR@`Zx2m+qX9c4WKy{3W*h=P$@A99Z3< z`AO<zmaFlF^PO^21-Y@Du`!DJa0Gie!sFqH77s@#O(UT4AF9OVPI>Fb)rL|dfdtX% ziQ#HoZxZTslhEY^WV?y4VC`UR#p0=(xooruAhD}0=$mh~1Z3;QAzSJyIrj1^!_|S~ zw6=LZTrGsaRx2qtTKqD7KPB((6#D!~(*zp{!1+y)3#v!%X`Jn;T;0UqNmfI0&6sma zGia55#VL;!ufw|c`1q8mGRkz<WnoZ)v}~cvQq9svO%d;Xc@KwIo)tfXRV<TC(`y~f zwac*v4Eu__0ZAK*q0pfcW<)8S$*EiBrIj}IcFA#(IVOHi0#|K5+apD61SFX|uGH9a z`3%)crdpW8$-%0k*=NgCe2eRj?-~{te2F<Lp8A3>AEAz-CVVwQ4azO41y_u%%fOjI zGwPd?Ga>J8LQYEF-SPMki%*G)7z5d^G@*T3qil3Szwgu)#mBfBFt-_mmuvzVfQvD4 zq6Hs)fh(DppB4;NEkm`kWJ|#JMqiMkT6%T+2Y69XmVg&Y@GQ-=3|R(50u}M{=lowU zsr`Lmx=VCTRZ%c((>zv;z}!kKyvD5~)%e7+E+pf%Vmh=GJl^AVxf9JNM}URKYE*$K zJPemC(!6;t#xyzPV0fB<15m_pOrSA5-TI5?rKn!HCAW#%H15=jVGyCbrFFVx+f6XH z=HD5j(rRZ;8+4xe9NJ!<B6dL=qSeW@*urc{#t9fgD(`af3n&P%t0|qvp=z9WXiluk zhVHHrlTnE|u^I=n;OG`CW?|bpF@*T$%QiB50V+tWf=<!c1eSaMyF4;g?K)zH2DX_5 zTVV%qJ?jjNP}=++ff2PyeLAWy{hY17S_!!(I}@<Q?%(-)scM@xR<eW2L~l%_@p1=; zNcFn#I=_~xzMMM~wgHU=wc?}Cki(rO7prveoKD8xe>loh*d(HIx+IbOdYJ?>_R+Yg z1Y<b5-}0#B<F~)F!|Ct^<e`o1V*>jX+JtS3I{Mx0ER_ERslsZ-F={NoH40i8{M%); z8bR-gqt&1ui-u!b9+E!=udJEioWkT9aS$V7WgKSmSviQYRAnup*H2k_^!heyWendt zTJ1?7Do3kPxm#?-LaEsMU?->>IsrulVaQ9#(u1Nj%7kKg#%`I)R{{7@t+l8O%OM$m z+_P31Q7&sIRdB#m`{*(sQ|+*2Zl>Dg+}T-YD0Wj;F}--!0eY>?dX-)UrrMD?{M9jP zh%*sS9J;_yAkfKxDl0ofc(dw|t+GA+s-|CU=+|}n<w3tL#c<EDYR}vuR`@`ZgCzMs ziU6`R$5vyFJO67VzA8wWs1osHl+x6(s&Wz)CdsOF#&WCqThous(hp|iqbXXuL<JNU z*@!7>L2?bIdHJV|;g#VM4cR3%VzmR@iq`@Y&_EU6yVdc}#;U`DYLRSl*HFRHP5x*| zVe(bsUMg8C{tw<GO%3**MT)#kv;g7cQ8VbX=g#t{($u!O;j#q!5VI#b<UTkn$`<1U zfwi=tIDFF3Di&*zE9<HYDv>AFz(W)rwG$&T8gD_b;hZyyag;G|`qSH2i>-H(RD;W- zs=<J#HJ$)Gbwkxd&grU$?vY|SnCt7kF`;!*Q|r}aBaPpm)D#~yP7NY^Va7N$r9-$j zc?S<aPsX%O>tUq@cOzTep^TID;uRPX=ccN?G!Ke48JH9TOy>+WB)Ao1!kkPyMd1a5 zRS!Mgs|+6zwGwXI4#0uW&rma|w(}WkfXkD=-m}6(QvAVdGt}M`9X(zRj#nwVnJ|IE zWL6)5*j9;2gpX#%W42IX$w7{(S`PHlC-)$XQ)wVxJ6;W$wY?G$Tts^tgk3mXD@8oO zAZ3oBQyP|DhsLsaA&1Te;kuX%2<D~NC7m?&ofi{g48jxu^D^xEFHD40H=&%`S0dZz zk^cf*4yjGS6V&#-?5h<{R!6Bz?ge_hum@ugo$3ShzdnwViM6odOw%toz_^m!KK~S7 zJV6cc{RESESeIZ&C_3`AK~56l*i(G}1U1BWxjh|Czbex!Wcj)>ertjno%^a>XxSy) zsg^PkkJ+X<@eEX{IT20|)v{3-ai~mAARTZ-R2A_S5)>#)%C5;vl_h|-j*=SNCH^Ga zwoKf-DWRFi0#sGO*lJ6V9bQgXf+cF=&|#!ptHcSYN64wnK=wtB!A46A%`GbXLI??T zm1tF><wJ*kJ5ddH{Sg|IP?>s@8!}bDsE;WuA;xMDNpxUNRsr)fm}W__+9iJZ1YpWU ztDAg6rt0sx!4`c)i>|!ES0cLCc0|Ljg`FwxO4+zz9t#pvTUI6B#~9EK;}m)(YiC2o za<z_M$y8$_KY(II6{Bwu5zs@RDyFKJXjWV<!mySD4j~RbBcg8b{*%;5?=-E%J<Q*U zX{fnRo#f9=QqyC&RpPq_N#?{7JFqeh*keBd7$lxx%|Z@KNSdYrzP!ghC#$WMB<rDm zbJga$b!pG@>X$GzD4C+R^dkL<p$VfmDUgEXY7u^&2dr1ydg6FCj7Cr-*kCO!F5YIU z8j#x^!T}%M7s)U(Ev<Es7N3!9CaG4%4@Xh=0vfa>GSyis6qYzcv1z91)eZ^Er`M46 zXR{QmVUT2LNRTy%6~JdO*x1bp+wf0{>=>9BXHoEjQ&kU__edDa#I{PZjQWsoBnhwQ zV`^(@;?pt!?3`zh+_SpKMF3hQfG)X83Z;S+$^(p9Ha5$<+s`Ba8p0Z{#psRgW0G`6 zaPrj@(G$bH%$H$tvdguD@ej)$((_^>vA(ee+Xgdh6X=_O`yIaHF||_)$?z%%>}Xo? z1?Uu?;IZN}yd}hU<+S^%^uGBJk$HWpkr}2HQfWySzp2v;j8z4hIFTA6iTZi)<El?? zCW>Mo7>TP*mx1qKB2|mA#2LheP)*liRY5^X1oKFujkvE<Sh^zx=~ySpA^^xC0%a-0 z0tRFqhFG;MHB^?WGG|ufq@x034HP(?Gt7$~SG)S#o0ii&J|RcVRxCp`l|^f$+;N&3 z*kL%9AHX4W+CG7!&g(6sEX{EP#Q|*?=<pW@H*S_U;B?mPrz)Sc=s)v%V{!d~(XIa{ zRfJ`|rDbeE_LNSf-{pSO)&GmO_W-Nn=;Fq?%kF}}6_k#EfCcO*7F1NMU=)K5#BMA> z><Vg(2#BbNsEN@r_O7wS?zKg+W9&7yC?>`%xoXg81RLLPX7=vAAn*Hq|L1-FJkPLm zXU;iu=FFKhXUfic2T?Y<MPu=rDyh;F`T*@Ih{eT~P*!^G2^~RETD&I%hKemKGp2Q6 z;Yru$=u~$N+&d=-bVS-;NRA8@D>XO>8?F*bzsiYVZLUyRgLI=Cin605SI}R#Y5Kx< zq}(tuA&e7;A!r&lAgR%u*3>Voi)hXC;{vaM<569@(%R%F7FthKrx+*SkR8Lsrf$zM zjzB>z$6Tt<ABSOVMdSN@DZ0>S<1fXUag$+Xj8X9;>7xTWOxDY2B^L8|I@aN}!r4ft zi{`ucfn=`oh;}Bb4{)Y2I=nYliXTET9pZb@hZG;p;0u-c&&k0rMc>d&D101qxnT-y zeqwxK51DqHS9BD2SN%WQ-&+7zsZR@PZ%cPDqv#H%jr#{&`%i1bcMj1vVM(YCPl*?6 zG}zuB-s)}YDmlmJ(T794LLX9m0UlJWX|R>7%Q+skqN+u1#)|<JsCPxh-)t|4=PJX0 zBeuiEpxWVFa`e<=R<S#1)8MOyrg&CEsLcaCxe~_Qj>>*nuC&##6O!~k<X+knYLKAo zZ8DSIXCj9j87}r<n-X}La3b!Wq<js-=-nOPlUI~+aC0E-JoM8-rRgIu<dHR2OlV1G zIOsD;uN3`VwGPbdq;4eK0c;o~*>WRd^oMf^@Pz&tMU;nkK!WXTuzK^og;W>J*i7I! z8$-+LxSy;`5dDX~f?sQ_+O(ewJ{HPUco~~a*&6#|LkWNhEzel#lx3Ll@V;qm1lXh+ zIE#>_OAW1_<ZxC;NpK<1q?$CzCD@eIh6$m@2r<)vE=t7EC4VLN4LLeOtQ>M>C!34o zLyWs<I~Sll^fyhz68w}ns3V(5C`>|w9ulXKViON4@${#mblyad+^P<0#&a@Yq*%G) zOH93tdEFh4-cC0*W?h9W7%94WGOTyvRKN6hHbzekt=e;PY$TSf7QP@4M~ZDCxDS)3 zIDtFpN2>>vH&`@v63GNhw}aZUDQg7Uhjy4ewmzGy459MNRmwde^+t<s!YBht9VJ$( zdb5BfU;LF4!vZvjJ?4`?+LdfLm&Zn7F_o^Yw8m01@9%WMIX60Sl=9m%@@$moQIlrV z6(PDDiHu3gb@VJV16Pz4FIh=#eq{{AZQM^wG_!APrzD|UP@kqi(ZjnjE=&;ef5xDt z4Yav1j<4u=l&d_2wawp$Or<X`2C8!#D=5^atQ;-6*E|b_qyExv0IDMiX2tL6ZbNRg z@&nCfE%)t3@(}U}y~L-*6DW9l^NgEL<ew@XZkFU#+ti7BMe2-!$FL7Qgb}`Vo>^6_ zIB?MiDg8KMp-jRzvGibChUiPJ3|qg-I?h(~6RAPQWt9bt(H2_v@qAi|H&>(SUP}eV z_w>8YYGu3tgLPm1X;ba8FEEkNm11?>7fn+^=?F)PS6_jx0Y<2n(B}ei8;iZQkmuBu za@Pr|M$&7XI6v@j>cZ0YER0SVNKM3f>h<O-V<F0fK;{S)D%XFZ-iilFJ%VFjb;gU0 z_%goF3o?AXIFuUrE8|6P`g}fK^sm5&6^vQ;)iI0sO%Pkr>_HRwcra;#*ra|cj-XN7 zumCgmtmMLsV#gUjV7A0eIIiG{zkrTT*LVj1z&QH$7xHj|SUoNn){HWIJ31kZGW;WT zD&eSNrI#jBJv&LeQd9wke&;M*akLoLGRcnaRuw32KxXDnaX<_<2g^*>FgaO`z+L}D z(Yq>TJ~o?O?2j?I4jf(B2z8cFnA!7vCWTy?D0-E%=LPS?Jw^B_IPE0ACW;;olmPb> z#^n=T5?_IAm?XBS=Y->YblA?>gw~nic(g-taYO9W(ZvFI9P~Hpqb4cKHj&jyVq^Oy zux-q{^uRk&Nvc_)2cZ83PI_UmW5y%&m)Q6VjR-#I-MlhA0H^%>P_^RJl}oC~+-WN6 z<rhf8L~J$8txH8)pzH%2Hwzf(wNXA8-@k!>mtI&OuQcRbqF2PuY=lD80W`lZN@jC9 z7?wPGM+N*dx*F>6BZOO<Uc<^d%_~@O+E?@8*PvPQl&9Ny{^k?_%#K!Wr~v0o02fq% zCCJagHm92ZgDHO-&98wAn32C4tuu@2H!Wh831SX~;A)$vj6-VvT$~()UI03H18wo! z*vcTYCW+;RlNXrDs@4)X5WKN9Z-GLz025*wEHTyu7Xa1aJh?Ur`=n#96WwI7236(S zlf^m>d!g}^d+X7hF7V3yR0)DuwDK4x!@S&<l!xx1n%(TlqIV3#%mSur-&-YB%Wj_< ztr+((?S{1cwrQE+NtM*m7bXJhmUgP0%TwNM#afEOX2E&N)_hVtS#)bbY3Ik{z_F@g zv^Mz>rG6*AEv8p-o9jG;Db9UEx39z;T{K;vG2brGJ&%eG=fg}#8TnyLI{PsL)h!c< z-jxksn0)cI7!van<~4Az=Rld%<)A`k1xB={EfZM>h0B_25?j22{+}hchHsCHGxhYS z4<DnjRKTn!pQtHw9uni%VrA!HFeCZ&UfrxD2i1QiK2ycoUHBYL$xJS69b;N6+lykD zfB*C#?cm<|2cYnH=>-N)ZA2vkjg!9;$(D(oP7pFx3>r;4xw0H~IsYO$gNi~uOAk6{ z?7JEo5uv8$yV4~%zW7zBbV1XZYuk-3v9Xy#yf^xJ{x%TP9ED>Tys7Phi;ANaQ`uY* zg4~fTdNU7?zC4JNM|66@C$Mp=z|UcD9L=V#bow$L)yv<2q|~ATNzQb3SRMyOdgJVQ zjy0RdriR8PxuVE$K(hp;EmSHl&NvYsCRS7naZ<(W0CsRYh*sg)laEWp_XrBz(E;JI zZ(}aFqC8rOYUC<T7s;S$7zd6tB`MS3;k3U`R!!sE7ynEX{e@~PiCYSGzxSadHf@qv z4lZe-vKc?9$*0_YbBuIN5q;XOJB_XBoYa;z9ly&#Nj$UN8Y&Jy<2mk8K0xop3mBAy zJ)J5f<1I~%XxIj_D@Am%Uw8_hF9q@0K(3^S!z#772hdLxnJp8NuBoCY6RhLW(Dc9A zA|c$qV(Up$;eKHI=^AE}SCzC!)a8D2h5Ndjb&1L9=69hYKm!x-eFbW^VDJi+7w{i2 z*muf$^X68EDsQsR&^2}k{7b44KLm<`xx+xVC|anT0qC1sRcd@p^o@^K)Ak_EcnZyn zJ)JSkle0C}g8c*K$djaEnm9aw>LFS$H8dP&*P>LXTlo|Itr1tF*eVs5krioT`%V;& zPwN|E@s3XGYvXB}!Ru37ya0fe<BTMv(lg0DvAVM}n$5Sfv;Clyit94g#_i6LI@3k} z+DX(+%~ibEj42oAZ?NpvK|Ismo-a<MhGJ=ADi+<T-6B(_i|tdcAB9-*TOuu_IPG^T zMDF6FU*e0&2^jZp(~}dI>5gp_F4=Ryl)E*g*O;#RMPaUQn*Qf0E9tOB-8oDTu`h$A z16Ty?z?_4MWF;45^?PNkn3a4x>yFVr?RRz{>byW&ri*%NxTDgsAkm+SGgq;u)~5Yt z7;LtcvyE=8V9hdzrYf{jPf;n(X8tsomXe!x`6H0TbNN-;G0_SAvNJ+avuM<ZeRqgf z>38h=(T<Gr&ah(Vrl8+LR=Rv&P+%iKcBC$~>42mt^v+gE5i$JRdEDMHTI@r6SQ$D7 zDRNqoY<b>%_DLN`!W}biqQB=yfQ#&m$&?qR_hzP%7?|PXWsfZ`PAOLUQ_mF~Q7Sl} zg4OEwS8z@tA&|a3dFvQm-^&<Cv5{q*m=GRMRVX`ZH7;{!YkxU#(CE0szOtmuT*9dB zqxEZ_LnU_#lFQQ5vww6m6!ZPn(aM>{(97n<`ujC0t&DJxk3s)lf+dgkvuSJr=4%kx zzMG~>4n0F0GDJ_>Zh;wM^_oM`p>d#!esYN`C;SL%50)t9U|3O~IE?vtyghB0lp%)d z1Q|E>%@kd_Q|^=6u%+2Bx?kE7Gzv{L;EL1ryX|Oq>P_6Du3@e+31#69F70p`6Yv~c zVDrf^@t6gU5>Kcc;S>y;%E2&l3*|vIIai72)XJSA@w3FZ4y-3)g&4czY*}a(l*1UD z00Z4BsWKnsnJz!W93ncQ4(-HkF>S&o7Vpt?ZV?wpt_;Gd1iEM;L@Xk;W{Yj?>3lc4 zm#(`~{vMe;TkNCni!+k24V1!xM<j2yh;Ix%B41}>_*lCTtf?zh>M#ZWWVCsSX+Y8- zSoqdhi{v_}=&w^VT|gHn1w@%F;0`c>)}{h=;Jnj>q`&EW)eRfRJPihyuEMar6!%CN zg!0rwHVS+Npvw(9xu{Rq(`3?Tj@YIR6%h<bQeZgUir{Z1DEoHMdK&}O*Gl+U<%*HX z=s=Z*)-n%<mk*c={S7W`y+oW!5BR>HBl<a03zwRL9rlb)utB(m0y<SMOKe&3HWgg^ zxgDaZYmZ^Q)?$*9B{r<fT1pP<mDH>Q&r$b0^OUc!)Rf-<T{kQyseJkwYc?l%l!ZeE z6bEasm;~ozX~rrHR*<^V%pX1u=SMwdMMu)a3F$59saUJTgank275*q}WV4wg_5;_W zd*b*d1z;~}%F+2lXphD;mmMteV26~}D<>B)C3^|8fa5ql@C7pLv7kf8=dz{J`$|RV z7qy_&Q@?K<$O&wVj^_lHE9soTZbo36$qwvP@oy;CZj#$`vBx)&PRP+a&>uhwr!BFd zz~q&6rWRh(#n}h1EIkz^?e323!0M!VD4M~fC+Aru*2Nb>%O%vtmnhv0RGIRy4X>;s z?}}#>CpyH_g9OOxjIPgdXj{$cX>^=%3?6(Rm;O+otg|5(&q!>j8la3n@D7*GY-Km; z1l@p;+3PhSr?DKsw6i<T2FJ{?4Ucs^S~NR51;V34(ZG3PD<Azz)Ft1524p^WLugTU z2L0Gtv=VfH9GQpLe0p9Zzt0oHQ`~4Ba+Q5(J3Lw*LBm!D9vyJqxpv1lq@15uo@OJ@ zj?&BsW2CyQKq=APnID^-O<PaN1&q<qT^SAm<ohFq_6FJ+^64sj!q?eRsY>0e?~3PS zq#(0)WSGA&$uB#j2Yy5=#mgx@3es>9n@Ax>_L7tH#VWDyp>aI#-FK$E{(EV)+A-Yw zTK+vPza`7>%kqzC`G;wKGMuJVW&J_YVu4t>f(z^qmHtV7UVQF8GHQY7+aQ+WsH&Sy zrKfxkQ^)q_I^VWbb-Z?v=#!;?wUYd_0LRS3Ag=`UlDQXYccrS2!f;4pE_u5^42({t znw>q8($mjnQV)ahnLc*U=H;Ygn8|kr1Z_UG<>Chd&v?c%C7h=0UHGEs<rLEil(eVY zAZX^D(Egh`Sy$CDBM327cXNdFsBQQPP-<~{HkEpDcWf**xCd)N53XZ#ke^@&!?9T{ z=-`&ghPZ47%-S-Obpn(yyI*mVmuk>c*k-Ci$2RAkXx@G}XNW-pmx&|gE**mDyEp72 zeVopIg`Im`3`BQSbTjTH4QHLHA$&Tz?4ht_kK4*_NDmqrOLZ5C*g{p#enZ;{*rk>| zUMbzZfKAsuUMWt9u}`NusSX2f4N}c?6t-Xs*3mvpEjF(ntM>qEz6<+f6}=BW3CsM^ zM?X`mol;)ig=6mf>z#D}&6h7fKlNZ^LuZ^zO7epC@G`jfOg(TvTzDWFF$!bh;HQne zZWxezFyB{E4$fxPQ=nrBHDKJ~^cwwnj7d!eEKnA3z#cy`_#jNl$ijtU4H7<9mcm?V z@4_ozN3CFSL(Zi(8<144P1Ys4NDO~i2x~pnHmtYfygAT`FepMhc)xAVv@f<|tH{+B ziS?-C5wl2aRf!_x(=SFk9`!mvZ`DsXwzkh@%gu(Ji$qc9tC9?!>KE2D#T%z<(sQm_ zpWx$^^EGm9v6upChVBHwlx*A*F@UWsr#*r{hNT=^$5|s_>Tob7c)nrb5*%r0O=%kS z>J5Ww$3GTBQIBiKA*6YtQ+tFAg#8GY5ONUiBm9L>IFG;c`fbeXrlt<S8pSuYs5P3A zZGyRn$6vuTj`R6<8tjuDcTBuaLZX;^Ui}vDv5Z|N+6dmu$XCn6O6_g~UUiEg%MK!Q zBAL^o(77W$G}kbbS`kE+!1d&wMru>j3J85GiN4_M#oiJoh08?0P+C)X4URKpYC)+| zbO0~VM;tsYMB`%<i0&4@SKL7mT0=FyQ1Rb^_b{<_%CRx4piXZ&4KYQst}9mf~l z9p^7V4y$|u^;U*b3QFM?u6OX*u=bg!xH6AVIYf1dZ4dCh0qPUKSF$(Jo>rK32|IPr zIkoqMC!zQBrRAfPlzJE!62FPhgMjkCMpM$XN~l(nEqyECLAolGwjib9*XBLLShd;t z6ngBUAR5LuPib--Oynx{ek5&Hh!aEb4iX#Mu<^r2RC*!B9AC$yCvkWyy|COQPws1X zh>lggm}BY0xB~Bc_NSwU>FBt&2cVc;JxGmya<pSe4tMoJ;Z8rs8O!i!WfYn-zaKIW zEN?`*t`sW?dmE9_D@A|R&xt}?Sb8+cCXXgj9TspxB^mxP8xw-zG-)0UilFabL@T4| zNJt02_)~CLlmW~$xDPvb0VV~Tm8X<e)0iMeV>t|yOdMCh1Z4oucc>o9ZDk%56$faI zZ5atrR=hr?@-~@KsbQkR50sdQ<S88)5flvc)C@9emFUan3`Tct>T^nQp%X)X76)@q zg_%*D_%uy&aN-kZR~~##8GW2-L#L1tB6C~#!0Ek_dMw{qV>!VvezjOmm(pXEz0+o0 z(x8xYXQkSR;{q_N)@P-Lh{8v;vOk`w4?;ZT+Byn(AQT>brmHui>pbu;)76hgtI~hL z>~|=QhT-2?DIEV{&S1*gAx153q4gxY5jhSLMeTR;0KjxkaFnYM-?ieclu-H-?0F3S zS;;Q=-Wk2cVifMZN_rflyuoZCj&3lvpmPlRZr6J}GaK20P-Y`5_FrU$csm+$=tsoV zc}I5CTxBfuk3M_B8^Sr@<j3k8I2fx;*O}<SX2q<t%5O+J8S*bqBgH6bC*P4>k+%38 zjZM3RA@RK^ca9~v8=-R7{QrqN@?xFn+H^k_F(@-D!IT9v^-D1WUV<!mIeS9mr4eo| z?uDv`{F`7EzuFNC@5))UHwJI0vum+58+qwxJkrm4q<;(^e{ZMGXrm-8A<NgpU!r*E z0Q4GT_0?4LWr~2~7k(qoc*JHOppAwXH*En@te?G#JY6paq^NkJ8PD|IDt}dvPJQk{ z<4e68%<rsYCBgUusEh=98C?ko%LM8K=x}S$=%qF`?9#M`6Htoz)#U_-_{p?cT)su> z(8pF-rD{vrU>9X1JJ4^j;2;aRv_bT%kT4%ji#0kN=>XW+uiq_Pv&EBmY!n@Y{Qac* zMzN~kbcJ-@C{__1u8?sXMHe4j7wtsP9@`gRp)bhOpT!d~?I@&ivUZ~wVBe8>pzLZN za(ScJo8s2mgq6l6t4Nnkc!dmrlQ)SS>WzaJj~kX?#oNO{z?KC)$(EB8L`OO?dzu*A zRq3LE1neWvHi-e0ScT1EhzFGk>XK>0uMo<#&PK0pf!w~E#lgb*Rpj_)v2v>=XgcK> z7TMq2j-wY`$3?1*Y<iuQ)u3!)=Z`u_D*u32SDqapjeih(xSFgzy`Vfcu^g3TP&!%l z19o_OtRsdW#C;)DI)&L8w^3rWa*7UQsE{*yt|LX_IE|(w83qXNiYk4UQRCBvy{cX3 z;9kmY(b9MPc2(SJNE5h_>DhX!Fj^Av+bViSQcsMYx>x`3x*Yveno*TF<-!i+;}A>? z{Zp#(ME+xk84;JaRwZd$MGxC6SoMujcK<}yY!%%-%!Q+-+9ip5SCK1QMQ^+U`)sRN z&l)lzk5=ehJH{yMQqhP}wp}xAm5<cp$SP32$MiHaxW7r}7cMA6F*rda@`1+_@N##0 z4!^rY>0(OGn?RDciS7<}ftlde3wQQ3PbI6jiIp98XepjQ(G<5P$^(qpASU6nM!2Oa zKZTW_X&ZuzI#q!{WXgdOP#2C6kL^&xlaq<=N9?^WolHh-7Y7P^c9DzQ#RkH^yLtM> z-8_BqL7r|kk*EKX#M8gt$<wdS=jog0^Yp*h({yhS^uyb<A1<E7`yu*maj<e}3u(Di ztm6D;#=BzNpGwbCwRb}Lww<)^xl^nq6svv-tl?Y8I*RpeDXa)HR%lOPU6^TEmbiu3 z?gCbwQdqz3(8@YM%lfhe)~X-KD2kN}x5$#iWR6u09D2~Qgc4ZIup7)xOq7FiE1K-w zDY`iiE=9t_TyP;RctwUKyEiwJCc9DaM|2O%g7^H$*d@51M<QeP;C;wxW69Osc-yyf zB7gokgFh3e@~1q9Km7>F+#`DHTR_*<PuL&bPki@^A=dryMY}<-ByV~-t_@kWN0jwf zVS`ktZYos5mQSFDnxUTT<FxK3e*#s6NxVvHiV9VK<0nwrW~lNi)S6HE@;5`R-OEdy zY2qtyuq0MWPxiJ-@=y$Wv@%11lAc?ff1jioL{HLdzgSrqv4<Qsh(4Z<aAB~uhU-a^ zqLfy^Ne>N38mTneLw4*JYqhpjQyM8Bchm0lKGW7%BO~XlpffVIo<An}C{K{izmSB^ zd58UQgR7wQrkJ_KBrQ^mVBe~9Q5j1z!=Q6bG2qZajop-)nhqa!@$$zi|Lh_!3}T&@ zr__`t$|1yf`L$4f&5(1$GRt!gRwGB_U?Ka#IB?lb`W_H_!8BdU5i98{nsXNJBEKHM z-q(-g$nz88M18>scpTa5u~(%GT}Dz5VvzFuf!sfcfvzx%=njclCL+zSz^S(6;T`1C z2@tt8h7)ncghVBBGl7gd2_w>c6DQ&|hZ6B1PN&4NWWiC<7Uaer5q<PMw`=5XZ6`~S zB)l9&4jvJ=dV~+g?Hgag6VA@={2Ir{GJ4^^vU3Av&zCIy32$s*zwGu;;PL$|^5G|O znM%~9Hmt46<90-8%l9N}j$l|iH-ghH*9WwtF&veky{A9r+J~GtCbkuxujRBaW>DH5 zq+O1fX%a#atg}g-f8df_G@J{e^F&Pu_117nTCL$ic$i*7lKwEmDv`CDxFmo2k`uW) zQX}$t3YTQSDo#W<U6bS_eIJZZDvA3W$akm27G4!tQUDYX+9;ayGa$Fqcxln;v}mW# zMN6xA9XF7`(_$;HsVqsw8)MEdSWoe$36Iw;K7)mZw=+onGdPb`jgBqtZTILh4OW;A zL@WCj!{E(1*@rmY6I{rZ3|&RC;5X5pEI1=Z22??PjDFVFvSwTzNpBB6YGvH1yk4s@ zF>xK)bx&--f%lFr131nMe0Qw|+=z_1COQW=!cYE${7-8%@-08XxLZ~k{$`A|YiJqx zgv%|l92tEMn;7%2<I;;U=R~hEV#5Qf3@^#SepbO%8V3_st302BH1>`v1DNiLt4(ru zl?H68;P+)<{DkFU6{F=R7<bDm!{3atcBN$nFK89KpjFT^h6)ZV$-yyJLC9U@VB!ju z=L@ug31tAsnSt*v*MLnGg!WjrAS3@1ra`6(eu8ngtTOz~7;BeVR`9Y`!OL0&En`E3 zpuuG9713S)FGQ^tI%z2-(Tps)EH)PoeaZ9tnDg&{&x<&AMa&A=HK=3_3{*hrOEh94 z17<2-jy$|3)+WE+70Z(`XGJNXO)23r+&_ti8^1)A*BNLda9ahe_@<1~I+-ypkkT0O zWtFi5Vpl60%rI1q&%4g$b;y5re-u<%>$zE0#$8IrA`MGkOv}NyQfXJecvEahF5eKH z{X4*Pm&SVforX1PQAw-_|Mi&Glt$=oM!4}^X@v1*lyGRFRzh<X0pGh2X(zrboajUH ze!(C(_gf7}zmQVJm88pX0Y}bR(UyeWMh&!f5k4EpasGs~RWZeXTLw;qusn-HwlPDV z{H9FE{wmEC3pAR(mXOo#h`$IMdy%}~pp1!_kE#W~o=?erL2@obYohOpk`UUD1Kok_ zRG{7rC`tHkHqUBl&N?=a;wK3MRjhT{8dg=7Rg2X7U7SpIKE&Xv|5f}<Sl^Qq89!Hp z{AVsD!XSHdp!;zQ$RRmP1Nunn=R&<fjlnb_!M};l!h;zcaP}Mxuw0pd(VU`wA=YNq zYPrnOiVfq%KJUtTJ2G1XYLQu5K&dgjNPjcXT2lYK7_#^`jPLi;c<xNhEYxyr%(<I6 zuHFc*Ud<gjOXK2aLHL}!`(3Q8&xOmb=69S)^8?9(0XiG5PCx!Gb`ny%Ge`$dGvrcI z|B@I~5-^n1eJGZ<5v@-|E4kA+@q`%~apR0Kh+E>Q#pn-Xj-fIXW{ETF2|TauPv8N( zd4j`EyE~Cie}ezXm|UpfMbk?c@$m`x502)L=h8ID&&q;SnGt9Oa5pxi?q$YVmR1IJ zOB_=<BQR@LIeMCEf%8i~D)1rSRDmxdc@aTyL{#t}QY^q(e`XcP>&zj)!V0Yl`F2_v zke18@P3Aa1Cu=yJ{%<&@aw?f|mM2@3W3B*sCUy?;Xb+QDU9+siuwvWZb{J+Cdz8mm zt5Z20I#s36%vR(|wep$RK4?S7|A^eqjC}g*(#Q{<1NnX8e?(qCMJu^lnaF`B|8vQr z899S=y@TB?W_~d|$_AeT@e5J-dL&7Eg`;=-MjKYW5{q;dnuTJ4h2EBRRD@rs)Cwg( z{43V5J{|Xt%<opt&-z7gHIkyH2wQuT7H_cg-J=z``383bPU}t_3q^mDnu^bTJ5BS( zj)MypUD!8TmxgheW1|g#$rXh4t%(0S+%nl$eL95l-=~_8UGKzR<&!X~q;HI->)Xo3 zQDo;w41+5_i0(GaBQRh1ZWM`rF9w(Y_=OoNMui&iL3ArGS)jXHqHm}I^amq3`aBEt z)gyT!41FtH8dK?m)C^X7!>&LNQqdb)K>ans0{uda8GWmo!O&}Y1AY7mUV2XpsD=z` za;qmzak>Equ-9Cfgr)Kbam@|(v^BPiQIZ2N6^RuyZMtPovdxO@OfO%EjLs~teBJ>~ zSKLHd9z?z@7P||^7;>aoj7xcd>Rq^yemp$?h8Fu-i{)ss{aS3B7F(;umS{05E>3TT z7Mr5Q#%i%)JeGoj`)Y~Zv{<ATYpKN=YO$JH%ukECX)y;aCTOuj_<NkK=UVJBV%2%# zT`lp77CWQGjtnAAb&{Wu){XShNr9EK`p~AMUBGnVCR^O(7i5m^L)Pe|I<-uzt*pPu zS)sAY=^pQjXJ^2##{H{eTy{3bxniuH?G7TVWGTe!71TzZkFSPiW@kU9kOj()f#kR( z`8g*dAA4>%GI0i<aPF_9wWVvXAvKHZE2H7|(XYZ`xiIbNV>`=JE9T;_b|;lZ$yGQS zNS+DO$ZB)Lp=UGTXO@^$SMsF^b1`>E(US&{Y1Wco#jxm-MR#mNc3Ml3ffZx_AIhEG zjhCBLotGQ&8Om)wv{boKbuG%R+n<%|{7;vX<yy6-Rc^;l=hUAJ`I}GYnCtl&<Wz>3 zo8Sf@D(32}Ak3JHm8z9!nW~r@_TyqMiYi&A9L~g?0x|#7n^zann`lcaaYTPLryet> zo;9Z)QKPJN{u9@gA>uN)cBqPpy9~7;8)d1sSG$^&W5&GC5DVtZ_2tZ8>Rgifdo3CB zv0!swca7sM=IHJ?p88*TbN#$b-h?V#qBYRVRHn)YS};}In=^H)Q%R<-wqQ(2U}|eO z!ysG9T68~vO~~{-M|xx4h}?2GgzmV1hVFJV@<K1Uk_8Tu^Zym1qU-EPO5_nGa*k8T zjsO2b;eRZ{-cfS#Nc}GrsrBFLQ1idB|NkTDj*gN;Wjl14^unP=hYpVWaTDMn7rHMI zm-NE%D1JSQHY7Sq;|2S57>l~kZf~zFjUg{8NR9QUE1(x8xn$i|4p(?besGrjT`G7X zX`;iN+w}WClSB+S#kd~TSsG1#sVL2`Cw3}{d3Kycw3CTM2Pc)pa*xs^=6FyNt9|lY zGVG5^9wM=nlUhD3rC15@A<JB(>JFo;Q+iHwZYx8olZ!4=i2iALQwhJ7e@FDLQlQ%l z8?^+yZxmZRR)i6LVDpZA<|?i58H|32N`6#&Bf`qKSy3(HLPcK2xBycbUk30p()Fe? zzS65@%$7eXBS~gud`Z0AC9jBH&GDI<1OM}XqN^nNN|DjH-<O1YNl|p^+LruXNpho! zS!E?wDl2holQPhomz8+FaY@KZ!e$0GPH3b)PcVpa!sqJqej|!8P8iOfT}XJKWEc1| zd`WmQ5|(@WpTsxbn)Y{c%%EpBlov2!sy{tGihT5zYWqBQ!$w>Otoqv~9!f8?nRFWG znc6!`PB{OPUXNU@DS6jA1+T~$h=lK45%JCJA7u2$FDGaGqHy2TK*R<S$&bwQ!Dt>> zo9y(Fs`>7&C^;QQxPov8;Wvao5eg8BDw1&lQcS~MO+H~3TNddsY$~H7c%}>2`KSQB z4OfO9B>PHr9o9650mpeJZ)Ha(V(^s$%KhoW__l2he_N_l>yEw3_k5Uo&bJQ;go-NP zeLPjZ_q8EGl_l@4dZ-^>sjm*8`VKVem{AvwL{<ln0e$+PR8la!s!UmdzpS%HWkD2* zj6q01n1C=9Aq`;;!a^5X#m?WxIPiAa(&&?_I%d%Kf0V13OQ@8)eMWr!&@KbZecCQP z-B|s$x$<_&tFPAYXY@LAyWH_t>(>>=hP6vfDEZM(YT|p%RdTwAP=HW`Ab_3?f)j$L z8%e7sbqj1#s|+TY@=S=-n0yt<m8S?@v9$7>bZ1N&>^PInTB}S74K10xUq@wf*xR?9 zNso?Pd9F0!$`cGaO%b{v#3Bqt7>Y0&VUjyjo{-bfyi%GD<&iK)QKdN(QA_2S@_|hC zmFhXTL+iQj)b-%HGt`r@eaDyU&i8QEn9h$w70tTSv6{;EBHAaY&JT9yy3<LZtT5f# z@c!*5x})o$@iZM#raR|7B&Qn)3c?G7w+O`uwqT`#XGz_05Bj90s_t~h^jWR#jrLr3 z_7}bVq*<<evHEqW$eN}0Z?qz`PnV-gqV?$s;Ena^+Hl}l{elYLk{y0hW8Y{Hh(j2S zFbN?QAp>C^0`cO?bIz{}E-zCJf8AE&a$-C3wwhGO#|op7syqj&<vB$yk2mA8c@Y_1 z1D2;FKp2<77~RZVc7={IE+3k>oZ6IRRhOz-?{a-dTGf)O`0l7AIUPW_h;R$xA;M#X zX9)jRVzMQz0ww!~-70^=GE``K8;xCSa86a|xoUs<I=my(0-;0AU|zTmB^Hr`fv`VM zeHix@%5xq15U6s0(b~j4wLdzHdW`$`G(vUgL2XhqNb-wTV31TDnhxUB{?xFrKVP9M zsV)5$QL00qqr_eaBN37irXi#w%tct_qpFaenIB=54=E0kJoM)=J5kAWZcTR8K~rQk z__QeoRA!YasKER2efY<$DXy0=HbJIA;E~DLybPpG;ZJVWkUV|w_`>QVyg{%6!Ey-Y z5!?~{DpUSCa@+W^_9xBYn87qBzLmyqek-myp0LxUHRqZiW4BHvuHTjEm_+qE7Y>A3 zbJE@Mi;h_ZCfk1ucM;Bo>Ijai=7fPzdxYKygAqm|j6;}$knU%pIkP^sl+c{lEi`r~ z!k4ntoJhEGOmjv-o4MvJeZe*7s{qFRKu4}Q-Ka1r_r4nURC5wddcPHe1Jj)6dagO) z!J6ibhTm6ObDoB2OpOA6RCDh8OHO|v6d?#G-5$XS!4n}Mprq#9sKGU-rJ2mJFs?a1 z;Iwp8JgveiQ}HeD#Dl5!)5`q(2Buy!HHlb^VNF3AtCiXAZlO8DKx7QU41{ci#R$s~ z)+21M!Zjz#+NPZ0X<g|{`Ln-uOn;n}nGLn7+F-oJXAaDtGr&w%xeSwmA)_+*8Ns{0 zi_*=EbG;#{*F<tl@r9EBFlVK@Id2o9CFm({xYjx=R%WQQ(onS2GcdPmsZ-JTh`J~j zLNrdJ7*2n%s(!eEv}_{Tq#Sxp2NE!`+6?Mnn!Galu?jWC4D}At60A}t#uhU`TJ;AI zK4YST8Rsm+`Gkqa^;AiCnL(G8Ca<*QvUFBn!IY@hC8;zNWuos3jfwM6ZpK888K-rb zOw_FiQ_3Xqof*{i6Y>dGC}2qacVtwk<Sx`MCIx6p>wKM>@b)815WasyMutirLazGT z<t_gm^`0YqtfC@R;t4{fd<Ni<|L!fmO3j;y><X2<gs~NI`MgwF_*{L~RiDS|@bs1H zGr11w+Ei*H)cvryndGi-jqa)n=|nJbYA!_!2i~)s^N_a5IIB5rcur4q&aHYJC%uT_ zJjA+-iZf8n(es?)=A6IkavV~~aQ=b+rQ#&AoT>)DFlnDoSo<qUYbk}ed04%}>_H*S znj{JRPeN;Uxe>pXQXS#-V+vDEpZZn(nu&JVt%IVK8u(Tx(A>SCSU?N^o3%1WJNo)9 z@oy>B7ViJU@Q80K$wBaC7(v8gid4=E6e3=}rI>rTOUE%YiW#OqIZrY6KC(d1d_#Yj z(Pvj=1s{jU07c>Geg3dSzxj%zH*X{PSigV&mON@NdFtz<JXH|8YZ%hnNK17>dS#N= zUh>k9hSsThe+R00f4cCzt?1EeUhV2?Ub|{MPpP8i4X?`ctcU%h7FZ2~mx{PCK+Sx9 zUCsOg4wRbtyC2O=){&epQf2G=F7L=s(co!098(p-r?TN#H))s7TCi0!k3;%uW*Z+h z^NgToKEVQln)ziVo+(tiKpu6GD(USp9IAP9J=MJO3eOA1n5pLNa#!<`U+}!1m=UUZ zw_Iu7xA@xKU@1bVd5>)EFV(c4cn>!J8g%FPQzWmy6i~++zNv8o5<bAV8JDMb@pI~$ zV29sBPUH7nL<mf|F&&ZazmZ*WQZ?cmD;=|*XaA1m#iCnpeog8Pl&Y1Ff`^1-!RYgs zlzPP^Zzx(d!2aFhVbU^EFGgx7TsncvKEc8QMP;GgADo3|cU2Z%UM$IibX{d(`vpWO z3pE)FLBh}i-1#S+wmuI@GcNvk$+?(gYv$t2@0^PPwv>w{gndnyu~PK{lZM^B8=y<2 zQJFmKFIB0t_!xduVMNja-9i}asFOv7VMj42C(W-~2*U~M9gK~d1)Pn`l9>&cbDWL! zl7%o*6vlzWL=y)N*7!O{f62d&fu>L%+87bB;9)6cj`A>uGDmp`d}!uDcz1|AjD;1g zb(gbn=+IlOJzD<5SP<qPB54DqJmJhq-V`-|21#0fk3V@+Jie_KUh`(j!mpoK3(q}> z2rc~8X<B%Y(C!6m3L*3WFF*blR=)m?!Cbzc3>ql;3KtBt`0p(mV#Fn`mSc{9DrMy0 zHO|Q0KaoJCFd2iSr4+6{!fz@C`#eM_Bi#)aQb^v%x!8V#OCfBZnTycJTnZKTQ8t$2 zmN7}f!MQcVq)x({{p9&Dsh0g0mq7I@s7}WRDw5DYlAa-9Jra^Ip)@X|{i8eUAM5@_ zMiw&SFbWx`BQpFp=`vAzE9|*Q#>Ar~Iuw#I<Ipq4L#<6c14p)Zjh1{|BY4_?ojPoD z^bfh%M{)S|Emr)Ok+FMa*_ys}&G>5nJ9#)9d<Da)V0=aI;(R&N?n(Jt_X-gUzOpde zWqeJe`a=0?lSBEcCL{XR3fq<m(gR`7&nl0vRUV-UCLZhlqw>hpEP1?3d0bVB$MHwG z?1mgbfmC+Y9&#S9K=_QuvsA4tcw9w0I+b1Y6GSMF`_FRO9X-qW>iUxNm3-FB*W5dt zuWmfef-m=9%934F5$9{|2^2#4l5#j-QPiAJ*=7BMhy`DLj^a1v>o8pfp?oR7alS5H z<9r<gf3!`rubKJUdY<$31y8f!tNM+y`1<)aZ_^K3PzdEK_b1NRhRsNze9fX(+Jdil zckr9?^*c2Vl&@9$Ser_SHrq?)B}fm2OP5s^PpK?kHnaF*ugW4%vt;pVSxp+cgNv>= zj0j_~_%vs6!6qb77PC(wV!>j_FZfMa>`P@xSsakhMR(@{=j-%w&esx1-=u0opL4!O z@iYs*>R;lbTk(}-FW9al<0eau-M)s>!zWq4$HJR&xlig&k!lbI*mVm93?h{%*7WTh zYb;C#uo5hNAeX}yShWsvEcij?q^i+M!gk{SHAt45B00LvhaCg<)eRP9UOYvy8wsyB za=>|0;0~QRVu5uW;sBNe`DyOYcUw4?%^?c-S;}o};+#D2>Hm0^{>guAT;U)_dZGO! zPpr%|7>7kp5pPrA6UqHfCJ4q?3AV-p`a*>_a{LjhBhYwFHPAQ>b=9ZLGwIaLBPBtX z;G~4Dep`&4J{Hg1X^uaFF*c>oSZj_C-(`;b!&sPLwnN~i_>{lQ@tIH!Q+nWTb9~zs zNAr*SR}d%RX;{2IpDfu48+VYj=~95ut2tSaCN<X|T1iEkI1n1P?iW%w8A}B&W{}Cr zQa|CFA1zVvN#ma-J^4IMs=z6Fl*n$bzm=m=ys(c`oVi`2z$jXqe}f4##Y#fQ6&fUC zuNwM=%HFP{l$aM8n1*T?mTPdJ*qtXfG$)oKdw7`!&d6r{s*&Be&Vp<WGn|?1#-*0X z^%l>UMACbv^tt{r8V2g<fQuqlZzZ}6$(<B0mVAVSt>pN8$&I9@OXXedG1Nx`B5W(3 zcw@IaK0~#SIL-r{(@HWg0~-ogFOf9_-E7`0X^I;i5|wWkQ_7Ar;^<ufmy||V$nqId zFTH?4S}pMU546B)6<)%6Q^+G&ze6c2ey}LI<vCvTm>;yF2kaqZGbC@J-Ev;EbWtnX znHV#qqxz@^S{c5ZEh?pKvY?!aQfZ|Q!G5Wg+OmsRYTi;#`SbG{<#YN~_cfwpH(C&F zw$Xy<J(wd()M2AW^!*M_G;awfy5^ilRFzcLQeJ;mQb)FMNnN|E6}WCam(<iBIixD7 zQR^*=E)O-MMYme76^&P&nWS6@FZ$+Lt!PzJJ{U&S*1$^y=H@@J)`D^zMoUV04m!Fj zsVUodrTQ=8lq;X%l#kApZt4fa(y2rnuCXBcaWy4c)pZqm7o~Rv#zm!<vxU=JzmU|O zC)E)8o}%>D(HDngkE|C=p<2UMP&FCH73$Fr;x%6yqMr=ER4uLJDlVo;7%VAdE>|dL zyiiEX-3tP=+&^G1)N=9S5|hxOZ+N-mPtbB(68pu{75xTGHdM+uGj0}6_zF(%5nNPC zui^@gp0J76<H>wZZ)J{FkHPvoS2cQDmRZnCT*m3S9_I8qEYs*U-oWX3&Exd09o6V* zav9Bxl_r<F3%FdKV_;XgKlVMBOT9BC<dXS4FSjNfcv_D>-)rS|TF2!QJeQZN9I=o~ zC3wUt<)_4=9{UNW7mM+c(wj{*dXv}idi0&c>0z*ioHwRiLXp(|TPcgt!Fg=O5>xC6 zItEXRTxg1QoNbB~E;q%t!>i<Q_vV^nRvK=b3{%?oU<hzn<cckxSle-b2fO;wcmo!n z3tqC2Tv;Lo>F+M0EO!Wnh0|RlYnDp!>~$z|beU8!@b_<-n*v+jlfIFg-TpnjnBfw$ zb4g-@9OG2{3_MJ>d@p(H9n6$Mt`fiHQWgDPjAKAvN0AQUng!`g;r%zf+?L;I<qo|< z%bg;0QnRvAb(N*PmrJv>ctKe#&4y&qKqi*HS;AR52L4q_PcCtmx~FR_g)ZSN?U>J5 zdhv}0?E&Miio%xkUx9fW&aX~efpw<4=g9UI(&P%;m@niwV+QSUmz2}1N!n^0x4Jux zM6HzS3pVFS>Pl&@;5m(>eU?jFtdiyk{ge6c`DZzqHR?#9lKC)$lbJu2lR0vRlezRY zM}rHB(ua_zYou~1J*Ke6y^!9~4@(aC7|8NDr4s%=UMeAbYN>=#S)~&EU`(MgW}=(W zM@uA(f!U=AJ+*Qta{V>qROCu&PWTpXehDH!sR?lC(w{o8kFr8Rm1=3^>K@4;j7%lt zc1w|hZ5FA27}jz19<pnv^oQV-LLRJ_YLpv>iWvtek%TyHkX&P<QJ%52QWty}n`L$I z%er)25$Sc)h0%#N%4=9%V-@Ak8F+YqlH2+uk|o6xCK4KC(;z3`m7Ck1JIK@xQd6PH zG|tQQ*+jPyyo}gIYHyVCg<tRjC*{?5D$hSOlk?hb2j%r9vEKxjCwB@5a-70}w&E2n zTA{Yvd4={&<`oK?1}+9DHMa8#1;a|9LOJLOWmL$2JCds?ea7MOX@$OoSBVN;m|nU< zJ7)6=-JQgFnTWU5Xobpe<rSJTk@I>yiRbrA<-ES$Y*C>Rc#W0TdiMkl)MXk6da{vM zC}upbP|aE3VgO{%E3^?E6cy@{iN~icRG-$QiZXv59-mfd8%76IsBl~93Z0(IE0jEr z^Wr&`S7_IIULha6dP{j7GKS|{P2s#QS!+?D@}oIW&ruxc#Uu`tiMPV2$`y^^75bWL z(E#Py0$w2>*dbJC;yOG&tx(ZSBv(;h!*rKXp{z6{OG?{Sr7L6{$t&bHg7b1DiC3rx z?h2+VmouF4idPuY)=3?ObrU$N&G7=(PU#Bia!hgza0H)t&D=#<2`y3AK`X<Hg0*f( zyVy5hl9Xc-UNphmxMbjJ$u=w+I~4IyIMskoggN^c;|2`(a3vl*f?7r84WzG9n@rX3 z7Nzxc7`b~?N)I@V&cn*=VTQVisHx0|VYJMV0ZmMBXW&<>)FLe44h}7gH$zGZ-fkwT zye)ti!g#A}rnVYU&YR0n&f7C+9^-8)OpaP6U3D<=Hf9LtZGZ{xImTrbZj1%oqrqkI z_De~*jYT(RaytN>WxPe0spTTdc?%oNd2{7ZF3NhWdZ=Yq1C)t3@&)H@7KV0K2RAbu zLDU3Sj=_~~(@u;THYn0Itu$EWEe||1-o{`epq5&IDCcd+AkJG04uw5Ic=jq(6rfCH z9vevNos=dC>w1y!Q<#9>isw(4)%>}lH-E+t=TCV$e@_0MKWnY!PoIhWxn6~HoXvjA z)zEivy|&*O$y4|(hCDir36Rg1{5g0ff4=I)pJ&zdQK|g*pM*cxuIA6>iTqhBo<CR4 zWKZb`y6H)B^*q)&9-fixnj{Z3ITv0T_mXVRc4!!hb9-=|8lLG8rc*XSBt{oCho0r5 zIZFMd#P6)sK))641KNHVL_I#6R5&LEH2q_UiJm7uAebbdwW0L77dK(#oG3YGHG`5v zhO!KaxSP}eyc9_1>{U2py);5)GB%wKe4jAp@I7U$h6S1PPysAEfy*+<yhgA8luXJJ zUcci|LbZOAM)3NDX!OdeUw=xjbp7&?_-Xw%e(_%!y8@5%Q^tA|t$uZy-R@?h;9XYJ zwFL!S{po7ac=+HunyT+=vXjdC$DgHg`hj1uD#jzdNh10B0-CUuMz>NKO}G_4FC}Zy zhzVBop03=vr1E(ww%LxZ|CKE-75@{qw#=ez^=Rh*-|^?di!QTT`%)~b)v1eCE$cX5 zt=Z8gzRIfBEBGB{R;%7%Uai8<P3UDxd$5ZCNwosUa<*{mtSlFgYp56&l8+a$gSJwA zW~k4R>a#n4+BIVo`<<}0BC9V;-AL;1vP}A4mcA<^7Lmfd;clIo&&lGe`kLc!KnlJn zOJ54fnBpn@%<(1@&GD1j=J*1rkqLfzf;rxzzd3$lD#j}l(95Z&xRY|ClR56FF@!5k zG=`iMJB=YH<!=j^O&IhzO(!KpW5`Ld(in15983)PU>$S2RvRa!fdvy^Of~4QN_w4; zJdNbskX%UcHK~=$+=1v|Rh5zGoT{mRMo7?2DU!PhJFjC2FaMfUQNT-cW~|$=O2Enj z4=R>JDXiLp9V@1X%d`0m_6I1u3R`n=$r5S{L5z40m+_qLStz#(8@Y(W<_eppSQNh> z@<H*7AwCt%{X6pUwguB3<fmJbi*V*E3oKy}!`g?bp^DWQI#v=Z^)|2?va))(xX)z> z*J0jOgdX3PiO`J|)5B#s7v>9ih$_PPZz#eKDb3AEM-atnm}n&mjL>&W_+NTcE1a!y zHp6|#;j{xo9N;CSsnVWMCcsrQKsOD5RKJT;6#L?-HAwnXNj1ah7LYM_rS@)ByQ_KC z%y}E<)4Txk^sZFRtuutdkaOp09CWk<sM1aa7-0r@I*(GQL{{CCS_p>|NrhjfKtUWw zn*E9i_25J@{8y=?elWCJt<vLca_m>BC;9Q7R9Bcifx}-N!{LJ`aQI+wqQdW*OW|h; zt0$1i2U1OejHaNK=_Wp=fVdnUYaUKY`w3*-1F5tApE(+0VirYg%Qs`eog;C1AT<yM zj^}h@N0miK8qewM$<*jHoWtpC`W@#^=jTZd`UrDoZYFu3C;8}o%t<TNq<`S!sC7u> zNmb67lRg7Ni33w~9Y<LfPr@EaU+P<#0dr=PosS^WYLj`^TFkvvvQ^Zqr*S+>GH1=i z5JR!L#`3IqI72E{{!E%xg>3m<YUix~9HvKkjx{AUcg#$pdo1;Ez7AzMsmwBG*s_e) z#OV*o*?BOvf{LFxcTEOGGv)T6xd&%xM4Pc(Z(5`S>HmjRse0^$x5Zgkjz&(#_0{Qb zixWN5-+si`h4Wfv{X8Nk_;`_QEoP@4A*=q7s(Pdzv3L5nLmhm5SaC7aTr`8+`$MYV zjyhc@5BzWcN%Rva<J2i6^@-F?NS#V<Jdy5W=X}?nQm9ZVoxCtgRfKPb5+_BfT44nI zNbG6v)bUFj_x2-?@};IG=&0!&`s5G}y#nUW0{Thc63{7W9QyTO4t*Iumj$#(N$6dv z3|f~*92IOd975Y!0Dsn}1nJ*XIB-P{{1ju41@P3~C4gNyu+Xjx=fk%o^p9~Ax*<t< zDg_I-rjT7vaTM+I{^a6QsMwteWaTqykWg1m-_(z%*H_bLe#PO7`||Y6@f`laWS(Ab zGEZ;*8BcGlrVpCL(-(H+>GLLW_=6L9x-pWpERfQKH|@#s0<6yEwI{a=BqD5$BjaA+ z_jhrI*)JqpLEjDIy{g^UCz9i@q<TWaBr@=o)I*<xkyp)Xt!6cC$+PO3vvwqLtZs=s zYk8uE<)davBY2jbIV&rXV|5tHvnE63)v}5v@GRGOniXWY@~<>fr{6g4EiRhtpBbzK zjekp03S_sYyF;lf=77648`ICe;I^M7=v(wQ$>OAP%20-2bZDC7Fu_@grN06w`kira z$)y6hmXzNS+Gn_3D9sRrCPAeCJIP;g2_k9lpykCi$jx_B7h!ihQtiEzEWD^r*1yNr z*X8Qu%zNY?3L;(~q|U;awj}<8)Lpn;&G6F)>9$VzScQ;c0N$@c4i*F8Vzos!a+Hu3 zz9>d+FNAbmv_ftq91mD@L-rR|1}u6be=f|eN@)d=u{yb`(7F{_tdpAvd9mcOPWBMC z`5W?e@_e0ewgZ`BEsqm=bRf^H<tAQZD&wsJe7^HiR=X7rS^eHuIf-wogj`c%E0dNY z5L3cPFH!#7dP)1Yi^t00-^Mg1!Pau?at+h3T6K+9HhGZ*3FI1jkzXZ{OYte2+?PI_ z-27&o++<IUTuu?TRQ+w_$vxsQhfy2vE~0my59m+7%!v2X=x4HoDl{p(y+d^RQ`@Xl zcltTR;<Gs2nz5#0A0BPPXBxO;HBrL%vXbl-n=i;S8+l}p@8Pnjl)XNs+$Nwb%FZ5U z$`P$;+{uD+#2~WW7L@P6RZ%JTMj<75R+Q=foN^)O`PY7hl;>+);n;<|=lhhVJZm5s zRSuLr&6JlST8i=szp^MVbW?eL8m(ONDoy$908+<J?ynnfm}@5o2r&^I?3^6;J1pve zXJ*Fze~XK)k7s5aDa8HS260h4q-KX@V|Cst79Uda&KQe9AUh)m+4ziCI4m7QIi4p( z^Hl4z*aE3s)gbC+cU>JB&4oT>tR8;>tHIeB!T72Y?ORV;vUJ6Oit}6Dl+eD0$ntV` zL73@BRyfH)u06syOtm--W@8*#<0iY1=T35{@V<i~sDeCE_rKI29EwwB4eI$CUR9Jw zTMNg$I5*jiIXC?=TB{sC>`u9fq>LEdWLanJR`)GQ`%DftRP~UJ|B0`sknn$zYyq<I z>7528`J$;zvPazvL%rn2x;ismOG<ViZXczR9af+7*#zT?%IASDhTKZ>9KrfB&h7W~ zl>=Q@)a5{<F_lt*{_aG+@#U4d=PO^=#r`jPQM)AfR9m=SIK4GU{_+-U>+ue6$?mFP zB|M0;QlY)Z%D3&w^Qv-ZD%Y@TvYk#iUYSHzm-h<fz2ReZIbIOzyfwtvkk1K1Vl6{R zZ8<^^JYSQkb)h}Cg2>gnsK&Ebq*6UOT3GhVFshy$A_)JyAk~J*A=XxoZ%Lmaax)?A z1tCM^swA|5T-jN1r(Af@``qart;%ZWw<Mu~+|{k!hax(dr=7}!{^Ii1{(Y3D&TkD@ z8^|^7(1qTI{f}KJNB<v0wc~{$u@&t?iwla%>_QVAxZomcXoAbFVK@*DAy~UTFCr_Q zAl=91IMBZ88c^fFl6`1N+yAi-U9tHORXAoe3~7%(Wc|6Kvg0FicAmp-sd_iYU+YAD zI?7daLgqU|>Swa!e=<z}Pu=HptCB2f-KXVa!ylb#_mO`uDOFSVdGe8^D~3uMhoRnv z$S&wU!smIUhc671&wCE@9Aks27M@z~>C+Xx=YO$DJBy%lWm(l#zZzzAm$zCAFL8RY zDj3Om%^CToqQ*!?XH(xHM`GpI?mi%ve#-U$y~AA7?$*ypZZGsF_n!^Z;%I-`e%7G$ zq5bJqp<z#d+Mm8Z!TVFpzohFR^rulLcz>#N!tiX6+*lCC9%KDUNWM>c50RS-ACJ=R z)TUzN!?ZwiPx5_4j6>wEt|#|@(vc428M+RYx7i78?vmm$@+G0o4sv;{JQogr-*Iwn zeL`Uo<jZdPG!~LY<KW)xJ4c?3ljjP@{vwIv<tc*qC{i$9elD~dMe-)dr}a^gh>CLQ zHQAjg2bP;WN_N5_w~?dBZ;A4FVf`o)lO!)GcZDZk7)9PB$z$|$|IrZjugHXn@?D3l z=S+0Qj!N2Q5;sZqlmFRJRBZGi11HIzLbE@}(n+${7u_$RUhq%4#mi1H2>lR-AdEm5 zkMI>jD#9#;c?fNW%T65-q7Zr@^g;LnVK~BAgh>d~5ZWckPSFT43B+x(T({-{#E&4H zMEDuuD#C4qhX_v)o*}$Km^i{Pdb0dXM};_r3h{5PV#dG8qA65}IpoO{D#S-5@oNaN z_C!+fHH6q>BFUR7FA-vHkSWP>puX!<4fWbn@*|SU&7R1FIdvj=kPKn&ok+S(lb4sv z<H`3Yk~h=j5&8vxX^0h!WK4>@NciCnkyB+~VarugJymYxP>rdHErgrDl?!(;1gQ!) z#rYR1dKY~5Fe}OlA5jr9>%$21Sz!CqT;N&7-Nr#Y2>lR-AdEm5kMI>jD#9#;c?fOB zL*xii2t5$`Abf!^9APZNB!p=Q;S*%1&IsLf6S&Ox;>Q7mV+dyuE+X7OxQFl?LOwzP z!o)<wv@|aBk?C@E{lF(${U1FctJ38T!l+y1&vd!6(D@dzogrrlR_hImX2^SG;j<N_ zQx+t9YBrPXf!T(yv*ZL>ufMI)n0K4J{6>E5@Zy?DA^)69nrwnXetU??tmP)zGx)-` z|17hEyG=6tH5F_l{GDppxJhn_t;=-T9=gK#_Co<`?^$z=JS5<|&I!)9!wC|(1bpYr zH{4tz&zFUS-DKD*RH%F==ihb(<Ny6~0{;CBzpRqG$oh*XHG*AEkp>&(wZfg<<km(g z!rd+8-;Gd&p5K`&<(a`N^#UnS1Xii<R{!TpC9O17%5#zIR1KllB3h~bqFwC>JEug4 zW@*6@r2ICysy^o@jgQtxNvmyg%_a>gh;6g9Fg%k6;p3)roWe8Z+3x8@QqsfX@>%kX zYl$wQPKo#sh8a1JUP3N==$o074*x_>Z<7OD?9EAY5j|sL6_P`Icgj6U@Ns;qId;3O zx9hC36&*oFZwFfgk7#T?!V1iGxu;zZm94%J<l}bPul^166SYZt0=j=lPM>}!=U9Wm z^4LUj3DtqYoo1N&N66<t$^rT`bCPg`O#4xuY(J7x)(>l*mKZ^FJLG!$6Hp$NblbzE z#SXct{ZtB54luJLNZJm$mcD}-=IkMIaEI)z_c14}JVbN{WM}evhwQ3X4r=6vA0qBM z<rMq%rXsgRkTp9|WPllF-9hr}PC3ecuc^qK2-0X5iv0F~M#uRet|gZ%=@ZOJ#sg&0 zE;&fw$egtQ0Qq^Bywt88rG!S0gmiaP=^8Xbj|^nhZn>%6%bc{#KpO9Zq>LDsR4I%! zkfHlzf1&17(qxZZ!{=LbmNO9h3<$|#Q_+}MW%+bN@*a3+c0<%c<0Ht*y(lzzpGI!i zK5}`l+*^Ncua@-LK3?cjb5f;!ywE#ek=gs?C?6kl)=ESz3k^&)yxb?Z)7gJ#lI!va z(%JyIPDlS%D`CBdBpc*5`Ve!{-reMa0W$lzOM^<mh4%;KK;h>UQuBaZCv=%P%NvN6 zrEVL^Iw-Ww2j3gXx^xzvL=I*!HqnYa)-WGbboLia4Bdzz#}9%bVW(D9`cCrUpgcgo zc!!qczLPUF$ei@s4$e@WWODY9+{q{JM-7@nSu*ruIH`A7ZYTtgG7LQ|*VEZOrKQ_8 zn_Yl5I3h>dJ4A9Vp6wAyUL29T+uc_I9!HQaKLOws{S7srZ53%)^OIa%)Ysaq6}N3O zxp7>M(EqYYOX{_m1f7uE>SvjgY&Vn1C*)T8=H{d$o5(2&W!$JCj@-m)5p$BqCXU$2 zoOEF$M|=nOLT$yVYSLD7QtgeLR;)Sc_6E+EjX7zynq*k7(F)x_B2UX9n5|4bEf3S# z(TTp}{)QP59mvx&auvaDCaG{%cJW|SeUVM@F_)(^b?dX3sShVD&dN_ZU0!1%Xl$HT zL}&ApoV#+c=olq0o+^oh(T~mZ6RcvCGc#C<LKq&sb6fFPTZC`$CRHIXevzFGX}NMa zL5N>P=Kd^K4;(YBB!Ot9=X6e>`YKv5Bd}=|x%0CehKV6@KQG@Byrz(`w`ET<{EX~G zJTAyi!o#nqOSxaiE;}>)aZ$c02*#O)BUk9ES7cWbbxm#|RLUT8uVGFY(Uly(hUKyH zT@7!q$yKd|uZI%9TXHpFY!?!7OKu?CNhe?5lA|#^UbrQ178Z`C#rcx&ev!R|xY1<i zFY;00`%yG8R2VSIu;sQqT_@ZdLF(R>+X{<E5U}!rbCPsVcB3xY-1~A5Qv<9(1N?Pg z_6e#uwx~E;+y@a^MPp@PMcEDUs=J}yuX32RFe{Uc%9Cpc&W<iEveB%oIw-9&HIe0H zlAJuO5<+Be@=&D*L%7J!{RNTrcqCU8)(j!>k1z>n!g72`!6Ve}!(b}MM9A@Xd5Ey> z4tessJS;Hs4jd$e?g+gR1|h^Fj6s-)kc=?nj!e>ONp<K4#U#Uq$8wIfP`5exQo)#C zzB!qtU}9g4J1Z4AT*!$f?)ebxji!d<`SQ0qA*C7VX_TkwD^D{io3eTu$ur7<j>cpy zX(VzN4*JcD1V5GK@<+@WEv6NbE03{5R`027Q+}>FLvPAhK(81rcp=&tmOhp3tc41V z$i~0r2Cm0D!RK)3s(z#Oa3qr~Ii70mMyw0uF%GF;6{!ox!W1&CKz0wE8_r-X){DpY zWhrdExD|sptryp)zu0>5p0CKo0{I#F>xJCyi?PvmPA?tfa)&uqbe+uNb*{d2?DaE# z`z&C;`yw9Xn#$qs40Cijmv+KwqPNvcN2k2>-&!HF&Ol^lOTjRC$A6QoPYiR61C72X zL07*dnyh?@4jvv&7UbKuEg#M4_ziRH)d)AyKFYW4N{0R;`?%-u!oWz-@sn6r9p-pT ztg3V;-~S_D|01uqnM;Mm&0Jdbp?RFk0uHBgX;qTTE6B{2R(C6dOWQu2%bmSBmpPmc z<8n3KI{}xAUdx_AekklDm5mcCHSRV_Mu_wApcxw5GYz+1%R_Xo)9Mrz1G-&RCrn3y zN2@fQeEvr6;d=mI*s=I*)Q5h&;c^l^ilqX)Yw$*Px7it0R2<hJhYYGII+MRo+sF+) zB#QURXQK*MTYffbH9)k_Mu8UnY*c`XXZhJEQMoq+1<<nyqSCSk8CxjVs3o+5fy_zt zi%~YvO!^(Gm;~G6Mz4<2F9L1DcZQI3$Ea5Zjw558Z2Z`Ut4mkKwFW$4Tw5CTK0E3? z*5eC0laGb6d--;W_}mVC*DK0)jmIQXrAQ7IoNAGtMY6wGsb*0zx%w8?b77I}<s4QY zHmLop=y)4gcKVT{Lp6x*z1-0Gb+DRYt!7MM8Fk8GH6GnX`7xNZcq_XLRar7F8h;~8 zB(JrNM1tSTl2bnwJ;9F>eGo+Izmrj0`VGUvaB}G_e2`tu>C=zYdN12K<<{fHC5RNh zBZCid&QMe1-Bl*6gBW*CEluD81wR%@$%i<<tE=)HtAc+O$ierj842_&Qc5EZ?ljJn zYD-gJR%b+<>Y7s72aR{|RA(c!ipePz)|!G3uTCm_kZXBY3@f6?y2|5&U`U<P673h) z@1!dEULRy{@4L+{A*wbl0kHrODQinWNM;)8Mdk3pqj0>Uhjz4g!XOcuo`-k!OvfGA z6Ai5lEJ2}n3(GQ0cz%|66seYq<idHc5Ne4<T78r~tNz=}lJ^c6dCaxrbgQ|OfgfZS z@1rFkpMGHpNw$HOcV-EQ{V3c_i#+-$dw1<x0%CRv2vaRgA8ymC?p*?D3rx5L*)GMh zXV*U=a&r@n{@fD6L{?W?IJ-+A8KD#wWDgX>jhKk-rDC~hy(y4NR$(0Mzu0F0-LSIl z9;@t4P;E<+h^u-2G<~bf@rxqj@2vAAeu`{Mu6z`|d~va--%wCTqlV-()#0;`i1Bm% zc!hh>k2Y??H~kl#v1y^ZLPVWSBjLBMq`A(fvf%g`>8rD8?#0Z5;|u{h9~)bo^r}1m z_@DB!E!m~BX(sG%OP=X$8VK*BiN9duAq00M%>|npeOk1oEPBAS)Q*j9n(UY46B`@T z9Tch-yGGJ)n-$=zc+TCGz`@|o=v<tHuIz36HS1${#f2tiy(vyARLZgFne3s8w#+!C zE%kur5!~g|Qs^H@vaM|fx9S%M6ivveAMGxYEb)YBMO#x%Ygk5_UmU3?+O(^Aw-;Eh zZn{Sp$2ssO&Y3dOcK0GHM4PHnbIZt^Tt?cE5@}$ht0MW7w5@sJq`YL~UGW$1lIgp{ zNf=H4p;Y>eaO{oR_*VR?RC<qavQ)CEA~+8s$0Qp!_=dM6n~o{Pl!H?)8Mq(pFxG4n z!~~rZQmF_ZKW=|psSpc4LO7O6TUhbosgIR+F-X<LDh@m$Px(ttc<06N?kjg#Lc9)m z$`d4J6?V@|zM`B!a{8&Tru}X^&gg=|n)Z84R?0R_pkTLTo7TdCfyC1W3NvFMiL$Zj zC2Z(NHrd$Ru6wBmNX+~W2JjfQg0(P9ILwlksK2)3SMmP2_@%7vfgMtt@SuS-De1A& zi#_v{X!g9XMB*8854);ui<7P>&3X{mayC_K+77gHI?GC!{RNFt!nQ*Y>mZ^IR@z$N ztuU%#&lVTRlA}xOB3xFjDvz-nRTOXbtwhhW-7K{wOLvkh%+79Pm7Pt4umzARvm*Q- zZT0kI2P=H-o|*F9)Deg?CdS0Z<HEKSjCmm#0p7>PMk_z|AbNWnPtR~S2&5n`4*jHF z0;=hNdt9+dFtrD1WpCr<*O5`kDvVM7>Pq{|S-ztkOaByO46_75b_w3`z34aA`qU;{ z?QMLmL*0tV1$&zS;cz%9Kq(b_p}BD0d?&tWnw}#@E77e;B?lW{VQe^Q?qK6r@g=p& z`Sc^=S;;rxRa}oIqa1Afg=2949BjOFlgU;G8&4rKnw)X42`s-gs0iPI?3V|~y)H%S z7e1Sk)Jw87*kMg)xDIcwVfd<YrAm~8{nboYnxgevWmO<^RcsU7lqDb(_pe0rg+zaR zSg>=fU<GR;CD_DWtdXFLceSz#Pq0?rGCSjd*eU2Bd9+M)aluPV_>5;UKBgQS-^v;K zaz6rFMNe%!$w$47jo{Ii*p#=aQFR^K7CMrj^nZwZ7r3g5uWuYS2WE3e<)(llqN1Xr zh>D0}idu>uLJy*%R%*xNUC%M^Xh?cIQkIvovXbm#Y38K@%L}A=Nh>u=Of4;|A+)GW zF)!!;U9<P$V*Q@yec#XjeO`;R_g*uzX3d&4Yu3!HnIXwHiM#<+B^T4xitzy8dC_yO z!iNR0ULGUBwRHh(kaDFH|2}|?8MF+B4MwJ>{Hx&?N5=-8PY=47d;Mbi^~!_B%*>0C zvEngA$TnTfRYg{RiW*$;IflN7AB6b8yaSF?6z_5*cLcI#9)rNFcLLdRuiT1+1}H~I zoU_?(kj4&JZodu&ZJOog_Ai#(TRCL8bu=D8Z<SLSYr+(F!3~>tws?-xRR-nXyELbz z7zy2X#LW+)jwvVfCF0{&lHEU<!~`Axc@x&-T^YQ0lK&ROnoBR!!QygIebuzL%PnWo z7E})oLdQx)jjTJ|^P9UJ#1={$j2h~9Ao^evF6o9&F3b>ONn@VafIXzVm(24Tuvp*O zAd5U=N^Mhkr$($1FKfU;l(ZaPj!>oXAbt-|4`!4S-8TxDPd58^%s85}pdlNgjOot5 zY6vaZbOisqA&Xb4vUyx1)<xO#poZ(sArjXBkBVlk`4^2?n8zvKTfCwXi}curnpT5Z z>%5PK*NhB%qKQ<{=H09;YKK8tna+^G=)!PSDecs7hOEYiQEc=DRTY~M&!ZI0xU4Iw zM0DKRHbnGh*;;Bkj#;Kh;s96Tu}EAwrqIyUC{|FyoGNPf1JNfsZQ(fB8O-xDi6dYs zI#rpmwOtnaVkiaG;xyq6NU2{1(m)qdU!the!;uRm5k{s<wg?)?SqNL`(Z%N$e=3AE z_Xxtv+aYYe;x~-93T5Mzx3h{@go26gHhwmobqf9-3P77bsxVSR$ugHt<dKb0HF!Rt zKh2F<9DP66n3?GLOJg?8|2fz~`pi=!BcITO^;V8f<Zm=#vw}}f#0A<aDHSSUv}x(R z9X1{x!P+S&Ci0vJAj31Co<R0a1Y6#ICnFQtFY$)aj`2Z<Mkoz+XDV71?!8Q&5p9iz z{=_B5I5WFFe<YH{`=3E3j=vpMb3ONLYF+$7B(u3I<r8^>rYu1@G_kmEQx@i~Y--I% zH)E5O(P8{ZGuEE+z0r(i;8~m=&63^y9#_zp;GSeZ@pC+1*_^dhCN<+bo3mcAJup~b z-6@0xEx_NC`1=iiV?wp(YCJcGVlP-b&%wJ)qZN51O>tQ)n@%$}om#QoVW}|1D;p*r z%goF+W;%C|19wG_z+3!wE7n!n)s82&hMtC(R(5OF!)G<DZfr|?A>bB&u{G-)y`8M^ z9qxq_4%Jvj&6+}R&=k=^R;Ti7t=S{quYm>G;w+R)b{re!{hs`s9ek_!qd2zDU76Lp zcz#>f!(F+1kAKh(l^@ZJf8L(8<f-v2P?_9|4~a*Q9oLIL8_)VFX$icr1Daxoq+7g9 zC^<NKQt{-Y+p_>=z+FD2J<?BzqV!#q_j_tdXZ56{Nm%s-zLg!c^m7yIr1y(6WhdS! z%qTaBb+>ubjw~*;5+;W|{W{g}vS++VHycH96d&D@B`Zr)IPb_t`n62al}2E}J^pS2 zi{;G|SR3U;4?Z}7Wh=9L@YfUANF}TXckjf8DP_q#yAw-S<|p%)>6w_!f9%BODLLKw zxXx^r@?$rCrZb!3|3tSMwC^hXyUr|*+Y*tjH_jMNWK)zEyYi-8*yBp)u6%hHHd;B8 z#DApcoFv{i3D58(UX;Wh^Jp1=i~oL(&D>=&y059)Zr~@nu?8ORpsii%#v=WHMem@u zjOm@ZcXt-m>`*Nzy)z`Pw4yEK0qwsKcdSqQgQs_Ae>B;hK<Q}KvNA}#AwT3ocI!?! zEs#Cq@wTe9>gcCbsVHjHvZjNfeaU<m&s6c)9&CZauJWQDEK+ITkss*6Qk0kC`JEoD zRQc;yzCQ)wQ-9II*R<EdJ=#(D`+QI;^H#3@$W5sjC>;NhKat8_Z}9iu)ie&mW@oa! z?*-lB?R&Af24(fY$03Omd$D*lfi-w2W1@LkFV;wTFq(hei#-Axv3qY;fXDvcEXkv) z;VpinH>{Q@sOPXWw8oP>GYw|#Np4O<cz=X%N`v~I55|6&#@ak26`(cBX}d(1jN^iN z=uM2u&xnw3s!4M?%ApSF`tj+pnrd8hC0jg3?~a3o6OPt2r85RH0eA4KH3l!botc~j zj|hIX4;z-3Rs@qpA5~E2rd@oIu1aSA-~Z10pU&{U{PO<COI)9Ty#M<wuAkw3`3?C0 zsm}SxNJA`tvmf(M+SrZB88z&BqQ>J4sV8El#M1r!Aal#T(6@It?~V7tv|Z1WyrLhA zYI_M9-Ms8^{8ZzoGR*Pu80de?aC2?IAq0rqkvt)tHB$!yk;5N{xBWekb@BUyx>3wM zmZIIPX<i&6r`P$;bk?NVpexj1B5O2=HiRx3>`MPjI*Z67!Z#DK&X6-ek>8Tu-Rh>1 zW+8FVs3*i6=}{}AQl82^nComAi*zpAk>U-j6A!Vh28!nlNkFt(ycBUnk?$y36v9|1 zX52qwj;@E2EG8G$_<C_=#ai{q{JZ|Fli$>a8iPs@5ey3UqnyXNqVycVn&br|sLnOv zR2D>n$yPKT@t}T)-5QOxS&QFc<P+zQ)~7&ATx70CaSgd$>P42hMEVuYmDz;LTD?4g zh2<6KxcAnJE}2Z^FRX{WmL_M&NhHAGVz3%vkJoZrCu&NabXI?<S1GZqA8Cg=L&7P? zyxOq<O*+w3anX#rX<fB%k#nHs7*`M{PTWr|rCU-rT_Cj%aMYD+Zbhk2ok2FmUxxUG zTKOKT<30r3B;QFCXGL9{-dc+zS*&P)*pf?nfmi7f`LYLD^E~2>Gh{<8mB59>AyWV$ zHiVdKgB<?U&a{r9jM(Aur-oAxKn<cEfF!>j01{pc$Ri{q$@QX;wAKTVY}Nyi5Y_{b zY}Esh{L}-GfYbv}&F9sFP<_?|P({@PP)*bW5Zmhkh`n_HCUFdtIgX?>u+iMp>;rCp z?P@x9|ABdkEw&(r*?4~#u~rmP(BAO-k`a@|EDAb$e-N=-V3NjZK68H%F<xNi-D$p3 z6O<?0uw7PxXij18HMuV{;=S;qAoKksQZ0x|I4qm1?@vYbAx=`z^_tA|yom4OeF|D= z&bu!&ssZr=g{{3mGZG4sM?qWe52Csj<0)wG{Xtag;z0_!aDNb0Zhz5%!m6~eL{HLb zo2imTD8bz(N&0j+)wQ^H6Y$`A@Kr^8`Udw!-VT2%8Y-Vp&R|W$<Y+F(QRPUFEGS*< zYs8ROG-(9eE`v2uvOnW{GuT6|wB@RDNCૺNLQG%n&HPmeZO^{>v8pBUL=iZ3- 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 z�r|nNPxVAZrUZKM9(Sp4IsB&e`HOpJZ!2lo7A;)TiKh(DYQX{VDdUqMUz$x3{yN z{`N~XNPI5yId-U=)Jw(1cJ`YRFz<aS{?JC#-mJz2VdD%TYc9RT_{mi)G%#5U#AL5% zUnkT{3%&K8OiH2G-l$Ehh5GHO4gHeuT*I1biRRUUr`Aif`e_y#kgSD*nhtdW8K=O& zTf1xXd%bRc6zaF9HuOtAb1e&A^UPTvE#bV{psD{z7?@le+P+>Wu^?dnvo8L8`fhEW zI)8d-fy4oOolu=Wf3L2g_rZULepnki4HURIucw_~8+vSe-B8J<9$F~aw6ad1&ZfVg zsm-=dsF%iz4{JlG?YbXv;QZRqWAFSUv`1~Iy<Vu~)Vv)oPEC8YHmSxb-{hLWVSMK* zmK1R7U03X1i|WRv^7-zm2|UApFGTElHGpaVh#inz6WF0%pjLl{u6#b-S~njV*rO)! zH{ftpfktw`->Y0HAF7v9*1(4~fz#`yl!5bW0zZAbE?Nro>roT9@@+nAE!ykdb$tI? zEEXSnmS0`VI$#ziVjWBJf#yfo5g=YT!$+=TGnC_}_=$B`x%zS~=#mGbR~a4YRkU6( z!vNn9Xf~r5Qp!Eovzd(-ehCXip4D>?Z<Xi-!fA~+el34yJ!|9h$Op1)qVt#h<MnLl zg9DM7<0$qF2jQ$9+bb9g!4!Jcu2#ORb<FwI^KEvR41onst1tXq#aT@=h%GS9wM`mr zkx#`G-e<DML)y80INsL~LSq;|@$2W+PRx3$bcVZlZa**MEHN(^_7LU-To#PBl7dJg z=o9pst`%tAs=tGw!~HN(7X~xEoGjjzufRA+S8>n!hZIbVa%A|4WCIL!eFjb?!}3PJ zMp%}9Zg8$a+`B9I(hV$(RTGMCukcqkun1-QM!t6gYuR@L0e^kjg|}%9-gG~Qo5Kys ze<pjh9{Q}h*hj7)<2*DNG?oyq=W1|$e2@=$o;44=^<o`j+_dO)8-pjGzS|J441IxL zejXCi@D=U3q>P@8;0NGWm`+nWg&8>hB=a+nSmUa8kT<wxXu_L~Ws&Rha4qQK7np~8 zyNwty)Q)tt(a(y1fmzFNch&_pgdcyA`S7MMGapa5T6Znu-@M3@0$Uf51?FHDH=O3= zUdEelL|6LYQ#@lMYaKfW=9!%NK!Q8Vw0FGzUi&(?lyBI`2EqgD@<y0~k#AvUP<41Y z6CC{w4!8W$!A8L_ZA1{!68#Rqup}LBH<r+NOR){T;kgC=h3>Zgu&2#(4(sgEYNs4I z<>ZWUtXP2>w)<~^jpb17{%Q0~Gi=^s!;oJhJ&DdmzWlna+Nt0~*qIyL`vif=O)%bw zcD%Mez$;#2>1}@_F|8RJY8*TNFR&x~`G}WUbjE;>fxA2>C;#^FSug`DLkkVLusht~ zGWP~@(|z5?VncFaUw3L0#%z%Wq1C2E$lv`3*R0~SgM8+@7#AcS`;d5~&GBgyv)X)I zV(A_VNLx<xbC9mNBwe3usCMqBaaFQ5%4&<@VI}N(*%nM1yPSvdowJ!(=Mq~uBDsmE z^%z|uew!yXK1josZ+wLL)1Ed)yL9C8q<G*s&wGW1_c=Km6PMUVLbJ?b1j>gNz4VA1 zhI|u~yIDiC&1dRH=%z&&i(!j4V>9YwDq&Mn7+(C&EAX@me24pOVqIdly`-}wuz*|> zC)$@c1=7kx_FO;nA>cHLh~s?xCipgmzQoHn!RINsjBpL%m$rKuJjB=~+*-ui`DZ~e zbOY+lQNFE+H8DVRoV>xGN(4n^xXu7;D3?FrzOS+<`0ccLm9=jnb+5HSVZn6_1+i0e zLNW0Rqrp;rE@$;-n#*Y_Ej4x>l+j|(=2zjO<(bDne-#GxomaX4W|*yqU*K_@S&VNf zh{p1+NlZDyhi_)vQqDhB?F{^&T-yx_7qDJ?C=YV_qfwg%E;#RaDUL|UqPqkRl|q$! zimz7kp08p4_xdtE@->#-Y!SL!O1F&IZcz#gA}NL05ab5W+SMie<ZIHU=;zm1)5bqT zI5bHs%z~jE?tDKMk;Takyy@$hPx)X2@BTVw5?5~E<6nnMT-Yc4?bl%k8#eG?UdLip z`@O{DkDfEdMnc>MlDPd0TSSgm1DEB4ZVd4PKj7|f!h3?I2E1|Mhp0wpQKKFoMx^{+ zZq`(Y*-1SBbh}}0!Vh(x<A56oPFkExzT~NLdH{Q-8*i?IAri4oVl$-`0zEj^XlP{l z`#b>TyFvVjcfRHkmLRXRX(^oewx||&49Rowia9ztG&Eomb%4l#u!|p_<u~4B(QRIb zZYD>|^lG}m0cgjee|OmKfN9j1z~uT7HfoOJFn_k4dkd|no4AEVS$5B*#*L{QV0L1C zWGu95;(2XCt6~?CY%alXmRLy<rQbVZCD)Bb_i&h_Y0M@jNNf_7zX(Po4N>I?Gq$8% z+rpxi;Ke-fE!MJCOLQHk#2cbt5y-;g3)~@LPC7t`NqmMkOk9XhcJq;Mv1!VIGXCjX zXaN}|V9(MXY9oI8E!ME<kLbSiHZl<+2Br0|*zp9hsaiBz!rQ%#5mD$qKJ{%3b5?KS zTi<4}342MLlX}iV^Y<`kLM>;DCZM2%Aku~Rj=2O;^q`fv`0s5tE>foIRFmTAO`tR# zybVvCGK(+R3a8t}J9*JojB*~|$xF7fsHlNEiQ7Zs^1pDxJZa!Kf&~J18^kJ3wAZ7C z?&RLv;L`8&0STvBYm+DSHu=&vwp86A6~@I~ywy9bTL_VOq@X9{p5!ju<V+L=`}wSQ zSVH&|1T8-3c!~CL=O0vL5itL_kAL_Mygu(e!>it5tCb@k@F%yk^00THEvds5{lRCK z(*AfCQE@oRH5rVFOg~KM1Z6uGsrHv5G4~_#X7XV>;0t{8J-&1Y3sz>W<9r7OY;G^` zl${uZ_uRt^cET}r`UZY<Cp#7x4)QUZ{eC}6yl@xaw2QU%N2dn$1c*^|U(C<$VuK>P zgZhF}M?nHjFj>3X4ZWQ2y|M{q6qn!Py>_#(u%mB*;(}-j&#@0sE1Kgib(@V(*^NaH zjzFjNW~_LcUi6etzQteK%^p++ZP#0Vw;0*a{+FFB@AN)v)L72(h0$g{>a7cwQs-@B zBGks?-e*zaSj(~gGj!oHp8Gy4Z@kQkb~wN{IX&o!V6g-IwZx3IcNd-C<3m1RnTqfG zyyydVS;?~VWySExzP*B9C<d9=*YegSU~T>iKCFZdj=k|{wbPJbA6~V>tAEN(n{UDS zg-!B2^KXrx)d+56<FO=h=23pA1np_pqs2d!Kv61RnEAaum_i7e$NPTBtkEe@0Gf%r zk5s{7Z669O>R7U<uT1A>KV&n!!>w=-Fo~1za^pwrQDuXbzxNTuIp+;x+c4=J&AaTy z#*#S`dG=m7Kp&dJpV`ZDlv7jrFMHY3O3^cX{ysKGIX|BNu@4^H9c?^zKYIl|(xLq< zu3yA*P1cs3x2lKT+xL0su)AAHIRxWK`UQc9J$-ND`R=*!oi8o9Aioa<t~+Q?KRT%7 zii~yT`fQ$XfQ5QrlAl-ItbFJJ^df#%KJ@@=72&`j2UgbDG1Qav!AiADpbK85BBaSZ zF8t2}ET(7D3_YsLcGu<}VXEg=%mW&^+K_32#M4S|sCWnRqzy(ozRfdBSyR9K8i?oH zd_gJe78Zrxkkm4ie+<kC+DWI1j7`PIN?DA%GIKt^R>tDMjL?r+r{w3+@IKPc=EZzz zhitI|0Ibv8v&LWp5w*&y?6P}aVkTa3W-m_c&B^gFypIEWmwe13x}<Bdo!Gi3l3gjI zvqk&blrehBa!MIVDZlubg+_MV;_5zICEiH3RV{8DxW8Z0b=Y>kFLU>UsJ5@4B*P$+ zR%!Fx#RZ@t8&Aw#Az9{Pm}J#Qu=-%O`I*DB(T_HRz{9+toh?{eq)9{37G|ohm$%}z zgm(N?c0Q7Rg<eb|kyD}3Dbb9Xm<nt;If2FKg05&bU1O&RMB|_6ID)fRWjE<3eS-sE zqTxt$T8HZK3B*cYCu;B*y*j)TPv@6uwq^seGC?YuaKSNKh{(hAh)$2&8+^$j*2?3F z4RW<5f>v9+JhJfh$b)KFUh)PMx5j8LiiVMDvUotWY^=l$9bBbX%Hc)Kad<O@Sg<Xt z`DloU+vZq&iaRJ5Br!jgzT9l>EC!Q3i6V;IqiSP)T|XA~O^q0HFgww?zufBE0Tbng z{iDsBP=2EbgoRQ>xEyE8{`LZ9dzTW&5t56e2@b<L)a|pMuoxAi1KYN-iKR3c=t7&< zy^YYZvc^o}fE_l%-SMcR8xobXi<d}Ss^iUZ7`*aJqv1ZM!f?z#Y{<XoXDfFm$<kaV zNopyJBF7oQ(h0SZ#!(0C8l9tluW{>P_F$qLP-tR8oX35m5^?P=c!Cc1%eScR^ZXyC ziXUX>Rfk!N+^jXateJ-YQ`WwDUYE7*Bx~!@fa}RxxF~`VsZ$aIqVkVAD-J_=$V<i~ zwyohaj=&c_^I87v5f&9dCtmNN_E*X9;Cqj-m~rwH>^?XJJ5G4l;#!GU%RMN{Ofz{@ ziB)4HZ52i+7%8@YK~k{8s#a>9A^`b9W|ODZk=frjkjy^7(`Fmg;kgwet43_!g8f6j zgVG7LH2;`;vcDPR1+Jx?z`Fc~Xn~O9{7>DJL-g>Q=OT`^_|z_==N{xiVYrR+`cYQW zx63o&q-gvCQAQ$*Yq{2grmSo%9=!}<f~(7@lqwrLK%NMdSc<k25RmBy$RWY$8TS_d z?HG&mje&$<jLgK{=XlJgY^5@574G_A?Hk@OK}Xd&d*BrG+o!C5Bljt^7#+CmZDd!N zUV<Y{H}U?*St9#!5oB%2e!k>5M%t}r@pq5I8i(W_KhCn0(8)ad1PgCSRd6^huIxx! zIP4dadH&D|bcTrc#0l255l!-x=ihc({b}_F-ZxbzdFcrlHi&rR1RK+F1PR9i3y5Z7 zJD4D~3ryZW7T_J4ISf^qUS-s(GBAhdf5u{b4n9s}Mkc<<qAH4PQL<z|#@QuA%t08Y zj;H7iiLum?WJK-10dju*3@Z_-t9aPwtb@|e$_ISTnq%H;(&wyG>@wsJkBbImIJoxh zw@Akdvz$vJiN837@Bf@N38^u$$O}1Fu5x@nieLL2+p3<&At_&AP`G~`F6zKG?&&x^ z`!eg{A?^<6XTM;*S@hs)XG=E^{`)H)jr{Xd;|`Md+p;IYcbs(M)vkeUc*VSMcemAg zkhQY}KWg)=I6M-CxaxN?I99xd>Z<Q-mo-jzwzEE{JKA}jYrg`1aOa#aes}5R`B62l za4$}Tqg_L)XaCh`Nfpg7mwdkc%B|e%6pM}hr|Vos{rIA2A|G;!4fFjs%G)&lcgk%w zly{kYKjlB5WlA@}e^7q!KFZro0Od_3<(r7|cOfZ~@;RsfmGX;Fn|0!gP80b4(`;Dd ztB?~nD@GArz<g&2dHXqzR(kH~!rOhxG6S~F#U8qi$OawWmbrZ8m#kaV7QiY;0<ei* zVEbq<>3G?Q%j~{n?Hl~OjucsQq^s<%fg{hbHlgoGa16i~)2lBwt(=aqZFBjkGpuWq z9h6glv>3oj=)H&bj_|E#*b5q=@@xX#g^CD1;(2vHAM+JP_*MJ)ysuc~@Z7aED)d{t zLWSlY+*5@@F0Xe!!iges^@Pv=briUubTfTv&P2HQuqA!D$%REN8Xx;LYvxx0-L6?s zlh^W<U$f{&iKS!FCtsXsSHvy~jHx`rPi1>V@S*cmPj3DiGtJhTL^sw@qIQ0%dQ1#^ zkMlmC8zT7FKXB&AWgv{NX-qX6S>MQll1jgt=%j-YFoTAJKKy7%nD`WLf0lKNTn??^ zxQ=D%+#_BmPJrKyQ%*&cwkX5K_St;NS!_`KsDQtImPPx>>1Axv{GgD3aTYdk*feU5 z>Dow*{OV}-q;EMh`Mfl++L>+l5Euq*E@v@KMn4EflEYA7K`=&Z*fw?t(P>hee^<^r zDXj+bhUZvv$J6=HP>v%NOAt!ump?!>2b;ugz>(fwU`3Te35~NTMzMbYpMMS$yvOo6 zKZgyEujcdp=U7ZoYcyvX&uM$i`>r6ncb41*7#68{a+7zDYp3rOk!s|NzhUj6xVC-6 zx<@h^vlBmJ@8?I#jP>VP^Ul?<!eD;jlnHcw!QiRI9ZGnx6a%yaTeuN$KWB)MS_0VB zc_q(6I%SQ8*fp38Hsz<e{MdOGAAJ`SA9{bi_-QF@6`jB!;4RF!D&82vLoTqPff99K z!5$aSW?z7AZ1fO+=>kj87Z@6fs6u}B0!!7u{l(X-c+-n)vtOrGE}`4Kihp*IMW&sE z(sUe5&JBOU1E<=hf~9$Lyv3gmidWgUFyneAjNM=y^fyOx9lW<S#EOAuV(CP5g2x@a z&9^MVZ#%`82Rq@uTjRHETGTkGRH%GrKKTSXRD~2h*dgZ>&)E3+Z&@p)*`wU!J2pJ< zGZ>1}D9yhbPg3*vci1eNv$BR6-{6&u7cW?uk{M@&GKlZ_j@gxgCwae1=nL>%a*4G> zwY_l(y(vDwy2Kt+K3u_jTxJjHyNs<qFz;=ig>#*i0b<k&{`_SSF>pLp#Q9z(Sj{Lg zCVH%=#e?#L?lm}$H^<@1$=KCMd@zYea%%Vhr&+7VVJ|n)WI6xldluz)`zaR}7A@x< zKQN0@GJ;S4fyLwrGo=c5jTKH<g3RUAF}E8As}0VzSL`@{z(bfYkww0+$+@a6<fA*# z8_p#8D>W%Dq;K?*+W`W~Ukw-{J(I`U7hM85f%*5`t>nff{X*>?`b;nny23)kOsT+r zkYX6JonPnRl6%oH6SGD$PZ?tPrECvhTwm*M2$pCirLarUHxn-Y<P{d**nqrq50+5o zc&OTg=;N1Pau4Abu3$0=S4uYdkqvxoHP!|+VU|i$+HKko+-PZDn~I<DFc{_`mSAE^ z+9l2;%0llqs_I%M-=z@){orN&&QP*VJj9+9xdKCuyk2>Ghzc<d=s@ruB2Z-MAB0i# z*FT76k&KU;n$QUo+f$H1sR{#AY?iMEntzWomk^z6!6vGv^5(fGcDk>~_?f0B)v+lz z^TMr3h5em;+)pe~Nu9>m{lwb%cR?f3+wuGP{P<7Uan%N`Cue2G&-oM1!2ZViRr;l6 z$FL(QK`SdlDiwztyr%8xXUI1(yl&a2^_FF?xP>+qDr=s$f9h9>9sGU!Q7c%1x_J z{ykq@^l;B$YvJf?u&1BQf6U;9`H>WH&Nc!<4D2Vw7cdu&xRHAfLSiO+9)%B?pNGd} z{}b}%C?*$D%B-RJ<5aBK_*GW9B*~F+$?oo2R-hgi$=eHTRo?qEW<)k7^Y4FVF@c{Y zBcF^D_JL|*smRXY4Q{jO=S(AgEWzdt#Kzu3ITtK9@d7Lrd6>>`nird`l{4uO2oUj@ z+QF6xDD|&2h?$(+jN;A!-ns&f6~Z;Nf^~kda5lxuy(8Yvke;6X@}1cJknaq!^;nWx zP2H`nlf~WaehwZWA=R2P_CD-MA?}r7qD^1QU-mekR<P($X{Nxx{}PrJ^KU6uoPP(I zU;hhh*D$jia-t)Qgg0D^azy(<vQ&J@`?xgj-Cx-6O2!2KY9+g+{AuPdU4>@vIG&eY zW#QcwENI~DjPf#hdPZcdrKLp`hq_W#MpowF@Q!uR30Qy_bne%S72jRDaj4(?#&pOA z54wh7nWG!;bd3f3JSY`MFpl=%m-7tCyjhC3CojB)t?8vRaYqf7IeK^C`>sLyUVE7T zagDtj@+V{!Ev2%B#Vzw<xjfn9QfBc7zp`!a;Vy%~<d_{@*f$)z)Sa_c;TX#2SFx7i zHkhLb0DS~qjCO`WoajB37gw=X?TXV0Z)|0FwwQxzf-|``W$`>r!Ha#vG2qL%GnRZ} z-G}ptKUhzmUWFOKIyuG__KntaTs4Hx`<-=(d>m${V|E;IM7dZ_xlS3P<=TD<KlVFo z-R`x1HMu_aNS$1tdW>?7uFdt=EXp+_7}l%RCoR7^YT@tXu;nm(a%C=G_y=p(>m3Y2 za`Jz=S+N?Os^egb^q?&UxZfGXS}ovq#S;j)anL<**$a^H8|gu6;4-pgP;WCW{Kr37 zdn2&lIOMrtaOFUV%DG=JG^UF4To8ZJvlKy<o$Es9H`Sp{>p}ICR4V0@Kl&%U1p+$p z?SHbT!^0;@3h&-H7-VgL{G+YDmS~|&;=``9ca;W@a?ih*P}pO|zx~Dfx;MyyVO5x} z8ZGX)deRxP;$(5(n{17{(rXMauVyU*Z(>S7+j@`r>|bVZpIfX|L*kFB@u!kG{D?ab z++wLc1JMZ=re89Of!(G2&>$K6+tAzLe3|Mol@U1fhq~W5@#83|WyL!PyO<7f@#B|A z7~;e7Q^&oG_GMbwK#U<Xvnv0m-eOZSzjup;`RYL}MdvIY{WlD?f;KoV4|BBRUgl%} zW-(gYh2DYNbKy99M=s0Ntb5ZsXf-L24(P%3Y!;5fM9P*l>qGgeLG$_kzgZ{u`Mm0H zG@YCt)I?)jM?lTf^uXobzOY{x#i1lFt?$C&EpBA;(YKko<vib@^SSDaH_B9N5XMI5 z+gAgE3u<1($Bi<G)cN*?`Mlyb%Z$3xQ(87Q$8fdaG^X^nU{XU@_id)}>^p1{8-lq2 z@CExfTgm<SZ7^FxYjZ(jUwaUht75Ruv=eWdh#z30>gmT%<&k&U_z*P)m635BGk<}_ zUWKC+9A)@dbH45_o8Ems4aDQ*Z?yc~LBDlo^ge@f)zJ+BW=kj?mKTcyV(+o2u;*(7 zo74ox>46h!1AoG+mNHrfhVl>Zv9=upB$(`?)p&zlG#m>!pNpGlK-y4do(Arn?dbXb zj`_TileG;1eVGr7^9TV;#&Y-hYFi#%p)kJCi8EUsXwOeLVId)w%`e6O3Z8+>TB9K* zM+Kv^4qS#&h+AN>=YD+PP*~5s`tw8mSwhc=$x%D-v_&Dpdw9vBm>=jdcF{94yE6Db z80|{Jj-V^ZE3nw)X+gC7L-CZ-tf!o)KgZJ(d5p%>)(jEG;YH^0s2*bsJ)LucvnxXp zTnk-yP@Tw7BuA>4&lB9$ha;$bFO^n)oRV~vUN@Fj7SqP0EU|tZjZGG|MOBL3)Inva z_L>74L>zVD^&sQN^1g~1)ACEq)i`p4%YIN+qzBRl7uB(Q+)^kbFURh9JhS@?Q!Zbr zsNK41(EJ2EN73=_ZBwcix61#ORW{ESqkv{vsUtl&$Lj6qQXnxfyu>f%Hx)IO>SyyM z{Mb{=@vAMEY^EZR1CTvQ;7xqrA8ibZqu-?TI|3_14u6W^anvrK^8%KZxs7h+>GY?_ zl?_VhBjxDAfObcno&?gO*;7ddDqo_L1+@Rf3uCJJtasUP={_@A^iGrwkUTLaWFL5M z9!^xnF=S?1Do00c6o;co)G)xbc|u22LfOSwDRMWoz&pZg0Qe=3DvH2(@(z}Su~5IJ zCW)8h9){A`mS7U4BluW@+Bx|r8nBYlR-QlMI_B_D-rQ<&s;w++U;%X}^1`hwQZY2F zT?~jLB<KMD)S&i`4@TAHI6g1TbYJP-2ScJ;?LIB+<8Bn;;1=e`gCIJhDjP&miX=}p zrpXa>i_}&K*G1}pJWQ4}ENSkF<TE|hD8>31U+t;3WEtoLCztl*-+HQ{K1+J_utoJZ ziMYr31y41ln@^<91*=*a4PO~d{bJ2qJOS-(PjJ|-iw!U<?FnN>(eT){F!bXn5<;6) zT6yrN-YS`uc%GKeb7i^hx!1*dS3%=s(W_CGR(jDxUCfAp2uo(rL3Pd~SxOJ6MSB#z z!g>hD!x?f1##ug`CYI57cCtSKdpbg<;E~-1TO#bKqy%uDD_S45F{?WH<DL*G3802; z4J|4?z-KbGNyJ*13JxssR~fS`y`5bxPIDw8WI3WR8hnGPZRw_#(@bp{w;df9v7lOf zf&N5e#$a?7E@o)$F?b}gVx*kV;EPq&E81nt<hLZE;Lbt2Kl7!^!lQgXe@#`p1f*j~ zN45}|LM>8ha2Z3R{J77<<#fGj9x(zHzNZ656vy@pAd)^n0g%>si<dZ`#gn|%I3M45 z8s&J2uy7jXGzr0yQg=!>2<hZDS1&O?i?8=qWBs?clauOK5W6@`j)@wezYM3?zoEAQ zI3|n#>a8~Rd4yu(dukYO;G;HGS{QjJAGMuwV<<hb1;R)5Q94HRRX%Dz<;kHu*G~;o zCJp74h}`KxvIlE=P-rRbB-_q)zyQ`9o7+U<Y^PisB5|wQIkpFf@MnG1P-W{7Ugf6- zE9-{v1NeSm5t)51<b)e@1*&+w4wQiMSlWm01IiN_Qit#{{%UAK%Q}Jjwn^Zb+@uzJ zT^es@Xhr-sgU|6(yL8xs(L@auGI=zS@oXJ1ks(jyU6`SjWPFBJk|7ydNxIgFEK$gk zMAw1Vl*IQwpe)Ia!LlTI-wv)ri=3%C_&@pk|N6+9JmQ@;LH9p)Oi|tZ^5lfn|2qPZ z|Nm1CG}qUO|1$^pvprQCFKuZE{U7*g%b#he9^$VwRO5J7BelP3z;0i8Xi8BdHKc)n z4PYL(5I-9iU>ae{5PqbQIyWg?j|3fi^uFU?EN<r4(c_q9%Am!rl%*NfeCKhGM&3n{ zbu(zMWl$4s5n8T3ail*;TBGYG(P-LMlO!dBR|l(4Bz5^;q-o$17fq`NYc%oV5Vd<u zdUNVHu%NiEY^6M>1)ikWUA>5pWJ!ZiwRN66ljQ1BOhP!%I?63>*sImp{7Frb6A)rP zIv)!o!_Ys28ymyn{Pm^dWXjjr!|7%w2ThGRGN#*;h)JirX^XOsvc!)QkDF%zx|uRJ z+5M?p&a>#nni$RJ-Q4o(rd~m*uK{D?`Mz1=1s|;c7-CNXXasF=QMXZ!x9aCe6<I+> zfhK`vS(~ZKMXr{Za@G@DHNBXK7*yXPMaIaBy;LVkQ4JERR?%2Pa=kW2;Iajn`L2mY zH7Wk|mUI#ikrlbnWFwBofU${3R~{Url^SlpAiu0W`D_!Ci6<T+8)A}lDKu-?kFCgX zZmtH;Hs7HiH{>Kswppb&Kl%xxpJ4i-0&OOeHxoshW9cW3e&XpTfqsbZo4eCbPyE=I zRvqBahO1rjTnz-3<M=(XDsb5sATTTO{EA$s-JkNe`x60nf1<$dPtooEM1$R*h_L$; z6?T6j!|qRX*!_tRyFXE4_a{>9{zQx2pNO&h6Ezw`?Ec+L$I}N<lz-dZ+9lcVr7C1* zZHaMjLx(|rXpBren&~<-$F4=fxJ54f_szep*vcIKBwr3~wg1$^HE|`FCp_ud`Z-e+ zFKwzCx>2DtTgrvnYH*a{Y%zB+4tvlba%qq$Bb~kgj3*0DgA_VeY<sjCs<qZ(2-h^o zkGL8tQf=P#KcoB}&ecF!`rn{DS%dO%i88ty@%ulJIbOpV1V#2=kr`d1=qmb?d_@i_ zs;zBkIuDv*udCl`HRG!obJSH_CfJ}<>9qv$oe^qq$fo~>g!gJl=-i(;72S=5rWOm{ zkJfO%BhH=ytM2?aIQ<s6xc^?dhLc3_Kj7R+n?DS(gOTRHV%4}BoLzOCB+&l>XQGC4 z+kb<zv<7EMKgs^QB5EHsLiZ2$*LE*6F+{1${+eD!^6MW7$JO*6-S1CGt<aU@<NvJj z+J480aai3fsm7`C{s$iTVAu}6UPsRV6<-ZF+evFF&-B&mid4aWz_|+RcEH(Bo(J`x zTi>`EoDDRb0i;-JadKlbNalP04VFVSSk^qCQAUcX77N~MC6k8kpv-{2_P;7^P)%PP z@_=6Bq;_5W|0nxvJMYi2ICDSyNn8I1g3dungP_&_Mi3=R{1j)x1UUGfXw_HKS(|ET z8`DQCFKONXfPR#Q{?fmpucHU6YH;F^e^M~yD9ZAVWha&v_FPAr98?6>6rVZDq%&1f zU8V#sdx|<76Sj|MIlHVYfraKgMT<VR;4F(pGc8uY{xH*7kCiiYWTlCpOVpaaKWXg+ za|H3{Q2h8HvrHgQjZCYj@(Aa=Iyemrc=H&wk;WmJh)f;vYi}w|vfNI>pNvsM6g8he zAERa~aVz;BG3p{Eer55@7OJ;91>j7qrqO=+@Y5ciC899ti+w)WvA;MZ<=&!Dn$7hS ztUv!S785cfQwec<9`uR9ll!(*BMd6i@jjPvZBklGwT&`nE1%p_oj}jiE!Ex1kga@q zD|MEVuoXuqs}T+R!JWwGnpHV>$p?#j7d=f|d0cC?(AP*}hG{>4V<|6ftqxXtCGdba zb*i#tD_<0+7JB>;P|f|@sH4Ug1mM`MgTlWfJ<i3)jy!nLa~nA+9XogT;<<CB=PqA} z+K6v*{3(H=bDMqSg8yCsDi2)reC@u7Yh4kc4cz9ue8K-cintzU(>yl7wIoQ(qyIbS zd%;51*8jB*m_Hk&M)UP;)kX@Im$$Z6J2x011=pTJ#~z_M2A$-;wuR&A8RRW23E+R! zYU;VGFf|4->gfD3zdG9%l8p^X6k{O8(8C&ul3uPU=^mKo!c6re=Ie-M(tH1EI5EeF zHHd_Dz%OyR8>U;Z@F@HdnZCcK@5=UARq<<wJogZ3%iSHHe>lw5xO}iki3O5{m^jSA zETg?U9Z=7A{;9Tl&J>d5;>>1BsGlhS$GH+pzB~a7^`Wj9I%<<}i{j1V)u_fFU`|S# zOz%$Q9j@#PuUqlGPc<JNueNS92f^CL5iuFB4!24L+djM_^RUA$#O)O9Kr8Zah8XB| zZf))-PJoOOGXMumrpVtJ@|R*CEEy+%Df+>Z@$`$@La9u!=NpM@kbRA!>6GK)$^eHy zCBWSO4|Xi|$`dPi+xBWm=<b@RNi|W&m-2}AY6PFrUVXC>Ew$e7ThO+H+COg@5NeCz zb#}u^nNjypn0WcOo3)3(Ig@JRgGPnUWxb^7SuKs`0I`{3X^TFX65BviVs}&&A)Pjp z#&<x~$$4FDCT-41HP+otYWAwLe{=dDH`f%s-Kci|rpK_mH~ElG-UIl`j%rZS3gqMP z!q(BWfpDtYysFOUl1Oxan>W@%u&{2#bl&Px{zXSM!hHd+?5IX{T?E>WVjHV=YSy6y z9GoT3&1xh8sdOBT6}zT>CBf8l+6*<<D?#n!f4AzUYm4Kuc)lt@Z5<K5%?AZ93f3M$ z+QUyi_~kW*kRe!+f*0t?TQ}j!ya~j?B|(L^y{+L9Px?g1NR1mpR2iRNeYZYXpb{%X z@~iK_g)IF#CE%SpsY6>lAAw2K1(<5LFHq4)?H^Im_t0%Cg$w+)ZrysoZ86{6NzH)I z|L>jDCh*qr>#R;wHg)C;JFCqULlS?fv)W3z(1m}}S$$jC(2!<NEpnrUpZM+CP1;Q$ zu6b7TYl&)0rF9q&?xMEH`sI(CG@+l9@~16IY)^8nemVZk7RPC#dMr)~l9Sv^=rR*e z;nR{N;0~$^3=SV;3&F?Ix$?jt>}{JdP^^pNE4!#M?dH;c)R$@MJN-IM@MGuLsm|3- zLX(qYEszzn`OFh=mz+a;q#wvzlKK{L($)|wvUkM}%ns+|9QGubJGMgWW&o;wE(zk( z3I_5xr2mRodKCqz#(8<ju;3ZmQe%xwequ0o(mXK`icYn7izi!CwI3GOoHsFp>nR-c zjhh1y0~k`|DQea>q*%h?Zi8}p*#ei|(}V`c%1~@cu6@8j2O{&bBsEfbrIPO$sKz{J z@{KHUgZv#Vsm2B#YWnb7fVP5&n8cdvJg%!c1XcD#SG6mob$eGeDIRh`1LC(KC57q2 z2$#1VkO=}U14v%5Q`kQodno)vt9f8Ib*=&#v3FBr8cqw5Ya5f(uO!&hFBL8cU%>Zu zQ(FP?m2T=ocy#Oz5!mHVRlk&aYA^n6ceR1PM<<sOD(F<r^Qyc;lLM<Eyoda-veOkk z3!S6$S0jlW%H3OhjQ#))U4Gd8KD&{4kG`aXT300hyvnPccCON*WVNy1Xc?83HNQ>Z zuO_QKmEZ(^DOv67_XWCBP4#6a@QyvyUP?hnKD~$fh<{8?$ZH*|`OIr-F#o-WI!-Nu zR<XoX%qNLRqKSXLCPj^Cz70Zv_DB!AzxE*#5LI8P-PwVEk)k%u`-gh`zXG5G%<fad z8X%D795LmsX-_!N%Q?QPp6YdVA(k&3N#jrQtEo_0r?}cn9nk61BsC~I+rFsU84?MR zK=*skX^q0AA?RnrrHt5cc6~KL89>9}rPm7$9X)$dFRVM@`FSsOjM^ov7IzaR_!Kwx z2J*13|GUVK_O3x5%ALJo-)T8y^QmcSbNX1FrVi4dZE=e)x&ib#AXMukP<R~%8gRB| zQ*RuN;Or_1AJj*sv-}JCs4c?4zWe~EJS0la(n^k@a0mLRF?oB@M9J|Heyy~Oot1d( zqaCPqX_5QVie3PqCM;J%*&7c;LnUX6v5mn1vR%-m(c(L}PH4yuEI5VsWWpUvJrM;F zaIc|Jtp5cHgJK3Qqg|+uR5{t#6R1qiz_U=2)DWMihB$Z|pZ<UvGL>rFd3MixAY?g~ z8LIJKBHzuUWhyx;!z|aHy&7~zeQ2o$T~Qx;NQ1ssA9}Qu|Nem56ub)Rt3Fn{XOi}g zsfnjCgcuqO3$KAAit3}UYEqgj)Yx0`fPQMLXesb@`f}R31RH}=Xg1-nerj}ciUk9# zwaIzXQI%K<y%&*qx^O6sOY~^#`l%1ZL_pQ+Eo>uRr6(dP3$~Yjm1HzO&>ANq1f;88 zExwJdi9Gh-BcI~kU=!htgQwHg$;t>Tzn!i&>+1pOb$+k{>=p$LplEZjJpvyfFDyCS z*2pNn53PyN1CAXywsFov@mVeK<4~U4Uu~9G1kiogi9IbruIt2>$TZ}=Cv14d8n@#q z@}^JSfsIbqh~y1B@Ig5mT2PJ@BnBfQPA2mjQTXyEeB0C2!o_h*^QyN|k|+lQnZfzp z-E4uz2SjtipD3EhBxDcdU3asFItD<VtbP;;2FP9LZ!&oE4;u211mz2NV6^Qpi605h zAGxfyd(PB}{5!n(D+APiVAhoZYR&^C)a5+~6OI-y#Z%}0(c>}46F5%J*27{DuLlDa z8D>s-+Ckv}93Jt06we!|Muv=}Fm!~UpwE;C`5MIM<<yP!ZF4gaL2%#w4bBX=kx?GH zY1{WpopQtZH`!vUJHjhZVK-Rw9bRFa4uJLep;6tvZU^v1d)+)<$IF5TQ6=NCU5w1G z1?X6E9Q}h*Jk2^}k_HJ*@tmSVvNcF}isuX+lCD7_Q#`FYBvFGzr+CiQA<Z>NY>MYX z9TKQPx~F)qc4dFJq0GK#isxEAQl$n-OYz*GL(XZCekq<Cb;uD7GBCw+lMZ=bgA7jb zd`*XJZdlD57}ciFnOgDaEgoL{$U|5>7=h4=ZZJeFa4r))z9s_;o1U;18UhSZLu8h~ zf4Cxt;?UK6p%kYYaTeXdMFCnI^ui`_g_=a=m-!!UgY>y!RsbfUOmXEaSBh$Jpe6-Q zcH7k;3+;f8m3d31{n#PX7WRkP9Fkp_e$@i!iLqc32F6gDW$^yEnrR8fPA)jF0qk2v z;#nGOw1m21cS3!Z4pM{jnjk#?kWr5k3B%5433tUJF6$xDMvKt}{;3umYqVs#z+cpY z<BXOj5)2chL^8;gLmQ)|u`A@|hSeQh_}dyS!(8y?wTRjoEyG>l8K{}1gVo?cIrT8M zH(Ih?QF_;=>|nG!>;lKtf;$>5SuSt`AiM;GQGZKryGZP51n-Ee*hO)v0i+=Vd^(0G zIxG4aEn%+kUA5qWE)F5ti}er=b}<PdOJzu~?_p~jc)ewb_CD1(pYH{<R9V5#$`|;L ztiTJ@S;Z`DUUv+?&R@$=6G_3I%TVX}9uI(8n!QjQ45%*79il$so<;IW%`)3xwhKdw z=V%?0u0hlk&v7~=QG+C;c&^YP%{54u6wg&UB+y^Bf`K7Y@J;BT6L0jl7)^Hgh<tjI zPcy19P2c*PS^;*>ppO<y{E#swgKQ1RL130&HQ#PjBLZf~IEZmwJP6oXqZ-}hCUVmy z6-PQjQUj%=UZN~B)v%ny2-jJiV6+6dSp6=*wUXM!h-7*tt&<_d)0UKZIJ%$w43I+~ zTYM?AJDK7YUr0};IwGJSAkN*gcS;8A=S;O*b1J3XtB81J?{6p~PTBjbMZ_O_|AeAd zR^Izz^`eJ6<{X-3sU1DO@UG^WS!y2-2VNc-hL-^vqz&(yrG|TWxWW&pdiVmoAVo8t zP;KzyV=kxx9_bWD%C#L{{u-v5JxW<MA2(bLX}pC|cl8?dgLp~4ZlTxb5d8FTHK$Kk z!1@;E8FEs-wN=6M-uVHoS&C*d>Iixbman7f)my%fqt|;F!9%FVj-qotIzDH@wSfCz zk1sN*VScZEdQ&^jbBR|q-(*rFVoB|q#Au{}Q}%cEm#HtU^xRKft7Ey|%ku9`YL0UE z58fkNjmqQ5s&FWDP^P7G7W~La0p$bcTU9s!x+>8Hn+{n1p)>*q87*C0;1POMD5@kE zte*}GH(I*7U<rU_Te@W-y_N?R9HNm&2%)Ijx+1E2VrZ#$F4%RHhvGp+#k*jabXdI6 z(%uC-A$bLzP&fcm*ue#UUylm;>*#_N>9D*=qb0!wEYyMBjh22c*t}YtP%`N*@S}Rv zG^3@z3pPZDLD>v&!FuR0Xqtg8SgTr;gY%4*2VL+$J+9GcdB_F3?Wq-gn9(xG1^Zct zjWAjUyI@}eCR<wJfYC-vh6}t`k2=n18RCL%(P86_mZ4cq_3Buw1I<QDcUQzEn53AQ z14TMX51e7N^l$|Z*I`zpCB+5nqr>JJEj?YZ_JHYxEi_tEUEokH>hdKJP@|=n3+yz= z;x4BFxY5#E14kN#(BY&4jFz-4i#zBxic^Ma9z9YGYf`L-lc&4U@_-B7CWL2>RD+w? z^>8vmjg~l9_$-9yQTh>j_$C?N%oW}T;X9B%s;wSQZQ5w|2*Qv^XIv1XTpp=5$@|ko zBb^S@F<LswaC9CQbnspY)|wc=pXlIH3D#N}z}o@VxV8L{4AB}ILe}aDj!LlB)&O3l zgHPm1xYphPpQyv%li+SHYKGS0KO;l5c83H>dV+EZ)|wu`O?B`E3D#O4z)S~Ul3;3p zYBlw}RZ2B?AFYNB{2CKOXot&%jG#3;gdfnsCnZ>GcmQwF!B-_%YkL4c3vA<nt;rL5 z_;nesH8_NiL-@0!QN0i9;df-X*3b~%8Q}*geYhS@Zk(>hg>ZL-S5f+3U{w>fellEZ zR0#jly_z@8MQQfv;k4D$)shhYst(3}Y=DPm;fyPiN{0@PlwhqnA+{CR76Dt{NIg7O zhHEVf;eB;5`J=iT6~OU2I9`Iab_H+<z`CR)$Ple*A>_83R+ugltTiowujt_Jc@nO* zEx<q1;XNfd%_S)x0IcIrlOcUvAsh7s{UlgxYrs>Wg9l1*UsvpDI(V=IQ_GtqB_+ES zzflIYaivJrQ&9hCv}kP+_*>~<>MM<wXjkk&9ZdaZotB9Ne>sb9k5N565<dF%CYCQT zFS7J1^@o}Zi#!h>{cvFc9r<7xZd^J<CGim3KH>?Fs>!kW=V@Y&9I%7N>YlKUA7DMz z?8AN2d6RB^kJUQl4<1z?Q5WW@ICu;iq1j{VD&O|GYLMOJCyW4m@R&L?$mM%0XA#84 zeZ1RvwS{81#Yc~aBkP`WzHq$SN!eM=-yM&cO>;T_Y`of8xmM2IC#bEJ%0GD930U4M zzRBO3fH|VcXZfcS)M3i!XL<BQ^?W10?<93NJ5uxgZFT#mybJR=(-7(Z8%nLGPT^@P zLsahJ;&Bj>^%wUyt4$QYuXr1?+Cf?O70)rN%^MY7tdI1~Te8qNb>KB@=RRbHZ|$AE z{GwUyqNw}$DXW^m`%Y3rLp`tS+_NTNAVUZ1Ws0%8`SeN1<EuZpgPtdS>6X?Mp5Wo- zl~#u^s+DwM@itm;RM?n5U5J7$-T=eT{d+0;eze4rrq|5n^L%Ea+E|W<`9O=hM45b= ze`<l9v;70!ax%CW^byaQ413(Igg-r5osP-Bdz00Na$Y;7qYo^gDG5tjw%MJuyP)L= zS^d^&mbAiGmLM>zaCtN&#H=6!6njmC49nOo(e?_KFKFLD01OWid4(5EQA3(+sfpAW z_YVXWE+_wf9LMzN@BHKxHNvC+Us@gU)o;3c^OKLOYRzV|EIMsHTRi+8Dxh2pdXKM| zswQDVYX4NY9*_Nke?3+0Xi&;;I=Oq1XQC%&*Ph$W`%F_?g?;iU<nDp-+TDQQ{tY*S zO|f^U83SD5K?m`_I8F7A#OxCcX4uZPhqa@PU>CV)w40YsQ^)x(nLq+Onh^1J)76KS zVY?_Gh8Im&!^5VSYeHdNy0QtU>61uJJbs_9_PD=1e5WkW>Ycpr3|XFeGa&0PpWqyy zbdEiyX|@#>_@Pl^U!PG7Kfy1}P~#Q$GY^=lE(HTt&s4(|$8rAlOm(@U9OsF%)E>$U zU-Id*)GhbtwspJA?X~T^<7_plu|#k4Y|hduAFY!|$uYiYHWs)GkMS+D)kH)5>6^|q zWk-5y_nkDiV&-2H^3H~_`!z97PuECoS0mkTya@rQ{FC|s)re~o<T;1V8JLDXs%1;N zH_jkBWaKk62xm*IKv4teE}5lbDq>>Fir{^GlTD3P{I~JLc%rzKHZ@=Q<S?HxM;(d< zjM6!3lZH3nzUeGnR8=^_m{^J>De?2${OTOFi%;xcOvDZ}nj!3MpHTbw_<e*6N$?G! zw>_ag3~WcAP_u&dg^#C6;4zVUoh||79p|DRhMwmcbJfOb7brhR>QRgu=c+v#ulP~6 z1<aM`CryqWlla*vG4L~9HdkHm_acN`TVII!oj*1YD<6}pxMQ9=MalYr-<pSfXYs-F zu^HUsEbv@a>Hc-4l2EEboa0~5hcAK8mSV>O^{%_(`$qA~Md~R<*?*!qcZoX3UFm<E zf3;M7dT9UtK0$#WM6MfvXJMB@5bsuKXlyT7^*8SSDmJX^2RN?(DePG=BLy)ERs(Jn zOE5+%G`vKyjT+43FqU*?ZZF>Tq?+QPblJ*x?owkzyp9k-e&Q^2ytdy^jJU$%o>IH} z+yUZ(^MM7M-1sB;YJBnfr_^xw|3h+;KKWO2TD?_#ce!fwP~Lr=TODd#$f7choFU)V zkn_d2e5XS-s*)V1?EyZ0z1p@oah3XoyR!LMvEgY|Rg~pxc))6PxbnaeK4G;wP{~=t z-(9VaR&GC6?EfqVu+0oOBE<cG+ovz2*n;x?<yT_q=5ow}S9%tem+~HK)#%0-@M&w@ zC*`=Ua_pGHirXluX2trQ#k1F{$J~`kWyQVLqnA)xJNUE>$nN|7{F4pH?$$~k_&l<E zab@w;=hZw#iFli2WaTbXHRChTWi)$eB^At|Uwl&6tLQ|gc>hhl_BHi8<&8JF?RB+3 z<Yw>dXbj)2;NQQl4hoCkhhyc^3{;mm%E0;l4ve_Pg+sjG8|s>t@%z;va{^*iWI=bB zyVKi)^p-|%z3FY>K7Qv7^~sR_Xg<0ertc?mRMGAozUEE!ePz&sHy_#pK0Y|Fc<|fm z7m9N4mEx#(NDQBPnXlXae=LTjFa2x1?_63u>s>X~Lz%T$6T^NlX!RaaTvPAsi}^3R zTw>^~6~hs`)zJS_F|=*?S8^sUEZ+AXiQ#W^H8I?`RwL(WXl=b!1mYaYl7EQdpCu%Q zKWr>M^r7mfC<iC<(|aKoi(lYv_CYSzP2{upsUwt>iN&AoL%-KV3f{j<pi-vBDHlqM z<IB{O?#f$hi|>7`HdK`SF}&d?K-ud#KIs#n96pBc{sbs*=N9`PRyQbJU(JWk%D|zW zhD7MsQR3l6_=dIS+JOg8fl1Hbbf#=ngVOOg6n{AzRsEv)C2E~z+AiRZrqDjva8p~R zO&cp2QD>R9)dC5T%d~%TO5j?i{gJ-pGVS9?E|+O>7nZ?`oUPV8#fP4z{)_WTr(u?4 zbN<q4bwymC<>)<9s;mLnP@5$ZwJ)1*wkTYU0CX9+&(2Tu&*m9lqB{sGAS|JV=0aW1 zuYL*R>-0Jva|U?!7SzSFUHc+D>N9ollnv*n5nFjGpO5}Z?W2sG!(aId{Ue=-Rq0tm zC#c;>i;K3FS(Genpxc|ruYIM)`u=2-MIH#ti&uT?f#v0<h5&DQ?u?(vdy+r)wVJLB zweh#VR=fQJ*8vUJyNmhXU!zT*v-0S(>Kkp#X-&m@+)dnJgaZOCs^~^EH(zuI$MWGY zgA{qdp7jwrGpy>Y8aajztaEnRA>N#gX!$s0(J%n%v}5!PJ8Dn6(@(?OAucULMER8; zyTh%2<yx16jJ)vhi15v&MHrcN@PpEqfbY2I9>h16t7E)>%0ptKxG{@+oKqiF_AKI$ zpHrjN9Dt4D+5-N}IkiK2cn*rtaExAr=8MWvic|<AmBJB41j~a43k~^j7O>}DNGaDA zHXVs}+Zn9-bv215OS$rm8ruvb1Tk^2<T6gz!17e(PFM_dm<HAqo*B#2zfq%=sbl%$ z-(V^D^{4pCZ`4Ttk4M&&;CO%C8=|=nTr{eQw_lH5e_jpmqAVePVLi$u-UX@uda_-- zL}XLtX^dA2$Xlo}ZxZGi$gStqZpy5s{2e^|1w2j402>Q%l2yU6xv?q!{~u>>16M`0 z{r?{xgfj<}qoSgMqN1XrqGDlcVxpO%VJbeBm}aJylvq~Up|nDgqSD673e#@hvZAsi zqr$Y(;ue<IsI;i8=3K1sA+<93zt^6b!{NaFzW(=zuKDa)v)0;cKhEBJ=IoK3)t1E; z?BQqXd(MR|KEU>c_ex!gdL!MLxVk!xpYDHIXe${r(bvnr2x+I+KEbPo*`*<&A^*-h zD__Sl_iGG(B~QQUh_ioiUY`E+5n78UU4Qck_nS>Cbng*oa&Ty#-tnk&bd-~k)#?wE zhyJzvWR_9l(U%@&dYv!DaRo`adzI4>?{LWXBKd{;)b+GVP2P|Af)G#Nc26VQ)XOVu z5;s{2THZyuz;1R7j8|0;8SPxzc}U9Jl8)sAjBl^x&7DwnMr({-6iMy0_Oq-r<O^6e zJCx??R^@41#l+<`Z^<`0!;R}lnYD_|X`1VOzI8@vVv^^;j!ONSZ=4-cRPNnS@Ik>h z?ESdsuQ0X!<C7w^mS6s_42r2+K7N|<=ybeZ70GX-`xwWU={vr0cJ2QFJRa4CDq(rW z5@9yrs%dMu3VhjpW&-so-obNYzM>h@%Y3Yv^sTc+56h4GJsjnByvV(9q2%ByY~y{& zDn0vKXWPXhOJBFd7&cKdLd8f%#QN{?a%POGxx{4bol54eZYD`f+w()%WMkT0xPOYx zPYXV#mMlJ)ToB3brR)os-ZC-B-^eRt^zXiPCPX<X+cRSlgL0#J=_0gJkFIw1zr?3u zX|K*`86*2R`ZoVdGF@QDt%2O}M|o>`e~DBCjWo+3?FZ)oy|UUFS)b__B-87{7FSVe zRq>ul4<Xixt5=4^)a71o^v{x4A#(c}`8VtC@0{Hedcu%QSHi0^km9b;*7!%hFUKDq zuh00-IU;M)c$M?URlZ9#qi8Tatp?M%af3NSdkM-7D@b>;&63g5(r@L{Hy+79t5*(n zw&8szY2jm~q~4jT$9(VX=J{ia@^r8~Ls>ryCn=w{=35w<#*4#YNXdjxmXcvBvSxW7 zr`6E6ge(uq``Br$q7Rl`m?C-6g*{alaSQs;5kti`vc{=o)a?0S^v`PJA0ps`nmCpB zaZtfw_AV{>fJ{uaw=Iou=g)Q~svS(Fe4V`<Ryc3Iv+o6rG$`-lQTj=|kCLKAfL-Oe z(HV2BHj}RP(L4X>4Bxfl2j|?7PHG2^m7#2~!KM;?&@j_zMIP}k2pg!!&C}2R<Q&+u zu}r5Ww#*2*Yeal7V|8_Bd7cujHc``W_}SS#?fIKThzB8O4|iK$Z9Kv0jEGwLgz7J^ ztG4&r=*gpD+1+EZ(dk-0@$*L1wfZMNJExC)o^IA><(Tn=^t#H*F+VGbmX$@FjYmiN z$)7jwAE{q&IEQqX%@fVH?abGC1|6_Gh<b95tb26Zvo&$A{=VT%zqaUom-}SYjQtCu zTD94v!hH{(jGF!t=W!+Kd^X|4HpQmgmkXkz58VBp`_@>;$tZXA>hDKzv2Pw13!7y! zQr`1@vyk@|M9sj)?7i4+Ui!ZN)XA`J!P)QYMPBEq7CEM!_ytkZ2WP&of9GXMs``CB z`#;VD*E%ZeeQ~OAy)W_V-1Nn5%2~cR8v0WEsrXX<VH3V2R+_$4erozsjVL}UU&=q# zgN{3IPfWx1f~eN%386<JmT>k;P9&Q#R*@=bMqFy8{>*Xbdyx;Ul#!d<72K=zoL^YO z>mr=4H4pKgcpvrZoAxVfRo7mncmI{2-!B@bPx{q4IJjc5p8qT3x5zv6vR@e)EK1hn ze{=R^#xnLd7D{f&)Hna;ykg9cw7S*%VhRdZ%KSq%pP6KAybj)_PTszZHh#NNHQ9(P zV-FQU8mxQ^anwA*3}w|$MBh$5tH+*XpX-t*nzaa>W^5g+uc~!+Zk~0!G*J1_r}4$@ z`af%(E1b>6GS3QSE1QAln-FtPINSERbA?azJi$_Y@p$*5sW!sS{npx?uj3HC_=NL@ zR-V3RnNahfu9kg7ctE|hFS`;sKZtC3o8*k-)g$cnf6`eLx%^g}bM{uf_wUYL`r+64 zp+)8=p^^Gmr<|$5kId7fPdig0pJ(J~swUkks&V?g%R>5?Zz69w&AW>GuhqXj?Hmz# zDAyLuS}qo^kDMzURYE`H>QDa8Lg~f1`hYXMi(U1*vv1@tv}p74(p<ge87}W#CYQ%1 z-R`^c7a`vG9#Jqgnjg&lG^m_C%2P+jvbkm2(8}91<H}`v+*xNQeeW4(zsMk;+UjNc z-(v8KTXu1IcWCP?7SdSxZp7FH%${VW|GotMKYuw#1&>V7`=57qk37X7K??CpV_lM- zecsu%$z4#d=<5jFzjY}4x3*+FV(s5LCGBj${;eS?XRTdOGvssW{(HFU{r`5xw3i=Q zIHK+ydI_#IFJW_(-5n`l@4NH$?7y7}<CFQ_Kq+gFj+(B<i`?03I+~wHf8YE(`aAMj z^mRv(;mwx%&!T@iq=7Y~8`fv?$R%WM{noSz+zw?A+P-~GanG-DoQk@Ob|*bf@@LW# z6X}@}&n<{rR++LO>aOwyQB#^_ex`4{;G7ivOn2S5;OyTk9znV+1P^DJ&6eMNWW%KC zz89B9APlv*_|NpTI#!j~r}w2gXD4$LNqNt+h@ryTFuml5uo%^$ho-Wcte>x=-R6~T zjL|v;9o%@a)>lpzXx)Q*Cu}U#x&*fxzp+GXAAEM)#*ek`UB-%y(MRN^!-vQM){!Pu zP0HkL1$In4RM+N6rQR|~OJxOZT#(kipWLkS)7$s6Z)_PceM9TUgx2_+q4mm+{IX28 zBwdz3ZZRJdL<ehKJ6v%+)nviYy~`6<j|mN4{g-Qbn?=oMO*RHxuV)5p9f@Q~u-1G0 zQ<OO)j~itnILqic*Q{Hi1IyWYt>6M1Q^~O9O#QGWEHN*)v(c<Gl|3zEb*Vh7<TY+J zP|?2&)}kZC>$=>q7~?+^9u3hh4u2&6to&S9zcfUPm0X=2qTNK~zlLgEWArA|63S1< z204f8{X#S?+(S(M>N%m>DpNhNl`0XxO!$u9U=4DPly63s#zfO+P48qX-`-4%lejlE z)AD4?%MM{$Z;Xr%(*`s$ayLJH8sxlEdgbn0x&Nw7>bJ`f=s(FMnuXE}7na8uC%e;- z;vL4RYxSUTt(`{(p;4=4wX@&?S*8Xn^}{{pC^5`Yf^u`RjE`k#r+!Ug4+UcqgV-%> z6OoxS9%GGZ+<(j&Lq4!{SaZ3#J7|_s9V0_2TO?H`b-$Bbxe<I&quzJP9!f-eja19i zA@%lm6O>`v=Duh3mUDx;Je(D44pLe=wXV@`B%H15l4_Jv7p%U2$hG?APOXz<;q^|f zbDMccNaE+$i~KlOf5J&ke>h!#!>L^@qHQ$oh6u`tzDiSD2(Hz%q*24OeaY<AjZuDb z4P(h;#*nr+ThrUB>oP=5%hmEmbdax!)^sw$l~yd-Yn<w;pVPF*WA{s$4CglDE0fV( zO}ECdcNS%G?f?HW=`^|NGO1w}Yn90tU6gS<!zI5Lchq}EXmKj<$9Cj$ecr!zvC8`b zQ;D75eRi79L6E%vt(PzFQyF9%lA6{@eyQnb>BjnWy?aPM?=t6a0f!D|NAwdBTFh8! zalQ(6Tb6NpQqzgq!y<&0m=|f36rg`%Mt0CAMQUA#Ny6H9ki^6?Tl}J?r;POPxkx2v zrm1Gks<(86AjyfSG|Cdq1nI>Ohje$-nH->&$m$83x&1a<Z`NEJAhja3xz;yrwp5@` zS&aH{c}pX2w(VEJheS9*jTFvJGAlY$*hKUF_$YgpF|XBG{n_SP7d6Grn?E4&Z`tv& zyV{DW2Lp<%g2AF9FOQkqH#_SNQwM$eM$5B$d<$(v@FTPIxh=G@txWsTw*3iQf2)Od zXKW&?D(VT@TMqTO?i3A*7dOX*8vmN0UlpazZl2BxfYnCcpQ*nUrFCwbe)-wDEOvv; zr3Pdf=f=t+&h{+5HcE?ew~<-$f>;NS9J}@)bM(9$LfSr@73HA<IA@aa5B5|QfcHn` zRc-TA7;OxFhA);FA|$(OM)4B&M1IgAuW|1&BD1y!<vNX5Y3Va+s@03b1<a?crI?54 z;+tHGd7V;_Z$=e_tvbeUUoy?<P;G5cvzW+*iQ>;Oyi}_fED-TSuoe^apq5%(f2nci zERy}u9;H&upqR{`y70@Q7ikLSrlE4jG@hHTPe7^F1zNj&b8z{wf(i1uxuOBSC5s5X z^2^{*{l%7ATjwVvR#sH?m;VU8Sia!L?PP%QCw;H=ZMu`=^|)4A$3gW@bm!NFbdU8; z$R=jj>@^;w8v8l2cACCtfYwoc;gxT$h0c+Cp7iF;jcE*vtktIR_nujCu{17LoBGoN z4$IX2PjkJ5&t=#NkLC#+zaQW?PdsUTHiOt_)U-CDe0GeYX?krdEjhmb6s|1_W~}>G zE$`3FSupf$)S5U(Nrj`?uQfGOPiw7x9Q<8^-aJ~H;k-}UjO<~$WkSew_4C{2#^P|Z zQiK^(+VA=zT1(_Bz<h8eMmrQz<2t*mDn^?Y9P*I!?5=?wwdO$~cZZ+VFN@W_3QkGh z)hSL}raqGVNGI)vU{SjeuN`cDB1rsYjv2`_ME%<Yt*8D;ckP~C_jc7TQ&I;Kw1dGt zF6`ReU0Wa2@@=V=$zT6qL=!MFTc6!Eq^A}wcJ(V0wVv%`-Be0mb!Hp6YozGR&)Ypa zL_Njtq`pF?zm}+7j>4|<iCW*Fu6gFDtxb`MakVCPFE(*-$!Gfb-de1y=nFNvE6wAp zw!O9NOVU19=T$QD%T!^Rlg{{>d7_$sX2WCV#d%`ia%F4A?}VSP{7jGN!woFwbG=U= zZFI2XbN!Y+TH;l<A7=bh_AH3XdhcY^dzFp_QSZO!Sbffs8-BD|B1ZS__VNOE&6P3% z7U7do*HjX29?!MiPP*e72A-{&yFb^D_tCBlo^Wp0@FZ<+P;lN+y|}N|KX~0y{a{}$ zP0m~Q(*_HU>!)?>lE-lPgL`wBEQRcK9a#Rd43UMmSAK{5b>F9s>i6~2#s|N8RR6r6 zc1iHM-}R{e+OuH{y^X`&_1*ooE?KR(PmJZ0i|2xGYr)4!x6uhufvAr2fTPV;1oL>d z!S=e5i<~thj6ctwsXIFL95OtbI{KZtuWqZXqhC%wT4l`Xt`A7o;={8~osk=XK52ev z%9XMdB%MMU^-=m5vrkye9oQVss4s#h*RR#oFV&cR1ryNcrH3l0Wmoa`L(E<wC)C#~ zsE?5bx3YR6S+(``3c-i})F%wku5MS~0C{8nJ!veo^FgW7usikd$L-VVB;s3|L56~I z|Jq-7#=I5LF<iZO^(tr37H&l?25NEr9_5nyHeR8~%ozH?HM#pl<t{m;Tbp8zU`lwF z&J;kN<nZZ4dJm7?d$cjG|C3x|IJA&1-|9ss|3CC1pA5w388sb^c9y*upFQI-g7o{U zd6~~MA8oC*(TnB;@yPS(@X%=9;&|?YFOg?zCQ1VP4AMGHUIAMraH(7;fw}vq8S^Au zpSm~9dtX8AG$V?}Jfq;#)jyBe^GDd?FIYk?luVZ;RK^~;ky*y#<ND@7+R%_Oj9_Fr zec<XY4mMITzYZGP3rBq)KcdPklq&Ofh&;HUyIp(fBB$X^)O)6A7qy6>8&cmabQ;mW zoZ&%02Xo!HAVr($QlCwlR={_V^xsmn-oZgV^p1m>SpCvRzihD9E#hDe$&$~@yxddI z8LY*1ILR%b;NmwO@pP?YB5O59Aa}^ncb{ADvO6@THFuF=QvLXOsp;x~p8BtYwbZci zKEl<LH-@~d9jEOTM7|yQjc#lVc~H;Gb%yS`?P4t?C^GgN-VAv6!-B|rhkc{Zc{pUA zx~Tt>s?AIOo`EMjWJ<N^PG3Nj(hb_rovDLYdr!8q-VeLld$6ybH$<Bizff+Ryc&N^ zZgV4o`<wOQ4)>Y8vAGe(AN}>ehG>(Mw@FQwU)(>@-(G}>LzqE+2Zl)ez9d&O@{m~@ z#@8`#W9V|%C0gG$vB#yXw-+rRM+2Xv_O_n*i(Y<-)}{sh0SsC`Z%Fj{MgQRvZE?^F z{mP-*OyK#UT4wP1AN2D>nIf*xV}>!WU7=q*Ov?{mbVA=VOzY9*vJ+=`1RBX2=D}_! z<b8du+l0u76HFe--7I5&d)+x)OAh|ClYYr?Ek1b8FS}+B*Io_^xjpi%-eQE-Hh5#r zt{x+_9YOuZ$C9*wZyjIk&)ec;iIUq&_aV(9_dYsOi;EM6FJsBzEs;J6=U)91M0yIx zUu5-gQF7#lu-3_YM`=HwsWXO$kWVAEPRicaXs#RmTSyh<`Rz>%Ul^cW-|?(|b??x) zmaB)0MW24(AN8L{YMtYRxz#P2qv(K@W~iz8cL$}(ULa**PW|%Bv^~N7zR_Kyw4@sx z-;j6e^Ow2FvZrd6ahO}GdG8!ae@cZ;UR@r_FU5?q_7pPTgbO*BH^Q;}pEWHf8?p%t z4nD&b`Pd~vU4m>eySKsKq#HY_JMUoWr<&<sj?yxMTOQSWrfV1Xt2*LyU?5-d!+|Rq z;+YPN!hyBPgU;YUmU!?;jJ`fy>(K2sW|};UxWEumLIof4;9Kgqy%p->I2GLp^R=(2 z(OUCXK?w3Ygo1EcsH)8}PPEhejn;Y$I?%2m|4q*EzrL+dq`XFPrp~+JyEApP{>Z)h z{iC(G;j(g4P{pQL8GJUxSo5_n6>K1}h|N<L)zw|BHc+v@U=hb7<u%xtY+Tw-|8BGv z9h}%sFC3$FA6QX=T~)E_mN%nMowHZ=Ua1*Bd9oN`4;J-N5*6849w!_B`AVNSMr)U- z?gP1E_bRH&WMexsRx)n&hoM6{FMovr=d3w<vy6w^N-TpqJy|Uc&`OwEUytMy&uSF? zQ}eU>H)B|l=$4?rauth2Te=Ch)?JgeVfxa`wMkv1M#|52hRMe&?c7mToCS`d&D?wS z?=IJdwhd~73%<_Q?A3mWmdBcH>%U#C&mOC_X0;<{ECV1GKZ?d`@tnRgR_huj*~(D6 zVs3c*Zl$Vim8#~`AS}-8EtRUSkNjuoP(AYsZAM!2Z_m_OUH%QN8+$Re0gt-_{~NSs z-Ft-==lMUIGmk{2%^J_qxl)Zz8$a=30k!8vWjFeRhOOL7|61o|S-ozd7&WdU=hz=e z#Ek0**9}&!ypZ>`*kf0?yZ@}y?;WSLO7=@PJAd%saFVb5GMP{a4c6T8ugx&>D%0o} zah6~HX`NDEpz0dOK0Q-cVt?SsIIPa-dt^E{izq&(7gl@FMi_reH!iC_deFIMY>zQs z>)0ahKjfi2zl|_@9G3fE`&cv+MRR7o=GumuTSRk**QfdVzm=x?M0G1CPfuGL!K?$B z%hhW->F395Bh&ja%32$)UL9>|Y>(q|<czh>f<3dO?eU84WZqVL8!fXVaB))!UVAAE zFW=g2{Ixb``Hh`+apWbUtX9g);`DtP+PL(qxwrdle?j-%gzZAK{;TcpqgDTrG?B#T z%V=RD`66HFbJ|njXk!L;t%>$m1aU3x-8!aId>!Hisv5(Z59JYj?qMstM@OC2D<)`N zTHHx@Z{_it&(Bcnon11`B|VAhCGs&KrZ?%tt(Yzeh-oo(tWiwQwm7RVnMh1u|KyA5 z*k@);>fM8IJ_c&M!=!BgMD4PW&se-@ekFkmczD&7+O&`fT-tG^Hn#PC@#t&(wbJ0C zpSU@bexXAqMLy_9pZQ@2rO0F2l3#}C++43y%uN=Zek~3h^ND{}sl@f<Jz?Rkve@3T zwGq#K!z{&T+UwtBYSWX;=&?=CrE=r>pyt?BxcwPnv)p7Ej$Z_4%AfIxTh)fX?I!Vo zU-rHclT&;K4#()vPtvYW{*D%6nw-ZqOnxsWHxaHk`KfL46xlKIDy@H~)>Kt*Rpi+^ z)!n(J)AaS65674trrW{{3qNY->p(Mt?`vTStqL)j4@}myZu^@{(KXo}H@7b7M<;7B z`e&21YcCrsP4I~y7+`9~Cr+#3%IIz&9Ro9Y|8=wE&nU2c?ghN;@i%?`UR1PyNrtyk z(}Y%A_A^<N{bF239ip7-Tc*g<0=;~SHVpWCiq;M2GF58>Ts&1<06aBS>k?%?E|A}p zr(_y8{;q#ARcn_ZOgLc$-wvwdO<6v9-GliUpJy-lmS!uPN2DH<4F&pyWw9w!%0c~- zEG@R@52v|f%C21O(;#nOzx9=P%~l}Bi(zOhE%v(C=kyMZF~8UQM3$y`CepUd#=woT zW@Xkieq2@Xm*HZ9!Y_iQKgpdqbZ_psycI!?g2B>}^6AO^(RD*rZ!7N;4P{Hig4%VX zdGSSEAM`bi`d(QlA98hMZvP=_9F^PCSk6tKPW~q2YZ{pq<;U06O*76m!@oHNd(ANi zk19gBSsUty(Z3(y{=QXp_Xm+O9gw<pCU>7{czJgvSfK>fy<j_nh*<GHDLQ)oG_89` zPP4Om$uzA;#0_-$lX=uX0>*dKw2Pt>Eye|ECMAvkYfkC4GZ|8#J94_#t=(t)ed7_< z=h=Ll@0b09hJNRCt!Hm@b+LspmVSKo$E2+{iO(|TV{L|aF0YQ5zob~GS#RmHeA-oy z-`y-!-<+j6J@+#ot1p68b`cC=`feA&l@!7Fg29r$L0>NzGCeqI!yYzI9jfkgQV3bB zUGPyQhMsGcloY}Jc%kmdQVxA6$ezY+<PBx8z-V0`XZXjIL4StJCuV3dBl>>m%W;iv zUuC4^f9?ln^!(1Zi^}m(C8%<|I#>ycfIfDn);r{dU@ND$F^rR(z5~WTW@;Bj%(ECn zVEjCj5fUn4v$S5p;UDM&W@)WM?xdHve3q8r%Ty0TF~3ZGLKe2X*}hDDI?O*)6K89Q zt$x~PmlfMvgcy%H&g$3B))M-Zz-Ra!I@Bn1D2G=M8|qLZQ#qeecd-;~%1|SR{{EHO zTI;qmgv~3)bLvOJGpRECTBpBi`FiuKwZ1LS?`;s>jyiq()mrZvdteh6y`S+UHGfdK zWM$}372kXqD!%g)Up(ED)aml&?PaJLzWiCnxyC|~k?or1_>aUFgsS)lsmFjFtzmA# z+0`Q)xxM)k`($=#p%Z(D((H1LHc@i-=4-Up!MB{#@4H5u)sdRoR1e8ca0m7C*YI$s z<b>XCjus!bhAH5T8G7~{9_hUwVRpBpEc96Tx2wKS4ti5Bxk~FgwB(HHb?gCc#eW%Q z^2Idj)LwHas%Fn)YW2IbwJsrdo<CFn24BcD&XykGnflM!T66ghN1YllPNv_Jr?q?- z3m!}HUwla!RL$Tvm6El{%^nQx%I!kQjma{_j8(r&npDsFjry*|*G$g-f_Dw(<ToRa zUKie3&$~9<#mdhKUZ8lKi}izV+?2e%S2X;lv|Gdld4n`bmWyZ}tul>X;!dr)!t6h{ zrR>L4P5+!_TrMW}MK+udF(q0(T+GyEP2*`;U5zKFLHcTqFRL(kj=p{Qc$K^k@2YcQ zuw~9EI&10RB@H!$r&-C(Awo4CMB<>o#M9gp%KaD^ak7ury~2{I-`)!SI;O=BXEpO! zZkb-qBMQG<uQhu6yh>AEEq=%6RmilO9=0Q&u*9ewX+=Nd7cU8o!j)J*)-}ZMH?!Ac z=V{Sb&*|)N8-r*LTP2Uw^QMr2%o@h+Q8$!uW7V!Rbv3_OTML?NG8C3wF!Fry>b;r9 zO<&*!jjWwCb5(JS9;eRe4_p`Cp|xFxEi#Sc4Dwbt-*>mZd!82Sna-L}U7K{;%~rX~ z+rC-1{5rOR;j8T7)-s!Ql@ISq-Rv$eMAmh8s-xO;sJmN*rI_lv$Ec(He5$T{ygDYR zW1>1HsbjK7L5e!2s-w(N>bj??W4b!ZaG|byhB{`d;}mtAu8y<SF<TwytK&j-T%wLS z>X@sJE7WnNI_9b4no5tD&Q~Yv)lrpy_YEq%NgX$<W3f7JQ^)P<xI-OF)N!Xema1c! zI+m;BK6Tu$juq-ysg8%#v8pn{L-a?~Nwqp2Q%6G`kE>&?I-XX?bLx0r9cBARia;Hm z>KLhxvcpwfclqrSMWBwdTNg#3jtS~0&lc;t%hRr|b={NINs2nAs^c(qOjF17gZk;~ zv|HLQWIVaBx^1X?zC5{gWb(TZ24V7AgJ*%(B{u#yY4)M?JyTdA;Kdz>o1as0H2$pF zRklD23yyKVb*64oVMc<p&;Hflg@^3vcpzfW4DZR^`lJb3+g-H_wXQ+xy+ucEUn)2D zS09rFzLQZ&p$P}}%6omgk{4+#qGta~burZRAo*_f0Zz>}p^oTIQ^M01Ymcc1Jg1gu z@5*zVoi}PLg1Ve!AjOXQ_dbJn=2yKs7_ZVotqIehzw`-9wfN@JSy-&Fzw|qnYD>aj zd|Tq>`<L=<zS>9F>mn&fYumi!51-_KKlLkfv^LEjsAom}so$KVwToL+&#EEll^t@_ zQ{q~q?QZ?q9BoC51<HO5>1u8qIH%uuix#Jky;++U>tQ6qTt4h-Z|h&=4sSkImcBZ) zM1SjMRw%zI)sNn+b@rTLNM(6_+qpA!@5mc$H47CC{ovMC#^L(w)3{zUp<vbNf~RFO z4w(QI@?qP|t0oymI4BFiwKaX~ZgXc|l{rcM*pqD$CubVHDaO_N;+2>8`^?pZ6y{vW z)9<`RyK>%?50txOc}C&jh4S`3A>(m^>aDt(OINe8V(t&hvmwjfw?-Q$xv^TVFGEZg zhp)NXoBMpj1n<CWDT9`$g5#tN!u3hZwAM*eccHP$smw7yXu(K9eRXYud*~-5duhGx z+B165GA%msr+<nemVj#p_4zC6jnK~O>$k@8ug}QG*a~W+-U#7CYzw~DE0$?LxN0NZ zkzF0~nde<CzYkj)^lH}rj(YY+&8cU8s6}@AX{*dsrzAKFFN-V~S379GapE;nx-*8I zmG1vcDtITo<Y7(gviE6;)mbll4%vT-?D~$#j!?2~P1)5=$=)Ec3*(TjJE$6tp8N=Q zM>QqeOJtoQ`>rLcd<bbu*83{5W#WU!Uv}?PP5CRbo5b!2e;-yiC3}O&rYe6~uiK-= z^sMqmZjd~#^8PHtSUb}WkrBN`c#1etUMY!dr{`?YLgRYL)WnvnLhj@%$fdMFF27Pg zu|Z3SkMZ^`4J?9}MCx2yq|%i&RbXv~W_yoPS@srAIOc7)7Q+*cuig{m{ZFw3-QHpO zesNV3*C?^FuRT`2{8W63*OPU8`s;o_xzor6i`>`_$Zh&mf9O%I^&E{>TQGq=t3tik zd~5|Hy_4-=w71VDiyP~Ww}T1Zfwn-Bx2FW{go`spB}7uunn-#mXX14CCarnoOkvNC zhF$xKnQw~STi9!aU2d_J>lF|ASryk$zKmR?)Ybe?l<RTNZ}t<B>inLFl*A%39g$61 z>z?;fi+sLGp*)O8!MO8;@<n*R6i+7=FRKX3OJS!;dDQ;P^71j9?=9>Y$+&WxEz*C! z1benPRpih9NZ2_do$b$lT-Yg+)MSgTqFf~GBkf>2{MnZXJ5N$mSz&sjq+P<U6~Bx9 z*<ZZ~dxzN0@n=6T>=bb@&0?!ezeCtnV%zO6Jx<s=#gpof{felAunkF0i9h>4J7DjZ ztjhCe?-urYF_LMsB?s3DyIhRK`?F^XdyP0)`;mWs3wx8wZ=0?1`vurB5@nG;`y*i= zlEi15>_?v>#>a)5BlR%Z5~gPf^%%?6GXkye+_qC0=7?yhWU4H6)ZeG2{hhkUuMSE5 z9w@@IC4u`J2%}awA=-Q9akJz26>L!V{^TxEFwQNNua;ox28r*!1CnahL^SttF71{} zF;X;{>QXzEmUY72Bn>>?<mzt8)S1GbEp}@6o4J>>MGNij(#3`2-e&Y+J{P2gbP)L| zV!XspK5pyXesbc(_uO|%izS~|?AP~f(P9Sf-Dvf(qviMTwVB4NHp6cEVt<q9rHY&V z_UjM5p|wq(5b4c&3~ve(xyyTBE;I9H6s!WiD_zZ(Z6mp_^AYL`1rsX0(VO*2&oJd5 zgdMY)_7aQdrGC8op`@^fE-9S0HP6puiTV5O$mJ-H>Cx;Gq-XQGpF~u8xESv!StGFh zm2~b9t^HlFewotJ_iWYLdhQdhQ@F7{TRt_p7hWd<$s+I<qX;uHwkGy2lbM&l{b3?_ zUIah$2}&)g^^Oe`Z7HHfBHI5sKiRtFwZ^&p1{GEuKlU8b*&=<%2l~5PwHQyia1y%0 z$?~bo{i}ew;Pa^zRUJVyZwo~wwihbhd@3q2Qg<F@oafU!g5DgFKAwp5@9*1*mb4uA zE=JVTKsH5WGkPHVQGje(pjk~s^Lirsbbx4^K+$jhf#`biAlFY+$~f|gg?`>j2E8V- zC1UmpKiR?wo4r@uW!AymM+LWehp6*%?|jaEiO9!94kpZuS|G+8V(k1r{ot#-g`9qW zgCdc9O%|at@$LhL40a8ykO6Sp#?rwey{#M4n*ybc`x@Ck^eoaVB|jG_>E@PsF~0jg zedKFeOpm&iGPaoD^nN3a%dUmu*}bBDPTcRfPufuHF@+QIyscJA`b)gSX~=~W^1Z?8 ze80CZ=eGJf`K1dMF2aJD6-i>NqC2+U+bg!B_5ROl;g`Km<dT`yYSfhHeO8^9c`N;T zpmj@3V_$BwjeSa}G)9tjooQ^4*mywMDD&Rur#o&9UOenm%ooKx@uCxoPiQf-)^j~u zxYMNs&b()rK;eX)-g9?~b5-7M%J5FFq0Y;_t^Fg|hJnt$2-=9L49T(=-cwoTkwzP{ zyFP2iNiF-1A$93WX>_;wVw5()M$0OWNbiqt`l*zm@{*|R6qR&86+V@~+q;jfQ6<j^ zuhPHON=z+o6TNEDYmT1&(mS;INy5tz-p?$;*!@tc*L#Owq&v}0M9?h1PNI^SfXYsv ziq+;zy{`o7)jnhE{Y0pAy6CO+>3MvLw+AYg`V?Oh#e7jr_bK}HMh5ET`SflTy;9MO z4Ad+0YD&*zO=U_*;aH#IrJ^`i>c$~fAI(hhMR@S`fShsr^uk2XkO((7)_W{auWHMg zx*N?b{e)m?j6^s;P;rBIE{cT{O1<kD&lXN7_O7vTrNTV#NI%1NYg>gu)ATYiT_L@M zR<0%{19p1<USZbeME?=;4zeJ{r`B84c1pYAOSDWq+NlX(;tOapr8w@5VQyhJ@o@&K z-xZ^fBk|n!E|sgx2CcPcYmuLjbR#b#WV-dNh;JB+_)x?fWO0>uaiHF9KD`@7@3iQJ zG}ar`P|vg97~xYKEQ<R?@ni0r0TKT7V1T3HKE1yg|Cc6Qf!-s5ddIzCZ}{oS9qv<+ zo-eUn_s$uQFB-|QuU`+4-6pb|E<yGZKg%Lo5-57Rh)zjEG%7&!-ayfbB6?^LqQ^Yk z{p^H_*_nZ|-9)w`3E4LTMEeJdo_h+>%_90hfM{r-=)XjCC(e4j^8#eQ+!>Gu&xmYF z3T9ISL|+ONy-h@&mm%6bKy-DWXoiU94`$8N`#r-&|2&u;DBDG36Vnmh6(HI-Q1r}` zh?ZT1==uQB;6TxjMbuL=8riu4vR|-T;cGckXNpBOMMN(O5Zw_dx?DulQxS~_5WPE4 zblj8Fzta5|BU}Ae!#v0el<h2LbA}`OdVpx3K+)5i5v@%|bX|a`BT)2!M`X8MitL;K z*?+SD(jX6>648W#h^7RHJ|8H$OhijYAgTq3dICf}##oU}md5bS?uL0VB|z4QQ_fzF z=xYI@y#hr~K7rL#X}I|Tq8DEAPnU<n{ZM36q(itmK=$(nvWRXL(S>4mpr5FWP0!}} znU!1l%_2HoDs6axXoa7sM-4E>i0pBxwMX8p&jT@=>)-2%*^VN5NDAzg0MRP~MQa~N zbcz(%eF36Rl-bUvu|_Cn-xt|xso=8$WOID7mgwUmnkyAN8BzU}ceFO1+k}@g3SM)c zy07w_!+w?soR+@nc&VL2pTIE$28+NxvG8%z0?{I{rY{1|`vhd5zvJdJbwg#`SFuj+ znA^OYVaV9*!?kuIaa>0FpFajetqL6=RGOe_eW@Dv>B&!Np(C=CW|cRK(XUt<V_CX6 z(9$ZOrDbAi+W@@MO4Xd<nn`yw8rKgOp-4&m=iHL*u1?Jvx;2)L66qs-kbbtIbcONz z?fTLZEhh18ri%4T8yiU5{!Mn;-XT<4D{XJeE;V##52Fg>2}^TcBh8z9n)5|7M_S^a zZ<vGr>W^4Sk+F;4LW+zL`ikTdNzh*It_>2@y0LT}qukPABE2zC`o|TGY#$WqHF6)l zUP*f_^D+tA)mVJ1h=<DEX-J^)wT-2hi}W!u9uX)#tFiRuBJG(k#*cCbZII5sjm6uG zc&gm}UJjJ5yRA_=YaT_qbTHC)2TC6_rAODw%88!wn%2BW+ncOuU)Pm>wOYzzv)EZF zEqCDSss;w%aho|+eD_96=i@sAbViGgLv+60Y3g*dbQan=xq&*rZbZi|&3=ugQ^D7# zWJ=o7)`<($(M4y2+~4||I-cdXHp+;(BD7!n)U({48f5b2jim>P^w@q#9|)9g-&net zNEgdp^9dzA)UPttEN|q>7aI_dm)3k^pz*htn~4oxVrA-gv?N~-CIyi%%CXY$I=yCQ z>H<sWg~gW6x<H))qO)1L=nr2tb)rn2_$f-qe}4b{BjVf`WLI#v(+_^ct0wQ|DzD<h z8%b{z>77zseQasZ^4vx#o-1O9<d%B&mB7qzEIml14e5gq_)8ZS$}g_G?=LdD&Dwjw z!WF`LRk6yvM`0Cow^C!T5d8EoOw}JBAyisB47<0yA`6PKqvu<;9;~-D$+ERlYz3IQ z*JtWZF_j~OpO(s0yK%Btus1|0=X?7pd$WaAdxN-J?Ct1pFM}(TWrELM2eCIyYEVgu zxMtaVMk(ie|8=*dRoQ#cvbP(S&p*rF-iPd@zDcOGO#Hi2*=y^WV0hC}wN=K+cyqN# z<w~)%=fR2HCJGU4A1FFqM4i%ne&y*!z36&x7x9hTSbKkm*w920*wyEdCq@ixlgxj~ z&wy#DaKd`;*9=$0%;$c?mUWhyBQl#)Mfe$^(gaD@!p2q#^DmI$a~4WoZIIv;3389l zz59&bdAHW7(={01TUeMU7dxwq+r8sd#8uwQ^7L7|wa&q9@77oD=4JcS`jfl0E<vB^ z?*fBLlqUE8=luO!i6N5tmW+v%f3FZKT{05?E`LdGZharlY9Cu@I_A9I=h)v1OvnCy zT<=7jox(l!e(hJ+wtG+AB{Egsn!8NDo_<{U6};+k{VDtlp7pq14h|Z^h=qxGl{cAy zUA*fo&*nd1dp46$>2bNq)b6l7lV@q#99c;EtB|WZWf=Jo4@=Bav2BeLfv-ehtn{%t zjRe+BH%t2sWD3T~IBbVVuar*evK{)Kx3t){Ykb%4kZb3qGjgkI(H^yGFjd%j((lyp zNF=}mSyo69f#@L!$P*g7;_UQR%s2Dt_$tAj-ZFJw?)};S7A6aFr+8FjmXeoHX^src zJeblaPtaP964hHRQ@3t1O)aoYJrro_NuQ}l#8j>H<-J~zuC>jyTI1#$RR_qp`Xwq$ z-E#J<vN(qKz|AISf{(My;tVx8c3&)`)t+KJw>QS$eqPEfhL51s8V;ZN;g<PdmzWV6 z-szUHBR-CdF2#k9Opd?#HwrMHE=%?qruo^06B4`&NNi!D6sdR6JPE3vEm49rrODiU zrLv`o)P(KcRKKiQCtEY)b_RCMjJ`}_sFJZt)juTx?Ntm185dYFymPGtRSd65kQlyU ztST|QAX3Dz6|}3O9m5yv>=^z<sC2r_Y37+RsOQ6;Cxks)#`y#OX;&88h^nD?h(N5| zW86LgiG4J&`vhezaFQ>o%S9zx+V;`ywoO$HMX$NPUa1Gg_CCcZQA`)bXB#X2n~`jT z2)|ovr|k<ur5mKl-q=|0Nq;>V82r<x_w-u2lhS>nI5<$T)H`slUxc!rtL7c5_qtvp z%ovK^-#kb$o0yftQtzMH0eVAx5%w3om7@2)spqkEWwr9XK*b=R;@Nx@cZi}qKC+cS z(OVa&cK~U#UcD=NM?`OGpkA5xs%+Lf8f581KE?Y*af#f8;sO;*y&VE0oZ-{EQuHE4 z??;}s1UUNroPeC^;_)fA6UAYo_+p^q2JiDIN=iRslrLk1_blA4FweWr&#=9o`@#Ko zCX^8>t(9ByRSiv7ROsb<v<S}_KlO1^()apw?-bn%8Q->Ss4MQY2-KV4(;Fpv=SA;J zX0HMHaQK=A`M{!U8=qo?C?@qsaZ6*xry45mH;&$CC-QSbrL#rvhCsbC?*e~4X{^us z^q#m+7QK#(;($QKQg1(hMah{PeTwrW!u6u}$F@c(Jact}6tbS+)9WL8Wumvo(wk~! zPvL|O-gi)xtbOMpv!vg!@Fj(L-lzNw+a>+gy>=#45-QD+TwkzFt=xMmy)*qZ#>w3L zF%e3a!CZeo#|tM^diw{8-Xx+`aw`oD5DoPgt-$Ii5j`fi<u7^IV;8tb%zioBFEd0o zMr2orS$QsH%gTE5Oa7vAGyi1`qC3Ux>HyKzfuiq;=vc8j-6!fXpA}CJl+{HxTJoT; zPu3Le8z{O&M7N9C;0B`Gy}^h|m)@0`o39&@0mKkg%>KvIU$l3~jqUws>XWLHEX7?u zOH7n_tC`&ROcY__>}uP@FN8{S#KP*v7PfouQWna+cgfJwzG;gSuZsnb>aJf96G?LK z8`;>z2JbM-iDCXG#EE4-CvFf6wX!-;x1~`s=<;VuGOD~C{FAW*3!VW!6FtR5mCRh; zZpuWdWujCDqINpO#BcZ5Iq@T*(&;jUy0fu`3h!P1nlco9{hl-9t#WulR6}J=b!0=; z!U+}LF@cJ!d{HhFy%=dw+7`WKrPifWr)4sEwjDf9G$|sJAd5I371uxa>hyMDpx~*y z5!@yVT5F5-J3iF9^?r^qSG_U0IlqdGS#`FH^bT2fyR?|G=iDtk9ea@_9beosF}qcS z_K!m-5+VPVbWfn@co9t;kLY(#Hx!)~C>k%KD>D#%qk*XBxHl<K_V+wwOC}&&&_MRM zHz-i_BN0u#64C4c(Zha2H#OmWT13kxB0AVll-}gH8tyg7gItkKnuM&&PgX?p0?l5b z%!=r@Pu1svENpMP&M#-BR6B`iwWMpOPqceQg~%S*5+HlZgX}^{*ji-O5_E@3;bq7} zzy&^iS^0c3+gvlfd#QiXOTWAx4YTO)5#9MxsxeQ=XgFF|E1z?+8?Bd&7s+!X`Q4NC z2~tbB0~$-miS%@-0<Q&1hcuS{?JlHuNG-TmN&CP4@$Wh2@>7Q_Nd>Qe^qB9LCsL7% zMLSgT<f13drKGzooxM{noloZl=*UYlrTJ3o-)=T_dYU@%OO%e?>csw^tB~C;_KP-K z%TJ!Ku4$A(ABfm&De>8e*$sqYqv4%}%?1_eagjZriEOf;Y++%ptOE2!y0B1Y%igXM zq~DjRS;4(WV5wKiTIor<wa9MkMI?z!tRJkA@GnzDe7iRWo^+D#8)cr}LC>tvng##1 zL?-JU!`1TCzm}LY_7|4OjJ;#3A?j<HkEv;U9s%3mbvaxj7uK$Xr}}sgq0(w8+cr-$ zn6`VQD~y+`!z5?lc-+ng+m@PD*D+n=lMD!K^a<20KW-Sa%^Bly?^SbUet4YC;B8Kt z#o1?a?9!3jc8QqFmD)ch=y6qr)r4;8V#!1`iyJUmf@=2ILxSYzB)LikU7>KhcO+;# zxh~Y4GLFNrncy^uB10PJ;m6dJ(Ib8NpNr~s)OtjiPvQI>DCA2HJ^YxR2iA?a!uy`T z-ab<B3DRan`$Vr)^kxR?ReGmg<%`c#poUkEig<<OWRjnF;e<+WQoU@!xC-J}ETT(9 zG^l|neW$;uWN4a*4inMCtU1{ASUS1GlPnKB@`Am{wh`IQBKtxE*`3}Okd<6Ie1p&H zf^jk){{D75wN->l<0V_=NsJwll}{VIHz*4w-VOd1WUNqp`$XHsqhjKibR0>IO)wz! zSCy<@;EQ~=Xs(ymdQvxUx2+Jaze7sL949iHq|19vS8riO3HSFEaMw(RTcDrd70_3+ znztOX_s!x*;S|#FDk|PA(+N+boC%jmc=`wxp0tT@+AtN)l<?Izss{9G)|XMcqE2ev zgIs^V>Tr*K&EdZ2HN7@BB1um^qkR<?1EZ%OBRJbU*;T$J;+x=B|GY2A9a|XUK0Map z?$F8MUfx>i%GLh_hdn#V;U0X6pS3^Mhq!m~(JRc0$mJmt$qU1uezC_?UR8AjL!+VU zV=hN^g-cit`<lGV%6_Ph#2;Ob#DBRQnLoMQkv$#mMf#p#SLgPnUY9$$9j9|-pF>3d z<8troCYS#RcJ=h+aQaJ(!~OSUlSCx9#^wJ0Vu$-*sSfwA(@nMY@LKg~$g73dYhXR^ z=2(Y2kzee6L+l@1;&7MtcDR4M%HjSB{;`Rs9kDNevyZ#n?`AqYzKCDNffvS*EeM+; z4#!S}-iWLB{gQb6|Hb7F9aYa;!TGy09q#qR9qxJk9qy*=Tz}n7*WGf%JZ1I}^2TU~ z`-(mecaK&PehT`KP}iU~DZjehUtCsie>>Uvv3_@`Yu4O_KfBxyU2eJ;Z?N+k*=oBg z``pXleq<ge%}*pa+^unE86{nu;c$OPUOqM0;lAS<hkFhAvl*A~Am3XcbN)*5=xT?1 zi9WoUYrLoX0*9j(^Ltv=oB4|>G=eM?GY7jjG;<H$rumymu6IjZ%Af{}o?Fk$7AAkU zUU$o~8<yT=h3Dliy=B;xOXG9(pTk^}^s(WtW%}3QuJ&3n8FET0kRIoBb)0dY)61w! zc72-uo6DV#clLQH=MRt|`#h%B<(^G`+vh7de`{#{c@^ik;QcuLA*ZXemU6=7KG>1V zyWVuVt_*9jf%Au`Q)XS<)i%oYQn=?>w97poznyJd?(4u<@MbU-3<op8F5nWd1(*-Y z*G4vh^4q%-Fdi%i7lD=F^`HSR2HkC4?j>L%*a{p5-Uv<sDRGZu1%X~LHh{80;0~}Q zcuaG-W!LP}U=Psga=8=1cu+EW7`PP71ZAgyg<yMd4JcowDgk9f_Hr-|JOr}Gg5ww{ zp9rZ1ml3}sG{WW1g%J%d2NS?s!4&W|FawlsA{)FN%msUbdEg3g6L<%>6TB1L2g(M# zN5GZfX)p|ojC8qMgGr!tLTO+K@jJ2!NUxI%=7IU(DsU5c7q}gio~abP8>|Fx0IR_q z@EpjFSB~iBF84iPGPoYh0Ph7Cg3ZAd;C)~bD7zYL1DAFpP);BLJOavxcpNQU?yf*0 zC=RB9Yr)xI0hj}>1J{7<z#>o@?M|>WSOMMwR)cH6&?xFP7!&2vPvl0h)%+RlqvsMj zxPm<k<}O(#)h_pz<pPd#)X~RizjlB5AYIsJbVt?G>KonclT=l|KJ|KJdUSEPSH?Ts zcS9TKTOWh&BOC(X3EfEe4;s6~VgHq%ba~uAx$7efr!8HB;6~`(sSfu(XbR!h&~U=G zqF}-)mwT|Eqtj@YTj^y^(kZ=3NA)2cmo1-<?EQo4;|U#NCklm+ufR+CgsHU5J20ZJ z4|BzaT{oI+&eXr@?Yc;>?(K5v7kazg`W<};rG^tK4R^)vij8wQ!#$_5zO;S4_1>gn ze73`VJ$+njntw1x7p6GeMfCKxN7<)c?lE+wb~ax_ud$wPwry*N`#FAtctbCTyJCXF zokcd=Iu+=g@QWu8`?=k??HuObG?XlwL+3e)?kb(zPZ#cWpVB99ryO$0x|glK-Zqx{ zyUSfmHrWpJKz;%8_o92p0Ec@v*_esFF&!N4bCmBOB3^`@f6zTnBZ0OZ=|LPz&d}mU z)EkqFmGIhdZ?+>4UdmaQyJB`j-lo4??rL(!miybfxo*S3*unMuk+Zm|P~Kgj->|V4 z$6lq_HhJ)LE6gXsJzx@9E|J-Pn}~EH*=t8I2&Z1ibhx)bJCYpk2cTebEd_dxu&pO} z9^GI4oET3fYEB$qPjk5M8b&USbEpQYbh6L6+{67+d;=c-*3#iVG^5_=K4jM7sO?NY zZk^{ZqUj)KN1XfzIl@rOmbt4h5mFcA`UbB3L{Zw;s-{x@X;xJ~PgX9)EBoT1G>7{k zJbtOI!~HaMq(sUv(c!M4Tz|Zj@WA>=#rQdlYvkVlrY{|o^;h<%%l#sE?ElSxtxeBN z0-h!(Z2fmh%vabuKn}Fea=2rLINWh0_H)i{EvJWymPm?hrA)H@(l}ZI^lhxe-I;Pe zOWFQ|)V}}~LRC-)__h(j=<_c3Hgd|gGX(u4a%~<Ig#4GZj%|crgT@lJbyfOTpnMds zY~_Sb4)-o9&MYF?(Ul4Y*$PLHoy4famVKY*c7LkFJrQSZnY6zd=lHdXOUQ-gG`l+b z2wP?cGNIimf7{S-99U|Vsr!P<T|+10yGB;_qU=R^g@f-<`K7c!DLqJi*hgjDf{m@y z9qxEqLKWdq`jzvo>mwEYTx{P-Gc|2{9Pa<sKx&=K{pWDo!2hnl9sNloE&WuyT|~3{ zH$9iP73GZAzcL`c{u26jia<P;zi3i@JGo=$$dp|Nd%30sdy3${H>#e$g|Z$=9qMs) zz3ypbW-*|*bw8p@&!j@$NgSqiMiD^~?yD#wTc#bpw4+m$>-)I2pCY!eRne_?BMvTk z97&-O?sXWlFTR=Ka9@J*x7?Wa5oz{JA|jC&s1LW3xIO9hk&5xe;0X6cbV&bi`c&WJ z7#QzY9RI5WvqK`>bE(9(1DDQV-V{R%q~5$v$*?b|JDz#M{qB0l_oEX=V*ceMTYe>V z6}w*S>zWnZKAqfXLGLFilfTWJzmLI1dY5EZx3K)jBivPw>*JDL{gT5d>G-dIFbe zP$GWq-1+g>t(bRRPOdo}NJ?UG36(*5ZL%vtuSj<7^VIfpxz9t+{tW$~cqkc4gEFDn z(0nKd%7coa%j-1vW^fx+0_}uKp)#l(+6V22DxfOp2m|LMU^TR@r^|f|G@#@C8TQl? zI1QbH&O?r58Z+dCA|W>v4aGpQP&||XB|=G1GL!<PLc^dmC><ILWkA!R`A`nD650f9 zgUX=lWDk)Iz!;PP<v^REGUyl-IS`}JY$ylHg;qjEP#Lrjs)UX~p@XmkO^4P%J0Sz& z1I+GZXf{*??Sl+Ra`9X%0`9@20Lp-J2G<Wvd+f>?<T~y0Om7z9n^4P)UP`wFUPo@9 zx6F08cT;<W7a2y|r1UQu!agJynY@MYw$ej=OZ$&UUgY+{i=aEcg|^<+8Y9GqN4Td> zLXIX?LGu#1_z@%Gfn7gb>Uz8X(u$05#f_L?Vl&VQEu(KOqtPDj?r>LHJ;h}B_j7X& zy~?x{OCz2^!|aL7*W5Ku(kAlo=r6i1iRq+e^BVAb;t8G*F2nQoy^ky+Zz1PmvIeS# zQkS^g+ac$TjOC#fH&J<R+I7`Z*EQjz^KYRB@i(t9+`WnLj^z<<3GcMRYiNlTRyY&S z4J#ZEKXjQXe`we5x4K4!hwZzaLQdLs>0PdgnkQj{Iaf*o*_+Lg0?OoW7}yNV0A+49 z1q=sggEEPn56Ucc2`F>7Tu^2<D?yn`tpR09v>udM?FKLk+zd)ewt-ASJ&qj&WZJqD zl*wBeD08)apv)pGK$&G80%Zzx1e96mF|Y%898|MdP$q@vL79z)Zgjb2>J<rg2BX1v zFcy^Qb^_Q{#<ocWy1_^RWsWus><*@bGA+&kWi~nmlxg&AP^QE4!9L&;FbT{BWyhSA zV1IB8coDcBycpa7rh=QnA>cOfQW;z9ATR>l38sN%;7D*EI0~!))4@aF81M*qId}}b z0z3|m15bnF!SmomF!WKE`${kp%mkysEHD<F1}1=>nFNvvTn7#l2Dq8NEQm@lmh)h6 zIv4^j1Vh0UU^6fu3<EcT;ox@A36_Ey7`cKv0q*BK608E7g9g|FJohO5WE26XPNe{2 zz?NVl*a}PqTZ3c4XmC2%23!cX1y_JEU_RI$+yr(2w}TzQQZN?W55|F2U?<Q3JA>zR z`pI|#&P`MbFb3=jCW76-R4@S?3w8&mgFV27U{7!b*bB@DdxM+6KHzpR2`mNsf``EV z;4yF@cp6LrLp_f%$t4gCUIZq97lSEaDwqxq0jGeMfb+qjU@mwmxCR^nZUE&|;oHEG z;7)K9xDQMRtHIG=EjR{rJWd?~J#GS55QqoIfyv-_Fb&KAGr@^qHh3kN17?DG;8kD| zm<1Mt)4&pNCRh$$2UdcM!D?^`SPR|_I-a18Ica}x0-^LM@nATZ3~FE+=mImrNH80e zo+k%v4d#K-U=i3BECxG(C14y_0VaV*z@gwd@KVsZnVbP*z{O6gdkTRdx~z0C6r2Kv zgY!WR%mrQG8ZZ*v0CoVkfkVM^a4}d32GO-ugP~w8sBS4wVuy1#D4lpb7zrkW9Xtfm z2n+=?!63T6Y%mne0mH#OPy>rV7g!8Nf+b)FupAr;9sz^sB9DU_cph|tkxwBH#)2Kd zBycD=7W4$sXHF-efeS$wxB~0|=7U4QZD3G5l?v3reV_|GB-g=Xay@}sE!V-&r@0PB zgG0dtFes6n1~o8Uu7gvaru_#ck=1em%#{n^8ZaoCtQJ1FP59tW;iuq$@WDgE2agFq z6$j)T3@zq-7!H6gFhS1Ka6rz%bis5SDE1H-ivz;QzyZNb8~{UC;sDqI+y+Xoc$vfO z&+*Z*1K!PG0yiAMQO0={SOI<o9syqgkAubFdGJ9na*NCTDHsd>Te{mM0-u4yz<+`n z;G5uVa38n?JOZu+<$kaptN=HI?}9tP{a`NrzTBY7IDZ1H0vCfR@a2won)7*J5)R91 zX6Q4NKe^zDCLqh93E(a;1p&2w%K2!{GdK?gGdY(VPd0czI0e3p5pp;u6V=#2#tM0y zKLZwl4}ry?+^9;x*T8b{1(5rVN8RZvVHCiakHK)Tnsd3ME#ce=)^ffTbZm9G{{^_g z9bi0o089oS2GhXZU?%uJm<{d(bHKx39#{z$f#bpAt(1Q`ff5*>gSkYgf#sYZ1S`R# zU^Vy!SPOmxI<~pouLEvy4;T*~0+YdQU>f)$m<fIhW`mD_Ibb!I2fhUsc?f($pcwoP zECIg;%fWBJO7Kgt8vFoEr!2dHwVcZ>dnM;G7;!vnJ_MM}xeQv|oG+B?B*+EEb58wM zgO7e-GUv-c&l&_G2&BQ-0A_;Eg4y6pU=BC|%md#5i@-8a1`(Hn#hmAZG8nlSEa6-# z^?K|^g5{jcU}PKDWmHtjc`kUI>-0e$M>UL>Vbp>$7}>yu=Ah#r=ICV!iiw=MIbQ@O zaNZe==X@@>8Tl4qGUv2hHL#2V(>UJ<W`dKz9mq*L&F1_na07Pw%J?q_#w{>*!WaPN zalQhSVbmpH5$E^FbqurwW!N+VEQY@pECDBjWylW%%Q?RtoWgl`u#)rZ!3@q5z-rDH zfVJQQl2vQC&<AupXFj-bgR41}@!D`Op7Z-a8P5#`lQ~}l?m#aYOym4XFcZ8D%m$Z( zIp9>V498o6d7M8A7J*a1V$h=#*oQ!CumnaScm%^2f#sav1y*o98m#0z3p~Vm8?c)5 zX<#k533O~XAB(ubr#X!Ww}VHJZwn@KJ{>&9c{?y|JMDi40U4nV12Yl07t98q19QMz z!8~v?cpAm_U=ioDz+pJr6)fg_K3D?21D1n(!Ah_MtOiTLTJU4g@lTigL*V=d+J6TE zZWyyc>F0j{<2ip190tA(P6z)1=7Nubp+wvfEaLoeuo%1=+y{RUSi<=opp2~3z;e#l zfihH21uHqv15bNk3?Wbr<8CmL^H{K!^J_rI^X9X-X!voQx;dW%9^!m37|;1iFp2Yc zFq!jf!C1~afoYs)gB6^ofSH^>1ug;a1gFmDLQewuFm3=hflI;dU<g<Weh=;ki@+*y z3uu6^g6F{JLFWtR<Rk{n+4ahnh;M^;ZQJBB+O<ezupQ6fD-~Sv=&r|0Tt7v4_U({c z%S4CN&m(@}&=>3ZNmh6yGGhr(bYwU#BRt#Uk0P8)c&1}4|EMKa_zJ@736Fv+4YSx! zX1~ezs0-)(6cS!C6{KNIA#6vsg0Ssqu@x4F%B-+-s?}Cl96E1>#nHr<O<i#)-3pH* zyyRu7ofw_TNxpSKJT0@r;>39?d^zEml6ogn{KA=p$2hK1xsq#z#fi;USe)B$g~h%> zIGuMhMoPEie#JZyg)}QH3QMf8D6A(ej!Ftj2w<qH^vK;fanbiJCg?7mj|_<V%mA zMmQ6B$%$OTqtR5wLD(ZFa$&!9K_WhGg|8$W{hFyD&ZS%7bi!+_@EF27tng^UN35{q zmUE}6D|I5-3d=2Qx)sJbk7K2EA}QN$g{538tgsZ#X)7$LjDFoTDit=}3QO0u#0pEl zxQXy&N0vjJD<>>jEh(19DY+=lRVsOpS@WyZi5Zs2k8wT~6$zgsd^vd}kw?B^R!+&* zSQVbB-mpm`Y|Etih36BN3M@Icg78?!colh(;?HzsNcr!uPYCZMEX_qCsPGFPBb<o~ zl1q+VX6j_%<R&~5HzlRXgvVQTA;XWq#E+j(cnWnvidJ%?tL^npF4*BJ!glH_U*Gk3 zxvQj0)RwLq-}ZL8--Ql#(`5OqjegVju6JA9!ZQvn!W|NX&Dsd{*xP&?X;;ov*QTHr z)e&yz_Yv-utS4uj({{}<TrGoImK}~O-*NYfjHi3A8U5T*_ZuO*?)JJC1|_X#TjZb2 zaXjYKpV(b#@zz+Fikw5gxyIEx1aaj|zjN@)19XGYJ!J8!!O)*g+vis6H`Tb>_VAaF zS%XdfoDeS#)=4-GO8i;B^n|Nzn_-r2x`j$!pLEU@9sIND!r)<;$g?hsy8MMe8!X;7 z(BBP_4>ps5no36BmGG(qY)BTIws_|)6ge{sCIyPeARY?sLnPH`n47}Suz1<v8fZII zVev#KM7gxoUsZXEs{JQsG9mxeN&$$c_Mgb4LH{k2Mb4H<w36S?eJ|C;+t6nz#aN4% z2-;cTzE_pvj6nHp%Ww|1<_Fkn#<dj|Zv)s=9w6cn-B7b=FrkWOfSUwX2G|qdj#<1~ z(5|5(8>GMDjED}l)caMzO8QUZq@`KB4A54uGAn2Z@@BO-gg^NK%97ceE#5W@Mb4}i zE&avM!8U8!xZ_P&kxJ^QF<slwb+P8Q&g1Vh+l3UBf4fMjG26vhOD@x2UY~oOc2Q$G zKT%>2j8<YCi|K8anw(35B$`r-R{;jPGxk3Hli-MUw(XHiu;DyjpQ~a+3OUx|rGib_ zLBt`tRv}};%;+L`xqkLUPHg5|ydoQsv$`O}mG0mYO1L6GSF*O+;?;uwl|<x&^%G~w zD$B%>e5oYA)F(%xSB=EtO#uVVh>qE2Lr_(&^ee@^q5wNmSGQTb63|Xc>3ymlg&=RH z<2cI41C&)2`PFpH4f-1pd8;2oP1zVZ8>ccXc}ax)Nx5WOyp>>6i4i%`Rpk;L{Hv9o z`1>Q=r2*z7Jrx$O3bY$f{QYKnkT)|U2j%GB8fK~}CtAD|&{oc|l#w?xBOT?O0A<OH zH5P9J=x;#egY}18w0zsd23VC%m^fzfP6wC}`Czm2uuYV~O0I2~1o0x>;!Oely%2e; zNKi9VatvNk6E?P4yq%zb^%Qx_25M$jM&?JjYXfXZR)(Iiss?ChWn{it4#=Ahq@tW* z38JI^BoWybF9-B@K;)GJ(ZMH76GLXh+Tmxy?lQ_P-XSos%Mcx_eW0pb8L|eR`(%B7 z+IA8wUMd)9M|3PZsG4?4;N>=9C*R_2Zo-b}Sawh~?Zm9*aeEVXj@!Ibjr|cF%MPlh zot5y0A#3HXuS?Cec=MaEBRZBHRF$1ex4|n8up`ZPr^TxTo5~}JciY;HchN&zrbbp_ zD)Mwgm&8=O#Ty3xH&dc(_0X75u8oXb7vWyfguV3^Z~OmYPjoGNm@w_7!8_K3y>k{X z`uG2S2N7M%9wtnC^WkNpBUvGT_8n=y#moCY?1`>r4-?AXkbHP$0rupUP-*dwfq_+3 zbgUvp)wEL!FaAtJzr;?8#TyF-+7TVg4yvY|DFqSkHBH#rWbt-1VMlZ<JE)p=R>Cuy zuyfwxxz9HCM|48;E<tpzwwYpB8Hh?&%b(qnvn^h36J|t5xzkzyGdCh~$bQaCny|6Y z;#D<aLv*Ypp=u^6c|A9pbB%pTw0Oh7z$_LW%MPlho$2saG+}4G#Vc;Yj_6o+P*rwD z=D|A>U`Lu>t;LJ{g9ZF1ic9iQbVK!^NV3{?Ydfs5sK{mcv$J}(#mfN$lP5ZsTd11J za~INyH({sT;vH(jj_6o+P*rwDuYl+Nv!Op>_?2Ms(!qsLQ#DEa7yV{xkl(`J%=SY4 zoj+ae2KreRX}cX4Tl^+0n{HKN_K=^lD2iK##dH4kf4e36rduJH5u0t(9*A(Kqb7dH zpY6+Zi<b*FRne6&x@Mmel&<gj&DCzmLO3M>)}$xcXYs1Qz;YBFGyj81l$A-_adW+2 zGF4n0Dv?Y&-_Tbzgtd56z(DJwW0fwdW-Up1kl{)bcD7l((kASPj%5c`W#^*V@J=^j z$N9JEV=Nfx&+G^FPA=|YmW`2l*qCm~OFHfRUt;m{!T;Kj(6#b^x<0a5M7w6&;q232 zIpJ#Esmd~N91L_~`-A$g$6f7|&JcG|ggfy<<6IqP@iM_c1ELdRE>T>tnoKUN^#Nw2 zZWdd-a_|`R-<pi*H`Dk0>57&YUnMK#uNbbG#6ixwdbV7$b1K&2H(}gtHT$rU>8EVB zn)w!Q4cLUT&j-;rTTM`=e)lO?yOFhU$^$G)?{~=J)q?-6(TJ{9XywY<km(Omt$96F z5+#4)pQ_dtZweS#0HR}8Ylm7JYtu~f$|)vW4=LmF_9jf0S-i?7Op1<W5>=ITBdg&> z^5(1Z%W_SPuq@s%@W0hg(X|p9so(rNy@T^%Zax9lB%$jqUNIP$P|-2H3R+=W$$@jE z2`jZ0FO+v-1FeWoh`Qw{8>0_#o`#%%x}>sBv3R-QCg{IaR?#=BM00;L4*j9iu6BdU z{47fhc1^9c_)S<gYihzHWLZdKw_+?_D%gawFBzh5_3xNbHiu`z%MGw8MVN2#wt@ex zu4bzAgrKf$4JpM|b$~4?z|$7b8QM7OMaQaEsEVDoX|MwGNb)ImLxg)aCM0bCN#5mH zycHJ4>IZ9F?LrV$ZZ%6qZ>QenoU3*F{gy}-=s$B$)d$ewh3vFc`Yl8yx>>`h)WqH5 zrGWNqbKwRx+YE}<ANs@9u2&JNIRUET<r<5(-ohf~Wl)aN8n6Sc{Q+7M;Sq~xfVQT{ z2I(i5=qufR`#DbtYwT>Q#Y+cm-Tjuc3Hr#tT<!WDLp84n)eRP}*iZGCrJ84|hHj*t zHKAH-@y`3HhHlg^L_}~ykvJ1kObu`BZidC14%+S}ZZz{YRd0FT)lL@nOM^V8UJ7v} zzZ~M=Glq^FUi(YtjlCQ0*Bq}vC!hiOn&W2Z73c(%yjF88gmysf)@hFE&_|G?fNRh~ zXcM#_a;%33WkW?!IaCY97ix}7D6dfSI7$dqL+%GOM;ep^6+@Mf<3S8S*-#Nw4*dls z7Qusxp-RZ{5W3I`=shUmVZzW$&>`q|sM8~w;|l0j=y7N-^w%RE&Cz3n=9mPngr0-` z1NGiW%Aot8e?wg!)f{(0`=LLfp}OX{9ohl?0BM^v$3SQi^bGVB)ao(KF%G&1`U>jt zI6BY^&<{|@Cp5=o4~GKi4d^>4a<k^R7`hfJgi4_wpcYSRjv>%|=s{>V^dsbc3TL1N z&_hre^fT1zY0WVlS_nM?y#sln=wi(=0$K!ZggoUOet<%^XpZjC80dcJC=~aM<`@q> z3>}C1Zq*#KptaC0=trpaHq9{-S_-`bwRu)^EP?hye?UF|p*f~PtD(=JUe8f9(EHFI z&r$w8w^PBO&!9p7)Epb2FQDM(HOFA+PH6KBn&Z?C%`xXiDh;#+`W$NZ64?q}54{Zy zdRcR9gCa_hgWiRzA?+2Mgl>mkfxJ+cS2f3sS3P7Kfdf#`Yh*F>5cF@T`A*F-8d?Rt z4*ddkf1Pt^4|E)A_lD-U47w581nq@>g}Ut09P^-Op`W2%rJ7?g^el7~>hUH{L)$(7 zUwiK#pHunAkKeN!vwLGP48t%Cqx1XskI~eyG+GiXQ<IT2On&6;o-B<P!?>lzuoy`r zu|!r$NGy$(#MEMyYO$nR^?hFFK6g9bkN4;M{r>U&^Xu`ryv}`H*SXI1<MsRXI%oK= z7NyOBRxSl)5=sHeJ1AFB?s%t_OGBBAvJB-EN}Gc?Ta+hI4xrp|2-JX5h*E)a>RpU= z7)OP&10}qol`9n`ALR(j&nTVW!{Sid&BcEQP#RG5_c4L@Tako=F~R$5)`YHT=G)ob z6V@*ID&8{(0}cE;f7RvtlK1orO=$<;9%>8Q`C1E}p6wIxJJ5;v1PQOEd~}GXoiC@8 z#~swtH!#H0#aC~5LYSOoB#{%s5s>s-4M@h?07&lL4oC#vUO*y54=?j==<GQkUcaJM zM9=1{JCS=DeWOCj*t91iJbh_XeZ23}R$!4?y**s}lmh>A#sZT2$TM>N?NlG!SMfsA zeHH%t^k`3Ro2*q$^_d;~;?GwW;|XuQvZ-NRpn*K9O@U(y^?{axuAayt4fS{}4i6@U zOn|_cj`)kS_!onT1!6J*NG57|hS7)gr8@d9_V9EgyBOyyi1wt0r#q$%)h`UoCDRU1 zdA@0OJN@;TbXac>mV<#@^_V>w@fIMNNwB?4veg&-{mHg;EJiz-&2D?Oq;Fg&dmD<o zd!mAm{_66r=<DebmC*@*G}qqQY+RG!a{+x+tS8zR5#w<O*9Gn*N8h^!`-DE$Khn9; z{_VDpz73$uw>#Rywn@Qd;ItDu+mEk_@$BulumUd%;$~|RfMlSEF7}pUKr;C_z#t#p z6*yAa!{ZL+&`$crbRpZ>vrVyMvvRvMopD&3^t`6$?hUk%qYTb%u$Ntn!2-)}um^TW zW7#p$p6HI0y?>Hp{}Q8{_Aks=X?WbenqHo`HU*BeEDiLrFe=6|4OdtD?ua2kLPrC2 zTZ3as>464<0d0yMw_qifKIg+phIwao_rGFO)zweFWJ_yt?e5k@&Jm0K*JNAK><UA< ziPt2_HTh>n^8uahJ=2=nkKt7xtDik4A?Z|HXLs{-j3~s#e?Ks7u}|se>F)in=SJeb zpUkFl%l=1uJ=@g&9$u#>&pl>8m#nQC*Uq((pf2g-ocsNFU5V6@><(9LNB@to?oAsM zjqAW5q$de(k-pAB&fsk+Qb+!k-{HSbvBx0foq_9I$2g=P2|W>LkK?s=Iux($l1lQA z1i}b(K4=o&d?a<`U#k7OR=MLrC;!KTNPvp;caBqOubR~VY`s@V)*s{VNM;;~>;IlH z2~&|9oC9rjpvDdRz0xGdIBB^4?-M7Xs{bBmw-+yol1lRL6yEJ5u)rROoMkbt1IIwx zNNkHh=VU$^-!z7t>c6gXOs4LCOooK5$T;DFfyl3H-{k?G@olE9Zek8&dpOy~U`I=y zv!&z9HvipX^IJ0a@<0#5aocoo+}jXn0Z$+6tBLlw+syDaJv6(g<Dngk&_ZTeV)r0J zmjrqc0=HOA%TQFid)YS<KJ2R)=#e5m#a%7Y^rbzDud-!mWXG}V{VaM0V1UV`|9dm# zxuf-(rs)&~8fx&Z$>93HFY*j?&rANv9RMV(_kA0lu<OqNqT2dL7SVrQ)3`CQj%Bua z)X|c1Tg!S!OU`XAXB;hMx3vtxa|42<#@P}+-_a7`qdNx_j8I2?LQ{SF^0odIQ~(CH zD$CzqOnD-E2ce#<tQ8>Hfjey2$?i`i?@mYm@pk{m?S9j3__U+{t)~8Mx)nC9B(aZk z#}+uwDBIc6u>+2k%&D8>cuN932sZXTfl*11Gk|2)=WY14{WLP`n%nN^Vk1y5Kyt?b z8?u08U&tNteeL;K7(dJ&i}aowXt89~Mn_Ajv!(A2tO?zbVeWs*CxB$0<agjH)qy*R zp3*EY!?(Pzr)N}bT$8-!a7~_?2x!Uc@NCBubA7)=dwPY(*h7+zd;L{695h<%uX@K( z73u5I)ziyYK||NgB-dShHMB<y%Xq_2W77diO^h#z@kEC{jh|#OIdAx;GoC)7dH79o zyH~y8+rW6bHCz9N?_I_t1h4D=-&7lRW0!x#zW^O0Hn&G?V~^O;9<hf#V!t<hKd~OB z&5F01aHeE{6K4i*ZfdEzt)-o##U1awXVjLad$`+LdO2D$0xiWve<^CZr7+N79sQk- zmLq`{iwz#+Jz;HoR|ef?i)^m+o##FMLo){YO_9=pmMIdIir?5u>mLzZ)@h^8VsCA_ zmNq@UW}tH|XUm&fA_h5Ix^8W1NeHx99Ir6&%i?$syyeHphXKh`C)w~xyM8vHe_nnm z^~sw};~oi&WNk(By-h6*&X#c9(Gu%h*$aqP+{F_TKHE{B>Zt$LQJ?Fm?~1tuxZqw# z{p*hYwO0LF-P0;^hkxd?00W#Z()Vesr@OECUQer7Y$_qe{eWcQhi!Pm-fY4EQvBU3 z`@jsCzTMw{9w6zz$cFiV0aC{IK*{i=fA}LCnkHLE>U)LHbDT+(Z+CA`ulD0{fMgbr z*#}9aVG?QbkJ9_lCV%^ffaIy4*zhc1;HkNe{;z<-$at>;lK!vT@GZbV|H`KR;d>pk zjP~vBgXczc^|-?yEpD29a#MZpzp(@i>k8TCAHN46c^>&47=Hoj-^+(TTpSi$tT*$U zUB{RvepZcZGPycHKR*lI*z~wK-!FYVy}BL;0h1?v21uSjAbA2IkFlhSz0V^Z%%RA- zHQenW%9H-8*BzwY=&ves^osZOh{FN3DruTVn!jqs?xw1If7NzJ)j?9#-IstpBX5r4 zyMQ(k65>khv(w%!8@97yH$bwEBpd!<!^Z$gwBb4X_clP19DLmVeLo;kjK%}{Swo9g znx>Z%c(z53lN@U)bGCH+e7}E3F9DJrB{)|T=s`qX$2E43R~$W}1$$)y9W5kyL7<8( z_MYKo{>6^A;lnn}1SE^i0whE=*RIE<rT3;emasQ4qP2uD2NKo>S}e1+g<_*sq}YU3 zvA8B^#Q|Dq)py;i{wZw+BrWd%5?ms`1K64^+Uv4}e29Y{DgrHJGJOZzV~w!K%CN^G zzXM~{2kszag@5H(nC9CZAE2#r$Fin1)py+t8X}vr)21l`0~lXK`q?zK*svF0gTGW2 zIKX;blO?+F4R}9I73}lhPHGc;n+68BuHvZAa@1dO)E7JIYaLv-(oz41&G@XR`shJ{ z<)u4l8Sb=y>-Rb8(;fA@UT&IafusIsdt=G?75;jQ%!n->sXEBaoC29dj&%kg={?Ve zi|qQPfT*_qk$#sQ1e_Qc$-=l!dz$8weOt>YM@z|VElV9ORnC_1-yJP(-(V`RLp0_? z&W+5KbJV}*=%3M4-@dmk$p$(kSs`if+k1p9#m3mu>k%7HaY(UBt83qIoEKSrlr6Yo zY&gI^M?#y?x|0}K2Qg#@TC9B<;gDqOoGl$Y*#fPHL!ccC^dMx>cd{+gp0Y*R92<Ha zBF$|$=F#^aTd3V<3$q7pIKd&*Qk-|RS?ZX1k=?R(EEG8h>75MRVUhPXTd?g0B<FGh zkn9%u9U$+<z#T+W51y{sWSC?&k>OZeliM=^Ei!C#$uX5u(_R*NWcR0R2{+G{a0CYE zy*kj-;!5ET85f=47^BS>4&q6^t;Oq*cnfZ8dCnpDb_QB1lCe9ETP_3|3hqaPgJ8l2 zJD)E*TC_k*N-7NNg21n=5uR4#Z4BOR!-F>b2$0BzUu;<Tn*VngAQ6Ov?B6MXL=euj ze>bAP<sratzaae5u_)IN{}ingcZfmCt|yN1u#WfJLT<c6$fXB*kZtdHhux!-qeoGo zN0S(A3{(*@IPfft7|hi5l@04`cmt3u^-n-TYQaPd`sf~>$J$;$b-R`D)M>w!P;!^w zN~pWbAFwFIZ!$FbM}{JZ2J26N&0o_p)E!Pc1Wt_a7b(DRE;~4HioZT*43x7!B@2Ul zc1&zS-~wEeaf<;h1n&Jkb`TY=20+phZVNv0J3tvVWYoUldmIyp_sx(!y?U><?|#L; zdmkX7EAl&VcN*zxt8>pghA6d$2!GK*wAH>%vL`m$mXs50Nl9RUazcDFlz^n{8<3RA zcQ>st4cBBH(*XUFa*{*xAqt@c_N|Sh9?^z>>)&zIhxvA^&>Y`(2ua9#QgzzqtJbsp zRlMUMAkj&$pY5rWUMKxkuh^`UR5e;vZC-HP7@y=Mz{L&*kak<k7Ta4whRMIJrJduR zgMk){0XS~C7HIG@e8(-(!|Vyb&gFddqYyD!7pNj6V0r377aaE6{7Vk|#*Fs#X}=u5 z$=m(w00{!%($&T{it)4yDYmOt_K30&x$A51_)+dHK+>1M!1*ToW*9)V*!TTaWOW6k z$~IgsI9O$cqrUmUrvCL!^=(=nXsVAH;oMo)aYxE+Ey)#4_vGBxlIv(G3$ze+807Y? zOn?SPA-<Fr^saw--yHJ8pKSO$AffACXeaQf4GloT4b$!4&jJ!|SYrPk1W34{0BCW; zaK^E!Z1QA#cP2X4RMJ%6e#d+Mjot%DHkz0ORiwRd$4t8^%h42Zuf0)COfV}@W!VCs z<3urp>yiz>x8bjVWMzK=5+>Lj`$hVZf8?MacFempFk;PMNFW;n$Z=N(8Z1*FBs|z} zVTO!sqVXtPldf@q7LE74f|Zk})B}>1R@iIuMDjbphcZXn%d&*-n~u5c4YUwq=)1xm z>m_@vJ%D5^@;fkAZQu?vR(PIcEXp_Iu7EB+!Lh9LruweBjS=_Qvm`J;0Kj%~f68El z_qGNWUv*#8;%jkDme>I3*FoCaXGdze6ep5jbs%iUZ7sUvp2FK&4m$2Ra$8HeJx%NB zftCa~(83(+kM;dB6pU|~qi?Fe>YC$`kZYt@E5`=y_02$)FMXUR%KiGv;0RyZI8U_u z@m2n-sCy@^4vxr0!6L1HN%(FhxkwxB7n=m}vT*H;g^_lWB}O1QLIQ~$U+fDS@9ENV z*2dt7B^!f%Bho!xTbF+7ANxtbIiLDQj`#Fzz51}fuI}C7i0kkA7LNCH3!zQ~M{p>< z{4`HgmyAQf5l^C!krT*&_P^~Fe!T6Fa(~m&rQ@1xUe^7-)@hzWBU+pcjtE5w+%(?) zFk&tGkvc-B4Y+p3lt=~}X>%@Tqv7&-$9uZA*xK10v7@tZM;aWqKdiH$`_-4+_Fg{r za^One8n|k?EpS!+YT)YAf9s|Nu9|J$>O1kUr<=QHvzGqRf<GJD()YwfPq(1Eef=Nt zbZfJGxc@tgPXI0%-qM;-J2KPf9%vbXzZ7F_e&GX-hMF-=4cEpv8on)RYWStd-#|E` ztE`Yb{Sn~Bg5`m$bN^m_f$t{zTYFe_1b?1>+n%qx@KB&N^aJ~<S<IKd&~)sT_mZza zfpK5?h6B3)^96d4^9>nT-!fttihtZ`|Bx#(Zg=a7%;f#Q19jqn5WC;xSaOAa!68P7 zg<kIWKM7QAstoac{II8Mgr_p(-=qKPG@4`5Jkccl<$9#re^+qz*$|%x*y(=iGy8UT zi@yR_Z@M55tl88C1+Jo61g<{)_i93)K;8TO?5k#@@ACcesHc1IU4f?cLjzaty8~Bc z34yB~gUJ<HZsjmsk*#StEUi^UTAKCd{s8+0ed~{gkZhg0p#Fis3^F>yW2v$P@kvR- z?_`t|lx+!EYsUV+r+M}S?aT5=?v+%?6CvsNO4Y;uq;En2gY1%$?TO$v{XZA4{Vx^$ zCG`J4m9g1=R@rUVjG5VZhV_q-mD_$ewH>cWZuecx_MGv?WaA@0C~+w9C=?2ZBB5v~ zi73e^V^K0tvQXxt<f7!E<f9az6r!v{DMBemDM2Yk*@;qyvKOTS<s?cK3h93#8=upu z#l<z01{Bw9e1i!k3MCdL4kaE%LP<d(+f4qY;W`r~8zl!NA7vd%2}&7C1xh7KElMLw z<kJ`rMMFtKNkvIVnfCNkSPd?6Q3_CsP)bquqEw)qM5#f!g%UD{+<?ge#-dOt2`FPx zrlI7b6rq%$>_j<&(ttufDoG|yjz7rvULTk})ErNzA^0FFsSf-jA4m;c6Zrq)x0PMe z5y$=Sjd_n^o*85lEEMR}GHMPQ7g|58zp?O$FMX~j*ISA?k+1XY1ndl01V}y)R1DZ1 zumX_qxMP4l04o7o1C{|2ZMYnee6y+=kUYEwkT|&N0LfQ;>H*sVHUP!|-U1}@sSyw# z@5*qw=lQ?L6b48>9~22lK9m#<XnnH^kbIpX9*{)qI6(3RCJnGBU?N~Iz$Cy}z+}MQ zfGL1|0LRX=UgNOV9PayPo@Y;s`ABn~Z|y`6U&>4b?5pSFzxw%}_CX8xw|K@A8qzF( zfUoUhPagu6#h#u7KC;-;pTK2y{T>^hUktX2`af*gIoIFc$n_YceqpZXZUT=2uB6=L za`SVZM+j`T#PcYDCzkkc`Duy&ksY4*L*sdW{iA?k`2+meGsqk~#`oUyo@jFCuID`r zfnVEjYo7m(6M6p0-n4&rUg{rlhz+OOaMe<Ozjv4V@B7-W4_)Tz<4a%ev8Kx`^E_(L zymOv^#tZZO<E>rhfBp#@{%u3%1^;+sY&ib~&*RoSU+~|5cfSAr>G}SCtL)zg^8NjK zzUXfsZo`>2T>qlKz1ea<oVwgIh>W{_xxYVtckz9-+|!O!Ubj1qTjB5g{tExY`xN*) zk1X&%e5U<-eStmrN`Jq{SNb<+)k=TAefICKSNi)6U*+$&Yn8wK%qsu5f2{JiKf2oA zesr~eoa?Lo{W=u-e-A12_uEnE@7H>br!$#%|26(aja%dC)6IG8i6bXIIcelm8Iuwc zfZ4E$2lzJF_Z+a{xix-lyt&4D*8a|GJy(Lr-&Cph7JTM$m7-LjRHM|P+(HSd^0+9J z1e7F{RFp?ivQXxu6rz-%l%t$Lxrow$5_;C-ibm;=BA_Iqj6<1@vJ9mZ<p9b#l=`zC zudBs5+<?NMB%-9Cq@!e`<e{uZDMdMgasj0dr2(bc=N?xiN*@#nB?)C5%2bpbl(i_E zQFfsmL8(Uh8s$2QtJ>pgi_*V(7#@m?F({cR^HG+d6rt=vIe~H><qFD8l+Z6cu5KuU zP?As{MOlEd_6v`%$IVtxw!82tMz{Z!putt?S=pog|G&%spYHPhtuK2<2KfqJ_H@|a zP~-{oGz;tL|Lbi~!D@nht#^3T=J*8e+MxXt9|-Lkv_I=LPodkJf^+$s31K_2ajeMR z&8D#P*k{@2*)hT-p;Rmr4~ZX(pNU_HUx`=62C<j4R@tI-P<yFs)h%iVt(Ue|+oE;Q zd+B4$Ow&~XLc@3^)K<EjuA<M=ztMlwZl)E}k;!6aGtV(=m?)Ov?&ijD^SMRbCa!~* zkK>d1`}rsN)&eD56|P7PQmnjJ-mL6V-dD~kSCkZWygEnqs)^c5+I!m1+9*9kFVgqv zU+LfIf9h?GX-0+dyV1oQY^It|nA^<v&2#2ACT39y(F-6@cTq*uKI$svp;PF`=p}R^ z-GS-Ne9F`^e=^=aEYI#`ALnLr&v6I1D_jHDj_=D0{1pBu{~2G$KP@a4e8OfSMC8Qx z#WUj9;!QDFY9Y6kAD3s!AIjg#&6KuEZ)J$`fbz8Rtg=Qqs+>`Jt9PrT)vfBAYJ2Su z&808VSLtu)@9Qm$b_QiEF;*L;#!VyG?Bz8DbFEoo9w9TX@qhNH0~JfDR0}$ij-v%^ zWG&sF8OJPR%9&e?!cJw^vFF(kY~uY~Cby6KfRp&S{5hdcm@J-?>*Rh)s<K);XV#gn zdKkPIwljT&{*~^<wBR~mkvF*z{w-m!JW8G@FH^mR>IQY8mZx<$`WchW8Rj!&BGAnf z@&6*~1uBFoW%Aiq*zN4w><RW9dxiat4dz-%?WMP+@$x?TsC-?a)xqitb-VhJI#jz? z8>3Iwze6HykoCR38Pp<bA1iP}xhSEh@R9I|P%Lg0Z-~E(rP3a$l~-;fuaMWuf|jIt zjP}Ml<BZYLoM28iz2@`g3No3PAXfoEckIbS)I91{>Nu6ntYx+`2l(T>N4Owek?N&C zB)9yF+(PN33{}P{Yn3A9tn#JOLT#;fQ}0)osjJk@>QS{uty6EQ5n7ZMrzu*7wo3Ev z(Z1BKYeD*3`e*tVdV_w4(ajiaJZda9N{kPUE0|22In11DzGxmZFPk^Xgs33bH2@D4 zL-EvbY66u_t)M=jexnA^6X@0SNA#aG!-$N*3}up;`*Cy=nM~#>=4s|XOfK^Rvx<3% zDaNkuWXhPmzS*^&cHRq24bz7m1XLW)KE~#;tJre(eYTFh&PH)Pxg;(N<g$XR66?i@ z(hTXe^rh5SmgUj%1UXw?Ex)AfP~K5KP%bFHDxqozwTt?Q`jy&TOV!G?3hk(NR{KdC zt3Rf1)8Et&=x6oIdIy6sWaDLHlR=x0m`{1l3iBjZ_nrB(`KReh2y*3NeFG_jO2qm` zQKzV6_EB~+yNTTcEI7_aa{akGxhWP6ujDRp*SX&~njgXs;~(Nn_yhc5{&zl9xI^e6 zJS`LmJA?zmd7-7)LF_8Vii1R1yju*F7-^ieP<m0?FYS`O_3|I`1-+~Bh_TVAF?yJf zns1SfP6=|w1H@4jb&0B_8tHr3Brcy9#G_zJ<K$PBt?Kt$xp9Zt!NlKf!Kd&L%cH{C zFWEadlS}13;o3=Oq#Eg})F8(yk1H=JUnup;AXQXHs`=^~b*K7=8U_}Y=G7)?3$($; zNTc5Pfjl@X$ReD})FJv6=0!G#dy2nTxKq4CIs~K|sy?Px0@I(;=4r>ZoBBc{&!{$T zk^6FjTt%?A+ECM|7pYrRCpw3|!Y<&K@cV@d;Zxyr;YZ<y&`NA8_7eMvsp2$ordTBI z6}<<<Pr+V)6eFY#k|qts)}%{Wl2>|8DwJN8UXu<;A4{J~-$>V`TT&}fOdmO3Hszr> z|EJ{z@(c1y@<w^Pd_ev{u9DBozsliC2e2eTNmfQHW0eU?rt+jROL<1gQI;snmDSjZ zP0Chfr?OXhTRE(J<W)|BXPs9rDc>qTD%X`;ic4*-denAm6v(HKIzXjWSvAx|HCY{{ zKB!JmGt{Z-Ot9qz>T@8j0(G7G3gp3SYMHuEeOLWJJ+6MLo>MQVwd!~3&+2b#quNXh z)!Jz7wXRxE5Fe%SnyTFeq93V^(Y)ieiP{uxx|WS&Sfo9#t<Va!_1b1_o3>MXOFIB8 zKBj%5eFjpk(XIfS8?+t3<s<qDy%sVc$mj*;HNqHgWEcyK=Zp=;Hly5l51gdhxNiJu zgqiKlz9wzD3W8iQIHefs5_^fiBz`aV)J*LSZH`wztzXqQ7_Q<V!h>C{xmd0r_ZXMW zJ;S}go#U=?zi<P1jlT<mY6HKQf1AI-y9JNXMR;6TAS@Ez5l#x93Ev2V#6)qJxL7O{ zUlw13oCuTdkVZ&p(qqyr>0PNx`a)_a$I1g_RbC<&$(!Ua<!kZ{Iau+IR5Fw)5UhJa z#~(wy#$&^uz~(MiSF0D*2K9H9)e^N4+IVfNb`VnVPc2Mu2cbJ%&()XeALv#3m--L7 zU?dx(j2Da|V~g>o@wX9ab~5ibGawb8F^`%TK;W)2{{p*E@e~WWxST4Xwo~7DsRrs# zh{rMXG<pX88hw!dfc}i`#&C?x%(8ga%ghy~kqKf|HkrL2ENT~f1biTvi{!d+1GuNT zd~PN8F*w0D+zrm)Q^5yTgA=^Qzr(i>qQM8o3)6&Ikff)CTH!mP7i6g_ju6+1JH_4N z52CjbBDJ0Lh_p!BE}fJvsNJ=Pv?ba;?ULr!yXlfXTAv0H`kH<YXC04KK5pa~>x~`8 z3FAj2+@#EV&8N(K^Pu@XRFEK|g}8cCCZxp^)YH@wY9*xqA?gHmj{2UuiDmYt4SFm+ z6-%8<d!Y}!=%s!1W_k~Oi2j7Grt9b%w2NuUv}W2f-I@N30zUo#lMW5$8D=@Np4r75 zU_N8cGnbi3>`eA&wvjyo4e56=#Nuh4<stG^c@>E9Ylx%vimD7(vJ|iKDh~G|1kxaN zj5=Rks=fg_sa0>Noj?uV4dBv0X{*4=J~UmGey*2DHB#g05N<d)*<IiSE2Lf8Kz*kk zVLW48GKQP0py#-1f?U(E+HTaN)E02a-t^=2HY}hYGnILbxyB4+r?c;|r`dMg<J@fS zZ7z)O%s;~K<|}}{Lxm*}$00!2WnQq;Flho<%`M4*PLr&xQod4psTJy%>S}GBwqN%U z?p7b<iUWwCrqVswFW8IhU)(5Rj94a3R)W+P>S0YZ9wYtWswVD*(^Mrhm3@kh<BNrp zq9hCIbK2*+X(SqC5PzQ-YCiKd<Gsp!z;zREN}njrwJ<G9?`VEb28wBhKlkNwofBKj z?d5q&45;5lHM1t+;m`3835qmSeo;NG{;jstj%XpetdG>M>m!XF5Ms?-Ik@+CCP{b} zLTEeC?z-Rs(xr+|La9A1)`^^yBu$hyNZY(ph15*;fHpJaCqbL%p+@~Gw^kkj+nf(} zc}-~!eeOXuOWmV>tfuK}^%DJ%{ui{l?#2Wo(^zDDYJ6if8cAlFIosT0zGGIIu9Rl3 z1Wcd<)t!>4xzK{vQ$OKIThTq~ne-xhIS$Ijbb@y91mn$Rjxv{+8{8k<ef${yqUa-A zl-|rm0d&S3eNu_E8!Y4^CYG%jYLZ$7mfA{d)Mn_TF@@3QN2V*wzol2%cezjbQsEtO zpR`lXQ!>@D+6Y}SqRc-`S57laqF$hyv462QxYPU_!bWkGS6U=bPzI~Lv|+|t;}zo% zBbRJ{K{HF6XFy6bDKF)t-lra+9|ej{rKe*JPt)`1h4ix^pk-LiDtaxwp56dD+Dh-B zcY&Jr(U%#b(yU^mxf9&yTqxg>zmp%w-{k+`|K^(sErd{^wa`}RAb2|q-Jl%y5&8>* z1V#`9MKFXR!rj7fVWcom#Hqu}*33nGTUVKWoJTk=bis-alS!5}!xv`}U8F*R{bT6K z(C#lXv1~s!5g5OOdy@+ix(iE%Z9=5DRD2UBA1*2K`|?RSTG5~xmO)TyUhQF^&$C9c z5ejW@4VXwXOa6ya9CV=N)I0QD%)QJj%ptalrMc1EA?_kKl>bL)FSe0-OPACF?FD@> zIkHOs5%i|tqFX`Bo5IiH?-o*o7sQs@9hzYzkv=ueT$unpnRw<Q$e4@rpR)I5rPLCe zf2pk@B719D;C?S?A8O~cue2XE30Qr<{-VA?e-&z~%jjTqF&+R9eA4)jam=^~)az;v zGI?{TSzvB8Uo*djn)(;C|7NZtJSdzROHHR{QLj_)QXf)hsTkN4Dm|O<J^B^!3J<f! z%e=>Y$^6Q6W`{xnoy(R&(?1LKvw>~Kwc;YU&RlPf=MuOSZag;~T3<f*5?2N-uZ<uI z6TsD13FTlVKMIY)-Qo_hy)*_0TP<~x$H_0tKgo@90%&M6Ot~jv5B;s)rz<$PU~7k; zgzmhZ_U>S(bN2w3n}IouHJ&oI8+(l7P`x7{w<np?&F9Q7%&TStId8<22|9Sd-7~4# zR6g|$^#>)>!|93i3Rnfb*chlAF8y9TRo|_v#&<BY`oYE;Y0fiUF~JtDw5K{zU8x>a zZ>k?PkfJHxOUaZ@4W@=t!>D_q?>>ORAEqW!lc*`wlhisoQ~X1kqPzhPUZdUt{pCKb zP=6gqv5uT473|^w*03Adx3DK;#XVw*v<yggk4!7Olr*(OovO{zmgvF8ZWyYEp=rAk zf-MetACti>W=a_EH2wpS#RJk!X_{Opx6nkb91O(YX(JBi4z?p3&(2_9WLL9WS)cH! zv=w?h3#~WU(r6xMer0=bGq^tdW3UD5`9Fnt<&^Q4;mY#252t#-$}WNuyG+<3bP{Jt z?e#=`rQym6c9oD<2{SS9H|!R!hWj15?uTHHqtvk~v0R($5qf`J)OGzXeK-X11eo7b z^;!BteVOjlU(xsI`@wRF64uhV!{}&qHSRQc!@xm~GSZBR#$=%BLMUa+jY4pi<3^?N z6^`UD*uLRrv>6NGeZT2_2pa!PbAh=CHs6b|hl?#d-VLkxB#{IK!LB%{)!|^J6l8e~ zRZoS`(eyxCh9rNGPNS#L#W1>>Gwop4D~ykMo9V&c3)xo#)%`Hnj33HRhO{fOOp&uf zgcv1u7l(@XLKYN?ru2wc%9Q3w-%4#@5>Ezm2v%AtZ6Le5C_R)o<xVKlx{|1jfHFN! zc~qGSJKwA1D$A5YWdlz5UFDSWxiZ4ij30(=Fa>gAj=B(<aX!?y^)NhlKyDmT-&c>R zXP^`R42AAK?Exrr6Sc|OlTdoS&uGtTOSJ;cr)_|Sw+oujd(a3@g8p548*ILzZ-nJ` z6lZ=BdR}Lvr!me*H>Mb^&0c1IY~c_y8QKr9usGPY7hoZ%q8r_dzMCEaEoV7A2-m@o zBAL6G?aUsiFICJ9xP02O1Hhh#u*qInb%&wPorZ1y7hDVB++Exg+&r$gaF>uKJSIFL zWC_{ATwxQa{9ECgP%ktHw?OSK(Jh9Eqs6genwTzTh$qCeFj0RK8%3Ao24}nv3SFL* zFBQOyStk`q#SmjZ!NGG&YLr}Zu5sD`n*s~>23vxrD^*DCq;^xYnI+6>?j7zpH(OXO z>=fRFf?XjT5snGJ2pvUU)WifR+DT%vn1T}=D{dA`p-7g&km`(wCP?>4$x@1xD$SNQ z!fL9PF2Dw?mFlEx@DnsZ!AX>p<YYNT&VZ%SQh!gs<ki2`f7N+lD`ry>>>|OHe9Fy- z@$L8_!e}X5-X&)!`xRGZu$5-;2Q`5CKt-pTV9UqxG3<xW^v|J$UxHKWDvs!9{f7P< zsNx?`eM`e*w1MBJBiMF#m@0jZ0iY4q5DnEZjk}C{@b}^BgRNAA@#L>W;JZ&r`2QYt zgnAz&)PwMUO#oU=hDGp{It!@v47_2B)#ue0;B;B7`qY=zjWE8p!Tfpy40gZzj(Qj- z82%)n>j=hq10JMfbUHH$I$;i6aLeF)c$L|~R4^YhC*XJZmigYx@a$mr8TL8009f!X z_`Zv4%~9O*Tq(DQJHlP!YPs*Y=6n?2mG8;x{Am6`K8>Hl=kqK1wXlay@Td7I{!hLm z#5g6$P%THmdpJ{A2rPL)Tn(9U3>N>dQji>`ELApPswcG5+Gu^3en0m7al`wK@sH67 zo``AS0?(UUVEtE^H;4>_4(N6*0Ps)@?3Hm;G_#0#k!j9$hr2SE`<DBj-z3Dsn3yTf zf#J1OTq&*-H{pSAi2EVye}Y|+2wQrVbX-c7GnE3U;TM!|EF-sr%D|{iR@2mMuewNG zqOQa?9#`EsDX($O*i0Tyxh;V)0a9QUwT-H!w=-v%pYZtE*qIjmWIhizPAB12;Va>$ zFjFiMzY}*!cgi{PDftOF8wRPd+Hm+s>$Mb!?_#}D$CwFj*GYiE^k_IEv+3ucH+i?w z`*B8R>9));m>3(G-OvX=hkvposPkbsUe>a&vLC?fcNg50KCTE4e}nrB&dML)c=?-a z2}B)_i5%s>6|RfTBo(;-igW__egmWyD&HYT$=&4#<)w0|d|3WW{!Xr!f0O@~<CO=M ziOLhoY%loPex(X}Zm`-@y%U_P5N@(it(!JLONW~*Q=0~rBwH&2x3AJ)hKt5DH<^Ev z9ZGS#b^=U*tXx6ur4Cbt^j>&;V;Ks*uLI0gCX&_JdxYnqA-peCgLC{TcyUDA#Sg?P zSbh!SU}?JKoe%4#O!`H72<rDNsG_r!dCE2=T#Z)0QG>MBc>Hp$M61+3hyV8uJxcGc zKLHU`r?)erKvI2-frbJ?nryrd5&M?$ws8p7|A!DZ5#WwFz@^Xqx<k6#;xo;m)}>Q( zsQ*yQr~;_9J-yiezu^>KiH+~U4rCMAk?d?Xj9Uwwj|Hxu5e-=JUTHa8Z{JGYWCQBs z_rT>z&}uF#H<ebf4km-+zoUK#Q=RB~j7I6}_2b|O--8Qu0@WwLK`{w(aE<Y*@ebiL zS#DP`z_Y+BZzXjHq!|N#{Q~_qFyRN726r+EOcFB&hUWs{d{>y>BcPn+uq)XL_D6Oi zcbGrVUxBP|4JJKYcv$!W40*ITRh$JX_yX3=UD8bH9VuAu0im`4C*MMef-yP@4(j6y zuO-8IwFI6OT2Ilx^6GcNjP3wo!ok=1FucH){-5JN+i;NHR47`nP+w7XR4<yMdHOym zkUqME{*b<io$Cf)=X@}h4PYr}Kp(HO``J_MZaAmU!Ji&23=l>MD}_?1?OzIeVJlx3 z{}h``9yq(ArT*}act4O%!8!6Zcyx}u6JD%3`3{KMnNS;#!1U?{GEyNCKLTS7GTK7k zai(NyW`db$CPDJ05JW6+yQ%=zQDxLylp8wk5IT?koc@;ng&u)joP_DEVfwNhb}^M* z%C3PPb(p=t{=<5>C@&{NtACa&<UZp5<lKBOzJ~un_)Tagwierqoy8cjw>UtgAbM1Y zp1UD-(#6SQhO|^#2~GDEX$z(w19#lL^8NBdaLVPug1jmBS7^ml?u9#koU%}P4%)(g z<ruia_evM_fO<*&Rds6-nvSrB_aMAlUVX2A7#^)VjTB=h+|R!oUz)CBx20TWK+}DO z%7ZBqM-Q^Jp7FqxD&WaWFr^-YWE?225_=hN-a?$ZEg^N0Zpmpvq~xl1Tb9!%Zab%o zv@~BXSH4kygc9A{`XdWf^mksm9TUflhBmsK*}{ARi#&|&#tvsEu=()$o`M<`#`WMv z!dfZdHghG~4y_C-%0caYxaCf1RoZ#WE$2cu1K|a`n4#=2s9&Sl2iS+ez9zE6xT|1Q zKf^cl8}|1fE|@>XKOj5=q@4&kF-7n`Da;V!!4f`#BjPj=<a6;$@sjwFG)bNUjxa-> zEzgtxBQJtu;xnjPU&2xOjdE4_LHSvE4UX7h2s(^{LiG^LxQVcJuj%!0<loX8VJo?f z5aX;d!F&u6g(u)8nq|)Mhd5%ITjse$ouSTosq@rD>TBu>97I1+)$}}g>K8#&E`_LB z3AA~Xy~fr<D&B&x$Hlq15Tfv>G`B={8_fkZyt%dIZsu3+iuk?a%4%*oqrapsBkc4e zb%Xky`iE*xM}fozT7l9!1f)Kk9tjyRh8{<IAE8s>V4K2z&1PeZvS1uPC;TlGi0w%D zrmVSTEIgq-rv>ZLdV#(Jo^la<?vybE4u{hwT-FuMEu|%sS`4>yBy79Qba!aNZ!jM- zuFB??AE6%nl!Z_6Sv5~x4hFwoEk=N9CsfmNFO1Lb`j7fM#!`YnHU5=72!q;H@4tp) z4gXqL6KTzKfbFU?ON7707NFpP(lG5QZ0n2W21I>YSS}lxYYn?TUeJa0ii>Jt87bqK zg)qpAxYxOx(sbz1`N}KG+k_J)cw1Pr{~6)JaHbpcwy<1UEA5mHNu709dJ9)N`Wz5O zLUWUq1Q=l>)d$pQJw}h!<Meo)(m8ktH9Y|qO_H7rewM0_)zkEJ7%G|Y8)oU*aMzT= zb5;flE7uR|74RG%(@*LL$fB}ZxYE3UBWVL#kj9p=Be@5-c<3>lAPJg~AS4P&LNcuQ zRADT%;dCKG$b>i3uMsa0a)exAFQnT+TSYx7R0>s)bQgpZk}Jo*8)v95sB-BbyiB3G ztH58^ns3iHLcMoGC-Az8TUh3B1{|=*=}+k+%t<DdO=HJ!6Tm_*aX0yY_+`+AkBBG5 z1{l<9wT)T_vpf8`{v&Ci8|k~5`(R4$WNtG5Fz1yaP&}T~@`<Tj(ZWL1*;IecRoTMw z|9npq*)oS&$UGn<$~(Ps8A7h*@<F*mJ|Z83bgQ)fTv-cC`<W)r74u*y?S@KqQv5{} zq#=mh6+xtwqxWU`Dkjte;gy;2Z(db?Q$B-`?yu9jX&K?;U@1O_kkeItC@ex(eG7}B zEn(heT&%=C$!>;P<88y;!!6);L!-ICGs01!Omu@ePBCV|!+{mJT3WkPMSVf%L&&_# zJPYBn4zBo~LL3;#K1ht4vI~yZR7E$QMQHVuam#>Iz~@8A282;LP~Q$y-%;%l2X!%X z5X^j^8weHlHQq8@ykaI|F<D|ZR_ast!N9^@R7+PBjLzTL4O}e09~^5q;^A+L$01z5 zgSWSp)Jf_m$<i?CA!!P%$EDIsa9+O+Me_^kJLz|XX*$XM5TqLhi7*B1Ybk;>+vT_A z<MJ0!z@n9bilGcs?o*~i+40U*o(DOsgn&4t{HY9AQ`9FBUYQG(VjaS>WpKnERX?{v zDK4!oqL=ZATMX55v?9bv-qotL%kTuYg<jMTmf}6YdM~#8B^c(1^z$&zZ|Uug{s=o0 zn{fk_kN1pP<9kF!+L^uKH&V?6FNEkQ$o)s*YMF(=Yc3o~YoOt6g)eiz`2ixIRdB$3 z3-|g>D?Zqg#AID9sW2)Ej+B1XAWDIca0Hb?rNL`5%kp+ErB);CUPA4n_G9ahgUz0Y zgZfA6S8&1*I)d&D^K<|-2?Lzan?gSX|IHInhZlf%t$=E=2~Na42t<4cm;C2+4g6Hs zVc`ce;b1;pVC4^DSg@eGnGv9rPnqd#HoJtSxFHbYFLE0Zi1>kP<XZ6$^K1Ar{#QOi z=qHp*AHf#9h7inXITISu>+&J!!WR%VZuG*}+fM1O#45b91re;n*z9&%nl^*@ZQzLe zL_4E>1FVjK_hUK~&s_LE*1-2s3Jd0K2<=aF3O<jGh!{7R{}85<($Wf96Ng1Vc$Jc= z(NH)ahX^l%n|>$t9`!K-ntxJj5o<Y3U!%Rh(d`jvDTb5uSIoKtyf}X$vOQ1OExav^ z5+{h0#1-NJ@ipl~=*Vt46x#eyc_dsF&m#O@Enh?ssk72c(UgY}-CGC!?urtkc2fJR zlq#tk2??aPwCJ8<USfNQaUf-v?3N>87evc3a;#U5LqL&|IawlfpViWGvERW(aqn`3 z+s#Fki}1NTAs?>vLSdayB%ogoC<I_0JYzGo7qwS`XoKP7aTT<*M5_q~^BS`chURG) zGnbe|?qO~!Vruib<=lFRxhVc1-&=fMd`t8ONjs#WN|N@Bc32yMFr1&>??ib09&FuV zu+Kl~h0GzQ8GIIN`Cr6-(zCE{ROKEJ(1XfTuog<-h;fy*v|Ov(sGi(J<VMVe0lS>r z3W4)6mkkfWMRA}MA>R+D{sK5})<StNQ!0=r@UvHG3p0B<4C|#Zr#GuzH5OV~YlPT3 zgP<nB(;s4VHsT<3dGj6wn_LzC^Swy*qu0@;Fx<i*wo;kB%mpT%Wgtb8VX%F~w%|l= z6@P}8g?pgwWWf2h29D@v;t<$B`@u=7#6O@1ca*#{rDxzOSq4u<ozz3_FSD{H&j+*k zMgB`}1)FuZvQIe(%_kJPaBoBh6?LeZuJzV8>AG>8AY5fj*Ia;5STozH4<JF}flqz8 z54p|!MZ|hogx%a$)R;l=aWGtykIARy8lZi9C0gm_Rpu&RE59rMC}HXlI33d9!+IGH z_>Xo$`xY{)UQb7qV?ONS*AZ3>F<YBa@RJXR!S1T@BbLZaXWrv0gpb7Y;tY6vHcRD@ zcAK;n@Tm_&Oym#=KGwIioKr#I8`0EAY7cA)p1y~EjP*`Im}oY;9;#+DcrlB(d-(_W ziTrf_X?`Js=gWB?U(A=n(QpuK_zV6r{~iAef(XF~!FED$F;7@7T!vff3-PiTBgMh{ z^MEwpik=rp>k&738<c+@KA<boV{)952diQ>c<1v#*&-O{uWS3g&|^<)e<9dN!GH4; zEVgFG(-0)JMglfBgrozwzGmuR*)%YJKyI~Q!+?lU(2--={w&1`IPoED60F7tVXV(V z_LPs^1{>%j_H*_sd}=MZj$B{h!adxB++=PJ(9*|k<MzYa_#B$?Z=AO!LL+^7k-rDV z=4AeN=^v?s+y#`mQGONf$d4e9>)=Rlu7tuZ*<Yc6_sOv2P6KzZL*O<lkHIrULhyUw z{W%CX;|2AydPV&OF`^(XMC$}YzLzFJOCGH~Xhqs*Ym33weA=s6{oC5dUWC>!!AsGo zdEo7B5AIe7@v%YQ0uJ}O<>5UDH`!7BV|XymLZn<m*!?^BxO&5rH3U(Okw&T|TpmX< z)=XnA{JpuxGNS;oq#|Q8#PME;oR1KW|H8P8fb9+7kQ+u@8k{}z;M#x1^lnDp)+zJ6 zS#SPEuo-W>rC`g0sV+#d=?(TtA{es~LVJnY00#OI^$C2y-$GdrrrRKz8&6Bf?0Nu- z^diJGwm@?1qfa4#T}}Uk=td8iHXNK0qhJO82P*wWWDf0t=j$}QptqR6;al(EWxKF6 zvfqZY_rW-v%4V^Pk%aRiOvF9xF?dD4WN$$C|BH=<PwZ~)UhW|v>C?y!*v##MckE-F z;?J;if9GQOcq<F$0i?6dgn#U1ev_3g@Gk#3{|$0tTtb)-3sE#kcmS5q9QenUA+v0o z;N1xa(p4Coe+g~Ho?>4y9s%+paI8KE$LeF^6mhmVU-Uu+dr8~?_i75<5a*FGvjm); zQomIn(w>HxYL7_ym-+>`uKqHbBjcfuxf%-j>*l-W8ALuptX#NO2y-OERg*<Mk9g2t zc!}$%U#O8@`hLXqvS8D<fs?p1qTUoEFd8!iO5#ZHwRy~&P@3}CO5}fCg9X$A)?gow zMYysR--REDyr0SZ4E|aEd4w3+37tWbal(DVBaj@k1+TC|2ompuW8$LhQQ~0}KclQb z`boKR1462U+8wHncb0k<nK(mW!(G+7=tJNvb5S9#gFuDWbbGoBeJ}k8{S=aER>H1% zlRg55JDh!-eS<x~evB~mKWsd=3P<r9JpJwXKA@s({wH1)rX%vZ9cdXYk$99UK4poT z1L7xQEgVn3iGPFjhD(uB7pa#QUI-ex9C01r2Y=KVc&Q8JJxHdxA(I4}6>yqdQyxOT z<1lRq<o=uRf<1vKX_(o~a=xdUkDGJNWoD7N3(h8NcS49IK}S*|+l{Ay6RG^;$QoHF zJ}15?t`T1m8QA?;T}p^$_;|C#Ig$r~XAu#r86b{fgbLC@1pxc0Yg8J2nu!KGsf5on zhg-^Zf*W=jkZOSNlkl|kf%Ln4r!re9#-{$Q3{$&-yX9#ggQ)xH^RbsFb;QFV*8LCr z05<kF$Tg}^Tk9S4L9m_3rzCSiEW2$Y{R}kKmGU~|FSrUqEcxD9eNh!PO}kr5(Z-Qk z7yAcVjNF(l5U$Tkr{r^BPq*YAhO5lqmIRN_L$H;W3Gq-oIYS~Eb%lRdI8{{#BlD*Z zRMn9%&=%|70;p44^sYn~1w(LEhFG!tho~_KHCMngCP|uivFU6k`xbkUt!95>MW_&) z;G8}Oo8edFHT35deiDdo3;za!aGEe$*Z^AUBhElLE=C$4iAcnmEy;+ogd>XTG9uxU zn_|p{LvE$9%L@*5-1y00O%vpTnbw3@mhMt&4blyFBmb=m#zSjR$pqxI*29F@%DL)8 zEXVZMbWeB*wn6sSBBauejX}KoJov>NL`m0h8!)v2JdddN(@;f^@F~Jm@PnO3KHT@h z2~5m{s49}Y2c&+`O3UCjPR2QY4wvFwc=XT0w=owvio0-<H?<G-SqPn7H3aiIrr64g z5s)mG@vv^TP|<M7O@T9c2YrTK%UnmYP9N;o90YUP!i`zXj{vh-jR@E}@pYuJhD*Jq z3B(y4fsdXO`|}qzP3Wt<u8)HUV5RvIbpP#0DL4(r(aM#Eel!@zD8xjkP)n&w1YDcZ z-RV0KMjlT8&D@E=WGVY0GD2z*9dC!V{tUw`6c*KM;y%QJ+QK$EDpg89NHgW3@Q0}& z^z)D)E()Ik$JiX@eH|vj)ASlT6-?tlkml=z{csjGf^kUV<Kh$Iw~8ByGmBsg9Z_Ro zSe}BAZi5iY{l-JcewbuD0jklVnmrCT#3Dow-@)Y1m|sDfSTTeIe1{qjilVwv8Hj*i zW)`uj{JVUi{0=<f|H$3E%6NFd*FcbVhhjAuqO@9NGy~#tGE&g?Kq;-%F2Y5(5$?xd z5ti-(?dK`;KS0%Wu#qrw3O-;Cft7(IqbZOV3EVhtKYs{8-Q$RioaOHax1Wq<l_B@9 z7rci=p<jg@vAyDl;y+?*$r~x@2%1kpplrQ#3@+xD(98wsfP<msPmre}(Ri-BP|lT? z$py%jEs{6G_}&GR{QwO1qtFh{SXMwSoYM8Mgd35P9HO*VB9+ccjM4{8mr*2`n~AWH zQ<O1E8iJUaFg&x7+(I$}^S#LTS%+9=2@*-mELHP;cq&gJB5+=*fiZE-$_e}%hY+ep zfM-V|N)U$w;h=~n!1tYuT<4?6jQL9aQzbcmGtK2>SJJU70Q;y>Ok1`!vZV1N2j8y; zcm~eCVCgPtF_>4d>>UDa_g!QzPepX5EmY9?2$|NZZGk8=Vd0+9n(2)GC{n23hc(;N z7!B2IkMT7;!9$=zY$gmB{$G5w93UK~=mMygUsG-2Tw4Yo>0R*r5+2eLirRPxv7PKC zHk^~-%v_F)s1``;o9gA)@mKi-;T5RKVGz16i0_KOie03U(h?-y+>{0(*L#EfyF5gB zLHP(;vIuqS6{uM^z-osfF0xTOq5Z1G=p*!}p^~3O<gcf3FZ7@-a76rW#G3b+^UYVy zN@6>Md*X}!0DVAD3*h@d1B=+(ffkXGwuSzkzLR+v31%Uz3D?NW2*&-!_C}ufBCe9_ z3tjjutU?*6v<4GZ#bxl5dLXt6U=@y*--KHs5+0EC$~$UXeFk=`0=v}_tamXKuc78X z^6)Zz#T}qOwUPRix()~5!=SoPya=7^$j^Tr!N9KY+Lp1uu>D{{y~KSA2|pN8{WG|k z`@sX|MF{;Y;=Vf6k@s+dL#5}X_u%c2;Nds|)awDobPf!wPmn{}3u(6V)FSnJwFfdL z{)2FKFMX!IRX?NuXe66Y`UBP#gaNU5XAL?@DKhkepv^sq9G-J@1pHZZ;Jx%C(PpF^ z9$=5MXVBMGk5%}>FMC*T3^EAf%=mu;0{(D7Ds;<qBtB*$pqOQ5LpCo!7%11w1HBf3 zJ(QTG=1#K=GpIm{K_$E!)n<)Zi<J3mP(d3^lFJ)P5+ji776~6mG}O>oDh}R_bTE)< znCeMz!D{M42r>~G;BjsAy?5Eusrdq^D7n7Nmpxs)$LN!E6;lm^@D_Nniw%Lv5CM}R z8Ui8?xf~RnUmBYLqahiuTx7w2F_-l_-l}95zVM)do#fK_*oh*9S#~0*b`W|G#-uMG zntzQZ9zQn|26ZhO!M1p4xEhlPEjN`(gByQZdnOxUqg*DRDP)Q)x8PppAmdx`wdY>1 zBXl2zOo(WNH)7!vh(~~f1HW}f*GW*n$u+h>%n@_p3d~2+axsFPfv9`Acn|^JlVT+d z+G_EFSOX2KPP~RxfWSuYHOuYIK4yAPVz)2+*M2t=<ctY*9V9RA!#=!y-{X<?!6A!I zqY{vjo&<Bie-fG2S!BcCv;aad7Xgxd1oR5wbt;9IrHm@44pJ4=5$m+7a9%a=K-Gmn zpQ;a>Sr=~tok%Cq$uJ;NL4s*?I-Nmh!VPPkB|=E~bO8=w9gd+C$54iYD92G$;3z6_ z7}YqA8XQPH4&)Y&#Kn+9iNLW$;b3B5dc;GQ<`@ablYj$C!V#t5kjCPTfN97m&2G!g z#X;rZsPb@F1vsvCz9(xvbaR3zvA#{Uo=)Bj=snYH99e(}U@o{=K0@`yYzYMKPLS(f zyf1JNalw<&5UZdcT|mgD_P;_Fk#Ofkb1_J5j)NJ)fdgtt=}P31k=B*Ujpfp~bS?v4 zlWBO{ARE4u1yEoL5E5J076y4SSAwAPPOgmG%awBnefNIrp}h%wBA<l3q7>eV2^If^ z3H1o_-m+6d!lVdj+))S`5Ia3yq9jg|knx^?D1DNhwJ{dSIMa~*o-NIl7Dzc#t|Nt{ z6j6aPX)l}$aHjkI`qtB{pXI=^{8xF%w^;{%Qw$~H7~<EBs!MZg(OQfa3(sAoZ_yb~ z`?&wRD8XEPft~~BUY?$>`{rNq<au3GsO5RCh5daEvh@~Zt4nb!VM+v~YZRnwEE0s` z6%O)MLu?`m>@Nj8*p(h?1%P7EO8wiKXt$;*>B#raRHh*@I2*pGT=*pNl~Uy6mm#`Q z4o^=7;-1Hple&V>o<ngDwE{TQ|G=U&goiT%xWo_-KKkc`x{^RgzU5zgmhGQf=P`o1 zlW9oS1XEzoq~qaP@cHE6!3B`~#rr?{&ND8^T@dO@^Y#A0^MDtl6o*<dtuVwWBjIv( zm4&*>QSFk#aDcHmIt@pbisXuEIH+6*p(3diM^k|W?rNml)Fa0y1TMxHcorq3+@#29 zaJyzBHzFU_MG2JMgNQU#!3lK@+v>)KMq{%$%rRLR>&5<LVQ2CXG%d!ylw&_Cp&QgG z4R|#n0t!eRl#c``9%Jz;LKdQ0d5CBgBbrr?!>@$@qYg<{F60tp;+3J68FK<!;~8X- z?=;Hrb^sPq6Y5$AE_(zfKB1d5m@C<Ebmqdj=_L`JlU5w32JF%eCdq*@Cc+#iF@k)U z;_JW!OThRD%ew{?Zxkafgiibyjnl1tA-h8Mq}IxLinJWAadLt@7W<I}wQd1+Bo`6m zLIl1^?B#+CWb*>oLM-eeheq%w1G|xf-6(>Rb`ZExW4)x|Rzt8GaoC9@#0)ak95vS> zfimpFK|~FXs3)OE5kiQx2_X)#0||y)CUPo>l~|ya;_Zqfh#}NywOSpVKp}{%d1GM~ z21q3pHX0#{A}fqmhR|6JwD((fa5Vyc(F7}PGaavAWWocKg_kf24YJKgjFZUstHxV3 zA!e8vV@v8}OENF8<Z-@P2uXYd5rzx4{I!xiz4f6aeHD=#B6c;4=_gaEVE2T{ldu9| z@O#17!O)RZ?WRdcA&w@@e5}pFv%tKIAv?>#tdAh4g2>KmkeMNt#Pl;}3Cx%<;+%iE zZxIZ+lZ>|#*4#Cw9{#>t5Z+M`*BnH33cN#O5thqf7qEqR4R7bajQ0o-sLqNFN7*bk z9!ypPV<qe~H^54*)SU{h8Uc!W?iNB6F5b<D@R9Hv5muVUXYiT)G(O7<4@M4@(lWS@ zj`5X9uBzrQ@U?s+A1Op3tjgJ;$t2+HT;Obh<&rOkeYX>Nau<XeB<MBT>3I>5?Fm5L zu~v#6k>=SzU?RN_ibrg@T@6_s0>Tb(WiJQnPPN!@?!Wna#bCRYc#EaZN~61F;d2;r z<~3k*DzG^n+4Gse={&g@^j-dMEU^j{?uJ1UZ8J+hLrjDjk_nUs_W?@#nIBjl5W7yf z=EZwj4Z!e5xQJp9!_a`;W8s!g2eoIa*<kb~YAG<BF#40A_iD9X4FR<iRxfD@cvmI~ z87`^7@m%0|5psu0@g`B3Rt`h1PP+z|c8DGZS7#*R>6{fa&aflJL<Z#PzJ>Lk&R)$z z>?Gu4Wa533T)dlDj1W($h1z@Z)@d~y#Ep2%CK{+6Yaw?c@=?-mQ#^B_a1!n3q@`r~ z)t-7NJNWDgcu$C>SW329<HYb{YOmMUUXDT6tfO4C8~Fn<bS%(39yvG~^p$Dw*%2kN zz|v5Pf$Bsjsry$OaRb$f?m^VTu}}>CvLYLb#yY%vc#Nrp3zVp+HI|YZP)}nm1yy3b zDVE-mV{01(;Y*-p5dGrXzsV3GKzE`^5FH{Ds6H1u15p$zxMSQ&SS{5+^bq8y#o#^P zc%Fl{Ku~-EpNr(d68Q5gfZG?4Zc_*6XcS%*qAbi#M4&y}3)IfHqD{r%#+Bg4byntS zBU1U}p{yoa37}&Uw{_wB7$jCp;x2QcAeBHJs=^c-SvMDkca)-`^tdny3dUX@UjTdN z2#9JL#xH_5rU8T!4-!d&vO5iA5D69IAi@P+g6OvpZ;MA@ECGmJ2*fUhwS5g*0MP*w zA?u^97+V5xGsBWWME=yPk-)?_;9v@Zh&zFGZr~aRhMIwFghC_&9)XcqtzSR}TO&eC z(O{vJ5x}-&WWY~@@tE%g!tI2ps<61|1#r<uxCSH4NT3@BM_CeHcpeLM%Y=242Q({n zSTwb;V{TbGH9k&&opDnkR<t%AT66+jz$sv+>Bzm$0Xr?E)`6jxTY7RebpcxPHDFsB z?ac>+VWoN+`E(XsWq*ZM6)BL>)scmkem7bD@Rqylu0IlROo=WG*maFYuri7!Zl` zPlTSBjg!v<S1ZT4AH&HvA~qE!L<%uTu}H;n<l;EWkV;XDXikF{EGz`)ELmrhDlUNO zu~RIEfl+HoTo-f@qJLyUK`aDsIs(qrAVq;AC4>L$#4$C<gy$qebXGxmh*o2vFr<Qg zl&X8dGHSsxBEc>aAq=zemQx9$Kvl@pOo#ech(r<ZNr<_6J<^DQcuT>F5c)5*w1;Cx z6*3Impm`2Qkb&(l1dSho0SWO%dB|&a@HWNZExS~hD#T=*OBF+A5tHNyw)YnNb#X8{ zQX#AIK)&lBsdoNr+ufpLU^b+9L9s+I6@XextYC#3Mr1q;M<Rg&TVDxf-vulu(k30! zrT{Xg0;Jb~O^-(QA|W~ro1Y9HG?6dUKzaobD-{qY*Z5m}41Dz*#7GXpXhe(@;|R(j zMCt@@gAfBEOM&E=3(GH0EP%>$1XdnVcHEX4m;hxb3tD<HlpI1d*AQQg#sLs@kEnV? z%_AxvQSXRqN3^;^FnprT-BO~!+v6<yNy4$rh3<0O!A$@6WQsvVRft8_f_2}5pCt}) zItl4M)AYH}N=iXYRnSR7j0mKI#^43PRJ?hRVG&U=D5%o7V7SZ>P)-!sbSk_7xp-M{ zCk~A09M=e)BzRo;zF!*fN1d|&j~2HZW*rA34%Rg&fxN)I7mU*d%bqY!V$~Ci>?CO6 z7SiPcRFDso=^%ncwRnlN0Rlh7VnXTQfmwJ{BbVO^TDSo2N2nlLi1Q-HXn}PSgbZpx z1`*Ib6Ts=Rfd9q7|4QIL(ZPxSO>}RfcN6`R=-WisUVsh1V6mrouqUGHPy2VviSita z4Nrw2&Ba^0d!ZuMfeOeA@q}SfnlJu){MoI!5SyjiUP~#wrV$|-hoq`(h{jxtHj0o; zRc^7bNVu00@j~V_BO6*@E@FP=(E94Yt8QV>!z@0P0Ut~u_)`h^Qw`xsDIQlNfE!kR z6!=jhUgXKPc+fHU*>6#9FKB~<9+v^yD1=Zu0<${CGN6ed3kb115Jjmi#E6pSMld!G zsk=!aj~v*?g?L5v7*68?6tipAnGlsM1v07tXHp5S6oIoy!8sIwBUM@&775T%f>#4Q zOanEPLF&}w1Sk+e7SO*8yI+qtB_pu=DM0)JAbllvJ_5ND8uXtW2#5-xy9=s&0(L$J zs9ph$#sx%Az@9IFg6_(~=VQPgi0S>mjP5)xzcpqEyE|ZZ@8A79z7*)q!53VxYY`Ux z=fUW&#-gG?^$UPr5m-i*Ma@ap%*%l}gm|-HsT>5q41<}S1}m)${BZ%uvKraTgdFpr zXr*Fa#ZaUuZ7fWJQrOCKK~u<8huTwVaF8%LkS#-81^A>4nE(!}7+kEL8VlJ_Lx;eP wQHA}Fg?e0$SN$aD0R_+ijsfT0kovBAkClJsqU^ul=>IO9|9||g*LQ>dFQp;xY5)KL From ae80da74928c8e13e8547aa0444e9bbc62bab79d Mon Sep 17 00:00:00 2001 From: commy2 <commy-2@gmx.de> Date: Sun, 19 Apr 2015 00:05:54 +0200 Subject: [PATCH 179/257] fix cameras breaking pip scope camera r2t texture, reenable PIP scopes in arsenal --- addons/optics/CfgWeapons.hpp | 10 +++++----- addons/optics/XEH_postInit.sqf | 16 ++++++++++++++++ 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/addons/optics/CfgWeapons.hpp b/addons/optics/CfgWeapons.hpp index 6d61ff98a2..5aa06f41a0 100644 --- a/addons/optics/CfgWeapons.hpp +++ b/addons/optics/CfgWeapons.hpp @@ -98,7 +98,7 @@ class CfgWeapons { class ACE_optic_Hamr_PIP: ACE_optic_Hamr_2D { author = "$STR_ACE_Common_ACETeam"; _generalMacro = "ACE_optic_Hamr_PIP"; - scopeArsenal = 1; + //scopeArsenal = 1; displayName = "$STR_ACE_optic_hamr_pip"; class ItemInfo: ItemInfo { @@ -147,7 +147,7 @@ class CfgWeapons { class ACE_optic_Arco_PIP: ACE_optic_Arco_2D { author = "$STR_ACE_Common_ACETeam"; _generalMacro = "ACE_optic_Arco_PIP"; - scopeArsenal = 1; + //scopeArsenal = 1; displayName = "$STR_ACE_optic_arco_pip"; class ItemInfo: ItemInfo { @@ -197,7 +197,7 @@ class CfgWeapons { author = "$STR_ACE_Common_ACETeam"; _generalMacro = "ACE_optic_MRCO_PIP"; scope = 1; - scopeArsenal = 1; + //scopeArsenal = 1; displayName = "$STR_ACE_optic_valdada_pip"; class ItemInfo: ItemInfo { @@ -239,7 +239,7 @@ class CfgWeapons { class ACE_optic_SOS_PIP: ACE_optic_SOS_2D { author = "$STR_ACE_Common_ACETeam"; _generalMacro = "ACE_optic_SOS_PIP"; - scopeArsenal = 1; + //scopeArsenal = 1; displayName = "$STR_ACE_optic_sos_pip"; class ItemInfo: ItemInfo { @@ -290,7 +290,7 @@ class CfgWeapons { class ACE_optic_LRPS_PIP: ACE_optic_LRPS_2D { author = "$STR_ACE_Common_ACETeam"; _generalMacro = "ACE_optic_LRPS_PIP"; - scopeArsenal = 1; + //scopeArsenal = 1; displayName = "$STR_ACE_optic_lrps_pip"; class ItemInfo: ItemInfo { diff --git a/addons/optics/XEH_postInit.sqf b/addons/optics/XEH_postInit.sqf index cb3918cbc3..7f68aece74 100644 --- a/addons/optics/XEH_postInit.sqf +++ b/addons/optics/XEH_postInit.sqf @@ -22,3 +22,19 @@ if (!hasInterface) exitWith {}; uiNamespace setVariable [QGVAR(RscWeaponInfo2D), _this select 0]; }; }] call EFUNC(common,addEventHandler); + +// camera has to be re-created every time another camera is created. Otherwise r2t is either black or transparent. @todo Add popular custom cameras to the event in ACE_common. +["activeCameraChanged", { + if !(_this select 1) then { + deleteVehicle GVAR(camera); + + // PiP technique by BadBenson + GVAR(camera) = "camera" camCreate positioncameratoworld [0,0,0]; + GVAR(camera) camSetFov 0.7; + GVAR(camera) camSetTarget ACE_player; + GVAR(camera) camCommit 1; + + "ace_optics_rendertarget0" setPiPEffect [2, 1.0, 1.0, 1.0, 0.0, [0.0, 1.0, 0.0, 0.25], [1.0, 0.0, 1.0, 1.0], [0.199, 0.587, 0.114, 0.0]]; + GVAR(camera) cameraEffect ["INTERNAL", "BACK", "ace_optics_rendertarget0"]; + }; +}] call EFUNC(common,addEventHandler); From 560646e1e197ff1ccfb8e9b794d334cc3e8d23fa Mon Sep 17 00:00:00 2001 From: Tachii <zaveruha007@gmail.com> Date: Sun, 19 Apr 2015 01:18:53 +0300 Subject: [PATCH 180/257] Update stringtable.xml --- addons/winddeflection/stringtable.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/winddeflection/stringtable.xml b/addons/winddeflection/stringtable.xml index 8e2e00d96e..2acef3581a 100644 --- a/addons/winddeflection/stringtable.xml +++ b/addons/winddeflection/stringtable.xml @@ -6,7 +6,7 @@ <English>Wind Information</English> <Polish>Informacje o wietrze</Polish> <Spanish>Información del viento</Spanish> - <Russian>Ветер</Russian> + <Russian>Информация о ветре</Russian> <Czech>Informace o větru</Czech> <French>Vent</French> <German>Windinformationen</German> @@ -39,7 +39,7 @@ <English>Weather Information</English> <Polish>Informacje o pogodzie</Polish> <Spanish>Información Meteorológica</Spanish> - <Russian>Погода</Russian> + <Russian>Информация о погоде</Russian> <Czech>Informace o počasí</Czech> <French>Météo</French> <German>Wetterinformationen</German> From a9d38f5970f423795f90cc5e6f34d49d73a2b3e8 Mon Sep 17 00:00:00 2001 From: Tachii <zaveruha007@gmail.com> Date: Sun, 19 Apr 2015 01:19:32 +0300 Subject: [PATCH 181/257] Update stringtable.xml --- addons/weather/stringtable.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/weather/stringtable.xml b/addons/weather/stringtable.xml index 7d1e1a1a2c..2ee6618756 100644 --- a/addons/weather/stringtable.xml +++ b/addons/weather/stringtable.xml @@ -4,10 +4,10 @@ <Key ID="STR_ACE_Weather_WindInfoKey"> <English>Show Wind Info</English> <Polish>Pokaż inf. o wietrze</Polish> - <Russian>Показать информацию о погоде</Russian> + <Russian>Показать информацию о ветре</Russian> <French>Afficher information sur le vent</French> <Spanish>Mostrar información del viento</Spanish> <Italian>Mostra informazioni sul vento</Italian> </Key> </Package> -</Project> \ No newline at end of file +</Project> From 8f9796f4886702bc8ffbc74ca2a03ca9fe7ab984 Mon Sep 17 00:00:00 2001 From: Tachii <zaveruha007@gmail.com> Date: Sun, 19 Apr 2015 01:23:37 +0300 Subject: [PATCH 182/257] Update stringtable.xml --- addons/weaponselect/stringtable.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/weaponselect/stringtable.xml b/addons/weaponselect/stringtable.xml index 08bb510f6c..823ce97745 100644 --- a/addons/weaponselect/stringtable.xml +++ b/addons/weaponselect/stringtable.xml @@ -41,7 +41,7 @@ <Spanish>Seleccionar fusil</Spanish> <Polish>Wybierz karabin</Polish> <Czech>Zvolit hlavní zbraň</Czech> - <Russian>Выбрать автомат</Russian> + <Russian>Выбрать винтовку</Russian> <French>Sélectionner Fusil</French> <Hungarian>Puska Kiválasztása</Hungarian> <Portuguese>Selecionar Rifle</Portuguese> @@ -246,7 +246,7 @@ <Czech>Už nejsou žádné ostatní granáty</Czech> <Portuguese>Não há outras granadas restantes</Portuguese> <Italian>Nessun'altra granata rimanente.</Italian> - <Russian>Летальные гранаты закончились</Russian> + <Russian>Нелетальные гранаты закончились</Russian> </Key> <Key ID="STR_ACE_WeaponSelect_NoGrenadeSelected"> <English>No grenade selected</English> @@ -272,4 +272,4 @@ <Italian>Lancia fumogeno</Italian> </Key> </Package> -</Project> \ No newline at end of file +</Project> From dc2c3e246e9662b10de6845aec3e68d21df7b8a9 Mon Sep 17 00:00:00 2001 From: Tachii <zaveruha007@gmail.com> Date: Sun, 19 Apr 2015 01:25:30 +0300 Subject: [PATCH 183/257] Update stringtable.xml --- addons/dragging/stringtable.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/dragging/stringtable.xml b/addons/dragging/stringtable.xml index 1c704796f8..b02979e279 100644 --- a/addons/dragging/stringtable.xml +++ b/addons/dragging/stringtable.xml @@ -26,14 +26,14 @@ <Hungarian>Elengedés</Hungarian> </Key> <Key ID="STR_ACE_Dragging_UnableToDrag"> - <English>Item to heavy</English> + <English>Item too heavy</English> <German>Gegenstand ist zu schwer</German> <Spanish>Articulo demasiado pesado</Spanish> <Polish>Przedmiot zbyt ciężki</Polish> <French>Objet trop lourd</French> <Portuguese>Não é possível carregar o item devido a seu peso</Portuguese> <Italian>Non è possibile trascinare l'oggetto a causa del suo peso</Italian> - <Russian>Слишком тяжело</Russian> + <Russian>Предмет слишком тяжёлый</Russian> <Czech>Moc težké</Czech> <Hungarian>Az objektum túl nehéz</Hungarian> </Key> From e62a476a9098f5c134e6d845cfa66e42567453bb Mon Sep 17 00:00:00 2001 From: Tachii <zaveruha007@gmail.com> Date: Sun, 19 Apr 2015 01:37:08 +0300 Subject: [PATCH 184/257] Update stringtable.xml --- addons/explosives/stringtable.xml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml index 9d4937ed65..6898274307 100644 --- a/addons/explosives/stringtable.xml +++ b/addons/explosives/stringtable.xml @@ -203,7 +203,7 @@ <Italian>Consente la disattivazione degli ordigni esplosivi</Italian> <Hungarian>Robbanóanyagok hatástalanítását teszi lehetővé</Hungarian> <Portuguese>Permite o desarme de explosivos</Portuguese> - <Russian>Позволяет обезвреживать ВУ</Russian> + <Russian>Позволяет обезвреживать взрывчатку</Russian> </Key> <Key ID="STR_ACE_Explosives_Phone_AddToSpeedDial"> <English>Add to Speed Dial</English> @@ -215,7 +215,7 @@ <Italian>Aggiungi alla selezione rapida</Italian> <Hungarian>Hozzáadás a gyorstárcsázóhoz</Hungarian> <Portuguese>Adicionar à ligação rápida</Portuguese> - <Russian>Добавить в ускоренный набор</Russian> + <Russian>Добавить в быстрый вызов</Russian> </Key> <Key ID="STR_ACE_Explosives_Clear"> <English>Clear</English> @@ -299,7 +299,7 @@ <Italian>Menù di collocamento</Italian> <Hungarian>Elhelyezési menü</Hungarian> <Portuguese>Menu de posicionamento</Portuguese> - <Russian>Меню детонации</Russian> + <Russian>Меню установки</Russian> </Key> <Key ID="STR_ACE_Explosives_Defuse"> <English>Defuse</English> @@ -395,7 +395,7 @@ <Italian>Piastra a Pressione</Italian> <Hungarian>Nyomólap</Hungarian> <Portuguese>Placa de pressão</Portuguese> - <Russian>Давление</Russian> + <Russian>Нажимная плита</Russian> </Key> <Key ID="STR_ACE_Explosives_TripWire"> <English>Tripwire</English> @@ -443,7 +443,7 @@ <Italian>Sensore IR (Attacco laterale)</Italian> <Hungarian>Infravörös szenzor (Side Attack)</Hungarian> <Portuguese>Sensor infravermelho (ataque lateral)</Portuguese> - <Russian>ИК (детонация вбок)</Russian> + <Russian>ИК сенсор (детонация вбок)</Russian> </Key> <Key ID="STR_ACE_Explosives_SLAME_Magnetic"> <English>Magnetic Influence Sensor (Bottom Attack)</English> @@ -455,7 +455,7 @@ <Italian>Sensore Magnetico di Prossimità (Attacco inferiore)</Italian> <Hungarian>Mágneses mező érzékelő (Bottom Attack)</Hungarian> <Portuguese>Influência magnética (ataque inferior)</Portuguese> - <Russian>Магнитный (детонация вверх)</Russian> + <Russian>Магнитный сенсор (детонация вверх)</Russian> </Key> <Key ID="STR_ACE_Explosives_NoExplosivesAvailable"> <English>No explosives on trigger.</English> @@ -467,7 +467,7 @@ <Hungarian>Nincs robbanóanyag a gyújtóeszközhöz kötve.</Hungarian> <Polish>Brak ładunków na zapalnik.</Polish> <Portuguese>Nenhum explosivo no gatilho.</Portuguese> - <Russian>Нет доступных ВУ для взрывателя.</Russian> + <Russian>Взрыватель не подсоединён к взрывчатке</Russian> </Key> <Key ID="STR_ACE_Explosives_DeadManSwitch_displayName"> <English>Dead Man's Switch</English> @@ -477,7 +477,7 @@ <Polish>Czuwak</Polish> <Spanish>Detonador de hombre muerto</Spanish> <Hungarian>Dead Man's Switch</Hungarian> - <Russian>Ловушка мертвеца</Russian> + <Russian>Кнопка мертвеца</Russian> </Key> <Key ID="STR_ACE_Explosives_DeadManSwitch_description"> <English>Used to remotely trigger explosives when released.</English> @@ -502,4 +502,4 @@ <Italian>Raccogli</Italian> </Key> </Package> -</Project> \ No newline at end of file +</Project> From 5558a6491d1ff25c644d3357c302d0598d1c08e0 Mon Sep 17 00:00:00 2001 From: commy2 <commy-2@gmx.de> Date: Sun, 19 Apr 2015 00:40:29 +0200 Subject: [PATCH 185/257] remove weapon select in favor of the new controls from bi --- addons/weaponselect/XEH_postInit.sqf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/weaponselect/XEH_postInit.sqf b/addons/weaponselect/XEH_postInit.sqf index 6dc648d54c..ae6cfafb9d 100644 --- a/addons/weaponselect/XEH_postInit.sqf +++ b/addons/weaponselect/XEH_postInit.sqf @@ -4,7 +4,7 @@ if !(hasInterface) exitWith {}; // Add keybinds -["ACE3", QGVAR(SelectPistol), localize "STR_ACE_WeaponSelect_SelectPistol", +/*["ACE3", QGVAR(SelectPistol), localize "STR_ACE_WeaponSelect_SelectPistol", { // Conditions: canInteract if !([ACE_player, ACE_player, ["isNotEscorting"]] call EFUNC(common,canInteractWith)) exitWith {false}; @@ -72,7 +72,7 @@ if !(hasInterface) exitWith {}; true }, {false}, -[6, [false, false, false]], false] call cba_fnc_addKeybind; //5 Key +[6, [false, false, false]], false] call cba_fnc_addKeybind; //5 Key*/ ["ACE3", QGVAR(SelectGrenadeFrag), localize "STR_ACE_WeaponSelect_SelectGrenadeFrag", { @@ -144,7 +144,7 @@ if !(hasInterface) exitWith {}; {false}, [2, [false, false, false]], false] call cba_fnc_addKeybind; //1 Key -["ACE3", QGVAR(SelectMainGun), localize "STR_ACE_WeaponSelect_SelectMainGun", +/*["ACE3", QGVAR(SelectMainGun), localize "STR_ACE_WeaponSelect_SelectMainGun", { // Conditions: canInteract if !([ACE_player, ACE_player, []] call EFUNC(common,canInteractWith)) exitWith {false}; @@ -184,7 +184,7 @@ if !(hasInterface) exitWith {}; true }, {false}, -[6, [false, false, false]], false] call cba_fnc_addKeybind; //5 Key +[6, [false, false, false]], false] call cba_fnc_addKeybind; //5 Key*/ ["ACE3", QGVAR(FireSmokeLauncher), localize "STR_ACE_WeaponSelect_FireSmokeLauncher", { From 2fe7122b3e4d58c4de479b83e65b214b810fe8d2 Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Sat, 18 Apr 2015 15:44:07 -0700 Subject: [PATCH 186/257] Disable handoff until completed. --- .../functions/fnc_handleHandoff.sqf | 2 +- .../missileguidance/functions/fnc_onFired.sqf | 17 ++++++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/addons/missileguidance/functions/fnc_handleHandoff.sqf b/addons/missileguidance/functions/fnc_handleHandoff.sqf index 2f1dfac8e7..07a0e116b3 100644 --- a/addons/missileguidance/functions/fnc_handleHandoff.sqf +++ b/addons/missileguidance/functions/fnc_handleHandoff.sqf @@ -1,6 +1,6 @@ #include "script_component.hpp" PARAMS_2(_target,_args); -if(!local _target) exitWith {}; +if(isNil "_target" || { objNull _target} || {!local _target} ) exitWith { false }; [FUNC(guidancePFH), 0, _args] call cba_fnc_addPerFrameHandler; \ No newline at end of file diff --git a/addons/missileguidance/functions/fnc_onFired.sqf b/addons/missileguidance/functions/fnc_onFired.sqf index 071b2bbf99..7ada1d4442 100644 --- a/addons/missileguidance/functions/fnc_onFired.sqf +++ b/addons/missileguidance/functions/fnc_onFired.sqf @@ -86,13 +86,20 @@ _args = [_this, // Laser code needs to give us a shooter for LOBL, or the seeker unit needs to be able to shift locality // Based on its homing laser // Lasers need to be handled in a special LOAL/LOBL case -_guidingUnit = ACE_player; -if(local _guidingUnit) then { +//if(isPlayer _shooter) then { +// _guidingUnit = ACE_player; +// +// if(local _guidingUnit) then { +// [FUNC(guidancePFH), 0, _args ] call cba_fnc_addPerFrameHandler; +// } else { +// [QGVAR(handoff), [_guidingUnit, _args] ] call FUNC(doHandoff); +// }; +//} else { [FUNC(guidancePFH), 0, _args ] call cba_fnc_addPerFrameHandler; -} else { - [QGVAR(handoff), [_guidingUnit, _args] ] call FUNC(doHandoff); -}; +//}; + + /* Clears locking settings (vehicle _shooter) setVariable [QGVAR(target), nil]; (vehicle _shooter) setVariable [QGVAR(seekerType), nil]; From fe92110b4d7be5559f2f48a35076247e5a8cae53 Mon Sep 17 00:00:00 2001 From: ViperMaul <vipermaul@gmail.com> Date: Sat, 18 Apr 2015 19:16:12 -0700 Subject: [PATCH 187/257] Make sure you build missing files. Even if cache says the source files has not changed. #735 --- tools/make.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/tools/make.py b/tools/make.py index 380c29faa7..ce5b770383 100644 --- a/tools/make.py +++ b/tools/make.py @@ -597,7 +597,8 @@ See the make.cfg file for additional build options. # For each module, prep files and then build. for module in modules: print_green("\nMaking " + module + "-"*max(1, (60-len(module)))) - + missing = False + # Cache check if module in cache: old_sha = cache[module] @@ -610,10 +611,15 @@ See the make.cfg file for additional build options. # Hash the module new_sha = get_directory_hash(os.path.join(module_root, module)) + + # Is the pbo file missing? + missing = not os.path.isfile(os.path.join(release_dir, project, "addons", "ace_{}.pbo".format(module))) + if missing: + print("ace_{}.pbo".format(module) + " is missing. Building...") # Check if it needs rebuilt # print ("Hash:", new_sha) - if old_sha == new_sha: + if old_sha == new_sha and not missing: if not force_build: print("Module has not changed.") # Skip everything else From 54c5070569fe3d49b5f87b66be04f7badcbc6797 Mon Sep 17 00:00:00 2001 From: PabstMirror <elephantisaterriblemascot@gmail.com> Date: Sat, 18 Apr 2015 22:23:19 -0500 Subject: [PATCH 188/257] isNull --- addons/missileguidance/functions/fnc_handleHandoff.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/missileguidance/functions/fnc_handleHandoff.sqf b/addons/missileguidance/functions/fnc_handleHandoff.sqf index 07a0e116b3..017a9c0160 100644 --- a/addons/missileguidance/functions/fnc_handleHandoff.sqf +++ b/addons/missileguidance/functions/fnc_handleHandoff.sqf @@ -1,6 +1,6 @@ #include "script_component.hpp" PARAMS_2(_target,_args); -if(isNil "_target" || { objNull _target} || {!local _target} ) exitWith { false }; +if(isNil "_target" || {isNull _target} || {!local _target} ) exitWith { false }; [FUNC(guidancePFH), 0, _args] call cba_fnc_addPerFrameHandler; \ No newline at end of file From 9cb27c8fb2f9aab2ca57b0b9e4757d9d3c68a488 Mon Sep 17 00:00:00 2001 From: commy2 <commy-2@gmx.de> Date: Sun, 19 Apr 2015 07:08:57 +0200 Subject: [PATCH 189/257] fix: error when getting killed with FF-messages module, fix #745 --- addons/respawn/functions/fnc_handleKilled.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/respawn/functions/fnc_handleKilled.sqf b/addons/respawn/functions/fnc_handleKilled.sqf index c3ab0aebf3..199495d75d 100644 --- a/addons/respawn/functions/fnc_handleKilled.sqf +++ b/addons/respawn/functions/fnc_handleKilled.sqf @@ -29,5 +29,5 @@ if (GVAR(SavePreDeathGear)) then { }; if (missionNamespace getVariable [QGVAR(showFriendlyFireMessage), false]) then { - [_this, FUNC(showFriendlyFireMessage), 2] call EFUNC(common,execRemoteFnc); + [_this, QUOTE(DFUNC(showFriendlyFireMessage)), 2] call EFUNC(common,execRemoteFnc); }; From 45fd90c6e05fc9a9d54a28683c0ace8b6c2c1e39 Mon Sep 17 00:00:00 2001 From: ruPaladin <happyworm24@rambler.ru> Date: Sun, 19 Apr 2015 10:49:06 +0300 Subject: [PATCH 190/257] Rus translation (medical) --- addons/medical/stringtable.xml | 52 +++++++++++++++++----------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 3259fd5af7..9645aa2289 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -378,7 +378,7 @@ <English>Give Blood IV (1000ml)</English> <German>Bluttransfusion IV (1000ml)</German> <Spanish>Dar Sangre IV (1000ml)</Spanish> - <Russian>Дать кровь для в/в вливания (1000 мл)</Russian> + <Russian>Перелить пакет крови (1000 мл)</Russian> <Polish>Podaj krew IV (1000ml)</Polish> <French>Administrer du sang en IV (1000ml)</French> <Czech>Podat krev. transfúzi (1000ml)</Czech> @@ -389,7 +389,7 @@ <English>Give Blood IV (500ml)</English> <German>Bluttransfusion IV (500ml)</German> <Spanish>Dar Sangre IV (500ml)</Spanish> - <Russian>Дать кровь для в/в вливания (500 мл)</Russian> + <Russian>Перелить пакет крови (500 мл)</Russian> <Polish>Podaj krew IV (500ml)</Polish> <French>Administrer du sang en IV (500ml)</French> <Czech>Podat krev. transfúzi (500ml) </Czech> @@ -400,7 +400,7 @@ <English>Give Blood IV (250ml)</English> <German>Bluttransfusion IV (250ml)</German> <Spanish>Dar Sangre IV (250ml)</Spanish> - <Russian>Дать кровь для в/в вливания (250 мл)</Russian> + <Russian>Перелить пакет крови (250 мл)</Russian> <Polish>Podaj krew IV (250ml)</Polish> <French>Administrer du sang en IV (250ml)</French> <Czech>Podat krev. transfúzi (250ml)</Czech> @@ -411,7 +411,7 @@ <English>Give Plasma IV (1000ml)</English> <German>Plasmatransfusion IV (1000ml)</German> <Spanish>Dar Plasma IV (1000ml)</Spanish> - <Russian>Дать плазму для в/в вливания (1000 мл)</Russian> + <Russian>Перелить пакет плазмы (1000 мл)</Russian> <Polish>Podaj osocze IV (1000ml)</Polish> <French>Administrer du plasma en IV (1000ml)</French> <Czech>Podat plazmu (1000ml)</Czech> @@ -422,7 +422,7 @@ <English>Give Plasma IV (500ml)</English> <German>Plasmatransfusion IV (500ml)</German> <Spanish>Dar Plasma IV (500ml)</Spanish> - <Russian>Дать плазму для в/в вливания (500 мл)</Russian> + <Russian>Перелить пакет плазмы (500 мл)</Russian> <Polish>Podaj osocze IV (500ml)</Polish> <French>Administrer du plasma en IV (500ml)</French> <Czech>Podat plazmu (500ml)</Czech> @@ -433,7 +433,7 @@ <English>Give Plasma IV (250ml)</English> <German>Plasmatransfusion IV (250ml)</German> <Spanish>Dar Plasma IV (250ml)</Spanish> - <Russian>Дать плазму для в/в вливания (250 мл)</Russian> + <Russian>Перелить пакет плазмы (250 мл)</Russian> <Polish>Podaj osocze IV (250ml)</Polish> <French>Administrer du plasma en IV (250ml)</French> <Czech>Podat plazmu (250ml)</Czech> @@ -444,7 +444,7 @@ <English>Give Saline IV (1000ml)</English> <German>Kochsaltzlösung IV (1000ml)</German> <Spanish>Dar Salino IV (1000ml)</Spanish> - <Russian>Дать физраствор для в/в вливания (1000 мл)</Russian> + <Russian>Перелить пакет физраствора (1000 мл)</Russian> <Polish>Podaj sól fizjologiczną IV (1000ml)</Polish> <French>Administrer de la solution saline en IV (1000ml)</French> <Czech>Podaz fyz. roztok (1000ml)</Czech> @@ -455,7 +455,7 @@ <English>Give Saline IV (500ml)</English> <German>Kochsaltzlösung IV (500ml)</German> <Spanish>Dar Salino IV (500ml)</Spanish> - <Russian>Дать физраствор для в/в вливания (500 мл)</Russian> + <Russian>Перелить пакет физраствора (500 мл)</Russian> <Polish>Podaj sól fizjologiczną IV (500ml)</Polish> <French>Administrer de la solution saline en IV (500ml)</French> <Czech>Podaz fyz. roztok (500ml)</Czech> @@ -466,7 +466,7 @@ <English>Give Saline IV (250ml)</English> <German>Kochsaltzlösung IV (250ml)</German> <Spanish>Dar Salino IV (250ml)</Spanish> - <Russian>Дать физраствор для в/в вливания (250 мл)</Russian> + <Russian>Перелить пакет физраствора (250 мл)</Russian> <Polish>Podaj sól fizjologiczną IV (250ml)</Polish> <French>Administrer de la solution saline en IV (250ml)</French> <Czech>Podaz fyz. roztok (250ml)</Czech> @@ -477,7 +477,7 @@ <English>Minor</English> <German>Gering</German> <Spanish>Menor</Spanish> - <Russian>Незначительные травмы</Russian> + <Russian>Легкие ранения</Russian> <Polish>Normalny</Polish> <French>Léger</French> <Czech>Minimální</Czech> @@ -487,7 +487,7 @@ <Key ID="STR_ACE_MEDICAL_TRIAGE_STATUS_DELAYED"> <English>Delayed</English> <Spanish>Retrasado</Spanish> - <Russian>Груз 300</Russian> + <Russian>Средние ранения</Russian> <Polish>Opóźniony</Polish> <French>Différé</French> <German>Verzögert</German> @@ -498,7 +498,7 @@ <Key ID="STR_ACE_MEDICAL_TRIAGE_STATUS_IMMEDIATE"> <English>Immediate</English> <Spanish>Inmediato</Spanish> - <Russian>Помощь отложена</Russian> + <Russian>Тяжелые ранения</Russian> <Polish>Natychmiastowy</Polish> <French>Urgence Immédiate</French> <German>Sofort</German> @@ -509,7 +509,7 @@ <Key ID="STR_ACE_MEDICAL_TRIAGE_STATUS_DECEASED"> <English>Deceased</English> <Spanish>Fallecido</Spanish> - <Russian>Груз 200</Russian> + <Russian>Труп</Russian> <Polish>Nie żyje</Polish> <French>Décédé</French> <German>Verstorben</German> @@ -520,7 +520,7 @@ <Key ID="STR_ACE_MEDICAL_TRIAGE_STATUS_NONE"> <English>None</English> <Spanish>Ninguno</Spanish> - <Russian>Нет</Russian> + <Russian>Отсутствует</Russian> <Polish>Brak</Polish> <French>Aucun</French> <German>Keine</German> @@ -1529,7 +1529,7 @@ <English>Heavily wounded</English> <German>Schwer verwundet:</German> <Polish>Ciężko ranny</Polish> - <Russian>Сильно ранен</Russian> + <Russian>Сильные ранения</Russian> <Italian>Gravemente ferito</Italian> <Spanish>Gravemente herido</Spanish> <French>Lourdement blessé</French> @@ -1538,7 +1538,7 @@ <English>Lightly wounded</English> <German>Leicht verwundet:</German> <Polish>Lekko ranny</Polish> - <Russian>Легко ранен</Russian> + <Russian>Легкие ранения</Russian> <Italian>Leggermente ferito</Italian> <Spanish>Levemente herido</Spanish> <French>Légèrement blessé</French> @@ -1547,7 +1547,7 @@ <English>Very lightly wounded</English> <German>Sehr leicht verwundet:</German> <Polish>B. lekko ranny</Polish> - <Russian>Очень легко ранен</Russian> + <Russian>Царапины</Russian> <Italian>Ferito lievemente</Italian> <Spanish>Muy levemente herido</Spanish> <French>Très légèrement blessé</French> @@ -1556,7 +1556,7 @@ <English>Head</English> <German>Kopf</German> <Polish>Głowa</Polish> - <Russian>Голова</Russian> + <Russian>Головы</Russian> <Italian>Testa</Italian> <Spanish>Cabeza</Spanish> <French>Tête</French> @@ -1565,7 +1565,7 @@ <English>Torso</English> <German>Torso</German> <Polish>Tors</Polish> - <Russian>Торс</Russian> + <Russian>Торса</Russian> <Italian>Torso</Italian> <Spanish>Torso</Spanish> <French>Torse</French> @@ -1574,7 +1574,7 @@ <English>Left Arm</English> <German>Linker Arm</German> <Polish>Lewe ramię</Polish> - <Russian>Левая рука</Russian> + <Russian>Левой руки</Russian> <Italian>Braccio sinistro</Italian> <Spanish>Brazo izquierdo</Spanish> <French>Bras gouche</French> @@ -1583,7 +1583,7 @@ <English>Right Arm</English> <German>Rechter Arm</German> <Polish>Prawe ramię</Polish> - <Russian>Правая рука</Russian> + <Russian>Правой руки</Russian> <Italian>Braccio destro</Italian> <Spanish>Brazo derecho</Spanish> <French>Bras droit</French> @@ -1592,7 +1592,7 @@ <English>Left Leg</English> <German>Linkes Bein</German> <Polish>Lewa noga</Polish> - <Russian>Левая нога</Russian> + <Russian>Левой ноги</Russian> <Italian>Gamba sinistra</Italian> <Spanish>Pierna izquierda</Spanish> <French>Jambe gauche</French> @@ -1601,7 +1601,7 @@ <English>Right Leg</English> <German>Rechtes Bein</German> <Polish>Prawa noga</Polish> - <Russian>Правая нога</Russian> + <Russian>Правой ноги</Russian> <Italian>Gamba destra</Italian> <Spanish>Pierna derecha</Spanish> <French>Jambe droite</French> @@ -1610,7 +1610,7 @@ <English>Pain Effect Type</English> <German>Schmerzeffekt-Typ</German> <Polish>Rodzaj efektu bólu</Polish> - <Russian>Вид боли</Russian> + <Russian>Эффект боли</Russian> <Italian>Pain Effect Type</Italian> <Spanish>Tipo de efecto de dolor</Spanish> <French>Type d'effet de douleur</French> @@ -1619,7 +1619,7 @@ <English>Colour Flashing</English> <German>Farbblinken</German> <Polish>Pulsujące kolory</Polish> - <Russian>Разноцветные вспышки</Russian> + <Russian>Пульсирующий свет</Russian> <Italian>Colore lampeggiante</Italian> <Spanish>Parpadeo de color</Spanish> <French>Flash de couleur</French> @@ -1634,4 +1634,4 @@ <French>Aberration chromatique</French> </Key> </Package> -</Project> \ No newline at end of file +</Project> From d8b96066e60b660d61fe7df3881d08dd442d6542 Mon Sep 17 00:00:00 2001 From: ruPaladin <happyworm24@rambler.ru> Date: Sun, 19 Apr 2015 11:01:41 +0300 Subject: [PATCH 191/257] Rus translation (nametags) --- addons/nametags/stringtable.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/addons/nametags/stringtable.xml b/addons/nametags/stringtable.xml index 77e10b6ee9..e224ce61e4 100644 --- a/addons/nametags/stringtable.xml +++ b/addons/nametags/stringtable.xml @@ -22,7 +22,7 @@ <Czech>Zobrazit jména hráčů</Czech> <Portuguese>Mostrar nomes de jogadores</Portuguese> <Italian>Mostra i nomi dei giocatori</Italian> - <Russian>Показать имена игроков</Russian> + <Russian>Показывать имена игроков (включить имена)</Russian> </Key> <Key ID="STR_ACE_NameTags_ShowPlayerNamesOnlyOnCursor"> <English>Show player name only on cursor (requires player names)</English> @@ -34,7 +34,7 @@ <Italian>Mostra i nomi solo se puntati (richiede mostra nomi abilitato)</Italian> <Portuguese>Mostrar nome de jogador somente no cursor (requer nome de jogadores)</Portuguese> <Hungarian>Játékosok nevének mutatása csak a kurzoron (a nevek mutatása szükséges)</Hungarian> - <Russian>Показать имена игроков только под курсором (требует имен игроков)</Russian> + <Russian>Показать имена игроков только под курсором (при включенных именах)</Russian> </Key> <Key ID="STR_ACE_NameTags_ShowPlayerNamesOnlyOnKeyPress"> <English>Show player name only on keypress (requires player names)</English> @@ -44,7 +44,7 @@ <Czech>Zobrazit jména hráčů jen na klávesu (vyžaduje jména hráčů)</Czech> <Polish>Pokaż imiona graczy tylko po przytrzymaniu klawisza (wymagana opcja Pokaż imiona graczy)</Polish> <Hungarian>Játékosnevek mutatása csak gombnyomásra (a nevek mutatása szükséges)</Hungarian> - <Russian>Показать имена игроков только по нажатию клавиши (требует имен игроков)</Russian> + <Russian>Показать имена игроков только по нажатию клавиши (при включенных именах)</Russian> <Italian>Mostra i nomi solo se si preme il tasto (richiede mostra nomi abilitato)</Italian> </Key> <Key ID="STR_ACE_NameTags_ShowPlayerRanks"> @@ -57,7 +57,7 @@ <Italian>Mostra i gradi (richiede mostra nomi abilitato)</Italian> <Portuguese>Mostrar patente de jogadores (requer nome de jogadores)</Portuguese> <Hungarian>Játékosok rendfokozatának mutatása (a nevek mutatása szükséges)</Hungarian> - <Russian>Показывать звания игроков (требует имен игроков)</Russian> + <Russian>Показывать звания игроков (при вкл. именах)</Russian> </Key> <Key ID="STR_ACE_NameTags_ShowVehicleCrewInfo"> <English>Show vehicle crew info</English> @@ -74,7 +74,7 @@ <English>Show name tags for AI units</English> <German>Zeige Namen für KI Einheiten</German> <Spanish>Mostrar etiquetas de nombre para unidades IA </Spanish> - <Russian>Показывать именые метки ИИ</Russian> + <Russian>Показывать имена ботов</Russian> <Czech>Zobrazit jména AI</Czech> <Polish>Wyświetl imiona jednostek AI</Polish> <French>Afficher les noms des IA</French> @@ -85,7 +85,7 @@ <English>Show SoundWaves (requires player names)</English> <German>Zeigen Schallwellen (benötigt Spielernamen)</German> <Spanish>Mostrar onda sonora (requiere Mostrar nombres de jugadores)</Spanish> - <Russian>Показывать звуковые волны (требует имен игроков)</Russian> + <Russian>Индикатор разговора (при вкл. именах)</Russian> <Czech>Zobrazit SoundWaves (vyžaduje jména hráčů)</Czech> <Polish>Pokaż fale dźwiękowe (wymagana opcja Pokaż imiona graczy)</Polish> <French>Afficher "qui parle" (si noms affichés)</French> From 51590d39adcdbaff81ff392832331b2be54e7670 Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Sun, 19 Apr 2015 10:47:43 +0200 Subject: [PATCH 192/257] Cleaned up the ATragMX postInit routine --- addons/atragmx/functions/fnc_create_dialog.sqf | 2 ++ addons/atragmx/functions/fnc_restore_user_data.sqf | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/addons/atragmx/functions/fnc_create_dialog.sqf b/addons/atragmx/functions/fnc_create_dialog.sqf index 5be6e4ecb4..1646b0ec25 100644 --- a/addons/atragmx/functions/fnc_create_dialog.sqf +++ b/addons/atragmx/functions/fnc_create_dialog.sqf @@ -40,6 +40,8 @@ GVAR(showTargetRangeAssist) call FUNC(show_target_range_assist); GVAR(showTargetSpeedAssist) call FUNC(show_target_speed_assist); GVAR(showTargetSpeedAssistTimer) call FUNC(show_target_speed_assist_timer); +[GVAR(currentGun), false] call FUNC(change_gun); + { lbAdd [6000, _x select 0]; } forEach GVAR(gunList); diff --git a/addons/atragmx/functions/fnc_restore_user_data.sqf b/addons/atragmx/functions/fnc_restore_user_data.sqf index 6fddc4bed5..e21d66acd8 100644 --- a/addons/atragmx/functions/fnc_restore_user_data.sqf +++ b/addons/atragmx/functions/fnc_restore_user_data.sqf @@ -16,7 +16,7 @@ #include "script_component.hpp" GVAR(currentUnit) = 0 max (profileNamespace getVariable ["ACE_ATragMX_currentUnit", 2]) min 2; -[profileNamespace getVariable ["ACE_ATragMX_currentGun", 0], false] call FUNC(change_gun); +GVAR(currentGun) = 0 max (profileNamespace getVariable ["ACE_ATragMX_currentGun", 0]); GVAR(currentTarget) = 0 max (profileNamespace getVariable ["ACE_ATragMX_currentTarget", 0]) min 3; GVAR(currentScopeUnit) = 0 max (profileNamespace getVariable ["ACE_ATragMX_currentScopeUnit", 0]) min 3; From 336a192302a387aaab3c44a511143f0e79a32761 Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Sun, 19 Apr 2015 10:57:55 +0200 Subject: [PATCH 193/257] The range card setup data is now also restored on mission start --- addons/atragmx/functions/fnc_clear_user_data.sqf | 9 +++++++-- addons/atragmx/functions/fnc_restore_user_data.sqf | 5 +++++ addons/atragmx/functions/fnc_store_user_data.sqf | 9 +++++++-- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/addons/atragmx/functions/fnc_clear_user_data.sqf b/addons/atragmx/functions/fnc_clear_user_data.sqf index 10f31741f2..f805ce66b1 100644 --- a/addons/atragmx/functions/fnc_clear_user_data.sqf +++ b/addons/atragmx/functions/fnc_clear_user_data.sqf @@ -29,11 +29,16 @@ profileNamespace setVariable ["ACE_ATragMX_barometricPressure", nil]; profileNamespace setVariable ["ACE_ATragMX_relativeHumidity", nil]; profileNamespace setVariable ["ACE_ATragMX_showWind2", nil]; -profileNamespace setVariable ["latitude", nil]; -profileNamespace setVariable ["directionOfFire", nil]; +profileNamespace setVariable ["ACE_ATragMX_latitude", nil]; +profileNamespace setVariable ["ACE_ATragMX_directionOfFire", nil]; profileNamespace setVariable ["ACE_ATragMX_windSpeed1", nil]; profileNamespace setVariable ["ACE_ATragMX_windSpeed2", nil]; profileNamespace setVariable ["ACE_ATragMX_windDirection", nil]; profileNamespace setVariable ["ACE_ATragMX_inclinationAngle", nil]; profileNamespace setVariable ["ACE_ATragMX_targetSpeed", nil]; profileNamespace setVariable ["ACE_ATragMX_targetRange", nil]; + +profileNamespace setVariable ["ACE_ATragMX_rangeCardStartRange", nil]; +profileNamespace setVariable ["ACE_ATragMX_rangeCardEndRange", nil]; +profileNamespace setVariable ["ACE_ATragMX_rangeCardIncrement", nil]; +profileNamespace setVariable ["ACE_ATragMX_rangeCardCurrentColumn", nil]; \ No newline at end of file diff --git a/addons/atragmx/functions/fnc_restore_user_data.sqf b/addons/atragmx/functions/fnc_restore_user_data.sqf index e21d66acd8..54d1f3cd2b 100644 --- a/addons/atragmx/functions/fnc_restore_user_data.sqf +++ b/addons/atragmx/functions/fnc_restore_user_data.sqf @@ -35,3 +35,8 @@ GVAR(windDirection) = profileNamespace getVariable ["ACE_ATragMX_windDirection", GVAR(inclinationAngle) = profileNamespace getVariable ["ACE_ATragMX_inclinationAngle", [0, 0, 0, 0]]; GVAR(targetSpeed) = profileNamespace getVariable ["ACE_ATragMX_targetSpeed", [0, 0, 0, 0]]; GVAR(targetRange) = profileNamespace getVariable ["ACE_ATragMX_targetRange", [0, 0, 0, 0]]; + +GVAR(rangeCardStartRange) = 0 max (profileNamespace getVariable ["ACE_ATragMX_rangeCardStartRange", 200]) min 3000; +GVAR(rangeCardEndRange) = 0 max (profileNamespace getVariable ["ACE_ATragMX_rangeCardEndRange", 2000]) min 3000; +GVAR(rangeCardIncrement) = 1 max (profileNamespace getVariable ["ACE_ATragMX_rangeCardIncrement", 50]) min 3000; +GVAR(rangeCardCurrentColumn) = 0 max (profileNamespace getVariable ["ACE_ATragMX_rangeCardCurrentColumn", 3]) min 3; diff --git a/addons/atragmx/functions/fnc_store_user_data.sqf b/addons/atragmx/functions/fnc_store_user_data.sqf index 66207444d2..2045276426 100644 --- a/addons/atragmx/functions/fnc_store_user_data.sqf +++ b/addons/atragmx/functions/fnc_store_user_data.sqf @@ -29,11 +29,16 @@ profileNamespace setVariable ["ACE_ATragMX_barometricPressure", GVAR(barometricP profileNamespace setVariable ["ACE_ATragMX_relativeHumidity", GVAR(relativeHumidity)]; profileNamespace setVariable ["ACE_ATragMX_showWind2", GVAR(showWind2)]; -profileNamespace setVariable ["latitude", GVAR(latitude)]; -profileNamespace setVariable ["directionOfFire", GVAR(directionOfFire)]; +profileNamespace setVariable ["ACE_ATragMX_latitude", GVAR(latitude)]; +profileNamespace setVariable ["ACE_ATragMX_directionOfFire", GVAR(directionOfFire)]; profileNamespace setVariable ["ACE_ATragMX_windSpeed1", GVAR(windSpeed1)]; profileNamespace setVariable ["ACE_ATragMX_windSpeed2", GVAR(windSpeed2)]; profileNamespace setVariable ["ACE_ATragMX_windDirection", GVAR(windDirection)]; profileNamespace setVariable ["ACE_ATragMX_inclinationAngle", GVAR(inclinationAngle)]; profileNamespace setVariable ["ACE_ATragMX_targetSpeed", GVAR(targetSpeed)]; profileNamespace setVariable ["ACE_ATragMX_targetRange", GVAR(targetRange)]; + +profileNamespace setVariable ["ACE_ATragMX_rangeCardStartRange", GVAR(rangeCardStartRange)]; +profileNamespace setVariable ["ACE_ATragMX_rangeCardEndRange", GVAR(rangeCardEndRange)]; +profileNamespace setVariable ["ACE_ATragMX_rangeCardIncrement", GVAR(rangeCardIncrement)]; +profileNamespace setVariable ["ACE_ATragMX_rangeCardCurrentColumn", GVAR(rangeCardCurrentColumn)]; \ No newline at end of file From 8f20303a084bb76bde87b6e1f3c0298f292fba65 Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Sun, 19 Apr 2015 11:02:06 +0200 Subject: [PATCH 194/257] Fixed a bug in the atmosphere unit conversion --- addons/atragmx/functions/fnc_parse_input.sqf | 2 +- addons/atragmx/functions/fnc_update_atmo_env_data.sqf | 6 +++--- addons/atragmx/functions/fnc_update_atmosphere.sqf | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/addons/atragmx/functions/fnc_parse_input.sqf b/addons/atragmx/functions/fnc_parse_input.sqf index aa77fc8111..cda1bb3419 100644 --- a/addons/atragmx/functions/fnc_parse_input.sqf +++ b/addons/atragmx/functions/fnc_parse_input.sqf @@ -19,7 +19,7 @@ GVAR(altitude) = -1000 max parseNumber(ctrlText 130030) min 20000; GVAR(temperature) = -50 max parseNumber(ctrlText 130040) min 160; GVAR(barometricPressure) = 0 max parseNumber(ctrlText 130050) min 1350; GVAR(relativeHumidity) = (0 max parseNumber(ctrlText 130060) min 100) / 100; -if (GVAR(currentUnit) == 1) then { +if (GVAR(currentUnit) != 2) then { GVAR(altitude) = GVAR(altitude) * 0.3048; GVAR(temperature) = (GVAR(temperature) - 32) / 1.8; GVAR(barometricPressure) = GVAR(barometricPressure) * 33.86389; diff --git a/addons/atragmx/functions/fnc_update_atmo_env_data.sqf b/addons/atragmx/functions/fnc_update_atmo_env_data.sqf index 8dcbc89280..7cd34754da 100644 --- a/addons/atragmx/functions/fnc_update_atmo_env_data.sqf +++ b/addons/atragmx/functions/fnc_update_atmo_env_data.sqf @@ -17,18 +17,18 @@ ctrlSetFocus ((uiNamespace getVariable "ATragMX_Display") displayCtrl 13007); -if (GVAR(currentUnit) != 1) then { +if (GVAR(currentUnit) == 2) then { ctrlSetText [130040, Str(Round(GVAR(temperature) * 10) / 10)]; } else { ctrlSetText [130040, Str(Round((GVAR(temperature) * 1.8 + 32) * 10) / 10)]; }; -if (GVAR(currentUnit) != 1) then { +if (GVAR(currentUnit) == 2) then { ctrlSetText [130050, Str(Round(GVAR(barometricPressure)))]; } else { ctrlSetText [130050, Str(Round(GVAR(barometricPressure) / 33.8638866667 * 100) / 100)]; }; ctrlSetText [130060, Str(Round(GVAR(relativeHumidity) * 100 * 10) / 10)]; -if (GVAR(currentUnit) != 1) then { +if (GVAR(currentUnit) == 2) then { ctrlSetText [130030, Str(Round(GVAR(altitude)))]; } else { ctrlSetText [130030, Str(Round(GVAR(altitude) * 3.2808399))]; diff --git a/addons/atragmx/functions/fnc_update_atmosphere.sqf b/addons/atragmx/functions/fnc_update_atmosphere.sqf index fa555f50e7..be7565bda7 100644 --- a/addons/atragmx/functions/fnc_update_atmosphere.sqf +++ b/addons/atragmx/functions/fnc_update_atmosphere.sqf @@ -15,18 +15,18 @@ */ #include "script_component.hpp" -if (GVAR(currentUnit) != 1) then { +if (GVAR(currentUnit) == 2) then { ctrlSetText [200, Str(Round(GVAR(temperature) * 10) / 10)]; } else { ctrlSetText [200, Str(Round((GVAR(temperature) * 1.8 + 32) * 10) / 10)]; }; -if (GVAR(currentUnit) != 1) then { +if (GVAR(currentUnit) == 2) then { ctrlSetText [210, Str(Round(GVAR(barometricPressure)))]; } else { ctrlSetText [210, Str(Round(GVAR(barometricPressure) / 33.8638866667 * 100) / 100)]; }; ctrlSetText [220, Str(Round(GVAR(relativeHumidity) * 100 * 10) / 10)]; -if (GVAR(currentUnit) != 1) then { +if (GVAR(currentUnit) == 2) then { ctrlSetText [230, Str(Round(GVAR(altitude)))]; } else { ctrlSetText [230, Str(Round(GVAR(altitude) * 3.2808399))]; From de5c5139c0f6721bc15fc02015edb8f5c0fd420d Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Sun, 19 Apr 2015 11:02:25 +0200 Subject: [PATCH 195/257] Moved a private declaration out of the hot path --- addons/atragmx/functions/fnc_calculate_solution.sqf | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/addons/atragmx/functions/fnc_calculate_solution.sqf b/addons/atragmx/functions/fnc_calculate_solution.sqf index 242e2e9c48..2d70e8dca1 100644 --- a/addons/atragmx/functions/fnc_calculate_solution.sqf +++ b/addons/atragmx/functions/fnc_calculate_solution.sqf @@ -43,7 +43,7 @@ */ #include "script_component.hpp" -private ["_scopeBaseAngle", "_bulletMass", "_boreHeight", "_airFriction", "_muzzleVelocity", "_temperature", "_barometricPressure", "_relativeHumidity", "_simSteps", "_windSpeed1", "_windSpeed2", "_windDirection", "_inclinationAngle", "_targetSpeed", "_targetRange", "_bc", "_dragModel", "_atmosphereModel", "_storeRangeCardData", "_stabilityFactor", "_twistDirection", "_latitude"]; +private ["_scopeBaseAngle", "_bulletMass", "_boreHeight", "_airFriction", "_muzzleVelocity", "_temperature", "_barometricPressure", "_relativeHumidity", "_simSteps", "_windSpeed1", "_windSpeed2", "_windDirection", "_inclinationAngle", "_targetSpeed", "_targetRange", "_drag", "_bc", "_dragModel", "_atmosphereModel", "_storeRangeCardData", "_stabilityFactor", "_twistDirection", "_latitude"]; _scopeBaseAngle = _this select 0; _bulletMass = _this select 1; _boreHeight = _this select 2; @@ -136,7 +136,6 @@ while {_TOF < 15 && (_bulletPos select 1) < _targetRange} do { if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then { if (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false]) then { - private ["_drag"]; _drag = if (missionNamespace getVariable [QEGVAR(advanced_ballistics,extensionAvailable), false]) then { parseNumber(("ace_advanced_ballistics" callExtension format["retard:%1:%2:%3", _dragModel, _bc, _trueSpeed])) } else { From 4235163801945f4a1f959ad3c34ce7f875e08fbb Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Sun, 19 Apr 2015 11:14:18 +0200 Subject: [PATCH 196/257] Added asterix (*) prefix to distances in yards on the main page --- addons/atragmx/functions/fnc_update_gun.sqf | 6 +++--- addons/atragmx/functions/fnc_update_target.sqf | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/atragmx/functions/fnc_update_gun.sqf b/addons/atragmx/functions/fnc_update_gun.sqf index f3d173ba11..67e5e651d1 100644 --- a/addons/atragmx/functions/fnc_update_gun.sqf +++ b/addons/atragmx/functions/fnc_update_gun.sqf @@ -36,10 +36,10 @@ if (GVAR(currentUnit) != 2) then { } else { ctrlSetText [130, Str(Round(GVAR(workingMemory) select 1))]; }; -if (GVAR(currentUnit) != 1) then { - ctrlSetText [140, Str(Round(GVAR(workingMemory) select 2))]; +if (GVAR(currentUnit) == 1) then { + ctrlSetText [140, format["*%1", Round((GVAR(workingMemory) select 2) * 1.0936133)]]; } else { - ctrlSetText [140, Str(Round((GVAR(workingMemory) select 2) * 1.0936133))]; + ctrlSetText [140, Str(Round(GVAR(workingMemory) select 2))]; }; [] call FUNC(update_scope_unit); diff --git a/addons/atragmx/functions/fnc_update_target.sqf b/addons/atragmx/functions/fnc_update_target.sqf index dab62e099d..a888e6fdd8 100644 --- a/addons/atragmx/functions/fnc_update_target.sqf +++ b/addons/atragmx/functions/fnc_update_target.sqf @@ -36,7 +36,7 @@ if (GVAR(currentUnit) != 2) then { ctrlSetText [330, Str(Round((GVAR(targetSpeed) select GVAR(currentTarget)) * 100) / 100)]; }; if (GVAR(currentUnit) == 1) then { - ctrlSetText [340, Str(Round((GVAR(targetRange) select GVAR(currentTarget)) * 1.0936133))]; + ctrlSetText [340, format["*%1", Round((GVAR(workingMemory) select 2) * 1.0936133)]]; } else { ctrlSetText [340, Str(Round((GVAR(targetRange) select GVAR(currentTarget))))]; }; From 4430e8a0ee61faaeac26f37f4b26ec3c415c5d35 Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Sun, 19 Apr 2015 11:18:37 +0200 Subject: [PATCH 197/257] Increased the minimum barometric pressure value that is accepted --- addons/atragmx/functions/fnc_parse_input.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/atragmx/functions/fnc_parse_input.sqf b/addons/atragmx/functions/fnc_parse_input.sqf index cda1bb3419..ab2539ec1c 100644 --- a/addons/atragmx/functions/fnc_parse_input.sqf +++ b/addons/atragmx/functions/fnc_parse_input.sqf @@ -17,7 +17,7 @@ GVAR(altitude) = -1000 max parseNumber(ctrlText 130030) min 20000; GVAR(temperature) = -50 max parseNumber(ctrlText 130040) min 160; -GVAR(barometricPressure) = 0 max parseNumber(ctrlText 130050) min 1350; +GVAR(barometricPressure) = 10 max parseNumber(ctrlText 130050) min 1350; GVAR(relativeHumidity) = (0 max parseNumber(ctrlText 130060) min 100) / 100; if (GVAR(currentUnit) != 2) then { GVAR(altitude) = GVAR(altitude) * 0.3048; From 5195271894755ac6782c4b60b11862e45530027c Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Sun, 19 Apr 2015 11:32:02 +0200 Subject: [PATCH 198/257] Fixes: https://github.com/acemod/ACE3/commit/4235163 *The asterix needs to be shown on distances shown in meters not yards --- addons/atragmx/functions/fnc_update_gun.sqf | 15 ++++++++++----- addons/atragmx/functions/fnc_update_target.sqf | 14 ++++++++++---- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/addons/atragmx/functions/fnc_update_gun.sqf b/addons/atragmx/functions/fnc_update_gun.sqf index 67e5e651d1..4ca7338e57 100644 --- a/addons/atragmx/functions/fnc_update_gun.sqf +++ b/addons/atragmx/functions/fnc_update_gun.sqf @@ -36,10 +36,15 @@ if (GVAR(currentUnit) != 2) then { } else { ctrlSetText [130, Str(Round(GVAR(workingMemory) select 1))]; }; -if (GVAR(currentUnit) == 1) then { - ctrlSetText [140, format["*%1", Round((GVAR(workingMemory) select 2) * 1.0936133)]]; -} else { - ctrlSetText [140, Str(Round(GVAR(workingMemory) select 2))]; +switch (GVAR(currentUnit)) do { + case 0: { + ctrlSetText [140, format["*%1", Round(GVAR(workingMemory) select 2)]]; + }; + case 1: { + ctrlSetText [140, Str(Round((GVAR(workingMemory) select 2) * 1.0936133))]; + }; + case 2: { + ctrlSetText [140, Str(Round(GVAR(workingMemory) select 2))]; + }; }; - [] call FUNC(update_scope_unit); diff --git a/addons/atragmx/functions/fnc_update_target.sqf b/addons/atragmx/functions/fnc_update_target.sqf index a888e6fdd8..ef2ef1de5c 100644 --- a/addons/atragmx/functions/fnc_update_target.sqf +++ b/addons/atragmx/functions/fnc_update_target.sqf @@ -35,8 +35,14 @@ if (GVAR(currentUnit) != 2) then { } else { ctrlSetText [330, Str(Round((GVAR(targetSpeed) select GVAR(currentTarget)) * 100) / 100)]; }; -if (GVAR(currentUnit) == 1) then { - ctrlSetText [340, format["*%1", Round((GVAR(workingMemory) select 2) * 1.0936133)]]; -} else { - ctrlSetText [340, Str(Round((GVAR(targetRange) select GVAR(currentTarget))))]; +switch (GVAR(currentUnit)) do { + case 0: { + ctrlSetText [340, format["*%1", Round((GVAR(targetRange) select GVAR(currentTarget)))]]; + }; + case 1: { + ctrlSetText [340, Str(Round((GVAR(targetRange) select GVAR(currentTarget)) * 1.0936133))]; + }; + case 2: { + ctrlSetText [340, Str(Round((GVAR(targetRange) select GVAR(currentTarget))))]; + }; }; From 874858ebb4ab8d770dc530478884433442146961 Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Sun, 19 Apr 2015 11:43:20 +0200 Subject: [PATCH 199/257] Added a sanity check to the cycle gun list function *Top/Down buttons only cycle the gun list in the main/gun list menu --- addons/atragmx/functions/fnc_cycle_gun_list.sqf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/atragmx/functions/fnc_cycle_gun_list.sqf b/addons/atragmx/functions/fnc_cycle_gun_list.sqf index 3d4bef70c1..75f54c79fb 100644 --- a/addons/atragmx/functions/fnc_cycle_gun_list.sqf +++ b/addons/atragmx/functions/fnc_cycle_gun_list.sqf @@ -15,4 +15,6 @@ */ #include "script_component.hpp" +if (!(GVAR(showMainPage) || GVAR(showGunList))) exitWith {}; + [(GVAR(currentGun) + (count GVAR(gunList)) + _this) % (count GVAR(gunList)), true] call FUNC(change_gun); From f6263e9e8b9b59a005b2aa1aa692cc0914f20c74 Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Sun, 19 Apr 2015 12:07:27 +0200 Subject: [PATCH 200/257] Overworked the scope click feature: *TODO: Add the "Setting Up a Solution for Your Scope" screen --- addons/atragmx/XEH_postInit.sqf | 46 +++++++++---------- addons/atragmx/functions/fnc_change_gun.sqf | 6 +-- addons/atragmx/functions/fnc_init.sqf | 3 ++ .../functions/fnc_update_scope_unit.sqf | 9 +++- addons/atragmx/script_component.hpp | 2 +- 5 files changed, 37 insertions(+), 29 deletions(-) diff --git a/addons/atragmx/XEH_postInit.sqf b/addons/atragmx/XEH_postInit.sqf index e5f7dd42d3..574b5a8991 100644 --- a/addons/atragmx/XEH_postInit.sqf +++ b/addons/atragmx/XEH_postInit.sqf @@ -5,39 +5,39 @@ if ((profileNamespace getVariable ["ACE_ATragMX_profileNamespaceVersion", 0]) == ATRAGMX_PROFILE_NAMESPACE_VERSION && count (profileNamespace getVariable ["ACE_ATragMX_gunList", []]) > 0) then { GVAR(gunList) = profileNamespace getVariable "ACE_ATragMX_gunList"; } else { - // Profile Name, Muzzle Velocity, Zero Range, Scope Base Angle, AirFriction, Bore Height, Scope Unit, Elevation Scope Step, Windage Scope Step, Maximum Elevation, Dialed Elevation, Dialed Windage, Mass, Bullet Diameter, Rifle Twist, BC, Drag Model, Atmosphere Model - GVAR(gunList) = [["12.7x108mm" , 820, 100, 0.0659, -0.0008600, 3.81, 0, 0.338, 0.338, 120, 0, 0, 48.28, 12.7, 38.10, 0.630, 1, "ASM" ], + // Profile Name, Muzzle Velocity, Zero Range, Scope Base Angle, AirFriction, Bore Height, Scope Unit, Scope Click Unit, Scope Click Number, Maximum Elevation, Dialed Elevation, Dialed Windage, Mass, Bullet Diameter, Rifle Twist, BC, Drag Model, Atmosphere Model + GVAR(gunList) = [["12.7x108mm" , 820, 100, 0.0659, -0.0008600, 3.81, 0, 2, 10, 120, 0, 0, 48.28, 12.7, 38.10, 0.630, 1, "ASM" ], - ["12.7x99mm AMAX" , 860, 100, 0.0612, -0.0008600, 3.81, 0, 0.338, 0.338, 120, 0, 0, 48.60, 12.7, 38.10, 1.050, 1, "ASM" ], - ["12.7x99mm" , 853, 100, 0.0623, -0.0008600, 3.81, 0, 0.338, 0.338, 120, 0, 0, 41.92, 12.7, 38.10, 0.670, 1, "ASM" ], + ["12.7x99mm AMAX" , 860, 100, 0.0612, -0.0008600, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 38.10, 1.050, 1, "ASM" ], + ["12.7x99mm" , 853, 100, 0.0623, -0.0008600, 3.81, 0, 2, 10, 120, 0, 0, 41.92, 12.7, 38.10, 0.670, 1, "ASM" ], - ["12.7x54mm" , 300, 100, 0.3394, -0.0014000, 3.81, 0, 0.338, 0.338, 120, 0, 0, 48.60, 12.7, 24.13, 1.050, 1, "ASM" ], + ["12.7x54mm" , 300, 100, 0.3394, -0.0014000, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 24.13, 1.050, 1, "ASM" ], - [".408 Chey Tac" , 910, 100, 0.0569, -0.0004800, 3.81, 0, 0.338, 0.338, 120, 0, 0, 27.15, 10.4, 33.02, 0.970, 1, "ASM" ], + [".408 Chey Tac" , 910, 100, 0.0569, -0.0004800, 3.81, 0, 2, 10, 120, 0, 0, 27.15, 10.4, 33.02, 0.970, 1, "ASM" ], - ["9.3×64mm" , 870, 100, 0.0619, -0.0007500, 3.81, 0, 0.338, 0.338, 120, 0, 0, 14.90, 9.30, 35.56, 0.368, 1, "ASM" ], + ["9.3×64mm" , 870, 100, 0.0619, -0.0007500, 3.81, 0, 2, 10, 120, 0, 0, 14.90, 9.30, 35.56, 0.368, 1, "ASM" ], - [".338LM 250gr" , 880, 100, 0.0598, -0.0006060, 3.81, 0, 0.338, 0.338, 120, 0, 0, 16.20, 8.58, 25.40, 0.322, 7, "ICAO"], - [".338LM 300gr" , 800, 100, 0.0677, -0.0005350, 3.81, 0, 0.338, 0.338, 120, 0, 0, 19.44, 8.58, 25.40, 0.381, 7, "ICAO"], - [".338LM API526" , 880, 100, 0.0601, -0.0006730, 3.81, 0, 0.338, 0.338, 120, 0, 0, 16.39, 8.58, 25.40, 0.290, 7, "ICAO"], + [".338LM 250gr" , 880, 100, 0.0598, -0.0006060, 3.81, 0, 2, 10, 120, 0, 0, 16.20, 8.58, 25.40, 0.322, 7, "ICAO"], + [".338LM 300gr" , 800, 100, 0.0677, -0.0005350, 3.81, 0, 2, 10, 120, 0, 0, 19.44, 8.58, 25.40, 0.381, 7, "ICAO"], + [".338LM API526" , 880, 100, 0.0601, -0.0006730, 3.81, 0, 2, 10, 120, 0, 0, 16.39, 8.58, 25.40, 0.290, 7, "ICAO"], - [".300WM Mk248 Mod 0", 900, 100, 0.0584, -0.0008300, 3.81, 0, 0.338, 0.338, 120, 0, 0, 13.31, 7.80, 25.40, 0.268, 7, "ICAO"], - [".300WM Mk248 Mod 1", 867, 100, 0.0611, -0.0008150, 3.81, 0, 0.338, 0.338, 120, 0, 0, 14.26, 7.80, 25.40, 0.310, 7, "ICAO"], - [".300WM Berger OTM" , 853, 100, 0.0622, -0.0007600, 3.81, 0, 0.338, 0.338, 120, 0, 0, 14.90, 7.80, 25.40, 0.368, 7, "ICAO"], + [".300WM Mk248 Mod 0", 900, 100, 0.0584, -0.0008300, 3.81, 0, 2, 10, 120, 0, 0, 13.31, 7.80, 25.40, 0.268, 7, "ICAO"], + [".300WM Mk248 Mod 1", 867, 100, 0.0611, -0.0008150, 3.81, 0, 2, 10, 120, 0, 0, 14.26, 7.80, 25.40, 0.310, 7, "ICAO"], + [".300WM Berger OTM" , 853, 100, 0.0622, -0.0007600, 3.81, 0, 2, 10, 120, 0, 0, 14.90, 7.80, 25.40, 0.368, 7, "ICAO"], - ["7.62x54mmR" , 800, 100, 0.0692, -0.0010230, 3.81, 0, 0.338, 0.338, 120, 0, 0, 9.849, 7.92, 24.13, 0.400, 1, "ICAO"], + ["7.62x54mmR" , 800, 100, 0.0692, -0.0010230, 3.81, 0, 2, 10, 120, 0, 0, 9.849, 7.92, 24.13, 0.400, 1, "ICAO"], - ["7.62x51mm M80" , 810, 100, 0.0679, -0.0010350, 3.81, 0, 0.338, 0.338, 120, 0, 0, 9.525, 7.82, 25.40, 0.200, 7, "ICAO"], - ["7.62x51mm M118LR" , 820, 100, 0.0662, -0.0008525, 3.81, 0, 0.338, 0.338, 120, 0, 0, 11.34, 7.82, 25.40, 0.243, 7, "ICAO"], - ["7.62x51mm Mk319" , 820, 100, 0.0670, -0.0010300, 3.81, 0, 0.338, 0.338, 120, 0, 0, 8.424, 7.82, 25.40, 0.377, 1, "ICAO"], - ["7.62x51mm Subsonic", 320, 100, 0.3060, -0.0004910, 3.81, 0, 0.338, 0.338, 120, 0, 0, 12.96, 7.82, 25.40, 0.235, 7, "ICAO"], + ["7.62x51mm M80" , 810, 100, 0.0679, -0.0010350, 3.81, 0, 2, 10, 120, 0, 0, 9.525, 7.82, 25.40, 0.200, 7, "ICAO"], + ["7.62x51mm M118LR" , 820, 100, 0.0662, -0.0008525, 3.81, 0, 2, 10, 120, 0, 0, 11.34, 7.82, 25.40, 0.243, 7, "ICAO"], + ["7.62x51mm Mk319" , 820, 100, 0.0670, -0.0010300, 3.81, 0, 2, 10, 120, 0, 0, 8.424, 7.82, 25.40, 0.377, 1, "ICAO"], + ["7.62x51mm Subsonic", 320, 100, 0.3060, -0.0004910, 3.81, 0, 2, 10, 120, 0, 0, 12.96, 7.82, 25.40, 0.235, 7, "ICAO"], - ["6.5x39mm" , 800, 100, 0.0683, -0.0007850, 3.81, 0, 0.338, 0.338, 120, 0, 0, 7.970, 6.71, 22.86, 0.263, 7, "ICAO"], - ["6.5x47mm Lapua" , 800, 100, 0.0682, -0.0007710, 3.81, 0, 0.338, 0.338, 120, 0, 0, 9.007, 6.71, 22.86, 0.290, 7, "ICAO"], + ["6.5x39mm" , 800, 100, 0.0683, -0.0007850, 3.81, 0, 2, 10, 120, 0, 0, 7.970, 6.71, 22.86, 0.263, 7, "ICAO"], + ["6.5x47mm Lapua" , 800, 100, 0.0682, -0.0007710, 3.81, 0, 2, 10, 120, 0, 0, 9.007, 6.71, 22.86, 0.290, 7, "ICAO"], - ["5.56x45mm M855" , 870, 100, 0.0626, -0.0012650, 3.81, 0, 0.338, 0.338, 120, 0, 0, 4.018, 5.70, 17.78, 0.151, 7, "ASM" ], - ["5.56x45mm Mk262" , 820, 100, 0.0671, -0.0011250, 3.81, 0, 0.338, 0.338, 120, 0, 0, 4.990, 5.70, 17.78, 0.361, 1, "ASM" ], - ["5.56x45mm Mk318" , 880, 100, 0.0616, -0.0011200, 3.81, 0, 0.338, 0.338, 120, 0, 0, 4.018, 5.70, 17.78, 0.307, 1, "ASM" ]]; + ["5.56x45mm M855" , 870, 100, 0.0626, -0.0012650, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.151, 7, "ASM" ], + ["5.56x45mm Mk262" , 820, 100, 0.0671, -0.0011250, 3.81, 0, 2, 10, 120, 0, 0, 4.990, 5.70, 17.78, 0.361, 1, "ASM" ], + ["5.56x45mm Mk318" , 880, 100, 0.0616, -0.0011200, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.307, 1, "ASM" ]]; [] call FUNC(clear_user_data); profileNamespace setVariable ["ACE_ATragMX_gunList", GVAR(gunList)]; diff --git a/addons/atragmx/functions/fnc_change_gun.sqf b/addons/atragmx/functions/fnc_change_gun.sqf index c753f644a4..a401a849e3 100644 --- a/addons/atragmx/functions/fnc_change_gun.sqf +++ b/addons/atragmx/functions/fnc_change_gun.sqf @@ -27,9 +27,9 @@ GVAR(currentGun) = _gunID; lbSetCurSel [6000, GVAR(currentGun)]; -if ((GVAR(scopeUnits) select GVAR(currentScopeUnit)) != "Clicks") then { - GVAR(currentScopeUnit) = GVAR(workingMemory) select 6; -}; +GVAR(currentScopeUnit) = 0 max (GVAR(workingMemory) select 6) min 3; +GVAR(currentScopeClickUnit) = 0 max (GVAR(workingMemory) select 7) min 2; +GVAR(currentScopeClickNumber) = 1 max (GVAR(workingMemory) select 8) min 10; [] call FUNC(update_gun); [] call FUNC(update_gun_ammo_data); diff --git a/addons/atragmx/functions/fnc_init.sqf b/addons/atragmx/functions/fnc_init.sqf index 881f65a6b0..2e613ca9e6 100644 --- a/addons/atragmx/functions/fnc_init.sqf +++ b/addons/atragmx/functions/fnc_init.sqf @@ -18,6 +18,7 @@ GVAR(workingMemory) = +(GVAR(gunList) select 0); GVAR(scopeUnits) = ["MILs", "TMOA", "SMOA", "Clicks"]; +GVAR(scopeClickUnits) = ["TMOA", "SMOA", "MILs"]; GVAR(rangeCardStartRange) = 200; GVAR(rangeCardEndRange) = 2000; @@ -40,6 +41,8 @@ GVAR(currentUnit) = 2; GVAR(currentGun) = 0; GVAR(currentTarget) = 0; GVAR(currentScopeUnit) = 0; +GVAR(currentScopeClickUnit) = 2; +GVAR(currentScopeClickNumber) = 10; GVAR(atmosphereModeTBH) = true; GVAR(altitude) = 0; diff --git a/addons/atragmx/functions/fnc_update_scope_unit.sqf b/addons/atragmx/functions/fnc_update_scope_unit.sqf index 55bb703eee..72efeb772e 100644 --- a/addons/atragmx/functions/fnc_update_scope_unit.sqf +++ b/addons/atragmx/functions/fnc_update_scope_unit.sqf @@ -15,5 +15,10 @@ */ #include "script_component.hpp" -ctrlSetText [2000, GVAR(scopeUnits) select GVAR(currentScopeUnit)]; -ctrlSetText [5000, GVAR(scopeUnits) select GVAR(currentScopeUnit)]; +if (GVAR(currentScopeUnit) == 3) then { + ctrlSetText [2000, format["Clicks=%1", GVAR(currentScopeClickNumber)]]; + ctrlSetText [5000, format["Clicks=%1", GVAR(currentScopeClickNumber)]]; +} else { + ctrlSetText [2000, GVAR(scopeUnits) select GVAR(currentScopeUnit)]; + ctrlSetText [5000, GVAR(scopeUnits) select GVAR(currentScopeUnit)]; +}; diff --git a/addons/atragmx/script_component.hpp b/addons/atragmx/script_component.hpp index 5290ba6a1f..7cd5b44911 100644 --- a/addons/atragmx/script_component.hpp +++ b/addons/atragmx/script_component.hpp @@ -11,4 +11,4 @@ #include "\z\ace\addons\main\script_macros.hpp" -#define ATRAGMX_PROFILE_NAMESPACE_VERSION 1.0 +#define ATRAGMX_PROFILE_NAMESPACE_VERSION 1.1 From 2b5b89604e308d45e1c701eac4ec35510544f60b Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Sun, 19 Apr 2015 12:29:26 +0200 Subject: [PATCH 201/257] Removed unused RscControlsGroup --- addons/atragmx/RscTitles.hpp | 34 ---------------------------------- 1 file changed, 34 deletions(-) diff --git a/addons/atragmx/RscTitles.hpp b/addons/atragmx/RscTitles.hpp index 6562e694d1..905212d5c9 100644 --- a/addons/atragmx/RscTitles.hpp +++ b/addons/atragmx/RscTitles.hpp @@ -133,40 +133,6 @@ class ATragMX_RscListNBox: ATragMX_RscListBox { idcLeft=-1; idcRight=-1; }; -class ATragMX_RscControlsGroup { - type=15; - idc=-1; - style=16; - x=0; - y=0; - w=1; - h=1; - shadow=0; - class VScrollbar { - color[]={1,1,1,0.6}; - width=0.021; - autoScrollSpeed=-1; - autoScrollDelay=5; - autoScrollRewind=0; - shadow=0; - }; - class HScrollbar { - color[]={1,1,1,0.6}; - height=0.028; - shadow=0; - }; - class ScrollBar { - color[]={1,1,1,0.6}; - colorActive[]={1,1,1,1}; - colorDisabled[]={1,1,1,0.3}; - thumb="#(argb,8,8,3)color(1,1,1,1)"; - arrowEmpty="#(argb,8,8,3)color(1,1,1,1)"; - arrowFull="#(argb,8,8,3)color(1,1,1,1)"; - border="#(argb,8,8,3)color(1,1,1,1)"; - }; - class Controls { - }; -}; class ATragMX_RscLineBreak { idc=-1; type=98; From a73c0bc429694bd21d9195f83da977a745fa95c3 Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Sun, 19 Apr 2015 12:40:13 +0200 Subject: [PATCH 202/257] Sord is now able to transmit the direction of fire --- addons/atragmx/functions/fnc_parse_input.sqf | 4 ++-- addons/atragmx/functions/fnc_sord.sqf | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/addons/atragmx/functions/fnc_parse_input.sqf b/addons/atragmx/functions/fnc_parse_input.sqf index ab2539ec1c..ca289302c9 100644 --- a/addons/atragmx/functions/fnc_parse_input.sqf +++ b/addons/atragmx/functions/fnc_parse_input.sqf @@ -32,12 +32,12 @@ GVAR(windSpeed1) set [GVAR(currentTarget), 0 max abs(parseNumber(ctrlText 140020 GVAR(windSpeed2) set [GVAR(currentTarget), 0 max abs(parseNumber(ctrlText 140021)) min 50]; GVAR(windDirection) set [GVAR(currentTarget), 1 max Round(parseNumber(ctrlText 140030)) min 12]; _inclinationAngleCosine = 0.5 max parseNumber(ctrlText 140041) min 1; -_inclinationAngleDegree = -60 max parseNumber(ctrlText 140040) min 60; +_inclinationAngleDegree = -60 max round(parseNumber(ctrlText 140040)) min 60; if (_inclinationAngleDegree != GVAR(inclinationAngle) select GVAR(currentTarget)) then { GVAR(inclinationAngle) set [GVAR(currentTarget), _inclinationAngleDegree]; } else { if (_inclinationAngleCosine != Round(cos(GVAR(inclinationAngle) select GVAR(currentTarget)) * 100) / 100) then { - GVAR(inclinationAngle) set [GVAR(currentTarget), acos(_inclinationAngleCosine)]; + GVAR(inclinationAngle) set [GVAR(currentTarget), round(acos(_inclinationAngleCosine))]; }; }; GVAR(targetSpeed) set [GVAR(currentTarget), -50 max abs(parseNumber(ctrlText 140050)) min 50]; diff --git a/addons/atragmx/functions/fnc_sord.sqf b/addons/atragmx/functions/fnc_sord.sqf index 650993cff3..a433153c0e 100644 --- a/addons/atragmx/functions/fnc_sord.sqf +++ b/addons/atragmx/functions/fnc_sord.sqf @@ -22,6 +22,6 @@ _slopeDistance = _this select 0; _azimuth = _this select 1; _inclination = _this select 2; -//_inclination = asin((ACE_player weaponDirection currentWeapon ACE_player) select 2); -GVAR(inclinationAngle) set [GVAR(currentTarget), _inclination]; -GVAR(targetRange) set [GVAR(currentTarget), _slopeDistance]; +GVAR(inclinationAngle) set [GVAR(currentTarget), round(_inclination)]; +GVAR(directionOfFire) set [GVAR(currentTarget), round(_azimuth)]; +GVAR(targetRange) set [GVAR(currentTarget), round(_slopeDistance)]; From 8a7b3a1b334de2ee6108d63865c47ff6ec7e44e9 Mon Sep 17 00:00:00 2001 From: Glowbal <thomasskooi@live.nl> Date: Sun, 19 Apr 2015 13:08:28 +0200 Subject: [PATCH 203/257] Removed damage thresholds from basic medical --- addons/medical/functions/fnc_handleDamage_basic.sqf | 6 ------ 1 file changed, 6 deletions(-) diff --git a/addons/medical/functions/fnc_handleDamage_basic.sqf b/addons/medical/functions/fnc_handleDamage_basic.sqf index 6e343b127a..aa9c2f61df 100644 --- a/addons/medical/functions/fnc_handleDamage_basic.sqf +++ b/addons/medical/functions/fnc_handleDamage_basic.sqf @@ -63,12 +63,6 @@ if (_selectionName in GVAR(SELECTIONS)) then { _newDamage = _damage - (_unit getHitPointDamage (GVAR(HITPOINTS) select (GVAR(SELECTIONS) find _selectionName))); }; -if ([_unit] call EFUNC(common,isPlayer)) then { - _newDamage = _newDamage / (GVAR(playerDamageThreshold) max 0.01); -} else { - _newDamage = _newDamage / (GVAR(AIDamageThreshold) max 0.01); -}; - _damage = _damage - _newDamage; From 4283e07942f6189af66c295f17d68a63c0cceb2b Mon Sep 17 00:00:00 2001 From: Grzegorz Sikora <gienkov.grzegorz@gmail.com> Date: Sun, 19 Apr 2015 13:50:08 +0200 Subject: [PATCH 204/257] PL fix --- addons/microdagr/stringtable.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/microdagr/stringtable.xml b/addons/microdagr/stringtable.xml index f98c7f438c..017ac9f0d5 100644 --- a/addons/microdagr/stringtable.xml +++ b/addons/microdagr/stringtable.xml @@ -252,7 +252,7 @@ <Spanish>Mostrar MicroDAGR</Spanish> <Russian>Показать MicroDAGR</Russian> <Czech>Ukázat MicroDAGR GPS</Czech> - <Polish>Pokaż<br />MicroDAGR</Polish> + <Polish>Pokaż MicroDAGR</Polish> <French>Afficher MicroDAGR</French> <Hungarian>MicroDAGR mutatása</Hungarian> <Italian>Mostra MicroDAGR</Italian> @@ -263,7 +263,7 @@ <Spanish>Configurar MicroDAGR</Spanish> <Russian>Настроить MicroDAGR</Russian> <Czech>Konfigurovat MicroDAGR GPS</Czech> - <Polish>Konfiguruj<br />MicroDAGR</Polish> + <Polish>Konfiguruj MicroDAGR</Polish> <French>Configurer MicroDAGR</French> <Hungarian>MicroDAGR konfigurálása</Hungarian> <Italian>ConfiguraMicroDAGR</Italian> @@ -274,10 +274,10 @@ <Spanish>Cerrar MicroDAGR</Spanish> <Russian>Закрыть MicroDAGR</Russian> <Czech>Zavřít MicroDAGR GPS</Czech> - <Polish>Zamknij<br />MicroDAGR</Polish> + <Polish>Zamknij MicroDAGR</Polish> <French>Fermer MicroDAGR</French> <Hungarian>MicroDAGR elrejtése</Hungarian> <Italian>Chiudi MicroDAGR</Italian> </Key> </Package> -</Project> +</Project> \ No newline at end of file From f6bbeb6bd6778977aa66983845b096e84c390f76 Mon Sep 17 00:00:00 2001 From: Glowbal <thomasskooi@live.nl> Date: Sun, 19 Apr 2015 17:28:47 +0200 Subject: [PATCH 205/257] switched back to old init method --- addons/medical/XEH_init.sqf | 5 ++- addons/medical/XEH_respawn.sqf | 2 +- addons/medical/functions/fnc_init.sqf | 51 +++++++++++++-------------- 3 files changed, 29 insertions(+), 29 deletions(-) diff --git a/addons/medical/XEH_init.sqf b/addons/medical/XEH_init.sqf index f3fb2b1e93..0ded7d471f 100644 --- a/addons/medical/XEH_init.sqf +++ b/addons/medical/XEH_init.sqf @@ -4,4 +4,7 @@ private ["_unit"]; _unit = _this select 0; _unit addEventHandler ["HandleDamage", {_this call FUNC(handleDamage)}]; -[_unit] call FUNC(init); + +if (local _unit) then { + [_unit] call FUNC(init); +}; diff --git a/addons/medical/XEH_respawn.sqf b/addons/medical/XEH_respawn.sqf index 5047f0026c..ac6cc2d6ef 100644 --- a/addons/medical/XEH_respawn.sqf +++ b/addons/medical/XEH_respawn.sqf @@ -6,7 +6,7 @@ _unit = _this select 0; if !(local _unit) exitWith {}; -[_unit, true] call FUNC(init); +[_unit] call FUNC(init); //Reset captive status for respawning unit if (!(_unit getVariable ["ACE_isUnconscious", false])) then { diff --git a/addons/medical/functions/fnc_init.sqf b/addons/medical/functions/fnc_init.sqf index a9e3625c2b..d01a63b3a5 100644 --- a/addons/medical/functions/fnc_init.sqf +++ b/addons/medical/functions/fnc_init.sqf @@ -16,22 +16,19 @@ private ["_unit", "_allUsedMedication", "_logs", "_forceNew"]; _unit = _this select 0; -_forceNew = if (count _this > 1) then {_this select 1} else {false}; -if (!(isnil {_unit getvariable QGVAR(pain)}) && !_forceNew) exitwith {}; - -_unit setVariable [QGVAR(pain), 0]; -_unit setVariable [QGVAR(morphine), 0]; -_unit setVariable [QGVAR(bloodVolume), 100]; +_unit setVariable [QGVAR(pain), 0, true]; +_unit setVariable [QGVAR(morphine), 0, true]; +_unit setVariable [QGVAR(bloodVolume), 100, true]; // tourniquets -_unit setvariable [QGVAR(tourniquets), [0,0,0,0,0,0]]; +_unit setvariable [QGVAR(tourniquets), [0,0,0,0,0,0], true]; // wounds and injuries -_unit setvariable [QGVAR(openWounds), []]; -_unit setvariable [QGVAR(bandagedWounds), []]; -_unit setVariable [QGVAR(internalWounds), []]; -_unit setvariable [QGVAR(lastUniqueWoundID), 1]; +_unit setvariable [QGVAR(openWounds), [], true]; +_unit setvariable [QGVAR(bandagedWounds), [], true]; +_unit setVariable [QGVAR(internalWounds), [], true]; +_unit setvariable [QGVAR(lastUniqueWoundID), 1, true]; // vitals _unit setVariable [QGVAR(heartRate), 80]; @@ -40,19 +37,19 @@ _unit setvariable [QGVAR(bloodPressure), [80, 120]]; _unit setVariable [QGVAR(peripheralResistance), 100]; // fractures -_unit setVariable [QGVAR(fractures), []]; +_unit setVariable [QGVAR(fractures), [], true]; // triage card and logs -_unit setvariable [QGVAR(triageLevel), 0]; -_unit setvariable [QGVAR(triageCard), []]; +_unit setvariable [QGVAR(triageLevel), 0, true]; +_unit setvariable [QGVAR(triageCard), [], true]; // IVs -_unit setVariable [QGVAR(salineIVVolume), 0]; -_unit setVariable [QGVAR(plasmaIVVolume), 0]; -_unit setVariable [QGVAR(bloodIVVolume), 0]; +_unit setVariable [QGVAR(salineIVVolume), 0, true]; +_unit setVariable [QGVAR(plasmaIVVolume), 0, true]; +_unit setVariable [QGVAR(bloodIVVolume), 0, true]; // damage storage -_unit setvariable [QGVAR(bodyPartStatus), [0,0,0,0,0,0]]; +_unit setvariable [QGVAR(bodyPartStatus), [0,0,0,0,0,0], true]; // airway _unit setvariable [QGVAR(airwayStatus), 100]; @@ -60,26 +57,26 @@ _unit setVariable [QGVAR(airwayOccluded), false]; _unit setvariable [QGVAR(airwayCollapsed), false]; // generic medical admin -_unit setvariable [QGVAR(addedToUnitLoop), false]; -_unit setvariable [QGVAR(inCardiacArrest), false]; -_unit setVariable ["ACE_isUnconscious", false]; -_unit setvariable [QGVAR(hasLostBlood), false]; -_unit setvariable [QGVAR(isBleeding), false]; -_unit setvariable [QGVAR(hasPain), false]; -_unit setvariable [QGVAR(amountOfReviveLives), GVAR(amountOfReviveLives)]; +_unit setvariable [QGVAR(addedToUnitLoop), false, true]; +_unit setvariable [QGVAR(inCardiacArrest), false, true]; +_unit setVariable ["ACE_isUnconscious", false, true]; +_unit setvariable [QGVAR(hasLostBlood), false, true]; +_unit setvariable [QGVAR(isBleeding), false, true]; +_unit setvariable [QGVAR(hasPain), false, true]; +_unit setvariable [QGVAR(amountOfReviveLives), GVAR(amountOfReviveLives), true]; // medication _allUsedMedication = _unit getVariable [QGVAR(allUsedMedication), []]; { _unit setvariable [_x select 0, nil]; } foreach _allUsedMedication; -_unit setVariable [QGVAR(allUsedMedication), []]; +_unit setVariable [QGVAR(allUsedMedication), [], true]; _logs = _unit getvariable [QGVAR(allLogs), []]; { _unit setvariable [_x, nil]; } foreach _logs; -_unit setvariable [QGVAR(allLogs), []]; +_unit setvariable [QGVAR(allLogs), [], true]; // items [{ From 20740679cca12701f22aea15cae0b5ce7ccec91f Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Sun, 19 Apr 2015 17:40:49 +0200 Subject: [PATCH 206/257] Fixed inconsistent 'workingMemory' initialization --- addons/atragmx/functions/fnc_change_gun.sqf | 26 ++++++++++++------- .../atragmx/functions/fnc_create_dialog.sqf | 2 +- .../atragmx/functions/fnc_cycle_gun_list.sqf | 2 +- .../functions/fnc_restore_user_data.sqf | 2 +- .../atragmx/functions/fnc_toggle_gun_list.sqf | 2 +- 5 files changed, 21 insertions(+), 13 deletions(-) diff --git a/addons/atragmx/functions/fnc_change_gun.sqf b/addons/atragmx/functions/fnc_change_gun.sqf index a401a849e3..7c5abac47e 100644 --- a/addons/atragmx/functions/fnc_change_gun.sqf +++ b/addons/atragmx/functions/fnc_change_gun.sqf @@ -4,7 +4,8 @@ * * Arguments: * gunID <number> - * update solution <BOOL> + * restore workingMemory from gunList <BOOL> + * update display <BOOL> * * Return Value: * Nothing @@ -16,23 +17,30 @@ */ #include "script_component.hpp" -private ["_gunID", "_updateSolution"]; -_gunID = _this select 0; -_updateSolution = _this select 1; +private ["_gunID", "_restoreMemory", "_updateDisplay"]; +_gunID = _this select 0; +_restoreMemory = _this select 1; +_updateDisplay = _this select 2; if (_gunID < 0 || _gunID > (count GVAR(gunList)) - 1) exitWith {}; -GVAR(workingMemory) = +(GVAR(gunList) select _gunID); +if (_restoreMemory) then { + GVAR(workingMemory) = +(GVAR(gunList) select _gunID); +}; GVAR(currentGun) = _gunID; -lbSetCurSel [6000, GVAR(currentGun)]; +if (_updateDisplay) then { + lbSetCurSel [6000, GVAR(currentGun)]; +}; GVAR(currentScopeUnit) = 0 max (GVAR(workingMemory) select 6) min 3; GVAR(currentScopeClickUnit) = 0 max (GVAR(workingMemory) select 7) min 2; GVAR(currentScopeClickNumber) = 1 max (GVAR(workingMemory) select 8) min 10; -[] call FUNC(update_gun); -[] call FUNC(update_gun_ammo_data); +if (_updateDisplay) then { + [] call FUNC(update_gun); + [] call FUNC(update_gun_ammo_data); +}; GVAR(elevationOutput) set [GVAR(currentTarget), 0]; GVAR(windage1Output) set [GVAR(currentTarget), 0]; @@ -41,6 +49,6 @@ GVAR(leadOutput) set [GVAR(currentTarget), 0]; GVAR(tofOutput) set [GVAR(currentTarget), 0]; GVAR(velocityOutput) set [GVAR(currentTarget), 0]; -if (_updateSolution) then { +if (_updateDisplay) then { [] call FUNC(calculate_target_solution); }; diff --git a/addons/atragmx/functions/fnc_create_dialog.sqf b/addons/atragmx/functions/fnc_create_dialog.sqf index 1646b0ec25..b4d51bd894 100644 --- a/addons/atragmx/functions/fnc_create_dialog.sqf +++ b/addons/atragmx/functions/fnc_create_dialog.sqf @@ -40,7 +40,7 @@ GVAR(showTargetRangeAssist) call FUNC(show_target_range_assist); GVAR(showTargetSpeedAssist) call FUNC(show_target_speed_assist); GVAR(showTargetSpeedAssistTimer) call FUNC(show_target_speed_assist_timer); -[GVAR(currentGun), false] call FUNC(change_gun); +[GVAR(currentGun), false, true] call FUNC(change_gun); { lbAdd [6000, _x select 0]; diff --git a/addons/atragmx/functions/fnc_cycle_gun_list.sqf b/addons/atragmx/functions/fnc_cycle_gun_list.sqf index 75f54c79fb..3796bb78e6 100644 --- a/addons/atragmx/functions/fnc_cycle_gun_list.sqf +++ b/addons/atragmx/functions/fnc_cycle_gun_list.sqf @@ -17,4 +17,4 @@ if (!(GVAR(showMainPage) || GVAR(showGunList))) exitWith {}; -[(GVAR(currentGun) + (count GVAR(gunList)) + _this) % (count GVAR(gunList)), true] call FUNC(change_gun); +[(GVAR(currentGun) + (count GVAR(gunList)) + _this) % (count GVAR(gunList)), true, true] call FUNC(change_gun); diff --git a/addons/atragmx/functions/fnc_restore_user_data.sqf b/addons/atragmx/functions/fnc_restore_user_data.sqf index 54d1f3cd2b..55b73cc5b5 100644 --- a/addons/atragmx/functions/fnc_restore_user_data.sqf +++ b/addons/atragmx/functions/fnc_restore_user_data.sqf @@ -16,7 +16,7 @@ #include "script_component.hpp" GVAR(currentUnit) = 0 max (profileNamespace getVariable ["ACE_ATragMX_currentUnit", 2]) min 2; -GVAR(currentGun) = 0 max (profileNamespace getVariable ["ACE_ATragMX_currentGun", 0]); +[(profileNamespace getVariable ["ACE_ATragMX_currentGun", 0]), true, false] call FUNC(change_gun); GVAR(currentTarget) = 0 max (profileNamespace getVariable ["ACE_ATragMX_currentTarget", 0]) min 3; GVAR(currentScopeUnit) = 0 max (profileNamespace getVariable ["ACE_ATragMX_currentScopeUnit", 0]) min 3; diff --git a/addons/atragmx/functions/fnc_toggle_gun_list.sqf b/addons/atragmx/functions/fnc_toggle_gun_list.sqf index 714e6e848d..1cc1f9338b 100644 --- a/addons/atragmx/functions/fnc_toggle_gun_list.sqf +++ b/addons/atragmx/functions/fnc_toggle_gun_list.sqf @@ -20,7 +20,7 @@ if (ctrlVisible 6000) then { true call FUNC(show_main_page); if (_this) then { - [lbCurSel 6000, true] call FUNC(change_gun); + [lbCurSel 6000, true, true] call FUNC(change_gun); }; } else { false call FUNC(show_main_page); From a83925dd2dd12215539d6e7cc7cbde0b67268aa0 Mon Sep 17 00:00:00 2001 From: Tachii <zaveruha007@gmail.com> Date: Sun, 19 Apr 2015 18:43:05 +0300 Subject: [PATCH 207/257] Update stringtable.xml --- addons/medical/stringtable.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 9645aa2289..9f862b9b3b 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -477,7 +477,7 @@ <English>Minor</English> <German>Gering</German> <Spanish>Menor</Spanish> - <Russian>Легкие ранения</Russian> + <Russian>Несрочная помощь</Russian> <Polish>Normalny</Polish> <French>Léger</French> <Czech>Minimální</Czech> @@ -487,7 +487,7 @@ <Key ID="STR_ACE_MEDICAL_TRIAGE_STATUS_DELAYED"> <English>Delayed</English> <Spanish>Retrasado</Spanish> - <Russian>Средние ранения</Russian> + <Russian>Срочная помощь</Russian> <Polish>Opóźniony</Polish> <French>Différé</French> <German>Verzögert</German> @@ -498,7 +498,7 @@ <Key ID="STR_ACE_MEDICAL_TRIAGE_STATUS_IMMEDIATE"> <English>Immediate</English> <Spanish>Inmediato</Spanish> - <Russian>Тяжелые ранения</Russian> + <Russian>Неотложная помощь</Russian> <Polish>Natychmiastowy</Polish> <French>Urgence Immédiate</French> <German>Sofort</German> @@ -1610,7 +1610,7 @@ <English>Pain Effect Type</English> <German>Schmerzeffekt-Typ</German> <Polish>Rodzaj efektu bólu</Polish> - <Russian>Эффект боли</Russian> + <Russian>Тип эффекта боли</Russian> <Italian>Pain Effect Type</Italian> <Spanish>Tipo de efecto de dolor</Spanish> <French>Type d'effet de douleur</French> From 596fadcba07b41cd95df71280dcd0444e3fc625d Mon Sep 17 00:00:00 2001 From: Tachii <zaveruha007@gmail.com> Date: Sun, 19 Apr 2015 18:51:35 +0300 Subject: [PATCH 208/257] ru translations fixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Не стоит додумывать правильные значения или то, как вы думаете это должно интерпертироваться. Нужно переводить то, что написано. Как пример Very Light Wounds - это не царапины, это очень лёгкие ранения. Царапины - это scratches --- addons/medical/stringtable.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 9f862b9b3b..053115f5d7 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -1529,7 +1529,7 @@ <English>Heavily wounded</English> <German>Schwer verwundet:</German> <Polish>Ciężko ranny</Polish> - <Russian>Сильные ранения</Russian> + <Russian>Сильно ранен</Russian> <Italian>Gravemente ferito</Italian> <Spanish>Gravemente herido</Spanish> <French>Lourdement blessé</French> @@ -1538,7 +1538,7 @@ <English>Lightly wounded</English> <German>Leicht verwundet:</German> <Polish>Lekko ranny</Polish> - <Russian>Легкие ранения</Russian> + <Russian>Легко ранен</Russian> <Italian>Leggermente ferito</Italian> <Spanish>Levemente herido</Spanish> <French>Légèrement blessé</French> @@ -1547,7 +1547,7 @@ <English>Very lightly wounded</English> <German>Sehr leicht verwundet:</German> <Polish>B. lekko ranny</Polish> - <Russian>Царапины</Russian> + <Russian>Очень легко ранен</Russian> <Italian>Ferito lievemente</Italian> <Spanish>Muy levemente herido</Spanish> <French>Très légèrement blessé</French> From a7d913b80e1d81b9a4714d82aad283f717b8be35 Mon Sep 17 00:00:00 2001 From: Tachii <zaveruha007@gmail.com> Date: Sun, 19 Apr 2015 18:54:47 +0300 Subject: [PATCH 209/257] Update stringtable.xml --- addons/medical/stringtable.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 053115f5d7..0287478bc5 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -1529,7 +1529,7 @@ <English>Heavily wounded</English> <German>Schwer verwundet:</German> <Polish>Ciężko ranny</Polish> - <Russian>Сильно ранен</Russian> + <Russian>Тяжело ранен</Russian> <Italian>Gravemente ferito</Italian> <Spanish>Gravemente herido</Spanish> <French>Lourdement blessé</French> From aad8d6b7850eab3c3f5ebe1f11e7eb19c465f40e Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Sun, 19 Apr 2015 09:04:42 -0700 Subject: [PATCH 210/257] Fixed: max litter scalar array, have internal values. --- addons/medical/ACE_Settings.hpp | 6 +++++- addons/medical/functions/fnc_handleCreateLitter.sqf | 5 +++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/addons/medical/ACE_Settings.hpp b/addons/medical/ACE_Settings.hpp index b42d5bc5a6..6ab24379c5 100644 --- a/addons/medical/ACE_Settings.hpp +++ b/addons/medical/ACE_Settings.hpp @@ -79,7 +79,11 @@ class ACE_Settings { displayName = "$STR_ACE_Medical_litterSimulationDetail"; description = "$STR_ACE_Medical_litterSimulationDetail_Desc"; typeName = "SCALAR"; - value = 500; + + value = 3; + values[] = {"Off", "Low", "Medium", "High", "Ultra"}; + _values[] = { 0, 50, 100, 1000, 5000 }; + isClientSettable = 1; }; class GVAR(litterCleanUpDelay) { diff --git a/addons/medical/functions/fnc_handleCreateLitter.sqf b/addons/medical/functions/fnc_handleCreateLitter.sqf index aca47250cd..ee7e591cd1 100644 --- a/addons/medical/functions/fnc_handleCreateLitter.sqf +++ b/addons/medical/functions/fnc_handleCreateLitter.sqf @@ -4,7 +4,7 @@ if(!hasInterface) exitWith { false }; PARAMS_3(_litterClass,_position,_direction); -private["_litterObject"]; +private["_litterObject", "_maxLitterCount"]; if (isNil QGVAR(allCreatedLitter)) then { GVAR(allCreatedLitter) = []; @@ -14,7 +14,8 @@ if (isNil QGVAR(allCreatedLitter)) then { _litterObject = _litterClass createVehicleLocal _position; _litterObject setDir _direction; -if((count GVAR(allCreatedLitter)) > GVAR(litterSimulationDetail) ) then { +_maxLitterCount = getArray (configFile >> "ACE_Settings" >> QGVAR(litterSimulationDetail) >> "_values") select GVAR(litterSimulationDetail); +if((count GVAR(allCreatedLitter)) > _maxLitterCount ) then { // gank the first litter object, and spawn ours. private["_oldLitter"]; _oldLitter = GVAR(allCreatedLitter) deleteAt 0; From 17899db086726ce830e79abd4f3a363e512f53c1 Mon Sep 17 00:00:00 2001 From: Glowbal <thomasskooi@live.nl> Date: Sun, 19 Apr 2015 19:49:56 +0200 Subject: [PATCH 211/257] added some missing privates --- addons/medical/functions/fnc_treatmentAdvanced_bandageLocal.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/medical/functions/fnc_treatmentAdvanced_bandageLocal.sqf b/addons/medical/functions/fnc_treatmentAdvanced_bandageLocal.sqf index 02626ff1fe..29bc6dc4d3 100644 --- a/addons/medical/functions/fnc_treatmentAdvanced_bandageLocal.sqf +++ b/addons/medical/functions/fnc_treatmentAdvanced_bandageLocal.sqf @@ -15,7 +15,7 @@ #include "script_component.hpp" -private ["_target", "_bandage", "_part", "_selectionName", "_openWounds", "_config", "_effectiveness","_mostEffectiveInjury", "_mostEffectiveSpot", "_woundEffectivenss", "_mostEffectiveInjury", "_impact", "_exit"]; +private ["_target", "_bandage", "_part", "_selectionName", "_openWounds", "_config", "_effectiveness","_mostEffectiveInjury", "_mostEffectiveSpot", "_woundEffectivenss", "_mostEffectiveInjury", "_impact", "_exit", "_specificClass", "_classID", "_effectivenessFound"]; _target = _this select 0; _bandage = _this select 1; _selectionName = _this select 2; From 60cab963bfdee0e020c5c1adb3d77178aa2279b6 Mon Sep 17 00:00:00 2001 From: Tachii <zaveruha007@gmail.com> Date: Sun, 19 Apr 2015 23:00:51 +0300 Subject: [PATCH 212/257] Update stringtable.xml --- addons/medical/stringtable.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 0287478bc5..bf0bde22f6 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -1529,7 +1529,7 @@ <English>Heavily wounded</English> <German>Schwer verwundet:</German> <Polish>Ciężko ranny</Polish> - <Russian>Тяжело ранен</Russian> + <Russian>Тяжелые ранения</Russian> <Italian>Gravemente ferito</Italian> <Spanish>Gravemente herido</Spanish> <French>Lourdement blessé</French> @@ -1538,7 +1538,7 @@ <English>Lightly wounded</English> <German>Leicht verwundet:</German> <Polish>Lekko ranny</Polish> - <Russian>Легко ранен</Russian> + <Russian>Легкие раненя</Russian> <Italian>Leggermente ferito</Italian> <Spanish>Levemente herido</Spanish> <French>Légèrement blessé</French> From 5038674aefb212f72ea3d566ab9d253e31732e1a Mon Sep 17 00:00:00 2001 From: Tachii <zaveruha007@gmail.com> Date: Sun, 19 Apr 2015 23:01:38 +0300 Subject: [PATCH 213/257] Update stringtable.xml --- addons/medical/stringtable.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index bf0bde22f6..cf6e4515b3 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -1538,7 +1538,7 @@ <English>Lightly wounded</English> <German>Leicht verwundet:</German> <Polish>Lekko ranny</Polish> - <Russian>Легкие раненя</Russian> + <Russian>Легкие ранения</Russian> <Italian>Leggermente ferito</Italian> <Spanish>Levemente herido</Spanish> <French>Légèrement blessé</French> @@ -1547,7 +1547,7 @@ <English>Very lightly wounded</English> <German>Sehr leicht verwundet:</German> <Polish>B. lekko ranny</Polish> - <Russian>Очень легко ранен</Russian> + <Russian>Незначительные ранения</Russian> <Italian>Ferito lievemente</Italian> <Spanish>Muy levemente herido</Spanish> <French>Très légèrement blessé</French> From f7d35d5593c1bc728c359e3e2a2c0e79ccaba815 Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Sun, 19 Apr 2015 22:30:13 +0200 Subject: [PATCH 214/257] =?UTF-8?q?The=20ATragMX=20now=20also=20accounts?= =?UTF-8?q?=20for=20vertical=20coriolis=20drift=20(E=C3=B6tv=C3=B6s=20effe?= =?UTF-8?q?ct)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../functions/fnc_calculate_range_card.sqf | 2 +- .../fnc_calculate_scope_base_angle.sqf | 2 +- .../functions/fnc_calculate_solution.sqf | 35 +++++++++++++------ .../fnc_calculate_target_solution.sqf | 2 +- .../functions/fnc_update_zero_range.sqf | 2 +- 5 files changed, 28 insertions(+), 15 deletions(-) diff --git a/addons/atragmx/functions/fnc_calculate_range_card.sqf b/addons/atragmx/functions/fnc_calculate_range_card.sqf index c11cf90550..f3f27f7d3e 100644 --- a/addons/atragmx/functions/fnc_calculate_range_card.sqf +++ b/addons/atragmx/functions/fnc_calculate_range_card.sqf @@ -77,4 +77,4 @@ GVAR(rangeCardData) = []; private ["_result"]; _result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000, - [_windSpeed1, _windSpeed2], _windDirection, _inclinationAngle, _targetSpeed, _targetRange, _bc, _dragModel, _atmosphereModel, true, _stabilityFactor, _twistDirection, _latitude] call FUNC(calculate_solution); + [_windSpeed1, _windSpeed2], _windDirection, _inclinationAngle, _targetSpeed, _targetRange, _bc, _dragModel, _atmosphereModel, true, _stabilityFactor, _twistDirection, _latitude, _directionOfFire] call FUNC(calculate_solution); diff --git a/addons/atragmx/functions/fnc_calculate_scope_base_angle.sqf b/addons/atragmx/functions/fnc_calculate_scope_base_angle.sqf index 76c54f63a9..fbd191bb79 100644 --- a/addons/atragmx/functions/fnc_calculate_scope_base_angle.sqf +++ b/addons/atragmx/functions/fnc_calculate_scope_base_angle.sqf @@ -35,6 +35,6 @@ _barometricPressure = 1013.25; _relativeHumidity = 0; private ["_result"]; -_result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000, [0, 0], 0, 0, 0, _zeroRange, _airFriction, 1, "ICAO", false, 1.5, 0, 0] call FUNC(calculate_solution); +_result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000, [0, 0], 0, 0, 0, _zeroRange, _airFriction, 1, "ICAO", false, 1.5, 0, 0, 0] call FUNC(calculate_solution); _scopeBaseAngle + (_result select 0) / 60 diff --git a/addons/atragmx/functions/fnc_calculate_solution.sqf b/addons/atragmx/functions/fnc_calculate_solution.sqf index 2d70e8dca1..f90b299ce9 100644 --- a/addons/atragmx/functions/fnc_calculate_solution.sqf +++ b/addons/atragmx/functions/fnc_calculate_solution.sqf @@ -43,7 +43,7 @@ */ #include "script_component.hpp" -private ["_scopeBaseAngle", "_bulletMass", "_boreHeight", "_airFriction", "_muzzleVelocity", "_temperature", "_barometricPressure", "_relativeHumidity", "_simSteps", "_windSpeed1", "_windSpeed2", "_windDirection", "_inclinationAngle", "_targetSpeed", "_targetRange", "_drag", "_bc", "_dragModel", "_atmosphereModel", "_storeRangeCardData", "_stabilityFactor", "_twistDirection", "_latitude"]; +private ["_scopeBaseAngle", "_bulletMass", "_boreHeight", "_airFriction", "_muzzleVelocity", "_temperature", "_barometricPressure", "_relativeHumidity", "_simSteps", "_windSpeed1", "_windSpeed2", "_windDirection", "_inclinationAngle", "_targetSpeed", "_targetRange", "_drag", "_bc", "_dragModel", "_atmosphereModel", "_storeRangeCardData", "_stabilityFactor", "_twistDirection", "_latitude", "_directionOfFire"]; _scopeBaseAngle = _this select 0; _bulletMass = _this select 1; _boreHeight = _this select 2; @@ -66,6 +66,7 @@ _storeRangeCardData = _this select 17; _stabilityFactor = _this select 18; _twistDirection = _this select 19; _latitude = _this select 20; +_directionOfFire = _this select 21; private ["_bulletPos", "_bulletVelocity", "_bulletAccel", "_bulletSpeed", "_gravity", "_deltaT"]; _bulletPos = [0, 0, 0]; @@ -114,6 +115,12 @@ _speedTotal = 0; _stepsTotal = 0; _speedAverage = 0; +private ["_eoetvoesMultiplier"]; +_eoetvoesMultiplier = 0; +if (missionNamespace getVariable [QEGVAR(advanced_ballistics,EoetvoesEnabled), false]) then { + _eoetvoesMultiplier = 2 * (0.0000729 * _muzzleVelocity / -9.80665) * cos(_latitude) * sin(_directionOfFire); +}; + _TOF = 0; _bulletPos set [0, 0]; @@ -169,16 +176,19 @@ while {_TOF < 15 && (_bulletPos select 1) < _targetRange} do { _kineticEnergy = 0.5 * (_bulletMass / 1000 * (_bulletSpeed ^ 2)); _kineticEnergy = _kineticEnergy * 0.737562149; - if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,CoriolisEnabled), false])) then { - if ((_bulletPos select 1) > 0) then { + if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (_bulletPos select 1) > 0) then { + if (missionNamespace getVariable [QEGVAR(advanced_ballistics,CoriolisEnabled), false]) then { _horizontalDeflection = 0.0000729 * ((_bulletPos select 1) ^ 2) * sin(_latitude) / _speedAverage; _horizontalCoriolis = - atan(_horizontalDeflection / (_bulletPos select 1)); _windage1 = _windage1 + _horizontalCoriolis; _windage2 = _windage2 + _horizontalCoriolis; }; - }; - if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,SpinDriftEnabled), false])) then { - if ((_bulletPos select 1) > 0) then { + if (missionNamespace getVariable [QEGVAR(advanced_ballistics,EoetvoesEnabled), false]) then { + _verticalDeflection = (_bulletPos select 2) * _eoetvoesMultiplier; + _verticalCoriolis = - atan(_verticalDeflection / (_bulletPos select 1)); + _elevation = _elevation + _verticalCoriolis; + }; + if (missionNamespace getVariable [QEGVAR(advanced_ballistics,SpinDriftEnabled), false]) then { _spinDeflection = _twistDirection * 0.0254 * 1.25 * (_stabilityFactor + 1.2) * _TOF ^ 1.83; _spinDrift = - atan(_spinDeflection / (_bulletPos select 1)); _windage1 = _windage1 + _spinDrift; @@ -206,16 +216,19 @@ if (_targetRange != 0) then { _kineticEnergy = 0.5 * (_bulletMass / 1000 * (_bulletSpeed ^ 2)); _kineticEnergy = _kineticEnergy * 0.737562149; -if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,CoriolisEnabled), false])) then { - if ((_bulletPos select 1) > 0) then { +if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (_bulletPos select 1) > 0) then { + if (missionNamespace getVariable [QEGVAR(advanced_ballistics,CoriolisEnabled), false]) then { _horizontalDeflection = 0.0000729 * ((_bulletPos select 1) ^ 2) * sin(_latitude) / _speedAverage; _horizontalCoriolis = - atan(_horizontalDeflection / (_bulletPos select 1)); _windage1 = _windage1 + _horizontalCoriolis; _windage2 = _windage2 + _horizontalCoriolis; }; -}; -if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,SpinDriftEnabled), false])) then { - if ((_bulletPos select 1) > 0) then { + if (missionNamespace getVariable [QEGVAR(advanced_ballistics,EoetvoesEnabled), false]) then { + _verticalDeflection = (_bulletPos select 2) * _eoetvoesMultiplier; + _verticalCoriolis = - atan(_verticalDeflection / (_bulletPos select 1)); + _elevation = _elevation + _verticalCoriolis; + }; + if (missionNamespace getVariable [QEGVAR(advanced_ballistics,SpinDriftEnabled), false]) then { _spinDeflection = _twistDirection * 0.0254 * 1.25 * (_stabilityFactor + 1.2) * _TOF ^ 1.83; _spinDrift = - atan(_spinDeflection / (_bulletPos select 1)); _windage1 = _windage1 + _spinDrift; diff --git a/addons/atragmx/functions/fnc_calculate_target_solution.sqf b/addons/atragmx/functions/fnc_calculate_target_solution.sqf index c8a3683498..641551fca1 100644 --- a/addons/atragmx/functions/fnc_calculate_target_solution.sqf +++ b/addons/atragmx/functions/fnc_calculate_target_solution.sqf @@ -72,7 +72,7 @@ _targetRange = GVAR(targetRange) select GVAR(currentTarget); private ["_result"]; _result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000, - [_windSpeed1, _windSpeed2], _windDirection, _inclinationAngle, _targetSpeed, _targetRange, _bc, _dragModel, _atmosphereModel, false, _stabilityFactor, _twistDirection, _latitude] call FUNC(calculate_solution); + [_windSpeed1, _windSpeed2], _windDirection, _inclinationAngle, _targetSpeed, _targetRange, _bc, _dragModel, _atmosphereModel, false, _stabilityFactor, _twistDirection, _latitude, _directionOfFire] call FUNC(calculate_solution); GVAR(elevationOutput) set [GVAR(currentTarget), _result select 0]; GVAR(windage1Output) set [GVAR(currentTarget), (_result select 1) select 0]; diff --git a/addons/atragmx/functions/fnc_update_zero_range.sqf b/addons/atragmx/functions/fnc_update_zero_range.sqf index a5cab3755e..299c321d33 100644 --- a/addons/atragmx/functions/fnc_update_zero_range.sqf +++ b/addons/atragmx/functions/fnc_update_zero_range.sqf @@ -44,7 +44,7 @@ _barometricPressure = GVAR(barometricPressure); _relativeHumidity = GVAR(relativeHumidity); private ["_result"]; -_result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000, [0, 0], 0, 0, 0, _zeroRange, _bc, _dragModel, _atmosphereModel, false, 1.5, 0, 0] call FUNC(calculate_solution); +_result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000, [0, 0], 0, 0, 0, _zeroRange, _bc, _dragModel, _atmosphereModel, false, 1.5, 0, 0, 0] call FUNC(calculate_solution); GVAR(workingMemory) set [2, _zeroRange]; GVAR(workingMemory) set [3, _scopeBaseAngle + (_result select 0) / 60]; From 6c8b58789024df653d90e4502cb895c48114f2a0 Mon Sep 17 00:00:00 2001 From: Tachii <zaveruha007@gmail.com> Date: Mon, 20 Apr 2015 00:02:01 +0300 Subject: [PATCH 215/257] Update stringtable.xml --- addons/medical/stringtable.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index cf6e4515b3..06361528e3 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -1547,7 +1547,7 @@ <English>Very lightly wounded</English> <German>Sehr leicht verwundet:</German> <Polish>B. lekko ranny</Polish> - <Russian>Незначительные ранения</Russian> + <Russian>Царапины</Russian> <Italian>Ferito lievemente</Italian> <Spanish>Muy levemente herido</Spanish> <French>Très légèrement blessé</French> From 8530684fa6ff86d697f7a1a03fc0d735822de1ec Mon Sep 17 00:00:00 2001 From: Grzegorz Sikora <gienkov.grzegorz@gmail.com> Date: Sun, 19 Apr 2015 23:09:11 +0200 Subject: [PATCH 216/257] PL fix #2 --- addons/attach/stringtable.xml | 7 ++++--- addons/captives/stringtable.xml | 5 +++-- addons/dragging/stringtable.xml | 5 +++-- addons/explosives/stringtable.xml | 9 +++++---- addons/interaction/stringtable.xml | 7 ++++--- 5 files changed, 19 insertions(+), 14 deletions(-) diff --git a/addons/attach/stringtable.xml b/addons/attach/stringtable.xml index 33eb0d9cac..df8fc26c3c 100644 --- a/addons/attach/stringtable.xml +++ b/addons/attach/stringtable.xml @@ -1,4 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> +<!-- Edited with tabler. --> <Project name="ACE"> <Package name="Attach"> <Key ID="STR_ACE_Attach_AttachDetach"> @@ -183,7 +184,7 @@ <English>%1<br/>Attached</English> <German>%1<br/>befestigt</German> <Spanish>%1<br/>acoplada</Spanish> - <Polish>%1<br/>Przyczepiono</Polish> + <Polish>%1<br/>przyczepiono</Polish> <French>%1<br/>attachée</French> <Czech>%1<br/>Připnutý</Czech> <Portuguese>%1<br/>Acoplada</Portuguese> @@ -195,7 +196,7 @@ <English>%1<br/>Detached</English> <German>%1<br/>entfernt</German> <Spanish>%1<br/>quitada</Spanish> - <Polish>%1<br/>Odczepiono</Polish> + <Polish>%1<br/>odczepiono</Polish> <French>%1<br/>détachée</French> <Czech>%1<br/>Odepnutý</Czech> <Portuguese>%1<br/>Separada</Portuguese> @@ -204,4 +205,4 @@ <Russian>%1<br/>отсоединен(-а)</Russian> </Key> </Package> -</Project> +</Project> \ No newline at end of file diff --git a/addons/captives/stringtable.xml b/addons/captives/stringtable.xml index 0a88c5d7d8..6e02114351 100644 --- a/addons/captives/stringtable.xml +++ b/addons/captives/stringtable.xml @@ -1,4 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> +<!-- Edited with tabler. --> <Project name="ACE"> <Package name="Captives"> <Key ID="STR_ACE_Captives_SetCaptive"> @@ -6,7 +7,7 @@ <German>Gefangen nehmen</German> <Spanish>Tomar prisionero</Spanish> <French>Capturer le prisonnier</French> - <Polish>Weź więźnia</Polish> + <Polish>Aresztuj</Polish> <Czech>Zajmout Osobu</Czech> <Italian>Arresta il Prigioniero</Italian> <Portuguese>Tomar Prisioneiro</Portuguese> @@ -53,7 +54,7 @@ <English>You need to take him as prisoner first!</English> <German>Du musst ihn zuerst gefangen nehmen.</German> <Spanish>Necesitas hacerle prisionero primero!</Spanish> - <Polish>Najpierw musisz wziąć go jako więźnia!</Polish> + <Polish>Najpierw musisz go aresztować!</Polish> <French>Vous devez d'abord le capturer!</French> <Czech>Musíš ho nejdříve zajmout!</Czech> <Italian>Prima devi arrestarlo!</Italian> diff --git a/addons/dragging/stringtable.xml b/addons/dragging/stringtable.xml index b02979e279..378ce353bd 100644 --- a/addons/dragging/stringtable.xml +++ b/addons/dragging/stringtable.xml @@ -1,4 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> +<!-- Edited with tabler. --> <Project name="ACE"> <Package name="Dragging"> <Key ID="STR_ACE_Dragging_Drag"> @@ -29,7 +30,7 @@ <English>Item too heavy</English> <German>Gegenstand ist zu schwer</German> <Spanish>Articulo demasiado pesado</Spanish> - <Polish>Przedmiot zbyt ciężki</Polish> + <Polish>Przedmiot jest zbyt ciężki</Polish> <French>Objet trop lourd</French> <Portuguese>Não é possível carregar o item devido a seu peso</Portuguese> <Italian>Non è possibile trascinare l'oggetto a causa del suo peso</Italian> @@ -50,4 +51,4 @@ <Russian>Нести</Russian> </Key> </Package> -</Project> +</Project> \ No newline at end of file diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml index 6898274307..3299cb980c 100644 --- a/addons/explosives/stringtable.xml +++ b/addons/explosives/stringtable.xml @@ -1,4 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> +<!-- Edited with tabler. --> <Project name="ACE"> <Package name="Explosives"> <Key ID="STR_ACE_Explosives_Menu"> @@ -233,7 +234,7 @@ <English>Dial</English> <German>Wählen</German> <Spanish>Marcar</Spanish> - <Polish>Wybierz mumer</Polish> + <Polish>Wybierz numer</Polish> <French>Composer</French> <Czech>Vytočit</Czech> <Italian>Composizione numero</Italian> @@ -281,7 +282,7 @@ <English>Detonate Menu</English> <German>"Zünden"-Menü</German> <Spanish>Menú de detonación</Spanish> - <Polish>Menu detonowania</Polish> + <Polish>Menu detonacji</Polish> <French>Menu de mise à feu</French> <Czech>Menu Detonace</Czech> <Italian>Menù di detonazione</Italian> @@ -484,7 +485,7 @@ <German>Zündet Sprengladungen wenn losgelassen.</German> <French>Déclenche la mise à feu d'un explosif lorsqu'il est libéré.</French> <Czech>Používaný k vzdálenému odpálení, při uvolnění odpálí výbušniny</Czech> - <Polish>Używany w celu zdalnej detonacji ładunków kiedy jego operator zostanie zabity.</Polish> + <Polish>Używany w celu zdalnej detonacji ładunków, kiedy jego operator zostanie zabity.</Polish> <Spanish>Utilizado para detonar explosivos remotamente al soltarlo.</Spanish> <Hungarian>Robbanóanyagok távoli robbantásához való, elengedéskor gyújt.</Hungarian> <Russian>Используется для дистанционного подрыва, после смерти оператора.</Russian> @@ -502,4 +503,4 @@ <Italian>Raccogli</Italian> </Key> </Package> -</Project> +</Project> \ No newline at end of file diff --git a/addons/interaction/stringtable.xml b/addons/interaction/stringtable.xml index 9064e5c2d0..41068c9e2d 100644 --- a/addons/interaction/stringtable.xml +++ b/addons/interaction/stringtable.xml @@ -1,4 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> +<!-- Edited with tabler. --> <Project name="ACE"> <Package name="Interaction"> <Key ID="STR_ACE_Interaction_MainAction"> @@ -430,7 +431,7 @@ <Spanish>Te tocaron el hombro DERECHO</Spanish> <German>Dir wurde auf die rechte Schulter geklopft</German> <French>On te tape sur l'épaule droite</French> - <Polish>Zostałeś klepnięty po ramieniu</Polish> + <Polish>Zostałeś klepnięty w prawe ramię</Polish> <Hungarian>Megveregették a JOBB válladat.</Hungarian> <Czech>Někdo tě poklepal na PRAVÉ rameno</Czech> <Russian>Вас похлопали по ПРАВОМУ плечу</Russian> @@ -442,7 +443,7 @@ <Spanish>Te tocaron el hombro IZQUIERDO.</Spanish> <German>Dir wurde auf die linke Schulter geklopft</German> <French>On te tape sur l'épaule gauche</French> - <Polish>Zostałeś klepnięty po ramieniu</Polish> + <Polish>Zostałeś klepnięty w lewe ramię</Polish> <Hungarian>Megveregették a BAL válladat.</Hungarian> <Czech>Někdo tě poklepal na LEVÉ rameno</Czech> <Russian>Вас похлопали по ЛЕВОМУ плечу</Russian> @@ -734,4 +735,4 @@ <Italian>Passeggeri</Italian> </Key> </Package> -</Project> +</Project> \ No newline at end of file From 20293bd11b4b36c8e6c3ebc51429935f60d1644b Mon Sep 17 00:00:00 2001 From: Tachii <zaveruha007@gmail.com> Date: Mon, 20 Apr 2015 00:26:20 +0300 Subject: [PATCH 217/257] Update stringtable.xml --- addons/medical/stringtable.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 06361528e3..e85283c471 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -1610,7 +1610,7 @@ <English>Pain Effect Type</English> <German>Schmerzeffekt-Typ</German> <Polish>Rodzaj efektu bólu</Polish> - <Russian>Тип эффекта боли</Russian> + <Russian>Визуальный эффект боли</Russian> <Italian>Pain Effect Type</Italian> <Spanish>Tipo de efecto de dolor</Spanish> <French>Type d'effet de douleur</French> From ac201d334c70bb6a5201776dd4ce63dd9129ea52 Mon Sep 17 00:00:00 2001 From: ViperMaul <vipermaul@gmail.com> Date: Sun, 19 Apr 2015 14:51:51 -0700 Subject: [PATCH 218/257] Added support for building server.pbo Added new optionals_root to make.cfg Updated version Added global variables. #552 --- tools/make.cfg | 5 ++++ tools/make.py | 67 ++++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 62 insertions(+), 10 deletions(-) diff --git a/tools/make.cfg b/tools/make.cfg index 1eb02b826f..e89568d60e 100644 --- a/tools/make.cfg +++ b/tools/make.cfg @@ -39,6 +39,11 @@ prefix = z\ace\addons # Default: <work_drive>\<prefix>\addons module_root = P:\z\ace\addons +# Set the location where the optional addon source folders (i.e. P:\z\ace\optionals) +# Default: <work_drive>\<prefix>\optionals +optionals_root = P:\z\ace\optionals + + # Directory where the built addon will be saved. # Default: release release_dir = P:\z\ace\release diff --git a/tools/make.py b/tools/make.py index ce5b770383..ffa5f75e25 100644 --- a/tools/make.py +++ b/tools/make.py @@ -30,7 +30,7 @@ ############################################################################### -__version__ = "0.3dev" +__version__ = "0.4" import sys @@ -54,6 +54,13 @@ import re if sys.platform == "win32": import winreg +######## GLOBALS ######### +work_drive = "" +module_root = "" +release_dir = "" +module_root_parent = "" +optionals_root = "" + ############################################################################### # http://akiscode.com/articles/sha-1directoryhash.shtml # Copyright (c) 2009 Stephen Akiki @@ -300,7 +307,7 @@ def copy_important_files(source_dir,destination_dir): #copy importantFiles try: - print_blue("Searching for important files in " + source_dir) + print_blue("\nSearching for important files in " + source_dir) for file in importantFiles: print_green("Copying file => " + os.path.join(source_dir,file)) shutil.copyfile(os.path.join(source_dir,file),os.path.join(destination_dir,file)) @@ -308,12 +315,10 @@ def copy_important_files(source_dir,destination_dir): print_error("COPYING IMPORTANT FILES.") raise - print("") - #copy all extension dlls try: os.chdir(os.path.join(source_dir)) - print_blue("Searching for DLLs in " + os.getcwd()) + print_blue("\nSearching for DLLs in " + os.getcwd()) filenames = glob.glob("*.dll") if not filenames: @@ -328,11 +333,42 @@ def copy_important_files(source_dir,destination_dir): raise finally: os.chdir(originalDir) + +def copy_optionals_for_building(mod): + src_directories = os.listdir(optionals_root) + print("") + try: + for dir_name in src_directories: + mod.append(dir_name) + if (dir_name == "userconfig"): + destination = os.path.join(work_drive,dir_name) + else: + destination = os.path.join(module_root,dir_name) + + print("Temporarily copying " + os.path.join(optionals_root,dir_name) + " => " + destination + " for building.") + shutil.rmtree(destination, True) + shutil.copytree(os.path.join(optionals_root,dir_name), destination) + except: + print_error("Copy Optionals Failed") + raise + +def cleanup_optionals(mod): + try: + for dir_name in mod: + if (dir_name == "userconfig"): + destination = os.path.join(work_drive,dir_name) + else: + destination = os.path.join(module_root,dir_name) + print("Cleaning " + destination) + shutil.rmtree(destination) + except: + print_error("Cleaning Optionals Failed") + raise ############################################################################### def main(argv): """Build an Arma addon suite in a directory from rules in a make.cfg file.""" - print_blue(("\nmake.py for Arma, v" + __version__)) + print_blue(("\nmake.py for Arma, modified for Advanced Combat Environment v" + __version__)) if sys.platform != "win32": print_error("Non-Windows platform (Cygwin?). Please re-run from cmd.") @@ -447,6 +483,12 @@ See the make.cfg file for additional build options. cfg = configparser.ConfigParser(); try: + global work_drive + global module_root + global release_dir + global module_root_parent + global optionals_root + cfg.read(os.path.join(make_root, "make.cfg")) # Project name (with @ symbol) @@ -487,7 +529,7 @@ See the make.cfg file for additional build options. # Project module Root module_root_parent = os.path.abspath(os.path.join(os.path.join(work_drive, prefix), os.pardir)) module_root = cfg.get(make_target, "module_root", fallback=os.path.join(make_root_parent, "addons")) - ace_optionals_root = os.path.join(module_root_parent, "optionals") + optionals_root = os.path.join(module_root_parent, "optionals") print_green ("module_root: " + module_root) if (os.path.isdir(module_root)): @@ -496,10 +538,10 @@ See the make.cfg file for additional build options. print_error ("Directory " + module_root + " does not exist.") sys.exit() - if (os.path.isdir(ace_optionals_root)): - print_green ("ace_optionals_root: " + ace_optionals_root) + if (os.path.isdir(optionals_root)): + print_green ("optionals_root: " + optionals_root) else: - print_error ("Directory " + ace_optionals_root + " does not exist.") + print_error ("Directory " + optionals_root + " does not exist.") sys.exit() print_green ("release_dir: " + release_dir) @@ -552,6 +594,10 @@ See the make.cfg file for additional build options. print ("No cache found.") cache = {} + #Temporarily copy optionals_root for building. They will be removed later. + optionals_modules = [] + copy_optionals_for_building(optionals_modules) + # Get list of subdirs in make root. dirs = next(os.walk(module_root))[1] @@ -910,6 +956,7 @@ See the make.cfg file for additional build options. except: print_error("Could not copy files. Is Arma 3 running?") + cleanup_optionals(optionals_modules) if __name__ == "__main__": main(sys.argv) input("Press Enter to continue...") From 9c11e47ef45ca29ffa3ef096120ebb8f87492491 Mon Sep 17 00:00:00 2001 From: ViperMaul <vipermaul@gmail.com> Date: Sun, 19 Apr 2015 15:28:54 -0700 Subject: [PATCH 219/257] Missing changes that Git Extensions client left out #552 --- tools/make.py | 53 ++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 46 insertions(+), 7 deletions(-) diff --git a/tools/make.py b/tools/make.py index ffa5f75e25..f036bd0c83 100644 --- a/tools/make.py +++ b/tools/make.py @@ -334,8 +334,30 @@ def copy_important_files(source_dir,destination_dir): finally: os.chdir(originalDir) -def copy_optionals_for_building(mod): +def copy_optionals_for_building(mod,pbos): src_directories = os.listdir(optionals_root) + current_dir = os.getcwd() + + print("") + try: + + #special server.pbo processing + files = glob.glob(os.path.join(release_dir, "@ace","optionals","*.pbo")) + for file in files: + file_name = os.path.basename(file) + print ("Adding the following file: " + file_name) + pbos.append(file_name) + pbo_path = os.path.join(release_dir, "@ace","optionals",file_name) + if (os.path.isfile(pbo_path)): + print("Moving " + pbo_path + " for processing.") + shutil.move(pbo_path, os.path.join(release_dir,"@ace","addons",file_name)) + + except: + print_error("Error in moving") + raise + finally: + os.chdir(current_dir) + print("") try: for dir_name in src_directories: @@ -344,23 +366,39 @@ def copy_optionals_for_building(mod): destination = os.path.join(work_drive,dir_name) else: destination = os.path.join(module_root,dir_name) - + print("Temporarily copying " + os.path.join(optionals_root,dir_name) + " => " + destination + " for building.") shutil.rmtree(destination, True) shutil.copytree(os.path.join(optionals_root,dir_name), destination) except: print_error("Copy Optionals Failed") raise + finally: + os.chdir(current_dir) -def cleanup_optionals(mod): - try: +def cleanup_optionals(mod,pbos): + print("") + try: for dir_name in mod: if (dir_name == "userconfig"): destination = os.path.join(work_drive,dir_name) else: destination = os.path.join(module_root,dir_name) + print("Cleaning " + destination) + + try: + file_name = "ace_{}.pbo".format(dir_name) + src_file_path = os.path.join(release_dir, "@ace","addons",file_name) + dst_file_path = os.path.join(release_dir, "@ace","optionals",file_name) + if (os.path.isfile(src_file_path)): + #print("Preserving " + file_name) + os.renames(src_file_path,dst_file_path) + except FileExistsError: + print_error(file_name + " already exists") + continue shutil.rmtree(destination) + except: print_error("Cleaning Optionals Failed") raise @@ -596,7 +634,8 @@ See the make.cfg file for additional build options. #Temporarily copy optionals_root for building. They will be removed later. optionals_modules = [] - copy_optionals_for_building(optionals_modules) + optional_files = [] + copy_optionals_for_building(optionals_modules,optional_files) # Get list of subdirs in make root. dirs = next(os.walk(module_root))[1] @@ -955,8 +994,8 @@ See the make.cfg file for additional build options. shutil.copytree(os.path.join(module_root, release_dir, project), os.path.join(a3_path, project)) except: print_error("Could not copy files. Is Arma 3 running?") - - cleanup_optionals(optionals_modules) + + cleanup_optionals(optionals_modules,optional_files) if __name__ == "__main__": main(sys.argv) input("Press Enter to continue...") From 5793175c1fe75cec868816c1b93c8d4fcbf0b8eb Mon Sep 17 00:00:00 2001 From: ViperMaul <vipermaul@gmail.com> Date: Sun, 19 Apr 2015 16:00:34 -0700 Subject: [PATCH 220/257] Fixing issue when release directory is missing #552 --- tools/make.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/make.py b/tools/make.py index f036bd0c83..5146a666bb 100644 --- a/tools/make.py +++ b/tools/make.py @@ -583,7 +583,6 @@ See the make.cfg file for additional build options. sys.exit() print_green ("release_dir: " + release_dir) - copy_important_files(module_root_parent,os.path.join(release_dir, "@ace")) except: raise @@ -635,7 +634,7 @@ See the make.cfg file for additional build options. #Temporarily copy optionals_root for building. They will be removed later. optionals_modules = [] optional_files = [] - copy_optionals_for_building(optionals_modules,optional_files) + copy_optionals_for_building(optionals_modules,optional_files) # Get list of subdirs in make root. dirs = next(os.walk(module_root))[1] @@ -994,7 +993,8 @@ See the make.cfg file for additional build options. shutil.copytree(os.path.join(module_root, release_dir, project), os.path.join(a3_path, project)) except: print_error("Could not copy files. Is Arma 3 running?") - + + copy_important_files(module_root_parent,os.path.join(release_dir, "@ace")) cleanup_optionals(optionals_modules,optional_files) if __name__ == "__main__": main(sys.argv) From f928f37e264bdbb7b476e1c4a5d9f8d958a0d7b3 Mon Sep 17 00:00:00 2001 From: esteldunedain <nicolas.d.badano@gmail.com> Date: Mon, 20 Apr 2015 01:16:51 -0300 Subject: [PATCH 221/257] Eliminate interact_menu fps drops due to high nearby object counts. Instead of reanalizing every frame which actions points should be rendered based on distance, that job is now done only 5 times per second. The rest of the frames the action points from the last frame are rerendered.. Close #434 --- addons/interact_menu/XEH_preInit.sqf | 3 +++ .../interact_menu/functions/fnc_keyDown.sqf | 1 + .../functions/fnc_renderActionPoints.sqf | 19 +++++++++++++++++-- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/addons/interact_menu/XEH_preInit.sqf b/addons/interact_menu/XEH_preInit.sqf index b4a3504cdd..747da7083e 100644 --- a/addons/interact_menu/XEH_preInit.sqf +++ b/addons/interact_menu/XEH_preInit.sqf @@ -49,4 +49,7 @@ GVAR(expandedTime) = diag_tickTime; GVAR(iconCtrls) = []; GVAR(iconCount) = 0; +GVAR(foundActions) = []; +GVAR(lastTimeSearchedActions) = -1000; + ADDON = true; diff --git a/addons/interact_menu/functions/fnc_keyDown.sqf b/addons/interact_menu/functions/fnc_keyDown.sqf index 47fdfb1951..123c1d45e2 100644 --- a/addons/interact_menu/functions/fnc_keyDown.sqf +++ b/addons/interact_menu/functions/fnc_keyDown.sqf @@ -29,6 +29,7 @@ if (_menuType == 0) then { }; GVAR(keyDownTime) = diag_tickTime; GVAR(openedMenuType) = _menuType; +GVAR(lastTimeSearchedActions) = -1000; GVAR(useCursorMenu) = (vehicle ACE_player != ACE_player) || visibleMap || diff --git a/addons/interact_menu/functions/fnc_renderActionPoints.sqf b/addons/interact_menu/functions/fnc_renderActionPoints.sqf index 6ed4b41de4..78d5418e5a 100644 --- a/addons/interact_menu/functions/fnc_renderActionPoints.sqf +++ b/addons/interact_menu/functions/fnc_renderActionPoints.sqf @@ -24,6 +24,9 @@ _fnc_renderNearbyActions = { _cameraPos = (positionCameraToWorld [0, 0, 0]) call EFUNC(common,positionToASL); _cameraDir = ((positionCameraToWorld [0, 0, 1]) call EFUNC(common,positionToASL)) vectorDiff _cameraPos; + GVAR(foundActions) = []; + GVAR(lastTimeSearchedActions) = diag_tickTime; + _numInteractObjects = 0; _nearestObjects = nearestObjects [ACE_player, ["All"], 13]; { @@ -46,6 +49,7 @@ _fnc_renderNearbyActions = { _action = _x; if ([_target, _action] call FUNC(renderBaseMenu)) then { _numInteractions = _numInteractions + 1; + GVAR(foundActions) pushBack [_target, _action]; }; }; } forEach GVAR(objectActionList); @@ -57,6 +61,7 @@ _fnc_renderNearbyActions = { // Try to render the menu if ([_target, _action] call FUNC(renderBaseMenu)) then { _numInteractions = _numInteractions + 1; + GVAR(foundActions) pushBack [_target, _action]; }; } forEach _classActions; @@ -71,7 +76,11 @@ _fnc_renderNearbyActions = { } forEach _nearestObjects; }; - +_fnc_renderLastFrameActions = { + { + _x call FUNC(renderBaseMenu); + } forEach GVAR(foundActions); +}; _fnc_renderSelfActions = { _target = _this; @@ -109,7 +118,13 @@ _fnc_renderSelfActions = { if (GVAR(openedMenuType) == 0) then { if (vehicle ACE_player == ACE_player) then { - call _fnc_renderNearbyActions; + if (diag_tickTime > GVAR(lastTimeSearchedActions) + 0.20) then { + // Once every 0.2 secs, collect nearby objects active and visible action points and render them + call _fnc_renderNearbyActions; + } else { + // The rest of the frames just draw the same action points rendered the last frame + call _fnc_renderLastFrameActions; + }; } else { (vehicle ACE_player) call _fnc_renderSelfActions; }; From 8ff72e7fc8e17ec740bc74e9341a8e4c7a1bcdc8 Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Mon, 20 Apr 2015 10:35:29 +0200 Subject: [PATCH 222/257] Fixed another bug in the unit conversion code --- addons/atragmx/functions/fnc_update_gun_ammo_data.sqf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/atragmx/functions/fnc_update_gun_ammo_data.sqf b/addons/atragmx/functions/fnc_update_gun_ammo_data.sqf index 3627197185..94801cad39 100644 --- a/addons/atragmx/functions/fnc_update_gun_ammo_data.sqf +++ b/addons/atragmx/functions/fnc_update_gun_ammo_data.sqf @@ -47,10 +47,10 @@ if (GVAR(currentUnit) != 2) then { } else { ctrlSetText [120050, Str(Round(GVAR(workingMemory) select 1))]; }; -if (GVAR(currentUnit) == 2) then { - ctrlSetText [120060, Str(Round(GVAR(workingMemory) select 2))]; -} else { +if (GVAR(currentUnit) == 1) then { ctrlSetText [120060, Str(Round((GVAR(workingMemory) select 2) * 1.0936133))]; +} else { + ctrlSetText [120060, Str(Round(GVAR(workingMemory) select 2))]; }; if (GVAR(currentUnit) == 2) then { From 2bf47ca0c4777d8282be3f1b7ff4c782ca20d3f1 Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Mon, 20 Apr 2015 10:36:20 +0200 Subject: [PATCH 223/257] Added two more asterix (*) meter indicator GUI elements --- addons/atragmx/RscTitles.hpp | 14 ++++++++++++++ .../atragmx/functions/fnc_show_gun_ammo_data.sqf | 2 +- addons/atragmx/functions/fnc_show_target_data.sqf | 2 +- .../atragmx/functions/fnc_update_gun_ammo_data.sqf | 5 +++++ .../atragmx/functions/fnc_update_target_data.sqf | 5 +++++ 5 files changed, 26 insertions(+), 2 deletions(-) diff --git a/addons/atragmx/RscTitles.hpp b/addons/atragmx/RscTitles.hpp index 905212d5c9..fe45ef67f5 100644 --- a/addons/atragmx/RscTitles.hpp +++ b/addons/atragmx/RscTitles.hpp @@ -1115,6 +1115,13 @@ class ATragMX_Display { idc=120060; y=0.265*safezoneH+safezoneY+0.520; }; + class TEXT_GUN_AMMO_DATA_ZERO_RANGE_METER_INDICATOR: TEXT_GUN_AMMO_DATA_BORE_HEIGHT { + idc=120061; + w=0.05; + x=0.550*safezoneW+safezoneX+0.315; + y=0.265*safezoneH+safezoneY+0.520; + text=""; + }; class TEXT_GUN_AMMO_DATA_DONE: TEXT_TARGET_SPEED_ASSIST_DONE { idc=12008; action=QUOTE(1 call FUNC(toggle_gun_ammo_data)); @@ -1327,6 +1334,13 @@ class ATragMX_Display { idc=140060; y=0.265*safezoneH+safezoneY+0.520; }; + class TEXT_TARGET_DATA_TARGET_RANGE_METER_INDICATOR: TEXT_TARGET_DATA_LATITUDE { + idc=140061; + w=0.05; + x=0.550*safezoneW+safezoneX+0.315; + y=0.265*safezoneH+safezoneY+0.520; + text=""; + }; class TEXT_TARGET_DATA_DONE: TEXT_TARGET_SPEED_ASSIST_DONE { idc=14008; action=QUOTE(1 call FUNC(toggle_target_data)); diff --git a/addons/atragmx/functions/fnc_show_gun_ammo_data.sqf b/addons/atragmx/functions/fnc_show_gun_ammo_data.sqf index 06ab20b3b7..dfab6da238 100644 --- a/addons/atragmx/functions/fnc_show_gun_ammo_data.sqf +++ b/addons/atragmx/functions/fnc_show_gun_ammo_data.sqf @@ -17,7 +17,7 @@ GVAR(showGunAmmoData) = _this; -{ctrlShow [_x, _this]} forEach [12000, 120000, 12001, 120010, 12002, 120020, 12003, 120030, 12004, 120040, 12005, 120050, 12006, 120060, 12007, 12008, 12009, 12010, 12011]; +{ctrlShow [_x, _this]} forEach [12000, 120000, 12001, 120010, 12002, 120020, 12003, 120030, 12004, 120040, 12005, 120050, 12006, 120060, 120061, 12007, 12008, 12009, 12010, 12011]; if (_this) then { [] call FUNC(update_gun_ammo_data); diff --git a/addons/atragmx/functions/fnc_show_target_data.sqf b/addons/atragmx/functions/fnc_show_target_data.sqf index 4e696ae331..48e419f65f 100644 --- a/addons/atragmx/functions/fnc_show_target_data.sqf +++ b/addons/atragmx/functions/fnc_show_target_data.sqf @@ -17,7 +17,7 @@ GVAR(showTargetData) = _this; -{ctrlShow [_x, _this]} forEach [14000, 140000, 14001, 140010, 14002, 141020, 140020, 141021, 140021, 14003, 140030, 14004, 140040, 141040, 141041, 140041, 14005, 140050, 14006, 140060, 14007, 14008, 14009, 14010, 14011]; +{ctrlShow [_x, _this]} forEach [14000, 140000, 14001, 140010, 14002, 141020, 140020, 141021, 140021, 14003, 140030, 14004, 140040, 141040, 141041, 140041, 14005, 140050, 14006, 140060, 140061, 14007, 14008, 14009, 14010, 14011]; if (_this) then { [] call FUNC(update_target_data); diff --git a/addons/atragmx/functions/fnc_update_gun_ammo_data.sqf b/addons/atragmx/functions/fnc_update_gun_ammo_data.sqf index 94801cad39..4ccae287e7 100644 --- a/addons/atragmx/functions/fnc_update_gun_ammo_data.sqf +++ b/addons/atragmx/functions/fnc_update_gun_ammo_data.sqf @@ -52,6 +52,11 @@ if (GVAR(currentUnit) == 1) then { } else { ctrlSetText [120060, Str(Round(GVAR(workingMemory) select 2))]; }; +if (GVAR(currentUnit) == 0) then { + ctrlSetText [120061, "*"]; +} else { + ctrlSetText [120061, ""]; +}; if (GVAR(currentUnit) == 2) then { ctrlSetText [12000, "Bore (cm)"]; diff --git a/addons/atragmx/functions/fnc_update_target_data.sqf b/addons/atragmx/functions/fnc_update_target_data.sqf index 733118d583..b5e6dcf85a 100644 --- a/addons/atragmx/functions/fnc_update_target_data.sqf +++ b/addons/atragmx/functions/fnc_update_target_data.sqf @@ -37,6 +37,11 @@ if (GVAR(currentUnit) == 1) then { } else { ctrlSetText [140060, Str(Round((GVAR(targetRange) select GVAR(currentTarget))))]; }; +if (GVAR(currentUnit) == 0) then { + ctrlSetText [140061, "*"]; +} else { + ctrlSetText [140061, ""]; +}; if (GVAR(currentUnit) == 2) then { ctrlSetText [14002, "Wind Speed (m/s)"]; From c049ee5c08308f6355db086ab91a16619bf75487 Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Mon, 20 Apr 2015 11:02:28 +0200 Subject: [PATCH 224/257] Fixed incorrect .408 Chey Tac airFriction value --- addons/atragmx/XEH_postInit.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/atragmx/XEH_postInit.sqf b/addons/atragmx/XEH_postInit.sqf index 574b5a8991..242b9dcbe8 100644 --- a/addons/atragmx/XEH_postInit.sqf +++ b/addons/atragmx/XEH_postInit.sqf @@ -13,7 +13,7 @@ if ((profileNamespace getVariable ["ACE_ATragMX_profileNamespaceVersion", 0]) == ["12.7x54mm" , 300, 100, 0.3394, -0.0014000, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 24.13, 1.050, 1, "ASM" ], - [".408 Chey Tac" , 910, 100, 0.0569, -0.0004800, 3.81, 0, 2, 10, 120, 0, 0, 27.15, 10.4, 33.02, 0.970, 1, "ASM" ], + [".408 Chey Tac" , 910, 100, 0.0571, -0.0003950, 3.81, 0, 2, 10, 120, 0, 0, 27.15, 10.4, 33.02, 0.970, 1, "ASM" ], ["9.3×64mm" , 870, 100, 0.0619, -0.0007500, 3.81, 0, 2, 10, 120, 0, 0, 14.90, 9.30, 35.56, 0.368, 1, "ASM" ], From de0414803ec7649d18aed45e481c05b14f8d6d3b Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Mon, 20 Apr 2015 11:08:28 +0200 Subject: [PATCH 225/257] Fixed some more airFriction values in the ATragMX gun list --- addons/atragmx/XEH_postInit.sqf | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/addons/atragmx/XEH_postInit.sqf b/addons/atragmx/XEH_postInit.sqf index 242b9dcbe8..7f047834e2 100644 --- a/addons/atragmx/XEH_postInit.sqf +++ b/addons/atragmx/XEH_postInit.sqf @@ -6,16 +6,16 @@ if ((profileNamespace getVariable ["ACE_ATragMX_profileNamespaceVersion", 0]) == GVAR(gunList) = profileNamespace getVariable "ACE_ATragMX_gunList"; } else { // Profile Name, Muzzle Velocity, Zero Range, Scope Base Angle, AirFriction, Bore Height, Scope Unit, Scope Click Unit, Scope Click Number, Maximum Elevation, Dialed Elevation, Dialed Windage, Mass, Bullet Diameter, Rifle Twist, BC, Drag Model, Atmosphere Model - GVAR(gunList) = [["12.7x108mm" , 820, 100, 0.0659, -0.0008600, 3.81, 0, 2, 10, 120, 0, 0, 48.28, 12.7, 38.10, 0.630, 1, "ASM" ], + GVAR(gunList) = [["12.7x108mm" , 820, 100, 0.0657, -0.0006400, 3.81, 0, 2, 10, 120, 0, 0, 48.28, 12.7, 38.10, 0.630, 1, "ASM" ], - ["12.7x99mm AMAX" , 860, 100, 0.0612, -0.0008600, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 38.10, 1.050, 1, "ASM" ], - ["12.7x99mm" , 853, 100, 0.0623, -0.0008600, 3.81, 0, 2, 10, 120, 0, 0, 41.92, 12.7, 38.10, 0.670, 1, "ASM" ], + ["12.7x99mm AMAX" , 860, 100, 0.0612, -0.0003740, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 38.10, 1.050, 1, "ASM" ], + ["12.7x99mm" , 853, 100, 0.0623, -0.0006000, 3.81, 0, 2, 10, 120, 0, 0, 41.92, 12.7, 38.10, 0.670, 1, "ASM" ], - ["12.7x54mm" , 300, 100, 0.3394, -0.0014000, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 24.13, 1.050, 1, "ASM" ], + ["12.7x54mm" , 300, 100, 0.3395, -0.0001400, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 24.13, 1.050, 1, "ASM" ], [".408 Chey Tac" , 910, 100, 0.0571, -0.0003950, 3.81, 0, 2, 10, 120, 0, 0, 27.15, 10.4, 33.02, 0.970, 1, "ASM" ], - ["9.3×64mm" , 870, 100, 0.0619, -0.0007500, 3.81, 0, 2, 10, 120, 0, 0, 14.90, 9.30, 35.56, 0.368, 1, "ASM" ], + ["9.3×64mm" , 870, 100, 0.0619, -0.0010600, 3.81, 0, 2, 10, 120, 0, 0, 14.90, 9.30, 35.56, 0.368, 1, "ASM" ], [".338LM 250gr" , 880, 100, 0.0598, -0.0006060, 3.81, 0, 2, 10, 120, 0, 0, 16.20, 8.58, 25.40, 0.322, 7, "ICAO"], [".338LM 300gr" , 800, 100, 0.0677, -0.0005350, 3.81, 0, 2, 10, 120, 0, 0, 19.44, 8.58, 25.40, 0.381, 7, "ICAO"], From 0e08fd4457d1cc5fb2a79235a5ff0637998e7287 Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Mon, 20 Apr 2015 11:09:12 +0200 Subject: [PATCH 226/257] Incremented the ATragMX profile namespace version --- addons/atragmx/script_component.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/atragmx/script_component.hpp b/addons/atragmx/script_component.hpp index 7cd5b44911..6e81f79493 100644 --- a/addons/atragmx/script_component.hpp +++ b/addons/atragmx/script_component.hpp @@ -11,4 +11,4 @@ #include "\z\ace\addons\main\script_macros.hpp" -#define ATRAGMX_PROFILE_NAMESPACE_VERSION 1.1 +#define ATRAGMX_PROFILE_NAMESPACE_VERSION 1.2 From 6c2982548fe70a0dcd8b47be50fff89a0e30b8f4 Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Mon, 20 Apr 2015 12:35:08 +0200 Subject: [PATCH 227/257] Fixed incorrect function header --- .../advanced_ballistics/functions/fnc_calculateAirDensity.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/advanced_ballistics/functions/fnc_calculateAirDensity.sqf b/addons/advanced_ballistics/functions/fnc_calculateAirDensity.sqf index ea7a77e837..298049e51d 100644 --- a/addons/advanced_ballistics/functions/fnc_calculateAirDensity.sqf +++ b/addons/advanced_ballistics/functions/fnc_calculateAirDensity.sqf @@ -1,7 +1,7 @@ /* * Author: Ruthberg * - * Displays a wind info (colored arrow) in the top left corner of the screen + * Calculates the air density * * Arguments: * 0: temperature - degrees celcius <NUMBER> From 89e33dc177dd43fe2e8c66ade92aec786f39548f Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Mon, 20 Apr 2015 13:54:22 +0200 Subject: [PATCH 228/257] Refactored the weather module: * No changes in functionality --- addons/advanced_ballistics/XEH_preInit.sqf | 1 - .../fnc_calculateAtmosphericCorrection.sqf | 2 +- .../functions/fnc_handleFired.sqf | 6 +- .../kestrel4500/functions/fnc_collectData.sqf | 4 +- .../functions/fnc_generateOutputData.sqf | 2 +- addons/weather/XEH_postInit.sqf | 99 +++++++------------ addons/weather/XEH_preInit.sqf | 40 ++------ .../functions/fnc_calculateAirDensity.sqf | 36 +++++++ .../fnc_calculateBarometricPressure.sqf | 20 ++++ .../weather/functions/fnc_displayWindInfo.sqf | 1 + addons/weather/functions/fnc_getMapData.sqf | 4 + addons/weather/functions/fnc_getWind.sqf | 1 + .../functions/fnc_serverController.sqf | 1 + .../weather/functions/fnc_updateHumidity.sqf | 28 ++++++ addons/weather/functions/fnc_updateRain.sqf | 26 +++++ .../functions/fnc_updateTemperature.sqf | 22 +++++ addons/weather/functions/fnc_updateWind.sqf | 21 ++++ addons/weather/script_component.hpp | 8 ++ 18 files changed, 217 insertions(+), 105 deletions(-) create mode 100644 addons/weather/functions/fnc_calculateAirDensity.sqf create mode 100644 addons/weather/functions/fnc_calculateBarometricPressure.sqf create mode 100644 addons/weather/functions/fnc_updateHumidity.sqf create mode 100644 addons/weather/functions/fnc_updateRain.sqf create mode 100644 addons/weather/functions/fnc_updateTemperature.sqf create mode 100644 addons/weather/functions/fnc_updateWind.sqf diff --git a/addons/advanced_ballistics/XEH_preInit.sqf b/addons/advanced_ballistics/XEH_preInit.sqf index b58a2b88e8..1d19a9c492 100644 --- a/addons/advanced_ballistics/XEH_preInit.sqf +++ b/addons/advanced_ballistics/XEH_preInit.sqf @@ -2,7 +2,6 @@ ADDON = false; -PREP(calculateAirDensity); PREP(calculateAmmoTemperatureVelocityShift); PREP(calculateAtmosphericCorrection); PREP(calculateBarrelLengthVelocityShift); diff --git a/addons/advanced_ballistics/functions/fnc_calculateAtmosphericCorrection.sqf b/addons/advanced_ballistics/functions/fnc_calculateAtmosphericCorrection.sqf index 02e849399e..b0166109f5 100644 --- a/addons/advanced_ballistics/functions/fnc_calculateAtmosphericCorrection.sqf +++ b/addons/advanced_ballistics/functions/fnc_calculateAtmosphericCorrection.sqf @@ -24,7 +24,7 @@ _pressure = _this select 2; // in hPa _relativeHumidity = _this select 3; // as ratio 0-1 _atmosphereModel = _this select 4; // "ICAO" or "ASM" -_airDensity = [_temperature, _pressure, _relativeHumidity] call FUNC(calculateAirDensity); +_airDensity = [_temperature, _pressure, _relativeHumidity] call EFUNC(weather,calculateAirDensity); if (_atmosphereModel == "ICAO") then { (STD_AIR_DENSITY_ICAO / _airDensity) * _ballisticCoefficient diff --git a/addons/advanced_ballistics/functions/fnc_handleFired.sqf b/addons/advanced_ballistics/functions/fnc_handleFired.sqf index baa3a871fa..54a7f2d5b0 100644 --- a/addons/advanced_ballistics/functions/fnc_handleFired.sqf +++ b/addons/advanced_ballistics/functions/fnc_handleFired.sqf @@ -110,7 +110,7 @@ _stabilityFactor = 1.5; if (_caliber > 0 && _bulletLength > 0 && _bulletMass > 0 && _barrelTwist > 0) then { _temperature = GET_TEMPERATURE_AT_HEIGHT((getPosASL _unit) select 2); - _barometricPressure = 1013.25 * exp(-(EGVAR(weather,Altitude) + ((getPosASL _bullet) select 2)) / 7990) - 10 * overcast; + _barometricPressure = ((getPosASL _bullet) select 2) call EFUNC(weather,calculateBarometricPressure); _stabilityFactor = [_caliber, _bulletLength, _bulletMass, _barrelTwist, _muzzleVelocity, _temperature, _barometricPressure] call FUNC(calculateStabilityFactor); }; @@ -288,7 +288,7 @@ if (GVAR(AdvancedAirDragEnabled)) then { }; if (GVAR(AtmosphericDensitySimulationEnabled)) then { - _pressure = 1013.25 * exp(-(EGVAR(weather,Altitude) + (_bulletPosition select 2)) / 7990) - 10 * overcast; + _pressure = (_bulletPosition select 2) call EFUNC(weather,calculateBarometricPressure); _temperature = GET_TEMPERATURE_AT_HEIGHT(_bulletPosition select 2); _humidity = EGVAR(weather,currentHumidity); _airDensity = STD_AIR_DENSITY_ICAO; @@ -315,7 +315,7 @@ if (GVAR(AdvancedAirDragEnabled)) then { _bulletVelocity = _bulletVelocity vectorDiff _accel; } else { if (GVAR(AtmosphericDensitySimulationEnabled)) then { - _pressureDeviation = 1013.25 * exp(-(EGVAR(weather,Altitude) + (_bulletPosition select 2)) / 7990) - 1013.25 - 10 * overcast; + _pressureDeviation = (_bulletPosition select 2) call EFUNC(weather,calculateBarometricPressure) - 1013.25; _temperature = GET_TEMPERATURE_AT_HEIGHT(_bulletPosition select 2); _humidity = EGVAR(weather,currentHumidity); _airFriction = _airFriction + ((_temperature - 15) * 0.0000015 + _humidity * 0.0000040 + _pressureDeviation * -0.0000009); diff --git a/addons/kestrel4500/functions/fnc_collectData.sqf b/addons/kestrel4500/functions/fnc_collectData.sqf index 8ebd4e01d2..bbad8619bc 100644 --- a/addons/kestrel4500/functions/fnc_collectData.sqf +++ b/addons/kestrel4500/functions/fnc_collectData.sqf @@ -19,7 +19,7 @@ private ["_playerDir", "_windSpeed", "_windDir", "_crosswind", "_headwind", "_hu if (isNil QGVAR(MIN) || isNil QGVAR(MAX)) then { _temperature = GET_TEMPERATURE_AT_HEIGHT((getPosASL ACE_player) select 2); _humidity = EGVAR(weather,currentHumidity); - _barometricPressure = 1013.25 * exp(-(EGVAR(weather,Altitude) + ((getPosASL ACE_player) select 2)) / 7990) - 10 * overcast; + _barometricPressure = ((getPosASL ACE_player) select 2) call EFUNC(weather,calculateBarometricPressure); _altitude = EGVAR(weather,Altitude) + ((getPosASL ACE_player) select 2); GVAR(MIN) = [0, 0, 0, 0, _temperature, _humidity, _barometricPressure, _altitude]; GVAR(MAX) = [0, 0, 0, 0, _temperature, _humidity, _barometricPressure, _altitude]; @@ -82,7 +82,7 @@ GVAR(MAX) set [5, _humidity max (GVAR(MAX) select 5)]; GVAR(TOTAL) set [5, (GVAR(TOTAL) select 5) + _humidity]; // BARO -_barometricPressure = 1013.25 * exp(-(EGVAR(weather,Altitude) + ((getPosASL ACE_player) select 2)) / 7990) - 10 * overcast; +_barometricPressure = ((getPosASL ACE_player) select 2) call EFUNC(weather,calculateBarometricPressure); GVAR(MIN) set [6, (GVAR(MIN) select 6) min _barometricPressure]; GVAR(MAX) set [6, _barometricPressure max (GVAR(MAX) select 6)]; GVAR(TOTAL) set [6, (GVAR(TOTAL) select 6) + _barometricPressure]; diff --git a/addons/kestrel4500/functions/fnc_generateOutputData.sqf b/addons/kestrel4500/functions/fnc_generateOutputData.sqf index 3e392bd55b..3f5e77b748 100644 --- a/addons/kestrel4500/functions/fnc_generateOutputData.sqf +++ b/addons/kestrel4500/functions/fnc_generateOutputData.sqf @@ -174,7 +174,7 @@ switch (GVAR(Menu)) do { }; case 6: { // BARO if (!GVAR(MinAvgMax)) then { - _textCenterBig = Str(round((1013.25 * exp(-(EGVAR(weather,Altitude) + ((getPosASL ACE_player) select 2)) / 7990) - 10 * overcast) * 10) / 10); + _textCenterBig = Str(round((((getPosASL ACE_player) select 2) call EFUNC(weather,calculateBarometricPressure)) * 10) / 10); } else { _textCenterLine1Left = "Min"; _textCenterLine2Left = "Avg"; diff --git a/addons/weather/XEH_postInit.sqf b/addons/weather/XEH_postInit.sqf index 9276e710da..e40a061aaf 100644 --- a/addons/weather/XEH_postInit.sqf +++ b/addons/weather/XEH_postInit.sqf @@ -1,6 +1,36 @@ -//XEH_postInit.sqf -//#define DEBUG_MODE_FULL #include "script_component.hpp" + +// Rain variables +GVAR(enableRain) = true; +GVAR(rain_next_period) = -1; +GVAR(rain_period_count) = 0; +GVAR(rain_initial_rain) = 0; +if(overcast >= 0.7) then { + GVAR(rain_initial_rain) = (random ((overcast-0.7)/0.3)); +}; +GVAR(current_rain) = GVAR(rain_initial_rain); +GVAR(rain_current_range) = -1+(random 2); +GVAR(overcast_multiplier) = 1; + +// Wind Variables +ACE_wind = [0, 0, 0]; +GVAR(wind_initial_dir) = (random 360); +GVAR(wind_initial_speed) = (overcast*5)+(random (overcast*5)) max 1; +GVAR(wind_mean_speed) = GVAR(wind_initial_speed); +GVAR(wind_mean_dir) = GVAR(wind_initial_dir); +GVAR(wind_current_speed) = GVAR(wind_initial_speed); +GVAR(wind_current_dir) = GVAR(wind_initial_dir); +GVAR(wind_current_range_speed) = -1+(random 2); +GVAR(wind_current_range_dir) = -1+(random 2); +GVAR(wind_next_period) = -1; //ceil((2+random(5))/(GVAR(overcast_multiplier)/10)); +GVAR(wind_next_major_period) = -1; +GVAR(wind_period_count) = 0; +GVAR(wind_major_period_count) = 0; +GVAR(wind_total_time) = 0; +GVAR(wind_period_start_time) = time; + +call FUNC(getMapData); + "ACE_WIND_PARAMS" addPublicVariableEventHandler { GVAR(wind_period_start_time) = time; }; "ACE_RAIN_PARAMS" addPublicVariableEventHandler { GVAR(rain_period_start_time) = time; }; "ACE_MISC_PARAMS" addPublicVariableEventHandler { @@ -22,66 +52,9 @@ {false}, [37, [true, false, false]], false, 0] call CBA_fnc_addKeybind; // (SHIFT + K) -// Update Wind simulWeatherSync; -_fnc_updateWind = { - ACE_wind = [] call FUNC(getWind); - setWind [ACE_wind select 0, ACE_wind select 1, true]; - 2 setGusts 0; - // Set waves: 0 when no wind, 1 when wind >= 16 m/s - 1 setWaves (((vectorMagnitude ACE_wind) / 16.0) min 1.0); - - //systemChat format ["w:%1 %2,ACE_w:%1 %2, w", [wind select 0, wind select 1, ACE_wind select 0, ACE_wind select 1]]; -}; -[_fnc_updateWind, 1, []] call CBA_fnc_addPerFrameHandler; - - -// Update Rain -_fnc_updateRain = { - private ["_oldStrength","_rainStrength","_transitionTime","_periodPosition","_periodPercent"]; - if(GVAR(enableRain)) then { - if(!isNil "ACE_RAIN_PARAMS" && {!isNil QGVAR(rain_period_start_time)}) then { - _oldStrength = ACE_RAIN_PARAMS select 0; - _rainStrength = ACE_RAIN_PARAMS select 1; - _transitionTime = ACE_RAIN_PARAMS select 2; - _periodPosition = (time - GVAR(rain_period_start_time)) min _transitionTime; - _periodPercent = (_periodPosition/_transitionTime) min 1; - - 0 setRain ((_periodPercent*(_rainStrength-_oldStrength))+_oldStrength); - }; - }; -}; -[_fnc_updateRain, 2, []] call CBA_fnc_addPerFrameHandler; - - -// Update Temperature -_fnc_updateTemperature = { - private ["_time","_month","_hourlyCoef","_avgTemperature","_pS1","_pS2"]; - _time = daytime; - _month = date select 1; - - // Temperature - _hourlyCoef = -0.5 * sin(360 * ((3 + (date select 3))/24 + (date select 4)/1440)); - - GVAR(currentTemperature) = (GVAR(TempDay) select (_month - 1)) * (1 - _hourlyCoef) + (GVAR(TempNight) select (_month - 1)) * _hourlyCoef; - GVAR(currentTemperature) = GVAR(currentTemperature) - 2 * humidity - 4 * overcast; - GVAR(currentTemperature) = round(GVAR(currentTemperature) * 10) / 10; - - // Humidity - GVAR(currentHumidity) = (GVAR(Humidity) select _month) / 100; - - if (rain > 0 && overcast > 0.7) then { - GVAR(currentHumidity) = 1; - } else { - _avgTemperature = ((GVAR(TempDay) select (_month - 1)) + (GVAR(TempNight) select (_month - 1))) / 2; - _pS1 = 6.112 * exp((17.62 * _avgTemperature) / (243.12 + _avgTemperature)); - _PS2 = 6.112 * exp((17.62 * GVAR(currentTemperature)) / (243.12 + GVAR(currentTemperature))); - GVAR(currentHumidity) = GVAR(currentHumidity) * _PS1 / _PS2; - }; - GVAR(currentHumidity) = 0 max GVAR(currentHumidity) min 1; - - // @todo: take altitude and humidity into account - GVAR(currentRelativeDensity) = (273.15 + 20) / (273.15 + GVAR(currentTemperature)); -}; -[_fnc_updateTemperature, 20, []] call CBA_fnc_addPerFrameHandler; +[FUNC(updateTemperature), 20, []] call CBA_fnc_addPerFrameHandler; +[FUNC(updateHumidity), 20, []] call CBA_fnc_addPerFrameHandler; +[FUNC(updateWind), 1, []] call CBA_fnc_addPerFrameHandler; +[FUNC(updateRain), 2, []] call CBA_fnc_addPerFrameHandler; \ No newline at end of file diff --git a/addons/weather/XEH_preInit.sqf b/addons/weather/XEH_preInit.sqf index 2751e77226..ee05983a69 100644 --- a/addons/weather/XEH_preInit.sqf +++ b/addons/weather/XEH_preInit.sqf @@ -2,44 +2,16 @@ #include "script_component.hpp" ADDON = false; -LOG(MSG_INIT); +PREP(calculateAirDensity); +PREP(calculateBarometricPressure); PREP(displayWindInfo); PREP(getMapData); PREP(getWind); PREP(serverController); - - -// Rain variables -GVAR(enableRain) = true; -GVAR(rain_next_period) = -1; -GVAR(rain_period_count) = 0; -GVAR(rain_initial_rain) = 0; -if(overcast >= 0.7) then { - GVAR(rain_initial_rain) = (random ((overcast-0.7)/0.3)); -}; -GVAR(current_rain) = GVAR(rain_initial_rain); -GVAR(rain_current_range) = -1+(random 2); -GVAR(overcast_multiplier) = 1; - -// Wind Variables -ACE_wind = [0, 0, 0]; -GVAR(wind_initial_dir) = (random 360); -GVAR(wind_initial_speed) = (overcast*5)+(random (overcast*5)) max 1; -GVAR(wind_mean_speed) = GVAR(wind_initial_speed); -GVAR(wind_mean_dir) = GVAR(wind_initial_dir); -GVAR(wind_current_speed) = GVAR(wind_initial_speed); -GVAR(wind_current_dir) = GVAR(wind_initial_dir); -GVAR(wind_current_range_speed) = -1+(random 2); -GVAR(wind_current_range_dir) = -1+(random 2); -GVAR(wind_next_period) = -1; //ceil((2+random(5))/(GVAR(overcast_multiplier)/10)); -GVAR(wind_next_major_period) = -1; -GVAR(wind_period_count) = 0; -GVAR(wind_major_period_count) = 0; -GVAR(wind_total_time) = 0; -GVAR(wind_period_start_time) = time; - -// Init weather variables, in case they are needed before postInit -call FUNC(getMapData); +PREP(updateHumidity); +PREP(updateRain); +PREP(updateTemperature); +PREP(updateWind); ADDON = true; diff --git a/addons/weather/functions/fnc_calculateAirDensity.sqf b/addons/weather/functions/fnc_calculateAirDensity.sqf new file mode 100644 index 0000000000..298049e51d --- /dev/null +++ b/addons/weather/functions/fnc_calculateAirDensity.sqf @@ -0,0 +1,36 @@ +/* + * Author: Ruthberg + * + * Calculates the air density + * + * Arguments: + * 0: temperature - degrees celcius <NUMBER> + * 1: pressure - hPa <NUMBER> + * 2: relativeHumidity - value between 0.0 and 1.0 <NUMBER> + * + * Return Value: + * 0: density of air - kg * m^(-3) <NUMBER> + * + * Return value: + * None + */ +#include "script_component.hpp" + +private ["_temperature", "_pressure", "_relativeHumidity"]; +_temperature = _this select 0; // in C +_pressure = _this select 1; // in hPa +_relativeHumidity = _this select 2; // as ratio 0-1 + +_pressure = _pressure * 100; + +if (_relativeHumidity > 0) then { + private ["_pSat", "_vaporPressure", "_partialPressure"]; + // Saturation vapor pressure calculated according to: http://wahiduddin.net/calc/density_algorithms.htm + _pSat = 6.1078 * 10 ^ ((7.5 * _temperature) / (_temperature + 237.3)); + _vaporPressure = _relativeHumidity * _pSat; + _partialPressure = _pressure - _vaporPressure; + + (_partialPressure * DRY_AIR_MOLAR_MASS + _vaporPressure * WATER_VAPOR_MOLAR_MASS) / (UNIVERSAL_GAS_CONSTANT * KELVIN(_temperature)) +} else { + _pressure / (SPECIFIC_GAS_CONSTANT_DRY_AIR * KELVIN(_temperature)) +}; diff --git a/addons/weather/functions/fnc_calculateBarometricPressure.sqf b/addons/weather/functions/fnc_calculateBarometricPressure.sqf new file mode 100644 index 0000000000..c65d343c93 --- /dev/null +++ b/addons/weather/functions/fnc_calculateBarometricPressure.sqf @@ -0,0 +1,20 @@ +/* + * Author: Ruthberg + * + * Calculates the barometric pressure based on altitude and weather + * + * Arguments: + * 0: altitude - meters <NUMBER> + * + * Return Value: + * 0: barometric pressure - hPA <NUMBER> + * + * Return value: + * None + */ +#include "script_component.hpp" + +private ["_altitude"]; +_altitude = _this; + +(1013.25 * exp(-(GVAR(Altitude) + _altitude) / 7990) - 10 * overcast) diff --git a/addons/weather/functions/fnc_displayWindInfo.sqf b/addons/weather/functions/fnc_displayWindInfo.sqf index d84cddd106..58d728bf67 100644 --- a/addons/weather/functions/fnc_displayWindInfo.sqf +++ b/addons/weather/functions/fnc_displayWindInfo.sqf @@ -1,5 +1,6 @@ /* * Author: Ruthberg + * * Displays a wind info (colored arrow) in the top left corner of the screen * * Argument: diff --git a/addons/weather/functions/fnc_getMapData.sqf b/addons/weather/functions/fnc_getMapData.sqf index fecf9f34f7..cb0a961c21 100644 --- a/addons/weather/functions/fnc_getMapData.sqf +++ b/addons/weather/functions/fnc_getMapData.sqf @@ -1,5 +1,6 @@ /* * Author: Ruthberg, esteldunedain + * * Get the weather data for the current map * * Argument: @@ -109,3 +110,6 @@ if (worldName in ["Imrali"]) exitWith { GVAR(TempDay) = [1, 3, 9, 14, 19, 23, 25, 24, 21, 13, 7, 2]; GVAR(TempNight) = [-4, -3, 0, 4, 9, 12, 14, 14, 10, 6, 2, -2]; GVAR(Humidity) = [82, 80, 78, 70, 71, 72, 70, 73, 78, 80, 83, 82]; + +GVAR(currentTemperature) = 20; +GVAR(currentHumidity) = 0.5; diff --git a/addons/weather/functions/fnc_getWind.sqf b/addons/weather/functions/fnc_getWind.sqf index b0fbf5e8fa..54ec6efad3 100644 --- a/addons/weather/functions/fnc_getWind.sqf +++ b/addons/weather/functions/fnc_getWind.sqf @@ -1,5 +1,6 @@ /* * Author: ACE2 Team + * * Calculate current wind locally from the data broadcasted by the server * * Argument: diff --git a/addons/weather/functions/fnc_serverController.sqf b/addons/weather/functions/fnc_serverController.sqf index e29836fc18..d7dff0eb70 100644 --- a/addons/weather/functions/fnc_serverController.sqf +++ b/addons/weather/functions/fnc_serverController.sqf @@ -1,5 +1,6 @@ /* * Author: ACE2 Team, esteldunedain + * * Calculate the wind and rain evolution on the server. Broadcast the current and next values to the clients * * Argument: diff --git a/addons/weather/functions/fnc_updateHumidity.sqf b/addons/weather/functions/fnc_updateHumidity.sqf new file mode 100644 index 0000000000..e3ba7a0224 --- /dev/null +++ b/addons/weather/functions/fnc_updateHumidity.sqf @@ -0,0 +1,28 @@ +/* + * Author: ACE2 Team + * + * Updates GVAR(currentHumidity) based on + * + * Argument: + * Nothing + * + * Return value: + * Nothing + */ +#include "script_component.hpp" + +private ["_month", "_avgTemperature", "_pS1", "_pS2"]; +_month = date select 1; + +GVAR(currentHumidity) = (GVAR(Humidity) select _month) / 100; + +if (rain > 0 && overcast > 0.7) then { + GVAR(currentHumidity) = 1; +} else { + _avgTemperature = ((GVAR(TempDay) select (_month - 1)) + (GVAR(TempNight) select (_month - 1))) / 2; + _pS1 = 6.112 * exp((17.62 * _avgTemperature) / (243.12 + _avgTemperature)); + _PS2 = 6.112 * exp((17.62 * GVAR(currentTemperature)) / (243.12 + GVAR(currentTemperature))); + GVAR(currentHumidity) = GVAR(currentHumidity) * _PS1 / _PS2; +}; + +GVAR(currentHumidity) = 0 max GVAR(currentHumidity) min 1; diff --git a/addons/weather/functions/fnc_updateRain.sqf b/addons/weather/functions/fnc_updateRain.sqf new file mode 100644 index 0000000000..01e32e1734 --- /dev/null +++ b/addons/weather/functions/fnc_updateRain.sqf @@ -0,0 +1,26 @@ +/* + * Author: ACE2 Team + * + * Updates rain based on ACE_RAIN_PARAMS + * + * Argument: + * Nothing + * + * Return value: + * Nothing + */ +#include "script_component.hpp" + +private ["_oldStrength", "_rainStrength", "_transitionTime", "_periodPosition", "_periodPercent"]; + +if (!GVAR(enableRain)) exitWith {}; + +if (!isNil "ACE_RAIN_PARAMS" && {!isNil QGVAR(rain_period_start_time)}) then { + _oldStrength = ACE_RAIN_PARAMS select 0; + _rainStrength = ACE_RAIN_PARAMS select 1; + _transitionTime = ACE_RAIN_PARAMS select 2; + _periodPosition = (time - GVAR(rain_period_start_time)) min _transitionTime; + _periodPercent = (_periodPosition/_transitionTime) min 1; + + 0 setRain ((_periodPercent*(_rainStrength-_oldStrength))+_oldStrength); +}; diff --git a/addons/weather/functions/fnc_updateTemperature.sqf b/addons/weather/functions/fnc_updateTemperature.sqf new file mode 100644 index 0000000000..5e342ad83d --- /dev/null +++ b/addons/weather/functions/fnc_updateTemperature.sqf @@ -0,0 +1,22 @@ +/* + * Author: ACE2 Team + * + * Updates GVAR(currentTemperature) based on the map data + * + * Argument: + * Nothing + * + * Return value: + * Nothing + */ +#include "script_component.hpp" + +private ["_time", "_month", "_hourlyCoef"]; +_time = daytime; +_month = date select 1; + +_hourlyCoef = -0.5 * sin(360 * ((3 + (date select 3))/24 + (date select 4)/1440)); + +GVAR(currentTemperature) = (GVAR(TempDay) select (_month - 1)) * (1 - _hourlyCoef) + (GVAR(TempNight) select (_month - 1)) * _hourlyCoef; +GVAR(currentTemperature) = GVAR(currentTemperature) - 2 * humidity - 4 * overcast; +GVAR(currentTemperature) = round(GVAR(currentTemperature) * 10) / 10; diff --git a/addons/weather/functions/fnc_updateWind.sqf b/addons/weather/functions/fnc_updateWind.sqf new file mode 100644 index 0000000000..e5a52348a8 --- /dev/null +++ b/addons/weather/functions/fnc_updateWind.sqf @@ -0,0 +1,21 @@ +/* + * Author: ACE2 Team + * + * Updates wind, gusts and waves based on ACE_wind + * + * Argument: + * Nothing + * + * Return value: + * Nothing + */ +#include "script_component.hpp" + +ACE_wind = [] call FUNC(getWind); +setWind [ACE_wind select 0, ACE_wind select 1, true]; +2 setGusts 0; + +// Set waves: 0 when no wind, 1 when wind >= 16 m/s +1 setWaves (((vectorMagnitude ACE_wind) / 16.0) min 1.0); + +//hintSilent format["Wind: %1\nACE_wind: %2\nDeviation: %3 (m/s)", wind, ACE_wind, Round((vectorMagnitude (ACE_wind vectorDiff wind)) * 1000) / 1000]; diff --git a/addons/weather/script_component.hpp b/addons/weather/script_component.hpp index a21d8245fd..edc1ac64d0 100644 --- a/addons/weather/script_component.hpp +++ b/addons/weather/script_component.hpp @@ -10,3 +10,11 @@ #endif #include "\z\ace\addons\main\script_macros.hpp" + +#define ABSOLUTE_ZERO_IN_CELSIUS -273.15 +#define KELVIN(t) (t - ABSOLUTE_ZERO_IN_CELSIUS) +#define CELSIUS(t) (t + ABSOLUTE_ZERO_IN_CELSIUS) +#define UNIVERSAL_GAS_CONSTANT 8.314 +#define WATER_VAPOR_MOLAR_MASS 0.018016 +#define DRY_AIR_MOLAR_MASS 0.028964 +#define SPECIFIC_GAS_CONSTANT_DRY_AIR 287.058 From 06a4f3d10e216924d281d7491656128f06633be8 Mon Sep 17 00:00:00 2001 From: KoffeinFlummi <koffeinflummi@gmail.com> Date: Mon, 20 Apr 2015 15:48:50 +0200 Subject: [PATCH 229/257] Remove tabler comments. --- addons/attach/stringtable.xml | 3 +-- addons/captives/stringtable.xml | 3 +-- addons/dragging/stringtable.xml | 3 +-- addons/explosives/stringtable.xml | 3 +-- addons/interaction/stringtable.xml | 3 +-- addons/microdagr/stringtable.xml | 3 +-- 6 files changed, 6 insertions(+), 12 deletions(-) diff --git a/addons/attach/stringtable.xml b/addons/attach/stringtable.xml index df8fc26c3c..70ed9666b4 100644 --- a/addons/attach/stringtable.xml +++ b/addons/attach/stringtable.xml @@ -1,5 +1,4 @@ <?xml version="1.0" encoding="utf-8"?> -<!-- Edited with tabler. --> <Project name="ACE"> <Package name="Attach"> <Key ID="STR_ACE_Attach_AttachDetach"> @@ -205,4 +204,4 @@ <Russian>%1<br/>отсоединен(-а)</Russian> </Key> </Package> -</Project> \ No newline at end of file +</Project> diff --git a/addons/captives/stringtable.xml b/addons/captives/stringtable.xml index 6e02114351..55a9f6211a 100644 --- a/addons/captives/stringtable.xml +++ b/addons/captives/stringtable.xml @@ -1,5 +1,4 @@ <?xml version="1.0" encoding="utf-8"?> -<!-- Edited with tabler. --> <Project name="ACE"> <Package name="Captives"> <Key ID="STR_ACE_Captives_SetCaptive"> @@ -189,4 +188,4 @@ <Italian>Niente selezionato</Italian> </Key> </Package> -</Project> \ No newline at end of file +</Project> diff --git a/addons/dragging/stringtable.xml b/addons/dragging/stringtable.xml index 378ce353bd..521ab87006 100644 --- a/addons/dragging/stringtable.xml +++ b/addons/dragging/stringtable.xml @@ -1,5 +1,4 @@ <?xml version="1.0" encoding="utf-8"?> -<!-- Edited with tabler. --> <Project name="ACE"> <Package name="Dragging"> <Key ID="STR_ACE_Dragging_Drag"> @@ -51,4 +50,4 @@ <Russian>Нести</Russian> </Key> </Package> -</Project> \ No newline at end of file +</Project> diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml index 3299cb980c..8e941b1f2a 100644 --- a/addons/explosives/stringtable.xml +++ b/addons/explosives/stringtable.xml @@ -1,5 +1,4 @@ <?xml version="1.0" encoding="utf-8"?> -<!-- Edited with tabler. --> <Project name="ACE"> <Package name="Explosives"> <Key ID="STR_ACE_Explosives_Menu"> @@ -503,4 +502,4 @@ <Italian>Raccogli</Italian> </Key> </Package> -</Project> \ No newline at end of file +</Project> diff --git a/addons/interaction/stringtable.xml b/addons/interaction/stringtable.xml index 41068c9e2d..38902f80cf 100644 --- a/addons/interaction/stringtable.xml +++ b/addons/interaction/stringtable.xml @@ -1,5 +1,4 @@ <?xml version="1.0" encoding="utf-8"?> -<!-- Edited with tabler. --> <Project name="ACE"> <Package name="Interaction"> <Key ID="STR_ACE_Interaction_MainAction"> @@ -735,4 +734,4 @@ <Italian>Passeggeri</Italian> </Key> </Package> -</Project> \ No newline at end of file +</Project> diff --git a/addons/microdagr/stringtable.xml b/addons/microdagr/stringtable.xml index 017ac9f0d5..91d83646b4 100644 --- a/addons/microdagr/stringtable.xml +++ b/addons/microdagr/stringtable.xml @@ -1,5 +1,4 @@ <?xml version="1.0" encoding="utf-8"?> -<!-- Edited with tabler. --> <Project name="ACE"> <Package name="microdagr"> <Key ID="STR_ACE_microdagr_itemName"> @@ -280,4 +279,4 @@ <Italian>Chiudi MicroDAGR</Italian> </Key> </Package> -</Project> \ No newline at end of file +</Project> From 6c00aef6e89972c4d89954aa0f067f6b315f58d9 Mon Sep 17 00:00:00 2001 From: commy2 <commy-2@gmx.de> Date: Mon, 20 Apr 2015 16:02:36 +0200 Subject: [PATCH 230/257] coeficients for recoil configs --- addons/recoil/CfgRecoils.hpp | 255 ++++++++++++++++++----------------- 1 file changed, 135 insertions(+), 120 deletions(-) diff --git a/addons/recoil/CfgRecoils.hpp b/addons/recoil/CfgRecoils.hpp index 27283e71f1..eac31babe8 100644 --- a/addons/recoil/CfgRecoils.hpp +++ b/addons/recoil/CfgRecoils.hpp @@ -1,240 +1,255 @@ +#define KICKBACK 1 + +#define MUZZLETEMP 1 +#define MUZZLEPERM 1 + +#define MUZZLECLIMB_POS 1 +#define MUZZLERIGHT_POS 1 + +#define MUZZLECLIMB_MAG 1 +#define MUZZLERIGHT_MAG 1 + class CfgRecoils { class Default { - muzzleOuter[] = {0,"0.4f","0.5f","0.6f"}; - muzzleInner[] = {0,"0.05f","0.2f","0.2f"}; - kickBack[] = {"0.05f",0.1}; - permanent = 0.1; - temporary = 0.01; + // doc: http://forums.bistudio.com/showthread.php?188999-Recoil-Overhaul-Feedback&s=dba8590ec07adb5ffa87f72d38dde6fc&p=2886744&viewfull=1#post2886744 + // {horizontal axis position, vertical axis position, horizontal magnitude, vertical magnitude} + muzzleOuter[] = {0*MUZZLERIGHT_POS,0.4*MUZZLECLIMB_POS,0.5*MUZZLERIGHT_MAG,0.6*MUZZLECLIMB_MAG}; + // restricted area inside the outer ellipse where the recoil cannot end + muzzleInner[] = {0,0.05,0.2,0.2}; + // minimum and maximum interval for backward force + kickBack[] = {0.05*KICKBACK,0.1*KICKBACK}; + permanent = 0.1*MUZZLEPERM; + temporary = 0.01*MUZZLETEMP; }; class recoil_default: Default { - muzzleOuter[] = {0.3,1,0.3,0.2}; + muzzleOuter[] = {0.3*MUZZLERIGHT_POS,1*MUZZLECLIMB_POS,0.3*MUZZLERIGHT_MAG,0.2*MUZZLECLIMB_MAG}; muzzleInner[] = {0,0,0.1,0.1}; - kickBack[] = {0.03,0.06}; - permanent = 0.1; - temporary = 0.01; + kickBack[] = {0.03*KICKBACK,0.06*KICKBACK}; + permanent = 0.1*MUZZLEPERM; + temporary = 0.01*MUZZLETEMP; }; class recoil_mk20: recoil_default { - muzzleOuter[] = {0.2,0.6,0.2,0.2}; - kickBack[] = {0.01,0.03}; - temporary = 0.01; + muzzleOuter[] = {0.2*MUZZLERIGHT_POS,0.6*MUZZLECLIMB_POS,0.2*MUZZLERIGHT_MAG,0.2*MUZZLECLIMB_MAG}; + kickBack[] = {0.01*KICKBACK,0.03*KICKBACK}; + temporary = 0.01*MUZZLETEMP; }; class recoil_mk20c: recoil_default { - muzzleOuter[] = {0.2,0.8,0.3,0.2}; - kickBack[] = {0.02,0.04}; - temporary = 0.015; + muzzleOuter[] = {0.2*MUZZLERIGHT_POS,0.8*MUZZLECLIMB_POS,0.3*MUZZLERIGHT_MAG,0.2*MUZZLECLIMB_MAG}; + kickBack[] = {0.02*KICKBACK,0.04*KICKBACK}; + temporary = 0.015*MUZZLETEMP; }; class recoil_trg20: recoil_default { - muzzleOuter[] = {0.2,1,0.3,0.3}; - kickBack[] = {0.02,0.04}; - temporary = 0.015; + muzzleOuter[] = {0.2*MUZZLERIGHT_POS,1*MUZZLECLIMB_POS,0.3*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG}; + kickBack[] = {0.02*KICKBACK,0.04*KICKBACK}; + temporary = 0.015*MUZZLETEMP; }; class recoil_trg21: recoil_default { - muzzleOuter[] = {0.2,0.8,0.3,0.2}; - kickBack[] = {0.01,0.03}; - temporary = 0.01; + muzzleOuter[] = {0.2*MUZZLERIGHT_POS,0.8*MUZZLECLIMB_POS,0.3*MUZZLERIGHT_MAG,0.2*MUZZLECLIMB_MAG}; + kickBack[] = {0.01*KICKBACK,0.03*KICKBACK}; + temporary = 0.01*MUZZLETEMP; }; class recoil_mx: recoil_default { - muzzleOuter[] = {0.3,1,0.4,0.3}; - kickBack[] = {0.02,0.04}; - temporary = 0.01; + muzzleOuter[] = {0.3*MUZZLERIGHT_POS,1*MUZZLECLIMB_POS,0.4*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG}; + kickBack[] = {0.02*KICKBACK,0.04*KICKBACK}; + temporary = 0.01*MUZZLETEMP; }; class recoil_mxc: recoil_default { - muzzleOuter[] = {0.3,1.2,0.4,0.3}; - kickBack[] = {0.03,0.06}; - temporary = 0.015; + muzzleOuter[] = {0.3*MUZZLERIGHT_POS,1.2*MUZZLECLIMB_POS,0.4*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG}; + kickBack[] = {0.03*KICKBACK,0.06*KICKBACK}; + temporary = 0.015*MUZZLETEMP; }; class recoil_sw: recoil_default { - muzzleOuter[] = {0.3,0.8,0.5,0.2}; - kickBack[] = {0.02,0.04}; - temporary = 0.005; + muzzleOuter[] = {0.3*MUZZLERIGHT_POS,0.8*MUZZLECLIMB_POS,0.5*MUZZLERIGHT_MAG,0.2*MUZZLECLIMB_MAG}; + kickBack[] = {0.02*KICKBACK,0.04*KICKBACK}; + temporary = 0.005*MUZZLETEMP; }; class recoil_mxm: recoil_default { - muzzleOuter[] = {0.3,0.8,0.4,0.3}; - kickBack[] = {0.02,0.04}; - temporary = 0.01; + muzzleOuter[] = {0.3*MUZZLERIGHT_POS,0.8*MUZZLECLIMB_POS,0.4*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG}; + kickBack[] = {0.02*KICKBACK,0.04*KICKBACK}; + temporary = 0.01*MUZZLETEMP; }; class recoil_ktb: recoil_default { - muzzleOuter[] = {0.3,1,0.3,0.3}; - kickBack[] = {0.02,0.04}; - temporary = 0.01; + muzzleOuter[] = {0.3*MUZZLERIGHT_POS,1*MUZZLECLIMB_POS,0.3*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG}; + kickBack[] = {0.02*KICKBACK,0.04*KICKBACK}; + temporary = 0.01*MUZZLETEMP; }; class recoil_ktbc: recoil_default { - muzzleOuter[] = {0.3,1.2,0.3,0.3}; - kickBack[] = {0.03,0.06}; - temporary = 0.015; + muzzleOuter[] = {0.3*MUZZLERIGHT_POS,1.2*MUZZLECLIMB_POS,0.3*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG}; + kickBack[] = {0.03*KICKBACK,0.06*KICKBACK}; + temporary = 0.015*MUZZLETEMP; }; class recoil_smg_01: recoil_default { - muzzleOuter[] = {0.1,0.8,0.3,0.2}; - kickBack[] = {0.01,0.03}; - temporary = 0.015; + muzzleOuter[] = {0.1*MUZZLERIGHT_POS,0.8*MUZZLECLIMB_POS,0.3*MUZZLERIGHT_MAG,0.2*MUZZLECLIMB_MAG}; + kickBack[] = {0.01*KICKBACK,0.03*KICKBACK}; + temporary = 0.015*MUZZLETEMP; }; class recoil_smg_02: recoil_default { - muzzleOuter[] = {0.1,0.6,0.2,0.2}; - kickBack[] = {0.01,0.02}; - temporary = 0.01; + muzzleOuter[] = {0.1*MUZZLERIGHT_POS,0.6*MUZZLECLIMB_POS,0.2*MUZZLERIGHT_MAG,0.2*MUZZLECLIMB_MAG}; + kickBack[] = {0.01*KICKBACK,0.02*KICKBACK}; + temporary = 0.01*MUZZLETEMP; }; class recoil_pdw: recoil_default { - muzzleOuter[] = {0.2,1,0.3,0.3}; - kickBack[] = {0.02,0.04}; - temporary = 0.02; + muzzleOuter[] = {0.2*MUZZLERIGHT_POS,1*MUZZLECLIMB_POS,0.3*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG}; + kickBack[] = {0.02*KICKBACK,0.04*KICKBACK}; + temporary = 0.02*MUZZLETEMP; }; class recoil_sdar: recoil_default { - muzzleOuter[] = {0.2,1,0.3,0.3}; - kickBack[] = {0.02,0.04}; - temporary = 0.01; + muzzleOuter[] = {0.2*MUZZLERIGHT_POS,1*MUZZLECLIMB_POS,0.3*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG}; + kickBack[] = {0.02*KICKBACK,0.04*KICKBACK}; + temporary = 0.01*MUZZLETEMP; }; class recoil_pistol_p07: recoil_default { - muzzleOuter[] = {0.2,1,0.2,0.3}; - kickBack[] = {0.03,0.06}; - temporary = 0.03; + muzzleOuter[] = {0.2*MUZZLERIGHT_POS,1*MUZZLECLIMB_POS,0.2*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG}; + kickBack[] = {0.03*KICKBACK,0.06*KICKBACK}; + temporary = 0.03*MUZZLETEMP; }; class recoil_pistol_rook40: recoil_default { - muzzleOuter[] = {0.2,1,0.2,0.3}; - kickBack[] = {0.03,0.06}; - temporary = 0.02; + muzzleOuter[] = {0.2*MUZZLERIGHT_POS,1*MUZZLECLIMB_POS,0.2*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG}; + kickBack[] = {0.03*KICKBACK,0.06*KICKBACK}; + temporary = 0.02*MUZZLETEMP; }; class recoil_pistol_acpc2: recoil_default { - muzzleOuter[] = {0.2,1.5,0.2,0.3}; - kickBack[] = {0.04,0.08}; - temporary = 0.04; + muzzleOuter[] = {0.2*MUZZLERIGHT_POS,1.5*MUZZLECLIMB_POS,0.2*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG}; + kickBack[] = {0.04*KICKBACK,0.08*KICKBACK}; + temporary = 0.04*MUZZLETEMP; }; class recoil_pistol_4five: recoil_default { - muzzleOuter[] = {0.2,1.5,0.2,0.3}; - kickBack[] = {0.04,0.08}; - temporary = 0.06; + muzzleOuter[] = {0.2*MUZZLERIGHT_POS,1.5*MUZZLECLIMB_POS,0.2*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG}; + kickBack[] = {0.04*KICKBACK,0.08*KICKBACK}; + temporary = 0.06*MUZZLETEMP; }; class recoil_pistol_zubr: recoil_default { - muzzleOuter[] = {0.2,1.5,0.2,0.3}; - kickBack[] = {0.04,0.08}; - temporary = 0.08; + muzzleOuter[] = {0.2*MUZZLERIGHT_POS,1.5*MUZZLECLIMB_POS,0.2*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG}; + kickBack[] = {0.04*KICKBACK,0.08*KICKBACK}; + temporary = 0.08*MUZZLETEMP; }; class recoil_pistol_signal: recoil_default { - muzzleOuter[] = {0.2,1.5,0.2,0.3}; - kickBack[] = {0.02,0.04}; - temporary = 0.02; + muzzleOuter[] = {0.2*MUZZLERIGHT_POS,1.5*MUZZLECLIMB_POS,0.2*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG}; + kickBack[] = {0.02*KICKBACK,0.04*KICKBACK}; + temporary = 0.02*MUZZLETEMP; }; class recoil_rpg: recoil_default { - muzzleOuter[] = {2,3,1,0.5}; - kickBack[] = {0.08,0.1}; - temporary = 0.1; + muzzleOuter[] = {2*MUZZLERIGHT_POS,3*MUZZLECLIMB_POS,1*MUZZLERIGHT_MAG,0.5*MUZZLECLIMB_MAG}; + kickBack[] = {0.08*KICKBACK,0.1*KICKBACK}; + temporary = 0.1*MUZZLETEMP; }; class recoil_nlaw: recoil_default { - muzzleOuter[] = {2,3,1,0.5}; - kickBack[] = {0.06,0.08}; - temporary = 0.08; + muzzleOuter[] = {2*MUZZLERIGHT_POS,3*MUZZLECLIMB_POS,1*MUZZLERIGHT_MAG,0.5*MUZZLECLIMB_MAG}; + kickBack[] = {0.06*KICKBACK,0.08*KICKBACK}; + temporary = 0.08*MUZZLETEMP; }; class recoil_titan_long: recoil_default { - muzzleOuter[] = {2,3,1,0.5}; - kickBack[] = {0.1,0.12}; - temporary = 0.15; + muzzleOuter[] = {2*MUZZLERIGHT_POS,3*MUZZLECLIMB_POS,1*MUZZLERIGHT_MAG,0.5*MUZZLECLIMB_MAG}; + kickBack[] = {0.1*KICKBACK,0.12*KICKBACK}; + temporary = 0.15*MUZZLETEMP; }; class recoil_titan_short: recoil_default { - muzzleOuter[] = {2,3,1,0.5}; - kickBack[] = {0.1,0.12}; - temporary = 0.12; + muzzleOuter[] = {2*MUZZLERIGHT_POS,3*MUZZLECLIMB_POS,1*MUZZLERIGHT_MAG,0.5*MUZZLECLIMB_MAG}; + kickBack[] = {0.1*KICKBACK,0.12*KICKBACK}; + temporary = 0.12*MUZZLETEMP; }; class recoil_mk200: recoil_default { - muzzleOuter[] = {0.4,0.6,0.6,0.2}; - kickBack[] = {0.03,0.06}; - temporary = 0.005; + muzzleOuter[] = {0.4*MUZZLERIGHT_POS,0.6*MUZZLECLIMB_POS,0.6*MUZZLERIGHT_MAG,0.2*MUZZLECLIMB_MAG}; + kickBack[] = {0.03*KICKBACK,0.06*KICKBACK}; + temporary = 0.005*MUZZLETEMP; }; class recoil_zafir: recoil_default { - muzzleOuter[] = {0.5,1,0.7,0.3}; - kickBack[] = {0.02,0.08}; - temporary = 0.005; + muzzleOuter[] = {0.5*MUZZLERIGHT_POS,1*MUZZLECLIMB_POS,0.7*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG}; + kickBack[] = {0.02*KICKBACK,0.08*KICKBACK}; + temporary = 0.005*MUZZLETEMP; }; class recoil_m320: recoil_default { - muzzleOuter[] = {1,3,0.5,0.6}; - kickBack[] = {0.08,0.1}; - temporary = 0.02; + muzzleOuter[] = {1*MUZZLERIGHT_POS,3*MUZZLECLIMB_POS,0.5*MUZZLERIGHT_MAG,0.6*MUZZLECLIMB_MAG}; + kickBack[] = {0.08*KICKBACK,0.1*KICKBACK}; + temporary = 0.02*MUZZLETEMP; }; class recoil_gm6: recoil_default { - muzzleOuter[] = {1.4,3.5,0.7,0.8}; - kickBack[] = {0.1,0.12}; - temporary = 0.025; + muzzleOuter[] = {1.4*MUZZLERIGHT_POS,3.5*MUZZLECLIMB_POS,0.7*MUZZLERIGHT_MAG,0.8*MUZZLECLIMB_MAG}; + kickBack[] = {0.1*KICKBACK,0.12*KICKBACK}; + temporary = 0.025*MUZZLETEMP; }; class recoil_ebr: recoil_default { - muzzleOuter[] = {0.4,1.5,0.6,0.4}; - kickBack[] = {0.04,0.07}; - temporary = 0.01; + muzzleOuter[] = {0.4*MUZZLERIGHT_POS,1.5*MUZZLECLIMB_POS,0.6*MUZZLERIGHT_MAG,0.4*MUZZLECLIMB_MAG}; + kickBack[] = {0.04*KICKBACK,0.07*KICKBACK}; + temporary = 0.01*MUZZLETEMP; }; class recoil_dmr_01: recoil_default { - muzzleOuter[] = {0.5,2,0.5,0.5}; - kickBack[] = {0.03,0.08}; - temporary = 0.015; + muzzleOuter[] = {0.5*MUZZLERIGHT_POS,2*MUZZLECLIMB_POS,0.5*MUZZLERIGHT_MAG,0.5*MUZZLECLIMB_MAG}; + kickBack[] = {0.03*KICKBACK,0.08*KICKBACK}; + temporary = 0.015*MUZZLETEMP; }; class recoil_dmr_02: recoil_default { - muzzleOuter[] = {0.5,2.5,0.6,0.5}; - kickBack[] = {0.06,0.08}; - temporary = 0.01; + muzzleOuter[] = {0.5*MUZZLERIGHT_POS,2.5*MUZZLECLIMB_POS,0.6*MUZZLERIGHT_MAG,0.5*MUZZLECLIMB_MAG}; + kickBack[] = {0.06*KICKBACK,0.08*KICKBACK}; + temporary = 0.01*MUZZLETEMP; }; class recoil_dmr_03: recoil_default { - muzzleOuter[] = {0.3,1.5,0.5,0.4}; - kickBack[] = {0.03,0.06}; - temporary = 0.005; + muzzleOuter[] = {0.3*MUZZLERIGHT_POS,1.5*MUZZLECLIMB_POS,0.5*MUZZLERIGHT_MAG,0.4*MUZZLECLIMB_MAG}; + kickBack[] = {0.03*KICKBACK,0.06*KICKBACK}; + temporary = 0.005*MUZZLETEMP; }; class recoil_dmr_04: recoil_default { - muzzleOuter[] = {0.4,1.5,0.5,0.4}; - kickBack[] = {0.02,0.04}; - temporary = 0.015; + muzzleOuter[] = {0.4*MUZZLERIGHT_POS,1.5*MUZZLECLIMB_POS,0.5*MUZZLERIGHT_MAG,0.4*MUZZLECLIMB_MAG}; + kickBack[] = {0.02*KICKBACK,0.04*KICKBACK}; + temporary = 0.015*MUZZLETEMP; }; class recoil_dmr_05: recoil_default { - muzzleOuter[] = {0.5,2.5,0.8,0.6}; - kickBack[] = {0.08,0.1}; - temporary = 0.01; + muzzleOuter[] = {0.5*MUZZLERIGHT_POS,2.5*MUZZLECLIMB_POS,0.8*MUZZLERIGHT_MAG,0.6*MUZZLECLIMB_MAG}; + kickBack[] = {0.08*KICKBACK,0.1*KICKBACK}; + temporary = 0.01*MUZZLETEMP; }; class recoil_dmr_06: recoil_default { - muzzleOuter[] = {0.5,2,0.7,0.5}; - kickBack[] = {0.05,0.1}; - temporary = 0.01; + muzzleOuter[] = {0.5*MUZZLERIGHT_POS,2*MUZZLECLIMB_POS,0.7*MUZZLERIGHT_MAG,0.5*MUZZLECLIMB_MAG}; + kickBack[] = {0.05*KICKBACK,0.1*KICKBACK}; + temporary = 0.01*MUZZLETEMP; }; class recoil_mmg_01: recoil_default { - muzzleOuter[] = {0.6,1.5,0.8,0.3}; - kickBack[] = {0.02,0.08}; - temporary = 0.005; + muzzleOuter[] = {0.6*MUZZLERIGHT_POS,1.5*MUZZLECLIMB_POS,0.8*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG}; + kickBack[] = {0.02*KICKBACK,0.08*KICKBACK}; + temporary = 0.005*MUZZLETEMP; }; class recoil_mmg_02: recoil_default { - muzzleOuter[] = {0.5,1.5,0.6,0.4}; - kickBack[] = {0.04,0.08}; - temporary = 0.005; + muzzleOuter[] = {0.5*MUZZLERIGHT_POS,1.5*MUZZLECLIMB_POS,0.6*MUZZLERIGHT_MAG,0.4*MUZZLECLIMB_MAG}; + kickBack[] = {0.04*KICKBACK,0.08*KICKBACK}; + temporary = 0.005*MUZZLETEMP; }; }; From 16c6a3ee78670aff369eed85ab769c93bba3966a Mon Sep 17 00:00:00 2001 From: commy2 <commy-2@gmx.de> Date: Mon, 20 Apr 2015 17:38:45 +0200 Subject: [PATCH 231/257] tweaking recoil --- addons/recoil/CfgRecoils.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/recoil/CfgRecoils.hpp b/addons/recoil/CfgRecoils.hpp index eac31babe8..56a28f1dc1 100644 --- a/addons/recoil/CfgRecoils.hpp +++ b/addons/recoil/CfgRecoils.hpp @@ -1,11 +1,11 @@ -#define KICKBACK 1 +#define KICKBACK 1.6 #define MUZZLETEMP 1 -#define MUZZLEPERM 1 +#define MUZZLEPERM 0.1 #define MUZZLECLIMB_POS 1 -#define MUZZLERIGHT_POS 1 +#define MUZZLERIGHT_POS 0.4 #define MUZZLECLIMB_MAG 1 #define MUZZLERIGHT_MAG 1 From ea368511b7ed013dcd72dbefa8791c404de4f341 Mon Sep 17 00:00:00 2001 From: commy2 <commy-2@gmx.de> Date: Mon, 20 Apr 2015 18:48:58 +0200 Subject: [PATCH 232/257] ace extensions class for modularity --- addons/advanced_ballistics/config.cpp | 6 +++++- addons/common/XEH_postInit.sqf | 2 +- addons/common/config.cpp | 4 ++++ addons/common/script_component.hpp | 4 +--- addons/fcs/config.cpp | 4 ++++ addons/interact_menu/config.cpp | 4 ++++ 6 files changed, 19 insertions(+), 5 deletions(-) diff --git a/addons/advanced_ballistics/config.cpp b/addons/advanced_ballistics/config.cpp index 32f1406a07..1a2187783b 100644 --- a/addons/advanced_ballistics/config.cpp +++ b/addons/advanced_ballistics/config.cpp @@ -15,4 +15,8 @@ class CfgPatches { #include "CfgEventHandlers.hpp" #include "CfgVehicles.hpp" #include "RscTitles.hpp" -#include "ACE_Settings.hpp" \ No newline at end of file +#include "ACE_Settings.hpp" + +class ACE_Extensions { + extensions[] += {"ace_advanced_ballistics"}; +}; diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index 55a7cfde40..3a16ac9d43 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -257,4 +257,4 @@ if(isMultiplayer && { time > 0 || isNull player } ) then { diag_log text format ["[ACE] ERROR: %1", _errorMsg]; ["[ACE] ERROR", _errorMsg, {findDisplay 46 closeDisplay 0}] call FUNC(errorMessage); }; -} forEach ACE_DLLS; +} forEach getArray (configFile >> "ACE_Extensions" >> "extensions"); diff --git a/addons/common/config.cpp b/addons/common/config.cpp index 21d6a6facb..16bd13fc0c 100644 --- a/addons/common/config.cpp +++ b/addons/common/config.cpp @@ -160,3 +160,7 @@ class RscDisplayMain: RscStandardDisplay { onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscDisplayMain"",'GUI')] call (uinamespace getvariable 'BIS_fnc_initDisplay'); [ARR_5('header','tail',{0},{},_this select 0)] call COMPILE_FILE(functions\fnc_errorMessage)); }; */ + +class ACE_Extensions { + extensions[] = {}; +}; diff --git a/addons/common/script_component.hpp b/addons/common/script_component.hpp index 398080f7ec..7c266c169d 100644 --- a/addons/common/script_component.hpp +++ b/addons/common/script_component.hpp @@ -11,6 +11,4 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_COMMON #endif -#include "\z\ace\addons\main\script_macros.hpp" - -#define ACE_DLLS ["ace_breakLine","ace_advanced_ballistics","ace_fcs"] +#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file diff --git a/addons/fcs/config.cpp b/addons/fcs/config.cpp index 711cbbbd25..12edf02ba3 100644 --- a/addons/fcs/config.cpp +++ b/addons/fcs/config.cpp @@ -20,3 +20,7 @@ class CfgPatches { #include "CfgWeapons.hpp" #include "CfgOptics.hpp" + +class ACE_Extensions { + extensions[] += {"ace_fcs"}; +}; diff --git a/addons/interact_menu/config.cpp b/addons/interact_menu/config.cpp index f87062bf6f..26579ba05b 100644 --- a/addons/interact_menu/config.cpp +++ b/addons/interact_menu/config.cpp @@ -30,3 +30,7 @@ class ACE_Settings { displayName = "$STR_ACE_Interact_Menu_UseListMenu"; }; }; + +class ACE_Extensions { + extensions[] += {"ace_breakLine"}; +}; From 9295393dd6d5c443b7ac4c3edf9f2756f86dc521 Mon Sep 17 00:00:00 2001 From: esteldunedain <nicolas.d.badano@gmail.com> Date: Mon, 20 Apr 2015 13:54:20 -0300 Subject: [PATCH 233/257] Allow cursor for interactions --- addons/interact_menu/config.cpp | 6 ++++++ addons/interact_menu/functions/fnc_keyDown.sqf | 4 +++- addons/interact_menu/stringtable.xml | 6 ++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/addons/interact_menu/config.cpp b/addons/interact_menu/config.cpp index f87062bf6f..139ff2db97 100644 --- a/addons/interact_menu/config.cpp +++ b/addons/interact_menu/config.cpp @@ -23,6 +23,12 @@ class ACE_Settings { isClientSettable = 1; displayName = "$STR_ACE_Interact_Menu_AlwaysUseCursorSelfInteraction"; }; + class GVAR(AlwaysUseCursorInteraction) { + value = 0; + typeName = "BOOL"; + isClientSettable = 1; + displayName = "$STR_ACE_Interact_Menu_AlwaysUseCursorInteraction"; + }; class GVAR(UseListMenu) { value = 0; typeName = "BOOL"; diff --git a/addons/interact_menu/functions/fnc_keyDown.sqf b/addons/interact_menu/functions/fnc_keyDown.sqf index 123c1d45e2..1bd4d04474 100644 --- a/addons/interact_menu/functions/fnc_keyDown.sqf +++ b/addons/interact_menu/functions/fnc_keyDown.sqf @@ -33,7 +33,9 @@ GVAR(lastTimeSearchedActions) = -1000; GVAR(useCursorMenu) = (vehicle ACE_player != ACE_player) || visibleMap || - {(_menuType == 1) && {(isWeaponDeployed ACE_player) || GVAR(AlwaysUseCursorSelfInteraction) || {cameraView == "GUNNER"}}}; + {(_menuType == 1) && {(isWeaponDeployed ACE_player) || GVAR(AlwaysUseCursorSelfInteraction) || {cameraView == "GUNNER"}}} || + {(_menuType == 0) && GVAR(AlwaysUseCursorInteraction)}; + if (GVAR(useCursorMenu)) then { createDialog QGVAR(cursorMenu); // The dialog sets: diff --git a/addons/interact_menu/stringtable.xml b/addons/interact_menu/stringtable.xml index 083a02d0f6..0b37f40f5e 100644 --- a/addons/interact_menu/stringtable.xml +++ b/addons/interact_menu/stringtable.xml @@ -12,6 +12,12 @@ <Hungarian>Mindig legyen a saját cselekvés kurzorja látható</Hungarian> <Italian>Mostra sempre il cursore per le auto interazioni</Italian> </Key> + <Key ID="STR_ACE_Interact_Menu_AlwaysUseCursorInteraction"> + <English>Always display cursor for interaction</English> + <Spanish>Mostrar siempre el cursor para la interacción</Spanish> + <French>Toujours afficher le curseur pour les interactions</French> + <Italian>Mostra sempre il cursore per le interazioni</Italian> + </Key> <Key ID="STR_ACE_Interact_Menu_UseListMenu"> <English>Display interaction menus as lists</English> <Spanish>Mostrar los menus de interacción como listas</Spanish> From a1afd873427bc924966e640bf6f2f3e4ab02f598 Mon Sep 17 00:00:00 2001 From: OnkelDisMaster <arrows96@gmx.de> Date: Mon, 20 Apr 2015 19:56:10 +0200 Subject: [PATCH 234/257] Update config.cpp --- optionals/asdg_comp/config.cpp | 54 +++++++++++++++------------------- 1 file changed, 24 insertions(+), 30 deletions(-) diff --git a/optionals/asdg_comp/config.cpp b/optionals/asdg_comp/config.cpp index 18ef70cb1c..b485685c55 100644 --- a/optionals/asdg_comp/config.cpp +++ b/optionals/asdg_comp/config.cpp @@ -1,42 +1,36 @@ #include "script_component.hpp" -class CfgPatches -{ - class ADDON - { - units[] = {}; - weapons[] = {}; - requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"asdg_jointrails","ace_laserpointer","ace_optics"}; - author[]={"OnkelDisMaster"}; - authorUrl = "http://2.xn--gebirgsjgerkompanie-nwb.de/"; - VERSION_CONFIG; +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"asdg_jointrails","ace_laserpointer","ace_optics"}; + author[]={"OnkelDisMaster"}; + authorUrl = "http://2.xn--gebirgsjgerkompanie-nwb.de/"; + VERSION_CONFIG; }; }; class asdg_SlotInfo; -class asdg_FrontSideRail: asdg_SlotInfo -{ - class compatibleItems - { - ACE_acc_pointer_red = 1; - ACE_acc_pointer_green = 1; +class asdg_FrontSideRail: asdg_SlotInfo { + class compatibleItems { + ACE_acc_pointer_red = 1; + ACE_acc_pointer_green = 1; }; }; class asdg_OpticRail; -class asdg_OpticRail1913: asdg_OpticRail -{ - class compatibleItems - { - ACE_optic_Hamr_2D = 1; - ACE_optic_Hamr_PIP = 1; - ACE_optic_Arco_2D = 1; - ACE_optic_Arco_PIP = 1; - ACE_optic_MRCO_2D = 1; - ACE_optic_SOS_2D = 1; - ACE_optic_SOS_PIP = 1; - ACE_optic_LRPS_2D = 1; - ACE_optic_LRPS_PIP = 1; +class asdg_OpticRail1913: asdg_OpticRail { + class compatibleItems { + ACE_optic_Hamr_2D = 1; + ACE_optic_Hamr_PIP = 1; + ACE_optic_Arco_2D = 1; + ACE_optic_Arco_PIP = 1; + ACE_optic_MRCO_2D = 1; + ACE_optic_SOS_2D = 1; + ACE_optic_SOS_PIP = 1; + ACE_optic_LRPS_2D = 1; + ACE_optic_LRPS_PIP = 1; }; }; From 51abafd09938ef6bc99bbe9235b021f335e9ad7d Mon Sep 17 00:00:00 2001 From: OnkelDisMaster <arrows96@gmx.de> Date: Mon, 20 Apr 2015 20:28:34 +0200 Subject: [PATCH 235/257] Added my name to AUTHORS.txt Added myself to the contirbutors, after #485 --- AUTHORS.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.txt b/AUTHORS.txt index 2f16aea49c..05049978e6 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -82,3 +82,4 @@ BlackPixxel Asgar Serran <piechottaf@web.de> Kavinsky <nmunozfernandez@gmail.com> Coren <coren4@gmail.com> +OnkelDisMaster <onkeldismaster@gmail.com> From ae3c8e3d88e073cdb02bf1db771a7703d57844e1 Mon Sep 17 00:00:00 2001 From: commy2 <commy-2@gmx.de> Date: Mon, 20 Apr 2015 21:10:56 +0200 Subject: [PATCH 236/257] weapon select keys are optional --- addons/weaponselect/XEH_postInit.sqf | 48 ++++++++++++++-------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/addons/weaponselect/XEH_postInit.sqf b/addons/weaponselect/XEH_postInit.sqf index ae6cfafb9d..93813b4ed0 100644 --- a/addons/weaponselect/XEH_postInit.sqf +++ b/addons/weaponselect/XEH_postInit.sqf @@ -4,7 +4,7 @@ if !(hasInterface) exitWith {}; // Add keybinds -/*["ACE3", QGVAR(SelectPistol), localize "STR_ACE_WeaponSelect_SelectPistol", +["ACE3", QGVAR(SelectPistolNew), localize "STR_ACE_WeaponSelect_SelectPistol", { // Conditions: canInteract if !([ACE_player, ACE_player, ["isNotEscorting"]] call EFUNC(common,canInteractWith)) exitWith {false}; @@ -13,12 +13,12 @@ if !(hasInterface) exitWith {}; // Statement [ACE_player, handgunWeapon ACE_player] call FUNC(selectWeaponMode); - true + false }, {false}, -[2, [false, false, false]], false] call cba_fnc_addKeybind; //1 Key +[0, [false, false, false]], false] call cba_fnc_addKeybind; //1 Key -["ACE3", QGVAR(SelectRifle), localize "STR_ACE_WeaponSelect_SelectRifle", +["ACE3", QGVAR(SelectRifleNew), localize "STR_ACE_WeaponSelect_SelectRifle", { // Conditions: canInteract if !([ACE_player, ACE_player, ["isNotEscorting"]] call EFUNC(common,canInteractWith)) exitWith {false}; @@ -27,12 +27,12 @@ if !(hasInterface) exitWith {}; // Statement [ACE_player, primaryWeapon ACE_player] call FUNC(selectWeaponMode); - true + false }, {false}, -[3, [false, false, false]], false] call cba_fnc_addKeybind; //2 Key +[0, [false, false, false]], false] call cba_fnc_addKeybind; //2 Key -["ACE3", QGVAR(SelectRifleMuzzle), localize "STR_ACE_WeaponSelect_SelectRifleMuzzle", +["ACE3", QGVAR(SelectRifleMuzzleNew), localize "STR_ACE_WeaponSelect_SelectRifleMuzzle", { // Conditions: canInteract if !([ACE_player, ACE_player, ["isNotEscorting"]] call EFUNC(common,canInteractWith)) exitWith {false}; @@ -41,12 +41,12 @@ if !(hasInterface) exitWith {}; // Statement [ACE_player, primaryWeapon ACE_player] call FUNC(selectWeaponMuzzle); - true + false }, {false}, -[4, [false, false, false]], false] call cba_fnc_addKeybind; //3 Key +[0, [false, false, false]], false] call cba_fnc_addKeybind; //3 Key -["ACE3", QGVAR(SelectLauncher), localize "STR_ACE_WeaponSelect_SelectLauncher", +["ACE3", QGVAR(SelectLauncherNew), localize "STR_ACE_WeaponSelect_SelectLauncher", { // Conditions: canInteract if !([ACE_player, ACE_player, ["isNotEscorting"]] call EFUNC(common,canInteractWith)) exitWith {false}; @@ -55,12 +55,12 @@ if !(hasInterface) exitWith {}; // Statement [ACE_player, secondaryWeapon ACE_player] call FUNC(selectWeaponMode); - true + false }, {false}, -[5, [false, false, false]], false] call cba_fnc_addKeybind; //4 Key +[0, [false, false, false]], false] call cba_fnc_addKeybind; //4 Key -["ACE3", QGVAR(SelectBinocular), localize "STR_ACE_WeaponSelect_SelectBinocular", +["ACE3", QGVAR(SelectBinocularNew), localize "STR_ACE_WeaponSelect_SelectBinocular", { // Conditions: canInteract if !([ACE_player, ACE_player, ["isNotEscorting"]] call EFUNC(common,canInteractWith)) exitWith {false}; @@ -69,10 +69,10 @@ if !(hasInterface) exitWith {}; // Statement [ACE_player, binocular ACE_player] call FUNC(selectWeaponMode); - true + false }, {false}, -[6, [false, false, false]], false] call cba_fnc_addKeybind; //5 Key*/ +[0, [false, false, false]], false] call cba_fnc_addKeybind; //5 Key ["ACE3", QGVAR(SelectGrenadeFrag), localize "STR_ACE_WeaponSelect_SelectGrenadeFrag", { @@ -144,7 +144,7 @@ if !(hasInterface) exitWith {}; {false}, [2, [false, false, false]], false] call cba_fnc_addKeybind; //1 Key -/*["ACE3", QGVAR(SelectMainGun), localize "STR_ACE_WeaponSelect_SelectMainGun", +["ACE3", QGVAR(SelectMainGunNew), localize "STR_ACE_WeaponSelect_SelectMainGun", { // Conditions: canInteract if !([ACE_player, ACE_player, []] call EFUNC(common,canInteractWith)) exitWith {false}; @@ -153,12 +153,12 @@ if !(hasInterface) exitWith {}; // Statement [ACE_player, vehicle ACE_player, 0] call FUNC(selectWeaponVehicle); - true + false }, {false}, -[4, [false, false, false]], false] call cba_fnc_addKeybind; //3 Key +[0, [false, false, false]], false] call cba_fnc_addKeybind; //3 Key -["ACE3", QGVAR(SelectMachineGun), localize "STR_ACE_WeaponSelect_SelectMachineGun", +["ACE3", QGVAR(SelectMachineGunNew), localize "STR_ACE_WeaponSelect_SelectMachineGun", { // Conditions: canInteract if !([ACE_player, ACE_player, []] call EFUNC(common,canInteractWith)) exitWith {false}; @@ -167,12 +167,12 @@ if !(hasInterface) exitWith {}; // Statement [ACE_player, vehicle ACE_player, 1] call FUNC(selectWeaponVehicle); - true + false }, {false}, -[5, [false, false, false]], false] call cba_fnc_addKeybind; //4 Key +[0, [false, false, false]], false] call cba_fnc_addKeybind; //4 Key -["ACE3", QGVAR(SelectMissiles), localize "STR_ACE_WeaponSelect_SelectMissiles", +["ACE3", QGVAR(SelectMissilesNew), localize "STR_ACE_WeaponSelect_SelectMissiles", { // Conditions: canInteract if !([ACE_player, ACE_player, []] call EFUNC(common,canInteractWith)) exitWith {false}; @@ -181,10 +181,10 @@ if !(hasInterface) exitWith {}; // Statement [ACE_player, vehicle ACE_player, 2] call FUNC(selectWeaponVehicle); - true + false }, {false}, -[6, [false, false, false]], false] call cba_fnc_addKeybind; //5 Key*/ +[0, [false, false, false]], false] call cba_fnc_addKeybind; //5 Key ["ACE3", QGVAR(FireSmokeLauncher), localize "STR_ACE_WeaponSelect_FireSmokeLauncher", { From 8be7ccaab7989b717b6559f87816d59c71428a0e Mon Sep 17 00:00:00 2001 From: Glowbal <thomasskooi@live.nl> Date: Mon, 20 Apr 2015 21:37:30 +0200 Subject: [PATCH 237/257] setting for moving unit from group on unconscious --- addons/medical/ACE_Settings.hpp | 10 +++++++--- addons/medical/functions/fnc_setUnconscious.sqf | 4 +++- addons/medical/functions/fnc_unconsciousPFH.sqf | 8 ++++++-- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/addons/medical/ACE_Settings.hpp b/addons/medical/ACE_Settings.hpp index 0270bee89b..e7f60a14e8 100644 --- a/addons/medical/ACE_Settings.hpp +++ b/addons/medical/ACE_Settings.hpp @@ -79,16 +79,16 @@ class ACE_Settings { displayName = "$STR_ACE_Medical_litterSimulationDetail"; description = "$STR_ACE_Medical_litterSimulationDetail_Desc"; typeName = "SCALAR"; - + value = 3; values[] = {"Off", "Low", "Medium", "High", "Ultra"}; _values[] = { 0, 50, 100, 1000, 5000 }; - + isClientSettable = 1; }; class GVAR(litterCleanUpDelay) { typeName = "SCALAR"; - value = 0; + value = 0; }; class GVAR(medicSetting_PAK) { typeName = "SCALAR"; @@ -139,4 +139,8 @@ class ACE_Settings { typeName = "BOOL"; value = 0; }; + class GVAR(moveUnitsFromGroupOnUnconscious) { + typeName = "BOOL"; + value = 0; + }; }; diff --git a/addons/medical/functions/fnc_setUnconscious.sqf b/addons/medical/functions/fnc_setUnconscious.sqf index ef9ccb246d..e527215c51 100644 --- a/addons/medical/functions/fnc_setUnconscious.sqf +++ b/addons/medical/functions/fnc_setUnconscious.sqf @@ -73,7 +73,9 @@ _unit setUnitPos "DOWN"; // So the AI does not get stuck, we are moving the unit to a temp group on its own. //Unconscious units shouldn't be put in another group #527: -// [_unit, true, "ACE_isUnconscious", side group _unit] call EFUNC(common,switchToGroupSide); +if (GVAR(moveUnitsFromGroupOnUnconscious)) then { + [_unit, true, "ACE_isUnconscious", side group _unit] call EFUNC(common,switchToGroupSide); +}; [_unit, QGVAR(unconscious), true] call EFUNC(common,setCaptivityStatus); [_unit, [_unit] call EFUNC(common,getDeathAnim), 1, true] call EFUNC(common,doAnimation); diff --git a/addons/medical/functions/fnc_unconsciousPFH.sqf b/addons/medical/functions/fnc_unconsciousPFH.sqf index 406d0278c1..1d7558e5fc 100644 --- a/addons/medical/functions/fnc_unconsciousPFH.sqf +++ b/addons/medical/functions/fnc_unconsciousPFH.sqf @@ -24,6 +24,9 @@ _hasMovedOut = _args select 5; _parachuteCheck = _args select 6; if (!alive _unit) exitwith { + if (GVAR(moveUnitsFromGroupOnUnconscious)) then { + [_unit, false, "ACE_isUnconscious", side group _unit] call EFUNC(common,switchToGroupSide); + }; [_unit, QGVAR(unconscious), false] call EFUNC(common,setCaptivityStatus); [_unit, false] call EFUNC(common,disableAI); //_unit setUnitPos _originalPos; @@ -60,8 +63,9 @@ if !(_unit getvariable ["ACE_isUnconscious",false]) exitwith { // Swhich the unit back to its original group //Unconscious units shouldn't be put in another group #527: - // [_unit, false, "ACE_isUnconscious", side group _unit] call EFUNC(common,switchToGroupSide); - + if (GVAR(moveUnitsFromGroupOnUnconscious)) then { + [_unit, false, "ACE_isUnconscious", side group _unit] call EFUNC(common,switchToGroupSide); + }; [_unit, false] call EFUNC(common,disableAI); _unit setUnitPos _originalPos; // This is not position but stance (DOWN, MIDDLE, UP) From 90cf882e026fd310000b9598963c15dcf23ab8d1 Mon Sep 17 00:00:00 2001 From: Glowbal <thomasskooi@live.nl> Date: Mon, 20 Apr 2015 21:58:27 +0200 Subject: [PATCH 238/257] Using setvar instead of event sync again --- addons/medical/script_component.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/medical/script_component.hpp b/addons/medical/script_component.hpp index bac6744bc1..939a811a41 100644 --- a/addons/medical/script_component.hpp +++ b/addons/medical/script_component.hpp @@ -11,4 +11,4 @@ #include "\z\ace\addons\main\script_macros.hpp" -#define USE_WOUND_EVENT_SYNC true +#define USE_WOUND_EVENT_SYNC false From 842bfe0b98360874e1c78354f469045549b19789 Mon Sep 17 00:00:00 2001 From: Glowbal <thomasskooi@live.nl> Date: Mon, 20 Apr 2015 22:00:11 +0200 Subject: [PATCH 239/257] enabled advanced wounds setting --- .../medical/functions/fnc_treatmentAdvanced_bandageLocal.sqf | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/addons/medical/functions/fnc_treatmentAdvanced_bandageLocal.sqf b/addons/medical/functions/fnc_treatmentAdvanced_bandageLocal.sqf index 29bc6dc4d3..2884503599 100644 --- a/addons/medical/functions/fnc_treatmentAdvanced_bandageLocal.sqf +++ b/addons/medical/functions/fnc_treatmentAdvanced_bandageLocal.sqf @@ -92,8 +92,7 @@ if (USE_WOUND_EVENT_SYNC) then { }; // Handle the reopening of bandaged wounds if (_impact > 0 && {GVAR(enableAdvancedWounds)}) then { -// TODO temp disabled until bandaged wounds are supported by event sync. -// [_target, _impact, _part, _mostEffectiveSpot, _mostEffectiveInjury, _bandage] call FUNC(handleBandageOpening); + [_target, _impact, _part, _mostEffectiveSpot, _mostEffectiveInjury, _bandage] call FUNC(handleBandageOpening); }; // If all wounds have been bandaged, we will reset all damage to 0, so the unit is not showing any blood on the model anymore. From afc8abce851bc66e3bce6b5fb911e08d386964dc Mon Sep 17 00:00:00 2001 From: commy2 <commy-2@gmx.de> Date: Mon, 20 Apr 2015 22:00:13 +0200 Subject: [PATCH 240/257] hide open bag option when it's not selected via scroll wheel --- addons/interact_menu/CfgActions.hpp | 7 +++++++ addons/interact_menu/config.cpp | 2 ++ 2 files changed, 9 insertions(+) create mode 100644 addons/interact_menu/CfgActions.hpp diff --git a/addons/interact_menu/CfgActions.hpp b/addons/interact_menu/CfgActions.hpp new file mode 100644 index 0000000000..79af4f09b2 --- /dev/null +++ b/addons/interact_menu/CfgActions.hpp @@ -0,0 +1,7 @@ + +class CfgActions { + class None; + class OpenBag: None { + showWindow = 0; + }; +}; diff --git a/addons/interact_menu/config.cpp b/addons/interact_menu/config.cpp index 81d2dc3f75..eeff688a1a 100644 --- a/addons/interact_menu/config.cpp +++ b/addons/interact_menu/config.cpp @@ -14,6 +14,8 @@ class CfgPatches { #include "CfgEventHandlers.hpp" +#include "CfgActions.hpp" + #include "CursorMenus.hpp" class ACE_Settings { From f7719f0e0ae7a8564881dba89ae7022a5cc4520c Mon Sep 17 00:00:00 2001 From: Glowbal <thomasskooi@live.nl> Date: Mon, 20 Apr 2015 22:08:31 +0200 Subject: [PATCH 241/257] tab --- addons/medical/functions/fnc_actionLoadUnit.sqf | 4 ++-- addons/medical/functions/fnc_handleLocal.sqf | 10 +++++----- addons/medical/functions/fnc_treatment_failure.sqf | 4 ++-- addons/medical/functions/fnc_treatment_success.sqf | 4 ++-- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/addons/medical/functions/fnc_actionLoadUnit.sqf b/addons/medical/functions/fnc_actionLoadUnit.sqf index 5606f15d19..990467521a 100644 --- a/addons/medical/functions/fnc_actionLoadUnit.sqf +++ b/addons/medical/functions/fnc_actionLoadUnit.sqf @@ -23,10 +23,10 @@ if ([_target] call EFUNC(common,isAwake)) exitwith { ["displayTextStructured", [_caller], [["This person (%1) is awake and cannot be loaded", [_target] call EFUNC(common,getName)], 1.5, _caller]] call EFUNC(common,targetEvent); }; if ([_target] call FUNC(isBeingCarried)) then { - [_caller, _target] call FUNC(dropObject_carry); + [_caller, _target] call FUNC(dropObject_carry); }; if ([_target] call FUNC(isBeingDragged)) then { - [_caller, _target] call FUNC(dropObject); + [_caller, _target] call FUNC(dropObject); }; _vehicle = [_caller, _target] call EFUNC(common,loadPerson); diff --git a/addons/medical/functions/fnc_handleLocal.sqf b/addons/medical/functions/fnc_handleLocal.sqf index 98b390b51a..f79c1c3a6d 100644 --- a/addons/medical/functions/fnc_handleLocal.sqf +++ b/addons/medical/functions/fnc_handleLocal.sqf @@ -24,12 +24,12 @@ if (_local) then { }; if ((_unit getvariable ["ACE_isUnconscious",false]) && {count (_unit getvariable [QGVAR(unconsciousArguments), []]) >= 7}) then { - private "_arguments"; - _arguments = (_unit getvariable [QGVAR(unconsciousArguments), []]); - _arguments set [ 3, time]; + private "_arguments"; + _arguments = (_unit getvariable [QGVAR(unconsciousArguments), []]); + _arguments set [ 3, time]; - [DFUNC(unconsciousPFH), 0.1, _arguments ] call CBA_fnc_addPerFrameHandler; + [DFUNC(unconsciousPFH), 0.1, _arguments ] call CBA_fnc_addPerFrameHandler; - _unit setvariable [QGVAR(unconsciousArguments), nil, true]; + _unit setvariable [QGVAR(unconsciousArguments), nil, true]; }; }; diff --git a/addons/medical/functions/fnc_treatment_failure.sqf b/addons/medical/functions/fnc_treatment_failure.sqf index fe8bafb0c7..33712956a0 100644 --- a/addons/medical/functions/fnc_treatment_failure.sqf +++ b/addons/medical/functions/fnc_treatment_failure.sqf @@ -36,9 +36,9 @@ _caller setvariable [QGVAR(treatmentPrevAnimCaller), nil]; _weaponSelect = (_caller getvariable [QGVAR(selectedWeaponOnTreatment), ""]); if (_weaponSelect != "") then { - _caller selectWeapon _weaponSelect; + _caller selectWeapon _weaponSelect; } else { - _caller action ["SwitchWeapon", _caller, _caller, 99]; + _caller action ["SwitchWeapon", _caller, _caller, 99]; }; { diff --git a/addons/medical/functions/fnc_treatment_success.sqf b/addons/medical/functions/fnc_treatment_success.sqf index 6822f674c7..66406a180a 100644 --- a/addons/medical/functions/fnc_treatment_success.sqf +++ b/addons/medical/functions/fnc_treatment_success.sqf @@ -34,9 +34,9 @@ _caller setvariable [QGVAR(treatmentPrevAnimCaller), nil]; _weaponSelect = (_caller getvariable [QGVAR(selectedWeaponOnTreatment), ""]); if (_weaponSelect != "") then { - _caller selectWeapon _weaponSelect; + _caller selectWeapon _weaponSelect; } else { - _caller action ["SwitchWeapon", _caller, _caller, 99]; + _caller action ["SwitchWeapon", _caller, _caller, 99]; }; // Record specific callback From 1df42b17c201521bbf3a15529809a1c206093087 Mon Sep 17 00:00:00 2001 From: Glowbal <thomasskooi@live.nl> Date: Mon, 20 Apr 2015 22:22:09 +0200 Subject: [PATCH 242/257] close all dialogs --- addons/medical/functions/fnc_setUnconscious.sqf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/addons/medical/functions/fnc_setUnconscious.sqf b/addons/medical/functions/fnc_setUnconscious.sqf index e527215c51..c5809f8c8e 100644 --- a/addons/medical/functions/fnc_setUnconscious.sqf +++ b/addons/medical/functions/fnc_setUnconscious.sqf @@ -37,7 +37,9 @@ _unit setUnconscious true; if (_unit == ACE_player) then { if (visibleMap) then {openMap false}; - closeDialog 0; + while {dialog} do { + closeDialog 0; + }; }; // if we have unconsciousness for AI disabled, we will kill the unit instead From 404eb876312659b0e75eb7b4220c9f3416f0f903 Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Mon, 20 Apr 2015 22:24:37 +0200 Subject: [PATCH 243/257] Added some ammo class reference data --- extras/CfgAmmoReference.hpp | 2801 +++++++++++++++++++++++++++++++++++ 1 file changed, 2801 insertions(+) create mode 100644 extras/CfgAmmoReference.hpp diff --git a/extras/CfgAmmoReference.hpp b/extras/CfgAmmoReference.hpp new file mode 100644 index 0000000000..85201b92cc --- /dev/null +++ b/extras/CfgAmmoReference.hpp @@ -0,0 +1,2801 @@ +class CfgAmmo +{ + class BulletBase; + class B_556x45_Ball : BulletBase { + airFriction=-0.001265; + hit=8; + typicalSpeed=750; + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=62; + ACE_ammoTempMuzzleVelocityShifts[]={-27.20, -26.44, -23.76, -21.00, -17.54, -13.10, -7.95, -1.62, 6.24, 15.48, 27.75}; + ACE_ballisticCoefficients[]={0.151}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={723, 764, 796, 825, 843, 866, 878, 892, 906, 915, 922, 900}; + ACE_barrelLengths[]={8.3, 9.4, 10.6, 11.8, 13.0, 14.2, 15.4, 16.5, 17.7, 18.9, 20.0, 24.0}; + }; + class ACE_556x45_Ball_Mk262 : B_556x45_Ball { + airFriction=-0.001125; + caliber=0.6; + deflecting=18; + hit=11; + typicalSpeed=836; + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=77; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.361}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={624, 816, 832, 838}; + ACE_barrelLengths[]={7.5, 14.5, 18, 20}; + }; + class ACE_556x45_Ball_Mk318 : B_556x45_Ball { + airFriction=-0.001120; + caliber=0.6; + deflecting=18; + hit=9; + typicalSpeed=886; + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=62; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.307}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={780, 886, 950}; + ACE_barrelLengths[]={10, 15.5, 20}; + }; + class B_556x45_Ball_Tracer_Red; + class ACE_B_556x45_Ball_Tracer_Dim: B_556x45_Ball_Tracer_Red { + nvgOnly = 1; + }; + class ACE_545x39_Ball_7N6M : B_556x45_Ball { + airFriction=-0.001162; + caliber=0.5; + deflecting=18; + hit=7; + typicalSpeed=880; + ACE_caliber=0.220; + ACE_bulletLength=0.85; + ACE_bulletMass=52.9; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.168}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={780, 880, 920}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class B_556x45_Ball_Tracer_Yellow; + class ACE_545x39_Ball_7T3M : B_556x45_Ball_Tracer_Yellow { + airFriction=-0.001162; + caliber=0.5; + deflecting=18; + hit=7; + typicalSpeed=883; + ACE_caliber=0.220; + ACE_bulletLength=0.85; + ACE_bulletMass=49.8; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.168}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={785, 883, 925}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class B_65x39_Caseless : BulletBase { + airFriction=-0.000785; + typicalSpeed=800; + ACE_caliber=0.264; + ACE_bulletLength=1.295; + ACE_bulletMass=123; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.263}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={730, 760, 788, 800, 810, 830}; + ACE_barrelLengths[]={10, 16, 20, 24, 26, 30}; + }; + class B_65x39_Case_yellow; + class ACE_65x39_Caseless_Tracer_Dim : B_65x39_Case_yellow { + nvgOnly = 1; + }; + class B_65x39_Caseless_green; + class ACE_65x39_Caseless_green_Tracer_Dim : B_65x39_Caseless_green { + nvgOnly = 1; + }; + class ACE_65x47_Ball_Scenar: B_65x39_Caseless + { + airFriction=-0.00078; + typicalSpeed=820 ; + ACE_caliber=0.264; + ACE_bulletLength=1.364; + ACE_bulletMass=139; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.290}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={730, 760, 790, 820, 830}; + ACE_barrelLengths[]={10, 16, 20, 24, 26}; + }; + class B_762x51_Ball : BulletBase { + airFriction=-0.001035; + typicalSpeed=833; + hit=9; + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=146; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.2}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={700, 800, 820, 833, 845}; + ACE_barrelLengths[]={10, 16, 20, 24, 26}; + }; + class B_762x51_Tracer_Yellow; + class ACE_B_762x51_Tracer_Dim: B_762x51_Tracer_Yellow { + nvgOnly = 1; + }; + class ACE_762x51_Ball_M118LR : B_762x51_Ball { + airFriction=-0.0008525; + caliber=1.05; + hit=16; + typicalSpeed=790; + ACE_caliber=0.308; + ACE_bulletLength=1.24; + ACE_bulletMass=175; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.243}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={750, 780, 790, 794}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class ACE_762x51_Ball_Mk319_Mod_0 : B_762x51_Ball { + airFriction=-0.00103; + caliber=0.85; + hit=14; + typicalSpeed=890; + ACE_caliber=0.308; + ACE_bulletLength=1.24; + ACE_bulletMass=130; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.377}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={838, 892, 910}; + ACE_barrelLengths[]={13, 16, 20}; + }; + class ACE_762x51_Ball_Subsonic : B_762x51_Ball { + airFriction=-0.000535; + caliber=0.5; + hit=6; + typicalSpeed=790; + ACE_caliber=0.308; + ACE_bulletLength=1.340; + ACE_bulletMass=200; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.235}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={305, 325, 335, 340}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class ACE_762x67_Ball_Mk248_Mod_0 : B_762x51_Ball { + airFriction=-0.000830; + caliber=1.08; + hit=17; + typicalSpeed=900; + ACE_caliber=0.308; + ACE_bulletLength=1.353; + ACE_bulletMass=190; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.268}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={865, 900, 924}; + ACE_barrelLengths[]={20, 24, 26}; + }; + class ACE_762x67_Ball_Mk248_Mod_1 : B_762x51_Ball { + airFriction=-0.000815; + caliber=1.12; + hit=18; + typicalSpeed=867; + ACE_caliber=0.308; + ACE_bulletLength=1.489; + ACE_bulletMass=220; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.310}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={847, 867, 877}; + ACE_barrelLengths[]={20, 24, 26}; + }; + class ACE_762x67_Ball_Berger_Hybrid_OTM : B_762x51_Ball { + airFriction=-0.00076; + caliber=1.15; + hit=19; + typicalSpeed=853; + ACE_caliber=0.308; + ACE_bulletLength=1.602; + ACE_bulletMass=230; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.368}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={800, 853, 884}; + ACE_barrelLengths[]={20, 24, 26}; + }; + class B_762x54_Ball: B_762x51_Ball { + airFriction=-0.001023; + typicalSpeed=820; + ACE_caliber=0.312; + ACE_bulletLength=1.14; + ACE_bulletMass=152; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.4}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={700, 800, 820, 833}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class ACE_762x54_Ball_7N14 : B_762x51_Ball { + airFriction=-0.001023; + caliber=0.95; + hit=15; + typicalSpeed=820; + ACE_caliber=0.312; + ACE_bulletLength=1.14; + ACE_bulletMass=152; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.4}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={700, 800, 820, 833}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class B_762x54_Tracer_Green; + class ACE_762x54_Ball_7T2 : B_762x54_Tracer_Green { + airFriction=-0.001023; + caliber=0.9; + hit=15; + typicalSpeed=800; + ACE_caliber=0.312; + ACE_bulletLength=1.14; + ACE_bulletMass=149; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.395}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={680, 750, 798, 800}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class ACE_762x35_Ball : B_762x51_Ball { + airFriction=-0.000821; + caliber=0.9; + hit=11; + typicalSpeed=790; + ACE_caliber=0.308; + ACE_bulletLength=1.153; + ACE_bulletMass=125; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.349, 0.338, 0.330, 0.310}; + ACE_velocityBoundaries[]={792, 610, 488}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={620, 655, 675}; + ACE_barrelLengths[]={9, 16, 20}; + }; + class ACE_762x39_Ball : B_762x51_Ball { + airFriction=-0.0015168; + hit=12; + typicalSpeed=716; + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=123; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.275}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={650, 716, 750}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class ACE_762x39_Ball_57N231P : B_762x51_Tracer_Yellow { + airFriction=-0.0015168; + hit=12; + typicalSpeed=716; + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=117; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.275}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={650, 716, 750}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class B_9x21_Ball : BulletBase { + airFriction=-0.00125; + typicalSpeed=390; + hit=6; + ACE_caliber=0.356; + ACE_bulletLength=0.610; + ACE_bulletMass=115; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.17}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={440, 460, 480}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class ACE_9x18_Ball_57N181S : B_9x21_Ball { + hit=5; + airFriction=-0.001234; + typicalSpeed=298; + ACE_caliber=0.365; + ACE_bulletLength=0.610; + ACE_bulletMass=92.6; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.125}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={298, 330, 350}; + ACE_barrelLengths[]={3.8, 5, 9}; + }; + class ACE_9x19_Ball : B_9x21_Ball { + airFriction=-0.001234; + typicalSpeed=370; + hit=6; + ACE_caliber=0.355; + ACE_bulletLength=0.610; + ACE_bulletMass=124; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.165}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={340, 370, 400}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class ACE_10x25_Ball : B_9x21_Ball { + airFriction=-0.00168; + typicalSpeed=425; + hit=7; + ACE_caliber=0.5; + ACE_bulletLength=0.764; + ACE_bulletMass=165; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.189}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={360, 400, 430}; + ACE_barrelLengths[]={4, 4.61, 9}; + }; + class ACE_765x17_Ball: B_9x21_Ball { + airFriction=-0.001213; + typicalSpeed=282; + hit=7; + ACE_caliber=0.3125; + ACE_bulletLength=0.610; + ACE_bulletMass=65; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.118}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={282, 300, 320}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class ACE_303_Ball : ACE_762x51_Ball_M118LR { + airFriction=-0.00083; + typicalSpeed=761; + ACE_caliber=0.311; + ACE_bulletLength=1.227; + ACE_bulletMass=174; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.499, 0.493, 0.48}; + ACE_velocityBoundaries[]={671, 549}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={748, 761, 765}; + ACE_barrelLengths[]={20, 24, 26}; + }; + class B_93x64_Ball : BulletBase { + airFriction=-0.00106; + typicalSpeed=880; + ACE_caliber=0.366; + ACE_bulletLength=1.350; + ACE_bulletMass=230; + ACE_transonicStabilityCoef=1; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.368}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={850, 870, 880}; + ACE_barrelLengths[]={20, 24.41, 26}; + }; + class B_408_Ball : BulletBase { + timeToLive=10; + airFriction=-0.000395; + typicalSpeed=910; + ACE_caliber=0.408; + ACE_bulletLength=2.126; + ACE_bulletMass=410; + ACE_transonicStabilityCoef=1; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.97}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={910}; + ACE_barrelLengths[]={29}; + }; + class ACE_106x83mm_Ball : B_408_Ball { + timeToLive=10; + ACE_caliber=0.416; + ACE_bulletLength=2.089; + ACE_bulletMass=398; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.72}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={960}; + ACE_barrelLengths[]={29}; + }; + class B_338_Ball : BulletBase { + timeToLive=10; + airFriction=-0.000606; + typicalSpeed=915; + ACE_caliber=0.338; + ACE_bulletLength=1.558; + ACE_bulletMass=250; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.322}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={880, 915, 925}; + ACE_barrelLengths[]={20, 26, 28}; + }; + class B_338_NM_Ball : BulletBase { + airFriction=-0.000537; + typicalSpeed=820; + ACE_caliber=0.338; + ACE_bulletLength=1.70; + ACE_bulletMass=300; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.381}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={790, 807, 820}; + ACE_barrelLengths[]={20, 24, 26}; + }; + class ACE_338_Ball : B_338_Ball { + timeToLive=10; + airFriction=-0.000535; + caliber=1.55; + typicalSpeed=826; + ACE_caliber=0.338; + ACE_bulletLength=1.70; + ACE_bulletMass=300; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.381}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={800, 820, 826, 830}; + ACE_barrelLengths[]={20, 24, 26.5, 28}; + }; + class ACE_338_Ball_API526 : B_338_Ball { + timeToLive=10; + airFriction=-0.000673; + caliber=2.4; + typicalSpeed=826; + ACE_caliber=0.338; + ACE_bulletLength=1.535; + ACE_bulletMass=253; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.290}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={880, 915, 925}; + ACE_barrelLengths[]={20, 26, 28}; + }; + class B_127x54_Ball : BulletBase { + airFriction=-0.00014; + typicalSpeed=300; + ACE_caliber=0.510; + ACE_bulletLength=2.540; + ACE_bulletMass=750; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={1.050}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={300}; + ACE_barrelLengths[]={17.2}; + }; + class B_127x99_Ball : BulletBase { + timeToLive=10; + airFriction=-0.0006; + typicalSpeed=853; + ACE_caliber=0.510; + ACE_bulletLength=2.310; + ACE_bulletMass=647; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.670}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={853}; + ACE_barrelLengths[]={29}; + }; + class ACE_127x99_Ball_AMAX : B_127x99_Ball { + timeToLive=10; + airFriction=-0.000374; + typicalSpeed=860; + ACE_caliber=0.510; + ACE_bulletLength=2.540; + ACE_bulletMass=750; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={1.050}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={860}; + ACE_barrelLengths[]={29}; + }; + class B_127x108_Ball : BulletBase { + timeToLive=10; + airFriction=-0.00064; + typicalSpeed=820; + ACE_caliber=0.511; + ACE_bulletLength=2.520; + ACE_bulletMass=745; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.63}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={820}; + ACE_barrelLengths[]={28.7}; + }; + class B_45ACP_Ball : BulletBase { + airFriction=-0.0007182; + typicalSpeed=250; + ACE_caliber=0.452; + ACE_bulletLength=0.68; + ACE_bulletMass=230; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.195}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={230, 250, 285}; + ACE_barrelLengths[]={4, 5, 9}; + }; + + class TMR_B_762x51_M118LR : B_762x51_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.24; + ACE_bulletMass=175; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.505, 0.496, 0.485, 0.485, 0.485}; + ACE_velocityBoundaries[]={853, 549, 549, 549}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={750, 780, 790, 794}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + + class RH_50_AE_Ball: BulletBase + { + ACE_caliber=0.5; + ACE_bulletLength=1.110; + ACE_bulletMass=325; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.228}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={360, 398, 420}; + ACE_barrelLengths[]={4, 6, 9}; + }; + class RH_454_Casull: BulletBase + { + ACE_caliber=0.452; + ACE_bulletLength=0.895; + ACE_bulletMass=325; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.171}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={450, 490, 500}; + ACE_barrelLengths[]={4, 7.5, 9}; + }; + class RH_32ACP: BulletBase + { + ACE_caliber=0.3125; + ACE_bulletLength=0.610; + ACE_bulletMass=65; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.118}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={282, 300, 320}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class RH_45ACP: BulletBase + { + ACE_caliber=0.452; + ACE_bulletLength=0.68; + ACE_bulletMass=230; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.195}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={230, 250, 285}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class RH_B_40SW: BulletBase + { + ACE_caliber=0.4; + ACE_bulletLength=0.447; + ACE_bulletMass=135; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.105, 0.115, 0.120, 0.105}; + ACE_velocityBoundaries[]={365, 305, 259}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={360, 380, 400}; + ACE_barrelLengths[]={4, 6, 9}; + }; + class RH_44mag_ball: BulletBase + { + ACE_caliber=0.429; + ACE_bulletLength=0.804; + ACE_bulletMass=200; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.172}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={360, 390, 420}; + ACE_barrelLengths[]={4, 7.5, 9}; + }; + class RH_357mag_ball: BulletBase + { + ACE_caliber=0.357; + ACE_bulletLength=0.541; + ACE_bulletMass=125; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.148}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={490, 510, 535}; + ACE_barrelLengths[]={4, 6, 9}; + }; + class RH_762x25: BulletBase + { + ACE_caliber=0.310; + ACE_bulletLength=0.5455; + ACE_bulletMass=86; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.17}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={360, 380, 400}; + ACE_barrelLengths[]={4, 6, 9}; + }; + class RH_9x18_Ball: BulletBase + { + ACE_caliber=0.365; + ACE_bulletLength=0.610; + ACE_bulletMass=92.6; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.125}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={298, 330, 350}; + ACE_barrelLengths[]={3.8, 5, 9}; + }; + class RH_B_9x19_Ball: BulletBase + { + ACE_caliber=0.355; + ACE_bulletLength=0.610; + ACE_bulletMass=124; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.165}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={340, 370, 400}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class RH_B_22LR_SD: BulletBase + { + ACE_caliber=0.223; + ACE_bulletLength=0.45; + ACE_bulletMass=38; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.111}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={330, 340, 360}; + ACE_barrelLengths[]={4, 6, 9}; + }; + class RH_57x28mm: BulletBase + { + ACE_caliber=0.224; + ACE_bulletLength=0.495; + ACE_bulletMass=28; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.144}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={550, 625, 720}; + ACE_barrelLengths[]={4, 6, 10.35}; + }; + + class RH_9x19_B_M822: BulletBase + { + ACE_caliber=0.355; + ACE_bulletLength=0.610; + ACE_bulletMass=124; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.165}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={340, 370, 400}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class RH_9x19_B_HP: BulletBase + { + ACE_caliber=0.355; + ACE_bulletLength=0.610; + ACE_bulletMass=124; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.165}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={340, 370, 400}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class RH_9x19_B_HPSB: BulletBase + { + ACE_caliber=0.355; + ACE_bulletLength=0.603; + ACE_bulletMass=147; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.212}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={295, 310, 330}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class RH_B_6x35: BulletBase + { + ACE_caliber=0.224; + ACE_bulletLength=0.445; + ACE_bulletMass=65; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.26}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={730, 750, 760}; + ACE_barrelLengths[]={8, 10, 12}; + }; + class RH_556x45_B_M855A1 : B_556x45_Ball + { + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=62; + ACE_ammoTempMuzzleVelocityShifts[]={-27.20, -26.44, -23.76, -21.00, -17.54, -13.10, -7.95, -1.62, 6.24, 15.48, 27.75}; + ACE_ballisticCoefficients[]={0.152}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={723, 764, 796, 825, 843, 866, 878, 892, 906, 915, 922, 900}; + ACE_barrelLengths[]={8.3, 9.4, 10.6, 11.8, 13.0, 14.2, 15.4, 16.5, 17.7, 18.9, 20.0, 24.0}; + }; + class RH_556x45_B_Mk262 : B_556x45_Ball + { + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=77; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.361}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={624, 816, 832, 838}; + ACE_barrelLengths[]={7.5, 14.5, 18, 20}; + }; + class RH_556x45_B_Mk318 : B_556x45_Ball + { + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=62; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.307}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={780, 886, 950}; + ACE_barrelLengths[]={10, 15.5, 20}; + }; + class RH_68x43_B_FMJ: B_65x39_Caseless + { + ACE_caliber=0.277; + ACE_bulletLength=0.959; + ACE_bulletMass=115; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.162}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={713, 785, 810, 850}; + ACE_barrelLengths[]={12, 16, 20, 24}; + }; + class RH_68x43_B_Match: B_65x39_Caseless + { + ACE_caliber=0.277; + ACE_bulletLength=1.250; + ACE_bulletMass=135; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.253}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={700, 732, 750, 780}; + ACE_barrelLengths[]={12, 16, 20, 24}; + }; + class RH_762x35_B_FMJ: B_65x39_Caseless + { + ACE_caliber=0.308; + ACE_bulletLength=1.118; + ACE_bulletMass=147; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.398}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={559, 609, 625}; + ACE_barrelLengths[]={6, 16, 20}; + }; + class RH_762x35_B_Match: B_65x39_Caseless + { + ACE_caliber=0.308; + ACE_bulletLength=1.153; + ACE_bulletMass=125; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.349, 0.338, 0.330, 0.310}; + ACE_velocityBoundaries[]={792, 610, 488}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={590, 650, 665}; + ACE_barrelLengths[]={6, 16, 20}; + }; + class RH_762x35_B_MSB: B_65x39_Caseless + { + ACE_caliber=0.308; + ACE_bulletLength=1.489; + ACE_bulletMass=220; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.608}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={300, 320, 340}; + ACE_barrelLengths[]={9, 16, 20}; + }; + class RH_762x51_B_M80A1 : B_762x51_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=146; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.2}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={700, 800, 820, 833, 845}; + ACE_barrelLengths[]={10, 16, 20, 24, 26}; + }; + class RH_762x51_B_Mk316LR : B_762x51_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.24; + ACE_bulletMass=175; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.243}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={750, 780, 790, 794}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class RH_762x51_B_Mk319 : B_762x51_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.074; + ACE_bulletMass=130; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.277}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={838, 892, 920}; + ACE_barrelLengths[]={13, 16, 20}; + }; + class RH_762x51_B_LFMJSB: B_762x51_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.340; + ACE_bulletMass=200; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.252}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={305, 325, 335, 340}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + + class HLC_556NATO_SOST: BulletBase + { + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=62; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.307}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={780, 886, 950}; + ACE_barrelLengths[]={10, 15.5, 20}; + }; + class HLC_556NATO_SPR: BulletBase + { + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=77; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.361}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={624, 816, 832, 838}; + ACE_barrelLengths[]={7.5, 14.5, 18, 20}; + }; + class HLC_556NATO_EPR: BulletBase + { + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=62; + ACE_ammoTempMuzzleVelocityShifts[]={-27.20, -26.44, -23.76, -21.00, -17.54, -13.10, -7.95, -1.62, 6.24, 15.48, 27.75}; + ACE_ballisticCoefficients[]={0.152}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={723, 764, 796, 825, 843, 866, 878, 892, 906, 915, 922, 900}; + ACE_barrelLengths[]={8.3, 9.4, 10.6, 11.8, 13.0, 14.2, 15.4, 16.5, 17.7, 18.9, 20.0, 24.0}; + }; + class HLC_300Blackout_Ball: BulletBase + { + ACE_caliber=0.308; + ACE_bulletLength=1.118; + ACE_bulletMass=147; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.398}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={559, 609, 625}; + ACE_barrelLengths[]={6, 16, 20}; + }; + class HLC_300Blackout_SMK: BulletBase + { + ACE_caliber=0.308; + ACE_bulletLength=1.489; + ACE_bulletMass=220; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.608}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={300, 320, 340}; + ACE_barrelLengths[]={9, 16, 20}; + }; + class HLC_762x51_BTSub: BulletBase + { + ACE_caliber=0.308; + ACE_bulletLength=1.340; + ACE_bulletMass=200; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.235}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={305, 325, 335, 340}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class HLC_762x54_ball: BulletBase + { + ACE_caliber=0.312; + ACE_bulletLength=1.14; + ACE_bulletMass=152; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.4}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={700, 800, 820, 833}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class HLC_762x54_tracer: BulletBase + { + ACE_caliber=0.312; + ACE_bulletLength=1.14; + ACE_bulletMass=149; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.395}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={680, 750, 798, 800}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class HLC_303Brit_B: BulletBase + { + ACE_caliber=0.311; + ACE_bulletLength=1.227; + ACE_bulletMass=174; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.499, 0.493, 0.48}; + ACE_velocityBoundaries[]={671, 549}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={748, 761, 765}; + ACE_barrelLengths[]={20, 24, 26}; + }; + class HLC_792x57_Ball: BulletBase + { + ACE_caliber=0.318; + ACE_bulletLength=1.128; + ACE_bulletMass=196; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.315}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={785, 800, 815}; + ACE_barrelLengths[]={20, 23.62, 26}; + }; + class FH_545x39_Ball: BulletBase + { + ACE_caliber=0.220; + ACE_bulletLength=0.85; + ACE_bulletMass=52.9; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.168}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={780, 880, 920}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class FH_545x39_7u1: FH_545x39_Ball + { + ACE_bulletMass=80; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_muzzleVelocities[]={260, 303, 320}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class HLC_9x19_Ball: BulletBase + { + ACE_caliber=0.355; + ACE_bulletLength=0.610; + ACE_bulletMass=124; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.165}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={340, 370, 400}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class HLC_9x19_GoldDot: HLC_9x19_Ball + { + ACE_muzzleVelocities[]={350, 380, 420}; + }; + class HLC_9x19_Subsonic: HLC_9x19_Ball + { + ACE_muzzleVelocities[]={300, 320, 340}; + }; + class HLC_10mm_FMJ: HLC_9x19_Ball + { + ACE_caliber=0.5; + ACE_bulletLength=0.764; + ACE_bulletMass=165; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.189}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={360, 400, 430}; + ACE_barrelLengths[]={4, 4.61, 9}; + }; + class HLC_9x19_M882_SMG: HLC_9x19_Ball + { + ACE_caliber=0.355; + ACE_bulletLength=0.610; + ACE_bulletMass=124; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.165}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={340, 370, 400}; + ACE_barrelLengths[]={4, 5, 9}; + }; + + class M_mas_545x39_Ball_7N6M : BulletBase + { + ACE_caliber=0.220; + ACE_bulletLength=0.85; + ACE_bulletMass=52.9; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.168}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={780, 880, 920}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class M_mas_545x39_Ball_7T3M : BulletBase + { + ACE_caliber=0.220; + ACE_bulletLength=0.85; + ACE_bulletMass=49.8; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.168}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={785, 883, 925}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class B_mas_556x45_Ball_Mk262 : B_556x45_Ball + { + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=77; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.361}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={624, 816, 832, 838}; + ACE_barrelLengths[]={7.5, 14.5, 18, 20}; + }; + class B_mas_9x18_Ball_57N181S : BulletBase + { + ACE_caliber=0.365; + ACE_bulletLength=0.610; + ACE_bulletMass=92.6; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.125}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={298, 330, 350}; + ACE_barrelLengths[]={3.8, 5, 9}; + }; + class B_mas_9x21p_Ball: BulletBase + { + ACE_caliber=0.355; + ACE_bulletLength=0.610; + ACE_bulletMass=124; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.165}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={340, 370, 400}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class B_mas_9x21_Ball: BulletBase + { + ACE_caliber=0.355; + ACE_bulletLength=0.610; + ACE_bulletMass=124; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.165}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={340, 370, 400}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class B_mas_9x21d_Ball: BulletBase + { + ACE_caliber=0.355; + ACE_bulletLength=0.610; + ACE_bulletMass=124; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.165}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={210, 250, 285}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class B_mas_765x17_Ball: BulletBase + { + ACE_caliber=0.3125; + ACE_bulletLength=0.610; + ACE_bulletMass=65; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.118}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={282, 300, 320}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class B_mas_762x39_Ball: BulletBase + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=123; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.275}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={650, 716, 750}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class B_mas_762x39_Ball_T: BulletBase + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=117; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.275}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={650, 716, 750}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class B_mas_762x51_Ball_M118LR : B_762x51_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.24; + ACE_bulletMass=175; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.505, 0.496, 0.485, 0.485, 0.485}; + ACE_velocityBoundaries[]={853, 549, 549, 549}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={750, 780, 790, 794}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class B_mas_762x67_Ball_Mk248_Mod_0 : B_762x51_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.353; + ACE_bulletMass=190; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.268}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={865, 900, 924}; + ACE_barrelLengths[]={20, 24, 26}; + }; + class B_mas_762x67_Ball_Mk248_Mod_1 : B_762x51_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.489; + ACE_bulletMass=220; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.310}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={820, 867, 900}; + ACE_barrelLengths[]={20, 24, 26}; + }; + class B_mas_762x67_Ball_Berger_Hybrid_OTM : B_762x51_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.602; + ACE_bulletMass=230; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.368}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={800, 853, 884}; + ACE_barrelLengths[]={20, 24, 26}; + }; + class B_mas_762x54_Ball : BulletBase + { + ACE_caliber=0.312; + ACE_bulletLength=1.14; + ACE_bulletMass=152; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.4}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={700, 800, 820, 833}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class B_mas_762x54_Ball_T : BulletBase + { + ACE_caliber=0.312; + ACE_bulletLength=1.14; + ACE_bulletMass=149; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.395}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={680, 750, 798, 800}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class BWA3_B_762x51_Ball_LR : BulletBase + { + ACE_caliber=0.308; + ACE_bulletLength=1.24; + ACE_bulletMass=175; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.505, 0.496, 0.485, 0.485, 0.485}; + ACE_velocityBoundaries[]={853, 549, 549, 549}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={750, 780, 790, 794}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class BWA3_B_762x51_Ball_SD : BulletBase + { + ACE_caliber=0.308; + ACE_bulletLength=1.24; + ACE_bulletMass=175; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.2}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={300, 340}; + ACE_barrelLengths[]={16, 24}; + }; + + class BWA3_B_46x30_Ball : BulletBase + { + ACE_caliber=0.193; + ACE_bulletLength=0.512; + ACE_bulletMass=31; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.1455}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={680, 720, 730, 740}; + ACE_barrelLengths[]={4, 7, 9, 12}; + }; + + class Trixie_338_Ball : BulletBase + { + ACE_caliber=0.338; + ACE_bulletLength=1.70; + ACE_bulletMass=300; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.381}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={820, 826, 830}; + ACE_barrelLengths[]={24, 26.5, 28}; + }; + class Trixie_303_Ball : BulletBase + { + ACE_caliber=0.311; + ACE_bulletLength=1.227; + ACE_bulletMass=174; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.499, 0.493, 0.48}; + ACE_velocityBoundaries[]={671, 549}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={748, 761, 765}; + ACE_barrelLengths[]={20, 24, 26}; + }; + + class rhs_ammo_556x45_Mk318_Ball : BulletBase + { + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=62; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.307}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={780, 886, 950}; + ACE_barrelLengths[]={10, 15.5, 20}; + }; + class rhs_ammo_556x45_Mk262_Ball : BulletBase + { + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=77; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.361}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={624, 816, 832, 838}; + ACE_barrelLengths[]={7.5, 14.5, 18, 20}; + }; + class rhsammo_762x51_Ball : BulletBase + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=146; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.2}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={700, 800, 820, 833, 845}; + ACE_barrelLengths[]={10, 16, 20, 24, 26}; + }; + class rhs_B_545x39_Ball : BulletBase + { + ACE_caliber=0.220; + ACE_bulletLength=0.85; + ACE_bulletMass=52.9; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.168}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={780, 880, 920}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class rhs_B_545x39_Ball_Tracer_Green : BulletBase + { + ACE_caliber=0.220; + ACE_bulletLength=0.85; + ACE_bulletMass=49.8; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.168}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={785, 883, 925}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class rhs_ammo_762x51_M118_Special_Ball : BulletBase + { + ACE_caliber=0.308; + ACE_bulletLength=1.24; + ACE_bulletMass=175; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.243}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={750, 780, 790, 794}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class rhs_B_762x54_Ball : BulletBase + { + ACE_caliber=0.312; + ACE_bulletLength=1.14; + ACE_bulletMass=152; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.4}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={700, 800, 820, 833}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class rhs_B_762x54_Ball_Tracer_Green : BulletBase + { + ACE_caliber=0.312; + ACE_bulletLength=1.14; + ACE_bulletMass=149; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.395}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={680, 750, 798, 800}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class rhs_B_762x39_Ball : BulletBase + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=123; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.275}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={650, 716, 750}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class rhs_B_762x39_Tracer : BulletBase + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=117; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.275}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={650, 716, 750}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class rhs_ammo_762x51_M80_Ball : BulletBase + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=146; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.2}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={700, 800, 820, 833, 845}; + ACE_barrelLengths[]={10, 16, 20, 24, 26}; + }; + class rhsusf_B_300winmag : BulletBase + { + ACE_caliber=0.308; + ACE_bulletLength=1.489; + ACE_bulletMass=220; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.310}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={847, 867, 877}; + ACE_barrelLengths[]={20, 24, 26}; + }; + + class R3F_9x19_Ball: BulletBase + { + ACE_caliber=0.355; + ACE_bulletLength=0.610; + ACE_bulletMass=124; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.165}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={340, 370, 400}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class R3F_556x45_Ball: BulletBase + { + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=62; + ACE_ammoTempMuzzleVelocityShifts[]={-27.20, -26.44, -23.76, -21.00, -17.54, -13.10, -7.95, -1.62, 6.24, 15.48, 27.75}; + ACE_ballisticCoefficients[]={0.151}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={723, 764, 796, 825, 843, 866, 878, 892, 906, 915, 922, 900}; + ACE_barrelLengths[]={8.3, 9.4, 10.6, 11.8, 13.0, 14.2, 15.4, 16.5, 17.7, 18.9, 20.0, 24.0}; + }; + class R3F_762x51_Ball: BulletBase + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=146; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.2}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={700, 800, 820, 833, 845}; + ACE_barrelLengths[]={10, 16, 20, 24, 26}; + }; + class R3F_762x51_Ball2: BulletBase + { + ACE_caliber=0.308; + ACE_bulletLength=1.24; + ACE_bulletMass=175; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.505, 0.496, 0.485, 0.485, 0.485}; + ACE_velocityBoundaries[]={853, 549, 549, 549}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={750, 780, 790, 794}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class R3F_127x99_Ball: BulletBase + { + ACE_caliber=0.510; + ACE_bulletLength=2.310; + ACE_bulletMass=647; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.670}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={853}; + ACE_barrelLengths[]={29}; + }; + class R3F_127x99_Ball2: BulletBase + { + ACE_caliber=0.510; + ACE_bulletLength=2.310; + ACE_bulletMass=647; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.670}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={853}; + ACE_barrelLengths[]={29}; + }; + + class CUP_B_545x39_Ball: BulletBase + { + ACE_caliber=0.220; + ACE_bulletLength=0.85; + ACE_bulletMass=52.9; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.168}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={780, 880, 920}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class CUP_B_545x39_Ball_Tracer_Green: BulletBase + { + ACE_caliber=0.220; + ACE_bulletLength=0.85; + ACE_bulletMass=49.8; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.168}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={785, 883, 925}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class CUP_B_545x39_Ball_Tracer_Red: BulletBase + { + ACE_caliber=0.220; + ACE_bulletLength=0.85; + ACE_bulletMass=49.8; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.168}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={785, 883, 925}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class CUP_B_545x39_Ball_Tracer_White: BulletBase + { + ACE_caliber=0.220; + ACE_bulletLength=0.85; + ACE_bulletMass=49.8; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.168}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={785, 883, 925}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class CUP_B_545x39_Ball_Tracer_Yellow: BulletBase + { + ACE_caliber=0.220; + ACE_bulletLength=0.85; + ACE_bulletMass=49.8; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.168}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={785, 883, 925}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class CUP_B_762x39_Ball: BulletBase + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=123; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.275}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={650, 716, 750}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class CUP_B_762x39_Ball_Tracer_Green: BulletBase + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=117; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.275}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={650, 716, 750}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class B_762x39mm_KLT: BulletBase + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=123; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.275}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={650, 716, 750}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class CUP_B_9x18_Ball: BulletBase + { + ACE_caliber=0.365; + ACE_bulletLength=0.610; + ACE_bulletMass=92.6; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.125}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={298, 330, 350}; + ACE_barrelLengths[]={3.8, 5, 9}; + }; + class CUP_B_9x18_Ball_Tracer_Green: BulletBase + { + ACE_caliber=0.365; + ACE_bulletLength=0.610; + ACE_bulletMass=92.6; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.125}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={298, 330, 350}; + ACE_barrelLengths[]={3.8, 5, 9}; + }; + class CUP_B_9x18_Ball_Tracer_Red: BulletBase + { + ACE_caliber=0.365; + ACE_bulletLength=0.610; + ACE_bulletMass=92.6; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.125}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={298, 330, 350}; + ACE_barrelLengths[]={3.8, 5, 9}; + }; + class CUP_B_9x18_Ball_Tracer_Yellow: BulletBase + { + ACE_caliber=0.365; + ACE_bulletLength=0.610; + ACE_bulletMass=92.6; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.125}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={298, 330, 350}; + ACE_barrelLengths[]={3.8, 5, 9}; + }; + class CUP_B_9x18_Ball_White_Tracer: BulletBase + { + ACE_caliber=0.365; + ACE_bulletLength=0.610; + ACE_bulletMass=92.6; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.125}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={298, 330, 350}; + ACE_barrelLengths[]={3.8, 5, 9}; + }; + class CUP_B_9x19_Ball: BulletBase + { + ACE_caliber=0.355; + ACE_bulletLength=0.610; + ACE_bulletMass=124; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.165}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={340, 370, 400}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class CUP_B_762x51_noTracer: BulletBase + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=146; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.2}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={700, 800, 820, 833, 845}; + ACE_barrelLengths[]={10, 16, 20, 24, 26}; + }; + class CUP_B_762x51_Red_Tracer_3RndBurst: BulletBase + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=146; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.2}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={700, 800, 820, 833, 845}; + ACE_barrelLengths[]={10, 16, 20, 24, 26}; + }; + class CUP_B_762x51_White_Tracer_3RndBurst: BulletBase + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=146; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.2}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={700, 800, 820, 833, 845}; + ACE_barrelLengths[]={10, 16, 20, 24, 26}; + }; + class CUP_B_303_Ball: BulletBase + { + ACE_caliber=0.311; + ACE_bulletLength=1.227; + ACE_bulletMass=174; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.499, 0.493, 0.48}; + ACE_velocityBoundaries[]={671, 549}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={748, 761, 765}; + ACE_barrelLengths[]={20, 24, 26}; + }; + class CUP_B_127x107_Ball_Green_Tracer: BulletBase + { + ACE_caliber=0.511; + ACE_bulletLength=2.520; + ACE_bulletMass=745; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.63}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={820}; + ACE_barrelLengths[]={28.7}; + }; + class CUP_B_127x108_Ball_Green_Tracer: BulletBase + { + ACE_caliber=0.511; + ACE_bulletLength=2.520; + ACE_bulletMass=745; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.63}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={820}; + ACE_barrelLengths[]={28.7}; + }; + class CUP_B_762x54_Ball_White_Tracer: BulletBase + { + ACE_caliber=0.312; + ACE_bulletLength=1.14; + ACE_bulletMass=149; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.395}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={680, 750, 798, 800}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class CUP_B_762x54_Ball_Red_Tracer: BulletBase + { + ACE_caliber=0.312; + ACE_bulletLength=1.14; + ACE_bulletMass=149; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.395}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={680, 750, 798, 800}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class CUP_B_762x54_Ball_Green_Tracer: BulletBase + { + ACE_caliber=0.312; + ACE_bulletLength=1.14; + ACE_bulletMass=149; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.395}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={680, 750, 798, 800}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class CUP_B_762x54_Ball_Yellow_Tracer: BulletBase + { + ACE_caliber=0.312; + ACE_bulletLength=1.14; + ACE_bulletMass=149; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.395}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={680, 750, 798, 800}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class CUP_B_9x39_SP5: BulletBase + { + ACE_caliber=0.364; + ACE_bulletLength=1.24; + ACE_bulletMass=250; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.275}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={280, 300, 320}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class CUP_B_762x51_Tracer_Green: BulletBase + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=146; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.2}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={700, 800, 820, 833, 845}; + ACE_barrelLengths[]={10, 16, 20, 24, 26}; + }; + class CUP_B_762x51_Tracer_Red: BulletBase + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=146; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.2}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={700, 800, 820, 833, 845}; + ACE_barrelLengths[]={10, 16, 20, 24, 26}; + }; + class CUP_B_762x51_Tracer_Yellow: BulletBase + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=146; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.2}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={700, 800, 820, 833, 845}; + ACE_barrelLengths[]={10, 16, 20, 24, 26}; + }; + class CUP_B_762x51_Tracer_White: BulletBase + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=146; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.2}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={700, 800, 820, 833, 845}; + ACE_barrelLengths[]={10, 16, 20, 24, 26}; + }; + class B_127x107_Ball: BulletBase + { + ACE_caliber=0.511; + ACE_bulletLength=2.520; + ACE_bulletMass=745; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.63}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={820}; + ACE_barrelLengths[]={28.7}; + }; + class CUP_B_9x18_SD: BulletBase + { + ACE_caliber=0.365; + ACE_bulletLength=0.610; + ACE_bulletMass=92.6; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.125}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={298, 330, 340}; + ACE_barrelLengths[]={3.8, 5, 9}; + }; + class CUP_B_765x17_Ball: BulletBase + { + ACE_caliber=0.3125; + ACE_bulletLength=0.610; + ACE_bulletMass=65; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.118}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={282, 300, 320}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class CUP_B_145x115_AP_Green_Tracer: BulletBase + { + ACE_caliber=0.586; + ACE_bulletLength=2.00; + ACE_bulletMass=1010; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.620}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={1000}; + ACE_barrelLengths[]={53}; + }; + class CUP_B_127x99_Ball_White_Tracer: BulletBase + { + ACE_caliber=0.510; + ACE_bulletLength=2.310; + ACE_bulletMass=647; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.670}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={853}; + ACE_barrelLengths[]={29}; + }; + class CUP_B_86x70_Ball_noTracer: BulletBase + { + ACE_caliber=0.338; + ACE_bulletLength=1.70; + ACE_bulletMass=300; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.381}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={820, 826, 830}; + ACE_barrelLengths[]={24, 26.5, 28}; + }; + + class VTN_9x18_Ball_FMJ: B_9x21_Ball + { + ACE_caliber=0.365; + ACE_bulletLength=0.610; + ACE_bulletMass=92.6; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.125}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={298, 330, 350}; + ACE_barrelLengths[]={3.8, 5, 9}; + }; + class VTN_9x18_Ball_SC: VTN_9x18_Ball_FMJ + { + ACE_caliber=0.365; + ACE_bulletLength=0.610; + ACE_bulletMass=92.6; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.125}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={298, 330, 350}; + ACE_barrelLengths[]={3.8, 5, 9}; + }; + class VTN_9x18_Ball_TRC: VTN_9x18_Ball_FMJ + { + ACE_caliber=0.365; + ACE_bulletLength=0.610; + ACE_bulletMass=92.6; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.125}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={298, 330, 350}; + ACE_barrelLengths[]={3.8, 5, 9}; + }; + class VTN_9x18_Ball_AP1: VTN_9x18_Ball_FMJ + { + ACE_caliber=0.365; + ACE_bulletLength=0.610; + ACE_bulletMass=92.6; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.125}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={298, 330, 350}; + ACE_barrelLengths[]={3.8, 5, 9}; + }; + class VTN_9x18_Ball_AP2: VTN_9x18_Ball_FMJ + { + ACE_caliber=0.365; + ACE_bulletLength=0.610; + ACE_bulletMass=92.6; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.125}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={298, 330, 350}; + ACE_barrelLengths[]={3.8, 5, 9}; + }; + class VTN_9x18_Ball_PRS: VTN_9x18_Ball_FMJ + { + ACE_caliber=0.365; + ACE_bulletLength=0.610; + ACE_bulletMass=92.6; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.125}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={298, 330, 350}; + ACE_barrelLengths[]={3.8, 5, 9}; + }; + class VTN_9x19_Ball_SC: VTN_9x18_Ball_FMJ + { + ACE_caliber=0.355; + ACE_bulletLength=0.610; + ACE_bulletMass=124; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.165}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={340, 370, 400}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class VTN_9x19_Ball_TRC: VTN_9x19_Ball_SC + { + ACE_caliber=0.355; + ACE_bulletLength=0.610; + ACE_bulletMass=124; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.165}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={340, 370, 400}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class VTN_9x19_Ball_AP: VTN_9x19_Ball_SC + { + ACE_caliber=0.355; + ACE_bulletLength=0.610; + ACE_bulletMass=124; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.165}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={340, 370, 400}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class VTN_9x19_Ball_PRS: VTN_9x19_Ball_SC + { + ACE_caliber=0.355; + ACE_bulletLength=0.610; + ACE_bulletMass=124; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.165}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={340, 370, 400}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class VTN_9x39_Ball_SC: B_9x21_Ball + { + ACE_caliber=0.364; + ACE_bulletLength=1.24; + ACE_bulletMass=250; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.275}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={280, 300, 320}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class VTN_9x39_Ball_AP: VTN_9x39_Ball_SC + { + ACE_caliber=0.364; + ACE_bulletLength=1.24; + ACE_bulletMass=250; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.275}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={280, 300, 320}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class VTN_545x39_Ball_SC: B_556x45_Ball + { + ACE_caliber=0.220; + ACE_bulletLength=0.85; + ACE_bulletMass=52.9; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.168}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={780, 880, 920}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class VTN_545x39_Ball_TRC: VTN_545x39_Ball_SC + { + ACE_caliber=0.220; + ACE_bulletLength=0.85; + ACE_bulletMass=49.8; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.168}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={785, 883, 925}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class VTN_545x39_Ball_AP: VTN_545x39_Ball_TRC + { + ACE_caliber=0.220; + ACE_bulletLength=0.85; + ACE_bulletMass=52.9; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.168}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={780, 880, 920}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class VTN_545x39_Ball_AP2: VTN_545x39_Ball_AP + { + ACE_caliber=0.220; + ACE_bulletLength=0.85; + ACE_bulletMass=52.9; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.168}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={780, 880, 920}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class VTN_545x39_Ball_SS: VTN_545x39_Ball_SC + { + ACE_caliber=0.220; + ACE_bulletLength=0.85; + ACE_bulletMass=52.9; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.168}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={300, 320, 340}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class VTN_762x39_Ball_SC: B_762x51_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=123; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.275}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={650, 716, 750}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class VTN_762x39_Ball_TRC: VTN_762x39_Ball_SC + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=117; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.275}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={650, 716, 750}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class VTN_762x39_Ball_AP: VTN_762x39_Ball_TRC + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=123; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.275}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={650, 716, 750}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class VTN_762x39_Ball_INC: VTN_762x39_Ball_AP + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=123; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.275}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={650, 716, 750}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class VTN_762x39_Ball_API: VTN_762x39_Ball_INC + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=123; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.275}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={650, 716, 750}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class VTN_762x39_Ball_SS: VTN_762x39_Ball_SC + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=123; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.275}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={300, 320, 340}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class VTN_762x41_Ball_SS: B_762x51_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=0.53; + ACE_bulletMass=143; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.275}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={200, 210, 220}; + ACE_barrelLengths[]={4, 6, 8}; + }; + class VTN_762x54_Ball_SC: VTN_762x39_Ball_SC + { + ACE_caliber=0.312; + ACE_bulletLength=1.14; + ACE_bulletMass=152; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.4}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={700, 800, 820, 833}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class VTN_762x54_Ball_TRC: VTN_762x54_Ball_SC + { + ACE_caliber=0.312; + ACE_bulletLength=1.14; + ACE_bulletMass=149; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.395}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={680, 750, 798, 800}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class VTN_762x54_Ball_AP: VTN_762x54_Ball_TRC + { + ACE_caliber=0.312; + ACE_bulletLength=1.14; + ACE_bulletMass=152; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.4}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={700, 800, 820, 833}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class VTN_762x54_Ball_INC: VTN_762x54_Ball_AP + { + ACE_caliber=0.312; + ACE_bulletLength=1.14; + ACE_bulletMass=152; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.4}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={700, 800, 820, 833}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class VTN_762x54_Ball_API: VTN_762x54_Ball_INC + { + ACE_caliber=0.312; + ACE_bulletLength=1.14; + ACE_bulletMass=152; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.4}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={700, 800, 820, 833}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class VTN_145x114_Ball_APT: B_127x108_Ball + { + ACE_caliber=0.586; + ACE_bulletLength=2.00; + ACE_bulletMass=1010; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.620}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={1000}; + ACE_barrelLengths[]={53}; + }; + class VTN_6mm_BB: B_65x39_Caseless + { + ACE_caliber=0.24; + ACE_bulletLength=0.24; + ACE_bulletMass=6; + ACE_ammoTempMuzzleVelocityShifts[]={}; + ACE_ballisticCoefficients[]={}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={100}; + ACE_barrelLengths[]={15}; + }; + class VTN_9x19_Ball_FMJ: B_9x21_Ball + { + ACE_caliber=0.355; + ACE_bulletLength=0.610; + ACE_bulletMass=124; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.165}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={340, 370, 400}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class VTN_556x45_Ball_FMJ: B_556x45_Ball + { + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=62; + ACE_ammoTempMuzzleVelocityShifts[]={-27.20, -26.44, -23.76, -21.00, -17.54, -13.10, -7.95, -1.62, 6.24, 15.48, 27.75}; + ACE_ballisticCoefficients[]={0.151}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={723, 764, 796, 825, 843, 866, 878, 892, 906, 915, 922, 900}; + ACE_barrelLengths[]={8.3, 9.4, 10.6, 11.8, 13.0, 14.2, 15.4, 16.5, 17.7, 18.9, 20.0, 24.0}; + }; + class VTN_556x45_Ball_TRC: VTN_556x45_Ball_FMJ + { + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=62; + ACE_ammoTempMuzzleVelocityShifts[]={-27.20, -26.44, -23.76, -21.00, -17.54, -13.10, -7.95, -1.62, 6.24, 15.48, 27.75}; + ACE_ballisticCoefficients[]={0.151}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={723, 764, 796, 825, 843, 866, 878, 892, 906, 915, 922, 900}; + ACE_barrelLengths[]={8.3, 9.4, 10.6, 11.8, 13.0, 14.2, 15.4, 16.5, 17.7, 18.9, 20.0, 24.0}; + }; + class VTN_556x45_Ball_TRCN: VTN_556x45_Ball_TRC + { + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=62; + ACE_ammoTempMuzzleVelocityShifts[]={-27.20, -26.44, -23.76, -21.00, -17.54, -13.10, -7.95, -1.62, 6.24, 15.48, 27.75}; + ACE_ballisticCoefficients[]={0.151}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={723, 764, 796, 825, 843, 866, 878, 892, 906, 915, 922, 900}; + ACE_barrelLengths[]={8.3, 9.4, 10.6, 11.8, 13.0, 14.2, 15.4, 16.5, 17.7, 18.9, 20.0, 24.0}; + }; + class VTN_556x45_Ball_SC: VTN_556x45_Ball_FMJ + { + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=62; + ACE_ammoTempMuzzleVelocityShifts[]={-27.20, -26.44, -23.76, -21.00, -17.54, -13.10, -7.95, -1.62, 6.24, 15.48, 27.75}; + ACE_ballisticCoefficients[]={0.151}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={723, 764, 796, 825, 843, 866, 878, 892, 906, 915, 922, 900}; + ACE_barrelLengths[]={8.3, 9.4, 10.6, 11.8, 13.0, 14.2, 15.4, 16.5, 17.7, 18.9, 20.0, 24.0}; + }; + class VTN_556x45_Ball_AP: VTN_556x45_Ball_TRC + { + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=62; + ACE_ammoTempMuzzleVelocityShifts[]={-27.20, -26.44, -23.76, -21.00, -17.54, -13.10, -7.95, -1.62, 6.24, 15.48, 27.75}; + ACE_ballisticCoefficients[]={0.151}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={723, 764, 796, 825, 843, 866, 878, 892, 906, 915, 922, 900}; + ACE_barrelLengths[]={8.3, 9.4, 10.6, 11.8, 13.0, 14.2, 15.4, 16.5, 17.7, 18.9, 20.0, 24.0}; + }; + class VTN_556x45_Ball_INC: VTN_556x45_Ball_AP + { + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=62; + ACE_ammoTempMuzzleVelocityShifts[]={-27.20, -26.44, -23.76, -21.00, -17.54, -13.10, -7.95, -1.62, 6.24, 15.48, 27.75}; + ACE_ballisticCoefficients[]={0.151}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={723, 764, 796, 825, 843, 866, 878, 892, 906, 915, 922, 900}; + ACE_barrelLengths[]={8.3, 9.4, 10.6, 11.8, 13.0, 14.2, 15.4, 16.5, 17.7, 18.9, 20.0, 24.0}; + }; + class VTN_556x45_Ball_LR: VTN_556x45_Ball_FMJ + { + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=77; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.361}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={624, 816, 832, 838}; + ACE_barrelLengths[]={7.5, 14.5, 18, 20}; + }; + class VTN_556x45_Ball_SS: B_556x45_Ball + { + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=62; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.151}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={300, 320, 340}; + ACE_barrelLengths[]={10, 20.0, 24.0}; + }; + class VTN_762x51_Ball_SC: B_762x51_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=146; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.2}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={700, 800, 820, 833, 845}; + ACE_barrelLengths[]={10, 16, 20, 24, 26}; + }; + class VTN_762x51_Ball_TRC: VTN_762x51_Ball_SC + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=146; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.2}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={700, 800, 820, 833, 845}; + ACE_barrelLengths[]={10, 16, 20, 24, 26}; + }; + class VTN_762x51_Ball_TRCN: VTN_762x51_Ball_TRC + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=146; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.2}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={700, 800, 820, 833, 845}; + ACE_barrelLengths[]={10, 16, 20, 24, 26}; + }; + class VTN_762x51_Ball_AP: VTN_762x51_Ball_TRC + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=146; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.2}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={700, 800, 820, 833, 845}; + ACE_barrelLengths[]={10, 16, 20, 24, 26}; + }; + class VTN_762x51_Ball_LR: VTN_762x51_Ball_SC + { + ACE_caliber=0.308; + ACE_bulletLength=1.24; + ACE_bulletMass=175; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.243}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={750, 780, 790, 794}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class VTN_1143x23_Ball_FMJ: B_408_Ball + { + ACE_caliber=0.452; + ACE_bulletLength=0.68; + ACE_bulletMass=230; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.195}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={230, 250, 285}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class VTN_1143x23_Ball_HP: VTN_1143x23_Ball_FMJ + { + ACE_caliber=0.452; + ACE_bulletLength=0.68; + ACE_bulletMass=230; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.195}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={230, 250, 285}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class VTN_1143x23_Ball_JHP: VTN_1143x23_Ball_FMJ + { + ACE_caliber=0.452; + ACE_bulletLength=0.68; + ACE_bulletMass=230; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.195}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={230, 250, 285}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class VTN_762x39_Ball_FMJ: B_762x51_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=123; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.275}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={650, 716, 750}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class VTN_45_Pellet: B_762x51_Ball + { + ACE_caliber=0.22; + ACE_bulletLength=0.23; + ACE_bulletMass=3; + ACE_ammoTempMuzzleVelocityShifts[]={}; + ACE_ballisticCoefficients[]={}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={100, 138, 150}; + ACE_barrelLengths[]={5, 10, 16}; + }; +}; \ No newline at end of file From 387572c56018a4d965f94754bfea5be36ed1f7fd Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Mon, 20 Apr 2015 22:29:15 +0200 Subject: [PATCH 244/257] Added some weapon class reference data --- extras/CfgWeaponsReference.hpp | 1894 ++++++++++++++++++++++++++++++++ 1 file changed, 1894 insertions(+) create mode 100644 extras/CfgWeaponsReference.hpp diff --git a/extras/CfgWeaponsReference.hpp b/extras/CfgWeaponsReference.hpp new file mode 100644 index 0000000000..77ce494e39 --- /dev/null +++ b/extras/CfgWeaponsReference.hpp @@ -0,0 +1,1894 @@ +class CfgWeapons +{ + class MGun; + class MGunCore; + class Pistol_Base_F; + class Rifle_Base_F; + class Rifle_Long_Base_F; + class arifle_MX_Base_F; + class PDW2000_Base_F; + class arifle_Katiba_Base_F; + class SDAR_base_F; + class SMG_02_Base_F; + class Tavor_base_F; + class SMG_01_Base; + class DMR_01_base_F; + class Mk20_Base_F; + class EBR_base_F; + class HMG_127; + class LRR_base_F; + class GM6_base_F; + class DMR_02_base_F; + class DMR_03_base_F; + class DMR_04_base_F; + class DMR_05_base_F; + class DMR_06_base_F; + class MMG_01_base_F; + class MMG_02_base_F; + class hgun_P07_F : Pistol_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=4; + }; + class hgun_Rook40_F : Pistol_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=4.4; + }; + class hgun_Pistol_heavy_01_F : Pistol_Base_F + { + ACE_barrelTwist=16; + ACE_barrelLength=4.5; + }; + class hgun_Pistol_heavy_02_F : Pistol_Base_F + { + ACE_barrelTwist=16; + ACE_barrelLength=3; + }; + class hgun_ACPC2_F : Pistol_Base_F + { + ACE_barrelTwist=16; + ACE_barrelLength=5; + }; + class hgun_PDW2000_F : PDW2000_Base_F + { + ACE_barrelTwist=9; + ACE_barrelLength=7; + }; + class arifle_Katiba_F : arifle_Katiba_Base_F + { + ACE_barrelTwist=8; + ACE_barrelLength=28.7; + }; + class arifle_Katiba_C_F : arifle_Katiba_Base_F + { + ACE_barrelTwist=8; + ACE_barrelLength=26.8; + }; + class arifle_Katiba_GL_F : arifle_Katiba_Base_F + { + ACE_barrelTwist=8; + ACE_barrelLength=28.7; + }; + class arifle_MX_F: arifle_MX_Base_F + { + ACE_barrelTwist=9; + ACE_barrelLength=14.5; + }; + class arifle_MX_GL_F: arifle_MX_Base_F + { + ACE_barrelTwist=9; + ACE_barrelLength=14.5; + }; + class arifle_MX_SW_F: arifle_MX_Base_F + { + ACE_barrelTwist=9; + ACE_barrelLength=16.0; + }; + class arifle_MXC_F: arifle_MX_Base_F + { + ACE_barrelTwist=8; + ACE_barrelLength=10.5; + }; + class arifle_MXM_F: arifle_MX_Base_F + { + ACE_barrelTwist=9; + ACE_barrelLength=18; + }; + class arifle_SDAR_F : SDAR_base_F + { + ACE_barrelTwist=11.25; + ACE_barrelLength=18; + }; + class SMG_02_F : SMG_02_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=7.7; + }; + class arifle_TRG20_F : Tavor_base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=15; + }; + class arifle_TRG21_F : Tavor_base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=18.1; + }; + class LMG_Zafir_F : Rifle_Long_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=18.1; + }; + class arifle_Mk20_F : Mk20_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=17.4; + }; + class arifle_Mk20C_F : Mk20_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=16; + }; + class arifle_Mk20_GL_F : Mk20_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=16; + }; + class SMG_01_F : SMG_01_Base + { + ACE_barrelTwist=16; + ACE_barrelLength=5.5; + }; + class srifle_DMR_01_F : DMR_01_base_F + { + ACE_barrelTwist=9.5; + ACE_barrelLength=24; + }; + class srifle_EBR_F : EBR_base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=24; + }; + class LMG_Mk200_F : Rifle_Long_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=12.5; + }; + class srifle_LRR_F : LRR_base_F + { + ACE_barrelTwist=13; + ACE_barrelLength=29; + }; + class srifle_GM6_F : GM6_base_F + { + ACE_barrelTwist=15; + ACE_barrelLength=43.3; + }; + class srifle_DMR_02_F: DMR_02_base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=26; + }; + class srifle_DMR_03_F: DMR_03_base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=20; + }; + class srifle_DMR_04_F: DMR_04_base_F + { + ACE_barrelTwist=8; + ACE_barrelLength=17.72; + }; + class srifle_DMR_05_blk_F: DMR_05_base_F + { + ACE_barrelTwist=14.17; + ACE_barrelLength=24.41; + }; + class srifle_DMR_06_camo_F: DMR_06_base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=22; + }; + class MMG_01_hex_F: MMG_01_base_F + { + ACE_barrelTwist=14.17; + ACE_barrelLength=21.65; + }; + class MMG_02_camo_F: MMG_02_base_F + { + ACE_barrelTwist=9.25; + ACE_barrelLength=24; + }; + class HMG_M2 : HMG_127 + { + ACE_barrelTwist=12; + ACE_barrelLength=45; + }; + + class RH_deagle : Pistol_Base_F + { + ACE_barrelTwist=19; + ACE_barrelLength=6; + }; + class RH_sw659 : Pistol_Base_F + { + ACE_barrelTwist=9.8; + ACE_barrelLength=7.44; + }; + class RH_usp : Pistol_Base_F + { + ACE_barrelTwist=16; + ACE_barrelLength=4.41; + }; + class RH_uspm : Pistol_Base_F + { + ACE_barrelTwist=16; + ACE_barrelLength=6; + }; + class RH_mak : Pistol_Base_F + { + ACE_barrelTwist=9.45; + ACE_barrelLength=3.68; + }; + class RH_m1911 : Pistol_Base_F + { + ACE_barrelTwist=16; + ACE_barrelLength=5; + }; + class RH_kimber : Pistol_Base_F + { + ACE_barrelTwist=16; + ACE_barrelLength=5; + }; + class RH_m9 : Pistol_Base_F + { + ACE_barrelTwist=9.8; + ACE_barrelLength=4.9; + }; + class RH_vz61 : Pistol_Base_F + { + ACE_barrelTwist=16; + ACE_barrelLength=4.5; + }; + class RH_tec9 : Pistol_Base_F + { + ACE_barrelTwist=9.8; + ACE_barrelLength=5; + }; + class RH_muzi : Pistol_Base_F + { + ACE_barrelTwist=9.8; + ACE_barrelLength=5; + }; + class RH_g18 : Pistol_Base_F + { + ACE_barrelTwist=9.8; + ACE_barrelLength=4.49; + }; + class RH_g17 : Pistol_Base_F + { + ACE_barrelTwist=9.8; + ACE_barrelLength=4.49; + }; + class RH_tt33 : Pistol_Base_F + { + ACE_barrelTwist=9.45; + ACE_barrelLength=4.6; + }; + class RH_mk2 : Pistol_Base_F + { + ACE_barrelTwist=16; + ACE_barrelLength=4; + }; + class RH_p226 : Pistol_Base_F + { + ACE_barrelTwist=9.8; + ACE_barrelLength=4.4; + }; + class RH_g19 : Pistol_Base_F + { + ACE_barrelTwist=9.8; + ACE_barrelLength=4; + }; + class RH_gsh18 : Pistol_Base_F + { + ACE_barrelTwist=9.8; + ACE_barrelLength=4.1; + }; + class RH_mateba : Pistol_Base_F + { + ACE_barrelTwist=14; + ACE_barrelLength=6; + }; + class RH_python : Pistol_Base_F + { + ACE_barrelTwist=14; + ACE_barrelLength=6; + }; + class RH_bull : Pistol_Base_F + { + ACE_barrelTwist=24; + ACE_barrelLength=6.5; + }; + class RH_ttracker : Pistol_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=4; + }; + class RH_mp412 : Pistol_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=6; + }; + class RH_fnp45 : Pistol_Base_F + { + ACE_barrelTwist=16; + ACE_barrelLength=4.5; + }; + class RH_fn57 : Pistol_Base_F + { + ACE_barrelTwist=9.1; + ACE_barrelLength=4.8; + }; + class RH_vp70 : Pistol_Base_F + { + ACE_barrelTwist=9.8; + ACE_barrelLength=4.6; + }; + class RH_cz75 : Pistol_Base_F + { + ACE_barrelTwist=9.7; + ACE_barrelLength=4.7; + }; + + class RH_PDW : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=10; + }; + + class RH_hb : Rifle_Base_F + { + ACE_barrelTwist=8; + ACE_barrelLength=6; + }; + class RH_sbr9 : Rifle_Base_F + { + ACE_barrelTwist=9.7; + ACE_barrelLength=9; + }; + class RH_ar10 : Rifle_Base_F + { + ACE_barrelTwist=11.25; + ACE_barrelLength=20.8; + }; + class RH_m4 : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=14.5; + }; + class RH_M4m : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=10.5; + }; + class RH_M4sbr : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=10.5; + }; + class RH_M16a1 : Rifle_Base_F + { + ACE_barrelTwist=14; + ACE_barrelLength=20; + }; + class RH_M16A2 : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=20; + }; + class RH_M16A3 : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=20; + }; + class RH_M16A4 : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=20; + }; + class RH_M16A6 : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=20; + }; + class RH_hk416 : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=14.5; + }; + class RH_hk416c : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=9; + }; + class RH_hk416s : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=10.4; + }; + class RH_m27iar : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=16.5; + }; + class RH_Mk12mod1 : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=18; + }; + class RH_SAMR : Rifle_Base_F + { + ACE_barrelTwist=7.7; + ACE_barrelLength=20; + }; + class RH_m110 : Rifle_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=20; + }; + class RH_mk11 : Rifle_Base_F + { + ACE_barrelTwist=11.25; + ACE_barrelLength=24; + }; + class RH_sr25ec : Rifle_Base_F + { + ACE_barrelTwist=11.25; + ACE_barrelLength=20; + }; + + class hlc_rifle_ak74 : Rifle_Base_F + { + ACE_barrelTwist=7.87; + ACE_barrelLength=16.3; + }; + class hlc_rifle_aks74u : Rifle_Base_F + { + ACE_barrelTwist=6.3; + ACE_barrelLength=8.3; + }; + class hlc_rifle_ak47 : Rifle_Base_F + { + ACE_barrelTwist=9.45; + ACE_barrelLength=16.3; + }; + class hlc_rifle_akm : Rifle_Base_F + { + ACE_barrelTwist=7.87; + ACE_barrelLength=16.3; + }; + class hlc_rifle_rpk : Rifle_Base_F + { + ACE_barrelTwist=9.45; + ACE_barrelLength=23.2; + }; + class hlc_rifle_aek971 : Rifle_Base_F + { + ACE_barrelTwist=9.5; + ACE_barrelLength=17; + }; + class hlc_rifle_saiga12k : Rifle_Base_F + { + ACE_barrelTwist=0; + ACE_twistDirection=0; + ACE_barrelLength=16.9; + }; + class hlc_ar15_base : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=11.5; + }; + class hlc_rifle_bcmjack : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=14.5; + }; + class hlc_rifle_Bushmaster300 : Rifle_Base_F + { + ACE_barrelTwist=8; + ACE_barrelLength=16; + }; + class hlc_rifle_SAMR : Rifle_Base_F + { + ACE_barrelTwist=9; + ACE_barrelLength=16; + }; + class hlc_rifle_honeybase : Rifle_Base_F + { + ACE_barrelTwist=8; + ACE_barrelLength=6; + }; + class hlc_rifle_SLRchopmod : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=21; + }; + class hlc_rifle_LAR : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=21; + }; + class hlc_rifle_c1A1 : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=21.7; + }; + class hlc_rifle_FAL5061 : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=18; + }; + class hlc_rifle_STG58F : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=21; + }; + class hlc_rifle_SLR : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=21.7; + }; + class hlc_rifle_falosw : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=13; + }; + class hlc_rifle_psg1 : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=25.6; + }; + class hlc_rifle_g3sg1 : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=17.7; + }; + class hlc_rifle_hk51 : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=8.31; + }; + class hlc_rifle_hk53 : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=8.31; + }; + class hlc_rifle_g3a3 : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=17.7; + }; + class hlc_M14_base : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=22; + }; + class hlc_rifle_m14sopmod : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=18; + }; + class hlc_lmg_M60E4 : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=17; + }; + class hlc_lmg_m60 : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=22; + }; + + class hlc_smg_mp5k_PDW : Rifle_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=4.5; + }; + class hlc_smg_mp5a2 : Rifle_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=8.9; + }; + class hlc_smg_mp5a4 : Rifle_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=8.9; + }; + class hlc_smg_mp5n : Rifle_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=8.9; + }; + class hlc_smg_mp5sd5 : Rifle_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=5.7; + }; + class hlc_smg_mp5sd6 : Rifle_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=5.7; + }; + class hlc_smg_9mmar : Rifle_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=8.9; + }; + class hlc_smg_mp510 : Rifle_Base_F + { + ACE_barrelTwist=15; + ACE_barrelLength=8.9; + }; + class hlc_smg_mp5a3 : Rifle_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=8.9; + }; + + class hgun_mas_usp_F: Pistol_Base_F + { + ACE_barrelTwist=16; + ACE_barrelLength=4.41; + }; + class hgun_mas_m23_F: Pistol_Base_F + { + ACE_barrelTwist=16; + ACE_barrelLength=5.87; + }; + class hgun_mas_acp_F: Pistol_Base_F + { + ACE_barrelTwist=16; + ACE_barrelLength=5.03; + }; + class hgun_mas_m9_F: Pistol_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=4.9; + }; + class hgun_mas_bhp_F: Pistol_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=4.7; + }; + class hgun_mas_glock_F: Pistol_Base_F + { + ACE_barrelTwist=9.84; + ACE_barrelLength=4.48; + }; + class hgun_mas_glocksf_F: Pistol_Base_F + { + ACE_barrelTwist=15.75; + ACE_barrelLength=4.60; + }; + class hgun_mas_grach_F: Pistol_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=4.4; + }; + class hgun_mas_mak_F: Pistol_Base_F + { + ACE_barrelTwist=9.45; + ACE_barrelLength=3.68; + }; + class hgun_mas_sa61_F: Pistol_Base_F + { + ACE_barrelTwist=16; + ACE_barrelLength=4.5; + }; + class hgun_mas_uzi_F: Pistol_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=5.28; + }; + class arifle_mas_mk16 : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=13.8; + }; + class arifle_mas_mk16_l : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=18; + }; + class arifle_mas_mk17 : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=16; + }; + class srifle_mas_m110 : Rifle_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=20; + }; + class arifle_mas_ak_74m : Rifle_Base_F + { + ACE_barrelTwist=7.87; + ACE_barrelLength=16.34; + }; + class arifle_mas_ak_74m_gl : Rifle_Base_F + { + ACE_barrelTwist=7.87; + ACE_barrelLength=16.34; + }; + class srifle_mas_svd : Rifle_Base_F + { + ACE_barrelTwist=9.4; + ACE_barrelLength=24.4; + }; + class srifle_mas_m91 : Rifle_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=29; + }; + class srifle_mas_ksvk : Rifle_Base_F + { + ACE_barrelTwist=18; + ACE_barrelLength=39.37; + }; + class LMG_mas_rpk_F : Rifle_Base_F + { + ACE_barrelTwist=7.68; + ACE_barrelLength=23.2; + }; + class LMG_mas_pkm_F : Rifle_Base_F + { + ACE_barrelTwist=9.45; + ACE_barrelLength=25.4; + }; + class arifle_mas_aks74u : Rifle_Base_F + { + ACE_barrelTwist=6.3; + ACE_barrelLength=8.3; + }; + class arifle_mas_bizon : Rifle_Base_F + { + ACE_barrelTwist=9.45; + ACE_barrelLength=9.1; + }; + class arifle_mas_saiga : Rifle_Base_F + { + ACE_barrelTwist=0; + ACE_twistDirection=0; + ACE_barrelLength=16.93; + }; + class arifle_mas_hk416 : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=14.5; + }; + class arifle_mas_hk416_gl : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=14.5; + }; + class arifle_mas_hk416c : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=9.0; + }; + class arifle_mas_hk416_m203c : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=9.0; + }; + class arifle_mas_hk417c : Rifle_Base_F + { + ACE_barrelTwist=11; + ACE_barrelLength=13; + }; + class arifle_mas_m4 : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=14.5; + }; + class arifle_mas_m4c : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=10.3; + }; + class arifle_mas_l119 : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=16; + }; + class arifle_mas_l119_gl : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=16; + }; + class arifle_mas_l119_m203 : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=16; + }; + class arifle_mas_m16 : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=20; + }; + class arifle_mas_m16_gl : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=20; + }; + class srifle_mas_hk417 : Rifle_Base_F + { + ACE_barrelTwist=11; + ACE_barrelLength=16.5; + }; + class srifle_mas_sr25 : Rifle_Base_F + { + ACE_barrelTwist=11.25; + ACE_barrelLength=24; + }; + class srifle_mas_ebr : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=18; + }; + class srifle_mas_m24 : Rifle_Base_F + { + ACE_barrelTwist=11.25; + ACE_barrelLength=24; + }; + class arifle_mas_mp5 : Rifle_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=8.9; + }; + class arifle_mas_mp5sd : Rifle_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=5.7; + }; + class srifle_mas_m107 : Rifle_Base_F + { + ACE_barrelTwist=15; + ACE_barrelLength=29; + }; + class LMG_mas_M249_F : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=16.3; + }; + class LMG_mas_M249a_F : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=18; + }; + class LMG_mas_mk48_F : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=19.75; + }; + class LMG_mas_m240_F : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=24.8; + }; + class LMG_mas_mg3_F : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=22.2; + }; + class arifle_mas_g3 : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=17.7; + }; + class arifle_mas_g3_m203 : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=17.7; + }; + class arifle_mas_fal : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=21; + }; + class arifle_mas_fal_m203 : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=21; + }; + class arifle_mas_m1014 : Rifle_Base_F + { + ACE_barrelTwist=0; + ACE_twistDirection=0; + ACE_barrelLength=18.5; + }; + + class BWA3_P8 : Pistol_Base_F + { + ACE_barrelTwist=9.8; + ACE_barrelLength=4.25; + }; + class BWA3_MP7 : Pistol_Base_F + { + ACE_barrelTwist=6.3; + ACE_barrelLength=7.1; + }; + class BWA3_G36 : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=18.9; + }; + class BWA3_G36K : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=12.5; + }; + class BWA3_G28_Standard : Rifle_Long_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=16.5; + }; + class BWA3_G27 : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=16; + }; + class BWA3_MG4 : Rifle_Long_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=18.9; + }; + class BWA3_MG5 : Rifle_Long_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=21.6; + }; + class BWA3_G82 : Rifle_Long_Base_F + { + ACE_barrelTwist=15; + ACE_barrelLength=29; + }; + + class Trixie_L131A1 : Pistol_Base_F + { + ACE_barrelTwist=9.8; + ACE_barrelLength=4.5; + }; + class Trixie_XM8_Carbine : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=12.5; + }; + class Trixie_XM8_Compact : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=9; + }; + class Trixie_XM8_SAW : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=20; + }; + class Trixie_XM8_SAW_NB : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=20; + }; + class Trixie_XM8_DMR : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=20; + }; + class Trixie_XM8_DMR_NB : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=20; + }; + class L129A1_base : Rifle_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=16; + }; + class Trixie_Enfield : Rifle_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=25.2; + }; + class Trixie_CZ550_Rail : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=23.622; + }; + class Trixie_FNFAL_Rail : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=21; + }; + + class Trixie_M110 : Rifle_Base_F + { + ACE_barrelTwist=11; + ACE_barrelLength=20; + }; + class Trixie_MK12 : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=18; + }; + class Trixie_LM308MWS : Rifle_Base_F + { + ACE_barrelTwist=11.25; + ACE_barrelLength=16; + }; + class Trixie_M14DMR : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=22; + }; + class Trixie_M14DMR_NG_Black_Short : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=18; + }; + class Trixie_M14DMR_NG_Short : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=18; + }; + class Trixie_M14 : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=22; + }; + class Trixie_M40A3 : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=24; + }; + class Trixie_CZ750 : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=26; + }; + class Trixie_M24 : Rifle_Base_F + { + ACE_barrelTwist=11.25; + ACE_barrelLength=24; + }; + class Trixie_AWM338 : Rifle_Base_F + { + ACE_barrelTwist=11; + ACE_barrelLength=27; + }; + class Trixie_M107 : Rifle_Base_F + { + ACE_barrelTwist=15; + ACE_barrelLength=29; + }; + class Trixie_AS50 : Rifle_Base_F + { + ACE_barrelTwist=15; + ACE_barrelLength=29; + }; + class L110A1_base : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=13.7; + }; + class Trixie_L86A2_base : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=25.4; + }; + class Trixie_l85a2_base : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=20.4; + }; + class L7A2_base : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=24.8; + }; + + class rhs_weap_pya : Pistol_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=4.4; + }; + class rhs_weap_pkp : Rifle_Long_Base_F + { + ACE_barrelTwist=9.45; + ACE_barrelLength=25.9; + }; + class rhs_weap_pkm : Rifle_Long_Base_F + { + ACE_barrelTwist=9.45; + ACE_barrelLength=25.4; + }; + class rhs_weap_rpk74m : Rifle_Long_Base_F + { + ACE_barrelTwist=7.68; + ACE_barrelLength=23.2; + }; + class rhs_weap_rpk74 : Rifle_Long_Base_F + { + ACE_barrelTwist=7.68; + ACE_barrelLength=23.2; + }; + class rhs_weap_ak74m : Rifle_Base_F + { + ACE_barrelTwist=7.87; + ACE_barrelLength=16.3; + }; + class rhs_weap_aks74u : Rifle_Base_F + { + ACE_barrelTwist=6.3; + ACE_barrelLength=8.3; + }; + class rhs_weap_akm : Rifle_Base_F + { + ACE_barrelTwist=7.87; + ACE_barrelLength=16.3; + }; + class rhs_weap_svd : Rifle_Base_F + { + ACE_barrelTwist=9.4; + ACE_barrelLength=24.4; + }; + class rhs_weap_svds : Rifle_Base_F + { + ACE_barrelTwist=9.4; + ACE_barrelLength=22.2; + }; + class rhs_weap_m4_Base : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=14.5; + }; + class rhs_weap_m16a4 : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=20; + }; + class rhs_weap_m16a4_carryhandle : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=20; + }; + class rhs_weap_m16a4_grip : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=20; + }; + class rhs_weap_m240B : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=24.8; + }; + class rhs_weap_m249_pip : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=16.3; + }; + class rhs_weap_mk18 : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=10.3; + }; + class rhs_weap_M590_5RD : Rifle_Base_F + { + ACE_barrelTwist=0; + ACE_twistDirection=0; + ACE_barrelLength=18.5; + }; + class rhs_weap_M590_8RD : Rifle_Base_F + { + ACE_barrelTwist=0; + ACE_twistDirection=0; + ACE_barrelLength=20; + }; + class rhs_weap_sr25 : Rifle_Base_F + { + ACE_barrelTwist=11.25; + ACE_barrelLength=24; + }; + class rhs_weap_sr25_ec : Rifle_Base_F + { + ACE_barrelTwist=11.25; + ACE_barrelLength=20; + }; + class rhs_weap_XM2010_Base_F: Rifle_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=24; + }; + + class R3F_PAMAS : Pistol_Base_F + { + ACE_barrelTwist=9.8; + ACE_barrelLength=4.9; + }; + class R3F_Famas_F1: Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=19.2; + }; + class R3F_Famas_surb: Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=15.9; + }; + class R3F_Minimi: Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=13.7; + }; + class R3F_Minimi_762: Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=19.8; + }; + class R3F_FRF2: Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=25.59; + }; + class R3F_PGM_Hecate_II: Rifle_Base_F + { + ACE_barrelTwist=15; + ACE_barrelLength=27.6; + }; + class R3F_HK417S_HG : Rifle_Base_F + { + ACE_barrelTwist=11; + ACE_barrelLength=12; + }; + class R3F_HK417M : Rifle_Base_F + { + ACE_barrelTwist=11; + ACE_barrelLength=16; + }; + class R3F_HK417L : Rifle_Base_F + { + ACE_barrelTwist=11; + ACE_barrelLength=20; + }; + class R3F_M107 : Rifle_Base_F + { + ACE_barrelTwist=15; + ACE_barrelLength=29; + }; + class R3F_HK416M : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=14; + }; + class R3F_MP5SD : Rifle_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=5.7; + }; + + class CUP_hgun_Colt1911 : Pistol_Base_F + { + ACE_barrelTwist=16; + ACE_barrelLength=5; + }; + class CUP_sgun_AA12 : Rifle_Base_F + { + ACE_barrelTwist=0; + ACE_twistDirection=0; + ACE_barrelLength=18; + }; + class CUP_arifle_AK_Base : Rifle_Base_F + { + ACE_barrelTwist=9.45; + ACE_barrelLength=16.3; + }; + class CUP_arifle_AK107_Base : Rifle_Base_F + { + ACE_barrelTwist=7.87; + ACE_barrelLength=16.3; + }; + class CUP_arifle_AKS_Base : Rifle_Base_F + { + ACE_barrelTwist=7.87; + ACE_barrelLength=16.3; + }; + class CUP_arifle_AKS74U : Rifle_Base_F + { + ACE_barrelTwist=6.3; + ACE_barrelLength=8.3; + }; + class CUP_arifle_RPK74 : Rifle_Long_Base_F + { + ACE_barrelTwist=7.68; + ACE_barrelLength=23.2; + }; + class CUP_srifle_AS50 : Rifle_Long_Base_F + { + ACE_barrelTwist=15; + ACE_barrelLength=29; + }; + class CUP_srifle_AWM_Base : Rifle_Long_Base_F + { + ACE_barrelTwist=11; + ACE_barrelLength=27; + }; + class CUP_smg_bizon : Rifle_Base_F + { + ACE_barrelTwist=9.45; + ACE_barrelLength=9.1; + }; + class CUP_hgun_Compact : Pistol_Base_F + { + ACE_barrelTwist=9.8; + ACE_barrelLength=3.74; + }; + class CUP_srifle_CZ750 : Rifle_Long_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=26; + }; + class CUP_arifle_CZ805_Base : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=14; + }; + class CUP_arifle_CZ805_A1 : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=14; + }; + class CUP_arifle_CZ805_A2 : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=10.9; + }; + class CUP_srifle_DMR : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=22; + }; + class CUP_hgun_Duty : Pistol_Base_F + { + ACE_barrelTwist=9.8; + ACE_barrelLength=3.74; + }; + class CUP_arifle_FNFAL : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=21; + }; + class CUP_arifle_G36A : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=18.9; + }; + class CUP_arifle_G36K : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=12.5; + }; + class CUP_arifle_G36C : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=9; + }; + class CUP_arifle_MG36 : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=18.9; + }; + class CUP_hgun_Glock17 : Pistol_Base_F + { + ACE_barrelTwist=9.8; + ACE_barrelLength=4.49; + }; + class CUP_srifle_CZ550 : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=23.622; + }; + class CUP_srifle_ksvk : Rifle_Long_Base_F + { + ACE_barrelTwist=18; + ACE_barrelLength=39.37; + }; + class CUP_lmg_L7A2 : Rifle_Long_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=24.8; + }; + class CUP_arifle_L85A2_Base : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=20.4; + }; + class CUP_lmg_L110A1 : Rifle_Long_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=13.7; + }; + class CUP_srifle_LeeEnfield : Rifle_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=25.2; + }; + class CUP_hgun_M9 : Pistol_Base_F + { + ACE_barrelTwist=9.8; + ACE_barrelLength=4.9; + }; + class CUP_srifle_M14 : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=22; + }; + class CUP_arifle_M16_Base : Rifle_Base_F + { + ACE_barrelTwist=14; + ACE_barrelLength=20; + }; + class CUP_arifle_M4_Base : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=14.5; + }; + class CUP_srifle_Mk12SPR : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=18; + }; + class CUP_srifle_M24_des : Rifle_Base_F + { + ACE_barrelTwist=11.25; + ACE_barrelLength=24; + }; + class CUP_lmg_M60A4 : Rifle_Long_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=17; + }; + class CUP_srifle_M107_Base : Rifle_Long_Base_F + { + ACE_barrelTwist=15; + ACE_barrelLength=29; + }; + class CUP_srifle_M110 : Rifle_Base_F + { + ACE_barrelTwist=11; + ACE_barrelLength=20; + }; + class CUP_lmg_M240 : Rifle_Long_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=24.8; + }; + class CUP_lmg_M249_para : Rifle_Long_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=16.3; + }; + class CUP_lmg_M249 : Rifle_Long_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=18; + }; + class CUP_sgun_M1014 : Rifle_Base_F + { + ACE_twistDirection=0; + ACE_barrelTwist=0; + ACE_barrelLength=18.5; + }; + class CUP_hgun_Makarov : Pistol_Base_F + { + ACE_barrelTwist=9.45; + ACE_barrelLength=3.68; + }; + class CUP_hgun_MicroUzi : Pistol_Base_F + { + ACE_barrelTwist=9.8; + ACE_barrelLength=5; + }; + class CUP_lmg_Mk48_Base : Rifle_Long_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=19.75; + }; + class CUP_smg_MP5SD6 : Rifle_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=5.7; + }; + class CUP_smg_MP5A5 : Rifle_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=8.9; + }; + class CUP_hgun_PB6P9 : Rifle_Base_F + { + ACE_barrelTwist=9.45; + ACE_barrelLength=4.1; + }; + class CUP_hgun_Phantom : Rifle_Base_F + { + ACE_barrelTwist=9.7; + ACE_barrelLength=4.7; + }; + class CUP_lmg_PKM : Rifle_Long_Base_F + { + ACE_barrelTwist=9.45; + ACE_barrelLength=25.4; + }; + class CUP_lmg_Pecheneg : Rifle_Long_Base_F + { + ACE_barrelTwist=9.45; + ACE_barrelLength=25.9; + }; + class CUP_hgun_TaurusTracker455 : Pistol_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=4; + }; + class CUP_arifle_Sa58P : Rifle_Base_F + { + ACE_barrelTwist=9.45; + ACE_barrelLength=15.4; + }; + class CUP_arifle_Sa58V : Rifle_Base_F + { + ACE_barrelTwist=9.45; + ACE_barrelLength=15.4; + }; + class CUP_hgun_SA61 : Pistol_Base_F + { + ACE_barrelTwist=16; + ACE_barrelLength=4.5; + }; + class CUP_sgun_Saiga12K: Rifle_Base_F + { + ACE_barrelTwist=0; + ACE_twistDirection=0; + ACE_barrelLength=16.9; + } + class CUP_arifle_Mk16_CQC : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=10; + }; + class CUP_arifle_Mk16_STD : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=14; + }; + class CUP_arifle_Mk16_SV : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=18; + }; + class CUP_arifle_Mk17_CQC : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=13; + }; + class CUP_arifle_Mk17_STD : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=16; + }; + class CUP_arifle_Mk20 : Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=20; + }; + class CUP_srifle_SVD : Rifle_Base_F + { + ACE_barrelTwist=9.4; + ACE_barrelLength=24.4; + }; + class CUP_lmg_UK59 : Rifle_Long_Base_F + { + ACE_barrelTwist=15; + ACE_barrelLength=21.7; + }; + class CUP_DSHKM_W : MGun + { + ACE_barrelTwist=15; + ACE_barrelLength=42.1; + }; + class CUP_KPVT_W : MGun + { + ACE_barrelTwist=17.91; + ACE_barrelLength=53; + }; + class CUP_KPVB_W : MGun + { + ACE_barrelTwist=17.91; + ACE_barrelLength=53; + }; + class CUP_M134 : MGunCore + { + ACE_barrelTwist=12; + ACE_barrelLength=22; + }; + class CUP_M240_veh_W : Rifle_Long_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=24.8; + }; + class CUP_PKT_W : MGun + { + ACE_barrelTwist=9.45; + ACE_barrelLength=28.43; + }; + class CUP_srifle_VSSVintorez : Rifle_Base_F + { + ACE_barrelTwist=8.3; + ACE_barrelLength=7.9; + }; + class CUP_arifle_XM8_Base : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=12.5; + }; + class CUP_arifle_XM8_Carbine : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=12.5; + }; + class CUP_arifle_xm8_sharpshooter : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=20; + }; + class CUP_arifle_xm8_SAW : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=20; + }; + class CUP_arifle_XM8_Compact : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=9; + }; + class CUP_arifle_XM8_Railed_Base : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=12.5; + }; + class CUP_arifle_XM8_Carbine_FG : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=12.5; + }; + + class VTN_AK_BASE: Rifle_Base_F + { + ACE_barrelTwist=7.87; + ACE_barrelLength=16.3; + }; + class VTN_AK74M: Rifle_Base_F + { + ACE_barrelTwist=7.87; + ACE_barrelLength=16.3; + }; + class VTN_AK74M_GP25: Rifle_Base_F + { + ACE_barrelTwist=7.87; + ACE_barrelLength=16.3; + }; + class VTN_AK74M_GP30M: Rifle_Base_F + { + ACE_barrelTwist=7.87; + ACE_barrelLength=16.3; + }; + class VTN_AKS74: Rifle_Base_F + { + ACE_barrelTwist=7.87; + ACE_barrelLength=16.3; + }; + class VTN_AKS74N: Rifle_Base_F + { + ACE_barrelTwist=7.87; + ACE_barrelLength=16.3; + }; + class VTN_AKS74N_76: Rifle_Base_F + { + ACE_barrelTwist=7.87; + ACE_barrelLength=16.3; + }; + class VTN_AK74_76: Rifle_Base_F + { + ACE_barrelTwist=7.87; + ACE_barrelLength=16.3; + }; + class VTN_AKMS_aa: Rifle_Base_F + { + ACE_barrelTwist=7.87; + ACE_barrelLength=10.3; + }; + class VTN_AKS74U_BASE: Rifle_Base_F + { + ACE_barrelTwist=6.3; + ACE_barrelLength=8.3; + }; + class VTN_AKM_BASE: Rifle_Base_F + { + ACE_barrelTwist=7.87; + ACE_barrelLength=16.3; + }; + class VTN_AKMS: Rifle_Base_F + { + ACE_barrelTwist=7.87; + ACE_barrelLength=16.3; + }; + class VTN_AKMS_T_P: Rifle_Base_F + { + ACE_barrelTwist=7.87; + ACE_barrelLength=16.3; + }; + class VTN_AK103_BASE: Rifle_Base_F + { + ACE_barrelTwist=9.45; + ACE_barrelLength=16.3; + }; + class VTN_AK104_BASE: Rifle_Base_F + { + ACE_barrelTwist=9.45; + ACE_barrelLength=12.4; + }; + class VTN_AK105_BASE: Rifle_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=12.4; + }; + class VTN_AK105_P_BASE: Rifle_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=12.4; + }; + class VTN_SVD_BASE: Rifle_Base_F + { + ACE_barrelTwist=9.4; + ACE_barrelLength=24.4; + }; + class VTN_SVD_63: Rifle_Base_F + { + ACE_barrelTwist=9.4; + ACE_barrelLength=24.4; + }; + class VTN_SVD_86: Rifle_Base_F + { + ACE_barrelTwist=9.4; + ACE_barrelLength=24.4; + }; + class VTN_SV98_BASE: Rifle_Base_F + { + ACE_barrelTwist=12.6; + ACE_barrelLength=25.59; + }; + class VTN_PKM_BAS: Rifle_Base_F + { + ACE_barrelTwist=9.45; + ACE_barrelLength=25.4; + }; + class VTN_PKP: Rifle_Base_F + { + ACE_barrelTwist=9.45; + ACE_barrelLength=25.9; + }; + class VTN_PYA: Pistol_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=4.4; + }; + class VTN_PM: Pistol_Base_F + { + ACE_barrelTwist=9.45; + ACE_barrelLength=3.68; + }; + class VTN_PB: Pistol_Base_F + { + ACE_barrelTwist=9.45; + ACE_barrelLength=4.1; + }; + class VTN_GSH18: Pistol_Base_F + { + ACE_barrelTwist=9.8; + ACE_barrelLength=4.1; + }; + class VTN_PSS: Pistol_Base_F + { + ACE_barrelTwist=16; + ACE_barrelLength=1.4; + }; + class VTN_PKT: Rifle_Base_F + { + ACE_barrelTwist=9.45; + ACE_barrelLength=28.43; + }; + class VTN_KORD: Rifle_Base_F + { + ACE_barrelTwist=17.91; + ACE_barrelLength=53; + }; + class VTN_KPVT: Rifle_Base_F + { + ACE_barrelTwist=17.91; + ACE_barrelLength=53; + }; + class VTN_C_M4A1 : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=14.5; + }; + class VTN_MK18MOD0: Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=10.3; + }; + class VTN_M16_BASE: Rifle_Base_F + { + ACE_barrelTwist=14; + ACE_barrelLength=20; + }; + class VTN_FN_SAMR_BASE: Rifle_Base_F + { + ACE_barrelTwist=7.7; + ACE_barrelLength=20; + }; + class VTN_M249_SAW_BASE: Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=18; + }; + class VTN_M249_PARA: Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=16.3; + }; + class VTN_M240G_BASE: Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=24.8; + }; + class VTN_M9: Pistol_Base_F + { + ACE_barrelTwist=9.8; + ACE_barrelLength=4.9; + }; + class VTN_M45A1: Pistol_Base_F + { + ACE_barrelTwist=16; + ACE_barrelLength=5; + }; + class VTN_M24: Rifle_Base_F + { + ACE_barrelTwist=11.25; + ACE_barrelLength=24; + }; + class VTN_M240: Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=24.8; + }; + class VTN_KO44: Rifle_Base_F + { + ACE_barrelTwist=9.5; + ACE_barrelLength=20.2; + }; + class VTN_SAIGA_MK03: Rifle_Base_F + { + ACE_twistDirection=9.45; + ACE_barrelLength=16.3; + }; +}; \ No newline at end of file From fdbd0c19057cefb52109fc5ed969c85561661ce9 Mon Sep 17 00:00:00 2001 From: PabstMirror <elephantisaterriblemascot@gmail.com> Date: Mon, 20 Apr 2015 16:12:01 -0500 Subject: [PATCH 245/257] #777 - mDagr - Update map pos each frame. --- addons/microdagr/functions/fnc_mapOnDrawEH.sqf | 4 ++-- addons/microdagr/functions/fnc_openDisplay.sqf | 1 - addons/microdagr/functions/fnc_updateDisplay.sqf | 14 +++++++------- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/addons/microdagr/functions/fnc_mapOnDrawEH.sqf b/addons/microdagr/functions/fnc_mapOnDrawEH.sqf index bff20a4b67..644064d069 100644 --- a/addons/microdagr/functions/fnc_mapOnDrawEH.sqf +++ b/addons/microdagr/functions/fnc_mapOnDrawEH.sqf @@ -49,11 +49,11 @@ if (GVAR(currentApplicationPage) == 1) then { } else { //Map Mode: if (GVAR(mapAutoTrackPosition)) then { - _theMap ctrlMapAnimAdd [0, (GVAR(mapZoom)/_mapSize), GVAR(gpsPositionASL)]; + _theMap ctrlMapAnimAdd [0, (GVAR(mapZoom)/_mapSize), (getPosASL ace_player)]; ctrlMapAnimCommit _theMap; }; _size = 48 * _mapSize; - _theMap drawIcon [QUOTE(PATHTO_R(images\icon_self.paa)), [0.533,0.769,0.76,0.75], GVAR(gpsPositionASL), _size, _size, (getDir ace_player), '', 0 ]; + _theMap drawIcon [QUOTE(PATHTO_R(images\icon_self.paa)), [0.533,0.769,0.76,0.75], (getPosASL ace_player), _size, _size, (getDir ace_player), '', 0 ]; if (GVAR(settingShowAllWaypointsOnMap)) then { _size = 32 * _mapSize; diff --git a/addons/microdagr/functions/fnc_openDisplay.sqf b/addons/microdagr/functions/fnc_openDisplay.sqf index ae5f7f47f5..b4cec0fe46 100644 --- a/addons/microdagr/functions/fnc_openDisplay.sqf +++ b/addons/microdagr/functions/fnc_openDisplay.sqf @@ -83,7 +83,6 @@ if ((_oldShowMode == DISPLAY_MODE_CLOSED) && {GVAR(currentShowMode) != DISPLAY_M }; [_pfID] call CBA_fnc_removePerFrameHandler; } else { - GVAR(gpsPositionASL) = getPosAsl ace_player; if (GVAR(currentShowMode) == DISPLAY_MODE_HIDDEN) then { //If display is hidden, and we can show, then swithc modes: if ([DISPLAY_MODE_DISPLAY] call FUNC(canShow)) then { diff --git a/addons/microdagr/functions/fnc_updateDisplay.sqf b/addons/microdagr/functions/fnc_updateDisplay.sqf index 2a5f34a12c..26e5ef8638 100644 --- a/addons/microdagr/functions/fnc_updateDisplay.sqf +++ b/addons/microdagr/functions/fnc_updateDisplay.sqf @@ -44,7 +44,7 @@ case (APP_MODE_INFODISPLAY): { (_display displayCtrl IDC_MODEDISPLAY_NORTHING) ctrlSetText _northingText; //Elevation: - _numASL = (GVAR(gpsPositionASL) select 2) + GVAR(mapAltitude); + _numASL = ((getPosASL ace_player) select 2) + GVAR(mapAltitude); _aboveSeaLevelText = [_numASL, 5, 0] call CBA_fnc_formatNumber; _aboveSeaLevelText = if (_numASL > 0) then {"+" + _aboveSeaLevelText + " MSL"} else {_aboveSeaLevelText + " MSL"}; (_display displayCtrl IDC_MODEDISPLAY_ELEVATIONNUM) ctrlSetText _aboveSeaLevelText; @@ -88,13 +88,13 @@ case (APP_MODE_INFODISPLAY): { }; if (!(_targetPosLocationASL isEqualTo [])) then { - _bearing = [GVAR(gpsPositionASL), _targetPosLocationASL] call BIS_fnc_dirTo; + _bearing = [(getPosASL ace_player), _targetPosLocationASL] call BIS_fnc_dirTo; _bearingText = if (GVAR(settingUseMils)) then { [(floor ((6400 / 360) * (_bearing))), 4, 0] call CBA_fnc_formatNumber; } else { ([(floor (_bearing)), 3, 1] call CBA_fnc_formatNumber) + "°" //degree symbol is in UTF-8 }; - _2dDistanceKm = ((GVAR(gpsPositionASL) select [0,2]) distance (_targetPosLocationASL select [0,2])) / 1000; + _2dDistanceKm = (((getPosASL ace_player) select [0,2]) distance (_targetPosLocationASL select [0,2])) / 1000; _rangeText = format ["%1km", ([_2dDistanceKm, 1, 1] call CBA_fnc_formatNumber)]; _numASL = (_targetPosLocationASL select 2) + GVAR(mapAltitude); _aboveSeaLevelText = [_numASL, 5, 0] call CBA_fnc_formatNumber; @@ -125,7 +125,7 @@ case (APP_MODE_COMPASS): { (_display displayCtrl IDC_MODECOMPASS_RANGE) ctrlSetText ""; (_display displayCtrl IDC_MODECOMPASS_TARGET) ctrlSetText ""; } else { - _playerPos2d = GVAR(gpsPositionASL) select [0,2]; + _playerPos2d = (getPosASL ace_player) select [0,2]; _targetPosName = ""; _targetPosLocationASL = []; @@ -145,13 +145,13 @@ case (APP_MODE_COMPASS): { _rangeText = "---"; if (!(_targetPosLocationASL isEqualTo [])) then { - _bearing = [GVAR(gpsPositionASL), _targetPosLocationASL] call BIS_fnc_dirTo; + _bearing = [(getPosASL ace_player), _targetPosLocationASL] call BIS_fnc_dirTo; _bearingText = if (GVAR(settingUseMils)) then { [(floor ((6400 / 360) * (_bearing))), 4, 0] call CBA_fnc_formatNumber; } else { ([(floor (_bearing)), 3, 1] call CBA_fnc_formatNumber) + "°" //degree symbol is in UTF-8 }; - _2dDistanceKm = ((GVAR(gpsPositionASL) select [0,2]) distance (_targetPosLocationASL select [0,2])) / 1000; + _2dDistanceKm = (((getPosASL ace_player) select [0,2]) distance (_targetPosLocationASL select [0,2])) / 1000; _rangeText = format ["%1km", ([_2dDistanceKm, 1, 1] call CBA_fnc_formatNumber)]; }; @@ -169,7 +169,7 @@ case (APP_MODE_WAYPOINTS): { { EXPLODE_2_PVT(_x,_wpName,_wpPos); _wpListBox lbAdd _wpName; - _2dDistanceKm = ((GVAR(gpsPositionASL) select [0,2]) distance (_wpPos select [0,2])) / 1000; + _2dDistanceKm = (((getPosASL ace_player) select [0,2]) distance (_wpPos select [0,2])) / 1000; _wpListBox lbSetTextRight [_forEachIndex, (format ["%1km", ([_2dDistanceKm, 1, 1] call CBA_fnc_formatNumber)])]; } forEach _waypoints; From 90288b495ed5468866fb8a644881d4bf5cd06a43 Mon Sep 17 00:00:00 2001 From: esteldunedain <nicolas.d.badano@gmail.com> Date: Mon, 20 Apr 2015 18:24:12 -0300 Subject: [PATCH 246/257] Interactions inside vehicles. Skip the "Main Interactions" level; mount its children intead. --- addons/interaction/functions/fnc_addPassengerActions.sqf | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/addons/interaction/functions/fnc_addPassengerActions.sqf b/addons/interaction/functions/fnc_addPassengerActions.sqf index 9e577ed7bb..82e3b3b4fb 100644 --- a/addons/interaction/functions/fnc_addPassengerActions.sqf +++ b/addons/interaction/functions/fnc_addPassengerActions.sqf @@ -24,6 +24,10 @@ _actionTrees = missionNamespace getVariable [_varName, []]; _actions = []; // Mount unit MainActions menu -_actions pushBack [(_actionTrees select 0) select 0, (_actionTrees select 0) select 1, _unit]; + +{ + EXPLODE_2_PVT(_x,_actionData,_children); + _actions pushBack [_actionData, _children, _unit]; +} forEach ((_actionTrees select 0) select 1); _actions From 6c4b078dce761a73b4ae43e7dc8dbb59d5a2f393 Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Tue, 21 Apr 2015 09:46:57 +0200 Subject: [PATCH 247/257] Updated the default gun profile used for adding new profiles --- addons/atragmx/functions/fnc_add_new_gun.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/atragmx/functions/fnc_add_new_gun.sqf b/addons/atragmx/functions/fnc_add_new_gun.sqf index bac04c2e07..0a0c034f39 100644 --- a/addons/atragmx/functions/fnc_add_new_gun.sqf +++ b/addons/atragmx/functions/fnc_add_new_gun.sqf @@ -19,7 +19,7 @@ private ["_gunName", "_gunProfileEntry"]; _gunName = ctrlText 11001; if (_gunName != "") then { - _gunProfileEntry = [_gunName, 850, 500, 0.280, -0.0010000, 3.81, 0, 0.338, 0.338, 120, 0, 0, 9.460, "", "", 0.393, 1, "ICAO"]; + _gunProfileEntry = [_gunName, 810, 100, 0.0679, -0.0010350, 3.81, 0, 2, 10, 120, 0, 0, 9.525, 7.82, 25.40, 0.393, 1, "ICAO"], GVAR(gunList) = GVAR(gunList) + [_gunProfileEntry]; From f98a0cdfae2593b20a68e81e977b2c0d639d1720 Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Tue, 21 Apr 2015 11:24:59 +0200 Subject: [PATCH 248/257] Overworked the scope click number GUI --- addons/atragmx/RscTitles.hpp | 9 +++++++++ addons/atragmx/functions/fnc_restore_user_data.sqf | 1 - addons/atragmx/functions/fnc_show_main_page.sqf | 5 ++++- addons/atragmx/functions/fnc_store_user_data.sqf | 1 - addons/atragmx/functions/fnc_update_scope_unit.sqf | 11 ++++++++--- 5 files changed, 21 insertions(+), 6 deletions(-) diff --git a/addons/atragmx/RscTitles.hpp b/addons/atragmx/RscTitles.hpp index fe45ef67f5..8b576e4275 100644 --- a/addons/atragmx/RscTitles.hpp +++ b/addons/atragmx/RscTitles.hpp @@ -595,11 +595,20 @@ class ATragMX_Display { class TEXT_SCOPE_UNIT: TEXT_GUN_LIST { idc=2000; style=ST_CENTER; + w=0.06; x=0.550*safezoneW+safezoneX+0.205; colorBackground[]={0,0,0,0}; text="TMOA"; action=QUOTE(call FUNC(cycle_scope_unit)); }; + class TEXT_SCOPE_CLICK_NUMBER: TEXT_GUN_LIST { + idc=2001; + style=ST_CENTER; + w=0.03; + x=0.550*safezoneW+safezoneX+0.27; + text="4"; + action=""; + }; class TEXT_CALCULATE: TEXT_SCOPE_UNIT { idc=3000; style=ST_RIGHT; diff --git a/addons/atragmx/functions/fnc_restore_user_data.sqf b/addons/atragmx/functions/fnc_restore_user_data.sqf index 55b73cc5b5..7204f17426 100644 --- a/addons/atragmx/functions/fnc_restore_user_data.sqf +++ b/addons/atragmx/functions/fnc_restore_user_data.sqf @@ -18,7 +18,6 @@ GVAR(currentUnit) = 0 max (profileNamespace getVariable ["ACE_ATragMX_currentUnit", 2]) min 2; [(profileNamespace getVariable ["ACE_ATragMX_currentGun", 0]), true, false] call FUNC(change_gun); GVAR(currentTarget) = 0 max (profileNamespace getVariable ["ACE_ATragMX_currentTarget", 0]) min 3; -GVAR(currentScopeUnit) = 0 max (profileNamespace getVariable ["ACE_ATragMX_currentScopeUnit", 0]) min 3; GVAR(atmosphereModeTBH) = profileNamespace getVariable ["ACE_ATragMX_atmosphereModeTBH", true]; GVAR(altitude) = -1000 max (profileNamespace getVariable ["ACE_ATragMX_altitude", 0]) min 20000; diff --git a/addons/atragmx/functions/fnc_show_main_page.sqf b/addons/atragmx/functions/fnc_show_main_page.sqf index ed999948b0..580d111c8f 100644 --- a/addons/atragmx/functions/fnc_show_main_page.sqf +++ b/addons/atragmx/functions/fnc_show_main_page.sqf @@ -18,7 +18,7 @@ GVAR(showMainPage) = _this; {ctrlShow [_x, _this]} forEach [10, 100, 11, 110, 12, 120, 13, 130, 14, 140, 20, 200, 21, 210, 22, 220, 23, 230, 30, 300, 31, 310, 32, 320, 33, 330, 34, 340, 40, 400, 401, 402, 403, 41, 410, 411, 412, 42, 420, - 500, 501, 502, 503, 600, 601, 602, 603, 1000, 1001, 1002, 1003, 1004, 2000, 3000, 4000, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008]; + 500, 501, 502, 503, 600, 601, 602, 603, 1000, 1001, 1002, 1003, 1004, 2000, 2001, 3000, 4000, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008]; if (_this) then { if (GVAR(atmosphereModeTBH)) then { @@ -26,4 +26,7 @@ if (_this) then { } else { {ctrlShow [_x, false]} forEach [21, 210, 22, 220]; }; + if (GVAR(currentScopeUnit) != 3) then { + {ctrlShow [_x, false]} forEach [2001]; + }; }; diff --git a/addons/atragmx/functions/fnc_store_user_data.sqf b/addons/atragmx/functions/fnc_store_user_data.sqf index 2045276426..01a5810fe2 100644 --- a/addons/atragmx/functions/fnc_store_user_data.sqf +++ b/addons/atragmx/functions/fnc_store_user_data.sqf @@ -20,7 +20,6 @@ profileNamespace setVariable ["ACE_ATragMX_profileNamespaceVersion", ATRAGMX_PRO profileNamespace setVariable ["ACE_ATragMX_currentUnit", GVAR(currentUnit)]; profileNamespace setVariable ["ACE_ATragMX_currentGun", GVAR(currentGun)]; profileNamespace setVariable ["ACE_ATragMX_currentTarget", GVAR(currentTarget)]; -profileNamespace setVariable ["ACE_ATragMX_currentScopeUnit", GVAR(currentScopeUnit)]; profileNamespace setVariable ["ACE_ATragMX_atmosphereModeTBH", GVAR(atmosphereModeTBH)]; profileNamespace setVariable ["ACE_ATragMX_altitude", GVAR(altitude)]; diff --git a/addons/atragmx/functions/fnc_update_scope_unit.sqf b/addons/atragmx/functions/fnc_update_scope_unit.sqf index 72efeb772e..46db8c40c4 100644 --- a/addons/atragmx/functions/fnc_update_scope_unit.sqf +++ b/addons/atragmx/functions/fnc_update_scope_unit.sqf @@ -15,10 +15,15 @@ */ #include "script_component.hpp" +ctrlSetText [2000, GVAR(scopeUnits) select GVAR(currentScopeUnit)]; +ctrlSetText [2001, Str(GVAR(currentScopeClickNumber))]; + if (GVAR(currentScopeUnit) == 3) then { - ctrlSetText [2000, format["Clicks=%1", GVAR(currentScopeClickNumber)]]; ctrlSetText [5000, format["Clicks=%1", GVAR(currentScopeClickNumber)]]; + if (GVAR(showMainPage)) then { + ctrlShow [2001, true]; + }; } else { - ctrlSetText [2000, GVAR(scopeUnits) select GVAR(currentScopeUnit)]; ctrlSetText [5000, GVAR(scopeUnits) select GVAR(currentScopeUnit)]; -}; + ctrlShow [2001, false]; +}; \ No newline at end of file From 0cf2374475e333bff88ada313050c120df8f61d2 Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Tue, 21 Apr 2015 11:43:16 +0200 Subject: [PATCH 249/257] Atmospheric Calc Method GUI improvement --- addons/atragmx/RscTitles.hpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/addons/atragmx/RscTitles.hpp b/addons/atragmx/RscTitles.hpp index 8b576e4275..fca0a6fcfe 100644 --- a/addons/atragmx/RscTitles.hpp +++ b/addons/atragmx/RscTitles.hpp @@ -1222,7 +1222,10 @@ class ATragMX_Display { }; class TEXT_ATMO_ENV_DATA_CALC_METHOD: TEXT_GUN_AMMO_DATA_BORE_HEIGHT { idc=13011; - x=0.550*safezoneW+safezoneX+0.24; + style=64; + w=0.14; + h=0.07; + x=0.550*safezoneW+safezoneX+0.235; y=0.265*safezoneH+safezoneY+0.29; text="Calc Method"; }; From c24586ce02f884882c053bfcc95eb96ea771e1b3 Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Tue, 21 Apr 2015 11:53:28 +0200 Subject: [PATCH 250/257] Reworked the result output GUI on the main page --- addons/atragmx/RscTitles.hpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/addons/atragmx/RscTitles.hpp b/addons/atragmx/RscTitles.hpp index fca0a6fcfe..5fd3339f28 100644 --- a/addons/atragmx/RscTitles.hpp +++ b/addons/atragmx/RscTitles.hpp @@ -523,9 +523,12 @@ class ATragMX_Display { x=0.550*safezoneW+safezoneX+0.32; text="Cur"; }; - class TEXT_ELEVATION_OUTPUT_ABSOLUTE: ATragMX_RscEdit { + class TEXT_ELEVATION_OUTPUT_ABSOLUTE: ATragMX_RscText { idc=400; - w=0.07; + style=160; + sizeEx=0.025; + w=0.065; + h=0.032; x=0.550*safezoneW+safezoneX+0.17; y=0.265*safezoneH+safezoneY+0.50; text=""; @@ -537,7 +540,6 @@ class ATragMX_Display { class TEXT_ELEVATION_INPUT_CURRENT: TEXT_ELEVATION_OUTPUT_ABSOLUTE { idc=402; x=0.550*safezoneW+safezoneX+0.323; - onKeyUp=QUOTE(if (_this select 1 == 28) then {call FUNC(parse_input); call FUNC(update_result)}); }; class TEXT_WINDAGE: TEXT_ELEVATION { idc=41; @@ -555,7 +557,6 @@ class ATragMX_Display { class TEXT_WINDAGE_INPUT_CURRENT: TEXT_WINDAGE_OUTPUT_ABSOLUTE { idc=412; x=0.550*safezoneW+safezoneX+0.323; - onKeyUp=QUOTE(if (_this select 1 == 28) then {call FUNC(parse_input); call FUNC(update_result)}); }; class TEXT_LEAD: TEXT_GUN { idc=42; From aabec2aea2a95ec0a386e563657d2196dfafcb89 Mon Sep 17 00:00:00 2001 From: ViperMaul <vipermaul@gmail.com> Date: Tue, 21 Apr 2015 04:02:10 -0700 Subject: [PATCH 251/257] Converting Tabs to Spaces. Confirming UTF-8 --- tools/make.py | 1690 +++++++++++++++++++++++++------------------------ 1 file changed, 846 insertions(+), 844 deletions(-) diff --git a/tools/make.py b/tools/make.py index 5146a666bb..aaaf6501c5 100644 --- a/tools/make.py +++ b/tools/make.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python # vim: set fileencoding=utf-8 : # make.py @@ -35,8 +35,8 @@ __version__ = "0.4" import sys if sys.version_info[0] == 2: - print("Python 3 is required.") - sys.exit(1) + print("Python 3 is required.") + sys.exit(1) import os import os.path @@ -52,7 +52,7 @@ import time import re if sys.platform == "win32": - import winreg + import winreg ######## GLOBALS ######### work_drive = "" @@ -70,369 +70,371 @@ optionals_root = "" # -1 -> Directory does not exist # -2 -> General error (see stack traceback) def get_directory_hash(directory): - directory_hash = hashlib.sha1() - if not os.path.exists (directory): - return -1 + directory_hash = hashlib.sha1() + if not os.path.exists (directory): + return -1 - try: - for root, dirs, files in os.walk(directory): - for names in files: - path = os.path.join(root, names) - try: - f = open(path, 'rb') - except: - # You can't open the file for some reason - f.close() - continue + try: + for root, dirs, files in os.walk(directory): + for names in files: + path = os.path.join(root, names) + try: + f = open(path, 'rb') + except: + # You can't open the file for some reason + f.close() + continue - while 1: - # Read file in as little chunks - buf = f.read(4096) - if not buf: break - new = hashlib.sha1(buf) - directory_hash.update(new.digest()) - f.close() + while 1: + # Read file in as little chunks + buf = f.read(4096) + if not buf: break + new = hashlib.sha1(buf) + directory_hash.update(new.digest()) + f.close() - except: - # Print the stack traceback - traceback.print_exc() - return -2 + except: + # Print the stack traceback + traceback.print_exc() + return -2 - return directory_hash.hexdigest() + return directory_hash.hexdigest() # Copyright (c) André Burgaud # http://www.burgaud.com/bring-colors-to-the-windows-console-with-python/ if sys.platform == "win32": - from ctypes import windll, Structure, c_short, c_ushort, byref + from ctypes import windll, Structure, c_short, c_ushort, byref - SHORT = c_short - WORD = c_ushort + SHORT = c_short + WORD = c_ushort - class COORD(Structure): - """struct in wincon.h.""" - _fields_ = [ - ("X", SHORT), - ("Y", SHORT)] + class COORD(Structure): + """struct in wincon.h.""" + _fields_ = [ + ("X", SHORT), + ("Y", SHORT)] - class SMALL_RECT(Structure): - """struct in wincon.h.""" - _fields_ = [ - ("Left", SHORT), - ("Top", SHORT), - ("Right", SHORT), - ("Bottom", SHORT)] + class SMALL_RECT(Structure): + """struct in wincon.h.""" + _fields_ = [ + ("Left", SHORT), + ("Top", SHORT), + ("Right", SHORT), + ("Bottom", SHORT)] - class CONSOLE_SCREEN_BUFFER_INFO(Structure): - """struct in wincon.h.""" - _fields_ = [ - ("dwSize", COORD), - ("dwCursorPosition", COORD), - ("wAttributes", WORD), - ("srWindow", SMALL_RECT), - ("dwMaximumWindowSize", COORD)] + class CONSOLE_SCREEN_BUFFER_INFO(Structure): + """struct in wincon.h.""" + _fields_ = [ + ("dwSize", COORD), + ("dwCursorPosition", COORD), + ("wAttributes", WORD), + ("srWindow", SMALL_RECT), + ("dwMaximumWindowSize", COORD)] - # winbase.h - STD_INPUT_HANDLE = -10 - STD_OUTPUT_HANDLE = -11 - STD_ERROR_HANDLE = -12 + # winbase.h + STD_INPUT_HANDLE = -10 + STD_OUTPUT_HANDLE = -11 + STD_ERROR_HANDLE = -12 - # wincon.h - FOREGROUND_BLACK = 0x0000 - FOREGROUND_BLUE = 0x0001 - FOREGROUND_GREEN = 0x0002 - FOREGROUND_CYAN = 0x0003 - FOREGROUND_RED = 0x0004 - FOREGROUND_MAGENTA = 0x0005 - FOREGROUND_YELLOW = 0x0006 - FOREGROUND_GREY = 0x0007 - FOREGROUND_INTENSITY = 0x0008 # foreground color is intensified. + # wincon.h + FOREGROUND_BLACK = 0x0000 + FOREGROUND_BLUE = 0x0001 + FOREGROUND_GREEN = 0x0002 + FOREGROUND_CYAN = 0x0003 + FOREGROUND_RED = 0x0004 + FOREGROUND_MAGENTA = 0x0005 + FOREGROUND_YELLOW = 0x0006 + FOREGROUND_GREY = 0x0007 + FOREGROUND_INTENSITY = 0x0008 # foreground color is intensified. - BACKGROUND_BLACK = 0x0000 - BACKGROUND_BLUE = 0x0010 - BACKGROUND_GREEN = 0x0020 - BACKGROUND_CYAN = 0x0030 - BACKGROUND_RED = 0x0040 - BACKGROUND_MAGENTA = 0x0050 - BACKGROUND_YELLOW = 0x0060 - BACKGROUND_GREY = 0x0070 - BACKGROUND_INTENSITY = 0x0080 # background color is intensified. + BACKGROUND_BLACK = 0x0000 + BACKGROUND_BLUE = 0x0010 + BACKGROUND_GREEN = 0x0020 + BACKGROUND_CYAN = 0x0030 + BACKGROUND_RED = 0x0040 + BACKGROUND_MAGENTA = 0x0050 + BACKGROUND_YELLOW = 0x0060 + BACKGROUND_GREY = 0x0070 + BACKGROUND_INTENSITY = 0x0080 # background color is intensified. - stdout_handle = windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE) - SetConsoleTextAttribute = windll.kernel32.SetConsoleTextAttribute - GetConsoleScreenBufferInfo = windll.kernel32.GetConsoleScreenBufferInfo + stdout_handle = windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE) + SetConsoleTextAttribute = windll.kernel32.SetConsoleTextAttribute + GetConsoleScreenBufferInfo = windll.kernel32.GetConsoleScreenBufferInfo - def get_text_attr(): - """Returns the character attributes (colors) of the console screen - buffer.""" - csbi = CONSOLE_SCREEN_BUFFER_INFO() - GetConsoleScreenBufferInfo(stdout_handle, byref(csbi)) - return csbi.wAttributes + def get_text_attr(): + """Returns the character attributes (colors) of the console screen + buffer.""" + csbi = CONSOLE_SCREEN_BUFFER_INFO() + GetConsoleScreenBufferInfo(stdout_handle, byref(csbi)) + return csbi.wAttributes - def set_text_attr(color): - """Sets the character attributes (colors) of the console screen - buffer. Color is a combination of foreground and background color, - foreground and background intensity.""" - SetConsoleTextAttribute(stdout_handle, color) + def set_text_attr(color): + """Sets the character attributes (colors) of the console screen + buffer. Color is a combination of foreground and background color, + foreground and background intensity.""" + SetConsoleTextAttribute(stdout_handle, color) ############################################################################### def find_bi_tools(work_drive): - """Find BI tools.""" + """Find BI tools.""" - reg = winreg.ConnectRegistry(None, winreg.HKEY_CURRENT_USER) - try: - k = winreg.OpenKey(reg, r"Software\bohemia interactive\arma 3 tools") - arma3tools_path = winreg.QueryValueEx(k, "path")[0] - winreg.CloseKey(k) - except: - raise Exception("BadTools","Arma 3 Tools are not installed correctly or the P: drive needs to be created.") + reg = winreg.ConnectRegistry(None, winreg.HKEY_CURRENT_USER) + try: + k = winreg.OpenKey(reg, r"Software\bohemia interactive\arma 3 tools") + arma3tools_path = winreg.QueryValueEx(k, "path")[0] + winreg.CloseKey(k) + except: + raise Exception("BadTools","Arma 3 Tools are not installed correctly or the P: drive needs to be created.") - addonbuilder_path = os.path.join(arma3tools_path, "AddonBuilder", "AddonBuilder.exe") - dssignfile_path = os.path.join(arma3tools_path, "DSSignFile", "DSSignFile.exe") - dscreatekey_path = os.path.join(arma3tools_path, "DSSignFile", "DSCreateKey.exe") - cfgconvert_path = os.path.join(arma3tools_path, "CfgConvert", "CfgConvert.exe") + addonbuilder_path = os.path.join(arma3tools_path, "AddonBuilder", "AddonBuilder.exe") + dssignfile_path = os.path.join(arma3tools_path, "DSSignFile", "DSSignFile.exe") + dscreatekey_path = os.path.join(arma3tools_path, "DSSignFile", "DSCreateKey.exe") + cfgconvert_path = os.path.join(arma3tools_path, "CfgConvert", "CfgConvert.exe") - if os.path.isfile(addonbuilder_path) and os.path.isfile(dssignfile_path) and os.path.isfile(dscreatekey_path) and os.path.isfile(cfgconvert_path): - return [addonbuilder_path, dssignfile_path, dscreatekey_path, cfgconvert_path] - else: - raise Exception("BadTools","Arma 3 Tools are not installed correctly or the P: drive needs to be created.") + if os.path.isfile(addonbuilder_path) and os.path.isfile(dssignfile_path) and os.path.isfile(dscreatekey_path) and os.path.isfile(cfgconvert_path): + return [addonbuilder_path, dssignfile_path, dscreatekey_path, cfgconvert_path] + else: + raise Exception("BadTools","Arma 3 Tools are not installed correctly or the P: drive needs to be created.") def find_depbo_tools(regKey): - """Use registry entries to find DePBO-based tools.""" - stop = False + """Use registry entries to find DePBO-based tools.""" + stop = False - if regKey == "HKCU": - reg = winreg.ConnectRegistry(None, winreg.HKEY_CURRENT_USER) - stop = True - else: - reg = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE) + if regKey == "HKCU": + reg = winreg.ConnectRegistry(None, winreg.HKEY_CURRENT_USER) + stop = True + else: + reg = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE) - try: - try: - k = winreg.OpenKey(reg, r"Software\Wow6432Node\Mikero\pboProject") - except FileNotFoundError: - k = winreg.OpenKey(reg, r"Software\Mikero\pboProject") - try: - pboproject_path = winreg.QueryValueEx(k, "exe")[0] - winreg.CloseKey(k) - print("Found pboproject.") - except: - print_error("ERROR: Could not find pboProject.") + try: + try: + k = winreg.OpenKey(reg, r"Software\Wow6432Node\Mikero\pboProject") + except FileNotFoundError: + k = winreg.OpenKey(reg, r"Software\Mikero\pboProject") + try: + pboproject_path = winreg.QueryValueEx(k, "exe")[0] + winreg.CloseKey(k) + print("Found pboproject.") + except: + print_error("ERROR: Could not find pboProject.") - try: - k = winreg.OpenKey(reg, r"Software\Wow6432Node\Mikero\rapify") - except FileNotFoundError: - k = winreg.OpenKey(reg, r"Software\Mikero\rapify") - try: - rapify_path = winreg.QueryValueEx(k, "exe")[0] - winreg.CloseKey(k) - print("Found rapify.") - except: - print_error("Could not find rapify.") + try: + k = winreg.OpenKey(reg, r"Software\Wow6432Node\Mikero\rapify") + except FileNotFoundError: + k = winreg.OpenKey(reg, r"Software\Mikero\rapify") + try: + rapify_path = winreg.QueryValueEx(k, "exe")[0] + winreg.CloseKey(k) + print("Found rapify.") + except: + print_error("Could not find rapify.") - try: - k = winreg.OpenKey(reg, r"Software\Wow6432Node\Mikero\MakePbo") - except FileNotFoundError: - k = winreg.OpenKey(reg, r"Software\Mikero\MakePbo") - try: - makepbo_path = winreg.QueryValueEx(k, "exe")[0] - winreg.CloseKey(k) - print("Found makepbo.") - except: - print_error("Could not find makepbo.") - except: - if stop == True: - raise Exception("BadDePBO", "DePBO tools not installed correctly") - return -1 + try: + k = winreg.OpenKey(reg, r"Software\Wow6432Node\Mikero\MakePbo") + except FileNotFoundError: + k = winreg.OpenKey(reg, r"Software\Mikero\MakePbo") + try: + makepbo_path = winreg.QueryValueEx(k, "exe")[0] + winreg.CloseKey(k) + print("Found makepbo.") + except: + print_error("Could not find makepbo.") + except: + if stop == True: + raise Exception("BadDePBO", "DePBO tools not installed correctly") + return -1 - #Strip any quotations from the path due to a MikeRo tool bug which leaves a trailing space in some of its registry paths. - return [pboproject_path.strip('"'),rapify_path.strip('"'),makepbo_path.strip('"')] + #Strip any quotations from the path due to a MikeRo tool bug which leaves a trailing space in some of its registry paths. + return [pboproject_path.strip('"'),rapify_path.strip('"'),makepbo_path.strip('"')] def color(color): - """Set the color. Works on Win32 and normal terminals.""" - if sys.platform == "win32": - if color == "green": - set_text_attr(FOREGROUND_GREEN | get_text_attr() & 0x0070 | FOREGROUND_INTENSITY) - elif color == "red": - set_text_attr(FOREGROUND_RED | get_text_attr() & 0x0070 | FOREGROUND_INTENSITY) - elif color == "blue": - set_text_attr(FOREGROUND_BLUE | get_text_attr() & 0x0070 | FOREGROUND_INTENSITY) - elif color == "reset": - set_text_attr(FOREGROUND_GREY | get_text_attr() & 0x0070) - elif color == "grey": - set_text_attr(FOREGROUND_GREY | get_text_attr() & 0x0070) - else : - if color == "green": - sys.stdout.write('\033[92m') - elif color == "red": - sys.stdout.write('\033[91m') - elif color == "blue": - sys.stdout.write('\033[94m') - elif color == "reset": - sys.stdout.write('\033[0m') + """Set the color. Works on Win32 and normal terminals.""" + if sys.platform == "win32": + if color == "green": + set_text_attr(FOREGROUND_GREEN | get_text_attr() & 0x0070 | FOREGROUND_INTENSITY) + elif color == "yellow": + set_text_attr(FOREGROUND_YELLOW | get_text_attr() & 0x0070 | FOREGROUND_INTENSITY) + elif color == "red": + set_text_attr(FOREGROUND_RED | get_text_attr() & 0x0070 | FOREGROUND_INTENSITY) + elif color == "blue": + set_text_attr(FOREGROUND_BLUE | get_text_attr() & 0x0070 | FOREGROUND_INTENSITY) + elif color == "reset": + set_text_attr(FOREGROUND_GREY | get_text_attr() & 0x0070) + elif color == "grey": + set_text_attr(FOREGROUND_GREY | get_text_attr() & 0x0070) + else : + if color == "green": + sys.stdout.write('\033[92m') + elif color == "red": + sys.stdout.write('\033[91m') + elif color == "blue": + sys.stdout.write('\033[94m') + elif color == "reset": + sys.stdout.write('\033[0m') def print_error(msg): - color("red") - print ("ERROR: " + msg) - color("reset") + color("red") + print ("ERROR: " + msg) + color("reset") def print_green(msg): - color("green") - print(msg) - color("reset") + color("green") + print(msg) + color("reset") def print_blue(msg): - color("blue") - print(msg) - color("reset") + color("blue") + print(msg) + color("reset") def print_yellow(msg): - color("yellow") - print(msg) - color("reset") + color("yellow") + print(msg) + color("reset") - + def copy_important_files(source_dir,destination_dir): - - originalDir = os.getcwd() - importantFiles = ["mod.cpp", - "README.md", - "AUTHORS.txt", - "LICENSE", - "logo_ace3_ca.paa" - ] - - print_yellow ("source_dir: " + source_dir) - print_yellow("destination_dir: " + destination_dir) - - #copy importantFiles - try: - print_blue("\nSearching for important files in " + source_dir) - for file in importantFiles: - print_green("Copying file => " + os.path.join(source_dir,file)) - shutil.copyfile(os.path.join(source_dir,file),os.path.join(destination_dir,file)) - except: - print_error("COPYING IMPORTANT FILES.") - raise - - #copy all extension dlls - try: - os.chdir(os.path.join(source_dir)) - print_blue("\nSearching for DLLs in " + os.getcwd()) - filenames = glob.glob("*.dll") - - if not filenames: - print ("Empty SET") - - for dll in filenames: - print_green("Copying dll => " + os.path.join(source_dir,dll)) - if os.path.isfile(dll): - shutil.copyfile(os.path.join(source_dir,dll),os.path.join(destination_dir,dll)) - except: - print_error("COPYING DLL FILES.") - raise - finally: - os.chdir(originalDir) + + originalDir = os.getcwd() + importantFiles = ["mod.cpp", + "README.md", + "AUTHORS.txt", + "LICENSE", + "logo_ace3_ca.paa" + ] + + print_yellow ("source_dir: " + source_dir) + print_yellow("destination_dir: " + destination_dir) + + #copy importantFiles + try: + print_blue("\nSearching for important files in " + source_dir) + for file in importantFiles: + print_green("Copying file => " + os.path.join(source_dir,file)) + shutil.copyfile(os.path.join(source_dir,file),os.path.join(destination_dir,file)) + except: + print_error("COPYING IMPORTANT FILES.") + raise + + #copy all extension dlls + try: + os.chdir(os.path.join(source_dir)) + print_blue("\nSearching for DLLs in " + os.getcwd()) + filenames = glob.glob("*.dll") + + if not filenames: + print ("Empty SET") + + for dll in filenames: + print_green("Copying dll => " + os.path.join(source_dir,dll)) + if os.path.isfile(dll): + shutil.copyfile(os.path.join(source_dir,dll),os.path.join(destination_dir,dll)) + except: + print_error("COPYING DLL FILES.") + raise + finally: + os.chdir(originalDir) def copy_optionals_for_building(mod,pbos): - src_directories = os.listdir(optionals_root) - current_dir = os.getcwd() - - print("") - try: - - #special server.pbo processing - files = glob.glob(os.path.join(release_dir, "@ace","optionals","*.pbo")) - for file in files: - file_name = os.path.basename(file) - print ("Adding the following file: " + file_name) - pbos.append(file_name) - pbo_path = os.path.join(release_dir, "@ace","optionals",file_name) - if (os.path.isfile(pbo_path)): - print("Moving " + pbo_path + " for processing.") - shutil.move(pbo_path, os.path.join(release_dir,"@ace","addons",file_name)) + src_directories = os.listdir(optionals_root) + current_dir = os.getcwd() + + print("") + try: + + #special server.pbo processing + files = glob.glob(os.path.join(release_dir, "@ace","optionals","*.pbo")) + for file in files: + file_name = os.path.basename(file) + print ("Adding the following file: " + file_name) + pbos.append(file_name) + pbo_path = os.path.join(release_dir, "@ace","optionals",file_name) + if (os.path.isfile(pbo_path)): + print("Moving " + pbo_path + " for processing.") + shutil.move(pbo_path, os.path.join(release_dir,"@ace","addons",file_name)) - except: - print_error("Error in moving") - raise - finally: - os.chdir(current_dir) + except: + print_error("Error in moving") + raise + finally: + os.chdir(current_dir) - print("") - try: - for dir_name in src_directories: - mod.append(dir_name) - if (dir_name == "userconfig"): - destination = os.path.join(work_drive,dir_name) - else: - destination = os.path.join(module_root,dir_name) + print("") + try: + for dir_name in src_directories: + mod.append(dir_name) + if (dir_name == "userconfig"): + destination = os.path.join(work_drive,dir_name) + else: + destination = os.path.join(module_root,dir_name) - print("Temporarily copying " + os.path.join(optionals_root,dir_name) + " => " + destination + " for building.") - shutil.rmtree(destination, True) - shutil.copytree(os.path.join(optionals_root,dir_name), destination) - except: - print_error("Copy Optionals Failed") - raise - finally: - os.chdir(current_dir) - + print("Temporarily copying " + os.path.join(optionals_root,dir_name) + " => " + destination + " for building.") + shutil.rmtree(destination, True) + shutil.copytree(os.path.join(optionals_root,dir_name), destination) + except: + print_error("Copy Optionals Failed") + raise + finally: + os.chdir(current_dir) + def cleanup_optionals(mod,pbos): - print("") - try: - for dir_name in mod: - if (dir_name == "userconfig"): - destination = os.path.join(work_drive,dir_name) - else: - destination = os.path.join(module_root,dir_name) - - print("Cleaning " + destination) - - try: - file_name = "ace_{}.pbo".format(dir_name) - src_file_path = os.path.join(release_dir, "@ace","addons",file_name) - dst_file_path = os.path.join(release_dir, "@ace","optionals",file_name) - if (os.path.isfile(src_file_path)): - #print("Preserving " + file_name) - os.renames(src_file_path,dst_file_path) - except FileExistsError: - print_error(file_name + " already exists") - continue - shutil.rmtree(destination) - - except: - print_error("Cleaning Optionals Failed") - raise + print("") + try: + for dir_name in mod: + if (dir_name == "userconfig"): + destination = os.path.join(work_drive,dir_name) + else: + destination = os.path.join(module_root,dir_name) + + print("Cleaning " + destination) + + try: + file_name = "ace_{}.pbo".format(dir_name) + src_file_path = os.path.join(release_dir, "@ace","addons",file_name) + dst_file_path = os.path.join(release_dir, "@ace","optionals",file_name) + if (os.path.isfile(src_file_path)): + #print("Preserving " + file_name) + os.renames(src_file_path,dst_file_path) + except FileExistsError: + print_error(file_name + " already exists") + continue + shutil.rmtree(destination) + + except: + print_error("Cleaning Optionals Failed") + raise ############################################################################### def main(argv): - """Build an Arma addon suite in a directory from rules in a make.cfg file.""" - print_blue(("\nmake.py for Arma, modified for Advanced Combat Environment v" + __version__)) + """Build an Arma addon suite in a directory from rules in a make.cfg file.""" + print_blue(("\nmake.py for Arma, modified for Advanced Combat Environment v" + __version__)) - if sys.platform != "win32": - print_error("Non-Windows platform (Cygwin?). Please re-run from cmd.") - sys.exit(1) + if sys.platform != "win32": + print_error("Non-Windows platform (Cygwin?). Please re-run from cmd.") + sys.exit(1) - reg = winreg.ConnectRegistry(None, winreg.HKEY_CURRENT_USER) - try: - k = winreg.OpenKey(reg, r"Software\bohemia interactive\arma 3 tools") - arma3tools_path = winreg.QueryValueEx(k, "path")[0] - winreg.CloseKey(k) - except: - raise Exception("BadTools","Arma 3 Tools are not installed correctly or the P: drive needs to be created.") + reg = winreg.ConnectRegistry(None, winreg.HKEY_CURRENT_USER) + try: + k = winreg.OpenKey(reg, r"Software\bohemia interactive\arma 3 tools") + arma3tools_path = winreg.QueryValueEx(k, "path")[0] + winreg.CloseKey(k) + except: + raise Exception("BadTools","Arma 3 Tools are not installed correctly or the P: drive needs to be created.") - # Default behaviors - test = False # Copy to Arma 3 directory? - arg_modules = False # Only build modules on command line? - make_release = False # Make zip file from the release? - release_version = 0 # Version of release - use_pboproject = True # Default to pboProject build tool - make_target = "DEFAULT" # Which section in make.cfg to use for the build - new_key = False # Make a new key and use it to sign? - quiet = False # Suppress output from build tool? + # Default behaviors + test = False # Copy to Arma 3 directory? + arg_modules = False # Only build modules on command line? + make_release = False # Make zip file from the release? + release_version = 0 # Version of release + use_pboproject = True # Default to pboProject build tool + make_target = "DEFAULT" # Which section in make.cfg to use for the build + new_key = False # Make a new key and use it to sign? + quiet = False # Suppress output from build tool? - # Parse arguments - if "help" in argv or "-h" in argv or "--help" in argv: - print (""" + # Parse arguments + if "help" in argv or "-h" in argv or "--help" in argv: + print (""" make.py [help] [test] [force] [key <name>] [target <name>] [release <version>] [module name] [module name] [...] @@ -463,539 +465,539 @@ If a file called $NOBIN$ is found in the module directory, that module will not See the make.cfg file for additional build options. """) - sys.exit(0) - - if "force" in argv: - argv.remove("force") - force_build = True - else: - force_build = False - - if "test" in argv: - test = True - argv.remove("test") - - if "release" in argv: - make_release = True - release_version = argv[argv.index("release") + 1] - argv.remove(release_version) - argv.remove("release") - - if "target" in argv: - make_target = argv[argv.index("target") + 1] - argv.remove("target") - argv.remove(make_target) - force_build = True - - if "key" in argv: - new_key = True - key_name = argv[argv.index("key") + 1] - argv.remove("key") - argv.remove(key_name) - - if "quiet" in argv: - quiet = True - argv.remove("quiet") - - if "checkexternal" in argv: - argv.remove("checkexternal") - check_external = True - else: - check_external = False - - # Get the directory the make script is in. - make_root = os.path.dirname(os.path.realpath(__file__)) - make_root_parent = os.path.abspath(os.path.join(os.getcwd(), os.pardir)) - os.chdir(make_root) - - # Get latest commit ID - try: - gitpath = os.path.join(os.path.dirname(make_root), ".git") - assert os.path.exists(gitpath) - - commit_id = subprocess.check_output(["git", "rev-parse", "HEAD"]) - commit_id = str(commit_id, "utf-8")[:8] - except: - print_error("FAILED TO DETERMINE COMMIT ID.") - commit_id = "NOGIT" - - cfg = configparser.ConfigParser(); - try: - global work_drive - global module_root - global release_dir - global module_root_parent - global optionals_root - - cfg.read(os.path.join(make_root, "make.cfg")) - - # Project name (with @ symbol) - project = cfg.get(make_target, "project", fallback="@"+os.path.basename(os.getcwd())) - - # Private key path - key = cfg.get(make_target, "key", fallback=None) - - # Project prefix (folder path) - prefix = cfg.get(make_target, "prefix", fallback="") - - # Should we autodetect modules on a complete build? - module_autodetect = cfg.getboolean(make_target, "module_autodetect", fallback=True) - - # Manual list of modules to build for a complete build - modules = cfg.get(make_target, "modules", fallback=None) - # Parse it out - if modules: - modules = [x.strip() for x in modules.split(',')] - else: - modules = [] - - # List of directories to ignore when detecting - ignore = [x.strip() for x in cfg.get(make_target, "ignore", fallback="release").split(',')] - - # BI Tools work drive on Windows - work_drive = cfg.get(make_target, "work_drive", fallback="P:\\") - - # Which build tool should we use? - build_tool = cfg.get(make_target, "build_tool", fallback="addonbuilder").lower() - - # Release/build directory, relative to script dir - release_dir = cfg.get(make_target, "release_dir", fallback="release") - - # Project PBO file prefix (files are renamed to prefix_name.pbo) - pbo_name_prefix = cfg.get(make_target, "pbo_name_prefix", fallback=None) - - # Project module Root - module_root_parent = os.path.abspath(os.path.join(os.path.join(work_drive, prefix), os.pardir)) - module_root = cfg.get(make_target, "module_root", fallback=os.path.join(make_root_parent, "addons")) - optionals_root = os.path.join(module_root_parent, "optionals") - print_green ("module_root: " + module_root) - - if (os.path.isdir(module_root)): - os.chdir(module_root) - else: - print_error ("Directory " + module_root + " does not exist.") - sys.exit() - - if (os.path.isdir(optionals_root)): - print_green ("optionals_root: " + optionals_root) - else: - print_error ("Directory " + optionals_root + " does not exist.") - sys.exit() - - print_green ("release_dir: " + release_dir) - - except: - raise - print_error("Could not parse make.cfg.") - sys.exit(1) - - # See if we have been given specific modules to build from command line. - if len(argv) > 1 and not make_release: - arg_modules = True - modules = argv[1:] - - # Find the tools we need. - try: - tools = find_bi_tools(work_drive) - addonbuilder = tools[0] - dssignfile = tools[1] - dscreatekey = tools[2] - cfgconvert = tools[3] - - except: - print_error("Arma 3 Tools are not installed correctly or the P: drive has not been created.") - sys.exit(1) - - if build_tool == "pboproject": - try: - depbo_tools = find_depbo_tools("HKLM") - if depbo_tools == -1: - depbo_tools = find_depbo_tools("HKCU") - pboproject = depbo_tools[0] - rapifyTool = depbo_tools[1] - makepboTool = depbo_tools[2] - except: - raise - print_error("Could not find dePBO tools. Download the needed tools from: https://dev.withsix.com/projects/mikero-pbodll/files") - sys.exit(1) - - # Try to open and deserialize build cache file. - try: - cache = {} - with open(os.path.join(make_root, "make.cache"), 'r') as f: - cache_raw = f.read() - - cache = json.loads(cache_raw) - - except: - print ("No cache found.") - cache = {} - - #Temporarily copy optionals_root for building. They will be removed later. - optionals_modules = [] - optional_files = [] - copy_optionals_for_building(optionals_modules,optional_files) - - # Get list of subdirs in make root. - dirs = next(os.walk(module_root))[1] - - # Autodetect what directories to build. - if module_autodetect and not arg_modules: - modules = [] - for path in dirs: - # Any dir that has a config.cpp in its root is an addon to build. - config_path = os.path.join(path, 'config.cpp') - if os.path.isfile(config_path) and not path in ignore: - modules.append(path) - - # Make the key specified from command line if necessary. - if new_key: - if not os.path.isfile(os.path.join(module_root, key_name + ".biprivatekey")): - print_green("\nRequested key does not exist.") - ret = subprocess.call([dscreatekey, key_name]) # Created in make_root - if ret == 0: - print_blue("Created: " + os.path.join(module_root, key_name + ".biprivatekey")) - else: - print_error("Failed to create key!") - - try: - print_blue("Copying public key to release directory.") - - try: - os.makedirs(os.path.join(module_root, release_dir, "Keys")) - except: - pass - - shutil.copyfile(os.path.join(module_root, key_name + ".bikey"), os.path.join(module_root, release_dir, "Keys", key_name + ".bikey")) - - except: - raise - print_error("Could not copy key to release directory.") - - else: - print_green("\nNOTE: Using key " + os.path.join(module_root, key_name + ".biprivatekey")) - - key = os.path.join(module_root, key_name + ".biprivatekey") - - - # For each module, prep files and then build. - for module in modules: - print_green("\nMaking " + module + "-"*max(1, (60-len(module)))) - missing = False - - # Cache check - if module in cache: - old_sha = cache[module] - else: - old_sha = "" - - #We always build ACE_common so we can properly show the correct version stamp in the RPT file. - if module == "common": - old_sha = "" - - # Hash the module - new_sha = get_directory_hash(os.path.join(module_root, module)) - - # Is the pbo file missing? - missing = not os.path.isfile(os.path.join(release_dir, project, "addons", "ace_{}.pbo".format(module))) - if missing: - print("ace_{}.pbo".format(module) + " is missing. Building...") - - # Check if it needs rebuilt - # print ("Hash:", new_sha) - if old_sha == new_sha and not missing: - if not force_build: - print("Module has not changed.") - # Skip everything else - continue - - # Only do this if the project isn't stored directly on the work drive. - # Split the path at the drive name and see if they are on the same drive (usually P:) - if os.path.splitdrive(module_root)[0] != os.path.splitdrive(work_drive)[0]: - try: - # Remove old work drive version (ignore errors) - shutil.rmtree(os.path.join(work_drive, prefix, module), True) - - # Copy module to the work drive - shutil.copytree(module, os.path.join(work_drive, prefix, module)) - - except: - raise - print_error("ERROR: Could not copy module to work drive. Does the module exist?") - input("Press Enter to continue...") - print("Resuming build...") - continue - #else: - #print("WARNING: Module is stored on work drive (" + work_drive + ").") - - try: - # Remove the old pbo, key, and log - old = os.path.join(module_root, release_dir, project, "Addons", module) + "*" - files = glob.glob(old) - for f in files: - os.remove(f) - - if pbo_name_prefix: - old = os.path.join(module_root, release_dir, project, "Addons", pbo_name_prefix+module) + "*" - files = glob.glob(old) - for f in files: - os.remove(f) - except: - raise - print_error("ERROR: Could not copy module to work drive. Does the module exist?") - input("Press Enter to continue...") - print("Resuming build...") - continue - - # Build the module into a pbo - print_blue("Building: " + os.path.join(work_drive, prefix, module)) - print_blue("Destination: " + os.path.join(module_root, release_dir, project, "Addons")) - - # Make destination folder (if needed) - try: - os.makedirs(os.path.join(module_root, release_dir, project, "Addons")) - except: - pass - - # Run build tool - build_successful = False - if build_tool == "pboproject": - try: - #PABST: Convert config (run the macro'd config.cpp through CfgConvert twice to produce a de-macro'd cpp that pboProject can read without fucking up: - shutil.copyfile(os.path.join(work_drive, prefix, module, "config.cpp"), os.path.join(work_drive, prefix, module, "config.backup")) - - os.chdir("P:\\") - - cmd = [os.path.join(arma3tools_path, "CfgConvert", "CfgConvert.exe"), "-bin", "-dst", os.path.join(work_drive, prefix, module, "config.bin"), os.path.join(work_drive, prefix, module, "config.cpp")] - ret = subprocess.call(cmd) - if ret != 0: - print_error("CfgConvert -bin return code == " + str(ret) + ". Usually means there is a syntax error within the config.cpp file.") - os.remove(os.path.join(work_drive, prefix, module, "config.cpp")) - shutil.copyfile(os.path.join(work_drive, prefix, module, "config.backup"), os.path.join(work_drive, prefix, module, "config.cpp")) - - cmd = [os.path.join(arma3tools_path, "CfgConvert", "CfgConvert.exe"), "-txt", "-dst", os.path.join(work_drive, prefix, module, "config.cpp"), os.path.join(work_drive, prefix, module, "config.bin")] - ret = subprocess.call(cmd) - if ret != 0: - print_error("CfgConvert -txt return code == " + str(ret) + ". Usually means there is a syntax error within the config.cpp file.") - os.remove(os.path.join(work_drive, prefix, module, "config.cpp")) - shutil.copyfile(os.path.join(work_drive, prefix, module, "config.backup"), os.path.join(work_drive, prefix, module, "config.cpp")) - - - # Include build number - try: - configpath = os.path.join(work_drive, prefix, module, "config.cpp") - f = open(configpath, "r") - configtext = f.read() - f.close() - - if configtext: - patchestext = re.search(r"class CfgPatches\n\{(.*?)\n\}", configtext, re.DOTALL).group(1) - patchestext = re.sub(r'version(.*?)="(.*?)"', r'version\1="\2-{}"'.format(commit_id), patchestext) - configtext = re.sub(r"class CfgPatches\n\{(.*?)\n\}", "class CfgPatches\n{"+patchestext+"\n}", configtext, flags=re.DOTALL) - f = open(configpath, "w") - f.write(configtext) - f.close() - else: - os.remove(os.path.join(work_drive, prefix, module, "config.cpp")) - os.rename(os.path.join(work_drive, prefix, module, "config.backup"), os.path.join(work_drive, prefix, module, "config.cpp")) - except: - raise - print_error("Failed to include build number") - continue - - if os.path.isfile(os.path.join(work_drive, prefix, module, "$NOBIN$")): - print_green("$NOBIN$ Found. Proceeding with non-binarizing!") - cmd = [makepboTool, "-P","-A","-L","-N","-G", os.path.join(work_drive, prefix, module),os.path.join(module_root, release_dir, project,"Addons")] - - else: - if check_external: - cmd = [pboproject, "-P", os.path.join(work_drive, prefix, module), "+Engine=Arma3", "-S","+Noisy", "+X", "+Clean", "+Mod="+os.path.join(module_root, release_dir, project), "-Key"] - else: - cmd = [pboproject, "-P", os.path.join(work_drive, prefix, module), "+Engine=Arma3", "-S","+Noisy", "-X", "+Clean", "+Mod="+os.path.join(module_root, release_dir, project), "-Key"] - - color("grey") - if quiet: - devnull = open(os.devnull, 'w') - ret = subprocess.call(cmd, stdout=devnull) - devnull.close() - else: - ret = subprocess.call(cmd) - color("reset") - - if ret == 0: - print_green("pboProject return code == " + str(ret)) - # Prettyprefix rename the PBO if requested. - if pbo_name_prefix: - try: - os.rename(os.path.join(module_root, release_dir, project, "Addons", module+".pbo"), os.path.join(module_root, release_dir, project, "Addons", pbo_name_prefix+module+".pbo")) - except: - raise - print_error("Could not rename built PBO with prefix.") - # Sign result - if key: - print("Signing with " + key + ".") - if pbo_name_prefix: - ret = subprocess.call([dssignfile, key, os.path.join(module_root, release_dir, project, "Addons", pbo_name_prefix + module + ".pbo")]) - else: - ret = subprocess.call([dssignfile, key, os.path.join(module_root, release_dir, project, "Addons", module + ".pbo")]) - - if ret == 0: - build_successful = True - else: - build_successful = True - - if not build_successful: - print_error("pboProject return code == " + str(ret)) - print_error("Module not successfully built/signed.") - print ("Resuming build...") - continue - - #PABST: cleanup config BS (you could comment this out to see the "de-macroed" cpp - #print_green("\Pabst (restoring): " + os.path.join(work_drive, prefix, module, "config.cpp")) - os.remove(os.path.join(work_drive, prefix, module, "config.cpp")) - os.remove(os.path.join(work_drive, prefix, module, "config.bin")) - os.rename(os.path.join(work_drive, prefix, module, "config.backup"), os.path.join(work_drive, prefix, module, "config.cpp")) - - # Back to the root - os.chdir(module_root) - - except: - raise - print_error("Could not run Addon Builder.") - input("Press Enter to continue...") - print ("Resuming build...") - continue - - elif build_tool== "addonbuilder": - # Detect $NOBIN$ and do not binarize if found. - if os.path.isfile(os.path.join(work_drive, prefix, module, "$NOBIN$")): - do_binarize = False - print("$NOBIN$ file found in module, packing only.") - else: - do_binarize = True - try: - # Call AddonBuilder - os.chdir("P:\\") - - cmd = [addonbuilder, os.path.join(work_drive, prefix, module), os.path.join(make_root, release_dir, project, "Addons"), "-clear", "-project="+work_drive] - if not do_binarize: - cmd.append("-packonly") - - if quiet: - previousDirectory = os.getcwd() - os.chdir(arma3tools_path) - devnull = open(os.devnull, 'w') - ret = subprocess.call(cmd, stdout=devnull) - devnull.close() - os.chdir(previousDirectory) - else: - previousDirectory = os.getcwd() - os.chdir(arma3tools_path) - print_error("Current directory - " + os.getcwd()) - ret = subprocess.call(cmd) - os.chdir(previousDirectory) - print_error("Current directory - " + os.getcwd()) - color("reset") - print_green("completed") - # Prettyprefix rename the PBO if requested. - if pbo_name_prefix: - try: - os.rename(os.path.join(make_root, release_dir, project, "Addons", module+".pbo"), os.path.join(make_root, release_dir, project, "Addons", pbo_name_prefix+module+".pbo")) - except: - raise - print_error("Could not rename built PBO with prefix.") - - if ret == 0: - # Sign result - if key: - print("Signing with " + key + ".") - if pbo_name_prefix: - ret = subprocess.call([dssignfile, key, os.path.join(make_root, release_dir, project, "Addons", pbo_name_prefix + module + ".pbo")]) - else: - ret = subprocess.call([dssignfile, key, os.path.join(make_root, release_dir, project, "Addons", module + ".pbo")]) - - if ret == 0: - build_successful = True - else: - build_successful = True - - if not build_successful: - print_error("Module not successfully built.") - - # Back to the root - os.chdir(make_root) - - except: - raise - print_error("Could not run Addon Builder.") - input("Press Enter to continue...") - print ("Resuming build...") - continue - - else: - print_error("Unknown build_tool " + build_tool + "!") - - # Update the hash for a successfully built module - if build_successful: - cache[module] = new_sha - - # Done building all modules! - - # Write out the cache state - cache_out = json.dumps(cache) - with open(os.path.join(make_root, "make.cache"), 'w') as f: - f.write(cache_out) - - # Delete the pboproject temp files if building a release. - if make_release and build_tool == "pboproject": - try: - shutil.rmtree(os.path.join(module_root, release_dir, project, "temp"), True) - except: - print_error("ERROR: Could not delete pboProject temp files.") - - print_green("\nDone.") - - # Make release - if make_release: - print_blue("\nMaking release: " + project + "-" + release_version + ".zip") - - try: - # Delete all log files - for root, dirs, files in os.walk(os.path.join(module_root, release_dir, project, "Addons")): - for currentFile in files: - if currentFile.lower().endswith("log"): - os.remove(os.path.join(root, currentFile)) - - # Create a zip with the contents of release/ in it - shutil.make_archive(project + "-" + release_version, "zip", os.path.join(module_root, release_dir)) - except: - raise - print_error("Could not make release.") - - # Copy to Arma 3 folder for testing - if test: - print_blue("\nCopying to Arma 3.") - - if sys.platform == "win32": - reg = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE) - try: - k = winreg.OpenKey(reg, r"SOFTWARE\Wow6432Node\Bohemia Interactive\Arma 3") - a3_path = winreg.EnumValue(k, 1)[1] - winreg.CloseKey(k) - except: - print_error("Could not find Arma 3's directory in the registry.") - else: - a3_path = cygwin_a3path - - if os.path.exists(a3_path): - try: - shutil.rmtree(os.path.join(a3_path, project), True) - shutil.copytree(os.path.join(module_root, release_dir, project), os.path.join(a3_path, project)) - except: - print_error("Could not copy files. Is Arma 3 running?") - - copy_important_files(module_root_parent,os.path.join(release_dir, "@ace")) - cleanup_optionals(optionals_modules,optional_files) + sys.exit(0) + + if "force" in argv: + argv.remove("force") + force_build = True + else: + force_build = False + + if "test" in argv: + test = True + argv.remove("test") + + if "release" in argv: + make_release = True + release_version = argv[argv.index("release") + 1] + argv.remove(release_version) + argv.remove("release") + + if "target" in argv: + make_target = argv[argv.index("target") + 1] + argv.remove("target") + argv.remove(make_target) + force_build = True + + if "key" in argv: + new_key = True + key_name = argv[argv.index("key") + 1] + argv.remove("key") + argv.remove(key_name) + + if "quiet" in argv: + quiet = True + argv.remove("quiet") + + if "checkexternal" in argv: + argv.remove("checkexternal") + check_external = True + else: + check_external = False + + # Get the directory the make script is in. + make_root = os.path.dirname(os.path.realpath(__file__)) + make_root_parent = os.path.abspath(os.path.join(os.getcwd(), os.pardir)) + os.chdir(make_root) + + # Get latest commit ID + try: + gitpath = os.path.join(os.path.dirname(make_root), ".git") + assert os.path.exists(gitpath) + + commit_id = subprocess.check_output(["git", "rev-parse", "HEAD"]) + commit_id = str(commit_id, "utf-8")[:8] + except: + print_error("FAILED TO DETERMINE COMMIT ID.") + commit_id = "NOGIT" + + cfg = configparser.ConfigParser(); + try: + global work_drive + global module_root + global release_dir + global module_root_parent + global optionals_root + + cfg.read(os.path.join(make_root, "make.cfg")) + + # Project name (with @ symbol) + project = cfg.get(make_target, "project", fallback="@"+os.path.basename(os.getcwd())) + + # Private key path + key = cfg.get(make_target, "key", fallback=None) + + # Project prefix (folder path) + prefix = cfg.get(make_target, "prefix", fallback="") + + # Should we autodetect modules on a complete build? + module_autodetect = cfg.getboolean(make_target, "module_autodetect", fallback=True) + + # Manual list of modules to build for a complete build + modules = cfg.get(make_target, "modules", fallback=None) + # Parse it out + if modules: + modules = [x.strip() for x in modules.split(',')] + else: + modules = [] + + # List of directories to ignore when detecting + ignore = [x.strip() for x in cfg.get(make_target, "ignore", fallback="release").split(',')] + + # BI Tools work drive on Windows + work_drive = cfg.get(make_target, "work_drive", fallback="P:\\") + + # Which build tool should we use? + build_tool = cfg.get(make_target, "build_tool", fallback="addonbuilder").lower() + + # Release/build directory, relative to script dir + release_dir = cfg.get(make_target, "release_dir", fallback="release") + + # Project PBO file prefix (files are renamed to prefix_name.pbo) + pbo_name_prefix = cfg.get(make_target, "pbo_name_prefix", fallback=None) + + # Project module Root + module_root_parent = os.path.abspath(os.path.join(os.path.join(work_drive, prefix), os.pardir)) + module_root = cfg.get(make_target, "module_root", fallback=os.path.join(make_root_parent, "addons")) + optionals_root = os.path.join(module_root_parent, "optionals") + print_green ("module_root: " + module_root) + + if (os.path.isdir(module_root)): + os.chdir(module_root) + else: + print_error ("Directory " + module_root + " does not exist.") + sys.exit() + + if (os.path.isdir(optionals_root)): + print_green ("optionals_root: " + optionals_root) + else: + print_error ("Directory " + optionals_root + " does not exist.") + sys.exit() + + print_green ("release_dir: " + release_dir) + + except: + raise + print_error("Could not parse make.cfg.") + sys.exit(1) + + # See if we have been given specific modules to build from command line. + if len(argv) > 1 and not make_release: + arg_modules = True + modules = argv[1:] + + # Find the tools we need. + try: + tools = find_bi_tools(work_drive) + addonbuilder = tools[0] + dssignfile = tools[1] + dscreatekey = tools[2] + cfgconvert = tools[3] + + except: + print_error("Arma 3 Tools are not installed correctly or the P: drive has not been created.") + sys.exit(1) + + if build_tool == "pboproject": + try: + depbo_tools = find_depbo_tools("HKLM") + if depbo_tools == -1: + depbo_tools = find_depbo_tools("HKCU") + pboproject = depbo_tools[0] + rapifyTool = depbo_tools[1] + makepboTool = depbo_tools[2] + except: + raise + print_error("Could not find dePBO tools. Download the needed tools from: https://dev.withsix.com/projects/mikero-pbodll/files") + sys.exit(1) + + # Try to open and deserialize build cache file. + try: + cache = {} + with open(os.path.join(make_root, "make.cache"), 'r') as f: + cache_raw = f.read() + + cache = json.loads(cache_raw) + + except: + print ("No cache found.") + cache = {} + + #Temporarily copy optionals_root for building. They will be removed later. + optionals_modules = [] + optional_files = [] + copy_optionals_for_building(optionals_modules,optional_files) + + # Get list of subdirs in make root. + dirs = next(os.walk(module_root))[1] + + # Autodetect what directories to build. + if module_autodetect and not arg_modules: + modules = [] + for path in dirs: + # Any dir that has a config.cpp in its root is an addon to build. + config_path = os.path.join(path, 'config.cpp') + if os.path.isfile(config_path) and not path in ignore: + modules.append(path) + + # Make the key specified from command line if necessary. + if new_key: + if not os.path.isfile(os.path.join(module_root, key_name + ".biprivatekey")): + print_green("\nRequested key does not exist.") + ret = subprocess.call([dscreatekey, key_name]) # Created in make_root + if ret == 0: + print_blue("Created: " + os.path.join(module_root, key_name + ".biprivatekey")) + else: + print_error("Failed to create key!") + + try: + print_blue("Copying public key to release directory.") + + try: + os.makedirs(os.path.join(module_root, release_dir, "Keys")) + except: + pass + + shutil.copyfile(os.path.join(module_root, key_name + ".bikey"), os.path.join(module_root, release_dir, "Keys", key_name + ".bikey")) + + except: + raise + print_error("Could not copy key to release directory.") + + else: + print_green("\nNOTE: Using key " + os.path.join(module_root, key_name + ".biprivatekey")) + + key = os.path.join(module_root, key_name + ".biprivatekey") + + + # For each module, prep files and then build. + for module in modules: + print_green("\nMaking " + module + "-"*max(1, (60-len(module)))) + missing = False + + # Cache check + if module in cache: + old_sha = cache[module] + else: + old_sha = "" + + #We always build ACE_common so we can properly show the correct version stamp in the RPT file. + if module == "common": + old_sha = "" + + # Hash the module + new_sha = get_directory_hash(os.path.join(module_root, module)) + + # Is the pbo file missing? + missing = not os.path.isfile(os.path.join(release_dir, project, "addons", "ace_{}.pbo".format(module))) + if missing: + print("ace_{}.pbo".format(module) + " is missing. Building...") + + # Check if it needs rebuilt + # print ("Hash:", new_sha) + if old_sha == new_sha and not missing: + if not force_build: + print("Module has not changed.") + # Skip everything else + continue + + # Only do this if the project isn't stored directly on the work drive. + # Split the path at the drive name and see if they are on the same drive (usually P:) + if os.path.splitdrive(module_root)[0] != os.path.splitdrive(work_drive)[0]: + try: + # Remove old work drive version (ignore errors) + shutil.rmtree(os.path.join(work_drive, prefix, module), True) + + # Copy module to the work drive + shutil.copytree(module, os.path.join(work_drive, prefix, module)) + + except: + raise + print_error("ERROR: Could not copy module to work drive. Does the module exist?") + input("Press Enter to continue...") + print("Resuming build...") + continue + #else: + #print("WARNING: Module is stored on work drive (" + work_drive + ").") + + try: + # Remove the old pbo, key, and log + old = os.path.join(module_root, release_dir, project, "Addons", module) + "*" + files = glob.glob(old) + for f in files: + os.remove(f) + + if pbo_name_prefix: + old = os.path.join(module_root, release_dir, project, "Addons", pbo_name_prefix+module) + "*" + files = glob.glob(old) + for f in files: + os.remove(f) + except: + raise + print_error("ERROR: Could not copy module to work drive. Does the module exist?") + input("Press Enter to continue...") + print("Resuming build...") + continue + + # Build the module into a pbo + print_blue("Building: " + os.path.join(work_drive, prefix, module)) + print_blue("Destination: " + os.path.join(module_root, release_dir, project, "Addons")) + + # Make destination folder (if needed) + try: + os.makedirs(os.path.join(module_root, release_dir, project, "Addons")) + except: + pass + + # Run build tool + build_successful = False + if build_tool == "pboproject": + try: + #PABST: Convert config (run the macro'd config.cpp through CfgConvert twice to produce a de-macro'd cpp that pboProject can read without fucking up: + shutil.copyfile(os.path.join(work_drive, prefix, module, "config.cpp"), os.path.join(work_drive, prefix, module, "config.backup")) + + os.chdir("P:\\") + + cmd = [os.path.join(arma3tools_path, "CfgConvert", "CfgConvert.exe"), "-bin", "-dst", os.path.join(work_drive, prefix, module, "config.bin"), os.path.join(work_drive, prefix, module, "config.cpp")] + ret = subprocess.call(cmd) + if ret != 0: + print_error("CfgConvert -bin return code == " + str(ret) + ". Usually means there is a syntax error within the config.cpp file.") + os.remove(os.path.join(work_drive, prefix, module, "config.cpp")) + shutil.copyfile(os.path.join(work_drive, prefix, module, "config.backup"), os.path.join(work_drive, prefix, module, "config.cpp")) + + cmd = [os.path.join(arma3tools_path, "CfgConvert", "CfgConvert.exe"), "-txt", "-dst", os.path.join(work_drive, prefix, module, "config.cpp"), os.path.join(work_drive, prefix, module, "config.bin")] + ret = subprocess.call(cmd) + if ret != 0: + print_error("CfgConvert -txt return code == " + str(ret) + ". Usually means there is a syntax error within the config.cpp file.") + os.remove(os.path.join(work_drive, prefix, module, "config.cpp")) + shutil.copyfile(os.path.join(work_drive, prefix, module, "config.backup"), os.path.join(work_drive, prefix, module, "config.cpp")) + + + # Include build number + try: + configpath = os.path.join(work_drive, prefix, module, "config.cpp") + f = open(configpath, "r") + configtext = f.read() + f.close() + + if configtext: + patchestext = re.search(r"class CfgPatches\n\{(.*?)\n\}", configtext, re.DOTALL).group(1) + patchestext = re.sub(r'version(.*?)="(.*?)"', r'version\1="\2-{}"'.format(commit_id), patchestext) + configtext = re.sub(r"class CfgPatches\n\{(.*?)\n\}", "class CfgPatches\n{"+patchestext+"\n}", configtext, flags=re.DOTALL) + f = open(configpath, "w") + f.write(configtext) + f.close() + else: + os.remove(os.path.join(work_drive, prefix, module, "config.cpp")) + os.rename(os.path.join(work_drive, prefix, module, "config.backup"), os.path.join(work_drive, prefix, module, "config.cpp")) + except: + raise + print_error("Failed to include build number") + continue + + if os.path.isfile(os.path.join(work_drive, prefix, module, "$NOBIN$")): + print_green("$NOBIN$ Found. Proceeding with non-binarizing!") + cmd = [makepboTool, "-P","-A","-L","-N","-G", os.path.join(work_drive, prefix, module),os.path.join(module_root, release_dir, project,"Addons")] + + else: + if check_external: + cmd = [pboproject, "-P", os.path.join(work_drive, prefix, module), "+Engine=Arma3", "-S","+Noisy", "+X", "+Clean", "+Mod="+os.path.join(module_root, release_dir, project), "-Key"] + else: + cmd = [pboproject, "-P", os.path.join(work_drive, prefix, module), "+Engine=Arma3", "-S","+Noisy", "-X", "+Clean", "+Mod="+os.path.join(module_root, release_dir, project), "-Key"] + + color("grey") + if quiet: + devnull = open(os.devnull, 'w') + ret = subprocess.call(cmd, stdout=devnull) + devnull.close() + else: + ret = subprocess.call(cmd) + color("reset") + + if ret == 0: + print_green("pboProject return code == " + str(ret)) + # Prettyprefix rename the PBO if requested. + if pbo_name_prefix: + try: + os.rename(os.path.join(module_root, release_dir, project, "Addons", module+".pbo"), os.path.join(module_root, release_dir, project, "Addons", pbo_name_prefix+module+".pbo")) + except: + raise + print_error("Could not rename built PBO with prefix.") + # Sign result + if key: + print("Signing with " + key + ".") + if pbo_name_prefix: + ret = subprocess.call([dssignfile, key, os.path.join(module_root, release_dir, project, "Addons", pbo_name_prefix + module + ".pbo")]) + else: + ret = subprocess.call([dssignfile, key, os.path.join(module_root, release_dir, project, "Addons", module + ".pbo")]) + + if ret == 0: + build_successful = True + else: + build_successful = True + + if not build_successful: + print_error("pboProject return code == " + str(ret)) + print_error("Module not successfully built/signed.") + print ("Resuming build...") + continue + + #PABST: cleanup config BS (you could comment this out to see the "de-macroed" cpp + #print_green("\Pabst (restoring): " + os.path.join(work_drive, prefix, module, "config.cpp")) + os.remove(os.path.join(work_drive, prefix, module, "config.cpp")) + os.remove(os.path.join(work_drive, prefix, module, "config.bin")) + os.rename(os.path.join(work_drive, prefix, module, "config.backup"), os.path.join(work_drive, prefix, module, "config.cpp")) + + # Back to the root + os.chdir(module_root) + + except: + raise + print_error("Could not run Addon Builder.") + input("Press Enter to continue...") + print ("Resuming build...") + continue + + elif build_tool== "addonbuilder": + # Detect $NOBIN$ and do not binarize if found. + if os.path.isfile(os.path.join(work_drive, prefix, module, "$NOBIN$")): + do_binarize = False + print("$NOBIN$ file found in module, packing only.") + else: + do_binarize = True + try: + # Call AddonBuilder + os.chdir("P:\\") + + cmd = [addonbuilder, os.path.join(work_drive, prefix, module), os.path.join(make_root, release_dir, project, "Addons"), "-clear", "-project="+work_drive] + if not do_binarize: + cmd.append("-packonly") + + if quiet: + previousDirectory = os.getcwd() + os.chdir(arma3tools_path) + devnull = open(os.devnull, 'w') + ret = subprocess.call(cmd, stdout=devnull) + devnull.close() + os.chdir(previousDirectory) + else: + previousDirectory = os.getcwd() + os.chdir(arma3tools_path) + print_error("Current directory - " + os.getcwd()) + ret = subprocess.call(cmd) + os.chdir(previousDirectory) + print_error("Current directory - " + os.getcwd()) + color("reset") + print_green("completed") + # Prettyprefix rename the PBO if requested. + if pbo_name_prefix: + try: + os.rename(os.path.join(make_root, release_dir, project, "Addons", module+".pbo"), os.path.join(make_root, release_dir, project, "Addons", pbo_name_prefix+module+".pbo")) + except: + raise + print_error("Could not rename built PBO with prefix.") + + if ret == 0: + # Sign result + if key: + print("Signing with " + key + ".") + if pbo_name_prefix: + ret = subprocess.call([dssignfile, key, os.path.join(make_root, release_dir, project, "Addons", pbo_name_prefix + module + ".pbo")]) + else: + ret = subprocess.call([dssignfile, key, os.path.join(make_root, release_dir, project, "Addons", module + ".pbo")]) + + if ret == 0: + build_successful = True + else: + build_successful = True + + if not build_successful: + print_error("Module not successfully built.") + + # Back to the root + os.chdir(make_root) + + except: + raise + print_error("Could not run Addon Builder.") + input("Press Enter to continue...") + print ("Resuming build...") + continue + + else: + print_error("Unknown build_tool " + build_tool + "!") + + # Update the hash for a successfully built module + if build_successful: + cache[module] = new_sha + + # Done building all modules! + + # Write out the cache state + cache_out = json.dumps(cache) + with open(os.path.join(make_root, "make.cache"), 'w') as f: + f.write(cache_out) + + # Delete the pboproject temp files if building a release. + if make_release and build_tool == "pboproject": + try: + shutil.rmtree(os.path.join(module_root, release_dir, project, "temp"), True) + except: + print_error("ERROR: Could not delete pboProject temp files.") + + print_green("\nDone.") + + # Make release + if make_release: + print_blue("\nMaking release: " + project + "-" + release_version + ".zip") + + try: + # Delete all log files + for root, dirs, files in os.walk(os.path.join(module_root, release_dir, project, "Addons")): + for currentFile in files: + if currentFile.lower().endswith("log"): + os.remove(os.path.join(root, currentFile)) + + # Create a zip with the contents of release/ in it + shutil.make_archive(project + "-" + release_version, "zip", os.path.join(module_root, release_dir)) + except: + raise + print_error("Could not make release.") + + # Copy to Arma 3 folder for testing + if test: + print_blue("\nCopying to Arma 3.") + + if sys.platform == "win32": + reg = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE) + try: + k = winreg.OpenKey(reg, r"SOFTWARE\Wow6432Node\Bohemia Interactive\Arma 3") + a3_path = winreg.EnumValue(k, 1)[1] + winreg.CloseKey(k) + except: + print_error("Could not find Arma 3's directory in the registry.") + else: + a3_path = cygwin_a3path + + if os.path.exists(a3_path): + try: + shutil.rmtree(os.path.join(a3_path, project), True) + shutil.copytree(os.path.join(module_root, release_dir, project), os.path.join(a3_path, project)) + except: + print_error("Could not copy files. Is Arma 3 running?") + + copy_important_files(module_root_parent,os.path.join(release_dir, "@ace")) + cleanup_optionals(optionals_modules,optional_files) if __name__ == "__main__": - main(sys.argv) + main(sys.argv) input("Press Enter to continue...") From 8a55c282e17eba4ae63957773597f3634ec335ee Mon Sep 17 00:00:00 2001 From: bux578 <github@jonathandavid.de> Date: Tue, 21 Apr 2015 13:27:45 +0200 Subject: [PATCH 252/257] add repair module icon --- extras/assets/icons/Icons_Modules.psd | Bin 2356619 -> 2326533 bytes .../png/Icon_Module/Icon_Module_Repair_ca.png | Bin 0 -> 1621 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 extras/assets/icons/png/Icon_Module/Icon_Module_Repair_ca.png diff --git a/extras/assets/icons/Icons_Modules.psd b/extras/assets/icons/Icons_Modules.psd index 9dcfa6a38b961c88def30c9f968c6a33349eb68f..968664452112dd74a054a33c3115fa92130ef8a2 100644 GIT binary patch delta 23791 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 P-+t>5QIhgGTVDSQdR}wK delta 46144 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 diff --git a/extras/assets/icons/png/Icon_Module/Icon_Module_Repair_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_Repair_ca.png new file mode 100644 index 0000000000000000000000000000000000000000..381c3d1c41147cdf234cb82a7490dc2afd54a567 GIT binary patch literal 1621 zcmbVMdrT8|96ySqghfD+38;7+5+9MaSFW$K1xv5B4Hix5pgx$K?X{fH-q9YkWiwU~ z@ih~N4}37lVkRhIu!(4hj-m0f1tGc_6lL`>aT%KiG%C)pD_FNbjDPHMcfZGdKA-R7 z_x;}XmD$UtMkGW405Daj#SHAYH1LFnvG3z#$sjw#Gino)Ls=O&?j!)Eg<4O5Iy-J7 z3<PfRmRup^01#>=jV8vVUyhn7I}Z<Fcpf{=vH?Jz;h}MJ5y61#2^;B9K#x1Whd|Pz zfbv9ofu2?og`~FJN#vAg8_nfKW|;-bNC)K}lohZO3=Vqi#SRzhQ9u*AC_4{q^C55o z!W1c>NvBNum7t1p5}=5emTDHjFen!DU_>Mq!;3+o02cBE>@7}(5mY2bg%a@11+mtg z7AtDNG;eIND+N@@Ff_{NyWMV{JB>#<ZG2cJlLa({!c-QK>hd}m+>`2XB?lES!ew@n zG(%DjFrbL9r%D+G#Ckdzf}Pgu-wHciZxY3(jPJo|KFkyF?e;)i6KEG>ApUjZooJWQ zOA~wp;i5{NX7)U+$w4xkyZ0Lk09kL)6;6^p6ucOt%%yh1!RRmr#D3vfNDC^KsH7r^ zM5&R&Vl@K8(o9ULR;H;XG6^h{A(EiRJGnv$BE~R*S_;cxSdAzVM4Aa_YBW-fNP;K@ zL9Wi>VsM9<2-+nBb|<(h&3n11%1Pi1<up=Maj*hb7E%o5Dx_#ol_TQ8U>@nPP;OV? zcqXI82q#%aSTs(`4o>73CEsCRgUOTv1i@gLS{jI3rWU}eG_hKPiC_d4vvE&yE&nHH zeAXF$pg8_hEWs_d0t3^xrOz(jHV@%oJI2Yj#vl1NYyiNi(qT%Y=hpC{-mDpT+$CGq z`R=1~BUT-ms}0}NuvcrE0}ao7x>H{I`?WKw@y!dqn%^eehiVUmf3a;xg?trOG3RNY zI%xz-gic+nOAqbES6SV*I`^f6-g<8O@bHq+t5;vu4S5G`gEx2Wlvz`Ap4|C-)Y~E5 ze>kF`6A&$&wc_GlK)K?9#@m*_S>$^N+)rASQ`LVXx-VMWhcqU(ZZGvcOY-LqoGnfG zd3FP*5g=lAzKn&R0kKOz(3+AS9OpIyi+sPxz?e3_Y@j}D^eoS|Cj7y@IL_`K=+WW^ z&V_-pZr;rneOBZG8`qBxZ_e)L{?rQ8`_C31hA9Q8VY+M`C!b|jHvPJ*hC91zS>M`+ zr`u0%?W%(+$5UFyr*CbD{FaRI#~pc2J`cMSwa(vhlDPgT<XFR%V;iHtw%3MrZoD=4 zLp8F$`(<vF#NXU|&XzLv=Yh}KBED<=a$Zz_gq@BW>?+)Ie{})1hxVo<I%k#5Z;Cw4 zsd;jJs<lWEGUVqhj~$*{ZO2;{?wFZ;?6=+Pw#3YmU&=T*-Z9kvx+?1l+9LBOtlgR` zoj$U*J-wF`igT&ezBz`T_RIN?n_9;!nqv{Jv~0@QJ><h9TRKO)bm;53=R<WrcKDB5 z#xh@p@sFmPL?w4|*V5$MGu+K5S|6{et;An^;@9QVvm=#DnlI<qSI5_sB;@)W@qgcq z81sz2s=eJaH)Z$el-Ku-FMB@jk2Xa~UwE5_6nW!ut@IUin#mMZ=o_LhesjUM@a~Dz zpU$h?VE~rpI{wNU898;JU|M2#O)dXSJbz31(Q}&)J%6!bAFw?w|D(JRBM{rQ;d+LS g3~vO=1~!F+0jq1GA6{&!ofr7g>(tp;OJ+gEKe@hM1ONa4 literal 0 HcmV?d00001 From 483319386001ebdfbf6fe6346b5464c178d315e5 Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Tue, 21 Apr 2015 15:01:23 +0200 Subject: [PATCH 253/257] Added a new solution setup menu --- addons/atragmx/RscTitles.hpp | 91 ++++++++++++++++++- addons/atragmx/XEH_preInit.sqf | 3 + .../atragmx/functions/fnc_create_dialog.sqf | 1 + .../functions/fnc_cycle_scope_unit.sqf | 1 + addons/atragmx/functions/fnc_init.sqf | 3 + .../functions/fnc_show_solution_setup.sqf | 20 ++++ .../functions/fnc_toggle_solution_setup.sqf | 38 ++++++++ .../functions/fnc_update_range_card.sqf | 17 ++-- .../atragmx/functions/fnc_update_result.sqf | 25 +++-- .../functions/fnc_update_solution_setup.sqf | 31 +++++++ .../functions/fnc_update_target_selection.sqf | 5 +- 11 files changed, 214 insertions(+), 21 deletions(-) create mode 100644 addons/atragmx/functions/fnc_show_solution_setup.sqf create mode 100644 addons/atragmx/functions/fnc_toggle_solution_setup.sqf create mode 100644 addons/atragmx/functions/fnc_update_solution_setup.sqf diff --git a/addons/atragmx/RscTitles.hpp b/addons/atragmx/RscTitles.hpp index 5fd3339f28..2194b2b27a 100644 --- a/addons/atragmx/RscTitles.hpp +++ b/addons/atragmx/RscTitles.hpp @@ -608,7 +608,7 @@ class ATragMX_Display { w=0.03; x=0.550*safezoneW+safezoneX+0.27; text="4"; - action=""; + action=QUOTE(call FUNC(toggle_solution_setup)); }; class TEXT_CALCULATE: TEXT_SCOPE_UNIT { idc=3000; @@ -1368,5 +1368,94 @@ class ATragMX_Display { class TEXT_TARGET_DATA_NEXT: TEXT_TARGET_SPEED_ASSIST_NEXT { idc=14011; }; + + class TEXT_SOLUTION_SETUP_SHOW_RESULT_IN: TEXT_GUN_AMMO_DATA_BORE_HEIGHT { + idc=15000; + style=64; + w=0.25; + h=0.07; + x=0.550*safezoneW+safezoneX+0.13; + y=0.265*safezoneH+safezoneY+0.32; + text="Show result in"; + }; + class TEXT_SOLUTION_SETUP_SHOW_RESULT_IN_1: TEXT_TARGET_A { + idc=15001; + w=0.04; + x=0.550*safezoneW+safezoneX+0.14; + y=0.265*safezoneH+safezoneY+0.35; + text="1"; + action=QUOTE(GVAR(currentScopeClickNumberTemp) = 1; call FUNC(update_solution_setup)); + }; + class TEXT_SOLUTION_SETUP_SHOW_RESULT_IN_2: TEXT_SOLUTION_SETUP_SHOW_RESULT_IN_1 { + idc=15002; + x=0.550*safezoneW+safezoneX+0.18; + text="2"; + action=QUOTE(GVAR(currentScopeClickNumberTemp) = 2; call FUNC(update_solution_setup)); + }; + class TEXT_SOLUTION_SETUP_SHOW_RESULT_IN_3: TEXT_SOLUTION_SETUP_SHOW_RESULT_IN_1 { + idc=15003; + x=0.550*safezoneW+safezoneX+0.22; + text="3"; + action=QUOTE(GVAR(currentScopeClickNumberTemp) = 3; call FUNC(update_solution_setup)); + }; + class TEXT_SOLUTION_SETUP_SHOW_RESULT_IN_4: TEXT_SOLUTION_SETUP_SHOW_RESULT_IN_1 { + idc=15004; + x=0.550*safezoneW+safezoneX+0.26; + text="4"; + action=QUOTE(GVAR(currentScopeClickNumberTemp) = 4; call FUNC(update_solution_setup)); + }; + class TEXT_SOLUTION_SETUP_SHOW_RESULT_IN_8: TEXT_SOLUTION_SETUP_SHOW_RESULT_IN_1 { + idc=15005; + x=0.550*safezoneW+safezoneX+0.30; + text="8"; + action=QUOTE(GVAR(currentScopeClickNumberTemp) = 8; call FUNC(update_solution_setup)); + }; + class TEXT_SOLUTION_SETUP_SHOW_RESULT_IN_10: TEXT_SOLUTION_SETUP_SHOW_RESULT_IN_1 { + idc=15006; + x=0.550*safezoneW+safezoneX+0.34; + text="10"; + action=QUOTE(GVAR(currentScopeClickNumberTemp) = 10; call FUNC(update_solution_setup)); + }; + class TEXT_SOLUTION_SETUP_CLICKS_PER: TEXT_GUN_AMMO_DATA_BORE_HEIGHT { + idc=15007; + style=64; + w=0.25; + h=0.07; + x=0.550*safezoneW+safezoneX+0.13; + y=0.265*safezoneH+safezoneY+0.42; + text="Clicks per"; + }; + class TEXT_SOLUTION_SETUP_CLICKS_PER_TMOA: TEXT_TARGET_A { + idc=15008; + w=0.05; + x=0.550*safezoneW+safezoneX+0.15; + y=0.265*safezoneH+safezoneY+0.45; + text="TMOA"; + action=QUOTE(GVAR(currentScopeClickUnitTemp) = 0; call FUNC(update_solution_setup)); + }; + class TEXT_SOLUTION_SETUP_CLICKS_PER_SMOA: TEXT_SOLUTION_SETUP_CLICKS_PER_TMOA { + idc=15009; + x=0.550*safezoneW+safezoneX+0.23; + text="SMOA"; + action=QUOTE(GVAR(currentScopeClickUnitTemp) = 1; call FUNC(update_solution_setup)); + }; + class TEXT_SOLUTION_SETUP_CLICKS_PER_MILS: TEXT_SOLUTION_SETUP_CLICKS_PER_TMOA { + idc=15010; + x=0.550*safezoneW+safezoneX+0.31; + text="MILS"; + action=QUOTE(GVAR(currentScopeClickUnitTemp) = 2; call FUNC(update_solution_setup)); + }; + class TEXT_SOLUTION_SETUP_DONE: TEXT_TARGET_SPEED_ASSIST_DONE { + idc=15011; + x=0.550*safezoneW+safezoneX+0.18; + y=0.265*safezoneH+safezoneY+0.55; + action=QUOTE(1 call FUNC(toggle_solution_setup)); + }; + class TEXT_SOLUTION_SETUP_CANCEL: TEXT_TARGET_SPEED_ASSIST_CANCEL { + idc=15012; + x=0.550*safezoneW+safezoneX+0.26; + y=0.265*safezoneH+safezoneY+0.55; + action=QUOTE(0 call FUNC(toggle_solution_setup)); + }; }; }; \ No newline at end of file diff --git a/addons/atragmx/XEH_preInit.sqf b/addons/atragmx/XEH_preInit.sqf index b85e325494..4718e6c31a 100644 --- a/addons/atragmx/XEH_preInit.sqf +++ b/addons/atragmx/XEH_preInit.sqf @@ -34,6 +34,7 @@ PREP(show_gun_list); PREP(show_main_page); PREP(show_range_card); PREP(show_range_card_setup); +PREP(show_solution_setup); PREP(show_target_data); PREP(show_target_range_assist); PREP(show_target_speed_assist); @@ -46,6 +47,7 @@ PREP(toggle_gun_ammo_data); PREP(toggle_gun_list); PREP(toggle_range_card); PREP(toggle_range_card_setup); +PREP(toggle_solution_setup); PREP(toggle_target_data); PREP(toggle_target_range_assist); PREP(toggle_target_speed_assist); @@ -59,6 +61,7 @@ PREP(update_range_card); PREP(update_relative_click_memory); PREP(update_result); PREP(update_scope_unit); +PREP(update_solution_setup); PREP(update_target); PREP(update_target_data); PREP(update_target_selection); diff --git a/addons/atragmx/functions/fnc_create_dialog.sqf b/addons/atragmx/functions/fnc_create_dialog.sqf index b4d51bd894..09e413d535 100644 --- a/addons/atragmx/functions/fnc_create_dialog.sqf +++ b/addons/atragmx/functions/fnc_create_dialog.sqf @@ -35,6 +35,7 @@ if (GVAR(showRangeCard)) then { [] call FUNC(update_range_card); }; GVAR(showRangeCardSetup) call FUNC(show_range_card_setup); +GVAR(showSolutionSetup) call FUNC(show_solution_setup); GVAR(showTargetData) call FUNC(show_target_data); GVAR(showTargetRangeAssist) call FUNC(show_target_range_assist); GVAR(showTargetSpeedAssist) call FUNC(show_target_speed_assist); diff --git a/addons/atragmx/functions/fnc_cycle_scope_unit.sqf b/addons/atragmx/functions/fnc_cycle_scope_unit.sqf index 36f704bd2d..ea9e2bd8e8 100644 --- a/addons/atragmx/functions/fnc_cycle_scope_unit.sqf +++ b/addons/atragmx/functions/fnc_cycle_scope_unit.sqf @@ -18,6 +18,7 @@ [] call FUNC(parse_input); GVAR(currentScopeUnit) = (GVAR(currentScopeUnit) + 1) % (count GVAR(scopeUnits)); +GVAR(workingMemory) set [6, GVAR(currentScopeUnit)]; [] call FUNC(update_scope_unit); [] call FUNC(update_result); diff --git a/addons/atragmx/functions/fnc_init.sqf b/addons/atragmx/functions/fnc_init.sqf index 2e613ca9e6..16c0b7eb86 100644 --- a/addons/atragmx/functions/fnc_init.sqf +++ b/addons/atragmx/functions/fnc_init.sqf @@ -42,7 +42,9 @@ GVAR(currentGun) = 0; GVAR(currentTarget) = 0; GVAR(currentScopeUnit) = 0; GVAR(currentScopeClickUnit) = 2; +GVAR(currentScopeClickUnitTemp) = 2; GVAR(currentScopeClickNumber) = 10; +GVAR(currentScopeClickNumberTemp) = 10; GVAR(atmosphereModeTBH) = true; GVAR(altitude) = 0; @@ -74,6 +76,7 @@ GVAR(showGunAmmoData) = false; GVAR(showGunList) = false; GVAR(showRangeCard) = false; GVAR(showRangeCardSetup) = false; +GVAR(showSolutionSetup) = false; GVAR(showTargetData) = false; GVAR(showTargetRangeAssist) = false; GVAR(showTargetSpeedAssist) = false; diff --git a/addons/atragmx/functions/fnc_show_solution_setup.sqf b/addons/atragmx/functions/fnc_show_solution_setup.sqf new file mode 100644 index 0000000000..761df45e6f --- /dev/null +++ b/addons/atragmx/functions/fnc_show_solution_setup.sqf @@ -0,0 +1,20 @@ +/* + * Author: Ruthberg + * Shows/Hides the solution setup controls + * + * Arguments: + * visible - <BOOL> + * + * Return Value: + * Nothing + * + * Example: + * false call ace_atragmx_fnc_show_solution_setup + * + * Public: No + */ +#include "script_component.hpp" + +GVAR(showSolutionSetup) = _this; + +{ctrlShow [_x, _this]} forEach [15000, 15001, 15002, 15003, 15004, 15005, 15006, 15007, 15008, 15009, 15010, 15011, 15012]; diff --git a/addons/atragmx/functions/fnc_toggle_solution_setup.sqf b/addons/atragmx/functions/fnc_toggle_solution_setup.sqf new file mode 100644 index 0000000000..0e9f702383 --- /dev/null +++ b/addons/atragmx/functions/fnc_toggle_solution_setup.sqf @@ -0,0 +1,38 @@ +/* + * Author: Ruthberg + * Toggles the solution setup screen on/off + * + * Arguments: + * Apply new data? <NUMBER> + * + * Return Value: + * Nothing + * + * Example: + * 1 call ace_atragmx_fnc_toggle_solution_setup + * + * Public: No + */ +#include "script_component.hpp" + +if (ctrlVisible 15000) then { + false call FUNC(show_solution_setup); + true call FUNC(show_main_page); + + if (_this == 1) then { + GVAR(currentScopeClickUnit) = GVAR(currentScopeClickUnitTemp); + GVAR(currentScopeClickNumber) = GVAR(currentScopeClickNumberTemp); + GVAR(workingMemory) set [7, GVAR(currentScopeClickUnit)]; + GVAR(workingMemory) set [8, GVAR(currentScopeClickNumber)]; + [] call FUNC(update_scope_unit); + [] call FUNC(update_result); + }; +} else { + true call FUNC(show_solution_setup); + false call FUNC(show_main_page); + + GVAR(currentScopeClickUnitTemp) = GVAR(currentScopeClickUnit); + GVAR(currentScopeClickNumberTemp) = GVAR(currentScopeClickNumber); + + [] call FUNC(update_solution_setup); +}; diff --git a/addons/atragmx/functions/fnc_update_range_card.sqf b/addons/atragmx/functions/fnc_update_range_card.sqf index 0c49b6f794..7e19abc36e 100644 --- a/addons/atragmx/functions/fnc_update_range_card.sqf +++ b/addons/atragmx/functions/fnc_update_range_card.sqf @@ -15,7 +15,7 @@ */ #include "script_component.hpp" -private ["_range", "_elevation", "_windage1", "_windage2", "_elevationScopeStep", "_windageScopeStep", "_lead", "_TOF", "_velocity", "_kineticEnergy", "_rangeOutput", "_elevationOutput", "_windageOutput", "_lastColumnOutput"]; +private ["_range", "_elevation", "_windage1", "_windage2", "_clickSize", "_clickNumber", "_clickInterval", "_lead", "_TOF", "_velocity", "_kineticEnergy", "_rangeOutput", "_elevationOutput", "_windageOutput", "_lastColumnOutput"]; _lastColumnOutput = ""; if (GVAR(showWind2) && GVAR(rangeCardCurrentColumn) == 0) then { @@ -54,12 +54,17 @@ lnbClear 5007; _windage2 = _windage2 * 1.047; }; case 3: { - _elevationScopeStep = (GVAR(workingMemory) select 7); - _windageScopeStep = (GVAR(workingMemory) select 8); + switch (GVAR(workingMemory) select 7) do { + case 0: { _clickSize = 1; }; + case 1: { _clickSize = 1 / 1.047; }; + case 2: { _clickSize = 3.38; }; + }; + _clickNumber = GVAR(workingMemory) select 8; + _clickInterval = _clickSize / _clickNumber; - _elevation = Round(_elevation / _elevationScopeStep); - _windage1 = Round(_windage1 / _windageScopeStep); - _windage2 = Round(_windage2 / _windageScopeStep); + _elevation = Round(_elevation / _clickInterval); + _windage1 = Round(_windage1 / _clickInterval); + _windage2 = Round(_windage2 / _clickInterval); }; }; diff --git a/addons/atragmx/functions/fnc_update_result.sqf b/addons/atragmx/functions/fnc_update_result.sqf index a86170fd45..64f121bc86 100644 --- a/addons/atragmx/functions/fnc_update_result.sqf +++ b/addons/atragmx/functions/fnc_update_result.sqf @@ -15,7 +15,7 @@ */ #include "script_component.hpp" -private ["_elevationAbs", "_elevationRel", "_elevationCur", "_windageAbs", "_wind2", "_windageRel", "_windageCur", "_lead", "_elevationScopeStep", "_windageScopeStep"]; +private ["_elevationAbs", "_elevationRel", "_elevationCur", "_windageAbs", "_wind2", "_windageRel", "_windageCur", "_lead", "_clickSize", "_clickNumber", "_clickInterval"]; _elevationAbs = GVAR(elevationOutput) select GVAR(currentTarget); _windageAbs = GVAR(windage1Output) select GVAR(currentTarget); @@ -55,19 +55,24 @@ switch (GVAR(currentScopeUnit)) do { _windageCur = _windageCur * 1.047; }; case 3: { - _elevationScopeStep = (GVAR(workingMemory) select 7); - _windageScopeStep = (GVAR(workingMemory) select 8); + switch (GVAR(workingMemory) select 7) do { + case 0: { _clickSize = 1; }; + case 1: { _clickSize = 1 / 1.047; }; + case 2: { _clickSize = 3.38; }; + }; + _clickNumber = GVAR(workingMemory) select 8; + _clickInterval = _clickSize / _clickNumber; - _elevationAbs = Round(_elevationAbs / _elevationScopeStep); - _windageAbs = Round(_windageAbs / _windageScopeStep); + _elevationAbs = Round(_elevationAbs / _clickInterval); + _windageAbs = Round(_windageAbs / _clickInterval); - _wind2 = Round(_wind2 / _windageScopeStep); + _wind2 = Round(_wind2 / _clickInterval); - _elevationRel = Round(_elevationRel / _elevationScopeStep); - _windageRel = Round(_windageRel / _windageScopeStep); + _elevationRel = Round(_elevationRel / _clickInterval); + _windageRel = Round(_windageRel / _clickInterval); - _elevationCur = Round(_elevationCur / _elevationScopeStep); - _windageCur = Round(_windageCur / _windageScopeStep); + _elevationCur = Round(_elevationCur / _clickInterval); + _windageCur = Round(_windageCur / _clickInterval); }; }; diff --git a/addons/atragmx/functions/fnc_update_solution_setup.sqf b/addons/atragmx/functions/fnc_update_solution_setup.sqf new file mode 100644 index 0000000000..204a844c9d --- /dev/null +++ b/addons/atragmx/functions/fnc_update_solution_setup.sqf @@ -0,0 +1,31 @@ +/* + * Author: Ruthberg + * Updates all solution setup input fields + * + * Arguments: + * Nothing + * + * Return Value: + * Nothing + * + * Example: + * call ace_atragmx_fnc_update_solution_setup + * + * Public: No + */ +#include "script_component.hpp" + +{((uiNamespace getVariable "ATragMX_Display") displayCtrl _x) ctrlEnable true} forEach [15001, 15002, 15003, 15004, 15005, 15006, 15008, 15009, 15010]; + +switch (GVAR(currentScopeClickNumberTemp)) do { + case 1: { ((uiNamespace getVariable "ATragMX_Display") displayCtrl 15001) ctrlEnable false; }; + case 2: { ((uiNamespace getVariable "ATragMX_Display") displayCtrl 15002) ctrlEnable false; }; + case 3: { ((uiNamespace getVariable "ATragMX_Display") displayCtrl 15003) ctrlEnable false; }; + case 4: { ((uiNamespace getVariable "ATragMX_Display") displayCtrl 15004) ctrlEnable false; }; + case 8: { ((uiNamespace getVariable "ATragMX_Display") displayCtrl 15005) ctrlEnable false; }; + case 10: { ((uiNamespace getVariable "ATragMX_Display") displayCtrl 15006) ctrlEnable false; }; +}; + +((uiNamespace getVariable "ATragMX_Display") displayCtrl (15008 + GVAR(currentScopeClickUnitTemp))) ctrlEnable false; + +ctrlSetFocus ((uiNamespace getVariable "ATragMX_Display") displayCtrl 15011); diff --git a/addons/atragmx/functions/fnc_update_target_selection.sqf b/addons/atragmx/functions/fnc_update_target_selection.sqf index d63f84a90c..d9fd6002c9 100644 --- a/addons/atragmx/functions/fnc_update_target_selection.sqf +++ b/addons/atragmx/functions/fnc_update_target_selection.sqf @@ -15,10 +15,7 @@ */ #include "script_component.hpp" -((uiNamespace getVariable "ATragMX_Display") displayCtrl 500) ctrlEnable true; -((uiNamespace getVariable "ATragMX_Display") displayCtrl 501) ctrlEnable true; -((uiNamespace getVariable "ATragMX_Display") displayCtrl 502) ctrlEnable true; -((uiNamespace getVariable "ATragMX_Display") displayCtrl 503) ctrlEnable true; +{((uiNamespace getVariable "ATragMX_Display") displayCtrl _x) ctrlEnable true} forEach [500, 501, 502, 503]; ((uiNamespace getVariable "ATragMX_Display") displayCtrl 500 + GVAR(currentTarget)) ctrlEnable false; From c27f3fb1317ed8478a5aba5e207927416b020a7c Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Tue, 21 Apr 2015 15:46:53 +0200 Subject: [PATCH 254/257] Added target speed direction switch / Improved the solution result output --- addons/atragmx/RscTitles.hpp | 10 +++ addons/atragmx/XEH_preInit.sqf | 1 + .../atragmx/functions/fnc_clear_user_data.sqf | 1 + .../fnc_cycle_target_speed_direction.sqf | 22 +++++ addons/atragmx/functions/fnc_init.sqf | 1 + addons/atragmx/functions/fnc_parse_input.sqf | 7 +- .../functions/fnc_restore_user_data.sqf | 1 + .../functions/fnc_show_target_data.sqf | 2 +- .../atragmx/functions/fnc_store_user_data.sqf | 1 + .../atragmx/functions/fnc_update_result.sqf | 88 +++++++++++++++++-- .../functions/fnc_update_target_data.sqf | 5 ++ 11 files changed, 129 insertions(+), 10 deletions(-) create mode 100644 addons/atragmx/functions/fnc_cycle_target_speed_direction.sqf diff --git a/addons/atragmx/RscTitles.hpp b/addons/atragmx/RscTitles.hpp index 2194b2b27a..94416aba23 100644 --- a/addons/atragmx/RscTitles.hpp +++ b/addons/atragmx/RscTitles.hpp @@ -1338,6 +1338,16 @@ class ATragMX_Display { idc=140050; y=0.265*safezoneH+safezoneY+0.480; }; + class TEXT_TARGET_DATA_TARGET_SPEED_DIRECTION: ATragMX_RscButton { + idc=140051; + colorBackground[]={0.15,0.21,0.23,0.3}; + colorFocused[]={0.15,0.21,0.23,0.2}; + w=0.0231; + x=0.550*safezoneW+safezoneX+0.305; + y=0.265*safezoneH+safezoneY+0.480; + text=">"; + action=QUOTE(call FUNC(cycle_target_speed_direction)); + }; class TEXT_TARGET_DATA_TARGET_RANGE: TEXT_TARGET_DATA_LATITUDE { idc=14006; y=0.265*safezoneH+safezoneY+0.520; diff --git a/addons/atragmx/XEH_preInit.sqf b/addons/atragmx/XEH_preInit.sqf index 4718e6c31a..6ec288b9c7 100644 --- a/addons/atragmx/XEH_preInit.sqf +++ b/addons/atragmx/XEH_preInit.sqf @@ -20,6 +20,7 @@ PREP(cycle_num_ticks_units); PREP(cycle_range_card_columns); PREP(cycle_scope_unit); PREP(cycle_target_size_units); +PREP(cycle_target_speed_direction); PREP(delete_gun); PREP(init); PREP(parse_input); diff --git a/addons/atragmx/functions/fnc_clear_user_data.sqf b/addons/atragmx/functions/fnc_clear_user_data.sqf index f805ce66b1..308b5bbf12 100644 --- a/addons/atragmx/functions/fnc_clear_user_data.sqf +++ b/addons/atragmx/functions/fnc_clear_user_data.sqf @@ -36,6 +36,7 @@ profileNamespace setVariable ["ACE_ATragMX_windSpeed2", nil]; profileNamespace setVariable ["ACE_ATragMX_windDirection", nil]; profileNamespace setVariable ["ACE_ATragMX_inclinationAngle", nil]; profileNamespace setVariable ["ACE_ATragMX_targetSpeed", nil]; +profileNamespace setVariable ["ACE_ATragMX_targetSpeedDirection", nil]; profileNamespace setVariable ["ACE_ATragMX_targetRange", nil]; profileNamespace setVariable ["ACE_ATragMX_rangeCardStartRange", nil]; diff --git a/addons/atragmx/functions/fnc_cycle_target_speed_direction.sqf b/addons/atragmx/functions/fnc_cycle_target_speed_direction.sqf new file mode 100644 index 0000000000..3c77fab792 --- /dev/null +++ b/addons/atragmx/functions/fnc_cycle_target_speed_direction.sqf @@ -0,0 +1,22 @@ +/* + * Author: Ruthberg + * Cycles through the target directions left/right + * + * Arguments: + * Nothing + * + * Return Value: + * Nothing + * + * Example: + * call ace_atragmx_cycle_target_direction + * + * Public: No + */ +#include "script_component.hpp" + +if ((ctrlText 140051) == ">") then { + ctrlSetText [140051, "<"]; +} else { + ctrlSetText [140051, ">"]; +}; diff --git a/addons/atragmx/functions/fnc_init.sqf b/addons/atragmx/functions/fnc_init.sqf index 16c0b7eb86..e4fe1b67a4 100644 --- a/addons/atragmx/functions/fnc_init.sqf +++ b/addons/atragmx/functions/fnc_init.sqf @@ -59,6 +59,7 @@ GVAR(windSpeed2) = [0, 0, 0, 0]; GVAR(windDirection) = [12, 12, 12, 12]; GVAR(inclinationAngle) = [0, 0, 0, 0]; GVAR(targetSpeed) = [0, 0, 0, 0]; +GVAR(targetSpeedDirection) = [1, 1, 1, 1]; GVAR(targetRange) = [0, 0, 0, 0]; GVAR(showWind2) = false; diff --git a/addons/atragmx/functions/fnc_parse_input.sqf b/addons/atragmx/functions/fnc_parse_input.sqf index ca289302c9..25ff7d764c 100644 --- a/addons/atragmx/functions/fnc_parse_input.sqf +++ b/addons/atragmx/functions/fnc_parse_input.sqf @@ -40,7 +40,12 @@ if (_inclinationAngleDegree != GVAR(inclinationAngle) select GVAR(currentTarget) GVAR(inclinationAngle) set [GVAR(currentTarget), round(acos(_inclinationAngleCosine))]; }; }; -GVAR(targetSpeed) set [GVAR(currentTarget), -50 max abs(parseNumber(ctrlText 140050)) min 50]; +GVAR(targetSpeed) set [GVAR(currentTarget), 0 max abs(parseNumber(ctrlText 140050)) min 50]; +if ((ctrlText 140051) == ">") then { + GVAR(targetSpeedDirection) set [GVAR(currentTarget), +1]; +} else { + GVAR(targetSpeedDirection) set [GVAR(currentTarget), -1]; +}; GVAR(targetRange) set [GVAR(currentTarget), 0 max abs(parseNumber(ctrlText 140060)) min 4000]; if (GVAR(currentUnit) != 2) then { GVAR(windSpeed1) set [GVAR(currentTarget), (GVAR(windSpeed1) select GVAR(currentTarget)) * 0.44704]; diff --git a/addons/atragmx/functions/fnc_restore_user_data.sqf b/addons/atragmx/functions/fnc_restore_user_data.sqf index 7204f17426..896455ec7a 100644 --- a/addons/atragmx/functions/fnc_restore_user_data.sqf +++ b/addons/atragmx/functions/fnc_restore_user_data.sqf @@ -33,6 +33,7 @@ GVAR(windSpeed2) = profileNamespace getVariable ["ACE_ATragMX_windSpeed2", [0, 0 GVAR(windDirection) = profileNamespace getVariable ["ACE_ATragMX_windDirection", [12, 12, 12, 12]]; GVAR(inclinationAngle) = profileNamespace getVariable ["ACE_ATragMX_inclinationAngle", [0, 0, 0, 0]]; GVAR(targetSpeed) = profileNamespace getVariable ["ACE_ATragMX_targetSpeed", [0, 0, 0, 0]]; +GVAR(targetSpeedDirection) = profileNamespace getVariable ["ACE_ATragMX_targetSpeedDirection", [1, 1, 1, 1]]; GVAR(targetRange) = profileNamespace getVariable ["ACE_ATragMX_targetRange", [0, 0, 0, 0]]; GVAR(rangeCardStartRange) = 0 max (profileNamespace getVariable ["ACE_ATragMX_rangeCardStartRange", 200]) min 3000; diff --git a/addons/atragmx/functions/fnc_show_target_data.sqf b/addons/atragmx/functions/fnc_show_target_data.sqf index 48e419f65f..f1b432edf8 100644 --- a/addons/atragmx/functions/fnc_show_target_data.sqf +++ b/addons/atragmx/functions/fnc_show_target_data.sqf @@ -17,7 +17,7 @@ GVAR(showTargetData) = _this; -{ctrlShow [_x, _this]} forEach [14000, 140000, 14001, 140010, 14002, 141020, 140020, 141021, 140021, 14003, 140030, 14004, 140040, 141040, 141041, 140041, 14005, 140050, 14006, 140060, 140061, 14007, 14008, 14009, 14010, 14011]; +{ctrlShow [_x, _this]} forEach [14000, 140000, 14001, 140010, 14002, 141020, 140020, 141021, 140021, 14003, 140030, 14004, 140040, 141040, 141041, 140041, 14005, 140050, 140051, 14006, 140060, 140061, 14007, 14008, 14009, 14010, 14011]; if (_this) then { [] call FUNC(update_target_data); diff --git a/addons/atragmx/functions/fnc_store_user_data.sqf b/addons/atragmx/functions/fnc_store_user_data.sqf index 01a5810fe2..5cfe7f2ae0 100644 --- a/addons/atragmx/functions/fnc_store_user_data.sqf +++ b/addons/atragmx/functions/fnc_store_user_data.sqf @@ -35,6 +35,7 @@ profileNamespace setVariable ["ACE_ATragMX_windSpeed2", GVAR(windSpeed2)]; profileNamespace setVariable ["ACE_ATragMX_windDirection", GVAR(windDirection)]; profileNamespace setVariable ["ACE_ATragMX_inclinationAngle", GVAR(inclinationAngle)]; profileNamespace setVariable ["ACE_ATragMX_targetSpeed", GVAR(targetSpeed)]; +profileNamespace setVariable ["ACE_ATragMX_targetSpeedDirection", GVAR(targetSpeedDirection)]; profileNamespace setVariable ["ACE_ATragMX_targetRange", GVAR(targetRange)]; profileNamespace setVariable ["ACE_ATragMX_rangeCardStartRange", GVAR(rangeCardStartRange)]; diff --git a/addons/atragmx/functions/fnc_update_result.sqf b/addons/atragmx/functions/fnc_update_result.sqf index 64f121bc86..bb708efaab 100644 --- a/addons/atragmx/functions/fnc_update_result.sqf +++ b/addons/atragmx/functions/fnc_update_result.sqf @@ -82,16 +82,88 @@ if (GVAR(showWind2)) then { ctrlSetText [42, "Lead"]; }; -ctrlSetText [400, Str(Round(_elevationAbs * 100) / 100)]; -ctrlSetText [401, Str(Round(_elevationRel * 100) / 100)]; -ctrlSetText [402, Str(Round(_elevationCur * 100) / 100)]; +_elevationAbs = Round(_elevationAbs * 100) / 100; +if (_elevationAbs > 0) then { + ctrlSetText [400, format["%1", abs(_elevationAbs)]]; +} else { + if (_elevationAbs < 0) then { + ctrlSetText [400, format["%1D", abs(_elevationAbs)]]; + } else { + ctrlSetText [400, "0.0"]; + }; +}; +_elevationRel = Round(_elevationRel * 100) / 100; +if (_elevationRel > 0) then { + ctrlSetText [401, format["%1", abs(_elevationRel)]]; +} else { + if (_elevationRel < 0) then { + ctrlSetText [401, format["%1D", abs(_elevationRel)]]; + } else { + ctrlSetText [401, "0.0"]; + }; +}; +_elevationCur = Round(_elevationCur * 100) / 100; +if (_elevationCur > 0) then { + ctrlSetText [402, format["%1", abs(_elevationCur)]]; +} else { + if (_elevationCur < 0) then { + ctrlSetText [402, format["%1D", abs(_elevationCur)]]; + } else { + ctrlSetText [402, "0.0"]; + }; +}; -ctrlSetText [410, Str(Round(_windageAbs * 100) / 100)]; -ctrlSetText [411, Str(Round(_windageRel * 100) / 100)]; -ctrlSetText [412, Str(Round(_windageCur * 100) / 100)]; +_windageAbs = Round(_windageAbs * 100) / 100; +if (_windageAbs > 0) then { + ctrlSetText [410, format["%1R", abs(_windageAbs)]]; +} else { + if (_windageAbs < 0) then { + ctrlSetText [410, format["%1L", abs(_windageAbs)]]; + } else { + ctrlSetText [410, "0.0"]; + }; +}; +_windageRel = Round(_windageRel * 100) / 100; +if (_windageRel > 0) then { + ctrlSetText [411, format["%1R", abs(_windageRel)]]; +} else { + if (_windageRel < 0) then { + ctrlSetText [411, format["%1L", abs(_windageRel)]]; + } else { + ctrlSetText [411, "0.0"]; + }; +}; +_windageCur = Round(_windageCur * 100) / 100; +if (_windageCur > 0) then { + ctrlSetText [412, format["%1R", abs(_windageCur)]]; +} else { + if (_windageCur < 0) then { + ctrlSetText [412, format["%1L", abs(_windageCur)]]; + } else { + ctrlSetText [412, "0.0"]; + }; +}; if (GVAR(showWind2)) then { - ctrlSetText [420, Str(Round(_wind2 * 100) / 100)]; + _wind2 = Round(_wind2 * 100) / 100; + if (_wind2 > 0) then { + ctrlSetText [420, format["%1R", abs(_wind2)]]; + } else { + if (_wind2 < 0) then { + ctrlSetText [420, format["%1L", abs(_wind2)]]; + } else { + ctrlSetText [420, "0.0"]; + }; + }; } else { - ctrlSetText [420, Str(Round(_lead * 100) / 100)]; + _lead = Round(_lead * 100) / 100; + if (_lead > 0) then { + if ((GVAR(targetSpeedDirection) select GVAR(currentTarget)) == 1) then { + ctrlSetText [420, format["%1R", abs(_lead)]]; + } else { + ctrlSetText [420, format["%1L", abs(_lead)]]; + }; + } else { + ctrlSetText [420, "0.0"]; + }; }; \ No newline at end of file diff --git a/addons/atragmx/functions/fnc_update_target_data.sqf b/addons/atragmx/functions/fnc_update_target_data.sqf index b5e6dcf85a..6fa9035a62 100644 --- a/addons/atragmx/functions/fnc_update_target_data.sqf +++ b/addons/atragmx/functions/fnc_update_target_data.sqf @@ -32,6 +32,11 @@ if (GVAR(currentUnit) != 2) then { } else { ctrlSetText [140050, Str(Round((GVAR(targetSpeed) select GVAR(currentTarget)) * 100) / 100)]; }; +if ((GVAR(targetSpeedDirection) select GVAR(currentTarget)) == 1) then { + ctrlSetText [140051, ">"]; +} else { + ctrlSetText [140051, "<"]; +}; if (GVAR(currentUnit) == 1) then { ctrlSetText [140060, Str(Round((GVAR(targetRange) select GVAR(currentTarget)) * 1.0936133))]; } else { From e22a7e1aad4207e437a1a2ed1d256f1a2e4f3113 Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Tue, 21 Apr 2015 16:01:53 +0200 Subject: [PATCH 255/257] Improved the range card column spacing --- addons/atragmx/RscTitles.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/atragmx/RscTitles.hpp b/addons/atragmx/RscTitles.hpp index 94416aba23..76f06744dc 100644 --- a/addons/atragmx/RscTitles.hpp +++ b/addons/atragmx/RscTitles.hpp @@ -128,7 +128,7 @@ class ATragMX_RscListBox { class ATragMX_RscListNBox: ATragMX_RscListBox { idc=-1; type=102; - columns[]={0.0, 0.225, 0.475, 0.725}; + columns[]={0.0, 0.225, 0.475, 0.7}; drawSideArrows=0; idcLeft=-1; idcRight=-1; From 7c57ad25bd35cc3db939b12fe89db9f5f7eb3cb2 Mon Sep 17 00:00:00 2001 From: ulteq <ulteq@web.de> Date: Tue, 21 Apr 2015 16:54:26 +0200 Subject: [PATCH 256/257] Fixes a recently introduced bug in the relative click memory --- addons/atragmx/functions/fnc_parse_input.sqf | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/addons/atragmx/functions/fnc_parse_input.sqf b/addons/atragmx/functions/fnc_parse_input.sqf index 25ff7d764c..504c45fb28 100644 --- a/addons/atragmx/functions/fnc_parse_input.sqf +++ b/addons/atragmx/functions/fnc_parse_input.sqf @@ -95,9 +95,9 @@ if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) GVAR(workingMemory) set [1, _muzzleVelocity]; GVAR(workingMemory) set [2, _zeroRange]; -private ["_elevationCur", "_windageCur", "_elevationScopeStep", "_windageScopeStep"]; -_elevationCur = parseNumber(ctrlText 402); -_windageCur = parseNumber(ctrlText 412); +private ["_elevationCur", "_windageCur", "_clickSize", "_clickNumber", "_clickInterval"]; +_elevationCur = GVAR(workingMemory) select 10; +_windageCur = GVAR(workingMemory) select 11; switch (GVAR(currentScopeUnit)) do { case 0: { @@ -109,11 +109,16 @@ switch (GVAR(currentScopeUnit)) do { _windageCur = _windageCur / 1.047; }; case 3: { - _elevationScopeStep = (GVAR(workingMemory) select 7); - _windageScopeStep = (GVAR(workingMemory) select 8); + switch (GVAR(workingMemory) select 7) do { + case 0: { _clickSize = 1; }; + case 1: { _clickSize = 1 / 1.047; }; + case 2: { _clickSize = 3.38; }; + }; + _clickNumber = GVAR(workingMemory) select 8; + _clickInterval = _clickSize / _clickNumber; - _elevationCur = _elevationCur * _elevationScopeStep; - _windageCur = _windageCur * _windageScopeStep; + _elevationCur = Round(_elevationCur / _clickInterval); + _windageCur = Round(_windageCur / _clickInterval); }; }; From f888dcdb88e458f9845ab19680e40216cacd09eb Mon Sep 17 00:00:00 2001 From: jaynus <jaynus@gmail.com> Date: Tue, 21 Apr 2015 08:22:50 -0700 Subject: [PATCH 257/257] Carry & Drag documentation. --- documentation/framework/carry-drag.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 documentation/framework/carry-drag.md diff --git a/documentation/framework/carry-drag.md b/documentation/framework/carry-drag.md new file mode 100644 index 0000000000..daaa9fb95a --- /dev/null +++ b/documentation/framework/carry-drag.md @@ -0,0 +1,27 @@ +--- +layout: wiki +title: Carry and Drag System +group: framework +order: 5 +parent: wiki +--- + +# 1. Config Values + +``` +class CfgVehicles { + class MyVehicle { + + + ace_dragging_canDrag = 1; // can this object be dragged?; 1 yes, 0 no (0 default) + ace_dragging_dragPosition[] = {0,1.2,0} // Offset of the model from the body while dragging, comparable to the offset in attachTo (It's the same actually) + ace_dragging_dragDirection = 0; // how much degrees is the model rotatated after dragging it (a global setDir after attachTo) + + ace_dragging_canCarry = 1; // can this object be carried?; 1 yes, 0 no (0 default) + ace_dragging_carryPosition[] = {0,1.2,0}; // Same as drag, but for carrying objects + ace_dragging_carryDirection = 0; // Same as drag, but for carrying objects + + }; +}; +``` +