diff --git a/README.md b/README.md index 99c739980c..4af32fd2a2 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- ACE3 Version + ACE3 Version ACE3 Issues diff --git a/addons/attach/stringtable.xml b/addons/attach/stringtable.xml index 462e3d725c..1ab8d61dc5 100644 --- a/addons/attach/stringtable.xml +++ b/addons/attach/stringtable.xml @@ -2,15 +2,15 @@ - Attach item >> - Gegenstand befestigen >> - Acoplar objeto >> - Przyczep >> - Attacher l'objet >> - Připnout >> - Fixar item >> - Attacca l'oggetto >> - Tárgy hozzácsatolása >> + Attach item + Gegenstand befestigen + Acoplar objeto + Przyczep + Attacher l'objet + Připnout + Fixar item + Attacca l'oggetto + Tárgy hozzácsatolása Прикрепить предмет diff --git a/addons/common/XEH_PREP.hpp b/addons/common/XEH_PREP.hpp index 4f56dd4d86..0649dcefea 100644 --- a/addons/common/XEH_PREP.hpp +++ b/addons/common/XEH_PREP.hpp @@ -1,4 +1,5 @@ +PREP(actionKeysNamesConverted); PREP(addCanInteractWithCondition); PREP(addLineToDebugDraw); PREP(addSetting); @@ -32,6 +33,7 @@ PREP(displayText); PREP(displayTextPicture); PREP(displayTextStructured); PREP(doAnimation); +PREP(doGesture); PREP(dropBackpack); PREP(endRadioTransmission); PREP(eraseCache); @@ -127,6 +129,7 @@ PREP(numberToString); PREP(onAnswerRequest); PREP(owned); PREP(parseList); +PREP(playConfigSound3D); PREP(player); PREP(playerSide); PREP(positionToASL); diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index e7a43e68d2..d9c90f14f8 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -118,6 +118,8 @@ if (isServer) then { [QGVAR(setVelocity), {(_this select 0) setVelocity (_this select 1)}] call CBA_fnc_addEventHandler; [QGVAR(playMove), {(_this select 0) playMove (_this select 1)}] call CBA_fnc_addEventHandler; [QGVAR(playMoveNow), {(_this select 0) playMoveNow (_this select 1)}] call CBA_fnc_addEventHandler; +[QGVAR(playAction), {(_this select 0) playAction (_this select 1)}] call CBA_fnc_addEventHandler; +[QGVAR(playActionNow), {(_this select 0) playActionNow (_this select 1)}] call CBA_fnc_addEventHandler; [QGVAR(switchMove), {(_this select 0) switchMove (_this select 1)}] call CBA_fnc_addEventHandler; [QGVAR(setVectorDirAndUp), {(_this select 0) setVectorDirAndUp (_this select 1)}] call CBA_fnc_addEventHandler; [QGVAR(setVanillaHitPointDamage), {(_this select 0) setHitPointDamage (_this select 1)}] call CBA_fnc_addEventHandler; @@ -381,7 +383,7 @@ GVAR(OldIsCamera) = false; ////////////////////////////////////////////////// ["isNotDead", { - params ["_unit", "_target"]; + params ["_unit"]; alive _unit }] call FUNC(addCanInteractWithCondition); @@ -400,6 +402,49 @@ GVAR(OldIsCamera) = false; ["isNotInZeus", {isNull curatorCamera}] call FUNC(addCanInteractWithCondition); +////////////////////////////////////////////////// +// Set up reload mutex +////////////////////////////////////////////////// + +GVAR(isReloading) = false; + +["keyDown", { + if ((_this select 1) in actionKeys "ReloadMagazine" && {alive ACE_player}) then { + //Ignore mounted (except ffv) + if (!(player call CBA_fnc_canUseWeapon)) exitWith {}; + private _weapon = currentWeapon ACE_player; + + if (_weapon != "") then { + private _gesture = getText (configfile >> "CfgWeapons" >> _weapon >> "reloadAction"); + if (_gesture == "") exitWith {}; //Ignore weapons with no reload gesture (binoculars) + private _isLauncher = _weapon isKindOf ["Launcher", configFile >> "CfgWeapons"]; + private _config = ["CfgGesturesMale", "CfgMovesMaleSdr"] select _isLauncher; + private _duration = getNumber (configfile >> _config >> "States" >> _gesture >> "speed"); + + if (_duration != 0) then { + _duration = if (_duration < 0) then { abs _duration } else { 1 / _duration }; + } else { + _duration = 3; + }; + + TRACE_2("Reloading, blocking gestures",_weapon,_duration); + GVAR(reloadingETA) = CBA_missionTime + _duration; + + if (!GVAR(isReloading)) then { + GVAR(isReloading) = true; + + [{ + CBA_missionTime > GVAR(reloadingETA) + },{ + GVAR(isReloading) = false; + }] call CBA_fnc_waitUntilAndExecute; + }; + }; + }; + + false +}] call CBA_fnc_addDisplayHandler; + ////////////////////////////////////////////////// // Set up PlayerJIP eventhandler ////////////////////////////////////////////////// diff --git a/addons/common/functions/fnc_actionKeysNamesConverted.sqf b/addons/common/functions/fnc_actionKeysNamesConverted.sqf new file mode 100644 index 0000000000..d60df89bfb --- /dev/null +++ b/addons/common/functions/fnc_actionKeysNamesConverted.sqf @@ -0,0 +1,110 @@ +/* + * Author: commy2 + * Reports same as actionKeysNames(Array) but in a format processable by "keyDown". + * + * Arguments: + * 0: Action name + * + * Return Value: + * Keybinds, format: [DIK, _shift, _ctrl, _alt] + * + * Example: + * "ReloadMagazine" call ace_common_fnc_actionKeysNamesConverted + * + * Public: No + */ +#include "script_component.hpp" + +#define LAST_DIK 250 +#define PLACEHOLDER_PLUS "" + +#define LKEYNAME_LSHIFT localize "STR_DIK_LSHIFT" +#define LKEYNAME_RSHIFT localize "STR_DIK_RSHIFT" +#define LKEYNAME_LCONTROL localize "STR_DIK_LCONTROL" +#define LKEYNAME_RCONTROL localize "STR_DIK_RCONTROL" +#define LKEYNAME_LALT localize "STR_DIK_LMENU" +#define LKEYNAME_RALT localize "STR_DIK_RMENU" + +// stored in ui namespace to force it to be recreated every game start +// this way we make it work in savegames after a language change +private _keyTable = uiNamespace getVariable QGVAR(keyNameTable); + +if (isNil "_keyTable") then { + _keyTable = []; + uiNamespace setVariable [QGVAR(keyNameTable), _keyTable]; + + for "_i" from 0 to LAST_DIK do { + private _keyName = keyName _i; + + // keys are reported as nested strings for god knows why + _keyName = _keyName select [1, count _keyName - 2]; + + _keyTable pushBack _keyName; + }; +}; + +private _keyCache = uiNamespace getVariable [QGVAR(keyNameCache), locationNull]; + +if (isNull _keyCache) then { + _keyCache = call CBA_fnc_createNamespace; + uiNamespace setVariable [QGVAR(keyNameCache), _keyCache]; +}; + +params [["_action", "", [""]]]; + +private _keybinds = actionKeysNamesArray _action apply { + private _keyName = _x; + private _keybind = _keyCache getVariable _keyName; + + if (isNil "_keybind") then { + private _key = -1; + private _shift = false; + private _ctrl = false; + private _alt = false; + + // copy, keep original varname for cache + private _keyImage = _keyName; + + // handle "+" being a key and the seperator - as first character + if ((_keyImage select [0,1]) isEqualTo "+") then { + _keyImage = PLACEHOLDER_PLUS + (_keyImage select [1]); + }; + + // - and as character seperated by "+" + _keyImage = [_keyImage, "++", "+" + PLACEHOLDER_PLUS] call CBA_fnc_replace; + + // get single keys (also revert back non-seperator "+" keys) + _keyImage = _keyImage splitString "+" apply { + [_x, "+"] select (_x isEqualTo PLACEHOLDER_PLUS); + }; + + // parse single keys + { + switch (true) do { + case (_x in [LKEYNAME_LSHIFT, LKEYNAME_RSHIFT]): { + _shift = true; + }; + case (_x in [LKEYNAME_LCONTROL, LKEYNAME_RCONTROL]): { + _ctrl = true; + }; + case (_x in [LKEYNAME_LALT, LKEYNAME_RALT]): { + _alt = true; + }; + default { + // @todo handle double keys? ("C+R") + // currently only reports last key + // not usable by keyDown by default + _key = _keyTable find _x; + }; + }; + } forEach _keyImage; + + // cache + _keybind = [_key, _shift, _ctrl, _alt]; + _keyCache setVariable [_keyName, _keybind]; + }; + + _keybind +}; + +_keybinds diff --git a/addons/common/functions/fnc_blurScreen.sqf b/addons/common/functions/fnc_blurScreen.sqf index 2c6a17cbe3..4a6c0d3cb4 100644 --- a/addons/common/functions/fnc_blurScreen.sqf +++ b/addons/common/functions/fnc_blurScreen.sqf @@ -1,13 +1,17 @@ /* * Author: Glowbal + * Blurs screen. * * Arguments: * 0: ID - * 1: Show? + * 1: Show? * * Return Value: * None * + * Example: + * [5, true] call ace_common_fnc_blurScreen + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_doGesture.sqf b/addons/common/functions/fnc_doGesture.sqf new file mode 100644 index 0000000000..9805beffc7 --- /dev/null +++ b/addons/common/functions/fnc_doGesture.sqf @@ -0,0 +1,24 @@ +/* + * Author: commy2 + * Play a gesture. + * + * Arguments: + * 0: Unit + * 1: Animation + * + * Return Value: + * None + * + * Example: + * [player, "gestureGo"] call ace_common_fnc_doGesture + * + * Public: No + */ +#include "script_component.hpp" + +params ["_unit", "_animation", ["_priority", 0]]; +TRACE_3("params",_unit,_animation,_priority); + +if (!GVAR(isReloading) || {_priority > 0}) then { + [QGVAR(playActionNow), [_unit, _animation], _unit] call CBA_fnc_targetEvent; +}; diff --git a/addons/common/functions/fnc_playConfigSound3D.sqf b/addons/common/functions/fnc_playConfigSound3D.sqf new file mode 100644 index 0000000000..6253f75fb4 --- /dev/null +++ b/addons/common/functions/fnc_playConfigSound3D.sqf @@ -0,0 +1,35 @@ +/* + * Author: esteldunedain + * Plays a sound defined in CfgSounds using playSound3D, with global effect + * + * Arguments: + * 0: Sound class + * 1: Position ASL + * 2: Volume + * 3: Distance + * + * Return Value: + * None + * + * Public: Yes + */ +#define DEBUG_MODE_FULL +#include "script_component.hpp" + +params ["_soundClass", "_posASL", "_volume", "_distance"]; + +private _cfgSound = configFile >> "CfgSounds" >> _soundClass; + +if (!isClass _cfgSound) exitWith { + ACE_LOGERROR_1("CfgSounds class [%1] does not exist", _soundClass); +}; + +private _args = getArray (_cfgSound >> "sound"); +TRACE_1("playConfigSound3D args", _args); +private _pitch = (_args select 2); +// Strip the first \ from the filename +private _fileName = _args select 0; +_fileName = _fileName select [1, count _fileName - 1]; +TRACE_1("playConfigSound3D filename", _fileName); + +playSound3D [_fileName, objNull, false, _posASL, _volume, _pitch, _distance]; diff --git a/addons/dogtags/CfgEventHandlers.hpp b/addons/dogtags/CfgEventHandlers.hpp new file mode 100644 index 0000000000..e90bed419e --- /dev/null +++ b/addons/dogtags/CfgEventHandlers.hpp @@ -0,0 +1,15 @@ +class Extended_PreStart_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preStart)); + }; +}; +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preInit)); + }; +}; +class Extended_PostInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_postInit)); + }; +}; diff --git a/addons/dogtags/CfgVehicles.hpp b/addons/dogtags/CfgVehicles.hpp new file mode 100644 index 0000000000..9757ac1c53 --- /dev/null +++ b/addons/dogtags/CfgVehicles.hpp @@ -0,0 +1,43 @@ +class CfgVehicles { + class Man; + class CAManBase: Man { + class ACE_Actions { + class ACE_MainActions { + class ACE_Dogtag { + displayName = CSTRING(itemName); + condition = ""; + statement = ""; + showDisabled = 0; + priority = 3; + icon = QPATHTOF(data\dogtag_icon_ca.paa); + class ACE_CheckDogtag { + displayName = CSTRING(checkDogtag); + condition = QUOTE([ARR_2(_player,_target)] call FUNC(canCheckDogtag)); + statement = QUOTE([ARR_2(_player,_target)] call FUNC(checkDogtag)); + showDisabled = 0; + priority = 3; + icon = QPATHTOF(data\dogtag_icon_ca.paa); + }; + class ACE_TakeDogtag { + displayName = CSTRING(takeDogtag); + condition = QUOTE([ARR_2(_player,_target)] call FUNC(canTakeDogtag)); + statement = QUOTE([ARR_2(_player,_target)] call FUNC(takeDogtag)); + showDisabled = 0; + priority = 3; + icon = QPATHTOF(data\dogtag_icon_ca.paa); + }; + }; + }; + }; + class ACE_SelfActions { + class ACE_Equipment { + class ACE_CheckDogtags { + displayName = CSTRING(checkItem); + condition = "true"; + statement = ""; + insertChildren = QUOTE(_this call DFUNC(addDogtagActions)); + }; + }; + }; + }; +}; diff --git a/addons/dogtags/CfgWeapons.hpp b/addons/dogtags/CfgWeapons.hpp new file mode 100644 index 0000000000..4e37db74db --- /dev/null +++ b/addons/dogtags/CfgWeapons.hpp @@ -0,0 +1,1025 @@ +#define ACE_DOGTAG_ITEM(DOGTAGBASE,DOGTAGID) \ + class DOGTAGBASE##_##DOGTAGID : DOGTAGBASE { \ + author = ECSTRING(common,ACETeam); \ + scope = 1; \ + scopeArsenal = 0; \ + scopeCurator = 0; \ + descriptionShort = QUOTE(DOGTAGID); \ + GVAR(tagID) = DOGTAGID; \ + } + +class CfgWeapons { + class ACE_ItemCore; + class InventoryItem_Base_F; + + class ACE_dogtag: ACE_ItemCore { + author = ECSTRING(common,ACETeam); + scope = 0; + displayName = CSTRING(itemName); + model = QUOTE(PATHTOF(data\ace_dogtag.p3d)); + picture = QUOTE(PATHTOF(data\dogtagSingle.paa)); + class ItemInfo: InventoryItem_Base_F { + mass = 0; //too small to for 1 ? + }; + }; + ACE_DOGTAG_ITEM(ACE_dogtag,1); + ACE_DOGTAG_ITEM(ACE_dogtag,2); + ACE_DOGTAG_ITEM(ACE_dogtag,3); + ACE_DOGTAG_ITEM(ACE_dogtag,4); + ACE_DOGTAG_ITEM(ACE_dogtag,5); + ACE_DOGTAG_ITEM(ACE_dogtag,6); + ACE_DOGTAG_ITEM(ACE_dogtag,7); + ACE_DOGTAG_ITEM(ACE_dogtag,8); + ACE_DOGTAG_ITEM(ACE_dogtag,9); + ACE_DOGTAG_ITEM(ACE_dogtag,10); + ACE_DOGTAG_ITEM(ACE_dogtag,11); + ACE_DOGTAG_ITEM(ACE_dogtag,12); + ACE_DOGTAG_ITEM(ACE_dogtag,13); + ACE_DOGTAG_ITEM(ACE_dogtag,14); + ACE_DOGTAG_ITEM(ACE_dogtag,15); + ACE_DOGTAG_ITEM(ACE_dogtag,16); + ACE_DOGTAG_ITEM(ACE_dogtag,17); + ACE_DOGTAG_ITEM(ACE_dogtag,18); + ACE_DOGTAG_ITEM(ACE_dogtag,19); + ACE_DOGTAG_ITEM(ACE_dogtag,20); + ACE_DOGTAG_ITEM(ACE_dogtag,21); + ACE_DOGTAG_ITEM(ACE_dogtag,22); + ACE_DOGTAG_ITEM(ACE_dogtag,23); + ACE_DOGTAG_ITEM(ACE_dogtag,24); + ACE_DOGTAG_ITEM(ACE_dogtag,25); + ACE_DOGTAG_ITEM(ACE_dogtag,26); + ACE_DOGTAG_ITEM(ACE_dogtag,27); + ACE_DOGTAG_ITEM(ACE_dogtag,28); + ACE_DOGTAG_ITEM(ACE_dogtag,29); + ACE_DOGTAG_ITEM(ACE_dogtag,30); + ACE_DOGTAG_ITEM(ACE_dogtag,31); + ACE_DOGTAG_ITEM(ACE_dogtag,32); + ACE_DOGTAG_ITEM(ACE_dogtag,33); + ACE_DOGTAG_ITEM(ACE_dogtag,34); + ACE_DOGTAG_ITEM(ACE_dogtag,35); + ACE_DOGTAG_ITEM(ACE_dogtag,36); + ACE_DOGTAG_ITEM(ACE_dogtag,37); + ACE_DOGTAG_ITEM(ACE_dogtag,38); + ACE_DOGTAG_ITEM(ACE_dogtag,39); + ACE_DOGTAG_ITEM(ACE_dogtag,40); + ACE_DOGTAG_ITEM(ACE_dogtag,41); + ACE_DOGTAG_ITEM(ACE_dogtag,42); + ACE_DOGTAG_ITEM(ACE_dogtag,43); + ACE_DOGTAG_ITEM(ACE_dogtag,44); + ACE_DOGTAG_ITEM(ACE_dogtag,45); + ACE_DOGTAG_ITEM(ACE_dogtag,46); + ACE_DOGTAG_ITEM(ACE_dogtag,47); + ACE_DOGTAG_ITEM(ACE_dogtag,48); + ACE_DOGTAG_ITEM(ACE_dogtag,49); + ACE_DOGTAG_ITEM(ACE_dogtag,50); + ACE_DOGTAG_ITEM(ACE_dogtag,51); + ACE_DOGTAG_ITEM(ACE_dogtag,52); + ACE_DOGTAG_ITEM(ACE_dogtag,53); + ACE_DOGTAG_ITEM(ACE_dogtag,54); + ACE_DOGTAG_ITEM(ACE_dogtag,55); + ACE_DOGTAG_ITEM(ACE_dogtag,56); + ACE_DOGTAG_ITEM(ACE_dogtag,57); + ACE_DOGTAG_ITEM(ACE_dogtag,58); + ACE_DOGTAG_ITEM(ACE_dogtag,59); + ACE_DOGTAG_ITEM(ACE_dogtag,60); + ACE_DOGTAG_ITEM(ACE_dogtag,61); + ACE_DOGTAG_ITEM(ACE_dogtag,62); + ACE_DOGTAG_ITEM(ACE_dogtag,63); + ACE_DOGTAG_ITEM(ACE_dogtag,64); + ACE_DOGTAG_ITEM(ACE_dogtag,65); + ACE_DOGTAG_ITEM(ACE_dogtag,66); + ACE_DOGTAG_ITEM(ACE_dogtag,67); + ACE_DOGTAG_ITEM(ACE_dogtag,68); + ACE_DOGTAG_ITEM(ACE_dogtag,69); + ACE_DOGTAG_ITEM(ACE_dogtag,70); + ACE_DOGTAG_ITEM(ACE_dogtag,71); + ACE_DOGTAG_ITEM(ACE_dogtag,72); + ACE_DOGTAG_ITEM(ACE_dogtag,73); + ACE_DOGTAG_ITEM(ACE_dogtag,74); + ACE_DOGTAG_ITEM(ACE_dogtag,75); + ACE_DOGTAG_ITEM(ACE_dogtag,76); + ACE_DOGTAG_ITEM(ACE_dogtag,77); + ACE_DOGTAG_ITEM(ACE_dogtag,78); + ACE_DOGTAG_ITEM(ACE_dogtag,79); + ACE_DOGTAG_ITEM(ACE_dogtag,80); + ACE_DOGTAG_ITEM(ACE_dogtag,81); + ACE_DOGTAG_ITEM(ACE_dogtag,82); + ACE_DOGTAG_ITEM(ACE_dogtag,83); + ACE_DOGTAG_ITEM(ACE_dogtag,84); + ACE_DOGTAG_ITEM(ACE_dogtag,85); + ACE_DOGTAG_ITEM(ACE_dogtag,86); + ACE_DOGTAG_ITEM(ACE_dogtag,87); + ACE_DOGTAG_ITEM(ACE_dogtag,88); + ACE_DOGTAG_ITEM(ACE_dogtag,89); + ACE_DOGTAG_ITEM(ACE_dogtag,90); + ACE_DOGTAG_ITEM(ACE_dogtag,91); + ACE_DOGTAG_ITEM(ACE_dogtag,92); + ACE_DOGTAG_ITEM(ACE_dogtag,93); + ACE_DOGTAG_ITEM(ACE_dogtag,94); + ACE_DOGTAG_ITEM(ACE_dogtag,95); + ACE_DOGTAG_ITEM(ACE_dogtag,96); + ACE_DOGTAG_ITEM(ACE_dogtag,97); + ACE_DOGTAG_ITEM(ACE_dogtag,98); + ACE_DOGTAG_ITEM(ACE_dogtag,99); + ACE_DOGTAG_ITEM(ACE_dogtag,100); + ACE_DOGTAG_ITEM(ACE_dogtag,101); + ACE_DOGTAG_ITEM(ACE_dogtag,102); + ACE_DOGTAG_ITEM(ACE_dogtag,103); + ACE_DOGTAG_ITEM(ACE_dogtag,104); + ACE_DOGTAG_ITEM(ACE_dogtag,105); + ACE_DOGTAG_ITEM(ACE_dogtag,106); + ACE_DOGTAG_ITEM(ACE_dogtag,107); + ACE_DOGTAG_ITEM(ACE_dogtag,108); + ACE_DOGTAG_ITEM(ACE_dogtag,109); + ACE_DOGTAG_ITEM(ACE_dogtag,110); + ACE_DOGTAG_ITEM(ACE_dogtag,111); + ACE_DOGTAG_ITEM(ACE_dogtag,112); + ACE_DOGTAG_ITEM(ACE_dogtag,113); + ACE_DOGTAG_ITEM(ACE_dogtag,114); + ACE_DOGTAG_ITEM(ACE_dogtag,115); + ACE_DOGTAG_ITEM(ACE_dogtag,116); + ACE_DOGTAG_ITEM(ACE_dogtag,117); + ACE_DOGTAG_ITEM(ACE_dogtag,118); + ACE_DOGTAG_ITEM(ACE_dogtag,119); + ACE_DOGTAG_ITEM(ACE_dogtag,120); + ACE_DOGTAG_ITEM(ACE_dogtag,121); + ACE_DOGTAG_ITEM(ACE_dogtag,122); + ACE_DOGTAG_ITEM(ACE_dogtag,123); + ACE_DOGTAG_ITEM(ACE_dogtag,124); + ACE_DOGTAG_ITEM(ACE_dogtag,125); + ACE_DOGTAG_ITEM(ACE_dogtag,126); + ACE_DOGTAG_ITEM(ACE_dogtag,127); + ACE_DOGTAG_ITEM(ACE_dogtag,128); + ACE_DOGTAG_ITEM(ACE_dogtag,129); + ACE_DOGTAG_ITEM(ACE_dogtag,130); + ACE_DOGTAG_ITEM(ACE_dogtag,131); + ACE_DOGTAG_ITEM(ACE_dogtag,132); + ACE_DOGTAG_ITEM(ACE_dogtag,133); + ACE_DOGTAG_ITEM(ACE_dogtag,134); + ACE_DOGTAG_ITEM(ACE_dogtag,135); + ACE_DOGTAG_ITEM(ACE_dogtag,136); + ACE_DOGTAG_ITEM(ACE_dogtag,137); + ACE_DOGTAG_ITEM(ACE_dogtag,138); + ACE_DOGTAG_ITEM(ACE_dogtag,139); + ACE_DOGTAG_ITEM(ACE_dogtag,140); + ACE_DOGTAG_ITEM(ACE_dogtag,141); + ACE_DOGTAG_ITEM(ACE_dogtag,142); + ACE_DOGTAG_ITEM(ACE_dogtag,143); + ACE_DOGTAG_ITEM(ACE_dogtag,144); + ACE_DOGTAG_ITEM(ACE_dogtag,145); + ACE_DOGTAG_ITEM(ACE_dogtag,146); + ACE_DOGTAG_ITEM(ACE_dogtag,147); + ACE_DOGTAG_ITEM(ACE_dogtag,148); + ACE_DOGTAG_ITEM(ACE_dogtag,149); + ACE_DOGTAG_ITEM(ACE_dogtag,150); + ACE_DOGTAG_ITEM(ACE_dogtag,151); + ACE_DOGTAG_ITEM(ACE_dogtag,152); + ACE_DOGTAG_ITEM(ACE_dogtag,153); + ACE_DOGTAG_ITEM(ACE_dogtag,154); + ACE_DOGTAG_ITEM(ACE_dogtag,155); + ACE_DOGTAG_ITEM(ACE_dogtag,156); + ACE_DOGTAG_ITEM(ACE_dogtag,157); + ACE_DOGTAG_ITEM(ACE_dogtag,158); + ACE_DOGTAG_ITEM(ACE_dogtag,159); + ACE_DOGTAG_ITEM(ACE_dogtag,160); + ACE_DOGTAG_ITEM(ACE_dogtag,161); + ACE_DOGTAG_ITEM(ACE_dogtag,162); + ACE_DOGTAG_ITEM(ACE_dogtag,163); + ACE_DOGTAG_ITEM(ACE_dogtag,164); + ACE_DOGTAG_ITEM(ACE_dogtag,165); + ACE_DOGTAG_ITEM(ACE_dogtag,166); + ACE_DOGTAG_ITEM(ACE_dogtag,167); + ACE_DOGTAG_ITEM(ACE_dogtag,168); + ACE_DOGTAG_ITEM(ACE_dogtag,169); + ACE_DOGTAG_ITEM(ACE_dogtag,170); + ACE_DOGTAG_ITEM(ACE_dogtag,171); + ACE_DOGTAG_ITEM(ACE_dogtag,172); + ACE_DOGTAG_ITEM(ACE_dogtag,173); + ACE_DOGTAG_ITEM(ACE_dogtag,174); + ACE_DOGTAG_ITEM(ACE_dogtag,175); + ACE_DOGTAG_ITEM(ACE_dogtag,176); + ACE_DOGTAG_ITEM(ACE_dogtag,177); + ACE_DOGTAG_ITEM(ACE_dogtag,178); + ACE_DOGTAG_ITEM(ACE_dogtag,179); + ACE_DOGTAG_ITEM(ACE_dogtag,180); + ACE_DOGTAG_ITEM(ACE_dogtag,181); + ACE_DOGTAG_ITEM(ACE_dogtag,182); + ACE_DOGTAG_ITEM(ACE_dogtag,183); + ACE_DOGTAG_ITEM(ACE_dogtag,184); + ACE_DOGTAG_ITEM(ACE_dogtag,185); + ACE_DOGTAG_ITEM(ACE_dogtag,186); + ACE_DOGTAG_ITEM(ACE_dogtag,187); + ACE_DOGTAG_ITEM(ACE_dogtag,188); + ACE_DOGTAG_ITEM(ACE_dogtag,189); + ACE_DOGTAG_ITEM(ACE_dogtag,190); + ACE_DOGTAG_ITEM(ACE_dogtag,191); + ACE_DOGTAG_ITEM(ACE_dogtag,192); + ACE_DOGTAG_ITEM(ACE_dogtag,193); + ACE_DOGTAG_ITEM(ACE_dogtag,194); + ACE_DOGTAG_ITEM(ACE_dogtag,195); + ACE_DOGTAG_ITEM(ACE_dogtag,196); + ACE_DOGTAG_ITEM(ACE_dogtag,197); + ACE_DOGTAG_ITEM(ACE_dogtag,198); + ACE_DOGTAG_ITEM(ACE_dogtag,199); + ACE_DOGTAG_ITEM(ACE_dogtag,200); + ACE_DOGTAG_ITEM(ACE_dogtag,201); + ACE_DOGTAG_ITEM(ACE_dogtag,202); + ACE_DOGTAG_ITEM(ACE_dogtag,203); + ACE_DOGTAG_ITEM(ACE_dogtag,204); + ACE_DOGTAG_ITEM(ACE_dogtag,205); + ACE_DOGTAG_ITEM(ACE_dogtag,206); + ACE_DOGTAG_ITEM(ACE_dogtag,207); + ACE_DOGTAG_ITEM(ACE_dogtag,208); + ACE_DOGTAG_ITEM(ACE_dogtag,209); + ACE_DOGTAG_ITEM(ACE_dogtag,210); + ACE_DOGTAG_ITEM(ACE_dogtag,211); + ACE_DOGTAG_ITEM(ACE_dogtag,212); + ACE_DOGTAG_ITEM(ACE_dogtag,213); + ACE_DOGTAG_ITEM(ACE_dogtag,214); + ACE_DOGTAG_ITEM(ACE_dogtag,215); + ACE_DOGTAG_ITEM(ACE_dogtag,216); + ACE_DOGTAG_ITEM(ACE_dogtag,217); + ACE_DOGTAG_ITEM(ACE_dogtag,218); + ACE_DOGTAG_ITEM(ACE_dogtag,219); + ACE_DOGTAG_ITEM(ACE_dogtag,220); + ACE_DOGTAG_ITEM(ACE_dogtag,221); + ACE_DOGTAG_ITEM(ACE_dogtag,222); + ACE_DOGTAG_ITEM(ACE_dogtag,223); + ACE_DOGTAG_ITEM(ACE_dogtag,224); + ACE_DOGTAG_ITEM(ACE_dogtag,225); + ACE_DOGTAG_ITEM(ACE_dogtag,226); + ACE_DOGTAG_ITEM(ACE_dogtag,227); + ACE_DOGTAG_ITEM(ACE_dogtag,228); + ACE_DOGTAG_ITEM(ACE_dogtag,229); + ACE_DOGTAG_ITEM(ACE_dogtag,230); + ACE_DOGTAG_ITEM(ACE_dogtag,231); + ACE_DOGTAG_ITEM(ACE_dogtag,232); + ACE_DOGTAG_ITEM(ACE_dogtag,233); + ACE_DOGTAG_ITEM(ACE_dogtag,234); + ACE_DOGTAG_ITEM(ACE_dogtag,235); + ACE_DOGTAG_ITEM(ACE_dogtag,236); + ACE_DOGTAG_ITEM(ACE_dogtag,237); + ACE_DOGTAG_ITEM(ACE_dogtag,238); + ACE_DOGTAG_ITEM(ACE_dogtag,239); + ACE_DOGTAG_ITEM(ACE_dogtag,240); + ACE_DOGTAG_ITEM(ACE_dogtag,241); + ACE_DOGTAG_ITEM(ACE_dogtag,242); + ACE_DOGTAG_ITEM(ACE_dogtag,243); + ACE_DOGTAG_ITEM(ACE_dogtag,244); + ACE_DOGTAG_ITEM(ACE_dogtag,245); + ACE_DOGTAG_ITEM(ACE_dogtag,246); + ACE_DOGTAG_ITEM(ACE_dogtag,247); + ACE_DOGTAG_ITEM(ACE_dogtag,248); + ACE_DOGTAG_ITEM(ACE_dogtag,249); + ACE_DOGTAG_ITEM(ACE_dogtag,250); + ACE_DOGTAG_ITEM(ACE_dogtag,251); + ACE_DOGTAG_ITEM(ACE_dogtag,252); + ACE_DOGTAG_ITEM(ACE_dogtag,253); + ACE_DOGTAG_ITEM(ACE_dogtag,254); + ACE_DOGTAG_ITEM(ACE_dogtag,255); + ACE_DOGTAG_ITEM(ACE_dogtag,256); + ACE_DOGTAG_ITEM(ACE_dogtag,257); + ACE_DOGTAG_ITEM(ACE_dogtag,258); + ACE_DOGTAG_ITEM(ACE_dogtag,259); + ACE_DOGTAG_ITEM(ACE_dogtag,260); + ACE_DOGTAG_ITEM(ACE_dogtag,261); + ACE_DOGTAG_ITEM(ACE_dogtag,262); + ACE_DOGTAG_ITEM(ACE_dogtag,263); + ACE_DOGTAG_ITEM(ACE_dogtag,264); + ACE_DOGTAG_ITEM(ACE_dogtag,265); + ACE_DOGTAG_ITEM(ACE_dogtag,266); + ACE_DOGTAG_ITEM(ACE_dogtag,267); + ACE_DOGTAG_ITEM(ACE_dogtag,268); + ACE_DOGTAG_ITEM(ACE_dogtag,269); + ACE_DOGTAG_ITEM(ACE_dogtag,270); + ACE_DOGTAG_ITEM(ACE_dogtag,271); + ACE_DOGTAG_ITEM(ACE_dogtag,272); + ACE_DOGTAG_ITEM(ACE_dogtag,273); + ACE_DOGTAG_ITEM(ACE_dogtag,274); + ACE_DOGTAG_ITEM(ACE_dogtag,275); + ACE_DOGTAG_ITEM(ACE_dogtag,276); + ACE_DOGTAG_ITEM(ACE_dogtag,277); + ACE_DOGTAG_ITEM(ACE_dogtag,278); + ACE_DOGTAG_ITEM(ACE_dogtag,279); + ACE_DOGTAG_ITEM(ACE_dogtag,280); + ACE_DOGTAG_ITEM(ACE_dogtag,281); + ACE_DOGTAG_ITEM(ACE_dogtag,282); + ACE_DOGTAG_ITEM(ACE_dogtag,283); + ACE_DOGTAG_ITEM(ACE_dogtag,284); + ACE_DOGTAG_ITEM(ACE_dogtag,285); + ACE_DOGTAG_ITEM(ACE_dogtag,286); + ACE_DOGTAG_ITEM(ACE_dogtag,287); + ACE_DOGTAG_ITEM(ACE_dogtag,288); + ACE_DOGTAG_ITEM(ACE_dogtag,289); + ACE_DOGTAG_ITEM(ACE_dogtag,290); + ACE_DOGTAG_ITEM(ACE_dogtag,291); + ACE_DOGTAG_ITEM(ACE_dogtag,292); + ACE_DOGTAG_ITEM(ACE_dogtag,293); + ACE_DOGTAG_ITEM(ACE_dogtag,294); + ACE_DOGTAG_ITEM(ACE_dogtag,295); + ACE_DOGTAG_ITEM(ACE_dogtag,296); + ACE_DOGTAG_ITEM(ACE_dogtag,297); + ACE_DOGTAG_ITEM(ACE_dogtag,298); + ACE_DOGTAG_ITEM(ACE_dogtag,299); + ACE_DOGTAG_ITEM(ACE_dogtag,300); + ACE_DOGTAG_ITEM(ACE_dogtag,301); + ACE_DOGTAG_ITEM(ACE_dogtag,302); + ACE_DOGTAG_ITEM(ACE_dogtag,303); + ACE_DOGTAG_ITEM(ACE_dogtag,304); + ACE_DOGTAG_ITEM(ACE_dogtag,305); + ACE_DOGTAG_ITEM(ACE_dogtag,306); + ACE_DOGTAG_ITEM(ACE_dogtag,307); + ACE_DOGTAG_ITEM(ACE_dogtag,308); + ACE_DOGTAG_ITEM(ACE_dogtag,309); + ACE_DOGTAG_ITEM(ACE_dogtag,310); + ACE_DOGTAG_ITEM(ACE_dogtag,311); + ACE_DOGTAG_ITEM(ACE_dogtag,312); + ACE_DOGTAG_ITEM(ACE_dogtag,313); + ACE_DOGTAG_ITEM(ACE_dogtag,314); + ACE_DOGTAG_ITEM(ACE_dogtag,315); + ACE_DOGTAG_ITEM(ACE_dogtag,316); + ACE_DOGTAG_ITEM(ACE_dogtag,317); + ACE_DOGTAG_ITEM(ACE_dogtag,318); + ACE_DOGTAG_ITEM(ACE_dogtag,319); + ACE_DOGTAG_ITEM(ACE_dogtag,320); + ACE_DOGTAG_ITEM(ACE_dogtag,321); + ACE_DOGTAG_ITEM(ACE_dogtag,322); + ACE_DOGTAG_ITEM(ACE_dogtag,323); + ACE_DOGTAG_ITEM(ACE_dogtag,324); + ACE_DOGTAG_ITEM(ACE_dogtag,325); + ACE_DOGTAG_ITEM(ACE_dogtag,326); + ACE_DOGTAG_ITEM(ACE_dogtag,327); + ACE_DOGTAG_ITEM(ACE_dogtag,328); + ACE_DOGTAG_ITEM(ACE_dogtag,329); + ACE_DOGTAG_ITEM(ACE_dogtag,330); + ACE_DOGTAG_ITEM(ACE_dogtag,331); + ACE_DOGTAG_ITEM(ACE_dogtag,332); + ACE_DOGTAG_ITEM(ACE_dogtag,333); + ACE_DOGTAG_ITEM(ACE_dogtag,334); + ACE_DOGTAG_ITEM(ACE_dogtag,335); + ACE_DOGTAG_ITEM(ACE_dogtag,336); + ACE_DOGTAG_ITEM(ACE_dogtag,337); + ACE_DOGTAG_ITEM(ACE_dogtag,338); + ACE_DOGTAG_ITEM(ACE_dogtag,339); + ACE_DOGTAG_ITEM(ACE_dogtag,340); + ACE_DOGTAG_ITEM(ACE_dogtag,341); + ACE_DOGTAG_ITEM(ACE_dogtag,342); + ACE_DOGTAG_ITEM(ACE_dogtag,343); + ACE_DOGTAG_ITEM(ACE_dogtag,344); + ACE_DOGTAG_ITEM(ACE_dogtag,345); + ACE_DOGTAG_ITEM(ACE_dogtag,346); + ACE_DOGTAG_ITEM(ACE_dogtag,347); + ACE_DOGTAG_ITEM(ACE_dogtag,348); + ACE_DOGTAG_ITEM(ACE_dogtag,349); + ACE_DOGTAG_ITEM(ACE_dogtag,350); + ACE_DOGTAG_ITEM(ACE_dogtag,351); + ACE_DOGTAG_ITEM(ACE_dogtag,352); + ACE_DOGTAG_ITEM(ACE_dogtag,353); + ACE_DOGTAG_ITEM(ACE_dogtag,354); + ACE_DOGTAG_ITEM(ACE_dogtag,355); + ACE_DOGTAG_ITEM(ACE_dogtag,356); + ACE_DOGTAG_ITEM(ACE_dogtag,357); + ACE_DOGTAG_ITEM(ACE_dogtag,358); + ACE_DOGTAG_ITEM(ACE_dogtag,359); + ACE_DOGTAG_ITEM(ACE_dogtag,360); + ACE_DOGTAG_ITEM(ACE_dogtag,361); + ACE_DOGTAG_ITEM(ACE_dogtag,362); + ACE_DOGTAG_ITEM(ACE_dogtag,363); + ACE_DOGTAG_ITEM(ACE_dogtag,364); + ACE_DOGTAG_ITEM(ACE_dogtag,365); + ACE_DOGTAG_ITEM(ACE_dogtag,366); + ACE_DOGTAG_ITEM(ACE_dogtag,367); + ACE_DOGTAG_ITEM(ACE_dogtag,368); + ACE_DOGTAG_ITEM(ACE_dogtag,369); + ACE_DOGTAG_ITEM(ACE_dogtag,370); + ACE_DOGTAG_ITEM(ACE_dogtag,371); + ACE_DOGTAG_ITEM(ACE_dogtag,372); + ACE_DOGTAG_ITEM(ACE_dogtag,373); + ACE_DOGTAG_ITEM(ACE_dogtag,374); + ACE_DOGTAG_ITEM(ACE_dogtag,375); + ACE_DOGTAG_ITEM(ACE_dogtag,376); + ACE_DOGTAG_ITEM(ACE_dogtag,377); + ACE_DOGTAG_ITEM(ACE_dogtag,378); + ACE_DOGTAG_ITEM(ACE_dogtag,379); + ACE_DOGTAG_ITEM(ACE_dogtag,380); + ACE_DOGTAG_ITEM(ACE_dogtag,381); + ACE_DOGTAG_ITEM(ACE_dogtag,382); + ACE_DOGTAG_ITEM(ACE_dogtag,383); + ACE_DOGTAG_ITEM(ACE_dogtag,384); + ACE_DOGTAG_ITEM(ACE_dogtag,385); + ACE_DOGTAG_ITEM(ACE_dogtag,386); + ACE_DOGTAG_ITEM(ACE_dogtag,387); + ACE_DOGTAG_ITEM(ACE_dogtag,388); + ACE_DOGTAG_ITEM(ACE_dogtag,389); + ACE_DOGTAG_ITEM(ACE_dogtag,390); + ACE_DOGTAG_ITEM(ACE_dogtag,391); + ACE_DOGTAG_ITEM(ACE_dogtag,392); + ACE_DOGTAG_ITEM(ACE_dogtag,393); + ACE_DOGTAG_ITEM(ACE_dogtag,394); + ACE_DOGTAG_ITEM(ACE_dogtag,395); + ACE_DOGTAG_ITEM(ACE_dogtag,396); + ACE_DOGTAG_ITEM(ACE_dogtag,397); + ACE_DOGTAG_ITEM(ACE_dogtag,398); + ACE_DOGTAG_ITEM(ACE_dogtag,399); + ACE_DOGTAG_ITEM(ACE_dogtag,400); + ACE_DOGTAG_ITEM(ACE_dogtag,401); + ACE_DOGTAG_ITEM(ACE_dogtag,402); + ACE_DOGTAG_ITEM(ACE_dogtag,403); + ACE_DOGTAG_ITEM(ACE_dogtag,404); + ACE_DOGTAG_ITEM(ACE_dogtag,405); + ACE_DOGTAG_ITEM(ACE_dogtag,406); + ACE_DOGTAG_ITEM(ACE_dogtag,407); + ACE_DOGTAG_ITEM(ACE_dogtag,408); + ACE_DOGTAG_ITEM(ACE_dogtag,409); + ACE_DOGTAG_ITEM(ACE_dogtag,410); + ACE_DOGTAG_ITEM(ACE_dogtag,411); + ACE_DOGTAG_ITEM(ACE_dogtag,412); + ACE_DOGTAG_ITEM(ACE_dogtag,413); + ACE_DOGTAG_ITEM(ACE_dogtag,414); + ACE_DOGTAG_ITEM(ACE_dogtag,415); + ACE_DOGTAG_ITEM(ACE_dogtag,416); + ACE_DOGTAG_ITEM(ACE_dogtag,417); + ACE_DOGTAG_ITEM(ACE_dogtag,418); + ACE_DOGTAG_ITEM(ACE_dogtag,419); + ACE_DOGTAG_ITEM(ACE_dogtag,420); + ACE_DOGTAG_ITEM(ACE_dogtag,421); + ACE_DOGTAG_ITEM(ACE_dogtag,422); + ACE_DOGTAG_ITEM(ACE_dogtag,423); + ACE_DOGTAG_ITEM(ACE_dogtag,424); + ACE_DOGTAG_ITEM(ACE_dogtag,425); + ACE_DOGTAG_ITEM(ACE_dogtag,426); + ACE_DOGTAG_ITEM(ACE_dogtag,427); + ACE_DOGTAG_ITEM(ACE_dogtag,428); + ACE_DOGTAG_ITEM(ACE_dogtag,429); + ACE_DOGTAG_ITEM(ACE_dogtag,430); + ACE_DOGTAG_ITEM(ACE_dogtag,431); + ACE_DOGTAG_ITEM(ACE_dogtag,432); + ACE_DOGTAG_ITEM(ACE_dogtag,433); + ACE_DOGTAG_ITEM(ACE_dogtag,434); + ACE_DOGTAG_ITEM(ACE_dogtag,435); + ACE_DOGTAG_ITEM(ACE_dogtag,436); + ACE_DOGTAG_ITEM(ACE_dogtag,437); + ACE_DOGTAG_ITEM(ACE_dogtag,438); + ACE_DOGTAG_ITEM(ACE_dogtag,439); + ACE_DOGTAG_ITEM(ACE_dogtag,440); + ACE_DOGTAG_ITEM(ACE_dogtag,441); + ACE_DOGTAG_ITEM(ACE_dogtag,442); + ACE_DOGTAG_ITEM(ACE_dogtag,443); + ACE_DOGTAG_ITEM(ACE_dogtag,444); + ACE_DOGTAG_ITEM(ACE_dogtag,445); + ACE_DOGTAG_ITEM(ACE_dogtag,446); + ACE_DOGTAG_ITEM(ACE_dogtag,447); + ACE_DOGTAG_ITEM(ACE_dogtag,448); + ACE_DOGTAG_ITEM(ACE_dogtag,449); + ACE_DOGTAG_ITEM(ACE_dogtag,450); + ACE_DOGTAG_ITEM(ACE_dogtag,451); + ACE_DOGTAG_ITEM(ACE_dogtag,452); + ACE_DOGTAG_ITEM(ACE_dogtag,453); + ACE_DOGTAG_ITEM(ACE_dogtag,454); + ACE_DOGTAG_ITEM(ACE_dogtag,455); + ACE_DOGTAG_ITEM(ACE_dogtag,456); + ACE_DOGTAG_ITEM(ACE_dogtag,457); + ACE_DOGTAG_ITEM(ACE_dogtag,458); + ACE_DOGTAG_ITEM(ACE_dogtag,459); + ACE_DOGTAG_ITEM(ACE_dogtag,460); + ACE_DOGTAG_ITEM(ACE_dogtag,461); + ACE_DOGTAG_ITEM(ACE_dogtag,462); + ACE_DOGTAG_ITEM(ACE_dogtag,463); + ACE_DOGTAG_ITEM(ACE_dogtag,464); + ACE_DOGTAG_ITEM(ACE_dogtag,465); + ACE_DOGTAG_ITEM(ACE_dogtag,466); + ACE_DOGTAG_ITEM(ACE_dogtag,467); + ACE_DOGTAG_ITEM(ACE_dogtag,468); + ACE_DOGTAG_ITEM(ACE_dogtag,469); + ACE_DOGTAG_ITEM(ACE_dogtag,470); + ACE_DOGTAG_ITEM(ACE_dogtag,471); + ACE_DOGTAG_ITEM(ACE_dogtag,472); + ACE_DOGTAG_ITEM(ACE_dogtag,473); + ACE_DOGTAG_ITEM(ACE_dogtag,474); + ACE_DOGTAG_ITEM(ACE_dogtag,475); + ACE_DOGTAG_ITEM(ACE_dogtag,476); + ACE_DOGTAG_ITEM(ACE_dogtag,477); + ACE_DOGTAG_ITEM(ACE_dogtag,478); + ACE_DOGTAG_ITEM(ACE_dogtag,479); + ACE_DOGTAG_ITEM(ACE_dogtag,480); + ACE_DOGTAG_ITEM(ACE_dogtag,481); + ACE_DOGTAG_ITEM(ACE_dogtag,482); + ACE_DOGTAG_ITEM(ACE_dogtag,483); + ACE_DOGTAG_ITEM(ACE_dogtag,484); + ACE_DOGTAG_ITEM(ACE_dogtag,485); + ACE_DOGTAG_ITEM(ACE_dogtag,486); + ACE_DOGTAG_ITEM(ACE_dogtag,487); + ACE_DOGTAG_ITEM(ACE_dogtag,488); + ACE_DOGTAG_ITEM(ACE_dogtag,489); + ACE_DOGTAG_ITEM(ACE_dogtag,490); + ACE_DOGTAG_ITEM(ACE_dogtag,491); + ACE_DOGTAG_ITEM(ACE_dogtag,492); + ACE_DOGTAG_ITEM(ACE_dogtag,493); + ACE_DOGTAG_ITEM(ACE_dogtag,494); + ACE_DOGTAG_ITEM(ACE_dogtag,495); + ACE_DOGTAG_ITEM(ACE_dogtag,496); + ACE_DOGTAG_ITEM(ACE_dogtag,497); + ACE_DOGTAG_ITEM(ACE_dogtag,498); + ACE_DOGTAG_ITEM(ACE_dogtag,499); + ACE_DOGTAG_ITEM(ACE_dogtag,500); + ACE_DOGTAG_ITEM(ACE_dogtag,501); + ACE_DOGTAG_ITEM(ACE_dogtag,502); + ACE_DOGTAG_ITEM(ACE_dogtag,503); + ACE_DOGTAG_ITEM(ACE_dogtag,504); + ACE_DOGTAG_ITEM(ACE_dogtag,505); + ACE_DOGTAG_ITEM(ACE_dogtag,506); + ACE_DOGTAG_ITEM(ACE_dogtag,507); + ACE_DOGTAG_ITEM(ACE_dogtag,508); + ACE_DOGTAG_ITEM(ACE_dogtag,509); + ACE_DOGTAG_ITEM(ACE_dogtag,510); + ACE_DOGTAG_ITEM(ACE_dogtag,511); + ACE_DOGTAG_ITEM(ACE_dogtag,512); + ACE_DOGTAG_ITEM(ACE_dogtag,513); + ACE_DOGTAG_ITEM(ACE_dogtag,514); + ACE_DOGTAG_ITEM(ACE_dogtag,515); + ACE_DOGTAG_ITEM(ACE_dogtag,516); + ACE_DOGTAG_ITEM(ACE_dogtag,517); + ACE_DOGTAG_ITEM(ACE_dogtag,518); + ACE_DOGTAG_ITEM(ACE_dogtag,519); + ACE_DOGTAG_ITEM(ACE_dogtag,520); + ACE_DOGTAG_ITEM(ACE_dogtag,521); + ACE_DOGTAG_ITEM(ACE_dogtag,522); + ACE_DOGTAG_ITEM(ACE_dogtag,523); + ACE_DOGTAG_ITEM(ACE_dogtag,524); + ACE_DOGTAG_ITEM(ACE_dogtag,525); + ACE_DOGTAG_ITEM(ACE_dogtag,526); + ACE_DOGTAG_ITEM(ACE_dogtag,527); + ACE_DOGTAG_ITEM(ACE_dogtag,528); + ACE_DOGTAG_ITEM(ACE_dogtag,529); + ACE_DOGTAG_ITEM(ACE_dogtag,530); + ACE_DOGTAG_ITEM(ACE_dogtag,531); + ACE_DOGTAG_ITEM(ACE_dogtag,532); + ACE_DOGTAG_ITEM(ACE_dogtag,533); + ACE_DOGTAG_ITEM(ACE_dogtag,534); + ACE_DOGTAG_ITEM(ACE_dogtag,535); + ACE_DOGTAG_ITEM(ACE_dogtag,536); + ACE_DOGTAG_ITEM(ACE_dogtag,537); + ACE_DOGTAG_ITEM(ACE_dogtag,538); + ACE_DOGTAG_ITEM(ACE_dogtag,539); + ACE_DOGTAG_ITEM(ACE_dogtag,540); + ACE_DOGTAG_ITEM(ACE_dogtag,541); + ACE_DOGTAG_ITEM(ACE_dogtag,542); + ACE_DOGTAG_ITEM(ACE_dogtag,543); + ACE_DOGTAG_ITEM(ACE_dogtag,544); + ACE_DOGTAG_ITEM(ACE_dogtag,545); + ACE_DOGTAG_ITEM(ACE_dogtag,546); + ACE_DOGTAG_ITEM(ACE_dogtag,547); + ACE_DOGTAG_ITEM(ACE_dogtag,548); + ACE_DOGTAG_ITEM(ACE_dogtag,549); + ACE_DOGTAG_ITEM(ACE_dogtag,550); + ACE_DOGTAG_ITEM(ACE_dogtag,551); + ACE_DOGTAG_ITEM(ACE_dogtag,552); + ACE_DOGTAG_ITEM(ACE_dogtag,553); + ACE_DOGTAG_ITEM(ACE_dogtag,554); + ACE_DOGTAG_ITEM(ACE_dogtag,555); + ACE_DOGTAG_ITEM(ACE_dogtag,556); + ACE_DOGTAG_ITEM(ACE_dogtag,557); + ACE_DOGTAG_ITEM(ACE_dogtag,558); + ACE_DOGTAG_ITEM(ACE_dogtag,559); + ACE_DOGTAG_ITEM(ACE_dogtag,560); + ACE_DOGTAG_ITEM(ACE_dogtag,561); + ACE_DOGTAG_ITEM(ACE_dogtag,562); + ACE_DOGTAG_ITEM(ACE_dogtag,563); + ACE_DOGTAG_ITEM(ACE_dogtag,564); + ACE_DOGTAG_ITEM(ACE_dogtag,565); + ACE_DOGTAG_ITEM(ACE_dogtag,566); + ACE_DOGTAG_ITEM(ACE_dogtag,567); + ACE_DOGTAG_ITEM(ACE_dogtag,568); + ACE_DOGTAG_ITEM(ACE_dogtag,569); + ACE_DOGTAG_ITEM(ACE_dogtag,570); + ACE_DOGTAG_ITEM(ACE_dogtag,571); + ACE_DOGTAG_ITEM(ACE_dogtag,572); + ACE_DOGTAG_ITEM(ACE_dogtag,573); + ACE_DOGTAG_ITEM(ACE_dogtag,574); + ACE_DOGTAG_ITEM(ACE_dogtag,575); + ACE_DOGTAG_ITEM(ACE_dogtag,576); + ACE_DOGTAG_ITEM(ACE_dogtag,577); + ACE_DOGTAG_ITEM(ACE_dogtag,578); + ACE_DOGTAG_ITEM(ACE_dogtag,579); + ACE_DOGTAG_ITEM(ACE_dogtag,580); + ACE_DOGTAG_ITEM(ACE_dogtag,581); + ACE_DOGTAG_ITEM(ACE_dogtag,582); + ACE_DOGTAG_ITEM(ACE_dogtag,583); + ACE_DOGTAG_ITEM(ACE_dogtag,584); + ACE_DOGTAG_ITEM(ACE_dogtag,585); + ACE_DOGTAG_ITEM(ACE_dogtag,586); + ACE_DOGTAG_ITEM(ACE_dogtag,587); + ACE_DOGTAG_ITEM(ACE_dogtag,588); + ACE_DOGTAG_ITEM(ACE_dogtag,589); + ACE_DOGTAG_ITEM(ACE_dogtag,590); + ACE_DOGTAG_ITEM(ACE_dogtag,591); + ACE_DOGTAG_ITEM(ACE_dogtag,592); + ACE_DOGTAG_ITEM(ACE_dogtag,593); + ACE_DOGTAG_ITEM(ACE_dogtag,594); + ACE_DOGTAG_ITEM(ACE_dogtag,595); + ACE_DOGTAG_ITEM(ACE_dogtag,596); + ACE_DOGTAG_ITEM(ACE_dogtag,597); + ACE_DOGTAG_ITEM(ACE_dogtag,598); + ACE_DOGTAG_ITEM(ACE_dogtag,599); + ACE_DOGTAG_ITEM(ACE_dogtag,600); + ACE_DOGTAG_ITEM(ACE_dogtag,601); + ACE_DOGTAG_ITEM(ACE_dogtag,602); + ACE_DOGTAG_ITEM(ACE_dogtag,603); + ACE_DOGTAG_ITEM(ACE_dogtag,604); + ACE_DOGTAG_ITEM(ACE_dogtag,605); + ACE_DOGTAG_ITEM(ACE_dogtag,606); + ACE_DOGTAG_ITEM(ACE_dogtag,607); + ACE_DOGTAG_ITEM(ACE_dogtag,608); + ACE_DOGTAG_ITEM(ACE_dogtag,609); + ACE_DOGTAG_ITEM(ACE_dogtag,610); + ACE_DOGTAG_ITEM(ACE_dogtag,611); + ACE_DOGTAG_ITEM(ACE_dogtag,612); + ACE_DOGTAG_ITEM(ACE_dogtag,613); + ACE_DOGTAG_ITEM(ACE_dogtag,614); + ACE_DOGTAG_ITEM(ACE_dogtag,615); + ACE_DOGTAG_ITEM(ACE_dogtag,616); + ACE_DOGTAG_ITEM(ACE_dogtag,617); + ACE_DOGTAG_ITEM(ACE_dogtag,618); + ACE_DOGTAG_ITEM(ACE_dogtag,619); + ACE_DOGTAG_ITEM(ACE_dogtag,620); + ACE_DOGTAG_ITEM(ACE_dogtag,621); + ACE_DOGTAG_ITEM(ACE_dogtag,622); + ACE_DOGTAG_ITEM(ACE_dogtag,623); + ACE_DOGTAG_ITEM(ACE_dogtag,624); + ACE_DOGTAG_ITEM(ACE_dogtag,625); + ACE_DOGTAG_ITEM(ACE_dogtag,626); + ACE_DOGTAG_ITEM(ACE_dogtag,627); + ACE_DOGTAG_ITEM(ACE_dogtag,628); + ACE_DOGTAG_ITEM(ACE_dogtag,629); + ACE_DOGTAG_ITEM(ACE_dogtag,630); + ACE_DOGTAG_ITEM(ACE_dogtag,631); + ACE_DOGTAG_ITEM(ACE_dogtag,632); + ACE_DOGTAG_ITEM(ACE_dogtag,633); + ACE_DOGTAG_ITEM(ACE_dogtag,634); + ACE_DOGTAG_ITEM(ACE_dogtag,635); + ACE_DOGTAG_ITEM(ACE_dogtag,636); + ACE_DOGTAG_ITEM(ACE_dogtag,637); + ACE_DOGTAG_ITEM(ACE_dogtag,638); + ACE_DOGTAG_ITEM(ACE_dogtag,639); + ACE_DOGTAG_ITEM(ACE_dogtag,640); + ACE_DOGTAG_ITEM(ACE_dogtag,641); + ACE_DOGTAG_ITEM(ACE_dogtag,642); + ACE_DOGTAG_ITEM(ACE_dogtag,643); + ACE_DOGTAG_ITEM(ACE_dogtag,644); + ACE_DOGTAG_ITEM(ACE_dogtag,645); + ACE_DOGTAG_ITEM(ACE_dogtag,646); + ACE_DOGTAG_ITEM(ACE_dogtag,647); + ACE_DOGTAG_ITEM(ACE_dogtag,648); + ACE_DOGTAG_ITEM(ACE_dogtag,649); + ACE_DOGTAG_ITEM(ACE_dogtag,650); + ACE_DOGTAG_ITEM(ACE_dogtag,651); + ACE_DOGTAG_ITEM(ACE_dogtag,652); + ACE_DOGTAG_ITEM(ACE_dogtag,653); + ACE_DOGTAG_ITEM(ACE_dogtag,654); + ACE_DOGTAG_ITEM(ACE_dogtag,655); + ACE_DOGTAG_ITEM(ACE_dogtag,656); + ACE_DOGTAG_ITEM(ACE_dogtag,657); + ACE_DOGTAG_ITEM(ACE_dogtag,658); + ACE_DOGTAG_ITEM(ACE_dogtag,659); + ACE_DOGTAG_ITEM(ACE_dogtag,660); + ACE_DOGTAG_ITEM(ACE_dogtag,661); + ACE_DOGTAG_ITEM(ACE_dogtag,662); + ACE_DOGTAG_ITEM(ACE_dogtag,663); + ACE_DOGTAG_ITEM(ACE_dogtag,664); + ACE_DOGTAG_ITEM(ACE_dogtag,665); + ACE_DOGTAG_ITEM(ACE_dogtag,666); + ACE_DOGTAG_ITEM(ACE_dogtag,667); + ACE_DOGTAG_ITEM(ACE_dogtag,668); + ACE_DOGTAG_ITEM(ACE_dogtag,669); + ACE_DOGTAG_ITEM(ACE_dogtag,670); + ACE_DOGTAG_ITEM(ACE_dogtag,671); + ACE_DOGTAG_ITEM(ACE_dogtag,672); + ACE_DOGTAG_ITEM(ACE_dogtag,673); + ACE_DOGTAG_ITEM(ACE_dogtag,674); + ACE_DOGTAG_ITEM(ACE_dogtag,675); + ACE_DOGTAG_ITEM(ACE_dogtag,676); + ACE_DOGTAG_ITEM(ACE_dogtag,677); + ACE_DOGTAG_ITEM(ACE_dogtag,678); + ACE_DOGTAG_ITEM(ACE_dogtag,679); + ACE_DOGTAG_ITEM(ACE_dogtag,680); + ACE_DOGTAG_ITEM(ACE_dogtag,681); + ACE_DOGTAG_ITEM(ACE_dogtag,682); + ACE_DOGTAG_ITEM(ACE_dogtag,683); + ACE_DOGTAG_ITEM(ACE_dogtag,684); + ACE_DOGTAG_ITEM(ACE_dogtag,685); + ACE_DOGTAG_ITEM(ACE_dogtag,686); + ACE_DOGTAG_ITEM(ACE_dogtag,687); + ACE_DOGTAG_ITEM(ACE_dogtag,688); + ACE_DOGTAG_ITEM(ACE_dogtag,689); + ACE_DOGTAG_ITEM(ACE_dogtag,690); + ACE_DOGTAG_ITEM(ACE_dogtag,691); + ACE_DOGTAG_ITEM(ACE_dogtag,692); + ACE_DOGTAG_ITEM(ACE_dogtag,693); + ACE_DOGTAG_ITEM(ACE_dogtag,694); + ACE_DOGTAG_ITEM(ACE_dogtag,695); + ACE_DOGTAG_ITEM(ACE_dogtag,696); + ACE_DOGTAG_ITEM(ACE_dogtag,697); + ACE_DOGTAG_ITEM(ACE_dogtag,698); + ACE_DOGTAG_ITEM(ACE_dogtag,699); + ACE_DOGTAG_ITEM(ACE_dogtag,700); + ACE_DOGTAG_ITEM(ACE_dogtag,701); + ACE_DOGTAG_ITEM(ACE_dogtag,702); + ACE_DOGTAG_ITEM(ACE_dogtag,703); + ACE_DOGTAG_ITEM(ACE_dogtag,704); + ACE_DOGTAG_ITEM(ACE_dogtag,705); + ACE_DOGTAG_ITEM(ACE_dogtag,706); + ACE_DOGTAG_ITEM(ACE_dogtag,707); + ACE_DOGTAG_ITEM(ACE_dogtag,708); + ACE_DOGTAG_ITEM(ACE_dogtag,709); + ACE_DOGTAG_ITEM(ACE_dogtag,710); + ACE_DOGTAG_ITEM(ACE_dogtag,711); + ACE_DOGTAG_ITEM(ACE_dogtag,712); + ACE_DOGTAG_ITEM(ACE_dogtag,713); + ACE_DOGTAG_ITEM(ACE_dogtag,714); + ACE_DOGTAG_ITEM(ACE_dogtag,715); + ACE_DOGTAG_ITEM(ACE_dogtag,716); + ACE_DOGTAG_ITEM(ACE_dogtag,717); + ACE_DOGTAG_ITEM(ACE_dogtag,718); + ACE_DOGTAG_ITEM(ACE_dogtag,719); + ACE_DOGTAG_ITEM(ACE_dogtag,720); + ACE_DOGTAG_ITEM(ACE_dogtag,721); + ACE_DOGTAG_ITEM(ACE_dogtag,722); + ACE_DOGTAG_ITEM(ACE_dogtag,723); + ACE_DOGTAG_ITEM(ACE_dogtag,724); + ACE_DOGTAG_ITEM(ACE_dogtag,725); + ACE_DOGTAG_ITEM(ACE_dogtag,726); + ACE_DOGTAG_ITEM(ACE_dogtag,727); + ACE_DOGTAG_ITEM(ACE_dogtag,728); + ACE_DOGTAG_ITEM(ACE_dogtag,729); + ACE_DOGTAG_ITEM(ACE_dogtag,730); + ACE_DOGTAG_ITEM(ACE_dogtag,731); + ACE_DOGTAG_ITEM(ACE_dogtag,732); + ACE_DOGTAG_ITEM(ACE_dogtag,733); + ACE_DOGTAG_ITEM(ACE_dogtag,734); + ACE_DOGTAG_ITEM(ACE_dogtag,735); + ACE_DOGTAG_ITEM(ACE_dogtag,736); + ACE_DOGTAG_ITEM(ACE_dogtag,737); + ACE_DOGTAG_ITEM(ACE_dogtag,738); + ACE_DOGTAG_ITEM(ACE_dogtag,739); + ACE_DOGTAG_ITEM(ACE_dogtag,740); + ACE_DOGTAG_ITEM(ACE_dogtag,741); + ACE_DOGTAG_ITEM(ACE_dogtag,742); + ACE_DOGTAG_ITEM(ACE_dogtag,743); + ACE_DOGTAG_ITEM(ACE_dogtag,744); + ACE_DOGTAG_ITEM(ACE_dogtag,745); + ACE_DOGTAG_ITEM(ACE_dogtag,746); + ACE_DOGTAG_ITEM(ACE_dogtag,747); + ACE_DOGTAG_ITEM(ACE_dogtag,748); + ACE_DOGTAG_ITEM(ACE_dogtag,749); + ACE_DOGTAG_ITEM(ACE_dogtag,750); + ACE_DOGTAG_ITEM(ACE_dogtag,751); + ACE_DOGTAG_ITEM(ACE_dogtag,752); + ACE_DOGTAG_ITEM(ACE_dogtag,753); + ACE_DOGTAG_ITEM(ACE_dogtag,754); + ACE_DOGTAG_ITEM(ACE_dogtag,755); + ACE_DOGTAG_ITEM(ACE_dogtag,756); + ACE_DOGTAG_ITEM(ACE_dogtag,757); + ACE_DOGTAG_ITEM(ACE_dogtag,758); + ACE_DOGTAG_ITEM(ACE_dogtag,759); + ACE_DOGTAG_ITEM(ACE_dogtag,760); + ACE_DOGTAG_ITEM(ACE_dogtag,761); + ACE_DOGTAG_ITEM(ACE_dogtag,762); + ACE_DOGTAG_ITEM(ACE_dogtag,763); + ACE_DOGTAG_ITEM(ACE_dogtag,764); + ACE_DOGTAG_ITEM(ACE_dogtag,765); + ACE_DOGTAG_ITEM(ACE_dogtag,766); + ACE_DOGTAG_ITEM(ACE_dogtag,767); + ACE_DOGTAG_ITEM(ACE_dogtag,768); + ACE_DOGTAG_ITEM(ACE_dogtag,769); + ACE_DOGTAG_ITEM(ACE_dogtag,770); + ACE_DOGTAG_ITEM(ACE_dogtag,771); + ACE_DOGTAG_ITEM(ACE_dogtag,772); + ACE_DOGTAG_ITEM(ACE_dogtag,773); + ACE_DOGTAG_ITEM(ACE_dogtag,774); + ACE_DOGTAG_ITEM(ACE_dogtag,775); + ACE_DOGTAG_ITEM(ACE_dogtag,776); + ACE_DOGTAG_ITEM(ACE_dogtag,777); + ACE_DOGTAG_ITEM(ACE_dogtag,778); + ACE_DOGTAG_ITEM(ACE_dogtag,779); + ACE_DOGTAG_ITEM(ACE_dogtag,780); + ACE_DOGTAG_ITEM(ACE_dogtag,781); + ACE_DOGTAG_ITEM(ACE_dogtag,782); + ACE_DOGTAG_ITEM(ACE_dogtag,783); + ACE_DOGTAG_ITEM(ACE_dogtag,784); + ACE_DOGTAG_ITEM(ACE_dogtag,785); + ACE_DOGTAG_ITEM(ACE_dogtag,786); + ACE_DOGTAG_ITEM(ACE_dogtag,787); + ACE_DOGTAG_ITEM(ACE_dogtag,788); + ACE_DOGTAG_ITEM(ACE_dogtag,789); + ACE_DOGTAG_ITEM(ACE_dogtag,790); + ACE_DOGTAG_ITEM(ACE_dogtag,791); + ACE_DOGTAG_ITEM(ACE_dogtag,792); + ACE_DOGTAG_ITEM(ACE_dogtag,793); + ACE_DOGTAG_ITEM(ACE_dogtag,794); + ACE_DOGTAG_ITEM(ACE_dogtag,795); + ACE_DOGTAG_ITEM(ACE_dogtag,796); + ACE_DOGTAG_ITEM(ACE_dogtag,797); + ACE_DOGTAG_ITEM(ACE_dogtag,798); + ACE_DOGTAG_ITEM(ACE_dogtag,799); + ACE_DOGTAG_ITEM(ACE_dogtag,800); + ACE_DOGTAG_ITEM(ACE_dogtag,801); + ACE_DOGTAG_ITEM(ACE_dogtag,802); + ACE_DOGTAG_ITEM(ACE_dogtag,803); + ACE_DOGTAG_ITEM(ACE_dogtag,804); + ACE_DOGTAG_ITEM(ACE_dogtag,805); + ACE_DOGTAG_ITEM(ACE_dogtag,806); + ACE_DOGTAG_ITEM(ACE_dogtag,807); + ACE_DOGTAG_ITEM(ACE_dogtag,808); + ACE_DOGTAG_ITEM(ACE_dogtag,809); + ACE_DOGTAG_ITEM(ACE_dogtag,810); + ACE_DOGTAG_ITEM(ACE_dogtag,811); + ACE_DOGTAG_ITEM(ACE_dogtag,812); + ACE_DOGTAG_ITEM(ACE_dogtag,813); + ACE_DOGTAG_ITEM(ACE_dogtag,814); + ACE_DOGTAG_ITEM(ACE_dogtag,815); + ACE_DOGTAG_ITEM(ACE_dogtag,816); + ACE_DOGTAG_ITEM(ACE_dogtag,817); + ACE_DOGTAG_ITEM(ACE_dogtag,818); + ACE_DOGTAG_ITEM(ACE_dogtag,819); + ACE_DOGTAG_ITEM(ACE_dogtag,820); + ACE_DOGTAG_ITEM(ACE_dogtag,821); + ACE_DOGTAG_ITEM(ACE_dogtag,822); + ACE_DOGTAG_ITEM(ACE_dogtag,823); + ACE_DOGTAG_ITEM(ACE_dogtag,824); + ACE_DOGTAG_ITEM(ACE_dogtag,825); + ACE_DOGTAG_ITEM(ACE_dogtag,826); + ACE_DOGTAG_ITEM(ACE_dogtag,827); + ACE_DOGTAG_ITEM(ACE_dogtag,828); + ACE_DOGTAG_ITEM(ACE_dogtag,829); + ACE_DOGTAG_ITEM(ACE_dogtag,830); + ACE_DOGTAG_ITEM(ACE_dogtag,831); + ACE_DOGTAG_ITEM(ACE_dogtag,832); + ACE_DOGTAG_ITEM(ACE_dogtag,833); + ACE_DOGTAG_ITEM(ACE_dogtag,834); + ACE_DOGTAG_ITEM(ACE_dogtag,835); + ACE_DOGTAG_ITEM(ACE_dogtag,836); + ACE_DOGTAG_ITEM(ACE_dogtag,837); + ACE_DOGTAG_ITEM(ACE_dogtag,838); + ACE_DOGTAG_ITEM(ACE_dogtag,839); + ACE_DOGTAG_ITEM(ACE_dogtag,840); + ACE_DOGTAG_ITEM(ACE_dogtag,841); + ACE_DOGTAG_ITEM(ACE_dogtag,842); + ACE_DOGTAG_ITEM(ACE_dogtag,843); + ACE_DOGTAG_ITEM(ACE_dogtag,844); + ACE_DOGTAG_ITEM(ACE_dogtag,845); + ACE_DOGTAG_ITEM(ACE_dogtag,846); + ACE_DOGTAG_ITEM(ACE_dogtag,847); + ACE_DOGTAG_ITEM(ACE_dogtag,848); + ACE_DOGTAG_ITEM(ACE_dogtag,849); + ACE_DOGTAG_ITEM(ACE_dogtag,850); + ACE_DOGTAG_ITEM(ACE_dogtag,851); + ACE_DOGTAG_ITEM(ACE_dogtag,852); + ACE_DOGTAG_ITEM(ACE_dogtag,853); + ACE_DOGTAG_ITEM(ACE_dogtag,854); + ACE_DOGTAG_ITEM(ACE_dogtag,855); + ACE_DOGTAG_ITEM(ACE_dogtag,856); + ACE_DOGTAG_ITEM(ACE_dogtag,857); + ACE_DOGTAG_ITEM(ACE_dogtag,858); + ACE_DOGTAG_ITEM(ACE_dogtag,859); + ACE_DOGTAG_ITEM(ACE_dogtag,860); + ACE_DOGTAG_ITEM(ACE_dogtag,861); + ACE_DOGTAG_ITEM(ACE_dogtag,862); + ACE_DOGTAG_ITEM(ACE_dogtag,863); + ACE_DOGTAG_ITEM(ACE_dogtag,864); + ACE_DOGTAG_ITEM(ACE_dogtag,865); + ACE_DOGTAG_ITEM(ACE_dogtag,866); + ACE_DOGTAG_ITEM(ACE_dogtag,867); + ACE_DOGTAG_ITEM(ACE_dogtag,868); + ACE_DOGTAG_ITEM(ACE_dogtag,869); + ACE_DOGTAG_ITEM(ACE_dogtag,870); + ACE_DOGTAG_ITEM(ACE_dogtag,871); + ACE_DOGTAG_ITEM(ACE_dogtag,872); + ACE_DOGTAG_ITEM(ACE_dogtag,873); + ACE_DOGTAG_ITEM(ACE_dogtag,874); + ACE_DOGTAG_ITEM(ACE_dogtag,875); + ACE_DOGTAG_ITEM(ACE_dogtag,876); + ACE_DOGTAG_ITEM(ACE_dogtag,877); + ACE_DOGTAG_ITEM(ACE_dogtag,878); + ACE_DOGTAG_ITEM(ACE_dogtag,879); + ACE_DOGTAG_ITEM(ACE_dogtag,880); + ACE_DOGTAG_ITEM(ACE_dogtag,881); + ACE_DOGTAG_ITEM(ACE_dogtag,882); + ACE_DOGTAG_ITEM(ACE_dogtag,883); + ACE_DOGTAG_ITEM(ACE_dogtag,884); + ACE_DOGTAG_ITEM(ACE_dogtag,885); + ACE_DOGTAG_ITEM(ACE_dogtag,886); + ACE_DOGTAG_ITEM(ACE_dogtag,887); + ACE_DOGTAG_ITEM(ACE_dogtag,888); + ACE_DOGTAG_ITEM(ACE_dogtag,889); + ACE_DOGTAG_ITEM(ACE_dogtag,890); + ACE_DOGTAG_ITEM(ACE_dogtag,891); + ACE_DOGTAG_ITEM(ACE_dogtag,892); + ACE_DOGTAG_ITEM(ACE_dogtag,893); + ACE_DOGTAG_ITEM(ACE_dogtag,894); + ACE_DOGTAG_ITEM(ACE_dogtag,895); + ACE_DOGTAG_ITEM(ACE_dogtag,896); + ACE_DOGTAG_ITEM(ACE_dogtag,897); + ACE_DOGTAG_ITEM(ACE_dogtag,898); + ACE_DOGTAG_ITEM(ACE_dogtag,899); + ACE_DOGTAG_ITEM(ACE_dogtag,900); + ACE_DOGTAG_ITEM(ACE_dogtag,901); + ACE_DOGTAG_ITEM(ACE_dogtag,902); + ACE_DOGTAG_ITEM(ACE_dogtag,903); + ACE_DOGTAG_ITEM(ACE_dogtag,904); + ACE_DOGTAG_ITEM(ACE_dogtag,905); + ACE_DOGTAG_ITEM(ACE_dogtag,906); + ACE_DOGTAG_ITEM(ACE_dogtag,907); + ACE_DOGTAG_ITEM(ACE_dogtag,908); + ACE_DOGTAG_ITEM(ACE_dogtag,909); + ACE_DOGTAG_ITEM(ACE_dogtag,910); + ACE_DOGTAG_ITEM(ACE_dogtag,911); + ACE_DOGTAG_ITEM(ACE_dogtag,912); + ACE_DOGTAG_ITEM(ACE_dogtag,913); + ACE_DOGTAG_ITEM(ACE_dogtag,914); + ACE_DOGTAG_ITEM(ACE_dogtag,915); + ACE_DOGTAG_ITEM(ACE_dogtag,916); + ACE_DOGTAG_ITEM(ACE_dogtag,917); + ACE_DOGTAG_ITEM(ACE_dogtag,918); + ACE_DOGTAG_ITEM(ACE_dogtag,919); + ACE_DOGTAG_ITEM(ACE_dogtag,920); + ACE_DOGTAG_ITEM(ACE_dogtag,921); + ACE_DOGTAG_ITEM(ACE_dogtag,922); + ACE_DOGTAG_ITEM(ACE_dogtag,923); + ACE_DOGTAG_ITEM(ACE_dogtag,924); + ACE_DOGTAG_ITEM(ACE_dogtag,925); + ACE_DOGTAG_ITEM(ACE_dogtag,926); + ACE_DOGTAG_ITEM(ACE_dogtag,927); + ACE_DOGTAG_ITEM(ACE_dogtag,928); + ACE_DOGTAG_ITEM(ACE_dogtag,929); + ACE_DOGTAG_ITEM(ACE_dogtag,930); + ACE_DOGTAG_ITEM(ACE_dogtag,931); + ACE_DOGTAG_ITEM(ACE_dogtag,932); + ACE_DOGTAG_ITEM(ACE_dogtag,933); + ACE_DOGTAG_ITEM(ACE_dogtag,934); + ACE_DOGTAG_ITEM(ACE_dogtag,935); + ACE_DOGTAG_ITEM(ACE_dogtag,936); + ACE_DOGTAG_ITEM(ACE_dogtag,937); + ACE_DOGTAG_ITEM(ACE_dogtag,938); + ACE_DOGTAG_ITEM(ACE_dogtag,939); + ACE_DOGTAG_ITEM(ACE_dogtag,940); + ACE_DOGTAG_ITEM(ACE_dogtag,941); + ACE_DOGTAG_ITEM(ACE_dogtag,942); + ACE_DOGTAG_ITEM(ACE_dogtag,943); + ACE_DOGTAG_ITEM(ACE_dogtag,944); + ACE_DOGTAG_ITEM(ACE_dogtag,945); + ACE_DOGTAG_ITEM(ACE_dogtag,946); + ACE_DOGTAG_ITEM(ACE_dogtag,947); + ACE_DOGTAG_ITEM(ACE_dogtag,948); + ACE_DOGTAG_ITEM(ACE_dogtag,949); + ACE_DOGTAG_ITEM(ACE_dogtag,950); + ACE_DOGTAG_ITEM(ACE_dogtag,951); + ACE_DOGTAG_ITEM(ACE_dogtag,952); + ACE_DOGTAG_ITEM(ACE_dogtag,953); + ACE_DOGTAG_ITEM(ACE_dogtag,954); + ACE_DOGTAG_ITEM(ACE_dogtag,955); + ACE_DOGTAG_ITEM(ACE_dogtag,956); + ACE_DOGTAG_ITEM(ACE_dogtag,957); + ACE_DOGTAG_ITEM(ACE_dogtag,958); + ACE_DOGTAG_ITEM(ACE_dogtag,959); + ACE_DOGTAG_ITEM(ACE_dogtag,960); + ACE_DOGTAG_ITEM(ACE_dogtag,961); + ACE_DOGTAG_ITEM(ACE_dogtag,962); + ACE_DOGTAG_ITEM(ACE_dogtag,963); + ACE_DOGTAG_ITEM(ACE_dogtag,964); + ACE_DOGTAG_ITEM(ACE_dogtag,965); + ACE_DOGTAG_ITEM(ACE_dogtag,966); + ACE_DOGTAG_ITEM(ACE_dogtag,967); + ACE_DOGTAG_ITEM(ACE_dogtag,968); + ACE_DOGTAG_ITEM(ACE_dogtag,969); + ACE_DOGTAG_ITEM(ACE_dogtag,970); + ACE_DOGTAG_ITEM(ACE_dogtag,971); + ACE_DOGTAG_ITEM(ACE_dogtag,972); + ACE_DOGTAG_ITEM(ACE_dogtag,973); + ACE_DOGTAG_ITEM(ACE_dogtag,974); + ACE_DOGTAG_ITEM(ACE_dogtag,975); + ACE_DOGTAG_ITEM(ACE_dogtag,976); + ACE_DOGTAG_ITEM(ACE_dogtag,977); + ACE_DOGTAG_ITEM(ACE_dogtag,978); + ACE_DOGTAG_ITEM(ACE_dogtag,979); + ACE_DOGTAG_ITEM(ACE_dogtag,980); + ACE_DOGTAG_ITEM(ACE_dogtag,981); + ACE_DOGTAG_ITEM(ACE_dogtag,982); + ACE_DOGTAG_ITEM(ACE_dogtag,983); + ACE_DOGTAG_ITEM(ACE_dogtag,984); + ACE_DOGTAG_ITEM(ACE_dogtag,985); + ACE_DOGTAG_ITEM(ACE_dogtag,986); + ACE_DOGTAG_ITEM(ACE_dogtag,987); + ACE_DOGTAG_ITEM(ACE_dogtag,988); + ACE_DOGTAG_ITEM(ACE_dogtag,989); + ACE_DOGTAG_ITEM(ACE_dogtag,990); + ACE_DOGTAG_ITEM(ACE_dogtag,991); + ACE_DOGTAG_ITEM(ACE_dogtag,992); + ACE_DOGTAG_ITEM(ACE_dogtag,993); + ACE_DOGTAG_ITEM(ACE_dogtag,994); + ACE_DOGTAG_ITEM(ACE_dogtag,995); + ACE_DOGTAG_ITEM(ACE_dogtag,996); + ACE_DOGTAG_ITEM(ACE_dogtag,997); + ACE_DOGTAG_ITEM(ACE_dogtag,998); + ACE_DOGTAG_ITEM(ACE_dogtag,999); + ACE_DOGTAG_ITEM(ACE_dogtag,1000); +}; diff --git a/addons/dogtags/Dogtag.hpp b/addons/dogtags/Dogtag.hpp new file mode 100644 index 0000000000..937432d2a8 --- /dev/null +++ b/addons/dogtags/Dogtag.hpp @@ -0,0 +1,72 @@ +class RscPicture; +class RscStructuredText; + +class RscTitles { + class GVAR(singleTag) { + idd = -1; + onLoad = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QGVAR(tag)),_this select 0)]); + onUnload = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QGVAR(tag)),nil)]); + movingEnable = false; + duration = 5; + fadeIn = 0.2; + fadeOut = 0.2; + + class controls { + class background: RscPicture { + idc = 1000; + text = QUOTE(PATHTOF(data\dogtagSingle.paa)); + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + colorText[] = {1, 1, 1, 1}; + colorBackground[] = {0, 0, 0, 0}; + x = ((safezoneX + safezoneW) - (10 * (((safezoneW / safezoneH) min 1.2) / 40)) - 2.9 * (((safezoneW / safezoneH) min 1.2) / 40)); + y = safeZoneY + 0.175 * safezoneH; + w = (8 * (((safezoneW / safezoneH) min 1.2) / 40)); + h = (8 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)); + font = "EtelkaMonospacePro"; + }; + class nickname: RscStructuredText { + idc = 1001; + text = ""; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + colorText[] = {1, 1, 1, 1}; + colorBackground[] = {0, 0, 0, 0}; + x = ((safezoneX + safezoneW) - (8.4 * (((safezoneW / safezoneH) min 1.2) / 40)) - 2.9 * (((safezoneW / safezoneH) min 1.2) / 40)); + y = safeZoneY + 0.24 * safezoneH; + w = (5.9 * (((safezoneW / safezoneH) min 1.2) / 40)); + h = (3 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)); + font = "RobotoCondensed"; + class Attributes { + font = "RobotoCondensed"; + color = "#EEEEEE"; + align = "left"; + valign = "middle"; + shadow = 2; + shadowColor = "#3f4345"; + size = "0.80"; + }; + }; + }; + }; + class GVAR(doubleTag): GVAR(singleTag) { + idd = -1; + onLoad = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QGVAR(tag)),_this select 0)]); + onUnload = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QGVAR(tag)),nil)]); + + class controls: controls { + class background: background { + text = QUOTE(PATHTOF(data\dogtagDouble.paa)); + }; + class nickname: nickname { + class Attributes: Attributes { + font = "RobotoCondensed"; + color = "#EEEEEE"; + align = "left"; + valign = "middle"; + shadow = 2; + shadowColor = "#3f4345"; + size = "0.80"; + }; + }; + }; + }; +}; diff --git a/addons/dogtags/README.md b/addons/dogtags/README.md new file mode 100644 index 0000000000..e3bf6caf73 --- /dev/null +++ b/addons/dogtags/README.md @@ -0,0 +1,11 @@ +ace_dogtags +========== + +Adds options to check and take dog tag from dead or unconscious units + + +## Maintainers + +The people responsible for merging changes to this component or answering potential questions. + +- [SzwedzikPL](https://github.com/SzwedzikPL) diff --git a/addons/dogtags/XEH_PREP.hpp b/addons/dogtags/XEH_PREP.hpp new file mode 100644 index 0000000000..33e42ba191 --- /dev/null +++ b/addons/dogtags/XEH_PREP.hpp @@ -0,0 +1,13 @@ +PREP(addDogtagActions); +PREP(addDogtagItem); +PREP(bloodType); +PREP(canCheckDogtag); +PREP(canTakeDogtag); +PREP(checkDogtag); +PREP(checkDogtagItem); +PREP(getDogtagData); +PREP(getDogtagItem); +PREP(sendDogtagData); +PREP(showDogtag); +PREP(ssn); +PREP(takeDogtag); diff --git a/addons/dogtags/XEH_postInit.sqf b/addons/dogtags/XEH_postInit.sqf new file mode 100644 index 0000000000..729ae7eb04 --- /dev/null +++ b/addons/dogtags/XEH_postInit.sqf @@ -0,0 +1,45 @@ +#include "script_component.hpp" + +[QGVAR(showDogtag), DFUNC(showDogtag)] call CBA_fnc_addEventHandler; +[QGVAR(sendDogtagData), DFUNC(sendDogtagData)] call CBA_fnc_addEventHandler; +[QGVAR(getDogtagItem), DFUNC(getDogtagItem)] call CBA_fnc_addEventHandler; +[QGVAR(addDogtagItem), DFUNC(addDogtagItem)] call CBA_fnc_addEventHandler; + + +//Add actions and event handlers only if ace_medical is loaded +// - Adding actions via config would create a dependency +if (["ACE_Medical"] call EFUNC(common,isModLoaded)) then { + if (hasInterface) then { + + private _checkTagAction = [ + "ACE_CheckDogtag", + format ["%1: %2", localize LSTRING(itemName), localize LSTRING(checkDogtag)], + QPATHTOF(data\dogtag_icon_ca.paa), + {[_player,_target] call FUNC(checkDogtag)}, + {!isNil {_target getVariable QGVAR(dogtagData)}} + ] call ace_interact_menu_fnc_createAction; + ["ACE_bodyBagObject", 0, ["ACE_MainActions"], _checkTagAction] call EFUNC(interact_menu,addActionToClass); + + private _takeTagAction = [ + "ACE_TakeDogtag", + format ["%1: %2", localize LSTRING(itemName), localize LSTRING(takeDogtag)], + QPATHTOF(data\dogtag_icon_ca.paa), + {[_player,_target] call FUNC(takeDogtag)}, + {(!isNil {_target getVariable QGVAR(dogtagData)}) && {((_target getVariable [QGVAR(dogtagTaken), objNull]) != _target)}} + ] call ace_interact_menu_fnc_createAction; + ["ACE_bodyBagObject", 0, ["ACE_MainActions"], _takeTagAction] call EFUNC(interact_menu,addActionToClass); + }; + if (isServer) then { + ["ace_placedInBodyBag", { + params ["_target", "_bodyBag"]; + TRACE_2("ace_placedInBodyBag eh",_target,_bodyBag); + + private _dogTagData = [_target] call FUNC(getDogtagData); + _bodyBag setVariable [QGVAR(dogtagData), _dogTagData, true]; + + if ((_target getVariable [QGVAR(dogtagTaken), objNull]) == _target) then { + _bodyBag setVariable [QGVAR(dogtagTaken), _bodyBag, true]; + }; + }] call CBA_fnc_addEventHandler; + }; +}; diff --git a/addons/dogtags/XEH_preInit.sqf b/addons/dogtags/XEH_preInit.sqf new file mode 100644 index 0000000000..a7feade1c3 --- /dev/null +++ b/addons/dogtags/XEH_preInit.sqf @@ -0,0 +1,7 @@ +#include "script_component.hpp" + +ADDON = false; + +#include "XEH_PREP.hpp" + +ADDON = true; diff --git a/addons/dogtags/XEH_preStart.sqf b/addons/dogtags/XEH_preStart.sqf new file mode 100644 index 0000000000..022888575e --- /dev/null +++ b/addons/dogtags/XEH_preStart.sqf @@ -0,0 +1,3 @@ +#include "script_component.hpp" + +#include "XEH_PREP.hpp" diff --git a/addons/dogtags/config.cpp b/addons/dogtags/config.cpp new file mode 100644 index 0000000000..de66b2a087 --- /dev/null +++ b/addons/dogtags/config.cpp @@ -0,0 +1,18 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_common"}; + author[] = {"SzwedzikPL"}; + authorUrl = "https://github.com/SzwedzikPL/"; + VERSION_CONFIG; + }; +}; + +#include "CfgEventHandlers.hpp" +#include "CfgWeapons.hpp" +#include "CfgVehicles.hpp" +#include "Dogtag.hpp" diff --git a/addons/dogtags/data/ace_dogtag.p3d b/addons/dogtags/data/ace_dogtag.p3d new file mode 100644 index 0000000000..442a4b4622 Binary files /dev/null and b/addons/dogtags/data/ace_dogtag.p3d differ diff --git a/addons/dogtags/data/dogtag.rvmat b/addons/dogtags/data/dogtag.rvmat new file mode 100644 index 0000000000..503e31b68f --- /dev/null +++ b/addons/dogtags/data/dogtag.rvmat @@ -0,0 +1,82 @@ +class StageTI { + texture = "a3\data_f\default_glass_ti_ca.paa"; +}; +ambient[] = {1,1,1,1}; +diffuse[] = {1,1,1,1}; +forcedDiffuse[] = {0,0,0,0}; +emmisive[] = {0,0,0,1}; +specular[] = {0.3,0.3,0.3,1}; +specularPower = 50; +PixelShaderID = "Super"; +VertexShaderID = "Super"; +class Stage1 { + texture = "z\ace\addons\dogtags\data\dogtag_nohq.paa"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; +class Stage2 { + texture = "#(argb,8,8,3)color(0.5,0.5,0.5,1,DT)"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; +class Stage3 { + texture = "#(argb,8,8,3)color(0,0,0,0,MC)"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; +class Stage4 { + texture = "#(argb,8,8,3)color(1,1,1,1,AS)"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; +class Stage5 { + texture = "#(argb,8,8,3)color(0,0.6,1,1,SMDI)"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; +class Stage6 { + texture = "#(ai,32,128,1)fresnel(0.85,0.36)"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; +class Stage7 { + useWorldEnvMap = "true"; + texture = "a3\data_f\env_interier_car_ca.paa"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; diff --git a/addons/dogtags/data/dogtagDouble.paa b/addons/dogtags/data/dogtagDouble.paa new file mode 100644 index 0000000000..8bc7c29ef3 Binary files /dev/null and b/addons/dogtags/data/dogtagDouble.paa differ diff --git a/addons/dogtags/data/dogtagSingle.paa b/addons/dogtags/data/dogtagSingle.paa new file mode 100644 index 0000000000..c85457d903 Binary files /dev/null and b/addons/dogtags/data/dogtagSingle.paa differ diff --git a/addons/dogtags/data/dogtag_ca.paa b/addons/dogtags/data/dogtag_ca.paa new file mode 100644 index 0000000000..ccd77607f3 Binary files /dev/null and b/addons/dogtags/data/dogtag_ca.paa differ diff --git a/addons/dogtags/data/dogtag_icon_ca.paa b/addons/dogtags/data/dogtag_icon_ca.paa new file mode 100644 index 0000000000..4799db17ec Binary files /dev/null and b/addons/dogtags/data/dogtag_icon_ca.paa differ diff --git a/addons/dogtags/data/dogtag_nohq.paa b/addons/dogtags/data/dogtag_nohq.paa new file mode 100644 index 0000000000..faeed10bd6 Binary files /dev/null and b/addons/dogtags/data/dogtag_nohq.paa differ diff --git a/addons/dogtags/data/model.cfg b/addons/dogtags/data/model.cfg new file mode 100644 index 0000000000..cb919c9950 --- /dev/null +++ b/addons/dogtags/data/model.cfg @@ -0,0 +1,16 @@ +class CfgSkeletons { + class Default { + isDiscrete = 1; + skeletonInherit = ""; + skeletonBones[] = {}; + }; +}; + +class CfgModels { + class Default { + sectionsInherit = ""; + sections[] = {""}; + skeletonName = "Default"; + }; + class ace_dogtag: Default {}; +}; diff --git a/addons/dogtags/functions/fnc_addDogtagActions.sqf b/addons/dogtags/functions/fnc_addDogtagActions.sqf new file mode 100644 index 0000000000..ffc45532e9 --- /dev/null +++ b/addons/dogtags/functions/fnc_addDogtagActions.sqf @@ -0,0 +1,40 @@ +/* + * Author: SzwedzikPL + * Creates one action per dogtag. + * + * Arguments: + * 0: Target + * 1: Player + * + * Return Value: + * Children actions + * + * Public: No + */ +#include "script_component.hpp" + +params ["_target", "_player"]; + +//Get all dogtags and their ids +private _unitDogtags = []; +private _unitDogtagIDs = []; +{ + private _id = getNumber (configFile >> "CfgWeapons" >> _x >> QGVAR(tagID)); + if (_id > 0) then { + _unitDogtags pushBack _x; + _unitDogtagIDs pushBack _id; + }; +} forEach items _player; + +//Create action children for all dogtags +private _actions = []; +{ + private _tagID = _unitDogtagIDs select _forEachIndex; + private _displayName = format ["%1 #%2", getText (configFile >> "CfgWeapons" >> _x >> "displayName"), _tagID]; + private _picture = getText (configFile >> "CfgWeapons" >> _x >> "picture"); + + private _action = [_x, _displayName, _picture, {_this call FUNC(checkDogtagItem)}, {true}, {}, _x] call EFUNC(interact_menu,createAction); + _actions pushBack [_action, [], _player]; +} forEach _unitDogtags; + +_actions diff --git a/addons/dogtags/functions/fnc_addDogtagItem.sqf b/addons/dogtags/functions/fnc_addDogtagItem.sqf new file mode 100644 index 0000000000..f4890782b0 --- /dev/null +++ b/addons/dogtags/functions/fnc_addDogtagItem.sqf @@ -0,0 +1,24 @@ +/* + * Author: SzwedzikPL + * Adds dogtag item to unit (triggered by server) + * + * Arguments: + * 0: Item class + * 1: Dogtag data + * + * Return Value: + * None + * + * Public: No + */ +#include "script_component.hpp" + +params ["_item", "_dogtagData"]; + +if (_item == "") exitWith {}; + +[ace_player, _item] call CBA_fnc_addItem; + +_dogtagData params ["_nickName"]; +private _displayText = format [localize LSTRING(takeDogtagSuccess), _nickName]; +[_displayText] call EFUNC(common,displayText); diff --git a/addons/dogtags/functions/fnc_bloodType.sqf b/addons/dogtags/functions/fnc_bloodType.sqf new file mode 100644 index 0000000000..2111e16ccf --- /dev/null +++ b/addons/dogtags/functions/fnc_bloodType.sqf @@ -0,0 +1,24 @@ +/* + * Author: commy2 + * Reports a blood type depending on the units name. + * + * Arguments: + * 0: Name of a unit + * + * Return Value: + * A random blood type + * + * Public: No + */ +#include "script_component.hpp" + +#define BLOOD_TYPES ["O POS", "O NEG", "A POS", "A NEG", "B POS", "B NEG", "AB POS", "AB NEG"] + +params ["_name"]; + +private _num = 0; +private _count = {_num = _num + _x} count toArray _name; + +_num = _num + _count; + +BLOOD_TYPES select (_num % count BLOOD_TYPES) diff --git a/addons/dogtags/functions/fnc_canCheckDogtag.sqf b/addons/dogtags/functions/fnc_canCheckDogtag.sqf new file mode 100644 index 0000000000..a05629c72f --- /dev/null +++ b/addons/dogtags/functions/fnc_canCheckDogtag.sqf @@ -0,0 +1,20 @@ +/* + * Author: SzwedzikPL + * Checks if dogtag can be checked. + * + * Arguments: + * 0: Player + * 1: Target + * + * Return Value: + * True if dogtag can be checked + * + * Public: No + */ +#include "script_component.hpp" + +params ["_player", "_target"]; + +if (isNull _target) exitWith {false}; + +(!alive _target) || {_target getVariable ["ACE_isUnconscious", false]} diff --git a/addons/dogtags/functions/fnc_canTakeDogtag.sqf b/addons/dogtags/functions/fnc_canTakeDogtag.sqf new file mode 100644 index 0000000000..b8279144bb --- /dev/null +++ b/addons/dogtags/functions/fnc_canTakeDogtag.sqf @@ -0,0 +1,20 @@ +/* + * Author: SzwedzikPL + * Checks if dogtag can be taken. + * + * Arguments: + * 0: Player + * 1: Target + * + * Return Value: + * True if dogtag can be taken + * + * Public: No + */ +#include "script_component.hpp" + +params ["_player", "_target"]; + +if (isNull _target) exitWith {false}; + +(!alive _target) || {_target getVariable ["ACE_isUnconscious", false]} diff --git a/addons/dogtags/functions/fnc_checkDogtag.sqf b/addons/dogtags/functions/fnc_checkDogtag.sqf new file mode 100644 index 0000000000..6345871f02 --- /dev/null +++ b/addons/dogtags/functions/fnc_checkDogtag.sqf @@ -0,0 +1,21 @@ +/* + * Author: SzwedzikPL + * Checks unit dogtag + * + * Arguments: + * 0: Player + * 1: Target + * + * Return Value: + * None + * + * Public: No + */ +#include "script_component.hpp" + +params ["_player", "_target"]; + +private _doubleTags = (_target getVariable [QGVAR(dogtagTaken), objNull]) != _target; +private _dogTagData = [_target] call FUNC(getDogTagData); + +[QGVAR(showDogtag), [_dogTagData, _doubleTags]] call CBA_fnc_localEvent; diff --git a/addons/dogtags/functions/fnc_checkDogtagItem.sqf b/addons/dogtags/functions/fnc_checkDogtagItem.sqf new file mode 100644 index 0000000000..930532a0d9 --- /dev/null +++ b/addons/dogtags/functions/fnc_checkDogtagItem.sqf @@ -0,0 +1,19 @@ +/* + * Author: SzwedzikPL + * Check dogtag self menu action + * + * Arguments: + * 0: Player + * 1: Target + * 2: Item class + * + * Return Value: + * Mone + * + * Public: No + */ +#include "script_component.hpp" + +params ["_player", "_target", "_item"]; + +[QGVAR(sendDogtagData), [_player, _item]] call CBA_fnc_serverEvent; diff --git a/addons/dogtags/functions/fnc_getDogtagData.sqf b/addons/dogtags/functions/fnc_getDogtagData.sqf new file mode 100644 index 0000000000..485e09789e --- /dev/null +++ b/addons/dogtags/functions/fnc_getDogtagData.sqf @@ -0,0 +1,31 @@ +/* + * Author: esteldunedain + * Get unit dogtag data + * + * Arguments: + * 0: Target + * + * Return Value: + * None + * + * Public: No + */ +#include "script_component.hpp" + +params ["_target"]; + +// Check if the data was already created +private _dogTagData = _target getVariable QGVAR(dogtagData); +if (!isNil "_dogTagData") exitWith {_dogTagData}; + +// Create dog tag data once for the unit: nickname, code (eg. 135-13-900) and blood type +private _targetName = [_target, false, true] call EFUNC(common,getName); + +private _dogTagData = [ + _targetName, + _targetName call FUNC(ssn), + _targetName call FUNC(bloodType) +]; +// Store it +_target setVariable [QGVAR(dogtagData), _dogTagData, true]; +_dogTagData diff --git a/addons/dogtags/functions/fnc_getDogtagItem.sqf b/addons/dogtags/functions/fnc_getDogtagItem.sqf new file mode 100644 index 0000000000..aee57b31e3 --- /dev/null +++ b/addons/dogtags/functions/fnc_getDogtagItem.sqf @@ -0,0 +1,36 @@ +/* + * Author: SzwedzikPL + * Server: creates new dogtag item and send it to client + * + * Arguments: + * 0: Player + * 1: Target + * + * Return Value: + * None + * + * Public: No + */ +#include "script_component.hpp" + +if(!isServer) exitWith {}; + +params ["_player", "_target"]; +TRACE_2("getDogtagItem",_player,_target); + +private _allDogtags = missionNamespace getVariable [QGVAR(allDogtags), []]; +private _allDogtagDatas = missionNamespace getVariable [QGVAR(allDogtagDatas), []]; + +private _nextID = count _allDogtags + 1; + +if (_nextID > 999) exitWith {ACE_LOGERROR("Ran out of IDs");}; + +private _dogTagData = [_target] call FUNC(getDogTagData); +private _item = format ["ACE_dogtag_%1", _nextID]; +_allDogtags pushBack _item; +_allDogtagDatas pushBack _dogTagData; + +missionNamespace setVariable [QGVAR(allDogtags), _allDogtags]; +missionNamespace setVariable [QGVAR(allDogtagDatas), _allDogtagDatas]; + +[QGVAR(addDogtagItem), [_item, _dogTagData], [_player]] call CBA_fnc_targetEvent; diff --git a/addons/dogtags/functions/fnc_sendDogtagData.sqf b/addons/dogtags/functions/fnc_sendDogtagData.sqf new file mode 100644 index 0000000000..cadb343796 --- /dev/null +++ b/addons/dogtags/functions/fnc_sendDogtagData.sqf @@ -0,0 +1,30 @@ +/* + * Author: SzwedzikPL + * Server: returns to client data on given dogtag + * + * Arguments: + * 0: Player + * 1: Target + * + * Return Value: + * None + * + * Public: No + */ +#include "script_component.hpp" + +if(!isServer) exitWith {}; + +params ["_target", "_item"]; +TRACE_2("sendDogtagData",_target,_item); + +private _allDogtags = missionNameSpace getVariable [QGVAR(allDogtags), []]; +private _allDogtagDatas = missionNameSpace getVariable [QGVAR(allDogtagDatas), []]; + +private _dogtagData = []; +private _index = _allDogtags find _item; +if (_index >= 0) then { + _dogtagData = _allDogtagDatas select _index; +}; + +[QGVAR(showDogtag), [_dogtagData], [_target]] call CBA_fnc_targetEvent; diff --git a/addons/dogtags/functions/fnc_showDogtag.sqf b/addons/dogtags/functions/fnc_showDogtag.sqf new file mode 100644 index 0000000000..119a2de773 --- /dev/null +++ b/addons/dogtags/functions/fnc_showDogtag.sqf @@ -0,0 +1,32 @@ +/* + * Author: SzwedzikPL + * Shows dogtag + * + * Arguments: + * 0: Dog tag data + * 1: Display as double tag + * + * Return Value: + * None + * + * Public: No + */ +#include "script_component.hpp" + +disableSerialization; + +params ["_dogtagData", ["_doubleTags", false, [false]]]; + +if (!hasInterface || {_dogtagData isEqualTo []}) exitWith {}; + +if (_doubleTags) then { + (QGVAR(tag) call BIS_fnc_rscLayer) cutRsc [QGVAR(doubleTag), "PLAIN", 1, true]; +} else { + (QGVAR(tag) call BIS_fnc_rscLayer) cutRsc [QGVAR(singleTag), "PLAIN", 1, true]; +}; +private _display = uiNamespace getvariable [QGVAR(tag), displayNull]; +if(isNull _display) exitWith {}; + +private _control = _display displayCtrl 1001; +_dogtagData params ["_nickName", "_code", "_bloodType"]; +_control ctrlSetStructuredText parseText format ["%1
%2
%3", toUpper _nickName, _code, _bloodType]; diff --git a/addons/dogtags/functions/fnc_ssn.sqf b/addons/dogtags/functions/fnc_ssn.sqf new file mode 100644 index 0000000000..adf5d1c6f8 --- /dev/null +++ b/addons/dogtags/functions/fnc_ssn.sqf @@ -0,0 +1,31 @@ +/* + * Author: SilentSpike + * Reports a social security number generated from the units name. + * + * Arguments: + * 0: Name of a unit + * + * Return Value: + * A random three/two/four format social security number + * + * Public: No + */ +#include "script_component.hpp" + +params ["_name"]; +private _length = count _name; +private _chars = toArray _name; + +// For short names, reuse characters +if (_length < 9) then { + // Iterates every second character, swapping odd/even with each loop + for [{_i = 0},{_i < 2*(9 - _length)},{_i = _i + 2}] do { + _chars pushBack (_chars select floor((_i + (_i/_length % 2)) % _length)); + }; +}; + +// Offset array slice for long names to make generation more unique +private _slice = [0, _length % 9] select (_length > 9); +private _nums = (_chars select [_slice, 9]) apply { _x % 10 }; + +([_nums select [0,3],_nums select [3,2], _nums select [5,4]] apply { _x joinString "" }) joinString "-" diff --git a/addons/dogtags/functions/fnc_takeDogtag.sqf b/addons/dogtags/functions/fnc_takeDogtag.sqf new file mode 100644 index 0000000000..e8c93a985d --- /dev/null +++ b/addons/dogtags/functions/fnc_takeDogtag.sqf @@ -0,0 +1,24 @@ +/* + * Author: SzwedzikPL + * If dogtag is not already taken triggers event on server + * If dogtag already taken displays info about it + * + * Arguments: + * 0: Player + * 1: Target + * + * Return Value: + * None + * + * Public: No + */ +#include "script_component.hpp" + +params ["_player", "_target"]; + +if ((_target getVariable [QGVAR(dogtagTaken), objNull]) == _target) then { + [localize LSTRING(dogtagAlreadyTaken)] call EFUNC(common,displayText); +} else { + _target setVariable [QGVAR(dogtagTaken), _target, true]; + [QGVAR(getDogtagItem), [_player, _target]] call CBA_fnc_serverEvent; +}; diff --git a/addons/dogtags/functions/script_component.hpp b/addons/dogtags/functions/script_component.hpp new file mode 100644 index 0000000000..583e76df33 --- /dev/null +++ b/addons/dogtags/functions/script_component.hpp @@ -0,0 +1 @@ +#include "\z\ace\addons\dogtags\script_component.hpp" diff --git a/addons/dogtags/script_component.hpp b/addons/dogtags/script_component.hpp new file mode 100644 index 0000000000..980222c8da --- /dev/null +++ b/addons/dogtags/script_component.hpp @@ -0,0 +1,17 @@ +#define COMPONENT dogtags +#include "\z\ace\addons\main\script_mod.hpp" + +// #define DEBUG_MODE_FULL +// #define DISABLE_COMPILE_CACHE +// #define CBA_DEBUG_SYNCHRONOUS +// #define ENABLE_PERFORMANCE_COUNTERS + +#ifdef DEBUG_ENABLED_DOGTAGS + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_DOGTAGS + #define DEBUG_SETTINGS DEBUG_SETTINGS_DOGTAGS +#endif + +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/dogtags/stringtable.xml b/addons/dogtags/stringtable.xml new file mode 100644 index 0000000000..3e946c5ec0 --- /dev/null +++ b/addons/dogtags/stringtable.xml @@ -0,0 +1,29 @@ + + + + + Dog Tag + Nieśmiertelnik + + + Check Dog Tag + Sprawdź nieśmiertelnik + + + Check + Sprawdź + + + Take + Zabierz + + + Dogtag taken from %1... + Zabrałeś nieśmiertelnik %1... + + + Somebody else has already taken the dogtag... + Ktoś już zabrał ten nieśmiertelnik... + + + \ No newline at end of file diff --git a/addons/dragging/CfgVehicles.hpp b/addons/dragging/CfgVehicles.hpp index ba4ff87186..3f5dbce327 100644 --- a/addons/dragging/CfgVehicles.hpp +++ b/addons/dragging/CfgVehicles.hpp @@ -69,6 +69,33 @@ class CfgVehicles { GVAR(canCarry) = 1; GVAR(canDrag) = 1; }; + class Box_Syndicate_Ammo_F: ReammoBox_F { + GVAR(canCarry) = 1; + GVAR(canDrag) = 1; + }; + class Box_IED_Exp_F: ReammoBox_F { + GVAR(canCarry) = 1; + GVAR(canDrag) = 1; + }; + class Box_Syndicate_Wps_F: ReammoBox_F { + GVAR(canCarry) = 1; + GVAR(canDrag) = 1; + }; + class Box_Syndicate_WpsLaunch_F: ReammoBox_F { + GVAR(canCarry) = 1; + GVAR(canDrag) = 1; + }; + + class Box_NATO_Equip_F: ReammoBox_F { + GVAR(canCarry) = 1; + GVAR(carryDirection) = 270; + GVAR(canDrag) = 1; + }; + class Box_NATO_Uniforms_F: ReammoBox_F { + GVAR(canCarry) = 1; + GVAR(carryDirection) = 270; + GVAR(canDrag) = 1; + }; // Remove Larger crate dragging support. // Would be better to allow some sort of joint push/drag functionality diff --git a/addons/dragging/XEH_postInit.sqf b/addons/dragging/XEH_postInit.sqf index 6b2fd02dde..0d8e7757eb 100644 --- a/addons/dragging/XEH_postInit.sqf +++ b/addons/dragging/XEH_postInit.sqf @@ -28,3 +28,30 @@ if (isNil "ACE_maxWeightCarry") then { ["ace_unconscious", {_this call FUNC(handleUnconscious)}] call CBA_fnc_addEventHandler; //@todo Captivity? + +//Add Keybind: +["ACE3 Common", QGVAR(drag), (localize LSTRING(DragKeybind)), +{ + if (!alive ACE_player) exitWith {false}; + if !([ACE_player, objNull, ["isNotDragging", "isNotCarrying"]] call EFUNC(common,canInteractWith)) exitWith {false}; + + // If we are drag/carrying something right now then just drop it: + if (ACE_player getVariable [QGVAR(isDragging), false]) exitWith { + [ACE_player, ACE_player getVariable [QGVAR(draggedObject), objNull]] call FUNC(dropObject); + false + }; + if (ACE_player getVariable [QGVAR(isCarrying), false]) exitWith { + [ACE_player, ACE_player getVariable [QGVAR(carriedObject), objNull]] call FUNC(dropObject_carry); + false + }; + + private _cursor = cursorObject; + if ((isNull _cursor) || {(_cursor distance ACE_player) > 2.6}) exitWith {false}; + if (!([ACE_player, _cursor] call FUNC(canDrag))) exitWith {false}; + + [ACE_player, _cursor] call FUNC(startDrag); + false +}, +{false}, +[-1, [false, false, false]]] call CBA_fnc_addKeybind; // UNBOUND + diff --git a/addons/dragging/functions/fnc_dropObject.sqf b/addons/dragging/functions/fnc_dropObject.sqf index c70bf90c38..f060c8d088 100644 --- a/addons/dragging/functions/fnc_dropObject.sqf +++ b/addons/dragging/functions/fnc_dropObject.sqf @@ -26,7 +26,7 @@ private _inBuilding = [_unit] call FUNC(isObjectOnObject); if !(_unit getVariable ["ACE_isUnconscious", false]) then { // play release animation - _unit playAction "released"; + [_unit, "released"] call EFUNC(common,doGesture); }; // prevent collision damage diff --git a/addons/dragging/functions/fnc_startDrag.sqf b/addons/dragging/functions/fnc_startDrag.sqf index 5ddaa0ede4..cf08074d94 100644 --- a/addons/dragging/functions/fnc_startDrag.sqf +++ b/addons/dragging/functions/fnc_startDrag.sqf @@ -39,7 +39,9 @@ _unit selectWeapon primaryWeapon _unit; [_unit, _target, true] call EFUNC(common,claim); // can't play action that depends on weapon if it was added the same frame -[{_this playActionNow "grabDrag";}, _unit] call CBA_fnc_execNextFrame; +[{ + [_this, "grabDrag"] call EFUNC(common,doGesture); +}, _unit] call CBA_fnc_execNextFrame; // move a bit closer and adjust direction when trying to pick up a person if (_target isKindOf "CAManBase") then { diff --git a/addons/dragging/stringtable.xml b/addons/dragging/stringtable.xml index b0334f3ca2..94757299cc 100644 --- a/addons/dragging/stringtable.xml +++ b/addons/dragging/stringtable.xml @@ -25,6 +25,18 @@ Lascia Elengedés + + Drag/Release Object + Тащить/Отпустить Объекты + Arrastrar/Soltar Objeto + Ciągnij/Puść Obiekt + Táhnout/Položit Objekt + Trainer/Lâcher Objets + Objekt ziehen/loslassen + Arrastar/Soltar Objeto + Trascina/Lascia Oggetto + Húzás/Elengedés Objektum + Item too heavy Gegenstand ist zu schwer diff --git a/addons/explosives/functions/fnc_canDefuse.sqf b/addons/explosives/functions/fnc_canDefuse.sqf index e69ac41dac..be114bf072 100644 --- a/addons/explosives/functions/fnc_canDefuse.sqf +++ b/addons/explosives/functions/fnc_canDefuse.sqf @@ -4,7 +4,7 @@ * * Arguments: * 0: Unit - * 0: Target + * 0: Target (ACE_DefuseObject) * * Return Value: * Able to defuse @@ -19,15 +19,16 @@ params ["_unit", "_target"]; TRACE_2("params",_unit,_target); -private ["_isSpecialist"]; - -if (isNull(_target getVariable [QGVAR(Explosive),objNull])) exitWith { +private _explosive = _target getVariable [QGVAR(Explosive), objNull]; +if (isNull _explosive) exitWith { deleteVehicle _target; false }; if (vehicle _unit != _unit || {!("ACE_DefusalKit" in (items _unit))}) exitWith {false}; -_isSpecialist = [_unit] call EFUNC(Common,isEOD); -if (GVAR(RequireSpecialist) && {!_isSpecialist}) exitWith {false}; +if (GVAR(RequireSpecialist) && {!([_unit] call EFUNC(Common,isEOD))}) exitWith {false}; + +//Handle the naval mines (which doens't get turned into items when defused): +if ((_explosive isKindOf "UnderwaterMine_Range_Ammo") && {!mineActive _explosive}) exitWith {false}; true diff --git a/addons/explosives/functions/fnc_placeExplosive.sqf b/addons/explosives/functions/fnc_placeExplosive.sqf index 455b768b97..4a3e06df4b 100644 --- a/addons/explosives/functions/fnc_placeExplosive.sqf +++ b/addons/explosives/functions/fnc_placeExplosive.sqf @@ -27,7 +27,7 @@ TRACE_7("params",_unit,_pos,_dir,_magazineClass,_triggerConfig,_triggerSpecificV private ["_ammo", "_explosive", "_attachedTo", "_magazineTrigger", "_pitch", "_digDistance", "_canDigDown", "_soundEnviron", "_surfaceType"]; -_unit playActionNow "PutDown"; +[_unit, "PutDown"] call EFUNC(common,doGesture); _attachedTo = objNull; if (!isNull _setupPlaceholderObject) then { diff --git a/addons/explosives/functions/fnc_setupExplosive.sqf b/addons/explosives/functions/fnc_setupExplosive.sqf index 6dd1094c6a..0897836eb3 100644 --- a/addons/explosives/functions/fnc_setupExplosive.sqf +++ b/addons/explosives/functions/fnc_setupExplosive.sqf @@ -185,7 +185,7 @@ GVAR(TweakedAngle) = 0; _expSetupVehicle setVariable [QGVAR(Direction), _placeAngle, true]; _unit removeMagazine _magClassname; - _unit playActionNow "PutDown"; + [_unit, "PutDown"] call EFUNC(common,doGesture); _unit setVariable [QGVAR(PlantingExplosive), true]; [{_this setVariable [QGVAR(PlantingExplosive), false]}, _unit, 1.5] call CBA_fnc_waitAndExecute; diff --git a/addons/explosives/functions/fnc_startDefuse.sqf b/addons/explosives/functions/fnc_startDefuse.sqf index 8e3f071661..99d68a5734 100644 --- a/addons/explosives/functions/fnc_startDefuse.sqf +++ b/addons/explosives/functions/fnc_startDefuse.sqf @@ -46,7 +46,7 @@ if (ACE_player != _unit) then { if (isPlayer _unit) then { [QGVAR(startDefuse), [_unit, _target], _unit] call CBA_fnc_targetEvent; } else { - _unit playActionNow _actionToPlay; + [_unit, _actionToPlay] call EFUNC(common,doGesture); _unit disableAI "MOVE"; _unit disableAI "TARGET"; _defuseTime = [[_unit] call EFUNC(Common,isEOD), _target] call _fnc_DefuseTime; @@ -59,10 +59,10 @@ if (ACE_player != _unit) then { }, [_unit, _target], _defuseTime] call CBA_fnc_waitAndExecute; }; } else { - _unit playActionNow _actionToPlay; + [_unit, _actionToPlay] call EFUNC(common,doGesture); _isEOD = [_unit] call EFUNC(Common,isEOD); _defuseTime = [_isEOD, _target] call _fnc_DefuseTime; if (_isEOD || {!GVAR(RequireSpecialist)}) then { - [_defuseTime, [_unit,_target], {(_this select 0) call FUNC(defuseExplosive)}, {}, (localize LSTRING(DefusingExplosive))] call EFUNC(common,progressBar); + [_defuseTime, [_unit,_target], {(_this select 0) call FUNC(defuseExplosive)}, {}, (localize LSTRING(DefusingExplosive)), {true}, ["isNotSwimming"]] call EFUNC(common,progressBar); }; }; diff --git a/addons/fastroping/XEH_postInit.sqf b/addons/fastroping/XEH_postInit.sqf index 752ac2f756..2752e2dcde 100644 --- a/addons/fastroping/XEH_postInit.sqf +++ b/addons/fastroping/XEH_postInit.sqf @@ -7,3 +7,12 @@ [QGVAR(startFastRope), { [FUNC(fastRopeServerPFH), 0, _this] call CBA_fnc_addPerFrameHandler; }] call CBA_fnc_addEventHandler; + +["ACE3 Vehicles", QGVAR(cutRopes), localize LSTRING(Interaction_cutRopes), { + if ([vehicle ACE_player] call FUNC(canCutRopes)) then { + [vehicle ACE_player] call FUNC(cutRopes); + true + } else { + false + }; +}, {false}] call CBA_fnc_addKeybind; diff --git a/addons/fcs/ACE_UI.hpp b/addons/fcs/ACE_UI.hpp index ca35779f36..9423e49656 100644 --- a/addons/fcs/ACE_UI.hpp +++ b/addons/fcs/ACE_UI.hpp @@ -1,7 +1,7 @@ class ACE_UI { class gunnerZeroing { class conditions { - ADDON = "false"; + ADDON = "(false)"; }; }; }; diff --git a/addons/finger/functions/fnc_keyPress.sqf b/addons/finger/functions/fnc_keyPress.sqf index ec2d7722ad..b9231fb17b 100644 --- a/addons/finger/functions/fnc_keyPress.sqf +++ b/addons/finger/functions/fnc_keyPress.sqf @@ -60,6 +60,6 @@ TRACE_1("sending finger to",_sendFingerToPlayers); [QGVAR(fingered), [ACE_player, _fingerPosASL, _originASL vectorDistance _fingerPosASL], _sendFingerToPlayers] call CBA_fnc_targetEvent; -ACE_player playActionNow "GestureGo"; +[ACE_player, "GestureGo"] call EFUNC(common,doGesture); true diff --git a/addons/gestures/CfgEventHandlers.hpp b/addons/gestures/CfgEventHandlers.hpp index 83a4cf763c..becf395052 100644 --- a/addons/gestures/CfgEventHandlers.hpp +++ b/addons/gestures/CfgEventHandlers.hpp @@ -16,9 +16,3 @@ class Extended_PostInit_EventHandlers { init = QUOTE(call COMPILE_FILE(XEH_postInit)); }; }; - -class Extended_DisplayLoad_EventHandlers { - class RscDisplayMission { - ADDON = QUOTE(_this call COMPILE_FILE(XEH_missionDisplayLoad)); - }; -}; diff --git a/addons/gestures/CfgVehicles.hpp b/addons/gestures/CfgVehicles.hpp index 2c099bcc45..6eb3990446 100644 --- a/addons/gestures/CfgVehicles.hpp +++ b/addons/gestures/CfgVehicles.hpp @@ -5,7 +5,7 @@ class CfgVehicles { class ACE_SelfActions { class ADDON { displayName = CSTRING(Gestures); - condition = QUOTE((canStand _target) && GVAR(ReloadMutex) && {GVAR(showOnInteractionMenu) == 2}); + condition = QUOTE((canStand _target) && {GVAR(showOnInteractionMenu) == 2}); statement = ""; showDisabled = 1; priority = 3.5; @@ -14,42 +14,42 @@ class CfgVehicles { class GVAR(Advance) { displayName = CSTRING(Advance); condition = QUOTE(true); - statement = QUOTE(_target playActionNow 'gestureAdvance';); + statement = QUOTE([ARR_2(_target,'gestureAdvance')] call EFUNC(common,doGesture);); showDisabled = 1; priority = 1.9; }; class GVAR(Go) { displayName = CSTRING(Go); condition = QUOTE(true); - statement = QUOTE(_target playActionNow ([ARR_2('gestureGo','gestureGoB')] select floor random 2);); + statement = QUOTE([ARR_2(_target,selectRandom [ARR_2('gestureGo','gestureGoB')])] call EFUNC(common,doGesture);); showDisabled = 1; priority = 1.8; }; class GVAR(Follow) { displayName = CSTRING(Follow); condition = QUOTE(true); - statement = QUOTE(_target playActionNow 'gestureFollow';); + statement = QUOTE([ARR_2(_target,'gestureFollow')] call EFUNC(common,doGesture);); showDisabled = 1; priority = 1.7; }; class GVAR(Up) { displayName = CSTRING(Up); condition = QUOTE(true); - statement = QUOTE(_target playActionNow 'gestureUp';); + statement = QUOTE([ARR_2(_target,'gestureUp')] call EFUNC(common,doGesture);); showDisabled = 1; priority = 1.5; }; class GVAR(CeaseFire) { displayName = CSTRING(CeaseFire); condition = QUOTE(true); - statement = QUOTE(_target playActionNow 'gestureCeaseFire';); + statement = QUOTE([ARR_2(_target,'gestureCeaseFire')] call EFUNC(common,doGesture);); showDisabled = 1; priority = 1.3; }; class GVAR(Stop) { displayName = CSTRING(Stop); condition = QUOTE(true); - statement = QUOTE(_target playActionNow 'gestureFreeze';); // BI animation - is actualls "stop" in all stances but prone + statement = QUOTE([ARR_2(_target,'gestureFreeze')] call EFUNC(common,doGesture);); // BI animation - is actualls "stop" in all stances but prone showDisabled = 1; priority = 1.2; }; diff --git a/addons/gestures/XEH_missionDisplayLoad.sqf b/addons/gestures/XEH_missionDisplayLoad.sqf deleted file mode 100644 index 856f361d3a..0000000000 --- a/addons/gestures/XEH_missionDisplayLoad.sqf +++ /dev/null @@ -1,32 +0,0 @@ -#include "script_component.hpp" - -disableSerialization; - -params ["_display"]; - -_display displayAddEventHandler ["KeyDown", { - if ((_this select 1) in actionKeys "ReloadMagazine") then { - if (isNull ACE_player || {!alive ACE_player}) exitWith {false}; - - private _weapon = currentWeapon ACE_player; - - if (_weapon != "") then { - GVAR(ReloadMutex) = false; - - private _gesture = getText (configfile >> "CfgWeapons" >> _weapon >> "reloadAction"); - private _isLauncher = _weapon isKindOf ["Launcher", configFile >> "CfgWeapons"]; - private _config = ["CfgGesturesMale", "CfgMovesMaleSdr"] select _isLauncher; - private _duration = getNumber (configfile >> _config >> "States" >> _gesture >> "speed"); - - if (_duration != 0) then { - _duration = if (_duration < 0) then { abs _duration } else { 1 / _duration }; - } else { - _duration = 3; - }; - - TRACE_2("Reloading, blocking gestures",_weapon,_duration); - [{GVAR(ReloadMutex) = true;}, [], _duration] call CBA_fnc_waitAndExecute; - }; - }; - false -}]; diff --git a/addons/gestures/XEH_postInit.sqf b/addons/gestures/XEH_postInit.sqf index 6d9e057e29..b68df0a592 100644 --- a/addons/gestures/XEH_postInit.sqf +++ b/addons/gestures/XEH_postInit.sqf @@ -2,9 +2,6 @@ if (!hasInterface) exitWith {}; -// reload mutex, you can't play signal while reloading -GVAR(ReloadMutex) = true; - // Add keybinds { _x params ["_currentName", "_key", ["_vanillaKey", false] ]; diff --git a/addons/gestures/functions/fnc_playSignal.sqf b/addons/gestures/functions/fnc_playSignal.sqf index 8f20c690ef..273db82da1 100644 --- a/addons/gestures/functions/fnc_playSignal.sqf +++ b/addons/gestures/functions/fnc_playSignal.sqf @@ -17,7 +17,6 @@ TRACE_1("params",_this); -if (!GVAR(ReloadMutex)) exitWith {false}; if (GVAR(showOnInteractionMenu) == 0) exitWith {false}; if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; @@ -34,5 +33,5 @@ private _gesture = if ((_this select [0,2]) == "BI") then { }; TRACE_1("playing gesture",_gesture); -ACE_player playAction _gesture; +[ACE_player, _gesture] call EFUNC(common,doGesture); true diff --git a/addons/goggles/ACE_Settings.hpp b/addons/goggles/ACE_Settings.hpp index a78c2866e0..659a10b4e3 100644 --- a/addons/goggles/ACE_Settings.hpp +++ b/addons/goggles/ACE_Settings.hpp @@ -1,11 +1,11 @@ class ACE_Settings { - /*class GVAR(enable) { // @todo - value = 0; - typeName = "BOOL"; - isClientSettable = 1; - displayName = CSTRING(enable); - };*/ + class GVAR(effects) { + displayName = CSTRING(effects_displayName); + typeName = "SCALAR"; + value = 2; + values[] = {ECSTRING(common,Disabled), CSTRING(effects_tintOnly), CSTRING(enabled_tintAndEffects)}; + }; class GVAR(showInThirdPerson) { value = 0; typeName = "BOOL"; diff --git a/addons/goggles/CfgEventHandlers.hpp b/addons/goggles/CfgEventHandlers.hpp index 578b4ebebb..99cbf2f8ad 100644 --- a/addons/goggles/CfgEventHandlers.hpp +++ b/addons/goggles/CfgEventHandlers.hpp @@ -24,11 +24,3 @@ class Extended_Killed_EventHandlers { }; }; }; - -class Extended_Explosion_EventHandlers { - class CAManBase { - class ADDON { - clientExplosion = QUOTE(if (local (_this select 0)) then {_this call FUNC(handleExplosion)}); - }; - }; -}; diff --git a/addons/goggles/XEH_postInit.sqf b/addons/goggles/XEH_postInit.sqf index ea610afff0..b7b5de9e1b 100644 --- a/addons/goggles/XEH_postInit.sqf +++ b/addons/goggles/XEH_postInit.sqf @@ -3,6 +3,7 @@ if (!hasInterface) exitWith {}; ["ACE3 Common", QGVAR(wipeGlasses), localize LSTRING(WipeGlasses), { + if (GVAR(effects) != 2) exitWith {false}; //Can only wipe if full effects setting is set if (!(GETVAR(ace_player,ACE_isUnconscious,false))) exitWith { call FUNC(clearGlasses); true @@ -12,126 +13,142 @@ if (!hasInterface) exitWith {}; {false}, [20, [true, true, false]], false] call CBA_fnc_addKeybind; -// make sure to stack effect layers in correct order -GVAR(GogglesEffectsLayer) = QGVAR(GogglesEffectsLayer) call BIS_fnc_RSCLayer; -GVAR(GogglesLayer) = QGVAR(GogglesLayer) call BIS_fnc_RSCLayer; -if (isNil QGVAR(UsePP)) then { - GVAR(UsePP) = true; -}; +["ace_settingsInitialized", { + TRACE_2("ace_settingsInitialized eh",GVAR(effects),GVAR(showInThirdPerson)); -// init pp effects -GVAR(PostProcess) = ppEffectCreate ["ColorCorrections", 1995]; -GVAR(PostProcessEyes) = ppEffectCreate ["ColorCorrections", 1992]; -GVAR(PostProcessEyes) ppEffectAdjust [1, 1, 0, [0, 0, 0, 0], [0, 0, 0, 1], [1, 1, 1, 0]]; -GVAR(PostProcessEyes) ppEffectCommit 0; -GVAR(PostProcessEyes) ppEffectEnable false; + if (GVAR(effects) == 0) exitWith {}; -GVAR(EffectsActive) = false; + // ---Add the TINT Effect--- + + // make sure to stack effect layers in correct order + GVAR(GogglesEffectsLayer) = QGVAR(GogglesEffectsLayer) call BIS_fnc_RSCLayer; + GVAR(GogglesLayer) = QGVAR(GogglesLayer) call BIS_fnc_RSCLayer; -SETGLASSES(ace_player,GLASSESDEFAULT); - -GVAR(FrameEvent) = [false, [false, 20]]; -GVAR(PostProcessEyes_Enabled) = false; -GVAR(DustHandler) = -1; -GVAR(RainDrops) = objNull; -GVAR(RainActive) = false; -GVAR(RainLastLevel) = 0; -GVAR(surfaceCache) = ""; -GVAR(surfaceCacheIsDust) = false; - -// init GlassesChanged eventhandler -GVAR(OldGlasses) = ""; - -["loadout", { - params ["_unit"]; - - private _currentGlasses = goggles _unit; - - if (GVAR(OldGlasses) != _currentGlasses) then { - ["ace_glassesChanged", [_unit, _currentGlasses]] call CBA_fnc_localEvent; - GVAR(OldGlasses) = _currentGlasses; + if (isNil QGVAR(UsePP)) then { + GVAR(UsePP) = true; }; -}] call CBA_fnc_addPlayerEventHandler; -// add glasses eventhandlers -["ace_glassesChanged", { - params ["_unit", "_glasses"]; + // init GlassesChanged eventhandler + GVAR(OldGlasses) = ""; + ["loadout", { + params ["_unit"]; - SETGLASSES(_unit,GLASSESDEFAULT); + private _currentGlasses = goggles _unit; - if (call FUNC(ExternalCamera)) exitWith {call FUNC(RemoveGlassesEffect)}; + if (GVAR(OldGlasses) != _currentGlasses) then { + ["ace_glassesChanged", [_unit, _currentGlasses]] call CBA_fnc_localEvent; + GVAR(OldGlasses) = _currentGlasses; + }; + }] call CBA_fnc_addPlayerEventHandler; - if ([_unit] call FUNC(isGogglesVisible)) then { - _glasses call FUNC(applyGlassesEffect); - } else { - call FUNC(removeGlassesEffect); + + // init pp effects + GVAR(PostProcess) = ppEffectCreate ["ColorCorrections", 1995]; + GVAR(EffectsActive) = false; + + // check goggles + private _fnc_checkGoggles = { + params ["_unit"]; + + if (GVAR(EffectsActive)) then { + if (call FUNC(externalCamera) || {!([_unit] call FUNC(isGogglesVisible))}) then { + call FUNC(removeGlassesEffect); + }; + } else { + if (!(call FUNC(externalCamera)) && {[_unit] call FUNC(isGogglesVisible)}) then { + [goggles _unit] call FUNC(applyGlassesEffect); + }; + }; }; -}] call CBA_fnc_addEventHandler; -["ace_glassesCracked", { - params ["_unit"]; + ["cameraView", _fnc_checkGoggles] call CBA_fnc_addPlayerEventHandler; + ["ace_activeCameraChanged", _fnc_checkGoggles] call CBA_fnc_addEventHandler; - _unit setVariable ["ACE_EyesDamaged", true]; - GVAR(PostProcessEyes) ppEffectAdjust [1, 1, 0, [0, 0, 0, 0], [0.5, 0.5, 0.5, 0.5], [1, 1, 1, 0]]; - GVAR(PostProcessEyes) ppEffectCommit 0; - GVAR(PostProcessEyes) ppEffectEnable true; + // add glasses eventhandlers + ["ace_glassesChanged", { + params ["_unit", "_glasses"]; - [{ - GVAR(PostProcessEyes) ppEffectAdjust [1, 1, 0, [0, 0, 0, 0], [1, 1, 1, 1], [1, 1, 1, 0]]; - GVAR(PostProcessEyes) ppEffectCommit 5; + SETGLASSES(_unit,GLASSESDEFAULT); - [{ - params ["_unit"]; + if (call FUNC(ExternalCamera)) exitWith {call FUNC(RemoveGlassesEffect)}; - GVAR(PostProcessEyes) ppEffectEnable false; - - _unit setVariable ["ACE_EyesDamaged", false]; - - }, _this, 5] call CBA_fnc_waitAndExecute; - - }, _unit, 25] call CBA_fnc_waitAndExecute; - -}] call CBA_fnc_addEventHandler; - -// check goggles -private _fnc_checkGoggles = { - params ["_unit"]; - - if (GVAR(EffectsActive)) then { - if (call FUNC(externalCamera) || {!([_unit] call FUNC(isGogglesVisible))}) then { + if ([_unit] call FUNC(isGogglesVisible)) then { + _glasses call FUNC(applyGlassesEffect); + } else { call FUNC(removeGlassesEffect); }; - } else { - if (!(call FUNC(externalCamera)) && {[_unit] call FUNC(isGogglesVisible)}) then { - [goggles _unit] call FUNC(applyGlassesEffect); - }; + }] call CBA_fnc_addEventHandler; + + + // // ---Add the Dust/Dirt/Rain Effects--- + if (GVAR(effects) == 2) then { + + // Register fire event handler + ["ace_firedPlayer", DFUNC(handleFired)] call CBA_fnc_addEventHandler; + + //Add Explosion XEH + ["CAManBase", "explosion", FUNC(handleExplosion)] call CBA_fnc_addClassEventHandler; + + GVAR(PostProcessEyes) = ppEffectCreate ["ColorCorrections", 1992]; + GVAR(PostProcessEyes) ppEffectAdjust [1, 1, 0, [0, 0, 0, 0], [0, 0, 0, 1], [1, 1, 1, 0]]; + GVAR(PostProcessEyes) ppEffectCommit 0; + GVAR(PostProcessEyes) ppEffectEnable false; + GVAR(PostProcessEyes_Enabled) = false; + + GVAR(FrameEvent) = [false, [false, 20]]; + GVAR(DustHandler) = -1; + GVAR(RainDrops) = objNull; + GVAR(RainActive) = false; + GVAR(RainLastLevel) = 0; + GVAR(surfaceCache) = ""; + GVAR(surfaceCacheIsDust) = false; + + ["ace_glassesCracked", { + params ["_unit"]; + + _unit setVariable ["ACE_EyesDamaged", true]; + + GVAR(PostProcessEyes) ppEffectAdjust [1, 1, 0, [0, 0, 0, 0], [0.5, 0.5, 0.5, 0.5], [1, 1, 1, 0]]; + GVAR(PostProcessEyes) ppEffectCommit 0; + GVAR(PostProcessEyes) ppEffectEnable true; + + [{ + GVAR(PostProcessEyes) ppEffectAdjust [1, 1, 0, [0, 0, 0, 0], [1, 1, 1, 1], [1, 1, 1, 0]]; + GVAR(PostProcessEyes) ppEffectCommit 5; + + [{ + params ["_unit"]; + + GVAR(PostProcessEyes) ppEffectEnable false; + + _unit setVariable ["ACE_EyesDamaged", false]; + + }, _this, 5] call CBA_fnc_waitAndExecute; + + }, _unit, 25] call CBA_fnc_waitAndExecute; + + }] call CBA_fnc_addEventHandler; + + // goggles effects main PFH + [{ + BEGIN_COUNTER(goggles); + + // rain + call FUNC(applyRainEffect); + + // auto remove effects under water + if (GVAR(EffectsActive) && {underwater ACE_player} && {[goggles ACE_player] call FUNC(isDivingGoggles)}) then { + call FUNC(removeRainEffect); + call FUNC(removeDirtEffect); + call FUNC(removeDustEffect); + }; + + // rotor wash effect + call FUNC(applyRotorWashEffect); + + END_COUNTER(goggles); + }, 0.5, []] call CBA_fnc_addPerFrameHandler; }; -}; - -["cameraView", _fnc_checkGoggles] call CBA_fnc_addPlayerEventHandler; -["ace_activeCameraChanged", _fnc_checkGoggles] call CBA_fnc_addEventHandler; - -// goggles effects main PFH -[{ - BEGIN_COUNTER(goggles); - - // rain - call FUNC(applyRainEffect); - - // auto remove effects under water - if (GVAR(EffectsActive) && {underwater ACE_player} && {[goggles ACE_player] call FUNC(isDivingGoggles)}) then { - call FUNC(removeRainEffect); - call FUNC(removeDirtEffect); - call FUNC(removeDustEffect); - }; - - // rotor wash effect - call FUNC(applyRotorWashEffect); - - END_COUNTER(goggles); -}, 0.5, []] call CBA_fnc_addPerFrameHandler; - -// Register fire event handler -["ace_firedPlayer", DFUNC(handleFired)] call CBA_fnc_addEventHandler; +}] call CBA_fnc_addEventHandler; diff --git a/addons/goggles/functions/fnc_applyGlassesEffect.sqf b/addons/goggles/functions/fnc_applyGlassesEffect.sqf index 7be010ef9c..71a5b3b84c 100644 --- a/addons/goggles/functions/fnc_applyGlassesEffect.sqf +++ b/addons/goggles/functions/fnc_applyGlassesEffect.sqf @@ -46,13 +46,15 @@ if (_imagePath != "") then { (GLASSDISPLAY displayCtrl 10650) ctrlSetText _imagePath; }; -if (GETDIRT) then { - call FUNC(applyDirtEffect); -}; +if (GVAR(effects) == 2) then { + if (GETDIRT) then { + call FUNC(applyDirtEffect); + }; -if (GETDUSTT(DACTIVE)) then { - SETDUST(DAMOUNT,CLAMP(GETDUSTT(DAMOUNT)-1,0,2)); - call FUNC(applyDustEffect); + if (GETDUSTT(DACTIVE)) then { + SETDUST(DAMOUNT,CLAMP(GETDUSTT(DAMOUNT)-1,0,2)); + call FUNC(applyDustEffect); + }; }; GVAR(EffectsActive) = true; diff --git a/addons/goggles/functions/fnc_clearGlasses.sqf b/addons/goggles/functions/fnc_clearGlasses.sqf index f1622c8680..b01960527a 100644 --- a/addons/goggles/functions/fnc_clearGlasses.sqf +++ b/addons/goggles/functions/fnc_clearGlasses.sqf @@ -27,7 +27,7 @@ _effects set [BROKEN, _broken]; SETGLASSES(_unit,_effects); if ((stance _unit != "PRONE") && {primaryWeapon _unit != ""} && {currentWeapon _unit == primaryWeapon _unit}) then { - _unit playActionNow "gestureWipeFace"; + [_unit, "gestureWipeFace"] call EFUNC(common,doGesture); }; [{ diff --git a/addons/goggles/functions/fnc_externalCamera.sqf b/addons/goggles/functions/fnc_externalCamera.sqf index 06c6cec407..9e7eed3efe 100644 --- a/addons/goggles/functions/fnc_externalCamera.sqf +++ b/addons/goggles/functions/fnc_externalCamera.sqf @@ -16,7 +16,7 @@ #include "script_component.hpp" // Handle the ThreeDen Editor Camera -if ((!isNil {is3DEN}) && {is3DEN}) exitWith {true}; +if (is3DEN) exitWith {true}; if (GVAR(showInThirdPerson)) then { cameraView in ["GROUP"] || EFUNC(common,isFeatureCameraActive) diff --git a/addons/goggles/functions/fnc_handleKilled.sqf b/addons/goggles/functions/fnc_handleKilled.sqf index e8e207c478..b9af2e075b 100644 --- a/addons/goggles/functions/fnc_handleKilled.sqf +++ b/addons/goggles/functions/fnc_handleKilled.sqf @@ -15,20 +15,21 @@ params ["_unit"]; if (_unit != ACE_player) exitWith {true}; - -GVAR(PostProcessEyes) ppEffectEnable false; - -SETGLASSES(_unit,GLASSESDEFAULT); +if (GVAR(effects) == 0) exitWith {true}; call FUNC(removeGlassesEffect); -GVAR(EffectsActive) = false; +if (GVAR(effects) == 2) then { + GVAR(PostProcessEyes) ppEffectEnable false; -_unit setVariable ["ACE_EyesDamaged", false]; + SETGLASSES(_unit,GLASSESDEFAULT); -if (GVAR(DustHandler) != -1) then { - [GVAR(DustHandler)] call CBA_fnc_removePerFrameHandler; + _unit setVariable ["ACE_EyesDamaged", false]; + + if (GVAR(DustHandler) != -1) then { + [GVAR(DustHandler)] call CBA_fnc_removePerFrameHandler; + }; + GVAR(DustHandler) = -1; }; -GVAR(DustHandler) = -1; true diff --git a/addons/goggles/functions/fnc_removeGlassesEffect.sqf b/addons/goggles/functions/fnc_removeGlassesEffect.sqf index 658daf1d32..c27d8684e8 100644 --- a/addons/goggles/functions/fnc_removeGlassesEffect.sqf +++ b/addons/goggles/functions/fnc_removeGlassesEffect.sqf @@ -22,6 +22,8 @@ if (!isNull (GLASSDISPLAY)) then { GLASSDISPLAY closeDisplay 0; }; -call FUNC(removeDirtEffect); -call FUNC(removeRainEffect); -call FUNC(removeDustEffect); +if (GVAR(effects) == 2) then { + call FUNC(removeDirtEffect); + call FUNC(removeRainEffect); + call FUNC(removeDustEffect); +}; diff --git a/addons/goggles/stringtable.xml b/addons/goggles/stringtable.xml index ce337760d7..31dd10dbf1 100644 --- a/addons/goggles/stringtable.xml +++ b/addons/goggles/stringtable.xml @@ -25,5 +25,14 @@ Limpar Óculos Pulisci gli occhiali + + Goggle Effects + + + Tint + + + Tint + Effects + \ No newline at end of file diff --git a/addons/grenades/CfgAmmo.hpp b/addons/grenades/CfgAmmo.hpp index a5971044f9..74f0677c3c 100644 --- a/addons/grenades/CfgAmmo.hpp +++ b/addons/grenades/CfgAmmo.hpp @@ -1,5 +1,11 @@ class CfgAmmo { + class Default; + class Grenade: Default { + GVAR(pullPinSound)[] = {"A3\sounds_f\weapons\grenades\Grenade_PullPin.wss", 1.5, 1, 10}; + impactGroundSoft[] = {}; + }; + class FlareCore; class FlareBase: FlareCore { intensity = 20000; @@ -51,6 +57,7 @@ class CfgAmmo { class ACE_G_Handflare_White: SmokeShell { GVAR(flare) = 1; GVAR(color)[] = {0.5,0.5,0.5,0.5}; + GVAR(pullPinSound)[] = {"A3\sounds_f\weapons\smokeshell\smoke_1.wss", 0.4, 1, 10}; model = "\A3\weapons_f\ammo\flare_white"; dangerRadiusHit = -1; suppressionRadiusHit = -1; @@ -97,4 +104,24 @@ class CfgAmmo { effectsSmoke = "ACE_M84FlashbangEffect"; whistleDist = 0; }; + + class Chemlight_base: SmokeShell { + GVAR(pullPinSound)[] = {"A3\sounds_f\weapons\Other\dry4.wss", 3, 2, 10}; + soundImpactHard1[] = {"A3\sounds_f\characters\footsteps\concrete_run_1",1,1.8,65}; + soundImpactHard2[] = {"A3\sounds_f\characters\footsteps\concrete_run_1",1,1.9,65}; + soundImpactHard3[] = {"A3\sounds_f\characters\footsteps\concrete_run_1",1,1.6,65}; + soundImpactHard4[] = {"A3\sounds_f\characters\footsteps\concrete_run_1",1,2,65}; + soundImpactHard5[] = {"A3\sounds_f\characters\footsteps\concrete_run_1",1,1.5,65}; + soundImpactHard6[] = {"A3\sounds_f\characters\footsteps\concrete_run_1",1,1.7,65}; + soundImpactHard7[] = {"A3\sounds_f\characters\footsteps\concrete_run_1",1,2.1,65}; + soundImpactIron1[] = {"A3\sounds_f\characters\footsteps\concrete_run_1",1,2.1,95}; + soundImpactIron2[] = {"A3\sounds_f\characters\footsteps\steel_run_4",1,1.75,95}; + soundImpactIron3[] = {"A3\sounds_f\characters\footsteps\steel_run_4",1,1.6,95}; + soundImpactIron4[] = {"A3\sounds_f\characters\footsteps\steel_run_2",1,2,95}; + soundImpactIron5[] = {"A3\sounds_f\characters\footsteps\steel_run_2",1,2.1,95}; + soundImpactWoodExt1[] = {"A3\sounds_f\characters\footsteps\wood_run_ext_1",1,1.1,75}; + soundImpactWoodExt2[] = {"A3\sounds_f\characters\footsteps\wood_run_ext_1",1,1.15,75}; + soundImpactWoodExt3[] = {"A3\sounds_f\characters\footsteps\wood_run_ext_2",1,1.1,75}; + soundImpactWoodExt4[] = {"A3\sounds_f\characters\footsteps\wood_run_ext_2",1,1.15,75}; + }; }; diff --git a/addons/grenades/functions/fnc_throwGrenade.sqf b/addons/grenades/functions/fnc_throwGrenade.sqf index e603dd8743..1ea14f9d73 100644 --- a/addons/grenades/functions/fnc_throwGrenade.sqf +++ b/addons/grenades/functions/fnc_throwGrenade.sqf @@ -27,8 +27,15 @@ if (isNull _projectile) then { private _config = configFile >> "CfgAmmo" >> _ammo; -// handle special grenades +// handle special grenades and sounds if (local _unit) then { + // handle priming sound, if present + private _soundConfig = getArray (configFile >> "CfgAmmo" >> _ammo >> QGVAR(pullPinSound)); + if !(_soundConfig isEqualTo []) then { + _soundConfig params ["_file", "_volume", "_pitch", "_distance"]; + playSound3D [_file, objNull, false, getPosASL _projectile, _volume, _pitch, _distance]; + }; + if (getNumber (_config >> QGVAR(flashbang)) == 1) then { private _fuzeTime = getNumber (_config >> "explosionTime"); diff --git a/addons/gunbag/CfgWeapons.hpp b/addons/gunbag/CfgWeapons.hpp deleted file mode 100644 index 31ffb64c79..0000000000 --- a/addons/gunbag/CfgWeapons.hpp +++ /dev/null @@ -1,41 +0,0 @@ -class CfgWeapons { - class Rifle_Long_Base_F; - - /* Long Rifles */ - - class GM6_base_F: Rifle_Long_Base_F { - GVAR(allowGunbag) = 1; - }; - - class LRR_base_F: Rifle_Long_Base_F { - GVAR(allowGunbag) = 1; - }; - - class DMR_06_base_F: Rifle_Long_Base_F { - GVAR(allowGunbag) = 1; - }; - - class DMR_05_base_F: Rifle_Long_Base_F { - GVAR(allowGunbag) = 1; - }; - - class DMR_04_base_F: Rifle_Long_Base_F { - GVAR(allowGunbag) = 1; - }; - - class DMR_03_base_F: Rifle_Long_Base_F { - GVAR(allowGunbag) = 1; - }; - - class DMR_02_base_F: Rifle_Long_Base_F { - GVAR(allowGunbag) = 1; - }; - - class DMR_01_base_F: Rifle_Long_Base_F { - GVAR(allowGunbag) = 1; - }; - - class EBR_base_F: Rifle_Long_Base_F { - GVAR(allowGunbag) = 1; - }; -}; diff --git a/addons/gunbag/XEH_PREP.hpp b/addons/gunbag/XEH_PREP.hpp index df84b594bf..d76682f986 100644 --- a/addons/gunbag/XEH_PREP.hpp +++ b/addons/gunbag/XEH_PREP.hpp @@ -7,3 +7,4 @@ PREP(status); PREP(canInteract); PREP(calculateMass); PREP(hasGunbag); +PREP(isMachineGun); diff --git a/addons/gunbag/config.cpp b/addons/gunbag/config.cpp index 87fcd84f1c..6efaceb5d6 100644 --- a/addons/gunbag/config.cpp +++ b/addons/gunbag/config.cpp @@ -16,4 +16,3 @@ class CfgPatches { #include "CfgEventHandlers.hpp" #include "CfgVehicles.hpp" -#include "CfgWeapons.hpp" diff --git a/addons/gunbag/functions/fnc_canInteract.sqf b/addons/gunbag/functions/fnc_canInteract.sqf index b24533f632..1ec9e38583 100644 --- a/addons/gunbag/functions/fnc_canInteract.sqf +++ b/addons/gunbag/functions/fnc_canInteract.sqf @@ -20,12 +20,13 @@ params ["_unit", "_target"]; private _result = -1; private _gunbag = backpackContainer _target; +private _weapon = primaryWeapon _unit; -if ((_gunbag getVariable [QGVAR(gunbagWeapon), []]) isEqualTo [] && {primaryWeapon _unit != ""} && {getNumber (configFile >> "CfgWeapons" >> primaryWeapon _unit >> QGVAR(allowGunbag)) == 1}) then { +if ((_gunbag getVariable [QGVAR(gunbagWeapon), []]) isEqualTo [] && {_weapon != ""} && {!(_weapon call FUNC(isMachineGun))}) then { _result = 0; }; -if (!((_gunbag getVariable [QGVAR(gunbagWeapon), []]) isEqualTo []) && {primaryWeapon _unit == ""}) then { +if (!((_gunbag getVariable [QGVAR(gunbagWeapon), []]) isEqualTo []) && {_weapon == ""}) then { _result = 1; }; diff --git a/addons/gunbag/functions/fnc_isMachineGun.sqf b/addons/gunbag/functions/fnc_isMachineGun.sqf new file mode 100644 index 0000000000..a6191c1cca --- /dev/null +++ b/addons/gunbag/functions/fnc_isMachineGun.sqf @@ -0,0 +1,29 @@ +/* + * Author: commy2 + * Reports true if a weapon is a machine gun. + * + * Arguments: + * 0: Weapon class name + * + * Return Value: + * Is machine gun + * + * Example: + * (currentWeapon player) call ace_gunbag_fnc_isMachineGun + * + * Public: No + */ +#include "script_component.hpp" + +params ["_weapon"]; + +private _config = _weapon call CBA_fnc_getItemConfig; + +// definition of a machine gun by BIS_fnc_itemType +private _cursor = getText (_config >> "cursor"); + +if (toLower _cursor in ["", "emptycursor"]) then { + _cursor = getText (_config >> "cursorAim"); +}; + +_cursor == "MG" diff --git a/addons/interact_menu/functions/fnc_renderActionPoints.sqf b/addons/interact_menu/functions/fnc_renderActionPoints.sqf index e30ee55c10..017d3e539b 100644 --- a/addons/interact_menu/functions/fnc_renderActionPoints.sqf +++ b/addons/interact_menu/functions/fnc_renderActionPoints.sqf @@ -159,7 +159,7 @@ if (count GVAR(collectedActionPoints) > 1) then { private _delta = vectorNormalized ((GVAR(collectedActionPoints) select _i select 1) vectorDiff (GVAR(collectedActionPoints) select _j select 1)); // If _i is inside a cone with 20º half angle with origin on _j - if (_delta select 2 > 0.94) exitWith { + if ((_delta select 2 > 0.94) && {((GVAR(collectedActionPoints) select _i select 1) distance2d (GVAR(collectedActionPoints) select _j select 1)) < 0.1}) exitWith { GVAR(collectedActionPoints) deleteAt _i; }; }; diff --git a/addons/interact_menu/functions/fnc_renderBaseMenu.sqf b/addons/interact_menu/functions/fnc_renderBaseMenu.sqf index 852c2b332f..363f7100f9 100644 --- a/addons/interact_menu/functions/fnc_renderBaseMenu.sqf +++ b/addons/interact_menu/functions/fnc_renderBaseMenu.sqf @@ -68,7 +68,7 @@ private _uid = format [QGVAR(ATCache_%1), _actionName]; private _activeActionTree = [ [_object, _baseActionNode, [], _distanceToBasePoint], DFUNC(collectActiveActionTree), - _object, _uid, 1.0, "interactMenuClosed" + _object, _uid, 1.0, "ace_interactMenuClosed" ] call EFUNC(common,cachedCall); END_COUNTER(fnc_collectActiveActionTree) diff --git a/addons/interaction/functions/fnc_getDown.sqf b/addons/interaction/functions/fnc_getDown.sqf index af0a9da38c..53a846e1c3 100644 --- a/addons/interaction/functions/fnc_getDown.sqf +++ b/addons/interaction/functions/fnc_getDown.sqf @@ -20,7 +20,7 @@ params ["_unit", "_target"]; -_unit playActionNow "GestureGo"; +[_unit, "GestureGo"] call EFUNC(common,doGesture); private "_chance"; _chance = [0.5, 0.8] select (count weapons _unit > 0); diff --git a/addons/interaction/functions/fnc_passMagazine.sqf b/addons/interaction/functions/fnc_passMagazine.sqf index 5016215c39..15a193cd26 100644 --- a/addons/interaction/functions/fnc_passMagazine.sqf +++ b/addons/interaction/functions/fnc_passMagazine.sqf @@ -45,7 +45,7 @@ _player removeMagazines _magToPassClassName; }; } foreach _filteredMags; -_player playActionNow "PutDown"; +[_player, "PutDown"] call EFUNC(common,doGesture); _target addMagazine [_magToPassClassName, _magToPassAmmoCount]; diff --git a/addons/interaction/functions/fnc_sendAway.sqf b/addons/interaction/functions/fnc_sendAway.sqf index c200587f2b..abd4ec50aa 100644 --- a/addons/interaction/functions/fnc_sendAway.sqf +++ b/addons/interaction/functions/fnc_sendAway.sqf @@ -20,7 +20,7 @@ params ["_unit"]; -_unit playActionNow "GestureGo"; +[_unit, "GestureGo"] call EFUNC(common,doGesture); private "_chance"; _chance = [0.5, 0.8] select (count weapons _unit > 0); diff --git a/addons/interaction/functions/fnc_tapShoulder.sqf b/addons/interaction/functions/fnc_tapShoulder.sqf index d6621d2c07..3926503746 100644 --- a/addons/interaction/functions/fnc_tapShoulder.sqf +++ b/addons/interaction/functions/fnc_tapShoulder.sqf @@ -23,6 +23,6 @@ if (_unit == ACE_player) then { addCamShake [4, 0.5, 5]; }; -_unit playActionNow "PutDown"; +[_unit, "PutDown"] call EFUNC(common,doGesture); [QGVAR(tapShoulder), [_target, _shoulderNum], [_target]] call CBA_fnc_targetEvent; diff --git a/addons/javelin/functions/fnc_cycleFireMode.sqf b/addons/javelin/functions/fnc_cycleFireMode.sqf index d14c0cdee5..50609b3468 100644 --- a/addons/javelin/functions/fnc_cycleFireMode.sqf +++ b/addons/javelin/functions/fnc_cycleFireMode.sqf @@ -2,12 +2,12 @@ #include "script_component.hpp" TRACE_1("enter", _this); -private["_player", "_currentFireMode"]; +private _currentShooter = if (ACE_player call CBA_fnc_canUseWeapon) then {ACE_player} else {vehicle ACE_player}; +private _currentFireMode = _currentShooter getVariable["ace_missileguidance_attackProfile", "JAV_TOP"]; -_currentFireMode = ACE_player getVariable["ace_missileguidance_attackProfile", "JAV_TOP"]; if(_currentFireMode == "JAV_DIR") then { _currentFireMode = "JAV_TOP"; } else { _currentFireMode = "JAV_DIR"; }; -ACE_player setVariable["ace_missileguidance_attackProfile", _currentFireMode, false]; +_currentShooter setVariable["ace_missileguidance_attackProfile", _currentFireMode, false]; diff --git a/addons/javelin/functions/fnc_onOpticDraw.sqf b/addons/javelin/functions/fnc_onOpticDraw.sqf index 20606dc4dd..7d1bf64b33 100644 --- a/addons/javelin/functions/fnc_onOpticDraw.sqf +++ b/addons/javelin/functions/fnc_onOpticDraw.sqf @@ -11,7 +11,7 @@ private["_firedEH", "_fov", "_lastTick", "_lockTime", "_maxX", "_maxY", "_minX", private["_offsetX", "_offsetY", "_pos", "_randomLockInterval", "_randomPosWithinBounds", "_range"]; private["_runTime", "_soundTime", "_targetArray", "_zamerny", "_currentShooter"]; -_currentShooter = (vehicle ACE_player); +_currentShooter = if (ACE_player call CBA_fnc_canUseWeapon) then {ACE_player} else {vehicle ACE_player}; #define __OffsetX ((ctrlPosition __JavelinIGUITargetingLineV) select 0) - 0.5 #define __OffsetY ((ctrlPosition __JavelinIGUITargetingLineH) select 1) - 0.5 diff --git a/addons/javelin/functions/fnc_onOpticLoad.sqf b/addons/javelin/functions/fnc_onOpticLoad.sqf index b75f391112..5148ca983f 100644 --- a/addons/javelin/functions/fnc_onOpticLoad.sqf +++ b/addons/javelin/functions/fnc_onOpticLoad.sqf @@ -2,13 +2,15 @@ #include "script_component.hpp" TRACE_1("enter", _this); -#define __LOCKONTIMERANDOM 2 // Deviation in lock on time +#define __LOCKONTIMERANDOM 1 // Deviation in lock on time if((count _this) > 0) then { uiNameSpace setVariable ['ACE_RscOptics_javelin',_this select 0]; }; -ACE_player setVariable ["ace_missileguidance_target",nil, false]; +private _currentShooter = if (ACE_player call CBA_fnc_canUseWeapon) then {ACE_player} else {vehicle ACE_player}; +TRACE_2("shooter",_currentShooter,typeOf _currentShooter); +_currentShooter setVariable ["ace_missileguidance_target", nil, false]; __JavelinIGUISeek ctrlSetTextColor __ColorGray; __JavelinIGUINFOV ctrlSetTextColor __ColorGray; diff --git a/addons/javelin/functions/fnc_showFireMode.sqf b/addons/javelin/functions/fnc_showFireMode.sqf index 5b4f8d7814..95dd038b92 100644 --- a/addons/javelin/functions/fnc_showFireMode.sqf +++ b/addons/javelin/functions/fnc_showFireMode.sqf @@ -2,13 +2,13 @@ #include "script_component.hpp" TRACE_1("enter", _this); -private["_player", "_currentFireMode"]; +private _currentShooter = if (ACE_player call CBA_fnc_canUseWeapon) then {ACE_player} else {vehicle ACE_player}; +private _currentFireMode = _currentShooter getVariable ["ace_missileguidance_attackProfile", "JAV_TOP"]; -_currentFireMode = ACE_player getVariable["ace_missileguidance_attackProfile", "JAV_TOP"]; if(_currentFireMode == "JAV_TOP") then { __JavelinIGUITop ctrlSetTextColor __ColorGreen; __JavelinIGUIDir ctrlSetTextColor __ColorGray; } else { __JavelinIGUITop ctrlSetTextColor __ColorGray; __JavelinIGUIDir ctrlSetTextColor __ColorGreen; -}; \ No newline at end of file +}; diff --git a/addons/main/config.cpp b/addons/main/config.cpp index 9aebb11e36..5d485b6fd9 100644 --- a/addons/main/config.cpp +++ b/addons/main/config.cpp @@ -8,7 +8,8 @@ class CfgPatches { requiredVersion = REQUIRED_VERSION; requiredAddons[] = { // Vanilla - "3den", + "a3_3den", + "a3_3den_language", "a3_air_f", "a3_air_f_beta", "a3_air_f_beta_heli_attack_01", @@ -17,10 +18,21 @@ class CfgPatches { "a3_air_f_beta_heli_transport_02", "a3_air_f_beta_parachute_01", "a3_air_f_beta_parachute_02", + "a3_air_f_epb", "a3_air_f_epb_heli_light_03", + "a3_air_f_epc", "a3_air_f_epc_plane_cas_01", "a3_air_f_epc_plane_cas_02", "a3_air_f_epc_plane_fighter_03", + "a3_air_f_exp", + "a3_air_f_exp_heli_light_01", + "a3_air_f_exp_heli_transport_01", + "a3_air_f_exp_plane_civil_01", + "a3_air_f_exp_uav_03", + "a3_air_f_exp_uav_04", + "a3_air_f_exp_vtol_01", + "a3_air_f_exp_vtol_02", + "a3_air_f_gamma", "a3_air_f_gamma_plane_fighter_03", "a3_air_f_gamma_uav_01", "a3_air_f_gamma_uav_02", @@ -38,6 +50,11 @@ class CfgPatches { "a3_air_f_heli_light_02", "a3_animals_f", "a3_animals_f_animconfig", + "a3_animals_f_beta", + "a3_animals_f_beta_chicken", + "a3_animals_f_beta_dog", + "a3_animals_f_beta_goat", + "a3_animals_f_beta_sheep", "a3_animals_f_chicken", "a3_animals_f_dog", "a3_animals_f_fishes", @@ -49,42 +66,75 @@ class CfgPatches { "a3_animals_f_snakes", "a3_animals_f_turtle", "a3_anims_f", + "a3_anims_f_bootcamp", "a3_anims_f_config_sdr", + "a3_anims_f_config_sdr_weaponswitching", + "a3_anims_f_data", "a3_anims_f_epa", "a3_anims_f_epc", + "a3_anims_f_exp", "a3_anims_f_exp_a", + "a3_anims_f_exp_revive", "a3_anims_f_heli", "a3_anims_f_kart", + "a3_anims_f_mark", "a3_anims_f_mark_deployment", "a3_armor_f", "a3_armor_f_amv", "a3_armor_f_apc_wheeled_03", "a3_armor_f_beta", + "a3_armor_f_beta_apc_tracked_01", "a3_armor_f_beta_apc_tracked_02", + "a3_armor_f_beta_apc_wheeled_01", + "a3_armor_f_beta_apc_wheeled_02", + "a3_armor_f_epb", "a3_armor_f_epb_apc_tracked_03", "a3_armor_f_epb_mbt_03", + "a3_armor_f_epc", "a3_armor_f_epc_mbt_01", + "a3_armor_f_exp", + "a3_armor_f_exp_apc_tracked_02", + "a3_armor_f_exp_apc_wheeled_02", + "a3_armor_f_exp_mbt_02", + "a3_armor_f_gamma", + "a3_armor_f_gamma_apc_wheeled_03", + "a3_armor_f_gamma_mbt_01", + "a3_armor_f_gamma_mbt_02", "a3_armor_f_marid", "a3_armor_f_panther", "a3_armor_f_slammer", "a3_armor_f_t100k", "a3_baseconfig_f", "a3_boat_f", + "a3_boat_f_beta", "a3_boat_f_beta_boat_armed_01", "a3_boat_f_beta_boat_transport_01", + "a3_boat_f_beta_sdv_01", "a3_boat_f_boat_armed_01", "a3_boat_f_boat_transport_01", "a3_boat_f_civilian_boat", + "a3_boat_f_epc", + "a3_boat_f_epc_submarine_01", "a3_boat_f_epc_submarine_01_f", + "a3_boat_f_exp", + "a3_boat_f_exp_boat_transport_01", + "a3_boat_f_exp_boat_transport_02", + "a3_boat_f_exp_scooter_transport_01", + "a3_boat_f_gamma", + "a3_boat_f_gamma_boat_civil_01", + "a3_boat_f_gamma_boat_civil_04", "a3_boat_f_gamma_boat_transport_01", + "a3_boat_f_heli", "a3_boat_f_heli_boat_armed_01", "a3_boat_f_heli_sdv_01", "a3_boat_f_sdv_01", "a3_boat_f_trawler", "a3_cargoposes_f", + "a3_cargoposes_f_exp", "a3_cargoposes_f_heli", "a3_characters_f", "a3_characters_f_beta", + "a3_characters_f_beta_indep", "a3_characters_f_blufor", "a3_characters_f_bootcamp", "a3_characters_f_bootcamp_common", @@ -94,6 +144,10 @@ class CfgPatches { "a3_characters_f_epb", "a3_characters_f_epb_heads", "a3_characters_f_epc", + "a3_characters_f_exp", + "a3_characters_f_exp_civil", + "a3_characters_f_exp_headgear", + "a3_characters_f_exp_vests", "a3_characters_f_gamma", "a3_characters_f_heads", "a3_characters_f_indep", @@ -110,22 +164,54 @@ class CfgPatches { "a3_data_f_curator_misc", "a3_data_f_curator_respawn", "a3_data_f_curator_virtual", + "a3_data_f_exp", "a3_data_f_exp_a", "a3_data_f_exp_a_virtual", "a3_data_f_exp_b", + "a3_data_f_exp_particleeffects", "a3_data_f_heli", "a3_data_f_hook", "a3_data_f_kart", "a3_data_f_kart_particleeffects", "a3_data_f_mark", "a3_data_f_particleeffects", + "a3_drones_f", + "a3_drones_f_air_f_gamma_uav_01", + "a3_drones_f_air_f_gamma_uav_02", + "a3_drones_f_characters_f_gamma", + "a3_drones_f_soft_f_gamma_ugv_01", + "a3_drones_f_weapons_f_gamma_ammoboxes", + "a3_drones_f_weapons_f_gamma_items", + "a3_dubbing_f", + "a3_dubbing_f_beta", + "a3_dubbing_f_bootcamp", + "a3_dubbing_f_epa", + "a3_dubbing_f_epb", + "a3_dubbing_f_epc", + "a3_dubbing_f_exp", + "a3_dubbing_f_gamma", + "a3_dubbing_f_heli", + "a3_dubbing_f_mark", + "a3_dubbing_f_mp_mark", "a3_dubbing_radio_f", + "a3_dubbing_radio_f_data_eng", + "a3_dubbing_radio_f_data_engb", + "a3_dubbing_radio_f_data_gre", + "a3_dubbing_radio_f_data_per", + "a3_dubbing_radio_f_data_vr", + "a3_dubbing_radio_f_exp", + "a3_dubbing_radio_f_exp_data_chi", + "a3_dubbing_radio_f_exp_data_engfre", + "a3_dubbing_radio_f_exp_data_fre", "a3_editor_f", + "a3_editorpreviews_f", + "a3_editorpreviews_f_exp", "a3_functions_f", "a3_functions_f_bootcamp", "a3_functions_f_curator", "a3_functions_f_epa", "a3_functions_f_epc", + "a3_functions_f_exp", "a3_functions_f_exp_a", "a3_functions_f_heli", "a3_functions_f_mark", @@ -137,7 +223,9 @@ class CfgPatches { "a3_language_f_epa", "a3_language_f_epb", "a3_language_f_epc", + "a3_language_f_exp", "a3_language_f_exp_a", + "a3_language_f_exp_b", "a3_language_f_gamma", "a3_language_f_heli", "a3_language_f_kart", @@ -145,32 +233,69 @@ class CfgPatches { "a3_language_f_mp_mark", "a3_languagemissions_f", "a3_languagemissions_f_beta", + "a3_languagemissions_f_bootcamp", + "a3_languagemissions_f_epa", + "a3_languagemissions_f_epb", + "a3_languagemissions_f_epc", + "a3_languagemissions_f_exp", + "a3_languagemissions_f_exp_a", "a3_languagemissions_f_gamma", + "a3_languagemissions_f_heli", "a3_languagemissions_f_kart", + "a3_languagemissions_f_mark", "a3_languagemissions_f_mp_mark", "a3_map_altis", + "a3_map_altis_data", + "a3_map_altis_data_layers", "a3_map_altis_scenes", + "a3_map_altis_scenes_f", "a3_map_data", "a3_map_stratis", + "a3_map_stratis_data", + "a3_map_stratis_data_layers", "a3_map_stratis_scenes", + "a3_map_stratis_scenes_f", + "a3_map_vr", "a3_map_vr_scenes", + "a3_map_vr_scenes_f", "a3_misc_f", "a3_misc_f_helpers", "a3_missions_f", "a3_missions_f_beta", + "a3_missions_f_beta_data", + "a3_missions_f_beta_video", "a3_missions_f_bootcamp", + "a3_missions_f_bootcamp_data", + "a3_missions_f_bootcamp_video", "a3_missions_f_curator", + "a3_missions_f_data", "a3_missions_f_epa", + "a3_missions_f_epa_data", + "a3_missions_f_epa_video", "a3_missions_f_epb", "a3_missions_f_epc", + "a3_missions_f_exp", "a3_missions_f_exp_a", + "a3_missions_f_exp_a_data", + "a3_missions_f_exp_data", + "a3_missions_f_exp_video", "a3_missions_f_gamma", + "a3_missions_f_gamma_data", + "a3_missions_f_gamma_video", "a3_missions_f_heli", + "a3_missions_f_heli_data", + "a3_missions_f_heli_video", "a3_missions_f_kart", + "a3_missions_f_kart_data", "a3_missions_f_mark", + "a3_missions_f_mark_data", + "a3_missions_f_mark_video", "a3_missions_f_mp_mark", + "a3_missions_f_mp_mark_data", + "a3_missions_f_video", "a3_modules_f", "a3_modules_f_beta", + "a3_modules_f_beta_data", "a3_modules_f_beta_firingdrills", "a3_modules_f_bootcamp", "a3_modules_f_bootcamp_misc", @@ -191,18 +316,22 @@ class CfgPatches { "a3_modules_f_curator_ordnance", "a3_modules_f_curator_respawn", "a3_modules_f_curator_smokeshells", + "a3_modules_f_data", "a3_modules_f_dyno", "a3_modules_f_effects", "a3_modules_f_epb", "a3_modules_f_epb_misc", "a3_modules_f_events", + "a3_modules_f_exp", "a3_modules_f_exp_a", "a3_modules_f_groupmodifiers", "a3_modules_f_hc", "a3_modules_f_heli", + "a3_modules_f_heli_misc", "a3_modules_f_heli_spawnai", "a3_modules_f_intel", "a3_modules_f_kart", + "a3_modules_f_kart_data", "a3_modules_f_kart_timetrials", "a3_modules_f_livefeed", "a3_modules_f_mark", @@ -211,6 +340,7 @@ class CfgPatches { "a3_modules_f_marta", "a3_modules_f_misc", "a3_modules_f_mp_mark", + "a3_modules_f_mp_mark_objectives", "a3_modules_f_multiplayer", "a3_modules_f_objectmodifiers", "a3_modules_f_sites", @@ -220,65 +350,143 @@ class CfgPatches { "a3_modules_f_uav", "a3_music_f", "a3_music_f_bootcamp", + "a3_music_f_bootcamp_music", "a3_music_f_epa", + "a3_music_f_epa_music", "a3_music_f_epb", + "a3_music_f_epb_music", "a3_music_f_epc", + "a3_music_f_epc_music", + "a3_music_f_exp", + "a3_music_f_exp_music", "a3_music_f_heli", + "a3_music_f_heli_music", "a3_music_f_mark", + "a3_music_f_mark_music", + "a3_music_f_music", + "a3_plants_f", "a3_plants_f_bush", + "a3_props_f_exp", "a3_props_f_exp_a", "a3_props_f_exp_a_military", "a3_props_f_exp_a_military_equipment", + "a3_props_f_exp_civilian", + "a3_props_f_exp_civilian_garbage", + "a3_props_f_exp_commercial", + "a3_props_f_exp_commercial_market", + "a3_props_f_exp_industrial", + "a3_props_f_exp_industrial_heavyequipment", + "a3_props_f_exp_infrastructure", + "a3_props_f_exp_infrastructure_railways", + "a3_props_f_exp_infrastructure_traffic", + "a3_props_f_exp_military", + "a3_props_f_exp_military_camps", + "a3_props_f_exp_military_oldplanewrecks", + "a3_props_f_exp_naval", + "a3_props_f_exp_naval_boats", "a3_roads_f", "a3_rocks_f", + "a3_rocks_f_blunt", + "a3_rocks_f_sharp", + "a3_rocks_f_water", "a3_signs_f", "a3_signs_f_ad", + "a3_signs_f_signs_ad", "a3_soft_f", + "a3_soft_f_beta", + "a3_soft_f_beta_mrap_03", "a3_soft_f_beta_quadbike", + "a3_soft_f_beta_quadbike_01", + "a3_soft_f_beta_truck_01", + "a3_soft_f_beta_truck_02", + "a3_soft_f_bootcamp", "a3_soft_f_bootcamp_offroad_01", "a3_soft_f_bootcamp_quadbike", + "a3_soft_f_bootcamp_quadbike_01", "a3_soft_f_bootcamp_truck", + "a3_soft_f_bootcamp_van_01", "a3_soft_f_car", "a3_soft_f_crusher_ugv", + "a3_soft_f_epc", "a3_soft_f_epc_truck_03", + "a3_soft_f_exp", + "a3_soft_f_exp_lsv_01", + "a3_soft_f_exp_lsv_02", + "a3_soft_f_exp_mrap_02", + "a3_soft_f_exp_offroad_01", + "a3_soft_f_exp_offroad_02", + "a3_soft_f_exp_quadbike_01", + "a3_soft_f_exp_truck_03", + "a3_soft_f_exp_ugv_01", + "a3_soft_f_exp_van_01", + "a3_soft_f_gamma", + "a3_soft_f_gamma_hatchback_01", "a3_soft_f_gamma_hemtt", "a3_soft_f_gamma_offroad", + "a3_soft_f_gamma_offroad_01", "a3_soft_f_gamma_quadbike", + "a3_soft_f_gamma_quadbike_01", + "a3_soft_f_gamma_suv_01", + "a3_soft_f_gamma_truck_01", + "a3_soft_f_gamma_truck_02", "a3_soft_f_gamma_truckheavy", + "a3_soft_f_gamma_van_01", + "a3_soft_f_heli", "a3_soft_f_heli_car", "a3_soft_f_heli_crusher_ugv", + "a3_soft_f_heli_hatchback_01", "a3_soft_f_heli_mrap_01", "a3_soft_f_heli_mrap_02", "a3_soft_f_heli_mrap_03", "a3_soft_f_heli_quadbike", + "a3_soft_f_heli_quadbike_01", "a3_soft_f_heli_suv", + "a3_soft_f_heli_suv_01", "a3_soft_f_heli_truck", + "a3_soft_f_heli_ugv_01", + "a3_soft_f_heli_van_01", "a3_soft_f_hemtt", + "a3_soft_f_kart", "a3_soft_f_kart_kart_01", "a3_soft_f_mrap_01", "a3_soft_f_mrap_02", "a3_soft_f_mrap_03", "a3_soft_f_offroad_01", "a3_soft_f_quadbike", + "a3_soft_f_quadbike_01", "a3_soft_f_suv", "a3_soft_f_truck", "a3_soft_f_truckheavy", "a3_sounds_f", + "a3_sounds_f_arsenal", "a3_sounds_f_bootcamp", + "a3_sounds_f_characters", + "a3_sounds_f_environment", "a3_sounds_f_epb", "a3_sounds_f_epc", + "a3_sounds_f_exp", "a3_sounds_f_exp_a", + "a3_sounds_f_heli", + "a3_sounds_f_kart", "a3_sounds_f_mark", + "a3_sounds_f_sfx", + "a3_sounds_f_vehicles", "a3_static_f", + "a3_static_f_aa_01", + "a3_static_f_at_01", + "a3_static_f_beta", "a3_static_f_beta_mortar_01", + "a3_static_f_exp", "a3_static_f_gamma", "a3_static_f_gamma_aa", "a3_static_f_gamma_at", "a3_static_f_gamma_mortar_01", + "a3_static_f_mark", "a3_static_f_mark_designator_01", "a3_static_f_mark_designator_02", "a3_static_f_mortar_01", "a3_structures_f", + "a3_structures_f_bootcamp", "a3_structures_f_bootcamp_civ_camping", "a3_structures_f_bootcamp_civ_sportsgrounds", "a3_structures_f_bootcamp_ind_cargo", @@ -312,6 +520,7 @@ class CfgPatches { "a3_structures_f_civ_sportsgrounds", "a3_structures_f_civ_statues", "a3_structures_f_civ_tourism", + "a3_structures_f_data", "a3_structures_f_dominants", "a3_structures_f_dominants_amphitheater", "a3_structures_f_dominants_castle", @@ -319,6 +528,7 @@ class CfgPatches { "a3_structures_f_dominants_hospital", "a3_structures_f_dominants_lighthouse", "a3_structures_f_dominants_wip", + "a3_structures_f_epa", "a3_structures_f_epa_civ_camping", "a3_structures_f_epa_civ_constructions", "a3_structures_f_epa_items_electronics", @@ -328,6 +538,7 @@ class CfgPatches { "a3_structures_f_epa_items_vessels", "a3_structures_f_epa_mil_scrapyard", "a3_structures_f_epa_walls", + "a3_structures_f_epb", "a3_structures_f_epb_civ_accessories", "a3_structures_f_epb_civ_camping", "a3_structures_f_epb_civ_dead", @@ -340,6 +551,7 @@ class CfgPatches { "a3_structures_f_epb_items_military", "a3_structures_f_epb_items_vessels", "a3_structures_f_epb_naval_fishing", + "a3_structures_f_epc", "a3_structures_f_epc_civ_accessories", "a3_structures_f_epc_civ_camping", "a3_structures_f_epc_civ_garbage", @@ -357,6 +569,7 @@ class CfgPatches { "a3_structures_f_exp_a_vr_blocks", "a3_structures_f_exp_a_vr_helpers", "a3_structures_f_furniture", + "a3_structures_f_heli", "a3_structures_f_heli_civ_accessories", "a3_structures_f_heli_civ_constructions", "a3_structures_f_heli_civ_garbage", @@ -410,6 +623,7 @@ class CfgPatches { "a3_structures_f_items_cans", "a3_structures_f_items_documents", "a3_structures_f_items_electronics", + "a3_structures_f_items_food", "a3_structures_f_items_gadgets", "a3_structures_f_items_luggage", "a3_structures_f_items_medical", @@ -418,9 +632,11 @@ class CfgPatches { "a3_structures_f_items_tools", "a3_structures_f_items_valuables", "a3_structures_f_items_vessels", + "a3_structures_f_kart", "a3_structures_f_kart_civ_sportsgrounds", "a3_structures_f_kart_mil_flags", "a3_structures_f_kart_signs_companies", + "a3_structures_f_mark", "a3_structures_f_mark_items_military", "a3_structures_f_mark_items_sport", "a3_structures_f_mark_mil_flags", @@ -454,6 +670,8 @@ class CfgPatches { "a3_structures_f_training_invisibletarget", "a3_structures_f_walls", "a3_structures_f_wrecks", + "a3_supplies_f_exp", + "a3_supplies_f_exp_ammoboxes", "a3_supplies_f_heli", "a3_supplies_f_heli_bladders", "a3_supplies_f_heli_cargonets", @@ -465,6 +683,8 @@ class CfgPatches { "a3_ui_f", "a3_ui_f_bootcamp", "a3_ui_f_curator", + "a3_ui_f_data", + "a3_ui_f_exp", "a3_ui_f_exp_a", "a3_ui_f_heli", "a3_ui_f_kart", @@ -479,13 +699,18 @@ class CfgPatches { "a3_weapons_f_beta_acc", "a3_weapons_f_beta_ammoboxes", "a3_weapons_f_beta_ebr", + "a3_weapons_f_beta_longrangerifles_ebr", + "a3_weapons_f_beta_longrangerifles_gm6", + "a3_weapons_f_beta_longrangerifles_m320", "a3_weapons_f_beta_rifles_khaybar", "a3_weapons_f_beta_rifles_mx", "a3_weapons_f_beta_rifles_trg20", "a3_weapons_f_bootcamp", "a3_weapons_f_bootcamp_ammoboxes", "a3_weapons_f_bootcamp_longrangerifles_gm6", + "a3_weapons_f_bootcamp_longrangerifles_gm6_camo", "a3_weapons_f_bootcamp_longrangerifles_m320", + "a3_weapons_f_bootcamp_longrangerifles_m320_camo", "a3_weapons_f_csat", "a3_weapons_f_dummyweapons", "a3_weapons_f_ebr", @@ -500,15 +725,35 @@ class CfgPatches { "a3_weapons_f_epb_acc", "a3_weapons_f_epb_ammoboxes", "a3_weapons_f_epb_longrangerifles_gm3", + "a3_weapons_f_epb_longrangerifles_gm6", "a3_weapons_f_epb_longrangerifles_m320", "a3_weapons_f_epb_rifles_mx_black", "a3_weapons_f_epc", + "a3_weapons_f_exp", + "a3_weapons_f_exp_launchers_rpg32", + "a3_weapons_f_exp_launchers_rpg7", + "a3_weapons_f_exp_launchers_titan", + "a3_weapons_f_exp_longrangerifles_dmr_07", + "a3_weapons_f_exp_machineguns_lmg_03", + "a3_weapons_f_exp_pistols_pistol_01", + "a3_weapons_f_exp_rifles_ak12", + "a3_weapons_f_exp_rifles_akm", + "a3_weapons_f_exp_rifles_aks", + "a3_weapons_f_exp_rifles_arx", + "a3_weapons_f_exp_rifles_ctar", + "a3_weapons_f_exp_rifles_ctars", + "a3_weapons_f_exp_rifles_spar_01", + "a3_weapons_f_exp_rifles_spar_02", + "a3_weapons_f_exp_rifles_spar_03", + "a3_weapons_f_exp_smgs_smg_05", "a3_weapons_f_explosives", "a3_weapons_f_fia", "a3_weapons_f_gamma", "a3_weapons_f_gamma_acc", "a3_weapons_f_gamma_ammoboxes", "a3_weapons_f_gamma_items", + "a3_weapons_f_gamma_longrangerifles_ebr", + "a3_weapons_f_gamma_rifles_mx", "a3_weapons_f_headgear", "a3_weapons_f_itemholders", "a3_weapons_f_items", @@ -516,7 +761,10 @@ class CfgPatches { "a3_weapons_f_kart_pistols_pistol_signal_f", "a3_weapons_f_launchers_law", "a3_weapons_f_launchers_nlaw", + "a3_weapons_f_launchers_rpg32", "a3_weapons_f_launchers_titan", + "a3_weapons_f_longrangerifles_dmr_01", + "a3_weapons_f_longrangerifles_ebr", "a3_weapons_f_longrangerifles_gm6", "a3_weapons_f_longrangerifles_m320", "a3_weapons_f_machineguns_m200", @@ -530,6 +778,7 @@ class CfgPatches { "a3_weapons_f_mark_longrangerifles_dmr_04", "a3_weapons_f_mark_longrangerifles_dmr_05", "a3_weapons_f_mark_longrangerifles_dmr_06", + "a3_weapons_f_mark_longrangerifles_ebr", "a3_weapons_f_mark_longrangerifles_gm6", "a3_weapons_f_mark_longrangerifles_gm6_camo", "a3_weapons_f_mark_longrangerifles_m320", @@ -553,19 +802,72 @@ class CfgPatches { "a3_weapons_f_rifles_khaybar", "a3_weapons_f_rifles_mk20", "a3_weapons_f_rifles_mx", + "a3_weapons_f_rifles_mx_black", "a3_weapons_f_rifles_sdar", "a3_weapons_f_rifles_smg_02", "a3_weapons_f_rifles_trg20", "a3_weapons_f_rifles_vector", + "a3_weapons_f_smgs_pdw2000", + "a3_weapons_f_smgs_smg_01", + "a3_weapons_f_smgs_smg_02", "a3_weapons_f_uniforms", "a3_weapons_f_vests", + "curatoronly_air_f_beta_heli_attack_01", + "curatoronly_air_f_beta_heli_attack_02", + "curatoronly_air_f_gamma_uav_01", + "curatoronly_armor_f_amv", + "curatoronly_armor_f_beta_apc_tracked_02", + "curatoronly_armor_f_marid", + "curatoronly_armor_f_panther", + "curatoronly_armor_f_slammer", + "curatoronly_armor_f_t100k", + "curatoronly_boat_f_boat_armed_01", + "curatoronly_characters_f_blufor", + "curatoronly_characters_f_common", + "curatoronly_characters_f_opfor", + "curatoronly_modules_f_curator_animals", + "curatoronly_modules_f_curator_chemlights", + "curatoronly_modules_f_curator_effects", + "curatoronly_modules_f_curator_environment", + "curatoronly_modules_f_curator_flares", + "curatoronly_modules_f_curator_lightning", + "curatoronly_modules_f_curator_mines", + "curatoronly_modules_f_curator_objectives", + "curatoronly_modules_f_curator_ordnance", + "curatoronly_modules_f_curator_smokeshells", + "curatoronly_signs_f", + "curatoronly_soft_f_crusher_ugv", + "curatoronly_soft_f_mrap_01", + "curatoronly_soft_f_mrap_02", + "curatoronly_soft_f_quadbike", + "curatoronly_static_f_gamma", + "curatoronly_static_f_mortar_01", + "curatoronly_structures_f_civ_ancient", + "curatoronly_structures_f_civ_camping", + "curatoronly_structures_f_civ_garbage", + "curatoronly_structures_f_epa_civ_constructions", + "curatoronly_structures_f_epb_civ_dead", + "curatoronly_structures_f_ind_cargo", + "curatoronly_structures_f_ind_crane", + "curatoronly_structures_f_ind_reservoirtank", + "curatoronly_structures_f_ind_transmitter_tower", + "curatoronly_structures_f_items_vessels", + "curatoronly_structures_f_mil_bagbunker", + "curatoronly_structures_f_mil_bagfence", + "curatoronly_structures_f_mil_cargo", + "curatoronly_structures_f_mil_fortification", + "curatoronly_structures_f_mil_radar", + "curatoronly_structures_f_mil_shelters", + "curatoronly_structures_f_research", + "curatoronly_structures_f_walls", + "curatoronly_structures_f_wrecks", "a3data", + "3den", "map_vr", + // CBA - "extended_eventhandlers", "cba_ui", "cba_xeh", - "cba_xeh_a3", "cba_jr" }; author = ECSTRING(common,ACETeam); diff --git a/addons/main/script_macros.hpp b/addons/main/script_macros.hpp index c7997dee28..05db6cd146 100644 --- a/addons/main/script_macros.hpp +++ b/addons/main/script_macros.hpp @@ -84,6 +84,7 @@ #define TYPE_BACKPACK 901 #ifdef DISABLE_COMPILE_CACHE + #undef PREP #define PREP(fncName) DFUNC(fncName) = compile preprocessFileLineNumbers QPATHTOF(functions\DOUBLES(fnc,fncName).sqf) #else #undef PREP diff --git a/addons/main/script_mod.hpp b/addons/main/script_mod.hpp index dcf84348a5..56add6aead 100644 --- a/addons/main/script_mod.hpp +++ b/addons/main/script_mod.hpp @@ -5,14 +5,14 @@ #define MAJOR 3 #define MINOR 6 -#define PATCHLVL 0 +#define PATCHLVL 2 #define BUILD 0 #define VERSION MAJOR.MINOR.PATCHLVL.BUILD #define VERSION_AR MAJOR,MINOR,PATCHLVL,BUILD // MINIMAL required version for the Mod. Components can specify others.. -#define REQUIRED_VERSION 1.60 +#define REQUIRED_VERSION 1.62 #define REQUIRED_CBA_VERSION {2,4,1} #ifdef COMPONENT_BEAUTIFIED diff --git a/addons/main/stringtable.xml b/addons/main/stringtable.xml index 4648225f9f..225d61a51d 100644 --- a/addons/main/stringtable.xml +++ b/addons/main/stringtable.xml @@ -22,6 +22,8 @@ http://ace3mod.com/ http://ace3mod.com/ http://ace3mod.com/ + http://ace3mod.com/ + http://ace3mod.com/ diff --git a/addons/medical/CfgEden.hpp b/addons/medical/CfgEden.hpp new file mode 100644 index 0000000000..e4d034a413 --- /dev/null +++ b/addons/medical/CfgEden.hpp @@ -0,0 +1,70 @@ +class ctrlToolbox; + +class Cfg3DEN { + class Attributes { + class Default; + class Title: Default { + class Controls { + class Title; + }; + }; + class GVAR(isMedicControl): Title { + attributeLoad = "(_this controlsGroupCtrl 100) lbsetcursel (((_value + 1) min 3) max 0);"; + attributeSave = "(missionnamespace getvariable ['ace_isMeidc_temp',0]) - 1;"; + class Controls: Controls { + class Title: Title{}; + class Value: ctrlToolbox { + idc = 100; + style = "0x02"; + x = "48 * (pixelW * pixelGrid * 0.50)"; + w = "82 * (pixelW * pixelGrid * 0.50)"; + h = "5 * (pixelH * pixelGrid * 0.50)"; + rows = 1; + columns = 4; + strings[] = {"$STR_3DEN_Attributes_Lock_Default_text", CSTRING(AssignMedicRoles_role_none), CSTRING(AssignMedicRoles_role_medic), CSTRING(AssignMedicRoles_role_doctorShort)}; + onToolboxSelChanged = "missionnamespace setvariable ['ace_isMeidc_temp',_this select 1];"; + }; + }; + }; + }; + class Object { + class AttributeCategories { + class ace_attributes { + class Attributes { + class ace_isMedic { + property = QUOTE(ace_isMedic); + control = QGVAR(isMedicControl); + displayName = CSTRING(AssignMedicRoles_role_DisplayName); + tooltip = CSTRING(Attributes_isMedic_Description); + expression = QUOTE(if (_value != -1) then {_this setVariable [ARR_3(QUOTE(QGVAR(medicClass)),_value, true)];};); + typeName = "NUMBER"; + condition = "objectBrain"; + defaultValue = "-1"; + }; + class ace_isMedicalVehicle { + property = QUOTE(ace_isMedicalVehicle); + value = 0; + control = "CheckboxNumber"; + displayName = CSTRING(AssignMedicVehicle_enabled_DisplayName); + tooltip = CSTRING(Attributes_isMedicalVehicle_Description); + expression = QUOTE(_this setVariable [ARR_3(QUOTE(QGVAR(medicClass)),_value, true)];); + typeName = "NUMBER"; + condition = "objectVehicle"; + defaultValue = 0; + }; + class ace_isMedicalFacility { + property = QUOTE(ace_isMedicalFacility); + value = 0; + control = "Checkbox"; + displayName = CSTRING(AssignMedicalFacility_enabled_DisplayName); + tooltip = CSTRING(AssignMedicalFacility_enabled_Description); + expression = QUOTE(_this setVariable [ARR_3(QUOTE(QGVAR(isMedicalFacility)),_value, true)];); + typeName = "BOOL"; + condition = "(1 - objectBrain) * (1 - objectVehicle)"; + defaultValue = "false"; + }; + }; + }; + }; + }; +}; diff --git a/addons/medical/functions/fnc_serverRemoveBody.sqf b/addons/medical/functions/fnc_serverRemoveBody.sqf new file mode 100644 index 0000000000..f68ffd95cd --- /dev/null +++ b/addons/medical/functions/fnc_serverRemoveBody.sqf @@ -0,0 +1,34 @@ +/* + * Author: PabstMirror + * Removes corpse. Idealy it is just deleted the next frame, + * but player bodies cannot be deleted until they respawn, so it is hidden and deleted later. + * + * Arguments: + * 0: Mr Body + * + * Return Value: + * Nothing + * + * Example: + * [cursorTarget] call ace_medical_fnc_serverRemoveBody + * + * Public: No + */ + +#include "script_component.hpp" + +params ["_target"]; +TRACE_2("",_target,isPlayer _target); + +//Hide the body globaly +[QEGVAR(common,hideObjectGlobal), [_target, true]] call CBA_fnc_serverEvent; + +if (isNil QGVAR(bodiesToDelete)) then {GVAR(bodiesToDelete) = [];}; +GVAR(bodiesToDelete) pushBack _target; + +// Start up a loop to wait for bodies to be free to delete +if ((count GVAR(bodiesToDelete)) == 1) then { + [] call FUNC(bodyCleanupLoop); +}; + +nil diff --git a/addons/medical/functions/fnc_setUnconscious.sqf b/addons/medical/functions/fnc_setUnconscious.sqf index fa26f17bec..8ce6cb1e4e 100644 --- a/addons/medical/functions/fnc_setUnconscious.sqf +++ b/addons/medical/functions/fnc_setUnconscious.sqf @@ -43,7 +43,6 @@ if (!local _unit) exitWith { }; _unit setVariable ["ACE_isUnconscious", true, true]; -_unit setUnconscious true; if (_unit == ACE_player) then { if (visibleMap) then {openMap false}; diff --git a/addons/medical_treatment/functions/fnc_canTreatCached.sqf b/addons/medical_treatment/functions/fnc_canTreatCached.sqf index 273da7dc4b..76d4897b74 100644 --- a/addons/medical_treatment/functions/fnc_canTreatCached.sqf +++ b/addons/medical_treatment/functions/fnc_canTreatCached.sqf @@ -20,4 +20,4 @@ params ["", "_target", "_selection", "_classname"]; // parameters, function, namespace, uid -[_this, DFUNC(canTreat), _target, format [QGVAR(canTreat_%1_%2), _selection, _classname], MAX_DURATION_CACHE, "clearConditionCaches"] call EFUNC(common,cachedCall); +[_this, DFUNC(canTreat), _target, format [QGVAR(canTreat_%1_%2), _selection, _classname], MAX_DURATION_CACHE, QEGVAR(interact_menu,clearConditionCaches)] call EFUNC(common,cachedCall); diff --git a/addons/microdagr/functions/fnc_updateDisplay.sqf b/addons/microdagr/functions/fnc_updateDisplay.sqf index 7ba92e55ef..b13abbec06 100644 --- a/addons/microdagr/functions/fnc_updateDisplay.sqf +++ b/addons/microdagr/functions/fnc_updateDisplay.sqf @@ -1,4 +1,4 @@ -/* +/* * Author: PabstMirror * Updates the display (several times a second) called from the pfeh * @@ -49,7 +49,7 @@ case (APP_MODE_INFODISPLAY): { _compassAngleText = if (GVAR(settingUseMils)) then { [(floor ((6400 / 360) * (([ACE_player] call CBA_fnc_headDir) select 0))), 4, 0] call CBA_fnc_formatNumber; } else { - ([(floor (([ACE_player] call CBA_fnc_headDir) select 0)), 3, 1] call CBA_fnc_formatNumber) + "°" //degree symbol is in UTF-8 + ([([ACE_player] call CBA_fnc_headDir) select 0, 3, 1] call CBA_fnc_formatNumber) + "°" //degree symbol is in UTF-8 }; (_display displayCtrl IDC_MODEDISPLAY_HEADINGNUM) ctrlSetText _compassAngleText; @@ -89,7 +89,7 @@ case (APP_MODE_INFODISPLAY): { _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 + ([_bearing, 3, 1] call CBA_fnc_formatNumber) + "°" //degree symbol is in UTF-8 }; _2dDistanceKm = ((getPosASL ACE_player) distance2D _targetPosLocationASL) / 1000; _rangeText = format ["%1km", ([_2dDistanceKm, 1, 1] call CBA_fnc_formatNumber)]; @@ -109,7 +109,7 @@ case (APP_MODE_COMPASS): { _compassAngleText = if (GVAR(settingUseMils)) then { [(floor ((6400 / 360) * (([ACE_player] call CBA_fnc_headDir) select 0))), 4, 0] call CBA_fnc_formatNumber; } else { - ([(floor (([ACE_player] call CBA_fnc_headDir) select 0)), 3, 1] call CBA_fnc_formatNumber) + "°" //degree symbol is in UTF-8 + ([([ACE_player] call CBA_fnc_headDir) select 0, 3, 1] call CBA_fnc_formatNumber) + "°" //degree symbol is in UTF-8 }; (_display displayCtrl IDC_MODECOMPASS_HEADING) ctrlSetText _compassAngleText; @@ -145,7 +145,7 @@ case (APP_MODE_COMPASS): { _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 + ([_bearing, 3, 1] call CBA_fnc_formatNumber) + "°" //degree symbol is in UTF-8 }; _2dDistanceKm = ((getPosASL ACE_player) distance2D _targetPosLocationASL) / 1000; _rangeText = format ["%1km", ([_2dDistanceKm, 1, 1] call CBA_fnc_formatNumber)]; diff --git a/addons/minedetector/ACE_detector.hpp b/addons/minedetector/ACE_detector.hpp index b6effc2436..ee00836eda 100644 --- a/addons/minedetector/ACE_detector.hpp +++ b/addons/minedetector/ACE_detector.hpp @@ -1,6 +1,4 @@ class ACE_detector { - class detectableObjects { - }; class detectors { class ACE_VMM3 { radius = 2.5; diff --git a/addons/minedetector/CfgEventHandlers.hpp b/addons/minedetector/CfgEventHandlers.hpp index 3daad1425a..f19d0e18ec 100644 --- a/addons/minedetector/CfgEventHandlers.hpp +++ b/addons/minedetector/CfgEventHandlers.hpp @@ -5,6 +5,6 @@ class Extended_PreInit_EventHandlers { }; class Extended_PostInit_EventHandlers { class ADDON { - clientInit = QUOTE( call COMPILE_FILE(XEH_clientInit) ); + init = QUOTE( call COMPILE_FILE(XEH_postInit) ); }; }; diff --git a/addons/minedetector/CfgSounds.hpp b/addons/minedetector/CfgSounds.hpp index 544bf94379..2f9ce91da1 100644 --- a/addons/minedetector/CfgSounds.hpp +++ b/addons/minedetector/CfgSounds.hpp @@ -1,22 +1,22 @@ class CfgSounds { class ace_detector_1 { name = "ace_detector_1"; - sound[] = {QUOTE(PATHTOF(sounds\metal_detector.wav)), "db+1", 1}; + sound[] = {QUOTE(PATHTOF(sounds\metal_detector.wss)), "db+3", 1}; titles[] = {}; }; class ace_detector_2 { name = "ace_detector_2"; - sound[] = {QUOTE(PATHTOF(sounds\metal_detector.wav)), "db+1", 0.9}; + sound[] = {QUOTE(PATHTOF(sounds\metal_detector.wss)), "db+3", 0.9}; titles[] = {}; }; class ace_detector_3 { name = "ace_detector_3"; - sound[] = {QUOTE(PATHTOF(sounds\metal_detector.wav)), "db+1", 0.8}; + sound[] = {QUOTE(PATHTOF(sounds\metal_detector.wss)), "db+3", 0.8}; titles[] = {}; }; class ace_detector_4 { name = "ace_detector_4"; - sound[] = {QUOTE(PATHTOF(sounds\metal_detector.wav)), "db+1", 0.7}; + sound[] = {QUOTE(PATHTOF(sounds\metal_detector.wss)), "db+3", 0.7}; titles[] = {}; }; }; diff --git a/addons/minedetector/CfgVehicles.hpp b/addons/minedetector/CfgVehicles.hpp index c486a049e3..14273b108c 100644 --- a/addons/minedetector/CfgVehicles.hpp +++ b/addons/minedetector/CfgVehicles.hpp @@ -11,23 +11,40 @@ class CfgVehicles { class CAManBase: Man { class ACE_SelfActions { class ACE_Equipment { - class GVAR(activate) { - displayName = CSTRING(ActivateDetector); - condition = QUOTE(call FUNC(canActivateDetector)); - statement = QUOTE(call FUNC(activateDetector)); - showDisabled = 0; - priority = 0.1; - icon = QPATHTOF(ui\icon_mineDetectorOn.paa); - exceptions[] = {}; - }; - class GVAR(deactivate) { - displayName = CSTRING(DeactivateDetector); - condition = QUOTE(call FUNC(canDeactivateDetector)); - statement = QUOTE(call FUNC(deactivateDetector)); - showDisabled = 0; - priority = 0.1; - icon = QPATHTOF(ui\icon_mineDetectorOff.paa); + class GVAR(metalDetector) { + displayName = CSTRING(MetalDetector); + condition = QUOTE([ACE_player] call FUNC(hasDetector)); + statement = ""; + icon = QPATHTOF(ui\icon_mineDetector.paa); exceptions[] = {}; + class GVAR(activate) { + displayName = CSTRING(ActivateDetector); + condition = QUOTE(call FUNC(canActivateDetector)); + statement = QUOTE(call FUNC(activateDetector)); + icon = QPATHTOF(ui\icon_mineDetectorOn.paa); + exceptions[] = {}; + }; + class GVAR(deactivate) { + displayName = CSTRING(DeactivateDetector); + condition = QUOTE(call FUNC(canDeactivateDetector)); + statement = QUOTE(call FUNC(deactivateDetector)); + icon = QPATHTOF(ui\icon_mineDetectorOff.paa); + exceptions[] = {}; + }; + class GVAR(connectHeadphones) { + displayName = CSTRING(ConnectHeadphones); + condition = QUOTE(call FUNC(canConnectHeadphones)); + statement = QUOTE([ARR_2(ACE_player, true)] call FUNC(connectHeadphones)); + icon = ""; //TODO + exceptions[] = {}; + }; + class GVAR(disconnectHeadphones) { + displayName = CSTRING(DisconnectHeadphones); + condition = QUOTE(call FUNC(canDisconnectHeadphones)); + statement = QUOTE([ARR_2(ACE_player, false)] call FUNC(connectHeadphones)); + icon = ""; //TODO + exceptions[] = {}; + }; }; }; }; diff --git a/addons/minedetector/CfgWeapons.hpp b/addons/minedetector/CfgWeapons.hpp index 8495aaf32e..fddc3c2868 100644 --- a/addons/minedetector/CfgWeapons.hpp +++ b/addons/minedetector/CfgWeapons.hpp @@ -14,6 +14,8 @@ class CfgWeapons { picture = QUOTE(PATHTOF(data\equip\w_vmm3_ca.paa)); magazines[] = { }; modes[] = { "Single" }; + cursor = "EmptyCursor"; + cursorAim = "EmptyCursor"; class Single: Mode_SemiAuto { displayName = ""; sounds[] = {}; diff --git a/addons/minedetector/XEH_PREP.hpp b/addons/minedetector/XEH_PREP.hpp index 9fdb771723..e3d9316bf5 100644 --- a/addons/minedetector/XEH_PREP.hpp +++ b/addons/minedetector/XEH_PREP.hpp @@ -1,6 +1,9 @@ PREP(canActivateDetector); +PREP(canConnectHeadphones); PREP(canDeactivateDetector); +PREP(canDisconnectHeadphones); +PREP(connectHeadphones); PREP(activateDetector); PREP(deactivateDetector); PREP(hasDetector); diff --git a/addons/minedetector/XEH_clientInit.sqf b/addons/minedetector/XEH_postInit.sqf similarity index 53% rename from addons/minedetector/XEH_clientInit.sqf rename to addons/minedetector/XEH_postInit.sqf index 83aca7467a..4b842e3488 100644 --- a/addons/minedetector/XEH_clientInit.sqf +++ b/addons/minedetector/XEH_postInit.sqf @@ -1,27 +1,25 @@ #include "script_component.hpp" +// Create a dictionary to store detector configs +GVAR(detectorConfigs) = call CBA_fnc_createNamespace; -[QGVAR(detectorEnabled), { - params ["_unit", "_type"]; - private _config = [_type] call FUNC(getDetectorConfig); - - private _helperObject = "ACE_LogicDummy" createVehicleLocal (getPos _unit); - _unit setVariable [QGVAR(helperLogic), _helperObject]; - - [FUNC(detectorLoop), 0.01, [_unit, _type, _config, CBA_missionTime, _helperObject]] call CBA_fnc_addPerFrameHandler; -}] call CBA_fnc_addEventHandler; - -[QGVAR(detectorDisabled), { - params ["_unit", "_type"]; - private _helperObject = _unit getVariable [QGVAR(helperLogic), objNull]; - if !(isNull _helperObject) then { - deleteVehicle _helperObject; +// Create a dictionary of detectable classnames +GVAR(detectableClasses) = call CBA_fnc_createNamespace; +{ + if ((getNumber (_x >> QGVAR(detectable))) == 1) then { + GVAR(detectableClasses) setVariable [configName _x, true]; }; -}] call CBA_fnc_addEventHandler; +} forEach (configProperties [configFile >> "CfgVehicles", "isClass _x", true]); +{ + if ((getNumber (_x >> QGVAR(detectable))) == 1) then { + GVAR(detectableClasses) setVariable [configName _x, true]; + }; +} forEach (configProperties [configFile >> "CfgAmmo", "isClass _x", true]); +[QGVAR(enableDetector), FUNC(enableDetector)] call CBA_fnc_addEventHandler; +[QGVAR(disableDetector), FUNC(disableDetector)] call CBA_fnc_addEventHandler; - -//Shows detector and mine posistions in 3d when debug is on +// Shows detector and mine posistions in 3d when debug is on #ifdef DEBUG_MODE_FULL GVAR(debugDetector) = []; addMissionEventHandler ["Draw3D", { diff --git a/addons/minedetector/XEH_preInit.sqf b/addons/minedetector/XEH_preInit.sqf index 9529c201c5..a7feade1c3 100644 --- a/addons/minedetector/XEH_preInit.sqf +++ b/addons/minedetector/XEH_preInit.sqf @@ -4,7 +4,4 @@ ADDON = false; #include "XEH_PREP.hpp" -// TODO load from config instead of hardcoded in sqf -GVAR(ALL_DETECTABLE_TYPES) = ["ACE_Explosive_Object", "ACE_Explosive_Helper", "ACE_Explosives_Place", "ModuleMine_F", "TimeBombCore", "MineBase", "DirectionalBombBase", "BoundingMineBase", "PipeBombBase"]; - ADDON = true; diff --git a/addons/minedetector/config.cpp b/addons/minedetector/config.cpp index 9926d08f8c..7a48e0e2a0 100644 --- a/addons/minedetector/config.cpp +++ b/addons/minedetector/config.cpp @@ -8,7 +8,7 @@ class CfgPatches { requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_explosives"}; author = ECSTRING(common,ACETeam); - authors[] = {"Grey", "Glowbal", "Rocko"}; + authors[] = {"Grey", "Glowbal", "Rocko", "esteldunedain"}; url = ECSTRING(main,URL); VERSION_CONFIG; }; diff --git a/addons/minedetector/functions/fnc_canActivateDetector.sqf b/addons/minedetector/functions/fnc_canActivateDetector.sqf index 7caf22d95c..93089df063 100644 --- a/addons/minedetector/functions/fnc_canActivateDetector.sqf +++ b/addons/minedetector/functions/fnc_canActivateDetector.sqf @@ -16,4 +16,5 @@ #include "script_component.hpp" -([ACE_player] call FUNC(hasDetector)) && !([ACE_player, currentWeapon ACE_player] call FUNC(isDetectorEnabled)); +([ACE_player] call FUNC(hasDetector)) && +!([ACE_player, currentWeapon ACE_player] call FUNC(isDetectorEnabled)); diff --git a/addons/minedetector/functions/fnc_canConnectHeadphones.sqf b/addons/minedetector/functions/fnc_canConnectHeadphones.sqf new file mode 100644 index 0000000000..dfaf9699d8 --- /dev/null +++ b/addons/minedetector/functions/fnc_canConnectHeadphones.sqf @@ -0,0 +1,20 @@ +/* + * Author: esteldunedain + * Check if headphones can be connected to the mine detector + * + * Arguments: + * None + * + * Return Value: + * Can be connected + * + * Example: + * [] call ace_minedetector_fnc_canConnectHeadphones + * + * Public: No + */ + +#include "script_component.hpp" + +!(ACE_player getVariable [QGVAR(isUsingHeadphones), false]) && +{[ACE_player] call FUNC(hasDetector)}; diff --git a/addons/minedetector/functions/fnc_canDeactivateDetector.sqf b/addons/minedetector/functions/fnc_canDeactivateDetector.sqf index 3423d0685c..e308ba3789 100644 --- a/addons/minedetector/functions/fnc_canDeactivateDetector.sqf +++ b/addons/minedetector/functions/fnc_canDeactivateDetector.sqf @@ -16,4 +16,5 @@ #include "script_component.hpp" -([ACE_player] call FUNC(hasDetector)) && {[ACE_player, currentWeapon ACE_player] call FUNC(isDetectorEnabled)}; +([ACE_player] call FUNC(hasDetector)) && +{[ACE_player, currentWeapon ACE_player] call FUNC(isDetectorEnabled)}; diff --git a/addons/minedetector/functions/fnc_canDisconnectHeadphones.sqf b/addons/minedetector/functions/fnc_canDisconnectHeadphones.sqf new file mode 100644 index 0000000000..f58fe6617d --- /dev/null +++ b/addons/minedetector/functions/fnc_canDisconnectHeadphones.sqf @@ -0,0 +1,20 @@ +/* + * Author: esteldunedain + * Check if headphones can be disconnected from the mine detector + * + * Arguments: + * None + * + * Return Value: + * Can be disconnected + * + * Example: + * [] call ace_minedetector_fnc_canDisconnectHeadphones + * + * Public: No + */ + +#include "script_component.hpp" + +(ACE_player getVariable [QGVAR(isUsingHeadphones), false]) && +{[ACE_player] call FUNC(hasDetector)}; diff --git a/addons/minedetector/functions/fnc_connectHeadphones.sqf b/addons/minedetector/functions/fnc_connectHeadphones.sqf new file mode 100644 index 0000000000..2a715a66a0 --- /dev/null +++ b/addons/minedetector/functions/fnc_connectHeadphones.sqf @@ -0,0 +1,27 @@ +/* + * Author: esteldunedain + * Connect/disconnect headphones to the mine detector + * + * Arguments: + * 0: Unit + * 1: Connect? + * + * Return Value: + * None + * + * Example: + * [_unit, true] call ace_minedetector_fnc_connectHeadphones + * + * Public: No + */ + +#include "script_component.hpp" + +params ["_unit", "_state"]; +_unit setVariable [QGVAR(isUsingHeadphones), _state]; + +if (_state) then { + [localize LSTRING(HeadphonesConnected)] call EFUNC(common,displayTextStructured); +} else { + [localize LSTRING(HeadphonesDisconnected)] call EFUNC(common,displayTextStructured); +}; diff --git a/addons/minedetector/functions/fnc_detectorLoop.sqf b/addons/minedetector/functions/fnc_detectorLoop.sqf index 4a708147e2..e5fd4d5bd3 100644 --- a/addons/minedetector/functions/fnc_detectorLoop.sqf +++ b/addons/minedetector/functions/fnc_detectorLoop.sqf @@ -17,6 +17,12 @@ params ["_args", "_idPFH"]; _args params ["_unit", "_type", "_detectorConfig", "_lastPlayed"]; +// If locality switched just turn off the detector +if !(local _unit) exitWith { + [QGVAR(disableDetector), [_unit, _type], _unit] call CBA_fnc_targetEvent; + [_idPFH] call CBA_fnc_removePerFrameHandler; +}; + if !([_unit, _type] call FUNC(hasDetector)) exitWith { // disable detector type [_unit, _type] call FUNC(disableDetector); @@ -32,24 +38,35 @@ if !([_unit, _type] call FUNC(isDetectorEnabled)) exitWith { [_idPFH] call CBA_fnc_removePerFrameHandler; }; -if (ACE_player == _unit && {currentWeapon _unit == _type}) then { - private _detected = [_unit, _detectorConfig] call FUNC(getDetectedObject); - _detected params ["_hasDetected", "_object", "_distance"]; - private _distanceTiming = switch (true) do { - case (_distance >= 2): {1}; - case (_distance >= 1.25): {0.85}; - case (_distance >= 0.75): {0.7}; - default {0.5}; - }; - if (_hasDetected && {(CBA_missionTime - _lastPlayed > _distanceTiming)}) then { - _args set [3, CBA_missionTime]; - _detectorConfig params ["_type", "_radius", "_detectableTypes", "_sounds"]; - private _sound = switch (true) do { - case (_distance >= 2): {_sounds select 3}; - case (_distance >= 1.25): {_sounds select 2}; - case (_distance >= 0.5): {_sounds select 1}; - default {_sounds select 0}; - }; - [_unit, _sound, true] call FUNC(playDetectorSound); - }; +if (currentWeapon _unit != _type) exitWith { + [_unit, _type] call FUNC(disableDetector); + [_idPFH] call CBA_fnc_removePerFrameHandler; }; + +private _detected = [[_unit, _detectorConfig], FUNC(getDetectedObject), _unit, QGVAR(detectedObjects), 0.15] call EFUNC(common,cachedCall); +_detected params ["_hasDetected", "_mine", "_distance"]; + +if (!_hasDetected) exitWith {}; + +// Launch a local event stating which mine was detected for mission purposes +[QGVAR(mineDetected), [_unit, _mine, _distance]] call CBA_fnc_localEvent; + +private _distanceTiming = switch (true) do { + case (_distance >= 2): {1}; + case (_distance >= 1.25): {0.85}; + case (_distance >= 0.75): {0.7}; + default {0.5}; +}; + +if (CBA_missionTime - _lastPlayed < _distanceTiming) exitWith {}; + +_args set [3, CBA_missionTime]; +_detectorConfig params ["", "", "_soundClasses"]; +private _soundClass = switch (true) do { + case (_distance >= 2): {_soundClasses select 3}; + case (_distance >= 1.25): {_soundClasses select 2}; + case (_distance >= 0.5): {_soundClasses select 1}; + default {_soundClasses select 0}; +}; + +[_unit, _soundClass] call FUNC(playDetectorSound); diff --git a/addons/minedetector/functions/fnc_disableDetector.sqf b/addons/minedetector/functions/fnc_disableDetector.sqf index a4e755e6c3..e2fbb55798 100644 --- a/addons/minedetector/functions/fnc_disableDetector.sqf +++ b/addons/minedetector/functions/fnc_disableDetector.sqf @@ -19,6 +19,14 @@ params ["_unit", "_detectorType"]; -_unit setVariable [format[QGVAR(enable_%1), _detectorType], false]; +if !(local _unit) then { + [QGVAR(disableDetector), [_unit, _detectorType], _unit] call CBA_fnc_targetEvent; +}; + +_unit setVariable [format[QGVAR(enable_%1), _detectorType], false, true]; + +if (_unit == ACE_player && {alive _unit}) then { + playSound "ACE_Sound_Click"; +}; [QGVAR(detectorDisabled), [_unit, _detectorType]] call CBA_fnc_localEvent; diff --git a/addons/minedetector/functions/fnc_enableDetector.sqf b/addons/minedetector/functions/fnc_enableDetector.sqf index e8440a730b..8ed31433d1 100644 --- a/addons/minedetector/functions/fnc_enableDetector.sqf +++ b/addons/minedetector/functions/fnc_enableDetector.sqf @@ -19,6 +19,17 @@ params ["_unit", "_detectorType"]; -_unit setVariable [format[QGVAR(enable_%1), _detectorType], true]; +if !(local _unit) then { + [QGVAR(enableDetector), [_unit, _detectorType], _unit] call CBA_fnc_targetEvent; +}; + +_unit setVariable [format[QGVAR(enable_%1), _detectorType], true, true]; + +if (_unit == ACE_player) then { + playSound "ACE_Sound_Click"; +}; [QGVAR(detectorEnabled), [_unit, _detectorType]] call CBA_fnc_localEvent; + +private _config = [_detectorType] call FUNC(getDetectorConfig); +[FUNC(detectorLoop), 0.05, [_unit, _detectorType, _config, CBA_missionTime - 0.25]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/minedetector/functions/fnc_getDetectedObject.sqf b/addons/minedetector/functions/fnc_getDetectedObject.sqf index 79c20964ca..0b6faa6168 100644 --- a/addons/minedetector/functions/fnc_getDetectedObject.sqf +++ b/addons/minedetector/functions/fnc_getDetectedObject.sqf @@ -1,6 +1,6 @@ /* * Author: Glowbal - * Enables the mine detector + * Get the distance to the nearest detectable object * * Arguments: * 0: Unit @@ -15,17 +15,18 @@ * Public: No */ -#define __DR 1.3 - #include "script_component.hpp" params ["_unit", "_detectorConfig"]; -_detectorConfig params ["_type", "_radius", "_detectableTypes", "_sounds"]; +_detectorConfig params ["", "_radius"]; private _worldPosition = _unit modelToWorld (_unit selectionPosition "granat"); -private _direction = _unit weaponDirection "Put"; - -private _detectorPointAGL = _worldPosition vectorAdd (_direction vectorMultiply __DR); +private _ref = (_unit weaponDirection currentWeapon _unit) call EFUNC(common,createOrthonormalReference); +_ref params ["_v1", "_v2", "_v3"]; +private _detectorPointAGL = _worldPosition vectorAdd + (_v1 vectorMultiply ( 0.9 * __DR)) vectorAdd + (_v2 vectorMultiply (-0.2 * __DR)) vectorAdd + (_v3 vectorMultiply ( 0.4 * __DR)); private _nearestObjects = nearestObjects [_detectorPointAGL, [], _radius]; @@ -38,27 +39,19 @@ private _mine = objNull; private _distance = -1; { - private _object = _x; + private _objectType = typeOf _x; - if ({_object isKindOf _x} count _detectableTypes > 0) then { - //Try all unprepared mines in range and use first detectable one: - if ((getNumber (configFile >> "CfgVehicles" >> (typeOf _x) >> QGVAR(detectable))) == 1) exitWith { - _isDetectable = true; - _mine = _x; - _distance = _detectorPointAGL distance _x; - }; - //Try all prepared mines in range and use first detectable one: - if ((getNumber (configFile >> "CfgAmmo" >> (typeOf _x) >> QGVAR(detectable))) == 1) exitWith { - _isDetectable = true; - _mine = _x; - _distance = _detectorPointAGL distance _x; - }; + _isDetectable = GVAR(detectableClasses) getVariable _objectType; + if (isNil "_isDetectable") then { + _isDetectable = false; }; - if (!isNull _mine) exitWith {}; - + // If a nun-null object was detected exit the search + if (_isDetectable && {!isNull _x}) exitWith { + _distance = _detectorPointAGL distance _x; + _mine = _x; + TRACE_3("return", _isDetectable, _mine, _distance); + }; } forEach _nearestObjects; -TRACE_3("return",_isDetectable,_mine,_distance); - [_isDetectable, _mine, _distance]; diff --git a/addons/minedetector/functions/fnc_getDetectorConfig.sqf b/addons/minedetector/functions/fnc_getDetectorConfig.sqf index 87b9d0a88a..ccafa83edd 100644 --- a/addons/minedetector/functions/fnc_getDetectorConfig.sqf +++ b/addons/minedetector/functions/fnc_getDetectorConfig.sqf @@ -1,6 +1,6 @@ /* * Author: Glowbal - * Get the mine detector configuration from the config file + * Get the mine detector configuration from the cache or config file * * Arguments: * 0: Detector class name @@ -18,14 +18,18 @@ params ["_detectorType"]; -private _config = (configFile >> "ACE_detector" >> "detectors" >> _detectorType); -if (isClass _config) then { - [ - _detectorType, - getNumber (_config >> "radius"), - GVAR(ALL_DETECTABLE_TYPES), // TODO read from config and use this as a back up value instead - getArray (_config >> "sounds") - ]; -} else { - []; +private _detectorConfig = GVAR(detectorConfigs) getVariable _detectorType; +if (isNil "_detectorConfig") then { + private _cfgEntry = (configFile >> "ACE_detector" >> "detectors" >> _detectorType); + if (isClass _cfgEntry) then { + _detectorConfig = [ + _detectorType, + getNumber (_cfgEntry >> "radius"), + getArray (_cfgEntry >> "sounds") + ]; + } else { + _detectorConfig = []; + }; + GVAR(detectorConfigs) setVariable [_detectorType, _detectorConfig]; }; +_detectorConfig diff --git a/addons/minedetector/functions/fnc_playDetectorSound.sqf b/addons/minedetector/functions/fnc_playDetectorSound.sqf index 4da6b5f45c..dc57532b8c 100644 --- a/addons/minedetector/functions/fnc_playDetectorSound.sqf +++ b/addons/minedetector/functions/fnc_playDetectorSound.sqf @@ -4,20 +4,20 @@ * * Arguments: * 0: Unit - * 1: Sound class name + * 1: Sound class * * Return Value: * None * * Example: - * [player, "ace_buzz_1"] call ace_minedetector_fnc_playDetectorSound + * [player, "ace_buzz_1", 1] call ace_minedetector_fnc_playDetectorSound * * Public: No */ #include "script_component.hpp" -params ["_unit", "_detectorSound"]; +params ["_unit", "_soundClass"]; if (isNull _unit) exitWith { ACE_LOGERROR_1("unit does not exist [%1]",_unit); @@ -26,17 +26,9 @@ if (!alive _unit) exitWith { ACE_LOGERROR_1("unit is not alive [%1]",_unit); }; -private _helperObject = _unit getVariable [QGVAR(helperLogic), objNull]; -if (!isNull _helperObject) then { - deleteVehicle _helperObject; -}; -_helperObject = "ACE_LogicDummy" createVehicleLocal (getPos _unit); - -if !(isNull _helperObject) then { - _helperObject attachTo [_unit,[0,0,-3],""]; - _unit setVariable [QGVAR(helperLogic), _helperObject]; - - [_helperObject, _unit] say3D _detectorSound; +if (_unit getVariable [QGVAR(isUsingHeadphones), false] && {_unit == ACE_player}) then { + playSound _soundClass; } else { - ACE_LOGERROR_1("helper does not exist [%1]",_helperObject); + private _posASL = AGLtoASL (_unit modelToWorld (_unit selectionPosition "granat")); + [_soundClass, _posASL, 3, 15] call EFUNC(common,playConfigSound3D); }; diff --git a/addons/minedetector/script_component.hpp b/addons/minedetector/script_component.hpp index 935825a31c..f6a1d05dfc 100644 --- a/addons/minedetector/script_component.hpp +++ b/addons/minedetector/script_component.hpp @@ -16,3 +16,5 @@ #endif #include "\z\ace\addons\main\script_macros.hpp" + +#define __DR 1.3 diff --git a/addons/minedetector/sounds/metal_detector.wav b/addons/minedetector/sounds/metal_detector.wav index 0e4076725f..59f3b43ebe 100644 Binary files a/addons/minedetector/sounds/metal_detector.wav and b/addons/minedetector/sounds/metal_detector.wav differ diff --git a/addons/minedetector/sounds/metal_detector.wss b/addons/minedetector/sounds/metal_detector.wss new file mode 100644 index 0000000000..3ba5d3b7e3 Binary files /dev/null and b/addons/minedetector/sounds/metal_detector.wss differ diff --git a/addons/minedetector/stringtable.xml b/addons/minedetector/stringtable.xml index e78c34dab8..34ff8674fe 100644 --- a/addons/minedetector/stringtable.xml +++ b/addons/minedetector/stringtable.xml @@ -5,13 +5,29 @@ Metal detector Détecteur de métaux + + Metal detector + Détecteur de métaux + - Activate Detector - Activer le détecteur + Activate + Activer - Deactivate Detector - Désactiver le détecteur + Deactivate + Désactiver + + + Connect Headphones + + + Disconnect Headphones + + + Headphones Connected + + + Headphones Disconnected \ No newline at end of file diff --git a/addons/minedetector/ui/icon_mineDetector.paa b/addons/minedetector/ui/icon_mineDetector.paa new file mode 100644 index 0000000000..e335fc6a8f Binary files /dev/null and b/addons/minedetector/ui/icon_mineDetector.paa differ diff --git a/addons/optionsmenu/gui/aceMenuIcon_ca.paa b/addons/optionsmenu/gui/aceMenuIcon_ca.paa new file mode 100644 index 0000000000..0e3c1853e2 Binary files /dev/null and b/addons/optionsmenu/gui/aceMenuIcon_ca.paa differ diff --git a/addons/optionsmenu/gui/define.hpp b/addons/optionsmenu/gui/define.hpp index c2b1faf9cf..9620bdd7e6 100644 --- a/addons/optionsmenu/gui/define.hpp +++ b/addons/optionsmenu/gui/define.hpp @@ -12,6 +12,11 @@ class RscHTML; class RscText; +class RscControlsGroupNoHScrollbars; +class RscPicture; +class RscButtonMenu; + + #ifndef ACE_DEFINE_H #define ACE_DEFINE_H diff --git a/addons/optionsmenu/gui/pauseMenu.hpp b/addons/optionsmenu/gui/pauseMenu.hpp index 34f368df4a..75177fa3b6 100644 --- a/addons/optionsmenu/gui/pauseMenu.hpp +++ b/addons/optionsmenu/gui/pauseMenu.hpp @@ -104,66 +104,95 @@ class RscDisplayMain: RscStandardDisplay { class controls { class ACE_Open_settingsMenu_Btn : ACE_Open_SettingsMenu_BtnBase { action = "if (missionName != '') then {createDialog 'ACE_settingsMenu';};"; - y = "4 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + safezoneY"; + x = "safezoneX"; + y = "safezoneY"; idc = 80085; }; - class ACE_news: RscControlsGroupNoScrollbars { - idc = 80086; - x = "safezoneX + safezoneW - (16 *(((safezoneW / safezoneH) min 1.2) / 40))"; - y = "safezoneY + (18.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25))"; - w = "15 * (((safezoneW / safezoneH) min 1.2) / 40)"; - h = "4.95 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - class controls { - class ACE_NewsTitle: RscText { - text = CSTRING(aceNews); - colorBackground[] = {(162/255),(28/255),(28/255),0.8}; - idc = -1; - x = "0 * (((safezoneW / safezoneH) min 1.2) / 40)"; - y = "0 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - w = "15 *(((safezoneW / safezoneH) min 1.2) / 40)"; - h = "1 *((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - }; - class ACE_VersionInfo: RscText { - idc = 68; - x = "0 * (((safezoneW / safezoneH) min 1.2) / 40)"; - y = "1.1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - w = "15 * (((safezoneW / safezoneH) min 1.2) / 40)"; - h = "1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - colorBackground[] = {0,0,0,0.5}; - }; - class ACE_NewsBackground: RscText { - idc = -1; - x = "0 * (((safezoneW / safezoneH) min 1.2) / 40)"; - y = "2.2 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - w = "15 * (((safezoneW / safezoneH) min 1.2) / 40)"; - h = "5.75 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - colorBackground[] = {0,0,0,0.5}; - }; - class ACE_NewsText: RscHTML { - idc = 69; - x = "0.5 * (((safezoneW / safezoneH) min 1.2) / 40)"; - y = "2.2 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - w = "14 * (((safezoneW / safezoneH) min 1.2) / 40)"; - h = "2.75 *((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + class ACE_news_apex: RscControlsGroupNoHScrollbars { + idc = 80090; + x = "safezoneX + safezoneW - 10 * (pixelW * pixelGrid * 2) - (4 * pixelH)"; + y = "safezoneY + safezoneH - (3 * 2 + 1) * (pixelH * pixelGrid * 2) - 3 * (4 * pixelH)"; + w = "10 * (pixelW * pixelGrid * 2)"; + h = "2 * (pixelH * pixelGrid * 2)"; + class Controls { + class Background: RscPicture { + idc = 80091; + text = "\a3\Ui_f\data\GUI\Rsc\RscDisplayMain\gradientMods_ca.paa"; + colorText[] = {0,0,0,0.75}; + x = "(10 - 4 * 2) * (pixelW * pixelGrid * 2)"; + y = 0; + w = "4 * 2 * (pixelW * pixelGrid * 2)"; + h = "2 * (pixelH * pixelGrid * 2)"; + angle = 180; + }; + class BackgroundIcon: RscPicture { + idc = 80092; + text = "\a3\Ui_f\data\GUI\Rsc\RscDisplayMain\backgroundModsIcon_ca.paa"; + colorText[] = {0,0,0,0.75}; + x = "(10 - 2 * 2) * (pixelW * pixelGrid * 2)"; + y = 0; + w = "2 * 2 * (pixelW * pixelGrid * 2)"; + h = "2 * (pixelH * pixelGrid * 2)"; + angle = 180; + }; + class Icon: RscPicture { + idc = 80093; + text = QPATHTOF(gui\aceMenuIcon_ca.paa); + colorText[] = {1,1,1,0.5}; + x = "(10 - 2) * (pixelW * pixelGrid * 2)"; + y = 0; + w = "2 * (pixelW * pixelGrid * 2)"; + h = "2 * (pixelH * pixelGrid * 2)"; + }; + class CurrentVersionInfo: RscText { + idc = 80094; + style = 1; + text = ""; + sizeEx = "(pixelH * pixelGrid * 1.5)"; + font = "RobotoCondensedLight"; + shadow = 1; + colorBackground[] = {0,0,0,0}; + x = 0; + y = 0; + w = "(10 - 1.25 * 2) * (pixelW * pixelGrid * 2)"; + h = "2 * (pixelH * pixelGrid * 1)"; + onLoad = "(_this select 0) ctrlenable false;"; + }; + class HTTPVersionInfo: RscHTML { + idc = 80095; shadow = 0; class H1 { - font = "RobotoCondensed"; + sizeEx = "(pixelH * pixelGrid * 1.5)"; + font = "RobotoCondensedLight"; fontBold = "RobotoCondensedLight"; - sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.4)"; + align = "right"; }; class H2: H1 { - sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2)"; - font = "RobotoCondensedLight"; + sizeEx = "(pixelH * pixelGrid * 1.5)"; }; class P: H1 { - sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - fontBold = "RobotoCondensedLight"; + sizeEx = "(pixelH * pixelGrid * 1.5)"; }; - colorBold[] = {0.6,0.6,0.6,1}; - colorLink[] = {"(profilenamespace getVariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getVariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getVariable ['GUI_BCG_RGB_B',0.5])",1}; - colorLinkActive[] = {"(profilenamespace getVariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getVariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getVariable ['GUI_BCG_RGB_B',0.5])",1}; + x = 0; + y = "2 * (pixelH * pixelGrid * 1)"; + w = "(10 - 1.25 * 2) * (pixelW * pixelGrid * 2)"; + h = "2 * (pixelH * pixelGrid * 1)"; + onLoad = "(_this select 0) ctrlenable false;"; + }; + class Button: RscButtonMenu { + idc = 80096; + colorBackground[] = {0,0,0,0}; + colorBackgroundFocused[] = {0,0,0,0}; + colorBackground2[] = {0,0,0,0}; + x = 0; + y = 0; + w = "10 * (pixelW * pixelGrid * 2)"; + h = "2 * (pixelH * pixelGrid * 2)"; + + tooltip = "Download latest and report issues:"; + url = "https://github.com/acemod/ACE3"; }; }; }; diff --git a/addons/optionsmenu/init_loadMainMenuBox.sqf b/addons/optionsmenu/init_loadMainMenuBox.sqf index 9c556e5128..a9b8f5a02a 100644 --- a/addons/optionsmenu/init_loadMainMenuBox.sqf +++ b/addons/optionsmenu/init_loadMainMenuBox.sqf @@ -15,17 +15,18 @@ */ #include "script_component.hpp" -if (missionNamespace getVariable [QGVAR(newsLoaded), false]) exitWith {}; -GVAR(newsLoaded) = true; - //Need to load from profileNamespace because ace_settings might not be init if world = empty if (profileNamespace getVariable [QGVAR(showNewsOnMainMenu), true]) then { - ((_this select 0) displayCtrl 80086) ctrlShow true; + ((_this select 0) displayCtrl 80090) ctrlShow true; - private ["_version"]; - _version = getText (configFile >> "CfgPatches" >> "ace_main" >> "versionStr"); - ((_this select 0) displayCtrl 68) ctrlSetText format ["Installed Version: %1", _version]; - ((_this select 0) displayCtrl 69) htmlLoad "http://ace3mod.com/version.html"; + private _ace3VersionStr = (getText (configFile >> "CfgPatches" >> "ace_main" >> "versionStr")) select [0,5]; + ((_this select 0) displayCtrl 80094) ctrlSetText format ["Version: %1", _ace3VersionStr]; + ((_this select 0) displayCtrl 80095) htmlLoad "http://ace3mod.com/version.html"; } else { - ((_this select 0) displayCtrl 80086) ctrlShow false; + ((_this select 0) displayCtrl 80090) ctrlShow false; }; + +/* +Note: switch version.html to simpler format and right align +

