From 13c9db75a7fbd01b02e69767561950b0c0a476db Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Tue, 10 Feb 2015 19:55:53 -0600 Subject: [PATCH 001/214] Disarming Prototype --- addons/disarming/$PBOPREFIX$ | 1 + addons/disarming/CfgEventHandlers.hpp | 11 + addons/disarming/CfgVehicles.hpp | 53 +++++ addons/disarming/CfgWeapons.hpp | 14 ++ addons/disarming/README.md | 14 ++ addons/disarming/UI/potato_ca.paa | Bin 0 -> 40402 bytes addons/disarming/XEH_postInit.sqf | 4 + addons/disarming/XEH_preInit.sqf | 12 + addons/disarming/config.cpp | 18 ++ addons/disarming/functions/fnc_canDisarm.sqf | 32 +++ .../functions/fnc_disarmDropItems.sqf | 209 ++++++++++++++++++ .../functions/fnc_finishDisarmCaller.sqf | 23 ++ .../functions/fnc_finishDisarmTarget.sqf | 25 +++ .../functions/fnc_startDisarmCaller.sqf | 22 ++ .../functions/fnc_startDisarmTarget.sqf | 38 ++++ .../disarming/functions/script_component.hpp | 1 + addons/disarming/script_component.hpp | 12 + addons/disarming/stringtable.xml | 5 + 18 files changed, 494 insertions(+) create mode 100644 addons/disarming/$PBOPREFIX$ create mode 100644 addons/disarming/CfgEventHandlers.hpp create mode 100644 addons/disarming/CfgVehicles.hpp create mode 100644 addons/disarming/CfgWeapons.hpp create mode 100644 addons/disarming/README.md create mode 100644 addons/disarming/UI/potato_ca.paa create mode 100644 addons/disarming/XEH_postInit.sqf create mode 100644 addons/disarming/XEH_preInit.sqf create mode 100644 addons/disarming/config.cpp create mode 100644 addons/disarming/functions/fnc_canDisarm.sqf create mode 100644 addons/disarming/functions/fnc_disarmDropItems.sqf create mode 100644 addons/disarming/functions/fnc_finishDisarmCaller.sqf create mode 100644 addons/disarming/functions/fnc_finishDisarmTarget.sqf create mode 100644 addons/disarming/functions/fnc_startDisarmCaller.sqf create mode 100644 addons/disarming/functions/fnc_startDisarmTarget.sqf create mode 100644 addons/disarming/functions/script_component.hpp create mode 100644 addons/disarming/script_component.hpp create mode 100644 addons/disarming/stringtable.xml diff --git a/addons/disarming/$PBOPREFIX$ b/addons/disarming/$PBOPREFIX$ new file mode 100644 index 0000000000..47b746cf19 --- /dev/null +++ b/addons/disarming/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\disarming \ No newline at end of file diff --git a/addons/disarming/CfgEventHandlers.hpp b/addons/disarming/CfgEventHandlers.hpp new file mode 100644 index 0000000000..e75956f440 --- /dev/null +++ b/addons/disarming/CfgEventHandlers.hpp @@ -0,0 +1,11 @@ +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/disarming/CfgVehicles.hpp b/addons/disarming/CfgVehicles.hpp new file mode 100644 index 0000000000..e7fbb92aa1 --- /dev/null +++ b/addons/disarming/CfgVehicles.hpp @@ -0,0 +1,53 @@ +class CfgVehicles { + class Man; + class CAManBase: Man { + class ACE_Actions { + class ACE_Disarm { + displayName = "Disarm >>"; + distance = 3; + condition = QUOTE([ARR_2(_player, _target)] call FUNC(canDisarm)); + statement = ""; + showDisabled = 0; + priority = 3.2; + // icon = PATHTOF(UI\team\team_management_ca.paa); + subMenu[] = {"ACE_Disarm", 0}; + // hotkey = "M"; + enableInside = 0; + + class ACE_removeWeapons { + displayName = "Remove Weapons"; + distance = 3; + condition = QUOTE([ARR_3(_player, _target, 'weapons')] call FUNC(canDisarm)); + statement = QUOTE([ARR_3(_player, _target, 'weapons')] call FUNC(startDisarmCaller)); + exceptions[] = {}; + showDisabled = 1; + priority = 2.4; + // icon = QUOTE(PATHTOF(UI\handcuff_ca.paa)); + // hotkey = "C"; + }; + class ACE_removeBackpack { + displayName = "Remove Backpack"; + distance = 3; + condition = QUOTE([ARR_3(_player, _target, 'backpack')] call FUNC(canDisarm)); + statement = QUOTE([ARR_3(_player, _target, 'backpack')] call FUNC(startDisarmCaller)); + exceptions[] = {}; + showDisabled = 1; + priority = 2.4; + // icon = QUOTE(PATHTOF(UI\handcuff_ca.paa)); + // hotkey = "C"; + }; + class ACE_removeUniform { + displayName = "Remove Uniform"; + distance = 3; + condition = QUOTE([ARR_3(_player, _target, 'uniform')] call FUNC(canDisarm)); + statement = QUOTE([ARR_3(_player, _target, 'uniform')] call FUNC(startDisarmCaller)); + exceptions[] = {}; + showDisabled = 1; + priority = 2.4; + // icon = QUOTE(PATHTOF(UI\handcuff_ca.paa)); + // hotkey = "C"; + }; + }; + }; + }; +}; diff --git a/addons/disarming/CfgWeapons.hpp b/addons/disarming/CfgWeapons.hpp new file mode 100644 index 0000000000..404ef4aa76 --- /dev/null +++ b/addons/disarming/CfgWeapons.hpp @@ -0,0 +1,14 @@ +class CfgWeapons { + class ACE_ItemCore; + class InventoryItem_Base_F; + + class ACE_DebugPotato: ACE_ItemCore { + displayName = "ACE Potato (debug)"; + descriptionShort = "Glorious Potato
If you see this in game it means someone fucked up"; + picture = QUOTE(PATHTOF(UI\potato_ca.paa)); + scope = 1; + class ItemInfo: InventoryItem_Base_F { + mass = 1; + }; + }; +}; diff --git a/addons/disarming/README.md b/addons/disarming/README.md new file mode 100644 index 0000000000..3938720f08 --- /dev/null +++ b/addons/disarming/README.md @@ -0,0 +1,14 @@ +ace_captives +============ + +Allows taking people captive/handcuffed + +####Items: +`ACE_CableTie` - adds ability to take someone captive + + +## Maintainers + +The people responsible for merging changes to this component or answering potential questions. + +- [PabstMirror](https://github.com/PabstMirror) diff --git a/addons/disarming/UI/potato_ca.paa b/addons/disarming/UI/potato_ca.paa new file mode 100644 index 0000000000000000000000000000000000000000..00757d8ed3046360de31ea4bb5ed08b762db35be GIT binary patch literal 40402 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 z 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 + * 1: target + * 2: type of disarm + * + * Return Value: + * The return value + * + * Example: + * TODO + * + * Public: No + */ +#include "script_component.hpp" + +PARAMS_2(_caller,_target); +DEFAULT_PARAM(2,_type,""); + +if (false) exitWith {false}; + +_returnValue = true; + +switch (_type) do { + + +}; + +_returnValue diff --git a/addons/disarming/functions/fnc_disarmDropItems.sqf b/addons/disarming/functions/fnc_disarmDropItems.sqf new file mode 100644 index 0000000000..c4e093ec05 --- /dev/null +++ b/addons/disarming/functions/fnc_disarmDropItems.sqf @@ -0,0 +1,209 @@ +#include "script_component.hpp" + +#define TIME_MAX_WAIT 5 +#define DUMMY_ITEM "ACE_DebugPotato" +#define UNIQUE_MAGAZINES ["ACE_key_customKeyMagazine"] + +PARAMS_3(_caller,_target,_listOfItemsToRemove); +DEFAULT_PARAM(3,_doNotDropAmmo,false); //By default units drop all weapon mags when dropping a weapon + +_fncSumArray = { + _return = 0; + {_return = _return + _x;} forEach (_this select 0); + _return +}; + +//Sanity Check +if (_doNotDropAmmo && {({_x in _listOfItemsToRemove} count (magazines _target)) > 0}) exitWith { + [_caller, _target, "magazines and _doNotDropAmmo error"] call FUNC(finishDisarmTarget); +}; + +_holder = objNull; +{ + if ((_x getVariable [QGVAR(disarmUnit), objNull]) == _target) exitWith { + _holder = _x; + }; +} forEach ((getpos _target) nearObjects ["WeaponHolderSimulated", 3]); + +if (isNull _holder) then { + _dropPos = _target modelToWorld [-0.75, 0.75, 0]; + _dropPos set [2, 0]; + _holder = createVehicle ["WeaponHolderSimulated", _dropPos, [], 0, "CAN_COLLIDE"]; + _holder setVariable [QGVAR(disarmUnit), _target]; +}; + +//Verify holder created +if (isNull _holder) exitWith { + [_caller, _target, "Create Holder"] call FUNC(finishDisarmTarget); +}; + + +//Remove Magazines +_targetMagazinesStart = magazinesAmmo _target; +_holderMagazinesStart = magazinesAmmoCargo _holder; + +{ + EXPLODE_2_PVT(_x,_xClassname,_xAmmo); + if ((_xClassname in _listOfItemsToRemove) && {!(_xClassname in UNIQUE_MAGAZINES)}) then { + _holder addMagazineAmmoCargo [_xClassname, 1, _xAmmo]; + _target removeMagazine _xClassname; + }; +} forEach _targetMagazinesStart; + +_targetMagazinesEnd = magazinesAmmo _target; +_holderMagazinesEnd = magazinesAmmoCargo _holder; + +//Verify Mags dropped from unit: +if ( ({(_x select 0) in _listOfItemsToRemove} count _targetMagazinesEnd) != 0) exitWith { + [_caller, _target, "Didn't Remove Magazines"] call FUNC(finishDisarmTarget); +}; +//Verify holder has mags unit had (lazy count for now) +if (((count _targetMagazinesEnd) - (count _targetMagazinesStart)) != ((count _holderMagazinesEnd) - (count _holderMagazinesStart))) exitWith { + [_caller, _target, "Crate Magazines"] call FUNC(finishDisarmTarget); +}; + + +//Remove Items, Assigned Items and NVG +_holderItemsStart = getitemCargo _holder; +_targetItemsStart = ((assignedItems _target) + (items _target) + [hmd _target] + [headgear _target]); + +_addToCrateClassnames = []; +_addToCrateCount = []; +{ + if (_x in _listOfItemsToRemove) then { + if (_x in (items _target)) then { + _target removeItem _x; + } else { + _target unlinkItem _x; + }; + _index = _addToCrateClassnames find _x; + if (_index != -1) then { + _addToCrateCount set [_index, ((_addToCrateCount select _index) + 1)]; + } else { + _addToCrateClassnames pushBack _x; + _addToCrateCount pushBack 1; + }; + }; +} forEach _targetItemsStart; + +//Add the items to the holder (combined to reduce addItemCargoGlobal calls) +{ + _holder addItemCargoGlobal [(_addToCrateClassnames select _forEachIndex), (_addToCrateCount select _forEachIndex)]; +} forEach _addToCrateClassnames; + +_holderItemsEnd = getitemCargo _holder; +_targetItemsEnd = ((assignedItems _target) + (items _target) + [hmd _target] + [headgear _target]); + +//Verify Items Added (lazy count) +if (((count _targetItemsEnd) - (count _targetItemsStart)) != ([_addToCrateCount] call _fncSumArray)) exitWith { + [_caller, _target, "Items Not Removed From Player"] call FUNC(finishDisarmTarget); +}; +if ((([_holderItemsEnd select 1] call _fncSumArray) - ([_holderItemsStart select 1] call _fncSumArray)) != ([_addToCrateCount] call _fncSumArray)) exitWith { + [_caller, _target, "Items Not Added to Holder"] call FUNC(finishDisarmTarget); +}; + + +//If holder is still empty, it will be 'garbage collected' while we wait for the drop 'action' to take place +//So add a dummy item and just remove at the end +_holderIsEmpty = (([_holderItemsEnd select 1] call _fncSumArray) + (count _holderMagazinesEnd)) == 0; +if (_holderIsEmpty) then { + systemChat "Empty: making dummy"; + _holder addItemCargoGlobal [DUMMY_ITEM, 1]; +}; + +systemChat format ["PFEh start %1", time]; +//Start the PFEH to do the actions (which could take >1 frame) +[{ + PARAMS_2(_args,_pfID); + EXPLODE_8_PVT(_args,_caller,_target,_listOfItemsToRemove,_holder,_holderIsEmpty,_maxWaitTime,_doNotDropAmmo,_startingMagazines); + + _needToRemoveWeapon = ({_x in _listOfItemsToRemove} count (weapons _target)) > 0; + _needToRemoveMagazines = ({_x in _listOfItemsToRemove} count (magazines _target)) > 0; + _needToRemoveBackpack = ((backPack _target) != "") && {(backPack _target) in _listOfItemsToRemove}; + _needToRemoveVest = ((vest _target) != "") && {(vest _target) in _listOfItemsToRemove}; + _needToRemoveUniform = ((uniform _target) != "") && {(uniform _target) in _listOfItemsToRemove}; + + // systemChat format ["%1 - (%2 %3 %4 %5)", time, _maxWaitTime, _needToRemoveWeapon, _needToRemoveMagazines, _needToRemoveBackpack]; + + if ((time < _maxWaitTime) && {_needToRemoveWeapon || _needToRemoveMagazines || _needToRemoveBackpack}) then { + //action drop weapons (keeps loaded magazine and attachements) + { + if (_x in _listOfItemsToRemove) then { + _target action ["DropWeapon", _holder, _x]; + }; + } forEach (weapons _target); + + //Drop magazine (keeps unique ID) + { + if (_x in _listOfItemsToRemove) then { + _target action ["DropMagazine", _holder, _x]; + }; + } forEach (magazines _target); + + //Drop backpack (Keeps variables for ACRE/TFR) + if (_needToRemoveBackpack) then {_target action ["DropBag", _holder, (backPack _target)];}; + } else { + systemChat format ["PFEh done %1", time]; + //Exit PFEH + [_pfID] call CBA_fnc_removePerFrameHandler; + + + if (_doNotDropAmmo) then { + _error = false; + + _magsToPickup = +_startingMagazines; + { + _index = _magsToPickup find _x; + if (_index == -1) exitWith {_error = true; ERROR("More mags than when we started?")}; + _magsToPickup deleteAt _index; + } forEach (magazinesAmmo _target); + + _magazinesInHolder = magazinesAmmoCargo _holder; + { + _index = _magazinesInHolder find _x; + if (_index == -1) exitWith {_error = true; ERROR("Missing mag not in holder")}; + _magazinesInHolder deleteAt _index; + } forEach _magsToPickup; + + //No Error (all the ammo in the container is ammo we should have); + if ((!_error) && {_magazinesInHolder isEqualTo []}) then { + { + _target addMagazine _x; + } forEach (magazinesAmmoCargo _holder); + clearMagazineCargoGlobal _holder; + }; + }; + + //If we added a dummy item, remove it now + if (_holderIsEmpty && {!((getItemCargo _holder) isEqualTo [[DUMMY_ITEM],[1]])}) exitWith { + [_caller, _target, "Holder should only have dummy item"] call FUNC(finishDisarmTarget); + }; + if (_holderIsEmpty) then { + systemChat "Debug: Deleting Dummy"; + clearItemCargoGlobal _holder; + }; + + //Verify we didn't timeout waiting on drop action + if (time >= _maxWaitTime) exitWith { + [_caller, _target, "Drop Actions Timeout"] call FUNC(finishDisarmTarget); + }; + + if (_needToRemoveVest && {!((vestItems _target) isEqualTo [])}) exitWith { + [_caller, _target, "Vest Not Empty"] call FUNC(finishDisarmTarget); + }; + if (_needToRemoveVest) then { + removeVest _target; + _holder addItemCargoGlobal [(vest _target), 1]; + }; + if (_needToRemoveUniform && {!((uniformItems _target) isEqualTo [])}) exitWith { + [_caller, _target, "Uniform Not Empty"] call FUNC(finishDisarmTarget); + }; + if (_needToRemoveUniform) then { + removeUniform _target; + _holder addItemCargoGlobal [(uniform _target), 1]; + }; + + [_caller, _target, "Victory"] call FUNC(finishDisarmTarget); + }; + +}, 0.0, [_caller,_target, _listOfItemsToRemove, _holder, _holderIsEmpty, (time + TIME_MAX_WAIT), _doNotDropAmmo, _targetMagazinesEnd]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/disarming/functions/fnc_finishDisarmCaller.sqf b/addons/disarming/functions/fnc_finishDisarmCaller.sqf new file mode 100644 index 0000000000..555555d8fe --- /dev/null +++ b/addons/disarming/functions/fnc_finishDisarmCaller.sqf @@ -0,0 +1,23 @@ +/* + * Author: PabstMirror + * TODO + * + * Arguments: + * 0: caller (player) + * 1: target + * 1: type of disarm + * + * Return Value: + * The return value + * + * Example: + * + * + * Public: No + */ +#include "script_component.hpp" + + +PARAMS_3(_caller,_target,_errorMsg); + +systemChat format ["Debug-Caller: Disarm finished with code [%1]", _errorMsg]; \ No newline at end of file diff --git a/addons/disarming/functions/fnc_finishDisarmTarget.sqf b/addons/disarming/functions/fnc_finishDisarmTarget.sqf new file mode 100644 index 0000000000..b65e5f053c --- /dev/null +++ b/addons/disarming/functions/fnc_finishDisarmTarget.sqf @@ -0,0 +1,25 @@ +/* + * Author: PabstMirror + * TODO + * + * Arguments: + * 0: caller (player) + * 1: target + * 1: type of disarm + * + * Return Value: + * The return value + * + * Example: + * finishDisarmTarget + * + * Public: No + */ +#include "script_component.hpp" + + +PARAMS_3(_caller,_target,_errorMsg); + +systemChat format ["Debug-Target: Disarm finished with code [%1]", _errorMsg]; + +["DisarmFinished", [_caller], [_caller, _target, _errorMsg]] call EFUNC(common,targetEvent); diff --git a/addons/disarming/functions/fnc_startDisarmCaller.sqf b/addons/disarming/functions/fnc_startDisarmCaller.sqf new file mode 100644 index 0000000000..43fa586b22 --- /dev/null +++ b/addons/disarming/functions/fnc_startDisarmCaller.sqf @@ -0,0 +1,22 @@ +/* + * Author: PabstMirror + * Starts the disarming process from the caller + * + * Arguments: + * 0: caller (player) + * 1: target + * 2: type of disarm + * + * Return Value: + * None + * + * Example: + * TODO + * + * Public: No + */ +#include "script_component.hpp" + +PARAMS_3(_caller,_target,_type); + +["Disarm", [_target], [_caller,_target,_type]] call EFUNC(common,targetEvent); diff --git a/addons/disarming/functions/fnc_startDisarmTarget.sqf b/addons/disarming/functions/fnc_startDisarmTarget.sqf new file mode 100644 index 0000000000..9a7526856d --- /dev/null +++ b/addons/disarming/functions/fnc_startDisarmTarget.sqf @@ -0,0 +1,38 @@ +/* + * Author: PabstMirror + * Starts disarming the target from the target + * Generates the specific list of items that should be removed from a disarm type + * + * Arguments: + * 0: caller (player) + * 1: target + * 1: type of disarm + * + * Return Value: + * None + * + * Example: + * + * + * Public: No + */ +#include "script_component.hpp" + +PARAMS_3(_caller,_target,_type); + +_listOfItemsToRemove = []; +_doNotDropAmmo = false; + +switch (toLower _type) do { +case ("backpack"): { + _listOfItemsToRemove pushBack (backpack _target); +}; +case ("weapons"): { + _listOfItemsToRemove = _listOfItemsToRemove + (weapons _target); + _doNotDropAmmo = true; +}; + + +}; + +[_caller, _target, _listOfItemsToRemove, _doNotDropAmmo] call FUNC(disarmDropItems); diff --git a/addons/disarming/functions/script_component.hpp b/addons/disarming/functions/script_component.hpp new file mode 100644 index 0000000000..38e082ee0e --- /dev/null +++ b/addons/disarming/functions/script_component.hpp @@ -0,0 +1 @@ +#include "\z\ace\addons\disarming\script_component.hpp" \ No newline at end of file diff --git a/addons/disarming/script_component.hpp b/addons/disarming/script_component.hpp new file mode 100644 index 0000000000..78315f5071 --- /dev/null +++ b/addons/disarming/script_component.hpp @@ -0,0 +1,12 @@ +#define COMPONENT disarming +#include "\z\ace\addons\main\script_mod.hpp" + +#ifdef DEBUG_ENABLED_DISARMING + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_DISARMING + #define DEBUG_SETTINGS DEBUG_SETTINGS_DISARMING +#endif + +#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file diff --git a/addons/disarming/stringtable.xml b/addons/disarming/stringtable.xml new file mode 100644 index 0000000000..893221713e --- /dev/null +++ b/addons/disarming/stringtable.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file From a7004cf0e908f72323a1a654d6859fc75da7f037 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Wed, 11 Feb 2015 02:33:18 -0600 Subject: [PATCH 002/214] Disarm Types Examples --- addons/disarming/README.md | 7 ++----- addons/disarming/functions/fnc_canDisarm.sqf | 17 ++++++++++------- .../functions/fnc_startDisarmTarget.sqf | 16 ++++++++++------ 3 files changed, 22 insertions(+), 18 deletions(-) diff --git a/addons/disarming/README.md b/addons/disarming/README.md index 3938720f08..0423aa48bd 100644 --- a/addons/disarming/README.md +++ b/addons/disarming/README.md @@ -1,10 +1,7 @@ -ace_captives +ace_disarming ============ -Allows taking people captive/handcuffed - -####Items: -`ACE_CableTie` - adds ability to take someone captive +Adds ability to make units drop items/weapons/magazines. ## Maintainers diff --git a/addons/disarming/functions/fnc_canDisarm.sqf b/addons/disarming/functions/fnc_canDisarm.sqf index bb654b3dd8..c45b814e64 100644 --- a/addons/disarming/functions/fnc_canDisarm.sqf +++ b/addons/disarming/functions/fnc_canDisarm.sqf @@ -11,7 +11,7 @@ * The return value * * Example: - * TODO + * [player, cursorTarget, "backpack"] call ace_disarming_fnc_canDisarm * * Public: No */ @@ -20,13 +20,16 @@ PARAMS_2(_caller,_target); DEFAULT_PARAM(2,_type,""); -if (false) exitWith {false}; - -_returnValue = true; - -switch (_type) do { - +_returnValue = false; +if ((_target getVariable ["ACE_isUnconscious", false]) || {_target getVariable [QEGVAR(captives,isHandcuffed), false]} || {_target getVariable [QEGVAR(captives,isSurrendering), false]}) then { + switch (_type) do { + case (""): {_returnValue = true;}; + case ("uniform"): {_returnValue = ((uniform _target) != "");}; + case ("backpack"): {_returnValue = ((backpack _target) != "");}; + case ("weapons"): {_returnValue = ((count (weapons _target)) > 0);}; + default {systemChat "type unknown"; ERROR("type unknown");}; + }; }; _returnValue diff --git a/addons/disarming/functions/fnc_startDisarmTarget.sqf b/addons/disarming/functions/fnc_startDisarmTarget.sqf index 9a7526856d..dfc7c498d0 100644 --- a/addons/disarming/functions/fnc_startDisarmTarget.sqf +++ b/addons/disarming/functions/fnc_startDisarmTarget.sqf @@ -12,7 +12,7 @@ * None * * Example: - * + * * * Public: No */ @@ -25,12 +25,16 @@ _doNotDropAmmo = false; switch (toLower _type) do { case ("backpack"): { - _listOfItemsToRemove pushBack (backpack _target); -}; + _listOfItemsToRemove pushBack (backpack _target); + }; case ("weapons"): { - _listOfItemsToRemove = _listOfItemsToRemove + (weapons _target); - _doNotDropAmmo = true; -}; + _listOfItemsToRemove = _listOfItemsToRemove + (weapons _target); + _doNotDropAmmo = true; + }; + + case ("uniform"): { + _listOfItemsToRemove = [(uniform _target)]; + }; }; From 69835ec7fbcf6d4cfb0040ee293707be2e1edbe4 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Wed, 11 Feb 2015 14:37:18 -0600 Subject: [PATCH 003/214] Fix HMD bug and disarm types --- addons/disarming/CfgVehicles.hpp | 55 +++++++++++-------- addons/disarming/functions/fnc_canDisarm.sqf | 14 +++-- .../functions/fnc_disarmDropItems.sqf | 10 ++-- .../functions/fnc_startDisarmTarget.sqf | 44 +++++++++++---- addons/disarming/script_component.hpp | 4 +- 5 files changed, 85 insertions(+), 42 deletions(-) diff --git a/addons/disarming/CfgVehicles.hpp b/addons/disarming/CfgVehicles.hpp index e7fbb92aa1..539ba72730 100644 --- a/addons/disarming/CfgVehicles.hpp +++ b/addons/disarming/CfgVehicles.hpp @@ -14,39 +14,48 @@ class CfgVehicles { // hotkey = "M"; enableInside = 0; - class ACE_removeWeapons { - displayName = "Remove Weapons"; + class ACE_primaryweapononly { + displayName = "primaryweapononly"; distance = 3; - condition = QUOTE([ARR_3(_player, _target, 'weapons')] call FUNC(canDisarm)); - statement = QUOTE([ARR_3(_player, _target, 'weapons')] call FUNC(startDisarmCaller)); + condition = QUOTE([ARR_3(_player, _target, 'primaryweapononly')] call FUNC(canDisarm)); + statement = QUOTE([ARR_3(_player, _target, 'primaryweapononly')] call FUNC(startDisarmCaller)); exceptions[] = {}; showDisabled = 1; - priority = 2.4; + priority = 80085; // icon = QUOTE(PATHTOF(UI\handcuff_ca.paa)); // hotkey = "C"; }; - class ACE_removeBackpack { - displayName = "Remove Backpack"; - distance = 3; + class ACE_secondaryweapononly: ACE_primaryweapononly { + displayName = "secondaryweapononly"; + condition = QUOTE([ARR_3(_player, _target, 'secondaryweapononly')] call FUNC(canDisarm)); + statement = QUOTE([ARR_3(_player, _target, 'secondaryweapononly')] call FUNC(startDisarmCaller)); + priority = 80084; + }; + class ACE_handgunweapononly: ACE_primaryweapononly { + displayName = "handgunweapononly"; + condition = QUOTE([ARR_3(_player, _target, 'handgunweapononly')] call FUNC(canDisarm)); + statement = QUOTE([ARR_3(_player, _target, 'handgunweapononly')] call FUNC(startDisarmCaller)); + priority = 80083; + }; + class ACE_backpack: ACE_primaryweapononly { + displayName = "handgunweapononly"; condition = QUOTE([ARR_3(_player, _target, 'backpack')] call FUNC(canDisarm)); statement = QUOTE([ARR_3(_player, _target, 'backpack')] call FUNC(startDisarmCaller)); - exceptions[] = {}; - showDisabled = 1; - priority = 2.4; - // icon = QUOTE(PATHTOF(UI\handcuff_ca.paa)); - // hotkey = "C"; + priority = 80082; }; - class ACE_removeUniform { - displayName = "Remove Uniform"; - distance = 3; - condition = QUOTE([ARR_3(_player, _target, 'uniform')] call FUNC(canDisarm)); - statement = QUOTE([ARR_3(_player, _target, 'uniform')] call FUNC(startDisarmCaller)); - exceptions[] = {}; - showDisabled = 1; - priority = 2.4; - // icon = QUOTE(PATHTOF(UI\handcuff_ca.paa)); - // hotkey = "C"; + class ACE_alldangerous: ACE_primaryweapononly { + displayName = "alldangerous"; + condition = QUOTE([ARR_3(_player, _target, 'alldangerous')] call FUNC(canDisarm)); + statement = QUOTE([ARR_3(_player, _target, 'alldangerous')] call FUNC(startDisarmCaller)); + priority = 80081; }; + class ACE_strip: ACE_primaryweapononly { + displayName = "strip"; + condition = QUOTE([ARR_3(_player, _target, 'strip')] call FUNC(canDisarm)); + statement = QUOTE([ARR_3(_player, _target, 'strip')] call FUNC(startDisarmCaller)); + priority = 80080; + }; + }; }; }; diff --git a/addons/disarming/functions/fnc_canDisarm.sqf b/addons/disarming/functions/fnc_canDisarm.sqf index c45b814e64..c0fecab72c 100644 --- a/addons/disarming/functions/fnc_canDisarm.sqf +++ b/addons/disarming/functions/fnc_canDisarm.sqf @@ -22,12 +22,18 @@ DEFAULT_PARAM(2,_type,""); _returnValue = false; -if ((_target getVariable ["ACE_isUnconscious", false]) || {_target getVariable [QEGVAR(captives,isHandcuffed), false]} || {_target getVariable [QEGVAR(captives,isSurrendering), false]}) then { - switch (_type) do { +if ((_target getVariable ["ACE_isUnconscious", false]) || + {_target getVariable [QEGVAR(captives,isHandcuffed), false]} || + {_target getVariable [QEGVAR(captives,isSurrendering), false]}) then { + + switch (toLower _type) do { case (""): {_returnValue = true;}; - case ("uniform"): {_returnValue = ((uniform _target) != "");}; + case ("primaryweapononly"): {_returnValue = ((primaryWeapon _target) != "");}; + case ("secondaryweapononly"): {_returnValue = ((secondaryWeapon _target) != "");}; + case ("handgunweapononly"): {_returnValue = ((handgunWeapon _target) != "");}; case ("backpack"): {_returnValue = ((backpack _target) != "");}; - case ("weapons"): {_returnValue = ((count (weapons _target)) > 0);}; + case ("alldangerous"): {_returnValue = ((count (weapons _target)) > 0) || {(count (magazines _target)) > 0} || {({_x in DANGEROUS_ITEMS} count ((items _target) + (assignedItems _target))) > 0};}; + case ("strip"): {_returnValue = true;}; default {systemChat "type unknown"; ERROR("type unknown");}; }; }; diff --git a/addons/disarming/functions/fnc_disarmDropItems.sqf b/addons/disarming/functions/fnc_disarmDropItems.sqf index c4e093ec05..acbe55af02 100644 --- a/addons/disarming/functions/fnc_disarmDropItems.sqf +++ b/addons/disarming/functions/fnc_disarmDropItems.sqf @@ -58,14 +58,15 @@ if ( ({(_x select 0) in _listOfItemsToRemove} count _targetMagazinesEnd) != 0) e [_caller, _target, "Didn't Remove Magazines"] call FUNC(finishDisarmTarget); }; //Verify holder has mags unit had (lazy count for now) -if (((count _targetMagazinesEnd) - (count _targetMagazinesStart)) != ((count _holderMagazinesEnd) - (count _holderMagazinesStart))) exitWith { +if (((count _targetMagazinesStart) - (count _targetMagazinesEnd)) != ((count _holderMagazinesEnd) - (count _holderMagazinesStart))) exitWith { + ERR = [_targetMagazinesEnd, _targetMagazinesStart, _holderMagazinesEnd, _holderMagazinesStart]; [_caller, _target, "Crate Magazines"] call FUNC(finishDisarmTarget); }; //Remove Items, Assigned Items and NVG _holderItemsStart = getitemCargo _holder; -_targetItemsStart = ((assignedItems _target) + (items _target) + [hmd _target] + [headgear _target]); +_targetItemsStart = ((assignedItems _target) + (items _target) + [headgear _target]); _addToCrateClassnames = []; _addToCrateCount = []; @@ -92,10 +93,11 @@ _addToCrateCount = []; } forEach _addToCrateClassnames; _holderItemsEnd = getitemCargo _holder; -_targetItemsEnd = ((assignedItems _target) + (items _target) + [hmd _target] + [headgear _target]); +_targetItemsEnd = ((assignedItems _target) + (items _target) + [headgear _target]); //Verify Items Added (lazy count) -if (((count _targetItemsEnd) - (count _targetItemsStart)) != ([_addToCrateCount] call _fncSumArray)) exitWith { +if (((count _targetItemsStart) - (count _targetItemsEnd)) != ([_addToCrateCount] call _fncSumArray)) exitWith { + ERR = [_targetItemsStart, _targetItemsEnd, _addToCrateClassnames, _addToCrateCount]; [_caller, _target, "Items Not Removed From Player"] call FUNC(finishDisarmTarget); }; if ((([_holderItemsEnd select 1] call _fncSumArray) - ([_holderItemsStart select 1] call _fncSumArray)) != ([_addToCrateCount] call _fncSumArray)) exitWith { diff --git a/addons/disarming/functions/fnc_startDisarmTarget.sqf b/addons/disarming/functions/fnc_startDisarmTarget.sqf index dfc7c498d0..0edb65e7fa 100644 --- a/addons/disarming/functions/fnc_startDisarmTarget.sqf +++ b/addons/disarming/functions/fnc_startDisarmTarget.sqf @@ -24,19 +24,43 @@ _listOfItemsToRemove = []; _doNotDropAmmo = false; switch (toLower _type) do { -case ("backpack"): { - _listOfItemsToRemove pushBack (backpack _target); - }; -case ("weapons"): { - _listOfItemsToRemove = _listOfItemsToRemove + (weapons _target); +case ("primaryweapononly"): { + _listOfItemsToRemove = [(primaryWeapon _target)]; _doNotDropAmmo = true; }; - - case ("uniform"): { - _listOfItemsToRemove = [(uniform _target)]; +case ("secondaryweapononly"): { + _listOfItemsToRemove = [(secondaryWeapon _target)]; + _doNotDropAmmo = true; + }; +case ("handgunweapononly"): { + _listOfItemsToRemove = [(handgunWeapon _target)]; + _doNotDropAmmo = true; + }; +case ("backpack"): { + _listOfItemsToRemove = [(backpack _target)]; + }; +case ("alldangerous"): { + _listOfItemsToRemove = weapons _target; + { + if (!(_x in _listOfItemsToRemove)) then { + _listOfItemsToRemove pushBack _x; + }; + } forEach (magazines _target); + { + if ((!(_x in _listOfItemsToRemove)) && {_x in DANGEROUS_ITEMS} && {_x != ""}) then { + _listOfItemsToRemove pushBack _x; + }; + } forEach ((items _target) + (assignedItems _target)); + }; +case ("strip"): { + // _listOfItemsToRemove = [_target] call EFUNC(common,getAllGear); + _listOfItemsToRemove = []; + { + if ((!(_x in _listOfItemsToRemove)) && {_x != ""}) then { + _listOfItemsToRemove pushBack _x; + }; + } forEach ((weapons _target) + (magazines _target) + (items _target) + (assignedItems _target) + [(backpack _target), (vest _target), (uniform _target)]); }; - - }; [_caller, _target, _listOfItemsToRemove, _doNotDropAmmo] call FUNC(disarmDropItems); diff --git a/addons/disarming/script_component.hpp b/addons/disarming/script_component.hpp index 78315f5071..36f251950d 100644 --- a/addons/disarming/script_component.hpp +++ b/addons/disarming/script_component.hpp @@ -9,4 +9,6 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_DISARMING #endif -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" + +#define DANGEROUS_ITEMS ["ACE_Clacker", "ACE_M26_Clacker", "ACE_DeadManSwitch"] From 744f37d18a5355a6b618d721fed46835076702ac Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sun, 22 Feb 2015 18:44:33 -0600 Subject: [PATCH 004/214] DragandDrop Frisking WIP --- addons/disarming/CfgVehicles.hpp | 7 ++ addons/disarming/XEH_preInit.sqf | 3 + addons/disarming/config.cpp | 1 + addons/disarming/functions/fnc_canFrisk2.sqf | 8 +++ addons/disarming/functions/fnc_doFrisk2.sqf | 68 +++++++++++++++++++ addons/disarming/functions/fnc_getAllGear.sqf | 33 +++++++++ addons/disarming/gui_disarm.hpp | 55 +++++++++++++++ 7 files changed, 175 insertions(+) create mode 100644 addons/disarming/functions/fnc_canFrisk2.sqf create mode 100644 addons/disarming/functions/fnc_doFrisk2.sqf create mode 100644 addons/disarming/functions/fnc_getAllGear.sqf create mode 100644 addons/disarming/gui_disarm.hpp diff --git a/addons/disarming/CfgVehicles.hpp b/addons/disarming/CfgVehicles.hpp index 539ba72730..32fd444aa3 100644 --- a/addons/disarming/CfgVehicles.hpp +++ b/addons/disarming/CfgVehicles.hpp @@ -56,6 +56,13 @@ class CfgVehicles { priority = 80080; }; + class ACE_openFrisk2: ACE_primaryweapononly { + displayName = "Frisk2"; + condition = QUOTE([ARR_2(_player, _target)] call FUNC(canFrisk2)); + statement = QUOTE([ARR_2(_player, _target)] call FUNC(doFrisk2)); + priority = 80078; + }; + }; }; }; diff --git a/addons/disarming/XEH_preInit.sqf b/addons/disarming/XEH_preInit.sqf index 7078bdb74a..1ed153f518 100644 --- a/addons/disarming/XEH_preInit.sqf +++ b/addons/disarming/XEH_preInit.sqf @@ -3,9 +3,12 @@ ADDON = false; PREP(canDisarm); +PREP(canFrisk2); PREP(disarmDropItems); +PREP(doFrisk2); PREP(finishDisarmCaller); PREP(finishDisarmTarget); +PREP(getAllGear); PREP(startDisarmCaller); PREP(startDisarmTarget); diff --git a/addons/disarming/config.cpp b/addons/disarming/config.cpp index b54e52e57e..00f8204b09 100644 --- a/addons/disarming/config.cpp +++ b/addons/disarming/config.cpp @@ -16,3 +16,4 @@ class CfgPatches { #include "CfgVehicles.hpp" #include "CfgWeapons.hpp" +#include "gui_disarm.hpp" diff --git a/addons/disarming/functions/fnc_canFrisk2.sqf b/addons/disarming/functions/fnc_canFrisk2.sqf new file mode 100644 index 0000000000..12bd63f655 --- /dev/null +++ b/addons/disarming/functions/fnc_canFrisk2.sqf @@ -0,0 +1,8 @@ + +#include "script_component.hpp" + +PARAMS_2(_caller,_target); + +(_target getVariable ["ACE_isUnconscious", false]) || +{_target getVariable [QEGVAR(captives,isHandcuffed), false]} || +{_target getVariable [QEGVAR(captives,isSurrendering), false]} diff --git a/addons/disarming/functions/fnc_doFrisk2.sqf b/addons/disarming/functions/fnc_doFrisk2.sqf new file mode 100644 index 0000000000..250681a84c --- /dev/null +++ b/addons/disarming/functions/fnc_doFrisk2.sqf @@ -0,0 +1,68 @@ + +#include "script_component.hpp" + +PARAMS_2(_caller,_target); + + + + + +closeDialog 0; +createDialog "ace_disarming_friskInventory"; + +disableSerialization; + + +_display = uiNamespace getVariable ['PABST_friskInventory', displayNull]; + +_pc = _display displayCtrl 633; +_pc ctrlAddEventHandler ["LBDrop", { + x2 = _this; + systemChat format ["LBDrop pc %1", _this]; + + // PARAMS_5(_ctrl,_xPos,_yPos,_idc,_itemInfo); + // EXPLODE_PVT_3((_itemInfo select 0),_displayText,_value,_data); + + // _ctrl lbAdd _data; + (x2 select 0) lbAdd (((x2 select 4) select 0) select 2); +}]; + + +_gc = _display displayCtrl 632; +// _gc ctrlAddEventHandler ["LBDrag", {x1 = _this;systemChat format ["LBDrag %1", _this]}]; +// _gc ctrlAddEventHandler ["LBDragging", {systemChat format ["LBDragging %1", _this]}]; +// _gc ctrlAddEventHandler ["LBDrop", {systemChat format ["LBDrop gc %1", _this]}]; + +// _gc ctrlSetActiveColor [0,0,0,1]; + +_uniqueItems = [player] call ace_disarming_fnc_getAllGear; + +{ + _displayName = ""; + _picture = ""; + _count = (_uniqueItems select 1) select _forEachIndex; + + switch (true) do { + case (isClass (configFile >> "CfgWeapons" >> _x)): { + _displayName = getText (configFile >> "CfgWeapons" >> _x >> "displayName"); + _picture = getText (configFile >> "CfgWeapons" >> _x >> "picture"); + }; + case (isClass (configFile >> "CfgMagazines" >> _x)): { + _displayName = getText (configFile >> "CfgMagazines" >> _x >> "displayName"); + _picture = getText (configFile >> "CfgMagazines" >> _x >> "picture"); + }; + case (isClass (configFile >> "CfgVehicles" >> _x)): { + _displayName = getText (configFile >> "CfgVehicles" >> _x >> "displayName"); + _picture = getText (configFile >> "CfgVehicles" >> _x >> "picture"); + }; + case (isClass (configFile >> "CfgGlasses" >> _x)): { + _displayName = getText (configFile >> "CfgGoggles" >> _x >> "displayName"); + _picture = getText (configFile >> "CfgGoggles" >> _x >> "picture"); + }; + }; + _gc lbAdd format ["1x %2", _count, _displayName]; + _gc lbSetData [_forEachIndex, _x]; + _gc lbSetPicture [_forEachIndex, _picture]; +} forEach (_uniqueItems select 0); + + diff --git a/addons/disarming/functions/fnc_getAllGear.sqf b/addons/disarming/functions/fnc_getAllGear.sqf new file mode 100644 index 0000000000..a47df8d4c6 --- /dev/null +++ b/addons/disarming/functions/fnc_getAllGear.sqf @@ -0,0 +1,33 @@ +#include "script_component.hpp" + +PARAMS_1(_target); + +_allItems = ((weapons _target) + (magazines _target) + (items _target) + (assignedItems _target)); + +if ((backpack _target) != "") then { + _allItems pushBack (backpack _target); +}; +if ((vest _target) != "") then { + _allItems pushBack (vest _target); +}; +if ((uniform _target) != "") then { + _allItems pushBack (uniform _target); +}; +if ((headgear _target) != "") then { + _allItems pushBack (headgear _target); +}; + +_uniqueClassnames = []; +_classnamesCount = []; +//Filter unique and count +{ + _index = _uniqueClassnames find _x; + if (_index != -1) then { + _classnamesCount set [_index, ((_classnamesCount select _index) + 1)]; + } else { + _uniqueClassnames pushBack _x; + _classnamesCount pushBack 1; + }; +} forEach _allItems; + +[_uniqueClassnames, _classnamesCount] diff --git a/addons/disarming/gui_disarm.hpp b/addons/disarming/gui_disarm.hpp new file mode 100644 index 0000000000..39518838e2 --- /dev/null +++ b/addons/disarming/gui_disarm.hpp @@ -0,0 +1,55 @@ +class RscText; +class RscListBox; + +class GVAR(friskInventory) { + idd = -1; + movingEnable = 0; + enableSimulation = 1; + enableDisplay = 1; + onLoad = "uiNamespace setVariable ['PABST_friskInventory', _this select 0];"; + duration = 2147483647; + fadein = 0; + fadeout = 0; + + class controlsBackground {}; + + class controls { + + class CA_ContainerBackground: RscText { + idc = -1; + x = "7.5 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; + y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; + w = "12 * (safeZoneH / 40)"; + h = "22.5 * ((safeZoneH / 1.2) / 25)"; + colorBackground[] = {0.05,0.05,0.05,0.7}; + }; + + class CA_ContainerBackground2: CA_ContainerBackground { + idc = -1; + x = "20.5 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; + }; + + + class GroundContainer: RscListBox { + idc = 632; + sizeEx = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + sizeEx2 = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + rowHeight = "1.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + canDrag = 1; + colorText[] = {1,1,1,1}; + colorBackground[] = {0,0,0,0}; + itemBackground[] = {1,1,1,0.1}; + itemSpacing = 0.001; + x = "8 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; + y = "1.5 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; + w = "11 * (safeZoneH / 40)"; + h = "21.5 * ((safeZoneH / 1.2) / 25)"; + }; + class TargetContainer: GroundContainer { + idc = 633; + canDrag = 0; + x = "21 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; + }; + }; +}; + From d55aed08139b8aff4eab48412f5c0ca34cd02ca7 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Fri, 27 Feb 2015 15:23:46 -0600 Subject: [PATCH 005/214] Inv Screen Rough WIP --- addons/disarming/CfgVehicles.hpp | 57 +------------ addons/disarming/XEH_postInit.sqf | 2 +- addons/disarming/functions/fnc_canDisarm.sqf | 36 +++----- addons/disarming/functions/fnc_canFrisk2.sqf | 8 -- .../functions/fnc_disarmDropItems.sqf | 82 ++++++++++++++----- addons/disarming/functions/fnc_doFrisk2.sqf | 68 --------------- ...rmCaller.sqf => fnc_eventCallerFinish.sqf} | 8 +- ...rmTarget.sqf => fnc_eventTargetFinish.sqf} | 11 ++- .../functions/fnc_eventTargetStart.sqf | 34 ++++++++ .../functions/fnc_finishDisarmCaller.sqf | 23 ------ .../functions/fnc_getAllGearContainer.sqf | 11 +++ ..._getAllGear.sqf => fnc_getAllGearUnit.sqf} | 4 + .../functions/fnc_openDisarmDialog.sqf | 77 +++++++++++++++++ .../functions/fnc_showItemsInListbox.sqf | 50 +++++++++++ .../functions/fnc_startDisarmTarget.sqf | 66 --------------- 15 files changed, 261 insertions(+), 276 deletions(-) delete mode 100644 addons/disarming/functions/fnc_canFrisk2.sqf delete mode 100644 addons/disarming/functions/fnc_doFrisk2.sqf rename addons/disarming/functions/{fnc_startDisarmCaller.sqf => fnc_eventCallerFinish.sqf} (54%) rename addons/disarming/functions/{fnc_finishDisarmTarget.sqf => fnc_eventTargetFinish.sqf} (60%) create mode 100644 addons/disarming/functions/fnc_eventTargetStart.sqf delete mode 100644 addons/disarming/functions/fnc_finishDisarmCaller.sqf create mode 100644 addons/disarming/functions/fnc_getAllGearContainer.sqf rename addons/disarming/functions/{fnc_getAllGear.sqf => fnc_getAllGearUnit.sqf} (87%) create mode 100644 addons/disarming/functions/fnc_openDisarmDialog.sqf create mode 100644 addons/disarming/functions/fnc_showItemsInListbox.sqf delete mode 100644 addons/disarming/functions/fnc_startDisarmTarget.sqf diff --git a/addons/disarming/CfgVehicles.hpp b/addons/disarming/CfgVehicles.hpp index 32fd444aa3..afecb20e9d 100644 --- a/addons/disarming/CfgVehicles.hpp +++ b/addons/disarming/CfgVehicles.hpp @@ -3,66 +3,13 @@ class CfgVehicles { class CAManBase: Man { class ACE_Actions { class ACE_Disarm { - displayName = "Disarm >>"; + displayName = "Disarm"; distance = 3; - condition = QUOTE([ARR_2(_player, _target)] call FUNC(canDisarm)); + condition = QUOTE([_target] call FUNC(canDisarm)); statement = ""; showDisabled = 0; priority = 3.2; - // icon = PATHTOF(UI\team\team_management_ca.paa); - subMenu[] = {"ACE_Disarm", 0}; - // hotkey = "M"; enableInside = 0; - - class ACE_primaryweapononly { - displayName = "primaryweapononly"; - distance = 3; - condition = QUOTE([ARR_3(_player, _target, 'primaryweapononly')] call FUNC(canDisarm)); - statement = QUOTE([ARR_3(_player, _target, 'primaryweapononly')] call FUNC(startDisarmCaller)); - exceptions[] = {}; - showDisabled = 1; - priority = 80085; - // icon = QUOTE(PATHTOF(UI\handcuff_ca.paa)); - // hotkey = "C"; - }; - class ACE_secondaryweapononly: ACE_primaryweapononly { - displayName = "secondaryweapononly"; - condition = QUOTE([ARR_3(_player, _target, 'secondaryweapononly')] call FUNC(canDisarm)); - statement = QUOTE([ARR_3(_player, _target, 'secondaryweapononly')] call FUNC(startDisarmCaller)); - priority = 80084; - }; - class ACE_handgunweapononly: ACE_primaryweapononly { - displayName = "handgunweapononly"; - condition = QUOTE([ARR_3(_player, _target, 'handgunweapononly')] call FUNC(canDisarm)); - statement = QUOTE([ARR_3(_player, _target, 'handgunweapononly')] call FUNC(startDisarmCaller)); - priority = 80083; - }; - class ACE_backpack: ACE_primaryweapononly { - displayName = "handgunweapononly"; - condition = QUOTE([ARR_3(_player, _target, 'backpack')] call FUNC(canDisarm)); - statement = QUOTE([ARR_3(_player, _target, 'backpack')] call FUNC(startDisarmCaller)); - priority = 80082; - }; - class ACE_alldangerous: ACE_primaryweapononly { - displayName = "alldangerous"; - condition = QUOTE([ARR_3(_player, _target, 'alldangerous')] call FUNC(canDisarm)); - statement = QUOTE([ARR_3(_player, _target, 'alldangerous')] call FUNC(startDisarmCaller)); - priority = 80081; - }; - class ACE_strip: ACE_primaryweapononly { - displayName = "strip"; - condition = QUOTE([ARR_3(_player, _target, 'strip')] call FUNC(canDisarm)); - statement = QUOTE([ARR_3(_player, _target, 'strip')] call FUNC(startDisarmCaller)); - priority = 80080; - }; - - class ACE_openFrisk2: ACE_primaryweapononly { - displayName = "Frisk2"; - condition = QUOTE([ARR_2(_player, _target)] call FUNC(canFrisk2)); - statement = QUOTE([ARR_2(_player, _target)] call FUNC(doFrisk2)); - priority = 80078; - }; - }; }; }; diff --git a/addons/disarming/XEH_postInit.sqf b/addons/disarming/XEH_postInit.sqf index a2397235c7..8556c776e7 100644 --- a/addons/disarming/XEH_postInit.sqf +++ b/addons/disarming/XEH_postInit.sqf @@ -1,4 +1,4 @@ #include "script_component.hpp" ["Disarm", {_this call FUNC(startDisarmTarget)}] call EFUNC(common,addEventHandler); -["DisarmFinished", {_this call FUNC(finishDisarmCaller)}] call EFUNC(common,addEventHandler); +["DisarmFinished", {_this call FUNC(eventCallerFinish)}] call EFUNC(common,addEventHandler); diff --git a/addons/disarming/functions/fnc_canDisarm.sqf b/addons/disarming/functions/fnc_canDisarm.sqf index c0fecab72c..207d5d5078 100644 --- a/addons/disarming/functions/fnc_canDisarm.sqf +++ b/addons/disarming/functions/fnc_canDisarm.sqf @@ -1,41 +1,25 @@ /* * Author: PabstMirror - * Checks the conditions for being able to disarm + * Checks the conditions for being able to disarm a unit * * Arguments: - * 0: caller (player) - * 1: target - * 2: type of disarm + * 0: target * * Return Value: * The return value * * Example: - * [player, cursorTarget, "backpack"] call ace_disarming_fnc_canDisarm + * [cursorTarget] call ace_disarming_fnc_canDisarm * * Public: No */ #include "script_component.hpp" -PARAMS_2(_caller,_target); -DEFAULT_PARAM(2,_type,""); +PARAMS_2(_target); -_returnValue = false; - -if ((_target getVariable ["ACE_isUnconscious", false]) || - {_target getVariable [QEGVAR(captives,isHandcuffed), false]} || - {_target getVariable [QEGVAR(captives,isSurrendering), false]}) then { - - switch (toLower _type) do { - case (""): {_returnValue = true;}; - case ("primaryweapononly"): {_returnValue = ((primaryWeapon _target) != "");}; - case ("secondaryweapononly"): {_returnValue = ((secondaryWeapon _target) != "");}; - case ("handgunweapononly"): {_returnValue = ((handgunWeapon _target) != "");}; - case ("backpack"): {_returnValue = ((backpack _target) != "");}; - case ("alldangerous"): {_returnValue = ((count (weapons _target)) > 0) || {(count (magazines _target)) > 0} || {({_x in DANGEROUS_ITEMS} count ((items _target) + (assignedItems _target))) > 0};}; - case ("strip"): {_returnValue = true;}; - default {systemChat "type unknown"; ERROR("type unknown");}; - }; -}; - -_returnValue +(alive _target) && +{(abs (speed _target)) < 0.1} && +{(_target getVariable ["ACE_isUnconscious", false]) || + {_target getVariable [QEGVAR(captives,isHandcuffed), false]} || + {_target getVariable [QEGVAR(captives,isSurrendering), false]}} + \ No newline at end of file diff --git a/addons/disarming/functions/fnc_canFrisk2.sqf b/addons/disarming/functions/fnc_canFrisk2.sqf deleted file mode 100644 index 12bd63f655..0000000000 --- a/addons/disarming/functions/fnc_canFrisk2.sqf +++ /dev/null @@ -1,8 +0,0 @@ - -#include "script_component.hpp" - -PARAMS_2(_caller,_target); - -(_target getVariable ["ACE_isUnconscious", false]) || -{_target getVariable [QEGVAR(captives,isHandcuffed), false]} || -{_target getVariable [QEGVAR(captives,isSurrendering), false]} diff --git a/addons/disarming/functions/fnc_disarmDropItems.sqf b/addons/disarming/functions/fnc_disarmDropItems.sqf index acbe55af02..b818c2360c 100644 --- a/addons/disarming/functions/fnc_disarmDropItems.sqf +++ b/addons/disarming/functions/fnc_disarmDropItems.sqf @@ -1,3 +1,21 @@ +/* + * Author: PabstMirror + * + * + * Arguments: + * 0: caller (player) + * 1: target + * 2: classnamess + * 3: Do Not Drop Ammo + * + * Return Value: + * Nothing + * + * Example: + * [player, cursorTarget, ["ace_bandage"]] call ace_disarming_fnc_disarmDropItems + * + * Public: No + */ #include "script_component.hpp" #define TIME_MAX_WAIT 5 @@ -13,17 +31,23 @@ _fncSumArray = { _return }; -//Sanity Check +//Sanity Checks +if (!([_target] call FUNC(canDisarm))) exitWith { + [_caller, _target, "Debug: Cannot disarm target"] call FUNC(eventTargetFinish); +}; if (_doNotDropAmmo && {({_x in _listOfItemsToRemove} count (magazines _target)) > 0}) exitWith { - [_caller, _target, "magazines and _doNotDropAmmo error"] call FUNC(finishDisarmTarget); + [_caller, _target, "Debug: Trying to drop magazine with _doNotDropAmmo flag"] call FUNC(eventTargetFinish); }; _holder = objNull; -{ - if ((_x getVariable [QGVAR(disarmUnit), objNull]) == _target) exitWith { - _holder = _x; - }; -} forEach ((getpos _target) nearObjects ["WeaponHolderSimulated", 3]); +if (!_doNotDropAmmo) then { + //Try to use the same container, if one exists + { + if ((_x getVariable [QGVAR(disarmUnit), objNull]) == _target) exitWith { + _holder = _x; + }; + } forEach ((getpos _target) nearObjects ["WeaponHolderSimulated", 3]); +}; if (isNull _holder) then { _dropPos = _target modelToWorld [-0.75, 0.75, 0]; @@ -34,8 +58,16 @@ if (isNull _holder) then { //Verify holder created if (isNull _holder) exitWith { - [_caller, _target, "Create Holder"] call FUNC(finishDisarmTarget); + [_caller, _target, "Debug: Null Holder"] call FUNC(eventTargetFinish); }; +//Make sure only one drop operation at a time... +if (_holder getVariable [QGVAR(holderInUse), false]) exitWith { + systemChat format ["Debug: %1 - Ground Container In Use, waiting until free", time]; + [{ + _this call FUNC(disarmDropItems); + }, 0.05, 0.05, _this] call EFUNC(common,waitAndExecute); +}; +_holder setVariable [QGVAR(holderInUse), true]; //Remove Magazines @@ -55,12 +87,13 @@ _holderMagazinesEnd = magazinesAmmoCargo _holder; //Verify Mags dropped from unit: if ( ({(_x select 0) in _listOfItemsToRemove} count _targetMagazinesEnd) != 0) exitWith { - [_caller, _target, "Didn't Remove Magazines"] call FUNC(finishDisarmTarget); + _holder setVariable [QGVAR(holderInUse), false]; + [_caller, _target, "Debug: Didn't Remove Magazines"] call FUNC(eventTargetFinish); }; //Verify holder has mags unit had (lazy count for now) if (((count _targetMagazinesStart) - (count _targetMagazinesEnd)) != ((count _holderMagazinesEnd) - (count _holderMagazinesStart))) exitWith { - ERR = [_targetMagazinesEnd, _targetMagazinesStart, _holderMagazinesEnd, _holderMagazinesStart]; - [_caller, _target, "Crate Magazines"] call FUNC(finishDisarmTarget); + _holder setVariable [QGVAR(holderInUse), false]; + [_caller, _target, "Debug: Crate Magazines not in holder"] call FUNC(eventTargetFinish); }; @@ -97,11 +130,14 @@ _targetItemsEnd = ((assignedItems _target) + (items _target) + [headgear _target //Verify Items Added (lazy count) if (((count _targetItemsStart) - (count _targetItemsEnd)) != ([_addToCrateCount] call _fncSumArray)) exitWith { - ERR = [_targetItemsStart, _targetItemsEnd, _addToCrateClassnames, _addToCrateCount]; - [_caller, _target, "Items Not Removed From Player"] call FUNC(finishDisarmTarget); + + _holder setVariable [QGVAR(holderInUse), false]; + [_caller, _target, "Debug: Items Not Removed From Player"] call FUNC(eventTargetFinish); }; if ((([_holderItemsEnd select 1] call _fncSumArray) - ([_holderItemsStart select 1] call _fncSumArray)) != ([_addToCrateCount] call _fncSumArray)) exitWith { - [_caller, _target, "Items Not Added to Holder"] call FUNC(finishDisarmTarget); + + _holder setVariable [QGVAR(holderInUse), false]; + [_caller, _target, "Debug: Items Not Added to Holder"] call FUNC(eventTargetFinish); }; @@ -109,7 +145,7 @@ if ((([_holderItemsEnd select 1] call _fncSumArray) - ([_holderItemsStart select //So add a dummy item and just remove at the end _holderIsEmpty = (([_holderItemsEnd select 1] call _fncSumArray) + (count _holderMagazinesEnd)) == 0; if (_holderIsEmpty) then { - systemChat "Empty: making dummy"; + systemChat "Debug: making dummy"; _holder addItemCargoGlobal [DUMMY_ITEM, 1]; }; @@ -178,7 +214,9 @@ systemChat format ["PFEh start %1", time]; //If we added a dummy item, remove it now if (_holderIsEmpty && {!((getItemCargo _holder) isEqualTo [[DUMMY_ITEM],[1]])}) exitWith { - [_caller, _target, "Holder should only have dummy item"] call FUNC(finishDisarmTarget); + + _holder setVariable [QGVAR(holderInUse), false]; + [_caller, _target, "Debug: Holder should only have dummy item"] call FUNC(eventTargetFinish); }; if (_holderIsEmpty) then { systemChat "Debug: Deleting Dummy"; @@ -187,25 +225,29 @@ systemChat format ["PFEh start %1", time]; //Verify we didn't timeout waiting on drop action if (time >= _maxWaitTime) exitWith { - [_caller, _target, "Drop Actions Timeout"] call FUNC(finishDisarmTarget); + _holder setVariable [QGVAR(holderInUse), false]; + [_caller, _target, "Debug: Drop Actions Timeout"] call FUNC(eventTargetFinish); }; if (_needToRemoveVest && {!((vestItems _target) isEqualTo [])}) exitWith { - [_caller, _target, "Vest Not Empty"] call FUNC(finishDisarmTarget); + _holder setVariable [QGVAR(holderInUse), false]; + [_caller, _target, "Debug: Vest Not Empty"] call FUNC(eventTargetFinish); }; if (_needToRemoveVest) then { removeVest _target; _holder addItemCargoGlobal [(vest _target), 1]; }; if (_needToRemoveUniform && {!((uniformItems _target) isEqualTo [])}) exitWith { - [_caller, _target, "Uniform Not Empty"] call FUNC(finishDisarmTarget); + _holder setVariable [QGVAR(holderInUse), false]; + [_caller, _target, "Debug: Uniform Not Empty"] call FUNC(eventTargetFinish); }; if (_needToRemoveUniform) then { removeUniform _target; _holder addItemCargoGlobal [(uniform _target), 1]; }; - [_caller, _target, "Victory"] call FUNC(finishDisarmTarget); + _holder setVariable [QGVAR(holderInUse), false]; + [_caller, _target, "Debug: Victory!!!"] call FUNC(eventTargetFinish); }; }, 0.0, [_caller,_target, _listOfItemsToRemove, _holder, _holderIsEmpty, (time + TIME_MAX_WAIT), _doNotDropAmmo, _targetMagazinesEnd]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/disarming/functions/fnc_doFrisk2.sqf b/addons/disarming/functions/fnc_doFrisk2.sqf deleted file mode 100644 index 250681a84c..0000000000 --- a/addons/disarming/functions/fnc_doFrisk2.sqf +++ /dev/null @@ -1,68 +0,0 @@ - -#include "script_component.hpp" - -PARAMS_2(_caller,_target); - - - - - -closeDialog 0; -createDialog "ace_disarming_friskInventory"; - -disableSerialization; - - -_display = uiNamespace getVariable ['PABST_friskInventory', displayNull]; - -_pc = _display displayCtrl 633; -_pc ctrlAddEventHandler ["LBDrop", { - x2 = _this; - systemChat format ["LBDrop pc %1", _this]; - - // PARAMS_5(_ctrl,_xPos,_yPos,_idc,_itemInfo); - // EXPLODE_PVT_3((_itemInfo select 0),_displayText,_value,_data); - - // _ctrl lbAdd _data; - (x2 select 0) lbAdd (((x2 select 4) select 0) select 2); -}]; - - -_gc = _display displayCtrl 632; -// _gc ctrlAddEventHandler ["LBDrag", {x1 = _this;systemChat format ["LBDrag %1", _this]}]; -// _gc ctrlAddEventHandler ["LBDragging", {systemChat format ["LBDragging %1", _this]}]; -// _gc ctrlAddEventHandler ["LBDrop", {systemChat format ["LBDrop gc %1", _this]}]; - -// _gc ctrlSetActiveColor [0,0,0,1]; - -_uniqueItems = [player] call ace_disarming_fnc_getAllGear; - -{ - _displayName = ""; - _picture = ""; - _count = (_uniqueItems select 1) select _forEachIndex; - - switch (true) do { - case (isClass (configFile >> "CfgWeapons" >> _x)): { - _displayName = getText (configFile >> "CfgWeapons" >> _x >> "displayName"); - _picture = getText (configFile >> "CfgWeapons" >> _x >> "picture"); - }; - case (isClass (configFile >> "CfgMagazines" >> _x)): { - _displayName = getText (configFile >> "CfgMagazines" >> _x >> "displayName"); - _picture = getText (configFile >> "CfgMagazines" >> _x >> "picture"); - }; - case (isClass (configFile >> "CfgVehicles" >> _x)): { - _displayName = getText (configFile >> "CfgVehicles" >> _x >> "displayName"); - _picture = getText (configFile >> "CfgVehicles" >> _x >> "picture"); - }; - case (isClass (configFile >> "CfgGlasses" >> _x)): { - _displayName = getText (configFile >> "CfgGoggles" >> _x >> "displayName"); - _picture = getText (configFile >> "CfgGoggles" >> _x >> "picture"); - }; - }; - _gc lbAdd format ["1x %2", _count, _displayName]; - _gc lbSetData [_forEachIndex, _x]; - _gc lbSetPicture [_forEachIndex, _picture]; -} forEach (_uniqueItems select 0); - - diff --git a/addons/disarming/functions/fnc_startDisarmCaller.sqf b/addons/disarming/functions/fnc_eventCallerFinish.sqf similarity index 54% rename from addons/disarming/functions/fnc_startDisarmCaller.sqf rename to addons/disarming/functions/fnc_eventCallerFinish.sqf index 43fa586b22..d3a14a69ec 100644 --- a/addons/disarming/functions/fnc_startDisarmCaller.sqf +++ b/addons/disarming/functions/fnc_eventCallerFinish.sqf @@ -5,7 +5,7 @@ * Arguments: * 0: caller (player) * 1: target - * 2: type of disarm + * 2: error message * * Return Value: * None @@ -17,6 +17,8 @@ */ #include "script_component.hpp" -PARAMS_3(_caller,_target,_type); +PARAMS_3(_caller,_target,_errorMsg); -["Disarm", [_target], [_caller,_target,_type]] call EFUNC(common,targetEvent); +if (_caller != ACE_player) exitWith {}; + +systemChat format ["Debug-Caller: Disarm finished from [%1] with code [%2]", _target, _errorMsg]; diff --git a/addons/disarming/functions/fnc_finishDisarmTarget.sqf b/addons/disarming/functions/fnc_eventTargetFinish.sqf similarity index 60% rename from addons/disarming/functions/fnc_finishDisarmTarget.sqf rename to addons/disarming/functions/fnc_eventTargetFinish.sqf index b65e5f053c..1fd8a86ad4 100644 --- a/addons/disarming/functions/fnc_finishDisarmTarget.sqf +++ b/addons/disarming/functions/fnc_eventTargetFinish.sqf @@ -3,23 +3,22 @@ * TODO * * Arguments: - * 0: caller (player) + * 0: caller * 1: target - * 1: type of disarm + * 2: errorMsg * * Return Value: - * The return value + * Nothing * * Example: - * finishDisarmTarget + * eventTargetFinish * * Public: No */ #include "script_component.hpp" - PARAMS_3(_caller,_target,_errorMsg); -systemChat format ["Debug-Target: Disarm finished with code [%1]", _errorMsg]; +_target setVariable [QGVAR(disarmInProgress), false]; ["DisarmFinished", [_caller], [_caller, _target, _errorMsg]] call EFUNC(common,targetEvent); diff --git a/addons/disarming/functions/fnc_eventTargetStart.sqf b/addons/disarming/functions/fnc_eventTargetStart.sqf new file mode 100644 index 0000000000..85760bc365 --- /dev/null +++ b/addons/disarming/functions/fnc_eventTargetStart.sqf @@ -0,0 +1,34 @@ +/* + * Author: PabstMirror + * TODO + * + * Arguments: + * 0: caller (player) + * 1: target + * 2: type of disarm + * + * Return Value: + * Nothing + * + * Example: + * finishDisarmTarget + * + * Public: No + */ +#include "script_component.hpp" + +PARAMS_3(_caller,_target,_listOfObjectsToRemove); + +[{ + PARAMS_2(_args,_pfID); + EXPLODE_3_PVT(_args,_caller,_target,_listOfObjectsToRemove); + + if (!([_target] call FUNC(canDisarm))) exitWith { + [_pfID] call CBA_fnc_removePerFrameHandler; + }: + + if (!(_target getVariable [QGVAR(disarmInProgress), false])) then { + [_pfID] call CBA_fnc_removePerFrameHandler; + _args call FUNC(disarmDropItems); + }; +}, 0, _this] call CBA_fnc_addPerFrameHandler; diff --git a/addons/disarming/functions/fnc_finishDisarmCaller.sqf b/addons/disarming/functions/fnc_finishDisarmCaller.sqf deleted file mode 100644 index 555555d8fe..0000000000 --- a/addons/disarming/functions/fnc_finishDisarmCaller.sqf +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Author: PabstMirror - * TODO - * - * Arguments: - * 0: caller (player) - * 1: target - * 1: type of disarm - * - * Return Value: - * The return value - * - * Example: - * - * - * Public: No - */ -#include "script_component.hpp" - - -PARAMS_3(_caller,_target,_errorMsg); - -systemChat format ["Debug-Caller: Disarm finished with code [%1]", _errorMsg]; \ No newline at end of file diff --git a/addons/disarming/functions/fnc_getAllGearContainer.sqf b/addons/disarming/functions/fnc_getAllGearContainer.sqf new file mode 100644 index 0000000000..f5e071a628 --- /dev/null +++ b/addons/disarming/functions/fnc_getAllGearContainer.sqf @@ -0,0 +1,11 @@ +#include "script_component.hpp" + +PARAMS_1(_target); + +_allGear = [[],[]]; + +{ + //todo: Use 1.40 Append + _allGear set [0, (_allGear select 0) + (_x select 0)]; + _allGear set [1, (_allGear select 1) + (_x select 1)]; +} forEach [(getWeaponCargo _target), (getItemCargo _target), (getMagazineCargo _target), (getBackpackCargo _target)]; diff --git a/addons/disarming/functions/fnc_getAllGear.sqf b/addons/disarming/functions/fnc_getAllGearUnit.sqf similarity index 87% rename from addons/disarming/functions/fnc_getAllGear.sqf rename to addons/disarming/functions/fnc_getAllGearUnit.sqf index a47df8d4c6..e07b941bb4 100644 --- a/addons/disarming/functions/fnc_getAllGear.sqf +++ b/addons/disarming/functions/fnc_getAllGearUnit.sqf @@ -16,6 +16,10 @@ if ((uniform _target) != "") then { if ((headgear _target) != "") then { _allItems pushBack (headgear _target); }; +//What kind of asshole takes a man's glasses? +if ((goggles _target) != "") then { + _allItems pushBack (goggles _target); +}; _uniqueClassnames = []; _classnamesCount = []; diff --git a/addons/disarming/functions/fnc_openDisarmDialog.sqf b/addons/disarming/functions/fnc_openDisarmDialog.sqf new file mode 100644 index 0000000000..cf0156280b --- /dev/null +++ b/addons/disarming/functions/fnc_openDisarmDialog.sqf @@ -0,0 +1,77 @@ +#include "script_component.hpp" + +PARAMS_2(_caller,_target); + +//Sanity Checks +if (_caller != ACE_player) exitwith {ERROR("Player isn't caller?");}; +if (!([_target] call FUNC(canDisarm))) exitWith {ERROR("Unit Cannot Be Disarmed");}; +if (!([] call EGVAR(common,canInteract))) exitWith {ERROR("Player cannot Interact");}; + +closeDialog 0; +createDialog "friskInventory"; + +disableSerialization; + +_display = uiNamespace getVariable ['PABST_friskInventory', displayNull]; +if (isNull _display) exitWith {ERROR("Display is Null");}; + +GVAR(disarmTarget) = _target; + +//Setup Drop Event (on right pannel) +(_display displayCtrl 632) ctrlAddEventHandler ["LBDrop", { + if (isNull GVAR(disarmTarget)) exitWith {}; + PARAMS_5(_ctrl,_xPos,_yPos,_idc,_itemInfo); + EXPLODE_3_PVT((_itemInfo select 0),_displayText,_value,_data); + + systemChat format ["Debug: Droping %1 from %2", _data, GVAR(disarmTarget)]; + [ACE_player, GVAR(disarmTarget), [_data]] call FUNC(disarmDropItems); + false +}]; + +//Setup PFEH +[{ + disableSerialization; + EXPLODE_2_PVT(_this,_args,_pfID); + EXPLODE_3_PVT(_args,_player,_target,_display); + + + if ((!([_target] call FUNC(unitCanBeDisarmed))) || + {isNull _display} || + {_player != ACE_player} || + {!([] call EGVAR(common,canInteract))}) then { + + [_pfID] call CBA_fnc_removePerFrameHandler; + GVAR(disarmTarget) = objNull; + if (!isNull _display) then {closeDialog 0;}; //close dialog if still open + } else { + _groundContainer = _display displayCtrl 632; + _targetContainer = _display displayCtrl 633; + _playerName = _display displayCtrl 111; + _rankPicture = _display displayCtrl 1203; + + _rankPicture ctrlSetText "\A3\Ui_f\data\GUI\Cfg\Ranks\corporal_gs.paa"; + _playerName ctrlSetText ([GVAR(disarmTarget)] call EFUNC(common,getName)); + + lbClear _groundContainer; + lbClear _targetContainer; + + _targetUniqueItems = [GVAR(disarmTarget)] call FUNC(getAllGearUnit); + [_targetContainer, _targetUniqueItems] call FUNC(showItemsInListbox); + + + _holder = objNull; + { + if ((_x getVariable [QGVAR(disarmUnit), objNull]) == _target) exitWith { + _holder = _x; + }; + } forEach ((getpos _target) nearObjects ["WeaponHolderSimulated", 3]); + + if (!isNull _holder) then { + + _targetUniqueItems = [_holder] call FUNC(getAllGearContainer); + [_groundContainer, _targetUniqueItems] call FUNC(showItemsInListbox); + + }; + + }; +}, 0.05, [_caller, _target, _display]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/disarming/functions/fnc_showItemsInListbox.sqf b/addons/disarming/functions/fnc_showItemsInListbox.sqf new file mode 100644 index 0000000000..01cdc2f7f0 --- /dev/null +++ b/addons/disarming/functions/fnc_showItemsInListbox.sqf @@ -0,0 +1,50 @@ +/* + * Author: PabstMirror + * Checks the conditions for being able to disarm + * + * Arguments: + * 0: RscListBox + * 1: ItemArray [["items"],[counts]] + * + * Return Value: + * Nothing + * + * Example: + * [theListBox, [["ace_bandage"],[2]]] call ace_disarming_fnc_showItemsInListbox + * + * Public: No + */ +#include "script_component.hpp" + +disableSerialization; +PARAMS_2(_listBoxCtrl,_itemsCountArray); + +{ + _displayName = ""; + _picture = ""; + _count = (_itemsCountArray select 1) select _forEachIndex; + + switch (true) do { + case (isClass (configFile >> "CfgWeapons" >> _x)): { + _displayName = getText (configFile >> "CfgWeapons" >> _x >> "displayName"); + _picture = getText (configFile >> "CfgWeapons" >> _x >> "picture"); + }; + case (isClass (configFile >> "CfgMagazines" >> _x)): { + _displayName = getText (configFile >> "CfgMagazines" >> _x >> "displayName"); + _picture = getText (configFile >> "CfgMagazines" >> _x >> "picture"); + }; + case (isClass (configFile >> "CfgVehicles" >> _x)): { + _displayName = getText (configFile >> "CfgVehicles" >> _x >> "displayName"); + _picture = getText (configFile >> "CfgVehicles" >> _x >> "picture"); + }; + case (isClass (configFile >> "CfgGlasses" >> _x)): { + _displayName = getText (configFile >> "CfgGoggles" >> _x >> "displayName"); + _picture = getText (configFile >> "CfgGoggles" >> _x >> "picture"); + }; + }; + + _listBoxCtrl lbAdd format ["%1", _displayName]; + _listBoxCtrl lbSetData [_forEachIndex, _x]; + _listBoxCtrl lbSetPicture [_forEachIndex, _picture]; + _listBoxCtrl lbSetTextRight [_forEachIndex, str _count]; +} forEach (_itemsCountArray select 0); diff --git a/addons/disarming/functions/fnc_startDisarmTarget.sqf b/addons/disarming/functions/fnc_startDisarmTarget.sqf deleted file mode 100644 index 0edb65e7fa..0000000000 --- a/addons/disarming/functions/fnc_startDisarmTarget.sqf +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Author: PabstMirror - * Starts disarming the target from the target - * Generates the specific list of items that should be removed from a disarm type - * - * Arguments: - * 0: caller (player) - * 1: target - * 1: type of disarm - * - * Return Value: - * None - * - * Example: - * - * - * Public: No - */ -#include "script_component.hpp" - -PARAMS_3(_caller,_target,_type); - -_listOfItemsToRemove = []; -_doNotDropAmmo = false; - -switch (toLower _type) do { -case ("primaryweapononly"): { - _listOfItemsToRemove = [(primaryWeapon _target)]; - _doNotDropAmmo = true; - }; -case ("secondaryweapononly"): { - _listOfItemsToRemove = [(secondaryWeapon _target)]; - _doNotDropAmmo = true; - }; -case ("handgunweapononly"): { - _listOfItemsToRemove = [(handgunWeapon _target)]; - _doNotDropAmmo = true; - }; -case ("backpack"): { - _listOfItemsToRemove = [(backpack _target)]; - }; -case ("alldangerous"): { - _listOfItemsToRemove = weapons _target; - { - if (!(_x in _listOfItemsToRemove)) then { - _listOfItemsToRemove pushBack _x; - }; - } forEach (magazines _target); - { - if ((!(_x in _listOfItemsToRemove)) && {_x in DANGEROUS_ITEMS} && {_x != ""}) then { - _listOfItemsToRemove pushBack _x; - }; - } forEach ((items _target) + (assignedItems _target)); - }; -case ("strip"): { - // _listOfItemsToRemove = [_target] call EFUNC(common,getAllGear); - _listOfItemsToRemove = []; - { - if ((!(_x in _listOfItemsToRemove)) && {_x != ""}) then { - _listOfItemsToRemove pushBack _x; - }; - } forEach ((weapons _target) + (magazines _target) + (items _target) + (assignedItems _target) + [(backpack _target), (vest _target), (uniform _target)]); - }; -}; - -[_caller, _target, _listOfItemsToRemove, _doNotDropAmmo] call FUNC(disarmDropItems); From 32f67487b5e8d2b6cf01aec0472abfdd36e85fee Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Fri, 27 Feb 2015 16:16:35 -0600 Subject: [PATCH 006/214] More Work --- addons/disarming/XEH_postInit.sqf | 4 ++-- addons/disarming/XEH_preInit.sqf | 14 +++++++------- addons/disarming/functions/fnc_disarmDropItems.sqf | 5 +++-- .../disarming/functions/fnc_eventTargetFinish.sqf | 6 ++++-- .../disarming/functions/fnc_eventTargetStart.sqf | 14 +------------- .../functions/fnc_getAllGearContainer.sqf | 2 ++ .../disarming/functions/fnc_openDisarmDialog.sqf | 10 ++++------ .../disarming/functions/fnc_showItemsInListbox.sqf | 1 + 8 files changed, 24 insertions(+), 32 deletions(-) diff --git a/addons/disarming/XEH_postInit.sqf b/addons/disarming/XEH_postInit.sqf index 8556c776e7..da59da34de 100644 --- a/addons/disarming/XEH_postInit.sqf +++ b/addons/disarming/XEH_postInit.sqf @@ -1,4 +1,4 @@ #include "script_component.hpp" -["Disarm", {_this call FUNC(startDisarmTarget)}] call EFUNC(common,addEventHandler); -["DisarmFinished", {_this call FUNC(eventCallerFinish)}] call EFUNC(common,addEventHandler); +["DisarmStart", {_this call FUNC(startDisarmTarget)}] call EFUNC(common,addEventHandler); +["DisarmDebugCallback", {_this call FUNC(eventCallerFinish)}] call EFUNC(common,addEventHandler); diff --git a/addons/disarming/XEH_preInit.sqf b/addons/disarming/XEH_preInit.sqf index 1ed153f518..24d240f087 100644 --- a/addons/disarming/XEH_preInit.sqf +++ b/addons/disarming/XEH_preInit.sqf @@ -3,13 +3,13 @@ ADDON = false; PREP(canDisarm); -PREP(canFrisk2); PREP(disarmDropItems); -PREP(doFrisk2); -PREP(finishDisarmCaller); -PREP(finishDisarmTarget); -PREP(getAllGear); -PREP(startDisarmCaller); -PREP(startDisarmTarget); +PREP(eventCallerFinish); +PREP(eventTargetFinish); +PREP(eventTargetStart); +PREP(getAllGearContainer); +PREP(getAllGearUnit); +PREP(openDisarmDialog); +PREP(showItemsInListbox); ADDON = true; diff --git a/addons/disarming/functions/fnc_disarmDropItems.sqf b/addons/disarming/functions/fnc_disarmDropItems.sqf index b818c2360c..c5459353f7 100644 --- a/addons/disarming/functions/fnc_disarmDropItems.sqf +++ b/addons/disarming/functions/fnc_disarmDropItems.sqf @@ -46,13 +46,14 @@ if (!_doNotDropAmmo) then { if ((_x getVariable [QGVAR(disarmUnit), objNull]) == _target) exitWith { _holder = _x; }; - } forEach ((getpos _target) nearObjects ["WeaponHolderSimulated", 3]); + } forEach ((getpos _target) nearObjects ["GroundWeaponHolder", 3]); }; if (isNull _holder) then { _dropPos = _target modelToWorld [-0.75, 0.75, 0]; _dropPos set [2, 0]; - _holder = createVehicle ["WeaponHolderSimulated", _dropPos, [], 0, "CAN_COLLIDE"]; + // _holder = createVehicle ["WeaponHolderSimulated", _dropPos, [], 0, "CAN_COLLIDE"]; + _holder = createVehicle ["GroundWeaponHolder", _dropPos, [], 0, "CAN_COLLIDE"]; _holder setVariable [QGVAR(disarmUnit), _target]; }; diff --git a/addons/disarming/functions/fnc_eventTargetFinish.sqf b/addons/disarming/functions/fnc_eventTargetFinish.sqf index 1fd8a86ad4..fa217056b0 100644 --- a/addons/disarming/functions/fnc_eventTargetFinish.sqf +++ b/addons/disarming/functions/fnc_eventTargetFinish.sqf @@ -19,6 +19,8 @@ PARAMS_3(_caller,_target,_errorMsg); -_target setVariable [QGVAR(disarmInProgress), false]; -["DisarmFinished", [_caller], [_caller, _target, _errorMsg]] call EFUNC(common,targetEvent); +if (_errorMsg != "") then { + systemChat _errorMsg; + ["DisarmDebugCallback", [_caller], [_caller, _target, _errorMsg]] call EFUNC(common,targetEvent); +}; diff --git a/addons/disarming/functions/fnc_eventTargetStart.sqf b/addons/disarming/functions/fnc_eventTargetStart.sqf index 85760bc365..572f034b23 100644 --- a/addons/disarming/functions/fnc_eventTargetStart.sqf +++ b/addons/disarming/functions/fnc_eventTargetStart.sqf @@ -19,16 +19,4 @@ PARAMS_3(_caller,_target,_listOfObjectsToRemove); -[{ - PARAMS_2(_args,_pfID); - EXPLODE_3_PVT(_args,_caller,_target,_listOfObjectsToRemove); - - if (!([_target] call FUNC(canDisarm))) exitWith { - [_pfID] call CBA_fnc_removePerFrameHandler; - }: - - if (!(_target getVariable [QGVAR(disarmInProgress), false])) then { - [_pfID] call CBA_fnc_removePerFrameHandler; - _args call FUNC(disarmDropItems); - }; -}, 0, _this] call CBA_fnc_addPerFrameHandler; +[_caller, _target, _listOfObjectsToRemove] call FUNC(disarmDropItems); diff --git a/addons/disarming/functions/fnc_getAllGearContainer.sqf b/addons/disarming/functions/fnc_getAllGearContainer.sqf index f5e071a628..827aac7dc3 100644 --- a/addons/disarming/functions/fnc_getAllGearContainer.sqf +++ b/addons/disarming/functions/fnc_getAllGearContainer.sqf @@ -9,3 +9,5 @@ _allGear = [[],[]]; _allGear set [0, (_allGear select 0) + (_x select 0)]; _allGear set [1, (_allGear select 1) + (_x select 1)]; } forEach [(getWeaponCargo _target), (getItemCargo _target), (getMagazineCargo _target), (getBackpackCargo _target)]; + +_allGear diff --git a/addons/disarming/functions/fnc_openDisarmDialog.sqf b/addons/disarming/functions/fnc_openDisarmDialog.sqf index cf0156280b..3cf5db8e66 100644 --- a/addons/disarming/functions/fnc_openDisarmDialog.sqf +++ b/addons/disarming/functions/fnc_openDisarmDialog.sqf @@ -35,7 +35,7 @@ GVAR(disarmTarget) = _target; EXPLODE_3_PVT(_args,_player,_target,_display); - if ((!([_target] call FUNC(unitCanBeDisarmed))) || + if ((!([_target] call FUNC(canDisarm))) || {isNull _display} || {_player != ACE_player} || {!([] call EGVAR(common,canInteract))}) then { @@ -64,13 +64,11 @@ GVAR(disarmTarget) = _target; if ((_x getVariable [QGVAR(disarmUnit), objNull]) == _target) exitWith { _holder = _x; }; - } forEach ((getpos _target) nearObjects ["WeaponHolderSimulated", 3]); + } forEach ((getpos _target) nearObjects ["GroundWeaponHolder", 3]); if (!isNull _holder) then { - - _targetUniqueItems = [_holder] call FUNC(getAllGearContainer); - [_groundContainer, _targetUniqueItems] call FUNC(showItemsInListbox); - + _holderUniqueItems = [_holder] call FUNC(getAllGearContainer); + [_groundContainer, _holderUniqueItems] call FUNC(showItemsInListbox); }; }; diff --git a/addons/disarming/functions/fnc_showItemsInListbox.sqf b/addons/disarming/functions/fnc_showItemsInListbox.sqf index 01cdc2f7f0..e04e402243 100644 --- a/addons/disarming/functions/fnc_showItemsInListbox.sqf +++ b/addons/disarming/functions/fnc_showItemsInListbox.sqf @@ -19,6 +19,7 @@ disableSerialization; PARAMS_2(_listBoxCtrl,_itemsCountArray); + { _displayName = ""; _picture = ""; From d31c19c3eb4f2f3a5024bd695c023bcbef5b2ccd Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Fri, 27 Feb 2015 18:38:23 -0600 Subject: [PATCH 007/214] Seems like it's working --- addons/disarming/CfgVehicles.hpp | 18 ++++++++++-------- addons/disarming/XEH_postInit.sqf | 2 +- .../functions/fnc_disarmDropItems.sqf | 17 +++++++++++------ .../functions/fnc_eventCallerFinish.sqf | 1 + .../functions/fnc_eventTargetStart.sqf | 18 +++++++++++++++++- .../functions/fnc_openDisarmDialog.sqf | 9 +++++++-- .../functions/fnc_showItemsInListbox.sqf | 4 ++-- 7 files changed, 49 insertions(+), 20 deletions(-) diff --git a/addons/disarming/CfgVehicles.hpp b/addons/disarming/CfgVehicles.hpp index afecb20e9d..31c4c58497 100644 --- a/addons/disarming/CfgVehicles.hpp +++ b/addons/disarming/CfgVehicles.hpp @@ -2,14 +2,16 @@ class CfgVehicles { class Man; class CAManBase: Man { class ACE_Actions { - class ACE_Disarm { - displayName = "Disarm"; - distance = 3; - condition = QUOTE([_target] call FUNC(canDisarm)); - statement = ""; - showDisabled = 0; - priority = 3.2; - enableInside = 0; + class ACE_MainActions { + class ACE_DisarmInventory { + displayName = "Open Inventory"; + distance = 4; + condition = QUOTE([_target] call FUNC(canDisarm)); + statement = QUOTE([ARR_2(_player,_target)] call FUNC(openDisarmDialog)); + icon = "\a3\Modules_F_Curator\Data\portraitRespawnInventory_ca.paa"; //todo + selection = "spine3"; + exceptions[] = {}; + }; }; }; }; diff --git a/addons/disarming/XEH_postInit.sqf b/addons/disarming/XEH_postInit.sqf index da59da34de..7315ef1785 100644 --- a/addons/disarming/XEH_postInit.sqf +++ b/addons/disarming/XEH_postInit.sqf @@ -1,4 +1,4 @@ #include "script_component.hpp" -["DisarmStart", {_this call FUNC(startDisarmTarget)}] call EFUNC(common,addEventHandler); +["DisarmDropItems", {_this call FUNC(eventTargetStart)}] call EFUNC(common,addEventHandler); ["DisarmDebugCallback", {_this call FUNC(eventCallerFinish)}] call EFUNC(common,addEventHandler); diff --git a/addons/disarming/functions/fnc_disarmDropItems.sqf b/addons/disarming/functions/fnc_disarmDropItems.sqf index c5459353f7..3c070ea25a 100644 --- a/addons/disarming/functions/fnc_disarmDropItems.sqf +++ b/addons/disarming/functions/fnc_disarmDropItems.sqf @@ -66,7 +66,7 @@ if (_holder getVariable [QGVAR(holderInUse), false]) exitWith { systemChat format ["Debug: %1 - Ground Container In Use, waiting until free", time]; [{ _this call FUNC(disarmDropItems); - }, 0.05, 0.05, _this] call EFUNC(common,waitAndExecute); + }, _this, 0.05, 0.05] call EFUNC(common,waitAndExecute); }; _holder setVariable [QGVAR(holderInUse), true]; @@ -100,7 +100,10 @@ if (((count _targetMagazinesStart) - (count _targetMagazinesEnd)) != ((count _ho //Remove Items, Assigned Items and NVG _holderItemsStart = getitemCargo _holder; -_targetItemsStart = ((assignedItems _target) + (items _target) + [headgear _target]); +_targetItemsStart = (assignedItems _target) + (items _target); +if ((headgear _target) != "") then {_targetItemsStart pushBack (headgear _target);}; +if ((goggles _target) != "") then {_targetItemsStart pushBack (goggles _target);}; + _addToCrateClassnames = []; _addToCrateCount = []; @@ -127,11 +130,13 @@ _addToCrateCount = []; } forEach _addToCrateClassnames; _holderItemsEnd = getitemCargo _holder; -_targetItemsEnd = ((assignedItems _target) + (items _target) + [headgear _target]); +_targetItemsEnd = (assignedItems _target) + (items _target); +if ((headgear _target) != "") then {_targetItemsEnd pushBack (headgear _target);}; +if ((goggles _target) != "") then {_targetItemsEnd pushBack (goggles _target);}; //Verify Items Added (lazy count) if (((count _targetItemsStart) - (count _targetItemsEnd)) != ([_addToCrateCount] call _fncSumArray)) exitWith { - + ERR = [_targetItemsStart, _targetItemsEnd, _addToCrateClassnames, _addToCrateCount]; _holder setVariable [QGVAR(holderInUse), false]; [_caller, _target, "Debug: Items Not Removed From Player"] call FUNC(eventTargetFinish); }; @@ -144,7 +149,7 @@ if ((([_holderItemsEnd select 1] call _fncSumArray) - ([_holderItemsStart select //If holder is still empty, it will be 'garbage collected' while we wait for the drop 'action' to take place //So add a dummy item and just remove at the end -_holderIsEmpty = (([_holderItemsEnd select 1] call _fncSumArray) + (count _holderMagazinesEnd)) == 0; +_holderIsEmpty = ([_holder] call FUNC(getAllGearContainer)) isEqualTo [[],[]]; if (_holderIsEmpty) then { systemChat "Debug: making dummy"; _holder addItemCargoGlobal [DUMMY_ITEM, 1]; @@ -248,7 +253,7 @@ systemChat format ["PFEh start %1", time]; }; _holder setVariable [QGVAR(holderInUse), false]; - [_caller, _target, "Debug: Victory!!!"] call FUNC(eventTargetFinish); + [_caller, _target, ""] call FUNC(eventTargetFinish); }; }, 0.0, [_caller,_target, _listOfItemsToRemove, _holder, _holderIsEmpty, (time + TIME_MAX_WAIT), _doNotDropAmmo, _targetMagazinesEnd]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/disarming/functions/fnc_eventCallerFinish.sqf b/addons/disarming/functions/fnc_eventCallerFinish.sqf index d3a14a69ec..2acc1d4346 100644 --- a/addons/disarming/functions/fnc_eventCallerFinish.sqf +++ b/addons/disarming/functions/fnc_eventCallerFinish.sqf @@ -22,3 +22,4 @@ PARAMS_3(_caller,_target,_errorMsg); if (_caller != ACE_player) exitWith {}; systemChat format ["Debug-Caller: Disarm finished from [%1] with code [%2]", _target, _errorMsg]; +[format ["Problem Removing Item
%1", _errorMsg]] call EFUNC(common,displayTextStructured); \ No newline at end of file diff --git a/addons/disarming/functions/fnc_eventTargetStart.sqf b/addons/disarming/functions/fnc_eventTargetStart.sqf index 572f034b23..942d114e5d 100644 --- a/addons/disarming/functions/fnc_eventTargetStart.sqf +++ b/addons/disarming/functions/fnc_eventTargetStart.sqf @@ -11,7 +11,7 @@ * Nothing * * Example: - * finishDisarmTarget + * eventTargetStart * * Public: No */ @@ -19,4 +19,20 @@ PARAMS_3(_caller,_target,_listOfObjectsToRemove); +_itemsToAdd = []; +{ + if (_x == (uniform _target)) then { + _itemsToAdd = _itemsToAdd + (uniformItems _target); + }; + if (_x == (vest _target)) then { + _itemsToAdd = _itemsToAdd + (vestItems _target); + }; +} forEach _listOfObjectsToRemove; + +{ + if (!(_x in _listOfObjectsToRemove)) then { + _listOfObjectsToRemove pushBack _x; + }; +} forEach _itemsToAdd; + [_caller, _target, _listOfObjectsToRemove] call FUNC(disarmDropItems); diff --git a/addons/disarming/functions/fnc_openDisarmDialog.sqf b/addons/disarming/functions/fnc_openDisarmDialog.sqf index 3cf5db8e66..260ed2f086 100644 --- a/addons/disarming/functions/fnc_openDisarmDialog.sqf +++ b/addons/disarming/functions/fnc_openDisarmDialog.sqf @@ -1,3 +1,5 @@ +//openDisarmDialog + #include "script_component.hpp" PARAMS_2(_caller,_target); @@ -23,9 +25,12 @@ GVAR(disarmTarget) = _target; PARAMS_5(_ctrl,_xPos,_yPos,_idc,_itemInfo); EXPLODE_3_PVT((_itemInfo select 0),_displayText,_value,_data); + if (isNull GVAR(disarmTarget)) exitWith {ERROR("disarmTarget is null");}; + systemChat format ["Debug: Droping %1 from %2", _data, GVAR(disarmTarget)]; - [ACE_player, GVAR(disarmTarget), [_data]] call FUNC(disarmDropItems); - false + ["DisarmDropItems", [GVAR(disarmTarget)], [ACE_player, GVAR(disarmTarget), [_data]]] call EFUNC(common,targetEvent); + + false //not sure what this does }]; //Setup PFEH diff --git a/addons/disarming/functions/fnc_showItemsInListbox.sqf b/addons/disarming/functions/fnc_showItemsInListbox.sqf index e04e402243..aeea724a36 100644 --- a/addons/disarming/functions/fnc_showItemsInListbox.sqf +++ b/addons/disarming/functions/fnc_showItemsInListbox.sqf @@ -39,8 +39,8 @@ PARAMS_2(_listBoxCtrl,_itemsCountArray); _picture = getText (configFile >> "CfgVehicles" >> _x >> "picture"); }; case (isClass (configFile >> "CfgGlasses" >> _x)): { - _displayName = getText (configFile >> "CfgGoggles" >> _x >> "displayName"); - _picture = getText (configFile >> "CfgGoggles" >> _x >> "picture"); + _displayName = getText (configFile >> "CfgGlasses" >> _x >> "displayName"); + _picture = getText (configFile >> "CfgGlasses" >> _x >> "picture"); }; }; From 641cbb7f643a432f053aa20337b91f750cac0be1 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Fri, 27 Feb 2015 18:43:42 -0600 Subject: [PATCH 008/214] Dialog Stuff --- .../functions/fnc_openDisarmDialog.sqf | 4 +- addons/disarming/gui_disarm.hpp | 142 ++++++++++++++---- 2 files changed, 117 insertions(+), 29 deletions(-) diff --git a/addons/disarming/functions/fnc_openDisarmDialog.sqf b/addons/disarming/functions/fnc_openDisarmDialog.sqf index 260ed2f086..47ff9ff9a2 100644 --- a/addons/disarming/functions/fnc_openDisarmDialog.sqf +++ b/addons/disarming/functions/fnc_openDisarmDialog.sqf @@ -10,11 +10,11 @@ if (!([_target] call FUNC(canDisarm))) exitWith {ERROR("Unit Cannot Be Disarmed" if (!([] call EGVAR(common,canInteract))) exitWith {ERROR("Player cannot Interact");}; closeDialog 0; -createDialog "friskInventory"; +createDialog QGVAR(remoteInventory); disableSerialization; -_display = uiNamespace getVariable ['PABST_friskInventory', displayNull]; +_display = uiNamespace getVariable ["remoteInventory", displayNull]; if (isNull _display) exitWith {ERROR("Display is Null");}; GVAR(disarmTarget) = _target; diff --git a/addons/disarming/gui_disarm.hpp b/addons/disarming/gui_disarm.hpp index 39518838e2..c8316a859e 100644 --- a/addons/disarming/gui_disarm.hpp +++ b/addons/disarming/gui_disarm.hpp @@ -1,55 +1,143 @@ class RscText; +class RscPicture; +class RscActiveText; class RscListBox; -class GVAR(friskInventory) { +class GVAR(remoteInventory) { idd = -1; movingEnable = 0; enableSimulation = 1; enableDisplay = 1; - onLoad = "uiNamespace setVariable ['PABST_friskInventory', _this select 0];"; + onLoad = "uiNamespace setVariable ['ACE_remoteInventory', _this select 0];"; duration = 2147483647; fadein = 0; fadeout = 0; + class Colors + { + dragValidBgr[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])",0.5}; + dragInvalidBgr[] = {"(profilenamespace getvariable ['IGUI_ERROR_RGB_R',0.8])","(profilenamespace getvariable ['IGUI_ERROR_RGB_G',0.0])","(profilenamespace getvariable ['IGUI_ERROR_RGB_B',0.0])",0.5}; + dragValidBar[] = {"(profilenamespace getvariable ['IGUI_WARNING_RGB_R',0.8])","(profilenamespace getvariable ['IGUI_WARNING_RGB_G',0.5])","(profilenamespace getvariable ['IGUI_WARNING_RGB_B',0.0])",0.5}; + dragInvalidBar[] = {"(profilenamespace getvariable ['IGUI_ERROR_RGB_R',0.8])","(profilenamespace getvariable ['IGUI_ERROR_RGB_G',0.0])","(profilenamespace getvariable ['IGUI_ERROR_RGB_B',0.0])",0.5}; + progressBar[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])",1}; + progressBarBgr[] = {"(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])","(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])","(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])",0.75}; + highlight[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])",0.5}; + }; + class controlsBackground {}; class controls { - class CA_ContainerBackground: RscText { - idc = -1; - x = "7.5 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "12 * (safeZoneH / 40)"; - h = "22.5 * ((safeZoneH / 1.2) / 25)"; + idc = 1001; + x = "1 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; + y = "2 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; + w = "12 * (safeZoneH / 40)"; + h = "22 * ((safeZoneH / 1.2) / 25)"; colorBackground[] = {0.05,0.05,0.05,0.7}; }; - - class CA_ContainerBackground2: CA_ContainerBackground { - idc = -1; - x = "20.5 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; + class CA_PlayerBackground: RscText { + idc = 1002; + x = "14.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; + y = "2 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; + w = "24.4 * (safeZoneH / 40)"; + h = "22 * ((safeZoneH / 1.2) / 25)"; + colorBackground[] = {0.05,0.05,0.05,0.7}; + }; + class TitleBackground: RscText { + idc = 1020; + x = "14.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; + y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; + w = "24.4 * (safeZoneH / 40)"; + h = "1 * ((safeZoneH / 1.2) / 25)"; + colorBackground[] = {0.1,0.1,0.1,1}; + }; + class PlayersName: RscText { + idc = 111; + text = "Player name:"; + x = "15.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; + y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; + w = "19.8 * (safeZoneH / 40)"; + h = "1 * ((safeZoneH / 1.2) / 25)"; + }; + class RankBackground: RscText { + idc = 1014; + x = "15.1 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; + y = "1.25 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; + w = "0.6 * (safeZoneH / 40)"; + h = "0.6 * ((safeZoneH / 1.2) / 25)"; + colorBackground[] = {1,1,1,0.2}; + }; + class RankPicture: RscPicture { + idc = 1203; + text = "\A3\Ui_f\data\GUI\Cfg\Ranks\corporal_gs.paa"; + x = "15.1 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; + y = "1.25 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; + w = "0.6 * (safeZoneH / 40)"; + h = "0.6 * ((safeZoneH / 1.2) / 25)"; + }; + class ButtonBack: RscActiveText { + idc = 2; + style = 48; + color[] = {1,1,1,0.7}; + text = "\A3\Ui_f\data\GUI\Rsc\RscDisplayArcadeMap\icon_exit_cross_ca.paa"; + x = "38 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; + y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; + w = "1 * (safeZoneH / 40)"; + h = "1 * ((safeZoneH / 1.2) / 25)"; + colorText[] = {1,1,1,0.7}; + colorActive[] = {1,1,1,1}; + tooltip = "Close"; + }; + class ExternalContainerBackground: RscPicture { + colorText[] = {1,1,1,0.1}; + idc = 1240; + x = "1.5 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; + y = "3.7 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; + w = "11 * (safeZoneH / 40)"; + h = "18.4 * ((safeZoneH / 1.2) / 25)"; + }; + class PlayerContainerBackground: ExternalContainerBackground { + idc = 1241; + x = "15.1 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; + y = "6 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; + w = "11 * (safeZoneH / 40)"; + h = "14 * ((safeZoneH / 1.2) / 25)"; + }; + class GroundTitleBackground: RscText { + idc = 1021; + x = "1 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; + y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; + w = "12 * (safeZoneH / 40)"; + h = "1 * ((safeZoneH / 1.2) / 25)"; + colorBackground[] = {0.1,0.1,0.1,1}; + }; + class GroundName: RscText { + idc = 112; + text = "$STR_cfgVehicles_WeaponHolder0"; + x = "1 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; + y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; + w = "12 * (safeZoneH / 40)"; + h = "1 * ((safeZoneH / 1.2) / 25)"; }; - - class GroundContainer: RscListBox { idc = 632; - sizeEx = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - sizeEx2 = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - rowHeight = "1.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - canDrag = 1; + sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + sizeEx2 = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + rowHeight = "1.75 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + canDrag = 0; colorText[] = {1,1,1,1}; colorBackground[] = {0,0,0,0}; - itemBackground[] = {1,1,1,0.1}; + itemBackground[] = {1,1,1,0.2}; itemSpacing = 0.001; - x = "8 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "1.5 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "11 * (safeZoneH / 40)"; - h = "21.5 * ((safeZoneH / 1.2) / 25)"; + x = "1.5 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; + y = "2.5 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; + w = "11 * (safeZoneH / 40)"; + h = "21.5 * ((safeZoneH / 1.2) / 25)"; }; - class TargetContainer: GroundContainer { + class UniformContainer: GroundContainer { idc = 633; - canDrag = 0; - x = "21 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; + canDrag = 1; + x = "15.1 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; }; }; }; - From af1544ebb9bd49fd182dde8a248cdfa9eb4e2fdc Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Fri, 27 Feb 2015 18:50:08 -0600 Subject: [PATCH 009/214] fix name --- addons/disarming/functions/fnc_openDisarmDialog.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/disarming/functions/fnc_openDisarmDialog.sqf b/addons/disarming/functions/fnc_openDisarmDialog.sqf index 47ff9ff9a2..4c97575039 100644 --- a/addons/disarming/functions/fnc_openDisarmDialog.sqf +++ b/addons/disarming/functions/fnc_openDisarmDialog.sqf @@ -14,7 +14,7 @@ createDialog QGVAR(remoteInventory); disableSerialization; -_display = uiNamespace getVariable ["remoteInventory", displayNull]; +_display = uiNamespace getVariable ["ACE_remoteInventory", displayNull]; if (isNull _display) exitWith {ERROR("Display is Null");}; GVAR(disarmTarget) = _target; From 14c45afd999ecb0ba5a3d4985f1320ba33dfb0f2 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Fri, 27 Feb 2015 18:56:15 -0600 Subject: [PATCH 010/214] Sync holder gvar --- addons/disarming/functions/fnc_disarmDropItems.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/disarming/functions/fnc_disarmDropItems.sqf b/addons/disarming/functions/fnc_disarmDropItems.sqf index 3c070ea25a..ded9cf2a7a 100644 --- a/addons/disarming/functions/fnc_disarmDropItems.sqf +++ b/addons/disarming/functions/fnc_disarmDropItems.sqf @@ -54,7 +54,7 @@ if (isNull _holder) then { _dropPos set [2, 0]; // _holder = createVehicle ["WeaponHolderSimulated", _dropPos, [], 0, "CAN_COLLIDE"]; _holder = createVehicle ["GroundWeaponHolder", _dropPos, [], 0, "CAN_COLLIDE"]; - _holder setVariable [QGVAR(disarmUnit), _target]; + _holder setVariable [QGVAR(disarmUnit), _target, true]; }; //Verify holder created From 9f25641f54062cbf9251a38c3a8a75d5ec0bfcae Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Tue, 17 Mar 2015 14:43:50 -0500 Subject: [PATCH 011/214] Verify Mag counts, headers, check animation --- addons/disarming/CfgVehicles.hpp | 2 +- addons/disarming/XEH_preInit.sqf | 1 + addons/disarming/functions/fnc_canDisarm.sqf | 15 +++++-- .../functions/fnc_disarmDropItems.sqf | 25 +++++------ .../functions/fnc_getAllGearContainer.sqf | 22 ++++++++-- .../functions/fnc_getAllGearUnit.sqf | 15 +++++++ .../functions/fnc_openDisarmDialog.sqf | 31 +++++++++---- .../functions/fnc_showItemsInListbox.sqf | 3 +- .../functions/fnc_verifyMagazinesMoved.sqf | 44 +++++++++++++++++++ addons/disarming/script_component.hpp | 3 +- addons/disarming/stringtable.xml | 8 +++- 11 files changed, 134 insertions(+), 35 deletions(-) create mode 100644 addons/disarming/functions/fnc_verifyMagazinesMoved.sqf diff --git a/addons/disarming/CfgVehicles.hpp b/addons/disarming/CfgVehicles.hpp index 31c4c58497..a91b0bcec4 100644 --- a/addons/disarming/CfgVehicles.hpp +++ b/addons/disarming/CfgVehicles.hpp @@ -4,7 +4,7 @@ class CfgVehicles { class ACE_Actions { class ACE_MainActions { class ACE_DisarmInventory { - displayName = "Open Inventory"; + displayName = "$STR_ACE_Disarming_OpenInventory"; distance = 4; condition = QUOTE([_target] call FUNC(canDisarm)); statement = QUOTE([ARR_2(_player,_target)] call FUNC(openDisarmDialog)); diff --git a/addons/disarming/XEH_preInit.sqf b/addons/disarming/XEH_preInit.sqf index 24d240f087..2d19f3bb5b 100644 --- a/addons/disarming/XEH_preInit.sqf +++ b/addons/disarming/XEH_preInit.sqf @@ -11,5 +11,6 @@ PREP(getAllGearContainer); PREP(getAllGearUnit); PREP(openDisarmDialog); PREP(showItemsInListbox); +PREP(verifyMagazinesMoved); ADDON = true; diff --git a/addons/disarming/functions/fnc_canDisarm.sqf b/addons/disarming/functions/fnc_canDisarm.sqf index 207d5d5078..33edafed3a 100644 --- a/addons/disarming/functions/fnc_canDisarm.sqf +++ b/addons/disarming/functions/fnc_canDisarm.sqf @@ -3,7 +3,7 @@ * Checks the conditions for being able to disarm a unit * * Arguments: - * 0: target + * 0: Target * * Return Value: * The return value @@ -15,11 +15,18 @@ */ #include "script_component.hpp" -PARAMS_2(_target); +PARAMS_1(_target); + +//Check animationState for putDown anim: +_animationStateCfgMoves = getText (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState _target) >> "actions"); +if (_animationStateCfgMoves == "") exitWith {false}; +_putDownAnim = getText (configFile >> "CfgMovesBasic" >> "Actions" >> _animationStateCfgMoves >> "PutDown"); +if (_putDownAnim != "") exitWith {false}; + (alive _target) && -{(abs (speed _target)) < 0.1} && +{(abs (speed _target)) < 1} && +{(vehicle _target) == _target} && {(_target getVariable ["ACE_isUnconscious", false]) || {_target getVariable [QEGVAR(captives,isHandcuffed), false]} || {_target getVariable [QEGVAR(captives,isSurrendering), false]}} - \ No newline at end of file diff --git a/addons/disarming/functions/fnc_disarmDropItems.sqf b/addons/disarming/functions/fnc_disarmDropItems.sqf index ded9cf2a7a..186ebffa86 100644 --- a/addons/disarming/functions/fnc_disarmDropItems.sqf +++ b/addons/disarming/functions/fnc_disarmDropItems.sqf @@ -1,6 +1,6 @@ /* * Author: PabstMirror - * + * Makes a unit drop items: * * Arguments: * 0: caller (player) @@ -19,8 +19,6 @@ #include "script_component.hpp" #define TIME_MAX_WAIT 5 -#define DUMMY_ITEM "ACE_DebugPotato" -#define UNIQUE_MAGAZINES ["ACE_key_customKeyMagazine"] PARAMS_3(_caller,_target,_listOfItemsToRemove); DEFAULT_PARAM(3,_doNotDropAmmo,false); //By default units drop all weapon mags when dropping a weapon @@ -91,13 +89,13 @@ if ( ({(_x select 0) in _listOfItemsToRemove} count _targetMagazinesEnd) != 0) e _holder setVariable [QGVAR(holderInUse), false]; [_caller, _target, "Debug: Didn't Remove Magazines"] call FUNC(eventTargetFinish); }; -//Verify holder has mags unit had (lazy count for now) -if (((count _targetMagazinesStart) - (count _targetMagazinesEnd)) != ((count _holderMagazinesEnd) - (count _holderMagazinesStart))) exitWith { +//Verify holder has mags unit had +if (!([_targetMagazinesStart, _targetMagazinesEnd, _holderMagazinesStart, _holderMagazinesEnd] call FUNC(verifyMagazinesMoved))) then { + ERR = [_targetMagazinesStart, _targetMagazinesEnd, _holderMagazinesStart, _holderMagazinesEnd]; _holder setVariable [QGVAR(holderInUse), false]; [_caller, _target, "Debug: Crate Magazines not in holder"] call FUNC(eventTargetFinish); }; - //Remove Items, Assigned Items and NVG _holderItemsStart = getitemCargo _holder; _targetItemsStart = (assignedItems _target) + (items _target); @@ -134,9 +132,8 @@ _targetItemsEnd = (assignedItems _target) + (items _target); if ((headgear _target) != "") then {_targetItemsEnd pushBack (headgear _target);}; if ((goggles _target) != "") then {_targetItemsEnd pushBack (goggles _target);}; -//Verify Items Added (lazy count) +//Verify Items Added if (((count _targetItemsStart) - (count _targetItemsEnd)) != ([_addToCrateCount] call _fncSumArray)) exitWith { - ERR = [_targetItemsStart, _targetItemsEnd, _addToCrateClassnames, _addToCrateCount]; _holder setVariable [QGVAR(holderInUse), false]; [_caller, _target, "Debug: Items Not Removed From Player"] call FUNC(eventTargetFinish); }; @@ -167,9 +164,7 @@ systemChat format ["PFEh start %1", time]; _needToRemoveVest = ((vest _target) != "") && {(vest _target) in _listOfItemsToRemove}; _needToRemoveUniform = ((uniform _target) != "") && {(uniform _target) in _listOfItemsToRemove}; - // systemChat format ["%1 - (%2 %3 %4 %5)", time, _maxWaitTime, _needToRemoveWeapon, _needToRemoveMagazines, _needToRemoveBackpack]; - - if ((time < _maxWaitTime) && {_needToRemoveWeapon || _needToRemoveMagazines || _needToRemoveBackpack}) then { + if ((time < _maxWaitTime) && {[_target] call FUNC(canDisarm)} && {_needToRemoveWeapon || _needToRemoveMagazines || _needToRemoveBackpack}) then { //action drop weapons (keeps loaded magazine and attachements) { if (_x in _listOfItemsToRemove) then { @@ -220,7 +215,6 @@ systemChat format ["PFEh start %1", time]; //If we added a dummy item, remove it now if (_holderIsEmpty && {!((getItemCargo _holder) isEqualTo [[DUMMY_ITEM],[1]])}) exitWith { - _holder setVariable [QGVAR(holderInUse), false]; [_caller, _target, "Debug: Holder should only have dummy item"] call FUNC(eventTargetFinish); }; @@ -234,7 +228,12 @@ systemChat format ["PFEh start %1", time]; _holder setVariable [QGVAR(holderInUse), false]; [_caller, _target, "Debug: Drop Actions Timeout"] call FUNC(eventTargetFinish); }; - + //If target lost disarm status: + if (!([_target] call FUNC(canDisarm))) exitWith { + _holder setVariable [QGVAR(holderInUse), false]; + [_caller, _target, "Debug: Target cannot be disarmed"] call FUNC(eventTargetFinish); + }; + if (_needToRemoveVest && {!((vestItems _target) isEqualTo [])}) exitWith { _holder setVariable [QGVAR(holderInUse), false]; [_caller, _target, "Debug: Vest Not Empty"] call FUNC(eventTargetFinish); diff --git a/addons/disarming/functions/fnc_getAllGearContainer.sqf b/addons/disarming/functions/fnc_getAllGearContainer.sqf index 827aac7dc3..c5b2c445ab 100644 --- a/addons/disarming/functions/fnc_getAllGearContainer.sqf +++ b/addons/disarming/functions/fnc_getAllGearContainer.sqf @@ -1,13 +1,29 @@ +/* + * Author: PabstMirror + * Helper function to get all gear of a container + * + * Arguments: + * 0: Container + * + * Return Value: + * Array of 2 arrays, classnames and count + * + * Example: + * [["ace_bandage"],[2]] = [box] call ace_disarming_fnc_getAllGearContainer + * + * Public: No + */ #include "script_component.hpp" PARAMS_1(_target); +private ["_allGear"]; + _allGear = [[],[]]; { - //todo: Use 1.40 Append - _allGear set [0, (_allGear select 0) + (_x select 0)]; - _allGear set [1, (_allGear select 1) + (_x select 1)]; + (_allGear select 0) append (_x select 0); + (_allGear select 1) append (_x select 1); } forEach [(getWeaponCargo _target), (getItemCargo _target), (getMagazineCargo _target), (getBackpackCargo _target)]; _allGear diff --git a/addons/disarming/functions/fnc_getAllGearUnit.sqf b/addons/disarming/functions/fnc_getAllGearUnit.sqf index e07b941bb4..d07f40c972 100644 --- a/addons/disarming/functions/fnc_getAllGearUnit.sqf +++ b/addons/disarming/functions/fnc_getAllGearUnit.sqf @@ -1,3 +1,18 @@ +/* + * Author: PabstMirror + * Helper function to get all gear of a unit. + * + * Arguments: + * 0: Target + * + * Return Value: + * Array of 2 arrays, classnames and count + * + * Example: + * [["ace_bandage"],[2]] = [bob] call ace_disarming_fnc_getAllGearUnit + * + * Public: No + */ #include "script_component.hpp" PARAMS_1(_target); diff --git a/addons/disarming/functions/fnc_openDisarmDialog.sqf b/addons/disarming/functions/fnc_openDisarmDialog.sqf index 4c97575039..fb7a3d35e3 100644 --- a/addons/disarming/functions/fnc_openDisarmDialog.sqf +++ b/addons/disarming/functions/fnc_openDisarmDialog.sqf @@ -1,5 +1,19 @@ -//openDisarmDialog - +/* + * Author: PabstMirror + * Opens the disarm dialog (allowing a person to remove items) + * + * Arguments: + * 0: Caller (player) + * 1: Target + * + * Return Value: + * None + * + * Example: + * [player, bob] call ace_disarming_fnc_openDisarmDialog + * + * Public: No + */ #include "script_component.hpp" PARAMS_2(_caller,_target); @@ -9,7 +23,7 @@ if (_caller != ACE_player) exitwith {ERROR("Player isn't caller?");}; if (!([_target] call FUNC(canDisarm))) exitWith {ERROR("Unit Cannot Be Disarmed");}; if (!([] call EGVAR(common,canInteract))) exitWith {ERROR("Player cannot Interact");}; -closeDialog 0; +if (dialog) then {closeDialog 0;}; createDialog QGVAR(remoteInventory); disableSerialization; @@ -26,10 +40,10 @@ GVAR(disarmTarget) = _target; EXPLODE_3_PVT((_itemInfo select 0),_displayText,_value,_data); if (isNull GVAR(disarmTarget)) exitWith {ERROR("disarmTarget is null");}; - + systemChat format ["Debug: Droping %1 from %2", _data, GVAR(disarmTarget)]; ["DisarmDropItems", [GVAR(disarmTarget)], [ACE_player, GVAR(disarmTarget), [_data]]] call EFUNC(common,targetEvent); - + false //not sure what this does }]; @@ -39,12 +53,11 @@ GVAR(disarmTarget) = _target; EXPLODE_2_PVT(_this,_args,_pfID); EXPLODE_3_PVT(_args,_player,_target,_display); - if ((!([_target] call FUNC(canDisarm))) || {isNull _display} || {_player != ACE_player} || - {!([] call EGVAR(common,canInteract))}) then { - + {!([_player, _target, []] call EFUNC(common,canInteractWith))}) then { + systemChat "Debug: closeing dialog"; [_pfID] call CBA_fnc_removePerFrameHandler; GVAR(disarmTarget) = objNull; if (!isNull _display) then {closeDialog 0;}; //close dialog if still open @@ -60,10 +73,10 @@ GVAR(disarmTarget) = _target; lbClear _groundContainer; lbClear _targetContainer; + //Show the items in the ground disarmTarget's inventory _targetUniqueItems = [GVAR(disarmTarget)] call FUNC(getAllGearUnit); [_targetContainer, _targetUniqueItems] call FUNC(showItemsInListbox); - _holder = objNull; { if ((_x getVariable [QGVAR(disarmUnit), objNull]) == _target) exitWith { diff --git a/addons/disarming/functions/fnc_showItemsInListbox.sqf b/addons/disarming/functions/fnc_showItemsInListbox.sqf index aeea724a36..f76336bd36 100644 --- a/addons/disarming/functions/fnc_showItemsInListbox.sqf +++ b/addons/disarming/functions/fnc_showItemsInListbox.sqf @@ -1,6 +1,6 @@ /* * Author: PabstMirror - * Checks the conditions for being able to disarm + * Shows a list of inventory items in a listBox control. * * Arguments: * 0: RscListBox @@ -19,7 +19,6 @@ disableSerialization; PARAMS_2(_listBoxCtrl,_itemsCountArray); - { _displayName = ""; _picture = ""; diff --git a/addons/disarming/functions/fnc_verifyMagazinesMoved.sqf b/addons/disarming/functions/fnc_verifyMagazinesMoved.sqf new file mode 100644 index 0000000000..cd2babd985 --- /dev/null +++ b/addons/disarming/functions/fnc_verifyMagazinesMoved.sqf @@ -0,0 +1,44 @@ +/* + * Author: PabstMirror + * Verifies magazines moved with exact ammo counts preserved. + * Arrays will be in format from magazinesAmmo/magazinesAmmoCargo + * e.g.: [["30Rnd_65x39_caseless_mag",15], ["30Rnd_65x39_caseless_mag",30]] + * + * Arguments: + * 0: Start on container A + * 1: End on container A + * 2: Start on container B + * 3: End on container B + * + * Return Value: + * Verified Good + * + * Example: + * [] call ace_disarming_fnc_verifyMagazinesMoved + * + * Public: No + */ +#include "script_component.hpp" + +private ["_problem", "_beginingArray"]; + +PARAMS_4(_startA,_endA,_startB,_endB); + +//Quick Lazy Count Check +if (((count _startA) + (count _startB)) != ((count _endA) + (count _endB))) exitWith { + systemChat format ["%1 - %2", ((count _startA) + (count _startB)), ((count _endA) + (count _endB))]; + false +}; + +_beginingArray = (_startA + _startB); + +_problem = false; +{ + _index = _beginingArray find _x; + if (_index == -1) exitWith {_problem = true;}; + _beginingArray deleteAt _index; +} forEach (_endA + _endB); + +systemChat format ["%1 - %2", _problem, _beginingArray]; + +(!_problem) && {_beginingArray isEqualTo []} diff --git a/addons/disarming/script_component.hpp b/addons/disarming/script_component.hpp index 36f251950d..3e13697397 100644 --- a/addons/disarming/script_component.hpp +++ b/addons/disarming/script_component.hpp @@ -11,4 +11,5 @@ #include "\z\ace\addons\main\script_macros.hpp" -#define DANGEROUS_ITEMS ["ACE_Clacker", "ACE_M26_Clacker", "ACE_DeadManSwitch"] +#define DUMMY_ITEM "ACE_DebugPotato" +#define UNIQUE_MAGAZINES ["ACE_key_customKeyMagazine"] \ No newline at end of file diff --git a/addons/disarming/stringtable.xml b/addons/disarming/stringtable.xml index 893221713e..845d0c286e 100644 --- a/addons/disarming/stringtable.xml +++ b/addons/disarming/stringtable.xml @@ -1,5 +1,9 @@  - + - + + + Open Inventory + + \ No newline at end of file From 38745f4871d1dac38f83e7ecdca78fd47c4f5ad5 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Fri, 20 Mar 2015 20:17:49 -0500 Subject: [PATCH 012/214] Various Changes --- addons/disarming/CfgVehicles.hpp | 4 +- addons/disarming/XEH_preInit.sqf | 3 +- ...nc_canDisarm.sqf => fnc_canBeDisarmed.sqf} | 8 +-- .../functions/fnc_canPlayerDisarmUnit.sqf | 22 ++++++++ .../functions/fnc_disarmDropItems.sqf | 27 +++++----- .../functions/fnc_eventCallerFinish.sqf | 6 +-- .../functions/fnc_eventTargetFinish.sqf | 7 +-- .../functions/fnc_eventTargetStart.sqf | 3 +- .../functions/fnc_openDisarmDialog.sqf | 39 +++++++++----- .../functions/fnc_showItemsInListbox.sqf | 51 +++++++++++-------- .../functions/fnc_verifyMagazinesMoved.sqf | 5 +- addons/disarming/gui_disarm.hpp | 18 ++++--- addons/disarming/script_component.hpp | 1 + 13 files changed, 122 insertions(+), 72 deletions(-) rename addons/disarming/functions/{fnc_canDisarm.sqf => fnc_canBeDisarmed.sqf} (74%) create mode 100644 addons/disarming/functions/fnc_canPlayerDisarmUnit.sqf diff --git a/addons/disarming/CfgVehicles.hpp b/addons/disarming/CfgVehicles.hpp index a91b0bcec4..871dbcfa4e 100644 --- a/addons/disarming/CfgVehicles.hpp +++ b/addons/disarming/CfgVehicles.hpp @@ -6,9 +6,9 @@ class CfgVehicles { class ACE_DisarmInventory { displayName = "$STR_ACE_Disarming_OpenInventory"; distance = 4; - condition = QUOTE([_target] call FUNC(canDisarm)); + condition = QUOTE([ARR_2(_player,_target)] call FUNC(canPlayerDisarmUnit)); statement = QUOTE([ARR_2(_player,_target)] call FUNC(openDisarmDialog)); - icon = "\a3\Modules_F_Curator\Data\portraitRespawnInventory_ca.paa"; //todo + icon = "\a3\Modules_F_Curator\Data\portraitRespawnInventory_ca.paa"; selection = "spine3"; exceptions[] = {}; }; diff --git a/addons/disarming/XEH_preInit.sqf b/addons/disarming/XEH_preInit.sqf index 2d19f3bb5b..84534e41b4 100644 --- a/addons/disarming/XEH_preInit.sqf +++ b/addons/disarming/XEH_preInit.sqf @@ -2,7 +2,8 @@ ADDON = false; -PREP(canDisarm); +PREP(canBeDisarmed); +PREP(canPlayerDisarmUnit); PREP(disarmDropItems); PREP(eventCallerFinish); PREP(eventTargetFinish); diff --git a/addons/disarming/functions/fnc_canDisarm.sqf b/addons/disarming/functions/fnc_canBeDisarmed.sqf similarity index 74% rename from addons/disarming/functions/fnc_canDisarm.sqf rename to addons/disarming/functions/fnc_canBeDisarmed.sqf index 33edafed3a..04171a900d 100644 --- a/addons/disarming/functions/fnc_canDisarm.sqf +++ b/addons/disarming/functions/fnc_canBeDisarmed.sqf @@ -6,10 +6,10 @@ * 0: Target * * Return Value: - * The return value + * Can Be Disarmed * * Example: - * [cursorTarget] call ace_disarming_fnc_canDisarm + * [cursorTarget] call ace_disarming_fnc_canBeDisarmed * * Public: No */ @@ -17,7 +17,9 @@ PARAMS_1(_target); -//Check animationState for putDown anim: +//Check animationState for putDown anim +//This ensures the unit doesn't have to actualy do any animation to drop something +//This should always be true for the 3 possible status effects that allow disarming _animationStateCfgMoves = getText (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState _target) >> "actions"); if (_animationStateCfgMoves == "") exitWith {false}; _putDownAnim = getText (configFile >> "CfgMovesBasic" >> "Actions" >> _animationStateCfgMoves >> "PutDown"); diff --git a/addons/disarming/functions/fnc_canPlayerDisarmUnit.sqf b/addons/disarming/functions/fnc_canPlayerDisarmUnit.sqf new file mode 100644 index 0000000000..ec9e975ec2 --- /dev/null +++ b/addons/disarming/functions/fnc_canPlayerDisarmUnit.sqf @@ -0,0 +1,22 @@ +/* + * Author: PabstMirror + * Checks the conditions for being able to disarm a unit + * + * Arguments: + * 0: Player + * 1: Target + * + * Return Value: + * Can Be Disarm Target + * + * Example: + * [player, cursorTarget] call ace_disarming_fnc_canPlayerDisarmUnit + * + * Public: No + */ +#include "script_component.hpp" + +PARAMS_2(_player,_target); + +([_target] call FUNC(canBeDisarmed)) && +{([_player, _target, []] call EFUNC(common,canInteractWith))} diff --git a/addons/disarming/functions/fnc_disarmDropItems.sqf b/addons/disarming/functions/fnc_disarmDropItems.sqf index 186ebffa86..cbed44be23 100644 --- a/addons/disarming/functions/fnc_disarmDropItems.sqf +++ b/addons/disarming/functions/fnc_disarmDropItems.sqf @@ -1,6 +1,6 @@ /* * Author: PabstMirror - * Makes a unit drop items: + * Makes a unit drop items * * Arguments: * 0: caller (player) @@ -30,7 +30,7 @@ _fncSumArray = { }; //Sanity Checks -if (!([_target] call FUNC(canDisarm))) exitWith { +if (!([_target] call FUNC(canBeDisarmed))) exitWith { [_caller, _target, "Debug: Cannot disarm target"] call FUNC(eventTargetFinish); }; if (_doNotDropAmmo && {({_x in _listOfItemsToRemove} count (magazines _target)) > 0}) exitWith { @@ -38,20 +38,23 @@ if (_doNotDropAmmo && {({_x in _listOfItemsToRemove} count (magazines _target)) }; _holder = objNull; + +//If not dropping ammo, don't use an existing container if (!_doNotDropAmmo) then { - //Try to use the same container, if one exists { if ((_x getVariable [QGVAR(disarmUnit), objNull]) == _target) exitWith { _holder = _x; }; - } forEach ((getpos _target) nearObjects ["GroundWeaponHolder", 3]); + } forEach ((getpos _target) nearObjects [DISARM_CONTAINER, 3]); }; if (isNull _holder) then { - _dropPos = _target modelToWorld [-0.75, 0.75, 0]; - _dropPos set [2, 0]; + _dropPos = _target modelToWorld [0, 0.75, 0]; + _dropPos set [2, ((getPosASL _target) select 2)]; // _holder = createVehicle ["WeaponHolderSimulated", _dropPos, [], 0, "CAN_COLLIDE"]; - _holder = createVehicle ["GroundWeaponHolder", _dropPos, [], 0, "CAN_COLLIDE"]; + _holder = createVehicle [DISARM_CONTAINER, _dropPos, [], 0, "CAN_COLLIDE"]; + _holder setPosASL _dropPos; + _holder setVariable [QGVAR(holderInUse), false]; _holder setVariable [QGVAR(disarmUnit), _target, true]; }; @@ -59,12 +62,12 @@ if (isNull _holder) then { if (isNull _holder) exitWith { [_caller, _target, "Debug: Null Holder"] call FUNC(eventTargetFinish); }; -//Make sure only one drop operation at a time... +//Make sure only one drop operation at a time (using PFEH system as a queue) if (_holder getVariable [QGVAR(holderInUse), false]) exitWith { systemChat format ["Debug: %1 - Ground Container In Use, waiting until free", time]; [{ _this call FUNC(disarmDropItems); - }, _this, 0.05, 0.05] call EFUNC(common,waitAndExecute); + }, _this, 0, 0] call EFUNC(common,waitAndExecute); }; _holder setVariable [QGVAR(holderInUse), true]; @@ -164,7 +167,7 @@ systemChat format ["PFEh start %1", time]; _needToRemoveVest = ((vest _target) != "") && {(vest _target) in _listOfItemsToRemove}; _needToRemoveUniform = ((uniform _target) != "") && {(uniform _target) in _listOfItemsToRemove}; - if ((time < _maxWaitTime) && {[_target] call FUNC(canDisarm)} && {_needToRemoveWeapon || _needToRemoveMagazines || _needToRemoveBackpack}) then { + if ((time < _maxWaitTime) && {[_target] call FUNC(canBeDisarmed)} && {_needToRemoveWeapon || _needToRemoveMagazines || _needToRemoveBackpack}) then { //action drop weapons (keeps loaded magazine and attachements) { if (_x in _listOfItemsToRemove) then { @@ -222,18 +225,16 @@ systemChat format ["PFEh start %1", time]; systemChat "Debug: Deleting Dummy"; clearItemCargoGlobal _holder; }; - //Verify we didn't timeout waiting on drop action if (time >= _maxWaitTime) exitWith { _holder setVariable [QGVAR(holderInUse), false]; [_caller, _target, "Debug: Drop Actions Timeout"] call FUNC(eventTargetFinish); }; //If target lost disarm status: - if (!([_target] call FUNC(canDisarm))) exitWith { + if (!([_target] call FUNC(canBeDisarmed))) exitWith { _holder setVariable [QGVAR(holderInUse), false]; [_caller, _target, "Debug: Target cannot be disarmed"] call FUNC(eventTargetFinish); }; - if (_needToRemoveVest && {!((vestItems _target) isEqualTo [])}) exitWith { _holder setVariable [QGVAR(holderInUse), false]; [_caller, _target, "Debug: Vest Not Empty"] call FUNC(eventTargetFinish); diff --git a/addons/disarming/functions/fnc_eventCallerFinish.sqf b/addons/disarming/functions/fnc_eventCallerFinish.sqf index 2acc1d4346..c87cb434b3 100644 --- a/addons/disarming/functions/fnc_eventCallerFinish.sqf +++ b/addons/disarming/functions/fnc_eventCallerFinish.sqf @@ -1,6 +1,6 @@ /* * Author: PabstMirror - * Starts the disarming process from the caller + * Recieves a possible error code from FUNC(eventTargetFinish) * * Arguments: * 0: caller (player) @@ -11,7 +11,7 @@ * None * * Example: - * TODO + * [player1, player2, "Someting fucked up"] call ace_disarming_fnc_eventCallerFinish * * Public: No */ @@ -22,4 +22,4 @@ PARAMS_3(_caller,_target,_errorMsg); if (_caller != ACE_player) exitWith {}; systemChat format ["Debug-Caller: Disarm finished from [%1] with code [%2]", _target, _errorMsg]; -[format ["Problem Removing Item
%1", _errorMsg]] call EFUNC(common,displayTextStructured); \ No newline at end of file +diag_log text format ["[ACE_Disarming] %1 - eventCallerFinish: %2", time, _this]; diff --git a/addons/disarming/functions/fnc_eventTargetFinish.sqf b/addons/disarming/functions/fnc_eventTargetFinish.sqf index fa217056b0..286b0d8c57 100644 --- a/addons/disarming/functions/fnc_eventTargetFinish.sqf +++ b/addons/disarming/functions/fnc_eventTargetFinish.sqf @@ -1,6 +1,7 @@ /* * Author: PabstMirror - * TODO + * After FUNC(disarmDropItems) has completed, passing a possible error code. + * Passes that error back to orginal caller. * * Arguments: * 0: caller @@ -11,7 +12,7 @@ * Nothing * * Example: - * eventTargetFinish + * [player1, player2, "Someting fucked up"] call ace_disarming_fnc_eventTargetFinish * * Public: No */ @@ -21,6 +22,6 @@ PARAMS_3(_caller,_target,_errorMsg); if (_errorMsg != "") then { - systemChat _errorMsg; + diag_log text format ["[ACE_Disarming] %1 - eventTargetFinish: %2", time, _this]; ["DisarmDebugCallback", [_caller], [_caller, _target, _errorMsg]] call EFUNC(common,targetEvent); }; diff --git a/addons/disarming/functions/fnc_eventTargetStart.sqf b/addons/disarming/functions/fnc_eventTargetStart.sqf index 942d114e5d..c91f717e2a 100644 --- a/addons/disarming/functions/fnc_eventTargetStart.sqf +++ b/addons/disarming/functions/fnc_eventTargetStart.sqf @@ -1,6 +1,7 @@ /* * Author: PabstMirror - * TODO + * Disarm Event Handler, Starting func, called on the target. + * If target has to remove uniform/vest, this will add all uniform/vest items to the drop list. * * Arguments: * 0: caller (player) diff --git a/addons/disarming/functions/fnc_openDisarmDialog.sqf b/addons/disarming/functions/fnc_openDisarmDialog.sqf index fb7a3d35e3..9fc5fa2c21 100644 --- a/addons/disarming/functions/fnc_openDisarmDialog.sqf +++ b/addons/disarming/functions/fnc_openDisarmDialog.sqf @@ -16,18 +16,28 @@ */ #include "script_component.hpp" +#define TEXTURES_RANKS [ \ + "", \ + "\A3\Ui_f\data\GUI\Cfg\Ranks\private_gs.paa", \ + "\A3\Ui_f\data\GUI\Cfg\Ranks\corporal_gs.paa", \ + "\A3\Ui_f\data\GUI\Cfg\Ranks\sergeant_gs.paa", \ + "\A3\Ui_f\data\GUI\Cfg\Ranks\lieutenant_gs.paa", \ + "\A3\Ui_f\data\GUI\Cfg\Ranks\captain_gs.paa", \ + "\A3\Ui_f\data\GUI\Cfg\Ranks\major_gs.paa", \ + "\A3\Ui_f\data\GUI\Cfg\Ranks\colonel_gs.paa" \ + ] + PARAMS_2(_caller,_target); //Sanity Checks if (_caller != ACE_player) exitwith {ERROR("Player isn't caller?");}; -if (!([_target] call FUNC(canDisarm))) exitWith {ERROR("Unit Cannot Be Disarmed");}; -if (!([] call EGVAR(common,canInteract))) exitWith {ERROR("Player cannot Interact");}; - -if (dialog) then {closeDialog 0;}; -createDialog QGVAR(remoteInventory); +if (!([_player, _target] call FUNC(canPlayerDisarmUnit))) exitWith {ERROR("Can't Disarm Unit");}; +if (dialog) then {ERROR("Dialog open when trying to open disarm dialog"); closeDialog 0;}; disableSerialization; +createDialog QGVAR(remoteInventory); + _display = uiNamespace getVariable ["ACE_remoteInventory", displayNull]; if (isNull _display) exitWith {ERROR("Display is Null");}; @@ -53,11 +63,12 @@ GVAR(disarmTarget) = _target; EXPLODE_2_PVT(_this,_args,_pfID); EXPLODE_3_PVT(_args,_player,_target,_display); - if ((!([_target] call FUNC(canDisarm))) || + if ((!([_player, _target] call FUNC(canPlayerDisarmUnit))) || {isNull _display} || - {_player != ACE_player} || - {!([_player, _target, []] call EFUNC(common,canInteractWith))}) then { + {_player != ACE_player}) then { + systemChat "Debug: closeing dialog"; + [_pfID] call CBA_fnc_removePerFrameHandler; GVAR(disarmTarget) = objNull; if (!isNull _display) then {closeDialog 0;}; //close dialog if still open @@ -67,9 +78,12 @@ GVAR(disarmTarget) = _target; _playerName = _display displayCtrl 111; _rankPicture = _display displayCtrl 1203; - _rankPicture ctrlSetText "\A3\Ui_f\data\GUI\Cfg\Ranks\corporal_gs.paa"; + //Show rank and name (just like BIS's inventory) + _rankIndex = ["PRIVATE", "CORPORAL", "SERGEANT", "LIEUTENANT", "CAPTAIN", "MAJOR", "COLONEL"] find (rank _target); + _rankPicture ctrlSetText (TEXTURES_RANKS select _rankIndex); _playerName ctrlSetText ([GVAR(disarmTarget)] call EFUNC(common,getName)); + //Clear both inventory lists: lbClear _groundContainer; lbClear _targetContainer; @@ -77,17 +91,18 @@ GVAR(disarmTarget) = _target; _targetUniqueItems = [GVAR(disarmTarget)] call FUNC(getAllGearUnit); [_targetContainer, _targetUniqueItems] call FUNC(showItemsInListbox); + //Try to find a holder that the target is using to drop items into: _holder = objNull; { if ((_x getVariable [QGVAR(disarmUnit), objNull]) == _target) exitWith { _holder = _x; }; - } forEach ((getpos _target) nearObjects ["GroundWeaponHolder", 3]); + } forEach ((getpos _target) nearObjects [DISARM_CONTAINER, 3]); + //If a holder exists, show it's inventory if (!isNull _holder) then { _holderUniqueItems = [_holder] call FUNC(getAllGearContainer); [_groundContainer, _holderUniqueItems] call FUNC(showItemsInListbox); }; - }; -}, 0.05, [_caller, _target, _display]] call CBA_fnc_addPerFrameHandler; +}, 0, [_caller, _target, _display]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/disarming/functions/fnc_showItemsInListbox.sqf b/addons/disarming/functions/fnc_showItemsInListbox.sqf index f76336bd36..3b2d1bfc87 100644 --- a/addons/disarming/functions/fnc_showItemsInListbox.sqf +++ b/addons/disarming/functions/fnc_showItemsInListbox.sqf @@ -4,7 +4,7 @@ * * Arguments: * 0: RscListBox - * 1: ItemArray [["items"],[counts]] + * 1: ItemArray [["itemClassnames"],[counts]] * * Return Value: * Nothing @@ -19,32 +19,39 @@ disableSerialization; PARAMS_2(_listBoxCtrl,_itemsCountArray); +private "_classname"; + { _displayName = ""; _picture = ""; + + _classname = _x; _count = (_itemsCountArray select 1) select _forEachIndex; - switch (true) do { - case (isClass (configFile >> "CfgWeapons" >> _x)): { - _displayName = getText (configFile >> "CfgWeapons" >> _x >> "displayName"); - _picture = getText (configFile >> "CfgWeapons" >> _x >> "picture"); + if (_classname != DUMMY_ITEM) then { //Don't show the dummy potato + + switch (true) do { + case (isClass (configFile >> "CfgWeapons" >> _classname)): { + _displayName = getText (configFile >> "CfgWeapons" >> _classname >> "displayName"); + _picture = getText (configFile >> "CfgWeapons" >> _classname >> "picture"); + }; + case (isClass (configFile >> "CfgMagazines" >> _classname)): { + _displayName = getText (configFile >> "CfgMagazines" >> _classname >> "displayName"); + _picture = getText (configFile >> "CfgMagazines" >> _classname >> "picture"); + }; + case (isClass (configFile >> "CfgVehicles" >> _classname)): { + _displayName = getText (configFile >> "CfgVehicles" >> _classname >> "displayName"); + _picture = getText (configFile >> "CfgVehicles" >> _classname >> "picture"); + }; + case (isClass (configFile >> "CfgGlasses" >> _classname)): { + _displayName = getText (configFile >> "CfgGlasses" >> _classname >> "displayName"); + _picture = getText (configFile >> "CfgGlasses" >> _classname >> "picture"); + }; }; - case (isClass (configFile >> "CfgMagazines" >> _x)): { - _displayName = getText (configFile >> "CfgMagazines" >> _x >> "displayName"); - _picture = getText (configFile >> "CfgMagazines" >> _x >> "picture"); - }; - case (isClass (configFile >> "CfgVehicles" >> _x)): { - _displayName = getText (configFile >> "CfgVehicles" >> _x >> "displayName"); - _picture = getText (configFile >> "CfgVehicles" >> _x >> "picture"); - }; - case (isClass (configFile >> "CfgGlasses" >> _x)): { - _displayName = getText (configFile >> "CfgGlasses" >> _x >> "displayName"); - _picture = getText (configFile >> "CfgGlasses" >> _x >> "picture"); - }; - }; - _listBoxCtrl lbAdd format ["%1", _displayName]; - _listBoxCtrl lbSetData [_forEachIndex, _x]; - _listBoxCtrl lbSetPicture [_forEachIndex, _picture]; - _listBoxCtrl lbSetTextRight [_forEachIndex, str _count]; + _listBoxCtrl lbAdd format ["%1", _displayName]; + _listBoxCtrl lbSetData [_forEachIndex, _classname]; + _listBoxCtrl lbSetPicture [_forEachIndex, _picture]; + _listBoxCtrl lbSetTextRight [_forEachIndex, str _count]; + }; } forEach (_itemsCountArray select 0); diff --git a/addons/disarming/functions/fnc_verifyMagazinesMoved.sqf b/addons/disarming/functions/fnc_verifyMagazinesMoved.sqf index cd2babd985..779a5e39ba 100644 --- a/addons/disarming/functions/fnc_verifyMagazinesMoved.sqf +++ b/addons/disarming/functions/fnc_verifyMagazinesMoved.sqf @@ -14,7 +14,7 @@ * Verified Good * * Example: - * [] call ace_disarming_fnc_verifyMagazinesMoved + * [stuff] call ace_disarming_fnc_verifyMagazinesMoved * * Public: No */ @@ -26,7 +26,6 @@ PARAMS_4(_startA,_endA,_startB,_endB); //Quick Lazy Count Check if (((count _startA) + (count _startB)) != ((count _endA) + (count _endB))) exitWith { - systemChat format ["%1 - %2", ((count _startA) + (count _startB)), ((count _endA) + (count _endB))]; false }; @@ -39,6 +38,4 @@ _problem = false; _beginingArray deleteAt _index; } forEach (_endA + _endB); -systemChat format ["%1 - %2", _problem, _beginingArray]; - (!_problem) && {_beginingArray isEqualTo []} diff --git a/addons/disarming/gui_disarm.hpp b/addons/disarming/gui_disarm.hpp index c8316a859e..8ccc61a8ec 100644 --- a/addons/disarming/gui_disarm.hpp +++ b/addons/disarming/gui_disarm.hpp @@ -1,3 +1,6 @@ +//The disarming dialog +//Meant to mimic the real BIS inventory (so people understand how to use it) + class RscText; class RscPicture; class RscActiveText; @@ -13,8 +16,7 @@ class GVAR(remoteInventory) { fadein = 0; fadeout = 0; - class Colors - { + class Colors { dragValidBgr[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])",0.5}; dragInvalidBgr[] = {"(profilenamespace getvariable ['IGUI_ERROR_RGB_R',0.8])","(profilenamespace getvariable ['IGUI_ERROR_RGB_G',0.0])","(profilenamespace getvariable ['IGUI_ERROR_RGB_B',0.0])",0.5}; dragValidBar[] = {"(profilenamespace getvariable ['IGUI_WARNING_RGB_R',0.8])","(profilenamespace getvariable ['IGUI_WARNING_RGB_G',0.5])","(profilenamespace getvariable ['IGUI_WARNING_RGB_B',0.0])",0.5}; @@ -86,7 +88,7 @@ class GVAR(remoteInventory) { h = "1 * ((safeZoneH / 1.2) / 25)"; colorText[] = {1,1,1,0.7}; colorActive[] = {1,1,1,1}; - tooltip = "Close"; + tooltip = "$str_disp_close"; }; class ExternalContainerBackground: RscPicture { colorText[] = {1,1,1,0.1}; @@ -121,16 +123,16 @@ class GVAR(remoteInventory) { }; class GroundContainer: RscListBox { idc = 632; - sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - sizeEx2 = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - rowHeight = "1.75 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + sizeEx = "0.8 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + sizeEx2 = "0.8 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + rowHeight = "1.75 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; canDrag = 0; colorText[] = {1,1,1,1}; colorBackground[] = {0,0,0,0}; itemBackground[] = {1,1,1,0.2}; itemSpacing = 0.001; - x = "1.5 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "2.5 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; + x = "1.5 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; + y = "2.5 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; w = "11 * (safeZoneH / 40)"; h = "21.5 * ((safeZoneH / 1.2) / 25)"; }; diff --git a/addons/disarming/script_component.hpp b/addons/disarming/script_component.hpp index 3e13697397..d9bec366dc 100644 --- a/addons/disarming/script_component.hpp +++ b/addons/disarming/script_component.hpp @@ -11,5 +11,6 @@ #include "\z\ace\addons\main\script_macros.hpp" +#define DISARM_CONTAINER "GroundWeaponHolder" #define DUMMY_ITEM "ACE_DebugPotato" #define UNIQUE_MAGAZINES ["ACE_key_customKeyMagazine"] \ No newline at end of file From 52623f71b8f728f52c0ef14f349b444ccdddfafa Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Fri, 20 Mar 2015 20:27:04 -0500 Subject: [PATCH 013/214] Use Inventory Scaling Option --- addons/disarming/gui_disarm.hpp | 138 ++++++++++++++++++-------------- 1 file changed, 77 insertions(+), 61 deletions(-) diff --git a/addons/disarming/gui_disarm.hpp b/addons/disarming/gui_disarm.hpp index 8ccc61a8ec..bb091b7459 100644 --- a/addons/disarming/gui_disarm.hpp +++ b/addons/disarming/gui_disarm.hpp @@ -6,6 +6,22 @@ class RscPicture; class RscActiveText; class RscListBox; +//Use the definese from +#define X_BIS(num) (num * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)) +#define Y_BIS(num) (num * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)) +#define W_BIS(num) (num * (((safezoneW / safezoneH) min 1.2) / 40)) +#define H_BIS(num) (num * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)) + +#define X_MAKEITBIGGA(num) (num * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)) +#define Y_MAKEITBIGGA(num) (num * (safeZoneH / 30) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)) +#define W_MAKEITBIGGA(num) (num * (safeZoneH / 40)) +#define H_MAKEITBIGGA(num) (num * (safeZoneH / 30)) + +#define X_PART(num) QUOTE(linearConversion [ARR_5(0, 2, (missionNamespace getVariable [ARR_2(QUOTE(QEGVAR(inventory,inventoryDisplaySize)), 0)]), X_BIS(num), X_MAKEITBIGGA(num))]) +#define Y_PART(num) QUOTE(linearConversion [ARR_5(0, 2, (missionNamespace getVariable [ARR_2(QUOTE(QEGVAR(inventory,inventoryDisplaySize)), 0)]), Y_BIS(num), Y_MAKEITBIGGA(num))]) +#define W_PART(num) QUOTE(linearConversion [ARR_5(0, 2, (missionNamespace getVariable [ARR_2(QUOTE(QEGVAR(inventory,inventoryDisplaySize)), 0)]), W_BIS(num), W_MAKEITBIGGA(num))]) +#define H_PART(num) QUOTE(linearConversion [ARR_5(0, 2, (missionNamespace getVariable [ARR_2(QUOTE(QEGVAR(inventory,inventoryDisplaySize)), 0)]), H_BIS(num), H_MAKEITBIGGA(num))]) + class GVAR(remoteInventory) { idd = -1; movingEnable = 0; @@ -30,96 +46,96 @@ class GVAR(remoteInventory) { class controls { class CA_ContainerBackground: RscText { - idc = 1001; - x = "1 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "2 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "12 * (safeZoneH / 40)"; - h = "22 * ((safeZoneH / 1.2) / 25)"; + idc = -1; + x = X_PART(1); + y = Y_PART(1); + w = W_PART(12); + h = H_PART(22.5); colorBackground[] = {0.05,0.05,0.05,0.7}; }; class CA_PlayerBackground: RscText { - idc = 1002; - x = "14.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "2 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "24.4 * (safeZoneH / 40)"; - h = "22 * ((safeZoneH / 1.2) / 25)"; + idc = -1; + x = X_PART(14.6); + y = Y_PART(2); + w = W_PART(24.4); + h = H_PART(21.5); colorBackground[] = {0.05,0.05,0.05,0.7}; }; class TitleBackground: RscText { - idc = 1020; - x = "14.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "24.4 * (safeZoneH / 40)"; - h = "1 * ((safeZoneH / 1.2) / 25)"; + idc = -1; + x = X_PART(14.6); + y = Y_PART(1); + w = W_PART(24.4); + h = H_PART(1); colorBackground[] = {0.1,0.1,0.1,1}; }; class PlayersName: RscText { idc = 111; - text = "Player name:"; - x = "15.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "19.8 * (safeZoneH / 40)"; - h = "1 * ((safeZoneH / 1.2) / 25)"; + // text = "Player name here:"; + x = X_PART(15.6); + y = Y_PART(1); + w = W_PART(19.8); + h = H_PART(1); }; class RankBackground: RscText { - idc = 1014; - x = "15.1 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "1.25 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "0.6 * (safeZoneH / 40)"; - h = "0.6 * ((safeZoneH / 1.2) / 25)"; + idc = -1; + x = X_PART(15.1); + y = Y_PART(1.25); + w = W_PART(0.6); + h = H_PART(0.6); colorBackground[] = {1,1,1,0.2}; }; class RankPicture: RscPicture { idc = 1203; - text = "\A3\Ui_f\data\GUI\Cfg\Ranks\corporal_gs.paa"; - x = "15.1 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "1.25 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "0.6 * (safeZoneH / 40)"; - h = "0.6 * ((safeZoneH / 1.2) / 25)"; + // text = "\A3\Ui_f\data\GUI\Cfg\Ranks\corporal_gs.paa"; + x = X_PART(15.1); + y = Y_PART(1.25); + w = W_PART(0.6); + h = H_PART(0.6); }; class ButtonBack: RscActiveText { - idc = 2; + idc = -1; style = 48; color[] = {1,1,1,0.7}; text = "\A3\Ui_f\data\GUI\Rsc\RscDisplayArcadeMap\icon_exit_cross_ca.paa"; - x = "38 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "1 * (safeZoneH / 40)"; - h = "1 * ((safeZoneH / 1.2) / 25)"; + x = X_PART(38); + y = Y_PART(1); + w = W_PART(1); + h = H_PART(1); colorText[] = {1,1,1,0.7}; colorActive[] = {1,1,1,1}; tooltip = "$str_disp_close"; }; class ExternalContainerBackground: RscPicture { colorText[] = {1,1,1,0.1}; - idc = 1240; - x = "1.5 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "3.7 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "11 * (safeZoneH / 40)"; - h = "18.4 * ((safeZoneH / 1.2) / 25)"; + idc = -1; + x = X_PART(1.5); + y = Y_PART(3.7); + w = W_PART(11); + h = H_PART(18.4); }; class PlayerContainerBackground: ExternalContainerBackground { - idc = 1241; - x = "15.1 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "6 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "11 * (safeZoneH / 40)"; - h = "14 * ((safeZoneH / 1.2) / 25)"; + idc = -1; + x = X_PART(15.1); + y = Y_PART(6); + w = W_PART(11); + h = H_PART(14); }; class GroundTitleBackground: RscText { - idc = 1021; - x = "1 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "12 * (safeZoneH / 40)"; - h = "1 * ((safeZoneH / 1.2) / 25)"; + idc = -1; + x = X_PART(1); + y = Y_PART(1); + w = W_PART(12); + h = H_PART(1); colorBackground[] = {0.1,0.1,0.1,1}; }; class GroundName: RscText { - idc = 112; - text = "$STR_cfgVehicles_WeaponHolder0"; - x = "1 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "12 * (safeZoneH / 40)"; - h = "1 * ((safeZoneH / 1.2) / 25)"; + idc = -1; + text = "$STR_cfgVehicles_WeaponHolder0"; //"ground" + x = X_PART(1); + y = Y_PART(1); + w = W_PART(12); + h = H_PART(1); }; class GroundContainer: RscListBox { idc = 632; @@ -131,15 +147,15 @@ class GVAR(remoteInventory) { colorBackground[] = {0,0,0,0}; itemBackground[] = {1,1,1,0.2}; itemSpacing = 0.001; - x = "1.5 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "2.5 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "11 * (safeZoneH / 40)"; - h = "21.5 * ((safeZoneH / 1.2) / 25)"; + x = X_PART(1.5); + y = Y_PART(2.5); + w = W_PART(11); + h = H_PART(21.5); }; class UniformContainer: GroundContainer { idc = 633; canDrag = 1; - x = "15.1 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; + x = X_PART(15.1); }; }; }; From 22483ce22e710bf3ae337b0da8d15bd82c409889 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Fri, 20 Mar 2015 20:47:34 -0500 Subject: [PATCH 014/214] Fix ranks, and uniform/vest drop --- addons/disarming/functions/fnc_disarmDropItems.sqf | 6 +++--- addons/disarming/functions/fnc_openDisarmDialog.sqf | 2 +- addons/disarming/gui_disarm.hpp | 3 ++- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/addons/disarming/functions/fnc_disarmDropItems.sqf b/addons/disarming/functions/fnc_disarmDropItems.sqf index cbed44be23..ab70b4b137 100644 --- a/addons/disarming/functions/fnc_disarmDropItems.sqf +++ b/addons/disarming/functions/fnc_disarmDropItems.sqf @@ -49,7 +49,7 @@ if (!_doNotDropAmmo) then { }; if (isNull _holder) then { - _dropPos = _target modelToWorld [0, 0.75, 0]; + _dropPos = _target modelToWorld [0.333, 0.75, 0]; _dropPos set [2, ((getPosASL _target) select 2)]; // _holder = createVehicle ["WeaponHolderSimulated", _dropPos, [], 0, "CAN_COLLIDE"]; _holder = createVehicle [DISARM_CONTAINER, _dropPos, [], 0, "CAN_COLLIDE"]; @@ -240,16 +240,16 @@ systemChat format ["PFEh start %1", time]; [_caller, _target, "Debug: Vest Not Empty"] call FUNC(eventTargetFinish); }; if (_needToRemoveVest) then { - removeVest _target; _holder addItemCargoGlobal [(vest _target), 1]; + removeVest _target; }; if (_needToRemoveUniform && {!((uniformItems _target) isEqualTo [])}) exitWith { _holder setVariable [QGVAR(holderInUse), false]; [_caller, _target, "Debug: Uniform Not Empty"] call FUNC(eventTargetFinish); }; if (_needToRemoveUniform) then { - removeUniform _target; _holder addItemCargoGlobal [(uniform _target), 1]; + removeUniform _target; }; _holder setVariable [QGVAR(holderInUse), false]; diff --git a/addons/disarming/functions/fnc_openDisarmDialog.sqf b/addons/disarming/functions/fnc_openDisarmDialog.sqf index 9fc5fa2c21..44446dbee0 100644 --- a/addons/disarming/functions/fnc_openDisarmDialog.sqf +++ b/addons/disarming/functions/fnc_openDisarmDialog.sqf @@ -79,7 +79,7 @@ GVAR(disarmTarget) = _target; _rankPicture = _display displayCtrl 1203; //Show rank and name (just like BIS's inventory) - _rankIndex = ["PRIVATE", "CORPORAL", "SERGEANT", "LIEUTENANT", "CAPTAIN", "MAJOR", "COLONEL"] find (rank _target); + _rankIndex = ((["PRIVATE", "CORPORAL", "SERGEANT", "LIEUTENANT", "CAPTAIN", "MAJOR", "COLONEL"] find (rank _target)) + 1); _rankPicture ctrlSetText (TEXTURES_RANKS select _rankIndex); _playerName ctrlSetText ([GVAR(disarmTarget)] call EFUNC(common,getName)); diff --git a/addons/disarming/gui_disarm.hpp b/addons/disarming/gui_disarm.hpp index bb091b7459..775c325674 100644 --- a/addons/disarming/gui_disarm.hpp +++ b/addons/disarming/gui_disarm.hpp @@ -104,7 +104,8 @@ class GVAR(remoteInventory) { h = H_PART(1); colorText[] = {1,1,1,0.7}; colorActive[] = {1,1,1,1}; - tooltip = "$str_disp_close"; + tooltip = "$STR_DISP_OPT_CLOSE"; + onButtonClick = "closeDialog 0"; }; class ExternalContainerBackground: RscPicture { colorText[] = {1,1,1,0.1}; From 0dcb1dfab8c2ac9e33320c8c942784b0e9b4be6d Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Fri, 20 Mar 2015 20:48:39 -0500 Subject: [PATCH 015/214] GUI --- addons/disarming/gui_disarm.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/disarming/gui_disarm.hpp b/addons/disarming/gui_disarm.hpp index 775c325674..0961b809ed 100644 --- a/addons/disarming/gui_disarm.hpp +++ b/addons/disarming/gui_disarm.hpp @@ -151,7 +151,7 @@ class GVAR(remoteInventory) { x = X_PART(1.5); y = Y_PART(2.5); w = W_PART(11); - h = H_PART(21.5); + h = H_PART(21); }; class UniformContainer: GroundContainer { idc = 633; From ee961ed1e643c2ea099d1e70bd8ab6d4fd18892c Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sun, 29 Mar 2015 14:47:57 -0500 Subject: [PATCH 016/214] Fix Dropping Unique Magazines --- addons/disarming/functions/fnc_disarmDropItems.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/disarming/functions/fnc_disarmDropItems.sqf b/addons/disarming/functions/fnc_disarmDropItems.sqf index ab70b4b137..5fc6888176 100644 --- a/addons/disarming/functions/fnc_disarmDropItems.sqf +++ b/addons/disarming/functions/fnc_disarmDropItems.sqf @@ -88,7 +88,7 @@ _targetMagazinesEnd = magazinesAmmo _target; _holderMagazinesEnd = magazinesAmmoCargo _holder; //Verify Mags dropped from unit: -if ( ({(_x select 0) in _listOfItemsToRemove} count _targetMagazinesEnd) != 0) exitWith { +if ( ({((_x select 0) in _listOfItemsToRemove) && {!((_x select 0) in UNIQUE_MAGAZINES)}} count _targetMagazinesEnd) != 0) exitWith { _holder setVariable [QGVAR(holderInUse), false]; [_caller, _target, "Debug: Didn't Remove Magazines"] call FUNC(eventTargetFinish); }; From c055911231ebccf91695576b26b9c2d18f0b936a Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sat, 4 Apr 2015 00:52:21 -0500 Subject: [PATCH 017/214] Cleanup, remove debug spam --- addons/disarming/CfgVehicles.hpp | 3 +-- .../disarming/functions/fnc_disarmDropItems.sqf | 17 +++++------------ .../functions/fnc_eventTargetFinish.sqf | 1 - .../functions/fnc_openDisarmDialog.sqf | 4 +--- .../functions/fnc_showItemsInListbox.sqf | 5 ++++- 5 files changed, 11 insertions(+), 19 deletions(-) diff --git a/addons/disarming/CfgVehicles.hpp b/addons/disarming/CfgVehicles.hpp index 871dbcfa4e..5a85dc1287 100644 --- a/addons/disarming/CfgVehicles.hpp +++ b/addons/disarming/CfgVehicles.hpp @@ -5,11 +5,10 @@ class CfgVehicles { class ACE_MainActions { class ACE_DisarmInventory { displayName = "$STR_ACE_Disarming_OpenInventory"; - distance = 4; + distance = 3.5; condition = QUOTE([ARR_2(_player,_target)] call FUNC(canPlayerDisarmUnit)); statement = QUOTE([ARR_2(_player,_target)] call FUNC(openDisarmDialog)); icon = "\a3\Modules_F_Curator\Data\portraitRespawnInventory_ca.paa"; - selection = "spine3"; exceptions[] = {}; }; }; diff --git a/addons/disarming/functions/fnc_disarmDropItems.sqf b/addons/disarming/functions/fnc_disarmDropItems.sqf index 5fc6888176..24ab96a2cf 100644 --- a/addons/disarming/functions/fnc_disarmDropItems.sqf +++ b/addons/disarming/functions/fnc_disarmDropItems.sqf @@ -48,13 +48,12 @@ if (!_doNotDropAmmo) then { } forEach ((getpos _target) nearObjects [DISARM_CONTAINER, 3]); }; +//Create a new weapon holder if (isNull _holder) then { - _dropPos = _target modelToWorld [0.333, 0.75, 0]; + _dropPos = _target modelToWorld [0.4, 0.75, 0]; //offset someone unconscious isn't lying over it _dropPos set [2, ((getPosASL _target) select 2)]; - // _holder = createVehicle ["WeaponHolderSimulated", _dropPos, [], 0, "CAN_COLLIDE"]; _holder = createVehicle [DISARM_CONTAINER, _dropPos, [], 0, "CAN_COLLIDE"]; _holder setPosASL _dropPos; - _holder setVariable [QGVAR(holderInUse), false]; _holder setVariable [QGVAR(disarmUnit), _target, true]; }; @@ -64,7 +63,6 @@ if (isNull _holder) exitWith { }; //Make sure only one drop operation at a time (using PFEH system as a queue) if (_holder getVariable [QGVAR(holderInUse), false]) exitWith { - systemChat format ["Debug: %1 - Ground Container In Use, waiting until free", time]; [{ _this call FUNC(disarmDropItems); }, _this, 0, 0] call EFUNC(common,waitAndExecute); @@ -92,7 +90,7 @@ if ( ({((_x select 0) in _listOfItemsToRemove) && {!((_x select 0) in UNIQUE_MAG _holder setVariable [QGVAR(holderInUse), false]; [_caller, _target, "Debug: Didn't Remove Magazines"] call FUNC(eventTargetFinish); }; -//Verify holder has mags unit had +//Verify holder has mags unit had if (!([_targetMagazinesStart, _targetMagazinesEnd, _holderMagazinesStart, _holderMagazinesEnd] call FUNC(verifyMagazinesMoved))) then { ERR = [_targetMagazinesStart, _targetMagazinesEnd, _holderMagazinesStart, _holderMagazinesEnd]; _holder setVariable [QGVAR(holderInUse), false]; @@ -141,7 +139,6 @@ if (((count _targetItemsStart) - (count _targetItemsEnd)) != ([_addToCrateCount] [_caller, _target, "Debug: Items Not Removed From Player"] call FUNC(eventTargetFinish); }; if ((([_holderItemsEnd select 1] call _fncSumArray) - ([_holderItemsStart select 1] call _fncSumArray)) != ([_addToCrateCount] call _fncSumArray)) exitWith { - _holder setVariable [QGVAR(holderInUse), false]; [_caller, _target, "Debug: Items Not Added to Holder"] call FUNC(eventTargetFinish); }; @@ -151,11 +148,10 @@ if ((([_holderItemsEnd select 1] call _fncSumArray) - ([_holderItemsStart select //So add a dummy item and just remove at the end _holderIsEmpty = ([_holder] call FUNC(getAllGearContainer)) isEqualTo [[],[]]; if (_holderIsEmpty) then { - systemChat "Debug: making dummy"; + TRACE_1("Debug: adding dummy item to holder",_holder); _holder addItemCargoGlobal [DUMMY_ITEM, 1]; }; -systemChat format ["PFEh start %1", time]; //Start the PFEH to do the actions (which could take >1 frame) [{ PARAMS_2(_args,_pfID); @@ -185,11 +181,8 @@ systemChat format ["PFEh start %1", time]; //Drop backpack (Keeps variables for ACRE/TFR) if (_needToRemoveBackpack) then {_target action ["DropBag", _holder, (backPack _target)];}; } else { - systemChat format ["PFEh done %1", time]; - //Exit PFEH [_pfID] call CBA_fnc_removePerFrameHandler; - if (_doNotDropAmmo) then { _error = false; @@ -222,7 +215,7 @@ systemChat format ["PFEh start %1", time]; [_caller, _target, "Debug: Holder should only have dummy item"] call FUNC(eventTargetFinish); }; if (_holderIsEmpty) then { - systemChat "Debug: Deleting Dummy"; + TRACE_1("Debug: removing dummy item from holder",_holder); clearItemCargoGlobal _holder; }; //Verify we didn't timeout waiting on drop action diff --git a/addons/disarming/functions/fnc_eventTargetFinish.sqf b/addons/disarming/functions/fnc_eventTargetFinish.sqf index 286b0d8c57..8cc67fa486 100644 --- a/addons/disarming/functions/fnc_eventTargetFinish.sqf +++ b/addons/disarming/functions/fnc_eventTargetFinish.sqf @@ -20,7 +20,6 @@ PARAMS_3(_caller,_target,_errorMsg); - if (_errorMsg != "") then { diag_log text format ["[ACE_Disarming] %1 - eventTargetFinish: %2", time, _this]; ["DisarmDebugCallback", [_caller], [_caller, _target, _errorMsg]] call EFUNC(common,targetEvent); diff --git a/addons/disarming/functions/fnc_openDisarmDialog.sqf b/addons/disarming/functions/fnc_openDisarmDialog.sqf index 44446dbee0..6da123b831 100644 --- a/addons/disarming/functions/fnc_openDisarmDialog.sqf +++ b/addons/disarming/functions/fnc_openDisarmDialog.sqf @@ -51,7 +51,7 @@ GVAR(disarmTarget) = _target; if (isNull GVAR(disarmTarget)) exitWith {ERROR("disarmTarget is null");}; - systemChat format ["Debug: Droping %1 from %2", _data, GVAR(disarmTarget)]; + TRACE_2("Debug: Droping %1 from %2",_data,GVAR(disarmTarget)); ["DisarmDropItems", [GVAR(disarmTarget)], [ACE_player, GVAR(disarmTarget), [_data]]] call EFUNC(common,targetEvent); false //not sure what this does @@ -67,8 +67,6 @@ GVAR(disarmTarget) = _target; {isNull _display} || {_player != ACE_player}) then { - systemChat "Debug: closeing dialog"; - [_pfID] call CBA_fnc_removePerFrameHandler; GVAR(disarmTarget) = objNull; if (!isNull _display) then {closeDialog 0;}; //close dialog if still open diff --git a/addons/disarming/functions/fnc_showItemsInListbox.sqf b/addons/disarming/functions/fnc_showItemsInListbox.sqf index 3b2d1bfc87..e040233b82 100644 --- a/addons/disarming/functions/fnc_showItemsInListbox.sqf +++ b/addons/disarming/functions/fnc_showItemsInListbox.sqf @@ -29,7 +29,7 @@ private "_classname"; _count = (_itemsCountArray select 1) select _forEachIndex; if (_classname != DUMMY_ITEM) then { //Don't show the dummy potato - + switch (true) do { case (isClass (configFile >> "CfgWeapons" >> _classname)): { _displayName = getText (configFile >> "CfgWeapons" >> _classname >> "displayName"); @@ -47,6 +47,9 @@ private "_classname"; _displayName = getText (configFile >> "CfgGlasses" >> _classname >> "displayName"); _picture = getText (configFile >> "CfgGlasses" >> _classname >> "picture"); }; + default { + ERROR(format ["[%1] - bad classname", _classname]); + }; }; _listBoxCtrl lbAdd format ["%1", _displayName]; From 00c37e0b9de5e8d23268efbccb3e92dd0ec773f2 Mon Sep 17 00:00:00 2001 From: licht-im-Norden87 Date: Thu, 9 Apr 2015 23:12:00 +0200 Subject: [PATCH 018/214] Update stringtable.xml --- addons/common/stringtable.xml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index bcd2b149aa..669e99582b 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -299,30 +299,37 @@ Akceptuj prośby Aceptar Peticiones Accept Requests + Anfrage akzeptieren Ignoruj prośby Rechazar Peticiones Decline Requests + Anfrage ablehnen Akceptuj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności. Acepta Peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones. Accept Requests send by other players. These can be requests to use / share equipment, perform certain actions. + Anfragen werden von anderen Mitspielen gestellt. Diese können Anfragen u.a. zum Teilen/Verwenden von Ausrüstungsgegenständen, oder auch zum Ausführen von Handlungen sein. Ignoruj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności. Rechazar Peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones. Decline Requests send by other players. These can be requests to use / share equipment, perform certain actions. + Anfragen werden von anderen Mitspielen gestellt. Diese können Anfragen u.a. zum Teilen/Verwenden von Ausrüstungsgegenständen, oder auch zum Ausführen von Handlungen sein. Feedback icons + Rückmeldungssymbole Select the position of or disable the feedback icons on your screen. These icons will show to provide extra feedback on your character status and actions performed. + Wähle die Position der Rückmeldungssymbole, oder deaktiviere sie. Diese Symbole stellen eine zusätzliche Rückmeldung über die Lage und Handlungen deines Soldaten dar. Progress bar location + Position der Fortschrittsanzeige Set the desired location of the progress bar on your screen. @@ -346,4 +353,4 @@ A banana is an edible fruit, botanically a berry, produced by several kinds of large herbaceous flowering plants in the genus Musa. - \ No newline at end of file + From 3c4656522ff2c8300042089e5c5c96c42f3e16cb Mon Sep 17 00:00:00 2001 From: licht-im-Norden87 Date: Thu, 9 Apr 2015 23:33:36 +0200 Subject: [PATCH 019/214] Stringtable: German additions --- addons/common/stringtable.xml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index 669e99582b..95d89be6c6 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -325,7 +325,7 @@ Select the position of or disable the feedback icons on your screen. These icons will show to provide extra feedback on your character status and actions performed. - Wähle die Position der Rückmeldungssymbole, oder deaktiviere sie. Diese Symbole stellen eine zusätzliche Rückmeldung über die Lage und Handlungen deines Soldaten dar. + Wähle die Position der Rückmeldungssymbole, oder deaktiviere sie. Diese Symbole stellen eine zusätzliche Rückmeldung über die Lage und Handlungen deines Soldaten da. Progress bar location @@ -333,24 +333,30 @@ Set the desired location of the progress bar on your screen. + Setze die gewünschte Position der Fortschrittsanzeige fest Hint Background color + Hintergrundfarbe der Hinweise The color of the background from the ACE hints. + Die Hintergrundfarbe der Ace-Hinweise. Hint text font color + Textfarbe der Hinweise The color of the text font from the ACE hints. This color is the default color for all text displayed through the ACE Hint system, if the hint text has no other color specified. Banana + Banane A banana is an edible fruit, botanically a berry, produced by several kinds of large herbaceous flowering plants in the genus Musa. + Die Banane ist eine essbare Frucht, biologisch betrachtet jedoch eine Beere. Sie wächst an unterschiedlichen, krautartigen Gewächsen aus der Familie der Musa. From ecf5eef638a9eb6da5db7b6b8806167f0fb132d5 Mon Sep 17 00:00:00 2001 From: licht-im-Norden87 Date: Thu, 9 Apr 2015 23:36:21 +0200 Subject: [PATCH 020/214] Update stringtable.xml --- addons/disposable/stringtable.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/disposable/stringtable.xml b/addons/disposable/stringtable.xml index 8b6c032961..9e2c816082 100644 --- a/addons/disposable/stringtable.xml +++ b/addons/disposable/stringtable.xml @@ -24,7 +24,7 @@ Preloaded Missile Dummy - Preloaded Missile Dummy + Vorgelade Racketennachbildung Preloaded Missile Dummy Preloaded Missile Dummy Preloaded Missile Dummy @@ -33,4 +33,4 @@ Заряженная ракетная пустышка - \ No newline at end of file + From a6f8e05cb8a203d138c6335e3f8fe48371295686 Mon Sep 17 00:00:00 2001 From: licht-im-Norden87 Date: Thu, 9 Apr 2015 23:37:26 +0200 Subject: [PATCH 021/214] Update stringtable.xml --- addons/dragging/stringtable.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/dragging/stringtable.xml b/addons/dragging/stringtable.xml index 1fca04fee1..c60f9a5bea 100644 --- a/addons/dragging/stringtable.xml +++ b/addons/dragging/stringtable.xml @@ -28,7 +28,7 @@ Item to heavy - Gegenstand zu schwer + Gegenstand ist zu schwer + Display text on jam + Afficher un text à la surchauffe Display a notification whenever your weapon gets jammed + Afficher un texte quand votre arme surchauffe Spare barrel @@ -153,4 +155,4 @@ Температура - \ No newline at end of file + From 87f5873c2aa625557009a604d672cd0cc71fd1dd Mon Sep 17 00:00:00 2001 From: Anthariel Date: Fri, 10 Apr 2015 05:50:08 +0200 Subject: [PATCH 080/214] Update stringtable.xml Added: French Translation (90%) Fixed: Uknow to Unknow (line 101) --- addons/optionsmenu/stringtable.xml | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/addons/optionsmenu/stringtable.xml b/addons/optionsmenu/stringtable.xml index 76407da435..88c6fa1461 100644 --- a/addons/optionsmenu/stringtable.xml +++ b/addons/optionsmenu/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -16,19 +16,23 @@ Fix Animation + Corriger l'Animation Reset All + Par défaut Rücksetzen Colors + Couleurs Farben цвета Colors Options + Options Optionen Opciones Opcje @@ -41,6 +45,7 @@ Values + Valeurs Yes @@ -75,33 +80,42 @@ Export + Exporter Open Export Menu + Ouvrir le menu d'exportation String input. Array. Seperate elements by using ,. + Array. Séparer les élements en utilisant ,. Number + Nombre - Uknown input type + Unknown input type + Input inconnue Save input + Sauvegarder les inputs Include Client Settings + Inclure les paramètres de client Exclude Client Settings + Exclure les paramètres de client Settings exported to clipboard + Paramètres exportés dans le presse-papier - \ No newline at end of file + From 627f8fb41b501c7396ce8bd0dd2bf36fb859fe90 Mon Sep 17 00:00:00 2001 From: Anthariel Date: Fri, 10 Apr 2015 05:53:29 +0200 Subject: [PATCH 081/214] Update stringtable.xml Added: French Translation (100%) --- addons/nametags/stringtable.xml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/addons/nametags/stringtable.xml b/addons/nametags/stringtable.xml index 622df44aca..88e09c9601 100644 --- a/addons/nametags/stringtable.xml +++ b/addons/nametags/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -60,6 +60,7 @@ Show vehicle crew info + Afficher les informations de l'équipage du véhicule Zeige Fahrzeugbesatzung Mostrar tripulantes Pokaż informacje o załodze pojazdu @@ -68,14 +69,17 @@ Show name tags for AI units + Afficher les noms pour les unités IA Show SoundWaves (requires player names) + Afficher l'ondulation audio (requiert les noms des joueurs) Zeigen Schallwelle (benötigt spielernamen) Mostrar onda sonora (requiere Mostrar nombres de jugadores) Default Nametag Color (Non Group Members) + Couleur par défaut pour les noms (unités non groupées) - \ No newline at end of file + From 0d8145073fc1617ed26472ef078333b788836b81 Mon Sep 17 00:00:00 2001 From: Anthariel Date: Fri, 10 Apr 2015 05:54:45 +0200 Subject: [PATCH 082/214] Update stringtable.xml Added: French Translation (100%) --- addons/movement/stringtable.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/addons/movement/stringtable.xml b/addons/movement/stringtable.xml index d31896acaa..6dc8cd5c15 100644 --- a/addons/movement/stringtable.xml +++ b/addons/movement/stringtable.xml @@ -28,6 +28,7 @@ Climb + Monter Klettern Wspinaczka Trepar @@ -36,6 +37,7 @@ Can't climb here + Je ne peut pas monter ici Kann hier nicht klettern Nie możesz wspiąć się tutaj No se puede trepar aquí @@ -43,4 +45,4 @@ Не можете подняться здесь - \ No newline at end of file + From d6b2d13a727e1abf5bab0cc95be0c55af99c83ed Mon Sep 17 00:00:00 2001 From: Anthariel Date: Fri, 10 Apr 2015 06:00:22 +0200 Subject: [PATCH 083/214] Update stringtable.xml Added: French Translation (95%) --- addons/microdagr/stringtable.xml | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/addons/microdagr/stringtable.xml b/addons/microdagr/stringtable.xml index 772a7a172f..e2ec9b20d9 100644 --- a/addons/microdagr/stringtable.xml +++ b/addons/microdagr/stringtable.xml @@ -4,21 +4,27 @@ MicroDAGR GPS + GPS MicroDAGR MicroDAGR advanced GPS receiver + MicroDAGR un GPS avancé Angular Unit: + Unité angulaire: Mils + Mils Show Waypoints On Map: + Afficher les points de passage sur la carte : Degrees + Degrés On @@ -44,35 +50,45 @@ Enter Grid Cords: + Entrer Grid Cords : Name of [%1] + Nom de [%1] MGRS-New + Nouveau MGRS WGD + WGD Range: + Distance : Reichweite: Compass Direction + Direction de la boussole Mark + Marqueur Waypoints + Point de passage Wegpunkte Connect To + Connexion a Settings + Paramètres Einstellungen Configuración @@ -81,6 +97,7 @@ Add + Ajouter Delete @@ -95,15 +112,19 @@ Toggle MicroDAGR Display Mode + Basculer sur l'affichage du MicroDAGR Show MicoDAGR + Afficher le MicroDAGR Configure MicroDAGR + Configurer le MicroDAGR Close MicroDAGR + Fermer le MicroDAGR - \ No newline at end of file + From 95e53fd1bf48d006e7b7db0541749f6ae1c65f25 Mon Sep 17 00:00:00 2001 From: Anthariel Date: Fri, 10 Apr 2015 06:20:04 +0200 Subject: [PATCH 084/214] Update stringtable.xml Added: French Translations (~85%) --- addons/medical/stringtable.xml | 76 ++++++++++++++++++++++++++++++++-- 1 file changed, 72 insertions(+), 4 deletions(-) diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index ec01d3b626..d92166cd52 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -1,10 +1,11 @@  - + Inject Atropine + Injecter de l'atropine Inject Epinephrine @@ -44,12 +45,15 @@ Transfuse Plasma + Transfuser du Plasma Transfuse Saline + Transfuser de la Saline Apply Tourniquet + Appliquer un garrot Bandage @@ -161,6 +165,7 @@ Injecting Atropine ... + Injection d'Atropine ... Transfusing Blood ... @@ -176,9 +181,11 @@ Transfusing Saline ... + Transfusion de saline ... Transfusing Plasma ... + Transfusion de Plasma ... Bandaging ... @@ -194,6 +201,7 @@ Applying Tourniquet ... + Mise en place du garrot Medical @@ -208,74 +216,94 @@ Field Dressing + Bandage rapide Packing Bandage Elastic Bandage + Bandage Élastique QuikClot Check Pulse + Vérifier les pulsations Check Blood Pressure + Vérifier la pression sanguine Triage Card Tourniquet + Garrot Remove Tourniquet + Enlever le garrot Give Blood IV (1000ml) + Mettre une poche de Sang IV (1000ml) Give Blood IV (500ml) + Mettre une poche de Sang IV (500ml) Give Blood IV (250ml) + Mettre une poche de Sang IV (250ml) Give Plasma IV (1000ml) + Mettre une poche de Plasma IV (1000ml) Give Plasma IV (500ml) + Mettre une poche de Plasma IV (500ml) Give Plasma IV (250ml) + Mettre une poche de Plasma IV (250ml) Give Saline IV (1000ml) + Mettre une poche de Saline IV (1000ml) Give Saline IV (500ml) + Mettre une poche de Saline IV (500ml) Give Saline IV (250ml) + Mettre une poche de Saline IV (250ml) Minor + Mineur Delayed + Délayé Immediate + Immédiat Deceased + Décédé None + Aucun Normal breathing @@ -330,11 +358,12 @@ Tourniquet [CAT] Жгут Torniquete [CAT] - Garot [CAT] + Garrot [CAT] Opaska uciskowa [CAT] Receiving IV [%1ml] + Réception IV [%1ml] @@ -633,31 +662,37 @@ Surgical Kit + Kit de chirurgien Хирургический набор Kit Quirúrgico Surgical Kit for in field advanced medical treatment + Kit de chirurgien pour les soins avancés sur le terrain Набор для хирургической помощи в полевых условиях Kit Quirúrgico para el tratamiento avanzado en el campo de batalla + Surgical Kit for in field advanced medical treatment Surgical Kit for in field advanced medical treatment Набор для хирургической помощи в полевых условиях Kit Quirúrgico para el tratamiento avanzado en el campo de batalla Bodybag + Sac à corps Мешок для трупов Bolsa para cadáveres A bodybag for dead bodies + Un sac pour les cadavres Мешок для упаковки трупов Bolsa para cadáveres A bodybag for dead bodies + Un sac pour les cadavres Мешок для упаковки трупов Bolsa para cadáveres @@ -665,126 +700,151 @@ Blood Pressure + Pression sanguine Артериальное давление Presión Arterial Checking Blood Pressure.. + Vérification de la pression sanguine Проверка артериального давления... Comprobando Presión Arterial... You checked %1 + Vous diagnostiquez %1 Вы осмотрели раненого %1 Examinando a %1 You find a blood pressure of %2/%3 + Vous pris une pression sanguine de %2/%3 Артериальное давление %2/%3 La Presión Arterial es %2/%3 You find a low blood pressure + Vous avez trouvé une pression sanguine base Давление низкое La Presión Arterial es baja You find a normal blood pressure + Vous avez trouvé une pression sanguine normale Давление нормальное La Presión Arterial es normal You find a high blood pressure + Vous avez trouvé une forte pression sanguine Давление высокое La Presión Arterial es alta You find no blood pressure + Vous n'avez pas trouvé de pression sanguine Давления нет No hay Presión Arterial You fail to find a blood pressure + Vous avez raté le diagnostique de la pression sanguine Артериальное давление не определяется No puedes encontrar Presión Arterial Pulse + Pulsations Пульс Pulso Checking Heart Rate.. + Diagnostique de la fréquence cardiaque Проверка пульса... Comprobando Pulso... You checked %1 + Vous avez Diagnostiqué %1 Вы осмотрели раненого %1 Examinando a %1 You find a Heart Rate of %2 + Vous avez trouvé une fréquence cardiaque de %2 Пульс %2 уд./мин. El Pulso es %2 - You find a weak Heart Rate + You find a faible fréquence cardiaque + Vous avez trouvé une fréquence cardiaque de %2 Пульс слабый El Pulso es débil You find a strong Heart Rate + Vous avez trouvé une forte fréquence cardiaque Пульс учащенный El Pulso está acelerado You find a normal Heart Rate + Vous avez trouvé une fréquence cardiaque normale Пульс в норме El Pulso es bueno You find no Heart Rate + Vous n'avez trouvé de fréquence cardiaque Пульс не прощупывается No tiene Pulso Response + Réponse Реакция Reacciona You check response of patient + Vous vérifiez la réponse du patient Вы проверяете реакцию раненого Compruebas si el paciente reacciona %1 is responsive + %1 est conscient %1 реагирует на раздражители %1 ha reaccionado %1 is not responsive + %1 n'est pas conscient %1 не реагирует %1 no reacciona You checked %1 + Vous diagnostiqué %1 Вы осмотрели раненого %1 Examinas a %1 Bandaged + Bandé Повязка наложена Vendado You bandage %1 (%2) + Vous bandez %1 (%2) Вы перевязали раненого %1 (%2) Aplicas vendaje a %1 en %2 %1 is bandaging you + %1 vous bande %1 перевязывает вас %1 te está vendando @@ -875,30 +935,38 @@ Unload patient + Décharger le patient Load patient + Charger le patient Place body in bodybag + Placer le corps dans le sac à cadavre Placing body in bodybag + Mise en sac du corps dans le sac à cadavre %1 has bandaged patient + %1 à bandé un patient %1 used %2 + %1 utilise %2 %1 has given an IV + %1 à donné un IV %1 applied a tourniquet + %1 à appliqué un garrot - \ No newline at end of file + From 0c851a6d9a30af526f5b4222186a6c71981c23ab Mon Sep 17 00:00:00 2001 From: Anthariel Date: Fri, 10 Apr 2015 06:22:26 +0200 Subject: [PATCH 085/214] Update stringtable.xml Added: French Translations (100%) --- addons/magazinerepack/stringtable.xml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/addons/magazinerepack/stringtable.xml b/addons/magazinerepack/stringtable.xml index d8fd5ca177..dbf49b7a1a 100644 --- a/addons/magazinerepack/stringtable.xml +++ b/addons/magazinerepack/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -76,18 +76,21 @@ Repacking Finished + Réorganisation terminé Wiederverpacken Fertig Reembalaje Finalizado Repacking Interrupted + Réorganisation Interrompue Umpacken Unterbrochen Reempaque Interrupted %1 Full and %2 Partial + %1 Complet et %2 Partiellement %1 Vollständigen und %2 Teilweisen %1 Total y %2 Parcial - \ No newline at end of file + From 523417ba3cace13d1209b18634af978ae7e911ca Mon Sep 17 00:00:00 2001 From: Anthariel Date: Fri, 10 Apr 2015 06:23:13 +0200 Subject: [PATCH 086/214] Update stringtable.xml Added: French Translation (100%) --- addons/logistics_wirecutter/stringtable.xml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/addons/logistics_wirecutter/stringtable.xml b/addons/logistics_wirecutter/stringtable.xml index cf6e96c1aa..14b85a4eb6 100644 --- a/addons/logistics_wirecutter/stringtable.xml +++ b/addons/logistics_wirecutter/stringtable.xml @@ -1,14 +1,16 @@  - + Wirecutter + Coupe clôture Drahtschneider Wirecutter Wirecutter + Coupe clôture Cut Fence @@ -47,4 +49,4 @@ Забор вырезан - \ No newline at end of file + From 0191abc5290f51acd3accad50bbf2c12e3689acf Mon Sep 17 00:00:00 2001 From: Anthariel Date: Fri, 10 Apr 2015 06:25:05 +0200 Subject: [PATCH 087/214] Update stringtable.xml Added: French Translation (100%) --- addons/laserpointer/stringtable.xml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/addons/laserpointer/stringtable.xml b/addons/laserpointer/stringtable.xml index 87b36618a6..682d0b079b 100644 --- a/addons/laserpointer/stringtable.xml +++ b/addons/laserpointer/stringtable.xml @@ -4,22 +4,25 @@ Laser Pointer (red) + Pointeur laser (rouge) Laserpointer (rot) Laser Pointer (green) + Pointeur laser (vert) Laserpointer (grün) Emits visible light. + Diffuse un rayon lumineux visible. Strahlt sichtbares Licht aus. <t color='#9cf953'>Use: </t>Turn Laser ON/OFF <t color='#9cf953'>Použití: </t>Zapnout/vypnout laser - <t color='#9cf953'>Utiliser : </t>laser on/off + <t color='#9cf953'>Utiliser : </t>laser allumé/éteint <t color='#9cf953'>Benutzen: </t>Laser EIN/AUS <t color='#9cf953'>Uso: </t>Laser ON/OFF <t color='#9cf953'>Użyj: </t>wł./wył. lasera From dd8f9cd8d625b5dca0a73c08c466afad57451b26 Mon Sep 17 00:00:00 2001 From: Anthariel Date: Fri, 10 Apr 2015 06:27:04 +0200 Subject: [PATCH 088/214] Update stringtable.xml Added: French Translation (100%) --- addons/inventory/stringtable.xml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/addons/inventory/stringtable.xml b/addons/inventory/stringtable.xml index 9ca01373d1..d3d06a7808 100644 --- a/addons/inventory/stringtable.xml +++ b/addons/inventory/stringtable.xml @@ -1,12 +1,14 @@  - + Make Inventory Display Bigger + Augmente la taille d'affichage de l'inventaire Normally inventory display is scaled by UI size. This allows scaling the Inventory UI size up, but doesn't increase font size allowing more rows displayed. + Normalement, l'inventaire est automatiquement messuré par la taille de l'interface de l'utilisateur. Cette option vous permet d'augmenter la taille d'affichage de l'inventaire, cependant, cette option n'augmente pas la police d'écriture et le nombre de place. - \ No newline at end of file + From b5841f8f09efdd7ddbad9f5db315dd6b0a2ba7af Mon Sep 17 00:00:00 2001 From: Anthariel Date: Fri, 10 Apr 2015 06:28:59 +0200 Subject: [PATCH 089/214] Update stringtable.xml Added: French Translation (100%) --- addons/interaction/stringtable.xml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/addons/interaction/stringtable.xml b/addons/interaction/stringtable.xml index dcd87056e2..b16839ccd2 100644 --- a/addons/interaction/stringtable.xml +++ b/addons/interaction/stringtable.xml @@ -1,30 +1,38 @@  - + Interactions + Interactions Torso + Torse Head + Tête Left Arm + Bras Gauche Right Arm + Bras Droit Left Leg + Jambe Gauche Right Leg + Jambe Droite Weapon + Arme Interaction Menu @@ -647,6 +655,7 @@ Interact + Intéragir Interagiere Interakce Взаимодействовать @@ -655,6 +664,7 @@ Passengers + Passagers From 81122e0839e2873b2266b8a0c09334e0ac38aa7d Mon Sep 17 00:00:00 2001 From: Anthariel Date: Fri, 10 Apr 2015 06:30:49 +0200 Subject: [PATCH 090/214] Update stringtable.xml Added: French Translation (100%) --- addons/interact_menu/stringtable.xml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/addons/interact_menu/stringtable.xml b/addons/interact_menu/stringtable.xml index 6e5ce8fdb2..41851ffa55 100644 --- a/addons/interact_menu/stringtable.xml +++ b/addons/interact_menu/stringtable.xml @@ -1,21 +1,26 @@  - + Always display cursor for self interaction + Toujours afficher le curseur pour les interactions sur soi-même Interact Key + Touche d'interaction Self Interaction Key + Touche d'Interaction sur soi-même Self Actions + Actions sur soi-même Vehicle Actions + Actions sur les véhicules - \ No newline at end of file + From 04bf321099a28c32d4bac48eb1e7d7e00b8b152f Mon Sep 17 00:00:00 2001 From: Anthariel Date: Fri, 10 Apr 2015 06:31:42 +0200 Subject: [PATCH 091/214] Update stringtable.xml Added: French Translation (100%) --- addons/hearing/stringtable.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index 7f6110915a..81f5e2ce6d 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -100,7 +100,8 @@ Disable ear ringing + Désactiver les tintements d'oreille Desactivar zumbido de oídos - \ No newline at end of file + From 396f6bd0ea924e7aa45f07c1de6b137962d98809 Mon Sep 17 00:00:00 2001 From: Anthariel Date: Fri, 10 Apr 2015 06:34:36 +0200 Subject: [PATCH 092/214] Update AUTHORS.txt --- AUTHORS.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.txt b/AUTHORS.txt index b931d774ac..2f84f52daf 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -30,6 +30,7 @@ ACCtomeek Adanteh aeroson Aggr094 +Anthariel BlackQwar Brakoviejo Codingboy From 16b2311376358587f03123b129050d99e9fae700 Mon Sep 17 00:00:00 2001 From: Asgar Date: Fri, 10 Apr 2015 14:21:55 +0200 Subject: [PATCH 093/214] Added German translation for a couple of things, --- addons/medical/stringtable.xml | 1902 +++++++++++++------------ addons/microdagr/stringtable.xml | 18 +- addons/nametags/stringtable.xml | 4 +- addons/optionsmenu/stringtable.xml | 6 +- addons/reload/stringtable.xml | 10 +- addons/winddeflection/stringtable.xml | 70 +- 6 files changed, 1062 insertions(+), 948 deletions(-) diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index a5dfdbba49..7341191558 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -1,974 +1,1056 @@  - + - - - Inject Atropine - Atropin - - - Inject Epinephrine - Epinephrine injizieren - Inyectar Epinefrina - Wtrzyknij adrenalinę - Aplikovat Adrenalin - Ввести андреналил - Adrénaline - Adrenalin - Injetar Epinefrina - Inietta Epinefrina - - - Inject Morphine - Morphin injizieren - Inyectar Morfina - Wstrzyknij morfinę - Aplikovat Morfin - Ввести морфин - Morphine - Morfium - Injetar Morfina - Inietta Morfina - - - Transfuse Blood - Bluttransfusion - Transfundir sangre - Przetocz krew - Transfúze krve - Перелить кровь - Transfusion - Infúzió - Transfundir Sangue - Effettua Trasfusione - - - Transfuse Plasma - Plasmatransfusion - - - Transfuse Saline - Salzlösungtransfusion - - - Apply Tourniquet - Aderpresse anwenden - - - Bandage - Verbinden - Venda - Bandaż - Obvázat - Pansement - Benda - Kötözés - Atadura - Перевязать - - - Bandage Head - Kopf verbinden - Vendar la cabeza - Bandażuj głowę - Obvázat hlavu - Перевязать голову - Pansement Tête - Fej kötözése - Atar Cabeça - Benda la testa - - - Bandage Torso - Torso verbinden - Vendar el torso - Bandażuj tors - Obvázat hruď - Перевязать торс - Pansement Torse - Felsőtest kötözése - Atar Tronco - Benda il torso - - - Bandage Left Arm - Arm links verbinden - Vendar el brazo izquierdo - Bandażuj lewe ramię - Obvázat levou ruku - Перевязать левую руку - Pansement Bras Gauche - Bal kar kötözése - Atar Braço Esquerdo - Benda il braccio sinistro - - - Bandage Right Arm - Arm rechts verbinden - Vendar el brazo derecho - Bandażuj prawe ramię - Obvázat pravou ruku - Перевязать правую руку - Pansement Bras Droit - Jobb kar kötözése - Atar Braço Direito - Benda il braccio destro - - - Bandage Left Leg - Bein links verbinden - Vendar la pierna izquierda - Bandażuj lewą nogę - Obvázat levou nohu - Перевязать левую ногу - Pansement Jambe Gauche - Bal láb kötözése - Atar Perna Esquerda - Benda la gamba sinistra - - - Bandage Right Leg - Bein rechts verbinden - Vendar la pierna derecha - Bandażuj prawą nogę - Obvázat pravou nohu - Перевязать правую ногу - Pansement Jambe Droite - Jobb láb kötözése - Atar Perna Direita - Benda la gamba destra - - - Injecting Morphine ... - Morphin injizieren ... - Inyectando Morfina ... - Wstrzykiwanie morfiny ... - Aplikuju Morfin ... - Введение морфина... - Injection de Morphine... - Morfium beadása... - Injetando Morfina ... - Inietto la morfina ... - - - Injecting Epinephrine ... - Epinephrin injizieren ... - Inyectando Epinefrina ... - Wstrzykiwanie adrenaliny ... - Aplikuju Adrenalin ... - Введение андреналина - Injection d'Adrénaline ... - Adrenalin beadása... - Injetando Epinefrina ... - Inietto l'epinefrina ... - - - Injecting Atropine ... - Atropin injizieren ... - - - Transfusing Blood ... - Bluttransfusion ... - Realizando transfusión ... - Przetaczanie krwi ... - Probíhá transfúze krve ... - Переливание крови... - Transfusion Sanguine ... - Infúzió... - Transfundindo Sangue ... - Effettuo la trasfusione ... - - - Transfusing Saline ... - Sallösungtransfusion ... - - - Transfusing Plasma ... - Plasmatransfusion ... - - - Bandaging ... - Verbinden ... - Vendando ... - Bandażowanie ... - Obvazuji ... - Pansement ... - Sto applicando la benda ... - Bekötözés... - Atando ... - Перевязывание.... - - - Applying Tourniquet ... - Aderpresse ... - - - Medical - Zdravotní - Médical - Sanitäter - Medico - Medyczne - Médico - Медик - Médico - - - Field Dressing - - - Packing Bandage - - - Elastic Bandage - - - QuikClot - - - Check Pulse - Puls überprüfen - - - Check Blood Pressure - Blutdruck messen - - - Triage Card - Triage Karte - - - Tourniquet - Tourniquet - - - Remove Tourniquet - Entferne Tourniquet - - - Give Blood IV (1000ml) - - - Give Blood IV (500ml) - - - Give Blood IV (250ml) - - - Give Plasma IV (1000ml) - - - Give Plasma IV (500ml) - - - Give Plasma IV (250ml) - - - Give Saline IV (1000ml) - - - Give Saline IV (500ml) - - - Give Saline IV (250ml) - - - Minor - Gering - - - Delayed - - - Immediate - - - Deceased - - - None - - - Normal breathing - Дыхание в норме - Respiración normal - Respiration Normale - Normalny oddech - - - No breathing - Дыхания нет - No respira - Apnée - Brak oddechu - - - Difficult breathing - Дыхание затруднено - Dificultad para respirar - Difficultée Respiratoire - Trudności z oddychaniem - - - Almost no breathing - Дыхания почти нет - Casi sin respirar - Respiration Faible - Prawie brak oddechu - - - Bleeding - Кровотечение - Sangrando - Seignement - Krwawienie zewnętrzne - - - In Pain - Испытывает боль - Con Dolor - A De La Douleur - W bólu - - - Lost a lot of Blood - Большая кровопотеря - Mucha Sangre perdida - A Perdu Bcp de Sang - Stracił dużo krwi - - - Tourniquet [CAT] - Жгут - Torniquete [CAT] - Garot [CAT] - Opaska uciskowa [CAT] - - - Receiving IV [%1ml] - - - - Bandage (Basic) - Повязка (обычная) - Vendaje (Básico) - Bandage (Standard) - Bandaż (jałowy) - - - Used to cover a wound - Для перевязки ран - Utilizado para cubrir una herida - Utilisé Pour Couvrir Une Blessure - Używany w celu przykrycia i ochrony miejsca zranienia - - - A dressing, that is a particular material used to cover a wound, which is applied over the wound + + + Inject Atropine + Atropin + + + Inject Epinephrine + Epinephrine injizieren + Inyectar Epinefrina + Wtrzyknij adrenalinę + Aplikovat Adrenalin + Ввести андреналил + Adrénaline + Adrenalin + Injetar Epinefrina + Inietta Epinefrina + + + Inject Morphine + Morphin injizieren + Inyectar Morfina + Wstrzyknij morfinę + Aplikovat Morfin + Ввести морфин + Morphine + Morfium + Injetar Morfina + Inietta Morfina + + + Transfuse Blood + Bluttransfusion + Transfundir sangre + Przetocz krew + Transfúze krve + Перелить кровь + Transfusion + Infúzió + Transfundir Sangue + Effettua Trasfusione + + + Transfuse Plasma + Plasmatransfusion + + + Transfuse Saline + Salzlösungtransfusion + + + Apply Tourniquet + Aderpresse anwenden + + + Bandage + Verbinden + Venda + Bandaż + Obvázat + Pansement + Benda + Kötözés + Atadura + Перевязать + + + Bandage Head + Kopf verbinden + Vendar la cabeza + Bandażuj głowę + Obvázat hlavu + Перевязать голову + Pansement Tête + Fej kötözése + Atar Cabeça + Benda la testa + + + Bandage Torso + Torso verbinden + Vendar el torso + Bandażuj tors + Obvázat hruď + Перевязать торс + Pansement Torse + Felsőtest kötözése + Atar Tronco + Benda il torso + + + Bandage Left Arm + Arm links verbinden + Vendar el brazo izquierdo + Bandażuj lewe ramię + Obvázat levou ruku + Перевязать левую руку + Pansement Bras Gauche + Bal kar kötözése + Atar Braço Esquerdo + Benda il braccio sinistro + + + Bandage Right Arm + Arm rechts verbinden + Vendar el brazo derecho + Bandażuj prawe ramię + Obvázat pravou ruku + Перевязать правую руку + Pansement Bras Droit + Jobb kar kötözése + Atar Braço Direito + Benda il braccio destro + + + Bandage Left Leg + Bein links verbinden + Vendar la pierna izquierda + Bandażuj lewą nogę + Obvázat levou nohu + Перевязать левую ногу + Pansement Jambe Gauche + Bal láb kötözése + Atar Perna Esquerda + Benda la gamba sinistra + + + Bandage Right Leg + Bein rechts verbinden + Vendar la pierna derecha + Bandażuj prawą nogę + Obvázat pravou nohu + Перевязать правую ногу + Pansement Jambe Droite + Jobb láb kötözése + Atar Perna Direita + Benda la gamba destra + + + Injecting Morphine ... + Morphin injizieren ... + Inyectando Morfina ... + Wstrzykiwanie morfiny ... + Aplikuju Morfin ... + Введение морфина... + Injection de Morphine... + Morfium beadása... + Injetando Morfina ... + Inietto la morfina ... + + + Injecting Epinephrine ... + Epinephrin injizieren ... + Inyectando Epinefrina ... + Wstrzykiwanie adrenaliny ... + Aplikuju Adrenalin ... + Введение андреналина + Injection d'Adrénaline ... + Adrenalin beadása... + Injetando Epinefrina ... + Inietto l'epinefrina ... + + + Injecting Atropine ... + Atropin injizieren ... + + + Transfusing Blood ... + Bluttransfusion ... + Realizando transfusión ... + Przetaczanie krwi ... + Probíhá transfúze krve ... + Переливание крови... + Transfusion Sanguine ... + Infúzió... + Transfundindo Sangue ... + Effettuo la trasfusione ... + + + Transfusing Saline ... + Sallösungtransfusion ... + + + Transfusing Plasma ... + Plasmatransfusion ... + + + Bandaging ... + Verbinden ... + Vendando ... + Bandażowanie ... + Obvazuji ... + Pansement ... + Sto applicando la benda ... + Bekötözés... + Atando ... + Перевязывание.... + + + Applying Tourniquet ... + Aderpresse ... + + + Medical + Zdravotní + Médical + Sanitäter + Medico + Medyczne + Médico + Медик + Médico + + + Field Dressing + Verbandpäckchen + + + Packing Bandage + Mullbinde + + + Elastic Bandage + Elastischer Verband + + + QuikClot + Gerinnungsmittel + + + Check Pulse + Puls überprüfen + + + Check Blood Pressure + Blutdruck messen + + + Triage Card + Triage Karte + + + Tourniquet + Tourniquet + + + Remove Tourniquet + Entferne Tourniquet + + + Give Blood IV (1000ml) + Bluttransfusion IV (1000ml) + + + Give Blood IV (500ml) + Bluttransfusion IV (500ml) + + + Give Blood IV (250ml) + Bluttransfusion IV (250ml) + + + Give Plasma IV (1000ml) + Plasmatransfusion IV (1000ml) + + + Give Plasma IV (500ml) + Plasmatransfusion IV (500ml) + + + Give Plasma IV (250ml) + Plasmatransfusion IV (250ml) + + + Give Saline IV (1000ml) + Kochsaltzlösung IV (1000ml) + + + Give Saline IV (500ml) + Kochsaltzlösung IV (500ml) + + + Give Saline IV (250ml) + Kochsaltzlösung IV (250ml) + + + Minor + Gering + + + Delayed + Verzögert + + + Immediate + Sofort + + + Deceased + tot + + + None + Keine + + + Normal breathing + Дыхание в норме + Respiración normal + Respiration Normale + Normalny oddech + Normale Atmung + + + No breathing + Дыхания нет + No respira + Apnée + Brak oddechu + Keine Atmung + + + Difficult breathing + Дыхание затруднено + Dificultad para respirar + Difficultée Respiratoire + Trudności z oddychaniem + Schwere Atmung + + + Almost no breathing + Дыхания почти нет + Casi sin respirar + Respiration Faible + Prawie brak oddechu + Fast keine Atmung + + + Bleeding + Кровотечение + Sangrando + Seignement + Krwawienie zewnętrzne + Blutet + + + In Pain + Испытывает боль + Con Dolor + A De La Douleur + W bólu + Hat Schmerzen + + + Lost a lot of Blood + Большая кровопотеря + Mucha Sangre perdida + A Perdu Bcp de Sang + Stracił dużo krwi + Große Menge Blut verloren + + + Tourniquet [CAT] + Жгут + Torniquete [CAT] + Garot [CAT] + Opaska uciskowa [CAT] + Aderpresse [CAT] + + + Receiving IV [%1ml] + Erhalte IV [%1ml] + + + Bandage (Basic) + Повязка (обычная) + Vendaje (Básico) + Bandage (Standard) + Bandaż (jałowy) + Bandage (Standard) + + + Used to cover a wound + Для перевязки ран + Utilizado para cubrir una herida + Utilisé Pour Couvrir Une Blessure + Używany w celu przykrycia i ochrony miejsca zranienia + Verwendet um Wunden abzudecken + + + A dressing, that is a particular material used to cover a wound, which is applied over the wound once bleeding has been stemmed. - Повязка, накладываемая поверх раны после остановки кровотечения. - Un apósito, material específico utilizado para cubrir una herida, se aplica sobre la herida una vez + Повязка, накладываемая поверх раны после остановки кровотечения. + Un apósito, material específico utilizado para cubrir una herida, se aplica sobre la herida una vez ha dejado de sangrar. - C'est un bandage, qui est fait d'un matériel spécial utiliser pour couvrir une blessure, qui peut + C'est un bandage, qui est fait d'un matériel spécial utiliser pour couvrir une blessure, qui peut etre appliquer des que le seignement as ete stopper. - Opatrunek materiałowy, używany do przykrywania ran, zakładany na ranę po zatamowaniu krwawienia. + Opatrunek materiałowy, używany do przykrywania ran, zakładany na ranę po zatamowaniu krwawienia. - - - Packing Bandage - Тампонирующая повязка - Vendaje Compresivo - Bandage Mèche - Bandaż (uciskowy) - - - Used to pack medium to large wounds and stem the bleeding - Для тампонирования ран среднего и большого размера и остановки кровотечения. - Se utiliza para vendar heridas medianas y grandes y detener el sangrado - Utiliser pour remplire la cavité créé dans une blessure moyenne et grande. - Używany w celu opatrywania średnich i dużych ran oraz tamowania krwawienia. - - - A bandage used to pack the wound to stem bleeding and facilitate wound healing. Packing a wound is + + + Packing Bandage + Тампонирующая повязка + Vendaje Compresivo + Bandage Mèche + Bandaż (uciskowy) + Mullbinde + + + Used to pack medium to large wounds and stem the bleeding + Для тампонирования ран среднего и большого размера и остановки кровотечения. + Se utiliza para vendar heridas medianas y grandes y detener el sangrado + Utiliser pour remplire la cavité créé dans une blessure moyenne et grande. + Używany w celu opatrywania średnich i dużych ran oraz tamowania krwawienia. + Verwendet um mittlere bis große Wunden abzudecken und Blutungen zu stoppen + + + A bandage used to pack the wound to stem bleeding and facilitate wound healing. Packing a wound is an option in large polytrauma injuries. - Повязка для тампонирования раны, остановки кровотечения и лучшего заживления. При тяжелых + Повязка для тампонирования раны, остановки кровотечения и лучшего заживления. При тяжелых сочетанных ранениях возможно тампонирование раны. - Se utiliza para detener la hemorragia de una herida y favorecer su cicatrización. Se usa en grandes + Se utiliza para detener la hemorragia de una herida y favorecer su cicatrización. Se usa en grandes lesiones o politraumatismos. - Un bandage servent a etre inseré dans les blessure pour éponger le seignement et faciliter la + Un bandage servent a etre inseré dans les blessure pour éponger le seignement et faciliter la guerrison. Ce bandage est une option pour soigner les lession de politrauma. - Opatrunek stosowany w celu zatrzymania krwawienia i osłony większych ran. - - - Bandage (Elastic) - Повязка (давящая) - Vendaje (Elástico) - Bandage (Élastique) - Bandaż (elastyczny) - - - Bandage kit, Elastic - Давящая повязка - Vendaje (Elástico) - Bandage Compressif Élastique - Zestaw bandaży elastycznych. - - - - - Ce bandage peut etre utiliser pour compresser la plaie afin de ralentire le seignement et assurer la + Opatrunek stosowany w celu zatrzymania krwawienia i osłony większych ran. + + + Bandage (Elastic) + Повязка (давящая) + Vendaje (Elástico) + Bandage (Élastique) + Bandaż (elastyczny) + Bandage (Elastisch) + + + Bandage kit, Elastic + Давящая повязка + Vendaje (Elástico) + Bandage Compressif Élastique + Zestaw bandaży elastycznych. + Elastische Binde (Kompressionsbinde) + + + + + Ce bandage peut etre utiliser pour compresser la plaie afin de ralentire le seignement et assurer la tenue du bandage lors de mouvment. - Elastyczna opaska podtrzymująca opatrunek oraz usztywniająca okolice stawów. - Brinda una compresión uniforme y ofrece soporte extra a una zona lesionada - - - Tourniquet (CAT) - Жгут - Torniquete (CAT) - Garot (CAT) - Staza (typ. CAT) - - - Slows down blood loss when bleeding - Уменьшает кровопотерю при кровотечении. - Reduce la velocidad de pérdida de sangre - Ralentit le seignement - Zmniejsza ubytek krwi z kończyn w przypadku krwawienia. - - - A constricting device used to compress venous and arterial circulation in effect inhibiting or + Elastyczna opaska podtrzymująca opatrunek oraz usztywniająca okolice stawów. + Brinda una compresión uniforme y ofrece soporte extra a una zona lesionada + + + Tourniquet (CAT) + Жгут + Torniquete (CAT) + Garot (CAT) + Staza (typ. CAT) + Aderpresse (CAT) + + + Slows down blood loss when bleeding + Уменьшает кровопотерю при кровотечении. + Reduce la velocidad de pérdida de sangre + Ralentit le seignement + Zmniejsza ubytek krwi z kończyn w przypadku krwawienia. + Verringert den Blutverlust während einer Blutung + + + A constricting device used to compress venous and arterial circulation in effect inhibiting or slowing blood flow and therefore decreasing loss of blood. - Жгут используется для прижатия сосудов, приводящего к остановке или значительному уменьшению + Жгут используется для прижатия сосудов, приводящего к остановке или значительному уменьшению кровотечения и сокращению кровопотери. - Dispositivo utilizado para eliminar el pulso distal y de ese modo controlar la pérdida de sangre + Dispositivo utilizado para eliminar el pulso distal y de ese modo controlar la pérdida de sangre - Un appareil servent a compresser les artères et veines afin de reduire la perte de sang. - Opaska zaciskowa CAT służy do tamowanie krwotoków w sytuacji zranienia kończyn z masywnym + Un appareil servent a compresser les artères et veines afin de reduire la perte de sang. + Opaska zaciskowa CAT służy do tamowanie krwotoków w sytuacji zranienia kończyn z masywnym krwawieniem tętniczym lub żylnym. - - - Morphine autoinjector - Морфин в автоматическом шприце - Morfina auto-inyectable - Auto-injecteur de Morphine - Autostrzykawka z morfiną - - - Used to combat moderate to severe pain experiences - Для снятия средних и сильных болевых ощущений. - Usado para combatir los estados dolorosos moderados a severos - Utiliser pour contrer les douleurs modéré à severes. - Morfina. Ma silne działanie przeciwbólowe. - - - An analgesic used to combat moderate to severe pain experiences. - Анальгетик для снятия средних и сильных болевых ощущений. - Analgésico usado para combatir los estados dolorosos de moderado a severo. - Un Analgésique puissant servant a contrer les douleur modéré a severe. - Organiczny związek chemiczny z grupy alkaloidów. Ma silne działanie przeciwbólowe. - - - Atropin autoinjector - Атропин в автоматическом шприце - Atropina auto-inyectable - Auto-injecteur d'Atropine - Autostrzykawka AtroPen - - - Used in NBC scenarios - Применяется для защиты от ОМП - Usado en escenarios NBQ - Utiliser en cas d'attaque CBRN - Atropina. Stosowana jako lek rozkurczowy i środek rozszerzający źrenice. - - - A drug used by the Military in NBC scenarios. - Препарат, используемый в войсках для защиты от оружия массового поражения. - Medicamento usado por Militares en escenarios NBQ - Médicament utilisé par l'armée en cas d'attaque CBRN - Atropina. Stosowana jako lek rozkurczowy i środek rozszerzający źrenice. Środek stosowany w + Ein Gerät einschränkendes Gerät das Druck auf das Venen und Arterien ausübt und so den Blutfluss verringert. Dadurch wird der Blutverlust bei einer Blutung verringert. + + + Morphine autoinjector + Морфин в автоматическом шприце + Morfina auto-inyectable + Auto-injecteur de Morphine + Autostrzykawka z morfiną + Morphium Autoinjektor + + + Used to combat moderate to severe pain experiences + Для снятия средних и сильных болевых ощущений. + Usado para combatir los estados dolorosos moderados a severos + Utiliser pour contrer les douleurs modéré à severes. + Morfina. Ma silne działanie przeciwbólowe. + Verwendet um mäßige bis starke Schmerzen zu behandeln + + + An analgesic used to combat moderate to severe pain experiences. + Анальгетик для снятия средних и сильных болевых ощущений. + Analgésico usado para combatir los estados dolorosos de moderado a severo. + Un Analgésique puissant servant a contrer les douleur modéré a severe. + Organiczny związek chemiczny z grupy alkaloidów. Ma silne działanie przeciwbólowe. + Ein Schmerzmittel um mäßige bis starke Schmerzen zu behandeln + + + Atropin autoinjector + Атропин в автоматическом шприце + Atropina auto-inyectable + Auto-injecteur d'Atropine + Autostrzykawka AtroPen + Atropin Autoinjektor + + + Used in NBC scenarios + Применяется для защиты от ОМП + Usado en escenarios NBQ + Utiliser en cas d'attaque CBRN + Atropina. Stosowana jako lek rozkurczowy i środek rozszerzający źrenice. + Verwendet bei ABC Kontamination + + + A drug used by the Military in NBC scenarios. + Препарат, используемый в войсках для защиты от оружия массового поражения. + Medicamento usado por Militares en escenarios NBQ + Médicament utilisé par l'armée en cas d'attaque CBRN + Atropina. Stosowana jako lek rozkurczowy i środek rozszerzający źrenice. Środek stosowany w przypadku zagrożeń NBC. - - - Epinephrine autoinjector - Адреналин в автоматическом шприце - Epinefrina auto-inyectable - Auto-injecteur d'épinéphrine - Autostrzykawka EpiPen - - - Increase heart rate and counter effects given by allergic reactions - Стимулирует работу сердца и купирует аллергические реакции. - Aumenta la frecuencia cardiaca y contraresta los efectos de las reacciones alérgicas - Augmente la Fréquance cadiaque et contré les effet d'une reaction Anaphylactique - Adrenalina. Zwiększa puls i przeciwdziała efektom wywołanym przez reakcje alergiczne - - - A drug that works on a sympathetic response to dilate the bronchi, increase heart rate and counter + Ein Medikament, das vom Militär bei ABC Kontamination verwendet wird. + + + Epinephrine autoinjector + Адреналин в автоматическом шприце + Epinefrina auto-inyectable + Auto-injecteur d'épinéphrine + Autostrzykawka EpiPen + Epiniphrin Autoinjektor + + + Increase heart rate and counter effects given by allergic reactions + Стимулирует работу сердца и купирует аллергические реакции. + Aumenta la frecuencia cardiaca y contraresta los efectos de las reacciones alérgicas + Augmente la Fréquance cadiaque et contré les effet d'une reaction Anaphylactique + Adrenalina. Zwiększa puls i przeciwdziała efektom wywołanym przez reakcje alergiczne + Steigert die Herzfrequenz um den Effekt von allergischen Reaktionen zu bekämpfen + + + A drug that works on a sympathetic response to dilate the bronchi, increase heart rate and counter such effects given by allergic reactions (anaphylaxis). Used in sudden cardiac arrest scenarios with decreasing positive outcomes. - Препарат, вызывающий симпатическую реакцию, приводящую к расширению бронхов, увеличению частоты + Препарат, вызывающий симпатическую реакцию, приводящую к расширению бронхов, увеличению частоты сердечных сокращений и купированию аллергических реакций (анафилактического шока). Применяется при остановке сердца с уменьшением вероятности благоприятного исхода. - Medicamento que dilata los bronquios, aumenta la frecuencia cardiaca y contrarresta los efectos de + Medicamento que dilata los bronquios, aumenta la frecuencia cardiaca y contrarresta los efectos de las reacciones alérgicas (anafilaxis). Se utiliza en caso de paros cardiacos repentinos. - Un medicament qui fonctione sur le systeme sympatique créan une dilatation des bronches, augmente la + Un medicament qui fonctione sur le systeme sympatique créan une dilatation des bronches, augmente la fréquance cardiaque et contre les effet d'une reaction alergique (anaphylaxie). Utiliser lors d'arret cardio-respiratoire pour augmenté les chances retrouver un ryhtme. - EpiPen z adrenaliną ma działanie sympatykomimetyczne, tj. pobudza receptory alfa- i + EpiPen z adrenaliną ma działanie sympatykomimetyczne, tj. pobudza receptory alfa- i beta-adrenergiczne. Pobudzenie układu współczulnego prowadzi do zwiększenia częstotliwości pracy serca, zwiększenia pojemności wyrzutowej serca i przyśpieszenia krążenia wieńcowego. Pobudzenie oskrzelowych receptorów beta-adrenergicznych wywołuje rozkurcz mięśni gładkich oskrzeli, co w efekcie zmniejsza towarzyszące oddychaniu świsty i duszności. - - - Plasma IV (1000ml) - Плазма для в/в вливания (1000 мл) - Plasma Intravenoso (1000ml) - Plasma Sanguin IV (1000ml) - Osocze IV (1000ml) - - - A volume-expanding blood supplement. - Дополнительный препарат, применяемый при возмещении объема крови. - Suplemento para expandir el volumen sanguíneo. - Supplement visant a remplacer les volume sanguin - Składnik krwi, używany do zwiększenia jej objętości. - - - A volume-expanding blood supplement. - Дополнительный препарат, применяемый при возмещении объема крови. - Suplemento para expandir el volumen sanguíneo. - Supplement visant a remplacer le volume sanguin et remplace les plaquettes. - Składnik krwi, używany do zwiększenia jej objętości. - - - Plasma IV (500ml) - Плазма для в/в вливания (500 мл) - Plasma Intravenoso (500ml) - Plasma Sanguin IV (500ml) - Osocze IV (500ml) - - - Plasma IV (250ml) - Плазма для в/в вливания (250 мл) - Plasma Intravenoso (250ml) - Plasma Sanguin (250ml) - Osocze IV (250ml) - - - Blood IV (1000ml) - Кровь для переливания (1000 мл) - Sangre Intravenosa (1000ml) - Cullot Sanguin IV (1000ml) - Krew IV (1000ml) - - - Blood IV, for restoring a patients blood (keep cold) - Пакет крови для возмещения объема потерянной крови (хранить в холодильнике) - Sangre Intravenosa, para restarurar el volumen sanguíneo (mantener frío) - Cullot Sanguin IV, pour remplacer le volume sanguin (garder Réfrigeré) - Krew IV, używana do uzupełnienia krwi u pacjenta, trzymać w warunkach chłodniczych - - - O Negative infusion blood used in strict and rare events to replenish blood supply usually + + + Plasma IV (1000ml) + Плазма для в/в вливания (1000 мл) + Plasma Intravenoso (1000ml) + Plasma Sanguin IV (1000ml) + Osocze IV (1000ml) + Plasma IV (1000ml) + + + A volume-expanding blood supplement. + Дополнительный препарат, применяемый при возмещении объема крови. + Suplemento para expandir el volumen sanguíneo. + Supplement visant a remplacer les volume sanguin + Składnik krwi, używany do zwiększenia jej objętości. + + + A volume-expanding blood supplement. + Дополнительный препарат, применяемый при возмещении объема крови. + Suplemento para expandir el volumen sanguíneo. + Supplement visant a remplacer le volume sanguin et remplace les plaquettes. + Składnik krwi, używany do zwiększenia jej objętości. + + + Plasma IV (500ml) + Плазма для в/в вливания (500 мл) + Plasma Intravenoso (500ml) + Plasma Sanguin IV (500ml) + Osocze IV (500ml) + Plasma IV (500ml) + + + Plasma IV (250ml) + Плазма для в/в вливания (250 мл) + Plasma Intravenoso (250ml) + Plasma Sanguin (250ml) + Osocze IV (250ml) + Plasma IV (250ml) + + + Blood IV (1000ml) + Кровь для переливания (1000 мл) + Sangre Intravenosa (1000ml) + Cullot Sanguin IV (1000ml) + Krew IV (1000ml) + Blut IV (1000ml) + + + Blood IV, for restoring a patients blood (keep cold) + Пакет крови для возмещения объема потерянной крови (хранить в холодильнике) + Sangre Intravenosa, para restarurar el volumen sanguíneo (mantener frío) + Cullot Sanguin IV, pour remplacer le volume sanguin (garder Réfrigeré) + Krew IV, używana do uzupełnienia krwi u pacjenta, trzymać w warunkach chłodniczych + + + O Negative infusion blood used in strict and rare events to replenish blood supply usually conducted in the transport phase of medical care. - Кровь I группы, резус-отрицательная, применяется по жизненным показаниям для возмещения объема + Кровь I группы, резус-отрицательная, применяется по жизненным показаниям для возмещения объема потерянной крови на догоспитальном этапе оказания медицинской помощи. - Cullot Sanguin O- ,utiliser seulement lors de perte sanguine majeur afin de remplacer le volume + Cullot Sanguin O- ,utiliser seulement lors de perte sanguine majeur afin de remplacer le volume sanguin perdu. Habituelment utiliser lors du transport ou dans un etablisement de soin. - Krew 0 Rh-, używana w rzadkich i szczególnych przypadkach do uzupełnienia krwi u pacjenta, zazwyczaj + Krew 0 Rh-, używana w rzadkich i szczególnych przypadkach do uzupełnienia krwi u pacjenta, zazwyczaj w trakcie fazie transportu rannej osoby do szpitala. - Utilice sólo durante gran pérdida de sangre para reemplazar el volumen de sangre perdido. Uso + Utilice sólo durante gran pérdida de sangre para reemplazar el volumen de sangre perdido. Uso habitual durante el transporte de heridos. - - - Blood IV (500ml) - Кровь для переливания (500 мл) - Sangre Intravenosa (500ml) - Cullot Sanguin IV (500ml) - Krew IV (500ml) - - - Blood IV (250ml) - Кровь для переливания (250 мл) - Sangre Intravenosa (250ml) - Cullot Sanguin IV (250ml) - Krew IV (250ml) - - - Saline IV (1000ml) - Физраствор для в/в вливания (1000 мл) - Solución Salina Intravenosa (1000ml) - solution Saline 0.9% IV (1000ml) - Solanka 0,9% IV (1000ml) - - - Saline IV, for restoring a patients blood - Пакет физраствора для возмещения объема потерянной крови - Solución Salina Intravenosa, para restaurar el volumen sanguíneo - Solution Saline 0.9% IV, pour retablir temporairement la tention arteriel - Solanka 0,9%, podawana dożylnie (IV), używana w celu uzupełnienia krwi u pacjenta - - - A medical volume-replenishing agent introduced into the blood system through an IV infusion. + + + Blood IV (500ml) + Кровь для переливания (500 мл) + Sangre Intravenosa (500ml) + Cullot Sanguin IV (500ml) + Krew IV (500ml) + Blut IV (500ml) + + + Blood IV (250ml) + Кровь для переливания (250 мл) + Sangre Intravenosa (250ml) + Cullot Sanguin IV (250ml) + Krew IV (250ml) + Blut IV (250ml) + + + Saline IV (1000ml) + Физраствор для в/в вливания (1000 мл) + Solución Salina Intravenosa (1000ml) + solution Saline 0.9% IV (1000ml) + Solanka 0,9% IV (1000ml) + Kochsalzlösung (1000ml) + + + Saline IV, for restoring a patients blood + Пакет физраствора для возмещения объема потерянной крови + Solución Salina Intravenosa, para restaurar el volumen sanguíneo + Solution Saline 0.9% IV, pour retablir temporairement la tention arteriel + Solanka 0,9%, podawana dożylnie (IV), używana w celu uzupełnienia krwi u pacjenta + + + A medical volume-replenishing agent introduced into the blood system through an IV infusion. - Пакет физиологического раствора для возмещения объема потерянной крови путем внутривенного + Пакет физиологического раствора для возмещения объема потерянной крови путем внутривенного вливания. - Suero fisiológico inoculado al torrente sanguíneo de forma intravenosa. - Un remplacment temporaire pour rétablir la tention artériel lors de perte sanguine, étant ajouter + Suero fisiológico inoculado al torrente sanguíneo de forma intravenosa. + Un remplacment temporaire pour rétablir la tention artériel lors de perte sanguine, étant ajouter par intraveineuse - Używany w medycynie w formie płynu infuzyjnego jako środek nawadniający i uzupełniający niedobór + Używany w medycynie w formie płynu infuzyjnego jako środek nawadniający i uzupełniający niedobór elektrolitów, podawany dożylnie (IV). - - - Saline IV (500ml) - Физраствор для в/в вливания (500 мл) - Solución Salina Intravenosa (500ml) - Solution Saline 0.9% IV (500ml) - Solanka 0,9% IV (500ml) - - - Saline IV (250ml) - Физраствор для в/в вливания (250 мл) - Solución Salina Intravenosa (250ml) - Solution Saline 0.9% IV (250ml) - Solanka 0,9% IV (250ml) - - - Basic Field Dressing (QuikClot) - Первичный перевязочный пакет (QuikClot) - Vendaje Básico (Coagulante) - Bandage Regulier (Coagulant) - Opatrunek QuikClot - - - QuikClot bandage - Гемостатический пакет QuikClot - Venda Coagulante - Bandage coagulant - Podstawowy opatrunek stosowany na rany - - - - - Un bandage servant a coaguler les seignements mineur à moyen. - Proszkowy opatrunek adsorbcyjny przeznaczony do tamowania zagrażających życiu krwawień średniej i + + + Saline IV (500ml) + Физраствор для в/в вливания (500 мл) + Solución Salina Intravenosa (500ml) + Solution Saline 0.9% IV (500ml) + Solanka 0,9% IV (500ml) + Kochsalzlösung (500ml) + + + Saline IV (250ml) + Физраствор для в/в вливания (250 мл) + Solución Salina Intravenosa (250ml) + Solution Saline 0.9% IV (250ml) + Solanka 0,9% IV (250ml) + Kochsalzlösung (250ml) + + + Basic Field Dressing (QuikClot) + Первичный перевязочный пакет (QuikClot) + Vendaje Básico (Coagulante) + Bandage Regulier (Coagulant) + Opatrunek QuikClot + Verbandpäckchen(Gerinnungsmittel) + + + QuikClot bandage + Гемостатический пакет QuikClot + Venda Coagulante + Bandage coagulant + Podstawowy opatrunek stosowany na rany + Bandage mit Gerinnungsmittel + + + + + Un bandage servant a coaguler les seignements mineur à moyen. + Proszkowy opatrunek adsorbcyjny przeznaczony do tamowania zagrażających życiu krwawień średniej i dużej intensywności. - Vendaje Hemostático con coagulante que detiene el sangrado. - - - Personal Aid Kit - Аптечка - Kit de Soporte Vital Avanzado - Équipement de support Vitale - Apteczka osobista - - - Includes various treatment kit needed for stitching or advanced treatment - Содержит различные материалы и инструменты для зашивания ран и оказания специальной медпомощи. + Vendaje Hemostático con coagulante que detiene el sangrado. + Verband mit Gerinnungsmittel um starke Blutung zu behandeln. + + + Personal Aid Kit + Аптечка + Kit de Soporte Vital Avanzado + Équipement de support Vitale + Apteczka osobista + Persönliches Verbandpäckchen + + + Includes various treatment kit needed for stitching or advanced treatment + Содержит различные материалы и инструменты для зашивания ран и оказания специальной медпомощи. - Incluye material médico para tratamientos avanzados - Inclue du matériel medical pour les traitement avancé, tel les point de suture. - Zestaw środków medycznych do opatrywania ran i dodatkowego leczenia po-urazowego - - - - - - - - - Surgical Kit - Хирургический набор - Kit Quirúrgico - - - Surgical Kit for in field advanced medical treatment - Набор для хирургической помощи в полевых условиях - Kit Quirúrgico para el tratamiento avanzado en el campo de batalla - - - Surgical Kit for in field advanced medical treatment - Набор для хирургической помощи в полевых условиях - Kit Quirúrgico para el tratamiento avanzado en el campo de batalla - - - Bodybag - Мешок для трупов - Bolsa para cadáveres - - - A bodybag for dead bodies - Мешок для упаковки трупов - Bolsa para cadáveres - - - A bodybag for dead bodies - Мешок для упаковки трупов - Bolsa para cadáveres - - - - Blood Pressure - Артериальное давление - Presión Arterial - - - Checking Blood Pressure.. - Проверка артериального давления... - Comprobando Presión Arterial... - - - You checked %1 - Вы осмотрели раненого %1 - Examinando a %1 - - - You find a blood pressure of %2/%3 - Артериальное давление %2/%3 - La Presión Arterial es %2/%3 - - - You find a low blood pressure - Давление низкое - La Presión Arterial es baja - - - You find a normal blood pressure - Давление нормальное - La Presión Arterial es normal - - - You find a high blood pressure - Давление высокое - La Presión Arterial es alta - - - You find no blood pressure - Давления нет - No hay Presión Arterial - - - You fail to find a blood pressure - Артериальное давление не определяется - No puedes encontrar Presión Arterial - - - Pulse - Пульс - Pulso - - - Checking Heart Rate.. - Проверка пульса... - Comprobando Pulso... - - - You checked %1 - Вы осмотрели раненого %1 - Examinando a %1 - - - You find a Heart Rate of %2 - Пульс %2 уд./мин. - El Pulso es %2 - - - You find a weak Heart Rate - Пульс слабый - El Pulso es débil - - - You find a strong Heart Rate - Пульс учащенный - El Pulso está acelerado - - - You find a normal Heart Rate - Пульс в норме - El Pulso es bueno - - - You find no Heart Rate - Пульс не прощупывается - No tiene Pulso - - - Response - Реакция - Reacciona - - - You check response of patient - Вы проверяете реакцию раненого - Compruebas si el paciente reacciona - - - %1 is responsive - %1 реагирует на раздражители - %1 ha reaccionado - - - %1 is not responsive - %1 не реагирует - %1 no reacciona - - - You checked %1 - Вы осмотрели раненого %1 - Examinas a %1 - - - Bandaged - Повязка наложена - Vendado - - - You bandage %1 (%2) - Вы перевязали раненого %1 (%2) - Aplicas vendaje a %1 en %2 - - - %1 is bandaging you - %1 перевязывает вас - %1 te está vendando - - - You start stitching injures from %1 (%2) - Вы зашиваете ранения от %1 (%2) - Estás suturando heridas de %1 en %2 - - - Stitching - Наложение швов - Suturando - - - You treat the airway of %1 - Вы интубируете раненого %1 - Estás intubando a %1 - - - Airway - Дыхательные пути - Vías Aéreas - - - %1 is treating your airway - %1 проводит вам интубацию - %1 te está intubando - - - Drag - Ziehen - Arrastrar - Ciągnij - Táhnout - Тащить - Tracter - Húzás - Arrastar - Trascina - - - Carry - Tragen - Cargar - Nieś - Nést - Нести - Porter - Cipelés - Carregar - Trasporta - - - Release - Loslassen - Soltar - Połóż - Položit - Отпустить - Déposer - Elenged - Largar - Lascia - - - Load Patient Into - Patient Einladen - Cargar el paciente en - Załaduj pacjenta - Naložit pacianta do - Погрузить пациента в - Embarquer le Patient - Sebesült berakása - Carregar Paciente Em - Carica paziente nel - - - Unload Patient - Patient Ausladen - Descargar el paciente - Wyładuj pacjenta - Vyložit pacienta - Выгрузить пациента - Débarquer le Patient - Sebesült kihúzása - Descarregar Paciente - Scarica il paziente - - - Unload patient - - - Load patient - - - Place body in bodybag - - - Placing body in bodybag - - - - %1 has bandaged patient - - - %1 used %2 - - - %1 has given an IV - - - %1 applied a tourniquet - - - - + Incluye material médico para tratamientos avanzados + Inclue du matériel medical pour les traitement avancé, tel les point de suture. + Zestaw środków medycznych do opatrywania ran i dodatkowego leczenia po-urazowego + Beinhaltet medizinisches Material fortgeschrittene Behandlung und zum nähen. + + + + + + + + + Surgical Kit + Хирургический набор + Kit Quirúrgico + Operationsset + + + Surgical Kit for in field advanced medical treatment + Набор для хирургической помощи в полевых условиях + Kit Quirúrgico para el tratamiento avanzado en el campo de batalla + Operationsset für fortgeschrittene medizinische Feldversorgung + + + Surgical Kit for in field advanced medical treatment + Набор для хирургической помощи в полевых условиях + Kit Quirúrgico para el tratamiento avanzado en el campo de batalla + Operationsset für fortgeschrittene medizinische Feldversorgung + + + Bodybag + Мешок для трупов + Bolsa para cadáveres + Leichensack + + + A bodybag for dead bodies + Мешок для упаковки трупов + Bolsa para cadáveres + Ein Leichensack für Tote + + + A bodybag for dead bodies + Мешок для упаковки трупов + Bolsa para cadáveres + Ein Leichensack für Tote + + + Blood Pressure + Артериальное давление + Presión Arterial + Blutdruck + + + Checking Blood Pressure.. + Проверка артериального давления... + Comprobando Presión Arterial... + Blutdruck kontrollieren... + + + You checked %1 + Вы осмотрели раненого %1 + Examinando a %1 + Kontrolliert %1 + + + You find a blood pressure of %2/%3 + Артериальное давление %2/%3 + La Presión Arterial es %2/%3 + Blutdruck ist %2/%3 + + + You find a low blood pressure + Давление низкое + La Presión Arterial es baja + Blutdruck ist niedrig + + + You find a normal blood pressure + Давление нормальное + La Presión Arterial es normal + Blutdruck ist normal + + + You find a high blood pressure + Давление высокое + La Presión Arterial es alta + Blutdruck ist hoch + + + You find no blood pressure + Давления нет + No hay Presión Arterial + Patient hat keinen Blutdruck + + + You fail to find a blood pressure + Артериальное давление не определяется + No puedes encontrar Presión Arterial + Blutdruck konnte nicht gefunden werden + + + Pulse + Пульс + Pulso + Puls + + + Checking Heart Rate.. + Проверка пульса... + Comprobando Pulso... + Kontrolliere Herzfrequenz + + + You checked %1 + Вы осмотрели раненого %1 + Examinando a %1 + Kontrolliertt %1 + + + You find a Heart Rate of %2 + Пульс %2 уд./мин. + El Pulso es %2 + Herzfrequenz ist %2 + + + You find a weak Heart Rate + Пульс слабый + El Pulso es débil + Schwacher Puls + + + You find a strong Heart Rate + Пульс учащенный + El Pulso está acelerado + Starker Puls + + + You find a normal Heart Rate + Пульс в норме + El Pulso es bueno + Normaler Puls + + + You find no Heart Rate + Пульс не прощупывается + No tiene Pulso + Kein Puls gefunden + + + Response + Реакция + Reacciona + Ansprechbarkeit + + + You check response of patient + Вы проверяете реакцию раненого + Compruebas si el paciente reacciona + Du prüfst ob der Patient ansprechbar ist + + + %1 is responsive + %1 реагирует на раздражители + %1 ha reaccionado + %1 ist anprechbar + + + %1 is not responsive + %1 не реагирует + %1 no reacciona + %1 ist nicht ansprechbar + + + You checked %1 + Вы осмотрели раненого %1 + Examinas a %1 + Du versucht %1 anzusprechen + + + Bandaged + Повязка наложена + Vendado + + + You bandage %1 (%2) + Вы перевязали раненого %1 (%2) + Aplicas vendaje a %1 en %2 + + + %1 is bandaging you + %1 перевязывает вас + %1 te está vendando + + + You start stitching injures from %1 (%2) + Вы зашиваете ранения от %1 (%2) + Estás suturando heridas de %1 en %2 + + + Stitching + Наложение швов + Suturando + + + You treat the airway of %1 + Вы интубируете раненого %1 + Estás intubando a %1 + + + Airway + Дыхательные пути + Vías Aéreas + Atemwege + + + %1 is treating your airway + %1 проводит вам интубацию + %1 te está intubando + + + Drag + Ziehen + Arrastrar + Ciągnij + Táhnout + Тащить + Tracter + Húzás + Arrastar + Trascina + + + Carry + Tragen + Cargar + Nieś + Nést + Нести + Porter + Cipelés + Carregar + Trasporta + + + Release + Loslassen + Soltar + Połóż + Položit + Отпустить + Déposer + Elenged + Largar + Lascia + + + Load Patient Into + Patient Einladen + Cargar el paciente en + Załaduj pacjenta + Naložit pacianta do + Погрузить пациента в + Embarquer le Patient + Sebesült berakása + Carregar Paciente Em + Carica paziente nel + + + Unload Patient + Patient Ausladen + Descargar el paciente + Wyładuj pacjenta + Vyložit pacienta + Выгрузить пациента + Débarquer le Patient + Sebesült kihúzása + Descarregar Paciente + Scarica il paziente + + + Unload patient + + + Load patient + + + Place body in bodybag + + + Placing body in bodybag + + + %1 has bandaged patient + + + %1 used %2 + + + %1 has given an IV + + + %1 applied a tourniquet + + + \ No newline at end of file diff --git a/addons/microdagr/stringtable.xml b/addons/microdagr/stringtable.xml index 772a7a172f..18728d4c64 100644 --- a/addons/microdagr/stringtable.xml +++ b/addons/microdagr/stringtable.xml @@ -1,24 +1,30 @@  - + MicroDAGR GPS + MicroDAGR GPS MicroDAGR advanced GPS receiver + MicroDAGR Verbesserter GPS Empfänger Angular Unit: + Winkeleinheit: Mils + Mils Show Waypoints On Map: + Zeige Wegpunkte auf Karte Degrees + Grad On @@ -44,6 +50,7 @@ Enter Grid Cords: + Gitter Koordinaten eingeben: Name of [%1] @@ -60,9 +67,11 @@ Compass Direction + Kompass Richtung Mark + Markieren Waypoints @@ -70,6 +79,7 @@ Connect To + Verbinde zu Settings @@ -78,9 +88,11 @@ SetWP + WP setzen Add + Hinzufügen Delete @@ -95,15 +107,19 @@ Toggle MicroDAGR Display Mode + MicoDAGR Anzeigemodus wählen Show MicoDAGR + Zeige MicroDAGR Configure MicroDAGR + Konfiguriere MicroDAGR Close MicroDAGR + Schließe MicroDAGR \ No newline at end of file diff --git a/addons/nametags/stringtable.xml b/addons/nametags/stringtable.xml index 622df44aca..e832b2ce94 100644 --- a/addons/nametags/stringtable.xml +++ b/addons/nametags/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -68,6 +68,7 @@ Show name tags for AI units + Zeige Namen für KI Einheiten Show SoundWaves (requires player names) @@ -76,6 +77,7 @@ Default Nametag Color (Non Group Members) + Standard Namenfarbe (Nicht Gruppenmitglieder) \ No newline at end of file diff --git a/addons/optionsmenu/stringtable.xml b/addons/optionsmenu/stringtable.xml index 76407da435..32a551e613 100644 --- a/addons/optionsmenu/stringtable.xml +++ b/addons/optionsmenu/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -41,6 +41,7 @@ Values + Werte Yes @@ -75,9 +76,11 @@ Export + Exportieren Open Export Menu + Öffne Exportier Menü String input. @@ -93,6 +96,7 @@ Save input + Speichere Eingabe Include Client Settings diff --git a/addons/reload/stringtable.xml b/addons/reload/stringtable.xml index 40f36c6549..dfb5e98ca0 100644 --- a/addons/reload/stringtable.xml +++ b/addons/reload/stringtable.xml @@ -1,12 +1,14 @@ - - + + Check ammo on weapon reload + Munition beim Nachladen prüfen Check the ammo in your new magazine on magazine reload. + Munition im neuen Magazin beim Magazinfüllen prüfen Check Ammo @@ -34,9 +36,11 @@ Link belt + Gurt anhängen Linking belt... + Gurt anhängen... - + \ No newline at end of file diff --git a/addons/winddeflection/stringtable.xml b/addons/winddeflection/stringtable.xml index b52100046f..42dd3838c3 100644 --- a/addons/winddeflection/stringtable.xml +++ b/addons/winddeflection/stringtable.xml @@ -1,32 +1,38 @@ - - - - - - Wind Information - Informacje o wietrze - Información del viento - - - Direction: %1 - Kierunek: %1 - Dirección: %1 - - - Speed: %1 m/s - Prędkość: %1 - Velocidad: %1 m/s - - - Weather Information - Informacje o pogodzie - Información Meteorológica - - - Humidity: %1% - Wilgotność: %1 - Humedad: %1% - - - - + + + + + + + Wind Information + Informacje o wietrze + Información del viento + Windinformationen + + + Direction: %1 + Kierunek: %1 + Dirección: %1 + Richtung: %1 + + + Speed: %1 m/s + Prędkość: %1 + Velocidad: %1 m/s + Geschwindigkeit: %1m/s + + + Weather Information + Informacje o pogodzie + Información Meteorológica + Wetterinformationen + + + Humidity: %1% + Wilgotność: %1 + Humedad: %1% + Feuchtigkeit: %1% + + + + \ No newline at end of file From 439dfa7b3cdbb8656722e0dfb788719e54c186de Mon Sep 17 00:00:00 2001 From: Grzegorz Date: Fri, 10 Apr 2015 16:31:47 +0200 Subject: [PATCH 094/214] laser_selfdesignate PL translation fixes --- addons/laser_selfdesignate/stringtable.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/laser_selfdesignate/stringtable.xml b/addons/laser_selfdesignate/stringtable.xml index 4562110539..b9be287963 100644 --- a/addons/laser_selfdesignate/stringtable.xml +++ b/addons/laser_selfdesignate/stringtable.xml @@ -4,11 +4,11 @@ Laser<br/>Designator On - Laser<br/>Dezygnator wł. + Desygnator<br/>laserowy wł. Laser<br/>Designator Off - Laser<br/>Dezygnator wył. + Desygnator<br/>laserowy wył. From a95b0b051c2fec62a05f8a3476a0621e9593b0a8 Mon Sep 17 00:00:00 2001 From: Grzegorz Date: Fri, 10 Apr 2015 16:33:09 +0200 Subject: [PATCH 095/214] inventory PL translation --- addons/inventory/stringtable.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/inventory/stringtable.xml b/addons/inventory/stringtable.xml index 034afd6986..3618fbc59f 100644 --- a/addons/inventory/stringtable.xml +++ b/addons/inventory/stringtable.xml @@ -4,7 +4,7 @@ Make Inventory Display Bigger - Powiększ widok ekwipunku + Powiększ UI ekwipunku Normally inventory display is scaled by UI size. This allows scaling the Inventory UI size up, but doesn't increase font size allowing more rows displayed. From fab5605ad5018ad9a96a19f2f974a4fcc4ef9f27 Mon Sep 17 00:00:00 2001 From: EpMAK Date: Fri, 10 Apr 2015 17:51:48 +0300 Subject: [PATCH 096/214] Translation Russian translation of the texts --- .gitattributes | 17 + .gitignore | 12 +- addons/aircraft/Heli_Attack_01_base_F.hpp | 1956 ++++++------- addons/aircraft/RscInGameUI.hpp | 1160 ++++---- addons/attach/stringtable.xml | 20 +- addons/ballistics/CfgAmmo.hpp | 38 +- addons/captives/stringtable.xml | 9 +- .../common/functions/fnc__handleNetEvent.sqf | 146 +- .../common/functions/fnc_addEventHandler.sqf | 62 +- addons/common/functions/fnc_dumpArray.sqf | 50 +- .../functions/fnc_dumpPerformanceCounters.sqf | 144 +- .../functions/fnc_getTurretDirection.sqf | 72 +- addons/common/functions/fnc_globalEvent.sqf | 42 +- addons/common/functions/fnc_localEvent.sqf | 66 +- .../functions/fnc_removeAllEventHandlers.sqf | 40 +- .../functions/fnc_removeEventHandler.sqf | 46 +- addons/common/functions/fnc_serverEvent.sqf | 58 +- addons/common/functions/fnc_targetEvent.sqf | 66 +- addons/common/functions/script_component.hpp | 24 +- addons/common/stringtable.xml | 16 +- addons/dragging/stringtable.xml | 7 +- addons/explosives/stringtable.xml | 48 +- addons/fcs/functions/fnc_onForceUpdate.sqf | 12 +- addons/fcs/stringtable.xml | 148 +- addons/frag/CfgAmmo.hpp | 704 ++--- addons/frag/CfgEventhandlers.hpp | 34 +- addons/frag/XEH_post_init.sqf | 34 +- addons/frag/XEH_pre_Init.sqf | 90 +- addons/frag/config.cpp | 32 +- .../frag/functions/fnc_BIS_ARTY_WRAPPER.sqf | 24 +- addons/frag/functions/fnc_addBlackList.sqf | 6 +- addons/frag/functions/fnc_addManualTrack.sqf | 12 +- addons/frag/functions/fnc_addTrack.sqf | 38 +- addons/frag/functions/fnc_clearTraces.sqf | 2 +- addons/frag/functions/fnc_denyFrag.sqf | 12 +- addons/frag/functions/fnc_doSpall.sqf | 330 +-- addons/frag/functions/fnc_drawTraces.sqf | 62 +- addons/frag/functions/fnc_frag_trace.sqf | 18 +- addons/frag/functions/fnc_frago.sqf | 460 +-- addons/frag/functions/fnc_removeTrack.sqf | 26 +- addons/frag/functions/fnc_spallHP.sqf | 56 +- addons/frag/functions/fnc_spallTrack.sqf | 78 +- addons/frag/functions/fnc_startTracing.sqf | 8 +- addons/frag/functions/fnc_stopTracing.sqf | 8 +- addons/frag/functions/fnc_trackFragRound.sqf | 104 +- addons/frag/functions/fnc_trackTrace.sqf | 26 +- addons/frag/functions/fnc_vectorDiffFast.sqf | 30 +- addons/frag/script_component.hpp | 30 +- addons/frag/stringtable.xml | 28 +- addons/goggles/stringtable.xml | 6 +- addons/grenades/stringtable.xml | 8 +- addons/hearing/stringtable.xml | 3 +- addons/interact_menu/XEH_clientInit.sqf | 104 +- addons/interact_menu/stringtable.xml | 7 +- addons/interaction/stringtable.xml | 5 +- addons/inventory/stringtable.xml | 4 +- addons/kestrel/stringtable.xml | 4 +- addons/laser/CfgEventhandlers.hpp | 22 +- addons/laser/CfgVehicles.hpp | 16 +- addons/laser/XEH_post_init.sqf | 6 +- addons/laser/XEH_pre_init.sqf | 50 +- addons/laser/config.cpp | 26 +- addons/laser/functions/fnc_checkLos.sqf | 60 +- .../functions/fnc_findLaserDesignator.sqf | 138 +- .../laser/functions/fnc_findStrongestRay.sqf | 96 +- addons/laser/functions/fnc_laserTargetPFH.sqf | 52 +- addons/laser/functions/fnc_laser_init.sqf | 50 +- addons/laser/functions/fnc_rotateVectLine.sqf | 74 +- .../functions/fnc_rotateVectLineGetMap.sqf | 72 +- addons/laser/functions/fnc_shootCone.sqf | 130 +- addons/laser/functions/fnc_shootRay.sqf | 58 +- .../functions/fnc_translateToModelSpace.sqf | 30 +- .../functions/fnc_translateToWeaponSpace.sqf | 42 +- addons/laser/script_component.hpp | 28 +- .../laser_selfdesignate/CfgEventhandlers.hpp | 36 +- addons/laser_selfdesignate/CfgUI.hpp | 62 +- addons/laser_selfdesignate/CfgVehicles.hpp | 60 +- addons/laser_selfdesignate/CfgWeapons.hpp | 22 +- addons/laser_selfdesignate/XEH_post_init.sqf | 6 +- addons/laser_selfdesignate/XEH_pre_init.sqf | 22 +- addons/laser_selfdesignate/config.cpp | 34 +- .../functions/fnc_laserHudDesignateOff.sqf | 38 +- .../functions/fnc_laserHudDesignateOn.sqf | 222 +- .../functions/script_component.hpp | 2 +- .../laser_selfdesignate/script_component.hpp | 24 +- addons/laser_selfdesignate/stringtable.xml | 4 +- addons/laserpointer/stringtable.xml | 10 +- addons/logistics_uavbattery/stringtable.xml | 10 +- addons/logistics_wirecutter/stringtable.xml | 10 +- addons/magazinerepack/stringtable.xml | 5 +- addons/magazines/stringtable.xml | 38 +- addons/main/About.hpp | 70 +- addons/main/CfgModuleCategories.hpp | 14 +- addons/main/about.sqf | 418 +-- addons/main/config.cpp | 1178 ++++---- addons/main/license.sqf | 184 +- addons/main/license.txt | 184 +- addons/main/script_common.hpp | 6 +- addons/main/script_component.hpp | 28 +- addons/main/script_config.hpp | 86 +- addons/main/script_debug.hpp | 90 +- addons/main/script_macros.hpp | 488 +-- addons/main/script_macros_menudef.hpp | 52 +- addons/main/script_mod.hpp | 110 +- addons/maptools/stringtable.xml | 4 +- addons/markers/stringtable.xml | 4 +- addons/medical/stringtable.xml | 1837 ++++++------ addons/microdagr/stringtable.xml | 24 +- addons/missileguidance/CfgAmmo.hpp | 18 +- addons/missileguidance/CfgEventhandlers.hpp | 32 +- addons/missileguidance/CfgWeapons.hpp | 66 +- addons/missileguidance/XEH_post_init.sqf | 6 +- addons/missileguidance/XEH_pre_init.sqf | 26 +- addons/missileguidance/config.cpp | 28 +- .../missileguidance/functions/fnc_fired.sqf | 36 +- .../functions/fnc_guidance_DAGR.sqf | 238 +- .../functions/fnc_guidance_HellfireII.sqf | 496 ++-- .../functions/fnc_guidance_LGB.sqf | 216 +- .../functions/fnc_rotateVectLine.sqf | 74 +- .../functions/fnc_rotateVectLineGetMap.sqf | 72 +- .../functions/fnc_translateToModelSpace.sqf | 30 +- .../functions/fnc_translateToWeaponSpace.sqf | 42 +- addons/missileguidance/script_component.hpp | 26 +- addons/nametags/stringtable.xml | 5 +- addons/optionsmenu/stringtable.xml | 19 +- addons/overheating/stringtable.xml | 4 +- addons/realisticnames/stringtable.xml | 2608 ++++++++--------- addons/reload/stringtable.xml | 10 +- addons/reloadlaunchers/stringtable.xml | 46 +- addons/respawn/stringtable.xml | 7 +- addons/switchunits/stringtable.xml | 5 +- addons/weaponselect/stringtable.xml | 6 +- addons/wep_javelin/CfgEventhandlers.hpp | 34 +- addons/wep_javelin/CfgSounds.hpp | 26 +- addons/wep_javelin/RscInGameUI.hpp | 916 +++--- addons/wep_javelin/XEH_clientInit.sqf | 4 +- addons/wep_javelin/XEH_post_init.sqf | 4 +- addons/wep_javelin/XEH_pre_init.sqf | 28 +- addons/wep_javelin/config.cpp | 28 +- .../functions/fnc_cycleFireMode.sqf | 38 +- addons/wep_javelin/functions/fnc_fired.sqf | 568 ++-- .../wep_javelin/functions/fnc_lockKeyDown.sqf | 4 +- .../wep_javelin/functions/fnc_lockKeyUp.sqf | 4 +- .../wep_javelin/functions/fnc_onOpticDraw.sqf | 262 +- .../wep_javelin/functions/fnc_onOpticLoad.sqf | 32 +- .../functions/fnc_translateToModelSpace.sqf | 38 +- .../functions/fnc_translateToWeaponSpace.sqf | 50 +- addons/wep_javelin/initKeybinds.sqf | 58 +- addons/wep_javelin/script_component.hpp | 104 +- addons/wep_javelin/stringtable.xml | 48 +- addons/winddeflection/stringtable.xml | 70 +- extensions/CMakeLists.txt | 60 +- extensions/build/.gitignore | 6 +- extensions/common/ace_common.cpp | 6 +- extensions/common/ace_common.h | 8 +- extensions/common/targetver.h | 14 +- extensions/fcs/CMakeLists.txt | 20 +- 157 files changed, 9827 insertions(+), 9703 deletions(-) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000..bdb0cabc87 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,17 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Custom for Visual Studio +*.cs diff=csharp + +# Standard to msysgit +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore index 76f95dcd10..a363b6b9c4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ -release/* -*.cache -*.pbo -texHeaders.bin -*.swp -*.swo +release/* +*.cache +*.pbo +texHeaders.bin +*.swp +*.swo diff --git a/addons/aircraft/Heli_Attack_01_base_F.hpp b/addons/aircraft/Heli_Attack_01_base_F.hpp index 7276b3e402..c7e953d378 100644 --- a/addons/aircraft/Heli_Attack_01_base_F.hpp +++ b/addons/aircraft/Heli_Attack_01_base_F.hpp @@ -1,979 +1,979 @@ -class Heli_Attack_01_base_F: Helicopter_Base_F { - lockDetectionSystem = 12; - incomingMissileDetectionSystem = 16; - driverCanEject = 1; - - class MFD - { - class AirplaneHUD - { - class Bones{}; - class Draw{}; - topLeft = "HUD_top_left"; - topRight = "HUD_top_right"; - bottomLeft = "HUD_bottom_left"; - borderLeft = 0; - borderRight = 0; - borderTop = 0; - borderBottom = 0; - color[] = {0.15,1,0.15,1}; - enableParallax = 0; - helmetMountedDisplay = 1; - helmetPosition[] = {0,0,0}; - helmetRight[] = {0,0,0}; - helmetDown[] = {0,0,0}; - }; - class ACE_HUD_1 - { - topLeft = "HUD_top_left"; - topRight = "HUD_top_right"; - bottomLeft = "HUD_bottom_left"; - borderLeft = 0; - borderRight = 0; - borderTop = 0; - borderBottom = 0; - color[] = {0.15,1,0.15,1}; - enableParallax = 0; - class Bones - { - class GunnerAim - { - type = "vector"; - source = "weapon"; - pos0[] = {0.5,"0.9 - 0.04 + 0.012"}; - pos10[] = {"0.5 + 0.0111","0.9 - 0.04 + 0.012 + 0.0133"}; - }; - class Target - { - source = "target"; - type = "vector"; - pos0[] = {0.5,0.5}; - pos10[] = {0.85,0.85}; - }; - class Velocity - { - type = "vector"; - source = "velocity"; - pos0[] = {0.5,0.5}; - pos10[] = {0.65,0.65}; - }; - class Velocity_slip - { - type = "vector"; - source = "velocity"; - pos0[] = {0.5,0.845}; - pos10[] = {0.53,0.845}; - }; - class VspeedBone - { - type = "linear"; - source = "vspeed"; - sourceScale = 1; - min = -10; - max = 10; - minPos[] = {0.93,0.2}; - maxPos[] = {0.93,0.8}; - }; - class RadarAltitudeBone - { - type = "linear"; - source = "altitudeAGL"; - sourceScale = 1; - min = 0; - max = 60; - minPos[] = {0.965,0.2}; - maxPos[] = {0.965,0.8}; - }; - class HorizonBankRot - { - type = "rotational"; - source = "horizonBank"; - center[] = {0.5,0.5}; - min = -3.1416; - max = 3.1416; - minAngle = -180; - maxAngle = 180; - aspectRatio = 1; - }; - class ForwardVec - { - type = "vector"; - source = "forward"; - pos0[] = {0,0}; - pos10[] = {0.25,0.25}; - }; - class WeaponAim - { - type = "vector"; - source = "weapon"; - pos0[] = {0.5,0.5}; - pos10[] = {0.75,0.75}; - }; - class Level0 - { - type = "horizon"; - pos0[] = {0.5,0.5}; - pos10[] = {0.78,0.78}; - angle = 0; - }; - class LevelP5: Level0 - { - angle = 5; - }; - class LevelM5: Level0 - { - angle = -5; - }; - class LevelP10: Level0 - { - angle = 10; - }; - class LevelM10: Level0 - { - angle = -10; - }; - class LevelP15: Level0 - { - angle = 15; - }; - class LevelM15: Level0 - { - angle = -15; - }; - class LevelP20: Level0 - { - angle = 20; - }; - class LevelM20: Level0 - { - angle = -20; - }; - class LevelP25: Level0 - { - angle = 25; - }; - class LevelM25: Level0 - { - angle = -25; - }; - class LevelP30: Level0 - { - angle = 30; - }; - class LevelM30: Level0 - { - angle = -30; - }; - class LevelP35: Level0 - { - angle = 35; - }; - class LevelM35: Level0 - { - angle = -35; - }; - class LevelP40: Level0 - { - angle = 40; - }; - class LevelM40: Level0 - { - angle = -40; - }; - class LevelP45: Level0 - { - angle = 45; - }; - class LevelM45: Level0 - { - angle = -45; - }; - class LevelP50: Level0 - { - angle = 50; - }; - class LevelM50: Level0 - { - angle = -50; - }; - }; - class Draw - { - color[] = {0.18,1,0.18}; - alpha = 1; - condition = "on"; - class Horizont - { - clipTL[] = {0.15,0.15}; - clipBR[] = {0.85,0.85}; - class Dimmed - { - class Level0 - { - type = "line"; - points[] = {{ "Level0",{ -0.42,0 },1 },{ "Level0",{ -0.38,0 },1 },{ },{ "Level0",{ -0.37,0 },1 },{ "Level0",{ -0.33,0 },1 },{ },{ "Level0",{ -0.32,0 },1 },{ "Level0",{ -0.28,0 },1 },{ },{ "Level0",{ -0.27,0 },1 },{ "Level0",{ -0.23,0 },1 },{ },{ "Level0",{ -0.22,0 },1 },{ "Level0",{ -0.18,0 },1 },{ },{ "Level0",{ -0.17,0 },1 },{ "Level0",{ -0.13,0 },1 },{ },{ "Level0",{ -0.12,0 },1 },{ "Level0",{ -0.08,0 },1 },{ },{ "Level0",{ 0.42,0 },1 },{ "Level0",{ 0.38,0 },1 },{ },{ "Level0",{ 0.37,0 },1 },{ "Level0",{ 0.33,0 },1 },{ },{ "Level0",{ 0.32,0 },1 },{ "Level0",{ 0.28,0 },1 },{ },{ "Level0",{ 0.27,0 },1 },{ "Level0",{ 0.23,0 },1 },{ },{ "Level0",{ 0.22,0 },1 },{ "Level0",{ 0.18,0 },1 },{ },{ "Level0",{ 0.17,0 },1 },{ "Level0",{ 0.13,0 },1 },{ },{ "Level0",{ 0.12,0 },1 },{ "Level0",{ 0.08,0 },1 }}; - }; - }; - }; - class HorizonBankRot - { - type = "line"; - width = 3; - points[] = {{ "HorizonBankRot",{ 0,0.25 },1 },{ "HorizonBankRot",{ -0.01,0.23 },1 },{ "HorizonBankRot",{ 0.01,0.23 },1 },{ "HorizonBankRot",{ 0,0.25 },1 }}; - }; - class Static_HAD_BOX - { - clipTL[] = {0,1}; - clipBR[] = {1,0}; - type = "line"; - width = 5; - points[] = {{ { "0.5-0.1","0.9-0.04" },1 },{ { "0.5-0.1","0.9+0.04" },1 },{ { "0.5+0.1","0.9+0.04" },1 },{ { "0.5+0.1","0.9-0.04" },1 },{ { "0.5-0.1","0.9-0.04" },1 },{ },{ { "0.5-0.1","0.9-0.04+0.012" },1 },{ { "0.5-0.092","0.9-0.04+0.012" },1 },{ },{ { "0.5+0.1","0.9-0.04+0.012" },1 },{ { "0.5+0.092","0.9-0.04+0.012" },1 },{ },{ { 0.5,"0.9-0.04" },1 },{ { 0.5,"0.9-0.032" },1 },{ },{ { 0.5,"0.9+0.04" },1 },{ { 0.5,"0.9+0.032" },1 },{ }}; - }; - class Gunner_HAD - { - type = "line"; - width = 6; - points[] = {{ "GunnerAim",{ -0.015,-0.008 },1 },{ "GunnerAim",{ -0.015,0.008 },1 },{ "GunnerAim",{ 0.015,0.008 },1 },{ "GunnerAim",{ 0.015,-0.008 },1 },{ "GunnerAim",{ -0.015,-0.008 },1 }}; - }; - class Slip_ball_group - { - class Slip_bars - { - type = "line"; - width = 4; - points[] = {{ { "0.5-0.018","0.9-0.04" },1 },{ { "0.5-0.018","0.9-0.075" },1 },{ },{ { "0.5+0.018","0.9-0.04" },1 },{ { "0.5+0.018","0.9-0.075" },1 }}; - }; - class Slip_ball - { - type = "line"; - width = 6; - points[] = {{ "Velocity_slip",1,{ "0 * 0.75","-0.02 * 0.75" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.75","-0.01732 * 0.75" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.75","-0.0099999998 * 0.75" },1 },{ "Velocity_slip",1,{ "0.02 * 0.75","0 * 0.75" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.75","0.0099999998 * 0.75" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.75","0.01732 * 0.75" },1 },{ "Velocity_slip",1,{ "0 * 0.75","0.02 * 0.75" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.75","0.01732 * 0.75" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.75","0.0099999998 * 0.75" },1 },{ "Velocity_slip",1,{ "-0.02 * 0.75","0 * 0.75" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.75","-0.0099999998 * 0.75" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.75","-0.01732 * 0.75" },1 },{ "Velocity_slip",1,{ "0 * 0.75","-0.02 * 0.75" },1 },{ },{ "Velocity_slip",1,{ "0 * 0.6","-0.02 * 0.6" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.6","-0.01732 * 0.6" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.6","-0.0099999998 * 0.6" },1 },{ "Velocity_slip",1,{ "0.02 * 0.6","0 * 0.6" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.6","0.0099999998 * 0.6" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.6","0.01732 * 0.6" },1 },{ "Velocity_slip",1,{ "0 * 0.6","0.02 * 0.6" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.6","0.01732 * 0.6" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.6","0.0099999998 * 0.6" },1 },{ "Velocity_slip",1,{ "-0.02 * 0.6","0 * 0.6" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.6","-0.0099999998 * 0.6" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.6","-0.01732 * 0.6" },1 },{ "Velocity_slip",1,{ "0 * 0.6","-0.02 * 0.6" },1 },{ },{ "Velocity_slip",1,{ "0 * 0.5","-0.02 * 0.5" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.5","-0.01732 * 0.5" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.5","-0.0099999998 * 0.5" },1 },{ "Velocity_slip",1,{ "0.02 * 0.5","0 * 0.5" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.5","0.0099999998 * 0.5" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.5","0.01732 * 0.5" },1 },{ "Velocity_slip",1,{ "0 * 0.5","0.02 * 0.5" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.5","0.01732 * 0.5" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.5","0.0099999998 * 0.5" },1 },{ "Velocity_slip",1,{ "-0.02 * 0.5","0 * 0.5" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.5","-0.0099999998 * 0.5" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.5","-0.01732 * 0.5" },1 },{ "Velocity_slip",1,{ "0 * 0.5","-0.02 * 0.5" },1 },{ },{ "Velocity_slip",1,{ "0 * 0.4","-0.02 * 0.4" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.4","-0.01732 * 0.4" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.4","-0.0099999998 * 0.4" },1 },{ "Velocity_slip",1,{ "0.02 * 0.4","0 * 0.4" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.4","0.0099999998 * 0.4" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.4","0.01732 * 0.4" },1 },{ "Velocity_slip",1,{ "0 * 0.4","0.02 * 0.4" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.4","0.01732 * 0.4" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.4","0.0099999998 * 0.4" },1 },{ "Velocity_slip",1,{ "-0.02 * 0.4","0 * 0.4" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.4","-0.0099999998 * 0.4" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.4","-0.01732 * 0.4" },1 },{ "Velocity_slip",1,{ "0 * 0.4","-0.02 * 0.4" },1 },{ },{ "Velocity_slip",1,{ "0 * 0.30","-0.02 * 0.30" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.30","-0.01732 * 0.30" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.30","-0.0099999998 * 0.30" },1 },{ "Velocity_slip",1,{ "0.02 * 0.30","0 * 0.30" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.30","0.0099999998 * 0.30" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.30","0.01732 * 0.30" },1 },{ "Velocity_slip",1,{ "0 * 0.30","0.02 * 0.30" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.30","0.01732 * 0.30" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.30","0.0099999998 * 0.30" },1 },{ "Velocity_slip",1,{ "-0.02 * 0.30","0 * 0.30" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.30","-0.0099999998 * 0.30" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.30","-0.01732 * 0.30" },1 },{ "Velocity_slip",1,{ "0 * 0.30","-0.02 * 0.30" },1 },{ },{ "Velocity_slip",1,{ "0 * 0.20","-0.02 * 0.20" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.20","-0.01732 * 0.20" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.20","-0.0099999998 * 0.20" },1 },{ "Velocity_slip",1,{ "0.02 * 0.20","0 * 0.20" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.20","0.0099999998 * 0.20" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.20","0.01732 * 0.20" },1 },{ "Velocity_slip",1,{ "0 * 0.20","0.02 * 0.20" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.20","0.01732 * 0.20" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.20","0.0099999998 * 0.20" },1 },{ "Velocity_slip",1,{ "-0.02 * 0.20","0 * 0.20" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.20","-0.0099999998 * 0.20" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.20","-0.01732 * 0.20" },1 },{ "Velocity_slip",1,{ "0 * 0.20","-0.02 * 0.20" },1 },{ },{ "Velocity_slip",1,{ "0 * 0.1","-0.02 * 0.1" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.1","-0.01732 * 0.1" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.1","-0.0099999998 * 0.1" },1 },{ "Velocity_slip",1,{ "0.02 * 0.1","0 * 0.1" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.1","0.0099999998 * 0.1" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.1","0.01732 * 0.1" },1 },{ "Velocity_slip",1,{ "0 * 0.1","0.02 * 0.1" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.1","0.01732 * 0.1" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.1","0.0099999998 * 0.1" },1 },{ "Velocity_slip",1,{ "-0.02 * 0.1","0 * 0.1" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.1","-0.0099999998 * 0.1" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.1","-0.01732 * 0.1" },1 },{ "Velocity_slip",1,{ "0 * 0.1","-0.02 * 0.1" },1 }}; - }; - }; - class Centerline - { - type = "line"; - width = 5; - points[] = {{ { 0.5,0.48 },1 },{ { 0.5,0.45 },1 },{ },{ { 0.5,0.52 },1 },{ { 0.5,0.55 },1 },{ },{ { 0.48,0.5 },1 },{ { 0.45,0.5 },1 },{ },{ { 0.52,0.5 },1 },{ { 0.55,0.5 },1 },{ }}; - }; - class WeaponName - { - type = "text"; - source = "weapon"; - sourceScale = 1; - align = "right"; - scale = 1; - pos[] = {{ 0.61,0.86 },1}; - right[] = {{ 0.65,0.86 },1}; - down[] = {{ 0.61,0.9 },1}; - }; - class Ammo_GUN - { - type = "group"; - condition = "mgun"; - class Ammo_count_GUN - { - type = "text"; - source = "ammo"; - sourceScale = 1; - align = "right"; - scale = 1; - pos[] = {{ 0.61,0.89 },1}; - right[] = {{ 0.65,0.89 },1}; - down[] = {{ 0.61,0.93 },1}; - }; - }; - class Ammo_RKT - { - type = "group"; - condition = "rocket"; - class Ammo_count_RKT - { - type = "text"; - source = "ammo"; - sourceScale = 1; - align = "right"; - scale = 1; - pos[] = {{ 0.61,0.89 },1}; - right[] = {{ 0.65,0.89 },1}; - down[] = {{ 0.61,0.93 },1}; - }; - }; - class Ammo_AGM - { - type = "group"; - condition = "AAmissile"; - class Ammo_count_AGM - { - type = "text"; - source = "ammo"; - sourceScale = 1; - align = "right"; - scale = 1; - pos[] = {{ 0.61,0.89 },1}; - right[] = {{ 0.65,0.89 },1}; - down[] = {{ 0.61,0.93 },1}; - }; - }; - class Ammo_AAM - { - type = "group"; - condition = "ATmissile"; - class Ammo_count_AAM - { - type = "text"; - source = "ammo"; - sourceScale = 1; - align = "right"; - scale = 1; - pos[] = {{ 0.61,0.89 },1}; - right[] = {{ 0.65,0.89 },1}; - down[] = {{ 0.61,0.93 },1}; - }; - }; - class Ammo_Bomb - { - type = "group"; - condition = "Bomb"; - class Ammo_count_Bomb - { - type = "text"; - source = "ammo"; - sourceScale = 1; - align = "right"; - scale = 1; - pos[] = {{ 0.61,0.89 },1}; - right[] = {{ 0.65,0.89 },1}; - down[] = {{ 0.61,0.93 },1}; - }; - }; - class LightsGroup - { - type = "group"; - condition = "lights"; - class LightsText - { - type = "text"; - source = "static"; - text = "LIGHTS"; - align = "right"; - scale = 1; - pos[] = {{ 0.03,"0.53 + 0.055" },1}; - right[] = {{ 0.07,"0.53 + 0.055" },1}; - down[] = {{ 0.03,"0.53 + 0.095" },1}; - }; - }; - class CollisionLightsGroup - { - type = "group"; - condition = "collisionlights"; - class CollisionLightsText - { - type = "text"; - source = "static"; - text = "A-COL"; - align = "right"; - scale = 1; - pos[] = {{ 0.03,"0.53 + 0.105" },1}; - right[] = {{ 0.07,"0.53 + 0.105" },1}; - down[] = {{ 0.03,"0.53 + 0.145" },1}; - }; - }; - class GearGroup - { - type = "group"; - condition = "ils"; - class GearText - { - type = "text"; - source = "static"; - text = "GEAR"; - align = "right"; - scale = 1; - pos[] = {{ 0.03,"0.53 + 0.155" },1}; - right[] = {{ 0.07,"0.53 + 0.155" },1}; - down[] = {{ 0.03,"0.53 + 0.195" },1}; - }; - }; - class ATMissileTOFGroup - { - condition = "ATmissile"; - type = "group"; - class TOFtext - { - type = "text"; - align = "right"; - source = "static"; - text = "TOF="; - scale = 1; - pos[] = {{ 0.61,0.92 },1}; - right[] = {{ 0.65,0.92 },1}; - down[] = {{ 0.61,0.96 },1}; - }; - class TOFnumber - { - type = "text"; - source = "targetDist"; - sourcescale = 0.0025; - align = "right"; - scale = 1; - pos[] = {{ 0.69,0.92 },1}; - right[] = {{ 0.73,0.92 },1}; - down[] = {{ 0.69,0.96 },1}; - }; - }; - class LaserTOFGroup - { - condition = "Bomb"; - type = "group"; - class TOFtext - { - type = "text"; - align = "right"; - source = "static"; - text = "TOF="; - scale = 1; - pos[] = {{ 0.61,0.92 },1}; - right[] = {{ 0.65,0.92 },1}; - down[] = {{ 0.61,0.96 },1}; - }; - class TOFnumber - { - type = "text"; - source = "targetDist"; - sourcescale = 0.0025; - align = "right"; - scale = 1; - pos[] = {{ 0.69,0.92 },1}; - right[] = {{ 0.73,0.92 },1}; - down[] = {{ 0.69,0.96 },1}; - }; - }; - class RocketTOFGroup - { - condition = "Rocket"; - type = "group"; - class TOFtext - { - type = "text"; - align = "right"; - source = "static"; - text = "TOF="; - scale = 1; - pos[] = {{ 0.61,0.92 },1}; - right[] = {{ 0.65,0.92 },1}; - down[] = {{ 0.61,0.96 },1}; - }; - class TOFnumber - { - type = "text"; - source = "targetDist"; - sourcescale = 0.0025; - align = "right"; - scale = 1; - pos[] = {{ 0.69,0.92 },1}; - right[] = {{ 0.73,0.92 },1}; - down[] = {{ 0.69,0.96 },1}; - }; - }; - class RangeNumber - { - type = "text"; - source = "targetDist"; - sourceScale = 1; - align = "left"; - scale = 1; - pos[] = {{ 0.39,0.89 },1}; - right[] = {{ 0.43,0.89 },1}; - down[] = {{ 0.39,0.93 },1}; - }; - class RangeText - { - type = "text"; - source = "static"; - text = "RNG"; - align = "left"; - scale = 1; - pos[] = {{ 0.39,0.86 },1}; - right[] = {{ 0.43,0.86 },1}; - down[] = {{ 0.39,0.9 },1}; - }; - class SpeedNumber - { - type = "text"; - align = "right"; - scale = 1; - source = "speed"; - sourceScale = 3.6; - pos[] = {{ 0.03,0.475 },1}; - right[] = {{ 0.08,0.475 },1}; - down[] = {{ 0.03,0.525 },1}; - }; - class TorqueNumber - { - condition = "simulRTD"; - class Torque_number - { - type = "text"; - align = "left"; - scale = 1; - source = "rtdRotorTorque"; - sourceScale = 290; - pos[] = {{ 0.065,0.175 },1}; - right[] = {{ 0.115,0.175 },1}; - down[] = {{ 0.065,0.225 },1}; - }; - class Torquetext - { - type = "text"; - source = "static"; - text = "%"; - align = "right"; - scale = 1; - pos[] = {{ 0.07,0.175 },1}; - right[] = {{ 0.12,0.175 },1}; - down[] = {{ 0.07,0.225 },1}; - }; - }; - class AltNumber: SpeedNumber - { - align = "right"; - source = "altitudeAGL"; - sourceScale = 1; - pos[] = {{ 0.83,0.475 },1}; - right[] = {{ 0.88,0.475 },1}; - down[] = {{ 0.83,0.525 },1}; - }; - class ASLNumber - { - type = "text"; - source = "altitudeASL"; - sourceScale = 1; - align = "right"; - scale = 1; - pos[] = {{ 0.835,0.18 },1}; - right[] = {{ 0.875,0.18 },1}; - down[] = {{ 0.835,0.22 },1}; - }; - class VspeedScalePosta - { - type = "line"; - width = 5; - points[] = {{ { 0.98,0.2 },1 },{ { 1,0.2 },1 },{ },{ { 0.93,0.2 },1 },{ { 0.95,0.2 },1 },{ },{ { 0.98,0.35 },1 },{ { 1,0.35 },1 },{ },{ { 0.93,0.35 },1 },{ { 0.95,0.35 },1 },{ },{ { 0.94,0.38 },1 },{ { 0.95,0.38 },1 },{ },{ { 0.94,0.41 },1 },{ { 0.95,0.41 },1 },{ },{ { 0.94,0.44 },1 },{ { 0.95,0.44 },1 },{ },{ { 0.94,0.47 },1 },{ { 0.95,0.47 },1 },{ },{ { 0.98,0.5 },1 },{ { 1,0.5 },1 },{ },{ { 0.93,0.5 },1 },{ { 0.95,0.5 },1 },{ },{ { 0.94,0.53 },1 },{ { 0.95,0.53 },1 },{ },{ { 0.94,0.56 },1 },{ { 0.95,0.56 },1 },{ },{ { 0.94,0.59 },1 },{ { 0.95,0.59 },1 },{ },{ { 0.94,0.62 },1 },{ { 0.95,0.62 },1 },{ },{ { 0.98,0.65 },1 },{ { 1,0.65 },1 },{ },{ { 0.93,0.65 },1 },{ { 0.95,0.65 },1 },{ },{ { 0.99,0.68 },1 },{ { 0.98,0.68 },1 },{ },{ { 0.99,0.71 },1 },{ { 0.98,0.71 },1 },{ },{ { 0.99,0.74 },1 },{ { 0.98,0.74 },1 },{ },{ { 0.99,0.77 },1 },{ { 0.98,0.77 },1 },{ },{ { 0.98,0.8 },1 },{ { 1,0.8 },1 },{ },{ { 0.93,0.8 },1 },{ { 0.95,0.8 },1 },{ }}; - }; - class RadarAltitudeBand - { - clipTL[] = {0,0.2}; - clipBR[] = {1,0.8}; - hideValue = 201; - class radarbanda - { - type = "line"; - width = 17; - points[] = {{ "RadarAltitudeBone",{ 0,0 },1 },{ "RadarAltitudeBone",{ 0,0.6 },1 }}; - }; - }; - class VspeedBand - { - type = "line"; - width = 3; - points[] = {{ "VspeedBone",{ -0.01,0 },1 },{ "VspeedBone",{ -0.025,-0.015 },1 },{ "VspeedBone",{ -0.025,0.015 },1 },{ "VspeedBone",{ -0.01,0 },1 },{ }}; - }; - class HeadingNumber: SpeedNumber - { - source = "heading"; - sourceScale = 1; - align = "center"; - pos[] = {{ 0.5,0.045 },1}; - right[] = {{ 0.56,0.045 },1}; - down[] = {{ 0.5,"0.045 + 0.06" },1}; - }; - class Center_box - { - type = "line"; - width = 1.5; - points[] = {{ { 0.45,"0.02 + 0.085 - 0.06" },1 },{ { "0.45 + 0.10","0.02 + 0.085 - 0.06" },1 },{ { "0.45 + 0.10","0.02 + 0.085" },1 },{ { 0.45,"0.02 + 0.085" },1 },{ { 0.45,"0.02 + 0.085 - 0.06" },1 }}; - }; - class HeadingArrow - { - type = "line"; - width = 7; - points[] = {{ { "0.5","0.128 + 0.03" },1 },{ { 0.5,0.128 },1 }}; - }; - class HeadingScale_LEFT - { - clipTL[] = {0,0}; - clipBR[] = {0.45,1}; - class Heading_group - { - type = "scale"; - horizontal = 1; - source = "heading"; - sourceScale = 1; - width = 5; - top = 0.12; - center = 0.5; - bottom = 0.88; - lineXleft = "0.03 + 0.085"; - lineYright = "0.02 + 0.085"; - lineXleftMajor = "0.04 + 0.085"; - lineYrightMajor = "0.02 + 0.085"; - majorLineEach = 3; - numberEach = 3; - step = 10; - stepSize = "0.05"; - align = "center"; - scale = 1; - pos[] = {0.12,"0.0 + 0.065"}; - right[] = {0.16,"0.0 + 0.065"}; - down[] = {0.12,"0.04 + 0.065"}; - }; - }; - class HeadingScale_RIGHT - { - clipTL[] = {0.55,0}; - clipBR[] = {1,1}; - class Heading_group - { - type = "scale"; - horizontal = 1; - source = "heading"; - sourceScale = 1; - width = 5; - top = 0.12; - center = 0.5; - bottom = 0.88; - lineXleft = "0.03 + 0.085"; - lineYright = "0.02 + 0.085"; - lineXleftMajor = "0.04 + 0.085"; - lineYrightMajor = "0.02 + 0.085"; - majorLineEach = 3; - numberEach = 3; - step = 10; - stepSize = "0.05"; - align = "center"; - scale = 1; - pos[] = {0.12,"0.0 + 0.065"}; - right[] = {0.16,"0.0 + 0.065"}; - down[] = {0.12,"0.04 + 0.065"}; - }; - }; - class HeadingScale_BOTTOM - { - clipTL[] = {0.45,"0.02 + 0.085"}; - clipBR[] = {"0.45 + 0.10",1}; - class Heading_group - { - type = "scale"; - horizontal = 1; - source = "heading"; - sourceScale = 1; - width = 5; - top = 0.12; - center = 0.5; - bottom = 0.88; - lineXleft = "0.03 + 0.085"; - lineYright = "0.02 + 0.085"; - lineXleftMajor = "0.04 + 0.085"; - lineYrightMajor = "0.02 + 0.085"; - majorLineEach = 3; - numberEach = 3; - step = 10; - stepSize = "0.05"; - align = "center"; - scale = 1; - pos[] = {0.12,"0.0 + 0.065"}; - right[] = {0.16,"0.0 + 0.065"}; - down[] = {0.12,"0.04 + 0.065"}; - }; - }; - class Fuel_Text - { - type = "text"; - source = "static"; - text = "Fuel"; - align = "right"; - scale = 1; - pos[] = {{ 0.03,0.9 },1}; - right[] = {{ 0.07,0.9 },1}; - down[] = {{ 0.03,0.94 },1}; - }; - class Fuel_Number - { - type = "text"; - source = "fuel"; - sourceScale = 100; - align = "right"; - scale = 1; - pos[] = {{ 0.1,0.9 },1}; - right[] = {{ 0.14,0.9 },1}; - down[] = {{ 0.1,0.94 },1}; - }; - }; - helmetMountedDisplay = 1; - helmetPosition[] = {-0.04,0.04,0.1}; - helmetRight[] = {0.08,0,0}; - helmetDown[] = {0,-0.08,0}; - }; - class ACE_HUD_2 - { - topLeft = "HUD_top_left"; - topRight = "HUD_top_right"; - bottomLeft = "HUD_bottom_left"; - borderLeft = 0; - borderRight = 0; - borderTop = 0; - borderBottom = 0; - color[] = {0.15,1,0.15,1}; - enableParallax = 0; - class Bones - { - class Velocity - { - type = "vector"; - source = "velocity"; - pos0[] = {0.5,0.5}; - pos10[] = {0.75,0.75}; - }; - class ForwardVec1 - { - type = "vector"; - source = "forward"; - pos0[] = {0,0}; - pos10[] = {0.25,0.25}; - }; - class ForwardVec - { - type = "vector"; - source = "forward"; - pos0[] = {0,0}; - pos10[] = {0.253,0.253}; - }; - class WeaponAim - { - type = "vector"; - source = "weapon"; - pos0[] = {0.5,0.5}; - pos10[] = {0.753,0.753}; - }; - class WeaponAim1 - { - type = "vector"; - source = "weapon"; - pos0[] = {0,0}; - pos10[] = {0.253,0.23}; - }; - class Target - { - type = "vector"; - source = "target"; - pos0[] = {0.5,0.5}; - pos10[] = {0.753,0.753}; - }; - class RadarContact - { - type = "fixed"; - pos[] = {0,0}; - }; - }; - class Draw - { - color[] = {0.18,1,0.18}; - alpha = 1; - condition = "on"; - class PlaneMovementCrosshair - { - type = "line"; - width = 7; - points[] = {{ "ForwardVec1",1,"Velocity",1,{ 0,-0.02 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0.01,-0.01732 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0.01732,-0.01 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0.02,0 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0.01732,0.01 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0.01,0.01732 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0,0.02 },1 },{ "ForwardVec1",1,"Velocity",1,{ -0.01,0.01732 },1 },{ "ForwardVec1",1,"Velocity",1,{ -0.01732,0.01 },1 },{ "ForwardVec1",1,"Velocity",1,{ -0.02,0 },1 },{ "ForwardVec1",1,"Velocity",1,{ -0.01732,-0.01 },1 },{ "ForwardVec1",1,"Velocity",1,{ -0.01,-0.01732 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0,-0.02 },1 },{ },{ "ForwardVec1",1,"Velocity",1,{ 0.04,0 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0.02,0 },1 },{ },{ "ForwardVec1",1,"Velocity",1,{ -0.04,0 },1 },{ "ForwardVec1",1,"Velocity",1,{ -0.02,0 },1 },{ },{ "ForwardVec1",1,"Velocity",1,{ 0,-0.04 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0,-0.02 },1 }}; - }; - class Gunner_AIM - { - type = "group"; - class Circle - { - type = "line"; - width = 6; - points[] = {{ "ForwardVec",1,"WeaponAim",1,{ 0,-0.015 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0,-0.03 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0,-0.0325 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0,-0.0475 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0,0.015 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0,0.03 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0,0.0325 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0,0.0475 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ -0.015,0 },1 },{ "ForwardVec",1,"WeaponAim",1,{ -0.03,0 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ -0.0325,0 },1 },{ "ForwardVec",1,"WeaponAim",1,{ -0.0475,0 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0.015,0 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0.03,0 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0.0325,0 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0.0475,0 },1 }}; - }; - }; - class GunCross - { - condition = "mgun"; - class Circle - { - type = "line"; - width = 9; - points[] = {{ "ForwardVec",1,"WeaponAim",1,{ 0,-0.05 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0,-0.015 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0,0.015 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0,0.05 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ -0.05,0 },1 },{ "ForwardVec",1,"WeaponAim",1,{ -0.015,0 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0.015,0 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0.05,0 },1 },{ }}; - }; - }; - class RocketCross - { - condition = "rocket"; - width = 6; - class Circle - { - type = "line"; - width = 6; - points[] = {{ "ForwardVec",1,"WeaponAim",1,{ -0.05,-0.08 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0.05,-0.08 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0,-0.08 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0,0.08 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ -0.05,0.08 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0.05,0.08 },1 },{ }}; - }; - }; - class AT_Aim - { - condition = "ATmissile"; - width = 2; - class Circle - { - type = "line"; - width = 2; - points[] = {{ "ForwardVec",1,"WeaponAim",1,{ -0.1,-0.1 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0.1,-0.1 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0.1,0.1 },1 },{ "ForwardVec",1,"WeaponAim",1,{ -0.1,0.1 },1 },{ "ForwardVec",1,"WeaponAim",1,{ -0.1,-0.1 },1 }}; - }; - }; - class AA_aim - { - condition = "AAmissile"; - class Circle - { - type = "line"; - width = 2.5; - points[] = {{ "ForwardVec",1,"WeaponAim",1,{ "0 / 4","-0.248559 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0434 / 4","-0.244781 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0855 / 4","-0.233571 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.125 / 4","-0.215252 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1607 / 4","-0.190396 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1915 / 4","-0.159774 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2165 / 4","-0.12428 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.234925 / 4","-0.0850072 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2462 / 4","-0.0431499 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.25 / 4","0 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2462 / 4","0.0431499 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.234925 / 4","0.0850072 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2165 / 4","0.12428 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1915 / 4","0.159774 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1607 / 4","0.190396 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.125 / 4","0.215252 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0855 / 4","0.233571 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0434 / 4","0.244781 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0 / 4","0.248559 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0434 / 4","0.244781 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0855 / 4","0.233571 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.125 / 4","0.215252 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1607 / 4","0.190396 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1915 / 4","0.159774 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2165 / 4","0.12428 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.234925 / 4","0.0850072 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2462 / 4","0.0431499 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.25 / 4","0 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2462 / 4","-0.0431499 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.234925 / 4","-0.0850072 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2165 / 4","-0.12428 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1915 / 4","-0.159774 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1607 / 4","-0.190396 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.125 / 4","-0.215252 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0855 / 4","-0.233571 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0434 / 4","-0.244781 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0 / 4","-0.248559 / 4" },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ "0 / 2","-0.248559 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0434 / 2","-0.244781 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0855 / 2","-0.233571 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.125 / 2","-0.215252 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1607 / 2","-0.190396 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1915 / 2","-0.159774 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2165 / 2","-0.12428 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.234925 / 2","-0.0850072 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2462 / 2","-0.0431499 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.25 / 2","0 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2462 / 2","0.0431499 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.234925 / 2","0.0850072 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2165 / 2","0.12428 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1915 / 2","0.159774 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1607 / 2","0.190396 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.125 / 2","0.215252 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0855 / 2","0.233571 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0434 / 2","0.244781 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0 / 2","0.248559 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0434 / 2","0.244781 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0855 / 2","0.233571 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.125 / 2","0.215252 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1607 / 2","0.190396 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1915 / 2","0.159774 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2165 / 2","0.12428 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.234925 / 2","0.0850072 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2462 / 2","0.0431499 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.25 / 2","0 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2462 / 2","-0.0431499 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.234925 / 2","-0.0850072 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2165 / 2","-0.12428 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1915 / 2","-0.159774 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1607 / 2","-0.190396 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.125 / 2","-0.215252 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0855 / 2","-0.233571 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0434 / 2","-0.244781 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0 / 2","-0.248559 / 2" },1 }}; - }; - }; - class TargetACQ - { - type = "line"; - width = 2; - points[] = {{ "ForwardVec",1,"target",{ 0,-0.06 },1 },{ "ForwardVec",1,"target",{ 0,-0.055 },1 },{ },{ "ForwardVec",1,"target",{ 0,-0.05 },1 },{ "ForwardVec",1,"target",{ 0,-0.045 },1 },{ },{ "ForwardVec",1,"target",{ 0,-0.04 },1 },{ "ForwardVec",1,"target",{ 0,-0.035 },1 },{ },{ "ForwardVec",1,"target",{ 0,-0.03 },1 },{ "ForwardVec",1,"target",{ 0,-0.025 },1 },{ },{ "ForwardVec",1,"target",{ 0,-0.02 },1 },{ "ForwardVec",1,"target",{ 0,-0.015 },1 },{ },{ "ForwardVec",1,"target",{ 0,-0.01 },1 },{ "ForwardVec",1,"target",{ 0,-0.005 },1 },{ },{ "ForwardVec",1,"target",{ 0,0 },1 },{ "ForwardVec",1,"target",{ 0,0 },1 },{ },{ "ForwardVec",1,"target",{ 0,0.06 },1 },{ "ForwardVec",1,"target",{ 0,0.055 },1 },{ },{ "ForwardVec",1,"target",{ 0,0.05 },1 },{ "ForwardVec",1,"target",{ 0,0.045 },1 },{ },{ "ForwardVec",1,"target",{ 0,0.04 },1 },{ "ForwardVec",1,"target",{ 0,0.035 },1 },{ },{ "ForwardVec",1,"target",{ 0,0.03 },1 },{ "ForwardVec",1,"target",{ 0,0.025 },1 },{ },{ "ForwardVec",1,"target",{ 0,0.02 },1 },{ "ForwardVec",1,"target",{ 0,0.015 },1 },{ },{ "ForwardVec",1,"target",{ 0,0.01 },1 },{ "ForwardVec",1,"target",{ 0,0.005 },1 },{ },{ "ForwardVec",1,"target",{ -0.06,0 },1 },{ "ForwardVec",1,"target",{ -0.055,0 },1 },{ },{ "ForwardVec",1,"target",{ -0.05,0 },1 },{ "ForwardVec",1,"target",{ -0.045,0 },1 },{ },{ "ForwardVec",1,"target",{ -0.04,0 },1 },{ "ForwardVec",1,"target",{ -0.035,0 },1 },{ },{ "ForwardVec",1,"target",{ -0.03,0 },1 },{ "ForwardVec",1,"target",{ -0.025,0 },1 },{ },{ "ForwardVec",1,"target",{ -0.02,0 },1 },{ "ForwardVec",1,"target",{ -0.015,0 },1 },{ },{ "ForwardVec",1,"target",{ -0.01,0 },1 },{ "ForwardVec",1,"target",{ -0.005,0 },1 },{ },{ "ForwardVec",1,"target",{ 0.06,0 },1 },{ "ForwardVec",1,"target",{ 0.055,0 },1 },{ },{ "ForwardVec",1,"target",{ 0.05,0 },1 },{ "ForwardVec",1,"target",{ 0.045,0 },1 },{ },{ "ForwardVec",1,"target",{ 0.04,0 },1 },{ "ForwardVec",1,"target",{ 0.035,0 },1 },{ },{ "ForwardVec",1,"target",{ 0.03,0 },1 },{ "ForwardVec",1,"target",{ 0.025,0 },1 },{ },{ "ForwardVec",1,"target",{ 0.02,0 },1 },{ "ForwardVec",1,"target",{ 0.015,0 },1 },{ },{ "ForwardVec",1,"target",{ 0.01,0 },1 },{ "ForwardVec",1,"target",{ 0.005,0 },1 },{ }}; - }; - class RadarTargets - { - type = "radar"; - pos0[] = {0.5,0.5}; - pos10[] = {0.753,0.753}; - width = 2.5; - points[] = {{ "ForwardVec",1,"RadarContact",{ -0.01,-0.01 },1 },{ "ForwardVec",1,"RadarContact",{ 0.01,-0.01 },1 },{ "ForwardVec",1,"RadarContact",{ 0.01,0.01 },1 },{ "ForwardVec",1,"RadarContact",{ -0.01,0.01 },1 },{ "ForwardVec",1,"RadarContact",{ -0.01,-0.01 },1 }}; - }; - }; - helmetMountedDisplay = 1; - helmetPosition[] = {-0.035,0.035,0.1}; - helmetRight[] = {0.07,0,0}; - helmetDown[] = {0,-0.07,0}; - }; - }; - - class Turrets: Turrets { - class MainTurret: MainTurret { - weapons[] = {"ACE_gatling_20mm_Comanche","missiles_DAGR","missiles_ASRAAM", "ACE_AIR_SAFETY"}; - magazines[] = {"ACE_500Rnd_20mm_shells_Comanche","4Rnd_AAA_missiles","24Rnd_PG_missiles"}; - - outGunnerMayFire = 1; - commanding = -1; - primaryGunner = 1; - gunnerOpticsModel = ""; - gunnerOpticsEffect[] = {"TankCommanderOptics1"}; - gunnerForceOptics = 0; - turretInfoType = "Rsc_ACE_Helo_UI_Turret"; - showAllTargets = 2; - discretedistance[] = {100,200,300,400,500,600,700,800,900,1000,1100,1200,1300,1400,1500,1600,1700,1800,1900,2000,2100,2200,2300,2400,2500,2600,2700,2800,2900,3000}; - discretedistanceinitindex = 3; - copilotHasFlares = 1; - directionStabilized = 1; - isCopilot = 1; - showHMD = 1; - CanEject = 1; - startEngine = 0; - minElev = -51; - maxElev = 9; - initElev = 6; - minTurn = -120; - maxTurn = 120; - initTurn = 0; - - class OpticsIn - { - class Wide - { - opticsDisplayName = "W"; - initAngleX = 0; - minAngleX = -35; - maxAngleX = 10; - initAngleY = 0; - minAngleY = -100; - maxAngleY = 100; - initFov = 0.466; - minFov = 0.466; - maxFov = 0.466; - visionMode[] = {"Normal","Ti"}; - thermalMode[] = {0,1}; - gunnerOpticsColor[] = {0,0,0,1}; - directionStabilized = 1; - horizontallyStabilized = 1; - gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_wide_F"; - }; - class Medium: Wide - { - opticsDisplayName = "M"; - initFov = 0.093; - minFov = 0.093; - maxFov = 0.093; - gunnerOpticsColor[] = {0,0,0,1}; - directionStabilized = 1; - horizontallyStabilized = 1; - gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_medium_F"; - }; - class Narrow: Wide - { - opticsDisplayName = "N"; - initFov = 0.029; - minFov = 0.029; - maxFov = 0.029; - gunnerOpticsColor[] = {0,0,0,1}; - directionStabilized = 1; - horizontallyStabilized = 1; - gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_narrow_F"; - - }; - class Narrower: Wide - { - opticsDisplayName = "Z"; - initFov = 0.01; - minFov = 0.01; - maxFov = 0.01; - gunnerOpticsColor[] = {0,0,0,1}; - directionStabilized = 1; - horizontallyStabilized = 1; - gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_narrow_F"; - - }; - }; - class OpticsOut - { - class Monocular - { - initAngleX = 0; - minAngleX = -30; - maxAngleX = 30; - initAngleY = 0; - minAngleY = -100; - maxAngleY = 100; - initFov = 1.1; - minFov = 0.133; - maxFov = 1.1; - visionMode[] = {"Normal","NVG"}; - gunnerOpticsModel = ""; - gunnerOpticsEffect[] = {}; - hideUnitInfo = 1; - }; - }; - }; - }; - - class AnimationSources: AnimationSources { - class Gatling { - weapon = "ACE_gatling_20mm_Comanche"; - }; - class Muzzle_flash { - weapon = "ACE_gatling_20mm_Comanche"; - }; - }; +class Heli_Attack_01_base_F: Helicopter_Base_F { + lockDetectionSystem = 12; + incomingMissileDetectionSystem = 16; + driverCanEject = 1; + + class MFD + { + class AirplaneHUD + { + class Bones{}; + class Draw{}; + topLeft = "HUD_top_left"; + topRight = "HUD_top_right"; + bottomLeft = "HUD_bottom_left"; + borderLeft = 0; + borderRight = 0; + borderTop = 0; + borderBottom = 0; + color[] = {0.15,1,0.15,1}; + enableParallax = 0; + helmetMountedDisplay = 1; + helmetPosition[] = {0,0,0}; + helmetRight[] = {0,0,0}; + helmetDown[] = {0,0,0}; + }; + class ACE_HUD_1 + { + topLeft = "HUD_top_left"; + topRight = "HUD_top_right"; + bottomLeft = "HUD_bottom_left"; + borderLeft = 0; + borderRight = 0; + borderTop = 0; + borderBottom = 0; + color[] = {0.15,1,0.15,1}; + enableParallax = 0; + class Bones + { + class GunnerAim + { + type = "vector"; + source = "weapon"; + pos0[] = {0.5,"0.9 - 0.04 + 0.012"}; + pos10[] = {"0.5 + 0.0111","0.9 - 0.04 + 0.012 + 0.0133"}; + }; + class Target + { + source = "target"; + type = "vector"; + pos0[] = {0.5,0.5}; + pos10[] = {0.85,0.85}; + }; + class Velocity + { + type = "vector"; + source = "velocity"; + pos0[] = {0.5,0.5}; + pos10[] = {0.65,0.65}; + }; + class Velocity_slip + { + type = "vector"; + source = "velocity"; + pos0[] = {0.5,0.845}; + pos10[] = {0.53,0.845}; + }; + class VspeedBone + { + type = "linear"; + source = "vspeed"; + sourceScale = 1; + min = -10; + max = 10; + minPos[] = {0.93,0.2}; + maxPos[] = {0.93,0.8}; + }; + class RadarAltitudeBone + { + type = "linear"; + source = "altitudeAGL"; + sourceScale = 1; + min = 0; + max = 60; + minPos[] = {0.965,0.2}; + maxPos[] = {0.965,0.8}; + }; + class HorizonBankRot + { + type = "rotational"; + source = "horizonBank"; + center[] = {0.5,0.5}; + min = -3.1416; + max = 3.1416; + minAngle = -180; + maxAngle = 180; + aspectRatio = 1; + }; + class ForwardVec + { + type = "vector"; + source = "forward"; + pos0[] = {0,0}; + pos10[] = {0.25,0.25}; + }; + class WeaponAim + { + type = "vector"; + source = "weapon"; + pos0[] = {0.5,0.5}; + pos10[] = {0.75,0.75}; + }; + class Level0 + { + type = "horizon"; + pos0[] = {0.5,0.5}; + pos10[] = {0.78,0.78}; + angle = 0; + }; + class LevelP5: Level0 + { + angle = 5; + }; + class LevelM5: Level0 + { + angle = -5; + }; + class LevelP10: Level0 + { + angle = 10; + }; + class LevelM10: Level0 + { + angle = -10; + }; + class LevelP15: Level0 + { + angle = 15; + }; + class LevelM15: Level0 + { + angle = -15; + }; + class LevelP20: Level0 + { + angle = 20; + }; + class LevelM20: Level0 + { + angle = -20; + }; + class LevelP25: Level0 + { + angle = 25; + }; + class LevelM25: Level0 + { + angle = -25; + }; + class LevelP30: Level0 + { + angle = 30; + }; + class LevelM30: Level0 + { + angle = -30; + }; + class LevelP35: Level0 + { + angle = 35; + }; + class LevelM35: Level0 + { + angle = -35; + }; + class LevelP40: Level0 + { + angle = 40; + }; + class LevelM40: Level0 + { + angle = -40; + }; + class LevelP45: Level0 + { + angle = 45; + }; + class LevelM45: Level0 + { + angle = -45; + }; + class LevelP50: Level0 + { + angle = 50; + }; + class LevelM50: Level0 + { + angle = -50; + }; + }; + class Draw + { + color[] = {0.18,1,0.18}; + alpha = 1; + condition = "on"; + class Horizont + { + clipTL[] = {0.15,0.15}; + clipBR[] = {0.85,0.85}; + class Dimmed + { + class Level0 + { + type = "line"; + points[] = {{ "Level0",{ -0.42,0 },1 },{ "Level0",{ -0.38,0 },1 },{ },{ "Level0",{ -0.37,0 },1 },{ "Level0",{ -0.33,0 },1 },{ },{ "Level0",{ -0.32,0 },1 },{ "Level0",{ -0.28,0 },1 },{ },{ "Level0",{ -0.27,0 },1 },{ "Level0",{ -0.23,0 },1 },{ },{ "Level0",{ -0.22,0 },1 },{ "Level0",{ -0.18,0 },1 },{ },{ "Level0",{ -0.17,0 },1 },{ "Level0",{ -0.13,0 },1 },{ },{ "Level0",{ -0.12,0 },1 },{ "Level0",{ -0.08,0 },1 },{ },{ "Level0",{ 0.42,0 },1 },{ "Level0",{ 0.38,0 },1 },{ },{ "Level0",{ 0.37,0 },1 },{ "Level0",{ 0.33,0 },1 },{ },{ "Level0",{ 0.32,0 },1 },{ "Level0",{ 0.28,0 },1 },{ },{ "Level0",{ 0.27,0 },1 },{ "Level0",{ 0.23,0 },1 },{ },{ "Level0",{ 0.22,0 },1 },{ "Level0",{ 0.18,0 },1 },{ },{ "Level0",{ 0.17,0 },1 },{ "Level0",{ 0.13,0 },1 },{ },{ "Level0",{ 0.12,0 },1 },{ "Level0",{ 0.08,0 },1 }}; + }; + }; + }; + class HorizonBankRot + { + type = "line"; + width = 3; + points[] = {{ "HorizonBankRot",{ 0,0.25 },1 },{ "HorizonBankRot",{ -0.01,0.23 },1 },{ "HorizonBankRot",{ 0.01,0.23 },1 },{ "HorizonBankRot",{ 0,0.25 },1 }}; + }; + class Static_HAD_BOX + { + clipTL[] = {0,1}; + clipBR[] = {1,0}; + type = "line"; + width = 5; + points[] = {{ { "0.5-0.1","0.9-0.04" },1 },{ { "0.5-0.1","0.9+0.04" },1 },{ { "0.5+0.1","0.9+0.04" },1 },{ { "0.5+0.1","0.9-0.04" },1 },{ { "0.5-0.1","0.9-0.04" },1 },{ },{ { "0.5-0.1","0.9-0.04+0.012" },1 },{ { "0.5-0.092","0.9-0.04+0.012" },1 },{ },{ { "0.5+0.1","0.9-0.04+0.012" },1 },{ { "0.5+0.092","0.9-0.04+0.012" },1 },{ },{ { 0.5,"0.9-0.04" },1 },{ { 0.5,"0.9-0.032" },1 },{ },{ { 0.5,"0.9+0.04" },1 },{ { 0.5,"0.9+0.032" },1 },{ }}; + }; + class Gunner_HAD + { + type = "line"; + width = 6; + points[] = {{ "GunnerAim",{ -0.015,-0.008 },1 },{ "GunnerAim",{ -0.015,0.008 },1 },{ "GunnerAim",{ 0.015,0.008 },1 },{ "GunnerAim",{ 0.015,-0.008 },1 },{ "GunnerAim",{ -0.015,-0.008 },1 }}; + }; + class Slip_ball_group + { + class Slip_bars + { + type = "line"; + width = 4; + points[] = {{ { "0.5-0.018","0.9-0.04" },1 },{ { "0.5-0.018","0.9-0.075" },1 },{ },{ { "0.5+0.018","0.9-0.04" },1 },{ { "0.5+0.018","0.9-0.075" },1 }}; + }; + class Slip_ball + { + type = "line"; + width = 6; + points[] = {{ "Velocity_slip",1,{ "0 * 0.75","-0.02 * 0.75" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.75","-0.01732 * 0.75" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.75","-0.0099999998 * 0.75" },1 },{ "Velocity_slip",1,{ "0.02 * 0.75","0 * 0.75" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.75","0.0099999998 * 0.75" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.75","0.01732 * 0.75" },1 },{ "Velocity_slip",1,{ "0 * 0.75","0.02 * 0.75" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.75","0.01732 * 0.75" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.75","0.0099999998 * 0.75" },1 },{ "Velocity_slip",1,{ "-0.02 * 0.75","0 * 0.75" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.75","-0.0099999998 * 0.75" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.75","-0.01732 * 0.75" },1 },{ "Velocity_slip",1,{ "0 * 0.75","-0.02 * 0.75" },1 },{ },{ "Velocity_slip",1,{ "0 * 0.6","-0.02 * 0.6" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.6","-0.01732 * 0.6" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.6","-0.0099999998 * 0.6" },1 },{ "Velocity_slip",1,{ "0.02 * 0.6","0 * 0.6" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.6","0.0099999998 * 0.6" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.6","0.01732 * 0.6" },1 },{ "Velocity_slip",1,{ "0 * 0.6","0.02 * 0.6" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.6","0.01732 * 0.6" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.6","0.0099999998 * 0.6" },1 },{ "Velocity_slip",1,{ "-0.02 * 0.6","0 * 0.6" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.6","-0.0099999998 * 0.6" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.6","-0.01732 * 0.6" },1 },{ "Velocity_slip",1,{ "0 * 0.6","-0.02 * 0.6" },1 },{ },{ "Velocity_slip",1,{ "0 * 0.5","-0.02 * 0.5" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.5","-0.01732 * 0.5" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.5","-0.0099999998 * 0.5" },1 },{ "Velocity_slip",1,{ "0.02 * 0.5","0 * 0.5" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.5","0.0099999998 * 0.5" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.5","0.01732 * 0.5" },1 },{ "Velocity_slip",1,{ "0 * 0.5","0.02 * 0.5" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.5","0.01732 * 0.5" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.5","0.0099999998 * 0.5" },1 },{ "Velocity_slip",1,{ "-0.02 * 0.5","0 * 0.5" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.5","-0.0099999998 * 0.5" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.5","-0.01732 * 0.5" },1 },{ "Velocity_slip",1,{ "0 * 0.5","-0.02 * 0.5" },1 },{ },{ "Velocity_slip",1,{ "0 * 0.4","-0.02 * 0.4" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.4","-0.01732 * 0.4" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.4","-0.0099999998 * 0.4" },1 },{ "Velocity_slip",1,{ "0.02 * 0.4","0 * 0.4" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.4","0.0099999998 * 0.4" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.4","0.01732 * 0.4" },1 },{ "Velocity_slip",1,{ "0 * 0.4","0.02 * 0.4" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.4","0.01732 * 0.4" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.4","0.0099999998 * 0.4" },1 },{ "Velocity_slip",1,{ "-0.02 * 0.4","0 * 0.4" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.4","-0.0099999998 * 0.4" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.4","-0.01732 * 0.4" },1 },{ "Velocity_slip",1,{ "0 * 0.4","-0.02 * 0.4" },1 },{ },{ "Velocity_slip",1,{ "0 * 0.30","-0.02 * 0.30" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.30","-0.01732 * 0.30" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.30","-0.0099999998 * 0.30" },1 },{ "Velocity_slip",1,{ "0.02 * 0.30","0 * 0.30" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.30","0.0099999998 * 0.30" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.30","0.01732 * 0.30" },1 },{ "Velocity_slip",1,{ "0 * 0.30","0.02 * 0.30" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.30","0.01732 * 0.30" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.30","0.0099999998 * 0.30" },1 },{ "Velocity_slip",1,{ "-0.02 * 0.30","0 * 0.30" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.30","-0.0099999998 * 0.30" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.30","-0.01732 * 0.30" },1 },{ "Velocity_slip",1,{ "0 * 0.30","-0.02 * 0.30" },1 },{ },{ "Velocity_slip",1,{ "0 * 0.20","-0.02 * 0.20" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.20","-0.01732 * 0.20" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.20","-0.0099999998 * 0.20" },1 },{ "Velocity_slip",1,{ "0.02 * 0.20","0 * 0.20" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.20","0.0099999998 * 0.20" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.20","0.01732 * 0.20" },1 },{ "Velocity_slip",1,{ "0 * 0.20","0.02 * 0.20" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.20","0.01732 * 0.20" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.20","0.0099999998 * 0.20" },1 },{ "Velocity_slip",1,{ "-0.02 * 0.20","0 * 0.20" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.20","-0.0099999998 * 0.20" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.20","-0.01732 * 0.20" },1 },{ "Velocity_slip",1,{ "0 * 0.20","-0.02 * 0.20" },1 },{ },{ "Velocity_slip",1,{ "0 * 0.1","-0.02 * 0.1" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.1","-0.01732 * 0.1" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.1","-0.0099999998 * 0.1" },1 },{ "Velocity_slip",1,{ "0.02 * 0.1","0 * 0.1" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.1","0.0099999998 * 0.1" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.1","0.01732 * 0.1" },1 },{ "Velocity_slip",1,{ "0 * 0.1","0.02 * 0.1" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.1","0.01732 * 0.1" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.1","0.0099999998 * 0.1" },1 },{ "Velocity_slip",1,{ "-0.02 * 0.1","0 * 0.1" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.1","-0.0099999998 * 0.1" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.1","-0.01732 * 0.1" },1 },{ "Velocity_slip",1,{ "0 * 0.1","-0.02 * 0.1" },1 }}; + }; + }; + class Centerline + { + type = "line"; + width = 5; + points[] = {{ { 0.5,0.48 },1 },{ { 0.5,0.45 },1 },{ },{ { 0.5,0.52 },1 },{ { 0.5,0.55 },1 },{ },{ { 0.48,0.5 },1 },{ { 0.45,0.5 },1 },{ },{ { 0.52,0.5 },1 },{ { 0.55,0.5 },1 },{ }}; + }; + class WeaponName + { + type = "text"; + source = "weapon"; + sourceScale = 1; + align = "right"; + scale = 1; + pos[] = {{ 0.61,0.86 },1}; + right[] = {{ 0.65,0.86 },1}; + down[] = {{ 0.61,0.9 },1}; + }; + class Ammo_GUN + { + type = "group"; + condition = "mgun"; + class Ammo_count_GUN + { + type = "text"; + source = "ammo"; + sourceScale = 1; + align = "right"; + scale = 1; + pos[] = {{ 0.61,0.89 },1}; + right[] = {{ 0.65,0.89 },1}; + down[] = {{ 0.61,0.93 },1}; + }; + }; + class Ammo_RKT + { + type = "group"; + condition = "rocket"; + class Ammo_count_RKT + { + type = "text"; + source = "ammo"; + sourceScale = 1; + align = "right"; + scale = 1; + pos[] = {{ 0.61,0.89 },1}; + right[] = {{ 0.65,0.89 },1}; + down[] = {{ 0.61,0.93 },1}; + }; + }; + class Ammo_AGM + { + type = "group"; + condition = "AAmissile"; + class Ammo_count_AGM + { + type = "text"; + source = "ammo"; + sourceScale = 1; + align = "right"; + scale = 1; + pos[] = {{ 0.61,0.89 },1}; + right[] = {{ 0.65,0.89 },1}; + down[] = {{ 0.61,0.93 },1}; + }; + }; + class Ammo_AAM + { + type = "group"; + condition = "ATmissile"; + class Ammo_count_AAM + { + type = "text"; + source = "ammo"; + sourceScale = 1; + align = "right"; + scale = 1; + pos[] = {{ 0.61,0.89 },1}; + right[] = {{ 0.65,0.89 },1}; + down[] = {{ 0.61,0.93 },1}; + }; + }; + class Ammo_Bomb + { + type = "group"; + condition = "Bomb"; + class Ammo_count_Bomb + { + type = "text"; + source = "ammo"; + sourceScale = 1; + align = "right"; + scale = 1; + pos[] = {{ 0.61,0.89 },1}; + right[] = {{ 0.65,0.89 },1}; + down[] = {{ 0.61,0.93 },1}; + }; + }; + class LightsGroup + { + type = "group"; + condition = "lights"; + class LightsText + { + type = "text"; + source = "static"; + text = "LIGHTS"; + align = "right"; + scale = 1; + pos[] = {{ 0.03,"0.53 + 0.055" },1}; + right[] = {{ 0.07,"0.53 + 0.055" },1}; + down[] = {{ 0.03,"0.53 + 0.095" },1}; + }; + }; + class CollisionLightsGroup + { + type = "group"; + condition = "collisionlights"; + class CollisionLightsText + { + type = "text"; + source = "static"; + text = "A-COL"; + align = "right"; + scale = 1; + pos[] = {{ 0.03,"0.53 + 0.105" },1}; + right[] = {{ 0.07,"0.53 + 0.105" },1}; + down[] = {{ 0.03,"0.53 + 0.145" },1}; + }; + }; + class GearGroup + { + type = "group"; + condition = "ils"; + class GearText + { + type = "text"; + source = "static"; + text = "GEAR"; + align = "right"; + scale = 1; + pos[] = {{ 0.03,"0.53 + 0.155" },1}; + right[] = {{ 0.07,"0.53 + 0.155" },1}; + down[] = {{ 0.03,"0.53 + 0.195" },1}; + }; + }; + class ATMissileTOFGroup + { + condition = "ATmissile"; + type = "group"; + class TOFtext + { + type = "text"; + align = "right"; + source = "static"; + text = "TOF="; + scale = 1; + pos[] = {{ 0.61,0.92 },1}; + right[] = {{ 0.65,0.92 },1}; + down[] = {{ 0.61,0.96 },1}; + }; + class TOFnumber + { + type = "text"; + source = "targetDist"; + sourcescale = 0.0025; + align = "right"; + scale = 1; + pos[] = {{ 0.69,0.92 },1}; + right[] = {{ 0.73,0.92 },1}; + down[] = {{ 0.69,0.96 },1}; + }; + }; + class LaserTOFGroup + { + condition = "Bomb"; + type = "group"; + class TOFtext + { + type = "text"; + align = "right"; + source = "static"; + text = "TOF="; + scale = 1; + pos[] = {{ 0.61,0.92 },1}; + right[] = {{ 0.65,0.92 },1}; + down[] = {{ 0.61,0.96 },1}; + }; + class TOFnumber + { + type = "text"; + source = "targetDist"; + sourcescale = 0.0025; + align = "right"; + scale = 1; + pos[] = {{ 0.69,0.92 },1}; + right[] = {{ 0.73,0.92 },1}; + down[] = {{ 0.69,0.96 },1}; + }; + }; + class RocketTOFGroup + { + condition = "Rocket"; + type = "group"; + class TOFtext + { + type = "text"; + align = "right"; + source = "static"; + text = "TOF="; + scale = 1; + pos[] = {{ 0.61,0.92 },1}; + right[] = {{ 0.65,0.92 },1}; + down[] = {{ 0.61,0.96 },1}; + }; + class TOFnumber + { + type = "text"; + source = "targetDist"; + sourcescale = 0.0025; + align = "right"; + scale = 1; + pos[] = {{ 0.69,0.92 },1}; + right[] = {{ 0.73,0.92 },1}; + down[] = {{ 0.69,0.96 },1}; + }; + }; + class RangeNumber + { + type = "text"; + source = "targetDist"; + sourceScale = 1; + align = "left"; + scale = 1; + pos[] = {{ 0.39,0.89 },1}; + right[] = {{ 0.43,0.89 },1}; + down[] = {{ 0.39,0.93 },1}; + }; + class RangeText + { + type = "text"; + source = "static"; + text = "RNG"; + align = "left"; + scale = 1; + pos[] = {{ 0.39,0.86 },1}; + right[] = {{ 0.43,0.86 },1}; + down[] = {{ 0.39,0.9 },1}; + }; + class SpeedNumber + { + type = "text"; + align = "right"; + scale = 1; + source = "speed"; + sourceScale = 3.6; + pos[] = {{ 0.03,0.475 },1}; + right[] = {{ 0.08,0.475 },1}; + down[] = {{ 0.03,0.525 },1}; + }; + class TorqueNumber + { + condition = "simulRTD"; + class Torque_number + { + type = "text"; + align = "left"; + scale = 1; + source = "rtdRotorTorque"; + sourceScale = 290; + pos[] = {{ 0.065,0.175 },1}; + right[] = {{ 0.115,0.175 },1}; + down[] = {{ 0.065,0.225 },1}; + }; + class Torquetext + { + type = "text"; + source = "static"; + text = "%"; + align = "right"; + scale = 1; + pos[] = {{ 0.07,0.175 },1}; + right[] = {{ 0.12,0.175 },1}; + down[] = {{ 0.07,0.225 },1}; + }; + }; + class AltNumber: SpeedNumber + { + align = "right"; + source = "altitudeAGL"; + sourceScale = 1; + pos[] = {{ 0.83,0.475 },1}; + right[] = {{ 0.88,0.475 },1}; + down[] = {{ 0.83,0.525 },1}; + }; + class ASLNumber + { + type = "text"; + source = "altitudeASL"; + sourceScale = 1; + align = "right"; + scale = 1; + pos[] = {{ 0.835,0.18 },1}; + right[] = {{ 0.875,0.18 },1}; + down[] = {{ 0.835,0.22 },1}; + }; + class VspeedScalePosta + { + type = "line"; + width = 5; + points[] = {{ { 0.98,0.2 },1 },{ { 1,0.2 },1 },{ },{ { 0.93,0.2 },1 },{ { 0.95,0.2 },1 },{ },{ { 0.98,0.35 },1 },{ { 1,0.35 },1 },{ },{ { 0.93,0.35 },1 },{ { 0.95,0.35 },1 },{ },{ { 0.94,0.38 },1 },{ { 0.95,0.38 },1 },{ },{ { 0.94,0.41 },1 },{ { 0.95,0.41 },1 },{ },{ { 0.94,0.44 },1 },{ { 0.95,0.44 },1 },{ },{ { 0.94,0.47 },1 },{ { 0.95,0.47 },1 },{ },{ { 0.98,0.5 },1 },{ { 1,0.5 },1 },{ },{ { 0.93,0.5 },1 },{ { 0.95,0.5 },1 },{ },{ { 0.94,0.53 },1 },{ { 0.95,0.53 },1 },{ },{ { 0.94,0.56 },1 },{ { 0.95,0.56 },1 },{ },{ { 0.94,0.59 },1 },{ { 0.95,0.59 },1 },{ },{ { 0.94,0.62 },1 },{ { 0.95,0.62 },1 },{ },{ { 0.98,0.65 },1 },{ { 1,0.65 },1 },{ },{ { 0.93,0.65 },1 },{ { 0.95,0.65 },1 },{ },{ { 0.99,0.68 },1 },{ { 0.98,0.68 },1 },{ },{ { 0.99,0.71 },1 },{ { 0.98,0.71 },1 },{ },{ { 0.99,0.74 },1 },{ { 0.98,0.74 },1 },{ },{ { 0.99,0.77 },1 },{ { 0.98,0.77 },1 },{ },{ { 0.98,0.8 },1 },{ { 1,0.8 },1 },{ },{ { 0.93,0.8 },1 },{ { 0.95,0.8 },1 },{ }}; + }; + class RadarAltitudeBand + { + clipTL[] = {0,0.2}; + clipBR[] = {1,0.8}; + hideValue = 201; + class radarbanda + { + type = "line"; + width = 17; + points[] = {{ "RadarAltitudeBone",{ 0,0 },1 },{ "RadarAltitudeBone",{ 0,0.6 },1 }}; + }; + }; + class VspeedBand + { + type = "line"; + width = 3; + points[] = {{ "VspeedBone",{ -0.01,0 },1 },{ "VspeedBone",{ -0.025,-0.015 },1 },{ "VspeedBone",{ -0.025,0.015 },1 },{ "VspeedBone",{ -0.01,0 },1 },{ }}; + }; + class HeadingNumber: SpeedNumber + { + source = "heading"; + sourceScale = 1; + align = "center"; + pos[] = {{ 0.5,0.045 },1}; + right[] = {{ 0.56,0.045 },1}; + down[] = {{ 0.5,"0.045 + 0.06" },1}; + }; + class Center_box + { + type = "line"; + width = 1.5; + points[] = {{ { 0.45,"0.02 + 0.085 - 0.06" },1 },{ { "0.45 + 0.10","0.02 + 0.085 - 0.06" },1 },{ { "0.45 + 0.10","0.02 + 0.085" },1 },{ { 0.45,"0.02 + 0.085" },1 },{ { 0.45,"0.02 + 0.085 - 0.06" },1 }}; + }; + class HeadingArrow + { + type = "line"; + width = 7; + points[] = {{ { "0.5","0.128 + 0.03" },1 },{ { 0.5,0.128 },1 }}; + }; + class HeadingScale_LEFT + { + clipTL[] = {0,0}; + clipBR[] = {0.45,1}; + class Heading_group + { + type = "scale"; + horizontal = 1; + source = "heading"; + sourceScale = 1; + width = 5; + top = 0.12; + center = 0.5; + bottom = 0.88; + lineXleft = "0.03 + 0.085"; + lineYright = "0.02 + 0.085"; + lineXleftMajor = "0.04 + 0.085"; + lineYrightMajor = "0.02 + 0.085"; + majorLineEach = 3; + numberEach = 3; + step = 10; + stepSize = "0.05"; + align = "center"; + scale = 1; + pos[] = {0.12,"0.0 + 0.065"}; + right[] = {0.16,"0.0 + 0.065"}; + down[] = {0.12,"0.04 + 0.065"}; + }; + }; + class HeadingScale_RIGHT + { + clipTL[] = {0.55,0}; + clipBR[] = {1,1}; + class Heading_group + { + type = "scale"; + horizontal = 1; + source = "heading"; + sourceScale = 1; + width = 5; + top = 0.12; + center = 0.5; + bottom = 0.88; + lineXleft = "0.03 + 0.085"; + lineYright = "0.02 + 0.085"; + lineXleftMajor = "0.04 + 0.085"; + lineYrightMajor = "0.02 + 0.085"; + majorLineEach = 3; + numberEach = 3; + step = 10; + stepSize = "0.05"; + align = "center"; + scale = 1; + pos[] = {0.12,"0.0 + 0.065"}; + right[] = {0.16,"0.0 + 0.065"}; + down[] = {0.12,"0.04 + 0.065"}; + }; + }; + class HeadingScale_BOTTOM + { + clipTL[] = {0.45,"0.02 + 0.085"}; + clipBR[] = {"0.45 + 0.10",1}; + class Heading_group + { + type = "scale"; + horizontal = 1; + source = "heading"; + sourceScale = 1; + width = 5; + top = 0.12; + center = 0.5; + bottom = 0.88; + lineXleft = "0.03 + 0.085"; + lineYright = "0.02 + 0.085"; + lineXleftMajor = "0.04 + 0.085"; + lineYrightMajor = "0.02 + 0.085"; + majorLineEach = 3; + numberEach = 3; + step = 10; + stepSize = "0.05"; + align = "center"; + scale = 1; + pos[] = {0.12,"0.0 + 0.065"}; + right[] = {0.16,"0.0 + 0.065"}; + down[] = {0.12,"0.04 + 0.065"}; + }; + }; + class Fuel_Text + { + type = "text"; + source = "static"; + text = "Fuel"; + align = "right"; + scale = 1; + pos[] = {{ 0.03,0.9 },1}; + right[] = {{ 0.07,0.9 },1}; + down[] = {{ 0.03,0.94 },1}; + }; + class Fuel_Number + { + type = "text"; + source = "fuel"; + sourceScale = 100; + align = "right"; + scale = 1; + pos[] = {{ 0.1,0.9 },1}; + right[] = {{ 0.14,0.9 },1}; + down[] = {{ 0.1,0.94 },1}; + }; + }; + helmetMountedDisplay = 1; + helmetPosition[] = {-0.04,0.04,0.1}; + helmetRight[] = {0.08,0,0}; + helmetDown[] = {0,-0.08,0}; + }; + class ACE_HUD_2 + { + topLeft = "HUD_top_left"; + topRight = "HUD_top_right"; + bottomLeft = "HUD_bottom_left"; + borderLeft = 0; + borderRight = 0; + borderTop = 0; + borderBottom = 0; + color[] = {0.15,1,0.15,1}; + enableParallax = 0; + class Bones + { + class Velocity + { + type = "vector"; + source = "velocity"; + pos0[] = {0.5,0.5}; + pos10[] = {0.75,0.75}; + }; + class ForwardVec1 + { + type = "vector"; + source = "forward"; + pos0[] = {0,0}; + pos10[] = {0.25,0.25}; + }; + class ForwardVec + { + type = "vector"; + source = "forward"; + pos0[] = {0,0}; + pos10[] = {0.253,0.253}; + }; + class WeaponAim + { + type = "vector"; + source = "weapon"; + pos0[] = {0.5,0.5}; + pos10[] = {0.753,0.753}; + }; + class WeaponAim1 + { + type = "vector"; + source = "weapon"; + pos0[] = {0,0}; + pos10[] = {0.253,0.23}; + }; + class Target + { + type = "vector"; + source = "target"; + pos0[] = {0.5,0.5}; + pos10[] = {0.753,0.753}; + }; + class RadarContact + { + type = "fixed"; + pos[] = {0,0}; + }; + }; + class Draw + { + color[] = {0.18,1,0.18}; + alpha = 1; + condition = "on"; + class PlaneMovementCrosshair + { + type = "line"; + width = 7; + points[] = {{ "ForwardVec1",1,"Velocity",1,{ 0,-0.02 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0.01,-0.01732 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0.01732,-0.01 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0.02,0 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0.01732,0.01 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0.01,0.01732 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0,0.02 },1 },{ "ForwardVec1",1,"Velocity",1,{ -0.01,0.01732 },1 },{ "ForwardVec1",1,"Velocity",1,{ -0.01732,0.01 },1 },{ "ForwardVec1",1,"Velocity",1,{ -0.02,0 },1 },{ "ForwardVec1",1,"Velocity",1,{ -0.01732,-0.01 },1 },{ "ForwardVec1",1,"Velocity",1,{ -0.01,-0.01732 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0,-0.02 },1 },{ },{ "ForwardVec1",1,"Velocity",1,{ 0.04,0 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0.02,0 },1 },{ },{ "ForwardVec1",1,"Velocity",1,{ -0.04,0 },1 },{ "ForwardVec1",1,"Velocity",1,{ -0.02,0 },1 },{ },{ "ForwardVec1",1,"Velocity",1,{ 0,-0.04 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0,-0.02 },1 }}; + }; + class Gunner_AIM + { + type = "group"; + class Circle + { + type = "line"; + width = 6; + points[] = {{ "ForwardVec",1,"WeaponAim",1,{ 0,-0.015 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0,-0.03 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0,-0.0325 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0,-0.0475 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0,0.015 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0,0.03 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0,0.0325 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0,0.0475 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ -0.015,0 },1 },{ "ForwardVec",1,"WeaponAim",1,{ -0.03,0 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ -0.0325,0 },1 },{ "ForwardVec",1,"WeaponAim",1,{ -0.0475,0 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0.015,0 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0.03,0 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0.0325,0 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0.0475,0 },1 }}; + }; + }; + class GunCross + { + condition = "mgun"; + class Circle + { + type = "line"; + width = 9; + points[] = {{ "ForwardVec",1,"WeaponAim",1,{ 0,-0.05 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0,-0.015 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0,0.015 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0,0.05 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ -0.05,0 },1 },{ "ForwardVec",1,"WeaponAim",1,{ -0.015,0 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0.015,0 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0.05,0 },1 },{ }}; + }; + }; + class RocketCross + { + condition = "rocket"; + width = 6; + class Circle + { + type = "line"; + width = 6; + points[] = {{ "ForwardVec",1,"WeaponAim",1,{ -0.05,-0.08 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0.05,-0.08 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0,-0.08 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0,0.08 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ -0.05,0.08 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0.05,0.08 },1 },{ }}; + }; + }; + class AT_Aim + { + condition = "ATmissile"; + width = 2; + class Circle + { + type = "line"; + width = 2; + points[] = {{ "ForwardVec",1,"WeaponAim",1,{ -0.1,-0.1 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0.1,-0.1 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0.1,0.1 },1 },{ "ForwardVec",1,"WeaponAim",1,{ -0.1,0.1 },1 },{ "ForwardVec",1,"WeaponAim",1,{ -0.1,-0.1 },1 }}; + }; + }; + class AA_aim + { + condition = "AAmissile"; + class Circle + { + type = "line"; + width = 2.5; + points[] = {{ "ForwardVec",1,"WeaponAim",1,{ "0 / 4","-0.248559 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0434 / 4","-0.244781 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0855 / 4","-0.233571 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.125 / 4","-0.215252 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1607 / 4","-0.190396 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1915 / 4","-0.159774 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2165 / 4","-0.12428 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.234925 / 4","-0.0850072 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2462 / 4","-0.0431499 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.25 / 4","0 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2462 / 4","0.0431499 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.234925 / 4","0.0850072 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2165 / 4","0.12428 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1915 / 4","0.159774 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1607 / 4","0.190396 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.125 / 4","0.215252 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0855 / 4","0.233571 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0434 / 4","0.244781 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0 / 4","0.248559 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0434 / 4","0.244781 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0855 / 4","0.233571 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.125 / 4","0.215252 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1607 / 4","0.190396 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1915 / 4","0.159774 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2165 / 4","0.12428 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.234925 / 4","0.0850072 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2462 / 4","0.0431499 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.25 / 4","0 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2462 / 4","-0.0431499 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.234925 / 4","-0.0850072 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2165 / 4","-0.12428 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1915 / 4","-0.159774 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1607 / 4","-0.190396 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.125 / 4","-0.215252 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0855 / 4","-0.233571 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0434 / 4","-0.244781 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0 / 4","-0.248559 / 4" },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ "0 / 2","-0.248559 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0434 / 2","-0.244781 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0855 / 2","-0.233571 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.125 / 2","-0.215252 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1607 / 2","-0.190396 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1915 / 2","-0.159774 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2165 / 2","-0.12428 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.234925 / 2","-0.0850072 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2462 / 2","-0.0431499 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.25 / 2","0 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2462 / 2","0.0431499 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.234925 / 2","0.0850072 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2165 / 2","0.12428 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1915 / 2","0.159774 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1607 / 2","0.190396 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.125 / 2","0.215252 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0855 / 2","0.233571 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0434 / 2","0.244781 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0 / 2","0.248559 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0434 / 2","0.244781 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0855 / 2","0.233571 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.125 / 2","0.215252 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1607 / 2","0.190396 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1915 / 2","0.159774 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2165 / 2","0.12428 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.234925 / 2","0.0850072 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2462 / 2","0.0431499 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.25 / 2","0 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2462 / 2","-0.0431499 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.234925 / 2","-0.0850072 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2165 / 2","-0.12428 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1915 / 2","-0.159774 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1607 / 2","-0.190396 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.125 / 2","-0.215252 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0855 / 2","-0.233571 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0434 / 2","-0.244781 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0 / 2","-0.248559 / 2" },1 }}; + }; + }; + class TargetACQ + { + type = "line"; + width = 2; + points[] = {{ "ForwardVec",1,"target",{ 0,-0.06 },1 },{ "ForwardVec",1,"target",{ 0,-0.055 },1 },{ },{ "ForwardVec",1,"target",{ 0,-0.05 },1 },{ "ForwardVec",1,"target",{ 0,-0.045 },1 },{ },{ "ForwardVec",1,"target",{ 0,-0.04 },1 },{ "ForwardVec",1,"target",{ 0,-0.035 },1 },{ },{ "ForwardVec",1,"target",{ 0,-0.03 },1 },{ "ForwardVec",1,"target",{ 0,-0.025 },1 },{ },{ "ForwardVec",1,"target",{ 0,-0.02 },1 },{ "ForwardVec",1,"target",{ 0,-0.015 },1 },{ },{ "ForwardVec",1,"target",{ 0,-0.01 },1 },{ "ForwardVec",1,"target",{ 0,-0.005 },1 },{ },{ "ForwardVec",1,"target",{ 0,0 },1 },{ "ForwardVec",1,"target",{ 0,0 },1 },{ },{ "ForwardVec",1,"target",{ 0,0.06 },1 },{ "ForwardVec",1,"target",{ 0,0.055 },1 },{ },{ "ForwardVec",1,"target",{ 0,0.05 },1 },{ "ForwardVec",1,"target",{ 0,0.045 },1 },{ },{ "ForwardVec",1,"target",{ 0,0.04 },1 },{ "ForwardVec",1,"target",{ 0,0.035 },1 },{ },{ "ForwardVec",1,"target",{ 0,0.03 },1 },{ "ForwardVec",1,"target",{ 0,0.025 },1 },{ },{ "ForwardVec",1,"target",{ 0,0.02 },1 },{ "ForwardVec",1,"target",{ 0,0.015 },1 },{ },{ "ForwardVec",1,"target",{ 0,0.01 },1 },{ "ForwardVec",1,"target",{ 0,0.005 },1 },{ },{ "ForwardVec",1,"target",{ -0.06,0 },1 },{ "ForwardVec",1,"target",{ -0.055,0 },1 },{ },{ "ForwardVec",1,"target",{ -0.05,0 },1 },{ "ForwardVec",1,"target",{ -0.045,0 },1 },{ },{ "ForwardVec",1,"target",{ -0.04,0 },1 },{ "ForwardVec",1,"target",{ -0.035,0 },1 },{ },{ "ForwardVec",1,"target",{ -0.03,0 },1 },{ "ForwardVec",1,"target",{ -0.025,0 },1 },{ },{ "ForwardVec",1,"target",{ -0.02,0 },1 },{ "ForwardVec",1,"target",{ -0.015,0 },1 },{ },{ "ForwardVec",1,"target",{ -0.01,0 },1 },{ "ForwardVec",1,"target",{ -0.005,0 },1 },{ },{ "ForwardVec",1,"target",{ 0.06,0 },1 },{ "ForwardVec",1,"target",{ 0.055,0 },1 },{ },{ "ForwardVec",1,"target",{ 0.05,0 },1 },{ "ForwardVec",1,"target",{ 0.045,0 },1 },{ },{ "ForwardVec",1,"target",{ 0.04,0 },1 },{ "ForwardVec",1,"target",{ 0.035,0 },1 },{ },{ "ForwardVec",1,"target",{ 0.03,0 },1 },{ "ForwardVec",1,"target",{ 0.025,0 },1 },{ },{ "ForwardVec",1,"target",{ 0.02,0 },1 },{ "ForwardVec",1,"target",{ 0.015,0 },1 },{ },{ "ForwardVec",1,"target",{ 0.01,0 },1 },{ "ForwardVec",1,"target",{ 0.005,0 },1 },{ }}; + }; + class RadarTargets + { + type = "radar"; + pos0[] = {0.5,0.5}; + pos10[] = {0.753,0.753}; + width = 2.5; + points[] = {{ "ForwardVec",1,"RadarContact",{ -0.01,-0.01 },1 },{ "ForwardVec",1,"RadarContact",{ 0.01,-0.01 },1 },{ "ForwardVec",1,"RadarContact",{ 0.01,0.01 },1 },{ "ForwardVec",1,"RadarContact",{ -0.01,0.01 },1 },{ "ForwardVec",1,"RadarContact",{ -0.01,-0.01 },1 }}; + }; + }; + helmetMountedDisplay = 1; + helmetPosition[] = {-0.035,0.035,0.1}; + helmetRight[] = {0.07,0,0}; + helmetDown[] = {0,-0.07,0}; + }; + }; + + class Turrets: Turrets { + class MainTurret: MainTurret { + weapons[] = {"ACE_gatling_20mm_Comanche","missiles_DAGR","missiles_ASRAAM", "ACE_AIR_SAFETY"}; + magazines[] = {"ACE_500Rnd_20mm_shells_Comanche","4Rnd_AAA_missiles","24Rnd_PG_missiles"}; + + outGunnerMayFire = 1; + commanding = -1; + primaryGunner = 1; + gunnerOpticsModel = ""; + gunnerOpticsEffect[] = {"TankCommanderOptics1"}; + gunnerForceOptics = 0; + turretInfoType = "Rsc_ACE_Helo_UI_Turret"; + showAllTargets = 2; + discretedistance[] = {100,200,300,400,500,600,700,800,900,1000,1100,1200,1300,1400,1500,1600,1700,1800,1900,2000,2100,2200,2300,2400,2500,2600,2700,2800,2900,3000}; + discretedistanceinitindex = 3; + copilotHasFlares = 1; + directionStabilized = 1; + isCopilot = 1; + showHMD = 1; + CanEject = 1; + startEngine = 0; + minElev = -51; + maxElev = 9; + initElev = 6; + minTurn = -120; + maxTurn = 120; + initTurn = 0; + + class OpticsIn + { + class Wide + { + opticsDisplayName = "W"; + initAngleX = 0; + minAngleX = -35; + maxAngleX = 10; + initAngleY = 0; + minAngleY = -100; + maxAngleY = 100; + initFov = 0.466; + minFov = 0.466; + maxFov = 0.466; + visionMode[] = {"Normal","Ti"}; + thermalMode[] = {0,1}; + gunnerOpticsColor[] = {0,0,0,1}; + directionStabilized = 1; + horizontallyStabilized = 1; + gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_wide_F"; + }; + class Medium: Wide + { + opticsDisplayName = "M"; + initFov = 0.093; + minFov = 0.093; + maxFov = 0.093; + gunnerOpticsColor[] = {0,0,0,1}; + directionStabilized = 1; + horizontallyStabilized = 1; + gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_medium_F"; + }; + class Narrow: Wide + { + opticsDisplayName = "N"; + initFov = 0.029; + minFov = 0.029; + maxFov = 0.029; + gunnerOpticsColor[] = {0,0,0,1}; + directionStabilized = 1; + horizontallyStabilized = 1; + gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_narrow_F"; + + }; + class Narrower: Wide + { + opticsDisplayName = "Z"; + initFov = 0.01; + minFov = 0.01; + maxFov = 0.01; + gunnerOpticsColor[] = {0,0,0,1}; + directionStabilized = 1; + horizontallyStabilized = 1; + gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_narrow_F"; + + }; + }; + class OpticsOut + { + class Monocular + { + initAngleX = 0; + minAngleX = -30; + maxAngleX = 30; + initAngleY = 0; + minAngleY = -100; + maxAngleY = 100; + initFov = 1.1; + minFov = 0.133; + maxFov = 1.1; + visionMode[] = {"Normal","NVG"}; + gunnerOpticsModel = ""; + gunnerOpticsEffect[] = {}; + hideUnitInfo = 1; + }; + }; + }; + }; + + class AnimationSources: AnimationSources { + class Gatling { + weapon = "ACE_gatling_20mm_Comanche"; + }; + class Muzzle_flash { + weapon = "ACE_gatling_20mm_Comanche"; + }; + }; }; \ No newline at end of file diff --git a/addons/aircraft/RscInGameUI.hpp b/addons/aircraft/RscInGameUI.hpp index 620d895d9e..83d46b5a03 100644 --- a/addons/aircraft/RscInGameUI.hpp +++ b/addons/aircraft/RscInGameUI.hpp @@ -1,581 +1,581 @@ -class RscControlsGroup; -class RscText; -class RangeText: RscText{}; -class RscPicture; -class RscOpticsText; -class RscIGProgress; -class RscOpticsValue; -class VScrollbar; -class HScrollbar; -class RscLadderPicture; -class RscControlsGroupNoScrollbars; - - -class RscInGameUI -{ - class RscUnitInfo; - class Rsc_ACE_Helo_UI_Turret: RscUnitInfo - { - idd = 300; - controls[] = {"CA_IGUI_elements_group","CA_VehicleToggles"}; - class VScrollbar; - class HScrollbar; - class CA_IGUI_elements_group: RscControlsGroup - { - idc = 170; - class VScrollbar: VScrollbar - { - width = 0; - }; - class HScrollbar: HScrollbar - { - height = 0; - }; - x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))"; - y = "0 * (0.025 * SafezoneH) + (SafezoneY)"; - w = "53.5 * (0.01875 * SafezoneH)"; - h = "40 * (0.025 * SafezoneH)"; - class controls - { - class CA_Distance: RscText - { - idc = 151; - style = 2; - sizeEx = "0.0295*SafezoneH"; - shadow = 0; - font = "EtelkaMonospacePro"; - x = "24.78 * (0.01875 * SafezoneH)"; - y = "30.88 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; - }; - class CA_Speed: RangeText - { - idc = 188; - style = 2; - sizeEx = "0.0295*SafezoneH"; - shadow = 0; - font = "EtelkaMonospacePro"; - text = "120"; - x = "14.78 * (0.01875 * SafezoneH)"; - y = "30.88 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; - }; - class CA_Alt: RangeText - { - idc = 189; - style = 2; - sizeEx = "0.0295*SafezoneH"; - shadow = 0; - font = "EtelkaMonospacePro"; - text = "3825"; - x = "34.78 * (0.01875 * SafezoneH)"; - y = "30.88 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; - }; - class CA_VisionMode: RscText - { - idc = 152; - style = 0; - sizeEx = "0.0295*SafezoneH"; - shadow = 0; - font = "EtelkaMonospacePro"; - text = "VIS"; - x = "12.58 * (0.01875 * SafezoneH)"; - y = "8 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; - }; - class CA_FlirMode: RscText - { - idc = 153; - style = 0; - sizeEx = "0.0295*SafezoneH"; - shadow = 0; - font = "EtelkaMonospacePro"; - text = "BHOT"; - x = "15.78 * (0.01875 * SafezoneH)"; - y = "8 * (0.025 * SafezoneH)"; - w = "4.5 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; - }; - class ValueGrid: RangeText - { - idc = 172; - font = "EtelkaMonospacePro"; - style = 2; - sizeEx = "0.0295*SafezoneH"; - shadow = 0; - x = "12.20 * (0.01875 * SafezoneH)"; - y = "3.5 * (0.025 * SafezoneH)"; - w = "6 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; - }; - class TextTADS: RangeText - { - idc = 1010; - text = "TADS"; - font = "EtelkaMonospacePro"; - style = 2; - shadow = 0; - x = "12.30 * (0.01875 * SafezoneH)"; - y = "5 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; - }; - class ValueTime: RangeText - { - idc = 190; - text = "20:28:35"; - font = "EtelkaMonospacePro"; - style = 2; - sizeEx = "0.0295*SafezoneH"; - shadow = 0; - x = "12.1 * (0.01875 * SafezoneH)"; - y = "6.5 * (0.025 * SafezoneH)"; - w = "6 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; - }; - class CA_Laser: RscText - { - idc = 158; - style = "0x30 + 0x800"; - sizeEx = "0.038*SafezoneH"; - shadow = 0; - font = "EtelkaMonospacePro"; - text = PATHTOF(data\Helo_LaserON.paa); - x = "20.45 * (0.01875 * SafezoneH)"; - y = "14.1 * (0.025 * SafezoneH)"; - w = "12.5 * (0.01875 * SafezoneH)"; - h = "12 * (0.025 * SafezoneH)"; - }; - class CA_Heading: RscText - { - idc = 156; - style = 0; - sizeEx = "0.038*SafezoneH"; - shadow = 0; - font = "EtelkaMonospacePro"; - text = "023"; - x = "24.83 * (0.01875 * SafezoneH)"; - y = "6 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; - }; - }; - }; - }; - class Rsc_ACE_Helo_UI_01: RscUnitInfo - { - controls[] = {"WeaponInfoControlsGroupRight","CA_TextFlaresMode","CA_TextFlares","CA_VehicleToggles","CA_Radar"}; - }; - class Rsc_ACE_Helo_UI_02: RscUnitInfo - { - controls[] = {"CA_TextFlaresMode","CA_TextFlares","CA_VehicleToggles","CA_Radar"}; - }; - class Rsc_ACE_Drones_UI_Turret: RscUnitInfo - { - idd = 300; - controls[] = {"CA_Zeroing","CA_IGUI_elements_group","CA_VehicleToggles"}; - class CA_IGUI_elements_group: RscControlsGroup - { - idc = 170; - class VScrollbar: VScrollbar - { - width = 0; - }; - class HScrollbar: HScrollbar - { - height = 0; - }; - x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))"; - y = "0 * (0.025 * SafezoneH) + (SafezoneY)"; - w = "53.5 * (0.01875 * SafezoneH)"; - h = "40 * (0.025 * SafezoneH)"; - class controls - { - class CA_Distance: RscText - { - idc = 151; - style = 2; - sizeEx = "0.0295*SafezoneH"; - shadow = 0; - font = "EtelkaMonospacePro"; - x = "24.78 * (0.01875 * SafezoneH)"; - y = "30.88 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; - }; - class CA_Speed: RangeText - { - idc = 188; - style = 2; - sizeEx = "0.0295*SafezoneH"; - shadow = 0; - font = "EtelkaMonospacePro"; - text = "120"; - x = "14.78 * (0.01875 * SafezoneH)"; - y = "30.88 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; - }; - class CA_Alt: RangeText - { - idc = 189; - style = 2; - sizeEx = "0.0295*SafezoneH"; - shadow = 0; - font = "EtelkaMonospacePro"; - text = "3825"; - x = "34.78 * (0.01875 * SafezoneH)"; - y = "30.88 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; - }; - class ValueTime: RangeText - { - idc = 190; - text = "20:28:35"; - font = "EtelkaMonospacePro"; - style = 2; - sizeEx = "0.0295*SafezoneH"; - shadow = 0; - x = "1.75 * (0.01875 * SafezoneH)"; - y = "10.5 * (0.025 * SafezoneH)"; - w = "6 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; - }; - class CA_VisionMode: RscText - { - idc = 152; - style = 0; - sizeEx = "0.0295*SafezoneH"; - shadow = 0; - font = "EtelkaMonospacePro"; - text = "VIS"; - align = "right"; - x = "2.6 * (0.01875 * SafezoneH)"; - y = "12.0 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "1.0 * (0.025 * SafezoneH)"; - }; - class CA_FlirMode: RscText - { - idc = 153; - style = 0; - sizeEx = "0.0295*SafezoneH"; - shadow = 0; - font = "EtelkaMonospacePro"; - text = "BHOT"; - align = "right"; - x = "6.18 * (0.01875 * SafezoneH)"; - y = "12.0 * (0.025 * SafezoneH)"; - w = "4.5 * (0.01875 * SafezoneH)"; - h = "1.0 * (0.025 * SafezoneH)"; - }; - class TgT_Grid_text: RangeText - { - idc = 1005; - text = "TGT:"; - font = "EtelkaMonospacePro"; - style = 2; - sizeEx = "0.0295*SafezoneH"; - shadow = 0; - x = "1.20 * (0.01875 * SafezoneH)"; - y = "13.5 * (0.025 * SafezoneH)"; - w = "6 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; - }; - class TGT_ValueGrid: RangeText - { - idc = 172; - font = "EtelkaMonospacePro"; - colorText[] = {0.706,0.0745,0.0196,0.8}; - style = 2; - sizeEx = "0.0295*SafezoneH"; - shadow = 0; - x = "5.20 * (0.01875 * SafezoneH)"; - y = "13.5 * (0.025 * SafezoneH)"; - w = "6 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; - }; - class OWN_Grid_text: RangeText - { - idc = 1005; - text = "OWN:"; - font = "EtelkaMonospacePro"; - style = 2; - sizeEx = "0.0295*SafezoneH"; - shadow = 0; - x = "1.20 * (0.01875 * SafezoneH)"; - y = "15 * (0.025 * SafezoneH)"; - w = "6 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; - }; - class OWN_ValueGrid: RangeText - { - idc = 171; - font = "EtelkaMonospacePro"; - colorText[] = {0.15,1,0.15,0.8}; - style = 2; - sizeEx = "0.0295*SafezoneH"; - shadow = 0; - x = "5.20 * (0.01875 * SafezoneH)"; - y = "15 * (0.025 * SafezoneH)"; - w = "6 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; - }; - class CA_Laser: RscText - { - idc = 158; - style = "0x30 + 0x800"; - sizeEx = "0.038*SafezoneH"; - shadow = 0; - align = "right"; - font = "EtelkaMonospacePro"; - text = PATHTOF(data\Helo_LaserON.paa); - x = "20.45 * (0.01875 * SafezoneH)"; - y = "14.1 * (0.025 * SafezoneH)"; - w = "12.5 * (0.01875 * SafezoneH)"; - h = "12 * (0.025 * SafezoneH)"; - }; - class CA_Heading: RscText - { - idc = 156; - style = 0; - sizeEx = "0.038*SafezoneH"; - shadow = 0; - font = "EtelkaMonospacePro"; - text = "023"; - align = "right"; - x = "25 * (0.01875 * SafezoneH)"; - y = "5 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; - }; - }; - }; - }; - class Rsc_ACE_Drones_UI_Pilots: RscUnitInfo - { - idd = 300; - controls[] = {"WeaponInfoControlsGroupRight","CA_BackgroundVehicle","CA_BackgroundVehicleTitle","CA_BackgroundVehicleTitleDark","CA_BackgroundFuel","CA_Vehicle","CA_VehicleRole","CA_HitZones","CA_SpeedBackground","CA_SpeedUnits","CA_Speed","CA_ValueFuel","CA_AltBackground","CA_AltUnits","CA_Alt","CA_VehicleToggles","CA_Radar","DriverOpticsGroup"}; - class DriverOpticsGroup: RscControlsGroup - { - idc = 392; - class VScrollbar: VScrollbar - { - width = 0; - }; - class HScrollbar: HScrollbar - { - height = 0; - }; - x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))"; - y = "0 * (0.025 * SafezoneH) + (SafezoneY)"; - w = "53.5 * (0.01875 * SafezoneH)"; - h = "40 * (0.025 * SafezoneH)"; - class controls - { - class TextGrid: RscText - { - style = 0; - sizeEx = "0.02*SafezoneH"; - shadow = 0; - font = "EtelkaMonospacePro"; - idc = 1005; - text = "GRID:"; - x = "5.8 * (0.01875 * SafezoneH)"; - y = "31.8 * (0.025 * SafezoneH)"; - w = "5 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; - }; - class ValueGrid: TextGrid - { - idc = 189; - text = "382546"; - x = "10.3 * (0.01875 * SafezoneH)"; - y = "31.8 * (0.025 * SafezoneH)"; - w = "6 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; - }; - class TextTime: TextGrid - { - idc = 1010; - text = "TIME [UTC]:"; - x = "5.8 * (0.01875 * SafezoneH)"; - y = "32.6 * (0.025 * SafezoneH)"; - w = "5 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; - }; - class ValueTime: TextGrid - { - idc = 101; - text = "20:28:35"; - x = "10 * (0.01875 * SafezoneH)"; - y = "32.6 * (0.025 * SafezoneH)"; - w = "6 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; - }; - class TextMag: TextGrid - { - idc = 1011; - text = "CAM MAG:"; - x = "5.8 * (0.01875 * SafezoneH)"; - y = "7 * (0.025 * SafezoneH)"; - w = "5 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; - }; - class OpticsZoom: TextGrid - { - idc = 192; - text = "28x"; - x = "10.3 * (0.01875 * SafezoneH)"; - y = "7 * (0.025 * SafezoneH)"; - w = "6 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; - }; - class BorderLineSpdTop: RscPicture - { - idc = 1203; - text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\border_line_ca.paa"; - x = "3.343 * (0.01875 * SafezoneH)"; - y = "12.4 * (0.025 * SafezoneH)"; - w = "3 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; - }; - class BorderLineSpdBottom: RscPicture - { - idc = 1207; - text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\border_line_ca.paa"; - x = "3.343 * (0.01875 * SafezoneH)"; - y = "26.5 * (0.025 * SafezoneH)"; - w = "3 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; - }; - class BorderLineAltTop: RscPicture - { - idc = 1205; - text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\border_line_ca.paa"; - x = "47.16 * (0.01875 * SafezoneH)"; - y = "12.4 * (0.025 * SafezoneH)"; - w = "3 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; - }; - class BorderLineAltBottom: RscPicture - { - idc = 1206; - text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\border_line_ca.paa"; - x = "47.16 * (0.01875 * SafezoneH)"; - y = "26.5 * (0.025 * SafezoneH)"; - w = "3 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; - }; - class TextSpd: TextGrid - { - idc = 1004; - text = "SPD"; - x = "4.8 * (0.01875 * SafezoneH)"; - y = "11.8 * (0.025 * SafezoneH)"; - w = "5 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; - }; - class SpeedValueBorder: RscPicture - { - idc = 1200; - text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\altimeter_value_ca.paa"; - x = "6.3 * (0.01875 * SafezoneH)"; - y = "19 * (0.025 * SafezoneH)"; - w = "5 * (0.01875 * SafezoneH)"; - h = "2 * (0.025 * SafezoneH)"; - }; - class CA_Speed: TextGrid - { - idc = 190; - sizeEx = "0.03*SafezoneH"; - text = "120"; - x = "7.5 * (0.01875 * SafezoneH)"; - y = "19.5 * (0.025 * SafezoneH)"; - w = "6 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; - }; - class AnalogueSpeed: RscLadderPicture - { - idc = 384; - topValue = 1312; - bottomValue = -345; - visibleRange = -1; - text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\UAVspeedLadder_ca.paa"; - x = "1.5 * (0.01875 * SafezoneH)"; - y = "13 * (0.025 * SafezoneH)"; - w = "5 * (0.01875 * SafezoneH)"; - h = "14 * (0.025 * SafezoneH)"; - }; - class TextAlt: TextGrid - { - idc = 1006; - text = "ALT"; - x = "46.9 * (0.01875 * SafezoneH)"; - y = "11.8 * (0.025 * SafezoneH)"; - w = "5 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; - }; - class AltValueBorder: RscPicture - { - idc = 1201; - text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\airspeed_value_ca.paa"; - x = "42.25 * (0.01875 * SafezoneH)"; - y = "19 * (0.025 * SafezoneH)"; - w = "5 * (0.01875 * SafezoneH)"; - h = "2 * (0.025 * SafezoneH)"; - }; - class CA_Alt: TextGrid - { - idc = 191; - sizeEx = "0.03*SafezoneH"; - style = 1; - text = "3825"; - x = "43 * (0.01875 * SafezoneH)"; - y = "19.5 * (0.025 * SafezoneH)"; - w = "3.2 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; - }; - class AnalogueAlt: RscLadderPicture - { - idc = 385; - topValue = 14430; - bottomValue = -2110; - visibleRange = -1; - text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\UAValtLadder_ca.paa"; - x = "47 * (0.01875 * SafezoneH)"; - y = "13 * (0.025 * SafezoneH)"; - w = "2.5 * (0.01875 * SafezoneH)"; - h = "14 * (0.025 * SafezoneH)"; - }; - class AnalogueHorizon: RscLadderPicture - { - idc = 383; - topValue = 90; - bottomValue = -90; - visibleRange = -1; - text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\horizon_ladder_ca.paa"; - x = "16.75 * (0.01875 * SafezoneH)"; - y = "5 * (0.025 * SafezoneH)"; - w = "20 * (0.01875 * SafezoneH)"; - h = "30 * (0.025 * SafezoneH)"; - }; - class HorizonCenter: RscPicture - { - idc = 1202; - text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\horizon_aircraft_ca.paa"; - x = "24.75 * (0.01875 * SafezoneH)"; - y = "19 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "2 * (0.025 * SafezoneH)"; - }; - }; - }; - }; +class RscControlsGroup; +class RscText; +class RangeText: RscText{}; +class RscPicture; +class RscOpticsText; +class RscIGProgress; +class RscOpticsValue; +class VScrollbar; +class HScrollbar; +class RscLadderPicture; +class RscControlsGroupNoScrollbars; + + +class RscInGameUI +{ + class RscUnitInfo; + class Rsc_ACE_Helo_UI_Turret: RscUnitInfo + { + idd = 300; + controls[] = {"CA_IGUI_elements_group","CA_VehicleToggles"}; + class VScrollbar; + class HScrollbar; + class CA_IGUI_elements_group: RscControlsGroup + { + idc = 170; + class VScrollbar: VScrollbar + { + width = 0; + }; + class HScrollbar: HScrollbar + { + height = 0; + }; + x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))"; + y = "0 * (0.025 * SafezoneH) + (SafezoneY)"; + w = "53.5 * (0.01875 * SafezoneH)"; + h = "40 * (0.025 * SafezoneH)"; + class controls + { + class CA_Distance: RscText + { + idc = 151; + style = 2; + sizeEx = "0.0295*SafezoneH"; + shadow = 0; + font = "EtelkaMonospacePro"; + x = "24.78 * (0.01875 * SafezoneH)"; + y = "30.88 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; + }; + class CA_Speed: RangeText + { + idc = 188; + style = 2; + sizeEx = "0.0295*SafezoneH"; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "120"; + x = "14.78 * (0.01875 * SafezoneH)"; + y = "30.88 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; + }; + class CA_Alt: RangeText + { + idc = 189; + style = 2; + sizeEx = "0.0295*SafezoneH"; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "3825"; + x = "34.78 * (0.01875 * SafezoneH)"; + y = "30.88 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; + }; + class CA_VisionMode: RscText + { + idc = 152; + style = 0; + sizeEx = "0.0295*SafezoneH"; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "VIS"; + x = "12.58 * (0.01875 * SafezoneH)"; + y = "8 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; + }; + class CA_FlirMode: RscText + { + idc = 153; + style = 0; + sizeEx = "0.0295*SafezoneH"; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "BHOT"; + x = "15.78 * (0.01875 * SafezoneH)"; + y = "8 * (0.025 * SafezoneH)"; + w = "4.5 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; + }; + class ValueGrid: RangeText + { + idc = 172; + font = "EtelkaMonospacePro"; + style = 2; + sizeEx = "0.0295*SafezoneH"; + shadow = 0; + x = "12.20 * (0.01875 * SafezoneH)"; + y = "3.5 * (0.025 * SafezoneH)"; + w = "6 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; + }; + class TextTADS: RangeText + { + idc = 1010; + text = "TADS"; + font = "EtelkaMonospacePro"; + style = 2; + shadow = 0; + x = "12.30 * (0.01875 * SafezoneH)"; + y = "5 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; + }; + class ValueTime: RangeText + { + idc = 190; + text = "20:28:35"; + font = "EtelkaMonospacePro"; + style = 2; + sizeEx = "0.0295*SafezoneH"; + shadow = 0; + x = "12.1 * (0.01875 * SafezoneH)"; + y = "6.5 * (0.025 * SafezoneH)"; + w = "6 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; + }; + class CA_Laser: RscText + { + idc = 158; + style = "0x30 + 0x800"; + sizeEx = "0.038*SafezoneH"; + shadow = 0; + font = "EtelkaMonospacePro"; + text = PATHTOF(data\Helo_LaserON.paa); + x = "20.45 * (0.01875 * SafezoneH)"; + y = "14.1 * (0.025 * SafezoneH)"; + w = "12.5 * (0.01875 * SafezoneH)"; + h = "12 * (0.025 * SafezoneH)"; + }; + class CA_Heading: RscText + { + idc = 156; + style = 0; + sizeEx = "0.038*SafezoneH"; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "023"; + x = "24.83 * (0.01875 * SafezoneH)"; + y = "6 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; + }; + }; + }; + }; + class Rsc_ACE_Helo_UI_01: RscUnitInfo + { + controls[] = {"WeaponInfoControlsGroupRight","CA_TextFlaresMode","CA_TextFlares","CA_VehicleToggles","CA_Radar"}; + }; + class Rsc_ACE_Helo_UI_02: RscUnitInfo + { + controls[] = {"CA_TextFlaresMode","CA_TextFlares","CA_VehicleToggles","CA_Radar"}; + }; + class Rsc_ACE_Drones_UI_Turret: RscUnitInfo + { + idd = 300; + controls[] = {"CA_Zeroing","CA_IGUI_elements_group","CA_VehicleToggles"}; + class CA_IGUI_elements_group: RscControlsGroup + { + idc = 170; + class VScrollbar: VScrollbar + { + width = 0; + }; + class HScrollbar: HScrollbar + { + height = 0; + }; + x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))"; + y = "0 * (0.025 * SafezoneH) + (SafezoneY)"; + w = "53.5 * (0.01875 * SafezoneH)"; + h = "40 * (0.025 * SafezoneH)"; + class controls + { + class CA_Distance: RscText + { + idc = 151; + style = 2; + sizeEx = "0.0295*SafezoneH"; + shadow = 0; + font = "EtelkaMonospacePro"; + x = "24.78 * (0.01875 * SafezoneH)"; + y = "30.88 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; + }; + class CA_Speed: RangeText + { + idc = 188; + style = 2; + sizeEx = "0.0295*SafezoneH"; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "120"; + x = "14.78 * (0.01875 * SafezoneH)"; + y = "30.88 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; + }; + class CA_Alt: RangeText + { + idc = 189; + style = 2; + sizeEx = "0.0295*SafezoneH"; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "3825"; + x = "34.78 * (0.01875 * SafezoneH)"; + y = "30.88 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; + }; + class ValueTime: RangeText + { + idc = 190; + text = "20:28:35"; + font = "EtelkaMonospacePro"; + style = 2; + sizeEx = "0.0295*SafezoneH"; + shadow = 0; + x = "1.75 * (0.01875 * SafezoneH)"; + y = "10.5 * (0.025 * SafezoneH)"; + w = "6 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; + }; + class CA_VisionMode: RscText + { + idc = 152; + style = 0; + sizeEx = "0.0295*SafezoneH"; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "VIS"; + align = "right"; + x = "2.6 * (0.01875 * SafezoneH)"; + y = "12.0 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.0 * (0.025 * SafezoneH)"; + }; + class CA_FlirMode: RscText + { + idc = 153; + style = 0; + sizeEx = "0.0295*SafezoneH"; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "BHOT"; + align = "right"; + x = "6.18 * (0.01875 * SafezoneH)"; + y = "12.0 * (0.025 * SafezoneH)"; + w = "4.5 * (0.01875 * SafezoneH)"; + h = "1.0 * (0.025 * SafezoneH)"; + }; + class TgT_Grid_text: RangeText + { + idc = 1005; + text = "TGT:"; + font = "EtelkaMonospacePro"; + style = 2; + sizeEx = "0.0295*SafezoneH"; + shadow = 0; + x = "1.20 * (0.01875 * SafezoneH)"; + y = "13.5 * (0.025 * SafezoneH)"; + w = "6 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; + }; + class TGT_ValueGrid: RangeText + { + idc = 172; + font = "EtelkaMonospacePro"; + colorText[] = {0.706,0.0745,0.0196,0.8}; + style = 2; + sizeEx = "0.0295*SafezoneH"; + shadow = 0; + x = "5.20 * (0.01875 * SafezoneH)"; + y = "13.5 * (0.025 * SafezoneH)"; + w = "6 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; + }; + class OWN_Grid_text: RangeText + { + idc = 1005; + text = "OWN:"; + font = "EtelkaMonospacePro"; + style = 2; + sizeEx = "0.0295*SafezoneH"; + shadow = 0; + x = "1.20 * (0.01875 * SafezoneH)"; + y = "15 * (0.025 * SafezoneH)"; + w = "6 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; + }; + class OWN_ValueGrid: RangeText + { + idc = 171; + font = "EtelkaMonospacePro"; + colorText[] = {0.15,1,0.15,0.8}; + style = 2; + sizeEx = "0.0295*SafezoneH"; + shadow = 0; + x = "5.20 * (0.01875 * SafezoneH)"; + y = "15 * (0.025 * SafezoneH)"; + w = "6 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; + }; + class CA_Laser: RscText + { + idc = 158; + style = "0x30 + 0x800"; + sizeEx = "0.038*SafezoneH"; + shadow = 0; + align = "right"; + font = "EtelkaMonospacePro"; + text = PATHTOF(data\Helo_LaserON.paa); + x = "20.45 * (0.01875 * SafezoneH)"; + y = "14.1 * (0.025 * SafezoneH)"; + w = "12.5 * (0.01875 * SafezoneH)"; + h = "12 * (0.025 * SafezoneH)"; + }; + class CA_Heading: RscText + { + idc = 156; + style = 0; + sizeEx = "0.038*SafezoneH"; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "023"; + align = "right"; + x = "25 * (0.01875 * SafezoneH)"; + y = "5 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; + }; + }; + }; + }; + class Rsc_ACE_Drones_UI_Pilots: RscUnitInfo + { + idd = 300; + controls[] = {"WeaponInfoControlsGroupRight","CA_BackgroundVehicle","CA_BackgroundVehicleTitle","CA_BackgroundVehicleTitleDark","CA_BackgroundFuel","CA_Vehicle","CA_VehicleRole","CA_HitZones","CA_SpeedBackground","CA_SpeedUnits","CA_Speed","CA_ValueFuel","CA_AltBackground","CA_AltUnits","CA_Alt","CA_VehicleToggles","CA_Radar","DriverOpticsGroup"}; + class DriverOpticsGroup: RscControlsGroup + { + idc = 392; + class VScrollbar: VScrollbar + { + width = 0; + }; + class HScrollbar: HScrollbar + { + height = 0; + }; + x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))"; + y = "0 * (0.025 * SafezoneH) + (SafezoneY)"; + w = "53.5 * (0.01875 * SafezoneH)"; + h = "40 * (0.025 * SafezoneH)"; + class controls + { + class TextGrid: RscText + { + style = 0; + sizeEx = "0.02*SafezoneH"; + shadow = 0; + font = "EtelkaMonospacePro"; + idc = 1005; + text = "GRID:"; + x = "5.8 * (0.01875 * SafezoneH)"; + y = "31.8 * (0.025 * SafezoneH)"; + w = "5 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; + }; + class ValueGrid: TextGrid + { + idc = 189; + text = "382546"; + x = "10.3 * (0.01875 * SafezoneH)"; + y = "31.8 * (0.025 * SafezoneH)"; + w = "6 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; + }; + class TextTime: TextGrid + { + idc = 1010; + text = "TIME [UTC]:"; + x = "5.8 * (0.01875 * SafezoneH)"; + y = "32.6 * (0.025 * SafezoneH)"; + w = "5 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; + }; + class ValueTime: TextGrid + { + idc = 101; + text = "20:28:35"; + x = "10 * (0.01875 * SafezoneH)"; + y = "32.6 * (0.025 * SafezoneH)"; + w = "6 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; + }; + class TextMag: TextGrid + { + idc = 1011; + text = "CAM MAG:"; + x = "5.8 * (0.01875 * SafezoneH)"; + y = "7 * (0.025 * SafezoneH)"; + w = "5 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; + }; + class OpticsZoom: TextGrid + { + idc = 192; + text = "28x"; + x = "10.3 * (0.01875 * SafezoneH)"; + y = "7 * (0.025 * SafezoneH)"; + w = "6 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; + }; + class BorderLineSpdTop: RscPicture + { + idc = 1203; + text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\border_line_ca.paa"; + x = "3.343 * (0.01875 * SafezoneH)"; + y = "12.4 * (0.025 * SafezoneH)"; + w = "3 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; + }; + class BorderLineSpdBottom: RscPicture + { + idc = 1207; + text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\border_line_ca.paa"; + x = "3.343 * (0.01875 * SafezoneH)"; + y = "26.5 * (0.025 * SafezoneH)"; + w = "3 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; + }; + class BorderLineAltTop: RscPicture + { + idc = 1205; + text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\border_line_ca.paa"; + x = "47.16 * (0.01875 * SafezoneH)"; + y = "12.4 * (0.025 * SafezoneH)"; + w = "3 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; + }; + class BorderLineAltBottom: RscPicture + { + idc = 1206; + text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\border_line_ca.paa"; + x = "47.16 * (0.01875 * SafezoneH)"; + y = "26.5 * (0.025 * SafezoneH)"; + w = "3 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; + }; + class TextSpd: TextGrid + { + idc = 1004; + text = "SPD"; + x = "4.8 * (0.01875 * SafezoneH)"; + y = "11.8 * (0.025 * SafezoneH)"; + w = "5 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; + }; + class SpeedValueBorder: RscPicture + { + idc = 1200; + text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\altimeter_value_ca.paa"; + x = "6.3 * (0.01875 * SafezoneH)"; + y = "19 * (0.025 * SafezoneH)"; + w = "5 * (0.01875 * SafezoneH)"; + h = "2 * (0.025 * SafezoneH)"; + }; + class CA_Speed: TextGrid + { + idc = 190; + sizeEx = "0.03*SafezoneH"; + text = "120"; + x = "7.5 * (0.01875 * SafezoneH)"; + y = "19.5 * (0.025 * SafezoneH)"; + w = "6 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; + }; + class AnalogueSpeed: RscLadderPicture + { + idc = 384; + topValue = 1312; + bottomValue = -345; + visibleRange = -1; + text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\UAVspeedLadder_ca.paa"; + x = "1.5 * (0.01875 * SafezoneH)"; + y = "13 * (0.025 * SafezoneH)"; + w = "5 * (0.01875 * SafezoneH)"; + h = "14 * (0.025 * SafezoneH)"; + }; + class TextAlt: TextGrid + { + idc = 1006; + text = "ALT"; + x = "46.9 * (0.01875 * SafezoneH)"; + y = "11.8 * (0.025 * SafezoneH)"; + w = "5 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; + }; + class AltValueBorder: RscPicture + { + idc = 1201; + text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\airspeed_value_ca.paa"; + x = "42.25 * (0.01875 * SafezoneH)"; + y = "19 * (0.025 * SafezoneH)"; + w = "5 * (0.01875 * SafezoneH)"; + h = "2 * (0.025 * SafezoneH)"; + }; + class CA_Alt: TextGrid + { + idc = 191; + sizeEx = "0.03*SafezoneH"; + style = 1; + text = "3825"; + x = "43 * (0.01875 * SafezoneH)"; + y = "19.5 * (0.025 * SafezoneH)"; + w = "3.2 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; + }; + class AnalogueAlt: RscLadderPicture + { + idc = 385; + topValue = 14430; + bottomValue = -2110; + visibleRange = -1; + text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\UAValtLadder_ca.paa"; + x = "47 * (0.01875 * SafezoneH)"; + y = "13 * (0.025 * SafezoneH)"; + w = "2.5 * (0.01875 * SafezoneH)"; + h = "14 * (0.025 * SafezoneH)"; + }; + class AnalogueHorizon: RscLadderPicture + { + idc = 383; + topValue = 90; + bottomValue = -90; + visibleRange = -1; + text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\horizon_ladder_ca.paa"; + x = "16.75 * (0.01875 * SafezoneH)"; + y = "5 * (0.025 * SafezoneH)"; + w = "20 * (0.01875 * SafezoneH)"; + h = "30 * (0.025 * SafezoneH)"; + }; + class HorizonCenter: RscPicture + { + idc = 1202; + text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\horizon_aircraft_ca.paa"; + x = "24.75 * (0.01875 * SafezoneH)"; + y = "19 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "2 * (0.025 * SafezoneH)"; + }; + }; + }; + }; }; \ No newline at end of file diff --git a/addons/attach/stringtable.xml b/addons/attach/stringtable.xml index 27a0517f9a..839ac2e168 100644 --- a/addons/attach/stringtable.xml +++ b/addons/attach/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -48,7 +48,7 @@ Marcador IV Acoplado Strobo IR attaccata Infravörös jeladó hozzácsatolva - ИК строб присоединён + ИК-маяк присоединён IR Strobe Detached @@ -60,7 +60,7 @@ Marcador IV Separado Strobo IR staccata Infravörös jeladó lecsatolva - ИК строб отсоединён + ИК-маяк отсоединён IR Grenade Attached @@ -72,7 +72,7 @@ Granada IV Acoplada Granata IR attaccata Infravörös gránát hozzácsatolva - ИК граната присоединена + ИК-граната присоединена IR Grenade Detached @@ -84,7 +84,7 @@ Granada IV Separada Granata IR staccata Infravörös gránát lecsatolva - ИК граната отсоединена + ИК-граната отсоединена Chemlight Attached @@ -132,7 +132,7 @@ Marcador IV Strobo IR Infravörös jeladó - ИК строб + ИК-маяк IR Strobe allows you to signal your position through a pulsating beacon only visible with NVGs. @@ -144,7 +144,7 @@ O Marcador IV permite que você sinalize sua posição através de um pulso visível somente com equipamento de visão noturna. La Strobo IR è una luce stroboscopica che ti permette di segnalare la tua posizione grazie all'emissione di impulsi ad infrarossi visibili solo con i visori notturni. Az infravörös jeladóval megjelölheted a helyzetedet úgy, hogy annak pulzáló fénye csak éjjellátó készülékkel látható. - ИК строб позволяет сигнализировать свое местоположение через пульсирующий маяк, видимый только через ПНВ. + ИК-маяк позволяет сигнализировать о своём местоположении через пульсирующий свет, видимый только через ПНВ. Place @@ -156,6 +156,7 @@ Colocar Posiziona Elhelyez + Установить Cancel @@ -167,13 +168,14 @@ Cancelar Annulla Mégse + Отмена Attach Failed Échec du Attacher Befestigen fehlgeschlagen - Присоединить Ошибка + Соединение прервано Error al acoplar - + \ No newline at end of file diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index 79f99c33a4..b064c05fc3 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -1,20 +1,20 @@ -class CfgAmmo { - class BulletCore; - - class BulletBase: BulletCore { - timeToLive = 15; // Default: 6, doubleplusgood all munition range. - }; - - class B_20mm : BulletBase { - timeToLive = 30; - }; - class B_25mm : BulletBase { - timeToLive = 30; - }; - class B_35mm_AA : BulletBase { - timeToLive = 30; - }; - class B_30mm_AP : BulletBase { - timeToLive = 30; - }; +class CfgAmmo { + class BulletCore; + + class BulletBase: BulletCore { + timeToLive = 15; // Default: 6, doubleplusgood all munition range. + }; + + class B_20mm : BulletBase { + timeToLive = 30; + }; + class B_25mm : BulletBase { + timeToLive = 30; + }; + class B_35mm_AA : BulletBase { + timeToLive = 30; + }; + class B_30mm_AP : BulletBase { + timeToLive = 30; + }; }; \ No newline at end of file diff --git a/addons/captives/stringtable.xml b/addons/captives/stringtable.xml index 897782747f..bc9cff1572 100644 --- a/addons/captives/stringtable.xml +++ b/addons/captives/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -134,26 +134,31 @@ Surrender Kapitulieren Rendirse + Сдаться Stop Surrendering Den Kampf erneut aufnehmen Dejar de rendirse + Остановить сдачу Only use on alive units Nur bei lebenden Einheiten verwendbar Utilizar solo en unidades vivas + Только для живых юнитов Only use on dismounted inf Nur bei abgesessener Infanterie verwendbar Utilizar solo en infanteria desmontada + Только для спеш. солдат Nothing under mouse Es wurde nichts ausgewählt Nada bajo el ratón + Объекты под мышью отсутствуют - + \ No newline at end of file diff --git a/addons/common/functions/fnc__handleNetEvent.sqf b/addons/common/functions/fnc__handleNetEvent.sqf index 804a0ade78..c4e1f18f8e 100644 --- a/addons/common/functions/fnc__handleNetEvent.sqf +++ b/addons/common/functions/fnc__handleNetEvent.sqf @@ -1,74 +1,74 @@ -//fnc__handleNetEvent.sqf -// internal handler for net events -#include "script_component.hpp" - -private ["_eventType", "_event", "_eventName", "_eventArgs", "_eventNames", "_eventIndex", "_eventTargets", "_sentEvents", "_owner", "_serverFlagged"]; - -_eventType = _this select 0; -_event = _this select 1; - -if(_eventType == "ACEg") then { - _eventName = _event select 0; - _eventArgs = _event select 1; - - _eventNames = GVAR(events) select 0; - _eventIndex = _eventNames find _eventName; - if(_eventIndex != -1) then { - _events = (GVAR(events) select 1) select _eventIndex; - - #ifdef DEBUG_EVENTS - diag_log text format[ARR_2("* Net Event %1",_eventName)]; - diag_log text format[ARR_2(" args=%1",_eventArgs)]; - #endif - - { - if(!isNil "_x") then { - _eventArgs call CALLSTACK_NAMED(_x, format[ARR_3("Net Event %1 ID: %2",_eventName,_forEachIndex)]); - #ifdef DEBUG_EVENTS_CALLSTACK - diag_log text format[ARR_2(" ID: %1",_forEachIndex)]; - #endif - }; - } forEach _events; - }; -}; - -if(_eventType == "ACEc") then { - if(isServer) then { - _eventName = _event select 0; - _eventTargets = _event select 1; - _eventArgs = _event select 2; - - _sentEvents = []; - if(!IS_ARRAY(_eventTargets)) then { - _eventTargets = [_eventTargets]; - }; - - //If not multiplayer, and there are targets, then just run localy - if ((!isMultiplayer) && {(count _eventTargets) > 0}) exitWith { - ACEg = [_eventName, _eventArgs]; - ["ACEg", ACEg] call FUNC(_handleNetEvent); - }; - - _serverFlagged = false; - { - _owner = _x; - if(IS_OBJECT(_x)) then { - _owner = owner _x; - }; - if(!(_owner in _sentEvents)) then { - PUSH(_sentEvents, _owner); - ACEg = [_eventName, _eventArgs]; - if(isDedicated || {_x != ACE_player}) then { - if(isDedicated && {local _x} && {!_serverFlagged}) then { - _serverFlagged = true; - ["ACEg", ACEg] call FUNC(_handleNetEvent); - } else { - _owner publicVariableClient "ACEg"; - }; - } else { - ["ACEg", ACEg] call FUNC(_handleNetEvent); - }; - }; - } forEach _eventTargets; - }; +//fnc__handleNetEvent.sqf +// internal handler for net events +#include "script_component.hpp" + +private ["_eventType", "_event", "_eventName", "_eventArgs", "_eventNames", "_eventIndex", "_eventTargets", "_sentEvents", "_owner", "_serverFlagged"]; + +_eventType = _this select 0; +_event = _this select 1; + +if(_eventType == "ACEg") then { + _eventName = _event select 0; + _eventArgs = _event select 1; + + _eventNames = GVAR(events) select 0; + _eventIndex = _eventNames find _eventName; + if(_eventIndex != -1) then { + _events = (GVAR(events) select 1) select _eventIndex; + + #ifdef DEBUG_EVENTS + diag_log text format[ARR_2("* Net Event %1",_eventName)]; + diag_log text format[ARR_2(" args=%1",_eventArgs)]; + #endif + + { + if(!isNil "_x") then { + _eventArgs call CALLSTACK_NAMED(_x, format[ARR_3("Net Event %1 ID: %2",_eventName,_forEachIndex)]); + #ifdef DEBUG_EVENTS_CALLSTACK + diag_log text format[ARR_2(" ID: %1",_forEachIndex)]; + #endif + }; + } forEach _events; + }; +}; + +if(_eventType == "ACEc") then { + if(isServer) then { + _eventName = _event select 0; + _eventTargets = _event select 1; + _eventArgs = _event select 2; + + _sentEvents = []; + if(!IS_ARRAY(_eventTargets)) then { + _eventTargets = [_eventTargets]; + }; + + //If not multiplayer, and there are targets, then just run localy + if ((!isMultiplayer) && {(count _eventTargets) > 0}) exitWith { + ACEg = [_eventName, _eventArgs]; + ["ACEg", ACEg] call FUNC(_handleNetEvent); + }; + + _serverFlagged = false; + { + _owner = _x; + if(IS_OBJECT(_x)) then { + _owner = owner _x; + }; + if(!(_owner in _sentEvents)) then { + PUSH(_sentEvents, _owner); + ACEg = [_eventName, _eventArgs]; + if(isDedicated || {_x != ACE_player}) then { + if(isDedicated && {local _x} && {!_serverFlagged}) then { + _serverFlagged = true; + ["ACEg", ACEg] call FUNC(_handleNetEvent); + } else { + _owner publicVariableClient "ACEg"; + }; + } else { + ["ACEg", ACEg] call FUNC(_handleNetEvent); + }; + }; + } forEach _eventTargets; + }; }; \ No newline at end of file diff --git a/addons/common/functions/fnc_addEventHandler.sqf b/addons/common/functions/fnc_addEventHandler.sqf index 8524a4abef..21e2a5b6f9 100644 --- a/addons/common/functions/fnc_addEventHandler.sqf +++ b/addons/common/functions/fnc_addEventHandler.sqf @@ -1,32 +1,32 @@ -/* - * Author: Nou - * - * Add a event handler. - * - * Argument: - * 0: Event name (string) - * 1: Event code (code) - * - * Return value: - * Event handler ID number (for use with fnc_removeEventHandler) - */ -#include "script_component.hpp" -private ["_eventName", "_eventCode", "_eventNames", "_eventFunctions", "_eventNameCount", "_eventIndex", "_eventFunctionCount"]; -_eventName = _this select 0; -_eventCode = _this select 1; - -_eventNames = GVAR(events) select 0; -_eventFunctions = []; -_eventIndex = _eventNames find _eventName; -if(_eventIndex != -1) then { - _eventFunctions = (GVAR(events) select 1) select _eventIndex; -} else { - _eventNameCount = count _eventNames; - _eventNames set[_eventNameCount, _eventName]; - (GVAR(events) select 1) set[_eventNameCount, _eventFunctions]; -}; - -_eventFunctionCount = count _eventFunctions; -_eventFunctions set[_eventFunctionCount, _eventCode]; - +/* + * Author: Nou + * + * Add a event handler. + * + * Argument: + * 0: Event name (string) + * 1: Event code (code) + * + * Return value: + * Event handler ID number (for use with fnc_removeEventHandler) + */ +#include "script_component.hpp" +private ["_eventName", "_eventCode", "_eventNames", "_eventFunctions", "_eventNameCount", "_eventIndex", "_eventFunctionCount"]; +_eventName = _this select 0; +_eventCode = _this select 1; + +_eventNames = GVAR(events) select 0; +_eventFunctions = []; +_eventIndex = _eventNames find _eventName; +if(_eventIndex != -1) then { + _eventFunctions = (GVAR(events) select 1) select _eventIndex; +} else { + _eventNameCount = count _eventNames; + _eventNames set[_eventNameCount, _eventName]; + (GVAR(events) select 1) set[_eventNameCount, _eventFunctions]; +}; + +_eventFunctionCount = count _eventFunctions; +_eventFunctions set[_eventFunctionCount, _eventCode]; + _eventFunctionCount; \ No newline at end of file diff --git a/addons/common/functions/fnc_dumpArray.sqf b/addons/common/functions/fnc_dumpArray.sqf index 8a95172ea7..9b889d8d22 100644 --- a/addons/common/functions/fnc_dumpArray.sqf +++ b/addons/common/functions/fnc_dumpArray.sqf @@ -1,25 +1,25 @@ -//fnc_dumpArray.sqf -#include "script_component.hpp" - -private ["_var", "_depth", "_pad", "_i", "_x"]; - -_var = _this select 0; -_depth = _this select 1; -_pad = ""; -for "_i" from 0 to _depth do { - _pad = _pad + toString [9]; -}; -_depth = _depth + 1; -if(IS_ARRAY(_var)) then { - if((count _var) > 0) then { - diag_log text format["%1[", _pad]; - { - [_x, _depth] call FUNC(dumpArray); - } forEach _var; - diag_log text format["%1],", _pad]; - } else { - diag_log text format["%1[],", _pad]; - }; -} else { - diag_log text format["%1%2", _pad, [_var] call FUNC(formatVar)]; -}; +//fnc_dumpArray.sqf +#include "script_component.hpp" + +private ["_var", "_depth", "_pad", "_i", "_x"]; + +_var = _this select 0; +_depth = _this select 1; +_pad = ""; +for "_i" from 0 to _depth do { + _pad = _pad + toString [9]; +}; +_depth = _depth + 1; +if(IS_ARRAY(_var)) then { + if((count _var) > 0) then { + diag_log text format["%1[", _pad]; + { + [_x, _depth] call FUNC(dumpArray); + } forEach _var; + diag_log text format["%1],", _pad]; + } else { + diag_log text format["%1[],", _pad]; + }; +} else { + diag_log text format["%1%2", _pad, [_var] call FUNC(formatVar)]; +}; diff --git a/addons/common/functions/fnc_dumpPerformanceCounters.sqf b/addons/common/functions/fnc_dumpPerformanceCounters.sqf index acf81ff20a..b82ae3e5ea 100644 --- a/addons/common/functions/fnc_dumpPerformanceCounters.sqf +++ b/addons/common/functions/fnc_dumpPerformanceCounters.sqf @@ -1,73 +1,73 @@ -//fnc_dumpPerformanceCounters.sqf -#define DEBUG_MODE_FULL -#include "script_component.hpp" - - -diag_log text format["REGISTERED ACE PFH HANDLERS"]; -diag_log text format["-------------------------------------------"]; -if(!isNil "ACE_PFH_COUNTER") then { - { - private["_pfh"]; - _pfh = _x select 0; - diag_log text format["Registered PFH: id=%1, %1:%2", (_pfh select 0), (_pfh select 1), (_pfh select 2) ]; - } forEach ACE_PFH_COUNTER; -}; - -diag_log text format["ACE COUNTER RESULTS"]; -diag_log text format["-------------------------------------------"]; -{ - private["_counterEntry", "_iter", "_total", "_count", "_delta", "_averageResult"]; - _counterEntry = _x; - _iter = 0; - _total = 0; - _count = 0; - _averageResult = 0; - if( (count _counterEntry) > 3) then { - // calc - { - if(_iter > 2) then { - _count = _count + 1; - _delta = (_x select 1) - (_x select 0); - - _total = _total + _delta; - }; - _iter = _iter + 1; - } forEach _counterEntry; - - // results - _averageResult = (_total / _count) * 1000; - - // dump results - diag_log text format["%1: Average: %2s / %3 = %4ms", (_counterEntry select 0), _total, _count, _averageResult]; - } else { - diag_log text format["%1: No results", (_counterEntry select 0) ]; - }; -} forEach ACE_COUNTERS; - -/* -// Dump PFH Trackers -diag_log text format["ACE_PERFORMANCE_EXCESSIVE_STEP_TRACKER"]; -diag_log text format["-------------------------------------------"]; -{ - private["_delay"]; - _delay = _x select 2; - //if(_delay > 0) then { _delay = _delay / 1000; }; - - diag_log text format["%1: %2s, delay=%3, handle=%4",(_x select 0), _delay, (_x select 3), (_x select 4)]; -} forEach ACE_PERFORMANCE_EXCESSIVE_STEP_TRACKER; - -// Dump PFH Trackers -diag_log text format["ACE_PERFORMANCE_EXCESSIVE_FRAME_TRACKER"]; -diag_log text format["-------------------------------------------"]; -{ - private["_delta"]; - _delta = _x select 1; - //if(_delta > 0) then { _delta = _delta / 1000; }; - diag_log text format[" DELTA: %1s", _delta]; -} forEach ACE_PERFORMANCE_EXCESSIVE_FRAME_TRACKER; - -//{ -// -//} forEach ACRE_EXCESSIVE_FRAME_TRACKER; - +//fnc_dumpPerformanceCounters.sqf +#define DEBUG_MODE_FULL +#include "script_component.hpp" + + +diag_log text format["REGISTERED ACE PFH HANDLERS"]; +diag_log text format["-------------------------------------------"]; +if(!isNil "ACE_PFH_COUNTER") then { + { + private["_pfh"]; + _pfh = _x select 0; + diag_log text format["Registered PFH: id=%1, %1:%2", (_pfh select 0), (_pfh select 1), (_pfh select 2) ]; + } forEach ACE_PFH_COUNTER; +}; + +diag_log text format["ACE COUNTER RESULTS"]; +diag_log text format["-------------------------------------------"]; +{ + private["_counterEntry", "_iter", "_total", "_count", "_delta", "_averageResult"]; + _counterEntry = _x; + _iter = 0; + _total = 0; + _count = 0; + _averageResult = 0; + if( (count _counterEntry) > 3) then { + // calc + { + if(_iter > 2) then { + _count = _count + 1; + _delta = (_x select 1) - (_x select 0); + + _total = _total + _delta; + }; + _iter = _iter + 1; + } forEach _counterEntry; + + // results + _averageResult = (_total / _count) * 1000; + + // dump results + diag_log text format["%1: Average: %2s / %3 = %4ms", (_counterEntry select 0), _total, _count, _averageResult]; + } else { + diag_log text format["%1: No results", (_counterEntry select 0) ]; + }; +} forEach ACE_COUNTERS; + +/* +// Dump PFH Trackers +diag_log text format["ACE_PERFORMANCE_EXCESSIVE_STEP_TRACKER"]; +diag_log text format["-------------------------------------------"]; +{ + private["_delay"]; + _delay = _x select 2; + //if(_delay > 0) then { _delay = _delay / 1000; }; + + diag_log text format["%1: %2s, delay=%3, handle=%4",(_x select 0), _delay, (_x select 3), (_x select 4)]; +} forEach ACE_PERFORMANCE_EXCESSIVE_STEP_TRACKER; + +// Dump PFH Trackers +diag_log text format["ACE_PERFORMANCE_EXCESSIVE_FRAME_TRACKER"]; +diag_log text format["-------------------------------------------"]; +{ + private["_delta"]; + _delta = _x select 1; + //if(_delta > 0) then { _delta = _delta / 1000; }; + diag_log text format[" DELTA: %1s", _delta]; +} forEach ACE_PERFORMANCE_EXCESSIVE_FRAME_TRACKER; + +//{ +// +//} forEach ACRE_EXCESSIVE_FRAME_TRACKER; + */ \ No newline at end of file diff --git a/addons/common/functions/fnc_getTurretDirection.sqf b/addons/common/functions/fnc_getTurretDirection.sqf index fb265bf545..072644f058 100644 --- a/addons/common/functions/fnc_getTurretDirection.sqf +++ b/addons/common/functions/fnc_getTurretDirection.sqf @@ -1,37 +1,37 @@ -/* - * Author: jaynus - * - * Get the absolute turret direction for FOV/PIP turret. - * - * Argument: - * 0: Vehicle (Object) - * 1: Turret Position - * - * Return value: - * [position, direction] - */ -#include "script_component.hpp" - -EXPLODE_2_PVT(_this,_vehicle,_position); -private ["_turrets", "_turret", "_config", "_turret", "_povPos", "_povDir", "_gunBeginPos", "_gunEndPos", "_pov"]; - -_turret = [_vehicle, _position] call CBA_fnc_getTurret; -_pov = getText (_turret >> "memoryPointGunnerOptics"); -_gunBeg = getText (_turret >> "gunBeg"); -_gunEnd = getText (_turret >> "gunEnd"); -TRACE_3("", _pov, _gunBeg, _gunEnd); - -// Pull the PIP pov or barrel direction, depending on how the model is set up -_povPos = ATLtoASL ( _vehicle modelToWorldVisual (_vehicle selectionPosition _pov ) ); -_povDir = [0,0,0]; - -if(_pov == "pip0_pos") then { - _pipDir = ATLtoASL ( _vehicle modelToWorldVisual (_vehicle selectionPosition "pip0_dir" ) ); - _povDir = _pipDir vectorDiff _povPos; -} else { - _gunBeginPos = ATLtoASL ( _vehicle modelToWorldVisual (_vehicle selectionPosition _gunBeg ) ); - _gunEndPos = ATLtoASL ( _vehicle modelToWorldVisual (_vehicle selectionPosition _gunEnd ) ); - _povDir = _gunBeginPos vectorDiff _gunEndPos; -}; - +/* + * Author: jaynus + * + * Get the absolute turret direction for FOV/PIP turret. + * + * Argument: + * 0: Vehicle (Object) + * 1: Turret Position + * + * Return value: + * [position, direction] + */ +#include "script_component.hpp" + +EXPLODE_2_PVT(_this,_vehicle,_position); +private ["_turrets", "_turret", "_config", "_turret", "_povPos", "_povDir", "_gunBeginPos", "_gunEndPos", "_pov"]; + +_turret = [_vehicle, _position] call CBA_fnc_getTurret; +_pov = getText (_turret >> "memoryPointGunnerOptics"); +_gunBeg = getText (_turret >> "gunBeg"); +_gunEnd = getText (_turret >> "gunEnd"); +TRACE_3("", _pov, _gunBeg, _gunEnd); + +// Pull the PIP pov or barrel direction, depending on how the model is set up +_povPos = ATLtoASL ( _vehicle modelToWorldVisual (_vehicle selectionPosition _pov ) ); +_povDir = [0,0,0]; + +if(_pov == "pip0_pos") then { + _pipDir = ATLtoASL ( _vehicle modelToWorldVisual (_vehicle selectionPosition "pip0_dir" ) ); + _povDir = _pipDir vectorDiff _povPos; +} else { + _gunBeginPos = ATLtoASL ( _vehicle modelToWorldVisual (_vehicle selectionPosition _gunBeg ) ); + _gunEndPos = ATLtoASL ( _vehicle modelToWorldVisual (_vehicle selectionPosition _gunEnd ) ); + _povDir = _gunBeginPos vectorDiff _gunEndPos; +}; + [_povPos, _povDir] \ No newline at end of file diff --git a/addons/common/functions/fnc_globalEvent.sqf b/addons/common/functions/fnc_globalEvent.sqf index dcf40261cf..7816f1f1c5 100644 --- a/addons/common/functions/fnc_globalEvent.sqf +++ b/addons/common/functions/fnc_globalEvent.sqf @@ -1,22 +1,22 @@ -/* - * Author: Nou - * - * Execute a global event on all clients, including self. - * - * Argument: - * 0: Event name (string) - * 1: Event args (any) - * - * Return value: - * Nothing - */ -#include "script_component.hpp" -private ["_eventName", "_eventArgs"]; - -_eventName = _this select 0; -_eventArgs = _this select 1; - - -ACEg = [_eventName, _eventArgs]; -publicVariable "ACEg"; +/* + * Author: Nou + * + * Execute a global event on all clients, including self. + * + * Argument: + * 0: Event name (string) + * 1: Event args (any) + * + * Return value: + * Nothing + */ +#include "script_component.hpp" +private ["_eventName", "_eventArgs"]; + +_eventName = _this select 0; +_eventArgs = _this select 1; + + +ACEg = [_eventName, _eventArgs]; +publicVariable "ACEg"; ["ACEg", ACEg] call FUNC(_handleNetEvent); \ No newline at end of file diff --git a/addons/common/functions/fnc_localEvent.sqf b/addons/common/functions/fnc_localEvent.sqf index 0b8c218eca..3ee9cb0a04 100644 --- a/addons/common/functions/fnc_localEvent.sqf +++ b/addons/common/functions/fnc_localEvent.sqf @@ -1,34 +1,34 @@ -/* - * Author: Nou - * - * Execute a local event on this client only. - * - * Argument: - * 0: Event name (string) - * 1: Event args (any) - * - * Return value: - * Nothing - */ -#include "script_component.hpp" - -PARAMS_2(_eventName,_eventArgs); - -_eventNames = GVAR(events) select 0; -_eventIndex = _eventNames find _eventName; -if(_eventIndex != -1) then { - _events = (GVAR(events) select 1) select _eventIndex; - #ifdef DEBUG_EVENTS - diag_log text format[ARR_2("* Local Event: %1",_eventName)]; - diag_log text format[ARR_2(" args=%1",_eventArgs)]; - #endif - - { - if(!isNil "_x") then { - _eventArgs call CALLSTACK_NAMED(_x, format[ARR_3("Local Event %1 ID: %2",_eventName,_forEachIndex)]); - #ifdef DEBUG_EVENTS_CALLSTACK - diag_log text format[ARR_2(" ID: %1",_forEachIndex)]; - #endif - }; - } forEach _events; +/* + * Author: Nou + * + * Execute a local event on this client only. + * + * Argument: + * 0: Event name (string) + * 1: Event args (any) + * + * Return value: + * Nothing + */ +#include "script_component.hpp" + +PARAMS_2(_eventName,_eventArgs); + +_eventNames = GVAR(events) select 0; +_eventIndex = _eventNames find _eventName; +if(_eventIndex != -1) then { + _events = (GVAR(events) select 1) select _eventIndex; + #ifdef DEBUG_EVENTS + diag_log text format[ARR_2("* Local Event: %1",_eventName)]; + diag_log text format[ARR_2(" args=%1",_eventArgs)]; + #endif + + { + if(!isNil "_x") then { + _eventArgs call CALLSTACK_NAMED(_x, format[ARR_3("Local Event %1 ID: %2",_eventName,_forEachIndex)]); + #ifdef DEBUG_EVENTS_CALLSTACK + diag_log text format[ARR_2(" ID: %1",_forEachIndex)]; + #endif + }; + } forEach _events; }; \ No newline at end of file diff --git a/addons/common/functions/fnc_removeAllEventHandlers.sqf b/addons/common/functions/fnc_removeAllEventHandlers.sqf index 170d4f8cbb..fead934a57 100644 --- a/addons/common/functions/fnc_removeAllEventHandlers.sqf +++ b/addons/common/functions/fnc_removeAllEventHandlers.sqf @@ -1,21 +1,21 @@ -/* - * Author: Nou - * - * Remove all events of a certain event type. - * - * Argument: - * 0: Event name (string) - * - * Return value: - * Nothing - */ -#include "script_component.hpp" -private ["_eventName", "_eventNames", "_eventFunctions", "_eventIndex"]; -_eventName = _this select 0; - -_eventNames = GVAR(events) select 0; -_eventFunctions = []; -_eventIndex = _eventNames find _eventName; -if(_eventIndex != -1) then { - (GVAR(events) select 1) set[_eventIndex, []]; +/* + * Author: Nou + * + * Remove all events of a certain event type. + * + * Argument: + * 0: Event name (string) + * + * Return value: + * Nothing + */ +#include "script_component.hpp" +private ["_eventName", "_eventNames", "_eventFunctions", "_eventIndex"]; +_eventName = _this select 0; + +_eventNames = GVAR(events) select 0; +_eventFunctions = []; +_eventIndex = _eventNames find _eventName; +if(_eventIndex != -1) then { + (GVAR(events) select 1) set[_eventIndex, []]; }; \ No newline at end of file diff --git a/addons/common/functions/fnc_removeEventHandler.sqf b/addons/common/functions/fnc_removeEventHandler.sqf index d87c72933d..20bc6923c8 100644 --- a/addons/common/functions/fnc_removeEventHandler.sqf +++ b/addons/common/functions/fnc_removeEventHandler.sqf @@ -1,24 +1,24 @@ -/* - * Author: Nou - * - * Remove an event handler. - * - * Argument: - * 0: Event name (string) - * 1: Event code (number) - * - * Return value: - * Nothing - */ -#include "script_component.hpp" -private ["_eventName", "_eventNames", "_eventFunctions", "_eventIndex", "_eventCodeIndex"]; -_eventName = _this select 0; -_eventCodeIndex = _this select 1; - -_eventNames = GVAR(events) select 0; -_eventFunctions = []; -_eventIndex = _eventNames find _eventName; -if(_eventIndex != -1) then { - _eventFunctions = (GVAR(events) select 1) select _eventIndex; - _eventFunctions set[_eventCodeIndex, nil]; +/* + * Author: Nou + * + * Remove an event handler. + * + * Argument: + * 0: Event name (string) + * 1: Event code (number) + * + * Return value: + * Nothing + */ +#include "script_component.hpp" +private ["_eventName", "_eventNames", "_eventFunctions", "_eventIndex", "_eventCodeIndex"]; +_eventName = _this select 0; +_eventCodeIndex = _this select 1; + +_eventNames = GVAR(events) select 0; +_eventFunctions = []; +_eventIndex = _eventNames find _eventName; +if(_eventIndex != -1) then { + _eventFunctions = (GVAR(events) select 1) select _eventIndex; + _eventFunctions set[_eventCodeIndex, nil]; }; \ No newline at end of file diff --git a/addons/common/functions/fnc_serverEvent.sqf b/addons/common/functions/fnc_serverEvent.sqf index b792323867..7ee1f6d0b8 100644 --- a/addons/common/functions/fnc_serverEvent.sqf +++ b/addons/common/functions/fnc_serverEvent.sqf @@ -1,29 +1,29 @@ -/* - * Author: Nou - * - * Execute a event only on the server. - * - * Argument: - * 0: Event name (string) - * 1: Event args (any) - * - * Return value: - * Nothing - */ -#include "script_component.hpp" -private ["_eventName", "_eventArgs"]; - -_eventName = _this select 0; -_eventArgs = _this select 1; - - #ifdef DEBUG_EVENTS - diag_log text format[ARR_2("* Server Event: %1",_eventName)]; - diag_log text format[ARR_2(" args=%1",_eventArgs)]; - #endif - -ACEg = [_eventName, _eventArgs]; -if(!isServer) then { - publicVariableServer "ACEg"; -} else { - ["ACEg", ACEg] call FUNC(_handleNetEvent); -}; +/* + * Author: Nou + * + * Execute a event only on the server. + * + * Argument: + * 0: Event name (string) + * 1: Event args (any) + * + * Return value: + * Nothing + */ +#include "script_component.hpp" +private ["_eventName", "_eventArgs"]; + +_eventName = _this select 0; +_eventArgs = _this select 1; + + #ifdef DEBUG_EVENTS + diag_log text format[ARR_2("* Server Event: %1",_eventName)]; + diag_log text format[ARR_2(" args=%1",_eventArgs)]; + #endif + +ACEg = [_eventName, _eventArgs]; +if(!isServer) then { + publicVariableServer "ACEg"; +} else { + ["ACEg", ACEg] call FUNC(_handleNetEvent); +}; diff --git a/addons/common/functions/fnc_targetEvent.sqf b/addons/common/functions/fnc_targetEvent.sqf index 7299eeb057..0c6da183b2 100644 --- a/addons/common/functions/fnc_targetEvent.sqf +++ b/addons/common/functions/fnc_targetEvent.sqf @@ -1,34 +1,34 @@ -/* - * Author: Nou - * - * Execute a event only on specific clients. - * - * Argument: - * 0: Event name (string) - * 1: Event targets (object or array of objects) - * 2: Event args (any) - * - * Note: If local executor is in list of targets, event will execute with - * network delay, and not immediatly. - * - * Return value: - * Nothing - */ -#include "script_component.hpp" -private ["_eventName", "_eventArgs", "_eventTargets"]; - -_eventName = _this select 0; -_eventTargets = _this select 1; -_eventArgs = _this select 2; - -#ifdef DEBUG_EVENTS - diag_log text format[ARR_3("* Target Event: %1 - %2",_eventName,_eventTargets)]; - diag_log text format[ARR_2(" args=%1",_eventArgs)]; -#endif - -ACEc = [_eventName, _eventTargets, _eventArgs]; -if(!isServer) then { - publicVariableServer "ACEc"; -} else { - ["ACEc", ACEc] call FUNC(_handleNetEvent); +/* + * Author: Nou + * + * Execute a event only on specific clients. + * + * Argument: + * 0: Event name (string) + * 1: Event targets (object or array of objects) + * 2: Event args (any) + * + * Note: If local executor is in list of targets, event will execute with + * network delay, and not immediatly. + * + * Return value: + * Nothing + */ +#include "script_component.hpp" +private ["_eventName", "_eventArgs", "_eventTargets"]; + +_eventName = _this select 0; +_eventTargets = _this select 1; +_eventArgs = _this select 2; + +#ifdef DEBUG_EVENTS + diag_log text format[ARR_3("* Target Event: %1 - %2",_eventName,_eventTargets)]; + diag_log text format[ARR_2(" args=%1",_eventArgs)]; +#endif + +ACEc = [_eventName, _eventTargets, _eventArgs]; +if(!isServer) then { + publicVariableServer "ACEc"; +} else { + ["ACEc", ACEc] call FUNC(_handleNetEvent); }; \ No newline at end of file diff --git a/addons/common/functions/script_component.hpp b/addons/common/functions/script_component.hpp index 95b7e86461..10f5e1565f 100644 --- a/addons/common/functions/script_component.hpp +++ b/addons/common/functions/script_component.hpp @@ -1,13 +1,13 @@ -#include "\z\ace\addons\common\script_component.hpp" - -#define VALIDHASH(hash) (IS_ARRAY(hash) && {(count hash) >= 2} && {IS_ARRAY(hash select 0)} && {IS_ARRAY(hash select 1)}) -#define ERROR(msg) throw msg + format[" @ %1:%2", _callFrom, _lineNo] -#define HANDLECATCH diag_log text _exception; assert(exception=="") - -#define ERRORDATA(c) private ["_callFrom", "_lineNo"];\ - _callFrom = "";\ - _lineNo = -1;\ - if((count _this) > c) then {\ - _callFrom = _this select c;\ - _lineNo = _this select c+1;\ +#include "\z\ace\addons\common\script_component.hpp" + +#define VALIDHASH(hash) (IS_ARRAY(hash) && {(count hash) >= 2} && {IS_ARRAY(hash select 0)} && {IS_ARRAY(hash select 1)}) +#define ERROR(msg) throw msg + format[" @ %1:%2", _callFrom, _lineNo] +#define HANDLECATCH diag_log text _exception; assert(exception=="") + +#define ERRORDATA(c) private ["_callFrom", "_lineNo"];\ + _callFrom = "";\ + _lineNo = -1;\ + if((count _this) > c) then {\ + _callFrom = _this select c;\ + _lineNo = _this select c+1;\ }; \ No newline at end of file diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index a5f5368cd0..d1e81e01a6 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -300,64 +300,78 @@ Aceptar Peticiones Accept Requests Anfrage annehmen + Подтвердить запросы Ignoruj prośby Rechazar Peticiones Decline Requests Anfrage ablehnen + Отклонить запросы Akceptuj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności. Acepta Peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones. Accept Requests send by other players. These can be requests to use / share equipment, perform certain actions. Anfragen anderer Spieler annehmen. Diese Anfragen können sich auf das Benutzen / Teilen von Equipment beziehen oder das Ausführen bestimmter Aktionen. + Подтвердить запросы, посланные другими игроками. Это могут быть просьбы о передаче снаряжения или выполнении определённых действий. Ignoruj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności. Rechazar Peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones. Decline Requests send by other players. These can be requests to use / share equipment, perform certain actions. Anfragen anderer Spieler ablehnen. Diese Anfragen können sich auf das Benutzen / Teilen von Equipment beziehen oder das Ausführen bestimmter Aktionen. + Отклонить запросы, посланные другими игроками. Это могут быть просьбы о передаче снаряжения или выполнении определённых действий. Feedback icons Feedback-Icons + Иконки состояний Select the position of or disable the feedback icons on your screen. These icons will show to provide extra feedback on your character status and actions performed. Wähle die Position der Feedback-Icons aus oder deaktiviere Sie. Die Feedback-Icons zeigen den Status deiner Einheit an, oder die ausgeführte Aktion. + Выберите положение или или отключите отображение иконок состояний на Вашем экране. Эти иконки предоставят дополнительную информацию о состоянии персонажа и выполняемых действиях. Progress bar location Position des Fortschrittsanzeige + Положение прогресс-бара Set the desired location of the progress bar on your screen. Wähle die Position der Fortschrittsanzeige. + Установите желаемое положение строки состояния на экране. Hint Background color Hinweis Hintergrundfarbe + Цвет фона всплывающих подсказок The color of the background from the ACE hints. Wähle die Hintergrundfarbe für ACE-Hinweise. + Цвет фона всплывающий подсказок АСЕ. Hint text font color Hinweis Textfarbe + Цвет шрифта всплывающих подсказок The color of the text font from the ACE hints. This color is the default color for all text displayed through the ACE Hint system, if the hint text has no other color specified. Wähle die Textfarbe für ACE-Hinweise. + Цвет шрифта текста всплывающих подсказок АСЕ. Этот цвет является стандартным для всего текста, транслирующегося через систему подсказок АСЕ, если не установлено другого цвета для текста подсказок. Banana Banane + Банан A banana is an edible fruit, botanically a berry, produced by several kinds of large herbaceous flowering plants in the genus Musa. Die Bananen (Musa) sind eine Pflanzengattung in der Familie der Bananengewächse (Musaceae) innerhalb der Einkeimblättrigen Pflanzen (Monokotyledonen). + Банан - это съедобный фрукт, ягода с ботанической точки зрения, произрастающий на нескольких видах травянистых растениях рода Банан (Musa). \ No newline at end of file diff --git a/addons/dragging/stringtable.xml b/addons/dragging/stringtable.xml index 9193d2712e..3199dd7c20 100644 --- a/addons/dragging/stringtable.xml +++ b/addons/dragging/stringtable.xml @@ -1,5 +1,5 @@ - - + + @@ -40,6 +40,7 @@ Não é possível carregar o item devido a seu peso Non è possibile trascinare l'oggetto a causa del suo peso Túl nehéz ahhoz, hogy elhúzd --> + Слишком тяжело Carry @@ -54,4 +55,4 @@ Нести - + \ No newline at end of file diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml index 1d010a0a7e..834101f9c7 100644 --- a/addons/explosives/stringtable.xml +++ b/addons/explosives/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -48,7 +48,7 @@ Codice dell'esplosivo : %1 Robbanóanyag kódja: %1 Código do explosivo: %1 - Взрывная код: %1 + Код подрыва: %1 Place @@ -60,7 +60,7 @@ Piazza Elhelyezés Colocar - Положить + Установить Cancel @@ -132,7 +132,7 @@ Usato per l'attivazione a distanza degli esplosivi Robbanóanyagok távoli robbantásához Usado para acionar explosivos remotamente - Используется для удаленного запуска взрывчатку + Используется для удаленной детонации СВУ M57 Firing Device @@ -156,7 +156,7 @@ Usato per l'attivazione a distanza degli esplosivi Robbanóanyagok távoli robbantásához Usado para acionar explosivos remotamente - Используется для удаленного запуска взрывчатку + Используется для удаленной детонации зарядов M26 Firing Device @@ -192,7 +192,7 @@ Kit E.O.D. Hatástalanító felszerelés Kit de desarme - Разминирование комплект + Комплект разминирования Allows defusing of explosives @@ -204,7 +204,7 @@ Consente la disattivazione degli ordigni esplosivi Robbanóanyagok hatástalanításához Permite o desarme de explosivos - Allows defusing of explosives + Позволяет обезвреживать ВУ Add to Speed Dial @@ -228,7 +228,7 @@ Libera Törlés Limpar - Pассеиваться + Очистить Dial @@ -252,7 +252,7 @@ Sopra Fel Cima - Поднять + Вызов Down @@ -264,7 +264,7 @@ Sotto Le Baixo - Опустить + Сброс Cancel @@ -288,7 +288,7 @@ Menù di detonazione Robbantás menü Menu de detonação - Меню Подрыв + Меню подрыва Place Menu @@ -300,7 +300,7 @@ Menù di collocamento Lerakás menü Menu de posicionamento - Меню Установить + Меню детонации Defuse @@ -336,7 +336,7 @@ Cronometro Időzített Timer - Временной + Таймер Time: %1m %2s @@ -348,7 +348,7 @@ Tempo : %1m %2s Idő: %1m %2s Tempo: %1m %2s - Tемп: %1m %2c + Время: %1m %2c Set Time @@ -360,7 +360,7 @@ Modifica il conto alla rovescia Idő állítása Configurar Tempo - Xронометр + Установить время Select a Trigger @@ -372,7 +372,7 @@ Seleziona un Attivatore Detonátor kiválasztása Selecionar um Gatilho - Выберите + Выберите детонатор Select @@ -384,7 +384,7 @@ Seleziona Kiválasztás Selecionar - Выбрать защелка + Выбрать Pressure Plate @@ -408,7 +408,7 @@ Filo a Inciampo Botlódrót Linha de tração - Натяжной + Растяжка IR Sensor @@ -420,7 +420,7 @@ Sensore IR IR szenzor Sensor IV - ИК + ИК сенсор No triggers available for %1 @@ -432,7 +432,7 @@ Nessun attivatore disponibile per %1 Nincs detonátor a %1 Nenhum gatilho disponível para %1 - Нет защелка доступны для %1 + Нет доступных взрывателей для %1 IR Sensor (Side Attack) @@ -444,7 +444,7 @@ Sensore IR (Attacco laterale) IR Sensor (Side Attack) Sensor infravermelho (ataque lateral) - ИК (боковая атака) + ИК (детонация вбок) Magnetic Influence Sensor (Bottom Attack) @@ -456,7 +456,7 @@ Sensore Magnetico di Prossimità (Attacco inferiore) Mágneses (Bottom Attack) Influência magnética (ataque inferior) - Магнитный (дно атака) + Магнитный (детонация вверх) No explosives on trigger. @@ -468,7 +468,7 @@ Nincs robbanóanyag a detonátorhoz. Brak ładunków na zapalnik. Nenhum explosivo no gatilho. - Нет взрывчатки на курок. + Нет доступных ВУ для взрывателя. Dead Man's Switch @@ -478,7 +478,7 @@ Czuwak Detonador de hombre muerto Dead Man's Switch - Кнопка мертвеца + Ловушка мертвеца Used to remotely trigger explosives when released. diff --git a/addons/fcs/functions/fnc_onForceUpdate.sqf b/addons/fcs/functions/fnc_onForceUpdate.sqf index 6f477fd3f6..d11652fc8a 100644 --- a/addons/fcs/functions/fnc_onForceUpdate.sqf +++ b/addons/fcs/functions/fnc_onForceUpdate.sqf @@ -1,7 +1,7 @@ -#include "script_component.hpp" - -if !([ACE_player, vehicle ACE_player, []] call EFUNC(common,canInteractWith)) exitWith {false}; -if !((!GVAR(enabled) && FUNC(canUseFCS)) || FUNC(canUseRangefinder)) exitWith {false}; - -[vehicle ACE_player, [ACE_player] call EFUNC(common,getTurretIndex), -1, false] call FUNC(keyDown); +#include "script_component.hpp" + +if !([ACE_player, vehicle ACE_player, []] call EFUNC(common,canInteractWith)) exitWith {false}; +if !((!GVAR(enabled) && FUNC(canUseFCS)) || FUNC(canUseRangefinder)) exitWith {false}; + +[vehicle ACE_player, [ACE_player] call EFUNC(common,getTurretIndex), -1, false] call FUNC(keyDown); [vehicle ACE_player, [ACE_player] call EFUNC(common,getTurretIndex), -1, false, false] call FUNC(keyUp); \ No newline at end of file diff --git a/addons/fcs/stringtable.xml b/addons/fcs/stringtable.xml index 154d874f73..0911bbdb57 100644 --- a/addons/fcs/stringtable.xml +++ b/addons/fcs/stringtable.xml @@ -1,81 +1,81 @@  - + - - - Lase Target / Measure Distance - Ziel anlasern / Entfernung Messen - Télémétrer la cible - Naświetl cel / Zmierz odległość - Označit cíl / Změřit vzdálenost - Iluminar objetivo / Medir distancia - - Подсветить цель / Измерить расстояние - - - Zeroed To - Haltepunkt - Fijado a - Wyzerowany na - Nastaveno na - Zéroté à - Зероинг - Nullázás - Fixado em - Azzeramento a - - - Adjust FCS Range (Up) - Entfernung des FLS erhöhen - Zwiększ zasięg FCS - Ajustar distancia del FCS (arriba) - Nastavit FCS Náměr (nahoru) - Augmenter la distance du SCT - FCS tartomány állítása (Fel) - Ajustar distância do FCS (Acima) - Aumentare la distanza dell'FCS - Диапазон СУО (Выше) - - - Adjust FCS Range (Down) - Entfernung des FLS verringern - Zmniejsz zasięg FCS - Ajustar distancia del FCS (abajo) - Nastavit FCS Náměr (dolů) - Réduire la distance du SCT - FCS tartomány állítása (Le) - Ajustar distância do FCS (Abaixo) - Ridurre la distanza dell'FCS - Диапазон СУО (Ниже) - - - Reset FCS - FLS zurücksetzen - Reiniciar FCS - Réinitialiser le SCT - Resetuj FCS - Resetovat FCS - FCS visszaállítása - Reiniciar FCS - Azzeramento dell'FCS - Обнулить СУО - - - FCS has been reset. - FLS wurde zurückgesetzt. - FCS reiniciado - SCT réinitialisé. - FCS został zresetowany. - FCS byl resetován. - Az FCS visszaállítva - FCS reiniciado. - L'FCS è stato azzerato - СУО обнулен - - - + Подсветить цель / Замерить расстояние + + + Zeroed To + Haltepunkt + Fijado a + Wyzerowany na + Nastaveno na + Zéroté à + Выставлено на + Nullázás + Fixado em + Azzeramento a + + + Adjust FCS Range (Up) + Entfernung des FLS erhöhen + Zwiększ zasięg FCS + Ajustar distancia del FCS (arriba) + Nastavit FCS Náměr (nahoru) + Augmenter la distance du SCT + FCS tartomány állítása (Fel) + Ajustar distância do FCS (Acima) + Aumentare la distanza dell'FCS + Диапазон СУО (Выше) + + + Adjust FCS Range (Down) + Entfernung des FLS verringern + Zmniejsz zasięg FCS + Ajustar distancia del FCS (abajo) + Nastavit FCS Náměr (dolů) + Réduire la distance du SCT + FCS tartomány állítása (Le) + Ajustar distância do FCS (Abaixo) + Ridurre la distanza dell'FCS + Диапазон СУО (Ниже) + + + Reset FCS + FLS zurücksetzen + Reiniciar FCS + Réinitialiser le SCT + Resetuj FCS + Resetovat FCS + FCS visszaállítása + Reiniciar FCS + Azzeramento dell'FCS + Обнулить СУО + + + FCS has been reset. + FLS wurde zurückgesetzt. + FCS reiniciado + SCT réinitialisé. + FCS został zresetowany. + FCS byl resetován. + Az FCS visszaállítva + FCS reiniciado. + L'FCS è stato azzerato + СУО обнулен. + + + \ No newline at end of file diff --git a/addons/frag/CfgAmmo.hpp b/addons/frag/CfgAmmo.hpp index 8ad76e6ae8..bec683d603 100644 --- a/addons/frag/CfgAmmo.hpp +++ b/addons/frag/CfgAmmo.hpp @@ -1,352 +1,352 @@ -#define BASE_DRAG -0.01 -#define HD_MULT 5 -#define BASE_DRAG_HD (BASE_DRAG*HD_MULT) - -class CfgAmmo { - //class ace_arty_105mm_m1_m782_time; - //class ace_arty_105mm_m1_m782_prox: ace_arty_105mm_m1_m782_time {}; - //class ace_arty_105mm_m1_m782_delay: ace_arty_105mm_m1_m782_prox { - // ACE_FRAG_SKIP = 1; - //}; - class Bo_GBU12_LGB; - class Nou_GBU12 : Bo_GBU12_LGB { - ACE_FRAG_CLASSES[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"}; - ACE_FRAG_METAL = 140000; - ACE_FRAG_CHARGE = 87000; - ACE_FRAG_GURNEY_C = 2320; - ACE_FRAG_GURNEY_K = 1/2; - sideAirFriction = 0.04; - airFriction = 0.04; - laserLock = 0; - }; - - class GrenadeBase; - class Grenade; - class GrenadeHand: Grenade { - ACE_FRAG_SKIP = 0; - ACE_FRAG_FORCE = 1; - // This is a good high-drag frag type for grenades. - ACE_FRAG_CLASSES[] = {"ACE_frag_tiny_HD"}; - /* - These values are based on the M67 Grenade, should be tweaked for - individual grenades. - */ - ACE_FRAG_METAL = 210; // metal in grams - ACE_FRAG_CHARGE = 185; // explosive in grams - ACE_FRAG_GURNEY_C = 2843; // Gurney velocity constant for explosive type. See: http://en.wikipedia.org/wiki/Gurney_equations - ACE_FRAG_GURNEY_K = 3/5; // Gurney shape factor, in this case a sphere. See: http://en.wikipedia.org/wiki/Gurney_equations - }; - class GrenadeHand_stone: GrenadeHand { - ACE_FRAG_SKIP = 1; - }; - class SmokeShell: GrenadeHand { - ACE_FRAG_SKIP = 1; - }; - - class RocketBase; - //class R_Hydra_HE: RocketBase { - // ACE_FRAG_SKIP = 1; - //}; - - //class R_57mm_HE: RocketBase { - // ACE_FRAG_SKIP = 1; - //}; - - class R_80mm_HE: RocketBase { - ACE_FRAG_SKIP = 1; - }; - - //class R_S8T_AT: RocketBase { - // ACE_FRAG_SKIP = 1; - //}; - - class BombCore; - class Bo_Mk82: BombCore { - ACE_FRAG_CLASSES[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"}; - ACE_FRAG_METAL = 140000; - ACE_FRAG_CHARGE = 87000; - ACE_FRAG_GURNEY_C = 2320; - ACE_FRAG_GURNEY_K = 1/2; - }; - - - class G_40mm_HE: GrenadeBase { - ACE_FRAG_SKIP = 0; - ACE_FRAG_FORCE = 1; - }; - - class ACE_G_40mm_HEDP: G_40mm_HE { - }; - class ACE_G_40mm_HE: ACE_G_40mm_HEDP { - }; - class ACE_G_40mm_Practice: ACE_G_40mm_HE { - ACE_FRAG_SKIP = 1; - }; - class ACE_G40mm_HE_VOG25P: G_40mm_HE { - ACE_FRAG_SKIP = 0; - ACE_FRAG_FORCE = 1; - }; - - //class R_SMAW_HEDP; - //class R_MEEWS_HEDP : R_SMAW_HEDP { - // ACE_FRAG_FORCE = 1; - // ACE_FRAG_MULTIPLIER = 1.2; - //}; - - //class MissileBase; - //class M_Hellfire_AT: MissileBase { - // ACE_FRAG_FORCE = 1; - // ACE_FRAG_MULTIPLIER = 1.75; - //}; - - /* - class B_762x51_Ball; - class ACE_frag_base: B_762x51_Ball { ////TODO: B_762x45_Ball no longer exists, is this a valid replacement? - model = "\A3\Weapons_f\ammo\shell"; - timeToLive = 12; - typicalSpeed = 800; - // Fix sounds - effectFly = "AmmoClassic"; - soundDefault1[] = {"A3\sounds_f\weapons\hits\concrete_1.wav",0.158114,1,30}; - soundDefault2[] = {"A3\sounds_f\weapons\hits\concrete_2.wav",0.158114,1,30}; - soundDefault3[] = {"A3\sounds_f\weapons\hits\concrete_3.wav",0.158114,1,30}; - soundDefault4[] = {"A3\sounds_f\weapons\hits\concrete_4.wav",0.158114,1,30}; - soundDefault5[] = {"A3\sounds_f\weapons\hits\concrete_5.wav",0.158114,1,30}; - soundDefault6[] = {"A3\sounds_f\weapons\hits\concrete_6.wav",0.158114,1,30}; - soundDefault7[] = {"A3\sounds_f\weapons\hits\concrete_7.wav",0.158114,1,30}; - soundDefault8[] = {"A3\sounds_f\weapons\hits\concrete_8.wav",0.158114,1,30}; - soundGroundSoft1[] = {"A3\sounds_f\weapons\hits\soft_ground_1.wav",0.02811705,1,30}; - soundGroundSoft2[] = {"A3\sounds_f\weapons\hits\soft_ground_2.wav",0.02811705,1,30}; - soundGroundSoft3[] = {"A3\sounds_f\weapons\hits\soft_ground_3.wav",0.02811705,1,30}; - soundGroundSoft4[] = {"A3\sounds_f\weapons\hits\soft_ground_4.wav",0.02811705,1,30}; - soundGroundSoft5[] = {"A3\sounds_f\weapons\hits\soft_ground_5.wav",0.02811705,1,30}; - soundGroundSoft6[] = {"A3\sounds_f\weapons\hits\soft_ground_6.wav",0.02811705,1,30}; - soundGroundSoft7[] = {"A3\sounds_f\weapons\hits\soft_ground_7.wav",0.02811705,1,30}; - soundGroundSoft8[] = {"A3\sounds_f\weapons\hits\soft_ground_8.wav",0.02811705,1,30}; - soundGroundHard1[] = {"A3\sounds_f\weapons\hits\hard_ground_1.wav",0.62946,1,40}; - soundGroundHard2[] = {"A3\sounds_f\weapons\hits\hard_ground_2.wav",0.62946,1,40}; - soundGroundHard3[] = {"A3\sounds_f\weapons\hits\hard_ground_3.wav",0.62946,1,40}; - soundGroundHard4[] = {"A3\sounds_f\weapons\hits\hard_ground_4.wav",0.62946,1,40}; - soundGroundHard5[] = {"A3\sounds_f\weapons\hits\hard_ground_5.wav",0.62946,1,40}; - soundGroundHard6[] = {"A3\sounds_f\weapons\hits\hard_ground_6.wav",0.62946,1,40}; - soundGroundHard7[] = {"A3\sounds_f\weapons\hits\hard_ground_7.wav",0.62946,1,40}; - soundGroundHard8[] = {"A3\sounds_f\weapons\hits\hard_ground_8.wav",0.62946,1,40}; - soundMetal1[] = {"A3\sounds_f\weapons\hits\metal_1.wav",0.158114,1,45}; - soundMetal2[] = {"A3\sounds_f\weapons\hits\metal_2.wav",0.158114,1,45}; - soundMetal3[] = {"A3\sounds_f\weapons\hits\metal_3.wav",0.158114,1,45}; - soundMetal4[] = {"A3\sounds_f\weapons\hits\metal_4.wav",0.158114,1,45}; - soundMetal5[] = {"A3\sounds_f\weapons\hits\metal_5.wav",0.158114,1,45}; - soundMetal6[] = {"A3\sounds_f\weapons\hits\metal_6.wav",0.158114,1,45}; - soundMetal7[] = {"A3\sounds_f\weapons\hits\metal_7.wav",0.158114,1,45}; - soundMetal8[] = {"A3\sounds_f\weapons\hits\metal_8.wav",0.158114,1,45}; - soundGlass1[] = {"A3\sounds_f\weapons\hits\glass_1.wav",0.177828,1,25}; - soundGlass2[] = {"A3\sounds_f\weapons\hits\glass_2.wav",0.177828,1,25}; - soundGlass3[] = {"A3\sounds_f\weapons\hits\glass_3.wav",0.177828,1,25}; - soundGlass4[] = {"A3\sounds_f\weapons\hits\glass_4.wav",0.177828,1,25}; - soundGlass5[] = {"A3\sounds_f\weapons\hits\glass_5.wav",0.177828,1,25}; - soundGlass6[] = {"A3\sounds_f\weapons\hits\glass_6.wav",0.177828,1,25}; - soundGlass7[] = {"A3\sounds_f\weapons\hits\glass_7.wav",0.177828,1,25}; - soundGlass8[] = {"A3\sounds_f\weapons\hits\glass_8.wav",0.177828,1,25}; - soundGlassArmored1[] = {"A3\sounds_f\weapons\hits\glass_arm_1.wav",0.177828,1,30}; - soundGlassArmored2[] = {"A3\sounds_f\weapons\hits\glass_arm_2.wav",0.177828,1,30}; - soundGlassArmored3[] = {"A3\sounds_f\weapons\hits\glass_arm_3.wav",0.177828,1,30}; - soundGlassArmored4[] = {"A3\sounds_f\weapons\hits\glass_arm_4.wav",0.177828,1,30}; - soundGlassArmored5[] = {"A3\sounds_f\weapons\hits\glass_arm_5.wav",0.177828,1,30}; - soundGlassArmored6[] = {"A3\sounds_f\weapons\hits\glass_arm_6.wav",0.177828,1,30}; - soundGlassArmored7[] = {"A3\sounds_f\weapons\hits\glass_arm_7.wav",0.177828,1,30}; - soundGlassArmored8[] = {"A3\sounds_f\weapons\hits\glass_arm_8.wav",0.177828,1,30}; - soundVehiclePlate1[] = {"A3\sounds_f\weapons\hits\metal_plate_1.wav",0.281170,1,40}; - soundVehiclePlate2[] = {"A3\sounds_f\weapons\hits\metal_plate_2.wav",0.281170,1,40}; - soundVehiclePlate3[] = {"A3\sounds_f\weapons\hits\metal_plate_3.wav",0.281170,1,40}; - soundVehiclePlate4[] = {"A3\sounds_f\weapons\hits\metal_plate_4.wav",0.281170,1,40}; - soundVehiclePlate5[] = {"A3\sounds_f\weapons\hits\metal_plate_5.wav",0.281170,1,40}; - soundVehiclePlate6[] = {"A3\sounds_f\weapons\hits\metal_plate_6.wav",0.281170,1,40}; - soundVehiclePlate7[] = {"A3\sounds_f\weapons\hits\metal_plate_7.wav",0.281170,1,40}; - soundVehiclePlate8[] = {"A3\sounds_f\weapons\hits\metal_plate_8.wav",0.281170,1,40}; - soundWood1[] = {"A3\sounds_f\weapons\hits\wood_1.wav",0.158114,1,30}; - soundWood2[] = {"A3\sounds_f\weapons\hits\wood_2.wav",0.158114,1,30}; - soundWood3[] = {"A3\sounds_f\weapons\hits\wood_3.wav",0.158114,1,30}; - soundWood4[] = {"A3\sounds_f\weapons\hits\wood_4.wav",0.158114,1,30}; - soundWood5[] = {"A3\sounds_f\weapons\hits\wood_5.wav",0.158114,1,30}; - soundWood6[] = {"A3\sounds_f\weapons\hits\wood_6.wav",0.158114,1,30}; - soundWood7[] = {"A3\sounds_f\weapons\hits\wood_7.wav",0.158114,1,30}; - soundWood8[] = {"A3\sounds_f\weapons\hits\wood_8.wav",0.158114,1,30}; - soundHitBody1[] = {"A3\sounds_f\weapons\hits\body_1.wav",0.0177828,1,25}; - soundHitBody2[] = {"A3\sounds_f\weapons\hits\body_2.wav",0.0177828,1,25}; - soundHitBody3[] = {"A3\sounds_f\weapons\hits\body_3.wav",0.0177828,1,25}; - soundHitBody4[] = {"A3\sounds_f\weapons\hits\body_4.wav",0.0177828,1,25}; - soundHitBody5[] = {"A3\sounds_f\weapons\hits\body_5.wav",0.0177828,1,25}; - soundHitBody6[] = {"A3\sounds_f\weapons\hits\body_6.wav",0.0177828,1,25}; - soundHitBody7[] = {"A3\sounds_f\weapons\hits\body_7.wav",0.0177828,1,25}; - soundHitBody8[] = {"A3\sounds_f\weapons\hits\body_8.wav",0.0177828,1,25}; - soundHitBuilding1[] = {"A3\sounds_f\weapons\hits\building_1.wav",0.251189,1,30}; - soundHitBuilding2[] = {"A3\sounds_f\weapons\hits\building_2.wav",0.251189,1,30}; - soundHitBuilding3[] = {"A3\sounds_f\weapons\hits\building_3.wav",0.251189,1,30}; - soundHitBuilding4[] = {"A3\sounds_f\weapons\hits\building_4.wav",0.251189,1,30}; - soundHitBuilding5[] = {"A3\sounds_f\weapons\hits\building_5.wav",0.251189,1,30}; - soundHitBuilding6[] = {"A3\sounds_f\weapons\hits\building_6.wav",0.251189,1,30}; - soundHitBuilding7[] = {"A3\sounds_f\weapons\hits\building_7.wav",0.251189,1,30}; - soundHitBuilding8[] = {"A3\sounds_f\weapons\hits\building_8.wav",0.251189,1,30}; - soundHitFoliage1[] = {"A3\sounds_f\weapons\hits\foliage_1.wav",0.177828,1,25}; - soundHitFoliage2[] = {"A3\sounds_f\weapons\hits\foliage_2.wav",0.177828,1,25}; - soundHitFoliage3[] = {"A3\sounds_f\weapons\hits\foliage_3.wav",0.177828,1,25}; - soundHitFoliage4[] = {"A3\sounds_f\weapons\hits\foliage_4.wav",0.177828,1,25}; - soundHitFoliage5[] = {"A3\sounds_f\weapons\hits\foliage_5.wav",0.177828,1,25}; - soundHitFoliage6[] = {"A3\sounds_f\weapons\hits\foliage_6.wav",0.177828,1,25}; - soundHitFoliage7[] = {"A3\sounds_f\weapons\hits\foliage_7.wav",0.177828,1,25}; - soundHitFoliage8[] = {"A3\sounds_f\weapons\hits\foliage_8.wav",0.177828,1,25}; - soundPlastic1[] = {"A3\sounds_f\weapons\hits\plastic_1.wav",0.177828,1,25}; - soundPlastic2[] = {"A3\sounds_f\weapons\hits\plastic_2.wav",0.177828,1,25}; - soundPlastic3[] = {"A3\sounds_f\weapons\hits\plastic_3.wav",0.177828,1,25}; - soundPlastic4[] = {"A3\sounds_f\weapons\hits\plastic_4.wav",0.177828,1,25}; - soundPlastic5[] = {"A3\sounds_f\weapons\hits\plastic_5.wav",0.177828,1,25}; - soundPlastic6[] = {"A3\sounds_f\weapons\hits\plastic_6.wav",0.177828,1,25}; - soundPlastic7[] = {"A3\sounds_f\weapons\hits\plastic_7.wav",0.177828,1,25}; - soundPlastic8[] = {"A3\sounds_f\weapons\hits\plastic_8.wav",0.177828,1,25}; - soundConcrete1[] = {"A3\sounds_f\weapons\hits\concrete_1.wav",0.177828,1,35}; - soundConcrete2[] = {"A3\sounds_f\weapons\hits\concrete_2.wav",0.177828,1,35}; - soundConcrete3[] = {"A3\sounds_f\weapons\hits\concrete_3.wav",0.177828,1,35}; - soundConcrete4[] = {"A3\sounds_f\weapons\hits\concrete_4.wav",0.177828,1,35}; - soundConcrete5[] = {"A3\sounds_f\weapons\hits\concrete_5.wav",0.177828,1,35}; - soundConcrete6[] = {"A3\sounds_f\weapons\hits\concrete_6.wav",0.177828,1,35}; - soundConcrete7[] = {"A3\sounds_f\weapons\hits\concrete_7.wav",0.177828,1,35}; - soundConcrete8[] = {"A3\sounds_f\weapons\hits\concrete_8.wav",0.177828,1,35}; - soundRubber1[] = {"A3\sounds_f\weapons\hits\tyre_1.wav",0.158114,1,25}; - soundRubber2[] = {"A3\sounds_f\weapons\hits\tyre_2.wav",0.158114,1,25}; - soundRubber3[] = {"A3\sounds_f\weapons\hits\tyre_3.wav",0.158114,1,25}; - soundRubber4[] = {"A3\sounds_f\weapons\hits\tyre_4.wav",0.158114,1,25}; - soundRubber5[] = {"A3\sounds_f\weapons\hits\tyre_5.wav",0.158114,1,25}; - soundRubber6[] = {"A3\sounds_f\weapons\hits\tyre_6.wav",0.158114,1,25}; - soundRubber7[] = {"A3\sounds_f\weapons\hits\tyre_7.wav",0.158114,1,25}; - soundRubber8[] = {"A3\sounds_f\weapons\hits\tyre_8.wav",0.158114,1,25}; - soundWater1[] = {"A3\sounds_f\weapons\hits\water_01.wav",0.158114,1,25}; - soundWater2[] = {"A3\sounds_f\weapons\hits\water_02.wav",0.158114,1,25}; - soundWater3[] = {"A3\sounds_f\weapons\hits\water_03.wav",0.158114,1,25}; - soundWater4[] = {"A3\sounds_f\weapons\hits\water_04.wav",0.158114,1,25}; - soundWater5[] = {"A3\sounds_f\weapons\hits\water_05.wav",0.158114,1,25}; - soundWater6[] = {"A3\sounds_f\weapons\hits\water_06.wav",0.158114,1,25}; - soundWater7[] = {"A3\sounds_f\weapons\hits\water_07.wav",0.158114,1,25}; - soundWater8[] = {"A3\sounds_f\weapons\hits\water_08.wav",0.158114,1,25}; - hitGroundSoft[] = {"soundGroundSoft1",0.2,"soundGroundSoft2",0.2,"soundGroundSoft3",0.1,"soundGroundSoft4",0.1,"soundGroundSoft5",0.1,"soundGroundSoft6",0.1,"soundGroundSoft7",0.1,"soundGroundSoft8",0.1}; - hitGroundHard[] = {"soundGroundHard1",0.2,"soundGroundHard2",0.2,"soundGroundHard3",0.1,"soundGroundHard4",0.1,"soundGroundHard5",0.1,"soundGroundHard6",0.1,"soundGroundHard7",0.1,"soundGroundHard8",0.1}; - hitMan[] = {"soundHitBody1",0.125,"soundHitBody2",0.125,"soundHitBody3",0.125,"soundHitBody4",0.125,"soundHitBody5",0.125,"soundHitBody6",0.125,"soundHitBody7",0.125,"soundHitBody8",0.125}; - hitArmor[] = {"soundVehiclePlate1",0.125,"soundVehiclePlate2",0.125,"soundVehiclePlate3",0.125,"soundVehiclePlate4",0.125,"soundVehiclePlate5",0.125,"soundVehiclePlate6",0.125,"soundVehiclePlate7",0.125,"soundVehiclePlate8",0.125}; - hitBuilding[] = {"soundHitBuilding1",0.2,"soundHitBuilding2",0.2,"soundHitBuilding3",0.1,"soundHitBuilding4",0.1,"soundHitBuilding5",0.1,"soundHitBuilding6",0.1,"soundHitBuilding7",0.1,"soundHitBuilding8",0.1}; - hitFoliage[] = {"soundHitFoliage1",0.125,"soundHitFoliage2",0.125,"soundHitFoliage3",0.125,"soundHitFoliage4",0.125,"soundHitFoliage5",0.125,"soundHitFoliage6",0.125,"soundHitFoliage7",0.125,"soundHitFoliage8",0.125}; - hitWood[] = {"soundWood1",0.125,"soundWood2",0.125,"soundWood3",0.125,"soundWood4",0.125,"soundWood5",0.125,"soundWood6",0.125,"soundWood7",0.125,"soundWood8",0.125}; - hitGlass[] = {"soundGlass1",0.125,"soundGlass2",0.125,"soundGlass3",0.125,"soundGlass4",0.125,"soundGlass5",0.125,"soundGlass6",0.125,"soundGlass7",0.125,"soundGlass8",0.125}; - hitGlassArmored[] = {"soundGlassArmored1",0.125,"soundGlassArmored2",0.125,"soundGlassArmored3",0.125,"soundGlassArmored4",0.125,"soundGlassArmored5",0.125,"soundGlassArmored6",0.125,"soundGlassArmored7",0.125,"soundGlassArmored8",0.125}; - hitConcrete[] = {"soundConcrete1",0.125,"soundConcrete2",0.125,"soundConcrete3",0.125,"soundConcrete4",0.125,"soundConcrete5",0.125,"soundConcrete6",0.125,"soundConcrete7",0.125,"soundConcrete8",0.125}; - hitRubber[] = {"soundRubber1",0.125,"soundRubber2",0.125,"soundRubber3",0.125,"soundRubber4",0.125,"soundRubber5",0.125,"soundRubber6",0.125,"soundRubber7",0.125,"soundRubber8",0.125}; - hitPlastic[] = {"soundPlastic1",0.125,"soundPlastic2",0.125,"soundPlastic3",0.125,"soundPlastic4",0.125,"soundPlastic5",0.125,"soundPlastic6",0.125,"soundPlastic7",0.125,"soundPlastic8",0.125}; - hitDefault[] = {"soundDefault1",0.2,"soundDefault2",0.2,"soundDefault3",0.1,"soundDefault4",0.1,"soundDefault5",0.1,"soundDefault6",0.1,"soundDefault7",0.1,"soundDefault8",0.1}; - hitMetal[] = {"soundMetal1",0.125,"soundMetal2",0.125,"soundMetal3",0.125,"soundMetal4",0.125,"soundMetal5",0.125,"soundMetal6",0.125,"soundMetal7",0.125,"soundMetal8",0.125}; - hitMetalplate[] = {"soundVehiclePlate1",0.125,"soundVehiclePlate2",0.125,"soundVehiclePlate3",0.125,"soundVehiclePlate4",0.125,"soundVehiclePlate5",0.125,"soundVehiclePlate6",0.125,"soundVehiclePlate7",0.125,"soundVehiclePlate8",0.125}; - hitWater[] = {"soundWater1",0.125,"soundWater2",0.125,"soundWater3",0.125,"soundWater4",0.125,"soundWater5",0.125,"soundWater6",0.125,"soundWater7",0.125,"soundWater8",0.125}; - bulletFly1[] = {"A3\sounds_f\weapons\hits\bullet_by_1.wav",1,1,35}; - bulletFly2[] = {"A3\sounds_f\weapons\hits\bullet_by_2.wav",1,1,35}; - bulletFly3[] = {"A3\sounds_f\weapons\hits\bullet_by_3.wav",1,1,35}; - bulletFly4[] = {"A3\sounds_f\weapons\hits\bullet_by_4.wav",1,1,35}; - bulletFly5[] = {"A3\sounds_f\weapons\hits\bullet_by_5.wav",1,1,35}; - bulletFly6[] = {"A3\sounds_f\weapons\hits\bullet_by_6.wav",1,1,35}; - bulletFly7[] = {"A3\sounds_f\weapons\hits\bullet_by_7.wav",1,1,35}; - bulletFly8[] = {"A3\sounds_f\weapons\hits\bullet_by_8.wav",1,1,35}; - bulletFly[] = {"bulletFly1",0.166,"bulletFly2",0.166,"bulletFly3",0.166,"bulletFly4",0.166,"bulletFly5",0.166,"bulletFly6",0.167,"bulletFly7",0.166,"bulletFly8",0.167}; - supersonicCrackNear[] = {"A3\sounds_f\weapons\hits\sscrack1.wav",1,1,35}; - supersonicCrackFar[] = {"A3\sounds_f\weapons\hits\sscrack2.wav",1,1,135}; - }; - */ - - class B_65x39_Caseless; - class ACE_frag_base: B_65x39_Caseless { - timeToLive = 12; - typicalSpeed = 1500; - deflecting = 65; - }; - - class ACE_frag_tiny: ACE_frag_base { - hit = 6; - airFriction = BASE_DRAG; - caliber = 0.75; - }; - - class ACE_frag_tiny_HD: ACE_frag_base { - hit = 6; - airFriction = BASE_DRAG_HD; - caliber = 0.75; - }; - - class ACE_frag_small: ACE_frag_base { - hit = 12; - airFriction = BASE_DRAG*0.9; - }; - - class ACE_frag_small_HD: ACE_frag_base { - hit = 12; - airFriction = BASE_DRAG_HD*0.9; - }; - - class ACE_frag_medium: ACE_frag_base { - hit = 14; - airFriction = BASE_DRAG*0.75; - caliber = 1.2; - }; - - class ACE_frag_medium_HD: ACE_frag_base { - hit = 14; - airFriction = BASE_DRAG_HD*0.75; - caliber = 1.2; - }; - - class ACE_frag_large: ACE_frag_base { - hit = 28; - indirectHit = 2; - indirectHitRange = 0.25; - airFriction = BASE_DRAG*0.65; - caliber = 2; - explosive = 0; - - }; - - class ACE_frag_large_HD: ACE_frag_large { - hit = 28; - indirectHit = 2; - indirectHitRange = 0.25; - airFriction = BASE_DRAG_HD*0.65; - caliber = 2; - - - }; - - class ACE_frag_huge: ACE_frag_large { - hit = 40; - indirectHit = 4; - indirectHitRange = 0.5; - airFriction = BASE_DRAG*0.5; - caliber = 2.8; - }; - - class ACE_frag_huge_HD: ACE_frag_large { - hit = 40; - indirectHit = 4; - indirectHitRange = 0.5; - airFriction = BASE_DRAG_HD*0.5; - caliber = 2.8; - }; - - class ACE_frag_spall_small: ACE_frag_small { - timeToLive = 0.1; - }; - - class ACE_frag_spall_medium: ACE_frag_medium { - timeToLive = 0.15; - }; - - class ACE_frag_spall_large: ACE_frag_large { - timeToLive = 0.25; - }; - - class ACE_frag_spall_huge: ACE_frag_huge { - timeToLive = 0.3; - }; -}; +#define BASE_DRAG -0.01 +#define HD_MULT 5 +#define BASE_DRAG_HD (BASE_DRAG*HD_MULT) + +class CfgAmmo { + //class ace_arty_105mm_m1_m782_time; + //class ace_arty_105mm_m1_m782_prox: ace_arty_105mm_m1_m782_time {}; + //class ace_arty_105mm_m1_m782_delay: ace_arty_105mm_m1_m782_prox { + // ACE_FRAG_SKIP = 1; + //}; + class Bo_GBU12_LGB; + class Nou_GBU12 : Bo_GBU12_LGB { + ACE_FRAG_CLASSES[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"}; + ACE_FRAG_METAL = 140000; + ACE_FRAG_CHARGE = 87000; + ACE_FRAG_GURNEY_C = 2320; + ACE_FRAG_GURNEY_K = 1/2; + sideAirFriction = 0.04; + airFriction = 0.04; + laserLock = 0; + }; + + class GrenadeBase; + class Grenade; + class GrenadeHand: Grenade { + ACE_FRAG_SKIP = 0; + ACE_FRAG_FORCE = 1; + // This is a good high-drag frag type for grenades. + ACE_FRAG_CLASSES[] = {"ACE_frag_tiny_HD"}; + /* + These values are based on the M67 Grenade, should be tweaked for + individual grenades. + */ + ACE_FRAG_METAL = 210; // metal in grams + ACE_FRAG_CHARGE = 185; // explosive in grams + ACE_FRAG_GURNEY_C = 2843; // Gurney velocity constant for explosive type. See: http://en.wikipedia.org/wiki/Gurney_equations + ACE_FRAG_GURNEY_K = 3/5; // Gurney shape factor, in this case a sphere. See: http://en.wikipedia.org/wiki/Gurney_equations + }; + class GrenadeHand_stone: GrenadeHand { + ACE_FRAG_SKIP = 1; + }; + class SmokeShell: GrenadeHand { + ACE_FRAG_SKIP = 1; + }; + + class RocketBase; + //class R_Hydra_HE: RocketBase { + // ACE_FRAG_SKIP = 1; + //}; + + //class R_57mm_HE: RocketBase { + // ACE_FRAG_SKIP = 1; + //}; + + class R_80mm_HE: RocketBase { + ACE_FRAG_SKIP = 1; + }; + + //class R_S8T_AT: RocketBase { + // ACE_FRAG_SKIP = 1; + //}; + + class BombCore; + class Bo_Mk82: BombCore { + ACE_FRAG_CLASSES[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"}; + ACE_FRAG_METAL = 140000; + ACE_FRAG_CHARGE = 87000; + ACE_FRAG_GURNEY_C = 2320; + ACE_FRAG_GURNEY_K = 1/2; + }; + + + class G_40mm_HE: GrenadeBase { + ACE_FRAG_SKIP = 0; + ACE_FRAG_FORCE = 1; + }; + + class ACE_G_40mm_HEDP: G_40mm_HE { + }; + class ACE_G_40mm_HE: ACE_G_40mm_HEDP { + }; + class ACE_G_40mm_Practice: ACE_G_40mm_HE { + ACE_FRAG_SKIP = 1; + }; + class ACE_G40mm_HE_VOG25P: G_40mm_HE { + ACE_FRAG_SKIP = 0; + ACE_FRAG_FORCE = 1; + }; + + //class R_SMAW_HEDP; + //class R_MEEWS_HEDP : R_SMAW_HEDP { + // ACE_FRAG_FORCE = 1; + // ACE_FRAG_MULTIPLIER = 1.2; + //}; + + //class MissileBase; + //class M_Hellfire_AT: MissileBase { + // ACE_FRAG_FORCE = 1; + // ACE_FRAG_MULTIPLIER = 1.75; + //}; + + /* + class B_762x51_Ball; + class ACE_frag_base: B_762x51_Ball { ////TODO: B_762x45_Ball no longer exists, is this a valid replacement? + model = "\A3\Weapons_f\ammo\shell"; + timeToLive = 12; + typicalSpeed = 800; + // Fix sounds + effectFly = "AmmoClassic"; + soundDefault1[] = {"A3\sounds_f\weapons\hits\concrete_1.wav",0.158114,1,30}; + soundDefault2[] = {"A3\sounds_f\weapons\hits\concrete_2.wav",0.158114,1,30}; + soundDefault3[] = {"A3\sounds_f\weapons\hits\concrete_3.wav",0.158114,1,30}; + soundDefault4[] = {"A3\sounds_f\weapons\hits\concrete_4.wav",0.158114,1,30}; + soundDefault5[] = {"A3\sounds_f\weapons\hits\concrete_5.wav",0.158114,1,30}; + soundDefault6[] = {"A3\sounds_f\weapons\hits\concrete_6.wav",0.158114,1,30}; + soundDefault7[] = {"A3\sounds_f\weapons\hits\concrete_7.wav",0.158114,1,30}; + soundDefault8[] = {"A3\sounds_f\weapons\hits\concrete_8.wav",0.158114,1,30}; + soundGroundSoft1[] = {"A3\sounds_f\weapons\hits\soft_ground_1.wav",0.02811705,1,30}; + soundGroundSoft2[] = {"A3\sounds_f\weapons\hits\soft_ground_2.wav",0.02811705,1,30}; + soundGroundSoft3[] = {"A3\sounds_f\weapons\hits\soft_ground_3.wav",0.02811705,1,30}; + soundGroundSoft4[] = {"A3\sounds_f\weapons\hits\soft_ground_4.wav",0.02811705,1,30}; + soundGroundSoft5[] = {"A3\sounds_f\weapons\hits\soft_ground_5.wav",0.02811705,1,30}; + soundGroundSoft6[] = {"A3\sounds_f\weapons\hits\soft_ground_6.wav",0.02811705,1,30}; + soundGroundSoft7[] = {"A3\sounds_f\weapons\hits\soft_ground_7.wav",0.02811705,1,30}; + soundGroundSoft8[] = {"A3\sounds_f\weapons\hits\soft_ground_8.wav",0.02811705,1,30}; + soundGroundHard1[] = {"A3\sounds_f\weapons\hits\hard_ground_1.wav",0.62946,1,40}; + soundGroundHard2[] = {"A3\sounds_f\weapons\hits\hard_ground_2.wav",0.62946,1,40}; + soundGroundHard3[] = {"A3\sounds_f\weapons\hits\hard_ground_3.wav",0.62946,1,40}; + soundGroundHard4[] = {"A3\sounds_f\weapons\hits\hard_ground_4.wav",0.62946,1,40}; + soundGroundHard5[] = {"A3\sounds_f\weapons\hits\hard_ground_5.wav",0.62946,1,40}; + soundGroundHard6[] = {"A3\sounds_f\weapons\hits\hard_ground_6.wav",0.62946,1,40}; + soundGroundHard7[] = {"A3\sounds_f\weapons\hits\hard_ground_7.wav",0.62946,1,40}; + soundGroundHard8[] = {"A3\sounds_f\weapons\hits\hard_ground_8.wav",0.62946,1,40}; + soundMetal1[] = {"A3\sounds_f\weapons\hits\metal_1.wav",0.158114,1,45}; + soundMetal2[] = {"A3\sounds_f\weapons\hits\metal_2.wav",0.158114,1,45}; + soundMetal3[] = {"A3\sounds_f\weapons\hits\metal_3.wav",0.158114,1,45}; + soundMetal4[] = {"A3\sounds_f\weapons\hits\metal_4.wav",0.158114,1,45}; + soundMetal5[] = {"A3\sounds_f\weapons\hits\metal_5.wav",0.158114,1,45}; + soundMetal6[] = {"A3\sounds_f\weapons\hits\metal_6.wav",0.158114,1,45}; + soundMetal7[] = {"A3\sounds_f\weapons\hits\metal_7.wav",0.158114,1,45}; + soundMetal8[] = {"A3\sounds_f\weapons\hits\metal_8.wav",0.158114,1,45}; + soundGlass1[] = {"A3\sounds_f\weapons\hits\glass_1.wav",0.177828,1,25}; + soundGlass2[] = {"A3\sounds_f\weapons\hits\glass_2.wav",0.177828,1,25}; + soundGlass3[] = {"A3\sounds_f\weapons\hits\glass_3.wav",0.177828,1,25}; + soundGlass4[] = {"A3\sounds_f\weapons\hits\glass_4.wav",0.177828,1,25}; + soundGlass5[] = {"A3\sounds_f\weapons\hits\glass_5.wav",0.177828,1,25}; + soundGlass6[] = {"A3\sounds_f\weapons\hits\glass_6.wav",0.177828,1,25}; + soundGlass7[] = {"A3\sounds_f\weapons\hits\glass_7.wav",0.177828,1,25}; + soundGlass8[] = {"A3\sounds_f\weapons\hits\glass_8.wav",0.177828,1,25}; + soundGlassArmored1[] = {"A3\sounds_f\weapons\hits\glass_arm_1.wav",0.177828,1,30}; + soundGlassArmored2[] = {"A3\sounds_f\weapons\hits\glass_arm_2.wav",0.177828,1,30}; + soundGlassArmored3[] = {"A3\sounds_f\weapons\hits\glass_arm_3.wav",0.177828,1,30}; + soundGlassArmored4[] = {"A3\sounds_f\weapons\hits\glass_arm_4.wav",0.177828,1,30}; + soundGlassArmored5[] = {"A3\sounds_f\weapons\hits\glass_arm_5.wav",0.177828,1,30}; + soundGlassArmored6[] = {"A3\sounds_f\weapons\hits\glass_arm_6.wav",0.177828,1,30}; + soundGlassArmored7[] = {"A3\sounds_f\weapons\hits\glass_arm_7.wav",0.177828,1,30}; + soundGlassArmored8[] = {"A3\sounds_f\weapons\hits\glass_arm_8.wav",0.177828,1,30}; + soundVehiclePlate1[] = {"A3\sounds_f\weapons\hits\metal_plate_1.wav",0.281170,1,40}; + soundVehiclePlate2[] = {"A3\sounds_f\weapons\hits\metal_plate_2.wav",0.281170,1,40}; + soundVehiclePlate3[] = {"A3\sounds_f\weapons\hits\metal_plate_3.wav",0.281170,1,40}; + soundVehiclePlate4[] = {"A3\sounds_f\weapons\hits\metal_plate_4.wav",0.281170,1,40}; + soundVehiclePlate5[] = {"A3\sounds_f\weapons\hits\metal_plate_5.wav",0.281170,1,40}; + soundVehiclePlate6[] = {"A3\sounds_f\weapons\hits\metal_plate_6.wav",0.281170,1,40}; + soundVehiclePlate7[] = {"A3\sounds_f\weapons\hits\metal_plate_7.wav",0.281170,1,40}; + soundVehiclePlate8[] = {"A3\sounds_f\weapons\hits\metal_plate_8.wav",0.281170,1,40}; + soundWood1[] = {"A3\sounds_f\weapons\hits\wood_1.wav",0.158114,1,30}; + soundWood2[] = {"A3\sounds_f\weapons\hits\wood_2.wav",0.158114,1,30}; + soundWood3[] = {"A3\sounds_f\weapons\hits\wood_3.wav",0.158114,1,30}; + soundWood4[] = {"A3\sounds_f\weapons\hits\wood_4.wav",0.158114,1,30}; + soundWood5[] = {"A3\sounds_f\weapons\hits\wood_5.wav",0.158114,1,30}; + soundWood6[] = {"A3\sounds_f\weapons\hits\wood_6.wav",0.158114,1,30}; + soundWood7[] = {"A3\sounds_f\weapons\hits\wood_7.wav",0.158114,1,30}; + soundWood8[] = {"A3\sounds_f\weapons\hits\wood_8.wav",0.158114,1,30}; + soundHitBody1[] = {"A3\sounds_f\weapons\hits\body_1.wav",0.0177828,1,25}; + soundHitBody2[] = {"A3\sounds_f\weapons\hits\body_2.wav",0.0177828,1,25}; + soundHitBody3[] = {"A3\sounds_f\weapons\hits\body_3.wav",0.0177828,1,25}; + soundHitBody4[] = {"A3\sounds_f\weapons\hits\body_4.wav",0.0177828,1,25}; + soundHitBody5[] = {"A3\sounds_f\weapons\hits\body_5.wav",0.0177828,1,25}; + soundHitBody6[] = {"A3\sounds_f\weapons\hits\body_6.wav",0.0177828,1,25}; + soundHitBody7[] = {"A3\sounds_f\weapons\hits\body_7.wav",0.0177828,1,25}; + soundHitBody8[] = {"A3\sounds_f\weapons\hits\body_8.wav",0.0177828,1,25}; + soundHitBuilding1[] = {"A3\sounds_f\weapons\hits\building_1.wav",0.251189,1,30}; + soundHitBuilding2[] = {"A3\sounds_f\weapons\hits\building_2.wav",0.251189,1,30}; + soundHitBuilding3[] = {"A3\sounds_f\weapons\hits\building_3.wav",0.251189,1,30}; + soundHitBuilding4[] = {"A3\sounds_f\weapons\hits\building_4.wav",0.251189,1,30}; + soundHitBuilding5[] = {"A3\sounds_f\weapons\hits\building_5.wav",0.251189,1,30}; + soundHitBuilding6[] = {"A3\sounds_f\weapons\hits\building_6.wav",0.251189,1,30}; + soundHitBuilding7[] = {"A3\sounds_f\weapons\hits\building_7.wav",0.251189,1,30}; + soundHitBuilding8[] = {"A3\sounds_f\weapons\hits\building_8.wav",0.251189,1,30}; + soundHitFoliage1[] = {"A3\sounds_f\weapons\hits\foliage_1.wav",0.177828,1,25}; + soundHitFoliage2[] = {"A3\sounds_f\weapons\hits\foliage_2.wav",0.177828,1,25}; + soundHitFoliage3[] = {"A3\sounds_f\weapons\hits\foliage_3.wav",0.177828,1,25}; + soundHitFoliage4[] = {"A3\sounds_f\weapons\hits\foliage_4.wav",0.177828,1,25}; + soundHitFoliage5[] = {"A3\sounds_f\weapons\hits\foliage_5.wav",0.177828,1,25}; + soundHitFoliage6[] = {"A3\sounds_f\weapons\hits\foliage_6.wav",0.177828,1,25}; + soundHitFoliage7[] = {"A3\sounds_f\weapons\hits\foliage_7.wav",0.177828,1,25}; + soundHitFoliage8[] = {"A3\sounds_f\weapons\hits\foliage_8.wav",0.177828,1,25}; + soundPlastic1[] = {"A3\sounds_f\weapons\hits\plastic_1.wav",0.177828,1,25}; + soundPlastic2[] = {"A3\sounds_f\weapons\hits\plastic_2.wav",0.177828,1,25}; + soundPlastic3[] = {"A3\sounds_f\weapons\hits\plastic_3.wav",0.177828,1,25}; + soundPlastic4[] = {"A3\sounds_f\weapons\hits\plastic_4.wav",0.177828,1,25}; + soundPlastic5[] = {"A3\sounds_f\weapons\hits\plastic_5.wav",0.177828,1,25}; + soundPlastic6[] = {"A3\sounds_f\weapons\hits\plastic_6.wav",0.177828,1,25}; + soundPlastic7[] = {"A3\sounds_f\weapons\hits\plastic_7.wav",0.177828,1,25}; + soundPlastic8[] = {"A3\sounds_f\weapons\hits\plastic_8.wav",0.177828,1,25}; + soundConcrete1[] = {"A3\sounds_f\weapons\hits\concrete_1.wav",0.177828,1,35}; + soundConcrete2[] = {"A3\sounds_f\weapons\hits\concrete_2.wav",0.177828,1,35}; + soundConcrete3[] = {"A3\sounds_f\weapons\hits\concrete_3.wav",0.177828,1,35}; + soundConcrete4[] = {"A3\sounds_f\weapons\hits\concrete_4.wav",0.177828,1,35}; + soundConcrete5[] = {"A3\sounds_f\weapons\hits\concrete_5.wav",0.177828,1,35}; + soundConcrete6[] = {"A3\sounds_f\weapons\hits\concrete_6.wav",0.177828,1,35}; + soundConcrete7[] = {"A3\sounds_f\weapons\hits\concrete_7.wav",0.177828,1,35}; + soundConcrete8[] = {"A3\sounds_f\weapons\hits\concrete_8.wav",0.177828,1,35}; + soundRubber1[] = {"A3\sounds_f\weapons\hits\tyre_1.wav",0.158114,1,25}; + soundRubber2[] = {"A3\sounds_f\weapons\hits\tyre_2.wav",0.158114,1,25}; + soundRubber3[] = {"A3\sounds_f\weapons\hits\tyre_3.wav",0.158114,1,25}; + soundRubber4[] = {"A3\sounds_f\weapons\hits\tyre_4.wav",0.158114,1,25}; + soundRubber5[] = {"A3\sounds_f\weapons\hits\tyre_5.wav",0.158114,1,25}; + soundRubber6[] = {"A3\sounds_f\weapons\hits\tyre_6.wav",0.158114,1,25}; + soundRubber7[] = {"A3\sounds_f\weapons\hits\tyre_7.wav",0.158114,1,25}; + soundRubber8[] = {"A3\sounds_f\weapons\hits\tyre_8.wav",0.158114,1,25}; + soundWater1[] = {"A3\sounds_f\weapons\hits\water_01.wav",0.158114,1,25}; + soundWater2[] = {"A3\sounds_f\weapons\hits\water_02.wav",0.158114,1,25}; + soundWater3[] = {"A3\sounds_f\weapons\hits\water_03.wav",0.158114,1,25}; + soundWater4[] = {"A3\sounds_f\weapons\hits\water_04.wav",0.158114,1,25}; + soundWater5[] = {"A3\sounds_f\weapons\hits\water_05.wav",0.158114,1,25}; + soundWater6[] = {"A3\sounds_f\weapons\hits\water_06.wav",0.158114,1,25}; + soundWater7[] = {"A3\sounds_f\weapons\hits\water_07.wav",0.158114,1,25}; + soundWater8[] = {"A3\sounds_f\weapons\hits\water_08.wav",0.158114,1,25}; + hitGroundSoft[] = {"soundGroundSoft1",0.2,"soundGroundSoft2",0.2,"soundGroundSoft3",0.1,"soundGroundSoft4",0.1,"soundGroundSoft5",0.1,"soundGroundSoft6",0.1,"soundGroundSoft7",0.1,"soundGroundSoft8",0.1}; + hitGroundHard[] = {"soundGroundHard1",0.2,"soundGroundHard2",0.2,"soundGroundHard3",0.1,"soundGroundHard4",0.1,"soundGroundHard5",0.1,"soundGroundHard6",0.1,"soundGroundHard7",0.1,"soundGroundHard8",0.1}; + hitMan[] = {"soundHitBody1",0.125,"soundHitBody2",0.125,"soundHitBody3",0.125,"soundHitBody4",0.125,"soundHitBody5",0.125,"soundHitBody6",0.125,"soundHitBody7",0.125,"soundHitBody8",0.125}; + hitArmor[] = {"soundVehiclePlate1",0.125,"soundVehiclePlate2",0.125,"soundVehiclePlate3",0.125,"soundVehiclePlate4",0.125,"soundVehiclePlate5",0.125,"soundVehiclePlate6",0.125,"soundVehiclePlate7",0.125,"soundVehiclePlate8",0.125}; + hitBuilding[] = {"soundHitBuilding1",0.2,"soundHitBuilding2",0.2,"soundHitBuilding3",0.1,"soundHitBuilding4",0.1,"soundHitBuilding5",0.1,"soundHitBuilding6",0.1,"soundHitBuilding7",0.1,"soundHitBuilding8",0.1}; + hitFoliage[] = {"soundHitFoliage1",0.125,"soundHitFoliage2",0.125,"soundHitFoliage3",0.125,"soundHitFoliage4",0.125,"soundHitFoliage5",0.125,"soundHitFoliage6",0.125,"soundHitFoliage7",0.125,"soundHitFoliage8",0.125}; + hitWood[] = {"soundWood1",0.125,"soundWood2",0.125,"soundWood3",0.125,"soundWood4",0.125,"soundWood5",0.125,"soundWood6",0.125,"soundWood7",0.125,"soundWood8",0.125}; + hitGlass[] = {"soundGlass1",0.125,"soundGlass2",0.125,"soundGlass3",0.125,"soundGlass4",0.125,"soundGlass5",0.125,"soundGlass6",0.125,"soundGlass7",0.125,"soundGlass8",0.125}; + hitGlassArmored[] = {"soundGlassArmored1",0.125,"soundGlassArmored2",0.125,"soundGlassArmored3",0.125,"soundGlassArmored4",0.125,"soundGlassArmored5",0.125,"soundGlassArmored6",0.125,"soundGlassArmored7",0.125,"soundGlassArmored8",0.125}; + hitConcrete[] = {"soundConcrete1",0.125,"soundConcrete2",0.125,"soundConcrete3",0.125,"soundConcrete4",0.125,"soundConcrete5",0.125,"soundConcrete6",0.125,"soundConcrete7",0.125,"soundConcrete8",0.125}; + hitRubber[] = {"soundRubber1",0.125,"soundRubber2",0.125,"soundRubber3",0.125,"soundRubber4",0.125,"soundRubber5",0.125,"soundRubber6",0.125,"soundRubber7",0.125,"soundRubber8",0.125}; + hitPlastic[] = {"soundPlastic1",0.125,"soundPlastic2",0.125,"soundPlastic3",0.125,"soundPlastic4",0.125,"soundPlastic5",0.125,"soundPlastic6",0.125,"soundPlastic7",0.125,"soundPlastic8",0.125}; + hitDefault[] = {"soundDefault1",0.2,"soundDefault2",0.2,"soundDefault3",0.1,"soundDefault4",0.1,"soundDefault5",0.1,"soundDefault6",0.1,"soundDefault7",0.1,"soundDefault8",0.1}; + hitMetal[] = {"soundMetal1",0.125,"soundMetal2",0.125,"soundMetal3",0.125,"soundMetal4",0.125,"soundMetal5",0.125,"soundMetal6",0.125,"soundMetal7",0.125,"soundMetal8",0.125}; + hitMetalplate[] = {"soundVehiclePlate1",0.125,"soundVehiclePlate2",0.125,"soundVehiclePlate3",0.125,"soundVehiclePlate4",0.125,"soundVehiclePlate5",0.125,"soundVehiclePlate6",0.125,"soundVehiclePlate7",0.125,"soundVehiclePlate8",0.125}; + hitWater[] = {"soundWater1",0.125,"soundWater2",0.125,"soundWater3",0.125,"soundWater4",0.125,"soundWater5",0.125,"soundWater6",0.125,"soundWater7",0.125,"soundWater8",0.125}; + bulletFly1[] = {"A3\sounds_f\weapons\hits\bullet_by_1.wav",1,1,35}; + bulletFly2[] = {"A3\sounds_f\weapons\hits\bullet_by_2.wav",1,1,35}; + bulletFly3[] = {"A3\sounds_f\weapons\hits\bullet_by_3.wav",1,1,35}; + bulletFly4[] = {"A3\sounds_f\weapons\hits\bullet_by_4.wav",1,1,35}; + bulletFly5[] = {"A3\sounds_f\weapons\hits\bullet_by_5.wav",1,1,35}; + bulletFly6[] = {"A3\sounds_f\weapons\hits\bullet_by_6.wav",1,1,35}; + bulletFly7[] = {"A3\sounds_f\weapons\hits\bullet_by_7.wav",1,1,35}; + bulletFly8[] = {"A3\sounds_f\weapons\hits\bullet_by_8.wav",1,1,35}; + bulletFly[] = {"bulletFly1",0.166,"bulletFly2",0.166,"bulletFly3",0.166,"bulletFly4",0.166,"bulletFly5",0.166,"bulletFly6",0.167,"bulletFly7",0.166,"bulletFly8",0.167}; + supersonicCrackNear[] = {"A3\sounds_f\weapons\hits\sscrack1.wav",1,1,35}; + supersonicCrackFar[] = {"A3\sounds_f\weapons\hits\sscrack2.wav",1,1,135}; + }; + */ + + class B_65x39_Caseless; + class ACE_frag_base: B_65x39_Caseless { + timeToLive = 12; + typicalSpeed = 1500; + deflecting = 65; + }; + + class ACE_frag_tiny: ACE_frag_base { + hit = 6; + airFriction = BASE_DRAG; + caliber = 0.75; + }; + + class ACE_frag_tiny_HD: ACE_frag_base { + hit = 6; + airFriction = BASE_DRAG_HD; + caliber = 0.75; + }; + + class ACE_frag_small: ACE_frag_base { + hit = 12; + airFriction = BASE_DRAG*0.9; + }; + + class ACE_frag_small_HD: ACE_frag_base { + hit = 12; + airFriction = BASE_DRAG_HD*0.9; + }; + + class ACE_frag_medium: ACE_frag_base { + hit = 14; + airFriction = BASE_DRAG*0.75; + caliber = 1.2; + }; + + class ACE_frag_medium_HD: ACE_frag_base { + hit = 14; + airFriction = BASE_DRAG_HD*0.75; + caliber = 1.2; + }; + + class ACE_frag_large: ACE_frag_base { + hit = 28; + indirectHit = 2; + indirectHitRange = 0.25; + airFriction = BASE_DRAG*0.65; + caliber = 2; + explosive = 0; + + }; + + class ACE_frag_large_HD: ACE_frag_large { + hit = 28; + indirectHit = 2; + indirectHitRange = 0.25; + airFriction = BASE_DRAG_HD*0.65; + caliber = 2; + + + }; + + class ACE_frag_huge: ACE_frag_large { + hit = 40; + indirectHit = 4; + indirectHitRange = 0.5; + airFriction = BASE_DRAG*0.5; + caliber = 2.8; + }; + + class ACE_frag_huge_HD: ACE_frag_large { + hit = 40; + indirectHit = 4; + indirectHitRange = 0.5; + airFriction = BASE_DRAG_HD*0.5; + caliber = 2.8; + }; + + class ACE_frag_spall_small: ACE_frag_small { + timeToLive = 0.1; + }; + + class ACE_frag_spall_medium: ACE_frag_medium { + timeToLive = 0.15; + }; + + class ACE_frag_spall_large: ACE_frag_large { + timeToLive = 0.25; + }; + + class ACE_frag_spall_huge: ACE_frag_huge { + timeToLive = 0.3; + }; +}; diff --git a/addons/frag/CfgEventhandlers.hpp b/addons/frag/CfgEventhandlers.hpp index 1e631e07eb..da3de47063 100644 --- a/addons/frag/CfgEventhandlers.hpp +++ b/addons/frag/CfgEventhandlers.hpp @@ -1,17 +1,17 @@ -class Extended_PreInit_EventHandlers { - class ADDON { - init = QUOTE(call COMPILE_FILE(XEH_pre_init)); - }; -}; - -class Extended_PostInit_EventHandlers { - class ADDON { - init = QUOTE(call COMPILE_FILE(XEH_post_init)); - }; -}; - -class Extended_FiredBIS_EventHandlers { - class AllVehicles { - ADDON = QUOTE(_this call FUNC(fired)); - }; -}; +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_pre_init)); + }; +}; + +class Extended_PostInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_post_init)); + }; +}; + +class Extended_FiredBIS_EventHandlers { + class AllVehicles { + ADDON = QUOTE(_this call FUNC(fired)); + }; +}; diff --git a/addons/frag/XEH_post_init.sqf b/addons/frag/XEH_post_init.sqf index 9769148871..21d76e6913 100644 --- a/addons/frag/XEH_post_init.sqf +++ b/addons/frag/XEH_post_init.sqf @@ -1,18 +1,18 @@ -#include "script_component.hpp" -if(isServer) then { - [QGVAR(frag_eh), { _this call FUNC(frago); }] call ace_common_fnc_addEventHandler; -}; -/* -GVAR(replacedBisArtyWrapper) = false; -[] spawn { - waitUntil { - if(!(isNil "BIS_ARTY_F_ShellFlight")) then { - ACE_WRAPPER_BIS_ARTY_F_ShellFlight = BIS_ARTY_F_ShellFlight; - BIS_ARTY_F_ShellFlight = FUNC(BIS_ARTY_WRAPPER); - GVAR(replacedBisArtyWrapper) = true; - }; - sleep 4; - GVAR(replacedBisArtyWrapper) - }; -}; +#include "script_component.hpp" +if(isServer) then { + [QGVAR(frag_eh), { _this call FUNC(frago); }] call ace_common_fnc_addEventHandler; +}; +/* +GVAR(replacedBisArtyWrapper) = false; +[] spawn { + waitUntil { + if(!(isNil "BIS_ARTY_F_ShellFlight")) then { + ACE_WRAPPER_BIS_ARTY_F_ShellFlight = BIS_ARTY_F_ShellFlight; + BIS_ARTY_F_ShellFlight = FUNC(BIS_ARTY_WRAPPER); + GVAR(replacedBisArtyWrapper) = true; + }; + sleep 4; + GVAR(replacedBisArtyWrapper) + }; +}; */ \ No newline at end of file diff --git a/addons/frag/XEH_pre_Init.sqf b/addons/frag/XEH_pre_Init.sqf index 5b3aa36b18..8591af46d3 100644 --- a/addons/frag/XEH_pre_Init.sqf +++ b/addons/frag/XEH_pre_Init.sqf @@ -1,45 +1,45 @@ -#include "script_component.hpp" - - -ADDON = false; - -PREP(fired); -PREP(frago); -PREP(trackFragRound); -PREP(spallTrack); -PREP(doSpall); -PREP(vectorDiffFast); - -GVAR(trackedObjects) = []; -GVAR(blackList) = []; -GVAR(traceFrags) = false; - -GVAR(replacedBisArtyWrapper) = true; - -GVAR(TOTALFRAGS) = 0; - -GVAR(spallIsTrackingCount) = 0; -GVAR(spallHPData) = []; - -GVAR(traces) = []; -GVAR(tracesStarted) = false; -GVAR(traceID) = -1; -GVAR(autoTrace) = true; - - -// * Other Shit */ -PREP(frag_trace); -PREP(denyFrag); -PREP(BIS_ARTY_WRAPPER); -PREP(startTracing); -PREP(stopTracing); -PREP(clearTraces); -PREP(trackTrace); -PREP(addTrack); -PREP(drawTraces); -PREP(removeTrack); -PREP(spallHP); -PREP(addBlackList); -PREP(addManualTrack); - -ADDON = true; +#include "script_component.hpp" + + +ADDON = false; + +PREP(fired); +PREP(frago); +PREP(trackFragRound); +PREP(spallTrack); +PREP(doSpall); +PREP(vectorDiffFast); + +GVAR(trackedObjects) = []; +GVAR(blackList) = []; +GVAR(traceFrags) = false; + +GVAR(replacedBisArtyWrapper) = true; + +GVAR(TOTALFRAGS) = 0; + +GVAR(spallIsTrackingCount) = 0; +GVAR(spallHPData) = []; + +GVAR(traces) = []; +GVAR(tracesStarted) = false; +GVAR(traceID) = -1; +GVAR(autoTrace) = true; + + +// * Other Shit */ +PREP(frag_trace); +PREP(denyFrag); +PREP(BIS_ARTY_WRAPPER); +PREP(startTracing); +PREP(stopTracing); +PREP(clearTraces); +PREP(trackTrace); +PREP(addTrack); +PREP(drawTraces); +PREP(removeTrack); +PREP(spallHP); +PREP(addBlackList); +PREP(addManualTrack); + +ADDON = true; diff --git a/addons/frag/config.cpp b/addons/frag/config.cpp index 4c1fb71e15..32ebc18827 100644 --- a/addons/frag/config.cpp +++ b/addons/frag/config.cpp @@ -1,16 +1,16 @@ -#include "script_component.hpp" -class CfgPatches { - class ADDON { - units[] = {}; - weapons[] = {}; - requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"ace_common"}; - author[] = {"Nou"}; - VERSION_CONFIG; - }; -}; - -//PRELOAD_ADDONS; - -#include "CfgEventhandlers.hpp" -#include "CfgAmmo.hpp" +#include "script_component.hpp" +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_common"}; + author[] = {"Nou"}; + VERSION_CONFIG; + }; +}; + +//PRELOAD_ADDONS; + +#include "CfgEventhandlers.hpp" +#include "CfgAmmo.hpp" diff --git a/addons/frag/functions/fnc_BIS_ARTY_WRAPPER.sqf b/addons/frag/functions/fnc_BIS_ARTY_WRAPPER.sqf index 0d71cf58ac..e3e533e75a 100644 --- a/addons/frag/functions/fnc_BIS_ARTY_WRAPPER.sqf +++ b/addons/frag/functions/fnc_BIS_ARTY_WRAPPER.sqf @@ -1,13 +1,13 @@ -#include "script_component.hpp" -_ret = [(_this select 6)] call FUNC(removeTrack); -if(!_ret) then { - [(_this select 6)] call FUNC(addBlackList); -}; -_this call ACE_WRAPPER_BIS_ARTY_F_ShellFlight; -_catEntry = BIS_ARTY_SHELLCAT select ((count BIS_ARTY_SHELLCAT) - 1); -_shell = _catEntry select 0; -_ARTY_DeployOnImpact = getText (configFile >> "CfgAmmo" >> "ARTY_DeployOnImpact"); -if(_ARTY_DeployOnImpact == "") then { - _this set[6, _shell]; - _this call FUNC(fired); +#include "script_component.hpp" +_ret = [(_this select 6)] call FUNC(removeTrack); +if(!_ret) then { + [(_this select 6)] call FUNC(addBlackList); +}; +_this call ACE_WRAPPER_BIS_ARTY_F_ShellFlight; +_catEntry = BIS_ARTY_SHELLCAT select ((count BIS_ARTY_SHELLCAT) - 1); +_shell = _catEntry select 0; +_ARTY_DeployOnImpact = getText (configFile >> "CfgAmmo" >> "ARTY_DeployOnImpact"); +if(_ARTY_DeployOnImpact == "") then { + _this set[6, _shell]; + _this call FUNC(fired); }; \ No newline at end of file diff --git a/addons/frag/functions/fnc_addBlackList.sqf b/addons/frag/functions/fnc_addBlackList.sqf index f7b3faf902..95edcd1590 100644 --- a/addons/frag/functions/fnc_addBlackList.sqf +++ b/addons/frag/functions/fnc_addBlackList.sqf @@ -1,4 +1,4 @@ -#include "script_component.hpp" -private ["_round"]; -_round = _this select 0; +#include "script_component.hpp" +private ["_round"]; +_round = _this select 0; GVAR(blackList) set[(count GVAR(blackList)), _round]; \ No newline at end of file diff --git a/addons/frag/functions/fnc_addManualTrack.sqf b/addons/frag/functions/fnc_addManualTrack.sqf index 3dc14cc748..89c1576277 100644 --- a/addons/frag/functions/fnc_addManualTrack.sqf +++ b/addons/frag/functions/fnc_addManualTrack.sqf @@ -1,7 +1,7 @@ -#include "script_component.hpp" -private ["_round"]; -_round = _this select 0; -if(alive _round) then { - GVAR(trackedObjects) set[(count GVAR(trackedObjects)), _round]; - [DFUNC(trackFragRound), 0, [_round, (getPosASL _round), (velocity _round), (typeOf _round), time, objNull, false, 0, 0]] call cba_fnc_addPerFrameHandler; +#include "script_component.hpp" +private ["_round"]; +_round = _this select 0; +if(alive _round) then { + GVAR(trackedObjects) set[(count GVAR(trackedObjects)), _round]; + [DFUNC(trackFragRound), 0, [_round, (getPosASL _round), (velocity _round), (typeOf _round), time, objNull, false, 0, 0]] call cba_fnc_addPerFrameHandler; }; \ No newline at end of file diff --git a/addons/frag/functions/fnc_addTrack.sqf b/addons/frag/functions/fnc_addTrack.sqf index 2beea1dd56..760b48b287 100644 --- a/addons/frag/functions/fnc_addTrack.sqf +++ b/addons/frag/functions/fnc_addTrack.sqf @@ -1,20 +1,20 @@ -#include "script_component.hpp" -if(GVAR(autoTrace)) then { - [] call FUNC(startTracing); -}; - -// setAccTime 0.05; -_index = (count GVAR(traces)); -_obj = _this select 1; -_origin = _this select 0; -_color = [1,0,0,1]; -if((count _this) > 2) then { - _color = _this select 2; -}; -_positions = []; -_objVel = velocity _obj; -_objTVel = sqrt((_objVel select 0)^2 + (_objVel select 1)^2 + (_objVel select 2)^2); -_positions set[(count _positions), [(getPos _obj), _objTVel]]; -_data = [_origin, typeOf _origin, typeOf _obj, _objTVel, _positions, _color]; -GVAR(traces) set[_index, _data]; +#include "script_component.hpp" +if(GVAR(autoTrace)) then { + [] call FUNC(startTracing); +}; + +// setAccTime 0.05; +_index = (count GVAR(traces)); +_obj = _this select 1; +_origin = _this select 0; +_color = [1,0,0,1]; +if((count _this) > 2) then { + _color = _this select 2; +}; +_positions = []; +_objVel = velocity _obj; +_objTVel = sqrt((_objVel select 0)^2 + (_objVel select 1)^2 + (_objVel select 2)^2); +_positions set[(count _positions), [(getPos _obj), _objTVel]]; +_data = [_origin, typeOf _origin, typeOf _obj, _objTVel, _positions, _color]; +GVAR(traces) set[_index, _data]; [DFUNC(trackTrace), 0, [_obj, _index, time]] call cba_fnc_addPerFrameHandler; \ No newline at end of file diff --git a/addons/frag/functions/fnc_clearTraces.sqf b/addons/frag/functions/fnc_clearTraces.sqf index b301094044..eaf34f77c4 100644 --- a/addons/frag/functions/fnc_clearTraces.sqf +++ b/addons/frag/functions/fnc_clearTraces.sqf @@ -1,2 +1,2 @@ -#include "script_component.hpp" +#include "script_component.hpp" GVAR(traces) = []; \ No newline at end of file diff --git a/addons/frag/functions/fnc_denyFrag.sqf b/addons/frag/functions/fnc_denyFrag.sqf index 6c4aa9bf8d..b4875cbd3a 100644 --- a/addons/frag/functions/fnc_denyFrag.sqf +++ b/addons/frag/functions/fnc_denyFrag.sqf @@ -1,7 +1,7 @@ -#include "script_component.hpp" - -private ["_ret"]; -_ret = [(_this select 0)] call FUNC(removeTrack); -if(!_ret) then { - [(_this select 0)] call FUNC(addBlackList); +#include "script_component.hpp" + +private ["_ret"]; +_ret = [(_this select 0)] call FUNC(removeTrack); +if(!_ret) then { + [(_this select 0)] call FUNC(addBlackList); }; \ No newline at end of file diff --git a/addons/frag/functions/fnc_doSpall.sqf b/addons/frag/functions/fnc_doSpall.sqf index 761490fa90..17f17ea7e5 100644 --- a/addons/frag/functions/fnc_doSpall.sqf +++ b/addons/frag/functions/fnc_doSpall.sqf @@ -1,166 +1,166 @@ -//fnc_doSpall.sqf -#include "script_component.hpp" -#ifdef DEBUG_MODE_FULL - GVAR(traceFrags) = true; -#endif -// player sideChat "WAAAAAAAAAAAAAAAAAAAAA"; -private ["_params", "_initialData", "_hpData", "_roundType", "_round", "_object", "_caliber", "_explosive", - "_idh", "_alive", "_exit", "_vm", "_velocity", "_unitDir", "_oldVelocity", "_curVelocity", "_diff", "_polar", - "_pos", "_spallPos", "_i", "_pos1", "_pos2", "_blah", "_data", "_spallPolar", "_c", "_warn", "_m", "_k", - "_gC", "_shellType", "_fragPower", "_spread", "_spallCount", "_elev", "_dir", "_vel", "_spallFragVect", - "_fragment"]; - - -_params = _this select 0; -[(_this select 1)] call cba_fnc_removePerFrameHandler; -_hitData = _params select 0; -_initialData = GVAR(spallHPData) select (_hitData select 0); -_hpData = (_hitData select 1) select (_params select 1); - - -_object = _hpData select 0; -_object removeEventHandler ["hitPart", _initialData select 0]; -_foundObjects = _initialData select 7; -_index = _foundObjects find _object; -if(_index != -1) then { - _foundObjecsts set[_index, nil]; -}; - -_roundType = (_initialData select 2); -_round = (_initialData select 3); -_object = (_initialData select 1); - -_caliber = getNumber(configFile >> "CfgAmmo" >> _roundType >> "caliber"); -_explosive = getNumber(configFile >> "CfgAmmo" >> _roundType >> "explosive"); -_idh = getNumber(configFile >> "CfgAmmo" >> _roundType >> "indirectHitRange"); - -_alive = true; -if(!alive _round && (_initialData select 6) == 1) then { - _alive = false; -}; - -if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then { - // player sideChat format["BBBB"]; - _exit = false; - _vm = 1; - _velocity = _initialData select 5; - - _oldVelocity = _velocity call BIS_fnc_magnitude; - _curVelocity = (velocity _round) call BIS_fnc_magnitude; - - if(alive _round) then { - _diff = _velocity vectorDiff (velocity _round); - _polar = _diff call CBA_fnc_vect2polar; - // player sideChat format["polar: %1", _polar]; - if((abs(_polar select 1) > 45 || abs(_polar select 2) > 45)) then { - if(_caliber < 2.5) then { - // player sideChat format["exit!"]; - _exit = true; - } else { - _vm = 1-(_curVelocity/_oldVelocity); - }; - }; - }; - if(!_exit) then { - _unitDir = vectorNormalized _velocity; - _pos = _hpData select 3; - _spallPos = nil; - for "_i" from 0 to 100 do { - _pos1 = [ - (_pos select 0) + (((_unitDir select 0)*0.01)*_i), - (_pos select 1) + (((_unitDir select 1)*0.01)*_i), - (_pos select 2) + (((_unitDir select 2)*0.01)*_i) - ]; - _pos2 = [ - (_pos select 0) + (((_unitDir select 0)*0.01)*(_i+1)), - (_pos select 1) + (((_unitDir select 1)*0.01)*(_i+1)), - (_pos select 2) + (((_unitDir select 2)*0.01)*(_i+1)) - ]; - // _blah = [_object, "FIRE"] intersect [_object worldToModel (ASLtoATL _pos1), _object worldToModel (ASLtoATL _pos2)]; - // diag_log text format["b: %1", _blah]; - - // _data = [nil, nil, nil, 1, [[ASLtoATL _pos1, 1], [ASLtoATL _pos2, 1]]]; - // NOU_TRACES set[(count NOU_TRACES), _data]; - - if(!lineIntersects [_pos1, _pos2]) exitWith { - // player sideChat format["FOUND!"]; - _spallPos = _pos2; - }; - }; - if(!isNil "_spallPos") then { - _spallPolar = _velocity call CBA_fnc_vect2polar; - - if(_explosive > 0) then { - // player sideChat format["EXPLOSIVE!"]; - _warn = false; - _c = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_CHARGE"); - if(_c == 0) then { _c = 1; _warn = true;}; - _m = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_METAL"); - if(_m == 0) then { _m = 2; _warn = true;}; - _k = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_GURNEY_K"); - if(_k == 0) then { _k = 1/2; _warn = true;}; - _gC = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_GURNEY_C"); - if(_gC == 0) then { _gC = 2440; _warn = true;}; - - if(_warn) then { - diag_log text format["Ammo class %1 lacks proper explosive properties definitions for frag!", _roundType]; //TODO: turn this off when we get closer to release - }; - - _fragPower = (((_m/_c)+_k)^-(1/2))*_gC; - _spallPolar set[0, _fragPower*0.66]; - }; - - _fragTypes = [ - "ACE_frag_spall_small", "ACE_frag_spall_small", "ACE_frag_spall_small", - "ACE_frag_spall_small","ACE_frag_spall_medium","ACE_frag_spall_medium","ACE_frag_spall_medium", - "ACE_frag_spall_medium", "ACE_frag_spall_large", "ACE_frag_spall_large", "ACE_frag_spall_huge", - "ACE_frag_spall_huge" - - ]; - - // diag_log text format["SPALL POWER: %1", _spallPolar select 0]; - _spread = 15+(random 25); - _spallCount = 5+(random 10); - for "_i" from 1 to _spallCount do { - _elev = ((_spallPolar select 2)-_spread)+(random (_spread*2)); - _dir = ((_spallPolar select 1)-_spread)+(random (_spread*2)); - if(abs _elev > 90) then { - _dir = _dir + 180; - }; - _dir = _dir % 360; - _vel = (_spallPolar select 0)*0.33*_vm; - _vel = (_vel-(_vel*0.25))+(random (_vel*0.5)); - - _spallFragVect = [_vel, _dir, _elev] call CBA_fnc_polar2vect; - _fragType = round (random ((count _fragTypes)-1)); - _fragment = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; - _fragment setPosASL _spallPos; - _fragment setVelocity _spallFragVect; - if(GVAR(traceFrags)) then { - [player, _fragment, [1,0.5,0,1]] call FUNC(addTrack); - }; - }; - _spread = 5+(random 5); - _spallCount = 3+(random 5); - for "_i" from 1 to _spallCount do { - _elev = ((_spallPolar select 2)-_spread)+(random (_spread*2)); - _dir = ((_spallPolar select 1)-_spread)+(random (_spread*2)); - if(abs _elev > 90) then { - _dir = _dir + 180; - }; - _dir = _dir % 360; - _vel = (_spallPolar select 0)*0.55*_vm; - _vel = (_vel-(_vel*0.25))+(random (_vel*0.5)); - - _spallFragVect = [_vel, _dir, _elev] call CBA_fnc_polar2vect; - _fragType = round (random ((count _fragTypes)-1)); - _fragment = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; - _fragment setPosASL _spallPos; - _fragment setVelocity _spallFragVect; - if(GVAR(traceFrags)) then { - [player, _fragment, [1,0,0,1]] call FUNC(addTrack); - }; - }; - }; - }; +//fnc_doSpall.sqf +#include "script_component.hpp" +#ifdef DEBUG_MODE_FULL + GVAR(traceFrags) = true; +#endif +// player sideChat "WAAAAAAAAAAAAAAAAAAAAA"; +private ["_params", "_initialData", "_hpData", "_roundType", "_round", "_object", "_caliber", "_explosive", + "_idh", "_alive", "_exit", "_vm", "_velocity", "_unitDir", "_oldVelocity", "_curVelocity", "_diff", "_polar", + "_pos", "_spallPos", "_i", "_pos1", "_pos2", "_blah", "_data", "_spallPolar", "_c", "_warn", "_m", "_k", + "_gC", "_shellType", "_fragPower", "_spread", "_spallCount", "_elev", "_dir", "_vel", "_spallFragVect", + "_fragment"]; + + +_params = _this select 0; +[(_this select 1)] call cba_fnc_removePerFrameHandler; +_hitData = _params select 0; +_initialData = GVAR(spallHPData) select (_hitData select 0); +_hpData = (_hitData select 1) select (_params select 1); + + +_object = _hpData select 0; +_object removeEventHandler ["hitPart", _initialData select 0]; +_foundObjects = _initialData select 7; +_index = _foundObjects find _object; +if(_index != -1) then { + _foundObjecsts set[_index, nil]; +}; + +_roundType = (_initialData select 2); +_round = (_initialData select 3); +_object = (_initialData select 1); + +_caliber = getNumber(configFile >> "CfgAmmo" >> _roundType >> "caliber"); +_explosive = getNumber(configFile >> "CfgAmmo" >> _roundType >> "explosive"); +_idh = getNumber(configFile >> "CfgAmmo" >> _roundType >> "indirectHitRange"); + +_alive = true; +if(!alive _round && (_initialData select 6) == 1) then { + _alive = false; +}; + +if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then { + // player sideChat format["BBBB"]; + _exit = false; + _vm = 1; + _velocity = _initialData select 5; + + _oldVelocity = _velocity call BIS_fnc_magnitude; + _curVelocity = (velocity _round) call BIS_fnc_magnitude; + + if(alive _round) then { + _diff = _velocity vectorDiff (velocity _round); + _polar = _diff call CBA_fnc_vect2polar; + // player sideChat format["polar: %1", _polar]; + if((abs(_polar select 1) > 45 || abs(_polar select 2) > 45)) then { + if(_caliber < 2.5) then { + // player sideChat format["exit!"]; + _exit = true; + } else { + _vm = 1-(_curVelocity/_oldVelocity); + }; + }; + }; + if(!_exit) then { + _unitDir = vectorNormalized _velocity; + _pos = _hpData select 3; + _spallPos = nil; + for "_i" from 0 to 100 do { + _pos1 = [ + (_pos select 0) + (((_unitDir select 0)*0.01)*_i), + (_pos select 1) + (((_unitDir select 1)*0.01)*_i), + (_pos select 2) + (((_unitDir select 2)*0.01)*_i) + ]; + _pos2 = [ + (_pos select 0) + (((_unitDir select 0)*0.01)*(_i+1)), + (_pos select 1) + (((_unitDir select 1)*0.01)*(_i+1)), + (_pos select 2) + (((_unitDir select 2)*0.01)*(_i+1)) + ]; + // _blah = [_object, "FIRE"] intersect [_object worldToModel (ASLtoATL _pos1), _object worldToModel (ASLtoATL _pos2)]; + // diag_log text format["b: %1", _blah]; + + // _data = [nil, nil, nil, 1, [[ASLtoATL _pos1, 1], [ASLtoATL _pos2, 1]]]; + // NOU_TRACES set[(count NOU_TRACES), _data]; + + if(!lineIntersects [_pos1, _pos2]) exitWith { + // player sideChat format["FOUND!"]; + _spallPos = _pos2; + }; + }; + if(!isNil "_spallPos") then { + _spallPolar = _velocity call CBA_fnc_vect2polar; + + if(_explosive > 0) then { + // player sideChat format["EXPLOSIVE!"]; + _warn = false; + _c = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_CHARGE"); + if(_c == 0) then { _c = 1; _warn = true;}; + _m = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_METAL"); + if(_m == 0) then { _m = 2; _warn = true;}; + _k = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_GURNEY_K"); + if(_k == 0) then { _k = 1/2; _warn = true;}; + _gC = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_GURNEY_C"); + if(_gC == 0) then { _gC = 2440; _warn = true;}; + + if(_warn) then { + diag_log text format["Ammo class %1 lacks proper explosive properties definitions for frag!", _roundType]; //TODO: turn this off when we get closer to release + }; + + _fragPower = (((_m/_c)+_k)^-(1/2))*_gC; + _spallPolar set[0, _fragPower*0.66]; + }; + + _fragTypes = [ + "ACE_frag_spall_small", "ACE_frag_spall_small", "ACE_frag_spall_small", + "ACE_frag_spall_small","ACE_frag_spall_medium","ACE_frag_spall_medium","ACE_frag_spall_medium", + "ACE_frag_spall_medium", "ACE_frag_spall_large", "ACE_frag_spall_large", "ACE_frag_spall_huge", + "ACE_frag_spall_huge" + + ]; + + // diag_log text format["SPALL POWER: %1", _spallPolar select 0]; + _spread = 15+(random 25); + _spallCount = 5+(random 10); + for "_i" from 1 to _spallCount do { + _elev = ((_spallPolar select 2)-_spread)+(random (_spread*2)); + _dir = ((_spallPolar select 1)-_spread)+(random (_spread*2)); + if(abs _elev > 90) then { + _dir = _dir + 180; + }; + _dir = _dir % 360; + _vel = (_spallPolar select 0)*0.33*_vm; + _vel = (_vel-(_vel*0.25))+(random (_vel*0.5)); + + _spallFragVect = [_vel, _dir, _elev] call CBA_fnc_polar2vect; + _fragType = round (random ((count _fragTypes)-1)); + _fragment = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; + _fragment setPosASL _spallPos; + _fragment setVelocity _spallFragVect; + if(GVAR(traceFrags)) then { + [player, _fragment, [1,0.5,0,1]] call FUNC(addTrack); + }; + }; + _spread = 5+(random 5); + _spallCount = 3+(random 5); + for "_i" from 1 to _spallCount do { + _elev = ((_spallPolar select 2)-_spread)+(random (_spread*2)); + _dir = ((_spallPolar select 1)-_spread)+(random (_spread*2)); + if(abs _elev > 90) then { + _dir = _dir + 180; + }; + _dir = _dir % 360; + _vel = (_spallPolar select 0)*0.55*_vm; + _vel = (_vel-(_vel*0.25))+(random (_vel*0.5)); + + _spallFragVect = [_vel, _dir, _elev] call CBA_fnc_polar2vect; + _fragType = round (random ((count _fragTypes)-1)); + _fragment = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; + _fragment setPosASL _spallPos; + _fragment setVelocity _spallFragVect; + if(GVAR(traceFrags)) then { + [player, _fragment, [1,0,0,1]] call FUNC(addTrack); + }; + }; + }; + }; }; \ No newline at end of file diff --git a/addons/frag/functions/fnc_drawTraces.sqf b/addons/frag/functions/fnc_drawTraces.sqf index b9645bab97..c4b5989177 100644 --- a/addons/frag/functions/fnc_drawTraces.sqf +++ b/addons/frag/functions/fnc_drawTraces.sqf @@ -1,32 +1,32 @@ -#include "script_component.hpp" -{ - _positions = _x select 4; - _color = _x select 5; - _index = 0; - _max = count _positions; - _startSpeed = (_positions select 0) select 1; - if(_startSpeed <= 0) then { - _startSpeed = 0.01; - }; - _lastSpd = []; - _lastPos = []; - while {_index < _max} do { - _data1 = _positions select _index; - _data2 = nil; - if(_index + ACE_TRACE_DRAW_INC >= _max) then { - _data2 = _positions select (_max - 1); - } else { - _data2 = _positions select (_index + ACE_TRACE_DRAW_INC); - }; - - _pos1 = _data1 select 0; - _pos2 = _data2 select 0; - _index = _index + ACE_TRACE_DRAW_INC; - - - drawLine3D [_pos1, _pos2, _color]; - _lastPos = _pos2; - _lastSpd = _data1 select 1; - }; - // drawIcon3D ["", [1,0,0,1], _lastPos, 0, 0, 0, format["%1m/s", _lastSpd], 1, 0.05, "PuristaMedium"]; +#include "script_component.hpp" +{ + _positions = _x select 4; + _color = _x select 5; + _index = 0; + _max = count _positions; + _startSpeed = (_positions select 0) select 1; + if(_startSpeed <= 0) then { + _startSpeed = 0.01; + }; + _lastSpd = []; + _lastPos = []; + while {_index < _max} do { + _data1 = _positions select _index; + _data2 = nil; + if(_index + ACE_TRACE_DRAW_INC >= _max) then { + _data2 = _positions select (_max - 1); + } else { + _data2 = _positions select (_index + ACE_TRACE_DRAW_INC); + }; + + _pos1 = _data1 select 0; + _pos2 = _data2 select 0; + _index = _index + ACE_TRACE_DRAW_INC; + + + drawLine3D [_pos1, _pos2, _color]; + _lastPos = _pos2; + _lastSpd = _data1 select 1; + }; + // drawIcon3D ["", [1,0,0,1], _lastPos, 0, 0, 0, format["%1m/s", _lastSpd], 1, 0.05, "PuristaMedium"]; } forEach GVAR(traces); \ No newline at end of file diff --git a/addons/frag/functions/fnc_frag_trace.sqf b/addons/frag/functions/fnc_frag_trace.sqf index 664e117793..3ca768e05b 100644 --- a/addons/frag/functions/fnc_frag_trace.sqf +++ b/addons/frag/functions/fnc_frag_trace.sqf @@ -1,10 +1,10 @@ -#include "script_component.hpp" - -private ["_params", "_shell"]; -_params = _this select 0; -_shell = _params select 0; -if(alive _shell) then { - drop ["\Ca\Data\Cl_basic","","Billboard",1,30,(getPos _shell),[0,0,0],1,1.275,1.0,0.0,[0.5],[[0,1,0,1]],[0],0.0,2.0,"","",""]; -} else { - [_this select 1] call cba_fnc_removePerFrameHandler; +#include "script_component.hpp" + +private ["_params", "_shell"]; +_params = _this select 0; +_shell = _params select 0; +if(alive _shell) then { + drop ["\Ca\Data\Cl_basic","","Billboard",1,30,(getPos _shell),[0,0,0],1,1.275,1.0,0.0,[0.5],[[0,1,0,1]],[0],0.0,2.0,"","",""]; +} else { + [_this select 1] call cba_fnc_removePerFrameHandler; }; \ No newline at end of file diff --git a/addons/frag/functions/fnc_frago.sqf b/addons/frag/functions/fnc_frago.sqf index 1b737dc70d..2396311d8b 100644 --- a/addons/frag/functions/fnc_frago.sqf +++ b/addons/frag/functions/fnc_frago.sqf @@ -1,230 +1,230 @@ -//fnc_frago.sqf -// #define DEBUG_MODE_FULL -#include "script_component.hpp" - -#define FRAG_VEC_VAR 0.004 - -#define MAX_FRAG_COUNT 50 - -if(!isServer) exitWith { }; - -// _startTime = diag_tickTime; -private ["_round", "_lastPos", "_lastVel", "_shellType", "_gun", "_fragTypes", "_warn", "_atlPos", "_isArmed", - "_fuseDist", "_indirectHitRange", "_fragRange", "_c", "_m", "_k", "_gC", "_fragPower", "_fragPowerRandom", - "_manObjects", "_objects", "_crew", "_fragCount", "_fragArcs", "_doRandom", "_target", "_boundingBox", - "_targetPos", "_distance", "_add", "_bbX", "_bbY", "_bbZ", "_cubic", "_targetVel", "_baseVec", "_dir", - "_currentCount", "_count", "_vecVar", "_i", "_vec", "_fp", "_vel", "_fragType", "_fragObj", "_randomCount", - "_sectorSize", "_sectorOffset", "_randomDir"]; - - -_round = _this select 0; -_lastPos = _this select 1; -_lastVel = _this select 2; -_shellType = _this select 3; -_gun = nil; -if((count _this) > 5) then { - _gun = _this select 5; -}; - -_fragTypes = [ - "ACE_frag_tiny", "ACE_frag_tiny", "ACE_frag_tiny", - "ACE_frag_tiny_HD", "ACE_frag_tiny_HD", "ACE_frag_tiny_HD", - "ACE_frag_small","ACE_frag_small","ACE_frag_small","ACE_frag_small", - "ACE_frag_small_HD","ACE_frag_small_HD","ACE_frag_small_HD","ACE_frag_small_HD", - "ACE_frag_medium_HD", "ACE_frag_medium_HD", "ACE_frag_medium_HD", "ACE_frag_medium_HD", "ACE_frag_medium_HD" - ]; - -_warn = false; -if(isArray (configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_CLASSES")) then { - _fragTypes = getArray (configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_CLASSES"); -} else { - _warn = true; -}; - -_atlPos = ASLtoATL _lastPos; - -_isArmed = true; -if(!isNil "_gun") then { - _fuseDist = getNumber(configFile >> "CfgAmmo" >> _shellType >> "fuseDistance"); - _isArmed = ((getPosASL _gun) distance _lastPos > _fuseDist); -}; - -_indirectHitRange = getNumber(configFile >> "CfgAmmo" >> _shellType >> "indirecthitrange"); -_fragRange = 20*_indirectHitRange*4; -// _c = 185; // grams of comp-b -// _m = 210; // grams of fragmentating metal -// _k = 3/5; // spherical K factor -// _gC = 2843; // Gurney constant of comp-b in /ms - -// _c = 429; // grams of tritonal -// _m = 496; // grams of fragmentating metal -// _k = 1/2; // spherical K factor -// _gC = 2320; // Gurney constant of tritonal in /ms - - -_c = getNumber(configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_CHARGE"); -if(_c == 0) then { _c = 1; _warn = true;}; -_m = getNumber(configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_METAL"); -if(_m == 0) then { _m = 2; _warn = true;}; -_k = getNumber(configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_GURNEY_K"); -if(_k == 0) then { _k = 1/2; _warn = true;}; -_gC = getNumber(configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_GURNEY_C"); -if(_gC == 0) then { _gC = 2440; _warn = true;}; - -if(_warn) then { - diag_log text format["Ammo class %1 lacks proper explosive properties definitions for frag!", _shellType]; //TODO: turn this off when we get closer to release -}; - -_fragPower = (((_m/_c)+_k)^-(1/2))*_gC; -_fragPower = _fragPower*0.8; // Gunery equation is for a non-fragmenting metal, imperical value of 80% represents fragmentation - -_fragPowerRandom = _fragPower*0.5; -if((_atlPos select 2) < 0.5) then { - _lastPos set[2, (_lastPos select 2)+0.5]; -}; - -// _manObjects = _atlPos nearEntities ["CaManBase", _fragRange]; - -// setAccTime 0.01; - -//_objects = nearestObjects [_atlPos, ["AllVehicles"], _fragRange]; // Not sure if tracking "ReammoBox" is required, if so revert this change for _objects -_objects = _atlPos nearEntities [["Car", "Motorcycle", "Tank", "StaticWeapon", "CAManBase", "Air", "Ship"], _fragRange]; - -// _objects = _manObjects; -// Target also people inside vehicles or manning weapons -_crew = []; -{ - { - _crew set [count _crew,_x] - } forEach (crew _x); -} forEach _objects; - -_objects = _objects - _crew; -_objects = _objects + _crew; - -_fragCount = 0; - -_fragArcs = []; -_fragArcs set[360, 0]; - -#ifdef DEBUG_MODE_FULL - player sideChat format["_fragRange: %1", _fragRange]; - player sideChat format["_objects: %1", _objects]; -#endif -_doRandom = false; -if(_isArmed && (count _objects) > 0) then { - { - //if(random(1) > 0.5) then { - _target = _x; - if(alive _target) then { - _boundingBox = boundingBox _target; - _targetPos = (getPosASL _target); - _distance = _targetPos distance _lastPos; - _add = (((_boundingBox select 1) select 2)/2)+((((_distance-(_fragpower/8)) max 0)/_fragPower)*10); - _bbX = (abs((_boundingBox select 0) select 0))+((_boundingBox select 1) select 0); - _bbY = (abs((_boundingBox select 0) select 1))+((_boundingBox select 1) select 1); - _bbZ = (abs((_boundingBox select 0) select 2))+((_boundingBox select 1) select 2); - _cubic = _bbX*_bbY*_bbZ; - if(_cubic > 1) then { - _doRandom = true; - - _targetVel = (velocity _target); - - - _targetPos set[0, (_targetPos select 0)+((_targetVel select 0)*(_distance/_fragPower))]; - _targetPos set[1, (_targetPos select 1)+((_targetVel select 1)*(_distance/_fragPower))]; - _targetPos set[2, (_targetPos select 2)+_add]; - - _baseVec = _lastPos vectorFromTo _targetPos; - - _dir = floor(_baseVec call CBA_fnc_vectDir); - _currentCount = _fragArcs select _dir; - if(isNil "_currentCount") then { - _currentCount = 0; - }; - if(_currentCount < 20) then { - _count = ceil(random(sqrt(_m/1000))); - _vecVar = FRAG_VEC_VAR; - if(!(_target isKindOf "Man")) then { - _vecVar = ((sqrt _cubic)/2000)+FRAG_VEC_VAR; - if((count (crew _target)) == 0 && _count > 0) then { - _count = 0 max (_count/2); - }; - }; - for "_i" from 1 to _count do { - _vec = +_baseVec; - - _vec set[0, (_vec select 0)-(_vecVar/2)+(random _vecVar)]; - _vec set[1, (_vec select 1)-(_vecVar/2)+(random _vecVar)]; - _vec set[2, (_vec select 2)-(_vecVar/2)+(random _vecVar)]; - - _fp = (_fragPower-(random (_fragPowerRandom))); - _vel = [ - (_vec select 0)*_fp, - (_vec select 1)*_fp, - (_vec select 2)*_fp - ]; - - _fragType = round (random ((count _fragTypes)-1)); - _fragObj = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; - // diag_log text format["fp: %1 %2", _fp, typeOf _fragObj]; - _fragObj setPosASL _lastPos; - _fragObj setVectorDir _vec; - _fragObj setVelocity _vel; - #ifdef DEBUG_MODE_FULL - GVAR(TOTALFRAGS) = GVAR(TOTALFRAGS) + 1; - GVAR(traceFrags) = true; - #endif - if(GVAR(traceFrags)) then { - [player, _fragObj, [1,0,0,1]] call FUNC(addTrack); - }; - _fragCount = _fragCount + 1; - _currentCount = _currentCount + 1; - }; - _fragArcs set[_dir, _currentCount]; - }; - }; - }; - //}; - if(_fragCount > MAX_FRAG_COUNT) exitWith {}; - } forEach _objects; - if(_fragCount > MAX_FRAG_COUNT) exitWith {}; - _randomCount = (ceil((MAX_FRAG_COUNT-_fragCount)*0.1)) max 0; - _sectorSize = 360 / (_randomCount max 1); - // _doRandom = false; - if(_doRandom) then { - for "_i" from 1 to _randomCount do { - // Distribute evenly - _sectorOffset = 360 * (_i - 1) / (_randomCount max 1); - _randomDir = random(_sectorSize); - _vec = [cos(_sectorOffset + _randomDir), sin(_sectorOffset + _randomDir), sin(30 - (random 45))]; - - _fp = (_fragPower-(random (_fragPowerRandom))); - - _vel = [ - (_vec select 0)*_fp, - (_vec select 1)*_fp, - (_vec select 2)*_fp - ]; - - _fragType = round (random ((count _fragTypes)-1)); - _fragObj = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; - _fragObj setPosASL _lastPos; - _fragObj setVectorDir _vec; - _fragObj setVelocity _vel; - #ifdef DEBUG_MODE_FULL - GVAR(TOTALFRAGS) = GVAR(TOTALFRAGS) + 1; - GVAR(traceFrags) = true; - #endif - if(GVAR(traceFrags)) then { - [player, _fragObj, [1,0.5,0,1]] call FUNC(addTrack); - }; - _fragCount = _fragCount + 1; - }; - }; -}; -// #ifdef DEBUG_MODE_FULL - // player sideChat format["total frags: %1", GVAR(TOTALFRAGS)]; - // player sideChat format["tracks: %1", (count GVAR(trackedObjects))]; -// #endif -// _endTime = diag_tickTime; +//fnc_frago.sqf +// #define DEBUG_MODE_FULL +#include "script_component.hpp" + +#define FRAG_VEC_VAR 0.004 + +#define MAX_FRAG_COUNT 50 + +if(!isServer) exitWith { }; + +// _startTime = diag_tickTime; +private ["_round", "_lastPos", "_lastVel", "_shellType", "_gun", "_fragTypes", "_warn", "_atlPos", "_isArmed", + "_fuseDist", "_indirectHitRange", "_fragRange", "_c", "_m", "_k", "_gC", "_fragPower", "_fragPowerRandom", + "_manObjects", "_objects", "_crew", "_fragCount", "_fragArcs", "_doRandom", "_target", "_boundingBox", + "_targetPos", "_distance", "_add", "_bbX", "_bbY", "_bbZ", "_cubic", "_targetVel", "_baseVec", "_dir", + "_currentCount", "_count", "_vecVar", "_i", "_vec", "_fp", "_vel", "_fragType", "_fragObj", "_randomCount", + "_sectorSize", "_sectorOffset", "_randomDir"]; + + +_round = _this select 0; +_lastPos = _this select 1; +_lastVel = _this select 2; +_shellType = _this select 3; +_gun = nil; +if((count _this) > 5) then { + _gun = _this select 5; +}; + +_fragTypes = [ + "ACE_frag_tiny", "ACE_frag_tiny", "ACE_frag_tiny", + "ACE_frag_tiny_HD", "ACE_frag_tiny_HD", "ACE_frag_tiny_HD", + "ACE_frag_small","ACE_frag_small","ACE_frag_small","ACE_frag_small", + "ACE_frag_small_HD","ACE_frag_small_HD","ACE_frag_small_HD","ACE_frag_small_HD", + "ACE_frag_medium_HD", "ACE_frag_medium_HD", "ACE_frag_medium_HD", "ACE_frag_medium_HD", "ACE_frag_medium_HD" + ]; + +_warn = false; +if(isArray (configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_CLASSES")) then { + _fragTypes = getArray (configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_CLASSES"); +} else { + _warn = true; +}; + +_atlPos = ASLtoATL _lastPos; + +_isArmed = true; +if(!isNil "_gun") then { + _fuseDist = getNumber(configFile >> "CfgAmmo" >> _shellType >> "fuseDistance"); + _isArmed = ((getPosASL _gun) distance _lastPos > _fuseDist); +}; + +_indirectHitRange = getNumber(configFile >> "CfgAmmo" >> _shellType >> "indirecthitrange"); +_fragRange = 20*_indirectHitRange*4; +// _c = 185; // grams of comp-b +// _m = 210; // grams of fragmentating metal +// _k = 3/5; // spherical K factor +// _gC = 2843; // Gurney constant of comp-b in /ms + +// _c = 429; // grams of tritonal +// _m = 496; // grams of fragmentating metal +// _k = 1/2; // spherical K factor +// _gC = 2320; // Gurney constant of tritonal in /ms + + +_c = getNumber(configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_CHARGE"); +if(_c == 0) then { _c = 1; _warn = true;}; +_m = getNumber(configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_METAL"); +if(_m == 0) then { _m = 2; _warn = true;}; +_k = getNumber(configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_GURNEY_K"); +if(_k == 0) then { _k = 1/2; _warn = true;}; +_gC = getNumber(configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_GURNEY_C"); +if(_gC == 0) then { _gC = 2440; _warn = true;}; + +if(_warn) then { + diag_log text format["Ammo class %1 lacks proper explosive properties definitions for frag!", _shellType]; //TODO: turn this off when we get closer to release +}; + +_fragPower = (((_m/_c)+_k)^-(1/2))*_gC; +_fragPower = _fragPower*0.8; // Gunery equation is for a non-fragmenting metal, imperical value of 80% represents fragmentation + +_fragPowerRandom = _fragPower*0.5; +if((_atlPos select 2) < 0.5) then { + _lastPos set[2, (_lastPos select 2)+0.5]; +}; + +// _manObjects = _atlPos nearEntities ["CaManBase", _fragRange]; + +// setAccTime 0.01; + +//_objects = nearestObjects [_atlPos, ["AllVehicles"], _fragRange]; // Not sure if tracking "ReammoBox" is required, if so revert this change for _objects +_objects = _atlPos nearEntities [["Car", "Motorcycle", "Tank", "StaticWeapon", "CAManBase", "Air", "Ship"], _fragRange]; + +// _objects = _manObjects; +// Target also people inside vehicles or manning weapons +_crew = []; +{ + { + _crew set [count _crew,_x] + } forEach (crew _x); +} forEach _objects; + +_objects = _objects - _crew; +_objects = _objects + _crew; + +_fragCount = 0; + +_fragArcs = []; +_fragArcs set[360, 0]; + +#ifdef DEBUG_MODE_FULL + player sideChat format["_fragRange: %1", _fragRange]; + player sideChat format["_objects: %1", _objects]; +#endif +_doRandom = false; +if(_isArmed && (count _objects) > 0) then { + { + //if(random(1) > 0.5) then { + _target = _x; + if(alive _target) then { + _boundingBox = boundingBox _target; + _targetPos = (getPosASL _target); + _distance = _targetPos distance _lastPos; + _add = (((_boundingBox select 1) select 2)/2)+((((_distance-(_fragpower/8)) max 0)/_fragPower)*10); + _bbX = (abs((_boundingBox select 0) select 0))+((_boundingBox select 1) select 0); + _bbY = (abs((_boundingBox select 0) select 1))+((_boundingBox select 1) select 1); + _bbZ = (abs((_boundingBox select 0) select 2))+((_boundingBox select 1) select 2); + _cubic = _bbX*_bbY*_bbZ; + if(_cubic > 1) then { + _doRandom = true; + + _targetVel = (velocity _target); + + + _targetPos set[0, (_targetPos select 0)+((_targetVel select 0)*(_distance/_fragPower))]; + _targetPos set[1, (_targetPos select 1)+((_targetVel select 1)*(_distance/_fragPower))]; + _targetPos set[2, (_targetPos select 2)+_add]; + + _baseVec = _lastPos vectorFromTo _targetPos; + + _dir = floor(_baseVec call CBA_fnc_vectDir); + _currentCount = _fragArcs select _dir; + if(isNil "_currentCount") then { + _currentCount = 0; + }; + if(_currentCount < 20) then { + _count = ceil(random(sqrt(_m/1000))); + _vecVar = FRAG_VEC_VAR; + if(!(_target isKindOf "Man")) then { + _vecVar = ((sqrt _cubic)/2000)+FRAG_VEC_VAR; + if((count (crew _target)) == 0 && _count > 0) then { + _count = 0 max (_count/2); + }; + }; + for "_i" from 1 to _count do { + _vec = +_baseVec; + + _vec set[0, (_vec select 0)-(_vecVar/2)+(random _vecVar)]; + _vec set[1, (_vec select 1)-(_vecVar/2)+(random _vecVar)]; + _vec set[2, (_vec select 2)-(_vecVar/2)+(random _vecVar)]; + + _fp = (_fragPower-(random (_fragPowerRandom))); + _vel = [ + (_vec select 0)*_fp, + (_vec select 1)*_fp, + (_vec select 2)*_fp + ]; + + _fragType = round (random ((count _fragTypes)-1)); + _fragObj = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; + // diag_log text format["fp: %1 %2", _fp, typeOf _fragObj]; + _fragObj setPosASL _lastPos; + _fragObj setVectorDir _vec; + _fragObj setVelocity _vel; + #ifdef DEBUG_MODE_FULL + GVAR(TOTALFRAGS) = GVAR(TOTALFRAGS) + 1; + GVAR(traceFrags) = true; + #endif + if(GVAR(traceFrags)) then { + [player, _fragObj, [1,0,0,1]] call FUNC(addTrack); + }; + _fragCount = _fragCount + 1; + _currentCount = _currentCount + 1; + }; + _fragArcs set[_dir, _currentCount]; + }; + }; + }; + //}; + if(_fragCount > MAX_FRAG_COUNT) exitWith {}; + } forEach _objects; + if(_fragCount > MAX_FRAG_COUNT) exitWith {}; + _randomCount = (ceil((MAX_FRAG_COUNT-_fragCount)*0.1)) max 0; + _sectorSize = 360 / (_randomCount max 1); + // _doRandom = false; + if(_doRandom) then { + for "_i" from 1 to _randomCount do { + // Distribute evenly + _sectorOffset = 360 * (_i - 1) / (_randomCount max 1); + _randomDir = random(_sectorSize); + _vec = [cos(_sectorOffset + _randomDir), sin(_sectorOffset + _randomDir), sin(30 - (random 45))]; + + _fp = (_fragPower-(random (_fragPowerRandom))); + + _vel = [ + (_vec select 0)*_fp, + (_vec select 1)*_fp, + (_vec select 2)*_fp + ]; + + _fragType = round (random ((count _fragTypes)-1)); + _fragObj = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; + _fragObj setPosASL _lastPos; + _fragObj setVectorDir _vec; + _fragObj setVelocity _vel; + #ifdef DEBUG_MODE_FULL + GVAR(TOTALFRAGS) = GVAR(TOTALFRAGS) + 1; + GVAR(traceFrags) = true; + #endif + if(GVAR(traceFrags)) then { + [player, _fragObj, [1,0.5,0,1]] call FUNC(addTrack); + }; + _fragCount = _fragCount + 1; + }; + }; +}; +// #ifdef DEBUG_MODE_FULL + // player sideChat format["total frags: %1", GVAR(TOTALFRAGS)]; + // player sideChat format["tracks: %1", (count GVAR(trackedObjects))]; +// #endif +// _endTime = diag_tickTime; diff --git a/addons/frag/functions/fnc_removeTrack.sqf b/addons/frag/functions/fnc_removeTrack.sqf index 804719a7ca..39c2f24fc7 100644 --- a/addons/frag/functions/fnc_removeTrack.sqf +++ b/addons/frag/functions/fnc_removeTrack.sqf @@ -1,14 +1,14 @@ -#include "script_component.hpp" - -private ["_ret"]; -_ret = true; -if(IS_ARRAY((_this select 0))) then { - _ret = false; -} else { - if((_this select 0) in GVAR(trackedObjects)) then { - GVAR(trackedObjects) = GVAR(trackedObjects) - [(_this select 0)]; - } else { - _ret = false; - }; -}; +#include "script_component.hpp" + +private ["_ret"]; +_ret = true; +if(IS_ARRAY((_this select 0))) then { + _ret = false; +} else { + if((_this select 0) in GVAR(trackedObjects)) then { + GVAR(trackedObjects) = GVAR(trackedObjects) - [(_this select 0)]; + } else { + _ret = false; + }; +}; _ret \ No newline at end of file diff --git a/addons/frag/functions/fnc_spallHP.sqf b/addons/frag/functions/fnc_spallHP.sqf index fb894be499..2dadb1efa3 100644 --- a/addons/frag/functions/fnc_spallHP.sqf +++ b/addons/frag/functions/fnc_spallHP.sqf @@ -1,29 +1,29 @@ -#include "script_component.hpp" - -private ["_initialData", "_currentCount", "_hpData", "_round", "_hpRound"]; -//player sideChat format["f: %1 c: %2", (_this select 0), (count GVAR(spallHPData))]; -if((_this select 0) <= (count GVAR(spallHPData))) then { - _initialData = GVAR(spallHPData) select (_this select 0); - if(!isNil "_initialData") then { - _hpRound = ((_this select 1) select 0) select 2; - _round = _initialData select 3; - _hpDirect = ((_this select 1) select 0) select 10; - if(_hpDirect && {_round == _hpRound}) then { - - { - _hpData = _x; - _round = _initialData select 3; - // diag_log text format["HPDUMP-------------------------------------"]; - // { - // _hp = _x; - // diag_log text format["%1 --", _forEachIndex]; - // { - // diag_log text format["%1: %2", _forEachIndex, _x]; - // } forEach _hp; - // } forEach (_this select 1); - [DFUNC(doSpall), 0, [_this, _forEachIndex]] call cba_fnc_addPerFrameHandler; - // player sideChat "WEEE"; - } forEach (_this select 1); - }; - }; +#include "script_component.hpp" + +private ["_initialData", "_currentCount", "_hpData", "_round", "_hpRound"]; +//player sideChat format["f: %1 c: %2", (_this select 0), (count GVAR(spallHPData))]; +if((_this select 0) <= (count GVAR(spallHPData))) then { + _initialData = GVAR(spallHPData) select (_this select 0); + if(!isNil "_initialData") then { + _hpRound = ((_this select 1) select 0) select 2; + _round = _initialData select 3; + _hpDirect = ((_this select 1) select 0) select 10; + if(_hpDirect && {_round == _hpRound}) then { + + { + _hpData = _x; + _round = _initialData select 3; + // diag_log text format["HPDUMP-------------------------------------"]; + // { + // _hp = _x; + // diag_log text format["%1 --", _forEachIndex]; + // { + // diag_log text format["%1: %2", _forEachIndex, _x]; + // } forEach _hp; + // } forEach (_this select 1); + [DFUNC(doSpall), 0, [_this, _forEachIndex]] call cba_fnc_addPerFrameHandler; + // player sideChat "WEEE"; + } forEach (_this select 1); + }; + }; }; \ No newline at end of file diff --git a/addons/frag/functions/fnc_spallTrack.sqf b/addons/frag/functions/fnc_spallTrack.sqf index a264e1ded9..4cc61d3961 100644 --- a/addons/frag/functions/fnc_spallTrack.sqf +++ b/addons/frag/functions/fnc_spallTrack.sqf @@ -1,40 +1,40 @@ -//fnc_spallTrack.sqf -#include "script_component.hpp" -private ["_params", "_round", "_multiplier", "_delta", "_curPos", "_velocity", "_velocityStep", "_forwardPos", "_intersectsWith", "_index", "_i", "_test", "_hpId", "_data"]; -// setAccTime 0; -_round = _this select 0; -_multiplier = _this select 1; -_foundObjects = _this select 2; -_foundObjectHPIds = _this select 3; - -_delta = (1/diag_fps)*_multiplier; -_curPos = getPosASL _round; -_velocity = velocity _round; - -_velocityStep = [ - (_velocity select 0)*_delta, - (_velocity select 1)*_delta, - (_velocity select 2)*_delta - ]; -_forwardPos = [ - (_curPos select 0) + (_velocityStep select 0), - (_curPos select 1) + (_velocityStep select 1), - (_curPos select 2) + (_velocityStep select 2) - ]; - -_intersectsWith = lineIntersectsWith [_curPos, _forwardPos]; - -if(count _intersectsWith > 0) then { - // player sideChat format["inter: %1", _intersectsWith]; - { - if(!(_x in _foundObjects)) then { - // diag_log text format["Adding HP: %1", _x]; - _index = (count GVAR(spallHPData)); - _hpId = _x addEventHandler ["hitPart", format["[%1, _this] call " + QUOTE(FUNC(spallHP)), _index]]; - _foundObjects set[(count _foundObjects), _x]; - _foundObjectHPIds set[(count _foundObjectHPIds), _hpId]; - _data = [_hpId, _x, typeOf _round, _round, _curPos, _velocity, 0, _foundObjects, _foundObjectHPIds]; - GVAR(spallHPData) set[_index, _data]; - }; - } forEach _intersectsWith; +//fnc_spallTrack.sqf +#include "script_component.hpp" +private ["_params", "_round", "_multiplier", "_delta", "_curPos", "_velocity", "_velocityStep", "_forwardPos", "_intersectsWith", "_index", "_i", "_test", "_hpId", "_data"]; +// setAccTime 0; +_round = _this select 0; +_multiplier = _this select 1; +_foundObjects = _this select 2; +_foundObjectHPIds = _this select 3; + +_delta = (1/diag_fps)*_multiplier; +_curPos = getPosASL _round; +_velocity = velocity _round; + +_velocityStep = [ + (_velocity select 0)*_delta, + (_velocity select 1)*_delta, + (_velocity select 2)*_delta + ]; +_forwardPos = [ + (_curPos select 0) + (_velocityStep select 0), + (_curPos select 1) + (_velocityStep select 1), + (_curPos select 2) + (_velocityStep select 2) + ]; + +_intersectsWith = lineIntersectsWith [_curPos, _forwardPos]; + +if(count _intersectsWith > 0) then { + // player sideChat format["inter: %1", _intersectsWith]; + { + if(!(_x in _foundObjects)) then { + // diag_log text format["Adding HP: %1", _x]; + _index = (count GVAR(spallHPData)); + _hpId = _x addEventHandler ["hitPart", format["[%1, _this] call " + QUOTE(FUNC(spallHP)), _index]]; + _foundObjects set[(count _foundObjects), _x]; + _foundObjectHPIds set[(count _foundObjectHPIds), _hpId]; + _data = [_hpId, _x, typeOf _round, _round, _curPos, _velocity, 0, _foundObjects, _foundObjectHPIds]; + GVAR(spallHPData) set[_index, _data]; + }; + } forEach _intersectsWith; }; \ No newline at end of file diff --git a/addons/frag/functions/fnc_startTracing.sqf b/addons/frag/functions/fnc_startTracing.sqf index 4ed9240ed6..457fec8d57 100644 --- a/addons/frag/functions/fnc_startTracing.sqf +++ b/addons/frag/functions/fnc_startTracing.sqf @@ -1,5 +1,5 @@ -#include "script_component.hpp" -if(!GVAR(tracesStarted)) then { - GVAR(tracesStarted) = true; - GVAR(traceID) = [FUNC(drawTraces), 0, []] call cba_fnc_addPerFrameHandler; +#include "script_component.hpp" +if(!GVAR(tracesStarted)) then { + GVAR(tracesStarted) = true; + GVAR(traceID) = [FUNC(drawTraces), 0, []] call cba_fnc_addPerFrameHandler; }; \ No newline at end of file diff --git a/addons/frag/functions/fnc_stopTracing.sqf b/addons/frag/functions/fnc_stopTracing.sqf index 56d7508d6b..c7822aa8a0 100644 --- a/addons/frag/functions/fnc_stopTracing.sqf +++ b/addons/frag/functions/fnc_stopTracing.sqf @@ -1,5 +1,5 @@ -#include "script_component.hpp" -if(GVAR(tracesStarted)) then { - GVAR(tracesStarted) = false; - [GVAR(traceID)] call cba_fnc_removePerFrameHandler; +#include "script_component.hpp" +if(GVAR(tracesStarted)) then { + GVAR(tracesStarted) = false; + [GVAR(traceID)] call cba_fnc_removePerFrameHandler; }; \ No newline at end of file diff --git a/addons/frag/functions/fnc_trackFragRound.sqf b/addons/frag/functions/fnc_trackFragRound.sqf index 586bbc0166..580994555b 100644 --- a/addons/frag/functions/fnc_trackFragRound.sqf +++ b/addons/frag/functions/fnc_trackFragRound.sqf @@ -1,52 +1,52 @@ -//fnc_trackFragRound.sqf -#include "script_component.hpp" -private ["_params", "_round", "_lastPos", "_lastVel", "_type", "_time", "_doSpall", "_skip", "_explosive", "_indirectRange", "_force", "_fragPower"]; -_params = _this select 0; -_round = _params select 0; -_lastPos = _params select 1; -_lastVel = _params select 2; -_type = _params select 3; -_time = _params select 4; -_doSpall = _params select 6; -_spallTrack = _params select 7; -_foundObjectHPIds = _params select 8; - -if (!alive _round) then { - [_this select 1] call cba_fnc_removePerFrameHandler; - if(_time != time && {_round in GVAR(trackedObjects)} && {!(_round in GVAR(blackList))}) then { - GVAR(trackedObjects) = GVAR(trackedObjects) - [_round]; - _skip = getNumber (configFile >> "CfgAmmo" >> _type >> "ACE_FRAG_SKIP"); - if(_skip == 0) then { - _explosive = getNumber (configFile >> "CfgAmmo" >> _type >> "explosive"); - _indirectRange = getNumber (configFile >> "CfgAmmo" >> _type >> "indirectHitRange"); - _force = getNumber (configFile >> "CfgAmmo" >> _type >> "ACE_FRAG_FORCE"); - _fragPower = getNumber(configFile >> "CfgAmmo" >> _type >> "indirecthit")*(sqrt(_indirectRange)); - if((_explosive > 0.5 && {_indirectRange >= 4.5} && {_fragPower >= 35}) || {_force == 1} ) then { - [QGVAR(frag_eh), _params] call ace_common_fnc_serverEvent; - GVAR(trackedObjects) = GVAR(trackedObjects) - [_round]; - }; - }; - }; - if(_doSpall) then { - GVAR(spallIsTrackingCount) = GVAR(spallIsTrackingCount) - 1; - // diag_log text format["F: %1", _foundObjectHPIds]; - { - if(!isNil "_x") then { - _x removeEventHandler ["hitPart", _foundObjectHPIds select _forEachIndex]; - }; - } forEach _spallTrack; - }; -} else { - if(!(_round in GVAR(trackedObjects)) || {_round in GVAR(blackList)}) then { - [_this select 1] call cba_fnc_removePerFrameHandler; - if(_round in GVAR(blackList)) then { - GVAR(blackList) = GVAR(blackList) - [_round]; - }; - }; - - _params set[1, (getPosASL _round)]; - _params set[2, (velocity _round)]; - if(_doSpall) then { - [_round, 1, _spallTrack, _foundObjectHPIds] call FUNC(spallTrack); - }; -}; +//fnc_trackFragRound.sqf +#include "script_component.hpp" +private ["_params", "_round", "_lastPos", "_lastVel", "_type", "_time", "_doSpall", "_skip", "_explosive", "_indirectRange", "_force", "_fragPower"]; +_params = _this select 0; +_round = _params select 0; +_lastPos = _params select 1; +_lastVel = _params select 2; +_type = _params select 3; +_time = _params select 4; +_doSpall = _params select 6; +_spallTrack = _params select 7; +_foundObjectHPIds = _params select 8; + +if (!alive _round) then { + [_this select 1] call cba_fnc_removePerFrameHandler; + if(_time != time && {_round in GVAR(trackedObjects)} && {!(_round in GVAR(blackList))}) then { + GVAR(trackedObjects) = GVAR(trackedObjects) - [_round]; + _skip = getNumber (configFile >> "CfgAmmo" >> _type >> "ACE_FRAG_SKIP"); + if(_skip == 0) then { + _explosive = getNumber (configFile >> "CfgAmmo" >> _type >> "explosive"); + _indirectRange = getNumber (configFile >> "CfgAmmo" >> _type >> "indirectHitRange"); + _force = getNumber (configFile >> "CfgAmmo" >> _type >> "ACE_FRAG_FORCE"); + _fragPower = getNumber(configFile >> "CfgAmmo" >> _type >> "indirecthit")*(sqrt(_indirectRange)); + if((_explosive > 0.5 && {_indirectRange >= 4.5} && {_fragPower >= 35}) || {_force == 1} ) then { + [QGVAR(frag_eh), _params] call ace_common_fnc_serverEvent; + GVAR(trackedObjects) = GVAR(trackedObjects) - [_round]; + }; + }; + }; + if(_doSpall) then { + GVAR(spallIsTrackingCount) = GVAR(spallIsTrackingCount) - 1; + // diag_log text format["F: %1", _foundObjectHPIds]; + { + if(!isNil "_x") then { + _x removeEventHandler ["hitPart", _foundObjectHPIds select _forEachIndex]; + }; + } forEach _spallTrack; + }; +} else { + if(!(_round in GVAR(trackedObjects)) || {_round in GVAR(blackList)}) then { + [_this select 1] call cba_fnc_removePerFrameHandler; + if(_round in GVAR(blackList)) then { + GVAR(blackList) = GVAR(blackList) - [_round]; + }; + }; + + _params set[1, (getPosASL _round)]; + _params set[2, (velocity _round)]; + if(_doSpall) then { + [_round, 1, _spallTrack, _foundObjectHPIds] call FUNC(spallTrack); + }; +}; diff --git a/addons/frag/functions/fnc_trackTrace.sqf b/addons/frag/functions/fnc_trackTrace.sqf index b0f3f06633..f613426cf3 100644 --- a/addons/frag/functions/fnc_trackTrace.sqf +++ b/addons/frag/functions/fnc_trackTrace.sqf @@ -1,14 +1,14 @@ -#include "script_component.hpp" -_params = _this select 0; -_tracerObj = _params select 0; -_index = _params select 1; - -if(alive _tracerObj && (count GVAR(traces)) > 0) then { - _data = GVAR(traces) select _index; - _positions = _data select 4; - _objVel = velocity _tracerObj; - _objTVel = sqrt((_objVel select 0)^2 + (_objVel select 1)^2 + (_objVel select 2)^2); - _positions set[(count _positions), [(getPos _tracerObj), _objTVel]]; -} else { - [(_this select 1)] call cba_fnc_removePerFrameHandler; +#include "script_component.hpp" +_params = _this select 0; +_tracerObj = _params select 0; +_index = _params select 1; + +if(alive _tracerObj && (count GVAR(traces)) > 0) then { + _data = GVAR(traces) select _index; + _positions = _data select 4; + _objVel = velocity _tracerObj; + _objTVel = sqrt((_objVel select 0)^2 + (_objVel select 1)^2 + (_objVel select 2)^2); + _positions set[(count _positions), [(getPos _tracerObj), _objTVel]]; +} else { + [(_this select 1)] call cba_fnc_removePerFrameHandler; }; \ No newline at end of file diff --git a/addons/frag/functions/fnc_vectorDiffFast.sqf b/addons/frag/functions/fnc_vectorDiffFast.sqf index 0a41860727..39217d7b20 100644 --- a/addons/frag/functions/fnc_vectorDiffFast.sqf +++ b/addons/frag/functions/fnc_vectorDiffFast.sqf @@ -1,15 +1,15 @@ -#include "script_component.hpp" -private["_p1","_p2","_return"]; - -_p1 = _this select 0; -_p2 = _this select 1; - -if ((count _p1) != (count _p2)) then {textLogFormat ["BIS_FNC Error: vectors not of same size"]}; - -_return = []; - -{ - _return set[_forEachIndex, (_p2 select _forEachIndex) - _x]; -} forEach _p1; - -_return +#include "script_component.hpp" +private["_p1","_p2","_return"]; + +_p1 = _this select 0; +_p2 = _this select 1; + +if ((count _p1) != (count _p2)) then {textLogFormat ["BIS_FNC Error: vectors not of same size"]}; + +_return = []; + +{ + _return set[_forEachIndex, (_p2 select _forEachIndex) - _x]; +} forEach _p1; + +_return diff --git a/addons/frag/script_component.hpp b/addons/frag/script_component.hpp index 3740ed23fa..00df542b65 100644 --- a/addons/frag/script_component.hpp +++ b/addons/frag/script_component.hpp @@ -1,16 +1,16 @@ -#define COMPONENT frag -#include "\z\ace\Addons\main\script_mod.hpp" - -//#define DEBUG_ENABLED_FRAG - -#ifdef DEBUG_ENABLED_FRAG - #define DEBUG_MODE_FULL -#endif - -#ifdef DEBUG_SETTINGS_FRAG - #define DEBUG_SETTINGS DEBUG_SETTINGS_FRAG -#endif - -#include "\z\ace\Addons\main\script_macros.hpp" - +#define COMPONENT frag +#include "\z\ace\Addons\main\script_mod.hpp" + +//#define DEBUG_ENABLED_FRAG + +#ifdef DEBUG_ENABLED_FRAG + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_FRAG + #define DEBUG_SETTINGS DEBUG_SETTINGS_FRAG +#endif + +#include "\z\ace\Addons\main\script_macros.hpp" + #define ACE_TRACE_DRAW_INC 1 \ No newline at end of file diff --git a/addons/frag/stringtable.xml b/addons/frag/stringtable.xml index 4ae3979667..7c3112ec2d 100644 --- a/addons/frag/stringtable.xml +++ b/addons/frag/stringtable.xml @@ -1,15 +1,15 @@ - - - - - - - Disable Fragmentation - Zakázat fragmentaci granátů - Weapons: Keine Schrapnelle - Wyłącz głowice fragmentacyjne - Выключить разлёт осколков - - - + + + + + + + Disable Fragmentation + Zakázat fragmentaci granátů + Weapons: Keine Schrapnelle + Wyłącz głowice fragmentacyjne + Выключить разлёт осколков + + + \ No newline at end of file diff --git a/addons/goggles/stringtable.xml b/addons/goggles/stringtable.xml index 1756442176..9b2e6fba12 100644 --- a/addons/goggles/stringtable.xml +++ b/addons/goggles/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -8,7 +8,7 @@ Mostrar efectos de las gafas en tercera persona Zobrazit účinky brýlí v třetí osobě Effets de lunettes à la 3ème personne - Отображать эффект очков в третьем лице + Отображать эффект очков от третьего лица Szemüveg effekt mutatása külső nézetből Włącz efekty gogli w trzeciej osobie Mostrar efeitos de óculos em Terceira Pessoa @@ -27,4 +27,4 @@ Pulisci gli occhiali - + \ No newline at end of file diff --git a/addons/grenades/stringtable.xml b/addons/grenades/stringtable.xml index 1129d44271..803aa0a220 100644 --- a/addons/grenades/stringtable.xml +++ b/addons/grenades/stringtable.xml @@ -1,5 +1,5 @@ - - + + @@ -93,7 +93,7 @@ Les grenades incapacitantes servent à désorienter ou distraire une menace pendant quelques secondes. Granat ogłusza, nie zabijając przeciwnika. Detonacja daje efekt oślepiającego błysku i głośnego huku. Omračující granát je taktická nesmrtící zbraň používaná při záchraně rukojmí a zvládání davu. - Граната XM84 (M84) - не летального действия, и предназначена для отвлечения и временного вывода из строя, либо дезориентации противника. Основное использование нашла при освобождении заложников, захвате преступников и террористов, а также проведении диверсионных миссий. + XM84 (M84) - граната нелетального действия, и предназначена для отвлечения и временного вывода из строя, либо дезориентации противника. Основное использование нашла при освобождении заложников, захвате преступников и террористов, а также проведении диверсионных миссий. Eldobás után felrobban és éles hang, valamint fényhatással zavarja össze a környezetében tartózkodókat. Anche conosciuta come flashbang. Causa accecamento immediato, sensazioni di sposatezza, mancanza d'equilibrio e disturbi al timpano. Um tipo de granada não-letal destinado a confundir, desorientar e distrair uma potencial ameaça. @@ -243,4 +243,4 @@ M127A1 (Amarilla) - + \ No newline at end of file diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index f042128301..ba4d17e112 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -102,6 +102,7 @@ Disable ear ringing Desactivar zumbido de oídos Knalltrauma deaktivieren + Отключить эффект баротравмы \ No newline at end of file diff --git a/addons/interact_menu/XEH_clientInit.sqf b/addons/interact_menu/XEH_clientInit.sqf index bcb2d5aa8e..590ad6624d 100644 --- a/addons/interact_menu/XEH_clientInit.sqf +++ b/addons/interact_menu/XEH_clientInit.sqf @@ -1,52 +1,52 @@ -//XEH_clientInit.sqf -#include "script_component.hpp" - -if (!hasInterface) exitWith {}; - -// Install the render EH on the main display -addMissionEventHandler ["Draw3D", DFUNC(render)]; - -// This spawn is probably worth keeping, as pfh don't work natively on the briefing screen and IDK how reliable the hack we implemented for them is. -// The thread dies as soon as the mission start, so it's not really compiting for scheduler space. -[] spawn { - // Wait until the map display is detected - waitUntil {(!isNull findDisplay 12)}; - - // Install the render EH on the map screen - ((findDisplay 12) displayCtrl 51) ctrlAddEventHandler ["Draw", DFUNC(render)]; -}; - - -["ACE3", QGVAR(InteractKey), (localize "STR_ACE_Interact_Menu_InteractKey"), -{ - // Conditions: canInteract - if !([ACE_player, objNull, ["isNotInside","isNotDragging", "isNotCarrying", "isNotSwimming", "notOnMap", "isNotEscorting", "isNotSurrendering"]] call EFUNC(common,canInteractWith)) exitWith {false}; - // Statement - [0] call FUNC(keyDown) -}, -{[0] call FUNC(keyUp)}, -[219, [false, false, false]], false] call cba_fnc_addKeybind; //Left Windows Key - -["ACE3", QGVAR(SelfInteractKey), (localize "STR_ACE_Interact_Menu_SelfInteractKey"), -{ - // Conditions: canInteract - if !([ACE_player, objNull, ["isNotInside","isNotDragging", "isNotCarrying", "isNotSwimming", "notOnMap", "isNotEscorting", "isNotSurrendering"]] call EFUNC(common,canInteractWith)) exitWith {false}; - // Statement - [1] call FUNC(keyDown) -}, -{[1] call FUNC(keyUp)}, -[219, [false, true, false]], false] call cba_fnc_addKeybind; //Left Windows Key + Ctrl/Strg - - -// Listens for the falling unconscious event, just in case the menu needs to be closed -["medical_onUnconscious", { - // If no menu is open just quit - if (GVAR(openedMenuType) < 0) exitWith {}; - - EXPLODE_2_PVT(_this,_unit,_isUnconscious); - - if (_unit != ACE_player || !_isUnconscious) exitWith {}; - - GVAR(actionSelected) = false; - [] call FUNC(keyUp); -}] call EFUNC(common,addEventhandler); +//XEH_clientInit.sqf +#include "script_component.hpp" + +if (!hasInterface) exitWith {}; + +// Install the render EH on the main display +addMissionEventHandler ["Draw3D", DFUNC(render)]; + +// This spawn is probably worth keeping, as pfh don't work natively on the briefing screen and IDK how reliable the hack we implemented for them is. +// The thread dies as soon as the mission start, so it's not really compiting for scheduler space. +[] spawn { + // Wait until the map display is detected + waitUntil {(!isNull findDisplay 12)}; + + // Install the render EH on the map screen + ((findDisplay 12) displayCtrl 51) ctrlAddEventHandler ["Draw", DFUNC(render)]; +}; + + +["ACE3", QGVAR(InteractKey), (localize "STR_ACE_Interact_Menu_InteractKey"), +{ + // Conditions: canInteract + if !([ACE_player, objNull, ["isNotInside","isNotDragging", "isNotCarrying", "isNotSwimming", "notOnMap", "isNotEscorting", "isNotSurrendering"]] call EFUNC(common,canInteractWith)) exitWith {false}; + // Statement + [0] call FUNC(keyDown) +}, +{[0] call FUNC(keyUp)}, +[219, [false, false, false]], false] call cba_fnc_addKeybind; //Left Windows Key + +["ACE3", QGVAR(SelfInteractKey), (localize "STR_ACE_Interact_Menu_SelfInteractKey"), +{ + // Conditions: canInteract + if !([ACE_player, objNull, ["isNotInside","isNotDragging", "isNotCarrying", "isNotSwimming", "notOnMap", "isNotEscorting", "isNotSurrendering"]] call EFUNC(common,canInteractWith)) exitWith {false}; + // Statement + [1] call FUNC(keyDown) +}, +{[1] call FUNC(keyUp)}, +[219, [false, true, false]], false] call cba_fnc_addKeybind; //Left Windows Key + Ctrl/Strg + + +// Listens for the falling unconscious event, just in case the menu needs to be closed +["medical_onUnconscious", { + // If no menu is open just quit + if (GVAR(openedMenuType) < 0) exitWith {}; + + EXPLODE_2_PVT(_this,_unit,_isUnconscious); + + if (_unit != ACE_player || !_isUnconscious) exitWith {}; + + GVAR(actionSelected) = false; + [] call FUNC(keyUp); +}] call EFUNC(common,addEventhandler); diff --git a/addons/interact_menu/stringtable.xml b/addons/interact_menu/stringtable.xml index b3de5efddf..bbb17efd87 100644 --- a/addons/interact_menu/stringtable.xml +++ b/addons/interact_menu/stringtable.xml @@ -1,26 +1,31 @@  - + Always display cursor for self interaction Immer den Cursor für Selbst-Interaktionen anzeigen. + Всегда показывать курсор для взаимодействия с собой Interact Key Interaktionstaste + Клавиша взаимодействия Self Interaction Key Selbst-Interaktionstaste + Клавиша взаимодействия (с собой) Self Actions Selbst-Interaktion + Действия с собой Vehicle Actions Fahrzeug-Interaktion + Действия на транспорте \ No newline at end of file diff --git a/addons/interaction/stringtable.xml b/addons/interaction/stringtable.xml index e85d0d3b47..8016079b90 100644 --- a/addons/interaction/stringtable.xml +++ b/addons/interaction/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -616,7 +616,7 @@ Modyfikator Modifier la touche Tecla modificadora - клавиша-модификатор + Клавиша-модификатор Tecla Modificadora Modifica Tasto Módosító billentyű @@ -664,6 +664,7 @@ Passengers Passagiere + Пассажиры \ No newline at end of file diff --git a/addons/inventory/stringtable.xml b/addons/inventory/stringtable.xml index f93e0d9627..75f15e3720 100644 --- a/addons/inventory/stringtable.xml +++ b/addons/inventory/stringtable.xml @@ -1,14 +1,16 @@  - + Make Inventory Display Bigger Die Anzeige des Inventar vergrößern. + Сделать окно инвентаря больше Normally inventory display is scaled by UI size. This allows scaling the Inventory UI size up, but doesn't increase font size allowing more rows displayed. Normalerweise wird die Größe des Inventars mit der Größe der UI skaliert. Diese Einstellung allerdings vergrößert das Inventar bei gleichbleibender Schriftgröße, so dass mehr Einträge angzeigt werden können. + Обычно, окно инвентаря зависит от размеров пользовательского интерфейса. Эта настройка позволяет увеличить размер окна инвентаря в пользовательском интерфейсе, не увеличивая размера шрифтов, так что отображется большее количество строк. \ No newline at end of file diff --git a/addons/kestrel/stringtable.xml b/addons/kestrel/stringtable.xml index 5f54fd6489..baae118891 100644 --- a/addons/kestrel/stringtable.xml +++ b/addons/kestrel/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -34,7 +34,7 @@ Monitoraggio Balistico Attivo Applied Ballistics Meter Medidor Balístico Ativo - метеостанция + Метеостанция Open Kestrel diff --git a/addons/laser/CfgEventhandlers.hpp b/addons/laser/CfgEventhandlers.hpp index bad89fd048..e2039a80c7 100644 --- a/addons/laser/CfgEventhandlers.hpp +++ b/addons/laser/CfgEventhandlers.hpp @@ -1,11 +1,11 @@ -class Extended_PreInit_EventHandlers { - class ADDON { - init = QUOTE(call COMPILE_FILE(XEH_pre_init)); - }; -}; - -class Extended_PostInit_EventHandlers { - class ADDON { - init = QUOTE(call COMPILE_FILE(XEH_post_init)); - }; -}; +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_pre_init)); + }; +}; + +class Extended_PostInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_post_init)); + }; +}; diff --git a/addons/laser/CfgVehicles.hpp b/addons/laser/CfgVehicles.hpp index 07b8055f0e..15b4a50567 100644 --- a/addons/laser/CfgVehicles.hpp +++ b/addons/laser/CfgVehicles.hpp @@ -1,9 +1,9 @@ -class CfgVehicles { - class All; - - class LaserTarget: All { - class EventHandlers { - init = QUOTE(_this call FUNC(laser_init)); - }; - }; +class CfgVehicles { + class All; + + class LaserTarget: All { + class EventHandlers { + init = QUOTE(_this call FUNC(laser_init)); + }; + }; }; \ No newline at end of file diff --git a/addons/laser/XEH_post_init.sqf b/addons/laser/XEH_post_init.sqf index 6904ee6c47..a4e4806591 100644 --- a/addons/laser/XEH_post_init.sqf +++ b/addons/laser/XEH_post_init.sqf @@ -1,3 +1,3 @@ -#include "script_component.hpp" -NO_DEDICATED; - +#include "script_component.hpp" +NO_DEDICATED; + diff --git a/addons/laser/XEH_pre_init.sqf b/addons/laser/XEH_pre_init.sqf index 8b39c429b6..984bf720d8 100644 --- a/addons/laser/XEH_pre_init.sqf +++ b/addons/laser/XEH_pre_init.sqf @@ -1,26 +1,26 @@ -#include "script_component.hpp" - -PREP(rotateVectLineGetMap); -PREP(rotateVectLine); -PREP(shootRay); -PREP(shootCone); -PREP(checkLos); - -PREP(findLaserDesignator); -PREP(findStrongestRay); - -PREP(translateToModelSpace); -PREP(translateToWeaponSpace); - -PREP(laser_init); - -GVAR(laser) = nil; // a single hud draws 1 laser at a time - -PREP(laserTargetPFH); - -ACE_LASERS = []; - -ACE_DEFAULT_LASER_CODE = 1000; -ACE_DEFAULT_FIRE_SELECTION = [FIREMODE_DIRECT_LOAL, ACE_DEFAULT_LASER_CODE]; - +#include "script_component.hpp" + +PREP(rotateVectLineGetMap); +PREP(rotateVectLine); +PREP(shootRay); +PREP(shootCone); +PREP(checkLos); + +PREP(findLaserDesignator); +PREP(findStrongestRay); + +PREP(translateToModelSpace); +PREP(translateToWeaponSpace); + +PREP(laser_init); + +GVAR(laser) = nil; // a single hud draws 1 laser at a time + +PREP(laserTargetPFH); + +ACE_LASERS = []; + +ACE_DEFAULT_LASER_CODE = 1000; +ACE_DEFAULT_FIRE_SELECTION = [FIREMODE_DIRECT_LOAL, ACE_DEFAULT_LASER_CODE]; + FUNC(getPosASL) = {visiblePositionASL (_this select 0)}; \ No newline at end of file diff --git a/addons/laser/config.cpp b/addons/laser/config.cpp index 4b209b866e..f257a35321 100644 --- a/addons/laser/config.cpp +++ b/addons/laser/config.cpp @@ -1,14 +1,14 @@ -#include "script_component.hpp" - -class CfgPatches { - class ADDON { - units[] = {}; - weapons[] = {}; - requiredVersion = REQUIRED_VERSION; - requiredAddons[] = { "ace_common" }; - VERSION_CONFIG; - }; -}; - -#include "CfgEventhandlers.hpp" +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = { "ace_common" }; + VERSION_CONFIG; + }; +}; + +#include "CfgEventhandlers.hpp" #include "CfgVehicles.hpp" \ No newline at end of file diff --git a/addons/laser/functions/fnc_checkLos.sqf b/addons/laser/functions/fnc_checkLos.sqf index 9888642a80..0cbeffaea2 100644 --- a/addons/laser/functions/fnc_checkLos.sqf +++ b/addons/laser/functions/fnc_checkLos.sqf @@ -1,31 +1,31 @@ -#include "script_component.hpp" - -private ["_pos1", "_pos2", "_spacing", "_vectorTo", "_x", "_y", "_z", "_distance", "_count", "_return", "_alt", "_pos", "_designator", "_seeker"]; -_pos1 = _this select 0; -_pos2 = _this select 1; -_designator = _this select 2; -_seeker = _this select 3; -_spacing = 100; -if((count _this) > 4) then { - _spacing = _this select 4; -}; - -_return = true; -_vectorTo = [_pos2, _pos1] call BIS_fnc_vectorFromXToY; - -_x = (_vectorTo select 0)*0.25; -_y = (_vectorTo select 1)*0.25; -_z = (_vectorTo select 2)*0.25; - -_pos2 = [(_pos2 select 0) + _x, (_pos2 select 1) + _y, (_pos2 select 2) + _z]; - -// player sideChat format["new los check"]; -if(terrainIntersect [_pos2, _pos1]) then { - _return = false; -} else { - if(lineIntersects [_pos2, _pos1]) then { // should take as arguments and add to this command objects to exclude - target and observer - // player sideChat format["with: %1", lineIntersectsWith [_pos1, _pos2]]; - _return = false; - }; -}; +#include "script_component.hpp" + +private ["_pos1", "_pos2", "_spacing", "_vectorTo", "_x", "_y", "_z", "_distance", "_count", "_return", "_alt", "_pos", "_designator", "_seeker"]; +_pos1 = _this select 0; +_pos2 = _this select 1; +_designator = _this select 2; +_seeker = _this select 3; +_spacing = 100; +if((count _this) > 4) then { + _spacing = _this select 4; +}; + +_return = true; +_vectorTo = [_pos2, _pos1] call BIS_fnc_vectorFromXToY; + +_x = (_vectorTo select 0)*0.25; +_y = (_vectorTo select 1)*0.25; +_z = (_vectorTo select 2)*0.25; + +_pos2 = [(_pos2 select 0) + _x, (_pos2 select 1) + _y, (_pos2 select 2) + _z]; + +// player sideChat format["new los check"]; +if(terrainIntersect [_pos2, _pos1]) then { + _return = false; +} else { + if(lineIntersects [_pos2, _pos1]) then { // should take as arguments and add to this command objects to exclude - target and observer + // player sideChat format["with: %1", lineIntersectsWith [_pos1, _pos2]]; + _return = false; + }; +}; _return; \ No newline at end of file diff --git a/addons/laser/functions/fnc_findLaserDesignator.sqf b/addons/laser/functions/fnc_findLaserDesignator.sqf index d10e221501..997900c8dd 100644 --- a/addons/laser/functions/fnc_findLaserDesignator.sqf +++ b/addons/laser/functions/fnc_findLaserDesignator.sqf @@ -1,70 +1,70 @@ -#include "script_component.hpp" - -private ["_missile", "_headingPitch", "_found", "_vectorTo", "_polarTo", "_dir", "_vertOk", "_horzOk", "_fov", - "_closestDistance", "_pos1", "_pos2", "_disCheck", "_currentTarget", "_potentialTargets", "_offset", "_vector"]; -_missile = _this select 0; -_laserCode = _this select 1; -_fov = if (count _this > 2) then {_this select 2} else {75}; -_vector = if (count _this > 3) then {_this select 3} else {vectorDir _missile}; -_offset = if (count _this > 4) then {_this select 4} else {[0,0,0]}; - -_headingPitch = _vector call CBA_fnc_vect2polar; -_currentTarget = nil; -_found = false; - -LOG("Searching lasers"); -if(!(isNil "ACE_LASERS")) then { - _potentialTargets = []; - TRACE_1("", ACE_LASERS); - - { - if(!(isNull _x)) then { - _sensorPos = ATLtoASL(_missile modelToWorldVisual _offset); - _vectorTo = [_sensorPos, ([_x] call FUNC(getPosASL))] call BIS_fnc_vectorFromXToY; - _polarTo = _vectorTo call CBA_fnc_vect2polar; - _dir = _polarTo select 1; - _dir = _dir - (_headingPitch select 1); - - TRACE_4("Calc", _sensorPos, _vectorTo, _polarTo, _dir); - - if (_dir < 0) then {_dir = _dir + 360}; - if (_dir > 360) then {_dir = _dir - 360}; - _vertOk = false; - _horzOk = false; - if(_dir < _fov || {_dir > (360-_fov)}) then { - _horzOk = true; - }; - if(abs((abs(_polarTo select 2))-(abs(_headingPitch select 2))) < _fov) then { - _vertOk = true; - }; - - TRACE_2("Results", _vertOk, _horzOk); - - if(_vertOk && {_horzOk}) then { - // Does the laser currently have our current code, if we have one? - _targetCode = _x getVariable ["ACE_LASERTARGET_CODE", ACE_DEFAULT_LASER_CODE]; - TRACE_1("Target in sight, checking code", _targetCode, _laserCode); - if(_targetCode == _laserCode) then { - _potentialTargets set[(count _potentialTargets), _x]; - }; - }; - }; - - } forEach ACE_LASERS; - - TRACE_1("", _potentialTargets); - - _closestDistance = 100000; - { - _pos1 = (getPosASL _missile); - _pos2 = ([_x] call FUNC(getPosASL)); - _disCheck = _pos1 distance _pos2; - // shouldn't this bail out when a valid target is found instead of iterating over all potential targets ? - if(_disCheck < _closestDistance && {[_pos1, _pos2, _x, _missile] call FUNC(checkLos)}) then { - _found = true; - _currentTarget = _x; - _closestDistance = _disCheck; - }; - } forEach _potentialTargets; -}; +#include "script_component.hpp" + +private ["_missile", "_headingPitch", "_found", "_vectorTo", "_polarTo", "_dir", "_vertOk", "_horzOk", "_fov", + "_closestDistance", "_pos1", "_pos2", "_disCheck", "_currentTarget", "_potentialTargets", "_offset", "_vector"]; +_missile = _this select 0; +_laserCode = _this select 1; +_fov = if (count _this > 2) then {_this select 2} else {75}; +_vector = if (count _this > 3) then {_this select 3} else {vectorDir _missile}; +_offset = if (count _this > 4) then {_this select 4} else {[0,0,0]}; + +_headingPitch = _vector call CBA_fnc_vect2polar; +_currentTarget = nil; +_found = false; + +LOG("Searching lasers"); +if(!(isNil "ACE_LASERS")) then { + _potentialTargets = []; + TRACE_1("", ACE_LASERS); + + { + if(!(isNull _x)) then { + _sensorPos = ATLtoASL(_missile modelToWorldVisual _offset); + _vectorTo = [_sensorPos, ([_x] call FUNC(getPosASL))] call BIS_fnc_vectorFromXToY; + _polarTo = _vectorTo call CBA_fnc_vect2polar; + _dir = _polarTo select 1; + _dir = _dir - (_headingPitch select 1); + + TRACE_4("Calc", _sensorPos, _vectorTo, _polarTo, _dir); + + if (_dir < 0) then {_dir = _dir + 360}; + if (_dir > 360) then {_dir = _dir - 360}; + _vertOk = false; + _horzOk = false; + if(_dir < _fov || {_dir > (360-_fov)}) then { + _horzOk = true; + }; + if(abs((abs(_polarTo select 2))-(abs(_headingPitch select 2))) < _fov) then { + _vertOk = true; + }; + + TRACE_2("Results", _vertOk, _horzOk); + + if(_vertOk && {_horzOk}) then { + // Does the laser currently have our current code, if we have one? + _targetCode = _x getVariable ["ACE_LASERTARGET_CODE", ACE_DEFAULT_LASER_CODE]; + TRACE_1("Target in sight, checking code", _targetCode, _laserCode); + if(_targetCode == _laserCode) then { + _potentialTargets set[(count _potentialTargets), _x]; + }; + }; + }; + + } forEach ACE_LASERS; + + TRACE_1("", _potentialTargets); + + _closestDistance = 100000; + { + _pos1 = (getPosASL _missile); + _pos2 = ([_x] call FUNC(getPosASL)); + _disCheck = _pos1 distance _pos2; + // shouldn't this bail out when a valid target is found instead of iterating over all potential targets ? + if(_disCheck < _closestDistance && {[_pos1, _pos2, _x, _missile] call FUNC(checkLos)}) then { + _found = true; + _currentTarget = _x; + _closestDistance = _disCheck; + }; + } forEach _potentialTargets; +}; [_found, _currentTarget] \ No newline at end of file diff --git a/addons/laser/functions/fnc_findStrongestRay.sqf b/addons/laser/functions/fnc_findStrongestRay.sqf index e4238361cb..ca9be7cab8 100644 --- a/addons/laser/functions/fnc_findStrongestRay.sqf +++ b/addons/laser/functions/fnc_findStrongestRay.sqf @@ -1,49 +1,49 @@ -#include "script_component.hpp" - -_list = _this select 0; -_checkPos = _this select 1; -_spots = []; -_outliers = []; -_spot = []; -_testPos = (_list select 0) select 0; -{ - _samplePos = _x select 0; - if(!lineIntersects [_samplePos, _checkPos] && {!terrainIntersectASL [_samplePos, _checkPos]}) then { - if(_samplePos distance _testPos < 2) then { - _spot pushBack _samplePos; - } else { - _outliers pushBack _samplePos; - }; - }; -} forEach _list; -_spots pushBack _spot; - -if(count _outliers > 0) then { - for "_i" from 1 to 3 do { - _remainingSpots = _outliers; - _outliers = []; - _spot = []; - _testPos = (_remainingSpots select 0); - { - _samplePos = _x; - if(!lineIntersects [_samplePos, _checkPos] && {!terrainIntersectASL [_samplePos, _checkPos]}) then { - if(_samplePos distance _testPos < 2) then { - _spot pushBack _samplePos; - } else { - _outliers pushBack _samplePos; - }; - }; - } forEach _remainingSpots; - _spots pushBack _spot; - }; -}; -_largest = 0; -_largestSpot = []; -{ - if((count _x) > _largest) then { - _largest = (count _x); - _largestSpot = _x; - }; -} forEach _spots; -// player sideChat format["g: %1", _spots]; +#include "script_component.hpp" + +_list = _this select 0; +_checkPos = _this select 1; +_spots = []; +_outliers = []; +_spot = []; +_testPos = (_list select 0) select 0; +{ + _samplePos = _x select 0; + if(!lineIntersects [_samplePos, _checkPos] && {!terrainIntersectASL [_samplePos, _checkPos]}) then { + if(_samplePos distance _testPos < 2) then { + _spot pushBack _samplePos; + } else { + _outliers pushBack _samplePos; + }; + }; +} forEach _list; +_spots pushBack _spot; + +if(count _outliers > 0) then { + for "_i" from 1 to 3 do { + _remainingSpots = _outliers; + _outliers = []; + _spot = []; + _testPos = (_remainingSpots select 0); + { + _samplePos = _x; + if(!lineIntersects [_samplePos, _checkPos] && {!terrainIntersectASL [_samplePos, _checkPos]}) then { + if(_samplePos distance _testPos < 2) then { + _spot pushBack _samplePos; + } else { + _outliers pushBack _samplePos; + }; + }; + } forEach _remainingSpots; + _spots pushBack _spot; + }; +}; +_largest = 0; +_largestSpot = []; +{ + if((count _x) > _largest) then { + _largest = (count _x); + _largestSpot = _x; + }; +} forEach _spots; +// player sideChat format["g: %1", _spots]; _largestSpot select (random (floor(count _largestSpot))); \ No newline at end of file diff --git a/addons/laser/functions/fnc_laserTargetPFH.sqf b/addons/laser/functions/fnc_laserTargetPFH.sqf index bdab413685..448edc3128 100644 --- a/addons/laser/functions/fnc_laserTargetPFH.sqf +++ b/addons/laser/functions/fnc_laserTargetPFH.sqf @@ -1,26 +1,26 @@ -#include "script_component.hpp" - -private["_args", "_laserTarget"]; -//TRACE_1("enter", _this); -_args = _this select 0; -_laserTarget = _args select 0; - -if(isNull _laserTarget || !alive player) exitWith { - [(_this select 1)] call cba_fnc_removePerFrameHandler; - REM(ACE_LASERS, _laserTarget); -}; - -_end = diag_tickTime; - -#ifdef DEBUG_MODE_FULL -// Iconize the location of the actual laserTarget -_pos = [_laserTarget] call FUNC(getPosASL); -drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\select_target_ca.paa", [1,0,0,1], (ASLtoATL _pos), 0.75, 0.75, 0, "", 0.5, 0.025, "TahomaB"]; - -{ - drawLine3D [ASLtoATL (_x select 0), ASLtoATL (_x select 1), (_x select 2)]; - drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", (_x select 2), ASLtoATL (_x select 1), 0.75, 0.75, 0, "", 0.5, 0.025, "TahomaB"]; -} forEach DRAW_LINES; -DRAW_LINES = []; -#endif - +#include "script_component.hpp" + +private["_args", "_laserTarget"]; +//TRACE_1("enter", _this); +_args = _this select 0; +_laserTarget = _args select 0; + +if(isNull _laserTarget || !alive player) exitWith { + [(_this select 1)] call cba_fnc_removePerFrameHandler; + REM(ACE_LASERS, _laserTarget); +}; + +_end = diag_tickTime; + +#ifdef DEBUG_MODE_FULL +// Iconize the location of the actual laserTarget +_pos = [_laserTarget] call FUNC(getPosASL); +drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\select_target_ca.paa", [1,0,0,1], (ASLtoATL _pos), 0.75, 0.75, 0, "", 0.5, 0.025, "TahomaB"]; + +{ + drawLine3D [ASLtoATL (_x select 0), ASLtoATL (_x select 1), (_x select 2)]; + drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", (_x select 2), ASLtoATL (_x select 1), 0.75, 0.75, 0, "", 0.5, 0.025, "TahomaB"]; +} forEach DRAW_LINES; +DRAW_LINES = []; +#endif + diff --git a/addons/laser/functions/fnc_laser_init.sqf b/addons/laser/functions/fnc_laser_init.sqf index 9fcb439032..6ae0c9467e 100644 --- a/addons/laser/functions/fnc_laser_init.sqf +++ b/addons/laser/functions/fnc_laser_init.sqf @@ -1,25 +1,25 @@ -#include "script_component.hpp" -PARAMS_1(_laserTarget); - -TRACE_1("enter", _this); - -// Add the target to the global targets array -// Everyone tracks them - -// Add the laser localized to the laser array, and give it the default localized code -PUSH(ACE_LASERS, _laserTarget); -// Check the vehicle, otherwise use the default -_laserTarget setVariable ["ACE_LASERTARGET_CODE", ACE_DEFAULT_LASER_CODE, false]; -// Clean the lasers of any null objects while we are here -REM(ACE_LASERS, objNull); - -if(!(local _laserTarget)) exitWith { }; -// The target is local, so its on this client -if(!isDedicated) then { - _laserTarget setVariable ["ACE_LASERTARGET_SHOOTER", player, true]; - - [FUNC(laserTargetPFH), 0, [_laserTarget, player]] call cba_fnc_addPerFrameHandler; -} else { - // server side ownership of laser - //_laserTarget setVariable ["ACE_LASERTARGET_SHOOTER", nil, false]; -}; +#include "script_component.hpp" +PARAMS_1(_laserTarget); + +TRACE_1("enter", _this); + +// Add the target to the global targets array +// Everyone tracks them + +// Add the laser localized to the laser array, and give it the default localized code +PUSH(ACE_LASERS, _laserTarget); +// Check the vehicle, otherwise use the default +_laserTarget setVariable ["ACE_LASERTARGET_CODE", ACE_DEFAULT_LASER_CODE, false]; +// Clean the lasers of any null objects while we are here +REM(ACE_LASERS, objNull); + +if(!(local _laserTarget)) exitWith { }; +// The target is local, so its on this client +if(!isDedicated) then { + _laserTarget setVariable ["ACE_LASERTARGET_SHOOTER", player, true]; + + [FUNC(laserTargetPFH), 0, [_laserTarget, player]] call cba_fnc_addPerFrameHandler; +} else { + // server side ownership of laser + //_laserTarget setVariable ["ACE_LASERTARGET_SHOOTER", nil, false]; +}; diff --git a/addons/laser/functions/fnc_rotateVectLine.sqf b/addons/laser/functions/fnc_rotateVectLine.sqf index b0360cc330..ae476559b8 100644 --- a/addons/laser/functions/fnc_rotateVectLine.sqf +++ b/addons/laser/functions/fnc_rotateVectLine.sqf @@ -1,38 +1,38 @@ -#include "script_component.hpp" - -_map = _this select 0; -_theta = _this select 1; - -_p = _map select 0; -_p1 = _map select 1; -_p2 = _map select 2; - -_q1 = +(_map select 3); -_q2 = +(_map select 4); -_u = _map select 5; -_d = _map select 6; - -/* Step 4 */ -_q2 set[0, (_q1 select 0) * cos(_theta) - (_q1 select 1) * sin(_theta)]; -_q2 set[1, (_q1 select 0) * sin(_theta) + (_q1 select 1) * cos(_theta)]; -_q2 set[2, (_q1 select 2)]; - -/* Inverse of step 3 */ -_q1 set[0, (_q2 select 0) * _d + (_q2 select 2) * (_u select 0)]; -_q1 set[1, (_q2 select 1)]; -_q1 set[2, - (_q2 select 0) * (_u select 0) + (_q2 select 2) * _d]; - -/* Inverse of step 2 */ -if (_d != 0) then { - _q2 set[0, (_q1 select 0)]; - _q2 set[1, (_q1 select 1) * (_u select 2) / _d + (_q1 select 2) * (_u select 1) / _d]; - _q2 set[2, - (_q1 select 1) * (_u select 1) / _d + (_q1 select 2) * (_u select 2) / _d]; -} else { - _q2 = _q1; -}; - -/* Inverse of step 1 */ -_q1 set[0, (_q2 select 0) + (_p1 select 0)]; -_q1 set[1, (_q2 select 1) + (_p1 select 1)]; -_q1 set[2, (_q2 select 2) + (_p1 select 2)]; +#include "script_component.hpp" + +_map = _this select 0; +_theta = _this select 1; + +_p = _map select 0; +_p1 = _map select 1; +_p2 = _map select 2; + +_q1 = +(_map select 3); +_q2 = +(_map select 4); +_u = _map select 5; +_d = _map select 6; + +/* Step 4 */ +_q2 set[0, (_q1 select 0) * cos(_theta) - (_q1 select 1) * sin(_theta)]; +_q2 set[1, (_q1 select 0) * sin(_theta) + (_q1 select 1) * cos(_theta)]; +_q2 set[2, (_q1 select 2)]; + +/* Inverse of step 3 */ +_q1 set[0, (_q2 select 0) * _d + (_q2 select 2) * (_u select 0)]; +_q1 set[1, (_q2 select 1)]; +_q1 set[2, - (_q2 select 0) * (_u select 0) + (_q2 select 2) * _d]; + +/* Inverse of step 2 */ +if (_d != 0) then { + _q2 set[0, (_q1 select 0)]; + _q2 set[1, (_q1 select 1) * (_u select 2) / _d + (_q1 select 2) * (_u select 1) / _d]; + _q2 set[2, - (_q1 select 1) * (_u select 1) / _d + (_q1 select 2) * (_u select 2) / _d]; +} else { + _q2 = _q1; +}; + +/* Inverse of step 1 */ +_q1 set[0, (_q2 select 0) + (_p1 select 0)]; +_q1 set[1, (_q2 select 1) + (_p1 select 1)]; +_q1 set[2, (_q2 select 2) + (_p1 select 2)]; _q1; \ No newline at end of file diff --git a/addons/laser/functions/fnc_rotateVectLineGetMap.sqf b/addons/laser/functions/fnc_rotateVectLineGetMap.sqf index fdbd6533ef..258cc93ae2 100644 --- a/addons/laser/functions/fnc_rotateVectLineGetMap.sqf +++ b/addons/laser/functions/fnc_rotateVectLineGetMap.sqf @@ -1,37 +1,37 @@ -#include "script_component.hpp" - -private ["_p", "_theta", "_p1", "_p2", "_q1", "_q2", "_u", "_d"]; -_p = _this select 0; -_p1 = _this select 1; -_p2 = _this select 2; - -_q1 = []; -_q2 = []; -_u = []; - -/* Step 1 */ -_q1 set[0, (_p select 0) - (_p1 select 0)]; -_q1 set[1, (_p select 1) - (_p1 select 1)]; -_q1 set[2, (_p select 2) - (_p1 select 2)]; - -_u set[0, (_p2 select 0) - (_p1 select 0)]; -_u set[1, (_p2 select 1) - (_p1 select 1)]; -_u set[2, (_p2 select 2) - (_p1 select 2)]; -_u = _u call BIS_fnc_unitVector; -_d = sqrt((_u select 1)*(_u select 1) + (_u select 2)*(_u select 2)); - -/* Step 2 */ -if (_d != 0) then { - _q2 set[0, (_q1 select 0)]; - _q2 set[1, (_q1 select 1) * (_u select 2) / _d - (_q1 select 2) * (_u select 1) / _d]; - _q2 set[2, (_q1 select 1) * (_u select 1) / _d + (_q1 select 2) * (_u select 2) / _d]; -} else { - _q2 = _q1; -}; - -/* Step 3 */ -_q1 set[0, (_q2 select 0) * _d - (_q2 select 2) * (_u select 0)]; -_q1 set[1, (_q2 select 1)]; -_q1 set[2, (_q2 select 0) * (_u select 0) + (_q2 select 2) * _d]; - +#include "script_component.hpp" + +private ["_p", "_theta", "_p1", "_p2", "_q1", "_q2", "_u", "_d"]; +_p = _this select 0; +_p1 = _this select 1; +_p2 = _this select 2; + +_q1 = []; +_q2 = []; +_u = []; + +/* Step 1 */ +_q1 set[0, (_p select 0) - (_p1 select 0)]; +_q1 set[1, (_p select 1) - (_p1 select 1)]; +_q1 set[2, (_p select 2) - (_p1 select 2)]; + +_u set[0, (_p2 select 0) - (_p1 select 0)]; +_u set[1, (_p2 select 1) - (_p1 select 1)]; +_u set[2, (_p2 select 2) - (_p1 select 2)]; +_u = _u call BIS_fnc_unitVector; +_d = sqrt((_u select 1)*(_u select 1) + (_u select 2)*(_u select 2)); + +/* Step 2 */ +if (_d != 0) then { + _q2 set[0, (_q1 select 0)]; + _q2 set[1, (_q1 select 1) * (_u select 2) / _d - (_q1 select 2) * (_u select 1) / _d]; + _q2 set[2, (_q1 select 1) * (_u select 1) / _d + (_q1 select 2) * (_u select 2) / _d]; +} else { + _q2 = _q1; +}; + +/* Step 3 */ +_q1 set[0, (_q2 select 0) * _d - (_q2 select 2) * (_u select 0)]; +_q1 set[1, (_q2 select 1)]; +_q1 set[2, (_q2 select 0) * (_u select 0) + (_q2 select 2) * _d]; + [_p, _p1, _p2, _q1, _q2, _u, _d] \ No newline at end of file diff --git a/addons/laser/functions/fnc_shootCone.sqf b/addons/laser/functions/fnc_shootCone.sqf index e33edd10bc..a988b98f17 100644 --- a/addons/laser/functions/fnc_shootCone.sqf +++ b/addons/laser/functions/fnc_shootCone.sqf @@ -1,66 +1,66 @@ -#include "script_component.hpp" - -_divergence = 0.3; -_pos = _this select 0; -_vec = _this select 1; -_longestReturn = -1000000000; -_shortestReturn = 1000000000; -_resultPositions = []; -_p1 = [0,0,0]; -_p2 = +_vec; -_p = (_vec call CBA_fnc_vect2polar); -_v = [(_p select 0), (_p select 1), (_p select 2)+90] call CBA_fnc_polar2vect; -_cp = [_vec, _v] call BIS_fnc_crossProduct; - -_vecRotateMap = [_cp, _p1, _p2] call FUNC(rotateVectLineGetMap); - -_result = [_pos, _vec] call FUNC(shootRay); -_resultPos = _result select 0; -if(!isNil "_resultPos") then { - _distance = _result select 1; - if(_distance < _shortestReturn) then { - _shortestReturn = _distance; - }; - if(_distance > _longestReturn) then { - _longestReturn = _distance; - }; - _resultPositions set[(count _resultPositions), _result]; -#ifdef DEBUG_MODE_FULL - DRAW_LINES set[(count DRAW_LINES), [_pos, _resultPos, [0, 1, 0, 1]]]; -#endif -}; -_count = 8; - -_pos2 = [ - (_pos select 0)+((_vec select 0)*1000), - (_pos select 1)+((_vec select 1)*1000), - (_pos select 2)+((_vec select 2)*1000) - ]; -{ - for "_i" from 0 to ceil(_count*_x) do { - _radOffset = random 360; - _offset = [_vecRotateMap, (((360/_count)*_i)+_radOffset) mod 360] call FUNC(rotateVectLine); - _offsetPos = [ - (_pos2 select 0)+((_offset select 0)*(_divergence*_x)), - (_pos2 select 1)+((_offset select 1)*(_divergence*_x)), - (_pos2 select 2)+((_offset select 2)*(_divergence*_x)) - ]; - _offsetVector = [_pos, _offsetPos] call BIS_fnc_vectorFromXtoY; - _result = [_pos, _offsetVector] call FUNC(shootRay); - _resultPos = _result select 0; - if(!isNil "_resultPos") then { - _distance = _result select 1; - if(_distance < _shortestReturn) then { - _shortestReturn = _distance; - }; - if(_distance > _longestReturn) then { - _longestReturn = _distance; - }; - _resultPositions set[(count _resultPositions), _result]; -#ifdef DEBUG_MODE_FULL - DRAW_LINES set[(count DRAW_LINES), [_pos, _resultPos, [0, 1, 0, 1]]]; -#endif - }; - }; -} forEach [1,0.5,0.25]; +#include "script_component.hpp" + +_divergence = 0.3; +_pos = _this select 0; +_vec = _this select 1; +_longestReturn = -1000000000; +_shortestReturn = 1000000000; +_resultPositions = []; +_p1 = [0,0,0]; +_p2 = +_vec; +_p = (_vec call CBA_fnc_vect2polar); +_v = [(_p select 0), (_p select 1), (_p select 2)+90] call CBA_fnc_polar2vect; +_cp = [_vec, _v] call BIS_fnc_crossProduct; + +_vecRotateMap = [_cp, _p1, _p2] call FUNC(rotateVectLineGetMap); + +_result = [_pos, _vec] call FUNC(shootRay); +_resultPos = _result select 0; +if(!isNil "_resultPos") then { + _distance = _result select 1; + if(_distance < _shortestReturn) then { + _shortestReturn = _distance; + }; + if(_distance > _longestReturn) then { + _longestReturn = _distance; + }; + _resultPositions set[(count _resultPositions), _result]; +#ifdef DEBUG_MODE_FULL + DRAW_LINES set[(count DRAW_LINES), [_pos, _resultPos, [0, 1, 0, 1]]]; +#endif +}; +_count = 8; + +_pos2 = [ + (_pos select 0)+((_vec select 0)*1000), + (_pos select 1)+((_vec select 1)*1000), + (_pos select 2)+((_vec select 2)*1000) + ]; +{ + for "_i" from 0 to ceil(_count*_x) do { + _radOffset = random 360; + _offset = [_vecRotateMap, (((360/_count)*_i)+_radOffset) mod 360] call FUNC(rotateVectLine); + _offsetPos = [ + (_pos2 select 0)+((_offset select 0)*(_divergence*_x)), + (_pos2 select 1)+((_offset select 1)*(_divergence*_x)), + (_pos2 select 2)+((_offset select 2)*(_divergence*_x)) + ]; + _offsetVector = [_pos, _offsetPos] call BIS_fnc_vectorFromXtoY; + _result = [_pos, _offsetVector] call FUNC(shootRay); + _resultPos = _result select 0; + if(!isNil "_resultPos") then { + _distance = _result select 1; + if(_distance < _shortestReturn) then { + _shortestReturn = _distance; + }; + if(_distance > _longestReturn) then { + _longestReturn = _distance; + }; + _resultPositions set[(count _resultPositions), _result]; +#ifdef DEBUG_MODE_FULL + DRAW_LINES set[(count DRAW_LINES), [_pos, _resultPos, [0, 1, 0, 1]]]; +#endif + }; + }; +} forEach [1,0.5,0.25]; [_longestReturn, _shortestReturn, _resultPositions]; \ No newline at end of file diff --git a/addons/laser/functions/fnc_shootRay.sqf b/addons/laser/functions/fnc_shootRay.sqf index 62847d16b6..db14ef679f 100644 --- a/addons/laser/functions/fnc_shootRay.sqf +++ b/addons/laser/functions/fnc_shootRay.sqf @@ -1,30 +1,30 @@ -#include "script_component.hpp" - -private ["_pos", "_vec", "_distance", "_resultPos", "_fidelity", "_lastPos", "_i", "_nextPos"]; -scopeName "main"; -_pos = _this select 0; -_vec = _this select 1; -_distance = 0; -_resultPos = nil; -_fidelity = [1000,100,10,1,0.1]; -_lastPos = +_pos; -{ - scopeName "mainSearch"; - for "_i" from 1 to 10 do { - _nextPos = [ - (_lastPos select 0)+((_vec select 0)*_x), - (_lastPos select 1)+((_vec select 1)*_x), - (_lastPos select 2)+((_vec select 2)*_x) - ]; - - if(lineIntersects [_lastPos, _nextPos] || terrainIntersectASL [_lastPos, _nextPos]) then { - _resultPos = _lastPos; - breakTo "mainSearch"; - } else { - _distance = _distance + _x; - _lastPos = _nextPos; - }; - }; - -} forEach _fidelity; +#include "script_component.hpp" + +private ["_pos", "_vec", "_distance", "_resultPos", "_fidelity", "_lastPos", "_i", "_nextPos"]; +scopeName "main"; +_pos = _this select 0; +_vec = _this select 1; +_distance = 0; +_resultPos = nil; +_fidelity = [1000,100,10,1,0.1]; +_lastPos = +_pos; +{ + scopeName "mainSearch"; + for "_i" from 1 to 10 do { + _nextPos = [ + (_lastPos select 0)+((_vec select 0)*_x), + (_lastPos select 1)+((_vec select 1)*_x), + (_lastPos select 2)+((_vec select 2)*_x) + ]; + + if(lineIntersects [_lastPos, _nextPos] || terrainIntersectASL [_lastPos, _nextPos]) then { + _resultPos = _lastPos; + breakTo "mainSearch"; + } else { + _distance = _distance + _x; + _lastPos = _nextPos; + }; + }; + +} forEach _fidelity; [_resultPos, _distance]; \ No newline at end of file diff --git a/addons/laser/functions/fnc_translateToModelSpace.sqf b/addons/laser/functions/fnc_translateToModelSpace.sqf index 1e2e930ac7..e54744bdb8 100644 --- a/addons/laser/functions/fnc_translateToModelSpace.sqf +++ b/addons/laser/functions/fnc_translateToModelSpace.sqf @@ -1,16 +1,16 @@ -_object = _this select 0; -_origin = getPosASL _object; -_matrix = _this select 1; -_xVec = _matrix select 0; -_yVec = _matrix select 1; -_zVec = _matrix select 2; - -_offset = _this select 2; - -_x = _offset select 0; -_y = _offset select 1; -_z = _offset select 2; - -_out = (((_xVec vectorMultiply _x) vectorAdd (_yVec vectorMultiply _y)) vectorAdd (_zVec vectorMultiply _z)) vectorAdd _origin; - +_object = _this select 0; +_origin = getPosASL _object; +_matrix = _this select 1; +_xVec = _matrix select 0; +_yVec = _matrix select 1; +_zVec = _matrix select 2; + +_offset = _this select 2; + +_x = _offset select 0; +_y = _offset select 1; +_z = _offset select 2; + +_out = (((_xVec vectorMultiply _x) vectorAdd (_yVec vectorMultiply _y)) vectorAdd (_zVec vectorMultiply _z)) vectorAdd _origin; + _out; \ No newline at end of file diff --git a/addons/laser/functions/fnc_translateToWeaponSpace.sqf b/addons/laser/functions/fnc_translateToWeaponSpace.sqf index 2c7dc5e6da..7b146e7d42 100644 --- a/addons/laser/functions/fnc_translateToWeaponSpace.sqf +++ b/addons/laser/functions/fnc_translateToWeaponSpace.sqf @@ -1,22 +1,22 @@ -_object = _this select 0; -_origin = getPosASL _object; -_matrix = _this select 1; -_xVec = _matrix select 0; -_yVec = _matrix select 1; -_zVec = _matrix select 2; - -_offset = _this select 2; - -_offset = _offset vectorDiff _origin; - -_x = _offset select 0; -_y = _offset select 1; -_z = _offset select 2; - -_out = [ - ((_xVec select 0)*_x) + ((_xVec select 1)*_y) + ((_xVec select 2)*_z), - ((_yVec select 0)*_x) + ((_yVec select 1)*_y) + ((_yVec select 2)*_z), - ((_zVec select 0)*_x) + ((_zVec select 1)*_y) + ((_zVec select 2)*_z) - ]; - +_object = _this select 0; +_origin = getPosASL _object; +_matrix = _this select 1; +_xVec = _matrix select 0; +_yVec = _matrix select 1; +_zVec = _matrix select 2; + +_offset = _this select 2; + +_offset = _offset vectorDiff _origin; + +_x = _offset select 0; +_y = _offset select 1; +_z = _offset select 2; + +_out = [ + ((_xVec select 0)*_x) + ((_xVec select 1)*_y) + ((_xVec select 2)*_z), + ((_yVec select 0)*_x) + ((_yVec select 1)*_y) + ((_yVec select 2)*_z), + ((_zVec select 0)*_x) + ((_zVec select 1)*_y) + ((_zVec select 2)*_z) + ]; + _out; \ No newline at end of file diff --git a/addons/laser/script_component.hpp b/addons/laser/script_component.hpp index 2be1e9e14b..047cef804a 100644 --- a/addons/laser/script_component.hpp +++ b/addons/laser/script_component.hpp @@ -1,15 +1,15 @@ -#define COMPONENT laser -#include "\z\ace\Addons\main\script_mod.hpp" - -#ifdef DEBUG_ENABLED_LASER - #define DEBUG_MODE_FULL -#endif - -#ifdef DEBUG_SETTINGS_LASER - #define DEBUG_SETTINGS DEBUG_SETTINGS_LASER -#endif - -#include "\z\ace\Addons\main\script_macros.hpp" - - +#define COMPONENT laser +#include "\z\ace\Addons\main\script_mod.hpp" + +#ifdef DEBUG_ENABLED_LASER + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_LASER + #define DEBUG_SETTINGS DEBUG_SETTINGS_LASER +#endif + +#include "\z\ace\Addons\main\script_macros.hpp" + + #define FIREMODE_DIRECT_LOAL 1 \ No newline at end of file diff --git a/addons/laser_selfdesignate/CfgEventhandlers.hpp b/addons/laser_selfdesignate/CfgEventhandlers.hpp index 4cef7be4a3..2681d24120 100644 --- a/addons/laser_selfdesignate/CfgEventhandlers.hpp +++ b/addons/laser_selfdesignate/CfgEventhandlers.hpp @@ -1,19 +1,19 @@ -class Extended_PreInit_EventHandlers { - class ADDON { - init = QUOTE(call COMPILE_FILE(XEH_pre_init)); - }; -}; - -class Extended_PostInit_EventHandlers { - class ADDON { - init = QUOTE(call COMPILE_FILE(XEH_post_init)); - }; -}; - -class Extended_Init_EventHandlers { - class Helicopter { - class ADDON { - init = QUOTE(_this call DFUNC(initDesignatorActions)); - }; - }; +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_pre_init)); + }; +}; + +class Extended_PostInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_post_init)); + }; +}; + +class Extended_Init_EventHandlers { + class Helicopter { + class ADDON { + init = QUOTE(_this call DFUNC(initDesignatorActions)); + }; + }; }; \ No newline at end of file diff --git a/addons/laser_selfdesignate/CfgUI.hpp b/addons/laser_selfdesignate/CfgUI.hpp index e8823e04f8..304281d213 100644 --- a/addons/laser_selfdesignate/CfgUI.hpp +++ b/addons/laser_selfdesignate/CfgUI.hpp @@ -1,32 +1,32 @@ -class RscPicture; -class RscText; -class RscControlsGroupNoScrollbars; -/* This disables air radar. We need to make this a seperate HUD addon -class RscInGameUI -{ - class RscUnitInfo - { - class CA_Radar: RscControlsGroupNoScrollbars - { - class controls - { - class CA_RadarBackground: RscPicture { - colorText[] = {0,0,0,0}; - text = ""; - }; - class CA_RadarIcon: RscPicture { - colorText[] = {0,0,0,0}; - }; - class CA_Heading: RscText { - colorText[] = {0,0,0,0}; - }; - }; - }; - }; -}; -class CfgInGameUI -{ - -}; - +class RscPicture; +class RscText; +class RscControlsGroupNoScrollbars; +/* This disables air radar. We need to make this a seperate HUD addon +class RscInGameUI +{ + class RscUnitInfo + { + class CA_Radar: RscControlsGroupNoScrollbars + { + class controls + { + class CA_RadarBackground: RscPicture { + colorText[] = {0,0,0,0}; + text = ""; + }; + class CA_RadarIcon: RscPicture { + colorText[] = {0,0,0,0}; + }; + class CA_Heading: RscText { + colorText[] = {0,0,0,0}; + }; + }; + }; + }; +}; +class CfgInGameUI +{ + +}; + */ \ No newline at end of file diff --git a/addons/laser_selfdesignate/CfgVehicles.hpp b/addons/laser_selfdesignate/CfgVehicles.hpp index b29d8a4394..d05ddaa28b 100644 --- a/addons/laser_selfdesignate/CfgVehicles.hpp +++ b/addons/laser_selfdesignate/CfgVehicles.hpp @@ -1,30 +1,30 @@ -class CfgVehicles { - class AllVehicles; - class Air: AllVehicles { - class Turrets; - }; - - class Helicopter: Air { - class Turrets { - class MainTurret; - }; - - // TODO: move these to a different HUD addon - // commanderCanSee = 2+32; - // gunnerCanSee = 2+32; - // driverCanSee = 2+32; - - }; - - class Helicopter_Base_F: Helicopter {}; - - class Heli_Attack_01_base_F: Helicopter_Base_F {}; - - class B_Heli_Attack_01_F: Heli_Attack_01_base_F { - class Turrets: Turrets { - class MainTurret: MainTurret { - GVAR(Enabled) = 1; // Enable laser self-designation - }; - }; - }; -}; +class CfgVehicles { + class AllVehicles; + class Air: AllVehicles { + class Turrets; + }; + + class Helicopter: Air { + class Turrets { + class MainTurret; + }; + + // TODO: move these to a different HUD addon + // commanderCanSee = 2+32; + // gunnerCanSee = 2+32; + // driverCanSee = 2+32; + + }; + + class Helicopter_Base_F: Helicopter {}; + + class Heli_Attack_01_base_F: Helicopter_Base_F {}; + + class B_Heli_Attack_01_F: Heli_Attack_01_base_F { + class Turrets: Turrets { + class MainTurret: MainTurret { + GVAR(Enabled) = 1; // Enable laser self-designation + }; + }; + }; +}; diff --git a/addons/laser_selfdesignate/CfgWeapons.hpp b/addons/laser_selfdesignate/CfgWeapons.hpp index a62974ce40..3037972ffa 100644 --- a/addons/laser_selfdesignate/CfgWeapons.hpp +++ b/addons/laser_selfdesignate/CfgWeapons.hpp @@ -1,11 +1,11 @@ -class CfgWeapons { - // Disable locking unless newb mode - class LauncherCore; - class RocketPods: LauncherCore { - canLock = 1; - }; - - class missiles_DAGR: RocketPods { - canLock = 1; - }; -}; +class CfgWeapons { + // Disable locking unless newb mode + class LauncherCore; + class RocketPods: LauncherCore { + canLock = 1; + }; + + class missiles_DAGR: RocketPods { + canLock = 1; + }; +}; diff --git a/addons/laser_selfdesignate/XEH_post_init.sqf b/addons/laser_selfdesignate/XEH_post_init.sqf index 6904ee6c47..a4e4806591 100644 --- a/addons/laser_selfdesignate/XEH_post_init.sqf +++ b/addons/laser_selfdesignate/XEH_post_init.sqf @@ -1,3 +1,3 @@ -#include "script_component.hpp" -NO_DEDICATED; - +#include "script_component.hpp" +NO_DEDICATED; + diff --git a/addons/laser_selfdesignate/XEH_pre_init.sqf b/addons/laser_selfdesignate/XEH_pre_init.sqf index a8d4b1779d..6567938514 100644 --- a/addons/laser_selfdesignate/XEH_pre_init.sqf +++ b/addons/laser_selfdesignate/XEH_pre_init.sqf @@ -1,11 +1,11 @@ -#include "script_component.hpp" - -PREP(initDesignatorActions); -PREP(laserHudDesignateOn); -PREP(laserHudDesignateOff); -PREP(unitTurretHasDesignator); - -GVAR(laser) = nil; -GVAR(laserActive) = false; - -FUNC(getPosASL) = {visiblePositionASL (_this select 0)}; +#include "script_component.hpp" + +PREP(initDesignatorActions); +PREP(laserHudDesignateOn); +PREP(laserHudDesignateOff); +PREP(unitTurretHasDesignator); + +GVAR(laser) = nil; +GVAR(laserActive) = false; + +FUNC(getPosASL) = {visiblePositionASL (_this select 0)}; diff --git a/addons/laser_selfdesignate/config.cpp b/addons/laser_selfdesignate/config.cpp index 33c31ba7e5..e8d110bd34 100644 --- a/addons/laser_selfdesignate/config.cpp +++ b/addons/laser_selfdesignate/config.cpp @@ -1,17 +1,17 @@ -#include "script_component.hpp" - -class CfgPatches { - class ADDON { - units[] = {}; - weapons[] = {}; - requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"ace_laser"}; - version = VERSION; - }; -}; - -#include "CfgUI.hpp" - -#include "CfgEventhandlers.hpp" -#include "CfgWeapons.hpp" -#include "CfgVehicles.hpp" +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_laser"}; + version = VERSION; + }; +}; + +#include "CfgUI.hpp" + +#include "CfgEventhandlers.hpp" +#include "CfgWeapons.hpp" +#include "CfgVehicles.hpp" diff --git a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOff.sqf b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOff.sqf index 2f4c437d28..c5ad2407fd 100644 --- a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOff.sqf +++ b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOff.sqf @@ -1,20 +1,20 @@ -#include "script_component.hpp" - -if(isNil QGVAR(laser)) exitWith { - false -}; -if(!local GVAR(laser)) then { - false -}; - -_handle = GVAR(laser) getVariable ["ACE_PFH_HANDLE", nil]; -if(!isNil "_handle") then { - [_handle] call cba_fnc_removePerFrameHandler; -}; - -REM(ACE_LASERS, GVAR(laser)); -deleteVehicle GVAR(laser); -GVAR(laser) = nil; -GVAR(laserActive) = false; - +#include "script_component.hpp" + +if(isNil QGVAR(laser)) exitWith { + false +}; +if(!local GVAR(laser)) then { + false +}; + +_handle = GVAR(laser) getVariable ["ACE_PFH_HANDLE", nil]; +if(!isNil "_handle") then { + [_handle] call cba_fnc_removePerFrameHandler; +}; + +REM(ACE_LASERS, GVAR(laser)); +deleteVehicle GVAR(laser); +GVAR(laser) = nil; +GVAR(laserActive) = false; + true \ No newline at end of file diff --git a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf index f0fdc8458f..45a6e18c55 100644 --- a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf +++ b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf @@ -1,111 +1,111 @@ -//#define DEBUG_MODE_FULL -#include "script_component.hpp" - -TRACE_1("enter", _this); - -#define FCS_UPDATE_DELAY 1 - -FUNC(magnitude) = { - _this distance [0, 0, 0] -}; - -FUNC(mat_normalize3d) = { - private ["_mag"]; - PARAMS_3(_vx,_vy,_vz); - - _mag = _this call FUNC(magnitude); - if (_mag == 0) then {_mag = 1}; - [(_vx/_mag), (_vy/_mag), (_vz/_mag)] -}; - -FUNC(laserHudDesignatePFH) = { - private["_args", "_laserTarget", "_shooter", "_vehicle", "_weapon", "_gunnerInfo", "_turret", "_pov", "_gunBeg", "_gunEnd", "_povPos", "_povDir", "_result", "_resultPositions", "_firstResult", "_forceUpdateTime"]; - _args = _this select 0; - _laserTarget = _args select 0; - _shooter = _args select 1; - - if( (count _args) < 3) then { - _args set[2, diag_tickTime + FCS_UPDATE_DELAY]; - }; - _forceUpdateTime = _args select 2; - - _vehicle = vehicle _shooter; - _weapon = currentWeapon _vehicle; - - TRACE_1("", _args); - - if(!alive _shooter || isNull _vehicle || isNull _laserTarget || !GVAR(laserActive) ) exitWith { - [] call FUNC(laserHudDesignateOff); - }; - if(!([ACE_player] call FUNC(unitTurretHasDesignator)) ) exitWith { - [] call FUNC(laserHudDesignateOff); - }; - - // Retrieve the gunner and turret memory point information - _gunnerInfo = [_vehicle, _weapon] call CBA_fnc_getFirer; - _turretInfo = [_vehicle, _gunnerInfo select 1] call EFUNC(common,getTurretDirection); - _povPos = _turretInfo select 0; - _povDir = _turretInfo select 1; - - - - _result = [_povPos, _povDir] call EFUNC(laser,shootCone); - if((count _result) > 0) then { - _resultPositions = _result select 2; - - if((count _resultPositions) > 0) then { - _firstResult = _resultPositions select 0; - _pos = _firstResult select 0; - - // If the laser has moved less than a half meter, then dont move it. - // Just regular use of lasers will commonly make them move this much, - // but not across multiple close frames. - // This loses accuracy a little, but saves position updates per frame. - TRACE_5("", diag_tickTime, _forceUpdateTime, getPosASL _laserTarget, _pos, ((getPosASL _laserTarget) distance _pos)); - - if(diag_tickTime > _forceUpdateTime) then { - TRACE_1("FCS Update", ""); - ["ace_fcs_forceUpdate", []] call ace_common_fnc_localEvent; - }; - - if( (_laserTarget distance _pos) > 0.1) then { - TRACE_1("LaserPos Update", ""); - _laserTarget setPosATL (ASLToATL _pos); - }; - - if(diag_tickTime > _forceUpdateTime) then { - _args set[2, diag_tickTime + FCS_UPDATE_DELAY]; - }; -#ifdef DEBUG_MODE_FULL - drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,0,0,1], (getPosATL _laserTarget), 0.75, 0.75, 0, "", 0.5, 0.025, "TahomaB"]; - - { - private["_position"]; - _position = _x select 0; - drawLine3d [ASLToATL _povPos, ASLToATL _position, [0,0,1,1] ]; - } forEach _resultPositions; -#endif - }; - }; - - _this set[0, _args]; -}; - -private "_laserTarget"; -private "_handle"; - -if(isNil QGVAR(laser)) then { - - _laserTarget = "LaserTargetW" createVehicle (getpos player); - - GVAR(laserActive) = true; - - _handle = [FUNC(laserHudDesignatePFH), 0.1, [_laserTarget, player]] call cba_fnc_addPerFrameHandler; - _laserTarget setVariable ["ACE_PFH_HANDLE", _handle, false]; - - GVAR(laser) = _laserTarget; -} else { - [] call FUNC(laserHudDesignateOff); - [] call FUNC(laserHudDesignateOn); -}; - +//#define DEBUG_MODE_FULL +#include "script_component.hpp" + +TRACE_1("enter", _this); + +#define FCS_UPDATE_DELAY 1 + +FUNC(magnitude) = { + _this distance [0, 0, 0] +}; + +FUNC(mat_normalize3d) = { + private ["_mag"]; + PARAMS_3(_vx,_vy,_vz); + + _mag = _this call FUNC(magnitude); + if (_mag == 0) then {_mag = 1}; + [(_vx/_mag), (_vy/_mag), (_vz/_mag)] +}; + +FUNC(laserHudDesignatePFH) = { + private["_args", "_laserTarget", "_shooter", "_vehicle", "_weapon", "_gunnerInfo", "_turret", "_pov", "_gunBeg", "_gunEnd", "_povPos", "_povDir", "_result", "_resultPositions", "_firstResult", "_forceUpdateTime"]; + _args = _this select 0; + _laserTarget = _args select 0; + _shooter = _args select 1; + + if( (count _args) < 3) then { + _args set[2, diag_tickTime + FCS_UPDATE_DELAY]; + }; + _forceUpdateTime = _args select 2; + + _vehicle = vehicle _shooter; + _weapon = currentWeapon _vehicle; + + TRACE_1("", _args); + + if(!alive _shooter || isNull _vehicle || isNull _laserTarget || !GVAR(laserActive) ) exitWith { + [] call FUNC(laserHudDesignateOff); + }; + if(!([ACE_player] call FUNC(unitTurretHasDesignator)) ) exitWith { + [] call FUNC(laserHudDesignateOff); + }; + + // Retrieve the gunner and turret memory point information + _gunnerInfo = [_vehicle, _weapon] call CBA_fnc_getFirer; + _turretInfo = [_vehicle, _gunnerInfo select 1] call EFUNC(common,getTurretDirection); + _povPos = _turretInfo select 0; + _povDir = _turretInfo select 1; + + + + _result = [_povPos, _povDir] call EFUNC(laser,shootCone); + if((count _result) > 0) then { + _resultPositions = _result select 2; + + if((count _resultPositions) > 0) then { + _firstResult = _resultPositions select 0; + _pos = _firstResult select 0; + + // If the laser has moved less than a half meter, then dont move it. + // Just regular use of lasers will commonly make them move this much, + // but not across multiple close frames. + // This loses accuracy a little, but saves position updates per frame. + TRACE_5("", diag_tickTime, _forceUpdateTime, getPosASL _laserTarget, _pos, ((getPosASL _laserTarget) distance _pos)); + + if(diag_tickTime > _forceUpdateTime) then { + TRACE_1("FCS Update", ""); + ["ace_fcs_forceUpdate", []] call ace_common_fnc_localEvent; + }; + + if( (_laserTarget distance _pos) > 0.1) then { + TRACE_1("LaserPos Update", ""); + _laserTarget setPosATL (ASLToATL _pos); + }; + + if(diag_tickTime > _forceUpdateTime) then { + _args set[2, diag_tickTime + FCS_UPDATE_DELAY]; + }; +#ifdef DEBUG_MODE_FULL + drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,0,0,1], (getPosATL _laserTarget), 0.75, 0.75, 0, "", 0.5, 0.025, "TahomaB"]; + + { + private["_position"]; + _position = _x select 0; + drawLine3d [ASLToATL _povPos, ASLToATL _position, [0,0,1,1] ]; + } forEach _resultPositions; +#endif + }; + }; + + _this set[0, _args]; +}; + +private "_laserTarget"; +private "_handle"; + +if(isNil QGVAR(laser)) then { + + _laserTarget = "LaserTargetW" createVehicle (getpos player); + + GVAR(laserActive) = true; + + _handle = [FUNC(laserHudDesignatePFH), 0.1, [_laserTarget, player]] call cba_fnc_addPerFrameHandler; + _laserTarget setVariable ["ACE_PFH_HANDLE", _handle, false]; + + GVAR(laser) = _laserTarget; +} else { + [] call FUNC(laserHudDesignateOff); + [] call FUNC(laserHudDesignateOn); +}; + diff --git a/addons/laser_selfdesignate/functions/script_component.hpp b/addons/laser_selfdesignate/functions/script_component.hpp index 38c6d2c44b..46c864a031 100644 --- a/addons/laser_selfdesignate/functions/script_component.hpp +++ b/addons/laser_selfdesignate/functions/script_component.hpp @@ -1 +1 @@ -#include "\z\ace\Addons\laser_selfdesignate\script_component.hpp" +#include "\z\ace\Addons\laser_selfdesignate\script_component.hpp" diff --git a/addons/laser_selfdesignate/script_component.hpp b/addons/laser_selfdesignate/script_component.hpp index 46e9c48d2f..25fa342e32 100644 --- a/addons/laser_selfdesignate/script_component.hpp +++ b/addons/laser_selfdesignate/script_component.hpp @@ -1,12 +1,12 @@ -#define COMPONENT laser_selfdesignate -#include "\z\ace\Addons\main\script_mod.hpp" - -#ifdef DEBUG_ENABLED_LASER_SELFDESIGNATE - #define DEBUG_MODE_FULL -#endif - -#ifdef DEBUG_SETTINGS_LASER_SELFDESIGNATE - #define DEBUG_SETTINGS DEBUG_SETTINGS_LASER_SELFDESIGNATE -#endif - -#include "\z\ace\Addons\main\script_macros.hpp" +#define COMPONENT laser_selfdesignate +#include "\z\ace\Addons\main\script_mod.hpp" + +#ifdef DEBUG_ENABLED_LASER_SELFDESIGNATE + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_LASER_SELFDESIGNATE + #define DEBUG_SETTINGS DEBUG_SETTINGS_LASER_SELFDESIGNATE +#endif + +#include "\z\ace\Addons\main\script_macros.hpp" diff --git a/addons/laser_selfdesignate/stringtable.xml b/addons/laser_selfdesignate/stringtable.xml index 03d28814ec..ca5ff1e687 100644 --- a/addons/laser_selfdesignate/stringtable.xml +++ b/addons/laser_selfdesignate/stringtable.xml @@ -1,14 +1,16 @@  - + Laser<br/>Designator On Lasermarkierer<br/>an + ЛЦУ<br/>ВКЛ Laser<br/>Designator Off Lasermarkierer<br/>aus + ЛЦУ<br/>ВЫКЛ \ No newline at end of file diff --git a/addons/laserpointer/stringtable.xml b/addons/laserpointer/stringtable.xml index 87b36618a6..279fdeb5e8 100644 --- a/addons/laserpointer/stringtable.xml +++ b/addons/laserpointer/stringtable.xml @@ -1,21 +1,22 @@  + - Laser Pointer (red) Laserpointer (rot) + Лазерный прицел (красный) Laser Pointer (green) Laserpointer (grün) + Лазерный прицел (зелёный) - Emits visible light. Strahlt sichtbares Licht aus. + Испускает узкий пучок видимого света. - <t color='#9cf953'>Use: </t>Turn Laser ON/OFF <t color='#9cf953'>Použití: </t>Zapnout/vypnout laser @@ -27,6 +28,5 @@ <t color='#9cf953'>Использовать: </t>вкл/выкл лазер <t color='#9cf953'>Usar: </t>encender/apagar láser - - + \ No newline at end of file diff --git a/addons/logistics_uavbattery/stringtable.xml b/addons/logistics_uavbattery/stringtable.xml index fbd9004290..3a8d958709 100644 --- a/addons/logistics_uavbattery/stringtable.xml +++ b/addons/logistics_uavbattery/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -24,7 +24,7 @@ Potřebuješ UAV-Baterii Você precisa de uma Bateria para VANT Hai bisogno di una Batteria UAV - Требуется аккумулятор БПЛА + Требуется аккумулятор для БПЛА Recharge @@ -36,7 +36,7 @@ Dobít Recarregar Ricarica - Подзарядить + Зарядить UAV Battery @@ -60,7 +60,7 @@ Používané k dobíjení UAV Usada para reabastecer VANT Usata per ricaricare la Batteria dell'UAV - Используется для подзарядки БПЛА + Используется для зарядки БПЛА Recharging ... @@ -72,7 +72,7 @@ Dobíjení ... Recarregando ... In ricarica ... - Подзаряжаем ... + Заряжается ... \ No newline at end of file diff --git a/addons/logistics_wirecutter/stringtable.xml b/addons/logistics_wirecutter/stringtable.xml index f23af6b1e5..4e08ec33e8 100644 --- a/addons/logistics_wirecutter/stringtable.xml +++ b/addons/logistics_wirecutter/stringtable.xml @@ -1,15 +1,17 @@  - + Wirecutter Drahtschneider Wirecutter + Клещи-кусачки Wirecutter Schneidet Draht. + Позволяют быстро перекусывать сеточные конструкции. Cut Fence @@ -21,7 +23,7 @@ Cortar Cerca Taglia Drótkerítés átvágása - Вырезать забор + Разрезать забор Cutting Fences / Wires ... @@ -33,7 +35,7 @@ Cortando Cerca / Arame ... Sto tagliando ... Drótok elvágása ... - Вырезаем забор / провода ... + Разрезаем забор / провода ... Fence cut @@ -45,7 +47,7 @@ Cerca cortada Fatto! Drótkerítés átvágva - Забор вырезан + Забор разрезан \ No newline at end of file diff --git a/addons/magazinerepack/stringtable.xml b/addons/magazinerepack/stringtable.xml index d8fd5ca177..8aa586b916 100644 --- a/addons/magazinerepack/stringtable.xml +++ b/addons/magazinerepack/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -78,16 +78,19 @@ Repacking Finished Wiederverpacken Fertig Reembalaje Finalizado + Перепаковка завершена Repacking Interrupted Umpacken Unterbrochen Reempaque Interrupted + Перепаковка прервана %1 Full and %2 Partial %1 Vollständigen und %2 Teilweisen %1 Total y %2 Parcial + %1 полных и %2 неполных \ No newline at end of file diff --git a/addons/magazines/stringtable.xml b/addons/magazines/stringtable.xml index c8f652fa39..db637f8064 100644 --- a/addons/magazines/stringtable.xml +++ b/addons/magazines/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -13,7 +13,7 @@ 6.5mm 30ks Svítící IR-DIM Zásobník Carregador de 30 projéteis traçantes IR-DIM de 6,5mm Caricatore 6.5mm 30Rnd Traccianti IR-DIM - Магазин из 30-и 6.5 мм трассирующих под ПНВ + Магазин из 30-ти 6.5 мм трассирующих под ПНВ 6.5mm IR-DIM @@ -25,7 +25,7 @@ 6.5mm IR-DIM 6,5mm IR-DIM 6.5 IR-DIM - 6.5 мм трассирущие под ПНВ + 6.5 мм ИК-трассирующие Caliber: 6.5x39 mm Tracer IR-DIM<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL @@ -49,7 +49,7 @@ 6.5mm 30ks SD Zásobník Carregador de 30 projéteis SD de 6,5mm Caricatore 6.5mm 30Rnd Sil. - Магазин из 30-и 6.5 мм дозвуковых + Магазин из 30-ти 6.5 мм дозвуковых 6.5mm SD @@ -85,7 +85,7 @@ 6.5mm 30ks AP Zásobník Carregador de 30 projéteis AP de 6,5mm Caricatore 6.5mm 30Rnd AP - Магазин из 30-и 6.5 мм бронебойных + Магазин из 30-ти 6.5 мм бронебойных 6.5mm AP @@ -122,7 +122,7 @@ 6.5mm 30ks Svítící IR-DIM Zásobník Carregador de 30 projéteis traçantes IR-DIM de 6,5mm Caricatore 6.5mm 30Rnd Traccianti IR-DIM - Магазин из 30-и 6.5 мм трассирующих под ПНВ + Магазин из 30-ти 6.5 мм трассирующих под ПНВ 6.5mm IR-DIM @@ -134,7 +134,7 @@ 6.5mm IR-DIM 6,5mm IR-DIM 6.5mm IR-DIM - 6.5 мм трассирущие под ПНВ + 6.5 мм ИК-трассирующие Caliber: 6.5x39 mm Tracer IR-DIM<br />Rounds: 30<br />Used in: Katiba @@ -158,7 +158,7 @@ 6.5mm 30ks SD Zásobník Carregador de 30 projéteis SD de 6,5mm Caricatore 6.5mm 30Rnd Sil. - Магазин из 30-и 6.5 мм дозвуковых + Магазин из 30-ти 6.5 мм дозвуковых 6.5mm SD @@ -194,7 +194,7 @@ 6.5mm 30ks AP Zásobník Carregador de 30 projéteis AP de 6,5mm Caricatore 6.5mm 30Rnd AP - Магазин из 30-и 6.5 мм бронебойных + Магазин из 30-ти 6.5 мм бронебойных 6.5mm AP @@ -231,7 +231,7 @@ 5.56mm 30ks Svítící IR-DIM Zásobník Carregador de 30 projéteis traçantes IR-DIM de 5,56mm Caricatore 5.56mm 30rnd Traccianti IR-DIM - Магазин из 30-и 5.56 мм трассирующих под ПНВ + Магазин из 30-ти 5.56 мм трассирующих под ПНВ 5.56mm IR-DIM @@ -243,7 +243,7 @@ 5.56mm IR-DIM 5,56mm IR-DIM 5.56mm IR-DIM - 5.56 мм трассирущие под ПНВ + 5.56 мм ИК-трассирующие Caliber: 5.56x45 mm Tracer IR-DIM<br />Rounds: 30<br />Used in: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR @@ -267,7 +267,7 @@ 5.56mm 30ks SD Zásobník Carregador de 30 projéteis SD de 5,56mm Caricatore 5.56mm 30Rnd Sil. - Магазин из 30-и 5.56 мм дозвуковых + Магазин из 30-ти 5.56 мм дозвуковых 5.56mm SD @@ -303,7 +303,7 @@ 5.56mm 30ks AP Zásobník Carregador de 30 projéteis AP de 5,56mm Caricatore 5.56mm 30Rnd AP - Магазин из 30-и 5.56 мм бронебойных + Магазин из 30-ти 5.56 мм бронебойных 5.56mm AP @@ -340,7 +340,7 @@ 7.62mm 20ks Svítící Zásobník Carregador de 20 projéteis traçantes de 7,62mm Caricatore 7.62mm 20Rnd Traccianti - Магазин из 20-и 7.62 мм трассирующих + Магазин из 20-ти 7.62 мм трассирующих 7.62mm Tracer @@ -376,7 +376,7 @@ 7.62mm 20ks Svítící IR-DIM Zásobník Carregador de 20 projéteis IR-DIM de 7,62mm Caricatore 7.62mm 20rnd Traccianti IR-DIM - Магазин из 20-и 7.62 мм трассирующих под ПНВ + Магазин из 20-ти 7.62 мм трассирующих под ПНВ 7.62mm IR-DIM @@ -388,7 +388,7 @@ 7.62mm IR-DIM 7,62mm IR-DIM 7.62mm IR-DIM - 7.62 мм трассирущие под ПНВ + 7.62 мм ИК-трассирующие Caliber: 7.62x51 mm Tracer IR-DIM<br />Rounds: 20<br />Used in: Mk18 ABR @@ -412,7 +412,7 @@ 7.62mm 20ks SD Zásobník Carregador de 20 projéteis SD de 7,62mm Caricatore 7.62mm 20Rnd Sil. - Магазин из 20-и 7.62 мм дозвуковых + Магазин из 20-ти 7.62 мм дозвуковых 7.62mm SD @@ -448,7 +448,7 @@ 7.62mm 20ks AP Zásobník Carregador de 20 projéteis AP de 7,62mm Caricatore 7.62mm 20Rnd AP - Магазин из 20-и 7.62 мм бронебойных + Магазин из 20-ти 7.62 мм бронебойных 7.62mm AP @@ -487,4 +487,4 @@ Calibro: 7.62x51mm M118LR<br />Munizioni:20<br />In uso su: M14 - + \ No newline at end of file diff --git a/addons/main/About.hpp b/addons/main/About.hpp index c455c43cc3..c0dfbba561 100644 --- a/addons/main/About.hpp +++ b/addons/main/About.hpp @@ -1,35 +1,35 @@ -#include "script_dialog_defines.hpp" - -class ACE_ABOUT_DLG { - idd = 114137; - movingEnable = 0; - onLoad = "with uiNameSpace do { ACE_ABOUT_DLG = _this select 0; };"; - onKeyDown = "if((_this select 1) == 1) then {ACE_ABOUT_STP = true;};"; - class controlsBackground { - class Contents : RscStructuredText { - idc = 1141371; - colorBackground[] = { 0, 0, 0, 0 }; - __SX(0.45); - __SY(0.25); - __SW(0.45); - __SH(0.6); - size = "0.025 * SafeZoneH"; - class Attributes { - font = "TahomaB"; - color = "#C8C8C8"; - align = "left"; - valign = "middle"; - shadow = true; - shadowColor = "#191970"; - size = "1"; - }; - }; - class ACE_ABOUT_NEXT : ACE_ABOUT_CTRL { //dummy visible - idc = 1141372; - __SX(0.065); - __SW(0.03); - text = ""; - action = ""; - }; - }; //controlsBackground -}; +#include "script_dialog_defines.hpp" + +class ACE_ABOUT_DLG { + idd = 114137; + movingEnable = 0; + onLoad = "with uiNameSpace do { ACE_ABOUT_DLG = _this select 0; };"; + onKeyDown = "if((_this select 1) == 1) then {ACE_ABOUT_STP = true;};"; + class controlsBackground { + class Contents : RscStructuredText { + idc = 1141371; + colorBackground[] = { 0, 0, 0, 0 }; + __SX(0.45); + __SY(0.25); + __SW(0.45); + __SH(0.6); + size = "0.025 * SafeZoneH"; + class Attributes { + font = "TahomaB"; + color = "#C8C8C8"; + align = "left"; + valign = "middle"; + shadow = true; + shadowColor = "#191970"; + size = "1"; + }; + }; + class ACE_ABOUT_NEXT : ACE_ABOUT_CTRL { //dummy visible + idc = 1141372; + __SX(0.065); + __SW(0.03); + text = ""; + action = ""; + }; + }; //controlsBackground +}; diff --git a/addons/main/CfgModuleCategories.hpp b/addons/main/CfgModuleCategories.hpp index 1f86959585..87c52f35c5 100644 --- a/addons/main/CfgModuleCategories.hpp +++ b/addons/main/CfgModuleCategories.hpp @@ -1,8 +1,8 @@ -class CfgFactionClasses { - class NO_CATEGORY; - class ACE: NO_CATEGORY { - displayName = "ACE"; - priority = 2; - side = 7; - }; +class CfgFactionClasses { + class NO_CATEGORY; + class ACE: NO_CATEGORY { + displayName = "ACE"; + priority = 2; + side = 7; + }; }; \ No newline at end of file diff --git a/addons/main/about.sqf b/addons/main/about.sqf index c9004edfe1..9e4671d666 100644 --- a/addons/main/about.sqf +++ b/addons/main/about.sqf @@ -1,210 +1,210 @@ -#include "script_component.hpp" -#include "\z\ace\addons\main\script_common.hpp" - -if (!isNil "ACE_ABOUT_RUN") exitWith {ACE_ABOUT_RUN = false;}; -ACE_ABOUT_RUN = true; - -disableSerialization; - -PARAMS_2(_menu,_data); - -private ["_pcredits", "_pkeynam", "_shift", "_ctrl", "_alt", "_keys", "_key", "_keystrg", "_mod", "_knaml", "_knam", "_k", "_pkeys", "_pary", "_tpages", "_cEvents", "_i", "_cSys", "_tSys", "_aSys", "_tS", "_j", "_c", "_tC", "_keyn", "_fadet", "_page1", "_color", "_bcolor", "_newpages", "_pstart", "_pcount", "_pnext", "_display", "_control", "_pnames", "_pnam", "_page", "_pages", "_run", "_disp", "_next", "_input", "_nesc", "_unset", "_p", "_text", "_curPage", "_time", "_faded"]; - -_pcredits = [ -"", -"Advanced Combat Environment 2", -"http://dev-heaven.net/projects/ace-mod2", -"", -__cr_managers, -"", -__cr_devs, -"", -__cr_testers, -"", -"For a full list of acknowledgements, please visit our Wiki:", -"http://ace.dev-heaven.net" -]; - -_pkeynam = { //local function - _shift = if (_shift > 0) then {42} else {0}; - _ctrl = if (_ctrl > 0) then {56} else {0}; - _alt = if (_alt > 0) then {29} else {0}; - _keys = [_shift,_ctrl,_alt,_key]; - _keystrg = "^"; - { - _mod = _x in [42,56,29]; - _knaml = call compile format["format['%2',%1]",(keyName _x),"%1"]; - _knaml = [_knaml, " "] call CBA_fnc_split; - _knam = "^"; - {_k = _x; if (!_mod || (_k != (localize "STR_ACE_KN_LEFT") && _k != (localize "STR_ACE_KN_RIGHT"))) then {_knam = _knam + " " + _k}} forEach _knaml; - _knam = [_knam, "^ ", ""] call CBA_fnc_replace; - _keystrg = _keystrg + "-" + _knam; - } forEach _keys; - _keystrg = [_keystrg, "^ ", ""] call CBA_fnc_replace; - _keystrg = [_keystrg, "^-", ""] call CBA_fnc_replace; - _keystrg = [_keystrg, "^", "None"] call CBA_fnc_replace; - _keystrg -}; -_pkeys = { - _pary = []; - _tpages = []; - _cEvents = configFile/"CfgSettings"/"CBA"/"events"; - for "_i" from 0 to (count _cEvents) - 1 do { - _cSys = _cEvents select _i; - _tSys = configName _cSys; - if (isNumber ((_cSys select 0)/"key")) then { - //format system name - _aSys = [_tSys, "_"] call CBA_fnc_split; - _tS = "^"; - {if (_x != "ace" && _x != "sys") then {_tS = _tS + " " + _x}} forEach _aSys; - _tS = [_tS, "^ ", ""] call CBA_fnc_replace; - _tS = format["%1:",_tS]; - PUSH(_pary,_tS); - for "_j" from 0 to (count _cSys) - 1 do { - _c = _cSys select _j; - _tC = configName _c; - _tC = [_tC, "_", " "] call CBA_fnc_replace; - //key - _key = getNumber (_c/"key"); - _shift = getNumber (_c/"shift"); - _ctrl = getNumber (_c/"ctrl"); - _alt = getNumber (_c/"alt"); - _keyn = [_key,_shift,_ctrl,_alt] call _pkeynam; - _tC = format[" %1: %2",_tC,_keyn]; - PUSH(_pary,_tC); - }; - }; - if (count _pary > 20) then { //split full page - PUSH(_tpages,_pary); - _pary = []; - }; - }; - if (count _pary > 0) then { //partial page - PUSH(_tpages,_pary); - _pary = []; - }; - _tpages -}; - -//pages (make sure each will fit within 24 lines, word wrap is on) -switch(_menu) do { - case "MAIN": { //note: not all scripting commands available on main menu (not compiled yet?) - _fadet = 13; - _page1 = _pcredits; - }; - case "SING": { - _fadet = 20; //fade time - _color = [1,1,1,1]; - //_bcolor = [0,0,0,0.3]; - _page1 = _pcredits; - _newpages = [] call _pkeys; - _pstart = 2; - _pcount = count _newpages; - _pnext = _pstart + _pcount; - }; - case "MULT": { - _fadet = 20; - _color = [1,1,1,1]; - //_bcolor = [0,0,0,0.3]; - _page1 = _pcredits; - _newpages = [] call _pkeys; - _pstart = 2; - _pcount = count _newpages; - _pnext = _pstart + _pcount; - }; - default {}; -}; - -//main menu display -if (typeName(_data select 0) == "DISPLAY") then { - _display = _data select 0; -}; - -if (typeName(_data select 0) == "CONTROL") then { - _control = _data select 0; - _display = ctrlParent _control; -}; - -//dynamic pages -_pnames = []; -for "_x" from _pstart to _pnext - 1 do { - _pnam = format ["_page%1",_x]; - PUSH(_pnames,_pnam); -}; -private _pnames; -for "_x" from 0 to _pcount - 1 do { - call compile format ["%1 = %2", _pnames select _x, _newpages select _x]; -}; - -//get num pages -_pages = 0; -_run = true; -while {_run} do { - INC(_pages); - if (isNil format ["_page%1", _pages]) exitWith {_pages = _pages - 1; _run = false}; -}; - -if (_pages > 0) then { - //Dialog - createDialog "ACE_ABOUT_DLG"; - _disp = uiNamespace getVariable "ACE_ABOUT_DLG"; - _ctrl = _disp displayCtrl 1141371; - _next = _disp displayCtrl 1141372; - - if (_pages > 1) then {_next ctrlSetText "Next"}; - - _ctrl ctrlSetFade 1; - _ctrl ctrlCommit 0; - _ctrl ctrlSetFade 0; - _ctrl ctrlCommit 3; - - ACE_ABOUT_INC = 0; - _input = { //local function - _nesc = isNil "ACE_ABOUT_STP"; - if (_pages == 1) then {ACE_ABOUT_INC = 0}; //ignore special control - _unset = (ACE_ABOUT_INC == 0) && ACE_ABOUT_RUN; - if (_unset && _nesc) then {false} else {_fadet = _fadet + 5; true}; - }; - - //by default cycle - for "_p" from 1 to _pages do { - _text = ""; - _page = call compile format["_page%1",_p]; - _curPage = _p; - { - _text = _text + _x + "
"; - _ctrl ctrlSetStructuredText parseText _text; - if (call _input) exitWith {_p = _pages}; - if (_x != "") then {uisleep 0.8}; - } forEach _page; - }; - - _run = true; - while {if (isNil "ACE_ABOUT_STP") then {_run} else {false}} do { - _ctrl ctrlSetFade 0; - _ctrl ctrlCommit 0; - if (!isNil "_color") then {_ctrl ctrlSetTextColor _color}; - if (!isNil "_bcolor") then {_ctrl ctrlSetBackgroundColor _bcolor}; - - _curPage = _curPage + ACE_ABOUT_INC; - if (_curPage > _pages) then {_curPage = 1}; - if (_curPage <= 0) then {_curPage = 1}; - ACE_ABOUT_INC = 0; - - if (!ACE_ABOUT_RUN) then {ACE_ABOUT_RUN = true}; - - _text = ""; - _page = call compile format ["_page%1",_curPage]; - {_text = _text + _x + "
"} forEach _page; - _ctrl ctrlSetStructuredText parseText _text; - - _ctrl ctrlSetFade 1; - _ctrl ctrlCommit _fadet; - - _time = time + _fadet + 2; - waitUntil{uisleep 1; _run = call _input; _faded = time > _time; (_run || _faded)}; - }; //while RUN -}; -ACE_ABOUT_STP = Nil; -ACE_ABOUT_RUN = Nil; +#include "script_component.hpp" +#include "\z\ace\addons\main\script_common.hpp" + +if (!isNil "ACE_ABOUT_RUN") exitWith {ACE_ABOUT_RUN = false;}; +ACE_ABOUT_RUN = true; + +disableSerialization; + +PARAMS_2(_menu,_data); + +private ["_pcredits", "_pkeynam", "_shift", "_ctrl", "_alt", "_keys", "_key", "_keystrg", "_mod", "_knaml", "_knam", "_k", "_pkeys", "_pary", "_tpages", "_cEvents", "_i", "_cSys", "_tSys", "_aSys", "_tS", "_j", "_c", "_tC", "_keyn", "_fadet", "_page1", "_color", "_bcolor", "_newpages", "_pstart", "_pcount", "_pnext", "_display", "_control", "_pnames", "_pnam", "_page", "_pages", "_run", "_disp", "_next", "_input", "_nesc", "_unset", "_p", "_text", "_curPage", "_time", "_faded"]; + +_pcredits = [ +"", +"Advanced Combat Environment 2", +"http://dev-heaven.net/projects/ace-mod2", +"", +__cr_managers, +"", +__cr_devs, +"", +__cr_testers, +"", +"For a full list of acknowledgements, please visit our Wiki:", +"http://ace.dev-heaven.net" +]; + +_pkeynam = { //local function + _shift = if (_shift > 0) then {42} else {0}; + _ctrl = if (_ctrl > 0) then {56} else {0}; + _alt = if (_alt > 0) then {29} else {0}; + _keys = [_shift,_ctrl,_alt,_key]; + _keystrg = "^"; + { + _mod = _x in [42,56,29]; + _knaml = call compile format["format['%2',%1]",(keyName _x),"%1"]; + _knaml = [_knaml, " "] call CBA_fnc_split; + _knam = "^"; + {_k = _x; if (!_mod || (_k != (localize "STR_ACE_KN_LEFT") && _k != (localize "STR_ACE_KN_RIGHT"))) then {_knam = _knam + " " + _k}} forEach _knaml; + _knam = [_knam, "^ ", ""] call CBA_fnc_replace; + _keystrg = _keystrg + "-" + _knam; + } forEach _keys; + _keystrg = [_keystrg, "^ ", ""] call CBA_fnc_replace; + _keystrg = [_keystrg, "^-", ""] call CBA_fnc_replace; + _keystrg = [_keystrg, "^", "None"] call CBA_fnc_replace; + _keystrg +}; +_pkeys = { + _pary = []; + _tpages = []; + _cEvents = configFile/"CfgSettings"/"CBA"/"events"; + for "_i" from 0 to (count _cEvents) - 1 do { + _cSys = _cEvents select _i; + _tSys = configName _cSys; + if (isNumber ((_cSys select 0)/"key")) then { + //format system name + _aSys = [_tSys, "_"] call CBA_fnc_split; + _tS = "^"; + {if (_x != "ace" && _x != "sys") then {_tS = _tS + " " + _x}} forEach _aSys; + _tS = [_tS, "^ ", ""] call CBA_fnc_replace; + _tS = format["%1:",_tS]; + PUSH(_pary,_tS); + for "_j" from 0 to (count _cSys) - 1 do { + _c = _cSys select _j; + _tC = configName _c; + _tC = [_tC, "_", " "] call CBA_fnc_replace; + //key + _key = getNumber (_c/"key"); + _shift = getNumber (_c/"shift"); + _ctrl = getNumber (_c/"ctrl"); + _alt = getNumber (_c/"alt"); + _keyn = [_key,_shift,_ctrl,_alt] call _pkeynam; + _tC = format[" %1: %2",_tC,_keyn]; + PUSH(_pary,_tC); + }; + }; + if (count _pary > 20) then { //split full page + PUSH(_tpages,_pary); + _pary = []; + }; + }; + if (count _pary > 0) then { //partial page + PUSH(_tpages,_pary); + _pary = []; + }; + _tpages +}; + +//pages (make sure each will fit within 24 lines, word wrap is on) +switch(_menu) do { + case "MAIN": { //note: not all scripting commands available on main menu (not compiled yet?) + _fadet = 13; + _page1 = _pcredits; + }; + case "SING": { + _fadet = 20; //fade time + _color = [1,1,1,1]; + //_bcolor = [0,0,0,0.3]; + _page1 = _pcredits; + _newpages = [] call _pkeys; + _pstart = 2; + _pcount = count _newpages; + _pnext = _pstart + _pcount; + }; + case "MULT": { + _fadet = 20; + _color = [1,1,1,1]; + //_bcolor = [0,0,0,0.3]; + _page1 = _pcredits; + _newpages = [] call _pkeys; + _pstart = 2; + _pcount = count _newpages; + _pnext = _pstart + _pcount; + }; + default {}; +}; + +//main menu display +if (typeName(_data select 0) == "DISPLAY") then { + _display = _data select 0; +}; + +if (typeName(_data select 0) == "CONTROL") then { + _control = _data select 0; + _display = ctrlParent _control; +}; + +//dynamic pages +_pnames = []; +for "_x" from _pstart to _pnext - 1 do { + _pnam = format ["_page%1",_x]; + PUSH(_pnames,_pnam); +}; +private _pnames; +for "_x" from 0 to _pcount - 1 do { + call compile format ["%1 = %2", _pnames select _x, _newpages select _x]; +}; + +//get num pages +_pages = 0; +_run = true; +while {_run} do { + INC(_pages); + if (isNil format ["_page%1", _pages]) exitWith {_pages = _pages - 1; _run = false}; +}; + +if (_pages > 0) then { + //Dialog + createDialog "ACE_ABOUT_DLG"; + _disp = uiNamespace getVariable "ACE_ABOUT_DLG"; + _ctrl = _disp displayCtrl 1141371; + _next = _disp displayCtrl 1141372; + + if (_pages > 1) then {_next ctrlSetText "Next"}; + + _ctrl ctrlSetFade 1; + _ctrl ctrlCommit 0; + _ctrl ctrlSetFade 0; + _ctrl ctrlCommit 3; + + ACE_ABOUT_INC = 0; + _input = { //local function + _nesc = isNil "ACE_ABOUT_STP"; + if (_pages == 1) then {ACE_ABOUT_INC = 0}; //ignore special control + _unset = (ACE_ABOUT_INC == 0) && ACE_ABOUT_RUN; + if (_unset && _nesc) then {false} else {_fadet = _fadet + 5; true}; + }; + + //by default cycle + for "_p" from 1 to _pages do { + _text = ""; + _page = call compile format["_page%1",_p]; + _curPage = _p; + { + _text = _text + _x + "
"; + _ctrl ctrlSetStructuredText parseText _text; + if (call _input) exitWith {_p = _pages}; + if (_x != "") then {uisleep 0.8}; + } forEach _page; + }; + + _run = true; + while {if (isNil "ACE_ABOUT_STP") then {_run} else {false}} do { + _ctrl ctrlSetFade 0; + _ctrl ctrlCommit 0; + if (!isNil "_color") then {_ctrl ctrlSetTextColor _color}; + if (!isNil "_bcolor") then {_ctrl ctrlSetBackgroundColor _bcolor}; + + _curPage = _curPage + ACE_ABOUT_INC; + if (_curPage > _pages) then {_curPage = 1}; + if (_curPage <= 0) then {_curPage = 1}; + ACE_ABOUT_INC = 0; + + if (!ACE_ABOUT_RUN) then {ACE_ABOUT_RUN = true}; + + _text = ""; + _page = call compile format ["_page%1",_curPage]; + {_text = _text + _x + "
"} forEach _page; + _ctrl ctrlSetStructuredText parseText _text; + + _ctrl ctrlSetFade 1; + _ctrl ctrlCommit _fadet; + + _time = time + _fadet + 2; + waitUntil{uisleep 1; _run = call _input; _faded = time > _time; (_run || _faded)}; + }; //while RUN +}; +ACE_ABOUT_STP = Nil; +ACE_ABOUT_RUN = Nil; closeDialog 0; \ No newline at end of file diff --git a/addons/main/config.cpp b/addons/main/config.cpp index eb136f84cf..190b8a7677 100644 --- a/addons/main/config.cpp +++ b/addons/main/config.cpp @@ -1,589 +1,589 @@ -#include "script_component.hpp" - -class CfgPatches { - class ADDON { - units[] = {}; - weapons[] = {}; - requiredVersion = REQUIRED_VERSION; - requiredAddons[] = { - "a3_air_f", - "a3_air_f_beta", - "a3_air_f_beta_heli_attack_01", - "a3_air_f_beta_heli_attack_02", - "a3_air_f_beta_heli_transport_01", - "a3_air_f_beta_heli_transport_02", - "a3_air_f_beta_parachute_01", - "a3_air_f_beta_parachute_02", - "a3_air_f_epb_heli_light_03", - "a3_air_f_epc_plane_cas_01", - "a3_air_f_epc_plane_cas_02", - "a3_air_f_epc_plane_fighter_03", - "a3_air_f_gamma_plane_fighter_03", - "a3_air_f_gamma_uav_01", - "a3_air_f_gamma_uav_02", - "a3_air_f_heli", - "a3_air_f_heli_heli_attack_01", - "a3_air_f_heli_heli_attack_02", - "a3_air_f_heli_heli_light_01", - "a3_air_f_heli_heli_light_02", - "a3_air_f_heli_heli_light_03", - "a3_air_f_heli_heli_transport_01", - "a3_air_f_heli_heli_transport_02", - "a3_air_f_heli_heli_transport_03", - "a3_air_f_heli_heli_transport_04", - "a3_air_f_heli_light_01", - "a3_air_f_heli_light_02", - "a3_animals_f", - "a3_animals_f_animconfig", - "a3_animals_f_chicken", - "a3_animals_f_dog", - "a3_animals_f_fishes", - "a3_animals_f_goat", - "a3_animals_f_kestrel", - "a3_animals_f_rabbit", - "a3_animals_f_seagull", - "a3_animals_f_sheep", - "a3_animals_f_snakes", - "a3_animals_f_turtle", - "a3_anims_f", - "a3_anims_f_config_sdr", - "a3_anims_f_epa", - "a3_anims_f_epc", - "a3_anims_f_heli", - "a3_anims_f_kart", - "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_02", - "a3_armor_f_epb_apc_tracked_03", - "a3_armor_f_epb_mbt_03", - "a3_armor_f_epc_mbt_01", - "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_boat_armed_01", - "a3_boat_f_beta_boat_transport_01", - "a3_boat_f_boat_armed_01", - "a3_boat_f_boat_transport_01", - "a3_boat_f_civilian_boat", - "a3_boat_f_epc_submarine_01_f", - "a3_boat_f_gamma_boat_transport_01", - "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_heli", - "a3_characters_f", - "a3_characters_f_beta", - "a3_characters_f_blufor", - "a3_characters_f_bootcamp", - "a3_characters_f_bootcamp_common", - "a3_characters_f_civil", - "a3_characters_f_common", - "a3_characters_f_epa", - "a3_characters_f_epb", - "a3_characters_f_epb_heads", - "a3_characters_f_epc", - "a3_characters_f_gamma", - "a3_characters_f_heads", - "a3_characters_f_indep", - "a3_characters_f_kart", - "a3_characters_f_mark", - "a3_characters_f_opfor", - "a3_characters_f_proxies", - "a3_data_f", - "a3_data_f_bootcamp", - "a3_data_f_curator", - "a3_data_f_curator_characters", - "a3_data_f_curator_eagle", - "a3_data_f_curator_intel", - "a3_data_f_curator_misc", - "a3_data_f_curator_respawn", - "a3_data_f_curator_virtual", - "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_dubbing_radio_f", - "a3_editor_f", - "a3_functions_f", - "a3_functions_f_bootcamp", - "a3_functions_f_curator", - "a3_functions_f_epa", - "a3_functions_f_epc", - "a3_functions_f_heli", - "a3_functions_f_mark", - "a3_functions_f_mp_mark", - "a3_language_f", - "a3_language_f_beta", - "a3_language_f_bootcamp", - "a3_language_f_curator", - "a3_language_f_epa", - "a3_language_f_epb", - "a3_language_f_epc", - "a3_language_f_gamma", - "a3_language_f_heli", - "a3_language_f_kart", - "a3_language_f_mark", - "a3_language_f_mp_mark", - "a3_languagemissions_f", - "a3_languagemissions_f_beta", - "a3_languagemissions_f_gamma", - "a3_languagemissions_f_kart", - "a3_languagemissions_f_mp_mark", - "a3_map_altis", - "a3_map_altis_scenes", - "a3_map_data", - "a3_map_stratis", - "a3_map_stratis_scenes", - "a3_map_vr_scenes", - "a3_misc_f", - "a3_misc_f_helpers", - "a3_missions_f", - "a3_missions_f_beta", - "a3_missions_f_bootcamp", - "a3_missions_f_curator", - "a3_missions_f_epa", - "a3_missions_f_epb", - "a3_missions_f_epc", - "a3_missions_f_gamma", - "a3_missions_f_heli", - "a3_missions_f_kart", - "a3_missions_f_mark", - "a3_missions_f_mp_mark", - "a3_modules_f", - "a3_modules_f_beta", - "a3_modules_f_beta_firingdrills", - "a3_modules_f_bootcamp", - "a3_modules_f_bootcamp_misc", - "a3_modules_f_curator", - "a3_modules_f_curator_animals", - "a3_modules_f_curator_cas", - "a3_modules_f_curator_chemlights", - "a3_modules_f_curator_curator", - "a3_modules_f_curator_effects", - "a3_modules_f_curator_environment", - "a3_modules_f_curator_flares", - "a3_modules_f_curator_intel", - "a3_modules_f_curator_lightning", - "a3_modules_f_curator_mines", - "a3_modules_f_curator_misc", - "a3_modules_f_curator_multiplayer", - "a3_modules_f_curator_objectives", - "a3_modules_f_curator_ordnance", - "a3_modules_f_curator_respawn", - "a3_modules_f_curator_smokeshells", - "a3_modules_f_dyno", - "a3_modules_f_effects", - "a3_modules_f_epb", - "a3_modules_f_epb_misc", - "a3_modules_f_events", - "a3_modules_f_groupmodifiers", - "a3_modules_f_hc", - "a3_modules_f_heli", - "a3_modules_f_heli_spawnai", - "a3_modules_f_intel", - "a3_modules_f_kart", - "a3_modules_f_kart_timetrials", - "a3_modules_f_livefeed", - "a3_modules_f_mark", - "a3_modules_f_mark_firingdrills", - "a3_modules_f_mark_objectives", - "a3_modules_f_marta", - "a3_modules_f_misc", - "a3_modules_f_mp_mark", - "a3_modules_f_multiplayer", - "a3_modules_f_objectmodifiers", - "a3_modules_f_sites", - "a3_modules_f_skirmish", - "a3_modules_f_strategicmap", - "a3_modules_f_supports", - "a3_modules_f_uav", - "a3_music_f", - "a3_music_f_bootcamp", - "a3_music_f_epa", - "a3_music_f_epb", - "a3_music_f_epc", - "a3_music_f_heli", - "a3_music_f_mark", - "a3_plants_f_bush", - "a3_roads_f", - "a3_rocks_f", - "a3_signs_f", - "a3_signs_f_ad", - "a3_soft_f", - "a3_soft_f_beta_quadbike", - "a3_soft_f_bootcamp_offroad_01", - "a3_soft_f_bootcamp_quadbike", - "a3_soft_f_bootcamp_truck", - "a3_soft_f_car", - "a3_soft_f_crusher_ugv", - "a3_soft_f_epc_truck_03", - "a3_soft_f_gamma_hemtt", - "a3_soft_f_gamma_offroad", - "a3_soft_f_gamma_quadbike", - "a3_soft_f_gamma_truckheavy", - "a3_soft_f_heli_car", - "a3_soft_f_heli_crusher_ugv", - "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_suv", - "a3_soft_f_heli_truck", - "a3_soft_f_hemtt", - "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_suv", - "a3_soft_f_truck", - "a3_soft_f_truckheavy", - "a3_sounds_f", - "a3_sounds_f_bootcamp", - "a3_sounds_f_epb", - "a3_sounds_f_epc", - "a3_static_f", - "a3_static_f_beta_mortar_01", - "a3_static_f_gamma", - "a3_static_f_gamma_aa", - "a3_static_f_gamma_at", - "a3_static_f_gamma_mortar_01", - "a3_static_f_mark_designator_01", - "a3_static_f_mark_designator_02", - "a3_static_f_mortar_01", - "a3_structures_f", - "a3_structures_f_bootcamp_civ_camping", - "a3_structures_f_bootcamp_civ_sportsgrounds", - "a3_structures_f_bootcamp_ind_cargo", - "a3_structures_f_bootcamp_items_electronics", - "a3_structures_f_bootcamp_items_food", - "a3_structures_f_bootcamp_items_sport", - "a3_structures_f_bootcamp_system", - "a3_structures_f_bootcamp_training", - "a3_structures_f_bootcamp_vr_blocks", - "a3_structures_f_bootcamp_vr_coverobjects", - "a3_structures_f_bootcamp_vr_helpers", - "a3_structures_f_bridges", - "a3_structures_f_civ", - "a3_structures_f_civ_accessories", - "a3_structures_f_civ_ancient", - "a3_structures_f_civ_belltowers", - "a3_structures_f_civ_calvaries", - "a3_structures_f_civ_camping", - "a3_structures_f_civ_chapels", - "a3_structures_f_civ_constructions", - "a3_structures_f_civ_dead", - "a3_structures_f_civ_garbage", - "a3_structures_f_civ_graffiti", - "a3_structures_f_civ_infoboards", - "a3_structures_f_civ_kiosks", - "a3_structures_f_civ_lamps", - "a3_structures_f_civ_market", - "a3_structures_f_civ_offices", - "a3_structures_f_civ_pavements", - "a3_structures_f_civ_playground", - "a3_structures_f_civ_sportsgrounds", - "a3_structures_f_civ_statues", - "a3_structures_f_civ_tourism", - "a3_structures_f_dominants", - "a3_structures_f_dominants_amphitheater", - "a3_structures_f_dominants_castle", - "a3_structures_f_dominants_church", - "a3_structures_f_dominants_hospital", - "a3_structures_f_dominants_lighthouse", - "a3_structures_f_dominants_wip", - "a3_structures_f_epa_civ_camping", - "a3_structures_f_epa_civ_constructions", - "a3_structures_f_epa_items_electronics", - "a3_structures_f_epa_items_food", - "a3_structures_f_epa_items_medical", - "a3_structures_f_epa_items_tools", - "a3_structures_f_epa_items_vessels", - "a3_structures_f_epa_mil_scrapyard", - "a3_structures_f_epa_walls", - "a3_structures_f_epb_civ_accessories", - "a3_structures_f_epb_civ_camping", - "a3_structures_f_epb_civ_dead", - "a3_structures_f_epb_civ_garbage", - "a3_structures_f_epb_civ_graffiti", - "a3_structures_f_epb_civ_playground", - "a3_structures_f_epb_furniture", - "a3_structures_f_epb_items_documents", - "a3_structures_f_epb_items_luggage", - "a3_structures_f_epb_items_military", - "a3_structures_f_epb_items_vessels", - "a3_structures_f_epb_naval_fishing", - "a3_structures_f_epc_civ_accessories", - "a3_structures_f_epc_civ_camping", - "a3_structures_f_epc_civ_garbage", - "a3_structures_f_epc_civ_infoboards", - "a3_structures_f_epc_civ_kiosks", - "a3_structures_f_epc_civ_playground", - "a3_structures_f_epc_civ_tourism", - "a3_structures_f_epc_dominants_ghosthotel", - "a3_structures_f_epc_dominants_stadium", - "a3_structures_f_epc_furniture", - "a3_structures_f_epc_items_documents", - "a3_structures_f_epc_items_electronics", - "a3_structures_f_epc_walls", - "a3_structures_f_furniture", - "a3_structures_f_heli_civ_accessories", - "a3_structures_f_heli_civ_constructions", - "a3_structures_f_heli_civ_garbage", - "a3_structures_f_heli_civ_market", - "a3_structures_f_heli_furniture", - "a3_structures_f_heli_ind_airport", - "a3_structures_f_heli_ind_cargo", - "a3_structures_f_heli_ind_machines", - "a3_structures_f_heli_items_airport", - "a3_structures_f_heli_items_electronics", - "a3_structures_f_heli_items_food", - "a3_structures_f_heli_items_luggage", - "a3_structures_f_heli_items_sport", - "a3_structures_f_heli_items_tools", - "a3_structures_f_heli_vr_helpers", - "a3_structures_f_households", - "a3_structures_f_households_addons", - "a3_structures_f_households_house_big01", - "a3_structures_f_households_house_big02", - "a3_structures_f_households_house_shop01", - "a3_structures_f_households_house_shop02", - "a3_structures_f_households_house_small01", - "a3_structures_f_households_house_small02", - "a3_structures_f_households_house_small03", - "a3_structures_f_households_slum", - "a3_structures_f_households_stone_big", - "a3_structures_f_households_stone_shed", - "a3_structures_f_households_stone_small", - "a3_structures_f_households_wip", - "a3_structures_f_ind", - "a3_structures_f_ind_airport", - "a3_structures_f_ind_cargo", - "a3_structures_f_ind_carservice", - "a3_structures_f_ind_concretemixingplant", - "a3_structures_f_ind_crane", - "a3_structures_f_ind_dieselpowerplant", - "a3_structures_f_ind_factory", - "a3_structures_f_ind_fuelstation", - "a3_structures_f_ind_fuelstation_small", - "a3_structures_f_ind_pipes", - "a3_structures_f_ind_powerlines", - "a3_structures_f_ind_reservoirtank", - "a3_structures_f_ind_shed", - "a3_structures_f_ind_solarpowerplant", - "a3_structures_f_ind_tank", - "a3_structures_f_ind_transmitter_tower", - "a3_structures_f_ind_wavepowerplant", - "a3_structures_f_ind_windmill", - "a3_structures_f_ind_windpowerplant", - "a3_structures_f_items", - "a3_structures_f_items_cans", - "a3_structures_f_items_documents", - "a3_structures_f_items_electronics", - "a3_structures_f_items_gadgets", - "a3_structures_f_items_luggage", - "a3_structures_f_items_medical", - "a3_structures_f_items_military", - "a3_structures_f_items_stationery", - "a3_structures_f_items_tools", - "a3_structures_f_items_valuables", - "a3_structures_f_items_vessels", - "a3_structures_f_kart_civ_sportsgrounds", - "a3_structures_f_kart_mil_flags", - "a3_structures_f_kart_signs_companies", - "a3_structures_f_mark_items_military", - "a3_structures_f_mark_items_sport", - "a3_structures_f_mark_mil_flags", - "a3_structures_f_mark_training", - "a3_structures_f_mark_vr_helpers", - "a3_structures_f_mark_vr_shapes", - "a3_structures_f_mark_vr_targets", - "a3_structures_f_mil", - "a3_structures_f_mil_bagbunker", - "a3_structures_f_mil_bagfence", - "a3_structures_f_mil_barracks", - "a3_structures_f_mil_bunker", - "a3_structures_f_mil_cargo", - "a3_structures_f_mil_flags", - "a3_structures_f_mil_fortification", - "a3_structures_f_mil_helipads", - "a3_structures_f_mil_offices", - "a3_structures_f_mil_radar", - "a3_structures_f_mil_scrapyard", - "a3_structures_f_mil_shelters", - "a3_structures_f_mil_tenthangar", - "a3_structures_f_naval", - "a3_structures_f_naval_buoys", - "a3_structures_f_naval_fishing", - "a3_structures_f_naval_piers", - "a3_structures_f_naval_rowboats", - "a3_structures_f_research", - "a3_structures_f_signs_companies", - "a3_structures_f_system", - "a3_structures_f_training", - "a3_structures_f_training_invisibletarget", - "a3_structures_f_walls", - "a3_structures_f_wrecks", - "a3_supplies_f_heli", - "a3_supplies_f_heli_bladders", - "a3_supplies_f_heli_cargonets", - "a3_supplies_f_heli_fuel", - "a3_supplies_f_heli_slingload", - "a3_supplies_f_mark", - "a3_uav_f_characters_f_gamma", - "a3_uav_f_weapons_f_gamma_ammoboxes", - "a3_ui_f", - "a3_ui_f_bootcamp", - "a3_ui_f_curator", - "a3_ui_f_heli", - "a3_ui_f_kart", - "a3_ui_f_mark", - "a3_ui_f_mp_mark", - "a3_uifonts_f", - "a3_weapons_f", - "a3_weapons_f_aaf", - "a3_weapons_f_acc", - "a3_weapons_f_ammoboxes", - "a3_weapons_f_beta", - "a3_weapons_f_beta_acc", - "a3_weapons_f_beta_ammoboxes", - "a3_weapons_f_beta_ebr", - "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_m320", - "a3_weapons_f_csat", - "a3_weapons_f_dummyweapons", - "a3_weapons_f_ebr", - "a3_weapons_f_epa", - "a3_weapons_f_epa_acc", - "a3_weapons_f_epa_ammoboxes", - "a3_weapons_f_epa_ebr", - "a3_weapons_f_epa_longrangerifles_dmr_01", - "a3_weapons_f_epa_longrangerifles_gm6", - "a3_weapons_f_epa_rifles_mx", - "a3_weapons_f_epb", - "a3_weapons_f_epb_acc", - "a3_weapons_f_epb_ammoboxes", - "a3_weapons_f_epb_longrangerifles_gm3", - "a3_weapons_f_epb_longrangerifles_m320", - "a3_weapons_f_epb_rifles_mx_black", - "a3_weapons_f_epc", - "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_headgear", - "a3_weapons_f_itemholders", - "a3_weapons_f_items", - "a3_weapons_f_kart", - "a3_weapons_f_kart_pistols_pistol_signal_f", - "a3_weapons_f_launchers_law", - "a3_weapons_f_launchers_nlaw", - "a3_weapons_f_launchers_titan", - "a3_weapons_f_longrangerifles_gm6", - "a3_weapons_f_longrangerifles_m320", - "a3_weapons_f_machineguns_m200", - "a3_weapons_f_machineguns_zafir", - "a3_weapons_f_mark", - "a3_weapons_f_mark_acc", - "a3_weapons_f_mark_ebr", - "a3_weapons_f_mark_longrangerifles_dmr_01", - "a3_weapons_f_mark_longrangerifles_dmr_02", - "a3_weapons_f_mark_longrangerifles_dmr_03", - "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_gm6", - "a3_weapons_f_mark_longrangerifles_gm6_camo", - "a3_weapons_f_mark_longrangerifles_m320", - "a3_weapons_f_mark_longrangerifles_m320_camo", - "a3_weapons_f_mark_machineguns_m200", - "a3_weapons_f_mark_machineguns_mmg_01", - "a3_weapons_f_mark_machineguns_mmg_02", - "a3_weapons_f_mark_machineguns_zafir", - "a3_weapons_f_mark_rifles_khaybar", - "a3_weapons_f_mark_rifles_mk20", - "a3_weapons_f_mark_rifles_mx", - "a3_weapons_f_mark_rifles_sdar", - "a3_weapons_f_mark_rifles_trg20", - "a3_weapons_f_nato", - "a3_weapons_f_pistols_acpc2", - "a3_weapons_f_pistols_p07", - "a3_weapons_f_pistols_pdw2000", - "a3_weapons_f_pistols_pistol_heavy_01", - "a3_weapons_f_pistols_pistol_heavy_02", - "a3_weapons_f_pistols_rook40", - "a3_weapons_f_rifles_khaybar", - "a3_weapons_f_rifles_mk20", - "a3_weapons_f_rifles_mx", - "a3_weapons_f_rifles_sdar", - "a3_weapons_f_rifles_smg_02", - "a3_weapons_f_rifles_trg20", - "a3_weapons_f_rifles_vector", - "a3_weapons_f_uniforms", - "a3_weapons_f_vests", - "a3data", - "map_vr", - "extended_eventhandlers", "CBA_UI", "CBA_XEH", "CBA_XEH_A3" - }; - author[] = {"ACE Team"}; - authorUrl = ""; - versionDesc = "A.C.E."; - versionAct = QUOTE(['MAIN',_this] execVM '\z\ace\addons\main\about.sqf';); - VERSION_CONFIG; - }; -}; - -class CfgMods { - class PREFIX { - dir = "@ACE"; - name = "Core - Advanced Combat Environment"; - picture = "A3\Ui_f\data\Logos\arma3_expansion_alpha_ca"; - hidePicture = "true"; - hideName = "true"; - actionName = "Website"; - action = "http://ace.dev-heaven.net"; - description = "Bugtracker: "; - }; -}; - -class CfgSettings { - class CBA { - class Versioning { - class PREFIX { - level = DEFAULT_VERSIONING_LEVEL; - handler = "ace_common_fnc_mismatch"; - class Dependencies { - CBA[]={"cba_main", {1,0,0}, "true"}; - XEH[]={"cba_xeh", {1,0,0}, "true"}; - }; - }; - }; - /* - class Registry { - class PREFIX { - removed[] = {}; - }; - }; - */ - }; -}; - -#include "CfgModuleCategories.hpp" +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = { + "a3_air_f", + "a3_air_f_beta", + "a3_air_f_beta_heli_attack_01", + "a3_air_f_beta_heli_attack_02", + "a3_air_f_beta_heli_transport_01", + "a3_air_f_beta_heli_transport_02", + "a3_air_f_beta_parachute_01", + "a3_air_f_beta_parachute_02", + "a3_air_f_epb_heli_light_03", + "a3_air_f_epc_plane_cas_01", + "a3_air_f_epc_plane_cas_02", + "a3_air_f_epc_plane_fighter_03", + "a3_air_f_gamma_plane_fighter_03", + "a3_air_f_gamma_uav_01", + "a3_air_f_gamma_uav_02", + "a3_air_f_heli", + "a3_air_f_heli_heli_attack_01", + "a3_air_f_heli_heli_attack_02", + "a3_air_f_heli_heli_light_01", + "a3_air_f_heli_heli_light_02", + "a3_air_f_heli_heli_light_03", + "a3_air_f_heli_heli_transport_01", + "a3_air_f_heli_heli_transport_02", + "a3_air_f_heli_heli_transport_03", + "a3_air_f_heli_heli_transport_04", + "a3_air_f_heli_light_01", + "a3_air_f_heli_light_02", + "a3_animals_f", + "a3_animals_f_animconfig", + "a3_animals_f_chicken", + "a3_animals_f_dog", + "a3_animals_f_fishes", + "a3_animals_f_goat", + "a3_animals_f_kestrel", + "a3_animals_f_rabbit", + "a3_animals_f_seagull", + "a3_animals_f_sheep", + "a3_animals_f_snakes", + "a3_animals_f_turtle", + "a3_anims_f", + "a3_anims_f_config_sdr", + "a3_anims_f_epa", + "a3_anims_f_epc", + "a3_anims_f_heli", + "a3_anims_f_kart", + "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_02", + "a3_armor_f_epb_apc_tracked_03", + "a3_armor_f_epb_mbt_03", + "a3_armor_f_epc_mbt_01", + "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_boat_armed_01", + "a3_boat_f_beta_boat_transport_01", + "a3_boat_f_boat_armed_01", + "a3_boat_f_boat_transport_01", + "a3_boat_f_civilian_boat", + "a3_boat_f_epc_submarine_01_f", + "a3_boat_f_gamma_boat_transport_01", + "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_heli", + "a3_characters_f", + "a3_characters_f_beta", + "a3_characters_f_blufor", + "a3_characters_f_bootcamp", + "a3_characters_f_bootcamp_common", + "a3_characters_f_civil", + "a3_characters_f_common", + "a3_characters_f_epa", + "a3_characters_f_epb", + "a3_characters_f_epb_heads", + "a3_characters_f_epc", + "a3_characters_f_gamma", + "a3_characters_f_heads", + "a3_characters_f_indep", + "a3_characters_f_kart", + "a3_characters_f_mark", + "a3_characters_f_opfor", + "a3_characters_f_proxies", + "a3_data_f", + "a3_data_f_bootcamp", + "a3_data_f_curator", + "a3_data_f_curator_characters", + "a3_data_f_curator_eagle", + "a3_data_f_curator_intel", + "a3_data_f_curator_misc", + "a3_data_f_curator_respawn", + "a3_data_f_curator_virtual", + "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_dubbing_radio_f", + "a3_editor_f", + "a3_functions_f", + "a3_functions_f_bootcamp", + "a3_functions_f_curator", + "a3_functions_f_epa", + "a3_functions_f_epc", + "a3_functions_f_heli", + "a3_functions_f_mark", + "a3_functions_f_mp_mark", + "a3_language_f", + "a3_language_f_beta", + "a3_language_f_bootcamp", + "a3_language_f_curator", + "a3_language_f_epa", + "a3_language_f_epb", + "a3_language_f_epc", + "a3_language_f_gamma", + "a3_language_f_heli", + "a3_language_f_kart", + "a3_language_f_mark", + "a3_language_f_mp_mark", + "a3_languagemissions_f", + "a3_languagemissions_f_beta", + "a3_languagemissions_f_gamma", + "a3_languagemissions_f_kart", + "a3_languagemissions_f_mp_mark", + "a3_map_altis", + "a3_map_altis_scenes", + "a3_map_data", + "a3_map_stratis", + "a3_map_stratis_scenes", + "a3_map_vr_scenes", + "a3_misc_f", + "a3_misc_f_helpers", + "a3_missions_f", + "a3_missions_f_beta", + "a3_missions_f_bootcamp", + "a3_missions_f_curator", + "a3_missions_f_epa", + "a3_missions_f_epb", + "a3_missions_f_epc", + "a3_missions_f_gamma", + "a3_missions_f_heli", + "a3_missions_f_kart", + "a3_missions_f_mark", + "a3_missions_f_mp_mark", + "a3_modules_f", + "a3_modules_f_beta", + "a3_modules_f_beta_firingdrills", + "a3_modules_f_bootcamp", + "a3_modules_f_bootcamp_misc", + "a3_modules_f_curator", + "a3_modules_f_curator_animals", + "a3_modules_f_curator_cas", + "a3_modules_f_curator_chemlights", + "a3_modules_f_curator_curator", + "a3_modules_f_curator_effects", + "a3_modules_f_curator_environment", + "a3_modules_f_curator_flares", + "a3_modules_f_curator_intel", + "a3_modules_f_curator_lightning", + "a3_modules_f_curator_mines", + "a3_modules_f_curator_misc", + "a3_modules_f_curator_multiplayer", + "a3_modules_f_curator_objectives", + "a3_modules_f_curator_ordnance", + "a3_modules_f_curator_respawn", + "a3_modules_f_curator_smokeshells", + "a3_modules_f_dyno", + "a3_modules_f_effects", + "a3_modules_f_epb", + "a3_modules_f_epb_misc", + "a3_modules_f_events", + "a3_modules_f_groupmodifiers", + "a3_modules_f_hc", + "a3_modules_f_heli", + "a3_modules_f_heli_spawnai", + "a3_modules_f_intel", + "a3_modules_f_kart", + "a3_modules_f_kart_timetrials", + "a3_modules_f_livefeed", + "a3_modules_f_mark", + "a3_modules_f_mark_firingdrills", + "a3_modules_f_mark_objectives", + "a3_modules_f_marta", + "a3_modules_f_misc", + "a3_modules_f_mp_mark", + "a3_modules_f_multiplayer", + "a3_modules_f_objectmodifiers", + "a3_modules_f_sites", + "a3_modules_f_skirmish", + "a3_modules_f_strategicmap", + "a3_modules_f_supports", + "a3_modules_f_uav", + "a3_music_f", + "a3_music_f_bootcamp", + "a3_music_f_epa", + "a3_music_f_epb", + "a3_music_f_epc", + "a3_music_f_heli", + "a3_music_f_mark", + "a3_plants_f_bush", + "a3_roads_f", + "a3_rocks_f", + "a3_signs_f", + "a3_signs_f_ad", + "a3_soft_f", + "a3_soft_f_beta_quadbike", + "a3_soft_f_bootcamp_offroad_01", + "a3_soft_f_bootcamp_quadbike", + "a3_soft_f_bootcamp_truck", + "a3_soft_f_car", + "a3_soft_f_crusher_ugv", + "a3_soft_f_epc_truck_03", + "a3_soft_f_gamma_hemtt", + "a3_soft_f_gamma_offroad", + "a3_soft_f_gamma_quadbike", + "a3_soft_f_gamma_truckheavy", + "a3_soft_f_heli_car", + "a3_soft_f_heli_crusher_ugv", + "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_suv", + "a3_soft_f_heli_truck", + "a3_soft_f_hemtt", + "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_suv", + "a3_soft_f_truck", + "a3_soft_f_truckheavy", + "a3_sounds_f", + "a3_sounds_f_bootcamp", + "a3_sounds_f_epb", + "a3_sounds_f_epc", + "a3_static_f", + "a3_static_f_beta_mortar_01", + "a3_static_f_gamma", + "a3_static_f_gamma_aa", + "a3_static_f_gamma_at", + "a3_static_f_gamma_mortar_01", + "a3_static_f_mark_designator_01", + "a3_static_f_mark_designator_02", + "a3_static_f_mortar_01", + "a3_structures_f", + "a3_structures_f_bootcamp_civ_camping", + "a3_structures_f_bootcamp_civ_sportsgrounds", + "a3_structures_f_bootcamp_ind_cargo", + "a3_structures_f_bootcamp_items_electronics", + "a3_structures_f_bootcamp_items_food", + "a3_structures_f_bootcamp_items_sport", + "a3_structures_f_bootcamp_system", + "a3_structures_f_bootcamp_training", + "a3_structures_f_bootcamp_vr_blocks", + "a3_structures_f_bootcamp_vr_coverobjects", + "a3_structures_f_bootcamp_vr_helpers", + "a3_structures_f_bridges", + "a3_structures_f_civ", + "a3_structures_f_civ_accessories", + "a3_structures_f_civ_ancient", + "a3_structures_f_civ_belltowers", + "a3_structures_f_civ_calvaries", + "a3_structures_f_civ_camping", + "a3_structures_f_civ_chapels", + "a3_structures_f_civ_constructions", + "a3_structures_f_civ_dead", + "a3_structures_f_civ_garbage", + "a3_structures_f_civ_graffiti", + "a3_structures_f_civ_infoboards", + "a3_structures_f_civ_kiosks", + "a3_structures_f_civ_lamps", + "a3_structures_f_civ_market", + "a3_structures_f_civ_offices", + "a3_structures_f_civ_pavements", + "a3_structures_f_civ_playground", + "a3_structures_f_civ_sportsgrounds", + "a3_structures_f_civ_statues", + "a3_structures_f_civ_tourism", + "a3_structures_f_dominants", + "a3_structures_f_dominants_amphitheater", + "a3_structures_f_dominants_castle", + "a3_structures_f_dominants_church", + "a3_structures_f_dominants_hospital", + "a3_structures_f_dominants_lighthouse", + "a3_structures_f_dominants_wip", + "a3_structures_f_epa_civ_camping", + "a3_structures_f_epa_civ_constructions", + "a3_structures_f_epa_items_electronics", + "a3_structures_f_epa_items_food", + "a3_structures_f_epa_items_medical", + "a3_structures_f_epa_items_tools", + "a3_structures_f_epa_items_vessels", + "a3_structures_f_epa_mil_scrapyard", + "a3_structures_f_epa_walls", + "a3_structures_f_epb_civ_accessories", + "a3_structures_f_epb_civ_camping", + "a3_structures_f_epb_civ_dead", + "a3_structures_f_epb_civ_garbage", + "a3_structures_f_epb_civ_graffiti", + "a3_structures_f_epb_civ_playground", + "a3_structures_f_epb_furniture", + "a3_structures_f_epb_items_documents", + "a3_structures_f_epb_items_luggage", + "a3_structures_f_epb_items_military", + "a3_structures_f_epb_items_vessels", + "a3_structures_f_epb_naval_fishing", + "a3_structures_f_epc_civ_accessories", + "a3_structures_f_epc_civ_camping", + "a3_structures_f_epc_civ_garbage", + "a3_structures_f_epc_civ_infoboards", + "a3_structures_f_epc_civ_kiosks", + "a3_structures_f_epc_civ_playground", + "a3_structures_f_epc_civ_tourism", + "a3_structures_f_epc_dominants_ghosthotel", + "a3_structures_f_epc_dominants_stadium", + "a3_structures_f_epc_furniture", + "a3_structures_f_epc_items_documents", + "a3_structures_f_epc_items_electronics", + "a3_structures_f_epc_walls", + "a3_structures_f_furniture", + "a3_structures_f_heli_civ_accessories", + "a3_structures_f_heli_civ_constructions", + "a3_structures_f_heli_civ_garbage", + "a3_structures_f_heli_civ_market", + "a3_structures_f_heli_furniture", + "a3_structures_f_heli_ind_airport", + "a3_structures_f_heli_ind_cargo", + "a3_structures_f_heli_ind_machines", + "a3_structures_f_heli_items_airport", + "a3_structures_f_heli_items_electronics", + "a3_structures_f_heli_items_food", + "a3_structures_f_heli_items_luggage", + "a3_structures_f_heli_items_sport", + "a3_structures_f_heli_items_tools", + "a3_structures_f_heli_vr_helpers", + "a3_structures_f_households", + "a3_structures_f_households_addons", + "a3_structures_f_households_house_big01", + "a3_structures_f_households_house_big02", + "a3_structures_f_households_house_shop01", + "a3_structures_f_households_house_shop02", + "a3_structures_f_households_house_small01", + "a3_structures_f_households_house_small02", + "a3_structures_f_households_house_small03", + "a3_structures_f_households_slum", + "a3_structures_f_households_stone_big", + "a3_structures_f_households_stone_shed", + "a3_structures_f_households_stone_small", + "a3_structures_f_households_wip", + "a3_structures_f_ind", + "a3_structures_f_ind_airport", + "a3_structures_f_ind_cargo", + "a3_structures_f_ind_carservice", + "a3_structures_f_ind_concretemixingplant", + "a3_structures_f_ind_crane", + "a3_structures_f_ind_dieselpowerplant", + "a3_structures_f_ind_factory", + "a3_structures_f_ind_fuelstation", + "a3_structures_f_ind_fuelstation_small", + "a3_structures_f_ind_pipes", + "a3_structures_f_ind_powerlines", + "a3_structures_f_ind_reservoirtank", + "a3_structures_f_ind_shed", + "a3_structures_f_ind_solarpowerplant", + "a3_structures_f_ind_tank", + "a3_structures_f_ind_transmitter_tower", + "a3_structures_f_ind_wavepowerplant", + "a3_structures_f_ind_windmill", + "a3_structures_f_ind_windpowerplant", + "a3_structures_f_items", + "a3_structures_f_items_cans", + "a3_structures_f_items_documents", + "a3_structures_f_items_electronics", + "a3_structures_f_items_gadgets", + "a3_structures_f_items_luggage", + "a3_structures_f_items_medical", + "a3_structures_f_items_military", + "a3_structures_f_items_stationery", + "a3_structures_f_items_tools", + "a3_structures_f_items_valuables", + "a3_structures_f_items_vessels", + "a3_structures_f_kart_civ_sportsgrounds", + "a3_structures_f_kart_mil_flags", + "a3_structures_f_kart_signs_companies", + "a3_structures_f_mark_items_military", + "a3_structures_f_mark_items_sport", + "a3_structures_f_mark_mil_flags", + "a3_structures_f_mark_training", + "a3_structures_f_mark_vr_helpers", + "a3_structures_f_mark_vr_shapes", + "a3_structures_f_mark_vr_targets", + "a3_structures_f_mil", + "a3_structures_f_mil_bagbunker", + "a3_structures_f_mil_bagfence", + "a3_structures_f_mil_barracks", + "a3_structures_f_mil_bunker", + "a3_structures_f_mil_cargo", + "a3_structures_f_mil_flags", + "a3_structures_f_mil_fortification", + "a3_structures_f_mil_helipads", + "a3_structures_f_mil_offices", + "a3_structures_f_mil_radar", + "a3_structures_f_mil_scrapyard", + "a3_structures_f_mil_shelters", + "a3_structures_f_mil_tenthangar", + "a3_structures_f_naval", + "a3_structures_f_naval_buoys", + "a3_structures_f_naval_fishing", + "a3_structures_f_naval_piers", + "a3_structures_f_naval_rowboats", + "a3_structures_f_research", + "a3_structures_f_signs_companies", + "a3_structures_f_system", + "a3_structures_f_training", + "a3_structures_f_training_invisibletarget", + "a3_structures_f_walls", + "a3_structures_f_wrecks", + "a3_supplies_f_heli", + "a3_supplies_f_heli_bladders", + "a3_supplies_f_heli_cargonets", + "a3_supplies_f_heli_fuel", + "a3_supplies_f_heli_slingload", + "a3_supplies_f_mark", + "a3_uav_f_characters_f_gamma", + "a3_uav_f_weapons_f_gamma_ammoboxes", + "a3_ui_f", + "a3_ui_f_bootcamp", + "a3_ui_f_curator", + "a3_ui_f_heli", + "a3_ui_f_kart", + "a3_ui_f_mark", + "a3_ui_f_mp_mark", + "a3_uifonts_f", + "a3_weapons_f", + "a3_weapons_f_aaf", + "a3_weapons_f_acc", + "a3_weapons_f_ammoboxes", + "a3_weapons_f_beta", + "a3_weapons_f_beta_acc", + "a3_weapons_f_beta_ammoboxes", + "a3_weapons_f_beta_ebr", + "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_m320", + "a3_weapons_f_csat", + "a3_weapons_f_dummyweapons", + "a3_weapons_f_ebr", + "a3_weapons_f_epa", + "a3_weapons_f_epa_acc", + "a3_weapons_f_epa_ammoboxes", + "a3_weapons_f_epa_ebr", + "a3_weapons_f_epa_longrangerifles_dmr_01", + "a3_weapons_f_epa_longrangerifles_gm6", + "a3_weapons_f_epa_rifles_mx", + "a3_weapons_f_epb", + "a3_weapons_f_epb_acc", + "a3_weapons_f_epb_ammoboxes", + "a3_weapons_f_epb_longrangerifles_gm3", + "a3_weapons_f_epb_longrangerifles_m320", + "a3_weapons_f_epb_rifles_mx_black", + "a3_weapons_f_epc", + "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_headgear", + "a3_weapons_f_itemholders", + "a3_weapons_f_items", + "a3_weapons_f_kart", + "a3_weapons_f_kart_pistols_pistol_signal_f", + "a3_weapons_f_launchers_law", + "a3_weapons_f_launchers_nlaw", + "a3_weapons_f_launchers_titan", + "a3_weapons_f_longrangerifles_gm6", + "a3_weapons_f_longrangerifles_m320", + "a3_weapons_f_machineguns_m200", + "a3_weapons_f_machineguns_zafir", + "a3_weapons_f_mark", + "a3_weapons_f_mark_acc", + "a3_weapons_f_mark_ebr", + "a3_weapons_f_mark_longrangerifles_dmr_01", + "a3_weapons_f_mark_longrangerifles_dmr_02", + "a3_weapons_f_mark_longrangerifles_dmr_03", + "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_gm6", + "a3_weapons_f_mark_longrangerifles_gm6_camo", + "a3_weapons_f_mark_longrangerifles_m320", + "a3_weapons_f_mark_longrangerifles_m320_camo", + "a3_weapons_f_mark_machineguns_m200", + "a3_weapons_f_mark_machineguns_mmg_01", + "a3_weapons_f_mark_machineguns_mmg_02", + "a3_weapons_f_mark_machineguns_zafir", + "a3_weapons_f_mark_rifles_khaybar", + "a3_weapons_f_mark_rifles_mk20", + "a3_weapons_f_mark_rifles_mx", + "a3_weapons_f_mark_rifles_sdar", + "a3_weapons_f_mark_rifles_trg20", + "a3_weapons_f_nato", + "a3_weapons_f_pistols_acpc2", + "a3_weapons_f_pistols_p07", + "a3_weapons_f_pistols_pdw2000", + "a3_weapons_f_pistols_pistol_heavy_01", + "a3_weapons_f_pistols_pistol_heavy_02", + "a3_weapons_f_pistols_rook40", + "a3_weapons_f_rifles_khaybar", + "a3_weapons_f_rifles_mk20", + "a3_weapons_f_rifles_mx", + "a3_weapons_f_rifles_sdar", + "a3_weapons_f_rifles_smg_02", + "a3_weapons_f_rifles_trg20", + "a3_weapons_f_rifles_vector", + "a3_weapons_f_uniforms", + "a3_weapons_f_vests", + "a3data", + "map_vr", + "extended_eventhandlers", "CBA_UI", "CBA_XEH", "CBA_XEH_A3" + }; + author[] = {"ACE Team"}; + authorUrl = ""; + versionDesc = "A.C.E."; + versionAct = QUOTE(['MAIN',_this] execVM '\z\ace\addons\main\about.sqf';); + VERSION_CONFIG; + }; +}; + +class CfgMods { + class PREFIX { + dir = "@ACE"; + name = "Core - Advanced Combat Environment"; + picture = "A3\Ui_f\data\Logos\arma3_expansion_alpha_ca"; + hidePicture = "true"; + hideName = "true"; + actionName = "Website"; + action = "http://ace.dev-heaven.net"; + description = "Bugtracker: "; + }; +}; + +class CfgSettings { + class CBA { + class Versioning { + class PREFIX { + level = DEFAULT_VERSIONING_LEVEL; + handler = "ace_common_fnc_mismatch"; + class Dependencies { + CBA[]={"cba_main", {1,0,0}, "true"}; + XEH[]={"cba_xeh", {1,0,0}, "true"}; + }; + }; + }; + /* + class Registry { + class PREFIX { + removed[] = {}; + }; + }; + */ + }; +}; + +#include "CfgModuleCategories.hpp" diff --git a/addons/main/license.sqf b/addons/main/license.sqf index d078710247..85d783f18d 100644 --- a/addons/main/license.sqf +++ b/addons/main/license.sqf @@ -1,92 +1,92 @@ -License (short) -=============== - -You are free: -- to Share to copy, distribute and transmit the work - -Under the following conditions: -- Attribution You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work). -- Noncommercial You may not use this work for commercial purposes. -- No Derivative Works You may not alter, transform, or build upon this work. - -With the understanding that: - -Waiver Any of the above conditions can be waived if you get permission from the copyright holder. - -Public Domain Where the work or any of its elements is in the public domain under applicable law, that status is in no way affected by the license. - -Other Rights In no way are any of the following rights affected by the license: - - Your fair dealing or fair use rights, or other applicable copyright exceptions and limitations; - - The author's moral rights; - - Rights other persons may have either in the work itself or in how the work is used, such as publicity or privacy rights. - -Notice For any reuse or distribution, you must make clear to others the license terms of this work. The best way to do this is with a link to this web page. - - -Full license text -================= - -THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. - -BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. - -1. Definitions - -"Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. -"Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License. -"Distribute" means to make available to the public the original and copies of the Work through sale or other transfer of ownership. -"Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. -"Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. -"Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. -"You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. -"Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. -"Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. - -2. Fair Dealing Rights. - -Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. - -3. License Grant. - -Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: - -to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; and, to Distribute and Publicly Perform the Work including as incorporated in Collections. -The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats, but otherwise you have no rights to make Adaptations. Subject to 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights set forth in Section 4(d). - -4. Restrictions. - -The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: - -You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. -You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in connection with the exchange of copyrighted works. -If You Distribute, or Publicly Perform the Work or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work. The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Collection, at a minimum such credit will appear, if a credit for all contributing authors of Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. - -For the avoidance of doubt: - -Non-waivable Compulsory License Schemes. - -In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; -Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and, -Voluntary License Schemes. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b). -Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. - -5. Representations, Warranties and Disclaimer. - -UNLESS OTHERWISE MUTUALLY AGREED BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. - -6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -7. Termination. - -This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. -Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). - -Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. - -8. Miscellaneous. - -Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. -If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. -No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. -This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. -The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. +License (short) +=============== + +You are free: +- to Share to copy, distribute and transmit the work + +Under the following conditions: +- Attribution You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work). +- Noncommercial You may not use this work for commercial purposes. +- No Derivative Works You may not alter, transform, or build upon this work. + +With the understanding that: + +Waiver Any of the above conditions can be waived if you get permission from the copyright holder. + +Public Domain Where the work or any of its elements is in the public domain under applicable law, that status is in no way affected by the license. + +Other Rights In no way are any of the following rights affected by the license: + - Your fair dealing or fair use rights, or other applicable copyright exceptions and limitations; + - The author's moral rights; + - Rights other persons may have either in the work itself or in how the work is used, such as publicity or privacy rights. + +Notice For any reuse or distribution, you must make clear to others the license terms of this work. The best way to do this is with a link to this web page. + + +Full license text +================= + +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. + +1. Definitions + +"Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. +"Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License. +"Distribute" means to make available to the public the original and copies of the Work through sale or other transfer of ownership. +"Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. +"Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. +"Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. +"You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. +"Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. +"Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. + +2. Fair Dealing Rights. + +Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. + +3. License Grant. + +Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: + +to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; and, to Distribute and Publicly Perform the Work including as incorporated in Collections. +The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats, but otherwise you have no rights to make Adaptations. Subject to 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights set forth in Section 4(d). + +4. Restrictions. + +The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: + +You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. +You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in connection with the exchange of copyrighted works. +If You Distribute, or Publicly Perform the Work or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work. The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Collection, at a minimum such credit will appear, if a credit for all contributing authors of Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. + +For the avoidance of doubt: + +Non-waivable Compulsory License Schemes. + +In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; +Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and, +Voluntary License Schemes. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b). +Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. + +5. Representations, Warranties and Disclaimer. + +UNLESS OTHERWISE MUTUALLY AGREED BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + +6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination. + +This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. +Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). + +Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. + +8. Miscellaneous. + +Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. +If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. +No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. +This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. +The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. diff --git a/addons/main/license.txt b/addons/main/license.txt index e97d9c51a3..0c9a28cbc5 100644 --- a/addons/main/license.txt +++ b/addons/main/license.txt @@ -1,92 +1,92 @@ -License (short) -=============== - -You are free: -- to Share to copy, distribute and transmit the work - -Under the following conditions: -- Attribution You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work). -- Noncommercial You may not use this work for commercial purposes. -- No Derivative Works You may not alter, transform, or build upon this work. - -With the understanding that: - -Waiver Any of the above conditions can be waived if you get permission from the copyright holder. - -Public Domain Where the work or any of its elements is in the public domain under applicable law, that status is in no way affected by the license. - -Other Rights In no way are any of the following rights affected by the license: - - Your fair dealing or fair use rights, or other applicable copyright exceptions and limitations; - - The author's moral rights; - - Rights other persons may have either in the work itself or in how the work is used, such as publicity or privacy rights. - -Notice For any reuse or distribution, you must make clear to others the license terms of this work. The best way to do this is with a link to this web page. - - -Full license text -================= - -THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. - -BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. - -1. Definitions - -"Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. -"Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License. -"Distribute" means to make available to the public the original and copies of the Work through sale or other transfer of ownership. -"Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. -"Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. -"Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. -"You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. -"Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. -"Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. - -2. Fair Dealing Rights. - -Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. - -3. License Grant. - -Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: - -to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; and, to Distribute and Publicly Perform the Work including as incorporated in Collections. -The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats, but otherwise you have no rights to make Adaptations. Subject to 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights set forth in Section 4(d). - -4. Restrictions. - -The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: - -You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. -You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in connection with the exchange of copyrighted works. -If You Distribute, or Publicly Perform the Work or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work. The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Collection, at a minimum such credit will appear, if a credit for all contributing authors of Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. - -For the avoidance of doubt: - -Non-waivable Compulsory License Schemes. - -In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; -Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and, -Voluntary License Schemes. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b). -Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. - -5. Representations, Warranties and Disclaimer. - -UNLESS OTHERWISE MUTUALLY AGREED BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. - -6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -7. Termination. - -This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. -Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). - -Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. - -8. Miscellaneous. - -Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. -If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. -No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. -This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. -The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. +License (short) +=============== + +You are free: +- to Share to copy, distribute and transmit the work + +Under the following conditions: +- Attribution You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work). +- Noncommercial You may not use this work for commercial purposes. +- No Derivative Works You may not alter, transform, or build upon this work. + +With the understanding that: + +Waiver Any of the above conditions can be waived if you get permission from the copyright holder. + +Public Domain Where the work or any of its elements is in the public domain under applicable law, that status is in no way affected by the license. + +Other Rights In no way are any of the following rights affected by the license: + - Your fair dealing or fair use rights, or other applicable copyright exceptions and limitations; + - The author's moral rights; + - Rights other persons may have either in the work itself or in how the work is used, such as publicity or privacy rights. + +Notice For any reuse or distribution, you must make clear to others the license terms of this work. The best way to do this is with a link to this web page. + + +Full license text +================= + +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. + +1. Definitions + +"Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. +"Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License. +"Distribute" means to make available to the public the original and copies of the Work through sale or other transfer of ownership. +"Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. +"Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. +"Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. +"You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. +"Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. +"Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. + +2. Fair Dealing Rights. + +Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. + +3. License Grant. + +Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: + +to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; and, to Distribute and Publicly Perform the Work including as incorporated in Collections. +The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats, but otherwise you have no rights to make Adaptations. Subject to 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights set forth in Section 4(d). + +4. Restrictions. + +The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: + +You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. +You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in connection with the exchange of copyrighted works. +If You Distribute, or Publicly Perform the Work or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work. The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Collection, at a minimum such credit will appear, if a credit for all contributing authors of Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. + +For the avoidance of doubt: + +Non-waivable Compulsory License Schemes. + +In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; +Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and, +Voluntary License Schemes. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b). +Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. + +5. Representations, Warranties and Disclaimer. + +UNLESS OTHERWISE MUTUALLY AGREED BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + +6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination. + +This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. +Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). + +Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. + +8. Miscellaneous. + +Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. +If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. +No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. +This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. +The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. diff --git a/addons/main/script_common.hpp b/addons/main/script_common.hpp index b3f6863d49..5999f4f2dc 100644 --- a/addons/main/script_common.hpp +++ b/addons/main/script_common.hpp @@ -1,3 +1,3 @@ -#define __cr_managers "Manager: " -#define __cr_devs "Developer:" -#define __cr_testers "Contributor: " +#define __cr_managers "Manager: " +#define __cr_devs "Developer:" +#define __cr_testers "Contributor: " diff --git a/addons/main/script_component.hpp b/addons/main/script_component.hpp index 9a18b78a7a..334a81570b 100644 --- a/addons/main/script_component.hpp +++ b/addons/main/script_component.hpp @@ -1,14 +1,14 @@ -#define COMPONENT main -#include "\z\ace\addons\main\script_mod.hpp" - -// #define DEBUG_MODE_FULL - -#ifdef DEBUG_ENABLED_CORE - #define DEBUG_MODE_FULL -#endif - -#ifdef DEBUG_SETTINGS_CORE - #define DEBUG_SETTINGS DEBUG_SETTINGS_CORE -#endif - -#include "\z\ace\addons\main\script_macros.hpp" +#define COMPONENT main +#include "\z\ace\addons\main\script_mod.hpp" + +// #define DEBUG_MODE_FULL + +#ifdef DEBUG_ENABLED_CORE + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_CORE + #define DEBUG_SETTINGS DEBUG_SETTINGS_CORE +#endif + +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/main/script_config.hpp b/addons/main/script_config.hpp index e39240286e..f341c25a8e 100644 --- a/addons/main/script_config.hpp +++ b/addons/main/script_config.hpp @@ -1,43 +1,43 @@ -#define true 1 -#define false 0 - -#define private 0 -#define protected 1 -#define public 2 - -#define TEast 0 -#define TWest 1 -#define TGuerrila 2 -#define TCivilian 3 -#define TSideUnknown 4 -#define TEnemy 5 -#define TFriendly 6 -#define TLogic 7 - -#define VSoft 0 -#define VArmor 1 -#define VAir 2 - -#define LockNo 0 -#define LockCadet 1 -#define LockYes 2 - -#define ReadAndWrite 0 -#define ReadAndCreate 1 -#define ReadOnly 2 -#define ReadOnlyVerified 3 - -#define WeaponNoSlot 0 // dummy weapons -#define WeaponSlotPrimary 1 // primary weapons -#define WeaponSlotSecondary 16 // secondary weapons -#define WeaponSlotItem 256 // items -#define WeaponSlotBinocular 4096 // binocular -#define WeaponHardMounted 65536 - -#define CanSeeRadar 1 -#define CanSeeRye 2 -#define CanSeeOptics 4 -#define CanSeeEar 4 -#define CanSeeCompass 16 -#define CanSeeRadarC CanSeeRadar+CanSeeCompass -#define CanSeeAll 31 +#define true 1 +#define false 0 + +#define private 0 +#define protected 1 +#define public 2 + +#define TEast 0 +#define TWest 1 +#define TGuerrila 2 +#define TCivilian 3 +#define TSideUnknown 4 +#define TEnemy 5 +#define TFriendly 6 +#define TLogic 7 + +#define VSoft 0 +#define VArmor 1 +#define VAir 2 + +#define LockNo 0 +#define LockCadet 1 +#define LockYes 2 + +#define ReadAndWrite 0 +#define ReadAndCreate 1 +#define ReadOnly 2 +#define ReadOnlyVerified 3 + +#define WeaponNoSlot 0 // dummy weapons +#define WeaponSlotPrimary 1 // primary weapons +#define WeaponSlotSecondary 16 // secondary weapons +#define WeaponSlotItem 256 // items +#define WeaponSlotBinocular 4096 // binocular +#define WeaponHardMounted 65536 + +#define CanSeeRadar 1 +#define CanSeeRye 2 +#define CanSeeOptics 4 +#define CanSeeEar 4 +#define CanSeeCompass 16 +#define CanSeeRadarC CanSeeRadar+CanSeeCompass +#define CanSeeAll 31 diff --git a/addons/main/script_debug.hpp b/addons/main/script_debug.hpp index 578d76cc91..4dd9cce1bc 100644 --- a/addons/main/script_debug.hpp +++ b/addons/main/script_debug.hpp @@ -1,46 +1,46 @@ -/** -STACK TRACING -**/ -//#define ENABLE_CALLSTACK -//#define ENABLE_PERFORMANCE_COUNTERS -//#define DEBUG_EVENTS - -#ifdef ENABLE_CALLSTACK - -#define CALLSTACK(function) {private ['_ret']; if(ACE_IS_ERRORED) then { ['AUTO','AUTO'] call ACE_DUMPSTACK_FNC; ACE_IS_ERRORED = false; }; ACE_IS_ERRORED = true; ACE_STACK_TRACE set [ACE_STACK_DEPTH, [diag_tickTime, __FILE__, __LINE__, ACE_CURRENT_FUNCTION, 'ANON', _this]]; ACE_STACK_DEPTH = ACE_STACK_DEPTH + 1; ACE_CURRENT_FUNCTION = 'ANON'; _ret = _this call ##function; ACE_STACK_DEPTH = ACE_STACK_DEPTH - 1; ACE_IS_ERRORED = false; _ret;} -#define CALLSTACK_NAMED(function, functionName) {private ['_ret']; if(ACE_IS_ERRORED) then { ['AUTO','AUTO'] call ACE_DUMPSTACK_FNC; ACE_IS_ERRORED = false; }; ACE_IS_ERRORED = true; ACE_STACK_TRACE set [ACE_STACK_DEPTH, [diag_tickTime, __FILE__, __LINE__, ACE_CURRENT_FUNCTION, functionName, _this]]; ACE_STACK_DEPTH = ACE_STACK_DEPTH + 1; ACE_CURRENT_FUNCTION = functionName; _ret = _this call ##function; ACE_STACK_DEPTH = ACE_STACK_DEPTH - 1; ACE_IS_ERRORED = false; _ret;} -#define DUMPSTACK ([__FILE__, __LINE__] call ACE_DUMPSTACK_FNC) - -#define FUNC(var1) {private ['_ret']; if(ACE_IS_ERRORED) then { ['AUTO','AUTO'] call ACE_DUMPSTACK_FNC; ACE_IS_ERRORED = false; }; ACE_IS_ERRORED = true; ACE_STACK_TRACE set [ACE_STACK_DEPTH, [diag_tickTime, __FILE__, __LINE__, ACE_CURRENT_FUNCTION, 'TRIPLES(ADDON,fnc,var1)', _this]]; ACE_STACK_DEPTH = ACE_STACK_DEPTH + 1; ACE_CURRENT_FUNCTION = 'TRIPLES(ADDON,fnc,var1)'; _ret = _this call TRIPLES(ADDON,fnc,var1); ACE_STACK_DEPTH = ACE_STACK_DEPTH - 1; ACE_IS_ERRORED = false; _ret;} -#define EFUNC(var1,var2) {private ['_ret']; if(ACE_IS_ERRORED) then { ['AUTO','AUTO'] call ACE_DUMPSTACK_FNC; ACE_IS_ERRORED = false; }; ACE_IS_ERRORED = true; ACE_STACK_TRACE set [ACE_STACK_DEPTH, [diag_tickTime, __FILE__, __LINE__, ACE_CURRENT_FUNCTION, 'TRIPLES(DOUBLES(PREFIX,var1),fnc,var2)', _this]]; ACE_STACK_DEPTH = ACE_STACK_DEPTH + 1; ACE_CURRENT_FUNCTION = 'TRIPLES(DOUBLES(PREFIX,var1),fnc,var2)'; _ret = _this call TRIPLES(DOUBLES(PREFIX,var1),fnc,var2); ACE_STACK_DEPTH = ACE_STACK_DEPTH - 1; ACE_IS_ERRORED = false; _ret;} - -#else -#define CALLSTACK(function) function -#define CALLSTACK_NAMED(function, functionName) function -#define DUMPSTACK - -#define FUNC(var1) TRIPLES(ADDON,fnc,var1) -#define EFUNC(var1,var2) TRIPLES(DOUBLES(PREFIX,var1),fnc,var2) - -#endif - - -/** -PERFORMANCE COUNTERS SECTION -**/ -//#define ENABLE_PERFORMANCE_COUNTERS - -#ifdef ENABLE_PERFORMANCE_COUNTERS - #define CBA_fnc_addPerFrameHandler { _ret = [(_this select 0), (_this select 1), (_this select 2), #function] call CBA_fnc_addPerFrameHandler; if(isNil "ACE_PFH_COUNTER" ) then { ACE_PFH_COUNTER=[]; }; ACE_PFH_COUNTER pushBack [[_ret, __FILE__, __LINE__], [(_this select 0), (_this select 1), (_this select 2)]]; _ret } - - #define CREATE_COUNTER(x) if(isNil "ACE_COUNTERS" ) then { ACE_COUNTERS=[]; }; GVAR(DOUBLES(x,counter))=[]; GVAR(DOUBLES(x,counter)) set[0, QUOTE(GVAR(DOUBLES(x,counter)))]; GVAR(DOUBLES(x,counter)) set[1, diag_tickTime]; ACE_COUNTERS pushBack GVAR(DOUBLES(x,counter)); - #define BEGIN_COUNTER(x) if(isNil QUOTE(GVAR(DOUBLES(x,counter)))) then { CREATE_COUNTER(x) }; GVAR(DOUBLES(x,counter)) set[2, diag_tickTime]; - #define END_COUNTER(x) GVAR(DOUBLES(x,counter)) pushBack [(GVAR(DOUBLES(x,counter)) select 2), diag_tickTime]; - - #define DUMP_COUNTERS ([__FILE__, __LINE__] call ACE_DUMPCOUNTERS_FNC) -#else - #define CREATE_COUNTER(x) /* disabled */ - #define BEGIN_COUNTER(x) /* disabled */ - #define END_COUNTER(x) /* disabled */ - #define DUMP_COUNTERS /* disabled */ +/** +STACK TRACING +**/ +//#define ENABLE_CALLSTACK +//#define ENABLE_PERFORMANCE_COUNTERS +//#define DEBUG_EVENTS + +#ifdef ENABLE_CALLSTACK + +#define CALLSTACK(function) {private ['_ret']; if(ACE_IS_ERRORED) then { ['AUTO','AUTO'] call ACE_DUMPSTACK_FNC; ACE_IS_ERRORED = false; }; ACE_IS_ERRORED = true; ACE_STACK_TRACE set [ACE_STACK_DEPTH, [diag_tickTime, __FILE__, __LINE__, ACE_CURRENT_FUNCTION, 'ANON', _this]]; ACE_STACK_DEPTH = ACE_STACK_DEPTH + 1; ACE_CURRENT_FUNCTION = 'ANON'; _ret = _this call ##function; ACE_STACK_DEPTH = ACE_STACK_DEPTH - 1; ACE_IS_ERRORED = false; _ret;} +#define CALLSTACK_NAMED(function, functionName) {private ['_ret']; if(ACE_IS_ERRORED) then { ['AUTO','AUTO'] call ACE_DUMPSTACK_FNC; ACE_IS_ERRORED = false; }; ACE_IS_ERRORED = true; ACE_STACK_TRACE set [ACE_STACK_DEPTH, [diag_tickTime, __FILE__, __LINE__, ACE_CURRENT_FUNCTION, functionName, _this]]; ACE_STACK_DEPTH = ACE_STACK_DEPTH + 1; ACE_CURRENT_FUNCTION = functionName; _ret = _this call ##function; ACE_STACK_DEPTH = ACE_STACK_DEPTH - 1; ACE_IS_ERRORED = false; _ret;} +#define DUMPSTACK ([__FILE__, __LINE__] call ACE_DUMPSTACK_FNC) + +#define FUNC(var1) {private ['_ret']; if(ACE_IS_ERRORED) then { ['AUTO','AUTO'] call ACE_DUMPSTACK_FNC; ACE_IS_ERRORED = false; }; ACE_IS_ERRORED = true; ACE_STACK_TRACE set [ACE_STACK_DEPTH, [diag_tickTime, __FILE__, __LINE__, ACE_CURRENT_FUNCTION, 'TRIPLES(ADDON,fnc,var1)', _this]]; ACE_STACK_DEPTH = ACE_STACK_DEPTH + 1; ACE_CURRENT_FUNCTION = 'TRIPLES(ADDON,fnc,var1)'; _ret = _this call TRIPLES(ADDON,fnc,var1); ACE_STACK_DEPTH = ACE_STACK_DEPTH - 1; ACE_IS_ERRORED = false; _ret;} +#define EFUNC(var1,var2) {private ['_ret']; if(ACE_IS_ERRORED) then { ['AUTO','AUTO'] call ACE_DUMPSTACK_FNC; ACE_IS_ERRORED = false; }; ACE_IS_ERRORED = true; ACE_STACK_TRACE set [ACE_STACK_DEPTH, [diag_tickTime, __FILE__, __LINE__, ACE_CURRENT_FUNCTION, 'TRIPLES(DOUBLES(PREFIX,var1),fnc,var2)', _this]]; ACE_STACK_DEPTH = ACE_STACK_DEPTH + 1; ACE_CURRENT_FUNCTION = 'TRIPLES(DOUBLES(PREFIX,var1),fnc,var2)'; _ret = _this call TRIPLES(DOUBLES(PREFIX,var1),fnc,var2); ACE_STACK_DEPTH = ACE_STACK_DEPTH - 1; ACE_IS_ERRORED = false; _ret;} + +#else +#define CALLSTACK(function) function +#define CALLSTACK_NAMED(function, functionName) function +#define DUMPSTACK + +#define FUNC(var1) TRIPLES(ADDON,fnc,var1) +#define EFUNC(var1,var2) TRIPLES(DOUBLES(PREFIX,var1),fnc,var2) + +#endif + + +/** +PERFORMANCE COUNTERS SECTION +**/ +//#define ENABLE_PERFORMANCE_COUNTERS + +#ifdef ENABLE_PERFORMANCE_COUNTERS + #define CBA_fnc_addPerFrameHandler { _ret = [(_this select 0), (_this select 1), (_this select 2), #function] call CBA_fnc_addPerFrameHandler; if(isNil "ACE_PFH_COUNTER" ) then { ACE_PFH_COUNTER=[]; }; ACE_PFH_COUNTER pushBack [[_ret, __FILE__, __LINE__], [(_this select 0), (_this select 1), (_this select 2)]]; _ret } + + #define CREATE_COUNTER(x) if(isNil "ACE_COUNTERS" ) then { ACE_COUNTERS=[]; }; GVAR(DOUBLES(x,counter))=[]; GVAR(DOUBLES(x,counter)) set[0, QUOTE(GVAR(DOUBLES(x,counter)))]; GVAR(DOUBLES(x,counter)) set[1, diag_tickTime]; ACE_COUNTERS pushBack GVAR(DOUBLES(x,counter)); + #define BEGIN_COUNTER(x) if(isNil QUOTE(GVAR(DOUBLES(x,counter)))) then { CREATE_COUNTER(x) }; GVAR(DOUBLES(x,counter)) set[2, diag_tickTime]; + #define END_COUNTER(x) GVAR(DOUBLES(x,counter)) pushBack [(GVAR(DOUBLES(x,counter)) select 2), diag_tickTime]; + + #define DUMP_COUNTERS ([__FILE__, __LINE__] call ACE_DUMPCOUNTERS_FNC) +#else + #define CREATE_COUNTER(x) /* disabled */ + #define BEGIN_COUNTER(x) /* disabled */ + #define END_COUNTER(x) /* disabled */ + #define DUMP_COUNTERS /* disabled */ #endif \ No newline at end of file diff --git a/addons/main/script_macros.hpp b/addons/main/script_macros.hpp index 79f95545ca..6d383a4c13 100644 --- a/addons/main/script_macros.hpp +++ b/addons/main/script_macros.hpp @@ -1,245 +1,245 @@ -#include "\x\cba\addons\main\script_macros_common.hpp" -#include "\x\cba\addons\xeh\script_xeh.hpp" - -// Default versioning level -#define DEFAULT_VERSIONING_LEVEL 2 - -// RGB Colors -#define RGB_GREEN 0, 0.5, 0, 1 -#define RGB_BLUE 0, 0, 1, 1 -#define RGB_ORANGE 0.5, 0.5, 0, 1 -#define RGB_RED 1, 0, 0, 1 -#define RGB_YELLOW 1, 1, 0, 1 -#define RGB_WHITE 1, 1, 1, 1 -#define RGB_GRAY 0.5, 0.5, 0.5, 1 -#define RGB_BLACK 0, 0, 0, 1 -#define RGB_MAROON 0.5, 0, 0, 1 -#define RGB_OLIVE 0.5, 0.5, 0, 1 -#define RGB_NAVY 0, 0, 0.5, 1 -#define RGB_PURPLE 0.5, 0, 0.5, 1 -#define RGB_FUCHSIA 1, 0, 1, 1 -#define RGB_AQUA 0, 1, 1, 1 -#define RGB_TEAL 0, 0.5, 0.5, 1 -#define RGB_LIME 0, 1, 0, 1 -#define RGB_SILVER 0.75, 0.75, 0.75, 1 - -#include "script_macros_menudef.hpp" - -#define ACE_NOARMORY class Armory { disabled = 1; } -#define ACE_ARMORY class Armory { disabled = 0; } -#define ACE_ACEARMORY class Armory { disabled = 0; author = "A.C.E."; } - - -// Weapon defaults -// NOTE !!!! - Do not forget to dummy-update the configs that use these defines, or the changes won't activate due to binarization! -#define ACE_DEFAULT_WEAPONS "Throw", "Put" - -// Item defaults -// NOTE !!!! - Do not forget to dummy-update the configs that use these defines, or the changes won't activate due to binarization! -#define ACE_ITEMS_TEAMLEADER_B "ItemMap","ItemCompass","ItemWatch","ItemRadio" -#define ACE_ITEMS_SQUADLEADER_B "ItemMap","ItemCompass","ItemWatch","ItemRadio","ACE_DAGR" -#define ACE_ITEMS_SPECIAL "ItemMap","ItemCompass","ItemWatch","ItemRadio" -#define ACE_ITEMS "ItemWatch","ItemRadio" -#define ACE_ITEMS_CIVILIAN "ItemWatch" - - -#define ACE_DEFAULT_SLOTS "1 + 4 + 12* 256 + 2* 4096 + 2 + 8* 16 + 12*131072" - -#define ACE_NOGRIP handAnim[] = {} -#define ACE_DISTANCE_DEFAULT distanceZoomMin = 300; distanceZoomMax = 300 - -// #include "script_macros_optics.hpp" //ToDo - -#define ACE_NOZEROING discreteDistance[] = {}; \ - discreteDistanceInitIndex = 0; \ - weaponInfoType = "RscWeaponEmpty" - -#define ACE_NOTURRETZEROING discreteDistance[] = {}; \ - discreteDistanceInitIndex = 0; \ - turretInfoType = "RscWeaponEmpty" - -#define ACE_LASER irLaserPos = "laser pos"; \ - irLaserEnd = "laser dir"; \ - irDistance = 300 - -#define ACE_LASER_DISTANCE_VANILLA irDistance = 300 - -#define ACE_NOLASER irLaserPos = "laser pos"; \ - irLaserEnd = "laser dir"; \ - irDistance = 0 - -#define ACE_SUPPRESSED ace_suppressed = 1; \ - fireLightDuration = 0; \ - fireLightIntensity = 0 - -// TODO: Cleanup in all the configs around -#define ACE_M_MAG(x,y) class _xx_##x {magazine = ##x; count = ##y;} -#define ACE_M_WEP(x,y) class _xx_##x {weapon = ##x; count = ##y;} -#define ACE_M_ITEM(x,y) class _xx_##x {name = ##x; count = ##y;} -#define ACE_M_BAG(x,y) class _xx_##x {backpack = ##x; count = ##y;} - - -// Vehicle defines -// ACE_canBeLoad = This vehicle acts as transporter, i.e you can load stuff into it -// ACE_canBeCargo = This vehicle acts as cargo, i.e you can load this item into other vehicles -#define ACE_CARGO_FRONT ACE_canBeLoad = false; ACE_canBeCargo = true; ACE_canGear = false; ACE_canLoadFront = true -#define ACE_CARGO_ONLY ACE_canBeLoad = false; ACE_canBeCargo = true; ACE_canGear = false; ACE_canLoadFront = false -#define ACE_LOAD_ONLY ACE_canBeLoad = true; ACE_canBeCargo = false; ACE_canGear = false; ACE_canLoadFront = false -#define ACE_GEAR_ONLY ACE_canBeLoad = true; ACE_canBeCargo = false; ACE_canGear = true; ACE_canLoadFront = false -#define ACE_NOCARGOLOAD ACE_canBeLoad = false; ACE_canBeCargo = false; ACE_canGear = false; ACE_canLoadFront = false - -// Increased FOV for tank driver -// Increased Default US Tank driver optic -#define ACE_DRIVEROPTIC_TANK_US driverOpticsModel = "\z\ace\addons\m_veh_optics\driver\optika_tank_driver_west.p3d" -// Increased Default RU Tank driver optic -#define ACE_DRIVEROPTIC_TANK_RU driverOpticsModel = "\z\ace\addons\m_veh_optics\driver\optika_tank_driver_east.p3d" -// Increased Default NON Specified driver optic -#define ACE_DRIVEROPTIC_TANK driverOpticsModel = "\z\ace\addons\m_veh_optics\driver\optika_tank_driver.p3d" -// Increased Default EP1 NON Specified driver optic -// Default black border thing needs finish -#define ACE_DRIVEROPTIC_TANK_EP1 driverOpticsModel = "\z\ace\addons\m_veh_optics\driver\optika_tank_driver.p3d" - -#define ACE_BWC ace_bwc = 1 - -// SCRIPTING MACROS - -// Items -#define inITEMS(x,y) (##x in (y call ACE_fnc_getGear)) -#define remITEMS(x,y) ([##x,y] call ACE_fnc_removeItem) -//#define addITEMS(x,y) (y addItem ##x) - -// Interaction/ Put anims -#define canANIM(x) (x call ACE_fnc_CanPutDown) -#define playANIM(x) (if (x call ACE_fnc_CanPutDown) then { x call ACE_fnc_PutDown }) - -// In vehicle or on foot -#define ONFOOT(x) (x == vehicle x) -#define INVEHICLE(x) (x != vehicle x) - -// FX -#define COUGH ace_common_fx_fnc_cough -#define BLURRY ace_common_fx_fnc_blurry -#define BLIND ace_common_fx_fnc_blind_view -#define DEAF ace_common_fx_fnc_deaf -#define DIZZY ace_common_fx_fnc_dizzy -#define FLASH ace_common_fx_fnc_flash -#define KICK ace_common_fx_fnc_kick -#define KNOCKOUT ace_common_fx_fnc_knockout -#define RING ace_common_fx_fnc_ring - -// Stamina -#define INC_MASS ace_stamina_fnc_inc_mass - -// Does this work, due to BWC_CONFIG(NAME) ? -#undef BWC_CONFIG - -#define BWC_CONFIG(NAME) class NAME { \ - units[] = {}; \ - weapons[] = {}; \ - requiredVersion = REQUIRED_VERSION; \ - requiredAddons[] = {}; \ - version = VERSION; \ - ACE_BWC; \ -} - -#define ACE_FLASHLIGHT class FlashLight { \ - color[] = {0.9, 0.9, 0.7, 0.9}; \ - ambient[] = {0.1, 0.1, 0.1, 1.0}; \ - position = "flash dir"; \ - direction = "flash"; \ - angle = 30; \ - scale[] = {1, 1, 0.5}; \ - brightness = 0.1; \ - } -#define ACE_SMALL_FLASHLIGHT class FlashLight { \ - color[] = {0.9, 0.9, 0.7, 0.9}; \ - ambient[] = {0.1, 0.1, 0.1, 1.0}; \ - position = "flash dir"; \ - direction = "flash"; \ - angle = 20; \ - scale[] = {0.9, 0.9, 0.4}; \ - brightness = 0.09; \ - } - -// Addaction defines for colored text -#define ACE_TEXT_ORANGE(Text) ("" + ##Text + "") -#define ACE_TEXT_RED(Text) ("" + ##Text + "") -#define ACE_TEXT_GREEN(Text) ("" + ##Text + "") -#define ACE_TEXT_YELLOW(Text) ("" + ##Text + "") - - - -#define EGVAR(module,var) TRIPLES(PREFIX,module,var) -#define QEGVAR(module,var) QUOTE(EGVAR(module,var)) - -#define DGVAR(varName) if(isNil "ACE_DEBUG_NAMESPACE") then { ACE_DEBUG_NAMESPACE = []; }; if(!(QUOTE(GVAR(varName)) in ACE_DEBUG_NAMESPACE)) then { PUSH(ACE_DEBUG_NAMESPACE, QUOTE(GVAR(varName))); }; GVAR(varName) -#define DVAR(varName) if(isNil "ACE_DEBUG_NAMESPACE") then { ACE_DEBUG_NAMESPACE = []; }; if(!(QUOTE(varName) in ACE_DEBUG_NAMESPACE)) then { PUSH(ACE_DEBUG_NAMESPACE, QUOTE(varName)); }; varName -#define DFUNC(var1) TRIPLES(ADDON,fnc,var1) -#define DEFUNC(var1,var2) TRIPLES(DOUBLES(PREFIX,var1),fnc,var2) - -#define QFUNC(var1) QUOTE(DFUNC(var1)) -#define QEFUNC(var1,var2) QUOTE(DEFUNC(var1,var2)) - -#define PATHTOEF(var1,var2) PATHTOF_SYS(PREFIX,var1,var2) - - -#define GETVAR_SYS(var1,var2) getVariable [ARR_2(QUOTE(var1),var2)] -#define SETVAR_SYS(var1,var2) setVariable [ARR_2(QUOTE(var1),var2)] -#define SETPVAR_SYS(var1,var2) setVariable [ARR_3(QUOTE(var1),var2,true)] - -#define GETVAR(var1,var2,var3) var1 GETVAR_SYS(var2,var3) -#define GETMVAR(var1,var2) missionNamespace GETVAR_SYS(var1,var2) -#define GETUVAR(var1,var2) uiNamespace GETVAR_SYS(var1,var2) -#define GETPRVAR(var1,var2) profileNamespace GETVAR_SYS(var1,var2) -#define GETPAVAR(var1,var2) parsingNamespace GETVAR_SYS(var1,var2) - -#define SETVAR(var1,var2,var3) var1 SETVAR_SYS(var2,var3) -#define SETPVAR(var1,var2,var3) var1 SETPVAR_SYS(var2,var3) -#define SETMVAR(var1,var2) missionNamespace SETVAR_SYS(var1,var2) -#define SETUVAR(var1,var2) uiNamespace SETVAR_SYS(var1,var2) -#define SETPRVAR(var1,var2) profileNamespace SETVAR_SYS(var1,var2) -#define SETPAVAR(var1,var2) parsingNamespace SETVAR_SYS(var1,var2) - -#define GETGVAR(var1,var2) GETMVAR(GVAR(var1),var2) -#define GETEGVAR(var1,var2,var3) GETMVAR(EGVAR(var1,var2),var3) - -#define ARR_SELECT(ARRAY,INDEX,DEFAULT) if (count ARRAY > INDEX) then {ARRAY select INDEX} else {DEFAULT} - - -#define MACRO_ADDWEAPON(WEAPON,COUNT) class _xx_##WEAPON { \ - weapon = #WEAPON; \ - count = COUNT; \ -} - -#define MACRO_ADDITEM(ITEM,COUNT) class _xx_##ITEM { \ - name = #ITEM; \ - count = COUNT; \ -} - -#define MACRO_ADDMAGAZINE(MAGAZINE,COUNT) class _xx_##MAGAZINE { \ - magazine = #MAGAZINE; \ - count = COUNT; \ -} - - -#ifdef DISABLE_COMPILE_CACHE - #define PREP(fncName) DFUNC(fncName) = compile preprocessFileLineNumbers QUOTE(PATHTOF(functions\DOUBLES(fnc,fncName).sqf)) -#else - #define PREP(fncName) DFUNC(fncName) = QUOTE(PATHTOF(functions\DOUBLES(fnc,fncName).sqf)) call SLX_XEH_COMPILE -#endif - -#define PREP_MODULE(folder) [] call compile preprocessFileLineNumbers QUOTE(PATHTOF(folder\__PREP__.sqf)) - -#define HASH_CREATE ([] call EFUNC(common,hashCreate)) -#define HASH_SET(hash, key, val) ([hash, key, val, __FILE__, __LINE__] call EFUNC(common,hashSet)) -#define HASH_GET(hash, key) ([hash, key, __FILE__, __LINE__] call EFUNC(common,hashGet)) -#define HASH_REM(hash, key) ([hash, key, __FILE__, __LINE__] call EFUNC(common,hashRem)) -#define HASH_HASKEY(hash, key) ([hash, key, __FILE__, __LINE__] call EFUNC(common,hashHasKey)) - -#define HASHLIST_CREATELIST(keys) ([keys] call EFUNC(common,hashListCreateList)) -#define HASHLIST_CREATEHASH(hashList) ([hashList] call EFUNC(common,hashListCreateHash)) -#define HASHLIST_SELECT(hashList, index) ([hashList, index, __FILE__, __LINE__] call EFUNC(common,hashListSelect)) -#define HASHLIST_SET(hashList, index, value) ([hashList, index, value, __FILE__, __LINE__] call EFUNC(common,hashListSet)) -#define HASHLIST_PUSH(hashList, value) ([hashList, value, __FILE__, __LINE__] call EFUNC(common,hashListPush)) - +#include "\x\cba\addons\main\script_macros_common.hpp" +#include "\x\cba\addons\xeh\script_xeh.hpp" + +// Default versioning level +#define DEFAULT_VERSIONING_LEVEL 2 + +// RGB Colors +#define RGB_GREEN 0, 0.5, 0, 1 +#define RGB_BLUE 0, 0, 1, 1 +#define RGB_ORANGE 0.5, 0.5, 0, 1 +#define RGB_RED 1, 0, 0, 1 +#define RGB_YELLOW 1, 1, 0, 1 +#define RGB_WHITE 1, 1, 1, 1 +#define RGB_GRAY 0.5, 0.5, 0.5, 1 +#define RGB_BLACK 0, 0, 0, 1 +#define RGB_MAROON 0.5, 0, 0, 1 +#define RGB_OLIVE 0.5, 0.5, 0, 1 +#define RGB_NAVY 0, 0, 0.5, 1 +#define RGB_PURPLE 0.5, 0, 0.5, 1 +#define RGB_FUCHSIA 1, 0, 1, 1 +#define RGB_AQUA 0, 1, 1, 1 +#define RGB_TEAL 0, 0.5, 0.5, 1 +#define RGB_LIME 0, 1, 0, 1 +#define RGB_SILVER 0.75, 0.75, 0.75, 1 + +#include "script_macros_menudef.hpp" + +#define ACE_NOARMORY class Armory { disabled = 1; } +#define ACE_ARMORY class Armory { disabled = 0; } +#define ACE_ACEARMORY class Armory { disabled = 0; author = "A.C.E."; } + + +// Weapon defaults +// NOTE !!!! - Do not forget to dummy-update the configs that use these defines, or the changes won't activate due to binarization! +#define ACE_DEFAULT_WEAPONS "Throw", "Put" + +// Item defaults +// NOTE !!!! - Do not forget to dummy-update the configs that use these defines, or the changes won't activate due to binarization! +#define ACE_ITEMS_TEAMLEADER_B "ItemMap","ItemCompass","ItemWatch","ItemRadio" +#define ACE_ITEMS_SQUADLEADER_B "ItemMap","ItemCompass","ItemWatch","ItemRadio","ACE_DAGR" +#define ACE_ITEMS_SPECIAL "ItemMap","ItemCompass","ItemWatch","ItemRadio" +#define ACE_ITEMS "ItemWatch","ItemRadio" +#define ACE_ITEMS_CIVILIAN "ItemWatch" + + +#define ACE_DEFAULT_SLOTS "1 + 4 + 12* 256 + 2* 4096 + 2 + 8* 16 + 12*131072" + +#define ACE_NOGRIP handAnim[] = {} +#define ACE_DISTANCE_DEFAULT distanceZoomMin = 300; distanceZoomMax = 300 + +// #include "script_macros_optics.hpp" //ToDo + +#define ACE_NOZEROING discreteDistance[] = {}; \ + discreteDistanceInitIndex = 0; \ + weaponInfoType = "RscWeaponEmpty" + +#define ACE_NOTURRETZEROING discreteDistance[] = {}; \ + discreteDistanceInitIndex = 0; \ + turretInfoType = "RscWeaponEmpty" + +#define ACE_LASER irLaserPos = "laser pos"; \ + irLaserEnd = "laser dir"; \ + irDistance = 300 + +#define ACE_LASER_DISTANCE_VANILLA irDistance = 300 + +#define ACE_NOLASER irLaserPos = "laser pos"; \ + irLaserEnd = "laser dir"; \ + irDistance = 0 + +#define ACE_SUPPRESSED ace_suppressed = 1; \ + fireLightDuration = 0; \ + fireLightIntensity = 0 + +// TODO: Cleanup in all the configs around +#define ACE_M_MAG(x,y) class _xx_##x {magazine = ##x; count = ##y;} +#define ACE_M_WEP(x,y) class _xx_##x {weapon = ##x; count = ##y;} +#define ACE_M_ITEM(x,y) class _xx_##x {name = ##x; count = ##y;} +#define ACE_M_BAG(x,y) class _xx_##x {backpack = ##x; count = ##y;} + + +// Vehicle defines +// ACE_canBeLoad = This vehicle acts as transporter, i.e you can load stuff into it +// ACE_canBeCargo = This vehicle acts as cargo, i.e you can load this item into other vehicles +#define ACE_CARGO_FRONT ACE_canBeLoad = false; ACE_canBeCargo = true; ACE_canGear = false; ACE_canLoadFront = true +#define ACE_CARGO_ONLY ACE_canBeLoad = false; ACE_canBeCargo = true; ACE_canGear = false; ACE_canLoadFront = false +#define ACE_LOAD_ONLY ACE_canBeLoad = true; ACE_canBeCargo = false; ACE_canGear = false; ACE_canLoadFront = false +#define ACE_GEAR_ONLY ACE_canBeLoad = true; ACE_canBeCargo = false; ACE_canGear = true; ACE_canLoadFront = false +#define ACE_NOCARGOLOAD ACE_canBeLoad = false; ACE_canBeCargo = false; ACE_canGear = false; ACE_canLoadFront = false + +// Increased FOV for tank driver +// Increased Default US Tank driver optic +#define ACE_DRIVEROPTIC_TANK_US driverOpticsModel = "\z\ace\addons\m_veh_optics\driver\optika_tank_driver_west.p3d" +// Increased Default RU Tank driver optic +#define ACE_DRIVEROPTIC_TANK_RU driverOpticsModel = "\z\ace\addons\m_veh_optics\driver\optika_tank_driver_east.p3d" +// Increased Default NON Specified driver optic +#define ACE_DRIVEROPTIC_TANK driverOpticsModel = "\z\ace\addons\m_veh_optics\driver\optika_tank_driver.p3d" +// Increased Default EP1 NON Specified driver optic +// Default black border thing needs finish +#define ACE_DRIVEROPTIC_TANK_EP1 driverOpticsModel = "\z\ace\addons\m_veh_optics\driver\optika_tank_driver.p3d" + +#define ACE_BWC ace_bwc = 1 + +// SCRIPTING MACROS + +// Items +#define inITEMS(x,y) (##x in (y call ACE_fnc_getGear)) +#define remITEMS(x,y) ([##x,y] call ACE_fnc_removeItem) +//#define addITEMS(x,y) (y addItem ##x) + +// Interaction/ Put anims +#define canANIM(x) (x call ACE_fnc_CanPutDown) +#define playANIM(x) (if (x call ACE_fnc_CanPutDown) then { x call ACE_fnc_PutDown }) + +// In vehicle or on foot +#define ONFOOT(x) (x == vehicle x) +#define INVEHICLE(x) (x != vehicle x) + +// FX +#define COUGH ace_common_fx_fnc_cough +#define BLURRY ace_common_fx_fnc_blurry +#define BLIND ace_common_fx_fnc_blind_view +#define DEAF ace_common_fx_fnc_deaf +#define DIZZY ace_common_fx_fnc_dizzy +#define FLASH ace_common_fx_fnc_flash +#define KICK ace_common_fx_fnc_kick +#define KNOCKOUT ace_common_fx_fnc_knockout +#define RING ace_common_fx_fnc_ring + +// Stamina +#define INC_MASS ace_stamina_fnc_inc_mass + +// Does this work, due to BWC_CONFIG(NAME) ? +#undef BWC_CONFIG + +#define BWC_CONFIG(NAME) class NAME { \ + units[] = {}; \ + weapons[] = {}; \ + requiredVersion = REQUIRED_VERSION; \ + requiredAddons[] = {}; \ + version = VERSION; \ + ACE_BWC; \ +} + +#define ACE_FLASHLIGHT class FlashLight { \ + color[] = {0.9, 0.9, 0.7, 0.9}; \ + ambient[] = {0.1, 0.1, 0.1, 1.0}; \ + position = "flash dir"; \ + direction = "flash"; \ + angle = 30; \ + scale[] = {1, 1, 0.5}; \ + brightness = 0.1; \ + } +#define ACE_SMALL_FLASHLIGHT class FlashLight { \ + color[] = {0.9, 0.9, 0.7, 0.9}; \ + ambient[] = {0.1, 0.1, 0.1, 1.0}; \ + position = "flash dir"; \ + direction = "flash"; \ + angle = 20; \ + scale[] = {0.9, 0.9, 0.4}; \ + brightness = 0.09; \ + } + +// Addaction defines for colored text +#define ACE_TEXT_ORANGE(Text) ("" + ##Text + "") +#define ACE_TEXT_RED(Text) ("" + ##Text + "") +#define ACE_TEXT_GREEN(Text) ("" + ##Text + "") +#define ACE_TEXT_YELLOW(Text) ("" + ##Text + "") + + + +#define EGVAR(module,var) TRIPLES(PREFIX,module,var) +#define QEGVAR(module,var) QUOTE(EGVAR(module,var)) + +#define DGVAR(varName) if(isNil "ACE_DEBUG_NAMESPACE") then { ACE_DEBUG_NAMESPACE = []; }; if(!(QUOTE(GVAR(varName)) in ACE_DEBUG_NAMESPACE)) then { PUSH(ACE_DEBUG_NAMESPACE, QUOTE(GVAR(varName))); }; GVAR(varName) +#define DVAR(varName) if(isNil "ACE_DEBUG_NAMESPACE") then { ACE_DEBUG_NAMESPACE = []; }; if(!(QUOTE(varName) in ACE_DEBUG_NAMESPACE)) then { PUSH(ACE_DEBUG_NAMESPACE, QUOTE(varName)); }; varName +#define DFUNC(var1) TRIPLES(ADDON,fnc,var1) +#define DEFUNC(var1,var2) TRIPLES(DOUBLES(PREFIX,var1),fnc,var2) + +#define QFUNC(var1) QUOTE(DFUNC(var1)) +#define QEFUNC(var1,var2) QUOTE(DEFUNC(var1,var2)) + +#define PATHTOEF(var1,var2) PATHTOF_SYS(PREFIX,var1,var2) + + +#define GETVAR_SYS(var1,var2) getVariable [ARR_2(QUOTE(var1),var2)] +#define SETVAR_SYS(var1,var2) setVariable [ARR_2(QUOTE(var1),var2)] +#define SETPVAR_SYS(var1,var2) setVariable [ARR_3(QUOTE(var1),var2,true)] + +#define GETVAR(var1,var2,var3) var1 GETVAR_SYS(var2,var3) +#define GETMVAR(var1,var2) missionNamespace GETVAR_SYS(var1,var2) +#define GETUVAR(var1,var2) uiNamespace GETVAR_SYS(var1,var2) +#define GETPRVAR(var1,var2) profileNamespace GETVAR_SYS(var1,var2) +#define GETPAVAR(var1,var2) parsingNamespace GETVAR_SYS(var1,var2) + +#define SETVAR(var1,var2,var3) var1 SETVAR_SYS(var2,var3) +#define SETPVAR(var1,var2,var3) var1 SETPVAR_SYS(var2,var3) +#define SETMVAR(var1,var2) missionNamespace SETVAR_SYS(var1,var2) +#define SETUVAR(var1,var2) uiNamespace SETVAR_SYS(var1,var2) +#define SETPRVAR(var1,var2) profileNamespace SETVAR_SYS(var1,var2) +#define SETPAVAR(var1,var2) parsingNamespace SETVAR_SYS(var1,var2) + +#define GETGVAR(var1,var2) GETMVAR(GVAR(var1),var2) +#define GETEGVAR(var1,var2,var3) GETMVAR(EGVAR(var1,var2),var3) + +#define ARR_SELECT(ARRAY,INDEX,DEFAULT) if (count ARRAY > INDEX) then {ARRAY select INDEX} else {DEFAULT} + + +#define MACRO_ADDWEAPON(WEAPON,COUNT) class _xx_##WEAPON { \ + weapon = #WEAPON; \ + count = COUNT; \ +} + +#define MACRO_ADDITEM(ITEM,COUNT) class _xx_##ITEM { \ + name = #ITEM; \ + count = COUNT; \ +} + +#define MACRO_ADDMAGAZINE(MAGAZINE,COUNT) class _xx_##MAGAZINE { \ + magazine = #MAGAZINE; \ + count = COUNT; \ +} + + +#ifdef DISABLE_COMPILE_CACHE + #define PREP(fncName) DFUNC(fncName) = compile preprocessFileLineNumbers QUOTE(PATHTOF(functions\DOUBLES(fnc,fncName).sqf)) +#else + #define PREP(fncName) DFUNC(fncName) = QUOTE(PATHTOF(functions\DOUBLES(fnc,fncName).sqf)) call SLX_XEH_COMPILE +#endif + +#define PREP_MODULE(folder) [] call compile preprocessFileLineNumbers QUOTE(PATHTOF(folder\__PREP__.sqf)) + +#define HASH_CREATE ([] call EFUNC(common,hashCreate)) +#define HASH_SET(hash, key, val) ([hash, key, val, __FILE__, __LINE__] call EFUNC(common,hashSet)) +#define HASH_GET(hash, key) ([hash, key, __FILE__, __LINE__] call EFUNC(common,hashGet)) +#define HASH_REM(hash, key) ([hash, key, __FILE__, __LINE__] call EFUNC(common,hashRem)) +#define HASH_HASKEY(hash, key) ([hash, key, __FILE__, __LINE__] call EFUNC(common,hashHasKey)) + +#define HASHLIST_CREATELIST(keys) ([keys] call EFUNC(common,hashListCreateList)) +#define HASHLIST_CREATEHASH(hashList) ([hashList] call EFUNC(common,hashListCreateHash)) +#define HASHLIST_SELECT(hashList, index) ([hashList, index, __FILE__, __LINE__] call EFUNC(common,hashListSelect)) +#define HASHLIST_SET(hashList, index, value) ([hashList, index, value, __FILE__, __LINE__] call EFUNC(common,hashListSet)) +#define HASHLIST_PUSH(hashList, value) ([hashList, value, __FILE__, __LINE__] call EFUNC(common,hashListPush)) + #include "script_debug.hpp" \ No newline at end of file diff --git a/addons/main/script_macros_menudef.hpp b/addons/main/script_macros_menudef.hpp index 35a8e2be45..665c702c9b 100644 --- a/addons/main/script_macros_menudef.hpp +++ b/addons/main/script_macros_menudef.hpp @@ -1,27 +1,27 @@ -// ACE Self Interaction Conditions - -// Self Interaction Menu not available if player is unconscious -#define ACE_INTERACT_ALIVE (alive player) -#define ACE_INTERACT_UNCON (player call ace_wounds_fnc_isUncon) - -// Player is Player Vehicle -#define ACE_INTERACT_PLAYER (player == vehicle player || (player != vehicle player && player in assignedCargo vehicle player)) - -// Player is climbing up a ladder -#define ACE_INTERACT_LADDER (animationState player in ["ladderriflestatic","laddercivilstatic"]) - -// Possible = Self interaction opens only if player is alive and conscious (can be in a vehicle) -#define ACE_SELFINTERACTION_POSSIBLE (!ACE_INTERACT_LADDER && {ACE_INTERACT_ALIVE} && {!ACE_INTERACT_UNCON}) - -// Restricted = Self interaction opens only if player is alive and conscious (can NOT be in a vehicle, i.e Groundmarker, explosives ...) -#define ACE_SELFINTERACTION_RESTRICTED (ACE_SELFINTERACTION_POSSIBLE && {ACE_INTERACT_PLAYER}) - -// Close interaction menu if unconscious -#define ACE_INTERACT_FNC_EXIT if (ACE_INTERACT_UNCON) exitWith {} -#define ACE_ASSEMBLE (getNumber(configFile >> "CfgActions" >> "Assemble" >> "show") == 0) -#define ACE_DISASSEMBLE (getNumber(configFile >> "CfgActions" >> "DisAssemble" >> "show") == 0) -#define ACE_PIPEDEFAULT (getNumber(configFile >> "CfgMagazines" >> "PipeBomb" >> "useAction") == 0) -#define ACE_IDENTITYDEFAULT (isClass(configFile >> "CfgPatches" >> "ace_combatdeaf")) -#define ACE_RUCKDEFAULT (isClass(configFile >> "CfgPatches" >> "ace_stamina")) - +// ACE Self Interaction Conditions + +// Self Interaction Menu not available if player is unconscious +#define ACE_INTERACT_ALIVE (alive player) +#define ACE_INTERACT_UNCON (player call ace_wounds_fnc_isUncon) + +// Player is Player Vehicle +#define ACE_INTERACT_PLAYER (player == vehicle player || (player != vehicle player && player in assignedCargo vehicle player)) + +// Player is climbing up a ladder +#define ACE_INTERACT_LADDER (animationState player in ["ladderriflestatic","laddercivilstatic"]) + +// Possible = Self interaction opens only if player is alive and conscious (can be in a vehicle) +#define ACE_SELFINTERACTION_POSSIBLE (!ACE_INTERACT_LADDER && {ACE_INTERACT_ALIVE} && {!ACE_INTERACT_UNCON}) + +// Restricted = Self interaction opens only if player is alive and conscious (can NOT be in a vehicle, i.e Groundmarker, explosives ...) +#define ACE_SELFINTERACTION_RESTRICTED (ACE_SELFINTERACTION_POSSIBLE && {ACE_INTERACT_PLAYER}) + +// Close interaction menu if unconscious +#define ACE_INTERACT_FNC_EXIT if (ACE_INTERACT_UNCON) exitWith {} +#define ACE_ASSEMBLE (getNumber(configFile >> "CfgActions" >> "Assemble" >> "show") == 0) +#define ACE_DISASSEMBLE (getNumber(configFile >> "CfgActions" >> "DisAssemble" >> "show") == 0) +#define ACE_PIPEDEFAULT (getNumber(configFile >> "CfgMagazines" >> "PipeBomb" >> "useAction") == 0) +#define ACE_IDENTITYDEFAULT (isClass(configFile >> "CfgPatches" >> "ace_combatdeaf")) +#define ACE_RUCKDEFAULT (isClass(configFile >> "CfgPatches" >> "ace_stamina")) + #define ACE_KNOWN2PLAYER (if (name _target in (player getVariable ["ace_recognize_knownnames",[]])) then { name _target } else { " " }) \ No newline at end of file diff --git a/addons/main/script_mod.hpp b/addons/main/script_mod.hpp index 6ef5ec3f68..3bd82431bd 100644 --- a/addons/main/script_mod.hpp +++ b/addons/main/script_mod.hpp @@ -1,55 +1,55 @@ -// COMPONENT should be defined in the script_component.hpp and included BEFORE this hpp - -#define MAINPREFIX z -#define PREFIX ace - -#define MAJOR 3 -#define MINOR 0 -#define PATCHLVL 0 -#define BUILD 1 - -#define VERSION MAJOR.MINOR.PATCHLVL.BUILD -#define VERSION_AR MAJOR,MINOR,PATCHLVL,BUILD - -#define ACE_TAG A.C.E. - -// MINIMAL required version for the Mod. Components can specify others.. -#define REQUIRED_VERSION 0.5 - -/* - #define DEBUG_ENABLED_ADDONS - #define DEBUG_ENABLED_ATTACHMENTS - #define DEBUG_ENABLED_weapons_backblast - #define DEBUG_ENABLED_BLOOD - #define DEBUG_ENABLED_CARTRIDGES - #define DEBUG_ENABLED_CRATERS - #define DEBUG_ENABLED_CREWPROTECTION - #define DEBUG_ENABLED_DUMMIES - #define DEBUG_ENABLED_EJECT - #define DEBUG_ENABLED_EXPLOSIVES - #define DEBUG_ENABLED_FLARES - #define DEBUG_ENABLED_FLASHBANG - #define DEBUG_ENABLED_GRENADETHROW - #define DEBUG_ENABLED_HUNTIR - #define DEBUG_ENABLED_INTERACTION - #define DEBUG_ENABLED_IRSTROBE - #define DEBUG_ENABLED_MULTI_BARREL - #define DEBUG_ENABLED_MUZZLEBLAST - #define DEBUG_ENABLED_NVG - #define DEBUG_ENABLED_weapons_overheating - #define DEBUG_ENABLED_RECOILDUST - #define DEBUG_ENABLED_ROCKET_BALLISTICS - #define DEBUG_ENABLED_SANDBAG - #define DEBUG_ENABLED_SHOTGUN - #define DEBUG_ENABLED_SIGHT_ADJUSTMENT_AT - #define DEBUG_ENABLED_SIGHT_ADJUSTMENT_GL - #define DEBUG_ENABLED_SIGHT_ADJUSTMENT_RIFLE - #define DEBUG_ENABLED_SMAW_SPOTTINGRIFLE - #define DEBUG_ENABLED_TRACERS - #define DEBUG_ENABLED_TRACKING - #define DEBUG_ENABLED_VIEWBLOCK - #define DEBUG_ENABLED_VEHICLE - #define DEBUG_ENABLED_vehicle_damage - #define DEBUG_ENABLED_WEAPONREST - #define DEBUG_ENABLED_WOUNDS -*/ +// COMPONENT should be defined in the script_component.hpp and included BEFORE this hpp + +#define MAINPREFIX z +#define PREFIX ace + +#define MAJOR 3 +#define MINOR 0 +#define PATCHLVL 0 +#define BUILD 1 + +#define VERSION MAJOR.MINOR.PATCHLVL.BUILD +#define VERSION_AR MAJOR,MINOR,PATCHLVL,BUILD + +#define ACE_TAG A.C.E. + +// MINIMAL required version for the Mod. Components can specify others.. +#define REQUIRED_VERSION 0.5 + +/* + #define DEBUG_ENABLED_ADDONS + #define DEBUG_ENABLED_ATTACHMENTS + #define DEBUG_ENABLED_weapons_backblast + #define DEBUG_ENABLED_BLOOD + #define DEBUG_ENABLED_CARTRIDGES + #define DEBUG_ENABLED_CRATERS + #define DEBUG_ENABLED_CREWPROTECTION + #define DEBUG_ENABLED_DUMMIES + #define DEBUG_ENABLED_EJECT + #define DEBUG_ENABLED_EXPLOSIVES + #define DEBUG_ENABLED_FLARES + #define DEBUG_ENABLED_FLASHBANG + #define DEBUG_ENABLED_GRENADETHROW + #define DEBUG_ENABLED_HUNTIR + #define DEBUG_ENABLED_INTERACTION + #define DEBUG_ENABLED_IRSTROBE + #define DEBUG_ENABLED_MULTI_BARREL + #define DEBUG_ENABLED_MUZZLEBLAST + #define DEBUG_ENABLED_NVG + #define DEBUG_ENABLED_weapons_overheating + #define DEBUG_ENABLED_RECOILDUST + #define DEBUG_ENABLED_ROCKET_BALLISTICS + #define DEBUG_ENABLED_SANDBAG + #define DEBUG_ENABLED_SHOTGUN + #define DEBUG_ENABLED_SIGHT_ADJUSTMENT_AT + #define DEBUG_ENABLED_SIGHT_ADJUSTMENT_GL + #define DEBUG_ENABLED_SIGHT_ADJUSTMENT_RIFLE + #define DEBUG_ENABLED_SMAW_SPOTTINGRIFLE + #define DEBUG_ENABLED_TRACERS + #define DEBUG_ENABLED_TRACKING + #define DEBUG_ENABLED_VIEWBLOCK + #define DEBUG_ENABLED_VEHICLE + #define DEBUG_ENABLED_vehicle_damage + #define DEBUG_ENABLED_WEAPONREST + #define DEBUG_ENABLED_WOUNDS +*/ diff --git a/addons/maptools/stringtable.xml b/addons/maptools/stringtable.xml index 5dd4578976..2e5fee49ab 100644 --- a/addons/maptools/stringtable.xml +++ b/addons/maptools/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -142,7 +142,7 @@ Kierunek: %1° Dirección: %1° Irány: %1 - Направление:%1 + Направление: %1° \ No newline at end of file diff --git a/addons/markers/stringtable.xml b/addons/markers/stringtable.xml index ea6d72990a..65da73a026 100644 --- a/addons/markers/stringtable.xml +++ b/addons/markers/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -9,7 +9,7 @@ Směr: %1° Kierunek: %1° Dirección: %1° - Направление: %1 + Направление: %1° \ No newline at end of file diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index a5dfdbba49..bf15477628 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -1,974 +1,991 @@  - + - - - Inject Atropine - Atropin - - - Inject Epinephrine - Epinephrine injizieren - Inyectar Epinefrina - Wtrzyknij adrenalinę - Aplikovat Adrenalin - Ввести андреналил - Adrénaline - Adrenalin - Injetar Epinefrina - Inietta Epinefrina - - - Inject Morphine - Morphin injizieren - Inyectar Morfina - Wstrzyknij morfinę - Aplikovat Morfin - Ввести морфин - Morphine - Morfium - Injetar Morfina - Inietta Morfina - - - Transfuse Blood - Bluttransfusion - Transfundir sangre - Przetocz krew - Transfúze krve - Перелить кровь - Transfusion - Infúzió - Transfundir Sangue - Effettua Trasfusione - - - Transfuse Plasma - Plasmatransfusion - - - Transfuse Saline - Salzlösungtransfusion - - - Apply Tourniquet - Aderpresse anwenden - - - Bandage - Verbinden - Venda - Bandaż - Obvázat - Pansement - Benda - Kötözés - Atadura - Перевязать - - - Bandage Head - Kopf verbinden - Vendar la cabeza - Bandażuj głowę - Obvázat hlavu - Перевязать голову - Pansement Tête - Fej kötözése - Atar Cabeça - Benda la testa - - - Bandage Torso - Torso verbinden - Vendar el torso - Bandażuj tors - Obvázat hruď - Перевязать торс - Pansement Torse - Felsőtest kötözése - Atar Tronco - Benda il torso - - - Bandage Left Arm - Arm links verbinden - Vendar el brazo izquierdo - Bandażuj lewe ramię - Obvázat levou ruku - Перевязать левую руку - Pansement Bras Gauche - Bal kar kötözése - Atar Braço Esquerdo - Benda il braccio sinistro - - - Bandage Right Arm - Arm rechts verbinden - Vendar el brazo derecho - Bandażuj prawe ramię - Obvázat pravou ruku - Перевязать правую руку - Pansement Bras Droit - Jobb kar kötözése - Atar Braço Direito - Benda il braccio destro - - - Bandage Left Leg - Bein links verbinden - Vendar la pierna izquierda - Bandażuj lewą nogę - Obvázat levou nohu - Перевязать левую ногу - Pansement Jambe Gauche - Bal láb kötözése - Atar Perna Esquerda - Benda la gamba sinistra - - - Bandage Right Leg - Bein rechts verbinden - Vendar la pierna derecha - Bandażuj prawą nogę - Obvázat pravou nohu - Перевязать правую ногу - Pansement Jambe Droite - Jobb láb kötözése - Atar Perna Direita - Benda la gamba destra - - - Injecting Morphine ... - Morphin injizieren ... - Inyectando Morfina ... - Wstrzykiwanie morfiny ... - Aplikuju Morfin ... - Введение морфина... - Injection de Morphine... - Morfium beadása... - Injetando Morfina ... - Inietto la morfina ... - - - Injecting Epinephrine ... - Epinephrin injizieren ... - Inyectando Epinefrina ... - Wstrzykiwanie adrenaliny ... - Aplikuju Adrenalin ... - Введение андреналина - Injection d'Adrénaline ... - Adrenalin beadása... - Injetando Epinefrina ... - Inietto l'epinefrina ... - - - Injecting Atropine ... - Atropin injizieren ... - - - Transfusing Blood ... - Bluttransfusion ... - Realizando transfusión ... - Przetaczanie krwi ... - Probíhá transfúze krve ... - Переливание крови... - Transfusion Sanguine ... - Infúzió... - Transfundindo Sangue ... - Effettuo la trasfusione ... - - - Transfusing Saline ... - Sallösungtransfusion ... - - - Transfusing Plasma ... - Plasmatransfusion ... - - - Bandaging ... - Verbinden ... - Vendando ... - Bandażowanie ... - Obvazuji ... - Pansement ... - Sto applicando la benda ... - Bekötözés... - Atando ... - Перевязывание.... - - - Applying Tourniquet ... - Aderpresse ... - - - Medical - Zdravotní - Médical - Sanitäter - Medico - Medyczne - Médico - Медик - Médico - - - Field Dressing - - - Packing Bandage - - - Elastic Bandage - - - QuikClot - - - Check Pulse - Puls überprüfen - - - Check Blood Pressure - Blutdruck messen - - - Triage Card - Triage Karte - - - Tourniquet - Tourniquet - - - Remove Tourniquet - Entferne Tourniquet - - - Give Blood IV (1000ml) - - - Give Blood IV (500ml) - - - Give Blood IV (250ml) - - - Give Plasma IV (1000ml) - - - Give Plasma IV (500ml) - - - Give Plasma IV (250ml) - - - Give Saline IV (1000ml) - - - Give Saline IV (500ml) - - - Give Saline IV (250ml) - - - Minor - Gering - - - Delayed - - - Immediate - - - Deceased - - - None - - - Normal breathing - Дыхание в норме - Respiración normal - Respiration Normale - Normalny oddech - - - No breathing - Дыхания нет - No respira - Apnée - Brak oddechu - - - Difficult breathing - Дыхание затруднено - Dificultad para respirar - Difficultée Respiratoire - Trudności z oddychaniem - - - Almost no breathing - Дыхания почти нет - Casi sin respirar - Respiration Faible - Prawie brak oddechu - - - Bleeding - Кровотечение - Sangrando - Seignement - Krwawienie zewnętrzne - - - In Pain - Испытывает боль - Con Dolor - A De La Douleur - W bólu - - - Lost a lot of Blood - Большая кровопотеря - Mucha Sangre perdida - A Perdu Bcp de Sang - Stracił dużo krwi - - - Tourniquet [CAT] - Жгут - Torniquete [CAT] - Garot [CAT] - Opaska uciskowa [CAT] - - - Receiving IV [%1ml] - - - - Bandage (Basic) - Повязка (обычная) - Vendaje (Básico) - Bandage (Standard) - Bandaż (jałowy) - - - Used to cover a wound - Для перевязки ран - Utilizado para cubrir una herida - Utilisé Pour Couvrir Une Blessure - Używany w celu przykrycia i ochrony miejsca zranienia - - - A dressing, that is a particular material used to cover a wound, which is applied over the wound + + + Inject Atropine + Atropin + Ввести атропин + + + Inject Epinephrine + Epinephrine injizieren + Inyectar Epinefrina + Wtrzyknij adrenalinę + Aplikovat Adrenalin + Ввести андреналил + Adrénaline + Adrenalin + Injetar Epinefrina + Inietta Epinefrina + + + Inject Morphine + Morphin injizieren + Inyectar Morfina + Wstrzyknij morfinę + Aplikovat Morfin + Ввести морфин + Morphine + Morfium + Injetar Morfina + Inietta Morfina + + + Transfuse Blood + Bluttransfusion + Transfundir sangre + Przetocz krew + Transfúze krve + Перелить кровь + Transfusion + Infúzió + Transfundir Sangue + Effettua Trasfusione + + + Transfuse Plasma + Plasmatransfusion + Перелить плазму + + + Transfuse Saline + Salzlösungtransfusion + Влить физраствор + + + Apply Tourniquet + Aderpresse anwenden + Наложить жгут + + + Bandage + Verbinden + Venda + Bandaż + Obvázat + Pansement + Benda + Kötözés + Atadura + Перевязать + + + Bandage Head + Kopf verbinden + Vendar la cabeza + Bandażuj głowę + Obvázat hlavu + Перевязать голову + Pansement Tête + Fej kötözése + Atar Cabeça + Benda la testa + + + Bandage Torso + Torso verbinden + Vendar el torso + Bandażuj tors + Obvázat hruď + Перевязать торс + Pansement Torse + Felsőtest kötözése + Atar Tronco + Benda il torso + + + Bandage Left Arm + Arm links verbinden + Vendar el brazo izquierdo + Bandażuj lewe ramię + Obvázat levou ruku + Перевязать левую руку + Pansement Bras Gauche + Bal kar kötözése + Atar Braço Esquerdo + Benda il braccio sinistro + + + Bandage Right Arm + Arm rechts verbinden + Vendar el brazo derecho + Bandażuj prawe ramię + Obvázat pravou ruku + Перевязать правую руку + Pansement Bras Droit + Jobb kar kötözése + Atar Braço Direito + Benda il braccio destro + + + Bandage Left Leg + Bein links verbinden + Vendar la pierna izquierda + Bandażuj lewą nogę + Obvázat levou nohu + Перевязать левую ногу + Pansement Jambe Gauche + Bal láb kötözése + Atar Perna Esquerda + Benda la gamba sinistra + + + Bandage Right Leg + Bein rechts verbinden + Vendar la pierna derecha + Bandażuj prawą nogę + Obvázat pravou nohu + Перевязать правую ногу + Pansement Jambe Droite + Jobb láb kötözése + Atar Perna Direita + Benda la gamba destra + + + Injecting Morphine ... + Morphin injizieren ... + Inyectando Morfina ... + Wstrzykiwanie morfiny ... + Aplikuju Morfin ... + Введение морфина... + Injection de Morphine... + Morfium beadása... + Injetando Morfina ... + Inietto la morfina ... + + + Injecting Epinephrine ... + Epinephrin injizieren ... + Inyectando Epinefrina ... + Wstrzykiwanie adrenaliny ... + Aplikuju Adrenalin ... + Введение андреналина ... + Injection d'Adrénaline ... + Adrenalin beadása... + Injetando Epinefrina ... + Inietto l'epinefrina ... + + + Injecting Atropine ... + Atropin injizieren ... + Введение атропина ... + + + Transfusing Blood ... + Bluttransfusion ... + Realizando transfusión ... + Przetaczanie krwi ... + Probíhá transfúze krve ... + Переливание крови... + Transfusion Sanguine ... + Infúzió... + Transfundindo Sangue ... + Effettuo la trasfusione ... + + + Transfusing Saline ... + Sallösungtransfusion ... + Вливание физраствора ... + + + Transfusing Plasma ... + Plasmatransfusion ... + Переливание плзмы ... + + + Bandaging ... + Verbinden ... + Vendando ... + Bandażowanie ... + Obvazuji ... + Pansement ... + Sto applicando la benda ... + Bekötözés... + Atando ... + Перевязывание ... + + + Applying Tourniquet ... + Aderpresse ... + Наложение жгута ... + + + Medical + Zdravotní + Médical + Sanitäter + Medico + Medyczne + Médico + Медик + Médico + + + Field Dressing + + + Packing Bandage + + + Elastic Bandage + + + QuikClot + + + Check Pulse + Puls überprüfen + + + Check Blood Pressure + Blutdruck messen + + + Triage Card + Triage Karte + + + Tourniquet + Tourniquet + + + Remove Tourniquet + Entferne Tourniquet + + + Give Blood IV (1000ml) + + + Give Blood IV (500ml) + + + Give Blood IV (250ml) + + + Give Plasma IV (1000ml) + + + Give Plasma IV (500ml) + + + Give Plasma IV (250ml) + + + Give Saline IV (1000ml) + + + Give Saline IV (500ml) + + + Give Saline IV (250ml) + + + Minor + Gering + Незначительные травмы + + + Delayed + Груз 300 + + + Immediate + Помощь отложена + + + Deceased + Груз 200 + + + None + Нет + + + Normal breathing + Дыхание в норме + Respiración normal + Respiration Normale + Normalny oddech + + + No breathing + Дыхания нет + No respira + Apnée + Brak oddechu + + + Difficult breathing + Дыхание затруднено + Dificultad para respirar + Difficultée Respiratoire + Trudności z oddychaniem + + + Almost no breathing + Дыхания почти нет + Casi sin respirar + Respiration Faible + Prawie brak oddechu + + + Bleeding + Кровотечение + Sangrando + Seignement + Krwawienie zewnętrzne + + + In Pain + Испытывает боль + Con Dolor + A De La Douleur + W bólu + + + Lost a lot of Blood + Большая кровопотеря + Mucha Sangre perdida + A Perdu Bcp de Sang + Stracił dużo krwi + + + Tourniquet [CAT] + Жгут + Torniquete [CAT] + Garot [CAT] + Opaska uciskowa [CAT] + + + Receiving IV [%1ml] + + + Bandage (Basic) + Повязка (обычная) + Vendaje (Básico) + Bandage (Standard) + Bandaż (jałowy) + + + Used to cover a wound + Для перевязки ран + Utilizado para cubrir una herida + Utilisé Pour Couvrir Une Blessure + Używany w celu przykrycia i ochrony miejsca zranienia + + + A dressing, that is a particular material used to cover a wound, which is applied over the wound once bleeding has been stemmed. - Повязка, накладываемая поверх раны после остановки кровотечения. - Un apósito, material específico utilizado para cubrir una herida, se aplica sobre la herida una vez + Повязка, накладываемая поверх раны после остановки кровотечения. + Un apósito, material específico utilizado para cubrir una herida, se aplica sobre la herida una vez ha dejado de sangrar. - C'est un bandage, qui est fait d'un matériel spécial utiliser pour couvrir une blessure, qui peut + C'est un bandage, qui est fait d'un matériel spécial utiliser pour couvrir une blessure, qui peut etre appliquer des que le seignement as ete stopper. - Opatrunek materiałowy, używany do przykrywania ran, zakładany na ranę po zatamowaniu krwawienia. + Opatrunek materiałowy, używany do przykrywania ran, zakładany na ranę po zatamowaniu krwawienia. - - - Packing Bandage - Тампонирующая повязка - Vendaje Compresivo - Bandage Mèche - Bandaż (uciskowy) - - - Used to pack medium to large wounds and stem the bleeding - Для тампонирования ран среднего и большого размера и остановки кровотечения. - Se utiliza para vendar heridas medianas y grandes y detener el sangrado - Utiliser pour remplire la cavité créé dans une blessure moyenne et grande. - Używany w celu opatrywania średnich i dużych ran oraz tamowania krwawienia. - - - A bandage used to pack the wound to stem bleeding and facilitate wound healing. Packing a wound is + + + Packing Bandage + Тампонирующая повязка + Vendaje Compresivo + Bandage Mèche + Bandaż (uciskowy) + + + Used to pack medium to large wounds and stem the bleeding + Для тампонирования ран среднего и большого размера и остановки кровотечения. + Se utiliza para vendar heridas medianas y grandes y detener el sangrado + Utiliser pour remplire la cavité créé dans une blessure moyenne et grande. + Używany w celu opatrywania średnich i dużych ran oraz tamowania krwawienia. + + + A bandage used to pack the wound to stem bleeding and facilitate wound healing. Packing a wound is an option in large polytrauma injuries. - Повязка для тампонирования раны, остановки кровотечения и лучшего заживления. При тяжелых + Повязка для тампонирования раны, остановки кровотечения и лучшего заживления. При тяжелых сочетанных ранениях возможно тампонирование раны. - Se utiliza para detener la hemorragia de una herida y favorecer su cicatrización. Se usa en grandes + Se utiliza para detener la hemorragia de una herida y favorecer su cicatrización. Se usa en grandes lesiones o politraumatismos. - Un bandage servent a etre inseré dans les blessure pour éponger le seignement et faciliter la + Un bandage servent a etre inseré dans les blessure pour éponger le seignement et faciliter la guerrison. Ce bandage est une option pour soigner les lession de politrauma. - Opatrunek stosowany w celu zatrzymania krwawienia i osłony większych ran. - - - Bandage (Elastic) - Повязка (давящая) - Vendaje (Elástico) - Bandage (Élastique) - Bandaż (elastyczny) - - - Bandage kit, Elastic - Давящая повязка - Vendaje (Elástico) - Bandage Compressif Élastique - Zestaw bandaży elastycznych. - - - - - Ce bandage peut etre utiliser pour compresser la plaie afin de ralentire le seignement et assurer la + Opatrunek stosowany w celu zatrzymania krwawienia i osłony większych ran. + + + Bandage (Elastic) + Повязка (давящая) + Vendaje (Elástico) + Bandage (Élastique) + Bandaż (elastyczny) + + + Bandage kit, Elastic + Давящая повязка + Vendaje (Elástico) + Bandage Compressif Élastique + Zestaw bandaży elastycznych. + + + + + Ce bandage peut etre utiliser pour compresser la plaie afin de ralentire le seignement et assurer la tenue du bandage lors de mouvment. - Elastyczna opaska podtrzymująca opatrunek oraz usztywniająca okolice stawów. - Brinda una compresión uniforme y ofrece soporte extra a una zona lesionada - - - Tourniquet (CAT) - Жгут - Torniquete (CAT) - Garot (CAT) - Staza (typ. CAT) - - - Slows down blood loss when bleeding - Уменьшает кровопотерю при кровотечении. - Reduce la velocidad de pérdida de sangre - Ralentit le seignement - Zmniejsza ubytek krwi z kończyn w przypadku krwawienia. - - - A constricting device used to compress venous and arterial circulation in effect inhibiting or + Elastyczna opaska podtrzymująca opatrunek oraz usztywniająca okolice stawów. + Brinda una compresión uniforme y ofrece soporte extra a una zona lesionada + + + Tourniquet (CAT) + Жгут + Torniquete (CAT) + Garot (CAT) + Staza (typ. CAT) + + + Slows down blood loss when bleeding + Уменьшает кровопотерю при кровотечении. + Reduce la velocidad de pérdida de sangre + Ralentit le seignement + Zmniejsza ubytek krwi z kończyn w przypadku krwawienia. + + + A constricting device used to compress venous and arterial circulation in effect inhibiting or slowing blood flow and therefore decreasing loss of blood. - Жгут используется для прижатия сосудов, приводящего к остановке или значительному уменьшению + Жгут используется для прижатия сосудов, приводящего к остановке или значительному уменьшению кровотечения и сокращению кровопотери. - Dispositivo utilizado para eliminar el pulso distal y de ese modo controlar la pérdida de sangre + Dispositivo utilizado para eliminar el pulso distal y de ese modo controlar la pérdida de sangre - Un appareil servent a compresser les artères et veines afin de reduire la perte de sang. - Opaska zaciskowa CAT służy do tamowanie krwotoków w sytuacji zranienia kończyn z masywnym + Un appareil servent a compresser les artères et veines afin de reduire la perte de sang. + Opaska zaciskowa CAT służy do tamowanie krwotoków w sytuacji zranienia kończyn z masywnym krwawieniem tętniczym lub żylnym. - - - Morphine autoinjector - Морфин в автоматическом шприце - Morfina auto-inyectable - Auto-injecteur de Morphine - Autostrzykawka z morfiną - - - Used to combat moderate to severe pain experiences - Для снятия средних и сильных болевых ощущений. - Usado para combatir los estados dolorosos moderados a severos - Utiliser pour contrer les douleurs modéré à severes. - Morfina. Ma silne działanie przeciwbólowe. - - - An analgesic used to combat moderate to severe pain experiences. - Анальгетик для снятия средних и сильных болевых ощущений. - Analgésico usado para combatir los estados dolorosos de moderado a severo. - Un Analgésique puissant servant a contrer les douleur modéré a severe. - Organiczny związek chemiczny z grupy alkaloidów. Ma silne działanie przeciwbólowe. - - - Atropin autoinjector - Атропин в автоматическом шприце - Atropina auto-inyectable - Auto-injecteur d'Atropine - Autostrzykawka AtroPen - - - Used in NBC scenarios - Применяется для защиты от ОМП - Usado en escenarios NBQ - Utiliser en cas d'attaque CBRN - Atropina. Stosowana jako lek rozkurczowy i środek rozszerzający źrenice. - - - A drug used by the Military in NBC scenarios. - Препарат, используемый в войсках для защиты от оружия массового поражения. - Medicamento usado por Militares en escenarios NBQ - Médicament utilisé par l'armée en cas d'attaque CBRN - Atropina. Stosowana jako lek rozkurczowy i środek rozszerzający źrenice. Środek stosowany w + + + Morphine autoinjector + Морфин в пневмошприце + Morfina auto-inyectable + Auto-injecteur de Morphine + Autostrzykawka z morfiną + + + Used to combat moderate to severe pain experiences + Для снятия средних и сильных болевых ощущений. + Usado para combatir los estados dolorosos moderados a severos + Utiliser pour contrer les douleurs modéré à severes. + Morfina. Ma silne działanie przeciwbólowe. + + + An analgesic used to combat moderate to severe pain experiences. + Анальгетик для снятия средних и сильных болевых ощущений. + Analgésico usado para combatir los estados dolorosos de moderado a severo. + Un Analgésique puissant servant a contrer les douleur modéré a severe. + Organiczny związek chemiczny z grupy alkaloidów. Ma silne działanie przeciwbólowe. + + + Atropin autoinjector + Атропин в пневмошприце + Atropina auto-inyectable + Auto-injecteur d'Atropine + Autostrzykawka AtroPen + + + Used in NBC scenarios + Применяется для защиты от ОМП + Usado en escenarios NBQ + Utiliser en cas d'attaque CBRN + Atropina. Stosowana jako lek rozkurczowy i środek rozszerzający źrenice. + + + A drug used by the Military in NBC scenarios. + Препарат, используемый в войсках для защиты от оружия массового поражения. + Medicamento usado por Militares en escenarios NBQ + Médicament utilisé par l'armée en cas d'attaque CBRN + Atropina. Stosowana jako lek rozkurczowy i środek rozszerzający źrenice. Środek stosowany w przypadku zagrożeń NBC. - - - Epinephrine autoinjector - Адреналин в автоматическом шприце - Epinefrina auto-inyectable - Auto-injecteur d'épinéphrine - Autostrzykawka EpiPen - - - Increase heart rate and counter effects given by allergic reactions - Стимулирует работу сердца и купирует аллергические реакции. - Aumenta la frecuencia cardiaca y contraresta los efectos de las reacciones alérgicas - Augmente la Fréquance cadiaque et contré les effet d'une reaction Anaphylactique - Adrenalina. Zwiększa puls i przeciwdziała efektom wywołanym przez reakcje alergiczne - - - A drug that works on a sympathetic response to dilate the bronchi, increase heart rate and counter + + + Epinephrine autoinjector + Адреналин в пневмошприце + Epinefrina auto-inyectable + Auto-injecteur d'épinéphrine + Autostrzykawka EpiPen + + + Increase heart rate and counter effects given by allergic reactions + Стимулирует работу сердца и купирует аллергические реакции. + Aumenta la frecuencia cardiaca y contraresta los efectos de las reacciones alérgicas + Augmente la Fréquance cadiaque et contré les effet d'une reaction Anaphylactique + Adrenalina. Zwiększa puls i przeciwdziała efektom wywołanym przez reakcje alergiczne + + + A drug that works on a sympathetic response to dilate the bronchi, increase heart rate and counter such effects given by allergic reactions (anaphylaxis). Used in sudden cardiac arrest scenarios with decreasing positive outcomes. - Препарат, вызывающий симпатическую реакцию, приводящую к расширению бронхов, увеличению частоты + Препарат, вызывающий симпатическую реакцию, приводящую к расширению бронхов, увеличению частоты сердечных сокращений и купированию аллергических реакций (анафилактического шока). Применяется при остановке сердца с уменьшением вероятности благоприятного исхода. - Medicamento que dilata los bronquios, aumenta la frecuencia cardiaca y contrarresta los efectos de + Medicamento que dilata los bronquios, aumenta la frecuencia cardiaca y contrarresta los efectos de las reacciones alérgicas (anafilaxis). Se utiliza en caso de paros cardiacos repentinos. - Un medicament qui fonctione sur le systeme sympatique créan une dilatation des bronches, augmente la + Un medicament qui fonctione sur le systeme sympatique créan une dilatation des bronches, augmente la fréquance cardiaque et contre les effet d'une reaction alergique (anaphylaxie). Utiliser lors d'arret cardio-respiratoire pour augmenté les chances retrouver un ryhtme. - EpiPen z adrenaliną ma działanie sympatykomimetyczne, tj. pobudza receptory alfa- i + EpiPen z adrenaliną ma działanie sympatykomimetyczne, tj. pobudza receptory alfa- i beta-adrenergiczne. Pobudzenie układu współczulnego prowadzi do zwiększenia częstotliwości pracy serca, zwiększenia pojemności wyrzutowej serca i przyśpieszenia krążenia wieńcowego. Pobudzenie oskrzelowych receptorów beta-adrenergicznych wywołuje rozkurcz mięśni gładkich oskrzeli, co w efekcie zmniejsza towarzyszące oddychaniu świsty i duszności. - - - Plasma IV (1000ml) - Плазма для в/в вливания (1000 мл) - Plasma Intravenoso (1000ml) - Plasma Sanguin IV (1000ml) - Osocze IV (1000ml) - - - A volume-expanding blood supplement. - Дополнительный препарат, применяемый при возмещении объема крови. - Suplemento para expandir el volumen sanguíneo. - Supplement visant a remplacer les volume sanguin - Składnik krwi, używany do zwiększenia jej objętości. - - - A volume-expanding blood supplement. - Дополнительный препарат, применяемый при возмещении объема крови. - Suplemento para expandir el volumen sanguíneo. - Supplement visant a remplacer le volume sanguin et remplace les plaquettes. - Składnik krwi, używany do zwiększenia jej objętości. - - - Plasma IV (500ml) - Плазма для в/в вливания (500 мл) - Plasma Intravenoso (500ml) - Plasma Sanguin IV (500ml) - Osocze IV (500ml) - - - Plasma IV (250ml) - Плазма для в/в вливания (250 мл) - Plasma Intravenoso (250ml) - Plasma Sanguin (250ml) - Osocze IV (250ml) - - - Blood IV (1000ml) - Кровь для переливания (1000 мл) - Sangre Intravenosa (1000ml) - Cullot Sanguin IV (1000ml) - Krew IV (1000ml) - - - Blood IV, for restoring a patients blood (keep cold) - Пакет крови для возмещения объема потерянной крови (хранить в холодильнике) - Sangre Intravenosa, para restarurar el volumen sanguíneo (mantener frío) - Cullot Sanguin IV, pour remplacer le volume sanguin (garder Réfrigeré) - Krew IV, używana do uzupełnienia krwi u pacjenta, trzymać w warunkach chłodniczych - - - O Negative infusion blood used in strict and rare events to replenish blood supply usually + + + Plasma IV (1000ml) + Плазма для в/в вливания (1000 мл) + Plasma Intravenoso (1000ml) + Plasma Sanguin IV (1000ml) + Osocze IV (1000ml) + + + A volume-expanding blood supplement. + Дополнительный препарат, применяемый при возмещении объема крови. + Suplemento para expandir el volumen sanguíneo. + Supplement visant a remplacer les volume sanguin + Składnik krwi, używany do zwiększenia jej objętości. + + + A volume-expanding blood supplement. + Дополнительный препарат, применяемый при возмещении объема крови. + Suplemento para expandir el volumen sanguíneo. + Supplement visant a remplacer le volume sanguin et remplace les plaquettes. + Składnik krwi, używany do zwiększenia jej objętości. + + + Plasma IV (500ml) + Плазма для в/в вливания (500 мл) + Plasma Intravenoso (500ml) + Plasma Sanguin IV (500ml) + Osocze IV (500ml) + + + Plasma IV (250ml) + Плазма для в/в вливания (250 мл) + Plasma Intravenoso (250ml) + Plasma Sanguin (250ml) + Osocze IV (250ml) + + + Blood IV (1000ml) + Кровь для переливания (1000 мл) + Sangre Intravenosa (1000ml) + Cullot Sanguin IV (1000ml) + Krew IV (1000ml) + + + Blood IV, for restoring a patients blood (keep cold) + Пакет крови для возмещения объема потерянной крови (хранить в холодильнике) + Sangre Intravenosa, para restarurar el volumen sanguíneo (mantener frío) + Cullot Sanguin IV, pour remplacer le volume sanguin (garder Réfrigeré) + Krew IV, używana do uzupełnienia krwi u pacjenta, trzymać w warunkach chłodniczych + + + O Negative infusion blood used in strict and rare events to replenish blood supply usually conducted in the transport phase of medical care. - Кровь I группы, резус-отрицательная, применяется по жизненным показаниям для возмещения объема + Кровь I группы, резус-отрицательная, применяется по жизненным показаниям для возмещения объема потерянной крови на догоспитальном этапе оказания медицинской помощи. - Cullot Sanguin O- ,utiliser seulement lors de perte sanguine majeur afin de remplacer le volume + Cullot Sanguin O- ,utiliser seulement lors de perte sanguine majeur afin de remplacer le volume sanguin perdu. Habituelment utiliser lors du transport ou dans un etablisement de soin. - Krew 0 Rh-, używana w rzadkich i szczególnych przypadkach do uzupełnienia krwi u pacjenta, zazwyczaj + Krew 0 Rh-, używana w rzadkich i szczególnych przypadkach do uzupełnienia krwi u pacjenta, zazwyczaj w trakcie fazie transportu rannej osoby do szpitala. - Utilice sólo durante gran pérdida de sangre para reemplazar el volumen de sangre perdido. Uso + Utilice sólo durante gran pérdida de sangre para reemplazar el volumen de sangre perdido. Uso habitual durante el transporte de heridos. - - - Blood IV (500ml) - Кровь для переливания (500 мл) - Sangre Intravenosa (500ml) - Cullot Sanguin IV (500ml) - Krew IV (500ml) - - - Blood IV (250ml) - Кровь для переливания (250 мл) - Sangre Intravenosa (250ml) - Cullot Sanguin IV (250ml) - Krew IV (250ml) - - - Saline IV (1000ml) - Физраствор для в/в вливания (1000 мл) - Solución Salina Intravenosa (1000ml) - solution Saline 0.9% IV (1000ml) - Solanka 0,9% IV (1000ml) - - - Saline IV, for restoring a patients blood - Пакет физраствора для возмещения объема потерянной крови - Solución Salina Intravenosa, para restaurar el volumen sanguíneo - Solution Saline 0.9% IV, pour retablir temporairement la tention arteriel - Solanka 0,9%, podawana dożylnie (IV), używana w celu uzupełnienia krwi u pacjenta - - - A medical volume-replenishing agent introduced into the blood system through an IV infusion. + + + Blood IV (500ml) + Кровь для переливания (500 мл) + Sangre Intravenosa (500ml) + Cullot Sanguin IV (500ml) + Krew IV (500ml) + + + Blood IV (250ml) + Кровь для переливания (250 мл) + Sangre Intravenosa (250ml) + Cullot Sanguin IV (250ml) + Krew IV (250ml) + + + Saline IV (1000ml) + Физраствор для в/в вливания (1000 мл) + Solución Salina Intravenosa (1000ml) + solution Saline 0.9% IV (1000ml) + Solanka 0,9% IV (1000ml) + + + Saline IV, for restoring a patients blood + Пакет физраствора для возмещения объема потерянной крови + Solución Salina Intravenosa, para restaurar el volumen sanguíneo + Solution Saline 0.9% IV, pour retablir temporairement la tention arteriel + Solanka 0,9%, podawana dożylnie (IV), używana w celu uzupełnienia krwi u pacjenta + + + A medical volume-replenishing agent introduced into the blood system through an IV infusion. - Пакет физиологического раствора для возмещения объема потерянной крови путем внутривенного + Пакет физиологического раствора для возмещения объема потерянной крови путем внутривенного вливания. - Suero fisiológico inoculado al torrente sanguíneo de forma intravenosa. - Un remplacment temporaire pour rétablir la tention artériel lors de perte sanguine, étant ajouter + Suero fisiológico inoculado al torrente sanguíneo de forma intravenosa. + Un remplacment temporaire pour rétablir la tention artériel lors de perte sanguine, étant ajouter par intraveineuse - Używany w medycynie w formie płynu infuzyjnego jako środek nawadniający i uzupełniający niedobór + Używany w medycynie w formie płynu infuzyjnego jako środek nawadniający i uzupełniający niedobór elektrolitów, podawany dożylnie (IV). - - - Saline IV (500ml) - Физраствор для в/в вливания (500 мл) - Solución Salina Intravenosa (500ml) - Solution Saline 0.9% IV (500ml) - Solanka 0,9% IV (500ml) - - - Saline IV (250ml) - Физраствор для в/в вливания (250 мл) - Solución Salina Intravenosa (250ml) - Solution Saline 0.9% IV (250ml) - Solanka 0,9% IV (250ml) - - - Basic Field Dressing (QuikClot) - Первичный перевязочный пакет (QuikClot) - Vendaje Básico (Coagulante) - Bandage Regulier (Coagulant) - Opatrunek QuikClot - - - QuikClot bandage - Гемостатический пакет QuikClot - Venda Coagulante - Bandage coagulant - Podstawowy opatrunek stosowany na rany - - - - - Un bandage servant a coaguler les seignements mineur à moyen. - Proszkowy opatrunek adsorbcyjny przeznaczony do tamowania zagrażających życiu krwawień średniej i + + + Saline IV (500ml) + Физраствор для в/в вливания (500 мл) + Solución Salina Intravenosa (500ml) + Solution Saline 0.9% IV (500ml) + Solanka 0,9% IV (500ml) + + + Saline IV (250ml) + Физраствор для в/в вливания (250 мл) + Solución Salina Intravenosa (250ml) + Solution Saline 0.9% IV (250ml) + Solanka 0,9% IV (250ml) + + + Basic Field Dressing (QuikClot) + Первичный перевязочный пакет (QuikClot) + Vendaje Básico (Coagulante) + Bandage Regulier (Coagulant) + Opatrunek QuikClot + + + QuikClot bandage + Гемостатический пакет QuikClot + Venda Coagulante + Bandage coagulant + Podstawowy opatrunek stosowany na rany + + + + + Un bandage servant a coaguler les seignements mineur à moyen. + Proszkowy opatrunek adsorbcyjny przeznaczony do tamowania zagrażających życiu krwawień średniej i dużej intensywności. - Vendaje Hemostático con coagulante que detiene el sangrado. - - - Personal Aid Kit - Аптечка - Kit de Soporte Vital Avanzado - Équipement de support Vitale - Apteczka osobista - - - Includes various treatment kit needed for stitching or advanced treatment - Содержит различные материалы и инструменты для зашивания ран и оказания специальной медпомощи. + Vendaje Hemostático con coagulante que detiene el sangrado. + + + Personal Aid Kit + Аптечка + Kit de Soporte Vital Avanzado + Équipement de support Vitale + Apteczka osobista + + + Includes various treatment kit needed for stitching or advanced treatment + Содержит различные материалы и инструменты для зашивания ран и оказания специальной медпомощи. - Incluye material médico para tratamientos avanzados - Inclue du matériel medical pour les traitement avancé, tel les point de suture. - Zestaw środków medycznych do opatrywania ran i dodatkowego leczenia po-urazowego - - - - - - - - - Surgical Kit - Хирургический набор - Kit Quirúrgico - - - Surgical Kit for in field advanced medical treatment - Набор для хирургической помощи в полевых условиях - Kit Quirúrgico para el tratamiento avanzado en el campo de batalla - - - Surgical Kit for in field advanced medical treatment - Набор для хирургической помощи в полевых условиях - Kit Quirúrgico para el tratamiento avanzado en el campo de batalla - - - Bodybag - Мешок для трупов - Bolsa para cadáveres - - - A bodybag for dead bodies - Мешок для упаковки трупов - Bolsa para cadáveres - - - A bodybag for dead bodies - Мешок для упаковки трупов - Bolsa para cadáveres - - - - Blood Pressure - Артериальное давление - Presión Arterial - - - Checking Blood Pressure.. - Проверка артериального давления... - Comprobando Presión Arterial... - - - You checked %1 - Вы осмотрели раненого %1 - Examinando a %1 - - - You find a blood pressure of %2/%3 - Артериальное давление %2/%3 - La Presión Arterial es %2/%3 - - - You find a low blood pressure - Давление низкое - La Presión Arterial es baja - - - You find a normal blood pressure - Давление нормальное - La Presión Arterial es normal - - - You find a high blood pressure - Давление высокое - La Presión Arterial es alta - - - You find no blood pressure - Давления нет - No hay Presión Arterial - - - You fail to find a blood pressure - Артериальное давление не определяется - No puedes encontrar Presión Arterial - - - Pulse - Пульс - Pulso - - - Checking Heart Rate.. - Проверка пульса... - Comprobando Pulso... - - - You checked %1 - Вы осмотрели раненого %1 - Examinando a %1 - - - You find a Heart Rate of %2 - Пульс %2 уд./мин. - El Pulso es %2 - - - You find a weak Heart Rate - Пульс слабый - El Pulso es débil - - - You find a strong Heart Rate - Пульс учащенный - El Pulso está acelerado - - - You find a normal Heart Rate - Пульс в норме - El Pulso es bueno - - - You find no Heart Rate - Пульс не прощупывается - No tiene Pulso - - - Response - Реакция - Reacciona - - - You check response of patient - Вы проверяете реакцию раненого - Compruebas si el paciente reacciona - - - %1 is responsive - %1 реагирует на раздражители - %1 ha reaccionado - - - %1 is not responsive - %1 не реагирует - %1 no reacciona - - - You checked %1 - Вы осмотрели раненого %1 - Examinas a %1 - - - Bandaged - Повязка наложена - Vendado - - - You bandage %1 (%2) - Вы перевязали раненого %1 (%2) - Aplicas vendaje a %1 en %2 - - - %1 is bandaging you - %1 перевязывает вас - %1 te está vendando - - - You start stitching injures from %1 (%2) - Вы зашиваете ранения от %1 (%2) - Estás suturando heridas de %1 en %2 - - - Stitching - Наложение швов - Suturando - - - You treat the airway of %1 - Вы интубируете раненого %1 - Estás intubando a %1 - - - Airway - Дыхательные пути - Vías Aéreas - - - %1 is treating your airway - %1 проводит вам интубацию - %1 te está intubando - - - Drag - Ziehen - Arrastrar - Ciągnij - Táhnout - Тащить - Tracter - Húzás - Arrastar - Trascina - - - Carry - Tragen - Cargar - Nieś - Nést - Нести - Porter - Cipelés - Carregar - Trasporta - - - Release - Loslassen - Soltar - Połóż - Položit - Отпустить - Déposer - Elenged - Largar - Lascia - - - Load Patient Into - Patient Einladen - Cargar el paciente en - Załaduj pacjenta - Naložit pacianta do - Погрузить пациента в - Embarquer le Patient - Sebesült berakása - Carregar Paciente Em - Carica paziente nel - - - Unload Patient - Patient Ausladen - Descargar el paciente - Wyładuj pacjenta - Vyložit pacienta - Выгрузить пациента - Débarquer le Patient - Sebesült kihúzása - Descarregar Paciente - Scarica il paziente - - - Unload patient - - - Load patient - - - Place body in bodybag - - - Placing body in bodybag - - - - %1 has bandaged patient - - - %1 used %2 - - - %1 has given an IV - - - %1 applied a tourniquet - - - - + Incluye material médico para tratamientos avanzados + Inclue du matériel medical pour les traitement avancé, tel les point de suture. + Zestaw środków medycznych do opatrywania ran i dodatkowego leczenia po-urazowego + + + + + + + + + Surgical Kit + Хирургический набор + Kit Quirúrgico + + + Surgical Kit for in field advanced medical treatment + Набор для хирургической помощи в полевых условиях + Kit Quirúrgico para el tratamiento avanzado en el campo de batalla + + + Surgical Kit for in field advanced medical treatment + Набор для хирургической помощи в полевых условиях + Kit Quirúrgico para el tratamiento avanzado en el campo de batalla + + + Bodybag + Мешок для трупов + Bolsa para cadáveres + + + A bodybag for dead bodies + Мешок для упаковки трупов + Bolsa para cadáveres + + + A bodybag for dead bodies + Мешок для упаковки трупов + Bolsa para cadáveres + + + Blood Pressure + Артериальное давление + Presión Arterial + + + Checking Blood Pressure.. + Проверка артериального давления... + Comprobando Presión Arterial... + + + You checked %1 + Вы осмотрели раненого %1 + Examinando a %1 + + + You find a blood pressure of %2/%3 + Артериальное давление %2/%3 + La Presión Arterial es %2/%3 + + + You find a low blood pressure + Давление низкое + La Presión Arterial es baja + + + You find a normal blood pressure + Давление нормальное + La Presión Arterial es normal + + + You find a high blood pressure + Давление высокое + La Presión Arterial es alta + + + You find no blood pressure + Давления нет + No hay Presión Arterial + + + You fail to find a blood pressure + Артериальное давление не определяется + No puedes encontrar Presión Arterial + + + Pulse + Пульс + Pulso + + + Checking Heart Rate.. + Проверка пульса... + Comprobando Pulso... + + + You checked %1 + Вы осмотрели раненого %1 + Examinando a %1 + + + You find a Heart Rate of %2 + Пульс %2 уд./мин. + El Pulso es %2 + + + You find a weak Heart Rate + Пульс слабый + El Pulso es débil + + + You find a strong Heart Rate + Пульс учащенный + El Pulso está acelerado + + + You find a normal Heart Rate + Пульс в норме + El Pulso es bueno + + + You find no Heart Rate + Пульс не прощупывается + No tiene Pulso + + + Response + Реакция + Reacciona + + + You check response of patient + Вы проверяете реакцию раненого + Compruebas si el paciente reacciona + + + %1 is responsive + %1 реагирует на раздражители + %1 ha reaccionado + + + %1 is not responsive + %1 не реагирует + %1 no reacciona + + + You checked %1 + Вы осмотрели раненого %1 + Examinas a %1 + + + Bandaged + Повязка наложена + Vendado + + + You bandage %1 (%2) + Вы перевязали раненого %1 (%2) + Aplicas vendaje a %1 en %2 + + + %1 is bandaging you + %1 перевязывает вас + %1 te está vendando + + + You start stitching injures from %1 (%2) + Вы зашиваете ранения от %1 (%2) + Estás suturando heridas de %1 en %2 + + + Stitching + Наложение швов + Suturando + + + You treat the airway of %1 + Вы интубируете раненого %1 + Estás intubando a %1 + + + Airway + Дыхательные пути + Vías Aéreas + + + %1 is treating your airway + %1 проводит вам интубацию + %1 te está intubando + + + Drag + Ziehen + Arrastrar + Ciągnij + Táhnout + Тащить + Tracter + Húzás + Arrastar + Trascina + + + Carry + Tragen + Cargar + Nieś + Nést + Нести + Porter + Cipelés + Carregar + Trasporta + + + Release + Loslassen + Soltar + Połóż + Položit + Отпустить + Déposer + Elenged + Largar + Lascia + + + Load Patient Into + Patient Einladen + Cargar el paciente en + Załaduj pacjenta + Naložit pacianta do + Погрузить пациента в + Embarquer le Patient + Sebesült berakása + Carregar Paciente Em + Carica paziente nel + + + Unload Patient + Patient Ausladen + Descargar el paciente + Wyładuj pacjenta + Vyložit pacienta + Выгрузить пациента + Débarquer le Patient + Sebesült kihúzása + Descarregar Paciente + Scarica il paziente + + + Unload patient + Выгрузить пациента + + + Load patient + Погрузить пациента + + + Place body in bodybag + Поместить тело в мешок + + + Placing body in bodybag + Помещение тела в мешок ... + + + %1 has bandaged patient + %1 перевязал пациента + + + %1 used %2 + %1 применил %2 + + + %1 has given an IV + %1 провел переливание + + + %1 applied a tourniquet + %1 наложил жгут + + + \ No newline at end of file diff --git a/addons/microdagr/stringtable.xml b/addons/microdagr/stringtable.xml index 772a7a172f..823a7a7f8d 100644 --- a/addons/microdagr/stringtable.xml +++ b/addons/microdagr/stringtable.xml @@ -1,24 +1,30 @@  - + MicroDAGR GPS + MicroDAGR GPS MicroDAGR advanced GPS receiver + Многофункциональный GPS-приёмник. Angular Unit: + Угловые единицы: Mils + Тысячные Show Waypoints On Map: + Показывать маршрутные точки на карте: Degrees + Градусы On @@ -44,43 +50,55 @@ Enter Grid Cords: + Введите координаты: Name of [%1] + Название [%1] MGRS-New + MGRS-Новая WGD + WGD Range: Reichweite: + Дистанция: Compass Direction + Азимут Mark + Отметка Waypoints Wegpunkte + Машрутные точки Connect To + Соединиться с Settings Einstellungen Configuración + Настройки SetWP + Установить МТ Add + Добавить Delete @@ -95,15 +113,19 @@ Toggle MicroDAGR Display Mode + Сменить режим показа MicroDAGR Show MicoDAGR + Показать MicroDAGR Configure MicroDAGR + Настроить MicroDAGR Close MicroDAGR + Закрыть MicroDAGR \ No newline at end of file diff --git a/addons/missileguidance/CfgAmmo.hpp b/addons/missileguidance/CfgAmmo.hpp index df876ae2ae..01ab65c388 100644 --- a/addons/missileguidance/CfgAmmo.hpp +++ b/addons/missileguidance/CfgAmmo.hpp @@ -1,10 +1,10 @@ -class CfgAmmo { - class MissileBase; - - class M_PG_AT : MissileBase { - irLock = 0; - laserLock = 0; - airLock = 0; - manualControl = 0; - }; +class CfgAmmo { + class MissileBase; + + class M_PG_AT : MissileBase { + irLock = 0; + laserLock = 0; + airLock = 0; + manualControl = 0; + }; }; \ No newline at end of file diff --git a/addons/missileguidance/CfgEventhandlers.hpp b/addons/missileguidance/CfgEventhandlers.hpp index 2775490d11..eac270c27d 100644 --- a/addons/missileguidance/CfgEventhandlers.hpp +++ b/addons/missileguidance/CfgEventhandlers.hpp @@ -1,17 +1,17 @@ -class Extended_PreInit_EventHandlers { - class ADDON { - init = QUOTE(call COMPILE_FILE(XEH_pre_init)); - }; -}; - -class Extended_PostInit_EventHandlers { - class ADDON { - init = QUOTE(call COMPILE_FILE(XEH_post_init)); - }; -}; - -class Extended_FiredBIS_EventHandlers { - class AllVehicles { - ADDON = QUOTE(_this call FUNC(fired)); - }; +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_pre_init)); + }; +}; + +class Extended_PostInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_post_init)); + }; +}; + +class Extended_FiredBIS_EventHandlers { + class AllVehicles { + ADDON = QUOTE(_this call FUNC(fired)); + }; }; \ No newline at end of file diff --git a/addons/missileguidance/CfgWeapons.hpp b/addons/missileguidance/CfgWeapons.hpp index 739ef3c5e0..65e23facf0 100644 --- a/addons/missileguidance/CfgWeapons.hpp +++ b/addons/missileguidance/CfgWeapons.hpp @@ -1,34 +1,34 @@ -class Mode_SemiAuto; -class CfgWeapons { - class CannonCore; - class LauncherCore; - - class RocketPods: LauncherCore { - canLock = 1; - }; - class missiles_DAGR: RocketPods { - canLock = 1; - }; - /* - class autocannon_Base_F: CannonCore { - canLock = 1; - }; - class cannon_120mm: CannonCore { - canLock = 1; - - class player : Mode_SemiAuto { - canLock = 1; - }; - }; - class gatling_25mm: CannonCore { - canLock = 1; - }; - class autocannon_35mm: CannonCore { - canLock = 1; - }; - - class launch_NLAW_F: Launcher_Base_F - { - canLock = 1; - };*/ +class Mode_SemiAuto; +class CfgWeapons { + class CannonCore; + class LauncherCore; + + class RocketPods: LauncherCore { + canLock = 1; + }; + class missiles_DAGR: RocketPods { + canLock = 1; + }; + /* + class autocannon_Base_F: CannonCore { + canLock = 1; + }; + class cannon_120mm: CannonCore { + canLock = 1; + + class player : Mode_SemiAuto { + canLock = 1; + }; + }; + class gatling_25mm: CannonCore { + canLock = 1; + }; + class autocannon_35mm: CannonCore { + canLock = 1; + }; + + class launch_NLAW_F: Launcher_Base_F + { + canLock = 1; + };*/ }; \ No newline at end of file diff --git a/addons/missileguidance/XEH_post_init.sqf b/addons/missileguidance/XEH_post_init.sqf index 6904ee6c47..a4e4806591 100644 --- a/addons/missileguidance/XEH_post_init.sqf +++ b/addons/missileguidance/XEH_post_init.sqf @@ -1,3 +1,3 @@ -#include "script_component.hpp" -NO_DEDICATED; - +#include "script_component.hpp" +NO_DEDICATED; + diff --git a/addons/missileguidance/XEH_pre_init.sqf b/addons/missileguidance/XEH_pre_init.sqf index 8aa557f838..cbdebddf12 100644 --- a/addons/missileguidance/XEH_pre_init.sqf +++ b/addons/missileguidance/XEH_pre_init.sqf @@ -1,14 +1,14 @@ -#include "script_component.hpp" - -PREP(rotateVectLineGetMap); -PREP(rotateVectLine); - -PREP(translateToModelSpace); -PREP(translateToWeaponSpace); - -PREP(fired); - -PREP(guidance_DAGR); -PREP(guidance_LGB); -PREP(guidance_HellfireII); +#include "script_component.hpp" + +PREP(rotateVectLineGetMap); +PREP(rotateVectLine); + +PREP(translateToModelSpace); +PREP(translateToWeaponSpace); + +PREP(fired); + +PREP(guidance_DAGR); +PREP(guidance_LGB); +PREP(guidance_HellfireII); FUNC(getPosASL) = {visiblePositionASL (_this select 0)}; \ No newline at end of file diff --git a/addons/missileguidance/config.cpp b/addons/missileguidance/config.cpp index 0341a56df6..4de2dd404d 100644 --- a/addons/missileguidance/config.cpp +++ b/addons/missileguidance/config.cpp @@ -1,15 +1,15 @@ -#include "script_component.hpp" - -class CfgPatches { - class ADDON { - units[] = {}; - weapons[] = {}; - requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"ace_laser"}; - VERSION_CONFIG; - }; -}; - -#include "CfgEventhandlers.hpp" -#include "CfgAmmo.hpp" +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_laser"}; + VERSION_CONFIG; + }; +}; + +#include "CfgEventhandlers.hpp" +#include "CfgAmmo.hpp" #include "CfgWeapons.hpp" \ No newline at end of file diff --git a/addons/missileguidance/functions/fnc_fired.sqf b/addons/missileguidance/functions/fnc_fired.sqf index dbe6abfec7..028b09d691 100644 --- a/addons/missileguidance/functions/fnc_fired.sqf +++ b/addons/missileguidance/functions/fnc_fired.sqf @@ -1,18 +1,18 @@ -//#define DEBUG_MODE_FULL -#include "script_component.hpp" -//_this=[TEST_AI_HELICOPTER,"missiles_DAGR","missiles_DAGR","Far_AI","M_PG_AT","24Rnd_PG_missiles",163988: rocket_01_fly_f.p3d] -TRACE_1("enter", _this); -PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); - -if(!local _shooter) exitWith { false }; - -switch _weapon do { - case "missiles_DAGR": { - _this call FUNC(guidance_DAGR); - }; - case "GBU12BombLauncher": { - _this call FUNC(guidance_LGB); - }; -}; - -//_this call FUNC(guidance_HellfireII); +//#define DEBUG_MODE_FULL +#include "script_component.hpp" +//_this=[TEST_AI_HELICOPTER,"missiles_DAGR","missiles_DAGR","Far_AI","M_PG_AT","24Rnd_PG_missiles",163988: rocket_01_fly_f.p3d] +TRACE_1("enter", _this); +PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); + +if(!local _shooter) exitWith { false }; + +switch _weapon do { + case "missiles_DAGR": { + _this call FUNC(guidance_DAGR); + }; + case "GBU12BombLauncher": { + _this call FUNC(guidance_LGB); + }; +}; + +//_this call FUNC(guidance_HellfireII); diff --git a/addons/missileguidance/functions/fnc_guidance_DAGR.sqf b/addons/missileguidance/functions/fnc_guidance_DAGR.sqf index 9055b00a7f..b50e5b763f 100644 --- a/addons/missileguidance/functions/fnc_guidance_DAGR.sqf +++ b/addons/missileguidance/functions/fnc_guidance_DAGR.sqf @@ -1,120 +1,120 @@ -//#define DEBUG_MODE_FULL -#include "script_component.hpp" - -FUNC(guidance_DIRECT_LOAL_PFH) = { - //TRACE_1("enter", _this); - private["_args", "_shooter", "_dagr", "_curVelocity", "_targets", "_target", "_yVec", "_xVec", "_zVec", "_dagrPos", "_shooterPos", "_distanceToTarget", "_distanceToShooter", "_def"]; - _args = _this select 0; - //PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); - _shooter = _args select 0; - _dagr = _args select 6; - _curVelocity = velocity _dagr; - - if(!alive _dagr || isNull _dagr || isNull _shooter) exitWith { - [(_this select 1)] call cba_fnc_removePerFrameHandler; - }; - - _targets = [_dagr, ACE_DEFAULT_LASER_CODE, 70, _curVelocity] call ace_laser_fnc_findLaserDesignator; - TRACE_2("Targets", _target, _targets); - - if((_targets select 0)) then { - _target = _targets select 1; - - // player sideChat "FUCK!"; - // drop ["\a3\data_f\Cl_basic","","Billboard",1,20,(getPos _dagr),[0,0,0],1,1.275,1.0,0.0,[5],[[1,0,0,1]],[0],0.0,2.0,"","",""]; - - - _yVec = vectorDir _dagr; - _zVec = vectorUp _dagr; - _xVec = vectorNormalized (_yVec vectorCrossProduct _zVec); - - _dagrPos = getPosASL _dagr; - // player sideChat "G!"; - _targetPos = getPosASL _target; - _shooterPos = getPosASL _shooter; - - if((count _targetPos) > 0) then { - _distanceToTarget = _dagrPos vectorDistance _targetPos; - _distanceToShooter = _dagrPos vectorDistance _shooterPos; - - _addHeight = [0,0,(_dagrPos distance _targetPos)*0.02]; - #ifdef DEBUG_MODE_FULL - drawLine3D [(ASLtoATL _targetPos) vectorAdd _addHeight, ASLtoATL _targetPos, [0,1,0,1]]; - #endif - - _targetPos = _targetPos vectorAdd _addHeight; - - _def = 0.0040; - if(_distanceToShooter > 100) then { - _def = 0.0025; - }; - - _targetVectorSeeker = [_dagr, [_xVec, _yVec, _zVec], _targetPos] call FUNC(translateToWeaponSpace); - // _targetVectorSeeker = _dagr worldToModel (ASLtoATL _targetPos); - // _targetVectorSeeker = [0,0,0] vectorFromTo _targetVectorSeeker; - _yaw = 0.0; - if((_targetVectorSeeker select 0) < 0) then { - _yaw = -_def; - } else { - if((_targetVectorSeeker select 0) > 0) then { - _yaw = _def; - }; - }; - - _pitch = 0.0; - if((_targetVectorSeeker select 2) < 0) then { - _pitch = -_def; - } else { - if((_targetVectorSeeker select 2) > 0) then { - _pitch = _def; - }; - }; - #ifdef DEBUG_MODE_FULL - drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,1,1,1], ASLtoATL _dagrPos, 0.75, 0.75, 0, str _vectorTo, 1, 0.025, "TahomaB"]; - drawLine3D [ASLtoATL _dagrPos, ASLtoATL _targetPos, [1,0,0,1]]; - - _distance = ([getPos startPos, _dagrPos] call BIS_fnc_distance2D); - _marker = createMarkerLocal [format["m%1", MARKERCOUNT], [_distance, _dagrPos select 2]]; - _marker setMarkerTypeLocal "mil_dot"; - _marker setMarkerColorLocal "ColorRed"; - - MARKERCOUNT = MARKERCOUNT + 1; - #endif - - if(accTime > 0) then { - _outVector = [_dagr, [_xVec, _yVec, _zVec], [_yaw, 1/accTime, _pitch]] call FUNC(translateToModelSpace); - // _outVector = _dagr modelToWorldVisual [_yaw, 1, _pitch]; - // _outVector = ATLtoASL _outVector; - _vectorTo = _dagrPos vectorFromTo _outVector; - - // hintSilent format["v: %1", _vectorTo]; - - // _dagr setVectorDir _vectorTo; - _dagr setVectorDirAndUp [_vectorTo, vectorUp _dagr]; - }; - - #ifdef DEBUG_MODE_FULL - hintSilent format["d: %1", _distanceToTarget]; - #endif - }; - }; -}; - -FUNC(guidance_DAGR_DIRECT_LOAL) = { - PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); - - GVAR(lastTime) = time; - [FUNC(guidance_DIRECT_LOAL_PFH), 0, _this] call cba_fnc_addPerFrameHandler; -}; - -PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); -_fireMode = _shooter getVariable ["ACE_FIRE_SELECTION", ACE_DEFAULT_FIRE_SELECTION]; - -switch (_fireMode select 0) do { - // Default to FIREMODE_DIRECT_LOAL - // FIREMODE_DIRECT_LOAL - default { - LOG("Initiating DAGR FIREMODE_DIRECT_LOAL"); - _this call FUNC(guidance_DAGR_DIRECT_LOAL); - }; +//#define DEBUG_MODE_FULL +#include "script_component.hpp" + +FUNC(guidance_DIRECT_LOAL_PFH) = { + //TRACE_1("enter", _this); + private["_args", "_shooter", "_dagr", "_curVelocity", "_targets", "_target", "_yVec", "_xVec", "_zVec", "_dagrPos", "_shooterPos", "_distanceToTarget", "_distanceToShooter", "_def"]; + _args = _this select 0; + //PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); + _shooter = _args select 0; + _dagr = _args select 6; + _curVelocity = velocity _dagr; + + if(!alive _dagr || isNull _dagr || isNull _shooter) exitWith { + [(_this select 1)] call cba_fnc_removePerFrameHandler; + }; + + _targets = [_dagr, ACE_DEFAULT_LASER_CODE, 70, _curVelocity] call ace_laser_fnc_findLaserDesignator; + TRACE_2("Targets", _target, _targets); + + if((_targets select 0)) then { + _target = _targets select 1; + + // player sideChat "FUCK!"; + // drop ["\a3\data_f\Cl_basic","","Billboard",1,20,(getPos _dagr),[0,0,0],1,1.275,1.0,0.0,[5],[[1,0,0,1]],[0],0.0,2.0,"","",""]; + + + _yVec = vectorDir _dagr; + _zVec = vectorUp _dagr; + _xVec = vectorNormalized (_yVec vectorCrossProduct _zVec); + + _dagrPos = getPosASL _dagr; + // player sideChat "G!"; + _targetPos = getPosASL _target; + _shooterPos = getPosASL _shooter; + + if((count _targetPos) > 0) then { + _distanceToTarget = _dagrPos vectorDistance _targetPos; + _distanceToShooter = _dagrPos vectorDistance _shooterPos; + + _addHeight = [0,0,(_dagrPos distance _targetPos)*0.02]; + #ifdef DEBUG_MODE_FULL + drawLine3D [(ASLtoATL _targetPos) vectorAdd _addHeight, ASLtoATL _targetPos, [0,1,0,1]]; + #endif + + _targetPos = _targetPos vectorAdd _addHeight; + + _def = 0.0040; + if(_distanceToShooter > 100) then { + _def = 0.0025; + }; + + _targetVectorSeeker = [_dagr, [_xVec, _yVec, _zVec], _targetPos] call FUNC(translateToWeaponSpace); + // _targetVectorSeeker = _dagr worldToModel (ASLtoATL _targetPos); + // _targetVectorSeeker = [0,0,0] vectorFromTo _targetVectorSeeker; + _yaw = 0.0; + if((_targetVectorSeeker select 0) < 0) then { + _yaw = -_def; + } else { + if((_targetVectorSeeker select 0) > 0) then { + _yaw = _def; + }; + }; + + _pitch = 0.0; + if((_targetVectorSeeker select 2) < 0) then { + _pitch = -_def; + } else { + if((_targetVectorSeeker select 2) > 0) then { + _pitch = _def; + }; + }; + #ifdef DEBUG_MODE_FULL + drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,1,1,1], ASLtoATL _dagrPos, 0.75, 0.75, 0, str _vectorTo, 1, 0.025, "TahomaB"]; + drawLine3D [ASLtoATL _dagrPos, ASLtoATL _targetPos, [1,0,0,1]]; + + _distance = ([getPos startPos, _dagrPos] call BIS_fnc_distance2D); + _marker = createMarkerLocal [format["m%1", MARKERCOUNT], [_distance, _dagrPos select 2]]; + _marker setMarkerTypeLocal "mil_dot"; + _marker setMarkerColorLocal "ColorRed"; + + MARKERCOUNT = MARKERCOUNT + 1; + #endif + + if(accTime > 0) then { + _outVector = [_dagr, [_xVec, _yVec, _zVec], [_yaw, 1/accTime, _pitch]] call FUNC(translateToModelSpace); + // _outVector = _dagr modelToWorldVisual [_yaw, 1, _pitch]; + // _outVector = ATLtoASL _outVector; + _vectorTo = _dagrPos vectorFromTo _outVector; + + // hintSilent format["v: %1", _vectorTo]; + + // _dagr setVectorDir _vectorTo; + _dagr setVectorDirAndUp [_vectorTo, vectorUp _dagr]; + }; + + #ifdef DEBUG_MODE_FULL + hintSilent format["d: %1", _distanceToTarget]; + #endif + }; + }; +}; + +FUNC(guidance_DAGR_DIRECT_LOAL) = { + PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); + + GVAR(lastTime) = time; + [FUNC(guidance_DIRECT_LOAL_PFH), 0, _this] call cba_fnc_addPerFrameHandler; +}; + +PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); +_fireMode = _shooter getVariable ["ACE_FIRE_SELECTION", ACE_DEFAULT_FIRE_SELECTION]; + +switch (_fireMode select 0) do { + // Default to FIREMODE_DIRECT_LOAL + // FIREMODE_DIRECT_LOAL + default { + LOG("Initiating DAGR FIREMODE_DIRECT_LOAL"); + _this call FUNC(guidance_DAGR_DIRECT_LOAL); + }; }; \ No newline at end of file diff --git a/addons/missileguidance/functions/fnc_guidance_HellfireII.sqf b/addons/missileguidance/functions/fnc_guidance_HellfireII.sqf index 72b8da8c67..0c35786b92 100644 --- a/addons/missileguidance/functions/fnc_guidance_HellfireII.sqf +++ b/addons/missileguidance/functions/fnc_guidance_HellfireII.sqf @@ -1,249 +1,249 @@ -//#define DEBUG_MODE_FULL -#include "script_component.hpp" - -FUNC(guidance_Hellfire_LOAL_HI_PFH) = { - //TRACE_1("enter", _this); - _args = _this select 0; - //PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); - _shooter = _args select 0; - _missile = _args select 6; - _curVelocity = velocity _missile; - - if(!alive _missile || isNull _missile || isNull _shooter) exitWith { - [(_this select 1)] call cba_fnc_removePerFrameHandler; - }; - - _launchPos = _shooter getVariable [QGVAR(launchPos), nil]; - if(isNil "_launchPos") then { - TRACE_1("Setting launch parameters", ""); - _launchPos = getPosASL _shooter; - _shooter setVariable [QGVAR(launchPos), _launchPos, false]; - _shooter setVariable [QGVAR(launchTime), diag_tickTime, false]; - }; - - _targets = [_missile, ACE_DEFAULT_LASER_CODE, 70, _curVelocity] call ace_laser_fnc_findLaserDesignator; - _addHeight = [0,0,0]; - if((_targets select 0)) then { - _target = _targets select 1; - TRACE_2("Targets", _target, _targets); - - _yVec = vectorDir _missile; - _zVec = vectorUp _missile; - _xVec = vectorNormalized (_yVec vectorCrossProduct _zVec); - - _missilePos = getPosASL _missile; - // player sideChat "G!"; - _targetPos = getPosASL _target; - TRACE_4("Phase Check", _launchPos, _missilePos, _targetPos, (_missilePos distance _targetPos)); - if((count _targetPos) > 0) then { - _distanceToTarget = _missilePos vectorDistance _targetPos; - - _defPitch = 0.05; - - if((_launchPos distance _missilePos) < 400 && (_targetPos distance _missilePos) > 400) then { - _addHeight = [0,0,(_targetPos select 2) + ((_launchPos distance _targetPos)*2)]; - TRACE_1("Climb phase", _addHeight); - //_defPitch = 0.1; - } else { - // Covered half the distance, go terminal - if((_missilePos distance _targetPos) < (_launchPos distance _targetPos) / 2) then { - TRACE_1("TERMINAL", ""); - } else { - if((_missilePos select 2) > (_targetPos select 2)) then { - _heightDiff = (_missilePos select 2) - (_targetPos select 2); - TRACE_1("Coasting", _heightDiff); - _addHeight = [0,0, _heightDiff]; - }; - }; - }; - _targetPos = _targetPos vectorAdd _addHeight; - - _defYaw = 0.0035; - - - _targetVectorSeeker = [_missile, [_xVec, _yVec, _zVec], _targetPos] call FUNC(translateToWeaponSpace); - _yaw = 0.0; - if((_targetVectorSeeker select 0) < 0) then { - _yaw = -_defYaw; - } else { - if((_targetVectorSeeker select 0) > 0) then { - _yaw = _defYaw; - }; - }; - - _pitch = 0.0; - if((_targetVectorSeeker select 2) < 0) then { - _pitch = -_defPitch; - } else { - if((_targetVectorSeeker select 2) > 0) then { - _pitch = _defPitch; - }; - }; - #ifdef DEBUG_MODE_FULL - drawLine3D [(ASLtoATL _targetPos) vectorAdd _addHeight, ASLtoATL _targetPos, [0,1,0,1]]; - - _light = "#lightpoint" createVehicleLocal (getPos _missile); - _light setLightBrightness 1.0; - _light setLightAmbient [1.0, 0.0, 0.0]; - _light setLightColor [1.0, 0.0, 0.0]; - - drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,1,1,1], ASLtoATL _missilePos, 0.75, 0.75, 0, str _vectorTo, 1, 0.025, "TahomaB"]; - drawLine3D [ASLtoATL _missilePos, ASLtoATL _targetPos, [1,0,0,1]]; - - _distance = ([getPos startPos, _missilePos] call BIS_fnc_distance2D); - _marker = createMarkerLocal [format["m%1", MARKERCOUNT], [_distance, _missilePos select 2]]; - _marker setMarkerTypeLocal "mil_dot"; - _marker setMarkerColorLocal "ColorRed"; - - MARKERCOUNT = MARKERCOUNT + 1; - #endif - - if(accTime > 0) then { - _outVector = [_missile, [_xVec, _yVec, _zVec], [_yaw, 1/accTime, _pitch]] call FUNC(translateToModelSpace); - - _vectorTo = _missilePos vectorFromTo _outVector; - _missile setVectorDirAndUp [_vectorTo, vectorUp _missile]; - }; - - #ifdef DEBUG_MODE_FULL - hintSilent format["d: %1", _distanceToTarget]; - #endif - }; - }; -}; - -FUNC(guidance_Hellfire_LOAL_DIR_PFH) = { - //TRACE_1("enter", _this); - _args = _this select 0; - //PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); - _shooter = _args select 0; - _missile = _args select 6; - _curVelocity = velocity _missile; - - if(!alive _missile || isNull _missile || isNull _shooter) exitWith { - [(_this select 1)] call cba_fnc_removePerFrameHandler; - }; - - _launchPos = _shooter getVariable [QGVAR(launchPos), nil]; - if(isNil "_launchPos") then { - TRACE_1("Setting launch parameters", ""); - _launchPos = getPosASL _shooter; - _shooter setVariable [QGVAR(launchPos), _launchPos, false]; - _shooter setVariable [QGVAR(launchTime), diag_tickTime, false]; - }; - - _targets = [_missile, ACE_DEFAULT_LASER_CODE, 70, _curVelocity] call ace__laser_fnc_findLaserDesignator; - _addHeight = [0,0,0]; - if((_targets select 0)) then { - _target = _targets select 1; - TRACE_2("Targets", _target, _targets); - - _yVec = vectorDir _missile; - _zVec = vectorUp _missile; - _xVec = vectorNormalized (_yVec vectorCrossProduct _zVec); - - _missilePos = getPosASL _missile; - // player sideChat "G!"; - _targetPos = getPosASL _target; - TRACE_4("Phase Check", _launchPos, _missilePos, _targetPos, (_missilePos distance _targetPos)); - if((count _targetPos) > 0) then { - _distanceToTarget = _missilePos vectorDistance _targetPos; - - if((_launchPos distance _missilePos) < 400 && (_targetPos distance _missilePos) > 400) then { - _addHeight = [0,0,(_targetPos select 2) + (_missilePos distance _targetPos)*0.5]; - TRACE_1("Climb phase", _addHeight); - } else { - // Covered half the distance, go terminal - if((_missilePos distance _targetPos) < (_launchPos distance _targetPos) / 2) then { - TRACE_1("TERMINAL", ""); - } else { - if((_missilePos select 2) > (_targetPos select 2)) then { - _heightDiff = (_missilePos select 2) - (_targetPos select 2); - TRACE_1("Coasting", _heightDiff); - _addHeight = [0,0, _heightDiff]; - }; - }; - }; - _targetPos = _targetPos vectorAdd _addHeight; - - _defYaw = 0.0035; - _defPitch = 0.0075; - - _targetVectorSeeker = [_missile, [_xVec, _yVec, _zVec], _targetPos] call FUNC(translateToWeaponSpace); - _yaw = 0.0; - if((_targetVectorSeeker select 0) < 0) then { - _yaw = -_defYaw; - } else { - if((_targetVectorSeeker select 0) > 0) then { - _yaw = _defYaw; - }; - }; - - _pitch = 0.0; - if((_targetVectorSeeker select 2) < 0) then { - _pitch = -_defPitch; - } else { - if((_targetVectorSeeker select 2) > 0) then { - _pitch = _defPitch; - }; - }; - #ifdef DEBUG_MODE_FULL - drawLine3D [(ASLtoATL _targetPos) vectorAdd _addHeight, ASLtoATL _targetPos, [0,1,0,1]]; - - _light = "#lightpoint" createVehicleLocal (getPos _missile); - _light setLightBrightness 1.0; - _light setLightAmbient [1.0, 0.0, 0.0]; - _light setLightColor [1.0, 0.0, 0.0]; - - drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,1,1,1], ASLtoATL _missilePos, 0.75, 0.75, 0, str _vectorTo, 1, 0.025, "TahomaB"]; - drawLine3D [ASLtoATL _missilePos, ASLtoATL _targetPos, [1,0,0,1]]; - - _distance = ([getPos startPos, _missilePos] call BIS_fnc_distance2D); - _marker = createMarkerLocal [format["m%1", MARKERCOUNT], [_distance, _missilePos select 2]]; - _marker setMarkerTypeLocal "mil_dot"; - _marker setMarkerColorLocal "ColorRed"; - - MARKERCOUNT = MARKERCOUNT + 1; - #endif - - if(accTime > 0) then { - _outVector = [_missile, [_xVec, _yVec, _zVec], [_yaw, 1/accTime, _pitch]] call FUNC(translateToModelSpace); - - _vectorTo = _missilePos vectorFromTo _outVector; - _missile setVectorDirAndUp [_vectorTo, vectorUp _missile]; - }; - - #ifdef DEBUG_MODE_FULL - hintSilent format["d: %1", _distanceToTarget]; - #endif - }; - }; -}; - - -FUNC(guidance_Hellfire_LOAL_HI) = { - PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); - - GVAR(lastTime) = time; - [FUNC(guidance_Hellfire_LOAL_HI_PFH), 0, _this] call cba_fnc_addPerFrameHandler; -}; - - -FUNC(guidance_Hellfire_LOAL_DIR) = { - PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); - - GVAR(lastTime) = time; - [FUNC(guidance_Hellfire_LOAL_DIR_PFH), 0, _this] call cba_fnc_addPerFrameHandler; -}; - -PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); -_fireMode = _shooter getVariable ["ACE_FIRE_SELECTION", ACE_DEFAULT_FIRE_SELECTION]; - -switch (_fireMode select 0) do { - // Default to FIREMODE_DIRECT_LOAL - // FIREMODE_DIRECT_LOAL - default { - LOG("Initiating Hellfire II FIREMODE_LOAL_DIR"); - _this call FUNC(guidance_Hellfire_LOAL_HI); - }; +//#define DEBUG_MODE_FULL +#include "script_component.hpp" + +FUNC(guidance_Hellfire_LOAL_HI_PFH) = { + //TRACE_1("enter", _this); + _args = _this select 0; + //PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); + _shooter = _args select 0; + _missile = _args select 6; + _curVelocity = velocity _missile; + + if(!alive _missile || isNull _missile || isNull _shooter) exitWith { + [(_this select 1)] call cba_fnc_removePerFrameHandler; + }; + + _launchPos = _shooter getVariable [QGVAR(launchPos), nil]; + if(isNil "_launchPos") then { + TRACE_1("Setting launch parameters", ""); + _launchPos = getPosASL _shooter; + _shooter setVariable [QGVAR(launchPos), _launchPos, false]; + _shooter setVariable [QGVAR(launchTime), diag_tickTime, false]; + }; + + _targets = [_missile, ACE_DEFAULT_LASER_CODE, 70, _curVelocity] call ace_laser_fnc_findLaserDesignator; + _addHeight = [0,0,0]; + if((_targets select 0)) then { + _target = _targets select 1; + TRACE_2("Targets", _target, _targets); + + _yVec = vectorDir _missile; + _zVec = vectorUp _missile; + _xVec = vectorNormalized (_yVec vectorCrossProduct _zVec); + + _missilePos = getPosASL _missile; + // player sideChat "G!"; + _targetPos = getPosASL _target; + TRACE_4("Phase Check", _launchPos, _missilePos, _targetPos, (_missilePos distance _targetPos)); + if((count _targetPos) > 0) then { + _distanceToTarget = _missilePos vectorDistance _targetPos; + + _defPitch = 0.05; + + if((_launchPos distance _missilePos) < 400 && (_targetPos distance _missilePos) > 400) then { + _addHeight = [0,0,(_targetPos select 2) + ((_launchPos distance _targetPos)*2)]; + TRACE_1("Climb phase", _addHeight); + //_defPitch = 0.1; + } else { + // Covered half the distance, go terminal + if((_missilePos distance _targetPos) < (_launchPos distance _targetPos) / 2) then { + TRACE_1("TERMINAL", ""); + } else { + if((_missilePos select 2) > (_targetPos select 2)) then { + _heightDiff = (_missilePos select 2) - (_targetPos select 2); + TRACE_1("Coasting", _heightDiff); + _addHeight = [0,0, _heightDiff]; + }; + }; + }; + _targetPos = _targetPos vectorAdd _addHeight; + + _defYaw = 0.0035; + + + _targetVectorSeeker = [_missile, [_xVec, _yVec, _zVec], _targetPos] call FUNC(translateToWeaponSpace); + _yaw = 0.0; + if((_targetVectorSeeker select 0) < 0) then { + _yaw = -_defYaw; + } else { + if((_targetVectorSeeker select 0) > 0) then { + _yaw = _defYaw; + }; + }; + + _pitch = 0.0; + if((_targetVectorSeeker select 2) < 0) then { + _pitch = -_defPitch; + } else { + if((_targetVectorSeeker select 2) > 0) then { + _pitch = _defPitch; + }; + }; + #ifdef DEBUG_MODE_FULL + drawLine3D [(ASLtoATL _targetPos) vectorAdd _addHeight, ASLtoATL _targetPos, [0,1,0,1]]; + + _light = "#lightpoint" createVehicleLocal (getPos _missile); + _light setLightBrightness 1.0; + _light setLightAmbient [1.0, 0.0, 0.0]; + _light setLightColor [1.0, 0.0, 0.0]; + + drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,1,1,1], ASLtoATL _missilePos, 0.75, 0.75, 0, str _vectorTo, 1, 0.025, "TahomaB"]; + drawLine3D [ASLtoATL _missilePos, ASLtoATL _targetPos, [1,0,0,1]]; + + _distance = ([getPos startPos, _missilePos] call BIS_fnc_distance2D); + _marker = createMarkerLocal [format["m%1", MARKERCOUNT], [_distance, _missilePos select 2]]; + _marker setMarkerTypeLocal "mil_dot"; + _marker setMarkerColorLocal "ColorRed"; + + MARKERCOUNT = MARKERCOUNT + 1; + #endif + + if(accTime > 0) then { + _outVector = [_missile, [_xVec, _yVec, _zVec], [_yaw, 1/accTime, _pitch]] call FUNC(translateToModelSpace); + + _vectorTo = _missilePos vectorFromTo _outVector; + _missile setVectorDirAndUp [_vectorTo, vectorUp _missile]; + }; + + #ifdef DEBUG_MODE_FULL + hintSilent format["d: %1", _distanceToTarget]; + #endif + }; + }; +}; + +FUNC(guidance_Hellfire_LOAL_DIR_PFH) = { + //TRACE_1("enter", _this); + _args = _this select 0; + //PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); + _shooter = _args select 0; + _missile = _args select 6; + _curVelocity = velocity _missile; + + if(!alive _missile || isNull _missile || isNull _shooter) exitWith { + [(_this select 1)] call cba_fnc_removePerFrameHandler; + }; + + _launchPos = _shooter getVariable [QGVAR(launchPos), nil]; + if(isNil "_launchPos") then { + TRACE_1("Setting launch parameters", ""); + _launchPos = getPosASL _shooter; + _shooter setVariable [QGVAR(launchPos), _launchPos, false]; + _shooter setVariable [QGVAR(launchTime), diag_tickTime, false]; + }; + + _targets = [_missile, ACE_DEFAULT_LASER_CODE, 70, _curVelocity] call ace__laser_fnc_findLaserDesignator; + _addHeight = [0,0,0]; + if((_targets select 0)) then { + _target = _targets select 1; + TRACE_2("Targets", _target, _targets); + + _yVec = vectorDir _missile; + _zVec = vectorUp _missile; + _xVec = vectorNormalized (_yVec vectorCrossProduct _zVec); + + _missilePos = getPosASL _missile; + // player sideChat "G!"; + _targetPos = getPosASL _target; + TRACE_4("Phase Check", _launchPos, _missilePos, _targetPos, (_missilePos distance _targetPos)); + if((count _targetPos) > 0) then { + _distanceToTarget = _missilePos vectorDistance _targetPos; + + if((_launchPos distance _missilePos) < 400 && (_targetPos distance _missilePos) > 400) then { + _addHeight = [0,0,(_targetPos select 2) + (_missilePos distance _targetPos)*0.5]; + TRACE_1("Climb phase", _addHeight); + } else { + // Covered half the distance, go terminal + if((_missilePos distance _targetPos) < (_launchPos distance _targetPos) / 2) then { + TRACE_1("TERMINAL", ""); + } else { + if((_missilePos select 2) > (_targetPos select 2)) then { + _heightDiff = (_missilePos select 2) - (_targetPos select 2); + TRACE_1("Coasting", _heightDiff); + _addHeight = [0,0, _heightDiff]; + }; + }; + }; + _targetPos = _targetPos vectorAdd _addHeight; + + _defYaw = 0.0035; + _defPitch = 0.0075; + + _targetVectorSeeker = [_missile, [_xVec, _yVec, _zVec], _targetPos] call FUNC(translateToWeaponSpace); + _yaw = 0.0; + if((_targetVectorSeeker select 0) < 0) then { + _yaw = -_defYaw; + } else { + if((_targetVectorSeeker select 0) > 0) then { + _yaw = _defYaw; + }; + }; + + _pitch = 0.0; + if((_targetVectorSeeker select 2) < 0) then { + _pitch = -_defPitch; + } else { + if((_targetVectorSeeker select 2) > 0) then { + _pitch = _defPitch; + }; + }; + #ifdef DEBUG_MODE_FULL + drawLine3D [(ASLtoATL _targetPos) vectorAdd _addHeight, ASLtoATL _targetPos, [0,1,0,1]]; + + _light = "#lightpoint" createVehicleLocal (getPos _missile); + _light setLightBrightness 1.0; + _light setLightAmbient [1.0, 0.0, 0.0]; + _light setLightColor [1.0, 0.0, 0.0]; + + drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,1,1,1], ASLtoATL _missilePos, 0.75, 0.75, 0, str _vectorTo, 1, 0.025, "TahomaB"]; + drawLine3D [ASLtoATL _missilePos, ASLtoATL _targetPos, [1,0,0,1]]; + + _distance = ([getPos startPos, _missilePos] call BIS_fnc_distance2D); + _marker = createMarkerLocal [format["m%1", MARKERCOUNT], [_distance, _missilePos select 2]]; + _marker setMarkerTypeLocal "mil_dot"; + _marker setMarkerColorLocal "ColorRed"; + + MARKERCOUNT = MARKERCOUNT + 1; + #endif + + if(accTime > 0) then { + _outVector = [_missile, [_xVec, _yVec, _zVec], [_yaw, 1/accTime, _pitch]] call FUNC(translateToModelSpace); + + _vectorTo = _missilePos vectorFromTo _outVector; + _missile setVectorDirAndUp [_vectorTo, vectorUp _missile]; + }; + + #ifdef DEBUG_MODE_FULL + hintSilent format["d: %1", _distanceToTarget]; + #endif + }; + }; +}; + + +FUNC(guidance_Hellfire_LOAL_HI) = { + PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); + + GVAR(lastTime) = time; + [FUNC(guidance_Hellfire_LOAL_HI_PFH), 0, _this] call cba_fnc_addPerFrameHandler; +}; + + +FUNC(guidance_Hellfire_LOAL_DIR) = { + PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); + + GVAR(lastTime) = time; + [FUNC(guidance_Hellfire_LOAL_DIR_PFH), 0, _this] call cba_fnc_addPerFrameHandler; +}; + +PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); +_fireMode = _shooter getVariable ["ACE_FIRE_SELECTION", ACE_DEFAULT_FIRE_SELECTION]; + +switch (_fireMode select 0) do { + // Default to FIREMODE_DIRECT_LOAL + // FIREMODE_DIRECT_LOAL + default { + LOG("Initiating Hellfire II FIREMODE_LOAL_DIR"); + _this call FUNC(guidance_Hellfire_LOAL_HI); + }; }; \ No newline at end of file diff --git a/addons/missileguidance/functions/fnc_guidance_LGB.sqf b/addons/missileguidance/functions/fnc_guidance_LGB.sqf index 47efa46768..02fa5e7a66 100644 --- a/addons/missileguidance/functions/fnc_guidance_LGB.sqf +++ b/addons/missileguidance/functions/fnc_guidance_LGB.sqf @@ -1,109 +1,109 @@ -#define DEBUG_MODE_FULL -#include "script_component.hpp" - -FUNC(guidance_LGB_LOAL_PFH) = { - //TRACE_1("enter", _this); - _args = _this select 0; - //PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); - _lgb = _args select 6; - _curVelocity = velocity _lgb; - - if(!alive _lgb) exitWith { - [(_this select 1)] call cba_fnc_removePerFrameHandler; - }; - - _targets = [_lgb, ACE_DEFAULT_LASER_CODE, 70, _curVelocity] call uo_laser_fnc_findLaserDesignator; - //TRACE_2("Targets", _target, _targets); - - if((_targets select 0)) then { - _target = _targets select 1; - - // player sideChat "FUCK!"; - // drop ["\a3\data_f\Cl_basic","","Billboard",1,20,(getPos _lgb),[0,0,0],1,1.275,1.0,0.0,[5],[[1,0,0,1]],[0],0.0,2.0,"","",""]; - - - _yVec = vectorDir _lgb; - _zVec = vectorUp _lgb; - _xVec = vectorNormalized (_yVec vectorCrossProduct _zVec); - - _lgbPos = getPosASL _lgb; - // player sideChat "G!"; - _targetPos = getPosASL _target; - if((count _targetPos) > 0) then { - // player sideChat format["f: %1", _targetPos]; - _addHeight = [0,0,(_lgbPos distance _targetPos)*0.06]; - // drawLine3D [(ASLtoATL _targetPos) vectorAdd _addHeight, ASLtoATL _targetPos, [0,1,0,1]]; - _targetPos = _targetPos vectorAdd _addHeight; - - - - _def = 0.0025; - - _targetVectorSeeker = [_lgb, [_xVec, _yVec, _zVec], _targetPos] call FUNC(translateToWeaponSpace); - // _targetVectorSeeker = _lgb worldToModel (ASLtoATL _targetPos); - // _targetVectorSeeker = [0,0,0] vectorFromTo _targetVectorSeeker; - _yaw = 0.0; - if((_targetVectorSeeker select 0) < 0) then { - _yaw = -_def; - } else { - if((_targetVectorSeeker select 0) > 0) then { - _yaw = _def; - }; - }; - - _pitch = 0.0; - if((_targetVectorSeeker select 2) < 0) then { - _pitch = -_def; - } else { - if((_targetVectorSeeker select 2) > 0) then { - _pitch = _def; - }; - }; - #ifdef DEBUG_MODE_FULL - drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,1,1,1], ASLtoATL _lgbPos, 0.75, 0.75, 0, str _vectorTo, 1, 0.025, "TahomaB"]; - drawLine3D [ASLtoATL _lgbPos, ASLtoATL _targetPos, [1,0,0,1]]; - - _distance = ([getPos startPos, _lgbPos] call BIS_fnc_distance2D); - _marker = createMarkerLocal [format["m%1", MARKERCOUNT], [_distance, _lgbPos select 2]]; - _marker setMarkerTypeLocal "mil_dot"; - _marker setMarkerColorLocal "ColorRed"; - - MARKERCOUNT = MARKERCOUNT + 1; - #endif - - if(accTime > 0) then { - _outVector = [_lgb, [_xVec, _yVec, _zVec], [_yaw, 1/accTime, _pitch]] call FUNC(translateToModelSpace); - // _outVector = _lgb modelToWorldVisual [_yaw, 1, _pitch]; - // _outVector = ATLtoASL _outVector; - _vectorTo = _lgbPos vectorFromTo _outVector; - - // hintSilent format["v: %1", _vectorTo]; - - // _lgb setVectorDir _vectorTo; - _lgb setVectorDirAndUp [_vectorTo, vectorUp _lgb]; - }; - - #ifdef DEBUG_MODE_FULL - hintSilent format["d: %1", _lgbPos vectorDistance _targetPos]; - #endif - }; - }; -}; - -FUNC(guidance_LGB_LOAL) = { - PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); - - [FUNC(guidance_LGB_LOAL_PFH), 0, _this] call cba_fnc_addPerFrameHandler; -}; - -PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); -_fireMode = _shooter getVariable ["ACE_FIRE_SELECTION", ACE_DEFAULT_FIRE_SELECTION]; - -switch (_fireMode select 0) do { - // Default to FIREMODE_DIRECT_LOAL - // FIREMODE_DIRECT_LOAL - default { - LOG("Initiating FIREMODE_DIRECT_LOAL"); - _this call FUNC(guidance_LGB_LOAL); - }; +#define DEBUG_MODE_FULL +#include "script_component.hpp" + +FUNC(guidance_LGB_LOAL_PFH) = { + //TRACE_1("enter", _this); + _args = _this select 0; + //PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); + _lgb = _args select 6; + _curVelocity = velocity _lgb; + + if(!alive _lgb) exitWith { + [(_this select 1)] call cba_fnc_removePerFrameHandler; + }; + + _targets = [_lgb, ACE_DEFAULT_LASER_CODE, 70, _curVelocity] call uo_laser_fnc_findLaserDesignator; + //TRACE_2("Targets", _target, _targets); + + if((_targets select 0)) then { + _target = _targets select 1; + + // player sideChat "FUCK!"; + // drop ["\a3\data_f\Cl_basic","","Billboard",1,20,(getPos _lgb),[0,0,0],1,1.275,1.0,0.0,[5],[[1,0,0,1]],[0],0.0,2.0,"","",""]; + + + _yVec = vectorDir _lgb; + _zVec = vectorUp _lgb; + _xVec = vectorNormalized (_yVec vectorCrossProduct _zVec); + + _lgbPos = getPosASL _lgb; + // player sideChat "G!"; + _targetPos = getPosASL _target; + if((count _targetPos) > 0) then { + // player sideChat format["f: %1", _targetPos]; + _addHeight = [0,0,(_lgbPos distance _targetPos)*0.06]; + // drawLine3D [(ASLtoATL _targetPos) vectorAdd _addHeight, ASLtoATL _targetPos, [0,1,0,1]]; + _targetPos = _targetPos vectorAdd _addHeight; + + + + _def = 0.0025; + + _targetVectorSeeker = [_lgb, [_xVec, _yVec, _zVec], _targetPos] call FUNC(translateToWeaponSpace); + // _targetVectorSeeker = _lgb worldToModel (ASLtoATL _targetPos); + // _targetVectorSeeker = [0,0,0] vectorFromTo _targetVectorSeeker; + _yaw = 0.0; + if((_targetVectorSeeker select 0) < 0) then { + _yaw = -_def; + } else { + if((_targetVectorSeeker select 0) > 0) then { + _yaw = _def; + }; + }; + + _pitch = 0.0; + if((_targetVectorSeeker select 2) < 0) then { + _pitch = -_def; + } else { + if((_targetVectorSeeker select 2) > 0) then { + _pitch = _def; + }; + }; + #ifdef DEBUG_MODE_FULL + drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,1,1,1], ASLtoATL _lgbPos, 0.75, 0.75, 0, str _vectorTo, 1, 0.025, "TahomaB"]; + drawLine3D [ASLtoATL _lgbPos, ASLtoATL _targetPos, [1,0,0,1]]; + + _distance = ([getPos startPos, _lgbPos] call BIS_fnc_distance2D); + _marker = createMarkerLocal [format["m%1", MARKERCOUNT], [_distance, _lgbPos select 2]]; + _marker setMarkerTypeLocal "mil_dot"; + _marker setMarkerColorLocal "ColorRed"; + + MARKERCOUNT = MARKERCOUNT + 1; + #endif + + if(accTime > 0) then { + _outVector = [_lgb, [_xVec, _yVec, _zVec], [_yaw, 1/accTime, _pitch]] call FUNC(translateToModelSpace); + // _outVector = _lgb modelToWorldVisual [_yaw, 1, _pitch]; + // _outVector = ATLtoASL _outVector; + _vectorTo = _lgbPos vectorFromTo _outVector; + + // hintSilent format["v: %1", _vectorTo]; + + // _lgb setVectorDir _vectorTo; + _lgb setVectorDirAndUp [_vectorTo, vectorUp _lgb]; + }; + + #ifdef DEBUG_MODE_FULL + hintSilent format["d: %1", _lgbPos vectorDistance _targetPos]; + #endif + }; + }; +}; + +FUNC(guidance_LGB_LOAL) = { + PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); + + [FUNC(guidance_LGB_LOAL_PFH), 0, _this] call cba_fnc_addPerFrameHandler; +}; + +PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); +_fireMode = _shooter getVariable ["ACE_FIRE_SELECTION", ACE_DEFAULT_FIRE_SELECTION]; + +switch (_fireMode select 0) do { + // Default to FIREMODE_DIRECT_LOAL + // FIREMODE_DIRECT_LOAL + default { + LOG("Initiating FIREMODE_DIRECT_LOAL"); + _this call FUNC(guidance_LGB_LOAL); + }; }; \ No newline at end of file diff --git a/addons/missileguidance/functions/fnc_rotateVectLine.sqf b/addons/missileguidance/functions/fnc_rotateVectLine.sqf index b0360cc330..ae476559b8 100644 --- a/addons/missileguidance/functions/fnc_rotateVectLine.sqf +++ b/addons/missileguidance/functions/fnc_rotateVectLine.sqf @@ -1,38 +1,38 @@ -#include "script_component.hpp" - -_map = _this select 0; -_theta = _this select 1; - -_p = _map select 0; -_p1 = _map select 1; -_p2 = _map select 2; - -_q1 = +(_map select 3); -_q2 = +(_map select 4); -_u = _map select 5; -_d = _map select 6; - -/* Step 4 */ -_q2 set[0, (_q1 select 0) * cos(_theta) - (_q1 select 1) * sin(_theta)]; -_q2 set[1, (_q1 select 0) * sin(_theta) + (_q1 select 1) * cos(_theta)]; -_q2 set[2, (_q1 select 2)]; - -/* Inverse of step 3 */ -_q1 set[0, (_q2 select 0) * _d + (_q2 select 2) * (_u select 0)]; -_q1 set[1, (_q2 select 1)]; -_q1 set[2, - (_q2 select 0) * (_u select 0) + (_q2 select 2) * _d]; - -/* Inverse of step 2 */ -if (_d != 0) then { - _q2 set[0, (_q1 select 0)]; - _q2 set[1, (_q1 select 1) * (_u select 2) / _d + (_q1 select 2) * (_u select 1) / _d]; - _q2 set[2, - (_q1 select 1) * (_u select 1) / _d + (_q1 select 2) * (_u select 2) / _d]; -} else { - _q2 = _q1; -}; - -/* Inverse of step 1 */ -_q1 set[0, (_q2 select 0) + (_p1 select 0)]; -_q1 set[1, (_q2 select 1) + (_p1 select 1)]; -_q1 set[2, (_q2 select 2) + (_p1 select 2)]; +#include "script_component.hpp" + +_map = _this select 0; +_theta = _this select 1; + +_p = _map select 0; +_p1 = _map select 1; +_p2 = _map select 2; + +_q1 = +(_map select 3); +_q2 = +(_map select 4); +_u = _map select 5; +_d = _map select 6; + +/* Step 4 */ +_q2 set[0, (_q1 select 0) * cos(_theta) - (_q1 select 1) * sin(_theta)]; +_q2 set[1, (_q1 select 0) * sin(_theta) + (_q1 select 1) * cos(_theta)]; +_q2 set[2, (_q1 select 2)]; + +/* Inverse of step 3 */ +_q1 set[0, (_q2 select 0) * _d + (_q2 select 2) * (_u select 0)]; +_q1 set[1, (_q2 select 1)]; +_q1 set[2, - (_q2 select 0) * (_u select 0) + (_q2 select 2) * _d]; + +/* Inverse of step 2 */ +if (_d != 0) then { + _q2 set[0, (_q1 select 0)]; + _q2 set[1, (_q1 select 1) * (_u select 2) / _d + (_q1 select 2) * (_u select 1) / _d]; + _q2 set[2, - (_q1 select 1) * (_u select 1) / _d + (_q1 select 2) * (_u select 2) / _d]; +} else { + _q2 = _q1; +}; + +/* Inverse of step 1 */ +_q1 set[0, (_q2 select 0) + (_p1 select 0)]; +_q1 set[1, (_q2 select 1) + (_p1 select 1)]; +_q1 set[2, (_q2 select 2) + (_p1 select 2)]; _q1; \ No newline at end of file diff --git a/addons/missileguidance/functions/fnc_rotateVectLineGetMap.sqf b/addons/missileguidance/functions/fnc_rotateVectLineGetMap.sqf index fdbd6533ef..258cc93ae2 100644 --- a/addons/missileguidance/functions/fnc_rotateVectLineGetMap.sqf +++ b/addons/missileguidance/functions/fnc_rotateVectLineGetMap.sqf @@ -1,37 +1,37 @@ -#include "script_component.hpp" - -private ["_p", "_theta", "_p1", "_p2", "_q1", "_q2", "_u", "_d"]; -_p = _this select 0; -_p1 = _this select 1; -_p2 = _this select 2; - -_q1 = []; -_q2 = []; -_u = []; - -/* Step 1 */ -_q1 set[0, (_p select 0) - (_p1 select 0)]; -_q1 set[1, (_p select 1) - (_p1 select 1)]; -_q1 set[2, (_p select 2) - (_p1 select 2)]; - -_u set[0, (_p2 select 0) - (_p1 select 0)]; -_u set[1, (_p2 select 1) - (_p1 select 1)]; -_u set[2, (_p2 select 2) - (_p1 select 2)]; -_u = _u call BIS_fnc_unitVector; -_d = sqrt((_u select 1)*(_u select 1) + (_u select 2)*(_u select 2)); - -/* Step 2 */ -if (_d != 0) then { - _q2 set[0, (_q1 select 0)]; - _q2 set[1, (_q1 select 1) * (_u select 2) / _d - (_q1 select 2) * (_u select 1) / _d]; - _q2 set[2, (_q1 select 1) * (_u select 1) / _d + (_q1 select 2) * (_u select 2) / _d]; -} else { - _q2 = _q1; -}; - -/* Step 3 */ -_q1 set[0, (_q2 select 0) * _d - (_q2 select 2) * (_u select 0)]; -_q1 set[1, (_q2 select 1)]; -_q1 set[2, (_q2 select 0) * (_u select 0) + (_q2 select 2) * _d]; - +#include "script_component.hpp" + +private ["_p", "_theta", "_p1", "_p2", "_q1", "_q2", "_u", "_d"]; +_p = _this select 0; +_p1 = _this select 1; +_p2 = _this select 2; + +_q1 = []; +_q2 = []; +_u = []; + +/* Step 1 */ +_q1 set[0, (_p select 0) - (_p1 select 0)]; +_q1 set[1, (_p select 1) - (_p1 select 1)]; +_q1 set[2, (_p select 2) - (_p1 select 2)]; + +_u set[0, (_p2 select 0) - (_p1 select 0)]; +_u set[1, (_p2 select 1) - (_p1 select 1)]; +_u set[2, (_p2 select 2) - (_p1 select 2)]; +_u = _u call BIS_fnc_unitVector; +_d = sqrt((_u select 1)*(_u select 1) + (_u select 2)*(_u select 2)); + +/* Step 2 */ +if (_d != 0) then { + _q2 set[0, (_q1 select 0)]; + _q2 set[1, (_q1 select 1) * (_u select 2) / _d - (_q1 select 2) * (_u select 1) / _d]; + _q2 set[2, (_q1 select 1) * (_u select 1) / _d + (_q1 select 2) * (_u select 2) / _d]; +} else { + _q2 = _q1; +}; + +/* Step 3 */ +_q1 set[0, (_q2 select 0) * _d - (_q2 select 2) * (_u select 0)]; +_q1 set[1, (_q2 select 1)]; +_q1 set[2, (_q2 select 0) * (_u select 0) + (_q2 select 2) * _d]; + [_p, _p1, _p2, _q1, _q2, _u, _d] \ No newline at end of file diff --git a/addons/missileguidance/functions/fnc_translateToModelSpace.sqf b/addons/missileguidance/functions/fnc_translateToModelSpace.sqf index 1e2e930ac7..e54744bdb8 100644 --- a/addons/missileguidance/functions/fnc_translateToModelSpace.sqf +++ b/addons/missileguidance/functions/fnc_translateToModelSpace.sqf @@ -1,16 +1,16 @@ -_object = _this select 0; -_origin = getPosASL _object; -_matrix = _this select 1; -_xVec = _matrix select 0; -_yVec = _matrix select 1; -_zVec = _matrix select 2; - -_offset = _this select 2; - -_x = _offset select 0; -_y = _offset select 1; -_z = _offset select 2; - -_out = (((_xVec vectorMultiply _x) vectorAdd (_yVec vectorMultiply _y)) vectorAdd (_zVec vectorMultiply _z)) vectorAdd _origin; - +_object = _this select 0; +_origin = getPosASL _object; +_matrix = _this select 1; +_xVec = _matrix select 0; +_yVec = _matrix select 1; +_zVec = _matrix select 2; + +_offset = _this select 2; + +_x = _offset select 0; +_y = _offset select 1; +_z = _offset select 2; + +_out = (((_xVec vectorMultiply _x) vectorAdd (_yVec vectorMultiply _y)) vectorAdd (_zVec vectorMultiply _z)) vectorAdd _origin; + _out; \ No newline at end of file diff --git a/addons/missileguidance/functions/fnc_translateToWeaponSpace.sqf b/addons/missileguidance/functions/fnc_translateToWeaponSpace.sqf index 2c7dc5e6da..7b146e7d42 100644 --- a/addons/missileguidance/functions/fnc_translateToWeaponSpace.sqf +++ b/addons/missileguidance/functions/fnc_translateToWeaponSpace.sqf @@ -1,22 +1,22 @@ -_object = _this select 0; -_origin = getPosASL _object; -_matrix = _this select 1; -_xVec = _matrix select 0; -_yVec = _matrix select 1; -_zVec = _matrix select 2; - -_offset = _this select 2; - -_offset = _offset vectorDiff _origin; - -_x = _offset select 0; -_y = _offset select 1; -_z = _offset select 2; - -_out = [ - ((_xVec select 0)*_x) + ((_xVec select 1)*_y) + ((_xVec select 2)*_z), - ((_yVec select 0)*_x) + ((_yVec select 1)*_y) + ((_yVec select 2)*_z), - ((_zVec select 0)*_x) + ((_zVec select 1)*_y) + ((_zVec select 2)*_z) - ]; - +_object = _this select 0; +_origin = getPosASL _object; +_matrix = _this select 1; +_xVec = _matrix select 0; +_yVec = _matrix select 1; +_zVec = _matrix select 2; + +_offset = _this select 2; + +_offset = _offset vectorDiff _origin; + +_x = _offset select 0; +_y = _offset select 1; +_z = _offset select 2; + +_out = [ + ((_xVec select 0)*_x) + ((_xVec select 1)*_y) + ((_xVec select 2)*_z), + ((_yVec select 0)*_x) + ((_yVec select 1)*_y) + ((_yVec select 2)*_z), + ((_zVec select 0)*_x) + ((_zVec select 1)*_y) + ((_zVec select 2)*_z) + ]; + _out; \ No newline at end of file diff --git a/addons/missileguidance/script_component.hpp b/addons/missileguidance/script_component.hpp index 377469cdee..14275333b3 100644 --- a/addons/missileguidance/script_component.hpp +++ b/addons/missileguidance/script_component.hpp @@ -1,14 +1,14 @@ -#define COMPONENT missileguidance -#include "\z\ace\Addons\main\script_mod.hpp" - -#ifdef DEBUG_ENABLED_MISSILEGUIDANCE - #define DEBUG_MODE_FULL -#endif - -#ifdef DEBUG_SETTINGS_MISSILEGUIDANCE - #define DEBUG_SETTINGS DEBUG_SETTINGS_MISSILEGUIDANCE -#endif - -#include "\z\ace\Addons\main\script_macros.hpp" - +#define COMPONENT missileguidance +#include "\z\ace\Addons\main\script_mod.hpp" + +#ifdef DEBUG_ENABLED_MISSILEGUIDANCE + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_MISSILEGUIDANCE + #define DEBUG_SETTINGS DEBUG_SETTINGS_MISSILEGUIDANCE +#endif + +#include "\z\ace\Addons\main\script_macros.hpp" + #define FIREMODE_DIRECT_LOAL 1 \ No newline at end of file diff --git a/addons/nametags/stringtable.xml b/addons/nametags/stringtable.xml index 622df44aca..7ee626a2fe 100644 --- a/addons/nametags/stringtable.xml +++ b/addons/nametags/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -68,14 +68,17 @@ Show name tags for AI units + Показывать именые метки ИИ Show SoundWaves (requires player names) Zeigen Schallwelle (benötigt spielernamen) Mostrar onda sonora (requiere Mostrar nombres de jugadores) + Показывать звуковые волны (требует имен игроков) Default Nametag Color (Non Group Members) + Цвет меткок игроков (не членов групп) \ No newline at end of file diff --git a/addons/optionsmenu/stringtable.xml b/addons/optionsmenu/stringtable.xml index 76407da435..020a848f79 100644 --- a/addons/optionsmenu/stringtable.xml +++ b/addons/optionsmenu/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -16,15 +16,17 @@ Fix Animation + Фикс анимации Reset All Rücksetzen + Полный сброс Colors Farben - цвета + Цвета Colors @@ -41,6 +43,7 @@ Values + Значения Yes @@ -70,38 +73,48 @@ Setting: Nastavení: Einstellung: - Yстановки: + Установки: Ajuste: Export + Экспорт Open Export Menu + Открыть меню экспорта String input. + Строчный ввод. Array. Seperate elements by using ,. + Массив. Разделяйте элемены, используя запятую. Number + Число Uknown input type + Неизвестный тип ввода Save input + Сохранить ввод Include Client Settings + Включить настройки клиента Exclude Client Settings + Исключить настройки клиента Settings exported to clipboard + Настройки экспортированы в буфер обмена \ No newline at end of file diff --git a/addons/overheating/stringtable.xml b/addons/overheating/stringtable.xml index 5d2c9595df..d394406181 100644 --- a/addons/overheating/stringtable.xml +++ b/addons/overheating/stringtable.xml @@ -1,12 +1,14 @@  - + Display text on jam + Показывать текст, когда клинит оружие Display a notification whenever your weapon gets jammed + Демонстрирует уведомление, каждый раз, когда клинит Ваше оружие. Spare barrel diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index 9ccd7752d2..29fb5a736b 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -1,1310 +1,1302 @@  - + - - - XM312 - XM312 - XM312 - XM312 - XM312 - XM312 - XM312 - XM312 - XM312 - XM312A - - - XM312A - XM312A - XM312 - XM312A - XM312A - XM312A - XM312A - XM312A - XM312A - XM312A - - - XM312 (High) - XM312 (Hoch) - XM312 (Alto) - XM312 (Haut) - XM312 (Vysoký) - XM312 (Wysoki) - XM312 (Высокий) - XM312 (Alta) - XM312 (Magasított) - XM312 (Alta) - - - XM307 - XM307 - XM307 - XM307 - XM307 - XM307 - XM307 - XM307 - XM307 - XM307 - - - XM307A - XM307A - XM307A - XM307A - XM307A - XM307A - XM307A - XM307A - XM307A - XM307A - - - XM307 (High) - XM307 (Hoch) - XM307 (Alto) - XM307 (Haut) - XM307 (Vysoký) - XM307 (Wysoki) - XM307 (Высокий) - XM307 (Alta) - XM307 (Magasított) - XM307 (Alta) - - - Mini-Spike Launcher (AT) - Mini-Spike Lenkflugkörper (AT) - Lanzador Mini-Spike (AT) - Poste de tir Mini-Spike (AC) - Mini-Spike Odpalovač (AT) - Wyrzutnia Mini-Spike (AT) - Mini-Spike Пусковое устройство (ПТРК) - Lança-mísseis Mini-Spike (AC) - Mini-Spike rakétarendszer (páncéltörő) - Lanciatore Mini-Spike (AC) - - - Mini-Spike Launcher (AA) - Mini-Spike Lenkflugkörper (AA) - Lanzador Mini-Spike (AA) - Poste de tir Mini-Spike (AA) - Mini-Spike Odpalovač (AA) - Wyrzutnia Mini-Spike (AA) - Mini-Spike Пусковое устройство (ВВ) - Lança-mísseis Mini-Spike (AA) - Mini-Spike rakétarendszer (légvédelmi) - Lanciatore Mini-Spike (AA) - - - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - - - YABHON-R3 (CAS) - YABHON-R3 (Luftnahunterstützung) - YABHON-R3 (CAS) - YABHON-R3 (CAS) - YABHON-R3 (CAS) - YABHON-R3 (штурмовик) - - - M-ATV - M-ATV - M-ATV - M-ATV - M-ATV - M-ATV - M-ATV - M-ATV - M-ATV - M-ATV - - - M-ATV (HMG) - M-ATV (SMG) - M-ATV (HMG) - M-ATV (CKM) - M-ATV (TK) - M-ATV (HMG) - M-ATV (Пулемет) - M-ATV (HMG) - M-ATV (HMG) - M-ATV (HMG) - - - M-ATV (GMG) - M-ATV (GMW) - M-ATV (GMG) - M-ATV (GMG) - M-ATV (Granátomet) - M-ATV (GMG) - M-ATV (Гранатомет) - M-ATV (GMG) - M-ATV (GMG) - M-ATV (GMG) - - - Merkava Mk IV M - Merkava Mk IV M - Merkava Mk IV M - Merkawa Mk IV M - Merkava Mk IV M - Merkava Mk IV M - Меркава Mk IV M - Merkava Mk IV M - Merkava Mk IV M - Merkava Mk IV M - - - Merkava Mk IV LIC - Merkava Mk IV LIC - Merkava Mk IV LIC - Merkawa Mk IV LIC - Merkava Mk IV LIC - Merkava Mk IV LIC - Меркава Mk IV LIC - Merkava Mk IV LIC - Merkava Mk IV LIC - Merkava Mk IV LIC - - - Sholef - Sholef - Sholef - Sholef - Sholef - Sholef - Шолеф - Sholef - Sholef - Sholef - - - Seara - Seara - Seara - Seara - Seara - Seara - Seara - Seara - Seara - Seara - - - Namer - Namer - Namer - Namer - Namer - Namer - Намер - Namer - Namer - Namer - - - Bardelas - Bardelas - Bardelas - Bardelas - Bardelas - Bardelas - Bardelas - Bardelas - Bardelas - Bardelas - - - Patria AMV - Patria AMV - Patria AMV - Patria AMV - Patria AMV - Patria AMV - Patria AMV - Patria AMV - Patria AMV - Patria AMV - - - Nemmera - Nemmera - Nemmera - Nemmera - Nemmera - Nemmera - Nemmera - Nemmera - Nemmera - Nemmera - - - HEMTT Transport - HEMTT Transport - HEMTT de transporte - HEMTT Transportowy - HEMTT Valník - HEMTT Transport - HEMTT Транспортный - HEMTT Transporte - HEMTT szállítójármű - HEMTT da trasporto - - - HEMTT Transport (covered) - HEMTT Transport (bedeckt) - HEMTT de transporte (cubierto) - HEMTT Transportowy (zakryty) - HEMTT Valník (krytý) - HEMTT Transport (bâché) - HEMTT Транспортный (крытый) - HEMTT Transporte (coberto) - HEMTT szállítójármű (ponyvás) - HEMTT da trasporto (coperto) - - - HEMTT - HEMTT - HEMTT - HEMTT - HEMTT - HEMTT Tracteur - HEMTT - HEMTT - HEMTT - HEMTT - - - HEMTT Container - HEMTT Container - HEMTT de contenedor - HEMTT Kontener - HEMTT Skříňový - HEMTT Conteneur - HEMTT Контейнер - HEMTT Contêiner - HEMTT Konténer - HEMTT portacontainer - - - HEMTT Medical - HEMTT Sanitäter - HEMTT médico - HEMTT Medyczny - HEMTT Zdravotnický - HEMTT Sanitaire - HEMTT Медицинский - HEMTT Médico - HEMTT (egészségügyi) - HEMTT Medico - - - HEMTT Ammo - HEMTT Munition - HEMTT de munición - HEMTT Amunicyjny - HEMTT Muniční - HEMTT Munitions - HEMTT Боеприпасы - HEMTT Munições - HEMTT (lőszerszállító) - HEMTT di rifornimento munizioni - - - HEMTT Fuel - HEMTT Treibstoff - HEMTT de combustible - HEMTT Cysterna - HEMTT Cisterna - HEMTT Citerne - HEMTT Заправщик - HEMTT Combustível - HEMTT (üzemanyag-szállító) - HEMTT di rifornimento carburante - - - HEMTT Repair - HEMTT Instandsetzung - HEMTT de reparación - HEMTT Naprawczy - HEMTT Opravárenský - HEMTT Réparation - HEMTT Ремонтный - HEMTT Reparador - HEMTT (szerelő-jármű) - HEMTT Riparatore - - - Fennek - Fennek - Fennek - Fennek - Fennek - Fennek - Феннек - Fennek - Fennek - Fennek - - - Fennek (HMG) - Fennek (SMG) - Fennek (HMG) - Fennek (CKM) - Fennek (TK) - Fennek (HMG) - Феннек (Пулемет) - Fennek (HMG) - Fennek (HMG) - Fennek (HMG) - - - Fennek (GMG) - Fennek (GMW) - Fennek (GMG) - Fennek (GMG) - Fennek (granátomet) - Fennek (GMG) - Феннек (Гранатомет) - Fennek (GMG) - Fennek (GMG) - Fennek (GMG) - - - Leopard 2SG - Leopard 2SG - Leopard 2SG - Leopard 2SG - Leopard 2SG - Leopard 2SG - Леопард 2SG - Leopard 2SG - Leopard 2SG - Leopard 2SG - - - FV510 Warrior - FV510 Warrior - FV510 Warrior - FV510 Warrior - FV510 Warrior - FV510 Warrior - FV510 Уорриор - FV510 Warrior - FV510 Warrior - FV510 Warrior - - - Pandur II - Pandur II - Pandur II - Pandur II - Pandur II - Pandur II - Pandur II - Pandur II - Pandur II - Pandur II - - - KamAZ Transport - KamAZ Transport - KamAZ de transporte - KamAZ transportowy - KAMAZ Valník - KamAZ Transport - КамАЗ Траспортный - KamAZ Transporte - KamAZ szállítójármű - KamAZ da trasporto - - - KamAZ Transport (covered) - KamAZ Transport (bedeckt) - KamAZ de transporte (cubierto) - KamAZ Transportowy (zakryty) - KAMAZ Valník (krytý) - KamAZ Transport (bâché) - КамАЗ Траспортный (Крытый) - KamAZ Transporte (coberto) - KamAZ szállítójármű (ponyvás) - KamAZ da trasporto (coperto) - - - KamAZ Ammo - KamAZ Munition - KamAZ de munición - KamAZ Amunicyjny - KAMAZ Muniční - KamAZ Munitions - КамАЗ Боеприпасы - KamAZ Munições - KamAZ (lőszerszállító) - KamAZ di rifornimento munizioni - - - KamAZ Fuel - KamAZ Treibstoff - KamAZ de combustible - KamAZ cysterna - KAMAZ Cisterna - KamAZ Citerne - КамАЗ Заправщик - KamAZ Combustível - KamAZ (üzemanyag-szállító) - KamAZ di rifornimento carburante - - - KamAZ Repair - KamAZ Instandsetzung - KamAZ de reparación - KamAZ Naprawczy - KAMAZ Opravárenský - KamAZ Réparation - КамАЗ Ремонтный - KamAZ Reparador - KamAZ (szerelő-jármű) - KamAZ riparatore - - - KamAZ Medical - KamAZ Sanitäter - KamAZ médico - KamAZ Medyczny - KAMAZ Zdravotnický - KamAZ Sanitaire - КамАЗ Медицинский - KamAZ Médico - KamAZ (egészségügyi) - KamAZ Medico - - - Punisher - Punisher - Punisher - Punisher - Punisher - Punisher - Kаратель - Punisher - Punisher - Punisher - - - Punisher (HMG) - Punisher (SMG) - Punisher (HMG) - Punisher (CKM) - Punisher (TK) - Punisher (HMG) - Kаратель (Пулемет) - Punisher (HMG) - Punisher (HMG) - Punisher (HMG) - - - Punisher (GMG) - Punisher (GMW) - Punisher (GMG) - Punisher (CKM) - Punisher (granátomet) - Punisher (GMG) - Kаратель (Гранатомет) - Punisher (GMG) - Punisher (GMG) - Punisher (GMG) - - - T100 Black Eagle - T100 Black Eagle - T100 Black Eagle - T100 Black Eagle - T100 Black Eagle - T100 Black Eagle - T100 Черный Орел - T100 Black Eagle - T100 Black Eagle - T100 Black Eagle - - - 2S9 Sochor - 2S9 Sochor - 2S9 Sochor - 259 Sochor - 2S9 Sochor - 2S9 Sochor - 2S9 Сокор - 2S9 Sochor - 2S9 Sochor - 2S9 Sochor - - - BM-2T Stalker - BM-2T Stalker - BM-2T Stalker - BM-2T Stalker - BM-2T Stalker - BM-2T Stalker - БМ-2Т Сталкер - BM-2T Stalker - BM-2T Stalker - BM-2T Stalker - - - ZSU-35 Tigris - ZSU-35 Tigris - ZSU-35 Tigris - ZSU-35 Tigris - ZSU-35 Tigris - ZSU-35 Tigris - ЗСУ-35 Tigris - ZSU-35 Tigris - ZSU-35 Tigris - ZSU-35 Tigris - - - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - - - Typhoon Transport - Typhoon Transport - Typhoon de transporte - Typhoon Transportowy - Typhoon Valník - Typhoon Transport - Тайфун Транспортный - Typhoon Transporte - Typhoon szállítójármű - Typhoon da trasporto - - - Typhoon Transport (covered) - Typhoon Transport (bedeckt) - Typhoon de transporte (cubierto) - Typhoon Transportowy (przykryty) - Typhoon Valník (krytý) - Typhoon Transport (bâché) - Тайфун Транспортный (kрытый) - Typhoon Transporte (coberto) - Typhoon szállítójármű (ponyvás) - Typhoon da trasporto (coperto) - - - Typhoon Device - Typhoon Gerät - Typhoon de dispositivo - Typhoon Urządzenie - Typhoon Zařízení - Typhoon Dispositif - Тайфун Устройство - Typhoon Dispositivo - Typhoon (szerkezet) - Typhoon per dispositivo - - - Typhoon Ammo - Typhoon Munition - Typhoon de munición - Typhoon Amunicyjny - Typhoon Muniční - Typhoon Munitions - Тайфун Боеприпасы - Typhoon Munições - Typhoon (lőszerszállító) - Typhoon di rifornimento munizioni - - - Typhoon Fuel - Typhoon Treibstoff - Typhoon de combustible - Typhoon Cysterna - Typhoon Cisterna - Typhoon Citerne - Тайфун Заправщик - Typhoon Combustível - Typhoon (üzemanyag-szállító) - Typhoon di rifornimento carburante - - - Typhoon Repair - Typhoon Instandsetzung - Typhoon de reparación - Typhoon Naprawczy - Typhoon Opravárenský - Typhoon Réparation - Тайфун Ремонтный - Typhoon Reparador - Typhoon (szerelő-jármű) - Typhoon riparatore - - - Typhoon Medical - Typhoon Sanitäter - Typhoon médico - Typhoon Medyczny - Typhoon Zdravotnický - Typhoon Sanitaire - Тайфун Медицинский - Typhoon Médico - Typhoon (egészségügyi) - Typhoon medico - - - RAH-66 Comanche - RAH-66 Comanche - RAH-66 Comanche - RAH-66 Comanche - RAH-66 Comanche - RAH-66 Commanche - RAH-66 Команч - RAH-66 Comanche - RAH-66 Comanche - RAH-66 Comanche - - - MH-6 Little Bird - MH-6 Little Bird - MH-6 Litte Bird - MH-6 Little Bird - MH-6 Little Bird - MH-6 Little Bird - MH-6 Little Bird - MH-6 Little Bird - MH-6 Little Bird - MH-6 Little Bird - - - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - - - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - - - CH-47I Chinook (unarmed) - CH-47I Chinook (unbewaffnet) - CH-47I Chinnok (Desarmado) - CH-47I Chinook (nieuzbrojony) - CH-47I Chinook (невооруженный) - CH-47I Chinook (Neozbrojený) - - - A-10D Thunderbolt II - A-10D Thunderbolt II - A-10D Thunderbolt II - A-10D Thunderbolt II - A-10D Thunderbolt II - A-10D Thunderbolt II - A-10D Тандерболт II - A-10D Thunderbolt II - A-10D Thunderbolt II - A-10D Thunderbolt II - - - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - - - AW159 Wildcat (unarmed) - AW159 Wildcat (unbewaffnet) - AW159 Wildcat (desarmado) - AW159 Wildcat (nieuzbrojony) - AW159 Wildcat (neozbrojený) - AW159 Wildcat (non-armé) - AW159 Wildcat (невооруженный) - AW159 Wildcat (desarmado) - AW159 Wildcat (fegyvertelen) - AW159 Wildcat (disarmato) - - - AW101 Merlin - AW101 Merlin - AW101 Merlin - AW101 Merlin - AW101 Merlin - AW101 Merlin - AW101 Мерлин - AW101 Merlin - AW101 Merlin - AW101 Merlin - - - L-159 ALCA (CAS) - L-159 ALCA (CAS) - L-159 ALCA (CAS) - L-159 ALCA (CAS) - L-159 ALCA (CAS) - L-159 ALCA (CAS) - L-159 Альбатрос (CAS) - L-159 ALCA (CAS) - L-159 ALCA (CAS) - L-159 ALCA (CAS) - - - L-159 ALCA (AA) - L-159 ALCA (AA) - L-159 ALCA (AA) - L-159 ALCA (AA) - L-159 ALCA (AA) - L-159 ALCA (AA) - L-159 Альбатрос (AA) - L-159 ALCA (ВВ) - L-159 ALCA (AA) - L-159 ALCA (AA) - - - Ka-60 Kasatka - Ka-60 Kasatka - Ka-60 Kasatka - Ka-60 Kasatka - Ka-60 Kasatka - Ka-60 Kasatka - Ka-60 Касатка - Ka-60 Kasatka - Ka-60 Kasatka - Ka-60 Kasatka - - - Ka-60 Kasatka (unarmed) - Ka-60 Kasatka (unbewaffnet) - Ka-60 Kasatka (desarmado) - Ka-60 Kasatka (nieuzbrojony) - Ka-60 Kasatka (neozbrojená) - Ka-60 Kasatka (non-armé) - Ka-60 Касатка (невооруженный) - Ka-60 Kasatka (desarmado) - Ka-60 Kasatka (fegyvertelen) - Ka-60 Kasatka (disarmato) - - - Yak-130 - Yak-130 - Yak-130 - Jak-130 - Jak-130 - Yak-130 - Як-130 - Yak-130 - Jak-130 - Yak-130 - - - MD 500 - MD 500 - MD 500 - MD 500 - MD 500 - MD 500 - MD 500 - MD 500 - MD 500 - MD 500 - - - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - - - M18A1 Claymore - M18A1 Claymore - M18A1 Claymore - Mina kierunkowa M18A1 Claymore - M18A1 Mina Claymore - M18A1 Claymore Mine antipersonnel à effet dirigé - M18A1 Клеймор - M18A1 Claymore - M18A1 Claymore akna - M18A1 Claymore Mina antiuomo - - - M183 Demolition Charge Assembly - M183 Geballte Sprengladung - Conjunto de carga de demolición M183 - Ładunek burzący M183 - M183 Demoliční nálož - M183 Charge de Démolition - M183 Комплектный подрывной заряд - M183 Sacola de Demolição - M183 romboló töltet - M183 Demolition Charge Assembly - - - M112 Demolition Block - M112 Sprengladung - Bloque de demolición M112 - Ładunek burzący M112 - M112 Výbušná nálož - Pétard M112 - M112 подрывной заряд - M112 Carga de Demolição - M112 romboló töltet - M112 Demolition Block - - - M67 Fragmentation Grenade - M67 Splittergranate - Granada de fragmentación M67 - Granat obronny M67 - M67 Granát - M67 Grenade à fragmentation - M67 ручная осколочная граната - M67 Granada de fragmentação - M67 repeszgránát - M67 Granata a frammentazione - - - M83 Smoke Grenade (White) - M83 Rauchgranate (Weiss) - Granada de humo M83 (Blanco) - Granat dymny M83 (Biały) - M83 Kouřový Granát (Bílý) - M83 Grenade fumigène (Blanche) - M83 дымовой гранаты (Белый) - M83 Granada de fumaça (Branca) - M83 füstgránát (Fehér) - M83 Granata fumogena (Bianco) - - - M18 Smoke Grenade (Blue) - M18 Rauchgranate (Blau) - Granada de humo M18 (Azul) - Granat dymny M18 (Niebieski) - M18 Kouřový Granát (Modrý) - M18 Grenade fumigène (Bleue) - M18 дымовой гранаты (Синий) - M18 Granada de fumaça (Azul) - M18 füstgránát (Kék) - M18 Granata fumogena (Blu) - - - M18 Smoke Grenade (Green) - M18 Rauchgranate (Grün) - Granada de humo M18 (Verde) - Granat dymny M18 (Zielony) - M18 Kouřový Granát (Zelený) - M18 Grenade fumigène (Verte) - M18 дымовой гранаты (Зелёный) - M18 Granada de fumaça (Verde) - M18 füstgránát (Zöld) - M18 Granata fumogena (Verde) - - - M18 Smoke Grenade (Orange) - M18 Rauchgranate (Orange) - Granada de humo M18 (Naranja) - Granat dymny M18 (Pomarańczowy) - M18 Kouřový Granát (Oranžový) - M18 Grenade fumigène (Orange) - M18 дымовой гранаты (Оранжевый) - M18 Granada de fumaça (Laranja) - M18 füstgránát (Narancssárga) - M18 Granata fumogena (Arancione) - - - M18 Smoke Grenade (Purple) - M18 Rauchgranate (Violett) - Granada de humo M18 (Púrpura) - Granat dymny M18 (Fioletowy) - M18 Kouřový Granát (Fialový) - M18 Grenade fumigène (Pourpre) - M18 дымовой гранаты (Пурпурный) - M18 Granada de fumaça (Roxa) - M18 füstgránát (Lila) - M18 Granata fumogena (Viola) - - - M18 Smoke Grenade (Red) - M18 Rauchgranate (Rot) - Granada de humo M18 (Rojo) - Granat dymny M18 (Czerwony) - M18 Kouřový Granát (Červený) - M18 Grenade fumigène (Rouge) - M18 дымовой гранаты (Красный) - M18 Granada de fumaça (Vermelha) - M18 füstgránát (Piros) - M18 Granata fumogena (Rosso) - - - M18 Smoke Grenade (Yellow) - M18 Rauchgranate (Gelb) - Granada de humo M18 (Amarillo) - Granat dymny M18 (Żółty) - M18 Kouřový Granát (Žlutý) - M18 Grenade fumigène (Jaune) - M183 дымовой гранаты (Жёлтые) - M18 Granada de fumaça (Amarela) - M18 füstgránát (Sárga) - M18 Granata fumogena (Giallo) - - - M15 Anti-Tank Mine - M15 Panzerabwehrmine - Mina antitanque M15 - Mina przeciwpancerna M15 - M15 Protitanková Mina - M15 Mine antichar - M15 противотанковая мина - M15 Mina anticarro - M15 harckocsiakna - M15 Mine anticarro - - - VS-50 Anti-Personnel Mine - VS-50 Antipersonenmine - Mina antipersona VS-50 - Mina przeciwpiechotna VS-50 - VS-50 Protipěchotní Mina - VS-50 Mine antipersonnel à pression - VS-50 Противопехотная мина - VS-50 Mina antipessoal - VS-50 gyalogsági taposóakna - VS-50 Mine antiuomo - - - M26 Anti-Personnel Bounding Mine - M26 Antipersonensprungmine - Mina antipersona M26 - Mina przeciwpiechotna M26 - M26 Šrapnelová Mina - M26 Mine antipersonnel bondissante - M26 Противопехотная мина - M26 Mina saltadora antipessoal - M26 gyalogsági ugróakna - M26 Mine saltanti antiuomo - - - PMR-3 Anti-Personnel Tripwire Mine - PMR-3 Antipersonenstolperdrahtmine - Mina antipersona de alambre PMR-3 - Mina przeciwpiechotna PMR-3 - PMR-3 Nástražná Mina - PMR-3 Mine antipersonnel à traction - PMR-3 Противопехотная мина - PMR-3 Mina antipessoal (armadilha) - PMR-3 botlódrótos gyalogsági akna - PMR-3 Mine antiuomo - - - P99 - P99 - - - MP-443 Grach - MP-443 Grach - - - ACP-C2 - ACP-C2 - - - FNX-45 Tactical - FNX-45 Tactical - - - Chiappa Rhino 60DS - Chiappa Rhino 60DS - - - Taurus Judge - Taurus Judge - - - NLAW - NLAW - - - RPG-32 - RPG-32 - - - Mini-Spike (AA) - Mini-Spike (AA) - - - Mini-Spike (AT) - Mini-Spike (AT) - - - MX - MX - - - MX (Black) - MX (Black) - - - MXC - MXC - - - MXC (Black) - MXC (Black) - - - MX 3GL - MX 3GL - - - MX 3GL (Black) - MX 3GL (Black) - - - MX LSW - MX LSW - - - MX LSW (Black) - MX LSW (Black) - - - MXM - MXM - - - MXM (Black) - MXM (Black) - - - KT2002 Katiba - KT2002 Katiba - - - KT2002C Katiba - KT2002C Katiba - - - KT2002 Katiba KGL - KT2002 Katiba KGL - - - F2000 (Camo) - F2000 (Camo) - - - F2000 - F2000 - - - F2000 Tactical (Camo) - F2000 Tactical (Camo) - - - F2000 Tactical - F2000 Tactical - - - F2000 EGLM (Camo) - F2000 EGLM (Camo) - - - F2000 EGLM - F2000 EGLM - - - TAR-21 - TAR-21 - - - CTAR-21 - CTAR-21 - - - TAR-21 EGLM - TAR-21 EGLM - - - Vector SMG - Vector SMG - - - Scorpion Evo 3 A1 - Scorpion Evo 3 A1 - - - CPW - CPW - - - RFB SDAR - RFB SDAR - - - Stoner 99 LMG - Stoner 99 LMG - - - Negev NG7 - Negev NG7 - - - Mk14 Mod 1 EBR - Mk14 Mod 1 EBR - - - GM6 Lynx - GM6 Lynx - - - GM6 Lynx (Camo) - GM6 Lynx (Camo) - - - M200 Intervention - M200 Intervention - - - M200 Intervention (Camo) - M200 Intervention (Camo) - - - VS-121 - VS-121 - - - - TODO: MAR-10 .338 - - - TODO: MAR-10 .338 (Black) - - - TODO: MAR-10 .338 (Camo) - - - TODO: MAR-10 .338 (Sand) - - - - TODO: Mk-I EMR 7.62 mm - - - TODO: Mk-I EMR 7.62 mm (Black) - - - TODO: Mk-I EMR 7.62 mm (Khaki) - - - TODO: Mk-I EMR 7.62 mm (Sand) - - - TODO: Mk-I EMR 7.62 mm (Camo) - - - TODO: Mk-I EMR 7.62 mm (Woodland) - - - TODO: NATO DMR (provisional) spotter - - - - TODO: ASP-1 Kir 12.7 mm - - - TODO: ASP-1 Kir 12.7 mm (Black) - - - TODO: ASP-1 Kir 12.7 mm (Tan) - - - - TODO: Cyrus 9.3 mm - - - TODO: Cyrus 9.3 mm (Black) - - - TODO: Cyrus 9.3 mm (Hex) - - - TODO: Cyrus 9.3 mm (Tan) - - - - TODO: Mk14 7.62 mm - - - TODO: Mk14 7.62 mm (Camo) - - - TODO: Mk14 7.62 mm (Olive) - - - - TODO: Navid 9.3 mm - - - TODO: Navid 9.3 mm (Hex) - - - TODO: Navid 9.3 mm (Tan) - - - - TODO: SPMG .338 - - - TODO: SPMG .338 (MTP) - - - TODO: SPMG .338 (Black) - - - TODO: SPMG .338 (Sand) - - - - + + + XM312 + XM312 + XM312 + XM312 + XM312 + XM312 + XM312 + XM312 + XM312 + XM312A + + + XM312A + XM312A + XM312 + XM312A + XM312A + XM312A + XM312A + XM312A + XM312A + XM312A + + + XM312 (High) + XM312 (Hoch) + XM312 (Alto) + XM312 (Haut) + XM312 (Vysoký) + XM312 (Wysoki) + XM312 (Высокий) + XM312 (Alta) + XM312 (Magasított) + XM312 (Alta) + + + XM307 + XM307 + XM307 + XM307 + XM307 + XM307 + XM307 + XM307 + XM307 + XM307 + + + XM307A + XM307A + XM307A + XM307A + XM307A + XM307A + XM307A + XM307A + XM307A + XM307A + + + XM307 (High) + XM307 (Hoch) + XM307 (Alto) + XM307 (Haut) + XM307 (Vysoký) + XM307 (Wysoki) + XM307 (Высокий) + XM307 (Alta) + XM307 (Magasított) + XM307 (Alta) + + + Mini-Spike Launcher (AT) + Mini-Spike Lenkflugkörper (AT) + Lanzador Mini-Spike (AT) + Poste de tir Mini-Spike (AC) + Mini-Spike Odpalovač (AT) + Wyrzutnia Mini-Spike (AT) + Mini-Spike Пусковое устройство (ПТРК) + Lança-mísseis Mini-Spike (AC) + Mini-Spike rakétarendszer (páncéltörő) + Lanciatore Mini-Spike (AC) + + + Mini-Spike Launcher (AA) + Mini-Spike Lenkflugkörper (AA) + Lanzador Mini-Spike (AA) + Poste de tir Mini-Spike (AA) + Mini-Spike Odpalovač (AA) + Wyrzutnia Mini-Spike (AA) + Mini-Spike Пусковое устройство (ВВ) + Lança-mísseis Mini-Spike (AA) + Mini-Spike rakétarendszer (légvédelmi) + Lanciatore Mini-Spike (AA) + + + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + + + YABHON-R3 (CAS) + YABHON-R3 (Luftnahunterstützung) + YABHON-R3 (CAS) + YABHON-R3 (CAS) + YABHON-R3 (CAS) + YABHON-R3 (штурмовик) + + + M-ATV + M-ATV + M-ATV + M-ATV + M-ATV + M-ATV + M-ATV + M-ATV + M-ATV + M-ATV + + + M-ATV (HMG) + M-ATV (SMG) + M-ATV (HMG) + M-ATV (CKM) + M-ATV (TK) + M-ATV (HMG) + M-ATV (Пулемет) + M-ATV (HMG) + M-ATV (HMG) + M-ATV (HMG) + + + M-ATV (GMG) + M-ATV (GMW) + M-ATV (GMG) + M-ATV (GMG) + M-ATV (Granátomet) + M-ATV (GMG) + M-ATV (Гранатомет) + M-ATV (GMG) + M-ATV (GMG) + M-ATV (GMG) + + + Merkava Mk IV M + Merkava Mk IV M + Merkava Mk IV M + Merkawa Mk IV M + Merkava Mk IV M + Merkava Mk IV M + Меркава Mk IV M + Merkava Mk IV M + Merkava Mk IV M + Merkava Mk IV M + + + Merkava Mk IV LIC + Merkava Mk IV LIC + Merkava Mk IV LIC + Merkawa Mk IV LIC + Merkava Mk IV LIC + Merkava Mk IV LIC + Меркава Mk IV LIC + Merkava Mk IV LIC + Merkava Mk IV LIC + Merkava Mk IV LIC + + + Sholef + Sholef + Sholef + Sholef + Sholef + Sholef + Шолеф + Sholef + Sholef + Sholef + + + Seara + Seara + Seara + Seara + Seara + Seara + Seara + Seara + Seara + Seara + + + Namer + Namer + Namer + Namer + Namer + Namer + Намер + Namer + Namer + Namer + + + Bardelas + Bardelas + Bardelas + Bardelas + Bardelas + Bardelas + Bardelas + Bardelas + Bardelas + Bardelas + + + Patria AMV + Patria AMV + Patria AMV + Patria AMV + Patria AMV + Patria AMV + Patria AMV + Patria AMV + Patria AMV + Patria AMV + + + Nemmera + Nemmera + Nemmera + Nemmera + Nemmera + Nemmera + Nemmera + Nemmera + Nemmera + Nemmera + + + HEMTT Transport + HEMTT Transport + HEMTT de transporte + HEMTT Transportowy + HEMTT Valník + HEMTT Transport + HEMTT Транспортный + HEMTT Transporte + HEMTT szállítójármű + HEMTT da trasporto + + + HEMTT Transport (covered) + HEMTT Transport (bedeckt) + HEMTT de transporte (cubierto) + HEMTT Transportowy (zakryty) + HEMTT Valník (krytý) + HEMTT Transport (bâché) + HEMTT Транспортный (крытый) + HEMTT Transporte (coberto) + HEMTT szállítójármű (ponyvás) + HEMTT da trasporto (coperto) + + + HEMTT + HEMTT + HEMTT + HEMTT + HEMTT + HEMTT Tracteur + HEMTT + HEMTT + HEMTT + HEMTT + + + HEMTT Container + HEMTT Container + HEMTT de contenedor + HEMTT Kontener + HEMTT Skříňový + HEMTT Conteneur + HEMTT Контейнер + HEMTT Contêiner + HEMTT Konténer + HEMTT portacontainer + + + HEMTT Medical + HEMTT Sanitäter + HEMTT médico + HEMTT Medyczny + HEMTT Zdravotnický + HEMTT Sanitaire + HEMTT Медицинский + HEMTT Médico + HEMTT (egészségügyi) + HEMTT Medico + + + HEMTT Ammo + HEMTT Munition + HEMTT de munición + HEMTT Amunicyjny + HEMTT Muniční + HEMTT Munitions + HEMTT Боеприпасы + HEMTT Munições + HEMTT (lőszerszállító) + HEMTT di rifornimento munizioni + + + HEMTT Fuel + HEMTT Treibstoff + HEMTT de combustible + HEMTT Cysterna + HEMTT Cisterna + HEMTT Citerne + HEMTT Заправщик + HEMTT Combustível + HEMTT (üzemanyag-szállító) + HEMTT di rifornimento carburante + + + HEMTT Repair + HEMTT Instandsetzung + HEMTT de reparación + HEMTT Naprawczy + HEMTT Opravárenský + HEMTT Réparation + HEMTT Ремонтный + HEMTT Reparador + HEMTT (szerelő-jármű) + HEMTT Riparatore + + + Fennek + Fennek + Fennek + Fennek + Fennek + Fennek + Феннек + Fennek + Fennek + Fennek + + + Fennek (HMG) + Fennek (SMG) + Fennek (HMG) + Fennek (CKM) + Fennek (TK) + Fennek (HMG) + Феннек (Пулемет) + Fennek (HMG) + Fennek (HMG) + Fennek (HMG) + + + Fennek (GMG) + Fennek (GMW) + Fennek (GMG) + Fennek (GMG) + Fennek (granátomet) + Fennek (GMG) + Феннек (Гранатомет) + Fennek (GMG) + Fennek (GMG) + Fennek (GMG) + + + Leopard 2SG + Leopard 2SG + Leopard 2SG + Leopard 2SG + Leopard 2SG + Leopard 2SG + Леопард 2SG + Leopard 2SG + Leopard 2SG + Leopard 2SG + + + FV510 Warrior + FV510 Warrior + FV510 Warrior + FV510 Warrior + FV510 Warrior + FV510 Warrior + FV510 Уорриор + FV510 Warrior + FV510 Warrior + FV510 Warrior + + + Pandur II + Pandur II + Pandur II + Pandur II + Pandur II + Pandur II + Pandur II + Pandur II + Pandur II + Pandur II + + + KamAZ Transport + KamAZ Transport + KamAZ de transporte + KamAZ transportowy + KAMAZ Valník + KamAZ Transport + КамАЗ Траспортный + KamAZ Transporte + KamAZ szállítójármű + KamAZ da trasporto + + + KamAZ Transport (covered) + KamAZ Transport (bedeckt) + KamAZ de transporte (cubierto) + KamAZ Transportowy (zakryty) + KAMAZ Valník (krytý) + KamAZ Transport (bâché) + КамАЗ Траспортный (Крытый) + KamAZ Transporte (coberto) + KamAZ szállítójármű (ponyvás) + KamAZ da trasporto (coperto) + + + KamAZ Ammo + KamAZ Munition + KamAZ de munición + KamAZ Amunicyjny + KAMAZ Muniční + KamAZ Munitions + КамАЗ Боеприпасы + KamAZ Munições + KamAZ (lőszerszállító) + KamAZ di rifornimento munizioni + + + KamAZ Fuel + KamAZ Treibstoff + KamAZ de combustible + KamAZ cysterna + KAMAZ Cisterna + KamAZ Citerne + КамАЗ Заправщик + KamAZ Combustível + KamAZ (üzemanyag-szállító) + KamAZ di rifornimento carburante + + + KamAZ Repair + KamAZ Instandsetzung + KamAZ de reparación + KamAZ Naprawczy + KAMAZ Opravárenský + KamAZ Réparation + КамАЗ Ремонтный + KamAZ Reparador + KamAZ (szerelő-jármű) + KamAZ riparatore + + + KamAZ Medical + KamAZ Sanitäter + KamAZ médico + KamAZ Medyczny + KAMAZ Zdravotnický + KamAZ Sanitaire + КамАЗ Медицинский + KamAZ Médico + KamAZ (egészségügyi) + KamAZ Medico + + + Punisher + Punisher + Punisher + Punisher + Punisher + Punisher + Kаратель + Punisher + Punisher + Punisher + + + Punisher (HMG) + Punisher (SMG) + Punisher (HMG) + Punisher (CKM) + Punisher (TK) + Punisher (HMG) + Kаратель (Пулемет) + Punisher (HMG) + Punisher (HMG) + Punisher (HMG) + + + Punisher (GMG) + Punisher (GMW) + Punisher (GMG) + Punisher (CKM) + Punisher (granátomet) + Punisher (GMG) + Kаратель (Гранатомет) + Punisher (GMG) + Punisher (GMG) + Punisher (GMG) + + + T100 Black Eagle + T100 Black Eagle + T100 Black Eagle + T100 Black Eagle + T100 Black Eagle + T100 Black Eagle + T100 Черный Орел + T100 Black Eagle + T100 Black Eagle + T100 Black Eagle + + + 2S9 Sochor + 2S9 Sochor + 2S9 Sochor + 259 Sochor + 2S9 Sochor + 2S9 Sochor + 2S9 Сокор + 2S9 Sochor + 2S9 Sochor + 2S9 Sochor + + + BM-2T Stalker + BM-2T Stalker + BM-2T Stalker + BM-2T Stalker + BM-2T Stalker + BM-2T Stalker + БМ-2Т Сталкер + BM-2T Stalker + BM-2T Stalker + BM-2T Stalker + + + ZSU-35 Tigris + ZSU-35 Tigris + ZSU-35 Tigris + ZSU-35 Tigris + ZSU-35 Tigris + ZSU-35 Tigris + ЗСУ-35 Tigris + ZSU-35 Tigris + ZSU-35 Tigris + ZSU-35 Tigris + + + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + + + Typhoon Transport + Typhoon Transport + Typhoon de transporte + Typhoon Transportowy + Typhoon Valník + Typhoon Transport + Тайфун Транспортный + Typhoon Transporte + Typhoon szállítójármű + Typhoon da trasporto + + + Typhoon Transport (covered) + Typhoon Transport (bedeckt) + Typhoon de transporte (cubierto) + Typhoon Transportowy (przykryty) + Typhoon Valník (krytý) + Typhoon Transport (bâché) + Тайфун Транспортный (kрытый) + Typhoon Transporte (coberto) + Typhoon szállítójármű (ponyvás) + Typhoon da trasporto (coperto) + + + Typhoon Device + Typhoon Gerät + Typhoon de dispositivo + Typhoon Urządzenie + Typhoon Zařízení + Typhoon Dispositif + Тайфун Устройство + Typhoon Dispositivo + Typhoon (szerkezet) + Typhoon per dispositivo + + + Typhoon Ammo + Typhoon Munition + Typhoon de munición + Typhoon Amunicyjny + Typhoon Muniční + Typhoon Munitions + Тайфун Боеприпасы + Typhoon Munições + Typhoon (lőszerszállító) + Typhoon di rifornimento munizioni + + + Typhoon Fuel + Typhoon Treibstoff + Typhoon de combustible + Typhoon Cysterna + Typhoon Cisterna + Typhoon Citerne + Тайфун Заправщик + Typhoon Combustível + Typhoon (üzemanyag-szállító) + Typhoon di rifornimento carburante + + + Typhoon Repair + Typhoon Instandsetzung + Typhoon de reparación + Typhoon Naprawczy + Typhoon Opravárenský + Typhoon Réparation + Тайфун Ремонтный + Typhoon Reparador + Typhoon (szerelő-jármű) + Typhoon riparatore + + + Typhoon Medical + Typhoon Sanitäter + Typhoon médico + Typhoon Medyczny + Typhoon Zdravotnický + Typhoon Sanitaire + Тайфун Медицинский + Typhoon Médico + Typhoon (egészségügyi) + Typhoon medico + + + RAH-66 Comanche + RAH-66 Comanche + RAH-66 Comanche + RAH-66 Comanche + RAH-66 Comanche + RAH-66 Commanche + RAH-66 Команч + RAH-66 Comanche + RAH-66 Comanche + RAH-66 Comanche + + + MH-6 Little Bird + MH-6 Little Bird + MH-6 Litte Bird + MH-6 Little Bird + MH-6 Little Bird + MH-6 Little Bird + MH-6 Little Bird + MH-6 Little Bird + MH-6 Little Bird + MH-6 Little Bird + + + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + + + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + + + CH-47I Chinook (unarmed) + CH-47I Chinook (unbewaffnet) + CH-47I Chinnok (Desarmado) + CH-47I Chinook (nieuzbrojony) + CH-47I Chinook (невооруженный) + CH-47I Chinook (Neozbrojený) + + + A-10D Thunderbolt II + A-10D Thunderbolt II + A-10D Thunderbolt II + A-10D Thunderbolt II + A-10D Thunderbolt II + A-10D Thunderbolt II + A-10D Тандерболт II + A-10D Thunderbolt II + A-10D Thunderbolt II + A-10D Thunderbolt II + + + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + + + AW159 Wildcat (unarmed) + AW159 Wildcat (unbewaffnet) + AW159 Wildcat (desarmado) + AW159 Wildcat (nieuzbrojony) + AW159 Wildcat (neozbrojený) + AW159 Wildcat (non-armé) + AW159 Wildcat (невооруженный) + AW159 Wildcat (desarmado) + AW159 Wildcat (fegyvertelen) + AW159 Wildcat (disarmato) + + + AW101 Merlin + AW101 Merlin + AW101 Merlin + AW101 Merlin + AW101 Merlin + AW101 Merlin + AW101 Мерлин + AW101 Merlin + AW101 Merlin + AW101 Merlin + + + L-159 ALCA (CAS) + L-159 ALCA (CAS) + L-159 ALCA (CAS) + L-159 ALCA (CAS) + L-159 ALCA (CAS) + L-159 ALCA (CAS) + L-159 Альбатрос (CAS) + L-159 ALCA (CAS) + L-159 ALCA (CAS) + L-159 ALCA (CAS) + + + L-159 ALCA (AA) + L-159 ALCA (AA) + L-159 ALCA (AA) + L-159 ALCA (AA) + L-159 ALCA (AA) + L-159 ALCA (AA) + L-159 Альбатрос (AA) + L-159 ALCA (ВВ) + L-159 ALCA (AA) + L-159 ALCA (AA) + + + Ka-60 Kasatka + Ka-60 Kasatka + Ka-60 Kasatka + Ka-60 Kasatka + Ka-60 Kasatka + Ka-60 Kasatka + Ka-60 Касатка + Ka-60 Kasatka + Ka-60 Kasatka + Ka-60 Kasatka + + + Ka-60 Kasatka (unarmed) + Ka-60 Kasatka (unbewaffnet) + Ka-60 Kasatka (desarmado) + Ka-60 Kasatka (nieuzbrojony) + Ka-60 Kasatka (neozbrojená) + Ka-60 Kasatka (non-armé) + Ka-60 Касатка (невооруженный) + Ka-60 Kasatka (desarmado) + Ka-60 Kasatka (fegyvertelen) + Ka-60 Kasatka (disarmato) + + + Yak-130 + Yak-130 + Yak-130 + Jak-130 + Jak-130 + Yak-130 + Як-130 + Yak-130 + Jak-130 + Yak-130 + + + MD 500 + MD 500 + MD 500 + MD 500 + MD 500 + MD 500 + MD 500 + MD 500 + MD 500 + MD 500 + + + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + + + M18A1 Claymore + M18A1 Claymore + M18A1 Claymore + Mina kierunkowa M18A1 Claymore + M18A1 Mina Claymore + M18A1 Claymore Mine antipersonnel à effet dirigé + M18A1 Клеймор + M18A1 Claymore + M18A1 Claymore akna + M18A1 Claymore Mina antiuomo + + + M183 Demolition Charge Assembly + M183 Geballte Sprengladung + Conjunto de carga de demolición M183 + Ładunek burzący M183 + M183 Demoliční nálož + M183 Charge de Démolition + M183 Комплектный подрывной заряд + M183 Sacola de Demolição + M183 romboló töltet + M183 Demolition Charge Assembly + + + M112 Demolition Block + M112 Sprengladung + Bloque de demolición M112 + Ładunek burzący M112 + M112 Výbušná nálož + Pétard M112 + M112 подрывной заряд + M112 Carga de Demolição + M112 romboló töltet + M112 Demolition Block + + + M67 Fragmentation Grenade + M67 Splittergranate + Granada de fragmentación M67 + Granat obronny M67 + M67 Granát + M67 Grenade à fragmentation + M67 ручная осколочная граната + M67 Granada de fragmentação + M67 repeszgránát + M67 Granata a frammentazione + + + M83 Smoke Grenade (White) + M83 Rauchgranate (Weiss) + Granada de humo M83 (Blanco) + Granat dymny M83 (Biały) + M83 Kouřový Granát (Bílý) + M83 Grenade fumigène (Blanche) + M83 дымовая граната (Белый) + M83 Granada de fumaça (Branca) + M83 füstgránát (Fehér) + M83 Granata fumogena (Bianco) + + + M18 Smoke Grenade (Blue) + M18 Rauchgranate (Blau) + Granada de humo M18 (Azul) + Granat dymny M18 (Niebieski) + M18 Kouřový Granát (Modrý) + M18 Grenade fumigène (Bleue) + M18 дымовая граната (Синий) + M18 Granada de fumaça (Azul) + M18 füstgránát (Kék) + M18 Granata fumogena (Blu) + + + M18 Smoke Grenade (Green) + M18 Rauchgranate (Grün) + Granada de humo M18 (Verde) + Granat dymny M18 (Zielony) + M18 Kouřový Granát (Zelený) + M18 Grenade fumigène (Verte) + M18 дымовая граната (Зелёный) + M18 Granada de fumaça (Verde) + M18 füstgránát (Zöld) + M18 Granata fumogena (Verde) + + + M18 Smoke Grenade (Orange) + M18 Rauchgranate (Orange) + Granada de humo M18 (Naranja) + Granat dymny M18 (Pomarańczowy) + M18 Kouřový Granát (Oranžový) + M18 Grenade fumigène (Orange) + M18 дымовая граната (Оранжевый) + M18 Granada de fumaça (Laranja) + M18 füstgránát (Narancssárga) + M18 Granata fumogena (Arancione) + + + M18 Smoke Grenade (Purple) + M18 Rauchgranate (Violett) + Granada de humo M18 (Púrpura) + Granat dymny M18 (Fioletowy) + M18 Kouřový Granát (Fialový) + M18 Grenade fumigène (Pourpre) + M18 дымовая граната (Пурпурный) + M18 Granada de fumaça (Roxa) + M18 füstgránát (Lila) + M18 Granata fumogena (Viola) + + + M18 Smoke Grenade (Red) + M18 Rauchgranate (Rot) + Granada de humo M18 (Rojo) + Granat dymny M18 (Czerwony) + M18 Kouřový Granát (Červený) + M18 Grenade fumigène (Rouge) + M18 дымовая граната (Красный) + M18 Granada de fumaça (Vermelha) + M18 füstgránát (Piros) + M18 Granata fumogena (Rosso) + + + M18 Smoke Grenade (Yellow) + M18 Rauchgranate (Gelb) + Granada de humo M18 (Amarillo) + Granat dymny M18 (Żółty) + M18 Kouřový Granát (Žlutý) + M18 Grenade fumigène (Jaune) + M183 дымовая граната (Жёлтые) + M18 Granada de fumaça (Amarela) + M18 füstgránát (Sárga) + M18 Granata fumogena (Giallo) + + + M15 Anti-Tank Mine + M15 Panzerabwehrmine + Mina antitanque M15 + Mina przeciwpancerna M15 + M15 Protitanková Mina + M15 Mine antichar + M15 противотанковая мина + M15 Mina anticarro + M15 harckocsiakna + M15 Mine anticarro + + + VS-50 Anti-Personnel Mine + VS-50 Antipersonenmine + Mina antipersona VS-50 + Mina przeciwpiechotna VS-50 + VS-50 Protipěchotní Mina + VS-50 Mine antipersonnel à pression + VS-50 Противопехотная мина + VS-50 Mina antipessoal + VS-50 gyalogsági taposóakna + VS-50 Mine antiuomo + + + M26 Anti-Personnel Bounding Mine + M26 Antipersonensprungmine + Mina antipersona M26 + Mina przeciwpiechotna M26 + M26 Šrapnelová Mina + M26 Mine antipersonnel bondissante + M26 Противопехотная мина + M26 Mina saltadora antipessoal + M26 gyalogsági ugróakna + M26 Mine saltanti antiuomo + + + PMR-3 Anti-Personnel Tripwire Mine + PMR-3 Antipersonenstolperdrahtmine + Mina antipersona de alambre PMR-3 + Mina przeciwpiechotna PMR-3 + PMR-3 Nástražná Mina + PMR-3 Mine antipersonnel à traction + PMR-3 Противопехотная мина + PMR-3 Mina antipessoal (armadilha) + PMR-3 botlódrótos gyalogsági akna + PMR-3 Mine antiuomo + + + P99 + P99 + + + MP-443 Grach + MP-443 Grach + + + ACP-C2 + ACP-C2 + + + FNX-45 Tactical + FNX-45 Tactical + + + Chiappa Rhino 60DS + Chiappa Rhino 60DS + + + Taurus Judge + Taurus Judge + + + NLAW + NLAW + + + RPG-32 + RPG-32 + + + Mini-Spike (AA) + Mini-Spike (AA) + + + Mini-Spike (AT) + Mini-Spike (AT) + + + MX + MX + + + MX (Black) + MX (Black) + + + MXC + MXC + + + MXC (Black) + MXC (Black) + + + MX 3GL + MX 3GL + + + MX 3GL (Black) + MX 3GL (Black) + + + MX LSW + MX LSW + + + MX LSW (Black) + MX LSW (Black) + + + MXM + MXM + + + MXM (Black) + MXM (Black) + + + KT2002 Katiba + KT2002 Katiba + + + KT2002C Katiba + KT2002C Katiba + + + KT2002 Katiba KGL + KT2002 Katiba KGL + + + F2000 (Camo) + F2000 (Camo) + + + F2000 + F2000 + + + F2000 Tactical (Camo) + F2000 Tactical (Camo) + + + F2000 Tactical + F2000 Tactical + + + F2000 EGLM (Camo) + F2000 EGLM (Camo) + + + F2000 EGLM + F2000 EGLM + + + TAR-21 + TAR-21 + + + CTAR-21 + CTAR-21 + + + TAR-21 EGLM + TAR-21 EGLM + + + Vector SMG + Vector SMG + + + Scorpion Evo 3 A1 + Scorpion Evo 3 A1 + + + CPW + CPW + + + RFB SDAR + RFB SDAR + + + Stoner 99 LMG + Stoner 99 LMG + + + Negev NG7 + Negev NG7 + + + Mk14 Mod 1 EBR + Mk14 Mod 1 EBR + + + GM6 Lynx + GM6 Lynx + + + GM6 Lynx (Camo) + GM6 Lynx (Camo) + + + M200 Intervention + M200 Intervention + + + M200 Intervention (Camo) + M200 Intervention (Camo) + + + VS-121 + VS-121 + + + TODO: MAR-10 .338 + + + TODO: MAR-10 .338 (Black) + + + TODO: MAR-10 .338 (Camo) + + + TODO: MAR-10 .338 (Sand) + + + TODO: Mk-I EMR 7.62 mm + + + TODO: Mk-I EMR 7.62 mm (Black) + + + TODO: Mk-I EMR 7.62 mm (Khaki) + + + TODO: Mk-I EMR 7.62 mm (Sand) + + + TODO: Mk-I EMR 7.62 mm (Camo) + + + TODO: Mk-I EMR 7.62 mm (Woodland) + + + TODO: NATO DMR (provisional) spotter + + + TODO: ASP-1 Kir 12.7 mm + + + TODO: ASP-1 Kir 12.7 mm (Black) + + + TODO: ASP-1 Kir 12.7 mm (Tan) + + + TODO: Cyrus 9.3 mm + + + TODO: Cyrus 9.3 mm (Black) + + + TODO: Cyrus 9.3 mm (Hex) + + + TODO: Cyrus 9.3 mm (Tan) + + + TODO: Mk14 7.62 mm + + + TODO: Mk14 7.62 mm (Camo) + + + TODO: Mk14 7.62 mm (Olive) + + + TODO: Navid 9.3 mm + + + TODO: Navid 9.3 mm (Hex) + + + TODO: Navid 9.3 mm (Tan) + + + TODO: SPMG .338 + + + TODO: SPMG .338 (MTP) + + + TODO: SPMG .338 (Black) + + + TODO: SPMG .338 (Sand) + + + \ No newline at end of file diff --git a/addons/reload/stringtable.xml b/addons/reload/stringtable.xml index 40f36c6549..2aa5197e2f 100644 --- a/addons/reload/stringtable.xml +++ b/addons/reload/stringtable.xml @@ -1,12 +1,14 @@ - - + + Check ammo on weapon reload + Проверять боезапас при перезарядке Check the ammo in your new magazine on magazine reload. + Проверяет количество патронов в новом магазине при перезарядке. Check Ammo @@ -34,9 +36,11 @@ Link belt + Сцепить ленты Linking belt... + Сцепка лент ... - + \ No newline at end of file diff --git a/addons/reloadlaunchers/stringtable.xml b/addons/reloadlaunchers/stringtable.xml index 6677153419..664f594acd 100644 --- a/addons/reloadlaunchers/stringtable.xml +++ b/addons/reloadlaunchers/stringtable.xml @@ -1,24 +1,26 @@  - + - - - Load launcher - Panzerabwehr laden - - - Loading launcher ... - Panzerabwehr wird geladen ... - - - Launcher loaded - Panzerabwehr geladen - - - - Load %1 - Lade %1 - - - - + + + Load launcher + Panzerabwehr laden + Зарядить ПУ + + + Loading launcher ... + Panzerabwehr wird geladen ... + Зарядка ПУ ... + + + Launcher loaded + Panzerabwehr geladen + ПУ заряжено + + + Load %1 + Lade %1 + Загрузка %1 + + + \ No newline at end of file diff --git a/addons/respawn/stringtable.xml b/addons/respawn/stringtable.xml index 59a9b2b31c..0f1ae731f5 100644 --- a/addons/respawn/stringtable.xml +++ b/addons/respawn/stringtable.xml @@ -1,21 +1,26 @@  + Deploy in 5 seconds ... Wird in 5 Sekunden errichtet ... + Возрождение через 5 секунд ... Rallypoint deployed Rallypoint errichtet + Точка сбора установлена Teleported to Base Zur Basis teleportiert + Телепорт на базу Teleported to Rallypoint Zum Rallypoint teleportiert + Телепорт на точку сбора - + \ No newline at end of file diff --git a/addons/switchunits/stringtable.xml b/addons/switchunits/stringtable.xml index 842bf89127..81cde4b007 100644 --- a/addons/switchunits/stringtable.xml +++ b/addons/switchunits/stringtable.xml @@ -1,4 +1,5 @@  + @@ -12,10 +13,10 @@ This unit is too close to the enemy. Diese Einheit ist zu nah am Feind. - Юнит слишком близок к противнику + Юнит слишком близок к противнику. Tato jednotka je moc blízko k nepříteli. Ta jednostka jest zbyt blisko przeciwnika. Esta unidad está demasiado cerca del enemigo. - + \ No newline at end of file diff --git a/addons/weaponselect/stringtable.xml b/addons/weaponselect/stringtable.xml index 3a39d59396..0e7d881413 100644 --- a/addons/weaponselect/stringtable.xml +++ b/addons/weaponselect/stringtable.xml @@ -1,12 +1,14 @@  - + Display text on grenade throw + Показывать текст при броске Display a hint or text on grenade throw. + Показывать текст или подсказку при броске гранаты. Select Pistol @@ -226,7 +228,7 @@ Už nejsou žádné ostatní granáty Não há outras granadas restantes Nessun'altra granata rimanente. - Невзрывоопасные гранаты закончились + Летальные гранаты закончились No grenade selected diff --git a/addons/wep_javelin/CfgEventhandlers.hpp b/addons/wep_javelin/CfgEventhandlers.hpp index a61ea9c746..2ff046944b 100644 --- a/addons/wep_javelin/CfgEventhandlers.hpp +++ b/addons/wep_javelin/CfgEventhandlers.hpp @@ -1,18 +1,18 @@ -class Extended_PreInit_EventHandlers { - class ADDON { - init = QUOTE(call COMPILE_FILE(XEH_pre_init)); - }; -}; - -class Extended_PostInit_EventHandlers { - class ADDON { - init = QUOTE(call COMPILE_FILE(XEH_post_init)); - clientInit = QUOTE(call COMPILE_FILE(XEH_clientInit)); - }; -}; - -class Extended_FiredBIS_EventHandlers { - class CAManBase { - ADDON = QUOTE(_this call FUNC(fired)); - }; +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_pre_init)); + }; +}; + +class Extended_PostInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_post_init)); + clientInit = QUOTE(call COMPILE_FILE(XEH_clientInit)); + }; +}; + +class Extended_FiredBIS_EventHandlers { + class CAManBase { + ADDON = QUOTE(_this call FUNC(fired)); + }; }; \ No newline at end of file diff --git a/addons/wep_javelin/CfgSounds.hpp b/addons/wep_javelin/CfgSounds.hpp index a5002409ff..9cd2627fa2 100644 --- a/addons/wep_javelin/CfgSounds.hpp +++ b/addons/wep_javelin/CfgSounds.hpp @@ -1,13 +1,13 @@ - -class CfgSounds { - class ACE_Javelin_Locking { - name = "ACE_Javelin_Locking"; - sound[] = {PATHTOF(data\sounds\javelin_locking.ogg), db+0, 1.0}; - titles[] = {}; - }; - class ACE_Javelin_Locked { - name = "ACE_Javelin_Locked"; - sound[] = {PATHTOF(data\sounds\javelin_locked.ogg), db+0, 1.0}; - titles[] = {}; - }; -}; + +class CfgSounds { + class ACE_Javelin_Locking { + name = "ACE_Javelin_Locking"; + sound[] = {PATHTOF(data\sounds\javelin_locking.ogg), db+0, 1.0}; + titles[] = {}; + }; + class ACE_Javelin_Locked { + name = "ACE_Javelin_Locked"; + sound[] = {PATHTOF(data\sounds\javelin_locked.ogg), db+0, 1.0}; + titles[] = {}; + }; +}; diff --git a/addons/wep_javelin/RscInGameUI.hpp b/addons/wep_javelin/RscInGameUI.hpp index 811548a9d2..da33a13a7a 100644 --- a/addons/wep_javelin/RscInGameUI.hpp +++ b/addons/wep_javelin/RscInGameUI.hpp @@ -1,459 +1,459 @@ -class RscOpticsValue; -class RscControlsGroup; -class RscPicture; -class RscMapControl; -class VScrollbar; -class HScrollbar; -class RscLine; - - -// Taken from AGM for optics management. - -class RscInGameUI { - class RscOptics_titan { - idd = 300; - controls[] = {"ACE_javelin_elements_group"}; - onLoad = QUOTE(_this call FUNC(onOpticLoad)); - onUnload = "uiNameSpace setVariable ['ACE_RscOptics_javelin',nil];"; - - class CA_Distance: RscOpticsValue { - idc = 151; - sizeEx = "0"; - colorText[] = {0,0,0,0}; - x = 0; - y = 0; - w = 0; - h = 0; - }; - - class ACE_javelin_elements_group: RscControlsGroup - { - x = "SafezoneX"; - y = "SafezoneY"; - w = "SafezoneW"; - h = "SafezoneH"; - idc = 170; - class VScrollbar { - autoScrollSpeed = -1; - autoScrollDelay = 5; - autoScrollRewind = 0; - color[] = {1,1,1,0}; - width = 0.001; - }; - class HScrollbar { - color[] = {1,1,1,0}; - height = 0.001; - }; - class Controls { - class JavelinLocking : RscMapControl { - onDraw = QUOTE(_this call FUNC(onOpticDraw)); - idc = -1; - w = 0; - h = 0; - }; - - class ACE_javelin_Day_mode_off: RscPicture { - idc = 1001; - x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.03/4)*3*SafezoneH - SafezoneX"; - y = "SafezoneY+SafezoneH*0.031 - SafezoneY"; - w = "0.1045752* (((SafezoneW*3)/4)/SafezoneW)/(1/SafezoneH)"; - h = "SafezoneH*0.1045752"; - colorText[] = {0.2941,0.2941,0.2941,1}; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\day_co.paa"; - }; - class ACE_javelin_Day_mode: ACE_javelin_Day_mode_off { - idc = 160; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class ACE_javelin_WFOV_mode_off: ACE_javelin_Day_mode_off { - idc = 1004; - x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.307/4)*3*SafezoneH - SafezoneX"; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\wfov_co.paa"; - }; - class ACE_javelin_WFOV_mode_group: RscControlsGroup { - x = "SafezoneX"; - y = "SafezoneY"; - w = "SafezoneW"; - h = "SafezoneH"; - idc = 163; - class VScrollbar { - autoScrollSpeed = -1; - autoScrollDelay = 5; - autoScrollRewind = 0; - color[] = {1,1,1,0}; - width = 0.001; - }; - class HScrollbar { - color[] = {1,1,1,0}; - height = 0.001; - }; - class Controls { - class ACE_javelin_WFOV_mode: ACE_javelin_WFOV_mode_off { - idc = -1; - y = "0.031*SafezoneH - SafezoneY"; - x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.307/4)*3*SafezoneH - SafezoneX"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class StadiaL: RscLine { - x = "0.4899*SafezoneW - SafezoneX"; - y = "0.171*SafezoneH - SafezoneY"; - w = 0; - h = "0.049*SafezoneH"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class StadiaR: RscLine { - x = "0.5109*SafezoneW- SafezoneX"; - y = "0.171*SafezoneH - SafezoneY"; - w = 0; - h = "0.049*SafezoneH"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class BracketL: RscLine { - x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.293/4)*3*SafezoneH - SafezoneX"; - y = "0.4677*SafezoneH - SafezoneY"; - w = 0; - h = "0.0646*SafezoneH"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class BracketR: RscLine { - x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.70/4)*3*SafezoneH - SafezoneX"; - y = "0.4677*SafezoneH - SafezoneY"; - w = 0; - h = "0.0646*SafezoneH"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class BracketT: RscLine { - x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.467/4)*3*SafezoneH - SafezoneX"; - y = "0.3535*SafezoneH - SafezoneY"; - w = "0.065* (((SafezoneW*3)/4)/SafezoneW)/(1/SafezoneH)"; - h = 0; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class BracketB: RscLine { - x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.467/4)*3*SafezoneH - SafezoneX"; - y = "0.6465*SafezoneH - SafezoneY"; - w = "0.065* (((SafezoneW*3)/4)/SafezoneW)/(1/SafezoneH)"; - h = 0; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - }; - }; - class ACE_javelin_NFOV_mode_off: ACE_javelin_Day_mode_off { - idc = 1003; - x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.586/4)*3*SafezoneH - SafezoneX"; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\nfov_co.paa"; - }; - class ACE_javelin_NFOV_mode_group: RscControlsGroup { - x = "SafezoneX"; - y = "SafezoneY"; - w = "SafezoneW-SafezoneX"; - h = "SafezoneH-SafezoneY"; - idc = 162; - class VScrollbar { - autoScrollSpeed = -1; - autoScrollDelay = 5; - autoScrollRewind = 0; - color[] = {1,1,1,0}; - width = 0.001; - }; - class HScrollbar { - color[] = {1,1,1,0}; - height = 0.001; - }; - class Controls { - class ACE_javelin_NFOV_mode: ACE_javelin_NFOV_mode_off { - idc = 699003; - x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.586/4)*3*SafezoneH - SafezoneX"; - y = "0.031*SafezoneH - SafezoneY"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class StadiaL: RscLine { - x = "0.4788*SafezoneW - SafezoneX"; - y = "0.171*SafezoneH - SafezoneY"; - w = 0; - h = "0.049*SafezoneH"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class StadiaR: RscLine { - x = "0.5212*SafezoneW - SafezoneX"; - y = "0.171*SafezoneH - SafezoneY"; - w = 0; - h = "0.049*SafezoneH"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class LineHL: RscLine { - x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.01/4)*3*SafezoneH - SafezoneX"; - y = "SafezoneH*0.5 - SafezoneY"; - w = "0.29* (((SafezoneW*3)/4)/SafezoneW)/(1/SafezoneH)"; - h = "SafezoneH*0.0"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class LineHR: RscLine { - x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.695/4)*3*SafezoneH - SafezoneX"; - y = "SafezoneH*0.5 - SafezoneY"; - w = "0.29* (((SafezoneW*3)/4)/SafezoneW)/(1/SafezoneH)"; - h = "SafezoneH*0.0"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class LineVT: RscLine { - x = "0.5*SafezoneW - SafezoneX"; - y = "0.171*SafezoneH - SafezoneY"; - w = 0; - h = "0.1825*SafezoneH"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class LineVB: RscLine { - x = "0.5*SafezoneW - SafezoneX"; - y = "0.6465*SafezoneH - SafezoneY"; - w = 0; - h = "0.1895*SafezoneH"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - }; - }; - /* - class TargetingConstrains: RscControlsGroup { - idc = 699100; - x = "SafezoneX"; - y = "SafezoneY"; - w = "SafezoneW-SafezoneX"; - h = "SafezoneH-SafezoneY"; - class VScrollbar { - autoScrollSpeed = -1; - autoScrollDelay = 5; - autoScrollRewind = 0; - color[] = {1,1,1,0}; - width = 0.001; - }; - class HScrollbar { - color[] = {1,1,1,0}; - height = 0.001; - }; - class Controls { - class Top: RscPicture { - idc = 699101; - text = "#(argb,8,8,3)color(1,1,1,1)"; - colorText[] = {0.2941,0.2941,0.2941,1}; - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; - y = "0.15*SafezoneH-SafezoneY"; - w = "(3/4)*SafezoneH"; - h = "0.21*SafezoneH"; - }; - class Bottom: Top { - idc = 699102; - y = "0.64*SafezoneH-SafezoneY"; - }; - class Left: Top { - idc = 699103; - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; - y = "0.36*SafezoneH-SafezoneY"; - w = "0.31*(3/4)*SafezoneH"; - h = "0.28*SafezoneH"; - }; - class Right: Left { - idc = 699104; - x = "((SafezoneW -(3/4)*SafezoneH)/2)+ 0.69*(3/4)*SafezoneH - SafezoneX"; - }; - class OpticsBorders: RscPicture { - idc = 699105; - text = PATHTOF(data\javelin_ui_border_ca.paa); - colorText[] = {0,0,0,1}; - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; - y = "0.15*SafezoneH-SafezoneY"; - w = "(3/4)*SafezoneH"; - h = "0.7*SafezoneH"; - }; - }; - }; - - class TargetingGate: TargetingConstrains { - idc = 699200; - class Controls { - class TargetingGateTL: TargetingConstrains { - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; - y = "0.15*SafezoneH - SafezoneY"; - idc = 699201; - class Controls { - class LineH: RscLine { - idc = 699210; - x = "0"; - y = "0"; - w = "0.025*(3/4)*SafezoneH"; - h = "0"; - colorText[] = {0.8745,0.8745,0.8745,1}; - }; - class LineV: LineH { - idc = 699211; - w = "0"; - h = "0.025*SafezoneH"; - }; - }; - }; - class TargetingGateTR: TargetingGateTL { - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX + 0.975*(3/4)*SafezoneH"; - y = "0.15*SafezoneH - SafezoneY"; - idc = 699202; - class Controls { - class LineH: RscLine { - idc = 699220; - x = "0"; - y = "0"; - w = "0.025*(3/4)*SafezoneH"; - h = "0"; - colorText[] = {0.8745,0.8745,0.8745,1}; - }; - class LineV: LineH { - idc = 699221; - x = "0.025*(3/4)*SafezoneH"; - w = "0"; - h = "0.025*SafezoneH"; - }; - }; - }; - class TargetingGateBL: TargetingGateTL { - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; - y = "0.825*SafezoneH - SafezoneY"; - idc = 699203; - class Controls { - class LineH: RscLine { - x = "0"; - y = "0.025*SafezoneH"; - w = "0.025*(3/4)*SafezoneH"; - h = "0"; - colorText[] = {0.8745,0.8745,0.8745,1}; - }; - class LineV: LineH { - y = "0"; - w = "0"; - h = "0.025*SafezoneH"; - }; - }; - }; - class TargetingGateBR: TargetingGateBL { - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX + 0.975*(3/4)*SafezoneH"; - y = "0.825*SafezoneH - SafezoneY"; - idc = 699204; - class Controls { - class LineH: RscLine { - x = "0"; - y = "0.025*SafezoneH"; - w = "0.025*(3/4)*SafezoneH"; - h = "0"; - colorText[] = {0.8745,0.8745,0.8745,1}; - }; - class LineV: LineH { - x = "0.025*(3/4)*SafezoneH"; - y = "0"; - w = "0"; - h = "0.025*SafezoneH"; - }; - }; - }; - }; - }; - - class TargetingLines: TargetingConstrains { - idc = 699300; - class Controls { - class LineH: RscLine { - idc = 699301; - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; - y = "0.5*SafezoneH - SafezoneY"; - w = "(3/4)*SafezoneH"; - h = "0"; - colorText[] = {0.8745,0.8745,0.8745,1}; - }; - class LineV: RscLine { - idc = 699302; - x = "0.5*SafezoneW - SafezoneX"; - y = "0.15*SafezoneH - SafezoneY"; - w = "0"; - h = "0.7*SafezoneH"; - colorText[] = {0.8745,0.8745,0.8745,1}; - }; - }; - }; - */ - - class ACE_javelin_SEEK_off: ACE_javelin_Day_mode_off { - idc = 699000; - x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.863/4)*3*SafezoneH - SafezoneX"; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\seek_co.paa"; - }; - class ACE_javelin_SEEK: ACE_javelin_SEEK_off { - idc = 166; - colorText[] = {0.2941,0.8745,0.2157,0}; - }; - class ACE_javelin_Missle_off: ACE_javelin_Day_mode_off { - idc = 1032; - x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (-0.134/4)*3*SafezoneH - SafezoneX"; - y = "(SafezoneY + 0.208*SafezoneH) - SafezoneY"; - colorText[] = {0.2941,0.2941,0.2941,1}; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\missle_co.paa"; - }; - class ACE_javelin_Missle: ACE_javelin_Missle_off { - idc = 167; - colorText[] = {0.9255,0.5216,0.1216,0}; - }; - class ACE_javelin_CLU_off: ACE_javelin_Missle_off { - idc = 1027; - y = "(SafezoneY + 0.436*SafezoneH) - SafezoneY"; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\clu_co.paa"; - }; - class ACE_javelin_HangFire_off: ACE_javelin_Missle_off { - idc = 1028; - y = "(SafezoneY + 0.669*SafezoneH) - SafezoneY"; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\hangfire_co.paa"; - }; - class ACE_javelin_TOP_off: ACE_javelin_Day_mode_off { - idc = 699001; - x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (1.023/4)*3*SafezoneH - SafezoneX"; - y = "(SafezoneY + 0.208*SafezoneH) - SafezoneY"; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\top_co.paa"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class ACE_javelin_DIR: ACE_javelin_Day_mode { - idc = 699002; - x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (1.023/4)*3*SafezoneH - SafezoneX"; - y = "(SafezoneY + 0.436*SafezoneH) - SafezoneY"; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\dir_co.paa"; - colorText[] = {0.2941,0.2941,0.2941,1}; - }; - class ACE_javelin_FLTR_mode_off: ACE_javelin_Day_mode_off { - idc = 1002; - x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (1.023/4)*3*SafezoneH - SafezoneX"; - y = "(SafezoneY + 0.669*SafezoneH) - SafezoneY"; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\fltr_co.paa"; - }; - class ACE_javelin_FLTR_mode: ACE_javelin_FLTR_mode_off { - idc = 161; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - }; - }; - }; -}; - -// on colorText[] = {0.2941, 0.8745, 0.2157, 1.0}; -// off colorText[] = {0.2941, 0.2941, 0.2941, 1.0}; -// orange colorText[] = {0.9255, 0.5216, 0.1216, 1.0}; - -/* -ACE_Titan_elements_group: 170 -ACE_Titan_Day_mode_off: 1001 -ACE_Titan_Day_mode: 160 -ACE_Titan_WFOV_mode_off: 1004 -ACE_Titan_WFOV_mode_group: 163 -ACE_Titan_NFOV_mode_off: 1003 -ACE_Titan_NFOV_mode_group: 162 -ACE_Titan_SEEK_off: 1005 //1001 -ACE_Titan_SEEK: 166 -ACE_Titan_Missle_off: 1032 -ACE_Titan_Missle: 167 -ACE_Titan_CLU_off: 1027 -ACE_Titan_HangFire_off: 1028 -ACE_Titan_TOP_off: 1006 -ACE_Titan_DIR: 1007 -ACE_Titan_FLTR_mode_off: 1002 -ACE_Titan_FLTR_mode: 161 +class RscOpticsValue; +class RscControlsGroup; +class RscPicture; +class RscMapControl; +class VScrollbar; +class HScrollbar; +class RscLine; + + +// Taken from AGM for optics management. + +class RscInGameUI { + class RscOptics_titan { + idd = 300; + controls[] = {"ACE_javelin_elements_group"}; + onLoad = QUOTE(_this call FUNC(onOpticLoad)); + onUnload = "uiNameSpace setVariable ['ACE_RscOptics_javelin',nil];"; + + class CA_Distance: RscOpticsValue { + idc = 151; + sizeEx = "0"; + colorText[] = {0,0,0,0}; + x = 0; + y = 0; + w = 0; + h = 0; + }; + + class ACE_javelin_elements_group: RscControlsGroup + { + x = "SafezoneX"; + y = "SafezoneY"; + w = "SafezoneW"; + h = "SafezoneH"; + idc = 170; + class VScrollbar { + autoScrollSpeed = -1; + autoScrollDelay = 5; + autoScrollRewind = 0; + color[] = {1,1,1,0}; + width = 0.001; + }; + class HScrollbar { + color[] = {1,1,1,0}; + height = 0.001; + }; + class Controls { + class JavelinLocking : RscMapControl { + onDraw = QUOTE(_this call FUNC(onOpticDraw)); + idc = -1; + w = 0; + h = 0; + }; + + class ACE_javelin_Day_mode_off: RscPicture { + idc = 1001; + x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.03/4)*3*SafezoneH - SafezoneX"; + y = "SafezoneY+SafezoneH*0.031 - SafezoneY"; + w = "0.1045752* (((SafezoneW*3)/4)/SafezoneW)/(1/SafezoneH)"; + h = "SafezoneH*0.1045752"; + colorText[] = {0.2941,0.2941,0.2941,1}; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\day_co.paa"; + }; + class ACE_javelin_Day_mode: ACE_javelin_Day_mode_off { + idc = 160; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class ACE_javelin_WFOV_mode_off: ACE_javelin_Day_mode_off { + idc = 1004; + x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.307/4)*3*SafezoneH - SafezoneX"; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\wfov_co.paa"; + }; + class ACE_javelin_WFOV_mode_group: RscControlsGroup { + x = "SafezoneX"; + y = "SafezoneY"; + w = "SafezoneW"; + h = "SafezoneH"; + idc = 163; + class VScrollbar { + autoScrollSpeed = -1; + autoScrollDelay = 5; + autoScrollRewind = 0; + color[] = {1,1,1,0}; + width = 0.001; + }; + class HScrollbar { + color[] = {1,1,1,0}; + height = 0.001; + }; + class Controls { + class ACE_javelin_WFOV_mode: ACE_javelin_WFOV_mode_off { + idc = -1; + y = "0.031*SafezoneH - SafezoneY"; + x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.307/4)*3*SafezoneH - SafezoneX"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class StadiaL: RscLine { + x = "0.4899*SafezoneW - SafezoneX"; + y = "0.171*SafezoneH - SafezoneY"; + w = 0; + h = "0.049*SafezoneH"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class StadiaR: RscLine { + x = "0.5109*SafezoneW- SafezoneX"; + y = "0.171*SafezoneH - SafezoneY"; + w = 0; + h = "0.049*SafezoneH"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class BracketL: RscLine { + x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.293/4)*3*SafezoneH - SafezoneX"; + y = "0.4677*SafezoneH - SafezoneY"; + w = 0; + h = "0.0646*SafezoneH"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class BracketR: RscLine { + x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.70/4)*3*SafezoneH - SafezoneX"; + y = "0.4677*SafezoneH - SafezoneY"; + w = 0; + h = "0.0646*SafezoneH"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class BracketT: RscLine { + x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.467/4)*3*SafezoneH - SafezoneX"; + y = "0.3535*SafezoneH - SafezoneY"; + w = "0.065* (((SafezoneW*3)/4)/SafezoneW)/(1/SafezoneH)"; + h = 0; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class BracketB: RscLine { + x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.467/4)*3*SafezoneH - SafezoneX"; + y = "0.6465*SafezoneH - SafezoneY"; + w = "0.065* (((SafezoneW*3)/4)/SafezoneW)/(1/SafezoneH)"; + h = 0; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + }; + }; + class ACE_javelin_NFOV_mode_off: ACE_javelin_Day_mode_off { + idc = 1003; + x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.586/4)*3*SafezoneH - SafezoneX"; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\nfov_co.paa"; + }; + class ACE_javelin_NFOV_mode_group: RscControlsGroup { + x = "SafezoneX"; + y = "SafezoneY"; + w = "SafezoneW-SafezoneX"; + h = "SafezoneH-SafezoneY"; + idc = 162; + class VScrollbar { + autoScrollSpeed = -1; + autoScrollDelay = 5; + autoScrollRewind = 0; + color[] = {1,1,1,0}; + width = 0.001; + }; + class HScrollbar { + color[] = {1,1,1,0}; + height = 0.001; + }; + class Controls { + class ACE_javelin_NFOV_mode: ACE_javelin_NFOV_mode_off { + idc = 699003; + x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.586/4)*3*SafezoneH - SafezoneX"; + y = "0.031*SafezoneH - SafezoneY"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class StadiaL: RscLine { + x = "0.4788*SafezoneW - SafezoneX"; + y = "0.171*SafezoneH - SafezoneY"; + w = 0; + h = "0.049*SafezoneH"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class StadiaR: RscLine { + x = "0.5212*SafezoneW - SafezoneX"; + y = "0.171*SafezoneH - SafezoneY"; + w = 0; + h = "0.049*SafezoneH"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class LineHL: RscLine { + x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.01/4)*3*SafezoneH - SafezoneX"; + y = "SafezoneH*0.5 - SafezoneY"; + w = "0.29* (((SafezoneW*3)/4)/SafezoneW)/(1/SafezoneH)"; + h = "SafezoneH*0.0"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class LineHR: RscLine { + x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.695/4)*3*SafezoneH - SafezoneX"; + y = "SafezoneH*0.5 - SafezoneY"; + w = "0.29* (((SafezoneW*3)/4)/SafezoneW)/(1/SafezoneH)"; + h = "SafezoneH*0.0"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class LineVT: RscLine { + x = "0.5*SafezoneW - SafezoneX"; + y = "0.171*SafezoneH - SafezoneY"; + w = 0; + h = "0.1825*SafezoneH"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class LineVB: RscLine { + x = "0.5*SafezoneW - SafezoneX"; + y = "0.6465*SafezoneH - SafezoneY"; + w = 0; + h = "0.1895*SafezoneH"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + }; + }; + /* + class TargetingConstrains: RscControlsGroup { + idc = 699100; + x = "SafezoneX"; + y = "SafezoneY"; + w = "SafezoneW-SafezoneX"; + h = "SafezoneH-SafezoneY"; + class VScrollbar { + autoScrollSpeed = -1; + autoScrollDelay = 5; + autoScrollRewind = 0; + color[] = {1,1,1,0}; + width = 0.001; + }; + class HScrollbar { + color[] = {1,1,1,0}; + height = 0.001; + }; + class Controls { + class Top: RscPicture { + idc = 699101; + text = "#(argb,8,8,3)color(1,1,1,1)"; + colorText[] = {0.2941,0.2941,0.2941,1}; + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; + y = "0.15*SafezoneH-SafezoneY"; + w = "(3/4)*SafezoneH"; + h = "0.21*SafezoneH"; + }; + class Bottom: Top { + idc = 699102; + y = "0.64*SafezoneH-SafezoneY"; + }; + class Left: Top { + idc = 699103; + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; + y = "0.36*SafezoneH-SafezoneY"; + w = "0.31*(3/4)*SafezoneH"; + h = "0.28*SafezoneH"; + }; + class Right: Left { + idc = 699104; + x = "((SafezoneW -(3/4)*SafezoneH)/2)+ 0.69*(3/4)*SafezoneH - SafezoneX"; + }; + class OpticsBorders: RscPicture { + idc = 699105; + text = PATHTOF(data\javelin_ui_border_ca.paa); + colorText[] = {0,0,0,1}; + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; + y = "0.15*SafezoneH-SafezoneY"; + w = "(3/4)*SafezoneH"; + h = "0.7*SafezoneH"; + }; + }; + }; + + class TargetingGate: TargetingConstrains { + idc = 699200; + class Controls { + class TargetingGateTL: TargetingConstrains { + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; + y = "0.15*SafezoneH - SafezoneY"; + idc = 699201; + class Controls { + class LineH: RscLine { + idc = 699210; + x = "0"; + y = "0"; + w = "0.025*(3/4)*SafezoneH"; + h = "0"; + colorText[] = {0.8745,0.8745,0.8745,1}; + }; + class LineV: LineH { + idc = 699211; + w = "0"; + h = "0.025*SafezoneH"; + }; + }; + }; + class TargetingGateTR: TargetingGateTL { + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX + 0.975*(3/4)*SafezoneH"; + y = "0.15*SafezoneH - SafezoneY"; + idc = 699202; + class Controls { + class LineH: RscLine { + idc = 699220; + x = "0"; + y = "0"; + w = "0.025*(3/4)*SafezoneH"; + h = "0"; + colorText[] = {0.8745,0.8745,0.8745,1}; + }; + class LineV: LineH { + idc = 699221; + x = "0.025*(3/4)*SafezoneH"; + w = "0"; + h = "0.025*SafezoneH"; + }; + }; + }; + class TargetingGateBL: TargetingGateTL { + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; + y = "0.825*SafezoneH - SafezoneY"; + idc = 699203; + class Controls { + class LineH: RscLine { + x = "0"; + y = "0.025*SafezoneH"; + w = "0.025*(3/4)*SafezoneH"; + h = "0"; + colorText[] = {0.8745,0.8745,0.8745,1}; + }; + class LineV: LineH { + y = "0"; + w = "0"; + h = "0.025*SafezoneH"; + }; + }; + }; + class TargetingGateBR: TargetingGateBL { + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX + 0.975*(3/4)*SafezoneH"; + y = "0.825*SafezoneH - SafezoneY"; + idc = 699204; + class Controls { + class LineH: RscLine { + x = "0"; + y = "0.025*SafezoneH"; + w = "0.025*(3/4)*SafezoneH"; + h = "0"; + colorText[] = {0.8745,0.8745,0.8745,1}; + }; + class LineV: LineH { + x = "0.025*(3/4)*SafezoneH"; + y = "0"; + w = "0"; + h = "0.025*SafezoneH"; + }; + }; + }; + }; + }; + + class TargetingLines: TargetingConstrains { + idc = 699300; + class Controls { + class LineH: RscLine { + idc = 699301; + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; + y = "0.5*SafezoneH - SafezoneY"; + w = "(3/4)*SafezoneH"; + h = "0"; + colorText[] = {0.8745,0.8745,0.8745,1}; + }; + class LineV: RscLine { + idc = 699302; + x = "0.5*SafezoneW - SafezoneX"; + y = "0.15*SafezoneH - SafezoneY"; + w = "0"; + h = "0.7*SafezoneH"; + colorText[] = {0.8745,0.8745,0.8745,1}; + }; + }; + }; + */ + + class ACE_javelin_SEEK_off: ACE_javelin_Day_mode_off { + idc = 699000; + x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.863/4)*3*SafezoneH - SafezoneX"; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\seek_co.paa"; + }; + class ACE_javelin_SEEK: ACE_javelin_SEEK_off { + idc = 166; + colorText[] = {0.2941,0.8745,0.2157,0}; + }; + class ACE_javelin_Missle_off: ACE_javelin_Day_mode_off { + idc = 1032; + x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (-0.134/4)*3*SafezoneH - SafezoneX"; + y = "(SafezoneY + 0.208*SafezoneH) - SafezoneY"; + colorText[] = {0.2941,0.2941,0.2941,1}; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\missle_co.paa"; + }; + class ACE_javelin_Missle: ACE_javelin_Missle_off { + idc = 167; + colorText[] = {0.9255,0.5216,0.1216,0}; + }; + class ACE_javelin_CLU_off: ACE_javelin_Missle_off { + idc = 1027; + y = "(SafezoneY + 0.436*SafezoneH) - SafezoneY"; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\clu_co.paa"; + }; + class ACE_javelin_HangFire_off: ACE_javelin_Missle_off { + idc = 1028; + y = "(SafezoneY + 0.669*SafezoneH) - SafezoneY"; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\hangfire_co.paa"; + }; + class ACE_javelin_TOP_off: ACE_javelin_Day_mode_off { + idc = 699001; + x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (1.023/4)*3*SafezoneH - SafezoneX"; + y = "(SafezoneY + 0.208*SafezoneH) - SafezoneY"; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\top_co.paa"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class ACE_javelin_DIR: ACE_javelin_Day_mode { + idc = 699002; + x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (1.023/4)*3*SafezoneH - SafezoneX"; + y = "(SafezoneY + 0.436*SafezoneH) - SafezoneY"; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\dir_co.paa"; + colorText[] = {0.2941,0.2941,0.2941,1}; + }; + class ACE_javelin_FLTR_mode_off: ACE_javelin_Day_mode_off { + idc = 1002; + x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (1.023/4)*3*SafezoneH - SafezoneX"; + y = "(SafezoneY + 0.669*SafezoneH) - SafezoneY"; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\fltr_co.paa"; + }; + class ACE_javelin_FLTR_mode: ACE_javelin_FLTR_mode_off { + idc = 161; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + }; + }; + }; +}; + +// on colorText[] = {0.2941, 0.8745, 0.2157, 1.0}; +// off colorText[] = {0.2941, 0.2941, 0.2941, 1.0}; +// orange colorText[] = {0.9255, 0.5216, 0.1216, 1.0}; + +/* +ACE_Titan_elements_group: 170 +ACE_Titan_Day_mode_off: 1001 +ACE_Titan_Day_mode: 160 +ACE_Titan_WFOV_mode_off: 1004 +ACE_Titan_WFOV_mode_group: 163 +ACE_Titan_NFOV_mode_off: 1003 +ACE_Titan_NFOV_mode_group: 162 +ACE_Titan_SEEK_off: 1005 //1001 +ACE_Titan_SEEK: 166 +ACE_Titan_Missle_off: 1032 +ACE_Titan_Missle: 167 +ACE_Titan_CLU_off: 1027 +ACE_Titan_HangFire_off: 1028 +ACE_Titan_TOP_off: 1006 +ACE_Titan_DIR: 1007 +ACE_Titan_FLTR_mode_off: 1002 +ACE_Titan_FLTR_mode: 161 */ \ No newline at end of file diff --git a/addons/wep_javelin/XEH_clientInit.sqf b/addons/wep_javelin/XEH_clientInit.sqf index 1d3b546e39..8cbd59fcd7 100644 --- a/addons/wep_javelin/XEH_clientInit.sqf +++ b/addons/wep_javelin/XEH_clientInit.sqf @@ -1,3 +1,3 @@ -#include "script_component.hpp" - +#include "script_component.hpp" + #include "initKeybinds.sqf" \ No newline at end of file diff --git a/addons/wep_javelin/XEH_post_init.sqf b/addons/wep_javelin/XEH_post_init.sqf index dc30361926..6eccf9d1dd 100644 --- a/addons/wep_javelin/XEH_post_init.sqf +++ b/addons/wep_javelin/XEH_post_init.sqf @@ -1,2 +1,2 @@ -#include "script_component.hpp" - +#include "script_component.hpp" + diff --git a/addons/wep_javelin/XEH_pre_init.sqf b/addons/wep_javelin/XEH_pre_init.sqf index 1b6682f0fc..c56cbc643a 100644 --- a/addons/wep_javelin/XEH_pre_init.sqf +++ b/addons/wep_javelin/XEH_pre_init.sqf @@ -1,15 +1,15 @@ -#include "script_component.hpp" - -PREP(fired); - -PREP(translateToWeaponSpace); -PREP(translateToModelSpace); - -PREP(lockKeyDown); -PREP(lockKeyUp); -PREP(cycleFireMode); - -PREP(onOpticLoad); -PREP(onOpticDraw); - +#include "script_component.hpp" + +PREP(fired); + +PREP(translateToWeaponSpace); +PREP(translateToModelSpace); + +PREP(lockKeyDown); +PREP(lockKeyUp); +PREP(cycleFireMode); + +PREP(onOpticLoad); +PREP(onOpticDraw); + GVAR(isLockKeyDown) = false; \ No newline at end of file diff --git a/addons/wep_javelin/config.cpp b/addons/wep_javelin/config.cpp index c7ea1c867a..7eb217ddb3 100644 --- a/addons/wep_javelin/config.cpp +++ b/addons/wep_javelin/config.cpp @@ -1,15 +1,15 @@ -#include "script_component.hpp" - -class CfgPatches { - class ADDON { - units[] = {}; - weapons[] = {}; - requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"ace_laser"}; - VERSION_CONFIG; - }; -}; - -#include "CfgEventhandlers.hpp" -#include "RscInGameUI.hpp" +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_laser"}; + VERSION_CONFIG; + }; +}; + +#include "CfgEventhandlers.hpp" +#include "RscInGameUI.hpp" #include "CfgSounds.hpp" \ No newline at end of file diff --git a/addons/wep_javelin/functions/fnc_cycleFireMode.sqf b/addons/wep_javelin/functions/fnc_cycleFireMode.sqf index 7902c6d265..2ade157d2b 100644 --- a/addons/wep_javelin/functions/fnc_cycleFireMode.sqf +++ b/addons/wep_javelin/functions/fnc_cycleFireMode.sqf @@ -1,19 +1,19 @@ -#define DEBUG_MODE_FULL -#include "script_component.hpp" -TRACE_1("enter", _this); - -private["_player", "_currentFireMode"]; - -_currentFireMode = ACE_player getVariable["ACE_FIRE_SELECTION", ACE_JAV_FIREMODE_TOP]; -if(_currentFireMode == ACE_JAV_FIREMODE_DIR) then { - _currentFireMode = ACE_JAV_FIREMODE_TOP; - - __JavelinIGUITop ctrlSetTextColor __ColorGreen; - __JavelinIGUIDir ctrlSetTextColor __ColorGray; -} else { - _currentFireMode = ACE_JAV_FIREMODE_DIR; - - __JavelinIGUITop ctrlSetTextColor __ColorGray; - __JavelinIGUIDir ctrlSetTextColor __ColorGreen; -}; -ACE_player setVariable["ACE_FIRE_SELECTION", _currentFireMode, false]; +#define DEBUG_MODE_FULL +#include "script_component.hpp" +TRACE_1("enter", _this); + +private["_player", "_currentFireMode"]; + +_currentFireMode = ACE_player getVariable["ACE_FIRE_SELECTION", ACE_JAV_FIREMODE_TOP]; +if(_currentFireMode == ACE_JAV_FIREMODE_DIR) then { + _currentFireMode = ACE_JAV_FIREMODE_TOP; + + __JavelinIGUITop ctrlSetTextColor __ColorGreen; + __JavelinIGUIDir ctrlSetTextColor __ColorGray; +} else { + _currentFireMode = ACE_JAV_FIREMODE_DIR; + + __JavelinIGUITop ctrlSetTextColor __ColorGray; + __JavelinIGUIDir ctrlSetTextColor __ColorGreen; +}; +ACE_player setVariable["ACE_FIRE_SELECTION", _currentFireMode, false]; diff --git a/addons/wep_javelin/functions/fnc_fired.sqf b/addons/wep_javelin/functions/fnc_fired.sqf index 139f8f4b7e..9906d35a67 100644 --- a/addons/wep_javelin/functions/fnc_fired.sqf +++ b/addons/wep_javelin/functions/fnc_fired.sqf @@ -1,285 +1,285 @@ -//#define DEBUG_MODE_FULL -#include "script_component.hpp" -//_this=[TEST_AI_HELICOPTER,"missiles_DAGR","missiles_DAGR","Far_AI","M_PG_AT","24Rnd_PG_missiles",163988: rocket_01_fly_f.p3d] -TRACE_1("Launch", _this); -PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); - -FUNC(guidance_Javelin_LOBL_DIR_PFH) = { - TRACE_1("enter", _this); - private["_pitch", "_yaw", "_wentTerminal", "_target", "_targetPos", "_curVelocity", "_missile", - "_launchPos", "_targetStartPos", "_defPitch", "_defYaw"]; - _args = _this select 0; - //PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); - _shooter = _args select 0; - _missile = _args select 6; - - if((count _args) > 7) then { - _saveArgs = _args select 7; - _target = _saveArgs select 0; - _targetStartPos = _saveArgs select 1; - _launchPos = _saveArgs select 2; - _wentTerminal = _saveArgs select 3; - } else { - _wentTerminal = false; - _launchPos = getPosASL _shooter; - _target = ACE_player getVariable[QGVAR(currentTarget), objNull]; - _targetStartPos = ACE_player getVariable[QGVAR(currentTargetPos), [0,0,0]]; - }; - - if(!alive _missile || isNull _missile || isNull _target) exitWith { - [(_this select 1)] call cba_fnc_removePerFrameHandler; - }; - - _targetPos = getPosASL _target; - _curVelocity = velocity _missile; - - TRACE_4("", _target, _targetPos, _launchPos, _targetStartPos); - - _addHeight = [0,0,0]; - if(!isNil "_target") then { - - _yVec = vectorDir _missile; - _zVec = vectorUp _missile; - _xVec = vectorNormalized (_yVec vectorCrossProduct _zVec); - - _missilePos = getPosASL _missile; - // player sideChat "G!"; - - TRACE_4("Phase Check", _launchPos, _missilePos, _targetPos, (_missilePos distance _targetPos)); - if((count _targetPos) > 0) then { - _distanceToTarget = [(_missilePos select 0), (_missilePos select 1), (_targetPos select 2)] vectorDistance _targetPos; - - if( (_missilePos select 2) < (_targetPos select 2) + 60 && !_wentTerminal) then { - _addHeight = [0,0,(_targetPos select 2) + 120]; - - _defPitch = 0.15; - _defYaw = 0.035; - - TRACE_1("Climb phase", _addHeight); - } else { - _wentTerminal = true; - _this set[2, _wentTerminal]; - - _defPitch = 0.15; - _defYaw = 0.035; - - TRACE_1("TERMINAL", ""); - }; - _targetPos = _targetPos vectorAdd _addHeight; - - _targetVectorSeeker = [_missile, [_xVec, _yVec, _zVec], _targetPos] call FUNC(translateToWeaponSpace); - TRACE_5("", _missile, _xVec, _yVec, _zVec, _targetPos); - - _yaw = 0.0; - _pitch = 0.0; - - if((_targetVectorSeeker select 0) < 0) then { - _yaw = -_defYaw; - } else { - if((_targetVectorSeeker select 0) > 0) then { - _yaw = _defYaw; - }; - }; - - if((_targetVectorSeeker select 2) < 0) then { - _pitch = -_defPitch; - } else { - if((_targetVectorSeeker select 2) > 0) then { - _pitch = _defPitch; - }; - }; - - TRACE_3("", _targetVectorSeeker, _pitch, _yaw); - - #ifdef DEBUG_MODE_FULL - drawLine3D [(ASLtoATL _targetPos) vectorAdd _addHeight, ASLtoATL _targetPos, [0,1,0,1]]; - - _light = "#lightpoint" createVehicleLocal (getPos _missile); - _light setLightBrightness 1.0; - _light setLightAmbient [1.0, 0.0, 0.0]; - _light setLightColor [1.0, 0.0, 0.0]; - - drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,1,1,1], ASLtoATL _missilePos, 0.75, 0.75, 0, str _vectorTo, 1, 0.025, "TahomaB"]; - drawLine3D [ASLtoATL _missilePos, ASLtoATL _targetPos, [1,0,0,1]]; - - MARKERCOUNT = MARKERCOUNT + 1; - #endif - - if(accTime > 0) then { - TRACE_5("", _xVec, _yVec, _zVec, _yaw, _pitch); - _outVector = [_missile, [_xVec, _yVec, _zVec], [_yaw, 1/accTime, _pitch]] call FUNC(translateToModelSpace); - - _vectorTo = _missilePos vectorFromTo _outVector; - TRACE_3("", _missile, _outVector, _vectorTo); - _missile setVectorDirAndUp [_vectorTo, vectorUp _missile]; - }; - - #ifdef DEBUG_MODE_FULL - hintSilent format["d: %1", _distanceToTarget]; - #endif - }; - }; - - _saveArgs = [_target,_targetStartPos, _launchPos, _wentTerminal]; - _args set[7, _saveArgs ]; - _this set[0, _args]; -}; - -FUNC(guidance_Javelin_LOBL_TOP_PFH) = { - TRACE_1("enter", _this); - private["_pitch", "_yaw", "_wentTerminal", "_target", "_targetPos", "_curVelocity", "_missile", - "_launchPos", "_targetStartPos", "_defPitch", "_defYaw"]; - _args = _this select 0; - //PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); - _shooter = _args select 0; - _missile = _args select 6; - - if((count _args) > 7) then { - _saveArgs = _args select 7; - _target = _saveArgs select 0; - _targetStartPos = _saveArgs select 1; - _launchPos = _saveArgs select 2; - _wentTerminal = _saveArgs select 3; - } else { - _wentTerminal = false; - _launchPos = getPosASL _shooter; - _target = ACE_player getVariable[QGVAR(currentTarget), objNull]; - _targetStartPos = ACE_player getVariable[QGVAR(currentTargetPos), [0,0,0]]; - }; - - if(!alive _missile || isNull _missile || isNull _target) exitWith { - [(_this select 1)] call cba_fnc_removePerFrameHandler; - }; - - _targetPos = getPosASL _target; - _curVelocity = velocity _missile; - - TRACE_4("", _target, _targetPos, _launchPos, _targetStartPos); - - _addHeight = [0,0,0]; - if(!isNil "_target") then { - - _yVec = vectorDir _missile; - _zVec = vectorUp _missile; - _xVec = vectorNormalized (_yVec vectorCrossProduct _zVec); - - _missilePos = getPosASL _missile; - // player sideChat "G!"; - - TRACE_4("Phase Check", _launchPos, _missilePos, _targetPos, (_missilePos distance _targetPos)); - if((count _targetPos) > 0) then { - _distanceToTarget = [(_missilePos select 0), (_missilePos select 1), (_targetPos select 2)] vectorDistance _targetPos; - - if( (_missilePos select 2) < (_targetPos select 2) + 200 && !_wentTerminal) then { - _addHeight = [0,0, ( (_distanceToTarget * 2) + 400)]; - - _defPitch = 0.25; - _defYaw = 0.035; - - TRACE_1("Climb phase", _addHeight); - } else { - _wentTerminal = true; - _this set[2, _wentTerminal]; - - _defPitch = 0.25; - _defYaw = 0.25; - - TRACE_1("TERMINAL", ""); - }; - _targetPos = _targetPos vectorAdd _addHeight; - - _targetVectorSeeker = [_missile, [_xVec, _yVec, _zVec], _targetPos] call FUNC(translateToWeaponSpace); - TRACE_5("", _missile, _xVec, _yVec, _zVec, _targetPos); - - _yaw = 0.0; - _pitch = 0.0; - - // Stop jinking on terminal final decent - if((_missilePos distance _targetPos) < 150) then { - _defPitch = 0.0015; - _defYaw = 0.0015; - }; - - if((_targetVectorSeeker select 0) < 0) then { - _yaw = -_defYaw; - } else { - if((_targetVectorSeeker select 0) > 0) then { - _yaw = _defYaw; - }; - }; - - if((_targetVectorSeeker select 2) < 0) then { - _pitch = -_defPitch; - } else { - if((_targetVectorSeeker select 2) > 0) then { - _pitch = _defPitch; - }; - }; - - TRACE_3("", _targetVectorSeeker, _pitch, _yaw); - - #ifdef DEBUG_MODE_FULL - drawLine3D [(ASLtoATL _targetPos) vectorAdd _addHeight, ASLtoATL _targetPos, [0,1,0,1]]; - - _light = "#lightpoint" createVehicleLocal (getPos _missile); - _light setLightBrightness 1.0; - _light setLightAmbient [1.0, 0.0, 0.0]; - _light setLightColor [1.0, 0.0, 0.0]; - - drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,1,1,1], ASLtoATL _missilePos, 0.75, 0.75, 0, str _vectorTo, 1, 0.025, "TahomaB"]; - drawLine3D [ASLtoATL _missilePos, ASLtoATL _targetPos, [1,0,0,1]]; - - MARKERCOUNT = MARKERCOUNT + 1; - #endif - - if(accTime > 0) then { - TRACE_5("", _xVec, _yVec, _zVec, _yaw, _pitch); - _outVector = [_missile, [_xVec, _yVec, _zVec], [_yaw, 1/accTime, _pitch]] call FUNC(translateToModelSpace); - - _vectorTo = _missilePos vectorFromTo _outVector; - TRACE_3("", _missile, _outVector, _vectorTo); - _missile setVectorDirAndUp [_vectorTo, vectorUp _missile]; - }; - - #ifdef DEBUG_MODE_FULL - hintSilent format["d: %1", _distanceToTarget]; - #endif - }; - }; - - _saveArgs = [_target,_targetStartPos, _launchPos, _wentTerminal]; - _args set[7, _saveArgs ]; - _this set[0, _args]; -}; - -FUNC(guidance_Javelin_LOBL_TOP) = { - PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); - - GVAR(lastTime) = time; - [FUNC(guidance_Javelin_LOBL_TOP_PFH), 0, _this] call cba_fnc_addPerFrameHandler; -}; - -FUNC(guidance_Javelin_LOBL_DIR) = { - PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); - - GVAR(lastTime) = time; - [FUNC(guidance_Javelin_LOBL_DIR_PFH), 0, _this] call cba_fnc_addPerFrameHandler; -}; - -if(!local _shooter) exitWith { false }; -if(_ammo == "M_Titan_AT") then { - _fireMode = _shooter getVariable ["ACE_FIRE_SELECTION", ACE_JAV_FIREMODE_TOP]; - - switch (_fireMode) do { - // Default to FIREMODE_DIRECT_LOAL - // FIREMODE_DIRECT_LOAL - case ACE_JAV_FIREMODE_DIR: { - LOG("Initiating Javelin FIREMODE_LOBL_DIR"); - _this call FUNC(guidance_Javelin_LOBL_DIR); - }; - default { - LOG("Initiating Javelin FIREMODE_LOBL_TOP"); - _this call FUNC(guidance_Javelin_LOBL_TOP); - }; - }; +//#define DEBUG_MODE_FULL +#include "script_component.hpp" +//_this=[TEST_AI_HELICOPTER,"missiles_DAGR","missiles_DAGR","Far_AI","M_PG_AT","24Rnd_PG_missiles",163988: rocket_01_fly_f.p3d] +TRACE_1("Launch", _this); +PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); + +FUNC(guidance_Javelin_LOBL_DIR_PFH) = { + TRACE_1("enter", _this); + private["_pitch", "_yaw", "_wentTerminal", "_target", "_targetPos", "_curVelocity", "_missile", + "_launchPos", "_targetStartPos", "_defPitch", "_defYaw"]; + _args = _this select 0; + //PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); + _shooter = _args select 0; + _missile = _args select 6; + + if((count _args) > 7) then { + _saveArgs = _args select 7; + _target = _saveArgs select 0; + _targetStartPos = _saveArgs select 1; + _launchPos = _saveArgs select 2; + _wentTerminal = _saveArgs select 3; + } else { + _wentTerminal = false; + _launchPos = getPosASL _shooter; + _target = ACE_player getVariable[QGVAR(currentTarget), objNull]; + _targetStartPos = ACE_player getVariable[QGVAR(currentTargetPos), [0,0,0]]; + }; + + if(!alive _missile || isNull _missile || isNull _target) exitWith { + [(_this select 1)] call cba_fnc_removePerFrameHandler; + }; + + _targetPos = getPosASL _target; + _curVelocity = velocity _missile; + + TRACE_4("", _target, _targetPos, _launchPos, _targetStartPos); + + _addHeight = [0,0,0]; + if(!isNil "_target") then { + + _yVec = vectorDir _missile; + _zVec = vectorUp _missile; + _xVec = vectorNormalized (_yVec vectorCrossProduct _zVec); + + _missilePos = getPosASL _missile; + // player sideChat "G!"; + + TRACE_4("Phase Check", _launchPos, _missilePos, _targetPos, (_missilePos distance _targetPos)); + if((count _targetPos) > 0) then { + _distanceToTarget = [(_missilePos select 0), (_missilePos select 1), (_targetPos select 2)] vectorDistance _targetPos; + + if( (_missilePos select 2) < (_targetPos select 2) + 60 && !_wentTerminal) then { + _addHeight = [0,0,(_targetPos select 2) + 120]; + + _defPitch = 0.15; + _defYaw = 0.035; + + TRACE_1("Climb phase", _addHeight); + } else { + _wentTerminal = true; + _this set[2, _wentTerminal]; + + _defPitch = 0.15; + _defYaw = 0.035; + + TRACE_1("TERMINAL", ""); + }; + _targetPos = _targetPos vectorAdd _addHeight; + + _targetVectorSeeker = [_missile, [_xVec, _yVec, _zVec], _targetPos] call FUNC(translateToWeaponSpace); + TRACE_5("", _missile, _xVec, _yVec, _zVec, _targetPos); + + _yaw = 0.0; + _pitch = 0.0; + + if((_targetVectorSeeker select 0) < 0) then { + _yaw = -_defYaw; + } else { + if((_targetVectorSeeker select 0) > 0) then { + _yaw = _defYaw; + }; + }; + + if((_targetVectorSeeker select 2) < 0) then { + _pitch = -_defPitch; + } else { + if((_targetVectorSeeker select 2) > 0) then { + _pitch = _defPitch; + }; + }; + + TRACE_3("", _targetVectorSeeker, _pitch, _yaw); + + #ifdef DEBUG_MODE_FULL + drawLine3D [(ASLtoATL _targetPos) vectorAdd _addHeight, ASLtoATL _targetPos, [0,1,0,1]]; + + _light = "#lightpoint" createVehicleLocal (getPos _missile); + _light setLightBrightness 1.0; + _light setLightAmbient [1.0, 0.0, 0.0]; + _light setLightColor [1.0, 0.0, 0.0]; + + drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,1,1,1], ASLtoATL _missilePos, 0.75, 0.75, 0, str _vectorTo, 1, 0.025, "TahomaB"]; + drawLine3D [ASLtoATL _missilePos, ASLtoATL _targetPos, [1,0,0,1]]; + + MARKERCOUNT = MARKERCOUNT + 1; + #endif + + if(accTime > 0) then { + TRACE_5("", _xVec, _yVec, _zVec, _yaw, _pitch); + _outVector = [_missile, [_xVec, _yVec, _zVec], [_yaw, 1/accTime, _pitch]] call FUNC(translateToModelSpace); + + _vectorTo = _missilePos vectorFromTo _outVector; + TRACE_3("", _missile, _outVector, _vectorTo); + _missile setVectorDirAndUp [_vectorTo, vectorUp _missile]; + }; + + #ifdef DEBUG_MODE_FULL + hintSilent format["d: %1", _distanceToTarget]; + #endif + }; + }; + + _saveArgs = [_target,_targetStartPos, _launchPos, _wentTerminal]; + _args set[7, _saveArgs ]; + _this set[0, _args]; +}; + +FUNC(guidance_Javelin_LOBL_TOP_PFH) = { + TRACE_1("enter", _this); + private["_pitch", "_yaw", "_wentTerminal", "_target", "_targetPos", "_curVelocity", "_missile", + "_launchPos", "_targetStartPos", "_defPitch", "_defYaw"]; + _args = _this select 0; + //PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); + _shooter = _args select 0; + _missile = _args select 6; + + if((count _args) > 7) then { + _saveArgs = _args select 7; + _target = _saveArgs select 0; + _targetStartPos = _saveArgs select 1; + _launchPos = _saveArgs select 2; + _wentTerminal = _saveArgs select 3; + } else { + _wentTerminal = false; + _launchPos = getPosASL _shooter; + _target = ACE_player getVariable[QGVAR(currentTarget), objNull]; + _targetStartPos = ACE_player getVariable[QGVAR(currentTargetPos), [0,0,0]]; + }; + + if(!alive _missile || isNull _missile || isNull _target) exitWith { + [(_this select 1)] call cba_fnc_removePerFrameHandler; + }; + + _targetPos = getPosASL _target; + _curVelocity = velocity _missile; + + TRACE_4("", _target, _targetPos, _launchPos, _targetStartPos); + + _addHeight = [0,0,0]; + if(!isNil "_target") then { + + _yVec = vectorDir _missile; + _zVec = vectorUp _missile; + _xVec = vectorNormalized (_yVec vectorCrossProduct _zVec); + + _missilePos = getPosASL _missile; + // player sideChat "G!"; + + TRACE_4("Phase Check", _launchPos, _missilePos, _targetPos, (_missilePos distance _targetPos)); + if((count _targetPos) > 0) then { + _distanceToTarget = [(_missilePos select 0), (_missilePos select 1), (_targetPos select 2)] vectorDistance _targetPos; + + if( (_missilePos select 2) < (_targetPos select 2) + 200 && !_wentTerminal) then { + _addHeight = [0,0, ( (_distanceToTarget * 2) + 400)]; + + _defPitch = 0.25; + _defYaw = 0.035; + + TRACE_1("Climb phase", _addHeight); + } else { + _wentTerminal = true; + _this set[2, _wentTerminal]; + + _defPitch = 0.25; + _defYaw = 0.25; + + TRACE_1("TERMINAL", ""); + }; + _targetPos = _targetPos vectorAdd _addHeight; + + _targetVectorSeeker = [_missile, [_xVec, _yVec, _zVec], _targetPos] call FUNC(translateToWeaponSpace); + TRACE_5("", _missile, _xVec, _yVec, _zVec, _targetPos); + + _yaw = 0.0; + _pitch = 0.0; + + // Stop jinking on terminal final decent + if((_missilePos distance _targetPos) < 150) then { + _defPitch = 0.0015; + _defYaw = 0.0015; + }; + + if((_targetVectorSeeker select 0) < 0) then { + _yaw = -_defYaw; + } else { + if((_targetVectorSeeker select 0) > 0) then { + _yaw = _defYaw; + }; + }; + + if((_targetVectorSeeker select 2) < 0) then { + _pitch = -_defPitch; + } else { + if((_targetVectorSeeker select 2) > 0) then { + _pitch = _defPitch; + }; + }; + + TRACE_3("", _targetVectorSeeker, _pitch, _yaw); + + #ifdef DEBUG_MODE_FULL + drawLine3D [(ASLtoATL _targetPos) vectorAdd _addHeight, ASLtoATL _targetPos, [0,1,0,1]]; + + _light = "#lightpoint" createVehicleLocal (getPos _missile); + _light setLightBrightness 1.0; + _light setLightAmbient [1.0, 0.0, 0.0]; + _light setLightColor [1.0, 0.0, 0.0]; + + drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,1,1,1], ASLtoATL _missilePos, 0.75, 0.75, 0, str _vectorTo, 1, 0.025, "TahomaB"]; + drawLine3D [ASLtoATL _missilePos, ASLtoATL _targetPos, [1,0,0,1]]; + + MARKERCOUNT = MARKERCOUNT + 1; + #endif + + if(accTime > 0) then { + TRACE_5("", _xVec, _yVec, _zVec, _yaw, _pitch); + _outVector = [_missile, [_xVec, _yVec, _zVec], [_yaw, 1/accTime, _pitch]] call FUNC(translateToModelSpace); + + _vectorTo = _missilePos vectorFromTo _outVector; + TRACE_3("", _missile, _outVector, _vectorTo); + _missile setVectorDirAndUp [_vectorTo, vectorUp _missile]; + }; + + #ifdef DEBUG_MODE_FULL + hintSilent format["d: %1", _distanceToTarget]; + #endif + }; + }; + + _saveArgs = [_target,_targetStartPos, _launchPos, _wentTerminal]; + _args set[7, _saveArgs ]; + _this set[0, _args]; +}; + +FUNC(guidance_Javelin_LOBL_TOP) = { + PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); + + GVAR(lastTime) = time; + [FUNC(guidance_Javelin_LOBL_TOP_PFH), 0, _this] call cba_fnc_addPerFrameHandler; +}; + +FUNC(guidance_Javelin_LOBL_DIR) = { + PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); + + GVAR(lastTime) = time; + [FUNC(guidance_Javelin_LOBL_DIR_PFH), 0, _this] call cba_fnc_addPerFrameHandler; +}; + +if(!local _shooter) exitWith { false }; +if(_ammo == "M_Titan_AT") then { + _fireMode = _shooter getVariable ["ACE_FIRE_SELECTION", ACE_JAV_FIREMODE_TOP]; + + switch (_fireMode) do { + // Default to FIREMODE_DIRECT_LOAL + // FIREMODE_DIRECT_LOAL + case ACE_JAV_FIREMODE_DIR: { + LOG("Initiating Javelin FIREMODE_LOBL_DIR"); + _this call FUNC(guidance_Javelin_LOBL_DIR); + }; + default { + LOG("Initiating Javelin FIREMODE_LOBL_TOP"); + _this call FUNC(guidance_Javelin_LOBL_TOP); + }; + }; }; \ No newline at end of file diff --git a/addons/wep_javelin/functions/fnc_lockKeyDown.sqf b/addons/wep_javelin/functions/fnc_lockKeyDown.sqf index bc3198915b..858d9373c4 100644 --- a/addons/wep_javelin/functions/fnc_lockKeyDown.sqf +++ b/addons/wep_javelin/functions/fnc_lockKeyDown.sqf @@ -1,3 +1,3 @@ -#define DEBUG_MODE_FULL -#include "script_component.hpp" +#define DEBUG_MODE_FULL +#include "script_component.hpp" TRACE_1("enter", _this); \ No newline at end of file diff --git a/addons/wep_javelin/functions/fnc_lockKeyUp.sqf b/addons/wep_javelin/functions/fnc_lockKeyUp.sqf index bc3198915b..858d9373c4 100644 --- a/addons/wep_javelin/functions/fnc_lockKeyUp.sqf +++ b/addons/wep_javelin/functions/fnc_lockKeyUp.sqf @@ -1,3 +1,3 @@ -#define DEBUG_MODE_FULL -#include "script_component.hpp" +#define DEBUG_MODE_FULL +#include "script_component.hpp" TRACE_1("enter", _this); \ No newline at end of file diff --git a/addons/wep_javelin/functions/fnc_onOpticDraw.sqf b/addons/wep_javelin/functions/fnc_onOpticDraw.sqf index 6a74b3ed57..2389904dcf 100644 --- a/addons/wep_javelin/functions/fnc_onOpticDraw.sqf +++ b/addons/wep_javelin/functions/fnc_onOpticDraw.sqf @@ -1,132 +1,132 @@ -//#define DEBUG_MODE_FULL -#include "script_component.hpp" -//TRACE_1("enter", _this); - -#define __TRACKINTERVAL 0.1 // how frequent the check should be. -#define __LOCKONTIME 1.85 // Lock on won't occur sooner -#define __LOCKONTIMERANDOM 0.3 // Deviation in lock on time -#define __SENSORSQUARE 1 // Locking on sensor square side in angles - -#define __ConstraintTop (((ctrlPosition __JavelinIGUITargetingConstrainTop) select 1) + ((ctrlPosition (__JavelinIGUITargetingConstrainTop)) select 3)) -#define __ConstraintBottom ((ctrlPosition __JavelinIGUITargetingConstrainBottom) select 1) -#define __ConstraintLeft (((ctrlPosition __JavelinIGUITargetingConstrainLeft) select 0) + ((ctrlPosition (__JavelinIGUITargetingConstrainLeft)) select 2)) -#define __ConstraintRight ((ctrlPosition __JavelinIGUITargetingConstrainRight) select 0) - -#define __OffsetX ((ctrlPosition __JavelinIGUITargetingLineV) select 0) - 0.5 -#define __OffsetY ((ctrlPosition __JavelinIGUITargetingLineH) select 1) - 0.5 - - -private["_args", "_lastTick", "_runTime", "_soundTime", "_lockTime", "_newTarget", "_currentTarget", "_range", "_pos", "_targetArray"]; - -// Reset arguments if we havnt rendered in over a second -_args = uiNamespace getVariable[QGVAR(arguments), [] ]; -if( (count _args) > 0) then { - _lastTick = _args select 0; - if(diag_tickTime - _lastTick > 1) then { - [] call FUNC(onOpticLoad); - }; -}; - -// Pull the arguments -_currentTarget = _args select 1; -_runTime = _args select 2; -_lockTime = _args select 3; -_soundTime = _args select 4; - -// Find a target within the optic range -_newTarget = objNull; - -// Bail on fast movement -if ((velocity ACE_player) distance [0,0,0] > 0.5 && {cameraView == "GUNNER"} && {cameraOn == ACE_player}) exitWith { // keep it steady. - ACE_player switchCamera "INTERNAL"; -}; - -// Only start locking on holding tab -if(!GVAR(isLockKeyDown)) exitWith { false }; - -_range = parseNumber (ctrlText __JavelinIGUIRangefinder); -if (_range > 50 && {_range < 2500}) then { - _pos = positionCameraToWorld [0,0,_range]; - _targetArray = _pos nearEntities ["AllVehicles", _range/25]; - if (count (_targetArray) > 0) then { - _newTarget = _targetArray select 0; - }; -}; - -if (isNull _newTarget) then { - _newTarget = cursorTarget; -}; - -if (isNull _newTarget) then { - // No targets found - _currentTarget = objNull; - _lockTime = 0; - - __JavelinIGUISeek ctrlSetTextColor __ColorGray; - __JavelinIGUINFOV ctrlSetTextColor __ColorGreen; - __JavelinIGUITargetingConstrains ctrlShow false; - __JavelinIGUITargetingGate ctrlShow false; - __JavelinIGUITargetingLines ctrlShow false; - - ACE_player setVariable [QGVAR(currentTarget),nil, false]; - - // Disallow fire - //if (ACE_player ammo "Javelin" > 0 || {ACE_player ammo "ACE_Javelin_Direct" > 0}) then {ACE_player setWeaponReloadingTime //[player, "Javelin", 0.2];}; -} else { - if (_newTarget distance ACE_player < 2500 - // && {(call CBA_fnc_getFoV) select 1 > 7} - // && { (currentVisionMode ACE_player == 2)} - ) then { - // Lock on after 3 seconds - if(_currentTarget != _newTarget) then { - TRACE_1("New Target, reseting locking", _newTarget); - _lockTime = diag_tickTime; - _currentTarget = _newTarget; - - playSound "ACE_Javelin_Locking"; - } else { - if(diag_tickTime - _lockTime > 3) then { - TRACE_2("LOCKED!", _currentTarget, _lockTime); - __JavelinIGUISeek ctrlSetTextColor __ColorGreen; - __JavelinIGUINFOV ctrlSetTextColor __ColorNull; - __JavelinIGUITargetingConstrains ctrlShow true; - - ACE_player setVariable[QGVAR(currentTarget), _currentTarget, false]; - ACE_player setVariable[QGVAR(currentTargetPos), getPosASL _currentTarget, false]; - - if(diag_tickTime > _soundTime) then { - playSound "ACE_Javelin_Locked"; - _soundTime = diag_tickTime + 0.25; - }; - } else { - if(diag_tickTime > _soundTime) then { - playSound "ACE_Javelin_Locking"; - _soundTime = diag_tickTime + 0.25; - }; - }; - }; - } else { - // Something is wrong with our seek - _currentTarget = objNull; - - __JavelinIGUISeek ctrlSetTextColor __ColorGray; - __JavelinIGUINFOV ctrlSetTextColor __ColorGray; - __JavelinIGUITargetingConstrains ctrlShow false; - __JavelinIGUITargetingGate ctrlShow false; - __JavelinIGUITargetingLines ctrlShow false; - - ACE_player setVariable [QGVAR(currentTarget),nil, false]; - }; - -}; - -//TRACE_2("", _newTarget, _currentTarget); - -// Save arguments for next run -_args set[0, diag_tickTime]; -_args set[1, _currentTarget]; -_args set[2, _runTime]; -_args set[3, _lockTime]; -_args set[4, _soundTime]; - +//#define DEBUG_MODE_FULL +#include "script_component.hpp" +//TRACE_1("enter", _this); + +#define __TRACKINTERVAL 0.1 // how frequent the check should be. +#define __LOCKONTIME 1.85 // Lock on won't occur sooner +#define __LOCKONTIMERANDOM 0.3 // Deviation in lock on time +#define __SENSORSQUARE 1 // Locking on sensor square side in angles + +#define __ConstraintTop (((ctrlPosition __JavelinIGUITargetingConstrainTop) select 1) + ((ctrlPosition (__JavelinIGUITargetingConstrainTop)) select 3)) +#define __ConstraintBottom ((ctrlPosition __JavelinIGUITargetingConstrainBottom) select 1) +#define __ConstraintLeft (((ctrlPosition __JavelinIGUITargetingConstrainLeft) select 0) + ((ctrlPosition (__JavelinIGUITargetingConstrainLeft)) select 2)) +#define __ConstraintRight ((ctrlPosition __JavelinIGUITargetingConstrainRight) select 0) + +#define __OffsetX ((ctrlPosition __JavelinIGUITargetingLineV) select 0) - 0.5 +#define __OffsetY ((ctrlPosition __JavelinIGUITargetingLineH) select 1) - 0.5 + + +private["_args", "_lastTick", "_runTime", "_soundTime", "_lockTime", "_newTarget", "_currentTarget", "_range", "_pos", "_targetArray"]; + +// Reset arguments if we havnt rendered in over a second +_args = uiNamespace getVariable[QGVAR(arguments), [] ]; +if( (count _args) > 0) then { + _lastTick = _args select 0; + if(diag_tickTime - _lastTick > 1) then { + [] call FUNC(onOpticLoad); + }; +}; + +// Pull the arguments +_currentTarget = _args select 1; +_runTime = _args select 2; +_lockTime = _args select 3; +_soundTime = _args select 4; + +// Find a target within the optic range +_newTarget = objNull; + +// Bail on fast movement +if ((velocity ACE_player) distance [0,0,0] > 0.5 && {cameraView == "GUNNER"} && {cameraOn == ACE_player}) exitWith { // keep it steady. + ACE_player switchCamera "INTERNAL"; +}; + +// Only start locking on holding tab +if(!GVAR(isLockKeyDown)) exitWith { false }; + +_range = parseNumber (ctrlText __JavelinIGUIRangefinder); +if (_range > 50 && {_range < 2500}) then { + _pos = positionCameraToWorld [0,0,_range]; + _targetArray = _pos nearEntities ["AllVehicles", _range/25]; + if (count (_targetArray) > 0) then { + _newTarget = _targetArray select 0; + }; +}; + +if (isNull _newTarget) then { + _newTarget = cursorTarget; +}; + +if (isNull _newTarget) then { + // No targets found + _currentTarget = objNull; + _lockTime = 0; + + __JavelinIGUISeek ctrlSetTextColor __ColorGray; + __JavelinIGUINFOV ctrlSetTextColor __ColorGreen; + __JavelinIGUITargetingConstrains ctrlShow false; + __JavelinIGUITargetingGate ctrlShow false; + __JavelinIGUITargetingLines ctrlShow false; + + ACE_player setVariable [QGVAR(currentTarget),nil, false]; + + // Disallow fire + //if (ACE_player ammo "Javelin" > 0 || {ACE_player ammo "ACE_Javelin_Direct" > 0}) then {ACE_player setWeaponReloadingTime //[player, "Javelin", 0.2];}; +} else { + if (_newTarget distance ACE_player < 2500 + // && {(call CBA_fnc_getFoV) select 1 > 7} + // && { (currentVisionMode ACE_player == 2)} + ) then { + // Lock on after 3 seconds + if(_currentTarget != _newTarget) then { + TRACE_1("New Target, reseting locking", _newTarget); + _lockTime = diag_tickTime; + _currentTarget = _newTarget; + + playSound "ACE_Javelin_Locking"; + } else { + if(diag_tickTime - _lockTime > 3) then { + TRACE_2("LOCKED!", _currentTarget, _lockTime); + __JavelinIGUISeek ctrlSetTextColor __ColorGreen; + __JavelinIGUINFOV ctrlSetTextColor __ColorNull; + __JavelinIGUITargetingConstrains ctrlShow true; + + ACE_player setVariable[QGVAR(currentTarget), _currentTarget, false]; + ACE_player setVariable[QGVAR(currentTargetPos), getPosASL _currentTarget, false]; + + if(diag_tickTime > _soundTime) then { + playSound "ACE_Javelin_Locked"; + _soundTime = diag_tickTime + 0.25; + }; + } else { + if(diag_tickTime > _soundTime) then { + playSound "ACE_Javelin_Locking"; + _soundTime = diag_tickTime + 0.25; + }; + }; + }; + } else { + // Something is wrong with our seek + _currentTarget = objNull; + + __JavelinIGUISeek ctrlSetTextColor __ColorGray; + __JavelinIGUINFOV ctrlSetTextColor __ColorGray; + __JavelinIGUITargetingConstrains ctrlShow false; + __JavelinIGUITargetingGate ctrlShow false; + __JavelinIGUITargetingLines ctrlShow false; + + ACE_player setVariable [QGVAR(currentTarget),nil, false]; + }; + +}; + +//TRACE_2("", _newTarget, _currentTarget); + +// Save arguments for next run +_args set[0, diag_tickTime]; +_args set[1, _currentTarget]; +_args set[2, _runTime]; +_args set[3, _lockTime]; +_args set[4, _soundTime]; + uiNamespace setVariable[QGVAR(arguments), _args ]; \ No newline at end of file diff --git a/addons/wep_javelin/functions/fnc_onOpticLoad.sqf b/addons/wep_javelin/functions/fnc_onOpticLoad.sqf index c4a7069630..88fc99e19b 100644 --- a/addons/wep_javelin/functions/fnc_onOpticLoad.sqf +++ b/addons/wep_javelin/functions/fnc_onOpticLoad.sqf @@ -1,17 +1,17 @@ -//#define DEBUG_MODE_FULL -#include "script_component.hpp" -TRACE_1("enter", _this); - -if((count _this) > 0) then { - uiNameSpace setVariable ['ACE_RscOptics_javelin',_this select 0]; -}; - -uiNameSpace setVariable [QGVAR(arguments), - [ - 0, // Last runtime - objNull, // currentTargetObject - 0, // Run Time - 0, // Lock Time - 0 // Sound timer - ] +//#define DEBUG_MODE_FULL +#include "script_component.hpp" +TRACE_1("enter", _this); + +if((count _this) > 0) then { + uiNameSpace setVariable ['ACE_RscOptics_javelin',_this select 0]; +}; + +uiNameSpace setVariable [QGVAR(arguments), + [ + 0, // Last runtime + objNull, // currentTargetObject + 0, // Run Time + 0, // Lock Time + 0 // Sound timer + ] ]; \ No newline at end of file diff --git a/addons/wep_javelin/functions/fnc_translateToModelSpace.sqf b/addons/wep_javelin/functions/fnc_translateToModelSpace.sqf index 12f828769a..8b80cf9958 100644 --- a/addons/wep_javelin/functions/fnc_translateToModelSpace.sqf +++ b/addons/wep_javelin/functions/fnc_translateToModelSpace.sqf @@ -1,20 +1,20 @@ -//#define DEBUG_MODE_FULL -#include "script_component.hpp" -TRACE_1("enter", _this); - -_object = _this select 0; -_origin = getPosASL _object; -_matrix = _this select 1; -_xVec = _matrix select 0; -_yVec = _matrix select 1; -_zVec = _matrix select 2; - -_offset = _this select 2; - -_x = _offset select 0; -_y = _offset select 1; -_z = _offset select 2; - -_out = (((_xVec vectorMultiply _x) vectorAdd (_yVec vectorMultiply _y)) vectorAdd (_zVec vectorMultiply _z)) vectorAdd _origin; - +//#define DEBUG_MODE_FULL +#include "script_component.hpp" +TRACE_1("enter", _this); + +_object = _this select 0; +_origin = getPosASL _object; +_matrix = _this select 1; +_xVec = _matrix select 0; +_yVec = _matrix select 1; +_zVec = _matrix select 2; + +_offset = _this select 2; + +_x = _offset select 0; +_y = _offset select 1; +_z = _offset select 2; + +_out = (((_xVec vectorMultiply _x) vectorAdd (_yVec vectorMultiply _y)) vectorAdd (_zVec vectorMultiply _z)) vectorAdd _origin; + _out; \ No newline at end of file diff --git a/addons/wep_javelin/functions/fnc_translateToWeaponSpace.sqf b/addons/wep_javelin/functions/fnc_translateToWeaponSpace.sqf index 8f85005d48..6b42e20ef9 100644 --- a/addons/wep_javelin/functions/fnc_translateToWeaponSpace.sqf +++ b/addons/wep_javelin/functions/fnc_translateToWeaponSpace.sqf @@ -1,26 +1,26 @@ -//#define DEBUG_MODE_FULL -#include "script_component.hpp" -TRACE_1("enter", _this); - -_object = _this select 0; -_origin = getPosASL _object; -_matrix = _this select 1; -_xVec = _matrix select 0; -_yVec = _matrix select 1; -_zVec = _matrix select 2; - -_offset = _this select 2; - -_offset = _offset vectorDiff _origin; - -_x = _offset select 0; -_y = _offset select 1; -_z = _offset select 2; - -_out = [ - ((_xVec select 0)*_x) + ((_xVec select 1)*_y) + ((_xVec select 2)*_z), - ((_yVec select 0)*_x) + ((_yVec select 1)*_y) + ((_yVec select 2)*_z), - ((_zVec select 0)*_x) + ((_zVec select 1)*_y) + ((_zVec select 2)*_z) - ]; - +//#define DEBUG_MODE_FULL +#include "script_component.hpp" +TRACE_1("enter", _this); + +_object = _this select 0; +_origin = getPosASL _object; +_matrix = _this select 1; +_xVec = _matrix select 0; +_yVec = _matrix select 1; +_zVec = _matrix select 2; + +_offset = _this select 2; + +_offset = _offset vectorDiff _origin; + +_x = _offset select 0; +_y = _offset select 1; +_z = _offset select 2; + +_out = [ + ((_xVec select 0)*_x) + ((_xVec select 1)*_y) + ((_xVec select 2)*_z), + ((_yVec select 0)*_x) + ((_yVec select 1)*_y) + ((_yVec select 2)*_z), + ((_zVec select 0)*_x) + ((_zVec select 1)*_y) + ((_zVec select 2)*_z) + ]; + _out; \ No newline at end of file diff --git a/addons/wep_javelin/initKeybinds.sqf b/addons/wep_javelin/initKeybinds.sqf index 126b1395a3..b8c5e490df 100644 --- a/addons/wep_javelin/initKeybinds.sqf +++ b/addons/wep_javelin/initKeybinds.sqf @@ -1,30 +1,30 @@ -// by commy2 - -["ACE3", QGVAR(lockTarget), localize "STR_ACE_WEP_JAVELIN_LockTarget", -{ - if (GETGVAR(isLockKeyDown,false)) exitWith {false}; - - GVAR(isLockKeyDown) = true; - - // Statement - [ACE_player] call FUNC(lockKeyDown); - // Return false so it doesn't block the rest weapon action - false -}, -{ - // prevent holding down - GVAR(isLockKeyDown) = false; - - // Statement - [ACE_player] call FUNC(lockKeyUp); - false -}, -[15, [false, false, false]], false] call cba_fnc_addKeybind; //Tab Key - -["ACE3", QGVAR(cycleFireMode), localize "STR_ACE_WEP_JAVELIN_CycleFireMode", -{ false }, -{ - [ACE_player] call FUNC(cycleFireMode); - false -}, +// by commy2 + +["ACE3", QGVAR(lockTarget), localize "STR_ACE_WEP_JAVELIN_LockTarget", +{ + if (GETGVAR(isLockKeyDown,false)) exitWith {false}; + + GVAR(isLockKeyDown) = true; + + // Statement + [ACE_player] call FUNC(lockKeyDown); + // Return false so it doesn't block the rest weapon action + false +}, +{ + // prevent holding down + GVAR(isLockKeyDown) = false; + + // Statement + [ACE_player] call FUNC(lockKeyUp); + false +}, +[15, [false, false, false]], false] call cba_fnc_addKeybind; //Tab Key + +["ACE3", QGVAR(cycleFireMode), localize "STR_ACE_WEP_JAVELIN_CycleFireMode", +{ false }, +{ + [ACE_player] call FUNC(cycleFireMode); + false +}, [15, [false, true, false]], false] call cba_fnc_addKeybind; //Shift+Tab Key \ No newline at end of file diff --git a/addons/wep_javelin/script_component.hpp b/addons/wep_javelin/script_component.hpp index 3df1273422..2c75308cd4 100644 --- a/addons/wep_javelin/script_component.hpp +++ b/addons/wep_javelin/script_component.hpp @@ -1,53 +1,53 @@ -#define COMPONENT wep_javelin -#include "\z\ace\Addons\main\script_mod.hpp" - -#ifdef DEBUG_ENABLED_WEP_JAVELIN - #define DEBUG_MODE_FULL -#endif - -#ifdef DEBUG_SETTINGS_WEP_JAVELIN - #define DEBUG_SETTINGS DEBUG_SETTINGS_WEP_JAVELIN -#endif - -#include "\z\ace\Addons\main\script_macros.hpp" - -#define ACE_JAV_FIREMODE_DIR 1 -#define ACE_JAV_FIREMODE_TOP 2 - - -// Javelin IGUI defines -#define __JavelinIGUI (uinamespace getVariable "ACE_RscOptics_javelin") - -// Custom controls -#define __JavelinIGUISeek (__JavelinIGUI displayCtrl 699000) -#define __JavelinIGUITop (__JavelinIGUI displayCtrl 699001) -#define __JavelinIGUIDir (__JavelinIGUI displayCtrl 699002) -#define __JavelinIGUINFOV (__JavelinIGUI displayCtrl 699003) - -// Constrains -#define __JavelinIGUITargetingConstrains (__JavelinIGUI displayCtrl 699100) -#define __JavelinIGUITargetingConstrainTop (__JavelinIGUI displayCtrl 699101) -#define __JavelinIGUITargetingConstrainBottom (__JavelinIGUI displayCtrl 699102) -#define __JavelinIGUITargetingConstrainLeft (__JavelinIGUI displayCtrl 699103) -#define __JavelinIGUITargetingConstrainRight (__JavelinIGUI displayCtrl 699104) - -// Targeting gate -#define __JavelinIGUITargetingGate (__JavelinIGUI displayCtrl 699200) -#define __JavelinIGUITargetingGateTL (__JavelinIGUI displayCtrl 699201) -#define __JavelinIGUITargetingGateTR (__JavelinIGUI displayCtrl 699202) -#define __JavelinIGUITargetingGateBL (__JavelinIGUI displayCtrl 699203) -#define __JavelinIGUITargetingGateBR (__JavelinIGUI displayCtrl 699204) - -// Rangefinder -#define __JavelinIGUIRangefinder (__JavelinIGUI displayCtrl 151) - -// Targeting lines -#define __JavelinIGUITargetingLines (__JavelinIGUI displayCtrl 699300) -#define __JavelinIGUITargetingLineH (__JavelinIGUI displayCtrl 699301) -#define __JavelinIGUITargetingLineV (__JavelinIGUI displayCtrl 699302) - -// Colors for controls -#define __ColorOrange [0.9255,0.5216,0.1216,1] -#define __ColorGreen [0.2941,0.8745,0.2157,1] -#define __ColorGray [0.2941,0.2941,0.2941,1] +#define COMPONENT wep_javelin +#include "\z\ace\Addons\main\script_mod.hpp" + +#ifdef DEBUG_ENABLED_WEP_JAVELIN + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_WEP_JAVELIN + #define DEBUG_SETTINGS DEBUG_SETTINGS_WEP_JAVELIN +#endif + +#include "\z\ace\Addons\main\script_macros.hpp" + +#define ACE_JAV_FIREMODE_DIR 1 +#define ACE_JAV_FIREMODE_TOP 2 + + +// Javelin IGUI defines +#define __JavelinIGUI (uinamespace getVariable "ACE_RscOptics_javelin") + +// Custom controls +#define __JavelinIGUISeek (__JavelinIGUI displayCtrl 699000) +#define __JavelinIGUITop (__JavelinIGUI displayCtrl 699001) +#define __JavelinIGUIDir (__JavelinIGUI displayCtrl 699002) +#define __JavelinIGUINFOV (__JavelinIGUI displayCtrl 699003) + +// Constrains +#define __JavelinIGUITargetingConstrains (__JavelinIGUI displayCtrl 699100) +#define __JavelinIGUITargetingConstrainTop (__JavelinIGUI displayCtrl 699101) +#define __JavelinIGUITargetingConstrainBottom (__JavelinIGUI displayCtrl 699102) +#define __JavelinIGUITargetingConstrainLeft (__JavelinIGUI displayCtrl 699103) +#define __JavelinIGUITargetingConstrainRight (__JavelinIGUI displayCtrl 699104) + +// Targeting gate +#define __JavelinIGUITargetingGate (__JavelinIGUI displayCtrl 699200) +#define __JavelinIGUITargetingGateTL (__JavelinIGUI displayCtrl 699201) +#define __JavelinIGUITargetingGateTR (__JavelinIGUI displayCtrl 699202) +#define __JavelinIGUITargetingGateBL (__JavelinIGUI displayCtrl 699203) +#define __JavelinIGUITargetingGateBR (__JavelinIGUI displayCtrl 699204) + +// Rangefinder +#define __JavelinIGUIRangefinder (__JavelinIGUI displayCtrl 151) + +// Targeting lines +#define __JavelinIGUITargetingLines (__JavelinIGUI displayCtrl 699300) +#define __JavelinIGUITargetingLineH (__JavelinIGUI displayCtrl 699301) +#define __JavelinIGUITargetingLineV (__JavelinIGUI displayCtrl 699302) + +// Colors for controls +#define __ColorOrange [0.9255,0.5216,0.1216,1] +#define __ColorGreen [0.2941,0.8745,0.2157,1] +#define __ColorGray [0.2941,0.2941,0.2941,1] #define __ColorNull [0,0,0,0] \ No newline at end of file diff --git a/addons/wep_javelin/stringtable.xml b/addons/wep_javelin/stringtable.xml index 4068d6f0a6..4654be3b03 100644 --- a/addons/wep_javelin/stringtable.xml +++ b/addons/wep_javelin/stringtable.xml @@ -1,24 +1,24 @@ - - - - - - Lock Target (Hold) - Lock Target (Hold) - Lock Target (Hold) - Lock Target (Hold) - Lock Target (Hold) - Lock Target (Hold) - Lock Target (Hold) - - - Cycle Fire Mode - Cycle Fire Mode - Cycle Fire Mode - Cycle Fire Mode - Cycle Fire Mode - Cycle Fire Mode - Cycle Fire Mode - - - + + + + + + Lock Target (Hold) + Lock Target (Hold) + Lock Target (Hold) + Lock Target (Hold) + Lock Target (Hold) + Lock Target (Hold) + Захватить цель (удерживать) + + + Cycle Fire Mode + Cycle Fire Mode + Cycle Fire Mode + Cycle Fire Mode + Cycle Fire Mode + Cycle Fire Mode + Переключение режимов огня + + + \ No newline at end of file diff --git a/addons/winddeflection/stringtable.xml b/addons/winddeflection/stringtable.xml index b52100046f..e3006d2ff1 100644 --- a/addons/winddeflection/stringtable.xml +++ b/addons/winddeflection/stringtable.xml @@ -1,32 +1,38 @@ - - - - - - Wind Information - Informacje o wietrze - Información del viento - - - Direction: %1 - Kierunek: %1 - Dirección: %1 - - - Speed: %1 m/s - Prędkość: %1 - Velocidad: %1 m/s - - - Weather Information - Informacje o pogodzie - Información Meteorológica - - - Humidity: %1% - Wilgotność: %1 - Humedad: %1% - - - - + + + + + + + Wind Information + Informacje o wietrze + Información del viento + Ветер + + + Direction: %1 + Kierunek: %1 + Dirección: %1 + Направление: + + + Speed: %1 m/s + Prędkość: %1 + Velocidad: %1 m/s + Скорость: %1 м/с + + + Weather Information + Informacje o pogodzie + Información Meteorológica + Погода + + + Humidity: %1% + Wilgotność: %1 + Humedad: %1% + Влажность: %1% + + + + \ No newline at end of file diff --git a/extensions/CMakeLists.txt b/extensions/CMakeLists.txt index f0e21e9207..a962f42ff3 100644 --- a/extensions/CMakeLists.txt +++ b/extensions/CMakeLists.txt @@ -1,31 +1,31 @@ -cmake_minimum_required (VERSION 3.0) -project (ACE) - -if (NOT CMAKE_BUILD_TYPE AND CMAKE_COMPILER_IS_GNUCXX) - message(STATUS "No build type selected, default to Debug") - set(CMAKE_BUILD_TYPE "Debug") -endif() - -option(USE_64BIT_BUILD "USE_64BIT_BUILD" OFF) -option(USE_STATIC_LINKING "USE_STATIC_LINKING" ON) - - -if(CMAKE_COMPILER_IS_GNUCXX) - SET(CMAKE_CXX_FLAGS "-std=c++11 -march=i686 -m32 -O2 -s -fPIC -fpermissive") - set(CMAKE_FIND_LIBRARY_SUFFIXES ".a") - set(CMAKE_SHARED_LINKER_FLAGS "-static-libgcc -static-libstdc++") -else() - set(CMAKE_CXX_FLAGS_DEBUG "/D _DEBUG /MTd /Zi /Ob0 /Od /RTC1") - set(CMAKE_CXX_FLAGS_MINSIZEREL "/MT /O1 /Ob1 /D NDEBUG") - set(CMAKE_CXX_FLAGS_RELEASE "/MT /O2 /Ob2 /D NDEBUG") - set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/MT /Zi /O2 /Ob1 /D NDEBUG") -endif() - -file(GLOB ACE_COMMON_SOURCES common/*.h common/*.hpp common/*.c common/*.cpp) -add_library(ace_common STATIC ${ACE_COMMON_SOURCES}) -include_directories(AFTER "common") - -# Add extensions to build here -add_subdirectory(fcs) - +cmake_minimum_required (VERSION 3.0) +project (ACE) + +if (NOT CMAKE_BUILD_TYPE AND CMAKE_COMPILER_IS_GNUCXX) + message(STATUS "No build type selected, default to Debug") + set(CMAKE_BUILD_TYPE "Debug") +endif() + +option(USE_64BIT_BUILD "USE_64BIT_BUILD" OFF) +option(USE_STATIC_LINKING "USE_STATIC_LINKING" ON) + + +if(CMAKE_COMPILER_IS_GNUCXX) + SET(CMAKE_CXX_FLAGS "-std=c++11 -march=i686 -m32 -O2 -s -fPIC -fpermissive") + set(CMAKE_FIND_LIBRARY_SUFFIXES ".a") + set(CMAKE_SHARED_LINKER_FLAGS "-static-libgcc -static-libstdc++") +else() + set(CMAKE_CXX_FLAGS_DEBUG "/D _DEBUG /MTd /Zi /Ob0 /Od /RTC1") + set(CMAKE_CXX_FLAGS_MINSIZEREL "/MT /O1 /Ob1 /D NDEBUG") + set(CMAKE_CXX_FLAGS_RELEASE "/MT /O2 /Ob2 /D NDEBUG") + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/MT /Zi /O2 /Ob1 /D NDEBUG") +endif() + +file(GLOB ACE_COMMON_SOURCES common/*.h common/*.hpp common/*.c common/*.cpp) +add_library(ace_common STATIC ${ACE_COMMON_SOURCES}) +include_directories(AFTER "common") + +# Add extensions to build here +add_subdirectory(fcs) + message("Build Type: ${CMAKE_BUILD_TYPE}") \ No newline at end of file diff --git a/extensions/build/.gitignore b/extensions/build/.gitignore index 44c5ea8fa7..86d0cb2726 100644 --- a/extensions/build/.gitignore +++ b/extensions/build/.gitignore @@ -1,4 +1,4 @@ -# Ignore everything in this directory -* -# Except this file +# Ignore everything in this directory +* +# Except this file !.gitignore \ No newline at end of file diff --git a/extensions/common/ace_common.cpp b/extensions/common/ace_common.cpp index 6ccd690c3a..2f887450f2 100644 --- a/extensions/common/ace_common.cpp +++ b/extensions/common/ace_common.cpp @@ -1,4 +1,4 @@ - -int test(int var) { - return var; + +int test(int var) { + return var; } \ No newline at end of file diff --git a/extensions/common/ace_common.h b/extensions/common/ace_common.h index 4a8847b209..d20e16d06b 100644 --- a/extensions/common/ace_common.h +++ b/extensions/common/ace_common.h @@ -1,4 +1,4 @@ -#pragma once - -#include "targetver.h" - +#pragma once + +#include "targetver.h" + diff --git a/extensions/common/targetver.h b/extensions/common/targetver.h index 781012c18f..91fa5cc012 100644 --- a/extensions/common/targetver.h +++ b/extensions/common/targetver.h @@ -1,8 +1,8 @@ -#pragma once - -#ifdef _WIN32 - #define WIN32_LEAN_AND_MEAN - #include -#else - +#pragma once + +#ifdef _WIN32 + #define WIN32_LEAN_AND_MEAN + #include +#else + #endif \ No newline at end of file diff --git a/extensions/fcs/CMakeLists.txt b/extensions/fcs/CMakeLists.txt index 2b24542566..db26d85b2a 100644 --- a/extensions/fcs/CMakeLists.txt +++ b/extensions/fcs/CMakeLists.txt @@ -1,11 +1,11 @@ -set(ACE_EXTENSION_NAME "ace_fcs") - -file(GLOB SOURCES *.h *.hpp *.c *.cpp) -add_library( ${ACE_EXTENSION_NAME} SHARED ${SOURCES}) -add_dependencies(${ACE_EXTENSION_NAME} ace_common) -SET_TARGET_PROPERTIES(${ACE_EXTENSION_NAME} PROPERTIES PREFIX "") - -if(CMAKE_COMPILER_IS_GNUCXX) - set_target_properties(${ACE_EXTENSION_NAME} PROPERTIES LINK_SEARCH_START_STATIC 1) - set_target_properties(${ACE_EXTENSION_NAME} PROPERTIES LINK_SEARCH_END_STATIC 1) +set(ACE_EXTENSION_NAME "ace_fcs") + +file(GLOB SOURCES *.h *.hpp *.c *.cpp) +add_library( ${ACE_EXTENSION_NAME} SHARED ${SOURCES}) +add_dependencies(${ACE_EXTENSION_NAME} ace_common) +SET_TARGET_PROPERTIES(${ACE_EXTENSION_NAME} PROPERTIES PREFIX "") + +if(CMAKE_COMPILER_IS_GNUCXX) + set_target_properties(${ACE_EXTENSION_NAME} PROPERTIES LINK_SEARCH_START_STATIC 1) + set_target_properties(${ACE_EXTENSION_NAME} PROPERTIES LINK_SEARCH_END_STATIC 1) endif() \ No newline at end of file From 584c77a0b6e67f3d92cd1aa100aa23a13025e7fc Mon Sep 17 00:00:00 2001 From: Grzegorz Date: Fri, 10 Apr 2015 17:07:40 +0200 Subject: [PATCH 097/214] microdagr PL translation fixes --- addons/microdagr/stringtable.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/microdagr/stringtable.xml b/addons/microdagr/stringtable.xml index ccedfd346f..b064aef598 100644 --- a/addons/microdagr/stringtable.xml +++ b/addons/microdagr/stringtable.xml @@ -20,7 +20,7 @@ Show Waypoints On Map: - Pokaż pkt. trasy na mapie: + Pokaż PT na mapie: Degrees @@ -67,7 +67,7 @@ Range: Reichweite: - Odległość: + Dystans: Compass Direction From 68d08b8c7b9bd7191165e3d454e0f33fc739d3a8 Mon Sep 17 00:00:00 2001 From: EpMAK Date: Fri, 10 Apr 2015 19:46:18 +0300 Subject: [PATCH 098/214] Revert "Translation" This reverts commit fab5605ad5018ad9a96a19f2f974a4fcc4ef9f27. --- .gitattributes | 17 - .gitignore | 12 +- addons/aircraft/Heli_Attack_01_base_F.hpp | 1956 ++++++------- addons/aircraft/RscInGameUI.hpp | 1160 ++++---- addons/attach/stringtable.xml | 20 +- addons/ballistics/CfgAmmo.hpp | 38 +- addons/captives/stringtable.xml | 9 +- .../common/functions/fnc__handleNetEvent.sqf | 146 +- .../common/functions/fnc_addEventHandler.sqf | 62 +- addons/common/functions/fnc_dumpArray.sqf | 50 +- .../functions/fnc_dumpPerformanceCounters.sqf | 144 +- .../functions/fnc_getTurretDirection.sqf | 72 +- addons/common/functions/fnc_globalEvent.sqf | 42 +- addons/common/functions/fnc_localEvent.sqf | 66 +- .../functions/fnc_removeAllEventHandlers.sqf | 40 +- .../functions/fnc_removeEventHandler.sqf | 46 +- addons/common/functions/fnc_serverEvent.sqf | 58 +- addons/common/functions/fnc_targetEvent.sqf | 66 +- addons/common/functions/script_component.hpp | 24 +- addons/common/stringtable.xml | 16 +- addons/dragging/stringtable.xml | 7 +- addons/explosives/stringtable.xml | 48 +- addons/fcs/functions/fnc_onForceUpdate.sqf | 12 +- addons/fcs/stringtable.xml | 148 +- addons/frag/CfgAmmo.hpp | 704 ++--- addons/frag/CfgEventhandlers.hpp | 34 +- addons/frag/XEH_post_init.sqf | 34 +- addons/frag/XEH_pre_Init.sqf | 90 +- addons/frag/config.cpp | 32 +- .../frag/functions/fnc_BIS_ARTY_WRAPPER.sqf | 24 +- addons/frag/functions/fnc_addBlackList.sqf | 6 +- addons/frag/functions/fnc_addManualTrack.sqf | 12 +- addons/frag/functions/fnc_addTrack.sqf | 38 +- addons/frag/functions/fnc_clearTraces.sqf | 2 +- addons/frag/functions/fnc_denyFrag.sqf | 12 +- addons/frag/functions/fnc_doSpall.sqf | 330 +-- addons/frag/functions/fnc_drawTraces.sqf | 62 +- addons/frag/functions/fnc_frag_trace.sqf | 18 +- addons/frag/functions/fnc_frago.sqf | 460 +-- addons/frag/functions/fnc_removeTrack.sqf | 26 +- addons/frag/functions/fnc_spallHP.sqf | 56 +- addons/frag/functions/fnc_spallTrack.sqf | 78 +- addons/frag/functions/fnc_startTracing.sqf | 8 +- addons/frag/functions/fnc_stopTracing.sqf | 8 +- addons/frag/functions/fnc_trackFragRound.sqf | 104 +- addons/frag/functions/fnc_trackTrace.sqf | 26 +- addons/frag/functions/fnc_vectorDiffFast.sqf | 30 +- addons/frag/script_component.hpp | 30 +- addons/frag/stringtable.xml | 28 +- addons/goggles/stringtable.xml | 6 +- addons/grenades/stringtable.xml | 8 +- addons/hearing/stringtable.xml | 3 +- addons/interact_menu/XEH_clientInit.sqf | 104 +- addons/interact_menu/stringtable.xml | 7 +- addons/interaction/stringtable.xml | 5 +- addons/inventory/stringtable.xml | 4 +- addons/kestrel/stringtable.xml | 4 +- addons/laser/CfgEventhandlers.hpp | 22 +- addons/laser/CfgVehicles.hpp | 16 +- addons/laser/XEH_post_init.sqf | 6 +- addons/laser/XEH_pre_init.sqf | 50 +- addons/laser/config.cpp | 26 +- addons/laser/functions/fnc_checkLos.sqf | 60 +- .../functions/fnc_findLaserDesignator.sqf | 138 +- .../laser/functions/fnc_findStrongestRay.sqf | 96 +- addons/laser/functions/fnc_laserTargetPFH.sqf | 52 +- addons/laser/functions/fnc_laser_init.sqf | 50 +- addons/laser/functions/fnc_rotateVectLine.sqf | 74 +- .../functions/fnc_rotateVectLineGetMap.sqf | 72 +- addons/laser/functions/fnc_shootCone.sqf | 130 +- addons/laser/functions/fnc_shootRay.sqf | 58 +- .../functions/fnc_translateToModelSpace.sqf | 30 +- .../functions/fnc_translateToWeaponSpace.sqf | 42 +- addons/laser/script_component.hpp | 28 +- .../laser_selfdesignate/CfgEventhandlers.hpp | 36 +- addons/laser_selfdesignate/CfgUI.hpp | 62 +- addons/laser_selfdesignate/CfgVehicles.hpp | 60 +- addons/laser_selfdesignate/CfgWeapons.hpp | 22 +- addons/laser_selfdesignate/XEH_post_init.sqf | 6 +- addons/laser_selfdesignate/XEH_pre_init.sqf | 22 +- addons/laser_selfdesignate/config.cpp | 34 +- .../functions/fnc_laserHudDesignateOff.sqf | 38 +- .../functions/fnc_laserHudDesignateOn.sqf | 222 +- .../functions/script_component.hpp | 2 +- .../laser_selfdesignate/script_component.hpp | 24 +- addons/laser_selfdesignate/stringtable.xml | 4 +- addons/laserpointer/stringtable.xml | 10 +- addons/logistics_uavbattery/stringtable.xml | 10 +- addons/logistics_wirecutter/stringtable.xml | 10 +- addons/magazinerepack/stringtable.xml | 5 +- addons/magazines/stringtable.xml | 38 +- addons/main/About.hpp | 70 +- addons/main/CfgModuleCategories.hpp | 14 +- addons/main/about.sqf | 418 +-- addons/main/config.cpp | 1178 ++++---- addons/main/license.sqf | 184 +- addons/main/license.txt | 184 +- addons/main/script_common.hpp | 6 +- addons/main/script_component.hpp | 28 +- addons/main/script_config.hpp | 86 +- addons/main/script_debug.hpp | 90 +- addons/main/script_macros.hpp | 488 +-- addons/main/script_macros_menudef.hpp | 52 +- addons/main/script_mod.hpp | 110 +- addons/maptools/stringtable.xml | 4 +- addons/markers/stringtable.xml | 4 +- addons/medical/stringtable.xml | 1837 ++++++------ addons/microdagr/stringtable.xml | 24 +- addons/missileguidance/CfgAmmo.hpp | 18 +- addons/missileguidance/CfgEventhandlers.hpp | 32 +- addons/missileguidance/CfgWeapons.hpp | 66 +- addons/missileguidance/XEH_post_init.sqf | 6 +- addons/missileguidance/XEH_pre_init.sqf | 26 +- addons/missileguidance/config.cpp | 28 +- .../missileguidance/functions/fnc_fired.sqf | 36 +- .../functions/fnc_guidance_DAGR.sqf | 238 +- .../functions/fnc_guidance_HellfireII.sqf | 496 ++-- .../functions/fnc_guidance_LGB.sqf | 216 +- .../functions/fnc_rotateVectLine.sqf | 74 +- .../functions/fnc_rotateVectLineGetMap.sqf | 72 +- .../functions/fnc_translateToModelSpace.sqf | 30 +- .../functions/fnc_translateToWeaponSpace.sqf | 42 +- addons/missileguidance/script_component.hpp | 26 +- addons/nametags/stringtable.xml | 5 +- addons/optionsmenu/stringtable.xml | 19 +- addons/overheating/stringtable.xml | 4 +- addons/realisticnames/stringtable.xml | 2608 +++++++++-------- addons/reload/stringtable.xml | 10 +- addons/reloadlaunchers/stringtable.xml | 46 +- addons/respawn/stringtable.xml | 7 +- addons/switchunits/stringtable.xml | 5 +- addons/weaponselect/stringtable.xml | 6 +- addons/wep_javelin/CfgEventhandlers.hpp | 34 +- addons/wep_javelin/CfgSounds.hpp | 26 +- addons/wep_javelin/RscInGameUI.hpp | 916 +++--- addons/wep_javelin/XEH_clientInit.sqf | 4 +- addons/wep_javelin/XEH_post_init.sqf | 4 +- addons/wep_javelin/XEH_pre_init.sqf | 28 +- addons/wep_javelin/config.cpp | 28 +- .../functions/fnc_cycleFireMode.sqf | 38 +- addons/wep_javelin/functions/fnc_fired.sqf | 568 ++-- .../wep_javelin/functions/fnc_lockKeyDown.sqf | 4 +- .../wep_javelin/functions/fnc_lockKeyUp.sqf | 4 +- .../wep_javelin/functions/fnc_onOpticDraw.sqf | 262 +- .../wep_javelin/functions/fnc_onOpticLoad.sqf | 32 +- .../functions/fnc_translateToModelSpace.sqf | 38 +- .../functions/fnc_translateToWeaponSpace.sqf | 50 +- addons/wep_javelin/initKeybinds.sqf | 58 +- addons/wep_javelin/script_component.hpp | 104 +- addons/wep_javelin/stringtable.xml | 48 +- addons/winddeflection/stringtable.xml | 70 +- extensions/CMakeLists.txt | 60 +- extensions/build/.gitignore | 6 +- extensions/common/ace_common.cpp | 6 +- extensions/common/ace_common.h | 8 +- extensions/common/targetver.h | 14 +- extensions/fcs/CMakeLists.txt | 20 +- 157 files changed, 9703 insertions(+), 9827 deletions(-) delete mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index bdb0cabc87..0000000000 --- a/.gitattributes +++ /dev/null @@ -1,17 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto - -# Custom for Visual Studio -*.cs diff=csharp - -# Standard to msysgit -*.doc diff=astextplain -*.DOC diff=astextplain -*.docx diff=astextplain -*.DOCX diff=astextplain -*.dot diff=astextplain -*.DOT diff=astextplain -*.pdf diff=astextplain -*.PDF diff=astextplain -*.rtf diff=astextplain -*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore index a363b6b9c4..76f95dcd10 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ -release/* -*.cache -*.pbo -texHeaders.bin -*.swp -*.swo +release/* +*.cache +*.pbo +texHeaders.bin +*.swp +*.swo diff --git a/addons/aircraft/Heli_Attack_01_base_F.hpp b/addons/aircraft/Heli_Attack_01_base_F.hpp index c7e953d378..7276b3e402 100644 --- a/addons/aircraft/Heli_Attack_01_base_F.hpp +++ b/addons/aircraft/Heli_Attack_01_base_F.hpp @@ -1,979 +1,979 @@ -class Heli_Attack_01_base_F: Helicopter_Base_F { - lockDetectionSystem = 12; - incomingMissileDetectionSystem = 16; - driverCanEject = 1; - - class MFD - { - class AirplaneHUD - { - class Bones{}; - class Draw{}; - topLeft = "HUD_top_left"; - topRight = "HUD_top_right"; - bottomLeft = "HUD_bottom_left"; - borderLeft = 0; - borderRight = 0; - borderTop = 0; - borderBottom = 0; - color[] = {0.15,1,0.15,1}; - enableParallax = 0; - helmetMountedDisplay = 1; - helmetPosition[] = {0,0,0}; - helmetRight[] = {0,0,0}; - helmetDown[] = {0,0,0}; - }; - class ACE_HUD_1 - { - topLeft = "HUD_top_left"; - topRight = "HUD_top_right"; - bottomLeft = "HUD_bottom_left"; - borderLeft = 0; - borderRight = 0; - borderTop = 0; - borderBottom = 0; - color[] = {0.15,1,0.15,1}; - enableParallax = 0; - class Bones - { - class GunnerAim - { - type = "vector"; - source = "weapon"; - pos0[] = {0.5,"0.9 - 0.04 + 0.012"}; - pos10[] = {"0.5 + 0.0111","0.9 - 0.04 + 0.012 + 0.0133"}; - }; - class Target - { - source = "target"; - type = "vector"; - pos0[] = {0.5,0.5}; - pos10[] = {0.85,0.85}; - }; - class Velocity - { - type = "vector"; - source = "velocity"; - pos0[] = {0.5,0.5}; - pos10[] = {0.65,0.65}; - }; - class Velocity_slip - { - type = "vector"; - source = "velocity"; - pos0[] = {0.5,0.845}; - pos10[] = {0.53,0.845}; - }; - class VspeedBone - { - type = "linear"; - source = "vspeed"; - sourceScale = 1; - min = -10; - max = 10; - minPos[] = {0.93,0.2}; - maxPos[] = {0.93,0.8}; - }; - class RadarAltitudeBone - { - type = "linear"; - source = "altitudeAGL"; - sourceScale = 1; - min = 0; - max = 60; - minPos[] = {0.965,0.2}; - maxPos[] = {0.965,0.8}; - }; - class HorizonBankRot - { - type = "rotational"; - source = "horizonBank"; - center[] = {0.5,0.5}; - min = -3.1416; - max = 3.1416; - minAngle = -180; - maxAngle = 180; - aspectRatio = 1; - }; - class ForwardVec - { - type = "vector"; - source = "forward"; - pos0[] = {0,0}; - pos10[] = {0.25,0.25}; - }; - class WeaponAim - { - type = "vector"; - source = "weapon"; - pos0[] = {0.5,0.5}; - pos10[] = {0.75,0.75}; - }; - class Level0 - { - type = "horizon"; - pos0[] = {0.5,0.5}; - pos10[] = {0.78,0.78}; - angle = 0; - }; - class LevelP5: Level0 - { - angle = 5; - }; - class LevelM5: Level0 - { - angle = -5; - }; - class LevelP10: Level0 - { - angle = 10; - }; - class LevelM10: Level0 - { - angle = -10; - }; - class LevelP15: Level0 - { - angle = 15; - }; - class LevelM15: Level0 - { - angle = -15; - }; - class LevelP20: Level0 - { - angle = 20; - }; - class LevelM20: Level0 - { - angle = -20; - }; - class LevelP25: Level0 - { - angle = 25; - }; - class LevelM25: Level0 - { - angle = -25; - }; - class LevelP30: Level0 - { - angle = 30; - }; - class LevelM30: Level0 - { - angle = -30; - }; - class LevelP35: Level0 - { - angle = 35; - }; - class LevelM35: Level0 - { - angle = -35; - }; - class LevelP40: Level0 - { - angle = 40; - }; - class LevelM40: Level0 - { - angle = -40; - }; - class LevelP45: Level0 - { - angle = 45; - }; - class LevelM45: Level0 - { - angle = -45; - }; - class LevelP50: Level0 - { - angle = 50; - }; - class LevelM50: Level0 - { - angle = -50; - }; - }; - class Draw - { - color[] = {0.18,1,0.18}; - alpha = 1; - condition = "on"; - class Horizont - { - clipTL[] = {0.15,0.15}; - clipBR[] = {0.85,0.85}; - class Dimmed - { - class Level0 - { - type = "line"; - points[] = {{ "Level0",{ -0.42,0 },1 },{ "Level0",{ -0.38,0 },1 },{ },{ "Level0",{ -0.37,0 },1 },{ "Level0",{ -0.33,0 },1 },{ },{ "Level0",{ -0.32,0 },1 },{ "Level0",{ -0.28,0 },1 },{ },{ "Level0",{ -0.27,0 },1 },{ "Level0",{ -0.23,0 },1 },{ },{ "Level0",{ -0.22,0 },1 },{ "Level0",{ -0.18,0 },1 },{ },{ "Level0",{ -0.17,0 },1 },{ "Level0",{ -0.13,0 },1 },{ },{ "Level0",{ -0.12,0 },1 },{ "Level0",{ -0.08,0 },1 },{ },{ "Level0",{ 0.42,0 },1 },{ "Level0",{ 0.38,0 },1 },{ },{ "Level0",{ 0.37,0 },1 },{ "Level0",{ 0.33,0 },1 },{ },{ "Level0",{ 0.32,0 },1 },{ "Level0",{ 0.28,0 },1 },{ },{ "Level0",{ 0.27,0 },1 },{ "Level0",{ 0.23,0 },1 },{ },{ "Level0",{ 0.22,0 },1 },{ "Level0",{ 0.18,0 },1 },{ },{ "Level0",{ 0.17,0 },1 },{ "Level0",{ 0.13,0 },1 },{ },{ "Level0",{ 0.12,0 },1 },{ "Level0",{ 0.08,0 },1 }}; - }; - }; - }; - class HorizonBankRot - { - type = "line"; - width = 3; - points[] = {{ "HorizonBankRot",{ 0,0.25 },1 },{ "HorizonBankRot",{ -0.01,0.23 },1 },{ "HorizonBankRot",{ 0.01,0.23 },1 },{ "HorizonBankRot",{ 0,0.25 },1 }}; - }; - class Static_HAD_BOX - { - clipTL[] = {0,1}; - clipBR[] = {1,0}; - type = "line"; - width = 5; - points[] = {{ { "0.5-0.1","0.9-0.04" },1 },{ { "0.5-0.1","0.9+0.04" },1 },{ { "0.5+0.1","0.9+0.04" },1 },{ { "0.5+0.1","0.9-0.04" },1 },{ { "0.5-0.1","0.9-0.04" },1 },{ },{ { "0.5-0.1","0.9-0.04+0.012" },1 },{ { "0.5-0.092","0.9-0.04+0.012" },1 },{ },{ { "0.5+0.1","0.9-0.04+0.012" },1 },{ { "0.5+0.092","0.9-0.04+0.012" },1 },{ },{ { 0.5,"0.9-0.04" },1 },{ { 0.5,"0.9-0.032" },1 },{ },{ { 0.5,"0.9+0.04" },1 },{ { 0.5,"0.9+0.032" },1 },{ }}; - }; - class Gunner_HAD - { - type = "line"; - width = 6; - points[] = {{ "GunnerAim",{ -0.015,-0.008 },1 },{ "GunnerAim",{ -0.015,0.008 },1 },{ "GunnerAim",{ 0.015,0.008 },1 },{ "GunnerAim",{ 0.015,-0.008 },1 },{ "GunnerAim",{ -0.015,-0.008 },1 }}; - }; - class Slip_ball_group - { - class Slip_bars - { - type = "line"; - width = 4; - points[] = {{ { "0.5-0.018","0.9-0.04" },1 },{ { "0.5-0.018","0.9-0.075" },1 },{ },{ { "0.5+0.018","0.9-0.04" },1 },{ { "0.5+0.018","0.9-0.075" },1 }}; - }; - class Slip_ball - { - type = "line"; - width = 6; - points[] = {{ "Velocity_slip",1,{ "0 * 0.75","-0.02 * 0.75" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.75","-0.01732 * 0.75" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.75","-0.0099999998 * 0.75" },1 },{ "Velocity_slip",1,{ "0.02 * 0.75","0 * 0.75" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.75","0.0099999998 * 0.75" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.75","0.01732 * 0.75" },1 },{ "Velocity_slip",1,{ "0 * 0.75","0.02 * 0.75" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.75","0.01732 * 0.75" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.75","0.0099999998 * 0.75" },1 },{ "Velocity_slip",1,{ "-0.02 * 0.75","0 * 0.75" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.75","-0.0099999998 * 0.75" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.75","-0.01732 * 0.75" },1 },{ "Velocity_slip",1,{ "0 * 0.75","-0.02 * 0.75" },1 },{ },{ "Velocity_slip",1,{ "0 * 0.6","-0.02 * 0.6" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.6","-0.01732 * 0.6" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.6","-0.0099999998 * 0.6" },1 },{ "Velocity_slip",1,{ "0.02 * 0.6","0 * 0.6" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.6","0.0099999998 * 0.6" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.6","0.01732 * 0.6" },1 },{ "Velocity_slip",1,{ "0 * 0.6","0.02 * 0.6" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.6","0.01732 * 0.6" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.6","0.0099999998 * 0.6" },1 },{ "Velocity_slip",1,{ "-0.02 * 0.6","0 * 0.6" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.6","-0.0099999998 * 0.6" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.6","-0.01732 * 0.6" },1 },{ "Velocity_slip",1,{ "0 * 0.6","-0.02 * 0.6" },1 },{ },{ "Velocity_slip",1,{ "0 * 0.5","-0.02 * 0.5" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.5","-0.01732 * 0.5" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.5","-0.0099999998 * 0.5" },1 },{ "Velocity_slip",1,{ "0.02 * 0.5","0 * 0.5" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.5","0.0099999998 * 0.5" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.5","0.01732 * 0.5" },1 },{ "Velocity_slip",1,{ "0 * 0.5","0.02 * 0.5" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.5","0.01732 * 0.5" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.5","0.0099999998 * 0.5" },1 },{ "Velocity_slip",1,{ "-0.02 * 0.5","0 * 0.5" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.5","-0.0099999998 * 0.5" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.5","-0.01732 * 0.5" },1 },{ "Velocity_slip",1,{ "0 * 0.5","-0.02 * 0.5" },1 },{ },{ "Velocity_slip",1,{ "0 * 0.4","-0.02 * 0.4" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.4","-0.01732 * 0.4" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.4","-0.0099999998 * 0.4" },1 },{ "Velocity_slip",1,{ "0.02 * 0.4","0 * 0.4" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.4","0.0099999998 * 0.4" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.4","0.01732 * 0.4" },1 },{ "Velocity_slip",1,{ "0 * 0.4","0.02 * 0.4" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.4","0.01732 * 0.4" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.4","0.0099999998 * 0.4" },1 },{ "Velocity_slip",1,{ "-0.02 * 0.4","0 * 0.4" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.4","-0.0099999998 * 0.4" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.4","-0.01732 * 0.4" },1 },{ "Velocity_slip",1,{ "0 * 0.4","-0.02 * 0.4" },1 },{ },{ "Velocity_slip",1,{ "0 * 0.30","-0.02 * 0.30" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.30","-0.01732 * 0.30" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.30","-0.0099999998 * 0.30" },1 },{ "Velocity_slip",1,{ "0.02 * 0.30","0 * 0.30" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.30","0.0099999998 * 0.30" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.30","0.01732 * 0.30" },1 },{ "Velocity_slip",1,{ "0 * 0.30","0.02 * 0.30" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.30","0.01732 * 0.30" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.30","0.0099999998 * 0.30" },1 },{ "Velocity_slip",1,{ "-0.02 * 0.30","0 * 0.30" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.30","-0.0099999998 * 0.30" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.30","-0.01732 * 0.30" },1 },{ "Velocity_slip",1,{ "0 * 0.30","-0.02 * 0.30" },1 },{ },{ "Velocity_slip",1,{ "0 * 0.20","-0.02 * 0.20" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.20","-0.01732 * 0.20" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.20","-0.0099999998 * 0.20" },1 },{ "Velocity_slip",1,{ "0.02 * 0.20","0 * 0.20" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.20","0.0099999998 * 0.20" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.20","0.01732 * 0.20" },1 },{ "Velocity_slip",1,{ "0 * 0.20","0.02 * 0.20" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.20","0.01732 * 0.20" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.20","0.0099999998 * 0.20" },1 },{ "Velocity_slip",1,{ "-0.02 * 0.20","0 * 0.20" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.20","-0.0099999998 * 0.20" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.20","-0.01732 * 0.20" },1 },{ "Velocity_slip",1,{ "0 * 0.20","-0.02 * 0.20" },1 },{ },{ "Velocity_slip",1,{ "0 * 0.1","-0.02 * 0.1" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.1","-0.01732 * 0.1" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.1","-0.0099999998 * 0.1" },1 },{ "Velocity_slip",1,{ "0.02 * 0.1","0 * 0.1" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.1","0.0099999998 * 0.1" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.1","0.01732 * 0.1" },1 },{ "Velocity_slip",1,{ "0 * 0.1","0.02 * 0.1" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.1","0.01732 * 0.1" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.1","0.0099999998 * 0.1" },1 },{ "Velocity_slip",1,{ "-0.02 * 0.1","0 * 0.1" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.1","-0.0099999998 * 0.1" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.1","-0.01732 * 0.1" },1 },{ "Velocity_slip",1,{ "0 * 0.1","-0.02 * 0.1" },1 }}; - }; - }; - class Centerline - { - type = "line"; - width = 5; - points[] = {{ { 0.5,0.48 },1 },{ { 0.5,0.45 },1 },{ },{ { 0.5,0.52 },1 },{ { 0.5,0.55 },1 },{ },{ { 0.48,0.5 },1 },{ { 0.45,0.5 },1 },{ },{ { 0.52,0.5 },1 },{ { 0.55,0.5 },1 },{ }}; - }; - class WeaponName - { - type = "text"; - source = "weapon"; - sourceScale = 1; - align = "right"; - scale = 1; - pos[] = {{ 0.61,0.86 },1}; - right[] = {{ 0.65,0.86 },1}; - down[] = {{ 0.61,0.9 },1}; - }; - class Ammo_GUN - { - type = "group"; - condition = "mgun"; - class Ammo_count_GUN - { - type = "text"; - source = "ammo"; - sourceScale = 1; - align = "right"; - scale = 1; - pos[] = {{ 0.61,0.89 },1}; - right[] = {{ 0.65,0.89 },1}; - down[] = {{ 0.61,0.93 },1}; - }; - }; - class Ammo_RKT - { - type = "group"; - condition = "rocket"; - class Ammo_count_RKT - { - type = "text"; - source = "ammo"; - sourceScale = 1; - align = "right"; - scale = 1; - pos[] = {{ 0.61,0.89 },1}; - right[] = {{ 0.65,0.89 },1}; - down[] = {{ 0.61,0.93 },1}; - }; - }; - class Ammo_AGM - { - type = "group"; - condition = "AAmissile"; - class Ammo_count_AGM - { - type = "text"; - source = "ammo"; - sourceScale = 1; - align = "right"; - scale = 1; - pos[] = {{ 0.61,0.89 },1}; - right[] = {{ 0.65,0.89 },1}; - down[] = {{ 0.61,0.93 },1}; - }; - }; - class Ammo_AAM - { - type = "group"; - condition = "ATmissile"; - class Ammo_count_AAM - { - type = "text"; - source = "ammo"; - sourceScale = 1; - align = "right"; - scale = 1; - pos[] = {{ 0.61,0.89 },1}; - right[] = {{ 0.65,0.89 },1}; - down[] = {{ 0.61,0.93 },1}; - }; - }; - class Ammo_Bomb - { - type = "group"; - condition = "Bomb"; - class Ammo_count_Bomb - { - type = "text"; - source = "ammo"; - sourceScale = 1; - align = "right"; - scale = 1; - pos[] = {{ 0.61,0.89 },1}; - right[] = {{ 0.65,0.89 },1}; - down[] = {{ 0.61,0.93 },1}; - }; - }; - class LightsGroup - { - type = "group"; - condition = "lights"; - class LightsText - { - type = "text"; - source = "static"; - text = "LIGHTS"; - align = "right"; - scale = 1; - pos[] = {{ 0.03,"0.53 + 0.055" },1}; - right[] = {{ 0.07,"0.53 + 0.055" },1}; - down[] = {{ 0.03,"0.53 + 0.095" },1}; - }; - }; - class CollisionLightsGroup - { - type = "group"; - condition = "collisionlights"; - class CollisionLightsText - { - type = "text"; - source = "static"; - text = "A-COL"; - align = "right"; - scale = 1; - pos[] = {{ 0.03,"0.53 + 0.105" },1}; - right[] = {{ 0.07,"0.53 + 0.105" },1}; - down[] = {{ 0.03,"0.53 + 0.145" },1}; - }; - }; - class GearGroup - { - type = "group"; - condition = "ils"; - class GearText - { - type = "text"; - source = "static"; - text = "GEAR"; - align = "right"; - scale = 1; - pos[] = {{ 0.03,"0.53 + 0.155" },1}; - right[] = {{ 0.07,"0.53 + 0.155" },1}; - down[] = {{ 0.03,"0.53 + 0.195" },1}; - }; - }; - class ATMissileTOFGroup - { - condition = "ATmissile"; - type = "group"; - class TOFtext - { - type = "text"; - align = "right"; - source = "static"; - text = "TOF="; - scale = 1; - pos[] = {{ 0.61,0.92 },1}; - right[] = {{ 0.65,0.92 },1}; - down[] = {{ 0.61,0.96 },1}; - }; - class TOFnumber - { - type = "text"; - source = "targetDist"; - sourcescale = 0.0025; - align = "right"; - scale = 1; - pos[] = {{ 0.69,0.92 },1}; - right[] = {{ 0.73,0.92 },1}; - down[] = {{ 0.69,0.96 },1}; - }; - }; - class LaserTOFGroup - { - condition = "Bomb"; - type = "group"; - class TOFtext - { - type = "text"; - align = "right"; - source = "static"; - text = "TOF="; - scale = 1; - pos[] = {{ 0.61,0.92 },1}; - right[] = {{ 0.65,0.92 },1}; - down[] = {{ 0.61,0.96 },1}; - }; - class TOFnumber - { - type = "text"; - source = "targetDist"; - sourcescale = 0.0025; - align = "right"; - scale = 1; - pos[] = {{ 0.69,0.92 },1}; - right[] = {{ 0.73,0.92 },1}; - down[] = {{ 0.69,0.96 },1}; - }; - }; - class RocketTOFGroup - { - condition = "Rocket"; - type = "group"; - class TOFtext - { - type = "text"; - align = "right"; - source = "static"; - text = "TOF="; - scale = 1; - pos[] = {{ 0.61,0.92 },1}; - right[] = {{ 0.65,0.92 },1}; - down[] = {{ 0.61,0.96 },1}; - }; - class TOFnumber - { - type = "text"; - source = "targetDist"; - sourcescale = 0.0025; - align = "right"; - scale = 1; - pos[] = {{ 0.69,0.92 },1}; - right[] = {{ 0.73,0.92 },1}; - down[] = {{ 0.69,0.96 },1}; - }; - }; - class RangeNumber - { - type = "text"; - source = "targetDist"; - sourceScale = 1; - align = "left"; - scale = 1; - pos[] = {{ 0.39,0.89 },1}; - right[] = {{ 0.43,0.89 },1}; - down[] = {{ 0.39,0.93 },1}; - }; - class RangeText - { - type = "text"; - source = "static"; - text = "RNG"; - align = "left"; - scale = 1; - pos[] = {{ 0.39,0.86 },1}; - right[] = {{ 0.43,0.86 },1}; - down[] = {{ 0.39,0.9 },1}; - }; - class SpeedNumber - { - type = "text"; - align = "right"; - scale = 1; - source = "speed"; - sourceScale = 3.6; - pos[] = {{ 0.03,0.475 },1}; - right[] = {{ 0.08,0.475 },1}; - down[] = {{ 0.03,0.525 },1}; - }; - class TorqueNumber - { - condition = "simulRTD"; - class Torque_number - { - type = "text"; - align = "left"; - scale = 1; - source = "rtdRotorTorque"; - sourceScale = 290; - pos[] = {{ 0.065,0.175 },1}; - right[] = {{ 0.115,0.175 },1}; - down[] = {{ 0.065,0.225 },1}; - }; - class Torquetext - { - type = "text"; - source = "static"; - text = "%"; - align = "right"; - scale = 1; - pos[] = {{ 0.07,0.175 },1}; - right[] = {{ 0.12,0.175 },1}; - down[] = {{ 0.07,0.225 },1}; - }; - }; - class AltNumber: SpeedNumber - { - align = "right"; - source = "altitudeAGL"; - sourceScale = 1; - pos[] = {{ 0.83,0.475 },1}; - right[] = {{ 0.88,0.475 },1}; - down[] = {{ 0.83,0.525 },1}; - }; - class ASLNumber - { - type = "text"; - source = "altitudeASL"; - sourceScale = 1; - align = "right"; - scale = 1; - pos[] = {{ 0.835,0.18 },1}; - right[] = {{ 0.875,0.18 },1}; - down[] = {{ 0.835,0.22 },1}; - }; - class VspeedScalePosta - { - type = "line"; - width = 5; - points[] = {{ { 0.98,0.2 },1 },{ { 1,0.2 },1 },{ },{ { 0.93,0.2 },1 },{ { 0.95,0.2 },1 },{ },{ { 0.98,0.35 },1 },{ { 1,0.35 },1 },{ },{ { 0.93,0.35 },1 },{ { 0.95,0.35 },1 },{ },{ { 0.94,0.38 },1 },{ { 0.95,0.38 },1 },{ },{ { 0.94,0.41 },1 },{ { 0.95,0.41 },1 },{ },{ { 0.94,0.44 },1 },{ { 0.95,0.44 },1 },{ },{ { 0.94,0.47 },1 },{ { 0.95,0.47 },1 },{ },{ { 0.98,0.5 },1 },{ { 1,0.5 },1 },{ },{ { 0.93,0.5 },1 },{ { 0.95,0.5 },1 },{ },{ { 0.94,0.53 },1 },{ { 0.95,0.53 },1 },{ },{ { 0.94,0.56 },1 },{ { 0.95,0.56 },1 },{ },{ { 0.94,0.59 },1 },{ { 0.95,0.59 },1 },{ },{ { 0.94,0.62 },1 },{ { 0.95,0.62 },1 },{ },{ { 0.98,0.65 },1 },{ { 1,0.65 },1 },{ },{ { 0.93,0.65 },1 },{ { 0.95,0.65 },1 },{ },{ { 0.99,0.68 },1 },{ { 0.98,0.68 },1 },{ },{ { 0.99,0.71 },1 },{ { 0.98,0.71 },1 },{ },{ { 0.99,0.74 },1 },{ { 0.98,0.74 },1 },{ },{ { 0.99,0.77 },1 },{ { 0.98,0.77 },1 },{ },{ { 0.98,0.8 },1 },{ { 1,0.8 },1 },{ },{ { 0.93,0.8 },1 },{ { 0.95,0.8 },1 },{ }}; - }; - class RadarAltitudeBand - { - clipTL[] = {0,0.2}; - clipBR[] = {1,0.8}; - hideValue = 201; - class radarbanda - { - type = "line"; - width = 17; - points[] = {{ "RadarAltitudeBone",{ 0,0 },1 },{ "RadarAltitudeBone",{ 0,0.6 },1 }}; - }; - }; - class VspeedBand - { - type = "line"; - width = 3; - points[] = {{ "VspeedBone",{ -0.01,0 },1 },{ "VspeedBone",{ -0.025,-0.015 },1 },{ "VspeedBone",{ -0.025,0.015 },1 },{ "VspeedBone",{ -0.01,0 },1 },{ }}; - }; - class HeadingNumber: SpeedNumber - { - source = "heading"; - sourceScale = 1; - align = "center"; - pos[] = {{ 0.5,0.045 },1}; - right[] = {{ 0.56,0.045 },1}; - down[] = {{ 0.5,"0.045 + 0.06" },1}; - }; - class Center_box - { - type = "line"; - width = 1.5; - points[] = {{ { 0.45,"0.02 + 0.085 - 0.06" },1 },{ { "0.45 + 0.10","0.02 + 0.085 - 0.06" },1 },{ { "0.45 + 0.10","0.02 + 0.085" },1 },{ { 0.45,"0.02 + 0.085" },1 },{ { 0.45,"0.02 + 0.085 - 0.06" },1 }}; - }; - class HeadingArrow - { - type = "line"; - width = 7; - points[] = {{ { "0.5","0.128 + 0.03" },1 },{ { 0.5,0.128 },1 }}; - }; - class HeadingScale_LEFT - { - clipTL[] = {0,0}; - clipBR[] = {0.45,1}; - class Heading_group - { - type = "scale"; - horizontal = 1; - source = "heading"; - sourceScale = 1; - width = 5; - top = 0.12; - center = 0.5; - bottom = 0.88; - lineXleft = "0.03 + 0.085"; - lineYright = "0.02 + 0.085"; - lineXleftMajor = "0.04 + 0.085"; - lineYrightMajor = "0.02 + 0.085"; - majorLineEach = 3; - numberEach = 3; - step = 10; - stepSize = "0.05"; - align = "center"; - scale = 1; - pos[] = {0.12,"0.0 + 0.065"}; - right[] = {0.16,"0.0 + 0.065"}; - down[] = {0.12,"0.04 + 0.065"}; - }; - }; - class HeadingScale_RIGHT - { - clipTL[] = {0.55,0}; - clipBR[] = {1,1}; - class Heading_group - { - type = "scale"; - horizontal = 1; - source = "heading"; - sourceScale = 1; - width = 5; - top = 0.12; - center = 0.5; - bottom = 0.88; - lineXleft = "0.03 + 0.085"; - lineYright = "0.02 + 0.085"; - lineXleftMajor = "0.04 + 0.085"; - lineYrightMajor = "0.02 + 0.085"; - majorLineEach = 3; - numberEach = 3; - step = 10; - stepSize = "0.05"; - align = "center"; - scale = 1; - pos[] = {0.12,"0.0 + 0.065"}; - right[] = {0.16,"0.0 + 0.065"}; - down[] = {0.12,"0.04 + 0.065"}; - }; - }; - class HeadingScale_BOTTOM - { - clipTL[] = {0.45,"0.02 + 0.085"}; - clipBR[] = {"0.45 + 0.10",1}; - class Heading_group - { - type = "scale"; - horizontal = 1; - source = "heading"; - sourceScale = 1; - width = 5; - top = 0.12; - center = 0.5; - bottom = 0.88; - lineXleft = "0.03 + 0.085"; - lineYright = "0.02 + 0.085"; - lineXleftMajor = "0.04 + 0.085"; - lineYrightMajor = "0.02 + 0.085"; - majorLineEach = 3; - numberEach = 3; - step = 10; - stepSize = "0.05"; - align = "center"; - scale = 1; - pos[] = {0.12,"0.0 + 0.065"}; - right[] = {0.16,"0.0 + 0.065"}; - down[] = {0.12,"0.04 + 0.065"}; - }; - }; - class Fuel_Text - { - type = "text"; - source = "static"; - text = "Fuel"; - align = "right"; - scale = 1; - pos[] = {{ 0.03,0.9 },1}; - right[] = {{ 0.07,0.9 },1}; - down[] = {{ 0.03,0.94 },1}; - }; - class Fuel_Number - { - type = "text"; - source = "fuel"; - sourceScale = 100; - align = "right"; - scale = 1; - pos[] = {{ 0.1,0.9 },1}; - right[] = {{ 0.14,0.9 },1}; - down[] = {{ 0.1,0.94 },1}; - }; - }; - helmetMountedDisplay = 1; - helmetPosition[] = {-0.04,0.04,0.1}; - helmetRight[] = {0.08,0,0}; - helmetDown[] = {0,-0.08,0}; - }; - class ACE_HUD_2 - { - topLeft = "HUD_top_left"; - topRight = "HUD_top_right"; - bottomLeft = "HUD_bottom_left"; - borderLeft = 0; - borderRight = 0; - borderTop = 0; - borderBottom = 0; - color[] = {0.15,1,0.15,1}; - enableParallax = 0; - class Bones - { - class Velocity - { - type = "vector"; - source = "velocity"; - pos0[] = {0.5,0.5}; - pos10[] = {0.75,0.75}; - }; - class ForwardVec1 - { - type = "vector"; - source = "forward"; - pos0[] = {0,0}; - pos10[] = {0.25,0.25}; - }; - class ForwardVec - { - type = "vector"; - source = "forward"; - pos0[] = {0,0}; - pos10[] = {0.253,0.253}; - }; - class WeaponAim - { - type = "vector"; - source = "weapon"; - pos0[] = {0.5,0.5}; - pos10[] = {0.753,0.753}; - }; - class WeaponAim1 - { - type = "vector"; - source = "weapon"; - pos0[] = {0,0}; - pos10[] = {0.253,0.23}; - }; - class Target - { - type = "vector"; - source = "target"; - pos0[] = {0.5,0.5}; - pos10[] = {0.753,0.753}; - }; - class RadarContact - { - type = "fixed"; - pos[] = {0,0}; - }; - }; - class Draw - { - color[] = {0.18,1,0.18}; - alpha = 1; - condition = "on"; - class PlaneMovementCrosshair - { - type = "line"; - width = 7; - points[] = {{ "ForwardVec1",1,"Velocity",1,{ 0,-0.02 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0.01,-0.01732 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0.01732,-0.01 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0.02,0 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0.01732,0.01 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0.01,0.01732 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0,0.02 },1 },{ "ForwardVec1",1,"Velocity",1,{ -0.01,0.01732 },1 },{ "ForwardVec1",1,"Velocity",1,{ -0.01732,0.01 },1 },{ "ForwardVec1",1,"Velocity",1,{ -0.02,0 },1 },{ "ForwardVec1",1,"Velocity",1,{ -0.01732,-0.01 },1 },{ "ForwardVec1",1,"Velocity",1,{ -0.01,-0.01732 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0,-0.02 },1 },{ },{ "ForwardVec1",1,"Velocity",1,{ 0.04,0 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0.02,0 },1 },{ },{ "ForwardVec1",1,"Velocity",1,{ -0.04,0 },1 },{ "ForwardVec1",1,"Velocity",1,{ -0.02,0 },1 },{ },{ "ForwardVec1",1,"Velocity",1,{ 0,-0.04 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0,-0.02 },1 }}; - }; - class Gunner_AIM - { - type = "group"; - class Circle - { - type = "line"; - width = 6; - points[] = {{ "ForwardVec",1,"WeaponAim",1,{ 0,-0.015 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0,-0.03 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0,-0.0325 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0,-0.0475 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0,0.015 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0,0.03 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0,0.0325 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0,0.0475 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ -0.015,0 },1 },{ "ForwardVec",1,"WeaponAim",1,{ -0.03,0 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ -0.0325,0 },1 },{ "ForwardVec",1,"WeaponAim",1,{ -0.0475,0 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0.015,0 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0.03,0 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0.0325,0 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0.0475,0 },1 }}; - }; - }; - class GunCross - { - condition = "mgun"; - class Circle - { - type = "line"; - width = 9; - points[] = {{ "ForwardVec",1,"WeaponAim",1,{ 0,-0.05 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0,-0.015 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0,0.015 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0,0.05 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ -0.05,0 },1 },{ "ForwardVec",1,"WeaponAim",1,{ -0.015,0 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0.015,0 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0.05,0 },1 },{ }}; - }; - }; - class RocketCross - { - condition = "rocket"; - width = 6; - class Circle - { - type = "line"; - width = 6; - points[] = {{ "ForwardVec",1,"WeaponAim",1,{ -0.05,-0.08 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0.05,-0.08 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0,-0.08 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0,0.08 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ -0.05,0.08 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0.05,0.08 },1 },{ }}; - }; - }; - class AT_Aim - { - condition = "ATmissile"; - width = 2; - class Circle - { - type = "line"; - width = 2; - points[] = {{ "ForwardVec",1,"WeaponAim",1,{ -0.1,-0.1 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0.1,-0.1 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0.1,0.1 },1 },{ "ForwardVec",1,"WeaponAim",1,{ -0.1,0.1 },1 },{ "ForwardVec",1,"WeaponAim",1,{ -0.1,-0.1 },1 }}; - }; - }; - class AA_aim - { - condition = "AAmissile"; - class Circle - { - type = "line"; - width = 2.5; - points[] = {{ "ForwardVec",1,"WeaponAim",1,{ "0 / 4","-0.248559 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0434 / 4","-0.244781 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0855 / 4","-0.233571 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.125 / 4","-0.215252 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1607 / 4","-0.190396 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1915 / 4","-0.159774 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2165 / 4","-0.12428 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.234925 / 4","-0.0850072 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2462 / 4","-0.0431499 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.25 / 4","0 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2462 / 4","0.0431499 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.234925 / 4","0.0850072 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2165 / 4","0.12428 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1915 / 4","0.159774 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1607 / 4","0.190396 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.125 / 4","0.215252 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0855 / 4","0.233571 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0434 / 4","0.244781 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0 / 4","0.248559 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0434 / 4","0.244781 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0855 / 4","0.233571 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.125 / 4","0.215252 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1607 / 4","0.190396 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1915 / 4","0.159774 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2165 / 4","0.12428 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.234925 / 4","0.0850072 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2462 / 4","0.0431499 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.25 / 4","0 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2462 / 4","-0.0431499 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.234925 / 4","-0.0850072 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2165 / 4","-0.12428 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1915 / 4","-0.159774 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1607 / 4","-0.190396 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.125 / 4","-0.215252 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0855 / 4","-0.233571 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0434 / 4","-0.244781 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0 / 4","-0.248559 / 4" },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ "0 / 2","-0.248559 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0434 / 2","-0.244781 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0855 / 2","-0.233571 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.125 / 2","-0.215252 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1607 / 2","-0.190396 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1915 / 2","-0.159774 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2165 / 2","-0.12428 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.234925 / 2","-0.0850072 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2462 / 2","-0.0431499 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.25 / 2","0 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2462 / 2","0.0431499 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.234925 / 2","0.0850072 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2165 / 2","0.12428 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1915 / 2","0.159774 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1607 / 2","0.190396 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.125 / 2","0.215252 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0855 / 2","0.233571 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0434 / 2","0.244781 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0 / 2","0.248559 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0434 / 2","0.244781 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0855 / 2","0.233571 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.125 / 2","0.215252 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1607 / 2","0.190396 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1915 / 2","0.159774 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2165 / 2","0.12428 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.234925 / 2","0.0850072 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2462 / 2","0.0431499 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.25 / 2","0 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2462 / 2","-0.0431499 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.234925 / 2","-0.0850072 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2165 / 2","-0.12428 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1915 / 2","-0.159774 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1607 / 2","-0.190396 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.125 / 2","-0.215252 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0855 / 2","-0.233571 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0434 / 2","-0.244781 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0 / 2","-0.248559 / 2" },1 }}; - }; - }; - class TargetACQ - { - type = "line"; - width = 2; - points[] = {{ "ForwardVec",1,"target",{ 0,-0.06 },1 },{ "ForwardVec",1,"target",{ 0,-0.055 },1 },{ },{ "ForwardVec",1,"target",{ 0,-0.05 },1 },{ "ForwardVec",1,"target",{ 0,-0.045 },1 },{ },{ "ForwardVec",1,"target",{ 0,-0.04 },1 },{ "ForwardVec",1,"target",{ 0,-0.035 },1 },{ },{ "ForwardVec",1,"target",{ 0,-0.03 },1 },{ "ForwardVec",1,"target",{ 0,-0.025 },1 },{ },{ "ForwardVec",1,"target",{ 0,-0.02 },1 },{ "ForwardVec",1,"target",{ 0,-0.015 },1 },{ },{ "ForwardVec",1,"target",{ 0,-0.01 },1 },{ "ForwardVec",1,"target",{ 0,-0.005 },1 },{ },{ "ForwardVec",1,"target",{ 0,0 },1 },{ "ForwardVec",1,"target",{ 0,0 },1 },{ },{ "ForwardVec",1,"target",{ 0,0.06 },1 },{ "ForwardVec",1,"target",{ 0,0.055 },1 },{ },{ "ForwardVec",1,"target",{ 0,0.05 },1 },{ "ForwardVec",1,"target",{ 0,0.045 },1 },{ },{ "ForwardVec",1,"target",{ 0,0.04 },1 },{ "ForwardVec",1,"target",{ 0,0.035 },1 },{ },{ "ForwardVec",1,"target",{ 0,0.03 },1 },{ "ForwardVec",1,"target",{ 0,0.025 },1 },{ },{ "ForwardVec",1,"target",{ 0,0.02 },1 },{ "ForwardVec",1,"target",{ 0,0.015 },1 },{ },{ "ForwardVec",1,"target",{ 0,0.01 },1 },{ "ForwardVec",1,"target",{ 0,0.005 },1 },{ },{ "ForwardVec",1,"target",{ -0.06,0 },1 },{ "ForwardVec",1,"target",{ -0.055,0 },1 },{ },{ "ForwardVec",1,"target",{ -0.05,0 },1 },{ "ForwardVec",1,"target",{ -0.045,0 },1 },{ },{ "ForwardVec",1,"target",{ -0.04,0 },1 },{ "ForwardVec",1,"target",{ -0.035,0 },1 },{ },{ "ForwardVec",1,"target",{ -0.03,0 },1 },{ "ForwardVec",1,"target",{ -0.025,0 },1 },{ },{ "ForwardVec",1,"target",{ -0.02,0 },1 },{ "ForwardVec",1,"target",{ -0.015,0 },1 },{ },{ "ForwardVec",1,"target",{ -0.01,0 },1 },{ "ForwardVec",1,"target",{ -0.005,0 },1 },{ },{ "ForwardVec",1,"target",{ 0.06,0 },1 },{ "ForwardVec",1,"target",{ 0.055,0 },1 },{ },{ "ForwardVec",1,"target",{ 0.05,0 },1 },{ "ForwardVec",1,"target",{ 0.045,0 },1 },{ },{ "ForwardVec",1,"target",{ 0.04,0 },1 },{ "ForwardVec",1,"target",{ 0.035,0 },1 },{ },{ "ForwardVec",1,"target",{ 0.03,0 },1 },{ "ForwardVec",1,"target",{ 0.025,0 },1 },{ },{ "ForwardVec",1,"target",{ 0.02,0 },1 },{ "ForwardVec",1,"target",{ 0.015,0 },1 },{ },{ "ForwardVec",1,"target",{ 0.01,0 },1 },{ "ForwardVec",1,"target",{ 0.005,0 },1 },{ }}; - }; - class RadarTargets - { - type = "radar"; - pos0[] = {0.5,0.5}; - pos10[] = {0.753,0.753}; - width = 2.5; - points[] = {{ "ForwardVec",1,"RadarContact",{ -0.01,-0.01 },1 },{ "ForwardVec",1,"RadarContact",{ 0.01,-0.01 },1 },{ "ForwardVec",1,"RadarContact",{ 0.01,0.01 },1 },{ "ForwardVec",1,"RadarContact",{ -0.01,0.01 },1 },{ "ForwardVec",1,"RadarContact",{ -0.01,-0.01 },1 }}; - }; - }; - helmetMountedDisplay = 1; - helmetPosition[] = {-0.035,0.035,0.1}; - helmetRight[] = {0.07,0,0}; - helmetDown[] = {0,-0.07,0}; - }; - }; - - class Turrets: Turrets { - class MainTurret: MainTurret { - weapons[] = {"ACE_gatling_20mm_Comanche","missiles_DAGR","missiles_ASRAAM", "ACE_AIR_SAFETY"}; - magazines[] = {"ACE_500Rnd_20mm_shells_Comanche","4Rnd_AAA_missiles","24Rnd_PG_missiles"}; - - outGunnerMayFire = 1; - commanding = -1; - primaryGunner = 1; - gunnerOpticsModel = ""; - gunnerOpticsEffect[] = {"TankCommanderOptics1"}; - gunnerForceOptics = 0; - turretInfoType = "Rsc_ACE_Helo_UI_Turret"; - showAllTargets = 2; - discretedistance[] = {100,200,300,400,500,600,700,800,900,1000,1100,1200,1300,1400,1500,1600,1700,1800,1900,2000,2100,2200,2300,2400,2500,2600,2700,2800,2900,3000}; - discretedistanceinitindex = 3; - copilotHasFlares = 1; - directionStabilized = 1; - isCopilot = 1; - showHMD = 1; - CanEject = 1; - startEngine = 0; - minElev = -51; - maxElev = 9; - initElev = 6; - minTurn = -120; - maxTurn = 120; - initTurn = 0; - - class OpticsIn - { - class Wide - { - opticsDisplayName = "W"; - initAngleX = 0; - minAngleX = -35; - maxAngleX = 10; - initAngleY = 0; - minAngleY = -100; - maxAngleY = 100; - initFov = 0.466; - minFov = 0.466; - maxFov = 0.466; - visionMode[] = {"Normal","Ti"}; - thermalMode[] = {0,1}; - gunnerOpticsColor[] = {0,0,0,1}; - directionStabilized = 1; - horizontallyStabilized = 1; - gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_wide_F"; - }; - class Medium: Wide - { - opticsDisplayName = "M"; - initFov = 0.093; - minFov = 0.093; - maxFov = 0.093; - gunnerOpticsColor[] = {0,0,0,1}; - directionStabilized = 1; - horizontallyStabilized = 1; - gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_medium_F"; - }; - class Narrow: Wide - { - opticsDisplayName = "N"; - initFov = 0.029; - minFov = 0.029; - maxFov = 0.029; - gunnerOpticsColor[] = {0,0,0,1}; - directionStabilized = 1; - horizontallyStabilized = 1; - gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_narrow_F"; - - }; - class Narrower: Wide - { - opticsDisplayName = "Z"; - initFov = 0.01; - minFov = 0.01; - maxFov = 0.01; - gunnerOpticsColor[] = {0,0,0,1}; - directionStabilized = 1; - horizontallyStabilized = 1; - gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_narrow_F"; - - }; - }; - class OpticsOut - { - class Monocular - { - initAngleX = 0; - minAngleX = -30; - maxAngleX = 30; - initAngleY = 0; - minAngleY = -100; - maxAngleY = 100; - initFov = 1.1; - minFov = 0.133; - maxFov = 1.1; - visionMode[] = {"Normal","NVG"}; - gunnerOpticsModel = ""; - gunnerOpticsEffect[] = {}; - hideUnitInfo = 1; - }; - }; - }; - }; - - class AnimationSources: AnimationSources { - class Gatling { - weapon = "ACE_gatling_20mm_Comanche"; - }; - class Muzzle_flash { - weapon = "ACE_gatling_20mm_Comanche"; - }; - }; +class Heli_Attack_01_base_F: Helicopter_Base_F { + lockDetectionSystem = 12; + incomingMissileDetectionSystem = 16; + driverCanEject = 1; + + class MFD + { + class AirplaneHUD + { + class Bones{}; + class Draw{}; + topLeft = "HUD_top_left"; + topRight = "HUD_top_right"; + bottomLeft = "HUD_bottom_left"; + borderLeft = 0; + borderRight = 0; + borderTop = 0; + borderBottom = 0; + color[] = {0.15,1,0.15,1}; + enableParallax = 0; + helmetMountedDisplay = 1; + helmetPosition[] = {0,0,0}; + helmetRight[] = {0,0,0}; + helmetDown[] = {0,0,0}; + }; + class ACE_HUD_1 + { + topLeft = "HUD_top_left"; + topRight = "HUD_top_right"; + bottomLeft = "HUD_bottom_left"; + borderLeft = 0; + borderRight = 0; + borderTop = 0; + borderBottom = 0; + color[] = {0.15,1,0.15,1}; + enableParallax = 0; + class Bones + { + class GunnerAim + { + type = "vector"; + source = "weapon"; + pos0[] = {0.5,"0.9 - 0.04 + 0.012"}; + pos10[] = {"0.5 + 0.0111","0.9 - 0.04 + 0.012 + 0.0133"}; + }; + class Target + { + source = "target"; + type = "vector"; + pos0[] = {0.5,0.5}; + pos10[] = {0.85,0.85}; + }; + class Velocity + { + type = "vector"; + source = "velocity"; + pos0[] = {0.5,0.5}; + pos10[] = {0.65,0.65}; + }; + class Velocity_slip + { + type = "vector"; + source = "velocity"; + pos0[] = {0.5,0.845}; + pos10[] = {0.53,0.845}; + }; + class VspeedBone + { + type = "linear"; + source = "vspeed"; + sourceScale = 1; + min = -10; + max = 10; + minPos[] = {0.93,0.2}; + maxPos[] = {0.93,0.8}; + }; + class RadarAltitudeBone + { + type = "linear"; + source = "altitudeAGL"; + sourceScale = 1; + min = 0; + max = 60; + minPos[] = {0.965,0.2}; + maxPos[] = {0.965,0.8}; + }; + class HorizonBankRot + { + type = "rotational"; + source = "horizonBank"; + center[] = {0.5,0.5}; + min = -3.1416; + max = 3.1416; + minAngle = -180; + maxAngle = 180; + aspectRatio = 1; + }; + class ForwardVec + { + type = "vector"; + source = "forward"; + pos0[] = {0,0}; + pos10[] = {0.25,0.25}; + }; + class WeaponAim + { + type = "vector"; + source = "weapon"; + pos0[] = {0.5,0.5}; + pos10[] = {0.75,0.75}; + }; + class Level0 + { + type = "horizon"; + pos0[] = {0.5,0.5}; + pos10[] = {0.78,0.78}; + angle = 0; + }; + class LevelP5: Level0 + { + angle = 5; + }; + class LevelM5: Level0 + { + angle = -5; + }; + class LevelP10: Level0 + { + angle = 10; + }; + class LevelM10: Level0 + { + angle = -10; + }; + class LevelP15: Level0 + { + angle = 15; + }; + class LevelM15: Level0 + { + angle = -15; + }; + class LevelP20: Level0 + { + angle = 20; + }; + class LevelM20: Level0 + { + angle = -20; + }; + class LevelP25: Level0 + { + angle = 25; + }; + class LevelM25: Level0 + { + angle = -25; + }; + class LevelP30: Level0 + { + angle = 30; + }; + class LevelM30: Level0 + { + angle = -30; + }; + class LevelP35: Level0 + { + angle = 35; + }; + class LevelM35: Level0 + { + angle = -35; + }; + class LevelP40: Level0 + { + angle = 40; + }; + class LevelM40: Level0 + { + angle = -40; + }; + class LevelP45: Level0 + { + angle = 45; + }; + class LevelM45: Level0 + { + angle = -45; + }; + class LevelP50: Level0 + { + angle = 50; + }; + class LevelM50: Level0 + { + angle = -50; + }; + }; + class Draw + { + color[] = {0.18,1,0.18}; + alpha = 1; + condition = "on"; + class Horizont + { + clipTL[] = {0.15,0.15}; + clipBR[] = {0.85,0.85}; + class Dimmed + { + class Level0 + { + type = "line"; + points[] = {{ "Level0",{ -0.42,0 },1 },{ "Level0",{ -0.38,0 },1 },{ },{ "Level0",{ -0.37,0 },1 },{ "Level0",{ -0.33,0 },1 },{ },{ "Level0",{ -0.32,0 },1 },{ "Level0",{ -0.28,0 },1 },{ },{ "Level0",{ -0.27,0 },1 },{ "Level0",{ -0.23,0 },1 },{ },{ "Level0",{ -0.22,0 },1 },{ "Level0",{ -0.18,0 },1 },{ },{ "Level0",{ -0.17,0 },1 },{ "Level0",{ -0.13,0 },1 },{ },{ "Level0",{ -0.12,0 },1 },{ "Level0",{ -0.08,0 },1 },{ },{ "Level0",{ 0.42,0 },1 },{ "Level0",{ 0.38,0 },1 },{ },{ "Level0",{ 0.37,0 },1 },{ "Level0",{ 0.33,0 },1 },{ },{ "Level0",{ 0.32,0 },1 },{ "Level0",{ 0.28,0 },1 },{ },{ "Level0",{ 0.27,0 },1 },{ "Level0",{ 0.23,0 },1 },{ },{ "Level0",{ 0.22,0 },1 },{ "Level0",{ 0.18,0 },1 },{ },{ "Level0",{ 0.17,0 },1 },{ "Level0",{ 0.13,0 },1 },{ },{ "Level0",{ 0.12,0 },1 },{ "Level0",{ 0.08,0 },1 }}; + }; + }; + }; + class HorizonBankRot + { + type = "line"; + width = 3; + points[] = {{ "HorizonBankRot",{ 0,0.25 },1 },{ "HorizonBankRot",{ -0.01,0.23 },1 },{ "HorizonBankRot",{ 0.01,0.23 },1 },{ "HorizonBankRot",{ 0,0.25 },1 }}; + }; + class Static_HAD_BOX + { + clipTL[] = {0,1}; + clipBR[] = {1,0}; + type = "line"; + width = 5; + points[] = {{ { "0.5-0.1","0.9-0.04" },1 },{ { "0.5-0.1","0.9+0.04" },1 },{ { "0.5+0.1","0.9+0.04" },1 },{ { "0.5+0.1","0.9-0.04" },1 },{ { "0.5-0.1","0.9-0.04" },1 },{ },{ { "0.5-0.1","0.9-0.04+0.012" },1 },{ { "0.5-0.092","0.9-0.04+0.012" },1 },{ },{ { "0.5+0.1","0.9-0.04+0.012" },1 },{ { "0.5+0.092","0.9-0.04+0.012" },1 },{ },{ { 0.5,"0.9-0.04" },1 },{ { 0.5,"0.9-0.032" },1 },{ },{ { 0.5,"0.9+0.04" },1 },{ { 0.5,"0.9+0.032" },1 },{ }}; + }; + class Gunner_HAD + { + type = "line"; + width = 6; + points[] = {{ "GunnerAim",{ -0.015,-0.008 },1 },{ "GunnerAim",{ -0.015,0.008 },1 },{ "GunnerAim",{ 0.015,0.008 },1 },{ "GunnerAim",{ 0.015,-0.008 },1 },{ "GunnerAim",{ -0.015,-0.008 },1 }}; + }; + class Slip_ball_group + { + class Slip_bars + { + type = "line"; + width = 4; + points[] = {{ { "0.5-0.018","0.9-0.04" },1 },{ { "0.5-0.018","0.9-0.075" },1 },{ },{ { "0.5+0.018","0.9-0.04" },1 },{ { "0.5+0.018","0.9-0.075" },1 }}; + }; + class Slip_ball + { + type = "line"; + width = 6; + points[] = {{ "Velocity_slip",1,{ "0 * 0.75","-0.02 * 0.75" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.75","-0.01732 * 0.75" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.75","-0.0099999998 * 0.75" },1 },{ "Velocity_slip",1,{ "0.02 * 0.75","0 * 0.75" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.75","0.0099999998 * 0.75" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.75","0.01732 * 0.75" },1 },{ "Velocity_slip",1,{ "0 * 0.75","0.02 * 0.75" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.75","0.01732 * 0.75" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.75","0.0099999998 * 0.75" },1 },{ "Velocity_slip",1,{ "-0.02 * 0.75","0 * 0.75" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.75","-0.0099999998 * 0.75" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.75","-0.01732 * 0.75" },1 },{ "Velocity_slip",1,{ "0 * 0.75","-0.02 * 0.75" },1 },{ },{ "Velocity_slip",1,{ "0 * 0.6","-0.02 * 0.6" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.6","-0.01732 * 0.6" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.6","-0.0099999998 * 0.6" },1 },{ "Velocity_slip",1,{ "0.02 * 0.6","0 * 0.6" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.6","0.0099999998 * 0.6" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.6","0.01732 * 0.6" },1 },{ "Velocity_slip",1,{ "0 * 0.6","0.02 * 0.6" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.6","0.01732 * 0.6" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.6","0.0099999998 * 0.6" },1 },{ "Velocity_slip",1,{ "-0.02 * 0.6","0 * 0.6" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.6","-0.0099999998 * 0.6" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.6","-0.01732 * 0.6" },1 },{ "Velocity_slip",1,{ "0 * 0.6","-0.02 * 0.6" },1 },{ },{ "Velocity_slip",1,{ "0 * 0.5","-0.02 * 0.5" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.5","-0.01732 * 0.5" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.5","-0.0099999998 * 0.5" },1 },{ "Velocity_slip",1,{ "0.02 * 0.5","0 * 0.5" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.5","0.0099999998 * 0.5" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.5","0.01732 * 0.5" },1 },{ "Velocity_slip",1,{ "0 * 0.5","0.02 * 0.5" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.5","0.01732 * 0.5" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.5","0.0099999998 * 0.5" },1 },{ "Velocity_slip",1,{ "-0.02 * 0.5","0 * 0.5" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.5","-0.0099999998 * 0.5" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.5","-0.01732 * 0.5" },1 },{ "Velocity_slip",1,{ "0 * 0.5","-0.02 * 0.5" },1 },{ },{ "Velocity_slip",1,{ "0 * 0.4","-0.02 * 0.4" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.4","-0.01732 * 0.4" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.4","-0.0099999998 * 0.4" },1 },{ "Velocity_slip",1,{ "0.02 * 0.4","0 * 0.4" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.4","0.0099999998 * 0.4" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.4","0.01732 * 0.4" },1 },{ "Velocity_slip",1,{ "0 * 0.4","0.02 * 0.4" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.4","0.01732 * 0.4" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.4","0.0099999998 * 0.4" },1 },{ "Velocity_slip",1,{ "-0.02 * 0.4","0 * 0.4" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.4","-0.0099999998 * 0.4" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.4","-0.01732 * 0.4" },1 },{ "Velocity_slip",1,{ "0 * 0.4","-0.02 * 0.4" },1 },{ },{ "Velocity_slip",1,{ "0 * 0.30","-0.02 * 0.30" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.30","-0.01732 * 0.30" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.30","-0.0099999998 * 0.30" },1 },{ "Velocity_slip",1,{ "0.02 * 0.30","0 * 0.30" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.30","0.0099999998 * 0.30" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.30","0.01732 * 0.30" },1 },{ "Velocity_slip",1,{ "0 * 0.30","0.02 * 0.30" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.30","0.01732 * 0.30" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.30","0.0099999998 * 0.30" },1 },{ "Velocity_slip",1,{ "-0.02 * 0.30","0 * 0.30" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.30","-0.0099999998 * 0.30" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.30","-0.01732 * 0.30" },1 },{ "Velocity_slip",1,{ "0 * 0.30","-0.02 * 0.30" },1 },{ },{ "Velocity_slip",1,{ "0 * 0.20","-0.02 * 0.20" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.20","-0.01732 * 0.20" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.20","-0.0099999998 * 0.20" },1 },{ "Velocity_slip",1,{ "0.02 * 0.20","0 * 0.20" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.20","0.0099999998 * 0.20" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.20","0.01732 * 0.20" },1 },{ "Velocity_slip",1,{ "0 * 0.20","0.02 * 0.20" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.20","0.01732 * 0.20" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.20","0.0099999998 * 0.20" },1 },{ "Velocity_slip",1,{ "-0.02 * 0.20","0 * 0.20" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.20","-0.0099999998 * 0.20" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.20","-0.01732 * 0.20" },1 },{ "Velocity_slip",1,{ "0 * 0.20","-0.02 * 0.20" },1 },{ },{ "Velocity_slip",1,{ "0 * 0.1","-0.02 * 0.1" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.1","-0.01732 * 0.1" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.1","-0.0099999998 * 0.1" },1 },{ "Velocity_slip",1,{ "0.02 * 0.1","0 * 0.1" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.1","0.0099999998 * 0.1" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.1","0.01732 * 0.1" },1 },{ "Velocity_slip",1,{ "0 * 0.1","0.02 * 0.1" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.1","0.01732 * 0.1" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.1","0.0099999998 * 0.1" },1 },{ "Velocity_slip",1,{ "-0.02 * 0.1","0 * 0.1" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.1","-0.0099999998 * 0.1" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.1","-0.01732 * 0.1" },1 },{ "Velocity_slip",1,{ "0 * 0.1","-0.02 * 0.1" },1 }}; + }; + }; + class Centerline + { + type = "line"; + width = 5; + points[] = {{ { 0.5,0.48 },1 },{ { 0.5,0.45 },1 },{ },{ { 0.5,0.52 },1 },{ { 0.5,0.55 },1 },{ },{ { 0.48,0.5 },1 },{ { 0.45,0.5 },1 },{ },{ { 0.52,0.5 },1 },{ { 0.55,0.5 },1 },{ }}; + }; + class WeaponName + { + type = "text"; + source = "weapon"; + sourceScale = 1; + align = "right"; + scale = 1; + pos[] = {{ 0.61,0.86 },1}; + right[] = {{ 0.65,0.86 },1}; + down[] = {{ 0.61,0.9 },1}; + }; + class Ammo_GUN + { + type = "group"; + condition = "mgun"; + class Ammo_count_GUN + { + type = "text"; + source = "ammo"; + sourceScale = 1; + align = "right"; + scale = 1; + pos[] = {{ 0.61,0.89 },1}; + right[] = {{ 0.65,0.89 },1}; + down[] = {{ 0.61,0.93 },1}; + }; + }; + class Ammo_RKT + { + type = "group"; + condition = "rocket"; + class Ammo_count_RKT + { + type = "text"; + source = "ammo"; + sourceScale = 1; + align = "right"; + scale = 1; + pos[] = {{ 0.61,0.89 },1}; + right[] = {{ 0.65,0.89 },1}; + down[] = {{ 0.61,0.93 },1}; + }; + }; + class Ammo_AGM + { + type = "group"; + condition = "AAmissile"; + class Ammo_count_AGM + { + type = "text"; + source = "ammo"; + sourceScale = 1; + align = "right"; + scale = 1; + pos[] = {{ 0.61,0.89 },1}; + right[] = {{ 0.65,0.89 },1}; + down[] = {{ 0.61,0.93 },1}; + }; + }; + class Ammo_AAM + { + type = "group"; + condition = "ATmissile"; + class Ammo_count_AAM + { + type = "text"; + source = "ammo"; + sourceScale = 1; + align = "right"; + scale = 1; + pos[] = {{ 0.61,0.89 },1}; + right[] = {{ 0.65,0.89 },1}; + down[] = {{ 0.61,0.93 },1}; + }; + }; + class Ammo_Bomb + { + type = "group"; + condition = "Bomb"; + class Ammo_count_Bomb + { + type = "text"; + source = "ammo"; + sourceScale = 1; + align = "right"; + scale = 1; + pos[] = {{ 0.61,0.89 },1}; + right[] = {{ 0.65,0.89 },1}; + down[] = {{ 0.61,0.93 },1}; + }; + }; + class LightsGroup + { + type = "group"; + condition = "lights"; + class LightsText + { + type = "text"; + source = "static"; + text = "LIGHTS"; + align = "right"; + scale = 1; + pos[] = {{ 0.03,"0.53 + 0.055" },1}; + right[] = {{ 0.07,"0.53 + 0.055" },1}; + down[] = {{ 0.03,"0.53 + 0.095" },1}; + }; + }; + class CollisionLightsGroup + { + type = "group"; + condition = "collisionlights"; + class CollisionLightsText + { + type = "text"; + source = "static"; + text = "A-COL"; + align = "right"; + scale = 1; + pos[] = {{ 0.03,"0.53 + 0.105" },1}; + right[] = {{ 0.07,"0.53 + 0.105" },1}; + down[] = {{ 0.03,"0.53 + 0.145" },1}; + }; + }; + class GearGroup + { + type = "group"; + condition = "ils"; + class GearText + { + type = "text"; + source = "static"; + text = "GEAR"; + align = "right"; + scale = 1; + pos[] = {{ 0.03,"0.53 + 0.155" },1}; + right[] = {{ 0.07,"0.53 + 0.155" },1}; + down[] = {{ 0.03,"0.53 + 0.195" },1}; + }; + }; + class ATMissileTOFGroup + { + condition = "ATmissile"; + type = "group"; + class TOFtext + { + type = "text"; + align = "right"; + source = "static"; + text = "TOF="; + scale = 1; + pos[] = {{ 0.61,0.92 },1}; + right[] = {{ 0.65,0.92 },1}; + down[] = {{ 0.61,0.96 },1}; + }; + class TOFnumber + { + type = "text"; + source = "targetDist"; + sourcescale = 0.0025; + align = "right"; + scale = 1; + pos[] = {{ 0.69,0.92 },1}; + right[] = {{ 0.73,0.92 },1}; + down[] = {{ 0.69,0.96 },1}; + }; + }; + class LaserTOFGroup + { + condition = "Bomb"; + type = "group"; + class TOFtext + { + type = "text"; + align = "right"; + source = "static"; + text = "TOF="; + scale = 1; + pos[] = {{ 0.61,0.92 },1}; + right[] = {{ 0.65,0.92 },1}; + down[] = {{ 0.61,0.96 },1}; + }; + class TOFnumber + { + type = "text"; + source = "targetDist"; + sourcescale = 0.0025; + align = "right"; + scale = 1; + pos[] = {{ 0.69,0.92 },1}; + right[] = {{ 0.73,0.92 },1}; + down[] = {{ 0.69,0.96 },1}; + }; + }; + class RocketTOFGroup + { + condition = "Rocket"; + type = "group"; + class TOFtext + { + type = "text"; + align = "right"; + source = "static"; + text = "TOF="; + scale = 1; + pos[] = {{ 0.61,0.92 },1}; + right[] = {{ 0.65,0.92 },1}; + down[] = {{ 0.61,0.96 },1}; + }; + class TOFnumber + { + type = "text"; + source = "targetDist"; + sourcescale = 0.0025; + align = "right"; + scale = 1; + pos[] = {{ 0.69,0.92 },1}; + right[] = {{ 0.73,0.92 },1}; + down[] = {{ 0.69,0.96 },1}; + }; + }; + class RangeNumber + { + type = "text"; + source = "targetDist"; + sourceScale = 1; + align = "left"; + scale = 1; + pos[] = {{ 0.39,0.89 },1}; + right[] = {{ 0.43,0.89 },1}; + down[] = {{ 0.39,0.93 },1}; + }; + class RangeText + { + type = "text"; + source = "static"; + text = "RNG"; + align = "left"; + scale = 1; + pos[] = {{ 0.39,0.86 },1}; + right[] = {{ 0.43,0.86 },1}; + down[] = {{ 0.39,0.9 },1}; + }; + class SpeedNumber + { + type = "text"; + align = "right"; + scale = 1; + source = "speed"; + sourceScale = 3.6; + pos[] = {{ 0.03,0.475 },1}; + right[] = {{ 0.08,0.475 },1}; + down[] = {{ 0.03,0.525 },1}; + }; + class TorqueNumber + { + condition = "simulRTD"; + class Torque_number + { + type = "text"; + align = "left"; + scale = 1; + source = "rtdRotorTorque"; + sourceScale = 290; + pos[] = {{ 0.065,0.175 },1}; + right[] = {{ 0.115,0.175 },1}; + down[] = {{ 0.065,0.225 },1}; + }; + class Torquetext + { + type = "text"; + source = "static"; + text = "%"; + align = "right"; + scale = 1; + pos[] = {{ 0.07,0.175 },1}; + right[] = {{ 0.12,0.175 },1}; + down[] = {{ 0.07,0.225 },1}; + }; + }; + class AltNumber: SpeedNumber + { + align = "right"; + source = "altitudeAGL"; + sourceScale = 1; + pos[] = {{ 0.83,0.475 },1}; + right[] = {{ 0.88,0.475 },1}; + down[] = {{ 0.83,0.525 },1}; + }; + class ASLNumber + { + type = "text"; + source = "altitudeASL"; + sourceScale = 1; + align = "right"; + scale = 1; + pos[] = {{ 0.835,0.18 },1}; + right[] = {{ 0.875,0.18 },1}; + down[] = {{ 0.835,0.22 },1}; + }; + class VspeedScalePosta + { + type = "line"; + width = 5; + points[] = {{ { 0.98,0.2 },1 },{ { 1,0.2 },1 },{ },{ { 0.93,0.2 },1 },{ { 0.95,0.2 },1 },{ },{ { 0.98,0.35 },1 },{ { 1,0.35 },1 },{ },{ { 0.93,0.35 },1 },{ { 0.95,0.35 },1 },{ },{ { 0.94,0.38 },1 },{ { 0.95,0.38 },1 },{ },{ { 0.94,0.41 },1 },{ { 0.95,0.41 },1 },{ },{ { 0.94,0.44 },1 },{ { 0.95,0.44 },1 },{ },{ { 0.94,0.47 },1 },{ { 0.95,0.47 },1 },{ },{ { 0.98,0.5 },1 },{ { 1,0.5 },1 },{ },{ { 0.93,0.5 },1 },{ { 0.95,0.5 },1 },{ },{ { 0.94,0.53 },1 },{ { 0.95,0.53 },1 },{ },{ { 0.94,0.56 },1 },{ { 0.95,0.56 },1 },{ },{ { 0.94,0.59 },1 },{ { 0.95,0.59 },1 },{ },{ { 0.94,0.62 },1 },{ { 0.95,0.62 },1 },{ },{ { 0.98,0.65 },1 },{ { 1,0.65 },1 },{ },{ { 0.93,0.65 },1 },{ { 0.95,0.65 },1 },{ },{ { 0.99,0.68 },1 },{ { 0.98,0.68 },1 },{ },{ { 0.99,0.71 },1 },{ { 0.98,0.71 },1 },{ },{ { 0.99,0.74 },1 },{ { 0.98,0.74 },1 },{ },{ { 0.99,0.77 },1 },{ { 0.98,0.77 },1 },{ },{ { 0.98,0.8 },1 },{ { 1,0.8 },1 },{ },{ { 0.93,0.8 },1 },{ { 0.95,0.8 },1 },{ }}; + }; + class RadarAltitudeBand + { + clipTL[] = {0,0.2}; + clipBR[] = {1,0.8}; + hideValue = 201; + class radarbanda + { + type = "line"; + width = 17; + points[] = {{ "RadarAltitudeBone",{ 0,0 },1 },{ "RadarAltitudeBone",{ 0,0.6 },1 }}; + }; + }; + class VspeedBand + { + type = "line"; + width = 3; + points[] = {{ "VspeedBone",{ -0.01,0 },1 },{ "VspeedBone",{ -0.025,-0.015 },1 },{ "VspeedBone",{ -0.025,0.015 },1 },{ "VspeedBone",{ -0.01,0 },1 },{ }}; + }; + class HeadingNumber: SpeedNumber + { + source = "heading"; + sourceScale = 1; + align = "center"; + pos[] = {{ 0.5,0.045 },1}; + right[] = {{ 0.56,0.045 },1}; + down[] = {{ 0.5,"0.045 + 0.06" },1}; + }; + class Center_box + { + type = "line"; + width = 1.5; + points[] = {{ { 0.45,"0.02 + 0.085 - 0.06" },1 },{ { "0.45 + 0.10","0.02 + 0.085 - 0.06" },1 },{ { "0.45 + 0.10","0.02 + 0.085" },1 },{ { 0.45,"0.02 + 0.085" },1 },{ { 0.45,"0.02 + 0.085 - 0.06" },1 }}; + }; + class HeadingArrow + { + type = "line"; + width = 7; + points[] = {{ { "0.5","0.128 + 0.03" },1 },{ { 0.5,0.128 },1 }}; + }; + class HeadingScale_LEFT + { + clipTL[] = {0,0}; + clipBR[] = {0.45,1}; + class Heading_group + { + type = "scale"; + horizontal = 1; + source = "heading"; + sourceScale = 1; + width = 5; + top = 0.12; + center = 0.5; + bottom = 0.88; + lineXleft = "0.03 + 0.085"; + lineYright = "0.02 + 0.085"; + lineXleftMajor = "0.04 + 0.085"; + lineYrightMajor = "0.02 + 0.085"; + majorLineEach = 3; + numberEach = 3; + step = 10; + stepSize = "0.05"; + align = "center"; + scale = 1; + pos[] = {0.12,"0.0 + 0.065"}; + right[] = {0.16,"0.0 + 0.065"}; + down[] = {0.12,"0.04 + 0.065"}; + }; + }; + class HeadingScale_RIGHT + { + clipTL[] = {0.55,0}; + clipBR[] = {1,1}; + class Heading_group + { + type = "scale"; + horizontal = 1; + source = "heading"; + sourceScale = 1; + width = 5; + top = 0.12; + center = 0.5; + bottom = 0.88; + lineXleft = "0.03 + 0.085"; + lineYright = "0.02 + 0.085"; + lineXleftMajor = "0.04 + 0.085"; + lineYrightMajor = "0.02 + 0.085"; + majorLineEach = 3; + numberEach = 3; + step = 10; + stepSize = "0.05"; + align = "center"; + scale = 1; + pos[] = {0.12,"0.0 + 0.065"}; + right[] = {0.16,"0.0 + 0.065"}; + down[] = {0.12,"0.04 + 0.065"}; + }; + }; + class HeadingScale_BOTTOM + { + clipTL[] = {0.45,"0.02 + 0.085"}; + clipBR[] = {"0.45 + 0.10",1}; + class Heading_group + { + type = "scale"; + horizontal = 1; + source = "heading"; + sourceScale = 1; + width = 5; + top = 0.12; + center = 0.5; + bottom = 0.88; + lineXleft = "0.03 + 0.085"; + lineYright = "0.02 + 0.085"; + lineXleftMajor = "0.04 + 0.085"; + lineYrightMajor = "0.02 + 0.085"; + majorLineEach = 3; + numberEach = 3; + step = 10; + stepSize = "0.05"; + align = "center"; + scale = 1; + pos[] = {0.12,"0.0 + 0.065"}; + right[] = {0.16,"0.0 + 0.065"}; + down[] = {0.12,"0.04 + 0.065"}; + }; + }; + class Fuel_Text + { + type = "text"; + source = "static"; + text = "Fuel"; + align = "right"; + scale = 1; + pos[] = {{ 0.03,0.9 },1}; + right[] = {{ 0.07,0.9 },1}; + down[] = {{ 0.03,0.94 },1}; + }; + class Fuel_Number + { + type = "text"; + source = "fuel"; + sourceScale = 100; + align = "right"; + scale = 1; + pos[] = {{ 0.1,0.9 },1}; + right[] = {{ 0.14,0.9 },1}; + down[] = {{ 0.1,0.94 },1}; + }; + }; + helmetMountedDisplay = 1; + helmetPosition[] = {-0.04,0.04,0.1}; + helmetRight[] = {0.08,0,0}; + helmetDown[] = {0,-0.08,0}; + }; + class ACE_HUD_2 + { + topLeft = "HUD_top_left"; + topRight = "HUD_top_right"; + bottomLeft = "HUD_bottom_left"; + borderLeft = 0; + borderRight = 0; + borderTop = 0; + borderBottom = 0; + color[] = {0.15,1,0.15,1}; + enableParallax = 0; + class Bones + { + class Velocity + { + type = "vector"; + source = "velocity"; + pos0[] = {0.5,0.5}; + pos10[] = {0.75,0.75}; + }; + class ForwardVec1 + { + type = "vector"; + source = "forward"; + pos0[] = {0,0}; + pos10[] = {0.25,0.25}; + }; + class ForwardVec + { + type = "vector"; + source = "forward"; + pos0[] = {0,0}; + pos10[] = {0.253,0.253}; + }; + class WeaponAim + { + type = "vector"; + source = "weapon"; + pos0[] = {0.5,0.5}; + pos10[] = {0.753,0.753}; + }; + class WeaponAim1 + { + type = "vector"; + source = "weapon"; + pos0[] = {0,0}; + pos10[] = {0.253,0.23}; + }; + class Target + { + type = "vector"; + source = "target"; + pos0[] = {0.5,0.5}; + pos10[] = {0.753,0.753}; + }; + class RadarContact + { + type = "fixed"; + pos[] = {0,0}; + }; + }; + class Draw + { + color[] = {0.18,1,0.18}; + alpha = 1; + condition = "on"; + class PlaneMovementCrosshair + { + type = "line"; + width = 7; + points[] = {{ "ForwardVec1",1,"Velocity",1,{ 0,-0.02 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0.01,-0.01732 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0.01732,-0.01 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0.02,0 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0.01732,0.01 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0.01,0.01732 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0,0.02 },1 },{ "ForwardVec1",1,"Velocity",1,{ -0.01,0.01732 },1 },{ "ForwardVec1",1,"Velocity",1,{ -0.01732,0.01 },1 },{ "ForwardVec1",1,"Velocity",1,{ -0.02,0 },1 },{ "ForwardVec1",1,"Velocity",1,{ -0.01732,-0.01 },1 },{ "ForwardVec1",1,"Velocity",1,{ -0.01,-0.01732 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0,-0.02 },1 },{ },{ "ForwardVec1",1,"Velocity",1,{ 0.04,0 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0.02,0 },1 },{ },{ "ForwardVec1",1,"Velocity",1,{ -0.04,0 },1 },{ "ForwardVec1",1,"Velocity",1,{ -0.02,0 },1 },{ },{ "ForwardVec1",1,"Velocity",1,{ 0,-0.04 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0,-0.02 },1 }}; + }; + class Gunner_AIM + { + type = "group"; + class Circle + { + type = "line"; + width = 6; + points[] = {{ "ForwardVec",1,"WeaponAim",1,{ 0,-0.015 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0,-0.03 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0,-0.0325 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0,-0.0475 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0,0.015 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0,0.03 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0,0.0325 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0,0.0475 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ -0.015,0 },1 },{ "ForwardVec",1,"WeaponAim",1,{ -0.03,0 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ -0.0325,0 },1 },{ "ForwardVec",1,"WeaponAim",1,{ -0.0475,0 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0.015,0 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0.03,0 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0.0325,0 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0.0475,0 },1 }}; + }; + }; + class GunCross + { + condition = "mgun"; + class Circle + { + type = "line"; + width = 9; + points[] = {{ "ForwardVec",1,"WeaponAim",1,{ 0,-0.05 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0,-0.015 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0,0.015 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0,0.05 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ -0.05,0 },1 },{ "ForwardVec",1,"WeaponAim",1,{ -0.015,0 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0.015,0 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0.05,0 },1 },{ }}; + }; + }; + class RocketCross + { + condition = "rocket"; + width = 6; + class Circle + { + type = "line"; + width = 6; + points[] = {{ "ForwardVec",1,"WeaponAim",1,{ -0.05,-0.08 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0.05,-0.08 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0,-0.08 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0,0.08 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ -0.05,0.08 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0.05,0.08 },1 },{ }}; + }; + }; + class AT_Aim + { + condition = "ATmissile"; + width = 2; + class Circle + { + type = "line"; + width = 2; + points[] = {{ "ForwardVec",1,"WeaponAim",1,{ -0.1,-0.1 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0.1,-0.1 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0.1,0.1 },1 },{ "ForwardVec",1,"WeaponAim",1,{ -0.1,0.1 },1 },{ "ForwardVec",1,"WeaponAim",1,{ -0.1,-0.1 },1 }}; + }; + }; + class AA_aim + { + condition = "AAmissile"; + class Circle + { + type = "line"; + width = 2.5; + points[] = {{ "ForwardVec",1,"WeaponAim",1,{ "0 / 4","-0.248559 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0434 / 4","-0.244781 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0855 / 4","-0.233571 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.125 / 4","-0.215252 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1607 / 4","-0.190396 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1915 / 4","-0.159774 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2165 / 4","-0.12428 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.234925 / 4","-0.0850072 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2462 / 4","-0.0431499 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.25 / 4","0 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2462 / 4","0.0431499 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.234925 / 4","0.0850072 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2165 / 4","0.12428 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1915 / 4","0.159774 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1607 / 4","0.190396 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.125 / 4","0.215252 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0855 / 4","0.233571 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0434 / 4","0.244781 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0 / 4","0.248559 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0434 / 4","0.244781 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0855 / 4","0.233571 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.125 / 4","0.215252 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1607 / 4","0.190396 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1915 / 4","0.159774 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2165 / 4","0.12428 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.234925 / 4","0.0850072 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2462 / 4","0.0431499 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.25 / 4","0 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2462 / 4","-0.0431499 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.234925 / 4","-0.0850072 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2165 / 4","-0.12428 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1915 / 4","-0.159774 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1607 / 4","-0.190396 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.125 / 4","-0.215252 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0855 / 4","-0.233571 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0434 / 4","-0.244781 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0 / 4","-0.248559 / 4" },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ "0 / 2","-0.248559 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0434 / 2","-0.244781 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0855 / 2","-0.233571 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.125 / 2","-0.215252 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1607 / 2","-0.190396 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1915 / 2","-0.159774 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2165 / 2","-0.12428 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.234925 / 2","-0.0850072 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2462 / 2","-0.0431499 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.25 / 2","0 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2462 / 2","0.0431499 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.234925 / 2","0.0850072 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2165 / 2","0.12428 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1915 / 2","0.159774 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1607 / 2","0.190396 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.125 / 2","0.215252 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0855 / 2","0.233571 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0434 / 2","0.244781 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0 / 2","0.248559 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0434 / 2","0.244781 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0855 / 2","0.233571 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.125 / 2","0.215252 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1607 / 2","0.190396 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1915 / 2","0.159774 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2165 / 2","0.12428 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.234925 / 2","0.0850072 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2462 / 2","0.0431499 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.25 / 2","0 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2462 / 2","-0.0431499 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.234925 / 2","-0.0850072 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2165 / 2","-0.12428 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1915 / 2","-0.159774 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1607 / 2","-0.190396 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.125 / 2","-0.215252 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0855 / 2","-0.233571 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0434 / 2","-0.244781 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0 / 2","-0.248559 / 2" },1 }}; + }; + }; + class TargetACQ + { + type = "line"; + width = 2; + points[] = {{ "ForwardVec",1,"target",{ 0,-0.06 },1 },{ "ForwardVec",1,"target",{ 0,-0.055 },1 },{ },{ "ForwardVec",1,"target",{ 0,-0.05 },1 },{ "ForwardVec",1,"target",{ 0,-0.045 },1 },{ },{ "ForwardVec",1,"target",{ 0,-0.04 },1 },{ "ForwardVec",1,"target",{ 0,-0.035 },1 },{ },{ "ForwardVec",1,"target",{ 0,-0.03 },1 },{ "ForwardVec",1,"target",{ 0,-0.025 },1 },{ },{ "ForwardVec",1,"target",{ 0,-0.02 },1 },{ "ForwardVec",1,"target",{ 0,-0.015 },1 },{ },{ "ForwardVec",1,"target",{ 0,-0.01 },1 },{ "ForwardVec",1,"target",{ 0,-0.005 },1 },{ },{ "ForwardVec",1,"target",{ 0,0 },1 },{ "ForwardVec",1,"target",{ 0,0 },1 },{ },{ "ForwardVec",1,"target",{ 0,0.06 },1 },{ "ForwardVec",1,"target",{ 0,0.055 },1 },{ },{ "ForwardVec",1,"target",{ 0,0.05 },1 },{ "ForwardVec",1,"target",{ 0,0.045 },1 },{ },{ "ForwardVec",1,"target",{ 0,0.04 },1 },{ "ForwardVec",1,"target",{ 0,0.035 },1 },{ },{ "ForwardVec",1,"target",{ 0,0.03 },1 },{ "ForwardVec",1,"target",{ 0,0.025 },1 },{ },{ "ForwardVec",1,"target",{ 0,0.02 },1 },{ "ForwardVec",1,"target",{ 0,0.015 },1 },{ },{ "ForwardVec",1,"target",{ 0,0.01 },1 },{ "ForwardVec",1,"target",{ 0,0.005 },1 },{ },{ "ForwardVec",1,"target",{ -0.06,0 },1 },{ "ForwardVec",1,"target",{ -0.055,0 },1 },{ },{ "ForwardVec",1,"target",{ -0.05,0 },1 },{ "ForwardVec",1,"target",{ -0.045,0 },1 },{ },{ "ForwardVec",1,"target",{ -0.04,0 },1 },{ "ForwardVec",1,"target",{ -0.035,0 },1 },{ },{ "ForwardVec",1,"target",{ -0.03,0 },1 },{ "ForwardVec",1,"target",{ -0.025,0 },1 },{ },{ "ForwardVec",1,"target",{ -0.02,0 },1 },{ "ForwardVec",1,"target",{ -0.015,0 },1 },{ },{ "ForwardVec",1,"target",{ -0.01,0 },1 },{ "ForwardVec",1,"target",{ -0.005,0 },1 },{ },{ "ForwardVec",1,"target",{ 0.06,0 },1 },{ "ForwardVec",1,"target",{ 0.055,0 },1 },{ },{ "ForwardVec",1,"target",{ 0.05,0 },1 },{ "ForwardVec",1,"target",{ 0.045,0 },1 },{ },{ "ForwardVec",1,"target",{ 0.04,0 },1 },{ "ForwardVec",1,"target",{ 0.035,0 },1 },{ },{ "ForwardVec",1,"target",{ 0.03,0 },1 },{ "ForwardVec",1,"target",{ 0.025,0 },1 },{ },{ "ForwardVec",1,"target",{ 0.02,0 },1 },{ "ForwardVec",1,"target",{ 0.015,0 },1 },{ },{ "ForwardVec",1,"target",{ 0.01,0 },1 },{ "ForwardVec",1,"target",{ 0.005,0 },1 },{ }}; + }; + class RadarTargets + { + type = "radar"; + pos0[] = {0.5,0.5}; + pos10[] = {0.753,0.753}; + width = 2.5; + points[] = {{ "ForwardVec",1,"RadarContact",{ -0.01,-0.01 },1 },{ "ForwardVec",1,"RadarContact",{ 0.01,-0.01 },1 },{ "ForwardVec",1,"RadarContact",{ 0.01,0.01 },1 },{ "ForwardVec",1,"RadarContact",{ -0.01,0.01 },1 },{ "ForwardVec",1,"RadarContact",{ -0.01,-0.01 },1 }}; + }; + }; + helmetMountedDisplay = 1; + helmetPosition[] = {-0.035,0.035,0.1}; + helmetRight[] = {0.07,0,0}; + helmetDown[] = {0,-0.07,0}; + }; + }; + + class Turrets: Turrets { + class MainTurret: MainTurret { + weapons[] = {"ACE_gatling_20mm_Comanche","missiles_DAGR","missiles_ASRAAM", "ACE_AIR_SAFETY"}; + magazines[] = {"ACE_500Rnd_20mm_shells_Comanche","4Rnd_AAA_missiles","24Rnd_PG_missiles"}; + + outGunnerMayFire = 1; + commanding = -1; + primaryGunner = 1; + gunnerOpticsModel = ""; + gunnerOpticsEffect[] = {"TankCommanderOptics1"}; + gunnerForceOptics = 0; + turretInfoType = "Rsc_ACE_Helo_UI_Turret"; + showAllTargets = 2; + discretedistance[] = {100,200,300,400,500,600,700,800,900,1000,1100,1200,1300,1400,1500,1600,1700,1800,1900,2000,2100,2200,2300,2400,2500,2600,2700,2800,2900,3000}; + discretedistanceinitindex = 3; + copilotHasFlares = 1; + directionStabilized = 1; + isCopilot = 1; + showHMD = 1; + CanEject = 1; + startEngine = 0; + minElev = -51; + maxElev = 9; + initElev = 6; + minTurn = -120; + maxTurn = 120; + initTurn = 0; + + class OpticsIn + { + class Wide + { + opticsDisplayName = "W"; + initAngleX = 0; + minAngleX = -35; + maxAngleX = 10; + initAngleY = 0; + minAngleY = -100; + maxAngleY = 100; + initFov = 0.466; + minFov = 0.466; + maxFov = 0.466; + visionMode[] = {"Normal","Ti"}; + thermalMode[] = {0,1}; + gunnerOpticsColor[] = {0,0,0,1}; + directionStabilized = 1; + horizontallyStabilized = 1; + gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_wide_F"; + }; + class Medium: Wide + { + opticsDisplayName = "M"; + initFov = 0.093; + minFov = 0.093; + maxFov = 0.093; + gunnerOpticsColor[] = {0,0,0,1}; + directionStabilized = 1; + horizontallyStabilized = 1; + gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_medium_F"; + }; + class Narrow: Wide + { + opticsDisplayName = "N"; + initFov = 0.029; + minFov = 0.029; + maxFov = 0.029; + gunnerOpticsColor[] = {0,0,0,1}; + directionStabilized = 1; + horizontallyStabilized = 1; + gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_narrow_F"; + + }; + class Narrower: Wide + { + opticsDisplayName = "Z"; + initFov = 0.01; + minFov = 0.01; + maxFov = 0.01; + gunnerOpticsColor[] = {0,0,0,1}; + directionStabilized = 1; + horizontallyStabilized = 1; + gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_narrow_F"; + + }; + }; + class OpticsOut + { + class Monocular + { + initAngleX = 0; + minAngleX = -30; + maxAngleX = 30; + initAngleY = 0; + minAngleY = -100; + maxAngleY = 100; + initFov = 1.1; + minFov = 0.133; + maxFov = 1.1; + visionMode[] = {"Normal","NVG"}; + gunnerOpticsModel = ""; + gunnerOpticsEffect[] = {}; + hideUnitInfo = 1; + }; + }; + }; + }; + + class AnimationSources: AnimationSources { + class Gatling { + weapon = "ACE_gatling_20mm_Comanche"; + }; + class Muzzle_flash { + weapon = "ACE_gatling_20mm_Comanche"; + }; + }; }; \ No newline at end of file diff --git a/addons/aircraft/RscInGameUI.hpp b/addons/aircraft/RscInGameUI.hpp index 83d46b5a03..620d895d9e 100644 --- a/addons/aircraft/RscInGameUI.hpp +++ b/addons/aircraft/RscInGameUI.hpp @@ -1,581 +1,581 @@ -class RscControlsGroup; -class RscText; -class RangeText: RscText{}; -class RscPicture; -class RscOpticsText; -class RscIGProgress; -class RscOpticsValue; -class VScrollbar; -class HScrollbar; -class RscLadderPicture; -class RscControlsGroupNoScrollbars; - - -class RscInGameUI -{ - class RscUnitInfo; - class Rsc_ACE_Helo_UI_Turret: RscUnitInfo - { - idd = 300; - controls[] = {"CA_IGUI_elements_group","CA_VehicleToggles"}; - class VScrollbar; - class HScrollbar; - class CA_IGUI_elements_group: RscControlsGroup - { - idc = 170; - class VScrollbar: VScrollbar - { - width = 0; - }; - class HScrollbar: HScrollbar - { - height = 0; - }; - x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))"; - y = "0 * (0.025 * SafezoneH) + (SafezoneY)"; - w = "53.5 * (0.01875 * SafezoneH)"; - h = "40 * (0.025 * SafezoneH)"; - class controls - { - class CA_Distance: RscText - { - idc = 151; - style = 2; - sizeEx = "0.0295*SafezoneH"; - shadow = 0; - font = "EtelkaMonospacePro"; - x = "24.78 * (0.01875 * SafezoneH)"; - y = "30.88 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; - }; - class CA_Speed: RangeText - { - idc = 188; - style = 2; - sizeEx = "0.0295*SafezoneH"; - shadow = 0; - font = "EtelkaMonospacePro"; - text = "120"; - x = "14.78 * (0.01875 * SafezoneH)"; - y = "30.88 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; - }; - class CA_Alt: RangeText - { - idc = 189; - style = 2; - sizeEx = "0.0295*SafezoneH"; - shadow = 0; - font = "EtelkaMonospacePro"; - text = "3825"; - x = "34.78 * (0.01875 * SafezoneH)"; - y = "30.88 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; - }; - class CA_VisionMode: RscText - { - idc = 152; - style = 0; - sizeEx = "0.0295*SafezoneH"; - shadow = 0; - font = "EtelkaMonospacePro"; - text = "VIS"; - x = "12.58 * (0.01875 * SafezoneH)"; - y = "8 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; - }; - class CA_FlirMode: RscText - { - idc = 153; - style = 0; - sizeEx = "0.0295*SafezoneH"; - shadow = 0; - font = "EtelkaMonospacePro"; - text = "BHOT"; - x = "15.78 * (0.01875 * SafezoneH)"; - y = "8 * (0.025 * SafezoneH)"; - w = "4.5 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; - }; - class ValueGrid: RangeText - { - idc = 172; - font = "EtelkaMonospacePro"; - style = 2; - sizeEx = "0.0295*SafezoneH"; - shadow = 0; - x = "12.20 * (0.01875 * SafezoneH)"; - y = "3.5 * (0.025 * SafezoneH)"; - w = "6 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; - }; - class TextTADS: RangeText - { - idc = 1010; - text = "TADS"; - font = "EtelkaMonospacePro"; - style = 2; - shadow = 0; - x = "12.30 * (0.01875 * SafezoneH)"; - y = "5 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; - }; - class ValueTime: RangeText - { - idc = 190; - text = "20:28:35"; - font = "EtelkaMonospacePro"; - style = 2; - sizeEx = "0.0295*SafezoneH"; - shadow = 0; - x = "12.1 * (0.01875 * SafezoneH)"; - y = "6.5 * (0.025 * SafezoneH)"; - w = "6 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; - }; - class CA_Laser: RscText - { - idc = 158; - style = "0x30 + 0x800"; - sizeEx = "0.038*SafezoneH"; - shadow = 0; - font = "EtelkaMonospacePro"; - text = PATHTOF(data\Helo_LaserON.paa); - x = "20.45 * (0.01875 * SafezoneH)"; - y = "14.1 * (0.025 * SafezoneH)"; - w = "12.5 * (0.01875 * SafezoneH)"; - h = "12 * (0.025 * SafezoneH)"; - }; - class CA_Heading: RscText - { - idc = 156; - style = 0; - sizeEx = "0.038*SafezoneH"; - shadow = 0; - font = "EtelkaMonospacePro"; - text = "023"; - x = "24.83 * (0.01875 * SafezoneH)"; - y = "6 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; - }; - }; - }; - }; - class Rsc_ACE_Helo_UI_01: RscUnitInfo - { - controls[] = {"WeaponInfoControlsGroupRight","CA_TextFlaresMode","CA_TextFlares","CA_VehicleToggles","CA_Radar"}; - }; - class Rsc_ACE_Helo_UI_02: RscUnitInfo - { - controls[] = {"CA_TextFlaresMode","CA_TextFlares","CA_VehicleToggles","CA_Radar"}; - }; - class Rsc_ACE_Drones_UI_Turret: RscUnitInfo - { - idd = 300; - controls[] = {"CA_Zeroing","CA_IGUI_elements_group","CA_VehicleToggles"}; - class CA_IGUI_elements_group: RscControlsGroup - { - idc = 170; - class VScrollbar: VScrollbar - { - width = 0; - }; - class HScrollbar: HScrollbar - { - height = 0; - }; - x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))"; - y = "0 * (0.025 * SafezoneH) + (SafezoneY)"; - w = "53.5 * (0.01875 * SafezoneH)"; - h = "40 * (0.025 * SafezoneH)"; - class controls - { - class CA_Distance: RscText - { - idc = 151; - style = 2; - sizeEx = "0.0295*SafezoneH"; - shadow = 0; - font = "EtelkaMonospacePro"; - x = "24.78 * (0.01875 * SafezoneH)"; - y = "30.88 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; - }; - class CA_Speed: RangeText - { - idc = 188; - style = 2; - sizeEx = "0.0295*SafezoneH"; - shadow = 0; - font = "EtelkaMonospacePro"; - text = "120"; - x = "14.78 * (0.01875 * SafezoneH)"; - y = "30.88 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; - }; - class CA_Alt: RangeText - { - idc = 189; - style = 2; - sizeEx = "0.0295*SafezoneH"; - shadow = 0; - font = "EtelkaMonospacePro"; - text = "3825"; - x = "34.78 * (0.01875 * SafezoneH)"; - y = "30.88 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; - }; - class ValueTime: RangeText - { - idc = 190; - text = "20:28:35"; - font = "EtelkaMonospacePro"; - style = 2; - sizeEx = "0.0295*SafezoneH"; - shadow = 0; - x = "1.75 * (0.01875 * SafezoneH)"; - y = "10.5 * (0.025 * SafezoneH)"; - w = "6 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; - }; - class CA_VisionMode: RscText - { - idc = 152; - style = 0; - sizeEx = "0.0295*SafezoneH"; - shadow = 0; - font = "EtelkaMonospacePro"; - text = "VIS"; - align = "right"; - x = "2.6 * (0.01875 * SafezoneH)"; - y = "12.0 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "1.0 * (0.025 * SafezoneH)"; - }; - class CA_FlirMode: RscText - { - idc = 153; - style = 0; - sizeEx = "0.0295*SafezoneH"; - shadow = 0; - font = "EtelkaMonospacePro"; - text = "BHOT"; - align = "right"; - x = "6.18 * (0.01875 * SafezoneH)"; - y = "12.0 * (0.025 * SafezoneH)"; - w = "4.5 * (0.01875 * SafezoneH)"; - h = "1.0 * (0.025 * SafezoneH)"; - }; - class TgT_Grid_text: RangeText - { - idc = 1005; - text = "TGT:"; - font = "EtelkaMonospacePro"; - style = 2; - sizeEx = "0.0295*SafezoneH"; - shadow = 0; - x = "1.20 * (0.01875 * SafezoneH)"; - y = "13.5 * (0.025 * SafezoneH)"; - w = "6 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; - }; - class TGT_ValueGrid: RangeText - { - idc = 172; - font = "EtelkaMonospacePro"; - colorText[] = {0.706,0.0745,0.0196,0.8}; - style = 2; - sizeEx = "0.0295*SafezoneH"; - shadow = 0; - x = "5.20 * (0.01875 * SafezoneH)"; - y = "13.5 * (0.025 * SafezoneH)"; - w = "6 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; - }; - class OWN_Grid_text: RangeText - { - idc = 1005; - text = "OWN:"; - font = "EtelkaMonospacePro"; - style = 2; - sizeEx = "0.0295*SafezoneH"; - shadow = 0; - x = "1.20 * (0.01875 * SafezoneH)"; - y = "15 * (0.025 * SafezoneH)"; - w = "6 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; - }; - class OWN_ValueGrid: RangeText - { - idc = 171; - font = "EtelkaMonospacePro"; - colorText[] = {0.15,1,0.15,0.8}; - style = 2; - sizeEx = "0.0295*SafezoneH"; - shadow = 0; - x = "5.20 * (0.01875 * SafezoneH)"; - y = "15 * (0.025 * SafezoneH)"; - w = "6 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; - }; - class CA_Laser: RscText - { - idc = 158; - style = "0x30 + 0x800"; - sizeEx = "0.038*SafezoneH"; - shadow = 0; - align = "right"; - font = "EtelkaMonospacePro"; - text = PATHTOF(data\Helo_LaserON.paa); - x = "20.45 * (0.01875 * SafezoneH)"; - y = "14.1 * (0.025 * SafezoneH)"; - w = "12.5 * (0.01875 * SafezoneH)"; - h = "12 * (0.025 * SafezoneH)"; - }; - class CA_Heading: RscText - { - idc = 156; - style = 0; - sizeEx = "0.038*SafezoneH"; - shadow = 0; - font = "EtelkaMonospacePro"; - text = "023"; - align = "right"; - x = "25 * (0.01875 * SafezoneH)"; - y = "5 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; - }; - }; - }; - }; - class Rsc_ACE_Drones_UI_Pilots: RscUnitInfo - { - idd = 300; - controls[] = {"WeaponInfoControlsGroupRight","CA_BackgroundVehicle","CA_BackgroundVehicleTitle","CA_BackgroundVehicleTitleDark","CA_BackgroundFuel","CA_Vehicle","CA_VehicleRole","CA_HitZones","CA_SpeedBackground","CA_SpeedUnits","CA_Speed","CA_ValueFuel","CA_AltBackground","CA_AltUnits","CA_Alt","CA_VehicleToggles","CA_Radar","DriverOpticsGroup"}; - class DriverOpticsGroup: RscControlsGroup - { - idc = 392; - class VScrollbar: VScrollbar - { - width = 0; - }; - class HScrollbar: HScrollbar - { - height = 0; - }; - x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))"; - y = "0 * (0.025 * SafezoneH) + (SafezoneY)"; - w = "53.5 * (0.01875 * SafezoneH)"; - h = "40 * (0.025 * SafezoneH)"; - class controls - { - class TextGrid: RscText - { - style = 0; - sizeEx = "0.02*SafezoneH"; - shadow = 0; - font = "EtelkaMonospacePro"; - idc = 1005; - text = "GRID:"; - x = "5.8 * (0.01875 * SafezoneH)"; - y = "31.8 * (0.025 * SafezoneH)"; - w = "5 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; - }; - class ValueGrid: TextGrid - { - idc = 189; - text = "382546"; - x = "10.3 * (0.01875 * SafezoneH)"; - y = "31.8 * (0.025 * SafezoneH)"; - w = "6 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; - }; - class TextTime: TextGrid - { - idc = 1010; - text = "TIME [UTC]:"; - x = "5.8 * (0.01875 * SafezoneH)"; - y = "32.6 * (0.025 * SafezoneH)"; - w = "5 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; - }; - class ValueTime: TextGrid - { - idc = 101; - text = "20:28:35"; - x = "10 * (0.01875 * SafezoneH)"; - y = "32.6 * (0.025 * SafezoneH)"; - w = "6 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; - }; - class TextMag: TextGrid - { - idc = 1011; - text = "CAM MAG:"; - x = "5.8 * (0.01875 * SafezoneH)"; - y = "7 * (0.025 * SafezoneH)"; - w = "5 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; - }; - class OpticsZoom: TextGrid - { - idc = 192; - text = "28x"; - x = "10.3 * (0.01875 * SafezoneH)"; - y = "7 * (0.025 * SafezoneH)"; - w = "6 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; - }; - class BorderLineSpdTop: RscPicture - { - idc = 1203; - text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\border_line_ca.paa"; - x = "3.343 * (0.01875 * SafezoneH)"; - y = "12.4 * (0.025 * SafezoneH)"; - w = "3 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; - }; - class BorderLineSpdBottom: RscPicture - { - idc = 1207; - text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\border_line_ca.paa"; - x = "3.343 * (0.01875 * SafezoneH)"; - y = "26.5 * (0.025 * SafezoneH)"; - w = "3 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; - }; - class BorderLineAltTop: RscPicture - { - idc = 1205; - text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\border_line_ca.paa"; - x = "47.16 * (0.01875 * SafezoneH)"; - y = "12.4 * (0.025 * SafezoneH)"; - w = "3 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; - }; - class BorderLineAltBottom: RscPicture - { - idc = 1206; - text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\border_line_ca.paa"; - x = "47.16 * (0.01875 * SafezoneH)"; - y = "26.5 * (0.025 * SafezoneH)"; - w = "3 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; - }; - class TextSpd: TextGrid - { - idc = 1004; - text = "SPD"; - x = "4.8 * (0.01875 * SafezoneH)"; - y = "11.8 * (0.025 * SafezoneH)"; - w = "5 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; - }; - class SpeedValueBorder: RscPicture - { - idc = 1200; - text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\altimeter_value_ca.paa"; - x = "6.3 * (0.01875 * SafezoneH)"; - y = "19 * (0.025 * SafezoneH)"; - w = "5 * (0.01875 * SafezoneH)"; - h = "2 * (0.025 * SafezoneH)"; - }; - class CA_Speed: TextGrid - { - idc = 190; - sizeEx = "0.03*SafezoneH"; - text = "120"; - x = "7.5 * (0.01875 * SafezoneH)"; - y = "19.5 * (0.025 * SafezoneH)"; - w = "6 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; - }; - class AnalogueSpeed: RscLadderPicture - { - idc = 384; - topValue = 1312; - bottomValue = -345; - visibleRange = -1; - text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\UAVspeedLadder_ca.paa"; - x = "1.5 * (0.01875 * SafezoneH)"; - y = "13 * (0.025 * SafezoneH)"; - w = "5 * (0.01875 * SafezoneH)"; - h = "14 * (0.025 * SafezoneH)"; - }; - class TextAlt: TextGrid - { - idc = 1006; - text = "ALT"; - x = "46.9 * (0.01875 * SafezoneH)"; - y = "11.8 * (0.025 * SafezoneH)"; - w = "5 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; - }; - class AltValueBorder: RscPicture - { - idc = 1201; - text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\airspeed_value_ca.paa"; - x = "42.25 * (0.01875 * SafezoneH)"; - y = "19 * (0.025 * SafezoneH)"; - w = "5 * (0.01875 * SafezoneH)"; - h = "2 * (0.025 * SafezoneH)"; - }; - class CA_Alt: TextGrid - { - idc = 191; - sizeEx = "0.03*SafezoneH"; - style = 1; - text = "3825"; - x = "43 * (0.01875 * SafezoneH)"; - y = "19.5 * (0.025 * SafezoneH)"; - w = "3.2 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; - }; - class AnalogueAlt: RscLadderPicture - { - idc = 385; - topValue = 14430; - bottomValue = -2110; - visibleRange = -1; - text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\UAValtLadder_ca.paa"; - x = "47 * (0.01875 * SafezoneH)"; - y = "13 * (0.025 * SafezoneH)"; - w = "2.5 * (0.01875 * SafezoneH)"; - h = "14 * (0.025 * SafezoneH)"; - }; - class AnalogueHorizon: RscLadderPicture - { - idc = 383; - topValue = 90; - bottomValue = -90; - visibleRange = -1; - text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\horizon_ladder_ca.paa"; - x = "16.75 * (0.01875 * SafezoneH)"; - y = "5 * (0.025 * SafezoneH)"; - w = "20 * (0.01875 * SafezoneH)"; - h = "30 * (0.025 * SafezoneH)"; - }; - class HorizonCenter: RscPicture - { - idc = 1202; - text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\horizon_aircraft_ca.paa"; - x = "24.75 * (0.01875 * SafezoneH)"; - y = "19 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "2 * (0.025 * SafezoneH)"; - }; - }; - }; - }; +class RscControlsGroup; +class RscText; +class RangeText: RscText{}; +class RscPicture; +class RscOpticsText; +class RscIGProgress; +class RscOpticsValue; +class VScrollbar; +class HScrollbar; +class RscLadderPicture; +class RscControlsGroupNoScrollbars; + + +class RscInGameUI +{ + class RscUnitInfo; + class Rsc_ACE_Helo_UI_Turret: RscUnitInfo + { + idd = 300; + controls[] = {"CA_IGUI_elements_group","CA_VehicleToggles"}; + class VScrollbar; + class HScrollbar; + class CA_IGUI_elements_group: RscControlsGroup + { + idc = 170; + class VScrollbar: VScrollbar + { + width = 0; + }; + class HScrollbar: HScrollbar + { + height = 0; + }; + x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))"; + y = "0 * (0.025 * SafezoneH) + (SafezoneY)"; + w = "53.5 * (0.01875 * SafezoneH)"; + h = "40 * (0.025 * SafezoneH)"; + class controls + { + class CA_Distance: RscText + { + idc = 151; + style = 2; + sizeEx = "0.0295*SafezoneH"; + shadow = 0; + font = "EtelkaMonospacePro"; + x = "24.78 * (0.01875 * SafezoneH)"; + y = "30.88 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; + }; + class CA_Speed: RangeText + { + idc = 188; + style = 2; + sizeEx = "0.0295*SafezoneH"; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "120"; + x = "14.78 * (0.01875 * SafezoneH)"; + y = "30.88 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; + }; + class CA_Alt: RangeText + { + idc = 189; + style = 2; + sizeEx = "0.0295*SafezoneH"; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "3825"; + x = "34.78 * (0.01875 * SafezoneH)"; + y = "30.88 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; + }; + class CA_VisionMode: RscText + { + idc = 152; + style = 0; + sizeEx = "0.0295*SafezoneH"; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "VIS"; + x = "12.58 * (0.01875 * SafezoneH)"; + y = "8 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; + }; + class CA_FlirMode: RscText + { + idc = 153; + style = 0; + sizeEx = "0.0295*SafezoneH"; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "BHOT"; + x = "15.78 * (0.01875 * SafezoneH)"; + y = "8 * (0.025 * SafezoneH)"; + w = "4.5 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; + }; + class ValueGrid: RangeText + { + idc = 172; + font = "EtelkaMonospacePro"; + style = 2; + sizeEx = "0.0295*SafezoneH"; + shadow = 0; + x = "12.20 * (0.01875 * SafezoneH)"; + y = "3.5 * (0.025 * SafezoneH)"; + w = "6 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; + }; + class TextTADS: RangeText + { + idc = 1010; + text = "TADS"; + font = "EtelkaMonospacePro"; + style = 2; + shadow = 0; + x = "12.30 * (0.01875 * SafezoneH)"; + y = "5 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; + }; + class ValueTime: RangeText + { + idc = 190; + text = "20:28:35"; + font = "EtelkaMonospacePro"; + style = 2; + sizeEx = "0.0295*SafezoneH"; + shadow = 0; + x = "12.1 * (0.01875 * SafezoneH)"; + y = "6.5 * (0.025 * SafezoneH)"; + w = "6 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; + }; + class CA_Laser: RscText + { + idc = 158; + style = "0x30 + 0x800"; + sizeEx = "0.038*SafezoneH"; + shadow = 0; + font = "EtelkaMonospacePro"; + text = PATHTOF(data\Helo_LaserON.paa); + x = "20.45 * (0.01875 * SafezoneH)"; + y = "14.1 * (0.025 * SafezoneH)"; + w = "12.5 * (0.01875 * SafezoneH)"; + h = "12 * (0.025 * SafezoneH)"; + }; + class CA_Heading: RscText + { + idc = 156; + style = 0; + sizeEx = "0.038*SafezoneH"; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "023"; + x = "24.83 * (0.01875 * SafezoneH)"; + y = "6 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; + }; + }; + }; + }; + class Rsc_ACE_Helo_UI_01: RscUnitInfo + { + controls[] = {"WeaponInfoControlsGroupRight","CA_TextFlaresMode","CA_TextFlares","CA_VehicleToggles","CA_Radar"}; + }; + class Rsc_ACE_Helo_UI_02: RscUnitInfo + { + controls[] = {"CA_TextFlaresMode","CA_TextFlares","CA_VehicleToggles","CA_Radar"}; + }; + class Rsc_ACE_Drones_UI_Turret: RscUnitInfo + { + idd = 300; + controls[] = {"CA_Zeroing","CA_IGUI_elements_group","CA_VehicleToggles"}; + class CA_IGUI_elements_group: RscControlsGroup + { + idc = 170; + class VScrollbar: VScrollbar + { + width = 0; + }; + class HScrollbar: HScrollbar + { + height = 0; + }; + x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))"; + y = "0 * (0.025 * SafezoneH) + (SafezoneY)"; + w = "53.5 * (0.01875 * SafezoneH)"; + h = "40 * (0.025 * SafezoneH)"; + class controls + { + class CA_Distance: RscText + { + idc = 151; + style = 2; + sizeEx = "0.0295*SafezoneH"; + shadow = 0; + font = "EtelkaMonospacePro"; + x = "24.78 * (0.01875 * SafezoneH)"; + y = "30.88 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; + }; + class CA_Speed: RangeText + { + idc = 188; + style = 2; + sizeEx = "0.0295*SafezoneH"; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "120"; + x = "14.78 * (0.01875 * SafezoneH)"; + y = "30.88 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; + }; + class CA_Alt: RangeText + { + idc = 189; + style = 2; + sizeEx = "0.0295*SafezoneH"; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "3825"; + x = "34.78 * (0.01875 * SafezoneH)"; + y = "30.88 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; + }; + class ValueTime: RangeText + { + idc = 190; + text = "20:28:35"; + font = "EtelkaMonospacePro"; + style = 2; + sizeEx = "0.0295*SafezoneH"; + shadow = 0; + x = "1.75 * (0.01875 * SafezoneH)"; + y = "10.5 * (0.025 * SafezoneH)"; + w = "6 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; + }; + class CA_VisionMode: RscText + { + idc = 152; + style = 0; + sizeEx = "0.0295*SafezoneH"; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "VIS"; + align = "right"; + x = "2.6 * (0.01875 * SafezoneH)"; + y = "12.0 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.0 * (0.025 * SafezoneH)"; + }; + class CA_FlirMode: RscText + { + idc = 153; + style = 0; + sizeEx = "0.0295*SafezoneH"; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "BHOT"; + align = "right"; + x = "6.18 * (0.01875 * SafezoneH)"; + y = "12.0 * (0.025 * SafezoneH)"; + w = "4.5 * (0.01875 * SafezoneH)"; + h = "1.0 * (0.025 * SafezoneH)"; + }; + class TgT_Grid_text: RangeText + { + idc = 1005; + text = "TGT:"; + font = "EtelkaMonospacePro"; + style = 2; + sizeEx = "0.0295*SafezoneH"; + shadow = 0; + x = "1.20 * (0.01875 * SafezoneH)"; + y = "13.5 * (0.025 * SafezoneH)"; + w = "6 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; + }; + class TGT_ValueGrid: RangeText + { + idc = 172; + font = "EtelkaMonospacePro"; + colorText[] = {0.706,0.0745,0.0196,0.8}; + style = 2; + sizeEx = "0.0295*SafezoneH"; + shadow = 0; + x = "5.20 * (0.01875 * SafezoneH)"; + y = "13.5 * (0.025 * SafezoneH)"; + w = "6 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; + }; + class OWN_Grid_text: RangeText + { + idc = 1005; + text = "OWN:"; + font = "EtelkaMonospacePro"; + style = 2; + sizeEx = "0.0295*SafezoneH"; + shadow = 0; + x = "1.20 * (0.01875 * SafezoneH)"; + y = "15 * (0.025 * SafezoneH)"; + w = "6 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; + }; + class OWN_ValueGrid: RangeText + { + idc = 171; + font = "EtelkaMonospacePro"; + colorText[] = {0.15,1,0.15,0.8}; + style = 2; + sizeEx = "0.0295*SafezoneH"; + shadow = 0; + x = "5.20 * (0.01875 * SafezoneH)"; + y = "15 * (0.025 * SafezoneH)"; + w = "6 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; + }; + class CA_Laser: RscText + { + idc = 158; + style = "0x30 + 0x800"; + sizeEx = "0.038*SafezoneH"; + shadow = 0; + align = "right"; + font = "EtelkaMonospacePro"; + text = PATHTOF(data\Helo_LaserON.paa); + x = "20.45 * (0.01875 * SafezoneH)"; + y = "14.1 * (0.025 * SafezoneH)"; + w = "12.5 * (0.01875 * SafezoneH)"; + h = "12 * (0.025 * SafezoneH)"; + }; + class CA_Heading: RscText + { + idc = 156; + style = 0; + sizeEx = "0.038*SafezoneH"; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "023"; + align = "right"; + x = "25 * (0.01875 * SafezoneH)"; + y = "5 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; + }; + }; + }; + }; + class Rsc_ACE_Drones_UI_Pilots: RscUnitInfo + { + idd = 300; + controls[] = {"WeaponInfoControlsGroupRight","CA_BackgroundVehicle","CA_BackgroundVehicleTitle","CA_BackgroundVehicleTitleDark","CA_BackgroundFuel","CA_Vehicle","CA_VehicleRole","CA_HitZones","CA_SpeedBackground","CA_SpeedUnits","CA_Speed","CA_ValueFuel","CA_AltBackground","CA_AltUnits","CA_Alt","CA_VehicleToggles","CA_Radar","DriverOpticsGroup"}; + class DriverOpticsGroup: RscControlsGroup + { + idc = 392; + class VScrollbar: VScrollbar + { + width = 0; + }; + class HScrollbar: HScrollbar + { + height = 0; + }; + x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))"; + y = "0 * (0.025 * SafezoneH) + (SafezoneY)"; + w = "53.5 * (0.01875 * SafezoneH)"; + h = "40 * (0.025 * SafezoneH)"; + class controls + { + class TextGrid: RscText + { + style = 0; + sizeEx = "0.02*SafezoneH"; + shadow = 0; + font = "EtelkaMonospacePro"; + idc = 1005; + text = "GRID:"; + x = "5.8 * (0.01875 * SafezoneH)"; + y = "31.8 * (0.025 * SafezoneH)"; + w = "5 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; + }; + class ValueGrid: TextGrid + { + idc = 189; + text = "382546"; + x = "10.3 * (0.01875 * SafezoneH)"; + y = "31.8 * (0.025 * SafezoneH)"; + w = "6 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; + }; + class TextTime: TextGrid + { + idc = 1010; + text = "TIME [UTC]:"; + x = "5.8 * (0.01875 * SafezoneH)"; + y = "32.6 * (0.025 * SafezoneH)"; + w = "5 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; + }; + class ValueTime: TextGrid + { + idc = 101; + text = "20:28:35"; + x = "10 * (0.01875 * SafezoneH)"; + y = "32.6 * (0.025 * SafezoneH)"; + w = "6 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; + }; + class TextMag: TextGrid + { + idc = 1011; + text = "CAM MAG:"; + x = "5.8 * (0.01875 * SafezoneH)"; + y = "7 * (0.025 * SafezoneH)"; + w = "5 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; + }; + class OpticsZoom: TextGrid + { + idc = 192; + text = "28x"; + x = "10.3 * (0.01875 * SafezoneH)"; + y = "7 * (0.025 * SafezoneH)"; + w = "6 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; + }; + class BorderLineSpdTop: RscPicture + { + idc = 1203; + text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\border_line_ca.paa"; + x = "3.343 * (0.01875 * SafezoneH)"; + y = "12.4 * (0.025 * SafezoneH)"; + w = "3 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; + }; + class BorderLineSpdBottom: RscPicture + { + idc = 1207; + text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\border_line_ca.paa"; + x = "3.343 * (0.01875 * SafezoneH)"; + y = "26.5 * (0.025 * SafezoneH)"; + w = "3 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; + }; + class BorderLineAltTop: RscPicture + { + idc = 1205; + text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\border_line_ca.paa"; + x = "47.16 * (0.01875 * SafezoneH)"; + y = "12.4 * (0.025 * SafezoneH)"; + w = "3 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; + }; + class BorderLineAltBottom: RscPicture + { + idc = 1206; + text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\border_line_ca.paa"; + x = "47.16 * (0.01875 * SafezoneH)"; + y = "26.5 * (0.025 * SafezoneH)"; + w = "3 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; + }; + class TextSpd: TextGrid + { + idc = 1004; + text = "SPD"; + x = "4.8 * (0.01875 * SafezoneH)"; + y = "11.8 * (0.025 * SafezoneH)"; + w = "5 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; + }; + class SpeedValueBorder: RscPicture + { + idc = 1200; + text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\altimeter_value_ca.paa"; + x = "6.3 * (0.01875 * SafezoneH)"; + y = "19 * (0.025 * SafezoneH)"; + w = "5 * (0.01875 * SafezoneH)"; + h = "2 * (0.025 * SafezoneH)"; + }; + class CA_Speed: TextGrid + { + idc = 190; + sizeEx = "0.03*SafezoneH"; + text = "120"; + x = "7.5 * (0.01875 * SafezoneH)"; + y = "19.5 * (0.025 * SafezoneH)"; + w = "6 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; + }; + class AnalogueSpeed: RscLadderPicture + { + idc = 384; + topValue = 1312; + bottomValue = -345; + visibleRange = -1; + text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\UAVspeedLadder_ca.paa"; + x = "1.5 * (0.01875 * SafezoneH)"; + y = "13 * (0.025 * SafezoneH)"; + w = "5 * (0.01875 * SafezoneH)"; + h = "14 * (0.025 * SafezoneH)"; + }; + class TextAlt: TextGrid + { + idc = 1006; + text = "ALT"; + x = "46.9 * (0.01875 * SafezoneH)"; + y = "11.8 * (0.025 * SafezoneH)"; + w = "5 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; + }; + class AltValueBorder: RscPicture + { + idc = 1201; + text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\airspeed_value_ca.paa"; + x = "42.25 * (0.01875 * SafezoneH)"; + y = "19 * (0.025 * SafezoneH)"; + w = "5 * (0.01875 * SafezoneH)"; + h = "2 * (0.025 * SafezoneH)"; + }; + class CA_Alt: TextGrid + { + idc = 191; + sizeEx = "0.03*SafezoneH"; + style = 1; + text = "3825"; + x = "43 * (0.01875 * SafezoneH)"; + y = "19.5 * (0.025 * SafezoneH)"; + w = "3.2 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; + }; + class AnalogueAlt: RscLadderPicture + { + idc = 385; + topValue = 14430; + bottomValue = -2110; + visibleRange = -1; + text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\UAValtLadder_ca.paa"; + x = "47 * (0.01875 * SafezoneH)"; + y = "13 * (0.025 * SafezoneH)"; + w = "2.5 * (0.01875 * SafezoneH)"; + h = "14 * (0.025 * SafezoneH)"; + }; + class AnalogueHorizon: RscLadderPicture + { + idc = 383; + topValue = 90; + bottomValue = -90; + visibleRange = -1; + text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\horizon_ladder_ca.paa"; + x = "16.75 * (0.01875 * SafezoneH)"; + y = "5 * (0.025 * SafezoneH)"; + w = "20 * (0.01875 * SafezoneH)"; + h = "30 * (0.025 * SafezoneH)"; + }; + class HorizonCenter: RscPicture + { + idc = 1202; + text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\horizon_aircraft_ca.paa"; + x = "24.75 * (0.01875 * SafezoneH)"; + y = "19 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "2 * (0.025 * SafezoneH)"; + }; + }; + }; + }; }; \ No newline at end of file diff --git a/addons/attach/stringtable.xml b/addons/attach/stringtable.xml index 839ac2e168..27a0517f9a 100644 --- a/addons/attach/stringtable.xml +++ b/addons/attach/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -48,7 +48,7 @@ Marcador IV Acoplado Strobo IR attaccata Infravörös jeladó hozzácsatolva - ИК-маяк присоединён + ИК строб присоединён IR Strobe Detached @@ -60,7 +60,7 @@ Marcador IV Separado Strobo IR staccata Infravörös jeladó lecsatolva - ИК-маяк отсоединён + ИК строб отсоединён IR Grenade Attached @@ -72,7 +72,7 @@ Granada IV Acoplada Granata IR attaccata Infravörös gránát hozzácsatolva - ИК-граната присоединена + ИК граната присоединена IR Grenade Detached @@ -84,7 +84,7 @@ Granada IV Separada Granata IR staccata Infravörös gránát lecsatolva - ИК-граната отсоединена + ИК граната отсоединена Chemlight Attached @@ -132,7 +132,7 @@ Marcador IV Strobo IR Infravörös jeladó - ИК-маяк + ИК строб IR Strobe allows you to signal your position through a pulsating beacon only visible with NVGs. @@ -144,7 +144,7 @@ O Marcador IV permite que você sinalize sua posição através de um pulso visível somente com equipamento de visão noturna. La Strobo IR è una luce stroboscopica che ti permette di segnalare la tua posizione grazie all'emissione di impulsi ad infrarossi visibili solo con i visori notturni. Az infravörös jeladóval megjelölheted a helyzetedet úgy, hogy annak pulzáló fénye csak éjjellátó készülékkel látható. - ИК-маяк позволяет сигнализировать о своём местоположении через пульсирующий свет, видимый только через ПНВ. + ИК строб позволяет сигнализировать свое местоположение через пульсирующий маяк, видимый только через ПНВ. Place @@ -156,7 +156,6 @@ Colocar Posiziona Elhelyez - Установить Cancel @@ -168,14 +167,13 @@ Cancelar Annulla Mégse - Отмена Attach Failed Échec du Attacher Befestigen fehlgeschlagen - Соединение прервано + Присоединить Ошибка Error al acoplar - \ No newline at end of file + diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index b064c05fc3..79f99c33a4 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -1,20 +1,20 @@ -class CfgAmmo { - class BulletCore; - - class BulletBase: BulletCore { - timeToLive = 15; // Default: 6, doubleplusgood all munition range. - }; - - class B_20mm : BulletBase { - timeToLive = 30; - }; - class B_25mm : BulletBase { - timeToLive = 30; - }; - class B_35mm_AA : BulletBase { - timeToLive = 30; - }; - class B_30mm_AP : BulletBase { - timeToLive = 30; - }; +class CfgAmmo { + class BulletCore; + + class BulletBase: BulletCore { + timeToLive = 15; // Default: 6, doubleplusgood all munition range. + }; + + class B_20mm : BulletBase { + timeToLive = 30; + }; + class B_25mm : BulletBase { + timeToLive = 30; + }; + class B_35mm_AA : BulletBase { + timeToLive = 30; + }; + class B_30mm_AP : BulletBase { + timeToLive = 30; + }; }; \ No newline at end of file diff --git a/addons/captives/stringtable.xml b/addons/captives/stringtable.xml index bc9cff1572..897782747f 100644 --- a/addons/captives/stringtable.xml +++ b/addons/captives/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -134,31 +134,26 @@ Surrender Kapitulieren Rendirse - Сдаться Stop Surrendering Den Kampf erneut aufnehmen Dejar de rendirse - Остановить сдачу Only use on alive units Nur bei lebenden Einheiten verwendbar Utilizar solo en unidades vivas - Только для живых юнитов Only use on dismounted inf Nur bei abgesessener Infanterie verwendbar Utilizar solo en infanteria desmontada - Только для спеш. солдат Nothing under mouse Es wurde nichts ausgewählt Nada bajo el ratón - Объекты под мышью отсутствуют - \ No newline at end of file + diff --git a/addons/common/functions/fnc__handleNetEvent.sqf b/addons/common/functions/fnc__handleNetEvent.sqf index c4e1f18f8e..804a0ade78 100644 --- a/addons/common/functions/fnc__handleNetEvent.sqf +++ b/addons/common/functions/fnc__handleNetEvent.sqf @@ -1,74 +1,74 @@ -//fnc__handleNetEvent.sqf -// internal handler for net events -#include "script_component.hpp" - -private ["_eventType", "_event", "_eventName", "_eventArgs", "_eventNames", "_eventIndex", "_eventTargets", "_sentEvents", "_owner", "_serverFlagged"]; - -_eventType = _this select 0; -_event = _this select 1; - -if(_eventType == "ACEg") then { - _eventName = _event select 0; - _eventArgs = _event select 1; - - _eventNames = GVAR(events) select 0; - _eventIndex = _eventNames find _eventName; - if(_eventIndex != -1) then { - _events = (GVAR(events) select 1) select _eventIndex; - - #ifdef DEBUG_EVENTS - diag_log text format[ARR_2("* Net Event %1",_eventName)]; - diag_log text format[ARR_2(" args=%1",_eventArgs)]; - #endif - - { - if(!isNil "_x") then { - _eventArgs call CALLSTACK_NAMED(_x, format[ARR_3("Net Event %1 ID: %2",_eventName,_forEachIndex)]); - #ifdef DEBUG_EVENTS_CALLSTACK - diag_log text format[ARR_2(" ID: %1",_forEachIndex)]; - #endif - }; - } forEach _events; - }; -}; - -if(_eventType == "ACEc") then { - if(isServer) then { - _eventName = _event select 0; - _eventTargets = _event select 1; - _eventArgs = _event select 2; - - _sentEvents = []; - if(!IS_ARRAY(_eventTargets)) then { - _eventTargets = [_eventTargets]; - }; - - //If not multiplayer, and there are targets, then just run localy - if ((!isMultiplayer) && {(count _eventTargets) > 0}) exitWith { - ACEg = [_eventName, _eventArgs]; - ["ACEg", ACEg] call FUNC(_handleNetEvent); - }; - - _serverFlagged = false; - { - _owner = _x; - if(IS_OBJECT(_x)) then { - _owner = owner _x; - }; - if(!(_owner in _sentEvents)) then { - PUSH(_sentEvents, _owner); - ACEg = [_eventName, _eventArgs]; - if(isDedicated || {_x != ACE_player}) then { - if(isDedicated && {local _x} && {!_serverFlagged}) then { - _serverFlagged = true; - ["ACEg", ACEg] call FUNC(_handleNetEvent); - } else { - _owner publicVariableClient "ACEg"; - }; - } else { - ["ACEg", ACEg] call FUNC(_handleNetEvent); - }; - }; - } forEach _eventTargets; - }; +//fnc__handleNetEvent.sqf +// internal handler for net events +#include "script_component.hpp" + +private ["_eventType", "_event", "_eventName", "_eventArgs", "_eventNames", "_eventIndex", "_eventTargets", "_sentEvents", "_owner", "_serverFlagged"]; + +_eventType = _this select 0; +_event = _this select 1; + +if(_eventType == "ACEg") then { + _eventName = _event select 0; + _eventArgs = _event select 1; + + _eventNames = GVAR(events) select 0; + _eventIndex = _eventNames find _eventName; + if(_eventIndex != -1) then { + _events = (GVAR(events) select 1) select _eventIndex; + + #ifdef DEBUG_EVENTS + diag_log text format[ARR_2("* Net Event %1",_eventName)]; + diag_log text format[ARR_2(" args=%1",_eventArgs)]; + #endif + + { + if(!isNil "_x") then { + _eventArgs call CALLSTACK_NAMED(_x, format[ARR_3("Net Event %1 ID: %2",_eventName,_forEachIndex)]); + #ifdef DEBUG_EVENTS_CALLSTACK + diag_log text format[ARR_2(" ID: %1",_forEachIndex)]; + #endif + }; + } forEach _events; + }; +}; + +if(_eventType == "ACEc") then { + if(isServer) then { + _eventName = _event select 0; + _eventTargets = _event select 1; + _eventArgs = _event select 2; + + _sentEvents = []; + if(!IS_ARRAY(_eventTargets)) then { + _eventTargets = [_eventTargets]; + }; + + //If not multiplayer, and there are targets, then just run localy + if ((!isMultiplayer) && {(count _eventTargets) > 0}) exitWith { + ACEg = [_eventName, _eventArgs]; + ["ACEg", ACEg] call FUNC(_handleNetEvent); + }; + + _serverFlagged = false; + { + _owner = _x; + if(IS_OBJECT(_x)) then { + _owner = owner _x; + }; + if(!(_owner in _sentEvents)) then { + PUSH(_sentEvents, _owner); + ACEg = [_eventName, _eventArgs]; + if(isDedicated || {_x != ACE_player}) then { + if(isDedicated && {local _x} && {!_serverFlagged}) then { + _serverFlagged = true; + ["ACEg", ACEg] call FUNC(_handleNetEvent); + } else { + _owner publicVariableClient "ACEg"; + }; + } else { + ["ACEg", ACEg] call FUNC(_handleNetEvent); + }; + }; + } forEach _eventTargets; + }; }; \ No newline at end of file diff --git a/addons/common/functions/fnc_addEventHandler.sqf b/addons/common/functions/fnc_addEventHandler.sqf index 21e2a5b6f9..8524a4abef 100644 --- a/addons/common/functions/fnc_addEventHandler.sqf +++ b/addons/common/functions/fnc_addEventHandler.sqf @@ -1,32 +1,32 @@ -/* - * Author: Nou - * - * Add a event handler. - * - * Argument: - * 0: Event name (string) - * 1: Event code (code) - * - * Return value: - * Event handler ID number (for use with fnc_removeEventHandler) - */ -#include "script_component.hpp" -private ["_eventName", "_eventCode", "_eventNames", "_eventFunctions", "_eventNameCount", "_eventIndex", "_eventFunctionCount"]; -_eventName = _this select 0; -_eventCode = _this select 1; - -_eventNames = GVAR(events) select 0; -_eventFunctions = []; -_eventIndex = _eventNames find _eventName; -if(_eventIndex != -1) then { - _eventFunctions = (GVAR(events) select 1) select _eventIndex; -} else { - _eventNameCount = count _eventNames; - _eventNames set[_eventNameCount, _eventName]; - (GVAR(events) select 1) set[_eventNameCount, _eventFunctions]; -}; - -_eventFunctionCount = count _eventFunctions; -_eventFunctions set[_eventFunctionCount, _eventCode]; - +/* + * Author: Nou + * + * Add a event handler. + * + * Argument: + * 0: Event name (string) + * 1: Event code (code) + * + * Return value: + * Event handler ID number (for use with fnc_removeEventHandler) + */ +#include "script_component.hpp" +private ["_eventName", "_eventCode", "_eventNames", "_eventFunctions", "_eventNameCount", "_eventIndex", "_eventFunctionCount"]; +_eventName = _this select 0; +_eventCode = _this select 1; + +_eventNames = GVAR(events) select 0; +_eventFunctions = []; +_eventIndex = _eventNames find _eventName; +if(_eventIndex != -1) then { + _eventFunctions = (GVAR(events) select 1) select _eventIndex; +} else { + _eventNameCount = count _eventNames; + _eventNames set[_eventNameCount, _eventName]; + (GVAR(events) select 1) set[_eventNameCount, _eventFunctions]; +}; + +_eventFunctionCount = count _eventFunctions; +_eventFunctions set[_eventFunctionCount, _eventCode]; + _eventFunctionCount; \ No newline at end of file diff --git a/addons/common/functions/fnc_dumpArray.sqf b/addons/common/functions/fnc_dumpArray.sqf index 9b889d8d22..8a95172ea7 100644 --- a/addons/common/functions/fnc_dumpArray.sqf +++ b/addons/common/functions/fnc_dumpArray.sqf @@ -1,25 +1,25 @@ -//fnc_dumpArray.sqf -#include "script_component.hpp" - -private ["_var", "_depth", "_pad", "_i", "_x"]; - -_var = _this select 0; -_depth = _this select 1; -_pad = ""; -for "_i" from 0 to _depth do { - _pad = _pad + toString [9]; -}; -_depth = _depth + 1; -if(IS_ARRAY(_var)) then { - if((count _var) > 0) then { - diag_log text format["%1[", _pad]; - { - [_x, _depth] call FUNC(dumpArray); - } forEach _var; - diag_log text format["%1],", _pad]; - } else { - diag_log text format["%1[],", _pad]; - }; -} else { - diag_log text format["%1%2", _pad, [_var] call FUNC(formatVar)]; -}; +//fnc_dumpArray.sqf +#include "script_component.hpp" + +private ["_var", "_depth", "_pad", "_i", "_x"]; + +_var = _this select 0; +_depth = _this select 1; +_pad = ""; +for "_i" from 0 to _depth do { + _pad = _pad + toString [9]; +}; +_depth = _depth + 1; +if(IS_ARRAY(_var)) then { + if((count _var) > 0) then { + diag_log text format["%1[", _pad]; + { + [_x, _depth] call FUNC(dumpArray); + } forEach _var; + diag_log text format["%1],", _pad]; + } else { + diag_log text format["%1[],", _pad]; + }; +} else { + diag_log text format["%1%2", _pad, [_var] call FUNC(formatVar)]; +}; diff --git a/addons/common/functions/fnc_dumpPerformanceCounters.sqf b/addons/common/functions/fnc_dumpPerformanceCounters.sqf index b82ae3e5ea..acf81ff20a 100644 --- a/addons/common/functions/fnc_dumpPerformanceCounters.sqf +++ b/addons/common/functions/fnc_dumpPerformanceCounters.sqf @@ -1,73 +1,73 @@ -//fnc_dumpPerformanceCounters.sqf -#define DEBUG_MODE_FULL -#include "script_component.hpp" - - -diag_log text format["REGISTERED ACE PFH HANDLERS"]; -diag_log text format["-------------------------------------------"]; -if(!isNil "ACE_PFH_COUNTER") then { - { - private["_pfh"]; - _pfh = _x select 0; - diag_log text format["Registered PFH: id=%1, %1:%2", (_pfh select 0), (_pfh select 1), (_pfh select 2) ]; - } forEach ACE_PFH_COUNTER; -}; - -diag_log text format["ACE COUNTER RESULTS"]; -diag_log text format["-------------------------------------------"]; -{ - private["_counterEntry", "_iter", "_total", "_count", "_delta", "_averageResult"]; - _counterEntry = _x; - _iter = 0; - _total = 0; - _count = 0; - _averageResult = 0; - if( (count _counterEntry) > 3) then { - // calc - { - if(_iter > 2) then { - _count = _count + 1; - _delta = (_x select 1) - (_x select 0); - - _total = _total + _delta; - }; - _iter = _iter + 1; - } forEach _counterEntry; - - // results - _averageResult = (_total / _count) * 1000; - - // dump results - diag_log text format["%1: Average: %2s / %3 = %4ms", (_counterEntry select 0), _total, _count, _averageResult]; - } else { - diag_log text format["%1: No results", (_counterEntry select 0) ]; - }; -} forEach ACE_COUNTERS; - -/* -// Dump PFH Trackers -diag_log text format["ACE_PERFORMANCE_EXCESSIVE_STEP_TRACKER"]; -diag_log text format["-------------------------------------------"]; -{ - private["_delay"]; - _delay = _x select 2; - //if(_delay > 0) then { _delay = _delay / 1000; }; - - diag_log text format["%1: %2s, delay=%3, handle=%4",(_x select 0), _delay, (_x select 3), (_x select 4)]; -} forEach ACE_PERFORMANCE_EXCESSIVE_STEP_TRACKER; - -// Dump PFH Trackers -diag_log text format["ACE_PERFORMANCE_EXCESSIVE_FRAME_TRACKER"]; -diag_log text format["-------------------------------------------"]; -{ - private["_delta"]; - _delta = _x select 1; - //if(_delta > 0) then { _delta = _delta / 1000; }; - diag_log text format[" DELTA: %1s", _delta]; -} forEach ACE_PERFORMANCE_EXCESSIVE_FRAME_TRACKER; - -//{ -// -//} forEach ACRE_EXCESSIVE_FRAME_TRACKER; - +//fnc_dumpPerformanceCounters.sqf +#define DEBUG_MODE_FULL +#include "script_component.hpp" + + +diag_log text format["REGISTERED ACE PFH HANDLERS"]; +diag_log text format["-------------------------------------------"]; +if(!isNil "ACE_PFH_COUNTER") then { + { + private["_pfh"]; + _pfh = _x select 0; + diag_log text format["Registered PFH: id=%1, %1:%2", (_pfh select 0), (_pfh select 1), (_pfh select 2) ]; + } forEach ACE_PFH_COUNTER; +}; + +diag_log text format["ACE COUNTER RESULTS"]; +diag_log text format["-------------------------------------------"]; +{ + private["_counterEntry", "_iter", "_total", "_count", "_delta", "_averageResult"]; + _counterEntry = _x; + _iter = 0; + _total = 0; + _count = 0; + _averageResult = 0; + if( (count _counterEntry) > 3) then { + // calc + { + if(_iter > 2) then { + _count = _count + 1; + _delta = (_x select 1) - (_x select 0); + + _total = _total + _delta; + }; + _iter = _iter + 1; + } forEach _counterEntry; + + // results + _averageResult = (_total / _count) * 1000; + + // dump results + diag_log text format["%1: Average: %2s / %3 = %4ms", (_counterEntry select 0), _total, _count, _averageResult]; + } else { + diag_log text format["%1: No results", (_counterEntry select 0) ]; + }; +} forEach ACE_COUNTERS; + +/* +// Dump PFH Trackers +diag_log text format["ACE_PERFORMANCE_EXCESSIVE_STEP_TRACKER"]; +diag_log text format["-------------------------------------------"]; +{ + private["_delay"]; + _delay = _x select 2; + //if(_delay > 0) then { _delay = _delay / 1000; }; + + diag_log text format["%1: %2s, delay=%3, handle=%4",(_x select 0), _delay, (_x select 3), (_x select 4)]; +} forEach ACE_PERFORMANCE_EXCESSIVE_STEP_TRACKER; + +// Dump PFH Trackers +diag_log text format["ACE_PERFORMANCE_EXCESSIVE_FRAME_TRACKER"]; +diag_log text format["-------------------------------------------"]; +{ + private["_delta"]; + _delta = _x select 1; + //if(_delta > 0) then { _delta = _delta / 1000; }; + diag_log text format[" DELTA: %1s", _delta]; +} forEach ACE_PERFORMANCE_EXCESSIVE_FRAME_TRACKER; + +//{ +// +//} forEach ACRE_EXCESSIVE_FRAME_TRACKER; + */ \ No newline at end of file diff --git a/addons/common/functions/fnc_getTurretDirection.sqf b/addons/common/functions/fnc_getTurretDirection.sqf index 072644f058..fb265bf545 100644 --- a/addons/common/functions/fnc_getTurretDirection.sqf +++ b/addons/common/functions/fnc_getTurretDirection.sqf @@ -1,37 +1,37 @@ -/* - * Author: jaynus - * - * Get the absolute turret direction for FOV/PIP turret. - * - * Argument: - * 0: Vehicle (Object) - * 1: Turret Position - * - * Return value: - * [position, direction] - */ -#include "script_component.hpp" - -EXPLODE_2_PVT(_this,_vehicle,_position); -private ["_turrets", "_turret", "_config", "_turret", "_povPos", "_povDir", "_gunBeginPos", "_gunEndPos", "_pov"]; - -_turret = [_vehicle, _position] call CBA_fnc_getTurret; -_pov = getText (_turret >> "memoryPointGunnerOptics"); -_gunBeg = getText (_turret >> "gunBeg"); -_gunEnd = getText (_turret >> "gunEnd"); -TRACE_3("", _pov, _gunBeg, _gunEnd); - -// Pull the PIP pov or barrel direction, depending on how the model is set up -_povPos = ATLtoASL ( _vehicle modelToWorldVisual (_vehicle selectionPosition _pov ) ); -_povDir = [0,0,0]; - -if(_pov == "pip0_pos") then { - _pipDir = ATLtoASL ( _vehicle modelToWorldVisual (_vehicle selectionPosition "pip0_dir" ) ); - _povDir = _pipDir vectorDiff _povPos; -} else { - _gunBeginPos = ATLtoASL ( _vehicle modelToWorldVisual (_vehicle selectionPosition _gunBeg ) ); - _gunEndPos = ATLtoASL ( _vehicle modelToWorldVisual (_vehicle selectionPosition _gunEnd ) ); - _povDir = _gunBeginPos vectorDiff _gunEndPos; -}; - +/* + * Author: jaynus + * + * Get the absolute turret direction for FOV/PIP turret. + * + * Argument: + * 0: Vehicle (Object) + * 1: Turret Position + * + * Return value: + * [position, direction] + */ +#include "script_component.hpp" + +EXPLODE_2_PVT(_this,_vehicle,_position); +private ["_turrets", "_turret", "_config", "_turret", "_povPos", "_povDir", "_gunBeginPos", "_gunEndPos", "_pov"]; + +_turret = [_vehicle, _position] call CBA_fnc_getTurret; +_pov = getText (_turret >> "memoryPointGunnerOptics"); +_gunBeg = getText (_turret >> "gunBeg"); +_gunEnd = getText (_turret >> "gunEnd"); +TRACE_3("", _pov, _gunBeg, _gunEnd); + +// Pull the PIP pov or barrel direction, depending on how the model is set up +_povPos = ATLtoASL ( _vehicle modelToWorldVisual (_vehicle selectionPosition _pov ) ); +_povDir = [0,0,0]; + +if(_pov == "pip0_pos") then { + _pipDir = ATLtoASL ( _vehicle modelToWorldVisual (_vehicle selectionPosition "pip0_dir" ) ); + _povDir = _pipDir vectorDiff _povPos; +} else { + _gunBeginPos = ATLtoASL ( _vehicle modelToWorldVisual (_vehicle selectionPosition _gunBeg ) ); + _gunEndPos = ATLtoASL ( _vehicle modelToWorldVisual (_vehicle selectionPosition _gunEnd ) ); + _povDir = _gunBeginPos vectorDiff _gunEndPos; +}; + [_povPos, _povDir] \ No newline at end of file diff --git a/addons/common/functions/fnc_globalEvent.sqf b/addons/common/functions/fnc_globalEvent.sqf index 7816f1f1c5..dcf40261cf 100644 --- a/addons/common/functions/fnc_globalEvent.sqf +++ b/addons/common/functions/fnc_globalEvent.sqf @@ -1,22 +1,22 @@ -/* - * Author: Nou - * - * Execute a global event on all clients, including self. - * - * Argument: - * 0: Event name (string) - * 1: Event args (any) - * - * Return value: - * Nothing - */ -#include "script_component.hpp" -private ["_eventName", "_eventArgs"]; - -_eventName = _this select 0; -_eventArgs = _this select 1; - - -ACEg = [_eventName, _eventArgs]; -publicVariable "ACEg"; +/* + * Author: Nou + * + * Execute a global event on all clients, including self. + * + * Argument: + * 0: Event name (string) + * 1: Event args (any) + * + * Return value: + * Nothing + */ +#include "script_component.hpp" +private ["_eventName", "_eventArgs"]; + +_eventName = _this select 0; +_eventArgs = _this select 1; + + +ACEg = [_eventName, _eventArgs]; +publicVariable "ACEg"; ["ACEg", ACEg] call FUNC(_handleNetEvent); \ No newline at end of file diff --git a/addons/common/functions/fnc_localEvent.sqf b/addons/common/functions/fnc_localEvent.sqf index 3ee9cb0a04..0b8c218eca 100644 --- a/addons/common/functions/fnc_localEvent.sqf +++ b/addons/common/functions/fnc_localEvent.sqf @@ -1,34 +1,34 @@ -/* - * Author: Nou - * - * Execute a local event on this client only. - * - * Argument: - * 0: Event name (string) - * 1: Event args (any) - * - * Return value: - * Nothing - */ -#include "script_component.hpp" - -PARAMS_2(_eventName,_eventArgs); - -_eventNames = GVAR(events) select 0; -_eventIndex = _eventNames find _eventName; -if(_eventIndex != -1) then { - _events = (GVAR(events) select 1) select _eventIndex; - #ifdef DEBUG_EVENTS - diag_log text format[ARR_2("* Local Event: %1",_eventName)]; - diag_log text format[ARR_2(" args=%1",_eventArgs)]; - #endif - - { - if(!isNil "_x") then { - _eventArgs call CALLSTACK_NAMED(_x, format[ARR_3("Local Event %1 ID: %2",_eventName,_forEachIndex)]); - #ifdef DEBUG_EVENTS_CALLSTACK - diag_log text format[ARR_2(" ID: %1",_forEachIndex)]; - #endif - }; - } forEach _events; +/* + * Author: Nou + * + * Execute a local event on this client only. + * + * Argument: + * 0: Event name (string) + * 1: Event args (any) + * + * Return value: + * Nothing + */ +#include "script_component.hpp" + +PARAMS_2(_eventName,_eventArgs); + +_eventNames = GVAR(events) select 0; +_eventIndex = _eventNames find _eventName; +if(_eventIndex != -1) then { + _events = (GVAR(events) select 1) select _eventIndex; + #ifdef DEBUG_EVENTS + diag_log text format[ARR_2("* Local Event: %1",_eventName)]; + diag_log text format[ARR_2(" args=%1",_eventArgs)]; + #endif + + { + if(!isNil "_x") then { + _eventArgs call CALLSTACK_NAMED(_x, format[ARR_3("Local Event %1 ID: %2",_eventName,_forEachIndex)]); + #ifdef DEBUG_EVENTS_CALLSTACK + diag_log text format[ARR_2(" ID: %1",_forEachIndex)]; + #endif + }; + } forEach _events; }; \ No newline at end of file diff --git a/addons/common/functions/fnc_removeAllEventHandlers.sqf b/addons/common/functions/fnc_removeAllEventHandlers.sqf index fead934a57..170d4f8cbb 100644 --- a/addons/common/functions/fnc_removeAllEventHandlers.sqf +++ b/addons/common/functions/fnc_removeAllEventHandlers.sqf @@ -1,21 +1,21 @@ -/* - * Author: Nou - * - * Remove all events of a certain event type. - * - * Argument: - * 0: Event name (string) - * - * Return value: - * Nothing - */ -#include "script_component.hpp" -private ["_eventName", "_eventNames", "_eventFunctions", "_eventIndex"]; -_eventName = _this select 0; - -_eventNames = GVAR(events) select 0; -_eventFunctions = []; -_eventIndex = _eventNames find _eventName; -if(_eventIndex != -1) then { - (GVAR(events) select 1) set[_eventIndex, []]; +/* + * Author: Nou + * + * Remove all events of a certain event type. + * + * Argument: + * 0: Event name (string) + * + * Return value: + * Nothing + */ +#include "script_component.hpp" +private ["_eventName", "_eventNames", "_eventFunctions", "_eventIndex"]; +_eventName = _this select 0; + +_eventNames = GVAR(events) select 0; +_eventFunctions = []; +_eventIndex = _eventNames find _eventName; +if(_eventIndex != -1) then { + (GVAR(events) select 1) set[_eventIndex, []]; }; \ No newline at end of file diff --git a/addons/common/functions/fnc_removeEventHandler.sqf b/addons/common/functions/fnc_removeEventHandler.sqf index 20bc6923c8..d87c72933d 100644 --- a/addons/common/functions/fnc_removeEventHandler.sqf +++ b/addons/common/functions/fnc_removeEventHandler.sqf @@ -1,24 +1,24 @@ -/* - * Author: Nou - * - * Remove an event handler. - * - * Argument: - * 0: Event name (string) - * 1: Event code (number) - * - * Return value: - * Nothing - */ -#include "script_component.hpp" -private ["_eventName", "_eventNames", "_eventFunctions", "_eventIndex", "_eventCodeIndex"]; -_eventName = _this select 0; -_eventCodeIndex = _this select 1; - -_eventNames = GVAR(events) select 0; -_eventFunctions = []; -_eventIndex = _eventNames find _eventName; -if(_eventIndex != -1) then { - _eventFunctions = (GVAR(events) select 1) select _eventIndex; - _eventFunctions set[_eventCodeIndex, nil]; +/* + * Author: Nou + * + * Remove an event handler. + * + * Argument: + * 0: Event name (string) + * 1: Event code (number) + * + * Return value: + * Nothing + */ +#include "script_component.hpp" +private ["_eventName", "_eventNames", "_eventFunctions", "_eventIndex", "_eventCodeIndex"]; +_eventName = _this select 0; +_eventCodeIndex = _this select 1; + +_eventNames = GVAR(events) select 0; +_eventFunctions = []; +_eventIndex = _eventNames find _eventName; +if(_eventIndex != -1) then { + _eventFunctions = (GVAR(events) select 1) select _eventIndex; + _eventFunctions set[_eventCodeIndex, nil]; }; \ No newline at end of file diff --git a/addons/common/functions/fnc_serverEvent.sqf b/addons/common/functions/fnc_serverEvent.sqf index 7ee1f6d0b8..b792323867 100644 --- a/addons/common/functions/fnc_serverEvent.sqf +++ b/addons/common/functions/fnc_serverEvent.sqf @@ -1,29 +1,29 @@ -/* - * Author: Nou - * - * Execute a event only on the server. - * - * Argument: - * 0: Event name (string) - * 1: Event args (any) - * - * Return value: - * Nothing - */ -#include "script_component.hpp" -private ["_eventName", "_eventArgs"]; - -_eventName = _this select 0; -_eventArgs = _this select 1; - - #ifdef DEBUG_EVENTS - diag_log text format[ARR_2("* Server Event: %1",_eventName)]; - diag_log text format[ARR_2(" args=%1",_eventArgs)]; - #endif - -ACEg = [_eventName, _eventArgs]; -if(!isServer) then { - publicVariableServer "ACEg"; -} else { - ["ACEg", ACEg] call FUNC(_handleNetEvent); -}; +/* + * Author: Nou + * + * Execute a event only on the server. + * + * Argument: + * 0: Event name (string) + * 1: Event args (any) + * + * Return value: + * Nothing + */ +#include "script_component.hpp" +private ["_eventName", "_eventArgs"]; + +_eventName = _this select 0; +_eventArgs = _this select 1; + + #ifdef DEBUG_EVENTS + diag_log text format[ARR_2("* Server Event: %1",_eventName)]; + diag_log text format[ARR_2(" args=%1",_eventArgs)]; + #endif + +ACEg = [_eventName, _eventArgs]; +if(!isServer) then { + publicVariableServer "ACEg"; +} else { + ["ACEg", ACEg] call FUNC(_handleNetEvent); +}; diff --git a/addons/common/functions/fnc_targetEvent.sqf b/addons/common/functions/fnc_targetEvent.sqf index 0c6da183b2..7299eeb057 100644 --- a/addons/common/functions/fnc_targetEvent.sqf +++ b/addons/common/functions/fnc_targetEvent.sqf @@ -1,34 +1,34 @@ -/* - * Author: Nou - * - * Execute a event only on specific clients. - * - * Argument: - * 0: Event name (string) - * 1: Event targets (object or array of objects) - * 2: Event args (any) - * - * Note: If local executor is in list of targets, event will execute with - * network delay, and not immediatly. - * - * Return value: - * Nothing - */ -#include "script_component.hpp" -private ["_eventName", "_eventArgs", "_eventTargets"]; - -_eventName = _this select 0; -_eventTargets = _this select 1; -_eventArgs = _this select 2; - -#ifdef DEBUG_EVENTS - diag_log text format[ARR_3("* Target Event: %1 - %2",_eventName,_eventTargets)]; - diag_log text format[ARR_2(" args=%1",_eventArgs)]; -#endif - -ACEc = [_eventName, _eventTargets, _eventArgs]; -if(!isServer) then { - publicVariableServer "ACEc"; -} else { - ["ACEc", ACEc] call FUNC(_handleNetEvent); +/* + * Author: Nou + * + * Execute a event only on specific clients. + * + * Argument: + * 0: Event name (string) + * 1: Event targets (object or array of objects) + * 2: Event args (any) + * + * Note: If local executor is in list of targets, event will execute with + * network delay, and not immediatly. + * + * Return value: + * Nothing + */ +#include "script_component.hpp" +private ["_eventName", "_eventArgs", "_eventTargets"]; + +_eventName = _this select 0; +_eventTargets = _this select 1; +_eventArgs = _this select 2; + +#ifdef DEBUG_EVENTS + diag_log text format[ARR_3("* Target Event: %1 - %2",_eventName,_eventTargets)]; + diag_log text format[ARR_2(" args=%1",_eventArgs)]; +#endif + +ACEc = [_eventName, _eventTargets, _eventArgs]; +if(!isServer) then { + publicVariableServer "ACEc"; +} else { + ["ACEc", ACEc] call FUNC(_handleNetEvent); }; \ No newline at end of file diff --git a/addons/common/functions/script_component.hpp b/addons/common/functions/script_component.hpp index 10f5e1565f..95b7e86461 100644 --- a/addons/common/functions/script_component.hpp +++ b/addons/common/functions/script_component.hpp @@ -1,13 +1,13 @@ -#include "\z\ace\addons\common\script_component.hpp" - -#define VALIDHASH(hash) (IS_ARRAY(hash) && {(count hash) >= 2} && {IS_ARRAY(hash select 0)} && {IS_ARRAY(hash select 1)}) -#define ERROR(msg) throw msg + format[" @ %1:%2", _callFrom, _lineNo] -#define HANDLECATCH diag_log text _exception; assert(exception=="") - -#define ERRORDATA(c) private ["_callFrom", "_lineNo"];\ - _callFrom = "";\ - _lineNo = -1;\ - if((count _this) > c) then {\ - _callFrom = _this select c;\ - _lineNo = _this select c+1;\ +#include "\z\ace\addons\common\script_component.hpp" + +#define VALIDHASH(hash) (IS_ARRAY(hash) && {(count hash) >= 2} && {IS_ARRAY(hash select 0)} && {IS_ARRAY(hash select 1)}) +#define ERROR(msg) throw msg + format[" @ %1:%2", _callFrom, _lineNo] +#define HANDLECATCH diag_log text _exception; assert(exception=="") + +#define ERRORDATA(c) private ["_callFrom", "_lineNo"];\ + _callFrom = "";\ + _lineNo = -1;\ + if((count _this) > c) then {\ + _callFrom = _this select c;\ + _lineNo = _this select c+1;\ }; \ No newline at end of file diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index d1e81e01a6..a5f5368cd0 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -300,78 +300,64 @@ Aceptar Peticiones Accept Requests Anfrage annehmen - Подтвердить запросы Ignoruj prośby Rechazar Peticiones Decline Requests Anfrage ablehnen - Отклонить запросы Akceptuj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności. Acepta Peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones. Accept Requests send by other players. These can be requests to use / share equipment, perform certain actions. Anfragen anderer Spieler annehmen. Diese Anfragen können sich auf das Benutzen / Teilen von Equipment beziehen oder das Ausführen bestimmter Aktionen. - Подтвердить запросы, посланные другими игроками. Это могут быть просьбы о передаче снаряжения или выполнении определённых действий. Ignoruj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności. Rechazar Peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones. Decline Requests send by other players. These can be requests to use / share equipment, perform certain actions. Anfragen anderer Spieler ablehnen. Diese Anfragen können sich auf das Benutzen / Teilen von Equipment beziehen oder das Ausführen bestimmter Aktionen. - Отклонить запросы, посланные другими игроками. Это могут быть просьбы о передаче снаряжения или выполнении определённых действий. Feedback icons Feedback-Icons - Иконки состояний Select the position of or disable the feedback icons on your screen. These icons will show to provide extra feedback on your character status and actions performed. Wähle die Position der Feedback-Icons aus oder deaktiviere Sie. Die Feedback-Icons zeigen den Status deiner Einheit an, oder die ausgeführte Aktion. - Выберите положение или или отключите отображение иконок состояний на Вашем экране. Эти иконки предоставят дополнительную информацию о состоянии персонажа и выполняемых действиях. Progress bar location Position des Fortschrittsanzeige - Положение прогресс-бара Set the desired location of the progress bar on your screen. Wähle die Position der Fortschrittsanzeige. - Установите желаемое положение строки состояния на экране. Hint Background color Hinweis Hintergrundfarbe - Цвет фона всплывающих подсказок The color of the background from the ACE hints. Wähle die Hintergrundfarbe für ACE-Hinweise. - Цвет фона всплывающий подсказок АСЕ. Hint text font color Hinweis Textfarbe - Цвет шрифта всплывающих подсказок The color of the text font from the ACE hints. This color is the default color for all text displayed through the ACE Hint system, if the hint text has no other color specified. Wähle die Textfarbe für ACE-Hinweise. - Цвет шрифта текста всплывающих подсказок АСЕ. Этот цвет является стандартным для всего текста, транслирующегося через систему подсказок АСЕ, если не установлено другого цвета для текста подсказок. Banana Banane - Банан A banana is an edible fruit, botanically a berry, produced by several kinds of large herbaceous flowering plants in the genus Musa. Die Bananen (Musa) sind eine Pflanzengattung in der Familie der Bananengewächse (Musaceae) innerhalb der Einkeimblättrigen Pflanzen (Monokotyledonen). - Банан - это съедобный фрукт, ягода с ботанической точки зрения, произрастающий на нескольких видах травянистых растениях рода Банан (Musa). \ No newline at end of file diff --git a/addons/dragging/stringtable.xml b/addons/dragging/stringtable.xml index 3199dd7c20..9193d2712e 100644 --- a/addons/dragging/stringtable.xml +++ b/addons/dragging/stringtable.xml @@ -1,5 +1,5 @@ - - + + @@ -40,7 +40,6 @@ Não é possível carregar o item devido a seu peso Non è possibile trascinare l'oggetto a causa del suo peso Túl nehéz ahhoz, hogy elhúzd --> - Слишком тяжело Carry @@ -55,4 +54,4 @@ Нести - \ No newline at end of file + diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml index 834101f9c7..1d010a0a7e 100644 --- a/addons/explosives/stringtable.xml +++ b/addons/explosives/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -48,7 +48,7 @@ Codice dell'esplosivo : %1 Robbanóanyag kódja: %1 Código do explosivo: %1 - Код подрыва: %1 + Взрывная код: %1 Place @@ -60,7 +60,7 @@ Piazza Elhelyezés Colocar - Установить + Положить Cancel @@ -132,7 +132,7 @@ Usato per l'attivazione a distanza degli esplosivi Robbanóanyagok távoli robbantásához Usado para acionar explosivos remotamente - Используется для удаленной детонации СВУ + Используется для удаленного запуска взрывчатку M57 Firing Device @@ -156,7 +156,7 @@ Usato per l'attivazione a distanza degli esplosivi Robbanóanyagok távoli robbantásához Usado para acionar explosivos remotamente - Используется для удаленной детонации зарядов + Используется для удаленного запуска взрывчатку M26 Firing Device @@ -192,7 +192,7 @@ Kit E.O.D. Hatástalanító felszerelés Kit de desarme - Комплект разминирования + Разминирование комплект Allows defusing of explosives @@ -204,7 +204,7 @@ Consente la disattivazione degli ordigni esplosivi Robbanóanyagok hatástalanításához Permite o desarme de explosivos - Позволяет обезвреживать ВУ + Allows defusing of explosives Add to Speed Dial @@ -228,7 +228,7 @@ Libera Törlés Limpar - Очистить + Pассеиваться Dial @@ -252,7 +252,7 @@ Sopra Fel Cima - Вызов + Поднять Down @@ -264,7 +264,7 @@ Sotto Le Baixo - Сброс + Опустить Cancel @@ -288,7 +288,7 @@ Menù di detonazione Robbantás menü Menu de detonação - Меню подрыва + Меню Подрыв Place Menu @@ -300,7 +300,7 @@ Menù di collocamento Lerakás menü Menu de posicionamento - Меню детонации + Меню Установить Defuse @@ -336,7 +336,7 @@ Cronometro Időzített Timer - Таймер + Временной Time: %1m %2s @@ -348,7 +348,7 @@ Tempo : %1m %2s Idő: %1m %2s Tempo: %1m %2s - Время: %1m %2c + Tемп: %1m %2c Set Time @@ -360,7 +360,7 @@ Modifica il conto alla rovescia Idő állítása Configurar Tempo - Установить время + Xронометр Select a Trigger @@ -372,7 +372,7 @@ Seleziona un Attivatore Detonátor kiválasztása Selecionar um Gatilho - Выберите детонатор + Выберите Select @@ -384,7 +384,7 @@ Seleziona Kiválasztás Selecionar - Выбрать + Выбрать защелка Pressure Plate @@ -408,7 +408,7 @@ Filo a Inciampo Botlódrót Linha de tração - Растяжка + Натяжной IR Sensor @@ -420,7 +420,7 @@ Sensore IR IR szenzor Sensor IV - ИК сенсор + ИК No triggers available for %1 @@ -432,7 +432,7 @@ Nessun attivatore disponibile per %1 Nincs detonátor a %1 Nenhum gatilho disponível para %1 - Нет доступных взрывателей для %1 + Нет защелка доступны для %1 IR Sensor (Side Attack) @@ -444,7 +444,7 @@ Sensore IR (Attacco laterale) IR Sensor (Side Attack) Sensor infravermelho (ataque lateral) - ИК (детонация вбок) + ИК (боковая атака) Magnetic Influence Sensor (Bottom Attack) @@ -456,7 +456,7 @@ Sensore Magnetico di Prossimità (Attacco inferiore) Mágneses (Bottom Attack) Influência magnética (ataque inferior) - Магнитный (детонация вверх) + Магнитный (дно атака) No explosives on trigger. @@ -468,7 +468,7 @@ Nincs robbanóanyag a detonátorhoz. Brak ładunków na zapalnik. Nenhum explosivo no gatilho. - Нет доступных ВУ для взрывателя. + Нет взрывчатки на курок. Dead Man's Switch @@ -478,7 +478,7 @@ Czuwak Detonador de hombre muerto Dead Man's Switch - Ловушка мертвеца + Кнопка мертвеца Used to remotely trigger explosives when released. diff --git a/addons/fcs/functions/fnc_onForceUpdate.sqf b/addons/fcs/functions/fnc_onForceUpdate.sqf index d11652fc8a..6f477fd3f6 100644 --- a/addons/fcs/functions/fnc_onForceUpdate.sqf +++ b/addons/fcs/functions/fnc_onForceUpdate.sqf @@ -1,7 +1,7 @@ -#include "script_component.hpp" - -if !([ACE_player, vehicle ACE_player, []] call EFUNC(common,canInteractWith)) exitWith {false}; -if !((!GVAR(enabled) && FUNC(canUseFCS)) || FUNC(canUseRangefinder)) exitWith {false}; - -[vehicle ACE_player, [ACE_player] call EFUNC(common,getTurretIndex), -1, false] call FUNC(keyDown); +#include "script_component.hpp" + +if !([ACE_player, vehicle ACE_player, []] call EFUNC(common,canInteractWith)) exitWith {false}; +if !((!GVAR(enabled) && FUNC(canUseFCS)) || FUNC(canUseRangefinder)) exitWith {false}; + +[vehicle ACE_player, [ACE_player] call EFUNC(common,getTurretIndex), -1, false] call FUNC(keyDown); [vehicle ACE_player, [ACE_player] call EFUNC(common,getTurretIndex), -1, false, false] call FUNC(keyUp); \ No newline at end of file diff --git a/addons/fcs/stringtable.xml b/addons/fcs/stringtable.xml index 0911bbdb57..154d874f73 100644 --- a/addons/fcs/stringtable.xml +++ b/addons/fcs/stringtable.xml @@ -1,81 +1,81 @@  - + - - - Lase Target / Measure Distance - Ziel anlasern / Entfernung Messen - Télémétrer la cible - Naświetl cel / Zmierz odległość - Označit cíl / Změřit vzdálenost - Iluminar objetivo / Medir distancia - - Подсветить цель / Замерить расстояние - - - Zeroed To - Haltepunkt - Fijado a - Wyzerowany na - Nastaveno na - Zéroté à - Выставлено на - Nullázás - Fixado em - Azzeramento a - - - Adjust FCS Range (Up) - Entfernung des FLS erhöhen - Zwiększ zasięg FCS - Ajustar distancia del FCS (arriba) - Nastavit FCS Náměr (nahoru) - Augmenter la distance du SCT - FCS tartomány állítása (Fel) - Ajustar distância do FCS (Acima) - Aumentare la distanza dell'FCS - Диапазон СУО (Выше) - - - Adjust FCS Range (Down) - Entfernung des FLS verringern - Zmniejsz zasięg FCS - Ajustar distancia del FCS (abajo) - Nastavit FCS Náměr (dolů) - Réduire la distance du SCT - FCS tartomány állítása (Le) - Ajustar distância do FCS (Abaixo) - Ridurre la distanza dell'FCS - Диапазон СУО (Ниже) - - - Reset FCS - FLS zurücksetzen - Reiniciar FCS - Réinitialiser le SCT - Resetuj FCS - Resetovat FCS - FCS visszaállítása - Reiniciar FCS - Azzeramento dell'FCS - Обнулить СУО - - - FCS has been reset. - FLS wurde zurückgesetzt. - FCS reiniciado - SCT réinitialisé. - FCS został zresetowany. - FCS byl resetován. - Az FCS visszaállítva - FCS reiniciado. - L'FCS è stato azzerato - СУО обнулен. - - - \ No newline at end of file + Подсветить цель / Измерить расстояние + + + Zeroed To + Haltepunkt + Fijado a + Wyzerowany na + Nastaveno na + Zéroté à + Зероинг + Nullázás + Fixado em + Azzeramento a + + + Adjust FCS Range (Up) + Entfernung des FLS erhöhen + Zwiększ zasięg FCS + Ajustar distancia del FCS (arriba) + Nastavit FCS Náměr (nahoru) + Augmenter la distance du SCT + FCS tartomány állítása (Fel) + Ajustar distância do FCS (Acima) + Aumentare la distanza dell'FCS + Диапазон СУО (Выше) + + + Adjust FCS Range (Down) + Entfernung des FLS verringern + Zmniejsz zasięg FCS + Ajustar distancia del FCS (abajo) + Nastavit FCS Náměr (dolů) + Réduire la distance du SCT + FCS tartomány állítása (Le) + Ajustar distância do FCS (Abaixo) + Ridurre la distanza dell'FCS + Диапазон СУО (Ниже) + + + Reset FCS + FLS zurücksetzen + Reiniciar FCS + Réinitialiser le SCT + Resetuj FCS + Resetovat FCS + FCS visszaállítása + Reiniciar FCS + Azzeramento dell'FCS + Обнулить СУО + + + FCS has been reset. + FLS wurde zurückgesetzt. + FCS reiniciado + SCT réinitialisé. + FCS został zresetowany. + FCS byl resetován. + Az FCS visszaállítva + FCS reiniciado. + L'FCS è stato azzerato + СУО обнулен + + + diff --git a/addons/frag/CfgAmmo.hpp b/addons/frag/CfgAmmo.hpp index bec683d603..8ad76e6ae8 100644 --- a/addons/frag/CfgAmmo.hpp +++ b/addons/frag/CfgAmmo.hpp @@ -1,352 +1,352 @@ -#define BASE_DRAG -0.01 -#define HD_MULT 5 -#define BASE_DRAG_HD (BASE_DRAG*HD_MULT) - -class CfgAmmo { - //class ace_arty_105mm_m1_m782_time; - //class ace_arty_105mm_m1_m782_prox: ace_arty_105mm_m1_m782_time {}; - //class ace_arty_105mm_m1_m782_delay: ace_arty_105mm_m1_m782_prox { - // ACE_FRAG_SKIP = 1; - //}; - class Bo_GBU12_LGB; - class Nou_GBU12 : Bo_GBU12_LGB { - ACE_FRAG_CLASSES[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"}; - ACE_FRAG_METAL = 140000; - ACE_FRAG_CHARGE = 87000; - ACE_FRAG_GURNEY_C = 2320; - ACE_FRAG_GURNEY_K = 1/2; - sideAirFriction = 0.04; - airFriction = 0.04; - laserLock = 0; - }; - - class GrenadeBase; - class Grenade; - class GrenadeHand: Grenade { - ACE_FRAG_SKIP = 0; - ACE_FRAG_FORCE = 1; - // This is a good high-drag frag type for grenades. - ACE_FRAG_CLASSES[] = {"ACE_frag_tiny_HD"}; - /* - These values are based on the M67 Grenade, should be tweaked for - individual grenades. - */ - ACE_FRAG_METAL = 210; // metal in grams - ACE_FRAG_CHARGE = 185; // explosive in grams - ACE_FRAG_GURNEY_C = 2843; // Gurney velocity constant for explosive type. See: http://en.wikipedia.org/wiki/Gurney_equations - ACE_FRAG_GURNEY_K = 3/5; // Gurney shape factor, in this case a sphere. See: http://en.wikipedia.org/wiki/Gurney_equations - }; - class GrenadeHand_stone: GrenadeHand { - ACE_FRAG_SKIP = 1; - }; - class SmokeShell: GrenadeHand { - ACE_FRAG_SKIP = 1; - }; - - class RocketBase; - //class R_Hydra_HE: RocketBase { - // ACE_FRAG_SKIP = 1; - //}; - - //class R_57mm_HE: RocketBase { - // ACE_FRAG_SKIP = 1; - //}; - - class R_80mm_HE: RocketBase { - ACE_FRAG_SKIP = 1; - }; - - //class R_S8T_AT: RocketBase { - // ACE_FRAG_SKIP = 1; - //}; - - class BombCore; - class Bo_Mk82: BombCore { - ACE_FRAG_CLASSES[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"}; - ACE_FRAG_METAL = 140000; - ACE_FRAG_CHARGE = 87000; - ACE_FRAG_GURNEY_C = 2320; - ACE_FRAG_GURNEY_K = 1/2; - }; - - - class G_40mm_HE: GrenadeBase { - ACE_FRAG_SKIP = 0; - ACE_FRAG_FORCE = 1; - }; - - class ACE_G_40mm_HEDP: G_40mm_HE { - }; - class ACE_G_40mm_HE: ACE_G_40mm_HEDP { - }; - class ACE_G_40mm_Practice: ACE_G_40mm_HE { - ACE_FRAG_SKIP = 1; - }; - class ACE_G40mm_HE_VOG25P: G_40mm_HE { - ACE_FRAG_SKIP = 0; - ACE_FRAG_FORCE = 1; - }; - - //class R_SMAW_HEDP; - //class R_MEEWS_HEDP : R_SMAW_HEDP { - // ACE_FRAG_FORCE = 1; - // ACE_FRAG_MULTIPLIER = 1.2; - //}; - - //class MissileBase; - //class M_Hellfire_AT: MissileBase { - // ACE_FRAG_FORCE = 1; - // ACE_FRAG_MULTIPLIER = 1.75; - //}; - - /* - class B_762x51_Ball; - class ACE_frag_base: B_762x51_Ball { ////TODO: B_762x45_Ball no longer exists, is this a valid replacement? - model = "\A3\Weapons_f\ammo\shell"; - timeToLive = 12; - typicalSpeed = 800; - // Fix sounds - effectFly = "AmmoClassic"; - soundDefault1[] = {"A3\sounds_f\weapons\hits\concrete_1.wav",0.158114,1,30}; - soundDefault2[] = {"A3\sounds_f\weapons\hits\concrete_2.wav",0.158114,1,30}; - soundDefault3[] = {"A3\sounds_f\weapons\hits\concrete_3.wav",0.158114,1,30}; - soundDefault4[] = {"A3\sounds_f\weapons\hits\concrete_4.wav",0.158114,1,30}; - soundDefault5[] = {"A3\sounds_f\weapons\hits\concrete_5.wav",0.158114,1,30}; - soundDefault6[] = {"A3\sounds_f\weapons\hits\concrete_6.wav",0.158114,1,30}; - soundDefault7[] = {"A3\sounds_f\weapons\hits\concrete_7.wav",0.158114,1,30}; - soundDefault8[] = {"A3\sounds_f\weapons\hits\concrete_8.wav",0.158114,1,30}; - soundGroundSoft1[] = {"A3\sounds_f\weapons\hits\soft_ground_1.wav",0.02811705,1,30}; - soundGroundSoft2[] = {"A3\sounds_f\weapons\hits\soft_ground_2.wav",0.02811705,1,30}; - soundGroundSoft3[] = {"A3\sounds_f\weapons\hits\soft_ground_3.wav",0.02811705,1,30}; - soundGroundSoft4[] = {"A3\sounds_f\weapons\hits\soft_ground_4.wav",0.02811705,1,30}; - soundGroundSoft5[] = {"A3\sounds_f\weapons\hits\soft_ground_5.wav",0.02811705,1,30}; - soundGroundSoft6[] = {"A3\sounds_f\weapons\hits\soft_ground_6.wav",0.02811705,1,30}; - soundGroundSoft7[] = {"A3\sounds_f\weapons\hits\soft_ground_7.wav",0.02811705,1,30}; - soundGroundSoft8[] = {"A3\sounds_f\weapons\hits\soft_ground_8.wav",0.02811705,1,30}; - soundGroundHard1[] = {"A3\sounds_f\weapons\hits\hard_ground_1.wav",0.62946,1,40}; - soundGroundHard2[] = {"A3\sounds_f\weapons\hits\hard_ground_2.wav",0.62946,1,40}; - soundGroundHard3[] = {"A3\sounds_f\weapons\hits\hard_ground_3.wav",0.62946,1,40}; - soundGroundHard4[] = {"A3\sounds_f\weapons\hits\hard_ground_4.wav",0.62946,1,40}; - soundGroundHard5[] = {"A3\sounds_f\weapons\hits\hard_ground_5.wav",0.62946,1,40}; - soundGroundHard6[] = {"A3\sounds_f\weapons\hits\hard_ground_6.wav",0.62946,1,40}; - soundGroundHard7[] = {"A3\sounds_f\weapons\hits\hard_ground_7.wav",0.62946,1,40}; - soundGroundHard8[] = {"A3\sounds_f\weapons\hits\hard_ground_8.wav",0.62946,1,40}; - soundMetal1[] = {"A3\sounds_f\weapons\hits\metal_1.wav",0.158114,1,45}; - soundMetal2[] = {"A3\sounds_f\weapons\hits\metal_2.wav",0.158114,1,45}; - soundMetal3[] = {"A3\sounds_f\weapons\hits\metal_3.wav",0.158114,1,45}; - soundMetal4[] = {"A3\sounds_f\weapons\hits\metal_4.wav",0.158114,1,45}; - soundMetal5[] = {"A3\sounds_f\weapons\hits\metal_5.wav",0.158114,1,45}; - soundMetal6[] = {"A3\sounds_f\weapons\hits\metal_6.wav",0.158114,1,45}; - soundMetal7[] = {"A3\sounds_f\weapons\hits\metal_7.wav",0.158114,1,45}; - soundMetal8[] = {"A3\sounds_f\weapons\hits\metal_8.wav",0.158114,1,45}; - soundGlass1[] = {"A3\sounds_f\weapons\hits\glass_1.wav",0.177828,1,25}; - soundGlass2[] = {"A3\sounds_f\weapons\hits\glass_2.wav",0.177828,1,25}; - soundGlass3[] = {"A3\sounds_f\weapons\hits\glass_3.wav",0.177828,1,25}; - soundGlass4[] = {"A3\sounds_f\weapons\hits\glass_4.wav",0.177828,1,25}; - soundGlass5[] = {"A3\sounds_f\weapons\hits\glass_5.wav",0.177828,1,25}; - soundGlass6[] = {"A3\sounds_f\weapons\hits\glass_6.wav",0.177828,1,25}; - soundGlass7[] = {"A3\sounds_f\weapons\hits\glass_7.wav",0.177828,1,25}; - soundGlass8[] = {"A3\sounds_f\weapons\hits\glass_8.wav",0.177828,1,25}; - soundGlassArmored1[] = {"A3\sounds_f\weapons\hits\glass_arm_1.wav",0.177828,1,30}; - soundGlassArmored2[] = {"A3\sounds_f\weapons\hits\glass_arm_2.wav",0.177828,1,30}; - soundGlassArmored3[] = {"A3\sounds_f\weapons\hits\glass_arm_3.wav",0.177828,1,30}; - soundGlassArmored4[] = {"A3\sounds_f\weapons\hits\glass_arm_4.wav",0.177828,1,30}; - soundGlassArmored5[] = {"A3\sounds_f\weapons\hits\glass_arm_5.wav",0.177828,1,30}; - soundGlassArmored6[] = {"A3\sounds_f\weapons\hits\glass_arm_6.wav",0.177828,1,30}; - soundGlassArmored7[] = {"A3\sounds_f\weapons\hits\glass_arm_7.wav",0.177828,1,30}; - soundGlassArmored8[] = {"A3\sounds_f\weapons\hits\glass_arm_8.wav",0.177828,1,30}; - soundVehiclePlate1[] = {"A3\sounds_f\weapons\hits\metal_plate_1.wav",0.281170,1,40}; - soundVehiclePlate2[] = {"A3\sounds_f\weapons\hits\metal_plate_2.wav",0.281170,1,40}; - soundVehiclePlate3[] = {"A3\sounds_f\weapons\hits\metal_plate_3.wav",0.281170,1,40}; - soundVehiclePlate4[] = {"A3\sounds_f\weapons\hits\metal_plate_4.wav",0.281170,1,40}; - soundVehiclePlate5[] = {"A3\sounds_f\weapons\hits\metal_plate_5.wav",0.281170,1,40}; - soundVehiclePlate6[] = {"A3\sounds_f\weapons\hits\metal_plate_6.wav",0.281170,1,40}; - soundVehiclePlate7[] = {"A3\sounds_f\weapons\hits\metal_plate_7.wav",0.281170,1,40}; - soundVehiclePlate8[] = {"A3\sounds_f\weapons\hits\metal_plate_8.wav",0.281170,1,40}; - soundWood1[] = {"A3\sounds_f\weapons\hits\wood_1.wav",0.158114,1,30}; - soundWood2[] = {"A3\sounds_f\weapons\hits\wood_2.wav",0.158114,1,30}; - soundWood3[] = {"A3\sounds_f\weapons\hits\wood_3.wav",0.158114,1,30}; - soundWood4[] = {"A3\sounds_f\weapons\hits\wood_4.wav",0.158114,1,30}; - soundWood5[] = {"A3\sounds_f\weapons\hits\wood_5.wav",0.158114,1,30}; - soundWood6[] = {"A3\sounds_f\weapons\hits\wood_6.wav",0.158114,1,30}; - soundWood7[] = {"A3\sounds_f\weapons\hits\wood_7.wav",0.158114,1,30}; - soundWood8[] = {"A3\sounds_f\weapons\hits\wood_8.wav",0.158114,1,30}; - soundHitBody1[] = {"A3\sounds_f\weapons\hits\body_1.wav",0.0177828,1,25}; - soundHitBody2[] = {"A3\sounds_f\weapons\hits\body_2.wav",0.0177828,1,25}; - soundHitBody3[] = {"A3\sounds_f\weapons\hits\body_3.wav",0.0177828,1,25}; - soundHitBody4[] = {"A3\sounds_f\weapons\hits\body_4.wav",0.0177828,1,25}; - soundHitBody5[] = {"A3\sounds_f\weapons\hits\body_5.wav",0.0177828,1,25}; - soundHitBody6[] = {"A3\sounds_f\weapons\hits\body_6.wav",0.0177828,1,25}; - soundHitBody7[] = {"A3\sounds_f\weapons\hits\body_7.wav",0.0177828,1,25}; - soundHitBody8[] = {"A3\sounds_f\weapons\hits\body_8.wav",0.0177828,1,25}; - soundHitBuilding1[] = {"A3\sounds_f\weapons\hits\building_1.wav",0.251189,1,30}; - soundHitBuilding2[] = {"A3\sounds_f\weapons\hits\building_2.wav",0.251189,1,30}; - soundHitBuilding3[] = {"A3\sounds_f\weapons\hits\building_3.wav",0.251189,1,30}; - soundHitBuilding4[] = {"A3\sounds_f\weapons\hits\building_4.wav",0.251189,1,30}; - soundHitBuilding5[] = {"A3\sounds_f\weapons\hits\building_5.wav",0.251189,1,30}; - soundHitBuilding6[] = {"A3\sounds_f\weapons\hits\building_6.wav",0.251189,1,30}; - soundHitBuilding7[] = {"A3\sounds_f\weapons\hits\building_7.wav",0.251189,1,30}; - soundHitBuilding8[] = {"A3\sounds_f\weapons\hits\building_8.wav",0.251189,1,30}; - soundHitFoliage1[] = {"A3\sounds_f\weapons\hits\foliage_1.wav",0.177828,1,25}; - soundHitFoliage2[] = {"A3\sounds_f\weapons\hits\foliage_2.wav",0.177828,1,25}; - soundHitFoliage3[] = {"A3\sounds_f\weapons\hits\foliage_3.wav",0.177828,1,25}; - soundHitFoliage4[] = {"A3\sounds_f\weapons\hits\foliage_4.wav",0.177828,1,25}; - soundHitFoliage5[] = {"A3\sounds_f\weapons\hits\foliage_5.wav",0.177828,1,25}; - soundHitFoliage6[] = {"A3\sounds_f\weapons\hits\foliage_6.wav",0.177828,1,25}; - soundHitFoliage7[] = {"A3\sounds_f\weapons\hits\foliage_7.wav",0.177828,1,25}; - soundHitFoliage8[] = {"A3\sounds_f\weapons\hits\foliage_8.wav",0.177828,1,25}; - soundPlastic1[] = {"A3\sounds_f\weapons\hits\plastic_1.wav",0.177828,1,25}; - soundPlastic2[] = {"A3\sounds_f\weapons\hits\plastic_2.wav",0.177828,1,25}; - soundPlastic3[] = {"A3\sounds_f\weapons\hits\plastic_3.wav",0.177828,1,25}; - soundPlastic4[] = {"A3\sounds_f\weapons\hits\plastic_4.wav",0.177828,1,25}; - soundPlastic5[] = {"A3\sounds_f\weapons\hits\plastic_5.wav",0.177828,1,25}; - soundPlastic6[] = {"A3\sounds_f\weapons\hits\plastic_6.wav",0.177828,1,25}; - soundPlastic7[] = {"A3\sounds_f\weapons\hits\plastic_7.wav",0.177828,1,25}; - soundPlastic8[] = {"A3\sounds_f\weapons\hits\plastic_8.wav",0.177828,1,25}; - soundConcrete1[] = {"A3\sounds_f\weapons\hits\concrete_1.wav",0.177828,1,35}; - soundConcrete2[] = {"A3\sounds_f\weapons\hits\concrete_2.wav",0.177828,1,35}; - soundConcrete3[] = {"A3\sounds_f\weapons\hits\concrete_3.wav",0.177828,1,35}; - soundConcrete4[] = {"A3\sounds_f\weapons\hits\concrete_4.wav",0.177828,1,35}; - soundConcrete5[] = {"A3\sounds_f\weapons\hits\concrete_5.wav",0.177828,1,35}; - soundConcrete6[] = {"A3\sounds_f\weapons\hits\concrete_6.wav",0.177828,1,35}; - soundConcrete7[] = {"A3\sounds_f\weapons\hits\concrete_7.wav",0.177828,1,35}; - soundConcrete8[] = {"A3\sounds_f\weapons\hits\concrete_8.wav",0.177828,1,35}; - soundRubber1[] = {"A3\sounds_f\weapons\hits\tyre_1.wav",0.158114,1,25}; - soundRubber2[] = {"A3\sounds_f\weapons\hits\tyre_2.wav",0.158114,1,25}; - soundRubber3[] = {"A3\sounds_f\weapons\hits\tyre_3.wav",0.158114,1,25}; - soundRubber4[] = {"A3\sounds_f\weapons\hits\tyre_4.wav",0.158114,1,25}; - soundRubber5[] = {"A3\sounds_f\weapons\hits\tyre_5.wav",0.158114,1,25}; - soundRubber6[] = {"A3\sounds_f\weapons\hits\tyre_6.wav",0.158114,1,25}; - soundRubber7[] = {"A3\sounds_f\weapons\hits\tyre_7.wav",0.158114,1,25}; - soundRubber8[] = {"A3\sounds_f\weapons\hits\tyre_8.wav",0.158114,1,25}; - soundWater1[] = {"A3\sounds_f\weapons\hits\water_01.wav",0.158114,1,25}; - soundWater2[] = {"A3\sounds_f\weapons\hits\water_02.wav",0.158114,1,25}; - soundWater3[] = {"A3\sounds_f\weapons\hits\water_03.wav",0.158114,1,25}; - soundWater4[] = {"A3\sounds_f\weapons\hits\water_04.wav",0.158114,1,25}; - soundWater5[] = {"A3\sounds_f\weapons\hits\water_05.wav",0.158114,1,25}; - soundWater6[] = {"A3\sounds_f\weapons\hits\water_06.wav",0.158114,1,25}; - soundWater7[] = {"A3\sounds_f\weapons\hits\water_07.wav",0.158114,1,25}; - soundWater8[] = {"A3\sounds_f\weapons\hits\water_08.wav",0.158114,1,25}; - hitGroundSoft[] = {"soundGroundSoft1",0.2,"soundGroundSoft2",0.2,"soundGroundSoft3",0.1,"soundGroundSoft4",0.1,"soundGroundSoft5",0.1,"soundGroundSoft6",0.1,"soundGroundSoft7",0.1,"soundGroundSoft8",0.1}; - hitGroundHard[] = {"soundGroundHard1",0.2,"soundGroundHard2",0.2,"soundGroundHard3",0.1,"soundGroundHard4",0.1,"soundGroundHard5",0.1,"soundGroundHard6",0.1,"soundGroundHard7",0.1,"soundGroundHard8",0.1}; - hitMan[] = {"soundHitBody1",0.125,"soundHitBody2",0.125,"soundHitBody3",0.125,"soundHitBody4",0.125,"soundHitBody5",0.125,"soundHitBody6",0.125,"soundHitBody7",0.125,"soundHitBody8",0.125}; - hitArmor[] = {"soundVehiclePlate1",0.125,"soundVehiclePlate2",0.125,"soundVehiclePlate3",0.125,"soundVehiclePlate4",0.125,"soundVehiclePlate5",0.125,"soundVehiclePlate6",0.125,"soundVehiclePlate7",0.125,"soundVehiclePlate8",0.125}; - hitBuilding[] = {"soundHitBuilding1",0.2,"soundHitBuilding2",0.2,"soundHitBuilding3",0.1,"soundHitBuilding4",0.1,"soundHitBuilding5",0.1,"soundHitBuilding6",0.1,"soundHitBuilding7",0.1,"soundHitBuilding8",0.1}; - hitFoliage[] = {"soundHitFoliage1",0.125,"soundHitFoliage2",0.125,"soundHitFoliage3",0.125,"soundHitFoliage4",0.125,"soundHitFoliage5",0.125,"soundHitFoliage6",0.125,"soundHitFoliage7",0.125,"soundHitFoliage8",0.125}; - hitWood[] = {"soundWood1",0.125,"soundWood2",0.125,"soundWood3",0.125,"soundWood4",0.125,"soundWood5",0.125,"soundWood6",0.125,"soundWood7",0.125,"soundWood8",0.125}; - hitGlass[] = {"soundGlass1",0.125,"soundGlass2",0.125,"soundGlass3",0.125,"soundGlass4",0.125,"soundGlass5",0.125,"soundGlass6",0.125,"soundGlass7",0.125,"soundGlass8",0.125}; - hitGlassArmored[] = {"soundGlassArmored1",0.125,"soundGlassArmored2",0.125,"soundGlassArmored3",0.125,"soundGlassArmored4",0.125,"soundGlassArmored5",0.125,"soundGlassArmored6",0.125,"soundGlassArmored7",0.125,"soundGlassArmored8",0.125}; - hitConcrete[] = {"soundConcrete1",0.125,"soundConcrete2",0.125,"soundConcrete3",0.125,"soundConcrete4",0.125,"soundConcrete5",0.125,"soundConcrete6",0.125,"soundConcrete7",0.125,"soundConcrete8",0.125}; - hitRubber[] = {"soundRubber1",0.125,"soundRubber2",0.125,"soundRubber3",0.125,"soundRubber4",0.125,"soundRubber5",0.125,"soundRubber6",0.125,"soundRubber7",0.125,"soundRubber8",0.125}; - hitPlastic[] = {"soundPlastic1",0.125,"soundPlastic2",0.125,"soundPlastic3",0.125,"soundPlastic4",0.125,"soundPlastic5",0.125,"soundPlastic6",0.125,"soundPlastic7",0.125,"soundPlastic8",0.125}; - hitDefault[] = {"soundDefault1",0.2,"soundDefault2",0.2,"soundDefault3",0.1,"soundDefault4",0.1,"soundDefault5",0.1,"soundDefault6",0.1,"soundDefault7",0.1,"soundDefault8",0.1}; - hitMetal[] = {"soundMetal1",0.125,"soundMetal2",0.125,"soundMetal3",0.125,"soundMetal4",0.125,"soundMetal5",0.125,"soundMetal6",0.125,"soundMetal7",0.125,"soundMetal8",0.125}; - hitMetalplate[] = {"soundVehiclePlate1",0.125,"soundVehiclePlate2",0.125,"soundVehiclePlate3",0.125,"soundVehiclePlate4",0.125,"soundVehiclePlate5",0.125,"soundVehiclePlate6",0.125,"soundVehiclePlate7",0.125,"soundVehiclePlate8",0.125}; - hitWater[] = {"soundWater1",0.125,"soundWater2",0.125,"soundWater3",0.125,"soundWater4",0.125,"soundWater5",0.125,"soundWater6",0.125,"soundWater7",0.125,"soundWater8",0.125}; - bulletFly1[] = {"A3\sounds_f\weapons\hits\bullet_by_1.wav",1,1,35}; - bulletFly2[] = {"A3\sounds_f\weapons\hits\bullet_by_2.wav",1,1,35}; - bulletFly3[] = {"A3\sounds_f\weapons\hits\bullet_by_3.wav",1,1,35}; - bulletFly4[] = {"A3\sounds_f\weapons\hits\bullet_by_4.wav",1,1,35}; - bulletFly5[] = {"A3\sounds_f\weapons\hits\bullet_by_5.wav",1,1,35}; - bulletFly6[] = {"A3\sounds_f\weapons\hits\bullet_by_6.wav",1,1,35}; - bulletFly7[] = {"A3\sounds_f\weapons\hits\bullet_by_7.wav",1,1,35}; - bulletFly8[] = {"A3\sounds_f\weapons\hits\bullet_by_8.wav",1,1,35}; - bulletFly[] = {"bulletFly1",0.166,"bulletFly2",0.166,"bulletFly3",0.166,"bulletFly4",0.166,"bulletFly5",0.166,"bulletFly6",0.167,"bulletFly7",0.166,"bulletFly8",0.167}; - supersonicCrackNear[] = {"A3\sounds_f\weapons\hits\sscrack1.wav",1,1,35}; - supersonicCrackFar[] = {"A3\sounds_f\weapons\hits\sscrack2.wav",1,1,135}; - }; - */ - - class B_65x39_Caseless; - class ACE_frag_base: B_65x39_Caseless { - timeToLive = 12; - typicalSpeed = 1500; - deflecting = 65; - }; - - class ACE_frag_tiny: ACE_frag_base { - hit = 6; - airFriction = BASE_DRAG; - caliber = 0.75; - }; - - class ACE_frag_tiny_HD: ACE_frag_base { - hit = 6; - airFriction = BASE_DRAG_HD; - caliber = 0.75; - }; - - class ACE_frag_small: ACE_frag_base { - hit = 12; - airFriction = BASE_DRAG*0.9; - }; - - class ACE_frag_small_HD: ACE_frag_base { - hit = 12; - airFriction = BASE_DRAG_HD*0.9; - }; - - class ACE_frag_medium: ACE_frag_base { - hit = 14; - airFriction = BASE_DRAG*0.75; - caliber = 1.2; - }; - - class ACE_frag_medium_HD: ACE_frag_base { - hit = 14; - airFriction = BASE_DRAG_HD*0.75; - caliber = 1.2; - }; - - class ACE_frag_large: ACE_frag_base { - hit = 28; - indirectHit = 2; - indirectHitRange = 0.25; - airFriction = BASE_DRAG*0.65; - caliber = 2; - explosive = 0; - - }; - - class ACE_frag_large_HD: ACE_frag_large { - hit = 28; - indirectHit = 2; - indirectHitRange = 0.25; - airFriction = BASE_DRAG_HD*0.65; - caliber = 2; - - - }; - - class ACE_frag_huge: ACE_frag_large { - hit = 40; - indirectHit = 4; - indirectHitRange = 0.5; - airFriction = BASE_DRAG*0.5; - caliber = 2.8; - }; - - class ACE_frag_huge_HD: ACE_frag_large { - hit = 40; - indirectHit = 4; - indirectHitRange = 0.5; - airFriction = BASE_DRAG_HD*0.5; - caliber = 2.8; - }; - - class ACE_frag_spall_small: ACE_frag_small { - timeToLive = 0.1; - }; - - class ACE_frag_spall_medium: ACE_frag_medium { - timeToLive = 0.15; - }; - - class ACE_frag_spall_large: ACE_frag_large { - timeToLive = 0.25; - }; - - class ACE_frag_spall_huge: ACE_frag_huge { - timeToLive = 0.3; - }; -}; +#define BASE_DRAG -0.01 +#define HD_MULT 5 +#define BASE_DRAG_HD (BASE_DRAG*HD_MULT) + +class CfgAmmo { + //class ace_arty_105mm_m1_m782_time; + //class ace_arty_105mm_m1_m782_prox: ace_arty_105mm_m1_m782_time {}; + //class ace_arty_105mm_m1_m782_delay: ace_arty_105mm_m1_m782_prox { + // ACE_FRAG_SKIP = 1; + //}; + class Bo_GBU12_LGB; + class Nou_GBU12 : Bo_GBU12_LGB { + ACE_FRAG_CLASSES[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"}; + ACE_FRAG_METAL = 140000; + ACE_FRAG_CHARGE = 87000; + ACE_FRAG_GURNEY_C = 2320; + ACE_FRAG_GURNEY_K = 1/2; + sideAirFriction = 0.04; + airFriction = 0.04; + laserLock = 0; + }; + + class GrenadeBase; + class Grenade; + class GrenadeHand: Grenade { + ACE_FRAG_SKIP = 0; + ACE_FRAG_FORCE = 1; + // This is a good high-drag frag type for grenades. + ACE_FRAG_CLASSES[] = {"ACE_frag_tiny_HD"}; + /* + These values are based on the M67 Grenade, should be tweaked for + individual grenades. + */ + ACE_FRAG_METAL = 210; // metal in grams + ACE_FRAG_CHARGE = 185; // explosive in grams + ACE_FRAG_GURNEY_C = 2843; // Gurney velocity constant for explosive type. See: http://en.wikipedia.org/wiki/Gurney_equations + ACE_FRAG_GURNEY_K = 3/5; // Gurney shape factor, in this case a sphere. See: http://en.wikipedia.org/wiki/Gurney_equations + }; + class GrenadeHand_stone: GrenadeHand { + ACE_FRAG_SKIP = 1; + }; + class SmokeShell: GrenadeHand { + ACE_FRAG_SKIP = 1; + }; + + class RocketBase; + //class R_Hydra_HE: RocketBase { + // ACE_FRAG_SKIP = 1; + //}; + + //class R_57mm_HE: RocketBase { + // ACE_FRAG_SKIP = 1; + //}; + + class R_80mm_HE: RocketBase { + ACE_FRAG_SKIP = 1; + }; + + //class R_S8T_AT: RocketBase { + // ACE_FRAG_SKIP = 1; + //}; + + class BombCore; + class Bo_Mk82: BombCore { + ACE_FRAG_CLASSES[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"}; + ACE_FRAG_METAL = 140000; + ACE_FRAG_CHARGE = 87000; + ACE_FRAG_GURNEY_C = 2320; + ACE_FRAG_GURNEY_K = 1/2; + }; + + + class G_40mm_HE: GrenadeBase { + ACE_FRAG_SKIP = 0; + ACE_FRAG_FORCE = 1; + }; + + class ACE_G_40mm_HEDP: G_40mm_HE { + }; + class ACE_G_40mm_HE: ACE_G_40mm_HEDP { + }; + class ACE_G_40mm_Practice: ACE_G_40mm_HE { + ACE_FRAG_SKIP = 1; + }; + class ACE_G40mm_HE_VOG25P: G_40mm_HE { + ACE_FRAG_SKIP = 0; + ACE_FRAG_FORCE = 1; + }; + + //class R_SMAW_HEDP; + //class R_MEEWS_HEDP : R_SMAW_HEDP { + // ACE_FRAG_FORCE = 1; + // ACE_FRAG_MULTIPLIER = 1.2; + //}; + + //class MissileBase; + //class M_Hellfire_AT: MissileBase { + // ACE_FRAG_FORCE = 1; + // ACE_FRAG_MULTIPLIER = 1.75; + //}; + + /* + class B_762x51_Ball; + class ACE_frag_base: B_762x51_Ball { ////TODO: B_762x45_Ball no longer exists, is this a valid replacement? + model = "\A3\Weapons_f\ammo\shell"; + timeToLive = 12; + typicalSpeed = 800; + // Fix sounds + effectFly = "AmmoClassic"; + soundDefault1[] = {"A3\sounds_f\weapons\hits\concrete_1.wav",0.158114,1,30}; + soundDefault2[] = {"A3\sounds_f\weapons\hits\concrete_2.wav",0.158114,1,30}; + soundDefault3[] = {"A3\sounds_f\weapons\hits\concrete_3.wav",0.158114,1,30}; + soundDefault4[] = {"A3\sounds_f\weapons\hits\concrete_4.wav",0.158114,1,30}; + soundDefault5[] = {"A3\sounds_f\weapons\hits\concrete_5.wav",0.158114,1,30}; + soundDefault6[] = {"A3\sounds_f\weapons\hits\concrete_6.wav",0.158114,1,30}; + soundDefault7[] = {"A3\sounds_f\weapons\hits\concrete_7.wav",0.158114,1,30}; + soundDefault8[] = {"A3\sounds_f\weapons\hits\concrete_8.wav",0.158114,1,30}; + soundGroundSoft1[] = {"A3\sounds_f\weapons\hits\soft_ground_1.wav",0.02811705,1,30}; + soundGroundSoft2[] = {"A3\sounds_f\weapons\hits\soft_ground_2.wav",0.02811705,1,30}; + soundGroundSoft3[] = {"A3\sounds_f\weapons\hits\soft_ground_3.wav",0.02811705,1,30}; + soundGroundSoft4[] = {"A3\sounds_f\weapons\hits\soft_ground_4.wav",0.02811705,1,30}; + soundGroundSoft5[] = {"A3\sounds_f\weapons\hits\soft_ground_5.wav",0.02811705,1,30}; + soundGroundSoft6[] = {"A3\sounds_f\weapons\hits\soft_ground_6.wav",0.02811705,1,30}; + soundGroundSoft7[] = {"A3\sounds_f\weapons\hits\soft_ground_7.wav",0.02811705,1,30}; + soundGroundSoft8[] = {"A3\sounds_f\weapons\hits\soft_ground_8.wav",0.02811705,1,30}; + soundGroundHard1[] = {"A3\sounds_f\weapons\hits\hard_ground_1.wav",0.62946,1,40}; + soundGroundHard2[] = {"A3\sounds_f\weapons\hits\hard_ground_2.wav",0.62946,1,40}; + soundGroundHard3[] = {"A3\sounds_f\weapons\hits\hard_ground_3.wav",0.62946,1,40}; + soundGroundHard4[] = {"A3\sounds_f\weapons\hits\hard_ground_4.wav",0.62946,1,40}; + soundGroundHard5[] = {"A3\sounds_f\weapons\hits\hard_ground_5.wav",0.62946,1,40}; + soundGroundHard6[] = {"A3\sounds_f\weapons\hits\hard_ground_6.wav",0.62946,1,40}; + soundGroundHard7[] = {"A3\sounds_f\weapons\hits\hard_ground_7.wav",0.62946,1,40}; + soundGroundHard8[] = {"A3\sounds_f\weapons\hits\hard_ground_8.wav",0.62946,1,40}; + soundMetal1[] = {"A3\sounds_f\weapons\hits\metal_1.wav",0.158114,1,45}; + soundMetal2[] = {"A3\sounds_f\weapons\hits\metal_2.wav",0.158114,1,45}; + soundMetal3[] = {"A3\sounds_f\weapons\hits\metal_3.wav",0.158114,1,45}; + soundMetal4[] = {"A3\sounds_f\weapons\hits\metal_4.wav",0.158114,1,45}; + soundMetal5[] = {"A3\sounds_f\weapons\hits\metal_5.wav",0.158114,1,45}; + soundMetal6[] = {"A3\sounds_f\weapons\hits\metal_6.wav",0.158114,1,45}; + soundMetal7[] = {"A3\sounds_f\weapons\hits\metal_7.wav",0.158114,1,45}; + soundMetal8[] = {"A3\sounds_f\weapons\hits\metal_8.wav",0.158114,1,45}; + soundGlass1[] = {"A3\sounds_f\weapons\hits\glass_1.wav",0.177828,1,25}; + soundGlass2[] = {"A3\sounds_f\weapons\hits\glass_2.wav",0.177828,1,25}; + soundGlass3[] = {"A3\sounds_f\weapons\hits\glass_3.wav",0.177828,1,25}; + soundGlass4[] = {"A3\sounds_f\weapons\hits\glass_4.wav",0.177828,1,25}; + soundGlass5[] = {"A3\sounds_f\weapons\hits\glass_5.wav",0.177828,1,25}; + soundGlass6[] = {"A3\sounds_f\weapons\hits\glass_6.wav",0.177828,1,25}; + soundGlass7[] = {"A3\sounds_f\weapons\hits\glass_7.wav",0.177828,1,25}; + soundGlass8[] = {"A3\sounds_f\weapons\hits\glass_8.wav",0.177828,1,25}; + soundGlassArmored1[] = {"A3\sounds_f\weapons\hits\glass_arm_1.wav",0.177828,1,30}; + soundGlassArmored2[] = {"A3\sounds_f\weapons\hits\glass_arm_2.wav",0.177828,1,30}; + soundGlassArmored3[] = {"A3\sounds_f\weapons\hits\glass_arm_3.wav",0.177828,1,30}; + soundGlassArmored4[] = {"A3\sounds_f\weapons\hits\glass_arm_4.wav",0.177828,1,30}; + soundGlassArmored5[] = {"A3\sounds_f\weapons\hits\glass_arm_5.wav",0.177828,1,30}; + soundGlassArmored6[] = {"A3\sounds_f\weapons\hits\glass_arm_6.wav",0.177828,1,30}; + soundGlassArmored7[] = {"A3\sounds_f\weapons\hits\glass_arm_7.wav",0.177828,1,30}; + soundGlassArmored8[] = {"A3\sounds_f\weapons\hits\glass_arm_8.wav",0.177828,1,30}; + soundVehiclePlate1[] = {"A3\sounds_f\weapons\hits\metal_plate_1.wav",0.281170,1,40}; + soundVehiclePlate2[] = {"A3\sounds_f\weapons\hits\metal_plate_2.wav",0.281170,1,40}; + soundVehiclePlate3[] = {"A3\sounds_f\weapons\hits\metal_plate_3.wav",0.281170,1,40}; + soundVehiclePlate4[] = {"A3\sounds_f\weapons\hits\metal_plate_4.wav",0.281170,1,40}; + soundVehiclePlate5[] = {"A3\sounds_f\weapons\hits\metal_plate_5.wav",0.281170,1,40}; + soundVehiclePlate6[] = {"A3\sounds_f\weapons\hits\metal_plate_6.wav",0.281170,1,40}; + soundVehiclePlate7[] = {"A3\sounds_f\weapons\hits\metal_plate_7.wav",0.281170,1,40}; + soundVehiclePlate8[] = {"A3\sounds_f\weapons\hits\metal_plate_8.wav",0.281170,1,40}; + soundWood1[] = {"A3\sounds_f\weapons\hits\wood_1.wav",0.158114,1,30}; + soundWood2[] = {"A3\sounds_f\weapons\hits\wood_2.wav",0.158114,1,30}; + soundWood3[] = {"A3\sounds_f\weapons\hits\wood_3.wav",0.158114,1,30}; + soundWood4[] = {"A3\sounds_f\weapons\hits\wood_4.wav",0.158114,1,30}; + soundWood5[] = {"A3\sounds_f\weapons\hits\wood_5.wav",0.158114,1,30}; + soundWood6[] = {"A3\sounds_f\weapons\hits\wood_6.wav",0.158114,1,30}; + soundWood7[] = {"A3\sounds_f\weapons\hits\wood_7.wav",0.158114,1,30}; + soundWood8[] = {"A3\sounds_f\weapons\hits\wood_8.wav",0.158114,1,30}; + soundHitBody1[] = {"A3\sounds_f\weapons\hits\body_1.wav",0.0177828,1,25}; + soundHitBody2[] = {"A3\sounds_f\weapons\hits\body_2.wav",0.0177828,1,25}; + soundHitBody3[] = {"A3\sounds_f\weapons\hits\body_3.wav",0.0177828,1,25}; + soundHitBody4[] = {"A3\sounds_f\weapons\hits\body_4.wav",0.0177828,1,25}; + soundHitBody5[] = {"A3\sounds_f\weapons\hits\body_5.wav",0.0177828,1,25}; + soundHitBody6[] = {"A3\sounds_f\weapons\hits\body_6.wav",0.0177828,1,25}; + soundHitBody7[] = {"A3\sounds_f\weapons\hits\body_7.wav",0.0177828,1,25}; + soundHitBody8[] = {"A3\sounds_f\weapons\hits\body_8.wav",0.0177828,1,25}; + soundHitBuilding1[] = {"A3\sounds_f\weapons\hits\building_1.wav",0.251189,1,30}; + soundHitBuilding2[] = {"A3\sounds_f\weapons\hits\building_2.wav",0.251189,1,30}; + soundHitBuilding3[] = {"A3\sounds_f\weapons\hits\building_3.wav",0.251189,1,30}; + soundHitBuilding4[] = {"A3\sounds_f\weapons\hits\building_4.wav",0.251189,1,30}; + soundHitBuilding5[] = {"A3\sounds_f\weapons\hits\building_5.wav",0.251189,1,30}; + soundHitBuilding6[] = {"A3\sounds_f\weapons\hits\building_6.wav",0.251189,1,30}; + soundHitBuilding7[] = {"A3\sounds_f\weapons\hits\building_7.wav",0.251189,1,30}; + soundHitBuilding8[] = {"A3\sounds_f\weapons\hits\building_8.wav",0.251189,1,30}; + soundHitFoliage1[] = {"A3\sounds_f\weapons\hits\foliage_1.wav",0.177828,1,25}; + soundHitFoliage2[] = {"A3\sounds_f\weapons\hits\foliage_2.wav",0.177828,1,25}; + soundHitFoliage3[] = {"A3\sounds_f\weapons\hits\foliage_3.wav",0.177828,1,25}; + soundHitFoliage4[] = {"A3\sounds_f\weapons\hits\foliage_4.wav",0.177828,1,25}; + soundHitFoliage5[] = {"A3\sounds_f\weapons\hits\foliage_5.wav",0.177828,1,25}; + soundHitFoliage6[] = {"A3\sounds_f\weapons\hits\foliage_6.wav",0.177828,1,25}; + soundHitFoliage7[] = {"A3\sounds_f\weapons\hits\foliage_7.wav",0.177828,1,25}; + soundHitFoliage8[] = {"A3\sounds_f\weapons\hits\foliage_8.wav",0.177828,1,25}; + soundPlastic1[] = {"A3\sounds_f\weapons\hits\plastic_1.wav",0.177828,1,25}; + soundPlastic2[] = {"A3\sounds_f\weapons\hits\plastic_2.wav",0.177828,1,25}; + soundPlastic3[] = {"A3\sounds_f\weapons\hits\plastic_3.wav",0.177828,1,25}; + soundPlastic4[] = {"A3\sounds_f\weapons\hits\plastic_4.wav",0.177828,1,25}; + soundPlastic5[] = {"A3\sounds_f\weapons\hits\plastic_5.wav",0.177828,1,25}; + soundPlastic6[] = {"A3\sounds_f\weapons\hits\plastic_6.wav",0.177828,1,25}; + soundPlastic7[] = {"A3\sounds_f\weapons\hits\plastic_7.wav",0.177828,1,25}; + soundPlastic8[] = {"A3\sounds_f\weapons\hits\plastic_8.wav",0.177828,1,25}; + soundConcrete1[] = {"A3\sounds_f\weapons\hits\concrete_1.wav",0.177828,1,35}; + soundConcrete2[] = {"A3\sounds_f\weapons\hits\concrete_2.wav",0.177828,1,35}; + soundConcrete3[] = {"A3\sounds_f\weapons\hits\concrete_3.wav",0.177828,1,35}; + soundConcrete4[] = {"A3\sounds_f\weapons\hits\concrete_4.wav",0.177828,1,35}; + soundConcrete5[] = {"A3\sounds_f\weapons\hits\concrete_5.wav",0.177828,1,35}; + soundConcrete6[] = {"A3\sounds_f\weapons\hits\concrete_6.wav",0.177828,1,35}; + soundConcrete7[] = {"A3\sounds_f\weapons\hits\concrete_7.wav",0.177828,1,35}; + soundConcrete8[] = {"A3\sounds_f\weapons\hits\concrete_8.wav",0.177828,1,35}; + soundRubber1[] = {"A3\sounds_f\weapons\hits\tyre_1.wav",0.158114,1,25}; + soundRubber2[] = {"A3\sounds_f\weapons\hits\tyre_2.wav",0.158114,1,25}; + soundRubber3[] = {"A3\sounds_f\weapons\hits\tyre_3.wav",0.158114,1,25}; + soundRubber4[] = {"A3\sounds_f\weapons\hits\tyre_4.wav",0.158114,1,25}; + soundRubber5[] = {"A3\sounds_f\weapons\hits\tyre_5.wav",0.158114,1,25}; + soundRubber6[] = {"A3\sounds_f\weapons\hits\tyre_6.wav",0.158114,1,25}; + soundRubber7[] = {"A3\sounds_f\weapons\hits\tyre_7.wav",0.158114,1,25}; + soundRubber8[] = {"A3\sounds_f\weapons\hits\tyre_8.wav",0.158114,1,25}; + soundWater1[] = {"A3\sounds_f\weapons\hits\water_01.wav",0.158114,1,25}; + soundWater2[] = {"A3\sounds_f\weapons\hits\water_02.wav",0.158114,1,25}; + soundWater3[] = {"A3\sounds_f\weapons\hits\water_03.wav",0.158114,1,25}; + soundWater4[] = {"A3\sounds_f\weapons\hits\water_04.wav",0.158114,1,25}; + soundWater5[] = {"A3\sounds_f\weapons\hits\water_05.wav",0.158114,1,25}; + soundWater6[] = {"A3\sounds_f\weapons\hits\water_06.wav",0.158114,1,25}; + soundWater7[] = {"A3\sounds_f\weapons\hits\water_07.wav",0.158114,1,25}; + soundWater8[] = {"A3\sounds_f\weapons\hits\water_08.wav",0.158114,1,25}; + hitGroundSoft[] = {"soundGroundSoft1",0.2,"soundGroundSoft2",0.2,"soundGroundSoft3",0.1,"soundGroundSoft4",0.1,"soundGroundSoft5",0.1,"soundGroundSoft6",0.1,"soundGroundSoft7",0.1,"soundGroundSoft8",0.1}; + hitGroundHard[] = {"soundGroundHard1",0.2,"soundGroundHard2",0.2,"soundGroundHard3",0.1,"soundGroundHard4",0.1,"soundGroundHard5",0.1,"soundGroundHard6",0.1,"soundGroundHard7",0.1,"soundGroundHard8",0.1}; + hitMan[] = {"soundHitBody1",0.125,"soundHitBody2",0.125,"soundHitBody3",0.125,"soundHitBody4",0.125,"soundHitBody5",0.125,"soundHitBody6",0.125,"soundHitBody7",0.125,"soundHitBody8",0.125}; + hitArmor[] = {"soundVehiclePlate1",0.125,"soundVehiclePlate2",0.125,"soundVehiclePlate3",0.125,"soundVehiclePlate4",0.125,"soundVehiclePlate5",0.125,"soundVehiclePlate6",0.125,"soundVehiclePlate7",0.125,"soundVehiclePlate8",0.125}; + hitBuilding[] = {"soundHitBuilding1",0.2,"soundHitBuilding2",0.2,"soundHitBuilding3",0.1,"soundHitBuilding4",0.1,"soundHitBuilding5",0.1,"soundHitBuilding6",0.1,"soundHitBuilding7",0.1,"soundHitBuilding8",0.1}; + hitFoliage[] = {"soundHitFoliage1",0.125,"soundHitFoliage2",0.125,"soundHitFoliage3",0.125,"soundHitFoliage4",0.125,"soundHitFoliage5",0.125,"soundHitFoliage6",0.125,"soundHitFoliage7",0.125,"soundHitFoliage8",0.125}; + hitWood[] = {"soundWood1",0.125,"soundWood2",0.125,"soundWood3",0.125,"soundWood4",0.125,"soundWood5",0.125,"soundWood6",0.125,"soundWood7",0.125,"soundWood8",0.125}; + hitGlass[] = {"soundGlass1",0.125,"soundGlass2",0.125,"soundGlass3",0.125,"soundGlass4",0.125,"soundGlass5",0.125,"soundGlass6",0.125,"soundGlass7",0.125,"soundGlass8",0.125}; + hitGlassArmored[] = {"soundGlassArmored1",0.125,"soundGlassArmored2",0.125,"soundGlassArmored3",0.125,"soundGlassArmored4",0.125,"soundGlassArmored5",0.125,"soundGlassArmored6",0.125,"soundGlassArmored7",0.125,"soundGlassArmored8",0.125}; + hitConcrete[] = {"soundConcrete1",0.125,"soundConcrete2",0.125,"soundConcrete3",0.125,"soundConcrete4",0.125,"soundConcrete5",0.125,"soundConcrete6",0.125,"soundConcrete7",0.125,"soundConcrete8",0.125}; + hitRubber[] = {"soundRubber1",0.125,"soundRubber2",0.125,"soundRubber3",0.125,"soundRubber4",0.125,"soundRubber5",0.125,"soundRubber6",0.125,"soundRubber7",0.125,"soundRubber8",0.125}; + hitPlastic[] = {"soundPlastic1",0.125,"soundPlastic2",0.125,"soundPlastic3",0.125,"soundPlastic4",0.125,"soundPlastic5",0.125,"soundPlastic6",0.125,"soundPlastic7",0.125,"soundPlastic8",0.125}; + hitDefault[] = {"soundDefault1",0.2,"soundDefault2",0.2,"soundDefault3",0.1,"soundDefault4",0.1,"soundDefault5",0.1,"soundDefault6",0.1,"soundDefault7",0.1,"soundDefault8",0.1}; + hitMetal[] = {"soundMetal1",0.125,"soundMetal2",0.125,"soundMetal3",0.125,"soundMetal4",0.125,"soundMetal5",0.125,"soundMetal6",0.125,"soundMetal7",0.125,"soundMetal8",0.125}; + hitMetalplate[] = {"soundVehiclePlate1",0.125,"soundVehiclePlate2",0.125,"soundVehiclePlate3",0.125,"soundVehiclePlate4",0.125,"soundVehiclePlate5",0.125,"soundVehiclePlate6",0.125,"soundVehiclePlate7",0.125,"soundVehiclePlate8",0.125}; + hitWater[] = {"soundWater1",0.125,"soundWater2",0.125,"soundWater3",0.125,"soundWater4",0.125,"soundWater5",0.125,"soundWater6",0.125,"soundWater7",0.125,"soundWater8",0.125}; + bulletFly1[] = {"A3\sounds_f\weapons\hits\bullet_by_1.wav",1,1,35}; + bulletFly2[] = {"A3\sounds_f\weapons\hits\bullet_by_2.wav",1,1,35}; + bulletFly3[] = {"A3\sounds_f\weapons\hits\bullet_by_3.wav",1,1,35}; + bulletFly4[] = {"A3\sounds_f\weapons\hits\bullet_by_4.wav",1,1,35}; + bulletFly5[] = {"A3\sounds_f\weapons\hits\bullet_by_5.wav",1,1,35}; + bulletFly6[] = {"A3\sounds_f\weapons\hits\bullet_by_6.wav",1,1,35}; + bulletFly7[] = {"A3\sounds_f\weapons\hits\bullet_by_7.wav",1,1,35}; + bulletFly8[] = {"A3\sounds_f\weapons\hits\bullet_by_8.wav",1,1,35}; + bulletFly[] = {"bulletFly1",0.166,"bulletFly2",0.166,"bulletFly3",0.166,"bulletFly4",0.166,"bulletFly5",0.166,"bulletFly6",0.167,"bulletFly7",0.166,"bulletFly8",0.167}; + supersonicCrackNear[] = {"A3\sounds_f\weapons\hits\sscrack1.wav",1,1,35}; + supersonicCrackFar[] = {"A3\sounds_f\weapons\hits\sscrack2.wav",1,1,135}; + }; + */ + + class B_65x39_Caseless; + class ACE_frag_base: B_65x39_Caseless { + timeToLive = 12; + typicalSpeed = 1500; + deflecting = 65; + }; + + class ACE_frag_tiny: ACE_frag_base { + hit = 6; + airFriction = BASE_DRAG; + caliber = 0.75; + }; + + class ACE_frag_tiny_HD: ACE_frag_base { + hit = 6; + airFriction = BASE_DRAG_HD; + caliber = 0.75; + }; + + class ACE_frag_small: ACE_frag_base { + hit = 12; + airFriction = BASE_DRAG*0.9; + }; + + class ACE_frag_small_HD: ACE_frag_base { + hit = 12; + airFriction = BASE_DRAG_HD*0.9; + }; + + class ACE_frag_medium: ACE_frag_base { + hit = 14; + airFriction = BASE_DRAG*0.75; + caliber = 1.2; + }; + + class ACE_frag_medium_HD: ACE_frag_base { + hit = 14; + airFriction = BASE_DRAG_HD*0.75; + caliber = 1.2; + }; + + class ACE_frag_large: ACE_frag_base { + hit = 28; + indirectHit = 2; + indirectHitRange = 0.25; + airFriction = BASE_DRAG*0.65; + caliber = 2; + explosive = 0; + + }; + + class ACE_frag_large_HD: ACE_frag_large { + hit = 28; + indirectHit = 2; + indirectHitRange = 0.25; + airFriction = BASE_DRAG_HD*0.65; + caliber = 2; + + + }; + + class ACE_frag_huge: ACE_frag_large { + hit = 40; + indirectHit = 4; + indirectHitRange = 0.5; + airFriction = BASE_DRAG*0.5; + caliber = 2.8; + }; + + class ACE_frag_huge_HD: ACE_frag_large { + hit = 40; + indirectHit = 4; + indirectHitRange = 0.5; + airFriction = BASE_DRAG_HD*0.5; + caliber = 2.8; + }; + + class ACE_frag_spall_small: ACE_frag_small { + timeToLive = 0.1; + }; + + class ACE_frag_spall_medium: ACE_frag_medium { + timeToLive = 0.15; + }; + + class ACE_frag_spall_large: ACE_frag_large { + timeToLive = 0.25; + }; + + class ACE_frag_spall_huge: ACE_frag_huge { + timeToLive = 0.3; + }; +}; diff --git a/addons/frag/CfgEventhandlers.hpp b/addons/frag/CfgEventhandlers.hpp index da3de47063..1e631e07eb 100644 --- a/addons/frag/CfgEventhandlers.hpp +++ b/addons/frag/CfgEventhandlers.hpp @@ -1,17 +1,17 @@ -class Extended_PreInit_EventHandlers { - class ADDON { - init = QUOTE(call COMPILE_FILE(XEH_pre_init)); - }; -}; - -class Extended_PostInit_EventHandlers { - class ADDON { - init = QUOTE(call COMPILE_FILE(XEH_post_init)); - }; -}; - -class Extended_FiredBIS_EventHandlers { - class AllVehicles { - ADDON = QUOTE(_this call FUNC(fired)); - }; -}; +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_pre_init)); + }; +}; + +class Extended_PostInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_post_init)); + }; +}; + +class Extended_FiredBIS_EventHandlers { + class AllVehicles { + ADDON = QUOTE(_this call FUNC(fired)); + }; +}; diff --git a/addons/frag/XEH_post_init.sqf b/addons/frag/XEH_post_init.sqf index 21d76e6913..9769148871 100644 --- a/addons/frag/XEH_post_init.sqf +++ b/addons/frag/XEH_post_init.sqf @@ -1,18 +1,18 @@ -#include "script_component.hpp" -if(isServer) then { - [QGVAR(frag_eh), { _this call FUNC(frago); }] call ace_common_fnc_addEventHandler; -}; -/* -GVAR(replacedBisArtyWrapper) = false; -[] spawn { - waitUntil { - if(!(isNil "BIS_ARTY_F_ShellFlight")) then { - ACE_WRAPPER_BIS_ARTY_F_ShellFlight = BIS_ARTY_F_ShellFlight; - BIS_ARTY_F_ShellFlight = FUNC(BIS_ARTY_WRAPPER); - GVAR(replacedBisArtyWrapper) = true; - }; - sleep 4; - GVAR(replacedBisArtyWrapper) - }; -}; +#include "script_component.hpp" +if(isServer) then { + [QGVAR(frag_eh), { _this call FUNC(frago); }] call ace_common_fnc_addEventHandler; +}; +/* +GVAR(replacedBisArtyWrapper) = false; +[] spawn { + waitUntil { + if(!(isNil "BIS_ARTY_F_ShellFlight")) then { + ACE_WRAPPER_BIS_ARTY_F_ShellFlight = BIS_ARTY_F_ShellFlight; + BIS_ARTY_F_ShellFlight = FUNC(BIS_ARTY_WRAPPER); + GVAR(replacedBisArtyWrapper) = true; + }; + sleep 4; + GVAR(replacedBisArtyWrapper) + }; +}; */ \ No newline at end of file diff --git a/addons/frag/XEH_pre_Init.sqf b/addons/frag/XEH_pre_Init.sqf index 8591af46d3..5b3aa36b18 100644 --- a/addons/frag/XEH_pre_Init.sqf +++ b/addons/frag/XEH_pre_Init.sqf @@ -1,45 +1,45 @@ -#include "script_component.hpp" - - -ADDON = false; - -PREP(fired); -PREP(frago); -PREP(trackFragRound); -PREP(spallTrack); -PREP(doSpall); -PREP(vectorDiffFast); - -GVAR(trackedObjects) = []; -GVAR(blackList) = []; -GVAR(traceFrags) = false; - -GVAR(replacedBisArtyWrapper) = true; - -GVAR(TOTALFRAGS) = 0; - -GVAR(spallIsTrackingCount) = 0; -GVAR(spallHPData) = []; - -GVAR(traces) = []; -GVAR(tracesStarted) = false; -GVAR(traceID) = -1; -GVAR(autoTrace) = true; - - -// * Other Shit */ -PREP(frag_trace); -PREP(denyFrag); -PREP(BIS_ARTY_WRAPPER); -PREP(startTracing); -PREP(stopTracing); -PREP(clearTraces); -PREP(trackTrace); -PREP(addTrack); -PREP(drawTraces); -PREP(removeTrack); -PREP(spallHP); -PREP(addBlackList); -PREP(addManualTrack); - -ADDON = true; +#include "script_component.hpp" + + +ADDON = false; + +PREP(fired); +PREP(frago); +PREP(trackFragRound); +PREP(spallTrack); +PREP(doSpall); +PREP(vectorDiffFast); + +GVAR(trackedObjects) = []; +GVAR(blackList) = []; +GVAR(traceFrags) = false; + +GVAR(replacedBisArtyWrapper) = true; + +GVAR(TOTALFRAGS) = 0; + +GVAR(spallIsTrackingCount) = 0; +GVAR(spallHPData) = []; + +GVAR(traces) = []; +GVAR(tracesStarted) = false; +GVAR(traceID) = -1; +GVAR(autoTrace) = true; + + +// * Other Shit */ +PREP(frag_trace); +PREP(denyFrag); +PREP(BIS_ARTY_WRAPPER); +PREP(startTracing); +PREP(stopTracing); +PREP(clearTraces); +PREP(trackTrace); +PREP(addTrack); +PREP(drawTraces); +PREP(removeTrack); +PREP(spallHP); +PREP(addBlackList); +PREP(addManualTrack); + +ADDON = true; diff --git a/addons/frag/config.cpp b/addons/frag/config.cpp index 32ebc18827..4c1fb71e15 100644 --- a/addons/frag/config.cpp +++ b/addons/frag/config.cpp @@ -1,16 +1,16 @@ -#include "script_component.hpp" -class CfgPatches { - class ADDON { - units[] = {}; - weapons[] = {}; - requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"ace_common"}; - author[] = {"Nou"}; - VERSION_CONFIG; - }; -}; - -//PRELOAD_ADDONS; - -#include "CfgEventhandlers.hpp" -#include "CfgAmmo.hpp" +#include "script_component.hpp" +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_common"}; + author[] = {"Nou"}; + VERSION_CONFIG; + }; +}; + +//PRELOAD_ADDONS; + +#include "CfgEventhandlers.hpp" +#include "CfgAmmo.hpp" diff --git a/addons/frag/functions/fnc_BIS_ARTY_WRAPPER.sqf b/addons/frag/functions/fnc_BIS_ARTY_WRAPPER.sqf index e3e533e75a..0d71cf58ac 100644 --- a/addons/frag/functions/fnc_BIS_ARTY_WRAPPER.sqf +++ b/addons/frag/functions/fnc_BIS_ARTY_WRAPPER.sqf @@ -1,13 +1,13 @@ -#include "script_component.hpp" -_ret = [(_this select 6)] call FUNC(removeTrack); -if(!_ret) then { - [(_this select 6)] call FUNC(addBlackList); -}; -_this call ACE_WRAPPER_BIS_ARTY_F_ShellFlight; -_catEntry = BIS_ARTY_SHELLCAT select ((count BIS_ARTY_SHELLCAT) - 1); -_shell = _catEntry select 0; -_ARTY_DeployOnImpact = getText (configFile >> "CfgAmmo" >> "ARTY_DeployOnImpact"); -if(_ARTY_DeployOnImpact == "") then { - _this set[6, _shell]; - _this call FUNC(fired); +#include "script_component.hpp" +_ret = [(_this select 6)] call FUNC(removeTrack); +if(!_ret) then { + [(_this select 6)] call FUNC(addBlackList); +}; +_this call ACE_WRAPPER_BIS_ARTY_F_ShellFlight; +_catEntry = BIS_ARTY_SHELLCAT select ((count BIS_ARTY_SHELLCAT) - 1); +_shell = _catEntry select 0; +_ARTY_DeployOnImpact = getText (configFile >> "CfgAmmo" >> "ARTY_DeployOnImpact"); +if(_ARTY_DeployOnImpact == "") then { + _this set[6, _shell]; + _this call FUNC(fired); }; \ No newline at end of file diff --git a/addons/frag/functions/fnc_addBlackList.sqf b/addons/frag/functions/fnc_addBlackList.sqf index 95edcd1590..f7b3faf902 100644 --- a/addons/frag/functions/fnc_addBlackList.sqf +++ b/addons/frag/functions/fnc_addBlackList.sqf @@ -1,4 +1,4 @@ -#include "script_component.hpp" -private ["_round"]; -_round = _this select 0; +#include "script_component.hpp" +private ["_round"]; +_round = _this select 0; GVAR(blackList) set[(count GVAR(blackList)), _round]; \ No newline at end of file diff --git a/addons/frag/functions/fnc_addManualTrack.sqf b/addons/frag/functions/fnc_addManualTrack.sqf index 89c1576277..3dc14cc748 100644 --- a/addons/frag/functions/fnc_addManualTrack.sqf +++ b/addons/frag/functions/fnc_addManualTrack.sqf @@ -1,7 +1,7 @@ -#include "script_component.hpp" -private ["_round"]; -_round = _this select 0; -if(alive _round) then { - GVAR(trackedObjects) set[(count GVAR(trackedObjects)), _round]; - [DFUNC(trackFragRound), 0, [_round, (getPosASL _round), (velocity _round), (typeOf _round), time, objNull, false, 0, 0]] call cba_fnc_addPerFrameHandler; +#include "script_component.hpp" +private ["_round"]; +_round = _this select 0; +if(alive _round) then { + GVAR(trackedObjects) set[(count GVAR(trackedObjects)), _round]; + [DFUNC(trackFragRound), 0, [_round, (getPosASL _round), (velocity _round), (typeOf _round), time, objNull, false, 0, 0]] call cba_fnc_addPerFrameHandler; }; \ No newline at end of file diff --git a/addons/frag/functions/fnc_addTrack.sqf b/addons/frag/functions/fnc_addTrack.sqf index 760b48b287..2beea1dd56 100644 --- a/addons/frag/functions/fnc_addTrack.sqf +++ b/addons/frag/functions/fnc_addTrack.sqf @@ -1,20 +1,20 @@ -#include "script_component.hpp" -if(GVAR(autoTrace)) then { - [] call FUNC(startTracing); -}; - -// setAccTime 0.05; -_index = (count GVAR(traces)); -_obj = _this select 1; -_origin = _this select 0; -_color = [1,0,0,1]; -if((count _this) > 2) then { - _color = _this select 2; -}; -_positions = []; -_objVel = velocity _obj; -_objTVel = sqrt((_objVel select 0)^2 + (_objVel select 1)^2 + (_objVel select 2)^2); -_positions set[(count _positions), [(getPos _obj), _objTVel]]; -_data = [_origin, typeOf _origin, typeOf _obj, _objTVel, _positions, _color]; -GVAR(traces) set[_index, _data]; +#include "script_component.hpp" +if(GVAR(autoTrace)) then { + [] call FUNC(startTracing); +}; + +// setAccTime 0.05; +_index = (count GVAR(traces)); +_obj = _this select 1; +_origin = _this select 0; +_color = [1,0,0,1]; +if((count _this) > 2) then { + _color = _this select 2; +}; +_positions = []; +_objVel = velocity _obj; +_objTVel = sqrt((_objVel select 0)^2 + (_objVel select 1)^2 + (_objVel select 2)^2); +_positions set[(count _positions), [(getPos _obj), _objTVel]]; +_data = [_origin, typeOf _origin, typeOf _obj, _objTVel, _positions, _color]; +GVAR(traces) set[_index, _data]; [DFUNC(trackTrace), 0, [_obj, _index, time]] call cba_fnc_addPerFrameHandler; \ No newline at end of file diff --git a/addons/frag/functions/fnc_clearTraces.sqf b/addons/frag/functions/fnc_clearTraces.sqf index eaf34f77c4..b301094044 100644 --- a/addons/frag/functions/fnc_clearTraces.sqf +++ b/addons/frag/functions/fnc_clearTraces.sqf @@ -1,2 +1,2 @@ -#include "script_component.hpp" +#include "script_component.hpp" GVAR(traces) = []; \ No newline at end of file diff --git a/addons/frag/functions/fnc_denyFrag.sqf b/addons/frag/functions/fnc_denyFrag.sqf index b4875cbd3a..6c4aa9bf8d 100644 --- a/addons/frag/functions/fnc_denyFrag.sqf +++ b/addons/frag/functions/fnc_denyFrag.sqf @@ -1,7 +1,7 @@ -#include "script_component.hpp" - -private ["_ret"]; -_ret = [(_this select 0)] call FUNC(removeTrack); -if(!_ret) then { - [(_this select 0)] call FUNC(addBlackList); +#include "script_component.hpp" + +private ["_ret"]; +_ret = [(_this select 0)] call FUNC(removeTrack); +if(!_ret) then { + [(_this select 0)] call FUNC(addBlackList); }; \ No newline at end of file diff --git a/addons/frag/functions/fnc_doSpall.sqf b/addons/frag/functions/fnc_doSpall.sqf index 17f17ea7e5..761490fa90 100644 --- a/addons/frag/functions/fnc_doSpall.sqf +++ b/addons/frag/functions/fnc_doSpall.sqf @@ -1,166 +1,166 @@ -//fnc_doSpall.sqf -#include "script_component.hpp" -#ifdef DEBUG_MODE_FULL - GVAR(traceFrags) = true; -#endif -// player sideChat "WAAAAAAAAAAAAAAAAAAAAA"; -private ["_params", "_initialData", "_hpData", "_roundType", "_round", "_object", "_caliber", "_explosive", - "_idh", "_alive", "_exit", "_vm", "_velocity", "_unitDir", "_oldVelocity", "_curVelocity", "_diff", "_polar", - "_pos", "_spallPos", "_i", "_pos1", "_pos2", "_blah", "_data", "_spallPolar", "_c", "_warn", "_m", "_k", - "_gC", "_shellType", "_fragPower", "_spread", "_spallCount", "_elev", "_dir", "_vel", "_spallFragVect", - "_fragment"]; - - -_params = _this select 0; -[(_this select 1)] call cba_fnc_removePerFrameHandler; -_hitData = _params select 0; -_initialData = GVAR(spallHPData) select (_hitData select 0); -_hpData = (_hitData select 1) select (_params select 1); - - -_object = _hpData select 0; -_object removeEventHandler ["hitPart", _initialData select 0]; -_foundObjects = _initialData select 7; -_index = _foundObjects find _object; -if(_index != -1) then { - _foundObjecsts set[_index, nil]; -}; - -_roundType = (_initialData select 2); -_round = (_initialData select 3); -_object = (_initialData select 1); - -_caliber = getNumber(configFile >> "CfgAmmo" >> _roundType >> "caliber"); -_explosive = getNumber(configFile >> "CfgAmmo" >> _roundType >> "explosive"); -_idh = getNumber(configFile >> "CfgAmmo" >> _roundType >> "indirectHitRange"); - -_alive = true; -if(!alive _round && (_initialData select 6) == 1) then { - _alive = false; -}; - -if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then { - // player sideChat format["BBBB"]; - _exit = false; - _vm = 1; - _velocity = _initialData select 5; - - _oldVelocity = _velocity call BIS_fnc_magnitude; - _curVelocity = (velocity _round) call BIS_fnc_magnitude; - - if(alive _round) then { - _diff = _velocity vectorDiff (velocity _round); - _polar = _diff call CBA_fnc_vect2polar; - // player sideChat format["polar: %1", _polar]; - if((abs(_polar select 1) > 45 || abs(_polar select 2) > 45)) then { - if(_caliber < 2.5) then { - // player sideChat format["exit!"]; - _exit = true; - } else { - _vm = 1-(_curVelocity/_oldVelocity); - }; - }; - }; - if(!_exit) then { - _unitDir = vectorNormalized _velocity; - _pos = _hpData select 3; - _spallPos = nil; - for "_i" from 0 to 100 do { - _pos1 = [ - (_pos select 0) + (((_unitDir select 0)*0.01)*_i), - (_pos select 1) + (((_unitDir select 1)*0.01)*_i), - (_pos select 2) + (((_unitDir select 2)*0.01)*_i) - ]; - _pos2 = [ - (_pos select 0) + (((_unitDir select 0)*0.01)*(_i+1)), - (_pos select 1) + (((_unitDir select 1)*0.01)*(_i+1)), - (_pos select 2) + (((_unitDir select 2)*0.01)*(_i+1)) - ]; - // _blah = [_object, "FIRE"] intersect [_object worldToModel (ASLtoATL _pos1), _object worldToModel (ASLtoATL _pos2)]; - // diag_log text format["b: %1", _blah]; - - // _data = [nil, nil, nil, 1, [[ASLtoATL _pos1, 1], [ASLtoATL _pos2, 1]]]; - // NOU_TRACES set[(count NOU_TRACES), _data]; - - if(!lineIntersects [_pos1, _pos2]) exitWith { - // player sideChat format["FOUND!"]; - _spallPos = _pos2; - }; - }; - if(!isNil "_spallPos") then { - _spallPolar = _velocity call CBA_fnc_vect2polar; - - if(_explosive > 0) then { - // player sideChat format["EXPLOSIVE!"]; - _warn = false; - _c = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_CHARGE"); - if(_c == 0) then { _c = 1; _warn = true;}; - _m = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_METAL"); - if(_m == 0) then { _m = 2; _warn = true;}; - _k = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_GURNEY_K"); - if(_k == 0) then { _k = 1/2; _warn = true;}; - _gC = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_GURNEY_C"); - if(_gC == 0) then { _gC = 2440; _warn = true;}; - - if(_warn) then { - diag_log text format["Ammo class %1 lacks proper explosive properties definitions for frag!", _roundType]; //TODO: turn this off when we get closer to release - }; - - _fragPower = (((_m/_c)+_k)^-(1/2))*_gC; - _spallPolar set[0, _fragPower*0.66]; - }; - - _fragTypes = [ - "ACE_frag_spall_small", "ACE_frag_spall_small", "ACE_frag_spall_small", - "ACE_frag_spall_small","ACE_frag_spall_medium","ACE_frag_spall_medium","ACE_frag_spall_medium", - "ACE_frag_spall_medium", "ACE_frag_spall_large", "ACE_frag_spall_large", "ACE_frag_spall_huge", - "ACE_frag_spall_huge" - - ]; - - // diag_log text format["SPALL POWER: %1", _spallPolar select 0]; - _spread = 15+(random 25); - _spallCount = 5+(random 10); - for "_i" from 1 to _spallCount do { - _elev = ((_spallPolar select 2)-_spread)+(random (_spread*2)); - _dir = ((_spallPolar select 1)-_spread)+(random (_spread*2)); - if(abs _elev > 90) then { - _dir = _dir + 180; - }; - _dir = _dir % 360; - _vel = (_spallPolar select 0)*0.33*_vm; - _vel = (_vel-(_vel*0.25))+(random (_vel*0.5)); - - _spallFragVect = [_vel, _dir, _elev] call CBA_fnc_polar2vect; - _fragType = round (random ((count _fragTypes)-1)); - _fragment = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; - _fragment setPosASL _spallPos; - _fragment setVelocity _spallFragVect; - if(GVAR(traceFrags)) then { - [player, _fragment, [1,0.5,0,1]] call FUNC(addTrack); - }; - }; - _spread = 5+(random 5); - _spallCount = 3+(random 5); - for "_i" from 1 to _spallCount do { - _elev = ((_spallPolar select 2)-_spread)+(random (_spread*2)); - _dir = ((_spallPolar select 1)-_spread)+(random (_spread*2)); - if(abs _elev > 90) then { - _dir = _dir + 180; - }; - _dir = _dir % 360; - _vel = (_spallPolar select 0)*0.55*_vm; - _vel = (_vel-(_vel*0.25))+(random (_vel*0.5)); - - _spallFragVect = [_vel, _dir, _elev] call CBA_fnc_polar2vect; - _fragType = round (random ((count _fragTypes)-1)); - _fragment = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; - _fragment setPosASL _spallPos; - _fragment setVelocity _spallFragVect; - if(GVAR(traceFrags)) then { - [player, _fragment, [1,0,0,1]] call FUNC(addTrack); - }; - }; - }; - }; +//fnc_doSpall.sqf +#include "script_component.hpp" +#ifdef DEBUG_MODE_FULL + GVAR(traceFrags) = true; +#endif +// player sideChat "WAAAAAAAAAAAAAAAAAAAAA"; +private ["_params", "_initialData", "_hpData", "_roundType", "_round", "_object", "_caliber", "_explosive", + "_idh", "_alive", "_exit", "_vm", "_velocity", "_unitDir", "_oldVelocity", "_curVelocity", "_diff", "_polar", + "_pos", "_spallPos", "_i", "_pos1", "_pos2", "_blah", "_data", "_spallPolar", "_c", "_warn", "_m", "_k", + "_gC", "_shellType", "_fragPower", "_spread", "_spallCount", "_elev", "_dir", "_vel", "_spallFragVect", + "_fragment"]; + + +_params = _this select 0; +[(_this select 1)] call cba_fnc_removePerFrameHandler; +_hitData = _params select 0; +_initialData = GVAR(spallHPData) select (_hitData select 0); +_hpData = (_hitData select 1) select (_params select 1); + + +_object = _hpData select 0; +_object removeEventHandler ["hitPart", _initialData select 0]; +_foundObjects = _initialData select 7; +_index = _foundObjects find _object; +if(_index != -1) then { + _foundObjecsts set[_index, nil]; +}; + +_roundType = (_initialData select 2); +_round = (_initialData select 3); +_object = (_initialData select 1); + +_caliber = getNumber(configFile >> "CfgAmmo" >> _roundType >> "caliber"); +_explosive = getNumber(configFile >> "CfgAmmo" >> _roundType >> "explosive"); +_idh = getNumber(configFile >> "CfgAmmo" >> _roundType >> "indirectHitRange"); + +_alive = true; +if(!alive _round && (_initialData select 6) == 1) then { + _alive = false; +}; + +if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then { + // player sideChat format["BBBB"]; + _exit = false; + _vm = 1; + _velocity = _initialData select 5; + + _oldVelocity = _velocity call BIS_fnc_magnitude; + _curVelocity = (velocity _round) call BIS_fnc_magnitude; + + if(alive _round) then { + _diff = _velocity vectorDiff (velocity _round); + _polar = _diff call CBA_fnc_vect2polar; + // player sideChat format["polar: %1", _polar]; + if((abs(_polar select 1) > 45 || abs(_polar select 2) > 45)) then { + if(_caliber < 2.5) then { + // player sideChat format["exit!"]; + _exit = true; + } else { + _vm = 1-(_curVelocity/_oldVelocity); + }; + }; + }; + if(!_exit) then { + _unitDir = vectorNormalized _velocity; + _pos = _hpData select 3; + _spallPos = nil; + for "_i" from 0 to 100 do { + _pos1 = [ + (_pos select 0) + (((_unitDir select 0)*0.01)*_i), + (_pos select 1) + (((_unitDir select 1)*0.01)*_i), + (_pos select 2) + (((_unitDir select 2)*0.01)*_i) + ]; + _pos2 = [ + (_pos select 0) + (((_unitDir select 0)*0.01)*(_i+1)), + (_pos select 1) + (((_unitDir select 1)*0.01)*(_i+1)), + (_pos select 2) + (((_unitDir select 2)*0.01)*(_i+1)) + ]; + // _blah = [_object, "FIRE"] intersect [_object worldToModel (ASLtoATL _pos1), _object worldToModel (ASLtoATL _pos2)]; + // diag_log text format["b: %1", _blah]; + + // _data = [nil, nil, nil, 1, [[ASLtoATL _pos1, 1], [ASLtoATL _pos2, 1]]]; + // NOU_TRACES set[(count NOU_TRACES), _data]; + + if(!lineIntersects [_pos1, _pos2]) exitWith { + // player sideChat format["FOUND!"]; + _spallPos = _pos2; + }; + }; + if(!isNil "_spallPos") then { + _spallPolar = _velocity call CBA_fnc_vect2polar; + + if(_explosive > 0) then { + // player sideChat format["EXPLOSIVE!"]; + _warn = false; + _c = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_CHARGE"); + if(_c == 0) then { _c = 1; _warn = true;}; + _m = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_METAL"); + if(_m == 0) then { _m = 2; _warn = true;}; + _k = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_GURNEY_K"); + if(_k == 0) then { _k = 1/2; _warn = true;}; + _gC = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_GURNEY_C"); + if(_gC == 0) then { _gC = 2440; _warn = true;}; + + if(_warn) then { + diag_log text format["Ammo class %1 lacks proper explosive properties definitions for frag!", _roundType]; //TODO: turn this off when we get closer to release + }; + + _fragPower = (((_m/_c)+_k)^-(1/2))*_gC; + _spallPolar set[0, _fragPower*0.66]; + }; + + _fragTypes = [ + "ACE_frag_spall_small", "ACE_frag_spall_small", "ACE_frag_spall_small", + "ACE_frag_spall_small","ACE_frag_spall_medium","ACE_frag_spall_medium","ACE_frag_spall_medium", + "ACE_frag_spall_medium", "ACE_frag_spall_large", "ACE_frag_spall_large", "ACE_frag_spall_huge", + "ACE_frag_spall_huge" + + ]; + + // diag_log text format["SPALL POWER: %1", _spallPolar select 0]; + _spread = 15+(random 25); + _spallCount = 5+(random 10); + for "_i" from 1 to _spallCount do { + _elev = ((_spallPolar select 2)-_spread)+(random (_spread*2)); + _dir = ((_spallPolar select 1)-_spread)+(random (_spread*2)); + if(abs _elev > 90) then { + _dir = _dir + 180; + }; + _dir = _dir % 360; + _vel = (_spallPolar select 0)*0.33*_vm; + _vel = (_vel-(_vel*0.25))+(random (_vel*0.5)); + + _spallFragVect = [_vel, _dir, _elev] call CBA_fnc_polar2vect; + _fragType = round (random ((count _fragTypes)-1)); + _fragment = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; + _fragment setPosASL _spallPos; + _fragment setVelocity _spallFragVect; + if(GVAR(traceFrags)) then { + [player, _fragment, [1,0.5,0,1]] call FUNC(addTrack); + }; + }; + _spread = 5+(random 5); + _spallCount = 3+(random 5); + for "_i" from 1 to _spallCount do { + _elev = ((_spallPolar select 2)-_spread)+(random (_spread*2)); + _dir = ((_spallPolar select 1)-_spread)+(random (_spread*2)); + if(abs _elev > 90) then { + _dir = _dir + 180; + }; + _dir = _dir % 360; + _vel = (_spallPolar select 0)*0.55*_vm; + _vel = (_vel-(_vel*0.25))+(random (_vel*0.5)); + + _spallFragVect = [_vel, _dir, _elev] call CBA_fnc_polar2vect; + _fragType = round (random ((count _fragTypes)-1)); + _fragment = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; + _fragment setPosASL _spallPos; + _fragment setVelocity _spallFragVect; + if(GVAR(traceFrags)) then { + [player, _fragment, [1,0,0,1]] call FUNC(addTrack); + }; + }; + }; + }; }; \ No newline at end of file diff --git a/addons/frag/functions/fnc_drawTraces.sqf b/addons/frag/functions/fnc_drawTraces.sqf index c4b5989177..b9645bab97 100644 --- a/addons/frag/functions/fnc_drawTraces.sqf +++ b/addons/frag/functions/fnc_drawTraces.sqf @@ -1,32 +1,32 @@ -#include "script_component.hpp" -{ - _positions = _x select 4; - _color = _x select 5; - _index = 0; - _max = count _positions; - _startSpeed = (_positions select 0) select 1; - if(_startSpeed <= 0) then { - _startSpeed = 0.01; - }; - _lastSpd = []; - _lastPos = []; - while {_index < _max} do { - _data1 = _positions select _index; - _data2 = nil; - if(_index + ACE_TRACE_DRAW_INC >= _max) then { - _data2 = _positions select (_max - 1); - } else { - _data2 = _positions select (_index + ACE_TRACE_DRAW_INC); - }; - - _pos1 = _data1 select 0; - _pos2 = _data2 select 0; - _index = _index + ACE_TRACE_DRAW_INC; - - - drawLine3D [_pos1, _pos2, _color]; - _lastPos = _pos2; - _lastSpd = _data1 select 1; - }; - // drawIcon3D ["", [1,0,0,1], _lastPos, 0, 0, 0, format["%1m/s", _lastSpd], 1, 0.05, "PuristaMedium"]; +#include "script_component.hpp" +{ + _positions = _x select 4; + _color = _x select 5; + _index = 0; + _max = count _positions; + _startSpeed = (_positions select 0) select 1; + if(_startSpeed <= 0) then { + _startSpeed = 0.01; + }; + _lastSpd = []; + _lastPos = []; + while {_index < _max} do { + _data1 = _positions select _index; + _data2 = nil; + if(_index + ACE_TRACE_DRAW_INC >= _max) then { + _data2 = _positions select (_max - 1); + } else { + _data2 = _positions select (_index + ACE_TRACE_DRAW_INC); + }; + + _pos1 = _data1 select 0; + _pos2 = _data2 select 0; + _index = _index + ACE_TRACE_DRAW_INC; + + + drawLine3D [_pos1, _pos2, _color]; + _lastPos = _pos2; + _lastSpd = _data1 select 1; + }; + // drawIcon3D ["", [1,0,0,1], _lastPos, 0, 0, 0, format["%1m/s", _lastSpd], 1, 0.05, "PuristaMedium"]; } forEach GVAR(traces); \ No newline at end of file diff --git a/addons/frag/functions/fnc_frag_trace.sqf b/addons/frag/functions/fnc_frag_trace.sqf index 3ca768e05b..664e117793 100644 --- a/addons/frag/functions/fnc_frag_trace.sqf +++ b/addons/frag/functions/fnc_frag_trace.sqf @@ -1,10 +1,10 @@ -#include "script_component.hpp" - -private ["_params", "_shell"]; -_params = _this select 0; -_shell = _params select 0; -if(alive _shell) then { - drop ["\Ca\Data\Cl_basic","","Billboard",1,30,(getPos _shell),[0,0,0],1,1.275,1.0,0.0,[0.5],[[0,1,0,1]],[0],0.0,2.0,"","",""]; -} else { - [_this select 1] call cba_fnc_removePerFrameHandler; +#include "script_component.hpp" + +private ["_params", "_shell"]; +_params = _this select 0; +_shell = _params select 0; +if(alive _shell) then { + drop ["\Ca\Data\Cl_basic","","Billboard",1,30,(getPos _shell),[0,0,0],1,1.275,1.0,0.0,[0.5],[[0,1,0,1]],[0],0.0,2.0,"","",""]; +} else { + [_this select 1] call cba_fnc_removePerFrameHandler; }; \ No newline at end of file diff --git a/addons/frag/functions/fnc_frago.sqf b/addons/frag/functions/fnc_frago.sqf index 2396311d8b..1b737dc70d 100644 --- a/addons/frag/functions/fnc_frago.sqf +++ b/addons/frag/functions/fnc_frago.sqf @@ -1,230 +1,230 @@ -//fnc_frago.sqf -// #define DEBUG_MODE_FULL -#include "script_component.hpp" - -#define FRAG_VEC_VAR 0.004 - -#define MAX_FRAG_COUNT 50 - -if(!isServer) exitWith { }; - -// _startTime = diag_tickTime; -private ["_round", "_lastPos", "_lastVel", "_shellType", "_gun", "_fragTypes", "_warn", "_atlPos", "_isArmed", - "_fuseDist", "_indirectHitRange", "_fragRange", "_c", "_m", "_k", "_gC", "_fragPower", "_fragPowerRandom", - "_manObjects", "_objects", "_crew", "_fragCount", "_fragArcs", "_doRandom", "_target", "_boundingBox", - "_targetPos", "_distance", "_add", "_bbX", "_bbY", "_bbZ", "_cubic", "_targetVel", "_baseVec", "_dir", - "_currentCount", "_count", "_vecVar", "_i", "_vec", "_fp", "_vel", "_fragType", "_fragObj", "_randomCount", - "_sectorSize", "_sectorOffset", "_randomDir"]; - - -_round = _this select 0; -_lastPos = _this select 1; -_lastVel = _this select 2; -_shellType = _this select 3; -_gun = nil; -if((count _this) > 5) then { - _gun = _this select 5; -}; - -_fragTypes = [ - "ACE_frag_tiny", "ACE_frag_tiny", "ACE_frag_tiny", - "ACE_frag_tiny_HD", "ACE_frag_tiny_HD", "ACE_frag_tiny_HD", - "ACE_frag_small","ACE_frag_small","ACE_frag_small","ACE_frag_small", - "ACE_frag_small_HD","ACE_frag_small_HD","ACE_frag_small_HD","ACE_frag_small_HD", - "ACE_frag_medium_HD", "ACE_frag_medium_HD", "ACE_frag_medium_HD", "ACE_frag_medium_HD", "ACE_frag_medium_HD" - ]; - -_warn = false; -if(isArray (configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_CLASSES")) then { - _fragTypes = getArray (configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_CLASSES"); -} else { - _warn = true; -}; - -_atlPos = ASLtoATL _lastPos; - -_isArmed = true; -if(!isNil "_gun") then { - _fuseDist = getNumber(configFile >> "CfgAmmo" >> _shellType >> "fuseDistance"); - _isArmed = ((getPosASL _gun) distance _lastPos > _fuseDist); -}; - -_indirectHitRange = getNumber(configFile >> "CfgAmmo" >> _shellType >> "indirecthitrange"); -_fragRange = 20*_indirectHitRange*4; -// _c = 185; // grams of comp-b -// _m = 210; // grams of fragmentating metal -// _k = 3/5; // spherical K factor -// _gC = 2843; // Gurney constant of comp-b in /ms - -// _c = 429; // grams of tritonal -// _m = 496; // grams of fragmentating metal -// _k = 1/2; // spherical K factor -// _gC = 2320; // Gurney constant of tritonal in /ms - - -_c = getNumber(configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_CHARGE"); -if(_c == 0) then { _c = 1; _warn = true;}; -_m = getNumber(configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_METAL"); -if(_m == 0) then { _m = 2; _warn = true;}; -_k = getNumber(configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_GURNEY_K"); -if(_k == 0) then { _k = 1/2; _warn = true;}; -_gC = getNumber(configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_GURNEY_C"); -if(_gC == 0) then { _gC = 2440; _warn = true;}; - -if(_warn) then { - diag_log text format["Ammo class %1 lacks proper explosive properties definitions for frag!", _shellType]; //TODO: turn this off when we get closer to release -}; - -_fragPower = (((_m/_c)+_k)^-(1/2))*_gC; -_fragPower = _fragPower*0.8; // Gunery equation is for a non-fragmenting metal, imperical value of 80% represents fragmentation - -_fragPowerRandom = _fragPower*0.5; -if((_atlPos select 2) < 0.5) then { - _lastPos set[2, (_lastPos select 2)+0.5]; -}; - -// _manObjects = _atlPos nearEntities ["CaManBase", _fragRange]; - -// setAccTime 0.01; - -//_objects = nearestObjects [_atlPos, ["AllVehicles"], _fragRange]; // Not sure if tracking "ReammoBox" is required, if so revert this change for _objects -_objects = _atlPos nearEntities [["Car", "Motorcycle", "Tank", "StaticWeapon", "CAManBase", "Air", "Ship"], _fragRange]; - -// _objects = _manObjects; -// Target also people inside vehicles or manning weapons -_crew = []; -{ - { - _crew set [count _crew,_x] - } forEach (crew _x); -} forEach _objects; - -_objects = _objects - _crew; -_objects = _objects + _crew; - -_fragCount = 0; - -_fragArcs = []; -_fragArcs set[360, 0]; - -#ifdef DEBUG_MODE_FULL - player sideChat format["_fragRange: %1", _fragRange]; - player sideChat format["_objects: %1", _objects]; -#endif -_doRandom = false; -if(_isArmed && (count _objects) > 0) then { - { - //if(random(1) > 0.5) then { - _target = _x; - if(alive _target) then { - _boundingBox = boundingBox _target; - _targetPos = (getPosASL _target); - _distance = _targetPos distance _lastPos; - _add = (((_boundingBox select 1) select 2)/2)+((((_distance-(_fragpower/8)) max 0)/_fragPower)*10); - _bbX = (abs((_boundingBox select 0) select 0))+((_boundingBox select 1) select 0); - _bbY = (abs((_boundingBox select 0) select 1))+((_boundingBox select 1) select 1); - _bbZ = (abs((_boundingBox select 0) select 2))+((_boundingBox select 1) select 2); - _cubic = _bbX*_bbY*_bbZ; - if(_cubic > 1) then { - _doRandom = true; - - _targetVel = (velocity _target); - - - _targetPos set[0, (_targetPos select 0)+((_targetVel select 0)*(_distance/_fragPower))]; - _targetPos set[1, (_targetPos select 1)+((_targetVel select 1)*(_distance/_fragPower))]; - _targetPos set[2, (_targetPos select 2)+_add]; - - _baseVec = _lastPos vectorFromTo _targetPos; - - _dir = floor(_baseVec call CBA_fnc_vectDir); - _currentCount = _fragArcs select _dir; - if(isNil "_currentCount") then { - _currentCount = 0; - }; - if(_currentCount < 20) then { - _count = ceil(random(sqrt(_m/1000))); - _vecVar = FRAG_VEC_VAR; - if(!(_target isKindOf "Man")) then { - _vecVar = ((sqrt _cubic)/2000)+FRAG_VEC_VAR; - if((count (crew _target)) == 0 && _count > 0) then { - _count = 0 max (_count/2); - }; - }; - for "_i" from 1 to _count do { - _vec = +_baseVec; - - _vec set[0, (_vec select 0)-(_vecVar/2)+(random _vecVar)]; - _vec set[1, (_vec select 1)-(_vecVar/2)+(random _vecVar)]; - _vec set[2, (_vec select 2)-(_vecVar/2)+(random _vecVar)]; - - _fp = (_fragPower-(random (_fragPowerRandom))); - _vel = [ - (_vec select 0)*_fp, - (_vec select 1)*_fp, - (_vec select 2)*_fp - ]; - - _fragType = round (random ((count _fragTypes)-1)); - _fragObj = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; - // diag_log text format["fp: %1 %2", _fp, typeOf _fragObj]; - _fragObj setPosASL _lastPos; - _fragObj setVectorDir _vec; - _fragObj setVelocity _vel; - #ifdef DEBUG_MODE_FULL - GVAR(TOTALFRAGS) = GVAR(TOTALFRAGS) + 1; - GVAR(traceFrags) = true; - #endif - if(GVAR(traceFrags)) then { - [player, _fragObj, [1,0,0,1]] call FUNC(addTrack); - }; - _fragCount = _fragCount + 1; - _currentCount = _currentCount + 1; - }; - _fragArcs set[_dir, _currentCount]; - }; - }; - }; - //}; - if(_fragCount > MAX_FRAG_COUNT) exitWith {}; - } forEach _objects; - if(_fragCount > MAX_FRAG_COUNT) exitWith {}; - _randomCount = (ceil((MAX_FRAG_COUNT-_fragCount)*0.1)) max 0; - _sectorSize = 360 / (_randomCount max 1); - // _doRandom = false; - if(_doRandom) then { - for "_i" from 1 to _randomCount do { - // Distribute evenly - _sectorOffset = 360 * (_i - 1) / (_randomCount max 1); - _randomDir = random(_sectorSize); - _vec = [cos(_sectorOffset + _randomDir), sin(_sectorOffset + _randomDir), sin(30 - (random 45))]; - - _fp = (_fragPower-(random (_fragPowerRandom))); - - _vel = [ - (_vec select 0)*_fp, - (_vec select 1)*_fp, - (_vec select 2)*_fp - ]; - - _fragType = round (random ((count _fragTypes)-1)); - _fragObj = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; - _fragObj setPosASL _lastPos; - _fragObj setVectorDir _vec; - _fragObj setVelocity _vel; - #ifdef DEBUG_MODE_FULL - GVAR(TOTALFRAGS) = GVAR(TOTALFRAGS) + 1; - GVAR(traceFrags) = true; - #endif - if(GVAR(traceFrags)) then { - [player, _fragObj, [1,0.5,0,1]] call FUNC(addTrack); - }; - _fragCount = _fragCount + 1; - }; - }; -}; -// #ifdef DEBUG_MODE_FULL - // player sideChat format["total frags: %1", GVAR(TOTALFRAGS)]; - // player sideChat format["tracks: %1", (count GVAR(trackedObjects))]; -// #endif -// _endTime = diag_tickTime; +//fnc_frago.sqf +// #define DEBUG_MODE_FULL +#include "script_component.hpp" + +#define FRAG_VEC_VAR 0.004 + +#define MAX_FRAG_COUNT 50 + +if(!isServer) exitWith { }; + +// _startTime = diag_tickTime; +private ["_round", "_lastPos", "_lastVel", "_shellType", "_gun", "_fragTypes", "_warn", "_atlPos", "_isArmed", + "_fuseDist", "_indirectHitRange", "_fragRange", "_c", "_m", "_k", "_gC", "_fragPower", "_fragPowerRandom", + "_manObjects", "_objects", "_crew", "_fragCount", "_fragArcs", "_doRandom", "_target", "_boundingBox", + "_targetPos", "_distance", "_add", "_bbX", "_bbY", "_bbZ", "_cubic", "_targetVel", "_baseVec", "_dir", + "_currentCount", "_count", "_vecVar", "_i", "_vec", "_fp", "_vel", "_fragType", "_fragObj", "_randomCount", + "_sectorSize", "_sectorOffset", "_randomDir"]; + + +_round = _this select 0; +_lastPos = _this select 1; +_lastVel = _this select 2; +_shellType = _this select 3; +_gun = nil; +if((count _this) > 5) then { + _gun = _this select 5; +}; + +_fragTypes = [ + "ACE_frag_tiny", "ACE_frag_tiny", "ACE_frag_tiny", + "ACE_frag_tiny_HD", "ACE_frag_tiny_HD", "ACE_frag_tiny_HD", + "ACE_frag_small","ACE_frag_small","ACE_frag_small","ACE_frag_small", + "ACE_frag_small_HD","ACE_frag_small_HD","ACE_frag_small_HD","ACE_frag_small_HD", + "ACE_frag_medium_HD", "ACE_frag_medium_HD", "ACE_frag_medium_HD", "ACE_frag_medium_HD", "ACE_frag_medium_HD" + ]; + +_warn = false; +if(isArray (configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_CLASSES")) then { + _fragTypes = getArray (configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_CLASSES"); +} else { + _warn = true; +}; + +_atlPos = ASLtoATL _lastPos; + +_isArmed = true; +if(!isNil "_gun") then { + _fuseDist = getNumber(configFile >> "CfgAmmo" >> _shellType >> "fuseDistance"); + _isArmed = ((getPosASL _gun) distance _lastPos > _fuseDist); +}; + +_indirectHitRange = getNumber(configFile >> "CfgAmmo" >> _shellType >> "indirecthitrange"); +_fragRange = 20*_indirectHitRange*4; +// _c = 185; // grams of comp-b +// _m = 210; // grams of fragmentating metal +// _k = 3/5; // spherical K factor +// _gC = 2843; // Gurney constant of comp-b in /ms + +// _c = 429; // grams of tritonal +// _m = 496; // grams of fragmentating metal +// _k = 1/2; // spherical K factor +// _gC = 2320; // Gurney constant of tritonal in /ms + + +_c = getNumber(configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_CHARGE"); +if(_c == 0) then { _c = 1; _warn = true;}; +_m = getNumber(configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_METAL"); +if(_m == 0) then { _m = 2; _warn = true;}; +_k = getNumber(configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_GURNEY_K"); +if(_k == 0) then { _k = 1/2; _warn = true;}; +_gC = getNumber(configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_GURNEY_C"); +if(_gC == 0) then { _gC = 2440; _warn = true;}; + +if(_warn) then { + diag_log text format["Ammo class %1 lacks proper explosive properties definitions for frag!", _shellType]; //TODO: turn this off when we get closer to release +}; + +_fragPower = (((_m/_c)+_k)^-(1/2))*_gC; +_fragPower = _fragPower*0.8; // Gunery equation is for a non-fragmenting metal, imperical value of 80% represents fragmentation + +_fragPowerRandom = _fragPower*0.5; +if((_atlPos select 2) < 0.5) then { + _lastPos set[2, (_lastPos select 2)+0.5]; +}; + +// _manObjects = _atlPos nearEntities ["CaManBase", _fragRange]; + +// setAccTime 0.01; + +//_objects = nearestObjects [_atlPos, ["AllVehicles"], _fragRange]; // Not sure if tracking "ReammoBox" is required, if so revert this change for _objects +_objects = _atlPos nearEntities [["Car", "Motorcycle", "Tank", "StaticWeapon", "CAManBase", "Air", "Ship"], _fragRange]; + +// _objects = _manObjects; +// Target also people inside vehicles or manning weapons +_crew = []; +{ + { + _crew set [count _crew,_x] + } forEach (crew _x); +} forEach _objects; + +_objects = _objects - _crew; +_objects = _objects + _crew; + +_fragCount = 0; + +_fragArcs = []; +_fragArcs set[360, 0]; + +#ifdef DEBUG_MODE_FULL + player sideChat format["_fragRange: %1", _fragRange]; + player sideChat format["_objects: %1", _objects]; +#endif +_doRandom = false; +if(_isArmed && (count _objects) > 0) then { + { + //if(random(1) > 0.5) then { + _target = _x; + if(alive _target) then { + _boundingBox = boundingBox _target; + _targetPos = (getPosASL _target); + _distance = _targetPos distance _lastPos; + _add = (((_boundingBox select 1) select 2)/2)+((((_distance-(_fragpower/8)) max 0)/_fragPower)*10); + _bbX = (abs((_boundingBox select 0) select 0))+((_boundingBox select 1) select 0); + _bbY = (abs((_boundingBox select 0) select 1))+((_boundingBox select 1) select 1); + _bbZ = (abs((_boundingBox select 0) select 2))+((_boundingBox select 1) select 2); + _cubic = _bbX*_bbY*_bbZ; + if(_cubic > 1) then { + _doRandom = true; + + _targetVel = (velocity _target); + + + _targetPos set[0, (_targetPos select 0)+((_targetVel select 0)*(_distance/_fragPower))]; + _targetPos set[1, (_targetPos select 1)+((_targetVel select 1)*(_distance/_fragPower))]; + _targetPos set[2, (_targetPos select 2)+_add]; + + _baseVec = _lastPos vectorFromTo _targetPos; + + _dir = floor(_baseVec call CBA_fnc_vectDir); + _currentCount = _fragArcs select _dir; + if(isNil "_currentCount") then { + _currentCount = 0; + }; + if(_currentCount < 20) then { + _count = ceil(random(sqrt(_m/1000))); + _vecVar = FRAG_VEC_VAR; + if(!(_target isKindOf "Man")) then { + _vecVar = ((sqrt _cubic)/2000)+FRAG_VEC_VAR; + if((count (crew _target)) == 0 && _count > 0) then { + _count = 0 max (_count/2); + }; + }; + for "_i" from 1 to _count do { + _vec = +_baseVec; + + _vec set[0, (_vec select 0)-(_vecVar/2)+(random _vecVar)]; + _vec set[1, (_vec select 1)-(_vecVar/2)+(random _vecVar)]; + _vec set[2, (_vec select 2)-(_vecVar/2)+(random _vecVar)]; + + _fp = (_fragPower-(random (_fragPowerRandom))); + _vel = [ + (_vec select 0)*_fp, + (_vec select 1)*_fp, + (_vec select 2)*_fp + ]; + + _fragType = round (random ((count _fragTypes)-1)); + _fragObj = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; + // diag_log text format["fp: %1 %2", _fp, typeOf _fragObj]; + _fragObj setPosASL _lastPos; + _fragObj setVectorDir _vec; + _fragObj setVelocity _vel; + #ifdef DEBUG_MODE_FULL + GVAR(TOTALFRAGS) = GVAR(TOTALFRAGS) + 1; + GVAR(traceFrags) = true; + #endif + if(GVAR(traceFrags)) then { + [player, _fragObj, [1,0,0,1]] call FUNC(addTrack); + }; + _fragCount = _fragCount + 1; + _currentCount = _currentCount + 1; + }; + _fragArcs set[_dir, _currentCount]; + }; + }; + }; + //}; + if(_fragCount > MAX_FRAG_COUNT) exitWith {}; + } forEach _objects; + if(_fragCount > MAX_FRAG_COUNT) exitWith {}; + _randomCount = (ceil((MAX_FRAG_COUNT-_fragCount)*0.1)) max 0; + _sectorSize = 360 / (_randomCount max 1); + // _doRandom = false; + if(_doRandom) then { + for "_i" from 1 to _randomCount do { + // Distribute evenly + _sectorOffset = 360 * (_i - 1) / (_randomCount max 1); + _randomDir = random(_sectorSize); + _vec = [cos(_sectorOffset + _randomDir), sin(_sectorOffset + _randomDir), sin(30 - (random 45))]; + + _fp = (_fragPower-(random (_fragPowerRandom))); + + _vel = [ + (_vec select 0)*_fp, + (_vec select 1)*_fp, + (_vec select 2)*_fp + ]; + + _fragType = round (random ((count _fragTypes)-1)); + _fragObj = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; + _fragObj setPosASL _lastPos; + _fragObj setVectorDir _vec; + _fragObj setVelocity _vel; + #ifdef DEBUG_MODE_FULL + GVAR(TOTALFRAGS) = GVAR(TOTALFRAGS) + 1; + GVAR(traceFrags) = true; + #endif + if(GVAR(traceFrags)) then { + [player, _fragObj, [1,0.5,0,1]] call FUNC(addTrack); + }; + _fragCount = _fragCount + 1; + }; + }; +}; +// #ifdef DEBUG_MODE_FULL + // player sideChat format["total frags: %1", GVAR(TOTALFRAGS)]; + // player sideChat format["tracks: %1", (count GVAR(trackedObjects))]; +// #endif +// _endTime = diag_tickTime; diff --git a/addons/frag/functions/fnc_removeTrack.sqf b/addons/frag/functions/fnc_removeTrack.sqf index 39c2f24fc7..804719a7ca 100644 --- a/addons/frag/functions/fnc_removeTrack.sqf +++ b/addons/frag/functions/fnc_removeTrack.sqf @@ -1,14 +1,14 @@ -#include "script_component.hpp" - -private ["_ret"]; -_ret = true; -if(IS_ARRAY((_this select 0))) then { - _ret = false; -} else { - if((_this select 0) in GVAR(trackedObjects)) then { - GVAR(trackedObjects) = GVAR(trackedObjects) - [(_this select 0)]; - } else { - _ret = false; - }; -}; +#include "script_component.hpp" + +private ["_ret"]; +_ret = true; +if(IS_ARRAY((_this select 0))) then { + _ret = false; +} else { + if((_this select 0) in GVAR(trackedObjects)) then { + GVAR(trackedObjects) = GVAR(trackedObjects) - [(_this select 0)]; + } else { + _ret = false; + }; +}; _ret \ No newline at end of file diff --git a/addons/frag/functions/fnc_spallHP.sqf b/addons/frag/functions/fnc_spallHP.sqf index 2dadb1efa3..fb894be499 100644 --- a/addons/frag/functions/fnc_spallHP.sqf +++ b/addons/frag/functions/fnc_spallHP.sqf @@ -1,29 +1,29 @@ -#include "script_component.hpp" - -private ["_initialData", "_currentCount", "_hpData", "_round", "_hpRound"]; -//player sideChat format["f: %1 c: %2", (_this select 0), (count GVAR(spallHPData))]; -if((_this select 0) <= (count GVAR(spallHPData))) then { - _initialData = GVAR(spallHPData) select (_this select 0); - if(!isNil "_initialData") then { - _hpRound = ((_this select 1) select 0) select 2; - _round = _initialData select 3; - _hpDirect = ((_this select 1) select 0) select 10; - if(_hpDirect && {_round == _hpRound}) then { - - { - _hpData = _x; - _round = _initialData select 3; - // diag_log text format["HPDUMP-------------------------------------"]; - // { - // _hp = _x; - // diag_log text format["%1 --", _forEachIndex]; - // { - // diag_log text format["%1: %2", _forEachIndex, _x]; - // } forEach _hp; - // } forEach (_this select 1); - [DFUNC(doSpall), 0, [_this, _forEachIndex]] call cba_fnc_addPerFrameHandler; - // player sideChat "WEEE"; - } forEach (_this select 1); - }; - }; +#include "script_component.hpp" + +private ["_initialData", "_currentCount", "_hpData", "_round", "_hpRound"]; +//player sideChat format["f: %1 c: %2", (_this select 0), (count GVAR(spallHPData))]; +if((_this select 0) <= (count GVAR(spallHPData))) then { + _initialData = GVAR(spallHPData) select (_this select 0); + if(!isNil "_initialData") then { + _hpRound = ((_this select 1) select 0) select 2; + _round = _initialData select 3; + _hpDirect = ((_this select 1) select 0) select 10; + if(_hpDirect && {_round == _hpRound}) then { + + { + _hpData = _x; + _round = _initialData select 3; + // diag_log text format["HPDUMP-------------------------------------"]; + // { + // _hp = _x; + // diag_log text format["%1 --", _forEachIndex]; + // { + // diag_log text format["%1: %2", _forEachIndex, _x]; + // } forEach _hp; + // } forEach (_this select 1); + [DFUNC(doSpall), 0, [_this, _forEachIndex]] call cba_fnc_addPerFrameHandler; + // player sideChat "WEEE"; + } forEach (_this select 1); + }; + }; }; \ No newline at end of file diff --git a/addons/frag/functions/fnc_spallTrack.sqf b/addons/frag/functions/fnc_spallTrack.sqf index 4cc61d3961..a264e1ded9 100644 --- a/addons/frag/functions/fnc_spallTrack.sqf +++ b/addons/frag/functions/fnc_spallTrack.sqf @@ -1,40 +1,40 @@ -//fnc_spallTrack.sqf -#include "script_component.hpp" -private ["_params", "_round", "_multiplier", "_delta", "_curPos", "_velocity", "_velocityStep", "_forwardPos", "_intersectsWith", "_index", "_i", "_test", "_hpId", "_data"]; -// setAccTime 0; -_round = _this select 0; -_multiplier = _this select 1; -_foundObjects = _this select 2; -_foundObjectHPIds = _this select 3; - -_delta = (1/diag_fps)*_multiplier; -_curPos = getPosASL _round; -_velocity = velocity _round; - -_velocityStep = [ - (_velocity select 0)*_delta, - (_velocity select 1)*_delta, - (_velocity select 2)*_delta - ]; -_forwardPos = [ - (_curPos select 0) + (_velocityStep select 0), - (_curPos select 1) + (_velocityStep select 1), - (_curPos select 2) + (_velocityStep select 2) - ]; - -_intersectsWith = lineIntersectsWith [_curPos, _forwardPos]; - -if(count _intersectsWith > 0) then { - // player sideChat format["inter: %1", _intersectsWith]; - { - if(!(_x in _foundObjects)) then { - // diag_log text format["Adding HP: %1", _x]; - _index = (count GVAR(spallHPData)); - _hpId = _x addEventHandler ["hitPart", format["[%1, _this] call " + QUOTE(FUNC(spallHP)), _index]]; - _foundObjects set[(count _foundObjects), _x]; - _foundObjectHPIds set[(count _foundObjectHPIds), _hpId]; - _data = [_hpId, _x, typeOf _round, _round, _curPos, _velocity, 0, _foundObjects, _foundObjectHPIds]; - GVAR(spallHPData) set[_index, _data]; - }; - } forEach _intersectsWith; +//fnc_spallTrack.sqf +#include "script_component.hpp" +private ["_params", "_round", "_multiplier", "_delta", "_curPos", "_velocity", "_velocityStep", "_forwardPos", "_intersectsWith", "_index", "_i", "_test", "_hpId", "_data"]; +// setAccTime 0; +_round = _this select 0; +_multiplier = _this select 1; +_foundObjects = _this select 2; +_foundObjectHPIds = _this select 3; + +_delta = (1/diag_fps)*_multiplier; +_curPos = getPosASL _round; +_velocity = velocity _round; + +_velocityStep = [ + (_velocity select 0)*_delta, + (_velocity select 1)*_delta, + (_velocity select 2)*_delta + ]; +_forwardPos = [ + (_curPos select 0) + (_velocityStep select 0), + (_curPos select 1) + (_velocityStep select 1), + (_curPos select 2) + (_velocityStep select 2) + ]; + +_intersectsWith = lineIntersectsWith [_curPos, _forwardPos]; + +if(count _intersectsWith > 0) then { + // player sideChat format["inter: %1", _intersectsWith]; + { + if(!(_x in _foundObjects)) then { + // diag_log text format["Adding HP: %1", _x]; + _index = (count GVAR(spallHPData)); + _hpId = _x addEventHandler ["hitPart", format["[%1, _this] call " + QUOTE(FUNC(spallHP)), _index]]; + _foundObjects set[(count _foundObjects), _x]; + _foundObjectHPIds set[(count _foundObjectHPIds), _hpId]; + _data = [_hpId, _x, typeOf _round, _round, _curPos, _velocity, 0, _foundObjects, _foundObjectHPIds]; + GVAR(spallHPData) set[_index, _data]; + }; + } forEach _intersectsWith; }; \ No newline at end of file diff --git a/addons/frag/functions/fnc_startTracing.sqf b/addons/frag/functions/fnc_startTracing.sqf index 457fec8d57..4ed9240ed6 100644 --- a/addons/frag/functions/fnc_startTracing.sqf +++ b/addons/frag/functions/fnc_startTracing.sqf @@ -1,5 +1,5 @@ -#include "script_component.hpp" -if(!GVAR(tracesStarted)) then { - GVAR(tracesStarted) = true; - GVAR(traceID) = [FUNC(drawTraces), 0, []] call cba_fnc_addPerFrameHandler; +#include "script_component.hpp" +if(!GVAR(tracesStarted)) then { + GVAR(tracesStarted) = true; + GVAR(traceID) = [FUNC(drawTraces), 0, []] call cba_fnc_addPerFrameHandler; }; \ No newline at end of file diff --git a/addons/frag/functions/fnc_stopTracing.sqf b/addons/frag/functions/fnc_stopTracing.sqf index c7822aa8a0..56d7508d6b 100644 --- a/addons/frag/functions/fnc_stopTracing.sqf +++ b/addons/frag/functions/fnc_stopTracing.sqf @@ -1,5 +1,5 @@ -#include "script_component.hpp" -if(GVAR(tracesStarted)) then { - GVAR(tracesStarted) = false; - [GVAR(traceID)] call cba_fnc_removePerFrameHandler; +#include "script_component.hpp" +if(GVAR(tracesStarted)) then { + GVAR(tracesStarted) = false; + [GVAR(traceID)] call cba_fnc_removePerFrameHandler; }; \ No newline at end of file diff --git a/addons/frag/functions/fnc_trackFragRound.sqf b/addons/frag/functions/fnc_trackFragRound.sqf index 580994555b..586bbc0166 100644 --- a/addons/frag/functions/fnc_trackFragRound.sqf +++ b/addons/frag/functions/fnc_trackFragRound.sqf @@ -1,52 +1,52 @@ -//fnc_trackFragRound.sqf -#include "script_component.hpp" -private ["_params", "_round", "_lastPos", "_lastVel", "_type", "_time", "_doSpall", "_skip", "_explosive", "_indirectRange", "_force", "_fragPower"]; -_params = _this select 0; -_round = _params select 0; -_lastPos = _params select 1; -_lastVel = _params select 2; -_type = _params select 3; -_time = _params select 4; -_doSpall = _params select 6; -_spallTrack = _params select 7; -_foundObjectHPIds = _params select 8; - -if (!alive _round) then { - [_this select 1] call cba_fnc_removePerFrameHandler; - if(_time != time && {_round in GVAR(trackedObjects)} && {!(_round in GVAR(blackList))}) then { - GVAR(trackedObjects) = GVAR(trackedObjects) - [_round]; - _skip = getNumber (configFile >> "CfgAmmo" >> _type >> "ACE_FRAG_SKIP"); - if(_skip == 0) then { - _explosive = getNumber (configFile >> "CfgAmmo" >> _type >> "explosive"); - _indirectRange = getNumber (configFile >> "CfgAmmo" >> _type >> "indirectHitRange"); - _force = getNumber (configFile >> "CfgAmmo" >> _type >> "ACE_FRAG_FORCE"); - _fragPower = getNumber(configFile >> "CfgAmmo" >> _type >> "indirecthit")*(sqrt(_indirectRange)); - if((_explosive > 0.5 && {_indirectRange >= 4.5} && {_fragPower >= 35}) || {_force == 1} ) then { - [QGVAR(frag_eh), _params] call ace_common_fnc_serverEvent; - GVAR(trackedObjects) = GVAR(trackedObjects) - [_round]; - }; - }; - }; - if(_doSpall) then { - GVAR(spallIsTrackingCount) = GVAR(spallIsTrackingCount) - 1; - // diag_log text format["F: %1", _foundObjectHPIds]; - { - if(!isNil "_x") then { - _x removeEventHandler ["hitPart", _foundObjectHPIds select _forEachIndex]; - }; - } forEach _spallTrack; - }; -} else { - if(!(_round in GVAR(trackedObjects)) || {_round in GVAR(blackList)}) then { - [_this select 1] call cba_fnc_removePerFrameHandler; - if(_round in GVAR(blackList)) then { - GVAR(blackList) = GVAR(blackList) - [_round]; - }; - }; - - _params set[1, (getPosASL _round)]; - _params set[2, (velocity _round)]; - if(_doSpall) then { - [_round, 1, _spallTrack, _foundObjectHPIds] call FUNC(spallTrack); - }; -}; +//fnc_trackFragRound.sqf +#include "script_component.hpp" +private ["_params", "_round", "_lastPos", "_lastVel", "_type", "_time", "_doSpall", "_skip", "_explosive", "_indirectRange", "_force", "_fragPower"]; +_params = _this select 0; +_round = _params select 0; +_lastPos = _params select 1; +_lastVel = _params select 2; +_type = _params select 3; +_time = _params select 4; +_doSpall = _params select 6; +_spallTrack = _params select 7; +_foundObjectHPIds = _params select 8; + +if (!alive _round) then { + [_this select 1] call cba_fnc_removePerFrameHandler; + if(_time != time && {_round in GVAR(trackedObjects)} && {!(_round in GVAR(blackList))}) then { + GVAR(trackedObjects) = GVAR(trackedObjects) - [_round]; + _skip = getNumber (configFile >> "CfgAmmo" >> _type >> "ACE_FRAG_SKIP"); + if(_skip == 0) then { + _explosive = getNumber (configFile >> "CfgAmmo" >> _type >> "explosive"); + _indirectRange = getNumber (configFile >> "CfgAmmo" >> _type >> "indirectHitRange"); + _force = getNumber (configFile >> "CfgAmmo" >> _type >> "ACE_FRAG_FORCE"); + _fragPower = getNumber(configFile >> "CfgAmmo" >> _type >> "indirecthit")*(sqrt(_indirectRange)); + if((_explosive > 0.5 && {_indirectRange >= 4.5} && {_fragPower >= 35}) || {_force == 1} ) then { + [QGVAR(frag_eh), _params] call ace_common_fnc_serverEvent; + GVAR(trackedObjects) = GVAR(trackedObjects) - [_round]; + }; + }; + }; + if(_doSpall) then { + GVAR(spallIsTrackingCount) = GVAR(spallIsTrackingCount) - 1; + // diag_log text format["F: %1", _foundObjectHPIds]; + { + if(!isNil "_x") then { + _x removeEventHandler ["hitPart", _foundObjectHPIds select _forEachIndex]; + }; + } forEach _spallTrack; + }; +} else { + if(!(_round in GVAR(trackedObjects)) || {_round in GVAR(blackList)}) then { + [_this select 1] call cba_fnc_removePerFrameHandler; + if(_round in GVAR(blackList)) then { + GVAR(blackList) = GVAR(blackList) - [_round]; + }; + }; + + _params set[1, (getPosASL _round)]; + _params set[2, (velocity _round)]; + if(_doSpall) then { + [_round, 1, _spallTrack, _foundObjectHPIds] call FUNC(spallTrack); + }; +}; diff --git a/addons/frag/functions/fnc_trackTrace.sqf b/addons/frag/functions/fnc_trackTrace.sqf index f613426cf3..b0f3f06633 100644 --- a/addons/frag/functions/fnc_trackTrace.sqf +++ b/addons/frag/functions/fnc_trackTrace.sqf @@ -1,14 +1,14 @@ -#include "script_component.hpp" -_params = _this select 0; -_tracerObj = _params select 0; -_index = _params select 1; - -if(alive _tracerObj && (count GVAR(traces)) > 0) then { - _data = GVAR(traces) select _index; - _positions = _data select 4; - _objVel = velocity _tracerObj; - _objTVel = sqrt((_objVel select 0)^2 + (_objVel select 1)^2 + (_objVel select 2)^2); - _positions set[(count _positions), [(getPos _tracerObj), _objTVel]]; -} else { - [(_this select 1)] call cba_fnc_removePerFrameHandler; +#include "script_component.hpp" +_params = _this select 0; +_tracerObj = _params select 0; +_index = _params select 1; + +if(alive _tracerObj && (count GVAR(traces)) > 0) then { + _data = GVAR(traces) select _index; + _positions = _data select 4; + _objVel = velocity _tracerObj; + _objTVel = sqrt((_objVel select 0)^2 + (_objVel select 1)^2 + (_objVel select 2)^2); + _positions set[(count _positions), [(getPos _tracerObj), _objTVel]]; +} else { + [(_this select 1)] call cba_fnc_removePerFrameHandler; }; \ No newline at end of file diff --git a/addons/frag/functions/fnc_vectorDiffFast.sqf b/addons/frag/functions/fnc_vectorDiffFast.sqf index 39217d7b20..0a41860727 100644 --- a/addons/frag/functions/fnc_vectorDiffFast.sqf +++ b/addons/frag/functions/fnc_vectorDiffFast.sqf @@ -1,15 +1,15 @@ -#include "script_component.hpp" -private["_p1","_p2","_return"]; - -_p1 = _this select 0; -_p2 = _this select 1; - -if ((count _p1) != (count _p2)) then {textLogFormat ["BIS_FNC Error: vectors not of same size"]}; - -_return = []; - -{ - _return set[_forEachIndex, (_p2 select _forEachIndex) - _x]; -} forEach _p1; - -_return +#include "script_component.hpp" +private["_p1","_p2","_return"]; + +_p1 = _this select 0; +_p2 = _this select 1; + +if ((count _p1) != (count _p2)) then {textLogFormat ["BIS_FNC Error: vectors not of same size"]}; + +_return = []; + +{ + _return set[_forEachIndex, (_p2 select _forEachIndex) - _x]; +} forEach _p1; + +_return diff --git a/addons/frag/script_component.hpp b/addons/frag/script_component.hpp index 00df542b65..3740ed23fa 100644 --- a/addons/frag/script_component.hpp +++ b/addons/frag/script_component.hpp @@ -1,16 +1,16 @@ -#define COMPONENT frag -#include "\z\ace\Addons\main\script_mod.hpp" - -//#define DEBUG_ENABLED_FRAG - -#ifdef DEBUG_ENABLED_FRAG - #define DEBUG_MODE_FULL -#endif - -#ifdef DEBUG_SETTINGS_FRAG - #define DEBUG_SETTINGS DEBUG_SETTINGS_FRAG -#endif - -#include "\z\ace\Addons\main\script_macros.hpp" - +#define COMPONENT frag +#include "\z\ace\Addons\main\script_mod.hpp" + +//#define DEBUG_ENABLED_FRAG + +#ifdef DEBUG_ENABLED_FRAG + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_FRAG + #define DEBUG_SETTINGS DEBUG_SETTINGS_FRAG +#endif + +#include "\z\ace\Addons\main\script_macros.hpp" + #define ACE_TRACE_DRAW_INC 1 \ No newline at end of file diff --git a/addons/frag/stringtable.xml b/addons/frag/stringtable.xml index 7c3112ec2d..4ae3979667 100644 --- a/addons/frag/stringtable.xml +++ b/addons/frag/stringtable.xml @@ -1,15 +1,15 @@ - - - - - - - Disable Fragmentation - Zakázat fragmentaci granátů - Weapons: Keine Schrapnelle - Wyłącz głowice fragmentacyjne - Выключить разлёт осколков - - - + + + + + + + Disable Fragmentation + Zakázat fragmentaci granátů + Weapons: Keine Schrapnelle + Wyłącz głowice fragmentacyjne + Выключить разлёт осколков + + + \ No newline at end of file diff --git a/addons/goggles/stringtable.xml b/addons/goggles/stringtable.xml index 9b2e6fba12..1756442176 100644 --- a/addons/goggles/stringtable.xml +++ b/addons/goggles/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -8,7 +8,7 @@ Mostrar efectos de las gafas en tercera persona Zobrazit účinky brýlí v třetí osobě Effets de lunettes à la 3ème personne - Отображать эффект очков от третьего лица + Отображать эффект очков в третьем лице Szemüveg effekt mutatása külső nézetből Włącz efekty gogli w trzeciej osobie Mostrar efeitos de óculos em Terceira Pessoa @@ -27,4 +27,4 @@ Pulisci gli occhiali - \ No newline at end of file + diff --git a/addons/grenades/stringtable.xml b/addons/grenades/stringtable.xml index 803aa0a220..1129d44271 100644 --- a/addons/grenades/stringtable.xml +++ b/addons/grenades/stringtable.xml @@ -1,5 +1,5 @@ - - + + @@ -93,7 +93,7 @@ Les grenades incapacitantes servent à désorienter ou distraire une menace pendant quelques secondes. Granat ogłusza, nie zabijając przeciwnika. Detonacja daje efekt oślepiającego błysku i głośnego huku. Omračující granát je taktická nesmrtící zbraň používaná při záchraně rukojmí a zvládání davu. - XM84 (M84) - граната нелетального действия, и предназначена для отвлечения и временного вывода из строя, либо дезориентации противника. Основное использование нашла при освобождении заложников, захвате преступников и террористов, а также проведении диверсионных миссий. + Граната XM84 (M84) - не летального действия, и предназначена для отвлечения и временного вывода из строя, либо дезориентации противника. Основное использование нашла при освобождении заложников, захвате преступников и террористов, а также проведении диверсионных миссий. Eldobás után felrobban és éles hang, valamint fényhatással zavarja össze a környezetében tartózkodókat. Anche conosciuta come flashbang. Causa accecamento immediato, sensazioni di sposatezza, mancanza d'equilibrio e disturbi al timpano. Um tipo de granada não-letal destinado a confundir, desorientar e distrair uma potencial ameaça. @@ -243,4 +243,4 @@ M127A1 (Amarilla) - \ No newline at end of file + diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index ba4d17e112..f042128301 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -102,7 +102,6 @@ Disable ear ringing Desactivar zumbido de oídos Knalltrauma deaktivieren - Отключить эффект баротравмы \ No newline at end of file diff --git a/addons/interact_menu/XEH_clientInit.sqf b/addons/interact_menu/XEH_clientInit.sqf index 590ad6624d..bcb2d5aa8e 100644 --- a/addons/interact_menu/XEH_clientInit.sqf +++ b/addons/interact_menu/XEH_clientInit.sqf @@ -1,52 +1,52 @@ -//XEH_clientInit.sqf -#include "script_component.hpp" - -if (!hasInterface) exitWith {}; - -// Install the render EH on the main display -addMissionEventHandler ["Draw3D", DFUNC(render)]; - -// This spawn is probably worth keeping, as pfh don't work natively on the briefing screen and IDK how reliable the hack we implemented for them is. -// The thread dies as soon as the mission start, so it's not really compiting for scheduler space. -[] spawn { - // Wait until the map display is detected - waitUntil {(!isNull findDisplay 12)}; - - // Install the render EH on the map screen - ((findDisplay 12) displayCtrl 51) ctrlAddEventHandler ["Draw", DFUNC(render)]; -}; - - -["ACE3", QGVAR(InteractKey), (localize "STR_ACE_Interact_Menu_InteractKey"), -{ - // Conditions: canInteract - if !([ACE_player, objNull, ["isNotInside","isNotDragging", "isNotCarrying", "isNotSwimming", "notOnMap", "isNotEscorting", "isNotSurrendering"]] call EFUNC(common,canInteractWith)) exitWith {false}; - // Statement - [0] call FUNC(keyDown) -}, -{[0] call FUNC(keyUp)}, -[219, [false, false, false]], false] call cba_fnc_addKeybind; //Left Windows Key - -["ACE3", QGVAR(SelfInteractKey), (localize "STR_ACE_Interact_Menu_SelfInteractKey"), -{ - // Conditions: canInteract - if !([ACE_player, objNull, ["isNotInside","isNotDragging", "isNotCarrying", "isNotSwimming", "notOnMap", "isNotEscorting", "isNotSurrendering"]] call EFUNC(common,canInteractWith)) exitWith {false}; - // Statement - [1] call FUNC(keyDown) -}, -{[1] call FUNC(keyUp)}, -[219, [false, true, false]], false] call cba_fnc_addKeybind; //Left Windows Key + Ctrl/Strg - - -// Listens for the falling unconscious event, just in case the menu needs to be closed -["medical_onUnconscious", { - // If no menu is open just quit - if (GVAR(openedMenuType) < 0) exitWith {}; - - EXPLODE_2_PVT(_this,_unit,_isUnconscious); - - if (_unit != ACE_player || !_isUnconscious) exitWith {}; - - GVAR(actionSelected) = false; - [] call FUNC(keyUp); -}] call EFUNC(common,addEventhandler); +//XEH_clientInit.sqf +#include "script_component.hpp" + +if (!hasInterface) exitWith {}; + +// Install the render EH on the main display +addMissionEventHandler ["Draw3D", DFUNC(render)]; + +// This spawn is probably worth keeping, as pfh don't work natively on the briefing screen and IDK how reliable the hack we implemented for them is. +// The thread dies as soon as the mission start, so it's not really compiting for scheduler space. +[] spawn { + // Wait until the map display is detected + waitUntil {(!isNull findDisplay 12)}; + + // Install the render EH on the map screen + ((findDisplay 12) displayCtrl 51) ctrlAddEventHandler ["Draw", DFUNC(render)]; +}; + + +["ACE3", QGVAR(InteractKey), (localize "STR_ACE_Interact_Menu_InteractKey"), +{ + // Conditions: canInteract + if !([ACE_player, objNull, ["isNotInside","isNotDragging", "isNotCarrying", "isNotSwimming", "notOnMap", "isNotEscorting", "isNotSurrendering"]] call EFUNC(common,canInteractWith)) exitWith {false}; + // Statement + [0] call FUNC(keyDown) +}, +{[0] call FUNC(keyUp)}, +[219, [false, false, false]], false] call cba_fnc_addKeybind; //Left Windows Key + +["ACE3", QGVAR(SelfInteractKey), (localize "STR_ACE_Interact_Menu_SelfInteractKey"), +{ + // Conditions: canInteract + if !([ACE_player, objNull, ["isNotInside","isNotDragging", "isNotCarrying", "isNotSwimming", "notOnMap", "isNotEscorting", "isNotSurrendering"]] call EFUNC(common,canInteractWith)) exitWith {false}; + // Statement + [1] call FUNC(keyDown) +}, +{[1] call FUNC(keyUp)}, +[219, [false, true, false]], false] call cba_fnc_addKeybind; //Left Windows Key + Ctrl/Strg + + +// Listens for the falling unconscious event, just in case the menu needs to be closed +["medical_onUnconscious", { + // If no menu is open just quit + if (GVAR(openedMenuType) < 0) exitWith {}; + + EXPLODE_2_PVT(_this,_unit,_isUnconscious); + + if (_unit != ACE_player || !_isUnconscious) exitWith {}; + + GVAR(actionSelected) = false; + [] call FUNC(keyUp); +}] call EFUNC(common,addEventhandler); diff --git a/addons/interact_menu/stringtable.xml b/addons/interact_menu/stringtable.xml index bbb17efd87..b3de5efddf 100644 --- a/addons/interact_menu/stringtable.xml +++ b/addons/interact_menu/stringtable.xml @@ -1,31 +1,26 @@  - + Always display cursor for self interaction Immer den Cursor für Selbst-Interaktionen anzeigen. - Всегда показывать курсор для взаимодействия с собой Interact Key Interaktionstaste - Клавиша взаимодействия Self Interaction Key Selbst-Interaktionstaste - Клавиша взаимодействия (с собой) Self Actions Selbst-Interaktion - Действия с собой Vehicle Actions Fahrzeug-Interaktion - Действия на транспорте \ No newline at end of file diff --git a/addons/interaction/stringtable.xml b/addons/interaction/stringtable.xml index 8016079b90..e85d0d3b47 100644 --- a/addons/interaction/stringtable.xml +++ b/addons/interaction/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -616,7 +616,7 @@ Modyfikator Modifier la touche Tecla modificadora - Клавиша-модификатор + клавиша-модификатор Tecla Modificadora Modifica Tasto Módosító billentyű @@ -664,7 +664,6 @@ Passengers Passagiere - Пассажиры \ No newline at end of file diff --git a/addons/inventory/stringtable.xml b/addons/inventory/stringtable.xml index 75f15e3720..f93e0d9627 100644 --- a/addons/inventory/stringtable.xml +++ b/addons/inventory/stringtable.xml @@ -1,16 +1,14 @@  - + Make Inventory Display Bigger Die Anzeige des Inventar vergrößern. - Сделать окно инвентаря больше Normally inventory display is scaled by UI size. This allows scaling the Inventory UI size up, but doesn't increase font size allowing more rows displayed. Normalerweise wird die Größe des Inventars mit der Größe der UI skaliert. Diese Einstellung allerdings vergrößert das Inventar bei gleichbleibender Schriftgröße, so dass mehr Einträge angzeigt werden können. - Обычно, окно инвентаря зависит от размеров пользовательского интерфейса. Эта настройка позволяет увеличить размер окна инвентаря в пользовательском интерфейсе, не увеличивая размера шрифтов, так что отображется большее количество строк. \ No newline at end of file diff --git a/addons/kestrel/stringtable.xml b/addons/kestrel/stringtable.xml index baae118891..5f54fd6489 100644 --- a/addons/kestrel/stringtable.xml +++ b/addons/kestrel/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -34,7 +34,7 @@ Monitoraggio Balistico Attivo Applied Ballistics Meter Medidor Balístico Ativo - Метеостанция + метеостанция Open Kestrel diff --git a/addons/laser/CfgEventhandlers.hpp b/addons/laser/CfgEventhandlers.hpp index e2039a80c7..bad89fd048 100644 --- a/addons/laser/CfgEventhandlers.hpp +++ b/addons/laser/CfgEventhandlers.hpp @@ -1,11 +1,11 @@ -class Extended_PreInit_EventHandlers { - class ADDON { - init = QUOTE(call COMPILE_FILE(XEH_pre_init)); - }; -}; - -class Extended_PostInit_EventHandlers { - class ADDON { - init = QUOTE(call COMPILE_FILE(XEH_post_init)); - }; -}; +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_pre_init)); + }; +}; + +class Extended_PostInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_post_init)); + }; +}; diff --git a/addons/laser/CfgVehicles.hpp b/addons/laser/CfgVehicles.hpp index 15b4a50567..07b8055f0e 100644 --- a/addons/laser/CfgVehicles.hpp +++ b/addons/laser/CfgVehicles.hpp @@ -1,9 +1,9 @@ -class CfgVehicles { - class All; - - class LaserTarget: All { - class EventHandlers { - init = QUOTE(_this call FUNC(laser_init)); - }; - }; +class CfgVehicles { + class All; + + class LaserTarget: All { + class EventHandlers { + init = QUOTE(_this call FUNC(laser_init)); + }; + }; }; \ No newline at end of file diff --git a/addons/laser/XEH_post_init.sqf b/addons/laser/XEH_post_init.sqf index a4e4806591..6904ee6c47 100644 --- a/addons/laser/XEH_post_init.sqf +++ b/addons/laser/XEH_post_init.sqf @@ -1,3 +1,3 @@ -#include "script_component.hpp" -NO_DEDICATED; - +#include "script_component.hpp" +NO_DEDICATED; + diff --git a/addons/laser/XEH_pre_init.sqf b/addons/laser/XEH_pre_init.sqf index 984bf720d8..8b39c429b6 100644 --- a/addons/laser/XEH_pre_init.sqf +++ b/addons/laser/XEH_pre_init.sqf @@ -1,26 +1,26 @@ -#include "script_component.hpp" - -PREP(rotateVectLineGetMap); -PREP(rotateVectLine); -PREP(shootRay); -PREP(shootCone); -PREP(checkLos); - -PREP(findLaserDesignator); -PREP(findStrongestRay); - -PREP(translateToModelSpace); -PREP(translateToWeaponSpace); - -PREP(laser_init); - -GVAR(laser) = nil; // a single hud draws 1 laser at a time - -PREP(laserTargetPFH); - -ACE_LASERS = []; - -ACE_DEFAULT_LASER_CODE = 1000; -ACE_DEFAULT_FIRE_SELECTION = [FIREMODE_DIRECT_LOAL, ACE_DEFAULT_LASER_CODE]; - +#include "script_component.hpp" + +PREP(rotateVectLineGetMap); +PREP(rotateVectLine); +PREP(shootRay); +PREP(shootCone); +PREP(checkLos); + +PREP(findLaserDesignator); +PREP(findStrongestRay); + +PREP(translateToModelSpace); +PREP(translateToWeaponSpace); + +PREP(laser_init); + +GVAR(laser) = nil; // a single hud draws 1 laser at a time + +PREP(laserTargetPFH); + +ACE_LASERS = []; + +ACE_DEFAULT_LASER_CODE = 1000; +ACE_DEFAULT_FIRE_SELECTION = [FIREMODE_DIRECT_LOAL, ACE_DEFAULT_LASER_CODE]; + FUNC(getPosASL) = {visiblePositionASL (_this select 0)}; \ No newline at end of file diff --git a/addons/laser/config.cpp b/addons/laser/config.cpp index f257a35321..4b209b866e 100644 --- a/addons/laser/config.cpp +++ b/addons/laser/config.cpp @@ -1,14 +1,14 @@ -#include "script_component.hpp" - -class CfgPatches { - class ADDON { - units[] = {}; - weapons[] = {}; - requiredVersion = REQUIRED_VERSION; - requiredAddons[] = { "ace_common" }; - VERSION_CONFIG; - }; -}; - -#include "CfgEventhandlers.hpp" +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = { "ace_common" }; + VERSION_CONFIG; + }; +}; + +#include "CfgEventhandlers.hpp" #include "CfgVehicles.hpp" \ No newline at end of file diff --git a/addons/laser/functions/fnc_checkLos.sqf b/addons/laser/functions/fnc_checkLos.sqf index 0cbeffaea2..9888642a80 100644 --- a/addons/laser/functions/fnc_checkLos.sqf +++ b/addons/laser/functions/fnc_checkLos.sqf @@ -1,31 +1,31 @@ -#include "script_component.hpp" - -private ["_pos1", "_pos2", "_spacing", "_vectorTo", "_x", "_y", "_z", "_distance", "_count", "_return", "_alt", "_pos", "_designator", "_seeker"]; -_pos1 = _this select 0; -_pos2 = _this select 1; -_designator = _this select 2; -_seeker = _this select 3; -_spacing = 100; -if((count _this) > 4) then { - _spacing = _this select 4; -}; - -_return = true; -_vectorTo = [_pos2, _pos1] call BIS_fnc_vectorFromXToY; - -_x = (_vectorTo select 0)*0.25; -_y = (_vectorTo select 1)*0.25; -_z = (_vectorTo select 2)*0.25; - -_pos2 = [(_pos2 select 0) + _x, (_pos2 select 1) + _y, (_pos2 select 2) + _z]; - -// player sideChat format["new los check"]; -if(terrainIntersect [_pos2, _pos1]) then { - _return = false; -} else { - if(lineIntersects [_pos2, _pos1]) then { // should take as arguments and add to this command objects to exclude - target and observer - // player sideChat format["with: %1", lineIntersectsWith [_pos1, _pos2]]; - _return = false; - }; -}; +#include "script_component.hpp" + +private ["_pos1", "_pos2", "_spacing", "_vectorTo", "_x", "_y", "_z", "_distance", "_count", "_return", "_alt", "_pos", "_designator", "_seeker"]; +_pos1 = _this select 0; +_pos2 = _this select 1; +_designator = _this select 2; +_seeker = _this select 3; +_spacing = 100; +if((count _this) > 4) then { + _spacing = _this select 4; +}; + +_return = true; +_vectorTo = [_pos2, _pos1] call BIS_fnc_vectorFromXToY; + +_x = (_vectorTo select 0)*0.25; +_y = (_vectorTo select 1)*0.25; +_z = (_vectorTo select 2)*0.25; + +_pos2 = [(_pos2 select 0) + _x, (_pos2 select 1) + _y, (_pos2 select 2) + _z]; + +// player sideChat format["new los check"]; +if(terrainIntersect [_pos2, _pos1]) then { + _return = false; +} else { + if(lineIntersects [_pos2, _pos1]) then { // should take as arguments and add to this command objects to exclude - target and observer + // player sideChat format["with: %1", lineIntersectsWith [_pos1, _pos2]]; + _return = false; + }; +}; _return; \ No newline at end of file diff --git a/addons/laser/functions/fnc_findLaserDesignator.sqf b/addons/laser/functions/fnc_findLaserDesignator.sqf index 997900c8dd..d10e221501 100644 --- a/addons/laser/functions/fnc_findLaserDesignator.sqf +++ b/addons/laser/functions/fnc_findLaserDesignator.sqf @@ -1,70 +1,70 @@ -#include "script_component.hpp" - -private ["_missile", "_headingPitch", "_found", "_vectorTo", "_polarTo", "_dir", "_vertOk", "_horzOk", "_fov", - "_closestDistance", "_pos1", "_pos2", "_disCheck", "_currentTarget", "_potentialTargets", "_offset", "_vector"]; -_missile = _this select 0; -_laserCode = _this select 1; -_fov = if (count _this > 2) then {_this select 2} else {75}; -_vector = if (count _this > 3) then {_this select 3} else {vectorDir _missile}; -_offset = if (count _this > 4) then {_this select 4} else {[0,0,0]}; - -_headingPitch = _vector call CBA_fnc_vect2polar; -_currentTarget = nil; -_found = false; - -LOG("Searching lasers"); -if(!(isNil "ACE_LASERS")) then { - _potentialTargets = []; - TRACE_1("", ACE_LASERS); - - { - if(!(isNull _x)) then { - _sensorPos = ATLtoASL(_missile modelToWorldVisual _offset); - _vectorTo = [_sensorPos, ([_x] call FUNC(getPosASL))] call BIS_fnc_vectorFromXToY; - _polarTo = _vectorTo call CBA_fnc_vect2polar; - _dir = _polarTo select 1; - _dir = _dir - (_headingPitch select 1); - - TRACE_4("Calc", _sensorPos, _vectorTo, _polarTo, _dir); - - if (_dir < 0) then {_dir = _dir + 360}; - if (_dir > 360) then {_dir = _dir - 360}; - _vertOk = false; - _horzOk = false; - if(_dir < _fov || {_dir > (360-_fov)}) then { - _horzOk = true; - }; - if(abs((abs(_polarTo select 2))-(abs(_headingPitch select 2))) < _fov) then { - _vertOk = true; - }; - - TRACE_2("Results", _vertOk, _horzOk); - - if(_vertOk && {_horzOk}) then { - // Does the laser currently have our current code, if we have one? - _targetCode = _x getVariable ["ACE_LASERTARGET_CODE", ACE_DEFAULT_LASER_CODE]; - TRACE_1("Target in sight, checking code", _targetCode, _laserCode); - if(_targetCode == _laserCode) then { - _potentialTargets set[(count _potentialTargets), _x]; - }; - }; - }; - - } forEach ACE_LASERS; - - TRACE_1("", _potentialTargets); - - _closestDistance = 100000; - { - _pos1 = (getPosASL _missile); - _pos2 = ([_x] call FUNC(getPosASL)); - _disCheck = _pos1 distance _pos2; - // shouldn't this bail out when a valid target is found instead of iterating over all potential targets ? - if(_disCheck < _closestDistance && {[_pos1, _pos2, _x, _missile] call FUNC(checkLos)}) then { - _found = true; - _currentTarget = _x; - _closestDistance = _disCheck; - }; - } forEach _potentialTargets; -}; +#include "script_component.hpp" + +private ["_missile", "_headingPitch", "_found", "_vectorTo", "_polarTo", "_dir", "_vertOk", "_horzOk", "_fov", + "_closestDistance", "_pos1", "_pos2", "_disCheck", "_currentTarget", "_potentialTargets", "_offset", "_vector"]; +_missile = _this select 0; +_laserCode = _this select 1; +_fov = if (count _this > 2) then {_this select 2} else {75}; +_vector = if (count _this > 3) then {_this select 3} else {vectorDir _missile}; +_offset = if (count _this > 4) then {_this select 4} else {[0,0,0]}; + +_headingPitch = _vector call CBA_fnc_vect2polar; +_currentTarget = nil; +_found = false; + +LOG("Searching lasers"); +if(!(isNil "ACE_LASERS")) then { + _potentialTargets = []; + TRACE_1("", ACE_LASERS); + + { + if(!(isNull _x)) then { + _sensorPos = ATLtoASL(_missile modelToWorldVisual _offset); + _vectorTo = [_sensorPos, ([_x] call FUNC(getPosASL))] call BIS_fnc_vectorFromXToY; + _polarTo = _vectorTo call CBA_fnc_vect2polar; + _dir = _polarTo select 1; + _dir = _dir - (_headingPitch select 1); + + TRACE_4("Calc", _sensorPos, _vectorTo, _polarTo, _dir); + + if (_dir < 0) then {_dir = _dir + 360}; + if (_dir > 360) then {_dir = _dir - 360}; + _vertOk = false; + _horzOk = false; + if(_dir < _fov || {_dir > (360-_fov)}) then { + _horzOk = true; + }; + if(abs((abs(_polarTo select 2))-(abs(_headingPitch select 2))) < _fov) then { + _vertOk = true; + }; + + TRACE_2("Results", _vertOk, _horzOk); + + if(_vertOk && {_horzOk}) then { + // Does the laser currently have our current code, if we have one? + _targetCode = _x getVariable ["ACE_LASERTARGET_CODE", ACE_DEFAULT_LASER_CODE]; + TRACE_1("Target in sight, checking code", _targetCode, _laserCode); + if(_targetCode == _laserCode) then { + _potentialTargets set[(count _potentialTargets), _x]; + }; + }; + }; + + } forEach ACE_LASERS; + + TRACE_1("", _potentialTargets); + + _closestDistance = 100000; + { + _pos1 = (getPosASL _missile); + _pos2 = ([_x] call FUNC(getPosASL)); + _disCheck = _pos1 distance _pos2; + // shouldn't this bail out when a valid target is found instead of iterating over all potential targets ? + if(_disCheck < _closestDistance && {[_pos1, _pos2, _x, _missile] call FUNC(checkLos)}) then { + _found = true; + _currentTarget = _x; + _closestDistance = _disCheck; + }; + } forEach _potentialTargets; +}; [_found, _currentTarget] \ No newline at end of file diff --git a/addons/laser/functions/fnc_findStrongestRay.sqf b/addons/laser/functions/fnc_findStrongestRay.sqf index ca9be7cab8..e4238361cb 100644 --- a/addons/laser/functions/fnc_findStrongestRay.sqf +++ b/addons/laser/functions/fnc_findStrongestRay.sqf @@ -1,49 +1,49 @@ -#include "script_component.hpp" - -_list = _this select 0; -_checkPos = _this select 1; -_spots = []; -_outliers = []; -_spot = []; -_testPos = (_list select 0) select 0; -{ - _samplePos = _x select 0; - if(!lineIntersects [_samplePos, _checkPos] && {!terrainIntersectASL [_samplePos, _checkPos]}) then { - if(_samplePos distance _testPos < 2) then { - _spot pushBack _samplePos; - } else { - _outliers pushBack _samplePos; - }; - }; -} forEach _list; -_spots pushBack _spot; - -if(count _outliers > 0) then { - for "_i" from 1 to 3 do { - _remainingSpots = _outliers; - _outliers = []; - _spot = []; - _testPos = (_remainingSpots select 0); - { - _samplePos = _x; - if(!lineIntersects [_samplePos, _checkPos] && {!terrainIntersectASL [_samplePos, _checkPos]}) then { - if(_samplePos distance _testPos < 2) then { - _spot pushBack _samplePos; - } else { - _outliers pushBack _samplePos; - }; - }; - } forEach _remainingSpots; - _spots pushBack _spot; - }; -}; -_largest = 0; -_largestSpot = []; -{ - if((count _x) > _largest) then { - _largest = (count _x); - _largestSpot = _x; - }; -} forEach _spots; -// player sideChat format["g: %1", _spots]; +#include "script_component.hpp" + +_list = _this select 0; +_checkPos = _this select 1; +_spots = []; +_outliers = []; +_spot = []; +_testPos = (_list select 0) select 0; +{ + _samplePos = _x select 0; + if(!lineIntersects [_samplePos, _checkPos] && {!terrainIntersectASL [_samplePos, _checkPos]}) then { + if(_samplePos distance _testPos < 2) then { + _spot pushBack _samplePos; + } else { + _outliers pushBack _samplePos; + }; + }; +} forEach _list; +_spots pushBack _spot; + +if(count _outliers > 0) then { + for "_i" from 1 to 3 do { + _remainingSpots = _outliers; + _outliers = []; + _spot = []; + _testPos = (_remainingSpots select 0); + { + _samplePos = _x; + if(!lineIntersects [_samplePos, _checkPos] && {!terrainIntersectASL [_samplePos, _checkPos]}) then { + if(_samplePos distance _testPos < 2) then { + _spot pushBack _samplePos; + } else { + _outliers pushBack _samplePos; + }; + }; + } forEach _remainingSpots; + _spots pushBack _spot; + }; +}; +_largest = 0; +_largestSpot = []; +{ + if((count _x) > _largest) then { + _largest = (count _x); + _largestSpot = _x; + }; +} forEach _spots; +// player sideChat format["g: %1", _spots]; _largestSpot select (random (floor(count _largestSpot))); \ No newline at end of file diff --git a/addons/laser/functions/fnc_laserTargetPFH.sqf b/addons/laser/functions/fnc_laserTargetPFH.sqf index 448edc3128..bdab413685 100644 --- a/addons/laser/functions/fnc_laserTargetPFH.sqf +++ b/addons/laser/functions/fnc_laserTargetPFH.sqf @@ -1,26 +1,26 @@ -#include "script_component.hpp" - -private["_args", "_laserTarget"]; -//TRACE_1("enter", _this); -_args = _this select 0; -_laserTarget = _args select 0; - -if(isNull _laserTarget || !alive player) exitWith { - [(_this select 1)] call cba_fnc_removePerFrameHandler; - REM(ACE_LASERS, _laserTarget); -}; - -_end = diag_tickTime; - -#ifdef DEBUG_MODE_FULL -// Iconize the location of the actual laserTarget -_pos = [_laserTarget] call FUNC(getPosASL); -drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\select_target_ca.paa", [1,0,0,1], (ASLtoATL _pos), 0.75, 0.75, 0, "", 0.5, 0.025, "TahomaB"]; - -{ - drawLine3D [ASLtoATL (_x select 0), ASLtoATL (_x select 1), (_x select 2)]; - drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", (_x select 2), ASLtoATL (_x select 1), 0.75, 0.75, 0, "", 0.5, 0.025, "TahomaB"]; -} forEach DRAW_LINES; -DRAW_LINES = []; -#endif - +#include "script_component.hpp" + +private["_args", "_laserTarget"]; +//TRACE_1("enter", _this); +_args = _this select 0; +_laserTarget = _args select 0; + +if(isNull _laserTarget || !alive player) exitWith { + [(_this select 1)] call cba_fnc_removePerFrameHandler; + REM(ACE_LASERS, _laserTarget); +}; + +_end = diag_tickTime; + +#ifdef DEBUG_MODE_FULL +// Iconize the location of the actual laserTarget +_pos = [_laserTarget] call FUNC(getPosASL); +drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\select_target_ca.paa", [1,0,0,1], (ASLtoATL _pos), 0.75, 0.75, 0, "", 0.5, 0.025, "TahomaB"]; + +{ + drawLine3D [ASLtoATL (_x select 0), ASLtoATL (_x select 1), (_x select 2)]; + drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", (_x select 2), ASLtoATL (_x select 1), 0.75, 0.75, 0, "", 0.5, 0.025, "TahomaB"]; +} forEach DRAW_LINES; +DRAW_LINES = []; +#endif + diff --git a/addons/laser/functions/fnc_laser_init.sqf b/addons/laser/functions/fnc_laser_init.sqf index 6ae0c9467e..9fcb439032 100644 --- a/addons/laser/functions/fnc_laser_init.sqf +++ b/addons/laser/functions/fnc_laser_init.sqf @@ -1,25 +1,25 @@ -#include "script_component.hpp" -PARAMS_1(_laserTarget); - -TRACE_1("enter", _this); - -// Add the target to the global targets array -// Everyone tracks them - -// Add the laser localized to the laser array, and give it the default localized code -PUSH(ACE_LASERS, _laserTarget); -// Check the vehicle, otherwise use the default -_laserTarget setVariable ["ACE_LASERTARGET_CODE", ACE_DEFAULT_LASER_CODE, false]; -// Clean the lasers of any null objects while we are here -REM(ACE_LASERS, objNull); - -if(!(local _laserTarget)) exitWith { }; -// The target is local, so its on this client -if(!isDedicated) then { - _laserTarget setVariable ["ACE_LASERTARGET_SHOOTER", player, true]; - - [FUNC(laserTargetPFH), 0, [_laserTarget, player]] call cba_fnc_addPerFrameHandler; -} else { - // server side ownership of laser - //_laserTarget setVariable ["ACE_LASERTARGET_SHOOTER", nil, false]; -}; +#include "script_component.hpp" +PARAMS_1(_laserTarget); + +TRACE_1("enter", _this); + +// Add the target to the global targets array +// Everyone tracks them + +// Add the laser localized to the laser array, and give it the default localized code +PUSH(ACE_LASERS, _laserTarget); +// Check the vehicle, otherwise use the default +_laserTarget setVariable ["ACE_LASERTARGET_CODE", ACE_DEFAULT_LASER_CODE, false]; +// Clean the lasers of any null objects while we are here +REM(ACE_LASERS, objNull); + +if(!(local _laserTarget)) exitWith { }; +// The target is local, so its on this client +if(!isDedicated) then { + _laserTarget setVariable ["ACE_LASERTARGET_SHOOTER", player, true]; + + [FUNC(laserTargetPFH), 0, [_laserTarget, player]] call cba_fnc_addPerFrameHandler; +} else { + // server side ownership of laser + //_laserTarget setVariable ["ACE_LASERTARGET_SHOOTER", nil, false]; +}; diff --git a/addons/laser/functions/fnc_rotateVectLine.sqf b/addons/laser/functions/fnc_rotateVectLine.sqf index ae476559b8..b0360cc330 100644 --- a/addons/laser/functions/fnc_rotateVectLine.sqf +++ b/addons/laser/functions/fnc_rotateVectLine.sqf @@ -1,38 +1,38 @@ -#include "script_component.hpp" - -_map = _this select 0; -_theta = _this select 1; - -_p = _map select 0; -_p1 = _map select 1; -_p2 = _map select 2; - -_q1 = +(_map select 3); -_q2 = +(_map select 4); -_u = _map select 5; -_d = _map select 6; - -/* Step 4 */ -_q2 set[0, (_q1 select 0) * cos(_theta) - (_q1 select 1) * sin(_theta)]; -_q2 set[1, (_q1 select 0) * sin(_theta) + (_q1 select 1) * cos(_theta)]; -_q2 set[2, (_q1 select 2)]; - -/* Inverse of step 3 */ -_q1 set[0, (_q2 select 0) * _d + (_q2 select 2) * (_u select 0)]; -_q1 set[1, (_q2 select 1)]; -_q1 set[2, - (_q2 select 0) * (_u select 0) + (_q2 select 2) * _d]; - -/* Inverse of step 2 */ -if (_d != 0) then { - _q2 set[0, (_q1 select 0)]; - _q2 set[1, (_q1 select 1) * (_u select 2) / _d + (_q1 select 2) * (_u select 1) / _d]; - _q2 set[2, - (_q1 select 1) * (_u select 1) / _d + (_q1 select 2) * (_u select 2) / _d]; -} else { - _q2 = _q1; -}; - -/* Inverse of step 1 */ -_q1 set[0, (_q2 select 0) + (_p1 select 0)]; -_q1 set[1, (_q2 select 1) + (_p1 select 1)]; -_q1 set[2, (_q2 select 2) + (_p1 select 2)]; +#include "script_component.hpp" + +_map = _this select 0; +_theta = _this select 1; + +_p = _map select 0; +_p1 = _map select 1; +_p2 = _map select 2; + +_q1 = +(_map select 3); +_q2 = +(_map select 4); +_u = _map select 5; +_d = _map select 6; + +/* Step 4 */ +_q2 set[0, (_q1 select 0) * cos(_theta) - (_q1 select 1) * sin(_theta)]; +_q2 set[1, (_q1 select 0) * sin(_theta) + (_q1 select 1) * cos(_theta)]; +_q2 set[2, (_q1 select 2)]; + +/* Inverse of step 3 */ +_q1 set[0, (_q2 select 0) * _d + (_q2 select 2) * (_u select 0)]; +_q1 set[1, (_q2 select 1)]; +_q1 set[2, - (_q2 select 0) * (_u select 0) + (_q2 select 2) * _d]; + +/* Inverse of step 2 */ +if (_d != 0) then { + _q2 set[0, (_q1 select 0)]; + _q2 set[1, (_q1 select 1) * (_u select 2) / _d + (_q1 select 2) * (_u select 1) / _d]; + _q2 set[2, - (_q1 select 1) * (_u select 1) / _d + (_q1 select 2) * (_u select 2) / _d]; +} else { + _q2 = _q1; +}; + +/* Inverse of step 1 */ +_q1 set[0, (_q2 select 0) + (_p1 select 0)]; +_q1 set[1, (_q2 select 1) + (_p1 select 1)]; +_q1 set[2, (_q2 select 2) + (_p1 select 2)]; _q1; \ No newline at end of file diff --git a/addons/laser/functions/fnc_rotateVectLineGetMap.sqf b/addons/laser/functions/fnc_rotateVectLineGetMap.sqf index 258cc93ae2..fdbd6533ef 100644 --- a/addons/laser/functions/fnc_rotateVectLineGetMap.sqf +++ b/addons/laser/functions/fnc_rotateVectLineGetMap.sqf @@ -1,37 +1,37 @@ -#include "script_component.hpp" - -private ["_p", "_theta", "_p1", "_p2", "_q1", "_q2", "_u", "_d"]; -_p = _this select 0; -_p1 = _this select 1; -_p2 = _this select 2; - -_q1 = []; -_q2 = []; -_u = []; - -/* Step 1 */ -_q1 set[0, (_p select 0) - (_p1 select 0)]; -_q1 set[1, (_p select 1) - (_p1 select 1)]; -_q1 set[2, (_p select 2) - (_p1 select 2)]; - -_u set[0, (_p2 select 0) - (_p1 select 0)]; -_u set[1, (_p2 select 1) - (_p1 select 1)]; -_u set[2, (_p2 select 2) - (_p1 select 2)]; -_u = _u call BIS_fnc_unitVector; -_d = sqrt((_u select 1)*(_u select 1) + (_u select 2)*(_u select 2)); - -/* Step 2 */ -if (_d != 0) then { - _q2 set[0, (_q1 select 0)]; - _q2 set[1, (_q1 select 1) * (_u select 2) / _d - (_q1 select 2) * (_u select 1) / _d]; - _q2 set[2, (_q1 select 1) * (_u select 1) / _d + (_q1 select 2) * (_u select 2) / _d]; -} else { - _q2 = _q1; -}; - -/* Step 3 */ -_q1 set[0, (_q2 select 0) * _d - (_q2 select 2) * (_u select 0)]; -_q1 set[1, (_q2 select 1)]; -_q1 set[2, (_q2 select 0) * (_u select 0) + (_q2 select 2) * _d]; - +#include "script_component.hpp" + +private ["_p", "_theta", "_p1", "_p2", "_q1", "_q2", "_u", "_d"]; +_p = _this select 0; +_p1 = _this select 1; +_p2 = _this select 2; + +_q1 = []; +_q2 = []; +_u = []; + +/* Step 1 */ +_q1 set[0, (_p select 0) - (_p1 select 0)]; +_q1 set[1, (_p select 1) - (_p1 select 1)]; +_q1 set[2, (_p select 2) - (_p1 select 2)]; + +_u set[0, (_p2 select 0) - (_p1 select 0)]; +_u set[1, (_p2 select 1) - (_p1 select 1)]; +_u set[2, (_p2 select 2) - (_p1 select 2)]; +_u = _u call BIS_fnc_unitVector; +_d = sqrt((_u select 1)*(_u select 1) + (_u select 2)*(_u select 2)); + +/* Step 2 */ +if (_d != 0) then { + _q2 set[0, (_q1 select 0)]; + _q2 set[1, (_q1 select 1) * (_u select 2) / _d - (_q1 select 2) * (_u select 1) / _d]; + _q2 set[2, (_q1 select 1) * (_u select 1) / _d + (_q1 select 2) * (_u select 2) / _d]; +} else { + _q2 = _q1; +}; + +/* Step 3 */ +_q1 set[0, (_q2 select 0) * _d - (_q2 select 2) * (_u select 0)]; +_q1 set[1, (_q2 select 1)]; +_q1 set[2, (_q2 select 0) * (_u select 0) + (_q2 select 2) * _d]; + [_p, _p1, _p2, _q1, _q2, _u, _d] \ No newline at end of file diff --git a/addons/laser/functions/fnc_shootCone.sqf b/addons/laser/functions/fnc_shootCone.sqf index a988b98f17..e33edd10bc 100644 --- a/addons/laser/functions/fnc_shootCone.sqf +++ b/addons/laser/functions/fnc_shootCone.sqf @@ -1,66 +1,66 @@ -#include "script_component.hpp" - -_divergence = 0.3; -_pos = _this select 0; -_vec = _this select 1; -_longestReturn = -1000000000; -_shortestReturn = 1000000000; -_resultPositions = []; -_p1 = [0,0,0]; -_p2 = +_vec; -_p = (_vec call CBA_fnc_vect2polar); -_v = [(_p select 0), (_p select 1), (_p select 2)+90] call CBA_fnc_polar2vect; -_cp = [_vec, _v] call BIS_fnc_crossProduct; - -_vecRotateMap = [_cp, _p1, _p2] call FUNC(rotateVectLineGetMap); - -_result = [_pos, _vec] call FUNC(shootRay); -_resultPos = _result select 0; -if(!isNil "_resultPos") then { - _distance = _result select 1; - if(_distance < _shortestReturn) then { - _shortestReturn = _distance; - }; - if(_distance > _longestReturn) then { - _longestReturn = _distance; - }; - _resultPositions set[(count _resultPositions), _result]; -#ifdef DEBUG_MODE_FULL - DRAW_LINES set[(count DRAW_LINES), [_pos, _resultPos, [0, 1, 0, 1]]]; -#endif -}; -_count = 8; - -_pos2 = [ - (_pos select 0)+((_vec select 0)*1000), - (_pos select 1)+((_vec select 1)*1000), - (_pos select 2)+((_vec select 2)*1000) - ]; -{ - for "_i" from 0 to ceil(_count*_x) do { - _radOffset = random 360; - _offset = [_vecRotateMap, (((360/_count)*_i)+_radOffset) mod 360] call FUNC(rotateVectLine); - _offsetPos = [ - (_pos2 select 0)+((_offset select 0)*(_divergence*_x)), - (_pos2 select 1)+((_offset select 1)*(_divergence*_x)), - (_pos2 select 2)+((_offset select 2)*(_divergence*_x)) - ]; - _offsetVector = [_pos, _offsetPos] call BIS_fnc_vectorFromXtoY; - _result = [_pos, _offsetVector] call FUNC(shootRay); - _resultPos = _result select 0; - if(!isNil "_resultPos") then { - _distance = _result select 1; - if(_distance < _shortestReturn) then { - _shortestReturn = _distance; - }; - if(_distance > _longestReturn) then { - _longestReturn = _distance; - }; - _resultPositions set[(count _resultPositions), _result]; -#ifdef DEBUG_MODE_FULL - DRAW_LINES set[(count DRAW_LINES), [_pos, _resultPos, [0, 1, 0, 1]]]; -#endif - }; - }; -} forEach [1,0.5,0.25]; +#include "script_component.hpp" + +_divergence = 0.3; +_pos = _this select 0; +_vec = _this select 1; +_longestReturn = -1000000000; +_shortestReturn = 1000000000; +_resultPositions = []; +_p1 = [0,0,0]; +_p2 = +_vec; +_p = (_vec call CBA_fnc_vect2polar); +_v = [(_p select 0), (_p select 1), (_p select 2)+90] call CBA_fnc_polar2vect; +_cp = [_vec, _v] call BIS_fnc_crossProduct; + +_vecRotateMap = [_cp, _p1, _p2] call FUNC(rotateVectLineGetMap); + +_result = [_pos, _vec] call FUNC(shootRay); +_resultPos = _result select 0; +if(!isNil "_resultPos") then { + _distance = _result select 1; + if(_distance < _shortestReturn) then { + _shortestReturn = _distance; + }; + if(_distance > _longestReturn) then { + _longestReturn = _distance; + }; + _resultPositions set[(count _resultPositions), _result]; +#ifdef DEBUG_MODE_FULL + DRAW_LINES set[(count DRAW_LINES), [_pos, _resultPos, [0, 1, 0, 1]]]; +#endif +}; +_count = 8; + +_pos2 = [ + (_pos select 0)+((_vec select 0)*1000), + (_pos select 1)+((_vec select 1)*1000), + (_pos select 2)+((_vec select 2)*1000) + ]; +{ + for "_i" from 0 to ceil(_count*_x) do { + _radOffset = random 360; + _offset = [_vecRotateMap, (((360/_count)*_i)+_radOffset) mod 360] call FUNC(rotateVectLine); + _offsetPos = [ + (_pos2 select 0)+((_offset select 0)*(_divergence*_x)), + (_pos2 select 1)+((_offset select 1)*(_divergence*_x)), + (_pos2 select 2)+((_offset select 2)*(_divergence*_x)) + ]; + _offsetVector = [_pos, _offsetPos] call BIS_fnc_vectorFromXtoY; + _result = [_pos, _offsetVector] call FUNC(shootRay); + _resultPos = _result select 0; + if(!isNil "_resultPos") then { + _distance = _result select 1; + if(_distance < _shortestReturn) then { + _shortestReturn = _distance; + }; + if(_distance > _longestReturn) then { + _longestReturn = _distance; + }; + _resultPositions set[(count _resultPositions), _result]; +#ifdef DEBUG_MODE_FULL + DRAW_LINES set[(count DRAW_LINES), [_pos, _resultPos, [0, 1, 0, 1]]]; +#endif + }; + }; +} forEach [1,0.5,0.25]; [_longestReturn, _shortestReturn, _resultPositions]; \ No newline at end of file diff --git a/addons/laser/functions/fnc_shootRay.sqf b/addons/laser/functions/fnc_shootRay.sqf index db14ef679f..62847d16b6 100644 --- a/addons/laser/functions/fnc_shootRay.sqf +++ b/addons/laser/functions/fnc_shootRay.sqf @@ -1,30 +1,30 @@ -#include "script_component.hpp" - -private ["_pos", "_vec", "_distance", "_resultPos", "_fidelity", "_lastPos", "_i", "_nextPos"]; -scopeName "main"; -_pos = _this select 0; -_vec = _this select 1; -_distance = 0; -_resultPos = nil; -_fidelity = [1000,100,10,1,0.1]; -_lastPos = +_pos; -{ - scopeName "mainSearch"; - for "_i" from 1 to 10 do { - _nextPos = [ - (_lastPos select 0)+((_vec select 0)*_x), - (_lastPos select 1)+((_vec select 1)*_x), - (_lastPos select 2)+((_vec select 2)*_x) - ]; - - if(lineIntersects [_lastPos, _nextPos] || terrainIntersectASL [_lastPos, _nextPos]) then { - _resultPos = _lastPos; - breakTo "mainSearch"; - } else { - _distance = _distance + _x; - _lastPos = _nextPos; - }; - }; - -} forEach _fidelity; +#include "script_component.hpp" + +private ["_pos", "_vec", "_distance", "_resultPos", "_fidelity", "_lastPos", "_i", "_nextPos"]; +scopeName "main"; +_pos = _this select 0; +_vec = _this select 1; +_distance = 0; +_resultPos = nil; +_fidelity = [1000,100,10,1,0.1]; +_lastPos = +_pos; +{ + scopeName "mainSearch"; + for "_i" from 1 to 10 do { + _nextPos = [ + (_lastPos select 0)+((_vec select 0)*_x), + (_lastPos select 1)+((_vec select 1)*_x), + (_lastPos select 2)+((_vec select 2)*_x) + ]; + + if(lineIntersects [_lastPos, _nextPos] || terrainIntersectASL [_lastPos, _nextPos]) then { + _resultPos = _lastPos; + breakTo "mainSearch"; + } else { + _distance = _distance + _x; + _lastPos = _nextPos; + }; + }; + +} forEach _fidelity; [_resultPos, _distance]; \ No newline at end of file diff --git a/addons/laser/functions/fnc_translateToModelSpace.sqf b/addons/laser/functions/fnc_translateToModelSpace.sqf index e54744bdb8..1e2e930ac7 100644 --- a/addons/laser/functions/fnc_translateToModelSpace.sqf +++ b/addons/laser/functions/fnc_translateToModelSpace.sqf @@ -1,16 +1,16 @@ -_object = _this select 0; -_origin = getPosASL _object; -_matrix = _this select 1; -_xVec = _matrix select 0; -_yVec = _matrix select 1; -_zVec = _matrix select 2; - -_offset = _this select 2; - -_x = _offset select 0; -_y = _offset select 1; -_z = _offset select 2; - -_out = (((_xVec vectorMultiply _x) vectorAdd (_yVec vectorMultiply _y)) vectorAdd (_zVec vectorMultiply _z)) vectorAdd _origin; - +_object = _this select 0; +_origin = getPosASL _object; +_matrix = _this select 1; +_xVec = _matrix select 0; +_yVec = _matrix select 1; +_zVec = _matrix select 2; + +_offset = _this select 2; + +_x = _offset select 0; +_y = _offset select 1; +_z = _offset select 2; + +_out = (((_xVec vectorMultiply _x) vectorAdd (_yVec vectorMultiply _y)) vectorAdd (_zVec vectorMultiply _z)) vectorAdd _origin; + _out; \ No newline at end of file diff --git a/addons/laser/functions/fnc_translateToWeaponSpace.sqf b/addons/laser/functions/fnc_translateToWeaponSpace.sqf index 7b146e7d42..2c7dc5e6da 100644 --- a/addons/laser/functions/fnc_translateToWeaponSpace.sqf +++ b/addons/laser/functions/fnc_translateToWeaponSpace.sqf @@ -1,22 +1,22 @@ -_object = _this select 0; -_origin = getPosASL _object; -_matrix = _this select 1; -_xVec = _matrix select 0; -_yVec = _matrix select 1; -_zVec = _matrix select 2; - -_offset = _this select 2; - -_offset = _offset vectorDiff _origin; - -_x = _offset select 0; -_y = _offset select 1; -_z = _offset select 2; - -_out = [ - ((_xVec select 0)*_x) + ((_xVec select 1)*_y) + ((_xVec select 2)*_z), - ((_yVec select 0)*_x) + ((_yVec select 1)*_y) + ((_yVec select 2)*_z), - ((_zVec select 0)*_x) + ((_zVec select 1)*_y) + ((_zVec select 2)*_z) - ]; - +_object = _this select 0; +_origin = getPosASL _object; +_matrix = _this select 1; +_xVec = _matrix select 0; +_yVec = _matrix select 1; +_zVec = _matrix select 2; + +_offset = _this select 2; + +_offset = _offset vectorDiff _origin; + +_x = _offset select 0; +_y = _offset select 1; +_z = _offset select 2; + +_out = [ + ((_xVec select 0)*_x) + ((_xVec select 1)*_y) + ((_xVec select 2)*_z), + ((_yVec select 0)*_x) + ((_yVec select 1)*_y) + ((_yVec select 2)*_z), + ((_zVec select 0)*_x) + ((_zVec select 1)*_y) + ((_zVec select 2)*_z) + ]; + _out; \ No newline at end of file diff --git a/addons/laser/script_component.hpp b/addons/laser/script_component.hpp index 047cef804a..2be1e9e14b 100644 --- a/addons/laser/script_component.hpp +++ b/addons/laser/script_component.hpp @@ -1,15 +1,15 @@ -#define COMPONENT laser -#include "\z\ace\Addons\main\script_mod.hpp" - -#ifdef DEBUG_ENABLED_LASER - #define DEBUG_MODE_FULL -#endif - -#ifdef DEBUG_SETTINGS_LASER - #define DEBUG_SETTINGS DEBUG_SETTINGS_LASER -#endif - -#include "\z\ace\Addons\main\script_macros.hpp" - - +#define COMPONENT laser +#include "\z\ace\Addons\main\script_mod.hpp" + +#ifdef DEBUG_ENABLED_LASER + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_LASER + #define DEBUG_SETTINGS DEBUG_SETTINGS_LASER +#endif + +#include "\z\ace\Addons\main\script_macros.hpp" + + #define FIREMODE_DIRECT_LOAL 1 \ No newline at end of file diff --git a/addons/laser_selfdesignate/CfgEventhandlers.hpp b/addons/laser_selfdesignate/CfgEventhandlers.hpp index 2681d24120..4cef7be4a3 100644 --- a/addons/laser_selfdesignate/CfgEventhandlers.hpp +++ b/addons/laser_selfdesignate/CfgEventhandlers.hpp @@ -1,19 +1,19 @@ -class Extended_PreInit_EventHandlers { - class ADDON { - init = QUOTE(call COMPILE_FILE(XEH_pre_init)); - }; -}; - -class Extended_PostInit_EventHandlers { - class ADDON { - init = QUOTE(call COMPILE_FILE(XEH_post_init)); - }; -}; - -class Extended_Init_EventHandlers { - class Helicopter { - class ADDON { - init = QUOTE(_this call DFUNC(initDesignatorActions)); - }; - }; +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_pre_init)); + }; +}; + +class Extended_PostInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_post_init)); + }; +}; + +class Extended_Init_EventHandlers { + class Helicopter { + class ADDON { + init = QUOTE(_this call DFUNC(initDesignatorActions)); + }; + }; }; \ No newline at end of file diff --git a/addons/laser_selfdesignate/CfgUI.hpp b/addons/laser_selfdesignate/CfgUI.hpp index 304281d213..e8823e04f8 100644 --- a/addons/laser_selfdesignate/CfgUI.hpp +++ b/addons/laser_selfdesignate/CfgUI.hpp @@ -1,32 +1,32 @@ -class RscPicture; -class RscText; -class RscControlsGroupNoScrollbars; -/* This disables air radar. We need to make this a seperate HUD addon -class RscInGameUI -{ - class RscUnitInfo - { - class CA_Radar: RscControlsGroupNoScrollbars - { - class controls - { - class CA_RadarBackground: RscPicture { - colorText[] = {0,0,0,0}; - text = ""; - }; - class CA_RadarIcon: RscPicture { - colorText[] = {0,0,0,0}; - }; - class CA_Heading: RscText { - colorText[] = {0,0,0,0}; - }; - }; - }; - }; -}; -class CfgInGameUI -{ - -}; - +class RscPicture; +class RscText; +class RscControlsGroupNoScrollbars; +/* This disables air radar. We need to make this a seperate HUD addon +class RscInGameUI +{ + class RscUnitInfo + { + class CA_Radar: RscControlsGroupNoScrollbars + { + class controls + { + class CA_RadarBackground: RscPicture { + colorText[] = {0,0,0,0}; + text = ""; + }; + class CA_RadarIcon: RscPicture { + colorText[] = {0,0,0,0}; + }; + class CA_Heading: RscText { + colorText[] = {0,0,0,0}; + }; + }; + }; + }; +}; +class CfgInGameUI +{ + +}; + */ \ No newline at end of file diff --git a/addons/laser_selfdesignate/CfgVehicles.hpp b/addons/laser_selfdesignate/CfgVehicles.hpp index d05ddaa28b..b29d8a4394 100644 --- a/addons/laser_selfdesignate/CfgVehicles.hpp +++ b/addons/laser_selfdesignate/CfgVehicles.hpp @@ -1,30 +1,30 @@ -class CfgVehicles { - class AllVehicles; - class Air: AllVehicles { - class Turrets; - }; - - class Helicopter: Air { - class Turrets { - class MainTurret; - }; - - // TODO: move these to a different HUD addon - // commanderCanSee = 2+32; - // gunnerCanSee = 2+32; - // driverCanSee = 2+32; - - }; - - class Helicopter_Base_F: Helicopter {}; - - class Heli_Attack_01_base_F: Helicopter_Base_F {}; - - class B_Heli_Attack_01_F: Heli_Attack_01_base_F { - class Turrets: Turrets { - class MainTurret: MainTurret { - GVAR(Enabled) = 1; // Enable laser self-designation - }; - }; - }; -}; +class CfgVehicles { + class AllVehicles; + class Air: AllVehicles { + class Turrets; + }; + + class Helicopter: Air { + class Turrets { + class MainTurret; + }; + + // TODO: move these to a different HUD addon + // commanderCanSee = 2+32; + // gunnerCanSee = 2+32; + // driverCanSee = 2+32; + + }; + + class Helicopter_Base_F: Helicopter {}; + + class Heli_Attack_01_base_F: Helicopter_Base_F {}; + + class B_Heli_Attack_01_F: Heli_Attack_01_base_F { + class Turrets: Turrets { + class MainTurret: MainTurret { + GVAR(Enabled) = 1; // Enable laser self-designation + }; + }; + }; +}; diff --git a/addons/laser_selfdesignate/CfgWeapons.hpp b/addons/laser_selfdesignate/CfgWeapons.hpp index 3037972ffa..a62974ce40 100644 --- a/addons/laser_selfdesignate/CfgWeapons.hpp +++ b/addons/laser_selfdesignate/CfgWeapons.hpp @@ -1,11 +1,11 @@ -class CfgWeapons { - // Disable locking unless newb mode - class LauncherCore; - class RocketPods: LauncherCore { - canLock = 1; - }; - - class missiles_DAGR: RocketPods { - canLock = 1; - }; -}; +class CfgWeapons { + // Disable locking unless newb mode + class LauncherCore; + class RocketPods: LauncherCore { + canLock = 1; + }; + + class missiles_DAGR: RocketPods { + canLock = 1; + }; +}; diff --git a/addons/laser_selfdesignate/XEH_post_init.sqf b/addons/laser_selfdesignate/XEH_post_init.sqf index a4e4806591..6904ee6c47 100644 --- a/addons/laser_selfdesignate/XEH_post_init.sqf +++ b/addons/laser_selfdesignate/XEH_post_init.sqf @@ -1,3 +1,3 @@ -#include "script_component.hpp" -NO_DEDICATED; - +#include "script_component.hpp" +NO_DEDICATED; + diff --git a/addons/laser_selfdesignate/XEH_pre_init.sqf b/addons/laser_selfdesignate/XEH_pre_init.sqf index 6567938514..a8d4b1779d 100644 --- a/addons/laser_selfdesignate/XEH_pre_init.sqf +++ b/addons/laser_selfdesignate/XEH_pre_init.sqf @@ -1,11 +1,11 @@ -#include "script_component.hpp" - -PREP(initDesignatorActions); -PREP(laserHudDesignateOn); -PREP(laserHudDesignateOff); -PREP(unitTurretHasDesignator); - -GVAR(laser) = nil; -GVAR(laserActive) = false; - -FUNC(getPosASL) = {visiblePositionASL (_this select 0)}; +#include "script_component.hpp" + +PREP(initDesignatorActions); +PREP(laserHudDesignateOn); +PREP(laserHudDesignateOff); +PREP(unitTurretHasDesignator); + +GVAR(laser) = nil; +GVAR(laserActive) = false; + +FUNC(getPosASL) = {visiblePositionASL (_this select 0)}; diff --git a/addons/laser_selfdesignate/config.cpp b/addons/laser_selfdesignate/config.cpp index e8d110bd34..33c31ba7e5 100644 --- a/addons/laser_selfdesignate/config.cpp +++ b/addons/laser_selfdesignate/config.cpp @@ -1,17 +1,17 @@ -#include "script_component.hpp" - -class CfgPatches { - class ADDON { - units[] = {}; - weapons[] = {}; - requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"ace_laser"}; - version = VERSION; - }; -}; - -#include "CfgUI.hpp" - -#include "CfgEventhandlers.hpp" -#include "CfgWeapons.hpp" -#include "CfgVehicles.hpp" +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_laser"}; + version = VERSION; + }; +}; + +#include "CfgUI.hpp" + +#include "CfgEventhandlers.hpp" +#include "CfgWeapons.hpp" +#include "CfgVehicles.hpp" diff --git a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOff.sqf b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOff.sqf index c5ad2407fd..2f4c437d28 100644 --- a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOff.sqf +++ b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOff.sqf @@ -1,20 +1,20 @@ -#include "script_component.hpp" - -if(isNil QGVAR(laser)) exitWith { - false -}; -if(!local GVAR(laser)) then { - false -}; - -_handle = GVAR(laser) getVariable ["ACE_PFH_HANDLE", nil]; -if(!isNil "_handle") then { - [_handle] call cba_fnc_removePerFrameHandler; -}; - -REM(ACE_LASERS, GVAR(laser)); -deleteVehicle GVAR(laser); -GVAR(laser) = nil; -GVAR(laserActive) = false; - +#include "script_component.hpp" + +if(isNil QGVAR(laser)) exitWith { + false +}; +if(!local GVAR(laser)) then { + false +}; + +_handle = GVAR(laser) getVariable ["ACE_PFH_HANDLE", nil]; +if(!isNil "_handle") then { + [_handle] call cba_fnc_removePerFrameHandler; +}; + +REM(ACE_LASERS, GVAR(laser)); +deleteVehicle GVAR(laser); +GVAR(laser) = nil; +GVAR(laserActive) = false; + true \ No newline at end of file diff --git a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf index 45a6e18c55..f0fdc8458f 100644 --- a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf +++ b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf @@ -1,111 +1,111 @@ -//#define DEBUG_MODE_FULL -#include "script_component.hpp" - -TRACE_1("enter", _this); - -#define FCS_UPDATE_DELAY 1 - -FUNC(magnitude) = { - _this distance [0, 0, 0] -}; - -FUNC(mat_normalize3d) = { - private ["_mag"]; - PARAMS_3(_vx,_vy,_vz); - - _mag = _this call FUNC(magnitude); - if (_mag == 0) then {_mag = 1}; - [(_vx/_mag), (_vy/_mag), (_vz/_mag)] -}; - -FUNC(laserHudDesignatePFH) = { - private["_args", "_laserTarget", "_shooter", "_vehicle", "_weapon", "_gunnerInfo", "_turret", "_pov", "_gunBeg", "_gunEnd", "_povPos", "_povDir", "_result", "_resultPositions", "_firstResult", "_forceUpdateTime"]; - _args = _this select 0; - _laserTarget = _args select 0; - _shooter = _args select 1; - - if( (count _args) < 3) then { - _args set[2, diag_tickTime + FCS_UPDATE_DELAY]; - }; - _forceUpdateTime = _args select 2; - - _vehicle = vehicle _shooter; - _weapon = currentWeapon _vehicle; - - TRACE_1("", _args); - - if(!alive _shooter || isNull _vehicle || isNull _laserTarget || !GVAR(laserActive) ) exitWith { - [] call FUNC(laserHudDesignateOff); - }; - if(!([ACE_player] call FUNC(unitTurretHasDesignator)) ) exitWith { - [] call FUNC(laserHudDesignateOff); - }; - - // Retrieve the gunner and turret memory point information - _gunnerInfo = [_vehicle, _weapon] call CBA_fnc_getFirer; - _turretInfo = [_vehicle, _gunnerInfo select 1] call EFUNC(common,getTurretDirection); - _povPos = _turretInfo select 0; - _povDir = _turretInfo select 1; - - - - _result = [_povPos, _povDir] call EFUNC(laser,shootCone); - if((count _result) > 0) then { - _resultPositions = _result select 2; - - if((count _resultPositions) > 0) then { - _firstResult = _resultPositions select 0; - _pos = _firstResult select 0; - - // If the laser has moved less than a half meter, then dont move it. - // Just regular use of lasers will commonly make them move this much, - // but not across multiple close frames. - // This loses accuracy a little, but saves position updates per frame. - TRACE_5("", diag_tickTime, _forceUpdateTime, getPosASL _laserTarget, _pos, ((getPosASL _laserTarget) distance _pos)); - - if(diag_tickTime > _forceUpdateTime) then { - TRACE_1("FCS Update", ""); - ["ace_fcs_forceUpdate", []] call ace_common_fnc_localEvent; - }; - - if( (_laserTarget distance _pos) > 0.1) then { - TRACE_1("LaserPos Update", ""); - _laserTarget setPosATL (ASLToATL _pos); - }; - - if(diag_tickTime > _forceUpdateTime) then { - _args set[2, diag_tickTime + FCS_UPDATE_DELAY]; - }; -#ifdef DEBUG_MODE_FULL - drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,0,0,1], (getPosATL _laserTarget), 0.75, 0.75, 0, "", 0.5, 0.025, "TahomaB"]; - - { - private["_position"]; - _position = _x select 0; - drawLine3d [ASLToATL _povPos, ASLToATL _position, [0,0,1,1] ]; - } forEach _resultPositions; -#endif - }; - }; - - _this set[0, _args]; -}; - -private "_laserTarget"; -private "_handle"; - -if(isNil QGVAR(laser)) then { - - _laserTarget = "LaserTargetW" createVehicle (getpos player); - - GVAR(laserActive) = true; - - _handle = [FUNC(laserHudDesignatePFH), 0.1, [_laserTarget, player]] call cba_fnc_addPerFrameHandler; - _laserTarget setVariable ["ACE_PFH_HANDLE", _handle, false]; - - GVAR(laser) = _laserTarget; -} else { - [] call FUNC(laserHudDesignateOff); - [] call FUNC(laserHudDesignateOn); -}; - +//#define DEBUG_MODE_FULL +#include "script_component.hpp" + +TRACE_1("enter", _this); + +#define FCS_UPDATE_DELAY 1 + +FUNC(magnitude) = { + _this distance [0, 0, 0] +}; + +FUNC(mat_normalize3d) = { + private ["_mag"]; + PARAMS_3(_vx,_vy,_vz); + + _mag = _this call FUNC(magnitude); + if (_mag == 0) then {_mag = 1}; + [(_vx/_mag), (_vy/_mag), (_vz/_mag)] +}; + +FUNC(laserHudDesignatePFH) = { + private["_args", "_laserTarget", "_shooter", "_vehicle", "_weapon", "_gunnerInfo", "_turret", "_pov", "_gunBeg", "_gunEnd", "_povPos", "_povDir", "_result", "_resultPositions", "_firstResult", "_forceUpdateTime"]; + _args = _this select 0; + _laserTarget = _args select 0; + _shooter = _args select 1; + + if( (count _args) < 3) then { + _args set[2, diag_tickTime + FCS_UPDATE_DELAY]; + }; + _forceUpdateTime = _args select 2; + + _vehicle = vehicle _shooter; + _weapon = currentWeapon _vehicle; + + TRACE_1("", _args); + + if(!alive _shooter || isNull _vehicle || isNull _laserTarget || !GVAR(laserActive) ) exitWith { + [] call FUNC(laserHudDesignateOff); + }; + if(!([ACE_player] call FUNC(unitTurretHasDesignator)) ) exitWith { + [] call FUNC(laserHudDesignateOff); + }; + + // Retrieve the gunner and turret memory point information + _gunnerInfo = [_vehicle, _weapon] call CBA_fnc_getFirer; + _turretInfo = [_vehicle, _gunnerInfo select 1] call EFUNC(common,getTurretDirection); + _povPos = _turretInfo select 0; + _povDir = _turretInfo select 1; + + + + _result = [_povPos, _povDir] call EFUNC(laser,shootCone); + if((count _result) > 0) then { + _resultPositions = _result select 2; + + if((count _resultPositions) > 0) then { + _firstResult = _resultPositions select 0; + _pos = _firstResult select 0; + + // If the laser has moved less than a half meter, then dont move it. + // Just regular use of lasers will commonly make them move this much, + // but not across multiple close frames. + // This loses accuracy a little, but saves position updates per frame. + TRACE_5("", diag_tickTime, _forceUpdateTime, getPosASL _laserTarget, _pos, ((getPosASL _laserTarget) distance _pos)); + + if(diag_tickTime > _forceUpdateTime) then { + TRACE_1("FCS Update", ""); + ["ace_fcs_forceUpdate", []] call ace_common_fnc_localEvent; + }; + + if( (_laserTarget distance _pos) > 0.1) then { + TRACE_1("LaserPos Update", ""); + _laserTarget setPosATL (ASLToATL _pos); + }; + + if(diag_tickTime > _forceUpdateTime) then { + _args set[2, diag_tickTime + FCS_UPDATE_DELAY]; + }; +#ifdef DEBUG_MODE_FULL + drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,0,0,1], (getPosATL _laserTarget), 0.75, 0.75, 0, "", 0.5, 0.025, "TahomaB"]; + + { + private["_position"]; + _position = _x select 0; + drawLine3d [ASLToATL _povPos, ASLToATL _position, [0,0,1,1] ]; + } forEach _resultPositions; +#endif + }; + }; + + _this set[0, _args]; +}; + +private "_laserTarget"; +private "_handle"; + +if(isNil QGVAR(laser)) then { + + _laserTarget = "LaserTargetW" createVehicle (getpos player); + + GVAR(laserActive) = true; + + _handle = [FUNC(laserHudDesignatePFH), 0.1, [_laserTarget, player]] call cba_fnc_addPerFrameHandler; + _laserTarget setVariable ["ACE_PFH_HANDLE", _handle, false]; + + GVAR(laser) = _laserTarget; +} else { + [] call FUNC(laserHudDesignateOff); + [] call FUNC(laserHudDesignateOn); +}; + diff --git a/addons/laser_selfdesignate/functions/script_component.hpp b/addons/laser_selfdesignate/functions/script_component.hpp index 46c864a031..38c6d2c44b 100644 --- a/addons/laser_selfdesignate/functions/script_component.hpp +++ b/addons/laser_selfdesignate/functions/script_component.hpp @@ -1 +1 @@ -#include "\z\ace\Addons\laser_selfdesignate\script_component.hpp" +#include "\z\ace\Addons\laser_selfdesignate\script_component.hpp" diff --git a/addons/laser_selfdesignate/script_component.hpp b/addons/laser_selfdesignate/script_component.hpp index 25fa342e32..46e9c48d2f 100644 --- a/addons/laser_selfdesignate/script_component.hpp +++ b/addons/laser_selfdesignate/script_component.hpp @@ -1,12 +1,12 @@ -#define COMPONENT laser_selfdesignate -#include "\z\ace\Addons\main\script_mod.hpp" - -#ifdef DEBUG_ENABLED_LASER_SELFDESIGNATE - #define DEBUG_MODE_FULL -#endif - -#ifdef DEBUG_SETTINGS_LASER_SELFDESIGNATE - #define DEBUG_SETTINGS DEBUG_SETTINGS_LASER_SELFDESIGNATE -#endif - -#include "\z\ace\Addons\main\script_macros.hpp" +#define COMPONENT laser_selfdesignate +#include "\z\ace\Addons\main\script_mod.hpp" + +#ifdef DEBUG_ENABLED_LASER_SELFDESIGNATE + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_LASER_SELFDESIGNATE + #define DEBUG_SETTINGS DEBUG_SETTINGS_LASER_SELFDESIGNATE +#endif + +#include "\z\ace\Addons\main\script_macros.hpp" diff --git a/addons/laser_selfdesignate/stringtable.xml b/addons/laser_selfdesignate/stringtable.xml index ca5ff1e687..03d28814ec 100644 --- a/addons/laser_selfdesignate/stringtable.xml +++ b/addons/laser_selfdesignate/stringtable.xml @@ -1,16 +1,14 @@  - + Laser<br/>Designator On Lasermarkierer<br/>an - ЛЦУ<br/>ВКЛ Laser<br/>Designator Off Lasermarkierer<br/>aus - ЛЦУ<br/>ВЫКЛ \ No newline at end of file diff --git a/addons/laserpointer/stringtable.xml b/addons/laserpointer/stringtable.xml index 279fdeb5e8..87b36618a6 100644 --- a/addons/laserpointer/stringtable.xml +++ b/addons/laserpointer/stringtable.xml @@ -1,22 +1,21 @@  - + Laser Pointer (red) Laserpointer (rot) - Лазерный прицел (красный) Laser Pointer (green) Laserpointer (grün) - Лазерный прицел (зелёный) + Emits visible light. Strahlt sichtbares Licht aus. - Испускает узкий пучок видимого света. + <t color='#9cf953'>Use: </t>Turn Laser ON/OFF <t color='#9cf953'>Použití: </t>Zapnout/vypnout laser @@ -28,5 +27,6 @@ <t color='#9cf953'>Использовать: </t>вкл/выкл лазер <t color='#9cf953'>Usar: </t>encender/apagar láser + - \ No newline at end of file + diff --git a/addons/logistics_uavbattery/stringtable.xml b/addons/logistics_uavbattery/stringtable.xml index 3a8d958709..fbd9004290 100644 --- a/addons/logistics_uavbattery/stringtable.xml +++ b/addons/logistics_uavbattery/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -24,7 +24,7 @@ Potřebuješ UAV-Baterii Você precisa de uma Bateria para VANT Hai bisogno di una Batteria UAV - Требуется аккумулятор для БПЛА + Требуется аккумулятор БПЛА Recharge @@ -36,7 +36,7 @@ Dobít Recarregar Ricarica - Зарядить + Подзарядить UAV Battery @@ -60,7 +60,7 @@ Používané k dobíjení UAV Usada para reabastecer VANT Usata per ricaricare la Batteria dell'UAV - Используется для зарядки БПЛА + Используется для подзарядки БПЛА Recharging ... @@ -72,7 +72,7 @@ Dobíjení ... Recarregando ... In ricarica ... - Заряжается ... + Подзаряжаем ... \ No newline at end of file diff --git a/addons/logistics_wirecutter/stringtable.xml b/addons/logistics_wirecutter/stringtable.xml index 4e08ec33e8..f23af6b1e5 100644 --- a/addons/logistics_wirecutter/stringtable.xml +++ b/addons/logistics_wirecutter/stringtable.xml @@ -1,17 +1,15 @@  - + Wirecutter Drahtschneider Wirecutter - Клещи-кусачки Wirecutter Schneidet Draht. - Позволяют быстро перекусывать сеточные конструкции. Cut Fence @@ -23,7 +21,7 @@ Cortar Cerca Taglia Drótkerítés átvágása - Разрезать забор + Вырезать забор Cutting Fences / Wires ... @@ -35,7 +33,7 @@ Cortando Cerca / Arame ... Sto tagliando ... Drótok elvágása ... - Разрезаем забор / провода ... + Вырезаем забор / провода ... Fence cut @@ -47,7 +45,7 @@ Cerca cortada Fatto! Drótkerítés átvágva - Забор разрезан + Забор вырезан \ No newline at end of file diff --git a/addons/magazinerepack/stringtable.xml b/addons/magazinerepack/stringtable.xml index 8aa586b916..d8fd5ca177 100644 --- a/addons/magazinerepack/stringtable.xml +++ b/addons/magazinerepack/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -78,19 +78,16 @@ Repacking Finished Wiederverpacken Fertig Reembalaje Finalizado - Перепаковка завершена Repacking Interrupted Umpacken Unterbrochen Reempaque Interrupted - Перепаковка прервана %1 Full and %2 Partial %1 Vollständigen und %2 Teilweisen %1 Total y %2 Parcial - %1 полных и %2 неполных \ No newline at end of file diff --git a/addons/magazines/stringtable.xml b/addons/magazines/stringtable.xml index db637f8064..c8f652fa39 100644 --- a/addons/magazines/stringtable.xml +++ b/addons/magazines/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -13,7 +13,7 @@ 6.5mm 30ks Svítící IR-DIM Zásobník Carregador de 30 projéteis traçantes IR-DIM de 6,5mm Caricatore 6.5mm 30Rnd Traccianti IR-DIM - Магазин из 30-ти 6.5 мм трассирующих под ПНВ + Магазин из 30-и 6.5 мм трассирующих под ПНВ 6.5mm IR-DIM @@ -25,7 +25,7 @@ 6.5mm IR-DIM 6,5mm IR-DIM 6.5 IR-DIM - 6.5 мм ИК-трассирующие + 6.5 мм трассирущие под ПНВ Caliber: 6.5x39 mm Tracer IR-DIM<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL @@ -49,7 +49,7 @@ 6.5mm 30ks SD Zásobník Carregador de 30 projéteis SD de 6,5mm Caricatore 6.5mm 30Rnd Sil. - Магазин из 30-ти 6.5 мм дозвуковых + Магазин из 30-и 6.5 мм дозвуковых 6.5mm SD @@ -85,7 +85,7 @@ 6.5mm 30ks AP Zásobník Carregador de 30 projéteis AP de 6,5mm Caricatore 6.5mm 30Rnd AP - Магазин из 30-ти 6.5 мм бронебойных + Магазин из 30-и 6.5 мм бронебойных 6.5mm AP @@ -122,7 +122,7 @@ 6.5mm 30ks Svítící IR-DIM Zásobník Carregador de 30 projéteis traçantes IR-DIM de 6,5mm Caricatore 6.5mm 30Rnd Traccianti IR-DIM - Магазин из 30-ти 6.5 мм трассирующих под ПНВ + Магазин из 30-и 6.5 мм трассирующих под ПНВ 6.5mm IR-DIM @@ -134,7 +134,7 @@ 6.5mm IR-DIM 6,5mm IR-DIM 6.5mm IR-DIM - 6.5 мм ИК-трассирующие + 6.5 мм трассирущие под ПНВ Caliber: 6.5x39 mm Tracer IR-DIM<br />Rounds: 30<br />Used in: Katiba @@ -158,7 +158,7 @@ 6.5mm 30ks SD Zásobník Carregador de 30 projéteis SD de 6,5mm Caricatore 6.5mm 30Rnd Sil. - Магазин из 30-ти 6.5 мм дозвуковых + Магазин из 30-и 6.5 мм дозвуковых 6.5mm SD @@ -194,7 +194,7 @@ 6.5mm 30ks AP Zásobník Carregador de 30 projéteis AP de 6,5mm Caricatore 6.5mm 30Rnd AP - Магазин из 30-ти 6.5 мм бронебойных + Магазин из 30-и 6.5 мм бронебойных 6.5mm AP @@ -231,7 +231,7 @@ 5.56mm 30ks Svítící IR-DIM Zásobník Carregador de 30 projéteis traçantes IR-DIM de 5,56mm Caricatore 5.56mm 30rnd Traccianti IR-DIM - Магазин из 30-ти 5.56 мм трассирующих под ПНВ + Магазин из 30-и 5.56 мм трассирующих под ПНВ 5.56mm IR-DIM @@ -243,7 +243,7 @@ 5.56mm IR-DIM 5,56mm IR-DIM 5.56mm IR-DIM - 5.56 мм ИК-трассирующие + 5.56 мм трассирущие под ПНВ Caliber: 5.56x45 mm Tracer IR-DIM<br />Rounds: 30<br />Used in: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR @@ -267,7 +267,7 @@ 5.56mm 30ks SD Zásobník Carregador de 30 projéteis SD de 5,56mm Caricatore 5.56mm 30Rnd Sil. - Магазин из 30-ти 5.56 мм дозвуковых + Магазин из 30-и 5.56 мм дозвуковых 5.56mm SD @@ -303,7 +303,7 @@ 5.56mm 30ks AP Zásobník Carregador de 30 projéteis AP de 5,56mm Caricatore 5.56mm 30Rnd AP - Магазин из 30-ти 5.56 мм бронебойных + Магазин из 30-и 5.56 мм бронебойных 5.56mm AP @@ -340,7 +340,7 @@ 7.62mm 20ks Svítící Zásobník Carregador de 20 projéteis traçantes de 7,62mm Caricatore 7.62mm 20Rnd Traccianti - Магазин из 20-ти 7.62 мм трассирующих + Магазин из 20-и 7.62 мм трассирующих 7.62mm Tracer @@ -376,7 +376,7 @@ 7.62mm 20ks Svítící IR-DIM Zásobník Carregador de 20 projéteis IR-DIM de 7,62mm Caricatore 7.62mm 20rnd Traccianti IR-DIM - Магазин из 20-ти 7.62 мм трассирующих под ПНВ + Магазин из 20-и 7.62 мм трассирующих под ПНВ 7.62mm IR-DIM @@ -388,7 +388,7 @@ 7.62mm IR-DIM 7,62mm IR-DIM 7.62mm IR-DIM - 7.62 мм ИК-трассирующие + 7.62 мм трассирущие под ПНВ Caliber: 7.62x51 mm Tracer IR-DIM<br />Rounds: 20<br />Used in: Mk18 ABR @@ -412,7 +412,7 @@ 7.62mm 20ks SD Zásobník Carregador de 20 projéteis SD de 7,62mm Caricatore 7.62mm 20Rnd Sil. - Магазин из 20-ти 7.62 мм дозвуковых + Магазин из 20-и 7.62 мм дозвуковых 7.62mm SD @@ -448,7 +448,7 @@ 7.62mm 20ks AP Zásobník Carregador de 20 projéteis AP de 7,62mm Caricatore 7.62mm 20Rnd AP - Магазин из 20-ти 7.62 мм бронебойных + Магазин из 20-и 7.62 мм бронебойных 7.62mm AP @@ -487,4 +487,4 @@ Calibro: 7.62x51mm M118LR<br />Munizioni:20<br />In uso su: M14 - \ No newline at end of file + diff --git a/addons/main/About.hpp b/addons/main/About.hpp index c0dfbba561..c455c43cc3 100644 --- a/addons/main/About.hpp +++ b/addons/main/About.hpp @@ -1,35 +1,35 @@ -#include "script_dialog_defines.hpp" - -class ACE_ABOUT_DLG { - idd = 114137; - movingEnable = 0; - onLoad = "with uiNameSpace do { ACE_ABOUT_DLG = _this select 0; };"; - onKeyDown = "if((_this select 1) == 1) then {ACE_ABOUT_STP = true;};"; - class controlsBackground { - class Contents : RscStructuredText { - idc = 1141371; - colorBackground[] = { 0, 0, 0, 0 }; - __SX(0.45); - __SY(0.25); - __SW(0.45); - __SH(0.6); - size = "0.025 * SafeZoneH"; - class Attributes { - font = "TahomaB"; - color = "#C8C8C8"; - align = "left"; - valign = "middle"; - shadow = true; - shadowColor = "#191970"; - size = "1"; - }; - }; - class ACE_ABOUT_NEXT : ACE_ABOUT_CTRL { //dummy visible - idc = 1141372; - __SX(0.065); - __SW(0.03); - text = ""; - action = ""; - }; - }; //controlsBackground -}; +#include "script_dialog_defines.hpp" + +class ACE_ABOUT_DLG { + idd = 114137; + movingEnable = 0; + onLoad = "with uiNameSpace do { ACE_ABOUT_DLG = _this select 0; };"; + onKeyDown = "if((_this select 1) == 1) then {ACE_ABOUT_STP = true;};"; + class controlsBackground { + class Contents : RscStructuredText { + idc = 1141371; + colorBackground[] = { 0, 0, 0, 0 }; + __SX(0.45); + __SY(0.25); + __SW(0.45); + __SH(0.6); + size = "0.025 * SafeZoneH"; + class Attributes { + font = "TahomaB"; + color = "#C8C8C8"; + align = "left"; + valign = "middle"; + shadow = true; + shadowColor = "#191970"; + size = "1"; + }; + }; + class ACE_ABOUT_NEXT : ACE_ABOUT_CTRL { //dummy visible + idc = 1141372; + __SX(0.065); + __SW(0.03); + text = ""; + action = ""; + }; + }; //controlsBackground +}; diff --git a/addons/main/CfgModuleCategories.hpp b/addons/main/CfgModuleCategories.hpp index 87c52f35c5..1f86959585 100644 --- a/addons/main/CfgModuleCategories.hpp +++ b/addons/main/CfgModuleCategories.hpp @@ -1,8 +1,8 @@ -class CfgFactionClasses { - class NO_CATEGORY; - class ACE: NO_CATEGORY { - displayName = "ACE"; - priority = 2; - side = 7; - }; +class CfgFactionClasses { + class NO_CATEGORY; + class ACE: NO_CATEGORY { + displayName = "ACE"; + priority = 2; + side = 7; + }; }; \ No newline at end of file diff --git a/addons/main/about.sqf b/addons/main/about.sqf index 9e4671d666..c9004edfe1 100644 --- a/addons/main/about.sqf +++ b/addons/main/about.sqf @@ -1,210 +1,210 @@ -#include "script_component.hpp" -#include "\z\ace\addons\main\script_common.hpp" - -if (!isNil "ACE_ABOUT_RUN") exitWith {ACE_ABOUT_RUN = false;}; -ACE_ABOUT_RUN = true; - -disableSerialization; - -PARAMS_2(_menu,_data); - -private ["_pcredits", "_pkeynam", "_shift", "_ctrl", "_alt", "_keys", "_key", "_keystrg", "_mod", "_knaml", "_knam", "_k", "_pkeys", "_pary", "_tpages", "_cEvents", "_i", "_cSys", "_tSys", "_aSys", "_tS", "_j", "_c", "_tC", "_keyn", "_fadet", "_page1", "_color", "_bcolor", "_newpages", "_pstart", "_pcount", "_pnext", "_display", "_control", "_pnames", "_pnam", "_page", "_pages", "_run", "_disp", "_next", "_input", "_nesc", "_unset", "_p", "_text", "_curPage", "_time", "_faded"]; - -_pcredits = [ -"", -"Advanced Combat Environment 2", -"http://dev-heaven.net/projects/ace-mod2", -"", -__cr_managers, -"", -__cr_devs, -"", -__cr_testers, -"", -"For a full list of acknowledgements, please visit our Wiki:", -"http://ace.dev-heaven.net" -]; - -_pkeynam = { //local function - _shift = if (_shift > 0) then {42} else {0}; - _ctrl = if (_ctrl > 0) then {56} else {0}; - _alt = if (_alt > 0) then {29} else {0}; - _keys = [_shift,_ctrl,_alt,_key]; - _keystrg = "^"; - { - _mod = _x in [42,56,29]; - _knaml = call compile format["format['%2',%1]",(keyName _x),"%1"]; - _knaml = [_knaml, " "] call CBA_fnc_split; - _knam = "^"; - {_k = _x; if (!_mod || (_k != (localize "STR_ACE_KN_LEFT") && _k != (localize "STR_ACE_KN_RIGHT"))) then {_knam = _knam + " " + _k}} forEach _knaml; - _knam = [_knam, "^ ", ""] call CBA_fnc_replace; - _keystrg = _keystrg + "-" + _knam; - } forEach _keys; - _keystrg = [_keystrg, "^ ", ""] call CBA_fnc_replace; - _keystrg = [_keystrg, "^-", ""] call CBA_fnc_replace; - _keystrg = [_keystrg, "^", "None"] call CBA_fnc_replace; - _keystrg -}; -_pkeys = { - _pary = []; - _tpages = []; - _cEvents = configFile/"CfgSettings"/"CBA"/"events"; - for "_i" from 0 to (count _cEvents) - 1 do { - _cSys = _cEvents select _i; - _tSys = configName _cSys; - if (isNumber ((_cSys select 0)/"key")) then { - //format system name - _aSys = [_tSys, "_"] call CBA_fnc_split; - _tS = "^"; - {if (_x != "ace" && _x != "sys") then {_tS = _tS + " " + _x}} forEach _aSys; - _tS = [_tS, "^ ", ""] call CBA_fnc_replace; - _tS = format["%1:",_tS]; - PUSH(_pary,_tS); - for "_j" from 0 to (count _cSys) - 1 do { - _c = _cSys select _j; - _tC = configName _c; - _tC = [_tC, "_", " "] call CBA_fnc_replace; - //key - _key = getNumber (_c/"key"); - _shift = getNumber (_c/"shift"); - _ctrl = getNumber (_c/"ctrl"); - _alt = getNumber (_c/"alt"); - _keyn = [_key,_shift,_ctrl,_alt] call _pkeynam; - _tC = format[" %1: %2",_tC,_keyn]; - PUSH(_pary,_tC); - }; - }; - if (count _pary > 20) then { //split full page - PUSH(_tpages,_pary); - _pary = []; - }; - }; - if (count _pary > 0) then { //partial page - PUSH(_tpages,_pary); - _pary = []; - }; - _tpages -}; - -//pages (make sure each will fit within 24 lines, word wrap is on) -switch(_menu) do { - case "MAIN": { //note: not all scripting commands available on main menu (not compiled yet?) - _fadet = 13; - _page1 = _pcredits; - }; - case "SING": { - _fadet = 20; //fade time - _color = [1,1,1,1]; - //_bcolor = [0,0,0,0.3]; - _page1 = _pcredits; - _newpages = [] call _pkeys; - _pstart = 2; - _pcount = count _newpages; - _pnext = _pstart + _pcount; - }; - case "MULT": { - _fadet = 20; - _color = [1,1,1,1]; - //_bcolor = [0,0,0,0.3]; - _page1 = _pcredits; - _newpages = [] call _pkeys; - _pstart = 2; - _pcount = count _newpages; - _pnext = _pstart + _pcount; - }; - default {}; -}; - -//main menu display -if (typeName(_data select 0) == "DISPLAY") then { - _display = _data select 0; -}; - -if (typeName(_data select 0) == "CONTROL") then { - _control = _data select 0; - _display = ctrlParent _control; -}; - -//dynamic pages -_pnames = []; -for "_x" from _pstart to _pnext - 1 do { - _pnam = format ["_page%1",_x]; - PUSH(_pnames,_pnam); -}; -private _pnames; -for "_x" from 0 to _pcount - 1 do { - call compile format ["%1 = %2", _pnames select _x, _newpages select _x]; -}; - -//get num pages -_pages = 0; -_run = true; -while {_run} do { - INC(_pages); - if (isNil format ["_page%1", _pages]) exitWith {_pages = _pages - 1; _run = false}; -}; - -if (_pages > 0) then { - //Dialog - createDialog "ACE_ABOUT_DLG"; - _disp = uiNamespace getVariable "ACE_ABOUT_DLG"; - _ctrl = _disp displayCtrl 1141371; - _next = _disp displayCtrl 1141372; - - if (_pages > 1) then {_next ctrlSetText "Next"}; - - _ctrl ctrlSetFade 1; - _ctrl ctrlCommit 0; - _ctrl ctrlSetFade 0; - _ctrl ctrlCommit 3; - - ACE_ABOUT_INC = 0; - _input = { //local function - _nesc = isNil "ACE_ABOUT_STP"; - if (_pages == 1) then {ACE_ABOUT_INC = 0}; //ignore special control - _unset = (ACE_ABOUT_INC == 0) && ACE_ABOUT_RUN; - if (_unset && _nesc) then {false} else {_fadet = _fadet + 5; true}; - }; - - //by default cycle - for "_p" from 1 to _pages do { - _text = ""; - _page = call compile format["_page%1",_p]; - _curPage = _p; - { - _text = _text + _x + "
"; - _ctrl ctrlSetStructuredText parseText _text; - if (call _input) exitWith {_p = _pages}; - if (_x != "") then {uisleep 0.8}; - } forEach _page; - }; - - _run = true; - while {if (isNil "ACE_ABOUT_STP") then {_run} else {false}} do { - _ctrl ctrlSetFade 0; - _ctrl ctrlCommit 0; - if (!isNil "_color") then {_ctrl ctrlSetTextColor _color}; - if (!isNil "_bcolor") then {_ctrl ctrlSetBackgroundColor _bcolor}; - - _curPage = _curPage + ACE_ABOUT_INC; - if (_curPage > _pages) then {_curPage = 1}; - if (_curPage <= 0) then {_curPage = 1}; - ACE_ABOUT_INC = 0; - - if (!ACE_ABOUT_RUN) then {ACE_ABOUT_RUN = true}; - - _text = ""; - _page = call compile format ["_page%1",_curPage]; - {_text = _text + _x + "
"} forEach _page; - _ctrl ctrlSetStructuredText parseText _text; - - _ctrl ctrlSetFade 1; - _ctrl ctrlCommit _fadet; - - _time = time + _fadet + 2; - waitUntil{uisleep 1; _run = call _input; _faded = time > _time; (_run || _faded)}; - }; //while RUN -}; -ACE_ABOUT_STP = Nil; -ACE_ABOUT_RUN = Nil; +#include "script_component.hpp" +#include "\z\ace\addons\main\script_common.hpp" + +if (!isNil "ACE_ABOUT_RUN") exitWith {ACE_ABOUT_RUN = false;}; +ACE_ABOUT_RUN = true; + +disableSerialization; + +PARAMS_2(_menu,_data); + +private ["_pcredits", "_pkeynam", "_shift", "_ctrl", "_alt", "_keys", "_key", "_keystrg", "_mod", "_knaml", "_knam", "_k", "_pkeys", "_pary", "_tpages", "_cEvents", "_i", "_cSys", "_tSys", "_aSys", "_tS", "_j", "_c", "_tC", "_keyn", "_fadet", "_page1", "_color", "_bcolor", "_newpages", "_pstart", "_pcount", "_pnext", "_display", "_control", "_pnames", "_pnam", "_page", "_pages", "_run", "_disp", "_next", "_input", "_nesc", "_unset", "_p", "_text", "_curPage", "_time", "_faded"]; + +_pcredits = [ +"", +"Advanced Combat Environment 2", +"http://dev-heaven.net/projects/ace-mod2", +"", +__cr_managers, +"", +__cr_devs, +"", +__cr_testers, +"", +"For a full list of acknowledgements, please visit our Wiki:", +"http://ace.dev-heaven.net" +]; + +_pkeynam = { //local function + _shift = if (_shift > 0) then {42} else {0}; + _ctrl = if (_ctrl > 0) then {56} else {0}; + _alt = if (_alt > 0) then {29} else {0}; + _keys = [_shift,_ctrl,_alt,_key]; + _keystrg = "^"; + { + _mod = _x in [42,56,29]; + _knaml = call compile format["format['%2',%1]",(keyName _x),"%1"]; + _knaml = [_knaml, " "] call CBA_fnc_split; + _knam = "^"; + {_k = _x; if (!_mod || (_k != (localize "STR_ACE_KN_LEFT") && _k != (localize "STR_ACE_KN_RIGHT"))) then {_knam = _knam + " " + _k}} forEach _knaml; + _knam = [_knam, "^ ", ""] call CBA_fnc_replace; + _keystrg = _keystrg + "-" + _knam; + } forEach _keys; + _keystrg = [_keystrg, "^ ", ""] call CBA_fnc_replace; + _keystrg = [_keystrg, "^-", ""] call CBA_fnc_replace; + _keystrg = [_keystrg, "^", "None"] call CBA_fnc_replace; + _keystrg +}; +_pkeys = { + _pary = []; + _tpages = []; + _cEvents = configFile/"CfgSettings"/"CBA"/"events"; + for "_i" from 0 to (count _cEvents) - 1 do { + _cSys = _cEvents select _i; + _tSys = configName _cSys; + if (isNumber ((_cSys select 0)/"key")) then { + //format system name + _aSys = [_tSys, "_"] call CBA_fnc_split; + _tS = "^"; + {if (_x != "ace" && _x != "sys") then {_tS = _tS + " " + _x}} forEach _aSys; + _tS = [_tS, "^ ", ""] call CBA_fnc_replace; + _tS = format["%1:",_tS]; + PUSH(_pary,_tS); + for "_j" from 0 to (count _cSys) - 1 do { + _c = _cSys select _j; + _tC = configName _c; + _tC = [_tC, "_", " "] call CBA_fnc_replace; + //key + _key = getNumber (_c/"key"); + _shift = getNumber (_c/"shift"); + _ctrl = getNumber (_c/"ctrl"); + _alt = getNumber (_c/"alt"); + _keyn = [_key,_shift,_ctrl,_alt] call _pkeynam; + _tC = format[" %1: %2",_tC,_keyn]; + PUSH(_pary,_tC); + }; + }; + if (count _pary > 20) then { //split full page + PUSH(_tpages,_pary); + _pary = []; + }; + }; + if (count _pary > 0) then { //partial page + PUSH(_tpages,_pary); + _pary = []; + }; + _tpages +}; + +//pages (make sure each will fit within 24 lines, word wrap is on) +switch(_menu) do { + case "MAIN": { //note: not all scripting commands available on main menu (not compiled yet?) + _fadet = 13; + _page1 = _pcredits; + }; + case "SING": { + _fadet = 20; //fade time + _color = [1,1,1,1]; + //_bcolor = [0,0,0,0.3]; + _page1 = _pcredits; + _newpages = [] call _pkeys; + _pstart = 2; + _pcount = count _newpages; + _pnext = _pstart + _pcount; + }; + case "MULT": { + _fadet = 20; + _color = [1,1,1,1]; + //_bcolor = [0,0,0,0.3]; + _page1 = _pcredits; + _newpages = [] call _pkeys; + _pstart = 2; + _pcount = count _newpages; + _pnext = _pstart + _pcount; + }; + default {}; +}; + +//main menu display +if (typeName(_data select 0) == "DISPLAY") then { + _display = _data select 0; +}; + +if (typeName(_data select 0) == "CONTROL") then { + _control = _data select 0; + _display = ctrlParent _control; +}; + +//dynamic pages +_pnames = []; +for "_x" from _pstart to _pnext - 1 do { + _pnam = format ["_page%1",_x]; + PUSH(_pnames,_pnam); +}; +private _pnames; +for "_x" from 0 to _pcount - 1 do { + call compile format ["%1 = %2", _pnames select _x, _newpages select _x]; +}; + +//get num pages +_pages = 0; +_run = true; +while {_run} do { + INC(_pages); + if (isNil format ["_page%1", _pages]) exitWith {_pages = _pages - 1; _run = false}; +}; + +if (_pages > 0) then { + //Dialog + createDialog "ACE_ABOUT_DLG"; + _disp = uiNamespace getVariable "ACE_ABOUT_DLG"; + _ctrl = _disp displayCtrl 1141371; + _next = _disp displayCtrl 1141372; + + if (_pages > 1) then {_next ctrlSetText "Next"}; + + _ctrl ctrlSetFade 1; + _ctrl ctrlCommit 0; + _ctrl ctrlSetFade 0; + _ctrl ctrlCommit 3; + + ACE_ABOUT_INC = 0; + _input = { //local function + _nesc = isNil "ACE_ABOUT_STP"; + if (_pages == 1) then {ACE_ABOUT_INC = 0}; //ignore special control + _unset = (ACE_ABOUT_INC == 0) && ACE_ABOUT_RUN; + if (_unset && _nesc) then {false} else {_fadet = _fadet + 5; true}; + }; + + //by default cycle + for "_p" from 1 to _pages do { + _text = ""; + _page = call compile format["_page%1",_p]; + _curPage = _p; + { + _text = _text + _x + "
"; + _ctrl ctrlSetStructuredText parseText _text; + if (call _input) exitWith {_p = _pages}; + if (_x != "") then {uisleep 0.8}; + } forEach _page; + }; + + _run = true; + while {if (isNil "ACE_ABOUT_STP") then {_run} else {false}} do { + _ctrl ctrlSetFade 0; + _ctrl ctrlCommit 0; + if (!isNil "_color") then {_ctrl ctrlSetTextColor _color}; + if (!isNil "_bcolor") then {_ctrl ctrlSetBackgroundColor _bcolor}; + + _curPage = _curPage + ACE_ABOUT_INC; + if (_curPage > _pages) then {_curPage = 1}; + if (_curPage <= 0) then {_curPage = 1}; + ACE_ABOUT_INC = 0; + + if (!ACE_ABOUT_RUN) then {ACE_ABOUT_RUN = true}; + + _text = ""; + _page = call compile format ["_page%1",_curPage]; + {_text = _text + _x + "
"} forEach _page; + _ctrl ctrlSetStructuredText parseText _text; + + _ctrl ctrlSetFade 1; + _ctrl ctrlCommit _fadet; + + _time = time + _fadet + 2; + waitUntil{uisleep 1; _run = call _input; _faded = time > _time; (_run || _faded)}; + }; //while RUN +}; +ACE_ABOUT_STP = Nil; +ACE_ABOUT_RUN = Nil; closeDialog 0; \ No newline at end of file diff --git a/addons/main/config.cpp b/addons/main/config.cpp index 190b8a7677..eb136f84cf 100644 --- a/addons/main/config.cpp +++ b/addons/main/config.cpp @@ -1,589 +1,589 @@ -#include "script_component.hpp" - -class CfgPatches { - class ADDON { - units[] = {}; - weapons[] = {}; - requiredVersion = REQUIRED_VERSION; - requiredAddons[] = { - "a3_air_f", - "a3_air_f_beta", - "a3_air_f_beta_heli_attack_01", - "a3_air_f_beta_heli_attack_02", - "a3_air_f_beta_heli_transport_01", - "a3_air_f_beta_heli_transport_02", - "a3_air_f_beta_parachute_01", - "a3_air_f_beta_parachute_02", - "a3_air_f_epb_heli_light_03", - "a3_air_f_epc_plane_cas_01", - "a3_air_f_epc_plane_cas_02", - "a3_air_f_epc_plane_fighter_03", - "a3_air_f_gamma_plane_fighter_03", - "a3_air_f_gamma_uav_01", - "a3_air_f_gamma_uav_02", - "a3_air_f_heli", - "a3_air_f_heli_heli_attack_01", - "a3_air_f_heli_heli_attack_02", - "a3_air_f_heli_heli_light_01", - "a3_air_f_heli_heli_light_02", - "a3_air_f_heli_heli_light_03", - "a3_air_f_heli_heli_transport_01", - "a3_air_f_heli_heli_transport_02", - "a3_air_f_heli_heli_transport_03", - "a3_air_f_heli_heli_transport_04", - "a3_air_f_heli_light_01", - "a3_air_f_heli_light_02", - "a3_animals_f", - "a3_animals_f_animconfig", - "a3_animals_f_chicken", - "a3_animals_f_dog", - "a3_animals_f_fishes", - "a3_animals_f_goat", - "a3_animals_f_kestrel", - "a3_animals_f_rabbit", - "a3_animals_f_seagull", - "a3_animals_f_sheep", - "a3_animals_f_snakes", - "a3_animals_f_turtle", - "a3_anims_f", - "a3_anims_f_config_sdr", - "a3_anims_f_epa", - "a3_anims_f_epc", - "a3_anims_f_heli", - "a3_anims_f_kart", - "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_02", - "a3_armor_f_epb_apc_tracked_03", - "a3_armor_f_epb_mbt_03", - "a3_armor_f_epc_mbt_01", - "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_boat_armed_01", - "a3_boat_f_beta_boat_transport_01", - "a3_boat_f_boat_armed_01", - "a3_boat_f_boat_transport_01", - "a3_boat_f_civilian_boat", - "a3_boat_f_epc_submarine_01_f", - "a3_boat_f_gamma_boat_transport_01", - "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_heli", - "a3_characters_f", - "a3_characters_f_beta", - "a3_characters_f_blufor", - "a3_characters_f_bootcamp", - "a3_characters_f_bootcamp_common", - "a3_characters_f_civil", - "a3_characters_f_common", - "a3_characters_f_epa", - "a3_characters_f_epb", - "a3_characters_f_epb_heads", - "a3_characters_f_epc", - "a3_characters_f_gamma", - "a3_characters_f_heads", - "a3_characters_f_indep", - "a3_characters_f_kart", - "a3_characters_f_mark", - "a3_characters_f_opfor", - "a3_characters_f_proxies", - "a3_data_f", - "a3_data_f_bootcamp", - "a3_data_f_curator", - "a3_data_f_curator_characters", - "a3_data_f_curator_eagle", - "a3_data_f_curator_intel", - "a3_data_f_curator_misc", - "a3_data_f_curator_respawn", - "a3_data_f_curator_virtual", - "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_dubbing_radio_f", - "a3_editor_f", - "a3_functions_f", - "a3_functions_f_bootcamp", - "a3_functions_f_curator", - "a3_functions_f_epa", - "a3_functions_f_epc", - "a3_functions_f_heli", - "a3_functions_f_mark", - "a3_functions_f_mp_mark", - "a3_language_f", - "a3_language_f_beta", - "a3_language_f_bootcamp", - "a3_language_f_curator", - "a3_language_f_epa", - "a3_language_f_epb", - "a3_language_f_epc", - "a3_language_f_gamma", - "a3_language_f_heli", - "a3_language_f_kart", - "a3_language_f_mark", - "a3_language_f_mp_mark", - "a3_languagemissions_f", - "a3_languagemissions_f_beta", - "a3_languagemissions_f_gamma", - "a3_languagemissions_f_kart", - "a3_languagemissions_f_mp_mark", - "a3_map_altis", - "a3_map_altis_scenes", - "a3_map_data", - "a3_map_stratis", - "a3_map_stratis_scenes", - "a3_map_vr_scenes", - "a3_misc_f", - "a3_misc_f_helpers", - "a3_missions_f", - "a3_missions_f_beta", - "a3_missions_f_bootcamp", - "a3_missions_f_curator", - "a3_missions_f_epa", - "a3_missions_f_epb", - "a3_missions_f_epc", - "a3_missions_f_gamma", - "a3_missions_f_heli", - "a3_missions_f_kart", - "a3_missions_f_mark", - "a3_missions_f_mp_mark", - "a3_modules_f", - "a3_modules_f_beta", - "a3_modules_f_beta_firingdrills", - "a3_modules_f_bootcamp", - "a3_modules_f_bootcamp_misc", - "a3_modules_f_curator", - "a3_modules_f_curator_animals", - "a3_modules_f_curator_cas", - "a3_modules_f_curator_chemlights", - "a3_modules_f_curator_curator", - "a3_modules_f_curator_effects", - "a3_modules_f_curator_environment", - "a3_modules_f_curator_flares", - "a3_modules_f_curator_intel", - "a3_modules_f_curator_lightning", - "a3_modules_f_curator_mines", - "a3_modules_f_curator_misc", - "a3_modules_f_curator_multiplayer", - "a3_modules_f_curator_objectives", - "a3_modules_f_curator_ordnance", - "a3_modules_f_curator_respawn", - "a3_modules_f_curator_smokeshells", - "a3_modules_f_dyno", - "a3_modules_f_effects", - "a3_modules_f_epb", - "a3_modules_f_epb_misc", - "a3_modules_f_events", - "a3_modules_f_groupmodifiers", - "a3_modules_f_hc", - "a3_modules_f_heli", - "a3_modules_f_heli_spawnai", - "a3_modules_f_intel", - "a3_modules_f_kart", - "a3_modules_f_kart_timetrials", - "a3_modules_f_livefeed", - "a3_modules_f_mark", - "a3_modules_f_mark_firingdrills", - "a3_modules_f_mark_objectives", - "a3_modules_f_marta", - "a3_modules_f_misc", - "a3_modules_f_mp_mark", - "a3_modules_f_multiplayer", - "a3_modules_f_objectmodifiers", - "a3_modules_f_sites", - "a3_modules_f_skirmish", - "a3_modules_f_strategicmap", - "a3_modules_f_supports", - "a3_modules_f_uav", - "a3_music_f", - "a3_music_f_bootcamp", - "a3_music_f_epa", - "a3_music_f_epb", - "a3_music_f_epc", - "a3_music_f_heli", - "a3_music_f_mark", - "a3_plants_f_bush", - "a3_roads_f", - "a3_rocks_f", - "a3_signs_f", - "a3_signs_f_ad", - "a3_soft_f", - "a3_soft_f_beta_quadbike", - "a3_soft_f_bootcamp_offroad_01", - "a3_soft_f_bootcamp_quadbike", - "a3_soft_f_bootcamp_truck", - "a3_soft_f_car", - "a3_soft_f_crusher_ugv", - "a3_soft_f_epc_truck_03", - "a3_soft_f_gamma_hemtt", - "a3_soft_f_gamma_offroad", - "a3_soft_f_gamma_quadbike", - "a3_soft_f_gamma_truckheavy", - "a3_soft_f_heli_car", - "a3_soft_f_heli_crusher_ugv", - "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_suv", - "a3_soft_f_heli_truck", - "a3_soft_f_hemtt", - "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_suv", - "a3_soft_f_truck", - "a3_soft_f_truckheavy", - "a3_sounds_f", - "a3_sounds_f_bootcamp", - "a3_sounds_f_epb", - "a3_sounds_f_epc", - "a3_static_f", - "a3_static_f_beta_mortar_01", - "a3_static_f_gamma", - "a3_static_f_gamma_aa", - "a3_static_f_gamma_at", - "a3_static_f_gamma_mortar_01", - "a3_static_f_mark_designator_01", - "a3_static_f_mark_designator_02", - "a3_static_f_mortar_01", - "a3_structures_f", - "a3_structures_f_bootcamp_civ_camping", - "a3_structures_f_bootcamp_civ_sportsgrounds", - "a3_structures_f_bootcamp_ind_cargo", - "a3_structures_f_bootcamp_items_electronics", - "a3_structures_f_bootcamp_items_food", - "a3_structures_f_bootcamp_items_sport", - "a3_structures_f_bootcamp_system", - "a3_structures_f_bootcamp_training", - "a3_structures_f_bootcamp_vr_blocks", - "a3_structures_f_bootcamp_vr_coverobjects", - "a3_structures_f_bootcamp_vr_helpers", - "a3_structures_f_bridges", - "a3_structures_f_civ", - "a3_structures_f_civ_accessories", - "a3_structures_f_civ_ancient", - "a3_structures_f_civ_belltowers", - "a3_structures_f_civ_calvaries", - "a3_structures_f_civ_camping", - "a3_structures_f_civ_chapels", - "a3_structures_f_civ_constructions", - "a3_structures_f_civ_dead", - "a3_structures_f_civ_garbage", - "a3_structures_f_civ_graffiti", - "a3_structures_f_civ_infoboards", - "a3_structures_f_civ_kiosks", - "a3_structures_f_civ_lamps", - "a3_structures_f_civ_market", - "a3_structures_f_civ_offices", - "a3_structures_f_civ_pavements", - "a3_structures_f_civ_playground", - "a3_structures_f_civ_sportsgrounds", - "a3_structures_f_civ_statues", - "a3_structures_f_civ_tourism", - "a3_structures_f_dominants", - "a3_structures_f_dominants_amphitheater", - "a3_structures_f_dominants_castle", - "a3_structures_f_dominants_church", - "a3_structures_f_dominants_hospital", - "a3_structures_f_dominants_lighthouse", - "a3_structures_f_dominants_wip", - "a3_structures_f_epa_civ_camping", - "a3_structures_f_epa_civ_constructions", - "a3_structures_f_epa_items_electronics", - "a3_structures_f_epa_items_food", - "a3_structures_f_epa_items_medical", - "a3_structures_f_epa_items_tools", - "a3_structures_f_epa_items_vessels", - "a3_structures_f_epa_mil_scrapyard", - "a3_structures_f_epa_walls", - "a3_structures_f_epb_civ_accessories", - "a3_structures_f_epb_civ_camping", - "a3_structures_f_epb_civ_dead", - "a3_structures_f_epb_civ_garbage", - "a3_structures_f_epb_civ_graffiti", - "a3_structures_f_epb_civ_playground", - "a3_structures_f_epb_furniture", - "a3_structures_f_epb_items_documents", - "a3_structures_f_epb_items_luggage", - "a3_structures_f_epb_items_military", - "a3_structures_f_epb_items_vessels", - "a3_structures_f_epb_naval_fishing", - "a3_structures_f_epc_civ_accessories", - "a3_structures_f_epc_civ_camping", - "a3_structures_f_epc_civ_garbage", - "a3_structures_f_epc_civ_infoboards", - "a3_structures_f_epc_civ_kiosks", - "a3_structures_f_epc_civ_playground", - "a3_structures_f_epc_civ_tourism", - "a3_structures_f_epc_dominants_ghosthotel", - "a3_structures_f_epc_dominants_stadium", - "a3_structures_f_epc_furniture", - "a3_structures_f_epc_items_documents", - "a3_structures_f_epc_items_electronics", - "a3_structures_f_epc_walls", - "a3_structures_f_furniture", - "a3_structures_f_heli_civ_accessories", - "a3_structures_f_heli_civ_constructions", - "a3_structures_f_heli_civ_garbage", - "a3_structures_f_heli_civ_market", - "a3_structures_f_heli_furniture", - "a3_structures_f_heli_ind_airport", - "a3_structures_f_heli_ind_cargo", - "a3_structures_f_heli_ind_machines", - "a3_structures_f_heli_items_airport", - "a3_structures_f_heli_items_electronics", - "a3_structures_f_heli_items_food", - "a3_structures_f_heli_items_luggage", - "a3_structures_f_heli_items_sport", - "a3_structures_f_heli_items_tools", - "a3_structures_f_heli_vr_helpers", - "a3_structures_f_households", - "a3_structures_f_households_addons", - "a3_structures_f_households_house_big01", - "a3_structures_f_households_house_big02", - "a3_structures_f_households_house_shop01", - "a3_structures_f_households_house_shop02", - "a3_structures_f_households_house_small01", - "a3_structures_f_households_house_small02", - "a3_structures_f_households_house_small03", - "a3_structures_f_households_slum", - "a3_structures_f_households_stone_big", - "a3_structures_f_households_stone_shed", - "a3_structures_f_households_stone_small", - "a3_structures_f_households_wip", - "a3_structures_f_ind", - "a3_structures_f_ind_airport", - "a3_structures_f_ind_cargo", - "a3_structures_f_ind_carservice", - "a3_structures_f_ind_concretemixingplant", - "a3_structures_f_ind_crane", - "a3_structures_f_ind_dieselpowerplant", - "a3_structures_f_ind_factory", - "a3_structures_f_ind_fuelstation", - "a3_structures_f_ind_fuelstation_small", - "a3_structures_f_ind_pipes", - "a3_structures_f_ind_powerlines", - "a3_structures_f_ind_reservoirtank", - "a3_structures_f_ind_shed", - "a3_structures_f_ind_solarpowerplant", - "a3_structures_f_ind_tank", - "a3_structures_f_ind_transmitter_tower", - "a3_structures_f_ind_wavepowerplant", - "a3_structures_f_ind_windmill", - "a3_structures_f_ind_windpowerplant", - "a3_structures_f_items", - "a3_structures_f_items_cans", - "a3_structures_f_items_documents", - "a3_structures_f_items_electronics", - "a3_structures_f_items_gadgets", - "a3_structures_f_items_luggage", - "a3_structures_f_items_medical", - "a3_structures_f_items_military", - "a3_structures_f_items_stationery", - "a3_structures_f_items_tools", - "a3_structures_f_items_valuables", - "a3_structures_f_items_vessels", - "a3_structures_f_kart_civ_sportsgrounds", - "a3_structures_f_kart_mil_flags", - "a3_structures_f_kart_signs_companies", - "a3_structures_f_mark_items_military", - "a3_structures_f_mark_items_sport", - "a3_structures_f_mark_mil_flags", - "a3_structures_f_mark_training", - "a3_structures_f_mark_vr_helpers", - "a3_structures_f_mark_vr_shapes", - "a3_structures_f_mark_vr_targets", - "a3_structures_f_mil", - "a3_structures_f_mil_bagbunker", - "a3_structures_f_mil_bagfence", - "a3_structures_f_mil_barracks", - "a3_structures_f_mil_bunker", - "a3_structures_f_mil_cargo", - "a3_structures_f_mil_flags", - "a3_structures_f_mil_fortification", - "a3_structures_f_mil_helipads", - "a3_structures_f_mil_offices", - "a3_structures_f_mil_radar", - "a3_structures_f_mil_scrapyard", - "a3_structures_f_mil_shelters", - "a3_structures_f_mil_tenthangar", - "a3_structures_f_naval", - "a3_structures_f_naval_buoys", - "a3_structures_f_naval_fishing", - "a3_structures_f_naval_piers", - "a3_structures_f_naval_rowboats", - "a3_structures_f_research", - "a3_structures_f_signs_companies", - "a3_structures_f_system", - "a3_structures_f_training", - "a3_structures_f_training_invisibletarget", - "a3_structures_f_walls", - "a3_structures_f_wrecks", - "a3_supplies_f_heli", - "a3_supplies_f_heli_bladders", - "a3_supplies_f_heli_cargonets", - "a3_supplies_f_heli_fuel", - "a3_supplies_f_heli_slingload", - "a3_supplies_f_mark", - "a3_uav_f_characters_f_gamma", - "a3_uav_f_weapons_f_gamma_ammoboxes", - "a3_ui_f", - "a3_ui_f_bootcamp", - "a3_ui_f_curator", - "a3_ui_f_heli", - "a3_ui_f_kart", - "a3_ui_f_mark", - "a3_ui_f_mp_mark", - "a3_uifonts_f", - "a3_weapons_f", - "a3_weapons_f_aaf", - "a3_weapons_f_acc", - "a3_weapons_f_ammoboxes", - "a3_weapons_f_beta", - "a3_weapons_f_beta_acc", - "a3_weapons_f_beta_ammoboxes", - "a3_weapons_f_beta_ebr", - "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_m320", - "a3_weapons_f_csat", - "a3_weapons_f_dummyweapons", - "a3_weapons_f_ebr", - "a3_weapons_f_epa", - "a3_weapons_f_epa_acc", - "a3_weapons_f_epa_ammoboxes", - "a3_weapons_f_epa_ebr", - "a3_weapons_f_epa_longrangerifles_dmr_01", - "a3_weapons_f_epa_longrangerifles_gm6", - "a3_weapons_f_epa_rifles_mx", - "a3_weapons_f_epb", - "a3_weapons_f_epb_acc", - "a3_weapons_f_epb_ammoboxes", - "a3_weapons_f_epb_longrangerifles_gm3", - "a3_weapons_f_epb_longrangerifles_m320", - "a3_weapons_f_epb_rifles_mx_black", - "a3_weapons_f_epc", - "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_headgear", - "a3_weapons_f_itemholders", - "a3_weapons_f_items", - "a3_weapons_f_kart", - "a3_weapons_f_kart_pistols_pistol_signal_f", - "a3_weapons_f_launchers_law", - "a3_weapons_f_launchers_nlaw", - "a3_weapons_f_launchers_titan", - "a3_weapons_f_longrangerifles_gm6", - "a3_weapons_f_longrangerifles_m320", - "a3_weapons_f_machineguns_m200", - "a3_weapons_f_machineguns_zafir", - "a3_weapons_f_mark", - "a3_weapons_f_mark_acc", - "a3_weapons_f_mark_ebr", - "a3_weapons_f_mark_longrangerifles_dmr_01", - "a3_weapons_f_mark_longrangerifles_dmr_02", - "a3_weapons_f_mark_longrangerifles_dmr_03", - "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_gm6", - "a3_weapons_f_mark_longrangerifles_gm6_camo", - "a3_weapons_f_mark_longrangerifles_m320", - "a3_weapons_f_mark_longrangerifles_m320_camo", - "a3_weapons_f_mark_machineguns_m200", - "a3_weapons_f_mark_machineguns_mmg_01", - "a3_weapons_f_mark_machineguns_mmg_02", - "a3_weapons_f_mark_machineguns_zafir", - "a3_weapons_f_mark_rifles_khaybar", - "a3_weapons_f_mark_rifles_mk20", - "a3_weapons_f_mark_rifles_mx", - "a3_weapons_f_mark_rifles_sdar", - "a3_weapons_f_mark_rifles_trg20", - "a3_weapons_f_nato", - "a3_weapons_f_pistols_acpc2", - "a3_weapons_f_pistols_p07", - "a3_weapons_f_pistols_pdw2000", - "a3_weapons_f_pistols_pistol_heavy_01", - "a3_weapons_f_pistols_pistol_heavy_02", - "a3_weapons_f_pistols_rook40", - "a3_weapons_f_rifles_khaybar", - "a3_weapons_f_rifles_mk20", - "a3_weapons_f_rifles_mx", - "a3_weapons_f_rifles_sdar", - "a3_weapons_f_rifles_smg_02", - "a3_weapons_f_rifles_trg20", - "a3_weapons_f_rifles_vector", - "a3_weapons_f_uniforms", - "a3_weapons_f_vests", - "a3data", - "map_vr", - "extended_eventhandlers", "CBA_UI", "CBA_XEH", "CBA_XEH_A3" - }; - author[] = {"ACE Team"}; - authorUrl = ""; - versionDesc = "A.C.E."; - versionAct = QUOTE(['MAIN',_this] execVM '\z\ace\addons\main\about.sqf';); - VERSION_CONFIG; - }; -}; - -class CfgMods { - class PREFIX { - dir = "@ACE"; - name = "Core - Advanced Combat Environment"; - picture = "A3\Ui_f\data\Logos\arma3_expansion_alpha_ca"; - hidePicture = "true"; - hideName = "true"; - actionName = "Website"; - action = "http://ace.dev-heaven.net"; - description = "Bugtracker: "; - }; -}; - -class CfgSettings { - class CBA { - class Versioning { - class PREFIX { - level = DEFAULT_VERSIONING_LEVEL; - handler = "ace_common_fnc_mismatch"; - class Dependencies { - CBA[]={"cba_main", {1,0,0}, "true"}; - XEH[]={"cba_xeh", {1,0,0}, "true"}; - }; - }; - }; - /* - class Registry { - class PREFIX { - removed[] = {}; - }; - }; - */ - }; -}; - -#include "CfgModuleCategories.hpp" +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = { + "a3_air_f", + "a3_air_f_beta", + "a3_air_f_beta_heli_attack_01", + "a3_air_f_beta_heli_attack_02", + "a3_air_f_beta_heli_transport_01", + "a3_air_f_beta_heli_transport_02", + "a3_air_f_beta_parachute_01", + "a3_air_f_beta_parachute_02", + "a3_air_f_epb_heli_light_03", + "a3_air_f_epc_plane_cas_01", + "a3_air_f_epc_plane_cas_02", + "a3_air_f_epc_plane_fighter_03", + "a3_air_f_gamma_plane_fighter_03", + "a3_air_f_gamma_uav_01", + "a3_air_f_gamma_uav_02", + "a3_air_f_heli", + "a3_air_f_heli_heli_attack_01", + "a3_air_f_heli_heli_attack_02", + "a3_air_f_heli_heli_light_01", + "a3_air_f_heli_heli_light_02", + "a3_air_f_heli_heli_light_03", + "a3_air_f_heli_heli_transport_01", + "a3_air_f_heli_heli_transport_02", + "a3_air_f_heli_heli_transport_03", + "a3_air_f_heli_heli_transport_04", + "a3_air_f_heli_light_01", + "a3_air_f_heli_light_02", + "a3_animals_f", + "a3_animals_f_animconfig", + "a3_animals_f_chicken", + "a3_animals_f_dog", + "a3_animals_f_fishes", + "a3_animals_f_goat", + "a3_animals_f_kestrel", + "a3_animals_f_rabbit", + "a3_animals_f_seagull", + "a3_animals_f_sheep", + "a3_animals_f_snakes", + "a3_animals_f_turtle", + "a3_anims_f", + "a3_anims_f_config_sdr", + "a3_anims_f_epa", + "a3_anims_f_epc", + "a3_anims_f_heli", + "a3_anims_f_kart", + "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_02", + "a3_armor_f_epb_apc_tracked_03", + "a3_armor_f_epb_mbt_03", + "a3_armor_f_epc_mbt_01", + "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_boat_armed_01", + "a3_boat_f_beta_boat_transport_01", + "a3_boat_f_boat_armed_01", + "a3_boat_f_boat_transport_01", + "a3_boat_f_civilian_boat", + "a3_boat_f_epc_submarine_01_f", + "a3_boat_f_gamma_boat_transport_01", + "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_heli", + "a3_characters_f", + "a3_characters_f_beta", + "a3_characters_f_blufor", + "a3_characters_f_bootcamp", + "a3_characters_f_bootcamp_common", + "a3_characters_f_civil", + "a3_characters_f_common", + "a3_characters_f_epa", + "a3_characters_f_epb", + "a3_characters_f_epb_heads", + "a3_characters_f_epc", + "a3_characters_f_gamma", + "a3_characters_f_heads", + "a3_characters_f_indep", + "a3_characters_f_kart", + "a3_characters_f_mark", + "a3_characters_f_opfor", + "a3_characters_f_proxies", + "a3_data_f", + "a3_data_f_bootcamp", + "a3_data_f_curator", + "a3_data_f_curator_characters", + "a3_data_f_curator_eagle", + "a3_data_f_curator_intel", + "a3_data_f_curator_misc", + "a3_data_f_curator_respawn", + "a3_data_f_curator_virtual", + "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_dubbing_radio_f", + "a3_editor_f", + "a3_functions_f", + "a3_functions_f_bootcamp", + "a3_functions_f_curator", + "a3_functions_f_epa", + "a3_functions_f_epc", + "a3_functions_f_heli", + "a3_functions_f_mark", + "a3_functions_f_mp_mark", + "a3_language_f", + "a3_language_f_beta", + "a3_language_f_bootcamp", + "a3_language_f_curator", + "a3_language_f_epa", + "a3_language_f_epb", + "a3_language_f_epc", + "a3_language_f_gamma", + "a3_language_f_heli", + "a3_language_f_kart", + "a3_language_f_mark", + "a3_language_f_mp_mark", + "a3_languagemissions_f", + "a3_languagemissions_f_beta", + "a3_languagemissions_f_gamma", + "a3_languagemissions_f_kart", + "a3_languagemissions_f_mp_mark", + "a3_map_altis", + "a3_map_altis_scenes", + "a3_map_data", + "a3_map_stratis", + "a3_map_stratis_scenes", + "a3_map_vr_scenes", + "a3_misc_f", + "a3_misc_f_helpers", + "a3_missions_f", + "a3_missions_f_beta", + "a3_missions_f_bootcamp", + "a3_missions_f_curator", + "a3_missions_f_epa", + "a3_missions_f_epb", + "a3_missions_f_epc", + "a3_missions_f_gamma", + "a3_missions_f_heli", + "a3_missions_f_kart", + "a3_missions_f_mark", + "a3_missions_f_mp_mark", + "a3_modules_f", + "a3_modules_f_beta", + "a3_modules_f_beta_firingdrills", + "a3_modules_f_bootcamp", + "a3_modules_f_bootcamp_misc", + "a3_modules_f_curator", + "a3_modules_f_curator_animals", + "a3_modules_f_curator_cas", + "a3_modules_f_curator_chemlights", + "a3_modules_f_curator_curator", + "a3_modules_f_curator_effects", + "a3_modules_f_curator_environment", + "a3_modules_f_curator_flares", + "a3_modules_f_curator_intel", + "a3_modules_f_curator_lightning", + "a3_modules_f_curator_mines", + "a3_modules_f_curator_misc", + "a3_modules_f_curator_multiplayer", + "a3_modules_f_curator_objectives", + "a3_modules_f_curator_ordnance", + "a3_modules_f_curator_respawn", + "a3_modules_f_curator_smokeshells", + "a3_modules_f_dyno", + "a3_modules_f_effects", + "a3_modules_f_epb", + "a3_modules_f_epb_misc", + "a3_modules_f_events", + "a3_modules_f_groupmodifiers", + "a3_modules_f_hc", + "a3_modules_f_heli", + "a3_modules_f_heli_spawnai", + "a3_modules_f_intel", + "a3_modules_f_kart", + "a3_modules_f_kart_timetrials", + "a3_modules_f_livefeed", + "a3_modules_f_mark", + "a3_modules_f_mark_firingdrills", + "a3_modules_f_mark_objectives", + "a3_modules_f_marta", + "a3_modules_f_misc", + "a3_modules_f_mp_mark", + "a3_modules_f_multiplayer", + "a3_modules_f_objectmodifiers", + "a3_modules_f_sites", + "a3_modules_f_skirmish", + "a3_modules_f_strategicmap", + "a3_modules_f_supports", + "a3_modules_f_uav", + "a3_music_f", + "a3_music_f_bootcamp", + "a3_music_f_epa", + "a3_music_f_epb", + "a3_music_f_epc", + "a3_music_f_heli", + "a3_music_f_mark", + "a3_plants_f_bush", + "a3_roads_f", + "a3_rocks_f", + "a3_signs_f", + "a3_signs_f_ad", + "a3_soft_f", + "a3_soft_f_beta_quadbike", + "a3_soft_f_bootcamp_offroad_01", + "a3_soft_f_bootcamp_quadbike", + "a3_soft_f_bootcamp_truck", + "a3_soft_f_car", + "a3_soft_f_crusher_ugv", + "a3_soft_f_epc_truck_03", + "a3_soft_f_gamma_hemtt", + "a3_soft_f_gamma_offroad", + "a3_soft_f_gamma_quadbike", + "a3_soft_f_gamma_truckheavy", + "a3_soft_f_heli_car", + "a3_soft_f_heli_crusher_ugv", + "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_suv", + "a3_soft_f_heli_truck", + "a3_soft_f_hemtt", + "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_suv", + "a3_soft_f_truck", + "a3_soft_f_truckheavy", + "a3_sounds_f", + "a3_sounds_f_bootcamp", + "a3_sounds_f_epb", + "a3_sounds_f_epc", + "a3_static_f", + "a3_static_f_beta_mortar_01", + "a3_static_f_gamma", + "a3_static_f_gamma_aa", + "a3_static_f_gamma_at", + "a3_static_f_gamma_mortar_01", + "a3_static_f_mark_designator_01", + "a3_static_f_mark_designator_02", + "a3_static_f_mortar_01", + "a3_structures_f", + "a3_structures_f_bootcamp_civ_camping", + "a3_structures_f_bootcamp_civ_sportsgrounds", + "a3_structures_f_bootcamp_ind_cargo", + "a3_structures_f_bootcamp_items_electronics", + "a3_structures_f_bootcamp_items_food", + "a3_structures_f_bootcamp_items_sport", + "a3_structures_f_bootcamp_system", + "a3_structures_f_bootcamp_training", + "a3_structures_f_bootcamp_vr_blocks", + "a3_structures_f_bootcamp_vr_coverobjects", + "a3_structures_f_bootcamp_vr_helpers", + "a3_structures_f_bridges", + "a3_structures_f_civ", + "a3_structures_f_civ_accessories", + "a3_structures_f_civ_ancient", + "a3_structures_f_civ_belltowers", + "a3_structures_f_civ_calvaries", + "a3_structures_f_civ_camping", + "a3_structures_f_civ_chapels", + "a3_structures_f_civ_constructions", + "a3_structures_f_civ_dead", + "a3_structures_f_civ_garbage", + "a3_structures_f_civ_graffiti", + "a3_structures_f_civ_infoboards", + "a3_structures_f_civ_kiosks", + "a3_structures_f_civ_lamps", + "a3_structures_f_civ_market", + "a3_structures_f_civ_offices", + "a3_structures_f_civ_pavements", + "a3_structures_f_civ_playground", + "a3_structures_f_civ_sportsgrounds", + "a3_structures_f_civ_statues", + "a3_structures_f_civ_tourism", + "a3_structures_f_dominants", + "a3_structures_f_dominants_amphitheater", + "a3_structures_f_dominants_castle", + "a3_structures_f_dominants_church", + "a3_structures_f_dominants_hospital", + "a3_structures_f_dominants_lighthouse", + "a3_structures_f_dominants_wip", + "a3_structures_f_epa_civ_camping", + "a3_structures_f_epa_civ_constructions", + "a3_structures_f_epa_items_electronics", + "a3_structures_f_epa_items_food", + "a3_structures_f_epa_items_medical", + "a3_structures_f_epa_items_tools", + "a3_structures_f_epa_items_vessels", + "a3_structures_f_epa_mil_scrapyard", + "a3_structures_f_epa_walls", + "a3_structures_f_epb_civ_accessories", + "a3_structures_f_epb_civ_camping", + "a3_structures_f_epb_civ_dead", + "a3_structures_f_epb_civ_garbage", + "a3_structures_f_epb_civ_graffiti", + "a3_structures_f_epb_civ_playground", + "a3_structures_f_epb_furniture", + "a3_structures_f_epb_items_documents", + "a3_structures_f_epb_items_luggage", + "a3_structures_f_epb_items_military", + "a3_structures_f_epb_items_vessels", + "a3_structures_f_epb_naval_fishing", + "a3_structures_f_epc_civ_accessories", + "a3_structures_f_epc_civ_camping", + "a3_structures_f_epc_civ_garbage", + "a3_structures_f_epc_civ_infoboards", + "a3_structures_f_epc_civ_kiosks", + "a3_structures_f_epc_civ_playground", + "a3_structures_f_epc_civ_tourism", + "a3_structures_f_epc_dominants_ghosthotel", + "a3_structures_f_epc_dominants_stadium", + "a3_structures_f_epc_furniture", + "a3_structures_f_epc_items_documents", + "a3_structures_f_epc_items_electronics", + "a3_structures_f_epc_walls", + "a3_structures_f_furniture", + "a3_structures_f_heli_civ_accessories", + "a3_structures_f_heli_civ_constructions", + "a3_structures_f_heli_civ_garbage", + "a3_structures_f_heli_civ_market", + "a3_structures_f_heli_furniture", + "a3_structures_f_heli_ind_airport", + "a3_structures_f_heli_ind_cargo", + "a3_structures_f_heli_ind_machines", + "a3_structures_f_heli_items_airport", + "a3_structures_f_heli_items_electronics", + "a3_structures_f_heli_items_food", + "a3_structures_f_heli_items_luggage", + "a3_structures_f_heli_items_sport", + "a3_structures_f_heli_items_tools", + "a3_structures_f_heli_vr_helpers", + "a3_structures_f_households", + "a3_structures_f_households_addons", + "a3_structures_f_households_house_big01", + "a3_structures_f_households_house_big02", + "a3_structures_f_households_house_shop01", + "a3_structures_f_households_house_shop02", + "a3_structures_f_households_house_small01", + "a3_structures_f_households_house_small02", + "a3_structures_f_households_house_small03", + "a3_structures_f_households_slum", + "a3_structures_f_households_stone_big", + "a3_structures_f_households_stone_shed", + "a3_structures_f_households_stone_small", + "a3_structures_f_households_wip", + "a3_structures_f_ind", + "a3_structures_f_ind_airport", + "a3_structures_f_ind_cargo", + "a3_structures_f_ind_carservice", + "a3_structures_f_ind_concretemixingplant", + "a3_structures_f_ind_crane", + "a3_structures_f_ind_dieselpowerplant", + "a3_structures_f_ind_factory", + "a3_structures_f_ind_fuelstation", + "a3_structures_f_ind_fuelstation_small", + "a3_structures_f_ind_pipes", + "a3_structures_f_ind_powerlines", + "a3_structures_f_ind_reservoirtank", + "a3_structures_f_ind_shed", + "a3_structures_f_ind_solarpowerplant", + "a3_structures_f_ind_tank", + "a3_structures_f_ind_transmitter_tower", + "a3_structures_f_ind_wavepowerplant", + "a3_structures_f_ind_windmill", + "a3_structures_f_ind_windpowerplant", + "a3_structures_f_items", + "a3_structures_f_items_cans", + "a3_structures_f_items_documents", + "a3_structures_f_items_electronics", + "a3_structures_f_items_gadgets", + "a3_structures_f_items_luggage", + "a3_structures_f_items_medical", + "a3_structures_f_items_military", + "a3_structures_f_items_stationery", + "a3_structures_f_items_tools", + "a3_structures_f_items_valuables", + "a3_structures_f_items_vessels", + "a3_structures_f_kart_civ_sportsgrounds", + "a3_structures_f_kart_mil_flags", + "a3_structures_f_kart_signs_companies", + "a3_structures_f_mark_items_military", + "a3_structures_f_mark_items_sport", + "a3_structures_f_mark_mil_flags", + "a3_structures_f_mark_training", + "a3_structures_f_mark_vr_helpers", + "a3_structures_f_mark_vr_shapes", + "a3_structures_f_mark_vr_targets", + "a3_structures_f_mil", + "a3_structures_f_mil_bagbunker", + "a3_structures_f_mil_bagfence", + "a3_structures_f_mil_barracks", + "a3_structures_f_mil_bunker", + "a3_structures_f_mil_cargo", + "a3_structures_f_mil_flags", + "a3_structures_f_mil_fortification", + "a3_structures_f_mil_helipads", + "a3_structures_f_mil_offices", + "a3_structures_f_mil_radar", + "a3_structures_f_mil_scrapyard", + "a3_structures_f_mil_shelters", + "a3_structures_f_mil_tenthangar", + "a3_structures_f_naval", + "a3_structures_f_naval_buoys", + "a3_structures_f_naval_fishing", + "a3_structures_f_naval_piers", + "a3_structures_f_naval_rowboats", + "a3_structures_f_research", + "a3_structures_f_signs_companies", + "a3_structures_f_system", + "a3_structures_f_training", + "a3_structures_f_training_invisibletarget", + "a3_structures_f_walls", + "a3_structures_f_wrecks", + "a3_supplies_f_heli", + "a3_supplies_f_heli_bladders", + "a3_supplies_f_heli_cargonets", + "a3_supplies_f_heli_fuel", + "a3_supplies_f_heli_slingload", + "a3_supplies_f_mark", + "a3_uav_f_characters_f_gamma", + "a3_uav_f_weapons_f_gamma_ammoboxes", + "a3_ui_f", + "a3_ui_f_bootcamp", + "a3_ui_f_curator", + "a3_ui_f_heli", + "a3_ui_f_kart", + "a3_ui_f_mark", + "a3_ui_f_mp_mark", + "a3_uifonts_f", + "a3_weapons_f", + "a3_weapons_f_aaf", + "a3_weapons_f_acc", + "a3_weapons_f_ammoboxes", + "a3_weapons_f_beta", + "a3_weapons_f_beta_acc", + "a3_weapons_f_beta_ammoboxes", + "a3_weapons_f_beta_ebr", + "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_m320", + "a3_weapons_f_csat", + "a3_weapons_f_dummyweapons", + "a3_weapons_f_ebr", + "a3_weapons_f_epa", + "a3_weapons_f_epa_acc", + "a3_weapons_f_epa_ammoboxes", + "a3_weapons_f_epa_ebr", + "a3_weapons_f_epa_longrangerifles_dmr_01", + "a3_weapons_f_epa_longrangerifles_gm6", + "a3_weapons_f_epa_rifles_mx", + "a3_weapons_f_epb", + "a3_weapons_f_epb_acc", + "a3_weapons_f_epb_ammoboxes", + "a3_weapons_f_epb_longrangerifles_gm3", + "a3_weapons_f_epb_longrangerifles_m320", + "a3_weapons_f_epb_rifles_mx_black", + "a3_weapons_f_epc", + "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_headgear", + "a3_weapons_f_itemholders", + "a3_weapons_f_items", + "a3_weapons_f_kart", + "a3_weapons_f_kart_pistols_pistol_signal_f", + "a3_weapons_f_launchers_law", + "a3_weapons_f_launchers_nlaw", + "a3_weapons_f_launchers_titan", + "a3_weapons_f_longrangerifles_gm6", + "a3_weapons_f_longrangerifles_m320", + "a3_weapons_f_machineguns_m200", + "a3_weapons_f_machineguns_zafir", + "a3_weapons_f_mark", + "a3_weapons_f_mark_acc", + "a3_weapons_f_mark_ebr", + "a3_weapons_f_mark_longrangerifles_dmr_01", + "a3_weapons_f_mark_longrangerifles_dmr_02", + "a3_weapons_f_mark_longrangerifles_dmr_03", + "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_gm6", + "a3_weapons_f_mark_longrangerifles_gm6_camo", + "a3_weapons_f_mark_longrangerifles_m320", + "a3_weapons_f_mark_longrangerifles_m320_camo", + "a3_weapons_f_mark_machineguns_m200", + "a3_weapons_f_mark_machineguns_mmg_01", + "a3_weapons_f_mark_machineguns_mmg_02", + "a3_weapons_f_mark_machineguns_zafir", + "a3_weapons_f_mark_rifles_khaybar", + "a3_weapons_f_mark_rifles_mk20", + "a3_weapons_f_mark_rifles_mx", + "a3_weapons_f_mark_rifles_sdar", + "a3_weapons_f_mark_rifles_trg20", + "a3_weapons_f_nato", + "a3_weapons_f_pistols_acpc2", + "a3_weapons_f_pistols_p07", + "a3_weapons_f_pistols_pdw2000", + "a3_weapons_f_pistols_pistol_heavy_01", + "a3_weapons_f_pistols_pistol_heavy_02", + "a3_weapons_f_pistols_rook40", + "a3_weapons_f_rifles_khaybar", + "a3_weapons_f_rifles_mk20", + "a3_weapons_f_rifles_mx", + "a3_weapons_f_rifles_sdar", + "a3_weapons_f_rifles_smg_02", + "a3_weapons_f_rifles_trg20", + "a3_weapons_f_rifles_vector", + "a3_weapons_f_uniforms", + "a3_weapons_f_vests", + "a3data", + "map_vr", + "extended_eventhandlers", "CBA_UI", "CBA_XEH", "CBA_XEH_A3" + }; + author[] = {"ACE Team"}; + authorUrl = ""; + versionDesc = "A.C.E."; + versionAct = QUOTE(['MAIN',_this] execVM '\z\ace\addons\main\about.sqf';); + VERSION_CONFIG; + }; +}; + +class CfgMods { + class PREFIX { + dir = "@ACE"; + name = "Core - Advanced Combat Environment"; + picture = "A3\Ui_f\data\Logos\arma3_expansion_alpha_ca"; + hidePicture = "true"; + hideName = "true"; + actionName = "Website"; + action = "http://ace.dev-heaven.net"; + description = "Bugtracker: "; + }; +}; + +class CfgSettings { + class CBA { + class Versioning { + class PREFIX { + level = DEFAULT_VERSIONING_LEVEL; + handler = "ace_common_fnc_mismatch"; + class Dependencies { + CBA[]={"cba_main", {1,0,0}, "true"}; + XEH[]={"cba_xeh", {1,0,0}, "true"}; + }; + }; + }; + /* + class Registry { + class PREFIX { + removed[] = {}; + }; + }; + */ + }; +}; + +#include "CfgModuleCategories.hpp" diff --git a/addons/main/license.sqf b/addons/main/license.sqf index 85d783f18d..d078710247 100644 --- a/addons/main/license.sqf +++ b/addons/main/license.sqf @@ -1,92 +1,92 @@ -License (short) -=============== - -You are free: -- to Share to copy, distribute and transmit the work - -Under the following conditions: -- Attribution You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work). -- Noncommercial You may not use this work for commercial purposes. -- No Derivative Works You may not alter, transform, or build upon this work. - -With the understanding that: - -Waiver Any of the above conditions can be waived if you get permission from the copyright holder. - -Public Domain Where the work or any of its elements is in the public domain under applicable law, that status is in no way affected by the license. - -Other Rights In no way are any of the following rights affected by the license: - - Your fair dealing or fair use rights, or other applicable copyright exceptions and limitations; - - The author's moral rights; - - Rights other persons may have either in the work itself or in how the work is used, such as publicity or privacy rights. - -Notice For any reuse or distribution, you must make clear to others the license terms of this work. The best way to do this is with a link to this web page. - - -Full license text -================= - -THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. - -BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. - -1. Definitions - -"Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. -"Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License. -"Distribute" means to make available to the public the original and copies of the Work through sale or other transfer of ownership. -"Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. -"Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. -"Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. -"You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. -"Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. -"Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. - -2. Fair Dealing Rights. - -Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. - -3. License Grant. - -Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: - -to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; and, to Distribute and Publicly Perform the Work including as incorporated in Collections. -The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats, but otherwise you have no rights to make Adaptations. Subject to 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights set forth in Section 4(d). - -4. Restrictions. - -The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: - -You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. -You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in connection with the exchange of copyrighted works. -If You Distribute, or Publicly Perform the Work or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work. The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Collection, at a minimum such credit will appear, if a credit for all contributing authors of Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. - -For the avoidance of doubt: - -Non-waivable Compulsory License Schemes. - -In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; -Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and, -Voluntary License Schemes. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b). -Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. - -5. Representations, Warranties and Disclaimer. - -UNLESS OTHERWISE MUTUALLY AGREED BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. - -6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -7. Termination. - -This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. -Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). - -Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. - -8. Miscellaneous. - -Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. -If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. -No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. -This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. -The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. +License (short) +=============== + +You are free: +- to Share to copy, distribute and transmit the work + +Under the following conditions: +- Attribution You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work). +- Noncommercial You may not use this work for commercial purposes. +- No Derivative Works You may not alter, transform, or build upon this work. + +With the understanding that: + +Waiver Any of the above conditions can be waived if you get permission from the copyright holder. + +Public Domain Where the work or any of its elements is in the public domain under applicable law, that status is in no way affected by the license. + +Other Rights In no way are any of the following rights affected by the license: + - Your fair dealing or fair use rights, or other applicable copyright exceptions and limitations; + - The author's moral rights; + - Rights other persons may have either in the work itself or in how the work is used, such as publicity or privacy rights. + +Notice For any reuse or distribution, you must make clear to others the license terms of this work. The best way to do this is with a link to this web page. + + +Full license text +================= + +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. + +1. Definitions + +"Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. +"Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License. +"Distribute" means to make available to the public the original and copies of the Work through sale or other transfer of ownership. +"Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. +"Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. +"Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. +"You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. +"Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. +"Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. + +2. Fair Dealing Rights. + +Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. + +3. License Grant. + +Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: + +to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; and, to Distribute and Publicly Perform the Work including as incorporated in Collections. +The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats, but otherwise you have no rights to make Adaptations. Subject to 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights set forth in Section 4(d). + +4. Restrictions. + +The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: + +You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. +You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in connection with the exchange of copyrighted works. +If You Distribute, or Publicly Perform the Work or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work. The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Collection, at a minimum such credit will appear, if a credit for all contributing authors of Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. + +For the avoidance of doubt: + +Non-waivable Compulsory License Schemes. + +In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; +Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and, +Voluntary License Schemes. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b). +Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. + +5. Representations, Warranties and Disclaimer. + +UNLESS OTHERWISE MUTUALLY AGREED BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + +6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination. + +This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. +Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). + +Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. + +8. Miscellaneous. + +Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. +If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. +No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. +This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. +The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. diff --git a/addons/main/license.txt b/addons/main/license.txt index 0c9a28cbc5..e97d9c51a3 100644 --- a/addons/main/license.txt +++ b/addons/main/license.txt @@ -1,92 +1,92 @@ -License (short) -=============== - -You are free: -- to Share to copy, distribute and transmit the work - -Under the following conditions: -- Attribution You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work). -- Noncommercial You may not use this work for commercial purposes. -- No Derivative Works You may not alter, transform, or build upon this work. - -With the understanding that: - -Waiver Any of the above conditions can be waived if you get permission from the copyright holder. - -Public Domain Where the work or any of its elements is in the public domain under applicable law, that status is in no way affected by the license. - -Other Rights In no way are any of the following rights affected by the license: - - Your fair dealing or fair use rights, or other applicable copyright exceptions and limitations; - - The author's moral rights; - - Rights other persons may have either in the work itself or in how the work is used, such as publicity or privacy rights. - -Notice For any reuse or distribution, you must make clear to others the license terms of this work. The best way to do this is with a link to this web page. - - -Full license text -================= - -THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. - -BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. - -1. Definitions - -"Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. -"Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License. -"Distribute" means to make available to the public the original and copies of the Work through sale or other transfer of ownership. -"Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. -"Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. -"Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. -"You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. -"Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. -"Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. - -2. Fair Dealing Rights. - -Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. - -3. License Grant. - -Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: - -to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; and, to Distribute and Publicly Perform the Work including as incorporated in Collections. -The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats, but otherwise you have no rights to make Adaptations. Subject to 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights set forth in Section 4(d). - -4. Restrictions. - -The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: - -You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. -You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in connection with the exchange of copyrighted works. -If You Distribute, or Publicly Perform the Work or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work. The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Collection, at a minimum such credit will appear, if a credit for all contributing authors of Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. - -For the avoidance of doubt: - -Non-waivable Compulsory License Schemes. - -In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; -Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and, -Voluntary License Schemes. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b). -Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. - -5. Representations, Warranties and Disclaimer. - -UNLESS OTHERWISE MUTUALLY AGREED BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. - -6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -7. Termination. - -This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. -Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). - -Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. - -8. Miscellaneous. - -Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. -If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. -No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. -This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. -The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. +License (short) +=============== + +You are free: +- to Share to copy, distribute and transmit the work + +Under the following conditions: +- Attribution You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work). +- Noncommercial You may not use this work for commercial purposes. +- No Derivative Works You may not alter, transform, or build upon this work. + +With the understanding that: + +Waiver Any of the above conditions can be waived if you get permission from the copyright holder. + +Public Domain Where the work or any of its elements is in the public domain under applicable law, that status is in no way affected by the license. + +Other Rights In no way are any of the following rights affected by the license: + - Your fair dealing or fair use rights, or other applicable copyright exceptions and limitations; + - The author's moral rights; + - Rights other persons may have either in the work itself or in how the work is used, such as publicity or privacy rights. + +Notice For any reuse or distribution, you must make clear to others the license terms of this work. The best way to do this is with a link to this web page. + + +Full license text +================= + +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. + +1. Definitions + +"Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. +"Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License. +"Distribute" means to make available to the public the original and copies of the Work through sale or other transfer of ownership. +"Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. +"Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. +"Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. +"You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. +"Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. +"Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. + +2. Fair Dealing Rights. + +Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. + +3. License Grant. + +Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: + +to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; and, to Distribute and Publicly Perform the Work including as incorporated in Collections. +The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats, but otherwise you have no rights to make Adaptations. Subject to 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights set forth in Section 4(d). + +4. Restrictions. + +The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: + +You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. +You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in connection with the exchange of copyrighted works. +If You Distribute, or Publicly Perform the Work or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work. The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Collection, at a minimum such credit will appear, if a credit for all contributing authors of Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. + +For the avoidance of doubt: + +Non-waivable Compulsory License Schemes. + +In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; +Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and, +Voluntary License Schemes. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b). +Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. + +5. Representations, Warranties and Disclaimer. + +UNLESS OTHERWISE MUTUALLY AGREED BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + +6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination. + +This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. +Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). + +Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. + +8. Miscellaneous. + +Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. +If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. +No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. +This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. +The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. diff --git a/addons/main/script_common.hpp b/addons/main/script_common.hpp index 5999f4f2dc..b3f6863d49 100644 --- a/addons/main/script_common.hpp +++ b/addons/main/script_common.hpp @@ -1,3 +1,3 @@ -#define __cr_managers "Manager: " -#define __cr_devs "Developer:" -#define __cr_testers "Contributor: " +#define __cr_managers "Manager: " +#define __cr_devs "Developer:" +#define __cr_testers "Contributor: " diff --git a/addons/main/script_component.hpp b/addons/main/script_component.hpp index 334a81570b..9a18b78a7a 100644 --- a/addons/main/script_component.hpp +++ b/addons/main/script_component.hpp @@ -1,14 +1,14 @@ -#define COMPONENT main -#include "\z\ace\addons\main\script_mod.hpp" - -// #define DEBUG_MODE_FULL - -#ifdef DEBUG_ENABLED_CORE - #define DEBUG_MODE_FULL -#endif - -#ifdef DEBUG_SETTINGS_CORE - #define DEBUG_SETTINGS DEBUG_SETTINGS_CORE -#endif - -#include "\z\ace\addons\main\script_macros.hpp" +#define COMPONENT main +#include "\z\ace\addons\main\script_mod.hpp" + +// #define DEBUG_MODE_FULL + +#ifdef DEBUG_ENABLED_CORE + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_CORE + #define DEBUG_SETTINGS DEBUG_SETTINGS_CORE +#endif + +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/main/script_config.hpp b/addons/main/script_config.hpp index f341c25a8e..e39240286e 100644 --- a/addons/main/script_config.hpp +++ b/addons/main/script_config.hpp @@ -1,43 +1,43 @@ -#define true 1 -#define false 0 - -#define private 0 -#define protected 1 -#define public 2 - -#define TEast 0 -#define TWest 1 -#define TGuerrila 2 -#define TCivilian 3 -#define TSideUnknown 4 -#define TEnemy 5 -#define TFriendly 6 -#define TLogic 7 - -#define VSoft 0 -#define VArmor 1 -#define VAir 2 - -#define LockNo 0 -#define LockCadet 1 -#define LockYes 2 - -#define ReadAndWrite 0 -#define ReadAndCreate 1 -#define ReadOnly 2 -#define ReadOnlyVerified 3 - -#define WeaponNoSlot 0 // dummy weapons -#define WeaponSlotPrimary 1 // primary weapons -#define WeaponSlotSecondary 16 // secondary weapons -#define WeaponSlotItem 256 // items -#define WeaponSlotBinocular 4096 // binocular -#define WeaponHardMounted 65536 - -#define CanSeeRadar 1 -#define CanSeeRye 2 -#define CanSeeOptics 4 -#define CanSeeEar 4 -#define CanSeeCompass 16 -#define CanSeeRadarC CanSeeRadar+CanSeeCompass -#define CanSeeAll 31 +#define true 1 +#define false 0 + +#define private 0 +#define protected 1 +#define public 2 + +#define TEast 0 +#define TWest 1 +#define TGuerrila 2 +#define TCivilian 3 +#define TSideUnknown 4 +#define TEnemy 5 +#define TFriendly 6 +#define TLogic 7 + +#define VSoft 0 +#define VArmor 1 +#define VAir 2 + +#define LockNo 0 +#define LockCadet 1 +#define LockYes 2 + +#define ReadAndWrite 0 +#define ReadAndCreate 1 +#define ReadOnly 2 +#define ReadOnlyVerified 3 + +#define WeaponNoSlot 0 // dummy weapons +#define WeaponSlotPrimary 1 // primary weapons +#define WeaponSlotSecondary 16 // secondary weapons +#define WeaponSlotItem 256 // items +#define WeaponSlotBinocular 4096 // binocular +#define WeaponHardMounted 65536 + +#define CanSeeRadar 1 +#define CanSeeRye 2 +#define CanSeeOptics 4 +#define CanSeeEar 4 +#define CanSeeCompass 16 +#define CanSeeRadarC CanSeeRadar+CanSeeCompass +#define CanSeeAll 31 diff --git a/addons/main/script_debug.hpp b/addons/main/script_debug.hpp index 4dd9cce1bc..578d76cc91 100644 --- a/addons/main/script_debug.hpp +++ b/addons/main/script_debug.hpp @@ -1,46 +1,46 @@ -/** -STACK TRACING -**/ -//#define ENABLE_CALLSTACK -//#define ENABLE_PERFORMANCE_COUNTERS -//#define DEBUG_EVENTS - -#ifdef ENABLE_CALLSTACK - -#define CALLSTACK(function) {private ['_ret']; if(ACE_IS_ERRORED) then { ['AUTO','AUTO'] call ACE_DUMPSTACK_FNC; ACE_IS_ERRORED = false; }; ACE_IS_ERRORED = true; ACE_STACK_TRACE set [ACE_STACK_DEPTH, [diag_tickTime, __FILE__, __LINE__, ACE_CURRENT_FUNCTION, 'ANON', _this]]; ACE_STACK_DEPTH = ACE_STACK_DEPTH + 1; ACE_CURRENT_FUNCTION = 'ANON'; _ret = _this call ##function; ACE_STACK_DEPTH = ACE_STACK_DEPTH - 1; ACE_IS_ERRORED = false; _ret;} -#define CALLSTACK_NAMED(function, functionName) {private ['_ret']; if(ACE_IS_ERRORED) then { ['AUTO','AUTO'] call ACE_DUMPSTACK_FNC; ACE_IS_ERRORED = false; }; ACE_IS_ERRORED = true; ACE_STACK_TRACE set [ACE_STACK_DEPTH, [diag_tickTime, __FILE__, __LINE__, ACE_CURRENT_FUNCTION, functionName, _this]]; ACE_STACK_DEPTH = ACE_STACK_DEPTH + 1; ACE_CURRENT_FUNCTION = functionName; _ret = _this call ##function; ACE_STACK_DEPTH = ACE_STACK_DEPTH - 1; ACE_IS_ERRORED = false; _ret;} -#define DUMPSTACK ([__FILE__, __LINE__] call ACE_DUMPSTACK_FNC) - -#define FUNC(var1) {private ['_ret']; if(ACE_IS_ERRORED) then { ['AUTO','AUTO'] call ACE_DUMPSTACK_FNC; ACE_IS_ERRORED = false; }; ACE_IS_ERRORED = true; ACE_STACK_TRACE set [ACE_STACK_DEPTH, [diag_tickTime, __FILE__, __LINE__, ACE_CURRENT_FUNCTION, 'TRIPLES(ADDON,fnc,var1)', _this]]; ACE_STACK_DEPTH = ACE_STACK_DEPTH + 1; ACE_CURRENT_FUNCTION = 'TRIPLES(ADDON,fnc,var1)'; _ret = _this call TRIPLES(ADDON,fnc,var1); ACE_STACK_DEPTH = ACE_STACK_DEPTH - 1; ACE_IS_ERRORED = false; _ret;} -#define EFUNC(var1,var2) {private ['_ret']; if(ACE_IS_ERRORED) then { ['AUTO','AUTO'] call ACE_DUMPSTACK_FNC; ACE_IS_ERRORED = false; }; ACE_IS_ERRORED = true; ACE_STACK_TRACE set [ACE_STACK_DEPTH, [diag_tickTime, __FILE__, __LINE__, ACE_CURRENT_FUNCTION, 'TRIPLES(DOUBLES(PREFIX,var1),fnc,var2)', _this]]; ACE_STACK_DEPTH = ACE_STACK_DEPTH + 1; ACE_CURRENT_FUNCTION = 'TRIPLES(DOUBLES(PREFIX,var1),fnc,var2)'; _ret = _this call TRIPLES(DOUBLES(PREFIX,var1),fnc,var2); ACE_STACK_DEPTH = ACE_STACK_DEPTH - 1; ACE_IS_ERRORED = false; _ret;} - -#else -#define CALLSTACK(function) function -#define CALLSTACK_NAMED(function, functionName) function -#define DUMPSTACK - -#define FUNC(var1) TRIPLES(ADDON,fnc,var1) -#define EFUNC(var1,var2) TRIPLES(DOUBLES(PREFIX,var1),fnc,var2) - -#endif - - -/** -PERFORMANCE COUNTERS SECTION -**/ -//#define ENABLE_PERFORMANCE_COUNTERS - -#ifdef ENABLE_PERFORMANCE_COUNTERS - #define CBA_fnc_addPerFrameHandler { _ret = [(_this select 0), (_this select 1), (_this select 2), #function] call CBA_fnc_addPerFrameHandler; if(isNil "ACE_PFH_COUNTER" ) then { ACE_PFH_COUNTER=[]; }; ACE_PFH_COUNTER pushBack [[_ret, __FILE__, __LINE__], [(_this select 0), (_this select 1), (_this select 2)]]; _ret } - - #define CREATE_COUNTER(x) if(isNil "ACE_COUNTERS" ) then { ACE_COUNTERS=[]; }; GVAR(DOUBLES(x,counter))=[]; GVAR(DOUBLES(x,counter)) set[0, QUOTE(GVAR(DOUBLES(x,counter)))]; GVAR(DOUBLES(x,counter)) set[1, diag_tickTime]; ACE_COUNTERS pushBack GVAR(DOUBLES(x,counter)); - #define BEGIN_COUNTER(x) if(isNil QUOTE(GVAR(DOUBLES(x,counter)))) then { CREATE_COUNTER(x) }; GVAR(DOUBLES(x,counter)) set[2, diag_tickTime]; - #define END_COUNTER(x) GVAR(DOUBLES(x,counter)) pushBack [(GVAR(DOUBLES(x,counter)) select 2), diag_tickTime]; - - #define DUMP_COUNTERS ([__FILE__, __LINE__] call ACE_DUMPCOUNTERS_FNC) -#else - #define CREATE_COUNTER(x) /* disabled */ - #define BEGIN_COUNTER(x) /* disabled */ - #define END_COUNTER(x) /* disabled */ - #define DUMP_COUNTERS /* disabled */ +/** +STACK TRACING +**/ +//#define ENABLE_CALLSTACK +//#define ENABLE_PERFORMANCE_COUNTERS +//#define DEBUG_EVENTS + +#ifdef ENABLE_CALLSTACK + +#define CALLSTACK(function) {private ['_ret']; if(ACE_IS_ERRORED) then { ['AUTO','AUTO'] call ACE_DUMPSTACK_FNC; ACE_IS_ERRORED = false; }; ACE_IS_ERRORED = true; ACE_STACK_TRACE set [ACE_STACK_DEPTH, [diag_tickTime, __FILE__, __LINE__, ACE_CURRENT_FUNCTION, 'ANON', _this]]; ACE_STACK_DEPTH = ACE_STACK_DEPTH + 1; ACE_CURRENT_FUNCTION = 'ANON'; _ret = _this call ##function; ACE_STACK_DEPTH = ACE_STACK_DEPTH - 1; ACE_IS_ERRORED = false; _ret;} +#define CALLSTACK_NAMED(function, functionName) {private ['_ret']; if(ACE_IS_ERRORED) then { ['AUTO','AUTO'] call ACE_DUMPSTACK_FNC; ACE_IS_ERRORED = false; }; ACE_IS_ERRORED = true; ACE_STACK_TRACE set [ACE_STACK_DEPTH, [diag_tickTime, __FILE__, __LINE__, ACE_CURRENT_FUNCTION, functionName, _this]]; ACE_STACK_DEPTH = ACE_STACK_DEPTH + 1; ACE_CURRENT_FUNCTION = functionName; _ret = _this call ##function; ACE_STACK_DEPTH = ACE_STACK_DEPTH - 1; ACE_IS_ERRORED = false; _ret;} +#define DUMPSTACK ([__FILE__, __LINE__] call ACE_DUMPSTACK_FNC) + +#define FUNC(var1) {private ['_ret']; if(ACE_IS_ERRORED) then { ['AUTO','AUTO'] call ACE_DUMPSTACK_FNC; ACE_IS_ERRORED = false; }; ACE_IS_ERRORED = true; ACE_STACK_TRACE set [ACE_STACK_DEPTH, [diag_tickTime, __FILE__, __LINE__, ACE_CURRENT_FUNCTION, 'TRIPLES(ADDON,fnc,var1)', _this]]; ACE_STACK_DEPTH = ACE_STACK_DEPTH + 1; ACE_CURRENT_FUNCTION = 'TRIPLES(ADDON,fnc,var1)'; _ret = _this call TRIPLES(ADDON,fnc,var1); ACE_STACK_DEPTH = ACE_STACK_DEPTH - 1; ACE_IS_ERRORED = false; _ret;} +#define EFUNC(var1,var2) {private ['_ret']; if(ACE_IS_ERRORED) then { ['AUTO','AUTO'] call ACE_DUMPSTACK_FNC; ACE_IS_ERRORED = false; }; ACE_IS_ERRORED = true; ACE_STACK_TRACE set [ACE_STACK_DEPTH, [diag_tickTime, __FILE__, __LINE__, ACE_CURRENT_FUNCTION, 'TRIPLES(DOUBLES(PREFIX,var1),fnc,var2)', _this]]; ACE_STACK_DEPTH = ACE_STACK_DEPTH + 1; ACE_CURRENT_FUNCTION = 'TRIPLES(DOUBLES(PREFIX,var1),fnc,var2)'; _ret = _this call TRIPLES(DOUBLES(PREFIX,var1),fnc,var2); ACE_STACK_DEPTH = ACE_STACK_DEPTH - 1; ACE_IS_ERRORED = false; _ret;} + +#else +#define CALLSTACK(function) function +#define CALLSTACK_NAMED(function, functionName) function +#define DUMPSTACK + +#define FUNC(var1) TRIPLES(ADDON,fnc,var1) +#define EFUNC(var1,var2) TRIPLES(DOUBLES(PREFIX,var1),fnc,var2) + +#endif + + +/** +PERFORMANCE COUNTERS SECTION +**/ +//#define ENABLE_PERFORMANCE_COUNTERS + +#ifdef ENABLE_PERFORMANCE_COUNTERS + #define CBA_fnc_addPerFrameHandler { _ret = [(_this select 0), (_this select 1), (_this select 2), #function] call CBA_fnc_addPerFrameHandler; if(isNil "ACE_PFH_COUNTER" ) then { ACE_PFH_COUNTER=[]; }; ACE_PFH_COUNTER pushBack [[_ret, __FILE__, __LINE__], [(_this select 0), (_this select 1), (_this select 2)]]; _ret } + + #define CREATE_COUNTER(x) if(isNil "ACE_COUNTERS" ) then { ACE_COUNTERS=[]; }; GVAR(DOUBLES(x,counter))=[]; GVAR(DOUBLES(x,counter)) set[0, QUOTE(GVAR(DOUBLES(x,counter)))]; GVAR(DOUBLES(x,counter)) set[1, diag_tickTime]; ACE_COUNTERS pushBack GVAR(DOUBLES(x,counter)); + #define BEGIN_COUNTER(x) if(isNil QUOTE(GVAR(DOUBLES(x,counter)))) then { CREATE_COUNTER(x) }; GVAR(DOUBLES(x,counter)) set[2, diag_tickTime]; + #define END_COUNTER(x) GVAR(DOUBLES(x,counter)) pushBack [(GVAR(DOUBLES(x,counter)) select 2), diag_tickTime]; + + #define DUMP_COUNTERS ([__FILE__, __LINE__] call ACE_DUMPCOUNTERS_FNC) +#else + #define CREATE_COUNTER(x) /* disabled */ + #define BEGIN_COUNTER(x) /* disabled */ + #define END_COUNTER(x) /* disabled */ + #define DUMP_COUNTERS /* disabled */ #endif \ No newline at end of file diff --git a/addons/main/script_macros.hpp b/addons/main/script_macros.hpp index 6d383a4c13..79f95545ca 100644 --- a/addons/main/script_macros.hpp +++ b/addons/main/script_macros.hpp @@ -1,245 +1,245 @@ -#include "\x\cba\addons\main\script_macros_common.hpp" -#include "\x\cba\addons\xeh\script_xeh.hpp" - -// Default versioning level -#define DEFAULT_VERSIONING_LEVEL 2 - -// RGB Colors -#define RGB_GREEN 0, 0.5, 0, 1 -#define RGB_BLUE 0, 0, 1, 1 -#define RGB_ORANGE 0.5, 0.5, 0, 1 -#define RGB_RED 1, 0, 0, 1 -#define RGB_YELLOW 1, 1, 0, 1 -#define RGB_WHITE 1, 1, 1, 1 -#define RGB_GRAY 0.5, 0.5, 0.5, 1 -#define RGB_BLACK 0, 0, 0, 1 -#define RGB_MAROON 0.5, 0, 0, 1 -#define RGB_OLIVE 0.5, 0.5, 0, 1 -#define RGB_NAVY 0, 0, 0.5, 1 -#define RGB_PURPLE 0.5, 0, 0.5, 1 -#define RGB_FUCHSIA 1, 0, 1, 1 -#define RGB_AQUA 0, 1, 1, 1 -#define RGB_TEAL 0, 0.5, 0.5, 1 -#define RGB_LIME 0, 1, 0, 1 -#define RGB_SILVER 0.75, 0.75, 0.75, 1 - -#include "script_macros_menudef.hpp" - -#define ACE_NOARMORY class Armory { disabled = 1; } -#define ACE_ARMORY class Armory { disabled = 0; } -#define ACE_ACEARMORY class Armory { disabled = 0; author = "A.C.E."; } - - -// Weapon defaults -// NOTE !!!! - Do not forget to dummy-update the configs that use these defines, or the changes won't activate due to binarization! -#define ACE_DEFAULT_WEAPONS "Throw", "Put" - -// Item defaults -// NOTE !!!! - Do not forget to dummy-update the configs that use these defines, or the changes won't activate due to binarization! -#define ACE_ITEMS_TEAMLEADER_B "ItemMap","ItemCompass","ItemWatch","ItemRadio" -#define ACE_ITEMS_SQUADLEADER_B "ItemMap","ItemCompass","ItemWatch","ItemRadio","ACE_DAGR" -#define ACE_ITEMS_SPECIAL "ItemMap","ItemCompass","ItemWatch","ItemRadio" -#define ACE_ITEMS "ItemWatch","ItemRadio" -#define ACE_ITEMS_CIVILIAN "ItemWatch" - - -#define ACE_DEFAULT_SLOTS "1 + 4 + 12* 256 + 2* 4096 + 2 + 8* 16 + 12*131072" - -#define ACE_NOGRIP handAnim[] = {} -#define ACE_DISTANCE_DEFAULT distanceZoomMin = 300; distanceZoomMax = 300 - -// #include "script_macros_optics.hpp" //ToDo - -#define ACE_NOZEROING discreteDistance[] = {}; \ - discreteDistanceInitIndex = 0; \ - weaponInfoType = "RscWeaponEmpty" - -#define ACE_NOTURRETZEROING discreteDistance[] = {}; \ - discreteDistanceInitIndex = 0; \ - turretInfoType = "RscWeaponEmpty" - -#define ACE_LASER irLaserPos = "laser pos"; \ - irLaserEnd = "laser dir"; \ - irDistance = 300 - -#define ACE_LASER_DISTANCE_VANILLA irDistance = 300 - -#define ACE_NOLASER irLaserPos = "laser pos"; \ - irLaserEnd = "laser dir"; \ - irDistance = 0 - -#define ACE_SUPPRESSED ace_suppressed = 1; \ - fireLightDuration = 0; \ - fireLightIntensity = 0 - -// TODO: Cleanup in all the configs around -#define ACE_M_MAG(x,y) class _xx_##x {magazine = ##x; count = ##y;} -#define ACE_M_WEP(x,y) class _xx_##x {weapon = ##x; count = ##y;} -#define ACE_M_ITEM(x,y) class _xx_##x {name = ##x; count = ##y;} -#define ACE_M_BAG(x,y) class _xx_##x {backpack = ##x; count = ##y;} - - -// Vehicle defines -// ACE_canBeLoad = This vehicle acts as transporter, i.e you can load stuff into it -// ACE_canBeCargo = This vehicle acts as cargo, i.e you can load this item into other vehicles -#define ACE_CARGO_FRONT ACE_canBeLoad = false; ACE_canBeCargo = true; ACE_canGear = false; ACE_canLoadFront = true -#define ACE_CARGO_ONLY ACE_canBeLoad = false; ACE_canBeCargo = true; ACE_canGear = false; ACE_canLoadFront = false -#define ACE_LOAD_ONLY ACE_canBeLoad = true; ACE_canBeCargo = false; ACE_canGear = false; ACE_canLoadFront = false -#define ACE_GEAR_ONLY ACE_canBeLoad = true; ACE_canBeCargo = false; ACE_canGear = true; ACE_canLoadFront = false -#define ACE_NOCARGOLOAD ACE_canBeLoad = false; ACE_canBeCargo = false; ACE_canGear = false; ACE_canLoadFront = false - -// Increased FOV for tank driver -// Increased Default US Tank driver optic -#define ACE_DRIVEROPTIC_TANK_US driverOpticsModel = "\z\ace\addons\m_veh_optics\driver\optika_tank_driver_west.p3d" -// Increased Default RU Tank driver optic -#define ACE_DRIVEROPTIC_TANK_RU driverOpticsModel = "\z\ace\addons\m_veh_optics\driver\optika_tank_driver_east.p3d" -// Increased Default NON Specified driver optic -#define ACE_DRIVEROPTIC_TANK driverOpticsModel = "\z\ace\addons\m_veh_optics\driver\optika_tank_driver.p3d" -// Increased Default EP1 NON Specified driver optic -// Default black border thing needs finish -#define ACE_DRIVEROPTIC_TANK_EP1 driverOpticsModel = "\z\ace\addons\m_veh_optics\driver\optika_tank_driver.p3d" - -#define ACE_BWC ace_bwc = 1 - -// SCRIPTING MACROS - -// Items -#define inITEMS(x,y) (##x in (y call ACE_fnc_getGear)) -#define remITEMS(x,y) ([##x,y] call ACE_fnc_removeItem) -//#define addITEMS(x,y) (y addItem ##x) - -// Interaction/ Put anims -#define canANIM(x) (x call ACE_fnc_CanPutDown) -#define playANIM(x) (if (x call ACE_fnc_CanPutDown) then { x call ACE_fnc_PutDown }) - -// In vehicle or on foot -#define ONFOOT(x) (x == vehicle x) -#define INVEHICLE(x) (x != vehicle x) - -// FX -#define COUGH ace_common_fx_fnc_cough -#define BLURRY ace_common_fx_fnc_blurry -#define BLIND ace_common_fx_fnc_blind_view -#define DEAF ace_common_fx_fnc_deaf -#define DIZZY ace_common_fx_fnc_dizzy -#define FLASH ace_common_fx_fnc_flash -#define KICK ace_common_fx_fnc_kick -#define KNOCKOUT ace_common_fx_fnc_knockout -#define RING ace_common_fx_fnc_ring - -// Stamina -#define INC_MASS ace_stamina_fnc_inc_mass - -// Does this work, due to BWC_CONFIG(NAME) ? -#undef BWC_CONFIG - -#define BWC_CONFIG(NAME) class NAME { \ - units[] = {}; \ - weapons[] = {}; \ - requiredVersion = REQUIRED_VERSION; \ - requiredAddons[] = {}; \ - version = VERSION; \ - ACE_BWC; \ -} - -#define ACE_FLASHLIGHT class FlashLight { \ - color[] = {0.9, 0.9, 0.7, 0.9}; \ - ambient[] = {0.1, 0.1, 0.1, 1.0}; \ - position = "flash dir"; \ - direction = "flash"; \ - angle = 30; \ - scale[] = {1, 1, 0.5}; \ - brightness = 0.1; \ - } -#define ACE_SMALL_FLASHLIGHT class FlashLight { \ - color[] = {0.9, 0.9, 0.7, 0.9}; \ - ambient[] = {0.1, 0.1, 0.1, 1.0}; \ - position = "flash dir"; \ - direction = "flash"; \ - angle = 20; \ - scale[] = {0.9, 0.9, 0.4}; \ - brightness = 0.09; \ - } - -// Addaction defines for colored text -#define ACE_TEXT_ORANGE(Text) ("" + ##Text + "") -#define ACE_TEXT_RED(Text) ("" + ##Text + "") -#define ACE_TEXT_GREEN(Text) ("" + ##Text + "") -#define ACE_TEXT_YELLOW(Text) ("" + ##Text + "") - - - -#define EGVAR(module,var) TRIPLES(PREFIX,module,var) -#define QEGVAR(module,var) QUOTE(EGVAR(module,var)) - -#define DGVAR(varName) if(isNil "ACE_DEBUG_NAMESPACE") then { ACE_DEBUG_NAMESPACE = []; }; if(!(QUOTE(GVAR(varName)) in ACE_DEBUG_NAMESPACE)) then { PUSH(ACE_DEBUG_NAMESPACE, QUOTE(GVAR(varName))); }; GVAR(varName) -#define DVAR(varName) if(isNil "ACE_DEBUG_NAMESPACE") then { ACE_DEBUG_NAMESPACE = []; }; if(!(QUOTE(varName) in ACE_DEBUG_NAMESPACE)) then { PUSH(ACE_DEBUG_NAMESPACE, QUOTE(varName)); }; varName -#define DFUNC(var1) TRIPLES(ADDON,fnc,var1) -#define DEFUNC(var1,var2) TRIPLES(DOUBLES(PREFIX,var1),fnc,var2) - -#define QFUNC(var1) QUOTE(DFUNC(var1)) -#define QEFUNC(var1,var2) QUOTE(DEFUNC(var1,var2)) - -#define PATHTOEF(var1,var2) PATHTOF_SYS(PREFIX,var1,var2) - - -#define GETVAR_SYS(var1,var2) getVariable [ARR_2(QUOTE(var1),var2)] -#define SETVAR_SYS(var1,var2) setVariable [ARR_2(QUOTE(var1),var2)] -#define SETPVAR_SYS(var1,var2) setVariable [ARR_3(QUOTE(var1),var2,true)] - -#define GETVAR(var1,var2,var3) var1 GETVAR_SYS(var2,var3) -#define GETMVAR(var1,var2) missionNamespace GETVAR_SYS(var1,var2) -#define GETUVAR(var1,var2) uiNamespace GETVAR_SYS(var1,var2) -#define GETPRVAR(var1,var2) profileNamespace GETVAR_SYS(var1,var2) -#define GETPAVAR(var1,var2) parsingNamespace GETVAR_SYS(var1,var2) - -#define SETVAR(var1,var2,var3) var1 SETVAR_SYS(var2,var3) -#define SETPVAR(var1,var2,var3) var1 SETPVAR_SYS(var2,var3) -#define SETMVAR(var1,var2) missionNamespace SETVAR_SYS(var1,var2) -#define SETUVAR(var1,var2) uiNamespace SETVAR_SYS(var1,var2) -#define SETPRVAR(var1,var2) profileNamespace SETVAR_SYS(var1,var2) -#define SETPAVAR(var1,var2) parsingNamespace SETVAR_SYS(var1,var2) - -#define GETGVAR(var1,var2) GETMVAR(GVAR(var1),var2) -#define GETEGVAR(var1,var2,var3) GETMVAR(EGVAR(var1,var2),var3) - -#define ARR_SELECT(ARRAY,INDEX,DEFAULT) if (count ARRAY > INDEX) then {ARRAY select INDEX} else {DEFAULT} - - -#define MACRO_ADDWEAPON(WEAPON,COUNT) class _xx_##WEAPON { \ - weapon = #WEAPON; \ - count = COUNT; \ -} - -#define MACRO_ADDITEM(ITEM,COUNT) class _xx_##ITEM { \ - name = #ITEM; \ - count = COUNT; \ -} - -#define MACRO_ADDMAGAZINE(MAGAZINE,COUNT) class _xx_##MAGAZINE { \ - magazine = #MAGAZINE; \ - count = COUNT; \ -} - - -#ifdef DISABLE_COMPILE_CACHE - #define PREP(fncName) DFUNC(fncName) = compile preprocessFileLineNumbers QUOTE(PATHTOF(functions\DOUBLES(fnc,fncName).sqf)) -#else - #define PREP(fncName) DFUNC(fncName) = QUOTE(PATHTOF(functions\DOUBLES(fnc,fncName).sqf)) call SLX_XEH_COMPILE -#endif - -#define PREP_MODULE(folder) [] call compile preprocessFileLineNumbers QUOTE(PATHTOF(folder\__PREP__.sqf)) - -#define HASH_CREATE ([] call EFUNC(common,hashCreate)) -#define HASH_SET(hash, key, val) ([hash, key, val, __FILE__, __LINE__] call EFUNC(common,hashSet)) -#define HASH_GET(hash, key) ([hash, key, __FILE__, __LINE__] call EFUNC(common,hashGet)) -#define HASH_REM(hash, key) ([hash, key, __FILE__, __LINE__] call EFUNC(common,hashRem)) -#define HASH_HASKEY(hash, key) ([hash, key, __FILE__, __LINE__] call EFUNC(common,hashHasKey)) - -#define HASHLIST_CREATELIST(keys) ([keys] call EFUNC(common,hashListCreateList)) -#define HASHLIST_CREATEHASH(hashList) ([hashList] call EFUNC(common,hashListCreateHash)) -#define HASHLIST_SELECT(hashList, index) ([hashList, index, __FILE__, __LINE__] call EFUNC(common,hashListSelect)) -#define HASHLIST_SET(hashList, index, value) ([hashList, index, value, __FILE__, __LINE__] call EFUNC(common,hashListSet)) -#define HASHLIST_PUSH(hashList, value) ([hashList, value, __FILE__, __LINE__] call EFUNC(common,hashListPush)) - +#include "\x\cba\addons\main\script_macros_common.hpp" +#include "\x\cba\addons\xeh\script_xeh.hpp" + +// Default versioning level +#define DEFAULT_VERSIONING_LEVEL 2 + +// RGB Colors +#define RGB_GREEN 0, 0.5, 0, 1 +#define RGB_BLUE 0, 0, 1, 1 +#define RGB_ORANGE 0.5, 0.5, 0, 1 +#define RGB_RED 1, 0, 0, 1 +#define RGB_YELLOW 1, 1, 0, 1 +#define RGB_WHITE 1, 1, 1, 1 +#define RGB_GRAY 0.5, 0.5, 0.5, 1 +#define RGB_BLACK 0, 0, 0, 1 +#define RGB_MAROON 0.5, 0, 0, 1 +#define RGB_OLIVE 0.5, 0.5, 0, 1 +#define RGB_NAVY 0, 0, 0.5, 1 +#define RGB_PURPLE 0.5, 0, 0.5, 1 +#define RGB_FUCHSIA 1, 0, 1, 1 +#define RGB_AQUA 0, 1, 1, 1 +#define RGB_TEAL 0, 0.5, 0.5, 1 +#define RGB_LIME 0, 1, 0, 1 +#define RGB_SILVER 0.75, 0.75, 0.75, 1 + +#include "script_macros_menudef.hpp" + +#define ACE_NOARMORY class Armory { disabled = 1; } +#define ACE_ARMORY class Armory { disabled = 0; } +#define ACE_ACEARMORY class Armory { disabled = 0; author = "A.C.E."; } + + +// Weapon defaults +// NOTE !!!! - Do not forget to dummy-update the configs that use these defines, or the changes won't activate due to binarization! +#define ACE_DEFAULT_WEAPONS "Throw", "Put" + +// Item defaults +// NOTE !!!! - Do not forget to dummy-update the configs that use these defines, or the changes won't activate due to binarization! +#define ACE_ITEMS_TEAMLEADER_B "ItemMap","ItemCompass","ItemWatch","ItemRadio" +#define ACE_ITEMS_SQUADLEADER_B "ItemMap","ItemCompass","ItemWatch","ItemRadio","ACE_DAGR" +#define ACE_ITEMS_SPECIAL "ItemMap","ItemCompass","ItemWatch","ItemRadio" +#define ACE_ITEMS "ItemWatch","ItemRadio" +#define ACE_ITEMS_CIVILIAN "ItemWatch" + + +#define ACE_DEFAULT_SLOTS "1 + 4 + 12* 256 + 2* 4096 + 2 + 8* 16 + 12*131072" + +#define ACE_NOGRIP handAnim[] = {} +#define ACE_DISTANCE_DEFAULT distanceZoomMin = 300; distanceZoomMax = 300 + +// #include "script_macros_optics.hpp" //ToDo + +#define ACE_NOZEROING discreteDistance[] = {}; \ + discreteDistanceInitIndex = 0; \ + weaponInfoType = "RscWeaponEmpty" + +#define ACE_NOTURRETZEROING discreteDistance[] = {}; \ + discreteDistanceInitIndex = 0; \ + turretInfoType = "RscWeaponEmpty" + +#define ACE_LASER irLaserPos = "laser pos"; \ + irLaserEnd = "laser dir"; \ + irDistance = 300 + +#define ACE_LASER_DISTANCE_VANILLA irDistance = 300 + +#define ACE_NOLASER irLaserPos = "laser pos"; \ + irLaserEnd = "laser dir"; \ + irDistance = 0 + +#define ACE_SUPPRESSED ace_suppressed = 1; \ + fireLightDuration = 0; \ + fireLightIntensity = 0 + +// TODO: Cleanup in all the configs around +#define ACE_M_MAG(x,y) class _xx_##x {magazine = ##x; count = ##y;} +#define ACE_M_WEP(x,y) class _xx_##x {weapon = ##x; count = ##y;} +#define ACE_M_ITEM(x,y) class _xx_##x {name = ##x; count = ##y;} +#define ACE_M_BAG(x,y) class _xx_##x {backpack = ##x; count = ##y;} + + +// Vehicle defines +// ACE_canBeLoad = This vehicle acts as transporter, i.e you can load stuff into it +// ACE_canBeCargo = This vehicle acts as cargo, i.e you can load this item into other vehicles +#define ACE_CARGO_FRONT ACE_canBeLoad = false; ACE_canBeCargo = true; ACE_canGear = false; ACE_canLoadFront = true +#define ACE_CARGO_ONLY ACE_canBeLoad = false; ACE_canBeCargo = true; ACE_canGear = false; ACE_canLoadFront = false +#define ACE_LOAD_ONLY ACE_canBeLoad = true; ACE_canBeCargo = false; ACE_canGear = false; ACE_canLoadFront = false +#define ACE_GEAR_ONLY ACE_canBeLoad = true; ACE_canBeCargo = false; ACE_canGear = true; ACE_canLoadFront = false +#define ACE_NOCARGOLOAD ACE_canBeLoad = false; ACE_canBeCargo = false; ACE_canGear = false; ACE_canLoadFront = false + +// Increased FOV for tank driver +// Increased Default US Tank driver optic +#define ACE_DRIVEROPTIC_TANK_US driverOpticsModel = "\z\ace\addons\m_veh_optics\driver\optika_tank_driver_west.p3d" +// Increased Default RU Tank driver optic +#define ACE_DRIVEROPTIC_TANK_RU driverOpticsModel = "\z\ace\addons\m_veh_optics\driver\optika_tank_driver_east.p3d" +// Increased Default NON Specified driver optic +#define ACE_DRIVEROPTIC_TANK driverOpticsModel = "\z\ace\addons\m_veh_optics\driver\optika_tank_driver.p3d" +// Increased Default EP1 NON Specified driver optic +// Default black border thing needs finish +#define ACE_DRIVEROPTIC_TANK_EP1 driverOpticsModel = "\z\ace\addons\m_veh_optics\driver\optika_tank_driver.p3d" + +#define ACE_BWC ace_bwc = 1 + +// SCRIPTING MACROS + +// Items +#define inITEMS(x,y) (##x in (y call ACE_fnc_getGear)) +#define remITEMS(x,y) ([##x,y] call ACE_fnc_removeItem) +//#define addITEMS(x,y) (y addItem ##x) + +// Interaction/ Put anims +#define canANIM(x) (x call ACE_fnc_CanPutDown) +#define playANIM(x) (if (x call ACE_fnc_CanPutDown) then { x call ACE_fnc_PutDown }) + +// In vehicle or on foot +#define ONFOOT(x) (x == vehicle x) +#define INVEHICLE(x) (x != vehicle x) + +// FX +#define COUGH ace_common_fx_fnc_cough +#define BLURRY ace_common_fx_fnc_blurry +#define BLIND ace_common_fx_fnc_blind_view +#define DEAF ace_common_fx_fnc_deaf +#define DIZZY ace_common_fx_fnc_dizzy +#define FLASH ace_common_fx_fnc_flash +#define KICK ace_common_fx_fnc_kick +#define KNOCKOUT ace_common_fx_fnc_knockout +#define RING ace_common_fx_fnc_ring + +// Stamina +#define INC_MASS ace_stamina_fnc_inc_mass + +// Does this work, due to BWC_CONFIG(NAME) ? +#undef BWC_CONFIG + +#define BWC_CONFIG(NAME) class NAME { \ + units[] = {}; \ + weapons[] = {}; \ + requiredVersion = REQUIRED_VERSION; \ + requiredAddons[] = {}; \ + version = VERSION; \ + ACE_BWC; \ +} + +#define ACE_FLASHLIGHT class FlashLight { \ + color[] = {0.9, 0.9, 0.7, 0.9}; \ + ambient[] = {0.1, 0.1, 0.1, 1.0}; \ + position = "flash dir"; \ + direction = "flash"; \ + angle = 30; \ + scale[] = {1, 1, 0.5}; \ + brightness = 0.1; \ + } +#define ACE_SMALL_FLASHLIGHT class FlashLight { \ + color[] = {0.9, 0.9, 0.7, 0.9}; \ + ambient[] = {0.1, 0.1, 0.1, 1.0}; \ + position = "flash dir"; \ + direction = "flash"; \ + angle = 20; \ + scale[] = {0.9, 0.9, 0.4}; \ + brightness = 0.09; \ + } + +// Addaction defines for colored text +#define ACE_TEXT_ORANGE(Text) ("" + ##Text + "") +#define ACE_TEXT_RED(Text) ("" + ##Text + "") +#define ACE_TEXT_GREEN(Text) ("" + ##Text + "") +#define ACE_TEXT_YELLOW(Text) ("" + ##Text + "") + + + +#define EGVAR(module,var) TRIPLES(PREFIX,module,var) +#define QEGVAR(module,var) QUOTE(EGVAR(module,var)) + +#define DGVAR(varName) if(isNil "ACE_DEBUG_NAMESPACE") then { ACE_DEBUG_NAMESPACE = []; }; if(!(QUOTE(GVAR(varName)) in ACE_DEBUG_NAMESPACE)) then { PUSH(ACE_DEBUG_NAMESPACE, QUOTE(GVAR(varName))); }; GVAR(varName) +#define DVAR(varName) if(isNil "ACE_DEBUG_NAMESPACE") then { ACE_DEBUG_NAMESPACE = []; }; if(!(QUOTE(varName) in ACE_DEBUG_NAMESPACE)) then { PUSH(ACE_DEBUG_NAMESPACE, QUOTE(varName)); }; varName +#define DFUNC(var1) TRIPLES(ADDON,fnc,var1) +#define DEFUNC(var1,var2) TRIPLES(DOUBLES(PREFIX,var1),fnc,var2) + +#define QFUNC(var1) QUOTE(DFUNC(var1)) +#define QEFUNC(var1,var2) QUOTE(DEFUNC(var1,var2)) + +#define PATHTOEF(var1,var2) PATHTOF_SYS(PREFIX,var1,var2) + + +#define GETVAR_SYS(var1,var2) getVariable [ARR_2(QUOTE(var1),var2)] +#define SETVAR_SYS(var1,var2) setVariable [ARR_2(QUOTE(var1),var2)] +#define SETPVAR_SYS(var1,var2) setVariable [ARR_3(QUOTE(var1),var2,true)] + +#define GETVAR(var1,var2,var3) var1 GETVAR_SYS(var2,var3) +#define GETMVAR(var1,var2) missionNamespace GETVAR_SYS(var1,var2) +#define GETUVAR(var1,var2) uiNamespace GETVAR_SYS(var1,var2) +#define GETPRVAR(var1,var2) profileNamespace GETVAR_SYS(var1,var2) +#define GETPAVAR(var1,var2) parsingNamespace GETVAR_SYS(var1,var2) + +#define SETVAR(var1,var2,var3) var1 SETVAR_SYS(var2,var3) +#define SETPVAR(var1,var2,var3) var1 SETPVAR_SYS(var2,var3) +#define SETMVAR(var1,var2) missionNamespace SETVAR_SYS(var1,var2) +#define SETUVAR(var1,var2) uiNamespace SETVAR_SYS(var1,var2) +#define SETPRVAR(var1,var2) profileNamespace SETVAR_SYS(var1,var2) +#define SETPAVAR(var1,var2) parsingNamespace SETVAR_SYS(var1,var2) + +#define GETGVAR(var1,var2) GETMVAR(GVAR(var1),var2) +#define GETEGVAR(var1,var2,var3) GETMVAR(EGVAR(var1,var2),var3) + +#define ARR_SELECT(ARRAY,INDEX,DEFAULT) if (count ARRAY > INDEX) then {ARRAY select INDEX} else {DEFAULT} + + +#define MACRO_ADDWEAPON(WEAPON,COUNT) class _xx_##WEAPON { \ + weapon = #WEAPON; \ + count = COUNT; \ +} + +#define MACRO_ADDITEM(ITEM,COUNT) class _xx_##ITEM { \ + name = #ITEM; \ + count = COUNT; \ +} + +#define MACRO_ADDMAGAZINE(MAGAZINE,COUNT) class _xx_##MAGAZINE { \ + magazine = #MAGAZINE; \ + count = COUNT; \ +} + + +#ifdef DISABLE_COMPILE_CACHE + #define PREP(fncName) DFUNC(fncName) = compile preprocessFileLineNumbers QUOTE(PATHTOF(functions\DOUBLES(fnc,fncName).sqf)) +#else + #define PREP(fncName) DFUNC(fncName) = QUOTE(PATHTOF(functions\DOUBLES(fnc,fncName).sqf)) call SLX_XEH_COMPILE +#endif + +#define PREP_MODULE(folder) [] call compile preprocessFileLineNumbers QUOTE(PATHTOF(folder\__PREP__.sqf)) + +#define HASH_CREATE ([] call EFUNC(common,hashCreate)) +#define HASH_SET(hash, key, val) ([hash, key, val, __FILE__, __LINE__] call EFUNC(common,hashSet)) +#define HASH_GET(hash, key) ([hash, key, __FILE__, __LINE__] call EFUNC(common,hashGet)) +#define HASH_REM(hash, key) ([hash, key, __FILE__, __LINE__] call EFUNC(common,hashRem)) +#define HASH_HASKEY(hash, key) ([hash, key, __FILE__, __LINE__] call EFUNC(common,hashHasKey)) + +#define HASHLIST_CREATELIST(keys) ([keys] call EFUNC(common,hashListCreateList)) +#define HASHLIST_CREATEHASH(hashList) ([hashList] call EFUNC(common,hashListCreateHash)) +#define HASHLIST_SELECT(hashList, index) ([hashList, index, __FILE__, __LINE__] call EFUNC(common,hashListSelect)) +#define HASHLIST_SET(hashList, index, value) ([hashList, index, value, __FILE__, __LINE__] call EFUNC(common,hashListSet)) +#define HASHLIST_PUSH(hashList, value) ([hashList, value, __FILE__, __LINE__] call EFUNC(common,hashListPush)) + #include "script_debug.hpp" \ No newline at end of file diff --git a/addons/main/script_macros_menudef.hpp b/addons/main/script_macros_menudef.hpp index 665c702c9b..35a8e2be45 100644 --- a/addons/main/script_macros_menudef.hpp +++ b/addons/main/script_macros_menudef.hpp @@ -1,27 +1,27 @@ -// ACE Self Interaction Conditions - -// Self Interaction Menu not available if player is unconscious -#define ACE_INTERACT_ALIVE (alive player) -#define ACE_INTERACT_UNCON (player call ace_wounds_fnc_isUncon) - -// Player is Player Vehicle -#define ACE_INTERACT_PLAYER (player == vehicle player || (player != vehicle player && player in assignedCargo vehicle player)) - -// Player is climbing up a ladder -#define ACE_INTERACT_LADDER (animationState player in ["ladderriflestatic","laddercivilstatic"]) - -// Possible = Self interaction opens only if player is alive and conscious (can be in a vehicle) -#define ACE_SELFINTERACTION_POSSIBLE (!ACE_INTERACT_LADDER && {ACE_INTERACT_ALIVE} && {!ACE_INTERACT_UNCON}) - -// Restricted = Self interaction opens only if player is alive and conscious (can NOT be in a vehicle, i.e Groundmarker, explosives ...) -#define ACE_SELFINTERACTION_RESTRICTED (ACE_SELFINTERACTION_POSSIBLE && {ACE_INTERACT_PLAYER}) - -// Close interaction menu if unconscious -#define ACE_INTERACT_FNC_EXIT if (ACE_INTERACT_UNCON) exitWith {} -#define ACE_ASSEMBLE (getNumber(configFile >> "CfgActions" >> "Assemble" >> "show") == 0) -#define ACE_DISASSEMBLE (getNumber(configFile >> "CfgActions" >> "DisAssemble" >> "show") == 0) -#define ACE_PIPEDEFAULT (getNumber(configFile >> "CfgMagazines" >> "PipeBomb" >> "useAction") == 0) -#define ACE_IDENTITYDEFAULT (isClass(configFile >> "CfgPatches" >> "ace_combatdeaf")) -#define ACE_RUCKDEFAULT (isClass(configFile >> "CfgPatches" >> "ace_stamina")) - +// ACE Self Interaction Conditions + +// Self Interaction Menu not available if player is unconscious +#define ACE_INTERACT_ALIVE (alive player) +#define ACE_INTERACT_UNCON (player call ace_wounds_fnc_isUncon) + +// Player is Player Vehicle +#define ACE_INTERACT_PLAYER (player == vehicle player || (player != vehicle player && player in assignedCargo vehicle player)) + +// Player is climbing up a ladder +#define ACE_INTERACT_LADDER (animationState player in ["ladderriflestatic","laddercivilstatic"]) + +// Possible = Self interaction opens only if player is alive and conscious (can be in a vehicle) +#define ACE_SELFINTERACTION_POSSIBLE (!ACE_INTERACT_LADDER && {ACE_INTERACT_ALIVE} && {!ACE_INTERACT_UNCON}) + +// Restricted = Self interaction opens only if player is alive and conscious (can NOT be in a vehicle, i.e Groundmarker, explosives ...) +#define ACE_SELFINTERACTION_RESTRICTED (ACE_SELFINTERACTION_POSSIBLE && {ACE_INTERACT_PLAYER}) + +// Close interaction menu if unconscious +#define ACE_INTERACT_FNC_EXIT if (ACE_INTERACT_UNCON) exitWith {} +#define ACE_ASSEMBLE (getNumber(configFile >> "CfgActions" >> "Assemble" >> "show") == 0) +#define ACE_DISASSEMBLE (getNumber(configFile >> "CfgActions" >> "DisAssemble" >> "show") == 0) +#define ACE_PIPEDEFAULT (getNumber(configFile >> "CfgMagazines" >> "PipeBomb" >> "useAction") == 0) +#define ACE_IDENTITYDEFAULT (isClass(configFile >> "CfgPatches" >> "ace_combatdeaf")) +#define ACE_RUCKDEFAULT (isClass(configFile >> "CfgPatches" >> "ace_stamina")) + #define ACE_KNOWN2PLAYER (if (name _target in (player getVariable ["ace_recognize_knownnames",[]])) then { name _target } else { " " }) \ No newline at end of file diff --git a/addons/main/script_mod.hpp b/addons/main/script_mod.hpp index 3bd82431bd..6ef5ec3f68 100644 --- a/addons/main/script_mod.hpp +++ b/addons/main/script_mod.hpp @@ -1,55 +1,55 @@ -// COMPONENT should be defined in the script_component.hpp and included BEFORE this hpp - -#define MAINPREFIX z -#define PREFIX ace - -#define MAJOR 3 -#define MINOR 0 -#define PATCHLVL 0 -#define BUILD 1 - -#define VERSION MAJOR.MINOR.PATCHLVL.BUILD -#define VERSION_AR MAJOR,MINOR,PATCHLVL,BUILD - -#define ACE_TAG A.C.E. - -// MINIMAL required version for the Mod. Components can specify others.. -#define REQUIRED_VERSION 0.5 - -/* - #define DEBUG_ENABLED_ADDONS - #define DEBUG_ENABLED_ATTACHMENTS - #define DEBUG_ENABLED_weapons_backblast - #define DEBUG_ENABLED_BLOOD - #define DEBUG_ENABLED_CARTRIDGES - #define DEBUG_ENABLED_CRATERS - #define DEBUG_ENABLED_CREWPROTECTION - #define DEBUG_ENABLED_DUMMIES - #define DEBUG_ENABLED_EJECT - #define DEBUG_ENABLED_EXPLOSIVES - #define DEBUG_ENABLED_FLARES - #define DEBUG_ENABLED_FLASHBANG - #define DEBUG_ENABLED_GRENADETHROW - #define DEBUG_ENABLED_HUNTIR - #define DEBUG_ENABLED_INTERACTION - #define DEBUG_ENABLED_IRSTROBE - #define DEBUG_ENABLED_MULTI_BARREL - #define DEBUG_ENABLED_MUZZLEBLAST - #define DEBUG_ENABLED_NVG - #define DEBUG_ENABLED_weapons_overheating - #define DEBUG_ENABLED_RECOILDUST - #define DEBUG_ENABLED_ROCKET_BALLISTICS - #define DEBUG_ENABLED_SANDBAG - #define DEBUG_ENABLED_SHOTGUN - #define DEBUG_ENABLED_SIGHT_ADJUSTMENT_AT - #define DEBUG_ENABLED_SIGHT_ADJUSTMENT_GL - #define DEBUG_ENABLED_SIGHT_ADJUSTMENT_RIFLE - #define DEBUG_ENABLED_SMAW_SPOTTINGRIFLE - #define DEBUG_ENABLED_TRACERS - #define DEBUG_ENABLED_TRACKING - #define DEBUG_ENABLED_VIEWBLOCK - #define DEBUG_ENABLED_VEHICLE - #define DEBUG_ENABLED_vehicle_damage - #define DEBUG_ENABLED_WEAPONREST - #define DEBUG_ENABLED_WOUNDS -*/ +// COMPONENT should be defined in the script_component.hpp and included BEFORE this hpp + +#define MAINPREFIX z +#define PREFIX ace + +#define MAJOR 3 +#define MINOR 0 +#define PATCHLVL 0 +#define BUILD 1 + +#define VERSION MAJOR.MINOR.PATCHLVL.BUILD +#define VERSION_AR MAJOR,MINOR,PATCHLVL,BUILD + +#define ACE_TAG A.C.E. + +// MINIMAL required version for the Mod. Components can specify others.. +#define REQUIRED_VERSION 0.5 + +/* + #define DEBUG_ENABLED_ADDONS + #define DEBUG_ENABLED_ATTACHMENTS + #define DEBUG_ENABLED_weapons_backblast + #define DEBUG_ENABLED_BLOOD + #define DEBUG_ENABLED_CARTRIDGES + #define DEBUG_ENABLED_CRATERS + #define DEBUG_ENABLED_CREWPROTECTION + #define DEBUG_ENABLED_DUMMIES + #define DEBUG_ENABLED_EJECT + #define DEBUG_ENABLED_EXPLOSIVES + #define DEBUG_ENABLED_FLARES + #define DEBUG_ENABLED_FLASHBANG + #define DEBUG_ENABLED_GRENADETHROW + #define DEBUG_ENABLED_HUNTIR + #define DEBUG_ENABLED_INTERACTION + #define DEBUG_ENABLED_IRSTROBE + #define DEBUG_ENABLED_MULTI_BARREL + #define DEBUG_ENABLED_MUZZLEBLAST + #define DEBUG_ENABLED_NVG + #define DEBUG_ENABLED_weapons_overheating + #define DEBUG_ENABLED_RECOILDUST + #define DEBUG_ENABLED_ROCKET_BALLISTICS + #define DEBUG_ENABLED_SANDBAG + #define DEBUG_ENABLED_SHOTGUN + #define DEBUG_ENABLED_SIGHT_ADJUSTMENT_AT + #define DEBUG_ENABLED_SIGHT_ADJUSTMENT_GL + #define DEBUG_ENABLED_SIGHT_ADJUSTMENT_RIFLE + #define DEBUG_ENABLED_SMAW_SPOTTINGRIFLE + #define DEBUG_ENABLED_TRACERS + #define DEBUG_ENABLED_TRACKING + #define DEBUG_ENABLED_VIEWBLOCK + #define DEBUG_ENABLED_VEHICLE + #define DEBUG_ENABLED_vehicle_damage + #define DEBUG_ENABLED_WEAPONREST + #define DEBUG_ENABLED_WOUNDS +*/ diff --git a/addons/maptools/stringtable.xml b/addons/maptools/stringtable.xml index 2e5fee49ab..5dd4578976 100644 --- a/addons/maptools/stringtable.xml +++ b/addons/maptools/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -142,7 +142,7 @@ Kierunek: %1° Dirección: %1° Irány: %1 - Направление: %1° + Направление:%1 \ No newline at end of file diff --git a/addons/markers/stringtable.xml b/addons/markers/stringtable.xml index 65da73a026..ea6d72990a 100644 --- a/addons/markers/stringtable.xml +++ b/addons/markers/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -9,7 +9,7 @@ Směr: %1° Kierunek: %1° Dirección: %1° - Направление: %1° + Направление: %1 \ No newline at end of file diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index bf15477628..a5dfdbba49 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -1,991 +1,974 @@  - + - - - Inject Atropine - Atropin - Ввести атропин - - - Inject Epinephrine - Epinephrine injizieren - Inyectar Epinefrina - Wtrzyknij adrenalinę - Aplikovat Adrenalin - Ввести андреналил - Adrénaline - Adrenalin - Injetar Epinefrina - Inietta Epinefrina - - - Inject Morphine - Morphin injizieren - Inyectar Morfina - Wstrzyknij morfinę - Aplikovat Morfin - Ввести морфин - Morphine - Morfium - Injetar Morfina - Inietta Morfina - - - Transfuse Blood - Bluttransfusion - Transfundir sangre - Przetocz krew - Transfúze krve - Перелить кровь - Transfusion - Infúzió - Transfundir Sangue - Effettua Trasfusione - - - Transfuse Plasma - Plasmatransfusion - Перелить плазму - - - Transfuse Saline - Salzlösungtransfusion - Влить физраствор - - - Apply Tourniquet - Aderpresse anwenden - Наложить жгут - - - Bandage - Verbinden - Venda - Bandaż - Obvázat - Pansement - Benda - Kötözés - Atadura - Перевязать - - - Bandage Head - Kopf verbinden - Vendar la cabeza - Bandażuj głowę - Obvázat hlavu - Перевязать голову - Pansement Tête - Fej kötözése - Atar Cabeça - Benda la testa - - - Bandage Torso - Torso verbinden - Vendar el torso - Bandażuj tors - Obvázat hruď - Перевязать торс - Pansement Torse - Felsőtest kötözése - Atar Tronco - Benda il torso - - - Bandage Left Arm - Arm links verbinden - Vendar el brazo izquierdo - Bandażuj lewe ramię - Obvázat levou ruku - Перевязать левую руку - Pansement Bras Gauche - Bal kar kötözése - Atar Braço Esquerdo - Benda il braccio sinistro - - - Bandage Right Arm - Arm rechts verbinden - Vendar el brazo derecho - Bandażuj prawe ramię - Obvázat pravou ruku - Перевязать правую руку - Pansement Bras Droit - Jobb kar kötözése - Atar Braço Direito - Benda il braccio destro - - - Bandage Left Leg - Bein links verbinden - Vendar la pierna izquierda - Bandażuj lewą nogę - Obvázat levou nohu - Перевязать левую ногу - Pansement Jambe Gauche - Bal láb kötözése - Atar Perna Esquerda - Benda la gamba sinistra - - - Bandage Right Leg - Bein rechts verbinden - Vendar la pierna derecha - Bandażuj prawą nogę - Obvázat pravou nohu - Перевязать правую ногу - Pansement Jambe Droite - Jobb láb kötözése - Atar Perna Direita - Benda la gamba destra - - - Injecting Morphine ... - Morphin injizieren ... - Inyectando Morfina ... - Wstrzykiwanie morfiny ... - Aplikuju Morfin ... - Введение морфина... - Injection de Morphine... - Morfium beadása... - Injetando Morfina ... - Inietto la morfina ... - - - Injecting Epinephrine ... - Epinephrin injizieren ... - Inyectando Epinefrina ... - Wstrzykiwanie adrenaliny ... - Aplikuju Adrenalin ... - Введение андреналина ... - Injection d'Adrénaline ... - Adrenalin beadása... - Injetando Epinefrina ... - Inietto l'epinefrina ... - - - Injecting Atropine ... - Atropin injizieren ... - Введение атропина ... - - - Transfusing Blood ... - Bluttransfusion ... - Realizando transfusión ... - Przetaczanie krwi ... - Probíhá transfúze krve ... - Переливание крови... - Transfusion Sanguine ... - Infúzió... - Transfundindo Sangue ... - Effettuo la trasfusione ... - - - Transfusing Saline ... - Sallösungtransfusion ... - Вливание физраствора ... - - - Transfusing Plasma ... - Plasmatransfusion ... - Переливание плзмы ... - - - Bandaging ... - Verbinden ... - Vendando ... - Bandażowanie ... - Obvazuji ... - Pansement ... - Sto applicando la benda ... - Bekötözés... - Atando ... - Перевязывание ... - - - Applying Tourniquet ... - Aderpresse ... - Наложение жгута ... - - - Medical - Zdravotní - Médical - Sanitäter - Medico - Medyczne - Médico - Медик - Médico - - - Field Dressing - - - Packing Bandage - - - Elastic Bandage - - - QuikClot - - - Check Pulse - Puls überprüfen - - - Check Blood Pressure - Blutdruck messen - - - Triage Card - Triage Karte - - - Tourniquet - Tourniquet - - - Remove Tourniquet - Entferne Tourniquet - - - Give Blood IV (1000ml) - - - Give Blood IV (500ml) - - - Give Blood IV (250ml) - - - Give Plasma IV (1000ml) - - - Give Plasma IV (500ml) - - - Give Plasma IV (250ml) - - - Give Saline IV (1000ml) - - - Give Saline IV (500ml) - - - Give Saline IV (250ml) - - - Minor - Gering - Незначительные травмы - - - Delayed - Груз 300 - - - Immediate - Помощь отложена - - - Deceased - Груз 200 - - - None - Нет - - - Normal breathing - Дыхание в норме - Respiración normal - Respiration Normale - Normalny oddech - - - No breathing - Дыхания нет - No respira - Apnée - Brak oddechu - - - Difficult breathing - Дыхание затруднено - Dificultad para respirar - Difficultée Respiratoire - Trudności z oddychaniem - - - Almost no breathing - Дыхания почти нет - Casi sin respirar - Respiration Faible - Prawie brak oddechu - - - Bleeding - Кровотечение - Sangrando - Seignement - Krwawienie zewnętrzne - - - In Pain - Испытывает боль - Con Dolor - A De La Douleur - W bólu - - - Lost a lot of Blood - Большая кровопотеря - Mucha Sangre perdida - A Perdu Bcp de Sang - Stracił dużo krwi - - - Tourniquet [CAT] - Жгут - Torniquete [CAT] - Garot [CAT] - Opaska uciskowa [CAT] - - - Receiving IV [%1ml] - - - Bandage (Basic) - Повязка (обычная) - Vendaje (Básico) - Bandage (Standard) - Bandaż (jałowy) - - - Used to cover a wound - Для перевязки ран - Utilizado para cubrir una herida - Utilisé Pour Couvrir Une Blessure - Używany w celu przykrycia i ochrony miejsca zranienia - - - A dressing, that is a particular material used to cover a wound, which is applied over the wound + + + Inject Atropine + Atropin + + + Inject Epinephrine + Epinephrine injizieren + Inyectar Epinefrina + Wtrzyknij adrenalinę + Aplikovat Adrenalin + Ввести андреналил + Adrénaline + Adrenalin + Injetar Epinefrina + Inietta Epinefrina + + + Inject Morphine + Morphin injizieren + Inyectar Morfina + Wstrzyknij morfinę + Aplikovat Morfin + Ввести морфин + Morphine + Morfium + Injetar Morfina + Inietta Morfina + + + Transfuse Blood + Bluttransfusion + Transfundir sangre + Przetocz krew + Transfúze krve + Перелить кровь + Transfusion + Infúzió + Transfundir Sangue + Effettua Trasfusione + + + Transfuse Plasma + Plasmatransfusion + + + Transfuse Saline + Salzlösungtransfusion + + + Apply Tourniquet + Aderpresse anwenden + + + Bandage + Verbinden + Venda + Bandaż + Obvázat + Pansement + Benda + Kötözés + Atadura + Перевязать + + + Bandage Head + Kopf verbinden + Vendar la cabeza + Bandażuj głowę + Obvázat hlavu + Перевязать голову + Pansement Tête + Fej kötözése + Atar Cabeça + Benda la testa + + + Bandage Torso + Torso verbinden + Vendar el torso + Bandażuj tors + Obvázat hruď + Перевязать торс + Pansement Torse + Felsőtest kötözése + Atar Tronco + Benda il torso + + + Bandage Left Arm + Arm links verbinden + Vendar el brazo izquierdo + Bandażuj lewe ramię + Obvázat levou ruku + Перевязать левую руку + Pansement Bras Gauche + Bal kar kötözése + Atar Braço Esquerdo + Benda il braccio sinistro + + + Bandage Right Arm + Arm rechts verbinden + Vendar el brazo derecho + Bandażuj prawe ramię + Obvázat pravou ruku + Перевязать правую руку + Pansement Bras Droit + Jobb kar kötözése + Atar Braço Direito + Benda il braccio destro + + + Bandage Left Leg + Bein links verbinden + Vendar la pierna izquierda + Bandażuj lewą nogę + Obvázat levou nohu + Перевязать левую ногу + Pansement Jambe Gauche + Bal láb kötözése + Atar Perna Esquerda + Benda la gamba sinistra + + + Bandage Right Leg + Bein rechts verbinden + Vendar la pierna derecha + Bandażuj prawą nogę + Obvázat pravou nohu + Перевязать правую ногу + Pansement Jambe Droite + Jobb láb kötözése + Atar Perna Direita + Benda la gamba destra + + + Injecting Morphine ... + Morphin injizieren ... + Inyectando Morfina ... + Wstrzykiwanie morfiny ... + Aplikuju Morfin ... + Введение морфина... + Injection de Morphine... + Morfium beadása... + Injetando Morfina ... + Inietto la morfina ... + + + Injecting Epinephrine ... + Epinephrin injizieren ... + Inyectando Epinefrina ... + Wstrzykiwanie adrenaliny ... + Aplikuju Adrenalin ... + Введение андреналина + Injection d'Adrénaline ... + Adrenalin beadása... + Injetando Epinefrina ... + Inietto l'epinefrina ... + + + Injecting Atropine ... + Atropin injizieren ... + + + Transfusing Blood ... + Bluttransfusion ... + Realizando transfusión ... + Przetaczanie krwi ... + Probíhá transfúze krve ... + Переливание крови... + Transfusion Sanguine ... + Infúzió... + Transfundindo Sangue ... + Effettuo la trasfusione ... + + + Transfusing Saline ... + Sallösungtransfusion ... + + + Transfusing Plasma ... + Plasmatransfusion ... + + + Bandaging ... + Verbinden ... + Vendando ... + Bandażowanie ... + Obvazuji ... + Pansement ... + Sto applicando la benda ... + Bekötözés... + Atando ... + Перевязывание.... + + + Applying Tourniquet ... + Aderpresse ... + + + Medical + Zdravotní + Médical + Sanitäter + Medico + Medyczne + Médico + Медик + Médico + + + Field Dressing + + + Packing Bandage + + + Elastic Bandage + + + QuikClot + + + Check Pulse + Puls überprüfen + + + Check Blood Pressure + Blutdruck messen + + + Triage Card + Triage Karte + + + Tourniquet + Tourniquet + + + Remove Tourniquet + Entferne Tourniquet + + + Give Blood IV (1000ml) + + + Give Blood IV (500ml) + + + Give Blood IV (250ml) + + + Give Plasma IV (1000ml) + + + Give Plasma IV (500ml) + + + Give Plasma IV (250ml) + + + Give Saline IV (1000ml) + + + Give Saline IV (500ml) + + + Give Saline IV (250ml) + + + Minor + Gering + + + Delayed + + + Immediate + + + Deceased + + + None + + + Normal breathing + Дыхание в норме + Respiración normal + Respiration Normale + Normalny oddech + + + No breathing + Дыхания нет + No respira + Apnée + Brak oddechu + + + Difficult breathing + Дыхание затруднено + Dificultad para respirar + Difficultée Respiratoire + Trudności z oddychaniem + + + Almost no breathing + Дыхания почти нет + Casi sin respirar + Respiration Faible + Prawie brak oddechu + + + Bleeding + Кровотечение + Sangrando + Seignement + Krwawienie zewnętrzne + + + In Pain + Испытывает боль + Con Dolor + A De La Douleur + W bólu + + + Lost a lot of Blood + Большая кровопотеря + Mucha Sangre perdida + A Perdu Bcp de Sang + Stracił dużo krwi + + + Tourniquet [CAT] + Жгут + Torniquete [CAT] + Garot [CAT] + Opaska uciskowa [CAT] + + + Receiving IV [%1ml] + + + + Bandage (Basic) + Повязка (обычная) + Vendaje (Básico) + Bandage (Standard) + Bandaż (jałowy) + + + Used to cover a wound + Для перевязки ран + Utilizado para cubrir una herida + Utilisé Pour Couvrir Une Blessure + Używany w celu przykrycia i ochrony miejsca zranienia + + + A dressing, that is a particular material used to cover a wound, which is applied over the wound once bleeding has been stemmed. - Повязка, накладываемая поверх раны после остановки кровотечения. - Un apósito, material específico utilizado para cubrir una herida, se aplica sobre la herida una vez + Повязка, накладываемая поверх раны после остановки кровотечения. + Un apósito, material específico utilizado para cubrir una herida, se aplica sobre la herida una vez ha dejado de sangrar. - C'est un bandage, qui est fait d'un matériel spécial utiliser pour couvrir une blessure, qui peut + C'est un bandage, qui est fait d'un matériel spécial utiliser pour couvrir une blessure, qui peut etre appliquer des que le seignement as ete stopper. - Opatrunek materiałowy, używany do przykrywania ran, zakładany na ranę po zatamowaniu krwawienia. + Opatrunek materiałowy, używany do przykrywania ran, zakładany na ranę po zatamowaniu krwawienia. - - - Packing Bandage - Тампонирующая повязка - Vendaje Compresivo - Bandage Mèche - Bandaż (uciskowy) - - - Used to pack medium to large wounds and stem the bleeding - Для тампонирования ран среднего и большого размера и остановки кровотечения. - Se utiliza para vendar heridas medianas y grandes y detener el sangrado - Utiliser pour remplire la cavité créé dans une blessure moyenne et grande. - Używany w celu opatrywania średnich i dużych ran oraz tamowania krwawienia. - - - A bandage used to pack the wound to stem bleeding and facilitate wound healing. Packing a wound is + + + Packing Bandage + Тампонирующая повязка + Vendaje Compresivo + Bandage Mèche + Bandaż (uciskowy) + + + Used to pack medium to large wounds and stem the bleeding + Для тампонирования ран среднего и большого размера и остановки кровотечения. + Se utiliza para vendar heridas medianas y grandes y detener el sangrado + Utiliser pour remplire la cavité créé dans une blessure moyenne et grande. + Używany w celu opatrywania średnich i dużych ran oraz tamowania krwawienia. + + + A bandage used to pack the wound to stem bleeding and facilitate wound healing. Packing a wound is an option in large polytrauma injuries. - Повязка для тампонирования раны, остановки кровотечения и лучшего заживления. При тяжелых + Повязка для тампонирования раны, остановки кровотечения и лучшего заживления. При тяжелых сочетанных ранениях возможно тампонирование раны. - Se utiliza para detener la hemorragia de una herida y favorecer su cicatrización. Se usa en grandes + Se utiliza para detener la hemorragia de una herida y favorecer su cicatrización. Se usa en grandes lesiones o politraumatismos. - Un bandage servent a etre inseré dans les blessure pour éponger le seignement et faciliter la + Un bandage servent a etre inseré dans les blessure pour éponger le seignement et faciliter la guerrison. Ce bandage est une option pour soigner les lession de politrauma. - Opatrunek stosowany w celu zatrzymania krwawienia i osłony większych ran. - - - Bandage (Elastic) - Повязка (давящая) - Vendaje (Elástico) - Bandage (Élastique) - Bandaż (elastyczny) - - - Bandage kit, Elastic - Давящая повязка - Vendaje (Elástico) - Bandage Compressif Élastique - Zestaw bandaży elastycznych. - - - - - Ce bandage peut etre utiliser pour compresser la plaie afin de ralentire le seignement et assurer la + Opatrunek stosowany w celu zatrzymania krwawienia i osłony większych ran. + + + Bandage (Elastic) + Повязка (давящая) + Vendaje (Elástico) + Bandage (Élastique) + Bandaż (elastyczny) + + + Bandage kit, Elastic + Давящая повязка + Vendaje (Elástico) + Bandage Compressif Élastique + Zestaw bandaży elastycznych. + + + + + Ce bandage peut etre utiliser pour compresser la plaie afin de ralentire le seignement et assurer la tenue du bandage lors de mouvment. - Elastyczna opaska podtrzymująca opatrunek oraz usztywniająca okolice stawów. - Brinda una compresión uniforme y ofrece soporte extra a una zona lesionada - - - Tourniquet (CAT) - Жгут - Torniquete (CAT) - Garot (CAT) - Staza (typ. CAT) - - - Slows down blood loss when bleeding - Уменьшает кровопотерю при кровотечении. - Reduce la velocidad de pérdida de sangre - Ralentit le seignement - Zmniejsza ubytek krwi z kończyn w przypadku krwawienia. - - - A constricting device used to compress venous and arterial circulation in effect inhibiting or + Elastyczna opaska podtrzymująca opatrunek oraz usztywniająca okolice stawów. + Brinda una compresión uniforme y ofrece soporte extra a una zona lesionada + + + Tourniquet (CAT) + Жгут + Torniquete (CAT) + Garot (CAT) + Staza (typ. CAT) + + + Slows down blood loss when bleeding + Уменьшает кровопотерю при кровотечении. + Reduce la velocidad de pérdida de sangre + Ralentit le seignement + Zmniejsza ubytek krwi z kończyn w przypadku krwawienia. + + + A constricting device used to compress venous and arterial circulation in effect inhibiting or slowing blood flow and therefore decreasing loss of blood. - Жгут используется для прижатия сосудов, приводящего к остановке или значительному уменьшению + Жгут используется для прижатия сосудов, приводящего к остановке или значительному уменьшению кровотечения и сокращению кровопотери. - Dispositivo utilizado para eliminar el pulso distal y de ese modo controlar la pérdida de sangre + Dispositivo utilizado para eliminar el pulso distal y de ese modo controlar la pérdida de sangre - Un appareil servent a compresser les artères et veines afin de reduire la perte de sang. - Opaska zaciskowa CAT służy do tamowanie krwotoków w sytuacji zranienia kończyn z masywnym + Un appareil servent a compresser les artères et veines afin de reduire la perte de sang. + Opaska zaciskowa CAT służy do tamowanie krwotoków w sytuacji zranienia kończyn z masywnym krwawieniem tętniczym lub żylnym. - - - Morphine autoinjector - Морфин в пневмошприце - Morfina auto-inyectable - Auto-injecteur de Morphine - Autostrzykawka z morfiną - - - Used to combat moderate to severe pain experiences - Для снятия средних и сильных болевых ощущений. - Usado para combatir los estados dolorosos moderados a severos - Utiliser pour contrer les douleurs modéré à severes. - Morfina. Ma silne działanie przeciwbólowe. - - - An analgesic used to combat moderate to severe pain experiences. - Анальгетик для снятия средних и сильных болевых ощущений. - Analgésico usado para combatir los estados dolorosos de moderado a severo. - Un Analgésique puissant servant a contrer les douleur modéré a severe. - Organiczny związek chemiczny z grupy alkaloidów. Ma silne działanie przeciwbólowe. - - - Atropin autoinjector - Атропин в пневмошприце - Atropina auto-inyectable - Auto-injecteur d'Atropine - Autostrzykawka AtroPen - - - Used in NBC scenarios - Применяется для защиты от ОМП - Usado en escenarios NBQ - Utiliser en cas d'attaque CBRN - Atropina. Stosowana jako lek rozkurczowy i środek rozszerzający źrenice. - - - A drug used by the Military in NBC scenarios. - Препарат, используемый в войсках для защиты от оружия массового поражения. - Medicamento usado por Militares en escenarios NBQ - Médicament utilisé par l'armée en cas d'attaque CBRN - Atropina. Stosowana jako lek rozkurczowy i środek rozszerzający źrenice. Środek stosowany w + + + Morphine autoinjector + Морфин в автоматическом шприце + Morfina auto-inyectable + Auto-injecteur de Morphine + Autostrzykawka z morfiną + + + Used to combat moderate to severe pain experiences + Для снятия средних и сильных болевых ощущений. + Usado para combatir los estados dolorosos moderados a severos + Utiliser pour contrer les douleurs modéré à severes. + Morfina. Ma silne działanie przeciwbólowe. + + + An analgesic used to combat moderate to severe pain experiences. + Анальгетик для снятия средних и сильных болевых ощущений. + Analgésico usado para combatir los estados dolorosos de moderado a severo. + Un Analgésique puissant servant a contrer les douleur modéré a severe. + Organiczny związek chemiczny z grupy alkaloidów. Ma silne działanie przeciwbólowe. + + + Atropin autoinjector + Атропин в автоматическом шприце + Atropina auto-inyectable + Auto-injecteur d'Atropine + Autostrzykawka AtroPen + + + Used in NBC scenarios + Применяется для защиты от ОМП + Usado en escenarios NBQ + Utiliser en cas d'attaque CBRN + Atropina. Stosowana jako lek rozkurczowy i środek rozszerzający źrenice. + + + A drug used by the Military in NBC scenarios. + Препарат, используемый в войсках для защиты от оружия массового поражения. + Medicamento usado por Militares en escenarios NBQ + Médicament utilisé par l'armée en cas d'attaque CBRN + Atropina. Stosowana jako lek rozkurczowy i środek rozszerzający źrenice. Środek stosowany w przypadku zagrożeń NBC. - - - Epinephrine autoinjector - Адреналин в пневмошприце - Epinefrina auto-inyectable - Auto-injecteur d'épinéphrine - Autostrzykawka EpiPen - - - Increase heart rate and counter effects given by allergic reactions - Стимулирует работу сердца и купирует аллергические реакции. - Aumenta la frecuencia cardiaca y contraresta los efectos de las reacciones alérgicas - Augmente la Fréquance cadiaque et contré les effet d'une reaction Anaphylactique - Adrenalina. Zwiększa puls i przeciwdziała efektom wywołanym przez reakcje alergiczne - - - A drug that works on a sympathetic response to dilate the bronchi, increase heart rate and counter + + + Epinephrine autoinjector + Адреналин в автоматическом шприце + Epinefrina auto-inyectable + Auto-injecteur d'épinéphrine + Autostrzykawka EpiPen + + + Increase heart rate and counter effects given by allergic reactions + Стимулирует работу сердца и купирует аллергические реакции. + Aumenta la frecuencia cardiaca y contraresta los efectos de las reacciones alérgicas + Augmente la Fréquance cadiaque et contré les effet d'une reaction Anaphylactique + Adrenalina. Zwiększa puls i przeciwdziała efektom wywołanym przez reakcje alergiczne + + + A drug that works on a sympathetic response to dilate the bronchi, increase heart rate and counter such effects given by allergic reactions (anaphylaxis). Used in sudden cardiac arrest scenarios with decreasing positive outcomes. - Препарат, вызывающий симпатическую реакцию, приводящую к расширению бронхов, увеличению частоты + Препарат, вызывающий симпатическую реакцию, приводящую к расширению бронхов, увеличению частоты сердечных сокращений и купированию аллергических реакций (анафилактического шока). Применяется при остановке сердца с уменьшением вероятности благоприятного исхода. - Medicamento que dilata los bronquios, aumenta la frecuencia cardiaca y contrarresta los efectos de + Medicamento que dilata los bronquios, aumenta la frecuencia cardiaca y contrarresta los efectos de las reacciones alérgicas (anafilaxis). Se utiliza en caso de paros cardiacos repentinos. - Un medicament qui fonctione sur le systeme sympatique créan une dilatation des bronches, augmente la + Un medicament qui fonctione sur le systeme sympatique créan une dilatation des bronches, augmente la fréquance cardiaque et contre les effet d'une reaction alergique (anaphylaxie). Utiliser lors d'arret cardio-respiratoire pour augmenté les chances retrouver un ryhtme. - EpiPen z adrenaliną ma działanie sympatykomimetyczne, tj. pobudza receptory alfa- i + EpiPen z adrenaliną ma działanie sympatykomimetyczne, tj. pobudza receptory alfa- i beta-adrenergiczne. Pobudzenie układu współczulnego prowadzi do zwiększenia częstotliwości pracy serca, zwiększenia pojemności wyrzutowej serca i przyśpieszenia krążenia wieńcowego. Pobudzenie oskrzelowych receptorów beta-adrenergicznych wywołuje rozkurcz mięśni gładkich oskrzeli, co w efekcie zmniejsza towarzyszące oddychaniu świsty i duszności. - - - Plasma IV (1000ml) - Плазма для в/в вливания (1000 мл) - Plasma Intravenoso (1000ml) - Plasma Sanguin IV (1000ml) - Osocze IV (1000ml) - - - A volume-expanding blood supplement. - Дополнительный препарат, применяемый при возмещении объема крови. - Suplemento para expandir el volumen sanguíneo. - Supplement visant a remplacer les volume sanguin - Składnik krwi, używany do zwiększenia jej objętości. - - - A volume-expanding blood supplement. - Дополнительный препарат, применяемый при возмещении объема крови. - Suplemento para expandir el volumen sanguíneo. - Supplement visant a remplacer le volume sanguin et remplace les plaquettes. - Składnik krwi, używany do zwiększenia jej objętości. - - - Plasma IV (500ml) - Плазма для в/в вливания (500 мл) - Plasma Intravenoso (500ml) - Plasma Sanguin IV (500ml) - Osocze IV (500ml) - - - Plasma IV (250ml) - Плазма для в/в вливания (250 мл) - Plasma Intravenoso (250ml) - Plasma Sanguin (250ml) - Osocze IV (250ml) - - - Blood IV (1000ml) - Кровь для переливания (1000 мл) - Sangre Intravenosa (1000ml) - Cullot Sanguin IV (1000ml) - Krew IV (1000ml) - - - Blood IV, for restoring a patients blood (keep cold) - Пакет крови для возмещения объема потерянной крови (хранить в холодильнике) - Sangre Intravenosa, para restarurar el volumen sanguíneo (mantener frío) - Cullot Sanguin IV, pour remplacer le volume sanguin (garder Réfrigeré) - Krew IV, używana do uzupełnienia krwi u pacjenta, trzymać w warunkach chłodniczych - - - O Negative infusion blood used in strict and rare events to replenish blood supply usually + + + Plasma IV (1000ml) + Плазма для в/в вливания (1000 мл) + Plasma Intravenoso (1000ml) + Plasma Sanguin IV (1000ml) + Osocze IV (1000ml) + + + A volume-expanding blood supplement. + Дополнительный препарат, применяемый при возмещении объема крови. + Suplemento para expandir el volumen sanguíneo. + Supplement visant a remplacer les volume sanguin + Składnik krwi, używany do zwiększenia jej objętości. + + + A volume-expanding blood supplement. + Дополнительный препарат, применяемый при возмещении объема крови. + Suplemento para expandir el volumen sanguíneo. + Supplement visant a remplacer le volume sanguin et remplace les plaquettes. + Składnik krwi, używany do zwiększenia jej objętości. + + + Plasma IV (500ml) + Плазма для в/в вливания (500 мл) + Plasma Intravenoso (500ml) + Plasma Sanguin IV (500ml) + Osocze IV (500ml) + + + Plasma IV (250ml) + Плазма для в/в вливания (250 мл) + Plasma Intravenoso (250ml) + Plasma Sanguin (250ml) + Osocze IV (250ml) + + + Blood IV (1000ml) + Кровь для переливания (1000 мл) + Sangre Intravenosa (1000ml) + Cullot Sanguin IV (1000ml) + Krew IV (1000ml) + + + Blood IV, for restoring a patients blood (keep cold) + Пакет крови для возмещения объема потерянной крови (хранить в холодильнике) + Sangre Intravenosa, para restarurar el volumen sanguíneo (mantener frío) + Cullot Sanguin IV, pour remplacer le volume sanguin (garder Réfrigeré) + Krew IV, używana do uzupełnienia krwi u pacjenta, trzymać w warunkach chłodniczych + + + O Negative infusion blood used in strict and rare events to replenish blood supply usually conducted in the transport phase of medical care. - Кровь I группы, резус-отрицательная, применяется по жизненным показаниям для возмещения объема + Кровь I группы, резус-отрицательная, применяется по жизненным показаниям для возмещения объема потерянной крови на догоспитальном этапе оказания медицинской помощи. - Cullot Sanguin O- ,utiliser seulement lors de perte sanguine majeur afin de remplacer le volume + Cullot Sanguin O- ,utiliser seulement lors de perte sanguine majeur afin de remplacer le volume sanguin perdu. Habituelment utiliser lors du transport ou dans un etablisement de soin. - Krew 0 Rh-, używana w rzadkich i szczególnych przypadkach do uzupełnienia krwi u pacjenta, zazwyczaj + Krew 0 Rh-, używana w rzadkich i szczególnych przypadkach do uzupełnienia krwi u pacjenta, zazwyczaj w trakcie fazie transportu rannej osoby do szpitala. - Utilice sólo durante gran pérdida de sangre para reemplazar el volumen de sangre perdido. Uso + Utilice sólo durante gran pérdida de sangre para reemplazar el volumen de sangre perdido. Uso habitual durante el transporte de heridos. - - - Blood IV (500ml) - Кровь для переливания (500 мл) - Sangre Intravenosa (500ml) - Cullot Sanguin IV (500ml) - Krew IV (500ml) - - - Blood IV (250ml) - Кровь для переливания (250 мл) - Sangre Intravenosa (250ml) - Cullot Sanguin IV (250ml) - Krew IV (250ml) - - - Saline IV (1000ml) - Физраствор для в/в вливания (1000 мл) - Solución Salina Intravenosa (1000ml) - solution Saline 0.9% IV (1000ml) - Solanka 0,9% IV (1000ml) - - - Saline IV, for restoring a patients blood - Пакет физраствора для возмещения объема потерянной крови - Solución Salina Intravenosa, para restaurar el volumen sanguíneo - Solution Saline 0.9% IV, pour retablir temporairement la tention arteriel - Solanka 0,9%, podawana dożylnie (IV), używana w celu uzupełnienia krwi u pacjenta - - - A medical volume-replenishing agent introduced into the blood system through an IV infusion. + + + Blood IV (500ml) + Кровь для переливания (500 мл) + Sangre Intravenosa (500ml) + Cullot Sanguin IV (500ml) + Krew IV (500ml) + + + Blood IV (250ml) + Кровь для переливания (250 мл) + Sangre Intravenosa (250ml) + Cullot Sanguin IV (250ml) + Krew IV (250ml) + + + Saline IV (1000ml) + Физраствор для в/в вливания (1000 мл) + Solución Salina Intravenosa (1000ml) + solution Saline 0.9% IV (1000ml) + Solanka 0,9% IV (1000ml) + + + Saline IV, for restoring a patients blood + Пакет физраствора для возмещения объема потерянной крови + Solución Salina Intravenosa, para restaurar el volumen sanguíneo + Solution Saline 0.9% IV, pour retablir temporairement la tention arteriel + Solanka 0,9%, podawana dożylnie (IV), używana w celu uzupełnienia krwi u pacjenta + + + A medical volume-replenishing agent introduced into the blood system through an IV infusion. - Пакет физиологического раствора для возмещения объема потерянной крови путем внутривенного + Пакет физиологического раствора для возмещения объема потерянной крови путем внутривенного вливания. - Suero fisiológico inoculado al torrente sanguíneo de forma intravenosa. - Un remplacment temporaire pour rétablir la tention artériel lors de perte sanguine, étant ajouter + Suero fisiológico inoculado al torrente sanguíneo de forma intravenosa. + Un remplacment temporaire pour rétablir la tention artériel lors de perte sanguine, étant ajouter par intraveineuse - Używany w medycynie w formie płynu infuzyjnego jako środek nawadniający i uzupełniający niedobór + Używany w medycynie w formie płynu infuzyjnego jako środek nawadniający i uzupełniający niedobór elektrolitów, podawany dożylnie (IV). - - - Saline IV (500ml) - Физраствор для в/в вливания (500 мл) - Solución Salina Intravenosa (500ml) - Solution Saline 0.9% IV (500ml) - Solanka 0,9% IV (500ml) - - - Saline IV (250ml) - Физраствор для в/в вливания (250 мл) - Solución Salina Intravenosa (250ml) - Solution Saline 0.9% IV (250ml) - Solanka 0,9% IV (250ml) - - - Basic Field Dressing (QuikClot) - Первичный перевязочный пакет (QuikClot) - Vendaje Básico (Coagulante) - Bandage Regulier (Coagulant) - Opatrunek QuikClot - - - QuikClot bandage - Гемостатический пакет QuikClot - Venda Coagulante - Bandage coagulant - Podstawowy opatrunek stosowany na rany - - - - - Un bandage servant a coaguler les seignements mineur à moyen. - Proszkowy opatrunek adsorbcyjny przeznaczony do tamowania zagrażających życiu krwawień średniej i + + + Saline IV (500ml) + Физраствор для в/в вливания (500 мл) + Solución Salina Intravenosa (500ml) + Solution Saline 0.9% IV (500ml) + Solanka 0,9% IV (500ml) + + + Saline IV (250ml) + Физраствор для в/в вливания (250 мл) + Solución Salina Intravenosa (250ml) + Solution Saline 0.9% IV (250ml) + Solanka 0,9% IV (250ml) + + + Basic Field Dressing (QuikClot) + Первичный перевязочный пакет (QuikClot) + Vendaje Básico (Coagulante) + Bandage Regulier (Coagulant) + Opatrunek QuikClot + + + QuikClot bandage + Гемостатический пакет QuikClot + Venda Coagulante + Bandage coagulant + Podstawowy opatrunek stosowany na rany + + + + + Un bandage servant a coaguler les seignements mineur à moyen. + Proszkowy opatrunek adsorbcyjny przeznaczony do tamowania zagrażających życiu krwawień średniej i dużej intensywności. - Vendaje Hemostático con coagulante que detiene el sangrado. - - - Personal Aid Kit - Аптечка - Kit de Soporte Vital Avanzado - Équipement de support Vitale - Apteczka osobista - - - Includes various treatment kit needed for stitching or advanced treatment - Содержит различные материалы и инструменты для зашивания ран и оказания специальной медпомощи. + Vendaje Hemostático con coagulante que detiene el sangrado. + + + Personal Aid Kit + Аптечка + Kit de Soporte Vital Avanzado + Équipement de support Vitale + Apteczka osobista + + + Includes various treatment kit needed for stitching or advanced treatment + Содержит различные материалы и инструменты для зашивания ран и оказания специальной медпомощи. - Incluye material médico para tratamientos avanzados - Inclue du matériel medical pour les traitement avancé, tel les point de suture. - Zestaw środków medycznych do opatrywania ran i dodatkowego leczenia po-urazowego - - - - - - - - - Surgical Kit - Хирургический набор - Kit Quirúrgico - - - Surgical Kit for in field advanced medical treatment - Набор для хирургической помощи в полевых условиях - Kit Quirúrgico para el tratamiento avanzado en el campo de batalla - - - Surgical Kit for in field advanced medical treatment - Набор для хирургической помощи в полевых условиях - Kit Quirúrgico para el tratamiento avanzado en el campo de batalla - - - Bodybag - Мешок для трупов - Bolsa para cadáveres - - - A bodybag for dead bodies - Мешок для упаковки трупов - Bolsa para cadáveres - - - A bodybag for dead bodies - Мешок для упаковки трупов - Bolsa para cadáveres - - - Blood Pressure - Артериальное давление - Presión Arterial - - - Checking Blood Pressure.. - Проверка артериального давления... - Comprobando Presión Arterial... - - - You checked %1 - Вы осмотрели раненого %1 - Examinando a %1 - - - You find a blood pressure of %2/%3 - Артериальное давление %2/%3 - La Presión Arterial es %2/%3 - - - You find a low blood pressure - Давление низкое - La Presión Arterial es baja - - - You find a normal blood pressure - Давление нормальное - La Presión Arterial es normal - - - You find a high blood pressure - Давление высокое - La Presión Arterial es alta - - - You find no blood pressure - Давления нет - No hay Presión Arterial - - - You fail to find a blood pressure - Артериальное давление не определяется - No puedes encontrar Presión Arterial - - - Pulse - Пульс - Pulso - - - Checking Heart Rate.. - Проверка пульса... - Comprobando Pulso... - - - You checked %1 - Вы осмотрели раненого %1 - Examinando a %1 - - - You find a Heart Rate of %2 - Пульс %2 уд./мин. - El Pulso es %2 - - - You find a weak Heart Rate - Пульс слабый - El Pulso es débil - - - You find a strong Heart Rate - Пульс учащенный - El Pulso está acelerado - - - You find a normal Heart Rate - Пульс в норме - El Pulso es bueno - - - You find no Heart Rate - Пульс не прощупывается - No tiene Pulso - - - Response - Реакция - Reacciona - - - You check response of patient - Вы проверяете реакцию раненого - Compruebas si el paciente reacciona - - - %1 is responsive - %1 реагирует на раздражители - %1 ha reaccionado - - - %1 is not responsive - %1 не реагирует - %1 no reacciona - - - You checked %1 - Вы осмотрели раненого %1 - Examinas a %1 - - - Bandaged - Повязка наложена - Vendado - - - You bandage %1 (%2) - Вы перевязали раненого %1 (%2) - Aplicas vendaje a %1 en %2 - - - %1 is bandaging you - %1 перевязывает вас - %1 te está vendando - - - You start stitching injures from %1 (%2) - Вы зашиваете ранения от %1 (%2) - Estás suturando heridas de %1 en %2 - - - Stitching - Наложение швов - Suturando - - - You treat the airway of %1 - Вы интубируете раненого %1 - Estás intubando a %1 - - - Airway - Дыхательные пути - Vías Aéreas - - - %1 is treating your airway - %1 проводит вам интубацию - %1 te está intubando - - - Drag - Ziehen - Arrastrar - Ciągnij - Táhnout - Тащить - Tracter - Húzás - Arrastar - Trascina - - - Carry - Tragen - Cargar - Nieś - Nést - Нести - Porter - Cipelés - Carregar - Trasporta - - - Release - Loslassen - Soltar - Połóż - Položit - Отпустить - Déposer - Elenged - Largar - Lascia - - - Load Patient Into - Patient Einladen - Cargar el paciente en - Załaduj pacjenta - Naložit pacianta do - Погрузить пациента в - Embarquer le Patient - Sebesült berakása - Carregar Paciente Em - Carica paziente nel - - - Unload Patient - Patient Ausladen - Descargar el paciente - Wyładuj pacjenta - Vyložit pacienta - Выгрузить пациента - Débarquer le Patient - Sebesült kihúzása - Descarregar Paciente - Scarica il paziente - - - Unload patient - Выгрузить пациента - - - Load patient - Погрузить пациента - - - Place body in bodybag - Поместить тело в мешок - - - Placing body in bodybag - Помещение тела в мешок ... - - - %1 has bandaged patient - %1 перевязал пациента - - - %1 used %2 - %1 применил %2 - - - %1 has given an IV - %1 провел переливание - - - %1 applied a tourniquet - %1 наложил жгут - - - \ No newline at end of file + Incluye material médico para tratamientos avanzados + Inclue du matériel medical pour les traitement avancé, tel les point de suture. + Zestaw środków medycznych do opatrywania ran i dodatkowego leczenia po-urazowego + + + + + + + + + Surgical Kit + Хирургический набор + Kit Quirúrgico + + + Surgical Kit for in field advanced medical treatment + Набор для хирургической помощи в полевых условиях + Kit Quirúrgico para el tratamiento avanzado en el campo de batalla + + + Surgical Kit for in field advanced medical treatment + Набор для хирургической помощи в полевых условиях + Kit Quirúrgico para el tratamiento avanzado en el campo de batalla + + + Bodybag + Мешок для трупов + Bolsa para cadáveres + + + A bodybag for dead bodies + Мешок для упаковки трупов + Bolsa para cadáveres + + + A bodybag for dead bodies + Мешок для упаковки трупов + Bolsa para cadáveres + + + + Blood Pressure + Артериальное давление + Presión Arterial + + + Checking Blood Pressure.. + Проверка артериального давления... + Comprobando Presión Arterial... + + + You checked %1 + Вы осмотрели раненого %1 + Examinando a %1 + + + You find a blood pressure of %2/%3 + Артериальное давление %2/%3 + La Presión Arterial es %2/%3 + + + You find a low blood pressure + Давление низкое + La Presión Arterial es baja + + + You find a normal blood pressure + Давление нормальное + La Presión Arterial es normal + + + You find a high blood pressure + Давление высокое + La Presión Arterial es alta + + + You find no blood pressure + Давления нет + No hay Presión Arterial + + + You fail to find a blood pressure + Артериальное давление не определяется + No puedes encontrar Presión Arterial + + + Pulse + Пульс + Pulso + + + Checking Heart Rate.. + Проверка пульса... + Comprobando Pulso... + + + You checked %1 + Вы осмотрели раненого %1 + Examinando a %1 + + + You find a Heart Rate of %2 + Пульс %2 уд./мин. + El Pulso es %2 + + + You find a weak Heart Rate + Пульс слабый + El Pulso es débil + + + You find a strong Heart Rate + Пульс учащенный + El Pulso está acelerado + + + You find a normal Heart Rate + Пульс в норме + El Pulso es bueno + + + You find no Heart Rate + Пульс не прощупывается + No tiene Pulso + + + Response + Реакция + Reacciona + + + You check response of patient + Вы проверяете реакцию раненого + Compruebas si el paciente reacciona + + + %1 is responsive + %1 реагирует на раздражители + %1 ha reaccionado + + + %1 is not responsive + %1 не реагирует + %1 no reacciona + + + You checked %1 + Вы осмотрели раненого %1 + Examinas a %1 + + + Bandaged + Повязка наложена + Vendado + + + You bandage %1 (%2) + Вы перевязали раненого %1 (%2) + Aplicas vendaje a %1 en %2 + + + %1 is bandaging you + %1 перевязывает вас + %1 te está vendando + + + You start stitching injures from %1 (%2) + Вы зашиваете ранения от %1 (%2) + Estás suturando heridas de %1 en %2 + + + Stitching + Наложение швов + Suturando + + + You treat the airway of %1 + Вы интубируете раненого %1 + Estás intubando a %1 + + + Airway + Дыхательные пути + Vías Aéreas + + + %1 is treating your airway + %1 проводит вам интубацию + %1 te está intubando + + + Drag + Ziehen + Arrastrar + Ciągnij + Táhnout + Тащить + Tracter + Húzás + Arrastar + Trascina + + + Carry + Tragen + Cargar + Nieś + Nést + Нести + Porter + Cipelés + Carregar + Trasporta + + + Release + Loslassen + Soltar + Połóż + Položit + Отпустить + Déposer + Elenged + Largar + Lascia + + + Load Patient Into + Patient Einladen + Cargar el paciente en + Załaduj pacjenta + Naložit pacianta do + Погрузить пациента в + Embarquer le Patient + Sebesült berakása + Carregar Paciente Em + Carica paziente nel + + + Unload Patient + Patient Ausladen + Descargar el paciente + Wyładuj pacjenta + Vyložit pacienta + Выгрузить пациента + Débarquer le Patient + Sebesült kihúzása + Descarregar Paciente + Scarica il paziente + + + Unload patient + + + Load patient + + + Place body in bodybag + + + Placing body in bodybag + + + + %1 has bandaged patient + + + %1 used %2 + + + %1 has given an IV + + + %1 applied a tourniquet + + + + diff --git a/addons/microdagr/stringtable.xml b/addons/microdagr/stringtable.xml index 823a7a7f8d..772a7a172f 100644 --- a/addons/microdagr/stringtable.xml +++ b/addons/microdagr/stringtable.xml @@ -1,30 +1,24 @@  - + MicroDAGR GPS - MicroDAGR GPS MicroDAGR advanced GPS receiver - Многофункциональный GPS-приёмник. Angular Unit: - Угловые единицы: Mils - Тысячные Show Waypoints On Map: - Показывать маршрутные точки на карте: Degrees - Градусы On @@ -50,55 +44,43 @@ Enter Grid Cords: - Введите координаты: Name of [%1] - Название [%1] MGRS-New - MGRS-Новая WGD - WGD Range: Reichweite: - Дистанция: Compass Direction - Азимут Mark - Отметка Waypoints Wegpunkte - Машрутные точки Connect To - Соединиться с Settings Einstellungen Configuración - Настройки SetWP - Установить МТ Add - Добавить Delete @@ -113,19 +95,15 @@ Toggle MicroDAGR Display Mode - Сменить режим показа MicroDAGR Show MicoDAGR - Показать MicroDAGR Configure MicroDAGR - Настроить MicroDAGR Close MicroDAGR - Закрыть MicroDAGR \ No newline at end of file diff --git a/addons/missileguidance/CfgAmmo.hpp b/addons/missileguidance/CfgAmmo.hpp index 01ab65c388..df876ae2ae 100644 --- a/addons/missileguidance/CfgAmmo.hpp +++ b/addons/missileguidance/CfgAmmo.hpp @@ -1,10 +1,10 @@ -class CfgAmmo { - class MissileBase; - - class M_PG_AT : MissileBase { - irLock = 0; - laserLock = 0; - airLock = 0; - manualControl = 0; - }; +class CfgAmmo { + class MissileBase; + + class M_PG_AT : MissileBase { + irLock = 0; + laserLock = 0; + airLock = 0; + manualControl = 0; + }; }; \ No newline at end of file diff --git a/addons/missileguidance/CfgEventhandlers.hpp b/addons/missileguidance/CfgEventhandlers.hpp index eac270c27d..2775490d11 100644 --- a/addons/missileguidance/CfgEventhandlers.hpp +++ b/addons/missileguidance/CfgEventhandlers.hpp @@ -1,17 +1,17 @@ -class Extended_PreInit_EventHandlers { - class ADDON { - init = QUOTE(call COMPILE_FILE(XEH_pre_init)); - }; -}; - -class Extended_PostInit_EventHandlers { - class ADDON { - init = QUOTE(call COMPILE_FILE(XEH_post_init)); - }; -}; - -class Extended_FiredBIS_EventHandlers { - class AllVehicles { - ADDON = QUOTE(_this call FUNC(fired)); - }; +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_pre_init)); + }; +}; + +class Extended_PostInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_post_init)); + }; +}; + +class Extended_FiredBIS_EventHandlers { + class AllVehicles { + ADDON = QUOTE(_this call FUNC(fired)); + }; }; \ No newline at end of file diff --git a/addons/missileguidance/CfgWeapons.hpp b/addons/missileguidance/CfgWeapons.hpp index 65e23facf0..739ef3c5e0 100644 --- a/addons/missileguidance/CfgWeapons.hpp +++ b/addons/missileguidance/CfgWeapons.hpp @@ -1,34 +1,34 @@ -class Mode_SemiAuto; -class CfgWeapons { - class CannonCore; - class LauncherCore; - - class RocketPods: LauncherCore { - canLock = 1; - }; - class missiles_DAGR: RocketPods { - canLock = 1; - }; - /* - class autocannon_Base_F: CannonCore { - canLock = 1; - }; - class cannon_120mm: CannonCore { - canLock = 1; - - class player : Mode_SemiAuto { - canLock = 1; - }; - }; - class gatling_25mm: CannonCore { - canLock = 1; - }; - class autocannon_35mm: CannonCore { - canLock = 1; - }; - - class launch_NLAW_F: Launcher_Base_F - { - canLock = 1; - };*/ +class Mode_SemiAuto; +class CfgWeapons { + class CannonCore; + class LauncherCore; + + class RocketPods: LauncherCore { + canLock = 1; + }; + class missiles_DAGR: RocketPods { + canLock = 1; + }; + /* + class autocannon_Base_F: CannonCore { + canLock = 1; + }; + class cannon_120mm: CannonCore { + canLock = 1; + + class player : Mode_SemiAuto { + canLock = 1; + }; + }; + class gatling_25mm: CannonCore { + canLock = 1; + }; + class autocannon_35mm: CannonCore { + canLock = 1; + }; + + class launch_NLAW_F: Launcher_Base_F + { + canLock = 1; + };*/ }; \ No newline at end of file diff --git a/addons/missileguidance/XEH_post_init.sqf b/addons/missileguidance/XEH_post_init.sqf index a4e4806591..6904ee6c47 100644 --- a/addons/missileguidance/XEH_post_init.sqf +++ b/addons/missileguidance/XEH_post_init.sqf @@ -1,3 +1,3 @@ -#include "script_component.hpp" -NO_DEDICATED; - +#include "script_component.hpp" +NO_DEDICATED; + diff --git a/addons/missileguidance/XEH_pre_init.sqf b/addons/missileguidance/XEH_pre_init.sqf index cbdebddf12..8aa557f838 100644 --- a/addons/missileguidance/XEH_pre_init.sqf +++ b/addons/missileguidance/XEH_pre_init.sqf @@ -1,14 +1,14 @@ -#include "script_component.hpp" - -PREP(rotateVectLineGetMap); -PREP(rotateVectLine); - -PREP(translateToModelSpace); -PREP(translateToWeaponSpace); - -PREP(fired); - -PREP(guidance_DAGR); -PREP(guidance_LGB); -PREP(guidance_HellfireII); +#include "script_component.hpp" + +PREP(rotateVectLineGetMap); +PREP(rotateVectLine); + +PREP(translateToModelSpace); +PREP(translateToWeaponSpace); + +PREP(fired); + +PREP(guidance_DAGR); +PREP(guidance_LGB); +PREP(guidance_HellfireII); FUNC(getPosASL) = {visiblePositionASL (_this select 0)}; \ No newline at end of file diff --git a/addons/missileguidance/config.cpp b/addons/missileguidance/config.cpp index 4de2dd404d..0341a56df6 100644 --- a/addons/missileguidance/config.cpp +++ b/addons/missileguidance/config.cpp @@ -1,15 +1,15 @@ -#include "script_component.hpp" - -class CfgPatches { - class ADDON { - units[] = {}; - weapons[] = {}; - requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"ace_laser"}; - VERSION_CONFIG; - }; -}; - -#include "CfgEventhandlers.hpp" -#include "CfgAmmo.hpp" +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_laser"}; + VERSION_CONFIG; + }; +}; + +#include "CfgEventhandlers.hpp" +#include "CfgAmmo.hpp" #include "CfgWeapons.hpp" \ No newline at end of file diff --git a/addons/missileguidance/functions/fnc_fired.sqf b/addons/missileguidance/functions/fnc_fired.sqf index 028b09d691..dbe6abfec7 100644 --- a/addons/missileguidance/functions/fnc_fired.sqf +++ b/addons/missileguidance/functions/fnc_fired.sqf @@ -1,18 +1,18 @@ -//#define DEBUG_MODE_FULL -#include "script_component.hpp" -//_this=[TEST_AI_HELICOPTER,"missiles_DAGR","missiles_DAGR","Far_AI","M_PG_AT","24Rnd_PG_missiles",163988: rocket_01_fly_f.p3d] -TRACE_1("enter", _this); -PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); - -if(!local _shooter) exitWith { false }; - -switch _weapon do { - case "missiles_DAGR": { - _this call FUNC(guidance_DAGR); - }; - case "GBU12BombLauncher": { - _this call FUNC(guidance_LGB); - }; -}; - -//_this call FUNC(guidance_HellfireII); +//#define DEBUG_MODE_FULL +#include "script_component.hpp" +//_this=[TEST_AI_HELICOPTER,"missiles_DAGR","missiles_DAGR","Far_AI","M_PG_AT","24Rnd_PG_missiles",163988: rocket_01_fly_f.p3d] +TRACE_1("enter", _this); +PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); + +if(!local _shooter) exitWith { false }; + +switch _weapon do { + case "missiles_DAGR": { + _this call FUNC(guidance_DAGR); + }; + case "GBU12BombLauncher": { + _this call FUNC(guidance_LGB); + }; +}; + +//_this call FUNC(guidance_HellfireII); diff --git a/addons/missileguidance/functions/fnc_guidance_DAGR.sqf b/addons/missileguidance/functions/fnc_guidance_DAGR.sqf index b50e5b763f..9055b00a7f 100644 --- a/addons/missileguidance/functions/fnc_guidance_DAGR.sqf +++ b/addons/missileguidance/functions/fnc_guidance_DAGR.sqf @@ -1,120 +1,120 @@ -//#define DEBUG_MODE_FULL -#include "script_component.hpp" - -FUNC(guidance_DIRECT_LOAL_PFH) = { - //TRACE_1("enter", _this); - private["_args", "_shooter", "_dagr", "_curVelocity", "_targets", "_target", "_yVec", "_xVec", "_zVec", "_dagrPos", "_shooterPos", "_distanceToTarget", "_distanceToShooter", "_def"]; - _args = _this select 0; - //PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); - _shooter = _args select 0; - _dagr = _args select 6; - _curVelocity = velocity _dagr; - - if(!alive _dagr || isNull _dagr || isNull _shooter) exitWith { - [(_this select 1)] call cba_fnc_removePerFrameHandler; - }; - - _targets = [_dagr, ACE_DEFAULT_LASER_CODE, 70, _curVelocity] call ace_laser_fnc_findLaserDesignator; - TRACE_2("Targets", _target, _targets); - - if((_targets select 0)) then { - _target = _targets select 1; - - // player sideChat "FUCK!"; - // drop ["\a3\data_f\Cl_basic","","Billboard",1,20,(getPos _dagr),[0,0,0],1,1.275,1.0,0.0,[5],[[1,0,0,1]],[0],0.0,2.0,"","",""]; - - - _yVec = vectorDir _dagr; - _zVec = vectorUp _dagr; - _xVec = vectorNormalized (_yVec vectorCrossProduct _zVec); - - _dagrPos = getPosASL _dagr; - // player sideChat "G!"; - _targetPos = getPosASL _target; - _shooterPos = getPosASL _shooter; - - if((count _targetPos) > 0) then { - _distanceToTarget = _dagrPos vectorDistance _targetPos; - _distanceToShooter = _dagrPos vectorDistance _shooterPos; - - _addHeight = [0,0,(_dagrPos distance _targetPos)*0.02]; - #ifdef DEBUG_MODE_FULL - drawLine3D [(ASLtoATL _targetPos) vectorAdd _addHeight, ASLtoATL _targetPos, [0,1,0,1]]; - #endif - - _targetPos = _targetPos vectorAdd _addHeight; - - _def = 0.0040; - if(_distanceToShooter > 100) then { - _def = 0.0025; - }; - - _targetVectorSeeker = [_dagr, [_xVec, _yVec, _zVec], _targetPos] call FUNC(translateToWeaponSpace); - // _targetVectorSeeker = _dagr worldToModel (ASLtoATL _targetPos); - // _targetVectorSeeker = [0,0,0] vectorFromTo _targetVectorSeeker; - _yaw = 0.0; - if((_targetVectorSeeker select 0) < 0) then { - _yaw = -_def; - } else { - if((_targetVectorSeeker select 0) > 0) then { - _yaw = _def; - }; - }; - - _pitch = 0.0; - if((_targetVectorSeeker select 2) < 0) then { - _pitch = -_def; - } else { - if((_targetVectorSeeker select 2) > 0) then { - _pitch = _def; - }; - }; - #ifdef DEBUG_MODE_FULL - drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,1,1,1], ASLtoATL _dagrPos, 0.75, 0.75, 0, str _vectorTo, 1, 0.025, "TahomaB"]; - drawLine3D [ASLtoATL _dagrPos, ASLtoATL _targetPos, [1,0,0,1]]; - - _distance = ([getPos startPos, _dagrPos] call BIS_fnc_distance2D); - _marker = createMarkerLocal [format["m%1", MARKERCOUNT], [_distance, _dagrPos select 2]]; - _marker setMarkerTypeLocal "mil_dot"; - _marker setMarkerColorLocal "ColorRed"; - - MARKERCOUNT = MARKERCOUNT + 1; - #endif - - if(accTime > 0) then { - _outVector = [_dagr, [_xVec, _yVec, _zVec], [_yaw, 1/accTime, _pitch]] call FUNC(translateToModelSpace); - // _outVector = _dagr modelToWorldVisual [_yaw, 1, _pitch]; - // _outVector = ATLtoASL _outVector; - _vectorTo = _dagrPos vectorFromTo _outVector; - - // hintSilent format["v: %1", _vectorTo]; - - // _dagr setVectorDir _vectorTo; - _dagr setVectorDirAndUp [_vectorTo, vectorUp _dagr]; - }; - - #ifdef DEBUG_MODE_FULL - hintSilent format["d: %1", _distanceToTarget]; - #endif - }; - }; -}; - -FUNC(guidance_DAGR_DIRECT_LOAL) = { - PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); - - GVAR(lastTime) = time; - [FUNC(guidance_DIRECT_LOAL_PFH), 0, _this] call cba_fnc_addPerFrameHandler; -}; - -PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); -_fireMode = _shooter getVariable ["ACE_FIRE_SELECTION", ACE_DEFAULT_FIRE_SELECTION]; - -switch (_fireMode select 0) do { - // Default to FIREMODE_DIRECT_LOAL - // FIREMODE_DIRECT_LOAL - default { - LOG("Initiating DAGR FIREMODE_DIRECT_LOAL"); - _this call FUNC(guidance_DAGR_DIRECT_LOAL); - }; +//#define DEBUG_MODE_FULL +#include "script_component.hpp" + +FUNC(guidance_DIRECT_LOAL_PFH) = { + //TRACE_1("enter", _this); + private["_args", "_shooter", "_dagr", "_curVelocity", "_targets", "_target", "_yVec", "_xVec", "_zVec", "_dagrPos", "_shooterPos", "_distanceToTarget", "_distanceToShooter", "_def"]; + _args = _this select 0; + //PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); + _shooter = _args select 0; + _dagr = _args select 6; + _curVelocity = velocity _dagr; + + if(!alive _dagr || isNull _dagr || isNull _shooter) exitWith { + [(_this select 1)] call cba_fnc_removePerFrameHandler; + }; + + _targets = [_dagr, ACE_DEFAULT_LASER_CODE, 70, _curVelocity] call ace_laser_fnc_findLaserDesignator; + TRACE_2("Targets", _target, _targets); + + if((_targets select 0)) then { + _target = _targets select 1; + + // player sideChat "FUCK!"; + // drop ["\a3\data_f\Cl_basic","","Billboard",1,20,(getPos _dagr),[0,0,0],1,1.275,1.0,0.0,[5],[[1,0,0,1]],[0],0.0,2.0,"","",""]; + + + _yVec = vectorDir _dagr; + _zVec = vectorUp _dagr; + _xVec = vectorNormalized (_yVec vectorCrossProduct _zVec); + + _dagrPos = getPosASL _dagr; + // player sideChat "G!"; + _targetPos = getPosASL _target; + _shooterPos = getPosASL _shooter; + + if((count _targetPos) > 0) then { + _distanceToTarget = _dagrPos vectorDistance _targetPos; + _distanceToShooter = _dagrPos vectorDistance _shooterPos; + + _addHeight = [0,0,(_dagrPos distance _targetPos)*0.02]; + #ifdef DEBUG_MODE_FULL + drawLine3D [(ASLtoATL _targetPos) vectorAdd _addHeight, ASLtoATL _targetPos, [0,1,0,1]]; + #endif + + _targetPos = _targetPos vectorAdd _addHeight; + + _def = 0.0040; + if(_distanceToShooter > 100) then { + _def = 0.0025; + }; + + _targetVectorSeeker = [_dagr, [_xVec, _yVec, _zVec], _targetPos] call FUNC(translateToWeaponSpace); + // _targetVectorSeeker = _dagr worldToModel (ASLtoATL _targetPos); + // _targetVectorSeeker = [0,0,0] vectorFromTo _targetVectorSeeker; + _yaw = 0.0; + if((_targetVectorSeeker select 0) < 0) then { + _yaw = -_def; + } else { + if((_targetVectorSeeker select 0) > 0) then { + _yaw = _def; + }; + }; + + _pitch = 0.0; + if((_targetVectorSeeker select 2) < 0) then { + _pitch = -_def; + } else { + if((_targetVectorSeeker select 2) > 0) then { + _pitch = _def; + }; + }; + #ifdef DEBUG_MODE_FULL + drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,1,1,1], ASLtoATL _dagrPos, 0.75, 0.75, 0, str _vectorTo, 1, 0.025, "TahomaB"]; + drawLine3D [ASLtoATL _dagrPos, ASLtoATL _targetPos, [1,0,0,1]]; + + _distance = ([getPos startPos, _dagrPos] call BIS_fnc_distance2D); + _marker = createMarkerLocal [format["m%1", MARKERCOUNT], [_distance, _dagrPos select 2]]; + _marker setMarkerTypeLocal "mil_dot"; + _marker setMarkerColorLocal "ColorRed"; + + MARKERCOUNT = MARKERCOUNT + 1; + #endif + + if(accTime > 0) then { + _outVector = [_dagr, [_xVec, _yVec, _zVec], [_yaw, 1/accTime, _pitch]] call FUNC(translateToModelSpace); + // _outVector = _dagr modelToWorldVisual [_yaw, 1, _pitch]; + // _outVector = ATLtoASL _outVector; + _vectorTo = _dagrPos vectorFromTo _outVector; + + // hintSilent format["v: %1", _vectorTo]; + + // _dagr setVectorDir _vectorTo; + _dagr setVectorDirAndUp [_vectorTo, vectorUp _dagr]; + }; + + #ifdef DEBUG_MODE_FULL + hintSilent format["d: %1", _distanceToTarget]; + #endif + }; + }; +}; + +FUNC(guidance_DAGR_DIRECT_LOAL) = { + PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); + + GVAR(lastTime) = time; + [FUNC(guidance_DIRECT_LOAL_PFH), 0, _this] call cba_fnc_addPerFrameHandler; +}; + +PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); +_fireMode = _shooter getVariable ["ACE_FIRE_SELECTION", ACE_DEFAULT_FIRE_SELECTION]; + +switch (_fireMode select 0) do { + // Default to FIREMODE_DIRECT_LOAL + // FIREMODE_DIRECT_LOAL + default { + LOG("Initiating DAGR FIREMODE_DIRECT_LOAL"); + _this call FUNC(guidance_DAGR_DIRECT_LOAL); + }; }; \ No newline at end of file diff --git a/addons/missileguidance/functions/fnc_guidance_HellfireII.sqf b/addons/missileguidance/functions/fnc_guidance_HellfireII.sqf index 0c35786b92..72b8da8c67 100644 --- a/addons/missileguidance/functions/fnc_guidance_HellfireII.sqf +++ b/addons/missileguidance/functions/fnc_guidance_HellfireII.sqf @@ -1,249 +1,249 @@ -//#define DEBUG_MODE_FULL -#include "script_component.hpp" - -FUNC(guidance_Hellfire_LOAL_HI_PFH) = { - //TRACE_1("enter", _this); - _args = _this select 0; - //PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); - _shooter = _args select 0; - _missile = _args select 6; - _curVelocity = velocity _missile; - - if(!alive _missile || isNull _missile || isNull _shooter) exitWith { - [(_this select 1)] call cba_fnc_removePerFrameHandler; - }; - - _launchPos = _shooter getVariable [QGVAR(launchPos), nil]; - if(isNil "_launchPos") then { - TRACE_1("Setting launch parameters", ""); - _launchPos = getPosASL _shooter; - _shooter setVariable [QGVAR(launchPos), _launchPos, false]; - _shooter setVariable [QGVAR(launchTime), diag_tickTime, false]; - }; - - _targets = [_missile, ACE_DEFAULT_LASER_CODE, 70, _curVelocity] call ace_laser_fnc_findLaserDesignator; - _addHeight = [0,0,0]; - if((_targets select 0)) then { - _target = _targets select 1; - TRACE_2("Targets", _target, _targets); - - _yVec = vectorDir _missile; - _zVec = vectorUp _missile; - _xVec = vectorNormalized (_yVec vectorCrossProduct _zVec); - - _missilePos = getPosASL _missile; - // player sideChat "G!"; - _targetPos = getPosASL _target; - TRACE_4("Phase Check", _launchPos, _missilePos, _targetPos, (_missilePos distance _targetPos)); - if((count _targetPos) > 0) then { - _distanceToTarget = _missilePos vectorDistance _targetPos; - - _defPitch = 0.05; - - if((_launchPos distance _missilePos) < 400 && (_targetPos distance _missilePos) > 400) then { - _addHeight = [0,0,(_targetPos select 2) + ((_launchPos distance _targetPos)*2)]; - TRACE_1("Climb phase", _addHeight); - //_defPitch = 0.1; - } else { - // Covered half the distance, go terminal - if((_missilePos distance _targetPos) < (_launchPos distance _targetPos) / 2) then { - TRACE_1("TERMINAL", ""); - } else { - if((_missilePos select 2) > (_targetPos select 2)) then { - _heightDiff = (_missilePos select 2) - (_targetPos select 2); - TRACE_1("Coasting", _heightDiff); - _addHeight = [0,0, _heightDiff]; - }; - }; - }; - _targetPos = _targetPos vectorAdd _addHeight; - - _defYaw = 0.0035; - - - _targetVectorSeeker = [_missile, [_xVec, _yVec, _zVec], _targetPos] call FUNC(translateToWeaponSpace); - _yaw = 0.0; - if((_targetVectorSeeker select 0) < 0) then { - _yaw = -_defYaw; - } else { - if((_targetVectorSeeker select 0) > 0) then { - _yaw = _defYaw; - }; - }; - - _pitch = 0.0; - if((_targetVectorSeeker select 2) < 0) then { - _pitch = -_defPitch; - } else { - if((_targetVectorSeeker select 2) > 0) then { - _pitch = _defPitch; - }; - }; - #ifdef DEBUG_MODE_FULL - drawLine3D [(ASLtoATL _targetPos) vectorAdd _addHeight, ASLtoATL _targetPos, [0,1,0,1]]; - - _light = "#lightpoint" createVehicleLocal (getPos _missile); - _light setLightBrightness 1.0; - _light setLightAmbient [1.0, 0.0, 0.0]; - _light setLightColor [1.0, 0.0, 0.0]; - - drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,1,1,1], ASLtoATL _missilePos, 0.75, 0.75, 0, str _vectorTo, 1, 0.025, "TahomaB"]; - drawLine3D [ASLtoATL _missilePos, ASLtoATL _targetPos, [1,0,0,1]]; - - _distance = ([getPos startPos, _missilePos] call BIS_fnc_distance2D); - _marker = createMarkerLocal [format["m%1", MARKERCOUNT], [_distance, _missilePos select 2]]; - _marker setMarkerTypeLocal "mil_dot"; - _marker setMarkerColorLocal "ColorRed"; - - MARKERCOUNT = MARKERCOUNT + 1; - #endif - - if(accTime > 0) then { - _outVector = [_missile, [_xVec, _yVec, _zVec], [_yaw, 1/accTime, _pitch]] call FUNC(translateToModelSpace); - - _vectorTo = _missilePos vectorFromTo _outVector; - _missile setVectorDirAndUp [_vectorTo, vectorUp _missile]; - }; - - #ifdef DEBUG_MODE_FULL - hintSilent format["d: %1", _distanceToTarget]; - #endif - }; - }; -}; - -FUNC(guidance_Hellfire_LOAL_DIR_PFH) = { - //TRACE_1("enter", _this); - _args = _this select 0; - //PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); - _shooter = _args select 0; - _missile = _args select 6; - _curVelocity = velocity _missile; - - if(!alive _missile || isNull _missile || isNull _shooter) exitWith { - [(_this select 1)] call cba_fnc_removePerFrameHandler; - }; - - _launchPos = _shooter getVariable [QGVAR(launchPos), nil]; - if(isNil "_launchPos") then { - TRACE_1("Setting launch parameters", ""); - _launchPos = getPosASL _shooter; - _shooter setVariable [QGVAR(launchPos), _launchPos, false]; - _shooter setVariable [QGVAR(launchTime), diag_tickTime, false]; - }; - - _targets = [_missile, ACE_DEFAULT_LASER_CODE, 70, _curVelocity] call ace__laser_fnc_findLaserDesignator; - _addHeight = [0,0,0]; - if((_targets select 0)) then { - _target = _targets select 1; - TRACE_2("Targets", _target, _targets); - - _yVec = vectorDir _missile; - _zVec = vectorUp _missile; - _xVec = vectorNormalized (_yVec vectorCrossProduct _zVec); - - _missilePos = getPosASL _missile; - // player sideChat "G!"; - _targetPos = getPosASL _target; - TRACE_4("Phase Check", _launchPos, _missilePos, _targetPos, (_missilePos distance _targetPos)); - if((count _targetPos) > 0) then { - _distanceToTarget = _missilePos vectorDistance _targetPos; - - if((_launchPos distance _missilePos) < 400 && (_targetPos distance _missilePos) > 400) then { - _addHeight = [0,0,(_targetPos select 2) + (_missilePos distance _targetPos)*0.5]; - TRACE_1("Climb phase", _addHeight); - } else { - // Covered half the distance, go terminal - if((_missilePos distance _targetPos) < (_launchPos distance _targetPos) / 2) then { - TRACE_1("TERMINAL", ""); - } else { - if((_missilePos select 2) > (_targetPos select 2)) then { - _heightDiff = (_missilePos select 2) - (_targetPos select 2); - TRACE_1("Coasting", _heightDiff); - _addHeight = [0,0, _heightDiff]; - }; - }; - }; - _targetPos = _targetPos vectorAdd _addHeight; - - _defYaw = 0.0035; - _defPitch = 0.0075; - - _targetVectorSeeker = [_missile, [_xVec, _yVec, _zVec], _targetPos] call FUNC(translateToWeaponSpace); - _yaw = 0.0; - if((_targetVectorSeeker select 0) < 0) then { - _yaw = -_defYaw; - } else { - if((_targetVectorSeeker select 0) > 0) then { - _yaw = _defYaw; - }; - }; - - _pitch = 0.0; - if((_targetVectorSeeker select 2) < 0) then { - _pitch = -_defPitch; - } else { - if((_targetVectorSeeker select 2) > 0) then { - _pitch = _defPitch; - }; - }; - #ifdef DEBUG_MODE_FULL - drawLine3D [(ASLtoATL _targetPos) vectorAdd _addHeight, ASLtoATL _targetPos, [0,1,0,1]]; - - _light = "#lightpoint" createVehicleLocal (getPos _missile); - _light setLightBrightness 1.0; - _light setLightAmbient [1.0, 0.0, 0.0]; - _light setLightColor [1.0, 0.0, 0.0]; - - drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,1,1,1], ASLtoATL _missilePos, 0.75, 0.75, 0, str _vectorTo, 1, 0.025, "TahomaB"]; - drawLine3D [ASLtoATL _missilePos, ASLtoATL _targetPos, [1,0,0,1]]; - - _distance = ([getPos startPos, _missilePos] call BIS_fnc_distance2D); - _marker = createMarkerLocal [format["m%1", MARKERCOUNT], [_distance, _missilePos select 2]]; - _marker setMarkerTypeLocal "mil_dot"; - _marker setMarkerColorLocal "ColorRed"; - - MARKERCOUNT = MARKERCOUNT + 1; - #endif - - if(accTime > 0) then { - _outVector = [_missile, [_xVec, _yVec, _zVec], [_yaw, 1/accTime, _pitch]] call FUNC(translateToModelSpace); - - _vectorTo = _missilePos vectorFromTo _outVector; - _missile setVectorDirAndUp [_vectorTo, vectorUp _missile]; - }; - - #ifdef DEBUG_MODE_FULL - hintSilent format["d: %1", _distanceToTarget]; - #endif - }; - }; -}; - - -FUNC(guidance_Hellfire_LOAL_HI) = { - PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); - - GVAR(lastTime) = time; - [FUNC(guidance_Hellfire_LOAL_HI_PFH), 0, _this] call cba_fnc_addPerFrameHandler; -}; - - -FUNC(guidance_Hellfire_LOAL_DIR) = { - PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); - - GVAR(lastTime) = time; - [FUNC(guidance_Hellfire_LOAL_DIR_PFH), 0, _this] call cba_fnc_addPerFrameHandler; -}; - -PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); -_fireMode = _shooter getVariable ["ACE_FIRE_SELECTION", ACE_DEFAULT_FIRE_SELECTION]; - -switch (_fireMode select 0) do { - // Default to FIREMODE_DIRECT_LOAL - // FIREMODE_DIRECT_LOAL - default { - LOG("Initiating Hellfire II FIREMODE_LOAL_DIR"); - _this call FUNC(guidance_Hellfire_LOAL_HI); - }; +//#define DEBUG_MODE_FULL +#include "script_component.hpp" + +FUNC(guidance_Hellfire_LOAL_HI_PFH) = { + //TRACE_1("enter", _this); + _args = _this select 0; + //PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); + _shooter = _args select 0; + _missile = _args select 6; + _curVelocity = velocity _missile; + + if(!alive _missile || isNull _missile || isNull _shooter) exitWith { + [(_this select 1)] call cba_fnc_removePerFrameHandler; + }; + + _launchPos = _shooter getVariable [QGVAR(launchPos), nil]; + if(isNil "_launchPos") then { + TRACE_1("Setting launch parameters", ""); + _launchPos = getPosASL _shooter; + _shooter setVariable [QGVAR(launchPos), _launchPos, false]; + _shooter setVariable [QGVAR(launchTime), diag_tickTime, false]; + }; + + _targets = [_missile, ACE_DEFAULT_LASER_CODE, 70, _curVelocity] call ace_laser_fnc_findLaserDesignator; + _addHeight = [0,0,0]; + if((_targets select 0)) then { + _target = _targets select 1; + TRACE_2("Targets", _target, _targets); + + _yVec = vectorDir _missile; + _zVec = vectorUp _missile; + _xVec = vectorNormalized (_yVec vectorCrossProduct _zVec); + + _missilePos = getPosASL _missile; + // player sideChat "G!"; + _targetPos = getPosASL _target; + TRACE_4("Phase Check", _launchPos, _missilePos, _targetPos, (_missilePos distance _targetPos)); + if((count _targetPos) > 0) then { + _distanceToTarget = _missilePos vectorDistance _targetPos; + + _defPitch = 0.05; + + if((_launchPos distance _missilePos) < 400 && (_targetPos distance _missilePos) > 400) then { + _addHeight = [0,0,(_targetPos select 2) + ((_launchPos distance _targetPos)*2)]; + TRACE_1("Climb phase", _addHeight); + //_defPitch = 0.1; + } else { + // Covered half the distance, go terminal + if((_missilePos distance _targetPos) < (_launchPos distance _targetPos) / 2) then { + TRACE_1("TERMINAL", ""); + } else { + if((_missilePos select 2) > (_targetPos select 2)) then { + _heightDiff = (_missilePos select 2) - (_targetPos select 2); + TRACE_1("Coasting", _heightDiff); + _addHeight = [0,0, _heightDiff]; + }; + }; + }; + _targetPos = _targetPos vectorAdd _addHeight; + + _defYaw = 0.0035; + + + _targetVectorSeeker = [_missile, [_xVec, _yVec, _zVec], _targetPos] call FUNC(translateToWeaponSpace); + _yaw = 0.0; + if((_targetVectorSeeker select 0) < 0) then { + _yaw = -_defYaw; + } else { + if((_targetVectorSeeker select 0) > 0) then { + _yaw = _defYaw; + }; + }; + + _pitch = 0.0; + if((_targetVectorSeeker select 2) < 0) then { + _pitch = -_defPitch; + } else { + if((_targetVectorSeeker select 2) > 0) then { + _pitch = _defPitch; + }; + }; + #ifdef DEBUG_MODE_FULL + drawLine3D [(ASLtoATL _targetPos) vectorAdd _addHeight, ASLtoATL _targetPos, [0,1,0,1]]; + + _light = "#lightpoint" createVehicleLocal (getPos _missile); + _light setLightBrightness 1.0; + _light setLightAmbient [1.0, 0.0, 0.0]; + _light setLightColor [1.0, 0.0, 0.0]; + + drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,1,1,1], ASLtoATL _missilePos, 0.75, 0.75, 0, str _vectorTo, 1, 0.025, "TahomaB"]; + drawLine3D [ASLtoATL _missilePos, ASLtoATL _targetPos, [1,0,0,1]]; + + _distance = ([getPos startPos, _missilePos] call BIS_fnc_distance2D); + _marker = createMarkerLocal [format["m%1", MARKERCOUNT], [_distance, _missilePos select 2]]; + _marker setMarkerTypeLocal "mil_dot"; + _marker setMarkerColorLocal "ColorRed"; + + MARKERCOUNT = MARKERCOUNT + 1; + #endif + + if(accTime > 0) then { + _outVector = [_missile, [_xVec, _yVec, _zVec], [_yaw, 1/accTime, _pitch]] call FUNC(translateToModelSpace); + + _vectorTo = _missilePos vectorFromTo _outVector; + _missile setVectorDirAndUp [_vectorTo, vectorUp _missile]; + }; + + #ifdef DEBUG_MODE_FULL + hintSilent format["d: %1", _distanceToTarget]; + #endif + }; + }; +}; + +FUNC(guidance_Hellfire_LOAL_DIR_PFH) = { + //TRACE_1("enter", _this); + _args = _this select 0; + //PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); + _shooter = _args select 0; + _missile = _args select 6; + _curVelocity = velocity _missile; + + if(!alive _missile || isNull _missile || isNull _shooter) exitWith { + [(_this select 1)] call cba_fnc_removePerFrameHandler; + }; + + _launchPos = _shooter getVariable [QGVAR(launchPos), nil]; + if(isNil "_launchPos") then { + TRACE_1("Setting launch parameters", ""); + _launchPos = getPosASL _shooter; + _shooter setVariable [QGVAR(launchPos), _launchPos, false]; + _shooter setVariable [QGVAR(launchTime), diag_tickTime, false]; + }; + + _targets = [_missile, ACE_DEFAULT_LASER_CODE, 70, _curVelocity] call ace__laser_fnc_findLaserDesignator; + _addHeight = [0,0,0]; + if((_targets select 0)) then { + _target = _targets select 1; + TRACE_2("Targets", _target, _targets); + + _yVec = vectorDir _missile; + _zVec = vectorUp _missile; + _xVec = vectorNormalized (_yVec vectorCrossProduct _zVec); + + _missilePos = getPosASL _missile; + // player sideChat "G!"; + _targetPos = getPosASL _target; + TRACE_4("Phase Check", _launchPos, _missilePos, _targetPos, (_missilePos distance _targetPos)); + if((count _targetPos) > 0) then { + _distanceToTarget = _missilePos vectorDistance _targetPos; + + if((_launchPos distance _missilePos) < 400 && (_targetPos distance _missilePos) > 400) then { + _addHeight = [0,0,(_targetPos select 2) + (_missilePos distance _targetPos)*0.5]; + TRACE_1("Climb phase", _addHeight); + } else { + // Covered half the distance, go terminal + if((_missilePos distance _targetPos) < (_launchPos distance _targetPos) / 2) then { + TRACE_1("TERMINAL", ""); + } else { + if((_missilePos select 2) > (_targetPos select 2)) then { + _heightDiff = (_missilePos select 2) - (_targetPos select 2); + TRACE_1("Coasting", _heightDiff); + _addHeight = [0,0, _heightDiff]; + }; + }; + }; + _targetPos = _targetPos vectorAdd _addHeight; + + _defYaw = 0.0035; + _defPitch = 0.0075; + + _targetVectorSeeker = [_missile, [_xVec, _yVec, _zVec], _targetPos] call FUNC(translateToWeaponSpace); + _yaw = 0.0; + if((_targetVectorSeeker select 0) < 0) then { + _yaw = -_defYaw; + } else { + if((_targetVectorSeeker select 0) > 0) then { + _yaw = _defYaw; + }; + }; + + _pitch = 0.0; + if((_targetVectorSeeker select 2) < 0) then { + _pitch = -_defPitch; + } else { + if((_targetVectorSeeker select 2) > 0) then { + _pitch = _defPitch; + }; + }; + #ifdef DEBUG_MODE_FULL + drawLine3D [(ASLtoATL _targetPos) vectorAdd _addHeight, ASLtoATL _targetPos, [0,1,0,1]]; + + _light = "#lightpoint" createVehicleLocal (getPos _missile); + _light setLightBrightness 1.0; + _light setLightAmbient [1.0, 0.0, 0.0]; + _light setLightColor [1.0, 0.0, 0.0]; + + drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,1,1,1], ASLtoATL _missilePos, 0.75, 0.75, 0, str _vectorTo, 1, 0.025, "TahomaB"]; + drawLine3D [ASLtoATL _missilePos, ASLtoATL _targetPos, [1,0,0,1]]; + + _distance = ([getPos startPos, _missilePos] call BIS_fnc_distance2D); + _marker = createMarkerLocal [format["m%1", MARKERCOUNT], [_distance, _missilePos select 2]]; + _marker setMarkerTypeLocal "mil_dot"; + _marker setMarkerColorLocal "ColorRed"; + + MARKERCOUNT = MARKERCOUNT + 1; + #endif + + if(accTime > 0) then { + _outVector = [_missile, [_xVec, _yVec, _zVec], [_yaw, 1/accTime, _pitch]] call FUNC(translateToModelSpace); + + _vectorTo = _missilePos vectorFromTo _outVector; + _missile setVectorDirAndUp [_vectorTo, vectorUp _missile]; + }; + + #ifdef DEBUG_MODE_FULL + hintSilent format["d: %1", _distanceToTarget]; + #endif + }; + }; +}; + + +FUNC(guidance_Hellfire_LOAL_HI) = { + PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); + + GVAR(lastTime) = time; + [FUNC(guidance_Hellfire_LOAL_HI_PFH), 0, _this] call cba_fnc_addPerFrameHandler; +}; + + +FUNC(guidance_Hellfire_LOAL_DIR) = { + PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); + + GVAR(lastTime) = time; + [FUNC(guidance_Hellfire_LOAL_DIR_PFH), 0, _this] call cba_fnc_addPerFrameHandler; +}; + +PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); +_fireMode = _shooter getVariable ["ACE_FIRE_SELECTION", ACE_DEFAULT_FIRE_SELECTION]; + +switch (_fireMode select 0) do { + // Default to FIREMODE_DIRECT_LOAL + // FIREMODE_DIRECT_LOAL + default { + LOG("Initiating Hellfire II FIREMODE_LOAL_DIR"); + _this call FUNC(guidance_Hellfire_LOAL_HI); + }; }; \ No newline at end of file diff --git a/addons/missileguidance/functions/fnc_guidance_LGB.sqf b/addons/missileguidance/functions/fnc_guidance_LGB.sqf index 02fa5e7a66..47efa46768 100644 --- a/addons/missileguidance/functions/fnc_guidance_LGB.sqf +++ b/addons/missileguidance/functions/fnc_guidance_LGB.sqf @@ -1,109 +1,109 @@ -#define DEBUG_MODE_FULL -#include "script_component.hpp" - -FUNC(guidance_LGB_LOAL_PFH) = { - //TRACE_1("enter", _this); - _args = _this select 0; - //PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); - _lgb = _args select 6; - _curVelocity = velocity _lgb; - - if(!alive _lgb) exitWith { - [(_this select 1)] call cba_fnc_removePerFrameHandler; - }; - - _targets = [_lgb, ACE_DEFAULT_LASER_CODE, 70, _curVelocity] call uo_laser_fnc_findLaserDesignator; - //TRACE_2("Targets", _target, _targets); - - if((_targets select 0)) then { - _target = _targets select 1; - - // player sideChat "FUCK!"; - // drop ["\a3\data_f\Cl_basic","","Billboard",1,20,(getPos _lgb),[0,0,0],1,1.275,1.0,0.0,[5],[[1,0,0,1]],[0],0.0,2.0,"","",""]; - - - _yVec = vectorDir _lgb; - _zVec = vectorUp _lgb; - _xVec = vectorNormalized (_yVec vectorCrossProduct _zVec); - - _lgbPos = getPosASL _lgb; - // player sideChat "G!"; - _targetPos = getPosASL _target; - if((count _targetPos) > 0) then { - // player sideChat format["f: %1", _targetPos]; - _addHeight = [0,0,(_lgbPos distance _targetPos)*0.06]; - // drawLine3D [(ASLtoATL _targetPos) vectorAdd _addHeight, ASLtoATL _targetPos, [0,1,0,1]]; - _targetPos = _targetPos vectorAdd _addHeight; - - - - _def = 0.0025; - - _targetVectorSeeker = [_lgb, [_xVec, _yVec, _zVec], _targetPos] call FUNC(translateToWeaponSpace); - // _targetVectorSeeker = _lgb worldToModel (ASLtoATL _targetPos); - // _targetVectorSeeker = [0,0,0] vectorFromTo _targetVectorSeeker; - _yaw = 0.0; - if((_targetVectorSeeker select 0) < 0) then { - _yaw = -_def; - } else { - if((_targetVectorSeeker select 0) > 0) then { - _yaw = _def; - }; - }; - - _pitch = 0.0; - if((_targetVectorSeeker select 2) < 0) then { - _pitch = -_def; - } else { - if((_targetVectorSeeker select 2) > 0) then { - _pitch = _def; - }; - }; - #ifdef DEBUG_MODE_FULL - drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,1,1,1], ASLtoATL _lgbPos, 0.75, 0.75, 0, str _vectorTo, 1, 0.025, "TahomaB"]; - drawLine3D [ASLtoATL _lgbPos, ASLtoATL _targetPos, [1,0,0,1]]; - - _distance = ([getPos startPos, _lgbPos] call BIS_fnc_distance2D); - _marker = createMarkerLocal [format["m%1", MARKERCOUNT], [_distance, _lgbPos select 2]]; - _marker setMarkerTypeLocal "mil_dot"; - _marker setMarkerColorLocal "ColorRed"; - - MARKERCOUNT = MARKERCOUNT + 1; - #endif - - if(accTime > 0) then { - _outVector = [_lgb, [_xVec, _yVec, _zVec], [_yaw, 1/accTime, _pitch]] call FUNC(translateToModelSpace); - // _outVector = _lgb modelToWorldVisual [_yaw, 1, _pitch]; - // _outVector = ATLtoASL _outVector; - _vectorTo = _lgbPos vectorFromTo _outVector; - - // hintSilent format["v: %1", _vectorTo]; - - // _lgb setVectorDir _vectorTo; - _lgb setVectorDirAndUp [_vectorTo, vectorUp _lgb]; - }; - - #ifdef DEBUG_MODE_FULL - hintSilent format["d: %1", _lgbPos vectorDistance _targetPos]; - #endif - }; - }; -}; - -FUNC(guidance_LGB_LOAL) = { - PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); - - [FUNC(guidance_LGB_LOAL_PFH), 0, _this] call cba_fnc_addPerFrameHandler; -}; - -PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); -_fireMode = _shooter getVariable ["ACE_FIRE_SELECTION", ACE_DEFAULT_FIRE_SELECTION]; - -switch (_fireMode select 0) do { - // Default to FIREMODE_DIRECT_LOAL - // FIREMODE_DIRECT_LOAL - default { - LOG("Initiating FIREMODE_DIRECT_LOAL"); - _this call FUNC(guidance_LGB_LOAL); - }; +#define DEBUG_MODE_FULL +#include "script_component.hpp" + +FUNC(guidance_LGB_LOAL_PFH) = { + //TRACE_1("enter", _this); + _args = _this select 0; + //PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); + _lgb = _args select 6; + _curVelocity = velocity _lgb; + + if(!alive _lgb) exitWith { + [(_this select 1)] call cba_fnc_removePerFrameHandler; + }; + + _targets = [_lgb, ACE_DEFAULT_LASER_CODE, 70, _curVelocity] call uo_laser_fnc_findLaserDesignator; + //TRACE_2("Targets", _target, _targets); + + if((_targets select 0)) then { + _target = _targets select 1; + + // player sideChat "FUCK!"; + // drop ["\a3\data_f\Cl_basic","","Billboard",1,20,(getPos _lgb),[0,0,0],1,1.275,1.0,0.0,[5],[[1,0,0,1]],[0],0.0,2.0,"","",""]; + + + _yVec = vectorDir _lgb; + _zVec = vectorUp _lgb; + _xVec = vectorNormalized (_yVec vectorCrossProduct _zVec); + + _lgbPos = getPosASL _lgb; + // player sideChat "G!"; + _targetPos = getPosASL _target; + if((count _targetPos) > 0) then { + // player sideChat format["f: %1", _targetPos]; + _addHeight = [0,0,(_lgbPos distance _targetPos)*0.06]; + // drawLine3D [(ASLtoATL _targetPos) vectorAdd _addHeight, ASLtoATL _targetPos, [0,1,0,1]]; + _targetPos = _targetPos vectorAdd _addHeight; + + + + _def = 0.0025; + + _targetVectorSeeker = [_lgb, [_xVec, _yVec, _zVec], _targetPos] call FUNC(translateToWeaponSpace); + // _targetVectorSeeker = _lgb worldToModel (ASLtoATL _targetPos); + // _targetVectorSeeker = [0,0,0] vectorFromTo _targetVectorSeeker; + _yaw = 0.0; + if((_targetVectorSeeker select 0) < 0) then { + _yaw = -_def; + } else { + if((_targetVectorSeeker select 0) > 0) then { + _yaw = _def; + }; + }; + + _pitch = 0.0; + if((_targetVectorSeeker select 2) < 0) then { + _pitch = -_def; + } else { + if((_targetVectorSeeker select 2) > 0) then { + _pitch = _def; + }; + }; + #ifdef DEBUG_MODE_FULL + drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,1,1,1], ASLtoATL _lgbPos, 0.75, 0.75, 0, str _vectorTo, 1, 0.025, "TahomaB"]; + drawLine3D [ASLtoATL _lgbPos, ASLtoATL _targetPos, [1,0,0,1]]; + + _distance = ([getPos startPos, _lgbPos] call BIS_fnc_distance2D); + _marker = createMarkerLocal [format["m%1", MARKERCOUNT], [_distance, _lgbPos select 2]]; + _marker setMarkerTypeLocal "mil_dot"; + _marker setMarkerColorLocal "ColorRed"; + + MARKERCOUNT = MARKERCOUNT + 1; + #endif + + if(accTime > 0) then { + _outVector = [_lgb, [_xVec, _yVec, _zVec], [_yaw, 1/accTime, _pitch]] call FUNC(translateToModelSpace); + // _outVector = _lgb modelToWorldVisual [_yaw, 1, _pitch]; + // _outVector = ATLtoASL _outVector; + _vectorTo = _lgbPos vectorFromTo _outVector; + + // hintSilent format["v: %1", _vectorTo]; + + // _lgb setVectorDir _vectorTo; + _lgb setVectorDirAndUp [_vectorTo, vectorUp _lgb]; + }; + + #ifdef DEBUG_MODE_FULL + hintSilent format["d: %1", _lgbPos vectorDistance _targetPos]; + #endif + }; + }; +}; + +FUNC(guidance_LGB_LOAL) = { + PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); + + [FUNC(guidance_LGB_LOAL_PFH), 0, _this] call cba_fnc_addPerFrameHandler; +}; + +PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); +_fireMode = _shooter getVariable ["ACE_FIRE_SELECTION", ACE_DEFAULT_FIRE_SELECTION]; + +switch (_fireMode select 0) do { + // Default to FIREMODE_DIRECT_LOAL + // FIREMODE_DIRECT_LOAL + default { + LOG("Initiating FIREMODE_DIRECT_LOAL"); + _this call FUNC(guidance_LGB_LOAL); + }; }; \ No newline at end of file diff --git a/addons/missileguidance/functions/fnc_rotateVectLine.sqf b/addons/missileguidance/functions/fnc_rotateVectLine.sqf index ae476559b8..b0360cc330 100644 --- a/addons/missileguidance/functions/fnc_rotateVectLine.sqf +++ b/addons/missileguidance/functions/fnc_rotateVectLine.sqf @@ -1,38 +1,38 @@ -#include "script_component.hpp" - -_map = _this select 0; -_theta = _this select 1; - -_p = _map select 0; -_p1 = _map select 1; -_p2 = _map select 2; - -_q1 = +(_map select 3); -_q2 = +(_map select 4); -_u = _map select 5; -_d = _map select 6; - -/* Step 4 */ -_q2 set[0, (_q1 select 0) * cos(_theta) - (_q1 select 1) * sin(_theta)]; -_q2 set[1, (_q1 select 0) * sin(_theta) + (_q1 select 1) * cos(_theta)]; -_q2 set[2, (_q1 select 2)]; - -/* Inverse of step 3 */ -_q1 set[0, (_q2 select 0) * _d + (_q2 select 2) * (_u select 0)]; -_q1 set[1, (_q2 select 1)]; -_q1 set[2, - (_q2 select 0) * (_u select 0) + (_q2 select 2) * _d]; - -/* Inverse of step 2 */ -if (_d != 0) then { - _q2 set[0, (_q1 select 0)]; - _q2 set[1, (_q1 select 1) * (_u select 2) / _d + (_q1 select 2) * (_u select 1) / _d]; - _q2 set[2, - (_q1 select 1) * (_u select 1) / _d + (_q1 select 2) * (_u select 2) / _d]; -} else { - _q2 = _q1; -}; - -/* Inverse of step 1 */ -_q1 set[0, (_q2 select 0) + (_p1 select 0)]; -_q1 set[1, (_q2 select 1) + (_p1 select 1)]; -_q1 set[2, (_q2 select 2) + (_p1 select 2)]; +#include "script_component.hpp" + +_map = _this select 0; +_theta = _this select 1; + +_p = _map select 0; +_p1 = _map select 1; +_p2 = _map select 2; + +_q1 = +(_map select 3); +_q2 = +(_map select 4); +_u = _map select 5; +_d = _map select 6; + +/* Step 4 */ +_q2 set[0, (_q1 select 0) * cos(_theta) - (_q1 select 1) * sin(_theta)]; +_q2 set[1, (_q1 select 0) * sin(_theta) + (_q1 select 1) * cos(_theta)]; +_q2 set[2, (_q1 select 2)]; + +/* Inverse of step 3 */ +_q1 set[0, (_q2 select 0) * _d + (_q2 select 2) * (_u select 0)]; +_q1 set[1, (_q2 select 1)]; +_q1 set[2, - (_q2 select 0) * (_u select 0) + (_q2 select 2) * _d]; + +/* Inverse of step 2 */ +if (_d != 0) then { + _q2 set[0, (_q1 select 0)]; + _q2 set[1, (_q1 select 1) * (_u select 2) / _d + (_q1 select 2) * (_u select 1) / _d]; + _q2 set[2, - (_q1 select 1) * (_u select 1) / _d + (_q1 select 2) * (_u select 2) / _d]; +} else { + _q2 = _q1; +}; + +/* Inverse of step 1 */ +_q1 set[0, (_q2 select 0) + (_p1 select 0)]; +_q1 set[1, (_q2 select 1) + (_p1 select 1)]; +_q1 set[2, (_q2 select 2) + (_p1 select 2)]; _q1; \ No newline at end of file diff --git a/addons/missileguidance/functions/fnc_rotateVectLineGetMap.sqf b/addons/missileguidance/functions/fnc_rotateVectLineGetMap.sqf index 258cc93ae2..fdbd6533ef 100644 --- a/addons/missileguidance/functions/fnc_rotateVectLineGetMap.sqf +++ b/addons/missileguidance/functions/fnc_rotateVectLineGetMap.sqf @@ -1,37 +1,37 @@ -#include "script_component.hpp" - -private ["_p", "_theta", "_p1", "_p2", "_q1", "_q2", "_u", "_d"]; -_p = _this select 0; -_p1 = _this select 1; -_p2 = _this select 2; - -_q1 = []; -_q2 = []; -_u = []; - -/* Step 1 */ -_q1 set[0, (_p select 0) - (_p1 select 0)]; -_q1 set[1, (_p select 1) - (_p1 select 1)]; -_q1 set[2, (_p select 2) - (_p1 select 2)]; - -_u set[0, (_p2 select 0) - (_p1 select 0)]; -_u set[1, (_p2 select 1) - (_p1 select 1)]; -_u set[2, (_p2 select 2) - (_p1 select 2)]; -_u = _u call BIS_fnc_unitVector; -_d = sqrt((_u select 1)*(_u select 1) + (_u select 2)*(_u select 2)); - -/* Step 2 */ -if (_d != 0) then { - _q2 set[0, (_q1 select 0)]; - _q2 set[1, (_q1 select 1) * (_u select 2) / _d - (_q1 select 2) * (_u select 1) / _d]; - _q2 set[2, (_q1 select 1) * (_u select 1) / _d + (_q1 select 2) * (_u select 2) / _d]; -} else { - _q2 = _q1; -}; - -/* Step 3 */ -_q1 set[0, (_q2 select 0) * _d - (_q2 select 2) * (_u select 0)]; -_q1 set[1, (_q2 select 1)]; -_q1 set[2, (_q2 select 0) * (_u select 0) + (_q2 select 2) * _d]; - +#include "script_component.hpp" + +private ["_p", "_theta", "_p1", "_p2", "_q1", "_q2", "_u", "_d"]; +_p = _this select 0; +_p1 = _this select 1; +_p2 = _this select 2; + +_q1 = []; +_q2 = []; +_u = []; + +/* Step 1 */ +_q1 set[0, (_p select 0) - (_p1 select 0)]; +_q1 set[1, (_p select 1) - (_p1 select 1)]; +_q1 set[2, (_p select 2) - (_p1 select 2)]; + +_u set[0, (_p2 select 0) - (_p1 select 0)]; +_u set[1, (_p2 select 1) - (_p1 select 1)]; +_u set[2, (_p2 select 2) - (_p1 select 2)]; +_u = _u call BIS_fnc_unitVector; +_d = sqrt((_u select 1)*(_u select 1) + (_u select 2)*(_u select 2)); + +/* Step 2 */ +if (_d != 0) then { + _q2 set[0, (_q1 select 0)]; + _q2 set[1, (_q1 select 1) * (_u select 2) / _d - (_q1 select 2) * (_u select 1) / _d]; + _q2 set[2, (_q1 select 1) * (_u select 1) / _d + (_q1 select 2) * (_u select 2) / _d]; +} else { + _q2 = _q1; +}; + +/* Step 3 */ +_q1 set[0, (_q2 select 0) * _d - (_q2 select 2) * (_u select 0)]; +_q1 set[1, (_q2 select 1)]; +_q1 set[2, (_q2 select 0) * (_u select 0) + (_q2 select 2) * _d]; + [_p, _p1, _p2, _q1, _q2, _u, _d] \ No newline at end of file diff --git a/addons/missileguidance/functions/fnc_translateToModelSpace.sqf b/addons/missileguidance/functions/fnc_translateToModelSpace.sqf index e54744bdb8..1e2e930ac7 100644 --- a/addons/missileguidance/functions/fnc_translateToModelSpace.sqf +++ b/addons/missileguidance/functions/fnc_translateToModelSpace.sqf @@ -1,16 +1,16 @@ -_object = _this select 0; -_origin = getPosASL _object; -_matrix = _this select 1; -_xVec = _matrix select 0; -_yVec = _matrix select 1; -_zVec = _matrix select 2; - -_offset = _this select 2; - -_x = _offset select 0; -_y = _offset select 1; -_z = _offset select 2; - -_out = (((_xVec vectorMultiply _x) vectorAdd (_yVec vectorMultiply _y)) vectorAdd (_zVec vectorMultiply _z)) vectorAdd _origin; - +_object = _this select 0; +_origin = getPosASL _object; +_matrix = _this select 1; +_xVec = _matrix select 0; +_yVec = _matrix select 1; +_zVec = _matrix select 2; + +_offset = _this select 2; + +_x = _offset select 0; +_y = _offset select 1; +_z = _offset select 2; + +_out = (((_xVec vectorMultiply _x) vectorAdd (_yVec vectorMultiply _y)) vectorAdd (_zVec vectorMultiply _z)) vectorAdd _origin; + _out; \ No newline at end of file diff --git a/addons/missileguidance/functions/fnc_translateToWeaponSpace.sqf b/addons/missileguidance/functions/fnc_translateToWeaponSpace.sqf index 7b146e7d42..2c7dc5e6da 100644 --- a/addons/missileguidance/functions/fnc_translateToWeaponSpace.sqf +++ b/addons/missileguidance/functions/fnc_translateToWeaponSpace.sqf @@ -1,22 +1,22 @@ -_object = _this select 0; -_origin = getPosASL _object; -_matrix = _this select 1; -_xVec = _matrix select 0; -_yVec = _matrix select 1; -_zVec = _matrix select 2; - -_offset = _this select 2; - -_offset = _offset vectorDiff _origin; - -_x = _offset select 0; -_y = _offset select 1; -_z = _offset select 2; - -_out = [ - ((_xVec select 0)*_x) + ((_xVec select 1)*_y) + ((_xVec select 2)*_z), - ((_yVec select 0)*_x) + ((_yVec select 1)*_y) + ((_yVec select 2)*_z), - ((_zVec select 0)*_x) + ((_zVec select 1)*_y) + ((_zVec select 2)*_z) - ]; - +_object = _this select 0; +_origin = getPosASL _object; +_matrix = _this select 1; +_xVec = _matrix select 0; +_yVec = _matrix select 1; +_zVec = _matrix select 2; + +_offset = _this select 2; + +_offset = _offset vectorDiff _origin; + +_x = _offset select 0; +_y = _offset select 1; +_z = _offset select 2; + +_out = [ + ((_xVec select 0)*_x) + ((_xVec select 1)*_y) + ((_xVec select 2)*_z), + ((_yVec select 0)*_x) + ((_yVec select 1)*_y) + ((_yVec select 2)*_z), + ((_zVec select 0)*_x) + ((_zVec select 1)*_y) + ((_zVec select 2)*_z) + ]; + _out; \ No newline at end of file diff --git a/addons/missileguidance/script_component.hpp b/addons/missileguidance/script_component.hpp index 14275333b3..377469cdee 100644 --- a/addons/missileguidance/script_component.hpp +++ b/addons/missileguidance/script_component.hpp @@ -1,14 +1,14 @@ -#define COMPONENT missileguidance -#include "\z\ace\Addons\main\script_mod.hpp" - -#ifdef DEBUG_ENABLED_MISSILEGUIDANCE - #define DEBUG_MODE_FULL -#endif - -#ifdef DEBUG_SETTINGS_MISSILEGUIDANCE - #define DEBUG_SETTINGS DEBUG_SETTINGS_MISSILEGUIDANCE -#endif - -#include "\z\ace\Addons\main\script_macros.hpp" - +#define COMPONENT missileguidance +#include "\z\ace\Addons\main\script_mod.hpp" + +#ifdef DEBUG_ENABLED_MISSILEGUIDANCE + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_MISSILEGUIDANCE + #define DEBUG_SETTINGS DEBUG_SETTINGS_MISSILEGUIDANCE +#endif + +#include "\z\ace\Addons\main\script_macros.hpp" + #define FIREMODE_DIRECT_LOAL 1 \ No newline at end of file diff --git a/addons/nametags/stringtable.xml b/addons/nametags/stringtable.xml index 7ee626a2fe..622df44aca 100644 --- a/addons/nametags/stringtable.xml +++ b/addons/nametags/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -68,17 +68,14 @@ Show name tags for AI units - Показывать именые метки ИИ Show SoundWaves (requires player names) Zeigen Schallwelle (benötigt spielernamen) Mostrar onda sonora (requiere Mostrar nombres de jugadores) - Показывать звуковые волны (требует имен игроков) Default Nametag Color (Non Group Members) - Цвет меткок игроков (не членов групп) \ No newline at end of file diff --git a/addons/optionsmenu/stringtable.xml b/addons/optionsmenu/stringtable.xml index 020a848f79..76407da435 100644 --- a/addons/optionsmenu/stringtable.xml +++ b/addons/optionsmenu/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -16,17 +16,15 @@ Fix Animation - Фикс анимации Reset All Rücksetzen - Полный сброс Colors Farben - Цвета + цвета Colors @@ -43,7 +41,6 @@ Values - Значения Yes @@ -73,48 +70,38 @@ Setting: Nastavení: Einstellung: - Установки: + Yстановки: Ajuste: Export - Экспорт Open Export Menu - Открыть меню экспорта String input. - Строчный ввод. Array. Seperate elements by using ,. - Массив. Разделяйте элемены, используя запятую. Number - Число Uknown input type - Неизвестный тип ввода Save input - Сохранить ввод Include Client Settings - Включить настройки клиента Exclude Client Settings - Исключить настройки клиента Settings exported to clipboard - Настройки экспортированы в буфер обмена \ No newline at end of file diff --git a/addons/overheating/stringtable.xml b/addons/overheating/stringtable.xml index d394406181..5d2c9595df 100644 --- a/addons/overheating/stringtable.xml +++ b/addons/overheating/stringtable.xml @@ -1,14 +1,12 @@  - + Display text on jam - Показывать текст, когда клинит оружие Display a notification whenever your weapon gets jammed - Демонстрирует уведомление, каждый раз, когда клинит Ваше оружие. Spare barrel diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index 29fb5a736b..9ccd7752d2 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -1,1302 +1,1310 @@  - + - - - XM312 - XM312 - XM312 - XM312 - XM312 - XM312 - XM312 - XM312 - XM312 - XM312A - - - XM312A - XM312A - XM312 - XM312A - XM312A - XM312A - XM312A - XM312A - XM312A - XM312A - - - XM312 (High) - XM312 (Hoch) - XM312 (Alto) - XM312 (Haut) - XM312 (Vysoký) - XM312 (Wysoki) - XM312 (Высокий) - XM312 (Alta) - XM312 (Magasított) - XM312 (Alta) - - - XM307 - XM307 - XM307 - XM307 - XM307 - XM307 - XM307 - XM307 - XM307 - XM307 - - - XM307A - XM307A - XM307A - XM307A - XM307A - XM307A - XM307A - XM307A - XM307A - XM307A - - - XM307 (High) - XM307 (Hoch) - XM307 (Alto) - XM307 (Haut) - XM307 (Vysoký) - XM307 (Wysoki) - XM307 (Высокий) - XM307 (Alta) - XM307 (Magasított) - XM307 (Alta) - - - Mini-Spike Launcher (AT) - Mini-Spike Lenkflugkörper (AT) - Lanzador Mini-Spike (AT) - Poste de tir Mini-Spike (AC) - Mini-Spike Odpalovač (AT) - Wyrzutnia Mini-Spike (AT) - Mini-Spike Пусковое устройство (ПТРК) - Lança-mísseis Mini-Spike (AC) - Mini-Spike rakétarendszer (páncéltörő) - Lanciatore Mini-Spike (AC) - - - Mini-Spike Launcher (AA) - Mini-Spike Lenkflugkörper (AA) - Lanzador Mini-Spike (AA) - Poste de tir Mini-Spike (AA) - Mini-Spike Odpalovač (AA) - Wyrzutnia Mini-Spike (AA) - Mini-Spike Пусковое устройство (ВВ) - Lança-mísseis Mini-Spike (AA) - Mini-Spike rakétarendszer (légvédelmi) - Lanciatore Mini-Spike (AA) - - - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - - - YABHON-R3 (CAS) - YABHON-R3 (Luftnahunterstützung) - YABHON-R3 (CAS) - YABHON-R3 (CAS) - YABHON-R3 (CAS) - YABHON-R3 (штурмовик) - - - M-ATV - M-ATV - M-ATV - M-ATV - M-ATV - M-ATV - M-ATV - M-ATV - M-ATV - M-ATV - - - M-ATV (HMG) - M-ATV (SMG) - M-ATV (HMG) - M-ATV (CKM) - M-ATV (TK) - M-ATV (HMG) - M-ATV (Пулемет) - M-ATV (HMG) - M-ATV (HMG) - M-ATV (HMG) - - - M-ATV (GMG) - M-ATV (GMW) - M-ATV (GMG) - M-ATV (GMG) - M-ATV (Granátomet) - M-ATV (GMG) - M-ATV (Гранатомет) - M-ATV (GMG) - M-ATV (GMG) - M-ATV (GMG) - - - Merkava Mk IV M - Merkava Mk IV M - Merkava Mk IV M - Merkawa Mk IV M - Merkava Mk IV M - Merkava Mk IV M - Меркава Mk IV M - Merkava Mk IV M - Merkava Mk IV M - Merkava Mk IV M - - - Merkava Mk IV LIC - Merkava Mk IV LIC - Merkava Mk IV LIC - Merkawa Mk IV LIC - Merkava Mk IV LIC - Merkava Mk IV LIC - Меркава Mk IV LIC - Merkava Mk IV LIC - Merkava Mk IV LIC - Merkava Mk IV LIC - - - Sholef - Sholef - Sholef - Sholef - Sholef - Sholef - Шолеф - Sholef - Sholef - Sholef - - - Seara - Seara - Seara - Seara - Seara - Seara - Seara - Seara - Seara - Seara - - - Namer - Namer - Namer - Namer - Namer - Namer - Намер - Namer - Namer - Namer - - - Bardelas - Bardelas - Bardelas - Bardelas - Bardelas - Bardelas - Bardelas - Bardelas - Bardelas - Bardelas - - - Patria AMV - Patria AMV - Patria AMV - Patria AMV - Patria AMV - Patria AMV - Patria AMV - Patria AMV - Patria AMV - Patria AMV - - - Nemmera - Nemmera - Nemmera - Nemmera - Nemmera - Nemmera - Nemmera - Nemmera - Nemmera - Nemmera - - - HEMTT Transport - HEMTT Transport - HEMTT de transporte - HEMTT Transportowy - HEMTT Valník - HEMTT Transport - HEMTT Транспортный - HEMTT Transporte - HEMTT szállítójármű - HEMTT da trasporto - - - HEMTT Transport (covered) - HEMTT Transport (bedeckt) - HEMTT de transporte (cubierto) - HEMTT Transportowy (zakryty) - HEMTT Valník (krytý) - HEMTT Transport (bâché) - HEMTT Транспортный (крытый) - HEMTT Transporte (coberto) - HEMTT szállítójármű (ponyvás) - HEMTT da trasporto (coperto) - - - HEMTT - HEMTT - HEMTT - HEMTT - HEMTT - HEMTT Tracteur - HEMTT - HEMTT - HEMTT - HEMTT - - - HEMTT Container - HEMTT Container - HEMTT de contenedor - HEMTT Kontener - HEMTT Skříňový - HEMTT Conteneur - HEMTT Контейнер - HEMTT Contêiner - HEMTT Konténer - HEMTT portacontainer - - - HEMTT Medical - HEMTT Sanitäter - HEMTT médico - HEMTT Medyczny - HEMTT Zdravotnický - HEMTT Sanitaire - HEMTT Медицинский - HEMTT Médico - HEMTT (egészségügyi) - HEMTT Medico - - - HEMTT Ammo - HEMTT Munition - HEMTT de munición - HEMTT Amunicyjny - HEMTT Muniční - HEMTT Munitions - HEMTT Боеприпасы - HEMTT Munições - HEMTT (lőszerszállító) - HEMTT di rifornimento munizioni - - - HEMTT Fuel - HEMTT Treibstoff - HEMTT de combustible - HEMTT Cysterna - HEMTT Cisterna - HEMTT Citerne - HEMTT Заправщик - HEMTT Combustível - HEMTT (üzemanyag-szállító) - HEMTT di rifornimento carburante - - - HEMTT Repair - HEMTT Instandsetzung - HEMTT de reparación - HEMTT Naprawczy - HEMTT Opravárenský - HEMTT Réparation - HEMTT Ремонтный - HEMTT Reparador - HEMTT (szerelő-jármű) - HEMTT Riparatore - - - Fennek - Fennek - Fennek - Fennek - Fennek - Fennek - Феннек - Fennek - Fennek - Fennek - - - Fennek (HMG) - Fennek (SMG) - Fennek (HMG) - Fennek (CKM) - Fennek (TK) - Fennek (HMG) - Феннек (Пулемет) - Fennek (HMG) - Fennek (HMG) - Fennek (HMG) - - - Fennek (GMG) - Fennek (GMW) - Fennek (GMG) - Fennek (GMG) - Fennek (granátomet) - Fennek (GMG) - Феннек (Гранатомет) - Fennek (GMG) - Fennek (GMG) - Fennek (GMG) - - - Leopard 2SG - Leopard 2SG - Leopard 2SG - Leopard 2SG - Leopard 2SG - Leopard 2SG - Леопард 2SG - Leopard 2SG - Leopard 2SG - Leopard 2SG - - - FV510 Warrior - FV510 Warrior - FV510 Warrior - FV510 Warrior - FV510 Warrior - FV510 Warrior - FV510 Уорриор - FV510 Warrior - FV510 Warrior - FV510 Warrior - - - Pandur II - Pandur II - Pandur II - Pandur II - Pandur II - Pandur II - Pandur II - Pandur II - Pandur II - Pandur II - - - KamAZ Transport - KamAZ Transport - KamAZ de transporte - KamAZ transportowy - KAMAZ Valník - KamAZ Transport - КамАЗ Траспортный - KamAZ Transporte - KamAZ szállítójármű - KamAZ da trasporto - - - KamAZ Transport (covered) - KamAZ Transport (bedeckt) - KamAZ de transporte (cubierto) - KamAZ Transportowy (zakryty) - KAMAZ Valník (krytý) - KamAZ Transport (bâché) - КамАЗ Траспортный (Крытый) - KamAZ Transporte (coberto) - KamAZ szállítójármű (ponyvás) - KamAZ da trasporto (coperto) - - - KamAZ Ammo - KamAZ Munition - KamAZ de munición - KamAZ Amunicyjny - KAMAZ Muniční - KamAZ Munitions - КамАЗ Боеприпасы - KamAZ Munições - KamAZ (lőszerszállító) - KamAZ di rifornimento munizioni - - - KamAZ Fuel - KamAZ Treibstoff - KamAZ de combustible - KamAZ cysterna - KAMAZ Cisterna - KamAZ Citerne - КамАЗ Заправщик - KamAZ Combustível - KamAZ (üzemanyag-szállító) - KamAZ di rifornimento carburante - - - KamAZ Repair - KamAZ Instandsetzung - KamAZ de reparación - KamAZ Naprawczy - KAMAZ Opravárenský - KamAZ Réparation - КамАЗ Ремонтный - KamAZ Reparador - KamAZ (szerelő-jármű) - KamAZ riparatore - - - KamAZ Medical - KamAZ Sanitäter - KamAZ médico - KamAZ Medyczny - KAMAZ Zdravotnický - KamAZ Sanitaire - КамАЗ Медицинский - KamAZ Médico - KamAZ (egészségügyi) - KamAZ Medico - - - Punisher - Punisher - Punisher - Punisher - Punisher - Punisher - Kаратель - Punisher - Punisher - Punisher - - - Punisher (HMG) - Punisher (SMG) - Punisher (HMG) - Punisher (CKM) - Punisher (TK) - Punisher (HMG) - Kаратель (Пулемет) - Punisher (HMG) - Punisher (HMG) - Punisher (HMG) - - - Punisher (GMG) - Punisher (GMW) - Punisher (GMG) - Punisher (CKM) - Punisher (granátomet) - Punisher (GMG) - Kаратель (Гранатомет) - Punisher (GMG) - Punisher (GMG) - Punisher (GMG) - - - T100 Black Eagle - T100 Black Eagle - T100 Black Eagle - T100 Black Eagle - T100 Black Eagle - T100 Black Eagle - T100 Черный Орел - T100 Black Eagle - T100 Black Eagle - T100 Black Eagle - - - 2S9 Sochor - 2S9 Sochor - 2S9 Sochor - 259 Sochor - 2S9 Sochor - 2S9 Sochor - 2S9 Сокор - 2S9 Sochor - 2S9 Sochor - 2S9 Sochor - - - BM-2T Stalker - BM-2T Stalker - BM-2T Stalker - BM-2T Stalker - BM-2T Stalker - BM-2T Stalker - БМ-2Т Сталкер - BM-2T Stalker - BM-2T Stalker - BM-2T Stalker - - - ZSU-35 Tigris - ZSU-35 Tigris - ZSU-35 Tigris - ZSU-35 Tigris - ZSU-35 Tigris - ZSU-35 Tigris - ЗСУ-35 Tigris - ZSU-35 Tigris - ZSU-35 Tigris - ZSU-35 Tigris - - - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - - - Typhoon Transport - Typhoon Transport - Typhoon de transporte - Typhoon Transportowy - Typhoon Valník - Typhoon Transport - Тайфун Транспортный - Typhoon Transporte - Typhoon szállítójármű - Typhoon da trasporto - - - Typhoon Transport (covered) - Typhoon Transport (bedeckt) - Typhoon de transporte (cubierto) - Typhoon Transportowy (przykryty) - Typhoon Valník (krytý) - Typhoon Transport (bâché) - Тайфун Транспортный (kрытый) - Typhoon Transporte (coberto) - Typhoon szállítójármű (ponyvás) - Typhoon da trasporto (coperto) - - - Typhoon Device - Typhoon Gerät - Typhoon de dispositivo - Typhoon Urządzenie - Typhoon Zařízení - Typhoon Dispositif - Тайфун Устройство - Typhoon Dispositivo - Typhoon (szerkezet) - Typhoon per dispositivo - - - Typhoon Ammo - Typhoon Munition - Typhoon de munición - Typhoon Amunicyjny - Typhoon Muniční - Typhoon Munitions - Тайфун Боеприпасы - Typhoon Munições - Typhoon (lőszerszállító) - Typhoon di rifornimento munizioni - - - Typhoon Fuel - Typhoon Treibstoff - Typhoon de combustible - Typhoon Cysterna - Typhoon Cisterna - Typhoon Citerne - Тайфун Заправщик - Typhoon Combustível - Typhoon (üzemanyag-szállító) - Typhoon di rifornimento carburante - - - Typhoon Repair - Typhoon Instandsetzung - Typhoon de reparación - Typhoon Naprawczy - Typhoon Opravárenský - Typhoon Réparation - Тайфун Ремонтный - Typhoon Reparador - Typhoon (szerelő-jármű) - Typhoon riparatore - - - Typhoon Medical - Typhoon Sanitäter - Typhoon médico - Typhoon Medyczny - Typhoon Zdravotnický - Typhoon Sanitaire - Тайфун Медицинский - Typhoon Médico - Typhoon (egészségügyi) - Typhoon medico - - - RAH-66 Comanche - RAH-66 Comanche - RAH-66 Comanche - RAH-66 Comanche - RAH-66 Comanche - RAH-66 Commanche - RAH-66 Команч - RAH-66 Comanche - RAH-66 Comanche - RAH-66 Comanche - - - MH-6 Little Bird - MH-6 Little Bird - MH-6 Litte Bird - MH-6 Little Bird - MH-6 Little Bird - MH-6 Little Bird - MH-6 Little Bird - MH-6 Little Bird - MH-6 Little Bird - MH-6 Little Bird - - - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - - - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - - - CH-47I Chinook (unarmed) - CH-47I Chinook (unbewaffnet) - CH-47I Chinnok (Desarmado) - CH-47I Chinook (nieuzbrojony) - CH-47I Chinook (невооруженный) - CH-47I Chinook (Neozbrojený) - - - A-10D Thunderbolt II - A-10D Thunderbolt II - A-10D Thunderbolt II - A-10D Thunderbolt II - A-10D Thunderbolt II - A-10D Thunderbolt II - A-10D Тандерболт II - A-10D Thunderbolt II - A-10D Thunderbolt II - A-10D Thunderbolt II - - - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - - - AW159 Wildcat (unarmed) - AW159 Wildcat (unbewaffnet) - AW159 Wildcat (desarmado) - AW159 Wildcat (nieuzbrojony) - AW159 Wildcat (neozbrojený) - AW159 Wildcat (non-armé) - AW159 Wildcat (невооруженный) - AW159 Wildcat (desarmado) - AW159 Wildcat (fegyvertelen) - AW159 Wildcat (disarmato) - - - AW101 Merlin - AW101 Merlin - AW101 Merlin - AW101 Merlin - AW101 Merlin - AW101 Merlin - AW101 Мерлин - AW101 Merlin - AW101 Merlin - AW101 Merlin - - - L-159 ALCA (CAS) - L-159 ALCA (CAS) - L-159 ALCA (CAS) - L-159 ALCA (CAS) - L-159 ALCA (CAS) - L-159 ALCA (CAS) - L-159 Альбатрос (CAS) - L-159 ALCA (CAS) - L-159 ALCA (CAS) - L-159 ALCA (CAS) - - - L-159 ALCA (AA) - L-159 ALCA (AA) - L-159 ALCA (AA) - L-159 ALCA (AA) - L-159 ALCA (AA) - L-159 ALCA (AA) - L-159 Альбатрос (AA) - L-159 ALCA (ВВ) - L-159 ALCA (AA) - L-159 ALCA (AA) - - - Ka-60 Kasatka - Ka-60 Kasatka - Ka-60 Kasatka - Ka-60 Kasatka - Ka-60 Kasatka - Ka-60 Kasatka - Ka-60 Касатка - Ka-60 Kasatka - Ka-60 Kasatka - Ka-60 Kasatka - - - Ka-60 Kasatka (unarmed) - Ka-60 Kasatka (unbewaffnet) - Ka-60 Kasatka (desarmado) - Ka-60 Kasatka (nieuzbrojony) - Ka-60 Kasatka (neozbrojená) - Ka-60 Kasatka (non-armé) - Ka-60 Касатка (невооруженный) - Ka-60 Kasatka (desarmado) - Ka-60 Kasatka (fegyvertelen) - Ka-60 Kasatka (disarmato) - - - Yak-130 - Yak-130 - Yak-130 - Jak-130 - Jak-130 - Yak-130 - Як-130 - Yak-130 - Jak-130 - Yak-130 - - - MD 500 - MD 500 - MD 500 - MD 500 - MD 500 - MD 500 - MD 500 - MD 500 - MD 500 - MD 500 - - - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - - - M18A1 Claymore - M18A1 Claymore - M18A1 Claymore - Mina kierunkowa M18A1 Claymore - M18A1 Mina Claymore - M18A1 Claymore Mine antipersonnel à effet dirigé - M18A1 Клеймор - M18A1 Claymore - M18A1 Claymore akna - M18A1 Claymore Mina antiuomo - - - M183 Demolition Charge Assembly - M183 Geballte Sprengladung - Conjunto de carga de demolición M183 - Ładunek burzący M183 - M183 Demoliční nálož - M183 Charge de Démolition - M183 Комплектный подрывной заряд - M183 Sacola de Demolição - M183 romboló töltet - M183 Demolition Charge Assembly - - - M112 Demolition Block - M112 Sprengladung - Bloque de demolición M112 - Ładunek burzący M112 - M112 Výbušná nálož - Pétard M112 - M112 подрывной заряд - M112 Carga de Demolição - M112 romboló töltet - M112 Demolition Block - - - M67 Fragmentation Grenade - M67 Splittergranate - Granada de fragmentación M67 - Granat obronny M67 - M67 Granát - M67 Grenade à fragmentation - M67 ручная осколочная граната - M67 Granada de fragmentação - M67 repeszgránát - M67 Granata a frammentazione - - - M83 Smoke Grenade (White) - M83 Rauchgranate (Weiss) - Granada de humo M83 (Blanco) - Granat dymny M83 (Biały) - M83 Kouřový Granát (Bílý) - M83 Grenade fumigène (Blanche) - M83 дымовая граната (Белый) - M83 Granada de fumaça (Branca) - M83 füstgránát (Fehér) - M83 Granata fumogena (Bianco) - - - M18 Smoke Grenade (Blue) - M18 Rauchgranate (Blau) - Granada de humo M18 (Azul) - Granat dymny M18 (Niebieski) - M18 Kouřový Granát (Modrý) - M18 Grenade fumigène (Bleue) - M18 дымовая граната (Синий) - M18 Granada de fumaça (Azul) - M18 füstgránát (Kék) - M18 Granata fumogena (Blu) - - - M18 Smoke Grenade (Green) - M18 Rauchgranate (Grün) - Granada de humo M18 (Verde) - Granat dymny M18 (Zielony) - M18 Kouřový Granát (Zelený) - M18 Grenade fumigène (Verte) - M18 дымовая граната (Зелёный) - M18 Granada de fumaça (Verde) - M18 füstgránát (Zöld) - M18 Granata fumogena (Verde) - - - M18 Smoke Grenade (Orange) - M18 Rauchgranate (Orange) - Granada de humo M18 (Naranja) - Granat dymny M18 (Pomarańczowy) - M18 Kouřový Granát (Oranžový) - M18 Grenade fumigène (Orange) - M18 дымовая граната (Оранжевый) - M18 Granada de fumaça (Laranja) - M18 füstgránát (Narancssárga) - M18 Granata fumogena (Arancione) - - - M18 Smoke Grenade (Purple) - M18 Rauchgranate (Violett) - Granada de humo M18 (Púrpura) - Granat dymny M18 (Fioletowy) - M18 Kouřový Granát (Fialový) - M18 Grenade fumigène (Pourpre) - M18 дымовая граната (Пурпурный) - M18 Granada de fumaça (Roxa) - M18 füstgránát (Lila) - M18 Granata fumogena (Viola) - - - M18 Smoke Grenade (Red) - M18 Rauchgranate (Rot) - Granada de humo M18 (Rojo) - Granat dymny M18 (Czerwony) - M18 Kouřový Granát (Červený) - M18 Grenade fumigène (Rouge) - M18 дымовая граната (Красный) - M18 Granada de fumaça (Vermelha) - M18 füstgránát (Piros) - M18 Granata fumogena (Rosso) - - - M18 Smoke Grenade (Yellow) - M18 Rauchgranate (Gelb) - Granada de humo M18 (Amarillo) - Granat dymny M18 (Żółty) - M18 Kouřový Granát (Žlutý) - M18 Grenade fumigène (Jaune) - M183 дымовая граната (Жёлтые) - M18 Granada de fumaça (Amarela) - M18 füstgránát (Sárga) - M18 Granata fumogena (Giallo) - - - M15 Anti-Tank Mine - M15 Panzerabwehrmine - Mina antitanque M15 - Mina przeciwpancerna M15 - M15 Protitanková Mina - M15 Mine antichar - M15 противотанковая мина - M15 Mina anticarro - M15 harckocsiakna - M15 Mine anticarro - - - VS-50 Anti-Personnel Mine - VS-50 Antipersonenmine - Mina antipersona VS-50 - Mina przeciwpiechotna VS-50 - VS-50 Protipěchotní Mina - VS-50 Mine antipersonnel à pression - VS-50 Противопехотная мина - VS-50 Mina antipessoal - VS-50 gyalogsági taposóakna - VS-50 Mine antiuomo - - - M26 Anti-Personnel Bounding Mine - M26 Antipersonensprungmine - Mina antipersona M26 - Mina przeciwpiechotna M26 - M26 Šrapnelová Mina - M26 Mine antipersonnel bondissante - M26 Противопехотная мина - M26 Mina saltadora antipessoal - M26 gyalogsági ugróakna - M26 Mine saltanti antiuomo - - - PMR-3 Anti-Personnel Tripwire Mine - PMR-3 Antipersonenstolperdrahtmine - Mina antipersona de alambre PMR-3 - Mina przeciwpiechotna PMR-3 - PMR-3 Nástražná Mina - PMR-3 Mine antipersonnel à traction - PMR-3 Противопехотная мина - PMR-3 Mina antipessoal (armadilha) - PMR-3 botlódrótos gyalogsági akna - PMR-3 Mine antiuomo - - - P99 - P99 - - - MP-443 Grach - MP-443 Grach - - - ACP-C2 - ACP-C2 - - - FNX-45 Tactical - FNX-45 Tactical - - - Chiappa Rhino 60DS - Chiappa Rhino 60DS - - - Taurus Judge - Taurus Judge - - - NLAW - NLAW - - - RPG-32 - RPG-32 - - - Mini-Spike (AA) - Mini-Spike (AA) - - - Mini-Spike (AT) - Mini-Spike (AT) - - - MX - MX - - - MX (Black) - MX (Black) - - - MXC - MXC - - - MXC (Black) - MXC (Black) - - - MX 3GL - MX 3GL - - - MX 3GL (Black) - MX 3GL (Black) - - - MX LSW - MX LSW - - - MX LSW (Black) - MX LSW (Black) - - - MXM - MXM - - - MXM (Black) - MXM (Black) - - - KT2002 Katiba - KT2002 Katiba - - - KT2002C Katiba - KT2002C Katiba - - - KT2002 Katiba KGL - KT2002 Katiba KGL - - - F2000 (Camo) - F2000 (Camo) - - - F2000 - F2000 - - - F2000 Tactical (Camo) - F2000 Tactical (Camo) - - - F2000 Tactical - F2000 Tactical - - - F2000 EGLM (Camo) - F2000 EGLM (Camo) - - - F2000 EGLM - F2000 EGLM - - - TAR-21 - TAR-21 - - - CTAR-21 - CTAR-21 - - - TAR-21 EGLM - TAR-21 EGLM - - - Vector SMG - Vector SMG - - - Scorpion Evo 3 A1 - Scorpion Evo 3 A1 - - - CPW - CPW - - - RFB SDAR - RFB SDAR - - - Stoner 99 LMG - Stoner 99 LMG - - - Negev NG7 - Negev NG7 - - - Mk14 Mod 1 EBR - Mk14 Mod 1 EBR - - - GM6 Lynx - GM6 Lynx - - - GM6 Lynx (Camo) - GM6 Lynx (Camo) - - - M200 Intervention - M200 Intervention - - - M200 Intervention (Camo) - M200 Intervention (Camo) - - - VS-121 - VS-121 - - - TODO: MAR-10 .338 - - - TODO: MAR-10 .338 (Black) - - - TODO: MAR-10 .338 (Camo) - - - TODO: MAR-10 .338 (Sand) - - - TODO: Mk-I EMR 7.62 mm - - - TODO: Mk-I EMR 7.62 mm (Black) - - - TODO: Mk-I EMR 7.62 mm (Khaki) - - - TODO: Mk-I EMR 7.62 mm (Sand) - - - TODO: Mk-I EMR 7.62 mm (Camo) - - - TODO: Mk-I EMR 7.62 mm (Woodland) - - - TODO: NATO DMR (provisional) spotter - - - TODO: ASP-1 Kir 12.7 mm - - - TODO: ASP-1 Kir 12.7 mm (Black) - - - TODO: ASP-1 Kir 12.7 mm (Tan) - - - TODO: Cyrus 9.3 mm - - - TODO: Cyrus 9.3 mm (Black) - - - TODO: Cyrus 9.3 mm (Hex) - - - TODO: Cyrus 9.3 mm (Tan) - - - TODO: Mk14 7.62 mm - - - TODO: Mk14 7.62 mm (Camo) - - - TODO: Mk14 7.62 mm (Olive) - - - TODO: Navid 9.3 mm - - - TODO: Navid 9.3 mm (Hex) - - - TODO: Navid 9.3 mm (Tan) - - - TODO: SPMG .338 - - - TODO: SPMG .338 (MTP) - - - TODO: SPMG .338 (Black) - - - TODO: SPMG .338 (Sand) - - - \ No newline at end of file + + + XM312 + XM312 + XM312 + XM312 + XM312 + XM312 + XM312 + XM312 + XM312 + XM312A + + + XM312A + XM312A + XM312 + XM312A + XM312A + XM312A + XM312A + XM312A + XM312A + XM312A + + + XM312 (High) + XM312 (Hoch) + XM312 (Alto) + XM312 (Haut) + XM312 (Vysoký) + XM312 (Wysoki) + XM312 (Высокий) + XM312 (Alta) + XM312 (Magasított) + XM312 (Alta) + + + XM307 + XM307 + XM307 + XM307 + XM307 + XM307 + XM307 + XM307 + XM307 + XM307 + + + XM307A + XM307A + XM307A + XM307A + XM307A + XM307A + XM307A + XM307A + XM307A + XM307A + + + XM307 (High) + XM307 (Hoch) + XM307 (Alto) + XM307 (Haut) + XM307 (Vysoký) + XM307 (Wysoki) + XM307 (Высокий) + XM307 (Alta) + XM307 (Magasított) + XM307 (Alta) + + + Mini-Spike Launcher (AT) + Mini-Spike Lenkflugkörper (AT) + Lanzador Mini-Spike (AT) + Poste de tir Mini-Spike (AC) + Mini-Spike Odpalovač (AT) + Wyrzutnia Mini-Spike (AT) + Mini-Spike Пусковое устройство (ПТРК) + Lança-mísseis Mini-Spike (AC) + Mini-Spike rakétarendszer (páncéltörő) + Lanciatore Mini-Spike (AC) + + + Mini-Spike Launcher (AA) + Mini-Spike Lenkflugkörper (AA) + Lanzador Mini-Spike (AA) + Poste de tir Mini-Spike (AA) + Mini-Spike Odpalovač (AA) + Wyrzutnia Mini-Spike (AA) + Mini-Spike Пусковое устройство (ВВ) + Lança-mísseis Mini-Spike (AA) + Mini-Spike rakétarendszer (légvédelmi) + Lanciatore Mini-Spike (AA) + + + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + + + YABHON-R3 (CAS) + YABHON-R3 (Luftnahunterstützung) + YABHON-R3 (CAS) + YABHON-R3 (CAS) + YABHON-R3 (CAS) + YABHON-R3 (штурмовик) + + + M-ATV + M-ATV + M-ATV + M-ATV + M-ATV + M-ATV + M-ATV + M-ATV + M-ATV + M-ATV + + + M-ATV (HMG) + M-ATV (SMG) + M-ATV (HMG) + M-ATV (CKM) + M-ATV (TK) + M-ATV (HMG) + M-ATV (Пулемет) + M-ATV (HMG) + M-ATV (HMG) + M-ATV (HMG) + + + M-ATV (GMG) + M-ATV (GMW) + M-ATV (GMG) + M-ATV (GMG) + M-ATV (Granátomet) + M-ATV (GMG) + M-ATV (Гранатомет) + M-ATV (GMG) + M-ATV (GMG) + M-ATV (GMG) + + + Merkava Mk IV M + Merkava Mk IV M + Merkava Mk IV M + Merkawa Mk IV M + Merkava Mk IV M + Merkava Mk IV M + Меркава Mk IV M + Merkava Mk IV M + Merkava Mk IV M + Merkava Mk IV M + + + Merkava Mk IV LIC + Merkava Mk IV LIC + Merkava Mk IV LIC + Merkawa Mk IV LIC + Merkava Mk IV LIC + Merkava Mk IV LIC + Меркава Mk IV LIC + Merkava Mk IV LIC + Merkava Mk IV LIC + Merkava Mk IV LIC + + + Sholef + Sholef + Sholef + Sholef + Sholef + Sholef + Шолеф + Sholef + Sholef + Sholef + + + Seara + Seara + Seara + Seara + Seara + Seara + Seara + Seara + Seara + Seara + + + Namer + Namer + Namer + Namer + Namer + Namer + Намер + Namer + Namer + Namer + + + Bardelas + Bardelas + Bardelas + Bardelas + Bardelas + Bardelas + Bardelas + Bardelas + Bardelas + Bardelas + + + Patria AMV + Patria AMV + Patria AMV + Patria AMV + Patria AMV + Patria AMV + Patria AMV + Patria AMV + Patria AMV + Patria AMV + + + Nemmera + Nemmera + Nemmera + Nemmera + Nemmera + Nemmera + Nemmera + Nemmera + Nemmera + Nemmera + + + HEMTT Transport + HEMTT Transport + HEMTT de transporte + HEMTT Transportowy + HEMTT Valník + HEMTT Transport + HEMTT Транспортный + HEMTT Transporte + HEMTT szállítójármű + HEMTT da trasporto + + + HEMTT Transport (covered) + HEMTT Transport (bedeckt) + HEMTT de transporte (cubierto) + HEMTT Transportowy (zakryty) + HEMTT Valník (krytý) + HEMTT Transport (bâché) + HEMTT Транспортный (крытый) + HEMTT Transporte (coberto) + HEMTT szállítójármű (ponyvás) + HEMTT da trasporto (coperto) + + + HEMTT + HEMTT + HEMTT + HEMTT + HEMTT + HEMTT Tracteur + HEMTT + HEMTT + HEMTT + HEMTT + + + HEMTT Container + HEMTT Container + HEMTT de contenedor + HEMTT Kontener + HEMTT Skříňový + HEMTT Conteneur + HEMTT Контейнер + HEMTT Contêiner + HEMTT Konténer + HEMTT portacontainer + + + HEMTT Medical + HEMTT Sanitäter + HEMTT médico + HEMTT Medyczny + HEMTT Zdravotnický + HEMTT Sanitaire + HEMTT Медицинский + HEMTT Médico + HEMTT (egészségügyi) + HEMTT Medico + + + HEMTT Ammo + HEMTT Munition + HEMTT de munición + HEMTT Amunicyjny + HEMTT Muniční + HEMTT Munitions + HEMTT Боеприпасы + HEMTT Munições + HEMTT (lőszerszállító) + HEMTT di rifornimento munizioni + + + HEMTT Fuel + HEMTT Treibstoff + HEMTT de combustible + HEMTT Cysterna + HEMTT Cisterna + HEMTT Citerne + HEMTT Заправщик + HEMTT Combustível + HEMTT (üzemanyag-szállító) + HEMTT di rifornimento carburante + + + HEMTT Repair + HEMTT Instandsetzung + HEMTT de reparación + HEMTT Naprawczy + HEMTT Opravárenský + HEMTT Réparation + HEMTT Ремонтный + HEMTT Reparador + HEMTT (szerelő-jármű) + HEMTT Riparatore + + + Fennek + Fennek + Fennek + Fennek + Fennek + Fennek + Феннек + Fennek + Fennek + Fennek + + + Fennek (HMG) + Fennek (SMG) + Fennek (HMG) + Fennek (CKM) + Fennek (TK) + Fennek (HMG) + Феннек (Пулемет) + Fennek (HMG) + Fennek (HMG) + Fennek (HMG) + + + Fennek (GMG) + Fennek (GMW) + Fennek (GMG) + Fennek (GMG) + Fennek (granátomet) + Fennek (GMG) + Феннек (Гранатомет) + Fennek (GMG) + Fennek (GMG) + Fennek (GMG) + + + Leopard 2SG + Leopard 2SG + Leopard 2SG + Leopard 2SG + Leopard 2SG + Leopard 2SG + Леопард 2SG + Leopard 2SG + Leopard 2SG + Leopard 2SG + + + FV510 Warrior + FV510 Warrior + FV510 Warrior + FV510 Warrior + FV510 Warrior + FV510 Warrior + FV510 Уорриор + FV510 Warrior + FV510 Warrior + FV510 Warrior + + + Pandur II + Pandur II + Pandur II + Pandur II + Pandur II + Pandur II + Pandur II + Pandur II + Pandur II + Pandur II + + + KamAZ Transport + KamAZ Transport + KamAZ de transporte + KamAZ transportowy + KAMAZ Valník + KamAZ Transport + КамАЗ Траспортный + KamAZ Transporte + KamAZ szállítójármű + KamAZ da trasporto + + + KamAZ Transport (covered) + KamAZ Transport (bedeckt) + KamAZ de transporte (cubierto) + KamAZ Transportowy (zakryty) + KAMAZ Valník (krytý) + KamAZ Transport (bâché) + КамАЗ Траспортный (Крытый) + KamAZ Transporte (coberto) + KamAZ szállítójármű (ponyvás) + KamAZ da trasporto (coperto) + + + KamAZ Ammo + KamAZ Munition + KamAZ de munición + KamAZ Amunicyjny + KAMAZ Muniční + KamAZ Munitions + КамАЗ Боеприпасы + KamAZ Munições + KamAZ (lőszerszállító) + KamAZ di rifornimento munizioni + + + KamAZ Fuel + KamAZ Treibstoff + KamAZ de combustible + KamAZ cysterna + KAMAZ Cisterna + KamAZ Citerne + КамАЗ Заправщик + KamAZ Combustível + KamAZ (üzemanyag-szállító) + KamAZ di rifornimento carburante + + + KamAZ Repair + KamAZ Instandsetzung + KamAZ de reparación + KamAZ Naprawczy + KAMAZ Opravárenský + KamAZ Réparation + КамАЗ Ремонтный + KamAZ Reparador + KamAZ (szerelő-jármű) + KamAZ riparatore + + + KamAZ Medical + KamAZ Sanitäter + KamAZ médico + KamAZ Medyczny + KAMAZ Zdravotnický + KamAZ Sanitaire + КамАЗ Медицинский + KamAZ Médico + KamAZ (egészségügyi) + KamAZ Medico + + + Punisher + Punisher + Punisher + Punisher + Punisher + Punisher + Kаратель + Punisher + Punisher + Punisher + + + Punisher (HMG) + Punisher (SMG) + Punisher (HMG) + Punisher (CKM) + Punisher (TK) + Punisher (HMG) + Kаратель (Пулемет) + Punisher (HMG) + Punisher (HMG) + Punisher (HMG) + + + Punisher (GMG) + Punisher (GMW) + Punisher (GMG) + Punisher (CKM) + Punisher (granátomet) + Punisher (GMG) + Kаратель (Гранатомет) + Punisher (GMG) + Punisher (GMG) + Punisher (GMG) + + + T100 Black Eagle + T100 Black Eagle + T100 Black Eagle + T100 Black Eagle + T100 Black Eagle + T100 Black Eagle + T100 Черный Орел + T100 Black Eagle + T100 Black Eagle + T100 Black Eagle + + + 2S9 Sochor + 2S9 Sochor + 2S9 Sochor + 259 Sochor + 2S9 Sochor + 2S9 Sochor + 2S9 Сокор + 2S9 Sochor + 2S9 Sochor + 2S9 Sochor + + + BM-2T Stalker + BM-2T Stalker + BM-2T Stalker + BM-2T Stalker + BM-2T Stalker + BM-2T Stalker + БМ-2Т Сталкер + BM-2T Stalker + BM-2T Stalker + BM-2T Stalker + + + ZSU-35 Tigris + ZSU-35 Tigris + ZSU-35 Tigris + ZSU-35 Tigris + ZSU-35 Tigris + ZSU-35 Tigris + ЗСУ-35 Tigris + ZSU-35 Tigris + ZSU-35 Tigris + ZSU-35 Tigris + + + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + + + Typhoon Transport + Typhoon Transport + Typhoon de transporte + Typhoon Transportowy + Typhoon Valník + Typhoon Transport + Тайфун Транспортный + Typhoon Transporte + Typhoon szállítójármű + Typhoon da trasporto + + + Typhoon Transport (covered) + Typhoon Transport (bedeckt) + Typhoon de transporte (cubierto) + Typhoon Transportowy (przykryty) + Typhoon Valník (krytý) + Typhoon Transport (bâché) + Тайфун Транспортный (kрытый) + Typhoon Transporte (coberto) + Typhoon szállítójármű (ponyvás) + Typhoon da trasporto (coperto) + + + Typhoon Device + Typhoon Gerät + Typhoon de dispositivo + Typhoon Urządzenie + Typhoon Zařízení + Typhoon Dispositif + Тайфун Устройство + Typhoon Dispositivo + Typhoon (szerkezet) + Typhoon per dispositivo + + + Typhoon Ammo + Typhoon Munition + Typhoon de munición + Typhoon Amunicyjny + Typhoon Muniční + Typhoon Munitions + Тайфун Боеприпасы + Typhoon Munições + Typhoon (lőszerszállító) + Typhoon di rifornimento munizioni + + + Typhoon Fuel + Typhoon Treibstoff + Typhoon de combustible + Typhoon Cysterna + Typhoon Cisterna + Typhoon Citerne + Тайфун Заправщик + Typhoon Combustível + Typhoon (üzemanyag-szállító) + Typhoon di rifornimento carburante + + + Typhoon Repair + Typhoon Instandsetzung + Typhoon de reparación + Typhoon Naprawczy + Typhoon Opravárenský + Typhoon Réparation + Тайфун Ремонтный + Typhoon Reparador + Typhoon (szerelő-jármű) + Typhoon riparatore + + + Typhoon Medical + Typhoon Sanitäter + Typhoon médico + Typhoon Medyczny + Typhoon Zdravotnický + Typhoon Sanitaire + Тайфун Медицинский + Typhoon Médico + Typhoon (egészségügyi) + Typhoon medico + + + RAH-66 Comanche + RAH-66 Comanche + RAH-66 Comanche + RAH-66 Comanche + RAH-66 Comanche + RAH-66 Commanche + RAH-66 Команч + RAH-66 Comanche + RAH-66 Comanche + RAH-66 Comanche + + + MH-6 Little Bird + MH-6 Little Bird + MH-6 Litte Bird + MH-6 Little Bird + MH-6 Little Bird + MH-6 Little Bird + MH-6 Little Bird + MH-6 Little Bird + MH-6 Little Bird + MH-6 Little Bird + + + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + + + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + + + CH-47I Chinook (unarmed) + CH-47I Chinook (unbewaffnet) + CH-47I Chinnok (Desarmado) + CH-47I Chinook (nieuzbrojony) + CH-47I Chinook (невооруженный) + CH-47I Chinook (Neozbrojený) + + + A-10D Thunderbolt II + A-10D Thunderbolt II + A-10D Thunderbolt II + A-10D Thunderbolt II + A-10D Thunderbolt II + A-10D Thunderbolt II + A-10D Тандерболт II + A-10D Thunderbolt II + A-10D Thunderbolt II + A-10D Thunderbolt II + + + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + + + AW159 Wildcat (unarmed) + AW159 Wildcat (unbewaffnet) + AW159 Wildcat (desarmado) + AW159 Wildcat (nieuzbrojony) + AW159 Wildcat (neozbrojený) + AW159 Wildcat (non-armé) + AW159 Wildcat (невооруженный) + AW159 Wildcat (desarmado) + AW159 Wildcat (fegyvertelen) + AW159 Wildcat (disarmato) + + + AW101 Merlin + AW101 Merlin + AW101 Merlin + AW101 Merlin + AW101 Merlin + AW101 Merlin + AW101 Мерлин + AW101 Merlin + AW101 Merlin + AW101 Merlin + + + L-159 ALCA (CAS) + L-159 ALCA (CAS) + L-159 ALCA (CAS) + L-159 ALCA (CAS) + L-159 ALCA (CAS) + L-159 ALCA (CAS) + L-159 Альбатрос (CAS) + L-159 ALCA (CAS) + L-159 ALCA (CAS) + L-159 ALCA (CAS) + + + L-159 ALCA (AA) + L-159 ALCA (AA) + L-159 ALCA (AA) + L-159 ALCA (AA) + L-159 ALCA (AA) + L-159 ALCA (AA) + L-159 Альбатрос (AA) + L-159 ALCA (ВВ) + L-159 ALCA (AA) + L-159 ALCA (AA) + + + Ka-60 Kasatka + Ka-60 Kasatka + Ka-60 Kasatka + Ka-60 Kasatka + Ka-60 Kasatka + Ka-60 Kasatka + Ka-60 Касатка + Ka-60 Kasatka + Ka-60 Kasatka + Ka-60 Kasatka + + + Ka-60 Kasatka (unarmed) + Ka-60 Kasatka (unbewaffnet) + Ka-60 Kasatka (desarmado) + Ka-60 Kasatka (nieuzbrojony) + Ka-60 Kasatka (neozbrojená) + Ka-60 Kasatka (non-armé) + Ka-60 Касатка (невооруженный) + Ka-60 Kasatka (desarmado) + Ka-60 Kasatka (fegyvertelen) + Ka-60 Kasatka (disarmato) + + + Yak-130 + Yak-130 + Yak-130 + Jak-130 + Jak-130 + Yak-130 + Як-130 + Yak-130 + Jak-130 + Yak-130 + + + MD 500 + MD 500 + MD 500 + MD 500 + MD 500 + MD 500 + MD 500 + MD 500 + MD 500 + MD 500 + + + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + + + M18A1 Claymore + M18A1 Claymore + M18A1 Claymore + Mina kierunkowa M18A1 Claymore + M18A1 Mina Claymore + M18A1 Claymore Mine antipersonnel à effet dirigé + M18A1 Клеймор + M18A1 Claymore + M18A1 Claymore akna + M18A1 Claymore Mina antiuomo + + + M183 Demolition Charge Assembly + M183 Geballte Sprengladung + Conjunto de carga de demolición M183 + Ładunek burzący M183 + M183 Demoliční nálož + M183 Charge de Démolition + M183 Комплектный подрывной заряд + M183 Sacola de Demolição + M183 romboló töltet + M183 Demolition Charge Assembly + + + M112 Demolition Block + M112 Sprengladung + Bloque de demolición M112 + Ładunek burzący M112 + M112 Výbušná nálož + Pétard M112 + M112 подрывной заряд + M112 Carga de Demolição + M112 romboló töltet + M112 Demolition Block + + + M67 Fragmentation Grenade + M67 Splittergranate + Granada de fragmentación M67 + Granat obronny M67 + M67 Granát + M67 Grenade à fragmentation + M67 ручная осколочная граната + M67 Granada de fragmentação + M67 repeszgránát + M67 Granata a frammentazione + + + M83 Smoke Grenade (White) + M83 Rauchgranate (Weiss) + Granada de humo M83 (Blanco) + Granat dymny M83 (Biały) + M83 Kouřový Granát (Bílý) + M83 Grenade fumigène (Blanche) + M83 дымовой гранаты (Белый) + M83 Granada de fumaça (Branca) + M83 füstgránát (Fehér) + M83 Granata fumogena (Bianco) + + + M18 Smoke Grenade (Blue) + M18 Rauchgranate (Blau) + Granada de humo M18 (Azul) + Granat dymny M18 (Niebieski) + M18 Kouřový Granát (Modrý) + M18 Grenade fumigène (Bleue) + M18 дымовой гранаты (Синий) + M18 Granada de fumaça (Azul) + M18 füstgránát (Kék) + M18 Granata fumogena (Blu) + + + M18 Smoke Grenade (Green) + M18 Rauchgranate (Grün) + Granada de humo M18 (Verde) + Granat dymny M18 (Zielony) + M18 Kouřový Granát (Zelený) + M18 Grenade fumigène (Verte) + M18 дымовой гранаты (Зелёный) + M18 Granada de fumaça (Verde) + M18 füstgránát (Zöld) + M18 Granata fumogena (Verde) + + + M18 Smoke Grenade (Orange) + M18 Rauchgranate (Orange) + Granada de humo M18 (Naranja) + Granat dymny M18 (Pomarańczowy) + M18 Kouřový Granát (Oranžový) + M18 Grenade fumigène (Orange) + M18 дымовой гранаты (Оранжевый) + M18 Granada de fumaça (Laranja) + M18 füstgránát (Narancssárga) + M18 Granata fumogena (Arancione) + + + M18 Smoke Grenade (Purple) + M18 Rauchgranate (Violett) + Granada de humo M18 (Púrpura) + Granat dymny M18 (Fioletowy) + M18 Kouřový Granát (Fialový) + M18 Grenade fumigène (Pourpre) + M18 дымовой гранаты (Пурпурный) + M18 Granada de fumaça (Roxa) + M18 füstgránát (Lila) + M18 Granata fumogena (Viola) + + + M18 Smoke Grenade (Red) + M18 Rauchgranate (Rot) + Granada de humo M18 (Rojo) + Granat dymny M18 (Czerwony) + M18 Kouřový Granát (Červený) + M18 Grenade fumigène (Rouge) + M18 дымовой гранаты (Красный) + M18 Granada de fumaça (Vermelha) + M18 füstgránát (Piros) + M18 Granata fumogena (Rosso) + + + M18 Smoke Grenade (Yellow) + M18 Rauchgranate (Gelb) + Granada de humo M18 (Amarillo) + Granat dymny M18 (Żółty) + M18 Kouřový Granát (Žlutý) + M18 Grenade fumigène (Jaune) + M183 дымовой гранаты (Жёлтые) + M18 Granada de fumaça (Amarela) + M18 füstgránát (Sárga) + M18 Granata fumogena (Giallo) + + + M15 Anti-Tank Mine + M15 Panzerabwehrmine + Mina antitanque M15 + Mina przeciwpancerna M15 + M15 Protitanková Mina + M15 Mine antichar + M15 противотанковая мина + M15 Mina anticarro + M15 harckocsiakna + M15 Mine anticarro + + + VS-50 Anti-Personnel Mine + VS-50 Antipersonenmine + Mina antipersona VS-50 + Mina przeciwpiechotna VS-50 + VS-50 Protipěchotní Mina + VS-50 Mine antipersonnel à pression + VS-50 Противопехотная мина + VS-50 Mina antipessoal + VS-50 gyalogsági taposóakna + VS-50 Mine antiuomo + + + M26 Anti-Personnel Bounding Mine + M26 Antipersonensprungmine + Mina antipersona M26 + Mina przeciwpiechotna M26 + M26 Šrapnelová Mina + M26 Mine antipersonnel bondissante + M26 Противопехотная мина + M26 Mina saltadora antipessoal + M26 gyalogsági ugróakna + M26 Mine saltanti antiuomo + + + PMR-3 Anti-Personnel Tripwire Mine + PMR-3 Antipersonenstolperdrahtmine + Mina antipersona de alambre PMR-3 + Mina przeciwpiechotna PMR-3 + PMR-3 Nástražná Mina + PMR-3 Mine antipersonnel à traction + PMR-3 Противопехотная мина + PMR-3 Mina antipessoal (armadilha) + PMR-3 botlódrótos gyalogsági akna + PMR-3 Mine antiuomo + + + P99 + P99 + + + MP-443 Grach + MP-443 Grach + + + ACP-C2 + ACP-C2 + + + FNX-45 Tactical + FNX-45 Tactical + + + Chiappa Rhino 60DS + Chiappa Rhino 60DS + + + Taurus Judge + Taurus Judge + + + NLAW + NLAW + + + RPG-32 + RPG-32 + + + Mini-Spike (AA) + Mini-Spike (AA) + + + Mini-Spike (AT) + Mini-Spike (AT) + + + MX + MX + + + MX (Black) + MX (Black) + + + MXC + MXC + + + MXC (Black) + MXC (Black) + + + MX 3GL + MX 3GL + + + MX 3GL (Black) + MX 3GL (Black) + + + MX LSW + MX LSW + + + MX LSW (Black) + MX LSW (Black) + + + MXM + MXM + + + MXM (Black) + MXM (Black) + + + KT2002 Katiba + KT2002 Katiba + + + KT2002C Katiba + KT2002C Katiba + + + KT2002 Katiba KGL + KT2002 Katiba KGL + + + F2000 (Camo) + F2000 (Camo) + + + F2000 + F2000 + + + F2000 Tactical (Camo) + F2000 Tactical (Camo) + + + F2000 Tactical + F2000 Tactical + + + F2000 EGLM (Camo) + F2000 EGLM (Camo) + + + F2000 EGLM + F2000 EGLM + + + TAR-21 + TAR-21 + + + CTAR-21 + CTAR-21 + + + TAR-21 EGLM + TAR-21 EGLM + + + Vector SMG + Vector SMG + + + Scorpion Evo 3 A1 + Scorpion Evo 3 A1 + + + CPW + CPW + + + RFB SDAR + RFB SDAR + + + Stoner 99 LMG + Stoner 99 LMG + + + Negev NG7 + Negev NG7 + + + Mk14 Mod 1 EBR + Mk14 Mod 1 EBR + + + GM6 Lynx + GM6 Lynx + + + GM6 Lynx (Camo) + GM6 Lynx (Camo) + + + M200 Intervention + M200 Intervention + + + M200 Intervention (Camo) + M200 Intervention (Camo) + + + VS-121 + VS-121 + + + + TODO: MAR-10 .338 + + + TODO: MAR-10 .338 (Black) + + + TODO: MAR-10 .338 (Camo) + + + TODO: MAR-10 .338 (Sand) + + + + TODO: Mk-I EMR 7.62 mm + + + TODO: Mk-I EMR 7.62 mm (Black) + + + TODO: Mk-I EMR 7.62 mm (Khaki) + + + TODO: Mk-I EMR 7.62 mm (Sand) + + + TODO: Mk-I EMR 7.62 mm (Camo) + + + TODO: Mk-I EMR 7.62 mm (Woodland) + + + TODO: NATO DMR (provisional) spotter + + + + TODO: ASP-1 Kir 12.7 mm + + + TODO: ASP-1 Kir 12.7 mm (Black) + + + TODO: ASP-1 Kir 12.7 mm (Tan) + + + + TODO: Cyrus 9.3 mm + + + TODO: Cyrus 9.3 mm (Black) + + + TODO: Cyrus 9.3 mm (Hex) + + + TODO: Cyrus 9.3 mm (Tan) + + + + TODO: Mk14 7.62 mm + + + TODO: Mk14 7.62 mm (Camo) + + + TODO: Mk14 7.62 mm (Olive) + + + + TODO: Navid 9.3 mm + + + TODO: Navid 9.3 mm (Hex) + + + TODO: Navid 9.3 mm (Tan) + + + + TODO: SPMG .338 + + + TODO: SPMG .338 (MTP) + + + TODO: SPMG .338 (Black) + + + TODO: SPMG .338 (Sand) + + + + diff --git a/addons/reload/stringtable.xml b/addons/reload/stringtable.xml index 2aa5197e2f..40f36c6549 100644 --- a/addons/reload/stringtable.xml +++ b/addons/reload/stringtable.xml @@ -1,14 +1,12 @@ - - + + Check ammo on weapon reload - Проверять боезапас при перезарядке Check the ammo in your new magazine on magazine reload. - Проверяет количество патронов в новом магазине при перезарядке. Check Ammo @@ -36,11 +34,9 @@ Link belt - Сцепить ленты Linking belt... - Сцепка лент ... - \ No newline at end of file + diff --git a/addons/reloadlaunchers/stringtable.xml b/addons/reloadlaunchers/stringtable.xml index 664f594acd..6677153419 100644 --- a/addons/reloadlaunchers/stringtable.xml +++ b/addons/reloadlaunchers/stringtable.xml @@ -1,26 +1,24 @@  - + - - - Load launcher - Panzerabwehr laden - Зарядить ПУ - - - Loading launcher ... - Panzerabwehr wird geladen ... - Зарядка ПУ ... - - - Launcher loaded - Panzerabwehr geladen - ПУ заряжено - - - Load %1 - Lade %1 - Загрузка %1 - - - \ No newline at end of file + + + Load launcher + Panzerabwehr laden + + + Loading launcher ... + Panzerabwehr wird geladen ... + + + Launcher loaded + Panzerabwehr geladen + + + + Load %1 + Lade %1 + + + + diff --git a/addons/respawn/stringtable.xml b/addons/respawn/stringtable.xml index 0f1ae731f5..59a9b2b31c 100644 --- a/addons/respawn/stringtable.xml +++ b/addons/respawn/stringtable.xml @@ -1,26 +1,21 @@  - Deploy in 5 seconds ... Wird in 5 Sekunden errichtet ... - Возрождение через 5 секунд ... Rallypoint deployed Rallypoint errichtet - Точка сбора установлена Teleported to Base Zur Basis teleportiert - Телепорт на базу Teleported to Rallypoint Zum Rallypoint teleportiert - Телепорт на точку сбора - \ No newline at end of file + diff --git a/addons/switchunits/stringtable.xml b/addons/switchunits/stringtable.xml index 81cde4b007..842bf89127 100644 --- a/addons/switchunits/stringtable.xml +++ b/addons/switchunits/stringtable.xml @@ -1,5 +1,4 @@  - @@ -13,10 +12,10 @@ This unit is too close to the enemy. Diese Einheit ist zu nah am Feind. - Юнит слишком близок к противнику. + Юнит слишком близок к противнику Tato jednotka je moc blízko k nepříteli. Ta jednostka jest zbyt blisko przeciwnika. Esta unidad está demasiado cerca del enemigo. - \ No newline at end of file + diff --git a/addons/weaponselect/stringtable.xml b/addons/weaponselect/stringtable.xml index 0e7d881413..3a39d59396 100644 --- a/addons/weaponselect/stringtable.xml +++ b/addons/weaponselect/stringtable.xml @@ -1,14 +1,12 @@  - + Display text on grenade throw - Показывать текст при броске Display a hint or text on grenade throw. - Показывать текст или подсказку при броске гранаты. Select Pistol @@ -228,7 +226,7 @@ Už nejsou žádné ostatní granáty Não há outras granadas restantes Nessun'altra granata rimanente. - Летальные гранаты закончились + Невзрывоопасные гранаты закончились No grenade selected diff --git a/addons/wep_javelin/CfgEventhandlers.hpp b/addons/wep_javelin/CfgEventhandlers.hpp index 2ff046944b..a61ea9c746 100644 --- a/addons/wep_javelin/CfgEventhandlers.hpp +++ b/addons/wep_javelin/CfgEventhandlers.hpp @@ -1,18 +1,18 @@ -class Extended_PreInit_EventHandlers { - class ADDON { - init = QUOTE(call COMPILE_FILE(XEH_pre_init)); - }; -}; - -class Extended_PostInit_EventHandlers { - class ADDON { - init = QUOTE(call COMPILE_FILE(XEH_post_init)); - clientInit = QUOTE(call COMPILE_FILE(XEH_clientInit)); - }; -}; - -class Extended_FiredBIS_EventHandlers { - class CAManBase { - ADDON = QUOTE(_this call FUNC(fired)); - }; +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_pre_init)); + }; +}; + +class Extended_PostInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_post_init)); + clientInit = QUOTE(call COMPILE_FILE(XEH_clientInit)); + }; +}; + +class Extended_FiredBIS_EventHandlers { + class CAManBase { + ADDON = QUOTE(_this call FUNC(fired)); + }; }; \ No newline at end of file diff --git a/addons/wep_javelin/CfgSounds.hpp b/addons/wep_javelin/CfgSounds.hpp index 9cd2627fa2..a5002409ff 100644 --- a/addons/wep_javelin/CfgSounds.hpp +++ b/addons/wep_javelin/CfgSounds.hpp @@ -1,13 +1,13 @@ - -class CfgSounds { - class ACE_Javelin_Locking { - name = "ACE_Javelin_Locking"; - sound[] = {PATHTOF(data\sounds\javelin_locking.ogg), db+0, 1.0}; - titles[] = {}; - }; - class ACE_Javelin_Locked { - name = "ACE_Javelin_Locked"; - sound[] = {PATHTOF(data\sounds\javelin_locked.ogg), db+0, 1.0}; - titles[] = {}; - }; -}; + +class CfgSounds { + class ACE_Javelin_Locking { + name = "ACE_Javelin_Locking"; + sound[] = {PATHTOF(data\sounds\javelin_locking.ogg), db+0, 1.0}; + titles[] = {}; + }; + class ACE_Javelin_Locked { + name = "ACE_Javelin_Locked"; + sound[] = {PATHTOF(data\sounds\javelin_locked.ogg), db+0, 1.0}; + titles[] = {}; + }; +}; diff --git a/addons/wep_javelin/RscInGameUI.hpp b/addons/wep_javelin/RscInGameUI.hpp index da33a13a7a..811548a9d2 100644 --- a/addons/wep_javelin/RscInGameUI.hpp +++ b/addons/wep_javelin/RscInGameUI.hpp @@ -1,459 +1,459 @@ -class RscOpticsValue; -class RscControlsGroup; -class RscPicture; -class RscMapControl; -class VScrollbar; -class HScrollbar; -class RscLine; - - -// Taken from AGM for optics management. - -class RscInGameUI { - class RscOptics_titan { - idd = 300; - controls[] = {"ACE_javelin_elements_group"}; - onLoad = QUOTE(_this call FUNC(onOpticLoad)); - onUnload = "uiNameSpace setVariable ['ACE_RscOptics_javelin',nil];"; - - class CA_Distance: RscOpticsValue { - idc = 151; - sizeEx = "0"; - colorText[] = {0,0,0,0}; - x = 0; - y = 0; - w = 0; - h = 0; - }; - - class ACE_javelin_elements_group: RscControlsGroup - { - x = "SafezoneX"; - y = "SafezoneY"; - w = "SafezoneW"; - h = "SafezoneH"; - idc = 170; - class VScrollbar { - autoScrollSpeed = -1; - autoScrollDelay = 5; - autoScrollRewind = 0; - color[] = {1,1,1,0}; - width = 0.001; - }; - class HScrollbar { - color[] = {1,1,1,0}; - height = 0.001; - }; - class Controls { - class JavelinLocking : RscMapControl { - onDraw = QUOTE(_this call FUNC(onOpticDraw)); - idc = -1; - w = 0; - h = 0; - }; - - class ACE_javelin_Day_mode_off: RscPicture { - idc = 1001; - x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.03/4)*3*SafezoneH - SafezoneX"; - y = "SafezoneY+SafezoneH*0.031 - SafezoneY"; - w = "0.1045752* (((SafezoneW*3)/4)/SafezoneW)/(1/SafezoneH)"; - h = "SafezoneH*0.1045752"; - colorText[] = {0.2941,0.2941,0.2941,1}; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\day_co.paa"; - }; - class ACE_javelin_Day_mode: ACE_javelin_Day_mode_off { - idc = 160; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class ACE_javelin_WFOV_mode_off: ACE_javelin_Day_mode_off { - idc = 1004; - x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.307/4)*3*SafezoneH - SafezoneX"; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\wfov_co.paa"; - }; - class ACE_javelin_WFOV_mode_group: RscControlsGroup { - x = "SafezoneX"; - y = "SafezoneY"; - w = "SafezoneW"; - h = "SafezoneH"; - idc = 163; - class VScrollbar { - autoScrollSpeed = -1; - autoScrollDelay = 5; - autoScrollRewind = 0; - color[] = {1,1,1,0}; - width = 0.001; - }; - class HScrollbar { - color[] = {1,1,1,0}; - height = 0.001; - }; - class Controls { - class ACE_javelin_WFOV_mode: ACE_javelin_WFOV_mode_off { - idc = -1; - y = "0.031*SafezoneH - SafezoneY"; - x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.307/4)*3*SafezoneH - SafezoneX"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class StadiaL: RscLine { - x = "0.4899*SafezoneW - SafezoneX"; - y = "0.171*SafezoneH - SafezoneY"; - w = 0; - h = "0.049*SafezoneH"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class StadiaR: RscLine { - x = "0.5109*SafezoneW- SafezoneX"; - y = "0.171*SafezoneH - SafezoneY"; - w = 0; - h = "0.049*SafezoneH"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class BracketL: RscLine { - x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.293/4)*3*SafezoneH - SafezoneX"; - y = "0.4677*SafezoneH - SafezoneY"; - w = 0; - h = "0.0646*SafezoneH"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class BracketR: RscLine { - x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.70/4)*3*SafezoneH - SafezoneX"; - y = "0.4677*SafezoneH - SafezoneY"; - w = 0; - h = "0.0646*SafezoneH"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class BracketT: RscLine { - x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.467/4)*3*SafezoneH - SafezoneX"; - y = "0.3535*SafezoneH - SafezoneY"; - w = "0.065* (((SafezoneW*3)/4)/SafezoneW)/(1/SafezoneH)"; - h = 0; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class BracketB: RscLine { - x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.467/4)*3*SafezoneH - SafezoneX"; - y = "0.6465*SafezoneH - SafezoneY"; - w = "0.065* (((SafezoneW*3)/4)/SafezoneW)/(1/SafezoneH)"; - h = 0; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - }; - }; - class ACE_javelin_NFOV_mode_off: ACE_javelin_Day_mode_off { - idc = 1003; - x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.586/4)*3*SafezoneH - SafezoneX"; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\nfov_co.paa"; - }; - class ACE_javelin_NFOV_mode_group: RscControlsGroup { - x = "SafezoneX"; - y = "SafezoneY"; - w = "SafezoneW-SafezoneX"; - h = "SafezoneH-SafezoneY"; - idc = 162; - class VScrollbar { - autoScrollSpeed = -1; - autoScrollDelay = 5; - autoScrollRewind = 0; - color[] = {1,1,1,0}; - width = 0.001; - }; - class HScrollbar { - color[] = {1,1,1,0}; - height = 0.001; - }; - class Controls { - class ACE_javelin_NFOV_mode: ACE_javelin_NFOV_mode_off { - idc = 699003; - x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.586/4)*3*SafezoneH - SafezoneX"; - y = "0.031*SafezoneH - SafezoneY"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class StadiaL: RscLine { - x = "0.4788*SafezoneW - SafezoneX"; - y = "0.171*SafezoneH - SafezoneY"; - w = 0; - h = "0.049*SafezoneH"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class StadiaR: RscLine { - x = "0.5212*SafezoneW - SafezoneX"; - y = "0.171*SafezoneH - SafezoneY"; - w = 0; - h = "0.049*SafezoneH"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class LineHL: RscLine { - x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.01/4)*3*SafezoneH - SafezoneX"; - y = "SafezoneH*0.5 - SafezoneY"; - w = "0.29* (((SafezoneW*3)/4)/SafezoneW)/(1/SafezoneH)"; - h = "SafezoneH*0.0"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class LineHR: RscLine { - x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.695/4)*3*SafezoneH - SafezoneX"; - y = "SafezoneH*0.5 - SafezoneY"; - w = "0.29* (((SafezoneW*3)/4)/SafezoneW)/(1/SafezoneH)"; - h = "SafezoneH*0.0"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class LineVT: RscLine { - x = "0.5*SafezoneW - SafezoneX"; - y = "0.171*SafezoneH - SafezoneY"; - w = 0; - h = "0.1825*SafezoneH"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class LineVB: RscLine { - x = "0.5*SafezoneW - SafezoneX"; - y = "0.6465*SafezoneH - SafezoneY"; - w = 0; - h = "0.1895*SafezoneH"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - }; - }; - /* - class TargetingConstrains: RscControlsGroup { - idc = 699100; - x = "SafezoneX"; - y = "SafezoneY"; - w = "SafezoneW-SafezoneX"; - h = "SafezoneH-SafezoneY"; - class VScrollbar { - autoScrollSpeed = -1; - autoScrollDelay = 5; - autoScrollRewind = 0; - color[] = {1,1,1,0}; - width = 0.001; - }; - class HScrollbar { - color[] = {1,1,1,0}; - height = 0.001; - }; - class Controls { - class Top: RscPicture { - idc = 699101; - text = "#(argb,8,8,3)color(1,1,1,1)"; - colorText[] = {0.2941,0.2941,0.2941,1}; - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; - y = "0.15*SafezoneH-SafezoneY"; - w = "(3/4)*SafezoneH"; - h = "0.21*SafezoneH"; - }; - class Bottom: Top { - idc = 699102; - y = "0.64*SafezoneH-SafezoneY"; - }; - class Left: Top { - idc = 699103; - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; - y = "0.36*SafezoneH-SafezoneY"; - w = "0.31*(3/4)*SafezoneH"; - h = "0.28*SafezoneH"; - }; - class Right: Left { - idc = 699104; - x = "((SafezoneW -(3/4)*SafezoneH)/2)+ 0.69*(3/4)*SafezoneH - SafezoneX"; - }; - class OpticsBorders: RscPicture { - idc = 699105; - text = PATHTOF(data\javelin_ui_border_ca.paa); - colorText[] = {0,0,0,1}; - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; - y = "0.15*SafezoneH-SafezoneY"; - w = "(3/4)*SafezoneH"; - h = "0.7*SafezoneH"; - }; - }; - }; - - class TargetingGate: TargetingConstrains { - idc = 699200; - class Controls { - class TargetingGateTL: TargetingConstrains { - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; - y = "0.15*SafezoneH - SafezoneY"; - idc = 699201; - class Controls { - class LineH: RscLine { - idc = 699210; - x = "0"; - y = "0"; - w = "0.025*(3/4)*SafezoneH"; - h = "0"; - colorText[] = {0.8745,0.8745,0.8745,1}; - }; - class LineV: LineH { - idc = 699211; - w = "0"; - h = "0.025*SafezoneH"; - }; - }; - }; - class TargetingGateTR: TargetingGateTL { - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX + 0.975*(3/4)*SafezoneH"; - y = "0.15*SafezoneH - SafezoneY"; - idc = 699202; - class Controls { - class LineH: RscLine { - idc = 699220; - x = "0"; - y = "0"; - w = "0.025*(3/4)*SafezoneH"; - h = "0"; - colorText[] = {0.8745,0.8745,0.8745,1}; - }; - class LineV: LineH { - idc = 699221; - x = "0.025*(3/4)*SafezoneH"; - w = "0"; - h = "0.025*SafezoneH"; - }; - }; - }; - class TargetingGateBL: TargetingGateTL { - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; - y = "0.825*SafezoneH - SafezoneY"; - idc = 699203; - class Controls { - class LineH: RscLine { - x = "0"; - y = "0.025*SafezoneH"; - w = "0.025*(3/4)*SafezoneH"; - h = "0"; - colorText[] = {0.8745,0.8745,0.8745,1}; - }; - class LineV: LineH { - y = "0"; - w = "0"; - h = "0.025*SafezoneH"; - }; - }; - }; - class TargetingGateBR: TargetingGateBL { - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX + 0.975*(3/4)*SafezoneH"; - y = "0.825*SafezoneH - SafezoneY"; - idc = 699204; - class Controls { - class LineH: RscLine { - x = "0"; - y = "0.025*SafezoneH"; - w = "0.025*(3/4)*SafezoneH"; - h = "0"; - colorText[] = {0.8745,0.8745,0.8745,1}; - }; - class LineV: LineH { - x = "0.025*(3/4)*SafezoneH"; - y = "0"; - w = "0"; - h = "0.025*SafezoneH"; - }; - }; - }; - }; - }; - - class TargetingLines: TargetingConstrains { - idc = 699300; - class Controls { - class LineH: RscLine { - idc = 699301; - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; - y = "0.5*SafezoneH - SafezoneY"; - w = "(3/4)*SafezoneH"; - h = "0"; - colorText[] = {0.8745,0.8745,0.8745,1}; - }; - class LineV: RscLine { - idc = 699302; - x = "0.5*SafezoneW - SafezoneX"; - y = "0.15*SafezoneH - SafezoneY"; - w = "0"; - h = "0.7*SafezoneH"; - colorText[] = {0.8745,0.8745,0.8745,1}; - }; - }; - }; - */ - - class ACE_javelin_SEEK_off: ACE_javelin_Day_mode_off { - idc = 699000; - x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.863/4)*3*SafezoneH - SafezoneX"; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\seek_co.paa"; - }; - class ACE_javelin_SEEK: ACE_javelin_SEEK_off { - idc = 166; - colorText[] = {0.2941,0.8745,0.2157,0}; - }; - class ACE_javelin_Missle_off: ACE_javelin_Day_mode_off { - idc = 1032; - x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (-0.134/4)*3*SafezoneH - SafezoneX"; - y = "(SafezoneY + 0.208*SafezoneH) - SafezoneY"; - colorText[] = {0.2941,0.2941,0.2941,1}; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\missle_co.paa"; - }; - class ACE_javelin_Missle: ACE_javelin_Missle_off { - idc = 167; - colorText[] = {0.9255,0.5216,0.1216,0}; - }; - class ACE_javelin_CLU_off: ACE_javelin_Missle_off { - idc = 1027; - y = "(SafezoneY + 0.436*SafezoneH) - SafezoneY"; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\clu_co.paa"; - }; - class ACE_javelin_HangFire_off: ACE_javelin_Missle_off { - idc = 1028; - y = "(SafezoneY + 0.669*SafezoneH) - SafezoneY"; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\hangfire_co.paa"; - }; - class ACE_javelin_TOP_off: ACE_javelin_Day_mode_off { - idc = 699001; - x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (1.023/4)*3*SafezoneH - SafezoneX"; - y = "(SafezoneY + 0.208*SafezoneH) - SafezoneY"; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\top_co.paa"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class ACE_javelin_DIR: ACE_javelin_Day_mode { - idc = 699002; - x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (1.023/4)*3*SafezoneH - SafezoneX"; - y = "(SafezoneY + 0.436*SafezoneH) - SafezoneY"; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\dir_co.paa"; - colorText[] = {0.2941,0.2941,0.2941,1}; - }; - class ACE_javelin_FLTR_mode_off: ACE_javelin_Day_mode_off { - idc = 1002; - x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (1.023/4)*3*SafezoneH - SafezoneX"; - y = "(SafezoneY + 0.669*SafezoneH) - SafezoneY"; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\fltr_co.paa"; - }; - class ACE_javelin_FLTR_mode: ACE_javelin_FLTR_mode_off { - idc = 161; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - }; - }; - }; -}; - -// on colorText[] = {0.2941, 0.8745, 0.2157, 1.0}; -// off colorText[] = {0.2941, 0.2941, 0.2941, 1.0}; -// orange colorText[] = {0.9255, 0.5216, 0.1216, 1.0}; - -/* -ACE_Titan_elements_group: 170 -ACE_Titan_Day_mode_off: 1001 -ACE_Titan_Day_mode: 160 -ACE_Titan_WFOV_mode_off: 1004 -ACE_Titan_WFOV_mode_group: 163 -ACE_Titan_NFOV_mode_off: 1003 -ACE_Titan_NFOV_mode_group: 162 -ACE_Titan_SEEK_off: 1005 //1001 -ACE_Titan_SEEK: 166 -ACE_Titan_Missle_off: 1032 -ACE_Titan_Missle: 167 -ACE_Titan_CLU_off: 1027 -ACE_Titan_HangFire_off: 1028 -ACE_Titan_TOP_off: 1006 -ACE_Titan_DIR: 1007 -ACE_Titan_FLTR_mode_off: 1002 -ACE_Titan_FLTR_mode: 161 +class RscOpticsValue; +class RscControlsGroup; +class RscPicture; +class RscMapControl; +class VScrollbar; +class HScrollbar; +class RscLine; + + +// Taken from AGM for optics management. + +class RscInGameUI { + class RscOptics_titan { + idd = 300; + controls[] = {"ACE_javelin_elements_group"}; + onLoad = QUOTE(_this call FUNC(onOpticLoad)); + onUnload = "uiNameSpace setVariable ['ACE_RscOptics_javelin',nil];"; + + class CA_Distance: RscOpticsValue { + idc = 151; + sizeEx = "0"; + colorText[] = {0,0,0,0}; + x = 0; + y = 0; + w = 0; + h = 0; + }; + + class ACE_javelin_elements_group: RscControlsGroup + { + x = "SafezoneX"; + y = "SafezoneY"; + w = "SafezoneW"; + h = "SafezoneH"; + idc = 170; + class VScrollbar { + autoScrollSpeed = -1; + autoScrollDelay = 5; + autoScrollRewind = 0; + color[] = {1,1,1,0}; + width = 0.001; + }; + class HScrollbar { + color[] = {1,1,1,0}; + height = 0.001; + }; + class Controls { + class JavelinLocking : RscMapControl { + onDraw = QUOTE(_this call FUNC(onOpticDraw)); + idc = -1; + w = 0; + h = 0; + }; + + class ACE_javelin_Day_mode_off: RscPicture { + idc = 1001; + x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.03/4)*3*SafezoneH - SafezoneX"; + y = "SafezoneY+SafezoneH*0.031 - SafezoneY"; + w = "0.1045752* (((SafezoneW*3)/4)/SafezoneW)/(1/SafezoneH)"; + h = "SafezoneH*0.1045752"; + colorText[] = {0.2941,0.2941,0.2941,1}; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\day_co.paa"; + }; + class ACE_javelin_Day_mode: ACE_javelin_Day_mode_off { + idc = 160; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class ACE_javelin_WFOV_mode_off: ACE_javelin_Day_mode_off { + idc = 1004; + x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.307/4)*3*SafezoneH - SafezoneX"; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\wfov_co.paa"; + }; + class ACE_javelin_WFOV_mode_group: RscControlsGroup { + x = "SafezoneX"; + y = "SafezoneY"; + w = "SafezoneW"; + h = "SafezoneH"; + idc = 163; + class VScrollbar { + autoScrollSpeed = -1; + autoScrollDelay = 5; + autoScrollRewind = 0; + color[] = {1,1,1,0}; + width = 0.001; + }; + class HScrollbar { + color[] = {1,1,1,0}; + height = 0.001; + }; + class Controls { + class ACE_javelin_WFOV_mode: ACE_javelin_WFOV_mode_off { + idc = -1; + y = "0.031*SafezoneH - SafezoneY"; + x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.307/4)*3*SafezoneH - SafezoneX"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class StadiaL: RscLine { + x = "0.4899*SafezoneW - SafezoneX"; + y = "0.171*SafezoneH - SafezoneY"; + w = 0; + h = "0.049*SafezoneH"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class StadiaR: RscLine { + x = "0.5109*SafezoneW- SafezoneX"; + y = "0.171*SafezoneH - SafezoneY"; + w = 0; + h = "0.049*SafezoneH"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class BracketL: RscLine { + x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.293/4)*3*SafezoneH - SafezoneX"; + y = "0.4677*SafezoneH - SafezoneY"; + w = 0; + h = "0.0646*SafezoneH"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class BracketR: RscLine { + x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.70/4)*3*SafezoneH - SafezoneX"; + y = "0.4677*SafezoneH - SafezoneY"; + w = 0; + h = "0.0646*SafezoneH"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class BracketT: RscLine { + x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.467/4)*3*SafezoneH - SafezoneX"; + y = "0.3535*SafezoneH - SafezoneY"; + w = "0.065* (((SafezoneW*3)/4)/SafezoneW)/(1/SafezoneH)"; + h = 0; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class BracketB: RscLine { + x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.467/4)*3*SafezoneH - SafezoneX"; + y = "0.6465*SafezoneH - SafezoneY"; + w = "0.065* (((SafezoneW*3)/4)/SafezoneW)/(1/SafezoneH)"; + h = 0; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + }; + }; + class ACE_javelin_NFOV_mode_off: ACE_javelin_Day_mode_off { + idc = 1003; + x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.586/4)*3*SafezoneH - SafezoneX"; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\nfov_co.paa"; + }; + class ACE_javelin_NFOV_mode_group: RscControlsGroup { + x = "SafezoneX"; + y = "SafezoneY"; + w = "SafezoneW-SafezoneX"; + h = "SafezoneH-SafezoneY"; + idc = 162; + class VScrollbar { + autoScrollSpeed = -1; + autoScrollDelay = 5; + autoScrollRewind = 0; + color[] = {1,1,1,0}; + width = 0.001; + }; + class HScrollbar { + color[] = {1,1,1,0}; + height = 0.001; + }; + class Controls { + class ACE_javelin_NFOV_mode: ACE_javelin_NFOV_mode_off { + idc = 699003; + x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.586/4)*3*SafezoneH - SafezoneX"; + y = "0.031*SafezoneH - SafezoneY"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class StadiaL: RscLine { + x = "0.4788*SafezoneW - SafezoneX"; + y = "0.171*SafezoneH - SafezoneY"; + w = 0; + h = "0.049*SafezoneH"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class StadiaR: RscLine { + x = "0.5212*SafezoneW - SafezoneX"; + y = "0.171*SafezoneH - SafezoneY"; + w = 0; + h = "0.049*SafezoneH"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class LineHL: RscLine { + x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.01/4)*3*SafezoneH - SafezoneX"; + y = "SafezoneH*0.5 - SafezoneY"; + w = "0.29* (((SafezoneW*3)/4)/SafezoneW)/(1/SafezoneH)"; + h = "SafezoneH*0.0"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class LineHR: RscLine { + x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.695/4)*3*SafezoneH - SafezoneX"; + y = "SafezoneH*0.5 - SafezoneY"; + w = "0.29* (((SafezoneW*3)/4)/SafezoneW)/(1/SafezoneH)"; + h = "SafezoneH*0.0"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class LineVT: RscLine { + x = "0.5*SafezoneW - SafezoneX"; + y = "0.171*SafezoneH - SafezoneY"; + w = 0; + h = "0.1825*SafezoneH"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class LineVB: RscLine { + x = "0.5*SafezoneW - SafezoneX"; + y = "0.6465*SafezoneH - SafezoneY"; + w = 0; + h = "0.1895*SafezoneH"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + }; + }; + /* + class TargetingConstrains: RscControlsGroup { + idc = 699100; + x = "SafezoneX"; + y = "SafezoneY"; + w = "SafezoneW-SafezoneX"; + h = "SafezoneH-SafezoneY"; + class VScrollbar { + autoScrollSpeed = -1; + autoScrollDelay = 5; + autoScrollRewind = 0; + color[] = {1,1,1,0}; + width = 0.001; + }; + class HScrollbar { + color[] = {1,1,1,0}; + height = 0.001; + }; + class Controls { + class Top: RscPicture { + idc = 699101; + text = "#(argb,8,8,3)color(1,1,1,1)"; + colorText[] = {0.2941,0.2941,0.2941,1}; + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; + y = "0.15*SafezoneH-SafezoneY"; + w = "(3/4)*SafezoneH"; + h = "0.21*SafezoneH"; + }; + class Bottom: Top { + idc = 699102; + y = "0.64*SafezoneH-SafezoneY"; + }; + class Left: Top { + idc = 699103; + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; + y = "0.36*SafezoneH-SafezoneY"; + w = "0.31*(3/4)*SafezoneH"; + h = "0.28*SafezoneH"; + }; + class Right: Left { + idc = 699104; + x = "((SafezoneW -(3/4)*SafezoneH)/2)+ 0.69*(3/4)*SafezoneH - SafezoneX"; + }; + class OpticsBorders: RscPicture { + idc = 699105; + text = PATHTOF(data\javelin_ui_border_ca.paa); + colorText[] = {0,0,0,1}; + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; + y = "0.15*SafezoneH-SafezoneY"; + w = "(3/4)*SafezoneH"; + h = "0.7*SafezoneH"; + }; + }; + }; + + class TargetingGate: TargetingConstrains { + idc = 699200; + class Controls { + class TargetingGateTL: TargetingConstrains { + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; + y = "0.15*SafezoneH - SafezoneY"; + idc = 699201; + class Controls { + class LineH: RscLine { + idc = 699210; + x = "0"; + y = "0"; + w = "0.025*(3/4)*SafezoneH"; + h = "0"; + colorText[] = {0.8745,0.8745,0.8745,1}; + }; + class LineV: LineH { + idc = 699211; + w = "0"; + h = "0.025*SafezoneH"; + }; + }; + }; + class TargetingGateTR: TargetingGateTL { + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX + 0.975*(3/4)*SafezoneH"; + y = "0.15*SafezoneH - SafezoneY"; + idc = 699202; + class Controls { + class LineH: RscLine { + idc = 699220; + x = "0"; + y = "0"; + w = "0.025*(3/4)*SafezoneH"; + h = "0"; + colorText[] = {0.8745,0.8745,0.8745,1}; + }; + class LineV: LineH { + idc = 699221; + x = "0.025*(3/4)*SafezoneH"; + w = "0"; + h = "0.025*SafezoneH"; + }; + }; + }; + class TargetingGateBL: TargetingGateTL { + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; + y = "0.825*SafezoneH - SafezoneY"; + idc = 699203; + class Controls { + class LineH: RscLine { + x = "0"; + y = "0.025*SafezoneH"; + w = "0.025*(3/4)*SafezoneH"; + h = "0"; + colorText[] = {0.8745,0.8745,0.8745,1}; + }; + class LineV: LineH { + y = "0"; + w = "0"; + h = "0.025*SafezoneH"; + }; + }; + }; + class TargetingGateBR: TargetingGateBL { + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX + 0.975*(3/4)*SafezoneH"; + y = "0.825*SafezoneH - SafezoneY"; + idc = 699204; + class Controls { + class LineH: RscLine { + x = "0"; + y = "0.025*SafezoneH"; + w = "0.025*(3/4)*SafezoneH"; + h = "0"; + colorText[] = {0.8745,0.8745,0.8745,1}; + }; + class LineV: LineH { + x = "0.025*(3/4)*SafezoneH"; + y = "0"; + w = "0"; + h = "0.025*SafezoneH"; + }; + }; + }; + }; + }; + + class TargetingLines: TargetingConstrains { + idc = 699300; + class Controls { + class LineH: RscLine { + idc = 699301; + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; + y = "0.5*SafezoneH - SafezoneY"; + w = "(3/4)*SafezoneH"; + h = "0"; + colorText[] = {0.8745,0.8745,0.8745,1}; + }; + class LineV: RscLine { + idc = 699302; + x = "0.5*SafezoneW - SafezoneX"; + y = "0.15*SafezoneH - SafezoneY"; + w = "0"; + h = "0.7*SafezoneH"; + colorText[] = {0.8745,0.8745,0.8745,1}; + }; + }; + }; + */ + + class ACE_javelin_SEEK_off: ACE_javelin_Day_mode_off { + idc = 699000; + x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.863/4)*3*SafezoneH - SafezoneX"; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\seek_co.paa"; + }; + class ACE_javelin_SEEK: ACE_javelin_SEEK_off { + idc = 166; + colorText[] = {0.2941,0.8745,0.2157,0}; + }; + class ACE_javelin_Missle_off: ACE_javelin_Day_mode_off { + idc = 1032; + x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (-0.134/4)*3*SafezoneH - SafezoneX"; + y = "(SafezoneY + 0.208*SafezoneH) - SafezoneY"; + colorText[] = {0.2941,0.2941,0.2941,1}; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\missle_co.paa"; + }; + class ACE_javelin_Missle: ACE_javelin_Missle_off { + idc = 167; + colorText[] = {0.9255,0.5216,0.1216,0}; + }; + class ACE_javelin_CLU_off: ACE_javelin_Missle_off { + idc = 1027; + y = "(SafezoneY + 0.436*SafezoneH) - SafezoneY"; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\clu_co.paa"; + }; + class ACE_javelin_HangFire_off: ACE_javelin_Missle_off { + idc = 1028; + y = "(SafezoneY + 0.669*SafezoneH) - SafezoneY"; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\hangfire_co.paa"; + }; + class ACE_javelin_TOP_off: ACE_javelin_Day_mode_off { + idc = 699001; + x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (1.023/4)*3*SafezoneH - SafezoneX"; + y = "(SafezoneY + 0.208*SafezoneH) - SafezoneY"; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\top_co.paa"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class ACE_javelin_DIR: ACE_javelin_Day_mode { + idc = 699002; + x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (1.023/4)*3*SafezoneH - SafezoneX"; + y = "(SafezoneY + 0.436*SafezoneH) - SafezoneY"; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\dir_co.paa"; + colorText[] = {0.2941,0.2941,0.2941,1}; + }; + class ACE_javelin_FLTR_mode_off: ACE_javelin_Day_mode_off { + idc = 1002; + x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (1.023/4)*3*SafezoneH - SafezoneX"; + y = "(SafezoneY + 0.669*SafezoneH) - SafezoneY"; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\fltr_co.paa"; + }; + class ACE_javelin_FLTR_mode: ACE_javelin_FLTR_mode_off { + idc = 161; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + }; + }; + }; +}; + +// on colorText[] = {0.2941, 0.8745, 0.2157, 1.0}; +// off colorText[] = {0.2941, 0.2941, 0.2941, 1.0}; +// orange colorText[] = {0.9255, 0.5216, 0.1216, 1.0}; + +/* +ACE_Titan_elements_group: 170 +ACE_Titan_Day_mode_off: 1001 +ACE_Titan_Day_mode: 160 +ACE_Titan_WFOV_mode_off: 1004 +ACE_Titan_WFOV_mode_group: 163 +ACE_Titan_NFOV_mode_off: 1003 +ACE_Titan_NFOV_mode_group: 162 +ACE_Titan_SEEK_off: 1005 //1001 +ACE_Titan_SEEK: 166 +ACE_Titan_Missle_off: 1032 +ACE_Titan_Missle: 167 +ACE_Titan_CLU_off: 1027 +ACE_Titan_HangFire_off: 1028 +ACE_Titan_TOP_off: 1006 +ACE_Titan_DIR: 1007 +ACE_Titan_FLTR_mode_off: 1002 +ACE_Titan_FLTR_mode: 161 */ \ No newline at end of file diff --git a/addons/wep_javelin/XEH_clientInit.sqf b/addons/wep_javelin/XEH_clientInit.sqf index 8cbd59fcd7..1d3b546e39 100644 --- a/addons/wep_javelin/XEH_clientInit.sqf +++ b/addons/wep_javelin/XEH_clientInit.sqf @@ -1,3 +1,3 @@ -#include "script_component.hpp" - +#include "script_component.hpp" + #include "initKeybinds.sqf" \ No newline at end of file diff --git a/addons/wep_javelin/XEH_post_init.sqf b/addons/wep_javelin/XEH_post_init.sqf index 6eccf9d1dd..dc30361926 100644 --- a/addons/wep_javelin/XEH_post_init.sqf +++ b/addons/wep_javelin/XEH_post_init.sqf @@ -1,2 +1,2 @@ -#include "script_component.hpp" - +#include "script_component.hpp" + diff --git a/addons/wep_javelin/XEH_pre_init.sqf b/addons/wep_javelin/XEH_pre_init.sqf index c56cbc643a..1b6682f0fc 100644 --- a/addons/wep_javelin/XEH_pre_init.sqf +++ b/addons/wep_javelin/XEH_pre_init.sqf @@ -1,15 +1,15 @@ -#include "script_component.hpp" - -PREP(fired); - -PREP(translateToWeaponSpace); -PREP(translateToModelSpace); - -PREP(lockKeyDown); -PREP(lockKeyUp); -PREP(cycleFireMode); - -PREP(onOpticLoad); -PREP(onOpticDraw); - +#include "script_component.hpp" + +PREP(fired); + +PREP(translateToWeaponSpace); +PREP(translateToModelSpace); + +PREP(lockKeyDown); +PREP(lockKeyUp); +PREP(cycleFireMode); + +PREP(onOpticLoad); +PREP(onOpticDraw); + GVAR(isLockKeyDown) = false; \ No newline at end of file diff --git a/addons/wep_javelin/config.cpp b/addons/wep_javelin/config.cpp index 7eb217ddb3..c7ea1c867a 100644 --- a/addons/wep_javelin/config.cpp +++ b/addons/wep_javelin/config.cpp @@ -1,15 +1,15 @@ -#include "script_component.hpp" - -class CfgPatches { - class ADDON { - units[] = {}; - weapons[] = {}; - requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"ace_laser"}; - VERSION_CONFIG; - }; -}; - -#include "CfgEventhandlers.hpp" -#include "RscInGameUI.hpp" +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_laser"}; + VERSION_CONFIG; + }; +}; + +#include "CfgEventhandlers.hpp" +#include "RscInGameUI.hpp" #include "CfgSounds.hpp" \ No newline at end of file diff --git a/addons/wep_javelin/functions/fnc_cycleFireMode.sqf b/addons/wep_javelin/functions/fnc_cycleFireMode.sqf index 2ade157d2b..7902c6d265 100644 --- a/addons/wep_javelin/functions/fnc_cycleFireMode.sqf +++ b/addons/wep_javelin/functions/fnc_cycleFireMode.sqf @@ -1,19 +1,19 @@ -#define DEBUG_MODE_FULL -#include "script_component.hpp" -TRACE_1("enter", _this); - -private["_player", "_currentFireMode"]; - -_currentFireMode = ACE_player getVariable["ACE_FIRE_SELECTION", ACE_JAV_FIREMODE_TOP]; -if(_currentFireMode == ACE_JAV_FIREMODE_DIR) then { - _currentFireMode = ACE_JAV_FIREMODE_TOP; - - __JavelinIGUITop ctrlSetTextColor __ColorGreen; - __JavelinIGUIDir ctrlSetTextColor __ColorGray; -} else { - _currentFireMode = ACE_JAV_FIREMODE_DIR; - - __JavelinIGUITop ctrlSetTextColor __ColorGray; - __JavelinIGUIDir ctrlSetTextColor __ColorGreen; -}; -ACE_player setVariable["ACE_FIRE_SELECTION", _currentFireMode, false]; +#define DEBUG_MODE_FULL +#include "script_component.hpp" +TRACE_1("enter", _this); + +private["_player", "_currentFireMode"]; + +_currentFireMode = ACE_player getVariable["ACE_FIRE_SELECTION", ACE_JAV_FIREMODE_TOP]; +if(_currentFireMode == ACE_JAV_FIREMODE_DIR) then { + _currentFireMode = ACE_JAV_FIREMODE_TOP; + + __JavelinIGUITop ctrlSetTextColor __ColorGreen; + __JavelinIGUIDir ctrlSetTextColor __ColorGray; +} else { + _currentFireMode = ACE_JAV_FIREMODE_DIR; + + __JavelinIGUITop ctrlSetTextColor __ColorGray; + __JavelinIGUIDir ctrlSetTextColor __ColorGreen; +}; +ACE_player setVariable["ACE_FIRE_SELECTION", _currentFireMode, false]; diff --git a/addons/wep_javelin/functions/fnc_fired.sqf b/addons/wep_javelin/functions/fnc_fired.sqf index 9906d35a67..139f8f4b7e 100644 --- a/addons/wep_javelin/functions/fnc_fired.sqf +++ b/addons/wep_javelin/functions/fnc_fired.sqf @@ -1,285 +1,285 @@ -//#define DEBUG_MODE_FULL -#include "script_component.hpp" -//_this=[TEST_AI_HELICOPTER,"missiles_DAGR","missiles_DAGR","Far_AI","M_PG_AT","24Rnd_PG_missiles",163988: rocket_01_fly_f.p3d] -TRACE_1("Launch", _this); -PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); - -FUNC(guidance_Javelin_LOBL_DIR_PFH) = { - TRACE_1("enter", _this); - private["_pitch", "_yaw", "_wentTerminal", "_target", "_targetPos", "_curVelocity", "_missile", - "_launchPos", "_targetStartPos", "_defPitch", "_defYaw"]; - _args = _this select 0; - //PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); - _shooter = _args select 0; - _missile = _args select 6; - - if((count _args) > 7) then { - _saveArgs = _args select 7; - _target = _saveArgs select 0; - _targetStartPos = _saveArgs select 1; - _launchPos = _saveArgs select 2; - _wentTerminal = _saveArgs select 3; - } else { - _wentTerminal = false; - _launchPos = getPosASL _shooter; - _target = ACE_player getVariable[QGVAR(currentTarget), objNull]; - _targetStartPos = ACE_player getVariable[QGVAR(currentTargetPos), [0,0,0]]; - }; - - if(!alive _missile || isNull _missile || isNull _target) exitWith { - [(_this select 1)] call cba_fnc_removePerFrameHandler; - }; - - _targetPos = getPosASL _target; - _curVelocity = velocity _missile; - - TRACE_4("", _target, _targetPos, _launchPos, _targetStartPos); - - _addHeight = [0,0,0]; - if(!isNil "_target") then { - - _yVec = vectorDir _missile; - _zVec = vectorUp _missile; - _xVec = vectorNormalized (_yVec vectorCrossProduct _zVec); - - _missilePos = getPosASL _missile; - // player sideChat "G!"; - - TRACE_4("Phase Check", _launchPos, _missilePos, _targetPos, (_missilePos distance _targetPos)); - if((count _targetPos) > 0) then { - _distanceToTarget = [(_missilePos select 0), (_missilePos select 1), (_targetPos select 2)] vectorDistance _targetPos; - - if( (_missilePos select 2) < (_targetPos select 2) + 60 && !_wentTerminal) then { - _addHeight = [0,0,(_targetPos select 2) + 120]; - - _defPitch = 0.15; - _defYaw = 0.035; - - TRACE_1("Climb phase", _addHeight); - } else { - _wentTerminal = true; - _this set[2, _wentTerminal]; - - _defPitch = 0.15; - _defYaw = 0.035; - - TRACE_1("TERMINAL", ""); - }; - _targetPos = _targetPos vectorAdd _addHeight; - - _targetVectorSeeker = [_missile, [_xVec, _yVec, _zVec], _targetPos] call FUNC(translateToWeaponSpace); - TRACE_5("", _missile, _xVec, _yVec, _zVec, _targetPos); - - _yaw = 0.0; - _pitch = 0.0; - - if((_targetVectorSeeker select 0) < 0) then { - _yaw = -_defYaw; - } else { - if((_targetVectorSeeker select 0) > 0) then { - _yaw = _defYaw; - }; - }; - - if((_targetVectorSeeker select 2) < 0) then { - _pitch = -_defPitch; - } else { - if((_targetVectorSeeker select 2) > 0) then { - _pitch = _defPitch; - }; - }; - - TRACE_3("", _targetVectorSeeker, _pitch, _yaw); - - #ifdef DEBUG_MODE_FULL - drawLine3D [(ASLtoATL _targetPos) vectorAdd _addHeight, ASLtoATL _targetPos, [0,1,0,1]]; - - _light = "#lightpoint" createVehicleLocal (getPos _missile); - _light setLightBrightness 1.0; - _light setLightAmbient [1.0, 0.0, 0.0]; - _light setLightColor [1.0, 0.0, 0.0]; - - drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,1,1,1], ASLtoATL _missilePos, 0.75, 0.75, 0, str _vectorTo, 1, 0.025, "TahomaB"]; - drawLine3D [ASLtoATL _missilePos, ASLtoATL _targetPos, [1,0,0,1]]; - - MARKERCOUNT = MARKERCOUNT + 1; - #endif - - if(accTime > 0) then { - TRACE_5("", _xVec, _yVec, _zVec, _yaw, _pitch); - _outVector = [_missile, [_xVec, _yVec, _zVec], [_yaw, 1/accTime, _pitch]] call FUNC(translateToModelSpace); - - _vectorTo = _missilePos vectorFromTo _outVector; - TRACE_3("", _missile, _outVector, _vectorTo); - _missile setVectorDirAndUp [_vectorTo, vectorUp _missile]; - }; - - #ifdef DEBUG_MODE_FULL - hintSilent format["d: %1", _distanceToTarget]; - #endif - }; - }; - - _saveArgs = [_target,_targetStartPos, _launchPos, _wentTerminal]; - _args set[7, _saveArgs ]; - _this set[0, _args]; -}; - -FUNC(guidance_Javelin_LOBL_TOP_PFH) = { - TRACE_1("enter", _this); - private["_pitch", "_yaw", "_wentTerminal", "_target", "_targetPos", "_curVelocity", "_missile", - "_launchPos", "_targetStartPos", "_defPitch", "_defYaw"]; - _args = _this select 0; - //PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); - _shooter = _args select 0; - _missile = _args select 6; - - if((count _args) > 7) then { - _saveArgs = _args select 7; - _target = _saveArgs select 0; - _targetStartPos = _saveArgs select 1; - _launchPos = _saveArgs select 2; - _wentTerminal = _saveArgs select 3; - } else { - _wentTerminal = false; - _launchPos = getPosASL _shooter; - _target = ACE_player getVariable[QGVAR(currentTarget), objNull]; - _targetStartPos = ACE_player getVariable[QGVAR(currentTargetPos), [0,0,0]]; - }; - - if(!alive _missile || isNull _missile || isNull _target) exitWith { - [(_this select 1)] call cba_fnc_removePerFrameHandler; - }; - - _targetPos = getPosASL _target; - _curVelocity = velocity _missile; - - TRACE_4("", _target, _targetPos, _launchPos, _targetStartPos); - - _addHeight = [0,0,0]; - if(!isNil "_target") then { - - _yVec = vectorDir _missile; - _zVec = vectorUp _missile; - _xVec = vectorNormalized (_yVec vectorCrossProduct _zVec); - - _missilePos = getPosASL _missile; - // player sideChat "G!"; - - TRACE_4("Phase Check", _launchPos, _missilePos, _targetPos, (_missilePos distance _targetPos)); - if((count _targetPos) > 0) then { - _distanceToTarget = [(_missilePos select 0), (_missilePos select 1), (_targetPos select 2)] vectorDistance _targetPos; - - if( (_missilePos select 2) < (_targetPos select 2) + 200 && !_wentTerminal) then { - _addHeight = [0,0, ( (_distanceToTarget * 2) + 400)]; - - _defPitch = 0.25; - _defYaw = 0.035; - - TRACE_1("Climb phase", _addHeight); - } else { - _wentTerminal = true; - _this set[2, _wentTerminal]; - - _defPitch = 0.25; - _defYaw = 0.25; - - TRACE_1("TERMINAL", ""); - }; - _targetPos = _targetPos vectorAdd _addHeight; - - _targetVectorSeeker = [_missile, [_xVec, _yVec, _zVec], _targetPos] call FUNC(translateToWeaponSpace); - TRACE_5("", _missile, _xVec, _yVec, _zVec, _targetPos); - - _yaw = 0.0; - _pitch = 0.0; - - // Stop jinking on terminal final decent - if((_missilePos distance _targetPos) < 150) then { - _defPitch = 0.0015; - _defYaw = 0.0015; - }; - - if((_targetVectorSeeker select 0) < 0) then { - _yaw = -_defYaw; - } else { - if((_targetVectorSeeker select 0) > 0) then { - _yaw = _defYaw; - }; - }; - - if((_targetVectorSeeker select 2) < 0) then { - _pitch = -_defPitch; - } else { - if((_targetVectorSeeker select 2) > 0) then { - _pitch = _defPitch; - }; - }; - - TRACE_3("", _targetVectorSeeker, _pitch, _yaw); - - #ifdef DEBUG_MODE_FULL - drawLine3D [(ASLtoATL _targetPos) vectorAdd _addHeight, ASLtoATL _targetPos, [0,1,0,1]]; - - _light = "#lightpoint" createVehicleLocal (getPos _missile); - _light setLightBrightness 1.0; - _light setLightAmbient [1.0, 0.0, 0.0]; - _light setLightColor [1.0, 0.0, 0.0]; - - drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,1,1,1], ASLtoATL _missilePos, 0.75, 0.75, 0, str _vectorTo, 1, 0.025, "TahomaB"]; - drawLine3D [ASLtoATL _missilePos, ASLtoATL _targetPos, [1,0,0,1]]; - - MARKERCOUNT = MARKERCOUNT + 1; - #endif - - if(accTime > 0) then { - TRACE_5("", _xVec, _yVec, _zVec, _yaw, _pitch); - _outVector = [_missile, [_xVec, _yVec, _zVec], [_yaw, 1/accTime, _pitch]] call FUNC(translateToModelSpace); - - _vectorTo = _missilePos vectorFromTo _outVector; - TRACE_3("", _missile, _outVector, _vectorTo); - _missile setVectorDirAndUp [_vectorTo, vectorUp _missile]; - }; - - #ifdef DEBUG_MODE_FULL - hintSilent format["d: %1", _distanceToTarget]; - #endif - }; - }; - - _saveArgs = [_target,_targetStartPos, _launchPos, _wentTerminal]; - _args set[7, _saveArgs ]; - _this set[0, _args]; -}; - -FUNC(guidance_Javelin_LOBL_TOP) = { - PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); - - GVAR(lastTime) = time; - [FUNC(guidance_Javelin_LOBL_TOP_PFH), 0, _this] call cba_fnc_addPerFrameHandler; -}; - -FUNC(guidance_Javelin_LOBL_DIR) = { - PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); - - GVAR(lastTime) = time; - [FUNC(guidance_Javelin_LOBL_DIR_PFH), 0, _this] call cba_fnc_addPerFrameHandler; -}; - -if(!local _shooter) exitWith { false }; -if(_ammo == "M_Titan_AT") then { - _fireMode = _shooter getVariable ["ACE_FIRE_SELECTION", ACE_JAV_FIREMODE_TOP]; - - switch (_fireMode) do { - // Default to FIREMODE_DIRECT_LOAL - // FIREMODE_DIRECT_LOAL - case ACE_JAV_FIREMODE_DIR: { - LOG("Initiating Javelin FIREMODE_LOBL_DIR"); - _this call FUNC(guidance_Javelin_LOBL_DIR); - }; - default { - LOG("Initiating Javelin FIREMODE_LOBL_TOP"); - _this call FUNC(guidance_Javelin_LOBL_TOP); - }; - }; +//#define DEBUG_MODE_FULL +#include "script_component.hpp" +//_this=[TEST_AI_HELICOPTER,"missiles_DAGR","missiles_DAGR","Far_AI","M_PG_AT","24Rnd_PG_missiles",163988: rocket_01_fly_f.p3d] +TRACE_1("Launch", _this); +PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); + +FUNC(guidance_Javelin_LOBL_DIR_PFH) = { + TRACE_1("enter", _this); + private["_pitch", "_yaw", "_wentTerminal", "_target", "_targetPos", "_curVelocity", "_missile", + "_launchPos", "_targetStartPos", "_defPitch", "_defYaw"]; + _args = _this select 0; + //PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); + _shooter = _args select 0; + _missile = _args select 6; + + if((count _args) > 7) then { + _saveArgs = _args select 7; + _target = _saveArgs select 0; + _targetStartPos = _saveArgs select 1; + _launchPos = _saveArgs select 2; + _wentTerminal = _saveArgs select 3; + } else { + _wentTerminal = false; + _launchPos = getPosASL _shooter; + _target = ACE_player getVariable[QGVAR(currentTarget), objNull]; + _targetStartPos = ACE_player getVariable[QGVAR(currentTargetPos), [0,0,0]]; + }; + + if(!alive _missile || isNull _missile || isNull _target) exitWith { + [(_this select 1)] call cba_fnc_removePerFrameHandler; + }; + + _targetPos = getPosASL _target; + _curVelocity = velocity _missile; + + TRACE_4("", _target, _targetPos, _launchPos, _targetStartPos); + + _addHeight = [0,0,0]; + if(!isNil "_target") then { + + _yVec = vectorDir _missile; + _zVec = vectorUp _missile; + _xVec = vectorNormalized (_yVec vectorCrossProduct _zVec); + + _missilePos = getPosASL _missile; + // player sideChat "G!"; + + TRACE_4("Phase Check", _launchPos, _missilePos, _targetPos, (_missilePos distance _targetPos)); + if((count _targetPos) > 0) then { + _distanceToTarget = [(_missilePos select 0), (_missilePos select 1), (_targetPos select 2)] vectorDistance _targetPos; + + if( (_missilePos select 2) < (_targetPos select 2) + 60 && !_wentTerminal) then { + _addHeight = [0,0,(_targetPos select 2) + 120]; + + _defPitch = 0.15; + _defYaw = 0.035; + + TRACE_1("Climb phase", _addHeight); + } else { + _wentTerminal = true; + _this set[2, _wentTerminal]; + + _defPitch = 0.15; + _defYaw = 0.035; + + TRACE_1("TERMINAL", ""); + }; + _targetPos = _targetPos vectorAdd _addHeight; + + _targetVectorSeeker = [_missile, [_xVec, _yVec, _zVec], _targetPos] call FUNC(translateToWeaponSpace); + TRACE_5("", _missile, _xVec, _yVec, _zVec, _targetPos); + + _yaw = 0.0; + _pitch = 0.0; + + if((_targetVectorSeeker select 0) < 0) then { + _yaw = -_defYaw; + } else { + if((_targetVectorSeeker select 0) > 0) then { + _yaw = _defYaw; + }; + }; + + if((_targetVectorSeeker select 2) < 0) then { + _pitch = -_defPitch; + } else { + if((_targetVectorSeeker select 2) > 0) then { + _pitch = _defPitch; + }; + }; + + TRACE_3("", _targetVectorSeeker, _pitch, _yaw); + + #ifdef DEBUG_MODE_FULL + drawLine3D [(ASLtoATL _targetPos) vectorAdd _addHeight, ASLtoATL _targetPos, [0,1,0,1]]; + + _light = "#lightpoint" createVehicleLocal (getPos _missile); + _light setLightBrightness 1.0; + _light setLightAmbient [1.0, 0.0, 0.0]; + _light setLightColor [1.0, 0.0, 0.0]; + + drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,1,1,1], ASLtoATL _missilePos, 0.75, 0.75, 0, str _vectorTo, 1, 0.025, "TahomaB"]; + drawLine3D [ASLtoATL _missilePos, ASLtoATL _targetPos, [1,0,0,1]]; + + MARKERCOUNT = MARKERCOUNT + 1; + #endif + + if(accTime > 0) then { + TRACE_5("", _xVec, _yVec, _zVec, _yaw, _pitch); + _outVector = [_missile, [_xVec, _yVec, _zVec], [_yaw, 1/accTime, _pitch]] call FUNC(translateToModelSpace); + + _vectorTo = _missilePos vectorFromTo _outVector; + TRACE_3("", _missile, _outVector, _vectorTo); + _missile setVectorDirAndUp [_vectorTo, vectorUp _missile]; + }; + + #ifdef DEBUG_MODE_FULL + hintSilent format["d: %1", _distanceToTarget]; + #endif + }; + }; + + _saveArgs = [_target,_targetStartPos, _launchPos, _wentTerminal]; + _args set[7, _saveArgs ]; + _this set[0, _args]; +}; + +FUNC(guidance_Javelin_LOBL_TOP_PFH) = { + TRACE_1("enter", _this); + private["_pitch", "_yaw", "_wentTerminal", "_target", "_targetPos", "_curVelocity", "_missile", + "_launchPos", "_targetStartPos", "_defPitch", "_defYaw"]; + _args = _this select 0; + //PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); + _shooter = _args select 0; + _missile = _args select 6; + + if((count _args) > 7) then { + _saveArgs = _args select 7; + _target = _saveArgs select 0; + _targetStartPos = _saveArgs select 1; + _launchPos = _saveArgs select 2; + _wentTerminal = _saveArgs select 3; + } else { + _wentTerminal = false; + _launchPos = getPosASL _shooter; + _target = ACE_player getVariable[QGVAR(currentTarget), objNull]; + _targetStartPos = ACE_player getVariable[QGVAR(currentTargetPos), [0,0,0]]; + }; + + if(!alive _missile || isNull _missile || isNull _target) exitWith { + [(_this select 1)] call cba_fnc_removePerFrameHandler; + }; + + _targetPos = getPosASL _target; + _curVelocity = velocity _missile; + + TRACE_4("", _target, _targetPos, _launchPos, _targetStartPos); + + _addHeight = [0,0,0]; + if(!isNil "_target") then { + + _yVec = vectorDir _missile; + _zVec = vectorUp _missile; + _xVec = vectorNormalized (_yVec vectorCrossProduct _zVec); + + _missilePos = getPosASL _missile; + // player sideChat "G!"; + + TRACE_4("Phase Check", _launchPos, _missilePos, _targetPos, (_missilePos distance _targetPos)); + if((count _targetPos) > 0) then { + _distanceToTarget = [(_missilePos select 0), (_missilePos select 1), (_targetPos select 2)] vectorDistance _targetPos; + + if( (_missilePos select 2) < (_targetPos select 2) + 200 && !_wentTerminal) then { + _addHeight = [0,0, ( (_distanceToTarget * 2) + 400)]; + + _defPitch = 0.25; + _defYaw = 0.035; + + TRACE_1("Climb phase", _addHeight); + } else { + _wentTerminal = true; + _this set[2, _wentTerminal]; + + _defPitch = 0.25; + _defYaw = 0.25; + + TRACE_1("TERMINAL", ""); + }; + _targetPos = _targetPos vectorAdd _addHeight; + + _targetVectorSeeker = [_missile, [_xVec, _yVec, _zVec], _targetPos] call FUNC(translateToWeaponSpace); + TRACE_5("", _missile, _xVec, _yVec, _zVec, _targetPos); + + _yaw = 0.0; + _pitch = 0.0; + + // Stop jinking on terminal final decent + if((_missilePos distance _targetPos) < 150) then { + _defPitch = 0.0015; + _defYaw = 0.0015; + }; + + if((_targetVectorSeeker select 0) < 0) then { + _yaw = -_defYaw; + } else { + if((_targetVectorSeeker select 0) > 0) then { + _yaw = _defYaw; + }; + }; + + if((_targetVectorSeeker select 2) < 0) then { + _pitch = -_defPitch; + } else { + if((_targetVectorSeeker select 2) > 0) then { + _pitch = _defPitch; + }; + }; + + TRACE_3("", _targetVectorSeeker, _pitch, _yaw); + + #ifdef DEBUG_MODE_FULL + drawLine3D [(ASLtoATL _targetPos) vectorAdd _addHeight, ASLtoATL _targetPos, [0,1,0,1]]; + + _light = "#lightpoint" createVehicleLocal (getPos _missile); + _light setLightBrightness 1.0; + _light setLightAmbient [1.0, 0.0, 0.0]; + _light setLightColor [1.0, 0.0, 0.0]; + + drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,1,1,1], ASLtoATL _missilePos, 0.75, 0.75, 0, str _vectorTo, 1, 0.025, "TahomaB"]; + drawLine3D [ASLtoATL _missilePos, ASLtoATL _targetPos, [1,0,0,1]]; + + MARKERCOUNT = MARKERCOUNT + 1; + #endif + + if(accTime > 0) then { + TRACE_5("", _xVec, _yVec, _zVec, _yaw, _pitch); + _outVector = [_missile, [_xVec, _yVec, _zVec], [_yaw, 1/accTime, _pitch]] call FUNC(translateToModelSpace); + + _vectorTo = _missilePos vectorFromTo _outVector; + TRACE_3("", _missile, _outVector, _vectorTo); + _missile setVectorDirAndUp [_vectorTo, vectorUp _missile]; + }; + + #ifdef DEBUG_MODE_FULL + hintSilent format["d: %1", _distanceToTarget]; + #endif + }; + }; + + _saveArgs = [_target,_targetStartPos, _launchPos, _wentTerminal]; + _args set[7, _saveArgs ]; + _this set[0, _args]; +}; + +FUNC(guidance_Javelin_LOBL_TOP) = { + PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); + + GVAR(lastTime) = time; + [FUNC(guidance_Javelin_LOBL_TOP_PFH), 0, _this] call cba_fnc_addPerFrameHandler; +}; + +FUNC(guidance_Javelin_LOBL_DIR) = { + PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); + + GVAR(lastTime) = time; + [FUNC(guidance_Javelin_LOBL_DIR_PFH), 0, _this] call cba_fnc_addPerFrameHandler; +}; + +if(!local _shooter) exitWith { false }; +if(_ammo == "M_Titan_AT") then { + _fireMode = _shooter getVariable ["ACE_FIRE_SELECTION", ACE_JAV_FIREMODE_TOP]; + + switch (_fireMode) do { + // Default to FIREMODE_DIRECT_LOAL + // FIREMODE_DIRECT_LOAL + case ACE_JAV_FIREMODE_DIR: { + LOG("Initiating Javelin FIREMODE_LOBL_DIR"); + _this call FUNC(guidance_Javelin_LOBL_DIR); + }; + default { + LOG("Initiating Javelin FIREMODE_LOBL_TOP"); + _this call FUNC(guidance_Javelin_LOBL_TOP); + }; + }; }; \ No newline at end of file diff --git a/addons/wep_javelin/functions/fnc_lockKeyDown.sqf b/addons/wep_javelin/functions/fnc_lockKeyDown.sqf index 858d9373c4..bc3198915b 100644 --- a/addons/wep_javelin/functions/fnc_lockKeyDown.sqf +++ b/addons/wep_javelin/functions/fnc_lockKeyDown.sqf @@ -1,3 +1,3 @@ -#define DEBUG_MODE_FULL -#include "script_component.hpp" +#define DEBUG_MODE_FULL +#include "script_component.hpp" TRACE_1("enter", _this); \ No newline at end of file diff --git a/addons/wep_javelin/functions/fnc_lockKeyUp.sqf b/addons/wep_javelin/functions/fnc_lockKeyUp.sqf index 858d9373c4..bc3198915b 100644 --- a/addons/wep_javelin/functions/fnc_lockKeyUp.sqf +++ b/addons/wep_javelin/functions/fnc_lockKeyUp.sqf @@ -1,3 +1,3 @@ -#define DEBUG_MODE_FULL -#include "script_component.hpp" +#define DEBUG_MODE_FULL +#include "script_component.hpp" TRACE_1("enter", _this); \ No newline at end of file diff --git a/addons/wep_javelin/functions/fnc_onOpticDraw.sqf b/addons/wep_javelin/functions/fnc_onOpticDraw.sqf index 2389904dcf..6a74b3ed57 100644 --- a/addons/wep_javelin/functions/fnc_onOpticDraw.sqf +++ b/addons/wep_javelin/functions/fnc_onOpticDraw.sqf @@ -1,132 +1,132 @@ -//#define DEBUG_MODE_FULL -#include "script_component.hpp" -//TRACE_1("enter", _this); - -#define __TRACKINTERVAL 0.1 // how frequent the check should be. -#define __LOCKONTIME 1.85 // Lock on won't occur sooner -#define __LOCKONTIMERANDOM 0.3 // Deviation in lock on time -#define __SENSORSQUARE 1 // Locking on sensor square side in angles - -#define __ConstraintTop (((ctrlPosition __JavelinIGUITargetingConstrainTop) select 1) + ((ctrlPosition (__JavelinIGUITargetingConstrainTop)) select 3)) -#define __ConstraintBottom ((ctrlPosition __JavelinIGUITargetingConstrainBottom) select 1) -#define __ConstraintLeft (((ctrlPosition __JavelinIGUITargetingConstrainLeft) select 0) + ((ctrlPosition (__JavelinIGUITargetingConstrainLeft)) select 2)) -#define __ConstraintRight ((ctrlPosition __JavelinIGUITargetingConstrainRight) select 0) - -#define __OffsetX ((ctrlPosition __JavelinIGUITargetingLineV) select 0) - 0.5 -#define __OffsetY ((ctrlPosition __JavelinIGUITargetingLineH) select 1) - 0.5 - - -private["_args", "_lastTick", "_runTime", "_soundTime", "_lockTime", "_newTarget", "_currentTarget", "_range", "_pos", "_targetArray"]; - -// Reset arguments if we havnt rendered in over a second -_args = uiNamespace getVariable[QGVAR(arguments), [] ]; -if( (count _args) > 0) then { - _lastTick = _args select 0; - if(diag_tickTime - _lastTick > 1) then { - [] call FUNC(onOpticLoad); - }; -}; - -// Pull the arguments -_currentTarget = _args select 1; -_runTime = _args select 2; -_lockTime = _args select 3; -_soundTime = _args select 4; - -// Find a target within the optic range -_newTarget = objNull; - -// Bail on fast movement -if ((velocity ACE_player) distance [0,0,0] > 0.5 && {cameraView == "GUNNER"} && {cameraOn == ACE_player}) exitWith { // keep it steady. - ACE_player switchCamera "INTERNAL"; -}; - -// Only start locking on holding tab -if(!GVAR(isLockKeyDown)) exitWith { false }; - -_range = parseNumber (ctrlText __JavelinIGUIRangefinder); -if (_range > 50 && {_range < 2500}) then { - _pos = positionCameraToWorld [0,0,_range]; - _targetArray = _pos nearEntities ["AllVehicles", _range/25]; - if (count (_targetArray) > 0) then { - _newTarget = _targetArray select 0; - }; -}; - -if (isNull _newTarget) then { - _newTarget = cursorTarget; -}; - -if (isNull _newTarget) then { - // No targets found - _currentTarget = objNull; - _lockTime = 0; - - __JavelinIGUISeek ctrlSetTextColor __ColorGray; - __JavelinIGUINFOV ctrlSetTextColor __ColorGreen; - __JavelinIGUITargetingConstrains ctrlShow false; - __JavelinIGUITargetingGate ctrlShow false; - __JavelinIGUITargetingLines ctrlShow false; - - ACE_player setVariable [QGVAR(currentTarget),nil, false]; - - // Disallow fire - //if (ACE_player ammo "Javelin" > 0 || {ACE_player ammo "ACE_Javelin_Direct" > 0}) then {ACE_player setWeaponReloadingTime //[player, "Javelin", 0.2];}; -} else { - if (_newTarget distance ACE_player < 2500 - // && {(call CBA_fnc_getFoV) select 1 > 7} - // && { (currentVisionMode ACE_player == 2)} - ) then { - // Lock on after 3 seconds - if(_currentTarget != _newTarget) then { - TRACE_1("New Target, reseting locking", _newTarget); - _lockTime = diag_tickTime; - _currentTarget = _newTarget; - - playSound "ACE_Javelin_Locking"; - } else { - if(diag_tickTime - _lockTime > 3) then { - TRACE_2("LOCKED!", _currentTarget, _lockTime); - __JavelinIGUISeek ctrlSetTextColor __ColorGreen; - __JavelinIGUINFOV ctrlSetTextColor __ColorNull; - __JavelinIGUITargetingConstrains ctrlShow true; - - ACE_player setVariable[QGVAR(currentTarget), _currentTarget, false]; - ACE_player setVariable[QGVAR(currentTargetPos), getPosASL _currentTarget, false]; - - if(diag_tickTime > _soundTime) then { - playSound "ACE_Javelin_Locked"; - _soundTime = diag_tickTime + 0.25; - }; - } else { - if(diag_tickTime > _soundTime) then { - playSound "ACE_Javelin_Locking"; - _soundTime = diag_tickTime + 0.25; - }; - }; - }; - } else { - // Something is wrong with our seek - _currentTarget = objNull; - - __JavelinIGUISeek ctrlSetTextColor __ColorGray; - __JavelinIGUINFOV ctrlSetTextColor __ColorGray; - __JavelinIGUITargetingConstrains ctrlShow false; - __JavelinIGUITargetingGate ctrlShow false; - __JavelinIGUITargetingLines ctrlShow false; - - ACE_player setVariable [QGVAR(currentTarget),nil, false]; - }; - -}; - -//TRACE_2("", _newTarget, _currentTarget); - -// Save arguments for next run -_args set[0, diag_tickTime]; -_args set[1, _currentTarget]; -_args set[2, _runTime]; -_args set[3, _lockTime]; -_args set[4, _soundTime]; - +//#define DEBUG_MODE_FULL +#include "script_component.hpp" +//TRACE_1("enter", _this); + +#define __TRACKINTERVAL 0.1 // how frequent the check should be. +#define __LOCKONTIME 1.85 // Lock on won't occur sooner +#define __LOCKONTIMERANDOM 0.3 // Deviation in lock on time +#define __SENSORSQUARE 1 // Locking on sensor square side in angles + +#define __ConstraintTop (((ctrlPosition __JavelinIGUITargetingConstrainTop) select 1) + ((ctrlPosition (__JavelinIGUITargetingConstrainTop)) select 3)) +#define __ConstraintBottom ((ctrlPosition __JavelinIGUITargetingConstrainBottom) select 1) +#define __ConstraintLeft (((ctrlPosition __JavelinIGUITargetingConstrainLeft) select 0) + ((ctrlPosition (__JavelinIGUITargetingConstrainLeft)) select 2)) +#define __ConstraintRight ((ctrlPosition __JavelinIGUITargetingConstrainRight) select 0) + +#define __OffsetX ((ctrlPosition __JavelinIGUITargetingLineV) select 0) - 0.5 +#define __OffsetY ((ctrlPosition __JavelinIGUITargetingLineH) select 1) - 0.5 + + +private["_args", "_lastTick", "_runTime", "_soundTime", "_lockTime", "_newTarget", "_currentTarget", "_range", "_pos", "_targetArray"]; + +// Reset arguments if we havnt rendered in over a second +_args = uiNamespace getVariable[QGVAR(arguments), [] ]; +if( (count _args) > 0) then { + _lastTick = _args select 0; + if(diag_tickTime - _lastTick > 1) then { + [] call FUNC(onOpticLoad); + }; +}; + +// Pull the arguments +_currentTarget = _args select 1; +_runTime = _args select 2; +_lockTime = _args select 3; +_soundTime = _args select 4; + +// Find a target within the optic range +_newTarget = objNull; + +// Bail on fast movement +if ((velocity ACE_player) distance [0,0,0] > 0.5 && {cameraView == "GUNNER"} && {cameraOn == ACE_player}) exitWith { // keep it steady. + ACE_player switchCamera "INTERNAL"; +}; + +// Only start locking on holding tab +if(!GVAR(isLockKeyDown)) exitWith { false }; + +_range = parseNumber (ctrlText __JavelinIGUIRangefinder); +if (_range > 50 && {_range < 2500}) then { + _pos = positionCameraToWorld [0,0,_range]; + _targetArray = _pos nearEntities ["AllVehicles", _range/25]; + if (count (_targetArray) > 0) then { + _newTarget = _targetArray select 0; + }; +}; + +if (isNull _newTarget) then { + _newTarget = cursorTarget; +}; + +if (isNull _newTarget) then { + // No targets found + _currentTarget = objNull; + _lockTime = 0; + + __JavelinIGUISeek ctrlSetTextColor __ColorGray; + __JavelinIGUINFOV ctrlSetTextColor __ColorGreen; + __JavelinIGUITargetingConstrains ctrlShow false; + __JavelinIGUITargetingGate ctrlShow false; + __JavelinIGUITargetingLines ctrlShow false; + + ACE_player setVariable [QGVAR(currentTarget),nil, false]; + + // Disallow fire + //if (ACE_player ammo "Javelin" > 0 || {ACE_player ammo "ACE_Javelin_Direct" > 0}) then {ACE_player setWeaponReloadingTime //[player, "Javelin", 0.2];}; +} else { + if (_newTarget distance ACE_player < 2500 + // && {(call CBA_fnc_getFoV) select 1 > 7} + // && { (currentVisionMode ACE_player == 2)} + ) then { + // Lock on after 3 seconds + if(_currentTarget != _newTarget) then { + TRACE_1("New Target, reseting locking", _newTarget); + _lockTime = diag_tickTime; + _currentTarget = _newTarget; + + playSound "ACE_Javelin_Locking"; + } else { + if(diag_tickTime - _lockTime > 3) then { + TRACE_2("LOCKED!", _currentTarget, _lockTime); + __JavelinIGUISeek ctrlSetTextColor __ColorGreen; + __JavelinIGUINFOV ctrlSetTextColor __ColorNull; + __JavelinIGUITargetingConstrains ctrlShow true; + + ACE_player setVariable[QGVAR(currentTarget), _currentTarget, false]; + ACE_player setVariable[QGVAR(currentTargetPos), getPosASL _currentTarget, false]; + + if(diag_tickTime > _soundTime) then { + playSound "ACE_Javelin_Locked"; + _soundTime = diag_tickTime + 0.25; + }; + } else { + if(diag_tickTime > _soundTime) then { + playSound "ACE_Javelin_Locking"; + _soundTime = diag_tickTime + 0.25; + }; + }; + }; + } else { + // Something is wrong with our seek + _currentTarget = objNull; + + __JavelinIGUISeek ctrlSetTextColor __ColorGray; + __JavelinIGUINFOV ctrlSetTextColor __ColorGray; + __JavelinIGUITargetingConstrains ctrlShow false; + __JavelinIGUITargetingGate ctrlShow false; + __JavelinIGUITargetingLines ctrlShow false; + + ACE_player setVariable [QGVAR(currentTarget),nil, false]; + }; + +}; + +//TRACE_2("", _newTarget, _currentTarget); + +// Save arguments for next run +_args set[0, diag_tickTime]; +_args set[1, _currentTarget]; +_args set[2, _runTime]; +_args set[3, _lockTime]; +_args set[4, _soundTime]; + uiNamespace setVariable[QGVAR(arguments), _args ]; \ No newline at end of file diff --git a/addons/wep_javelin/functions/fnc_onOpticLoad.sqf b/addons/wep_javelin/functions/fnc_onOpticLoad.sqf index 88fc99e19b..c4a7069630 100644 --- a/addons/wep_javelin/functions/fnc_onOpticLoad.sqf +++ b/addons/wep_javelin/functions/fnc_onOpticLoad.sqf @@ -1,17 +1,17 @@ -//#define DEBUG_MODE_FULL -#include "script_component.hpp" -TRACE_1("enter", _this); - -if((count _this) > 0) then { - uiNameSpace setVariable ['ACE_RscOptics_javelin',_this select 0]; -}; - -uiNameSpace setVariable [QGVAR(arguments), - [ - 0, // Last runtime - objNull, // currentTargetObject - 0, // Run Time - 0, // Lock Time - 0 // Sound timer - ] +//#define DEBUG_MODE_FULL +#include "script_component.hpp" +TRACE_1("enter", _this); + +if((count _this) > 0) then { + uiNameSpace setVariable ['ACE_RscOptics_javelin',_this select 0]; +}; + +uiNameSpace setVariable [QGVAR(arguments), + [ + 0, // Last runtime + objNull, // currentTargetObject + 0, // Run Time + 0, // Lock Time + 0 // Sound timer + ] ]; \ No newline at end of file diff --git a/addons/wep_javelin/functions/fnc_translateToModelSpace.sqf b/addons/wep_javelin/functions/fnc_translateToModelSpace.sqf index 8b80cf9958..12f828769a 100644 --- a/addons/wep_javelin/functions/fnc_translateToModelSpace.sqf +++ b/addons/wep_javelin/functions/fnc_translateToModelSpace.sqf @@ -1,20 +1,20 @@ -//#define DEBUG_MODE_FULL -#include "script_component.hpp" -TRACE_1("enter", _this); - -_object = _this select 0; -_origin = getPosASL _object; -_matrix = _this select 1; -_xVec = _matrix select 0; -_yVec = _matrix select 1; -_zVec = _matrix select 2; - -_offset = _this select 2; - -_x = _offset select 0; -_y = _offset select 1; -_z = _offset select 2; - -_out = (((_xVec vectorMultiply _x) vectorAdd (_yVec vectorMultiply _y)) vectorAdd (_zVec vectorMultiply _z)) vectorAdd _origin; - +//#define DEBUG_MODE_FULL +#include "script_component.hpp" +TRACE_1("enter", _this); + +_object = _this select 0; +_origin = getPosASL _object; +_matrix = _this select 1; +_xVec = _matrix select 0; +_yVec = _matrix select 1; +_zVec = _matrix select 2; + +_offset = _this select 2; + +_x = _offset select 0; +_y = _offset select 1; +_z = _offset select 2; + +_out = (((_xVec vectorMultiply _x) vectorAdd (_yVec vectorMultiply _y)) vectorAdd (_zVec vectorMultiply _z)) vectorAdd _origin; + _out; \ No newline at end of file diff --git a/addons/wep_javelin/functions/fnc_translateToWeaponSpace.sqf b/addons/wep_javelin/functions/fnc_translateToWeaponSpace.sqf index 6b42e20ef9..8f85005d48 100644 --- a/addons/wep_javelin/functions/fnc_translateToWeaponSpace.sqf +++ b/addons/wep_javelin/functions/fnc_translateToWeaponSpace.sqf @@ -1,26 +1,26 @@ -//#define DEBUG_MODE_FULL -#include "script_component.hpp" -TRACE_1("enter", _this); - -_object = _this select 0; -_origin = getPosASL _object; -_matrix = _this select 1; -_xVec = _matrix select 0; -_yVec = _matrix select 1; -_zVec = _matrix select 2; - -_offset = _this select 2; - -_offset = _offset vectorDiff _origin; - -_x = _offset select 0; -_y = _offset select 1; -_z = _offset select 2; - -_out = [ - ((_xVec select 0)*_x) + ((_xVec select 1)*_y) + ((_xVec select 2)*_z), - ((_yVec select 0)*_x) + ((_yVec select 1)*_y) + ((_yVec select 2)*_z), - ((_zVec select 0)*_x) + ((_zVec select 1)*_y) + ((_zVec select 2)*_z) - ]; - +//#define DEBUG_MODE_FULL +#include "script_component.hpp" +TRACE_1("enter", _this); + +_object = _this select 0; +_origin = getPosASL _object; +_matrix = _this select 1; +_xVec = _matrix select 0; +_yVec = _matrix select 1; +_zVec = _matrix select 2; + +_offset = _this select 2; + +_offset = _offset vectorDiff _origin; + +_x = _offset select 0; +_y = _offset select 1; +_z = _offset select 2; + +_out = [ + ((_xVec select 0)*_x) + ((_xVec select 1)*_y) + ((_xVec select 2)*_z), + ((_yVec select 0)*_x) + ((_yVec select 1)*_y) + ((_yVec select 2)*_z), + ((_zVec select 0)*_x) + ((_zVec select 1)*_y) + ((_zVec select 2)*_z) + ]; + _out; \ No newline at end of file diff --git a/addons/wep_javelin/initKeybinds.sqf b/addons/wep_javelin/initKeybinds.sqf index b8c5e490df..126b1395a3 100644 --- a/addons/wep_javelin/initKeybinds.sqf +++ b/addons/wep_javelin/initKeybinds.sqf @@ -1,30 +1,30 @@ -// by commy2 - -["ACE3", QGVAR(lockTarget), localize "STR_ACE_WEP_JAVELIN_LockTarget", -{ - if (GETGVAR(isLockKeyDown,false)) exitWith {false}; - - GVAR(isLockKeyDown) = true; - - // Statement - [ACE_player] call FUNC(lockKeyDown); - // Return false so it doesn't block the rest weapon action - false -}, -{ - // prevent holding down - GVAR(isLockKeyDown) = false; - - // Statement - [ACE_player] call FUNC(lockKeyUp); - false -}, -[15, [false, false, false]], false] call cba_fnc_addKeybind; //Tab Key - -["ACE3", QGVAR(cycleFireMode), localize "STR_ACE_WEP_JAVELIN_CycleFireMode", -{ false }, -{ - [ACE_player] call FUNC(cycleFireMode); - false -}, +// by commy2 + +["ACE3", QGVAR(lockTarget), localize "STR_ACE_WEP_JAVELIN_LockTarget", +{ + if (GETGVAR(isLockKeyDown,false)) exitWith {false}; + + GVAR(isLockKeyDown) = true; + + // Statement + [ACE_player] call FUNC(lockKeyDown); + // Return false so it doesn't block the rest weapon action + false +}, +{ + // prevent holding down + GVAR(isLockKeyDown) = false; + + // Statement + [ACE_player] call FUNC(lockKeyUp); + false +}, +[15, [false, false, false]], false] call cba_fnc_addKeybind; //Tab Key + +["ACE3", QGVAR(cycleFireMode), localize "STR_ACE_WEP_JAVELIN_CycleFireMode", +{ false }, +{ + [ACE_player] call FUNC(cycleFireMode); + false +}, [15, [false, true, false]], false] call cba_fnc_addKeybind; //Shift+Tab Key \ No newline at end of file diff --git a/addons/wep_javelin/script_component.hpp b/addons/wep_javelin/script_component.hpp index 2c75308cd4..3df1273422 100644 --- a/addons/wep_javelin/script_component.hpp +++ b/addons/wep_javelin/script_component.hpp @@ -1,53 +1,53 @@ -#define COMPONENT wep_javelin -#include "\z\ace\Addons\main\script_mod.hpp" - -#ifdef DEBUG_ENABLED_WEP_JAVELIN - #define DEBUG_MODE_FULL -#endif - -#ifdef DEBUG_SETTINGS_WEP_JAVELIN - #define DEBUG_SETTINGS DEBUG_SETTINGS_WEP_JAVELIN -#endif - -#include "\z\ace\Addons\main\script_macros.hpp" - -#define ACE_JAV_FIREMODE_DIR 1 -#define ACE_JAV_FIREMODE_TOP 2 - - -// Javelin IGUI defines -#define __JavelinIGUI (uinamespace getVariable "ACE_RscOptics_javelin") - -// Custom controls -#define __JavelinIGUISeek (__JavelinIGUI displayCtrl 699000) -#define __JavelinIGUITop (__JavelinIGUI displayCtrl 699001) -#define __JavelinIGUIDir (__JavelinIGUI displayCtrl 699002) -#define __JavelinIGUINFOV (__JavelinIGUI displayCtrl 699003) - -// Constrains -#define __JavelinIGUITargetingConstrains (__JavelinIGUI displayCtrl 699100) -#define __JavelinIGUITargetingConstrainTop (__JavelinIGUI displayCtrl 699101) -#define __JavelinIGUITargetingConstrainBottom (__JavelinIGUI displayCtrl 699102) -#define __JavelinIGUITargetingConstrainLeft (__JavelinIGUI displayCtrl 699103) -#define __JavelinIGUITargetingConstrainRight (__JavelinIGUI displayCtrl 699104) - -// Targeting gate -#define __JavelinIGUITargetingGate (__JavelinIGUI displayCtrl 699200) -#define __JavelinIGUITargetingGateTL (__JavelinIGUI displayCtrl 699201) -#define __JavelinIGUITargetingGateTR (__JavelinIGUI displayCtrl 699202) -#define __JavelinIGUITargetingGateBL (__JavelinIGUI displayCtrl 699203) -#define __JavelinIGUITargetingGateBR (__JavelinIGUI displayCtrl 699204) - -// Rangefinder -#define __JavelinIGUIRangefinder (__JavelinIGUI displayCtrl 151) - -// Targeting lines -#define __JavelinIGUITargetingLines (__JavelinIGUI displayCtrl 699300) -#define __JavelinIGUITargetingLineH (__JavelinIGUI displayCtrl 699301) -#define __JavelinIGUITargetingLineV (__JavelinIGUI displayCtrl 699302) - -// Colors for controls -#define __ColorOrange [0.9255,0.5216,0.1216,1] -#define __ColorGreen [0.2941,0.8745,0.2157,1] -#define __ColorGray [0.2941,0.2941,0.2941,1] +#define COMPONENT wep_javelin +#include "\z\ace\Addons\main\script_mod.hpp" + +#ifdef DEBUG_ENABLED_WEP_JAVELIN + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_WEP_JAVELIN + #define DEBUG_SETTINGS DEBUG_SETTINGS_WEP_JAVELIN +#endif + +#include "\z\ace\Addons\main\script_macros.hpp" + +#define ACE_JAV_FIREMODE_DIR 1 +#define ACE_JAV_FIREMODE_TOP 2 + + +// Javelin IGUI defines +#define __JavelinIGUI (uinamespace getVariable "ACE_RscOptics_javelin") + +// Custom controls +#define __JavelinIGUISeek (__JavelinIGUI displayCtrl 699000) +#define __JavelinIGUITop (__JavelinIGUI displayCtrl 699001) +#define __JavelinIGUIDir (__JavelinIGUI displayCtrl 699002) +#define __JavelinIGUINFOV (__JavelinIGUI displayCtrl 699003) + +// Constrains +#define __JavelinIGUITargetingConstrains (__JavelinIGUI displayCtrl 699100) +#define __JavelinIGUITargetingConstrainTop (__JavelinIGUI displayCtrl 699101) +#define __JavelinIGUITargetingConstrainBottom (__JavelinIGUI displayCtrl 699102) +#define __JavelinIGUITargetingConstrainLeft (__JavelinIGUI displayCtrl 699103) +#define __JavelinIGUITargetingConstrainRight (__JavelinIGUI displayCtrl 699104) + +// Targeting gate +#define __JavelinIGUITargetingGate (__JavelinIGUI displayCtrl 699200) +#define __JavelinIGUITargetingGateTL (__JavelinIGUI displayCtrl 699201) +#define __JavelinIGUITargetingGateTR (__JavelinIGUI displayCtrl 699202) +#define __JavelinIGUITargetingGateBL (__JavelinIGUI displayCtrl 699203) +#define __JavelinIGUITargetingGateBR (__JavelinIGUI displayCtrl 699204) + +// Rangefinder +#define __JavelinIGUIRangefinder (__JavelinIGUI displayCtrl 151) + +// Targeting lines +#define __JavelinIGUITargetingLines (__JavelinIGUI displayCtrl 699300) +#define __JavelinIGUITargetingLineH (__JavelinIGUI displayCtrl 699301) +#define __JavelinIGUITargetingLineV (__JavelinIGUI displayCtrl 699302) + +// Colors for controls +#define __ColorOrange [0.9255,0.5216,0.1216,1] +#define __ColorGreen [0.2941,0.8745,0.2157,1] +#define __ColorGray [0.2941,0.2941,0.2941,1] #define __ColorNull [0,0,0,0] \ No newline at end of file diff --git a/addons/wep_javelin/stringtable.xml b/addons/wep_javelin/stringtable.xml index 4654be3b03..4068d6f0a6 100644 --- a/addons/wep_javelin/stringtable.xml +++ b/addons/wep_javelin/stringtable.xml @@ -1,24 +1,24 @@ - - - - - - Lock Target (Hold) - Lock Target (Hold) - Lock Target (Hold) - Lock Target (Hold) - Lock Target (Hold) - Lock Target (Hold) - Захватить цель (удерживать) - - - Cycle Fire Mode - Cycle Fire Mode - Cycle Fire Mode - Cycle Fire Mode - Cycle Fire Mode - Cycle Fire Mode - Переключение режимов огня - - - \ No newline at end of file + + + + + + Lock Target (Hold) + Lock Target (Hold) + Lock Target (Hold) + Lock Target (Hold) + Lock Target (Hold) + Lock Target (Hold) + Lock Target (Hold) + + + Cycle Fire Mode + Cycle Fire Mode + Cycle Fire Mode + Cycle Fire Mode + Cycle Fire Mode + Cycle Fire Mode + Cycle Fire Mode + + + diff --git a/addons/winddeflection/stringtable.xml b/addons/winddeflection/stringtable.xml index e3006d2ff1..b52100046f 100644 --- a/addons/winddeflection/stringtable.xml +++ b/addons/winddeflection/stringtable.xml @@ -1,38 +1,32 @@ - - - - - - - Wind Information - Informacje o wietrze - Información del viento - Ветер - - - Direction: %1 - Kierunek: %1 - Dirección: %1 - Направление: - - - Speed: %1 m/s - Prędkość: %1 - Velocidad: %1 m/s - Скорость: %1 м/с - - - Weather Information - Informacje o pogodzie - Información Meteorológica - Погода - - - Humidity: %1% - Wilgotność: %1 - Humedad: %1% - Влажность: %1% - - - - \ No newline at end of file + + + + + + Wind Information + Informacje o wietrze + Información del viento + + + Direction: %1 + Kierunek: %1 + Dirección: %1 + + + Speed: %1 m/s + Prędkość: %1 + Velocidad: %1 m/s + + + Weather Information + Informacje o pogodzie + Información Meteorológica + + + Humidity: %1% + Wilgotność: %1 + Humedad: %1% + + + + diff --git a/extensions/CMakeLists.txt b/extensions/CMakeLists.txt index a962f42ff3..f0e21e9207 100644 --- a/extensions/CMakeLists.txt +++ b/extensions/CMakeLists.txt @@ -1,31 +1,31 @@ -cmake_minimum_required (VERSION 3.0) -project (ACE) - -if (NOT CMAKE_BUILD_TYPE AND CMAKE_COMPILER_IS_GNUCXX) - message(STATUS "No build type selected, default to Debug") - set(CMAKE_BUILD_TYPE "Debug") -endif() - -option(USE_64BIT_BUILD "USE_64BIT_BUILD" OFF) -option(USE_STATIC_LINKING "USE_STATIC_LINKING" ON) - - -if(CMAKE_COMPILER_IS_GNUCXX) - SET(CMAKE_CXX_FLAGS "-std=c++11 -march=i686 -m32 -O2 -s -fPIC -fpermissive") - set(CMAKE_FIND_LIBRARY_SUFFIXES ".a") - set(CMAKE_SHARED_LINKER_FLAGS "-static-libgcc -static-libstdc++") -else() - set(CMAKE_CXX_FLAGS_DEBUG "/D _DEBUG /MTd /Zi /Ob0 /Od /RTC1") - set(CMAKE_CXX_FLAGS_MINSIZEREL "/MT /O1 /Ob1 /D NDEBUG") - set(CMAKE_CXX_FLAGS_RELEASE "/MT /O2 /Ob2 /D NDEBUG") - set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/MT /Zi /O2 /Ob1 /D NDEBUG") -endif() - -file(GLOB ACE_COMMON_SOURCES common/*.h common/*.hpp common/*.c common/*.cpp) -add_library(ace_common STATIC ${ACE_COMMON_SOURCES}) -include_directories(AFTER "common") - -# Add extensions to build here -add_subdirectory(fcs) - +cmake_minimum_required (VERSION 3.0) +project (ACE) + +if (NOT CMAKE_BUILD_TYPE AND CMAKE_COMPILER_IS_GNUCXX) + message(STATUS "No build type selected, default to Debug") + set(CMAKE_BUILD_TYPE "Debug") +endif() + +option(USE_64BIT_BUILD "USE_64BIT_BUILD" OFF) +option(USE_STATIC_LINKING "USE_STATIC_LINKING" ON) + + +if(CMAKE_COMPILER_IS_GNUCXX) + SET(CMAKE_CXX_FLAGS "-std=c++11 -march=i686 -m32 -O2 -s -fPIC -fpermissive") + set(CMAKE_FIND_LIBRARY_SUFFIXES ".a") + set(CMAKE_SHARED_LINKER_FLAGS "-static-libgcc -static-libstdc++") +else() + set(CMAKE_CXX_FLAGS_DEBUG "/D _DEBUG /MTd /Zi /Ob0 /Od /RTC1") + set(CMAKE_CXX_FLAGS_MINSIZEREL "/MT /O1 /Ob1 /D NDEBUG") + set(CMAKE_CXX_FLAGS_RELEASE "/MT /O2 /Ob2 /D NDEBUG") + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/MT /Zi /O2 /Ob1 /D NDEBUG") +endif() + +file(GLOB ACE_COMMON_SOURCES common/*.h common/*.hpp common/*.c common/*.cpp) +add_library(ace_common STATIC ${ACE_COMMON_SOURCES}) +include_directories(AFTER "common") + +# Add extensions to build here +add_subdirectory(fcs) + message("Build Type: ${CMAKE_BUILD_TYPE}") \ No newline at end of file diff --git a/extensions/build/.gitignore b/extensions/build/.gitignore index 86d0cb2726..44c5ea8fa7 100644 --- a/extensions/build/.gitignore +++ b/extensions/build/.gitignore @@ -1,4 +1,4 @@ -# Ignore everything in this directory -* -# Except this file +# Ignore everything in this directory +* +# Except this file !.gitignore \ No newline at end of file diff --git a/extensions/common/ace_common.cpp b/extensions/common/ace_common.cpp index 2f887450f2..6ccd690c3a 100644 --- a/extensions/common/ace_common.cpp +++ b/extensions/common/ace_common.cpp @@ -1,4 +1,4 @@ - -int test(int var) { - return var; + +int test(int var) { + return var; } \ No newline at end of file diff --git a/extensions/common/ace_common.h b/extensions/common/ace_common.h index d20e16d06b..4a8847b209 100644 --- a/extensions/common/ace_common.h +++ b/extensions/common/ace_common.h @@ -1,4 +1,4 @@ -#pragma once - -#include "targetver.h" - +#pragma once + +#include "targetver.h" + diff --git a/extensions/common/targetver.h b/extensions/common/targetver.h index 91fa5cc012..781012c18f 100644 --- a/extensions/common/targetver.h +++ b/extensions/common/targetver.h @@ -1,8 +1,8 @@ -#pragma once - -#ifdef _WIN32 - #define WIN32_LEAN_AND_MEAN - #include -#else - +#pragma once + +#ifdef _WIN32 + #define WIN32_LEAN_AND_MEAN + #include +#else + #endif \ No newline at end of file diff --git a/extensions/fcs/CMakeLists.txt b/extensions/fcs/CMakeLists.txt index db26d85b2a..2b24542566 100644 --- a/extensions/fcs/CMakeLists.txt +++ b/extensions/fcs/CMakeLists.txt @@ -1,11 +1,11 @@ -set(ACE_EXTENSION_NAME "ace_fcs") - -file(GLOB SOURCES *.h *.hpp *.c *.cpp) -add_library( ${ACE_EXTENSION_NAME} SHARED ${SOURCES}) -add_dependencies(${ACE_EXTENSION_NAME} ace_common) -SET_TARGET_PROPERTIES(${ACE_EXTENSION_NAME} PROPERTIES PREFIX "") - -if(CMAKE_COMPILER_IS_GNUCXX) - set_target_properties(${ACE_EXTENSION_NAME} PROPERTIES LINK_SEARCH_START_STATIC 1) - set_target_properties(${ACE_EXTENSION_NAME} PROPERTIES LINK_SEARCH_END_STATIC 1) +set(ACE_EXTENSION_NAME "ace_fcs") + +file(GLOB SOURCES *.h *.hpp *.c *.cpp) +add_library( ${ACE_EXTENSION_NAME} SHARED ${SOURCES}) +add_dependencies(${ACE_EXTENSION_NAME} ace_common) +SET_TARGET_PROPERTIES(${ACE_EXTENSION_NAME} PROPERTIES PREFIX "") + +if(CMAKE_COMPILER_IS_GNUCXX) + set_target_properties(${ACE_EXTENSION_NAME} PROPERTIES LINK_SEARCH_START_STATIC 1) + set_target_properties(${ACE_EXTENSION_NAME} PROPERTIES LINK_SEARCH_END_STATIC 1) endif() \ No newline at end of file From 17a552bb80af65e99e674793bfc15fb888c24757 Mon Sep 17 00:00:00 2001 From: EpMAK Date: Fri, 10 Apr 2015 19:55:57 +0300 Subject: [PATCH 099/214] Russian Translation Russian translation of stringtables: new lines + old lines fixed a bit, realistic names for armory are not yet filled. --- addons/attach/stringtable.xml | 20 +- addons/captives/stringtable.xml | 9 +- addons/common/stringtable.xml | 16 +- addons/dragging/stringtable.xml | 7 +- addons/explosives/stringtable.xml | 48 +- addons/fcs/stringtable.xml | 148 +- addons/goggles/stringtable.xml | 6 +- addons/grenades/stringtable.xml | 8 +- addons/hearing/stringtable.xml | 3 +- addons/interact_menu/stringtable.xml | 7 +- addons/interaction/stringtable.xml | 5 +- addons/inventory/stringtable.xml | 4 +- addons/kestrel/stringtable.xml | 4 +- addons/laser_selfdesignate/stringtable.xml | 4 +- addons/laserpointer/stringtable.xml | 10 +- addons/logistics_uavbattery/stringtable.xml | 10 +- addons/logistics_wirecutter/stringtable.xml | 10 +- addons/magazinerepack/stringtable.xml | 5 +- addons/magazines/stringtable.xml | 38 +- addons/maptools/stringtable.xml | 4 +- addons/markers/stringtable.xml | 4 +- addons/medical/stringtable.xml | 1856 ++++++------- addons/microdagr/stringtable.xml | 24 +- addons/nametags/stringtable.xml | 5 +- addons/optionsmenu/stringtable.xml | 19 +- addons/overheating/stringtable.xml | 4 +- addons/realisticnames/stringtable.xml | 2608 +++++++++---------- addons/reload/stringtable.xml | 10 +- addons/reloadlaunchers/stringtable.xml | 46 +- addons/respawn/stringtable.xml | 7 +- addons/switchunits/stringtable.xml | 5 +- addons/weaponselect/stringtable.xml | 6 +- addons/wep_javelin/stringtable.xml | 46 +- addons/winddeflection/stringtable.xml | 70 +- 34 files changed, 2601 insertions(+), 2475 deletions(-) diff --git a/addons/attach/stringtable.xml b/addons/attach/stringtable.xml index 27a0517f9a..839ac2e168 100644 --- a/addons/attach/stringtable.xml +++ b/addons/attach/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -48,7 +48,7 @@ Marcador IV Acoplado Strobo IR attaccata Infravörös jeladó hozzácsatolva - ИК строб присоединён + ИК-маяк присоединён IR Strobe Detached @@ -60,7 +60,7 @@ Marcador IV Separado Strobo IR staccata Infravörös jeladó lecsatolva - ИК строб отсоединён + ИК-маяк отсоединён IR Grenade Attached @@ -72,7 +72,7 @@ Granada IV Acoplada Granata IR attaccata Infravörös gránát hozzácsatolva - ИК граната присоединена + ИК-граната присоединена IR Grenade Detached @@ -84,7 +84,7 @@ Granada IV Separada Granata IR staccata Infravörös gránát lecsatolva - ИК граната отсоединена + ИК-граната отсоединена Chemlight Attached @@ -132,7 +132,7 @@ Marcador IV Strobo IR Infravörös jeladó - ИК строб + ИК-маяк IR Strobe allows you to signal your position through a pulsating beacon only visible with NVGs. @@ -144,7 +144,7 @@ O Marcador IV permite que você sinalize sua posição através de um pulso visível somente com equipamento de visão noturna. La Strobo IR è una luce stroboscopica che ti permette di segnalare la tua posizione grazie all'emissione di impulsi ad infrarossi visibili solo con i visori notturni. Az infravörös jeladóval megjelölheted a helyzetedet úgy, hogy annak pulzáló fénye csak éjjellátó készülékkel látható. - ИК строб позволяет сигнализировать свое местоположение через пульсирующий маяк, видимый только через ПНВ. + ИК-маяк позволяет сигнализировать о своём местоположении через пульсирующий свет, видимый только через ПНВ. Place @@ -156,6 +156,7 @@ Colocar Posiziona Elhelyez + Установить Cancel @@ -167,13 +168,14 @@ Cancelar Annulla Mégse + Отмена Attach Failed Échec du Attacher Befestigen fehlgeschlagen - Присоединить Ошибка + Соединение прервано Error al acoplar - + \ No newline at end of file diff --git a/addons/captives/stringtable.xml b/addons/captives/stringtable.xml index 897782747f..bc9cff1572 100644 --- a/addons/captives/stringtable.xml +++ b/addons/captives/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -134,26 +134,31 @@ Surrender Kapitulieren Rendirse + Сдаться Stop Surrendering Den Kampf erneut aufnehmen Dejar de rendirse + Остановить сдачу Only use on alive units Nur bei lebenden Einheiten verwendbar Utilizar solo en unidades vivas + Только для живых юнитов Only use on dismounted inf Nur bei abgesessener Infanterie verwendbar Utilizar solo en infanteria desmontada + Только для спеш. солдат Nothing under mouse Es wurde nichts ausgewählt Nada bajo el ratón + Объекты под мышью отсутствуют - + \ No newline at end of file diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index a5f5368cd0..d1e81e01a6 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -300,64 +300,78 @@ Aceptar Peticiones Accept Requests Anfrage annehmen + Подтвердить запросы Ignoruj prośby Rechazar Peticiones Decline Requests Anfrage ablehnen + Отклонить запросы Akceptuj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności. Acepta Peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones. Accept Requests send by other players. These can be requests to use / share equipment, perform certain actions. Anfragen anderer Spieler annehmen. Diese Anfragen können sich auf das Benutzen / Teilen von Equipment beziehen oder das Ausführen bestimmter Aktionen. + Подтвердить запросы, посланные другими игроками. Это могут быть просьбы о передаче снаряжения или выполнении определённых действий. Ignoruj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności. Rechazar Peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones. Decline Requests send by other players. These can be requests to use / share equipment, perform certain actions. Anfragen anderer Spieler ablehnen. Diese Anfragen können sich auf das Benutzen / Teilen von Equipment beziehen oder das Ausführen bestimmter Aktionen. + Отклонить запросы, посланные другими игроками. Это могут быть просьбы о передаче снаряжения или выполнении определённых действий. Feedback icons Feedback-Icons + Иконки состояний Select the position of or disable the feedback icons on your screen. These icons will show to provide extra feedback on your character status and actions performed. Wähle die Position der Feedback-Icons aus oder deaktiviere Sie. Die Feedback-Icons zeigen den Status deiner Einheit an, oder die ausgeführte Aktion. + Выберите положение или или отключите отображение иконок состояний на Вашем экране. Эти иконки предоставят дополнительную информацию о состоянии персонажа и выполняемых действиях. Progress bar location Position des Fortschrittsanzeige + Положение прогресс-бара Set the desired location of the progress bar on your screen. Wähle die Position der Fortschrittsanzeige. + Установите желаемое положение строки состояния на экране. Hint Background color Hinweis Hintergrundfarbe + Цвет фона всплывающих подсказок The color of the background from the ACE hints. Wähle die Hintergrundfarbe für ACE-Hinweise. + Цвет фона всплывающий подсказок АСЕ. Hint text font color Hinweis Textfarbe + Цвет шрифта всплывающих подсказок The color of the text font from the ACE hints. This color is the default color for all text displayed through the ACE Hint system, if the hint text has no other color specified. Wähle die Textfarbe für ACE-Hinweise. + Цвет шрифта текста всплывающих подсказок АСЕ. Этот цвет является стандартным для всего текста, транслирующегося через систему подсказок АСЕ, если не установлено другого цвета для текста подсказок. Banana Banane + Банан A banana is an edible fruit, botanically a berry, produced by several kinds of large herbaceous flowering plants in the genus Musa. Die Bananen (Musa) sind eine Pflanzengattung in der Familie der Bananengewächse (Musaceae) innerhalb der Einkeimblättrigen Pflanzen (Monokotyledonen). + Банан - это съедобный фрукт, ягода с ботанической точки зрения, произрастающий на нескольких видах травянистых растениях рода Банан (Musa). \ No newline at end of file diff --git a/addons/dragging/stringtable.xml b/addons/dragging/stringtable.xml index 9193d2712e..3199dd7c20 100644 --- a/addons/dragging/stringtable.xml +++ b/addons/dragging/stringtable.xml @@ -1,5 +1,5 @@ - - + + @@ -40,6 +40,7 @@ Não é possível carregar o item devido a seu peso Non è possibile trascinare l'oggetto a causa del suo peso Túl nehéz ahhoz, hogy elhúzd --> + Слишком тяжело Carry @@ -54,4 +55,4 @@ Нести - + \ No newline at end of file diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml index 1d010a0a7e..834101f9c7 100644 --- a/addons/explosives/stringtable.xml +++ b/addons/explosives/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -48,7 +48,7 @@ Codice dell'esplosivo : %1 Robbanóanyag kódja: %1 Código do explosivo: %1 - Взрывная код: %1 + Код подрыва: %1 Place @@ -60,7 +60,7 @@ Piazza Elhelyezés Colocar - Положить + Установить Cancel @@ -132,7 +132,7 @@ Usato per l'attivazione a distanza degli esplosivi Robbanóanyagok távoli robbantásához Usado para acionar explosivos remotamente - Используется для удаленного запуска взрывчатку + Используется для удаленной детонации СВУ M57 Firing Device @@ -156,7 +156,7 @@ Usato per l'attivazione a distanza degli esplosivi Robbanóanyagok távoli robbantásához Usado para acionar explosivos remotamente - Используется для удаленного запуска взрывчатку + Используется для удаленной детонации зарядов M26 Firing Device @@ -192,7 +192,7 @@ Kit E.O.D. Hatástalanító felszerelés Kit de desarme - Разминирование комплект + Комплект разминирования Allows defusing of explosives @@ -204,7 +204,7 @@ Consente la disattivazione degli ordigni esplosivi Robbanóanyagok hatástalanításához Permite o desarme de explosivos - Allows defusing of explosives + Позволяет обезвреживать ВУ Add to Speed Dial @@ -228,7 +228,7 @@ Libera Törlés Limpar - Pассеиваться + Очистить Dial @@ -252,7 +252,7 @@ Sopra Fel Cima - Поднять + Вызов Down @@ -264,7 +264,7 @@ Sotto Le Baixo - Опустить + Сброс Cancel @@ -288,7 +288,7 @@ Menù di detonazione Robbantás menü Menu de detonação - Меню Подрыв + Меню подрыва Place Menu @@ -300,7 +300,7 @@ Menù di collocamento Lerakás menü Menu de posicionamento - Меню Установить + Меню детонации Defuse @@ -336,7 +336,7 @@ Cronometro Időzített Timer - Временной + Таймер Time: %1m %2s @@ -348,7 +348,7 @@ Tempo : %1m %2s Idő: %1m %2s Tempo: %1m %2s - Tемп: %1m %2c + Время: %1m %2c Set Time @@ -360,7 +360,7 @@ Modifica il conto alla rovescia Idő állítása Configurar Tempo - Xронометр + Установить время Select a Trigger @@ -372,7 +372,7 @@ Seleziona un Attivatore Detonátor kiválasztása Selecionar um Gatilho - Выберите + Выберите детонатор Select @@ -384,7 +384,7 @@ Seleziona Kiválasztás Selecionar - Выбрать защелка + Выбрать Pressure Plate @@ -408,7 +408,7 @@ Filo a Inciampo Botlódrót Linha de tração - Натяжной + Растяжка IR Sensor @@ -420,7 +420,7 @@ Sensore IR IR szenzor Sensor IV - ИК + ИК сенсор No triggers available for %1 @@ -432,7 +432,7 @@ Nessun attivatore disponibile per %1 Nincs detonátor a %1 Nenhum gatilho disponível para %1 - Нет защелка доступны для %1 + Нет доступных взрывателей для %1 IR Sensor (Side Attack) @@ -444,7 +444,7 @@ Sensore IR (Attacco laterale) IR Sensor (Side Attack) Sensor infravermelho (ataque lateral) - ИК (боковая атака) + ИК (детонация вбок) Magnetic Influence Sensor (Bottom Attack) @@ -456,7 +456,7 @@ Sensore Magnetico di Prossimità (Attacco inferiore) Mágneses (Bottom Attack) Influência magnética (ataque inferior) - Магнитный (дно атака) + Магнитный (детонация вверх) No explosives on trigger. @@ -468,7 +468,7 @@ Nincs robbanóanyag a detonátorhoz. Brak ładunków na zapalnik. Nenhum explosivo no gatilho. - Нет взрывчатки на курок. + Нет доступных ВУ для взрывателя. Dead Man's Switch @@ -478,7 +478,7 @@ Czuwak Detonador de hombre muerto Dead Man's Switch - Кнопка мертвеца + Ловушка мертвеца Used to remotely trigger explosives when released. diff --git a/addons/fcs/stringtable.xml b/addons/fcs/stringtable.xml index 154d874f73..0911bbdb57 100644 --- a/addons/fcs/stringtable.xml +++ b/addons/fcs/stringtable.xml @@ -1,81 +1,81 @@  - + - - - Lase Target / Measure Distance - Ziel anlasern / Entfernung Messen - Télémétrer la cible - Naświetl cel / Zmierz odległość - Označit cíl / Změřit vzdálenost - Iluminar objetivo / Medir distancia - - Подсветить цель / Измерить расстояние - - - Zeroed To - Haltepunkt - Fijado a - Wyzerowany na - Nastaveno na - Zéroté à - Зероинг - Nullázás - Fixado em - Azzeramento a - - - Adjust FCS Range (Up) - Entfernung des FLS erhöhen - Zwiększ zasięg FCS - Ajustar distancia del FCS (arriba) - Nastavit FCS Náměr (nahoru) - Augmenter la distance du SCT - FCS tartomány állítása (Fel) - Ajustar distância do FCS (Acima) - Aumentare la distanza dell'FCS - Диапазон СУО (Выше) - - - Adjust FCS Range (Down) - Entfernung des FLS verringern - Zmniejsz zasięg FCS - Ajustar distancia del FCS (abajo) - Nastavit FCS Náměr (dolů) - Réduire la distance du SCT - FCS tartomány állítása (Le) - Ajustar distância do FCS (Abaixo) - Ridurre la distanza dell'FCS - Диапазон СУО (Ниже) - - - Reset FCS - FLS zurücksetzen - Reiniciar FCS - Réinitialiser le SCT - Resetuj FCS - Resetovat FCS - FCS visszaállítása - Reiniciar FCS - Azzeramento dell'FCS - Обнулить СУО - - - FCS has been reset. - FLS wurde zurückgesetzt. - FCS reiniciado - SCT réinitialisé. - FCS został zresetowany. - FCS byl resetován. - Az FCS visszaállítva - FCS reiniciado. - L'FCS è stato azzerato - СУО обнулен - - - + Подсветить цель / Замерить расстояние + + + Zeroed To + Haltepunkt + Fijado a + Wyzerowany na + Nastaveno na + Zéroté à + Выставлено на + Nullázás + Fixado em + Azzeramento a + + + Adjust FCS Range (Up) + Entfernung des FLS erhöhen + Zwiększ zasięg FCS + Ajustar distancia del FCS (arriba) + Nastavit FCS Náměr (nahoru) + Augmenter la distance du SCT + FCS tartomány állítása (Fel) + Ajustar distância do FCS (Acima) + Aumentare la distanza dell'FCS + Диапазон СУО (Выше) + + + Adjust FCS Range (Down) + Entfernung des FLS verringern + Zmniejsz zasięg FCS + Ajustar distancia del FCS (abajo) + Nastavit FCS Náměr (dolů) + Réduire la distance du SCT + FCS tartomány állítása (Le) + Ajustar distância do FCS (Abaixo) + Ridurre la distanza dell'FCS + Диапазон СУО (Ниже) + + + Reset FCS + FLS zurücksetzen + Reiniciar FCS + Réinitialiser le SCT + Resetuj FCS + Resetovat FCS + FCS visszaállítása + Reiniciar FCS + Azzeramento dell'FCS + Обнулить СУО + + + FCS has been reset. + FLS wurde zurückgesetzt. + FCS reiniciado + SCT réinitialisé. + FCS został zresetowany. + FCS byl resetován. + Az FCS visszaállítva + FCS reiniciado. + L'FCS è stato azzerato + СУО обнулен. + + + \ No newline at end of file diff --git a/addons/goggles/stringtable.xml b/addons/goggles/stringtable.xml index 1756442176..9b2e6fba12 100644 --- a/addons/goggles/stringtable.xml +++ b/addons/goggles/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -8,7 +8,7 @@ Mostrar efectos de las gafas en tercera persona Zobrazit účinky brýlí v třetí osobě Effets de lunettes à la 3ème personne - Отображать эффект очков в третьем лице + Отображать эффект очков от третьего лица Szemüveg effekt mutatása külső nézetből Włącz efekty gogli w trzeciej osobie Mostrar efeitos de óculos em Terceira Pessoa @@ -27,4 +27,4 @@ Pulisci gli occhiali - + \ No newline at end of file diff --git a/addons/grenades/stringtable.xml b/addons/grenades/stringtable.xml index 1129d44271..803aa0a220 100644 --- a/addons/grenades/stringtable.xml +++ b/addons/grenades/stringtable.xml @@ -1,5 +1,5 @@ - - + + @@ -93,7 +93,7 @@ Les grenades incapacitantes servent à désorienter ou distraire une menace pendant quelques secondes. Granat ogłusza, nie zabijając przeciwnika. Detonacja daje efekt oślepiającego błysku i głośnego huku. Omračující granát je taktická nesmrtící zbraň používaná při záchraně rukojmí a zvládání davu. - Граната XM84 (M84) - не летального действия, и предназначена для отвлечения и временного вывода из строя, либо дезориентации противника. Основное использование нашла при освобождении заложников, захвате преступников и террористов, а также проведении диверсионных миссий. + XM84 (M84) - граната нелетального действия, и предназначена для отвлечения и временного вывода из строя, либо дезориентации противника. Основное использование нашла при освобождении заложников, захвате преступников и террористов, а также проведении диверсионных миссий. Eldobás után felrobban és éles hang, valamint fényhatással zavarja össze a környezetében tartózkodókat. Anche conosciuta come flashbang. Causa accecamento immediato, sensazioni di sposatezza, mancanza d'equilibrio e disturbi al timpano. Um tipo de granada não-letal destinado a confundir, desorientar e distrair uma potencial ameaça. @@ -243,4 +243,4 @@ M127A1 (Amarilla) - + \ No newline at end of file diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index f042128301..ba4d17e112 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -102,6 +102,7 @@ Disable ear ringing Desactivar zumbido de oídos Knalltrauma deaktivieren + Отключить эффект баротравмы \ No newline at end of file diff --git a/addons/interact_menu/stringtable.xml b/addons/interact_menu/stringtable.xml index b3de5efddf..bbb17efd87 100644 --- a/addons/interact_menu/stringtable.xml +++ b/addons/interact_menu/stringtable.xml @@ -1,26 +1,31 @@  - + Always display cursor for self interaction Immer den Cursor für Selbst-Interaktionen anzeigen. + Всегда показывать курсор для взаимодействия с собой Interact Key Interaktionstaste + Клавиша взаимодействия Self Interaction Key Selbst-Interaktionstaste + Клавиша взаимодействия (с собой) Self Actions Selbst-Interaktion + Действия с собой Vehicle Actions Fahrzeug-Interaktion + Действия на транспорте \ No newline at end of file diff --git a/addons/interaction/stringtable.xml b/addons/interaction/stringtable.xml index e85d0d3b47..8016079b90 100644 --- a/addons/interaction/stringtable.xml +++ b/addons/interaction/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -616,7 +616,7 @@ Modyfikator Modifier la touche Tecla modificadora - клавиша-модификатор + Клавиша-модификатор Tecla Modificadora Modifica Tasto Módosító billentyű @@ -664,6 +664,7 @@ Passengers Passagiere + Пассажиры \ No newline at end of file diff --git a/addons/inventory/stringtable.xml b/addons/inventory/stringtable.xml index f93e0d9627..75f15e3720 100644 --- a/addons/inventory/stringtable.xml +++ b/addons/inventory/stringtable.xml @@ -1,14 +1,16 @@  - + Make Inventory Display Bigger Die Anzeige des Inventar vergrößern. + Сделать окно инвентаря больше Normally inventory display is scaled by UI size. This allows scaling the Inventory UI size up, but doesn't increase font size allowing more rows displayed. Normalerweise wird die Größe des Inventars mit der Größe der UI skaliert. Diese Einstellung allerdings vergrößert das Inventar bei gleichbleibender Schriftgröße, so dass mehr Einträge angzeigt werden können. + Обычно, окно инвентаря зависит от размеров пользовательского интерфейса. Эта настройка позволяет увеличить размер окна инвентаря в пользовательском интерфейсе, не увеличивая размера шрифтов, так что отображется большее количество строк. \ No newline at end of file diff --git a/addons/kestrel/stringtable.xml b/addons/kestrel/stringtable.xml index 5f54fd6489..baae118891 100644 --- a/addons/kestrel/stringtable.xml +++ b/addons/kestrel/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -34,7 +34,7 @@ Monitoraggio Balistico Attivo Applied Ballistics Meter Medidor Balístico Ativo - метеостанция + Метеостанция Open Kestrel diff --git a/addons/laser_selfdesignate/stringtable.xml b/addons/laser_selfdesignate/stringtable.xml index 03d28814ec..ca5ff1e687 100644 --- a/addons/laser_selfdesignate/stringtable.xml +++ b/addons/laser_selfdesignate/stringtable.xml @@ -1,14 +1,16 @@  - + Laser<br/>Designator On Lasermarkierer<br/>an + ЛЦУ<br/>ВКЛ Laser<br/>Designator Off Lasermarkierer<br/>aus + ЛЦУ<br/>ВЫКЛ \ No newline at end of file diff --git a/addons/laserpointer/stringtable.xml b/addons/laserpointer/stringtable.xml index 87b36618a6..279fdeb5e8 100644 --- a/addons/laserpointer/stringtable.xml +++ b/addons/laserpointer/stringtable.xml @@ -1,21 +1,22 @@  + - Laser Pointer (red) Laserpointer (rot) + Лазерный прицел (красный) Laser Pointer (green) Laserpointer (grün) + Лазерный прицел (зелёный) - Emits visible light. Strahlt sichtbares Licht aus. + Испускает узкий пучок видимого света. - <t color='#9cf953'>Use: </t>Turn Laser ON/OFF <t color='#9cf953'>Použití: </t>Zapnout/vypnout laser @@ -27,6 +28,5 @@ <t color='#9cf953'>Использовать: </t>вкл/выкл лазер <t color='#9cf953'>Usar: </t>encender/apagar láser - - + \ No newline at end of file diff --git a/addons/logistics_uavbattery/stringtable.xml b/addons/logistics_uavbattery/stringtable.xml index fbd9004290..3a8d958709 100644 --- a/addons/logistics_uavbattery/stringtable.xml +++ b/addons/logistics_uavbattery/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -24,7 +24,7 @@ Potřebuješ UAV-Baterii Você precisa de uma Bateria para VANT Hai bisogno di una Batteria UAV - Требуется аккумулятор БПЛА + Требуется аккумулятор для БПЛА Recharge @@ -36,7 +36,7 @@ Dobít Recarregar Ricarica - Подзарядить + Зарядить UAV Battery @@ -60,7 +60,7 @@ Používané k dobíjení UAV Usada para reabastecer VANT Usata per ricaricare la Batteria dell'UAV - Используется для подзарядки БПЛА + Используется для зарядки БПЛА Recharging ... @@ -72,7 +72,7 @@ Dobíjení ... Recarregando ... In ricarica ... - Подзаряжаем ... + Заряжается ... \ No newline at end of file diff --git a/addons/logistics_wirecutter/stringtable.xml b/addons/logistics_wirecutter/stringtable.xml index f23af6b1e5..4e08ec33e8 100644 --- a/addons/logistics_wirecutter/stringtable.xml +++ b/addons/logistics_wirecutter/stringtable.xml @@ -1,15 +1,17 @@  - + Wirecutter Drahtschneider Wirecutter + Клещи-кусачки Wirecutter Schneidet Draht. + Позволяют быстро перекусывать сеточные конструкции. Cut Fence @@ -21,7 +23,7 @@ Cortar Cerca Taglia Drótkerítés átvágása - Вырезать забор + Разрезать забор Cutting Fences / Wires ... @@ -33,7 +35,7 @@ Cortando Cerca / Arame ... Sto tagliando ... Drótok elvágása ... - Вырезаем забор / провода ... + Разрезаем забор / провода ... Fence cut @@ -45,7 +47,7 @@ Cerca cortada Fatto! Drótkerítés átvágva - Забор вырезан + Забор разрезан \ No newline at end of file diff --git a/addons/magazinerepack/stringtable.xml b/addons/magazinerepack/stringtable.xml index d8fd5ca177..8aa586b916 100644 --- a/addons/magazinerepack/stringtable.xml +++ b/addons/magazinerepack/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -78,16 +78,19 @@ Repacking Finished Wiederverpacken Fertig Reembalaje Finalizado + Перепаковка завершена Repacking Interrupted Umpacken Unterbrochen Reempaque Interrupted + Перепаковка прервана %1 Full and %2 Partial %1 Vollständigen und %2 Teilweisen %1 Total y %2 Parcial + %1 полных и %2 неполных \ No newline at end of file diff --git a/addons/magazines/stringtable.xml b/addons/magazines/stringtable.xml index c8f652fa39..db637f8064 100644 --- a/addons/magazines/stringtable.xml +++ b/addons/magazines/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -13,7 +13,7 @@ 6.5mm 30ks Svítící IR-DIM Zásobník Carregador de 30 projéteis traçantes IR-DIM de 6,5mm Caricatore 6.5mm 30Rnd Traccianti IR-DIM - Магазин из 30-и 6.5 мм трассирующих под ПНВ + Магазин из 30-ти 6.5 мм трассирующих под ПНВ 6.5mm IR-DIM @@ -25,7 +25,7 @@ 6.5mm IR-DIM 6,5mm IR-DIM 6.5 IR-DIM - 6.5 мм трассирущие под ПНВ + 6.5 мм ИК-трассирующие Caliber: 6.5x39 mm Tracer IR-DIM<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL @@ -49,7 +49,7 @@ 6.5mm 30ks SD Zásobník Carregador de 30 projéteis SD de 6,5mm Caricatore 6.5mm 30Rnd Sil. - Магазин из 30-и 6.5 мм дозвуковых + Магазин из 30-ти 6.5 мм дозвуковых 6.5mm SD @@ -85,7 +85,7 @@ 6.5mm 30ks AP Zásobník Carregador de 30 projéteis AP de 6,5mm Caricatore 6.5mm 30Rnd AP - Магазин из 30-и 6.5 мм бронебойных + Магазин из 30-ти 6.5 мм бронебойных 6.5mm AP @@ -122,7 +122,7 @@ 6.5mm 30ks Svítící IR-DIM Zásobník Carregador de 30 projéteis traçantes IR-DIM de 6,5mm Caricatore 6.5mm 30Rnd Traccianti IR-DIM - Магазин из 30-и 6.5 мм трассирующих под ПНВ + Магазин из 30-ти 6.5 мм трассирующих под ПНВ 6.5mm IR-DIM @@ -134,7 +134,7 @@ 6.5mm IR-DIM 6,5mm IR-DIM 6.5mm IR-DIM - 6.5 мм трассирущие под ПНВ + 6.5 мм ИК-трассирующие Caliber: 6.5x39 mm Tracer IR-DIM<br />Rounds: 30<br />Used in: Katiba @@ -158,7 +158,7 @@ 6.5mm 30ks SD Zásobník Carregador de 30 projéteis SD de 6,5mm Caricatore 6.5mm 30Rnd Sil. - Магазин из 30-и 6.5 мм дозвуковых + Магазин из 30-ти 6.5 мм дозвуковых 6.5mm SD @@ -194,7 +194,7 @@ 6.5mm 30ks AP Zásobník Carregador de 30 projéteis AP de 6,5mm Caricatore 6.5mm 30Rnd AP - Магазин из 30-и 6.5 мм бронебойных + Магазин из 30-ти 6.5 мм бронебойных 6.5mm AP @@ -231,7 +231,7 @@ 5.56mm 30ks Svítící IR-DIM Zásobník Carregador de 30 projéteis traçantes IR-DIM de 5,56mm Caricatore 5.56mm 30rnd Traccianti IR-DIM - Магазин из 30-и 5.56 мм трассирующих под ПНВ + Магазин из 30-ти 5.56 мм трассирующих под ПНВ 5.56mm IR-DIM @@ -243,7 +243,7 @@ 5.56mm IR-DIM 5,56mm IR-DIM 5.56mm IR-DIM - 5.56 мм трассирущие под ПНВ + 5.56 мм ИК-трассирующие Caliber: 5.56x45 mm Tracer IR-DIM<br />Rounds: 30<br />Used in: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR @@ -267,7 +267,7 @@ 5.56mm 30ks SD Zásobník Carregador de 30 projéteis SD de 5,56mm Caricatore 5.56mm 30Rnd Sil. - Магазин из 30-и 5.56 мм дозвуковых + Магазин из 30-ти 5.56 мм дозвуковых 5.56mm SD @@ -303,7 +303,7 @@ 5.56mm 30ks AP Zásobník Carregador de 30 projéteis AP de 5,56mm Caricatore 5.56mm 30Rnd AP - Магазин из 30-и 5.56 мм бронебойных + Магазин из 30-ти 5.56 мм бронебойных 5.56mm AP @@ -340,7 +340,7 @@ 7.62mm 20ks Svítící Zásobník Carregador de 20 projéteis traçantes de 7,62mm Caricatore 7.62mm 20Rnd Traccianti - Магазин из 20-и 7.62 мм трассирующих + Магазин из 20-ти 7.62 мм трассирующих 7.62mm Tracer @@ -376,7 +376,7 @@ 7.62mm 20ks Svítící IR-DIM Zásobník Carregador de 20 projéteis IR-DIM de 7,62mm Caricatore 7.62mm 20rnd Traccianti IR-DIM - Магазин из 20-и 7.62 мм трассирующих под ПНВ + Магазин из 20-ти 7.62 мм трассирующих под ПНВ 7.62mm IR-DIM @@ -388,7 +388,7 @@ 7.62mm IR-DIM 7,62mm IR-DIM 7.62mm IR-DIM - 7.62 мм трассирущие под ПНВ + 7.62 мм ИК-трассирующие Caliber: 7.62x51 mm Tracer IR-DIM<br />Rounds: 20<br />Used in: Mk18 ABR @@ -412,7 +412,7 @@ 7.62mm 20ks SD Zásobník Carregador de 20 projéteis SD de 7,62mm Caricatore 7.62mm 20Rnd Sil. - Магазин из 20-и 7.62 мм дозвуковых + Магазин из 20-ти 7.62 мм дозвуковых 7.62mm SD @@ -448,7 +448,7 @@ 7.62mm 20ks AP Zásobník Carregador de 20 projéteis AP de 7,62mm Caricatore 7.62mm 20Rnd AP - Магазин из 20-и 7.62 мм бронебойных + Магазин из 20-ти 7.62 мм бронебойных 7.62mm AP @@ -487,4 +487,4 @@ Calibro: 7.62x51mm M118LR<br />Munizioni:20<br />In uso su: M14 - + \ No newline at end of file diff --git a/addons/maptools/stringtable.xml b/addons/maptools/stringtable.xml index 5dd4578976..2e5fee49ab 100644 --- a/addons/maptools/stringtable.xml +++ b/addons/maptools/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -142,7 +142,7 @@ Kierunek: %1° Dirección: %1° Irány: %1 - Направление:%1 + Направление: %1° \ No newline at end of file diff --git a/addons/markers/stringtable.xml b/addons/markers/stringtable.xml index ea6d72990a..65da73a026 100644 --- a/addons/markers/stringtable.xml +++ b/addons/markers/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -9,7 +9,7 @@ Směr: %1° Kierunek: %1° Dirección: %1° - Направление: %1 + Направление: %1° \ No newline at end of file diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index a5dfdbba49..1d2b166e3c 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -1,974 +1,1010 @@  - + - - - Inject Atropine - Atropin - - - Inject Epinephrine - Epinephrine injizieren - Inyectar Epinefrina - Wtrzyknij adrenalinę - Aplikovat Adrenalin - Ввести андреналил - Adrénaline - Adrenalin - Injetar Epinefrina - Inietta Epinefrina - - - Inject Morphine - Morphin injizieren - Inyectar Morfina - Wstrzyknij morfinę - Aplikovat Morfin - Ввести морфин - Morphine - Morfium - Injetar Morfina - Inietta Morfina - - - Transfuse Blood - Bluttransfusion - Transfundir sangre - Przetocz krew - Transfúze krve - Перелить кровь - Transfusion - Infúzió - Transfundir Sangue - Effettua Trasfusione - - - Transfuse Plasma - Plasmatransfusion - - - Transfuse Saline - Salzlösungtransfusion - - - Apply Tourniquet - Aderpresse anwenden - - - Bandage - Verbinden - Venda - Bandaż - Obvázat - Pansement - Benda - Kötözés - Atadura - Перевязать - - - Bandage Head - Kopf verbinden - Vendar la cabeza - Bandażuj głowę - Obvázat hlavu - Перевязать голову - Pansement Tête - Fej kötözése - Atar Cabeça - Benda la testa - - - Bandage Torso - Torso verbinden - Vendar el torso - Bandażuj tors - Obvázat hruď - Перевязать торс - Pansement Torse - Felsőtest kötözése - Atar Tronco - Benda il torso - - - Bandage Left Arm - Arm links verbinden - Vendar el brazo izquierdo - Bandażuj lewe ramię - Obvázat levou ruku - Перевязать левую руку - Pansement Bras Gauche - Bal kar kötözése - Atar Braço Esquerdo - Benda il braccio sinistro - - - Bandage Right Arm - Arm rechts verbinden - Vendar el brazo derecho - Bandażuj prawe ramię - Obvázat pravou ruku - Перевязать правую руку - Pansement Bras Droit - Jobb kar kötözése - Atar Braço Direito - Benda il braccio destro - - - Bandage Left Leg - Bein links verbinden - Vendar la pierna izquierda - Bandażuj lewą nogę - Obvázat levou nohu - Перевязать левую ногу - Pansement Jambe Gauche - Bal láb kötözése - Atar Perna Esquerda - Benda la gamba sinistra - - - Bandage Right Leg - Bein rechts verbinden - Vendar la pierna derecha - Bandażuj prawą nogę - Obvázat pravou nohu - Перевязать правую ногу - Pansement Jambe Droite - Jobb láb kötözése - Atar Perna Direita - Benda la gamba destra - - - Injecting Morphine ... - Morphin injizieren ... - Inyectando Morfina ... - Wstrzykiwanie morfiny ... - Aplikuju Morfin ... - Введение морфина... - Injection de Morphine... - Morfium beadása... - Injetando Morfina ... - Inietto la morfina ... - - - Injecting Epinephrine ... - Epinephrin injizieren ... - Inyectando Epinefrina ... - Wstrzykiwanie adrenaliny ... - Aplikuju Adrenalin ... - Введение андреналина - Injection d'Adrénaline ... - Adrenalin beadása... - Injetando Epinefrina ... - Inietto l'epinefrina ... - - - Injecting Atropine ... - Atropin injizieren ... - - - Transfusing Blood ... - Bluttransfusion ... - Realizando transfusión ... - Przetaczanie krwi ... - Probíhá transfúze krve ... - Переливание крови... - Transfusion Sanguine ... - Infúzió... - Transfundindo Sangue ... - Effettuo la trasfusione ... - - - Transfusing Saline ... - Sallösungtransfusion ... - - - Transfusing Plasma ... - Plasmatransfusion ... - - - Bandaging ... - Verbinden ... - Vendando ... - Bandażowanie ... - Obvazuji ... - Pansement ... - Sto applicando la benda ... - Bekötözés... - Atando ... - Перевязывание.... - - - Applying Tourniquet ... - Aderpresse ... - - - Medical - Zdravotní - Médical - Sanitäter - Medico - Medyczne - Médico - Медик - Médico - - - Field Dressing - - - Packing Bandage - - - Elastic Bandage - - - QuikClot - - - Check Pulse - Puls überprüfen - - - Check Blood Pressure - Blutdruck messen - - - Triage Card - Triage Karte - - - Tourniquet - Tourniquet - - - Remove Tourniquet - Entferne Tourniquet - - - Give Blood IV (1000ml) - - - Give Blood IV (500ml) - - - Give Blood IV (250ml) - - - Give Plasma IV (1000ml) - - - Give Plasma IV (500ml) - - - Give Plasma IV (250ml) - - - Give Saline IV (1000ml) - - - Give Saline IV (500ml) - - - Give Saline IV (250ml) - - - Minor - Gering - - - Delayed - - - Immediate - - - Deceased - - - None - - - Normal breathing - Дыхание в норме - Respiración normal - Respiration Normale - Normalny oddech - - - No breathing - Дыхания нет - No respira - Apnée - Brak oddechu - - - Difficult breathing - Дыхание затруднено - Dificultad para respirar - Difficultée Respiratoire - Trudności z oddychaniem - - - Almost no breathing - Дыхания почти нет - Casi sin respirar - Respiration Faible - Prawie brak oddechu - - - Bleeding - Кровотечение - Sangrando - Seignement - Krwawienie zewnętrzne - - - In Pain - Испытывает боль - Con Dolor - A De La Douleur - W bólu - - - Lost a lot of Blood - Большая кровопотеря - Mucha Sangre perdida - A Perdu Bcp de Sang - Stracił dużo krwi - - - Tourniquet [CAT] - Жгут - Torniquete [CAT] - Garot [CAT] - Opaska uciskowa [CAT] - - - Receiving IV [%1ml] - - - - Bandage (Basic) - Повязка (обычная) - Vendaje (Básico) - Bandage (Standard) - Bandaż (jałowy) - - - Used to cover a wound - Для перевязки ран - Utilizado para cubrir una herida - Utilisé Pour Couvrir Une Blessure - Używany w celu przykrycia i ochrony miejsca zranienia - - - A dressing, that is a particular material used to cover a wound, which is applied over the wound + + + Inject Atropine + Atropin + Ввести атропин + + + Inject Epinephrine + Epinephrine injizieren + Inyectar Epinefrina + Wtrzyknij adrenalinę + Aplikovat Adrenalin + Ввести андреналил + Adrénaline + Adrenalin + Injetar Epinefrina + Inietta Epinefrina + + + Inject Morphine + Morphin injizieren + Inyectar Morfina + Wstrzyknij morfinę + Aplikovat Morfin + Ввести морфин + Morphine + Morfium + Injetar Morfina + Inietta Morfina + + + Transfuse Blood + Bluttransfusion + Transfundir sangre + Przetocz krew + Transfúze krve + Перелить кровь + Transfusion + Infúzió + Transfundir Sangue + Effettua Trasfusione + + + Transfuse Plasma + Plasmatransfusion + Перелить плазму + + + Transfuse Saline + Salzlösungtransfusion + Влить физраствор + + + Apply Tourniquet + Aderpresse anwenden + Наложить жгут + + + Bandage + Verbinden + Venda + Bandaż + Obvázat + Pansement + Benda + Kötözés + Atadura + Перевязать + + + Bandage Head + Kopf verbinden + Vendar la cabeza + Bandażuj głowę + Obvázat hlavu + Перевязать голову + Pansement Tête + Fej kötözése + Atar Cabeça + Benda la testa + + + Bandage Torso + Torso verbinden + Vendar el torso + Bandażuj tors + Obvázat hruď + Перевязать торс + Pansement Torse + Felsőtest kötözése + Atar Tronco + Benda il torso + + + Bandage Left Arm + Arm links verbinden + Vendar el brazo izquierdo + Bandażuj lewe ramię + Obvázat levou ruku + Перевязать левую руку + Pansement Bras Gauche + Bal kar kötözése + Atar Braço Esquerdo + Benda il braccio sinistro + + + Bandage Right Arm + Arm rechts verbinden + Vendar el brazo derecho + Bandażuj prawe ramię + Obvázat pravou ruku + Перевязать правую руку + Pansement Bras Droit + Jobb kar kötözése + Atar Braço Direito + Benda il braccio destro + + + Bandage Left Leg + Bein links verbinden + Vendar la pierna izquierda + Bandażuj lewą nogę + Obvázat levou nohu + Перевязать левую ногу + Pansement Jambe Gauche + Bal láb kötözése + Atar Perna Esquerda + Benda la gamba sinistra + + + Bandage Right Leg + Bein rechts verbinden + Vendar la pierna derecha + Bandażuj prawą nogę + Obvázat pravou nohu + Перевязать правую ногу + Pansement Jambe Droite + Jobb láb kötözése + Atar Perna Direita + Benda la gamba destra + + + Injecting Morphine ... + Morphin injizieren ... + Inyectando Morfina ... + Wstrzykiwanie morfiny ... + Aplikuju Morfin ... + Введение морфина... + Injection de Morphine... + Morfium beadása... + Injetando Morfina ... + Inietto la morfina ... + + + Injecting Epinephrine ... + Epinephrin injizieren ... + Inyectando Epinefrina ... + Wstrzykiwanie adrenaliny ... + Aplikuju Adrenalin ... + Введение андреналина ... + Injection d'Adrénaline ... + Adrenalin beadása... + Injetando Epinefrina ... + Inietto l'epinefrina ... + + + Injecting Atropine ... + Atropin injizieren ... + Введение атропина ... + + + Transfusing Blood ... + Bluttransfusion ... + Realizando transfusión ... + Przetaczanie krwi ... + Probíhá transfúze krve ... + Переливание крови... + Transfusion Sanguine ... + Infúzió... + Transfundindo Sangue ... + Effettuo la trasfusione ... + + + Transfusing Saline ... + Sallösungtransfusion ... + Вливание физраствора ... + + + Transfusing Plasma ... + Plasmatransfusion ... + Переливание плзмы ... + + + Bandaging ... + Verbinden ... + Vendando ... + Bandażowanie ... + Obvazuji ... + Pansement ... + Sto applicando la benda ... + Bekötözés... + Atando ... + Перевязывание ... + + + Applying Tourniquet ... + Aderpresse ... + Наложение жгута ... + + + Medical + Zdravotní + Médical + Sanitäter + Medico + Medyczne + Médico + Медик + Médico + + + Field Dressing + Бинтовая повязка + + + Packing Bandage + Компресионный пакет + + + Elastic Bandage + Давящая повязка + + + QuikClot + QuickClot + + + Check Pulse + Puls überprüfen + Проверить пульс + + + Check Blood Pressure + Blutdruck messen + Проверить кровяное давление + + + Triage Card + Triage Karte + Медкарта + + + Tourniquet + Tourniquet + Жгут + + + Remove Tourniquet + Entferne Tourniquet + Снять жгут + + + Give Blood IV (1000ml) + Дать кровь для в/в вливания (1000 мл) + + + Give Blood IV (500ml) + Дать кровь для в/в вливания (500 мл) + + + Give Blood IV (250ml) + Дать кровь для в/в вливания (250 мл) + + + Give Plasma IV (1000ml) + Дать плазму для в/в вливания (1000 мл) + + + Give Plasma IV (500ml) + Дать плазму для в/в вливания (500 мл) + + + Give Plasma IV (250ml) + Дать плазму для в/в вливания (250 мл) + + + Give Saline IV (1000ml) + Дать физраствор для в/в вливания (1000 мл) + + + Give Saline IV (500ml) + Дать физраствор для в/в вливания (500 мл) + + + Give Saline IV (250ml) + Дать физраствор для в/в вливания (250 мл) + + + Minor + Gering + Незначительные травмы + + + Delayed + Груз 300 + + + Immediate + Помощь отложена + + + Deceased + Груз 200 + + + None + Нет + + + Normal breathing + Дыхание в норме + Respiración normal + Respiration Normale + Normalny oddech + + + No breathing + Дыхания нет + No respira + Apnée + Brak oddechu + + + Difficult breathing + Дыхание затруднено + Dificultad para respirar + Difficultée Respiratoire + Trudności z oddychaniem + + + Almost no breathing + Дыхания почти нет + Casi sin respirar + Respiration Faible + Prawie brak oddechu + + + Bleeding + Кровотечение + Sangrando + Seignement + Krwawienie zewnętrzne + + + In Pain + Испытывает боль + Con Dolor + A De La Douleur + W bólu + + + Lost a lot of Blood + Большая кровопотеря + Mucha Sangre perdida + A Perdu Bcp de Sang + Stracił dużo krwi + + + Tourniquet [CAT] + Жгут + Torniquete [CAT] + Garot [CAT] + Opaska uciskowa [CAT] + + + Receiving IV [%1ml] + Принимается переливание [%1 мл] + + + Bandage (Basic) + Повязка (обычная) + Vendaje (Básico) + Bandage (Standard) + Bandaż (jałowy) + + + Used to cover a wound + Для перевязки ран + Utilizado para cubrir una herida + Utilisé Pour Couvrir Une Blessure + Używany w celu przykrycia i ochrony miejsca zranienia + + + A dressing, that is a particular material used to cover a wound, which is applied over the wound once bleeding has been stemmed. - Повязка, накладываемая поверх раны после остановки кровотечения. - Un apósito, material específico utilizado para cubrir una herida, se aplica sobre la herida una vez + Повязка, накладываемая поверх раны после остановки кровотечения. + Un apósito, material específico utilizado para cubrir una herida, se aplica sobre la herida una vez ha dejado de sangrar. - C'est un bandage, qui est fait d'un matériel spécial utiliser pour couvrir une blessure, qui peut + C'est un bandage, qui est fait d'un matériel spécial utiliser pour couvrir une blessure, qui peut etre appliquer des que le seignement as ete stopper. - Opatrunek materiałowy, używany do przykrywania ran, zakładany na ranę po zatamowaniu krwawienia. + Opatrunek materiałowy, używany do przykrywania ran, zakładany na ranę po zatamowaniu krwawienia. - - - Packing Bandage - Тампонирующая повязка - Vendaje Compresivo - Bandage Mèche - Bandaż (uciskowy) - - - Used to pack medium to large wounds and stem the bleeding - Для тампонирования ран среднего и большого размера и остановки кровотечения. - Se utiliza para vendar heridas medianas y grandes y detener el sangrado - Utiliser pour remplire la cavité créé dans une blessure moyenne et grande. - Używany w celu opatrywania średnich i dużych ran oraz tamowania krwawienia. - - - A bandage used to pack the wound to stem bleeding and facilitate wound healing. Packing a wound is + + + Packing Bandage + Тампонирующая повязка + Vendaje Compresivo + Bandage Mèche + Bandaż (uciskowy) + + + Used to pack medium to large wounds and stem the bleeding + Для тампонирования ран среднего и большого размера и остановки кровотечения. + Se utiliza para vendar heridas medianas y grandes y detener el sangrado + Utiliser pour remplire la cavité créé dans une blessure moyenne et grande. + Używany w celu opatrywania średnich i dużych ran oraz tamowania krwawienia. + + + A bandage used to pack the wound to stem bleeding and facilitate wound healing. Packing a wound is an option in large polytrauma injuries. - Повязка для тампонирования раны, остановки кровотечения и лучшего заживления. При тяжелых + Повязка для тампонирования раны, остановки кровотечения и лучшего заживления. При тяжелых сочетанных ранениях возможно тампонирование раны. - Se utiliza para detener la hemorragia de una herida y favorecer su cicatrización. Se usa en grandes + Se utiliza para detener la hemorragia de una herida y favorecer su cicatrización. Se usa en grandes lesiones o politraumatismos. - Un bandage servent a etre inseré dans les blessure pour éponger le seignement et faciliter la + Un bandage servent a etre inseré dans les blessure pour éponger le seignement et faciliter la guerrison. Ce bandage est une option pour soigner les lession de politrauma. - Opatrunek stosowany w celu zatrzymania krwawienia i osłony większych ran. - - - Bandage (Elastic) - Повязка (давящая) - Vendaje (Elástico) - Bandage (Élastique) - Bandaż (elastyczny) - - - Bandage kit, Elastic - Давящая повязка - Vendaje (Elástico) - Bandage Compressif Élastique - Zestaw bandaży elastycznych. - - - - - Ce bandage peut etre utiliser pour compresser la plaie afin de ralentire le seignement et assurer la + Opatrunek stosowany w celu zatrzymania krwawienia i osłony większych ran. + + + Bandage (Elastic) + Повязка (давящая) + Vendaje (Elástico) + Bandage (Élastique) + Bandaż (elastyczny) + + + Bandage kit, Elastic + Давящая повязка + Vendaje (Elástico) + Bandage Compressif Élastique + Zestaw bandaży elastycznych. + + + + + Ce bandage peut etre utiliser pour compresser la plaie afin de ralentire le seignement et assurer la tenue du bandage lors de mouvment. - Elastyczna opaska podtrzymująca opatrunek oraz usztywniająca okolice stawów. - Brinda una compresión uniforme y ofrece soporte extra a una zona lesionada - - - Tourniquet (CAT) - Жгут - Torniquete (CAT) - Garot (CAT) - Staza (typ. CAT) - - - Slows down blood loss when bleeding - Уменьшает кровопотерю при кровотечении. - Reduce la velocidad de pérdida de sangre - Ralentit le seignement - Zmniejsza ubytek krwi z kończyn w przypadku krwawienia. - - - A constricting device used to compress venous and arterial circulation in effect inhibiting or + Elastyczna opaska podtrzymująca opatrunek oraz usztywniająca okolice stawów. + Brinda una compresión uniforme y ofrece soporte extra a una zona lesionada + + + Tourniquet (CAT) + Жгут + Torniquete (CAT) + Garot (CAT) + Staza (typ. CAT) + + + Slows down blood loss when bleeding + Уменьшает кровопотерю при кровотечении. + Reduce la velocidad de pérdida de sangre + Ralentit le seignement + Zmniejsza ubytek krwi z kończyn w przypadku krwawienia. + + + A constricting device used to compress venous and arterial circulation in effect inhibiting or slowing blood flow and therefore decreasing loss of blood. - Жгут используется для прижатия сосудов, приводящего к остановке или значительному уменьшению + Жгут используется для прижатия сосудов, приводящего к остановке или значительному уменьшению кровотечения и сокращению кровопотери. - Dispositivo utilizado para eliminar el pulso distal y de ese modo controlar la pérdida de sangre + Dispositivo utilizado para eliminar el pulso distal y de ese modo controlar la pérdida de sangre - Un appareil servent a compresser les artères et veines afin de reduire la perte de sang. - Opaska zaciskowa CAT służy do tamowanie krwotoków w sytuacji zranienia kończyn z masywnym + Un appareil servent a compresser les artères et veines afin de reduire la perte de sang. + Opaska zaciskowa CAT służy do tamowanie krwotoków w sytuacji zranienia kończyn z masywnym krwawieniem tętniczym lub żylnym. - - - Morphine autoinjector - Морфин в автоматическом шприце - Morfina auto-inyectable - Auto-injecteur de Morphine - Autostrzykawka z morfiną - - - Used to combat moderate to severe pain experiences - Для снятия средних и сильных болевых ощущений. - Usado para combatir los estados dolorosos moderados a severos - Utiliser pour contrer les douleurs modéré à severes. - Morfina. Ma silne działanie przeciwbólowe. - - - An analgesic used to combat moderate to severe pain experiences. - Анальгетик для снятия средних и сильных болевых ощущений. - Analgésico usado para combatir los estados dolorosos de moderado a severo. - Un Analgésique puissant servant a contrer les douleur modéré a severe. - Organiczny związek chemiczny z grupy alkaloidów. Ma silne działanie przeciwbólowe. - - - Atropin autoinjector - Атропин в автоматическом шприце - Atropina auto-inyectable - Auto-injecteur d'Atropine - Autostrzykawka AtroPen - - - Used in NBC scenarios - Применяется для защиты от ОМП - Usado en escenarios NBQ - Utiliser en cas d'attaque CBRN - Atropina. Stosowana jako lek rozkurczowy i środek rozszerzający źrenice. - - - A drug used by the Military in NBC scenarios. - Препарат, используемый в войсках для защиты от оружия массового поражения. - Medicamento usado por Militares en escenarios NBQ - Médicament utilisé par l'armée en cas d'attaque CBRN - Atropina. Stosowana jako lek rozkurczowy i środek rozszerzający źrenice. Środek stosowany w + + + Morphine autoinjector + Морфин в пневмошприце + Morfina auto-inyectable + Auto-injecteur de Morphine + Autostrzykawka z morfiną + + + Used to combat moderate to severe pain experiences + Для снятия средних и сильных болевых ощущений. + Usado para combatir los estados dolorosos moderados a severos + Utiliser pour contrer les douleurs modéré à severes. + Morfina. Ma silne działanie przeciwbólowe. + + + An analgesic used to combat moderate to severe pain experiences. + Анальгетик для снятия средних и сильных болевых ощущений. + Analgésico usado para combatir los estados dolorosos de moderado a severo. + Un Analgésique puissant servant a contrer les douleur modéré a severe. + Organiczny związek chemiczny z grupy alkaloidów. Ma silne działanie przeciwbólowe. + + + Atropin autoinjector + Атропин в пневмошприце + Atropina auto-inyectable + Auto-injecteur d'Atropine + Autostrzykawka AtroPen + + + Used in NBC scenarios + Применяется для защиты от ОМП + Usado en escenarios NBQ + Utiliser en cas d'attaque CBRN + Atropina. Stosowana jako lek rozkurczowy i środek rozszerzający źrenice. + + + A drug used by the Military in NBC scenarios. + Препарат, используемый в войсках для защиты от оружия массового поражения. + Medicamento usado por Militares en escenarios NBQ + Médicament utilisé par l'armée en cas d'attaque CBRN + Atropina. Stosowana jako lek rozkurczowy i środek rozszerzający źrenice. Środek stosowany w przypadku zagrożeń NBC. - - - Epinephrine autoinjector - Адреналин в автоматическом шприце - Epinefrina auto-inyectable - Auto-injecteur d'épinéphrine - Autostrzykawka EpiPen - - - Increase heart rate and counter effects given by allergic reactions - Стимулирует работу сердца и купирует аллергические реакции. - Aumenta la frecuencia cardiaca y contraresta los efectos de las reacciones alérgicas - Augmente la Fréquance cadiaque et contré les effet d'une reaction Anaphylactique - Adrenalina. Zwiększa puls i przeciwdziała efektom wywołanym przez reakcje alergiczne - - - A drug that works on a sympathetic response to dilate the bronchi, increase heart rate and counter + + + Epinephrine autoinjector + Адреналин в пневмошприце + Epinefrina auto-inyectable + Auto-injecteur d'épinéphrine + Autostrzykawka EpiPen + + + Increase heart rate and counter effects given by allergic reactions + Стимулирует работу сердца и купирует аллергические реакции. + Aumenta la frecuencia cardiaca y contraresta los efectos de las reacciones alérgicas + Augmente la Fréquance cadiaque et contré les effet d'une reaction Anaphylactique + Adrenalina. Zwiększa puls i przeciwdziała efektom wywołanym przez reakcje alergiczne + + + A drug that works on a sympathetic response to dilate the bronchi, increase heart rate and counter such effects given by allergic reactions (anaphylaxis). Used in sudden cardiac arrest scenarios with decreasing positive outcomes. - Препарат, вызывающий симпатическую реакцию, приводящую к расширению бронхов, увеличению частоты + Препарат, вызывающий симпатическую реакцию, приводящую к расширению бронхов, увеличению частоты сердечных сокращений и купированию аллергических реакций (анафилактического шока). Применяется при остановке сердца с уменьшением вероятности благоприятного исхода. - Medicamento que dilata los bronquios, aumenta la frecuencia cardiaca y contrarresta los efectos de + Medicamento que dilata los bronquios, aumenta la frecuencia cardiaca y contrarresta los efectos de las reacciones alérgicas (anafilaxis). Se utiliza en caso de paros cardiacos repentinos. - Un medicament qui fonctione sur le systeme sympatique créan une dilatation des bronches, augmente la + Un medicament qui fonctione sur le systeme sympatique créan une dilatation des bronches, augmente la fréquance cardiaque et contre les effet d'une reaction alergique (anaphylaxie). Utiliser lors d'arret cardio-respiratoire pour augmenté les chances retrouver un ryhtme. - EpiPen z adrenaliną ma działanie sympatykomimetyczne, tj. pobudza receptory alfa- i + EpiPen z adrenaliną ma działanie sympatykomimetyczne, tj. pobudza receptory alfa- i beta-adrenergiczne. Pobudzenie układu współczulnego prowadzi do zwiększenia częstotliwości pracy serca, zwiększenia pojemności wyrzutowej serca i przyśpieszenia krążenia wieńcowego. Pobudzenie oskrzelowych receptorów beta-adrenergicznych wywołuje rozkurcz mięśni gładkich oskrzeli, co w efekcie zmniejsza towarzyszące oddychaniu świsty i duszności. - - - Plasma IV (1000ml) - Плазма для в/в вливания (1000 мл) - Plasma Intravenoso (1000ml) - Plasma Sanguin IV (1000ml) - Osocze IV (1000ml) - - - A volume-expanding blood supplement. - Дополнительный препарат, применяемый при возмещении объема крови. - Suplemento para expandir el volumen sanguíneo. - Supplement visant a remplacer les volume sanguin - Składnik krwi, używany do zwiększenia jej objętości. - - - A volume-expanding blood supplement. - Дополнительный препарат, применяемый при возмещении объема крови. - Suplemento para expandir el volumen sanguíneo. - Supplement visant a remplacer le volume sanguin et remplace les plaquettes. - Składnik krwi, używany do zwiększenia jej objętości. - - - Plasma IV (500ml) - Плазма для в/в вливания (500 мл) - Plasma Intravenoso (500ml) - Plasma Sanguin IV (500ml) - Osocze IV (500ml) - - - Plasma IV (250ml) - Плазма для в/в вливания (250 мл) - Plasma Intravenoso (250ml) - Plasma Sanguin (250ml) - Osocze IV (250ml) - - - Blood IV (1000ml) - Кровь для переливания (1000 мл) - Sangre Intravenosa (1000ml) - Cullot Sanguin IV (1000ml) - Krew IV (1000ml) - - - Blood IV, for restoring a patients blood (keep cold) - Пакет крови для возмещения объема потерянной крови (хранить в холодильнике) - Sangre Intravenosa, para restarurar el volumen sanguíneo (mantener frío) - Cullot Sanguin IV, pour remplacer le volume sanguin (garder Réfrigeré) - Krew IV, używana do uzupełnienia krwi u pacjenta, trzymać w warunkach chłodniczych - - - O Negative infusion blood used in strict and rare events to replenish blood supply usually + + + Plasma IV (1000ml) + Плазма для в/в вливания (1000 мл) + Plasma Intravenoso (1000ml) + Plasma Sanguin IV (1000ml) + Osocze IV (1000ml) + + + A volume-expanding blood supplement. + Дополнительный препарат, применяемый при возмещении объема крови. + Suplemento para expandir el volumen sanguíneo. + Supplement visant a remplacer les volume sanguin + Składnik krwi, używany do zwiększenia jej objętości. + + + A volume-expanding blood supplement. + Дополнительный препарат, применяемый при возмещении объема крови. + Suplemento para expandir el volumen sanguíneo. + Supplement visant a remplacer le volume sanguin et remplace les plaquettes. + Składnik krwi, używany do zwiększenia jej objętości. + + + Plasma IV (500ml) + Плазма для в/в вливания (500 мл) + Plasma Intravenoso (500ml) + Plasma Sanguin IV (500ml) + Osocze IV (500ml) + + + Plasma IV (250ml) + Плазма для в/в вливания (250 мл) + Plasma Intravenoso (250ml) + Plasma Sanguin (250ml) + Osocze IV (250ml) + + + Blood IV (1000ml) + Кровь для переливания (1000 мл) + Sangre Intravenosa (1000ml) + Cullot Sanguin IV (1000ml) + Krew IV (1000ml) + + + Blood IV, for restoring a patients blood (keep cold) + Пакет крови для возмещения объема потерянной крови (хранить в холодильнике) + Sangre Intravenosa, para restarurar el volumen sanguíneo (mantener frío) + Cullot Sanguin IV, pour remplacer le volume sanguin (garder Réfrigeré) + Krew IV, używana do uzupełnienia krwi u pacjenta, trzymać w warunkach chłodniczych + + + O Negative infusion blood used in strict and rare events to replenish blood supply usually conducted in the transport phase of medical care. - Кровь I группы, резус-отрицательная, применяется по жизненным показаниям для возмещения объема + Кровь I группы, резус-отрицательная, применяется по жизненным показаниям для возмещения объема потерянной крови на догоспитальном этапе оказания медицинской помощи. - Cullot Sanguin O- ,utiliser seulement lors de perte sanguine majeur afin de remplacer le volume + Cullot Sanguin O- ,utiliser seulement lors de perte sanguine majeur afin de remplacer le volume sanguin perdu. Habituelment utiliser lors du transport ou dans un etablisement de soin. - Krew 0 Rh-, używana w rzadkich i szczególnych przypadkach do uzupełnienia krwi u pacjenta, zazwyczaj + Krew 0 Rh-, używana w rzadkich i szczególnych przypadkach do uzupełnienia krwi u pacjenta, zazwyczaj w trakcie fazie transportu rannej osoby do szpitala. - Utilice sólo durante gran pérdida de sangre para reemplazar el volumen de sangre perdido. Uso + Utilice sólo durante gran pérdida de sangre para reemplazar el volumen de sangre perdido. Uso habitual durante el transporte de heridos. - - - Blood IV (500ml) - Кровь для переливания (500 мл) - Sangre Intravenosa (500ml) - Cullot Sanguin IV (500ml) - Krew IV (500ml) - - - Blood IV (250ml) - Кровь для переливания (250 мл) - Sangre Intravenosa (250ml) - Cullot Sanguin IV (250ml) - Krew IV (250ml) - - - Saline IV (1000ml) - Физраствор для в/в вливания (1000 мл) - Solución Salina Intravenosa (1000ml) - solution Saline 0.9% IV (1000ml) - Solanka 0,9% IV (1000ml) - - - Saline IV, for restoring a patients blood - Пакет физраствора для возмещения объема потерянной крови - Solución Salina Intravenosa, para restaurar el volumen sanguíneo - Solution Saline 0.9% IV, pour retablir temporairement la tention arteriel - Solanka 0,9%, podawana dożylnie (IV), używana w celu uzupełnienia krwi u pacjenta - - - A medical volume-replenishing agent introduced into the blood system through an IV infusion. + + + Blood IV (500ml) + Кровь для переливания (500 мл) + Sangre Intravenosa (500ml) + Cullot Sanguin IV (500ml) + Krew IV (500ml) + + + Blood IV (250ml) + Кровь для переливания (250 мл) + Sangre Intravenosa (250ml) + Cullot Sanguin IV (250ml) + Krew IV (250ml) + + + Saline IV (1000ml) + Физраствор для в/в вливания (1000 мл) + Solución Salina Intravenosa (1000ml) + solution Saline 0.9% IV (1000ml) + Solanka 0,9% IV (1000ml) + + + Saline IV, for restoring a patients blood + Пакет физраствора для возмещения объема потерянной крови + Solución Salina Intravenosa, para restaurar el volumen sanguíneo + Solution Saline 0.9% IV, pour retablir temporairement la tention arteriel + Solanka 0,9%, podawana dożylnie (IV), używana w celu uzupełnienia krwi u pacjenta + + + A medical volume-replenishing agent introduced into the blood system through an IV infusion. - Пакет физиологического раствора для возмещения объема потерянной крови путем внутривенного + Пакет физиологического раствора для возмещения объема потерянной крови путем внутривенного вливания. - Suero fisiológico inoculado al torrente sanguíneo de forma intravenosa. - Un remplacment temporaire pour rétablir la tention artériel lors de perte sanguine, étant ajouter + Suero fisiológico inoculado al torrente sanguíneo de forma intravenosa. + Un remplacment temporaire pour rétablir la tention artériel lors de perte sanguine, étant ajouter par intraveineuse - Używany w medycynie w formie płynu infuzyjnego jako środek nawadniający i uzupełniający niedobór + Używany w medycynie w formie płynu infuzyjnego jako środek nawadniający i uzupełniający niedobór elektrolitów, podawany dożylnie (IV). - - - Saline IV (500ml) - Физраствор для в/в вливания (500 мл) - Solución Salina Intravenosa (500ml) - Solution Saline 0.9% IV (500ml) - Solanka 0,9% IV (500ml) - - - Saline IV (250ml) - Физраствор для в/в вливания (250 мл) - Solución Salina Intravenosa (250ml) - Solution Saline 0.9% IV (250ml) - Solanka 0,9% IV (250ml) - - - Basic Field Dressing (QuikClot) - Первичный перевязочный пакет (QuikClot) - Vendaje Básico (Coagulante) - Bandage Regulier (Coagulant) - Opatrunek QuikClot - - - QuikClot bandage - Гемостатический пакет QuikClot - Venda Coagulante - Bandage coagulant - Podstawowy opatrunek stosowany na rany - - - - - Un bandage servant a coaguler les seignements mineur à moyen. - Proszkowy opatrunek adsorbcyjny przeznaczony do tamowania zagrażających życiu krwawień średniej i + + + Saline IV (500ml) + Физраствор для в/в вливания (500 мл) + Solución Salina Intravenosa (500ml) + Solution Saline 0.9% IV (500ml) + Solanka 0,9% IV (500ml) + + + Saline IV (250ml) + Физраствор для в/в вливания (250 мл) + Solución Salina Intravenosa (250ml) + Solution Saline 0.9% IV (250ml) + Solanka 0,9% IV (250ml) + + + Basic Field Dressing (QuikClot) + Первичный перевязочный пакет (QuikClot) + Vendaje Básico (Coagulante) + Bandage Regulier (Coagulant) + Opatrunek QuikClot + + + QuikClot bandage + Гемостатический пакет QuikClot + Venda Coagulante + Bandage coagulant + Podstawowy opatrunek stosowany na rany + + + + + Un bandage servant a coaguler les seignements mineur à moyen. + Proszkowy opatrunek adsorbcyjny przeznaczony do tamowania zagrażających życiu krwawień średniej i dużej intensywności. - Vendaje Hemostático con coagulante que detiene el sangrado. - - - Personal Aid Kit - Аптечка - Kit de Soporte Vital Avanzado - Équipement de support Vitale - Apteczka osobista - - - Includes various treatment kit needed for stitching or advanced treatment - Содержит различные материалы и инструменты для зашивания ран и оказания специальной медпомощи. + Vendaje Hemostático con coagulante que detiene el sangrado. + + + Personal Aid Kit + Аптечка + Kit de Soporte Vital Avanzado + Équipement de support Vitale + Apteczka osobista + + + Includes various treatment kit needed for stitching or advanced treatment + Содержит различные материалы и инструменты для зашивания ран и оказания специальной медпомощи. - Incluye material médico para tratamientos avanzados - Inclue du matériel medical pour les traitement avancé, tel les point de suture. - Zestaw środków medycznych do opatrywania ran i dodatkowego leczenia po-urazowego - - - - - - - - - Surgical Kit - Хирургический набор - Kit Quirúrgico - - - Surgical Kit for in field advanced medical treatment - Набор для хирургической помощи в полевых условиях - Kit Quirúrgico para el tratamiento avanzado en el campo de batalla - - - Surgical Kit for in field advanced medical treatment - Набор для хирургической помощи в полевых условиях - Kit Quirúrgico para el tratamiento avanzado en el campo de batalla - - - Bodybag - Мешок для трупов - Bolsa para cadáveres - - - A bodybag for dead bodies - Мешок для упаковки трупов - Bolsa para cadáveres - - - A bodybag for dead bodies - Мешок для упаковки трупов - Bolsa para cadáveres - - - - Blood Pressure - Артериальное давление - Presión Arterial - - - Checking Blood Pressure.. - Проверка артериального давления... - Comprobando Presión Arterial... - - - You checked %1 - Вы осмотрели раненого %1 - Examinando a %1 - - - You find a blood pressure of %2/%3 - Артериальное давление %2/%3 - La Presión Arterial es %2/%3 - - - You find a low blood pressure - Давление низкое - La Presión Arterial es baja - - - You find a normal blood pressure - Давление нормальное - La Presión Arterial es normal - - - You find a high blood pressure - Давление высокое - La Presión Arterial es alta - - - You find no blood pressure - Давления нет - No hay Presión Arterial - - - You fail to find a blood pressure - Артериальное давление не определяется - No puedes encontrar Presión Arterial - - - Pulse - Пульс - Pulso - - - Checking Heart Rate.. - Проверка пульса... - Comprobando Pulso... - - - You checked %1 - Вы осмотрели раненого %1 - Examinando a %1 - - - You find a Heart Rate of %2 - Пульс %2 уд./мин. - El Pulso es %2 - - - You find a weak Heart Rate - Пульс слабый - El Pulso es débil - - - You find a strong Heart Rate - Пульс учащенный - El Pulso está acelerado - - - You find a normal Heart Rate - Пульс в норме - El Pulso es bueno - - - You find no Heart Rate - Пульс не прощупывается - No tiene Pulso - - - Response - Реакция - Reacciona - - - You check response of patient - Вы проверяете реакцию раненого - Compruebas si el paciente reacciona - - - %1 is responsive - %1 реагирует на раздражители - %1 ha reaccionado - - - %1 is not responsive - %1 не реагирует - %1 no reacciona - - - You checked %1 - Вы осмотрели раненого %1 - Examinas a %1 - - - Bandaged - Повязка наложена - Vendado - - - You bandage %1 (%2) - Вы перевязали раненого %1 (%2) - Aplicas vendaje a %1 en %2 - - - %1 is bandaging you - %1 перевязывает вас - %1 te está vendando - - - You start stitching injures from %1 (%2) - Вы зашиваете ранения от %1 (%2) - Estás suturando heridas de %1 en %2 - - - Stitching - Наложение швов - Suturando - - - You treat the airway of %1 - Вы интубируете раненого %1 - Estás intubando a %1 - - - Airway - Дыхательные пути - Vías Aéreas - - - %1 is treating your airway - %1 проводит вам интубацию - %1 te está intubando - - - Drag - Ziehen - Arrastrar - Ciągnij - Táhnout - Тащить - Tracter - Húzás - Arrastar - Trascina - - - Carry - Tragen - Cargar - Nieś - Nést - Нести - Porter - Cipelés - Carregar - Trasporta - - - Release - Loslassen - Soltar - Połóż - Položit - Отпустить - Déposer - Elenged - Largar - Lascia - - - Load Patient Into - Patient Einladen - Cargar el paciente en - Załaduj pacjenta - Naložit pacianta do - Погрузить пациента в - Embarquer le Patient - Sebesült berakása - Carregar Paciente Em - Carica paziente nel - - - Unload Patient - Patient Ausladen - Descargar el paciente - Wyładuj pacjenta - Vyložit pacienta - Выгрузить пациента - Débarquer le Patient - Sebesült kihúzása - Descarregar Paciente - Scarica il paziente - - - Unload patient - - - Load patient - - - Place body in bodybag - - - Placing body in bodybag - - - - %1 has bandaged patient - - - %1 used %2 - - - %1 has given an IV - - - %1 applied a tourniquet - - - - + Incluye material médico para tratamientos avanzados + Inclue du matériel medical pour les traitement avancé, tel les point de suture. + Zestaw środków medycznych do opatrywania ran i dodatkowego leczenia po-urazowego + + + + + + + + + Surgical Kit + Хирургический набор + Kit Quirúrgico + + + Surgical Kit for in field advanced medical treatment + Набор для хирургической помощи в полевых условиях + Kit Quirúrgico para el tratamiento avanzado en el campo de batalla + + + Surgical Kit for in field advanced medical treatment + Набор для хирургической помощи в полевых условиях + Kit Quirúrgico para el tratamiento avanzado en el campo de batalla + + + Bodybag + Мешок для трупов + Bolsa para cadáveres + + + A bodybag for dead bodies + Мешок для упаковки трупов + Bolsa para cadáveres + + + A bodybag for dead bodies + Мешок для упаковки трупов + Bolsa para cadáveres + + + Blood Pressure + Артериальное давление + Presión Arterial + + + Checking Blood Pressure.. + Проверка артериального давления... + Comprobando Presión Arterial... + + + You checked %1 + Вы осмотрели раненого %1 + Examinando a %1 + + + You find a blood pressure of %2/%3 + Артериальное давление %2/%3 + La Presión Arterial es %2/%3 + + + You find a low blood pressure + Давление низкое + La Presión Arterial es baja + + + You find a normal blood pressure + Давление нормальное + La Presión Arterial es normal + + + You find a high blood pressure + Давление высокое + La Presión Arterial es alta + + + You find no blood pressure + Давления нет + No hay Presión Arterial + + + You fail to find a blood pressure + Артериальное давление не определяется + No puedes encontrar Presión Arterial + + + Pulse + Пульс + Pulso + + + Checking Heart Rate.. + Проверка пульса... + Comprobando Pulso... + + + You checked %1 + Вы осмотрели раненого %1 + Examinando a %1 + + + You find a Heart Rate of %2 + Пульс %2 уд./мин. + El Pulso es %2 + + + You find a weak Heart Rate + Пульс слабый + El Pulso es débil + + + You find a strong Heart Rate + Пульс учащенный + El Pulso está acelerado + + + You find a normal Heart Rate + Пульс в норме + El Pulso es bueno + + + You find no Heart Rate + Пульс не прощупывается + No tiene Pulso + + + Response + Реакция + Reacciona + + + You check response of patient + Вы проверяете реакцию раненого + Compruebas si el paciente reacciona + + + %1 is responsive + %1 реагирует на раздражители + %1 ha reaccionado + + + %1 is not responsive + %1 не реагирует + %1 no reacciona + + + You checked %1 + Вы осмотрели раненого %1 + Examinas a %1 + + + Bandaged + Повязка наложена + Vendado + + + You bandage %1 (%2) + Вы перевязали раненого %1 (%2) + Aplicas vendaje a %1 en %2 + + + %1 is bandaging you + %1 перевязывает вас + %1 te está vendando + + + You start stitching injures from %1 (%2) + Вы зашиваете ранения от %1 (%2) + Estás suturando heridas de %1 en %2 + + + Stitching + Наложение швов + Suturando + + + You treat the airway of %1 + Вы интубируете раненого %1 + Estás intubando a %1 + + + Airway + Дыхательные пути + Vías Aéreas + + + %1 is treating your airway + %1 проводит вам интубацию + %1 te está intubando + + + Drag + Ziehen + Arrastrar + Ciągnij + Táhnout + Тащить + Tracter + Húzás + Arrastar + Trascina + + + Carry + Tragen + Cargar + Nieś + Nést + Нести + Porter + Cipelés + Carregar + Trasporta + + + Release + Loslassen + Soltar + Połóż + Položit + Отпустить + Déposer + Elenged + Largar + Lascia + + + Load Patient Into + Patient Einladen + Cargar el paciente en + Załaduj pacjenta + Naložit pacianta do + Погрузить пациента в + Embarquer le Patient + Sebesült berakása + Carregar Paciente Em + Carica paziente nel + + + Unload Patient + Patient Ausladen + Descargar el paciente + Wyładuj pacjenta + Vyložit pacienta + Выгрузить пациента + Débarquer le Patient + Sebesült kihúzása + Descarregar Paciente + Scarica il paziente + + + Unload patient + Выгрузить пациента + + + Load patient + Погрузить пациента + + + Place body in bodybag + Поместить тело в мешок + + + Placing body in bodybag + Помещение тела в мешок ... + + + %1 has bandaged patient + %1 перевязал пациента + + + %1 used %2 + %1 применил %2 + + + %1 has given an IV + %1 провел переливание + + + %1 applied a tourniquet + %1 наложил жгут + + + \ No newline at end of file diff --git a/addons/microdagr/stringtable.xml b/addons/microdagr/stringtable.xml index 772a7a172f..823a7a7f8d 100644 --- a/addons/microdagr/stringtable.xml +++ b/addons/microdagr/stringtable.xml @@ -1,24 +1,30 @@  - + MicroDAGR GPS + MicroDAGR GPS MicroDAGR advanced GPS receiver + Многофункциональный GPS-приёмник. Angular Unit: + Угловые единицы: Mils + Тысячные Show Waypoints On Map: + Показывать маршрутные точки на карте: Degrees + Градусы On @@ -44,43 +50,55 @@ Enter Grid Cords: + Введите координаты: Name of [%1] + Название [%1] MGRS-New + MGRS-Новая WGD + WGD Range: Reichweite: + Дистанция: Compass Direction + Азимут Mark + Отметка Waypoints Wegpunkte + Машрутные точки Connect To + Соединиться с Settings Einstellungen Configuración + Настройки SetWP + Установить МТ Add + Добавить Delete @@ -95,15 +113,19 @@ Toggle MicroDAGR Display Mode + Сменить режим показа MicroDAGR Show MicoDAGR + Показать MicroDAGR Configure MicroDAGR + Настроить MicroDAGR Close MicroDAGR + Закрыть MicroDAGR \ No newline at end of file diff --git a/addons/nametags/stringtable.xml b/addons/nametags/stringtable.xml index 622df44aca..a6f16e3fad 100644 --- a/addons/nametags/stringtable.xml +++ b/addons/nametags/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -68,14 +68,17 @@ Show name tags for AI units + Показывать именые метки ИИ Show SoundWaves (requires player names) Zeigen Schallwelle (benötigt spielernamen) Mostrar onda sonora (requiere Mostrar nombres de jugadores) + Показывать звуковые волны (требует имен игроков) Default Nametag Color (Non Group Members) + Цвет меток игроков (не членов групп) \ No newline at end of file diff --git a/addons/optionsmenu/stringtable.xml b/addons/optionsmenu/stringtable.xml index 76407da435..020a848f79 100644 --- a/addons/optionsmenu/stringtable.xml +++ b/addons/optionsmenu/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -16,15 +16,17 @@ Fix Animation + Фикс анимации Reset All Rücksetzen + Полный сброс Colors Farben - цвета + Цвета Colors @@ -41,6 +43,7 @@ Values + Значения Yes @@ -70,38 +73,48 @@ Setting: Nastavení: Einstellung: - Yстановки: + Установки: Ajuste: Export + Экспорт Open Export Menu + Открыть меню экспорта String input. + Строчный ввод. Array. Seperate elements by using ,. + Массив. Разделяйте элемены, используя запятую. Number + Число Uknown input type + Неизвестный тип ввода Save input + Сохранить ввод Include Client Settings + Включить настройки клиента Exclude Client Settings + Исключить настройки клиента Settings exported to clipboard + Настройки экспортированы в буфер обмена \ No newline at end of file diff --git a/addons/overheating/stringtable.xml b/addons/overheating/stringtable.xml index 5d2c9595df..5356e9ffc6 100644 --- a/addons/overheating/stringtable.xml +++ b/addons/overheating/stringtable.xml @@ -1,12 +1,14 @@  - + Display text on jam + Показывать текст, когда клинит оружие Display a notification whenever your weapon gets jammed + Демонстровать уведомление, каждый раз, когда клинит Ваше оружие. Spare barrel diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index 9ccd7752d2..29fb5a736b 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -1,1310 +1,1302 @@  - + - - - XM312 - XM312 - XM312 - XM312 - XM312 - XM312 - XM312 - XM312 - XM312 - XM312A - - - XM312A - XM312A - XM312 - XM312A - XM312A - XM312A - XM312A - XM312A - XM312A - XM312A - - - XM312 (High) - XM312 (Hoch) - XM312 (Alto) - XM312 (Haut) - XM312 (Vysoký) - XM312 (Wysoki) - XM312 (Высокий) - XM312 (Alta) - XM312 (Magasított) - XM312 (Alta) - - - XM307 - XM307 - XM307 - XM307 - XM307 - XM307 - XM307 - XM307 - XM307 - XM307 - - - XM307A - XM307A - XM307A - XM307A - XM307A - XM307A - XM307A - XM307A - XM307A - XM307A - - - XM307 (High) - XM307 (Hoch) - XM307 (Alto) - XM307 (Haut) - XM307 (Vysoký) - XM307 (Wysoki) - XM307 (Высокий) - XM307 (Alta) - XM307 (Magasított) - XM307 (Alta) - - - Mini-Spike Launcher (AT) - Mini-Spike Lenkflugkörper (AT) - Lanzador Mini-Spike (AT) - Poste de tir Mini-Spike (AC) - Mini-Spike Odpalovač (AT) - Wyrzutnia Mini-Spike (AT) - Mini-Spike Пусковое устройство (ПТРК) - Lança-mísseis Mini-Spike (AC) - Mini-Spike rakétarendszer (páncéltörő) - Lanciatore Mini-Spike (AC) - - - Mini-Spike Launcher (AA) - Mini-Spike Lenkflugkörper (AA) - Lanzador Mini-Spike (AA) - Poste de tir Mini-Spike (AA) - Mini-Spike Odpalovač (AA) - Wyrzutnia Mini-Spike (AA) - Mini-Spike Пусковое устройство (ВВ) - Lança-mísseis Mini-Spike (AA) - Mini-Spike rakétarendszer (légvédelmi) - Lanciatore Mini-Spike (AA) - - - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - - - YABHON-R3 (CAS) - YABHON-R3 (Luftnahunterstützung) - YABHON-R3 (CAS) - YABHON-R3 (CAS) - YABHON-R3 (CAS) - YABHON-R3 (штурмовик) - - - M-ATV - M-ATV - M-ATV - M-ATV - M-ATV - M-ATV - M-ATV - M-ATV - M-ATV - M-ATV - - - M-ATV (HMG) - M-ATV (SMG) - M-ATV (HMG) - M-ATV (CKM) - M-ATV (TK) - M-ATV (HMG) - M-ATV (Пулемет) - M-ATV (HMG) - M-ATV (HMG) - M-ATV (HMG) - - - M-ATV (GMG) - M-ATV (GMW) - M-ATV (GMG) - M-ATV (GMG) - M-ATV (Granátomet) - M-ATV (GMG) - M-ATV (Гранатомет) - M-ATV (GMG) - M-ATV (GMG) - M-ATV (GMG) - - - Merkava Mk IV M - Merkava Mk IV M - Merkava Mk IV M - Merkawa Mk IV M - Merkava Mk IV M - Merkava Mk IV M - Меркава Mk IV M - Merkava Mk IV M - Merkava Mk IV M - Merkava Mk IV M - - - Merkava Mk IV LIC - Merkava Mk IV LIC - Merkava Mk IV LIC - Merkawa Mk IV LIC - Merkava Mk IV LIC - Merkava Mk IV LIC - Меркава Mk IV LIC - Merkava Mk IV LIC - Merkava Mk IV LIC - Merkava Mk IV LIC - - - Sholef - Sholef - Sholef - Sholef - Sholef - Sholef - Шолеф - Sholef - Sholef - Sholef - - - Seara - Seara - Seara - Seara - Seara - Seara - Seara - Seara - Seara - Seara - - - Namer - Namer - Namer - Namer - Namer - Namer - Намер - Namer - Namer - Namer - - - Bardelas - Bardelas - Bardelas - Bardelas - Bardelas - Bardelas - Bardelas - Bardelas - Bardelas - Bardelas - - - Patria AMV - Patria AMV - Patria AMV - Patria AMV - Patria AMV - Patria AMV - Patria AMV - Patria AMV - Patria AMV - Patria AMV - - - Nemmera - Nemmera - Nemmera - Nemmera - Nemmera - Nemmera - Nemmera - Nemmera - Nemmera - Nemmera - - - HEMTT Transport - HEMTT Transport - HEMTT de transporte - HEMTT Transportowy - HEMTT Valník - HEMTT Transport - HEMTT Транспортный - HEMTT Transporte - HEMTT szállítójármű - HEMTT da trasporto - - - HEMTT Transport (covered) - HEMTT Transport (bedeckt) - HEMTT de transporte (cubierto) - HEMTT Transportowy (zakryty) - HEMTT Valník (krytý) - HEMTT Transport (bâché) - HEMTT Транспортный (крытый) - HEMTT Transporte (coberto) - HEMTT szállítójármű (ponyvás) - HEMTT da trasporto (coperto) - - - HEMTT - HEMTT - HEMTT - HEMTT - HEMTT - HEMTT Tracteur - HEMTT - HEMTT - HEMTT - HEMTT - - - HEMTT Container - HEMTT Container - HEMTT de contenedor - HEMTT Kontener - HEMTT Skříňový - HEMTT Conteneur - HEMTT Контейнер - HEMTT Contêiner - HEMTT Konténer - HEMTT portacontainer - - - HEMTT Medical - HEMTT Sanitäter - HEMTT médico - HEMTT Medyczny - HEMTT Zdravotnický - HEMTT Sanitaire - HEMTT Медицинский - HEMTT Médico - HEMTT (egészségügyi) - HEMTT Medico - - - HEMTT Ammo - HEMTT Munition - HEMTT de munición - HEMTT Amunicyjny - HEMTT Muniční - HEMTT Munitions - HEMTT Боеприпасы - HEMTT Munições - HEMTT (lőszerszállító) - HEMTT di rifornimento munizioni - - - HEMTT Fuel - HEMTT Treibstoff - HEMTT de combustible - HEMTT Cysterna - HEMTT Cisterna - HEMTT Citerne - HEMTT Заправщик - HEMTT Combustível - HEMTT (üzemanyag-szállító) - HEMTT di rifornimento carburante - - - HEMTT Repair - HEMTT Instandsetzung - HEMTT de reparación - HEMTT Naprawczy - HEMTT Opravárenský - HEMTT Réparation - HEMTT Ремонтный - HEMTT Reparador - HEMTT (szerelő-jármű) - HEMTT Riparatore - - - Fennek - Fennek - Fennek - Fennek - Fennek - Fennek - Феннек - Fennek - Fennek - Fennek - - - Fennek (HMG) - Fennek (SMG) - Fennek (HMG) - Fennek (CKM) - Fennek (TK) - Fennek (HMG) - Феннек (Пулемет) - Fennek (HMG) - Fennek (HMG) - Fennek (HMG) - - - Fennek (GMG) - Fennek (GMW) - Fennek (GMG) - Fennek (GMG) - Fennek (granátomet) - Fennek (GMG) - Феннек (Гранатомет) - Fennek (GMG) - Fennek (GMG) - Fennek (GMG) - - - Leopard 2SG - Leopard 2SG - Leopard 2SG - Leopard 2SG - Leopard 2SG - Leopard 2SG - Леопард 2SG - Leopard 2SG - Leopard 2SG - Leopard 2SG - - - FV510 Warrior - FV510 Warrior - FV510 Warrior - FV510 Warrior - FV510 Warrior - FV510 Warrior - FV510 Уорриор - FV510 Warrior - FV510 Warrior - FV510 Warrior - - - Pandur II - Pandur II - Pandur II - Pandur II - Pandur II - Pandur II - Pandur II - Pandur II - Pandur II - Pandur II - - - KamAZ Transport - KamAZ Transport - KamAZ de transporte - KamAZ transportowy - KAMAZ Valník - KamAZ Transport - КамАЗ Траспортный - KamAZ Transporte - KamAZ szállítójármű - KamAZ da trasporto - - - KamAZ Transport (covered) - KamAZ Transport (bedeckt) - KamAZ de transporte (cubierto) - KamAZ Transportowy (zakryty) - KAMAZ Valník (krytý) - KamAZ Transport (bâché) - КамАЗ Траспортный (Крытый) - KamAZ Transporte (coberto) - KamAZ szállítójármű (ponyvás) - KamAZ da trasporto (coperto) - - - KamAZ Ammo - KamAZ Munition - KamAZ de munición - KamAZ Amunicyjny - KAMAZ Muniční - KamAZ Munitions - КамАЗ Боеприпасы - KamAZ Munições - KamAZ (lőszerszállító) - KamAZ di rifornimento munizioni - - - KamAZ Fuel - KamAZ Treibstoff - KamAZ de combustible - KamAZ cysterna - KAMAZ Cisterna - KamAZ Citerne - КамАЗ Заправщик - KamAZ Combustível - KamAZ (üzemanyag-szállító) - KamAZ di rifornimento carburante - - - KamAZ Repair - KamAZ Instandsetzung - KamAZ de reparación - KamAZ Naprawczy - KAMAZ Opravárenský - KamAZ Réparation - КамАЗ Ремонтный - KamAZ Reparador - KamAZ (szerelő-jármű) - KamAZ riparatore - - - KamAZ Medical - KamAZ Sanitäter - KamAZ médico - KamAZ Medyczny - KAMAZ Zdravotnický - KamAZ Sanitaire - КамАЗ Медицинский - KamAZ Médico - KamAZ (egészségügyi) - KamAZ Medico - - - Punisher - Punisher - Punisher - Punisher - Punisher - Punisher - Kаратель - Punisher - Punisher - Punisher - - - Punisher (HMG) - Punisher (SMG) - Punisher (HMG) - Punisher (CKM) - Punisher (TK) - Punisher (HMG) - Kаратель (Пулемет) - Punisher (HMG) - Punisher (HMG) - Punisher (HMG) - - - Punisher (GMG) - Punisher (GMW) - Punisher (GMG) - Punisher (CKM) - Punisher (granátomet) - Punisher (GMG) - Kаратель (Гранатомет) - Punisher (GMG) - Punisher (GMG) - Punisher (GMG) - - - T100 Black Eagle - T100 Black Eagle - T100 Black Eagle - T100 Black Eagle - T100 Black Eagle - T100 Black Eagle - T100 Черный Орел - T100 Black Eagle - T100 Black Eagle - T100 Black Eagle - - - 2S9 Sochor - 2S9 Sochor - 2S9 Sochor - 259 Sochor - 2S9 Sochor - 2S9 Sochor - 2S9 Сокор - 2S9 Sochor - 2S9 Sochor - 2S9 Sochor - - - BM-2T Stalker - BM-2T Stalker - BM-2T Stalker - BM-2T Stalker - BM-2T Stalker - BM-2T Stalker - БМ-2Т Сталкер - BM-2T Stalker - BM-2T Stalker - BM-2T Stalker - - - ZSU-35 Tigris - ZSU-35 Tigris - ZSU-35 Tigris - ZSU-35 Tigris - ZSU-35 Tigris - ZSU-35 Tigris - ЗСУ-35 Tigris - ZSU-35 Tigris - ZSU-35 Tigris - ZSU-35 Tigris - - - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - - - Typhoon Transport - Typhoon Transport - Typhoon de transporte - Typhoon Transportowy - Typhoon Valník - Typhoon Transport - Тайфун Транспортный - Typhoon Transporte - Typhoon szállítójármű - Typhoon da trasporto - - - Typhoon Transport (covered) - Typhoon Transport (bedeckt) - Typhoon de transporte (cubierto) - Typhoon Transportowy (przykryty) - Typhoon Valník (krytý) - Typhoon Transport (bâché) - Тайфун Транспортный (kрытый) - Typhoon Transporte (coberto) - Typhoon szállítójármű (ponyvás) - Typhoon da trasporto (coperto) - - - Typhoon Device - Typhoon Gerät - Typhoon de dispositivo - Typhoon Urządzenie - Typhoon Zařízení - Typhoon Dispositif - Тайфун Устройство - Typhoon Dispositivo - Typhoon (szerkezet) - Typhoon per dispositivo - - - Typhoon Ammo - Typhoon Munition - Typhoon de munición - Typhoon Amunicyjny - Typhoon Muniční - Typhoon Munitions - Тайфун Боеприпасы - Typhoon Munições - Typhoon (lőszerszállító) - Typhoon di rifornimento munizioni - - - Typhoon Fuel - Typhoon Treibstoff - Typhoon de combustible - Typhoon Cysterna - Typhoon Cisterna - Typhoon Citerne - Тайфун Заправщик - Typhoon Combustível - Typhoon (üzemanyag-szállító) - Typhoon di rifornimento carburante - - - Typhoon Repair - Typhoon Instandsetzung - Typhoon de reparación - Typhoon Naprawczy - Typhoon Opravárenský - Typhoon Réparation - Тайфун Ремонтный - Typhoon Reparador - Typhoon (szerelő-jármű) - Typhoon riparatore - - - Typhoon Medical - Typhoon Sanitäter - Typhoon médico - Typhoon Medyczny - Typhoon Zdravotnický - Typhoon Sanitaire - Тайфун Медицинский - Typhoon Médico - Typhoon (egészségügyi) - Typhoon medico - - - RAH-66 Comanche - RAH-66 Comanche - RAH-66 Comanche - RAH-66 Comanche - RAH-66 Comanche - RAH-66 Commanche - RAH-66 Команч - RAH-66 Comanche - RAH-66 Comanche - RAH-66 Comanche - - - MH-6 Little Bird - MH-6 Little Bird - MH-6 Litte Bird - MH-6 Little Bird - MH-6 Little Bird - MH-6 Little Bird - MH-6 Little Bird - MH-6 Little Bird - MH-6 Little Bird - MH-6 Little Bird - - - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - - - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - - - CH-47I Chinook (unarmed) - CH-47I Chinook (unbewaffnet) - CH-47I Chinnok (Desarmado) - CH-47I Chinook (nieuzbrojony) - CH-47I Chinook (невооруженный) - CH-47I Chinook (Neozbrojený) - - - A-10D Thunderbolt II - A-10D Thunderbolt II - A-10D Thunderbolt II - A-10D Thunderbolt II - A-10D Thunderbolt II - A-10D Thunderbolt II - A-10D Тандерболт II - A-10D Thunderbolt II - A-10D Thunderbolt II - A-10D Thunderbolt II - - - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - - - AW159 Wildcat (unarmed) - AW159 Wildcat (unbewaffnet) - AW159 Wildcat (desarmado) - AW159 Wildcat (nieuzbrojony) - AW159 Wildcat (neozbrojený) - AW159 Wildcat (non-armé) - AW159 Wildcat (невооруженный) - AW159 Wildcat (desarmado) - AW159 Wildcat (fegyvertelen) - AW159 Wildcat (disarmato) - - - AW101 Merlin - AW101 Merlin - AW101 Merlin - AW101 Merlin - AW101 Merlin - AW101 Merlin - AW101 Мерлин - AW101 Merlin - AW101 Merlin - AW101 Merlin - - - L-159 ALCA (CAS) - L-159 ALCA (CAS) - L-159 ALCA (CAS) - L-159 ALCA (CAS) - L-159 ALCA (CAS) - L-159 ALCA (CAS) - L-159 Альбатрос (CAS) - L-159 ALCA (CAS) - L-159 ALCA (CAS) - L-159 ALCA (CAS) - - - L-159 ALCA (AA) - L-159 ALCA (AA) - L-159 ALCA (AA) - L-159 ALCA (AA) - L-159 ALCA (AA) - L-159 ALCA (AA) - L-159 Альбатрос (AA) - L-159 ALCA (ВВ) - L-159 ALCA (AA) - L-159 ALCA (AA) - - - Ka-60 Kasatka - Ka-60 Kasatka - Ka-60 Kasatka - Ka-60 Kasatka - Ka-60 Kasatka - Ka-60 Kasatka - Ka-60 Касатка - Ka-60 Kasatka - Ka-60 Kasatka - Ka-60 Kasatka - - - Ka-60 Kasatka (unarmed) - Ka-60 Kasatka (unbewaffnet) - Ka-60 Kasatka (desarmado) - Ka-60 Kasatka (nieuzbrojony) - Ka-60 Kasatka (neozbrojená) - Ka-60 Kasatka (non-armé) - Ka-60 Касатка (невооруженный) - Ka-60 Kasatka (desarmado) - Ka-60 Kasatka (fegyvertelen) - Ka-60 Kasatka (disarmato) - - - Yak-130 - Yak-130 - Yak-130 - Jak-130 - Jak-130 - Yak-130 - Як-130 - Yak-130 - Jak-130 - Yak-130 - - - MD 500 - MD 500 - MD 500 - MD 500 - MD 500 - MD 500 - MD 500 - MD 500 - MD 500 - MD 500 - - - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - - - M18A1 Claymore - M18A1 Claymore - M18A1 Claymore - Mina kierunkowa M18A1 Claymore - M18A1 Mina Claymore - M18A1 Claymore Mine antipersonnel à effet dirigé - M18A1 Клеймор - M18A1 Claymore - M18A1 Claymore akna - M18A1 Claymore Mina antiuomo - - - M183 Demolition Charge Assembly - M183 Geballte Sprengladung - Conjunto de carga de demolición M183 - Ładunek burzący M183 - M183 Demoliční nálož - M183 Charge de Démolition - M183 Комплектный подрывной заряд - M183 Sacola de Demolição - M183 romboló töltet - M183 Demolition Charge Assembly - - - M112 Demolition Block - M112 Sprengladung - Bloque de demolición M112 - Ładunek burzący M112 - M112 Výbušná nálož - Pétard M112 - M112 подрывной заряд - M112 Carga de Demolição - M112 romboló töltet - M112 Demolition Block - - - M67 Fragmentation Grenade - M67 Splittergranate - Granada de fragmentación M67 - Granat obronny M67 - M67 Granát - M67 Grenade à fragmentation - M67 ручная осколочная граната - M67 Granada de fragmentação - M67 repeszgránát - M67 Granata a frammentazione - - - M83 Smoke Grenade (White) - M83 Rauchgranate (Weiss) - Granada de humo M83 (Blanco) - Granat dymny M83 (Biały) - M83 Kouřový Granát (Bílý) - M83 Grenade fumigène (Blanche) - M83 дымовой гранаты (Белый) - M83 Granada de fumaça (Branca) - M83 füstgránát (Fehér) - M83 Granata fumogena (Bianco) - - - M18 Smoke Grenade (Blue) - M18 Rauchgranate (Blau) - Granada de humo M18 (Azul) - Granat dymny M18 (Niebieski) - M18 Kouřový Granát (Modrý) - M18 Grenade fumigène (Bleue) - M18 дымовой гранаты (Синий) - M18 Granada de fumaça (Azul) - M18 füstgránát (Kék) - M18 Granata fumogena (Blu) - - - M18 Smoke Grenade (Green) - M18 Rauchgranate (Grün) - Granada de humo M18 (Verde) - Granat dymny M18 (Zielony) - M18 Kouřový Granát (Zelený) - M18 Grenade fumigène (Verte) - M18 дымовой гранаты (Зелёный) - M18 Granada de fumaça (Verde) - M18 füstgránát (Zöld) - M18 Granata fumogena (Verde) - - - M18 Smoke Grenade (Orange) - M18 Rauchgranate (Orange) - Granada de humo M18 (Naranja) - Granat dymny M18 (Pomarańczowy) - M18 Kouřový Granát (Oranžový) - M18 Grenade fumigène (Orange) - M18 дымовой гранаты (Оранжевый) - M18 Granada de fumaça (Laranja) - M18 füstgránát (Narancssárga) - M18 Granata fumogena (Arancione) - - - M18 Smoke Grenade (Purple) - M18 Rauchgranate (Violett) - Granada de humo M18 (Púrpura) - Granat dymny M18 (Fioletowy) - M18 Kouřový Granát (Fialový) - M18 Grenade fumigène (Pourpre) - M18 дымовой гранаты (Пурпурный) - M18 Granada de fumaça (Roxa) - M18 füstgránát (Lila) - M18 Granata fumogena (Viola) - - - M18 Smoke Grenade (Red) - M18 Rauchgranate (Rot) - Granada de humo M18 (Rojo) - Granat dymny M18 (Czerwony) - M18 Kouřový Granát (Červený) - M18 Grenade fumigène (Rouge) - M18 дымовой гранаты (Красный) - M18 Granada de fumaça (Vermelha) - M18 füstgránát (Piros) - M18 Granata fumogena (Rosso) - - - M18 Smoke Grenade (Yellow) - M18 Rauchgranate (Gelb) - Granada de humo M18 (Amarillo) - Granat dymny M18 (Żółty) - M18 Kouřový Granát (Žlutý) - M18 Grenade fumigène (Jaune) - M183 дымовой гранаты (Жёлтые) - M18 Granada de fumaça (Amarela) - M18 füstgránát (Sárga) - M18 Granata fumogena (Giallo) - - - M15 Anti-Tank Mine - M15 Panzerabwehrmine - Mina antitanque M15 - Mina przeciwpancerna M15 - M15 Protitanková Mina - M15 Mine antichar - M15 противотанковая мина - M15 Mina anticarro - M15 harckocsiakna - M15 Mine anticarro - - - VS-50 Anti-Personnel Mine - VS-50 Antipersonenmine - Mina antipersona VS-50 - Mina przeciwpiechotna VS-50 - VS-50 Protipěchotní Mina - VS-50 Mine antipersonnel à pression - VS-50 Противопехотная мина - VS-50 Mina antipessoal - VS-50 gyalogsági taposóakna - VS-50 Mine antiuomo - - - M26 Anti-Personnel Bounding Mine - M26 Antipersonensprungmine - Mina antipersona M26 - Mina przeciwpiechotna M26 - M26 Šrapnelová Mina - M26 Mine antipersonnel bondissante - M26 Противопехотная мина - M26 Mina saltadora antipessoal - M26 gyalogsági ugróakna - M26 Mine saltanti antiuomo - - - PMR-3 Anti-Personnel Tripwire Mine - PMR-3 Antipersonenstolperdrahtmine - Mina antipersona de alambre PMR-3 - Mina przeciwpiechotna PMR-3 - PMR-3 Nástražná Mina - PMR-3 Mine antipersonnel à traction - PMR-3 Противопехотная мина - PMR-3 Mina antipessoal (armadilha) - PMR-3 botlódrótos gyalogsági akna - PMR-3 Mine antiuomo - - - P99 - P99 - - - MP-443 Grach - MP-443 Grach - - - ACP-C2 - ACP-C2 - - - FNX-45 Tactical - FNX-45 Tactical - - - Chiappa Rhino 60DS - Chiappa Rhino 60DS - - - Taurus Judge - Taurus Judge - - - NLAW - NLAW - - - RPG-32 - RPG-32 - - - Mini-Spike (AA) - Mini-Spike (AA) - - - Mini-Spike (AT) - Mini-Spike (AT) - - - MX - MX - - - MX (Black) - MX (Black) - - - MXC - MXC - - - MXC (Black) - MXC (Black) - - - MX 3GL - MX 3GL - - - MX 3GL (Black) - MX 3GL (Black) - - - MX LSW - MX LSW - - - MX LSW (Black) - MX LSW (Black) - - - MXM - MXM - - - MXM (Black) - MXM (Black) - - - KT2002 Katiba - KT2002 Katiba - - - KT2002C Katiba - KT2002C Katiba - - - KT2002 Katiba KGL - KT2002 Katiba KGL - - - F2000 (Camo) - F2000 (Camo) - - - F2000 - F2000 - - - F2000 Tactical (Camo) - F2000 Tactical (Camo) - - - F2000 Tactical - F2000 Tactical - - - F2000 EGLM (Camo) - F2000 EGLM (Camo) - - - F2000 EGLM - F2000 EGLM - - - TAR-21 - TAR-21 - - - CTAR-21 - CTAR-21 - - - TAR-21 EGLM - TAR-21 EGLM - - - Vector SMG - Vector SMG - - - Scorpion Evo 3 A1 - Scorpion Evo 3 A1 - - - CPW - CPW - - - RFB SDAR - RFB SDAR - - - Stoner 99 LMG - Stoner 99 LMG - - - Negev NG7 - Negev NG7 - - - Mk14 Mod 1 EBR - Mk14 Mod 1 EBR - - - GM6 Lynx - GM6 Lynx - - - GM6 Lynx (Camo) - GM6 Lynx (Camo) - - - M200 Intervention - M200 Intervention - - - M200 Intervention (Camo) - M200 Intervention (Camo) - - - VS-121 - VS-121 - - - - TODO: MAR-10 .338 - - - TODO: MAR-10 .338 (Black) - - - TODO: MAR-10 .338 (Camo) - - - TODO: MAR-10 .338 (Sand) - - - - TODO: Mk-I EMR 7.62 mm - - - TODO: Mk-I EMR 7.62 mm (Black) - - - TODO: Mk-I EMR 7.62 mm (Khaki) - - - TODO: Mk-I EMR 7.62 mm (Sand) - - - TODO: Mk-I EMR 7.62 mm (Camo) - - - TODO: Mk-I EMR 7.62 mm (Woodland) - - - TODO: NATO DMR (provisional) spotter - - - - TODO: ASP-1 Kir 12.7 mm - - - TODO: ASP-1 Kir 12.7 mm (Black) - - - TODO: ASP-1 Kir 12.7 mm (Tan) - - - - TODO: Cyrus 9.3 mm - - - TODO: Cyrus 9.3 mm (Black) - - - TODO: Cyrus 9.3 mm (Hex) - - - TODO: Cyrus 9.3 mm (Tan) - - - - TODO: Mk14 7.62 mm - - - TODO: Mk14 7.62 mm (Camo) - - - TODO: Mk14 7.62 mm (Olive) - - - - TODO: Navid 9.3 mm - - - TODO: Navid 9.3 mm (Hex) - - - TODO: Navid 9.3 mm (Tan) - - - - TODO: SPMG .338 - - - TODO: SPMG .338 (MTP) - - - TODO: SPMG .338 (Black) - - - TODO: SPMG .338 (Sand) - - - - + + + XM312 + XM312 + XM312 + XM312 + XM312 + XM312 + XM312 + XM312 + XM312 + XM312A + + + XM312A + XM312A + XM312 + XM312A + XM312A + XM312A + XM312A + XM312A + XM312A + XM312A + + + XM312 (High) + XM312 (Hoch) + XM312 (Alto) + XM312 (Haut) + XM312 (Vysoký) + XM312 (Wysoki) + XM312 (Высокий) + XM312 (Alta) + XM312 (Magasított) + XM312 (Alta) + + + XM307 + XM307 + XM307 + XM307 + XM307 + XM307 + XM307 + XM307 + XM307 + XM307 + + + XM307A + XM307A + XM307A + XM307A + XM307A + XM307A + XM307A + XM307A + XM307A + XM307A + + + XM307 (High) + XM307 (Hoch) + XM307 (Alto) + XM307 (Haut) + XM307 (Vysoký) + XM307 (Wysoki) + XM307 (Высокий) + XM307 (Alta) + XM307 (Magasított) + XM307 (Alta) + + + Mini-Spike Launcher (AT) + Mini-Spike Lenkflugkörper (AT) + Lanzador Mini-Spike (AT) + Poste de tir Mini-Spike (AC) + Mini-Spike Odpalovač (AT) + Wyrzutnia Mini-Spike (AT) + Mini-Spike Пусковое устройство (ПТРК) + Lança-mísseis Mini-Spike (AC) + Mini-Spike rakétarendszer (páncéltörő) + Lanciatore Mini-Spike (AC) + + + Mini-Spike Launcher (AA) + Mini-Spike Lenkflugkörper (AA) + Lanzador Mini-Spike (AA) + Poste de tir Mini-Spike (AA) + Mini-Spike Odpalovač (AA) + Wyrzutnia Mini-Spike (AA) + Mini-Spike Пусковое устройство (ВВ) + Lança-mísseis Mini-Spike (AA) + Mini-Spike rakétarendszer (légvédelmi) + Lanciatore Mini-Spike (AA) + + + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + + + YABHON-R3 (CAS) + YABHON-R3 (Luftnahunterstützung) + YABHON-R3 (CAS) + YABHON-R3 (CAS) + YABHON-R3 (CAS) + YABHON-R3 (штурмовик) + + + M-ATV + M-ATV + M-ATV + M-ATV + M-ATV + M-ATV + M-ATV + M-ATV + M-ATV + M-ATV + + + M-ATV (HMG) + M-ATV (SMG) + M-ATV (HMG) + M-ATV (CKM) + M-ATV (TK) + M-ATV (HMG) + M-ATV (Пулемет) + M-ATV (HMG) + M-ATV (HMG) + M-ATV (HMG) + + + M-ATV (GMG) + M-ATV (GMW) + M-ATV (GMG) + M-ATV (GMG) + M-ATV (Granátomet) + M-ATV (GMG) + M-ATV (Гранатомет) + M-ATV (GMG) + M-ATV (GMG) + M-ATV (GMG) + + + Merkava Mk IV M + Merkava Mk IV M + Merkava Mk IV M + Merkawa Mk IV M + Merkava Mk IV M + Merkava Mk IV M + Меркава Mk IV M + Merkava Mk IV M + Merkava Mk IV M + Merkava Mk IV M + + + Merkava Mk IV LIC + Merkava Mk IV LIC + Merkava Mk IV LIC + Merkawa Mk IV LIC + Merkava Mk IV LIC + Merkava Mk IV LIC + Меркава Mk IV LIC + Merkava Mk IV LIC + Merkava Mk IV LIC + Merkava Mk IV LIC + + + Sholef + Sholef + Sholef + Sholef + Sholef + Sholef + Шолеф + Sholef + Sholef + Sholef + + + Seara + Seara + Seara + Seara + Seara + Seara + Seara + Seara + Seara + Seara + + + Namer + Namer + Namer + Namer + Namer + Namer + Намер + Namer + Namer + Namer + + + Bardelas + Bardelas + Bardelas + Bardelas + Bardelas + Bardelas + Bardelas + Bardelas + Bardelas + Bardelas + + + Patria AMV + Patria AMV + Patria AMV + Patria AMV + Patria AMV + Patria AMV + Patria AMV + Patria AMV + Patria AMV + Patria AMV + + + Nemmera + Nemmera + Nemmera + Nemmera + Nemmera + Nemmera + Nemmera + Nemmera + Nemmera + Nemmera + + + HEMTT Transport + HEMTT Transport + HEMTT de transporte + HEMTT Transportowy + HEMTT Valník + HEMTT Transport + HEMTT Транспортный + HEMTT Transporte + HEMTT szállítójármű + HEMTT da trasporto + + + HEMTT Transport (covered) + HEMTT Transport (bedeckt) + HEMTT de transporte (cubierto) + HEMTT Transportowy (zakryty) + HEMTT Valník (krytý) + HEMTT Transport (bâché) + HEMTT Транспортный (крытый) + HEMTT Transporte (coberto) + HEMTT szállítójármű (ponyvás) + HEMTT da trasporto (coperto) + + + HEMTT + HEMTT + HEMTT + HEMTT + HEMTT + HEMTT Tracteur + HEMTT + HEMTT + HEMTT + HEMTT + + + HEMTT Container + HEMTT Container + HEMTT de contenedor + HEMTT Kontener + HEMTT Skříňový + HEMTT Conteneur + HEMTT Контейнер + HEMTT Contêiner + HEMTT Konténer + HEMTT portacontainer + + + HEMTT Medical + HEMTT Sanitäter + HEMTT médico + HEMTT Medyczny + HEMTT Zdravotnický + HEMTT Sanitaire + HEMTT Медицинский + HEMTT Médico + HEMTT (egészségügyi) + HEMTT Medico + + + HEMTT Ammo + HEMTT Munition + HEMTT de munición + HEMTT Amunicyjny + HEMTT Muniční + HEMTT Munitions + HEMTT Боеприпасы + HEMTT Munições + HEMTT (lőszerszállító) + HEMTT di rifornimento munizioni + + + HEMTT Fuel + HEMTT Treibstoff + HEMTT de combustible + HEMTT Cysterna + HEMTT Cisterna + HEMTT Citerne + HEMTT Заправщик + HEMTT Combustível + HEMTT (üzemanyag-szállító) + HEMTT di rifornimento carburante + + + HEMTT Repair + HEMTT Instandsetzung + HEMTT de reparación + HEMTT Naprawczy + HEMTT Opravárenský + HEMTT Réparation + HEMTT Ремонтный + HEMTT Reparador + HEMTT (szerelő-jármű) + HEMTT Riparatore + + + Fennek + Fennek + Fennek + Fennek + Fennek + Fennek + Феннек + Fennek + Fennek + Fennek + + + Fennek (HMG) + Fennek (SMG) + Fennek (HMG) + Fennek (CKM) + Fennek (TK) + Fennek (HMG) + Феннек (Пулемет) + Fennek (HMG) + Fennek (HMG) + Fennek (HMG) + + + Fennek (GMG) + Fennek (GMW) + Fennek (GMG) + Fennek (GMG) + Fennek (granátomet) + Fennek (GMG) + Феннек (Гранатомет) + Fennek (GMG) + Fennek (GMG) + Fennek (GMG) + + + Leopard 2SG + Leopard 2SG + Leopard 2SG + Leopard 2SG + Leopard 2SG + Leopard 2SG + Леопард 2SG + Leopard 2SG + Leopard 2SG + Leopard 2SG + + + FV510 Warrior + FV510 Warrior + FV510 Warrior + FV510 Warrior + FV510 Warrior + FV510 Warrior + FV510 Уорриор + FV510 Warrior + FV510 Warrior + FV510 Warrior + + + Pandur II + Pandur II + Pandur II + Pandur II + Pandur II + Pandur II + Pandur II + Pandur II + Pandur II + Pandur II + + + KamAZ Transport + KamAZ Transport + KamAZ de transporte + KamAZ transportowy + KAMAZ Valník + KamAZ Transport + КамАЗ Траспортный + KamAZ Transporte + KamAZ szállítójármű + KamAZ da trasporto + + + KamAZ Transport (covered) + KamAZ Transport (bedeckt) + KamAZ de transporte (cubierto) + KamAZ Transportowy (zakryty) + KAMAZ Valník (krytý) + KamAZ Transport (bâché) + КамАЗ Траспортный (Крытый) + KamAZ Transporte (coberto) + KamAZ szállítójármű (ponyvás) + KamAZ da trasporto (coperto) + + + KamAZ Ammo + KamAZ Munition + KamAZ de munición + KamAZ Amunicyjny + KAMAZ Muniční + KamAZ Munitions + КамАЗ Боеприпасы + KamAZ Munições + KamAZ (lőszerszállító) + KamAZ di rifornimento munizioni + + + KamAZ Fuel + KamAZ Treibstoff + KamAZ de combustible + KamAZ cysterna + KAMAZ Cisterna + KamAZ Citerne + КамАЗ Заправщик + KamAZ Combustível + KamAZ (üzemanyag-szállító) + KamAZ di rifornimento carburante + + + KamAZ Repair + KamAZ Instandsetzung + KamAZ de reparación + KamAZ Naprawczy + KAMAZ Opravárenský + KamAZ Réparation + КамАЗ Ремонтный + KamAZ Reparador + KamAZ (szerelő-jármű) + KamAZ riparatore + + + KamAZ Medical + KamAZ Sanitäter + KamAZ médico + KamAZ Medyczny + KAMAZ Zdravotnický + KamAZ Sanitaire + КамАЗ Медицинский + KamAZ Médico + KamAZ (egészségügyi) + KamAZ Medico + + + Punisher + Punisher + Punisher + Punisher + Punisher + Punisher + Kаратель + Punisher + Punisher + Punisher + + + Punisher (HMG) + Punisher (SMG) + Punisher (HMG) + Punisher (CKM) + Punisher (TK) + Punisher (HMG) + Kаратель (Пулемет) + Punisher (HMG) + Punisher (HMG) + Punisher (HMG) + + + Punisher (GMG) + Punisher (GMW) + Punisher (GMG) + Punisher (CKM) + Punisher (granátomet) + Punisher (GMG) + Kаратель (Гранатомет) + Punisher (GMG) + Punisher (GMG) + Punisher (GMG) + + + T100 Black Eagle + T100 Black Eagle + T100 Black Eagle + T100 Black Eagle + T100 Black Eagle + T100 Black Eagle + T100 Черный Орел + T100 Black Eagle + T100 Black Eagle + T100 Black Eagle + + + 2S9 Sochor + 2S9 Sochor + 2S9 Sochor + 259 Sochor + 2S9 Sochor + 2S9 Sochor + 2S9 Сокор + 2S9 Sochor + 2S9 Sochor + 2S9 Sochor + + + BM-2T Stalker + BM-2T Stalker + BM-2T Stalker + BM-2T Stalker + BM-2T Stalker + BM-2T Stalker + БМ-2Т Сталкер + BM-2T Stalker + BM-2T Stalker + BM-2T Stalker + + + ZSU-35 Tigris + ZSU-35 Tigris + ZSU-35 Tigris + ZSU-35 Tigris + ZSU-35 Tigris + ZSU-35 Tigris + ЗСУ-35 Tigris + ZSU-35 Tigris + ZSU-35 Tigris + ZSU-35 Tigris + + + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + + + Typhoon Transport + Typhoon Transport + Typhoon de transporte + Typhoon Transportowy + Typhoon Valník + Typhoon Transport + Тайфун Транспортный + Typhoon Transporte + Typhoon szállítójármű + Typhoon da trasporto + + + Typhoon Transport (covered) + Typhoon Transport (bedeckt) + Typhoon de transporte (cubierto) + Typhoon Transportowy (przykryty) + Typhoon Valník (krytý) + Typhoon Transport (bâché) + Тайфун Транспортный (kрытый) + Typhoon Transporte (coberto) + Typhoon szállítójármű (ponyvás) + Typhoon da trasporto (coperto) + + + Typhoon Device + Typhoon Gerät + Typhoon de dispositivo + Typhoon Urządzenie + Typhoon Zařízení + Typhoon Dispositif + Тайфун Устройство + Typhoon Dispositivo + Typhoon (szerkezet) + Typhoon per dispositivo + + + Typhoon Ammo + Typhoon Munition + Typhoon de munición + Typhoon Amunicyjny + Typhoon Muniční + Typhoon Munitions + Тайфун Боеприпасы + Typhoon Munições + Typhoon (lőszerszállító) + Typhoon di rifornimento munizioni + + + Typhoon Fuel + Typhoon Treibstoff + Typhoon de combustible + Typhoon Cysterna + Typhoon Cisterna + Typhoon Citerne + Тайфун Заправщик + Typhoon Combustível + Typhoon (üzemanyag-szállító) + Typhoon di rifornimento carburante + + + Typhoon Repair + Typhoon Instandsetzung + Typhoon de reparación + Typhoon Naprawczy + Typhoon Opravárenský + Typhoon Réparation + Тайфун Ремонтный + Typhoon Reparador + Typhoon (szerelő-jármű) + Typhoon riparatore + + + Typhoon Medical + Typhoon Sanitäter + Typhoon médico + Typhoon Medyczny + Typhoon Zdravotnický + Typhoon Sanitaire + Тайфун Медицинский + Typhoon Médico + Typhoon (egészségügyi) + Typhoon medico + + + RAH-66 Comanche + RAH-66 Comanche + RAH-66 Comanche + RAH-66 Comanche + RAH-66 Comanche + RAH-66 Commanche + RAH-66 Команч + RAH-66 Comanche + RAH-66 Comanche + RAH-66 Comanche + + + MH-6 Little Bird + MH-6 Little Bird + MH-6 Litte Bird + MH-6 Little Bird + MH-6 Little Bird + MH-6 Little Bird + MH-6 Little Bird + MH-6 Little Bird + MH-6 Little Bird + MH-6 Little Bird + + + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + + + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + + + CH-47I Chinook (unarmed) + CH-47I Chinook (unbewaffnet) + CH-47I Chinnok (Desarmado) + CH-47I Chinook (nieuzbrojony) + CH-47I Chinook (невооруженный) + CH-47I Chinook (Neozbrojený) + + + A-10D Thunderbolt II + A-10D Thunderbolt II + A-10D Thunderbolt II + A-10D Thunderbolt II + A-10D Thunderbolt II + A-10D Thunderbolt II + A-10D Тандерболт II + A-10D Thunderbolt II + A-10D Thunderbolt II + A-10D Thunderbolt II + + + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + + + AW159 Wildcat (unarmed) + AW159 Wildcat (unbewaffnet) + AW159 Wildcat (desarmado) + AW159 Wildcat (nieuzbrojony) + AW159 Wildcat (neozbrojený) + AW159 Wildcat (non-armé) + AW159 Wildcat (невооруженный) + AW159 Wildcat (desarmado) + AW159 Wildcat (fegyvertelen) + AW159 Wildcat (disarmato) + + + AW101 Merlin + AW101 Merlin + AW101 Merlin + AW101 Merlin + AW101 Merlin + AW101 Merlin + AW101 Мерлин + AW101 Merlin + AW101 Merlin + AW101 Merlin + + + L-159 ALCA (CAS) + L-159 ALCA (CAS) + L-159 ALCA (CAS) + L-159 ALCA (CAS) + L-159 ALCA (CAS) + L-159 ALCA (CAS) + L-159 Альбатрос (CAS) + L-159 ALCA (CAS) + L-159 ALCA (CAS) + L-159 ALCA (CAS) + + + L-159 ALCA (AA) + L-159 ALCA (AA) + L-159 ALCA (AA) + L-159 ALCA (AA) + L-159 ALCA (AA) + L-159 ALCA (AA) + L-159 Альбатрос (AA) + L-159 ALCA (ВВ) + L-159 ALCA (AA) + L-159 ALCA (AA) + + + Ka-60 Kasatka + Ka-60 Kasatka + Ka-60 Kasatka + Ka-60 Kasatka + Ka-60 Kasatka + Ka-60 Kasatka + Ka-60 Касатка + Ka-60 Kasatka + Ka-60 Kasatka + Ka-60 Kasatka + + + Ka-60 Kasatka (unarmed) + Ka-60 Kasatka (unbewaffnet) + Ka-60 Kasatka (desarmado) + Ka-60 Kasatka (nieuzbrojony) + Ka-60 Kasatka (neozbrojená) + Ka-60 Kasatka (non-armé) + Ka-60 Касатка (невооруженный) + Ka-60 Kasatka (desarmado) + Ka-60 Kasatka (fegyvertelen) + Ka-60 Kasatka (disarmato) + + + Yak-130 + Yak-130 + Yak-130 + Jak-130 + Jak-130 + Yak-130 + Як-130 + Yak-130 + Jak-130 + Yak-130 + + + MD 500 + MD 500 + MD 500 + MD 500 + MD 500 + MD 500 + MD 500 + MD 500 + MD 500 + MD 500 + + + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + + + M18A1 Claymore + M18A1 Claymore + M18A1 Claymore + Mina kierunkowa M18A1 Claymore + M18A1 Mina Claymore + M18A1 Claymore Mine antipersonnel à effet dirigé + M18A1 Клеймор + M18A1 Claymore + M18A1 Claymore akna + M18A1 Claymore Mina antiuomo + + + M183 Demolition Charge Assembly + M183 Geballte Sprengladung + Conjunto de carga de demolición M183 + Ładunek burzący M183 + M183 Demoliční nálož + M183 Charge de Démolition + M183 Комплектный подрывной заряд + M183 Sacola de Demolição + M183 romboló töltet + M183 Demolition Charge Assembly + + + M112 Demolition Block + M112 Sprengladung + Bloque de demolición M112 + Ładunek burzący M112 + M112 Výbušná nálož + Pétard M112 + M112 подрывной заряд + M112 Carga de Demolição + M112 romboló töltet + M112 Demolition Block + + + M67 Fragmentation Grenade + M67 Splittergranate + Granada de fragmentación M67 + Granat obronny M67 + M67 Granát + M67 Grenade à fragmentation + M67 ручная осколочная граната + M67 Granada de fragmentação + M67 repeszgránát + M67 Granata a frammentazione + + + M83 Smoke Grenade (White) + M83 Rauchgranate (Weiss) + Granada de humo M83 (Blanco) + Granat dymny M83 (Biały) + M83 Kouřový Granát (Bílý) + M83 Grenade fumigène (Blanche) + M83 дымовая граната (Белый) + M83 Granada de fumaça (Branca) + M83 füstgránát (Fehér) + M83 Granata fumogena (Bianco) + + + M18 Smoke Grenade (Blue) + M18 Rauchgranate (Blau) + Granada de humo M18 (Azul) + Granat dymny M18 (Niebieski) + M18 Kouřový Granát (Modrý) + M18 Grenade fumigène (Bleue) + M18 дымовая граната (Синий) + M18 Granada de fumaça (Azul) + M18 füstgránát (Kék) + M18 Granata fumogena (Blu) + + + M18 Smoke Grenade (Green) + M18 Rauchgranate (Grün) + Granada de humo M18 (Verde) + Granat dymny M18 (Zielony) + M18 Kouřový Granát (Zelený) + M18 Grenade fumigène (Verte) + M18 дымовая граната (Зелёный) + M18 Granada de fumaça (Verde) + M18 füstgránát (Zöld) + M18 Granata fumogena (Verde) + + + M18 Smoke Grenade (Orange) + M18 Rauchgranate (Orange) + Granada de humo M18 (Naranja) + Granat dymny M18 (Pomarańczowy) + M18 Kouřový Granát (Oranžový) + M18 Grenade fumigène (Orange) + M18 дымовая граната (Оранжевый) + M18 Granada de fumaça (Laranja) + M18 füstgránát (Narancssárga) + M18 Granata fumogena (Arancione) + + + M18 Smoke Grenade (Purple) + M18 Rauchgranate (Violett) + Granada de humo M18 (Púrpura) + Granat dymny M18 (Fioletowy) + M18 Kouřový Granát (Fialový) + M18 Grenade fumigène (Pourpre) + M18 дымовая граната (Пурпурный) + M18 Granada de fumaça (Roxa) + M18 füstgránát (Lila) + M18 Granata fumogena (Viola) + + + M18 Smoke Grenade (Red) + M18 Rauchgranate (Rot) + Granada de humo M18 (Rojo) + Granat dymny M18 (Czerwony) + M18 Kouřový Granát (Červený) + M18 Grenade fumigène (Rouge) + M18 дымовая граната (Красный) + M18 Granada de fumaça (Vermelha) + M18 füstgránát (Piros) + M18 Granata fumogena (Rosso) + + + M18 Smoke Grenade (Yellow) + M18 Rauchgranate (Gelb) + Granada de humo M18 (Amarillo) + Granat dymny M18 (Żółty) + M18 Kouřový Granát (Žlutý) + M18 Grenade fumigène (Jaune) + M183 дымовая граната (Жёлтые) + M18 Granada de fumaça (Amarela) + M18 füstgránát (Sárga) + M18 Granata fumogena (Giallo) + + + M15 Anti-Tank Mine + M15 Panzerabwehrmine + Mina antitanque M15 + Mina przeciwpancerna M15 + M15 Protitanková Mina + M15 Mine antichar + M15 противотанковая мина + M15 Mina anticarro + M15 harckocsiakna + M15 Mine anticarro + + + VS-50 Anti-Personnel Mine + VS-50 Antipersonenmine + Mina antipersona VS-50 + Mina przeciwpiechotna VS-50 + VS-50 Protipěchotní Mina + VS-50 Mine antipersonnel à pression + VS-50 Противопехотная мина + VS-50 Mina antipessoal + VS-50 gyalogsági taposóakna + VS-50 Mine antiuomo + + + M26 Anti-Personnel Bounding Mine + M26 Antipersonensprungmine + Mina antipersona M26 + Mina przeciwpiechotna M26 + M26 Šrapnelová Mina + M26 Mine antipersonnel bondissante + M26 Противопехотная мина + M26 Mina saltadora antipessoal + M26 gyalogsági ugróakna + M26 Mine saltanti antiuomo + + + PMR-3 Anti-Personnel Tripwire Mine + PMR-3 Antipersonenstolperdrahtmine + Mina antipersona de alambre PMR-3 + Mina przeciwpiechotna PMR-3 + PMR-3 Nástražná Mina + PMR-3 Mine antipersonnel à traction + PMR-3 Противопехотная мина + PMR-3 Mina antipessoal (armadilha) + PMR-3 botlódrótos gyalogsági akna + PMR-3 Mine antiuomo + + + P99 + P99 + + + MP-443 Grach + MP-443 Grach + + + ACP-C2 + ACP-C2 + + + FNX-45 Tactical + FNX-45 Tactical + + + Chiappa Rhino 60DS + Chiappa Rhino 60DS + + + Taurus Judge + Taurus Judge + + + NLAW + NLAW + + + RPG-32 + RPG-32 + + + Mini-Spike (AA) + Mini-Spike (AA) + + + Mini-Spike (AT) + Mini-Spike (AT) + + + MX + MX + + + MX (Black) + MX (Black) + + + MXC + MXC + + + MXC (Black) + MXC (Black) + + + MX 3GL + MX 3GL + + + MX 3GL (Black) + MX 3GL (Black) + + + MX LSW + MX LSW + + + MX LSW (Black) + MX LSW (Black) + + + MXM + MXM + + + MXM (Black) + MXM (Black) + + + KT2002 Katiba + KT2002 Katiba + + + KT2002C Katiba + KT2002C Katiba + + + KT2002 Katiba KGL + KT2002 Katiba KGL + + + F2000 (Camo) + F2000 (Camo) + + + F2000 + F2000 + + + F2000 Tactical (Camo) + F2000 Tactical (Camo) + + + F2000 Tactical + F2000 Tactical + + + F2000 EGLM (Camo) + F2000 EGLM (Camo) + + + F2000 EGLM + F2000 EGLM + + + TAR-21 + TAR-21 + + + CTAR-21 + CTAR-21 + + + TAR-21 EGLM + TAR-21 EGLM + + + Vector SMG + Vector SMG + + + Scorpion Evo 3 A1 + Scorpion Evo 3 A1 + + + CPW + CPW + + + RFB SDAR + RFB SDAR + + + Stoner 99 LMG + Stoner 99 LMG + + + Negev NG7 + Negev NG7 + + + Mk14 Mod 1 EBR + Mk14 Mod 1 EBR + + + GM6 Lynx + GM6 Lynx + + + GM6 Lynx (Camo) + GM6 Lynx (Camo) + + + M200 Intervention + M200 Intervention + + + M200 Intervention (Camo) + M200 Intervention (Camo) + + + VS-121 + VS-121 + + + TODO: MAR-10 .338 + + + TODO: MAR-10 .338 (Black) + + + TODO: MAR-10 .338 (Camo) + + + TODO: MAR-10 .338 (Sand) + + + TODO: Mk-I EMR 7.62 mm + + + TODO: Mk-I EMR 7.62 mm (Black) + + + TODO: Mk-I EMR 7.62 mm (Khaki) + + + TODO: Mk-I EMR 7.62 mm (Sand) + + + TODO: Mk-I EMR 7.62 mm (Camo) + + + TODO: Mk-I EMR 7.62 mm (Woodland) + + + TODO: NATO DMR (provisional) spotter + + + TODO: ASP-1 Kir 12.7 mm + + + TODO: ASP-1 Kir 12.7 mm (Black) + + + TODO: ASP-1 Kir 12.7 mm (Tan) + + + TODO: Cyrus 9.3 mm + + + TODO: Cyrus 9.3 mm (Black) + + + TODO: Cyrus 9.3 mm (Hex) + + + TODO: Cyrus 9.3 mm (Tan) + + + TODO: Mk14 7.62 mm + + + TODO: Mk14 7.62 mm (Camo) + + + TODO: Mk14 7.62 mm (Olive) + + + TODO: Navid 9.3 mm + + + TODO: Navid 9.3 mm (Hex) + + + TODO: Navid 9.3 mm (Tan) + + + TODO: SPMG .338 + + + TODO: SPMG .338 (MTP) + + + TODO: SPMG .338 (Black) + + + TODO: SPMG .338 (Sand) + + + \ No newline at end of file diff --git a/addons/reload/stringtable.xml b/addons/reload/stringtable.xml index 40f36c6549..2aa5197e2f 100644 --- a/addons/reload/stringtable.xml +++ b/addons/reload/stringtable.xml @@ -1,12 +1,14 @@ - - + + Check ammo on weapon reload + Проверять боезапас при перезарядке Check the ammo in your new magazine on magazine reload. + Проверяет количество патронов в новом магазине при перезарядке. Check Ammo @@ -34,9 +36,11 @@ Link belt + Сцепить ленты Linking belt... + Сцепка лент ... - + \ No newline at end of file diff --git a/addons/reloadlaunchers/stringtable.xml b/addons/reloadlaunchers/stringtable.xml index 6677153419..664f594acd 100644 --- a/addons/reloadlaunchers/stringtable.xml +++ b/addons/reloadlaunchers/stringtable.xml @@ -1,24 +1,26 @@  - + - - - Load launcher - Panzerabwehr laden - - - Loading launcher ... - Panzerabwehr wird geladen ... - - - Launcher loaded - Panzerabwehr geladen - - - - Load %1 - Lade %1 - - - - + + + Load launcher + Panzerabwehr laden + Зарядить ПУ + + + Loading launcher ... + Panzerabwehr wird geladen ... + Зарядка ПУ ... + + + Launcher loaded + Panzerabwehr geladen + ПУ заряжено + + + Load %1 + Lade %1 + Загрузка %1 + + + \ No newline at end of file diff --git a/addons/respawn/stringtable.xml b/addons/respawn/stringtable.xml index 59a9b2b31c..0f1ae731f5 100644 --- a/addons/respawn/stringtable.xml +++ b/addons/respawn/stringtable.xml @@ -1,21 +1,26 @@  + Deploy in 5 seconds ... Wird in 5 Sekunden errichtet ... + Возрождение через 5 секунд ... Rallypoint deployed Rallypoint errichtet + Точка сбора установлена Teleported to Base Zur Basis teleportiert + Телепорт на базу Teleported to Rallypoint Zum Rallypoint teleportiert + Телепорт на точку сбора - + \ No newline at end of file diff --git a/addons/switchunits/stringtable.xml b/addons/switchunits/stringtable.xml index 842bf89127..81cde4b007 100644 --- a/addons/switchunits/stringtable.xml +++ b/addons/switchunits/stringtable.xml @@ -1,4 +1,5 @@  + @@ -12,10 +13,10 @@ This unit is too close to the enemy. Diese Einheit ist zu nah am Feind. - Юнит слишком близок к противнику + Юнит слишком близок к противнику. Tato jednotka je moc blízko k nepříteli. Ta jednostka jest zbyt blisko przeciwnika. Esta unidad está demasiado cerca del enemigo. - + \ No newline at end of file diff --git a/addons/weaponselect/stringtable.xml b/addons/weaponselect/stringtable.xml index 3a39d59396..0e7d881413 100644 --- a/addons/weaponselect/stringtable.xml +++ b/addons/weaponselect/stringtable.xml @@ -1,12 +1,14 @@  - + Display text on grenade throw + Показывать текст при броске Display a hint or text on grenade throw. + Показывать текст или подсказку при броске гранаты. Select Pistol @@ -226,7 +228,7 @@ Už nejsou žádné ostatní granáty Não há outras granadas restantes Nessun'altra granata rimanente. - Невзрывоопасные гранаты закончились + Летальные гранаты закончились No grenade selected diff --git a/addons/wep_javelin/stringtable.xml b/addons/wep_javelin/stringtable.xml index 4068d6f0a6..d257c15e04 100644 --- a/addons/wep_javelin/stringtable.xml +++ b/addons/wep_javelin/stringtable.xml @@ -1,24 +1,24 @@ - - + + - - - Lock Target (Hold) - Lock Target (Hold) - Lock Target (Hold) - Lock Target (Hold) - Lock Target (Hold) - Lock Target (Hold) - Lock Target (Hold) - - - Cycle Fire Mode - Cycle Fire Mode - Cycle Fire Mode - Cycle Fire Mode - Cycle Fire Mode - Cycle Fire Mode - Cycle Fire Mode - - - + + + Lock Target (Hold) + Lock Target (Hold) + Lock Target (Hold) + Lock Target (Hold) + Lock Target (Hold) + Lock Target (Hold) + Захватить цель (удерживать) + + + Cycle Fire Mode + Cycle Fire Mode + Cycle Fire Mode + Cycle Fire Mode + Cycle Fire Mode + Cycle Fire Mode + Переключение режимов огня + + + \ No newline at end of file diff --git a/addons/winddeflection/stringtable.xml b/addons/winddeflection/stringtable.xml index b52100046f..1fb382fd3e 100644 --- a/addons/winddeflection/stringtable.xml +++ b/addons/winddeflection/stringtable.xml @@ -1,32 +1,38 @@ - - - - - - Wind Information - Informacje o wietrze - Información del viento - - - Direction: %1 - Kierunek: %1 - Dirección: %1 - - - Speed: %1 m/s - Prędkość: %1 - Velocidad: %1 m/s - - - Weather Information - Informacje o pogodzie - Información Meteorológica - - - Humidity: %1% - Wilgotność: %1 - Humedad: %1% - - - - + + + + + + + Wind Information + Informacje o wietrze + Información del viento + Ветер + + + Direction: %1 + Kierunek: %1 + Dirección: %1 + Направление: %1 + + + Speed: %1 m/s + Prędkość: %1 + Velocidad: %1 m/s + Скорость: %1 м/с + + + Weather Information + Informacje o pogodzie + Información Meteorológica + Погода + + + Humidity: %1% + Wilgotność: %1 + Humedad: %1% + Влажность: %1% + + + + \ No newline at end of file From a4b9090e347b1c6d6aa01ad134ed076598930138 Mon Sep 17 00:00:00 2001 From: nic547 <32dominic.ri@gmail.com> Date: Fri, 10 Apr 2015 21:01:49 +0200 Subject: [PATCH 100/214] Added new ammotypes for both types of .388 ammo --- addons/magazines/CfgAmmo.hpp | 14 +++++++++ addons/magazines/CfgMagazines.hpp | 32 +++++++++++++++++++++ addons/magazines/CfgWeapons.hpp | 14 +++++++++ addons/magazines/stringtable.xml | 48 +++++++++++++++++++++++++++++++ 4 files changed, 108 insertions(+) diff --git a/addons/magazines/CfgAmmo.hpp b/addons/magazines/CfgAmmo.hpp index 2e1e9fceea..e04f793cb6 100644 --- a/addons/magazines/CfgAmmo.hpp +++ b/addons/magazines/CfgAmmo.hpp @@ -107,4 +107,18 @@ class CfgAmmo { //typicalspeed = 792; //airfriction = -0.0008577; }; + + /* .338 Lapua Magnum */ + + // IR Dim + class B_338_Ball; + class ACE_B_338_Ball_Tracer_Dim: B_338_Ball { + nvgOnly = 1; + }; + + /* .338 Norma Magnum */ + class B_338_NM_Ball; + class ACE_B_338_NM_Ball_Tracer_Dim: B_338_NM_Ball { + nvgOnly = 1; + }; }; diff --git a/addons/magazines/CfgMagazines.hpp b/addons/magazines/CfgMagazines.hpp index 86cb6d9e1b..bfdf327ee4 100644 --- a/addons/magazines/CfgMagazines.hpp +++ b/addons/magazines/CfgMagazines.hpp @@ -136,4 +136,36 @@ class CfgMagazines { displayNameShort = "$STR_ACE_20Rnd_762x51_mag_APNameShort"; descriptionShort = "$STR_ACE_20Rnd_762x51_mag_APDescription"; }; + class 10Rnd_338_Mag; + /* .338 Lapua Magnum */ + class ACE_10Rnd_338_Mag_Tracer: 10Rnd_338_Mag { + author="$STR_ACE_Common_ACETeam" + displayName = "$STR_ACE_10Rnd_388_Mag_TracerName"; + displayNameShort = "$STR_ACE_10Rnd_388_Mag_TracerNameShort"; + descriptionShort = "$STR_ACE_10Rnd_388_Mag_TracerDescription"; + tracersEvery = 1; + }; + class ACE_10Rnd_338_Mag_Tracer_Dim: ACE_10Rnd_338_Mag_Tracer { + author="$STR_ACE_Common_ACETeam" + ammo = "ACE_B_338_Ball_Tracer_Dim" + displayName = "$STR_ACE_10Rnd_388_Mag_Tracer_DimName"; + displayNameShort = "$STR_ACE_10Rnd_388_Mag_Tracer_DimNameShort"; + descriptionShort = "$STR_ACE_10Rnd_388_Mag_Tracer_DimDescription"; + }; + /* .333 Norma Magnum */ + class 130Rnd_338_Mag; + class ACE_130Rnd_338_Mag_Tracer: 130Rnd_338_Mag { + author="$STR_ACE_Common_ACETeam" + displayName = "$STR_ACE_130Rnd_388_Mag_TracerName"; + displayNameShort = "$STR_ACE_130Rnd_388_Mag_TracerNameShort"; + descriptionShort = "$STR_ACE_130Rnd_388_Mag_TracerDescription"; + tracersEvery = 1; + }; + class ACE_130Rnd_338_Mag_Tracer_Dim: ACE_130Rnd_338_Mag_Tracer { + author="$STR_ACE_Common_ACETeam" + ammo = "ACE_B_338_NM_Ball_Tracer_Dim" + displayName = "$STR_ACE_130Rnd_388_Mag_Tracer_DimName"; + displayNameShort = "$STR_ACE_130Rnd_388_Mag_Tracer_DimNameShort"; + descriptionShort = "$STR_ACE_130Rnd_388_Mag_Tracer_DimDescription"; + } }; diff --git a/addons/magazines/CfgWeapons.hpp b/addons/magazines/CfgWeapons.hpp index 46344d5f06..fd6243089b 100644 --- a/addons/magazines/CfgWeapons.hpp +++ b/addons/magazines/CfgWeapons.hpp @@ -103,6 +103,20 @@ class CfgWeapons { }; }; }; + + class DMR_02_base_F: Rifle_Long_Base_F { + magazines[] += { + "ACE_10Rnd_338_Mag_Tracer", + "ACE_10Rnd_338_Mag_Tracer_Dim" + }; + }; + + class MMG_02_base_F: Rifle_Long_Base_F { + magazines[] += { + "ACE_130Rnd_338_Mag_Tracer", + "ACE_130Rnd_338_Mag_Tracer_Dim" + }; + }; /* Assault Rifles */ diff --git a/addons/magazines/stringtable.xml b/addons/magazines/stringtable.xml index c8f652fa39..b81fe3d3ed 100644 --- a/addons/magazines/stringtable.xml +++ b/addons/magazines/stringtable.xml @@ -486,5 +486,53 @@ Калибр: 7.62x51mm M118LR<br />Патронов: 20<br />Тип: M14 Calibro: 7.62x51mm M118LR<br />Munizioni:20<br />In uso su: M14 + + .338 LM 10Rnd Tracer Mag + .338 LM 10-Schuss-Magazin Leuchtspur + + + .338 LM Tracer + .338 LM Leuchtspur + + + Caliber: .338 Lapua Magnum Tracer<br />Rounds: 10<br />Used in: MAR-10 + Kaliber: .338 Lapua Magnum Leuchtspur<br />Schuss: 10<br />Verwendet für: MAR-10 + + + .338 LM 10Rnd IR-DIM Mag + .338 LM 10-Schuss-Magazin Leuchtspur IR-DIM + + + .338 LM IR-DIM + .338 LM IR-DIM + + + Caliber: .338 Lapua Magnum Tracer IR-DIM<br />Rounds: 10<br />Used in: MAR-10 + Kaliber: .338 Lapua Magnum Leuchtspur IR-DIM<br />Schuss: 10<br />Verwendet für: MAR-10 + + + .338 NM 130Rnd Tracer Belt + .338 NM 130-Schuss-Gurt Leuchtspur + + + .338 NM Tracer + .338 NM Leuchtspur + + + Caliber: .338 Norma Magnum Tracer<br />Rounds: 130<br />Used in: SPMG + Kaliber: .338 Norma Magnum Leuchtspur<br />Schuss: 130<br />Verwendet für: SPMG + + + .338 NM 130Rnd IR-DIM Belt + .338 NM 130-Schuss-Gurt Leuchtspur IR-DIM + + + .338 NM IR-DIM + .338 LM IR-DIM + + + Caliber: .338 Norma Magnum Tracer IR-DIM<br />Rounds: 130<br />Used in: SPMG + Kaliber: .338 Norma Magnum Leuchtspur IR-DIM<br />Schuss: 130<br />Verwendet für: SPMG + From d9e78e511eeaaf605b13ff755274de2aed49fe21 Mon Sep 17 00:00:00 2001 From: Riccardo Petricca Date: Fri, 10 Apr 2015 21:13:03 +0200 Subject: [PATCH 101/214] Added italian translation to the last terms. Added italian translation to the last added terms. --- addons/common/stringtable.xml | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index a5f5368cd0..b68347cdb3 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -276,6 +276,7 @@ Désactiver Menu Commande Выключить командное меню Parancsnoki menü kikapcsolása + Disabilita Menù di comando Unknown @@ -285,6 +286,7 @@ Neznámý Неизвестно Ismeretlen + Sconosciuto No Voice @@ -294,70 +296,85 @@ Žádný hlas Без голоса Nincs hang + Senza voce Akceptuj prośby Aceptar Peticiones Accept Requests Anfrage annehmen + Accetta Richieste Ignoruj prośby Rechazar Peticiones Decline Requests Anfrage ablehnen + Rifiuta Richieste Akceptuj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności. Acepta Peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones. Accept Requests send by other players. These can be requests to use / share equipment, perform certain actions. Anfragen anderer Spieler annehmen. Diese Anfragen können sich auf das Benutzen / Teilen von Equipment beziehen oder das Ausführen bestimmter Aktionen. + Accetta le richieste degli altri giocatori. Queste possono riguardare l'uso o la condivisione dell'equipaggiamento, o di determinate azioni. Ignoruj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności. Rechazar Peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones. Decline Requests send by other players. These can be requests to use / share equipment, perform certain actions. Anfragen anderer Spieler ablehnen. Diese Anfragen können sich auf das Benutzen / Teilen von Equipment beziehen oder das Ausführen bestimmter Aktionen. + Rifiuta le richieste degli altri giocatori. Queste possono riguardare l'uso o la condivisione dell'equipaggiamento, o di determinate azioni. Feedback icons Feedback-Icons + Icone informative Select the position of or disable the feedback icons on your screen. These icons will show to provide extra feedback on your character status and actions performed. Wähle die Position der Feedback-Icons aus oder deaktiviere Sie. Die Feedback-Icons zeigen den Status deiner Einheit an, oder die ausgeführte Aktion. + Seleziona la posizione o disabilita le icone informative sul tuo schermo. Queste saranno mostrate per fornire informazioni aggiuntive sullo stato o sulle azioni del giocatore. Progress bar location Position des Fortschrittsanzeige + Posizione della barra di avanzamento Set the desired location of the progress bar on your screen. Wähle die Position der Fortschrittsanzeige. + Modifica la posizione su schermo della barra di avanzamento. Hint Background color Hinweis Hintergrundfarbe + Sfondo dei Suggerimenti The color of the background from the ACE hints. Wähle die Hintergrundfarbe für ACE-Hinweise. + Il colore di sfondo dei suggerimenti dell'ACE. Hint text font color Hinweis Textfarbe + Testo dei Suggerimenti The color of the text font from the ACE hints. This color is the default color for all text displayed through the ACE Hint system, if the hint text has no other color specified. Wähle die Textfarbe für ACE-Hinweise. + Il colore del testo dei suggerimenti dell'ACE. Questo è il colore standard per tutti i caratteri mostrati dal sistema di suggerimenti dell'ACE, se questo non è altrimenti specificato. Banana Banane + Banana A banana is an edible fruit, botanically a berry, produced by several kinds of large herbaceous flowering plants in the genus Musa. Die Bananen (Musa) sind eine Pflanzengattung in der Familie der Bananengewächse (Musaceae) innerhalb der Einkeimblättrigen Pflanzen (Monokotyledonen). + Una banana è un frutto commestibile, nello specifico una bacca cuoiosa, prodotto da un gran numero di grandi pianti erbacee dotate di fiori, della famiglia delle Musaceae. - \ No newline at end of file + From 721898d9fb117297a73efc27475f287ba1503387 Mon Sep 17 00:00:00 2001 From: jaynus Date: Fri, 10 Apr 2015 13:57:44 -0700 Subject: [PATCH 102/214] Constraint dialogs working. --- addons/wep_javelin/RscInGameUI.hpp | 330 +++++++++--------- .../wep_javelin/functions/fnc_onOpticDraw.sqf | 4 +- .../wep_javelin/functions/fnc_onOpticLoad.sqf | 4 + 3 files changed, 172 insertions(+), 166 deletions(-) diff --git a/addons/wep_javelin/RscInGameUI.hpp b/addons/wep_javelin/RscInGameUI.hpp index 811548a9d2..714db0c940 100644 --- a/addons/wep_javelin/RscInGameUI.hpp +++ b/addons/wep_javelin/RscInGameUI.hpp @@ -12,7 +12,7 @@ class RscLine; class RscInGameUI { class RscOptics_titan { idd = 300; - controls[] = {"ACE_javelin_elements_group"}; + controls[] = {"ACE_javelin_elements_group", "CA_Distance", "ACE_TargetingConstrains", "ACE_TargetingGate", "ACE_TargetingLines"}; onLoad = QUOTE(_this call FUNC(onOpticLoad)); onUnload = "uiNameSpace setVariable ['ACE_RscOptics_javelin',nil];"; @@ -26,6 +26,169 @@ class RscInGameUI { h = 0; }; + class ACE_TargetingConstrains: RscControlsGroup { + idc = 699100; + x = "SafezoneX"; + y = "SafezoneY"; + w = "SafezoneW-SafezoneX"; + h = "SafezoneH-SafezoneY"; + enabled = 0; + class VScrollbar { + autoScrollSpeed = -1; + autoScrollDelay = 5; + autoScrollRewind = 0; + color[] = {1,1,1,0}; + width = 0.001; + }; + class HScrollbar { + color[] = {1,1,1,0}; + height = 0.001; + }; + class Controls { + class Top: RscPicture { + idc = 699101; + text = "#(argb,8,8,3)color(1,1,1,1)"; + colorText[] = {0.2941,0.2941,0.2941,1}; + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; + y = "0.15*SafezoneH-SafezoneY"; + w = "(3/4)*SafezoneH"; + h = "0.21*SafezoneH"; + }; + class Bottom: Top { + idc = 699102; + y = "0.64*SafezoneH-SafezoneY"; + }; + class Left: Top { + idc = 699103; + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; + y = "0.36*SafezoneH-SafezoneY"; + w = "0.31*(3/4)*SafezoneH"; + h = "0.28*SafezoneH"; + }; + class Right: Left { + idc = 699104; + x = "((SafezoneW -(3/4)*SafezoneH)/2)+ 0.69*(3/4)*SafezoneH - SafezoneX"; + }; + class OpticsBorders: RscPicture { + idc = 699105; + text = PATHTOF(data\javelin_ui_border_ca.paa); + colorText[] = {0,0,0,1}; + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; + y = "0.15*SafezoneH-SafezoneY"; + w = "(3/4)*SafezoneH"; + h = "0.7*SafezoneH"; + }; + }; + }; + + class ACE_TargetingGate : ACE_TargetingConstrains { + idc = 699200; + class Controls { + class TargetingGateTL: TargetingConstrains { + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; + y = "0.15*SafezoneH - SafezoneY"; + idc = 699201; + class Controls { + class LineH: RscLine { + idc = 699210; + x = "0"; + y = "0"; + w = "0.025*(3/4)*SafezoneH"; + h = "0"; + colorText[] = {0.8745,0.8745,0.8745,1}; + }; + class LineV: LineH { + idc = 699211; + w = "0"; + h = "0.025*SafezoneH"; + }; + }; + }; + class TargetingGateTR: TargetingGateTL { + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX + 0.975*(3/4)*SafezoneH"; + y = "0.15*SafezoneH - SafezoneY"; + idc = 699202; + class Controls { + class LineH: RscLine { + idc = 699220; + x = "0"; + y = "0"; + w = "0.025*(3/4)*SafezoneH"; + h = "0"; + colorText[] = {0.8745,0.8745,0.8745,1}; + }; + class LineV: LineH { + idc = 699221; + x = "0.025*(3/4)*SafezoneH"; + w = "0"; + h = "0.025*SafezoneH"; + }; + }; + }; + class TargetingGateBL: TargetingGateTL { + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; + y = "0.825*SafezoneH - SafezoneY"; + idc = 699203; + class Controls { + class LineH: RscLine { + x = "0"; + y = "0.025*SafezoneH"; + w = "0.025*(3/4)*SafezoneH"; + h = "0"; + colorText[] = {0.8745,0.8745,0.8745,1}; + }; + class LineV: LineH { + y = "0"; + w = "0"; + h = "0.025*SafezoneH"; + }; + }; + }; + class TargetingGateBR: TargetingGateBL { + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX + 0.975*(3/4)*SafezoneH"; + y = "0.825*SafezoneH - SafezoneY"; + idc = 699204; + class Controls { + class LineH: RscLine { + x = "0"; + y = "0.025*SafezoneH"; + w = "0.025*(3/4)*SafezoneH"; + h = "0"; + colorText[] = {0.8745,0.8745,0.8745,1}; + }; + class LineV: LineH { + x = "0.025*(3/4)*SafezoneH"; + y = "0"; + w = "0"; + h = "0.025*SafezoneH"; + }; + }; + }; + }; + }; + + class ACE_TargetingLines: ACE_TargetingConstrains { + idc = 699300; + class Controls { + class LineH: RscLine { + idc = 699301; + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; + y = "0.5*SafezoneH - SafezoneY"; + w = "(3/4)*SafezoneH"; + h = "0"; + colorText[] = {0.8745,0.8745,0.8745,1}; + }; + class LineV: RscLine { + idc = 699302; + x = "0.5*SafezoneW - SafezoneX"; + y = "0.15*SafezoneH - SafezoneY"; + w = "0"; + h = "0.7*SafezoneH"; + colorText[] = {0.8745,0.8745,0.8745,1}; + }; + }; + }; + class ACE_javelin_elements_group: RscControlsGroup { x = "SafezoneX"; @@ -211,170 +374,7 @@ class RscInGameUI { }; }; }; - /* - class TargetingConstrains: RscControlsGroup { - idc = 699100; - x = "SafezoneX"; - y = "SafezoneY"; - w = "SafezoneW-SafezoneX"; - h = "SafezoneH-SafezoneY"; - class VScrollbar { - autoScrollSpeed = -1; - autoScrollDelay = 5; - autoScrollRewind = 0; - color[] = {1,1,1,0}; - width = 0.001; - }; - class HScrollbar { - color[] = {1,1,1,0}; - height = 0.001; - }; - class Controls { - class Top: RscPicture { - idc = 699101; - text = "#(argb,8,8,3)color(1,1,1,1)"; - colorText[] = {0.2941,0.2941,0.2941,1}; - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; - y = "0.15*SafezoneH-SafezoneY"; - w = "(3/4)*SafezoneH"; - h = "0.21*SafezoneH"; - }; - class Bottom: Top { - idc = 699102; - y = "0.64*SafezoneH-SafezoneY"; - }; - class Left: Top { - idc = 699103; - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; - y = "0.36*SafezoneH-SafezoneY"; - w = "0.31*(3/4)*SafezoneH"; - h = "0.28*SafezoneH"; - }; - class Right: Left { - idc = 699104; - x = "((SafezoneW -(3/4)*SafezoneH)/2)+ 0.69*(3/4)*SafezoneH - SafezoneX"; - }; - class OpticsBorders: RscPicture { - idc = 699105; - text = PATHTOF(data\javelin_ui_border_ca.paa); - colorText[] = {0,0,0,1}; - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; - y = "0.15*SafezoneH-SafezoneY"; - w = "(3/4)*SafezoneH"; - h = "0.7*SafezoneH"; - }; - }; - }; - - class TargetingGate: TargetingConstrains { - idc = 699200; - class Controls { - class TargetingGateTL: TargetingConstrains { - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; - y = "0.15*SafezoneH - SafezoneY"; - idc = 699201; - class Controls { - class LineH: RscLine { - idc = 699210; - x = "0"; - y = "0"; - w = "0.025*(3/4)*SafezoneH"; - h = "0"; - colorText[] = {0.8745,0.8745,0.8745,1}; - }; - class LineV: LineH { - idc = 699211; - w = "0"; - h = "0.025*SafezoneH"; - }; - }; - }; - class TargetingGateTR: TargetingGateTL { - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX + 0.975*(3/4)*SafezoneH"; - y = "0.15*SafezoneH - SafezoneY"; - idc = 699202; - class Controls { - class LineH: RscLine { - idc = 699220; - x = "0"; - y = "0"; - w = "0.025*(3/4)*SafezoneH"; - h = "0"; - colorText[] = {0.8745,0.8745,0.8745,1}; - }; - class LineV: LineH { - idc = 699221; - x = "0.025*(3/4)*SafezoneH"; - w = "0"; - h = "0.025*SafezoneH"; - }; - }; - }; - class TargetingGateBL: TargetingGateTL { - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; - y = "0.825*SafezoneH - SafezoneY"; - idc = 699203; - class Controls { - class LineH: RscLine { - x = "0"; - y = "0.025*SafezoneH"; - w = "0.025*(3/4)*SafezoneH"; - h = "0"; - colorText[] = {0.8745,0.8745,0.8745,1}; - }; - class LineV: LineH { - y = "0"; - w = "0"; - h = "0.025*SafezoneH"; - }; - }; - }; - class TargetingGateBR: TargetingGateBL { - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX + 0.975*(3/4)*SafezoneH"; - y = "0.825*SafezoneH - SafezoneY"; - idc = 699204; - class Controls { - class LineH: RscLine { - x = "0"; - y = "0.025*SafezoneH"; - w = "0.025*(3/4)*SafezoneH"; - h = "0"; - colorText[] = {0.8745,0.8745,0.8745,1}; - }; - class LineV: LineH { - x = "0.025*(3/4)*SafezoneH"; - y = "0"; - w = "0"; - h = "0.025*SafezoneH"; - }; - }; - }; - }; - }; - - class TargetingLines: TargetingConstrains { - idc = 699300; - class Controls { - class LineH: RscLine { - idc = 699301; - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; - y = "0.5*SafezoneH - SafezoneY"; - w = "(3/4)*SafezoneH"; - h = "0"; - colorText[] = {0.8745,0.8745,0.8745,1}; - }; - class LineV: RscLine { - idc = 699302; - x = "0.5*SafezoneW - SafezoneX"; - y = "0.15*SafezoneH - SafezoneY"; - w = "0"; - h = "0.7*SafezoneH"; - colorText[] = {0.8745,0.8745,0.8745,1}; - }; - }; - }; - */ - + class ACE_javelin_SEEK_off: ACE_javelin_Day_mode_off { idc = 699000; x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.863/4)*3*SafezoneH - SafezoneX"; diff --git a/addons/wep_javelin/functions/fnc_onOpticDraw.sqf b/addons/wep_javelin/functions/fnc_onOpticDraw.sqf index 586f4cb99e..acd37faaa3 100644 --- a/addons/wep_javelin/functions/fnc_onOpticDraw.sqf +++ b/addons/wep_javelin/functions/fnc_onOpticDraw.sqf @@ -1,7 +1,9 @@ -//#define DEBUG_MODE_FULL +#define DEBUG_MODE_FULL #include "script_component.hpp" //TRACE_1("enter", _this); +TRACE_1("Control", (__JavelinIGUITargetingConstrains)); + #define __TRACKINTERVAL 0.1 // how frequent the check should be. #define __LOCKONTIME 1.85 // Lock on won't occur sooner #define __LOCKONTIMERANDOM 0.3 // Deviation in lock on time diff --git a/addons/wep_javelin/functions/fnc_onOpticLoad.sqf b/addons/wep_javelin/functions/fnc_onOpticLoad.sqf index b2192b8883..3dfa3e2f9a 100644 --- a/addons/wep_javelin/functions/fnc_onOpticLoad.sqf +++ b/addons/wep_javelin/functions/fnc_onOpticLoad.sqf @@ -11,6 +11,10 @@ ACE_player setVariable ["ace_missileguidance_target",nil, false]; __JavelinIGUISeek ctrlSetTextColor __ColorGray; __JavelinIGUINFOV ctrlSetTextColor __ColorGray; +__JavelinIGUITargetingConstrains ctrlShow false; +__JavelinIGUITargetingGate ctrlShow false; +__JavelinIGUITargetingLines ctrlShow false; + uiNameSpace setVariable [QGVAR(arguments), [ 0, // Last runtime From 0a88220fc2b1c9c5df52c213a397242b35938a15 Mon Sep 17 00:00:00 2001 From: jaynus Date: Fri, 10 Apr 2015 14:20:06 -0700 Subject: [PATCH 103/214] Constraints work, added worldToScreenBounds to common. --- addons/common/XEH_preInit.sqf | 3 ++ .../functions/fnc_worldToScreenBounds.sqf | 52 +++++++++++++++++++ addons/wep_javelin/RscInGameUI.hpp | 2 +- addons/wep_javelin/XEH_pre_init.sqf | 3 -- .../wep_javelin/functions/fnc_onOpticDraw.sqf | 50 ++++++++++++++++++ .../functions/fnc_translateToModelSpace.sqf | 20 ------- .../functions/fnc_translateToWeaponSpace.sqf | 26 ---------- 7 files changed, 106 insertions(+), 50 deletions(-) create mode 100644 addons/common/functions/fnc_worldToScreenBounds.sqf delete mode 100644 addons/wep_javelin/functions/fnc_translateToModelSpace.sqf delete mode 100644 addons/wep_javelin/functions/fnc_translateToWeaponSpace.sqf diff --git a/addons/common/XEH_preInit.sqf b/addons/common/XEH_preInit.sqf index e7169f1d23..397973edfc 100644 --- a/addons/common/XEH_preInit.sqf +++ b/addons/common/XEH_preInit.sqf @@ -178,6 +178,9 @@ PREP(useItem); PREP(useMagazine); PREP(waitAndExecute); +// Model and drawing helpers +PREP(worldToScreenBounds); + // config items PREP(getConfigType); PREP(getItemType); diff --git a/addons/common/functions/fnc_worldToScreenBounds.sqf b/addons/common/functions/fnc_worldToScreenBounds.sqf new file mode 100644 index 0000000000..7b88350c6a --- /dev/null +++ b/addons/common/functions/fnc_worldToScreenBounds.sqf @@ -0,0 +1,52 @@ +// (c) zGuba 2011 +// Function helper for framing objects on screen. +// Input: [_object,_margins3D,_offset3D] (object, 3 * float array, 3 * float array) +// Output: [_minX,_minY,_minY,_maxY] (4 * float) + +#include "script_component.hpp" + +private ["_minX","_minY","_maxX","_maxY"]; + +PARAMS_3(_object,_margins,_offsets); + +_minX = 10; +_minY = 10; +_maxX = -10; +_maxY = -10; + +if (true) then { + _bounds = boundingBox _object; + + _boundsMin = _bounds select 0; + _boundsMinX = (_boundsMin select 0) - (_margins select 0) + (_offsets select 0); + _boundsMinY = (_boundsMin select 1) - (_margins select 1) + (_offsets select 1); + _boundsMinZ = (_boundsMin select 2) - (_margins select 2) + (_offsets select 2); + _boundsMax = _bounds select 1; + _boundsMaxX = (_boundsMax select 0) + (_margins select 0) + (_offsets select 0); + _boundsMaxY = (_boundsMax select 1) + (_margins select 1) + (_offsets select 1); + _boundsMaxZ = (_boundsMax select 2) + (_margins select 2) + (_offsets select 2); + + _boundsCorners = [ + [_boundsMinX,_boundsMinY,_boundsMinZ], + [_boundsMinX,_boundsMinY,_boundsMaxZ], + [_boundsMinX,_boundsMaxY,_boundsMinZ], + [_boundsMinX,_boundsMaxY,_boundsMaxZ], + [_boundsMaxX,_boundsMinY,_boundsMinZ], + [_boundsMaxX,_boundsMinY,_boundsMaxZ], + [_boundsMaxX,_boundsMaxY,_boundsMinZ], + [_boundsMaxX,_boundsMaxY,_boundsMaxZ] + ]; + + + { + _ppos = worldToScreen (_object modelToWorld _x); + _pposX = _ppos select 0; + _pposY = _ppos select 1; + if (_pposX < _minX) then {_minX = _pposX}; + if (_pposX > _maxX) then {_maxX = _pposX}; + if (_pposY < _minY) then {_minY = _pposY}; + if (_pposY > _maxY) then {_maxY = _pposY}; + } forEach _boundsCorners; +}; + +[_minX,_minY,_maxX,_maxY] diff --git a/addons/wep_javelin/RscInGameUI.hpp b/addons/wep_javelin/RscInGameUI.hpp index 714db0c940..457c7ac414 100644 --- a/addons/wep_javelin/RscInGameUI.hpp +++ b/addons/wep_javelin/RscInGameUI.hpp @@ -84,7 +84,7 @@ class RscInGameUI { class ACE_TargetingGate : ACE_TargetingConstrains { idc = 699200; class Controls { - class TargetingGateTL: TargetingConstrains { + class TargetingGateTL: ACE_TargetingConstrains { x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; y = "0.15*SafezoneH - SafezoneY"; idc = 699201; diff --git a/addons/wep_javelin/XEH_pre_init.sqf b/addons/wep_javelin/XEH_pre_init.sqf index 119eb25975..2b2e980191 100644 --- a/addons/wep_javelin/XEH_pre_init.sqf +++ b/addons/wep_javelin/XEH_pre_init.sqf @@ -1,8 +1,5 @@ #include "script_component.hpp" -PREP(translateToWeaponSpace); -PREP(translateToModelSpace); - PREP(lockKeyDown); PREP(lockKeyUp); diff --git a/addons/wep_javelin/functions/fnc_onOpticDraw.sqf b/addons/wep_javelin/functions/fnc_onOpticDraw.sqf index acd37faaa3..33f6c93c39 100644 --- a/addons/wep_javelin/functions/fnc_onOpticDraw.sqf +++ b/addons/wep_javelin/functions/fnc_onOpticDraw.sqf @@ -83,9 +83,59 @@ if (isNull _newTarget) then { } else { if(diag_tickTime - _lockTime > 3) then { TRACE_2("LOCKED!", _currentTarget, _lockTime); + __JavelinIGUISeek ctrlSetTextColor __ColorGreen; __JavelinIGUINFOV ctrlSetTextColor __ColorNull; __JavelinIGUITargetingConstrains ctrlShow true; + __JavelinIGUITargetingGate ctrlShow true; + __JavelinIGUITargetingLines ctrlShow true; + + + _apos = worldToScreen (_newTarget modelToWorld _randomPosWithinBounds); + + _aposX = 0; + _aposY = 0; + if (count _apos < 2) then { + _aposX = 1; + _aposY = 0; + } else { + _aposX = (_apos select 0) + _offsetX; + _aposY = (_apos select 1) + _offsetY; + }; + + // Move target marker to coords. + __JavelinIGUITargetingLineV ctrlSetPosition [_aposX,ctrlPosition __JavelinIGUITargetingLineV select 1]; + __JavelinIGUITargetingLineH ctrlSetPosition [ctrlPosition __JavelinIGUITargetingLineH select 0,_aposY]; + {_x ctrlCommit __TRACKINTERVAL} forEach [__JavelinIGUITargetingLineH,__JavelinIGUITargetingLineV]; + + _boundsInput = if (_currentTarget isKindOf "CAManBase") then { + [_currentTarget,[-1,-1,-2],_currentTarget selectionPosition "body"]; + } else { + [_currentTarget,[-1,-1,-2],_currentTarget selectionPosition "zamerny"]; + }; + + _bpos = _boundsInput call FUNC(worldToScreenBounds); + + _constraintTop = __ConstraintTop; + _constraintLeft = __ConstraintLeft; + _constraintBottom = __ConstraintBottom; + _constraintRight = __ConstraintRight; + + _offsetX = __OffsetX; + _offsetY = __OffsetY; + + _minX = ((_bpos select 0) + _offsetX) max _constraintLeft; + _minY = ((_bpos select 1) + _offsetY) max _constraintTop; + _maxX = ((_bpos select 2) + _offsetX) min (_constraintRight - 0.025*(3/4)*SafezoneH); + _maxY = ((_bpos select 3) + _offsetY) min (_constraintBottom - 0.025*SafezoneH); + + __JavelinIGUITargetingGateTL ctrlSetPosition [_minX,_minY]; + __JavelinIGUITargetingGateTR ctrlSetPosition [_maxX,_minY]; + __JavelinIGUITargetingGateBL ctrlSetPosition [_minX,_maxY]; + __JavelinIGUITargetingGateBR ctrlSetPosition [_maxX,_maxY]; + + {_x ctrlCommit __TRACKINTERVAL} forEach [__JavelinIGUITargetingGateTL,__JavelinIGUITargetingGateTR,__JavelinIGUITargetingGateBL,__JavelinIGUITargetingGateBR]; + ACE_player setVariable["ace_missileguidance_target", _currentTarget, false]; diff --git a/addons/wep_javelin/functions/fnc_translateToModelSpace.sqf b/addons/wep_javelin/functions/fnc_translateToModelSpace.sqf deleted file mode 100644 index 12f828769a..0000000000 --- a/addons/wep_javelin/functions/fnc_translateToModelSpace.sqf +++ /dev/null @@ -1,20 +0,0 @@ -//#define DEBUG_MODE_FULL -#include "script_component.hpp" -TRACE_1("enter", _this); - -_object = _this select 0; -_origin = getPosASL _object; -_matrix = _this select 1; -_xVec = _matrix select 0; -_yVec = _matrix select 1; -_zVec = _matrix select 2; - -_offset = _this select 2; - -_x = _offset select 0; -_y = _offset select 1; -_z = _offset select 2; - -_out = (((_xVec vectorMultiply _x) vectorAdd (_yVec vectorMultiply _y)) vectorAdd (_zVec vectorMultiply _z)) vectorAdd _origin; - -_out; \ No newline at end of file diff --git a/addons/wep_javelin/functions/fnc_translateToWeaponSpace.sqf b/addons/wep_javelin/functions/fnc_translateToWeaponSpace.sqf deleted file mode 100644 index 8f85005d48..0000000000 --- a/addons/wep_javelin/functions/fnc_translateToWeaponSpace.sqf +++ /dev/null @@ -1,26 +0,0 @@ -//#define DEBUG_MODE_FULL -#include "script_component.hpp" -TRACE_1("enter", _this); - -_object = _this select 0; -_origin = getPosASL _object; -_matrix = _this select 1; -_xVec = _matrix select 0; -_yVec = _matrix select 1; -_zVec = _matrix select 2; - -_offset = _this select 2; - -_offset = _offset vectorDiff _origin; - -_x = _offset select 0; -_y = _offset select 1; -_z = _offset select 2; - -_out = [ - ((_xVec select 0)*_x) + ((_xVec select 1)*_y) + ((_xVec select 2)*_z), - ((_yVec select 0)*_x) + ((_yVec select 1)*_y) + ((_yVec select 2)*_z), - ((_zVec select 0)*_x) + ((_zVec select 1)*_y) + ((_zVec select 2)*_z) - ]; - -_out; \ No newline at end of file From a37cd51fe712633144a539e4aaf7a66edb68db6f Mon Sep 17 00:00:00 2001 From: nic547 <32dominic.ri@gmail.com> Date: Sat, 11 Apr 2015 15:02:56 +0200 Subject: [PATCH 104/214] more stuff - added more ammotypes - stringtable now follows guideline --- addons/magazines/CfgAmmo.hpp | 55 +- addons/magazines/CfgMagazines.hpp | 99 ++- addons/magazines/CfgWeapons.hpp | 17 +- addons/magazines/stringtable.xml | 1143 +++++++++++++++-------------- 4 files changed, 754 insertions(+), 560 deletions(-) diff --git a/addons/magazines/CfgAmmo.hpp b/addons/magazines/CfgAmmo.hpp index e04f793cb6..6ed27581f4 100644 --- a/addons/magazines/CfgAmmo.hpp +++ b/addons/magazines/CfgAmmo.hpp @@ -107,18 +107,65 @@ class CfgAmmo { //typicalspeed = 792; //airfriction = -0.0008577; }; - - /* .338 Lapua Magnum */ - + + + /* .338 Lapua Magnum */ + // IR Dim class B_338_Ball; class ACE_B_338_Ball_Tracer_Dim: B_338_Ball { nvgOnly = 1; }; - + + //AP + class ACE_B_338_Ball_AP: B_338_Ball { + caliber = 3.6; + hit = 18.9; + }; + + //SD + class ACE_B_338_Ball_SD: B_338_Ball { + airFriction = -0.00036; + hit = 15.75; + supersonicCrackFar[] = {}; + supersonicCrackNear[] = {}; + typicalSpeed = 320; + audibleFire = 1.2; + visibleFire = 4.0; + }; + + /* .338 Norma Magnum */ + + //IR Dim class B_338_NM_Ball; class ACE_B_338_NM_Ball_Tracer_Dim: B_338_NM_Ball { nvgOnly = 1; }; + + + /* 9.3x64mm */ + + //IR Dim + class B_93x64_Ball; + class ACE_B_93x64_Ball_Tracer_Dim: B_93x64_Ball { + nvgOnly = 1; + }; + + //AP + class ACE_B_93x64_Ball_AP: B_93x64_Ball { + caliber = 4.0; + hit = 21; + }; + + //SD + class ACE_B_93x64_Ball_SD: B_93x64_Ball { + airFriction = -0.00042; + hit = 17.5; + supersonicCrackFar[] = {}; + supersonicCrackNear[] = {}; + typicalSpeed = 320; + audibleFire = 1.2; + visibleFire = 4.0; + }; }; diff --git a/addons/magazines/CfgMagazines.hpp b/addons/magazines/CfgMagazines.hpp index bfdf327ee4..de19a86f7a 100644 --- a/addons/magazines/CfgMagazines.hpp +++ b/addons/magazines/CfgMagazines.hpp @@ -136,36 +136,97 @@ class CfgMagazines { displayNameShort = "$STR_ACE_20Rnd_762x51_mag_APNameShort"; descriptionShort = "$STR_ACE_20Rnd_762x51_mag_APDescription"; }; + + + /* 338 Lapua Magnum */ class 10Rnd_338_Mag; - /* .338 Lapua Magnum */ class ACE_10Rnd_338_Mag_Tracer: 10Rnd_338_Mag { - author="$STR_ACE_Common_ACETeam" - displayName = "$STR_ACE_10Rnd_388_Mag_TracerName"; - displayNameShort = "$STR_ACE_10Rnd_388_Mag_TracerNameShort"; - descriptionShort = "$STR_ACE_10Rnd_388_Mag_TracerDescription"; + author = "$STR_ACE_Common_ACETeam"; + displayName = "$STR_ACE_10Rnd_338_Mag_TracerName"; + displayNameShort = "$STR_ACE_10Rnd_338_Mag_TracerNameShort"; + descriptionShort = "$STR_ACE_10Rnd_338_Mag_TracerDescription"; tracersEvery = 1; }; + class ACE_10Rnd_338_Mag_Tracer_Dim: ACE_10Rnd_338_Mag_Tracer { - author="$STR_ACE_Common_ACETeam" - ammo = "ACE_B_338_Ball_Tracer_Dim" + author = "$STR_ACE_Common_ACETeam"; + ammo = "ACE_B_338_Ball_Tracer_Dim"; displayName = "$STR_ACE_10Rnd_388_Mag_Tracer_DimName"; - displayNameShort = "$STR_ACE_10Rnd_388_Mag_Tracer_DimNameShort"; - descriptionShort = "$STR_ACE_10Rnd_388_Mag_Tracer_DimDescription"; + displayNameShort = "$STR_ACE_10Rnd_338_Mag_Tracer_DimNameShort"; + descriptionShort = "$STR_ACE_10Rnd_338_Mag_Tracer_DimDescription"; }; + + class ACE_10Rnd_338_Mag_AP: 10Rnd_338_Mag { + author = "$STR_ACE_Common_ACETeam"; + ammo ="ACE_B_338_Ball_AP"; + displayName = "$STR_ACE_10Rnd_338_Mag_APName"; + displayNameShort = "$STR_ACE_10Rnd_338_Mag_APNameShort"; + descriptionShort = "$STR_ACE_10Rnd_338_Mag_APDescription"; + }; + + class ACE_10Rnd_338_Mag_SD: 10Rnd_338_Mag { + author = "$STR_ACE_Common_ACETeam"; + ammo = "ACE_B_338_Ball_SD"; + displayName = "$STR_ACE_10Rnd_338_Mag_SDName"; + displayNameShort = "$STR_ACE_10Rnd_338_Mag_SDNameShort"; + descriptionShort = "$STR_ACE_10Rnd_338_Mag_SDDescription"; + initSpeed = 320; + }; + + /* .333 Norma Magnum */ + class 130Rnd_338_Mag; class ACE_130Rnd_338_Mag_Tracer: 130Rnd_338_Mag { - author="$STR_ACE_Common_ACETeam" - displayName = "$STR_ACE_130Rnd_388_Mag_TracerName"; - displayNameShort = "$STR_ACE_130Rnd_388_Mag_TracerNameShort"; - descriptionShort = "$STR_ACE_130Rnd_388_Mag_TracerDescription"; + author = "$STR_ACE_Common_ACETeam"; + displayName = "$STR_ACE_130Rnd_338_Mag_TracerName"; + displayNameShort = "$STR_ACE_130Rnd_338_Mag_TracerNameShort"; + descriptionShort = "$STR_ACE_130Rnd_338_Mag_TracerDescription"; tracersEvery = 1; }; + class ACE_130Rnd_338_Mag_Tracer_Dim: ACE_130Rnd_338_Mag_Tracer { - author="$STR_ACE_Common_ACETeam" - ammo = "ACE_B_338_NM_Ball_Tracer_Dim" - displayName = "$STR_ACE_130Rnd_388_Mag_Tracer_DimName"; - displayNameShort = "$STR_ACE_130Rnd_388_Mag_Tracer_DimNameShort"; - descriptionShort = "$STR_ACE_130Rnd_388_Mag_Tracer_DimDescription"; - } + author = "$STR_ACE_Common_ACETeam"; + ammo = "ACE_B_338_NM_Ball_Tracer_Dim"; + displayName = "$STR_ACE_130Rnd_338_Mag_Tracer_DimName"; + displayNameShort = "$STR_ACE_130Rnd_338_Mag_Tracer_DimNameShort"; + descriptionShort = "$STR_ACE_130Rnd_338_Mag_Tracer_DimDescription"; + }; + + + /* 9.3x64mm */ + + class 10Rnd_93x64_DMR_05_Mag; + class ACE_10Rnd_93x64_DMR_05_Mag_Tracer: 10Rnd_93x64_DMR_05_Mag { + author = "$STR_ACE_Common_ACEETeam"; + displayName = "$STR_ACE_10Rnd_93x64_DMR_05_Mag_TracerName"; + displayNameShort = "$STR_ACE_10Rnd_93x64_DMR_05_Mag_TracerNameShort"; + descriptionShort = "$STR_ACE_10Rnd_93x64_DMR_05_Mag_TracerDescription"; + tracersEvery = 1; + }; + + class ACE_10Rnd_93x64_DMR_05_Mag_Tracer_Dim: ACE_10Rnd_93x64_DMR_05_Mag_Tracer { + author = "$STR_ACE_Common_ACEETeam"; + ammo ="ACE_B_93x64_Ball_Tracer_Dim"; + displayName = "$STR_ACE_10Rnd_93x64_DMR_05_Mag_Tracer_DimName"; + displayNameShort = "$STR_ACE_10Rnd_93x64_DMR_05_Mag_Tracer_DimNameShort"; + descriptionShort = "$STR_ACE_10Rnd_93x64_DMR_05_Mag_Tracer_DimDescription"; + }; + + class ACE_10Rnd_93x64_DMR_05_Mag_AP: 10Rnd_93x64_DMR_05_Mag { + author = "$STR_ACE_Common_ACEETeam"; + ammo = "ACE_B_93x64_Ball_AP"; + displayName = "$STR_ACE_10Rnd_93x64_DMR_05_Mag_APName"; + displayNameShort = "$STR_ACE_10Rnd_93x64_DMR_05_Mag_APNameShort"; + descriptionShort = "$STR_ACE_10Rnd_93x64_DMR_05_Mag_APDescription"; + }; + + class ACE_10Rnd_93x64_DMR_05_Mag_SD: 10Rnd_93x64_DMR_05_Mag { + author = "$STR_ACE_Common_ACEETeam"; + ammo = "ACE_B_93x64_Ball_SD"; + displayName = "$STR_ACE_10Rnd_93x64_DMR_05_Mag_SDName"; + displayNameShort = "$STR_ACE_10Rnd_93x64_DMR_05_Mag_SDNameShort"; + descriptionShort = "$STR_ACE_10Rnd_93x64_DMR_05_Mag_SDDescription"; + initSpeed = 320; + }; }; diff --git a/addons/magazines/CfgWeapons.hpp b/addons/magazines/CfgWeapons.hpp index fd6243089b..f1c9049894 100644 --- a/addons/magazines/CfgWeapons.hpp +++ b/addons/magazines/CfgWeapons.hpp @@ -103,14 +103,16 @@ class CfgWeapons { }; }; }; - + class DMR_02_base_F: Rifle_Long_Base_F { magazines[] += { "ACE_10Rnd_338_Mag_Tracer", - "ACE_10Rnd_338_Mag_Tracer_Dim" + "ACE_10Rnd_338_Mag_Tracer_Dim", + "ACE_10Rnd_338_Mag_AP", + "ACE_10Rnd_338_Mag_SD" }; }; - + class MMG_02_base_F: Rifle_Long_Base_F { magazines[] += { "ACE_130Rnd_338_Mag_Tracer", @@ -118,6 +120,15 @@ class CfgWeapons { }; }; + class DMR_05_base_F: Rifle_Long_Base_F { + magazines[] += { + "ACE_10Rnd_93x64_DMR_05_Mag_Tracer", + "ACE_10Rnd_93x64_DMR_05_Mag_Tracer_Dim", + "ACE_10Rnd_93x64_DMR_05_Mag_AP", + "ACE_10Rnd_93x64_DMR_05_Mag_SD" + }; + }; + /* Assault Rifles */ diff --git a/addons/magazines/stringtable.xml b/addons/magazines/stringtable.xml index b81fe3d3ed..bdb32796cb 100644 --- a/addons/magazines/stringtable.xml +++ b/addons/magazines/stringtable.xml @@ -1,538 +1,613 @@  - - - - 6.5mm 30Rnd Tracer IR-DIM Mag - 6,5 mm Nyomjelző IR-DIM 30-as Tár - 6,5 mm 30-Schuss-Magazin Leuchtspur IR-DIM - Cargador de 30 balas trazadoras IR-DIM de 6,5mm - Ch. 6,5mm 30Cps Traçantes IR-DIM - Magazynek 6,5mm 30rd Smugacz IR-DIM - 6.5mm 30ks Svítící IR-DIM Zásobník - Carregador de 30 projéteis traçantes IR-DIM de 6,5mm - Caricatore 6.5mm 30Rnd Traccianti IR-DIM - Магазин из 30-и 6.5 мм трассирующих под ПНВ - - - 6.5mm IR-DIM - 6,5 mm IR-DIM - 6,5mm IR-DIM - 6,5mm IR-DIM - 6,5mm IR-DIM - 6,5mm IR-DIM - 6.5mm IR-DIM - 6,5mm IR-DIM - 6.5 IR-DIM - 6.5 мм трассирущие под ПНВ - - - Caliber: 6.5x39 mm Tracer IR-DIM<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL - Kaliber: 6,5x39 mm Nyomjelző IR-DIM<br />Lőszerek: 30<br />Használható: MX/C/M/SW/3GL - Kaliber: 6,5x39 mm Leuchtspur IR-DIM<br />Patronen: 30<br />Eingesetzt von: MX/C/M/SW/3GL - Calibre: 6,5x39 mm Trazadoras IR-DIM<br />Balas: 30<br />Se usa en: MX/C/M/SW/3GL - Calibre: 6,5x39 mm Traçantes IR-DIM<br />Cartouches: 30<br />Utilisé dans: MX/C/M/SW/3GL - Kaliber: 6,5 x 39 mm Smugowy IR-DIM<br />Pociski: 30<br />Używane w: MX/C/M/SW/3GL - Ráže: 6.5x39 mm Svítící IR-DIM<br />Munice: 30<br />Použití: MX/C/M/SW/3GL - Calibre: 6,5x39 mm Traçante IR-DIM<br />Projéteis: 30<br />Usado em: MX/C/M/SW/3GL - Calibro: 6.5x39 mm Traccianti IR-DIM <br />Munizioni: 30<br />In uso su: MX/C/M/SW/3GL - Калибр: 6.5x39 мм трассирующие под ПНВ<br />Патронов: 30<br />Применимы в: MX/C/M/SW/3GL - - - 6.5mm 30Rnd SD Mag - 6,5 mm Hangtompítós 30-as Tár - 6,5 mm 30-Schuss-Magazin SD - Cargador de 30 balas SD de 6,5mm - Ch. 6,5mm 30Cps SD - Magazynek 6,5mm 30rd SD - 6.5mm 30ks SD Zásobník - Carregador de 30 projéteis SD de 6,5mm - Caricatore 6.5mm 30Rnd Sil. - Магазин из 30-и 6.5 мм дозвуковых - - - 6.5mm SD - 6,5 mm Hangtompítós - 6,5mm SD - 6,5mm SD - 6,5mm SD - 6,5mm SD - 6.5mm SD - 6,5mm SD - 6.5mm Sil. - 6.5 мм дозвуковые - - - Caliber: 6.5x39 mm SD<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL - Kaliber: 6,5x39 mm Hangtompítós<br />Lőszerek: 30<br />Használható: MX/C/M/SW/3GL - Kaliber: 6,5x39 mm SD<br />Patronen: 30<br />Eingesetzt von: MX/C/M/SW/3GL - Calibre: 6,5x39 mm SD<br />Balas: 30<br />Se usa en: MX/C/M/SW/3GL - Calibre: 6,5x39 mm SD<br />Cartouches: 30<br />Utilisé dans: MX/C/M/SW/3GL - Kaliber: 6,5 x 39 mm SD<br />Pociski: 30<br />Używane w: MX/C/M/SW/3GL - Ráže: 6.5x39 mm SD<br />Munice: 30<br />Použití: MX/C/M/SW/3GL - Calibre: 6,5x39 mm SD<br />Projéteis: 30<br />Usado em: MX/C/M/SW/3GL - Calibro: 6.5x39 mm Sil.<br />Munizioni: 30<br />In uso su: MX/C/M/SW/3GL - Калибр: 6.5x39 мм дозвуковые<br />Патронов: 30<br />Применимы в: MX/C/M/SW/3GL - - - 6.5mm 30Rnd AP Mag - 6,5 mm Páncéltörő 30-as Tár - 6,5 mm 30-Schuss-Magazin AP - Cargador de 30 balas AP de 6,5mm - Ch. 6,5mm 30Cps AP - Magazynek 6,5mm 30rd AP - 6.5mm 30ks AP Zásobník - Carregador de 30 projéteis AP de 6,5mm - Caricatore 6.5mm 30Rnd AP - Магазин из 30-и 6.5 мм бронебойных - - - 6.5mm AP - 6,5 mm Páncéltörő - 6,5mm AP - 6,5mm AP - 6,5mm AP - 6,5mm AP - 6.5mm AP - 6,5mm AP - 6.5mm AP - 6.5 мм бронебойные - - - Caliber: 6.5x39 mm AP<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL - Kaliber: 6,5x39 mm Páncéltörő<br />Lőszerek: 30<br />Használható: MX/C/M/SW/3GL - Kaliber: 6,5x39 mm AP<br />Patronen: 30<br />Eingesetzt von: MX/C/M/SW/3GL - Calibre: 6,5x39 mm AP<br />Balas: 30<br />Se usa en: MX/C/M/SW/3GL - Calibre: 6,5x39 mm AP<br />Cartouches: 30<br />Utilisé dans: MX/C/M/SW/3GL - Kaliber: 6,5 x 39 mm AP<br />Pociski: 30<br />Używane w: MX/C/M/SW/3GL - Ráže: 6.5x39 mm AP<br />Munice: 30<br />Použití: MX/C/M/SW/3GL - Calibre: 6,5x39 mm AP<br />Projéteis: 30<br />Usado em: MX/C/M/SW/3GL - Calibro: 6.5x39 mm AP<br />Munizioni: 30<br />In uso su: MX/C/M/SW/3GL - Калибр: 6.5x39 мм бронебойные<br />Патронов: 30<br />Применимы в: MX/C/M/SW/3GL - - - - 6.5mm 30Rnd Tracer IR-DIM Mag - 6,5mm IR-DIM Nyomjelző 30-as Tár - 6,5 mm 30-Schuss-Magazin Leuchtspur IR-DIM - Cargador de 30 balas trazadoras IR-DIM de 6,5mm - Ch. 6,5mm 30Cps Traçantes IR-DIM - Magazynek 6,5mm 30rd Smugacz IR-DIM - 6.5mm 30ks Svítící IR-DIM Zásobník - Carregador de 30 projéteis traçantes IR-DIM de 6,5mm - Caricatore 6.5mm 30Rnd Traccianti IR-DIM - Магазин из 30-и 6.5 мм трассирующих под ПНВ - - - 6.5mm IR-DIM - 6,5mm IR-DIM - 6,5mm IR-DIM - 6,5mm IR-DIM - 6,5mm IR-DIM - 6,5mm IR-DIM - 6.5mm IR-DIM - 6,5mm IR-DIM - 6.5mm IR-DIM - 6.5 мм трассирущие под ПНВ - - - Caliber: 6.5x39 mm Tracer IR-DIM<br />Rounds: 30<br />Used in: Katiba - Kaliber: 6,5x39 mm Nyomjelző IR-DIM<br />Lőszerek: 30<br />Használható: Katiba - Kaliber: 6,5x39 mm Leuchtspur IR-DIM<br />Patronen: 30<br />Eingesetzt von: Katiba - Calibre: 6,5x39 mm Trazadoras IR-DIM<br />Balas: 30<br />Se usa en: Katiba - Calibre: 6,5x39 mm Traçantes IR-DIM<br />Cartouches: 30<br />Utilisé dans: Katiba - Kaliber: 6,5x39 mm Smugowy IR-DIM<br />Pociski: 30<br />Używane w: Katiba - Ráže: 6.5x39 mm Svítící IR-DIM<br />Munice: 30<br />Použití: Katiba - Calibre: 6,5x39 mm Traçante IR-DIM<br />Projéteis: 30<br />Usado em: Katiba - Calibro: 6.5x39 mm Tracciant IR-DIM<br />Munizioni: 30<br />In uso su: Katiba - Калибр: 6.5x39 мм трассирующие под ПНВ<br />Патронов: 30<br />Применимы в: Katiba - - - 6.5mm 30Rnd SD Mag - 6,5 mm Hangtompítós 30-as Tár - 6,5 mm 30-Schuss-Magazin SD - Cargador de 30 balas SD de 6,5mm - Ch. 6,5mm 30Cps SD - Magazynek 6,5mm 30rd SD - 6.5mm 30ks SD Zásobník - Carregador de 30 projéteis SD de 6,5mm - Caricatore 6.5mm 30Rnd Sil. - Магазин из 30-и 6.5 мм дозвуковых - - - 6.5mm SD - 6,5 mm Hangtompítós - 6,5mm SD - 6,5mm SD - 6,5mm SD - 6,5mm SD - 6.5mm SD - 6,5mm SD - 6.5mm Sil. - 6.5 мм дозвуковые - - - Caliber: 6.5x39 mm SD<br />Rounds: 30<br />Used in: Katiba - Kaliber: 6,5x39 mm Hangtompítós<br />Lőszerek: 30<br />Használható: Katiba - Kaliber: 6,5x39 mm SD<br />Patronen: 30<br />Eingesetzt von: Katiba - Calibre: 6,5x39 mm SD<br />Balas: 30<br />Se usa en: Katiba - Calibre: 6,5x39 mm SD<br />Cartouches: 30<br />Utilisé dans: Katiba - Kaliber: 6,5 x 39 mm SD<br />Naboje: 30<br />Używane w: Katiba - Ráže: 6.5x39 mm SD<br />Munice: 30<br />Použití: Katiba - Calibre: 6,5x39 mm SD<br />Projéteis: 30<br />Usado em: Katiba - Calibro: 6.5x39 mm Sil.<br />Munizioni: 30<br />In uso su: Katiba - Калибр: 6.5x39 мм дозвуковые<br />Патронов: 30<br />Применимы в: Katiba - - - 6.5mm 30Rnd AP Mag - 6,5 mm Páncéltörő 30-as Tár - 6,5 mm 30-Schuss-Magazin AP - Cargador de 30 balas AP de 6,5mm - Ch. 6,5mm 30Cps AP - Magazynek 6,5mm 30rd AP - 6.5mm 30ks AP Zásobník - Carregador de 30 projéteis AP de 6,5mm - Caricatore 6.5mm 30Rnd AP - Магазин из 30-и 6.5 мм бронебойных - - - 6.5mm AP - 6,5 mm Páncéltörő - 6,5mm AP - 6,5mm AP - 6,5mm AP - 6,5mm AP - 6.5mm AP - 6,5mm AP - 6.5mm AP - 6.5 мм бронебойные - - - Caliber: 6.5x39 mm AP<br />Rounds: 30<br />Used in: Katiba - Kaliber: 6,5x39 mm Páncéltörő<br />Lőszerek: 30<br />Használható: Katiba - Kaliber: 6,5x39 mm AP<br />Patronen: 30<br />Eingesetzt von: Katiba - Calibre: 6,5x39 mm AP<br />Balas: 30<br />Se usa en: Katiba - Calibre: 6,5x39 mm AP<br />Cartouches: 30<br />Utilisé dans: Katiba - Kaliber: 6,5 x 39 mm AP<br />Pociski: 30<br />Używane w: Katiba - Ráže: 6.5x39 mm AP<br />Munice: 30<br />Použití: Katiba - Calibre: 6,5x39 mm AP<br />Projéteis: 30<br />Usado em: Katiba - Calibro: 6.5x39 mm AP<br />Munizioni: 30<br />In uso su: Katiba - Калибр: 6.5x39 мм бронебойные<br />Патронов: 30<br />Применимы в: Katiba - - - - 5.56mm 30rnd Tracer IR-DIM Mag - 5,56 mm Nyomjelző IR-DIM 30-as Tár - 5,56 mm 30-Schuss-Magazin Leuchtspur IR-DIM - Cargador de 30 balas trazadoras IR-DIM de 5,56mm - Ch. 5,56mm 30Cps Traçantes IR-DIM - Magazynek 5,56mm 30rd Smugacz IR-DIM - 5.56mm 30ks Svítící IR-DIM Zásobník - Carregador de 30 projéteis traçantes IR-DIM de 5,56mm - Caricatore 5.56mm 30rnd Traccianti IR-DIM - Магазин из 30-и 5.56 мм трассирующих под ПНВ - - - 5.56mm IR-DIM - 5,56 mm IR-DIM - 5,56mm IR-DIM - 5,56mm IR-DIM - 5,56mm IR-DIM - 5,56mm IR-DIM - 5.56mm IR-DIM - 5,56mm IR-DIM - 5.56mm IR-DIM - 5.56 мм трассирущие под ПНВ - - - Caliber: 5.56x45 mm Tracer IR-DIM<br />Rounds: 30<br />Used in: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Kaliber: 5,56x45 mm Nyomjelző IR-DIM<br />Lőszerek: 30<br />Használható: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Kaliber: 5,56x45 mm Leuchtspur IR-DIM<br />Patronen: 30<br />Eingesetzt von: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Calibre: 5,56x45 mm Trazadoras IR-DIM<br />Balas: 30<br />Se usa en: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Calibre: 5,56x45 mm Traçantes IR-DIM<br />Cartouches: 30<br />Utilisé dans: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Kaliber: 5,56 x 45 mm Smugowy IR-DIM<br />Pociski: 30<br />Używane w: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Ráže: 5.56x45 mm Svítící IR-DIM<br />Munice: 30<br />Použití: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Calibre: 5,56x45 mm Traçante IR-DIM<br />Projéteis: 30<br />Usado em: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Calibro: 5.56x45 mm Traccianti IR-DIM<br />Munizioni: 30<br />In uso su: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Калибр: 5.56x45 мм трассирующие под ПНВ<br />Патронов: 30<br />Применимы в: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - - - 5.56mm 30Rnd SD Mag - 5,56 mm Hangtompítós 30-as Tár - 5,56 mm 30-Schuss-Magazin SD - Cargador de 30 balas SD de 5,56 mm - Ch. 5,56mm 30Cps SD - Magazynek 5,56mm 30rd SD - 5.56mm 30ks SD Zásobník - Carregador de 30 projéteis SD de 5,56mm - Caricatore 5.56mm 30Rnd Sil. - Магазин из 30-и 5.56 мм дозвуковых - - - 5.56mm SD - 5,56 mm Hangtompítós - 5,56mm SD - 5,56 mm SD - 5,56mm SD - 5,56mm SD - 5.56mm SD - 5,56mm SD - 5.56 Sil. - 5.56 мм дозвуковые - - - Caliber: 5.56x45 mm SD<br />Rounds: 30<br />Used in: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Kaliber: 5,56x45 mm Hangtompítós<br />Lőszerek: 30<br />Használható: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Kaliber: 5,56x45 mm SD<br />Patronen: 30<br />Eingesetzt von: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Calibre: 5,56x45 mm SD<br />Balas: 30<br />Se usa en: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Calibre: 5.56x45 mm SD<br />Cartouches: 30<br />Utilisé dans: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Kaliber: 5,56 x 45 mm SD<br />Pociski: 30<br />Używane w: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Ráže: 5.56x45 mm SD<br />Munice: 30<br />Použití: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Calibre: 5,56x45 mm SD<br />Projéteis: 30<br />Usado em: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Calibro: 5.56x45 mm Sil.<br />Munizioni: 30<br />In uso su: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Калибр: 5.56x45 мм дозвуковые<br />Патронов: 30<br />Применимы в: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - - - 5.56mm 30Rnd AP Mag - 5,56 mm Páncéltörő 30-as Tár - 5,56 mm 30-Schuss-Magazin AP - Cargador de 30 balas AP de 5,56mm - Ch. 5,56mm 30Cps AP - Magazynek 5,56mm 30rd AP - 5.56mm 30ks AP Zásobník - Carregador de 30 projéteis AP de 5,56mm - Caricatore 5.56mm 30Rnd AP - Магазин из 30-и 5.56 мм бронебойных - - - 5.56mm AP - 5,56 mm Páncéltörő - 5,56mm AP - 5,56mm AP - 5,56mm AP - 5,56mm AP - 5.56mm AP - 5,56mm AP - 5.56mm AP - 5.56 мм бронебойные - - - Caliber: 5.56x45 mm AP<br />Rounds: 30<br />Used in: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Kaliber: 5,56x45 mm Páncéltörő<br />Lőszerek: 30<br />Használható: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Kaliber: 5,56x45 mm AP<br />Patronen: 30<br />Eingesetzt von: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Calibre: 5,56x45 mm AP<br />Balas: 30<br />Se usa en: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Calibre: 5,56x45 mm AP<br />Cartouches: 30<br />Utilisé dans: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Kaliber: 5,56 x 45 mm AP<br />Pociski: 30<br />Używane w: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Ráže: 5.56x45 mm AP<br />Munice: 30<br />Použití: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Calibre: 5,56x45 mm AP<br />Projéteis: 30<br />Usado em: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Calibro: 5.56x45 mm AP<br />Munizioni: 30<br />In uso su: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Калибр: 5.56x45 мм бронебойные<br />Патронов: 30<br />Применимы в: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - - - - 7.62mm 20rnd Tracer Mag - 7,62 mm Nyomjelző IR-DIM 20-as Tár - 7,62 mm 20-Schuss-Magazin Leuchtspur - Cargador de 20 balas trazadores de 7,62mm - Ch. 7,62mm 20Cps Traçantes - Magazynek 7,62mm 20rd Smugacz - 7.62mm 20ks Svítící Zásobník - Carregador de 20 projéteis traçantes de 7,62mm - Caricatore 7.62mm 20Rnd Traccianti - Магазин из 20-и 7.62 мм трассирующих - - - 7.62mm Tracer - 7,62 mm Nyomjelző - 7,62mm Leuchtspur - 7,62mm Trazadora - 7,62mm Traçantes - 7,62mm Smugacz - 7.62mm Svítící - 7,62mm Traçante - 7.62mm Traccianti - 7.62 мм трассирущие - - - Caliber: 7.62x51 mm Tracer<br />Rounds: 20<br />Used in: Mk18 ABR - Kaliber: 7,62x51 mm Nyomjelző<br />Lőszerek: 20<br />Használható: Mk18 ABR - Kaliber: 7,62x51 mm Leuchtspur<br />Patronen: 20<br />Eingesetzt von: EBR - Calibre: 7,62x51 mm Trazadora<br />Balas: 20<br />Se usa en: Mk18 ABR - Calibre: 7,62x51 mm Traçantes<br />Cartouches: 20<br />Utilisé dans: EBR - Kaliber: 7,62 x 51 mm Smugacz<br />Pociski: 20<br />Używane w: Mk18 ABR - Ráže: 7.62x51 mm Svítící<br />Munice: 20<br />Použití: Mk18 ABR - Calibre: 7,62x51 mm Traçante<br />Projéteis: 20<br />Usado em: Mk18 ABR - Calibro: 7.62x51 mm Traccianti<br />Munizioni: 20<br />In uso su: Mk18 ABR - Калибр: 7.62x51 мм трассирующие<br />Патронов: 20<br />Применимы в: Mk18 ABR - - - 7.62mm 20rnd Tracer IR-DIM Mag - 7,62 mm Nyomjelző IR-DIM 20-as Tár - 7,62 mm 20-Schuss-Magazin Leuchtspur IR-DIM - Cargador de 20 balas IR-DIM de 7,62mm - Ch. 7,62mm 20Cps Traçantes IR-DIM - Magazynek 7,62mm 20rd Smugacz IR-DIM - 7.62mm 20ks Svítící IR-DIM Zásobník - Carregador de 20 projéteis IR-DIM de 7,62mm - Caricatore 7.62mm 20rnd Traccianti IR-DIM - Магазин из 20-и 7.62 мм трассирующих под ПНВ - - - 7.62mm IR-DIM - 7,62 mm IR-DIM - 7,62mm IR-DIM - 7,62mm IR-DIM - 7,62mm IR-DIM - 7,62mm IR-DIM - 7.62mm IR-DIM - 7,62mm IR-DIM - 7.62mm IR-DIM - 7.62 мм трассирущие под ПНВ - - - Caliber: 7.62x51 mm Tracer IR-DIM<br />Rounds: 20<br />Used in: Mk18 ABR - Kaliber: 7,62x51 mm Nyomjelző IR-DIM<br />Lőszerek: 20<br />Használható: Mk18 ABR - Kaliber: 7,62x51 mm Leuchtspur IR-DIM<br />Patronen: 20<br />Eingesetzt von: EBR - Calibre: 7,62x51 mm Trazadoras IR-DIM<br />Balas: 20<br />Se usa en: Mk18 ABR - Calibre: 7,62x51 mm Traçantes IR-DIM<br />Cartouches: 20<br />Utilisé dans: EBR - Kaliber: 7,62 x 51 mm Smugacz IR-DIM<br />Pociski: 20<br />Używane w: Mk18 ABR - Ráže: 7.62x51 mm Svítící IR-DIM<br />Munice: 20<br />Použití: Mk18 ABR - Calibre: 7,62x51 mm Traçante IR-DIM<br />Projéteis: 20<br />Usado em: Mk18 ABR - Calibro: 7.62x51 mm Traccianti IR-DIM<br />Munizioni: 20<br />In uso su: Mk18 ABR - Калибр: 7.62x51 мм трассирующие под ПНВ<br />Патронов: 20<br />Применимы в: Mk18 ABR - - - 7.62mm 20Rnd SD Mag - 7,62 mm Hangtompítós 20-as Tár - 7,62 mm 20-Schuss-Magazin SD - Cargador de 20 balas SD de 7,62mm - Ch. 7,62mm 20Cps SD - Magazynek 7,62mm 20rd SD - 7.62mm 20ks SD Zásobník - Carregador de 20 projéteis SD de 7,62mm - Caricatore 7.62mm 20Rnd Sil. - Магазин из 20-и 7.62 мм дозвуковых - - - 7.62mm SD - 7,62 mm Hangtompítós - 7,62mm SD - 7,62mm SD - 7,62mm SD - 7,62mm SD - 7.62mm SD - 7,62mm SD - 7.62mm Sil. - 7.62 мм дозвуковые - - - Caliber: 7.62x51 mm SD<br />Rounds: 20<br />Used in: Mk18 ABR - Kaliber: 7,62x51 mm Hangtompítós<br />Lőszerek: 20<br />Használható: Mk18 ABR - Kaliber: 7,62x51 mm SD<br />Patronen: 20<br />Eingesetzt von: EBR - Calibre: 7,62x51 mm SD<br />Balas: 20<br />Se usa en: Mk18 ABR - Calibre: 7,62x51 mm SD<br />Cartouches: 20<br />Utilisé dans: EBR - Kaliber: 7,62 x 51 mm SD<br />Pociski: 20<br />Używane w: Mk18 ABR - Ráže: 7.62x51 mm SD<br />Munice: 20<br />Použití: Mk18 ABR - Calibre: 7,62x51 mm SD<br />Projéteis: 20<br />Usado em: Mk18 ABR - Calibro: 7.62x51 mm Sil.<br />Munizioni: 20<br />In uso su: Mk18 ABR - Калибр: 7.62x51 мм дозвуковые<br />Патронов: 20<br />Применимы в: Mk18 ABR - - - 7.62mm 20Rnd AP Mag - 7,62 mm Páncéltörő 20-as Tár - 7,62 mm 20-Schuss-Magazin AP - Cargador de 20 balas AP de 7,62mm - Ch. 7,62mm 20Cps AP - Magazynek 7,62mm 20rd AP - 7.62mm 20ks AP Zásobník - Carregador de 20 projéteis AP de 7,62mm - Caricatore 7.62mm 20Rnd AP - Магазин из 20-и 7.62 мм бронебойных - - - 7.62mm AP - 7,62 mm Páncéltörő - 7,62mm AP - 7,62mm AP - 7,62mm AP - 7,62mm AP - 7.62mm AP - 7,62mm AP - 7.62mm AP - 7.62 мм бронебойные - - - Caliber: 7.62x51 mm AP<br />Rounds: 20<br />Used in: Mk18 ABR - Kaliber: 7,62x51 mm Páncéltörő<br />Lőszerek: 20<br />Használható: Mk18 ABR - Kaliber: 7,62x51 mm AP<br />Patronen: 20<br />Eingesetzt von: EBR - Calibre: 7,62x51 mm AP<br />Balas: 20<br />Se usa en: Mk18 ABR - Calibre: 7,62x51 mm AP<br />Cartouches: 20<br />Utilisé dans: EBR - Kaliber: 7,62 x 51 mm AP<br />Pociski: 20<br />Używane w: Mk18 ABR - Ráže: 7.62x51 mm AP<br />Munice: 20<br />Použití: Mk18 ABR - Calibre: 7,62x51 mm AP<br />Projéteis: 20<br />Usado em: Mk18 ABR - Calibro: 7.62x51 mm AP<br />Munizioni: 20<br />In uso su: Mk18 ABR - Калибр: 7.62x51 мм дозвуковые<br />Патронов: 20<br />Применимы в: Mk18 ABR - - - Caliber: 7.62x51mm M118LR<br />Rounds: 20<br />Type: M14 - Kaliber: 7,62x51 mm M118LR<br />Lőszerek: 20<br />Típus: M14 - Kaliber: 7,62x51mm M118LR<br />Schuss: 20<br />Typ: M14 - Calibre: 7,62x51mm M118LR<br />Balas: 20<br />Tipo: M14 - Kaliber: 7,62 x 51 mm M118LR<br />Pociski: 20<br />Typ: M14 - Kalibr: 7.62x51mm M118LR<br />Náboje: 20<br />Typ: M14 - Calibre : 7,62x51mm M118LR<br />Cartouches: 20<br />Type: M14 - Calibre: 7,62x51mm M118LR<br />Projéteis: 20<br />Tipo: M14 - Калибр: 7.62x51mm M118LR<br />Патронов: 20<br />Тип: M14 - Calibro: 7.62x51mm M118LR<br />Munizioni:20<br />In uso su: M14 - - - .338 LM 10Rnd Tracer Mag - .338 LM 10-Schuss-Magazin Leuchtspur - - - .338 LM Tracer - .338 LM Leuchtspur - - - Caliber: .338 Lapua Magnum Tracer<br />Rounds: 10<br />Used in: MAR-10 - Kaliber: .338 Lapua Magnum Leuchtspur<br />Schuss: 10<br />Verwendet für: MAR-10 - - - .338 LM 10Rnd IR-DIM Mag - .338 LM 10-Schuss-Magazin Leuchtspur IR-DIM - - - .338 LM IR-DIM - .338 LM IR-DIM - - - Caliber: .338 Lapua Magnum Tracer IR-DIM<br />Rounds: 10<br />Used in: MAR-10 - Kaliber: .338 Lapua Magnum Leuchtspur IR-DIM<br />Schuss: 10<br />Verwendet für: MAR-10 - - - .338 NM 130Rnd Tracer Belt - .338 NM 130-Schuss-Gurt Leuchtspur - - - .338 NM Tracer - .338 NM Leuchtspur - - - Caliber: .338 Norma Magnum Tracer<br />Rounds: 130<br />Used in: SPMG - Kaliber: .338 Norma Magnum Leuchtspur<br />Schuss: 130<br />Verwendet für: SPMG - - - .338 NM 130Rnd IR-DIM Belt - .338 NM 130-Schuss-Gurt Leuchtspur IR-DIM - - - .338 NM IR-DIM - .338 LM IR-DIM - - - Caliber: .338 Norma Magnum Tracer IR-DIM<br />Rounds: 130<br />Used in: SPMG - Kaliber: .338 Norma Magnum Leuchtspur IR-DIM<br />Schuss: 130<br />Verwendet für: SPMG - - + + + + 6.5mm 30Rnd Tracer IR-DIM Mag + 6,5 mm Nyomjelző IR-DIM 30-as Tár + 6,5 mm 30-Schuss-Magazin Leuchtspur IR-DIM + Cargador de 30 balas trazadoras IR-DIM de 6,5mm + Ch. 6,5mm 30Cps Traçantes IR-DIM + Magazynek 6,5mm 30rd Smugacz IR-DIM + 6.5mm 30ks Svítící IR-DIM Zásobník + Carregador de 30 projéteis traçantes IR-DIM de 6,5mm + Caricatore 6.5mm 30Rnd Traccianti IR-DIM + Магазин из 30-и 6.5 мм трассирующих под ПНВ + + + 6.5mm IR-DIM + 6,5 mm IR-DIM + 6,5mm IR-DIM + 6,5mm IR-DIM + 6,5mm IR-DIM + 6,5mm IR-DIM + 6.5mm IR-DIM + 6,5mm IR-DIM + 6.5 IR-DIM + 6.5 мм трассирущие под ПНВ + + + Caliber: 6.5x39 mm Tracer IR-DIM<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL + Kaliber: 6,5x39 mm Nyomjelző IR-DIM<br />Lőszerek: 30<br />Használható: MX/C/M/SW/3GL + Kaliber: 6,5x39 mm Leuchtspur IR-DIM<br />Patronen: 30<br />Eingesetzt von: MX/C/M/SW/3GL + Calibre: 6,5x39 mm Trazadoras IR-DIM<br />Balas: 30<br />Se usa en: MX/C/M/SW/3GL + Calibre: 6,5x39 mm Traçantes IR-DIM<br />Cartouches: 30<br />Utilisé dans: MX/C/M/SW/3GL + Kaliber: 6,5 x 39 mm Smugowy IR-DIM<br />Pociski: 30<br />Używane w: MX/C/M/SW/3GL + Ráže: 6.5x39 mm Svítící IR-DIM<br />Munice: 30<br />Použití: MX/C/M/SW/3GL + Calibre: 6,5x39 mm Traçante IR-DIM<br />Projéteis: 30<br />Usado em: MX/C/M/SW/3GL + Calibro: 6.5x39 mm Traccianti IR-DIM <br />Munizioni: 30<br />In uso su: MX/C/M/SW/3GL + Калибр: 6.5x39 мм трассирующие под ПНВ<br />Патронов: 30<br />Применимы в: MX/C/M/SW/3GL + + + 6.5mm 30Rnd SD Mag + 6,5 mm Hangtompítós 30-as Tár + 6,5 mm 30-Schuss-Magazin SD + Cargador de 30 balas SD de 6,5mm + Ch. 6,5mm 30Cps SD + Magazynek 6,5mm 30rd SD + 6.5mm 30ks SD Zásobník + Carregador de 30 projéteis SD de 6,5mm + Caricatore 6.5mm 30Rnd Sil. + Магазин из 30-и 6.5 мм дозвуковых + + + 6.5mm SD + 6,5 mm Hangtompítós + 6,5mm SD + 6,5mm SD + 6,5mm SD + 6,5mm SD + 6.5mm SD + 6,5mm SD + 6.5mm Sil. + 6.5 мм дозвуковые + + + Caliber: 6.5x39 mm SD<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL + Kaliber: 6,5x39 mm Hangtompítós<br />Lőszerek: 30<br />Használható: MX/C/M/SW/3GL + Kaliber: 6,5x39 mm SD<br />Patronen: 30<br />Eingesetzt von: MX/C/M/SW/3GL + Calibre: 6,5x39 mm SD<br />Balas: 30<br />Se usa en: MX/C/M/SW/3GL + Calibre: 6,5x39 mm SD<br />Cartouches: 30<br />Utilisé dans: MX/C/M/SW/3GL + Kaliber: 6,5 x 39 mm SD<br />Pociski: 30<br />Używane w: MX/C/M/SW/3GL + Ráže: 6.5x39 mm SD<br />Munice: 30<br />Použití: MX/C/M/SW/3GL + Calibre: 6,5x39 mm SD<br />Projéteis: 30<br />Usado em: MX/C/M/SW/3GL + Calibro: 6.5x39 mm Sil.<br />Munizioni: 30<br />In uso su: MX/C/M/SW/3GL + Калибр: 6.5x39 мм дозвуковые<br />Патронов: 30<br />Применимы в: MX/C/M/SW/3GL + + + 6.5mm 30Rnd AP Mag + 6,5 mm Páncéltörő 30-as Tár + 6,5 mm 30-Schuss-Magazin AP + Cargador de 30 balas AP de 6,5mm + Ch. 6,5mm 30Cps AP + Magazynek 6,5mm 30rd AP + 6.5mm 30ks AP Zásobník + Carregador de 30 projéteis AP de 6,5mm + Caricatore 6.5mm 30Rnd AP + Магазин из 30-и 6.5 мм бронебойных + + + 6.5mm AP + 6,5 mm Páncéltörő + 6,5mm AP + 6,5mm AP + 6,5mm AP + 6,5mm AP + 6.5mm AP + 6,5mm AP + 6.5mm AP + 6.5 мм бронебойные + + + Caliber: 6.5x39 mm AP<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL + Kaliber: 6,5x39 mm Páncéltörő<br />Lőszerek: 30<br />Használható: MX/C/M/SW/3GL + Kaliber: 6,5x39 mm AP<br />Patronen: 30<br />Eingesetzt von: MX/C/M/SW/3GL + Calibre: 6,5x39 mm AP<br />Balas: 30<br />Se usa en: MX/C/M/SW/3GL + Calibre: 6,5x39 mm AP<br />Cartouches: 30<br />Utilisé dans: MX/C/M/SW/3GL + Kaliber: 6,5 x 39 mm AP<br />Pociski: 30<br />Używane w: MX/C/M/SW/3GL + Ráže: 6.5x39 mm AP<br />Munice: 30<br />Použití: MX/C/M/SW/3GL + Calibre: 6,5x39 mm AP<br />Projéteis: 30<br />Usado em: MX/C/M/SW/3GL + Calibro: 6.5x39 mm AP<br />Munizioni: 30<br />In uso su: MX/C/M/SW/3GL + Калибр: 6.5x39 мм бронебойные<br />Патронов: 30<br />Применимы в: MX/C/M/SW/3GL + + + + 6.5mm 30Rnd Tracer IR-DIM Mag + 6,5mm IR-DIM Nyomjelző 30-as Tár + 6,5 mm 30-Schuss-Magazin Leuchtspur IR-DIM + Cargador de 30 balas trazadoras IR-DIM de 6,5mm + Ch. 6,5mm 30Cps Traçantes IR-DIM + Magazynek 6,5mm 30rd Smugacz IR-DIM + 6.5mm 30ks Svítící IR-DIM Zásobník + Carregador de 30 projéteis traçantes IR-DIM de 6,5mm + Caricatore 6.5mm 30Rnd Traccianti IR-DIM + Магазин из 30-и 6.5 мм трассирующих под ПНВ + + + 6.5mm IR-DIM + 6,5mm IR-DIM + 6,5mm IR-DIM + 6,5mm IR-DIM + 6,5mm IR-DIM + 6,5mm IR-DIM + 6.5mm IR-DIM + 6,5mm IR-DIM + 6.5mm IR-DIM + 6.5 мм трассирущие под ПНВ + + + Caliber: 6.5x39 mm Tracer IR-DIM<br />Rounds: 30<br />Used in: Katiba + Kaliber: 6,5x39 mm Nyomjelző IR-DIM<br />Lőszerek: 30<br />Használható: Katiba + Kaliber: 6,5x39 mm Leuchtspur IR-DIM<br />Patronen: 30<br />Eingesetzt von: Katiba + Calibre: 6,5x39 mm Trazadoras IR-DIM<br />Balas: 30<br />Se usa en: Katiba + Calibre: 6,5x39 mm Traçantes IR-DIM<br />Cartouches: 30<br />Utilisé dans: Katiba + Kaliber: 6,5x39 mm Smugowy IR-DIM<br />Pociski: 30<br />Używane w: Katiba + Ráže: 6.5x39 mm Svítící IR-DIM<br />Munice: 30<br />Použití: Katiba + Calibre: 6,5x39 mm Traçante IR-DIM<br />Projéteis: 30<br />Usado em: Katiba + Calibro: 6.5x39 mm Tracciant IR-DIM<br />Munizioni: 30<br />In uso su: Katiba + Калибр: 6.5x39 мм трассирующие под ПНВ<br />Патронов: 30<br />Применимы в: Katiba + + + 6.5mm 30Rnd SD Mag + 6,5 mm Hangtompítós 30-as Tár + 6,5 mm 30-Schuss-Magazin SD + Cargador de 30 balas SD de 6,5mm + Ch. 6,5mm 30Cps SD + Magazynek 6,5mm 30rd SD + 6.5mm 30ks SD Zásobník + Carregador de 30 projéteis SD de 6,5mm + Caricatore 6.5mm 30Rnd Sil. + Магазин из 30-и 6.5 мм дозвуковых + + + 6.5mm SD + 6,5 mm Hangtompítós + 6,5mm SD + 6,5mm SD + 6,5mm SD + 6,5mm SD + 6.5mm SD + 6,5mm SD + 6.5mm Sil. + 6.5 мм дозвуковые + + + Caliber: 6.5x39 mm SD<br />Rounds: 30<br />Used in: Katiba + Kaliber: 6,5x39 mm Hangtompítós<br />Lőszerek: 30<br />Használható: Katiba + Kaliber: 6,5x39 mm SD<br />Patronen: 30<br />Eingesetzt von: Katiba + Calibre: 6,5x39 mm SD<br />Balas: 30<br />Se usa en: Katiba + Calibre: 6,5x39 mm SD<br />Cartouches: 30<br />Utilisé dans: Katiba + Kaliber: 6,5 x 39 mm SD<br />Naboje: 30<br />Używane w: Katiba + Ráže: 6.5x39 mm SD<br />Munice: 30<br />Použití: Katiba + Calibre: 6,5x39 mm SD<br />Projéteis: 30<br />Usado em: Katiba + Calibro: 6.5x39 mm Sil.<br />Munizioni: 30<br />In uso su: Katiba + Калибр: 6.5x39 мм дозвуковые<br />Патронов: 30<br />Применимы в: Katiba + + + 6.5mm 30Rnd AP Mag + 6,5 mm Páncéltörő 30-as Tár + 6,5 mm 30-Schuss-Magazin AP + Cargador de 30 balas AP de 6,5mm + Ch. 6,5mm 30Cps AP + Magazynek 6,5mm 30rd AP + 6.5mm 30ks AP Zásobník + Carregador de 30 projéteis AP de 6,5mm + Caricatore 6.5mm 30Rnd AP + Магазин из 30-и 6.5 мм бронебойных + + + 6.5mm AP + 6,5 mm Páncéltörő + 6,5mm AP + 6,5mm AP + 6,5mm AP + 6,5mm AP + 6.5mm AP + 6,5mm AP + 6.5mm AP + 6.5 мм бронебойные + + + Caliber: 6.5x39 mm AP<br />Rounds: 30<br />Used in: Katiba + Kaliber: 6,5x39 mm Páncéltörő<br />Lőszerek: 30<br />Használható: Katiba + Kaliber: 6,5x39 mm AP<br />Patronen: 30<br />Eingesetzt von: Katiba + Calibre: 6,5x39 mm AP<br />Balas: 30<br />Se usa en: Katiba + Calibre: 6,5x39 mm AP<br />Cartouches: 30<br />Utilisé dans: Katiba + Kaliber: 6,5 x 39 mm AP<br />Pociski: 30<br />Używane w: Katiba + Ráže: 6.5x39 mm AP<br />Munice: 30<br />Použití: Katiba + Calibre: 6,5x39 mm AP<br />Projéteis: 30<br />Usado em: Katiba + Calibro: 6.5x39 mm AP<br />Munizioni: 30<br />In uso su: Katiba + Калибр: 6.5x39 мм бронебойные<br />Патронов: 30<br />Применимы в: Katiba + + + + 5.56mm 30rnd Tracer IR-DIM Mag + 5,56 mm Nyomjelző IR-DIM 30-as Tár + 5,56 mm 30-Schuss-Magazin Leuchtspur IR-DIM + Cargador de 30 balas trazadoras IR-DIM de 5,56mm + Ch. 5,56mm 30Cps Traçantes IR-DIM + Magazynek 5,56mm 30rd Smugacz IR-DIM + 5.56mm 30ks Svítící IR-DIM Zásobník + Carregador de 30 projéteis traçantes IR-DIM de 5,56mm + Caricatore 5.56mm 30rnd Traccianti IR-DIM + Магазин из 30-и 5.56 мм трассирующих под ПНВ + + + 5.56mm IR-DIM + 5,56 mm IR-DIM + 5,56mm IR-DIM + 5,56mm IR-DIM + 5,56mm IR-DIM + 5,56mm IR-DIM + 5.56mm IR-DIM + 5,56mm IR-DIM + 5.56mm IR-DIM + 5.56 мм трассирущие под ПНВ + + + Caliber: 5.56x45 mm Tracer IR-DIM<br />Rounds: 30<br />Used in: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Kaliber: 5,56x45 mm Nyomjelző IR-DIM<br />Lőszerek: 30<br />Használható: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Kaliber: 5,56x45 mm Leuchtspur IR-DIM<br />Patronen: 30<br />Eingesetzt von: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Calibre: 5,56x45 mm Trazadoras IR-DIM<br />Balas: 30<br />Se usa en: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Calibre: 5,56x45 mm Traçantes IR-DIM<br />Cartouches: 30<br />Utilisé dans: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Kaliber: 5,56 x 45 mm Smugowy IR-DIM<br />Pociski: 30<br />Używane w: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Ráže: 5.56x45 mm Svítící IR-DIM<br />Munice: 30<br />Použití: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Calibre: 5,56x45 mm Traçante IR-DIM<br />Projéteis: 30<br />Usado em: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Calibro: 5.56x45 mm Traccianti IR-DIM<br />Munizioni: 30<br />In uso su: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Калибр: 5.56x45 мм трассирующие под ПНВ<br />Патронов: 30<br />Применимы в: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + + + 5.56mm 30Rnd SD Mag + 5,56 mm Hangtompítós 30-as Tár + 5,56 mm 30-Schuss-Magazin SD + Cargador de 30 balas SD de 5,56 mm + Ch. 5,56mm 30Cps SD + Magazynek 5,56mm 30rd SD + 5.56mm 30ks SD Zásobník + Carregador de 30 projéteis SD de 5,56mm + Caricatore 5.56mm 30Rnd Sil. + Магазин из 30-и 5.56 мм дозвуковых + + + 5.56mm SD + 5,56 mm Hangtompítós + 5,56mm SD + 5,56 mm SD + 5,56mm SD + 5,56mm SD + 5.56mm SD + 5,56mm SD + 5.56 Sil. + 5.56 мм дозвуковые + + + Caliber: 5.56x45 mm SD<br />Rounds: 30<br />Used in: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Kaliber: 5,56x45 mm Hangtompítós<br />Lőszerek: 30<br />Használható: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Kaliber: 5,56x45 mm SD<br />Patronen: 30<br />Eingesetzt von: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Calibre: 5,56x45 mm SD<br />Balas: 30<br />Se usa en: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Calibre: 5.56x45 mm SD<br />Cartouches: 30<br />Utilisé dans: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Kaliber: 5,56 x 45 mm SD<br />Pociski: 30<br />Używane w: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Ráže: 5.56x45 mm SD<br />Munice: 30<br />Použití: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Calibre: 5,56x45 mm SD<br />Projéteis: 30<br />Usado em: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Calibro: 5.56x45 mm Sil.<br />Munizioni: 30<br />In uso su: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Калибр: 5.56x45 мм дозвуковые<br />Патронов: 30<br />Применимы в: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + + + 5.56mm 30Rnd AP Mag + 5,56 mm Páncéltörő 30-as Tár + 5,56 mm 30-Schuss-Magazin AP + Cargador de 30 balas AP de 5,56mm + Ch. 5,56mm 30Cps AP + Magazynek 5,56mm 30rd AP + 5.56mm 30ks AP Zásobník + Carregador de 30 projéteis AP de 5,56mm + Caricatore 5.56mm 30Rnd AP + Магазин из 30-и 5.56 мм бронебойных + + + 5.56mm AP + 5,56 mm Páncéltörő + 5,56mm AP + 5,56mm AP + 5,56mm AP + 5,56mm AP + 5.56mm AP + 5,56mm AP + 5.56mm AP + 5.56 мм бронебойные + + + Caliber: 5.56x45 mm AP<br />Rounds: 30<br />Used in: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Kaliber: 5,56x45 mm Páncéltörő<br />Lőszerek: 30<br />Használható: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Kaliber: 5,56x45 mm AP<br />Patronen: 30<br />Eingesetzt von: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Calibre: 5,56x45 mm AP<br />Balas: 30<br />Se usa en: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Calibre: 5,56x45 mm AP<br />Cartouches: 30<br />Utilisé dans: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Kaliber: 5,56 x 45 mm AP<br />Pociski: 30<br />Używane w: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Ráže: 5.56x45 mm AP<br />Munice: 30<br />Použití: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Calibre: 5,56x45 mm AP<br />Projéteis: 30<br />Usado em: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Calibro: 5.56x45 mm AP<br />Munizioni: 30<br />In uso su: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Калибр: 5.56x45 мм бронебойные<br />Патронов: 30<br />Применимы в: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + + + + 7.62mm 20rnd Tracer Mag + 7,62 mm Nyomjelző IR-DIM 20-as Tár + 7,62 mm 20-Schuss-Magazin Leuchtspur + Cargador de 20 balas trazadores de 7,62mm + Ch. 7,62mm 20Cps Traçantes + Magazynek 7,62mm 20rd Smugacz + 7.62mm 20ks Svítící Zásobník + Carregador de 20 projéteis traçantes de 7,62mm + Caricatore 7.62mm 20Rnd Traccianti + Магазин из 20-и 7.62 мм трассирующих + + + 7.62mm Tracer + 7,62 mm Nyomjelző + 7,62mm Leuchtspur + 7,62mm Trazadora + 7,62mm Traçantes + 7,62mm Smugacz + 7.62mm Svítící + 7,62mm Traçante + 7.62mm Traccianti + 7.62 мм трассирущие + + + Caliber: 7.62x51 mm Tracer<br />Rounds: 20<br />Used in: Mk18 ABR + Kaliber: 7,62x51 mm Nyomjelző<br />Lőszerek: 20<br />Használható: Mk18 ABR + Kaliber: 7,62x51 mm Leuchtspur<br />Patronen: 20<br />Eingesetzt von: EBR + Calibre: 7,62x51 mm Trazadora<br />Balas: 20<br />Se usa en: Mk18 ABR + Calibre: 7,62x51 mm Traçantes<br />Cartouches: 20<br />Utilisé dans: EBR + Kaliber: 7,62 x 51 mm Smugacz<br />Pociski: 20<br />Używane w: Mk18 ABR + Ráže: 7.62x51 mm Svítící<br />Munice: 20<br />Použití: Mk18 ABR + Calibre: 7,62x51 mm Traçante<br />Projéteis: 20<br />Usado em: Mk18 ABR + Calibro: 7.62x51 mm Traccianti<br />Munizioni: 20<br />In uso su: Mk18 ABR + Калибр: 7.62x51 мм трассирующие<br />Патронов: 20<br />Применимы в: Mk18 ABR + + + 7.62mm 20rnd Tracer IR-DIM Mag + 7,62 mm Nyomjelző IR-DIM 20-as Tár + 7,62 mm 20-Schuss-Magazin Leuchtspur IR-DIM + Cargador de 20 balas IR-DIM de 7,62mm + Ch. 7,62mm 20Cps Traçantes IR-DIM + Magazynek 7,62mm 20rd Smugacz IR-DIM + 7.62mm 20ks Svítící IR-DIM Zásobník + Carregador de 20 projéteis IR-DIM de 7,62mm + Caricatore 7.62mm 20rnd Traccianti IR-DIM + Магазин из 20-и 7.62 мм трассирующих под ПНВ + + + 7.62mm IR-DIM + 7,62 mm IR-DIM + 7,62mm IR-DIM + 7,62mm IR-DIM + 7,62mm IR-DIM + 7,62mm IR-DIM + 7.62mm IR-DIM + 7,62mm IR-DIM + 7.62mm IR-DIM + 7.62 мм трассирущие под ПНВ + + + Caliber: 7.62x51 mm Tracer IR-DIM<br />Rounds: 20<br />Used in: Mk18 ABR + Kaliber: 7,62x51 mm Nyomjelző IR-DIM<br />Lőszerek: 20<br />Használható: Mk18 ABR + Kaliber: 7,62x51 mm Leuchtspur IR-DIM<br />Patronen: 20<br />Eingesetzt von: EBR + Calibre: 7,62x51 mm Trazadoras IR-DIM<br />Balas: 20<br />Se usa en: Mk18 ABR + Calibre: 7,62x51 mm Traçantes IR-DIM<br />Cartouches: 20<br />Utilisé dans: EBR + Kaliber: 7,62 x 51 mm Smugacz IR-DIM<br />Pociski: 20<br />Używane w: Mk18 ABR + Ráže: 7.62x51 mm Svítící IR-DIM<br />Munice: 20<br />Použití: Mk18 ABR + Calibre: 7,62x51 mm Traçante IR-DIM<br />Projéteis: 20<br />Usado em: Mk18 ABR + Calibro: 7.62x51 mm Traccianti IR-DIM<br />Munizioni: 20<br />In uso su: Mk18 ABR + Калибр: 7.62x51 мм трассирующие под ПНВ<br />Патронов: 20<br />Применимы в: Mk18 ABR + + + 7.62mm 20Rnd SD Mag + 7,62 mm Hangtompítós 20-as Tár + 7,62 mm 20-Schuss-Magazin SD + Cargador de 20 balas SD de 7,62mm + Ch. 7,62mm 20Cps SD + Magazynek 7,62mm 20rd SD + 7.62mm 20ks SD Zásobník + Carregador de 20 projéteis SD de 7,62mm + Caricatore 7.62mm 20Rnd Sil. + Магазин из 20-и 7.62 мм дозвуковых + + + 7.62mm SD + 7,62 mm Hangtompítós + 7,62mm SD + 7,62mm SD + 7,62mm SD + 7,62mm SD + 7.62mm SD + 7,62mm SD + 7.62mm Sil. + 7.62 мм дозвуковые + + + Caliber: 7.62x51 mm SD<br />Rounds: 20<br />Used in: Mk18 ABR + Kaliber: 7,62x51 mm Hangtompítós<br />Lőszerek: 20<br />Használható: Mk18 ABR + Kaliber: 7,62x51 mm SD<br />Patronen: 20<br />Eingesetzt von: EBR + Calibre: 7,62x51 mm SD<br />Balas: 20<br />Se usa en: Mk18 ABR + Calibre: 7,62x51 mm SD<br />Cartouches: 20<br />Utilisé dans: EBR + Kaliber: 7,62 x 51 mm SD<br />Pociski: 20<br />Używane w: Mk18 ABR + Ráže: 7.62x51 mm SD<br />Munice: 20<br />Použití: Mk18 ABR + Calibre: 7,62x51 mm SD<br />Projéteis: 20<br />Usado em: Mk18 ABR + Calibro: 7.62x51 mm Sil.<br />Munizioni: 20<br />In uso su: Mk18 ABR + Калибр: 7.62x51 мм дозвуковые<br />Патронов: 20<br />Применимы в: Mk18 ABR + + + 7.62mm 20Rnd AP Mag + 7,62 mm Páncéltörő 20-as Tár + 7,62 mm 20-Schuss-Magazin AP + Cargador de 20 balas AP de 7,62mm + Ch. 7,62mm 20Cps AP + Magazynek 7,62mm 20rd AP + 7.62mm 20ks AP Zásobník + Carregador de 20 projéteis AP de 7,62mm + Caricatore 7.62mm 20Rnd AP + Магазин из 20-и 7.62 мм бронебойных + + + 7.62mm AP + 7,62 mm Páncéltörő + 7,62mm AP + 7,62mm AP + 7,62mm AP + 7,62mm AP + 7.62mm AP + 7,62mm AP + 7.62mm AP + 7.62 мм бронебойные + + + Caliber: 7.62x51 mm AP<br />Rounds: 20<br />Used in: Mk18 ABR + Kaliber: 7,62x51 mm Páncéltörő<br />Lőszerek: 20<br />Használható: Mk18 ABR + Kaliber: 7,62x51 mm AP<br />Patronen: 20<br />Eingesetzt von: EBR + Calibre: 7,62x51 mm AP<br />Balas: 20<br />Se usa en: Mk18 ABR + Calibre: 7,62x51 mm AP<br />Cartouches: 20<br />Utilisé dans: EBR + Kaliber: 7,62 x 51 mm AP<br />Pociski: 20<br />Używane w: Mk18 ABR + Ráže: 7.62x51 mm AP<br />Munice: 20<br />Použití: Mk18 ABR + Calibre: 7,62x51 mm AP<br />Projéteis: 20<br />Usado em: Mk18 ABR + Calibro: 7.62x51 mm AP<br />Munizioni: 20<br />In uso su: Mk18 ABR + Калибр: 7.62x51 мм дозвуковые<br />Патронов: 20<br />Применимы в: Mk18 ABR + + + Caliber: 7.62x51mm M118LR<br />Rounds: 20<br />Type: M14 + Kaliber: 7,62x51 mm M118LR<br />Lőszerek: 20<br />Típus: M14 + Kaliber: 7,62x51mm M118LR<br />Schuss: 20<br />Typ: M14 + Calibre: 7,62x51mm M118LR<br />Balas: 20<br />Tipo: M14 + Kaliber: 7,62 x 51 mm M118LR<br />Pociski: 20<br />Typ: M14 + Kalibr: 7.62x51mm M118LR<br />Náboje: 20<br />Typ: M14 + Calibre : 7,62x51mm M118LR<br />Cartouches: 20<br />Type: M14 + Calibre: 7,62x51mm M118LR<br />Projéteis: 20<br />Tipo: M14 + Калибр: 7.62x51mm M118LR<br />Патронов: 20<br />Тип: M14 + Calibro: 7.62x51mm M118LR<br />Munizioni:20<br />In uso su: M14 + + + + .338 LM 10Rnd Tracer Mag + .338 LM 10-Schuss-Magazin Leuchtspur + + + .338 LM Tracer + .338 LM Leuchtspur + + + Caliber: .338 Lapua Magnum Tracer<br />Rounds: 10<br />Used in: MAR-10 + Kaliber: .338 Lapua Magnum Leuchtspur<br />Schuss: 10<br />Verwendet für: MAR-10 + + + .338 LM 10Rnd IR-DIM Mag + .338 LM 10-Schuss-Magazin Leuchtspur IR-DIM + + + .338 LM IR-DIM + .338 LM IR-DIM + + + Caliber: .338 Lapua Magnum Tracer IR-DIM<br />Rounds: 10<br />Used in: MAR-10 + Kaliber: .338 Lapua Magnum Leuchtspur IR-DIM<br />Schuss: 10<br />Verwendet für: MAR-10 + + + .338 LM 10Rnd AP Mag + .338 LM 10-Schuss-Magazin Hartkern + + + .338 LM AP + .338 LM AP + + + Caliber: .338 Lapua Magnum AP<br />Rounds: 10<br />Used in: MAR-10 + Kaliber: .338 Lapua Magnum Hartkern<br />Schuss: 10<br />Verwendet für: MAR-10 + + + .338 LM 10Rnd SD Mag + .338 LM 10-Schuss-Magazin Unterschall + + + .338 LM SD + .338 LM SD + + + Caliber: .338 Lapua Magnum SD<br />Rounds: 10<br />Used in: MAR-10 + Kaliber: .338 Lapua Magnum Unterschall<br />Schuss: 10<br />Verwendet für: MAR-10 + + + + .338 NM 130Rnd Tracer Belt + .338 NM 130-Schuss-Gurt Leuchtspur + + + .338 NM Tracer + .338 NM Leuchtspur + + + Caliber: .338 Norma Magnum Tracer<br />Rounds: 130<br />Used in: SPMG + Kaliber: .338 Norma Magnum Leuchtspur<br />Schuss: 130<br />Verwendet für: SPMG + + + .338 NM 130Rnd IR-DIM Belt + .338 NM 130-Schuss-Gurt Leuchtspur IR-DIM + + + .338 NM IR-DIM + .338 LM IR-DIM + + + Caliber: .338 Norma Magnum Tracer IR-DIM<br />Rounds: 130<br />Used in: SPMG + Kaliber: .338 Norma Magnum Leuchtspur IR-DIM<br />Schuss: 130<br />Verwendet für: SPMG + + + + 9.3mm 10Rnd Tracer Mag + 9,3mm 10-Schuss-Magazin Leuchtspur + + + 9.3mm Tracer + 9,3mm Leuchtspur + + + Caliber: 9.3x64mm Tracer<br />Rounds: 10<br />Used in: Cyrus + Kaliber: 9,3x64mm Leuchtspur<br />Schuss: 10<br />Verwendet für: Cyrus + + + 9.3mm 10Rnd Tracer IR-DIM Mag + 9,3mm 10-Schuss-Magazin Leuchtspur IR-DIM + + + 9.3mm IR-DIM + 9,3mm IR-DIM + + + Caliber: 9.3x64mm Tracer IR-DIM<br />Rounds: 10<br />Used in: Cyrus + Kaliber: 9,3x64mm Leuchtspur IR-DIM<br />Schuss: 10<br />Verwendet für: Cyrus + + + 9.3mm 10Rnd AP Mag + 9,3mm 10-Schuss-Magazin Hartkern + + + 9.3mm AP + 9,3mm AP + + + Caliber: 9.3x64mm AP<br />Rounds: 10<br />Used in: Cyrus + Kaliber: 9,3x64mm Hartkern<br />Schuss: 10<br />Verwendet für: Cyrus + + + 9.3mm 10Rnd SD Mag + 9,3mm 10-Schuss-Magazin Unterschall + + + 9.3mm SD + 9,3mm SD + + + Caliber: 9.3x64mm SD<br />Rounds: 10<br />Used in: Cyrus + Kaliber: 9,3x64mm Unterschall<br />Schuss: 10<br />Verwendet für: Cyrus + + From 38adfbcb7079387ea244b70b0d0e823cb2debdc1 Mon Sep 17 00:00:00 2001 From: Kllrt Date: Sat, 11 Apr 2015 16:33:00 +0200 Subject: [PATCH 105/214] Added missing CZ strings and made little revision --- addons/attach/stringtable.xml | 17 +- addons/captives/stringtable.xml | 9 +- addons/common/stringtable.xml | 12 +- addons/disposable/stringtable.xml | 4 +- addons/dragging/stringtable.xml | 7 +- addons/explosives/stringtable.xml | 13 +- addons/flashsuppressors/stringtable.xml | 14 +- addons/goggles/stringtable.xml | 6 +- addons/grenades/stringtable.xml | 24 +- addons/hearing/stringtable.xml | 3 +- addons/interact_menu/stringtable.xml | 9 +- addons/interaction/stringtable.xml | 31 +- addons/inventory/stringtable.xml | 6 +- addons/kestrel/stringtable.xml | 4 +- addons/laser_selfdesignate/stringtable.xml | 6 +- addons/laserpointer/stringtable.xml | 10 +- addons/logistics_uavbattery/stringtable.xml | 6 +- addons/logistics_wirecutter/stringtable.xml | 6 +- addons/magazinerepack/stringtable.xml | 15 +- addons/maptools/stringtable.xml | 6 +- addons/medical/stringtable.xml | 29 +- addons/microdagr/stringtable.xml | 13 +- addons/missileguidance/stringtable.xml | 82 +- addons/movement/stringtable.xml | 4 +- addons/nametags/stringtable.xml | 6 +- addons/nightvision/stringtable.xml | 8 +- addons/optionsmenu/stringtable.xml | 18 +- addons/overheating/stringtable.xml | 6 +- addons/realisticnames/stringtable.xml | 2642 ++++++++++--------- addons/reload/stringtable.xml | 10 +- addons/reloadlaunchers/stringtable.xml | 54 +- addons/vector/stringtable.xml | 4 +- addons/weaponselect/stringtable.xml | 6 +- addons/wep_javelin/stringtable.xml | 46 +- addons/winddeflection/stringtable.xml | 70 +- 35 files changed, 1623 insertions(+), 1583 deletions(-) diff --git a/addons/attach/stringtable.xml b/addons/attach/stringtable.xml index 27a0517f9a..a86c82e008 100644 --- a/addons/attach/stringtable.xml +++ b/addons/attach/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -44,7 +44,7 @@ Marcador IR acoplado Przyczepiono stroboskop IR Strobe IR attaché - IR Značkovač Připnutý + IR Značkovač připnutý Marcador IV Acoplado Strobo IR attaccata Infravörös jeladó hozzácsatolva @@ -56,7 +56,7 @@ Marcador IR quitado Odczepiono stroboskop IR Strobe IR détaché - IR Značkovač Odepnutý + IR Značkovač odepnutý Marcador IV Separado Strobo IR staccata Infravörös jeladó lecsatolva @@ -68,7 +68,7 @@ Granada IR acoplada Przyczepiono granat IR Grenade IR attachée - IR Granát Připnutý + IR Granát připnutý Granada IV Acoplada Granata IR attaccata Infravörös gránát hozzácsatolva @@ -80,7 +80,7 @@ Granada IR quitada Odczepiono granat IR Grenade IR détachée - IR Granát Odepnutý + IR Granát odepnutý Granada IV Separada Granata IR staccata Infravörös gránát lecsatolva @@ -92,7 +92,7 @@ Barra de luz acoplada Przyczepiono światło chemiczne Chemlight attaché - Chemické světlo Připnuto + Chemické světlo připnuto Chemlight Acoplada Chemlight attaccata Chemlight hozzácsatolva @@ -104,7 +104,7 @@ Barra de luz quitada Odczepiono światło chemiczne Chemlight détaché - Chemické světlo Odepnuto + Chemické světlo odepnuto Chemlight Separada Chemlight staccata Chemlight hozzácsatolva @@ -174,6 +174,7 @@ Befestigen fehlgeschlagen Присоединить Ошибка Error al acoplar + Připnutí selhalo - + \ No newline at end of file diff --git a/addons/captives/stringtable.xml b/addons/captives/stringtable.xml index 897782747f..d07db4de95 100644 --- a/addons/captives/stringtable.xml +++ b/addons/captives/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -134,26 +134,31 @@ Surrender Kapitulieren Rendirse + Vzdát se Stop Surrendering Den Kampf erneut aufnehmen Dejar de rendirse + Přestat se vzdávat Only use on alive units Nur bei lebenden Einheiten verwendbar Utilizar solo en unidades vivas + Použitelné jen na živé jednotky Only use on dismounted inf Nur bei abgesessener Infanterie verwendbar Utilizar solo en infanteria desmontada + Použitelné jen na pěsích jednotkách Nothing under mouse Es wurde nichts ausgewählt Nada bajo el ratón + Nic není vybráno - + \ No newline at end of file diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index 04a98e6b38..93f40e4720 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -43,7 +43,7 @@ ACE Optionen Opciones ACE Opcje ACE - ACE Nastavení + Nastavení ACE ACE Options ACE Настройки Opções do ACE @@ -248,7 +248,7 @@ Aktion abgebrochen. Acción cancelada. Przerwano czynność - Akce přerušena + Akce přerušena. Action annulée. Действие отменено. Ação cancelada. @@ -300,12 +300,14 @@ Anfrage annehmen Aceptar peticiones Akceptuj prośby + Přijmout žádost Decline Requests Anfrage ablehnen Rechazar peticiones Ignoruj prośby + Zamítnout žádost Accept Requests send by other players. These can be requests to use / share equipment, perform certain actions. @@ -363,11 +365,13 @@ Banana Banane Banana + Banán A banana is an edible fruit, botanically a berry, produced by several kinds of large herbaceous flowering plants in the genus Musa. Die Bananen (Musa) sind eine Pflanzengattung in der Familie der Bananengewächse (Musaceae) innerhalb der Einkeimblättrigen Pflanzen (Monokotyledonen). Una banana es una fruta comestible, botanicamente una baya, producida por varios tipos de grandes plantas herbáceas del género Musa. + Banán je protáhlé ovoce a plod banánovníku (epigeická bobule). - + \ No newline at end of file diff --git a/addons/disposable/stringtable.xml b/addons/disposable/stringtable.xml index 8b6c032961..1cdbf36ca2 100644 --- a/addons/disposable/stringtable.xml +++ b/addons/disposable/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -26,7 +26,7 @@ Preloaded Missile Dummy Preloaded Missile Dummy Preloaded Missile Dummy - Preloaded Missile Dummy + Přednabitá dummy střela Preloaded Missile Dummy Preloaded Missile Dummy Preloaded Missile Dummy diff --git a/addons/dragging/stringtable.xml b/addons/dragging/stringtable.xml index 9193d2712e..57536c7f97 100644 --- a/addons/dragging/stringtable.xml +++ b/addons/dragging/stringtable.xml @@ -1,5 +1,5 @@ - - + + @@ -40,6 +40,7 @@ Não é possível carregar o item devido a seu peso Non è possibile trascinare l'oggetto a causa del suo peso Túl nehéz ahhoz, hogy elhúzd --> + Moc težké Carry @@ -54,4 +55,4 @@ Нести - + \ No newline at end of file diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml index 386e1677ed..ec2a995df6 100644 --- a/addons/explosives/stringtable.xml +++ b/addons/explosives/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -80,7 +80,7 @@ + Modificador, girar + Modificateur, tourner + Modificatore, rotazione - + Otočit + + Modifikátor, otočit + Változtatás, forgatás + modyfikator, obracanie + Modificador, rotaciona @@ -140,7 +140,7 @@ Dispositivo de detonación M57 Zapalnik M57 M57 Dispositif de mise à feu - M57 Odpalovací Zařízení + Odpalovací zařízení M57 Detonatore M57 M57 Detonátor M57 Dispositivo de Detonação @@ -152,7 +152,7 @@ Usado para detonar remotamente explosivos Używany do zdalnego detonowania ładunków wybuchowych Utilisé pour déclencher des explosifs à distance - Použévané ke vzdálenému odpalování výbušnin + Používané ke vzdálenému odpalování výbušnin Usato per l'attivazione a distanza degli esplosivi Robbanóanyagok távoli robbantásához Usado para acionar explosivos remotamente @@ -164,7 +164,7 @@ Dispositivo de detonación MK26 Zapalnik M26 M26 Dispositif de mise à feu - M26 Odpalovací Zařízení + Odpalovací zařízení M26 Detonatore M26 M26 Detonátor M26 Dispositivo de Detonação @@ -494,6 +494,7 @@ Pick up Aufnehmen Recoger + Sebrat - + \ No newline at end of file diff --git a/addons/flashsuppressors/stringtable.xml b/addons/flashsuppressors/stringtable.xml index 3f6cc7b0d2..6f48202b04 100644 --- a/addons/flashsuppressors/stringtable.xml +++ b/addons/flashsuppressors/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -9,7 +9,7 @@ Soppressore di fiamma (6.5mm) Supressor de Clarão (6,5mm) Tłumik płomieni (6,5 mm) - Tlumič záblesku (6,5 mm) + Tlumič plamene (6,5 mm) Cache-flamme (6,5 mm) Пламегаситель (6,5 мм) Supresor (6,5 mm) @@ -21,7 +21,7 @@ Soppressore di fiamma (7.62mm) Supressor de Clarão (7,62mm) Tłumik płomieni (7,62 mm) - Tlumič záblesku (7,62 mm) + Tlumič plamene (7,62 mm) Cache-flamme (7,62 mm) Пламегаситель (7,62 мм) Supresor (7,62 mm) @@ -33,7 +33,7 @@ Soppressore di fiamma (5.56mm) Supressor de Clarão (5,56mm) Tłumik płomieni (5,56 mm) - Tlumič záblesku (5,56 mm) + Tlumič plamene (5,56 mm) Cache-flamme (5,56 mm) Пламегаситель (5,56 мм) Supresor (5,56 mm) @@ -45,7 +45,7 @@ Soppressore di fiamma (.45 ACP) Supressor de Clarão (.45 ACP) Tłumik płomieni (.45 ACP) - Tlumič záblesku (.45 ACP) + Tlumič plamene (.45 ACP) Cache-flamme (.45 ACP) Пламегаситель (.45 ACP) Supresor (.45 ACP) @@ -57,10 +57,10 @@ Soppressore di fiamma (9 mm) Supressor de Clarão (9mm) Tłumik płomieni (9 mm) - Tlumič záblesku (9 mm) + Tlumič plamene (9 mm) Cache-flamme (9 mm) Пламегаситель (9 мм) Supresor (9 mm) - + \ No newline at end of file diff --git a/addons/goggles/stringtable.xml b/addons/goggles/stringtable.xml index 1756442176..fc10113f55 100644 --- a/addons/goggles/stringtable.xml +++ b/addons/goggles/stringtable.xml @@ -1,12 +1,12 @@  - + Show Goggle Effects in Third Person Brilleneffekt in dritter Person anzeigen Mostrar efectos de las gafas en tercera persona - Zobrazit účinky brýlí v třetí osobě + Zobrazit efekt brýlí v třetí osobě Effets de lunettes à la 3ème personne Отображать эффект очков в третьем лице Szemüveg effekt mutatása külső nézetből @@ -27,4 +27,4 @@ Pulisci gli occhiali - + \ No newline at end of file diff --git a/addons/grenades/stringtable.xml b/addons/grenades/stringtable.xml index 1129d44271..1c7eb83188 100644 --- a/addons/grenades/stringtable.xml +++ b/addons/grenades/stringtable.xml @@ -1,5 +1,5 @@ - - + + @@ -19,7 +19,7 @@ Normaler Wurf Lanzamiento normal Normalny rzut - Normální + Normální hod Lancer Normal Нормальный бросок Normál dobás @@ -31,7 +31,7 @@ Hoher Wurf Lanzamiento alto Rzut lobem - Vysoko + Vysoký hod Lancer Haut Высокий бросок Magas dobás @@ -43,7 +43,7 @@ Präziser Wurf Lanzamiento preciso Precyzyjny rzut - Přesně + Přesný hod Lancer Précis Точный бросок Pontos dobás @@ -80,7 +80,7 @@ Granada aturdidora M84 M84 Grenade Incapacitante Granat hukowy M84 - M84 Omračující granát + Omračující granát M84 M84 светозвуковая граната M84 Villanógránát Granata Stordente M84 @@ -101,7 +101,7 @@ M127A1 Hand Held Signal (White) M127A1 Leuchtmittel (Weiß) - M127A1 Světlice (Bílá) + Světlice M127A1 (Bílá) M127A1 Jelzőrakéta (Fehér) M127A1 Bengala (Bianco) Flara ręczna sygnałowa M127A1 (biała) @@ -113,7 +113,7 @@ M127A1 Hand Held Signal (Red) M127A1 Leuchtmittel (Rot) - M127A1 Světlice (Červená) + Světlice M127A1 (Červená) M127A1 Jelzőrakéta (Piros) M127A1 Bengala (Rosso) Flara ręczna sygnałowa M127A1 (czerwona) @@ -125,7 +125,7 @@ M127A1 Hand Held Signal (Green) M127A1 Leuchtmittel (Grün) - M127A1 Světlice (Zelená) + Světlice M127A1 (Zelená) M127A1 Jelzőrakéta (Zöld) M127A1 Bengala (Verde) Flara ręczna sygnałowa M127A1 (zielona) @@ -137,7 +137,7 @@ M127A1 Hand Held Signal (Yellow) M127A1 Leuchtmittel (Gelb) - M127A1 Světlice (Žlutá) + Světlice M127A1 (Žlutá) M127A1 Jelzőrakéta (Sárga) M127A1 Bengala (Giallo) Flara ręczna sygnałowa M127A1 (żółta) @@ -185,7 +185,7 @@ Yellow Hand Flare Gelbe Leuchtkugel, wird wie eine Granate geworfen. - Světlice Žlutá + Světlice (Žlutá) Jelzőrakéta (Sárga) Bengala (Giallo) Flara ręczna (żółta) @@ -243,4 +243,4 @@ M127A1 (Amarilla) - + \ No newline at end of file diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index f042128301..4022e8d4a5 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -102,6 +102,7 @@ Disable ear ringing Desactivar zumbido de oídos Knalltrauma deaktivieren + Vypnout pískání v uších \ No newline at end of file diff --git a/addons/interact_menu/stringtable.xml b/addons/interact_menu/stringtable.xml index e0f2c4967e..889f8524ef 100644 --- a/addons/interact_menu/stringtable.xml +++ b/addons/interact_menu/stringtable.xml @@ -1,31 +1,36 @@  - + Always display cursor for self interaction Immer den Cursor für Selbst-Interaktionen anzeigen. Mostrar siempre el cursor para la interacción propia + Zobrazit kurzor v menu pro vlastní interakci Interact Key Interaktionstaste Tecla de interacción + Klávesa pro interakci Self Interaction Key Selbst-Interaktionstaste Tecla de interacción propia + Klávesa pro vlastní interakci Self Actions Selbst-Interaktion Acciones propias + Vlastní akce Vehicle Actions Fahrzeug-Interaktion Acciones de vehículo + Interakce s vozidly - + \ No newline at end of file diff --git a/addons/interaction/stringtable.xml b/addons/interaction/stringtable.xml index cd2d6ece01..2c3349293f 100644 --- a/addons/interaction/stringtable.xml +++ b/addons/interaction/stringtable.xml @@ -1,46 +1,54 @@  - + Interactions Interaktion Interacciones + Interakce Torso Torso Torso + Trup Head Kopf Cabeza + Hlava Left Arm Arm links Brazo izquierdo + Levá paže Right Arm Arm rechts Brazo derecho + Pravá paže Left Leg Bein links Pierna izquierda + Levá noha Right Leg Bein rechts Pierna derecha + Pravá hona Weapon Waffe Arma + Zbraň Interaction Menu @@ -143,7 +151,7 @@ Gruppe verlassen Dejar grupo Opuść grupę - Odejít ze skupiny + Opustit skupinu Quitter Groupe Выйти из группы Csoport elhagyása @@ -203,7 +211,7 @@ Gesten Gestos Gesty - Gesta + Posunky Signaux Жесты Kézjelek @@ -385,7 +393,7 @@ On te tape sur l'épaule Zostałeś klepnięty po ramieniu Vállonveregettek - Někdo tě poklepal na rameno + Někdo tě poklepal na PRAVÉ rameno Вас похлопали по плечу Você foi tocado no ombro Ti è stato dato un colpetto sulla spalla @@ -397,7 +405,7 @@ On te tape sur l'épaule. Zostałeś klepnięty po ramieniu Vállonveregettek - Někdo tě poklepal na rameno. + Někdo tě poklepal na LEVÉ rameno. Вас похлопали по плечу Você foi tocado no ombro. Ti è stato dato un colpetto sulla spalla @@ -516,7 +524,7 @@ Unirse al<br/>equipo rojo Rejoindre<br/>Rouge Dołącz do drużyny<br/>czerwonej - Připojit do<br/>Červeného Týmu + Připojit do<br/>Červeného týmu Присоединиться<br/>к красной группе Unir-se à<br/>Equipe Vermelha Entra nella<br/>Squadra Rossa @@ -528,7 +536,7 @@ Unirse al<br/>equipo verde Rejoindre<br/>Verte Dołącz do<br/>drużyny zielonej - Připojit do<br/>Zeleného Týmu + Připojit do<br/>Zeleného týmu Присоединиться<br/>к зеленой группе Unir-se à<br/>Equipe Verde Entra nella<br/>Squadra Verde @@ -540,7 +548,7 @@ Unirse al<br/>equipo azul Rejoindre<br/>Bleue Dołącz do<br/>drużyny niebieskiej - Připojit do<br/>Modrého Týmu + Připojit do<br/>Modrého týmu Присоединиться<br/>к синей группе Unir-se à<br/>Equipe Azul Entra nella<br/>Squadra Blu @@ -552,7 +560,7 @@ Unirse al<br/>equipo amarillo Rejoindre<br/>Jaune Dołącz do<br/>drużyny żółtej - Připojit do<br/>Žlutého Týmu + Připojit do<br/>Žlutého týmu Присоединиться<br/>к желтой группе Unir-se à<br/>Equipe Amarela Entra nella<br/>Squadra Gialla @@ -564,7 +572,7 @@ Te has unido al equipo %1 Tu as rejoint l'équipe %1 Dołączyłeś do drużyny %1 - Připojil ses do Týmu %1 + Připojil ses do %1 týmu Вы присоединились к группе %1 Você uniu-se à Equipe %1 Sei entrato nella Squadra %1 @@ -673,6 +681,7 @@ Passengers Passagiere Pasajeros + Pasažéři - + \ No newline at end of file diff --git a/addons/inventory/stringtable.xml b/addons/inventory/stringtable.xml index bd84935808..9263cbf79b 100644 --- a/addons/inventory/stringtable.xml +++ b/addons/inventory/stringtable.xml @@ -1,16 +1,18 @@  - + Make Inventory Display Bigger Die Anzeige des Inventar vergrößern. Hacer la pantalla de inventario mas grande + Zvětšit zobrazení inventáře Normally inventory display is scaled by UI size. This allows scaling the Inventory UI size up, but doesn't increase font size allowing more rows displayed. Normalerweise wird die Größe des Inventars mit der Größe der UI skaliert. Diese Einstellung allerdings vergrößert das Inventar bei gleichbleibender Schriftgröße, so dass mehr Einträge angzeigt werden können. Normalmente la pantalla de inventario se escala por el tamaño de la interfaz de usuario. Esto permite ampliar el tamaño de la interfaz de usuario de inventario, pero no aumenta el tamaño de fuente, permitiendo mostrar más filas. + Normálně se velikost invetáře škáluje s velikostí UI. Toto nastavení dovoluje škálování velikost inventáře ale nežvětšuje velikost fontu. To dovoluje zobrazení více řad v inventáři. - + \ No newline at end of file diff --git a/addons/kestrel/stringtable.xml b/addons/kestrel/stringtable.xml index 5f54fd6489..f3388dfe51 100644 --- a/addons/kestrel/stringtable.xml +++ b/addons/kestrel/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -30,7 +30,7 @@ Anemómetro balístico Applied Ballistics Meter Urządzenie do monitorowania pogody - Zařízení pro měření vítru + Zařízení pro měření větru Monitoraggio Balistico Attivo Applied Ballistics Meter Medidor Balístico Ativo diff --git a/addons/laser_selfdesignate/stringtable.xml b/addons/laser_selfdesignate/stringtable.xml index da8030cb69..013beee16f 100644 --- a/addons/laser_selfdesignate/stringtable.xml +++ b/addons/laser_selfdesignate/stringtable.xml @@ -1,16 +1,18 @@  - + Laser<br/>Designator On Lasermarkierer<br/>an Laser<br/>Designador encendido + Laserový<br/>značkovač zapnut Laser<br/>Designator Off Lasermarkierer<br/>aus Laser<br/>Designador apagado + Laserový<br/>značkovat vypnut - + \ No newline at end of file diff --git a/addons/laserpointer/stringtable.xml b/addons/laserpointer/stringtable.xml index 87b36618a6..3c364c9e8b 100644 --- a/addons/laserpointer/stringtable.xml +++ b/addons/laserpointer/stringtable.xml @@ -1,21 +1,22 @@  + - Laser Pointer (red) Laserpointer (rot) + Laserové ukazovátko (červené) Laser Pointer (green) Laserpointer (grün) + Laserové ukazovátko (zelené) - Emits visible light. Strahlt sichtbares Licht aus. + Vyzařuje viditelné světlo. - <t color='#9cf953'>Use: </t>Turn Laser ON/OFF <t color='#9cf953'>Použití: </t>Zapnout/vypnout laser @@ -27,6 +28,5 @@ <t color='#9cf953'>Использовать: </t>вкл/выкл лазер <t color='#9cf953'>Usar: </t>encender/apagar láser - - + \ No newline at end of file diff --git a/addons/logistics_uavbattery/stringtable.xml b/addons/logistics_uavbattery/stringtable.xml index fbd9004290..e9bd6aa1af 100644 --- a/addons/logistics_uavbattery/stringtable.xml +++ b/addons/logistics_uavbattery/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -21,7 +21,7 @@ Pas de batterie UAV Potrzebujesz baterii UAV Szükséged van egy UAV akkumulátorra - Potřebuješ UAV-Baterii + Potřebuješ UAV baterii Você precisa de uma Bateria para VANT Hai bisogno di una Batteria UAV Требуется аккумулятор БПЛА @@ -45,7 +45,7 @@ Batterie UAV Bateria UAV UAV akkumulátor - UAV-Baterie + UAV baterie Bateria para VANT Batteria UAV Аккумулятор БПЛА diff --git a/addons/logistics_wirecutter/stringtable.xml b/addons/logistics_wirecutter/stringtable.xml index 91d321d75c..d5e795bfdf 100644 --- a/addons/logistics_wirecutter/stringtable.xml +++ b/addons/logistics_wirecutter/stringtable.xml @@ -1,16 +1,18 @@  - + Wirecutter Drahtschneider Cortador de cables + Štípací kleště Wirecutter Schneidet Draht. Cortador de cables + Štípačky Cut Fence @@ -49,4 +51,4 @@ Забор вырезан - + \ No newline at end of file diff --git a/addons/magazinerepack/stringtable.xml b/addons/magazinerepack/stringtable.xml index d63dd2d2cd..1f3968bc87 100644 --- a/addons/magazinerepack/stringtable.xml +++ b/addons/magazinerepack/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -20,7 +20,7 @@ Menú de selección de cargador Sélectionner menu des chargeurs Menu wyboru magazynków - Zvolit Menu Zásobníků + Zvolit Menu zásobníků Seleziona Menù di Ricarica Menu de Seleção de Carregador Fegyvertár menü kiválasztás @@ -32,7 +32,7 @@ Seleccionar cargador Sélectionner chargeur Wybierz magazynek - Zvolit Zásobník + Zvolit zásobník Seleziona Caricatore Selecionar Carregador Tár kiválasztása @@ -44,7 +44,7 @@ Reorganizando cargadores ... Réorganisation des chargeurs ... Przepakowywanie magazynków ... - Páskuji Zásobníky ... + Páskuji zásobníky ... Sto ricaricando le munizioni ... Reorganizando Carregadores ... Újratárazás ... @@ -56,7 +56,7 @@ Cargadores reorganizados Chargeurs réorganisés Magazynki przepakowane - Přepáskované Zásobníky + Přepáskované zásobníky Caricatore ricaricato Carregadores Reorganizados Újratárazott tárak @@ -78,16 +78,19 @@ Repacking Finished Wiederverpacken Fertig Reembalaje finalizado + Páskování dokončeno Repacking Interrupted Umpacken Unterbrochen Reembalaje interrumpido + Páskování přerušeno %1 Full and %2 Partial %1 Vollständigen und %2 Teilweisen %1 Total y %2 Parcial + %1 plný a %2 částečně - + \ No newline at end of file diff --git a/addons/maptools/stringtable.xml b/addons/maptools/stringtable.xml index 5dd4578976..4c9515f537 100644 --- a/addons/maptools/stringtable.xml +++ b/addons/maptools/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -8,7 +8,7 @@ Outils de navigation Narzędzia nawigacyjne Kartenwerkzeug - Pomůcky k Mapě + Pomůcky k mapě Strumenti Cartografici Ferramentas de Mapa Térképészeti eszközök @@ -32,7 +32,7 @@ Outils de navigation Narzędzia nawigacyjne Kartenwerkzeug - Pomůcky k Mapě + Pomůcky k mapě Strumenti Cartografici Ferramentas de Mapa Térképészeti eszközök diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 7036e6863d..fb3c8a9ce9 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -1,18 +1,19 @@  - + Inject Atropine Atropin Inyectar atropina + Aplikovat atropin Inject Epinephrine Epinephrine injizieren Inyectar Epinefrina Wtrzyknij adrenalinę - Aplikovat Adrenalin + Aplikovat adrenalin Ввести андреналил Adrénaline Adrenalin @@ -24,7 +25,7 @@ Morphin injizieren Inyectar Morfina Wstrzyknij morfinę - Aplikovat Morfin + Aplikovat morfin Ввести морфин Morphine Morfium @@ -47,16 +48,19 @@ Transfuse Plasma Plasmatransfusion Transfundir plasma + Transfúze plazmy Transfuse Saline Salzlösungtransfusion Transfundir salina + Transfúze fyziologický roztoku Apply Tourniquet Aderpresse anwenden Aplicar torniquete + Aplikovat škrtidlo Bandage @@ -147,7 +151,7 @@ Morphin injizieren ... Inyectando Morfina ... Wstrzykiwanie morfiny ... - Aplikuju Morfin ... + Aplikuji morfin ... Введение морфина... Injection de Morphine... Morfium beadása... @@ -159,7 +163,7 @@ Epinephrin injizieren ... Inyectando Epinefrina ... Wstrzykiwanie adrenaliny ... - Aplikuju Adrenalin ... + Aplikuji adrenalin ... Введение андреналина Injection d'Adrénaline ... Adrenalin beadása... @@ -169,6 +173,7 @@ Injecting Atropine ... Atropin injizieren ... + Aplikuji atropin ... Transfusing Blood ... @@ -186,11 +191,13 @@ Transfusing Saline ... Sallösungtransfusion ... Transfusión de salina ... + Probíha transfúze fyziologický roztoku ... Transfusing Plasma ... Plasmatransfusion ... Transfusión de plasma ... + Probíha transfúze plazmy ... Bandaging ... @@ -208,6 +215,7 @@ Applying Tourniquet ... Aderpresse ... Aplicando torniquete ... + Aplikuji škrtidlo Medical @@ -223,6 +231,7 @@ Field Dressing Compresa de campaña + Obinadlo Packing Bandage @@ -231,6 +240,7 @@ Elastic Bandage Vendaje elástico + Elastické obinadlo QuikClot @@ -240,11 +250,13 @@ Check Pulse Puls überprüfen Comprobar pulso + Zkontrolovat pulz Check Blood Pressure Blutdruck messen Comprobar presión arterial + Zkontrolovat krevní tlak Triage Card @@ -255,11 +267,13 @@ Tourniquet Tourniquet Torniquete + Škrtidlo Remove Tourniquet Entferne Tourniquet Quitar torniquete + Sundat škrtidlo Give Blood IV (1000ml) @@ -378,7 +392,6 @@ Receiving IV [%1ml] Reciviendo IV [%1ml] - Bandage (Basic) Повязка (обычная) @@ -764,7 +777,6 @@ Мешок для упаковки трупов Bolsa para cadáveres - Blood Pressure Артериальное давление @@ -991,7 +1003,6 @@ Placing body in bodybag Colocando cuerpo en bolsa para cadáveres - %1 has bandaged patient %1 has vendado al paciente @@ -1009,4 +1020,4 @@ %1 aplicado torniquete - + \ No newline at end of file diff --git a/addons/microdagr/stringtable.xml b/addons/microdagr/stringtable.xml index 3431ad8fa9..4f136ce872 100644 --- a/addons/microdagr/stringtable.xml +++ b/addons/microdagr/stringtable.xml @@ -1,10 +1,11 @@  - + MicroDAGR GPS GPS MicroDAGR + MicroDAGR GPS MicroDAGR advanced GPS receiver @@ -81,23 +82,28 @@ Waypoints Puntos de ruta Wegpunkte + Waypointy Connect To Conectar a + Připojit k Settings Einstellungen Configuración + Nastavení SetWP Establecer PR + Nastavit WP Add Añadir + Přidat Delete @@ -117,14 +123,17 @@ Show MicoDAGR Mostrar MicroDAGR + Ukázat MicroDAGR GPS Configure MicroDAGR Configurar MicroDAGR + Konfigurovat MicroDAGR GPS Close MicroDAGR Cerrar MicroDAGR + Zavřít MicroDAGR GPS - + \ No newline at end of file diff --git a/addons/missileguidance/stringtable.xml b/addons/missileguidance/stringtable.xml index fc17de4722..db490e242c 100644 --- a/addons/missileguidance/stringtable.xml +++ b/addons/missileguidance/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -8,7 +8,7 @@ Avancée Missile orientation Asystent Missile Erweiterte Missile Guidance - Advanced Missile Guidance + Pokročilé řízení střel Avanzato Missile Guidance Avançado Missile Guidance Részletes rakéta irányító @@ -20,7 +20,7 @@ - + Povoluje pokročilou mechaniku řízení střel. @@ -28,80 +28,8 @@ /* Weapons */ - - Hydra-70 DAGR Missile - - - - - - - - - - - - DAGR - - - - - - - - - - - - Hydra-70 DAGR Laser Guided Missile - - - - - - - - - - + Hydra-70 DAGR MissileHydra-70 DAGRDAGRDAGRHydra-70 DAGR Laser Guided MissileHydra-70 DAGR Laserově naváděna střela /* Weapons */ - - Hellfire II AGM-114K Missile - - - - - - - - - - - - AGM-114K - - - - - - - - - - - - Hellfire II AGM-114K Laser Guided Missile - - - - - - - - - - - - + Hellfire II AGM-114K MissileHellfire II AGM-114KAGM-114KAGM-114KHellfire II AGM-114K Laser Guided MissileHellfire II AGM-114K Laserově naváděná střela \ No newline at end of file diff --git a/addons/movement/stringtable.xml b/addons/movement/stringtable.xml index d31896acaa..b04347f975 100644 --- a/addons/movement/stringtable.xml +++ b/addons/movement/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -8,7 +8,7 @@ Mostrar peso en libras Afficher le poids en lb Pokaż ciężar w funtach - Zobrazit váhu v lb + Zobrazit váhu v librách Mostra peso in libbre Mostrar peso em libras Súly megjelenítése fontban. diff --git a/addons/nametags/stringtable.xml b/addons/nametags/stringtable.xml index 2f37193b17..42f332ca72 100644 --- a/addons/nametags/stringtable.xml +++ b/addons/nametags/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -69,15 +69,17 @@ Show name tags for AI units Mostrar etiquetas de nombre para unidades IA + Zobrazit jména AI Show SoundWaves (requires player names) Zeigen Schallwelle (benötigt spielernamen) Mostrar onda sonora (requiere Mostrar nombres de jugadores) + Zobrazit SoundWaves (vyžaduje jména hráčů) Default Nametag Color (Non Group Members) Color de etiquetas de nombre por defecto (No miembros de grupo) - + \ No newline at end of file diff --git a/addons/nightvision/stringtable.xml b/addons/nightvision/stringtable.xml index 16ead016da..2dad02e3bd 100644 --- a/addons/nightvision/stringtable.xml +++ b/addons/nightvision/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -84,7 +84,7 @@ NS-Brille (Weitwinkel) Sistema de visión nocturna (Panorámicas) Gogle noktowizyjne (panoramiczne) - Noktovizor (Široký) + Noktovizor (Širokoúhlý) ПНВ (Широкий) @@ -92,7 +92,7 @@ Helligkeit: %1 Brillo: %1 Czułość: %1 - Zvýšení: %1 + Jas: %1 Luminosité : %1 Контраст: Fényerő: %1 @@ -124,4 +124,4 @@ Riduci la luminosità dell'NVG - + \ No newline at end of file diff --git a/addons/optionsmenu/stringtable.xml b/addons/optionsmenu/stringtable.xml index 6975ff4223..7f01a2fa09 100644 --- a/addons/optionsmenu/stringtable.xml +++ b/addons/optionsmenu/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -17,17 +17,20 @@ Fix Animation Arreglar animación + Opravit animace Reset All Rücksetzen Reiniciar todo + Vyresetovat vše Colors Farben цвета Colores + Barvy Options @@ -44,6 +47,7 @@ Values Valores + Hodnoty Yes @@ -79,10 +83,12 @@ Export Exportar + Exportovat Open Export Menu Abrir menu d'exportación + Otevřít exportovací menu String input. @@ -95,26 +101,32 @@ Number Numero + Číslo - Uknown input type + Unknown input type Tipo de entrada desconocida + Neznámý vstup Save input Guardar entrada + Uložit vstup Include Client Settings Incluir configuración de cliente + Zahrnout nastavení klienta Exclude Client Settings Excluir configuración de cliente + Nezahrnout nastavení klienta Settings exported to clipboard Configuración exportada al portapapeles + Nastevení exportována do schránky - + \ No newline at end of file diff --git a/addons/overheating/stringtable.xml b/addons/overheating/stringtable.xml index bc28c3a47d..058092bbda 100644 --- a/addons/overheating/stringtable.xml +++ b/addons/overheating/stringtable.xml @@ -1,14 +1,16 @@  - + Display text on jam Mostrar texto al encasquillar + Zobrazit upozornění při zaseknutí Display a notification whenever your weapon gets jammed Mostrar notificación cada vez que el arma se encasquille + Zobrazí upozornění při zaseknutí zbraně Spare barrel @@ -155,4 +157,4 @@ Температура - + \ No newline at end of file diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index 9ccd7752d2..0041207857 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -1,1310 +1,1336 @@  - + - - - XM312 - XM312 - XM312 - XM312 - XM312 - XM312 - XM312 - XM312 - XM312 - XM312A - - - XM312A - XM312A - XM312 - XM312A - XM312A - XM312A - XM312A - XM312A - XM312A - XM312A - - - XM312 (High) - XM312 (Hoch) - XM312 (Alto) - XM312 (Haut) - XM312 (Vysoký) - XM312 (Wysoki) - XM312 (Высокий) - XM312 (Alta) - XM312 (Magasított) - XM312 (Alta) - - - XM307 - XM307 - XM307 - XM307 - XM307 - XM307 - XM307 - XM307 - XM307 - XM307 - - - XM307A - XM307A - XM307A - XM307A - XM307A - XM307A - XM307A - XM307A - XM307A - XM307A - - - XM307 (High) - XM307 (Hoch) - XM307 (Alto) - XM307 (Haut) - XM307 (Vysoký) - XM307 (Wysoki) - XM307 (Высокий) - XM307 (Alta) - XM307 (Magasított) - XM307 (Alta) - - - Mini-Spike Launcher (AT) - Mini-Spike Lenkflugkörper (AT) - Lanzador Mini-Spike (AT) - Poste de tir Mini-Spike (AC) - Mini-Spike Odpalovač (AT) - Wyrzutnia Mini-Spike (AT) - Mini-Spike Пусковое устройство (ПТРК) - Lança-mísseis Mini-Spike (AC) - Mini-Spike rakétarendszer (páncéltörő) - Lanciatore Mini-Spike (AC) - - - Mini-Spike Launcher (AA) - Mini-Spike Lenkflugkörper (AA) - Lanzador Mini-Spike (AA) - Poste de tir Mini-Spike (AA) - Mini-Spike Odpalovač (AA) - Wyrzutnia Mini-Spike (AA) - Mini-Spike Пусковое устройство (ВВ) - Lança-mísseis Mini-Spike (AA) - Mini-Spike rakétarendszer (légvédelmi) - Lanciatore Mini-Spike (AA) - - - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - - - YABHON-R3 (CAS) - YABHON-R3 (Luftnahunterstützung) - YABHON-R3 (CAS) - YABHON-R3 (CAS) - YABHON-R3 (CAS) - YABHON-R3 (штурмовик) - - - M-ATV - M-ATV - M-ATV - M-ATV - M-ATV - M-ATV - M-ATV - M-ATV - M-ATV - M-ATV - - - M-ATV (HMG) - M-ATV (SMG) - M-ATV (HMG) - M-ATV (CKM) - M-ATV (TK) - M-ATV (HMG) - M-ATV (Пулемет) - M-ATV (HMG) - M-ATV (HMG) - M-ATV (HMG) - - - M-ATV (GMG) - M-ATV (GMW) - M-ATV (GMG) - M-ATV (GMG) - M-ATV (Granátomet) - M-ATV (GMG) - M-ATV (Гранатомет) - M-ATV (GMG) - M-ATV (GMG) - M-ATV (GMG) - - - Merkava Mk IV M - Merkava Mk IV M - Merkava Mk IV M - Merkawa Mk IV M - Merkava Mk IV M - Merkava Mk IV M - Меркава Mk IV M - Merkava Mk IV M - Merkava Mk IV M - Merkava Mk IV M - - - Merkava Mk IV LIC - Merkava Mk IV LIC - Merkava Mk IV LIC - Merkawa Mk IV LIC - Merkava Mk IV LIC - Merkava Mk IV LIC - Меркава Mk IV LIC - Merkava Mk IV LIC - Merkava Mk IV LIC - Merkava Mk IV LIC - - - Sholef - Sholef - Sholef - Sholef - Sholef - Sholef - Шолеф - Sholef - Sholef - Sholef - - - Seara - Seara - Seara - Seara - Seara - Seara - Seara - Seara - Seara - Seara - - - Namer - Namer - Namer - Namer - Namer - Namer - Намер - Namer - Namer - Namer - - - Bardelas - Bardelas - Bardelas - Bardelas - Bardelas - Bardelas - Bardelas - Bardelas - Bardelas - Bardelas - - - Patria AMV - Patria AMV - Patria AMV - Patria AMV - Patria AMV - Patria AMV - Patria AMV - Patria AMV - Patria AMV - Patria AMV - - - Nemmera - Nemmera - Nemmera - Nemmera - Nemmera - Nemmera - Nemmera - Nemmera - Nemmera - Nemmera - - - HEMTT Transport - HEMTT Transport - HEMTT de transporte - HEMTT Transportowy - HEMTT Valník - HEMTT Transport - HEMTT Транспортный - HEMTT Transporte - HEMTT szállítójármű - HEMTT da trasporto - - - HEMTT Transport (covered) - HEMTT Transport (bedeckt) - HEMTT de transporte (cubierto) - HEMTT Transportowy (zakryty) - HEMTT Valník (krytý) - HEMTT Transport (bâché) - HEMTT Транспортный (крытый) - HEMTT Transporte (coberto) - HEMTT szállítójármű (ponyvás) - HEMTT da trasporto (coperto) - - - HEMTT - HEMTT - HEMTT - HEMTT - HEMTT - HEMTT Tracteur - HEMTT - HEMTT - HEMTT - HEMTT - - - HEMTT Container - HEMTT Container - HEMTT de contenedor - HEMTT Kontener - HEMTT Skříňový - HEMTT Conteneur - HEMTT Контейнер - HEMTT Contêiner - HEMTT Konténer - HEMTT portacontainer - - - HEMTT Medical - HEMTT Sanitäter - HEMTT médico - HEMTT Medyczny - HEMTT Zdravotnický - HEMTT Sanitaire - HEMTT Медицинский - HEMTT Médico - HEMTT (egészségügyi) - HEMTT Medico - - - HEMTT Ammo - HEMTT Munition - HEMTT de munición - HEMTT Amunicyjny - HEMTT Muniční - HEMTT Munitions - HEMTT Боеприпасы - HEMTT Munições - HEMTT (lőszerszállító) - HEMTT di rifornimento munizioni - - - HEMTT Fuel - HEMTT Treibstoff - HEMTT de combustible - HEMTT Cysterna - HEMTT Cisterna - HEMTT Citerne - HEMTT Заправщик - HEMTT Combustível - HEMTT (üzemanyag-szállító) - HEMTT di rifornimento carburante - - - HEMTT Repair - HEMTT Instandsetzung - HEMTT de reparación - HEMTT Naprawczy - HEMTT Opravárenský - HEMTT Réparation - HEMTT Ремонтный - HEMTT Reparador - HEMTT (szerelő-jármű) - HEMTT Riparatore - - - Fennek - Fennek - Fennek - Fennek - Fennek - Fennek - Феннек - Fennek - Fennek - Fennek - - - Fennek (HMG) - Fennek (SMG) - Fennek (HMG) - Fennek (CKM) - Fennek (TK) - Fennek (HMG) - Феннек (Пулемет) - Fennek (HMG) - Fennek (HMG) - Fennek (HMG) - - - Fennek (GMG) - Fennek (GMW) - Fennek (GMG) - Fennek (GMG) - Fennek (granátomet) - Fennek (GMG) - Феннек (Гранатомет) - Fennek (GMG) - Fennek (GMG) - Fennek (GMG) - - - Leopard 2SG - Leopard 2SG - Leopard 2SG - Leopard 2SG - Leopard 2SG - Leopard 2SG - Леопард 2SG - Leopard 2SG - Leopard 2SG - Leopard 2SG - - - FV510 Warrior - FV510 Warrior - FV510 Warrior - FV510 Warrior - FV510 Warrior - FV510 Warrior - FV510 Уорриор - FV510 Warrior - FV510 Warrior - FV510 Warrior - - - Pandur II - Pandur II - Pandur II - Pandur II - Pandur II - Pandur II - Pandur II - Pandur II - Pandur II - Pandur II - - - KamAZ Transport - KamAZ Transport - KamAZ de transporte - KamAZ transportowy - KAMAZ Valník - KamAZ Transport - КамАЗ Траспортный - KamAZ Transporte - KamAZ szállítójármű - KamAZ da trasporto - - - KamAZ Transport (covered) - KamAZ Transport (bedeckt) - KamAZ de transporte (cubierto) - KamAZ Transportowy (zakryty) - KAMAZ Valník (krytý) - KamAZ Transport (bâché) - КамАЗ Траспортный (Крытый) - KamAZ Transporte (coberto) - KamAZ szállítójármű (ponyvás) - KamAZ da trasporto (coperto) - - - KamAZ Ammo - KamAZ Munition - KamAZ de munición - KamAZ Amunicyjny - KAMAZ Muniční - KamAZ Munitions - КамАЗ Боеприпасы - KamAZ Munições - KamAZ (lőszerszállító) - KamAZ di rifornimento munizioni - - - KamAZ Fuel - KamAZ Treibstoff - KamAZ de combustible - KamAZ cysterna - KAMAZ Cisterna - KamAZ Citerne - КамАЗ Заправщик - KamAZ Combustível - KamAZ (üzemanyag-szállító) - KamAZ di rifornimento carburante - - - KamAZ Repair - KamAZ Instandsetzung - KamAZ de reparación - KamAZ Naprawczy - KAMAZ Opravárenský - KamAZ Réparation - КамАЗ Ремонтный - KamAZ Reparador - KamAZ (szerelő-jármű) - KamAZ riparatore - - - KamAZ Medical - KamAZ Sanitäter - KamAZ médico - KamAZ Medyczny - KAMAZ Zdravotnický - KamAZ Sanitaire - КамАЗ Медицинский - KamAZ Médico - KamAZ (egészségügyi) - KamAZ Medico - - - Punisher - Punisher - Punisher - Punisher - Punisher - Punisher - Kаратель - Punisher - Punisher - Punisher - - - Punisher (HMG) - Punisher (SMG) - Punisher (HMG) - Punisher (CKM) - Punisher (TK) - Punisher (HMG) - Kаратель (Пулемет) - Punisher (HMG) - Punisher (HMG) - Punisher (HMG) - - - Punisher (GMG) - Punisher (GMW) - Punisher (GMG) - Punisher (CKM) - Punisher (granátomet) - Punisher (GMG) - Kаратель (Гранатомет) - Punisher (GMG) - Punisher (GMG) - Punisher (GMG) - - - T100 Black Eagle - T100 Black Eagle - T100 Black Eagle - T100 Black Eagle - T100 Black Eagle - T100 Black Eagle - T100 Черный Орел - T100 Black Eagle - T100 Black Eagle - T100 Black Eagle - - - 2S9 Sochor - 2S9 Sochor - 2S9 Sochor - 259 Sochor - 2S9 Sochor - 2S9 Sochor - 2S9 Сокор - 2S9 Sochor - 2S9 Sochor - 2S9 Sochor - - - BM-2T Stalker - BM-2T Stalker - BM-2T Stalker - BM-2T Stalker - BM-2T Stalker - BM-2T Stalker - БМ-2Т Сталкер - BM-2T Stalker - BM-2T Stalker - BM-2T Stalker - - - ZSU-35 Tigris - ZSU-35 Tigris - ZSU-35 Tigris - ZSU-35 Tigris - ZSU-35 Tigris - ZSU-35 Tigris - ЗСУ-35 Tigris - ZSU-35 Tigris - ZSU-35 Tigris - ZSU-35 Tigris - - - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - - - Typhoon Transport - Typhoon Transport - Typhoon de transporte - Typhoon Transportowy - Typhoon Valník - Typhoon Transport - Тайфун Транспортный - Typhoon Transporte - Typhoon szállítójármű - Typhoon da trasporto - - - Typhoon Transport (covered) - Typhoon Transport (bedeckt) - Typhoon de transporte (cubierto) - Typhoon Transportowy (przykryty) - Typhoon Valník (krytý) - Typhoon Transport (bâché) - Тайфун Транспортный (kрытый) - Typhoon Transporte (coberto) - Typhoon szállítójármű (ponyvás) - Typhoon da trasporto (coperto) - - - Typhoon Device - Typhoon Gerät - Typhoon de dispositivo - Typhoon Urządzenie - Typhoon Zařízení - Typhoon Dispositif - Тайфун Устройство - Typhoon Dispositivo - Typhoon (szerkezet) - Typhoon per dispositivo - - - Typhoon Ammo - Typhoon Munition - Typhoon de munición - Typhoon Amunicyjny - Typhoon Muniční - Typhoon Munitions - Тайфун Боеприпасы - Typhoon Munições - Typhoon (lőszerszállító) - Typhoon di rifornimento munizioni - - - Typhoon Fuel - Typhoon Treibstoff - Typhoon de combustible - Typhoon Cysterna - Typhoon Cisterna - Typhoon Citerne - Тайфун Заправщик - Typhoon Combustível - Typhoon (üzemanyag-szállító) - Typhoon di rifornimento carburante - - - Typhoon Repair - Typhoon Instandsetzung - Typhoon de reparación - Typhoon Naprawczy - Typhoon Opravárenský - Typhoon Réparation - Тайфун Ремонтный - Typhoon Reparador - Typhoon (szerelő-jármű) - Typhoon riparatore - - - Typhoon Medical - Typhoon Sanitäter - Typhoon médico - Typhoon Medyczny - Typhoon Zdravotnický - Typhoon Sanitaire - Тайфун Медицинский - Typhoon Médico - Typhoon (egészségügyi) - Typhoon medico - - - RAH-66 Comanche - RAH-66 Comanche - RAH-66 Comanche - RAH-66 Comanche - RAH-66 Comanche - RAH-66 Commanche - RAH-66 Команч - RAH-66 Comanche - RAH-66 Comanche - RAH-66 Comanche - - - MH-6 Little Bird - MH-6 Little Bird - MH-6 Litte Bird - MH-6 Little Bird - MH-6 Little Bird - MH-6 Little Bird - MH-6 Little Bird - MH-6 Little Bird - MH-6 Little Bird - MH-6 Little Bird - - - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - - - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - - - CH-47I Chinook (unarmed) - CH-47I Chinook (unbewaffnet) - CH-47I Chinnok (Desarmado) - CH-47I Chinook (nieuzbrojony) - CH-47I Chinook (невооруженный) - CH-47I Chinook (Neozbrojený) - - - A-10D Thunderbolt II - A-10D Thunderbolt II - A-10D Thunderbolt II - A-10D Thunderbolt II - A-10D Thunderbolt II - A-10D Thunderbolt II - A-10D Тандерболт II - A-10D Thunderbolt II - A-10D Thunderbolt II - A-10D Thunderbolt II - - - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - - - AW159 Wildcat (unarmed) - AW159 Wildcat (unbewaffnet) - AW159 Wildcat (desarmado) - AW159 Wildcat (nieuzbrojony) - AW159 Wildcat (neozbrojený) - AW159 Wildcat (non-armé) - AW159 Wildcat (невооруженный) - AW159 Wildcat (desarmado) - AW159 Wildcat (fegyvertelen) - AW159 Wildcat (disarmato) - - - AW101 Merlin - AW101 Merlin - AW101 Merlin - AW101 Merlin - AW101 Merlin - AW101 Merlin - AW101 Мерлин - AW101 Merlin - AW101 Merlin - AW101 Merlin - - - L-159 ALCA (CAS) - L-159 ALCA (CAS) - L-159 ALCA (CAS) - L-159 ALCA (CAS) - L-159 ALCA (CAS) - L-159 ALCA (CAS) - L-159 Альбатрос (CAS) - L-159 ALCA (CAS) - L-159 ALCA (CAS) - L-159 ALCA (CAS) - - - L-159 ALCA (AA) - L-159 ALCA (AA) - L-159 ALCA (AA) - L-159 ALCA (AA) - L-159 ALCA (AA) - L-159 ALCA (AA) - L-159 Альбатрос (AA) - L-159 ALCA (ВВ) - L-159 ALCA (AA) - L-159 ALCA (AA) - - - Ka-60 Kasatka - Ka-60 Kasatka - Ka-60 Kasatka - Ka-60 Kasatka - Ka-60 Kasatka - Ka-60 Kasatka - Ka-60 Касатка - Ka-60 Kasatka - Ka-60 Kasatka - Ka-60 Kasatka - - - Ka-60 Kasatka (unarmed) - Ka-60 Kasatka (unbewaffnet) - Ka-60 Kasatka (desarmado) - Ka-60 Kasatka (nieuzbrojony) - Ka-60 Kasatka (neozbrojená) - Ka-60 Kasatka (non-armé) - Ka-60 Касатка (невооруженный) - Ka-60 Kasatka (desarmado) - Ka-60 Kasatka (fegyvertelen) - Ka-60 Kasatka (disarmato) - - - Yak-130 - Yak-130 - Yak-130 - Jak-130 - Jak-130 - Yak-130 - Як-130 - Yak-130 - Jak-130 - Yak-130 - - - MD 500 - MD 500 - MD 500 - MD 500 - MD 500 - MD 500 - MD 500 - MD 500 - MD 500 - MD 500 - - - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - - - M18A1 Claymore - M18A1 Claymore - M18A1 Claymore - Mina kierunkowa M18A1 Claymore - M18A1 Mina Claymore - M18A1 Claymore Mine antipersonnel à effet dirigé - M18A1 Клеймор - M18A1 Claymore - M18A1 Claymore akna - M18A1 Claymore Mina antiuomo - - - M183 Demolition Charge Assembly - M183 Geballte Sprengladung - Conjunto de carga de demolición M183 - Ładunek burzący M183 - M183 Demoliční nálož - M183 Charge de Démolition - M183 Комплектный подрывной заряд - M183 Sacola de Demolição - M183 romboló töltet - M183 Demolition Charge Assembly - - - M112 Demolition Block - M112 Sprengladung - Bloque de demolición M112 - Ładunek burzący M112 - M112 Výbušná nálož - Pétard M112 - M112 подрывной заряд - M112 Carga de Demolição - M112 romboló töltet - M112 Demolition Block - - - M67 Fragmentation Grenade - M67 Splittergranate - Granada de fragmentación M67 - Granat obronny M67 - M67 Granát - M67 Grenade à fragmentation - M67 ручная осколочная граната - M67 Granada de fragmentação - M67 repeszgránát - M67 Granata a frammentazione - - - M83 Smoke Grenade (White) - M83 Rauchgranate (Weiss) - Granada de humo M83 (Blanco) - Granat dymny M83 (Biały) - M83 Kouřový Granát (Bílý) - M83 Grenade fumigène (Blanche) - M83 дымовой гранаты (Белый) - M83 Granada de fumaça (Branca) - M83 füstgránát (Fehér) - M83 Granata fumogena (Bianco) - - - M18 Smoke Grenade (Blue) - M18 Rauchgranate (Blau) - Granada de humo M18 (Azul) - Granat dymny M18 (Niebieski) - M18 Kouřový Granát (Modrý) - M18 Grenade fumigène (Bleue) - M18 дымовой гранаты (Синий) - M18 Granada de fumaça (Azul) - M18 füstgránát (Kék) - M18 Granata fumogena (Blu) - - - M18 Smoke Grenade (Green) - M18 Rauchgranate (Grün) - Granada de humo M18 (Verde) - Granat dymny M18 (Zielony) - M18 Kouřový Granát (Zelený) - M18 Grenade fumigène (Verte) - M18 дымовой гранаты (Зелёный) - M18 Granada de fumaça (Verde) - M18 füstgránát (Zöld) - M18 Granata fumogena (Verde) - - - M18 Smoke Grenade (Orange) - M18 Rauchgranate (Orange) - Granada de humo M18 (Naranja) - Granat dymny M18 (Pomarańczowy) - M18 Kouřový Granát (Oranžový) - M18 Grenade fumigène (Orange) - M18 дымовой гранаты (Оранжевый) - M18 Granada de fumaça (Laranja) - M18 füstgránát (Narancssárga) - M18 Granata fumogena (Arancione) - - - M18 Smoke Grenade (Purple) - M18 Rauchgranate (Violett) - Granada de humo M18 (Púrpura) - Granat dymny M18 (Fioletowy) - M18 Kouřový Granát (Fialový) - M18 Grenade fumigène (Pourpre) - M18 дымовой гранаты (Пурпурный) - M18 Granada de fumaça (Roxa) - M18 füstgránát (Lila) - M18 Granata fumogena (Viola) - - - M18 Smoke Grenade (Red) - M18 Rauchgranate (Rot) - Granada de humo M18 (Rojo) - Granat dymny M18 (Czerwony) - M18 Kouřový Granát (Červený) - M18 Grenade fumigène (Rouge) - M18 дымовой гранаты (Красный) - M18 Granada de fumaça (Vermelha) - M18 füstgránát (Piros) - M18 Granata fumogena (Rosso) - - - M18 Smoke Grenade (Yellow) - M18 Rauchgranate (Gelb) - Granada de humo M18 (Amarillo) - Granat dymny M18 (Żółty) - M18 Kouřový Granát (Žlutý) - M18 Grenade fumigène (Jaune) - M183 дымовой гранаты (Жёлтые) - M18 Granada de fumaça (Amarela) - M18 füstgránát (Sárga) - M18 Granata fumogena (Giallo) - - - M15 Anti-Tank Mine - M15 Panzerabwehrmine - Mina antitanque M15 - Mina przeciwpancerna M15 - M15 Protitanková Mina - M15 Mine antichar - M15 противотанковая мина - M15 Mina anticarro - M15 harckocsiakna - M15 Mine anticarro - - - VS-50 Anti-Personnel Mine - VS-50 Antipersonenmine - Mina antipersona VS-50 - Mina przeciwpiechotna VS-50 - VS-50 Protipěchotní Mina - VS-50 Mine antipersonnel à pression - VS-50 Противопехотная мина - VS-50 Mina antipessoal - VS-50 gyalogsági taposóakna - VS-50 Mine antiuomo - - - M26 Anti-Personnel Bounding Mine - M26 Antipersonensprungmine - Mina antipersona M26 - Mina przeciwpiechotna M26 - M26 Šrapnelová Mina - M26 Mine antipersonnel bondissante - M26 Противопехотная мина - M26 Mina saltadora antipessoal - M26 gyalogsági ugróakna - M26 Mine saltanti antiuomo - - - PMR-3 Anti-Personnel Tripwire Mine - PMR-3 Antipersonenstolperdrahtmine - Mina antipersona de alambre PMR-3 - Mina przeciwpiechotna PMR-3 - PMR-3 Nástražná Mina - PMR-3 Mine antipersonnel à traction - PMR-3 Противопехотная мина - PMR-3 Mina antipessoal (armadilha) - PMR-3 botlódrótos gyalogsági akna - PMR-3 Mine antiuomo - - - P99 - P99 - - - MP-443 Grach - MP-443 Grach - - - ACP-C2 - ACP-C2 - - - FNX-45 Tactical - FNX-45 Tactical - - - Chiappa Rhino 60DS - Chiappa Rhino 60DS - - - Taurus Judge - Taurus Judge - - - NLAW - NLAW - - - RPG-32 - RPG-32 - - - Mini-Spike (AA) - Mini-Spike (AA) - - - Mini-Spike (AT) - Mini-Spike (AT) - - - MX - MX - - - MX (Black) - MX (Black) - - - MXC - MXC - - - MXC (Black) - MXC (Black) - - - MX 3GL - MX 3GL - - - MX 3GL (Black) - MX 3GL (Black) - - - MX LSW - MX LSW - - - MX LSW (Black) - MX LSW (Black) - - - MXM - MXM - - - MXM (Black) - MXM (Black) - - - KT2002 Katiba - KT2002 Katiba - - - KT2002C Katiba - KT2002C Katiba - - - KT2002 Katiba KGL - KT2002 Katiba KGL - - - F2000 (Camo) - F2000 (Camo) - - - F2000 - F2000 - - - F2000 Tactical (Camo) - F2000 Tactical (Camo) - - - F2000 Tactical - F2000 Tactical - - - F2000 EGLM (Camo) - F2000 EGLM (Camo) - - - F2000 EGLM - F2000 EGLM - - - TAR-21 - TAR-21 - - - CTAR-21 - CTAR-21 - - - TAR-21 EGLM - TAR-21 EGLM - - - Vector SMG - Vector SMG - - - Scorpion Evo 3 A1 - Scorpion Evo 3 A1 - - - CPW - CPW - - - RFB SDAR - RFB SDAR - - - Stoner 99 LMG - Stoner 99 LMG - - - Negev NG7 - Negev NG7 - - - Mk14 Mod 1 EBR - Mk14 Mod 1 EBR - - - GM6 Lynx - GM6 Lynx - - - GM6 Lynx (Camo) - GM6 Lynx (Camo) - - - M200 Intervention - M200 Intervention - - - M200 Intervention (Camo) - M200 Intervention (Camo) - - - VS-121 - VS-121 - - - - TODO: MAR-10 .338 - - - TODO: MAR-10 .338 (Black) - - - TODO: MAR-10 .338 (Camo) - - - TODO: MAR-10 .338 (Sand) - - - - TODO: Mk-I EMR 7.62 mm - - - TODO: Mk-I EMR 7.62 mm (Black) - - - TODO: Mk-I EMR 7.62 mm (Khaki) - - - TODO: Mk-I EMR 7.62 mm (Sand) - - - TODO: Mk-I EMR 7.62 mm (Camo) - - - TODO: Mk-I EMR 7.62 mm (Woodland) - - - TODO: NATO DMR (provisional) spotter - - - - TODO: ASP-1 Kir 12.7 mm - - - TODO: ASP-1 Kir 12.7 mm (Black) - - - TODO: ASP-1 Kir 12.7 mm (Tan) - - - - TODO: Cyrus 9.3 mm - - - TODO: Cyrus 9.3 mm (Black) - - - TODO: Cyrus 9.3 mm (Hex) - - - TODO: Cyrus 9.3 mm (Tan) - - - - TODO: Mk14 7.62 mm - - - TODO: Mk14 7.62 mm (Camo) - - - TODO: Mk14 7.62 mm (Olive) - - - - TODO: Navid 9.3 mm - - - TODO: Navid 9.3 mm (Hex) - - - TODO: Navid 9.3 mm (Tan) - - - - TODO: SPMG .338 - - - TODO: SPMG .338 (MTP) - - - TODO: SPMG .338 (Black) - - - TODO: SPMG .338 (Sand) - - - - + + + XM312 + XM312 + XM312 + XM312 + XM312 + XM312 + XM312 + XM312 + XM312 + XM312A + + + XM312A + XM312A + XM312 + XM312A + XM312A + XM312A + XM312A + XM312A + XM312A + XM312A + + + XM312 (High) + XM312 (Hoch) + XM312 (Alto) + XM312 (Haut) + XM312 (Vysoký) + XM312 (Wysoki) + XM312 (Высокий) + XM312 (Alta) + XM312 (Magasított) + XM312 (Alta) + + + XM307 + XM307 + XM307 + XM307 + XM307 + XM307 + XM307 + XM307 + XM307 + XM307 + + + XM307A + XM307A + XM307A + XM307A + XM307A + XM307A + XM307A + XM307A + XM307A + XM307A + + + XM307 (High) + XM307 (Hoch) + XM307 (Alto) + XM307 (Haut) + XM307 (Vysoký) + XM307 (Wysoki) + XM307 (Высокий) + XM307 (Alta) + XM307 (Magasított) + XM307 (Alta) + + + Mini-Spike Launcher (AT) + Mini-Spike Lenkflugkörper (AT) + Lanzador Mini-Spike (AT) + Poste de tir Mini-Spike (AC) + Mini-Spike Odpalovač (AT) + Wyrzutnia Mini-Spike (AT) + Mini-Spike Пусковое устройство (ПТРК) + Lança-mísseis Mini-Spike (AC) + Mini-Spike rakétarendszer (páncéltörő) + Lanciatore Mini-Spike (AC) + + + Mini-Spike Launcher (AA) + Mini-Spike Lenkflugkörper (AA) + Lanzador Mini-Spike (AA) + Poste de tir Mini-Spike (AA) + Mini-Spike Odpalovač (AA) + Wyrzutnia Mini-Spike (AA) + Mini-Spike Пусковое устройство (ВВ) + Lança-mísseis Mini-Spike (AA) + Mini-Spike rakétarendszer (légvédelmi) + Lanciatore Mini-Spike (AA) + + + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + + + YABHON-R3 (CAS) + YABHON-R3 (Luftnahunterstützung) + YABHON-R3 (CAS) + YABHON-R3 (CAS) + YABHON-R3 (CAS) + YABHON-R3 (штурмовик) + + + M-ATV + M-ATV + M-ATV + M-ATV + M-ATV + M-ATV + M-ATV + M-ATV + M-ATV + M-ATV + + + M-ATV (HMG) + M-ATV (SMG) + M-ATV (HMG) + M-ATV (CKM) + M-ATV (TK) + M-ATV (HMG) + M-ATV (Пулемет) + M-ATV (HMG) + M-ATV (HMG) + M-ATV (HMG) + + + M-ATV (GMG) + M-ATV (GMW) + M-ATV (GMG) + M-ATV (GMG) + M-ATV (Granátomet) + M-ATV (GMG) + M-ATV (Гранатомет) + M-ATV (GMG) + M-ATV (GMG) + M-ATV (GMG) + + + Merkava Mk IV M + Merkava Mk IV M + Merkava Mk IV M + Merkawa Mk IV M + Merkava Mk IV M + Merkava Mk IV M + Меркава Mk IV M + Merkava Mk IV M + Merkava Mk IV M + Merkava Mk IV M + + + Merkava Mk IV LIC + Merkava Mk IV LIC + Merkava Mk IV LIC + Merkawa Mk IV LIC + Merkava Mk IV LIC + Merkava Mk IV LIC + Меркава Mk IV LIC + Merkava Mk IV LIC + Merkava Mk IV LIC + Merkava Mk IV LIC + + + Sholef + Sholef + Sholef + Sholef + Sholef + Sholef + Шолеф + Sholef + Sholef + Sholef + + + Seara + Seara + Seara + Seara + Seara + Seara + Seara + Seara + Seara + Seara + + + Namer + Namer + Namer + Namer + Namer + Namer + Намер + Namer + Namer + Namer + + + Bardelas + Bardelas + Bardelas + Bardelas + Bardelas + Bardelas + Bardelas + Bardelas + Bardelas + Bardelas + + + Patria AMV + Patria AMV + Patria AMV + Patria AMV + Patria AMV + Patria AMV + Patria AMV + Patria AMV + Patria AMV + Patria AMV + + + Nemmera + Nemmera + Nemmera + Nemmera + Nemmera + Nemmera + Nemmera + Nemmera + Nemmera + Nemmera + + + HEMTT Transport + HEMTT Transport + HEMTT de transporte + HEMTT Transportowy + HEMTT Valník + HEMTT Transport + HEMTT Транспортный + HEMTT Transporte + HEMTT szállítójármű + HEMTT da trasporto + + + HEMTT Transport (covered) + HEMTT Transport (bedeckt) + HEMTT de transporte (cubierto) + HEMTT Transportowy (zakryty) + HEMTT Valník (krytý) + HEMTT Transport (bâché) + HEMTT Транспортный (крытый) + HEMTT Transporte (coberto) + HEMTT szállítójármű (ponyvás) + HEMTT da trasporto (coperto) + + + HEMTT + HEMTT + HEMTT + HEMTT + HEMTT + HEMTT Tracteur + HEMTT + HEMTT + HEMTT + HEMTT + + + HEMTT Container + HEMTT Container + HEMTT de contenedor + HEMTT Kontener + HEMTT Skříňový + HEMTT Conteneur + HEMTT Контейнер + HEMTT Contêiner + HEMTT Konténer + HEMTT portacontainer + + + HEMTT Medical + HEMTT Sanitäter + HEMTT médico + HEMTT Medyczny + HEMTT Zdravotnický + HEMTT Sanitaire + HEMTT Медицинский + HEMTT Médico + HEMTT (egészségügyi) + HEMTT Medico + + + HEMTT Ammo + HEMTT Munition + HEMTT de munición + HEMTT Amunicyjny + HEMTT Muniční + HEMTT Munitions + HEMTT Боеприпасы + HEMTT Munições + HEMTT (lőszerszállító) + HEMTT di rifornimento munizioni + + + HEMTT Fuel + HEMTT Treibstoff + HEMTT de combustible + HEMTT Cysterna + HEMTT Cisterna + HEMTT Citerne + HEMTT Заправщик + HEMTT Combustível + HEMTT (üzemanyag-szállító) + HEMTT di rifornimento carburante + + + HEMTT Repair + HEMTT Instandsetzung + HEMTT de reparación + HEMTT Naprawczy + HEMTT Opravárenský + HEMTT Réparation + HEMTT Ремонтный + HEMTT Reparador + HEMTT (szerelő-jármű) + HEMTT Riparatore + + + Fennek + Fennek + Fennek + Fennek + Fennek + Fennek + Феннек + Fennek + Fennek + Fennek + + + Fennek (HMG) + Fennek (SMG) + Fennek (HMG) + Fennek (CKM) + Fennek (TK) + Fennek (HMG) + Феннек (Пулемет) + Fennek (HMG) + Fennek (HMG) + Fennek (HMG) + + + Fennek (GMG) + Fennek (GMW) + Fennek (GMG) + Fennek (GMG) + Fennek (granátomet) + Fennek (GMG) + Феннек (Гранатомет) + Fennek (GMG) + Fennek (GMG) + Fennek (GMG) + + + Leopard 2SG + Leopard 2SG + Leopard 2SG + Leopard 2SG + Leopard 2SG + Leopard 2SG + Леопард 2SG + Leopard 2SG + Leopard 2SG + Leopard 2SG + + + FV510 Warrior + FV510 Warrior + FV510 Warrior + FV510 Warrior + FV510 Warrior + FV510 Warrior + FV510 Уорриор + FV510 Warrior + FV510 Warrior + FV510 Warrior + + + Pandur II + Pandur II + Pandur II + Pandur II + Pandur II + Pandur II + Pandur II + Pandur II + Pandur II + Pandur II + + + KamAZ Transport + KamAZ Transport + KamAZ de transporte + KamAZ transportowy + KAMAZ Valník + KamAZ Transport + КамАЗ Траспортный + KamAZ Transporte + KamAZ szállítójármű + KamAZ da trasporto + + + KamAZ Transport (covered) + KamAZ Transport (bedeckt) + KamAZ de transporte (cubierto) + KamAZ Transportowy (zakryty) + KAMAZ Valník (krytý) + KamAZ Transport (bâché) + КамАЗ Траспортный (Крытый) + KamAZ Transporte (coberto) + KamAZ szállítójármű (ponyvás) + KamAZ da trasporto (coperto) + + + KamAZ Ammo + KamAZ Munition + KamAZ de munición + KamAZ Amunicyjny + KAMAZ Muniční + KamAZ Munitions + КамАЗ Боеприпасы + KamAZ Munições + KamAZ (lőszerszállító) + KamAZ di rifornimento munizioni + + + KamAZ Fuel + KamAZ Treibstoff + KamAZ de combustible + KamAZ cysterna + KAMAZ Cisterna + KamAZ Citerne + КамАЗ Заправщик + KamAZ Combustível + KamAZ (üzemanyag-szállító) + KamAZ di rifornimento carburante + + + KamAZ Repair + KamAZ Instandsetzung + KamAZ de reparación + KamAZ Naprawczy + KAMAZ Opravárenský + KamAZ Réparation + КамАЗ Ремонтный + KamAZ Reparador + KamAZ (szerelő-jármű) + KamAZ riparatore + + + KamAZ Medical + KamAZ Sanitäter + KamAZ médico + KamAZ Medyczny + KAMAZ Zdravotnický + KamAZ Sanitaire + КамАЗ Медицинский + KamAZ Médico + KamAZ (egészségügyi) + KamAZ Medico + + + Punisher + Punisher + Punisher + Punisher + Punisher + Punisher + Kаратель + Punisher + Punisher + Punisher + + + Punisher (HMG) + Punisher (SMG) + Punisher (HMG) + Punisher (CKM) + Punisher (TK) + Punisher (HMG) + Kаратель (Пулемет) + Punisher (HMG) + Punisher (HMG) + Punisher (HMG) + + + Punisher (GMG) + Punisher (GMW) + Punisher (GMG) + Punisher (CKM) + Punisher (granátomet) + Punisher (GMG) + Kаратель (Гранатомет) + Punisher (GMG) + Punisher (GMG) + Punisher (GMG) + + + T100 Black Eagle + T100 Black Eagle + T100 Black Eagle + T100 Black Eagle + T100 Black Eagle + T100 Black Eagle + T100 Черный Орел + T100 Black Eagle + T100 Black Eagle + T100 Black Eagle + + + 2S9 Sochor + 2S9 Sochor + 2S9 Sochor + 259 Sochor + 2S9 Sochor + 2S9 Sochor + 2S9 Сокор + 2S9 Sochor + 2S9 Sochor + 2S9 Sochor + + + BM-2T Stalker + BM-2T Stalker + BM-2T Stalker + BM-2T Stalker + BM-2T Stalker + BM-2T Stalker + БМ-2Т Сталкер + BM-2T Stalker + BM-2T Stalker + BM-2T Stalker + + + ZSU-35 Tigris + ZSU-35 Tigris + ZSU-35 Tigris + ZSU-35 Tigris + ZSU-35 Tigris + ZSU-35 Tigris + ЗСУ-35 Tigris + ZSU-35 Tigris + ZSU-35 Tigris + ZSU-35 Tigris + + + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + + + Typhoon Transport + Typhoon Transport + Typhoon de transporte + Typhoon Transportowy + Typhoon valník + Typhoon Transport + Тайфун Транспортный + Typhoon Transporte + Typhoon szállítójármű + Typhoon da trasporto + + + Typhoon Transport (covered) + Typhoon Transport (bedeckt) + Typhoon de transporte (cubierto) + Typhoon Transportowy (przykryty) + Typhoon valník (krytý) + Typhoon Transport (bâché) + Тайфун Транспортный (kрытый) + Typhoon Transporte (coberto) + Typhoon szállítójármű (ponyvás) + Typhoon da trasporto (coperto) + + + Typhoon Device + Typhoon Gerät + Typhoon de dispositivo + Typhoon Urządzenie + Typhoon zařízení + Typhoon Dispositif + Тайфун Устройство + Typhoon Dispositivo + Typhoon (szerkezet) + Typhoon per dispositivo + + + Typhoon Ammo + Typhoon Munition + Typhoon de munición + Typhoon Amunicyjny + Typhoon muniční + Typhoon Munitions + Тайфун Боеприпасы + Typhoon Munições + Typhoon (lőszerszállító) + Typhoon di rifornimento munizioni + + + Typhoon Fuel + Typhoon Treibstoff + Typhoon de combustible + Typhoon Cysterna + Typhoon cisterna + Typhoon Citerne + Тайфун Заправщик + Typhoon Combustível + Typhoon (üzemanyag-szállító) + Typhoon di rifornimento carburante + + + Typhoon Repair + Typhoon Instandsetzung + Typhoon de reparación + Typhoon Naprawczy + Typhoon opravárenský + Typhoon Réparation + Тайфун Ремонтный + Typhoon Reparador + Typhoon (szerelő-jármű) + Typhoon riparatore + + + Typhoon Medical + Typhoon Sanitäter + Typhoon médico + Typhoon Medyczny + Typhoon zdravotnický + Typhoon Sanitaire + Тайфун Медицинский + Typhoon Médico + Typhoon (egészségügyi) + Typhoon medico + + + RAH-66 Comanche + RAH-66 Comanche + RAH-66 Comanche + RAH-66 Comanche + RAH-66 Comanche + RAH-66 Commanche + RAH-66 Команч + RAH-66 Comanche + RAH-66 Comanche + RAH-66 Comanche + + + MH-6 Little Bird + MH-6 Little Bird + MH-6 Litte Bird + MH-6 Little Bird + MH-6 Little Bird + MH-6 Little Bird + MH-6 Little Bird + MH-6 Little Bird + MH-6 Little Bird + MH-6 Little Bird + + + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + + + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + + + CH-47I Chinook (unarmed) + CH-47I Chinook (unbewaffnet) + CH-47I Chinnok (Desarmado) + CH-47I Chinook (nieuzbrojony) + CH-47I Chinook (невооруженный) + CH-47I Chinook (neozbrojený) + + + A-10D Thunderbolt II + A-10D Thunderbolt II + A-10D Thunderbolt II + A-10D Thunderbolt II + A-10D Thunderbolt II + A-10D Thunderbolt II + A-10D Тандерболт II + A-10D Thunderbolt II + A-10D Thunderbolt II + A-10D Thunderbolt II + + + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + + + AW159 Wildcat (unarmed) + AW159 Wildcat (unbewaffnet) + AW159 Wildcat (desarmado) + AW159 Wildcat (nieuzbrojony) + AW159 Wildcat (neozbrojený) + AW159 Wildcat (non-armé) + AW159 Wildcat (невооруженный) + AW159 Wildcat (desarmado) + AW159 Wildcat (fegyvertelen) + AW159 Wildcat (disarmato) + + + AW101 Merlin + AW101 Merlin + AW101 Merlin + AW101 Merlin + AW101 Merlin + AW101 Merlin + AW101 Мерлин + AW101 Merlin + AW101 Merlin + AW101 Merlin + + + L-159 ALCA (CAS) + L-159 ALCA (CAS) + L-159 ALCA (CAS) + L-159 ALCA (CAS) + L-159 ALCA (CAS) + L-159 ALCA (CAS) + L-159 Альбатрос (CAS) + L-159 ALCA (CAS) + L-159 ALCA (CAS) + L-159 ALCA (CAS) + + + L-159 ALCA (AA) + L-159 ALCA (AA) + L-159 ALCA (AA) + L-159 ALCA (AA) + L-159 ALCA (AA) + L-159 ALCA (AA) + L-159 Альбатрос (AA) + L-159 ALCA (ВВ) + L-159 ALCA (AA) + L-159 ALCA (AA) + + + Ka-60 Kasatka + Ka-60 Kasatka + Ka-60 Kasatka + Ka-60 Kasatka + Ka-60 Kasatka + Ka-60 Kasatka + Ka-60 Касатка + Ka-60 Kasatka + Ka-60 Kasatka + Ka-60 Kasatka + + + Ka-60 Kasatka (unarmed) + Ka-60 Kasatka (unbewaffnet) + Ka-60 Kasatka (desarmado) + Ka-60 Kasatka (nieuzbrojony) + Ka-60 Kasatka (neozbrojená) + Ka-60 Kasatka (non-armé) + Ka-60 Касатка (невооруженный) + Ka-60 Kasatka (desarmado) + Ka-60 Kasatka (fegyvertelen) + Ka-60 Kasatka (disarmato) + + + Yak-130 + Yak-130 + Yak-130 + Jak-130 + Jak-130 + Yak-130 + Як-130 + Yak-130 + Jak-130 + Yak-130 + + + MD 500 + MD 500 + MD 500 + MD 500 + MD 500 + MD 500 + MD 500 + MD 500 + MD 500 + MD 500 + + + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + + + M18A1 Claymore + M18A1 Claymore + M18A1 Claymore + Mina kierunkowa M18A1 Claymore + Mina Claymore M18A1 + M18A1 Claymore Mine antipersonnel à effet dirigé + M18A1 Клеймор + M18A1 Claymore + M18A1 Claymore akna + M18A1 Claymore Mina antiuomo + + + M183 Demolition Charge Assembly + M183 Geballte Sprengladung + Conjunto de carga de demolición M183 + Ładunek burzący M183 + Demoliční nálož M183 + M183 Charge de Démolition + M183 Комплектный подрывной заряд + M183 Sacola de Demolição + M183 romboló töltet + M183 Demolition Charge Assembly + + + M112 Demolition Block + M112 Sprengladung + Bloque de demolición M112 + Ładunek burzący M112 + Výbušná nálož M112 + Pétard M112 + M112 подрывной заряд + M112 Carga de Demolição + M112 romboló töltet + M112 Demolition Block + + + M67 Fragmentation Grenade + M67 Splittergranate + Granada de fragmentación M67 + Granat obronny M67 + Granát M67 + M67 Grenade à fragmentation + M67 ручная осколочная граната + M67 Granada de fragmentação + M67 repeszgránát + M67 Granata a frammentazione + + + M83 Smoke Grenade (White) + M83 Rauchgranate (Weiss) + Granada de humo M83 (Blanco) + Granat dymny M83 (Biały) + M83 Kouřový Granát (bílý) + M83 Grenade fumigène (Blanche) + M83 дымовой гранаты (Белый) + M83 Granada de fumaça (Branca) + M83 füstgránát (Fehér) + M83 Granata fumogena (Bianco) + + + M18 Smoke Grenade (Blue) + M18 Rauchgranate (Blau) + Granada de humo M18 (Azul) + Granat dymny M18 (Niebieski) + M18 Kouřový Granát (modrý) + M18 Grenade fumigène (Bleue) + M18 дымовой гранаты (Синий) + M18 Granada de fumaça (Azul) + M18 füstgránát (Kék) + M18 Granata fumogena (Blu) + + + M18 Smoke Grenade (Green) + M18 Rauchgranate (Grün) + Granada de humo M18 (Verde) + Granat dymny M18 (Zielony) + M18 Kouřový Granát (zelený) + M18 Grenade fumigène (Verte) + M18 дымовой гранаты (Зелёный) + M18 Granada de fumaça (Verde) + M18 füstgránát (Zöld) + M18 Granata fumogena (Verde) + + + M18 Smoke Grenade (Orange) + M18 Rauchgranate (Orange) + Granada de humo M18 (Naranja) + Granat dymny M18 (Pomarańczowy) + M18 Kouřový Granát (oranžový) + M18 Grenade fumigène (Orange) + M18 дымовой гранаты (Оранжевый) + M18 Granada de fumaça (Laranja) + M18 füstgránát (Narancssárga) + M18 Granata fumogena (Arancione) + + + M18 Smoke Grenade (Purple) + M18 Rauchgranate (Violett) + Granada de humo M18 (Púrpura) + Granat dymny M18 (Fioletowy) + M18 Kouřový Granát (fialový) + M18 Grenade fumigène (Pourpre) + M18 дымовой гранаты (Пурпурный) + M18 Granada de fumaça (Roxa) + M18 füstgránát (Lila) + M18 Granata fumogena (Viola) + + + M18 Smoke Grenade (Red) + M18 Rauchgranate (Rot) + Granada de humo M18 (Rojo) + Granat dymny M18 (Czerwony) + M18 Kouřový Granát (červený) + M18 Grenade fumigène (Rouge) + M18 дымовой гранаты (Красный) + M18 Granada de fumaça (Vermelha) + M18 füstgránát (Piros) + M18 Granata fumogena (Rosso) + + + M18 Smoke Grenade (Yellow) + M18 Rauchgranate (Gelb) + Granada de humo M18 (Amarillo) + Granat dymny M18 (Żółty) + M18 Kouřový Granát (žlutý) + M18 Grenade fumigène (Jaune) + M183 дымовой гранаты (Жёлтые) + M18 Granada de fumaça (Amarela) + M18 füstgránát (Sárga) + M18 Granata fumogena (Giallo) + + + M15 Anti-Tank Mine + M15 Panzerabwehrmine + Mina antitanque M15 + Mina przeciwpancerna M15 + Protitanková mina M15 + M15 Mine antichar + M15 противотанковая мина + M15 Mina anticarro + M15 harckocsiakna + M15 Mine anticarro + + + VS-50 Anti-Personnel Mine + VS-50 Antipersonenmine + Mina antipersona VS-50 + Mina przeciwpiechotna VS-50 + Protipěchotní mina VS-50 + VS-50 Mine antipersonnel à pression + VS-50 Противопехотная мина + VS-50 Mina antipessoal + VS-50 gyalogsági taposóakna + VS-50 Mine antiuomo + + + M26 Anti-Personnel Bounding Mine + M26 Antipersonensprungmine + Mina antipersona M26 + Mina przeciwpiechotna M26 + Šrapnelová mina M26 + M26 Mine antipersonnel bondissante + M26 Противопехотная мина + M26 Mina saltadora antipessoal + M26 gyalogsági ugróakna + M26 Mine saltanti antiuomo + + + PMR-3 Anti-Personnel Tripwire Mine + PMR-3 Antipersonenstolperdrahtmine + Mina antipersona de alambre PMR-3 + Mina przeciwpiechotna PMR-3 + Nástražná mina PMR-3 + PMR-3 Mine antipersonnel à traction + PMR-3 Противопехотная мина + PMR-3 Mina antipessoal (armadilha) + PMR-3 botlódrótos gyalogsági akna + PMR-3 Mine antiuomo + + + P99 + P99 + P99 + + + MP-443 Grach + MP-443 Grach + MP-443 Grach + + + ACP-C2 + ACP-C2 + ACP-C2 + + + FNX-45 Tactical + FNX-45 Tactical + FNX-45 Tactical + + + Chiappa Rhino 60DS + Chiappa Rhino 60DS + Chiappa Rhino 60DS + + + Taurus Judge + Taurus Judge + Taurus Judge + + + NLAW + NLAW + NLAW + + + RPG-32 + RPG-32 + RPG-32 + + + Mini-Spike (AA) + Mini-Spike (AA) + Mini-Spike (PL) + + + Mini-Spike (AT) + Mini-Spike (AT) + Mini-Spike (PT) + + + MX + MX + MX + + + MX (Black) + MX (Black) + + + MXC + MXC + MXC + + + MXC (Black) + MXC (Black) + + + MX 3GL + MX 3GL + MX 3GL + + + MX 3GL (Black) + MX 3GL (Black) + + + MX LSW + MX LSW + MX LSW + + + MX LSW (Black) + MX LSW (Black) + + + MXM + MXM + MXM + + + MXM (Black) + MXM (Black) + + + KT2002 Katiba + KT2002 Katiba + KT2002 Katiba + + + KT2002C Katiba + KT2002C Katiba + KT2002C Katiba + + + KT2002 Katiba KGL + KT2002 Katiba KGL + KT2002 Katiba KGL + + + F2000 (Camo) + F2000 (Camo) + + + F2000 + F2000 + F2000 + + + F2000 Tactical (Camo) + F2000 Tactical (Camo) + + + F2000 Tactical + F2000 Tactical + F2000 Tactical + + + F2000 EGLM (Camo) + F2000 EGLM (Camo) + + + F2000 EGLM + F2000 EGLM + F2000 EGLM + + + TAR-21 + TAR-21 + TAR-21 + + + CTAR-21 + CTAR-21 + CTAR-21 + + + TAR-21 EGLM + TAR-21 EGLM + TAR-21 EGLM + + + Vector SMG + Vector SMG + Vector SMG + + + Scorpion Evo 3 A1 + Scorpion Evo 3 A1 + Scorpion Evo 3 A1 + + + CPW + CPW + CPW + + + RFB SDAR + RFB SDAR + RFB SDAR + + + Stoner 99 LMG + Stoner 99 LMG + Stoner 99 LMG + + + Negev NG7 + Negev NG7 + Negev NG7 + + + Mk14 Mod 1 EBR + Mk14 Mod 1 EBR + Mk14 Mod 1 EBR + + + GM6 Lynx + GM6 Lynx + GM6 Lynx + + + GM6 Lynx (Camo) + GM6 Lynx (Camo) + + + M200 Intervention + M200 Intervention + M200 Intervention + + + M200 Intervention (Camo) + M200 Intervention (Camo) + + + VS-121 + VS-121 + VS-121 + + + TODO: MAR-10 .338 + + + TODO: MAR-10 .338 (Black) + + + TODO: MAR-10 .338 (Camo) + + + TODO: MAR-10 .338 (Sand) + + + TODO: Mk-I EMR 7.62 mm + + + TODO: Mk-I EMR 7.62 mm (Black) + + + TODO: Mk-I EMR 7.62 mm (Khaki) + + + TODO: Mk-I EMR 7.62 mm (Sand) + + + TODO: Mk-I EMR 7.62 mm (Camo) + + + TODO: Mk-I EMR 7.62 mm (Woodland) + + + TODO: NATO DMR (provisional) spotter + + + TODO: ASP-1 Kir 12.7 mm + + + TODO: ASP-1 Kir 12.7 mm (Black) + + + TODO: ASP-1 Kir 12.7 mm (Tan) + + + TODO: Cyrus 9.3 mm + + + TODO: Cyrus 9.3 mm (Black) + + + TODO: Cyrus 9.3 mm (Hex) + + + TODO: Cyrus 9.3 mm (Tan) + + + TODO: Mk14 7.62 mm + + + TODO: Mk14 7.62 mm (Camo) + + + TODO: Mk14 7.62 mm (Olive) + + + TODO: Navid 9.3 mm + + + TODO: Navid 9.3 mm (Hex) + + + TODO: Navid 9.3 mm (Tan) + + + TODO: SPMG .338 + + + TODO: SPMG .338 (MTP) + + + TODO: SPMG .338 (Black) + + + TODO: SPMG .338 (Sand) + + + \ No newline at end of file diff --git a/addons/reload/stringtable.xml b/addons/reload/stringtable.xml index a7873948b1..5522d531f5 100644 --- a/addons/reload/stringtable.xml +++ b/addons/reload/stringtable.xml @@ -1,14 +1,16 @@ - - + + Check ammo on weapon reload Comprovar munición al recargar el arma + Zkontrolovat munici při nabití Check the ammo in your new magazine on magazine reload. Comprueva la munición del nuevo cargador al recargar. + Kontroluje munice při nabití nového zásobníku. Check Ammo @@ -37,10 +39,12 @@ Link belt Enlazar cinta + Spojit pás munice Linking belt... Enlazando cinta... + Spojuji pás... - + \ No newline at end of file diff --git a/addons/reloadlaunchers/stringtable.xml b/addons/reloadlaunchers/stringtable.xml index 87ebbe4b75..38a7e317ba 100644 --- a/addons/reloadlaunchers/stringtable.xml +++ b/addons/reloadlaunchers/stringtable.xml @@ -1,28 +1,30 @@  - + - - - Load launcher - Panzerabwehr laden - Cargar lanzador - - - Loading launcher ... - Panzerabwehr wird geladen ... - Cargando lanzador ... - - - Launcher loaded - Panzerabwehr geladen - Lanzador cargado - - - - Load %1 - Lade %1 - Cargar %1 - - - - + + + Load launcher + Panzerabwehr laden + Cargar lanzador + Nabít odpalovač + + + Loading launcher ... + Panzerabwehr wird geladen ... + Cargando lanzador ... + Nabíjím odpalovač ... + + + Launcher loaded + Panzerabwehr geladen + Lanzador cargado + Odpalovač nabit + + + Load %1 + Lade %1 + Cargar %1 + Nabít %1 + + + \ No newline at end of file diff --git a/addons/vector/stringtable.xml b/addons/vector/stringtable.xml index 7a27cf272e..2a5f29b509 100644 --- a/addons/vector/stringtable.xml +++ b/addons/vector/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -32,7 +32,7 @@ Vector - Tecla de acimut Vector - Touche Azimuth Vector - Azymut - Vector - Zobrazit Azimut + Vector - Zobrazit azimut Vector - Tasto Azimuth Vector - Tecla de Azimute Vector - Irányszög gomb diff --git a/addons/weaponselect/stringtable.xml b/addons/weaponselect/stringtable.xml index dd65d3a4d9..b7022a1c55 100644 --- a/addons/weaponselect/stringtable.xml +++ b/addons/weaponselect/stringtable.xml @@ -1,14 +1,16 @@  - + Display text on grenade throw Mostrar texto al lanzar granada + Zobrazí text při hodu granátem Display a hint or text on grenade throw. Muestra una notificación o texto al lanzar granada + Zobrazí upozornění nebo text při hodu granátem. Select Pistol @@ -253,4 +255,4 @@ Запустить дымовую завесу - + \ No newline at end of file diff --git a/addons/wep_javelin/stringtable.xml b/addons/wep_javelin/stringtable.xml index a691c750cb..303c9fe609 100644 --- a/addons/wep_javelin/stringtable.xml +++ b/addons/wep_javelin/stringtable.xml @@ -1,24 +1,24 @@ - - + + - - - Lock Target (Hold) - Lock Target (Hold) - Lock Target (Hold) - Lock Target (Hold) - Lock Target (Hold) - Fijar objetivo (Mantener) - Lock Target (Hold) - - - Cycle Fire Mode - Cycle Fire Mode - Cycle Fire Mode - Cycle Fire Mode - Cycle Fire Mode - Cambiar modo de fuego - Cycle Fire Mode - - - + + + Lock Target (Hold) + Lock Target (Hold) + Lock Target (Hold) + Lock Target (Hold) + Zamknout cíl(držet) + Fijar objetivo (Mantener) + Lock Target (Hold) + + + Cycle Fire Mode + Cycle Fire Mode + Cycle Fire Mode + Cycle Fire Mode + Cyklování režimů palby + Cambiar modo de fuego + Cycle Fire Mode + + + \ No newline at end of file diff --git a/addons/winddeflection/stringtable.xml b/addons/winddeflection/stringtable.xml index a1e67fa0d4..a941061b0e 100644 --- a/addons/winddeflection/stringtable.xml +++ b/addons/winddeflection/stringtable.xml @@ -1,32 +1,38 @@ - - - - - - Wind Information - Informacje o wietrze - Información del viento - - - Direction: %1 - Kierunek: %1 - Dirección: %1 - - - Speed: %1 m/s - Prędkość: %1 - Velocidad: %1 m/s - - - Weather Information - Informacje o pogodzie - Información meteorológica - - - Humidity: %1% - Wilgotność: %1 - Humedad: %1% - - - - + + + + + + + Wind Information + Informacje o wietrze + Información del viento + Informace o větru + + + Direction: %1 + Kierunek: %1 + Dirección: %1 + Směr: %1 + + + Speed: %1 m/s + Prędkość: %1 + Velocidad: %1 m/s + Rychlost: %1 m/s + + + Weather Information + Informacje o pogodzie + Información meteorológica + Informace o počasí + + + Humidity: %1% + Wilgotność: %1 + Humedad: %1% + Vlhkost: %1% + + + + \ No newline at end of file From efaee770bbb56a836672a0c098eff78d09832348 Mon Sep 17 00:00:00 2001 From: jaynus Date: Sat, 11 Apr 2015 10:44:13 -0700 Subject: [PATCH 106/214] rename wep_javelin to javelin --- addons/{wep_javelin => javelin}/$PBOPREFIX$ | 0 .../CfgEventhandlers.hpp | 0 addons/{wep_javelin => javelin}/CfgSounds.hpp | 0 addons/{wep_javelin => javelin}/README.md | 0 .../{wep_javelin => javelin}/RscInGameUI.hpp | 0 .../XEH_clientInit.sqf | 0 .../XEH_post_init.sqf | 0 .../{wep_javelin => javelin}/XEH_pre_init.sqf | 0 addons/{wep_javelin => javelin}/config.cpp | 0 .../data/jav_disp.paa | Bin .../data/jav_ring.paa | Bin .../data/javelin_ui_border_ca.paa | Bin .../data/sounds/javelin_locked.ogg | Bin .../data/sounds/javelin_locking.ogg | Bin .../functions/fnc_cycleFireMode.sqf | 0 .../functions/fnc_lockKeyDown.sqf | 0 .../functions/fnc_lockKeyUp.sqf | 0 .../functions/fnc_onOpticDraw.sqf | 31 ++++++++++-------- .../functions/fnc_onOpticLoad.sqf | 0 .../functions/fnc_showFireMode.sqf | 0 .../functions/script_component.hpp | 0 .../{wep_javelin => javelin}/initKeybinds.sqf | 0 .../script_component.hpp | 4 --- .../{wep_javelin => javelin}/stringtable.xml | 0 24 files changed, 18 insertions(+), 17 deletions(-) rename addons/{wep_javelin => javelin}/$PBOPREFIX$ (100%) rename addons/{wep_javelin => javelin}/CfgEventhandlers.hpp (100%) rename addons/{wep_javelin => javelin}/CfgSounds.hpp (100%) rename addons/{wep_javelin => javelin}/README.md (100%) rename addons/{wep_javelin => javelin}/RscInGameUI.hpp (100%) rename addons/{wep_javelin => javelin}/XEH_clientInit.sqf (100%) rename addons/{wep_javelin => javelin}/XEH_post_init.sqf (100%) rename addons/{wep_javelin => javelin}/XEH_pre_init.sqf (100%) rename addons/{wep_javelin => javelin}/config.cpp (100%) rename addons/{wep_javelin => javelin}/data/jav_disp.paa (100%) rename addons/{wep_javelin => javelin}/data/jav_ring.paa (100%) rename addons/{wep_javelin => javelin}/data/javelin_ui_border_ca.paa (100%) rename addons/{wep_javelin => javelin}/data/sounds/javelin_locked.ogg (100%) rename addons/{wep_javelin => javelin}/data/sounds/javelin_locking.ogg (100%) rename addons/{wep_javelin => javelin}/functions/fnc_cycleFireMode.sqf (100%) rename addons/{wep_javelin => javelin}/functions/fnc_lockKeyDown.sqf (100%) rename addons/{wep_javelin => javelin}/functions/fnc_lockKeyUp.sqf (100%) rename addons/{wep_javelin => javelin}/functions/fnc_onOpticDraw.sqf (87%) rename addons/{wep_javelin => javelin}/functions/fnc_onOpticLoad.sqf (100%) rename addons/{wep_javelin => javelin}/functions/fnc_showFireMode.sqf (100%) rename addons/{wep_javelin => javelin}/functions/script_component.hpp (100%) rename addons/{wep_javelin => javelin}/initKeybinds.sqf (100%) rename addons/{wep_javelin => javelin}/script_component.hpp (90%) rename addons/{wep_javelin => javelin}/stringtable.xml (100%) diff --git a/addons/wep_javelin/$PBOPREFIX$ b/addons/javelin/$PBOPREFIX$ similarity index 100% rename from addons/wep_javelin/$PBOPREFIX$ rename to addons/javelin/$PBOPREFIX$ diff --git a/addons/wep_javelin/CfgEventhandlers.hpp b/addons/javelin/CfgEventhandlers.hpp similarity index 100% rename from addons/wep_javelin/CfgEventhandlers.hpp rename to addons/javelin/CfgEventhandlers.hpp diff --git a/addons/wep_javelin/CfgSounds.hpp b/addons/javelin/CfgSounds.hpp similarity index 100% rename from addons/wep_javelin/CfgSounds.hpp rename to addons/javelin/CfgSounds.hpp diff --git a/addons/wep_javelin/README.md b/addons/javelin/README.md similarity index 100% rename from addons/wep_javelin/README.md rename to addons/javelin/README.md diff --git a/addons/wep_javelin/RscInGameUI.hpp b/addons/javelin/RscInGameUI.hpp similarity index 100% rename from addons/wep_javelin/RscInGameUI.hpp rename to addons/javelin/RscInGameUI.hpp diff --git a/addons/wep_javelin/XEH_clientInit.sqf b/addons/javelin/XEH_clientInit.sqf similarity index 100% rename from addons/wep_javelin/XEH_clientInit.sqf rename to addons/javelin/XEH_clientInit.sqf diff --git a/addons/wep_javelin/XEH_post_init.sqf b/addons/javelin/XEH_post_init.sqf similarity index 100% rename from addons/wep_javelin/XEH_post_init.sqf rename to addons/javelin/XEH_post_init.sqf diff --git a/addons/wep_javelin/XEH_pre_init.sqf b/addons/javelin/XEH_pre_init.sqf similarity index 100% rename from addons/wep_javelin/XEH_pre_init.sqf rename to addons/javelin/XEH_pre_init.sqf diff --git a/addons/wep_javelin/config.cpp b/addons/javelin/config.cpp similarity index 100% rename from addons/wep_javelin/config.cpp rename to addons/javelin/config.cpp diff --git a/addons/wep_javelin/data/jav_disp.paa b/addons/javelin/data/jav_disp.paa similarity index 100% rename from addons/wep_javelin/data/jav_disp.paa rename to addons/javelin/data/jav_disp.paa diff --git a/addons/wep_javelin/data/jav_ring.paa b/addons/javelin/data/jav_ring.paa similarity index 100% rename from addons/wep_javelin/data/jav_ring.paa rename to addons/javelin/data/jav_ring.paa diff --git a/addons/wep_javelin/data/javelin_ui_border_ca.paa b/addons/javelin/data/javelin_ui_border_ca.paa similarity index 100% rename from addons/wep_javelin/data/javelin_ui_border_ca.paa rename to addons/javelin/data/javelin_ui_border_ca.paa diff --git a/addons/wep_javelin/data/sounds/javelin_locked.ogg b/addons/javelin/data/sounds/javelin_locked.ogg similarity index 100% rename from addons/wep_javelin/data/sounds/javelin_locked.ogg rename to addons/javelin/data/sounds/javelin_locked.ogg diff --git a/addons/wep_javelin/data/sounds/javelin_locking.ogg b/addons/javelin/data/sounds/javelin_locking.ogg similarity index 100% rename from addons/wep_javelin/data/sounds/javelin_locking.ogg rename to addons/javelin/data/sounds/javelin_locking.ogg diff --git a/addons/wep_javelin/functions/fnc_cycleFireMode.sqf b/addons/javelin/functions/fnc_cycleFireMode.sqf similarity index 100% rename from addons/wep_javelin/functions/fnc_cycleFireMode.sqf rename to addons/javelin/functions/fnc_cycleFireMode.sqf diff --git a/addons/wep_javelin/functions/fnc_lockKeyDown.sqf b/addons/javelin/functions/fnc_lockKeyDown.sqf similarity index 100% rename from addons/wep_javelin/functions/fnc_lockKeyDown.sqf rename to addons/javelin/functions/fnc_lockKeyDown.sqf diff --git a/addons/wep_javelin/functions/fnc_lockKeyUp.sqf b/addons/javelin/functions/fnc_lockKeyUp.sqf similarity index 100% rename from addons/wep_javelin/functions/fnc_lockKeyUp.sqf rename to addons/javelin/functions/fnc_lockKeyUp.sqf diff --git a/addons/wep_javelin/functions/fnc_onOpticDraw.sqf b/addons/javelin/functions/fnc_onOpticDraw.sqf similarity index 87% rename from addons/wep_javelin/functions/fnc_onOpticDraw.sqf rename to addons/javelin/functions/fnc_onOpticDraw.sqf index 33f6c93c39..cb62327396 100644 --- a/addons/wep_javelin/functions/fnc_onOpticDraw.sqf +++ b/addons/javelin/functions/fnc_onOpticDraw.sqf @@ -2,13 +2,14 @@ #include "script_component.hpp" //TRACE_1("enter", _this); -TRACE_1("Control", (__JavelinIGUITargetingConstrains)); - #define __TRACKINTERVAL 0.1 // how frequent the check should be. #define __LOCKONTIME 1.85 // Lock on won't occur sooner #define __LOCKONTIMERANDOM 0.3 // Deviation in lock on time #define __SENSORSQUARE 1 // Locking on sensor square side in angles +#define __OffsetX ((ctrlPosition __JavelinIGUITargetingLineV) select 0) - 0.5 +#define __OffsetY ((ctrlPosition __JavelinIGUITargetingLineH) select 1) - 0.5 + private["_args", "_lastTick", "_runTime", "_soundTime", "_lockTime", "_newTarget", "_currentTarget", "_range", "_pos", "_targetArray"]; // Reset arguments if we havnt rendered in over a second @@ -90,8 +91,18 @@ if (isNull _newTarget) then { __JavelinIGUITargetingGate ctrlShow true; __JavelinIGUITargetingLines ctrlShow true; + _constraintTop = __ConstraintTop; + _constraintLeft = __ConstraintLeft; + _constraintBottom = __ConstraintBottom; + _constraintRight = __ConstraintRight; + + _offsetX = __OffsetX; + _offsetY = __OffsetY; + + _zamerny = if (_currentTarget isKindOf "CAManBase") then {_currentTarget selectionPosition "body"} else {_currentTarget selectionPosition "zamerny"}; + _randomPosWithinBounds = [(_zamerny select 0) + 1 - (random 2.0),(_zamerny select 1) + 1 - (random 2.0),(_zamerny select 2) + 0.5 - (random 1.0)]; - _apos = worldToScreen (_newTarget modelToWorld _randomPosWithinBounds); + _apos = worldToScreen (_currentTarget modelToWorld _randomPosWithinBounds); _aposX = 0; _aposY = 0; @@ -114,21 +125,15 @@ if (isNull _newTarget) then { [_currentTarget,[-1,-1,-2],_currentTarget selectionPosition "zamerny"]; }; - _bpos = _boundsInput call FUNC(worldToScreenBounds); - - _constraintTop = __ConstraintTop; - _constraintLeft = __ConstraintLeft; - _constraintBottom = __ConstraintBottom; - _constraintRight = __ConstraintRight; - - _offsetX = __OffsetX; - _offsetY = __OffsetY; - + _bpos = _boundsInput call EFUNC(common,worldToScreenBounds); + _minX = ((_bpos select 0) + _offsetX) max _constraintLeft; _minY = ((_bpos select 1) + _offsetY) max _constraintTop; _maxX = ((_bpos select 2) + _offsetX) min (_constraintRight - 0.025*(3/4)*SafezoneH); _maxY = ((_bpos select 3) + _offsetY) min (_constraintBottom - 0.025*SafezoneH); + TRACE_4("", _boundsInput, _bpos, _minX, _minY); + __JavelinIGUITargetingGateTL ctrlSetPosition [_minX,_minY]; __JavelinIGUITargetingGateTR ctrlSetPosition [_maxX,_minY]; __JavelinIGUITargetingGateBL ctrlSetPosition [_minX,_maxY]; diff --git a/addons/wep_javelin/functions/fnc_onOpticLoad.sqf b/addons/javelin/functions/fnc_onOpticLoad.sqf similarity index 100% rename from addons/wep_javelin/functions/fnc_onOpticLoad.sqf rename to addons/javelin/functions/fnc_onOpticLoad.sqf diff --git a/addons/wep_javelin/functions/fnc_showFireMode.sqf b/addons/javelin/functions/fnc_showFireMode.sqf similarity index 100% rename from addons/wep_javelin/functions/fnc_showFireMode.sqf rename to addons/javelin/functions/fnc_showFireMode.sqf diff --git a/addons/wep_javelin/functions/script_component.hpp b/addons/javelin/functions/script_component.hpp similarity index 100% rename from addons/wep_javelin/functions/script_component.hpp rename to addons/javelin/functions/script_component.hpp diff --git a/addons/wep_javelin/initKeybinds.sqf b/addons/javelin/initKeybinds.sqf similarity index 100% rename from addons/wep_javelin/initKeybinds.sqf rename to addons/javelin/initKeybinds.sqf diff --git a/addons/wep_javelin/script_component.hpp b/addons/javelin/script_component.hpp similarity index 90% rename from addons/wep_javelin/script_component.hpp rename to addons/javelin/script_component.hpp index 69fe7efe57..ca9cbaaad5 100644 --- a/addons/wep_javelin/script_component.hpp +++ b/addons/javelin/script_component.hpp @@ -51,10 +51,6 @@ #define __ConstraintLeft (((ctrlPosition __JavelinIGUITargetingConstrainLeft) select 0) + ((ctrlPosition (__JavelinIGUITargetingConstrainLeft)) select 2)) #define __ConstraintRight ((ctrlPosition __JavelinIGUITargetingConstrainRight) select 0) -#define __OffsetX ((ctrlPosition __JavelinIGUITargetingLineV) select 0) - 0.5 -#define __OffsetY ((ctrlPosition __JavelinIGUITargetingLineH) select 1) - 0.5 - - // Colors for controls #define __ColorOrange [0.9255,0.5216,0.1216,1] #define __ColorGreen [0.2941,0.8745,0.2157,1] diff --git a/addons/wep_javelin/stringtable.xml b/addons/javelin/stringtable.xml similarity index 100% rename from addons/wep_javelin/stringtable.xml rename to addons/javelin/stringtable.xml From fb6c99d69b113a45f42ac264613fa7110a8c4617 Mon Sep 17 00:00:00 2001 From: jaynus Date: Sat, 11 Apr 2015 10:56:58 -0700 Subject: [PATCH 107/214] re-path. Wtf safezones. --- addons/javelin/$PBOPREFIX$ | 2 +- addons/javelin/README.md | 2 +- addons/javelin/RscInGameUI.hpp | 8 ++++---- addons/javelin/functions/script_component.hpp | 2 +- addons/javelin/initKeybinds.sqf | 4 ++-- addons/javelin/script_component.hpp | 8 ++++---- addons/javelin/stringtable.xml | 6 +++--- 7 files changed, 16 insertions(+), 16 deletions(-) diff --git a/addons/javelin/$PBOPREFIX$ b/addons/javelin/$PBOPREFIX$ index 311c0dad43..3497b9aaf6 100644 --- a/addons/javelin/$PBOPREFIX$ +++ b/addons/javelin/$PBOPREFIX$ @@ -1 +1 @@ -z\ace\addons\wep_javelin \ No newline at end of file +z\ace\addons\javelin \ No newline at end of file diff --git a/addons/javelin/README.md b/addons/javelin/README.md index df3ad9b29d..cfa7a4cd5d 100644 --- a/addons/javelin/README.md +++ b/addons/javelin/README.md @@ -1,4 +1,4 @@ -ace_wep_javelin +ace_javelin =============== Adds the Javelin AT launcher. diff --git a/addons/javelin/RscInGameUI.hpp b/addons/javelin/RscInGameUI.hpp index 457c7ac414..dd50558a5d 100644 --- a/addons/javelin/RscInGameUI.hpp +++ b/addons/javelin/RscInGameUI.hpp @@ -28,10 +28,10 @@ class RscInGameUI { class ACE_TargetingConstrains: RscControlsGroup { idc = 699100; - x = "SafezoneX"; - y = "SafezoneY"; - w = "SafezoneW-SafezoneX"; - h = "SafezoneH-SafezoneY"; + x = "SafezoneX-SafezoneW"; + y = "SafezoneY-SafezoneH"; + w = "SafezoneW"; + h = "SafezoneH"; enabled = 0; class VScrollbar { autoScrollSpeed = -1; diff --git a/addons/javelin/functions/script_component.hpp b/addons/javelin/functions/script_component.hpp index fdc194ff7b..21c6597c86 100644 --- a/addons/javelin/functions/script_component.hpp +++ b/addons/javelin/functions/script_component.hpp @@ -1 +1 @@ -#include "\z\ace\addons\wep_javelin\script_component.hpp" \ No newline at end of file +#include "\z\ace\addons\javelin\script_component.hpp" \ No newline at end of file diff --git a/addons/javelin/initKeybinds.sqf b/addons/javelin/initKeybinds.sqf index 126b1395a3..6634b1f623 100644 --- a/addons/javelin/initKeybinds.sqf +++ b/addons/javelin/initKeybinds.sqf @@ -1,6 +1,6 @@ // by commy2 -["ACE3", QGVAR(lockTarget), localize "STR_ACE_WEP_JAVELIN_LockTarget", +["ACE3", QGVAR(lockTarget), localize "STR_ACE_JAVELIN_LockTarget", { if (GETGVAR(isLockKeyDown,false)) exitWith {false}; @@ -21,7 +21,7 @@ }, [15, [false, false, false]], false] call cba_fnc_addKeybind; //Tab Key -["ACE3", QGVAR(cycleFireMode), localize "STR_ACE_WEP_JAVELIN_CycleFireMode", +["ACE3", QGVAR(cycleFireMode), localize "STR_ACE_JAVELIN_CycleFireMode", { false }, { [ACE_player] call FUNC(cycleFireMode); diff --git a/addons/javelin/script_component.hpp b/addons/javelin/script_component.hpp index ca9cbaaad5..a0199e28d7 100644 --- a/addons/javelin/script_component.hpp +++ b/addons/javelin/script_component.hpp @@ -1,12 +1,12 @@ -#define COMPONENT wep_javelin +#define COMPONENT javelin #include "\z\ace\Addons\main\script_mod.hpp" -#ifdef DEBUG_ENABLED_WEP_JAVELIN +#ifdef DEBUG_ENABLED_JAVELIN #define DEBUG_MODE_FULL #endif -#ifdef DEBUG_SETTINGS_WEP_JAVELIN - #define DEBUG_SETTINGS DEBUG_SETTINGS_WEP_JAVELIN +#ifdef DEBUG_SETTINGS_JAVELIN + #define DEBUG_SETTINGS DEBUG_SETTINGS_JAVELIN #endif #include "\z\ace\Addons\main\script_macros.hpp" diff --git a/addons/javelin/stringtable.xml b/addons/javelin/stringtable.xml index a691c750cb..503b876855 100644 --- a/addons/javelin/stringtable.xml +++ b/addons/javelin/stringtable.xml @@ -1,8 +1,8 @@ - - + + Lock Target (Hold) Lock Target (Hold) Lock Target (Hold) @@ -11,7 +11,7 @@ Fijar objetivo (Mantener) Lock Target (Hold) - + Cycle Fire Mode Cycle Fire Mode Cycle Fire Mode From aa53a1815c7a27ef1ce1a67a6cfebbfa4fa9c102 Mon Sep 17 00:00:00 2001 From: jaynus Date: Sat, 11 Apr 2015 10:58:27 -0700 Subject: [PATCH 108/214] scaling. --- addons/javelin/RscInGameUI.hpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/javelin/RscInGameUI.hpp b/addons/javelin/RscInGameUI.hpp index dd50558a5d..457c7ac414 100644 --- a/addons/javelin/RscInGameUI.hpp +++ b/addons/javelin/RscInGameUI.hpp @@ -28,10 +28,10 @@ class RscInGameUI { class ACE_TargetingConstrains: RscControlsGroup { idc = 699100; - x = "SafezoneX-SafezoneW"; - y = "SafezoneY-SafezoneH"; - w = "SafezoneW"; - h = "SafezoneH"; + x = "SafezoneX"; + y = "SafezoneY"; + w = "SafezoneW-SafezoneX"; + h = "SafezoneH-SafezoneY"; enabled = 0; class VScrollbar { autoScrollSpeed = -1; From 458958ef09e774c898d3aa82e560e66306b058ad Mon Sep 17 00:00:00 2001 From: jaynus Date: Sat, 11 Apr 2015 11:17:34 -0700 Subject: [PATCH 109/214] Target gating implemented. --- addons/javelin/RscInGameUI.hpp | 293 ++++++++++--------- addons/javelin/functions/fnc_onOpticDraw.sqf | 2 + addons/javelin/functions/fnc_onOpticLoad.sqf | 2 + addons/javelin/script_component.hpp | 2 + 4 files changed, 158 insertions(+), 141 deletions(-) diff --git a/addons/javelin/RscInGameUI.hpp b/addons/javelin/RscInGameUI.hpp index 457c7ac414..b324ed1609 100644 --- a/addons/javelin/RscInGameUI.hpp +++ b/addons/javelin/RscInGameUI.hpp @@ -12,7 +12,7 @@ class RscLine; class RscInGameUI { class RscOptics_titan { idd = 300; - controls[] = {"ACE_javelin_elements_group", "CA_Distance", "ACE_TargetingConstrains", "ACE_TargetingGate", "ACE_TargetingLines"}; + controls[] = {"ACE_javelin_elements_group", "CA_Distance", "ACE_Targeting" }; //, "ACE_TargetingConstrains", "ACE_TargetingGate", "ACE_TargetingLines"}; onLoad = QUOTE(_this call FUNC(onOpticLoad)); onUnload = "uiNameSpace setVariable ['ACE_RscOptics_javelin',nil];"; @@ -25,170 +25,181 @@ class RscInGameUI { w = 0; h = 0; }; - - class ACE_TargetingConstrains: RscControlsGroup { - idc = 699100; + class ACE_Targeting : RscControlsGroup { + idc = 6999; + x = "SafezoneX"; - y = "SafezoneY"; - w = "SafezoneW-SafezoneX"; - h = "SafezoneH-SafezoneY"; - enabled = 0; - class VScrollbar { - autoScrollSpeed = -1; - autoScrollDelay = 5; - autoScrollRewind = 0; - color[] = {1,1,1,0}; - width = 0.001; - }; - class HScrollbar { - color[] = {1,1,1,0}; - height = 0.001; - }; + y = "SafezoneY"; + w = "SafezoneW"; + h = "SafezoneH"; + + enabled = 1; class Controls { - class Top: RscPicture { - idc = 699101; - text = "#(argb,8,8,3)color(1,1,1,1)"; - colorText[] = {0.2941,0.2941,0.2941,1}; - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; - y = "0.15*SafezoneH-SafezoneY"; - w = "(3/4)*SafezoneH"; - h = "0.21*SafezoneH"; - }; - class Bottom: Top { - idc = 699102; - y = "0.64*SafezoneH-SafezoneY"; - }; - class Left: Top { - idc = 699103; - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; - y = "0.36*SafezoneH-SafezoneY"; - w = "0.31*(3/4)*SafezoneH"; - h = "0.28*SafezoneH"; - }; - class Right: Left { - idc = 699104; - x = "((SafezoneW -(3/4)*SafezoneH)/2)+ 0.69*(3/4)*SafezoneH - SafezoneX"; - }; - class OpticsBorders: RscPicture { - idc = 699105; - text = PATHTOF(data\javelin_ui_border_ca.paa); - colorText[] = {0,0,0,1}; - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; - y = "0.15*SafezoneH-SafezoneY"; - w = "(3/4)*SafezoneH"; - h = "0.7*SafezoneH"; - }; - }; - }; - - class ACE_TargetingGate : ACE_TargetingConstrains { - idc = 699200; - class Controls { - class TargetingGateTL: ACE_TargetingConstrains { - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; - y = "0.15*SafezoneH - SafezoneY"; - idc = 699201; + class ACE_TargetingConstrains: RscControlsGroup { + x = "SafezoneX"; + y = "SafezoneY"; + w = "SafezoneW-SafezoneX"; + h = "SafezoneH-SafezoneY"; + + enabled = 1; + class VScrollbar { + autoScrollSpeed = -1; + autoScrollDelay = 5; + autoScrollRewind = 0; + color[] = {1,1,1,0}; + width = 0.001; + }; + class HScrollbar { + color[] = {1,1,1,0}; + height = 0.001; + }; class Controls { - class LineH: RscLine { - idc = 699210; - x = "0"; - y = "0"; - w = "0.025*(3/4)*SafezoneH"; - h = "0"; - colorText[] = {0.8745,0.8745,0.8745,1}; + class Top: RscPicture { + idc = 699101; + text = "#(argb,8,8,3)color(1,1,1,1)"; + colorText[] = {0.2941,0.2941,0.2941,1}; + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; + y = "0.15*SafezoneH-SafezoneY"; + w = "(3/4)*SafezoneH"; + h = "0.21*SafezoneH"; }; - class LineV: LineH { - idc = 699211; - w = "0"; - h = "0.025*SafezoneH"; + class Bottom: Top { + idc = 699102; + y = "0.64*SafezoneH-SafezoneY"; + }; + class Left: Top { + idc = 699103; + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; + y = "0.36*SafezoneH-SafezoneY"; + w = "0.31*(3/4)*SafezoneH"; + h = "0.28*SafezoneH"; + }; + class Right: Left { + idc = 699104; + x = "((SafezoneW -(3/4)*SafezoneH)/2)+ 0.69*(3/4)*SafezoneH - SafezoneX"; + }; + class OpticsBorders: RscPicture { + idc = 699105; + text = PATHTOF(data\javelin_ui_border_ca.paa); + colorText[] = {0,0,0,1}; + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; + y = "0.15*SafezoneH-SafezoneY"; + w = "(3/4)*SafezoneH"; + h = "0.7*SafezoneH"; }; }; }; - class TargetingGateTR: TargetingGateTL { - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX + 0.975*(3/4)*SafezoneH"; - y = "0.15*SafezoneH - SafezoneY"; - idc = 699202; + + class ACE_TargetingGate : ACE_TargetingConstrains { + idc = 699200; class Controls { - class LineH: RscLine { - idc = 699220; - x = "0"; - y = "0"; - w = "0.025*(3/4)*SafezoneH"; - h = "0"; - colorText[] = {0.8745,0.8745,0.8745,1}; + class TargetingGateTL: ACE_TargetingConstrains { + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; + y = "0.15*SafezoneH - SafezoneY"; + idc = 699201; + class Controls { + class LineH: RscLine { + idc = 699210; + x = "0"; + y = "0"; + w = "0.025*(3/4)*SafezoneH"; + h = "0"; + colorText[] = {0.8745,0.8745,0.8745,1}; + }; + class LineV: LineH { + idc = 699211; + w = "0"; + h = "0.025*SafezoneH"; + }; + }; }; - class LineV: LineH { - idc = 699221; - x = "0.025*(3/4)*SafezoneH"; - w = "0"; - h = "0.025*SafezoneH"; + class TargetingGateTR: TargetingGateTL { + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX + 0.975*(3/4)*SafezoneH"; + y = "0.15*SafezoneH - SafezoneY"; + idc = 699202; + class Controls { + class LineH: RscLine { + idc = 699220; + x = "0"; + y = "0"; + w = "0.025*(3/4)*SafezoneH"; + h = "0"; + colorText[] = {0.8745,0.8745,0.8745,1}; + }; + class LineV: LineH { + idc = 699221; + x = "0.025*(3/4)*SafezoneH"; + w = "0"; + h = "0.025*SafezoneH"; + }; + }; + }; + class TargetingGateBL: TargetingGateTL { + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; + y = "0.825*SafezoneH - SafezoneY"; + idc = 699203; + class Controls { + class LineH: RscLine { + x = "0"; + y = "0.025*SafezoneH"; + w = "0.025*(3/4)*SafezoneH"; + h = "0"; + colorText[] = {0.8745,0.8745,0.8745,1}; + }; + class LineV: LineH { + y = "0"; + w = "0"; + h = "0.025*SafezoneH"; + }; + }; + }; + class TargetingGateBR: TargetingGateBL { + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX + 0.975*(3/4)*SafezoneH"; + y = "0.825*SafezoneH - SafezoneY"; + idc = 699204; + class Controls { + class LineH: RscLine { + x = "0"; + y = "0.025*SafezoneH"; + w = "0.025*(3/4)*SafezoneH"; + h = "0"; + colorText[] = {0.8745,0.8745,0.8745,1}; + }; + class LineV: LineH { + x = "0.025*(3/4)*SafezoneH"; + y = "0"; + w = "0"; + h = "0.025*SafezoneH"; + }; + }; }; }; }; - class TargetingGateBL: TargetingGateTL { - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; - y = "0.825*SafezoneH - SafezoneY"; - idc = 699203; + + + class ACE_TargetingLines: ACE_TargetingConstrains { + idc = 699300; class Controls { class LineH: RscLine { - x = "0"; - y = "0.025*SafezoneH"; - w = "0.025*(3/4)*SafezoneH"; + idc = 699301; + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; + y = "0.5*SafezoneH - SafezoneY"; + w = "(3/4)*SafezoneH"; h = "0"; colorText[] = {0.8745,0.8745,0.8745,1}; }; - class LineV: LineH { - y = "0"; + class LineV: RscLine { + idc = 699302; + x = "0.5*SafezoneW - SafezoneX"; + y = "0.15*SafezoneH - SafezoneY"; w = "0"; - h = "0.025*SafezoneH"; - }; - }; - }; - class TargetingGateBR: TargetingGateBL { - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX + 0.975*(3/4)*SafezoneH"; - y = "0.825*SafezoneH - SafezoneY"; - idc = 699204; - class Controls { - class LineH: RscLine { - x = "0"; - y = "0.025*SafezoneH"; - w = "0.025*(3/4)*SafezoneH"; - h = "0"; + h = "0.7*SafezoneH"; colorText[] = {0.8745,0.8745,0.8745,1}; }; - class LineV: LineH { - x = "0.025*(3/4)*SafezoneH"; - y = "0"; - w = "0"; - h = "0.025*SafezoneH"; - }; }; }; }; }; - - class ACE_TargetingLines: ACE_TargetingConstrains { - idc = 699300; - class Controls { - class LineH: RscLine { - idc = 699301; - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; - y = "0.5*SafezoneH - SafezoneY"; - w = "(3/4)*SafezoneH"; - h = "0"; - colorText[] = {0.8745,0.8745,0.8745,1}; - }; - class LineV: RscLine { - idc = 699302; - x = "0.5*SafezoneW - SafezoneX"; - y = "0.15*SafezoneH - SafezoneY"; - w = "0"; - h = "0.7*SafezoneH"; - colorText[] = {0.8745,0.8745,0.8745,1}; - }; - }; - }; - class ACE_javelin_elements_group: RscControlsGroup { x = "SafezoneX"; diff --git a/addons/javelin/functions/fnc_onOpticDraw.sqf b/addons/javelin/functions/fnc_onOpticDraw.sqf index cb62327396..393dd04b6d 100644 --- a/addons/javelin/functions/fnc_onOpticDraw.sqf +++ b/addons/javelin/functions/fnc_onOpticDraw.sqf @@ -61,6 +61,7 @@ if (isNull _newTarget) then { __JavelinIGUISeek ctrlSetTextColor __ColorGray; __JavelinIGUINFOV ctrlSetTextColor __ColorGreen; + __JavelinIGUITargeting ctrlShow false; __JavelinIGUITargetingConstrains ctrlShow false; __JavelinIGUITargetingGate ctrlShow false; __JavelinIGUITargetingLines ctrlShow false; @@ -87,6 +88,7 @@ if (isNull _newTarget) then { __JavelinIGUISeek ctrlSetTextColor __ColorGreen; __JavelinIGUINFOV ctrlSetTextColor __ColorNull; + __JavelinIGUITargeting ctrlShow true; __JavelinIGUITargetingConstrains ctrlShow true; __JavelinIGUITargetingGate ctrlShow true; __JavelinIGUITargetingLines ctrlShow true; diff --git a/addons/javelin/functions/fnc_onOpticLoad.sqf b/addons/javelin/functions/fnc_onOpticLoad.sqf index 3dfa3e2f9a..352e6bfd12 100644 --- a/addons/javelin/functions/fnc_onOpticLoad.sqf +++ b/addons/javelin/functions/fnc_onOpticLoad.sqf @@ -2,6 +2,7 @@ #include "script_component.hpp" TRACE_1("enter", _this); + if((count _this) > 0) then { uiNameSpace setVariable ['ACE_RscOptics_javelin',_this select 0]; }; @@ -11,6 +12,7 @@ ACE_player setVariable ["ace_missileguidance_target",nil, false]; __JavelinIGUISeek ctrlSetTextColor __ColorGray; __JavelinIGUINFOV ctrlSetTextColor __ColorGray; +__JavelinIGUITargeting ctrlShow false; __JavelinIGUITargetingConstrains ctrlShow false; __JavelinIGUITargetingGate ctrlShow false; __JavelinIGUITargetingLines ctrlShow false; diff --git a/addons/javelin/script_component.hpp b/addons/javelin/script_component.hpp index a0199e28d7..6aa34b6bc8 100644 --- a/addons/javelin/script_component.hpp +++ b/addons/javelin/script_component.hpp @@ -19,6 +19,8 @@ #define __JavelinIGUI (uinamespace getVariable "ACE_RscOptics_javelin") // Custom controls +#define __JavelinIGUITargeting (__JavelinIGUI displayCtrl 6999) + #define __JavelinIGUISeek (__JavelinIGUI displayCtrl 699000) #define __JavelinIGUITop (__JavelinIGUI displayCtrl 699001) #define __JavelinIGUIDir (__JavelinIGUI displayCtrl 699002) From 66bd7e7e5f68ef4a120b1dd7c951fcc6ed6e4bb7 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sat, 11 Apr 2015 20:32:07 +0200 Subject: [PATCH 110/214] fixed #457 --- addons/dragging/functions/fnc_dropObject.sqf | 10 ++++++++-- addons/dragging/functions/fnc_dropObject_carry.sqf | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/addons/dragging/functions/fnc_dropObject.sqf b/addons/dragging/functions/fnc_dropObject.sqf index 489457bfbc..9589457dbe 100644 --- a/addons/dragging/functions/fnc_dropObject.sqf +++ b/addons/dragging/functions/fnc_dropObject.sqf @@ -23,8 +23,10 @@ _unit removeAction (_unit getVariable [QGVAR(ReleaseActionID), -1]); private "_inBuilding"; _inBuilding = [_unit] call FUNC(isObjectOnObject); -// play release animation -_unit playAction "released"; +if !(_unit getvariable ["ACE_isUnconscious", false]) then { + // play release animation + _unit playAction "released"; +}; // prevent collision damage ["fixCollision", _unit] call EFUNC(common,localEvent); @@ -58,3 +60,7 @@ if !(_target isKindOf "CAManBase") then { ["fixPosition", _target, _target] call EFUNC(common,targetEvent); ["fixFloating", _target, _target] call EFUNC(common,targetEvent); }; + +if (_unit getvariable ["ACE_isUnconscious", false]) then { + [_unit, "unconscious", 2, true] call EFUNC(common,doAnimation); +}; diff --git a/addons/dragging/functions/fnc_dropObject_carry.sqf b/addons/dragging/functions/fnc_dropObject_carry.sqf index 5e2ea8b8c1..b6dfe9fc45 100644 --- a/addons/dragging/functions/fnc_dropObject_carry.sqf +++ b/addons/dragging/functions/fnc_dropObject_carry.sqf @@ -32,7 +32,7 @@ detach _target; // fix anim when aborting carrying persons if (_target isKindOf "CAManBase" || {animationState _unit in CARRY_ANIMATIONS}) then { - if (vehicle _unit == _unit) then { + if (vehicle _unit == _unit && {!(_unit getvariable ["ACE_isUnconscious", false])}) then { [_unit, "", 2, true] call EFUNC(common,doAnimation); }; From ea04f4ab3e53e55e359ebf0357a3ff0efe1b3536 Mon Sep 17 00:00:00 2001 From: EpMAK Date: Sat, 11 Apr 2015 21:33:07 +0300 Subject: [PATCH 111/214] Revert "Russian Translation" This reverts commit 17a552bb80af65e99e674793bfc15fb888c24757. --- addons/attach/stringtable.xml | 20 +- addons/captives/stringtable.xml | 9 +- addons/common/stringtable.xml | 16 +- addons/dragging/stringtable.xml | 7 +- addons/explosives/stringtable.xml | 48 +- addons/fcs/stringtable.xml | 148 +- addons/goggles/stringtable.xml | 6 +- addons/grenades/stringtable.xml | 8 +- addons/hearing/stringtable.xml | 3 +- addons/interact_menu/stringtable.xml | 7 +- addons/interaction/stringtable.xml | 5 +- addons/inventory/stringtable.xml | 4 +- addons/kestrel/stringtable.xml | 4 +- addons/laser_selfdesignate/stringtable.xml | 4 +- addons/laserpointer/stringtable.xml | 10 +- addons/logistics_uavbattery/stringtable.xml | 10 +- addons/logistics_wirecutter/stringtable.xml | 10 +- addons/magazinerepack/stringtable.xml | 5 +- addons/magazines/stringtable.xml | 38 +- addons/maptools/stringtable.xml | 4 +- addons/markers/stringtable.xml | 4 +- addons/medical/stringtable.xml | 1856 +++++++------ addons/microdagr/stringtable.xml | 24 +- addons/nametags/stringtable.xml | 5 +- addons/optionsmenu/stringtable.xml | 19 +- addons/overheating/stringtable.xml | 4 +- addons/realisticnames/stringtable.xml | 2608 ++++++++++--------- addons/reload/stringtable.xml | 10 +- addons/reloadlaunchers/stringtable.xml | 46 +- addons/respawn/stringtable.xml | 7 +- addons/switchunits/stringtable.xml | 5 +- addons/weaponselect/stringtable.xml | 6 +- addons/wep_javelin/stringtable.xml | 46 +- addons/winddeflection/stringtable.xml | 70 +- 34 files changed, 2475 insertions(+), 2601 deletions(-) diff --git a/addons/attach/stringtable.xml b/addons/attach/stringtable.xml index 839ac2e168..27a0517f9a 100644 --- a/addons/attach/stringtable.xml +++ b/addons/attach/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -48,7 +48,7 @@ Marcador IV Acoplado Strobo IR attaccata Infravörös jeladó hozzácsatolva - ИК-маяк присоединён + ИК строб присоединён IR Strobe Detached @@ -60,7 +60,7 @@ Marcador IV Separado Strobo IR staccata Infravörös jeladó lecsatolva - ИК-маяк отсоединён + ИК строб отсоединён IR Grenade Attached @@ -72,7 +72,7 @@ Granada IV Acoplada Granata IR attaccata Infravörös gránát hozzácsatolva - ИК-граната присоединена + ИК граната присоединена IR Grenade Detached @@ -84,7 +84,7 @@ Granada IV Separada Granata IR staccata Infravörös gránát lecsatolva - ИК-граната отсоединена + ИК граната отсоединена Chemlight Attached @@ -132,7 +132,7 @@ Marcador IV Strobo IR Infravörös jeladó - ИК-маяк + ИК строб IR Strobe allows you to signal your position through a pulsating beacon only visible with NVGs. @@ -144,7 +144,7 @@ O Marcador IV permite que você sinalize sua posição através de um pulso visível somente com equipamento de visão noturna. La Strobo IR è una luce stroboscopica che ti permette di segnalare la tua posizione grazie all'emissione di impulsi ad infrarossi visibili solo con i visori notturni. Az infravörös jeladóval megjelölheted a helyzetedet úgy, hogy annak pulzáló fénye csak éjjellátó készülékkel látható. - ИК-маяк позволяет сигнализировать о своём местоположении через пульсирующий свет, видимый только через ПНВ. + ИК строб позволяет сигнализировать свое местоположение через пульсирующий маяк, видимый только через ПНВ. Place @@ -156,7 +156,6 @@ Colocar Posiziona Elhelyez - Установить Cancel @@ -168,14 +167,13 @@ Cancelar Annulla Mégse - Отмена Attach Failed Échec du Attacher Befestigen fehlgeschlagen - Соединение прервано + Присоединить Ошибка Error al acoplar - \ No newline at end of file + diff --git a/addons/captives/stringtable.xml b/addons/captives/stringtable.xml index bc9cff1572..897782747f 100644 --- a/addons/captives/stringtable.xml +++ b/addons/captives/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -134,31 +134,26 @@ Surrender Kapitulieren Rendirse - Сдаться Stop Surrendering Den Kampf erneut aufnehmen Dejar de rendirse - Остановить сдачу Only use on alive units Nur bei lebenden Einheiten verwendbar Utilizar solo en unidades vivas - Только для живых юнитов Only use on dismounted inf Nur bei abgesessener Infanterie verwendbar Utilizar solo en infanteria desmontada - Только для спеш. солдат Nothing under mouse Es wurde nichts ausgewählt Nada bajo el ratón - Объекты под мышью отсутствуют - \ No newline at end of file + diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index d1e81e01a6..a5f5368cd0 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -300,78 +300,64 @@ Aceptar Peticiones Accept Requests Anfrage annehmen - Подтвердить запросы Ignoruj prośby Rechazar Peticiones Decline Requests Anfrage ablehnen - Отклонить запросы Akceptuj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności. Acepta Peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones. Accept Requests send by other players. These can be requests to use / share equipment, perform certain actions. Anfragen anderer Spieler annehmen. Diese Anfragen können sich auf das Benutzen / Teilen von Equipment beziehen oder das Ausführen bestimmter Aktionen. - Подтвердить запросы, посланные другими игроками. Это могут быть просьбы о передаче снаряжения или выполнении определённых действий. Ignoruj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności. Rechazar Peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones. Decline Requests send by other players. These can be requests to use / share equipment, perform certain actions. Anfragen anderer Spieler ablehnen. Diese Anfragen können sich auf das Benutzen / Teilen von Equipment beziehen oder das Ausführen bestimmter Aktionen. - Отклонить запросы, посланные другими игроками. Это могут быть просьбы о передаче снаряжения или выполнении определённых действий. Feedback icons Feedback-Icons - Иконки состояний Select the position of or disable the feedback icons on your screen. These icons will show to provide extra feedback on your character status and actions performed. Wähle die Position der Feedback-Icons aus oder deaktiviere Sie. Die Feedback-Icons zeigen den Status deiner Einheit an, oder die ausgeführte Aktion. - Выберите положение или или отключите отображение иконок состояний на Вашем экране. Эти иконки предоставят дополнительную информацию о состоянии персонажа и выполняемых действиях. Progress bar location Position des Fortschrittsanzeige - Положение прогресс-бара Set the desired location of the progress bar on your screen. Wähle die Position der Fortschrittsanzeige. - Установите желаемое положение строки состояния на экране. Hint Background color Hinweis Hintergrundfarbe - Цвет фона всплывающих подсказок The color of the background from the ACE hints. Wähle die Hintergrundfarbe für ACE-Hinweise. - Цвет фона всплывающий подсказок АСЕ. Hint text font color Hinweis Textfarbe - Цвет шрифта всплывающих подсказок The color of the text font from the ACE hints. This color is the default color for all text displayed through the ACE Hint system, if the hint text has no other color specified. Wähle die Textfarbe für ACE-Hinweise. - Цвет шрифта текста всплывающих подсказок АСЕ. Этот цвет является стандартным для всего текста, транслирующегося через систему подсказок АСЕ, если не установлено другого цвета для текста подсказок. Banana Banane - Банан A banana is an edible fruit, botanically a berry, produced by several kinds of large herbaceous flowering plants in the genus Musa. Die Bananen (Musa) sind eine Pflanzengattung in der Familie der Bananengewächse (Musaceae) innerhalb der Einkeimblättrigen Pflanzen (Monokotyledonen). - Банан - это съедобный фрукт, ягода с ботанической точки зрения, произрастающий на нескольких видах травянистых растениях рода Банан (Musa). \ No newline at end of file diff --git a/addons/dragging/stringtable.xml b/addons/dragging/stringtable.xml index 3199dd7c20..9193d2712e 100644 --- a/addons/dragging/stringtable.xml +++ b/addons/dragging/stringtable.xml @@ -1,5 +1,5 @@ - - + + @@ -40,7 +40,6 @@ Não é possível carregar o item devido a seu peso Non è possibile trascinare l'oggetto a causa del suo peso Túl nehéz ahhoz, hogy elhúzd --> - Слишком тяжело Carry @@ -55,4 +54,4 @@ Нести - \ No newline at end of file + diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml index 834101f9c7..1d010a0a7e 100644 --- a/addons/explosives/stringtable.xml +++ b/addons/explosives/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -48,7 +48,7 @@ Codice dell'esplosivo : %1 Robbanóanyag kódja: %1 Código do explosivo: %1 - Код подрыва: %1 + Взрывная код: %1 Place @@ -60,7 +60,7 @@ Piazza Elhelyezés Colocar - Установить + Положить Cancel @@ -132,7 +132,7 @@ Usato per l'attivazione a distanza degli esplosivi Robbanóanyagok távoli robbantásához Usado para acionar explosivos remotamente - Используется для удаленной детонации СВУ + Используется для удаленного запуска взрывчатку M57 Firing Device @@ -156,7 +156,7 @@ Usato per l'attivazione a distanza degli esplosivi Robbanóanyagok távoli robbantásához Usado para acionar explosivos remotamente - Используется для удаленной детонации зарядов + Используется для удаленного запуска взрывчатку M26 Firing Device @@ -192,7 +192,7 @@ Kit E.O.D. Hatástalanító felszerelés Kit de desarme - Комплект разминирования + Разминирование комплект Allows defusing of explosives @@ -204,7 +204,7 @@ Consente la disattivazione degli ordigni esplosivi Robbanóanyagok hatástalanításához Permite o desarme de explosivos - Позволяет обезвреживать ВУ + Allows defusing of explosives Add to Speed Dial @@ -228,7 +228,7 @@ Libera Törlés Limpar - Очистить + Pассеиваться Dial @@ -252,7 +252,7 @@ Sopra Fel Cima - Вызов + Поднять Down @@ -264,7 +264,7 @@ Sotto Le Baixo - Сброс + Опустить Cancel @@ -288,7 +288,7 @@ Menù di detonazione Robbantás menü Menu de detonação - Меню подрыва + Меню Подрыв Place Menu @@ -300,7 +300,7 @@ Menù di collocamento Lerakás menü Menu de posicionamento - Меню детонации + Меню Установить Defuse @@ -336,7 +336,7 @@ Cronometro Időzített Timer - Таймер + Временной Time: %1m %2s @@ -348,7 +348,7 @@ Tempo : %1m %2s Idő: %1m %2s Tempo: %1m %2s - Время: %1m %2c + Tемп: %1m %2c Set Time @@ -360,7 +360,7 @@ Modifica il conto alla rovescia Idő állítása Configurar Tempo - Установить время + Xронометр Select a Trigger @@ -372,7 +372,7 @@ Seleziona un Attivatore Detonátor kiválasztása Selecionar um Gatilho - Выберите детонатор + Выберите Select @@ -384,7 +384,7 @@ Seleziona Kiválasztás Selecionar - Выбрать + Выбрать защелка Pressure Plate @@ -408,7 +408,7 @@ Filo a Inciampo Botlódrót Linha de tração - Растяжка + Натяжной IR Sensor @@ -420,7 +420,7 @@ Sensore IR IR szenzor Sensor IV - ИК сенсор + ИК No triggers available for %1 @@ -432,7 +432,7 @@ Nessun attivatore disponibile per %1 Nincs detonátor a %1 Nenhum gatilho disponível para %1 - Нет доступных взрывателей для %1 + Нет защелка доступны для %1 IR Sensor (Side Attack) @@ -444,7 +444,7 @@ Sensore IR (Attacco laterale) IR Sensor (Side Attack) Sensor infravermelho (ataque lateral) - ИК (детонация вбок) + ИК (боковая атака) Magnetic Influence Sensor (Bottom Attack) @@ -456,7 +456,7 @@ Sensore Magnetico di Prossimità (Attacco inferiore) Mágneses (Bottom Attack) Influência magnética (ataque inferior) - Магнитный (детонация вверх) + Магнитный (дно атака) No explosives on trigger. @@ -468,7 +468,7 @@ Nincs robbanóanyag a detonátorhoz. Brak ładunków na zapalnik. Nenhum explosivo no gatilho. - Нет доступных ВУ для взрывателя. + Нет взрывчатки на курок. Dead Man's Switch @@ -478,7 +478,7 @@ Czuwak Detonador de hombre muerto Dead Man's Switch - Ловушка мертвеца + Кнопка мертвеца Used to remotely trigger explosives when released. diff --git a/addons/fcs/stringtable.xml b/addons/fcs/stringtable.xml index 0911bbdb57..154d874f73 100644 --- a/addons/fcs/stringtable.xml +++ b/addons/fcs/stringtable.xml @@ -1,81 +1,81 @@  - + - - - Lase Target / Measure Distance - Ziel anlasern / Entfernung Messen - Télémétrer la cible - Naświetl cel / Zmierz odległość - Označit cíl / Změřit vzdálenost - Iluminar objetivo / Medir distancia - - Подсветить цель / Замерить расстояние - - - Zeroed To - Haltepunkt - Fijado a - Wyzerowany na - Nastaveno na - Zéroté à - Выставлено на - Nullázás - Fixado em - Azzeramento a - - - Adjust FCS Range (Up) - Entfernung des FLS erhöhen - Zwiększ zasięg FCS - Ajustar distancia del FCS (arriba) - Nastavit FCS Náměr (nahoru) - Augmenter la distance du SCT - FCS tartomány állítása (Fel) - Ajustar distância do FCS (Acima) - Aumentare la distanza dell'FCS - Диапазон СУО (Выше) - - - Adjust FCS Range (Down) - Entfernung des FLS verringern - Zmniejsz zasięg FCS - Ajustar distancia del FCS (abajo) - Nastavit FCS Náměr (dolů) - Réduire la distance du SCT - FCS tartomány állítása (Le) - Ajustar distância do FCS (Abaixo) - Ridurre la distanza dell'FCS - Диапазон СУО (Ниже) - - - Reset FCS - FLS zurücksetzen - Reiniciar FCS - Réinitialiser le SCT - Resetuj FCS - Resetovat FCS - FCS visszaállítása - Reiniciar FCS - Azzeramento dell'FCS - Обнулить СУО - - - FCS has been reset. - FLS wurde zurückgesetzt. - FCS reiniciado - SCT réinitialisé. - FCS został zresetowany. - FCS byl resetován. - Az FCS visszaállítva - FCS reiniciado. - L'FCS è stato azzerato - СУО обнулен. - - - \ No newline at end of file + Подсветить цель / Измерить расстояние + + + Zeroed To + Haltepunkt + Fijado a + Wyzerowany na + Nastaveno na + Zéroté à + Зероинг + Nullázás + Fixado em + Azzeramento a + + + Adjust FCS Range (Up) + Entfernung des FLS erhöhen + Zwiększ zasięg FCS + Ajustar distancia del FCS (arriba) + Nastavit FCS Náměr (nahoru) + Augmenter la distance du SCT + FCS tartomány állítása (Fel) + Ajustar distância do FCS (Acima) + Aumentare la distanza dell'FCS + Диапазон СУО (Выше) + + + Adjust FCS Range (Down) + Entfernung des FLS verringern + Zmniejsz zasięg FCS + Ajustar distancia del FCS (abajo) + Nastavit FCS Náměr (dolů) + Réduire la distance du SCT + FCS tartomány állítása (Le) + Ajustar distância do FCS (Abaixo) + Ridurre la distanza dell'FCS + Диапазон СУО (Ниже) + + + Reset FCS + FLS zurücksetzen + Reiniciar FCS + Réinitialiser le SCT + Resetuj FCS + Resetovat FCS + FCS visszaállítása + Reiniciar FCS + Azzeramento dell'FCS + Обнулить СУО + + + FCS has been reset. + FLS wurde zurückgesetzt. + FCS reiniciado + SCT réinitialisé. + FCS został zresetowany. + FCS byl resetován. + Az FCS visszaállítva + FCS reiniciado. + L'FCS è stato azzerato + СУО обнулен + + + diff --git a/addons/goggles/stringtable.xml b/addons/goggles/stringtable.xml index 9b2e6fba12..1756442176 100644 --- a/addons/goggles/stringtable.xml +++ b/addons/goggles/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -8,7 +8,7 @@ Mostrar efectos de las gafas en tercera persona Zobrazit účinky brýlí v třetí osobě Effets de lunettes à la 3ème personne - Отображать эффект очков от третьего лица + Отображать эффект очков в третьем лице Szemüveg effekt mutatása külső nézetből Włącz efekty gogli w trzeciej osobie Mostrar efeitos de óculos em Terceira Pessoa @@ -27,4 +27,4 @@ Pulisci gli occhiali - \ No newline at end of file + diff --git a/addons/grenades/stringtable.xml b/addons/grenades/stringtable.xml index 803aa0a220..1129d44271 100644 --- a/addons/grenades/stringtable.xml +++ b/addons/grenades/stringtable.xml @@ -1,5 +1,5 @@ - - + + @@ -93,7 +93,7 @@ Les grenades incapacitantes servent à désorienter ou distraire une menace pendant quelques secondes. Granat ogłusza, nie zabijając przeciwnika. Detonacja daje efekt oślepiającego błysku i głośnego huku. Omračující granát je taktická nesmrtící zbraň používaná při záchraně rukojmí a zvládání davu. - XM84 (M84) - граната нелетального действия, и предназначена для отвлечения и временного вывода из строя, либо дезориентации противника. Основное использование нашла при освобождении заложников, захвате преступников и террористов, а также проведении диверсионных миссий. + Граната XM84 (M84) - не летального действия, и предназначена для отвлечения и временного вывода из строя, либо дезориентации противника. Основное использование нашла при освобождении заложников, захвате преступников и террористов, а также проведении диверсионных миссий. Eldobás után felrobban és éles hang, valamint fényhatással zavarja össze a környezetében tartózkodókat. Anche conosciuta come flashbang. Causa accecamento immediato, sensazioni di sposatezza, mancanza d'equilibrio e disturbi al timpano. Um tipo de granada não-letal destinado a confundir, desorientar e distrair uma potencial ameaça. @@ -243,4 +243,4 @@ M127A1 (Amarilla) - \ No newline at end of file + diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index ba4d17e112..f042128301 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -102,7 +102,6 @@ Disable ear ringing Desactivar zumbido de oídos Knalltrauma deaktivieren - Отключить эффект баротравмы \ No newline at end of file diff --git a/addons/interact_menu/stringtable.xml b/addons/interact_menu/stringtable.xml index bbb17efd87..b3de5efddf 100644 --- a/addons/interact_menu/stringtable.xml +++ b/addons/interact_menu/stringtable.xml @@ -1,31 +1,26 @@  - + Always display cursor for self interaction Immer den Cursor für Selbst-Interaktionen anzeigen. - Всегда показывать курсор для взаимодействия с собой Interact Key Interaktionstaste - Клавиша взаимодействия Self Interaction Key Selbst-Interaktionstaste - Клавиша взаимодействия (с собой) Self Actions Selbst-Interaktion - Действия с собой Vehicle Actions Fahrzeug-Interaktion - Действия на транспорте \ No newline at end of file diff --git a/addons/interaction/stringtable.xml b/addons/interaction/stringtable.xml index 8016079b90..e85d0d3b47 100644 --- a/addons/interaction/stringtable.xml +++ b/addons/interaction/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -616,7 +616,7 @@ Modyfikator Modifier la touche Tecla modificadora - Клавиша-модификатор + клавиша-модификатор Tecla Modificadora Modifica Tasto Módosító billentyű @@ -664,7 +664,6 @@ Passengers Passagiere - Пассажиры \ No newline at end of file diff --git a/addons/inventory/stringtable.xml b/addons/inventory/stringtable.xml index 75f15e3720..f93e0d9627 100644 --- a/addons/inventory/stringtable.xml +++ b/addons/inventory/stringtable.xml @@ -1,16 +1,14 @@  - + Make Inventory Display Bigger Die Anzeige des Inventar vergrößern. - Сделать окно инвентаря больше Normally inventory display is scaled by UI size. This allows scaling the Inventory UI size up, but doesn't increase font size allowing more rows displayed. Normalerweise wird die Größe des Inventars mit der Größe der UI skaliert. Diese Einstellung allerdings vergrößert das Inventar bei gleichbleibender Schriftgröße, so dass mehr Einträge angzeigt werden können. - Обычно, окно инвентаря зависит от размеров пользовательского интерфейса. Эта настройка позволяет увеличить размер окна инвентаря в пользовательском интерфейсе, не увеличивая размера шрифтов, так что отображется большее количество строк. \ No newline at end of file diff --git a/addons/kestrel/stringtable.xml b/addons/kestrel/stringtable.xml index baae118891..5f54fd6489 100644 --- a/addons/kestrel/stringtable.xml +++ b/addons/kestrel/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -34,7 +34,7 @@ Monitoraggio Balistico Attivo Applied Ballistics Meter Medidor Balístico Ativo - Метеостанция + метеостанция Open Kestrel diff --git a/addons/laser_selfdesignate/stringtable.xml b/addons/laser_selfdesignate/stringtable.xml index ca5ff1e687..03d28814ec 100644 --- a/addons/laser_selfdesignate/stringtable.xml +++ b/addons/laser_selfdesignate/stringtable.xml @@ -1,16 +1,14 @@  - + Laser<br/>Designator On Lasermarkierer<br/>an - ЛЦУ<br/>ВКЛ Laser<br/>Designator Off Lasermarkierer<br/>aus - ЛЦУ<br/>ВЫКЛ \ No newline at end of file diff --git a/addons/laserpointer/stringtable.xml b/addons/laserpointer/stringtable.xml index 279fdeb5e8..87b36618a6 100644 --- a/addons/laserpointer/stringtable.xml +++ b/addons/laserpointer/stringtable.xml @@ -1,22 +1,21 @@  - + Laser Pointer (red) Laserpointer (rot) - Лазерный прицел (красный) Laser Pointer (green) Laserpointer (grün) - Лазерный прицел (зелёный) + Emits visible light. Strahlt sichtbares Licht aus. - Испускает узкий пучок видимого света. + <t color='#9cf953'>Use: </t>Turn Laser ON/OFF <t color='#9cf953'>Použití: </t>Zapnout/vypnout laser @@ -28,5 +27,6 @@ <t color='#9cf953'>Использовать: </t>вкл/выкл лазер <t color='#9cf953'>Usar: </t>encender/apagar láser + - \ No newline at end of file + diff --git a/addons/logistics_uavbattery/stringtable.xml b/addons/logistics_uavbattery/stringtable.xml index 3a8d958709..fbd9004290 100644 --- a/addons/logistics_uavbattery/stringtable.xml +++ b/addons/logistics_uavbattery/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -24,7 +24,7 @@ Potřebuješ UAV-Baterii Você precisa de uma Bateria para VANT Hai bisogno di una Batteria UAV - Требуется аккумулятор для БПЛА + Требуется аккумулятор БПЛА Recharge @@ -36,7 +36,7 @@ Dobít Recarregar Ricarica - Зарядить + Подзарядить UAV Battery @@ -60,7 +60,7 @@ Používané k dobíjení UAV Usada para reabastecer VANT Usata per ricaricare la Batteria dell'UAV - Используется для зарядки БПЛА + Используется для подзарядки БПЛА Recharging ... @@ -72,7 +72,7 @@ Dobíjení ... Recarregando ... In ricarica ... - Заряжается ... + Подзаряжаем ... \ No newline at end of file diff --git a/addons/logistics_wirecutter/stringtable.xml b/addons/logistics_wirecutter/stringtable.xml index 4e08ec33e8..f23af6b1e5 100644 --- a/addons/logistics_wirecutter/stringtable.xml +++ b/addons/logistics_wirecutter/stringtable.xml @@ -1,17 +1,15 @@  - + Wirecutter Drahtschneider Wirecutter - Клещи-кусачки Wirecutter Schneidet Draht. - Позволяют быстро перекусывать сеточные конструкции. Cut Fence @@ -23,7 +21,7 @@ Cortar Cerca Taglia Drótkerítés átvágása - Разрезать забор + Вырезать забор Cutting Fences / Wires ... @@ -35,7 +33,7 @@ Cortando Cerca / Arame ... Sto tagliando ... Drótok elvágása ... - Разрезаем забор / провода ... + Вырезаем забор / провода ... Fence cut @@ -47,7 +45,7 @@ Cerca cortada Fatto! Drótkerítés átvágva - Забор разрезан + Забор вырезан \ No newline at end of file diff --git a/addons/magazinerepack/stringtable.xml b/addons/magazinerepack/stringtable.xml index 8aa586b916..d8fd5ca177 100644 --- a/addons/magazinerepack/stringtable.xml +++ b/addons/magazinerepack/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -78,19 +78,16 @@ Repacking Finished Wiederverpacken Fertig Reembalaje Finalizado - Перепаковка завершена Repacking Interrupted Umpacken Unterbrochen Reempaque Interrupted - Перепаковка прервана %1 Full and %2 Partial %1 Vollständigen und %2 Teilweisen %1 Total y %2 Parcial - %1 полных и %2 неполных \ No newline at end of file diff --git a/addons/magazines/stringtable.xml b/addons/magazines/stringtable.xml index db637f8064..c8f652fa39 100644 --- a/addons/magazines/stringtable.xml +++ b/addons/magazines/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -13,7 +13,7 @@ 6.5mm 30ks Svítící IR-DIM Zásobník Carregador de 30 projéteis traçantes IR-DIM de 6,5mm Caricatore 6.5mm 30Rnd Traccianti IR-DIM - Магазин из 30-ти 6.5 мм трассирующих под ПНВ + Магазин из 30-и 6.5 мм трассирующих под ПНВ 6.5mm IR-DIM @@ -25,7 +25,7 @@ 6.5mm IR-DIM 6,5mm IR-DIM 6.5 IR-DIM - 6.5 мм ИК-трассирующие + 6.5 мм трассирущие под ПНВ Caliber: 6.5x39 mm Tracer IR-DIM<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL @@ -49,7 +49,7 @@ 6.5mm 30ks SD Zásobník Carregador de 30 projéteis SD de 6,5mm Caricatore 6.5mm 30Rnd Sil. - Магазин из 30-ти 6.5 мм дозвуковых + Магазин из 30-и 6.5 мм дозвуковых 6.5mm SD @@ -85,7 +85,7 @@ 6.5mm 30ks AP Zásobník Carregador de 30 projéteis AP de 6,5mm Caricatore 6.5mm 30Rnd AP - Магазин из 30-ти 6.5 мм бронебойных + Магазин из 30-и 6.5 мм бронебойных 6.5mm AP @@ -122,7 +122,7 @@ 6.5mm 30ks Svítící IR-DIM Zásobník Carregador de 30 projéteis traçantes IR-DIM de 6,5mm Caricatore 6.5mm 30Rnd Traccianti IR-DIM - Магазин из 30-ти 6.5 мм трассирующих под ПНВ + Магазин из 30-и 6.5 мм трассирующих под ПНВ 6.5mm IR-DIM @@ -134,7 +134,7 @@ 6.5mm IR-DIM 6,5mm IR-DIM 6.5mm IR-DIM - 6.5 мм ИК-трассирующие + 6.5 мм трассирущие под ПНВ Caliber: 6.5x39 mm Tracer IR-DIM<br />Rounds: 30<br />Used in: Katiba @@ -158,7 +158,7 @@ 6.5mm 30ks SD Zásobník Carregador de 30 projéteis SD de 6,5mm Caricatore 6.5mm 30Rnd Sil. - Магазин из 30-ти 6.5 мм дозвуковых + Магазин из 30-и 6.5 мм дозвуковых 6.5mm SD @@ -194,7 +194,7 @@ 6.5mm 30ks AP Zásobník Carregador de 30 projéteis AP de 6,5mm Caricatore 6.5mm 30Rnd AP - Магазин из 30-ти 6.5 мм бронебойных + Магазин из 30-и 6.5 мм бронебойных 6.5mm AP @@ -231,7 +231,7 @@ 5.56mm 30ks Svítící IR-DIM Zásobník Carregador de 30 projéteis traçantes IR-DIM de 5,56mm Caricatore 5.56mm 30rnd Traccianti IR-DIM - Магазин из 30-ти 5.56 мм трассирующих под ПНВ + Магазин из 30-и 5.56 мм трассирующих под ПНВ 5.56mm IR-DIM @@ -243,7 +243,7 @@ 5.56mm IR-DIM 5,56mm IR-DIM 5.56mm IR-DIM - 5.56 мм ИК-трассирующие + 5.56 мм трассирущие под ПНВ Caliber: 5.56x45 mm Tracer IR-DIM<br />Rounds: 30<br />Used in: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR @@ -267,7 +267,7 @@ 5.56mm 30ks SD Zásobník Carregador de 30 projéteis SD de 5,56mm Caricatore 5.56mm 30Rnd Sil. - Магазин из 30-ти 5.56 мм дозвуковых + Магазин из 30-и 5.56 мм дозвуковых 5.56mm SD @@ -303,7 +303,7 @@ 5.56mm 30ks AP Zásobník Carregador de 30 projéteis AP de 5,56mm Caricatore 5.56mm 30Rnd AP - Магазин из 30-ти 5.56 мм бронебойных + Магазин из 30-и 5.56 мм бронебойных 5.56mm AP @@ -340,7 +340,7 @@ 7.62mm 20ks Svítící Zásobník Carregador de 20 projéteis traçantes de 7,62mm Caricatore 7.62mm 20Rnd Traccianti - Магазин из 20-ти 7.62 мм трассирующих + Магазин из 20-и 7.62 мм трассирующих 7.62mm Tracer @@ -376,7 +376,7 @@ 7.62mm 20ks Svítící IR-DIM Zásobník Carregador de 20 projéteis IR-DIM de 7,62mm Caricatore 7.62mm 20rnd Traccianti IR-DIM - Магазин из 20-ти 7.62 мм трассирующих под ПНВ + Магазин из 20-и 7.62 мм трассирующих под ПНВ 7.62mm IR-DIM @@ -388,7 +388,7 @@ 7.62mm IR-DIM 7,62mm IR-DIM 7.62mm IR-DIM - 7.62 мм ИК-трассирующие + 7.62 мм трассирущие под ПНВ Caliber: 7.62x51 mm Tracer IR-DIM<br />Rounds: 20<br />Used in: Mk18 ABR @@ -412,7 +412,7 @@ 7.62mm 20ks SD Zásobník Carregador de 20 projéteis SD de 7,62mm Caricatore 7.62mm 20Rnd Sil. - Магазин из 20-ти 7.62 мм дозвуковых + Магазин из 20-и 7.62 мм дозвуковых 7.62mm SD @@ -448,7 +448,7 @@ 7.62mm 20ks AP Zásobník Carregador de 20 projéteis AP de 7,62mm Caricatore 7.62mm 20Rnd AP - Магазин из 20-ти 7.62 мм бронебойных + Магазин из 20-и 7.62 мм бронебойных 7.62mm AP @@ -487,4 +487,4 @@ Calibro: 7.62x51mm M118LR<br />Munizioni:20<br />In uso su: M14 - \ No newline at end of file + diff --git a/addons/maptools/stringtable.xml b/addons/maptools/stringtable.xml index 2e5fee49ab..5dd4578976 100644 --- a/addons/maptools/stringtable.xml +++ b/addons/maptools/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -142,7 +142,7 @@ Kierunek: %1° Dirección: %1° Irány: %1 - Направление: %1° + Направление:%1 \ No newline at end of file diff --git a/addons/markers/stringtable.xml b/addons/markers/stringtable.xml index 65da73a026..ea6d72990a 100644 --- a/addons/markers/stringtable.xml +++ b/addons/markers/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -9,7 +9,7 @@ Směr: %1° Kierunek: %1° Dirección: %1° - Направление: %1° + Направление: %1 \ No newline at end of file diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 1d2b166e3c..a5dfdbba49 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -1,1010 +1,974 @@  - + - - - Inject Atropine - Atropin - Ввести атропин - - - Inject Epinephrine - Epinephrine injizieren - Inyectar Epinefrina - Wtrzyknij adrenalinę - Aplikovat Adrenalin - Ввести андреналил - Adrénaline - Adrenalin - Injetar Epinefrina - Inietta Epinefrina - - - Inject Morphine - Morphin injizieren - Inyectar Morfina - Wstrzyknij morfinę - Aplikovat Morfin - Ввести морфин - Morphine - Morfium - Injetar Morfina - Inietta Morfina - - - Transfuse Blood - Bluttransfusion - Transfundir sangre - Przetocz krew - Transfúze krve - Перелить кровь - Transfusion - Infúzió - Transfundir Sangue - Effettua Trasfusione - - - Transfuse Plasma - Plasmatransfusion - Перелить плазму - - - Transfuse Saline - Salzlösungtransfusion - Влить физраствор - - - Apply Tourniquet - Aderpresse anwenden - Наложить жгут - - - Bandage - Verbinden - Venda - Bandaż - Obvázat - Pansement - Benda - Kötözés - Atadura - Перевязать - - - Bandage Head - Kopf verbinden - Vendar la cabeza - Bandażuj głowę - Obvázat hlavu - Перевязать голову - Pansement Tête - Fej kötözése - Atar Cabeça - Benda la testa - - - Bandage Torso - Torso verbinden - Vendar el torso - Bandażuj tors - Obvázat hruď - Перевязать торс - Pansement Torse - Felsőtest kötözése - Atar Tronco - Benda il torso - - - Bandage Left Arm - Arm links verbinden - Vendar el brazo izquierdo - Bandażuj lewe ramię - Obvázat levou ruku - Перевязать левую руку - Pansement Bras Gauche - Bal kar kötözése - Atar Braço Esquerdo - Benda il braccio sinistro - - - Bandage Right Arm - Arm rechts verbinden - Vendar el brazo derecho - Bandażuj prawe ramię - Obvázat pravou ruku - Перевязать правую руку - Pansement Bras Droit - Jobb kar kötözése - Atar Braço Direito - Benda il braccio destro - - - Bandage Left Leg - Bein links verbinden - Vendar la pierna izquierda - Bandażuj lewą nogę - Obvázat levou nohu - Перевязать левую ногу - Pansement Jambe Gauche - Bal láb kötözése - Atar Perna Esquerda - Benda la gamba sinistra - - - Bandage Right Leg - Bein rechts verbinden - Vendar la pierna derecha - Bandażuj prawą nogę - Obvázat pravou nohu - Перевязать правую ногу - Pansement Jambe Droite - Jobb láb kötözése - Atar Perna Direita - Benda la gamba destra - - - Injecting Morphine ... - Morphin injizieren ... - Inyectando Morfina ... - Wstrzykiwanie morfiny ... - Aplikuju Morfin ... - Введение морфина... - Injection de Morphine... - Morfium beadása... - Injetando Morfina ... - Inietto la morfina ... - - - Injecting Epinephrine ... - Epinephrin injizieren ... - Inyectando Epinefrina ... - Wstrzykiwanie adrenaliny ... - Aplikuju Adrenalin ... - Введение андреналина ... - Injection d'Adrénaline ... - Adrenalin beadása... - Injetando Epinefrina ... - Inietto l'epinefrina ... - - - Injecting Atropine ... - Atropin injizieren ... - Введение атропина ... - - - Transfusing Blood ... - Bluttransfusion ... - Realizando transfusión ... - Przetaczanie krwi ... - Probíhá transfúze krve ... - Переливание крови... - Transfusion Sanguine ... - Infúzió... - Transfundindo Sangue ... - Effettuo la trasfusione ... - - - Transfusing Saline ... - Sallösungtransfusion ... - Вливание физраствора ... - - - Transfusing Plasma ... - Plasmatransfusion ... - Переливание плзмы ... - - - Bandaging ... - Verbinden ... - Vendando ... - Bandażowanie ... - Obvazuji ... - Pansement ... - Sto applicando la benda ... - Bekötözés... - Atando ... - Перевязывание ... - - - Applying Tourniquet ... - Aderpresse ... - Наложение жгута ... - - - Medical - Zdravotní - Médical - Sanitäter - Medico - Medyczne - Médico - Медик - Médico - - - Field Dressing - Бинтовая повязка - - - Packing Bandage - Компресионный пакет - - - Elastic Bandage - Давящая повязка - - - QuikClot - QuickClot - - - Check Pulse - Puls überprüfen - Проверить пульс - - - Check Blood Pressure - Blutdruck messen - Проверить кровяное давление - - - Triage Card - Triage Karte - Медкарта - - - Tourniquet - Tourniquet - Жгут - - - Remove Tourniquet - Entferne Tourniquet - Снять жгут - - - Give Blood IV (1000ml) - Дать кровь для в/в вливания (1000 мл) - - - Give Blood IV (500ml) - Дать кровь для в/в вливания (500 мл) - - - Give Blood IV (250ml) - Дать кровь для в/в вливания (250 мл) - - - Give Plasma IV (1000ml) - Дать плазму для в/в вливания (1000 мл) - - - Give Plasma IV (500ml) - Дать плазму для в/в вливания (500 мл) - - - Give Plasma IV (250ml) - Дать плазму для в/в вливания (250 мл) - - - Give Saline IV (1000ml) - Дать физраствор для в/в вливания (1000 мл) - - - Give Saline IV (500ml) - Дать физраствор для в/в вливания (500 мл) - - - Give Saline IV (250ml) - Дать физраствор для в/в вливания (250 мл) - - - Minor - Gering - Незначительные травмы - - - Delayed - Груз 300 - - - Immediate - Помощь отложена - - - Deceased - Груз 200 - - - None - Нет - - - Normal breathing - Дыхание в норме - Respiración normal - Respiration Normale - Normalny oddech - - - No breathing - Дыхания нет - No respira - Apnée - Brak oddechu - - - Difficult breathing - Дыхание затруднено - Dificultad para respirar - Difficultée Respiratoire - Trudności z oddychaniem - - - Almost no breathing - Дыхания почти нет - Casi sin respirar - Respiration Faible - Prawie brak oddechu - - - Bleeding - Кровотечение - Sangrando - Seignement - Krwawienie zewnętrzne - - - In Pain - Испытывает боль - Con Dolor - A De La Douleur - W bólu - - - Lost a lot of Blood - Большая кровопотеря - Mucha Sangre perdida - A Perdu Bcp de Sang - Stracił dużo krwi - - - Tourniquet [CAT] - Жгут - Torniquete [CAT] - Garot [CAT] - Opaska uciskowa [CAT] - - - Receiving IV [%1ml] - Принимается переливание [%1 мл] - - - Bandage (Basic) - Повязка (обычная) - Vendaje (Básico) - Bandage (Standard) - Bandaż (jałowy) - - - Used to cover a wound - Для перевязки ран - Utilizado para cubrir una herida - Utilisé Pour Couvrir Une Blessure - Używany w celu przykrycia i ochrony miejsca zranienia - - - A dressing, that is a particular material used to cover a wound, which is applied over the wound + + + Inject Atropine + Atropin + + + Inject Epinephrine + Epinephrine injizieren + Inyectar Epinefrina + Wtrzyknij adrenalinę + Aplikovat Adrenalin + Ввести андреналил + Adrénaline + Adrenalin + Injetar Epinefrina + Inietta Epinefrina + + + Inject Morphine + Morphin injizieren + Inyectar Morfina + Wstrzyknij morfinę + Aplikovat Morfin + Ввести морфин + Morphine + Morfium + Injetar Morfina + Inietta Morfina + + + Transfuse Blood + Bluttransfusion + Transfundir sangre + Przetocz krew + Transfúze krve + Перелить кровь + Transfusion + Infúzió + Transfundir Sangue + Effettua Trasfusione + + + Transfuse Plasma + Plasmatransfusion + + + Transfuse Saline + Salzlösungtransfusion + + + Apply Tourniquet + Aderpresse anwenden + + + Bandage + Verbinden + Venda + Bandaż + Obvázat + Pansement + Benda + Kötözés + Atadura + Перевязать + + + Bandage Head + Kopf verbinden + Vendar la cabeza + Bandażuj głowę + Obvázat hlavu + Перевязать голову + Pansement Tête + Fej kötözése + Atar Cabeça + Benda la testa + + + Bandage Torso + Torso verbinden + Vendar el torso + Bandażuj tors + Obvázat hruď + Перевязать торс + Pansement Torse + Felsőtest kötözése + Atar Tronco + Benda il torso + + + Bandage Left Arm + Arm links verbinden + Vendar el brazo izquierdo + Bandażuj lewe ramię + Obvázat levou ruku + Перевязать левую руку + Pansement Bras Gauche + Bal kar kötözése + Atar Braço Esquerdo + Benda il braccio sinistro + + + Bandage Right Arm + Arm rechts verbinden + Vendar el brazo derecho + Bandażuj prawe ramię + Obvázat pravou ruku + Перевязать правую руку + Pansement Bras Droit + Jobb kar kötözése + Atar Braço Direito + Benda il braccio destro + + + Bandage Left Leg + Bein links verbinden + Vendar la pierna izquierda + Bandażuj lewą nogę + Obvázat levou nohu + Перевязать левую ногу + Pansement Jambe Gauche + Bal láb kötözése + Atar Perna Esquerda + Benda la gamba sinistra + + + Bandage Right Leg + Bein rechts verbinden + Vendar la pierna derecha + Bandażuj prawą nogę + Obvázat pravou nohu + Перевязать правую ногу + Pansement Jambe Droite + Jobb láb kötözése + Atar Perna Direita + Benda la gamba destra + + + Injecting Morphine ... + Morphin injizieren ... + Inyectando Morfina ... + Wstrzykiwanie morfiny ... + Aplikuju Morfin ... + Введение морфина... + Injection de Morphine... + Morfium beadása... + Injetando Morfina ... + Inietto la morfina ... + + + Injecting Epinephrine ... + Epinephrin injizieren ... + Inyectando Epinefrina ... + Wstrzykiwanie adrenaliny ... + Aplikuju Adrenalin ... + Введение андреналина + Injection d'Adrénaline ... + Adrenalin beadása... + Injetando Epinefrina ... + Inietto l'epinefrina ... + + + Injecting Atropine ... + Atropin injizieren ... + + + Transfusing Blood ... + Bluttransfusion ... + Realizando transfusión ... + Przetaczanie krwi ... + Probíhá transfúze krve ... + Переливание крови... + Transfusion Sanguine ... + Infúzió... + Transfundindo Sangue ... + Effettuo la trasfusione ... + + + Transfusing Saline ... + Sallösungtransfusion ... + + + Transfusing Plasma ... + Plasmatransfusion ... + + + Bandaging ... + Verbinden ... + Vendando ... + Bandażowanie ... + Obvazuji ... + Pansement ... + Sto applicando la benda ... + Bekötözés... + Atando ... + Перевязывание.... + + + Applying Tourniquet ... + Aderpresse ... + + + Medical + Zdravotní + Médical + Sanitäter + Medico + Medyczne + Médico + Медик + Médico + + + Field Dressing + + + Packing Bandage + + + Elastic Bandage + + + QuikClot + + + Check Pulse + Puls überprüfen + + + Check Blood Pressure + Blutdruck messen + + + Triage Card + Triage Karte + + + Tourniquet + Tourniquet + + + Remove Tourniquet + Entferne Tourniquet + + + Give Blood IV (1000ml) + + + Give Blood IV (500ml) + + + Give Blood IV (250ml) + + + Give Plasma IV (1000ml) + + + Give Plasma IV (500ml) + + + Give Plasma IV (250ml) + + + Give Saline IV (1000ml) + + + Give Saline IV (500ml) + + + Give Saline IV (250ml) + + + Minor + Gering + + + Delayed + + + Immediate + + + Deceased + + + None + + + Normal breathing + Дыхание в норме + Respiración normal + Respiration Normale + Normalny oddech + + + No breathing + Дыхания нет + No respira + Apnée + Brak oddechu + + + Difficult breathing + Дыхание затруднено + Dificultad para respirar + Difficultée Respiratoire + Trudności z oddychaniem + + + Almost no breathing + Дыхания почти нет + Casi sin respirar + Respiration Faible + Prawie brak oddechu + + + Bleeding + Кровотечение + Sangrando + Seignement + Krwawienie zewnętrzne + + + In Pain + Испытывает боль + Con Dolor + A De La Douleur + W bólu + + + Lost a lot of Blood + Большая кровопотеря + Mucha Sangre perdida + A Perdu Bcp de Sang + Stracił dużo krwi + + + Tourniquet [CAT] + Жгут + Torniquete [CAT] + Garot [CAT] + Opaska uciskowa [CAT] + + + Receiving IV [%1ml] + + + + Bandage (Basic) + Повязка (обычная) + Vendaje (Básico) + Bandage (Standard) + Bandaż (jałowy) + + + Used to cover a wound + Для перевязки ран + Utilizado para cubrir una herida + Utilisé Pour Couvrir Une Blessure + Używany w celu przykrycia i ochrony miejsca zranienia + + + A dressing, that is a particular material used to cover a wound, which is applied over the wound once bleeding has been stemmed. - Повязка, накладываемая поверх раны после остановки кровотечения. - Un apósito, material específico utilizado para cubrir una herida, se aplica sobre la herida una vez + Повязка, накладываемая поверх раны после остановки кровотечения. + Un apósito, material específico utilizado para cubrir una herida, se aplica sobre la herida una vez ha dejado de sangrar. - C'est un bandage, qui est fait d'un matériel spécial utiliser pour couvrir une blessure, qui peut + C'est un bandage, qui est fait d'un matériel spécial utiliser pour couvrir une blessure, qui peut etre appliquer des que le seignement as ete stopper. - Opatrunek materiałowy, używany do przykrywania ran, zakładany na ranę po zatamowaniu krwawienia. + Opatrunek materiałowy, używany do przykrywania ran, zakładany na ranę po zatamowaniu krwawienia. - - - Packing Bandage - Тампонирующая повязка - Vendaje Compresivo - Bandage Mèche - Bandaż (uciskowy) - - - Used to pack medium to large wounds and stem the bleeding - Для тампонирования ран среднего и большого размера и остановки кровотечения. - Se utiliza para vendar heridas medianas y grandes y detener el sangrado - Utiliser pour remplire la cavité créé dans une blessure moyenne et grande. - Używany w celu opatrywania średnich i dużych ran oraz tamowania krwawienia. - - - A bandage used to pack the wound to stem bleeding and facilitate wound healing. Packing a wound is + + + Packing Bandage + Тампонирующая повязка + Vendaje Compresivo + Bandage Mèche + Bandaż (uciskowy) + + + Used to pack medium to large wounds and stem the bleeding + Для тампонирования ран среднего и большого размера и остановки кровотечения. + Se utiliza para vendar heridas medianas y grandes y detener el sangrado + Utiliser pour remplire la cavité créé dans une blessure moyenne et grande. + Używany w celu opatrywania średnich i dużych ran oraz tamowania krwawienia. + + + A bandage used to pack the wound to stem bleeding and facilitate wound healing. Packing a wound is an option in large polytrauma injuries. - Повязка для тампонирования раны, остановки кровотечения и лучшего заживления. При тяжелых + Повязка для тампонирования раны, остановки кровотечения и лучшего заживления. При тяжелых сочетанных ранениях возможно тампонирование раны. - Se utiliza para detener la hemorragia de una herida y favorecer su cicatrización. Se usa en grandes + Se utiliza para detener la hemorragia de una herida y favorecer su cicatrización. Se usa en grandes lesiones o politraumatismos. - Un bandage servent a etre inseré dans les blessure pour éponger le seignement et faciliter la + Un bandage servent a etre inseré dans les blessure pour éponger le seignement et faciliter la guerrison. Ce bandage est une option pour soigner les lession de politrauma. - Opatrunek stosowany w celu zatrzymania krwawienia i osłony większych ran. - - - Bandage (Elastic) - Повязка (давящая) - Vendaje (Elástico) - Bandage (Élastique) - Bandaż (elastyczny) - - - Bandage kit, Elastic - Давящая повязка - Vendaje (Elástico) - Bandage Compressif Élastique - Zestaw bandaży elastycznych. - - - - - Ce bandage peut etre utiliser pour compresser la plaie afin de ralentire le seignement et assurer la + Opatrunek stosowany w celu zatrzymania krwawienia i osłony większych ran. + + + Bandage (Elastic) + Повязка (давящая) + Vendaje (Elástico) + Bandage (Élastique) + Bandaż (elastyczny) + + + Bandage kit, Elastic + Давящая повязка + Vendaje (Elástico) + Bandage Compressif Élastique + Zestaw bandaży elastycznych. + + + + + Ce bandage peut etre utiliser pour compresser la plaie afin de ralentire le seignement et assurer la tenue du bandage lors de mouvment. - Elastyczna opaska podtrzymująca opatrunek oraz usztywniająca okolice stawów. - Brinda una compresión uniforme y ofrece soporte extra a una zona lesionada - - - Tourniquet (CAT) - Жгут - Torniquete (CAT) - Garot (CAT) - Staza (typ. CAT) - - - Slows down blood loss when bleeding - Уменьшает кровопотерю при кровотечении. - Reduce la velocidad de pérdida de sangre - Ralentit le seignement - Zmniejsza ubytek krwi z kończyn w przypadku krwawienia. - - - A constricting device used to compress venous and arterial circulation in effect inhibiting or + Elastyczna opaska podtrzymująca opatrunek oraz usztywniająca okolice stawów. + Brinda una compresión uniforme y ofrece soporte extra a una zona lesionada + + + Tourniquet (CAT) + Жгут + Torniquete (CAT) + Garot (CAT) + Staza (typ. CAT) + + + Slows down blood loss when bleeding + Уменьшает кровопотерю при кровотечении. + Reduce la velocidad de pérdida de sangre + Ralentit le seignement + Zmniejsza ubytek krwi z kończyn w przypadku krwawienia. + + + A constricting device used to compress venous and arterial circulation in effect inhibiting or slowing blood flow and therefore decreasing loss of blood. - Жгут используется для прижатия сосудов, приводящего к остановке или значительному уменьшению + Жгут используется для прижатия сосудов, приводящего к остановке или значительному уменьшению кровотечения и сокращению кровопотери. - Dispositivo utilizado para eliminar el pulso distal y de ese modo controlar la pérdida de sangre + Dispositivo utilizado para eliminar el pulso distal y de ese modo controlar la pérdida de sangre - Un appareil servent a compresser les artères et veines afin de reduire la perte de sang. - Opaska zaciskowa CAT służy do tamowanie krwotoków w sytuacji zranienia kończyn z masywnym + Un appareil servent a compresser les artères et veines afin de reduire la perte de sang. + Opaska zaciskowa CAT służy do tamowanie krwotoków w sytuacji zranienia kończyn z masywnym krwawieniem tętniczym lub żylnym. - - - Morphine autoinjector - Морфин в пневмошприце - Morfina auto-inyectable - Auto-injecteur de Morphine - Autostrzykawka z morfiną - - - Used to combat moderate to severe pain experiences - Для снятия средних и сильных болевых ощущений. - Usado para combatir los estados dolorosos moderados a severos - Utiliser pour contrer les douleurs modéré à severes. - Morfina. Ma silne działanie przeciwbólowe. - - - An analgesic used to combat moderate to severe pain experiences. - Анальгетик для снятия средних и сильных болевых ощущений. - Analgésico usado para combatir los estados dolorosos de moderado a severo. - Un Analgésique puissant servant a contrer les douleur modéré a severe. - Organiczny związek chemiczny z grupy alkaloidów. Ma silne działanie przeciwbólowe. - - - Atropin autoinjector - Атропин в пневмошприце - Atropina auto-inyectable - Auto-injecteur d'Atropine - Autostrzykawka AtroPen - - - Used in NBC scenarios - Применяется для защиты от ОМП - Usado en escenarios NBQ - Utiliser en cas d'attaque CBRN - Atropina. Stosowana jako lek rozkurczowy i środek rozszerzający źrenice. - - - A drug used by the Military in NBC scenarios. - Препарат, используемый в войсках для защиты от оружия массового поражения. - Medicamento usado por Militares en escenarios NBQ - Médicament utilisé par l'armée en cas d'attaque CBRN - Atropina. Stosowana jako lek rozkurczowy i środek rozszerzający źrenice. Środek stosowany w + + + Morphine autoinjector + Морфин в автоматическом шприце + Morfina auto-inyectable + Auto-injecteur de Morphine + Autostrzykawka z morfiną + + + Used to combat moderate to severe pain experiences + Для снятия средних и сильных болевых ощущений. + Usado para combatir los estados dolorosos moderados a severos + Utiliser pour contrer les douleurs modéré à severes. + Morfina. Ma silne działanie przeciwbólowe. + + + An analgesic used to combat moderate to severe pain experiences. + Анальгетик для снятия средних и сильных болевых ощущений. + Analgésico usado para combatir los estados dolorosos de moderado a severo. + Un Analgésique puissant servant a contrer les douleur modéré a severe. + Organiczny związek chemiczny z grupy alkaloidów. Ma silne działanie przeciwbólowe. + + + Atropin autoinjector + Атропин в автоматическом шприце + Atropina auto-inyectable + Auto-injecteur d'Atropine + Autostrzykawka AtroPen + + + Used in NBC scenarios + Применяется для защиты от ОМП + Usado en escenarios NBQ + Utiliser en cas d'attaque CBRN + Atropina. Stosowana jako lek rozkurczowy i środek rozszerzający źrenice. + + + A drug used by the Military in NBC scenarios. + Препарат, используемый в войсках для защиты от оружия массового поражения. + Medicamento usado por Militares en escenarios NBQ + Médicament utilisé par l'armée en cas d'attaque CBRN + Atropina. Stosowana jako lek rozkurczowy i środek rozszerzający źrenice. Środek stosowany w przypadku zagrożeń NBC. - - - Epinephrine autoinjector - Адреналин в пневмошприце - Epinefrina auto-inyectable - Auto-injecteur d'épinéphrine - Autostrzykawka EpiPen - - - Increase heart rate and counter effects given by allergic reactions - Стимулирует работу сердца и купирует аллергические реакции. - Aumenta la frecuencia cardiaca y contraresta los efectos de las reacciones alérgicas - Augmente la Fréquance cadiaque et contré les effet d'une reaction Anaphylactique - Adrenalina. Zwiększa puls i przeciwdziała efektom wywołanym przez reakcje alergiczne - - - A drug that works on a sympathetic response to dilate the bronchi, increase heart rate and counter + + + Epinephrine autoinjector + Адреналин в автоматическом шприце + Epinefrina auto-inyectable + Auto-injecteur d'épinéphrine + Autostrzykawka EpiPen + + + Increase heart rate and counter effects given by allergic reactions + Стимулирует работу сердца и купирует аллергические реакции. + Aumenta la frecuencia cardiaca y contraresta los efectos de las reacciones alérgicas + Augmente la Fréquance cadiaque et contré les effet d'une reaction Anaphylactique + Adrenalina. Zwiększa puls i przeciwdziała efektom wywołanym przez reakcje alergiczne + + + A drug that works on a sympathetic response to dilate the bronchi, increase heart rate and counter such effects given by allergic reactions (anaphylaxis). Used in sudden cardiac arrest scenarios with decreasing positive outcomes. - Препарат, вызывающий симпатическую реакцию, приводящую к расширению бронхов, увеличению частоты + Препарат, вызывающий симпатическую реакцию, приводящую к расширению бронхов, увеличению частоты сердечных сокращений и купированию аллергических реакций (анафилактического шока). Применяется при остановке сердца с уменьшением вероятности благоприятного исхода. - Medicamento que dilata los bronquios, aumenta la frecuencia cardiaca y contrarresta los efectos de + Medicamento que dilata los bronquios, aumenta la frecuencia cardiaca y contrarresta los efectos de las reacciones alérgicas (anafilaxis). Se utiliza en caso de paros cardiacos repentinos. - Un medicament qui fonctione sur le systeme sympatique créan une dilatation des bronches, augmente la + Un medicament qui fonctione sur le systeme sympatique créan une dilatation des bronches, augmente la fréquance cardiaque et contre les effet d'une reaction alergique (anaphylaxie). Utiliser lors d'arret cardio-respiratoire pour augmenté les chances retrouver un ryhtme. - EpiPen z adrenaliną ma działanie sympatykomimetyczne, tj. pobudza receptory alfa- i + EpiPen z adrenaliną ma działanie sympatykomimetyczne, tj. pobudza receptory alfa- i beta-adrenergiczne. Pobudzenie układu współczulnego prowadzi do zwiększenia częstotliwości pracy serca, zwiększenia pojemności wyrzutowej serca i przyśpieszenia krążenia wieńcowego. Pobudzenie oskrzelowych receptorów beta-adrenergicznych wywołuje rozkurcz mięśni gładkich oskrzeli, co w efekcie zmniejsza towarzyszące oddychaniu świsty i duszności. - - - Plasma IV (1000ml) - Плазма для в/в вливания (1000 мл) - Plasma Intravenoso (1000ml) - Plasma Sanguin IV (1000ml) - Osocze IV (1000ml) - - - A volume-expanding blood supplement. - Дополнительный препарат, применяемый при возмещении объема крови. - Suplemento para expandir el volumen sanguíneo. - Supplement visant a remplacer les volume sanguin - Składnik krwi, używany do zwiększenia jej objętości. - - - A volume-expanding blood supplement. - Дополнительный препарат, применяемый при возмещении объема крови. - Suplemento para expandir el volumen sanguíneo. - Supplement visant a remplacer le volume sanguin et remplace les plaquettes. - Składnik krwi, używany do zwiększenia jej objętości. - - - Plasma IV (500ml) - Плазма для в/в вливания (500 мл) - Plasma Intravenoso (500ml) - Plasma Sanguin IV (500ml) - Osocze IV (500ml) - - - Plasma IV (250ml) - Плазма для в/в вливания (250 мл) - Plasma Intravenoso (250ml) - Plasma Sanguin (250ml) - Osocze IV (250ml) - - - Blood IV (1000ml) - Кровь для переливания (1000 мл) - Sangre Intravenosa (1000ml) - Cullot Sanguin IV (1000ml) - Krew IV (1000ml) - - - Blood IV, for restoring a patients blood (keep cold) - Пакет крови для возмещения объема потерянной крови (хранить в холодильнике) - Sangre Intravenosa, para restarurar el volumen sanguíneo (mantener frío) - Cullot Sanguin IV, pour remplacer le volume sanguin (garder Réfrigeré) - Krew IV, używana do uzupełnienia krwi u pacjenta, trzymać w warunkach chłodniczych - - - O Negative infusion blood used in strict and rare events to replenish blood supply usually + + + Plasma IV (1000ml) + Плазма для в/в вливания (1000 мл) + Plasma Intravenoso (1000ml) + Plasma Sanguin IV (1000ml) + Osocze IV (1000ml) + + + A volume-expanding blood supplement. + Дополнительный препарат, применяемый при возмещении объема крови. + Suplemento para expandir el volumen sanguíneo. + Supplement visant a remplacer les volume sanguin + Składnik krwi, używany do zwiększenia jej objętości. + + + A volume-expanding blood supplement. + Дополнительный препарат, применяемый при возмещении объема крови. + Suplemento para expandir el volumen sanguíneo. + Supplement visant a remplacer le volume sanguin et remplace les plaquettes. + Składnik krwi, używany do zwiększenia jej objętości. + + + Plasma IV (500ml) + Плазма для в/в вливания (500 мл) + Plasma Intravenoso (500ml) + Plasma Sanguin IV (500ml) + Osocze IV (500ml) + + + Plasma IV (250ml) + Плазма для в/в вливания (250 мл) + Plasma Intravenoso (250ml) + Plasma Sanguin (250ml) + Osocze IV (250ml) + + + Blood IV (1000ml) + Кровь для переливания (1000 мл) + Sangre Intravenosa (1000ml) + Cullot Sanguin IV (1000ml) + Krew IV (1000ml) + + + Blood IV, for restoring a patients blood (keep cold) + Пакет крови для возмещения объема потерянной крови (хранить в холодильнике) + Sangre Intravenosa, para restarurar el volumen sanguíneo (mantener frío) + Cullot Sanguin IV, pour remplacer le volume sanguin (garder Réfrigeré) + Krew IV, używana do uzupełnienia krwi u pacjenta, trzymać w warunkach chłodniczych + + + O Negative infusion blood used in strict and rare events to replenish blood supply usually conducted in the transport phase of medical care. - Кровь I группы, резус-отрицательная, применяется по жизненным показаниям для возмещения объема + Кровь I группы, резус-отрицательная, применяется по жизненным показаниям для возмещения объема потерянной крови на догоспитальном этапе оказания медицинской помощи. - Cullot Sanguin O- ,utiliser seulement lors de perte sanguine majeur afin de remplacer le volume + Cullot Sanguin O- ,utiliser seulement lors de perte sanguine majeur afin de remplacer le volume sanguin perdu. Habituelment utiliser lors du transport ou dans un etablisement de soin. - Krew 0 Rh-, używana w rzadkich i szczególnych przypadkach do uzupełnienia krwi u pacjenta, zazwyczaj + Krew 0 Rh-, używana w rzadkich i szczególnych przypadkach do uzupełnienia krwi u pacjenta, zazwyczaj w trakcie fazie transportu rannej osoby do szpitala. - Utilice sólo durante gran pérdida de sangre para reemplazar el volumen de sangre perdido. Uso + Utilice sólo durante gran pérdida de sangre para reemplazar el volumen de sangre perdido. Uso habitual durante el transporte de heridos. - - - Blood IV (500ml) - Кровь для переливания (500 мл) - Sangre Intravenosa (500ml) - Cullot Sanguin IV (500ml) - Krew IV (500ml) - - - Blood IV (250ml) - Кровь для переливания (250 мл) - Sangre Intravenosa (250ml) - Cullot Sanguin IV (250ml) - Krew IV (250ml) - - - Saline IV (1000ml) - Физраствор для в/в вливания (1000 мл) - Solución Salina Intravenosa (1000ml) - solution Saline 0.9% IV (1000ml) - Solanka 0,9% IV (1000ml) - - - Saline IV, for restoring a patients blood - Пакет физраствора для возмещения объема потерянной крови - Solución Salina Intravenosa, para restaurar el volumen sanguíneo - Solution Saline 0.9% IV, pour retablir temporairement la tention arteriel - Solanka 0,9%, podawana dożylnie (IV), używana w celu uzupełnienia krwi u pacjenta - - - A medical volume-replenishing agent introduced into the blood system through an IV infusion. + + + Blood IV (500ml) + Кровь для переливания (500 мл) + Sangre Intravenosa (500ml) + Cullot Sanguin IV (500ml) + Krew IV (500ml) + + + Blood IV (250ml) + Кровь для переливания (250 мл) + Sangre Intravenosa (250ml) + Cullot Sanguin IV (250ml) + Krew IV (250ml) + + + Saline IV (1000ml) + Физраствор для в/в вливания (1000 мл) + Solución Salina Intravenosa (1000ml) + solution Saline 0.9% IV (1000ml) + Solanka 0,9% IV (1000ml) + + + Saline IV, for restoring a patients blood + Пакет физраствора для возмещения объема потерянной крови + Solución Salina Intravenosa, para restaurar el volumen sanguíneo + Solution Saline 0.9% IV, pour retablir temporairement la tention arteriel + Solanka 0,9%, podawana dożylnie (IV), używana w celu uzupełnienia krwi u pacjenta + + + A medical volume-replenishing agent introduced into the blood system through an IV infusion. - Пакет физиологического раствора для возмещения объема потерянной крови путем внутривенного + Пакет физиологического раствора для возмещения объема потерянной крови путем внутривенного вливания. - Suero fisiológico inoculado al torrente sanguíneo de forma intravenosa. - Un remplacment temporaire pour rétablir la tention artériel lors de perte sanguine, étant ajouter + Suero fisiológico inoculado al torrente sanguíneo de forma intravenosa. + Un remplacment temporaire pour rétablir la tention artériel lors de perte sanguine, étant ajouter par intraveineuse - Używany w medycynie w formie płynu infuzyjnego jako środek nawadniający i uzupełniający niedobór + Używany w medycynie w formie płynu infuzyjnego jako środek nawadniający i uzupełniający niedobór elektrolitów, podawany dożylnie (IV). - - - Saline IV (500ml) - Физраствор для в/в вливания (500 мл) - Solución Salina Intravenosa (500ml) - Solution Saline 0.9% IV (500ml) - Solanka 0,9% IV (500ml) - - - Saline IV (250ml) - Физраствор для в/в вливания (250 мл) - Solución Salina Intravenosa (250ml) - Solution Saline 0.9% IV (250ml) - Solanka 0,9% IV (250ml) - - - Basic Field Dressing (QuikClot) - Первичный перевязочный пакет (QuikClot) - Vendaje Básico (Coagulante) - Bandage Regulier (Coagulant) - Opatrunek QuikClot - - - QuikClot bandage - Гемостатический пакет QuikClot - Venda Coagulante - Bandage coagulant - Podstawowy opatrunek stosowany na rany - - - - - Un bandage servant a coaguler les seignements mineur à moyen. - Proszkowy opatrunek adsorbcyjny przeznaczony do tamowania zagrażających życiu krwawień średniej i + + + Saline IV (500ml) + Физраствор для в/в вливания (500 мл) + Solución Salina Intravenosa (500ml) + Solution Saline 0.9% IV (500ml) + Solanka 0,9% IV (500ml) + + + Saline IV (250ml) + Физраствор для в/в вливания (250 мл) + Solución Salina Intravenosa (250ml) + Solution Saline 0.9% IV (250ml) + Solanka 0,9% IV (250ml) + + + Basic Field Dressing (QuikClot) + Первичный перевязочный пакет (QuikClot) + Vendaje Básico (Coagulante) + Bandage Regulier (Coagulant) + Opatrunek QuikClot + + + QuikClot bandage + Гемостатический пакет QuikClot + Venda Coagulante + Bandage coagulant + Podstawowy opatrunek stosowany na rany + + + + + Un bandage servant a coaguler les seignements mineur à moyen. + Proszkowy opatrunek adsorbcyjny przeznaczony do tamowania zagrażających życiu krwawień średniej i dużej intensywności. - Vendaje Hemostático con coagulante que detiene el sangrado. - - - Personal Aid Kit - Аптечка - Kit de Soporte Vital Avanzado - Équipement de support Vitale - Apteczka osobista - - - Includes various treatment kit needed for stitching or advanced treatment - Содержит различные материалы и инструменты для зашивания ран и оказания специальной медпомощи. + Vendaje Hemostático con coagulante que detiene el sangrado. + + + Personal Aid Kit + Аптечка + Kit de Soporte Vital Avanzado + Équipement de support Vitale + Apteczka osobista + + + Includes various treatment kit needed for stitching or advanced treatment + Содержит различные материалы и инструменты для зашивания ран и оказания специальной медпомощи. - Incluye material médico para tratamientos avanzados - Inclue du matériel medical pour les traitement avancé, tel les point de suture. - Zestaw środków medycznych do opatrywania ran i dodatkowego leczenia po-urazowego - - - - - - - - - Surgical Kit - Хирургический набор - Kit Quirúrgico - - - Surgical Kit for in field advanced medical treatment - Набор для хирургической помощи в полевых условиях - Kit Quirúrgico para el tratamiento avanzado en el campo de batalla - - - Surgical Kit for in field advanced medical treatment - Набор для хирургической помощи в полевых условиях - Kit Quirúrgico para el tratamiento avanzado en el campo de batalla - - - Bodybag - Мешок для трупов - Bolsa para cadáveres - - - A bodybag for dead bodies - Мешок для упаковки трупов - Bolsa para cadáveres - - - A bodybag for dead bodies - Мешок для упаковки трупов - Bolsa para cadáveres - - - Blood Pressure - Артериальное давление - Presión Arterial - - - Checking Blood Pressure.. - Проверка артериального давления... - Comprobando Presión Arterial... - - - You checked %1 - Вы осмотрели раненого %1 - Examinando a %1 - - - You find a blood pressure of %2/%3 - Артериальное давление %2/%3 - La Presión Arterial es %2/%3 - - - You find a low blood pressure - Давление низкое - La Presión Arterial es baja - - - You find a normal blood pressure - Давление нормальное - La Presión Arterial es normal - - - You find a high blood pressure - Давление высокое - La Presión Arterial es alta - - - You find no blood pressure - Давления нет - No hay Presión Arterial - - - You fail to find a blood pressure - Артериальное давление не определяется - No puedes encontrar Presión Arterial - - - Pulse - Пульс - Pulso - - - Checking Heart Rate.. - Проверка пульса... - Comprobando Pulso... - - - You checked %1 - Вы осмотрели раненого %1 - Examinando a %1 - - - You find a Heart Rate of %2 - Пульс %2 уд./мин. - El Pulso es %2 - - - You find a weak Heart Rate - Пульс слабый - El Pulso es débil - - - You find a strong Heart Rate - Пульс учащенный - El Pulso está acelerado - - - You find a normal Heart Rate - Пульс в норме - El Pulso es bueno - - - You find no Heart Rate - Пульс не прощупывается - No tiene Pulso - - - Response - Реакция - Reacciona - - - You check response of patient - Вы проверяете реакцию раненого - Compruebas si el paciente reacciona - - - %1 is responsive - %1 реагирует на раздражители - %1 ha reaccionado - - - %1 is not responsive - %1 не реагирует - %1 no reacciona - - - You checked %1 - Вы осмотрели раненого %1 - Examinas a %1 - - - Bandaged - Повязка наложена - Vendado - - - You bandage %1 (%2) - Вы перевязали раненого %1 (%2) - Aplicas vendaje a %1 en %2 - - - %1 is bandaging you - %1 перевязывает вас - %1 te está vendando - - - You start stitching injures from %1 (%2) - Вы зашиваете ранения от %1 (%2) - Estás suturando heridas de %1 en %2 - - - Stitching - Наложение швов - Suturando - - - You treat the airway of %1 - Вы интубируете раненого %1 - Estás intubando a %1 - - - Airway - Дыхательные пути - Vías Aéreas - - - %1 is treating your airway - %1 проводит вам интубацию - %1 te está intubando - - - Drag - Ziehen - Arrastrar - Ciągnij - Táhnout - Тащить - Tracter - Húzás - Arrastar - Trascina - - - Carry - Tragen - Cargar - Nieś - Nést - Нести - Porter - Cipelés - Carregar - Trasporta - - - Release - Loslassen - Soltar - Połóż - Položit - Отпустить - Déposer - Elenged - Largar - Lascia - - - Load Patient Into - Patient Einladen - Cargar el paciente en - Załaduj pacjenta - Naložit pacianta do - Погрузить пациента в - Embarquer le Patient - Sebesült berakása - Carregar Paciente Em - Carica paziente nel - - - Unload Patient - Patient Ausladen - Descargar el paciente - Wyładuj pacjenta - Vyložit pacienta - Выгрузить пациента - Débarquer le Patient - Sebesült kihúzása - Descarregar Paciente - Scarica il paziente - - - Unload patient - Выгрузить пациента - - - Load patient - Погрузить пациента - - - Place body in bodybag - Поместить тело в мешок - - - Placing body in bodybag - Помещение тела в мешок ... - - - %1 has bandaged patient - %1 перевязал пациента - - - %1 used %2 - %1 применил %2 - - - %1 has given an IV - %1 провел переливание - - - %1 applied a tourniquet - %1 наложил жгут - - - \ No newline at end of file + Incluye material médico para tratamientos avanzados + Inclue du matériel medical pour les traitement avancé, tel les point de suture. + Zestaw środków medycznych do opatrywania ran i dodatkowego leczenia po-urazowego + + + + + + + + + Surgical Kit + Хирургический набор + Kit Quirúrgico + + + Surgical Kit for in field advanced medical treatment + Набор для хирургической помощи в полевых условиях + Kit Quirúrgico para el tratamiento avanzado en el campo de batalla + + + Surgical Kit for in field advanced medical treatment + Набор для хирургической помощи в полевых условиях + Kit Quirúrgico para el tratamiento avanzado en el campo de batalla + + + Bodybag + Мешок для трупов + Bolsa para cadáveres + + + A bodybag for dead bodies + Мешок для упаковки трупов + Bolsa para cadáveres + + + A bodybag for dead bodies + Мешок для упаковки трупов + Bolsa para cadáveres + + + + Blood Pressure + Артериальное давление + Presión Arterial + + + Checking Blood Pressure.. + Проверка артериального давления... + Comprobando Presión Arterial... + + + You checked %1 + Вы осмотрели раненого %1 + Examinando a %1 + + + You find a blood pressure of %2/%3 + Артериальное давление %2/%3 + La Presión Arterial es %2/%3 + + + You find a low blood pressure + Давление низкое + La Presión Arterial es baja + + + You find a normal blood pressure + Давление нормальное + La Presión Arterial es normal + + + You find a high blood pressure + Давление высокое + La Presión Arterial es alta + + + You find no blood pressure + Давления нет + No hay Presión Arterial + + + You fail to find a blood pressure + Артериальное давление не определяется + No puedes encontrar Presión Arterial + + + Pulse + Пульс + Pulso + + + Checking Heart Rate.. + Проверка пульса... + Comprobando Pulso... + + + You checked %1 + Вы осмотрели раненого %1 + Examinando a %1 + + + You find a Heart Rate of %2 + Пульс %2 уд./мин. + El Pulso es %2 + + + You find a weak Heart Rate + Пульс слабый + El Pulso es débil + + + You find a strong Heart Rate + Пульс учащенный + El Pulso está acelerado + + + You find a normal Heart Rate + Пульс в норме + El Pulso es bueno + + + You find no Heart Rate + Пульс не прощупывается + No tiene Pulso + + + Response + Реакция + Reacciona + + + You check response of patient + Вы проверяете реакцию раненого + Compruebas si el paciente reacciona + + + %1 is responsive + %1 реагирует на раздражители + %1 ha reaccionado + + + %1 is not responsive + %1 не реагирует + %1 no reacciona + + + You checked %1 + Вы осмотрели раненого %1 + Examinas a %1 + + + Bandaged + Повязка наложена + Vendado + + + You bandage %1 (%2) + Вы перевязали раненого %1 (%2) + Aplicas vendaje a %1 en %2 + + + %1 is bandaging you + %1 перевязывает вас + %1 te está vendando + + + You start stitching injures from %1 (%2) + Вы зашиваете ранения от %1 (%2) + Estás suturando heridas de %1 en %2 + + + Stitching + Наложение швов + Suturando + + + You treat the airway of %1 + Вы интубируете раненого %1 + Estás intubando a %1 + + + Airway + Дыхательные пути + Vías Aéreas + + + %1 is treating your airway + %1 проводит вам интубацию + %1 te está intubando + + + Drag + Ziehen + Arrastrar + Ciągnij + Táhnout + Тащить + Tracter + Húzás + Arrastar + Trascina + + + Carry + Tragen + Cargar + Nieś + Nést + Нести + Porter + Cipelés + Carregar + Trasporta + + + Release + Loslassen + Soltar + Połóż + Položit + Отпустить + Déposer + Elenged + Largar + Lascia + + + Load Patient Into + Patient Einladen + Cargar el paciente en + Załaduj pacjenta + Naložit pacianta do + Погрузить пациента в + Embarquer le Patient + Sebesült berakása + Carregar Paciente Em + Carica paziente nel + + + Unload Patient + Patient Ausladen + Descargar el paciente + Wyładuj pacjenta + Vyložit pacienta + Выгрузить пациента + Débarquer le Patient + Sebesült kihúzása + Descarregar Paciente + Scarica il paziente + + + Unload patient + + + Load patient + + + Place body in bodybag + + + Placing body in bodybag + + + + %1 has bandaged patient + + + %1 used %2 + + + %1 has given an IV + + + %1 applied a tourniquet + + + + diff --git a/addons/microdagr/stringtable.xml b/addons/microdagr/stringtable.xml index 823a7a7f8d..772a7a172f 100644 --- a/addons/microdagr/stringtable.xml +++ b/addons/microdagr/stringtable.xml @@ -1,30 +1,24 @@  - + MicroDAGR GPS - MicroDAGR GPS MicroDAGR advanced GPS receiver - Многофункциональный GPS-приёмник. Angular Unit: - Угловые единицы: Mils - Тысячные Show Waypoints On Map: - Показывать маршрутные точки на карте: Degrees - Градусы On @@ -50,55 +44,43 @@ Enter Grid Cords: - Введите координаты: Name of [%1] - Название [%1] MGRS-New - MGRS-Новая WGD - WGD Range: Reichweite: - Дистанция: Compass Direction - Азимут Mark - Отметка Waypoints Wegpunkte - Машрутные точки Connect To - Соединиться с Settings Einstellungen Configuración - Настройки SetWP - Установить МТ Add - Добавить Delete @@ -113,19 +95,15 @@ Toggle MicroDAGR Display Mode - Сменить режим показа MicroDAGR Show MicoDAGR - Показать MicroDAGR Configure MicroDAGR - Настроить MicroDAGR Close MicroDAGR - Закрыть MicroDAGR \ No newline at end of file diff --git a/addons/nametags/stringtable.xml b/addons/nametags/stringtable.xml index a6f16e3fad..622df44aca 100644 --- a/addons/nametags/stringtable.xml +++ b/addons/nametags/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -68,17 +68,14 @@ Show name tags for AI units - Показывать именые метки ИИ Show SoundWaves (requires player names) Zeigen Schallwelle (benötigt spielernamen) Mostrar onda sonora (requiere Mostrar nombres de jugadores) - Показывать звуковые волны (требует имен игроков) Default Nametag Color (Non Group Members) - Цвет меток игроков (не членов групп) \ No newline at end of file diff --git a/addons/optionsmenu/stringtable.xml b/addons/optionsmenu/stringtable.xml index 020a848f79..76407da435 100644 --- a/addons/optionsmenu/stringtable.xml +++ b/addons/optionsmenu/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -16,17 +16,15 @@ Fix Animation - Фикс анимации Reset All Rücksetzen - Полный сброс Colors Farben - Цвета + цвета Colors @@ -43,7 +41,6 @@ Values - Значения Yes @@ -73,48 +70,38 @@ Setting: Nastavení: Einstellung: - Установки: + Yстановки: Ajuste: Export - Экспорт Open Export Menu - Открыть меню экспорта String input. - Строчный ввод. Array. Seperate elements by using ,. - Массив. Разделяйте элемены, используя запятую. Number - Число Uknown input type - Неизвестный тип ввода Save input - Сохранить ввод Include Client Settings - Включить настройки клиента Exclude Client Settings - Исключить настройки клиента Settings exported to clipboard - Настройки экспортированы в буфер обмена \ No newline at end of file diff --git a/addons/overheating/stringtable.xml b/addons/overheating/stringtable.xml index 5356e9ffc6..5d2c9595df 100644 --- a/addons/overheating/stringtable.xml +++ b/addons/overheating/stringtable.xml @@ -1,14 +1,12 @@  - + Display text on jam - Показывать текст, когда клинит оружие Display a notification whenever your weapon gets jammed - Демонстровать уведомление, каждый раз, когда клинит Ваше оружие. Spare barrel diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index 29fb5a736b..9ccd7752d2 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -1,1302 +1,1310 @@  - + - - - XM312 - XM312 - XM312 - XM312 - XM312 - XM312 - XM312 - XM312 - XM312 - XM312A - - - XM312A - XM312A - XM312 - XM312A - XM312A - XM312A - XM312A - XM312A - XM312A - XM312A - - - XM312 (High) - XM312 (Hoch) - XM312 (Alto) - XM312 (Haut) - XM312 (Vysoký) - XM312 (Wysoki) - XM312 (Высокий) - XM312 (Alta) - XM312 (Magasított) - XM312 (Alta) - - - XM307 - XM307 - XM307 - XM307 - XM307 - XM307 - XM307 - XM307 - XM307 - XM307 - - - XM307A - XM307A - XM307A - XM307A - XM307A - XM307A - XM307A - XM307A - XM307A - XM307A - - - XM307 (High) - XM307 (Hoch) - XM307 (Alto) - XM307 (Haut) - XM307 (Vysoký) - XM307 (Wysoki) - XM307 (Высокий) - XM307 (Alta) - XM307 (Magasított) - XM307 (Alta) - - - Mini-Spike Launcher (AT) - Mini-Spike Lenkflugkörper (AT) - Lanzador Mini-Spike (AT) - Poste de tir Mini-Spike (AC) - Mini-Spike Odpalovač (AT) - Wyrzutnia Mini-Spike (AT) - Mini-Spike Пусковое устройство (ПТРК) - Lança-mísseis Mini-Spike (AC) - Mini-Spike rakétarendszer (páncéltörő) - Lanciatore Mini-Spike (AC) - - - Mini-Spike Launcher (AA) - Mini-Spike Lenkflugkörper (AA) - Lanzador Mini-Spike (AA) - Poste de tir Mini-Spike (AA) - Mini-Spike Odpalovač (AA) - Wyrzutnia Mini-Spike (AA) - Mini-Spike Пусковое устройство (ВВ) - Lança-mísseis Mini-Spike (AA) - Mini-Spike rakétarendszer (légvédelmi) - Lanciatore Mini-Spike (AA) - - - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - - - YABHON-R3 (CAS) - YABHON-R3 (Luftnahunterstützung) - YABHON-R3 (CAS) - YABHON-R3 (CAS) - YABHON-R3 (CAS) - YABHON-R3 (штурмовик) - - - M-ATV - M-ATV - M-ATV - M-ATV - M-ATV - M-ATV - M-ATV - M-ATV - M-ATV - M-ATV - - - M-ATV (HMG) - M-ATV (SMG) - M-ATV (HMG) - M-ATV (CKM) - M-ATV (TK) - M-ATV (HMG) - M-ATV (Пулемет) - M-ATV (HMG) - M-ATV (HMG) - M-ATV (HMG) - - - M-ATV (GMG) - M-ATV (GMW) - M-ATV (GMG) - M-ATV (GMG) - M-ATV (Granátomet) - M-ATV (GMG) - M-ATV (Гранатомет) - M-ATV (GMG) - M-ATV (GMG) - M-ATV (GMG) - - - Merkava Mk IV M - Merkava Mk IV M - Merkava Mk IV M - Merkawa Mk IV M - Merkava Mk IV M - Merkava Mk IV M - Меркава Mk IV M - Merkava Mk IV M - Merkava Mk IV M - Merkava Mk IV M - - - Merkava Mk IV LIC - Merkava Mk IV LIC - Merkava Mk IV LIC - Merkawa Mk IV LIC - Merkava Mk IV LIC - Merkava Mk IV LIC - Меркава Mk IV LIC - Merkava Mk IV LIC - Merkava Mk IV LIC - Merkava Mk IV LIC - - - Sholef - Sholef - Sholef - Sholef - Sholef - Sholef - Шолеф - Sholef - Sholef - Sholef - - - Seara - Seara - Seara - Seara - Seara - Seara - Seara - Seara - Seara - Seara - - - Namer - Namer - Namer - Namer - Namer - Namer - Намер - Namer - Namer - Namer - - - Bardelas - Bardelas - Bardelas - Bardelas - Bardelas - Bardelas - Bardelas - Bardelas - Bardelas - Bardelas - - - Patria AMV - Patria AMV - Patria AMV - Patria AMV - Patria AMV - Patria AMV - Patria AMV - Patria AMV - Patria AMV - Patria AMV - - - Nemmera - Nemmera - Nemmera - Nemmera - Nemmera - Nemmera - Nemmera - Nemmera - Nemmera - Nemmera - - - HEMTT Transport - HEMTT Transport - HEMTT de transporte - HEMTT Transportowy - HEMTT Valník - HEMTT Transport - HEMTT Транспортный - HEMTT Transporte - HEMTT szállítójármű - HEMTT da trasporto - - - HEMTT Transport (covered) - HEMTT Transport (bedeckt) - HEMTT de transporte (cubierto) - HEMTT Transportowy (zakryty) - HEMTT Valník (krytý) - HEMTT Transport (bâché) - HEMTT Транспортный (крытый) - HEMTT Transporte (coberto) - HEMTT szállítójármű (ponyvás) - HEMTT da trasporto (coperto) - - - HEMTT - HEMTT - HEMTT - HEMTT - HEMTT - HEMTT Tracteur - HEMTT - HEMTT - HEMTT - HEMTT - - - HEMTT Container - HEMTT Container - HEMTT de contenedor - HEMTT Kontener - HEMTT Skříňový - HEMTT Conteneur - HEMTT Контейнер - HEMTT Contêiner - HEMTT Konténer - HEMTT portacontainer - - - HEMTT Medical - HEMTT Sanitäter - HEMTT médico - HEMTT Medyczny - HEMTT Zdravotnický - HEMTT Sanitaire - HEMTT Медицинский - HEMTT Médico - HEMTT (egészségügyi) - HEMTT Medico - - - HEMTT Ammo - HEMTT Munition - HEMTT de munición - HEMTT Amunicyjny - HEMTT Muniční - HEMTT Munitions - HEMTT Боеприпасы - HEMTT Munições - HEMTT (lőszerszállító) - HEMTT di rifornimento munizioni - - - HEMTT Fuel - HEMTT Treibstoff - HEMTT de combustible - HEMTT Cysterna - HEMTT Cisterna - HEMTT Citerne - HEMTT Заправщик - HEMTT Combustível - HEMTT (üzemanyag-szállító) - HEMTT di rifornimento carburante - - - HEMTT Repair - HEMTT Instandsetzung - HEMTT de reparación - HEMTT Naprawczy - HEMTT Opravárenský - HEMTT Réparation - HEMTT Ремонтный - HEMTT Reparador - HEMTT (szerelő-jármű) - HEMTT Riparatore - - - Fennek - Fennek - Fennek - Fennek - Fennek - Fennek - Феннек - Fennek - Fennek - Fennek - - - Fennek (HMG) - Fennek (SMG) - Fennek (HMG) - Fennek (CKM) - Fennek (TK) - Fennek (HMG) - Феннек (Пулемет) - Fennek (HMG) - Fennek (HMG) - Fennek (HMG) - - - Fennek (GMG) - Fennek (GMW) - Fennek (GMG) - Fennek (GMG) - Fennek (granátomet) - Fennek (GMG) - Феннек (Гранатомет) - Fennek (GMG) - Fennek (GMG) - Fennek (GMG) - - - Leopard 2SG - Leopard 2SG - Leopard 2SG - Leopard 2SG - Leopard 2SG - Leopard 2SG - Леопард 2SG - Leopard 2SG - Leopard 2SG - Leopard 2SG - - - FV510 Warrior - FV510 Warrior - FV510 Warrior - FV510 Warrior - FV510 Warrior - FV510 Warrior - FV510 Уорриор - FV510 Warrior - FV510 Warrior - FV510 Warrior - - - Pandur II - Pandur II - Pandur II - Pandur II - Pandur II - Pandur II - Pandur II - Pandur II - Pandur II - Pandur II - - - KamAZ Transport - KamAZ Transport - KamAZ de transporte - KamAZ transportowy - KAMAZ Valník - KamAZ Transport - КамАЗ Траспортный - KamAZ Transporte - KamAZ szállítójármű - KamAZ da trasporto - - - KamAZ Transport (covered) - KamAZ Transport (bedeckt) - KamAZ de transporte (cubierto) - KamAZ Transportowy (zakryty) - KAMAZ Valník (krytý) - KamAZ Transport (bâché) - КамАЗ Траспортный (Крытый) - KamAZ Transporte (coberto) - KamAZ szállítójármű (ponyvás) - KamAZ da trasporto (coperto) - - - KamAZ Ammo - KamAZ Munition - KamAZ de munición - KamAZ Amunicyjny - KAMAZ Muniční - KamAZ Munitions - КамАЗ Боеприпасы - KamAZ Munições - KamAZ (lőszerszállító) - KamAZ di rifornimento munizioni - - - KamAZ Fuel - KamAZ Treibstoff - KamAZ de combustible - KamAZ cysterna - KAMAZ Cisterna - KamAZ Citerne - КамАЗ Заправщик - KamAZ Combustível - KamAZ (üzemanyag-szállító) - KamAZ di rifornimento carburante - - - KamAZ Repair - KamAZ Instandsetzung - KamAZ de reparación - KamAZ Naprawczy - KAMAZ Opravárenský - KamAZ Réparation - КамАЗ Ремонтный - KamAZ Reparador - KamAZ (szerelő-jármű) - KamAZ riparatore - - - KamAZ Medical - KamAZ Sanitäter - KamAZ médico - KamAZ Medyczny - KAMAZ Zdravotnický - KamAZ Sanitaire - КамАЗ Медицинский - KamAZ Médico - KamAZ (egészségügyi) - KamAZ Medico - - - Punisher - Punisher - Punisher - Punisher - Punisher - Punisher - Kаратель - Punisher - Punisher - Punisher - - - Punisher (HMG) - Punisher (SMG) - Punisher (HMG) - Punisher (CKM) - Punisher (TK) - Punisher (HMG) - Kаратель (Пулемет) - Punisher (HMG) - Punisher (HMG) - Punisher (HMG) - - - Punisher (GMG) - Punisher (GMW) - Punisher (GMG) - Punisher (CKM) - Punisher (granátomet) - Punisher (GMG) - Kаратель (Гранатомет) - Punisher (GMG) - Punisher (GMG) - Punisher (GMG) - - - T100 Black Eagle - T100 Black Eagle - T100 Black Eagle - T100 Black Eagle - T100 Black Eagle - T100 Black Eagle - T100 Черный Орел - T100 Black Eagle - T100 Black Eagle - T100 Black Eagle - - - 2S9 Sochor - 2S9 Sochor - 2S9 Sochor - 259 Sochor - 2S9 Sochor - 2S9 Sochor - 2S9 Сокор - 2S9 Sochor - 2S9 Sochor - 2S9 Sochor - - - BM-2T Stalker - BM-2T Stalker - BM-2T Stalker - BM-2T Stalker - BM-2T Stalker - BM-2T Stalker - БМ-2Т Сталкер - BM-2T Stalker - BM-2T Stalker - BM-2T Stalker - - - ZSU-35 Tigris - ZSU-35 Tigris - ZSU-35 Tigris - ZSU-35 Tigris - ZSU-35 Tigris - ZSU-35 Tigris - ЗСУ-35 Tigris - ZSU-35 Tigris - ZSU-35 Tigris - ZSU-35 Tigris - - - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - - - Typhoon Transport - Typhoon Transport - Typhoon de transporte - Typhoon Transportowy - Typhoon Valník - Typhoon Transport - Тайфун Транспортный - Typhoon Transporte - Typhoon szállítójármű - Typhoon da trasporto - - - Typhoon Transport (covered) - Typhoon Transport (bedeckt) - Typhoon de transporte (cubierto) - Typhoon Transportowy (przykryty) - Typhoon Valník (krytý) - Typhoon Transport (bâché) - Тайфун Транспортный (kрытый) - Typhoon Transporte (coberto) - Typhoon szállítójármű (ponyvás) - Typhoon da trasporto (coperto) - - - Typhoon Device - Typhoon Gerät - Typhoon de dispositivo - Typhoon Urządzenie - Typhoon Zařízení - Typhoon Dispositif - Тайфун Устройство - Typhoon Dispositivo - Typhoon (szerkezet) - Typhoon per dispositivo - - - Typhoon Ammo - Typhoon Munition - Typhoon de munición - Typhoon Amunicyjny - Typhoon Muniční - Typhoon Munitions - Тайфун Боеприпасы - Typhoon Munições - Typhoon (lőszerszállító) - Typhoon di rifornimento munizioni - - - Typhoon Fuel - Typhoon Treibstoff - Typhoon de combustible - Typhoon Cysterna - Typhoon Cisterna - Typhoon Citerne - Тайфун Заправщик - Typhoon Combustível - Typhoon (üzemanyag-szállító) - Typhoon di rifornimento carburante - - - Typhoon Repair - Typhoon Instandsetzung - Typhoon de reparación - Typhoon Naprawczy - Typhoon Opravárenský - Typhoon Réparation - Тайфун Ремонтный - Typhoon Reparador - Typhoon (szerelő-jármű) - Typhoon riparatore - - - Typhoon Medical - Typhoon Sanitäter - Typhoon médico - Typhoon Medyczny - Typhoon Zdravotnický - Typhoon Sanitaire - Тайфун Медицинский - Typhoon Médico - Typhoon (egészségügyi) - Typhoon medico - - - RAH-66 Comanche - RAH-66 Comanche - RAH-66 Comanche - RAH-66 Comanche - RAH-66 Comanche - RAH-66 Commanche - RAH-66 Команч - RAH-66 Comanche - RAH-66 Comanche - RAH-66 Comanche - - - MH-6 Little Bird - MH-6 Little Bird - MH-6 Litte Bird - MH-6 Little Bird - MH-6 Little Bird - MH-6 Little Bird - MH-6 Little Bird - MH-6 Little Bird - MH-6 Little Bird - MH-6 Little Bird - - - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - - - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - - - CH-47I Chinook (unarmed) - CH-47I Chinook (unbewaffnet) - CH-47I Chinnok (Desarmado) - CH-47I Chinook (nieuzbrojony) - CH-47I Chinook (невооруженный) - CH-47I Chinook (Neozbrojený) - - - A-10D Thunderbolt II - A-10D Thunderbolt II - A-10D Thunderbolt II - A-10D Thunderbolt II - A-10D Thunderbolt II - A-10D Thunderbolt II - A-10D Тандерболт II - A-10D Thunderbolt II - A-10D Thunderbolt II - A-10D Thunderbolt II - - - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - - - AW159 Wildcat (unarmed) - AW159 Wildcat (unbewaffnet) - AW159 Wildcat (desarmado) - AW159 Wildcat (nieuzbrojony) - AW159 Wildcat (neozbrojený) - AW159 Wildcat (non-armé) - AW159 Wildcat (невооруженный) - AW159 Wildcat (desarmado) - AW159 Wildcat (fegyvertelen) - AW159 Wildcat (disarmato) - - - AW101 Merlin - AW101 Merlin - AW101 Merlin - AW101 Merlin - AW101 Merlin - AW101 Merlin - AW101 Мерлин - AW101 Merlin - AW101 Merlin - AW101 Merlin - - - L-159 ALCA (CAS) - L-159 ALCA (CAS) - L-159 ALCA (CAS) - L-159 ALCA (CAS) - L-159 ALCA (CAS) - L-159 ALCA (CAS) - L-159 Альбатрос (CAS) - L-159 ALCA (CAS) - L-159 ALCA (CAS) - L-159 ALCA (CAS) - - - L-159 ALCA (AA) - L-159 ALCA (AA) - L-159 ALCA (AA) - L-159 ALCA (AA) - L-159 ALCA (AA) - L-159 ALCA (AA) - L-159 Альбатрос (AA) - L-159 ALCA (ВВ) - L-159 ALCA (AA) - L-159 ALCA (AA) - - - Ka-60 Kasatka - Ka-60 Kasatka - Ka-60 Kasatka - Ka-60 Kasatka - Ka-60 Kasatka - Ka-60 Kasatka - Ka-60 Касатка - Ka-60 Kasatka - Ka-60 Kasatka - Ka-60 Kasatka - - - Ka-60 Kasatka (unarmed) - Ka-60 Kasatka (unbewaffnet) - Ka-60 Kasatka (desarmado) - Ka-60 Kasatka (nieuzbrojony) - Ka-60 Kasatka (neozbrojená) - Ka-60 Kasatka (non-armé) - Ka-60 Касатка (невооруженный) - Ka-60 Kasatka (desarmado) - Ka-60 Kasatka (fegyvertelen) - Ka-60 Kasatka (disarmato) - - - Yak-130 - Yak-130 - Yak-130 - Jak-130 - Jak-130 - Yak-130 - Як-130 - Yak-130 - Jak-130 - Yak-130 - - - MD 500 - MD 500 - MD 500 - MD 500 - MD 500 - MD 500 - MD 500 - MD 500 - MD 500 - MD 500 - - - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - - - M18A1 Claymore - M18A1 Claymore - M18A1 Claymore - Mina kierunkowa M18A1 Claymore - M18A1 Mina Claymore - M18A1 Claymore Mine antipersonnel à effet dirigé - M18A1 Клеймор - M18A1 Claymore - M18A1 Claymore akna - M18A1 Claymore Mina antiuomo - - - M183 Demolition Charge Assembly - M183 Geballte Sprengladung - Conjunto de carga de demolición M183 - Ładunek burzący M183 - M183 Demoliční nálož - M183 Charge de Démolition - M183 Комплектный подрывной заряд - M183 Sacola de Demolição - M183 romboló töltet - M183 Demolition Charge Assembly - - - M112 Demolition Block - M112 Sprengladung - Bloque de demolición M112 - Ładunek burzący M112 - M112 Výbušná nálož - Pétard M112 - M112 подрывной заряд - M112 Carga de Demolição - M112 romboló töltet - M112 Demolition Block - - - M67 Fragmentation Grenade - M67 Splittergranate - Granada de fragmentación M67 - Granat obronny M67 - M67 Granát - M67 Grenade à fragmentation - M67 ручная осколочная граната - M67 Granada de fragmentação - M67 repeszgránát - M67 Granata a frammentazione - - - M83 Smoke Grenade (White) - M83 Rauchgranate (Weiss) - Granada de humo M83 (Blanco) - Granat dymny M83 (Biały) - M83 Kouřový Granát (Bílý) - M83 Grenade fumigène (Blanche) - M83 дымовая граната (Белый) - M83 Granada de fumaça (Branca) - M83 füstgránát (Fehér) - M83 Granata fumogena (Bianco) - - - M18 Smoke Grenade (Blue) - M18 Rauchgranate (Blau) - Granada de humo M18 (Azul) - Granat dymny M18 (Niebieski) - M18 Kouřový Granát (Modrý) - M18 Grenade fumigène (Bleue) - M18 дымовая граната (Синий) - M18 Granada de fumaça (Azul) - M18 füstgránát (Kék) - M18 Granata fumogena (Blu) - - - M18 Smoke Grenade (Green) - M18 Rauchgranate (Grün) - Granada de humo M18 (Verde) - Granat dymny M18 (Zielony) - M18 Kouřový Granát (Zelený) - M18 Grenade fumigène (Verte) - M18 дымовая граната (Зелёный) - M18 Granada de fumaça (Verde) - M18 füstgránát (Zöld) - M18 Granata fumogena (Verde) - - - M18 Smoke Grenade (Orange) - M18 Rauchgranate (Orange) - Granada de humo M18 (Naranja) - Granat dymny M18 (Pomarańczowy) - M18 Kouřový Granát (Oranžový) - M18 Grenade fumigène (Orange) - M18 дымовая граната (Оранжевый) - M18 Granada de fumaça (Laranja) - M18 füstgránát (Narancssárga) - M18 Granata fumogena (Arancione) - - - M18 Smoke Grenade (Purple) - M18 Rauchgranate (Violett) - Granada de humo M18 (Púrpura) - Granat dymny M18 (Fioletowy) - M18 Kouřový Granát (Fialový) - M18 Grenade fumigène (Pourpre) - M18 дымовая граната (Пурпурный) - M18 Granada de fumaça (Roxa) - M18 füstgránát (Lila) - M18 Granata fumogena (Viola) - - - M18 Smoke Grenade (Red) - M18 Rauchgranate (Rot) - Granada de humo M18 (Rojo) - Granat dymny M18 (Czerwony) - M18 Kouřový Granát (Červený) - M18 Grenade fumigène (Rouge) - M18 дымовая граната (Красный) - M18 Granada de fumaça (Vermelha) - M18 füstgránát (Piros) - M18 Granata fumogena (Rosso) - - - M18 Smoke Grenade (Yellow) - M18 Rauchgranate (Gelb) - Granada de humo M18 (Amarillo) - Granat dymny M18 (Żółty) - M18 Kouřový Granát (Žlutý) - M18 Grenade fumigène (Jaune) - M183 дымовая граната (Жёлтые) - M18 Granada de fumaça (Amarela) - M18 füstgránát (Sárga) - M18 Granata fumogena (Giallo) - - - M15 Anti-Tank Mine - M15 Panzerabwehrmine - Mina antitanque M15 - Mina przeciwpancerna M15 - M15 Protitanková Mina - M15 Mine antichar - M15 противотанковая мина - M15 Mina anticarro - M15 harckocsiakna - M15 Mine anticarro - - - VS-50 Anti-Personnel Mine - VS-50 Antipersonenmine - Mina antipersona VS-50 - Mina przeciwpiechotna VS-50 - VS-50 Protipěchotní Mina - VS-50 Mine antipersonnel à pression - VS-50 Противопехотная мина - VS-50 Mina antipessoal - VS-50 gyalogsági taposóakna - VS-50 Mine antiuomo - - - M26 Anti-Personnel Bounding Mine - M26 Antipersonensprungmine - Mina antipersona M26 - Mina przeciwpiechotna M26 - M26 Šrapnelová Mina - M26 Mine antipersonnel bondissante - M26 Противопехотная мина - M26 Mina saltadora antipessoal - M26 gyalogsági ugróakna - M26 Mine saltanti antiuomo - - - PMR-3 Anti-Personnel Tripwire Mine - PMR-3 Antipersonenstolperdrahtmine - Mina antipersona de alambre PMR-3 - Mina przeciwpiechotna PMR-3 - PMR-3 Nástražná Mina - PMR-3 Mine antipersonnel à traction - PMR-3 Противопехотная мина - PMR-3 Mina antipessoal (armadilha) - PMR-3 botlódrótos gyalogsági akna - PMR-3 Mine antiuomo - - - P99 - P99 - - - MP-443 Grach - MP-443 Grach - - - ACP-C2 - ACP-C2 - - - FNX-45 Tactical - FNX-45 Tactical - - - Chiappa Rhino 60DS - Chiappa Rhino 60DS - - - Taurus Judge - Taurus Judge - - - NLAW - NLAW - - - RPG-32 - RPG-32 - - - Mini-Spike (AA) - Mini-Spike (AA) - - - Mini-Spike (AT) - Mini-Spike (AT) - - - MX - MX - - - MX (Black) - MX (Black) - - - MXC - MXC - - - MXC (Black) - MXC (Black) - - - MX 3GL - MX 3GL - - - MX 3GL (Black) - MX 3GL (Black) - - - MX LSW - MX LSW - - - MX LSW (Black) - MX LSW (Black) - - - MXM - MXM - - - MXM (Black) - MXM (Black) - - - KT2002 Katiba - KT2002 Katiba - - - KT2002C Katiba - KT2002C Katiba - - - KT2002 Katiba KGL - KT2002 Katiba KGL - - - F2000 (Camo) - F2000 (Camo) - - - F2000 - F2000 - - - F2000 Tactical (Camo) - F2000 Tactical (Camo) - - - F2000 Tactical - F2000 Tactical - - - F2000 EGLM (Camo) - F2000 EGLM (Camo) - - - F2000 EGLM - F2000 EGLM - - - TAR-21 - TAR-21 - - - CTAR-21 - CTAR-21 - - - TAR-21 EGLM - TAR-21 EGLM - - - Vector SMG - Vector SMG - - - Scorpion Evo 3 A1 - Scorpion Evo 3 A1 - - - CPW - CPW - - - RFB SDAR - RFB SDAR - - - Stoner 99 LMG - Stoner 99 LMG - - - Negev NG7 - Negev NG7 - - - Mk14 Mod 1 EBR - Mk14 Mod 1 EBR - - - GM6 Lynx - GM6 Lynx - - - GM6 Lynx (Camo) - GM6 Lynx (Camo) - - - M200 Intervention - M200 Intervention - - - M200 Intervention (Camo) - M200 Intervention (Camo) - - - VS-121 - VS-121 - - - TODO: MAR-10 .338 - - - TODO: MAR-10 .338 (Black) - - - TODO: MAR-10 .338 (Camo) - - - TODO: MAR-10 .338 (Sand) - - - TODO: Mk-I EMR 7.62 mm - - - TODO: Mk-I EMR 7.62 mm (Black) - - - TODO: Mk-I EMR 7.62 mm (Khaki) - - - TODO: Mk-I EMR 7.62 mm (Sand) - - - TODO: Mk-I EMR 7.62 mm (Camo) - - - TODO: Mk-I EMR 7.62 mm (Woodland) - - - TODO: NATO DMR (provisional) spotter - - - TODO: ASP-1 Kir 12.7 mm - - - TODO: ASP-1 Kir 12.7 mm (Black) - - - TODO: ASP-1 Kir 12.7 mm (Tan) - - - TODO: Cyrus 9.3 mm - - - TODO: Cyrus 9.3 mm (Black) - - - TODO: Cyrus 9.3 mm (Hex) - - - TODO: Cyrus 9.3 mm (Tan) - - - TODO: Mk14 7.62 mm - - - TODO: Mk14 7.62 mm (Camo) - - - TODO: Mk14 7.62 mm (Olive) - - - TODO: Navid 9.3 mm - - - TODO: Navid 9.3 mm (Hex) - - - TODO: Navid 9.3 mm (Tan) - - - TODO: SPMG .338 - - - TODO: SPMG .338 (MTP) - - - TODO: SPMG .338 (Black) - - - TODO: SPMG .338 (Sand) - - - \ No newline at end of file + + + XM312 + XM312 + XM312 + XM312 + XM312 + XM312 + XM312 + XM312 + XM312 + XM312A + + + XM312A + XM312A + XM312 + XM312A + XM312A + XM312A + XM312A + XM312A + XM312A + XM312A + + + XM312 (High) + XM312 (Hoch) + XM312 (Alto) + XM312 (Haut) + XM312 (Vysoký) + XM312 (Wysoki) + XM312 (Высокий) + XM312 (Alta) + XM312 (Magasított) + XM312 (Alta) + + + XM307 + XM307 + XM307 + XM307 + XM307 + XM307 + XM307 + XM307 + XM307 + XM307 + + + XM307A + XM307A + XM307A + XM307A + XM307A + XM307A + XM307A + XM307A + XM307A + XM307A + + + XM307 (High) + XM307 (Hoch) + XM307 (Alto) + XM307 (Haut) + XM307 (Vysoký) + XM307 (Wysoki) + XM307 (Высокий) + XM307 (Alta) + XM307 (Magasított) + XM307 (Alta) + + + Mini-Spike Launcher (AT) + Mini-Spike Lenkflugkörper (AT) + Lanzador Mini-Spike (AT) + Poste de tir Mini-Spike (AC) + Mini-Spike Odpalovač (AT) + Wyrzutnia Mini-Spike (AT) + Mini-Spike Пусковое устройство (ПТРК) + Lança-mísseis Mini-Spike (AC) + Mini-Spike rakétarendszer (páncéltörő) + Lanciatore Mini-Spike (AC) + + + Mini-Spike Launcher (AA) + Mini-Spike Lenkflugkörper (AA) + Lanzador Mini-Spike (AA) + Poste de tir Mini-Spike (AA) + Mini-Spike Odpalovač (AA) + Wyrzutnia Mini-Spike (AA) + Mini-Spike Пусковое устройство (ВВ) + Lança-mísseis Mini-Spike (AA) + Mini-Spike rakétarendszer (légvédelmi) + Lanciatore Mini-Spike (AA) + + + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + + + YABHON-R3 (CAS) + YABHON-R3 (Luftnahunterstützung) + YABHON-R3 (CAS) + YABHON-R3 (CAS) + YABHON-R3 (CAS) + YABHON-R3 (штурмовик) + + + M-ATV + M-ATV + M-ATV + M-ATV + M-ATV + M-ATV + M-ATV + M-ATV + M-ATV + M-ATV + + + M-ATV (HMG) + M-ATV (SMG) + M-ATV (HMG) + M-ATV (CKM) + M-ATV (TK) + M-ATV (HMG) + M-ATV (Пулемет) + M-ATV (HMG) + M-ATV (HMG) + M-ATV (HMG) + + + M-ATV (GMG) + M-ATV (GMW) + M-ATV (GMG) + M-ATV (GMG) + M-ATV (Granátomet) + M-ATV (GMG) + M-ATV (Гранатомет) + M-ATV (GMG) + M-ATV (GMG) + M-ATV (GMG) + + + Merkava Mk IV M + Merkava Mk IV M + Merkava Mk IV M + Merkawa Mk IV M + Merkava Mk IV M + Merkava Mk IV M + Меркава Mk IV M + Merkava Mk IV M + Merkava Mk IV M + Merkava Mk IV M + + + Merkava Mk IV LIC + Merkava Mk IV LIC + Merkava Mk IV LIC + Merkawa Mk IV LIC + Merkava Mk IV LIC + Merkava Mk IV LIC + Меркава Mk IV LIC + Merkava Mk IV LIC + Merkava Mk IV LIC + Merkava Mk IV LIC + + + Sholef + Sholef + Sholef + Sholef + Sholef + Sholef + Шолеф + Sholef + Sholef + Sholef + + + Seara + Seara + Seara + Seara + Seara + Seara + Seara + Seara + Seara + Seara + + + Namer + Namer + Namer + Namer + Namer + Namer + Намер + Namer + Namer + Namer + + + Bardelas + Bardelas + Bardelas + Bardelas + Bardelas + Bardelas + Bardelas + Bardelas + Bardelas + Bardelas + + + Patria AMV + Patria AMV + Patria AMV + Patria AMV + Patria AMV + Patria AMV + Patria AMV + Patria AMV + Patria AMV + Patria AMV + + + Nemmera + Nemmera + Nemmera + Nemmera + Nemmera + Nemmera + Nemmera + Nemmera + Nemmera + Nemmera + + + HEMTT Transport + HEMTT Transport + HEMTT de transporte + HEMTT Transportowy + HEMTT Valník + HEMTT Transport + HEMTT Транспортный + HEMTT Transporte + HEMTT szállítójármű + HEMTT da trasporto + + + HEMTT Transport (covered) + HEMTT Transport (bedeckt) + HEMTT de transporte (cubierto) + HEMTT Transportowy (zakryty) + HEMTT Valník (krytý) + HEMTT Transport (bâché) + HEMTT Транспортный (крытый) + HEMTT Transporte (coberto) + HEMTT szállítójármű (ponyvás) + HEMTT da trasporto (coperto) + + + HEMTT + HEMTT + HEMTT + HEMTT + HEMTT + HEMTT Tracteur + HEMTT + HEMTT + HEMTT + HEMTT + + + HEMTT Container + HEMTT Container + HEMTT de contenedor + HEMTT Kontener + HEMTT Skříňový + HEMTT Conteneur + HEMTT Контейнер + HEMTT Contêiner + HEMTT Konténer + HEMTT portacontainer + + + HEMTT Medical + HEMTT Sanitäter + HEMTT médico + HEMTT Medyczny + HEMTT Zdravotnický + HEMTT Sanitaire + HEMTT Медицинский + HEMTT Médico + HEMTT (egészségügyi) + HEMTT Medico + + + HEMTT Ammo + HEMTT Munition + HEMTT de munición + HEMTT Amunicyjny + HEMTT Muniční + HEMTT Munitions + HEMTT Боеприпасы + HEMTT Munições + HEMTT (lőszerszállító) + HEMTT di rifornimento munizioni + + + HEMTT Fuel + HEMTT Treibstoff + HEMTT de combustible + HEMTT Cysterna + HEMTT Cisterna + HEMTT Citerne + HEMTT Заправщик + HEMTT Combustível + HEMTT (üzemanyag-szállító) + HEMTT di rifornimento carburante + + + HEMTT Repair + HEMTT Instandsetzung + HEMTT de reparación + HEMTT Naprawczy + HEMTT Opravárenský + HEMTT Réparation + HEMTT Ремонтный + HEMTT Reparador + HEMTT (szerelő-jármű) + HEMTT Riparatore + + + Fennek + Fennek + Fennek + Fennek + Fennek + Fennek + Феннек + Fennek + Fennek + Fennek + + + Fennek (HMG) + Fennek (SMG) + Fennek (HMG) + Fennek (CKM) + Fennek (TK) + Fennek (HMG) + Феннек (Пулемет) + Fennek (HMG) + Fennek (HMG) + Fennek (HMG) + + + Fennek (GMG) + Fennek (GMW) + Fennek (GMG) + Fennek (GMG) + Fennek (granátomet) + Fennek (GMG) + Феннек (Гранатомет) + Fennek (GMG) + Fennek (GMG) + Fennek (GMG) + + + Leopard 2SG + Leopard 2SG + Leopard 2SG + Leopard 2SG + Leopard 2SG + Leopard 2SG + Леопард 2SG + Leopard 2SG + Leopard 2SG + Leopard 2SG + + + FV510 Warrior + FV510 Warrior + FV510 Warrior + FV510 Warrior + FV510 Warrior + FV510 Warrior + FV510 Уорриор + FV510 Warrior + FV510 Warrior + FV510 Warrior + + + Pandur II + Pandur II + Pandur II + Pandur II + Pandur II + Pandur II + Pandur II + Pandur II + Pandur II + Pandur II + + + KamAZ Transport + KamAZ Transport + KamAZ de transporte + KamAZ transportowy + KAMAZ Valník + KamAZ Transport + КамАЗ Траспортный + KamAZ Transporte + KamAZ szállítójármű + KamAZ da trasporto + + + KamAZ Transport (covered) + KamAZ Transport (bedeckt) + KamAZ de transporte (cubierto) + KamAZ Transportowy (zakryty) + KAMAZ Valník (krytý) + KamAZ Transport (bâché) + КамАЗ Траспортный (Крытый) + KamAZ Transporte (coberto) + KamAZ szállítójármű (ponyvás) + KamAZ da trasporto (coperto) + + + KamAZ Ammo + KamAZ Munition + KamAZ de munición + KamAZ Amunicyjny + KAMAZ Muniční + KamAZ Munitions + КамАЗ Боеприпасы + KamAZ Munições + KamAZ (lőszerszállító) + KamAZ di rifornimento munizioni + + + KamAZ Fuel + KamAZ Treibstoff + KamAZ de combustible + KamAZ cysterna + KAMAZ Cisterna + KamAZ Citerne + КамАЗ Заправщик + KamAZ Combustível + KamAZ (üzemanyag-szállító) + KamAZ di rifornimento carburante + + + KamAZ Repair + KamAZ Instandsetzung + KamAZ de reparación + KamAZ Naprawczy + KAMAZ Opravárenský + KamAZ Réparation + КамАЗ Ремонтный + KamAZ Reparador + KamAZ (szerelő-jármű) + KamAZ riparatore + + + KamAZ Medical + KamAZ Sanitäter + KamAZ médico + KamAZ Medyczny + KAMAZ Zdravotnický + KamAZ Sanitaire + КамАЗ Медицинский + KamAZ Médico + KamAZ (egészségügyi) + KamAZ Medico + + + Punisher + Punisher + Punisher + Punisher + Punisher + Punisher + Kаратель + Punisher + Punisher + Punisher + + + Punisher (HMG) + Punisher (SMG) + Punisher (HMG) + Punisher (CKM) + Punisher (TK) + Punisher (HMG) + Kаратель (Пулемет) + Punisher (HMG) + Punisher (HMG) + Punisher (HMG) + + + Punisher (GMG) + Punisher (GMW) + Punisher (GMG) + Punisher (CKM) + Punisher (granátomet) + Punisher (GMG) + Kаратель (Гранатомет) + Punisher (GMG) + Punisher (GMG) + Punisher (GMG) + + + T100 Black Eagle + T100 Black Eagle + T100 Black Eagle + T100 Black Eagle + T100 Black Eagle + T100 Black Eagle + T100 Черный Орел + T100 Black Eagle + T100 Black Eagle + T100 Black Eagle + + + 2S9 Sochor + 2S9 Sochor + 2S9 Sochor + 259 Sochor + 2S9 Sochor + 2S9 Sochor + 2S9 Сокор + 2S9 Sochor + 2S9 Sochor + 2S9 Sochor + + + BM-2T Stalker + BM-2T Stalker + BM-2T Stalker + BM-2T Stalker + BM-2T Stalker + BM-2T Stalker + БМ-2Т Сталкер + BM-2T Stalker + BM-2T Stalker + BM-2T Stalker + + + ZSU-35 Tigris + ZSU-35 Tigris + ZSU-35 Tigris + ZSU-35 Tigris + ZSU-35 Tigris + ZSU-35 Tigris + ЗСУ-35 Tigris + ZSU-35 Tigris + ZSU-35 Tigris + ZSU-35 Tigris + + + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + + + Typhoon Transport + Typhoon Transport + Typhoon de transporte + Typhoon Transportowy + Typhoon Valník + Typhoon Transport + Тайфун Транспортный + Typhoon Transporte + Typhoon szállítójármű + Typhoon da trasporto + + + Typhoon Transport (covered) + Typhoon Transport (bedeckt) + Typhoon de transporte (cubierto) + Typhoon Transportowy (przykryty) + Typhoon Valník (krytý) + Typhoon Transport (bâché) + Тайфун Транспортный (kрытый) + Typhoon Transporte (coberto) + Typhoon szállítójármű (ponyvás) + Typhoon da trasporto (coperto) + + + Typhoon Device + Typhoon Gerät + Typhoon de dispositivo + Typhoon Urządzenie + Typhoon Zařízení + Typhoon Dispositif + Тайфун Устройство + Typhoon Dispositivo + Typhoon (szerkezet) + Typhoon per dispositivo + + + Typhoon Ammo + Typhoon Munition + Typhoon de munición + Typhoon Amunicyjny + Typhoon Muniční + Typhoon Munitions + Тайфун Боеприпасы + Typhoon Munições + Typhoon (lőszerszállító) + Typhoon di rifornimento munizioni + + + Typhoon Fuel + Typhoon Treibstoff + Typhoon de combustible + Typhoon Cysterna + Typhoon Cisterna + Typhoon Citerne + Тайфун Заправщик + Typhoon Combustível + Typhoon (üzemanyag-szállító) + Typhoon di rifornimento carburante + + + Typhoon Repair + Typhoon Instandsetzung + Typhoon de reparación + Typhoon Naprawczy + Typhoon Opravárenský + Typhoon Réparation + Тайфун Ремонтный + Typhoon Reparador + Typhoon (szerelő-jármű) + Typhoon riparatore + + + Typhoon Medical + Typhoon Sanitäter + Typhoon médico + Typhoon Medyczny + Typhoon Zdravotnický + Typhoon Sanitaire + Тайфун Медицинский + Typhoon Médico + Typhoon (egészségügyi) + Typhoon medico + + + RAH-66 Comanche + RAH-66 Comanche + RAH-66 Comanche + RAH-66 Comanche + RAH-66 Comanche + RAH-66 Commanche + RAH-66 Команч + RAH-66 Comanche + RAH-66 Comanche + RAH-66 Comanche + + + MH-6 Little Bird + MH-6 Little Bird + MH-6 Litte Bird + MH-6 Little Bird + MH-6 Little Bird + MH-6 Little Bird + MH-6 Little Bird + MH-6 Little Bird + MH-6 Little Bird + MH-6 Little Bird + + + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + + + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + + + CH-47I Chinook (unarmed) + CH-47I Chinook (unbewaffnet) + CH-47I Chinnok (Desarmado) + CH-47I Chinook (nieuzbrojony) + CH-47I Chinook (невооруженный) + CH-47I Chinook (Neozbrojený) + + + A-10D Thunderbolt II + A-10D Thunderbolt II + A-10D Thunderbolt II + A-10D Thunderbolt II + A-10D Thunderbolt II + A-10D Thunderbolt II + A-10D Тандерболт II + A-10D Thunderbolt II + A-10D Thunderbolt II + A-10D Thunderbolt II + + + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + + + AW159 Wildcat (unarmed) + AW159 Wildcat (unbewaffnet) + AW159 Wildcat (desarmado) + AW159 Wildcat (nieuzbrojony) + AW159 Wildcat (neozbrojený) + AW159 Wildcat (non-armé) + AW159 Wildcat (невооруженный) + AW159 Wildcat (desarmado) + AW159 Wildcat (fegyvertelen) + AW159 Wildcat (disarmato) + + + AW101 Merlin + AW101 Merlin + AW101 Merlin + AW101 Merlin + AW101 Merlin + AW101 Merlin + AW101 Мерлин + AW101 Merlin + AW101 Merlin + AW101 Merlin + + + L-159 ALCA (CAS) + L-159 ALCA (CAS) + L-159 ALCA (CAS) + L-159 ALCA (CAS) + L-159 ALCA (CAS) + L-159 ALCA (CAS) + L-159 Альбатрос (CAS) + L-159 ALCA (CAS) + L-159 ALCA (CAS) + L-159 ALCA (CAS) + + + L-159 ALCA (AA) + L-159 ALCA (AA) + L-159 ALCA (AA) + L-159 ALCA (AA) + L-159 ALCA (AA) + L-159 ALCA (AA) + L-159 Альбатрос (AA) + L-159 ALCA (ВВ) + L-159 ALCA (AA) + L-159 ALCA (AA) + + + Ka-60 Kasatka + Ka-60 Kasatka + Ka-60 Kasatka + Ka-60 Kasatka + Ka-60 Kasatka + Ka-60 Kasatka + Ka-60 Касатка + Ka-60 Kasatka + Ka-60 Kasatka + Ka-60 Kasatka + + + Ka-60 Kasatka (unarmed) + Ka-60 Kasatka (unbewaffnet) + Ka-60 Kasatka (desarmado) + Ka-60 Kasatka (nieuzbrojony) + Ka-60 Kasatka (neozbrojená) + Ka-60 Kasatka (non-armé) + Ka-60 Касатка (невооруженный) + Ka-60 Kasatka (desarmado) + Ka-60 Kasatka (fegyvertelen) + Ka-60 Kasatka (disarmato) + + + Yak-130 + Yak-130 + Yak-130 + Jak-130 + Jak-130 + Yak-130 + Як-130 + Yak-130 + Jak-130 + Yak-130 + + + MD 500 + MD 500 + MD 500 + MD 500 + MD 500 + MD 500 + MD 500 + MD 500 + MD 500 + MD 500 + + + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + + + M18A1 Claymore + M18A1 Claymore + M18A1 Claymore + Mina kierunkowa M18A1 Claymore + M18A1 Mina Claymore + M18A1 Claymore Mine antipersonnel à effet dirigé + M18A1 Клеймор + M18A1 Claymore + M18A1 Claymore akna + M18A1 Claymore Mina antiuomo + + + M183 Demolition Charge Assembly + M183 Geballte Sprengladung + Conjunto de carga de demolición M183 + Ładunek burzący M183 + M183 Demoliční nálož + M183 Charge de Démolition + M183 Комплектный подрывной заряд + M183 Sacola de Demolição + M183 romboló töltet + M183 Demolition Charge Assembly + + + M112 Demolition Block + M112 Sprengladung + Bloque de demolición M112 + Ładunek burzący M112 + M112 Výbušná nálož + Pétard M112 + M112 подрывной заряд + M112 Carga de Demolição + M112 romboló töltet + M112 Demolition Block + + + M67 Fragmentation Grenade + M67 Splittergranate + Granada de fragmentación M67 + Granat obronny M67 + M67 Granát + M67 Grenade à fragmentation + M67 ручная осколочная граната + M67 Granada de fragmentação + M67 repeszgránát + M67 Granata a frammentazione + + + M83 Smoke Grenade (White) + M83 Rauchgranate (Weiss) + Granada de humo M83 (Blanco) + Granat dymny M83 (Biały) + M83 Kouřový Granát (Bílý) + M83 Grenade fumigène (Blanche) + M83 дымовой гранаты (Белый) + M83 Granada de fumaça (Branca) + M83 füstgránát (Fehér) + M83 Granata fumogena (Bianco) + + + M18 Smoke Grenade (Blue) + M18 Rauchgranate (Blau) + Granada de humo M18 (Azul) + Granat dymny M18 (Niebieski) + M18 Kouřový Granát (Modrý) + M18 Grenade fumigène (Bleue) + M18 дымовой гранаты (Синий) + M18 Granada de fumaça (Azul) + M18 füstgránát (Kék) + M18 Granata fumogena (Blu) + + + M18 Smoke Grenade (Green) + M18 Rauchgranate (Grün) + Granada de humo M18 (Verde) + Granat dymny M18 (Zielony) + M18 Kouřový Granát (Zelený) + M18 Grenade fumigène (Verte) + M18 дымовой гранаты (Зелёный) + M18 Granada de fumaça (Verde) + M18 füstgránát (Zöld) + M18 Granata fumogena (Verde) + + + M18 Smoke Grenade (Orange) + M18 Rauchgranate (Orange) + Granada de humo M18 (Naranja) + Granat dymny M18 (Pomarańczowy) + M18 Kouřový Granát (Oranžový) + M18 Grenade fumigène (Orange) + M18 дымовой гранаты (Оранжевый) + M18 Granada de fumaça (Laranja) + M18 füstgránát (Narancssárga) + M18 Granata fumogena (Arancione) + + + M18 Smoke Grenade (Purple) + M18 Rauchgranate (Violett) + Granada de humo M18 (Púrpura) + Granat dymny M18 (Fioletowy) + M18 Kouřový Granát (Fialový) + M18 Grenade fumigène (Pourpre) + M18 дымовой гранаты (Пурпурный) + M18 Granada de fumaça (Roxa) + M18 füstgránát (Lila) + M18 Granata fumogena (Viola) + + + M18 Smoke Grenade (Red) + M18 Rauchgranate (Rot) + Granada de humo M18 (Rojo) + Granat dymny M18 (Czerwony) + M18 Kouřový Granát (Červený) + M18 Grenade fumigène (Rouge) + M18 дымовой гранаты (Красный) + M18 Granada de fumaça (Vermelha) + M18 füstgránát (Piros) + M18 Granata fumogena (Rosso) + + + M18 Smoke Grenade (Yellow) + M18 Rauchgranate (Gelb) + Granada de humo M18 (Amarillo) + Granat dymny M18 (Żółty) + M18 Kouřový Granát (Žlutý) + M18 Grenade fumigène (Jaune) + M183 дымовой гранаты (Жёлтые) + M18 Granada de fumaça (Amarela) + M18 füstgránát (Sárga) + M18 Granata fumogena (Giallo) + + + M15 Anti-Tank Mine + M15 Panzerabwehrmine + Mina antitanque M15 + Mina przeciwpancerna M15 + M15 Protitanková Mina + M15 Mine antichar + M15 противотанковая мина + M15 Mina anticarro + M15 harckocsiakna + M15 Mine anticarro + + + VS-50 Anti-Personnel Mine + VS-50 Antipersonenmine + Mina antipersona VS-50 + Mina przeciwpiechotna VS-50 + VS-50 Protipěchotní Mina + VS-50 Mine antipersonnel à pression + VS-50 Противопехотная мина + VS-50 Mina antipessoal + VS-50 gyalogsági taposóakna + VS-50 Mine antiuomo + + + M26 Anti-Personnel Bounding Mine + M26 Antipersonensprungmine + Mina antipersona M26 + Mina przeciwpiechotna M26 + M26 Šrapnelová Mina + M26 Mine antipersonnel bondissante + M26 Противопехотная мина + M26 Mina saltadora antipessoal + M26 gyalogsági ugróakna + M26 Mine saltanti antiuomo + + + PMR-3 Anti-Personnel Tripwire Mine + PMR-3 Antipersonenstolperdrahtmine + Mina antipersona de alambre PMR-3 + Mina przeciwpiechotna PMR-3 + PMR-3 Nástražná Mina + PMR-3 Mine antipersonnel à traction + PMR-3 Противопехотная мина + PMR-3 Mina antipessoal (armadilha) + PMR-3 botlódrótos gyalogsági akna + PMR-3 Mine antiuomo + + + P99 + P99 + + + MP-443 Grach + MP-443 Grach + + + ACP-C2 + ACP-C2 + + + FNX-45 Tactical + FNX-45 Tactical + + + Chiappa Rhino 60DS + Chiappa Rhino 60DS + + + Taurus Judge + Taurus Judge + + + NLAW + NLAW + + + RPG-32 + RPG-32 + + + Mini-Spike (AA) + Mini-Spike (AA) + + + Mini-Spike (AT) + Mini-Spike (AT) + + + MX + MX + + + MX (Black) + MX (Black) + + + MXC + MXC + + + MXC (Black) + MXC (Black) + + + MX 3GL + MX 3GL + + + MX 3GL (Black) + MX 3GL (Black) + + + MX LSW + MX LSW + + + MX LSW (Black) + MX LSW (Black) + + + MXM + MXM + + + MXM (Black) + MXM (Black) + + + KT2002 Katiba + KT2002 Katiba + + + KT2002C Katiba + KT2002C Katiba + + + KT2002 Katiba KGL + KT2002 Katiba KGL + + + F2000 (Camo) + F2000 (Camo) + + + F2000 + F2000 + + + F2000 Tactical (Camo) + F2000 Tactical (Camo) + + + F2000 Tactical + F2000 Tactical + + + F2000 EGLM (Camo) + F2000 EGLM (Camo) + + + F2000 EGLM + F2000 EGLM + + + TAR-21 + TAR-21 + + + CTAR-21 + CTAR-21 + + + TAR-21 EGLM + TAR-21 EGLM + + + Vector SMG + Vector SMG + + + Scorpion Evo 3 A1 + Scorpion Evo 3 A1 + + + CPW + CPW + + + RFB SDAR + RFB SDAR + + + Stoner 99 LMG + Stoner 99 LMG + + + Negev NG7 + Negev NG7 + + + Mk14 Mod 1 EBR + Mk14 Mod 1 EBR + + + GM6 Lynx + GM6 Lynx + + + GM6 Lynx (Camo) + GM6 Lynx (Camo) + + + M200 Intervention + M200 Intervention + + + M200 Intervention (Camo) + M200 Intervention (Camo) + + + VS-121 + VS-121 + + + + TODO: MAR-10 .338 + + + TODO: MAR-10 .338 (Black) + + + TODO: MAR-10 .338 (Camo) + + + TODO: MAR-10 .338 (Sand) + + + + TODO: Mk-I EMR 7.62 mm + + + TODO: Mk-I EMR 7.62 mm (Black) + + + TODO: Mk-I EMR 7.62 mm (Khaki) + + + TODO: Mk-I EMR 7.62 mm (Sand) + + + TODO: Mk-I EMR 7.62 mm (Camo) + + + TODO: Mk-I EMR 7.62 mm (Woodland) + + + TODO: NATO DMR (provisional) spotter + + + + TODO: ASP-1 Kir 12.7 mm + + + TODO: ASP-1 Kir 12.7 mm (Black) + + + TODO: ASP-1 Kir 12.7 mm (Tan) + + + + TODO: Cyrus 9.3 mm + + + TODO: Cyrus 9.3 mm (Black) + + + TODO: Cyrus 9.3 mm (Hex) + + + TODO: Cyrus 9.3 mm (Tan) + + + + TODO: Mk14 7.62 mm + + + TODO: Mk14 7.62 mm (Camo) + + + TODO: Mk14 7.62 mm (Olive) + + + + TODO: Navid 9.3 mm + + + TODO: Navid 9.3 mm (Hex) + + + TODO: Navid 9.3 mm (Tan) + + + + TODO: SPMG .338 + + + TODO: SPMG .338 (MTP) + + + TODO: SPMG .338 (Black) + + + TODO: SPMG .338 (Sand) + + + + diff --git a/addons/reload/stringtable.xml b/addons/reload/stringtable.xml index 2aa5197e2f..40f36c6549 100644 --- a/addons/reload/stringtable.xml +++ b/addons/reload/stringtable.xml @@ -1,14 +1,12 @@ - - + + Check ammo on weapon reload - Проверять боезапас при перезарядке Check the ammo in your new magazine on magazine reload. - Проверяет количество патронов в новом магазине при перезарядке. Check Ammo @@ -36,11 +34,9 @@ Link belt - Сцепить ленты Linking belt... - Сцепка лент ... - \ No newline at end of file + diff --git a/addons/reloadlaunchers/stringtable.xml b/addons/reloadlaunchers/stringtable.xml index 664f594acd..6677153419 100644 --- a/addons/reloadlaunchers/stringtable.xml +++ b/addons/reloadlaunchers/stringtable.xml @@ -1,26 +1,24 @@  - + - - - Load launcher - Panzerabwehr laden - Зарядить ПУ - - - Loading launcher ... - Panzerabwehr wird geladen ... - Зарядка ПУ ... - - - Launcher loaded - Panzerabwehr geladen - ПУ заряжено - - - Load %1 - Lade %1 - Загрузка %1 - - - \ No newline at end of file + + + Load launcher + Panzerabwehr laden + + + Loading launcher ... + Panzerabwehr wird geladen ... + + + Launcher loaded + Panzerabwehr geladen + + + + Load %1 + Lade %1 + + + + diff --git a/addons/respawn/stringtable.xml b/addons/respawn/stringtable.xml index 0f1ae731f5..59a9b2b31c 100644 --- a/addons/respawn/stringtable.xml +++ b/addons/respawn/stringtable.xml @@ -1,26 +1,21 @@  - Deploy in 5 seconds ... Wird in 5 Sekunden errichtet ... - Возрождение через 5 секунд ... Rallypoint deployed Rallypoint errichtet - Точка сбора установлена Teleported to Base Zur Basis teleportiert - Телепорт на базу Teleported to Rallypoint Zum Rallypoint teleportiert - Телепорт на точку сбора - \ No newline at end of file + diff --git a/addons/switchunits/stringtable.xml b/addons/switchunits/stringtable.xml index 81cde4b007..842bf89127 100644 --- a/addons/switchunits/stringtable.xml +++ b/addons/switchunits/stringtable.xml @@ -1,5 +1,4 @@  - @@ -13,10 +12,10 @@ This unit is too close to the enemy. Diese Einheit ist zu nah am Feind. - Юнит слишком близок к противнику. + Юнит слишком близок к противнику Tato jednotka je moc blízko k nepříteli. Ta jednostka jest zbyt blisko przeciwnika. Esta unidad está demasiado cerca del enemigo. - \ No newline at end of file + diff --git a/addons/weaponselect/stringtable.xml b/addons/weaponselect/stringtable.xml index 0e7d881413..3a39d59396 100644 --- a/addons/weaponselect/stringtable.xml +++ b/addons/weaponselect/stringtable.xml @@ -1,14 +1,12 @@  - + Display text on grenade throw - Показывать текст при броске Display a hint or text on grenade throw. - Показывать текст или подсказку при броске гранаты. Select Pistol @@ -228,7 +226,7 @@ Už nejsou žádné ostatní granáty Não há outras granadas restantes Nessun'altra granata rimanente. - Летальные гранаты закончились + Невзрывоопасные гранаты закончились No grenade selected diff --git a/addons/wep_javelin/stringtable.xml b/addons/wep_javelin/stringtable.xml index d257c15e04..4068d6f0a6 100644 --- a/addons/wep_javelin/stringtable.xml +++ b/addons/wep_javelin/stringtable.xml @@ -1,24 +1,24 @@ - - + + - - - Lock Target (Hold) - Lock Target (Hold) - Lock Target (Hold) - Lock Target (Hold) - Lock Target (Hold) - Lock Target (Hold) - Захватить цель (удерживать) - - - Cycle Fire Mode - Cycle Fire Mode - Cycle Fire Mode - Cycle Fire Mode - Cycle Fire Mode - Cycle Fire Mode - Переключение режимов огня - - - \ No newline at end of file + + + Lock Target (Hold) + Lock Target (Hold) + Lock Target (Hold) + Lock Target (Hold) + Lock Target (Hold) + Lock Target (Hold) + Lock Target (Hold) + + + Cycle Fire Mode + Cycle Fire Mode + Cycle Fire Mode + Cycle Fire Mode + Cycle Fire Mode + Cycle Fire Mode + Cycle Fire Mode + + + diff --git a/addons/winddeflection/stringtable.xml b/addons/winddeflection/stringtable.xml index 1fb382fd3e..b52100046f 100644 --- a/addons/winddeflection/stringtable.xml +++ b/addons/winddeflection/stringtable.xml @@ -1,38 +1,32 @@ - - - - - - - Wind Information - Informacje o wietrze - Información del viento - Ветер - - - Direction: %1 - Kierunek: %1 - Dirección: %1 - Направление: %1 - - - Speed: %1 m/s - Prędkość: %1 - Velocidad: %1 m/s - Скорость: %1 м/с - - - Weather Information - Informacje o pogodzie - Información Meteorológica - Погода - - - Humidity: %1% - Wilgotność: %1 - Humedad: %1% - Влажность: %1% - - - - \ No newline at end of file + + + + + + Wind Information + Informacje o wietrze + Información del viento + + + Direction: %1 + Kierunek: %1 + Dirección: %1 + + + Speed: %1 m/s + Prędkość: %1 + Velocidad: %1 m/s + + + Weather Information + Informacje o pogodzie + Información Meteorológica + + + Humidity: %1% + Wilgotność: %1 + Humedad: %1% + + + + From 21abff37139ca8b6fa2460aa982698f89decd63e Mon Sep 17 00:00:00 2001 From: EpMAK Date: Sat, 11 Apr 2015 21:33:34 +0300 Subject: [PATCH 112/214] Revert "Revert "Russian Translation"" This reverts commit ea04f4ab3e53e55e359ebf0357a3ff0efe1b3536. --- addons/attach/stringtable.xml | 20 +- addons/captives/stringtable.xml | 9 +- addons/common/stringtable.xml | 16 +- addons/dragging/stringtable.xml | 7 +- addons/explosives/stringtable.xml | 48 +- addons/fcs/stringtable.xml | 148 +- addons/goggles/stringtable.xml | 6 +- addons/grenades/stringtable.xml | 8 +- addons/hearing/stringtable.xml | 3 +- addons/interact_menu/stringtable.xml | 7 +- addons/interaction/stringtable.xml | 5 +- addons/inventory/stringtable.xml | 4 +- addons/kestrel/stringtable.xml | 4 +- addons/laser_selfdesignate/stringtable.xml | 4 +- addons/laserpointer/stringtable.xml | 10 +- addons/logistics_uavbattery/stringtable.xml | 10 +- addons/logistics_wirecutter/stringtable.xml | 10 +- addons/magazinerepack/stringtable.xml | 5 +- addons/magazines/stringtable.xml | 38 +- addons/maptools/stringtable.xml | 4 +- addons/markers/stringtable.xml | 4 +- addons/medical/stringtable.xml | 1856 ++++++------- addons/microdagr/stringtable.xml | 24 +- addons/nametags/stringtable.xml | 5 +- addons/optionsmenu/stringtable.xml | 19 +- addons/overheating/stringtable.xml | 4 +- addons/realisticnames/stringtable.xml | 2608 +++++++++---------- addons/reload/stringtable.xml | 10 +- addons/reloadlaunchers/stringtable.xml | 46 +- addons/respawn/stringtable.xml | 7 +- addons/switchunits/stringtable.xml | 5 +- addons/weaponselect/stringtable.xml | 6 +- addons/wep_javelin/stringtable.xml | 46 +- addons/winddeflection/stringtable.xml | 70 +- 34 files changed, 2601 insertions(+), 2475 deletions(-) diff --git a/addons/attach/stringtable.xml b/addons/attach/stringtable.xml index 27a0517f9a..839ac2e168 100644 --- a/addons/attach/stringtable.xml +++ b/addons/attach/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -48,7 +48,7 @@ Marcador IV Acoplado Strobo IR attaccata Infravörös jeladó hozzácsatolva - ИК строб присоединён + ИК-маяк присоединён IR Strobe Detached @@ -60,7 +60,7 @@ Marcador IV Separado Strobo IR staccata Infravörös jeladó lecsatolva - ИК строб отсоединён + ИК-маяк отсоединён IR Grenade Attached @@ -72,7 +72,7 @@ Granada IV Acoplada Granata IR attaccata Infravörös gránát hozzácsatolva - ИК граната присоединена + ИК-граната присоединена IR Grenade Detached @@ -84,7 +84,7 @@ Granada IV Separada Granata IR staccata Infravörös gránát lecsatolva - ИК граната отсоединена + ИК-граната отсоединена Chemlight Attached @@ -132,7 +132,7 @@ Marcador IV Strobo IR Infravörös jeladó - ИК строб + ИК-маяк IR Strobe allows you to signal your position through a pulsating beacon only visible with NVGs. @@ -144,7 +144,7 @@ O Marcador IV permite que você sinalize sua posição através de um pulso visível somente com equipamento de visão noturna. La Strobo IR è una luce stroboscopica che ti permette di segnalare la tua posizione grazie all'emissione di impulsi ad infrarossi visibili solo con i visori notturni. Az infravörös jeladóval megjelölheted a helyzetedet úgy, hogy annak pulzáló fénye csak éjjellátó készülékkel látható. - ИК строб позволяет сигнализировать свое местоположение через пульсирующий маяк, видимый только через ПНВ. + ИК-маяк позволяет сигнализировать о своём местоположении через пульсирующий свет, видимый только через ПНВ. Place @@ -156,6 +156,7 @@ Colocar Posiziona Elhelyez + Установить Cancel @@ -167,13 +168,14 @@ Cancelar Annulla Mégse + Отмена Attach Failed Échec du Attacher Befestigen fehlgeschlagen - Присоединить Ошибка + Соединение прервано Error al acoplar - + \ No newline at end of file diff --git a/addons/captives/stringtable.xml b/addons/captives/stringtable.xml index 897782747f..bc9cff1572 100644 --- a/addons/captives/stringtable.xml +++ b/addons/captives/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -134,26 +134,31 @@ Surrender Kapitulieren Rendirse + Сдаться Stop Surrendering Den Kampf erneut aufnehmen Dejar de rendirse + Остановить сдачу Only use on alive units Nur bei lebenden Einheiten verwendbar Utilizar solo en unidades vivas + Только для живых юнитов Only use on dismounted inf Nur bei abgesessener Infanterie verwendbar Utilizar solo en infanteria desmontada + Только для спеш. солдат Nothing under mouse Es wurde nichts ausgewählt Nada bajo el ratón + Объекты под мышью отсутствуют - + \ No newline at end of file diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index a5f5368cd0..d1e81e01a6 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -300,64 +300,78 @@ Aceptar Peticiones Accept Requests Anfrage annehmen + Подтвердить запросы Ignoruj prośby Rechazar Peticiones Decline Requests Anfrage ablehnen + Отклонить запросы Akceptuj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności. Acepta Peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones. Accept Requests send by other players. These can be requests to use / share equipment, perform certain actions. Anfragen anderer Spieler annehmen. Diese Anfragen können sich auf das Benutzen / Teilen von Equipment beziehen oder das Ausführen bestimmter Aktionen. + Подтвердить запросы, посланные другими игроками. Это могут быть просьбы о передаче снаряжения или выполнении определённых действий. Ignoruj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności. Rechazar Peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones. Decline Requests send by other players. These can be requests to use / share equipment, perform certain actions. Anfragen anderer Spieler ablehnen. Diese Anfragen können sich auf das Benutzen / Teilen von Equipment beziehen oder das Ausführen bestimmter Aktionen. + Отклонить запросы, посланные другими игроками. Это могут быть просьбы о передаче снаряжения или выполнении определённых действий. Feedback icons Feedback-Icons + Иконки состояний Select the position of or disable the feedback icons on your screen. These icons will show to provide extra feedback on your character status and actions performed. Wähle die Position der Feedback-Icons aus oder deaktiviere Sie. Die Feedback-Icons zeigen den Status deiner Einheit an, oder die ausgeführte Aktion. + Выберите положение или или отключите отображение иконок состояний на Вашем экране. Эти иконки предоставят дополнительную информацию о состоянии персонажа и выполняемых действиях. Progress bar location Position des Fortschrittsanzeige + Положение прогресс-бара Set the desired location of the progress bar on your screen. Wähle die Position der Fortschrittsanzeige. + Установите желаемое положение строки состояния на экране. Hint Background color Hinweis Hintergrundfarbe + Цвет фона всплывающих подсказок The color of the background from the ACE hints. Wähle die Hintergrundfarbe für ACE-Hinweise. + Цвет фона всплывающий подсказок АСЕ. Hint text font color Hinweis Textfarbe + Цвет шрифта всплывающих подсказок The color of the text font from the ACE hints. This color is the default color for all text displayed through the ACE Hint system, if the hint text has no other color specified. Wähle die Textfarbe für ACE-Hinweise. + Цвет шрифта текста всплывающих подсказок АСЕ. Этот цвет является стандартным для всего текста, транслирующегося через систему подсказок АСЕ, если не установлено другого цвета для текста подсказок. Banana Banane + Банан A banana is an edible fruit, botanically a berry, produced by several kinds of large herbaceous flowering plants in the genus Musa. Die Bananen (Musa) sind eine Pflanzengattung in der Familie der Bananengewächse (Musaceae) innerhalb der Einkeimblättrigen Pflanzen (Monokotyledonen). + Банан - это съедобный фрукт, ягода с ботанической точки зрения, произрастающий на нескольких видах травянистых растениях рода Банан (Musa). \ No newline at end of file diff --git a/addons/dragging/stringtable.xml b/addons/dragging/stringtable.xml index 9193d2712e..3199dd7c20 100644 --- a/addons/dragging/stringtable.xml +++ b/addons/dragging/stringtable.xml @@ -1,5 +1,5 @@ - - + + @@ -40,6 +40,7 @@ Não é possível carregar o item devido a seu peso Non è possibile trascinare l'oggetto a causa del suo peso Túl nehéz ahhoz, hogy elhúzd --> + Слишком тяжело Carry @@ -54,4 +55,4 @@ Нести - + \ No newline at end of file diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml index 1d010a0a7e..834101f9c7 100644 --- a/addons/explosives/stringtable.xml +++ b/addons/explosives/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -48,7 +48,7 @@ Codice dell'esplosivo : %1 Robbanóanyag kódja: %1 Código do explosivo: %1 - Взрывная код: %1 + Код подрыва: %1 Place @@ -60,7 +60,7 @@ Piazza Elhelyezés Colocar - Положить + Установить Cancel @@ -132,7 +132,7 @@ Usato per l'attivazione a distanza degli esplosivi Robbanóanyagok távoli robbantásához Usado para acionar explosivos remotamente - Используется для удаленного запуска взрывчатку + Используется для удаленной детонации СВУ M57 Firing Device @@ -156,7 +156,7 @@ Usato per l'attivazione a distanza degli esplosivi Robbanóanyagok távoli robbantásához Usado para acionar explosivos remotamente - Используется для удаленного запуска взрывчатку + Используется для удаленной детонации зарядов M26 Firing Device @@ -192,7 +192,7 @@ Kit E.O.D. Hatástalanító felszerelés Kit de desarme - Разминирование комплект + Комплект разминирования Allows defusing of explosives @@ -204,7 +204,7 @@ Consente la disattivazione degli ordigni esplosivi Robbanóanyagok hatástalanításához Permite o desarme de explosivos - Allows defusing of explosives + Позволяет обезвреживать ВУ Add to Speed Dial @@ -228,7 +228,7 @@ Libera Törlés Limpar - Pассеиваться + Очистить Dial @@ -252,7 +252,7 @@ Sopra Fel Cima - Поднять + Вызов Down @@ -264,7 +264,7 @@ Sotto Le Baixo - Опустить + Сброс Cancel @@ -288,7 +288,7 @@ Menù di detonazione Robbantás menü Menu de detonação - Меню Подрыв + Меню подрыва Place Menu @@ -300,7 +300,7 @@ Menù di collocamento Lerakás menü Menu de posicionamento - Меню Установить + Меню детонации Defuse @@ -336,7 +336,7 @@ Cronometro Időzített Timer - Временной + Таймер Time: %1m %2s @@ -348,7 +348,7 @@ Tempo : %1m %2s Idő: %1m %2s Tempo: %1m %2s - Tемп: %1m %2c + Время: %1m %2c Set Time @@ -360,7 +360,7 @@ Modifica il conto alla rovescia Idő állítása Configurar Tempo - Xронометр + Установить время Select a Trigger @@ -372,7 +372,7 @@ Seleziona un Attivatore Detonátor kiválasztása Selecionar um Gatilho - Выберите + Выберите детонатор Select @@ -384,7 +384,7 @@ Seleziona Kiválasztás Selecionar - Выбрать защелка + Выбрать Pressure Plate @@ -408,7 +408,7 @@ Filo a Inciampo Botlódrót Linha de tração - Натяжной + Растяжка IR Sensor @@ -420,7 +420,7 @@ Sensore IR IR szenzor Sensor IV - ИК + ИК сенсор No triggers available for %1 @@ -432,7 +432,7 @@ Nessun attivatore disponibile per %1 Nincs detonátor a %1 Nenhum gatilho disponível para %1 - Нет защелка доступны для %1 + Нет доступных взрывателей для %1 IR Sensor (Side Attack) @@ -444,7 +444,7 @@ Sensore IR (Attacco laterale) IR Sensor (Side Attack) Sensor infravermelho (ataque lateral) - ИК (боковая атака) + ИК (детонация вбок) Magnetic Influence Sensor (Bottom Attack) @@ -456,7 +456,7 @@ Sensore Magnetico di Prossimità (Attacco inferiore) Mágneses (Bottom Attack) Influência magnética (ataque inferior) - Магнитный (дно атака) + Магнитный (детонация вверх) No explosives on trigger. @@ -468,7 +468,7 @@ Nincs robbanóanyag a detonátorhoz. Brak ładunków na zapalnik. Nenhum explosivo no gatilho. - Нет взрывчатки на курок. + Нет доступных ВУ для взрывателя. Dead Man's Switch @@ -478,7 +478,7 @@ Czuwak Detonador de hombre muerto Dead Man's Switch - Кнопка мертвеца + Ловушка мертвеца Used to remotely trigger explosives when released. diff --git a/addons/fcs/stringtable.xml b/addons/fcs/stringtable.xml index 154d874f73..0911bbdb57 100644 --- a/addons/fcs/stringtable.xml +++ b/addons/fcs/stringtable.xml @@ -1,81 +1,81 @@  - + - - - Lase Target / Measure Distance - Ziel anlasern / Entfernung Messen - Télémétrer la cible - Naświetl cel / Zmierz odległość - Označit cíl / Změřit vzdálenost - Iluminar objetivo / Medir distancia - - Подсветить цель / Измерить расстояние - - - Zeroed To - Haltepunkt - Fijado a - Wyzerowany na - Nastaveno na - Zéroté à - Зероинг - Nullázás - Fixado em - Azzeramento a - - - Adjust FCS Range (Up) - Entfernung des FLS erhöhen - Zwiększ zasięg FCS - Ajustar distancia del FCS (arriba) - Nastavit FCS Náměr (nahoru) - Augmenter la distance du SCT - FCS tartomány állítása (Fel) - Ajustar distância do FCS (Acima) - Aumentare la distanza dell'FCS - Диапазон СУО (Выше) - - - Adjust FCS Range (Down) - Entfernung des FLS verringern - Zmniejsz zasięg FCS - Ajustar distancia del FCS (abajo) - Nastavit FCS Náměr (dolů) - Réduire la distance du SCT - FCS tartomány állítása (Le) - Ajustar distância do FCS (Abaixo) - Ridurre la distanza dell'FCS - Диапазон СУО (Ниже) - - - Reset FCS - FLS zurücksetzen - Reiniciar FCS - Réinitialiser le SCT - Resetuj FCS - Resetovat FCS - FCS visszaállítása - Reiniciar FCS - Azzeramento dell'FCS - Обнулить СУО - - - FCS has been reset. - FLS wurde zurückgesetzt. - FCS reiniciado - SCT réinitialisé. - FCS został zresetowany. - FCS byl resetován. - Az FCS visszaállítva - FCS reiniciado. - L'FCS è stato azzerato - СУО обнулен - - - + Подсветить цель / Замерить расстояние + + + Zeroed To + Haltepunkt + Fijado a + Wyzerowany na + Nastaveno na + Zéroté à + Выставлено на + Nullázás + Fixado em + Azzeramento a + + + Adjust FCS Range (Up) + Entfernung des FLS erhöhen + Zwiększ zasięg FCS + Ajustar distancia del FCS (arriba) + Nastavit FCS Náměr (nahoru) + Augmenter la distance du SCT + FCS tartomány állítása (Fel) + Ajustar distância do FCS (Acima) + Aumentare la distanza dell'FCS + Диапазон СУО (Выше) + + + Adjust FCS Range (Down) + Entfernung des FLS verringern + Zmniejsz zasięg FCS + Ajustar distancia del FCS (abajo) + Nastavit FCS Náměr (dolů) + Réduire la distance du SCT + FCS tartomány állítása (Le) + Ajustar distância do FCS (Abaixo) + Ridurre la distanza dell'FCS + Диапазон СУО (Ниже) + + + Reset FCS + FLS zurücksetzen + Reiniciar FCS + Réinitialiser le SCT + Resetuj FCS + Resetovat FCS + FCS visszaállítása + Reiniciar FCS + Azzeramento dell'FCS + Обнулить СУО + + + FCS has been reset. + FLS wurde zurückgesetzt. + FCS reiniciado + SCT réinitialisé. + FCS został zresetowany. + FCS byl resetován. + Az FCS visszaállítva + FCS reiniciado. + L'FCS è stato azzerato + СУО обнулен. + + + \ No newline at end of file diff --git a/addons/goggles/stringtable.xml b/addons/goggles/stringtable.xml index 1756442176..9b2e6fba12 100644 --- a/addons/goggles/stringtable.xml +++ b/addons/goggles/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -8,7 +8,7 @@ Mostrar efectos de las gafas en tercera persona Zobrazit účinky brýlí v třetí osobě Effets de lunettes à la 3ème personne - Отображать эффект очков в третьем лице + Отображать эффект очков от третьего лица Szemüveg effekt mutatása külső nézetből Włącz efekty gogli w trzeciej osobie Mostrar efeitos de óculos em Terceira Pessoa @@ -27,4 +27,4 @@ Pulisci gli occhiali - + \ No newline at end of file diff --git a/addons/grenades/stringtable.xml b/addons/grenades/stringtable.xml index 1129d44271..803aa0a220 100644 --- a/addons/grenades/stringtable.xml +++ b/addons/grenades/stringtable.xml @@ -1,5 +1,5 @@ - - + + @@ -93,7 +93,7 @@ Les grenades incapacitantes servent à désorienter ou distraire une menace pendant quelques secondes. Granat ogłusza, nie zabijając przeciwnika. Detonacja daje efekt oślepiającego błysku i głośnego huku. Omračující granát je taktická nesmrtící zbraň používaná při záchraně rukojmí a zvládání davu. - Граната XM84 (M84) - не летального действия, и предназначена для отвлечения и временного вывода из строя, либо дезориентации противника. Основное использование нашла при освобождении заложников, захвате преступников и террористов, а также проведении диверсионных миссий. + XM84 (M84) - граната нелетального действия, и предназначена для отвлечения и временного вывода из строя, либо дезориентации противника. Основное использование нашла при освобождении заложников, захвате преступников и террористов, а также проведении диверсионных миссий. Eldobás után felrobban és éles hang, valamint fényhatással zavarja össze a környezetében tartózkodókat. Anche conosciuta come flashbang. Causa accecamento immediato, sensazioni di sposatezza, mancanza d'equilibrio e disturbi al timpano. Um tipo de granada não-letal destinado a confundir, desorientar e distrair uma potencial ameaça. @@ -243,4 +243,4 @@ M127A1 (Amarilla) - + \ No newline at end of file diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index f042128301..ba4d17e112 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -102,6 +102,7 @@ Disable ear ringing Desactivar zumbido de oídos Knalltrauma deaktivieren + Отключить эффект баротравмы \ No newline at end of file diff --git a/addons/interact_menu/stringtable.xml b/addons/interact_menu/stringtable.xml index b3de5efddf..bbb17efd87 100644 --- a/addons/interact_menu/stringtable.xml +++ b/addons/interact_menu/stringtable.xml @@ -1,26 +1,31 @@  - + Always display cursor for self interaction Immer den Cursor für Selbst-Interaktionen anzeigen. + Всегда показывать курсор для взаимодействия с собой Interact Key Interaktionstaste + Клавиша взаимодействия Self Interaction Key Selbst-Interaktionstaste + Клавиша взаимодействия (с собой) Self Actions Selbst-Interaktion + Действия с собой Vehicle Actions Fahrzeug-Interaktion + Действия на транспорте \ No newline at end of file diff --git a/addons/interaction/stringtable.xml b/addons/interaction/stringtable.xml index e85d0d3b47..8016079b90 100644 --- a/addons/interaction/stringtable.xml +++ b/addons/interaction/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -616,7 +616,7 @@ Modyfikator Modifier la touche Tecla modificadora - клавиша-модификатор + Клавиша-модификатор Tecla Modificadora Modifica Tasto Módosító billentyű @@ -664,6 +664,7 @@ Passengers Passagiere + Пассажиры \ No newline at end of file diff --git a/addons/inventory/stringtable.xml b/addons/inventory/stringtable.xml index f93e0d9627..75f15e3720 100644 --- a/addons/inventory/stringtable.xml +++ b/addons/inventory/stringtable.xml @@ -1,14 +1,16 @@  - + Make Inventory Display Bigger Die Anzeige des Inventar vergrößern. + Сделать окно инвентаря больше Normally inventory display is scaled by UI size. This allows scaling the Inventory UI size up, but doesn't increase font size allowing more rows displayed. Normalerweise wird die Größe des Inventars mit der Größe der UI skaliert. Diese Einstellung allerdings vergrößert das Inventar bei gleichbleibender Schriftgröße, so dass mehr Einträge angzeigt werden können. + Обычно, окно инвентаря зависит от размеров пользовательского интерфейса. Эта настройка позволяет увеличить размер окна инвентаря в пользовательском интерфейсе, не увеличивая размера шрифтов, так что отображется большее количество строк. \ No newline at end of file diff --git a/addons/kestrel/stringtable.xml b/addons/kestrel/stringtable.xml index 5f54fd6489..baae118891 100644 --- a/addons/kestrel/stringtable.xml +++ b/addons/kestrel/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -34,7 +34,7 @@ Monitoraggio Balistico Attivo Applied Ballistics Meter Medidor Balístico Ativo - метеостанция + Метеостанция Open Kestrel diff --git a/addons/laser_selfdesignate/stringtable.xml b/addons/laser_selfdesignate/stringtable.xml index 03d28814ec..ca5ff1e687 100644 --- a/addons/laser_selfdesignate/stringtable.xml +++ b/addons/laser_selfdesignate/stringtable.xml @@ -1,14 +1,16 @@  - + Laser<br/>Designator On Lasermarkierer<br/>an + ЛЦУ<br/>ВКЛ Laser<br/>Designator Off Lasermarkierer<br/>aus + ЛЦУ<br/>ВЫКЛ \ No newline at end of file diff --git a/addons/laserpointer/stringtable.xml b/addons/laserpointer/stringtable.xml index 87b36618a6..279fdeb5e8 100644 --- a/addons/laserpointer/stringtable.xml +++ b/addons/laserpointer/stringtable.xml @@ -1,21 +1,22 @@  + - Laser Pointer (red) Laserpointer (rot) + Лазерный прицел (красный) Laser Pointer (green) Laserpointer (grün) + Лазерный прицел (зелёный) - Emits visible light. Strahlt sichtbares Licht aus. + Испускает узкий пучок видимого света. - <t color='#9cf953'>Use: </t>Turn Laser ON/OFF <t color='#9cf953'>Použití: </t>Zapnout/vypnout laser @@ -27,6 +28,5 @@ <t color='#9cf953'>Использовать: </t>вкл/выкл лазер <t color='#9cf953'>Usar: </t>encender/apagar láser - - + \ No newline at end of file diff --git a/addons/logistics_uavbattery/stringtable.xml b/addons/logistics_uavbattery/stringtable.xml index fbd9004290..3a8d958709 100644 --- a/addons/logistics_uavbattery/stringtable.xml +++ b/addons/logistics_uavbattery/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -24,7 +24,7 @@ Potřebuješ UAV-Baterii Você precisa de uma Bateria para VANT Hai bisogno di una Batteria UAV - Требуется аккумулятор БПЛА + Требуется аккумулятор для БПЛА Recharge @@ -36,7 +36,7 @@ Dobít Recarregar Ricarica - Подзарядить + Зарядить UAV Battery @@ -60,7 +60,7 @@ Používané k dobíjení UAV Usada para reabastecer VANT Usata per ricaricare la Batteria dell'UAV - Используется для подзарядки БПЛА + Используется для зарядки БПЛА Recharging ... @@ -72,7 +72,7 @@ Dobíjení ... Recarregando ... In ricarica ... - Подзаряжаем ... + Заряжается ... \ No newline at end of file diff --git a/addons/logistics_wirecutter/stringtable.xml b/addons/logistics_wirecutter/stringtable.xml index f23af6b1e5..4e08ec33e8 100644 --- a/addons/logistics_wirecutter/stringtable.xml +++ b/addons/logistics_wirecutter/stringtable.xml @@ -1,15 +1,17 @@  - + Wirecutter Drahtschneider Wirecutter + Клещи-кусачки Wirecutter Schneidet Draht. + Позволяют быстро перекусывать сеточные конструкции. Cut Fence @@ -21,7 +23,7 @@ Cortar Cerca Taglia Drótkerítés átvágása - Вырезать забор + Разрезать забор Cutting Fences / Wires ... @@ -33,7 +35,7 @@ Cortando Cerca / Arame ... Sto tagliando ... Drótok elvágása ... - Вырезаем забор / провода ... + Разрезаем забор / провода ... Fence cut @@ -45,7 +47,7 @@ Cerca cortada Fatto! Drótkerítés átvágva - Забор вырезан + Забор разрезан \ No newline at end of file diff --git a/addons/magazinerepack/stringtable.xml b/addons/magazinerepack/stringtable.xml index d8fd5ca177..8aa586b916 100644 --- a/addons/magazinerepack/stringtable.xml +++ b/addons/magazinerepack/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -78,16 +78,19 @@ Repacking Finished Wiederverpacken Fertig Reembalaje Finalizado + Перепаковка завершена Repacking Interrupted Umpacken Unterbrochen Reempaque Interrupted + Перепаковка прервана %1 Full and %2 Partial %1 Vollständigen und %2 Teilweisen %1 Total y %2 Parcial + %1 полных и %2 неполных \ No newline at end of file diff --git a/addons/magazines/stringtable.xml b/addons/magazines/stringtable.xml index c8f652fa39..db637f8064 100644 --- a/addons/magazines/stringtable.xml +++ b/addons/magazines/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -13,7 +13,7 @@ 6.5mm 30ks Svítící IR-DIM Zásobník Carregador de 30 projéteis traçantes IR-DIM de 6,5mm Caricatore 6.5mm 30Rnd Traccianti IR-DIM - Магазин из 30-и 6.5 мм трассирующих под ПНВ + Магазин из 30-ти 6.5 мм трассирующих под ПНВ 6.5mm IR-DIM @@ -25,7 +25,7 @@ 6.5mm IR-DIM 6,5mm IR-DIM 6.5 IR-DIM - 6.5 мм трассирущие под ПНВ + 6.5 мм ИК-трассирующие Caliber: 6.5x39 mm Tracer IR-DIM<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL @@ -49,7 +49,7 @@ 6.5mm 30ks SD Zásobník Carregador de 30 projéteis SD de 6,5mm Caricatore 6.5mm 30Rnd Sil. - Магазин из 30-и 6.5 мм дозвуковых + Магазин из 30-ти 6.5 мм дозвуковых 6.5mm SD @@ -85,7 +85,7 @@ 6.5mm 30ks AP Zásobník Carregador de 30 projéteis AP de 6,5mm Caricatore 6.5mm 30Rnd AP - Магазин из 30-и 6.5 мм бронебойных + Магазин из 30-ти 6.5 мм бронебойных 6.5mm AP @@ -122,7 +122,7 @@ 6.5mm 30ks Svítící IR-DIM Zásobník Carregador de 30 projéteis traçantes IR-DIM de 6,5mm Caricatore 6.5mm 30Rnd Traccianti IR-DIM - Магазин из 30-и 6.5 мм трассирующих под ПНВ + Магазин из 30-ти 6.5 мм трассирующих под ПНВ 6.5mm IR-DIM @@ -134,7 +134,7 @@ 6.5mm IR-DIM 6,5mm IR-DIM 6.5mm IR-DIM - 6.5 мм трассирущие под ПНВ + 6.5 мм ИК-трассирующие Caliber: 6.5x39 mm Tracer IR-DIM<br />Rounds: 30<br />Used in: Katiba @@ -158,7 +158,7 @@ 6.5mm 30ks SD Zásobník Carregador de 30 projéteis SD de 6,5mm Caricatore 6.5mm 30Rnd Sil. - Магазин из 30-и 6.5 мм дозвуковых + Магазин из 30-ти 6.5 мм дозвуковых 6.5mm SD @@ -194,7 +194,7 @@ 6.5mm 30ks AP Zásobník Carregador de 30 projéteis AP de 6,5mm Caricatore 6.5mm 30Rnd AP - Магазин из 30-и 6.5 мм бронебойных + Магазин из 30-ти 6.5 мм бронебойных 6.5mm AP @@ -231,7 +231,7 @@ 5.56mm 30ks Svítící IR-DIM Zásobník Carregador de 30 projéteis traçantes IR-DIM de 5,56mm Caricatore 5.56mm 30rnd Traccianti IR-DIM - Магазин из 30-и 5.56 мм трассирующих под ПНВ + Магазин из 30-ти 5.56 мм трассирующих под ПНВ 5.56mm IR-DIM @@ -243,7 +243,7 @@ 5.56mm IR-DIM 5,56mm IR-DIM 5.56mm IR-DIM - 5.56 мм трассирущие под ПНВ + 5.56 мм ИК-трассирующие Caliber: 5.56x45 mm Tracer IR-DIM<br />Rounds: 30<br />Used in: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR @@ -267,7 +267,7 @@ 5.56mm 30ks SD Zásobník Carregador de 30 projéteis SD de 5,56mm Caricatore 5.56mm 30Rnd Sil. - Магазин из 30-и 5.56 мм дозвуковых + Магазин из 30-ти 5.56 мм дозвуковых 5.56mm SD @@ -303,7 +303,7 @@ 5.56mm 30ks AP Zásobník Carregador de 30 projéteis AP de 5,56mm Caricatore 5.56mm 30Rnd AP - Магазин из 30-и 5.56 мм бронебойных + Магазин из 30-ти 5.56 мм бронебойных 5.56mm AP @@ -340,7 +340,7 @@ 7.62mm 20ks Svítící Zásobník Carregador de 20 projéteis traçantes de 7,62mm Caricatore 7.62mm 20Rnd Traccianti - Магазин из 20-и 7.62 мм трассирующих + Магазин из 20-ти 7.62 мм трассирующих 7.62mm Tracer @@ -376,7 +376,7 @@ 7.62mm 20ks Svítící IR-DIM Zásobník Carregador de 20 projéteis IR-DIM de 7,62mm Caricatore 7.62mm 20rnd Traccianti IR-DIM - Магазин из 20-и 7.62 мм трассирующих под ПНВ + Магазин из 20-ти 7.62 мм трассирующих под ПНВ 7.62mm IR-DIM @@ -388,7 +388,7 @@ 7.62mm IR-DIM 7,62mm IR-DIM 7.62mm IR-DIM - 7.62 мм трассирущие под ПНВ + 7.62 мм ИК-трассирующие Caliber: 7.62x51 mm Tracer IR-DIM<br />Rounds: 20<br />Used in: Mk18 ABR @@ -412,7 +412,7 @@ 7.62mm 20ks SD Zásobník Carregador de 20 projéteis SD de 7,62mm Caricatore 7.62mm 20Rnd Sil. - Магазин из 20-и 7.62 мм дозвуковых + Магазин из 20-ти 7.62 мм дозвуковых 7.62mm SD @@ -448,7 +448,7 @@ 7.62mm 20ks AP Zásobník Carregador de 20 projéteis AP de 7,62mm Caricatore 7.62mm 20Rnd AP - Магазин из 20-и 7.62 мм бронебойных + Магазин из 20-ти 7.62 мм бронебойных 7.62mm AP @@ -487,4 +487,4 @@ Calibro: 7.62x51mm M118LR<br />Munizioni:20<br />In uso su: M14 - + \ No newline at end of file diff --git a/addons/maptools/stringtable.xml b/addons/maptools/stringtable.xml index 5dd4578976..2e5fee49ab 100644 --- a/addons/maptools/stringtable.xml +++ b/addons/maptools/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -142,7 +142,7 @@ Kierunek: %1° Dirección: %1° Irány: %1 - Направление:%1 + Направление: %1° \ No newline at end of file diff --git a/addons/markers/stringtable.xml b/addons/markers/stringtable.xml index ea6d72990a..65da73a026 100644 --- a/addons/markers/stringtable.xml +++ b/addons/markers/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -9,7 +9,7 @@ Směr: %1° Kierunek: %1° Dirección: %1° - Направление: %1 + Направление: %1° \ No newline at end of file diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index a5dfdbba49..1d2b166e3c 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -1,974 +1,1010 @@  - + - - - Inject Atropine - Atropin - - - Inject Epinephrine - Epinephrine injizieren - Inyectar Epinefrina - Wtrzyknij adrenalinę - Aplikovat Adrenalin - Ввести андреналил - Adrénaline - Adrenalin - Injetar Epinefrina - Inietta Epinefrina - - - Inject Morphine - Morphin injizieren - Inyectar Morfina - Wstrzyknij morfinę - Aplikovat Morfin - Ввести морфин - Morphine - Morfium - Injetar Morfina - Inietta Morfina - - - Transfuse Blood - Bluttransfusion - Transfundir sangre - Przetocz krew - Transfúze krve - Перелить кровь - Transfusion - Infúzió - Transfundir Sangue - Effettua Trasfusione - - - Transfuse Plasma - Plasmatransfusion - - - Transfuse Saline - Salzlösungtransfusion - - - Apply Tourniquet - Aderpresse anwenden - - - Bandage - Verbinden - Venda - Bandaż - Obvázat - Pansement - Benda - Kötözés - Atadura - Перевязать - - - Bandage Head - Kopf verbinden - Vendar la cabeza - Bandażuj głowę - Obvázat hlavu - Перевязать голову - Pansement Tête - Fej kötözése - Atar Cabeça - Benda la testa - - - Bandage Torso - Torso verbinden - Vendar el torso - Bandażuj tors - Obvázat hruď - Перевязать торс - Pansement Torse - Felsőtest kötözése - Atar Tronco - Benda il torso - - - Bandage Left Arm - Arm links verbinden - Vendar el brazo izquierdo - Bandażuj lewe ramię - Obvázat levou ruku - Перевязать левую руку - Pansement Bras Gauche - Bal kar kötözése - Atar Braço Esquerdo - Benda il braccio sinistro - - - Bandage Right Arm - Arm rechts verbinden - Vendar el brazo derecho - Bandażuj prawe ramię - Obvázat pravou ruku - Перевязать правую руку - Pansement Bras Droit - Jobb kar kötözése - Atar Braço Direito - Benda il braccio destro - - - Bandage Left Leg - Bein links verbinden - Vendar la pierna izquierda - Bandażuj lewą nogę - Obvázat levou nohu - Перевязать левую ногу - Pansement Jambe Gauche - Bal láb kötözése - Atar Perna Esquerda - Benda la gamba sinistra - - - Bandage Right Leg - Bein rechts verbinden - Vendar la pierna derecha - Bandażuj prawą nogę - Obvázat pravou nohu - Перевязать правую ногу - Pansement Jambe Droite - Jobb láb kötözése - Atar Perna Direita - Benda la gamba destra - - - Injecting Morphine ... - Morphin injizieren ... - Inyectando Morfina ... - Wstrzykiwanie morfiny ... - Aplikuju Morfin ... - Введение морфина... - Injection de Morphine... - Morfium beadása... - Injetando Morfina ... - Inietto la morfina ... - - - Injecting Epinephrine ... - Epinephrin injizieren ... - Inyectando Epinefrina ... - Wstrzykiwanie adrenaliny ... - Aplikuju Adrenalin ... - Введение андреналина - Injection d'Adrénaline ... - Adrenalin beadása... - Injetando Epinefrina ... - Inietto l'epinefrina ... - - - Injecting Atropine ... - Atropin injizieren ... - - - Transfusing Blood ... - Bluttransfusion ... - Realizando transfusión ... - Przetaczanie krwi ... - Probíhá transfúze krve ... - Переливание крови... - Transfusion Sanguine ... - Infúzió... - Transfundindo Sangue ... - Effettuo la trasfusione ... - - - Transfusing Saline ... - Sallösungtransfusion ... - - - Transfusing Plasma ... - Plasmatransfusion ... - - - Bandaging ... - Verbinden ... - Vendando ... - Bandażowanie ... - Obvazuji ... - Pansement ... - Sto applicando la benda ... - Bekötözés... - Atando ... - Перевязывание.... - - - Applying Tourniquet ... - Aderpresse ... - - - Medical - Zdravotní - Médical - Sanitäter - Medico - Medyczne - Médico - Медик - Médico - - - Field Dressing - - - Packing Bandage - - - Elastic Bandage - - - QuikClot - - - Check Pulse - Puls überprüfen - - - Check Blood Pressure - Blutdruck messen - - - Triage Card - Triage Karte - - - Tourniquet - Tourniquet - - - Remove Tourniquet - Entferne Tourniquet - - - Give Blood IV (1000ml) - - - Give Blood IV (500ml) - - - Give Blood IV (250ml) - - - Give Plasma IV (1000ml) - - - Give Plasma IV (500ml) - - - Give Plasma IV (250ml) - - - Give Saline IV (1000ml) - - - Give Saline IV (500ml) - - - Give Saline IV (250ml) - - - Minor - Gering - - - Delayed - - - Immediate - - - Deceased - - - None - - - Normal breathing - Дыхание в норме - Respiración normal - Respiration Normale - Normalny oddech - - - No breathing - Дыхания нет - No respira - Apnée - Brak oddechu - - - Difficult breathing - Дыхание затруднено - Dificultad para respirar - Difficultée Respiratoire - Trudności z oddychaniem - - - Almost no breathing - Дыхания почти нет - Casi sin respirar - Respiration Faible - Prawie brak oddechu - - - Bleeding - Кровотечение - Sangrando - Seignement - Krwawienie zewnętrzne - - - In Pain - Испытывает боль - Con Dolor - A De La Douleur - W bólu - - - Lost a lot of Blood - Большая кровопотеря - Mucha Sangre perdida - A Perdu Bcp de Sang - Stracił dużo krwi - - - Tourniquet [CAT] - Жгут - Torniquete [CAT] - Garot [CAT] - Opaska uciskowa [CAT] - - - Receiving IV [%1ml] - - - - Bandage (Basic) - Повязка (обычная) - Vendaje (Básico) - Bandage (Standard) - Bandaż (jałowy) - - - Used to cover a wound - Для перевязки ран - Utilizado para cubrir una herida - Utilisé Pour Couvrir Une Blessure - Używany w celu przykrycia i ochrony miejsca zranienia - - - A dressing, that is a particular material used to cover a wound, which is applied over the wound + + + Inject Atropine + Atropin + Ввести атропин + + + Inject Epinephrine + Epinephrine injizieren + Inyectar Epinefrina + Wtrzyknij adrenalinę + Aplikovat Adrenalin + Ввести андреналил + Adrénaline + Adrenalin + Injetar Epinefrina + Inietta Epinefrina + + + Inject Morphine + Morphin injizieren + Inyectar Morfina + Wstrzyknij morfinę + Aplikovat Morfin + Ввести морфин + Morphine + Morfium + Injetar Morfina + Inietta Morfina + + + Transfuse Blood + Bluttransfusion + Transfundir sangre + Przetocz krew + Transfúze krve + Перелить кровь + Transfusion + Infúzió + Transfundir Sangue + Effettua Trasfusione + + + Transfuse Plasma + Plasmatransfusion + Перелить плазму + + + Transfuse Saline + Salzlösungtransfusion + Влить физраствор + + + Apply Tourniquet + Aderpresse anwenden + Наложить жгут + + + Bandage + Verbinden + Venda + Bandaż + Obvázat + Pansement + Benda + Kötözés + Atadura + Перевязать + + + Bandage Head + Kopf verbinden + Vendar la cabeza + Bandażuj głowę + Obvázat hlavu + Перевязать голову + Pansement Tête + Fej kötözése + Atar Cabeça + Benda la testa + + + Bandage Torso + Torso verbinden + Vendar el torso + Bandażuj tors + Obvázat hruď + Перевязать торс + Pansement Torse + Felsőtest kötözése + Atar Tronco + Benda il torso + + + Bandage Left Arm + Arm links verbinden + Vendar el brazo izquierdo + Bandażuj lewe ramię + Obvázat levou ruku + Перевязать левую руку + Pansement Bras Gauche + Bal kar kötözése + Atar Braço Esquerdo + Benda il braccio sinistro + + + Bandage Right Arm + Arm rechts verbinden + Vendar el brazo derecho + Bandażuj prawe ramię + Obvázat pravou ruku + Перевязать правую руку + Pansement Bras Droit + Jobb kar kötözése + Atar Braço Direito + Benda il braccio destro + + + Bandage Left Leg + Bein links verbinden + Vendar la pierna izquierda + Bandażuj lewą nogę + Obvázat levou nohu + Перевязать левую ногу + Pansement Jambe Gauche + Bal láb kötözése + Atar Perna Esquerda + Benda la gamba sinistra + + + Bandage Right Leg + Bein rechts verbinden + Vendar la pierna derecha + Bandażuj prawą nogę + Obvázat pravou nohu + Перевязать правую ногу + Pansement Jambe Droite + Jobb láb kötözése + Atar Perna Direita + Benda la gamba destra + + + Injecting Morphine ... + Morphin injizieren ... + Inyectando Morfina ... + Wstrzykiwanie morfiny ... + Aplikuju Morfin ... + Введение морфина... + Injection de Morphine... + Morfium beadása... + Injetando Morfina ... + Inietto la morfina ... + + + Injecting Epinephrine ... + Epinephrin injizieren ... + Inyectando Epinefrina ... + Wstrzykiwanie adrenaliny ... + Aplikuju Adrenalin ... + Введение андреналина ... + Injection d'Adrénaline ... + Adrenalin beadása... + Injetando Epinefrina ... + Inietto l'epinefrina ... + + + Injecting Atropine ... + Atropin injizieren ... + Введение атропина ... + + + Transfusing Blood ... + Bluttransfusion ... + Realizando transfusión ... + Przetaczanie krwi ... + Probíhá transfúze krve ... + Переливание крови... + Transfusion Sanguine ... + Infúzió... + Transfundindo Sangue ... + Effettuo la trasfusione ... + + + Transfusing Saline ... + Sallösungtransfusion ... + Вливание физраствора ... + + + Transfusing Plasma ... + Plasmatransfusion ... + Переливание плзмы ... + + + Bandaging ... + Verbinden ... + Vendando ... + Bandażowanie ... + Obvazuji ... + Pansement ... + Sto applicando la benda ... + Bekötözés... + Atando ... + Перевязывание ... + + + Applying Tourniquet ... + Aderpresse ... + Наложение жгута ... + + + Medical + Zdravotní + Médical + Sanitäter + Medico + Medyczne + Médico + Медик + Médico + + + Field Dressing + Бинтовая повязка + + + Packing Bandage + Компресионный пакет + + + Elastic Bandage + Давящая повязка + + + QuikClot + QuickClot + + + Check Pulse + Puls überprüfen + Проверить пульс + + + Check Blood Pressure + Blutdruck messen + Проверить кровяное давление + + + Triage Card + Triage Karte + Медкарта + + + Tourniquet + Tourniquet + Жгут + + + Remove Tourniquet + Entferne Tourniquet + Снять жгут + + + Give Blood IV (1000ml) + Дать кровь для в/в вливания (1000 мл) + + + Give Blood IV (500ml) + Дать кровь для в/в вливания (500 мл) + + + Give Blood IV (250ml) + Дать кровь для в/в вливания (250 мл) + + + Give Plasma IV (1000ml) + Дать плазму для в/в вливания (1000 мл) + + + Give Plasma IV (500ml) + Дать плазму для в/в вливания (500 мл) + + + Give Plasma IV (250ml) + Дать плазму для в/в вливания (250 мл) + + + Give Saline IV (1000ml) + Дать физраствор для в/в вливания (1000 мл) + + + Give Saline IV (500ml) + Дать физраствор для в/в вливания (500 мл) + + + Give Saline IV (250ml) + Дать физраствор для в/в вливания (250 мл) + + + Minor + Gering + Незначительные травмы + + + Delayed + Груз 300 + + + Immediate + Помощь отложена + + + Deceased + Груз 200 + + + None + Нет + + + Normal breathing + Дыхание в норме + Respiración normal + Respiration Normale + Normalny oddech + + + No breathing + Дыхания нет + No respira + Apnée + Brak oddechu + + + Difficult breathing + Дыхание затруднено + Dificultad para respirar + Difficultée Respiratoire + Trudności z oddychaniem + + + Almost no breathing + Дыхания почти нет + Casi sin respirar + Respiration Faible + Prawie brak oddechu + + + Bleeding + Кровотечение + Sangrando + Seignement + Krwawienie zewnętrzne + + + In Pain + Испытывает боль + Con Dolor + A De La Douleur + W bólu + + + Lost a lot of Blood + Большая кровопотеря + Mucha Sangre perdida + A Perdu Bcp de Sang + Stracił dużo krwi + + + Tourniquet [CAT] + Жгут + Torniquete [CAT] + Garot [CAT] + Opaska uciskowa [CAT] + + + Receiving IV [%1ml] + Принимается переливание [%1 мл] + + + Bandage (Basic) + Повязка (обычная) + Vendaje (Básico) + Bandage (Standard) + Bandaż (jałowy) + + + Used to cover a wound + Для перевязки ран + Utilizado para cubrir una herida + Utilisé Pour Couvrir Une Blessure + Używany w celu przykrycia i ochrony miejsca zranienia + + + A dressing, that is a particular material used to cover a wound, which is applied over the wound once bleeding has been stemmed. - Повязка, накладываемая поверх раны после остановки кровотечения. - Un apósito, material específico utilizado para cubrir una herida, se aplica sobre la herida una vez + Повязка, накладываемая поверх раны после остановки кровотечения. + Un apósito, material específico utilizado para cubrir una herida, se aplica sobre la herida una vez ha dejado de sangrar. - C'est un bandage, qui est fait d'un matériel spécial utiliser pour couvrir une blessure, qui peut + C'est un bandage, qui est fait d'un matériel spécial utiliser pour couvrir une blessure, qui peut etre appliquer des que le seignement as ete stopper. - Opatrunek materiałowy, używany do przykrywania ran, zakładany na ranę po zatamowaniu krwawienia. + Opatrunek materiałowy, używany do przykrywania ran, zakładany na ranę po zatamowaniu krwawienia. - - - Packing Bandage - Тампонирующая повязка - Vendaje Compresivo - Bandage Mèche - Bandaż (uciskowy) - - - Used to pack medium to large wounds and stem the bleeding - Для тампонирования ран среднего и большого размера и остановки кровотечения. - Se utiliza para vendar heridas medianas y grandes y detener el sangrado - Utiliser pour remplire la cavité créé dans une blessure moyenne et grande. - Używany w celu opatrywania średnich i dużych ran oraz tamowania krwawienia. - - - A bandage used to pack the wound to stem bleeding and facilitate wound healing. Packing a wound is + + + Packing Bandage + Тампонирующая повязка + Vendaje Compresivo + Bandage Mèche + Bandaż (uciskowy) + + + Used to pack medium to large wounds and stem the bleeding + Для тампонирования ран среднего и большого размера и остановки кровотечения. + Se utiliza para vendar heridas medianas y grandes y detener el sangrado + Utiliser pour remplire la cavité créé dans une blessure moyenne et grande. + Używany w celu opatrywania średnich i dużych ran oraz tamowania krwawienia. + + + A bandage used to pack the wound to stem bleeding and facilitate wound healing. Packing a wound is an option in large polytrauma injuries. - Повязка для тампонирования раны, остановки кровотечения и лучшего заживления. При тяжелых + Повязка для тампонирования раны, остановки кровотечения и лучшего заживления. При тяжелых сочетанных ранениях возможно тампонирование раны. - Se utiliza para detener la hemorragia de una herida y favorecer su cicatrización. Se usa en grandes + Se utiliza para detener la hemorragia de una herida y favorecer su cicatrización. Se usa en grandes lesiones o politraumatismos. - Un bandage servent a etre inseré dans les blessure pour éponger le seignement et faciliter la + Un bandage servent a etre inseré dans les blessure pour éponger le seignement et faciliter la guerrison. Ce bandage est une option pour soigner les lession de politrauma. - Opatrunek stosowany w celu zatrzymania krwawienia i osłony większych ran. - - - Bandage (Elastic) - Повязка (давящая) - Vendaje (Elástico) - Bandage (Élastique) - Bandaż (elastyczny) - - - Bandage kit, Elastic - Давящая повязка - Vendaje (Elástico) - Bandage Compressif Élastique - Zestaw bandaży elastycznych. - - - - - Ce bandage peut etre utiliser pour compresser la plaie afin de ralentire le seignement et assurer la + Opatrunek stosowany w celu zatrzymania krwawienia i osłony większych ran. + + + Bandage (Elastic) + Повязка (давящая) + Vendaje (Elástico) + Bandage (Élastique) + Bandaż (elastyczny) + + + Bandage kit, Elastic + Давящая повязка + Vendaje (Elástico) + Bandage Compressif Élastique + Zestaw bandaży elastycznych. + + + + + Ce bandage peut etre utiliser pour compresser la plaie afin de ralentire le seignement et assurer la tenue du bandage lors de mouvment. - Elastyczna opaska podtrzymująca opatrunek oraz usztywniająca okolice stawów. - Brinda una compresión uniforme y ofrece soporte extra a una zona lesionada - - - Tourniquet (CAT) - Жгут - Torniquete (CAT) - Garot (CAT) - Staza (typ. CAT) - - - Slows down blood loss when bleeding - Уменьшает кровопотерю при кровотечении. - Reduce la velocidad de pérdida de sangre - Ralentit le seignement - Zmniejsza ubytek krwi z kończyn w przypadku krwawienia. - - - A constricting device used to compress venous and arterial circulation in effect inhibiting or + Elastyczna opaska podtrzymująca opatrunek oraz usztywniająca okolice stawów. + Brinda una compresión uniforme y ofrece soporte extra a una zona lesionada + + + Tourniquet (CAT) + Жгут + Torniquete (CAT) + Garot (CAT) + Staza (typ. CAT) + + + Slows down blood loss when bleeding + Уменьшает кровопотерю при кровотечении. + Reduce la velocidad de pérdida de sangre + Ralentit le seignement + Zmniejsza ubytek krwi z kończyn w przypadku krwawienia. + + + A constricting device used to compress venous and arterial circulation in effect inhibiting or slowing blood flow and therefore decreasing loss of blood. - Жгут используется для прижатия сосудов, приводящего к остановке или значительному уменьшению + Жгут используется для прижатия сосудов, приводящего к остановке или значительному уменьшению кровотечения и сокращению кровопотери. - Dispositivo utilizado para eliminar el pulso distal y de ese modo controlar la pérdida de sangre + Dispositivo utilizado para eliminar el pulso distal y de ese modo controlar la pérdida de sangre - Un appareil servent a compresser les artères et veines afin de reduire la perte de sang. - Opaska zaciskowa CAT służy do tamowanie krwotoków w sytuacji zranienia kończyn z masywnym + Un appareil servent a compresser les artères et veines afin de reduire la perte de sang. + Opaska zaciskowa CAT służy do tamowanie krwotoków w sytuacji zranienia kończyn z masywnym krwawieniem tętniczym lub żylnym. - - - Morphine autoinjector - Морфин в автоматическом шприце - Morfina auto-inyectable - Auto-injecteur de Morphine - Autostrzykawka z morfiną - - - Used to combat moderate to severe pain experiences - Для снятия средних и сильных болевых ощущений. - Usado para combatir los estados dolorosos moderados a severos - Utiliser pour contrer les douleurs modéré à severes. - Morfina. Ma silne działanie przeciwbólowe. - - - An analgesic used to combat moderate to severe pain experiences. - Анальгетик для снятия средних и сильных болевых ощущений. - Analgésico usado para combatir los estados dolorosos de moderado a severo. - Un Analgésique puissant servant a contrer les douleur modéré a severe. - Organiczny związek chemiczny z grupy alkaloidów. Ma silne działanie przeciwbólowe. - - - Atropin autoinjector - Атропин в автоматическом шприце - Atropina auto-inyectable - Auto-injecteur d'Atropine - Autostrzykawka AtroPen - - - Used in NBC scenarios - Применяется для защиты от ОМП - Usado en escenarios NBQ - Utiliser en cas d'attaque CBRN - Atropina. Stosowana jako lek rozkurczowy i środek rozszerzający źrenice. - - - A drug used by the Military in NBC scenarios. - Препарат, используемый в войсках для защиты от оружия массового поражения. - Medicamento usado por Militares en escenarios NBQ - Médicament utilisé par l'armée en cas d'attaque CBRN - Atropina. Stosowana jako lek rozkurczowy i środek rozszerzający źrenice. Środek stosowany w + + + Morphine autoinjector + Морфин в пневмошприце + Morfina auto-inyectable + Auto-injecteur de Morphine + Autostrzykawka z morfiną + + + Used to combat moderate to severe pain experiences + Для снятия средних и сильных болевых ощущений. + Usado para combatir los estados dolorosos moderados a severos + Utiliser pour contrer les douleurs modéré à severes. + Morfina. Ma silne działanie przeciwbólowe. + + + An analgesic used to combat moderate to severe pain experiences. + Анальгетик для снятия средних и сильных болевых ощущений. + Analgésico usado para combatir los estados dolorosos de moderado a severo. + Un Analgésique puissant servant a contrer les douleur modéré a severe. + Organiczny związek chemiczny z grupy alkaloidów. Ma silne działanie przeciwbólowe. + + + Atropin autoinjector + Атропин в пневмошприце + Atropina auto-inyectable + Auto-injecteur d'Atropine + Autostrzykawka AtroPen + + + Used in NBC scenarios + Применяется для защиты от ОМП + Usado en escenarios NBQ + Utiliser en cas d'attaque CBRN + Atropina. Stosowana jako lek rozkurczowy i środek rozszerzający źrenice. + + + A drug used by the Military in NBC scenarios. + Препарат, используемый в войсках для защиты от оружия массового поражения. + Medicamento usado por Militares en escenarios NBQ + Médicament utilisé par l'armée en cas d'attaque CBRN + Atropina. Stosowana jako lek rozkurczowy i środek rozszerzający źrenice. Środek stosowany w przypadku zagrożeń NBC. - - - Epinephrine autoinjector - Адреналин в автоматическом шприце - Epinefrina auto-inyectable - Auto-injecteur d'épinéphrine - Autostrzykawka EpiPen - - - Increase heart rate and counter effects given by allergic reactions - Стимулирует работу сердца и купирует аллергические реакции. - Aumenta la frecuencia cardiaca y contraresta los efectos de las reacciones alérgicas - Augmente la Fréquance cadiaque et contré les effet d'une reaction Anaphylactique - Adrenalina. Zwiększa puls i przeciwdziała efektom wywołanym przez reakcje alergiczne - - - A drug that works on a sympathetic response to dilate the bronchi, increase heart rate and counter + + + Epinephrine autoinjector + Адреналин в пневмошприце + Epinefrina auto-inyectable + Auto-injecteur d'épinéphrine + Autostrzykawka EpiPen + + + Increase heart rate and counter effects given by allergic reactions + Стимулирует работу сердца и купирует аллергические реакции. + Aumenta la frecuencia cardiaca y contraresta los efectos de las reacciones alérgicas + Augmente la Fréquance cadiaque et contré les effet d'une reaction Anaphylactique + Adrenalina. Zwiększa puls i przeciwdziała efektom wywołanym przez reakcje alergiczne + + + A drug that works on a sympathetic response to dilate the bronchi, increase heart rate and counter such effects given by allergic reactions (anaphylaxis). Used in sudden cardiac arrest scenarios with decreasing positive outcomes. - Препарат, вызывающий симпатическую реакцию, приводящую к расширению бронхов, увеличению частоты + Препарат, вызывающий симпатическую реакцию, приводящую к расширению бронхов, увеличению частоты сердечных сокращений и купированию аллергических реакций (анафилактического шока). Применяется при остановке сердца с уменьшением вероятности благоприятного исхода. - Medicamento que dilata los bronquios, aumenta la frecuencia cardiaca y contrarresta los efectos de + Medicamento que dilata los bronquios, aumenta la frecuencia cardiaca y contrarresta los efectos de las reacciones alérgicas (anafilaxis). Se utiliza en caso de paros cardiacos repentinos. - Un medicament qui fonctione sur le systeme sympatique créan une dilatation des bronches, augmente la + Un medicament qui fonctione sur le systeme sympatique créan une dilatation des bronches, augmente la fréquance cardiaque et contre les effet d'une reaction alergique (anaphylaxie). Utiliser lors d'arret cardio-respiratoire pour augmenté les chances retrouver un ryhtme. - EpiPen z adrenaliną ma działanie sympatykomimetyczne, tj. pobudza receptory alfa- i + EpiPen z adrenaliną ma działanie sympatykomimetyczne, tj. pobudza receptory alfa- i beta-adrenergiczne. Pobudzenie układu współczulnego prowadzi do zwiększenia częstotliwości pracy serca, zwiększenia pojemności wyrzutowej serca i przyśpieszenia krążenia wieńcowego. Pobudzenie oskrzelowych receptorów beta-adrenergicznych wywołuje rozkurcz mięśni gładkich oskrzeli, co w efekcie zmniejsza towarzyszące oddychaniu świsty i duszności. - - - Plasma IV (1000ml) - Плазма для в/в вливания (1000 мл) - Plasma Intravenoso (1000ml) - Plasma Sanguin IV (1000ml) - Osocze IV (1000ml) - - - A volume-expanding blood supplement. - Дополнительный препарат, применяемый при возмещении объема крови. - Suplemento para expandir el volumen sanguíneo. - Supplement visant a remplacer les volume sanguin - Składnik krwi, używany do zwiększenia jej objętości. - - - A volume-expanding blood supplement. - Дополнительный препарат, применяемый при возмещении объема крови. - Suplemento para expandir el volumen sanguíneo. - Supplement visant a remplacer le volume sanguin et remplace les plaquettes. - Składnik krwi, używany do zwiększenia jej objętości. - - - Plasma IV (500ml) - Плазма для в/в вливания (500 мл) - Plasma Intravenoso (500ml) - Plasma Sanguin IV (500ml) - Osocze IV (500ml) - - - Plasma IV (250ml) - Плазма для в/в вливания (250 мл) - Plasma Intravenoso (250ml) - Plasma Sanguin (250ml) - Osocze IV (250ml) - - - Blood IV (1000ml) - Кровь для переливания (1000 мл) - Sangre Intravenosa (1000ml) - Cullot Sanguin IV (1000ml) - Krew IV (1000ml) - - - Blood IV, for restoring a patients blood (keep cold) - Пакет крови для возмещения объема потерянной крови (хранить в холодильнике) - Sangre Intravenosa, para restarurar el volumen sanguíneo (mantener frío) - Cullot Sanguin IV, pour remplacer le volume sanguin (garder Réfrigeré) - Krew IV, używana do uzupełnienia krwi u pacjenta, trzymać w warunkach chłodniczych - - - O Negative infusion blood used in strict and rare events to replenish blood supply usually + + + Plasma IV (1000ml) + Плазма для в/в вливания (1000 мл) + Plasma Intravenoso (1000ml) + Plasma Sanguin IV (1000ml) + Osocze IV (1000ml) + + + A volume-expanding blood supplement. + Дополнительный препарат, применяемый при возмещении объема крови. + Suplemento para expandir el volumen sanguíneo. + Supplement visant a remplacer les volume sanguin + Składnik krwi, używany do zwiększenia jej objętości. + + + A volume-expanding blood supplement. + Дополнительный препарат, применяемый при возмещении объема крови. + Suplemento para expandir el volumen sanguíneo. + Supplement visant a remplacer le volume sanguin et remplace les plaquettes. + Składnik krwi, używany do zwiększenia jej objętości. + + + Plasma IV (500ml) + Плазма для в/в вливания (500 мл) + Plasma Intravenoso (500ml) + Plasma Sanguin IV (500ml) + Osocze IV (500ml) + + + Plasma IV (250ml) + Плазма для в/в вливания (250 мл) + Plasma Intravenoso (250ml) + Plasma Sanguin (250ml) + Osocze IV (250ml) + + + Blood IV (1000ml) + Кровь для переливания (1000 мл) + Sangre Intravenosa (1000ml) + Cullot Sanguin IV (1000ml) + Krew IV (1000ml) + + + Blood IV, for restoring a patients blood (keep cold) + Пакет крови для возмещения объема потерянной крови (хранить в холодильнике) + Sangre Intravenosa, para restarurar el volumen sanguíneo (mantener frío) + Cullot Sanguin IV, pour remplacer le volume sanguin (garder Réfrigeré) + Krew IV, używana do uzupełnienia krwi u pacjenta, trzymać w warunkach chłodniczych + + + O Negative infusion blood used in strict and rare events to replenish blood supply usually conducted in the transport phase of medical care. - Кровь I группы, резус-отрицательная, применяется по жизненным показаниям для возмещения объема + Кровь I группы, резус-отрицательная, применяется по жизненным показаниям для возмещения объема потерянной крови на догоспитальном этапе оказания медицинской помощи. - Cullot Sanguin O- ,utiliser seulement lors de perte sanguine majeur afin de remplacer le volume + Cullot Sanguin O- ,utiliser seulement lors de perte sanguine majeur afin de remplacer le volume sanguin perdu. Habituelment utiliser lors du transport ou dans un etablisement de soin. - Krew 0 Rh-, używana w rzadkich i szczególnych przypadkach do uzupełnienia krwi u pacjenta, zazwyczaj + Krew 0 Rh-, używana w rzadkich i szczególnych przypadkach do uzupełnienia krwi u pacjenta, zazwyczaj w trakcie fazie transportu rannej osoby do szpitala. - Utilice sólo durante gran pérdida de sangre para reemplazar el volumen de sangre perdido. Uso + Utilice sólo durante gran pérdida de sangre para reemplazar el volumen de sangre perdido. Uso habitual durante el transporte de heridos. - - - Blood IV (500ml) - Кровь для переливания (500 мл) - Sangre Intravenosa (500ml) - Cullot Sanguin IV (500ml) - Krew IV (500ml) - - - Blood IV (250ml) - Кровь для переливания (250 мл) - Sangre Intravenosa (250ml) - Cullot Sanguin IV (250ml) - Krew IV (250ml) - - - Saline IV (1000ml) - Физраствор для в/в вливания (1000 мл) - Solución Salina Intravenosa (1000ml) - solution Saline 0.9% IV (1000ml) - Solanka 0,9% IV (1000ml) - - - Saline IV, for restoring a patients blood - Пакет физраствора для возмещения объема потерянной крови - Solución Salina Intravenosa, para restaurar el volumen sanguíneo - Solution Saline 0.9% IV, pour retablir temporairement la tention arteriel - Solanka 0,9%, podawana dożylnie (IV), używana w celu uzupełnienia krwi u pacjenta - - - A medical volume-replenishing agent introduced into the blood system through an IV infusion. + + + Blood IV (500ml) + Кровь для переливания (500 мл) + Sangre Intravenosa (500ml) + Cullot Sanguin IV (500ml) + Krew IV (500ml) + + + Blood IV (250ml) + Кровь для переливания (250 мл) + Sangre Intravenosa (250ml) + Cullot Sanguin IV (250ml) + Krew IV (250ml) + + + Saline IV (1000ml) + Физраствор для в/в вливания (1000 мл) + Solución Salina Intravenosa (1000ml) + solution Saline 0.9% IV (1000ml) + Solanka 0,9% IV (1000ml) + + + Saline IV, for restoring a patients blood + Пакет физраствора для возмещения объема потерянной крови + Solución Salina Intravenosa, para restaurar el volumen sanguíneo + Solution Saline 0.9% IV, pour retablir temporairement la tention arteriel + Solanka 0,9%, podawana dożylnie (IV), używana w celu uzupełnienia krwi u pacjenta + + + A medical volume-replenishing agent introduced into the blood system through an IV infusion. - Пакет физиологического раствора для возмещения объема потерянной крови путем внутривенного + Пакет физиологического раствора для возмещения объема потерянной крови путем внутривенного вливания. - Suero fisiológico inoculado al torrente sanguíneo de forma intravenosa. - Un remplacment temporaire pour rétablir la tention artériel lors de perte sanguine, étant ajouter + Suero fisiológico inoculado al torrente sanguíneo de forma intravenosa. + Un remplacment temporaire pour rétablir la tention artériel lors de perte sanguine, étant ajouter par intraveineuse - Używany w medycynie w formie płynu infuzyjnego jako środek nawadniający i uzupełniający niedobór + Używany w medycynie w formie płynu infuzyjnego jako środek nawadniający i uzupełniający niedobór elektrolitów, podawany dożylnie (IV). - - - Saline IV (500ml) - Физраствор для в/в вливания (500 мл) - Solución Salina Intravenosa (500ml) - Solution Saline 0.9% IV (500ml) - Solanka 0,9% IV (500ml) - - - Saline IV (250ml) - Физраствор для в/в вливания (250 мл) - Solución Salina Intravenosa (250ml) - Solution Saline 0.9% IV (250ml) - Solanka 0,9% IV (250ml) - - - Basic Field Dressing (QuikClot) - Первичный перевязочный пакет (QuikClot) - Vendaje Básico (Coagulante) - Bandage Regulier (Coagulant) - Opatrunek QuikClot - - - QuikClot bandage - Гемостатический пакет QuikClot - Venda Coagulante - Bandage coagulant - Podstawowy opatrunek stosowany na rany - - - - - Un bandage servant a coaguler les seignements mineur à moyen. - Proszkowy opatrunek adsorbcyjny przeznaczony do tamowania zagrażających życiu krwawień średniej i + + + Saline IV (500ml) + Физраствор для в/в вливания (500 мл) + Solución Salina Intravenosa (500ml) + Solution Saline 0.9% IV (500ml) + Solanka 0,9% IV (500ml) + + + Saline IV (250ml) + Физраствор для в/в вливания (250 мл) + Solución Salina Intravenosa (250ml) + Solution Saline 0.9% IV (250ml) + Solanka 0,9% IV (250ml) + + + Basic Field Dressing (QuikClot) + Первичный перевязочный пакет (QuikClot) + Vendaje Básico (Coagulante) + Bandage Regulier (Coagulant) + Opatrunek QuikClot + + + QuikClot bandage + Гемостатический пакет QuikClot + Venda Coagulante + Bandage coagulant + Podstawowy opatrunek stosowany na rany + + + + + Un bandage servant a coaguler les seignements mineur à moyen. + Proszkowy opatrunek adsorbcyjny przeznaczony do tamowania zagrażających życiu krwawień średniej i dużej intensywności. - Vendaje Hemostático con coagulante que detiene el sangrado. - - - Personal Aid Kit - Аптечка - Kit de Soporte Vital Avanzado - Équipement de support Vitale - Apteczka osobista - - - Includes various treatment kit needed for stitching or advanced treatment - Содержит различные материалы и инструменты для зашивания ран и оказания специальной медпомощи. + Vendaje Hemostático con coagulante que detiene el sangrado. + + + Personal Aid Kit + Аптечка + Kit de Soporte Vital Avanzado + Équipement de support Vitale + Apteczka osobista + + + Includes various treatment kit needed for stitching or advanced treatment + Содержит различные материалы и инструменты для зашивания ран и оказания специальной медпомощи. - Incluye material médico para tratamientos avanzados - Inclue du matériel medical pour les traitement avancé, tel les point de suture. - Zestaw środków medycznych do opatrywania ran i dodatkowego leczenia po-urazowego - - - - - - - - - Surgical Kit - Хирургический набор - Kit Quirúrgico - - - Surgical Kit for in field advanced medical treatment - Набор для хирургической помощи в полевых условиях - Kit Quirúrgico para el tratamiento avanzado en el campo de batalla - - - Surgical Kit for in field advanced medical treatment - Набор для хирургической помощи в полевых условиях - Kit Quirúrgico para el tratamiento avanzado en el campo de batalla - - - Bodybag - Мешок для трупов - Bolsa para cadáveres - - - A bodybag for dead bodies - Мешок для упаковки трупов - Bolsa para cadáveres - - - A bodybag for dead bodies - Мешок для упаковки трупов - Bolsa para cadáveres - - - - Blood Pressure - Артериальное давление - Presión Arterial - - - Checking Blood Pressure.. - Проверка артериального давления... - Comprobando Presión Arterial... - - - You checked %1 - Вы осмотрели раненого %1 - Examinando a %1 - - - You find a blood pressure of %2/%3 - Артериальное давление %2/%3 - La Presión Arterial es %2/%3 - - - You find a low blood pressure - Давление низкое - La Presión Arterial es baja - - - You find a normal blood pressure - Давление нормальное - La Presión Arterial es normal - - - You find a high blood pressure - Давление высокое - La Presión Arterial es alta - - - You find no blood pressure - Давления нет - No hay Presión Arterial - - - You fail to find a blood pressure - Артериальное давление не определяется - No puedes encontrar Presión Arterial - - - Pulse - Пульс - Pulso - - - Checking Heart Rate.. - Проверка пульса... - Comprobando Pulso... - - - You checked %1 - Вы осмотрели раненого %1 - Examinando a %1 - - - You find a Heart Rate of %2 - Пульс %2 уд./мин. - El Pulso es %2 - - - You find a weak Heart Rate - Пульс слабый - El Pulso es débil - - - You find a strong Heart Rate - Пульс учащенный - El Pulso está acelerado - - - You find a normal Heart Rate - Пульс в норме - El Pulso es bueno - - - You find no Heart Rate - Пульс не прощупывается - No tiene Pulso - - - Response - Реакция - Reacciona - - - You check response of patient - Вы проверяете реакцию раненого - Compruebas si el paciente reacciona - - - %1 is responsive - %1 реагирует на раздражители - %1 ha reaccionado - - - %1 is not responsive - %1 не реагирует - %1 no reacciona - - - You checked %1 - Вы осмотрели раненого %1 - Examinas a %1 - - - Bandaged - Повязка наложена - Vendado - - - You bandage %1 (%2) - Вы перевязали раненого %1 (%2) - Aplicas vendaje a %1 en %2 - - - %1 is bandaging you - %1 перевязывает вас - %1 te está vendando - - - You start stitching injures from %1 (%2) - Вы зашиваете ранения от %1 (%2) - Estás suturando heridas de %1 en %2 - - - Stitching - Наложение швов - Suturando - - - You treat the airway of %1 - Вы интубируете раненого %1 - Estás intubando a %1 - - - Airway - Дыхательные пути - Vías Aéreas - - - %1 is treating your airway - %1 проводит вам интубацию - %1 te está intubando - - - Drag - Ziehen - Arrastrar - Ciągnij - Táhnout - Тащить - Tracter - Húzás - Arrastar - Trascina - - - Carry - Tragen - Cargar - Nieś - Nést - Нести - Porter - Cipelés - Carregar - Trasporta - - - Release - Loslassen - Soltar - Połóż - Položit - Отпустить - Déposer - Elenged - Largar - Lascia - - - Load Patient Into - Patient Einladen - Cargar el paciente en - Załaduj pacjenta - Naložit pacianta do - Погрузить пациента в - Embarquer le Patient - Sebesült berakása - Carregar Paciente Em - Carica paziente nel - - - Unload Patient - Patient Ausladen - Descargar el paciente - Wyładuj pacjenta - Vyložit pacienta - Выгрузить пациента - Débarquer le Patient - Sebesült kihúzása - Descarregar Paciente - Scarica il paziente - - - Unload patient - - - Load patient - - - Place body in bodybag - - - Placing body in bodybag - - - - %1 has bandaged patient - - - %1 used %2 - - - %1 has given an IV - - - %1 applied a tourniquet - - - - + Incluye material médico para tratamientos avanzados + Inclue du matériel medical pour les traitement avancé, tel les point de suture. + Zestaw środków medycznych do opatrywania ran i dodatkowego leczenia po-urazowego + + + + + + + + + Surgical Kit + Хирургический набор + Kit Quirúrgico + + + Surgical Kit for in field advanced medical treatment + Набор для хирургической помощи в полевых условиях + Kit Quirúrgico para el tratamiento avanzado en el campo de batalla + + + Surgical Kit for in field advanced medical treatment + Набор для хирургической помощи в полевых условиях + Kit Quirúrgico para el tratamiento avanzado en el campo de batalla + + + Bodybag + Мешок для трупов + Bolsa para cadáveres + + + A bodybag for dead bodies + Мешок для упаковки трупов + Bolsa para cadáveres + + + A bodybag for dead bodies + Мешок для упаковки трупов + Bolsa para cadáveres + + + Blood Pressure + Артериальное давление + Presión Arterial + + + Checking Blood Pressure.. + Проверка артериального давления... + Comprobando Presión Arterial... + + + You checked %1 + Вы осмотрели раненого %1 + Examinando a %1 + + + You find a blood pressure of %2/%3 + Артериальное давление %2/%3 + La Presión Arterial es %2/%3 + + + You find a low blood pressure + Давление низкое + La Presión Arterial es baja + + + You find a normal blood pressure + Давление нормальное + La Presión Arterial es normal + + + You find a high blood pressure + Давление высокое + La Presión Arterial es alta + + + You find no blood pressure + Давления нет + No hay Presión Arterial + + + You fail to find a blood pressure + Артериальное давление не определяется + No puedes encontrar Presión Arterial + + + Pulse + Пульс + Pulso + + + Checking Heart Rate.. + Проверка пульса... + Comprobando Pulso... + + + You checked %1 + Вы осмотрели раненого %1 + Examinando a %1 + + + You find a Heart Rate of %2 + Пульс %2 уд./мин. + El Pulso es %2 + + + You find a weak Heart Rate + Пульс слабый + El Pulso es débil + + + You find a strong Heart Rate + Пульс учащенный + El Pulso está acelerado + + + You find a normal Heart Rate + Пульс в норме + El Pulso es bueno + + + You find no Heart Rate + Пульс не прощупывается + No tiene Pulso + + + Response + Реакция + Reacciona + + + You check response of patient + Вы проверяете реакцию раненого + Compruebas si el paciente reacciona + + + %1 is responsive + %1 реагирует на раздражители + %1 ha reaccionado + + + %1 is not responsive + %1 не реагирует + %1 no reacciona + + + You checked %1 + Вы осмотрели раненого %1 + Examinas a %1 + + + Bandaged + Повязка наложена + Vendado + + + You bandage %1 (%2) + Вы перевязали раненого %1 (%2) + Aplicas vendaje a %1 en %2 + + + %1 is bandaging you + %1 перевязывает вас + %1 te está vendando + + + You start stitching injures from %1 (%2) + Вы зашиваете ранения от %1 (%2) + Estás suturando heridas de %1 en %2 + + + Stitching + Наложение швов + Suturando + + + You treat the airway of %1 + Вы интубируете раненого %1 + Estás intubando a %1 + + + Airway + Дыхательные пути + Vías Aéreas + + + %1 is treating your airway + %1 проводит вам интубацию + %1 te está intubando + + + Drag + Ziehen + Arrastrar + Ciągnij + Táhnout + Тащить + Tracter + Húzás + Arrastar + Trascina + + + Carry + Tragen + Cargar + Nieś + Nést + Нести + Porter + Cipelés + Carregar + Trasporta + + + Release + Loslassen + Soltar + Połóż + Položit + Отпустить + Déposer + Elenged + Largar + Lascia + + + Load Patient Into + Patient Einladen + Cargar el paciente en + Załaduj pacjenta + Naložit pacianta do + Погрузить пациента в + Embarquer le Patient + Sebesült berakása + Carregar Paciente Em + Carica paziente nel + + + Unload Patient + Patient Ausladen + Descargar el paciente + Wyładuj pacjenta + Vyložit pacienta + Выгрузить пациента + Débarquer le Patient + Sebesült kihúzása + Descarregar Paciente + Scarica il paziente + + + Unload patient + Выгрузить пациента + + + Load patient + Погрузить пациента + + + Place body in bodybag + Поместить тело в мешок + + + Placing body in bodybag + Помещение тела в мешок ... + + + %1 has bandaged patient + %1 перевязал пациента + + + %1 used %2 + %1 применил %2 + + + %1 has given an IV + %1 провел переливание + + + %1 applied a tourniquet + %1 наложил жгут + + + \ No newline at end of file diff --git a/addons/microdagr/stringtable.xml b/addons/microdagr/stringtable.xml index 772a7a172f..823a7a7f8d 100644 --- a/addons/microdagr/stringtable.xml +++ b/addons/microdagr/stringtable.xml @@ -1,24 +1,30 @@  - + MicroDAGR GPS + MicroDAGR GPS MicroDAGR advanced GPS receiver + Многофункциональный GPS-приёмник. Angular Unit: + Угловые единицы: Mils + Тысячные Show Waypoints On Map: + Показывать маршрутные точки на карте: Degrees + Градусы On @@ -44,43 +50,55 @@ Enter Grid Cords: + Введите координаты: Name of [%1] + Название [%1] MGRS-New + MGRS-Новая WGD + WGD Range: Reichweite: + Дистанция: Compass Direction + Азимут Mark + Отметка Waypoints Wegpunkte + Машрутные точки Connect To + Соединиться с Settings Einstellungen Configuración + Настройки SetWP + Установить МТ Add + Добавить Delete @@ -95,15 +113,19 @@ Toggle MicroDAGR Display Mode + Сменить режим показа MicroDAGR Show MicoDAGR + Показать MicroDAGR Configure MicroDAGR + Настроить MicroDAGR Close MicroDAGR + Закрыть MicroDAGR \ No newline at end of file diff --git a/addons/nametags/stringtable.xml b/addons/nametags/stringtable.xml index 622df44aca..a6f16e3fad 100644 --- a/addons/nametags/stringtable.xml +++ b/addons/nametags/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -68,14 +68,17 @@ Show name tags for AI units + Показывать именые метки ИИ Show SoundWaves (requires player names) Zeigen Schallwelle (benötigt spielernamen) Mostrar onda sonora (requiere Mostrar nombres de jugadores) + Показывать звуковые волны (требует имен игроков) Default Nametag Color (Non Group Members) + Цвет меток игроков (не членов групп) \ No newline at end of file diff --git a/addons/optionsmenu/stringtable.xml b/addons/optionsmenu/stringtable.xml index 76407da435..020a848f79 100644 --- a/addons/optionsmenu/stringtable.xml +++ b/addons/optionsmenu/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -16,15 +16,17 @@ Fix Animation + Фикс анимации Reset All Rücksetzen + Полный сброс Colors Farben - цвета + Цвета Colors @@ -41,6 +43,7 @@ Values + Значения Yes @@ -70,38 +73,48 @@ Setting: Nastavení: Einstellung: - Yстановки: + Установки: Ajuste: Export + Экспорт Open Export Menu + Открыть меню экспорта String input. + Строчный ввод. Array. Seperate elements by using ,. + Массив. Разделяйте элемены, используя запятую. Number + Число Uknown input type + Неизвестный тип ввода Save input + Сохранить ввод Include Client Settings + Включить настройки клиента Exclude Client Settings + Исключить настройки клиента Settings exported to clipboard + Настройки экспортированы в буфер обмена \ No newline at end of file diff --git a/addons/overheating/stringtable.xml b/addons/overheating/stringtable.xml index 5d2c9595df..5356e9ffc6 100644 --- a/addons/overheating/stringtable.xml +++ b/addons/overheating/stringtable.xml @@ -1,12 +1,14 @@  - + Display text on jam + Показывать текст, когда клинит оружие Display a notification whenever your weapon gets jammed + Демонстровать уведомление, каждый раз, когда клинит Ваше оружие. Spare barrel diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index 9ccd7752d2..29fb5a736b 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -1,1310 +1,1302 @@  - + - - - XM312 - XM312 - XM312 - XM312 - XM312 - XM312 - XM312 - XM312 - XM312 - XM312A - - - XM312A - XM312A - XM312 - XM312A - XM312A - XM312A - XM312A - XM312A - XM312A - XM312A - - - XM312 (High) - XM312 (Hoch) - XM312 (Alto) - XM312 (Haut) - XM312 (Vysoký) - XM312 (Wysoki) - XM312 (Высокий) - XM312 (Alta) - XM312 (Magasított) - XM312 (Alta) - - - XM307 - XM307 - XM307 - XM307 - XM307 - XM307 - XM307 - XM307 - XM307 - XM307 - - - XM307A - XM307A - XM307A - XM307A - XM307A - XM307A - XM307A - XM307A - XM307A - XM307A - - - XM307 (High) - XM307 (Hoch) - XM307 (Alto) - XM307 (Haut) - XM307 (Vysoký) - XM307 (Wysoki) - XM307 (Высокий) - XM307 (Alta) - XM307 (Magasított) - XM307 (Alta) - - - Mini-Spike Launcher (AT) - Mini-Spike Lenkflugkörper (AT) - Lanzador Mini-Spike (AT) - Poste de tir Mini-Spike (AC) - Mini-Spike Odpalovač (AT) - Wyrzutnia Mini-Spike (AT) - Mini-Spike Пусковое устройство (ПТРК) - Lança-mísseis Mini-Spike (AC) - Mini-Spike rakétarendszer (páncéltörő) - Lanciatore Mini-Spike (AC) - - - Mini-Spike Launcher (AA) - Mini-Spike Lenkflugkörper (AA) - Lanzador Mini-Spike (AA) - Poste de tir Mini-Spike (AA) - Mini-Spike Odpalovač (AA) - Wyrzutnia Mini-Spike (AA) - Mini-Spike Пусковое устройство (ВВ) - Lança-mísseis Mini-Spike (AA) - Mini-Spike rakétarendszer (légvédelmi) - Lanciatore Mini-Spike (AA) - - - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - YABHON-R3 - - - YABHON-R3 (CAS) - YABHON-R3 (Luftnahunterstützung) - YABHON-R3 (CAS) - YABHON-R3 (CAS) - YABHON-R3 (CAS) - YABHON-R3 (штурмовик) - - - M-ATV - M-ATV - M-ATV - M-ATV - M-ATV - M-ATV - M-ATV - M-ATV - M-ATV - M-ATV - - - M-ATV (HMG) - M-ATV (SMG) - M-ATV (HMG) - M-ATV (CKM) - M-ATV (TK) - M-ATV (HMG) - M-ATV (Пулемет) - M-ATV (HMG) - M-ATV (HMG) - M-ATV (HMG) - - - M-ATV (GMG) - M-ATV (GMW) - M-ATV (GMG) - M-ATV (GMG) - M-ATV (Granátomet) - M-ATV (GMG) - M-ATV (Гранатомет) - M-ATV (GMG) - M-ATV (GMG) - M-ATV (GMG) - - - Merkava Mk IV M - Merkava Mk IV M - Merkava Mk IV M - Merkawa Mk IV M - Merkava Mk IV M - Merkava Mk IV M - Меркава Mk IV M - Merkava Mk IV M - Merkava Mk IV M - Merkava Mk IV M - - - Merkava Mk IV LIC - Merkava Mk IV LIC - Merkava Mk IV LIC - Merkawa Mk IV LIC - Merkava Mk IV LIC - Merkava Mk IV LIC - Меркава Mk IV LIC - Merkava Mk IV LIC - Merkava Mk IV LIC - Merkava Mk IV LIC - - - Sholef - Sholef - Sholef - Sholef - Sholef - Sholef - Шолеф - Sholef - Sholef - Sholef - - - Seara - Seara - Seara - Seara - Seara - Seara - Seara - Seara - Seara - Seara - - - Namer - Namer - Namer - Namer - Namer - Namer - Намер - Namer - Namer - Namer - - - Bardelas - Bardelas - Bardelas - Bardelas - Bardelas - Bardelas - Bardelas - Bardelas - Bardelas - Bardelas - - - Patria AMV - Patria AMV - Patria AMV - Patria AMV - Patria AMV - Patria AMV - Patria AMV - Patria AMV - Patria AMV - Patria AMV - - - Nemmera - Nemmera - Nemmera - Nemmera - Nemmera - Nemmera - Nemmera - Nemmera - Nemmera - Nemmera - - - HEMTT Transport - HEMTT Transport - HEMTT de transporte - HEMTT Transportowy - HEMTT Valník - HEMTT Transport - HEMTT Транспортный - HEMTT Transporte - HEMTT szállítójármű - HEMTT da trasporto - - - HEMTT Transport (covered) - HEMTT Transport (bedeckt) - HEMTT de transporte (cubierto) - HEMTT Transportowy (zakryty) - HEMTT Valník (krytý) - HEMTT Transport (bâché) - HEMTT Транспортный (крытый) - HEMTT Transporte (coberto) - HEMTT szállítójármű (ponyvás) - HEMTT da trasporto (coperto) - - - HEMTT - HEMTT - HEMTT - HEMTT - HEMTT - HEMTT Tracteur - HEMTT - HEMTT - HEMTT - HEMTT - - - HEMTT Container - HEMTT Container - HEMTT de contenedor - HEMTT Kontener - HEMTT Skříňový - HEMTT Conteneur - HEMTT Контейнер - HEMTT Contêiner - HEMTT Konténer - HEMTT portacontainer - - - HEMTT Medical - HEMTT Sanitäter - HEMTT médico - HEMTT Medyczny - HEMTT Zdravotnický - HEMTT Sanitaire - HEMTT Медицинский - HEMTT Médico - HEMTT (egészségügyi) - HEMTT Medico - - - HEMTT Ammo - HEMTT Munition - HEMTT de munición - HEMTT Amunicyjny - HEMTT Muniční - HEMTT Munitions - HEMTT Боеприпасы - HEMTT Munições - HEMTT (lőszerszállító) - HEMTT di rifornimento munizioni - - - HEMTT Fuel - HEMTT Treibstoff - HEMTT de combustible - HEMTT Cysterna - HEMTT Cisterna - HEMTT Citerne - HEMTT Заправщик - HEMTT Combustível - HEMTT (üzemanyag-szállító) - HEMTT di rifornimento carburante - - - HEMTT Repair - HEMTT Instandsetzung - HEMTT de reparación - HEMTT Naprawczy - HEMTT Opravárenský - HEMTT Réparation - HEMTT Ремонтный - HEMTT Reparador - HEMTT (szerelő-jármű) - HEMTT Riparatore - - - Fennek - Fennek - Fennek - Fennek - Fennek - Fennek - Феннек - Fennek - Fennek - Fennek - - - Fennek (HMG) - Fennek (SMG) - Fennek (HMG) - Fennek (CKM) - Fennek (TK) - Fennek (HMG) - Феннек (Пулемет) - Fennek (HMG) - Fennek (HMG) - Fennek (HMG) - - - Fennek (GMG) - Fennek (GMW) - Fennek (GMG) - Fennek (GMG) - Fennek (granátomet) - Fennek (GMG) - Феннек (Гранатомет) - Fennek (GMG) - Fennek (GMG) - Fennek (GMG) - - - Leopard 2SG - Leopard 2SG - Leopard 2SG - Leopard 2SG - Leopard 2SG - Leopard 2SG - Леопард 2SG - Leopard 2SG - Leopard 2SG - Leopard 2SG - - - FV510 Warrior - FV510 Warrior - FV510 Warrior - FV510 Warrior - FV510 Warrior - FV510 Warrior - FV510 Уорриор - FV510 Warrior - FV510 Warrior - FV510 Warrior - - - Pandur II - Pandur II - Pandur II - Pandur II - Pandur II - Pandur II - Pandur II - Pandur II - Pandur II - Pandur II - - - KamAZ Transport - KamAZ Transport - KamAZ de transporte - KamAZ transportowy - KAMAZ Valník - KamAZ Transport - КамАЗ Траспортный - KamAZ Transporte - KamAZ szállítójármű - KamAZ da trasporto - - - KamAZ Transport (covered) - KamAZ Transport (bedeckt) - KamAZ de transporte (cubierto) - KamAZ Transportowy (zakryty) - KAMAZ Valník (krytý) - KamAZ Transport (bâché) - КамАЗ Траспортный (Крытый) - KamAZ Transporte (coberto) - KamAZ szállítójármű (ponyvás) - KamAZ da trasporto (coperto) - - - KamAZ Ammo - KamAZ Munition - KamAZ de munición - KamAZ Amunicyjny - KAMAZ Muniční - KamAZ Munitions - КамАЗ Боеприпасы - KamAZ Munições - KamAZ (lőszerszállító) - KamAZ di rifornimento munizioni - - - KamAZ Fuel - KamAZ Treibstoff - KamAZ de combustible - KamAZ cysterna - KAMAZ Cisterna - KamAZ Citerne - КамАЗ Заправщик - KamAZ Combustível - KamAZ (üzemanyag-szállító) - KamAZ di rifornimento carburante - - - KamAZ Repair - KamAZ Instandsetzung - KamAZ de reparación - KamAZ Naprawczy - KAMAZ Opravárenský - KamAZ Réparation - КамАЗ Ремонтный - KamAZ Reparador - KamAZ (szerelő-jármű) - KamAZ riparatore - - - KamAZ Medical - KamAZ Sanitäter - KamAZ médico - KamAZ Medyczny - KAMAZ Zdravotnický - KamAZ Sanitaire - КамАЗ Медицинский - KamAZ Médico - KamAZ (egészségügyi) - KamAZ Medico - - - Punisher - Punisher - Punisher - Punisher - Punisher - Punisher - Kаратель - Punisher - Punisher - Punisher - - - Punisher (HMG) - Punisher (SMG) - Punisher (HMG) - Punisher (CKM) - Punisher (TK) - Punisher (HMG) - Kаратель (Пулемет) - Punisher (HMG) - Punisher (HMG) - Punisher (HMG) - - - Punisher (GMG) - Punisher (GMW) - Punisher (GMG) - Punisher (CKM) - Punisher (granátomet) - Punisher (GMG) - Kаратель (Гранатомет) - Punisher (GMG) - Punisher (GMG) - Punisher (GMG) - - - T100 Black Eagle - T100 Black Eagle - T100 Black Eagle - T100 Black Eagle - T100 Black Eagle - T100 Black Eagle - T100 Черный Орел - T100 Black Eagle - T100 Black Eagle - T100 Black Eagle - - - 2S9 Sochor - 2S9 Sochor - 2S9 Sochor - 259 Sochor - 2S9 Sochor - 2S9 Sochor - 2S9 Сокор - 2S9 Sochor - 2S9 Sochor - 2S9 Sochor - - - BM-2T Stalker - BM-2T Stalker - BM-2T Stalker - BM-2T Stalker - BM-2T Stalker - BM-2T Stalker - БМ-2Т Сталкер - BM-2T Stalker - BM-2T Stalker - BM-2T Stalker - - - ZSU-35 Tigris - ZSU-35 Tigris - ZSU-35 Tigris - ZSU-35 Tigris - ZSU-35 Tigris - ZSU-35 Tigris - ЗСУ-35 Tigris - ZSU-35 Tigris - ZSU-35 Tigris - ZSU-35 Tigris - - - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - Otokar ARMA - - - Typhoon Transport - Typhoon Transport - Typhoon de transporte - Typhoon Transportowy - Typhoon Valník - Typhoon Transport - Тайфун Транспортный - Typhoon Transporte - Typhoon szállítójármű - Typhoon da trasporto - - - Typhoon Transport (covered) - Typhoon Transport (bedeckt) - Typhoon de transporte (cubierto) - Typhoon Transportowy (przykryty) - Typhoon Valník (krytý) - Typhoon Transport (bâché) - Тайфун Транспортный (kрытый) - Typhoon Transporte (coberto) - Typhoon szállítójármű (ponyvás) - Typhoon da trasporto (coperto) - - - Typhoon Device - Typhoon Gerät - Typhoon de dispositivo - Typhoon Urządzenie - Typhoon Zařízení - Typhoon Dispositif - Тайфун Устройство - Typhoon Dispositivo - Typhoon (szerkezet) - Typhoon per dispositivo - - - Typhoon Ammo - Typhoon Munition - Typhoon de munición - Typhoon Amunicyjny - Typhoon Muniční - Typhoon Munitions - Тайфун Боеприпасы - Typhoon Munições - Typhoon (lőszerszállító) - Typhoon di rifornimento munizioni - - - Typhoon Fuel - Typhoon Treibstoff - Typhoon de combustible - Typhoon Cysterna - Typhoon Cisterna - Typhoon Citerne - Тайфун Заправщик - Typhoon Combustível - Typhoon (üzemanyag-szállító) - Typhoon di rifornimento carburante - - - Typhoon Repair - Typhoon Instandsetzung - Typhoon de reparación - Typhoon Naprawczy - Typhoon Opravárenský - Typhoon Réparation - Тайфун Ремонтный - Typhoon Reparador - Typhoon (szerelő-jármű) - Typhoon riparatore - - - Typhoon Medical - Typhoon Sanitäter - Typhoon médico - Typhoon Medyczny - Typhoon Zdravotnický - Typhoon Sanitaire - Тайфун Медицинский - Typhoon Médico - Typhoon (egészségügyi) - Typhoon medico - - - RAH-66 Comanche - RAH-66 Comanche - RAH-66 Comanche - RAH-66 Comanche - RAH-66 Comanche - RAH-66 Commanche - RAH-66 Команч - RAH-66 Comanche - RAH-66 Comanche - RAH-66 Comanche - - - MH-6 Little Bird - MH-6 Little Bird - MH-6 Litte Bird - MH-6 Little Bird - MH-6 Little Bird - MH-6 Little Bird - MH-6 Little Bird - MH-6 Little Bird - MH-6 Little Bird - MH-6 Little Bird - - - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - AH-6 Little Bird - - - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - CH-47I Chinook - - - CH-47I Chinook (unarmed) - CH-47I Chinook (unbewaffnet) - CH-47I Chinnok (Desarmado) - CH-47I Chinook (nieuzbrojony) - CH-47I Chinook (невооруженный) - CH-47I Chinook (Neozbrojený) - - - A-10D Thunderbolt II - A-10D Thunderbolt II - A-10D Thunderbolt II - A-10D Thunderbolt II - A-10D Thunderbolt II - A-10D Thunderbolt II - A-10D Тандерболт II - A-10D Thunderbolt II - A-10D Thunderbolt II - A-10D Thunderbolt II - - - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - AW159 Wildcat - - - AW159 Wildcat (unarmed) - AW159 Wildcat (unbewaffnet) - AW159 Wildcat (desarmado) - AW159 Wildcat (nieuzbrojony) - AW159 Wildcat (neozbrojený) - AW159 Wildcat (non-armé) - AW159 Wildcat (невооруженный) - AW159 Wildcat (desarmado) - AW159 Wildcat (fegyvertelen) - AW159 Wildcat (disarmato) - - - AW101 Merlin - AW101 Merlin - AW101 Merlin - AW101 Merlin - AW101 Merlin - AW101 Merlin - AW101 Мерлин - AW101 Merlin - AW101 Merlin - AW101 Merlin - - - L-159 ALCA (CAS) - L-159 ALCA (CAS) - L-159 ALCA (CAS) - L-159 ALCA (CAS) - L-159 ALCA (CAS) - L-159 ALCA (CAS) - L-159 Альбатрос (CAS) - L-159 ALCA (CAS) - L-159 ALCA (CAS) - L-159 ALCA (CAS) - - - L-159 ALCA (AA) - L-159 ALCA (AA) - L-159 ALCA (AA) - L-159 ALCA (AA) - L-159 ALCA (AA) - L-159 ALCA (AA) - L-159 Альбатрос (AA) - L-159 ALCA (ВВ) - L-159 ALCA (AA) - L-159 ALCA (AA) - - - Ka-60 Kasatka - Ka-60 Kasatka - Ka-60 Kasatka - Ka-60 Kasatka - Ka-60 Kasatka - Ka-60 Kasatka - Ka-60 Касатка - Ka-60 Kasatka - Ka-60 Kasatka - Ka-60 Kasatka - - - Ka-60 Kasatka (unarmed) - Ka-60 Kasatka (unbewaffnet) - Ka-60 Kasatka (desarmado) - Ka-60 Kasatka (nieuzbrojony) - Ka-60 Kasatka (neozbrojená) - Ka-60 Kasatka (non-armé) - Ka-60 Касатка (невооруженный) - Ka-60 Kasatka (desarmado) - Ka-60 Kasatka (fegyvertelen) - Ka-60 Kasatka (disarmato) - - - Yak-130 - Yak-130 - Yak-130 - Jak-130 - Jak-130 - Yak-130 - Як-130 - Yak-130 - Jak-130 - Yak-130 - - - MD 500 - MD 500 - MD 500 - MD 500 - MD 500 - MD 500 - MD 500 - MD 500 - MD 500 - MD 500 - - - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - M4A1 SLAM - - - M18A1 Claymore - M18A1 Claymore - M18A1 Claymore - Mina kierunkowa M18A1 Claymore - M18A1 Mina Claymore - M18A1 Claymore Mine antipersonnel à effet dirigé - M18A1 Клеймор - M18A1 Claymore - M18A1 Claymore akna - M18A1 Claymore Mina antiuomo - - - M183 Demolition Charge Assembly - M183 Geballte Sprengladung - Conjunto de carga de demolición M183 - Ładunek burzący M183 - M183 Demoliční nálož - M183 Charge de Démolition - M183 Комплектный подрывной заряд - M183 Sacola de Demolição - M183 romboló töltet - M183 Demolition Charge Assembly - - - M112 Demolition Block - M112 Sprengladung - Bloque de demolición M112 - Ładunek burzący M112 - M112 Výbušná nálož - Pétard M112 - M112 подрывной заряд - M112 Carga de Demolição - M112 romboló töltet - M112 Demolition Block - - - M67 Fragmentation Grenade - M67 Splittergranate - Granada de fragmentación M67 - Granat obronny M67 - M67 Granát - M67 Grenade à fragmentation - M67 ручная осколочная граната - M67 Granada de fragmentação - M67 repeszgránát - M67 Granata a frammentazione - - - M83 Smoke Grenade (White) - M83 Rauchgranate (Weiss) - Granada de humo M83 (Blanco) - Granat dymny M83 (Biały) - M83 Kouřový Granát (Bílý) - M83 Grenade fumigène (Blanche) - M83 дымовой гранаты (Белый) - M83 Granada de fumaça (Branca) - M83 füstgránát (Fehér) - M83 Granata fumogena (Bianco) - - - M18 Smoke Grenade (Blue) - M18 Rauchgranate (Blau) - Granada de humo M18 (Azul) - Granat dymny M18 (Niebieski) - M18 Kouřový Granát (Modrý) - M18 Grenade fumigène (Bleue) - M18 дымовой гранаты (Синий) - M18 Granada de fumaça (Azul) - M18 füstgránát (Kék) - M18 Granata fumogena (Blu) - - - M18 Smoke Grenade (Green) - M18 Rauchgranate (Grün) - Granada de humo M18 (Verde) - Granat dymny M18 (Zielony) - M18 Kouřový Granát (Zelený) - M18 Grenade fumigène (Verte) - M18 дымовой гранаты (Зелёный) - M18 Granada de fumaça (Verde) - M18 füstgránát (Zöld) - M18 Granata fumogena (Verde) - - - M18 Smoke Grenade (Orange) - M18 Rauchgranate (Orange) - Granada de humo M18 (Naranja) - Granat dymny M18 (Pomarańczowy) - M18 Kouřový Granát (Oranžový) - M18 Grenade fumigène (Orange) - M18 дымовой гранаты (Оранжевый) - M18 Granada de fumaça (Laranja) - M18 füstgránát (Narancssárga) - M18 Granata fumogena (Arancione) - - - M18 Smoke Grenade (Purple) - M18 Rauchgranate (Violett) - Granada de humo M18 (Púrpura) - Granat dymny M18 (Fioletowy) - M18 Kouřový Granát (Fialový) - M18 Grenade fumigène (Pourpre) - M18 дымовой гранаты (Пурпурный) - M18 Granada de fumaça (Roxa) - M18 füstgránát (Lila) - M18 Granata fumogena (Viola) - - - M18 Smoke Grenade (Red) - M18 Rauchgranate (Rot) - Granada de humo M18 (Rojo) - Granat dymny M18 (Czerwony) - M18 Kouřový Granát (Červený) - M18 Grenade fumigène (Rouge) - M18 дымовой гранаты (Красный) - M18 Granada de fumaça (Vermelha) - M18 füstgránát (Piros) - M18 Granata fumogena (Rosso) - - - M18 Smoke Grenade (Yellow) - M18 Rauchgranate (Gelb) - Granada de humo M18 (Amarillo) - Granat dymny M18 (Żółty) - M18 Kouřový Granát (Žlutý) - M18 Grenade fumigène (Jaune) - M183 дымовой гранаты (Жёлтые) - M18 Granada de fumaça (Amarela) - M18 füstgránát (Sárga) - M18 Granata fumogena (Giallo) - - - M15 Anti-Tank Mine - M15 Panzerabwehrmine - Mina antitanque M15 - Mina przeciwpancerna M15 - M15 Protitanková Mina - M15 Mine antichar - M15 противотанковая мина - M15 Mina anticarro - M15 harckocsiakna - M15 Mine anticarro - - - VS-50 Anti-Personnel Mine - VS-50 Antipersonenmine - Mina antipersona VS-50 - Mina przeciwpiechotna VS-50 - VS-50 Protipěchotní Mina - VS-50 Mine antipersonnel à pression - VS-50 Противопехотная мина - VS-50 Mina antipessoal - VS-50 gyalogsági taposóakna - VS-50 Mine antiuomo - - - M26 Anti-Personnel Bounding Mine - M26 Antipersonensprungmine - Mina antipersona M26 - Mina przeciwpiechotna M26 - M26 Šrapnelová Mina - M26 Mine antipersonnel bondissante - M26 Противопехотная мина - M26 Mina saltadora antipessoal - M26 gyalogsági ugróakna - M26 Mine saltanti antiuomo - - - PMR-3 Anti-Personnel Tripwire Mine - PMR-3 Antipersonenstolperdrahtmine - Mina antipersona de alambre PMR-3 - Mina przeciwpiechotna PMR-3 - PMR-3 Nástražná Mina - PMR-3 Mine antipersonnel à traction - PMR-3 Противопехотная мина - PMR-3 Mina antipessoal (armadilha) - PMR-3 botlódrótos gyalogsági akna - PMR-3 Mine antiuomo - - - P99 - P99 - - - MP-443 Grach - MP-443 Grach - - - ACP-C2 - ACP-C2 - - - FNX-45 Tactical - FNX-45 Tactical - - - Chiappa Rhino 60DS - Chiappa Rhino 60DS - - - Taurus Judge - Taurus Judge - - - NLAW - NLAW - - - RPG-32 - RPG-32 - - - Mini-Spike (AA) - Mini-Spike (AA) - - - Mini-Spike (AT) - Mini-Spike (AT) - - - MX - MX - - - MX (Black) - MX (Black) - - - MXC - MXC - - - MXC (Black) - MXC (Black) - - - MX 3GL - MX 3GL - - - MX 3GL (Black) - MX 3GL (Black) - - - MX LSW - MX LSW - - - MX LSW (Black) - MX LSW (Black) - - - MXM - MXM - - - MXM (Black) - MXM (Black) - - - KT2002 Katiba - KT2002 Katiba - - - KT2002C Katiba - KT2002C Katiba - - - KT2002 Katiba KGL - KT2002 Katiba KGL - - - F2000 (Camo) - F2000 (Camo) - - - F2000 - F2000 - - - F2000 Tactical (Camo) - F2000 Tactical (Camo) - - - F2000 Tactical - F2000 Tactical - - - F2000 EGLM (Camo) - F2000 EGLM (Camo) - - - F2000 EGLM - F2000 EGLM - - - TAR-21 - TAR-21 - - - CTAR-21 - CTAR-21 - - - TAR-21 EGLM - TAR-21 EGLM - - - Vector SMG - Vector SMG - - - Scorpion Evo 3 A1 - Scorpion Evo 3 A1 - - - CPW - CPW - - - RFB SDAR - RFB SDAR - - - Stoner 99 LMG - Stoner 99 LMG - - - Negev NG7 - Negev NG7 - - - Mk14 Mod 1 EBR - Mk14 Mod 1 EBR - - - GM6 Lynx - GM6 Lynx - - - GM6 Lynx (Camo) - GM6 Lynx (Camo) - - - M200 Intervention - M200 Intervention - - - M200 Intervention (Camo) - M200 Intervention (Camo) - - - VS-121 - VS-121 - - - - TODO: MAR-10 .338 - - - TODO: MAR-10 .338 (Black) - - - TODO: MAR-10 .338 (Camo) - - - TODO: MAR-10 .338 (Sand) - - - - TODO: Mk-I EMR 7.62 mm - - - TODO: Mk-I EMR 7.62 mm (Black) - - - TODO: Mk-I EMR 7.62 mm (Khaki) - - - TODO: Mk-I EMR 7.62 mm (Sand) - - - TODO: Mk-I EMR 7.62 mm (Camo) - - - TODO: Mk-I EMR 7.62 mm (Woodland) - - - TODO: NATO DMR (provisional) spotter - - - - TODO: ASP-1 Kir 12.7 mm - - - TODO: ASP-1 Kir 12.7 mm (Black) - - - TODO: ASP-1 Kir 12.7 mm (Tan) - - - - TODO: Cyrus 9.3 mm - - - TODO: Cyrus 9.3 mm (Black) - - - TODO: Cyrus 9.3 mm (Hex) - - - TODO: Cyrus 9.3 mm (Tan) - - - - TODO: Mk14 7.62 mm - - - TODO: Mk14 7.62 mm (Camo) - - - TODO: Mk14 7.62 mm (Olive) - - - - TODO: Navid 9.3 mm - - - TODO: Navid 9.3 mm (Hex) - - - TODO: Navid 9.3 mm (Tan) - - - - TODO: SPMG .338 - - - TODO: SPMG .338 (MTP) - - - TODO: SPMG .338 (Black) - - - TODO: SPMG .338 (Sand) - - - - + + + XM312 + XM312 + XM312 + XM312 + XM312 + XM312 + XM312 + XM312 + XM312 + XM312A + + + XM312A + XM312A + XM312 + XM312A + XM312A + XM312A + XM312A + XM312A + XM312A + XM312A + + + XM312 (High) + XM312 (Hoch) + XM312 (Alto) + XM312 (Haut) + XM312 (Vysoký) + XM312 (Wysoki) + XM312 (Высокий) + XM312 (Alta) + XM312 (Magasított) + XM312 (Alta) + + + XM307 + XM307 + XM307 + XM307 + XM307 + XM307 + XM307 + XM307 + XM307 + XM307 + + + XM307A + XM307A + XM307A + XM307A + XM307A + XM307A + XM307A + XM307A + XM307A + XM307A + + + XM307 (High) + XM307 (Hoch) + XM307 (Alto) + XM307 (Haut) + XM307 (Vysoký) + XM307 (Wysoki) + XM307 (Высокий) + XM307 (Alta) + XM307 (Magasított) + XM307 (Alta) + + + Mini-Spike Launcher (AT) + Mini-Spike Lenkflugkörper (AT) + Lanzador Mini-Spike (AT) + Poste de tir Mini-Spike (AC) + Mini-Spike Odpalovač (AT) + Wyrzutnia Mini-Spike (AT) + Mini-Spike Пусковое устройство (ПТРК) + Lança-mísseis Mini-Spike (AC) + Mini-Spike rakétarendszer (páncéltörő) + Lanciatore Mini-Spike (AC) + + + Mini-Spike Launcher (AA) + Mini-Spike Lenkflugkörper (AA) + Lanzador Mini-Spike (AA) + Poste de tir Mini-Spike (AA) + Mini-Spike Odpalovač (AA) + Wyrzutnia Mini-Spike (AA) + Mini-Spike Пусковое устройство (ВВ) + Lança-mísseis Mini-Spike (AA) + Mini-Spike rakétarendszer (légvédelmi) + Lanciatore Mini-Spike (AA) + + + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + YABHON-R3 + + + YABHON-R3 (CAS) + YABHON-R3 (Luftnahunterstützung) + YABHON-R3 (CAS) + YABHON-R3 (CAS) + YABHON-R3 (CAS) + YABHON-R3 (штурмовик) + + + M-ATV + M-ATV + M-ATV + M-ATV + M-ATV + M-ATV + M-ATV + M-ATV + M-ATV + M-ATV + + + M-ATV (HMG) + M-ATV (SMG) + M-ATV (HMG) + M-ATV (CKM) + M-ATV (TK) + M-ATV (HMG) + M-ATV (Пулемет) + M-ATV (HMG) + M-ATV (HMG) + M-ATV (HMG) + + + M-ATV (GMG) + M-ATV (GMW) + M-ATV (GMG) + M-ATV (GMG) + M-ATV (Granátomet) + M-ATV (GMG) + M-ATV (Гранатомет) + M-ATV (GMG) + M-ATV (GMG) + M-ATV (GMG) + + + Merkava Mk IV M + Merkava Mk IV M + Merkava Mk IV M + Merkawa Mk IV M + Merkava Mk IV M + Merkava Mk IV M + Меркава Mk IV M + Merkava Mk IV M + Merkava Mk IV M + Merkava Mk IV M + + + Merkava Mk IV LIC + Merkava Mk IV LIC + Merkava Mk IV LIC + Merkawa Mk IV LIC + Merkava Mk IV LIC + Merkava Mk IV LIC + Меркава Mk IV LIC + Merkava Mk IV LIC + Merkava Mk IV LIC + Merkava Mk IV LIC + + + Sholef + Sholef + Sholef + Sholef + Sholef + Sholef + Шолеф + Sholef + Sholef + Sholef + + + Seara + Seara + Seara + Seara + Seara + Seara + Seara + Seara + Seara + Seara + + + Namer + Namer + Namer + Namer + Namer + Namer + Намер + Namer + Namer + Namer + + + Bardelas + Bardelas + Bardelas + Bardelas + Bardelas + Bardelas + Bardelas + Bardelas + Bardelas + Bardelas + + + Patria AMV + Patria AMV + Patria AMV + Patria AMV + Patria AMV + Patria AMV + Patria AMV + Patria AMV + Patria AMV + Patria AMV + + + Nemmera + Nemmera + Nemmera + Nemmera + Nemmera + Nemmera + Nemmera + Nemmera + Nemmera + Nemmera + + + HEMTT Transport + HEMTT Transport + HEMTT de transporte + HEMTT Transportowy + HEMTT Valník + HEMTT Transport + HEMTT Транспортный + HEMTT Transporte + HEMTT szállítójármű + HEMTT da trasporto + + + HEMTT Transport (covered) + HEMTT Transport (bedeckt) + HEMTT de transporte (cubierto) + HEMTT Transportowy (zakryty) + HEMTT Valník (krytý) + HEMTT Transport (bâché) + HEMTT Транспортный (крытый) + HEMTT Transporte (coberto) + HEMTT szállítójármű (ponyvás) + HEMTT da trasporto (coperto) + + + HEMTT + HEMTT + HEMTT + HEMTT + HEMTT + HEMTT Tracteur + HEMTT + HEMTT + HEMTT + HEMTT + + + HEMTT Container + HEMTT Container + HEMTT de contenedor + HEMTT Kontener + HEMTT Skříňový + HEMTT Conteneur + HEMTT Контейнер + HEMTT Contêiner + HEMTT Konténer + HEMTT portacontainer + + + HEMTT Medical + HEMTT Sanitäter + HEMTT médico + HEMTT Medyczny + HEMTT Zdravotnický + HEMTT Sanitaire + HEMTT Медицинский + HEMTT Médico + HEMTT (egészségügyi) + HEMTT Medico + + + HEMTT Ammo + HEMTT Munition + HEMTT de munición + HEMTT Amunicyjny + HEMTT Muniční + HEMTT Munitions + HEMTT Боеприпасы + HEMTT Munições + HEMTT (lőszerszállító) + HEMTT di rifornimento munizioni + + + HEMTT Fuel + HEMTT Treibstoff + HEMTT de combustible + HEMTT Cysterna + HEMTT Cisterna + HEMTT Citerne + HEMTT Заправщик + HEMTT Combustível + HEMTT (üzemanyag-szállító) + HEMTT di rifornimento carburante + + + HEMTT Repair + HEMTT Instandsetzung + HEMTT de reparación + HEMTT Naprawczy + HEMTT Opravárenský + HEMTT Réparation + HEMTT Ремонтный + HEMTT Reparador + HEMTT (szerelő-jármű) + HEMTT Riparatore + + + Fennek + Fennek + Fennek + Fennek + Fennek + Fennek + Феннек + Fennek + Fennek + Fennek + + + Fennek (HMG) + Fennek (SMG) + Fennek (HMG) + Fennek (CKM) + Fennek (TK) + Fennek (HMG) + Феннек (Пулемет) + Fennek (HMG) + Fennek (HMG) + Fennek (HMG) + + + Fennek (GMG) + Fennek (GMW) + Fennek (GMG) + Fennek (GMG) + Fennek (granátomet) + Fennek (GMG) + Феннек (Гранатомет) + Fennek (GMG) + Fennek (GMG) + Fennek (GMG) + + + Leopard 2SG + Leopard 2SG + Leopard 2SG + Leopard 2SG + Leopard 2SG + Leopard 2SG + Леопард 2SG + Leopard 2SG + Leopard 2SG + Leopard 2SG + + + FV510 Warrior + FV510 Warrior + FV510 Warrior + FV510 Warrior + FV510 Warrior + FV510 Warrior + FV510 Уорриор + FV510 Warrior + FV510 Warrior + FV510 Warrior + + + Pandur II + Pandur II + Pandur II + Pandur II + Pandur II + Pandur II + Pandur II + Pandur II + Pandur II + Pandur II + + + KamAZ Transport + KamAZ Transport + KamAZ de transporte + KamAZ transportowy + KAMAZ Valník + KamAZ Transport + КамАЗ Траспортный + KamAZ Transporte + KamAZ szállítójármű + KamAZ da trasporto + + + KamAZ Transport (covered) + KamAZ Transport (bedeckt) + KamAZ de transporte (cubierto) + KamAZ Transportowy (zakryty) + KAMAZ Valník (krytý) + KamAZ Transport (bâché) + КамАЗ Траспортный (Крытый) + KamAZ Transporte (coberto) + KamAZ szállítójármű (ponyvás) + KamAZ da trasporto (coperto) + + + KamAZ Ammo + KamAZ Munition + KamAZ de munición + KamAZ Amunicyjny + KAMAZ Muniční + KamAZ Munitions + КамАЗ Боеприпасы + KamAZ Munições + KamAZ (lőszerszállító) + KamAZ di rifornimento munizioni + + + KamAZ Fuel + KamAZ Treibstoff + KamAZ de combustible + KamAZ cysterna + KAMAZ Cisterna + KamAZ Citerne + КамАЗ Заправщик + KamAZ Combustível + KamAZ (üzemanyag-szállító) + KamAZ di rifornimento carburante + + + KamAZ Repair + KamAZ Instandsetzung + KamAZ de reparación + KamAZ Naprawczy + KAMAZ Opravárenský + KamAZ Réparation + КамАЗ Ремонтный + KamAZ Reparador + KamAZ (szerelő-jármű) + KamAZ riparatore + + + KamAZ Medical + KamAZ Sanitäter + KamAZ médico + KamAZ Medyczny + KAMAZ Zdravotnický + KamAZ Sanitaire + КамАЗ Медицинский + KamAZ Médico + KamAZ (egészségügyi) + KamAZ Medico + + + Punisher + Punisher + Punisher + Punisher + Punisher + Punisher + Kаратель + Punisher + Punisher + Punisher + + + Punisher (HMG) + Punisher (SMG) + Punisher (HMG) + Punisher (CKM) + Punisher (TK) + Punisher (HMG) + Kаратель (Пулемет) + Punisher (HMG) + Punisher (HMG) + Punisher (HMG) + + + Punisher (GMG) + Punisher (GMW) + Punisher (GMG) + Punisher (CKM) + Punisher (granátomet) + Punisher (GMG) + Kаратель (Гранатомет) + Punisher (GMG) + Punisher (GMG) + Punisher (GMG) + + + T100 Black Eagle + T100 Black Eagle + T100 Black Eagle + T100 Black Eagle + T100 Black Eagle + T100 Black Eagle + T100 Черный Орел + T100 Black Eagle + T100 Black Eagle + T100 Black Eagle + + + 2S9 Sochor + 2S9 Sochor + 2S9 Sochor + 259 Sochor + 2S9 Sochor + 2S9 Sochor + 2S9 Сокор + 2S9 Sochor + 2S9 Sochor + 2S9 Sochor + + + BM-2T Stalker + BM-2T Stalker + BM-2T Stalker + BM-2T Stalker + BM-2T Stalker + BM-2T Stalker + БМ-2Т Сталкер + BM-2T Stalker + BM-2T Stalker + BM-2T Stalker + + + ZSU-35 Tigris + ZSU-35 Tigris + ZSU-35 Tigris + ZSU-35 Tigris + ZSU-35 Tigris + ZSU-35 Tigris + ЗСУ-35 Tigris + ZSU-35 Tigris + ZSU-35 Tigris + ZSU-35 Tigris + + + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + Otokar ARMA + + + Typhoon Transport + Typhoon Transport + Typhoon de transporte + Typhoon Transportowy + Typhoon Valník + Typhoon Transport + Тайфун Транспортный + Typhoon Transporte + Typhoon szállítójármű + Typhoon da trasporto + + + Typhoon Transport (covered) + Typhoon Transport (bedeckt) + Typhoon de transporte (cubierto) + Typhoon Transportowy (przykryty) + Typhoon Valník (krytý) + Typhoon Transport (bâché) + Тайфун Транспортный (kрытый) + Typhoon Transporte (coberto) + Typhoon szállítójármű (ponyvás) + Typhoon da trasporto (coperto) + + + Typhoon Device + Typhoon Gerät + Typhoon de dispositivo + Typhoon Urządzenie + Typhoon Zařízení + Typhoon Dispositif + Тайфун Устройство + Typhoon Dispositivo + Typhoon (szerkezet) + Typhoon per dispositivo + + + Typhoon Ammo + Typhoon Munition + Typhoon de munición + Typhoon Amunicyjny + Typhoon Muniční + Typhoon Munitions + Тайфун Боеприпасы + Typhoon Munições + Typhoon (lőszerszállító) + Typhoon di rifornimento munizioni + + + Typhoon Fuel + Typhoon Treibstoff + Typhoon de combustible + Typhoon Cysterna + Typhoon Cisterna + Typhoon Citerne + Тайфун Заправщик + Typhoon Combustível + Typhoon (üzemanyag-szállító) + Typhoon di rifornimento carburante + + + Typhoon Repair + Typhoon Instandsetzung + Typhoon de reparación + Typhoon Naprawczy + Typhoon Opravárenský + Typhoon Réparation + Тайфун Ремонтный + Typhoon Reparador + Typhoon (szerelő-jármű) + Typhoon riparatore + + + Typhoon Medical + Typhoon Sanitäter + Typhoon médico + Typhoon Medyczny + Typhoon Zdravotnický + Typhoon Sanitaire + Тайфун Медицинский + Typhoon Médico + Typhoon (egészségügyi) + Typhoon medico + + + RAH-66 Comanche + RAH-66 Comanche + RAH-66 Comanche + RAH-66 Comanche + RAH-66 Comanche + RAH-66 Commanche + RAH-66 Команч + RAH-66 Comanche + RAH-66 Comanche + RAH-66 Comanche + + + MH-6 Little Bird + MH-6 Little Bird + MH-6 Litte Bird + MH-6 Little Bird + MH-6 Little Bird + MH-6 Little Bird + MH-6 Little Bird + MH-6 Little Bird + MH-6 Little Bird + MH-6 Little Bird + + + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + AH-6 Little Bird + + + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + CH-47I Chinook + + + CH-47I Chinook (unarmed) + CH-47I Chinook (unbewaffnet) + CH-47I Chinnok (Desarmado) + CH-47I Chinook (nieuzbrojony) + CH-47I Chinook (невооруженный) + CH-47I Chinook (Neozbrojený) + + + A-10D Thunderbolt II + A-10D Thunderbolt II + A-10D Thunderbolt II + A-10D Thunderbolt II + A-10D Thunderbolt II + A-10D Thunderbolt II + A-10D Тандерболт II + A-10D Thunderbolt II + A-10D Thunderbolt II + A-10D Thunderbolt II + + + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + AW159 Wildcat + + + AW159 Wildcat (unarmed) + AW159 Wildcat (unbewaffnet) + AW159 Wildcat (desarmado) + AW159 Wildcat (nieuzbrojony) + AW159 Wildcat (neozbrojený) + AW159 Wildcat (non-armé) + AW159 Wildcat (невооруженный) + AW159 Wildcat (desarmado) + AW159 Wildcat (fegyvertelen) + AW159 Wildcat (disarmato) + + + AW101 Merlin + AW101 Merlin + AW101 Merlin + AW101 Merlin + AW101 Merlin + AW101 Merlin + AW101 Мерлин + AW101 Merlin + AW101 Merlin + AW101 Merlin + + + L-159 ALCA (CAS) + L-159 ALCA (CAS) + L-159 ALCA (CAS) + L-159 ALCA (CAS) + L-159 ALCA (CAS) + L-159 ALCA (CAS) + L-159 Альбатрос (CAS) + L-159 ALCA (CAS) + L-159 ALCA (CAS) + L-159 ALCA (CAS) + + + L-159 ALCA (AA) + L-159 ALCA (AA) + L-159 ALCA (AA) + L-159 ALCA (AA) + L-159 ALCA (AA) + L-159 ALCA (AA) + L-159 Альбатрос (AA) + L-159 ALCA (ВВ) + L-159 ALCA (AA) + L-159 ALCA (AA) + + + Ka-60 Kasatka + Ka-60 Kasatka + Ka-60 Kasatka + Ka-60 Kasatka + Ka-60 Kasatka + Ka-60 Kasatka + Ka-60 Касатка + Ka-60 Kasatka + Ka-60 Kasatka + Ka-60 Kasatka + + + Ka-60 Kasatka (unarmed) + Ka-60 Kasatka (unbewaffnet) + Ka-60 Kasatka (desarmado) + Ka-60 Kasatka (nieuzbrojony) + Ka-60 Kasatka (neozbrojená) + Ka-60 Kasatka (non-armé) + Ka-60 Касатка (невооруженный) + Ka-60 Kasatka (desarmado) + Ka-60 Kasatka (fegyvertelen) + Ka-60 Kasatka (disarmato) + + + Yak-130 + Yak-130 + Yak-130 + Jak-130 + Jak-130 + Yak-130 + Як-130 + Yak-130 + Jak-130 + Yak-130 + + + MD 500 + MD 500 + MD 500 + MD 500 + MD 500 + MD 500 + MD 500 + MD 500 + MD 500 + MD 500 + + + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + M4A1 SLAM + + + M18A1 Claymore + M18A1 Claymore + M18A1 Claymore + Mina kierunkowa M18A1 Claymore + M18A1 Mina Claymore + M18A1 Claymore Mine antipersonnel à effet dirigé + M18A1 Клеймор + M18A1 Claymore + M18A1 Claymore akna + M18A1 Claymore Mina antiuomo + + + M183 Demolition Charge Assembly + M183 Geballte Sprengladung + Conjunto de carga de demolición M183 + Ładunek burzący M183 + M183 Demoliční nálož + M183 Charge de Démolition + M183 Комплектный подрывной заряд + M183 Sacola de Demolição + M183 romboló töltet + M183 Demolition Charge Assembly + + + M112 Demolition Block + M112 Sprengladung + Bloque de demolición M112 + Ładunek burzący M112 + M112 Výbušná nálož + Pétard M112 + M112 подрывной заряд + M112 Carga de Demolição + M112 romboló töltet + M112 Demolition Block + + + M67 Fragmentation Grenade + M67 Splittergranate + Granada de fragmentación M67 + Granat obronny M67 + M67 Granát + M67 Grenade à fragmentation + M67 ручная осколочная граната + M67 Granada de fragmentação + M67 repeszgránát + M67 Granata a frammentazione + + + M83 Smoke Grenade (White) + M83 Rauchgranate (Weiss) + Granada de humo M83 (Blanco) + Granat dymny M83 (Biały) + M83 Kouřový Granát (Bílý) + M83 Grenade fumigène (Blanche) + M83 дымовая граната (Белый) + M83 Granada de fumaça (Branca) + M83 füstgránát (Fehér) + M83 Granata fumogena (Bianco) + + + M18 Smoke Grenade (Blue) + M18 Rauchgranate (Blau) + Granada de humo M18 (Azul) + Granat dymny M18 (Niebieski) + M18 Kouřový Granát (Modrý) + M18 Grenade fumigène (Bleue) + M18 дымовая граната (Синий) + M18 Granada de fumaça (Azul) + M18 füstgránát (Kék) + M18 Granata fumogena (Blu) + + + M18 Smoke Grenade (Green) + M18 Rauchgranate (Grün) + Granada de humo M18 (Verde) + Granat dymny M18 (Zielony) + M18 Kouřový Granát (Zelený) + M18 Grenade fumigène (Verte) + M18 дымовая граната (Зелёный) + M18 Granada de fumaça (Verde) + M18 füstgránát (Zöld) + M18 Granata fumogena (Verde) + + + M18 Smoke Grenade (Orange) + M18 Rauchgranate (Orange) + Granada de humo M18 (Naranja) + Granat dymny M18 (Pomarańczowy) + M18 Kouřový Granát (Oranžový) + M18 Grenade fumigène (Orange) + M18 дымовая граната (Оранжевый) + M18 Granada de fumaça (Laranja) + M18 füstgránát (Narancssárga) + M18 Granata fumogena (Arancione) + + + M18 Smoke Grenade (Purple) + M18 Rauchgranate (Violett) + Granada de humo M18 (Púrpura) + Granat dymny M18 (Fioletowy) + M18 Kouřový Granát (Fialový) + M18 Grenade fumigène (Pourpre) + M18 дымовая граната (Пурпурный) + M18 Granada de fumaça (Roxa) + M18 füstgránát (Lila) + M18 Granata fumogena (Viola) + + + M18 Smoke Grenade (Red) + M18 Rauchgranate (Rot) + Granada de humo M18 (Rojo) + Granat dymny M18 (Czerwony) + M18 Kouřový Granát (Červený) + M18 Grenade fumigène (Rouge) + M18 дымовая граната (Красный) + M18 Granada de fumaça (Vermelha) + M18 füstgránát (Piros) + M18 Granata fumogena (Rosso) + + + M18 Smoke Grenade (Yellow) + M18 Rauchgranate (Gelb) + Granada de humo M18 (Amarillo) + Granat dymny M18 (Żółty) + M18 Kouřový Granát (Žlutý) + M18 Grenade fumigène (Jaune) + M183 дымовая граната (Жёлтые) + M18 Granada de fumaça (Amarela) + M18 füstgránát (Sárga) + M18 Granata fumogena (Giallo) + + + M15 Anti-Tank Mine + M15 Panzerabwehrmine + Mina antitanque M15 + Mina przeciwpancerna M15 + M15 Protitanková Mina + M15 Mine antichar + M15 противотанковая мина + M15 Mina anticarro + M15 harckocsiakna + M15 Mine anticarro + + + VS-50 Anti-Personnel Mine + VS-50 Antipersonenmine + Mina antipersona VS-50 + Mina przeciwpiechotna VS-50 + VS-50 Protipěchotní Mina + VS-50 Mine antipersonnel à pression + VS-50 Противопехотная мина + VS-50 Mina antipessoal + VS-50 gyalogsági taposóakna + VS-50 Mine antiuomo + + + M26 Anti-Personnel Bounding Mine + M26 Antipersonensprungmine + Mina antipersona M26 + Mina przeciwpiechotna M26 + M26 Šrapnelová Mina + M26 Mine antipersonnel bondissante + M26 Противопехотная мина + M26 Mina saltadora antipessoal + M26 gyalogsági ugróakna + M26 Mine saltanti antiuomo + + + PMR-3 Anti-Personnel Tripwire Mine + PMR-3 Antipersonenstolperdrahtmine + Mina antipersona de alambre PMR-3 + Mina przeciwpiechotna PMR-3 + PMR-3 Nástražná Mina + PMR-3 Mine antipersonnel à traction + PMR-3 Противопехотная мина + PMR-3 Mina antipessoal (armadilha) + PMR-3 botlódrótos gyalogsági akna + PMR-3 Mine antiuomo + + + P99 + P99 + + + MP-443 Grach + MP-443 Grach + + + ACP-C2 + ACP-C2 + + + FNX-45 Tactical + FNX-45 Tactical + + + Chiappa Rhino 60DS + Chiappa Rhino 60DS + + + Taurus Judge + Taurus Judge + + + NLAW + NLAW + + + RPG-32 + RPG-32 + + + Mini-Spike (AA) + Mini-Spike (AA) + + + Mini-Spike (AT) + Mini-Spike (AT) + + + MX + MX + + + MX (Black) + MX (Black) + + + MXC + MXC + + + MXC (Black) + MXC (Black) + + + MX 3GL + MX 3GL + + + MX 3GL (Black) + MX 3GL (Black) + + + MX LSW + MX LSW + + + MX LSW (Black) + MX LSW (Black) + + + MXM + MXM + + + MXM (Black) + MXM (Black) + + + KT2002 Katiba + KT2002 Katiba + + + KT2002C Katiba + KT2002C Katiba + + + KT2002 Katiba KGL + KT2002 Katiba KGL + + + F2000 (Camo) + F2000 (Camo) + + + F2000 + F2000 + + + F2000 Tactical (Camo) + F2000 Tactical (Camo) + + + F2000 Tactical + F2000 Tactical + + + F2000 EGLM (Camo) + F2000 EGLM (Camo) + + + F2000 EGLM + F2000 EGLM + + + TAR-21 + TAR-21 + + + CTAR-21 + CTAR-21 + + + TAR-21 EGLM + TAR-21 EGLM + + + Vector SMG + Vector SMG + + + Scorpion Evo 3 A1 + Scorpion Evo 3 A1 + + + CPW + CPW + + + RFB SDAR + RFB SDAR + + + Stoner 99 LMG + Stoner 99 LMG + + + Negev NG7 + Negev NG7 + + + Mk14 Mod 1 EBR + Mk14 Mod 1 EBR + + + GM6 Lynx + GM6 Lynx + + + GM6 Lynx (Camo) + GM6 Lynx (Camo) + + + M200 Intervention + M200 Intervention + + + M200 Intervention (Camo) + M200 Intervention (Camo) + + + VS-121 + VS-121 + + + TODO: MAR-10 .338 + + + TODO: MAR-10 .338 (Black) + + + TODO: MAR-10 .338 (Camo) + + + TODO: MAR-10 .338 (Sand) + + + TODO: Mk-I EMR 7.62 mm + + + TODO: Mk-I EMR 7.62 mm (Black) + + + TODO: Mk-I EMR 7.62 mm (Khaki) + + + TODO: Mk-I EMR 7.62 mm (Sand) + + + TODO: Mk-I EMR 7.62 mm (Camo) + + + TODO: Mk-I EMR 7.62 mm (Woodland) + + + TODO: NATO DMR (provisional) spotter + + + TODO: ASP-1 Kir 12.7 mm + + + TODO: ASP-1 Kir 12.7 mm (Black) + + + TODO: ASP-1 Kir 12.7 mm (Tan) + + + TODO: Cyrus 9.3 mm + + + TODO: Cyrus 9.3 mm (Black) + + + TODO: Cyrus 9.3 mm (Hex) + + + TODO: Cyrus 9.3 mm (Tan) + + + TODO: Mk14 7.62 mm + + + TODO: Mk14 7.62 mm (Camo) + + + TODO: Mk14 7.62 mm (Olive) + + + TODO: Navid 9.3 mm + + + TODO: Navid 9.3 mm (Hex) + + + TODO: Navid 9.3 mm (Tan) + + + TODO: SPMG .338 + + + TODO: SPMG .338 (MTP) + + + TODO: SPMG .338 (Black) + + + TODO: SPMG .338 (Sand) + + + \ No newline at end of file diff --git a/addons/reload/stringtable.xml b/addons/reload/stringtable.xml index 40f36c6549..2aa5197e2f 100644 --- a/addons/reload/stringtable.xml +++ b/addons/reload/stringtable.xml @@ -1,12 +1,14 @@ - - + + Check ammo on weapon reload + Проверять боезапас при перезарядке Check the ammo in your new magazine on magazine reload. + Проверяет количество патронов в новом магазине при перезарядке. Check Ammo @@ -34,9 +36,11 @@ Link belt + Сцепить ленты Linking belt... + Сцепка лент ... - + \ No newline at end of file diff --git a/addons/reloadlaunchers/stringtable.xml b/addons/reloadlaunchers/stringtable.xml index 6677153419..664f594acd 100644 --- a/addons/reloadlaunchers/stringtable.xml +++ b/addons/reloadlaunchers/stringtable.xml @@ -1,24 +1,26 @@  - + - - - Load launcher - Panzerabwehr laden - - - Loading launcher ... - Panzerabwehr wird geladen ... - - - Launcher loaded - Panzerabwehr geladen - - - - Load %1 - Lade %1 - - - - + + + Load launcher + Panzerabwehr laden + Зарядить ПУ + + + Loading launcher ... + Panzerabwehr wird geladen ... + Зарядка ПУ ... + + + Launcher loaded + Panzerabwehr geladen + ПУ заряжено + + + Load %1 + Lade %1 + Загрузка %1 + + + \ No newline at end of file diff --git a/addons/respawn/stringtable.xml b/addons/respawn/stringtable.xml index 59a9b2b31c..0f1ae731f5 100644 --- a/addons/respawn/stringtable.xml +++ b/addons/respawn/stringtable.xml @@ -1,21 +1,26 @@  + Deploy in 5 seconds ... Wird in 5 Sekunden errichtet ... + Возрождение через 5 секунд ... Rallypoint deployed Rallypoint errichtet + Точка сбора установлена Teleported to Base Zur Basis teleportiert + Телепорт на базу Teleported to Rallypoint Zum Rallypoint teleportiert + Телепорт на точку сбора - + \ No newline at end of file diff --git a/addons/switchunits/stringtable.xml b/addons/switchunits/stringtable.xml index 842bf89127..81cde4b007 100644 --- a/addons/switchunits/stringtable.xml +++ b/addons/switchunits/stringtable.xml @@ -1,4 +1,5 @@  + @@ -12,10 +13,10 @@ This unit is too close to the enemy. Diese Einheit ist zu nah am Feind. - Юнит слишком близок к противнику + Юнит слишком близок к противнику. Tato jednotka je moc blízko k nepříteli. Ta jednostka jest zbyt blisko przeciwnika. Esta unidad está demasiado cerca del enemigo. - + \ No newline at end of file diff --git a/addons/weaponselect/stringtable.xml b/addons/weaponselect/stringtable.xml index 3a39d59396..0e7d881413 100644 --- a/addons/weaponselect/stringtable.xml +++ b/addons/weaponselect/stringtable.xml @@ -1,12 +1,14 @@  - + Display text on grenade throw + Показывать текст при броске Display a hint or text on grenade throw. + Показывать текст или подсказку при броске гранаты. Select Pistol @@ -226,7 +228,7 @@ Už nejsou žádné ostatní granáty Não há outras granadas restantes Nessun'altra granata rimanente. - Невзрывоопасные гранаты закончились + Летальные гранаты закончились No grenade selected diff --git a/addons/wep_javelin/stringtable.xml b/addons/wep_javelin/stringtable.xml index 4068d6f0a6..d257c15e04 100644 --- a/addons/wep_javelin/stringtable.xml +++ b/addons/wep_javelin/stringtable.xml @@ -1,24 +1,24 @@ - - + + - - - Lock Target (Hold) - Lock Target (Hold) - Lock Target (Hold) - Lock Target (Hold) - Lock Target (Hold) - Lock Target (Hold) - Lock Target (Hold) - - - Cycle Fire Mode - Cycle Fire Mode - Cycle Fire Mode - Cycle Fire Mode - Cycle Fire Mode - Cycle Fire Mode - Cycle Fire Mode - - - + + + Lock Target (Hold) + Lock Target (Hold) + Lock Target (Hold) + Lock Target (Hold) + Lock Target (Hold) + Lock Target (Hold) + Захватить цель (удерживать) + + + Cycle Fire Mode + Cycle Fire Mode + Cycle Fire Mode + Cycle Fire Mode + Cycle Fire Mode + Cycle Fire Mode + Переключение режимов огня + + + \ No newline at end of file diff --git a/addons/winddeflection/stringtable.xml b/addons/winddeflection/stringtable.xml index b52100046f..1fb382fd3e 100644 --- a/addons/winddeflection/stringtable.xml +++ b/addons/winddeflection/stringtable.xml @@ -1,32 +1,38 @@ - - - - - - Wind Information - Informacje o wietrze - Información del viento - - - Direction: %1 - Kierunek: %1 - Dirección: %1 - - - Speed: %1 m/s - Prędkość: %1 - Velocidad: %1 m/s - - - Weather Information - Informacje o pogodzie - Información Meteorológica - - - Humidity: %1% - Wilgotność: %1 - Humedad: %1% - - - - + + + + + + + Wind Information + Informacje o wietrze + Información del viento + Ветер + + + Direction: %1 + Kierunek: %1 + Dirección: %1 + Направление: %1 + + + Speed: %1 m/s + Prędkość: %1 + Velocidad: %1 m/s + Скорость: %1 м/с + + + Weather Information + Informacje o pogodzie + Información Meteorológica + Погода + + + Humidity: %1% + Wilgotność: %1 + Humedad: %1% + Влажность: %1% + + + + \ No newline at end of file From 63e5247d3b11eec7c1ab5ae5dbf9325052d227d8 Mon Sep 17 00:00:00 2001 From: nic547 <32dominic.ri@gmail.com> Date: Sat, 11 Apr 2015 21:00:41 +0200 Subject: [PATCH 113/214] more ammotypes for the mags --- addons/magazines/CfgAmmo.hpp | 6 ++++ addons/magazines/CfgMagazines.hpp | 34 +++++++++++++++++++++ addons/magazines/CfgWeapons.hpp | 13 ++++++-- addons/magazines/stringtable.xml | 51 ++++++++++++++++++++++++++++++- 4 files changed, 101 insertions(+), 3 deletions(-) diff --git a/addons/magazines/CfgAmmo.hpp b/addons/magazines/CfgAmmo.hpp index 6ed27581f4..8a9a3ec209 100644 --- a/addons/magazines/CfgAmmo.hpp +++ b/addons/magazines/CfgAmmo.hpp @@ -142,6 +142,12 @@ class CfgAmmo { class ACE_B_338_NM_Ball_Tracer_Dim: B_338_NM_Ball { nvgOnly = 1; }; + + //AP + class ACE_B_338_NM_Ball_AP: B_338_NM_Ball { + caliber = 3.2; + hit = 16.8; + }; /* 9.3x64mm */ diff --git a/addons/magazines/CfgMagazines.hpp b/addons/magazines/CfgMagazines.hpp index de19a86f7a..cea8c31004 100644 --- a/addons/magazines/CfgMagazines.hpp +++ b/addons/magazines/CfgMagazines.hpp @@ -192,9 +192,18 @@ class CfgMagazines { displayNameShort = "$STR_ACE_130Rnd_338_Mag_Tracer_DimNameShort"; descriptionShort = "$STR_ACE_130Rnd_338_Mag_Tracer_DimDescription"; }; + + class ACE_130Rnd_338_Mag_AP: 130Rnd_338_Mag { + author = "$STR_ACE_Common_ACETeam"; + ammo = "ACE_B_338_NM_Ball_AP"; + displayName = "$STR_ACE_130Rnd_338_Mag_APName"; + displayNameShort = "$STR_ACE_130Rnd_338_Mag_APNameShort"; + descriptionShort = "$STR_ACE_130Rnd_338_Mag_APDescription"; + }; /* 9.3x64mm */ + //10Rnd Mags class 10Rnd_93x64_DMR_05_Mag; class ACE_10Rnd_93x64_DMR_05_Mag_Tracer: 10Rnd_93x64_DMR_05_Mag { @@ -229,4 +238,29 @@ class CfgMagazines { descriptionShort = "$STR_ACE_10Rnd_93x64_DMR_05_Mag_SDDescription"; initSpeed = 320; }; + //150Rnd Belt + class 150Rnd_93x64_Mag; + class ACE_150Rnd_93x64_Mag_Tracer: 150Rnd_93x64_Mag { + author = "$STR_ACE_Common_ACEETeam"; + displayName = "$STR_ACE_150Rnd_93x64_Mag_TracerName"; + displayNameShort = "$STR_ACE_150Rnd_93x64_Mag_TracerNameShort"; + descriptionShort = "$STR_ACE_150Rnd_93x64_Mag_TracerDescription"; + tracersEvery = 1; + }; + + class ACE_150Rnd_93x64_Mag_Tracer_Dim: ACE_150Rnd_93x64_Mag_Tracer { + author = "$STR_ACE_Common_ACEETeam"; + ammo ="ACE_B_93x64_Ball_Tracer_Dim"; + displayName = "$STR_ACE_150Rnd_93x64_Mag_Tracer_DimName"; + displayNameShort = "$STR_ACE_150Rnd_93x64_Mag_Tracer_DimNameShort"; + descriptionShort = "$STR_ACE_150Rnd_93x64_Mag_Tracer_DimDescription"; + }; + + class ACE_150Rnd_93x64_Mag_AP: 150Rnd_93x64_Mag { + author = "$STR_ACE_Common_ACEETeam"; + ammo = "ACE_B_93x64_Ball_AP"; + displayName = "$STR_ACE_150Rnd_93x64_Mag_APName"; + displayNameShort = "$STR_ACE_150Rnd_93x64_Mag_APNameShort"; + descriptionShort = "$STR_ACE_150Rnd_93x64_Mag_APDescription"; + }; }; diff --git a/addons/magazines/CfgWeapons.hpp b/addons/magazines/CfgWeapons.hpp index f1c9049894..4710e1d70b 100644 --- a/addons/magazines/CfgWeapons.hpp +++ b/addons/magazines/CfgWeapons.hpp @@ -113,10 +113,11 @@ class CfgWeapons { }; }; - class MMG_02_base_F: Rifle_Long_Base_F { + class MMG_02_base_F: Rifle_Long_Base_F { magazines[] += { "ACE_130Rnd_338_Mag_Tracer", - "ACE_130Rnd_338_Mag_Tracer_Dim" + "ACE_130Rnd_338_Mag_Tracer_Dim", + "ACE_130Rnd_338_Mag_AP" }; }; @@ -128,6 +129,14 @@ class CfgWeapons { "ACE_10Rnd_93x64_DMR_05_Mag_SD" }; }; + + class MMG_01_base_F: Rifle_Long_Base_F { + magazines[] += { + "ACE_150Rnd_93x64_Mag_Tracer", + "ACE_150Rnd_93x64_Mag_Tracer_Dim", + "ACE_150Rnd_93x64_Mag_AP" + }; + }; /* Assault Rifles */ diff --git a/addons/magazines/stringtable.xml b/addons/magazines/stringtable.xml index bdb32796cb..ff2a3eaae8 100644 --- a/addons/magazines/stringtable.xml +++ b/addons/magazines/stringtable.xml @@ -560,7 +560,19 @@ Caliber: .338 Norma Magnum Tracer IR-DIM<br />Rounds: 130<br />Used in: SPMG Kaliber: .338 Norma Magnum Leuchtspur IR-DIM<br />Schuss: 130<br />Verwendet für: SPMG - + + .338 NM 130Rnd AP Belt + .338 NM 130-Schuss-Gurt Hartkern + + + .338 NM AP + .338 NM AP + + + Caliber: .338 Norma Magnum AP<br />Rounds: 130<br />Used in: SPMG + Kaliber: .338 Norma Magnum Hartkern<br />Schuss: 130<br />Verwendet für: SPMG + + 9.3mm 10Rnd Tracer Mag 9,3mm 10-Schuss-Magazin Leuchtspur @@ -609,5 +621,42 @@ Caliber: 9.3x64mm SD<br />Rounds: 10<br />Used in: Cyrus Kaliber: 9,3x64mm Unterschall<br />Schuss: 10<br />Verwendet für: Cyrus + + + 9.3mm 150Rnd Tracer Belt + 9,3mm 150-Schuss-Gurt Leuchtspur + + + 9.3mm Tracer + 9,3mm Leuchtspur + + + Caliber: 9.3x64mm Tracer<br />Rounds: 150<br />Used in: Navid + Kaliber: 9,3x64mm Leuchtspur<br />Schuss: 150<br />Verwendet für: Navid + + + 9.3mm 150Rnd Tracer IR-DIM Belt + 9,3mm 150-Schuss-Gurt Leuchtspur IR-DIM + + + 9.3mm IR-DIM + 9,3mm IR-DIM + + + Caliber: 9.3x64mm Tracer IR-DIM<br />Rounds: 150<br />Used in: Navid + Kaliber: 9,3x64mm Leuchtspur IR-DIM<br />Schuss: 150<br />Verwendet für: Navid + + + 9.3mm 150Rnd AP Belt + 9,3mm 150-Schuss-Gurt Hartkern + + + 9.3mm AP + 9,3mm AP + + + Caliber: 9.3x64mm AP<br />Rounds: 150<br />Used in: Navid + Kaliber: 9,3x64mm Hartkern<br />Schuss: 150<br />Verwendet für: Navid + From 082ab5155e15b13019d76418bb8a7cbc7fdd5cef Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sat, 11 Apr 2015 21:27:49 +0200 Subject: [PATCH 114/214] Minor performance improvements Before avg: 0.0858495ms After avg: 0.0701045ms --- .../functions/fnc_handleDamage_caching.sqf | 68 ++++++------------- 1 file changed, 22 insertions(+), 46 deletions(-) diff --git a/addons/medical/functions/fnc_handleDamage_caching.sqf b/addons/medical/functions/fnc_handleDamage_caching.sqf index ddd0b6c920..ef775aeb30 100644 --- a/addons/medical/functions/fnc_handleDamage_caching.sqf +++ b/addons/medical/functions/fnc_handleDamage_caching.sqf @@ -34,18 +34,8 @@ if (_selectionName in _hitSelections) then { _newDamage = _damage - (_unit getHitPointDamage (_hitPoints select (_hitSelections find _selectionName))); }; - -// we want to move damage to another selection; have to do it ourselves. -// this is only the case for limbs, so this will not impact the killed EH. -if (_selectionName != (_this select 1)) then { - _unit setHitPointDamage [_hitPoints select (_hitSelections find _selectionName), _damage + _newDamage]; - _newDamage = 0; -}; -// ?????? -_damage = _damage + _newDamage; - // Check for vehicle crash -if (vehicle _unit != _unit && !(vehicle _unit isKindOf "StaticWeapon") && {isNull _source} && {_projectile == ""} && {_selectionName == ""}) then { +if (vehicle _unit != _unit && {!(vehicle _unit isKindOf "StaticWeapon")} && {isNull _source} && {_projectile == ""} && {_selectionName == ""}) then { if (missionNamespace getvariable [QGVAR(allowVehicleCrashDamage), true]) then { _selectionName = _hitSelections select (floor(random(count _hitSelections))); _projectile = "vehiclecrash"; @@ -54,10 +44,11 @@ if (vehicle _unit != _unit && !(vehicle _unit isKindOf "StaticWeapon") && {isNul // From AGM medical: // Exclude falling damage to everything other than legs; reduce structural damage. -if (((velocity _unit) select 2 < -5) && (vehicle _unit == _unit)) then { +if (((velocity _unit) select 2 < -5) && {(vehicle _unit == _unit)}) then { _unit setVariable [QGVAR(isFalling), True]; }; -if (_unit getVariable [QGVAR(isFalling), false] && !(_selectionName in ["", "leg_l", "leg_r"])) exitWith {}; + +if (_unit getVariable [QGVAR(isFalling), false] && {!(_selectionName in ["", "leg_l", "leg_r"])}) exitWith {}; if (_unit getVariable [QGVAR(isFalling), false]) then { _newDamage = _newDamage * 0.7; }; @@ -69,21 +60,14 @@ if (diag_frameno > (_unit getVariable [QGVAR(frameNo_damageCaching), -3]) + 2) t // handle the cached damages 3 frames later [{ - private ["_args","_unit","_frameNo"]; + private "_args"; _args = _this select 0; - _unit = _args select 0; - _frameNo = _args select 1; - if (diag_frameno > _frameNo + 2) then { - _cache_projectiles = _unit getVariable [QGVAR(cachedProjectiles), []]; - _cache_hitpoints = _unit getVariable [QGVAR(cachedHitPoints), []]; - _cache_damages = _unit getVariable [QGVAR(cachedDamages), []]; - _cache_params = _unit getVariable [QGVAR(cachedHandleDamageParams), []]; + if (diag_frameno > (_args select 1) + 2) then { + _cache_params = (_args select 0) getVariable [QGVAR(cachedHandleDamageParams), []]; { - if (typeName _x == typeName "") then { - (_cache_params select _foreachIndex) call FUNC(handleDamage_advanced); - }; - }foreach _cache_projectiles; + _x call FUNC(handleDamage_advanced); + }foreach _cache_params; [(_this select 1)] call cba_fnc_removePerFrameHandler; }; }, 0, [_unit, diag_frameno] ] call CBA_fnc_addPerFrameHandler; @@ -102,40 +86,32 @@ _cache_params = _unit getVariable QGVAR(cachedHandleDamageParams); // Caching of the damage events if (_selectionName != "") then { - + private ["_index","_otherDamage"]; + _index = _cache_projectiles find _projectile; // Check if the current projectile has already been handled once - if (_projectile in _cache_projectiles) then { - private ["_index","_otherDamage"]; - // if it has been handled, find the index in the cache - _index = _cache_projectiles find _projectile; - + if (_index >= 0) exitwith { // Find the previous damage this projectile has done _otherDamage = (_cache_damages select _index); // Take the highest damage of the two - if (_otherDamage > _newDamage) then { - _newDamage = 0; - } else { + if (_newDamage > _otherDamage) then { private ["_hitPoint", "_restore"]; // Restore the damage before the previous damage was processed _hitPoint = _cache_hitpoints select _index; _restore = ((_unit getHitPointDamage _hitPoint) - _otherDamage) max 0; _unit setHitPointDamage [_hitPoint, _restore]; - // Make entry unfindable and add the new damage cache - _cache_projectiles set [_index, objNull]; - _cache_projectiles pushBack _projectile; - _cache_hitpoints pushBack (_hitPoints select (_hitSelections find _selectionName)); - _cache_damages pushBack _newDamage; - _cache_params pushBack [_unit, _selectionName, _damage, _source, _projectile]; + _cache_hitpoints set [_index, (_hitPoints select (_hitSelections find _selectionName))]; + _cache_damages set [_index, _newDamage]; + _cache_params set[_index, _this]; }; - } else { - // This is an unhandled projectile - _cache_projectiles pushBack _projectile; - _cache_hitpoints pushBack (_hitPoints select (_hitSelections find _selectionName)); - _cache_damages pushBack _newDamage; - _cache_params pushBack [_unit, _selectionName, _damage, _source, _projectile]; }; + + // This is an unhandled projectile + _cache_projectiles pushBack _projectile; + _cache_hitpoints pushBack (_hitPoints select (_hitSelections find _selectionName)); + _cache_damages pushBack _newDamage; + _cache_params pushBack _this; }; // Store the new cached values From 505005891d76390cc506464b708564a6c36966f5 Mon Sep 17 00:00:00 2001 From: jaynus Date: Sat, 11 Apr 2015 12:42:30 -0700 Subject: [PATCH 115/214] Remove debug, targeting constraints working. --- addons/javelin/RscInGameUI.hpp | 353 ++++++++++--------- addons/javelin/functions/fnc_onOpticDraw.sqf | 7 +- 2 files changed, 180 insertions(+), 180 deletions(-) diff --git a/addons/javelin/RscInGameUI.hpp b/addons/javelin/RscInGameUI.hpp index b324ed1609..929838d373 100644 --- a/addons/javelin/RscInGameUI.hpp +++ b/addons/javelin/RscInGameUI.hpp @@ -12,7 +12,7 @@ class RscLine; class RscInGameUI { class RscOptics_titan { idd = 300; - controls[] = {"ACE_javelin_elements_group", "CA_Distance", "ACE_Targeting" }; //, "ACE_TargetingConstrains", "ACE_TargetingGate", "ACE_TargetingLines"}; + controls[] = { "ACE_javelin_elements_group", "CA_Distance", "ACE_Targeting" }; //, "ACE_TargetingConstrains", "ACE_TargetingGate", "ACE_TargetingLines"}; onLoad = QUOTE(_this call FUNC(onOpticLoad)); onUnload = "uiNameSpace setVariable ['ACE_RscOptics_javelin',nil];"; @@ -25,181 +25,7 @@ class RscInGameUI { w = 0; h = 0; }; - class ACE_Targeting : RscControlsGroup { - idc = 6999; - - x = "SafezoneX"; - y = "SafezoneY"; - w = "SafezoneW"; - h = "SafezoneH"; - - enabled = 1; - class Controls { - class ACE_TargetingConstrains: RscControlsGroup { - x = "SafezoneX"; - y = "SafezoneY"; - w = "SafezoneW-SafezoneX"; - h = "SafezoneH-SafezoneY"; - - enabled = 1; - class VScrollbar { - autoScrollSpeed = -1; - autoScrollDelay = 5; - autoScrollRewind = 0; - color[] = {1,1,1,0}; - width = 0.001; - }; - class HScrollbar { - color[] = {1,1,1,0}; - height = 0.001; - }; - class Controls { - class Top: RscPicture { - idc = 699101; - text = "#(argb,8,8,3)color(1,1,1,1)"; - colorText[] = {0.2941,0.2941,0.2941,1}; - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; - y = "0.15*SafezoneH-SafezoneY"; - w = "(3/4)*SafezoneH"; - h = "0.21*SafezoneH"; - }; - class Bottom: Top { - idc = 699102; - y = "0.64*SafezoneH-SafezoneY"; - }; - class Left: Top { - idc = 699103; - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; - y = "0.36*SafezoneH-SafezoneY"; - w = "0.31*(3/4)*SafezoneH"; - h = "0.28*SafezoneH"; - }; - class Right: Left { - idc = 699104; - x = "((SafezoneW -(3/4)*SafezoneH)/2)+ 0.69*(3/4)*SafezoneH - SafezoneX"; - }; - class OpticsBorders: RscPicture { - idc = 699105; - text = PATHTOF(data\javelin_ui_border_ca.paa); - colorText[] = {0,0,0,1}; - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; - y = "0.15*SafezoneH-SafezoneY"; - w = "(3/4)*SafezoneH"; - h = "0.7*SafezoneH"; - }; - }; - }; - - class ACE_TargetingGate : ACE_TargetingConstrains { - idc = 699200; - class Controls { - class TargetingGateTL: ACE_TargetingConstrains { - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; - y = "0.15*SafezoneH - SafezoneY"; - idc = 699201; - class Controls { - class LineH: RscLine { - idc = 699210; - x = "0"; - y = "0"; - w = "0.025*(3/4)*SafezoneH"; - h = "0"; - colorText[] = {0.8745,0.8745,0.8745,1}; - }; - class LineV: LineH { - idc = 699211; - w = "0"; - h = "0.025*SafezoneH"; - }; - }; - }; - class TargetingGateTR: TargetingGateTL { - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX + 0.975*(3/4)*SafezoneH"; - y = "0.15*SafezoneH - SafezoneY"; - idc = 699202; - class Controls { - class LineH: RscLine { - idc = 699220; - x = "0"; - y = "0"; - w = "0.025*(3/4)*SafezoneH"; - h = "0"; - colorText[] = {0.8745,0.8745,0.8745,1}; - }; - class LineV: LineH { - idc = 699221; - x = "0.025*(3/4)*SafezoneH"; - w = "0"; - h = "0.025*SafezoneH"; - }; - }; - }; - class TargetingGateBL: TargetingGateTL { - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; - y = "0.825*SafezoneH - SafezoneY"; - idc = 699203; - class Controls { - class LineH: RscLine { - x = "0"; - y = "0.025*SafezoneH"; - w = "0.025*(3/4)*SafezoneH"; - h = "0"; - colorText[] = {0.8745,0.8745,0.8745,1}; - }; - class LineV: LineH { - y = "0"; - w = "0"; - h = "0.025*SafezoneH"; - }; - }; - }; - class TargetingGateBR: TargetingGateBL { - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX + 0.975*(3/4)*SafezoneH"; - y = "0.825*SafezoneH - SafezoneY"; - idc = 699204; - class Controls { - class LineH: RscLine { - x = "0"; - y = "0.025*SafezoneH"; - w = "0.025*(3/4)*SafezoneH"; - h = "0"; - colorText[] = {0.8745,0.8745,0.8745,1}; - }; - class LineV: LineH { - x = "0.025*(3/4)*SafezoneH"; - y = "0"; - w = "0"; - h = "0.025*SafezoneH"; - }; - }; - }; - }; - }; - - - class ACE_TargetingLines: ACE_TargetingConstrains { - idc = 699300; - class Controls { - class LineH: RscLine { - idc = 699301; - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; - y = "0.5*SafezoneH - SafezoneY"; - w = "(3/4)*SafezoneH"; - h = "0"; - colorText[] = {0.8745,0.8745,0.8745,1}; - }; - class LineV: RscLine { - idc = 699302; - x = "0.5*SafezoneW - SafezoneX"; - y = "0.15*SafezoneH - SafezoneY"; - w = "0"; - h = "0.7*SafezoneH"; - colorText[] = {0.8745,0.8745,0.8745,1}; - }; - }; - }; - }; - }; + class ACE_javelin_elements_group: RscControlsGroup { x = "SafezoneX"; @@ -442,6 +268,181 @@ class RscInGameUI { }; }; }; + class ACE_Targeting : RscControlsGroup { + idc = 6999; + + x = "SafezoneX"; + y = "SafezoneY"; + w = "SafezoneW"; + h = "SafezoneH"; + + enabled = 1; + class Controls { + class ACE_TargetingConstrains: RscControlsGroup { + x = "SafezoneX"; + y = "SafezoneY"; + w = "SafezoneW-SafezoneX"; + h = "SafezoneH-SafezoneY"; + + enabled = 1; + class VScrollbar { + autoScrollSpeed = -1; + autoScrollDelay = 5; + autoScrollRewind = 0; + color[] = {1,1,1,0}; + width = 0.001; + }; + class HScrollbar { + color[] = {1,1,1,0}; + height = 0.001; + }; + class Controls { + class Top: RscPicture { + idc = 699101; + text = "#(argb,8,8,3)color(1,1,1,1)"; + colorText[] = {0.2941,0.2941,0.2941,1}; + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; + y = "0.15*SafezoneH-SafezoneY"; + w = "(3/4)*SafezoneH"; + h = "0.21*SafezoneH"; + }; + class Bottom: Top { + idc = 699102; + y = "0.64*SafezoneH-SafezoneY"; + }; + class Left: Top { + idc = 699103; + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; + y = "0.36*SafezoneH-SafezoneY"; + w = "0.31*(3/4)*SafezoneH"; + h = "0.28*SafezoneH"; + }; + class Right: Left { + idc = 699104; + x = "((SafezoneW -(3/4)*SafezoneH)/2)+ 0.69*(3/4)*SafezoneH - SafezoneX"; + }; + class OpticsBorders: RscPicture { + idc = 699105; + text = PATHTOF(data\javelin_ui_border_ca.paa); + colorText[] = {0,0,0,1}; + x = "((SafezoneW -(3.1/4)*SafezoneH)/2) - SafezoneX"; + y = "0.15*SafezoneH-SafezoneY"; + w = "(3.1/4)*SafezoneH"; + h = "0.7*SafezoneH"; + }; + }; + }; + + class ACE_TargetingGate : ACE_TargetingConstrains { + idc = 699200; + class Controls { + class TargetingGateTL: ACE_TargetingConstrains { + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; + y = "0.15*SafezoneH - SafezoneY"; + idc = 699201; + class Controls { + class LineH: RscLine { + idc = 699210; + x = "0"; + y = "0"; + w = "0.025*(3/4)*SafezoneH"; + h = "0"; + colorText[] = {0.8745,0.8745,0.8745,1}; + }; + class LineV: LineH { + idc = 699211; + w = "0"; + h = "0.025*SafezoneH"; + }; + }; + }; + class TargetingGateTR: TargetingGateTL { + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX + 0.975*(3/4)*SafezoneH"; + y = "0.15*SafezoneH - SafezoneY"; + idc = 699202; + class Controls { + class LineH: RscLine { + idc = 699220; + x = "0"; + y = "0"; + w = "0.025*(3/4)*SafezoneH"; + h = "0"; + colorText[] = {0.8745,0.8745,0.8745,1}; + }; + class LineV: LineH { + idc = 699221; + x = "0.025*(3/4)*SafezoneH"; + w = "0"; + h = "0.025*SafezoneH"; + }; + }; + }; + class TargetingGateBL: TargetingGateTL { + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; + y = "0.825*SafezoneH - SafezoneY"; + idc = 699203; + class Controls { + class LineH: RscLine { + x = "0"; + y = "0.025*SafezoneH"; + w = "0.025*(3/4)*SafezoneH"; + h = "0"; + colorText[] = {0.8745,0.8745,0.8745,1}; + }; + class LineV: LineH { + y = "0"; + w = "0"; + h = "0.025*SafezoneH"; + }; + }; + }; + class TargetingGateBR: TargetingGateBL { + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX + 0.975*(3/4)*SafezoneH"; + y = "0.825*SafezoneH - SafezoneY"; + idc = 699204; + class Controls { + class LineH: RscLine { + x = "0"; + y = "0.025*SafezoneH"; + w = "0.025*(3/4)*SafezoneH"; + h = "0"; + colorText[] = {0.8745,0.8745,0.8745,1}; + }; + class LineV: LineH { + x = "0.025*(3/4)*SafezoneH"; + y = "0"; + w = "0"; + h = "0.025*SafezoneH"; + }; + }; + }; + }; + }; + + + class ACE_TargetingLines: ACE_TargetingConstrains { + idc = 699300; + class Controls { + class LineH: RscLine { + idc = 699301; + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; + y = "0.5*SafezoneH - SafezoneY"; + w = "(3/4)*SafezoneH"; + h = "0"; + colorText[] = {0.8745,0.8745,0.8745,1}; + }; + class LineV: RscLine { + idc = 699302; + x = "0.5*SafezoneW - SafezoneX"; + y = "0.15*SafezoneH - SafezoneY"; + w = "0"; + h = "0.7*SafezoneH"; + colorText[] = {0.8745,0.8745,0.8745,1}; + }; + }; + }; + }; + }; }; }; diff --git a/addons/javelin/functions/fnc_onOpticDraw.sqf b/addons/javelin/functions/fnc_onOpticDraw.sqf index 393dd04b6d..90772cf9e3 100644 --- a/addons/javelin/functions/fnc_onOpticDraw.sqf +++ b/addons/javelin/functions/fnc_onOpticDraw.sqf @@ -1,9 +1,9 @@ -#define DEBUG_MODE_FULL +//#define DEBUG_MODE_FULL #include "script_component.hpp" //TRACE_1("enter", _this); #define __TRACKINTERVAL 0.1 // how frequent the check should be. -#define __LOCKONTIME 1.85 // Lock on won't occur sooner +#define __LOCKONTIME 3.0 // Lock on won't occur sooner #define __LOCKONTIMERANDOM 0.3 // Deviation in lock on time #define __SENSORSQUARE 1 // Locking on sensor square side in angles @@ -83,7 +83,7 @@ if (isNull _newTarget) then { playSound "ACE_Javelin_Locking"; } else { - if(diag_tickTime - _lockTime > 3) then { + if(diag_tickTime - _lockTime > __LOCKONTIME) then { TRACE_2("LOCKED!", _currentTarget, _lockTime); __JavelinIGUISeek ctrlSetTextColor __ColorGreen; @@ -143,7 +143,6 @@ if (isNull _newTarget) then { {_x ctrlCommit __TRACKINTERVAL} forEach [__JavelinIGUITargetingGateTL,__JavelinIGUITargetingGateTR,__JavelinIGUITargetingGateBL,__JavelinIGUITargetingGateBR]; - ACE_player setVariable["ace_missileguidance_target", _currentTarget, false]; if(diag_tickTime > _soundTime) then { From 51906e341db39b1565bd4faede7c369cbc202c14 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sat, 11 Apr 2015 22:29:11 +0200 Subject: [PATCH 116/214] Removed unused variables --- addons/medical/functions/fnc_handleDamage_wounds.sqf | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/addons/medical/functions/fnc_handleDamage_wounds.sqf b/addons/medical/functions/fnc_handleDamage_wounds.sqf index 1eebe038cd..5933651e57 100644 --- a/addons/medical/functions/fnc_handleDamage_wounds.sqf +++ b/addons/medical/functions/fnc_handleDamage_wounds.sqf @@ -52,10 +52,10 @@ _allPossibleInjuries = []; // Check if the damage is higher as the min damage for the specific injury if (_damage >= _minDamage && {_damage <= _maxDamage || _maxDamage < 0}) then { - _classType = _x select 0; + //_classType = _x select 0; _selections = _x select 1; - _bloodLoss = _x select 2; - _pain = _x select 3; + //_bloodLoss = _x select 2; + //_pain = _x select 3; // Check if the injury can be applied to the given selection name if ("All" in _selections || _selectionName in _selections) then { @@ -73,9 +73,7 @@ _allPossibleInjuries = []; }foreach _allInjuriesForDamageType; // No possible wounds available for this damage type or damage amount. -if (_highestPossibleSpot < 0) exitwith { - -}; +if (_highestPossibleSpot < 0) exitwith {}; // Administration for open wounds and ids _openWounds = _unit getvariable[QGVAR(openWounds), []]; @@ -125,7 +123,7 @@ _woundsCreated = []; _painToAdd = _painToAdd + (_toAddInjury select 3); }; }; -}foreach (_injuryTypeInfo select 0); +}foreach (_injuryTypeInfo select 0); // foreach damage thresholds _unit setvariable [QGVAR(openWounds), _openWounds, !USE_WOUND_EVENT_SYNC]; From c69f71ba71c445aa8e3235876644013e764bfd10 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sat, 11 Apr 2015 22:29:32 +0200 Subject: [PATCH 117/214] formatting --- .../medical/functions/fnc_handleDamage_advancedSetDamage.sqf | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/addons/medical/functions/fnc_handleDamage_advancedSetDamage.sqf b/addons/medical/functions/fnc_handleDamage_advancedSetDamage.sqf index 74db6029d2..f464ef5a94 100644 --- a/addons/medical/functions/fnc_handleDamage_advancedSetDamage.sqf +++ b/addons/medical/functions/fnc_handleDamage_advancedSetDamage.sqf @@ -16,9 +16,7 @@ private ["_unit", "_bodyStatus", "_headDamage", "_torsoDamage", "_handsDamage", "_legsDamage"]; _unit = _this select 0; -if (!local _unit) exitwith { - // execute only local -}; +if (!local _unit) exitwith {}; _bodyStatus = _unit getvariable [QGVAR(bodyPartStatus),[0,0,0,0,0,0]]; // ["head", "body", "hand_l", "hand_r", "leg_l", "leg_r"] From e8d2a009944ef72df93a78f48004a2f36312e490 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sat, 11 Apr 2015 22:30:52 +0200 Subject: [PATCH 118/214] Added GVAR(HITPOINTS) and GVAR(SELECTIONS) variables No longer have to recreate the selection and hitpoint arrays every time --- addons/medical/XEH_preInit.sqf | 3 ++ addons/medical/functions/fnc_handleDamage.sqf | 14 ++---- .../functions/fnc_handleDamage_caching.sqf | 44 ++++++++++++------- 3 files changed, 35 insertions(+), 26 deletions(-) diff --git a/addons/medical/XEH_preInit.sqf b/addons/medical/XEH_preInit.sqf index c18a116e31..8e1fd5856f 100644 --- a/addons/medical/XEH_preInit.sqf +++ b/addons/medical/XEH_preInit.sqf @@ -102,4 +102,7 @@ GVAR(IVBags) = []; call FUNC(parseConfigForInjuries); +GVAR(HITPOINTS) = ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"]; +GVAR(SELECTIONS) = ["head", "body", "hand_l", "hand_r", "leg_l", "leg_r"]; + ADDON = true; diff --git a/addons/medical/functions/fnc_handleDamage.sqf b/addons/medical/functions/fnc_handleDamage.sqf index 074f8c41fa..1632a8f55b 100644 --- a/addons/medical/functions/fnc_handleDamage.sqf +++ b/addons/medical/functions/fnc_handleDamage.sqf @@ -17,7 +17,7 @@ #include "script_component.hpp" -private ["_unit", "_selection", "_damage", "_shooter", "_projectile", "_damageReturn", "_hitPoints", "_typeOfDamage"]; +private ["_unit", "_selection", "_damage", "_shooter", "_projectile", "_damageReturn", "_typeOfDamage"]; _unit = _this select 0; _selection = _this select 1; _damage = _this select 2; @@ -32,8 +32,7 @@ if (typeName _projectile == "OBJECT") then { }; // If the damage is being weird, we just tell it to fuck off. -_hitSelections = ["head", "body", "hand_l", "hand_r", "leg_l", "leg_r"]; -if !(_selection in (_hitSelections + [""])) exitWith {0}; +if !(_selection in (GVAR(SELECTIONS) + [""])) exitWith {0}; _damageReturn = _damage; if (GVAR(level) < 2) then { @@ -46,8 +45,7 @@ if (GVAR(level) >= 2) then { // lets use basic for the time being.. _damageReturn = _this call FUNC(handleDamage_basic); }; - - [_unit, _selection, _damage, _source, _projectile] call FUNC(handleDamage_caching); + _newDamage = _this call FUNC(handleDamage_caching); if (_damageReturn > 0.9) then { @@ -59,12 +57,6 @@ if (GVAR(level) >= 2) then { _minLethalDamage = GVAR(minLethalDamages) select _typeIndex; }; - _hitPoints = ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"]; - _newDamage = _damage - (damage _unit); - if (_selection in _hitSelections) then { - _newDamage = _damage - (_unit getHitPointDamage (_hitPoints select (_hitSelections find _selection))); - }; - if ((_minLethalDamage <= _newDamage) && {[_unit, [_selection] call FUNC(selectionNameToNumber), _newDamage] call FUNC(determineIfFatal)} && {_selection in ["", "head", "body"]}) then { if ([_unit] call FUNC(setDead)) then { _damageReturn = 1; diff --git a/addons/medical/functions/fnc_handleDamage_caching.sqf b/addons/medical/functions/fnc_handleDamage_caching.sqf index ef775aeb30..98b2373c74 100644 --- a/addons/medical/functions/fnc_handleDamage_caching.sqf +++ b/addons/medical/functions/fnc_handleDamage_caching.sqf @@ -25,8 +25,8 @@ _damage = _this select 2; _source = _this select 3; _projectile = _this select 4; -_hitSelections = ["head", "body", "hand_l", "hand_r", "leg_l", "leg_r"]; -_hitPoints = ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"]; +_hitSelections = GVAR(SELECTIONS); +_hitPoints = GVAR(HITPOINTS); // Calculate change in damage. _newDamage = _damage - (damage _unit); @@ -34,6 +34,8 @@ if (_selectionName in _hitSelections) then { _newDamage = _damage - (_unit getHitPointDamage (_hitPoints select (_hitSelections find _selectionName))); }; +//_damage = _damage + _newDamage; + // Check for vehicle crash if (vehicle _unit != _unit && {!(vehicle _unit isKindOf "StaticWeapon")} && {isNull _source} && {_projectile == ""} && {_selectionName == ""}) then { if (missionNamespace getvariable [QGVAR(allowVehicleCrashDamage), true]) then { @@ -60,13 +62,15 @@ if (diag_frameno > (_unit getVariable [QGVAR(frameNo_damageCaching), -3]) + 2) t // handle the cached damages 3 frames later [{ - private "_args"; + private ["_args", "_params"]; _args = _this select 0; if (diag_frameno > (_args select 1) + 2) then { _cache_params = (_args select 0) getVariable [QGVAR(cachedHandleDamageParams), []]; + _cache_damages = (_args select 0) getVariable QGVAR(cachedDamages); { - _x call FUNC(handleDamage_advanced); + _params = _x + [_cache_damages select _foreachIndex]; + _params call FUNC(handleDamage_advanced); }foreach _cache_params; [(_this select 1)] call cba_fnc_removePerFrameHandler; }; @@ -78,23 +82,22 @@ if (diag_frameno > (_unit getVariable [QGVAR(frameNo_damageCaching), -3]) + 2) t _unit setVariable [QGVAR(cachedHandleDamageParams), []]; }; -// Make sure there's only one damaged selection per projectile per frame. -_cache_projectiles = _unit getVariable QGVAR(cachedProjectiles); -_cache_hitpoints = _unit getVariable QGVAR(cachedHitPoints); -_cache_damages = _unit getVariable QGVAR(cachedDamages); -_cache_params = _unit getVariable QGVAR(cachedHandleDamageParams); - // Caching of the damage events if (_selectionName != "") then { + _cache_projectiles = _unit getVariable QGVAR(cachedProjectiles); private ["_index","_otherDamage"]; _index = _cache_projectiles find _projectile; // Check if the current projectile has already been handled once if (_index >= 0) exitwith { + _cache_damages = _unit getVariable QGVAR(cachedDamages); // Find the previous damage this projectile has done _otherDamage = (_cache_damages select _index); // Take the highest damage of the two if (_newDamage > _otherDamage) then { + _cache_params = _unit getVariable QGVAR(cachedHandleDamageParams); + _cache_hitpoints = _unit getVariable QGVAR(cachedHitPoints); + private ["_hitPoint", "_restore"]; // Restore the damage before the previous damage was processed _hitPoint = _cache_hitpoints select _index; @@ -104,18 +107,29 @@ if (_selectionName != "") then { _cache_hitpoints set [_index, (_hitPoints select (_hitSelections find _selectionName))]; _cache_damages set [_index, _newDamage]; _cache_params set[_index, _this]; + + _unit setVariable [QGVAR(cachedProjectiles), _cache_projectiles]; + _unit setVariable [QGVAR(cachedHitPoints), _cache_hitpoints]; + _unit setVariable [QGVAR(cachedDamages), _cache_damages]; + _unit setVariable [QGVAR(cachedHandleDamageParams), _cache_params]; }; }; + _cache_hitpoints = _unit getVariable QGVAR(cachedHitPoints); + _cache_damages = _unit getVariable QGVAR(cachedDamages); + _cache_params = _unit getVariable QGVAR(cachedHandleDamageParams); + // This is an unhandled projectile _cache_projectiles pushBack _projectile; _cache_hitpoints pushBack (_hitPoints select (_hitSelections find _selectionName)); _cache_damages pushBack _newDamage; _cache_params pushBack _this; + + // Store the new cached values + _unit setVariable [QGVAR(cachedProjectiles), _cache_projectiles]; + _unit setVariable [QGVAR(cachedHitPoints), _cache_hitpoints]; + _unit setVariable [QGVAR(cachedDamages), _cache_damages]; + _unit setVariable [QGVAR(cachedHandleDamageParams), _cache_params]; }; -// Store the new cached values -_unit setVariable [QGVAR(cachedProjectiles), _cache_projectiles]; -_unit setVariable [QGVAR(cachedHitPoints), _cache_hitpoints]; -_unit setVariable [QGVAR(cachedDamages), _cache_damages]; -_unit setVariable [QGVAR(cachedHandleDamageParams), _cache_params]; +_newDamage; From 6cc115a6287377df6b1287e28eeb0a88346ebcf0 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sat, 11 Apr 2015 22:31:17 +0200 Subject: [PATCH 119/214] We already determine the new damage in caching, so we will use that value instead of recalculating it here --- addons/medical/functions/fnc_handleDamage_advanced.sqf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/medical/functions/fnc_handleDamage_advanced.sqf b/addons/medical/functions/fnc_handleDamage_advanced.sqf index 751896be44..ba0eb8af24 100644 --- a/addons/medical/functions/fnc_handleDamage_advanced.sqf +++ b/addons/medical/functions/fnc_handleDamage_advanced.sqf @@ -25,21 +25,21 @@ _selectionName = _this select 1; _amountOfDamage = _this select 2; _sourceOfDamage = _this select 3; _typeOfProjectile = _this select 4; +_newDamage = _this select 5; // Most likely taking exessive fire damage. Lets exit. -if (isNull _sourceOfDamage && (_selectionName == "head" || isBurning _unit) && _typeOfProjectile == "" && vehicle _unit == _unit) exitwith { +if (isNull _sourceOfDamage && {_typeOfProjectile == ""} && {vehicle _unit == _unit} && {(_selectionName == "head" || isBurning _unit)}) exitwith { 0 }; - _typeOfDamage = [_typeOfProjectile] call FUNC(getTypeOfDamage); _part = [_selectionName] call FUNC(selectionNameToNumber); _hitPoints = ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"]; // Sorting out the damage _damageBodyParts = _unit getvariable [QGVAR(bodyPartStatus), [0,0,0,0,0,0]]; -_newDamage = _amountOfDamage - (_unit getHitPointDamage (_hitPoints select _part)); _damageBodyParts set [_part, (_damageBodyParts select _part) + _newDamage]; _unit setvariable [QGVAR(bodyPartStatus), _damageBodyParts, true]; + [_unit] call FUNC(handleDamage_advancedSetDamage); [_unit, _selectionName, _newDamage, _typeOfProjectile, _typeOfDamage] call FUNC(handleDamage_wounds); From 97fa40b4c1f2d7aff514c497396fc9bea9d4d776 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sat, 11 Apr 2015 22:31:38 +0200 Subject: [PATCH 120/214] Make use of new global variables for selections and hitpoints --- .../medical/functions/fnc_handleDamage_basic.sqf | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/addons/medical/functions/fnc_handleDamage_basic.sqf b/addons/medical/functions/fnc_handleDamage_basic.sqf index 2986e1b2f7..96e3214b0e 100644 --- a/addons/medical/functions/fnc_handleDamage_basic.sqf +++ b/addons/medical/functions/fnc_handleDamage_basic.sqf @@ -44,13 +44,9 @@ if (diag_frameno > (_unit getVariable [QGVAR(frameNo), -3]) + 2) then { _unit setVariable [QGVAR(preventDeath), false]; }; - -_hitSelections = ["head", "body", "hand_l", "hand_r", "leg_l", "leg_r"]; -_hitPoints = ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"]; - _newDamage = _damage - (damage _unit); -if (_selectionName in _hitSelections) then { - _newDamage = _damage - (_unit getHitPointDamage (_hitPoints select (_hitSelections find _selectionName))); +if (_selectionName in GVAR(SELECTIONS)) then { + _newDamage = _damage - (_unit getHitPointDamage (GVAR(HITPOINTS) select (GVAR(SELECTIONS) find _selectionName))); }; _damage = _damage - _newDamage; @@ -61,7 +57,7 @@ if (((velocity _unit) select 2 < -5) and (vehicle _unit == _unit)) then { _unit setVariable [QGVAR(isFalling), true]; }; if (_unit getVariable [QGVAR(isFalling), false] and !(_selectionName in ["", "leg_l", "leg_r"])) exitWith { - (_unit getHitPointDamage (_hitPoints select (_hitSelections find _selectionName))) max 0.01; + (_unit getHitPointDamage (GVAR(HITPOINTS) select (GVAR(SELECTIONS) find _selectionName))) max 0.01; }; if (_unit getVariable [QGVAR(isFalling), false]) then { _newDamage = _newDamage * 0.7; @@ -85,12 +81,12 @@ if (_selectionName != "" and !(_unit getVariable QGVAR(isFalling))) then { // Make entry unfindable _cache_projectiles set [_index, objNull]; _cache_projectiles pushBack _projectile; - _cache_hitpoints pushBack (_hitPoints select (_hitSelections find _selectionName)); + _cache_hitpoints pushBack (GVAR(HITPOINTS) select (GVAR(SELECTIONS) find _selectionName)); _cache_damages pushBack _newDamage; }; } else { _cache_projectiles pushBack _projectile; - _cache_hitpoints pushBack (_hitPoints select (_hitSelections find _selectionName)); + _cache_hitpoints pushBack (GVAR(HITPOINTS) select (GVAR(SELECTIONS) find _selectionName)); _cache_damages pushBack _newDamage; }; _unit setVariable [QGVAR(projectiles), _cache_projectiles]; From 2999ff55e1bd9edad5cdf084917a53da14ddf450 Mon Sep 17 00:00:00 2001 From: jaynus Date: Sat, 11 Apr 2015 13:37:55 -0700 Subject: [PATCH 121/214] Working javelin targeting and gating. Still has red center target optic because I cant do optic p3d's. TODO: We need an optic p3d. --- addons/javelin/CfgWeapons.hpp | 13 +++++ addons/javelin/RscInGameUI.hpp | 6 ++- addons/javelin/config.cpp | 3 +- addons/javelin/functions/fnc_onOpticDraw.sqf | 52 +++++++++++++++----- 4 files changed, 60 insertions(+), 14 deletions(-) create mode 100644 addons/javelin/CfgWeapons.hpp diff --git a/addons/javelin/CfgWeapons.hpp b/addons/javelin/CfgWeapons.hpp new file mode 100644 index 0000000000..eccdd30623 --- /dev/null +++ b/addons/javelin/CfgWeapons.hpp @@ -0,0 +1,13 @@ +class CfgWeapons { + class Launcher; + class Launcher_Base_F : Launcher { + class WeaponSlotsInfo; + }; + + class launch_Titan_base : Launcher_Base_F { + weaponInfoType = "ACE_RscOptics_javelin"; + + lockingTargetSound[] = {"",0,1}; + lockedTargetSound[] = {"",0,1}; + }; +}; \ No newline at end of file diff --git a/addons/javelin/RscInGameUI.hpp b/addons/javelin/RscInGameUI.hpp index 929838d373..2f5e0b2007 100644 --- a/addons/javelin/RscInGameUI.hpp +++ b/addons/javelin/RscInGameUI.hpp @@ -10,7 +10,7 @@ class RscLine; // Taken from AGM for optics management. class RscInGameUI { - class RscOptics_titan { + class ACE_RscOptics_javelin { idd = 300; controls[] = { "ACE_javelin_elements_group", "CA_Distance", "ACE_Targeting" }; //, "ACE_TargetingConstrains", "ACE_TargetingGate", "ACE_TargetingLines"}; onLoad = QUOTE(_this call FUNC(onOpticLoad)); @@ -94,6 +94,7 @@ class RscInGameUI { x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.307/4)*3*SafezoneH - SafezoneX"; colorText[] = {0.2941,0.8745,0.2157,1}; }; + /* class StadiaL: RscLine { x = "0.4899*SafezoneW - SafezoneX"; y = "0.171*SafezoneH - SafezoneY"; @@ -136,6 +137,7 @@ class RscInGameUI { h = 0; colorText[] = {0.2941,0.8745,0.2157,1}; }; + */ }; }; class ACE_javelin_NFOV_mode_off: ACE_javelin_Day_mode_off { @@ -167,6 +169,7 @@ class RscInGameUI { y = "0.031*SafezoneH - SafezoneY"; colorText[] = {0.2941,0.8745,0.2157,1}; }; + /* class StadiaL: RscLine { x = "0.4788*SafezoneW - SafezoneX"; y = "0.171*SafezoneH - SafezoneY"; @@ -209,6 +212,7 @@ class RscInGameUI { h = "0.1895*SafezoneH"; colorText[] = {0.2941,0.8745,0.2157,1}; }; + */ }; }; diff --git a/addons/javelin/config.cpp b/addons/javelin/config.cpp index 0a38583ed9..9d7c14e448 100644 --- a/addons/javelin/config.cpp +++ b/addons/javelin/config.cpp @@ -12,4 +12,5 @@ class CfgPatches { #include "CfgEventhandlers.hpp" #include "RscInGameUI.hpp" -#include "CfgSounds.hpp" \ No newline at end of file +#include "CfgSounds.hpp" +#include "CfgWeapons.hpp" \ No newline at end of file diff --git a/addons/javelin/functions/fnc_onOpticDraw.sqf b/addons/javelin/functions/fnc_onOpticDraw.sqf index 90772cf9e3..a319c61de5 100644 --- a/addons/javelin/functions/fnc_onOpticDraw.sqf +++ b/addons/javelin/functions/fnc_onOpticDraw.sqf @@ -2,7 +2,7 @@ #include "script_component.hpp" //TRACE_1("enter", _this); -#define __TRACKINTERVAL 0.1 // how frequent the check should be. +#define __TRACKINTERVAL 0 // how frequent the check should be. #define __LOCKONTIME 3.0 // Lock on won't occur sooner #define __LOCKONTIMERANDOM 0.3 // Deviation in lock on time #define __SENSORSQUARE 1 // Locking on sensor square side in angles @@ -54,6 +54,18 @@ if (isNull _newTarget) then { _newTarget = cursorTarget; }; +// Create constants +_constraintTop = __ConstraintTop; +_constraintLeft = __ConstraintLeft; +_constraintBottom = __ConstraintBottom; +_constraintRight = __ConstraintRight; + +_offsetX = __OffsetX; +_offsetY = __OffsetY; + +__JavelinIGUITargeting ctrlShow true; +__JavelinIGUITargetingConstrains ctrlShow true; + if (isNull _newTarget) then { // No targets found _currentTarget = objNull; @@ -61,8 +73,6 @@ if (isNull _newTarget) then { __JavelinIGUISeek ctrlSetTextColor __ColorGray; __JavelinIGUINFOV ctrlSetTextColor __ColorGreen; - __JavelinIGUITargeting ctrlShow false; - __JavelinIGUITargetingConstrains ctrlShow false; __JavelinIGUITargetingGate ctrlShow false; __JavelinIGUITargetingLines ctrlShow false; @@ -92,15 +102,7 @@ if (isNull _newTarget) then { __JavelinIGUITargetingConstrains ctrlShow true; __JavelinIGUITargetingGate ctrlShow true; __JavelinIGUITargetingLines ctrlShow true; - - _constraintTop = __ConstraintTop; - _constraintLeft = __ConstraintLeft; - _constraintBottom = __ConstraintBottom; - _constraintRight = __ConstraintRight; - - _offsetX = __OffsetX; - _offsetY = __OffsetY; - + _zamerny = if (_currentTarget isKindOf "CAManBase") then {_currentTarget selectionPosition "body"} else {_currentTarget selectionPosition "zamerny"}; _randomPosWithinBounds = [(_zamerny select 0) + 1 - (random 2.0),(_zamerny select 1) + 1 - (random 2.0),(_zamerny select 2) + 0.5 - (random 1.0)]; @@ -150,6 +152,32 @@ if (isNull _newTarget) then { _soundTime = diag_tickTime + 0.25; }; } else { + __JavelinIGUITargeting ctrlShow true; + __JavelinIGUITargetingGate ctrlShow true; + __JavelinIGUITargetingLines ctrlShow false; + + ACE_player setVariable["ace_missileguidance_target", nil, false]; + + _boundsInput = if (_currentTarget isKindOf "CAManBase") then { + [_newTarget,[-1,-1,-2],_currentTarget selectionPosition "body"]; + } else { + [_newTarget,[-1,-1,-1],_currentTarget selectionPosition "zamerny"]; + }; + + _bpos = _boundsInput call EFUNC(common,worldToScreenBounds); + + _minX = ((_bpos select 0) + _offsetX) max _constraintLeft; + _minY = ((_bpos select 1) + _offsetY) max _constraintTop; + _maxX = ((_bpos select 2) + _offsetX) min (_constraintRight - 0.025*(3/4)*SafezoneH); + _maxY = ((_bpos select 3) + _offsetY) min (_constraintBottom - 0.025*SafezoneH); + + __JavelinIGUITargetingGateTL ctrlSetPosition [_minX,_minY]; + __JavelinIGUITargetingGateTR ctrlSetPosition [_maxX,_minY]; + __JavelinIGUITargetingGateBL ctrlSetPosition [_minX,_maxY]; + __JavelinIGUITargetingGateBR ctrlSetPosition [_maxX,_maxY]; + + {_x ctrlCommit __TRACKINTERVAL} forEach [__JavelinIGUITargetingGateTL,__JavelinIGUITargetingGateTR,__JavelinIGUITargetingGateBL,__JavelinIGUITargetingGateBR]; + if(diag_tickTime > _soundTime) then { playSound "ACE_Javelin_Locking"; _soundTime = diag_tickTime + 0.25; From 75216c2f8bc1a2c1adc022f1da754ac78458fd94 Mon Sep 17 00:00:00 2001 From: jaynus Date: Sat, 11 Apr 2015 13:39:16 -0700 Subject: [PATCH 122/214] readme, authors. --- AUTHORS.txt | 1 + addons/javelin/README.md | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/AUTHORS.txt b/AUTHORS.txt index 86245ccd90..86c3c6ef9a 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -66,3 +66,4 @@ Sniperwolf572 Tonic Tourorist Valentin Torikian +zGuba \ No newline at end of file diff --git a/addons/javelin/README.md b/addons/javelin/README.md index cfa7a4cd5d..37685d9cce 100644 --- a/addons/javelin/README.md +++ b/addons/javelin/README.md @@ -9,4 +9,3 @@ Adds the Javelin AT launcher. The people responsible for merging changes to this component or answering potential questions. - [jaynus](https://github.com/walterpearce) -- [NouberNou](https://github.com/NouberNou) From 2418d99f9724c28faee9857c3989272b1b931e74 Mon Sep 17 00:00:00 2001 From: jaynus Date: Sat, 11 Apr 2015 13:41:00 -0700 Subject: [PATCH 123/214] Finalizes port. Closes #75 --- addons/javelin/functions/fnc_onOpticLoad.sqf | 1 - 1 file changed, 1 deletion(-) diff --git a/addons/javelin/functions/fnc_onOpticLoad.sqf b/addons/javelin/functions/fnc_onOpticLoad.sqf index 352e6bfd12..49e9a25e61 100644 --- a/addons/javelin/functions/fnc_onOpticLoad.sqf +++ b/addons/javelin/functions/fnc_onOpticLoad.sqf @@ -2,7 +2,6 @@ #include "script_component.hpp" TRACE_1("enter", _this); - if((count _this) > 0) then { uiNameSpace setVariable ['ACE_RscOptics_javelin',_this select 0]; }; From e00f0ea4c3503860b3a12b48609472be4f5a569b Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sat, 11 Apr 2015 22:47:10 +0200 Subject: [PATCH 124/214] No longer creates a new waitAndExec for every handleDamage call --- .../functions/fnc_handleDamage_basic.sqf | 41 ++++++++----------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/addons/medical/functions/fnc_handleDamage_basic.sqf b/addons/medical/functions/fnc_handleDamage_basic.sqf index 96e3214b0e..aa9c2f61df 100644 --- a/addons/medical/functions/fnc_handleDamage_basic.sqf +++ b/addons/medical/functions/fnc_handleDamage_basic.sqf @@ -42,6 +42,20 @@ if (diag_frameno > (_unit getVariable [QGVAR(frameNo), -3]) + 2) then { _unit setVariable [QGVAR(damages), []]; _unit setVariable [QGVAR(structDamage), 0]; _unit setVariable [QGVAR(preventDeath), false]; + // Assign orphan structural damage to torso + [{ + private ["_unit", "_damagesum"]; + _unit = _this select 0; + _damagesum = (_unit getHitPointDamage "HitHead") + + (_unit getHitPointDamage "HitBody") + + (_unit getHitPointDamage "HitLeftArm") + + (_unit getHitPointDamage "HitRightArm") + + (_unit getHitPointDamage "HitLeftLeg") + + (_unit getHitPointDamage "HitRightLeg"); + if (_damagesum < 0.06 and damage _unit > 0.06 and alive _unit) then { + _unit setHitPointDamage ["HitBody", damage _unit]; + }; + }, [_unit], 2, 0.1] call EFUNC(common,waitAndExecute); }; _newDamage = _damage - (damage _unit); @@ -105,30 +119,12 @@ if (_selectionName == "") then { }; }; - -// Assign orphan structural damage to torso -[{ - private ["_unit", "_damagesum"]; - _unit = _this select 0; - _damagesum = (_unit getHitPointDamage "HitHead") + - (_unit getHitPointDamage "HitBody") + - (_unit getHitPointDamage "HitLeftArm") + - (_unit getHitPointDamage "HitRightArm") + - (_unit getHitPointDamage "HitLeftLeg") + - (_unit getHitPointDamage "HitRightLeg"); - if (_damagesum < 0.06 and damage _unit > 0.06 and alive _unit) then { - _unit setHitPointDamage ["HitBody", damage _unit]; - }; -}, [_unit], 2, 0.1] call EFUNC(common,waitAndExecute); - - if (_selectionName == "") then { _damage = _damage + (_unit getVariable QGVAR(structDamage)); } else { _damage = _damage + _newDamage; }; - // Leg Damage _legdamage = (_unit getHitPointDamage "HitLeftLeg") + (_unit getHitPointDamage "HitRightLeg"); if (_selectionName == "leg_l") then { @@ -139,9 +135,9 @@ if (_selectionName == "leg_r") then { }; if (_legdamage >= LEGDAMAGETRESHOLD1) then { - if (_unit getHitPointDamage "HitLegs" != 1) then {_unit setHitPointDamage ["HitLegs", 1]}; + _unit setHitPointDamage ["HitLegs", 1]; } else { - if (_unit getHitPointDamage "HitLegs" != 0) then {_unit setHitPointDamage ["HitLegs", 0]}; + _unit setHitPointDamage ["HitLegs", 0]; }; // @todo: force prone for completely fucked up legs. @@ -156,9 +152,9 @@ if (_selectionName == "hand_r") then { }; if (_armdamage >= ARMDAMAGETRESHOLD1) then { - if (_unit getHitPointDamage "HitHands" != 1) then {_unit setHitPointDamage ["HitHands", 1]}; + _unit setHitPointDamage ["HitHands", 1]; } else { - if (_unit getHitPointDamage "HitHands" != 0) then {_unit setHitPointDamage ["HitHands", 0]}; + _unit setHitPointDamage ["HitHands", 0]; }; // @todo: Drop weapon for full damage. @@ -170,7 +166,6 @@ if (_selectionName == "") then { _unit setVariable [QGVAR(pain), _pain min 1, true]; }; - // Unconsciousness if (_selectionName == "" and _damage >= UNCONSCIOUSNESSTRESHOLD and From d744074b2f8d2662c46fed08014fb410b92d707d Mon Sep 17 00:00:00 2001 From: jaynus Date: Sat, 11 Apr 2015 13:48:46 -0700 Subject: [PATCH 125/214] localization. --- addons/javelin/stringtable.xml | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/addons/javelin/stringtable.xml b/addons/javelin/stringtable.xml index 503b876855..7e7201c35e 100644 --- a/addons/javelin/stringtable.xml +++ b/addons/javelin/stringtable.xml @@ -3,22 +3,22 @@ - Lock Target (Hold) - Lock Target (Hold) - Lock Target (Hold) - Lock Target (Hold) - Lock Target (Hold) - Fijar objetivo (Mantener) - Lock Target (Hold) + Lock Target (Javelin) + + + + + + - Cycle Fire Mode - Cycle Fire Mode - Cycle Fire Mode - Cycle Fire Mode - Cycle Fire Mode - Cambiar modo de fuego - Cycle Fire Mode + Cycle Attack Mode (Javelin) + + + + + + From 6e28b3b9b7e40481fbf4884c36d740f87091f675 Mon Sep 17 00:00:00 2001 From: jaynus Date: Sat, 11 Apr 2015 13:59:17 -0700 Subject: [PATCH 126/214] Disable gates (reload) --- addons/javelin/RscInGameUI.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/javelin/RscInGameUI.hpp b/addons/javelin/RscInGameUI.hpp index 2f5e0b2007..e208e18834 100644 --- a/addons/javelin/RscInGameUI.hpp +++ b/addons/javelin/RscInGameUI.hpp @@ -280,7 +280,7 @@ class RscInGameUI { w = "SafezoneW"; h = "SafezoneH"; - enabled = 1; + enabled = 0; class Controls { class ACE_TargetingConstrains: RscControlsGroup { x = "SafezoneX"; @@ -288,7 +288,7 @@ class RscInGameUI { w = "SafezoneW-SafezoneX"; h = "SafezoneH-SafezoneY"; - enabled = 1; + enabled = 0; class VScrollbar { autoScrollSpeed = -1; autoScrollDelay = 5; From 8406031a6ece33ccf1e56fecac30e443d969fee4 Mon Sep 17 00:00:00 2001 From: EpMAK Date: Sun, 12 Apr 2015 00:03:45 +0300 Subject: [PATCH 127/214] Update AUTHORS.txt --- AUTHORS.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.txt b/AUTHORS.txt index b931d774ac..7b012d3bd7 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -65,3 +65,4 @@ simon84 Tonic Tourorist Valentin Torikian +Aleksey EpMAK Yermakov From 2a2f96a03455d99479eeb49c4a47c496145feb57 Mon Sep 17 00:00:00 2001 From: jaynus Date: Sat, 11 Apr 2015 14:10:30 -0700 Subject: [PATCH 128/214] ACRE API functions and core functions were incorrect. --- addons/common/functions/fnc_endRadioTransmission.sqf | 8 ++++---- addons/common/functions/fnc_setVolume.sqf | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/addons/common/functions/fnc_endRadioTransmission.sqf b/addons/common/functions/fnc_endRadioTransmission.sqf index 772a34a06b..78a50e9f2c 100644 --- a/addons/common/functions/fnc_endRadioTransmission.sqf +++ b/addons/common/functions/fnc_endRadioTransmission.sqf @@ -14,10 +14,10 @@ // ACRE if (isClass (configFile >> "CfgPatches" >> "acre_main")) then { - [-1] call acre_core_fnc_handleMultiPttKeyPressUp; - [0] call acre_core_fnc_handleMultiPttKeyPressUp; - [1] call acre_core_fnc_handleMultiPttKeyPressUp; - [2] call acre_core_fnc_handleMultiPttKeyPressUp; + [-1] call acre_sys_core_fnc_handleMultiPttKeyPressUp; + [0] call acre_sys_core_fnc_handleMultiPttKeyPressUp; + [1] call acre_sys_core_fnc_handleMultiPttKeyPressUp; + [2] call acre_sys_core_fnc_handleMultiPttKeyPressUp; }; // TFAR diff --git a/addons/common/functions/fnc_setVolume.sqf b/addons/common/functions/fnc_setVolume.sqf index 91d66a00ec..ee2c42e39c 100644 --- a/addons/common/functions/fnc_setVolume.sqf +++ b/addons/common/functions/fnc_setVolume.sqf @@ -27,7 +27,7 @@ if (_setVolume) then { player setVariable ["tf_unable_to_use_radio", false]; // ACRE2 - player setVariable ["acre_sys_core_globalVolume", NORMAL_LEVEL]; + [NORMAL_LEVEL] call acre_api_fnc_setGlobalVolume; player setVariable ["acre_sys_core_isDisabled", false, true]; } else { @@ -40,7 +40,7 @@ if (_setVolume) then { player setVariable ["tf_unable_to_use_radio", true]; // ACRE2 - player setVariable ["acre_sys_core_globalVolume", MUTED_LEVEL]; + [MUTED_LEVEL] call acre_api_fnc_setGlobalVolume; player setVariable ["acre_sys_core_isDisabled", true, true]; }; From 3ff6abde719f02f10dbce04a393a5cf9b150ac32 Mon Sep 17 00:00:00 2001 From: FreeZbe Date: Sat, 11 Apr 2015 23:18:51 +0200 Subject: [PATCH 129/214] Update stringtable.xml --- addons/reload/stringtable.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/addons/reload/stringtable.xml b/addons/reload/stringtable.xml index a7873948b1..b2e19aa0c4 100644 --- a/addons/reload/stringtable.xml +++ b/addons/reload/stringtable.xml @@ -4,10 +4,12 @@ Check ammo on weapon reload + Vérifier munitions au rechargement Comprovar munición al recargar el arma Check the ammo in your new magazine on magazine reload. + Vérifie les munitions disponibles dans le nouveau chargeur Comprueva la munición del nuevo cargador al recargar. @@ -36,10 +38,12 @@ Link belt + Attacher bande Enlazar cinta Linking belt... + Attachement de la bande .. Enlazando cinta... From 0805d5b640ac763966c0caa34ce5f7a36fa9b596 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sat, 11 Apr 2015 16:48:49 -0500 Subject: [PATCH 130/214] Update UAV battery icon from AGM --- addons/logistics_uavbattery/CfgVehicles.hpp | 46 +++++++++--------- addons/logistics_uavbattery/CfgWeapons.hpp | 22 ++++----- .../logistics_uavbattery/ui/UAV_battery.paa | Bin 5625 -> 0 bytes .../ui/UAV_battery_ca.paa | Bin 0 -> 22016 bytes 4 files changed, 34 insertions(+), 34 deletions(-) delete mode 100644 addons/logistics_uavbattery/ui/UAV_battery.paa create mode 100644 addons/logistics_uavbattery/ui/UAV_battery_ca.paa diff --git a/addons/logistics_uavbattery/CfgVehicles.hpp b/addons/logistics_uavbattery/CfgVehicles.hpp index a3a3fc763d..5feba4c9a8 100644 --- a/addons/logistics_uavbattery/CfgVehicles.hpp +++ b/addons/logistics_uavbattery/CfgVehicles.hpp @@ -1,29 +1,29 @@ class CfgVehicles { - class Helicopter_Base_F; - class UAV_01_base_F: Helicopter_Base_F { - class ACE_Actions { - class ACE_MainActions { - class GVAR(RefuelUAV) { - displayName = "$STR_ACE_logistics_uavbattery_Recharge"; - distance = 4; - condition = QUOTE([ARR_2(_player, _target)] call FUNC(canRefuelUAV)); - statement = QUOTE([ARR_2(_player, _target)] call FUNC(refuelUAV)); - showDisabled = 0; \ - priority = 1.245; \ - icon = QUOTE(PATHTOF(ui\UAV_battery.paa)); + class Helicopter_Base_F; + class UAV_01_base_F: Helicopter_Base_F { + class ACE_Actions { + class ACE_MainActions { + class GVAR(RefuelUAV) { + displayName = "$STR_ACE_logistics_uavbattery_Recharge"; + distance = 4; + condition = QUOTE([ARR_2(_player, _target)] call FUNC(canRefuelUAV)); + statement = QUOTE([ARR_2(_player, _target)] call FUNC(refuelUAV)); + showDisabled = 0; \ + priority = 1.245; \ + icon = QUOTE(PATHTOF(ui\UAV_battery_ca.paa)); + }; + }; }; - }; }; - }; - // Misc box content - class Box_NATO_Support_F; - class ACE_Box_Misc: Box_NATO_Support_F { - class TransportItems { - class _xx_ACE_UAVBattery { - count = 6; - name = "ACE_UAVBattery"; - }; + // Misc box content + class Box_NATO_Support_F; + class ACE_Box_Misc: Box_NATO_Support_F { + class TransportItems { + class _xx_ACE_UAVBattery { + count = 6; + name = "ACE_UAVBattery"; + }; + }; }; - }; }; diff --git a/addons/logistics_uavbattery/CfgWeapons.hpp b/addons/logistics_uavbattery/CfgWeapons.hpp index e84e053347..1986b4f80f 100644 --- a/addons/logistics_uavbattery/CfgWeapons.hpp +++ b/addons/logistics_uavbattery/CfgWeapons.hpp @@ -1,15 +1,15 @@ class CfgWeapons { - class InventoryItem_Base_F; - class ACE_ItemCore; + class InventoryItem_Base_F; + class ACE_ItemCore; - class ACE_UAVBattery: ACE_ItemCore { - scope = 2; - displayName = "$STR_ACE_logistics_uavbattery_Battery_Name"; - descriptionShort = "$STR_ACE_logistics_uavbattery_Battery_Description"; - model = QUOTE(PATHTOF(models\ace_battery.p3d)); - picture = QUOTE(PATHTOF(ui\UAV_battery.paa)); - class ItemInfo: InventoryItem_Base_F { - mass = 20; + class ACE_UAVBattery: ACE_ItemCore { + scope = 2; + displayName = "$STR_ACE_logistics_uavbattery_Battery_Name"; + descriptionShort = "$STR_ACE_logistics_uavbattery_Battery_Description"; + model = QUOTE(PATHTOF(models\ace_battery.p3d)); + picture = QUOTE(PATHTOF(ui\UAV_battery_ca.paa)); + class ItemInfo: InventoryItem_Base_F { + mass = 20; + }; }; - }; }; diff --git a/addons/logistics_uavbattery/ui/UAV_battery.paa b/addons/logistics_uavbattery/ui/UAV_battery.paa deleted file mode 100644 index 5e6c0e1bf7742b568af7d36921fa1ccb9742fda4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5625 zcmeHLe@xrQ6@UIk4A}U)3B=cHT5J_ZBLj8ON|q?vY(ODE5{;vH$*DJIw`-jcR0lVSDZ>4H>%3ZO1AyFT%$#qm(& zcfaz?BEKwWBK|YXjQF%-6=c`R@t^Ti!Pm@xmRi_}%hOLsdHY>=@jO+AI5|hTMF72K zG9if5l~RLGNV@4R@qe^%nUErMcd44rqKys_zlrbvDgK}HkD>aUdZeAB9A<)K5$lny zMPOR*&jI+`!lKr4ZGfL8)1iKYKENCI2q7GMvYCq$1mEF#_d-9pC(4gbwSbhaH;MMB zuf{JlPXybd#okmj;pjqQ5N1U()_vmH*H~oS&uy7%n`2Ge{P3GdEng z$S+e5@W)n{i|NzNcXKY6tCisZ|67XpF??YV`86Cn$nc5Y0N?Pl^J<3Y2D>?U(=fpB zdF-!|_7*Tq?UR89W0=|#AZjhca(!_9kUnxPfE~$iny+0*K{lk zA1q>p)_mCz(w~n1X{tAbSC0kw9r;W7jdHiqfNVbHtNZquGfT1Z=-McTYxdJU-jmAk zx+6tOA@y=d{~HI>mCgcR+uB?*;~`TCtH&e|mufVsPTOPVg6Ch4)#h0A*TWN=^_6!& z`;^I3?P}(P{Bj4wqr6iItG}~`;UO~0r#ARPe0EO+IE}r)%K8hCpY8R>`8k)wLx3OU zTd;VD$g8yswSnRvh0My~wA>yjd>=Z@)^5 zaF!}EVk=Y!IDcPZ8bZ=3V&f6d*9p)^lwN!j%go-`%AKSp!bY!mTa z?B*p+vnK$Q9i)kX`Ps0crV72%XRxXhR;MV55%i|W&?aJp_n4hZOa%68=*fiK>)-H+T#N276#^pV5P7{C9exnfYJLr~i6Y3qbgXMewM!5RLi&wctCDQN zarlO9+)Dk$?qK?5>eJ!uS;-p=3oQYRkCZzMAE-_Pb$a16!*u@!Qlz-9D6iFgnnQjz z*hl%1RsP;)j#U2YDqzIPFwb_)IF+4q^BQrqsK20Kh+vt{RKNZ%Jv{>6&vDv#+uZq>uUFx5kp`0f#af@#lLhFi@BEgtT+ zN8P&EmP9S7?E9=?l90^f6(l z?C|x{5%f3eKRf?yf(Xp$1VgH8rU&hjUq)zB2GHFatV)^|gw)uV2uY}={#m577^XC2 z2|vq!!7nHs-=1WTmFBli;B=m6vp3H|QGt>;45;E1rt04t3n z!C&`k_VHJl8WGD}Lo+;>Q{5%c6Ow|39@tG?2(HlC0UoP#A^AeqeTshFE7yLE=T6k$ z-MjmZ3r0c=dXW9VX9{jBz2?`yhw~*7Vb|b@JLm=->hBSfTukL>-FKHXU!xLH{$!!> zvNyOGx!>5$<1Hst<{j_s<^|u~wd@$%@JUtD=o%d!(kKPnYi(E-=M@SYJev6?Dvrpt zDLz4n@ZdHy-P;?yra<(?h%>Xb~o%@L+gDkDbTK{uq2VM>bCSf+;We{AU3IMHkJ0zBt^FtM<{$Uj8Jt(L-J zD8~bqkXmDGOI6b0p`ihjhY+JC8Gp^r5qzD|$t?(i$MB~c+oD9>={uc8KmTq2m+?P3 zhc-6fv^Vp|qWr1G)neCU{p=?;J{*Uy9|;(ITb(6rJoZ19c2*ik0tR2UTg}$v@KGQ> zJWzn{YT~v_p)_C$hTSUxtiiC~Q6akoHvil69>jS2e8C4?eS`^OO)RWr{T*+O&f}$p zY}R`#EQO?7tkBA;1H8o$Rm9xnW@CUaw&(jYCf-?yCv#1NjBQl=1fT5T4ryzL1h?_n z{ye(_HvAJs&6U1LX0VzbBD37*xXm|A{eFRmE#}Ui%9>JVe31E)^wTQ6D;^V Hfwq4EBFnn& diff --git a/addons/logistics_uavbattery/ui/UAV_battery_ca.paa b/addons/logistics_uavbattery/ui/UAV_battery_ca.paa new file mode 100644 index 0000000000000000000000000000000000000000..426578c3fc3b7d953fce41ae73afb9eba30e29df GIT binary patch literal 22016 zcmeHv4P2B}+V^2V9R|?Jk9AnEoq1w5F{fZxRBZZ*w3*Ci8S6MWGB844N}9#eB8W`n zYh{!lfo6e`M$*s-kL{3I;4HdWY2cGF@Py4wZ|IQX-fYS{2*`P^bKjhE543I8KJC8s z+atpK?{n^R&UOChy3W^iW(>ab&ILH3gUcEz-?Rh$__3Sx=L%6C9$Wo!RTYx>V=Id#3aIr$ zoLP*IBsfgOZagx*8_Q(8Uh+vW=F6KQrWg9tzZwV0Ha{?HVa6=VZ;&jytPy@F{#V!U z+RKObt)Qt1Uw}vOH{gO;GfjcupF9Y!`7k2cO$T?DnB5iiYdUdI!NSAH@3g#~-G@1j!a=&VnDx z_dkz+UOo$L0m9ec*S`+J-x)D|0clT%h-YRZi^w0wNr_12&tG-2XLTXt?^4-0MTpHd zfxiD}u{3c@SQx{X%2w%~1A+q+>(+GCt%=#)9GYpj+tpz_p4RB{O|As`1L^zAn^)`3 zK%ls--fEoN-u@!RdpJ#Ig~x2BxPV)vLz0WEJ{X6rKr)S*#$((;`lp|LNhS6sM2!Es zy@9ytV*IuBmwz7rE{rS{w0gXLR!J;=_|amdWaX zv1Wx?q#x=RrMi0YB8>(dt+Uyl^TV+lY?Z7#AeXNuTXqZS5<*MvHXQ7 zpfIMmNS>Rf*V9_B(iO=Kdi_d@i{uC`v7j0C{VhGDt!Gs(klt3RH(mevw88QB^v&0L zJC$=A?5z`?uM6vVYueoy%Qr#!nPd3=Q3Ug?u6V$VuxsV(yUPD<>3{6}k74@zd^X7H z$M1n`bosI$zdnM{%TgfmFZDjJ7zV|2iMad#hxDG`OEMO<>a&(BIHZD9q?#6ARuglGi$r@?%j@86M> zK+4~>V>h-~P>h(~jU_S(tnYu=`CkCBcfs3Oe-q0WT5=I@4<}B*Sm1YRechTxDQ^um z_&OD+!jm_H@tYy_s6)|dwe7LHE~B3{`@xh);I4xznbZ<)_Z?! zg~PU!@=5qbadXTRcetXWgCBXZNW^zU|1vSbPH_RZO82w9fsF40?j`5y=}LyR-Xz@^ z*q5Q{P27@V*p~UThV=Y(Dz+{_#?Cj9fl~f26FiTs!}6Vt?3*>g)MaNd$&z zyo$Ha&%t~smW+RCVJ_hJXSbef@a>foe({vp2W68Gasz*!JcItDv+t8v@#a`qjrG!8 zARZHb?IE<30#+f|*ZJw|qC{^+Fypg;(|WJISIz8$i6i#kl0e@#aUYkU>Br7cT+U6ZEQ|Yd7{w+| zzUjFU_GZBKhSgdn#;1C%&^swk^=?T{fCdwBkyO9bjPN#jpc$UG)fdU*TJ?s+_S)Of zD&Kq;*bh`>>lMb6awxak2;<4cAl5&sla)&4tMDoxFg{&|WD~+f{@uXu^h4tM53p3` z7)}oLc!^9tT>&UT5|yw6<}Yq6g$GkJ$@=JtSbjc*9BC2FbpflgPJp1AmA`Sw3JX0a!&9R^^EItzKt>mNB z1To$lUuTm9Q2dfp9i1>n3;j@#$iy9w&#;T{o4B@mGWd$|yu2*G0`7znZF8`At@l8F z){Lr~Y5H>R(cSvLOkhTL;Y1B`s1qx zLpsG;FRXtnDpph6;X11DA5VPsFyDajP~T4OoL6LRyJ)M5UsF?K?0NCL*Am*0wi`PV^h)dgr2P2=VrI&-FP zinC6&>fslFU$x58pI5m2oZw0A3)qN-6c%-vL(!@T->4`lou8NGBWUdKn?+Gy+NwSmHvFn zH;v?%Uk`vC71EoyyRs}O=wT5b$bP4OP)2b%=zGXGF~0_10SAo$L3n>O-spP|^x2Z9okI9RXE7=j)myifSIHu&qqfXjNmzmUd9xaT%ibmgW|yuP{4ZcZ~8DBfvL z(!us7>#vW(`eo_5RQ(5^7xL?qM~hV`uJvjo9ZzzAuO6#iKc&7-6Yxe)D6Bsdp?|=B zhb8#d+Q3^eK4Glr$<56_Z9a;xy0H)J4UE6(xL@G+r~;v9tyh{@ z>c{UMpVo_q@C=$Cna@GXjumkXjKA%yJqx&&{EEN{(9ebTC-yo%)Sq9ix7v@t(fsc5 zZ5Y8X(Qm7@-zVm0;wr4?NATO#cYY&{=k?jr#c-r|Y6C)5jNbv5-e#%lXZ3BXzhH!# z>gfB#{v$^!o8Mk8E0U+`+56vw>CRbYS`#ueBYr`Negf5 zO{MiSaSNmamf$#wBivsoQLxrb@qp{~*aVobP^^Xi@Z`8zH&R@{ZH^80)3-goR4>Lg zRxw`D;!(h@)-X)HsH6S>mm9+(O=Xru3sjX z?^C4ttxqSHXGr5hEUdiKu)c)sS$|j!)*xMPzlG)pyVJ;ii#R@28y80BIUJVxp8)w= zd!!gY6{~>|5M6tNWnvVpM^l?&=7Wl;w;3WtfePtu`oA3+!m;E%J z*zc&D~zrY{kGt!&V{A;~OfRH2+-gym6h`oKLZ4#pdW-i-hr`S&=cqUJRat`5hP_nm!Wx2aE@$BHmtdeAypa z{Rdnzn3M!6Aq^B0dt7t%D$Ad@&jYP~*aY?(%n2KRO&qcSy$ox; zRaPtGvw-VxRr!s_k>0~jXg)uEUf-N*NQXHA-+j>XW->yqWASgpc)QNf%GM{nC9uDw zkuZJfEn6v-cs8>7!EO-B^-JGvR7y*MP?~?Yaf|K^O9h*MYBH;nu^lJU_|O&itKdAu zaAXifg3Xf2H4^6C&v3*mNtIsJf>)E#T8TQTeit2nmb&+=d;2>LPEs(zllq* zfGod4uuC6=_V{L1?yB;v`<3(LEwj-B5qo_9CpM+82t7ZDU%`VD&gIx|)amuhHefKa z52r|!$BnRmVrk66gOEpHjPeuLUIoT>HNHaHXPbOZ^D((0eTa=Gi!=9uy+~*MeZW;D z4^)eMb+}-C<7Y2O`=e?fYhNwFvLn4zeqw)R)*3%d_~aNiaj9Nw{{=sN27ayQ)9L$K zFUkRrzntpOA@T(U2-Bp=E_+|B7o2deR z^>&)RTBky-u%M;5+jzffr2d{r&cir^#-B)5!+OZF5er8M%Fq=@<(Bh?UVH}_8OOYN z1>9b_zSR~Y>zFX*!%3kX1>EAy;6RyVOrq*xIM3=J^LsN$5G1QxEu8-qaO7}F3d z!6QDnVTXI2$6}G9q-|t>oV=d^F*BVhYinoU2l+MU8Lc7>!i1jthHyUDZA?u`Nu%;is#L4;{%;W*-|xQ?&xVdwhhTR7jN6c4!8H%o33^^RJNtX< zZ=>-8e1G%j7sl5#kuRSe>SqtBpy^91RiG%MJ%6isffV@drSaWHSfAN7GKw!GXGk^B z;1q|huKO zuA0nlqxmMx+AnlPry|WGwpUmt?1%WxFNnPeh5?1XKeq|`2fBq}MH8IoBNR>Jmp88j zd*Wd8RWkknzpXUBy&m+(u3`Ogmu-O*_+|ZdN3lwpn=bNu(x^l*-D2b2Nuyd7He&p( zPWGjV_G5A8{#dKbnt})TRs{Ve<~sMt7O>A4PnyWD=UZ(>V6R`;$@6PXE&zUS%=vF5 z=&v{477zfN$&28;k?3Q$(U0!G!H?D}AF=-@NP6x3yW#xSV&Q8Gzep|VXY%)(@U*zu z8A5&In}86cX)~^knf*Y7%csfA^>`f5z^oo$oiKZOQ+2Z5VD!*jyN#=LQrR=>C??|@ z*z?aQUYx1ZtuB%b<9QdJk7 zXZHCq(BCe<^S{+PB{H-g@#FUkg};4XoAqomF2r#(znbiYDwtoe@`?VViab4jjnr>b zTnFsurW@=UO&h*cQXbQ8g7XNwW`%|%KlpD*$&f4rj1QK9J@2Dx_Nt9 z(w-=-cWqWtQDa6N*o#3JQYM!_DetQa2|M*Ak!0)OW5r$ZxU~&tGeV9hjalHI6QZX0 z?yQr>`SaVD{%T7%`s? zgZ{TN^8y?HFBo5shWRw(_xY@-@EQGSdR)WjAJ>y#B+X5;-!lIc#;?5^)4mhdOQmtv ziYcFedF)R`YdT!`ahp5Em_APV1o1EF*u%{#ZwH3~+FmZ-fo$*>FjIWGWQ*=O2o&$M zcg4eWJ&fYR&Mmr&m1^cN;PN%{;|q-^d@Gd{iTZl&`cGR*$m8q%E8feq; z=2p-WZ}T3=*2Kl#M6t`aqd299B7_=zYqPQ%p}+rjY^Km2`=iyjfWhw09RHtViM^=F zPRs4{Z22pc4E7?Y66}ROjoF8j#^6MRW|Y!eE{5^Lc2(qeZB}&R>LMAl7h5x7{2c0o z37$}gp6vaxc3U;m@3mRSV@K&P49ES3dYCan2<7sF!qW_;8akgoUA7Y0=g+86*SAb= z1b#c5E!pmr6ypr^5O1GzY-=-5wYRrZiI+FWRi1)C@w?8+FK9J^n|RSMOuSfG@wnchRpx#J>%OM;2)P0#NV{a%3U+ zzgfWkC7EyJ@$RMs7=Ok!{52R+;h1RM&BT3hokeEcVbY4*S?5S@v{<-|4a#V!%&15{nc--17n7^eN;ugY8W`E16 zKauldeQ$^)+6jv%;CH7zIh6l2=p?3ef2Hb#J*7hb8Kre{o}tU{~yu( zwBD|GH3W)Ddol9ipQq zl(hXA-#_G=dirv6qw24;L~VO0BGtP;KF?DmdA1EozOr@jtuk+XL1Av!=Ysx@v+9bZ z*w7~X6|C6z-(wgb;f49+)#_)%j}`73Kk4C)2>1S2O>kJ4EQzj{-nNHTR>G-@5OVC( z6aD@DCXeD@(eRJ*-!j7fJMBq{7j5b|TD}_xg=<0>y#n7#C3|qK?fv87ANC_)zmm#N z`KK8C2cCrSCU-2GU(Bj}1_E85=Gb0(DXkZ{!Os|Kx>Z>8UN$vPiGI{Y$zYp-$Ng`e3xGv$$!kI=H`~OG=6TAW`w>^ zZJJ5=|1*t$$+f$wfAS4sBkXel=RZHj z;PLhM*K=-MK{JQHgl|?DkFQO?X%>|4(fG&1|7dv|e16LZXrH-FW($>$w3ps?@mYWT zXfbRrd+3t^S9b=im)MjE_N%gUIMISO_@wj5`hy0-R}Ka67vog#*Yr_zkK*~VAd#`} zYoBS6-^AZP8vo7fTWCpk7dOa!}(ws zTJtjO#|ZKN#y_q00KOmVC_e^%dIG-*D1mIBU56B3;(|tS#~L;RvZVh=@>hc&47*_% zhEryiKkwF_AY%U7XP}5ldYHDc^xv<(*P+fH_XjVRiSk}24}c$ri4B18?RdEULUKr7 z&cR3XFa$iS(jU8g#I4Wq8I5=Oz){Qb*=GR}#7%e24K813CcyH*X#`Je$9Qd4V0QLn zVtTj+82Hq2iZSNh1gD9ZZ!eXIN&Uo$43kG@kxYjl5r1F#4?8VpS{i9D`6lzz{@9v) zrV8%84aIjTLBH@9=_7D2wFM83Grq4!DCV{+}o;O7Qn z;=J*}$a8+UmT16rZ?Q#D*m!(s{$J-q`bh6l#jX^KWOk>eys_~A!IL8St@G_^ACNut zdnAxV4h{o>tEj|~0QeUJzl{J2hZz6vVSW1h{7+R;`S@!c>wa+(M6M+@97FzEGBgl70blB#0fmnYg94fc95FPX(DwT$IWT<^azQU0BFcr8FSw>GS!Hf$zbv&jNCF7wTwgM8>T$d@5Up1-8w$ya_u zmhXzDqw@FD^lI!C7W0SUnge*bD`|b;nm~4NMdN!SzPI>2vv@7R1lI_z9=sX!1Tup_ zu9c_}Iz({+x1+>jxlKlKIb2h)!@84V;?}saFr6J+6F0c7ioJ|w-t7f>%y@_xNrd|T zyg-`bK$cnOqX!M3Pe|8^H7eJ_%+7^tJ28Gj+O?sp z3l9nMoyrIK^aggUQovOkp9s7e4rxj5#7*kn;!{bA9TXRETz<_3IErWT>20v5QbBP6 zxkj_Dh8?>WaCP>1;0H?MN4sefw_8-vpHAZoIB>hPRIp>+0T}^p1iG{Y^$6~ zNU%(9`Dnt~x{L^nAJQ$$>*-kv77313hITYd!tpD=c(G>)y9c}6gNK~2$qgI3-=yUY zxH=W!#>e{Sr_Ox}sA({bHxd41HB5dUgI^YnC)Y;6&CVs_pm4Lx#^l?v39i+eo%J-H zxK%kda4m0$Zx3a+@hG{LkoPm_$+++(*{sT-aGb8bL4C4ta%1h94j4b=>YD;lWWb`b zV@YMl$hH970)Qcs+P`wn!Dl7>B8^5qO*ye_ZFSwsjv=_VyYW4Qeti-8N7o~>wB8eN z44K+R>(g!A9Bqbu1&Zf3bt>Y>t)5}N$h8U-A|6w>ft#qKUBm4CC*T$u)|kfH<0Q-$ z&Vb(ueZSkd7vw{^${xtFuz$RwAxMP_cLhgwg0OH*NyZ!dyK~Xc=L&8HWV{U*RGAk@ zxaI>Nnf)KmnaNK};*&$U+e*w1;WPRD0vvNkMo!j_&4A7UCUuYRV99Iub)xIruG9>I zCs+aZY_ehbmyQoee}n#Vu=q`5t6sm9<{AcWPh}oaAC{Ga&F(#NfW~(l)!|_7a`9YJ zT99T($^9yvzU#ROZhUFUl+cbk`!V^hH=cfaV)=Cd*1)md`Mx8hp!|sGhwJ-8%1;Y}zYV^F z#Yv0A2L;^0lH}hdJLnVgwH}{+_8E+TLLgsr68(m#uw=a;N=N#4on4G2_;0&a(ER@S z@{jHhqp{0pp_PNb#Qw59c^;2W{{!Js{9lJQe0<~3*6pml$dYMCNz_jjUxz-}{T^OC zp30|0N-(!57`4|${q`Uedn~x_3*M#z4I+lyF|f=LaSePMhb2vlI(9}SO;owbx7DBn ztHk(&uq=|iBVso(o58`TW7~a6JMW{_7>gDaMZpinkcJP``+VFXGL2se)Aa6)E@as- z?ri`k$TCW;vUa&NbL@*QlXrJFcPbC)(bLy`TxV*BmD6FTH(oiZu4h~ld7mt+PnXPq z@`?9A5d6^c#(qYY0Rb`OHZv^KH!S|5Zq2?AN$ftkrO$2C_nY?+w7j`UzQ=Fcs`cjB zezz>Hh<4Ug@2pDolQHZzS^+n==@A&$68cnw55oK8+Xpo5j*7A8VHzIZW8k*|#%W6B z=ilEt=y{}53(J_ayhDd*ego&C6N|QJN+~vRr8Z5`JT{Fc%Y^s*>cdZyk$9WP#NC|< zUv|c(WpCS~R36TCb^D5@uvAy_}8d#_OUyA&9z)g4m@~I>={b*cgKXs}Hg+2IyndDDyt1Vr&tZX=YFl#OOD^|SAFTuz& z@_jJ9l?(!&Tn@Sb@{a6(!3dP^w?%7+ROCH~C*Ljw>AwxTe9G^XUdS&Pf$}BQ!7Vfa z%V8@JHdDqR~={4f?8uXpB;onJ*=KQ4f`7!uL`>z9WHRffO-mrk=0{OHq6$|w|8&9Iu#GR zLS`>>Tn2sM)f7o}Z2)wW=KQ5gYSFC&kkyGtW(~NilLLDVsS`d2nkOu1_tkIFrRd{s z3T$hMQ9w6>FY(jGO&Bj3gP`(vNnlkfloU8^HaMAvLAjI4Q*+6;X3%EczG)X&dT=^? zaZ}QwiNxuGbOR~;OF-zlH$eNlpjO11EwS6MBx&z2Eujf}e6UF{KO;qQ_`?Z3wPdkd roqPmV*^*Zar-auDxJ@Gidm2RA69>L?ySZ%-wC3Wh_b!-*&m8{;LzSQ4 literal 0 HcmV?d00001 From baf4b0146e3adde3e875291cdecc57567b422d5c Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sat, 11 Apr 2015 16:50:35 -0500 Subject: [PATCH 131/214] Missing semmicolon --- addons/missileguidance/CfgVehicles.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/missileguidance/CfgVehicles.hpp b/addons/missileguidance/CfgVehicles.hpp index 46d22e19e9..ec07cd96c1 100644 --- a/addons/missileguidance/CfgVehicles.hpp +++ b/addons/missileguidance/CfgVehicles.hpp @@ -5,7 +5,7 @@ class CfgVehicles { class Turrets { class MainTurret; }; - } + }; class ACE_Comanche_Test : B_Heli_Attack_01_F { displayName = "ACE_Comanche_Test"; From 2ccec59b80fe3bbe15f5431610471d36b7a85725 Mon Sep 17 00:00:00 2001 From: FreeZbe Date: Sun, 12 Apr 2015 00:14:33 +0200 Subject: [PATCH 132/214] Update AUTHORS.txt --- AUTHORS.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/AUTHORS.txt b/AUTHORS.txt index 86c3c6ef9a..4e75e89f17 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -40,6 +40,7 @@ Falke75 Ferenczi Ferenzi Filip Basara (Logo) +FreeZbe geraldbolso1899 Ghost gienkov @@ -66,4 +67,4 @@ Sniperwolf572 Tonic Tourorist Valentin Torikian -zGuba \ No newline at end of file +zGuba From 488000bdf327e69fdb4b94cb28dacc6e92c3a0da Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Sat, 11 Apr 2015 19:34:29 -0300 Subject: [PATCH 133/214] Rename "Check Temperature" to "Check Weapon Temperature" and move it inside the equipment submenu. Close #494 --- addons/overheating/CfgVehicles.hpp | 20 ++++++++++---------- addons/overheating/stringtable.xml | 12 ++---------- 2 files changed, 12 insertions(+), 20 deletions(-) diff --git a/addons/overheating/CfgVehicles.hpp b/addons/overheating/CfgVehicles.hpp index bee4c0ec4c..5c7f7b9eb6 100644 --- a/addons/overheating/CfgVehicles.hpp +++ b/addons/overheating/CfgVehicles.hpp @@ -13,16 +13,16 @@ class CfgVehicles { icon = QUOTE(PATHTOF(UI\spare_barrel_ca.paa)); hotkey = "B"; }; - }; - class ACE_CheckTemperature { - displayName = "$STR_ACE_Overheating_CheckTemperatureShort"; - condition = "switch (currentWeapon _player) do {case (''): {false}; case (primaryWeapon _player); case (secondaryWeapon _player); case (handgunWeapon _player): {true}; default {false}}"; - exceptions[] = {"isNotInside"}; - statement = QUOTE( [ARR_2(_player, currentWeapon _player)] call FUNC(CheckTemperature); ); - showDisabled = 0; - priority = 3.1; - icon = QUOTE(PATHTOF(UI\temp_ca.paa)); - hotkey = "P"; + class ACE_CheckTemperature { + displayName = "$STR_ACE_Overheating_CheckTemperatureShort"; + condition = "switch (currentWeapon _player) do {case (''): {false}; case (primaryWeapon _player); case (secondaryWeapon _player); case (handgunWeapon _player): {true}; default {false}}"; + exceptions[] = {"isNotInside"}; + statement = QUOTE( [ARR_2(_player, currentWeapon _player)] call FUNC(CheckTemperature); ); + showDisabled = 0; + priority = 2.9; + icon = QUOTE(PATHTOF(UI\temp_ca.paa)); + hotkey = "P"; + }; }; }; }; diff --git a/addons/overheating/stringtable.xml b/addons/overheating/stringtable.xml index bc28c3a47d..93025c41bb 100644 --- a/addons/overheating/stringtable.xml +++ b/addons/overheating/stringtable.xml @@ -119,16 +119,8 @@ Проверить температуру оружия - Check<br/>temperature - Temperatur<br/>prüfen - Verificar<br/>temperatura - Sprawdź<br/>temperaturę - Vérifier la<br/>température - Hőmérséklet<br/>ellenőrzése - Zjistit<br/>teplotu - Conferir<br/>temperatura - Controlla la<br/>temperatura - Проверить<br/>температуру + Check weapon<br/>temperature + Verificar temperatura<br/>del arma Checking temperature ... From 37a80139b8be0649fb9bc34fac8af43baac2da2d Mon Sep 17 00:00:00 2001 From: Kllrt Date: Sun, 12 Apr 2015 00:56:58 +0200 Subject: [PATCH 134/214] Update AUTHORS.txt --- AUTHORS.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/AUTHORS.txt b/AUTHORS.txt index 86c3c6ef9a..5e86e0057c 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -50,6 +50,7 @@ havena Hawkins jokoho48 Jonpas +Kllrt Legolasindar "Viper" licht-im-Norden87 MarcBook @@ -66,4 +67,4 @@ Sniperwolf572 Tonic Tourorist Valentin Torikian -zGuba \ No newline at end of file +zGuba From 350a79c8a429c14e6a6c33bab7d26118853d66b5 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sat, 11 Apr 2015 19:44:42 -0500 Subject: [PATCH 135/214] #498 - Use cursor mode when scoped --- addons/interact_menu/functions/fnc_keyDown.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/interact_menu/functions/fnc_keyDown.sqf b/addons/interact_menu/functions/fnc_keyDown.sqf index d4a7f8a96e..47fdfb1951 100644 --- a/addons/interact_menu/functions/fnc_keyDown.sqf +++ b/addons/interact_menu/functions/fnc_keyDown.sqf @@ -32,7 +32,7 @@ GVAR(openedMenuType) = _menuType; GVAR(useCursorMenu) = (vehicle ACE_player != ACE_player) || visibleMap || - {(_menuType == 1) && {(isWeaponDeployed ACE_player) || GVAR(AlwaysUseCursorSelfInteraction)}}; + {(_menuType == 1) && {(isWeaponDeployed ACE_player) || GVAR(AlwaysUseCursorSelfInteraction) || {cameraView == "GUNNER"}}}; if (GVAR(useCursorMenu)) then { createDialog QGVAR(cursorMenu); // The dialog sets: From 2182e8b63143417a060eaff03bb6f6f2bf6e568c Mon Sep 17 00:00:00 2001 From: Grzegorz Date: Sun, 12 Apr 2015 03:15:57 +0200 Subject: [PATCH 136/214] e-mail of me and ACCtomeek --- AUTHORS.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AUTHORS.txt b/AUTHORS.txt index 4e75e89f17..e8a7202407 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -26,7 +26,7 @@ Walter Pearce # CONTRIBUTORS 11RDP-LoupVert [BIG]Bull -ACCtomeek +ACCtomeek Adanteh aeroson Aggr094 @@ -43,7 +43,7 @@ Filip Basara (Logo) FreeZbe geraldbolso1899 Ghost -gienkov +GieNkoV gpgpgpgp Grzegorz Hamburger SV From 200c380622ab6f90af6fbf131893658aa425431b Mon Sep 17 00:00:00 2001 From: licht-im-Norden87 Date: Sun, 12 Apr 2015 03:16:42 +0200 Subject: [PATCH 137/214] Update AUTHORS.txt --- AUTHORS.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AUTHORS.txt b/AUTHORS.txt index 4e75e89f17..ff8d9130d3 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -52,7 +52,7 @@ Hawkins jokoho48 Jonpas Legolasindar "Viper" -licht-im-Norden87 +licht-im-Norden87 MarcBook Michail Nikolaev nic547 From bd07e18b43385b39cb19e08ed9a728e439b50b4e Mon Sep 17 00:00:00 2001 From: licht-im-Norden87 Date: Sun, 12 Apr 2015 03:26:45 +0200 Subject: [PATCH 138/214] Update stringtable.xml --- addons/common/stringtable.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index 95d89be6c6..d25e6abc9a 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -325,7 +325,7 @@ Select the position of or disable the feedback icons on your screen. These icons will show to provide extra feedback on your character status and actions performed. - Wähle die Position der Rückmeldungssymbole, oder deaktiviere sie. Diese Symbole stellen eine zusätzliche Rückmeldung über die Lage und Handlungen deines Soldaten da. + Wähle die Position der Rückmeldungssymbole, oder deaktiviere sie. Diese Symbole stellen eine zusätzliche Rückmeldung über die Lage und Handlungen deines Soldaten dar. Progress bar location From bd673d337492060c38944c4f06c1604cfd3dc79b Mon Sep 17 00:00:00 2001 From: licht-im-Norden87 Date: Sun, 12 Apr 2015 03:28:12 +0200 Subject: [PATCH 139/214] Update stringtable.xml --- addons/disposable/stringtable.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/disposable/stringtable.xml b/addons/disposable/stringtable.xml index 9e2c816082..b89bda8644 100644 --- a/addons/disposable/stringtable.xml +++ b/addons/disposable/stringtable.xml @@ -24,7 +24,7 @@ Preloaded Missile Dummy - Vorgelade Racketennachbildung + Vorgeladene Racketennachbildung Preloaded Missile Dummy Preloaded Missile Dummy Preloaded Missile Dummy From a30eabfb1d923b3b1f50005ea47bcbc0e15c3aaf Mon Sep 17 00:00:00 2001 From: licht-im-Norden87 Date: Sun, 12 Apr 2015 03:30:11 +0200 Subject: [PATCH 140/214] Update stringtable.xml --- addons/overheating/stringtable.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/overheating/stringtable.xml b/addons/overheating/stringtable.xml index d2ade49f10..eafc6e7ec1 100644 --- a/addons/overheating/stringtable.xml +++ b/addons/overheating/stringtable.xml @@ -8,7 +8,7 @@ Display a notification whenever your weapon gets jammed - Zeige stets einen Hinweis wenn die Waffe eine Ladehemmung hat + Zeige einen Hinweis wenn die Waffe eine Ladehemmung hat Spare barrel From 8386c0e22a0a1d646fb65ccf2855ecd9a8528d4d Mon Sep 17 00:00:00 2001 From: Nou Date: Sat, 11 Apr 2015 18:36:10 -0700 Subject: [PATCH 141/214] Seeker system and network enabled laser simulation. --- addons/laser/XEH_post_init.sqf | 3 +- addons/laser/XEH_pre_init.sqf | 11 +- addons/laser/functions/fnc_handleLaserOff.sqf | 8 + addons/laser/functions/fnc_handleLaserOn.sqf | 7 + addons/laser/functions/fnc_laserOff.sqf | 16 ++ addons/laser/functions/fnc_laserOn.sqf | 23 +++ addons/laser/functions/fnc_rotateVectLine.sqf | 4 +- .../functions/fnc_rotateVectLineGetMap.sqf | 13 +- .../functions/fnc_seekerFindLaserSpot.sqf | 139 ++++++++++++++++++ addons/laser/functions/fnc_shootCone.sqf | 33 ++--- addons/laser/functions/fnc_shootRay.sqf | 10 +- 11 files changed, 227 insertions(+), 40 deletions(-) create mode 100644 addons/laser/functions/fnc_handleLaserOff.sqf create mode 100644 addons/laser/functions/fnc_handleLaserOn.sqf create mode 100644 addons/laser/functions/fnc_laserOff.sqf create mode 100644 addons/laser/functions/fnc_laserOn.sqf create mode 100644 addons/laser/functions/fnc_seekerFindLaserSpot.sqf diff --git a/addons/laser/XEH_post_init.sqf b/addons/laser/XEH_post_init.sqf index 6904ee6c47..fb189d5041 100644 --- a/addons/laser/XEH_post_init.sqf +++ b/addons/laser/XEH_post_init.sqf @@ -1,3 +1,4 @@ #include "script_component.hpp" -NO_DEDICATED; +["laser_laserOn", {_this call DFUNC(handleLaserOn)}] call EFUNC(common,addEventHandler); +["laser_laserOff", {_this call DFUNC(handleLaserOff)}] call EFUNC(common,addEventHandler); diff --git a/addons/laser/XEH_pre_init.sqf b/addons/laser/XEH_pre_init.sqf index 4e4a39e8bf..5798e3c9a7 100644 --- a/addons/laser/XEH_pre_init.sqf +++ b/addons/laser/XEH_pre_init.sqf @@ -12,9 +12,18 @@ PREP(findStrongestRay); PREP(translateToModelSpace); PREP(translateToWeaponSpace); +PREP(seekerFindLaserSpot); +PREP(laserOn); +PREP(laserOff); +PREP(handleLaserOn); +PREP(handleLaserOff); + + PREP(laser_init); PREP(laserTargetPFH); ACE_LASERS = []; -ACE_DEFAULT_LASER_CODE = 1001; \ No newline at end of file +ACE_DEFAULT_LASER_CODE = 1001; + +GVAR(laserEmitters) = HASH_CREATE; \ No newline at end of file diff --git a/addons/laser/functions/fnc_handleLaserOff.sqf b/addons/laser/functions/fnc_handleLaserOff.sqf new file mode 100644 index 0000000000..573bd8197b --- /dev/null +++ b/addons/laser/functions/fnc_handleLaserOff.sqf @@ -0,0 +1,8 @@ +//fnc_handleLaserOff.sqf +#include "script_component.hpp" + +private ["_uuid"]; +_uuid = _this select 0; +if(HASH_HASKEY(GVAR(laserEmitters), _uuid)) then { + HASH_REM(GVAR(laserEmitters), _uuid); +}; diff --git a/addons/laser/functions/fnc_handleLaserOn.sqf b/addons/laser/functions/fnc_handleLaserOn.sqf new file mode 100644 index 0000000000..bac53a8957 --- /dev/null +++ b/addons/laser/functions/fnc_handleLaserOn.sqf @@ -0,0 +1,7 @@ +//fnc_handleLaserOn.sqf +#include "script_component.hpp" + +private ["_uuid", "_args"]; +_uuid = _this select 0; +_args = _this select 1; +HASH_SET(GVAR(laserEmitters), _uuid, _args); diff --git a/addons/laser/functions/fnc_laserOff.sqf b/addons/laser/functions/fnc_laserOff.sqf new file mode 100644 index 0000000000..84613cd988 --- /dev/null +++ b/addons/laser/functions/fnc_laserOff.sqf @@ -0,0 +1,16 @@ +/* + * Author: Nou + * Turn a laser designator off. + * + * Arguments: + * 0: UUID (from laserOn) + * + * Return value: + * None + */ + +#include "script_component.hpp" + +private ["_uuid"]; +_uuid = _this select 0; +["laser_laserOff", [_uuid]] call EFUNC(common,globalEvent); diff --git a/addons/laser/functions/fnc_laserOn.sqf b/addons/laser/functions/fnc_laserOn.sqf new file mode 100644 index 0000000000..3091acc3f6 --- /dev/null +++ b/addons/laser/functions/fnc_laserOn.sqf @@ -0,0 +1,23 @@ +/* + * Author: Nou + * Turn a laser designator on. + * + * Arguments: + * 0: Emitter + * 1: Owner + * 2: Method, can be code, which emitter and owner are passed to, an array with a position memory point and weapon name, or an array with a position memory point, a vector begining memory point, and vector ending memory point. + * 3: Wavelength (1550nm is common eye safe) + * 4: Laser code + * 5: Beam divergence (in mils off beam center). + * + * Return value: + * String, UUID for sending to laserOff function. + */ + +#include "script_component.hpp" + +private ["_uuid", "_args"]; +_uuid = format["%1%2%3", floor diag_tickTime, floor random 1000, floor random 10000]; +_args = [_uuid, _this]; +["laser_laserOn", _args] call EFUNC(common,globalEvent); +_uuid; diff --git a/addons/laser/functions/fnc_rotateVectLine.sqf b/addons/laser/functions/fnc_rotateVectLine.sqf index b0360cc330..ec85a83cb7 100644 --- a/addons/laser/functions/fnc_rotateVectLine.sqf +++ b/addons/laser/functions/fnc_rotateVectLine.sqf @@ -32,7 +32,5 @@ if (_d != 0) then { }; /* Inverse of step 1 */ -_q1 set[0, (_q2 select 0) + (_p1 select 0)]; -_q1 set[1, (_q2 select 1) + (_p1 select 1)]; -_q1 set[2, (_q2 select 2) + (_p1 select 2)]; +_q1 = _q2 vectorAdd _p1; _q1; \ No newline at end of file diff --git a/addons/laser/functions/fnc_rotateVectLineGetMap.sqf b/addons/laser/functions/fnc_rotateVectLineGetMap.sqf index fdbd6533ef..dc4b1b54c3 100644 --- a/addons/laser/functions/fnc_rotateVectLineGetMap.sqf +++ b/addons/laser/functions/fnc_rotateVectLineGetMap.sqf @@ -5,19 +5,12 @@ _p = _this select 0; _p1 = _this select 1; _p2 = _this select 2; -_q1 = []; _q2 = []; -_u = []; /* Step 1 */ -_q1 set[0, (_p select 0) - (_p1 select 0)]; -_q1 set[1, (_p select 1) - (_p1 select 1)]; -_q1 set[2, (_p select 2) - (_p1 select 2)]; - -_u set[0, (_p2 select 0) - (_p1 select 0)]; -_u set[1, (_p2 select 1) - (_p1 select 1)]; -_u set[2, (_p2 select 2) - (_p1 select 2)]; -_u = _u call BIS_fnc_unitVector; +_q1 = _p vectorDiff _p1; +_u = _p2 vectorDiff _p1; +_u = vectorNormalized _u; _d = sqrt((_u select 1)*(_u select 1) + (_u select 2)*(_u select 2)); /* Step 2 */ diff --git a/addons/laser/functions/fnc_seekerFindLaserSpot.sqf b/addons/laser/functions/fnc_seekerFindLaserSpot.sqf new file mode 100644 index 0000000000..141e0236d0 --- /dev/null +++ b/addons/laser/functions/fnc_seekerFindLaserSpot.sqf @@ -0,0 +1,139 @@ +/* + * Author: Nou + * Turn a laser designator on. + * + * Arguments: + * 0: Position of seeker (ASL) + * 1: Seeker wavelength sensitivity range, [1550,1550] is common eye safe. + * 2: Seeker laser code. + * + * Return value: + * Array, [Strongest compatible laser spot ASL pos, owner object] Nil array values if nothing found. + */ + +#include "script_component.hpp" + +private ["_pos", "_seekerWavelengths", "_seekerCode", "_spots", "_buckets", "_excludes", "_bucketIndex", "_finalPos", "_owner", "_obj", "_x", "_method", + "_emitterWavelength", "_laserCode", "_divergence", "_laser", "_laserPos", "_laserDir", "_res", "_bucketPos", "_bucketList", "_c", "_forEachIndex", "_index", + "_testPos", "_finalBuckets", "_largest", "_largestIndex", "_finalBucket", "_owners", "_avgX", "_avgY", "_avgZ", "_count", "_maxOwner", "_maxOwnerIndex", "_finalOwner"]; + +_pos = _this select 0; +_seekerWavelengths = _this select 1; +_seekerCode = _this select 2; + +_spots = []; +_buckets = []; +_excludes = []; +_bucketIndex = 0; +_finalPos = nil; +_finalOwner = nil; + +{ + _obj = _x select 0; + _owner = _x select 1; + _method = _x select 2; + _emitterWavelength = _x select 3; + _laserCode = _x select 4; + _divergence = _x select 5; + if(alive _obj && {_emitterWavelength >= (_seekerWavelengths select 0)} && {_emitterWavelength <= (_seekerWavelengths select 1)} && {_laserCode == _seekerCode}) then { + _laser = []; + if(IS_CODE(_method)) then { + _laser = _x call _method; + } else { + if(IS_ARRAY(_method)) then { + if(count _method == 2) then { + _laser = [ATLtoASL (_obj modelToWorldVisual (_method select 0)), _obj weaponDirection (_method select 1)]; + } else { + if(count _method == 3) then { + _laser = [ATLtoASL (_obj modelToWorldVisual (_method select 0)), (ATLtoASL (_obj modelToWorldVisual (_method select 1))) vectorFromTo (ATLtoASL (_obj modelToWorldVisual (_method select 2)))]; + }; + }; + }; + }; + _laserPos = _laser select 0; + _laserDir = _laser select 1; + _res = [_laserPos, _laserDir, _divergence] call FUNC(shootCone); + { + _spots pushBack [_x select 0, _owner]; + } forEach (_res select 2); + }; +} forEach (GVAR(laserEmitters) select 1); + +if((count _spots) > 0) then { + _bucketPos = nil; + _bucketList = nil; + _c = 0; + while { count(_spots) != count(_excludes) && _c < (count _spots) } do { + scopeName "mainSearch"; + { + if(!(_forEachIndex in _excludes)) then { + _index = _buckets pushBack [_x, [_x]]; + _excludes pushBack _forEachIndex; + _bucketPos = _x select 0; + _bucketList = (_buckets select _index) select 1; + breakTo "mainSearch"; + }; + } forEach _spots; + { + if(!(_forEachIndex in _excludes)) then { + _testPos = (_x select 0); + if(_testPos vectorDistanceSqr _bucketPos <= 100) then { + _bucketList pushBack _x; + _excludes pushBack _forEachIndex; + }; + }; + } forEach _spots; + _c = _c + 1; + }; + _finalBuckets = []; + _largest = -1; + _largestIndex = 0; + { + _index = _finalBuckets pushBack []; + _bucketList = _finalBuckets select _index; + { + _testPos = (_x select 0); + if(!terrainIntersectASL [_pos, _testPos] && {!lineIntersects [_pos, _testPos]}) then { + _bucketList pushBack _x; + }; + } forEach (_x select 1); + if((count _bucketList) > _largest) then { + _largest = (count _bucketList); + _largestIndex = _index; + }; + } forEach _buckets; + + _finalBucket = _finalBuckets select _largestIndex; + _owners = HASH_CREATE; + + if(count _finalBucket > 0) then { + _avgX = 0; + _avgY = 0; + _avgZ = 0; + { + player sideChat format["x: %1", _x]; + _avgX = _avgX + ((_x select 0) select 0); + _avgY = _avgY + ((_x select 0) select 1); + _avgZ = _avgZ + ((_x select 0) select 2); + _owner = _x select 1; + if(HASH_HASKEY(_owners, _owner)) then { + _count = HASH_GET(_owners, _owner); + HASH_SET(_owners, _owner, _count+1); + } else { + HASH_SET(_owners, _owner, 1); + }; + } forEach _finalBucket; + _count = count _finalBucket; + _finalPos = [_avgX/_count, _avgY/_count, _avgZ/_count]; + _maxOwner = -1; + _maxOwnerIndex = 0; + { + if((_owners select 1) select _forEachIndex > _maxOwner) then { + _maxOwner = (_owners select 1) select _forEachIndex; + _maxOwnerIndex = _forEachIndex; + }; + } forEach (_owners select 0); + _finalOwner = (_owners select 0) select _maxOwnerIndex; + }; +}; +[_finalPos, _owner]; diff --git a/addons/laser/functions/fnc_shootCone.sqf b/addons/laser/functions/fnc_shootCone.sqf index e33edd10bc..ff719cbf4a 100644 --- a/addons/laser/functions/fnc_shootCone.sqf +++ b/addons/laser/functions/fnc_shootCone.sqf @@ -1,8 +1,13 @@ #include "script_component.hpp" - +// #define DEBUG_MODE_FULL +private ["_divergence","_pos","_vec","_longestReturn","_shortestReturn","_resultPositions","_p1","_p2","_p","_v","_cp","_vecRotateMap","_result", + "_resultPos","_distance","_count","_pos2","_radOffset","_offset","_offsetPos","_offsetVector"]; _divergence = 0.3; _pos = _this select 0; _vec = _this select 1; +if(count _this > 2) then { + _divergence = _this select 2; +}; _longestReturn = -1000000000; _shortestReturn = 1000000000; _resultPositions = []; @@ -10,7 +15,7 @@ _p1 = [0,0,0]; _p2 = +_vec; _p = (_vec call CBA_fnc_vect2polar); _v = [(_p select 0), (_p select 1), (_p select 2)+90] call CBA_fnc_polar2vect; -_cp = [_vec, _v] call BIS_fnc_crossProduct; +_cp = _vec vectorCrossProduct _v; _vecRotateMap = [_cp, _p1, _p2] call FUNC(rotateVectLineGetMap); @@ -24,28 +29,21 @@ if(!isNil "_resultPos") then { if(_distance > _longestReturn) then { _longestReturn = _distance; }; - _resultPositions set[(count _resultPositions), _result]; + _resultPositions pushBack _result; #ifdef DEBUG_MODE_FULL - DRAW_LINES set[(count DRAW_LINES), [_pos, _resultPos, [0, 1, 0, 1]]]; + // DRAW_LINES set[(count DRAW_LINES), [_pos, _resultPos, [0, 1, 0, 1]]]; + drawLine3D [ASLtoATL _pos, ASLtoATL _resultPos, [1,0,0,1]]; #endif }; _count = 8; -_pos2 = [ - (_pos select 0)+((_vec select 0)*1000), - (_pos select 1)+((_vec select 1)*1000), - (_pos select 2)+((_vec select 2)*1000) - ]; +_pos2 = _pos vectorAdd (_vec vectorMultiply 1000); { for "_i" from 0 to ceil(_count*_x) do { _radOffset = random 360; _offset = [_vecRotateMap, (((360/_count)*_i)+_radOffset) mod 360] call FUNC(rotateVectLine); - _offsetPos = [ - (_pos2 select 0)+((_offset select 0)*(_divergence*_x)), - (_pos2 select 1)+((_offset select 1)*(_divergence*_x)), - (_pos2 select 2)+((_offset select 2)*(_divergence*_x)) - ]; - _offsetVector = [_pos, _offsetPos] call BIS_fnc_vectorFromXtoY; + _offsetPos = _pos2 vectorAdd (_offset vectorMultiply (_divergence*_x)); + _offsetVector = _pos vectorFromTo _offsetPos; _result = [_pos, _offsetVector] call FUNC(shootRay); _resultPos = _result select 0; if(!isNil "_resultPos") then { @@ -56,9 +54,10 @@ _pos2 = [ if(_distance > _longestReturn) then { _longestReturn = _distance; }; - _resultPositions set[(count _resultPositions), _result]; + _resultPositions pushBack _result; #ifdef DEBUG_MODE_FULL - DRAW_LINES set[(count DRAW_LINES), [_pos, _resultPos, [0, 1, 0, 1]]]; + // DRAW_LINES set[(count DRAW_LINES), [_pos, _resultPos, [0, 1, 0, 1]]]; + drawLine3D [ASLtoATL _pos, ASLtoATL _resultPos, [1,0,0,1]]; #endif }; }; diff --git a/addons/laser/functions/fnc_shootRay.sqf b/addons/laser/functions/fnc_shootRay.sqf index 62847d16b6..83b257ed7b 100644 --- a/addons/laser/functions/fnc_shootRay.sqf +++ b/addons/laser/functions/fnc_shootRay.sqf @@ -11,13 +11,8 @@ _lastPos = +_pos; { scopeName "mainSearch"; for "_i" from 1 to 10 do { - _nextPos = [ - (_lastPos select 0)+((_vec select 0)*_x), - (_lastPos select 1)+((_vec select 1)*_x), - (_lastPos select 2)+((_vec select 2)*_x) - ]; - - if(lineIntersects [_lastPos, _nextPos] || terrainIntersectASL [_lastPos, _nextPos]) then { + _nextPos = _lastPos vectorAdd (_vec vectorMultiply _x); + if(terrainIntersectASL [_lastPos, _nextPos] || {lineIntersects [_lastPos, _nextPos]}) then { _resultPos = _lastPos; breakTo "mainSearch"; } else { @@ -25,6 +20,5 @@ _lastPos = +_pos; _lastPos = _nextPos; }; }; - } forEach _fidelity; [_resultPos, _distance]; \ No newline at end of file From 5101a21beb71b5280cfb1c4889a7af42beff0b57 Mon Sep 17 00:00:00 2001 From: KoffeinFlummi Date: Sun, 12 Apr 2015 04:21:06 +0200 Subject: [PATCH 142/214] Remove "Original" stringtable entries --- addons/optics/stringtable.xml | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/addons/optics/stringtable.xml b/addons/optics/stringtable.xml index d34dd8b633..edbcd7b48d 100644 --- a/addons/optics/stringtable.xml +++ b/addons/optics/stringtable.xml @@ -3,7 +3,6 @@ - RCO (2D) RCO (2D) RCO (2D) RCO (2D) @@ -16,7 +15,6 @@ - RCO (PIP) RCO (PIP) RCO (PIP) RCO (PIP) @@ -29,7 +27,6 @@ - ARCO (2D) ARCO (2D) ARCO (2D) ARCO (2D) @@ -42,7 +39,6 @@ - ARCO (PIP) ARCO (PIP) ARCO (PIP) ARCO (PIP) @@ -55,7 +51,6 @@ - MRCO (2D) MRCO (2D) MRCO (2D) MRCO (2D) @@ -68,7 +63,6 @@ - MRCO (PIP) MRCO (PIP) MRCO (PIP) MRCO (PIP) @@ -81,7 +75,6 @@ - MOS (2D) MOS (2D) MOS (2D) MOS (2D) @@ -94,7 +87,6 @@ - MOS (PIP) MOS (PIP) MOS (PIP) MOS (PIP) @@ -107,7 +99,6 @@ - LRPS (2D) LRPS (2D) LRPS (2D) LRPS (2D) @@ -120,7 +111,6 @@ - LRPS (PIP) LRPS (PIP) LRPS (PIP) LRPS (PIP) From db3f816843efd0d4e0d9996e5264dd64e3f79c31 Mon Sep 17 00:00:00 2001 From: Nou Date: Sat, 11 Apr 2015 20:13:52 -0700 Subject: [PATCH 143/214] Reduce default number of rays, make it an argument for shootCone. Accuracy is still the same with 3 to 8, just better FPS. Rangefinders should probably use a higher number (8 is good, 24+1 rays in total per shot). --- addons/laser/functions/fnc_shootCone.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/laser/functions/fnc_shootCone.sqf b/addons/laser/functions/fnc_shootCone.sqf index ff719cbf4a..559a96dc27 100644 --- a/addons/laser/functions/fnc_shootCone.sqf +++ b/addons/laser/functions/fnc_shootCone.sqf @@ -1,5 +1,5 @@ #include "script_component.hpp" -// #define DEBUG_MODE_FULL +#define DEBUG_MODE_FULL private ["_divergence","_pos","_vec","_longestReturn","_shortestReturn","_resultPositions","_p1","_p2","_p","_v","_cp","_vecRotateMap","_result", "_resultPos","_distance","_count","_pos2","_radOffset","_offset","_offsetPos","_offsetVector"]; _divergence = 0.3; @@ -35,7 +35,7 @@ if(!isNil "_resultPos") then { drawLine3D [ASLtoATL _pos, ASLtoATL _resultPos, [1,0,0,1]]; #endif }; -_count = 8; +_count = 3; _pos2 = _pos vectorAdd (_vec vectorMultiply 1000); { From 40c5de8cfb2e2a563f9dd46e7571812d7717074e Mon Sep 17 00:00:00 2001 From: Nou Date: Sat, 11 Apr 2015 20:14:03 -0700 Subject: [PATCH 144/214] Reduce default number of rays, make it an argument for shootCone. Accuracy is still the same with 3 to 8, just better FPS. Rangefinders should probably use a higher number (8 is good, 24+1 rays in total per shot). --- addons/laser/functions/fnc_shootCone.sqf | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/addons/laser/functions/fnc_shootCone.sqf b/addons/laser/functions/fnc_shootCone.sqf index 559a96dc27..324f46184f 100644 --- a/addons/laser/functions/fnc_shootCone.sqf +++ b/addons/laser/functions/fnc_shootCone.sqf @@ -8,6 +8,10 @@ _vec = _this select 1; if(count _this > 2) then { _divergence = _this select 2; }; +_count = 3; +if(count _this > 3) then { + _count = _this select 3; +}; _longestReturn = -1000000000; _shortestReturn = 1000000000; _resultPositions = []; @@ -35,7 +39,7 @@ if(!isNil "_resultPos") then { drawLine3D [ASLtoATL _pos, ASLtoATL _resultPos, [1,0,0,1]]; #endif }; -_count = 3; + _pos2 = _pos vectorAdd (_vec vectorMultiply 1000); { From 0e3d971274afc65d78641d843f3f626d9ef70061 Mon Sep 17 00:00:00 2001 From: bux578 Date: Sun, 12 Apr 2015 07:46:43 +0200 Subject: [PATCH 145/214] Fix translations error --- addons/frag/stringtable.xml | 7 ++----- addons/hearing/stringtable.xml | 1 - 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/addons/frag/stringtable.xml b/addons/frag/stringtable.xml index c185ef9101..e2477347ce 100644 --- a/addons/frag/stringtable.xml +++ b/addons/frag/stringtable.xml @@ -1,16 +1,13 @@  - - - + + Disable Fragmentation Keine Schrapnelle Zakázat fragmentaci granátů - Weapons: Keine Schrapnelle Desactivar fragmentación Wyłącz głowice fragmentacyjne Выключить разлёт осколков - diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index 495e826585..577d041236 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -102,7 +102,6 @@ Disable ear ringing Deaktiviere Ohrfiepen Desactivar zumbido de oídos - Knalltrauma deaktivieren Отключить эффект баротравмы From 2fc7f44c3934370221ebc464489ff300f3a38dec Mon Sep 17 00:00:00 2001 From: bux578 Date: Sun, 12 Apr 2015 07:50:23 +0200 Subject: [PATCH 146/214] french translation, tabler 4 spaces test --- addons/common/stringtable.xml | 803 +++++++++++++++++----------------- 1 file changed, 402 insertions(+), 401 deletions(-) diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index 681d939fc3..c7b0ea070f 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -1,403 +1,404 @@  + - - - ACE-Team - ACE-Team - ACE-Team - ACE-Team - ACE-Team - ACE-Team - Команда ACE - ACE-Team - ACE-Team - ACE-Team - - - Save - Speichern - Guardar - Zapisz - Uložit - Sauvegarder - Сохранить - Salvar - Mentés - Salva - - - Cancel - Abbrechen - Cancelar - Anuluj - Zrušit - Annuler - Отмена - Cancelar - Mégse - Annulla - - - ACE Options - ACE Optionen - Opciones ACE - Opcje ACE - ACE Nastavení - ACE Options - ACE Настройки - Opções do ACE - ACE Opciók - Opzioni ACE - - - - N - N - N - N - S - N - С - N - É - N - - - NNE - NNO - NNE - NNE - SSV - NNE - ССВ - NNE - ÉÉK - NNE - - - NE - NO - NE - NE - SV - NE - СВ - NE - ÉK - NE - - - ENE - ONO - ENE - ENE - VSV - ENE - ВСВ - LNE - KÉK - ENE - - - E - O - E - E - V - E - В - L - K - E - - - ESE - OSO - ESE - ESE - VJV - ESE - ВЮВ - LSE - KDK - ESE - - - SE - SO - SE - SE - JV - SE - ЮВ - SE - DK - SE - - - SSE - SSO - SSE - SSE - JJV - SSE - ЮЮВ - SSE - DDK - SSE - - - S - S - S - S - J - S - Ю - S - D - S - - - SSW - SSW - SSO - SSW - JJZ - SSO - ЮЮЗ - SSO - DDNy - SSO - - - SW - SW - SO - SW - JZ - SO - ЮЗ - SO - DNy - SO - - - WSW - WSW - OSO - WSW - ZJZ - OSO - ЗЮЗ - OSO - NyDNy - OSO - - - W - W - O - W - Z - O - З - O - Ny - O - - - WNW - WNW - ONO - WNW - ZSZ - ONO - ЗСЗ - ONO - NyÉNy - ONO - - - NW - NW - NO - NW - SZ - NO - СЗ - NO - ÉNy - NO - - - NNW - NNW - NNO - NNW - SSZ - NNO - ССЗ - NNO - ÉÉNy - NNO - - - Action cancelled. - Aktion abgebrochen. - Acción cancelada. - Przerwano czynność - Akce přerušena - Action annulée. - Действие отменено. - Ação cancelada. - Művelet megszakítva. - Azione cancellata. - - - [ACE] Miscellaneous Items - [ACE] Verschiedenes - [ACE] Objetos varios - [ACE] Różne przedmioty - [ACE] Ostatní předměty - [ACE] Objets divers - [ACE] Различные предметы - [ACE] Itens diversos - [ACE] Egyéb tárgyak - [ACE] Oggetti vari - - - Disable Command Menu - Befehlsmenü ausschalten - Desactivar menú de mando - Wyłącz menu dowodzenia - Vypnout velící menu - Désactiver Menu Commande - Выключить командное меню - Parancsnoki menü kikapcsolása - Disabilita Menù di comando - - - Unknown - Unbekannt - Desconocido - Nieznany - Neznámý - Неизвестно - Ismeretlen - Sconosciuto - - - No Voice - Keine Stimme - Sin voz - Brak głosu - Žádný hlas - Без голоса - Nincs hang - Senza voce - - - Accept Requests - Anfrage akzeptieren - Aceptar peticiones - Akceptuj prośby - Accetta Richieste - Подтвердить запросы - - - Decline Requests - Anfrage ablehnen - Rechazar peticiones - Ignoruj prośby - Rifiuta Richieste - Отклонить запросы - - - Accept Requests send by other players. These can be requests to use / share equipment, perform certain actions. - Anfragen werden von anderen Mitspielen gestellt. Diese können Anfragen u.a. zum Teilen/Verwenden von Ausrüstungsgegenständen, oder auch zum Ausführen von Handlungen sein. - Acepta peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones. - Akceptuj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności. - Accetta le richieste degli altri giocatori. Queste possono riguardare l'uso o la condivisione dell'equipaggiamento, o di determinate azioni. - Подтвердить запросы, посланные другими игроками. Это могут быть просьбы о передаче снаряжения или выполнении определённых действий. - - - Decline Requests send by other players. These can be requests to use / share equipment, perform certain actions. - Anfragen werden von anderen Mitspielen gestellt. Diese können Anfragen u.a. zum Teilen/Verwenden von Ausrüstungsgegenständen, oder auch zum Ausführen von Handlungen sein. - Rechazar peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones. - Ignoruj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności. - Rifiuta le richieste degli altri giocatori. Queste possono riguardare l'uso o la condivisione dell'equipaggiamento, o di determinate azioni. - Отклонить запросы, посланные другими игроками. Это могут быть просьбы о передаче снаряжения или выполнении определённых действий. - - - Feedback icons - Rückmeldungssymbole - Iconos de respuesta - Icone informative - Иконки состояний - - - Select the position of or disable the feedback icons on your screen. These icons will show to provide extra feedback on your character status and actions performed. - Wähle die Position der Rückmeldungssymbole, oder deaktiviere sie. Diese Symbole stellen eine zusätzliche Rückmeldung über die Lage und Handlungen deines Soldaten dar. - Seleccionar la posición de o desactivar los íconos de respuesta en la pantalla. Estos iconos se mostrarán para proporcionar información adicional sobre el estado de su personaje y las acciones a realizar. - Seleziona la posizione o disabilita le icone informative sul tuo schermo. Queste saranno mostrate per fornire informazioni aggiuntive sullo stato o sulle azioni del giocatore. - Выберите положение или или отключите отображение иконок состояний на Вашем экране. Эти иконки предоставят дополнительную информацию о состоянии персонажа и выполняемых действиях. - - - Progress bar location - Position der Fortschrittsanzeige - Ubicación de la barra de progreso - Posizione della barra di avanzamento - Положение прогресс-бара - - - Set the desired location of the progress bar on your screen. - Setze die gewünschte Position der Fortschrittsanzeige fest - Seleccionar la ubicación deseada de la barra de progreso en tu pantalla - Modifica la posizione su schermo della barra di avanzamento. - Установите желаемое положение строки состояния на экране. - - - Hint Background color - Hintergrundfarbe der Hinweise - Color de fondo de las notificaciones - Sfondo dei Suggerimenti - Цвет фона всплывающих подсказок - - - The color of the background from the ACE hints. - Die Hintergrundfarbe der ACE-Hinweise. - El color de fondo de las notificaciones del ACE - Il colore di sfondo dei suggerimenti dell'ACE. - Цвет фона всплывающий подсказок АСЕ. - - - Hint text font color - Textfarbe der Hinweise - Color del texto de las notificaciones - Testo dei Suggerimenti - Цвет шрифта всплывающих подсказок - - - The color of the text font from the ACE hints. This color is the default color for all text displayed through the ACE Hint system, if the hint text has no other color specified. - Wähle die Textfarbe für ACE-Hinweise. - El color del texto de las notificaciones del ACE. Este es el color predeterminado para todo el texto que se muestra a través del sistema de notificaciones del ACE, si el texto de notificación no tiene otro color especificado. - Il colore del testo dei suggerimenti dell'ACE. Questo è il colore standard per tutti i caratteri mostrati dal sistema di suggerimenti dell'ACE, se questo non è altrimenti specificato. - Цвет шрифта текста всплывающих подсказок АСЕ. Этот цвет является стандартным для всего текста, транслирующегося через систему подсказок АСЕ, если не установлено другого цвета для текста подсказок. - - - Banana - Banane - Banana - Banana - Банан - - - A banana is an edible fruit, botanically a berry, produced by several kinds of large herbaceous flowering plants in the genus Musa. - Die Banane ist eine essbare Frucht, biologisch betrachtet jedoch eine Beere. Sie wächst an unterschiedlichen, krautartigen Gewächsen aus der Familie der Musa. - Una banana es una fruta comestible, botanicamente una baya, producida por varios tipos de grandes plantas herbáceas del género Musa. - Una banana è un frutto commestibile, nello specifico una bacca cuoiosa, prodotto da un gran numero di grandi pianti erbacee dotate di fiori, della famiglia delle Musaceae. - Банан - это съедобный фрукт, ягода с ботанической точки зрения, произрастающий на нескольких видах травянистых растениях рода Банан (Musa). - - - + + + ACE-Team + ACE-Team + ACE-Team + ACE-Team + ACE-Team + Команда ACE + ACE-Team + ACE-Team + ACE-Team + + + Save + Speichern + Guardar + Zapisz + Uložit + Sauvegarder + Сохранить + Salvar + Mentés + Salva + + + Cancel + Abbrechen + Cancelar + Anuluj + Zrušit + Annuler + Отмена + Cancelar + Mégse + Annulla + + + ACE Options + ACE Optionen + Opciones ACE + Opcje ACE + ACE Nastavení + ACE Options + ACE Настройки + Opções do ACE + ACE Opciók + Opzioni ACE + + + + N + N + N + N + S + N + С + N + É + N + + + NNE + NNO + NNE + NNE + SSV + NNE + ССВ + NNE + ÉÉK + NNE + + + NE + NO + NE + NE + SV + NE + СВ + NE + ÉK + NE + + + ENE + ONO + ENE + ENE + VSV + ENE + ВСВ + LNE + KÉK + ENE + + + E + O + E + E + V + E + В + L + K + E + + + ESE + OSO + ESE + ESE + VJV + ESE + ВЮВ + LSE + KDK + ESE + + + SE + SO + SE + SE + JV + SE + ЮВ + SE + DK + SE + + + SSE + SSO + SSE + SSE + JJV + SSE + ЮЮВ + SSE + DDK + SSE + + + S + S + S + S + J + S + Ю + S + D + S + + + SSW + SSW + SSO + SSW + JJZ + SSO + ЮЮЗ + SSO + DDNy + SSO + + + SW + SW + SO + SW + JZ + SO + ЮЗ + SO + DNy + SO + + + WSW + WSW + OSO + WSW + ZJZ + OSO + ЗЮЗ + OSO + NyDNy + OSO + + + W + W + O + W + Z + O + З + O + Ny + O + + + WNW + WNW + ONO + WNW + ZSZ + ONO + ЗСЗ + ONO + NyÉNy + ONO + + + NW + NW + NO + NW + SZ + NO + СЗ + NO + ÉNy + NO + + + NNW + NNW + NNO + NNW + SSZ + NNO + ССЗ + NNO + ÉÉNy + NNO + + + Action cancelled. + Aktion abgebrochen. + Acción cancelada. + Przerwano czynność + Akce přerušena + Action annulée. + Действие отменено. + Ação cancelada. + Művelet megszakítva. + Azione cancellata. + + + [ACE] Miscellaneous Items + [ACE] Verschiedenes + [ACE] Objetos varios + [ACE] Różne przedmioty + [ACE] Ostatní předměty + [ACE] Objets divers + [ACE] Различные предметы + [ACE] Itens diversos + [ACE] Egyéb tárgyak + [ACE] Oggetti vari + + + Disable Command Menu + Befehlsmenü ausschalten + Desactivar menú de mando + Wyłącz menu dowodzenia + Vypnout velící menu + Désactiver Menu Commande + Выключить командное меню + Parancsnoki menü kikapcsolása + Disabilita Menù di comando + + + Unknown + Unbekannt + Desconocido + Nieznany + Neznámý + Неизвестно + Ismeretlen + Sconosciuto + Inconnu + + + No Voice + Keine Stimme + Sin voz + Brak głosu + Žádný hlas + Без голоса + Nincs hang + Senza voce + + + Accept Requests + Anfrage akzeptieren + Aceptar peticiones + Akceptuj prośby + Accetta Richieste + Подтвердить запросы + + + Decline Requests + Anfrage ablehnen + Rechazar peticiones + Ignoruj prośby + Rifiuta Richieste + Отклонить запросы + + + Accept Requests send by other players. These can be requests to use / share equipment, perform certain actions. + Anfragen werden von anderen Mitspielen gestellt. Diese können Anfragen u.a. zum Teilen/Verwenden von Ausrüstungsgegenständen, oder auch zum Ausführen von Handlungen sein. + Acepta peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones. + Akceptuj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności. + Accetta le richieste degli altri giocatori. Queste possono riguardare l'uso o la condivisione dell'equipaggiamento, o di determinate azioni. + Подтвердить запросы, посланные другими игроками. Это могут быть просьбы о передаче снаряжения или выполнении определённых действий. + + + Decline Requests send by other players. These can be requests to use / share equipment, perform certain actions. + Anfragen werden von anderen Mitspielen gestellt. Diese können Anfragen u.a. zum Teilen/Verwenden von Ausrüstungsgegenständen, oder auch zum Ausführen von Handlungen sein. + Rechazar peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones. + Ignoruj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności. + Rifiuta le richieste degli altri giocatori. Queste possono riguardare l'uso o la condivisione dell'equipaggiamento, o di determinate azioni. + Отклонить запросы, посланные другими игроками. Это могут быть просьбы о передаче снаряжения или выполнении определённых действий. + + + Feedback icons + Rückmeldungssymbole + Iconos de respuesta + Icone informative + Иконки состояний + + + Select the position of or disable the feedback icons on your screen. These icons will show to provide extra feedback on your character status and actions performed. + Wähle die Position der Rückmeldungssymbole, oder deaktiviere sie. Diese Symbole stellen eine zusätzliche Rückmeldung über die Lage und Handlungen deines Soldaten dar. + Seleccionar la posición de o desactivar los íconos de respuesta en la pantalla. Estos iconos se mostrarán para proporcionar información adicional sobre el estado de su personaje y las acciones a realizar. + Seleziona la posizione o disabilita le icone informative sul tuo schermo. Queste saranno mostrate per fornire informazioni aggiuntive sullo stato o sulle azioni del giocatore. + Выберите положение или или отключите отображение иконок состояний на Вашем экране. Эти иконки предоставят дополнительную информацию о состоянии персонажа и выполняемых действиях. + + + Progress bar location + Position der Fortschrittsanzeige + Ubicación de la barra de progreso + Posizione della barra di avanzamento + Положение прогресс-бара + + + Set the desired location of the progress bar on your screen. + Setze die gewünschte Position der Fortschrittsanzeige fest + Seleccionar la ubicación deseada de la barra de progreso en tu pantalla + Modifica la posizione su schermo della barra di avanzamento. + Установите желаемое положение строки состояния на экране. + + + Hint Background color + Hintergrundfarbe der Hinweise + Color de fondo de las notificaciones + Sfondo dei Suggerimenti + Цвет фона всплывающих подсказок + + + The color of the background from the ACE hints. + Die Hintergrundfarbe der ACE-Hinweise. + El color de fondo de las notificaciones del ACE + Il colore di sfondo dei suggerimenti dell'ACE. + Цвет фона всплывающий подсказок АСЕ. + + + Hint text font color + Textfarbe der Hinweise + Color del texto de las notificaciones + Testo dei Suggerimenti + Цвет шрифта всплывающих подсказок + + + The color of the text font from the ACE hints. This color is the default color for all text displayed through the ACE Hint system, if the hint text has no other color specified. + Wähle die Textfarbe für ACE-Hinweise. + El color del texto de las notificaciones del ACE. Este es el color predeterminado para todo el texto que se muestra a través del sistema de notificaciones del ACE, si el texto de notificación no tiene otro color especificado. + Il colore del testo dei suggerimenti dell'ACE. Questo è il colore standard per tutti i caratteri mostrati dal sistema di suggerimenti dell'ACE, se questo non è altrimenti specificato. + Цвет шрифта текста всплывающих подсказок АСЕ. Этот цвет является стандартным для всего текста, транслирующегося через систему подсказок АСЕ, если не установлено другого цвета для текста подсказок. + + + Banana + Banane + Banana + Banana + Банан + + + A banana is an edible fruit, botanically a berry, produced by several kinds of large herbaceous flowering plants in the genus Musa. + Die Banane ist eine essbare Frucht, biologisch betrachtet jedoch eine Beere. Sie wächst an unterschiedlichen, krautartigen Gewächsen aus der Familie der Musa. + Una banana es una fruta comestible, botanicamente una baya, producida por varios tipos de grandes plantas herbáceas del género Musa. + Una banana è un frutto commestibile, nello specifico una bacca cuoiosa, prodotto da un gran numero di grandi pianti erbacee dotate di fiori, della famiglia delle Musaceae. + Банан - это съедобный фрукт, ягода с ботанической точки зрения, произрастающий на нескольких видах травянистых растениях рода Банан (Musa). + + + \ No newline at end of file From 78b64ea273c0c9216370bc722bd5258709b23358 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sun, 12 Apr 2015 01:36:41 -0500 Subject: [PATCH 147/214] Missing English --- addons/common/stringtable.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index c7b0ea070f..c66cc22992 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -3,6 +3,7 @@ + ACE-Team ACE-Team ACE-Team ACE-Team From 32400a21ac69cfd5d22c282a2035dc3139b62418 Mon Sep 17 00:00:00 2001 From: Asgar Date: Sun, 12 Apr 2015 10:49:22 +0200 Subject: [PATCH 148/214] update AUTHORS.txt --- AUTHORS.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.txt b/AUTHORS.txt index b931d774ac..ebe3fb5019 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -65,3 +65,4 @@ simon84 Tonic Tourorist Valentin Torikian +Asgar Serran \ No newline at end of file From dcf782abb4bc34a7f19dd484b3d7e32301ca967a Mon Sep 17 00:00:00 2001 From: bux578 Date: Sun, 12 Apr 2015 10:51:15 +0200 Subject: [PATCH 149/214] add rocks LOD issue --- documentation/development/arma-3-issues.md | 1 + 1 file changed, 1 insertion(+) diff --git a/documentation/development/arma-3-issues.md b/documentation/development/arma-3-issues.md index b6ef063cbc..46b68a0447 100644 --- a/documentation/development/arma-3-issues.md +++ b/documentation/development/arma-3-issues.md @@ -18,6 +18,7 @@ Keeping track of Arma 3 issues that need to be fixed. If you want to support us * [commy2: 0021443: Unexpected behavior of += array in configs](http://feedback.arma3.com/view.php?id=21443) * [commy2: 0022671: setVariable is not always JIP persistent](http://feedback.arma3.com/view.php?id=22671) * [CorruptedHeart: 0022318: Can no longer use "MenuBack" shortcut in AddAction](http://feedback.arma3.com/view.php?id=22318) +* [James2464: 0023725: All Environment Rocks Should Have PhysX LODs](http://feedback.arma3.com/view.php?id=23725) **Resolved:** From be8ff397676ab3b9cbe59657424e430b98ec1603 Mon Sep 17 00:00:00 2001 From: Kllrt Date: Sun, 12 Apr 2015 10:58:00 +0200 Subject: [PATCH 150/214] Fixed broken missileguidaince stringtable.xml sry --- addons/missileguidance/stringtable.xml | 132 +++++++++++++++++++------ 1 file changed, 102 insertions(+), 30 deletions(-) diff --git a/addons/missileguidance/stringtable.xml b/addons/missileguidance/stringtable.xml index db490e242c..d64e3e31ab 100644 --- a/addons/missileguidance/stringtable.xml +++ b/addons/missileguidance/stringtable.xml @@ -1,35 +1,107 @@  - + - - - Advanced Missile Guidance - Avanzada Misiles Orientación - Avancée Missile orientation - Asystent Missile - Erweiterte Missile Guidance - Pokročilé řízení střel - Avanzato Missile Guidance - Avançado Missile Guidance - Részletes rakéta irányító - Расширенный ракетой - - - Enables advanced guidance mechanics and selection for different missiles and fire modes. - - - - - Povoluje pokročilou mechaniku řízení střel. - - - - - - - /* Weapons */ - Hydra-70 DAGR MissileHydra-70 DAGRDAGRDAGRHydra-70 DAGR Laser Guided MissileHydra-70 DAGR Laserově naváděna střela + + + Advanced Missile Guidance + Avanzada Misiles Orientación + Avancée Missile orientation + Asystent Missile + Erweiterte Missile Guidance + Pokročilé řízení střel + Avanzato Missile Guidance + Avançado Missile Guidance + Részletes rakéta irányító + Расширенный ракетой + + + Enables advanced guidance mechanics and selection for different missiles and fire modes. + + + + + Povoluje pokročilou mechaniku řízení střel. + + + + + /* Weapons */ - Hellfire II AGM-114K MissileHellfire II AGM-114KAGM-114KAGM-114KHellfire II AGM-114K Laser Guided MissileHellfire II AGM-114K Laserově naváděná střela + + Hydra-70 DAGR Missile + + + + + Hydra-70 DAGR + + + + + + + DAGR + + + + + DAGR + + + + + + + Hydra-70 DAGR Laser Guided Missile + + + + + Hydra-70 DAGR laserem naváděná střela + + + + + + + /* Weapons */ + + Hellfire II AGM-114K Missile + + + + + Hellfire II AGM-114K + + + + + + + AGM-114K + + + + + AGM-114K + + + + + + + Hellfire II AGM-114K Laser Guided Missile + + + + + Hellfire II AGM-114K laserem naváděná střela + + + + + + + \ No newline at end of file From f16d5398f41c58cfa0d1d2b657124c2fe354d6e2 Mon Sep 17 00:00:00 2001 From: commy2 Date: Sun, 12 Apr 2015 12:03:49 +0200 Subject: [PATCH 151/214] enable vector on ffv positions, fix #506 --- addons/vector/initKeybinds.sqf | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/addons/vector/initKeybinds.sqf b/addons/vector/initKeybinds.sqf index 1e186f36ca..31fb3bbd1b 100644 --- a/addons/vector/initKeybinds.sqf +++ b/addons/vector/initKeybinds.sqf @@ -3,9 +3,9 @@ ["ACE3", QGVAR(AzimuthKey), localize "STR_ACE_Vector_AzimuthKey", { // Conditions: canInteract - if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; + if !([ACE_player, objNull, ["isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; // Conditions: specific - if !(currentWeapon ACE_player == "ACE_Vector" && {ACE_player == cameraOn} && {cameraView == "GUNNER"}) exitWith {false}; + if !(currentWeapon ACE_player == "ACE_Vector" && {cameraView == "GUNNER"}) exitWith {false}; // prevent holding down if (GETGVAR(isDownStateKey1,false)) exitWith {false}; @@ -20,7 +20,7 @@ GVAR(isDownStateKey1) = false; // Conditions: canInteract - if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; + if !([ACE_player, objNull, ["isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; // Statement ["azimuth"] call FUNC(onKeyUp); @@ -32,9 +32,9 @@ ["ACE3", QGVAR(DistanceKey), localize "STR_ACE_Vector_DistanceKey", { // Conditions: canInteract - if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; + if !([ACE_player, objNull, ["isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; // Conditions: specific - if !(currentWeapon ACE_player == "ACE_Vector" && {ACE_player == cameraOn} && {cameraView == "GUNNER"}) exitWith {false}; + if !(currentWeapon ACE_player == "ACE_Vector" && {cameraView == "GUNNER"}) exitWith {false}; // prevent holding down if (GETGVAR(isDownStateKey2,false)) exitWith {false}; @@ -49,7 +49,7 @@ GVAR(isDownStateKey2) = false; // Conditions: canInteract - if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; + if !([ACE_player, objNull, ["isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; // Statement ["distance"] call FUNC(onKeyUp); From 0f1115c33b165e9a39c01d1c904b8de0b9e567e1 Mon Sep 17 00:00:00 2001 From: nic547 <32dominic.ri@gmail.com> Date: Sun, 12 Apr 2015 13:08:50 +0200 Subject: [PATCH 152/214] Added new Ammotypes into the AGM crate --- addons/magazines/CfgVehicles.hpp | 14 ++++++++++++++ addons/magazines/newclasses.txt | 28 ++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/addons/magazines/CfgVehicles.hpp b/addons/magazines/CfgVehicles.hpp index a7c2654d71..66e63cfa09 100644 --- a/addons/magazines/CfgVehicles.hpp +++ b/addons/magazines/CfgVehicles.hpp @@ -153,6 +153,20 @@ class CfgVehicles { MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,2); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_SD,2); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_AP,2);*/ + MACRO_ADDMAGAZINE(ACE_10Rnd_338_Mag_Tracer,2); + MACRO_ADDMAGAZINE(ACE_10Rnd_338_Mag_Tracer_Dim,2); + MACRO_ADDMAGAZINE(ACE_10Rnd_338_Mag_AP,2); + MACRO_ADDMAGAZINE(ACE_10Rnd_338_Mag_SD,2); + MACRO_ADDMAGAZINE(ACE_130Rnd_338_Mag_Tracer,2); + MACRO_ADDMAGAZINE(ACE_130Rnd_338_Mag_Tracer_Dim,2); + MACRO_ADDMAGAZINE(ACE_130Rnd_338_Mag_AP,2); + MACRO_ADDMAGAZINE(ACE_10Rnd_93x64_DMR_05_Mag_Tracer,2); + MACRO_ADDMAGAZINE(ACE_10Rnd_93x64_DMR_05_Mag_Tracer_Dim,2); + MACRO_ADDMAGAZINE(ACE_10Rnd_93x64_DMR_05_Mag_AP,2); + MACRO_ADDMAGAZINE(ACE_10Rnd_93x64_DMR_05_Mag_SD,2); + MACRO_ADDMAGAZINE(ACE_150Rnd_93x64_Mag_Tracer,2); + MACRO_ADDMAGAZINE(ACE_150Rnd_93x64_Mag_Tracer_Dim,2); + MACRO_ADDMAGAZINE(ACE_150Rnd_93x64_Mag_AP,2); }; }; }; diff --git a/addons/magazines/newclasses.txt b/addons/magazines/newclasses.txt index 1a711e8c37..0c40a1b904 100644 --- a/addons/magazines/newclasses.txt +++ b/addons/magazines/newclasses.txt @@ -18,6 +18,16 @@ ACE_B_762x51_Ball_SD ACE_B_762x51_Ball_AP ACE_B_762x51_M118LR +ACE_B_338_Ball_Tracer_Dim +ACE_B_338_Ball_AP +ACE_B_338_Ball_SD + +ACE_B_338_NM_Ball_Tracer_Dim +ACE_B_338_NM_Ball_AP + +ACE_B_93x64_Ball_Tracer_Dim +ACE_B_93x64_Ball_AP +ACE_B_93x64_Ball_SD // CFGMagazines @@ -37,3 +47,21 @@ ACE_20Rnd_762x51_Mag_Tracer ACE_20Rnd_762x51_Mag_Tracer_Dim ACE_20Rnd_762x51_Mag_SD ACE_20Rnd_762x51_Mag_AP + +ACE_10Rnd_338_Mag_Tracer +ACE_10Rnd_338_Mag_Tracer_Dim +ACE_10Rnd_338_Mag_AP +ACE_10Rnd_338_Mag_SD + +ACE_130Rnd_338_Mag_Tracer +ACE_130Rnd_338_Mag_Tracer_Dim +ACE_130Rnd_338_Mag_AP + +ACE_10Rnd_93x64_DMR_05_Mag_Tracer +ACE_10Rnd_93x64_DMR_05_Mag_Tracer_Dim +ACE_10Rnd_93x64_DMR_05_Mag_AP +ACE_10Rnd_93x64_DMR_05_Mag_SD + +ACE_150Rnd_93x64_Mag_Tracer +ACE_150Rnd_93x64_Mag_Tracer_Dim +ACE_150Rnd_93x64_Mag_AP \ No newline at end of file From b6657813992aafacd4a1ac300bd6bf80499ea854 Mon Sep 17 00:00:00 2001 From: Legolasindar Date: Sun, 12 Apr 2015 13:58:06 +0200 Subject: [PATCH 153/214] Update stringtable.xml updated spanish translation and added some english missed translation --- addons/medical/stringtable.xml | 108 ++++++++++++++++----------------- 1 file changed, 53 insertions(+), 55 deletions(-) diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index bb31db88bb..c1d2e3cc2d 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -4,7 +4,7 @@ Inject Atropine Atropin injizieren - Inyectar atropina + Inyectar Atropina Ввести атропин @@ -52,7 +52,7 @@ Transfuse Saline Salzlösungtransfusion - Transfundir salina + Transfundir salino Влить физраствор @@ -172,12 +172,13 @@ Injecting Atropine ... Atropin injizieren ... + Inyectando Atropina ... Введение атропина ... Transfusing Blood ... Bluttransfusion ... - Realizando transfusión ... + Transfusión de sangre ... Przetaczanie krwi ... Probíhá transfúze krve ... Переливание крови... @@ -189,7 +190,7 @@ Transfusing Saline ... Sallösungtransfusion ... - Transfusión de salina ... + Transfusión de salino ... Вливание физраствора ... @@ -402,7 +403,7 @@ In Pain Unter Schmerzen Испытывает боль - Con Dolor + Con dolor A De La Douleur W bólu @@ -410,7 +411,7 @@ Lost a lot of Blood Hat eine große Menge Blut verloren Большая кровопотеря - Mucha Sangre perdida + Mucha sangre perdida A Perdu Bcp de Sang Stracił dużo krwi @@ -456,7 +457,7 @@ Packing Bandage Verband Тампонирующая повязка - Vendaje Compresivo + Vendaje compresivo Bandage Mèche Bandaż (uciskowy) @@ -464,7 +465,7 @@ Used to pack medium to large wounds and stem the bleeding Wird verwendet, um mittel bis große Wunden zu verbinden und die Blutung zu stoppen Для тампонирования ран среднего и большого размера и остановки кровотечения. - Se utiliza para vendar heridas medianas y grandes y detener el sangrado + Se utiliza para vendar heridas medianas o grandes y detener el sangrado Utiliser pour remplire la cavité créé dans une blessure moyenne et grande. Używany w celu opatrywania średnich i dużych ran oraz tamowania krwawienia. @@ -487,12 +488,12 @@ Bandage kit, Elastic Verbandssatz, Elastisch Давящая повязка - Vendaje (Elástico) + Kit de vendaje (Elástico) Bandage Compressif Élastique Zestaw bandaży elastycznych. - + Allows an even compression and extra support to the injured area. Ce bandage peut etre utiliser pour compresser la plaie afin de ralentire le seignement et assurer la tenue du bandage lors de mouvment. @@ -534,14 +535,14 @@ Used to combat moderate to severe pain experiences Wird verwendet um moderate bis starke Schmärzen zu lindern. Для снятия средних и сильных болевых ощущений. - Usado para combatir los estados dolorosos moderados a severos + Usado para combatir los estados dolorosos de moderados a severos Utiliser pour contrer les douleurs modéré à severes. Morfina. Ma silne działanie przeciwbólowe. An analgesic used to combat moderate to severe pain experiences. Анальгетик для снятия средних и сильных болевых ощущений. - Analgésico usado para combatir los estados dolorosos de moderado a severo. + Analgésico usado para combatir los estados dolorosos de moderados a severos. Un Analgésique puissant servant a contrer les douleur modéré a severe. Organiczny związek chemiczny z grupy alkaloidów. Ma silne działanie przeciwbólowe. @@ -562,7 +563,7 @@ A drug used by the Military in NBC scenarios. Препарат, используемый в войсках для защиты от оружия массового поражения. - Medicamento usado por Militares en escenarios NBQ + Medicamento usado por militares en escenarios NBQ Médicament utilisé par l'armée en cas d'attaque CBRN Atropina. Stosowana jako lek rozkurczowy i środek rozszerzający źrenice. Środek stosowany w przypadku zagrożeń NBC. @@ -581,10 +582,7 @@ Adrenalina. Zwiększa puls i przeciwdziała efektom wywołanym przez reakcje alergiczne - A drug that works on a sympathetic response to dilate the bronchi, increase heart rate and counter - such effects given by allergic reactions (anaphylaxis). Used in sudden cardiac arrest scenarios with - decreasing positive outcomes. - + A drug that works on a sympathetic response to dilate the bronchi, increase heart rate and counter such effects given by allergic reactions (anaphylaxis). Used in sudden cardiac arrest scenarios with decreasing positive outcomes. Препарат, вызывающий симпатическую реакцию, приводящую к расширению бронхов, увеличению частоты сердечных сокращений и купированию аллергических реакций (анафилактического шока). Применяется при остановке сердца с уменьшением вероятности благоприятного исхода. Medicamento que dilata los bronquios, aumenta la frecuencia cardiaca y contrarresta los efectos de las reacciones alérgicas (anafilaxis). Se utiliza en caso de paros cardiacos repentinos. Un medicament qui fonctione sur le systeme sympatique créan une dilatation des bronches, augmente la fréquance cardiaque et contre les effet d'une reaction alergique (anaphylaxie). Utiliser lors d'arret cardio-respiratoire pour augmenté les chances retrouver un ryhtme. @@ -593,7 +591,7 @@ Plasma IV (1000ml) Плазма для в/в вливания (1000 мл) - Plasma Intravenoso (1000ml) + Plasma IV (1000ml) Plasma Sanguin IV (1000ml) Osocze IV (1000ml) @@ -614,28 +612,28 @@ Plasma IV (500ml) Плазма для в/в вливания (500 мл) - Plasma Intravenoso (500ml) + Plasma IV (500ml) Plasma Sanguin IV (500ml) Osocze IV (500ml) Plasma IV (250ml) Плазма для в/в вливания (250 мл) - Plasma Intravenoso (250ml) + Plasma IV (250ml) Plasma Sanguin (250ml) Osocze IV (250ml) Blood IV (1000ml) Кровь для переливания (1000 мл) - Sangre Intravenosa (1000ml) + Sangre IV (1000ml) Cullot Sanguin IV (1000ml) Krew IV (1000ml) Blood IV, for restoring a patients blood (keep cold) Пакет крови для возмещения объема потерянной крови (хранить в холодильнике) - Sangre Intravenosa, para restarurar el volumen sanguíneo (mantener frío) + Sangre intravenosa, para restarurar el volumen sanguíneo (mantener frío) Cullot Sanguin IV, pour remplacer le volume sanguin (garder Réfrigeré) Krew IV, używana do uzupełnienia krwi u pacjenta, trzymać w warunkach chłodniczych @@ -644,33 +642,33 @@ Кровь I группы, резус-отрицательная, применяется по жизненным показаниям для возмещения объема потерянной крови на догоспитальном этапе оказания медицинской помощи. Cullot Sanguin O- ,utiliser seulement lors de perte sanguine majeur afin de remplacer le volume sanguin perdu. Habituelment utiliser lors du transport ou dans un etablisement de soin. Krew 0 Rh-, używana w rzadkich i szczególnych przypadkach do uzupełnienia krwi u pacjenta, zazwyczaj w trakcie fazie transportu rannej osoby do szpitala. - Utilice sólo durante gran pérdida de sangre para reemplazar el volumen de sangre perdido. Uso habitual durante el transporte de heridos. + Utilice sólo durante gran pérdida de sangre para reemplazar el volumen de sangre perdida. Uso habitual durante el transporte de heridos. Blood IV (500ml) Кровь для переливания (500 мл) - Sangre Intravenosa (500ml) + Sangre IV (500ml) Cullot Sanguin IV (500ml) Krew IV (500ml) Blood IV (250ml) Кровь для переливания (250 мл) - Sangre Intravenosa (250ml) + Sangre IV (250ml) Cullot Sanguin IV (250ml) Krew IV (250ml) Saline IV (1000ml) Физраствор для в/в вливания (1000 мл) - Solución Salina Intravenosa (1000ml) + Solución Salina IV (1000ml) solution Saline 0.9% IV (1000ml) Solanka 0,9% IV (1000ml) Saline IV, for restoring a patients blood Пакет физраствора для возмещения объема потерянной крови - Solución Salina Intravenosa, para restaurar el volumen sanguíneo + Solución salina intravenosa, para restaurar el volumen sanguíneo Solution Saline 0.9% IV, pour retablir temporairement la tention arteriel Solanka 0,9%, podawana dożylnie (IV), używana w celu uzupełnienia krwi u pacjenta @@ -684,42 +682,42 @@ Saline IV (500ml) Физраствор для в/в вливания (500 мл) - Solución Salina Intravenosa (500ml) + Salino IV (500ml) Solution Saline 0.9% IV (500ml) Solanka 0,9% IV (500ml) Saline IV (250ml) Физраствор для в/в вливания (250 мл) - Solución Salina Intravenosa (250ml) + Salino IV (250ml) Solution Saline 0.9% IV (250ml) Solanka 0,9% IV (250ml) Basic Field Dressing (QuikClot) Первичный перевязочный пакет (QuikClot) - Vendaje Básico (Coagulante) + Vendaje básico (QuickClot) Bandage Regulier (Coagulant) Opatrunek QuikClot QuikClot bandage Гемостатический пакет QuikClot - Venda Coagulante + Vendaje QuikClot Bandage coagulant Podstawowy opatrunek stosowany na rany - + Hemostatic bandage with coagulant that stops bleeding. Un bandage servant a coaguler les seignements mineur à moyen. Proszkowy opatrunek adsorbcyjny przeznaczony do tamowania zagrażających życiu krwawień średniej i dużej intensywności. - Vendaje Hemostático con coagulante que detiene el sangrado. + Vendaje hemostático con coagulante que detiene el sangrado. Personal Aid Kit Аптечка - Kit de Soporte Vital Avanzado + Botiquín de primeros auxilios Équipement de support Vitale Apteczka osobista @@ -739,17 +737,17 @@ Surgical Kit Хирургический набор - Kit Quirúrgico + Kit quirúrgico Surgical Kit for in field advanced medical treatment Набор для хирургической помощи в полевых условиях - Kit Quirúrgico para el tratamiento avanzado en el campo de batalla + Kit quirúrgico para el tratamiento avanzado en el campo de batalla Surgical Kit for in field advanced medical treatment Набор для хирургической помощи в полевых условиях - Kit Quirúrgico para el tratamiento avanzado en el campo de batalla + Kit quirúrgico para el tratamiento avanzado en el campo de batalla Bodybag @@ -759,22 +757,22 @@ A bodybag for dead bodies Мешок для упаковки трупов - Bolsa para cadáveres + Una bolsa para cadáveres A bodybag for dead bodies Мешок для упаковки трупов - Bolsa para cadáveres + Una bolsa para cadáveres Blood Pressure Артериальное давление - Presión Arterial + Presión arterial Checking Blood Pressure.. Проверка артериального давления... - Comprobando Presión Arterial... + Comprobando presión arterial... You checked %1 @@ -784,32 +782,32 @@ You find a blood pressure of %2/%3 Артериальное давление %2/%3 - La Presión Arterial es %2/%3 + La presión arterial es %2/%3 You find a low blood pressure Давление низкое - La Presión Arterial es baja + La presión arterial es baja You find a normal blood pressure Давление нормальное - La Presión Arterial es normal + La presión arterial es normal You find a high blood pressure Давление высокое - La Presión Arterial es alta + La presión arterial es alta You find no blood pressure Давления нет - No hay Presión Arterial + No hay presión arterial You fail to find a blood pressure Артериальное давление не определяется - No puedes encontrar Presión Arterial + No puedes encontrar presión arterial Pulse @@ -819,7 +817,7 @@ Checking Heart Rate.. Проверка пульса... - Comprobando Pulso... + Comprobando ritmo cardíaco... You checked %1 @@ -829,32 +827,32 @@ You find a Heart Rate of %2 Пульс %2 уд./мин. - El Pulso es %2 + El ritmo cardíaco es de %2 You find a weak Heart Rate Пульс слабый - El Pulso es débil + El ritmo cardíaco es débil You find a strong Heart Rate Пульс учащенный - El Pulso está acelerado + El ritmo cardíaco está acelerado You find a normal Heart Rate Пульс в норме - El Pulso es bueno + El ritmo cardíaco es bueno You find no Heart Rate Пульс не прощупывается - No tiene Pulso + No tiene ritmo cardíaco Response Реакция - Reacciona + Respuesta You check response of patient @@ -909,7 +907,7 @@ Airway Дыхательные пути - Vías Aéreas + Vías aéreas %1 is treating your airway From 215f3059f3a8e57b77d31b99fdaed17bcbe2eaa2 Mon Sep 17 00:00:00 2001 From: ruPaladin Date: Sun, 12 Apr 2015 15:33:24 +0300 Subject: [PATCH 154/214] Update AUTHORS.txt Russian translation --- AUTHORS.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.txt b/AUTHORS.txt index 7e8e919682..a0e55fa59f 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -69,3 +69,4 @@ Tourorist Valentin Torikian zGuba Aleksey EpMAK Yermakov +ruPaladin From d2fbd5c735be0b5d418a3bcea09b4d7d571d2729 Mon Sep 17 00:00:00 2001 From: KoffeinFlummi Date: Sun, 12 Apr 2015 14:42:49 +0200 Subject: [PATCH 155/214] Fix groups --- documentation/development/ace3-config-entries.md | 2 +- documentation/development/ace3-events-system.md | 2 +- documentation/development/arma-3-issues.md | 2 +- .../development/arma-3-scheduler-and-our-practices.md | 2 +- documentation/development/coding-guidelines.md | 2 +- documentation/development/extension-guidelines.md | 2 +- documentation/development/fragmentation-configuration.md | 2 +- documentation/development/how-to-translate-ace3.md | 2 +- documentation/development/merging-pull-requests.md | 4 ++-- documentation/development/modularity-and-pbo-structure.md | 2 +- .../development/setting-up-the-development-environment.md | 2 +- documentation/missionmaker/modules.md | 2 +- 12 files changed, 13 insertions(+), 13 deletions(-) diff --git a/documentation/development/ace3-config-entries.md b/documentation/development/ace3-config-entries.md index f56285052d..cc0104a8b1 100644 --- a/documentation/development/ace3-config-entries.md +++ b/documentation/development/ace3-config-entries.md @@ -1,7 +1,7 @@ --- layout: wiki title: ACE3 Config Entries -group: dev +group: development parent: wiki order: 2 --- diff --git a/documentation/development/ace3-events-system.md b/documentation/development/ace3-events-system.md index 6b708b01dd..d7c99e558e 100644 --- a/documentation/development/ace3-events-system.md +++ b/documentation/development/ace3-events-system.md @@ -1,7 +1,7 @@ --- layout: wiki title: ACE3 Events System -group: dev +group: development parent: wiki order: 3 --- diff --git a/documentation/development/arma-3-issues.md b/documentation/development/arma-3-issues.md index 46b68a0447..8b7e0b3e2d 100644 --- a/documentation/development/arma-3-issues.md +++ b/documentation/development/arma-3-issues.md @@ -1,7 +1,7 @@ --- layout: wiki title: Arma 3 Issues -group: dev +group: development parent: wiki order: 6 --- diff --git a/documentation/development/arma-3-scheduler-and-our-practices.md b/documentation/development/arma-3-scheduler-and-our-practices.md index 90646b3b4a..bef0224819 100644 --- a/documentation/development/arma-3-scheduler-and-our-practices.md +++ b/documentation/development/arma-3-scheduler-and-our-practices.md @@ -1,7 +1,7 @@ --- layout: wiki title: Arma 3 Scheduler And Our Practices -group: dev +group: development parent: wiki order: 8 --- diff --git a/documentation/development/coding-guidelines.md b/documentation/development/coding-guidelines.md index c3517dec1d..f72263eeaa 100644 --- a/documentation/development/coding-guidelines.md +++ b/documentation/development/coding-guidelines.md @@ -1,7 +1,7 @@ --- layout: wiki title: Coding Guidelines -group: dev +group: development parent: wiki order: 1 --- diff --git a/documentation/development/extension-guidelines.md b/documentation/development/extension-guidelines.md index b56349e82b..0558d49d5e 100644 --- a/documentation/development/extension-guidelines.md +++ b/documentation/development/extension-guidelines.md @@ -1,7 +1,7 @@ --- layout: wiki title: Extension Guidelines -group: dev +group: development parent: wiki order: 9 --- diff --git a/documentation/development/fragmentation-configuration.md b/documentation/development/fragmentation-configuration.md index ab0baa0612..17ff36fa13 100644 --- a/documentation/development/fragmentation-configuration.md +++ b/documentation/development/fragmentation-configuration.md @@ -1,7 +1,7 @@ --- layout: wiki title: Fragmentation Configuration -group: dev +group: development parent: wiki order: 7 --- diff --git a/documentation/development/how-to-translate-ace3.md b/documentation/development/how-to-translate-ace3.md index a6f81c3b30..b7e23fa575 100644 --- a/documentation/development/how-to-translate-ace3.md +++ b/documentation/development/how-to-translate-ace3.md @@ -1,7 +1,7 @@ --- layout: wiki title: How to translate ACE3 -group: dev +group: development parent: wiki order: 20 --- diff --git a/documentation/development/merging-pull-requests.md b/documentation/development/merging-pull-requests.md index 2e754efe93..6bc34464f0 100644 --- a/documentation/development/merging-pull-requests.md +++ b/documentation/development/merging-pull-requests.md @@ -1,7 +1,7 @@ --- layout: wiki title: Merging Pull Requests -group: dev +group: development parent: wiki order: 5 --- @@ -33,4 +33,4 @@ Non-trivial pull requests remain open for a minimum of 48 hours, to give all oth If a pull request adds a new addon, or changes something else, like the README, everyone has 72 hours to comment on the changes. After that, one of the team leads ([NouberNou](https://github.com/NouberNou), [KoffeinFlummi](https://github.com/KoffeinFlummi), [Glowbal](https://github.com/Glowbal)) will merge it. -Trivial changes such as spelling fixes can be merged immediately by any contributor. \ No newline at end of file +Trivial changes such as spelling fixes can be merged immediately by any contributor. diff --git a/documentation/development/modularity-and-pbo-structure.md b/documentation/development/modularity-and-pbo-structure.md index b992455db7..ad1194e39c 100644 --- a/documentation/development/modularity-and-pbo-structure.md +++ b/documentation/development/modularity-and-pbo-structure.md @@ -1,7 +1,7 @@ --- layout: wiki title: Modularity And PBO Structure -group: dev +group: development parent: wiki order: 4 --- diff --git a/documentation/development/setting-up-the-development-environment.md b/documentation/development/setting-up-the-development-environment.md index 3d0f0b1937..0fbc0793f2 100644 --- a/documentation/development/setting-up-the-development-environment.md +++ b/documentation/development/setting-up-the-development-environment.md @@ -1,7 +1,7 @@ --- layout: wiki title: Setting Up The Development Environment -group: dev +group: development parent: wiki order: 0 --- diff --git a/documentation/missionmaker/modules.md b/documentation/missionmaker/modules.md index 1ea5b6c4eb..0b0f13f8d6 100644 --- a/documentation/missionmaker/modules.md +++ b/documentation/missionmaker/modules.md @@ -1,7 +1,7 @@ --- layout: wiki title: Modules -group: missionMaker +group: missionmaker order: 5 parent: wiki --- From 9184ef479abc507c5393c50a8dba3a08c247935c Mon Sep 17 00:00:00 2001 From: bux578 Date: Sun, 12 Apr 2015 14:47:08 +0200 Subject: [PATCH 156/214] add disarm icon, add action psd, move icon files --- addons/disarming/CfgVehicles.hpp | 2 +- addons/disarming/UI/disarm.paa | Bin 0 -> 5625 bytes extras/assets/icons/Icons_Actions.psd | Bin 0 -> 38637 bytes extras/assets/icons/png/Icon_Actions/disarm.png | Bin 0 -> 1849 bytes .../Icon_Module_Ambient_Sounds_ca.png | Bin .../Icon_Module_BFTracking_ca.png | Bin .../Icon_Module_CheckPBO_ca.png | Bin .../Icon_Module_Explosives_ca.png | Bin .../Icon_Module_FriendlyFire_ca.png | Bin .../Icon_Module_Hearing_ca.png | Bin .../Icon_Module_Interaction_ca.png | Bin .../{ => Icon_Module}/Icon_Module_LSD_ca.png | Bin .../Icon_Module_Make_Unit_Surrender_ca.png | Bin .../{ => Icon_Module}/Icon_Module_Map_ca.png | Bin .../Icon_Module_Medical_ca.png | Bin .../Icon_Module_NameTags_ca.png | Bin .../Icon_Module_Rallypoint_ca.png | Bin .../Icon_Module_Respawn_ca.png | Bin .../Icon_Module_SwitchUnits_ca.png | Bin .../Icon_Module_VehicleKey_ca.png | Bin .../Icon_Module_VehicleLock_ca.png | Bin .../{ => Icon_Module}/Icon_Module_Wind_ca.png | Bin .../Icon_Module_microDAGR_ca.png | Bin 23 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 addons/disarming/UI/disarm.paa create mode 100644 extras/assets/icons/Icons_Actions.psd create mode 100644 extras/assets/icons/png/Icon_Actions/disarm.png rename extras/assets/icons/png/{ => Icon_Module}/Icon_Module_Ambient_Sounds_ca.png (100%) rename extras/assets/icons/png/{ => Icon_Module}/Icon_Module_BFTracking_ca.png (100%) rename extras/assets/icons/png/{ => Icon_Module}/Icon_Module_CheckPBO_ca.png (100%) rename extras/assets/icons/png/{ => Icon_Module}/Icon_Module_Explosives_ca.png (100%) rename extras/assets/icons/png/{ => Icon_Module}/Icon_Module_FriendlyFire_ca.png (100%) rename extras/assets/icons/png/{ => Icon_Module}/Icon_Module_Hearing_ca.png (100%) rename extras/assets/icons/png/{ => Icon_Module}/Icon_Module_Interaction_ca.png (100%) rename extras/assets/icons/png/{ => Icon_Module}/Icon_Module_LSD_ca.png (100%) rename extras/assets/icons/png/{ => Icon_Module}/Icon_Module_Make_Unit_Surrender_ca.png (100%) rename extras/assets/icons/png/{ => Icon_Module}/Icon_Module_Map_ca.png (100%) rename extras/assets/icons/png/{ => Icon_Module}/Icon_Module_Medical_ca.png (100%) rename extras/assets/icons/png/{ => Icon_Module}/Icon_Module_NameTags_ca.png (100%) rename extras/assets/icons/png/{ => Icon_Module}/Icon_Module_Rallypoint_ca.png (100%) rename extras/assets/icons/png/{ => Icon_Module}/Icon_Module_Respawn_ca.png (100%) rename extras/assets/icons/png/{ => Icon_Module}/Icon_Module_SwitchUnits_ca.png (100%) rename extras/assets/icons/png/{ => Icon_Module}/Icon_Module_VehicleKey_ca.png (100%) rename extras/assets/icons/png/{ => Icon_Module}/Icon_Module_VehicleLock_ca.png (100%) rename extras/assets/icons/png/{ => Icon_Module}/Icon_Module_Wind_ca.png (100%) rename extras/assets/icons/png/{ => Icon_Module}/Icon_Module_microDAGR_ca.png (100%) diff --git a/addons/disarming/CfgVehicles.hpp b/addons/disarming/CfgVehicles.hpp index 5a85dc1287..381aaed93e 100644 --- a/addons/disarming/CfgVehicles.hpp +++ b/addons/disarming/CfgVehicles.hpp @@ -8,7 +8,7 @@ class CfgVehicles { distance = 3.5; condition = QUOTE([ARR_2(_player,_target)] call FUNC(canPlayerDisarmUnit)); statement = QUOTE([ARR_2(_player,_target)] call FUNC(openDisarmDialog)); - icon = "\a3\Modules_F_Curator\Data\portraitRespawnInventory_ca.paa"; + icon = PATHTOF(UI\disarm.paa); exceptions[] = {}; }; }; diff --git a/addons/disarming/UI/disarm.paa b/addons/disarming/UI/disarm.paa new file mode 100644 index 0000000000000000000000000000000000000000..d13f38daee48a1a406ce40079c6b6be7d949cf8f GIT binary patch literal 5625 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 literal 0 HcmV?d00001 diff --git a/extras/assets/icons/png/Icon_Module_Ambient_Sounds_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_Ambient_Sounds_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_Ambient_Sounds_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_Ambient_Sounds_ca.png diff --git a/extras/assets/icons/png/Icon_Module_BFTracking_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_BFTracking_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_BFTracking_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_BFTracking_ca.png diff --git a/extras/assets/icons/png/Icon_Module_CheckPBO_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_CheckPBO_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_CheckPBO_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_CheckPBO_ca.png diff --git a/extras/assets/icons/png/Icon_Module_Explosives_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_Explosives_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_Explosives_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_Explosives_ca.png diff --git a/extras/assets/icons/png/Icon_Module_FriendlyFire_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_FriendlyFire_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_FriendlyFire_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_FriendlyFire_ca.png diff --git a/extras/assets/icons/png/Icon_Module_Hearing_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_Hearing_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_Hearing_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_Hearing_ca.png diff --git a/extras/assets/icons/png/Icon_Module_Interaction_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_Interaction_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_Interaction_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_Interaction_ca.png diff --git a/extras/assets/icons/png/Icon_Module_LSD_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_LSD_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_LSD_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_LSD_ca.png diff --git a/extras/assets/icons/png/Icon_Module_Make_Unit_Surrender_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_Make_Unit_Surrender_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_Make_Unit_Surrender_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_Make_Unit_Surrender_ca.png diff --git a/extras/assets/icons/png/Icon_Module_Map_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_Map_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_Map_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_Map_ca.png diff --git a/extras/assets/icons/png/Icon_Module_Medical_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_Medical_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_Medical_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_Medical_ca.png diff --git a/extras/assets/icons/png/Icon_Module_NameTags_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_NameTags_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_NameTags_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_NameTags_ca.png diff --git a/extras/assets/icons/png/Icon_Module_Rallypoint_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_Rallypoint_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_Rallypoint_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_Rallypoint_ca.png diff --git a/extras/assets/icons/png/Icon_Module_Respawn_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_Respawn_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_Respawn_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_Respawn_ca.png diff --git a/extras/assets/icons/png/Icon_Module_SwitchUnits_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_SwitchUnits_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_SwitchUnits_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_SwitchUnits_ca.png diff --git a/extras/assets/icons/png/Icon_Module_VehicleKey_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_VehicleKey_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_VehicleKey_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_VehicleKey_ca.png diff --git a/extras/assets/icons/png/Icon_Module_VehicleLock_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_VehicleLock_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_VehicleLock_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_VehicleLock_ca.png diff --git a/extras/assets/icons/png/Icon_Module_Wind_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_Wind_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_Wind_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_Wind_ca.png diff --git a/extras/assets/icons/png/Icon_Module_microDAGR_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_microDAGR_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_microDAGR_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_microDAGR_ca.png From 91df52056bdd413d3189684862256fd3c4d5c5f2 Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Sun, 12 Apr 2015 11:13:54 -0300 Subject: [PATCH 157/214] Only display "Surrender" action if the player is not holding a weapon. --- addons/captives/functions/fnc_canSurrender.sqf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/captives/functions/fnc_canSurrender.sqf b/addons/captives/functions/fnc_canSurrender.sqf index 3ee687cfc1..3b810a0c5c 100644 --- a/addons/captives/functions/fnc_canSurrender.sqf +++ b/addons/captives/functions/fnc_canSurrender.sqf @@ -18,6 +18,8 @@ PARAMS_2(_unit,_newSurrenderState); +if (currentWeapon _unit != "") exitWith {false}; + private "_returnValue"; _returnValue = if (_newSurrenderState) then { From 3842272c43b6b9d73f904802a0add0b3972febf8 Mon Sep 17 00:00:00 2001 From: Anthariel Date: Sun, 12 Apr 2015 17:55:53 +0200 Subject: [PATCH 158/214] Update stringtable.xml Fixing French & English translation error that I've made on the line : 780 and 781 (thanks KoffeinFlummi) --- addons/medical/stringtable.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index d92166cd52..148c7748f6 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -777,8 +777,8 @@ El Pulso es %2 - You find a faible fréquence cardiaque - Vous avez trouvé une fréquence cardiaque de %2 + You find a fweak Heart Rate + Vous avez trouvé une faible fréquence cardiaque Пульс слабый El Pulso es débil From 3f84ac481710410ae7985daaf90ed062a9e26405 Mon Sep 17 00:00:00 2001 From: Anthariel Date: Sun, 12 Apr 2015 17:59:53 +0200 Subject: [PATCH 159/214] Update stringtable.xml --- addons/medical/stringtable.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 148c7748f6..0c4ea4c5bb 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -777,7 +777,7 @@ El Pulso es %2 - You find a fweak Heart Rate + You find a weak Heart Rate Vous avez trouvé une faible fréquence cardiaque Пульс слабый El Pulso es débil From 3ee421a2335af9fbb5527ce079f1c35ebd329a61 Mon Sep 17 00:00:00 2001 From: Anthariel Date: Sun, 12 Apr 2015 18:08:06 +0200 Subject: [PATCH 160/214] Update stringtable.xml Wrong french translation for the line 173. --- addons/attach/stringtable.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/attach/stringtable.xml b/addons/attach/stringtable.xml index 34e8883537..0c170aea37 100644 --- a/addons/attach/stringtable.xml +++ b/addons/attach/stringtable.xml @@ -170,7 +170,7 @@ Attach Failed - Échec du Attacher + Échec de l'attachement Befestigen Fehlgeschlagen Присоединить Ошибка Error al acoplar From 3db8f4ad44079179fd93a30b36134e7153004354 Mon Sep 17 00:00:00 2001 From: Anthariel Date: Sun, 12 Apr 2015 18:10:41 +0200 Subject: [PATCH 161/214] Update stringtable.xml Added: Some missing french translation. --- addons/captives/stringtable.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/addons/captives/stringtable.xml b/addons/captives/stringtable.xml index 0c81a0bf1d..a30a287235 100644 --- a/addons/captives/stringtable.xml +++ b/addons/captives/stringtable.xml @@ -132,26 +132,31 @@ Surrender + Se rendre Kapitulieren Rendirse Stop Surrendering + Arrêt de se rendre Den Kampf erneut aufnehmen Dejar de rendirse Only use on alive units + Utilisation uniquement sur les unités en vie Nur bei lebenden Einheiten verwendbar Utilizar solo en unidades vivas Only use on dismounted inf + Utilisation uniquement sur les infanteries Nur bei abgesessener Infanterie verwendbar Utilizar solo en infanteria desmontada Nothing under mouse + Rien sous la souris Es wurde nichts ausgewählt Nada bajo el ratón From 8d79fd242ab3654e63aa97457afe6604b42a80e3 Mon Sep 17 00:00:00 2001 From: Anthariel Date: Sun, 12 Apr 2015 18:18:52 +0200 Subject: [PATCH 162/214] Update stringtable.xml Added: Some missing french translations. (I took 10 minutes to translate the banana description (-:) --- addons/common/stringtable.xml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index bcd2b149aa..07cc1e3b71 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -317,33 +317,43 @@ Feedback icons + Icônes de Feedback Select the position of or disable the feedback icons on your screen. These icons will show to provide extra feedback on your character status and actions performed. + Sélectionner la position de ou désactiver les îcones de feedback sur votre écran. Ces îcones sont là pour vous fournir un feedback du statut votre personnage et les actions à effectuer. Progress bar location + Localisation de la barre de progression Set the desired location of the progress bar on your screen. + Définisez l'endroit que vous désirer pour faire appraître la barre de progression. Hint Background color + Couleur de fond des astuces The color of the background from the ACE hints. + Définisez la couleur de fond pour les astuces fournies par ACE. Hint text font color + Couleur du texte des astuces The color of the text font from the ACE hints. This color is the default color for all text displayed through the ACE Hint system, if the hint text has no other color specified. + Définisez la couleur du texte des astuces fournies par ACE. La couleur est celle par défaut affichée à travers toutes les astuces de ACE seulement si aucune couleur n'est défnie. Banana + Banane A banana is an edible fruit, botanically a berry, produced by several kinds of large herbaceous flowering plants in the genus Musa. + Une banane est un fruit comestible, botaniquement une baie, produite par plusieurs types de grandes plantes herbacées à fleurs dans le genre Musa. - \ No newline at end of file + From 45f3300967891d89837a2273a97e72476c7c8135 Mon Sep 17 00:00:00 2001 From: Anthariel Date: Sun, 12 Apr 2015 18:20:32 +0200 Subject: [PATCH 163/214] Update stringtable.xml Added: Missing french translation. --- addons/explosives/stringtable.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml index 57ef190460..6ee545361e 100644 --- a/addons/explosives/stringtable.xml +++ b/addons/explosives/stringtable.xml @@ -492,6 +492,7 @@ Pick up + Prendre From 4a23b8be0024fd9ba3427c98a23f14f4e98a9317 Mon Sep 17 00:00:00 2001 From: Nou Date: Sun, 12 Apr 2015 10:52:50 -0700 Subject: [PATCH 164/214] Allow string function names. --- addons/laser/functions/fnc_laserOn.sqf | 2 +- .../functions/fnc_seekerFindLaserSpot.sqf | 20 +++++++++++-------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/addons/laser/functions/fnc_laserOn.sqf b/addons/laser/functions/fnc_laserOn.sqf index 3091acc3f6..38daeea382 100644 --- a/addons/laser/functions/fnc_laserOn.sqf +++ b/addons/laser/functions/fnc_laserOn.sqf @@ -5,7 +5,7 @@ * Arguments: * 0: Emitter * 1: Owner - * 2: Method, can be code, which emitter and owner are passed to, an array with a position memory point and weapon name, or an array with a position memory point, a vector begining memory point, and vector ending memory point. + * 2: Method, can be code, which emitter and owner are passed to, a string function name, an array with a position memory point and weapon name, or an array with a position memory point, a vector begining memory point, and vector ending memory point. * 3: Wavelength (1550nm is common eye safe) * 4: Laser code * 5: Beam divergence (in mils off beam center). diff --git a/addons/laser/functions/fnc_seekerFindLaserSpot.sqf b/addons/laser/functions/fnc_seekerFindLaserSpot.sqf index 141e0236d0..421748a681 100644 --- a/addons/laser/functions/fnc_seekerFindLaserSpot.sqf +++ b/addons/laser/functions/fnc_seekerFindLaserSpot.sqf @@ -39,15 +39,19 @@ _finalOwner = nil; _laser = []; if(IS_CODE(_method)) then { _laser = _x call _method; - } else { - if(IS_ARRAY(_method)) then { - if(count _method == 2) then { - _laser = [ATLtoASL (_obj modelToWorldVisual (_method select 0)), _obj weaponDirection (_method select 1)]; - } else { - if(count _method == 3) then { - _laser = [ATLtoASL (_obj modelToWorldVisual (_method select 0)), (ATLtoASL (_obj modelToWorldVisual (_method select 1))) vectorFromTo (ATLtoASL (_obj modelToWorldVisual (_method select 2)))]; + } else { + if(IS_STRING(_method)) then { + _laser = _x call (missionNamespace getVariable [_method, {}]); + } else { + if(IS_ARRAY(_method)) then { + if(count _method == 2) then { + _laser = [ATLtoASL (_obj modelToWorldVisual (_method select 0)), _obj weaponDirection (_method select 1)]; + } else { + if(count _method == 3) then { + _laser = [ATLtoASL (_obj modelToWorldVisual (_method select 0)), (ATLtoASL (_obj modelToWorldVisual (_method select 1))) vectorFromTo (ATLtoASL (_obj modelToWorldVisual (_method select 2)))]; + }; }; - }; + }; }; }; _laserPos = _laser select 0; From 01797fd3b92c36833ed12fba2690aec8380b573d Mon Sep 17 00:00:00 2001 From: jaynus Date: Sun, 12 Apr 2015 11:01:22 -0700 Subject: [PATCH 165/214] Integarate laser code into SALH guidance + self_designate. Note todo items. --- addons/laser/XEH_pre_init.sqf | 1 + .../functions/fnc_drawVisibleLaserTargets.sqf | 1 + addons/laser/functions/fnc_laserOn.sqf | 2 +- addons/laser/functions/fnc_laser_init.sqf | 8 +- addons/laser_selfdesignate/XEH_pre_init.sqf | 3 +- .../functions/fnc_findLaserSource.sqf | 19 +++ .../functions/fnc_laserHudDesignateOff.sqf | 24 +--- .../functions/fnc_laserHudDesignateOn.sqf | 122 +++++++----------- .../functions/fnc_seekerType_SALH.sqf | 13 +- 9 files changed, 89 insertions(+), 104 deletions(-) create mode 100644 addons/laser/functions/fnc_drawVisibleLaserTargets.sqf create mode 100644 addons/laser_selfdesignate/functions/fnc_findLaserSource.sqf diff --git a/addons/laser/XEH_pre_init.sqf b/addons/laser/XEH_pre_init.sqf index 5798e3c9a7..3fde1769e0 100644 --- a/addons/laser/XEH_pre_init.sqf +++ b/addons/laser/XEH_pre_init.sqf @@ -18,6 +18,7 @@ PREP(laserOff); PREP(handleLaserOn); PREP(handleLaserOff); +PREP(drawVisibleLaserTargets); PREP(laser_init); diff --git a/addons/laser/functions/fnc_drawVisibleLaserTargets.sqf b/addons/laser/functions/fnc_drawVisibleLaserTargets.sqf new file mode 100644 index 0000000000..161364c0f2 --- /dev/null +++ b/addons/laser/functions/fnc_drawVisibleLaserTargets.sqf @@ -0,0 +1 @@ +// @TODO: This is to draw the actual LaserTarget positions to utilize for laser shooting. \ No newline at end of file diff --git a/addons/laser/functions/fnc_laserOn.sqf b/addons/laser/functions/fnc_laserOn.sqf index 3091acc3f6..eb3cfd31f5 100644 --- a/addons/laser/functions/fnc_laserOn.sqf +++ b/addons/laser/functions/fnc_laserOn.sqf @@ -13,7 +13,7 @@ * Return value: * String, UUID for sending to laserOff function. */ - + #include "script_component.hpp" private ["_uuid", "_args"]; diff --git a/addons/laser/functions/fnc_laser_init.sqf b/addons/laser/functions/fnc_laser_init.sqf index 2790459724..1be770e4c8 100644 --- a/addons/laser/functions/fnc_laser_init.sqf +++ b/addons/laser/functions/fnc_laser_init.sqf @@ -5,21 +5,23 @@ TRACE_1("enter", _this); // Add the target to the global targets array // Everyone tracks them - // Add the laser localized to the laser array, and give it the default localized code PUSH(ACE_LASERS, _laserTarget); + // Check the vehicle, otherwise use the default _laserTarget setVariable ["ACE_LASER_CODE", ACE_DEFAULT_LASER_CODE, false]; + // Clean the lasers of any null objects while we are here REM(ACE_LASERS, objNull); if(!(local _laserTarget)) exitWith { }; + // The target is local, so its on this client if(!isDedicated) then { - _laserTarget setVariable ["ACE_LASERTARGET_SHOOTER", ACE_player, true]; + _laserTarget setVariable [QGVAR(owner), ACE_player, true]; [FUNC(laserTargetPFH), 0, [_laserTarget, ACE_player]] call cba_fnc_addPerFrameHandler; } else { // server side ownership of laser - //_laserTarget setVariable ["ACE_LASERTARGET_SHOOTER", nil, false]; + _laserTarget setVariable [QGVAR(owner), nil, true]; }; diff --git a/addons/laser_selfdesignate/XEH_pre_init.sqf b/addons/laser_selfdesignate/XEH_pre_init.sqf index dd971b9539..3f8c92e4db 100644 --- a/addons/laser_selfdesignate/XEH_pre_init.sqf +++ b/addons/laser_selfdesignate/XEH_pre_init.sqf @@ -5,7 +5,8 @@ PREP(laserHudDesignateOn); PREP(laserHudDesignateOff); PREP(unitTurretHasDesignator); -GVAR(laser) = nil; +PREP(findLaserSource); + GVAR(active) = false; FUNC(getPosASL) = {visiblePositionASL (_this select 0)}; diff --git a/addons/laser_selfdesignate/functions/fnc_findLaserSource.sqf b/addons/laser_selfdesignate/functions/fnc_findLaserSource.sqf new file mode 100644 index 0000000000..a432b838d8 --- /dev/null +++ b/addons/laser_selfdesignate/functions/fnc_findLaserSource.sqf @@ -0,0 +1,19 @@ +//findLaserSource.sqf +//#define DEBUG_MODE_FULL +#include "script_component.hpp" + +private["_emitter", "_owner", "_gunnerInfo", "_turretInfo", "_povPos", "_povDir"]; + +_emmiter = _this select 0; +_owner = _this select 1; + +_gunnerInfo = [_emmiter, (currentWeapon _emmiter)] call CBA_fnc_getFirer; +_turretInfo = [_emmiter, _gunnerInfo select 1] call EFUNC(common,getTurretDirection); +_povPos = _turretInfo select 0; +_povDir = _turretInfo select 1; + +if(!isNil "_povPos" && !isNil "_povDir") exitWith { + [_povPos, _povDir] +}; + +[-1,-1] \ No newline at end of file diff --git a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOff.sqf b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOff.sqf index 02ea7e6e70..fc50e571c7 100644 --- a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOff.sqf +++ b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOff.sqf @@ -1,28 +1,12 @@ #include "script_component.hpp" if( (count _this) > 2) then { - EXPLODE_3_PVT(_this,_vehicle,_shooter,_laserTarget); - // We got the optional vehicle list, clear the parameters - _vehicle setVariable[QGVAR(currentTarget), [], true]; + EXPLODE_3_PVT(_this,_shooter,_laserUuid, _localLaserTarget); + + [_laserUuid] call EFUNC(laser,laserOff); + deleteVehicle _localLaserTarget; }; -if(isNil QGVAR(laser)) exitWith { - false -}; -if(!local GVAR(laser)) then { - false -}; - -_handle = GVAR(laser) getVariable ["ACE_PFH_HANDLE", nil]; -if(!isNil "_handle") then { - [_handle] call cba_fnc_removePerFrameHandler; -}; - -REM(ACE_LASERS, GVAR(laser)); -deleteVehicle GVAR(laser); -GVAR(laser) = nil; GVAR(active) = false; - - true \ No newline at end of file diff --git a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf index a6c8fc2295..e7518041ed 100644 --- a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf +++ b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf @@ -6,102 +6,72 @@ TRACE_1("enter", _this); #define FCS_UPDATE_DELAY 1 FUNC(laserHudDesignatePFH) = { - private["_strongestResultPos", "_args", "_laserTarget", "_shooter", "_vehicle", "_weapon", "_gunnerInfo", "_turret", "_pov", "_gunBeg", "_gunEnd", "_povPos", "_povDir", "_result", "_resultPositions", "_firstResult", "_forceUpdateTime"]; + private["_strongestResultPos", "_args", "_localLaserTarget", "_laserResultPosition", "_laserResult", "_shooter", "_vehicle", "_weapon", "_gunnerInfo", "_turretInfo", "_pov", "_gunBeg", "_gunEnd", "_povPos", "_povDir", "_result", "_resultPositions", "_firstResult", "_forceUpdateTime"]; _args = _this select 0; - _laserTarget = _args select 0; - _shooter = _args select 1; - - TRACE_1("", _args, (_laserTarget getVariable["ACE_LASER_CODE"])); - if((vehicle ACE_player) != _shooter || !alive _shooter || isNull _vehicle || isNull _laserTarget || !GVAR(active) ) exitWith { - [_vehicle, _shooter, _laserTarget] call FUNC(laserHudDesignateOff); + _shooter = _args select 0; + _localLaserTarget = _args select 2; + _vehicle = vehicle _shooter; + TRACE_1("", _args); + + if((vehicle _shooter) == _shooter || !alive _shooter || isNull _vehicle || !GVAR(active) ) exitWith { + _args call FUNC(laserHudDesignateOff); }; if(!([_shooter] call FUNC(unitTurretHasDesignator)) ) exitWith { - [_vehicle, _shooter, _laserTarget] call FUNC(laserHudDesignateOff); + _args call FUNC(laserHudDesignateOff); }; - if( (count _args) < 3) then { - _args set[2, diag_tickTime + FCS_UPDATE_DELAY]; + if( (count _args) < 4) then { + _args set[3, diag_tickTime + FCS_UPDATE_DELAY]; }; - _forceUpdateTime = _args select 2; - - _vehicle = vehicle _shooter; - _weapon = currentWeapon _vehicle; - - // Retrieve the gunner and turret memory point information - _gunnerInfo = [_vehicle, _weapon] call CBA_fnc_getFirer; + _forceUpdateTime = _args select 3; + + _gunnerInfo = [_vehicle, (currentWeapon _vehicle)] call CBA_fnc_getFirer; _turretInfo = [_vehicle, _gunnerInfo select 1] call EFUNC(common,getTurretDirection); _povPos = _turretInfo select 0; - _povDir = _turretInfo select 1; - _targetInfo = _vehicle getVariable[QGVAR(currentTarget), [] ]; - if( (count _targetInfo) > 0) then { - if(_laserTarget != (_targetInfo select 0) ) then { - _targetInfo = [] - }; - }; - if( (count _targetInfo) < 1) then { - _targetInfo = [_laserTarget, 1001]; // TODO: set laser code - _vehicle setVariable[QGVAR(currentTarget), _targetInfo, true]; - _laserTarget setVariable[QGVAR(owner), _vehicle, true]; - }; - - - _result = [_povPos, _povDir] call EFUNC(laser,shootCone); - if((count _result) > 0) then { - _resultPositions = _result select 2; + _laserResult = [_povPos, [1550,1550], 1001] call EFUNC(laser,seekerFindLaserSpot); + _laserResultPosition = _laserResult select 0; + TRACE_1("Search", _laserResult); - if((count _resultPositions) > 0) then { - _strongestResultPos = [_resultPositions, _povPos] call EFUNC(laser,findStrongestRay); - - // If the laser has moved less than a half meter, then dont move it. - // Just regular use of lasers will commonly make them move this much, - // but not across multiple close frames. - // This loses accuracy a little, but saves position updates per frame. - TRACE_5("", diag_tickTime, _forceUpdateTime, getPosASL _laserTarget, _strongestResultPos, ((getPosASL _laserTarget) distance _pos)); - - if(diag_tickTime > _forceUpdateTime) then { - TRACE_1("FCS Update", ""); - ["ace_fcs_forceUpdate", []] call ace_common_fnc_localEvent; - }; - - //if( (_laserTarget distance _strongestResultPos) > 0.1) then { - TRACE_1("LaserPos Update", ""); - _laserTarget setPosATL (ASLToATL _strongestResultPos); - //}; - - if(diag_tickTime > _forceUpdateTime) then { - _args set[2, diag_tickTime + FCS_UPDATE_DELAY]; - }; -#ifdef DEBUG_MODE_FULL - drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,0,0,1], (getPosATL _laserTarget), 0.75, 0.75, 0, "", 0.5, 0.025, "TahomaB"]; - - { - private["_position"]; - _position = _x select 0; - drawLine3d [ASLToATL _povPos, ASLToATL _position, [0,0,1,1] ]; - } forEach _resultPositions; -#endif + if((count _laserResult) > 0) then { + // If the laser has moved less than a half meter, then dont move it. + // Just regular use of lasers will commonly make them move this much, + // but not across multiple close frames. + // This loses accuracy a little, but saves position updates per frame. + TRACE_4("", diag_tickTime, _forceUpdateTime, _laserResultPosition, (_laserResultPosition vectorDistance _pos)); + + if(diag_tickTime > _forceUpdateTime) then { + TRACE_1("FCS Update", ""); + ["ace_fcs_forceUpdate", []] call ace_common_fnc_localEvent; }; + + if(diag_tickTime > _forceUpdateTime) then { + _args set[3, diag_tickTime + FCS_UPDATE_DELAY]; + }; + + _localLaserTarget setPosASL _laserResultPosition; + +#ifdef DEBUG_MODE_FULL + drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,0,0,1], _laserResultPosition, 0.75, 0.75, 0, "", 0.5, 0.025, "TahomaB"]; + drawLine3d [ASLToATL _povPos, ASLToATL _laserResultPosition, [0,0,1,1] ]; +#endif }; - _this set[0, _args]; }; -private ["_laserTarget", "_handle", "_vehicle"]; +private ["_laserTarget", "_handle", "_vehicle", "_laserUuid"]; -if(isNil QGVAR(laser)) then { - _laserTarget = "LaserTargetW" createVehicle (getpos ACE_player); - +if(!GVAR(active)) then { GVAR(active) = true; - _handle = [FUNC(laserHudDesignatePFH), 0.1, [_laserTarget, ACE_player]] call cba_fnc_addPerFrameHandler; - _laserTarget setVariable ["ACE_PFH_HANDLE", _handle, false]; + TRACE_1("Activating laser", ""); + _laserUuid = [(vehicle ACE_player), ACE_player, FUNC(findLaserSource), 1550, 1001, 1] call EFUNC(laser,laserOn); - // Clear the vehicle parameters - _vehicle setVariable[QGVAR(currentTarget), [], true]; - - GVAR(laser) = _laserTarget; + // @TODO: Create the local target for the players side + _localLaserTarget = "LaserTargetW" createVehicleLocal (getpos ACE_player); + + _handle = [FUNC(laserHudDesignatePFH), 0.25, [ACE_player, _laserUuid, _localLaserTarget]] call cba_fnc_addPerFrameHandler; } else { [] call FUNC(laserHudDesignateOff); [] call FUNC(laserHudDesignateOn); diff --git a/addons/missileguidance/functions/fnc_seekerType_SALH.sqf b/addons/missileguidance/functions/fnc_seekerType_SALH.sqf index f4d36285d8..d54a86c74c 100644 --- a/addons/missileguidance/functions/fnc_seekerType_SALH.sqf +++ b/addons/missileguidance/functions/fnc_seekerType_SALH.sqf @@ -1,4 +1,4 @@ -//#define DEBUG_MODE_FULL +#define DEBUG_MODE_FULL #include "script_component.hpp" EXPLODE_7_PVT(((_this select 1) select 0),_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); @@ -10,8 +10,15 @@ _launchParams = _this select 1; _seekerParams = _launchParams select 3; // TODO: this needs to be shootCone/findStrongestRay after testing -_targets = [_projectile, ACE_DEFAULT_LASER_CODE, (_seekerParams select 0)] call ace_laser_fnc_findLaserDesignator; -_foundTargetPos = getPosASL (_targets select 1); +//_targets = [_projectile, ACE_DEFAULT_LASER_CODE, (_seekerParams select 0)] call ace_laser_fnc_findLaserDesignator; +//_foundTargetPos = getPosASL (_targets select 1); + +_laserResult = [(getPosASL _projectile), [1550,1550], 1001] call EFUNC(laser,seekerFindLaserSpot); +_foundTargetPos = _laserResult select 0; +TRACE_1("Search", _laserResult); + +// @TODO: Check angle to target from seeker head + TRACE_1("Seeker return target pos", _foundTargetPos); _foundTargetPos; \ No newline at end of file From 887e1d1d99054fccdb2eefa3e3b313182f01836f Mon Sep 17 00:00:00 2001 From: jaynus Date: Sun, 12 Apr 2015 11:14:12 -0700 Subject: [PATCH 166/214] Remove optional laser visual. --- addons/laser/CfgWeapons.hpp | 8 ++++++++ addons/laser/config.cpp | 3 ++- .../functions/fnc_laserHudDesignateOff.sqf | 3 ++- .../functions/fnc_laserHudDesignateOn.sqf | 8 +++++--- 4 files changed, 17 insertions(+), 5 deletions(-) create mode 100644 addons/laser/CfgWeapons.hpp diff --git a/addons/laser/CfgWeapons.hpp b/addons/laser/CfgWeapons.hpp new file mode 100644 index 0000000000..ede7ee0a3c --- /dev/null +++ b/addons/laser/CfgWeapons.hpp @@ -0,0 +1,8 @@ +/* +class Default; +class Item_Base_F; + +class Laserdesignator_mounted : Default {}; +class Item_Laserdesignator : Item_Base_F {}; + +*/ \ No newline at end of file diff --git a/addons/laser/config.cpp b/addons/laser/config.cpp index 4b209b866e..3f430619ef 100644 --- a/addons/laser/config.cpp +++ b/addons/laser/config.cpp @@ -11,4 +11,5 @@ class CfgPatches { }; #include "CfgEventhandlers.hpp" -#include "CfgVehicles.hpp" \ No newline at end of file +#include "CfgVehicles.hpp" +#include "CfgWeapons.hpp" \ No newline at end of file diff --git a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOff.sqf b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOff.sqf index fc50e571c7..8df58f01bb 100644 --- a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOff.sqf +++ b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOff.sqf @@ -4,7 +4,8 @@ if( (count _this) > 2) then { EXPLODE_3_PVT(_this,_shooter,_laserUuid, _localLaserTarget); [_laserUuid] call EFUNC(laser,laserOff); - deleteVehicle _localLaserTarget; + // @TODO: Nou gets to field all tickets about missing lasers. + //deleteVehicle _localLaserTarget; }; GVAR(active) = false; diff --git a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf index e7518041ed..85fef8f059 100644 --- a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf +++ b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf @@ -50,7 +50,8 @@ FUNC(laserHudDesignatePFH) = { _args set[3, diag_tickTime + FCS_UPDATE_DELAY]; }; - _localLaserTarget setPosASL _laserResultPosition; + // @TODO: Nou gets to field all tickets about missing lasers. + //_localLaserTarget setPosASL _laserResultPosition; #ifdef DEBUG_MODE_FULL drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,0,0,1], _laserResultPosition, 0.75, 0.75, 0, "", 0.5, 0.025, "TahomaB"]; @@ -69,9 +70,10 @@ if(!GVAR(active)) then { _laserUuid = [(vehicle ACE_player), ACE_player, FUNC(findLaserSource), 1550, 1001, 1] call EFUNC(laser,laserOn); // @TODO: Create the local target for the players side - _localLaserTarget = "LaserTargetW" createVehicleLocal (getpos ACE_player); + // @TODO: Nou gets to field all tickets about missing lasers. + //_localLaserTarget = "LaserTargetW" createVehicleLocal (getpos ACE_player); - _handle = [FUNC(laserHudDesignatePFH), 0.25, [ACE_player, _laserUuid, _localLaserTarget]] call cba_fnc_addPerFrameHandler; + _handle = [FUNC(laserHudDesignatePFH), 0.25, [ACE_player, _laserUuid, nil]] call cba_fnc_addPerFrameHandler; } else { [] call FUNC(laserHudDesignateOff); [] call FUNC(laserHudDesignateOn); From 6be8cc8d84488b0fa9509bea2b1ff532da67371c Mon Sep 17 00:00:00 2001 From: jaynus Date: Sun, 12 Apr 2015 11:29:33 -0700 Subject: [PATCH 167/214] Removed: Laser visuals Updated: comments and function defs Changed: pass function name, not full code. --- addons/laser/CfgVehicles.hpp | 11 +++++--- .../functions/fnc_findLaserSource.sqf | 13 +++++++++- .../functions/fnc_laserHudDesignateOff.sqf | 12 +++++++++ .../functions/fnc_laserHudDesignateOn.sqf | 26 +++++++++---------- 4 files changed, 45 insertions(+), 17 deletions(-) diff --git a/addons/laser/CfgVehicles.hpp b/addons/laser/CfgVehicles.hpp index 07b8055f0e..2a75a54e03 100644 --- a/addons/laser/CfgVehicles.hpp +++ b/addons/laser/CfgVehicles.hpp @@ -2,8 +2,13 @@ class CfgVehicles { class All; class LaserTarget: All { - class EventHandlers { - init = QUOTE(_this call FUNC(laser_init)); - }; + // LaserTargets are not visual unless in the visual spectrum + model = ""; + threat[] = {0,0,0}; + }; + + // Visual laserTarget override + class ACE_LaserTarget_Visual : LaserTarget { + model = "\A3\Weapons_f\laserTgt.p3d"; }; }; \ No newline at end of file diff --git a/addons/laser_selfdesignate/functions/fnc_findLaserSource.sqf b/addons/laser_selfdesignate/functions/fnc_findLaserSource.sqf index a432b838d8..ac1ae7e438 100644 --- a/addons/laser_selfdesignate/functions/fnc_findLaserSource.sqf +++ b/addons/laser_selfdesignate/functions/fnc_findLaserSource.sqf @@ -1,4 +1,15 @@ -//findLaserSource.sqf +/* + * Author: jaynus + * Handler function for laser network code. + * + * Argument: + * 0: Emitter + * 1: Owner + * + * Return value: + * [position, direction] + */ + //findLaserSource.sqf //#define DEBUG_MODE_FULL #include "script_component.hpp" diff --git a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOff.sqf b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOff.sqf index 8df58f01bb..17e7fcb76e 100644 --- a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOff.sqf +++ b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOff.sqf @@ -1,3 +1,15 @@ +/* + * Author: jaynus + * Turns off passed laser self designation. + * + * Argument: + * 0: Shooter, player shooting the laser + * 1: LaserUUID, the UUID of the laser returned by EFUNC(laser,laserOn) + * 2: Local laser target, unused. + * + * Return value: + * true + */ #include "script_component.hpp" if( (count _this) > 2) then { diff --git a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf index 85fef8f059..0480e9f748 100644 --- a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf +++ b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf @@ -1,4 +1,14 @@ -//#define DEBUG_MODE_FULL +/* + * Author: jaynus + * Turns on laser self designation from this vehicle based on the turret. + * There are no arguments, because it is all strictly based on the users vehicle. + * + * Argument: + * + * Return value: + * N/A + */ + //#define DEBUG_MODE_FULL #include "script_component.hpp" TRACE_1("enter", _this); @@ -14,7 +24,7 @@ FUNC(laserHudDesignatePFH) = { _vehicle = vehicle _shooter; TRACE_1("", _args); - if((vehicle _shooter) == _shooter || !alive _shooter || isNull _vehicle || !GVAR(active) ) exitWith { + if((vehicle _shooter) == _shooter || {!alive _shooter} || {isNull _vehicle} || {!GVAR(active)} ) exitWith { _args call FUNC(laserHudDesignateOff); }; if(!([_shooter] call FUNC(unitTurretHasDesignator)) ) exitWith { @@ -35,18 +45,8 @@ FUNC(laserHudDesignatePFH) = { TRACE_1("Search", _laserResult); if((count _laserResult) > 0) then { - // If the laser has moved less than a half meter, then dont move it. - // Just regular use of lasers will commonly make them move this much, - // but not across multiple close frames. - // This loses accuracy a little, but saves position updates per frame. - TRACE_4("", diag_tickTime, _forceUpdateTime, _laserResultPosition, (_laserResultPosition vectorDistance _pos)); - if(diag_tickTime > _forceUpdateTime) then { - TRACE_1("FCS Update", ""); ["ace_fcs_forceUpdate", []] call ace_common_fnc_localEvent; - }; - - if(diag_tickTime > _forceUpdateTime) then { _args set[3, diag_tickTime + FCS_UPDATE_DELAY]; }; @@ -67,7 +67,7 @@ if(!GVAR(active)) then { GVAR(active) = true; TRACE_1("Activating laser", ""); - _laserUuid = [(vehicle ACE_player), ACE_player, FUNC(findLaserSource), 1550, 1001, 1] call EFUNC(laser,laserOn); + _laserUuid = [(vehicle ACE_player), ACE_player, QFUNC(findLaserSource), 1550, 1001, 1] call EFUNC(laser,laserOn); // @TODO: Create the local target for the players side // @TODO: Nou gets to field all tickets about missing lasers. From 9273a32d2394e6ae6a1d1d000fb69e2143e34e02 Mon Sep 17 00:00:00 2001 From: jaynus Date: Sun, 12 Apr 2015 11:38:07 -0700 Subject: [PATCH 168/214] code cleanup, default laser parameters, getVariable self designation specifics. --- addons/laser/XEH_pre_init.sqf | 4 +++ addons/laser_selfdesignate/CfgUI.hpp | 32 ------------------- addons/laser_selfdesignate/CfgVehicles.hpp | 6 ---- addons/laser_selfdesignate/config.cpp | 2 -- .../functions/fnc_laserHudDesignateOn.sqf | 10 ++++-- 5 files changed, 12 insertions(+), 42 deletions(-) delete mode 100644 addons/laser_selfdesignate/CfgUI.hpp diff --git a/addons/laser/XEH_pre_init.sqf b/addons/laser/XEH_pre_init.sqf index 3fde1769e0..e10067a3cc 100644 --- a/addons/laser/XEH_pre_init.sqf +++ b/addons/laser/XEH_pre_init.sqf @@ -25,6 +25,10 @@ PREP(laser_init); PREP(laserTargetPFH); ACE_LASERS = []; + +// Laser default variables ACE_DEFAULT_LASER_CODE = 1001; +ACE_DEFAULT_LASER_WAVELENGTH = 1550; +ACE_DEFAULT_LASER_BEAMSPREAD = 1; GVAR(laserEmitters) = HASH_CREATE; \ No newline at end of file diff --git a/addons/laser_selfdesignate/CfgUI.hpp b/addons/laser_selfdesignate/CfgUI.hpp deleted file mode 100644 index e8823e04f8..0000000000 --- a/addons/laser_selfdesignate/CfgUI.hpp +++ /dev/null @@ -1,32 +0,0 @@ -class RscPicture; -class RscText; -class RscControlsGroupNoScrollbars; -/* This disables air radar. We need to make this a seperate HUD addon -class RscInGameUI -{ - class RscUnitInfo - { - class CA_Radar: RscControlsGroupNoScrollbars - { - class controls - { - class CA_RadarBackground: RscPicture { - colorText[] = {0,0,0,0}; - text = ""; - }; - class CA_RadarIcon: RscPicture { - colorText[] = {0,0,0,0}; - }; - class CA_Heading: RscText { - colorText[] = {0,0,0,0}; - }; - }; - }; - }; -}; -class CfgInGameUI -{ - -}; - -*/ \ No newline at end of file diff --git a/addons/laser_selfdesignate/CfgVehicles.hpp b/addons/laser_selfdesignate/CfgVehicles.hpp index b29d8a4394..02d8b32b3d 100644 --- a/addons/laser_selfdesignate/CfgVehicles.hpp +++ b/addons/laser_selfdesignate/CfgVehicles.hpp @@ -8,12 +8,6 @@ class CfgVehicles { class Turrets { class MainTurret; }; - - // TODO: move these to a different HUD addon - // commanderCanSee = 2+32; - // gunnerCanSee = 2+32; - // driverCanSee = 2+32; - }; class Helicopter_Base_F: Helicopter {}; diff --git a/addons/laser_selfdesignate/config.cpp b/addons/laser_selfdesignate/config.cpp index 33c31ba7e5..19ec28063b 100644 --- a/addons/laser_selfdesignate/config.cpp +++ b/addons/laser_selfdesignate/config.cpp @@ -10,8 +10,6 @@ class CfgPatches { }; }; -#include "CfgUI.hpp" - #include "CfgEventhandlers.hpp" #include "CfgWeapons.hpp" #include "CfgVehicles.hpp" diff --git a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf index 0480e9f748..f5066070f7 100644 --- a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf +++ b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf @@ -61,13 +61,19 @@ FUNC(laserHudDesignatePFH) = { _this set[0, _args]; }; -private ["_laserTarget", "_handle", "_vehicle", "_laserUuid"]; +private ["_laserTarget", "_handle", "_vehicle", "_laserUuid", "_waveLength", "_beamSpread", "_laserCode"]; if(!GVAR(active)) then { GVAR(active) = true; TRACE_1("Activating laser", ""); - _laserUuid = [(vehicle ACE_player), ACE_player, QFUNC(findLaserSource), 1550, 1001, 1] call EFUNC(laser,laserOn); + + // Get the self-designation variables, or use defaults + _laserCode = (vehicle ACE_player) getVariable[QGVAR(currentCode), ACE_DEFAULT_LASER_CODE]; + _waveLength = (vehicle ACE_player) getVariable[QGVAR(currentWaveLength), ACE_DEFAULT_LASER_WAVELENGTH]; + _beamSpread = (vehicle ACE_player) getVariable[QGVAR(currentBeamSpread), ACE_DEFAULT_LASER_BEAMSPREAD]; + + _laserUuid = [(vehicle ACE_player), ACE_player, QFUNC(findLaserSource), _waveLength, _laserCode, _beamSpread] call EFUNC(laser,laserOn); // @TODO: Create the local target for the players side // @TODO: Nou gets to field all tickets about missing lasers. From 197b13e6d928e68c0e8a1a07a04a78eb3f7a0a2c Mon Sep 17 00:00:00 2001 From: jaynus Date: Sun, 12 Apr 2015 11:41:50 -0700 Subject: [PATCH 169/214] Use current codes for FCS updates. --- .../functions/fnc_laserHudDesignateOn.sqf | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf index f5066070f7..1d4505baa2 100644 --- a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf +++ b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf @@ -40,7 +40,10 @@ FUNC(laserHudDesignatePFH) = { _turretInfo = [_vehicle, _gunnerInfo select 1] call EFUNC(common,getTurretDirection); _povPos = _turretInfo select 0; - _laserResult = [_povPos, [1550,1550], 1001] call EFUNC(laser,seekerFindLaserSpot); + _laserCode = (vehicle ACE_player) getVariable[QGVAR(currentCode), ACE_DEFAULT_LASER_CODE]; + _beamSpread = (vehicle ACE_player) getVariable[QGVAR(currentBeamSpread), ACE_DEFAULT_LASER_BEAMSPREAD]; + + _laserResult = [_povPos, [_beamSpread,_beamSpread], _laserCode] call EFUNC(laser,seekerFindLaserSpot); _laserResultPosition = _laserResult select 0; TRACE_1("Search", _laserResult); From 7f0e54b9c34f44bd3279ac7bf75c11b9a9e6df01 Mon Sep 17 00:00:00 2001 From: jaynus Date: Sun, 12 Apr 2015 11:43:37 -0700 Subject: [PATCH 170/214] More defaults. --- .../laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf | 4 ++-- addons/missileguidance/functions/fnc_seekerType_SALH.sqf | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf index 1d4505baa2..ecf79da1dd 100644 --- a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf +++ b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf @@ -41,9 +41,9 @@ FUNC(laserHudDesignatePFH) = { _povPos = _turretInfo select 0; _laserCode = (vehicle ACE_player) getVariable[QGVAR(currentCode), ACE_DEFAULT_LASER_CODE]; - _beamSpread = (vehicle ACE_player) getVariable[QGVAR(currentBeamSpread), ACE_DEFAULT_LASER_BEAMSPREAD]; + _waveLength = (vehicle ACE_player) getVariable[QGVAR(currentWaveLength), ACE_DEFAULT_LASER_WAVELENGTH]; - _laserResult = [_povPos, [_beamSpread,_beamSpread], _laserCode] call EFUNC(laser,seekerFindLaserSpot); + _laserResult = [_povPos, [_waveLength,_waveLength], _laserCode] call EFUNC(laser,seekerFindLaserSpot); _laserResultPosition = _laserResult select 0; TRACE_1("Search", _laserResult); diff --git a/addons/missileguidance/functions/fnc_seekerType_SALH.sqf b/addons/missileguidance/functions/fnc_seekerType_SALH.sqf index d54a86c74c..6fc301ad21 100644 --- a/addons/missileguidance/functions/fnc_seekerType_SALH.sqf +++ b/addons/missileguidance/functions/fnc_seekerType_SALH.sqf @@ -13,7 +13,7 @@ _seekerParams = _launchParams select 3; //_targets = [_projectile, ACE_DEFAULT_LASER_CODE, (_seekerParams select 0)] call ace_laser_fnc_findLaserDesignator; //_foundTargetPos = getPosASL (_targets select 1); -_laserResult = [(getPosASL _projectile), [1550,1550], 1001] call EFUNC(laser,seekerFindLaserSpot); +_laserResult = [(getPosASL _projectile), [ACE_DEFAULT_WAVELENGTH,ACE_DEFAULT_WAVELENGTH], ACE_DEFAULT_LASER_CODE] call EFUNC(laser,seekerFindLaserSpot); _foundTargetPos = _laserResult select 0; TRACE_1("Search", _laserResult); From 9287d6fe445647b6a603f9ed7847ccb121de5b49 Mon Sep 17 00:00:00 2001 From: jaynus Date: Sun, 12 Apr 2015 11:46:28 -0700 Subject: [PATCH 171/214] Remove dead code. --- .../functions/fnc_laserHudDesignateOn.sqf | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf index ecf79da1dd..c480c051bb 100644 --- a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf +++ b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf @@ -36,6 +36,9 @@ FUNC(laserHudDesignatePFH) = { }; _forceUpdateTime = _args select 3; + // @TODO: We don't have anything here we need to do the calculations for right now + /* + _gunnerInfo = [_vehicle, (currentWeapon _vehicle)] call CBA_fnc_getFirer; _turretInfo = [_vehicle, _gunnerInfo select 1] call EFUNC(common,getTurretDirection); _povPos = _turretInfo select 0; @@ -43,24 +46,22 @@ FUNC(laserHudDesignatePFH) = { _laserCode = (vehicle ACE_player) getVariable[QGVAR(currentCode), ACE_DEFAULT_LASER_CODE]; _waveLength = (vehicle ACE_player) getVariable[QGVAR(currentWaveLength), ACE_DEFAULT_LASER_WAVELENGTH]; + _laserResult = [_povPos, [_waveLength,_waveLength], _laserCode] call EFUNC(laser,seekerFindLaserSpot); _laserResultPosition = _laserResult select 0; TRACE_1("Search", _laserResult); if((count _laserResult) > 0) then { - if(diag_tickTime > _forceUpdateTime) then { - ["ace_fcs_forceUpdate", []] call ace_common_fnc_localEvent; - _args set[3, diag_tickTime + FCS_UPDATE_DELAY]; - }; - // @TODO: Nou gets to field all tickets about missing lasers. //_localLaserTarget setPosASL _laserResultPosition; - -#ifdef DEBUG_MODE_FULL - drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,0,0,1], _laserResultPosition, 0.75, 0.75, 0, "", 0.5, 0.025, "TahomaB"]; - drawLine3d [ASLToATL _povPos, ASLToATL _laserResultPosition, [0,0,1,1] ]; -#endif }; + */ + + if(diag_tickTime > _forceUpdateTime) then { + ["ace_fcs_forceUpdate", []] call ace_common_fnc_localEvent; + _args set[3, diag_tickTime + FCS_UPDATE_DELAY]; + }; + _this set[0, _args]; }; @@ -82,7 +83,7 @@ if(!GVAR(active)) then { // @TODO: Nou gets to field all tickets about missing lasers. //_localLaserTarget = "LaserTargetW" createVehicleLocal (getpos ACE_player); - _handle = [FUNC(laserHudDesignatePFH), 0.25, [ACE_player, _laserUuid, nil]] call cba_fnc_addPerFrameHandler; + _handle = [FUNC(laserHudDesignatePFH), 0.1, [ACE_player, _laserUuid, nil]] call cba_fnc_addPerFrameHandler; } else { [] call FUNC(laserHudDesignateOff); [] call FUNC(laserHudDesignateOn); From 5251de844721c4601dcbe12c94ca1b925da4cc50 Mon Sep 17 00:00:00 2001 From: jaynus Date: Sun, 12 Apr 2015 12:16:26 -0700 Subject: [PATCH 172/214] break out seeker angle check. more laser code cleanup. --- addons/laser/XEH_pre_init.sqf | 1 - .../functions/fnc_findLaserDesignator.sqf | 74 ------------------- addons/laser/functions/fnc_shootCone.sqf | 2 +- addons/missileguidance/XEH_pre_init.sqf | 2 + .../functions/fnc_checkSeekerAngle.sqf | 50 +++++++++++++ .../functions/fnc_seekerType_SALH.sqf | 20 ++--- 6 files changed, 64 insertions(+), 85 deletions(-) delete mode 100644 addons/laser/functions/fnc_findLaserDesignator.sqf create mode 100644 addons/missileguidance/functions/fnc_checkSeekerAngle.sqf diff --git a/addons/laser/XEH_pre_init.sqf b/addons/laser/XEH_pre_init.sqf index e10067a3cc..f243c0f659 100644 --- a/addons/laser/XEH_pre_init.sqf +++ b/addons/laser/XEH_pre_init.sqf @@ -6,7 +6,6 @@ PREP(shootRay); PREP(shootCone); PREP(checkLos); -PREP(findLaserDesignator); PREP(findStrongestRay); PREP(translateToModelSpace); diff --git a/addons/laser/functions/fnc_findLaserDesignator.sqf b/addons/laser/functions/fnc_findLaserDesignator.sqf deleted file mode 100644 index 902775ebd5..0000000000 --- a/addons/laser/functions/fnc_findLaserDesignator.sqf +++ /dev/null @@ -1,74 +0,0 @@ -//#define DEBUG_MODE_FULL -#include "script_component.hpp" - -private ["_seeker", "_headingPitch", "_found", "_vectorTo", "_polarTo", "_dir", "_vertOk", "_horzOk", "_fov", - "_closestDistance", "_pos1", "_pos2", "_disCheck", "_currentTarget", "_potentialTargets", "_offset", "_vector"]; - -_seeker = _this select 0; -_laserCode = _this select 1; -_fov = if (count _this > 2) then {_this select 2} else {75}; -_vector = if (count _this > 3) then {_this select 3} else {vectorDir _seeker}; -_offset = if (count _this > 4) then {_this select 4} else {[0,0,0]}; - -_headingPitch = _vector call CBA_fnc_vect2polar; -_currentTarget = nil; -_found = false; - -_getPosASL = {visiblePositionASL (_this select 0)}; - -LOG("Searching lasers"); -if(!(isNil "ACE_LASERS")) then { - _potentialTargets = []; - TRACE_1("", ACE_LASERS); - - { - if(!(isNull _x)) then { - _sensorPos = ATLtoASL(_seeker modelToWorldVisual _offset); - _vectorTo = [_sensorPos, ([_x] call _getPosASL)] call BIS_fnc_vectorFromXToY; - _polarTo = _vectorTo call CBA_fnc_vect2polar; - _dir = _polarTo select 1; - _dir = _dir - (_headingPitch select 1); - - TRACE_4("Calc", _sensorPos, _vectorTo, _polarTo, _dir); - - if (_dir < 0) then {_dir = _dir + 360}; - if (_dir > 360) then {_dir = _dir - 360}; - _vertOk = false; - _horzOk = false; - if(_dir < _fov || {_dir > (360-_fov)}) then { - _horzOk = true; - }; - if(abs((abs(_polarTo select 2))-(abs(_headingPitch select 2))) < _fov) then { - _vertOk = true; - }; - - TRACE_2("Results", _vertOk, _horzOk); - - if(_vertOk && {_horzOk}) then { - // Does the laser currently have our current code, if we have one? - _targetCode = _x getVariable ["ACE_LASER_CODE", ACE_DEFAULT_LASER_CODE]; - TRACE_1("Target in sight, checking code", _targetCode, _laserCode); - if(_targetCode == _laserCode) then { - _potentialTargets set[(count _potentialTargets), _x]; - }; - }; - }; - - } forEach ACE_LASERS; - - TRACE_1("", _potentialTargets); - - _closestDistance = 100000; - { - _pos1 = (getPosASL _seeker); - _pos2 = ([_x] call _getPosASL); - _disCheck = _pos1 distance _pos2; - // shouldn't this bail out when a valid target is found instead of iterating over all potential targets ? - if(_disCheck < _closestDistance && {[_pos1, _pos2, _x, _seeker] call FUNC(checkLos)}) then { - _found = true; - _currentTarget = _x; - _closestDistance = _disCheck; - }; - } forEach _potentialTargets; -}; -[_found, _currentTarget] \ No newline at end of file diff --git a/addons/laser/functions/fnc_shootCone.sqf b/addons/laser/functions/fnc_shootCone.sqf index 324f46184f..801353d4f7 100644 --- a/addons/laser/functions/fnc_shootCone.sqf +++ b/addons/laser/functions/fnc_shootCone.sqf @@ -1,5 +1,5 @@ #include "script_component.hpp" -#define DEBUG_MODE_FULL +//#define DEBUG_MODE_FULL private ["_divergence","_pos","_vec","_longestReturn","_shortestReturn","_resultPositions","_p1","_p2","_p","_v","_cp","_vecRotateMap","_result", "_resultPos","_distance","_count","_pos2","_radOffset","_offset","_offsetPos","_offsetVector"]; _divergence = 0.3; diff --git a/addons/missileguidance/XEH_pre_init.sqf b/addons/missileguidance/XEH_pre_init.sqf index 873715fef8..4d4a0b18b4 100644 --- a/addons/missileguidance/XEH_pre_init.sqf +++ b/addons/missileguidance/XEH_pre_init.sqf @@ -3,6 +3,8 @@ PREP(rotateVectLineGetMap); PREP(rotateVectLine); +PREP(checkSeekerAngle); + PREP(fired); PREP(guidancePFH); diff --git a/addons/missileguidance/functions/fnc_checkSeekerAngle.sqf b/addons/missileguidance/functions/fnc_checkSeekerAngle.sqf new file mode 100644 index 0000000000..7308ce1723 --- /dev/null +++ b/addons/missileguidance/functions/fnc_checkSeekerAngle.sqf @@ -0,0 +1,50 @@ +/* + * Author: jaynus + * Returns whether the target position is within the maximum angle FOV of the provided seeker + * objects current direction. + * + * Argument: + * 0: Seeker [Object] + * 1: Target [Position] + * 2: Max Angle [Degrees] + * + * Return value: + * Boolean + */ + + #define DEBUG_MODE_FULL +#include "script_component.hpp" +private["_seeker", "_targetPos", "_seekerMaxAngle", "_vectorTo", "_sensorPos", "_vertOk", "_horzOk", "_dir", "_headingPitch"]; + +_seeker = _this select 0; +_targetPos = _this select 1; +_seekerMaxAngle = _this select 2; + +_vertOk = false; +_horzOk = false; + +_sensorPos = getPosASL _seeker; +_vectorTo = _sensorPos vectorFromTo _targetPos; + +_headingPitch = (vectorDir _seeker) call CBA_fnc_vect2polar; +_polarTo = _vectorTo call CBA_fnc_vect2polar; + +_dir = _polarTo select 1; +_dir = _dir - (_headingPitch select 1); + +if (_dir < 0) then {_dir = _dir + 360}; +if (_dir > 360) then {_dir = _dir - 360}; + _vertOk = false; + _horzOk = false; +if(_dir < _angleFov || {_dir > (360-_angleFov)}) then { + _horzOk = true; +}; +if(abs((abs(_polarTo select 2))-(abs(_headingPitch select 2))) < _angleFov) then { + _vertOk = true; +}; + +if(!_vertOk || !_horzOk ) exitWith { + false +}; + +true \ No newline at end of file diff --git a/addons/missileguidance/functions/fnc_seekerType_SALH.sqf b/addons/missileguidance/functions/fnc_seekerType_SALH.sqf index 6fc301ad21..1c579678be 100644 --- a/addons/missileguidance/functions/fnc_seekerType_SALH.sqf +++ b/addons/missileguidance/functions/fnc_seekerType_SALH.sqf @@ -2,23 +2,25 @@ #include "script_component.hpp" EXPLODE_7_PVT(((_this select 1) select 0),_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); -private["_targets", "_foundTargetPos", "_launchParams", "_seekerParams", "_targetLaunchParams"]; - _seekerTargetPos = _this select 0; _launchParams = _this select 1; _seekerParams = _launchParams select 3; -// TODO: this needs to be shootCone/findStrongestRay after testing -//_targets = [_projectile, ACE_DEFAULT_LASER_CODE, (_seekerParams select 0)] call ace_laser_fnc_findLaserDesignator; -//_foundTargetPos = getPosASL (_targets select 1); - -_laserResult = [(getPosASL _projectile), [ACE_DEFAULT_WAVELENGTH,ACE_DEFAULT_WAVELENGTH], ACE_DEFAULT_LASER_CODE] call EFUNC(laser,seekerFindLaserSpot); +_laserResult = [(getPosASL _projectile), [ACE_DEFAULT_LASER_WAVELENGTH,ACE_DEFAULT_LASER_WAVELENGTH], ACE_DEFAULT_LASER_CODE] call EFUNC(laser,seekerFindLaserSpot); _foundTargetPos = _laserResult select 0; TRACE_1("Search", _laserResult); -// @TODO: Check angle to target from seeker head +if(!isNil "_foundTargetPos") then { + _angleFov = _seekerParams select 0; + _canSeeTarget = [_projectile, _foundTargetPos, _angleFov] call FUNC(checkSeekerAngle); + + // If we got here, it was an invalid target, just return a spot 5m in front of the missile + if(!_canSeeTarget) then { + _foundTargetPos = _sensorPos vectorAdd ((velocity _projectile) vectorMultiply 5); + }; + +}; -TRACE_1("Seeker return target pos", _foundTargetPos); _foundTargetPos; \ No newline at end of file From 38c3f43dd63d8e3b0d9b991cbc749ea6dab56fe2 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sun, 12 Apr 2015 14:39:49 -0500 Subject: [PATCH 173/214] Fix UBC Updating base class Turrets->, by z\ace\addons\missileguidance\config.bin/CfgVehicles/B_Heli_Attack_01_F/Turrets/ --- addons/missileguidance/CfgVehicles.hpp | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/addons/missileguidance/CfgVehicles.hpp b/addons/missileguidance/CfgVehicles.hpp index ec07cd96c1..7707717c9e 100644 --- a/addons/missileguidance/CfgVehicles.hpp +++ b/addons/missileguidance/CfgVehicles.hpp @@ -1,19 +1,29 @@ class CfgVehicles { - class Heli_Attack_01_base_F; - class B_Heli_Attack_01_F : Heli_Attack_01_base_F { + class AllVehicles; + class Air: AllVehicles { + class Turrets; + }; + + class Helicopter: Air { class Turrets { class MainTurret; }; }; + class Helicopter_Base_F: Helicopter {}; + class Heli_Attack_01_base_F: Helicopter_Base_F {}; + class B_Heli_Attack_01_F : Heli_Attack_01_base_F { + class Turrets: Turrets { + class MainTurret; + }; + }; class ACE_Comanche_Test : B_Heli_Attack_01_F { - displayName = "ACE_Comanche_Test"; + displayName = "ACE_Comanche_Test"; author = "ACE Team"; - class Library - { - libTextDesc = "ACE_Comanche_Test"; - }; + class Library { + libTextDesc = "ACE_Comanche_Test"; + }; class Turrets: Turrets { class MainTurret: MainTurret { magazines[] = {"ACE_500Rnd_20mm_shells_Comanche", "24Rnd_ACE_Hellfire_AGM114K"}; @@ -21,4 +31,3 @@ class CfgVehicles { }; }; }; - From 2e83e56a735c649809756540abc1b26c4dbc1a81 Mon Sep 17 00:00:00 2001 From: jaynus Date: Sun, 12 Apr 2015 13:02:09 -0700 Subject: [PATCH 174/214] Seeker integration. --- addons/missileguidance/XEH_pre_init.sqf | 1 + .../functions/fnc_checkLos.sqf | 29 +++++++++++++++++++ .../functions/fnc_seekerType_Optic.sqf | 29 +++++++++++++++---- .../functions/fnc_seekerType_SALH.sqf | 2 +- 4 files changed, 54 insertions(+), 7 deletions(-) create mode 100644 addons/missileguidance/functions/fnc_checkLos.sqf diff --git a/addons/missileguidance/XEH_pre_init.sqf b/addons/missileguidance/XEH_pre_init.sqf index 4d4a0b18b4..403d6245ca 100644 --- a/addons/missileguidance/XEH_pre_init.sqf +++ b/addons/missileguidance/XEH_pre_init.sqf @@ -4,6 +4,7 @@ PREP(rotateVectLineGetMap); PREP(rotateVectLine); PREP(checkSeekerAngle); +PREP(checkLos); PREP(fired); diff --git a/addons/missileguidance/functions/fnc_checkLos.sqf b/addons/missileguidance/functions/fnc_checkLos.sqf new file mode 100644 index 0000000000..f21a841367 --- /dev/null +++ b/addons/missileguidance/functions/fnc_checkLos.sqf @@ -0,0 +1,29 @@ +/* + * Author: jaynus + * Returns whether the seeker object can see the target position with lineIntersect + * + * Argument: + * 0: Seeker [Object] + * 1: Target [Object] + * + * Return value: + * Boolean + */ +#include "script_component.hpp" +private["_seeker", "_seekerPos", "_target", "_targetPos", "_return", "_vectorTo", "_searchPos"]; +_seeker = _this select 0; +_target = _this select 1; + +_targetPos = getPosASL _target; +_seekerPos = getPosASL _seeker; +_return = true; + +if(!(terrainIntersectASL [ _seekerPos, _targetPos])) then { + if(lineIntersects [_seekerPos, _targetPos, _seeker, _target]) then { + _return = false; + }; +} else { + _return = false; +}; + +_return; \ No newline at end of file diff --git a/addons/missileguidance/functions/fnc_seekerType_Optic.sqf b/addons/missileguidance/functions/fnc_seekerType_Optic.sqf index 3ce123d89c..9539c2c8f6 100644 --- a/addons/missileguidance/functions/fnc_seekerType_Optic.sqf +++ b/addons/missileguidance/functions/fnc_seekerType_Optic.sqf @@ -19,14 +19,31 @@ if(!isNil "_target") then { _foundTargetPos = getPosASL _target; }; -TRACE_2("", _target, _foundTargetPos); +/* @TODO: This is seeker LOS and angle checks for LOAL only; LOBL does not need visual +_angleFov = _seekerParams select 0; +_angleOkay = [_projectile, _foundTargetPos, _angleFov] call FUNC(checkSeekerAngle); -_projectileSpeed = (vectorMagnitude velocity _projectile); -_distanceToTarget = (getPosASL _projectile) vectorDistance _foundTargetPos; +_losOkay = false; +if(_angleOkay) then { + _losOkay = [_projectile, _target] call FUNC(checkSeekerLos); +}; +TRACE_2("", _angleOkay, _losOkay); -_eta = _distanceToTarget / _projectileSpeed; +// If we got here, it was an invalid target, just return a spot 5m in front of the missile +if(!_angleOkay || !_losOkay) then { + _foundTargetPos = _sensorPos vectorAdd ((velocity _projectile) vectorMultiply 5); +} else { + TRACE_2("", _target, _foundTargetPos); -_adjustVelocity = (velocity _target) vectorMultiply _eta; -_foundTargetPos = _foundTargetPos vectorAdd _adjustVelocity; + // @TODO: Configurable lead for seekers + _projectileSpeed = (vectorMagnitude velocity _projectile); + _distanceToTarget = (getPosASL _projectile) vectorDistance _foundTargetPos; + _eta = _distanceToTarget / _projectileSpeed; + + _adjustVelocity = (velocity _target) vectorMultiply _eta; + _foundTargetPos = _foundTargetPos vectorAdd _adjustVelocity; +}; + +*/ _foundTargetPos; \ No newline at end of file diff --git a/addons/missileguidance/functions/fnc_seekerType_SALH.sqf b/addons/missileguidance/functions/fnc_seekerType_SALH.sqf index 1c579678be..828550aeeb 100644 --- a/addons/missileguidance/functions/fnc_seekerType_SALH.sqf +++ b/addons/missileguidance/functions/fnc_seekerType_SALH.sqf @@ -1,4 +1,4 @@ -#define DEBUG_MODE_FULL +//#define DEBUG_MODE_FULL #include "script_component.hpp" EXPLODE_7_PVT(((_this select 1) select 0),_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); From 2317a3c9889f1f22e44c0031e575ff30600daa6a Mon Sep 17 00:00:00 2001 From: jaynus Date: Sun, 12 Apr 2015 14:03:15 -0700 Subject: [PATCH 175/214] Visually hide laser targets. --- addons/laser/CfgVehicles.hpp | 27 ++++++++++++++++--- addons/laser/XEH_pre_init.sqf | 2 +- addons/laser/functions/fnc_laserTargetPFH.sqf | 13 ++++++--- addons/laser/functions/fnc_laser_init.sqf | 17 +++++++----- .../fnc_vanillaLaserSeekerHandler.sqf | 26 ++++++++++++++++++ 5 files changed, 70 insertions(+), 15 deletions(-) create mode 100644 addons/laser/functions/fnc_vanillaLaserSeekerHandler.sqf diff --git a/addons/laser/CfgVehicles.hpp b/addons/laser/CfgVehicles.hpp index 2a75a54e03..f4e2ed42ab 100644 --- a/addons/laser/CfgVehicles.hpp +++ b/addons/laser/CfgVehicles.hpp @@ -2,13 +2,32 @@ class CfgVehicles { class All; class LaserTarget: All { - // LaserTargets are not visual unless in the visual spectrum - model = ""; - threat[] = {0,0,0}; + // @TODO: Changing the model and simulation hides it, but THEN IT DOESNT SPAWN WTF!? + model = "\A3\Weapons_F\empty.p3d"; + simulation = "nvmarker"; + nvTarget = 1; + //simulation = "laserTarget"; + //threat[] = {0,0,0}; + class EventHandlers { + init = QUOTE(_this call FUNC(laser_init)); + }; + + diffuse[] = {0,0,0}; + ambient[] = {0,0,0}; + brightness = 0; + name = "pozicni blik"; + drawLight = 0; + drawLightSize = 0; + drawLightCenterSize = 0; + activeLight = 0; + blinking = 0; + dayLight = 0; + onlyInNvg = 0; + useFlare = 0; }; // Visual laserTarget override class ACE_LaserTarget_Visual : LaserTarget { - model = "\A3\Weapons_f\laserTgt.p3d"; + //model = "\A3\Weapons_f\laserTgt.p3d"; }; }; \ No newline at end of file diff --git a/addons/laser/XEH_pre_init.sqf b/addons/laser/XEH_pre_init.sqf index f243c0f659..242300791f 100644 --- a/addons/laser/XEH_pre_init.sqf +++ b/addons/laser/XEH_pre_init.sqf @@ -20,7 +20,7 @@ PREP(handleLaserOff); PREP(drawVisibleLaserTargets); PREP(laser_init); - +PREP(vanillaLaserSeekerHandler); PREP(laserTargetPFH); ACE_LASERS = []; diff --git a/addons/laser/functions/fnc_laserTargetPFH.sqf b/addons/laser/functions/fnc_laserTargetPFH.sqf index bdab413685..15d0fa03d0 100644 --- a/addons/laser/functions/fnc_laserTargetPFH.sqf +++ b/addons/laser/functions/fnc_laserTargetPFH.sqf @@ -1,20 +1,25 @@ +#define DEBUG_MODE_FULL #include "script_component.hpp" +TRACE_1("enter", _this); private["_args", "_laserTarget"]; //TRACE_1("enter", _this); _args = _this select 0; _laserTarget = _args select 0; +_shooter = _args select 1; +_uuid = _args select 2; -if(isNull _laserTarget || !alive player) exitWith { +if(isNull _laserTarget || !alive _shooter) exitWith { [(_this select 1)] call cba_fnc_removePerFrameHandler; REM(ACE_LASERS, _laserTarget); + + // Remove laseron + [_uuid] call FUNC(laserOff); }; -_end = diag_tickTime; - #ifdef DEBUG_MODE_FULL // Iconize the location of the actual laserTarget -_pos = [_laserTarget] call FUNC(getPosASL); +_pos = getPosASL _laserTarget; drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\select_target_ca.paa", [1,0,0,1], (ASLtoATL _pos), 0.75, 0.75, 0, "", 0.5, 0.025, "TahomaB"]; { diff --git a/addons/laser/functions/fnc_laser_init.sqf b/addons/laser/functions/fnc_laser_init.sqf index 1be770e4c8..7c39c9be87 100644 --- a/addons/laser/functions/fnc_laser_init.sqf +++ b/addons/laser/functions/fnc_laser_init.sqf @@ -1,15 +1,18 @@ +#define DEBUG_MODE_FULL #include "script_component.hpp" -PARAMS_1(_laserTarget); - TRACE_1("enter", _this); +PARAMS_1(_laserTarget); + // Add the target to the global targets array // Everyone tracks them // Add the laser localized to the laser array, and give it the default localized code PUSH(ACE_LASERS, _laserTarget); // Check the vehicle, otherwise use the default -_laserTarget setVariable ["ACE_LASER_CODE", ACE_DEFAULT_LASER_CODE, false]; +_laserTarget setVariable [QGVAR(code), ACE_DEFAULT_LASER_CODE, false]; +_laserTarget setVariable [QGVAR(beamSpread), ACE_DEFAULT_LASER_BEAMSPREAD, false]; +_laserTarget setVariable [QGVAR(waveLength), ACE_DEFAULT_LASER_WAVELENGTH, false]; // Clean the lasers of any null objects while we are here REM(ACE_LASERS, objNull); @@ -18,9 +21,11 @@ if(!(local _laserTarget)) exitWith { }; // The target is local, so its on this client if(!isDedicated) then { - _laserTarget setVariable [QGVAR(owner), ACE_player, true]; - - [FUNC(laserTargetPFH), 0, [_laserTarget, ACE_player]] call cba_fnc_addPerFrameHandler; + // @TODO: Get ownership variables and set them on the vehicle + + _uuid = [(vehicle ACE_player), ACE_player, QFUNC(vanillaLaserSeekerHandler), ACE_DEFAULT_LASER_WAVELENGTH, ACE_DEFAULT_LASER_CODE, ACE_DEFAULT_LASER_BEAMSPREAD] call FUNC(laserOn); + _laserTarget setVariable [QGVAR(uuid), _uuid, false]; + [FUNC(laserTargetPFH), 1, [_laserTarget, ACE_player, _uuid]] call cba_fnc_addPerFrameHandler; } else { // server side ownership of laser _laserTarget setVariable [QGVAR(owner), nil, true]; diff --git a/addons/laser/functions/fnc_vanillaLaserSeekerHandler.sqf b/addons/laser/functions/fnc_vanillaLaserSeekerHandler.sqf new file mode 100644 index 0000000000..bbd36bd92d --- /dev/null +++ b/addons/laser/functions/fnc_vanillaLaserSeekerHandler.sqf @@ -0,0 +1,26 @@ +/* + * Author: jaynus + * Handler function for laser network code. + * + * Argument: + * 0: Emitter + * 1: Owner + * + * Return value: + * [position, direction] + */ +//#define DEBUG_MODE_FULL +#include "script_component.hpp" + +private["_emitter", "_owner", "_gunnerInfo", "_turretInfo", "_povPos", "_povDir"]; + +_emmiter = _this select 0; +_owner = _this select 1; + +// Not in a vehicle.... +// @TODO: handle lasering from turrets +if( (vehicle _owner) == _owner && alive _owner ) exitWith { + [(eyePos _owner), (eyeDirection _owner)] +}; + +[-1,-1] \ No newline at end of file From c9e2eb0869475a9a85d7847a321b9e3b2e6e9b19 Mon Sep 17 00:00:00 2001 From: jaynus Date: Sun, 12 Apr 2015 14:05:12 -0700 Subject: [PATCH 176/214] Changed: no-crosshair reticle for Titan by BlackPixxel --- AUTHORS.txt | 1 + addons/javelin/CfgWeapons.hpp | 3 ++- addons/javelin/data/reticle_titan.p3d | Bin 0 -> 1416 bytes 3 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 addons/javelin/data/reticle_titan.p3d diff --git a/AUTHORS.txt b/AUTHORS.txt index 5642606e91..148f2835fb 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -71,3 +71,4 @@ Valentin Torikian zGuba Aleksey EpMAK Yermakov ruPaladin +BlackPixxel \ No newline at end of file diff --git a/addons/javelin/CfgWeapons.hpp b/addons/javelin/CfgWeapons.hpp index eccdd30623..cef967e32e 100644 --- a/addons/javelin/CfgWeapons.hpp +++ b/addons/javelin/CfgWeapons.hpp @@ -6,7 +6,8 @@ class CfgWeapons { class launch_Titan_base : Launcher_Base_F { weaponInfoType = "ACE_RscOptics_javelin"; - + modelOptics = PATHTOF(data\reticle_titan.p3d); + lockingTargetSound[] = {"",0,1}; lockedTargetSound[] = {"",0,1}; }; diff --git a/addons/javelin/data/reticle_titan.p3d b/addons/javelin/data/reticle_titan.p3d new file mode 100644 index 0000000000000000000000000000000000000000..afc0f6c9b492d2e698d244b1e30899ee13464e6d GIT binary patch literal 1416 zcmc&!Jx>Bb5Z&_=)Sp0ii9$qjN@Iu-jUtT%4N5F7A^4PJf1_iG>Yl zVPj%qO)RX8jkPu=#(Bcvu{2UScXKmuXLsH(yGv{{zOHFP&?~lr>oE^mfGIN2F<_Dx z?@GgS{v7sx&fNlkyw{q*(;bZX(_X75?!>P2Y~%IfIec~3UVr^~&~#$N@0VIVaVI`) zxRz&5-n#MR^!AMtBYu{7=!rWqY8K)++_wMk4^s&v9eqPx{(1<#h6204j>6;QLl4b` z5HPuYB7SM1b5!LA2WmJC#+6atKD#!(uBfot8hnXvbDaft{C gUmw0Ud|jLthnwfMSN-2t(<7x!JiAdS+IqK&Z`z*E!vFvP literal 0 HcmV?d00001 From 509b5e1a0531f37bf2a494c00c9dcb8061d80031 Mon Sep 17 00:00:00 2001 From: jaynus Date: Sun, 12 Apr 2015 14:12:21 -0700 Subject: [PATCH 177/214] Integration of lasers for vanilla laser designation as well. Remove debug. --- addons/laser/XEH_pre_init.sqf | 2 +- addons/laser/functions/fnc_laserTargetPFH.sqf | 4 ++-- addons/laser/functions/fnc_laser_init.sqf | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/addons/laser/XEH_pre_init.sqf b/addons/laser/XEH_pre_init.sqf index 242300791f..e160a533f2 100644 --- a/addons/laser/XEH_pre_init.sqf +++ b/addons/laser/XEH_pre_init.sqf @@ -23,7 +23,7 @@ PREP(laser_init); PREP(vanillaLaserSeekerHandler); PREP(laserTargetPFH); -ACE_LASERS = []; +GVAR(VanillaLasers) = []; // Laser default variables ACE_DEFAULT_LASER_CODE = 1001; diff --git a/addons/laser/functions/fnc_laserTargetPFH.sqf b/addons/laser/functions/fnc_laserTargetPFH.sqf index 15d0fa03d0..d73d9f070a 100644 --- a/addons/laser/functions/fnc_laserTargetPFH.sqf +++ b/addons/laser/functions/fnc_laserTargetPFH.sqf @@ -1,4 +1,4 @@ -#define DEBUG_MODE_FULL +//#define DEBUG_MODE_FULL #include "script_component.hpp" TRACE_1("enter", _this); @@ -11,7 +11,7 @@ _uuid = _args select 2; if(isNull _laserTarget || !alive _shooter) exitWith { [(_this select 1)] call cba_fnc_removePerFrameHandler; - REM(ACE_LASERS, _laserTarget); + REM(GVAR(VanillaLasers), _laserTarget); // Remove laseron [_uuid] call FUNC(laserOff); diff --git a/addons/laser/functions/fnc_laser_init.sqf b/addons/laser/functions/fnc_laser_init.sqf index 7c39c9be87..378ee38407 100644 --- a/addons/laser/functions/fnc_laser_init.sqf +++ b/addons/laser/functions/fnc_laser_init.sqf @@ -1,4 +1,4 @@ -#define DEBUG_MODE_FULL +//#define DEBUG_MODE_FULL #include "script_component.hpp" TRACE_1("enter", _this); @@ -7,7 +7,7 @@ PARAMS_1(_laserTarget); // Add the target to the global targets array // Everyone tracks them // Add the laser localized to the laser array, and give it the default localized code -PUSH(ACE_LASERS, _laserTarget); +PUSH(GVAR(VanillaLasers), _laserTarget); // Check the vehicle, otherwise use the default _laserTarget setVariable [QGVAR(code), ACE_DEFAULT_LASER_CODE, false]; @@ -15,7 +15,7 @@ _laserTarget setVariable [QGVAR(beamSpread), ACE_DEFAULT_LASER_BEAMSPREAD, false _laserTarget setVariable [QGVAR(waveLength), ACE_DEFAULT_LASER_WAVELENGTH, false]; // Clean the lasers of any null objects while we are here -REM(ACE_LASERS, objNull); +REM(GVAR(VanillaLasers), objNull); if(!(local _laserTarget)) exitWith { }; @@ -25,7 +25,7 @@ if(!isDedicated) then { _uuid = [(vehicle ACE_player), ACE_player, QFUNC(vanillaLaserSeekerHandler), ACE_DEFAULT_LASER_WAVELENGTH, ACE_DEFAULT_LASER_CODE, ACE_DEFAULT_LASER_BEAMSPREAD] call FUNC(laserOn); _laserTarget setVariable [QGVAR(uuid), _uuid, false]; - [FUNC(laserTargetPFH), 1, [_laserTarget, ACE_player, _uuid]] call cba_fnc_addPerFrameHandler; + [FUNC(laserTargetPFH), 0, [_laserTarget, ACE_player, _uuid]] call cba_fnc_addPerFrameHandler; } else { // server side ownership of laser _laserTarget setVariable [QGVAR(owner), nil, true]; From 7343805a6cd87bd42c9a92211977f281f247ab15 Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Sun, 12 Apr 2015 18:24:41 -0300 Subject: [PATCH 178/214] Added issue regarding mouse events handlers on displays --- documentation/development/arma-3-issues.md | 1 + 1 file changed, 1 insertion(+) diff --git a/documentation/development/arma-3-issues.md b/documentation/development/arma-3-issues.md index 8b7e0b3e2d..3b4a6f036b 100644 --- a/documentation/development/arma-3-issues.md +++ b/documentation/development/arma-3-issues.md @@ -19,6 +19,7 @@ Keeping track of Arma 3 issues that need to be fixed. If you want to support us * [commy2: 0022671: setVariable is not always JIP persistent](http://feedback.arma3.com/view.php?id=22671) * [CorruptedHeart: 0022318: Can no longer use "MenuBack" shortcut in AddAction](http://feedback.arma3.com/view.php?id=22318) * [James2464: 0023725: All Environment Rocks Should Have PhysX LODs](http://feedback.arma3.com/view.php?id=23725) +* [Jaynus: 0023679: Display event handler return values for mouse buttons should be respected](http://feedback.arma3.com/view.php?id=23679) **Resolved:** From 807ebd8bfe06beb66acd13d71306a4a5f1c2d50e Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sun, 12 Apr 2015 17:14:30 -0500 Subject: [PATCH 179/214] Resave reticle_titan in objectBuilder --- addons/javelin/data/reticle_titan.p3d | Bin 1416 -> 1440 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/addons/javelin/data/reticle_titan.p3d b/addons/javelin/data/reticle_titan.p3d index afc0f6c9b492d2e698d244b1e30899ee13464e6d..682296f0c82019ff462841e6b3d8299f747d35ab 100644 GIT binary patch literal 1440 zcmc&zJx>Bb5Z&_={Q3oSmmowWr!QCKgo2hFTjFah|YbIU9+E5B6r>&h5;*o4MFlJgg{;(VuMx!Z8!KC%d@SC9zrPh5;O-tr{CU4Q5SO_ly-Y=y4wyXSA7$_<$#{;=8{h|Bz} z?pT{YZTI6z_s*@%5kJp74#Z^+%|NG9{nr0ipRrm$&#=C%K|YK9Q4%%=afCLjg_y4r zL=Vs(aOY<=G)evltrLAY2u|(~@PJ-1dEPoMrVey&7{;wprYJp@02EFO(zC-?wP&$cK?Qto0(cLzg7ob0 zRqa{qRqSsZ{gpd{!oyYF-H1jNHId_md?b@Kiz>_Y)MI)9Of7uO8hkPBV%|_6J%V=Z z!D0^Bb5Z&_=)Sp0ii9$qjN@Iu-jUtT%4N5F7A^4PJf1_iG>Yl zVPj%qO)RX8jkPu=#(Bcvu{2UScXKmuXLsH(yGv{{zOHFP&?~lr>oE^mfGIN2F<_Dx z?@GgS{v7sx&fNlkyw{q*(;bZX(_X75?!>P2Y~%IfIec~3UVr^~&~#$N@0VIVaVI`) zxRz&5-n#MR^!AMtBYu{7=!rWqY8K)++_wMk4^s&v9eqPx{(1<#h6204j>6;QLl4b` z5HPuYB7SM1b5!LA2WmJC#+6atKD#!(uBfot8hnXvbDaft{C gUmw0Ud|jLthnwfMSN-2t(<7x!JiAdS+IqK&Z`z*E!vFvP From 9e6d2638066e667acb41a3cf7ba9d77f259b3408 Mon Sep 17 00:00:00 2001 From: ViperMaul Date: Sun, 12 Apr 2015 15:40:57 -0700 Subject: [PATCH 180/214] Allowing automatic resume on error when one module fails to build. --- tools/make.py | 1 - tools/make64.py | 1 - 2 files changed, 2 deletions(-) diff --git a/tools/make.py b/tools/make.py index cdd2de22ed..65f447bff9 100644 --- a/tools/make.py +++ b/tools/make.py @@ -675,7 +675,6 @@ See the make.cfg file for additional build options. if not build_successful: print_error("pboProject return code == " + str(ret)) print_error("Module not successfully built/signed.") - input("Press Enter to continue...") print ("Resuming build...") continue diff --git a/tools/make64.py b/tools/make64.py index 61dee96310..0382bb9179 100644 --- a/tools/make64.py +++ b/tools/make64.py @@ -675,7 +675,6 @@ See the make.cfg file for additional build options. if not build_successful: print_error("pboProject return code == " + str(ret)) print_error("Module not successfully built/signed.") - input("Press Enter to continue...") print ("Resuming build...") continue From 638868b3da3bf1285b3e5f39f353b8f67bb05e7f Mon Sep 17 00:00:00 2001 From: Anthariel Date: Mon, 13 Apr 2015 00:41:50 +0200 Subject: [PATCH 181/214] Update stringtable.xml Added: French translation (100%). --- addons/laser_selfdesignate/stringtable.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/addons/laser_selfdesignate/stringtable.xml b/addons/laser_selfdesignate/stringtable.xml index 70f8912cfe..8fb80b1b2a 100644 --- a/addons/laser_selfdesignate/stringtable.xml +++ b/addons/laser_selfdesignate/stringtable.xml @@ -4,9 +4,11 @@ Laser<br/>Designator On + Désignateur<br/>Laser Allumé Laser<br/>Designator Off + Désignateur<br/>Laser Éteint - \ No newline at end of file + From 2ec9b9408321a9c786b0449edcbcd9b4bc7efef9 Mon Sep 17 00:00:00 2001 From: Anthariel Date: Mon, 13 Apr 2015 01:18:04 +0200 Subject: [PATCH 182/214] Update stringtable.xml Fixed: Wrong translation (thx Dirtyhank) --- addons/switchunits/stringtable.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/switchunits/stringtable.xml b/addons/switchunits/stringtable.xml index acf6e51805..185ab1dff4 100644 --- a/addons/switchunits/stringtable.xml +++ b/addons/switchunits/stringtable.xml @@ -3,7 +3,7 @@ Switched unit - Unité à transférée + Unité à transférer Einheit gewechselt Юнит переключен Prohozená jednotka From 9bb865a73fe54e5250e7c466c21ac877341b0c94 Mon Sep 17 00:00:00 2001 From: Anthariel Date: Mon, 13 Apr 2015 01:18:24 +0200 Subject: [PATCH 183/214] Update stringtable.xml --- addons/switchunits/stringtable.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/switchunits/stringtable.xml b/addons/switchunits/stringtable.xml index 185ab1dff4..77f730a637 100644 --- a/addons/switchunits/stringtable.xml +++ b/addons/switchunits/stringtable.xml @@ -12,7 +12,7 @@ This unit is too close to the enemy. - Cette unité est trop prêt d'un ennemi. + Cette unité est trop près d'un ennemi. Diese Einheit ist zu nah am Feind. Юнит слишком близок к противнику Tato jednotka je moc blízko k nepříteli. From 4bd489cd966b5711d084aa29c3b4b76e8f9d0dbf Mon Sep 17 00:00:00 2001 From: jaynus Date: Sun, 12 Apr 2015 16:18:39 -0700 Subject: [PATCH 184/214] Fixed: Javelin CLU UI should have been a PFH not a draw. Migrated. Closes #531 --- addons/javelin/RscInGameUI.hpp | 9 +---- addons/javelin/functions/fnc_onOpticDraw.sqf | 38 ++++++++++++++------ addons/javelin/functions/fnc_onOpticLoad.sqf | 8 ++++- 3 files changed, 35 insertions(+), 20 deletions(-) diff --git a/addons/javelin/RscInGameUI.hpp b/addons/javelin/RscInGameUI.hpp index e208e18834..8c73f3d8d1 100644 --- a/addons/javelin/RscInGameUI.hpp +++ b/addons/javelin/RscInGameUI.hpp @@ -14,7 +14,7 @@ class RscInGameUI { idd = 300; controls[] = { "ACE_javelin_elements_group", "CA_Distance", "ACE_Targeting" }; //, "ACE_TargetingConstrains", "ACE_TargetingGate", "ACE_TargetingLines"}; onLoad = QUOTE(_this call FUNC(onOpticLoad)); - onUnload = "uiNameSpace setVariable ['ACE_RscOptics_javelin',nil];"; + onUnload = "uiNameSpace setVariable ['ACE_RscOptics_javelin',nil];uiNameSpace setVariable ['ACE_RscOptics_javelin_PFH',nil];"; class CA_Distance: RscOpticsValue { idc = 151; @@ -45,13 +45,6 @@ class RscInGameUI { height = 0.001; }; class Controls { - class JavelinLocking : RscMapControl { - onDraw = QUOTE(_this call FUNC(onOpticDraw)); - idc = -1; - w = 0; - h = 0; - }; - class ACE_javelin_Day_mode_off: RscPicture { idc = 1001; x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.03/4)*3*SafezoneH - SafezoneX"; diff --git a/addons/javelin/functions/fnc_onOpticDraw.sqf b/addons/javelin/functions/fnc_onOpticDraw.sqf index a319c61de5..643c12e4c3 100644 --- a/addons/javelin/functions/fnc_onOpticDraw.sqf +++ b/addons/javelin/functions/fnc_onOpticDraw.sqf @@ -1,6 +1,6 @@ -//#define DEBUG_MODE_FULL +#define DEBUG_MODE_FULL #include "script_component.hpp" -//TRACE_1("enter", _this); +TRACE_1("enter", _this); #define __TRACKINTERVAL 0 // how frequent the check should be. #define __LOCKONTIME 3.0 // Lock on won't occur sooner @@ -10,7 +10,19 @@ #define __OffsetX ((ctrlPosition __JavelinIGUITargetingLineV) select 0) - 0.5 #define __OffsetY ((ctrlPosition __JavelinIGUITargetingLineH) select 1) - 0.5 -private["_args", "_lastTick", "_runTime", "_soundTime", "_lockTime", "_newTarget", "_currentTarget", "_range", "_pos", "_targetArray"]; +private["_isJavelin", "_args", "_lastTick", "_runTime", "_soundTime", "_lockTime", "_newTarget", "_currentTarget", "_range", "_pos", "_targetArray"]; + +if( ! ([ (configFile >> "CfgWeapons" >> (currentWeapon (vehicle ACE_player)) ), "launch_Titan_base"] call EFUNC(common,inheritsFrom)) + || { (vehicle ACE_player) != ACE_player } + ) exitWith { + __JavelinIGUITargeting ctrlShow false; + __JavelinIGUITargetingGate ctrlShow false; + __JavelinIGUITargetingLines ctrlShow false; + __JavelinIGUITargetingConstraints ctrlShow false; + + [(_this select 1)] call cba_fnc_removePerFrameHandler; + uiNamespace setVariable["ACE_RscOptics_javelin_PFH", nil]; +}; // Reset arguments if we havnt rendered in over a second _args = uiNamespace getVariable[QGVAR(arguments), [] ]; @@ -21,6 +33,8 @@ if( (count _args) > 0) then { }; }; +TRACE_1("Running", "Running"); + // Pull the arguments _currentTarget = _args select 1; _runTime = _args select 2; @@ -37,9 +51,6 @@ if ((velocity ACE_player) distance [0,0,0] > 0.5 && {cameraView == "GUNNER"} && // Refresh the firemode [] call FUNC(showFireMode); - -// Only start locking on holding tab -if(!GVAR(isLockKeyDown)) exitWith { false }; _range = parseNumber (ctrlText __JavelinIGUIRangefinder); if (_range > 50 && {_range < 2500}) then { @@ -73,8 +84,10 @@ if (isNull _newTarget) then { __JavelinIGUISeek ctrlSetTextColor __ColorGray; __JavelinIGUINFOV ctrlSetTextColor __ColorGreen; + __JavelinIGUITargeting ctrlShow false; __JavelinIGUITargetingGate ctrlShow false; __JavelinIGUITargetingLines ctrlShow false; + __JavelinIGUITargetingConstraints ctrlShow false; ACE_player setVariable ["ace_missileguidance_target",nil, false]; @@ -82,8 +95,9 @@ if (isNull _newTarget) then { //if (ACE_player ammo "Javelin" > 0 || {ACE_player ammo "ACE_Javelin_Direct" > 0}) then {ACE_player setWeaponReloadingTime //[player, "Javelin", 0.2];}; } else { if (_newTarget distance ACE_player < 2500 - // && {(call CBA_fnc_getFoV) select 1 > 7} - // && { (currentVisionMode ACE_player == 2)} + && {(call CBA_fnc_getFoV) select 1 > 9} + && { (currentVisionMode ACE_player == 2)} + && GVAR(isLockKeyDown) ) then { // Lock on after 3 seconds if(_currentTarget != _newTarget) then { @@ -98,8 +112,9 @@ if (isNull _newTarget) then { __JavelinIGUISeek ctrlSetTextColor __ColorGreen; __JavelinIGUINFOV ctrlSetTextColor __ColorNull; + __JavelinIGUITargeting ctrlShow true; - __JavelinIGUITargetingConstrains ctrlShow true; + __JavelinIGUITargetingConstrains ctrlShow false; __JavelinIGUITargetingGate ctrlShow true; __JavelinIGUITargetingLines ctrlShow true; @@ -187,10 +202,11 @@ if (isNull _newTarget) then { } else { // Something is wrong with our seek _currentTarget = objNull; - + ACE_player setVariable["ace_missileguidance_target", nil, false]; + __JavelinIGUISeek ctrlSetTextColor __ColorGray; __JavelinIGUINFOV ctrlSetTextColor __ColorGray; - __JavelinIGUITargetingConstrains ctrlShow false; + __JavelinIGUITargeting ctrlShow false; __JavelinIGUITargetingGate ctrlShow false; __JavelinIGUITargetingLines ctrlShow false; diff --git a/addons/javelin/functions/fnc_onOpticLoad.sqf b/addons/javelin/functions/fnc_onOpticLoad.sqf index 49e9a25e61..a12d0ef176 100644 --- a/addons/javelin/functions/fnc_onOpticLoad.sqf +++ b/addons/javelin/functions/fnc_onOpticLoad.sqf @@ -24,4 +24,10 @@ uiNameSpace setVariable [QGVAR(arguments), 0, // Lock Time 0 // Sound timer ] -]; \ No newline at end of file +]; + +_pfh_handle = uiNamespace getVariable ["ACE_RscOptics_javelin_PFH", nil]; +if(isNil "_pfh_handle") then { + _pfh_handle = [FUNC(onOpticDraw), 0, []] call CBA_fnc_addPerFrameHandler; + uiNamespace setVariable["ACE_RscOptics_javelin_PFH", _pfh_handle]; +}; \ No newline at end of file From 9a25fb4f2f55ce5221cb20a76a4c171db8658f90 Mon Sep 17 00:00:00 2001 From: jaynus Date: Sun, 12 Apr 2015 16:19:18 -0700 Subject: [PATCH 185/214] Remove debug. --- addons/javelin/functions/fnc_onOpticDraw.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/javelin/functions/fnc_onOpticDraw.sqf b/addons/javelin/functions/fnc_onOpticDraw.sqf index 643c12e4c3..2412c2d5a1 100644 --- a/addons/javelin/functions/fnc_onOpticDraw.sqf +++ b/addons/javelin/functions/fnc_onOpticDraw.sqf @@ -1,4 +1,4 @@ -#define DEBUG_MODE_FULL +//#define DEBUG_MODE_FULL #include "script_component.hpp" TRACE_1("enter", _this); From d50bff866b4e51c745eb1f3ddb1fc4ed2a092507 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sun, 12 Apr 2015 18:27:21 -0500 Subject: [PATCH 186/214] addToInventory use addMagazineArray -maybe fix #530 --- .../common/functions/fnc_addToInventory.sqf | 45 +++++++++---------- 1 file changed, 20 insertions(+), 25 deletions(-) diff --git a/addons/common/functions/fnc_addToInventory.sqf b/addons/common/functions/fnc_addToInventory.sqf index b28d864df8..c7fff21a30 100644 --- a/addons/common/functions/fnc_addToInventory.sqf +++ b/addons/common/functions/fnc_addToInventory.sqf @@ -4,9 +4,10 @@ * or places it in a weaponHolder if no space. * * Arguments: - * 0: Unit (OBJECT) - * 1: Classname (String) - * 2: Container (String, Optional) uniform, vest, backpack + * 0: Unit + * 1: Classname + * 2: Container (uniform, vest, backpack) + * 3: Magazine Ammo Count * * Return Value: * Array: @@ -19,6 +20,9 @@ #include "script_component.hpp" EXPLODE_2_PVT(_this,_unit,_classname); +DEFAULT_PARAM(2,_container,""); +DEFAULT_PARAM(3,_ammoCount,-1); + private "_addedToPlayer"; private "_container"; private "_canAdd"; @@ -27,29 +31,19 @@ private "_type"; _canAdd = false; _addedToPlayer = true; -if((count _this) > 2) then { - _container = _this select 2; -} else { - _container = nil; -}; - _type = [_classname] call EFUNC(common,getItemType); -if(!isNil "_container") then { - switch (_container) do { - case "vest": { _canAdd = _unit canAddItemToVest _classname; }; - case "backpack": { _canAdd = _unit canAddItemToBackpack _classname; }; - case "uniform": { _canAdd = _unit canAddItemToUniform _classname; }; - }; -} else { - _container = ""; - _canAdd = _unit canAdd _classname; +switch (_container) do { + case "vest": { _canAdd = _unit canAddItemToVest _classname; }; + case "backpack": { _canAdd = _unit canAddItemToBackpack _classname; }; + case "uniform": { _canAdd = _unit canAddItemToUniform _classname; }; + default {_canAdd = _unit canAdd _classname;}; }; switch ((_type select 0)) do { case "weapon": { if (_canAdd) then { - switch (_container) do { + switch (_container) do { case "vest": { (vestContainer _unit) addWeaponCargoGlobal [_classname, 1]; }; case "backpack": { (backpackContainer _unit) addWeaponCargoGlobal [_classname, 1]; }; case "uniform": { (uniformContainer _unit) addWeaponCargoGlobal [_classname, 1]; }; @@ -64,24 +58,25 @@ switch ((_type select 0)) do { }; }; case "magazine": { + if (_ammoCount == -1) then {_ammoCount = getNumber (configFile >> "CfgMagazines" >> _classname >> "count");}; if (_canAdd) then { switch (_container) do { - case "vest": { (vestContainer _unit) addMagazineCargoGlobal [_classname, 1]; }; - case "backpack": { (backpackContainer _unit) addMagazineCargoGlobal [_classname, 1]; }; - case "uniform": { (uniformContainer _unit) addMagazineCargoGlobal [_classname, 1]; }; - default { _unit addMagazineGlobal _classname; }; + case "vest": { (vestContainer _unit) addMagazineCargoGlobal [_classname, _ammoCount]; }; + case "backpack": { (backpackContainer _unit) addMagazineCargoGlobal [_classname, _ammoCount]; }; + case "uniform": { (uniformContainer _unit) addMagazineCargoGlobal [_classname, _ammoCount]; }; + default {_unit addMagazine [_classname, _ammoCount]; }; }; } else { _addedToPlayer = false; _pos = _unit modelToWorldVisual [0,1,0.05]; _unit = createVehicle ["WeaponHolder_Single_F",_pos,[],0,"NONE"]; - _unit addMagazineCargoGlobal [_classname, 1]; + _unit addMagazineCargoGlobal [_classname, _ammoCount]; _unit setPosATL _pos; }; }; case "item": { if (_canAdd) then { - switch (_container) do { + switch (_container) do { case "vest": { _unit addItemToVest _classname; }; case "backpack": { _unit addItemToBackpack _classname; }; case "uniform": { _unit addItemToUniform _classname; }; From 74967910a30be139fbd6e3ab4fb02427699e5cb2 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sun, 12 Apr 2015 18:27:55 -0500 Subject: [PATCH 187/214] opps --- addons/common/functions/fnc_addToInventory.sqf | 1 - 1 file changed, 1 deletion(-) diff --git a/addons/common/functions/fnc_addToInventory.sqf b/addons/common/functions/fnc_addToInventory.sqf index c7fff21a30..339055487b 100644 --- a/addons/common/functions/fnc_addToInventory.sqf +++ b/addons/common/functions/fnc_addToInventory.sqf @@ -24,7 +24,6 @@ DEFAULT_PARAM(2,_container,""); DEFAULT_PARAM(3,_ammoCount,-1); private "_addedToPlayer"; -private "_container"; private "_canAdd"; private "_type"; From c2253cf199521b2a5d9ede902e696471b81ca36b Mon Sep 17 00:00:00 2001 From: Anthariel Date: Mon, 13 Apr 2015 01:30:16 +0200 Subject: [PATCH 188/214] Update stringtable.xml --- addons/overheating/stringtable.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/overheating/stringtable.xml b/addons/overheating/stringtable.xml index 0afb99c447..5e83a1db31 100644 --- a/addons/overheating/stringtable.xml +++ b/addons/overheating/stringtable.xml @@ -4,7 +4,7 @@ Display text on jam - Afficher un text à la surchauffe + Afficher un texte à la surchauffe Display a notification whenever your weapon gets jammed From bd28f08559678a18f1047d87ec303f98fb5c53f3 Mon Sep 17 00:00:00 2001 From: Anthariel Date: Mon, 13 Apr 2015 01:30:50 +0200 Subject: [PATCH 189/214] Update stringtable.xml --- addons/movement/stringtable.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/movement/stringtable.xml b/addons/movement/stringtable.xml index 6dc8cd5c15..822f74b611 100644 --- a/addons/movement/stringtable.xml +++ b/addons/movement/stringtable.xml @@ -37,7 +37,7 @@ Can't climb here - Je ne peut pas monter ici + je ne peux pas monter ici Kann hier nicht klettern Nie możesz wspiąć się tutaj No se puede trepar aquí From 0e925bc006d164a1eaf0141b12c184e8b09e5261 Mon Sep 17 00:00:00 2001 From: Anthariel Date: Mon, 13 Apr 2015 01:31:49 +0200 Subject: [PATCH 190/214] Update stringtable.xml --- addons/microdagr/stringtable.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/microdagr/stringtable.xml b/addons/microdagr/stringtable.xml index e2ec9b20d9..ac2279a4f9 100644 --- a/addons/microdagr/stringtable.xml +++ b/addons/microdagr/stringtable.xml @@ -84,7 +84,7 @@ Connect To - Connexion a + Connexion à Settings From db5d54dffd309b9bf4e3f7c52a7693c26c013ec3 Mon Sep 17 00:00:00 2001 From: jaynus Date: Sun, 12 Apr 2015 16:38:43 -0700 Subject: [PATCH 191/214] Only allow for laser designator for vanilla compensation. --- addons/laser/functions/fnc_vanillaLaserSeekerHandler.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/laser/functions/fnc_vanillaLaserSeekerHandler.sqf b/addons/laser/functions/fnc_vanillaLaserSeekerHandler.sqf index bbd36bd92d..38cd1839f9 100644 --- a/addons/laser/functions/fnc_vanillaLaserSeekerHandler.sqf +++ b/addons/laser/functions/fnc_vanillaLaserSeekerHandler.sqf @@ -19,8 +19,8 @@ _owner = _this select 1; // Not in a vehicle.... // @TODO: handle lasering from turrets -if( (vehicle _owner) == _owner && alive _owner ) exitWith { - [(eyePos _owner), (eyeDirection _owner)] +if( (vehicle _emmiter) == _emmiter && alive _emmiter && (currentWeapon _emmiter) == "LaserDesignator") exitWith { + [(eyePos _emmiter), (eyeDirection _emmiter)] }; [-1,-1] \ No newline at end of file From fd4cb50d3d9d6ca82a88425261a6424f962df831 Mon Sep 17 00:00:00 2001 From: jaynus Date: Sun, 12 Apr 2015 16:44:39 -0700 Subject: [PATCH 192/214] Remove thermal, prep for coding. --- addons/laser/CfgWeapons.hpp | 14 +++++++------- addons/laser/RscInGameUI.hpp | 1 + 2 files changed, 8 insertions(+), 7 deletions(-) create mode 100644 addons/laser/RscInGameUI.hpp diff --git a/addons/laser/CfgWeapons.hpp b/addons/laser/CfgWeapons.hpp index ede7ee0a3c..70a25e6f85 100644 --- a/addons/laser/CfgWeapons.hpp +++ b/addons/laser/CfgWeapons.hpp @@ -1,8 +1,8 @@ -/* -class Default; -class Item_Base_F; -class Laserdesignator_mounted : Default {}; -class Item_Laserdesignator : Item_Base_F {}; - -*/ \ No newline at end of file +class CfgWeapons { + class Binocular; + + class Laserdesignator : Binocular { + visionMode[] = {"Normal","NVG"}; + }; +}; diff --git a/addons/laser/RscInGameUI.hpp b/addons/laser/RscInGameUI.hpp new file mode 100644 index 0000000000..457d320520 --- /dev/null +++ b/addons/laser/RscInGameUI.hpp @@ -0,0 +1 @@ +// TODO: RscOptics_LaserDesignator for laser code designation \ No newline at end of file From 77058857e67ffbaa81b7b2b111c5101604814499 Mon Sep 17 00:00:00 2001 From: Anthariel Date: Mon, 13 Apr 2015 02:02:19 +0200 Subject: [PATCH 193/214] Update stringtable.xml Wrong translation --- addons/medical/stringtable.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 0c4ea4c5bb..0566c1eb14 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -14,7 +14,7 @@ Wtrzyknij adrenalinę Aplikovat Adrenalin Ввести андреналил - Adrénaline + Injecter de l'épinéphrine Adrenalin Injetar Epinefrina Inietta Epinefrina From 98acdc40894ff412a887b27e328bb25af4a7dd22 Mon Sep 17 00:00:00 2001 From: Nou Date: Sun, 12 Apr 2015 17:03:11 -0700 Subject: [PATCH 194/214] M22 binocular mil reticle ported from ACE2. --- addons/optics/CfgWeapons.hpp | 17 +++++++++++++++++ addons/optics/models/NWD_M22_5x.p3d | Bin 0 -> 10405 bytes addons/optics/reticles/4x_M22.paa | Bin 0 -> 31448 bytes addons/optics/reticles/M22_font.paa | Bin 0 -> 22016 bytes addons/optics/reticles/bino_dirt.paa | Bin 0 -> 91640 bytes addons/optics/reticles/bino_ring.paa | Bin 0 -> 55661 bytes 6 files changed, 17 insertions(+) create mode 100644 addons/optics/models/NWD_M22_5x.p3d create mode 100644 addons/optics/reticles/4x_M22.paa create mode 100644 addons/optics/reticles/M22_font.paa create mode 100644 addons/optics/reticles/bino_dirt.paa create mode 100644 addons/optics/reticles/bino_ring.paa diff --git a/addons/optics/CfgWeapons.hpp b/addons/optics/CfgWeapons.hpp index 29a3ff8c98..e42ae3780f 100644 --- a/addons/optics/CfgWeapons.hpp +++ b/addons/optics/CfgWeapons.hpp @@ -2,6 +2,23 @@ class CfgWeapons { class ItemCore; class InventoryOpticsItem_Base_F; + class Default; + + class Binocular: Default { + forceOptics = 0; // Allow using compass with Binocular + opticsZoomMin = 0.056889; // 5.25x power + opticsZoomMax = 0.056889; // 9 px/mil + modelOptics = "\z\ace\addons\optics\models\NWD_M22_5x"; // 7 horizontal field of view + visionMode[] = {"Normal"}; // Can't use nvgs with binoculars any more than you can with scopes + // Fix AI using Binocs on short range - #18737 + // minRange = 300; // 300 = uses Rangefinder often (runs a few meters, stops, uses RF, repeats) + minRange = 500; //500 = seem almost never use it..? + minRangeProbab = 0.001; + midRange = 1000; + midRangeProbab = 0.01; + maxRange = 5000; + maxRangeProbab = 0.01; + }; // zooming reticle scopes class optic_DMS: ItemCore { diff --git a/addons/optics/models/NWD_M22_5x.p3d b/addons/optics/models/NWD_M22_5x.p3d new file mode 100644 index 0000000000000000000000000000000000000000..b6df76e30bc1248bf28fa1e585658189f100aa8a GIT binary patch literal 10405 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 O>0bpjl$+J`(f$vV<+pJF literal 0 HcmV?d00001 diff --git a/addons/optics/reticles/M22_font.paa b/addons/optics/reticles/M22_font.paa new file mode 100644 index 0000000000000000000000000000000000000000..539907d61fedca8cb49db4bde245cbe56260e118 GIT binary patch literal 22016 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 z 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 literal 0 HcmV?d00001 diff --git a/addons/optics/reticles/bino_ring.paa b/addons/optics/reticles/bino_ring.paa new file mode 100644 index 0000000000000000000000000000000000000000..53499af7ce29e73dbc152e5db31f66023fda4818 GIT binary patch literal 55661 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≪@Cg?#S1HMV^!5O5DlQ%I@#Q!5nCHmqt&yQ&W9A@8|;AhC^XFBSS z@Yf0d)+16q{(Y3P|5oAqt;0VO>ybP@Uy*Z=@12=E-k)qICru{ow*X?qubxfdbN4i~ zKT5P`YGqI1NKu|1^2hYYA9&+1%LM+JgVeXr+A@lczaR431o^?^pDKX7-Z6!53+c}5 z@gni*l6%q{CVHC_BYP|M4x*zd41m73A|-(JpO;Z2Y7Bz=<_u<;qb}53H&NY z^}k+%`cFrb@Gs2n-v)oV(&<9+7At|t#K4D#~*v0IyVn=dBx@9kx=91)(sO$Gh=T{);f-Z@#< za!TU-C{B^Be{Fk0KBNiipbu_N=xh2Ia#xb&H#u|bpNGG{h+e*S{83lp!7ee+@0Ws| znV;GUd3*i9G6aO4P4M4c)*Ri@B>tbq0neoCx}5&}JY3ozZ)qCxYMz?H(@VOrPIo*> zzeAosfP-9k`3?IFXPW;1!TWl8_{#CWj^871_LuMPZb1Ifwx@agAD)BLZ<6@Eq9m3V z#a}N`*r5Ltcoq!kFAuUaaDpmwfa3g~DayeSMhSX?y@r&mr}_0mY`ujD-}wF4&&U6_ z_E(Po74Um!g5P`hlhb2&m&WIN-(CIjwNL5ap3L=^2g+fw>%9MCm>Bes#NUwb-oVTIuX{efYtR2* z;~%C{>!`&3TDS}Rp0k^`?_O9=@G|iDt(aB^{!QRJMce;6Hw=kU+n(m{&ynC%s3d*y zIluGQ3BQ;99ly8p{Qh0T_4-#$UtbpQ>+g@e+bRB3hT^H{7~!`Q z4LE2hiN9A?wyZNJ;XmDA+t{0Qoy+Tw?=Y!NSav4C@8VRP2(&P)ViNwG&|h&TWfJ}`+}9ufMbp9mPbToRYH-9)68_4e zII1eCJva-e<0aV(nJLKNZA!=kBJcMhWjao8*W^8^J90zb|0DYD3-SJ3gU07K8lqBL zs7yYds`q)Ewt)oa`1O5v1Am-o6mQR)1paLj@@?ZtBJUH|3kKnSuzdXf0hu;cTAOFYuJ7Pe8 z`e4%ge?LvwzkLJ$YkE8dbH`+JmgUo;&e~4N6t)mBoiQ&V$ znWLxC@{Z%p1ccNh4e~$vw7Ss4xPJUSew+Vat{|tXIOAJ8zV}EPr{~cDa&()_eqY)MikguWrvKjU-kq;qOoZ7#IxgqMLx}S!JhmPCUBuGk$!Tbl3CA^pHZyUO3v32%{EIREI7p z%o5xDjmcp=*SG(-^#38~+2Xmv)APjzB#bSwE%|Us|M6Of=9DLgow4b$utOeC35~GC zq_hJOB~u^&(cAp^vF!ay!wkRl`1?S}lt><@zaM|>x%w;S*SuNxl&QrMO$x)FnrlOt zT_UU}KP?uv%a1pcMmy<#A!R!;vf`Ty%lNY6e=h8~`m?GYo}b^Ej%|#jZOu7(BupU@ zc2tyUGnFNUor%eKljZ|%%!cBmFmN)vdLi?cq16RIgXeFMCeT2Hr_-?Fts{q_BkiR5Jbq{^@i}(0nlww)$<`ruf3~ z@A78;C23o~rL<)?!fbfFCk(*&lia*A5#0K3C)~ckyRd9;LjHdd9^dr!FB*TJMF=hf9NFKk zF+8Kcn-vN||0-_=TvmE_y_S?6v??d(#j8oxAIe2te?A&XnCZnr?{ghr z;{7Y}KA4&O`_2vRZ#J1y(Z)evar^|bQ{!k#d?Mb)$j^NlGx#lH)<*l%;@|HxR2w2V zF(BS96ZC(78rAZOvhp7{+x~9;Z>Q3qrx<>B>Fxngqdz>tzh6SNj8(c4W-;~oC*Hp= z+rIw&m&&U*mZEZJ{CNf;qE*i(%oriHxV@<22tVIn_I=miA4N74qN#W@>n;7sb>2X^P@ajL}y|kjS26{_0u@AFB*NE8O*bx>>ZG$ zAVHQKb?gIDrz$?pKfg%Gu9ts4^V%cU148at{JMx*@pdv9|J^j2y;6=6j*8!3NUdmB zIuG(>bN&6-x6`R~;uftvPeyrx?}qH{X!KWuD4v@Jg1;K{^ literal 0 HcmV?d00001 From 67be3403600ea24b6ff6249691a99956af8c9bed Mon Sep 17 00:00:00 2001 From: Anthariel Date: Mon, 13 Apr 2015 02:05:15 +0200 Subject: [PATCH 195/214] Update stringtable.xml --- addons/interaction/stringtable.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/interaction/stringtable.xml b/addons/interaction/stringtable.xml index b16839ccd2..36bb99ffd4 100644 --- a/addons/interaction/stringtable.xml +++ b/addons/interaction/stringtable.xml @@ -655,7 +655,7 @@ Interact - Intéragir + Interagir Interagiere Interakce Взаимодействовать From 161866a8e569cd1afe59a0dbb14101d23cdc96a3 Mon Sep 17 00:00:00 2001 From: Anthariel Date: Mon, 13 Apr 2015 02:05:36 +0200 Subject: [PATCH 196/214] Update stringtable.xml --- addons/inventory/stringtable.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/inventory/stringtable.xml b/addons/inventory/stringtable.xml index d3d06a7808..c327ea2253 100644 --- a/addons/inventory/stringtable.xml +++ b/addons/inventory/stringtable.xml @@ -8,7 +8,7 @@ Normally inventory display is scaled by UI size. This allows scaling the Inventory UI size up, but doesn't increase font size allowing more rows displayed. - Normalement, l'inventaire est automatiquement messuré par la taille de l'interface de l'utilisateur. Cette option vous permet d'augmenter la taille d'affichage de l'inventaire, cependant, cette option n'augmente pas la police d'écriture et le nombre de place. + Normalement, l'inventaire est automatiquement mesuré par la taille de l'interface de l'utilisateur. Cette option vous permet d'augmenter la taille d'affichage de l'inventaire, cependant, cette option n'augmente pas la police d'écriture et le nombre de place. From 7523dd011faaf3f366622e03876629c133106d80 Mon Sep 17 00:00:00 2001 From: Anthariel Date: Mon, 13 Apr 2015 02:06:17 +0200 Subject: [PATCH 197/214] Update stringtable.xml --- addons/common/stringtable.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index 07cc1e3b71..544bfbf981 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -329,7 +329,7 @@ Set the desired location of the progress bar on your screen. - Définisez l'endroit que vous désirer pour faire appraître la barre de progression. + Définisez l'endroit que vous désirez pour faire appraître la barre de progression. Hint Background color From e176df463699aa25385f12a5ecbd2772c8490862 Mon Sep 17 00:00:00 2001 From: Anthariel Date: Mon, 13 Apr 2015 02:10:23 +0200 Subject: [PATCH 198/214] Update stringtable.xml --- addons/disposable/stringtable.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/disposable/stringtable.xml b/addons/disposable/stringtable.xml index 8b6c032961..50c0ca2415 100644 --- a/addons/disposable/stringtable.xml +++ b/addons/disposable/stringtable.xml @@ -25,7 +25,7 @@ Preloaded Missile Dummy Preloaded Missile Dummy - Preloaded Missile Dummy + Missile préchargé Dummy Preloaded Missile Dummy Preloaded Missile Dummy Preloaded Missile Dummy @@ -33,4 +33,4 @@ Заряженная ракетная пустышка - \ No newline at end of file + From d9f9dffbc0609238576d720ac322cd109392dbcf Mon Sep 17 00:00:00 2001 From: Anthariel Date: Mon, 13 Apr 2015 02:11:12 +0200 Subject: [PATCH 199/214] Update stringtable.xml --- addons/aircraft/stringtable.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/aircraft/stringtable.xml b/addons/aircraft/stringtable.xml index 4d1c49fff6..c0966ddcfb 100644 --- a/addons/aircraft/stringtable.xml +++ b/addons/aircraft/stringtable.xml @@ -40,7 +40,7 @@ Close Cargo Door Laderampe schließen Cerrar compuerta de carga - Fermer Rampe Cargo + Fermer la Rampe du Cargo Zamknij drzwi ładowni Zavřít nákladní prostor Rámpát zárni From 2939862e8c9dba4433ab3e4f3496f09e25bee631 Mon Sep 17 00:00:00 2001 From: Anthariel Date: Mon, 13 Apr 2015 02:12:56 +0200 Subject: [PATCH 200/214] Update stringtable.xml --- addons/dragging/stringtable.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/addons/dragging/stringtable.xml b/addons/dragging/stringtable.xml index 9193d2712e..53c0abf5b6 100644 --- a/addons/dragging/stringtable.xml +++ b/addons/dragging/stringtable.xml @@ -30,12 +30,13 @@ Item to heavy Gegenstand zu schwer Articulo demasiado pesado + Objet trop lourd Dieser Gegenstand kann nicht gezogen werden, da er zu schwer ist. Não é possível carregar o item devido a seu peso Non è possibile trascinare l'oggetto a causa del suo peso From 7a8cd684a3d9ff6744ffc92f41d98af3bd061f83 Mon Sep 17 00:00:00 2001 From: Anthariel Date: Mon, 13 Apr 2015 02:19:58 +0200 Subject: [PATCH 201/214] Update stringtable.xml --- addons/wep_javelin/stringtable.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/wep_javelin/stringtable.xml b/addons/wep_javelin/stringtable.xml index 4068d6f0a6..a2f9f5261c 100644 --- a/addons/wep_javelin/stringtable.xml +++ b/addons/wep_javelin/stringtable.xml @@ -5,7 +5,7 @@ Lock Target (Hold) Lock Target (Hold) - Lock Target (Hold) + Vérouiller la Cible (Maintenir) Lock Target (Hold) Lock Target (Hold) Lock Target (Hold) @@ -14,7 +14,7 @@ Cycle Fire Mode Cycle Fire Mode - Cycle Fire Mode + Mode de Tir (Cycle) Cycle Fire Mode Cycle Fire Mode Cycle Fire Mode From 8339d15087004b28d07e3334b750d7fdbd1030ed Mon Sep 17 00:00:00 2001 From: Anthariel Date: Mon, 13 Apr 2015 02:21:57 +0200 Subject: [PATCH 202/214] Update stringtable.xml Added: French translations (note, I've already removed a % at the line 30 --- addons/winddeflection/stringtable.xml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/addons/winddeflection/stringtable.xml b/addons/winddeflection/stringtable.xml index b52100046f..2ebdefb4ea 100644 --- a/addons/winddeflection/stringtable.xml +++ b/addons/winddeflection/stringtable.xml @@ -4,26 +4,31 @@ Wind Information + Informations sur le Vent Informacje o wietrze Información del viento Direction: %1 + Direction : %1 Kierunek: %1 Dirección: %1 Speed: %1 m/s + Vitesse : %1 m/s Prędkość: %1 Velocidad: %1 m/s Weather Information + Informations sur la Météo Informacje o pogodzie Información Meteorológica - Humidity: %1% + Humidity: %1 + Humidité : %1 Wilgotność: %1 Humedad: %1% From 3e8c8384cf21a5135b1bf1c07e9426b3a78b3846 Mon Sep 17 00:00:00 2001 From: Anthariel Date: Mon, 13 Apr 2015 02:24:13 +0200 Subject: [PATCH 203/214] Update stringtable.xml Missing translation --- addons/weaponselect/stringtable.xml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/addons/weaponselect/stringtable.xml b/addons/weaponselect/stringtable.xml index 3a39d59396..0cae87e255 100644 --- a/addons/weaponselect/stringtable.xml +++ b/addons/weaponselect/stringtable.xml @@ -142,6 +142,7 @@ Grenade %1 + Grenade %1 Granate %1 Granada %1 Granat %1 @@ -151,6 +152,7 @@ Ready Grenade + Grenade Prête Granate nehmen Granada lista Przygotuj granat @@ -163,7 +165,7 @@ Explosive Granate auswählen Seleccionar granada de fragmenación Wybierz granat odłamkowy - Sélectionner grenade à fragmentation + Sélectionner une grenade à fragmentation Repeszgránát Kiválasztása Zvolit Výbušný Granát Selecionar Granada de Fragmentação @@ -251,4 +253,4 @@ Запустить дымовую завесу - \ No newline at end of file + From 36b92b3d443150312fafc97beb71a59ae229703b Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sun, 12 Apr 2015 22:44:19 -0500 Subject: [PATCH 204/214] Don't do client stuff on dedicated. --- addons/fcs/XEH_clientInit.sqf | 2 ++ addons/javelin/XEH_clientInit.sqf | 2 ++ addons/movement/XEH_postInit.sqf | 2 ++ addons/safemode/XEH_postInit.sqf | 2 ++ addons/vector/XEH_postInit.sqf | 2 ++ 5 files changed, 10 insertions(+) diff --git a/addons/fcs/XEH_clientInit.sqf b/addons/fcs/XEH_clientInit.sqf index d3605d87a7..3338e739e1 100644 --- a/addons/fcs/XEH_clientInit.sqf +++ b/addons/fcs/XEH_clientInit.sqf @@ -4,6 +4,8 @@ GVAR(enabled) = false; GVAR(time) = 0; GVAR(position) = [0,0,0]; +if (!hasInterface) exitWith {}; + #include "initKeybinds.sqf" ["infoDisplayChanged", { diff --git a/addons/javelin/XEH_clientInit.sqf b/addons/javelin/XEH_clientInit.sqf index 1d3b546e39..38b006ca24 100644 --- a/addons/javelin/XEH_clientInit.sqf +++ b/addons/javelin/XEH_clientInit.sqf @@ -1,3 +1,5 @@ #include "script_component.hpp" +if (!hasInterface) exitWith {}; + #include "initKeybinds.sqf" \ No newline at end of file diff --git a/addons/movement/XEH_postInit.sqf b/addons/movement/XEH_postInit.sqf index 310b689e15..224cd93273 100644 --- a/addons/movement/XEH_postInit.sqf +++ b/addons/movement/XEH_postInit.sqf @@ -1,6 +1,8 @@ //by commy2 #include "script_component.hpp" +if (!hasInterface) exitWith {}; + ["inventoryDisplayLoaded", { [{ diff --git a/addons/safemode/XEH_postInit.sqf b/addons/safemode/XEH_postInit.sqf index ff6a76d834..aa13029547 100644 --- a/addons/safemode/XEH_postInit.sqf +++ b/addons/safemode/XEH_postInit.sqf @@ -1,6 +1,8 @@ // by esteldunedain #include "script_component.hpp" +if (!hasInterface) exitWith {}; + //["Soldier", {_player = ACE_player; if (currentWeapon _player in (_player getVariable [QGVAR(safedWeapons), []])) then {[false] call FUNC(setSafeModeVisual)}] call EFUNC(common,addInfoDisplayEventHandler); //@todo addEventHandler infoDisplayChanged with select 1 == "Soldier" diff --git a/addons/vector/XEH_postInit.sqf b/addons/vector/XEH_postInit.sqf index 8bbf7d7aa6..0969a4285d 100644 --- a/addons/vector/XEH_postInit.sqf +++ b/addons/vector/XEH_postInit.sqf @@ -1,4 +1,6 @@ // by commy2 #include "script_component.hpp" +if (!hasInterface) exitWith {}; + #include "initKeybinds.sqf" From 7719da2f66acc7bf7ea4b95d0250630e3bfd01d9 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sun, 12 Apr 2015 22:45:55 -0500 Subject: [PATCH 205/214] Javelin Localiztion --- addons/javelin/initKeybinds.sqf | 2 +- addons/javelin/stringtable.xml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/javelin/initKeybinds.sqf b/addons/javelin/initKeybinds.sqf index 6634b1f623..ecce40bbf0 100644 --- a/addons/javelin/initKeybinds.sqf +++ b/addons/javelin/initKeybinds.sqf @@ -27,4 +27,4 @@ [ACE_player] call FUNC(cycleFireMode); false }, -[15, [false, true, false]], false] call cba_fnc_addKeybind; //Shift+Tab Key \ No newline at end of file +[15, [false, true, false]], false] call cba_fnc_addKeybind; //Ctrl+Tab Key \ No newline at end of file diff --git a/addons/javelin/stringtable.xml b/addons/javelin/stringtable.xml index 9560160141..ec929bffc1 100644 --- a/addons/javelin/stringtable.xml +++ b/addons/javelin/stringtable.xml @@ -1,13 +1,13 @@  - + Lock Target (Hold) Ziel aufschalten Захватить цель (удерживать) Zamknout cíl(držet) - + Cycle Fire Mode Wechsle Feuermodus Переключение режимов огня From b50a7a0147631b652cd33e4224576c68eda94472 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sun, 12 Apr 2015 22:56:46 -0500 Subject: [PATCH 206/214] Try to fix degree symbol (encoding issue) --- addons/microdagr/functions/fnc_updateDisplay.sqf | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/addons/microdagr/functions/fnc_updateDisplay.sqf b/addons/microdagr/functions/fnc_updateDisplay.sqf index af577049a0..2a5f34a12c 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 * @@ -53,7 +53,7 @@ case (APP_MODE_INFODISPLAY): { _compassAngleText = if (GVAR(settingUseMils)) then { [(floor ((6400 / 360) * (getDir ace_player))), 4, 0] call CBA_fnc_formatNumber; } else { - ([(floor (getDir ace_player)), 3, 1] call CBA_fnc_formatNumber) + "" //degree symbol is in UTF-8 + ([(floor (getDir ace_player)), 3, 1] call CBA_fnc_formatNumber) + "°" //degree symbol is in UTF-8 }; (_display displayCtrl IDC_MODEDISPLAY_HEADINGNUM) ctrlSetText _compassAngleText; @@ -92,7 +92,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 + ([(floor (_bearing)), 3, 1] call CBA_fnc_formatNumber) + "°" //degree symbol is in UTF-8 }; _2dDistanceKm = ((GVAR(gpsPositionASL) select [0,2]) distance (_targetPosLocationASL select [0,2])) / 1000; _rangeText = format ["%1km", ([_2dDistanceKm, 1, 1] call CBA_fnc_formatNumber)]; @@ -112,7 +112,7 @@ case (APP_MODE_COMPASS): { _compassAngleText = if (GVAR(settingUseMils)) then { [(floor ((6400 / 360) * (getDir ace_player))), 4, 0] call CBA_fnc_formatNumber; } else { - ([(floor (getDir ace_player)), 3, 1] call CBA_fnc_formatNumber) + "M" //degree symbol is in UTF-8 + ([(floor (getDir ace_player)), 3, 1] call CBA_fnc_formatNumber) + "°" //degree symbol is in UTF-8 }; (_display displayCtrl IDC_MODECOMPASS_HEADING) ctrlSetText _compassAngleText; @@ -149,7 +149,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) + "M" //degree symbol is in UTF-8 + ([(floor (_bearing)), 3, 1] call CBA_fnc_formatNumber) + "°" //degree symbol is in UTF-8 }; _2dDistanceKm = ((GVAR(gpsPositionASL) select [0,2]) distance (_targetPosLocationASL select [0,2])) / 1000; _rangeText = format ["%1km", ([_2dDistanceKm, 1, 1] call CBA_fnc_formatNumber)]; From 669dbe10c9afaa6ec641559216d0e894dd85a5f4 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 13 Apr 2015 00:23:00 -0500 Subject: [PATCH 207/214] BecomeLeader - Don't create new group --- addons/interaction/CfgEventHandlers.hpp | 2 +- addons/interaction/CfgVehicles.hpp | 5 +- addons/interaction/XEH_clientInit.sqf | 6 ++ addons/interaction/XEH_postInit.sqf | 70 +++++++++++++++++++ addons/interaction/XEH_preInit.sqf | 2 + .../functions/fnc_canBecomeLeader.sqf | 21 ++++++ .../functions/fnc_doBecomeLeader.sqf | 21 ++++++ 7 files changed, 123 insertions(+), 4 deletions(-) create mode 100644 addons/interaction/XEH_postInit.sqf create mode 100644 addons/interaction/functions/fnc_canBecomeLeader.sqf create mode 100644 addons/interaction/functions/fnc_doBecomeLeader.sqf diff --git a/addons/interaction/CfgEventHandlers.hpp b/addons/interaction/CfgEventHandlers.hpp index 17200056b8..380867183f 100644 --- a/addons/interaction/CfgEventHandlers.hpp +++ b/addons/interaction/CfgEventHandlers.hpp @@ -6,7 +6,7 @@ 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/interaction/CfgVehicles.hpp b/addons/interaction/CfgVehicles.hpp index e85300f301..bd36f42703 100644 --- a/addons/interaction/CfgVehicles.hpp +++ b/addons/interaction/CfgVehicles.hpp @@ -260,12 +260,11 @@ class CfgVehicles { icon = PATHTOF(UI\team\team_white_ca.paa); hotkey = "N"; }; - class ACE_BecomeLeader { displayName = "$STR_ACE_Interaction_BecomeLeader"; - condition = QUOTE(count (units group _player) > 1 && {leader group _player != _player}); + condition = QUOTE(_this call FUNC(canBecomeLeader)); exceptions[] = {"isNotInside"}; - statement = QUOTE(_newGroup = createGroup side group _player; (units group _player) joinSilent _newGroup; _newGroup selectLeader _player;); + statement = QUOTE(_this call FUNC(doBecomeLeader)); showDisabled = 1; priority = 1.0; icon = PATHTOF(UI\team\team_white_ca.paa); diff --git a/addons/interaction/XEH_clientInit.sqf b/addons/interaction/XEH_clientInit.sqf index 1ed3883f02..d252cd6aa1 100644 --- a/addons/interaction/XEH_clientInit.sqf +++ b/addons/interaction/XEH_clientInit.sqf @@ -4,6 +4,12 @@ ACE_Modifier = 0; +//SelectLeader Event Handler for BecomeLeader action: +[QGVAR(selectLeader), { + PARAMS_2(_group,_leader); + _group selectLeader _leader; +}] call EFUNC(common,addEventHandler); + if (!hasInterface) exitWith {}; GVAR(isOpeningDoor) = false; diff --git a/addons/interaction/XEH_postInit.sqf b/addons/interaction/XEH_postInit.sqf new file mode 100644 index 0000000000..1ed3883f02 --- /dev/null +++ b/addons/interaction/XEH_postInit.sqf @@ -0,0 +1,70 @@ +// by commy2 and esteldunedain + +#include "script_component.hpp" + +ACE_Modifier = 0; + +if (!hasInterface) exitWith {}; + +GVAR(isOpeningDoor) = false; + +// restore global fire teams for JIP +{ + _team = _x getVariable [QGVAR(assignedFireTeam), ""]; + if (_team != "") then {_x assignTeam _team}; +} forEach allUnits; + + +// Add keybinds +["ACE3", QGVAR(openDoor), localize "STR_ACE_Interaction_OpenDoor", +{ + // Conditions: canInteract + if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if (GVAR(isOpeningDoor) || {[2] call FUNC(getDoor) select 1 == ''}) exitWith {false}; + + // Statement + call EFUNC(interaction,openDoor); + true +}, +{ + //Probably don't want any condidtions here, so variable never gets locked down + // Statement + GVAR(isOpeningDoor) = false; + true +}, +[57, [false, true, false]], false] call cba_fnc_addKeybind; //Key CTRL+Space + + +["ACE3", QGVAR(tapShoulder), localize "STR_ACE_Interaction_TapShoulder", +{ + // Conditions: canInteract + if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if !([ACE_player, cursorTarget] call FUNC(canTapShoulder)) exitWith {false}; + + // Statement + [ACE_player, cursorTarget] call FUNC(tapShoulder); + true +}, +{false}, +[20, [true, false, false]], false] call cba_fnc_addKeybind; + +["ACE3", QGVAR(modifierKey), localize "STR_ACE_Interaction_ModifierKey", +{ + // Conditions: canInteract + //if !([ACE_player, objNull, ["isNotDragging"]] call EFUNC(common,canInteractWith)) exitWith {false}; // not needed + + // Statement + ACE_Modifier = 1; + // Return false so it doesn't block other actions + false +}, +{ + //Probably don't want any condidtions here, so variable never gets locked down + ACE_Modifier = 0; + false; +}, +[29, [false, false, false]], false] call cba_fnc_addKeybind; + +["isNotSwimming", {!underwater (_this select 0)}] call EFUNC(common,addCanInteractWithCondition); diff --git a/addons/interaction/XEH_preInit.sqf b/addons/interaction/XEH_preInit.sqf index 671535c36d..6f10a4e834 100644 --- a/addons/interaction/XEH_preInit.sqf +++ b/addons/interaction/XEH_preInit.sqf @@ -6,8 +6,10 @@ PREP(addPassengerActions); PREP(addPassengersActions); PREP(addSelectableItem); PREP(applyButtons); +PREP(canBecomeLeader); PREP(canInteractWithCivilian); PREP(canTapShoulder); +PREP(doBecomeLeader); PREP(getDoor); PREP(getDoorAnimations); PREP(getDown); diff --git a/addons/interaction/functions/fnc_canBecomeLeader.sqf b/addons/interaction/functions/fnc_canBecomeLeader.sqf new file mode 100644 index 0000000000..11234ad6d7 --- /dev/null +++ b/addons/interaction/functions/fnc_canBecomeLeader.sqf @@ -0,0 +1,21 @@ +/* + * Author: PabstMirror + * Test if can Become Leader of group + * + * Arguments: + * 0: target + * 1: player + * + * Return Value: + * + * + * Example: + * [player, player] call ace_interaction_fnc_canBecomeLeader + * + * Public: No + */ +#include "script_component.hpp" + +PARAMS_2(_target,_player); + +(count (units group _player) > 1) && {leader group _player != _player} diff --git a/addons/interaction/functions/fnc_doBecomeLeader.sqf b/addons/interaction/functions/fnc_doBecomeLeader.sqf new file mode 100644 index 0000000000..24bfa66c11 --- /dev/null +++ b/addons/interaction/functions/fnc_doBecomeLeader.sqf @@ -0,0 +1,21 @@ + /* + * Author: PabstMirror + * Become Leader of group + * + * Arguments: + * 0: target + * 1: player + * + * Return Value: + * None + * + * Example: + * [player, player] call ace_interaction_fnc_doBecomeLeader + * + * Public: No + */ +#include "script_component.hpp" + +PARAMS_2(_target,_player); + +[QGVAR(selectLeader), (units group _player), [(group _player), _player]] call EFUNC(common,targetEvent); From 70dbae5a25ee432d1a3d7f118beaa20634031cca Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 13 Apr 2015 00:32:07 -0500 Subject: [PATCH 208/214] #527 - Unconscious switching groups --- addons/medical/functions/fnc_setUnconscious.sqf | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/addons/medical/functions/fnc_setUnconscious.sqf b/addons/medical/functions/fnc_setUnconscious.sqf index e373901610..32c94dfc3c 100644 --- a/addons/medical/functions/fnc_setUnconscious.sqf +++ b/addons/medical/functions/fnc_setUnconscious.sqf @@ -67,7 +67,8 @@ _unit setUnitPos "DOWN"; [_unit, true] call EFUNC(common,disableAI); // So the AI does not get stuck, we are moving the unit to a temp group on its own. -[_unit, true, "ACE_isUnconscious", side group _unit] call EFUNC(common,switchToGroupSide); +//Unconscious units shouldn't be put in another group #527: +// [_unit, true, "ACE_isUnconscious", side group _unit] call EFUNC(common,switchToGroupSide); [_unit, QGVAR(unconscious), true] call EFUNC(common,setCaptivityStatus); [_unit, [_unit] call EFUNC(common,getDeathAnim), 1, true] call EFUNC(common,doAnimation); @@ -114,7 +115,8 @@ _startingTime = time; [_unit, QGVAR(unconscious), false] call EFUNC(common,setCaptivityStatus); // Swhich the unit back to its original group - [_unit, false, "ACE_isUnconscious", side group _unit] call EFUNC(common,switchToGroupSide); + //Unconscious units shouldn't be put in another group #527: + // [_unit, false, "ACE_isUnconscious", side group _unit] call EFUNC(common,switchToGroupSide); [_unit, false] call EFUNC(common,disableAI); _unit setUnitPos _originalPos; // This is not position but stance (DOWN, MIDDLE, UP) From 878bdadbb332e3e36a356526fd40b8a9fb7624ac Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 13 Apr 2015 00:46:45 -0500 Subject: [PATCH 209/214] Switch clientInit to postInit --- addons/interaction/XEH_clientInit.sqf | 76 --------------------------- addons/interaction/XEH_postInit.sqf | 6 +++ 2 files changed, 6 insertions(+), 76 deletions(-) delete mode 100644 addons/interaction/XEH_clientInit.sqf diff --git a/addons/interaction/XEH_clientInit.sqf b/addons/interaction/XEH_clientInit.sqf deleted file mode 100644 index d252cd6aa1..0000000000 --- a/addons/interaction/XEH_clientInit.sqf +++ /dev/null @@ -1,76 +0,0 @@ -// by commy2 and esteldunedain - -#include "script_component.hpp" - -ACE_Modifier = 0; - -//SelectLeader Event Handler for BecomeLeader action: -[QGVAR(selectLeader), { - PARAMS_2(_group,_leader); - _group selectLeader _leader; -}] call EFUNC(common,addEventHandler); - -if (!hasInterface) exitWith {}; - -GVAR(isOpeningDoor) = false; - -// restore global fire teams for JIP -{ - _team = _x getVariable [QGVAR(assignedFireTeam), ""]; - if (_team != "") then {_x assignTeam _team}; -} forEach allUnits; - - -// Add keybinds -["ACE3", QGVAR(openDoor), localize "STR_ACE_Interaction_OpenDoor", -{ - // Conditions: canInteract - if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; - // Conditions: specific - if (GVAR(isOpeningDoor) || {[2] call FUNC(getDoor) select 1 == ''}) exitWith {false}; - - // Statement - call EFUNC(interaction,openDoor); - true -}, -{ - //Probably don't want any condidtions here, so variable never gets locked down - // Statement - GVAR(isOpeningDoor) = false; - true -}, -[57, [false, true, false]], false] call cba_fnc_addKeybind; //Key CTRL+Space - - -["ACE3", QGVAR(tapShoulder), localize "STR_ACE_Interaction_TapShoulder", -{ - // Conditions: canInteract - if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; - // Conditions: specific - if !([ACE_player, cursorTarget] call FUNC(canTapShoulder)) exitWith {false}; - - // Statement - [ACE_player, cursorTarget] call FUNC(tapShoulder); - true -}, -{false}, -[20, [true, false, false]], false] call cba_fnc_addKeybind; - -["ACE3", QGVAR(modifierKey), localize "STR_ACE_Interaction_ModifierKey", -{ - // Conditions: canInteract - //if !([ACE_player, objNull, ["isNotDragging"]] call EFUNC(common,canInteractWith)) exitWith {false}; // not needed - - // Statement - ACE_Modifier = 1; - // Return false so it doesn't block other actions - false -}, -{ - //Probably don't want any condidtions here, so variable never gets locked down - ACE_Modifier = 0; - false; -}, -[29, [false, false, false]], false] call cba_fnc_addKeybind; - -["isNotSwimming", {!underwater (_this select 0)}] call EFUNC(common,addCanInteractWithCondition); diff --git a/addons/interaction/XEH_postInit.sqf b/addons/interaction/XEH_postInit.sqf index 1ed3883f02..98b1cc1523 100644 --- a/addons/interaction/XEH_postInit.sqf +++ b/addons/interaction/XEH_postInit.sqf @@ -4,6 +4,12 @@ ACE_Modifier = 0; +//SelectLeader Event Handler for BecomeLeader action: +[QGVAR(selectLeader), { + PARAMS_2(_group,_leader); + _group selectLeader _leader; +}] call EFUNC(common,addEventHandler); + if (!hasInterface) exitWith {}; GVAR(isOpeningDoor) = false; From 2a015482a11edc7e1d9b4aa8016c741d7f716e74 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 13 Apr 2015 01:03:08 -0500 Subject: [PATCH 210/214] Old Interaction Events (1713999 is long dead) --- addons/interaction/CfgEventHandlers.hpp | 24 ++++-------------------- 1 file changed, 4 insertions(+), 20 deletions(-) diff --git a/addons/interaction/CfgEventHandlers.hpp b/addons/interaction/CfgEventHandlers.hpp index 380867183f..7b003bbe8c 100644 --- a/addons/interaction/CfgEventHandlers.hpp +++ b/addons/interaction/CfgEventHandlers.hpp @@ -1,27 +1,11 @@ class Extended_PreInit_EventHandlers { - class ADDON { - init = QUOTE( call COMPILE_FILE(XEH_preInit) ); - }; + class ADDON { + init = QUOTE( call COMPILE_FILE(XEH_preInit) ); + }; }; class Extended_PostInit_EventHandlers { - class ADDON { + class ADDON { init = QUOTE(call COMPILE_FILE(XEH_postInit)); - }; -}; - -class Extended_GetIn_EventHandlers { - class All { - class ADDONnu { - clientGetIn = QUOTE( if (_this select 2 == ACE_player && {!isNull (findDisplay 1713999)}) then {(findDisplay 1713999) closeDisplay 1}); }; - }; -}; - -class Extended_GetOut_EventHandlers { - class All { - class ADDONnu { - clientGetOut = QUOTE( if (_this select 2 == ACE_player && {!isNull (findDisplay 1713999)}) then {(findDisplay 1713999) closeDisplay 1}); - }; - }; }; From 7111cdd8ffce9913f1d4aeac3390821fa2aba812 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 13 Apr 2015 03:16:33 -0500 Subject: [PATCH 211/214] #540 - remove debug spam --- addons/captives/functions/fnc_setHandcuffed.sqf | 2 +- addons/captives/functions/fnc_setSurrendered.sqf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/captives/functions/fnc_setHandcuffed.sqf b/addons/captives/functions/fnc_setHandcuffed.sqf index 5917532874..e992339186 100644 --- a/addons/captives/functions/fnc_setHandcuffed.sqf +++ b/addons/captives/functions/fnc_setHandcuffed.sqf @@ -54,7 +54,7 @@ if (_state) then { PARAMS_2(_unit,_newAnimation); if ((_newAnimation != "ACE_AmovPercMstpSsurWnonDnon") && {!(_unit getVariable ["ACE_isUnconscious", false])}) then { ERROR("Handcuff animation interrupted"); - systemChat format ["debug %2: new %1", _newAnimation, time]; + // systemChat format ["debug %2: new %1", _newAnimation, time]; [_unit, "ACE_AmovPercMstpScapWnonDnon", 1] call EFUNC(common,doAnimation); }; }]; diff --git a/addons/captives/functions/fnc_setSurrendered.sqf b/addons/captives/functions/fnc_setSurrendered.sqf index 73451863dd..30f9105511 100644 --- a/addons/captives/functions/fnc_setSurrendered.sqf +++ b/addons/captives/functions/fnc_setSurrendered.sqf @@ -52,7 +52,7 @@ if (_state) then { PARAMS_2(_unit,_newAnimation); if ((_newAnimation != "ACE_AmovPercMstpSsurWnonDnon") && {!(_unit getVariable ["ACE_isUnconscious", false])}) then { ERROR("Surrender animation interrupted"); - systemChat format ["debug %2: new %1", _newAnimation, time]; + // systemChat format ["debug %2: new %1", _newAnimation, time]; [_unit, "ACE_AmovPercMstpSsurWnonDnon", 1] call EFUNC(common,doAnimation); }; }]; From bf3e3d3b64866a26acebdc9f5ff75c1655f478f8 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 13 Apr 2015 03:46:42 -0500 Subject: [PATCH 212/214] #542 - ACE_fakeWeapon not found --- addons/medical/functions/fnc_setUnconscious.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/medical/functions/fnc_setUnconscious.sqf b/addons/medical/functions/fnc_setUnconscious.sqf index 32c94dfc3c..89ab5ee3b3 100644 --- a/addons/medical/functions/fnc_setUnconscious.sqf +++ b/addons/medical/functions/fnc_setUnconscious.sqf @@ -52,7 +52,7 @@ if (animationState _unit in ["ladderriflestatic","laddercivilstatic"]) then { }; if (vehicle _unit == _unit) then { if (primaryWeapon _unit == "") then { - _unit addWeapon "ACE_fakeWeapon"; + _unit addWeapon "ACE_FakePrimaryWeapon"; }; _unit selectWeapon (primaryWeapon _unit); _unit switchMove ""; From 915ac46e0412aaa72f16174a84d9934339f5a791 Mon Sep 17 00:00:00 2001 From: Kllrt Date: Mon, 13 Apr 2015 11:00:47 +0200 Subject: [PATCH 213/214] Very small typo in CZ translation -.- --- addons/interaction/stringtable.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/interaction/stringtable.xml b/addons/interaction/stringtable.xml index c1ec7ff6d9..f797673953 100644 --- a/addons/interaction/stringtable.xml +++ b/addons/interaction/stringtable.xml @@ -404,7 +404,7 @@ On te tape sur l'épaule. Zostałeś klepnięty po ramieniu Vállonveregettek - Někdo tě poklepal na LEVÉ rameno. + Někdo tě poklepal na LEVÉ rameno Вас похлопали по плечу Você foi tocado no ombro. Ti è stato dato un colpetto sulla spalla From 363a6b3738b88dd274eeace17864e96d292b4739 Mon Sep 17 00:00:00 2001 From: KoffeinFlummi Date: Mon, 13 Apr 2015 14:32:55 +0200 Subject: [PATCH 214/214] Fix erroneus tag in nametags stringtable Re: f6c7d444 --- addons/nametags/stringtable.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/nametags/stringtable.xml b/addons/nametags/stringtable.xml index 903a486fc4..7275ab3da9 100644 --- a/addons/nametags/stringtable.xml +++ b/addons/nametags/stringtable.xml @@ -73,7 +73,7 @@ Показывать именые метки ИИ Zobrazit jména AI Wyświetl imiona jednostek AI - Afficher les noms pour les unités IA + Afficher les noms pour les unités IA Show SoundWaves (requires player names)