Latest: {{site.ace.version.major}}.{{site.ace.version.minor}}.{{site.ace.version.patch}}

+*/ diff --git a/addons/overheating/CfgWeapons.hpp b/addons/overheating/CfgWeapons.hpp index 12cfe6e498..c7a83eec6e 100644 --- a/addons/overheating/CfgWeapons.hpp +++ b/addons/overheating/CfgWeapons.hpp @@ -2,17 +2,6 @@ class CfgWeapons { class ACE_ItemCore; class InventoryItem_Base_F; - class ACE_SpareBarrel: ACE_ItemCore { - displayname = CSTRING(SpareBarrelName); - descriptionshort = CSTRING(SpareBarrelDescription); - //model = ""; - picture = QPATHTOF(UI\spare_barrel_ca.paa); - scope = 2; - class ItemInfo: InventoryItem_Base_F { - mass = 30; - }; - }; - class RifleCore; class Rifle: RifleCore { //Mean Rounds Between Stoppages (this will be scaled based on the barrel temp) diff --git a/addons/overheating/XEH_postInit.sqf b/addons/overheating/XEH_postInit.sqf index bc3dfad795..34390cbe20 100644 --- a/addons/overheating/XEH_postInit.sqf +++ b/addons/overheating/XEH_postInit.sqf @@ -3,8 +3,7 @@ if (hasInterface) then { // Add keybinds - ["ACE3 Weapons", QGVAR(unjamWeapon), localize LSTRING(UnjamWeapon), - { + ["ACE3 Weapons", QGVAR(unjamWeapon), localize LSTRING(UnjamWeapon), { // Conditions: canInteract if !([ACE_player, objNull, ["isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; // Conditions: specific @@ -14,9 +13,7 @@ if (hasInterface) then { // Statement [ACE_player, currentMuzzle ACE_player, false] call FUNC(clearJam); true - }, - {false}, - [19, [true, false, false]], false] call CBA_fnc_addKeybind; //SHIFT + R Key + }, {false}, [19, [true, false, false]], false] call CBA_fnc_addKeybind; //SHIFT + R Key }; ["ace_settingsInitialized", { diff --git a/addons/overheating/XEH_preInit.sqf b/addons/overheating/XEH_preInit.sqf index cdd1fa78dd..a7feade1c3 100644 --- a/addons/overheating/XEH_preInit.sqf +++ b/addons/overheating/XEH_preInit.sqf @@ -4,16 +4,4 @@ ADDON = false; #include "XEH_PREP.hpp" -if (isNil "CBA_fnc_getMagazineIndex") then { - CBA_fnc_getMagazineIndex = { - params [["_unit", objNull, [objNull]], ["_magazine", "", [""]]]; - - private _displayName = getText (configFile >> "CfgMagazines" >> _magazine >> "displayName"); - - if (_displayName isEqualTo "") exitWith {[]}; - - (magazinesDetail _unit select {_x find _displayName == 0}) apply {_x = _x splitString "[:]"; _x select (count _x - 1)}; - }; -}; - ADDON = true; diff --git a/addons/overheating/functions/fnc_checkTemperature.sqf b/addons/overheating/functions/fnc_checkTemperature.sqf index 0fb600f83a..c58d14a29d 100644 --- a/addons/overheating/functions/fnc_checkTemperature.sqf +++ b/addons/overheating/functions/fnc_checkTemperature.sqf @@ -28,7 +28,7 @@ if (_assistant isEqualTo _gunner) then { _action = "Gear"; }; }; -_assistant playActionNow _action; +[_assistant, _action] call EFUNC(common,doGesture); // Waits a sec before displaying the temperature [FUNC(displayTemperature), [_gunner, _weapon], 1.0] call CBA_fnc_waitAndExecute; diff --git a/addons/overheating/functions/fnc_clearJam.sqf b/addons/overheating/functions/fnc_clearJam.sqf index 7011385c02..4dcdaa0caf 100644 --- a/addons/overheating/functions/fnc_clearJam.sqf +++ b/addons/overheating/functions/fnc_clearJam.sqf @@ -32,7 +32,7 @@ if (_weapon in _jammedWeapons) then { _clearJamAction = getText (configFile >> "CfgWeapons" >> _weapon >> "reloadAction"); }; - _unit playActionNow _clearJamAction; + [_unit, _clearJamAction, 1] call EFUNC(common,doGesture); if (_weapon == primaryWeapon _unit) then { playSound QGVAR(fixing_rifle); } else { diff --git a/addons/overheating/functions/fnc_displayTemperature.sqf b/addons/overheating/functions/fnc_displayTemperature.sqf index b2b8d2b4c0..e829b61f57 100644 --- a/addons/overheating/functions/fnc_displayTemperature.sqf +++ b/addons/overheating/functions/fnc_displayTemperature.sqf @@ -3,7 +3,7 @@ * Displays the weapon temperature * * Arguments: - * 0: Player + * 0: Unit * 1: Weapon * * Return Values: @@ -16,11 +16,13 @@ */ #include "script_component.hpp" -params ["_player", "_weapon"]; -TRACE_2("params",_player,_weapon); +params ["_unit", "_weapon"]; +TRACE_2("params",_unit,_weapon); + +// Get unit's weapon's temperature: +private _tempVarName = format [QGVAR(%1_temp), _weapon]; +private _temperature = _unit getVariable [_tempVarName, 0]; -// Calculate cool down of weapon since last shot -private _temperature = [_player, _weapon, 0] call FUNC(updateTemperature); private _scaledTemperature = (_temperature / 1000) min 1; private _color = [ @@ -41,6 +43,8 @@ for "_a" from (_count + 1) to 12 do { _string = _string + "|"; }; +TRACE_3("",_temperature,_color,_string); + _text = composeText [_text, [_string, [0.5, 0.5, 0.5]] call EFUNC(common,stringToColoredText)]; private _picture = getText (configFile >> "CfgWeapons" >> _weapon >> "picture"); diff --git a/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf b/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf index d6a9ccfe37..5f0b3ae3a9 100644 --- a/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf +++ b/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf @@ -50,4 +50,4 @@ _gunner setVariable [format [QGVAR(%1_temp), _weapon], _coolestTemp, true]; [GVAR(storedSpareBarrels), _coolestMag, [_weaponTemp, CBA_missionTime, _barrelMass]] call CBA_fnc_hashSet; // Send an event so the machines of the assistant and gunner can show the hint -[QGVAR(showWeaponTemperature), _gunner], [_gunner, _weapon], [_assistant] call CBA_fnc_targetEvent; +[QGVAR(showWeaponTemperature), [_gunner, _weapon], [_assistant, _gunner]] call CBA_fnc_targetEvent; diff --git a/addons/overheating/functions/fnc_swapBarrel.sqf b/addons/overheating/functions/fnc_swapBarrel.sqf index b904936403..3ad49df7d7 100644 --- a/addons/overheating/functions/fnc_swapBarrel.sqf +++ b/addons/overheating/functions/fnc_swapBarrel.sqf @@ -26,7 +26,7 @@ if (stance _gunner != "PRONE") then { }; // Barrel dismount gesture -_gunner playActionNow QGVAR(GestureDismountMuzzle); +[_gunner, QGVAR(GestureDismountMuzzle)] call EFUNC(common,doGesture); playSound "ACE_BarrelSwap"; private _duration = 3.0; diff --git a/addons/overheating/functions/fnc_swapBarrelCallback.sqf b/addons/overheating/functions/fnc_swapBarrelCallback.sqf index b2d559d1e2..0e4326cfea 100644 --- a/addons/overheating/functions/fnc_swapBarrelCallback.sqf +++ b/addons/overheating/functions/fnc_swapBarrelCallback.sqf @@ -23,7 +23,7 @@ TRACE_3("params",_assistant,_gunner,_weapon); if (_assistant isEqualTo _gunner) then { // Barrel mount gesture - _gunner playAction QGVAR(GestureMountMuzzle); + [_gunner, QGVAR(GestureMountMuzzle)] call EFUNC(common,doGesture); playSound "ACE_BarrelSwap"; }; diff --git a/addons/parachute/functions/fnc_doLanding.sqf b/addons/parachute/functions/fnc_doLanding.sqf index 213bf10887..b80bc44d00 100644 --- a/addons/parachute/functions/fnc_doLanding.sqf +++ b/addons/parachute/functions/fnc_doLanding.sqf @@ -14,14 +14,20 @@ * Public: No */ #include "script_component.hpp" -private["_unit"]; -_unit = _this select 0; + +params ["_unit"]; + GVAR(PFH) = false; + [_unit, "AmovPercMevaSrasWrflDf_AmovPknlMstpSrasWrflDnon", 2] call EFUNC(common,doAnimation); + _unit setVariable [QGVAR(chuteIsCut), false, true]; + [{ - if (CBA_missionTime >= ((_this select 0) select 0) + 1) then { - ((_this select 0) select 1) playActionNow "Crouch"; - [(_this select 1)] call CALLSTACK(CBA_fnc_removePerFrameHandler); + (_this select 0) params ["_time", "_unit"]; + + if (CBA_missionTime > _time + 1) then { + [_unit, "Crouch"] call EFUNC(common,doGesture); + [_this select 1] call CALLSTACK(CBA_fnc_removePerFrameHandler); }; -}, 1, [CBA_missionTime,_unit]] call CALLSTACK(CBA_fnc_addPerFrameHandler); +}, 1, [CBA_missionTime, _unit]] call CALLSTACK(CBA_fnc_addPerFrameHandler); diff --git a/addons/particles/$PBOPREFIX$ b/addons/particles/$PBOPREFIX$ new file mode 100644 index 0000000000..b93724589d --- /dev/null +++ b/addons/particles/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\particles diff --git a/addons/particles/CfgAmmo.hpp b/addons/particles/CfgAmmo.hpp new file mode 100644 index 0000000000..6065a0b818 --- /dev/null +++ b/addons/particles/CfgAmmo.hpp @@ -0,0 +1,75 @@ +class CfgAmmo { + class GrenadeHand; + + // - Smoke hand grenades -------------------------------------------------- + class SmokeShell: GrenadeHand { + smokeColor[] = {1, 1, 1, 1}; + timeToLive = 90; + }; + class SmokeShellRed: SmokeShell { + smokeColor[] = SMOKE_COLOR_RED; + timeToLive = 60; + }; + class SmokeShellGreen: SmokeShell { + smokeColor[] = SMOKE_COLOR_GREEN; + timeToLive = 60; + }; + class SmokeShellYellow: SmokeShell { + smokeColor[] = SMOKE_COLOR_YELLOW; + timeToLive = 60; + }; + class SmokeShellPurple: SmokeShell { + smokeColor[] = SMOKE_COLOR_PURPLE; + timeToLive = 60; + }; + class SmokeShellBlue: SmokeShell { + smokeColor[] = SMOKE_COLOR_BLUE; + timeToLive = 60; + }; + class SmokeShellOrange: SmokeShell { + smokeColor[] = SMOKE_COLOR_ORANGE; + timeToLive = 60; + }; + + // - 40mm smoke grenades -------------------------------------------------- + class G_40mm_Smoke: SmokeShell { + smokeColor[] = {1, 1, 1, 1}; + timeToLive = 40; + }; + class G_40mm_SmokeRed: G_40mm_Smoke { + smokeColor[] = SMOKE_COLOR_RED; + timeToLive = 40; + }; + class G_40mm_SmokeGreen: G_40mm_Smoke { + smokeColor[] = SMOKE_COLOR_GREEN; + timeToLive = 40; + }; + class G_40mm_SmokeYellow: G_40mm_Smoke { + smokeColor[] = SMOKE_COLOR_YELLOW; + timeToLive = 40; + }; + class G_40mm_SmokePurple: G_40mm_Smoke { + smokeColor[] = SMOKE_COLOR_PURPLE; + timeToLive = 40; + }; + class G_40mm_SmokeBlue: G_40mm_Smoke { + smokeColor[] = SMOKE_COLOR_BLUE; + timeToLive = 40; + }; + class G_40mm_SmokeOrange: G_40mm_Smoke { + smokeColor[] = SMOKE_COLOR_ORANGE; + timeToLive = 40; + }; + + // - Artillery smoke submunition ------------------------------------------ + class SmokeShellArty: SmokeShell { + explosionTime = 0; + effectsSmoke = "ACE_ArtillerySmoke"; + }; + + // - 120mm/155mm artillery smoke ------------------------------------------ + class SubmunitionBase; + class Smoke_120mm_AMOS_White: SubmunitionBase { + submunitionConeAngle = 10; + }; +}; diff --git a/addons/particles/CfgCloudlets.hpp b/addons/particles/CfgCloudlets.hpp new file mode 100644 index 0000000000..395bed35ab --- /dev/null +++ b/addons/particles/CfgCloudlets.hpp @@ -0,0 +1,117 @@ +class CfgCloudlets { + class Default; + + // - Smoke hand grenades -------------------------------------------------- + class ACE_SmokeBaseLarge: Default { + colorCoef[] = {"colorR", "colorG", "colorB", "colorA"}; + sizeCoef = 1; + position[] = {0, 0, 0}; + interval = 0.05; + circleRadius = 0; + circleVelocity[] = {0, 0, 0}; + particleShape = QUOTE(PATHTOF(data\smoke.p3d)); + particleFSNtieth = 1; + particleFSIndex = 0; + particleFSFrameCount = 1; + particleFSLoop = 0; + angleVar = 0.1; + animationName = ""; + particleType = "Billboard"; + timerPeriod = 1; + lifeTime = 30; + lifeTimeVar = 1; + animationSpeed[] = {1}; + animationSpeedCoef = 1; + randomDirectionPeriod = 1; + randomDirectionPeriodVar = 0; + randomDirectionIntensity = 0.08; + randomDirectionIntensityVar = 0; + destroyOnWaterSurface = 1; + destroyOnWaterSurfaceOffset = -8; + positionVar[] = {0, 0, 0}; + colorVar[] = {0, 0, 0, 0}; + color[] = { + {0.5, 0.5, 0.5, 1}, + {0.5, 0.5, 0.5, 0.7}, + {0.5, 0.5, 0.5, 0.5}, + {0.5, 0.5, 0.5, 0.5}, + {0.5, 0.5, 0.5, 0.1}, + {0.5, 0.5, 0.5, 0} + }; + size[] = {0.05, 4, 12, 16}; + sizeVar = 0.5; + weight = 1.275; + moveVelocity[] = {0, 0, 0}; + moveVelocityVar[] = {0.1, 0.1, 0.1}; + rotationVelocity = 0; + rotationVelocityVar = 20; + volume = 1; + rubbing = 0.1; + onTimerScript = ""; + beforeDestroyScript = ""; + blockAIVisibility = 1; + }; + class ACE_SmokeBaseMedium: ACE_SmokeBaseLarge { + destroyOnWaterSurfaceOffset = -6; + size[] = {0.05, 3, 9, 12}; + }; + class ACE_SmokeBaseSmall: ACE_SmokeBaseLarge { + destroyOnWaterSurfaceOffset = -4; + size[] = {0.05, 2, 6, 8}; + }; + + // - 40mm smoke grenades -------------------------------------------------- + class ACE_SmokeBase40mm: ACE_SmokeBaseLarge { + destroyOnWaterSurfaceOffset = -5; + lifeTime = 15; + size[] = {0.05, 2.5, 7.5, 10}; + }; + + // - Artillery smoke submunition ------------------------------------------ + class ACE_SmokeBaseArtilleryLarge: ACE_SmokeBaseLarge { + lifeTime = 45; + }; + class ACE_SmokeBaseArtillerySmall: ACE_SmokeBaseSmall { + lifeTime = 45; + }; + + // - Smoke on water surface ----------------------------------------------- + class ACE_SmokeAfterWaterWhite: ACE_SmokeBaseLarge { + interval = 0.05; + destroyOnWaterSurfaceOffset = -3; + size[] = {0.05, 2, 6}; + sizeVar = 1; + lifeTime = 10; + color[] = { + {0.5, 0.5, 0.5, 0.1}, + {0.5, 0.5, 0.5, 0} + }; + moveVelocityVar[] = {0, 0, 0}; + colorCoef[] = {1, 1, 1, 1}; + }; + class ACE_SmokeAfterWaterRed: ACE_SmokeAfterWaterWhite { + colorCoef[] = SMOKE_COLOR_RED; + }; + class ACE_SmokeAfterWaterGreen: ACE_SmokeAfterWaterWhite { + colorCoef[] = SMOKE_COLOR_GREEN; + }; + class ACE_SmokeAfterWaterYellow: ACE_SmokeAfterWaterWhite { + colorCoef[] = SMOKE_COLOR_YELLOW; + }; + class ACE_SmokeAfterWaterPurple: ACE_SmokeAfterWaterWhite { + colorCoef[] = SMOKE_COLOR_PURPLE; + }; + class ACE_SmokeAfterWaterBlue: ACE_SmokeAfterWaterWhite { + colorCoef[] = SMOKE_COLOR_BLUE; + }; + class ACE_SmokeAfterWaterOrange: ACE_SmokeAfterWaterWhite { + colorCoef[] = SMOKE_COLOR_ORANGE; + }; + CLOUDLET_UNDERWATER(White); + CLOUDLET_UNDERWATER(Red); + CLOUDLET_UNDERWATER(Green); + CLOUDLET_UNDERWATER(Yellow); + CLOUDLET_UNDERWATER(Purple); + CLOUDLET_UNDERWATER(Orange); + CLOUDLET_UNDERWATER(Blue); +}; diff --git a/addons/particles/Effects.hpp b/addons/particles/Effects.hpp new file mode 100644 index 0000000000..0a208cdae6 --- /dev/null +++ b/addons/particles/Effects.hpp @@ -0,0 +1,63 @@ +// - Smoke hand grenades ------------------------------------------------------ +class SmokeShellWhiteEffect { + class SmokeShell { + type = "ACE_SmokeBaseLarge"; + }; + class SmokeShell2 { + type = "ACE_SmokeBaseSmall"; + }; +}; +EFFECT_HANDGRENADE(Red); +EFFECT_HANDGRENADE(Green); +EFFECT_HANDGRENADE(Yellow); +EFFECT_HANDGRENADE(Purple); +EFFECT_HANDGRENADE(Orange); +EFFECT_HANDGRENADE(Blue); + +// - 40mm smoke grenades ------------------------------------------------------ +class ACE_40mmSmokeShellWhiteEffect: SmokeShellWhiteEffect { + class SmokeShell: SmokeShell { + type = "ACE_SmokeBase40mm"; + }; +}; +EFFECT_40MM(Red); +EFFECT_40MM(Green); +EFFECT_40MM(Yellow); +EFFECT_40MM(Purple); +EFFECT_40MM(Orange); +EFFECT_40MM(Blue); + +// - 120mm/155mm artillery smoke ---------------------------------------------- +class ACE_ArtillerySmoke { + class SmokeShell { + type = "ACE_SmokeBaseArtilleryLarge"; + simulation = "particles"; + position[] = {0, 0, 0}; + intensity = 1; + interval = 1; + }; + class SmokeShell2 { + type = "ACE_SmokeBaseArtillerySmall"; + simulation = "particles"; + position[] = {0, 0, 0}; + intensity = 1; + interval = 1; + }; +}; + +// - Smoke on water surface --------------------------------------------------- +class ACE_SmokeAfterWaterWhite { + class SmokeAfterWater { + type = "ACE_SmokeAfterWaterWhite"; + simulation = "particles"; + position[] = {0, 0, 0}; + intensity = 1; + interval = 1; + }; +}; +EFFECT_AFTER_WATER(Red); +EFFECT_AFTER_WATER(Green); +EFFECT_AFTER_WATER(Yellow); +EFFECT_AFTER_WATER(Purple); +EFFECT_AFTER_WATER(Orange); +EFFECT_AFTER_WATER(Blue); diff --git a/addons/particles/README.md b/addons/particles/README.md new file mode 100644 index 0000000000..5f03b880b2 --- /dev/null +++ b/addons/particles/README.md @@ -0,0 +1,10 @@ +ace_particles +========== + +Changes smoke particles from smoke hand grenades, 40mm grenades and artillery shells to be more realistic and useful. + +## Maintainers + +The people responsible for merging changes to this component or answering potential questions. + +- [BaerMitUmlaut](https://github.com/BaerMitUmlaut) diff --git a/addons/particles/config.cpp b/addons/particles/config.cpp new file mode 100644 index 0000000000..ad1747529c --- /dev/null +++ b/addons/particles/config.cpp @@ -0,0 +1,18 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_common"}; + author = ECSTRING(common,ACETeam); + authors[] = {"BaerMitUmlaut"}; + url = ECSTRING(main,URL); + VERSION_CONFIG; + }; +}; + +#include "CfgAmmo.hpp" +#include "CfgCloudlets.hpp" +#include "Effects.hpp" diff --git a/addons/particles/data/smoke.p3d b/addons/particles/data/smoke.p3d new file mode 100644 index 0000000000..c1617a0e33 Binary files /dev/null and b/addons/particles/data/smoke.p3d differ diff --git a/addons/particles/data/smoke_ca.paa b/addons/particles/data/smoke_ca.paa new file mode 100644 index 0000000000..627f46f9bf Binary files /dev/null and b/addons/particles/data/smoke_ca.paa differ diff --git a/addons/particles/script_component.hpp b/addons/particles/script_component.hpp new file mode 100644 index 0000000000..f3d4bbd853 --- /dev/null +++ b/addons/particles/script_component.hpp @@ -0,0 +1,57 @@ +#define COMPONENT particles +#include "\z\ace\addons\main\script_mod.hpp" + +// #define DEBUG_MODE_FULL +// #define DISABLE_COMPILE_CACHE +// #define CBA_DEBUG_SYNCHRONOUS +// #define ENABLE_PERFORMANCE_COUNTERS + +#ifdef DEBUG_ENABLED_PARTICLES + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_PARTICLES + #define DEBUG_SETTINGS DEBUG_SETTINGS_PARTICLES +#endif + +#include "\z\ace\addons\main\script_macros.hpp" + +#define SMOKE_COLOR_RED {0.9528, 0.0438, 0.0410, 0.8} +#define SMOKE_COLOR_GREEN {0.0328, 0.1626, 0.1023, 0.8} +#define SMOKE_COLOR_YELLOW {0.9610, 0.4505, 0.0109, 0.8} +#define SMOKE_COLOR_PURPLE {0.4622, 0.0578, 0.3154, 0.8} +#define SMOKE_COLOR_BLUE {0.0355, 0.1863, 1.0000, 0.8} +#define SMOKE_COLOR_ORANGE {0.9132, 0.1763, 0.0070, 0.8} + +#define EFFECT_HANDGRENADE(color) class SmokeShell##color##Effect: SmokeShellWhiteEffect { \ + class SmokeShell: SmokeShell { \ + type = "ACE_SmokeBaseMedium"; \ + }; \ +} +#define EFFECT_40MM(color) class ACE_40mmSmokeShell##color##Effect: ACE_40mmSmokeShellWhiteEffect { \ + class SmokeShellUW { \ + simulation = "particles"; \ + type = QUOTE(SmokeShell##color##UW); \ + position[] = {0, 0, 0}; \ + intensity = 1; \ + interval = 1; \ + }; \ + class SmokeShell2UW { \ + simulation = "particles"; \ + type = QUOTE(SmokeShell##color##2UW); \ + position[] = {0, 0, 0}; \ + intensity = 1; \ + interval = 1; \ + }; \ +} +#define MERGE(var1,var2) var1##var2 +#define EFFECT_AFTER_WATER(color) class ACE_SmokeAfterWater##color##: ACE_SmokeAfterWaterWhite { \ + class SmokeAfterWater: SmokeAfterWater { \ + type = QUOTE(MERGE(ACE_SmokeAfterWater,color)); \ + }; \ +} + +#define CLOUDLET_UNDERWATER(color) class SmokeShell##color##UW; \ +class SmokeShell##color##2UW: SmokeShell##color##UW { \ + postEffects = QUOTE(MERGE(ACE_SmokeAfterWater,color)); \ +} diff --git a/addons/realisticnames/CfgVehicles.hpp b/addons/realisticnames/CfgVehicles.hpp index db42e693bf..f53465b08f 100644 --- a/addons/realisticnames/CfgVehicles.hpp +++ b/addons/realisticnames/CfgVehicles.hpp @@ -513,7 +513,11 @@ class CfgVehicles { class Weapon_SMG_02_F: Weapon_Base_F { displayName = CSTRING(SMG_02_Name); }; - + + class Weapon_SMG_05_F: Weapon_Base_F { + displayName = CSTRING(SMG_05); + }; + class Weapon_hgun_PDW2000_F: Weapon_Base_F { displayName = CSTRING(hgun_PDW2000_Name); }; @@ -644,4 +648,39 @@ class CfgVehicles { class Item_acc_flashlight: Item_Base_F { displayName="UTG Defender 126"; }; + + // APEX/Tanoa + + // Jeep Wrangler + class Offroad_02_unarmed_base_F; + class C_Offroad_02_unarmed_F: Offroad_02_unarmed_base_F { + displayName = CSTRING(C_Offroad_02_unarmed); + }; + class C_Offroad_02_unarmed_F_black: C_Offroad_02_unarmed_F { + displayName = CSTRING(C_Offroad_02_unarmed_black); + }; + class C_Offroad_02_unarmed_F_blue: C_Offroad_02_unarmed_F { + displayName = CSTRING(C_Offroad_02_unarmed_blue); + }; + class C_Offroad_02_unarmed_F_green: C_Offroad_02_unarmed_F { + displayName = CSTRING(C_Offroad_02_unarmed_green); + }; + class C_Offroad_02_unarmed_F_orange: C_Offroad_02_unarmed_F { + displayName = CSTRING(C_Offroad_02_unarmed_orange); + }; + + // Cessna + class Plane_Civil_01_base_F; + class C_Plane_Civil_01_F: Plane_Civil_01_base_F { + displayName = CSTRING(C_Plane_Civil_01); + }; + class C_Plane_Civil_01_racing_F: Plane_Civil_01_base_F { + displayName = CSTRING(C_Plane_Civil_01_racing); + }; + + // Burraq + class UAV_04_base_F; + class O_T_UAV_04_CAS_F: UAV_04_base_F { + displayName = CSTRING(O_T_UAV_04_CAS); + }; }; diff --git a/addons/realisticnames/CfgWeapons.hpp b/addons/realisticnames/CfgWeapons.hpp index 645b6a8984..2654dc0df7 100644 --- a/addons/realisticnames/CfgWeapons.hpp +++ b/addons/realisticnames/CfgWeapons.hpp @@ -578,4 +578,111 @@ class CfgWeapons { class acc_flashlight: ItemCore { displayName = "UTG Defender 126"; }; + + // APEX/Tanoa + + // QBZ-95 and variants + class arifle_CTAR_base_F; + class arifle_CTAR_blk_F: arifle_CTAR_base_F { + displayName = CSTRING(arifle_CTAR_blk); + }; + class arifle_CTAR_GL_base_F; + class arifle_CTAR_GL_blk_F: arifle_CTAR_GL_base_F { + displayName = CSTRING(arifle_CTAR_GL_blk); + }; + class arifle_CTARS_base_F; + class arifle_CTARS_blk_F: arifle_CTARS_base_F { + displayName = CSTRING(arifle_CTARS_blk); + }; + + // QBU-88 + class DMR_07_base_F; + class srifle_DMR_07_blk_F: DMR_07_base_F { + displayName = CSTRING(srifle_DMR_07_blk); + }; + class srifle_DMR_07_ghex_F: DMR_07_base_F { + displayName = CSTRING(srifle_DMR_07_ghex); + }; + class srifle_DMR_07_hex_F: DMR_07_base_F { + displayName = CSTRING(srifle_DMR_07_hex); + }; + + // GM6 + class srifle_GM6_ghex_F: srifle_GM6_F { + displayName = CSTRING(srifle_GM6_ghex); + }; + + // M249 + class LMG_03_base_F; + class LMG_03_F: LMG_03_base_F { + displayName = CSTRING(LMG_03); + }; + + // Intervention + class srifle_LRR_tna_F: srifle_LRR_camo_F { + displayName = CSTRING(srifle_LRR_tna); + }; + + // MP5 + class SMG_05_base_F; + class SMG_05_F: SMG_05_base_F { + displayName = CSTRING(SMG_05); + }; + + // HK416 and variants + class arifle_SPAR_01_base_F; + class arifle_SPAR_01_blk_F: arifle_SPAR_01_base_F { + displayName = CSTRING(arifle_SPAR_01_blk); + }; + class arifle_SPAR_01_khk_F: arifle_SPAR_01_base_F { + displayName = CSTRING(arifle_SPAR_01_khk); + }; + class arifle_SPAR_01_snd_F: arifle_SPAR_01_base_F { + displayName = CSTRING(arifle_SPAR_01_snd); + }; + class arifle_SPAR_01_GL_base_F; + class arifle_SPAR_01_GL_blk_F: arifle_SPAR_01_GL_base_F { + displayName = CSTRING(arifle_SPAR_01_GL_blk); + }; + class arifle_SPAR_01_GL_khk_F: arifle_SPAR_01_GL_base_F { + displayName = CSTRING(arifle_SPAR_01_GL_khk); + }; + class arifle_SPAR_01_GL_snd_F: arifle_SPAR_01_GL_base_F { + displayName = CSTRING(arifle_SPAR_01_GL_snd); + }; + class arifle_SPAR_02_base_F; + class arifle_SPAR_02_blk_F: arifle_SPAR_02_base_F { + displayName = CSTRING(arifle_SPAR_02_blk); + }; + class arifle_SPAR_02_khk_F: arifle_SPAR_02_base_F { + displayName = CSTRING(arifle_SPAR_02_khk); + }; + class arifle_SPAR_02_snd_F: arifle_SPAR_02_base_F { + displayName = CSTRING(arifle_SPAR_02_snd); + }; + class arifle_SPAR_03_base_F; + class arifle_SPAR_03_blk_F: arifle_SPAR_03_base_F { + displayName = CSTRING(arifle_SPAR_03_blk); + }; + class arifle_SPAR_03_khk_F: arifle_SPAR_03_base_F { + displayName = CSTRING(arifle_SPAR_03_khk); + }; + class arifle_SPAR_03_snd_F: arifle_SPAR_03_base_F { + displayName = CSTRING(arifle_SPAR_03_snd); + }; + + // RPG-32 + class launch_RPG32_ghex_F: launch_RPG32_F { + displayName = CSTRING(launch_RPG32_ghex); + }; + + // P99 + class hgun_P07_khk_F: hgun_P07_F { + displayName = CSTRING(hgun_P07_khk); + }; + + // Makarov + class hgun_Pistol_01_F: Pistol_Base_F { + displayName = CSTRING(hgun_Pistol_01); + }; }; diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index b9f6c85b93..6fca714871 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -1920,5 +1920,425 @@ LWMMG (Homok) LWMMG (Deserto) + + Jeep Wrangler + Jeep Wrangler + Jeep Wrangler + Jeep Wrangler + Jeep Wrangler + Jeep Wrangler + Jeep Wrangler + Jeep Wrangler + Jeep Wrangler + Jeep Wrangler + + + Jeep Wrangler (Black) + Jeep Wrangler (Černá) + Jeep Wrangler (Noir) + Jeep Wrangler (Negro) + Jeep Wrangler (Чёрный) + Jeep Wrangler (czarny) + Jeep Wrangler (Schwarz) + Jeep Wrangler (Nero) + Jeep Wrangler (Fekete) + Jeep Wrangler (Preto) + + + Jeep Wrangler (Blue) + Jeep Wrangler (Blau) + Jeep Wrangler (Azul) + Jeep Wrangler (niebieski) + Jeep Wrangler (Modrý) + Jeep Wrangler (Bleue) + Jeep Wrangler (Синий) + Jeep Wrangler (Azul) + Jeep Wrangler (Kék) + Jeep Wrangler (Blu) + + + Jeep Wrangler (Green) + Jeep Wrangler (Grün) + Jeep Wrangler (Verde) + Jeep Wrangler (zielony) + Jeep Wrangler (Zelený) + Jeep Wrangler (Verte) + Jeep Wrangler (Зелёный) + Jeep Wrangler (Verde) + Jeep Wrangler (Zöld) + Jeep Wrangler (Verde) + + + Jeep Wrangler (Orange) + Jeep Wrangler (Orange) + Jeep Wrangler (Naranja) + Jeep Wrangler (pomarańczowy) + Jeep Wrangler (Oranžový) + Jeep Wrangler (Orange) + Jeep Wrangler (Оранжевый) + Jeep Wrangler (Laranja) + Jeep Wrangler (Narancssárga) + Jeep Wrangler (Arancione) + + + Jeep Wrangler (Red) + Jeep Wrangler (Rot) + Jeep Wrangler (Rojo) + Jeep Wrangler (czerwony) + Jeep Wrangler (Červený) + Jeep Wrangler (Rouge) + Jeep Wrangler (Красный) + Jeep Wrangler (Vermelha) + Jeep Wrangler (Piros) + Jeep Wrangler (Rosso) + + + Jeep Wrangler (White) + Jeep Wrangler (Weiß) + Jeep Wrangler (Blanco) + Jeep Wrangler (biały) + Jeep Wrangler (Bílý) + Jeep Wrangler (Blanche) + Jeep Wrangler (Белый) + Jeep Wrangler (Branca) + Jeep Wrangler (Fehér) + Jeep Wrangler (Bianco) + + + Cessna TTx + Cessna TTx + Cessna TTx + Cessna TTx + Cessna TTx + Cessna TTx + Cessna TTx + Cessna TTx + Cessna TTx + Cessna TTx + + + Cessna TTx (Racing) + Cessna TTx (Racing) + Cessna TTx (Racing) + Cessna TTx (Racing) + Cessna TTx (Racing) + Cessna TTx (Racing) + Cessna TTx (Racing) + Cessna TTx (Racing) + Cessna TTx (Racing) + Cessna TTx (Racing) + + + Burraq UCAV + Burraq UCAV + Burraq UCAV + Burraq UCAV + Burraq UCAV + Burraq UCAV + Burraq UCAV + Burraq UCAV + Burraq UCAV + Burraq UCAV + + + QBZ-95-1 (Black) + QBZ-95-1 (Černá) + QBZ-95-1 (Noir) + QBZ-95-1 (Negro) + QBZ-95-1 (Чёрный) + QBZ-95-1 (czarny) + QBZ-95-1 (Schwarz) + QBZ-95-1 (Nero) + QBZ-95-1 (Fekete) + QBZ-95-1 (Preto) + + + QBZ-95-1 GL (Black) + QBZ-95-1 GL (Černá) + QBZ-95-1 GL (Noir) + QBZ-95-1 GL (Negro) + QBZ-95-1 GL (Чёрный) + QBZ-95-1 GL (czarny) + QBZ-95-1 GL (Schwarz) + QBZ-95-1 GL (Nero) + QBZ-95-1 GL (Fekete) + QBZ-95-1 GL (Preto) + + + QBZ-95-1 LSW (Black) + QBZ-95-1 LSW (Černá) + QBZ-95-1 LSW (Noir) + QBZ-95-1 LSW (Negro) + QBZ-95-1 LSW (Чёрный) + QBZ-95-1 LSW (czarny) + QBZ-95-1 LSW (Schwarz) + QBZ-95-1 LSW (Nero) + QBZ-95-1 LSW (Fekete) + QBZ-95-1 LSW (Preto) + + + QBU-88 (Black) + QBU-88 (Černá) + QBU-88 (Noir) + QBU-88 (Negro) + QBU-88 (Чёрный) + QBU-88 (czarny) + QBU-88 (Schwarz) + QBU-88 (Nero) + QBU-88 (Fekete) + QBU-88 (Preto) + + + QBU-88 (Green Hex) + QBU-88 (Hex Grün) + QBU-88 (Hex Verde) + QBU-88 (zielony hex) + QBU-88 (Zelený Hex) + QBU-88 (Hex Verte) + QBU-88 (Зелёный Hex) + QBU-88 (Verde Hex) + QBU-88 (Zöld Hex) + QBU-88 (Hex Verde) + + + QBU-88 (Hex) + QBU-88 (Hex) + QBU-88 (Hex) + QBU-88 (hex) + QBU-88 (Hex) + QBU-88 (Hex) + QBU-88 (Hex) + QBU-88 (Hex) + QBU-88 (Hex) + QBU-88 (Hex) + + + GM6 Lynx (Green Hex) + GM6 Lynx (Hex Grün) + GM6 Lynx (Hex Verde) + GM6 Lynx (Zielony hex) + GM6 Lynx (Zelený Hex) + GM6 Lynx (Hex Verte) + GM6 Lynx (Зелёный Hex) + GM6 Lynx (Verde Hex) + GM6 Lynx (Zöld Hex) + GM6 Lynx (Hex Verde) + + + M249 SPW + M249 SPW + M249 SPW + M249 SPW + M249 SPW + M249 SPW + M249 SPW + M249 SPW + M249 SPW + M249 SPW + + + M200 Intervention (Tropic) + M200 Intervention (Tropisch) + M200 Intervention (Obratník) + M200 Intervention (zwrotnik) + M200 Intervention (Tropique) + M200 Intervention (Tropikus) + M200 Intervention (Trópico) + M200 Intervention (тропик) + M200 Intervention (Trópico) + M200 Intervention (Tropico) + + + MP5K + MP5K + MP5K + MP5K + MP5K + MP5K + MP5K + MP5K + MP5K + MP5K + + + HK416A5 10" (Black) + HK416A5 10" (Černá) + HK416A5 10" (Noir) + HK416A5 10" (Negro) + HK416A5 10" (Чёрный) + HK416A5 10" (czarny) + HK416A5 10" (Schwarz) + HK416A5 10" (Nero) + HK416A5 10" (Fekete) + HK416A5 10" (Preto) + + + HK416A5 10" (Khaki) + HK416A5 10" (Khaki) + HK416A5 10" (Kaki) + HK416A5 10" (Caqui) + HK416A5 10" (Хаки) + HK416A5 10" (khaki) + HK416A5 10" (Khaki) + HK416A5 10" (Khaki) + HK416A5 10" (Khaki) + HK416A5 10" (Caqui) + + + HK416A5 10" (Sand) + HK416A5 10" (Písková) + HK416A5 10" (Beige) + HK416A5 10" (Arena) + HK416A5 10" (Песочный) + HK416A5 10" (Sand) + HK416A5 10" (piaskowy) + HK416A5 10" (Sabbia) + HK416A5 10" (Homok) + HK416A5 10" (Deserto) + + + HK416A5 10" GL (Black) + HK416A5 10" GL (Černá) + HK416A5 10" GL (Noir) + HK416A5 10" GL (Negro) + HK416A5 10" GL (Чёрный) + HK416A5 10" GL (czarny) + HK416A5 10" GL (Schwarz) + HK416A5 10" GL (Nero) + HK416A5 10" GL (Fekete) + HK416A5 10" GL (Preto) + + + HK416A5 10" GL (Khaki) + HK416A5 10" GL (Khaki) + HK416A5 10" GL (Kaki) + HK416A5 10" GL (Caqui) + HK416A5 10" GL (Хаки) + HK416A5 10" GL (khaki) + HK416A5 10" GL (Khaki) + HK416A5 10" GL (Khaki) + HK416A5 10" GL (Khaki) + HK416A5 10" GL (Caqui) + + + HK416A5 10" GL (Sand) + HK416A5 10" GL (Písková) + HK416A5 10" GL (Beige) + HK416A5 10" GL (Arena) + HK416A5 10" GL (Песочный) + HK416A5 10" GL (Sand) + HK416A5 10" GL (piaskowy) + HK416A5 10" GL (Sabbia) + HK416A5 10" GL (Homok) + HK416A5 10" GL (Deserto) + + + HK416A5 14.5" (Black) + HK416A5 14.5" (Černá) + HK416A5 14.5" (Noir) + HK416A5 14.5" (Negro) + HK416A5 14.5" (Чёрный) + HK416A5 14.5" (czarny) + HK416A5 14.5" (Schwarz) + HK416A5 14.5" (Nero) + HK416A5 14.5" (Fekete) + HK416A5 14.5" (Preto) + + + HK416A5 14.5" (Khaki) + HK416A5 14.5" (Khaki) + HK416A5 14.5" (Kaki) + HK416A5 14.5" (Caqui) + HK416A5 14.5" (Хаки) + HK416A5 14.5" (khaki) + HK416A5 14.5" (Khaki) + HK416A5 14.5" (Khaki) + HK416A5 14.5" (Khaki) + HK416A5 14.5" (Caqui) + + + HK416A5 14.5" (Sand) + HK416A5 14.5" (Písková) + HK416A5 14.5" (Beige) + HK416A5 14.5" (Arena) + HK416A5 14.5" (Песочный) + HK416A5 14.5" (Sand) + HK416A5 14.5" (piaskowy) + HK416A5 14.5" (Sabbia) + HK416A5 14.5" (Homok) + HK416A5 14.5" (Deserto) + + + HK417A2 20" (Black) + HK417A2 20" (Černá) + HK417A2 20" (Noir) + HK417A2 20" (Negro) + HK417A2 20" (Чёрный) + HK417A2 20" (czarny) + HK417A2 20" (Schwarz) + HK417A2 20" (Nero) + HK417A2 20" (Fekete) + HK417A2 20" (Preto) + + + HK417A2 20" (Khaki) + HK417A2 20" (Khaki) + HK417A2 20" (Kaki) + HK417A2 20" (Caqui) + HK417A2 20" (Хаки) + HK417A2 20" (khaki) + HK417A2 20" (Khaki) + HK417A2 20" (Khaki) + HK417A2 20" (Khaki) + HK417A2 20" (Caqui) + + + HK417A2 20" (Sand) + HK417A2 20" (Písková) + HK417A2 20" (Beige) + HK417A2 20" (Arena) + HK417A2 20" (Песочный) + HK417A2 20" (Sand) + HK417A2 20" (piaskowy) + HK417A2 20" (Sabbia) + HK417A2 20" (Homok) + HK417A2 20" (Deserto) + + + RPG-32 (Green Hex) + RPG-32 (Hex Grün) + RPG-32 (Hex Verde) + RPG-32 (zielony hex) + RPG-32 (Zelený Hex) + RPG-32 (Hex Verte) + RPG-32 (Зелёный Hex) + RPG-32 (Verde Hex) + RPG-32 (Zöld Hex) + RPG-32 (Hex Verde) + + + P99 (Khaki) + P99 (Khaki) + P99 (Kaki) + P99 (Caqui) + P99 (Хаки) + P99 (khaki) + P99 (Khaki) + P99 (Khaki) + P99 (Khaki) + P99 (Caqui) + + + Makarov PM + Makarov PM + Makarov PM + Makarowa PM + Makarov PM + Makarov PM + Макарова ПМ + Makarov PM + Makarov PM + Makarov PM + - \ No newline at end of file + diff --git a/addons/refuel/CfgVehicles.hpp b/addons/refuel/CfgVehicles.hpp index 6774140cc7..dd7499a69a 100644 --- a/addons/refuel/CfgVehicles.hpp +++ b/addons/refuel/CfgVehicles.hpp @@ -52,21 +52,13 @@ #define MACRO_CONNECT_ACTIONS \ class ACE_Actions { \ class ACE_MainActions { \ - class GVAR(Refuel) { \ - displayName = CSTRING(Refuel); \ + class GVAR(Connect) { \ + displayName = CSTRING(Connect); \ distance = REFUEL_ACTION_DISTANCE; \ - condition = "true"; \ - statement = ""; \ - showDisabled = 0; \ - priority = 2; \ + condition = QUOTE([ARR_2(_player,_target)] call FUNC(canConnectNozzle)); \ + statement = QUOTE([ARR_2(_player,_target)] call DFUNC(connectNozzle)); \ icon = QPATHTOF(ui\icon_refuel_interact.paa); \ - class GVAR(Connect) { \ - displayName = CSTRING(Connect); \ - condition = QUOTE([ARR_2(_player,_target)] call FUNC(canConnectNozzle)); \ - statement = QUOTE([ARR_2(_player,_target)] call DFUNC(connectNozzle)); \ - exceptions[] = {"isNotInside"}; \ - icon = QPATHTOF(ui\icon_refuel_interact.paa); \ - }; \ + exceptions[] = {"isNotInside"}; \ }; \ }; \ }; @@ -76,6 +68,7 @@ class ACE_MainActions { \ displayName = CSTRING(Refuel); \ distance = REFUEL_ACTION_DISTANCE; \ + position = "[0,-0.025,0.125]"; \ condition = "true"; \ statement = ""; \ showDisabled = 0; \ @@ -319,12 +312,17 @@ class CfgVehicles { }; class Van_01_fuel_base_F: Van_01_base_F { - transportFuel = 0; //1k MACRO_REFUEL_ACTIONS GVAR(hooks)[] = {{0.38,-3.17,-.7},{-0.41,-3.17,-.7}}; GVAR(fuelCargo) = 2000; }; - + class C_Van_01_fuel_F: Van_01_fuel_base_F { + transportFuel = 0; //1k + }; + class I_G_Van_01_fuel_F: Van_01_fuel_base_F { + transportFuel = 0; //1k + }; + class Tank_F: Tank { GVAR(fuelCapacity) = 1200; }; diff --git a/addons/refuel/XEH_postInit.sqf b/addons/refuel/XEH_postInit.sqf index 8c28464287..89a1f3dc45 100644 --- a/addons/refuel/XEH_postInit.sqf +++ b/addons/refuel/XEH_postInit.sqf @@ -9,3 +9,16 @@ if (isServer) then { [QGVAR(resetLocal), { _this call FUNC(resetLocal); }] call CBA_fnc_addEventHandler; + + +#ifdef DEBUG_MODE_FULL +diag_log text format ["[ACE-refuel] Showing CfgVehicles with vanilla transportFuel"]; +private _fuelTrucks = configProperties [configFile >> "CfgVehicles", "(isClass _x) && {(getNumber (_x >> 'transportFuel')) > 0}", true]; +{ + if ((configName _x) isKindOf "Car") then { + diag_log text format ["Car [%1] needs config [fuel: %2]", configName _x, getNumber (_x >> 'transportFuel')]; + } else { + diag_log text format ["Non-car? [%1] needs config [fuel: %2]", configName _x, getNumber (_x >> 'transportFuel')]; + }; +} forEach _fuelTrucks; +#endif diff --git a/addons/reload/ACE_UI.hpp b/addons/reload/ACE_UI.hpp index 6dae3e5147..8164d04b17 100644 --- a/addons/reload/ACE_UI.hpp +++ b/addons/reload/ACE_UI.hpp @@ -1,7 +1,7 @@ class ACE_UI { class ammoCount { class conditions { - ADDON = "false"; + ADDON = "(false)"; }; }; }; diff --git a/addons/reload/XEH_postInit.sqf b/addons/reload/XEH_postInit.sqf index b4579a96ee..7a5e17464c 100644 --- a/addons/reload/XEH_postInit.sqf +++ b/addons/reload/XEH_postInit.sqf @@ -4,8 +4,7 @@ if (!hasInterface) exitWith {}; // Add keybinds -["ACE3 Weapons", QGVAR(checkAmmo), localize LSTRING(checkAmmo), -{ +["ACE3 Weapons", QGVAR(checkAmmo), localize LSTRING(checkAmmo), { // Conditions: canInteract if !([ACE_player, vehicle ACE_player, ["isNotInside", "isNotSitting"]] call EFUNC(common,canInteractWith)) exitWith {false}; // Conditions: specific @@ -14,9 +13,7 @@ if (!hasInterface) exitWith {}; // Statement [ACE_player] call FUNC(checkAmmo); true -}, -{false}, -[19, [false, true, false]], false] call CBA_fnc_addKeybind; +}, {false}, [19, [false, true, false]], false] call CBA_fnc_addKeybind; [QGVAR(syncAmmo), { //To propagate the setAmmo change, do it on all clients diff --git a/addons/reload/functions/fnc_checkAmmo.sqf b/addons/reload/functions/fnc_checkAmmo.sqf index 49a1f0728d..baa0754f80 100644 --- a/addons/reload/functions/fnc_checkAmmo.sqf +++ b/addons/reload/functions/fnc_checkAmmo.sqf @@ -31,7 +31,7 @@ if (count _this > 1) then { }; if (_unit == _target) then { - _unit playActionNow "Gear"; + [_unit, "Gear", 1] call EFUNC(common,doGesture); }; [FUNC(displayAmmo), [_target], 1, 0.1] call CBA_fnc_waitAndExecute; diff --git a/addons/reload/functions/fnc_startLinkingBelt.sqf b/addons/reload/functions/fnc_startLinkingBelt.sqf index 1590abbfab..a1cc73635d 100644 --- a/addons/reload/functions/fnc_startLinkingBelt.sqf +++ b/addons/reload/functions/fnc_startLinkingBelt.sqf @@ -57,7 +57,7 @@ private _onFailure = { _player addMagazine _magazine; }; -_player playActionNow "PutDown"; +[_player, "PutDown"] call EFUNC(common,doGesture); // Remove the magazine with maximum remaining ammo [_player, _magazineType, _maxAmmo] call EFUNC(common,removeSpecificMagazine); diff --git a/addons/repair/CfgEden.hpp b/addons/repair/CfgEden.hpp index ca315d68ec..eb7933fee4 100644 --- a/addons/repair/CfgEden.hpp +++ b/addons/repair/CfgEden.hpp @@ -16,9 +16,9 @@ class Cfg3DEN { class Value: ctrlToolbox { idc = 100; style = "0x02"; - x = "48 * (pixelW * pixelGrid * 0.25)"; - w = "82 * (pixelW * pixelGrid * 0.25)"; - h = "5 * (pixelH * pixelGrid * 0.25)"; + x = "48 * (pixelW * pixelGrid * 0.50)"; + w = "82 * (pixelW * pixelGrid * 0.50)"; + h = "5 * (pixelH * pixelGrid * 0.50)"; rows = 1; columns = 4; strings[] = {"$STR_3DEN_Attributes_Lock_Default_text", CSTRING(AssignEngineerRole_role_none), CSTRING(AssignEngineerRole_role_engineer), CSTRING(AssignEngineerRole_role_specialist)}; diff --git a/addons/repair/config.cpp b/addons/repair/config.cpp index dab412eb93..71a990ea73 100644 --- a/addons/repair/config.cpp +++ b/addons/repair/config.cpp @@ -25,5 +25,5 @@ class ACE_newEvents { setWheelHitPointDamage = QGVAR(setWheelHitPointDamage); setVehicleHitPointDamage = QGVAR(setVehicleHitPointDamage); setVehicleDamage = QGVAR(setVehicleDamage); - AddCargoByClass = "ace_addCargoByClass"; + AddCargoByClass = "ace_addCargo"; }; diff --git a/addons/repair/functions/fnc_addSpareParts.sqf b/addons/repair/functions/fnc_addSpareParts.sqf index 2d133da3c1..971abb571a 100644 --- a/addons/repair/functions/fnc_addSpareParts.sqf +++ b/addons/repair/functions/fnc_addSpareParts.sqf @@ -33,4 +33,4 @@ if (!EGVAR(common,settingsInitFinished)) exitWith { if (!_force && !GVAR(addSpareParts)) exitWith {}; // Load -["ace_addCargoByClass", [_part, _vehicle, _amount]] call CBA_fnc_localEvent; +["ace_addCargo", [_part, _vehicle, _amount]] call CBA_fnc_localEvent; diff --git a/addons/repair/stringtable.xml b/addons/repair/stringtable.xml index 7f82d9c881..d5b52b1b68 100644 --- a/addons/repair/stringtable.xml +++ b/addons/repair/stringtable.xml @@ -248,16 +248,16 @@ Ajouter des pièces de rechage aux véhicules ? (à besoin du système de cargaison) - Repair >> - Reparieren >> - Reparación >> - Réparer >> - Napraw >> - Opravit >> - Reparar >> - Ripara >> - Szerelés >> - Ремонт >> + Repair + Reparieren + Reparación + Réparer + Napraw + Opravit + Reparar + Ripara + Szerelés + Ремонт Display text on repair diff --git a/addons/sandbag/functions/fnc_deployConfirm.sqf b/addons/sandbag/functions/fnc_deployConfirm.sqf index c37e0ed0d9..47b74533a1 100644 --- a/addons/sandbag/functions/fnc_deployConfirm.sqf +++ b/addons/sandbag/functions/fnc_deployConfirm.sqf @@ -53,6 +53,6 @@ call EFUNC(interaction,hideMouseHint); [_unit, "DefaultAction", _unit getVariable [QGVAR(Deploy), -1]] call EFUNC(common,removeActionEventHandler); // play animation -_unit playActionNow "PutDown"; +[_unit, "PutDown"] call EFUNC(common,doGesture); _unit setVariable [QGVAR(isDeploying), false, true]; diff --git a/addons/sandbag/functions/fnc_pickup.sqf b/addons/sandbag/functions/fnc_pickup.sqf index fd4560fdec..f7eaca9b72 100644 --- a/addons/sandbag/functions/fnc_pickup.sqf +++ b/addons/sandbag/functions/fnc_pickup.sqf @@ -18,7 +18,7 @@ params ["_unit", "_sandbag"]; -_unit playActionNow "PutDown"; +[_unit, "PutDown"] call EFUNC(common,doGesture); _unit setVariable [QGVAR(isUsingSandbag), true]; diff --git a/addons/spottingscope/CfgVehicles.hpp b/addons/spottingscope/CfgVehicles.hpp index f86b9d16c7..84ce5f177f 100644 --- a/addons/spottingscope/CfgVehicles.hpp +++ b/addons/spottingscope/CfgVehicles.hpp @@ -70,8 +70,8 @@ class CfgVehicles { model = QPATHTOF(data\ace_spottingscope.p3d); mapSize = 0.5; transportSoldier = 0; - getInAction = "GetInLow"; - getOutAction = "GetOutLow"; + getInAction = "PlayerProne"; + getOutAction = "PlayerProne"; editorSubcategory = "EdSubcat_Turrets"; class Turrets: Turrets { @@ -115,8 +115,8 @@ class CfgVehicles { gunnerOutOpticsShowCursor = 0; gunnerOpticsShowCursor = 0; gunnerAction = "ACE_SpottingScope"; - gunnerGetInAction = "GetInLow"; - gunnerGetOutAction = "GetOutLow"; + gunnerGetInAction = "PlayerProne"; + gunnerGetOutAction = "PlayerProne"; gunnerForceOptics = 0; ejectDeadGunner = 0; turretInfoType = QGVAR(RscUnitInfo); diff --git a/addons/spottingscope/data/ace_spottingscope.p3d b/addons/spottingscope/data/ace_spottingscope.p3d index 0afe9952cf..969d0b37f5 100644 Binary files a/addons/spottingscope/data/ace_spottingscope.p3d and b/addons/spottingscope/data/ace_spottingscope.p3d differ diff --git a/addons/tagging/functions/fnc_tag.sqf b/addons/tagging/functions/fnc_tag.sqf index 165441f80e..e39b6eed22 100644 --- a/addons/tagging/functions/fnc_tag.sqf +++ b/addons/tagging/functions/fnc_tag.sqf @@ -105,7 +105,7 @@ if ( !([ 0.5*TAG_SIZE, 0.5*TAG_SIZE] call _fnc_isOk) || private _vectorDirAndUp = [_surfaceNormal vectorMultiply -1, _v3]; // Everything ok, make the unit create the tag -_unit playActionNow "PutDown"; +[_unit, "PutDown"] call EFUNC(common,doGesture); [{ params ["", "", "", "", "_unit"]; diff --git a/addons/ui/ACE_Settings.hpp b/addons/ui/ACE_Settings.hpp index e6c3e5e496..c02d5be2b6 100644 --- a/addons/ui/ACE_Settings.hpp +++ b/addons/ui/ACE_Settings.hpp @@ -83,7 +83,7 @@ class ACE_Settings { displayName = CSTRING(AmmoCount); description = CSTRING(RequiresSoldierVehicleWeaponInfo); typeName = "BOOL"; - value = 1; + value = 0; isClientSettable = 1; }; class GVAR(magCount) { diff --git a/addons/ui/CfgVehicles.hpp b/addons/ui/CfgVehicles.hpp index 0b1cc9b2a9..563cf22ce1 100644 --- a/addons/ui/CfgVehicles.hpp +++ b/addons/ui/CfgVehicles.hpp @@ -73,7 +73,7 @@ class CfgVehicles { displayName = CSTRING(AmmoCount); description = CSTRING(RequiresSoldierVehicleWeaponInfo); typeName = "BOOL"; - defaultValue = 1; + defaultValue = 0; }; class magCount { displayName = CSTRING(MagCount); diff --git a/addons/vehicles/CfgWeapons.hpp b/addons/vehicles/CfgWeapons.hpp index 6c0953eb76..c4d28c3e31 100644 --- a/addons/vehicles/CfgWeapons.hpp +++ b/addons/vehicles/CfgWeapons.hpp @@ -27,7 +27,7 @@ class CfgWeapons { }; class LMG_Minigun: LMG_RCWS { - magazines[] = {"1000Rnd_65x39_Belt","1000Rnd_65x39_Belt_Green","1000Rnd_65x39_Belt_Tracer_Green","1000Rnd_65x39_Belt_Tracer_Red","1000Rnd_65x39_Belt_Tracer_Yellow","1000Rnd_65x39_Belt_Yellow","2000Rnd_65x39_Belt","2000Rnd_65x39_Belt_Green","2000Rnd_65x39_Belt_Tracer_Green","2000Rnd_65x39_Belt_Tracer_Green_Splash","2000Rnd_65x39_Belt_Tracer_Red","2000Rnd_65x39_Belt_Tracer_Yellow","2000Rnd_65x39_Belt_Tracer_Yellow_Splash","2000Rnd_65x39_Belt_Yellow","2000Rnd_762x51_Belt_T_Green","2000Rnd_762x51_Belt_T_Red","2000Rnd_762x51_Belt_T_Yellow","200Rnd_65x39_Belt","200Rnd_65x39_Belt_Tracer_Green","200Rnd_65x39_Belt_Tracer_Red","200Rnd_65x39_Belt_Tracer_Yellow","5000Rnd_762x51_Belt","5000Rnd_762x51_Yellow_Belt"}; + magazines[] = {"1000Rnd_65x39_Belt","1000Rnd_65x39_Belt_Green","1000Rnd_65x39_Belt_Tracer_Green","1000Rnd_65x39_Belt_Tracer_Red","1000Rnd_65x39_Belt_Tracer_Yellow","1000Rnd_65x39_Belt_Yellow","2000Rnd_65x39_Belt","2000Rnd_65x39_Belt_Green","2000Rnd_65x39_Belt_Tracer_Green","2000Rnd_65x39_Belt_Tracer_Green_Splash","2000Rnd_65x39_Belt_Tracer_Red","2000Rnd_65x39_Belt_Tracer_Yellow","2000Rnd_65x39_Belt_Tracer_Yellow_Splash","2000Rnd_65x39_Belt_Yellow","2000Rnd_762x51_Belt_T_Green","2000Rnd_762x51_Belt_T_Red","2000Rnd_762x51_Belt_T_Yellow","200Rnd_65x39_Belt","200Rnd_65x39_Belt_Tracer_Green","200Rnd_65x39_Belt_Tracer_Red","200Rnd_65x39_Belt_Tracer_Yellow","5000Rnd_762x51_Belt","5000Rnd_762x51_Yellow_Belt","500Rnd_65x39_Belt","500Rnd_65x39_Belt_Tracer_Red_Splash","500Rnd_65x39_Belt_Tracer_Green_Splash","500Rnd_65x39_Belt_Tracer_Yellow_Splash"}; }; class HMG_127: LMG_RCWS { diff --git a/addons/zeus/config.cpp b/addons/zeus/config.cpp index 3ec87b637c..4c9a831fd0 100644 --- a/addons/zeus/config.cpp +++ b/addons/zeus/config.cpp @@ -58,5 +58,5 @@ class ACE_newEvents { zeusUnitAssigned = QGVAR(zeusUnitAssigned); SetSurrendered = QEGVAR(captives,setSurrendered); SetHandcuffed = QEGVAR(captives,setHandcuffed); - AddCargoByClass = "ace_addCargoByClass"; + AddCargoByClass = "ace_addCargo"; }; diff --git a/addons/zeus/functions/fnc_moduleAddSpareTrack.sqf b/addons/zeus/functions/fnc_moduleAddSpareTrack.sqf index 492914eb1c..2926fafcf9 100644 --- a/addons/zeus/functions/fnc_moduleAddSpareTrack.sqf +++ b/addons/zeus/functions/fnc_moduleAddSpareTrack.sqf @@ -32,7 +32,7 @@ if !(["ace_cargo"] call EFUNC(common,isModLoaded) && ["ace_repair"] call EFUNC(c if (getNumber (configFile >> "CfgVehicles" >> "ACE_Track" >> QEGVAR(cargo,size)) > [_mouseOverUnit] call EFUNC(cargo,getCargoSpaceLeft)) then { [LSTRING(OnlyEnoughCargoSpace)] call EFUNC(common,displayTextStructured); } else { - ["ace_addCargoByClass", ["ACE_Track", _mouseOverUnit, 1, true]] call CBA_fnc_localEvent; + ["ace_addCargo", ["ACE_Track", _mouseOverUnit, 1, true]] call CBA_fnc_localEvent; }; }; }; diff --git a/addons/zeus/functions/fnc_moduleAddSpareWheel.sqf b/addons/zeus/functions/fnc_moduleAddSpareWheel.sqf index 105acb2b83..2c051c94b6 100644 --- a/addons/zeus/functions/fnc_moduleAddSpareWheel.sqf +++ b/addons/zeus/functions/fnc_moduleAddSpareWheel.sqf @@ -32,7 +32,7 @@ if !(["ace_cargo"] call EFUNC(common,isModLoaded) && ["ace_repair"] call EFUNC(c if (getNumber (configFile >> "CfgVehicles" >> "ACE_Wheel" >> QEGVAR(cargo,size)) > [_mouseOverUnit] call EFUNC(cargo,getCargoSpaceLeft)) then { [LSTRING(OnlyEnoughCargoSpace)] call EFUNC(common,displayTextStructured); } else { - ["ace_addCargoByClass", ["ACE_Wheel", _mouseOverUnit, 1, true]] call CBA_fnc_localEvent; + ["ace_addCargo", ["ACE_Wheel", _mouseOverUnit, 1, true]] call CBA_fnc_localEvent; }; }; }; diff --git a/docs/README_DE.md b/docs/README_DE.md index f7985229ae..9e1bcec8ab 100644 --- a/docs/README_DE.md +++ b/docs/README_DE.md @@ -4,7 +4,7 @@

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

- ACE3 Wersja + ACE3 Wersja ACE3 Zagadnienia diff --git a/mod.cpp b/mod.cpp index 7cf6e85aa6..146b821534 100644 --- a/mod.cpp +++ b/mod.cpp @@ -1,8 +1,8 @@ -name = "Advanced Combat Environment 3.6.0"; +name = "Advanced Combat Environment 3.6.2"; picture = "logo_ace3_ca.paa"; actionName = "GitHub"; action = "https://github.com/acemod/ACE3"; -description = "ACE3 - Version 3.6.0"; +description = "ACE3 - Version 3.6.2"; logo = "logo_ace3_ca.paa"; logoOver = "logo_ace3_ca.paa"; tooltip = "ACE3"; diff --git a/optionals/compat_rhs_usf3/config.cpp b/optionals/compat_rhs_usf3/config.cpp index f4f5a19665..36cb9aee00 100644 --- a/optionals/compat_rhs_usf3/config.cpp +++ b/optionals/compat_rhs_usf3/config.cpp @@ -6,7 +6,7 @@ class CfgPatches { units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"rhsusf_c_weapons", "rhsusf_c_troops", "rhsusf_c_m1a1", "rhsusf_c_m1a2", "RHS_US_A2_AirImport", "rhsusf_c_m109", "rhsusf_c_hmmwv", "rhsusf_c_rg33", "rhsusf_c_fmtv", "rhsusf_c_m113", "RHS_US_A2Port_Armor"}; + requiredAddons[] = {"ace_javelin", "rhsusf_c_weapons", "rhsusf_c_troops", "rhsusf_c_m1a1", "rhsusf_c_m1a2", "RHS_US_A2_AirImport", "rhsusf_c_m109", "rhsusf_c_hmmwv", "rhsusf_c_rg33", "rhsusf_c_fmtv", "rhsusf_c_m113", "RHS_US_A2Port_Armor"}; author = ECSTRING(common,ACETeam); authors[] = {"Ruthberg", "GitHawk", "BaerMitUmlaut"}; url = ECSTRING(main,URL);