diff --git a/.gitattributes b/.gitattributes index 3c59efe684..2462fa3c3b 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2,3 +2,13 @@ *.png binary *.jpg binary *.paa binary + +# Change GitHub language categorization +addons/**/*.cpp linguist-language=SQF +addons/**/*.hpp linguist-language=SQF + +optionals/**/*.cpp linguist-language=SQF +optionals/**/*.hpp linguist-language=SQF + +# Do not count hemtt includes in language usage stats +include/* linguist-vendored diff --git a/.github/workflows/extensions.yml b/.github/workflows/extensions.yml index 12be4ceb1e..06e4737e80 100644 --- a/.github/workflows/extensions.yml +++ b/.github/workflows/extensions.yml @@ -18,7 +18,9 @@ jobs: - name: Build shell: cmd run: | - cd extensions/build + cd extensions + mkdir build + cd build cmake .. && cmake --build . - name: Upload Artifact uses: actions/upload-artifact@master diff --git a/.gitignore b/.gitignore index a8f6a13221..cd55d5af70 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,8 @@ *.zip release/* releases/* +extensions/vcproj32/* +extensions/vcproj64/* hemtt hemtt.exe tools/temp @@ -13,3 +15,4 @@ texHeaders.bin *.biprivatekey Thumbs.db CHANGELOG.md +sqfvm.exe diff --git a/AUTHORS.txt b/AUTHORS.txt index 402b13b8e6..c65fd69c12 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -71,6 +71,7 @@ Dharma Bellamkonda Dimaslg diwako dixon13 +Drift_91 Drill Dudakov aka [OMCB]Kaban Drofseh @@ -105,6 +106,7 @@ Hawkins Head Hybrid V john681611 +JoramD Karneck Kavinsky Keithen @@ -158,6 +160,7 @@ Toaster Tonic Tourorist Tuupertunut +TyroneMF Valentin Torikian voiper VyMajoris(W-Cephei) @@ -167,3 +170,5 @@ xrufix Zakant zGuba Fyuran +dabako +Frank diff --git a/addons/aircraft/CfgAmmo.hpp b/addons/aircraft/CfgAmmo.hpp index 99f80d5d72..e7d07a51de 100644 --- a/addons/aircraft/CfgAmmo.hpp +++ b/addons/aircraft/CfgAmmo.hpp @@ -64,7 +64,7 @@ class CfgAmmo { class ACE_Gatling_30mm_Sub_HEI: SubmunitionBullet { submunitionAmmo = "Gatling_30mm_HE_Plane_CAS_01_F"; weaponType = "cannon"; - submunitionConeType[] = {"poissondisccenter", 3}; + submunitionConeType[] = {"randomcenter", 3}; submunitionConeAngle = 0.056; // in degrees, 0.055 ~= 0.001 mils minute, but present model = "\A3\Weapons_f\Data\bullettracer\tracer_red.p3d"; triggerTime = 0.005; diff --git a/addons/arsenal/stringtable.xml b/addons/arsenal/stringtable.xml index 8c7731c7d9..07d5012d04 100644 --- a/addons/arsenal/stringtable.xml +++ b/addons/arsenal/stringtable.xml @@ -388,6 +388,7 @@ Nach Tragelast sortieren Trier par capacité de chargement 容量で並び替え + Ordenar por capacidad Sort by accuracy @@ -395,6 +396,7 @@ Trier par précision 精度で並び替え Isabet doğruluğuna göre sırala + Ordenar por precisión Sort by rate of fire @@ -402,12 +404,14 @@ Trier par cadence de tir 連射速度で並び替え Atış hızına göre sırala + Ordenar por cadencia de tiro Sort by magnification Nach Vergrößerung sortieren Trier par grossissement 倍率で並び替え + Ordenar por magnificación Sort by ammo count @@ -415,16 +419,19 @@ Trier par nombre de munitions 装弾数で並び替え Mermi sayısına göre sırala + Ordenar por cantidad de munición Sort by ballistic protection Trier par protection balistique 防弾性能で並び替え + Ordenar por protección balística Sort by explosive protection Trier par résistance aux explosifs 防爆性能で並び替え + Ordenar por protección de explosivos Share or stop sharing the selected loadout @@ -1380,6 +1387,7 @@ Задержка детонации Opoźnienie zapalnika 信管設定時間 + Tiempo de espoleta Detonates on impact @@ -1388,6 +1396,7 @@ Детонация от удара Detonuj przy uderzeniu 着発信管 + Detona mediante impacto diff --git a/addons/artillerytables/config.cpp b/addons/artillerytables/config.cpp index 4f5048e5ae..eadb5c2a24 100644 --- a/addons/artillerytables/config.cpp +++ b/addons/artillerytables/config.cpp @@ -4,7 +4,7 @@ class CfgPatches { class ADDON { name = COMPONENT_NAME; units[] = {}; - weapons[] = {}; + weapons[] = {"ACE_artilleryTable"}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_interaction"}; author = ECSTRING(common,ACETeam); diff --git a/addons/artillerytables/dev/checkConfigs.sqf b/addons/artillerytables/dev/checkConfigs.sqf index 533aecf656..1dfcea7f9f 100644 --- a/addons/artillerytables/dev/checkConfigs.sqf +++ b/addons/artillerytables/dev/checkConfigs.sqf @@ -1,3 +1,4 @@ +//pragma SKIP_COMPILE diag_log text "-------------------------------------------"; INFO("Showing entries with custom configs"); diag_log text "-------------------------------------------"; diff --git a/addons/artillerytables/dev/showShotInfo.sqf b/addons/artillerytables/dev/showShotInfo.sqf index 81a29dca22..aab2f0ef5f 100644 --- a/addons/artillerytables/dev/showShotInfo.sqf +++ b/addons/artillerytables/dev/showShotInfo.sqf @@ -1,3 +1,4 @@ +//pragma SKIP_COMPILE // #include "\z\ace\addons\artillerytables\script_component.hpp" INFO("showing shot info"); diff --git a/addons/attach/functions/fnc_attach.sqf b/addons/attach/functions/fnc_attach.sqf index 0a13ed9afb..f26e39f222 100644 --- a/addons/attach/functions/fnc_attach.sqf +++ b/addons/attach/functions/fnc_attach.sqf @@ -44,6 +44,7 @@ if (_unit == _attachToVehicle) then { //Self Attachment [_onAttachText, 2] call EFUNC(common,displayTextStructured); }; _unit setVariable [QGVAR(attached), [[_attachedItem, _itemClassname]], true]; + [QGVAR(attached), [_attachedItem, _itemClassname]] call CBA_fnc_localEvent; } else { GVAR(placeAction) = PLACE_WAITING; diff --git a/addons/attach/functions/fnc_detach.sqf b/addons/attach/functions/fnc_detach.sqf index 7c68831f36..0d315fb9b8 100644 --- a/addons/attach/functions/fnc_detach.sqf +++ b/addons/attach/functions/fnc_detach.sqf @@ -50,6 +50,8 @@ if (!([_unit, _itemName] call CBA_fnc_canAddItem) && {!_isChemlight}) exitWith { [LELSTRING(common,Inventory_Full)] call EFUNC(common,displayTextStructured); }; +[QGVAR(detaching), [_attachedObject, _itemName]] call CBA_fnc_localEvent; + // Add item to inventory (unless it's a chemlight) if (!_isChemlight) then { _unit addItem _itemName; diff --git a/addons/attach/functions/fnc_placeApprove.sqf b/addons/attach/functions/fnc_placeApprove.sqf index 2ae6f84b74..f0c051d168 100644 --- a/addons/attach/functions/fnc_placeApprove.sqf +++ b/addons/attach/functions/fnc_placeApprove.sqf @@ -4,7 +4,7 @@ * Approves placement of the lightObject, scans for an appropriate location and attaches * A player can release the attachObject with it floating in mid-air. * This will use lineIntersectsSurfaces to scan towards the center of the vehicle to find a collision - * ArmA's collision detection is of couse terrible and often misses collisions (difference between what we see and collision LOD) + * Arma's collision detection is of couse terrible and often misses collisions (difference between what we see and collision LOD) * So it does multiple scans at slighly different angles * This is VERY computationaly intensive, but doesn't happen that often. * @@ -100,5 +100,6 @@ _unit removeItem _itemClassname; private _attachList = _attachToVehicle getVariable [QGVAR(attached), []]; _attachList pushBack [_attachedObject, _itemClassname]; _attachToVehicle setVariable [QGVAR(attached), _attachList, true]; +[QGVAR(attached), [_attachedObject, _itemClassname]] call CBA_fnc_localEvent; [_onAttachText, 2] call EFUNC(common,displayTextStructured); diff --git a/addons/ballistics/stringtable.xml b/addons/ballistics/stringtable.xml index d5656ff728..d37990337a 100644 --- a/addons/ballistics/stringtable.xml +++ b/addons/ballistics/stringtable.xml @@ -171,30 +171,30 @@ #4 Картечь - #7 Birdshot - Perdigones #7 - #7 Vogelschrot - #7 鹿彈 - #7 Birdshot - #7 バックショット + #4 Birdshot + Perdigones #4 + #4 Vogelschrot + #4 鹿彈 + #4 Birdshot + #4 バックショット Grenaille No.4 - #7 Broky malé - #7 Śrut Drobny - #7 Küçük saçma - #7 Дробь + #4 Broky malé + #4 Śrut Drobny + #4 Küçük saçma + #4 Дробь - #7 Birdshot - Perdigones #7 - #7 Vogelschrot - #7 鹿彈 - #7 Birdshot - #7 バックショット + #4 Birdshot + Perdigones #4 + #4 Vogelschrot + #4 鹿彈 + #4 Birdshot + #4 バックショット Grenaille No.4 - #7 Broky malé - kalibr 2.54 mm - #7 Śrut Drobny (Birdshot) - #7 Küçük saçma - #7 Дробь + #4 Broky malé - kalibr 3.3 mm + #4 Śrut Drobny (Birdshot) + #4 Küçük saçma + #4 Дробь 12 Gauge 2Rnd #00 Buckshot @@ -281,18 +281,18 @@ 12 kalibre 2 mermi #4 İrisaçma - 12 Gauge 2Rnd #7 Birdshot - 2 Cartuchos de Perdigones Calibre 12 #7 - 12 Gauge 2Schuss #7 Schrotmunition - 12鉛徑 2發 #7 鹿彈 - 12 Gauge 2Rnd #7 Birdshot - 12 ゲージ 2 発入り #7 バックショット + 12 Gauge 2Rnd #4 Birdshot + 2 Cartuchos de Perdigones Calibre 12 #4 + 12 Gauge 2Schuss #4 Schrotmunition + 12鉛徑 2發 #4 鹿彈 + 12 Gauge 2Rnd #4 Birdshot + 12 ゲージ 2 発入り #4 バックショット 2 balles cal. 12 Grenaille No.4 - 2x #7 Broky malé (kalibr 2.54 mm) - 12 Gauge 2 naboje #7 Śrut - Chumbo #7 Calibre Doze 2 Tiros - 12 Калибр 2 патр. #7 Дробь - 12 kalibre 2 mermi #5 İrisaçma + 2x #4 Broky malé (kalibr 3.3 mm) + 12 Gauge 2 naboje #4 Śrut + Chumbo #4 Calibre Doze 2 Tiros + 12 Калибр 2 патр. #4 Дробь + 12 kalibre 2 mermi #4 İrisaçma 12 Gauge 6Rnd #00 Buckshot @@ -379,17 +379,17 @@ 12 kalibre 6 mermi #4 İrisaçma - 12 Gauge 6Rnd #7 Birdshot - 6 Cartuchos de Perdigones Calibre 12 #7 - 12 Gauge 6Schuss #7 Schrotmunition - 12鉛徑 6發 #7 鹿彈 - 12 Gauge 6Rnd #7 Birdshot - 12 ゲージ 6 発入り #7 バックショット + 12 Gauge 6Rnd #4 Birdshot + 6 Cartuchos de Perdigones Calibre 12 #4 + 12 Gauge 6Schuss #4 Schrotmunition + 12鉛徑 6發 #4 鹿彈 + 12 Gauge 6Rnd #4 Birdshot + 12 ゲージ 6 発入り #4 バックショット 6 balles cal. 12 Grenaille No.4 - 6x #7 Broky malé (kalibr 2.54 mm) - 12 Gauge 6 naboi #7 Śrut - 12 Калибр 6 патр. #7 Дробь - 12 kalibre 6 mermi #7 İrisaçma + 6x #4 Broky malé (kalibr 3.3 mm) + 12 Gauge 6 naboi #4 Śrut + 12 Калибр 6 патр. #4 Дробь + 12 kalibre 6 mermi #4 İrisaçma 12 Gauge 15Rnd #00 Buckshot diff --git a/addons/captives/functions/fnc_doEscortCaptive.sqf b/addons/captives/functions/fnc_doEscortCaptive.sqf index 86d597aabe..700a68c42e 100644 --- a/addons/captives/functions/fnc_doEscortCaptive.sqf +++ b/addons/captives/functions/fnc_doEscortCaptive.sqf @@ -12,7 +12,7 @@ * The return value * * Example: - * [player, bob, true] call ACE_captives_fnc_doEscorteCaptive; + * [player, bob, true] call ACE_captives_fnc_doEscortCaptive; * * Public: No */ diff --git a/addons/cargo/XEH_postInit.sqf b/addons/cargo/XEH_postInit.sqf index 0f2ab2bd2c..ce4e0d1319 100644 --- a/addons/cargo/XEH_postInit.sqf +++ b/addons/cargo/XEH_postInit.sqf @@ -37,10 +37,6 @@ [[_hint, _itemName, _vehicleName], 3.0] call EFUNC(common,displayTextStructured); - if (_unloaded) then { - // Invoke listenable event - ["ace_cargoUnloaded", [_item, _vehicle]] call CBA_fnc_globalEvent; - }; // TOOO maybe drag/carry the unloaded item? }] call CBA_fnc_addEventHandler; diff --git a/addons/cargo/functions/fnc_paradropItem.sqf b/addons/cargo/functions/fnc_paradropItem.sqf index 4e314cdf37..4692946fcc 100644 --- a/addons/cargo/functions/fnc_paradropItem.sqf +++ b/addons/cargo/functions/fnc_paradropItem.sqf @@ -38,68 +38,67 @@ TRACE_1("",_distBehind); private _posBehindVehicleAGL = _vehicle modelToWorld [0, _distBehind, -2]; -private _itemObject = if (_item isEqualType objNull) then { - detach _item; +private _object = _item; +if (_item isEqualType objNull) then { + detach _object; // hideObjectGlobal must be executed before setPos to ensure light objects are rendered correctly // do both on server to ensure they are executed in the correct order - [QGVAR(serverUnload), [_item, _posBehindVehicleAGL]] call CBA_fnc_serverEvent; - _item + [QGVAR(serverUnload), [_object, _posBehindVehicleAGL]] call CBA_fnc_serverEvent; } else { - private _newItem = createVehicle [_item, _posBehindVehicleAGL, [], 0, "NONE"]; - _newItem setPosASL (AGLtoASL _posBehindVehicleAGL); - _newItem + _object = createVehicle [_item, _posBehindVehicleAGL, [], 0, "NONE"]; + _object setPosASL (AGLtoASL _posBehindVehicleAGL); }; -_itemObject setVelocity ((velocity _vehicle) vectorAdd ((vectorNormalized (vectorDir _vehicle)) vectorMultiply -5)); +_object setVelocity ((velocity _vehicle) vectorAdd ((vectorNormalized (vectorDir _vehicle)) vectorMultiply -5)); // open parachute and ir light effect [{ - params ["_item"]; + params ["_object"]; - if (isNull _item || {getPos _item select 2 < 1}) exitWith {}; + if (isNull _object || {getPos _object select 2 < 1}) exitWith {}; private _parachute = createVehicle ["B_Parachute_02_F", [0,0,0], [], 0, "CAN_COLLIDE"]; // cannot use setPos on parachutes without them closing down - _parachute attachTo [_item, [0,0,0]]; + _parachute attachTo [_object, [0,0,0]]; detach _parachute; - private _velocity = velocity _item; + private _velocity = velocity _object; - _item attachTo [_parachute, [0,0,1]]; + _object attachTo [_parachute, [0,0,1]]; _parachute setVelocity _velocity; - if ((GVAR(disableParadropEffectsClasstypes) findIf {_item isKindOf _x}) == -1) then { + if ((GVAR(disableParadropEffectsClasstypes) findIf {_object isKindOf _x}) == -1) then { private _light = "Chemlight_yellow" createVehicle [0,0,0]; - _light attachTo [_item, [0,0,0]]; + _light attachTo [_object, [0,0,0]]; }; -}, [_itemObject], 0.7] call CBA_fnc_waitAndExecute; +}, [_object], 0.7] call CBA_fnc_waitAndExecute; // smoke effect when crate landed [{ - (_this select 0) params ["_item"]; + (_this select 0) params ["_object"]; - if (isNull _item) exitWith { + if (isNull _object) exitWith { [_this select 1] call CBA_fnc_removePerFrameHandler; }; - if (getPos _item select 2 < 1) then { - if ((GVAR(disableParadropEffectsClasstypes) findIf {_item isKindOf _x}) == -1) then { + if (getPos _object select 2 < 1) then { + if ((GVAR(disableParadropEffectsClasstypes) findIf {_object isKindOf _x}) == -1) then { private _smoke = "SmokeshellYellow" createVehicle [0,0,0]; - _smoke attachTo [_item, [0,0,0]]; + _smoke attachTo [_object, [0,0,0]]; }; [_this select 1] call CBA_fnc_removePerFrameHandler; }; -}, 1, [_itemObject]] call CBA_fnc_addPerFrameHandler; +}, 1, [_object]] call CBA_fnc_addPerFrameHandler; if (_showHint) then { [ [ LSTRING(UnloadedItem), - getText (configOf _itemObject >> "displayName"), + getText (configOf _object >> "displayName"), getText (configOf _vehicle >> "displayName") ], 3 @@ -107,6 +106,6 @@ if (_showHint) then { }; // Invoke listenable event -["ace_cargoUnloaded", [_item, _vehicle, "paradrop"]] call CBA_fnc_globalEvent; +["ace_cargoUnloaded", [_object, _vehicle, "paradrop"]] call CBA_fnc_globalEvent; true diff --git a/addons/cargo/functions/fnc_unloadItem.sqf b/addons/cargo/functions/fnc_unloadItem.sqf index 6f0f97cb43..992a4e2803 100644 --- a/addons/cargo/functions/fnc_unloadItem.sqf +++ b/addons/cargo/functions/fnc_unloadItem.sqf @@ -47,14 +47,16 @@ private _space = [_vehicle] call FUNC(getCargoSpaceLeft); private _itemSize = [_item] call FUNC(getSizeItem); _vehicle setVariable [QGVAR(space), (_space + _itemSize), true]; -if (_item isEqualType objNull) then { - detach _item; +private _object = _item; +if (_object isEqualType objNull) then { + detach _object; // hideObjectGlobal must be executed before setPos to ensure light objects are rendered correctly // do both on server to ensure they are executed in the correct order - [QGVAR(serverUnload), [_item, _emptyPosAGL]] call CBA_fnc_serverEvent; + [QGVAR(serverUnload), [_object, _emptyPosAGL]] call CBA_fnc_serverEvent; } else { - private _newItem = createVehicle [_item, _emptyPosAGL, [], 0, "NONE"]; - _newItem setPosASL (AGLtoASL _emptyPosAGL); + _object = createVehicle [_item, _emptyPosAGL, [], 0, "NONE"]; + _object setPosASL (AGLtoASL _emptyPosAGL); }; - +// Invoke listenable event +["ace_cargoUnloaded", [_object, _vehicle, "unload"]] call CBA_fnc_globalEvent; true diff --git a/addons/common/config.cpp b/addons/common/config.cpp index 557b45b732..6416f244b8 100644 --- a/addons/common/config.cpp +++ b/addons/common/config.cpp @@ -61,9 +61,9 @@ class ACE_Rsc_Control_Base { #include "ACE_Settings.hpp" #include "define.hpp" -#include -#include -#include +#include "ProgressScreen.hpp" +#include "HintConfig.hpp" +#include "RscInfoType.hpp" #include "CompassControl.hpp" #include "CfgUIGrids.hpp" diff --git a/addons/dragging/CfgMovesBasic.hpp b/addons/dragging/CfgMovesBasic.hpp index de15271416..6b55e82c2d 100644 --- a/addons/dragging/CfgMovesBasic.hpp +++ b/addons/dragging/CfgMovesBasic.hpp @@ -1,8 +1,56 @@ class CfgMovesBasic { + class ManActions { + ACE_dragWithPistol = "ace_dragging"; + ACE_dragWithRifle = "AmovPercMstpSlowWrflDnon_AcinPknlMwlkSlowWrflDb_2"; + }; + class Actions { class MoveWithInjuredManDragger; class MoveWithInjuredManDraggerRfl: MoveWithInjuredManDragger { Up = "amovpercmstpsraswrfldnon"; }; + + class MoveWithInjuredManDraggerPst; + class ACE_MoveWithInjuredManDraggerPst: MoveWithInjuredManDraggerPst { + Default = "ace_dragging_static"; + FastB = "ace_dragging"; + FastLB = "ace_dragging"; + FastRB = "ace_dragging"; + grabDrag = "ace_dragging_static"; + grabCarry = "Helper_SwitchToCarrynon_pst"; + HandGunOn = "ace_dragging_static"; + PlayerSlowB = "ace_dragging"; + PlayerSlowLB = "ace_dragging"; + PlayerSlowRB = "ace_dragging"; + PlayerTactB = "AmovPknlMtacSrasWpstDb"; + PlayerTactF = "AmovPknlMtacSrasWpstDf"; + PlayerTactL = "AmovPknlMtacSrasWpstDl"; + PlayerTactLB = "AmovPknlMtacSrasWpstDbl"; + PlayerTactLF = "AmovPknlMtacSrasWpstDfl"; + PlayerTactR = "AmovPknlMtacSrasWpstDr"; + PlayerTactRB = "AmovPknlMtacSrasWpstDbr"; + PlayerTactRF = "AmovPknlMtacSrasWpstDfr"; + PlayerWalkB = "ace_dragging"; + PlayerWalkLB = "ace_dragging"; + PlayerWalkRB = "ace_dragging"; + released = "ace_dragging_drop"; + SlowB = "ace_dragging"; + SlowLB = "ace_dragging"; + SlowRB = "ace_dragging"; + Stop = "ace_dragging_static"; + StopRelaxed = "ace_dragging_static"; + TactB = "AmovPknlMtacSrasWpstDb"; + TactF = "AmovPknlMtacSrasWpstDf"; + TactL = "AmovPknlMtacSrasWpstDl"; + TactLB = "AmovPknlMtacSrasWpstDbl"; + TactLF = "AmovPknlMtacSrasWpstDfl"; + TactR = "AmovPknlMtacSrasWpstDr"; + TactRB = "AmovPknlMtacSrasWpstDbr"; + TactRF = "AmovPknlMtacSrasWpstDfr"; + Up = "ace_dragging_static"; + WalkB = "ace_dragging"; + WalkLB = "ace_dragging"; + WalkRB = "ace_dragging"; + }; }; }; diff --git a/addons/dragging/CfgMovesMaleSdr.hpp b/addons/dragging/CfgMovesMaleSdr.hpp index 715765679f..d19d210f49 100644 --- a/addons/dragging/CfgMovesMaleSdr.hpp +++ b/addons/dragging/CfgMovesMaleSdr.hpp @@ -1,13 +1,127 @@ class CfgMovesMaleSdr: CfgMovesBasic { class InjuredMovedBase; class AgonyBaseRfl; + class StandBase; + class AmovPercMstpSlowWrflDnon_AcinPknlMwlkSlowWrflDb_1; + class DraggerBase; class States { class AcinPknlMstpSnonWnonDnon_AcinPercMrunSnonWnonDnon: InjuredMovedBase { speed = -10; // 1/10 }; + class AinjPfalMstpSnonWrflDnon_carried_Up: AgonyBaseRfl { speed = -10; // 1/10 }; + + class AmovPercMstpSrasWpstDnon: StandBase { + ConnectTo[] = { + "AmovPercMstpSrasWpstDnon", + 0.02, + "AovrPercMstpSrasWpstDf", + 0.025, + "AmovPercMstpSrasWpstDnon_AidlPercMstpSlowWpstDnon", + 0.0099999998, + "PistolMagazineReloadStand", + 0.1, + "AmovPercMstpSrasWpstDnon_AmovPercMstpSlowWpstDnon", + 0.02, + "AmovPercMstpSrasWpstDnon_AmovPercMstpSrasWrflDnon", + 0.02, + "AmovPercMstpSrasWpstDnon_AwopPercMstpSoptWbinDnon", + 0.02, + "AmovPercMstpSrasWpstDnon_AmovPercMstpSnonWnonDnon", + 0.02, + "AmovPercMstpSrasWpstDnon_SaluteIn", + 0.02, + "AwopPercMstpSgthWpstDnon_Part1", + 0.1, + "AmovPercMstpSrasWpstDnon_AinvPknlMstpSnonWnonDnon", + 0.02, + "AmovPercMstpSrasWpstDnon_AmovPercMstpSrasWlnrDnon", + 0.02, + "AmovPercMstpSrasWpstDnon_AadjPercMstpSrasWpstDup", + 0.02, + "AmovPercMstpSrasWpstDnon_AadjPercMstpSrasWpstDdown", + 0.02, + "AmovPercMstpSrasWpstDnon_AadjPercMstpSrasWpstDleft", + 0.02, + "AmovPercMstpSrasWpstDnon_AadjPercMstpSrasWpstDright", + 0.02, + "AmovPercMstpSrasWpstDnon_AmovPercMstpSrasWpstDnon_gear", + 0.02, + "Acts_starterPistol_in", + 0.001, + "Acts_PistolRaisedStand_Default", + 1, + "ace_dragging", + 0.1 + }; + }; + + class AmovPercMstpSlowWrflDnon_AcinPknlMwlkSlowWrflDb_2: AmovPercMstpSlowWrflDnon_AcinPknlMwlkSlowWrflDb_1 { + aiming = "aimingDefault"; + aimingBody = "aimingUpDefault"; + aimPrecision = 5; // default: 1 + }; + + class ace_dragging: DraggerBase { + actions = "ace_MoveWithInjuredManDraggerPst"; + aiming = "aimingPistol"; + aimingBody = "aimingPistol"; + aimPrecision = 2; // default: 1 + canPullTrigger = 1; + canReload = 0; + ConnectTo[] = { + "ace_dragging", + 0.1, + "ace_dragging_drop", + 0.2 + }; + disableWeapons = 0; + duty = 0.6; + enableBinocular = 0; + file = QPATHTO_T(anim\ace_dragging.rtm); + InterpolateTo[] = { + "ace_dragging_static", + 0.1 + }; + interpolationSpeed = 5; + limitGunMovement = 0.2; + looped = 1; + showHandGun = 1; + turnSpeed = 0.5; + }; + + class ace_dragging_static: ace_dragging { + ConnectTo[] = { + "ace_dragging", + 0.1, + "ace_dragging_drop", + 0.2 + }; + InterpolateTo[] = { + "ace_dragging", + 0.1, + "ace_dragging_drop", + 0.2 + }; + looped = 1; + speed = 0; + }; + + class ace_dragging_drop: ace_dragging { + ConnectTo[] = { + "AmovPknlMstpSrasWpstDnon", + 0.1 + }; + file = QPATHTO_T(anim\ace_dragging_drop.rtm); + InterpolateTo[] = { + "Unconscious", + 0.02 + }; + interpolationSpeed = 5; + looped = 0; + }; }; }; diff --git a/addons/dragging/XEH_preInit.sqf b/addons/dragging/XEH_preInit.sqf index b47cf6628d..9361d05015 100644 --- a/addons/dragging/XEH_preInit.sqf +++ b/addons/dragging/XEH_preInit.sqf @@ -6,4 +6,6 @@ PREP_RECOMPILE_START; #include "XEH_PREP.hpp" PREP_RECOMPILE_END; +#include "initSettings.sqf" + ADDON = true; diff --git a/addons/dragging/anim/ace_dragging.rtm b/addons/dragging/anim/ace_dragging.rtm new file mode 100644 index 0000000000..e3f5f6f611 Binary files /dev/null and b/addons/dragging/anim/ace_dragging.rtm differ diff --git a/addons/dragging/anim/ace_dragging_drop.rtm b/addons/dragging/anim/ace_dragging_drop.rtm new file mode 100644 index 0000000000..4d0b1d3a85 Binary files /dev/null and b/addons/dragging/anim/ace_dragging_drop.rtm differ diff --git a/addons/dragging/anim/model.cfg b/addons/dragging/anim/model.cfg new file mode 100644 index 0000000000..6be7f511b5 --- /dev/null +++ b/addons/dragging/anim/model.cfg @@ -0,0 +1,119 @@ +class cfgSkeletons { + class OFP2_ManSkeleton { + isDiscrete = 0; + skeletonInherit = ""; + skeletonBones[] = { + "Pelvis","", + "Spine","Pelvis", + "Spine1","Spine", + "Spine2","Spine1", + "Spine3","Spine2", + "camera","Pelvis",// case has changed for arma3 + "weapon","Spine1", + "launcher","Spine1", + "Neck","Spine3", + "Neck1","Neck", + "Head","Neck1", //Head skeleton in hierarchy + //Left upper side + "LeftShoulder","Spine3", + "LeftArm","LeftShoulder", + "LeftArmRoll","LeftArm", + "LeftForeArm","LeftArmRoll", + "LeftForeArmRoll","LeftForeArm", + "LeftHand","LeftForeArmRoll", + "LeftHandRing","LeftHand", + "LeftHandRing1","LeftHandRing", + "LeftHandRing2","LeftHandRing1", + "LeftHandRing3","LeftHandRing2", + "LeftHandPinky1","LeftHandRing", + "LeftHandPinky2","LeftHandPinky1", + "LeftHandPinky3","LeftHandPinky2", + "LeftHandMiddle1","LeftHand", + "LeftHandMiddle2","LeftHandMiddle1", + "LeftHandMiddle3","LeftHandMiddle2", + "LeftHandIndex1","LeftHand", + "LeftHandIndex2","LeftHandIndex1", + "LeftHandIndex3","LeftHandIndex2", + "LeftHandThumb1","LeftHand", + "LeftHandThumb2","LeftHandThumb1", + "LeftHandThumb3","LeftHandThumb2", + //Right upper side + "RightShoulder","Spine3", + "RightArm","RightShoulder", + "RightArmRoll","RightArm", + "RightForeArm","RightArmRoll", + "RightForeArmRoll","RightForeArm", + "RightHand","RightForeArmRoll", + "RightHandRing","RightHand", + "RightHandRing1","RightHandRing", + "RightHandRing2","RightHandRing1", + "RightHandRing3","RightHandRing2", + "RightHandPinky1","RightHandRing", + "RightHandPinky2","RightHandPinky1", + "RightHandPinky3","RightHandPinky2", + "RightHandMiddle1","RightHand", + "RightHandMiddle2","RightHandMiddle1", + "RightHandMiddle3","RightHandMiddle2", + "RightHandIndex1","RightHand", + "RightHandIndex2","RightHandIndex1", + "RightHandIndex3","RightHandIndex2", + "RightHandThumb1","RightHand", + "RightHandThumb2","RightHandThumb1", + "RightHandThumb3","RightHandThumb2", + //Left lower side + "LeftUpLeg","Pelvis", + "LeftUpLegRoll","LeftUpLeg", + "LeftLeg","LeftUpLegRoll", + "LeftLegRoll","LeftLeg", + "LeftFoot","LeftLegRoll", + "LeftToeBase","LeftFoot", + //Right lower side + "RightUpLeg","Pelvis", + "RightUpLegRoll","RightUpLeg", + "RightLeg","RightUpLegRoll", + "RightLegRoll","RightLeg", + "RightFoot","RightLegRoll", + "RightToeBase","RightFoot", + //New facial features arma3 only + "Face_Hub","Head", + "Face_Jawbone","Face_Hub", + "Face_Jowl","Face_Jawbone", + "Face_chopRight","Face_Jawbone", + "Face_chopLeft","Face_Jawbone", + "Face_LipLowerMiddle","Face_Jawbone", + "Face_LipLowerLeft","Face_Jawbone", + "Face_LipLowerRight","Face_Jawbone", + "Face_Chin","Face_Jawbone", + "Face_Tongue","Face_Jawbone", + "Face_CornerRight","Face_Hub", + "Face_CheekSideRight","Face_CornerRight", + "Face_CornerLeft","Face_Hub", + "Face_CheekSideLeft","Face_CornerLeft", + "Face_CheekFrontRight","Face_Hub", + "Face_CheekFrontLeft","Face_Hub", + "Face_CheekUpperRight","Face_Hub", + "Face_CheekUpperLeft","Face_Hub", + "Face_LipUpperMiddle","Face_Hub", + "Face_LipUpperRight","Face_Hub", + "Face_LipUpperLeft","Face_Hub", + "Face_NostrilRight","Face_Hub", + "Face_NostrilLeft","Face_Hub", + "Face_Forehead","Face_Hub", + "Face_BrowFrontRight","Face_Forehead", + "Face_BrowFrontLeft","Face_Forehead", + "Face_BrowMiddle","Face_Forehead", + "Face_BrowSideRight","Face_Forehead", + "Face_BrowSideLeft","Face_Forehead", + "Face_Eyelids","Face_Hub", + "Face_EyelidUpperRight","Face_Hub", + "Face_EyelidUpperLeft","Face_Hub", + "Face_EyelidLowerRight","Face_Hub", + "Face_EyelidLowerLeft","Face_Hub", + "EyeLeft","Face_Hub", + "EyeRight","Face_Hub" + };// end of skeleton array + // location of pivot points (local axes) for hierarchical animation + pivotsModel="A3\anims_f\data\skeleton\SkeletonPivots.p3d"; + }; +}; + diff --git a/addons/dragging/config.cpp b/addons/dragging/config.cpp index 188f3916f2..26e5e2c88f 100644 --- a/addons/dragging/config.cpp +++ b/addons/dragging/config.cpp @@ -8,7 +8,7 @@ class CfgPatches { requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_interaction"}; author = ECSTRING(common,ACETeam); - authors[] = {"Garth 'L-H' de Wet", "commy2", "PiZZADOX"}; + authors[] = {"Garth 'L-H' de Wet", "commy2", "PiZZADOX", "Malbryn"}; url = ECSTRING(main,URL); VERSION_CONFIG; }; diff --git a/addons/dragging/functions/fnc_dragObject.sqf b/addons/dragging/functions/fnc_dragObject.sqf index 0aa56c2a1d..a8d3127e34 100644 --- a/addons/dragging/functions/fnc_dragObject.sqf +++ b/addons/dragging/functions/fnc_dragObject.sqf @@ -1,6 +1,6 @@ #include "script_component.hpp" /* - * Author: commy2 + * Author: commy2, Malbryn * Drag an object. Called from ace_dragging_fnc_startDrag * * Arguments: @@ -43,18 +43,27 @@ _unit setVariable [QGVAR(isDragging), true, true]; _unit setVariable [QGVAR(draggedObject), _target, true]; // add drop action -_unit setVariable [QGVAR(ReleaseActionID), [ - _unit, "DefaultAction", - {!isNull ((_this select 0) getVariable [QGVAR(draggedObject), objNull])}, - {[_this select 0, (_this select 0) getVariable [QGVAR(draggedObject), objNull]] call FUNC(dropObject)} -] call EFUNC(common,addActionEventHandler)]; +GVAR(unit) = _unit; + +GVAR(releaseActionID) = [0xF1, [false, false, false], { + [GVAR(unit), GVAR(unit) getVariable [QGVAR(draggedObject), objNull]] call FUNC(dropObject); +}, "keydown", "", false, 0] call CBA_fnc_addKeyHandler; + +// show mouse hint +["", localize LSTRING(Drop)] call EFUNC(interaction,showMouseHint); + +// block firing +if !(GVAR(dragAndFire)) then { + _unit setVariable [QGVAR(blockFire), [ + _unit, "DefaultAction", + {true}, + {} + ] call EFUNC(common,addActionEventHandler)]; +}; // add anim changed EH [_unit, "AnimChanged", FUNC(handleAnimChanged), [_unit]] call CBA_fnc_addBISEventHandler; -// show mouse hint -[localize LSTRING(Drop), ""] call EFUNC(interaction,showMouseHint); - // check everything [FUNC(dragObjectPFH), 0.5, [_unit, _target, CBA_missionTime]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/dragging/functions/fnc_dropObject.sqf b/addons/dragging/functions/fnc_dropObject.sqf index 6218f4afec..e5a26a9082 100644 --- a/addons/dragging/functions/fnc_dropObject.sqf +++ b/addons/dragging/functions/fnc_dropObject.sqf @@ -1,6 +1,6 @@ #include "script_component.hpp" /* - * Author: commy2 + * Author: commy2, Malbryn * Drop a dragged object. * * Arguments: @@ -20,7 +20,12 @@ params ["_unit", "_target"]; TRACE_2("params",_unit,_target); // remove drop action -[_unit, "DefaultAction", _unit getVariable [QGVAR(ReleaseActionID), -1]] call EFUNC(common,removeActionEventHandler); +[QGVAR(releaseActionID), "keydown"] call CBA_fnc_removeKeyHandler; + +// stop blocking +if !(GVAR(dragAndFire)) then { + [_unit, "DefaultAction", _unit getVariable [QGVAR(blockFire), -1]] call EFUNC(common,removeActionEventHandler); +}; private _inBuilding = [_unit] call FUNC(isObjectOnObject); diff --git a/addons/dragging/functions/fnc_handlePlayerWeaponChanged.sqf b/addons/dragging/functions/fnc_handlePlayerWeaponChanged.sqf index 7d07583ddf..beaed397e7 100644 --- a/addons/dragging/functions/fnc_handlePlayerWeaponChanged.sqf +++ b/addons/dragging/functions/fnc_handlePlayerWeaponChanged.sqf @@ -21,8 +21,8 @@ TRACE_2("params",_unit,_weapon); if (_unit getVariable [QGVAR(isDragging), false]) then { - // drop dragged object when selecting a non-primary weapon - if (_weapon != primaryWeapon _unit) then { + // drop dragged object when changing weapon + if (_weapon != _unit getVariable [QGVAR(currentWeapon), ""]) then { private _draggedObject = _unit getVariable [QGVAR(draggedObject), objNull]; [_unit, _draggedObject] call FUNC(dropObject); diff --git a/addons/dragging/functions/fnc_startDrag.sqf b/addons/dragging/functions/fnc_startDrag.sqf index 0b24bc4337..847ae1abd4 100644 --- a/addons/dragging/functions/fnc_startDrag.sqf +++ b/addons/dragging/functions/fnc_startDrag.sqf @@ -1,6 +1,6 @@ #include "script_component.hpp" /* - * Author: commy2, PiZZADOX + * Author: commy2, PiZZADOX, Malbryn * Start the dragging process. * * Arguments: @@ -28,14 +28,34 @@ if (!GETVAR(_target,GVAR(ignoreWeightDrag),false) && { [localize LSTRING(UnableToDrag)] call EFUNC(common,displayTextStructured); }; -// add a primary weapon if the unit has none. -// @todo prevent opening inventory when equipped with a fake weapon -if (primaryWeapon _unit isEqualto "") then { - _unit addWeapon "ACE_FakePrimaryWeapon"; +// Add a primary weapon if the unit has none +if !(GVAR(dragAndFire)) then { + if (primaryWeapon _unit isEqualto "") then { + _unit addWeapon "ACE_FakePrimaryWeapon"; + _unit selectWeapon primaryWeapon _unit; + } else { + _unit selectWeapon primaryWeapon _unit; + }; +} else { // Making sure the unit is holding a primary weapon or handgun + if !(currentWeapon _unit in [primaryWeapon _unit, handgunWeapon _unit]) then { + if (primaryWeapon _unit != "") then { + // Use primary if possible + _unit selectWeapon primaryWeapon _unit; + } else { + if (handgunWeapon _unit != "") then { + // Use pistol if unit has no primary + _unit selectWeapon handgunWeapon _unit; + } else { + // Add fake weapon if no weapons besides launcher are available + _unit addWeapon "ACE_FakePrimaryWeapon"; + _unit selectWeapon primaryWeapon _unit; + }; + }; + }; }; -// select primary, otherwise the drag animation actions don't work. -_unit selectWeapon primaryWeapon _unit; +// Save the weapon so we can monitor if it changes +_unit setVariable [QGVAR(currentWeapon), currentWeapon _unit]; [_unit, "blockThrow", "ACE_dragging", true] call EFUNC(common,statusEffect_set); @@ -45,7 +65,13 @@ _unit selectWeapon primaryWeapon _unit; // can't play action that depends on weapon if it was added the same frame if !(_unit call EFUNC(common,isSwimming)) then { [{ - [_this, "grabDrag"] call EFUNC(common,doGesture); + private _unitWeapon = _this getVariable [QGVAR(currentWeapon), ""]; + + if (_unitWeapon isKindOf ["Pistol", configFile >> "CfgWeapons"]) then { + [_this, "ACE_dragWithPistol"] call EFUNC(common,doGesture); + } else { + [_this, "ACE_dragWithRifle"] call EFUNC(common,doGesture); + }; }, _unit] call CBA_fnc_execNextFrame; }; diff --git a/addons/dragging/initSettings.sqf b/addons/dragging/initSettings.sqf new file mode 100644 index 0000000000..b33dbab3f7 --- /dev/null +++ b/addons/dragging/initSettings.sqf @@ -0,0 +1,8 @@ +[ + QGVAR(dragAndFire), + "CHECKBOX", + [LSTRING(DragAndFire_DisplayName), LSTRING(DragAndFire_Description)], + localize LSTRING(SettingsName), + true, + false +] call CBA_fnc_addSetting; diff --git a/addons/dragging/script_component.hpp b/addons/dragging/script_component.hpp index e7ad88c825..12ed8efff3 100644 --- a/addons/dragging/script_component.hpp +++ b/addons/dragging/script_component.hpp @@ -16,5 +16,5 @@ #include "\z\ace\addons\main\script_macros.hpp" -#define DRAG_ANIMATIONS ["amovpercmstpslowwrfldnon_acinpknlmwlkslowwrfldb_2", "amovpercmstpsraswpstdnon_acinpknlmwlksnonwpstdb_2", "amovpercmstpsnonwnondnon_acinpknlmwlksnonwnondb_2", "acinpknlmstpsraswrfldnon", "acinpknlmstpsnonwpstdnon", "acinpknlmstpsnonwnondnon", "acinpknlmwlksraswrfldb", "acinpknlmwlksnonwnondb"] +#define DRAG_ANIMATIONS ["amovpercmstpslowwrfldnon_acinpknlmwlkslowwrfldb_2", "amovpercmstpsraswpstdnon_acinpknlmwlksnonwpstdb_2", "amovpercmstpsnonwnondnon_acinpknlmwlksnonwnondb_2", "acinpknlmstpsraswrfldnon", "acinpknlmstpsnonwpstdnon", "acinpknlmstpsnonwnondnon", "acinpknlmwlksraswrfldb", "acinpknlmwlksnonwnondb", "ace_dragging", "ace_dragging_static", "ace_dragging_drop"] #define CARRY_ANIMATIONS ["acinpercmstpsnonwnondnon", "acinpknlmstpsnonwnondnon_acinpercmrunsnonwnondnon"] diff --git a/addons/dragging/stringtable.xml b/addons/dragging/stringtable.xml index 7d10e561bd..5c6ff4f671 100644 --- a/addons/dragging/stringtable.xml +++ b/addons/dragging/stringtable.xml @@ -59,6 +59,7 @@ Nieś/Puść objekt オブジェクトを運ぶ/離す Objeyi Taşı/Bırak + Arrastrar/Soltar Objeto Item too heavy @@ -103,6 +104,31 @@ Поднять/Опустить | (Ctrl + Скролл) Крутить Wyżej/niżej | (Ctrl + Kółko myszy) obracanie Yükselt/Alçalt | (Ctrl + Tekerlek) Döndür + Subir/Bajar | (Ctrl + Scroll) Rotar + + + ACE Dragging + ACE Traînage d'objets et d'unités + ACE Ziehen + ACE Húzás + ACE Перетаскивание + ACE Arrastrar + + + Allow firing while dragging + Arme utilisable durant le traînage + Schießen während des Ziehens erlauben + Húzás közbeni tüzelés engedélyezése + Стрельба во время перетаскивания + Permitir disparar mientras se arrastra + + + Allow the player to fire their gun while dragging. + Cette option permet aux joueurs de faire usage de leur arme pendant qu'ils traînent un objet ou une unité.\nL'arme secondaire est utilisée si le joueur en est équipé. + Erlaubt dem Spieler während des Ziehens das Abfeuern der Waffe. + Húzás közben a játékos elsütheti a fegyverét. + Позволяет игроку стрелять во время перетаскивания + Permite al jugador disparar mientras está arrastrando. diff --git a/addons/dragon/config.cpp b/addons/dragon/config.cpp index 78d836936e..9d329f6be7 100644 --- a/addons/dragon/config.cpp +++ b/addons/dragon/config.cpp @@ -3,8 +3,8 @@ class CfgPatches { class ADDON { name = COMPONENT_NAME; - units[] = {}; - weapons[] = {}; + units[] = {"ace_dragon_staticAssembled"}; + weapons[] = {"ace_dragon_super","ace_dragon_sight"}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_hot","ace_csw"}; author = ECSTRING(common,ACETeam); diff --git a/addons/dragon/stringtable.xml b/addons/dragon/stringtable.xml index 2e2e3de470..a99e3fb49c 100644 --- a/addons/dragon/stringtable.xml +++ b/addons/dragon/stringtable.xml @@ -13,6 +13,7 @@ [CSW] M47 Super-Dragon [CSW] M47 Super-Dragon [CSW] M47 Super-Dragon + [CSW] M47 Super-Dragon M47 Super-Dragon @@ -26,6 +27,7 @@ M47 Super-Dragon M47 Super-Dragon M47 Super-Dragon + M47 Super-Dragon Attach Sight @@ -38,6 +40,7 @@ Připojit puškohled Dołącz Optykę Прикрепить прицел + Acoplar visor Detach Sight @@ -50,6 +53,7 @@ Odpojit puškohled Odczep Optykę Открепить прицел + Desacoplar visor SU-36/P Daysight @@ -63,6 +67,7 @@ SU-36/P Celownik dzienny SU-36/P Daysight SU-36/P Дневной + Visor diurno SU-36/P A light, cheap sight used for daytime operations. Contains the guidance computer for the whole system @@ -75,6 +80,7 @@ Lehký a levný puškohled pro použití za denního světla. Obsahuje navigační počítač pro celý systém. Lekki, tani celownik używany do działania w trakcie dnia. Zawiera komputer naprowadząjący dla całego systemu Легкий дешёвый прицел, используемый для дневных операций. Содержит компьютер для всей системы + Un visor ligero y barato utilizado en operaciones diurnas. Contiene el ordenador de guiado para todo el sistema. A Wire-Guided SACLOS missile with a unique flight characteristic @@ -87,6 +93,7 @@ Drátem naváděná SACLOS raketa s unikátními letovými vlastnostmi Naprowadzany przewodowo rakietowy pocisk SACLOS o unikalnej charakterystyce lotu Ракета SACLOS с проводным наведением с уникальной характеристикой полета + Misil SACLOS guiado por hilo con una característica de vuelo única. diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml index 9185d46d56..87022ab143 100644 --- a/addons/explosives/stringtable.xml +++ b/addons/explosives/stringtable.xml @@ -1048,6 +1048,7 @@ 絆線閃光地雷 Tripwire (Sinalizador) Světlice na nástražném drátu + Bengala con cable trampa Type: Tripwire flare - Ignites a non-lethal flare when triggered.<br />Rounds: 1<br />Used on: Ground @@ -1062,6 +1063,7 @@ 類型: 絆線閃光地雷 - 觸發後產生非致命性的強光.<br />發數: 1<br />使用於: 地面 Tipo: Flare de Tripwire - Acende um sinalizador não letal quando acionado.<br/>Usos: 1<br/>Usado em: Chão Typ: Světlice na nástražném drátu - Zapálí světlici při aktivaci.<br/>Pouze 1 použití<br/>Použít na zem + Tipo: Bengala con cable trampa - Enciende una bengala no letal cuando es activado.<br />Rondas: 1<br />Usado en: Tierra Explosive range @@ -1076,6 +1078,7 @@ Alcance do explosivo Dosah exploze Patlayıcı menzili + Alcance explosivo Explosive Timer @@ -1089,6 +1092,7 @@ 引爆倒數 Časovač exploze Patlayıcı Zamanlayıcı + Temporizador de explosivo Is EOD @@ -1100,6 +1104,7 @@ Je specilista na výbušniny (EOD) Jest EOD Сапёр + ¿Es EOD? Controls whether the unit is an explosive specialist. @@ -1111,36 +1116,43 @@ Určuje jestli je jednotka specialista na výbušniny. Kontroluje, czy jednostka jest specjalistą od materiałów wybuchowych. Определяет, является ли юнит сапёром. + Controla si la unidad es un especialista en explosivos Minimum Time Durée minimale 最短時間 + Tiempo mínimo Maximum Time Durée maximale 最長時間 + Tiempo máximo Default Time Durée par défaut 標準時間 + Tiempo por defecto Minimum time value (in seconds) for the explosive timer. Définit la durée minimale paramétrable sur le minuteur. 起爆タイマーの最低時間 (秒) を設定します。 + Tiempo mínimo (en segundos) para el temporizador del explosivo. Maximum time value (in seconds) for the explosive timer. Définit la durée maximale paramétrable sur le minuteur. 起爆タイマーの最長時間 (秒) を設定します。 + Tiempo máximo (en segundos) para el temporizador del explosivo. Default time value (in seconds) for the explosive timer. Définit la durée paramétrée par défaut sur le minuteur. 起爆タイマーの標準時間 (秒) を設定します。 + Tiempo por defecto (en segundos) para el temporizador del explosivo. diff --git a/addons/fastroping/config.cpp b/addons/fastroping/config.cpp index 98dfd26742..bdbd92c3b0 100644 --- a/addons/fastroping/config.cpp +++ b/addons/fastroping/config.cpp @@ -3,8 +3,8 @@ class CfgPatches { class ADDON { name = COMPONENT_NAME; - units[] = {}; - weapons[] = {}; + units[] = {"ACE_fastropingSupplyCrate"}; + weapons[] = {"ACE_rope12","ACE_rope15","ACE_rope18","ACE_rope27","ACE_rope36"}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_interaction"}; author = ECSTRING(common,ACETeam); diff --git a/addons/fastroping/stringtable.xml b/addons/fastroping/stringtable.xml index f9041b1da8..6450670d36 100644 --- a/addons/fastroping/stringtable.xml +++ b/addons/fastroping/stringtable.xml @@ -154,6 +154,7 @@ 讓單位快速繩降 패스트 로프를 놓음 UMOŽNIT JEDNOTKÁM SLAŇOVAT + INDICAR A LAS UNIDADES DESCENDER POR LA CUERDA Deploy 12m ropes diff --git a/addons/gforces/stringtable.xml b/addons/gforces/stringtable.xml index 3825045880..b2344067de 100644 --- a/addons/gforces/stringtable.xml +++ b/addons/gforces/stringtable.xml @@ -8,6 +8,7 @@ ACE Перегрузки ACE G フォース ACE G-Kuvveti + ACE Fuerza G Gforces Effects @@ -63,6 +64,7 @@ Коэффициент перегрузки G 効果係数 G-Kuvvet Katsayısı + Coeficiente de Fuerza G Controls strength of G-Force affecting players. @@ -71,6 +73,7 @@ Определяет силу перегрузок, влияющих на игроков. G 効果がプレイヤーに与える影響量を設定できます。 Oyuncuları etkileyen G-Force'un gücünü kontrol eder. + Controla la intensidad de fuerza G que afecta a los jugadores. diff --git a/addons/grenades/stringtable.xml b/addons/grenades/stringtable.xml index 362e9b0273..4e3702dbd4 100644 --- a/addons/grenades/stringtable.xml +++ b/addons/grenades/stringtable.xml @@ -166,6 +166,7 @@ Granada de Luz CTS 7290 9-Explosões CTS 7290 9- Flaş Bombası CTS 7290-9 Светошумовая граната + Granada aturdidora CTS 7290 9-explosiones CTS 7290-9 @@ -402,6 +403,7 @@ Granada Incendiária AN-M14 AN-M14 zápalný granát AN-M14 Yangın Bombası + Granada incendiaria AN-M14 AN-M14 @@ -417,6 +419,7 @@ AN-M14 AN-M14 AN-M14 + AN-M14 Incendiary grenade used to destroy weapons, ammunition and other equipment. @@ -432,6 +435,7 @@ Granada Incendiária utilizada para destruir armas, munições e outros equipamentos. Zápalný granát používaný ke zničení zbraní, munice a další výbavy. Yangın bombaları, cephaneleri ve diğer teçhizatı yok etmek için kullanılır + Granada incendiaria utilizada para destruir armamento, municiones y otros equipamientos Type: Star Parachute Flare @@ -445,6 +449,7 @@ Type : Fusée éclairante à parachute Typ: Světlice s padákem Tür: Yıldız Paraşüt Fişeği + Tipo: Bengala de paracaidas M583 Illumination Flare (White) @@ -458,6 +463,7 @@ M583 Fusée éclairante (Blanche) M583 Světlice (Bílá) M583 Aydınlatma Fişeği (Beyaz) + M583 Bengala de iluminación (Blanca) M662 Illumination Flare (Red) @@ -471,6 +477,7 @@ M662 Fusée éclairante (Rouge) M662 Světlice (Červená) M662 Aydınlatma Fişeği (Kırmızı) + M662 Bengala de iluminación (Roja) M661 Illumination Flare (Green) @@ -484,6 +491,7 @@ M661 Fusée éclairante (Verte) M661 Světlice (Zelená) M661 Aydınlatma Fişeği (Yeşil) + M661 Bengala de iluminación (Verde) Type: Parachute IR Flare @@ -497,6 +505,7 @@ Type : Fusée IR à parachute Typ: Infračervená světlice s padákem Tip : Paraşüt IR Flare + Tipo: Bengala infrarroja de paracaidas M992 Illumination IR Flare @@ -510,41 +519,49 @@ M992 Fusée IR M992 Infračervená světlice M992 Illumination IR Flare + M992 Bengala de iluminación infrarroja Explosive Satchel (Throwable) Charge en sacoche (lançable) 梱包爆薬 (投てき仕様) + Carga de mochila explosiva (Lanzable) Type: Charge<br />Rounds: 1<br />Used on: Things that need to die Type : Charge<br />Munitions : 1<br />Application : à balancer sur des trucs qui doivent mourir 種類: 爆薬<br />弾数: 1<br />次で使用: 破壊すべき物に + Tipo: Carga<br />Unidades: 1<br />Usada: Cosas que necesitan morir An explosive satchel that is throwable. 7 second fixed fuse Charge explosive lançable. Détonation après 7 secondes. 投げられる梱包爆薬。起爆までの時間は 7 秒間 + Carga de mochila explosiva que se puede lanzar. Espoleta fija de 7 segundos Explosive Charge (Throwable) Charge explosive (lançable) 爆薬ブロック (投てき仕様) + Carga explosiva (Lanzable) An explosive charge that is throwable. 7 second fixed fuse Bloc explosif lançable. Détonation après 7 secondes. 投げられる爆薬ブロック。起爆までの時間は 7 秒間 + Carga explosiva que se puede lanzar. Espoleta fija de 7 segundos Convert to short fuse Appliquer une mèche 短信管へ変更 + Convertir a espoleta corta Remove short fuse Retirer la mèche 短信管を削除 + Quitar espoleta corta ACE Grenades @@ -566,11 +583,13 @@ Allow Explosive Conversion Autoriser les mèches (charges lançables) 爆薬変更を許可 + Permitir conversión de explosivos Allow converting explosives to throwables Cette option permet de rendre les charges explosives lançables, à la manière des grenades.\nPour celà, ouvrir l'inventaire et double-cliquer sur les charges, afin de leur appliquer une mèche.\nLa mèche peut se retirer en suivant la même procédure. 爆発物を投てき仕様へ交換できるようにします。 + Permitir convertir explosivos a lanzables diff --git a/addons/gunbag/stringtable.xml b/addons/gunbag/stringtable.xml index 4276ebcfcc..7d2050c52d 100644 --- a/addons/gunbag/stringtable.xml +++ b/addons/gunbag/stringtable.xml @@ -72,6 +72,7 @@ Échanger les armes ガンバッグ内の武器を交換 Silah çantasında silah değişimi + Intercambiar arma en funda de arma Enable Weapon Swap @@ -80,6 +81,7 @@ Activer l'échange d'arme 武器交換を有効化 Silah Değiştirmeyi Etkinleştir + Habilitar cambio de arma Allows interaction to directly swap the primary weapon and stored weapon. @@ -88,6 +90,7 @@ Active le menu d'interaction personnelle permettant d'échanger directement l'arme primaire et l'arme rangée dans la housse. 持っている武器とガンバッグ内の武器を交換できるようにします。 Etkileşimin doğrudan birincil silahı ve depolanan silahı değiştirmesine izin verir. + Permitir interacción para intercambiar el arma principal y el arma guardada. Get weapon out of gunbag diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index b67f363b00..3d77dd879d 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -285,6 +285,7 @@ Защита слуха Proteção Auditiva Ochrana sluchu + Protección auditiva Volume muffling @@ -298,6 +299,7 @@ Глушение звука Abafamento de Volume Snížení hlasitosti + Atenuación de volumen Earplugs Volume @@ -311,6 +313,7 @@ Volume do Protetor Auricular Volume bouchons anti bruit Hlasitost se špunty + Volumen de protectores auditivos Volume when using earplugs. @@ -324,6 +327,7 @@ Volume quando estiver utilizando um Protetor Auricular Volume audio perçu par les joueurs portant des bouchons anti bruit. Hlasitost při používání špuntů do uší. + Volumen cuando se utilizan protectores auditivos. Unconscious Volume @@ -337,6 +341,7 @@ Volume Inconsciente Volume inconscience Hlasitost při ztrátě vědomí + Volumen inconsciente Volume when unconscious. @@ -350,6 +355,7 @@ Volume enquanto inconsciente Volume perçu par les joueurs inconscients. Hlasitost během ztráty vědomí. + Volumen durante la inconsciencia. diff --git a/addons/hellfire/stringtable.xml b/addons/hellfire/stringtable.xml index 98ef38732d..e6500529cc 100644 --- a/addons/hellfire/stringtable.xml +++ b/addons/hellfire/stringtable.xml @@ -19,12 +19,15 @@ Semi-active laser homing missile with high explosive anti-tank warhead + Misil de guiado láser semi-activo con cabeza de alto explosivo anti-tanque Millimeter-wave radar guided missile with high explosive anti-tank warhead + Misil guiado por radar de onda milimétrica con cabeza de alto explosivo anti-tanque Semi-active laser homing missile with metal augmented charge anti-personnel warhead + Misil guiado por láser semi-activo con cabeza de carga de metal aumentada anti-persona diff --git a/addons/interact_menu/initSettings.sqf b/addons/interact_menu/initSettings.sqf index f9395f69e6..281ab095dd 100644 --- a/addons/interact_menu/initSettings.sqf +++ b/addons/interact_menu/initSettings.sqf @@ -39,7 +39,7 @@ "CHECKBOX", LSTRING(UseListMenu), [format ["ACE %1", LLSTRING(Category_InteractionMenu)], LLSTRING(Category_InteractionMenu)], - false, + true, false ] call CBA_fnc_addSetting; diff --git a/addons/interact_menu/stringtable.xml b/addons/interact_menu/stringtable.xml index de7be129ae..e76dd55c5d 100644 --- a/addons/interact_menu/stringtable.xml +++ b/addons/interact_menu/stringtable.xml @@ -493,11 +493,13 @@ Consolidate single child actions Объединять с единственным дочерним действием サブ動作を統合 + Consolidar acciones hijo únicas Combines parent action with only one child action together. Объединять родительское действие с единственным дочерним действием в одно. メインの動作とサブ動作一つを統合して表示します。 + Combina acciones padre con una única accion hijo de forma conjunta diff --git a/addons/interaction/stringtable.xml b/addons/interaction/stringtable.xml index fae143bde2..0e5f9ecb1f 100644 --- a/addons/interaction/stringtable.xml +++ b/addons/interaction/stringtable.xml @@ -1207,16 +1207,19 @@ Attach %1 Установить %1 %1 を取り付け + Acoplar %1 Detach %1 Снять %1 %1 を外す + Desacoplar %1 Enables attach/detach weapon attachment actions for current weapon. Включает действия Установить/Снять для приспособлений текущего оружия. インタラクションから使用中の武器に対してのアタッチメント取り外しを可能にします。 + Activar acciones de acoplar/desacoplar accesorios para el arma actual. diff --git a/addons/magazinerepack/stringtable.xml b/addons/magazinerepack/stringtable.xml index f26b18d058..18c37c7289 100644 --- a/addons/magazinerepack/stringtable.xml +++ b/addons/magazinerepack/stringtable.xml @@ -15,6 +15,7 @@ Remplissage des chargeurs Přepáskování zásobníků Şarjör Yeniden Doldurma + Reempaquetado de cargadores Time per round @@ -30,6 +31,7 @@ Temps par cartouche Čas na náboj Süre başına mermi + Tiempo por cartucho Time per magazine @@ -45,6 +47,7 @@ Temps par chargeur Čas na zásobník Süre başına şarjör + Tiempo por cargador Time per belt link @@ -59,6 +62,7 @@ Tempo por carregador de cinto Temps par bande Čas na článek pásu + Tiempo por enganche de cinta Repack Magazines diff --git a/addons/map/config.cpp b/addons/map/config.cpp index aab52c3536..943a63c228 100644 --- a/addons/map/config.cpp +++ b/addons/map/config.cpp @@ -100,7 +100,7 @@ class RscDisplayMainMap { class objects { class Compass: RscObject { scale = 0.7; - zoomDuration = 0; + zoomDuration = 0.1; // 0 (instant transition) breaks Arma saving position/size }; }; }; diff --git a/addons/map/stringtable.xml b/addons/map/stringtable.xml index 973cd9cac0..c2f827e7de 100644 --- a/addons/map/stringtable.xml +++ b/addons/map/stringtable.xml @@ -524,6 +524,7 @@ Отключить BFT Desativar BFT Vypnout sledování přátelských jednotek (BFT). + Desabilitar BFT Always disable Blue Force Tracking for this group. @@ -538,6 +539,7 @@ Всегда отключать Blue Force Tracking для этой группы Sempre desativar Rastreio Blue Force (BFT) para esse grupo. Vždy vypne sledování přátelských jednotek (BFT) pro tuto skupinu. + Deshabilitar siempre Blue Force Tracking para este grupo. diff --git a/addons/map_gestures/stringtable.xml b/addons/map_gestures/stringtable.xml index c3627d84a0..be24e8cc77 100644 --- a/addons/map_gestures/stringtable.xml +++ b/addons/map_gestures/stringtable.xml @@ -271,57 +271,68 @@ Pokazuj jedynie sojusznicze gesty Afficher uniquement le pointage des alliés 友軍ジェスチャーのみ表示 + Mostrar sólo gestos de aliados Shows only Gestures from Units that are from the same side or a Friendly side. Показывать жесты только от игроков союзной стороны. Affiche uniquement les pointages effectués par des unités qui sont du même camp, ou d'un camp allié. 友軍ユニットのみからジェスチャーを表示します。 + Muestra únicamente gestos de las unidades que son del mismo bando o de un bando aliado Max range Camera Portée de la caméra カメラ最大範囲 + Máximo alcance de cámara Max range between a Camera and players to show the map gesture indicator Définit le rayon au-delà duquel une caméra ne verra plus l'indicateur de pointage des autres joueurs. プレイヤーが行うマップ ジェスチャーをカメラから確認できる最大範囲を設定します。 + Máxima distancia entre una cámara y los jugadores para mostrar el indicador de gestos en mapa Allow Spectator Autoriser les spectateurs スペクテイターに許可 + Permitir espectador Allows Spectator to See Map Gestures Permet aux spectateurs de voir le pointage des autres joueurs. スペクテイターからマップ ジェスチャーを表示できるようにします。 + Permitir al espectador ver los gestos de mapa Allow Curator Autoriser les curateurs キュレーターに許可 + Permitir Curador Allows Curator to See Map Gestures Permet aux curateurs de voir le pointage des autres joueurs. キュレーターからマップ ジェスチャーを表示できるようにします。 + Permitir al Curador ver los gestos de mapa Briefing Mode Visibilité lors du briefing ブリーフィング モード + Modo de briefing What player can see what Définit quels pointages les joueurs peuvent voir lors du briefing. プレイヤーが見ることができる対象を決定します。 + Qué puede ver cada jugador Disabled Pointage désactivé 無効化 + Deshabilitado Group @@ -351,6 +362,7 @@ Proximity Proximité 付近のみ + Proximidad All diff --git a/addons/maptools/stringtable.xml b/addons/maptools/stringtable.xml index 56ee4daa18..4145954df9 100644 --- a/addons/maptools/stringtable.xml +++ b/addons/maptools/stringtable.xml @@ -202,6 +202,7 @@ Tecla para girar Ferramentas de Mapa Klávesa pro otáčení pomůcky k mapě Harita Aracının Yönünü Değiştirme Tuşu + Tecla para rotar herramientas de mapa Modifier key to allow rotating map tools @@ -217,6 +218,7 @@ Tecla de Modificador para permitir girar as ferramentas de mapa Klávesa která umožnuje otáčení pomůcky k mapě Dönen harita araçlarına izin veren değiştirici tuş + Tecla modificadora para permitir rotar herramientas de mapa Draw straight lines with maptools @@ -232,6 +234,7 @@ Desenhar linhas retas com as ferramentas de mapa Kreslit rovné čáry s pomůckou k mapě Maptools ile düz çizgiler çizme + Dibujar línea recta con las herramientas de mapa Draw on the edge of maptools to draw straight lines. Note: Must hover at midpoint to delete. @@ -247,6 +250,7 @@ Desenhe no canto da ferramenta de mapa para desenhar linhas retas. Observação: Sobreponha o meio com o mouse para deletar. Povolit kreslení rovných čar při kreslení na okraji pomůcky k mapě. Poznámka: Pro smazání musíte mít kurzor nad středem čáry. Düz çizgiler çizmek için maptools'un kenarına çizin. Not: Silmek için orta noktada fareyle üzerine gelmeniz gerekir. + Dibujar sobre el borde de las herramientas de mapa para dibujar líneas rectas. Nota: Debe situarse en el punto intermedio para eliminarla. diff --git a/addons/markers/InsertMarker.hpp b/addons/markers/InsertMarker.hpp index ed2d562220..9dd8005ce0 100644 --- a/addons/markers/InsertMarker.hpp +++ b/addons/markers/InsertMarker.hpp @@ -35,5 +35,11 @@ class RscDisplayInsertMarker { class MarkerAngleText: RscText { idc = IDC_ACE_INSERT_MARKER_ANGLE_TEXT; }; + class MarkerScale: RscXSliderH { + idc = IDC_ACE_INSERT_MARKER_SCALE; + }; + class MarkerScaleText: RscText { + idc = IDC_ACE_INSERT_MARKER_SCALE_TEXT; + }; }; }; diff --git a/addons/markers/XEH_PREP.hpp b/addons/markers/XEH_PREP.hpp index 9d358e2f8a..02214231ec 100644 --- a/addons/markers/XEH_PREP.hpp +++ b/addons/markers/XEH_PREP.hpp @@ -6,6 +6,7 @@ PREP(onLBSelChangedChannel); PREP(onLBSelChangedColor); PREP(onLBSelChangedShape); PREP(onSliderPosChangedAngle); +PREP(onSliderPosChangedScale); PREP(placeMarker); PREP(sendMarkersJIP); PREP(setMarkerJIP); diff --git a/addons/markers/XEH_postInit.sqf b/addons/markers/XEH_postInit.sqf index 7f644691d3..25e8317b75 100644 --- a/addons/markers/XEH_postInit.sqf +++ b/addons/markers/XEH_postInit.sqf @@ -15,6 +15,7 @@ if (isMultiplayer && {!isServer} && {hasInterface}) then { GVAR(mapDisplaysWithDrawEHs) = []; GVAR(currentMarkerPosition) = []; GVAR(currentMarkerAngle) = 0; +GVAR(currentMarkerScale) = 1; GVAR(currentMarkerColorConfigName) = ""; GVAR(currentMarkerConfigName) = ""; diff --git a/addons/markers/functions/fnc_initInsertMarker.sqf b/addons/markers/functions/fnc_initInsertMarker.sqf index 2fc71c2a39..c5fa330c85 100644 --- a/addons/markers/functions/fnc_initInsertMarker.sqf +++ b/addons/markers/functions/fnc_initInsertMarker.sqf @@ -45,6 +45,8 @@ private _aceColorLB = _display displayctrl IDC_ACE_INSERT_MARKER_COLOR; private _aceAngleSlider = _display displayctrl IDC_ACE_INSERT_MARKER_ANGLE; private _aceAngleSliderText = _display displayctrl IDC_ACE_INSERT_MARKER_ANGLE_TEXT; + private _aceScaleSlider = _display displayctrl IDC_ACE_INSERT_MARKER_SCALE; + private _aceScaleSliderText = _display displayctrl IDC_ACE_INSERT_MARKER_SCALE_TEXT; private _mapDisplay = displayParent _display; if (isNull _mapDisplay) exitWith {ERROR("No Map");}; @@ -103,7 +105,8 @@ private _pos = ctrlposition _text; _pos params ["_posX", "_posY", "_posW", "_posH"]; _posX = _posX + 0.01; - _posY = _posY min ((safeZoneH + safeZoneY) - (8 * _posH + 8 * BORDER)); //prevent buttons being placed below bottom edge of screen + _posY = _posY min ((safeZoneH + safeZoneY) - (11 * _posH + 11 * BORDER)); //prevent buttons being placed below bottom edge of screen + _pos set [0, _posX]; _pos set [1, _posY]; _text ctrlSetPosition _pos; @@ -118,9 +121,9 @@ //--- Description _pos set [1, _posY - 1 * _posH]; if (GVAR(timestampEnabled)) then { - _pos set [3,7 * _posH + 7 * BORDER]; + _pos set [3,9 * _posH + 9 * BORDER]; } else { - _pos set [3,6 * _posH + 6 * BORDER]; + _pos set [3,10 * _posH + 10 * BORDER]; }; _description ctrlEnable false; _description ctrlSetPosition _pos; @@ -187,16 +190,28 @@ _aceAngleSliderText ctrlSetPosition _pos; _aceAngleSliderText ctrlCommit 0; + //--- Scale + _pos set [1, _posY + 5 * _posH + 6 * BORDER + _timestampOffset]; + _pos set [2, _posW]; + _aceScaleSlider ctrlSetPosition _pos; + _aceScaleSlider ctrlCommit 0; + + //--- Scale Text + _pos set [1, _posY + 6 * _posH + 7 * BORDER + _timestampOffset]; + _pos set [2, _posW]; + _aceScaleSliderText ctrlSetPosition _pos; + _aceScaleSliderText ctrlCommit 0; + private _offsetButtons = 0; if (isMultiplayer) then { - _pos set [1,_posY + 5 * _posH + 7 * BORDER + _timestampOffset]; + _pos set [1,_posY + 7 * _posH + 9 * BORDER + _timestampOffset]; _pos set [3,_posH]; _descriptionChannel ctrlSetStructuredText parseText format ["%1:", localize "str_a3_cfgvehicles_modulerespawnposition_f_arguments_marker_0"]; _descriptionChannel ctrlSetPosition _pos; _descriptionChannel ctrlCommit 0; - _pos set [1,_posY + 6 * _posH + 7 * BORDER + _timestampOffset]; + _pos set [1,_posY + 8 * _posH + 9 * BORDER + _timestampOffset]; _pos set [3,_posH]; _channel ctrlSetPosition _pos; _channel ctrlCommit 0; @@ -235,11 +250,11 @@ _channel ctrlAddEventHandler ["LBSelChanged", {_this call FUNC(onLBSelChangedChannel)}]; - _offsetButtons = 7 * _posH + 8 * BORDER; + _offsetButtons = 9 * _posH + 10 * BORDER; } else { _descriptionChannel ctrlShow false; _channel ctrlShow false; - _offsetButtons = 5 * _posH + 7 * BORDER; + _offsetButtons = 7 * _posH + 9 * BORDER; }; //--- ButtonOK @@ -321,4 +336,20 @@ //Update now and add eventHandler: [_aceAngleSlider, _curSelAngle] call FUNC(onSliderPosChangedAngle); _aceAngleSlider ctrlAddEventHandler ["SliderPosChanged", {_this call FUNC(onSliderPosChangedAngle)}]; + + //////////////////// + // init marker scale slider + _aceScaleSlider sliderSetRange [0.5, 2.0]; + + if !(GVAR(editingMarker) isEqualTo "") then { + //get the original scale + GVAR(currentMarkerScale) = (markerSize GVAR(editingMarker)) param [0, 1]; + }; + + private _curSelScale = GETGVAR(currentMarkerScale,1); + _aceScaleSlider sliderSetPosition _curSelScale; + + //Update now and add eventHandler: + [_aceScaleSlider, _curSelScale] call FUNC(onSliderPosChangedScale); + _aceScaleSlider ctrlAddEventHandler ["SliderPosChanged", {_this call FUNC(onSliderPosChangedScale)}]; }, _this] call CBA_fnc_execNextFrame; diff --git a/addons/markers/functions/fnc_mapDrawEH.sqf b/addons/markers/functions/fnc_mapDrawEH.sqf index 5f3c6aed15..02540b699f 100644 --- a/addons/markers/functions/fnc_mapDrawEH.sqf +++ b/addons/markers/functions/fnc_mapDrawEH.sqf @@ -1,7 +1,7 @@ #include "script_component.hpp" /* * Author: PabstMirror - * Draws the current temp marker. Allows rotation. + * Draws the current temp marker. Allows rotation and scale. * * Arguments: * 0: TheMap @@ -25,8 +25,8 @@ if (GVAR(currentMarkerConfigName) == "" || {GVAR(currentMarkerColorConfigName) = ERROR("Bad Data"); }; -private _sizeX = 1; -private _sizeY = 1; +private _sizeX = GVAR(currentMarkerScale); +private _sizeY = GVAR(currentMarkerScale); private _textureConfig = configFile >> "CfgMarkers" >> GVAR(currentMarkerConfigName); private _texture = getText (_textureConfig >> "icon"); diff --git a/addons/markers/functions/fnc_onSliderPosChangedScale.sqf b/addons/markers/functions/fnc_onSliderPosChangedScale.sqf new file mode 100755 index 0000000000..8f386729d0 --- /dev/null +++ b/addons/markers/functions/fnc_onSliderPosChangedScale.sqf @@ -0,0 +1,28 @@ +#include "script_component.hpp" +/* + * Author: frankplow + * Applies scale from on slider position change. + * + * Arguments: + * 0: Slider (idc 1420) + * 1: Slider Data (scale: 0.5...2.0) + * + * Return Value: + * None + * + * Example: + * [slider, 1.5] call ace_markers_fnc_onSliderPosChangedScale + * + * Public: No + */ + +params ["_ctrl", "_data"]; +TRACE_2("params",_ctrl,_data); + +private _scale = _data * 100; +_scale = round _scale; +_scale = _scale / 100; + +((ctrlParent _ctrl) displayCtrl IDC_ACE_INSERT_MARKER_SCALE_TEXT) ctrlSetText format [localize LSTRING(MarkerScale), _scale]; + +GVAR(currentMarkerScale) = _data; diff --git a/addons/markers/functions/fnc_placeMarker.sqf b/addons/markers/functions/fnc_placeMarker.sqf index 61f18a30d8..77942343ad 100644 --- a/addons/markers/functions/fnc_placeMarker.sqf +++ b/addons/markers/functions/fnc_placeMarker.sqf @@ -58,7 +58,8 @@ if (_closeNum isEqualTo 1) then { GETGVAR(currentMarkerConfigName,""), GETGVAR(currentMarkerColorConfigName,""), GETGVAR(currentMarkerPosition,[]), - GETGVAR(currentMarkerAngle,0) + GETGVAR(currentMarkerAngle,0), + GETGVAR(currentMarkerScale,1) ] ]] call CBA_fnc_globalEvent; diff --git a/addons/markers/functions/fnc_setMarkerJIP.sqf b/addons/markers/functions/fnc_setMarkerJIP.sqf index 9c9aea9fd7..a4c2e9631e 100644 --- a/addons/markers/functions/fnc_setMarkerJIP.sqf +++ b/addons/markers/functions/fnc_setMarkerJIP.sqf @@ -25,7 +25,7 @@ TRACE_2("params",_allMapMarkers,_allMapMarkersProperties); if (_index != -1) then { private _data = _allMapMarkersProperties select _index; - _data params ["_markerClassname", "_colorClassname", "_pos", "_dir"]; + _data params ["_markerClassname", "_colorClassname", "_pos", "_dir", "_scale"]; private _config = (configfile >> "CfgMarkers") >> _markerClassname; @@ -47,6 +47,7 @@ TRACE_2("params",_allMapMarkers,_allMapMarkersProperties); _x setMarkerPosLocal _pos; _x setMarkerDirLocal _dir; + _x setMarkerSizeLocal [_scale, _scale]; }; false } count allMapMarkers; diff --git a/addons/markers/functions/fnc_setMarkerNetwork.sqf b/addons/markers/functions/fnc_setMarkerNetwork.sqf index eb0b547bb0..a8e8453525 100644 --- a/addons/markers/functions/fnc_setMarkerNetwork.sqf +++ b/addons/markers/functions/fnc_setMarkerNetwork.sqf @@ -19,7 +19,7 @@ params ["_marker", "_data"]; TRACE_2("params",_marker,_data); -_data params ["_markerClassname", "_colorClassname", "_pos", "_dir"]; +_data params ["_markerClassname", "_colorClassname", "_pos", "_dir", "_scale"]; private _config = configfile >> "CfgMarkers" >> _markerClassname; @@ -41,6 +41,7 @@ _marker setMarkerColorLocal configName _config; _marker setMarkerPosLocal _pos; _marker setMarkerDirLocal _dir; +_marker setMarkerSizeLocal [_scale, _scale]; // save properties on server machine for JIP, marker editing ready if (isMultiplayer && {isServer}) then { diff --git a/addons/markers/script_component.hpp b/addons/markers/script_component.hpp index ab0a10961b..8da334153d 100644 --- a/addons/markers/script_component.hpp +++ b/addons/markers/script_component.hpp @@ -38,3 +38,5 @@ #define IDC_ACE_INSERT_MARKER_COLOR 1221 #define IDC_ACE_INSERT_MARKER_ANGLE 1230 #define IDC_ACE_INSERT_MARKER_ANGLE_TEXT 1231 +#define IDC_ACE_INSERT_MARKER_SCALE 1240 +#define IDC_ACE_INSERT_MARKER_SCALE_TEXT 1241 diff --git a/addons/markers/stringtable.xml b/addons/markers/stringtable.xml index bf5fcb6d78..992d4da8e1 100644 --- a/addons/markers/stringtable.xml +++ b/addons/markers/stringtable.xml @@ -1,6 +1,10 @@ + + Scale: %1 + Escala: %1 + Direction: %1° Drehung: %1° @@ -32,6 +36,7 @@ Marqueurs Značky Işaretleyiciler + Marcadores Allow moving markers for @@ -46,6 +51,7 @@ Permitir que movam marcadores Permettre le déplacement des marqueurs pour Povolit pohyb se značkami pro + Permitir marcadores en movimiento para Restricts which players are able to move markers while holding the Alt key. @@ -61,6 +67,7 @@ Définit quels joueurs peuvent déplacer des marqueurs en maintenant la touche Alt enfoncée. Omezuje kdo může pohybovat se značkami při podržení klávesy Alt. Alt tuşunu basılı tutarken hangi işaretçilerin hareket edebileceğini sınırlar. + Reestringir qué jugadores son capaces de mover los marcadores manteniendo pulsada la tecla Alt. Nobody @@ -76,6 +83,7 @@ Personne Nikdo Hiçkimse + Ninguno All players @@ -91,6 +99,7 @@ Tous les joueurs Všichni hráči Bütün Oyuncular + Todos los jugadores Admins @@ -106,6 +115,7 @@ Admins Administrátoři Adminler + Admins Group leaders @@ -121,6 +131,7 @@ Chefs de groupe Velitelé jednotek Grup Liderleri + Líderes de grupo Group leaders and Admins @@ -136,6 +147,7 @@ Chefs de groupe et Admins Velitelé jednotek a Administrátoři Grup Liderleri Ve Adminler + Líderes de grupo y administradores Creator @@ -149,76 +161,91 @@ Creatore Tvůrce Yaratıcı + Creador Allow Timestamps Permettre l'horodatage タイムスタンプ許可 + Permitir marcas de tiempo Whether to allow timestamps to be automatically applied to markers Active une interface permettant d'apposer un horodatage sur les marqueurs. マーカーへ自動的にタイムスタンプを付与するかどうかを設定できます。 + Permitir que las marcas de tiempo sean automáticamente aplicadas a los marcadores Timestamp Horodatage タイムスタンプ + Marca de tiempo Watch Required Une montre est requise. 時計の要求 + Reloj requerido Timestamp Format Horodatage - Format タイムスタンプ形式 + Formato de marca de tiempo Changes the timestamp format Modifie le format de l'horodatage. タイムスタンプの形式を変更します + Cambia el formato de marca de tiempo "HH" - Hour "HH" - Heures "HH" - 時間 + "HH" - Hora "MM" - Minute "MM" - Minutes "MM" - 分 + "MM" - Minuto "SS" - Seconds "SS" - Secondes "SS" - 秒 + "SS" - Segundos "MM" - Milliseconds "MS" - Millisecondes "MM" - ミリ秒 + "MM" - Milisegundos Timestamp Hour Format Horodatage - Système horaire タイムスタンプ時刻形式 + Formato de hora de marca de tiempo 24-Hour Clock Format 24 heures 24 時間表記 + Reloj 24-Horas 12-Hour Clock Format 12 heures 12 時間表記 + Reloj 12-Horas Changes timestamp to use either 24-hour or 12-hour clock format Permet de choisir le système d'horodatage souhaité, au format 12 ou 24 heures. タイムスタンプの時刻を 24 時間か 12 時間表記のどちらかに変更できます。 + Cambia que la marca de tiempo sea en formato de reloj 24-horas o 12-horas diff --git a/addons/maverick/stringtable.xml b/addons/maverick/stringtable.xml index 60c20dd6f3..d4eaa914a4 100644 --- a/addons/maverick/stringtable.xml +++ b/addons/maverick/stringtable.xml @@ -16,6 +16,7 @@ AGM-65L Maverick, Missile Air-Sol à Guidage Laser AGM-65 Maverick L, Laserem naváděná střela vzduch-země AGM-65 Maverick L, Laser Guided Anti-Ground-Missile + AGM-65 Maverick L, Misil Aire-Tierra guiado por Láser AGM-65 Maverick L [ACE] @@ -31,6 +32,7 @@ 1x AGM-65L Maverick [ACE] AGM-65 Maverick L [ACE] AGM-65 Maverick L [ACE] + AGM-65 Maverick L [ACE] 2x AGM-65 Maverick L [ACE] @@ -46,6 +48,7 @@ 2x AGM-65L Maverick [ACE] 2x AGM-65 Maverick L [ACE] 2x AGM-65 Maverick L [ACE] + 2x AGM-65 Maverick L [ACE] 3x AGM-65 Maverick L [ACE] @@ -61,9 +64,11 @@ 3x AGM-65L Maverick [ACE] 3x AGM-65 Maverick L [ACE] 3x AGM-65 Maverick L [ACE] + 3x AGM-65 Maverick L [ACE] MAVL + MAVL Kh-25ML, Laser Guided Air-to-Ground-Missile @@ -79,6 +84,7 @@ Kh-25ML, Missile Air-Sol à Guidage Laser Kh-25ML, Laserem naváděná střela vzduch-země Kh-25ML, Laser Guided Air-to-Ground-Missile + Kh-25ML, Misil Aire-Tierra guiado por Láser 1x Kh-25ML [ACE] @@ -94,6 +100,7 @@ 1x Kh-25ML [ACE] 1x Kh-25ML [ACE] 1x Kh-25ML [ACE] + 1x Kh-25ML [ACE] AGM-65 Maverick D @@ -132,6 +139,7 @@ AGM-65L Maverick AGM-65 Maverick L AGM-65 Maverick L + AGM-65 Maverick L Kh-25ML @@ -147,6 +155,7 @@ Kh-25ML Kh-25ML Kh-25ML + Kh-25ML diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 667050ae9b..1808c48891 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -59,6 +59,7 @@ Zvýšení pravděpodobnosti probuzení s Epinefrinem Увеличение шанса очнуться от адреналина Epinefrin Uyanma Şansı Artışı + Aumento de probabilidad de despertarse por epinefrina Increases how often spontaneous wake up checks happen when patient has Epinephrine in their system. @@ -200,6 +201,7 @@ Les attelles guérissent les fractures, mais empêchent de courir 添え木で治癒可能、駆け足できないように Ateller İyileştirir, Ama Koşu Yapamaz + Las férulas sanan, pero no pueden trotar Fracture Chance @@ -210,6 +212,7 @@ Шанс перелома Szansa na złamanie Kırılma Şansı + Probabilidad de fractura The probability of a fracture causing wound resulting in a fracture. @@ -220,6 +223,7 @@ Вероятность перелома при получении соответствующих ран. Prawdopodobieństwo złamania kości w wyniku rany mogącej powodować złamania. Yaraya neden olan bir kırığın kırılma olasılığı. + La probabilidad de que una herida que pueda provocar una fractura, provoque una fractura. Enabled for diff --git a/addons/medical_ai/stateMachine.sqf b/addons/medical_ai/stateMachine.sqf index 48d5a6ef8e..03483f4981 100644 --- a/addons/medical_ai/stateMachine.sqf +++ b/addons/medical_ai/stateMachine.sqf @@ -1,3 +1,5 @@ +//pragma SKIP_COMPILE - Inline file + GVAR(stateMachine) = [{call EFUNC(common,getLocalUnits)}, true] call CBA_statemachine_fnc_create; // Add states [statemachine, onState, onStateEntered, onStateLeaving, name] diff --git a/addons/medical_damage/functions/fnc_woundsHandlerSQF.sqf b/addons/medical_damage/functions/fnc_woundsHandlerSQF.sqf index 93472f1d7a..b0de1f6e4a 100644 --- a/addons/medical_damage/functions/fnc_woundsHandlerSQF.sqf +++ b/addons/medical_damage/functions/fnc_woundsHandlerSQF.sqf @@ -122,8 +122,10 @@ private _bodyPartVisParams = [_unit, false, false, false, false]; // params arra _critialDamage = true; }; if ([_unit, _bodyPartNToAdd, _bodyPartDamage, _woundDamage] call FUNC(determineIfFatal)) then { - TRACE_1("determineIfFatal returned true",_woundDamage); - [QEGVAR(medical,FatalInjury), _unit] call CBA_fnc_localEvent; + if (!isPlayer _unit || {random 1 < EGVAR(medical,deathChance)}) then { + TRACE_1("determineIfFatal returned true",_woundDamage); + [QEGVAR(medical,FatalInjury), _unit] call CBA_fnc_localEvent; + }; }; #ifdef DEBUG_MODE_FULL diff --git a/addons/medical_damage/initSettings.sqf b/addons/medical_damage/initSettings.sqf index 12806a46a2..5d9003addf 100644 --- a/addons/medical_damage/initSettings.sqf +++ b/addons/medical_damage/initSettings.sqf @@ -33,3 +33,21 @@ [0, 1, 0.1, 2, true], true ] call CBA_fnc_addSetting; + +[ + QEGVAR(medical,deathChance), + "SLIDER", + [LSTRING(deathChance_DisplayName), LSTRING(deathChance_Description)], + ELSTRING(medical,Category), + [0, 1, 1, 2, true], + true +] call CBA_fnc_addSetting; + +[ + QEGVAR(medical,enableVehicleCrashes), + "CHECKBOX", + [LSTRING(EnableVehicleCrashes_DisplayName), LSTRING(EnableVehicleCrashes_Description)], + ELSTRING(medical,Category), + true, + true +] call CBA_fnc_addSetting; diff --git a/addons/medical_damage/stringtable.xml b/addons/medical_damage/stringtable.xml index 4c74c96db1..145832b770 100644 --- a/addons/medical_damage/stringtable.xml +++ b/addons/medical_damage/stringtable.xml @@ -676,6 +676,7 @@ Порог урона Próg obrażeń jednostki Birim Hasar Katsayısı + Umbral de daño de unidad Sets the amount of damage a unit can receive before going unconscious. (0 for mission default) @@ -686,16 +687,35 @@ Устанавливает количество урона, которое может получить юнит перед тем, как потерять сознание. (0 для значения миссии) Ustawia próg obrażeń jakie może otrzymać jednostka przed utratą przytomności. (0 jako ustawienie domyślne misji) Bilinçsiz duruma geçmeden önce bir birimin alabileceği hasar miktarını ayarlar. (Görev varsayılanı için 0) + Determina la cantidad de daño que puede recibir una unidad antes de quedar inconsciente (0 para predeterminado de misión) Pain Unconscious Chance Szansa na nieprzytomność przez ból 気絶確立 + Probabilidad de inconsciencia por dolor The probability of a person falling unconscious when their pain is above the tolerance threshold upon receiving damage. Szansa że osoba straci przytomność gdy jej ból jest powyżej tolerowalnego progu podczas otrzymywania obrażeń. ユニットがダメージを受けた時に痛みが許容しきい値を超えた場合、気絶をする確立を設定します。 + La probabilidad de que una persona caiga inconsciente cuando su dolor está por encima del umbral al haber recibido daño. + + + Fatal Injury Death Chance + Probabilidad de muerte por herida fatal + + + The chance of dying to a fatal injury. + La probabilidad de morir a causa de una herida fatal. + + + Enable Vehicle Crash Damage + Activar daño por accidente de vehículo + + + Controls whether crew receives damage from vehicle collisions. + Controla si la tripulación recibe daño debido a colisiones en vehículo. diff --git a/addons/medical_engine/functions/fnc_handleDamage.sqf b/addons/medical_engine/functions/fnc_handleDamage.sqf index 1975bde0c5..9eb799cdcd 100644 --- a/addons/medical_engine/functions/fnc_handleDamage.sqf +++ b/addons/medical_engine/functions/fnc_handleDamage.sqf @@ -94,7 +94,7 @@ if (_hitPoint isEqualTo "ace_hdbracket") exitWith { // represents all incoming damage for selecting a non-selectionSpecific wound location, (used for selectRandomWeighted [value1,weight1,value2....]) private _damageSelectionArray = [ - HITPOINT_INDEX_HEAD, _damageHead select 1, HITPOINT_INDEX_BODY, _damageBody select 1, HITPOINT_INDEX_LARM, _damageLeftArm select 1, + HITPOINT_INDEX_HEAD, _damageHead select 1, HITPOINT_INDEX_BODY, _damageBody select 1, HITPOINT_INDEX_LARM, _damageLeftArm select 1, HITPOINT_INDEX_RARM, _damageRightArm select 1, HITPOINT_INDEX_LLEG, _damageLeftLeg select 1, HITPOINT_INDEX_RLEG, _damageRightLeg select 1 ]; @@ -204,14 +204,15 @@ if ( // It does fire the EH multiple times, but this seems to scale with the intensity of the crash private _vehicle = vehicle _unit; if ( - _hitPoint isEqualTo "#structural" && + EGVAR(medical,enableVehicleCrashes) && + {_hitPoint isEqualTo "#structural"} && {_ammo isEqualTo ""} && {_vehicle != _unit} && {vectorMagnitude (velocity _vehicle) > 5} // todo: no way to detect if stationary and another vehicle hits you ) exitWith { private _damageSelectionArray = [ - HITPOINT_INDEX_HEAD, 1, HITPOINT_INDEX_BODY, 1, HITPOINT_INDEX_LARM, 1, + HITPOINT_INDEX_HEAD, 1, HITPOINT_INDEX_BODY, 1, HITPOINT_INDEX_LARM, 1, HITPOINT_INDEX_RARM, 1, HITPOINT_INDEX_LLEG, 1, HITPOINT_INDEX_RLEG, 1 ]; [QEGVAR(medical,woundReceived), [_unit, "Body", _newDamage, _unit, "vehiclecrash", _damageSelectionArray]] call CBA_fnc_localEvent; diff --git a/addons/medical_engine/functions/fnc_setUnconsciousAnim.sqf b/addons/medical_engine/functions/fnc_setUnconsciousAnim.sqf index 27ed364bf5..f71c550add 100644 --- a/addons/medical_engine/functions/fnc_setUnconsciousAnim.sqf +++ b/addons/medical_engine/functions/fnc_setUnconsciousAnim.sqf @@ -27,7 +27,7 @@ _unit setUnconscious _isUnconscious; if (_isUnconscious) then { // eject from static weapon - if (vehicle _unit isKindOf "StaticWeapon") then { + if (vehicle _unit isKindOf "StaticWeapon" && {!(vehicle _unit isKindOf "Pod_Heli_Transport_04_crewed_base_F")}) then { TRACE_2("ejecting from static weapon",_unit,vehicle _unit); [_unit] call EFUNC(common,unloadPerson); }; diff --git a/addons/medical_feedback/functions/fnc_playInjuredSound.sqf b/addons/medical_feedback/functions/fnc_playInjuredSound.sqf index 5773f904ff..44f60b496f 100644 --- a/addons/medical_feedback/functions/fnc_playInjuredSound.sqf +++ b/addons/medical_feedback/functions/fnc_playInjuredSound.sqf @@ -33,7 +33,7 @@ private _distance = if (_type == "hit") then { } else { [10, 15, 20] select _severity; }; -private _targets = allPlayers inAreaArray [getPosWorld _unit, _distance, _distance, 0, false, _distance]; +private _targets = allPlayers inAreaArray [ASLToAGL getPosASL _unit, _distance, _distance, 0, false, _distance]; if (_targets isEqualTo []) exitWith {}; // Handle timeout diff --git a/addons/medical_feedback/stringtable.xml b/addons/medical_feedback/stringtable.xml index d2ef55ecd7..f51f16cdcd 100644 --- a/addons/medical_feedback/stringtable.xml +++ b/addons/medical_feedback/stringtable.xml @@ -112,6 +112,7 @@ Efekt pro nízké množství krve Efekt po utracie znacznej ilości krwi Düşük Kan Efekt Türü + Tipo de efecto por volumen bajo de sangre Selects the used low blood volume effect type. @@ -121,6 +122,7 @@ Nastavuje který efekt pro nízké množství krve bude používán. Wybiera efekt ktory będzie pokazywany po utracie znacznej ilości krwi. Kullanılan düşük kan hacmi efekt türünü seçer. + Selecciona el tipo de efecto a causa de un volumen bajo de sangre. Color Fading @@ -130,6 +132,7 @@ Ztráta barev Zanikanie kolorów Renk Soldurma + Atenuación del color Icon @@ -139,6 +142,7 @@ Ikona Ikona Simge + Icono Icon + Color Fading @@ -148,6 +152,7 @@ Ikona + Ztráta barev Ikona + Zanikanie kolorów Simge + Renk Soldurma + Icono + Atenuación del color diff --git a/addons/medical_gui/stringtable.xml b/addons/medical_gui/stringtable.xml index 7020c0fe99..59232ba01e 100644 --- a/addons/medical_gui/stringtable.xml +++ b/addons/medical_gui/stringtable.xml @@ -193,11 +193,13 @@ Show Triage Level in Interaction Menu Couleur de triage dans le menu d'interaction インタラクションにトリアージ レベル表示 + Mostrar nivel de triado en menú de interacción Shows the patient's triage level by changing the color of the main and medical menu actions. Modifie la couleur du menu d'interactions et du sous-menu médical en fonction de la fiche de triage du patient. メニューと医療メニューの色を変更し、患者のトリアージ レベルを表示します。 + Mostrar el nivel de triado en el paciente cambiando el color de acciones de menú principales y médicas Medical @@ -1118,6 +1120,7 @@ 伤员信息 患者情報 Hasta Bilgileri + Información de paciente diff --git a/addons/medical_statemachine/stringtable.xml b/addons/medical_statemachine/stringtable.xml index 2518b25c96..923b3d021b 100644 --- a/addons/medical_statemachine/stringtable.xml +++ b/addons/medical_statemachine/stringtable.xml @@ -149,12 +149,14 @@ Ausbluten im Herzstillstand Saignement durant l'arrêt cardiaque 心停止中の失血 + Desangrado durante parada cardíaca Controls whether a person can die in cardiac arrest by blood loss before the cardiac arrest time runs out. Legt fest, ob man während des Herzstillstands durch Blutverlust sterben kann, auch wenn die Überlebenszeit im Herzstillstand noch nicht ausgelaufen ist. Définit si un joueur en arrêt cardiaque peut mourir par exsanguination, avant que la durée de l'arrêt cardiaque définie ci-dessus ne soit écoulée. 心停止時間を超え死亡する前に、失血による心停止で死亡するかどうかを決定します。 + COntrola si una persona puede morir en parada cardíaca por causa de pérdida de sangre antes de que se termine el contador de parada cardíaca diff --git a/addons/medical_treatment/config.cpp b/addons/medical_treatment/config.cpp index 29c11c18ad..7506903b46 100644 --- a/addons/medical_treatment/config.cpp +++ b/addons/medical_treatment/config.cpp @@ -3,8 +3,8 @@ class CfgPatches { class ADDON { name = COMPONENT_NAME; - units[] = {}; - weapons[] = {}; + units[] = {"ACE_fieldDressingItem","ACE_packingBandageItem","ACE_elasticBandageItem","ACE_tourniquetItem","ACE_splintItem","ACE_morphineItem","ACE_adenosineItem","ACE_epinephrineItem","ACE_plasmaIVItem","ACE_bloodIVItem","ACE_salineIVItem","ACE_quikClotItem","ACE_personalAidKitItem","ACE_surgicalKitItem","ACE_bodyBagItem","ACE_medicalSupplyCrate","ACE_medicalSupplyCrate_advanced"}; + weapons[] = {"ACE_fieldDressing","ACE_packingBandage","ACE_elasticBandage","ACE_tourniquet","ACE_splint","ACE_morphine","ACE_adenosine","ACE_epinephrine","ACE_plasmaIV","ACE_plasmaIV_500","ACE_plasmaIV_250","ACE_bloodIV","ACE_bloodIV_500","ACE_bloodIV_250","ACE_salineIV","ACE_salineIV_500","ACE_salineIV_250","ACE_quikclot","ACE_personalAidKit","ACE_surgicalKit","ACE_bodyBag"}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_medical_status", "ace_medical_damage", "ace_apl"}; author = ECSTRING(common,ACETeam); diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml index 70b361fd66..a857885b6a 100644 --- a/addons/medical_treatment/stringtable.xml +++ b/addons/medical_treatment/stringtable.xml @@ -69,6 +69,7 @@ Medicazione avanzata Zaawansowane leki Gelişmiş Ilaç + Medicación avanzada Enables extended, more in-depth medication handling. Also, enables the use of Adenosine. @@ -81,6 +82,7 @@ Abilita una gestione della medicazione più estesa e approfondita. Permette inoltre l'utilizzo dell'Adenosina. Ermöglicht erweiterte, mehr tiefgründigere Anwendung von Medikationen. Ebenso ermöglicht es die Benutzung von Adenosin. Pozwala na zaawansowane uzycie leków. Pozwala na używanie Adenozyny. + Habilita el manejo de la medicación más avanzada y en profundidad. Tambien permite el uso de Adenosina. Advanced Bandages @@ -118,6 +120,7 @@ Включено и может открыться заново Aktywne & możliwe ponowne otwarcie Etkinleştirildi ve Yeniden Açılabilir + Habilitada y pueden reabrirse Wound Reopening Coefficient @@ -128,6 +131,7 @@ Współczynnik ponownego otwierania ran 再開放係数 Yara Yeniden Açılma Katsayısı + Coeficiente de reapertura de heridas Coefficient for controlling the wound reopening chance. The final reopening chance is determined by multiplying this value with the specific reopening chance for the wound type and bandage used. @@ -138,6 +142,7 @@ Współczynnik kontroluje szanse na ponowne otworzenie rany. Końcowa szansa na otworzenie jest ustalana przez pomnożenie tej wartości z wartością szansy na otworzenie rany dla typu rany oraz typu bandaża. 傷が再開放する確率の係数を設定できます。再開放は、この数値と傷の種類、そして使用した包帯に応じて左右されます。 Yaranın yeniden açılma şansını kontrol etme katsayısı. Son yeniden açılma şansı, bu değerin kullanılan yara tipi ve bandaj için spesifik yeniden açılma şansı ile çarpılmasıyla belirlenir. + Coeficiente que controla la probabilidad de reapertura de heridas. La probabilidad final de reapertura de heridas queda determinada multiplicando este valor por la probabilidad específica del tipo de herida y venda usada. Clear Trauma After Bandage @@ -255,59 +260,69 @@ Autoinjector Treatment Time Durée d'interaction - Auto-injecteurs 注射器の使用時間 + Tiempo de tratamiento de autoinyección Time, in seconds, required to administer medication using an autoinjector. Définit le temps nécessaire à l'administration d'une substance auto-injectable (en secondes). 注射器の使用に掛かる時間 (秒) を決定します。 + Tiempo, en segundos, requerido para administrar medicación utilizando un autoinyectador. Tourniquet Treatment Time Durée d'interaction - Garrots Tourniquet-Behandlungszeit 止血帯の使用時間 + Tiempo de tratamiento de torniquete Time, in seconds, required to apply/remove a tourniquet. Définit le temps nécessaire à l'application ou au retrait d'un garrot (en secondes). Zeit in Sekunden, die benötigt wird, um ein Tourniquet anzuwenden. 止血帯の使用/排除に掛かる時間 (秒) を決定します。 + Tiempo, en segundos, requerido para aplicar/quitar un torniquete. IV Bag Treatment Time Durée d'interaction - IVs IV Beutelbehandlungszeit 点滴の使用時間 + Tiempo de tratamiento de bolsa de IV Time, in seconds, required to administer an IV bag. Définit le temps nécessaire à la pose d'une perfusion IV (en secondes). Zeit in Sekunden, die benötigt wird, um einen Infusionsbeutel aufzutragen. 点滴の投与に掛かる時間 (秒) を決定します。 + Tiempo, en segundos, requerido para administrar una bolsa de IV. Splint Treatment Time Durée d'interaction - Attelles Schienenbehandlungszeit 添え木の使用時間 + TIempo de tratamiento de férula Time, in seconds, required to apply a splint. Définit le temps nécessaire à l'application d'une attelle (en secondes). Zeit in Sekunden, die zum Anbringen einer Schiene benötigt wird. 添え木の使用に掛かる時間 (秒) を決定します。 + TIempo, en segundos, requerido para aplicar una férula. Body Bag Use Time Durée d'interaction - Housses mortuaires Anwendungszeit für Leichensack 死体袋の使用時間 + TIempo de uso de bolsa para cuerpos Time, in seconds, required to put a patient in a body bag. Définit le temps nécessaire à la mise en housse d'un corps (en secondes). Zeit in Sekunden, die benötigt wird, um einen Leichensack aufzutragen. 死体袋の使用に掛かる時間 (秒) を決定します。 + Tiempo, en segundos, requerido para poner a un paciente en una bolsa para cuerpos. Allow Epinephrine @@ -470,6 +485,7 @@ Samo-použití osobní lékárničky (PAK) Использование аптечки на себе Kendi PAK Kullanımı + Usar EPA sobre uno mismo Enables the use of PAKs to heal oneself. @@ -482,6 +498,7 @@ Umožňuje použít osobní lékárničku (PAK) na sama sebe. Позволяют использовать аптечку на себе в одиночку. Kendini iyileştirmek için PAK'ların kullanılmasını sağlar. + Habilita el uso de EPA para curarse a uno mismo. Time Coefficient PAK @@ -623,11 +640,13 @@ Wound Stitch Time Durée d'interaction - Sutures 縫合時間 + Tiempo de sutura de herida Time, in seconds, required to stitch a single wound. Définit le temps nécessaire à la suture d'une plaie (en secondes). 縫合に掛かる時間 (秒) を決定します。 + Tiempo, en segundos, requerido para suturar una única herida. Self IV Transfusion @@ -659,11 +678,13 @@ Allow Unconscious Body Bag Housse mortuaire - Autoriser patients inconscients 無意識者を死体袋に + Permitir bolsa para cuerpos inconsciente Enables placing an unconscious patient in a body bag. Active la possibilité de placer des patients inconscients dans les housses mortuaires.\nAttention : le cas échéant cela provoquera la mort du patient. 気絶しているプレイヤーを死体袋へ入れられるかどうかを決定します。 + Permitir colocar a un paciente inconsciente en una bolsa para cuerpos. Allow IV Transfusion @@ -674,6 +695,7 @@ IV 輸血の制限 Povolit IV transfuzi Разрешить переливание IV группы крови + Permitir transfusión de IV Training level required to transfuse IVs. @@ -684,14 +706,17 @@ IV 輸血を行うのに訓練済レベルを要求とします。 Úroveň výcviku nutná pro IV transfuzi. Уровень навыка требуемый для переливания крови IV группы. + Nivel de capacitación requerido para transfusiones de IV. Locations IV Transfusion IV 輸血の場所制限 + Ubicación para transfusiones IV Controls where IV transfusions can be performed. IV 輸血を行える場所を決定できます。 + Controla dónde pueden ser realizadas las transfusiones IV. Convert Vanilla Items @@ -919,11 +944,13 @@ CPR Treatment Time Durée d'interaction - RCP CPR の動作時間 + Tiempo de tratamiento de RCP Time, in seconds, required to perform CPR on a patient. Définit le temps nécessaire à la mise en œuvre d'une RCP (en secondes). 心肺蘇生にかかる時間 (秒) を決定します。 + Tiempo, en segundos, requerido para realizar RCP en un paciente. Holster Required @@ -4385,6 +4412,7 @@ The body twitched and may not be dead! L'unité a bougé et n'est peut-être pas morte ! 身体が動き死んでないようだ! + ¡El cuerpo se retorció y puede que no esté muerto! diff --git a/addons/microdagr/XEH_clientInit.sqf b/addons/microdagr/XEH_clientInit.sqf index 7a8d775a05..8a5db92e0b 100644 --- a/addons/microdagr/XEH_clientInit.sqf +++ b/addons/microdagr/XEH_clientInit.sqf @@ -17,6 +17,22 @@ private _closeCode = { }; [(localize LSTRING(itemName)), QPATHTOF(images\microDAGR_item.paa), _conditonCode, _toggleCode, _closeCode] call EFUNC(common,deviceKeyRegisterNew); +// Mode keybinds: +["ACE3 Equipment", QGVAR(previousMode), LLSTRING(previousMode), { + private _newMode = GVAR(currentApplicationPage) - 1; + if (_newMode < APP_MODE_INFODISPLAY) then { + _newMode = APP_MODE_SETUP; + }; + [_newMode] call FUNC(saveCurrentAndSetNewMode); +}, ""] call CBA_fnc_addKeybind; + +["ACE3 Equipment", QGVAR(nextMode), LLSTRING(nextMode), { + private _newMode = GVAR(currentApplicationPage) + 1; + if (_newMode > APP_MODE_SETUP) then { + _newMode = APP_MODE_INFODISPLAY; + }; + [_newMode] call FUNC(saveCurrentAndSetNewMode); +}, ""] call CBA_fnc_addKeybind; //Add Eventhandler: [QEGVAR(vector,rangefinderData), {_this call FUNC(recieveRangefinderData)}] call CBA_fnc_addEventHandler; diff --git a/addons/microdagr/functions/fnc_saveCurrentAndSetNewMode.sqf b/addons/microdagr/functions/fnc_saveCurrentAndSetNewMode.sqf index 973e0ac7fb..068b8d2cd2 100644 --- a/addons/microdagr/functions/fnc_saveCurrentAndSetNewMode.sqf +++ b/addons/microdagr/functions/fnc_saveCurrentAndSetNewMode.sqf @@ -20,7 +20,7 @@ params ["_newMode"]; disableSerialization; private _display = uiNamespace getVariable [[QGVAR(RscTitleDisplay), QGVAR(DialogDisplay)] select (GVAR(currentShowMode) == DISPLAY_MODE_DIALOG), displayNull]; -if (isNull _display) exitWith {ERROR("No Display");}; +if (isNull _display) exitWith {LOG("No Display");}; if (GVAR(currentApplicationPage) == 2) then { private _theMap = [_display displayCtrl IDC_MAPDETAILS, _display displayCtrl IDC_MAPPLAIN] select (!GVAR(mapShowTexture)); diff --git a/addons/microdagr/stringtable.xml b/addons/microdagr/stringtable.xml index f34315d59c..341a255779 100644 --- a/addons/microdagr/stringtable.xml +++ b/addons/microdagr/stringtable.xml @@ -584,5 +584,13 @@ 设定有多少数据会显示在微型军用GPS接收器上。这些资料的多寡会反映在迷你地图的显示上。 設定有多少數據會顯示在微型軍用GPS接收器上。這些資料的多寡會反映在迷你地圖的顯示上。 + + MicroDAGR - Previous Mode + MicroDAGR - Modo anterior + + + MicroDAGR - Next Mode + MicroDAGR - Modo siguiente + diff --git a/addons/mk6mortar/README.md b/addons/mk6mortar/README.md index 3e5109f38f..072fdf7f15 100644 --- a/addons/mk6mortar/README.md +++ b/addons/mk6mortar/README.md @@ -1,7 +1,7 @@ ace_mk6mortar ========== -Tweaks the Nk6 Mortar system. +Tweaks the Mk6 Mortar system. ## Maintainers diff --git a/addons/nametags/config.cpp b/addons/nametags/config.cpp index 2db10c7eeb..30b8415787 100644 --- a/addons/nametags/config.cpp +++ b/addons/nametags/config.cpp @@ -19,4 +19,4 @@ class CfgPatches { #include "CfgFactionClasses.hpp" #include "CfgVehicles.hpp" -#include +#include "RscTitles.hpp" diff --git a/addons/nametags/functions/fnc_drawNameTagIcon.sqf b/addons/nametags/functions/fnc_drawNameTagIcon.sqf index 55fb2d960f..338f8b37fc 100644 --- a/addons/nametags/functions/fnc_drawNameTagIcon.sqf +++ b/addons/nametags/functions/fnc_drawNameTagIcon.sqf @@ -1,6 +1,6 @@ #include "script_component.hpp" /* - * Author: commy2, esteldunedain + * Author: commy2, esteldunedain, Drift_91 * Draw the nametag and rank icon. * * Arguments: @@ -33,12 +33,15 @@ _fnc_parameters = { if (_drawSoundwave) then { _icon = format [QPATHTOF(UI\soundwave%1.paa), floor random 10]; } else { - if (_drawRank && {rank _target != ""}) then { - _icon = GVAR(factionRanks) getVariable (_target getVariable [QGVAR(faction), faction _target]); - if (!isNil "_icon") then { - _icon = _icon param [ALL_RANKS find rank _target, ""]; - } else { - _icon = format ["\A3\Ui_f\data\GUI\Cfg\Ranks\%1_gs.paa", rank _target]; + if (_drawRank) then { + _icon = _target getVariable "ace_nametags_rankIcon"; + if (isNil "_icon" && {rank _target != ""}) then { + _icon = GVAR(factionRanks) getVariable (_target getVariable [QGVAR(faction), faction _target]); + if (!isNil "_icon") then { + _icon = _icon param [ALL_RANKS find rank _target, ""]; + } else { + _icon = format ["\A3\Ui_f\data\GUI\Cfg\Ranks\%1_gs.paa", rank _target]; + }; }; }; }; diff --git a/addons/nightvision/CfgWeapons.hpp b/addons/nightvision/CfgWeapons.hpp index a81835996f..52c3d32d18 100644 --- a/addons/nightvision/CfgWeapons.hpp +++ b/addons/nightvision/CfgWeapons.hpp @@ -27,23 +27,63 @@ class CfgWeapons { }; class ACE_NVG_Gen1: NVGoggles_OPFOR { author = ECSTRING(common,ACETeam); - displayName = CSTRING(NVG_Gen1); + displayName = CSTRING(NVG_Gen1_black); GVAR(generation) = 1; }; + class ACE_NVG_Gen1_Brown: NVGoggles { + author = ECSTRING(common,ACETeam); + displayName = CSTRING(NVG_Gen1_brown); + GVAR(generation) = 1; + }; + class ACE_NVG_Gen1_Green: NVGoggles_INDEP { + author = ECSTRING(common,ACETeam); + displayName = CSTRING(NVG_Gen1_green); + GVAR(generation) = 1; + }; + class ACE_NVG_Gen2_Black: NVGoggles_OPFOR { + author = ECSTRING(common,ACETeam); + displayName = CSTRING(NVG_Gen2_black); + GVAR(generation) = 2; + }; + class ACE_NVG_Gen2_Brown: NVGoggles { + author = ECSTRING(common,ACETeam); + displayName = CSTRING(NVG_Gen2_brown); + GVAR(generation) = 2; + }; class ACE_NVG_Gen2: NVGoggles_INDEP { author = ECSTRING(common,ACETeam); - displayName = CSTRING(NVG_Gen2); + displayName = CSTRING(NVG_Gen2_green); GVAR(generation) = 2; }; + class ACE_NVG_Gen4_Black: NVGoggles_OPFOR { + author = ECSTRING(common,ACETeam); + displayName = CSTRING(NVG_Gen4_black); + GVAR(generation) = 4; + }; class ACE_NVG_Gen4: NVGoggles { author = ECSTRING(common,ACETeam); - displayName = CSTRING(NVG_Gen4); + displayName = CSTRING(NVG_Gen4_brown); GVAR(generation) = 4; }; + class ACE_NVG_Gen4_Green: NVGoggles_INDEP { + author = ECSTRING(common,ACETeam); + displayName = CSTRING(NVG_Gen4_green); + GVAR(generation) = 4; + }; + class ACE_NVG_Wide_Black: NVGoggles_OPFOR { + author = ECSTRING(common,ACETeam); + modelOptics = QPATHTOF(models\ACE_nvg_wide_optics); + displayName = CSTRING(NVG_Wide_black); + }; class ACE_NVG_Wide: NVGoggles { author = ECSTRING(common,ACETeam); modelOptics = QPATHTOF(models\ACE_nvg_wide_optics); - displayName = CSTRING(NVG_FullScreen); + displayName = CSTRING(NVG_Wide_brown); + }; + class ACE_NVG_Wide_Green: NVGoggles_INDEP { + author = ECSTRING(common,ACETeam); + modelOptics = QPATHTOF(models\ACE_nvg_wide_optics); + displayName = CSTRING(NVG_Wide_green); }; diff --git a/addons/nightvision/config.cpp b/addons/nightvision/config.cpp index ffdb3d16a0..f416af9d38 100644 --- a/addons/nightvision/config.cpp +++ b/addons/nightvision/config.cpp @@ -4,7 +4,21 @@ class CfgPatches { class ADDON { name = COMPONENT_NAME; units[] = {}; - weapons[] = {"ACE_NVG_Gen1", "ACE_NVG_Gen2", /*"ACE_NVG_Gen3",*/ "ACE_NVG_Gen4", "ACE_NVG_Wide"}; + weapons[] = { + "ACE_NVG_Gen1", + "ACE_NVG_Gen1_Brown", + "ACE_NVG_Gen1_Green", + "ACE_NVG_Gen2_Black", + "ACE_NVG_Gen2_Brown", + "ACE_NVG_Gen2", + /*"ACE_NVG_Gen3",*/ + "ACE_NVG_Gen4_Black", + "ACE_NVG_Gen4", + "ACE_NVG_Gen4_Green", + "ACE_NVG_Wide_Black", + "ACE_NVG_Wide", + "ACE_NVG_Wide_Green" + }; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_common"}; author = ECSTRING(common,ACETeam); diff --git a/addons/nightvision/stringtable.xml b/addons/nightvision/stringtable.xml index af3d048f1e..1df394f83a 100644 --- a/addons/nightvision/stringtable.xml +++ b/addons/nightvision/stringtable.xml @@ -16,39 +16,23 @@ ACE Gece Görüşü ACE visión nocturna - - NV Goggles (Gen1) - Noktovizor (Gen1) - JVN (Gen1) - NS-Brille (1. Gen.) - Occhiali notturni (Gen1) - Gogle noktowizyjne (Gen1) - Óculos de visão noturna (Gen1) - ПНВ (Gen1) - Gafas de visión nocturna (Gen1) - Éjjellátó szemüveg (1. Gen.) - 暗視装置 (第1世代) - 야투경 (1세대) - 夜视镜 (初代) - 夜視鏡 (初代) - GG Gözlüğü (1. Jen) + + NV Goggles (Gen1, Brown) - - NV Goggles (Gen2) - Noktovizor (Gen2) - JVN (Gen2) - NS-Brille (2. Gen.) - Occhiali notturni (Gen2) - Gogle noktowizyjne (Gen2) - Óculos de visão noturna (Gen2) - ПНВ (Gen2) - Gafas de visión nocturna (Gen2) - Éjjellátó szemüveg (2. Gen.) - 暗視装置 (第2世代) - 야투경 (2세대) - 夜视镜 (二代) - 夜視鏡 (二代) - GG Gözlüğü (2. Jen) + + NV Goggles (Gen1, Black) + + + NV Goggles (Gen1, Green) + + + NV Goggles (Gen2, Brown) + + + NV Goggles (Gen2, Black) + + + NV Goggles (Gen2, Green) NV Goggles (Gen3) @@ -118,39 +102,23 @@ 夜視鏡 (三代, 黑色) GG Gözlüğü (3. Jen Siyah) - - NV Goggles (Gen4) - Noktovizor (Gen4) - JVN (Gen4) - NS-Brille (4. Gen.) - Occhiali notturni (Gen4) - Gogle noktowizyjne (Gen4) - Óculos de visão noturna (Gen4) - ПНВ (Gen4) - Gafas de visión nocturna (Gen4) - Éjjellátó szemüveg (4. Gen.) - 暗視装置 (第4世代) - 야투경 (4세대) - 夜视镜 (四代) - 夜視鏡 (四代) - GG Gözlüğü (4. Jen) + + NV Goggles (Gen4, Brown) - - NV Goggles (Wide) - NS-Brille (Weitwinkel) - Gafas de visión nocturna (Panorámicas) - Gogle noktowizyjne (panoramiczne) - Noktovizor (Širokoúhlý) - ПНВ (Широкоугольный) - JVN (Large) - Éjjellátó szemüveg (széles látószögű) - Óculos de visão noturna (Panorâmico) - Occhiali notturni (Larghi) - 暗視装置 (ワイド) - 야투경 (넓음) - 夜视镜 (宽版) - 夜視鏡 (寬版) - GG Gözlüğü (Geniş) + + NV Goggles (Gen4, Black) + + + NV Goggles (Gen4, Green) + + + NV Goggles (Wide, Brown) + + + NV Goggles (Wide, Black) + + + NV Goggles (Wide, Green) Brightness: %1 diff --git a/addons/overpressure/stringtable.xml b/addons/overpressure/stringtable.xml index b701337cb2..c5683598e2 100644 --- a/addons/overpressure/stringtable.xml +++ b/addons/overpressure/stringtable.xml @@ -15,6 +15,7 @@ Coeficiente de Distância de Sobrepressão Túlnyomás-távolság együtthatója Koeficient vzdálenosti přetlaku + Coeficiente de distancia de sobrepresión Scales the overpressure effect [Default: 1] @@ -30,6 +31,7 @@ Escala o efeito de sobrepressão [Padrão: 1] Állítja a túlnyomás hatását [Alapértelmezett: 1] Nastavuje jak velký je efekt přetlaku [Standard: 1] + Escala el efecto de sobrepresión [Predeterminado: 1] Backblast range @@ -44,6 +46,7 @@ Utóhatás távolsága Portée du backblast Dosah zpětné tlakové vlny (backblast) + Alcance del cono de fuego Backblast angle @@ -58,6 +61,7 @@ Utóhatás aránya Angle du backblast Úhel zpětné tlakové vlny (backblast) + Ángulo del cono de fuego diff --git a/addons/parachute/CfgVehicles.hpp b/addons/parachute/CfgVehicles.hpp index 5f1b750377..245d1a73be 100644 --- a/addons/parachute/CfgVehicles.hpp +++ b/addons/parachute/CfgVehicles.hpp @@ -21,6 +21,7 @@ class CfgVehicles { }; }; MACRO_HASRESERVE + GVAR(failureDelay) = 2; }; class ParachuteWest: ParachuteBase { MACRO_HASRESERVE diff --git a/addons/parachute/XEH_PREP.hpp b/addons/parachute/XEH_PREP.hpp index 6edd22c260..916aa1ccdb 100644 --- a/addons/parachute/XEH_PREP.hpp +++ b/addons/parachute/XEH_PREP.hpp @@ -1,4 +1,5 @@ PREP(cutParachute); +PREP(handleFailureChance); PREP(handleInfoDisplayChanged); PREP(handleReserve); PREP(hideAltimeter); diff --git a/addons/parachute/XEH_postInit.sqf b/addons/parachute/XEH_postInit.sqf index 06e02f0757..1217fa3cab 100644 --- a/addons/parachute/XEH_postInit.sqf +++ b/addons/parachute/XEH_postInit.sqf @@ -38,3 +38,5 @@ if (!hasInterface) exitWith {}; // Don't show vanilla speed and height when in expert mode ["ace_infoDisplayChanged", {_this call FUNC(handleInfoDisplayChanged)}] call CBA_fnc_addEventHandler; + +["vehicle", {_this call FUNC(handleFailureChance)}] call CBA_fnc_addPlayerEventHandler; diff --git a/addons/parachute/XEH_preInit.sqf b/addons/parachute/XEH_preInit.sqf index b01263d60b..1ec8ff20d6 100644 --- a/addons/parachute/XEH_preInit.sqf +++ b/addons/parachute/XEH_preInit.sqf @@ -18,4 +18,13 @@ PREP_RECOMPILE_END; {[QGVAR(hideAltimeter), _this, false] call EFUNC(common,cbaSettings_settingChanged)} ] call CBA_fnc_addSetting; +[ + QGVAR(failureChance), + "SLIDER", + LSTRING(FailureChance), + ["ACE Uncategorized", localize "str_dn_parachute"], + [0, 1, 0, 2, true], + 1 +] call CBA_fnc_addSetting; + ADDON = true; diff --git a/addons/parachute/functions/fnc_cutParachute.sqf b/addons/parachute/functions/fnc_cutParachute.sqf index 286673af41..711a8ddb80 100644 --- a/addons/parachute/functions/fnc_cutParachute.sqf +++ b/addons/parachute/functions/fnc_cutParachute.sqf @@ -4,16 +4,20 @@ * Perform the cut parachute action (move unit out and delete) * * Arguments: - * 0: Object + * 0: Player + * 1: Parachute * * Return Value: * None * * Example: - * [player, vehicle player] call FUNC(cutParachute); + * [player, vehicle player] call ace_parachute_fnc_cutParachute; * * Public: No */ params ["_unit", "_parachute"]; +TRACE_2("cutParachute", _unit, _parachute); + +playSound3d ["A3\Sounds_F\characters\parachute\parachute_landing.wss", _unit]; _unit action ["GetOut", _parachute]; deleteVehicle _parachute; diff --git a/addons/parachute/functions/fnc_handleFailureChance.sqf b/addons/parachute/functions/fnc_handleFailureChance.sqf new file mode 100644 index 0000000000..e5ec0b5cde --- /dev/null +++ b/addons/parachute/functions/fnc_handleFailureChance.sqf @@ -0,0 +1,26 @@ +#include "script_component.hpp" +/* + * Author: JoramD + * Handles percentage chance parachute failure. + * + * Arguments: + * 0: Unit + * 1: Vehicle + * + * Return Value: + * None + * + * Example: + * [player, vehicle player] call ace_parachute_fnc_handleFailureChance + * + * Public: No + */ + +params ["_unit", "_vehicle"]; + +if !(_vehicle isKindOf "ParachuteBase") exitWith {}; + +if (random 1 < GVAR(failureChance)) then { + private _failureDelay = getNumber (configOf _vehicle >> QGVAR(failureDelay)); + [FUNC(cutParachute), [_unit, _vehicle], _failureDelay] call CBA_fnc_waitAndExecute; +}; diff --git a/addons/parachute/stringtable.xml b/addons/parachute/stringtable.xml index f5c1015425..ff68c14f0e 100644 --- a/addons/parachute/stringtable.xml +++ b/addons/parachute/stringtable.xml @@ -133,5 +133,8 @@ Oculta la altitud y la velocidad que se muestran en caída libre o en paracaídas. Serbest düşme veya paraşütle atlama sırasında gösterilen yüksekliği ve hızı gizler. + + Parachute Failure Chance + diff --git a/addons/pylons/stringtable.xml b/addons/pylons/stringtable.xml index 87ccaf6f49..d6f2823643 100644 --- a/addons/pylons/stringtable.xml +++ b/addons/pylons/stringtable.xml @@ -14,6 +14,7 @@ СНАРЯЖЕНИЕ САМОЛЕТА LOADOUT DA AERONAVE VÝZBROJ LETADLA + ARMAMENTO DE AERONAVE Loadouts for %1 @@ -28,6 +29,7 @@ Оснащение %1 Loadouts para %1 Sady výzbroje pro %1 + Armamento para %1 Configure Pylons @@ -42,6 +44,7 @@ Настройка Пилонов Configurar Pylons Nastavit pylony + Configurar pilones ACE Pylons @@ -56,6 +59,7 @@ ACE Пилоны ACE Pylons ACE Pylony + ACE Pilones <empty> @@ -71,6 +75,7 @@ <vazio> <prázdné> <boş> + <vacío> Pylons that are colored red will have to be manually rearmed. @@ -85,6 +90,7 @@ Пилоны, окрашенные красным, должны быть переоборудованы вручную Pylons que estão coloridos de vermelho, precisarão ser rearmados manualmente. Pylony označené červeně budou muset být manuálně přezbrojeny. + Pilones de color rojo deben ser rearmados manualmente. %1 is already configuring this aircraft! @@ -99,6 +105,7 @@ %1 уже настраивает эту авиатехнику! %1 já está configurando essa aeronave! %1 už nastavuje výzbroj tohoto letadla! + %1 ya está configurando esta aeronave! Replacing pylon %1 out of %2... @@ -113,6 +120,7 @@ Замена пилона %1 из %2... Substituindo pylon %1 de %2... Nahrazuji pylon %1 z %2... + Reemplazando pilón %1 de %2... Stopped at pylon %1! @@ -127,6 +135,7 @@ Остановлено на пилоне %1! Parado no pylon %1! Přerušeno na pylonu %1! + Parado en pilón %1! Vehicle too far @@ -141,6 +150,7 @@ Техника слишком далеко Veículo muito longe Vozidlo je příliš daleko + Vehículo demasiado alejado Enable Pylons Menu for Zeus @@ -154,6 +164,7 @@ Активировать Меню пилонов для Зевса Ativar Menu de Pylon para Zeus Povolit menu s pylony pro Zeuse + Habilitar menú de pilones para Zeus Enables use of the zeus module. @@ -167,6 +178,7 @@ Позволяет использовать модуль Зевса Permite usar o módulo de Zeus Povoluje použití daného Zeus modulu. + Habilita el uso del módulo de Zeus. Enable Pylons Menu from Ammo Trucks @@ -180,6 +192,7 @@ Меню пилонов из грузовика боеприпасов Ativar Menu de Pylons de Caminhões de Munição Povolit menu s pylony z muničních náklaďáků. + Habilitar menú de pilones desde camiones de munición Enables use of pylons menu from ammo trucks. @@ -193,6 +206,7 @@ Позволяет использовать меню пилонов из грузовика с боеприпасами Permite abrir o menu de pylons através de veículos de munição. Povoluje použití menu na nastavení pylonů z náklaďáků s municí. + Habilita el uso del menú de pilones desde camiones de munición. This aircraft doesn't have pylons @@ -206,6 +220,7 @@ Эта авиатехника не имеет пилонов Essa aeronave não possui pylons Toto letadlo nemá pylony + Esta aeronave no tiene pilones Configure pylons module is disabled for zeus @@ -219,6 +234,7 @@ Модуль Настройка пилонов отключен для Zeus O Módulo de configurar pylons está desativado para o Zeus Nastavení pylonů je vypnuto pro Zeuse + La configuración del módulo de pilones está deshabilitada para Zeus Rearm New Pylons @@ -233,6 +249,7 @@ Перевооружать новые пилоны Rearmar novos pylons Přezbrojit nové pylony + Rearmar nuevos pilones Automatically rearm new pylons from the nearest rearm vehicle. @@ -247,6 +264,7 @@ Автоматически перевооружать новые пилоны из ближайшей техники с боеприпасами Automaticamente rearmas novos pylons com o veículo de munição mais próximo Automaticky přezbrojit nové pylony z nejbližšího vozidla s municí. + Rearma automáticamente nuevos pilones desde el vehículo de rearme más cercano. Time Per Pylon @@ -261,6 +279,7 @@ Время на пилон Tempo por pylon Čas na pylon + Tiempo por pilón The time it takes to replace each pylon (in seconds). @@ -275,6 +294,7 @@ Время для замены каждого пилона (в секундах) O tempo necessário para substituir cada pylon (em segundos) Udává čas jaký trvá nahrazení každého pylonu (ve vteřinách). + El tiempo que lleva reemplazar cada pilón (en segundos). Search Distance @@ -289,6 +309,7 @@ Дальность поиска Distância de procura Vzdálenost hledání munice + Distancia de búsqueda The distance an aircraft needs to be from a rearm vehicle. @@ -303,6 +324,7 @@ Дальность от авиатехники до грузовика (пункта) с боеприпасами A distância que a aeronave precisa estar de um veículo de munições. Maximální vzdálenost ze které je možné letadlo přezbrojit s vozidlem s municí. + La distancia a la que debe estar una aeronave de un vehículo de rearme. Require Engineer @@ -317,6 +339,7 @@ Требуется Инженер Requer um engenheiro Vyžadovat Inženýra + Requerir Ingeniero Require an engineer. @@ -331,6 +354,7 @@ Требуется роль Инженера É necessário uma unidade definida como engenheiro para interagir com pylons. Vyžaduje, aby hráč byl Inženýr. + Requerir un Ingeniero. Require Toolkit @@ -345,6 +369,7 @@ Требуется Набор инструментов Requer Kit de Ferramentas Vyžadovat sadu nářadí (toolkit). + Requerir Kit de herramientas Require a toolkit in inventory. @@ -359,6 +384,7 @@ Требуется наличие Набора инструментов в инвентаре Requer um Kit de Ferramentas no inventário. Vyžaduje, aby hráč měl ve svém inventáři sadu nářadí (toolkit). + Requiere un Kit de herramientas en el inventario diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index 0340620ff5..7fd7932150 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -1328,6 +1328,7 @@ M183 Charge de démolition (lançable) M183 梱包爆薬 (投てき仕様) M183 Demolition Charge (Throwable) + Carga de demolición M183 (Lanzable) M112 Demolition Block @@ -1351,6 +1352,7 @@ M112 Bloc de démolition (lançable) M112 爆薬ブロック (投てき仕様) M112 Demolition Charge (Throwable) + Bloque de demolición M112 (Lanzable) M67 Fragmentation Grenade @@ -3494,6 +3496,7 @@ Polaris DAGOR (XM312) Polaris DAGOR (XM312) Polaris DAGOR (XM312) + Polaris DAGOR (XM312) Polaris DAGOR (Mini-Spike AT) @@ -3508,6 +3511,7 @@ Polaris DAGOR (Mini-Spike AC) Polaris DAGOR (Mini-Spike AT) Polaris DAGOR (Mini-Spike AT) + Polaris DAGOR (Mini-Spike AT) Polaris DAGOR @@ -3522,6 +3526,7 @@ Polaris DAGOR Polaris DAGOR Polaris DAGOR + Polaris DAGOR Polaris DAGOR (light) @@ -3536,6 +3541,7 @@ Polaris DAGOR (léger) Polaris DAGOR (lehký) Polaris DAGOR (light) + Polaris DAGOR (ligero) LSV Mk. II (M134) @@ -3550,6 +3556,7 @@ LSV Mk. II (M134) LSV Mk. II (M134) LSV Mk. II (M134) + LSV Mk. II (M134) LSV Mk. II (Metis-M) @@ -3564,6 +3571,7 @@ LSV Mk. II (Metis-M) LSV Mk. II (Metis-M) LSV Mk. II (Metis-M) + LSV Mk. II (Metis-M) LSV Mk. II @@ -3578,6 +3586,7 @@ LSV Mk. II LSV Mk. II LSV Mk. II + LSV Mk. II Rooikat 120 @@ -3592,6 +3601,7 @@ Rooikat 120 Rooikat 120 Rooikat 120 + Rooikat 120 Rooikat 120 UP @@ -3606,6 +3616,7 @@ Rooikat 120 UP Rooikat 120 UP Rooikat 120 UP + Rooikat 120 UP T-14 Armata @@ -3620,6 +3631,7 @@ T-14 Armata T-14 Armata T-14 Armata + T-14 Armata T-14K Armata @@ -3634,6 +3646,7 @@ T-14K Armata T-14K Armata T-14K Armata + T-14K Armata Wiesel 2 Ozelot (AA) @@ -3648,6 +3661,7 @@ Wiesel 2 Ozelot (AA) Wiesel 2 Ozelot (AA) Wiesel 2 Ozelot (AA) + Wiesel 2 Ozelot (AA) Wiesel 2 (ATGM) @@ -3662,6 +3676,7 @@ Wiesel 2 (ATGM) Wiesel 2 (ATGM) Wiesel 2 (ATGM) + Wiesel 2 (ATGM) Wiesel 2 (MK20) @@ -3676,6 +3691,7 @@ Wiesel 2 (MK20) Wiesel 2 (MK20) Wiesel 2 (MK20) + Wiesel 2 (MK20) Wiesel 2 RFCV (Radar) @@ -3690,6 +3706,7 @@ Wiesel 2 RFCV (Radar) Wiesel 2 RFCV (Radar) Wiesel 2 RFCV (Radar) + Wiesel 2 RFCV (Radar) Leupold Mark 4 HAMR @@ -3704,6 +3721,7 @@ Leupold Mark 4 HAMR Leupold Mark 4 HAMR Leupold Mark 4 HAMR + Leupold Mark 4 HAMR Leupold Mark 4 HAMR (Khaki) @@ -3718,6 +3736,7 @@ Leupold Mark 4 HAMR (Kaki) Leupold Mark 4 HAMR (Khaki) Leupold Mark 4 HAMR (Haki) + Leupold Mark 4 HAMR (Caqui) Leupold Mark 4 HAMR (2D) @@ -3732,6 +3751,7 @@ Leupold Mark 4 HAMR (2D) Leupold Mark 4 HAMR (2D) Leupold Mark 4 HAMR (2D) + Leupold Mark 4 HAMR (2D) ELCAN SpecterOS (Tan) @@ -3746,6 +3766,7 @@ ELCAN SpecterOS (Tan) ELCAN SpecterOS (Žlutohnědá) ELCAN SpecterOS (Tan) + ELCAN SpecterOS (Tan) ELCAN SpecterOS (Black) @@ -3760,6 +3781,7 @@ ELCAN SpecterOS (Noire) ELCAN SpecterOS (Černá) ELCAN SpecterOS (Siyah) + ELCAN SpecterOS (Negra) ELCAN SpecterOS (Green Hex) @@ -3773,6 +3795,7 @@ ELCAN SpecterOS (Hex Verte) ELCAN SpecterOS (Zelený Hex) ELCAN SpecterOS (Yeşil Hex) + ELCAN SpecterOS (Verde Hex) ELCAN SpecterOS (2D) @@ -3787,6 +3810,7 @@ ELCAN SpecterOS (2D) ELCAN SpecterOS (2D) ELCAN SpecterOS (2D) + ELCAN SpecterOS (2D) SIG BRAVO4 / ROMEO3 (Black) @@ -3801,6 +3825,7 @@ SIG BRAVO4 / ROMEO3 (Noire) SIG BRAVO4 / ROMEO3 (Černá) SIG BRAVO4 / ROMEO3 (Siyah) + SIG BRAVO4 / ROMEO3 (Negra) SIG BRAVO4 / ROMEO3 (Khaki) @@ -3815,6 +3840,7 @@ SIG BRAVO4 / ROMEO3 (Kaki) SIG BRAVO4 / ROMEO3 (Khaki) SIG BRAVO4 / ROMEO3 (Haki) + SIG BRAVO4 / ROMEO3 (Caqui) SIG BRAVO4 / ROMEO3 (Sand) @@ -3829,6 +3855,7 @@ SIG BRAVO4 / ROMEO3 (Beige) SIG BRAVO4 / ROMEO3 (Písková) SIG BRAVO4 / ROMEO3 (Kum) + SIG BRAVO4 / ROMEO3 (Arena) Nightforce NXS @@ -3842,6 +3869,7 @@ Nightforce NXS Nightforce NXS Nightforce NXS + Nightforce NXS Nightforce NXS (Green Hex) @@ -3855,6 +3883,7 @@ Nightforce NXS (Hex Verte) Nightforce NXS (Zelený Hex) Nightforce NXS (Yeşil Hex) + Nightforce NXS (Verde Hex) Nightforce NXS (Jungle) @@ -3869,6 +3898,7 @@ Nightforce NXS (Jungle) Nightforce NXS (Džungle) Nightforce NXS (Orman) + Nightforce NXS (Jungla) Nightforce NXS (2D) @@ -3882,6 +3912,7 @@ Nightforce NXS (2D) Nightforce NXS (2D) Nightforce NXS (2D) + Nightforce NXS (2D) US Optics MR-10 (Black) @@ -3895,6 +3926,7 @@ US Optics MR-10 (Noire) US Optics MR-10 (Černá) US Optics MR-10 (Siyah) + US Optics MR-10 (Negra) US Optics MR-10 (Khaki) @@ -3908,6 +3940,7 @@ US Optics MR-10 (Kaki) US Optics MR-10 (Khaki) US Optics MR-10 (Haki) + US Optics MR-10 (Caqui) US Optics MR-10 (Sand) @@ -3921,6 +3954,7 @@ US Optics MR-10 (Beige) US Optics MR-10 (Písková) US Optics MR-10 (Kum) + US Optics MR-10 (Arena) KAHLES Helia (Black) @@ -3934,6 +3968,7 @@ KAHLES Helia (Noire) KAHLES Helia (Černá) KAHLES Helia (Siyah) + KAHLES Helia (Negra) KAHLES Helia (Hex) @@ -3947,6 +3982,7 @@ KAHLES Helia (Hex) KAHLES Helia (Hex) KAHLES Helia (Hex) + KAHLES Helia (Hex) KAHLES Helia (Old) @@ -3960,6 +3996,7 @@ KAHLES Helia (Usée) KAHLES Helia (Stará) KAHLES Helia (Eski) + KAHLES Helia (Vieja) KAHLES Helia (Tan) @@ -3973,6 +4010,7 @@ KAHLES Helia (Tan) KAHLES Helia (Žlutohnědá) KAHLES Helia (Tan) + KAHLES Helia (Tan) Burris XTR II @@ -3986,6 +4024,7 @@ Burris XTR II Burris XTR II Burris XTR II + Burris XTR II Burris XTR II (Green Hex) @@ -3999,6 +4038,7 @@ Burris XTR II (Hex Verte) Burris XTR II (Zelený Hex) Burris XTR II (Yeşil Hex) + Burris XTR II (Verde Hex) EOTech XPS3 (Tan) @@ -4013,6 +4053,7 @@ EOTech XPS3 (Tan) EOTech XPS3 (Žlutohnědá) EOTech XPS3 (Tan) + EOTech XPS3 (Tan) EOTech XPS3 (Black) @@ -4027,6 +4068,7 @@ EOTech XPS3 (Noire) EOTech XPS3 (Černá) EOTech XPS3 (Siyah) + EOTech XPS3 (Negra) EOTech XPS3 (Khaki) @@ -4041,6 +4083,7 @@ EOTech XPS3 (Kaki) EOTech XPS3 (Khaki) EOTech XPS3 (Haki) + EOTech XPS3 (Caqui) EOTech XPS3 SMG (Tan) @@ -4055,6 +4098,7 @@ EOTech XPS3 SMG (Tan) EOTech XPS3 SMG (Žlutohnědá) EOTech XPS3 SMG (Tan) + EOTech XPS3 SMG (Tan) EOTech XPS3 SMG (Black) @@ -4069,6 +4113,7 @@ EOTech XPS3 SMG (Noire) EOTech XPS3 SMG (Černá) EOTech XPS3 SMG (Siyah) + EOTech XPS3 SMG (Negra) EOTech XPS3 SMG (Khaki) @@ -4083,6 +4128,7 @@ EOTech XPS3 SMG (Kaki) EOTech XPS3 SMG (Khaki) EOTech XPS3 SMG (Hakii) + EOTech XPS3 SMG (Caqui) IOR-Valdada Pitbull 2 @@ -4096,6 +4142,7 @@ IOR-Valdada Pitbull 2 IOR-Valdada Pitbull 2 IOR-Valdada Pitbull 2 + IOR-Valdada Pitbull 2 IOR-Valdada Pitbull 2 (2D) @@ -4109,6 +4156,7 @@ IOR-Valdada Pitbull 2 (2D) IOR-Valdada Pitbull 2 (2D) IOR-Valdada Pitbull 2 (2D) + IOR-Valdada Pitbull 2 (2D) Burris FastFire 2 @@ -4122,6 +4170,7 @@ Burris FastFire 2 Burris FastFire 2 Burris FastFire 2 + Burris FastFire 2 C-More Railway (Red) @@ -4136,6 +4185,7 @@ C-More Railway (Rouge) C-More Railway (Červený) C-More Railway (Kırmızı) + C-More Railway (Roja) C-More Railway (Green) @@ -4150,6 +4200,7 @@ C-More Railway (Verte) C-More Railway (Zelený) C-More Railway (Yeşil) + C-More Railway (Verde) C-More Railway SMG (Red) @@ -4164,6 +4215,7 @@ C-More Railway SMG (Rouge) C-More Railway SMG (Červený) C-More Railway SMG (Kırmızı) + C-More Railway SMG (Roja) C-More Railway SMG (Green) @@ -4178,6 +4230,7 @@ C-More Railway SMG (Verte) C-More Railway SMG (Zelený) C-More Railway SMG (Yeşil) + C-More Railway SMG (Verde) P90 TR (Black) diff --git a/addons/scopes/stringtable.xml b/addons/scopes/stringtable.xml index 0cc4b3e7cd..eae39deffd 100644 --- a/addons/scopes/stringtable.xml +++ b/addons/scopes/stringtable.xml @@ -15,6 +15,7 @@ Mira Telescópica Puškohledy Dürbünler + Visores Enable ACE Scope adjustment @@ -29,6 +30,7 @@ Включить настройку прицелов ACE Permitir ajustes de Mira do ACE Povolit ACE náměr puškohledů + Activar ACE Ajuste de visores Enable adjustment turrets on high powered scopes @@ -43,6 +45,7 @@ Включает регулировочные барабанчики ввода поправок на прицелах с высокой кратностью Permite que as Miras Telescópicas sejam ajustadas com ACE Povolí náměr puškohledů pomocí komínků optiky na seřízení zameřovacího kříže u kompatibilních puškohledů. + Activar torretas de ajuste en visores de muchos aumentos Force adjustment turrets @@ -57,6 +60,7 @@ Включить регулировку ненастроенных прицелов Força ajustes ACE para Miras Vynutit použití komínků + Forzar torretas de ajuste Force usage of adjustment turrets on high powered scopes @@ -71,6 +75,7 @@ Принудительно использовать барабанчики ввода поправок для ненастроенных прицелов с высокой кратностью Força o uso dos controles de ajuste de Mira do ACE em Miras Telescópicas Vynutí používání komínků u puškohledů. + Forzar uso de torretas de ajuste en visores de muchos aumentos Correct zeroing @@ -85,6 +90,7 @@ Корректировать пристрелку Corrigir Zeramento Opravit náměr + Corregir la homogeneidad Corrects the zeroing of all small arms sights @@ -99,6 +105,7 @@ Позволяет корректировать пристрелку для всех прицелов стрелкового оружия Corrige o Zeramento de todas as miras de armas pequenas. (Zeroing) Opravuje náměr mířidel všech ručních zbraní + Corrige la homogeneidad de los visores de armas cortas Overwrite zero distance @@ -113,6 +120,7 @@ Перезаписать дальность пристрелки Sobrepor distância zero Přepsat vzdálenost náměru + Sobreescribe la distancia de homogeneizado Uses the 'defaultZeroRange' setting to overwrite the zero range of high power scopes @@ -127,6 +135,7 @@ Использует настройку 'defaultZeroRange' для перенастройки дальности пристрелки прицелов с высокой кратностью Utiliza a configuração 'Distância Zero Padrão' para sobrepor a distância zero de Miras Telescópicas Používá nastavení 'defaultZeroRange' na přepsání vzdálenosti náměru pro puškohledy + Utiliza el parámetro 'defaultZeroRange' para sobreescribir la distancia de homogeneizado en los visores de muchos aumentos Default zero distance @@ -141,6 +150,7 @@ Дальность пристрелки по умолчанию Distância Zero Padrão Standardní vzdálenost náměru + Distancia de homogeneizado por defecto High powered scopes will be zeroed at this distance @@ -155,6 +165,7 @@ Дальность, на которую будут пристреляны прицелы с высокой кратностью Miras Telescópicas serão zeradas nessa distância Puškohledy budou naměřené na tuto vzdálenost + Visores con muchos aumentos serán homogeneizados por este parámetro Reference temperature @@ -169,6 +180,7 @@ Референсная температура Temperatura de Referência Referenční teplota + Temperatura de referencia Temperature at which the scope was zeroed @@ -183,6 +195,7 @@ Температура, при которой выполнена пристрелка прицела Temperatura na qual a mira foi zerada. Teplota za které byl puškohled naměřen + Temperatura a la que el visor ha sido homogeneizado Reference barometric pressure @@ -197,6 +210,7 @@ Референсное давление Pressão Barométrica de Referência Referenční barometrický tlak + Referencia de presión barométrica Barometric pressure at which the scope was zeroed @@ -211,6 +225,7 @@ Давление, при котором выполнена пристрелка прицела Pressão Barométrica de quando a mira foi zerada. Barometrický tlak za kterého byl puškohled naměřen + Presión barométrica a la que el visor ha sido homogeneizado Reference humidity @@ -225,6 +240,7 @@ Референсная влажность Humidade de Referência Referenční vlhkost vzduchu + Humedad de referencia Humidity at which the scope was zeroed @@ -239,6 +255,7 @@ Влажность, при которой выполнена пристрелка прицела Humidade na qual a mira foi zerada. Vlhkost vzduchu za které byl puškohled naměřen + Humedad a la cual el visor ha sido homogeneizado Deduce pressure from altitude @@ -253,6 +270,7 @@ Просчитать давление из высоты Deduzir pressão pela altitude Snížit tlak podle nadmořské výšky + Deducir presión de la altitud Deduce the barometric pressure from the terrain altitude @@ -267,6 +285,7 @@ Давление определяется по высоте Deduz a pressão barométrica pela altitude do terreno. Snížit barometrický tlak podle současné nadmořské výšky terénu + Deduce la presión barométrica de la altura del terreno Use legacy UI @@ -281,6 +300,7 @@ Usar Interface Antiga Utiliser l'ancienne IU Používat staré UI + Utilizar interfaz antigua Displays elevation and windage with signed numbers @@ -295,6 +315,7 @@ Exibir elevação e vento com número sinalizados. Affiche les valeurs de hausse et de dérive avec des nombres signés. Zobrazovat elevaci a vítr s znaménky plus a mínus. + Muestra la elevación y el viento con números positivos y negativos Simplified zeroing @@ -309,6 +330,7 @@ Zeramento Simplificado Zérotage simplifié Zjednodušené naměřování + Homogeneizado simplificado Replicates the vanilla zeroing system for riflescopes. @@ -323,6 +345,7 @@ Imita o sistema de zeramento vanilla para miras de rifle. Reproduit le système de zérotage vanilla pour les lunettes. Replikuje systém naměřování puškohledů ze základní hry. + Replica en los visores el sistema de homogeneizado de vanilla Minor adjustment up @@ -481,6 +504,7 @@ Resetar Ajuste Zero Réinitialiser le réglage du zéro Reset vynulování + Restaurar ajuste de homogeneizado This module adds windage and elevation adjustment turrets on high power rifle scopes. @@ -495,6 +519,7 @@ Этот модуль добавляет барабанчики ввода горизонтальных и вертикальных поправок для прицелов с высокой кратностью Esse módulo implementa vento e elevação para os ajustes de miras telescópicas. Tento modul přidává korekci zaměrovacího kříže puškohledů pro vítr a výšku. + Este módulo añade torretas de ajuste de viento y elevación en visores con muchos aumentos. %1D @@ -510,6 +535,7 @@ %1D %1D %1D + %1D %1L @@ -525,6 +551,7 @@ %1L %1L %1L + %1L %1R @@ -540,6 +567,7 @@ %1R %1R %1R + %1R Horizontal limits @@ -552,6 +580,7 @@ Limite Horizontal Limites horizontales Horizontální limity + Límites horizontales Vertical limits @@ -564,6 +593,7 @@ Limite Vertical Limites verticales Vertikální limity + Límites verticales diff --git a/addons/slideshow/stringtable.xml b/addons/slideshow/stringtable.xml index 02dd20c94d..10adfc6457 100644 --- a/addons/slideshow/stringtable.xml +++ b/addons/slideshow/stringtable.xml @@ -178,6 +178,7 @@ Установить имя Definir Nome Jméno setu + Definir nombre Name that will be used for main interaction entry (to distinguish multiple slideshows). Default: "Slides" @@ -192,6 +193,7 @@ Имя, которое будет использоваться для основных взаимодействий (для различения нескольких слайдов). По умолчанию: «Slides» Nome que será usado para a entrada principal de interação (para separar vários slideshows). Padrão: "Slides" Jméno, které bude použito pro hlavní interakci (pro rozlišení více prezentací). Standard: Snímky + Nombre usado para la entrada principal de interacción (para distinguir entre diferentes diapositivas). Por defecto: "Diapositivas" Slide Duration diff --git a/addons/spectator/stringtable.xml b/addons/spectator/stringtable.xml index 3ca8c3ba17..5467eb6cc3 100644 --- a/addons/spectator/stringtable.xml +++ b/addons/spectator/stringtable.xml @@ -15,6 +15,7 @@ Espectador Divák Izleyici + Espectador ACE Spectator @@ -30,6 +31,7 @@ ACE Espectador ACE Divák ACE Izleyici + ACE Espectador Configure how the spectator system will operate by default. @@ -60,6 +62,7 @@ IA Ativado AI povoleno AI Etkin + IA Activada Make AI viewable in spectator @@ -74,6 +77,7 @@ Сделать ИИ видимыми в режиме зрителя Permite que IA seja visivel no espectador Umožňuje sledovat AI v módu diváka + Permitir ver a la IA en espectador Camera modes @@ -212,6 +216,7 @@ Distanza massima per seguire Maximální vzdálenost sledování objektu Maksymalna odległość śledzenia + Distancia máxima de seguimiento Maximum distance the follow camera can be from the target @@ -224,6 +229,7 @@ Distance maximale à laquelle la caméra de suivi peut se trouver par rapport à la cible. Maximální vzdálenost při které může kamera sledovat cíl Maksymalna odległość na jakiej kamera może podążać od celu + Distancia máxima que la cámara de seguimiento puede estar del objetivo @@ -321,6 +327,7 @@ Ícones Ikony Ikonlar + Iconos Projectiles @@ -336,6 +343,7 @@ Projéteis Projektily Mermiler + Proyectiles Next Unit @@ -383,6 +391,7 @@ Modo de Visão Režim sledování Görüş Modu + Modo de visión Slow Speed @@ -398,6 +407,7 @@ Velocidade Lenta Pomalá rychlost Yavaş Hız + Velocidad lenta diff --git a/addons/switchunits/stringtable.xml b/addons/switchunits/stringtable.xml index 5b118e20cc..c343718f13 100644 --- a/addons/switchunits/stringtable.xml +++ b/addons/switchunits/stringtable.xml @@ -15,6 +15,7 @@ Přepnout jednotky Changement de camp Birlik Değiştir + Cambiar unidades Switched unit @@ -75,6 +76,7 @@ Habilita troca de time 陣営切り替えを有効化 Включить смену стороны + Habilitar cambio de bando Switch to West? diff --git a/addons/tacticalladder/config.cpp b/addons/tacticalladder/config.cpp index def7b0ce96..1060300de5 100644 --- a/addons/tacticalladder/config.cpp +++ b/addons/tacticalladder/config.cpp @@ -3,7 +3,7 @@ class CfgPatches { class ADDON { name = COMPONENT_NAME; - units[] = {}; + units[] = {"ACE_TacticalLadder_Pack"}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_apl", "ace_interaction"}; diff --git a/addons/tagging/stringtable.xml b/addons/tagging/stringtable.xml index bcb9e34d5d..56c1346932 100644 --- a/addons/tagging/stringtable.xml +++ b/addons/tagging/stringtable.xml @@ -15,6 +15,7 @@ Marcação Označování Işaretleme + Marcado Configure how the tagging system will operate by default. @@ -29,6 +30,7 @@ 定義噴漆系統預設設定 Configura como o sistema de Marcação funcionará como padrão. (Tagging) Nakonfigurujte, jak bude systém značkování ve výchozím nastavení fungovat. + Configura cómo funciona el sistema de marcado por defecto. Spray Paint - Quick Tag @@ -44,6 +46,7 @@ Lata de Tinta - Marcação Rápida Stříkací barva - Rychlá značka Sprey Boya- Hızlı Işaretleme + Pintada con spray - Marcado rápido Action performed on main tag interaction point. @@ -58,6 +61,7 @@ 直接噴漆在互動選單瞄準的點上。 Ação executada no ponto principal de marcação Akce prováděná v hlavním bodě značky interakce. + Acción realizada en el punto de interacción de marcado principal. Last Used @@ -73,6 +77,7 @@ Último usado Naposledy použitý Son Kullanan + Último usado Random X @@ -88,6 +93,7 @@ Aleatório X Náhodné X Rasgele X + Aleatorio X Random @@ -103,6 +109,7 @@ Aleatório Náhodný Rasgele + Aleatorio Tag diff --git a/addons/trenches/stringtable.xml b/addons/trenches/stringtable.xml index 6f76eb4afe..926d48114c 100644 --- a/addons/trenches/stringtable.xml +++ b/addons/trenches/stringtable.xml @@ -208,6 +208,7 @@ 继续盖掩体 繼續蓋掩體 Kazmaya Devam Et + Continuar cavando trinchera Remove Trench @@ -223,6 +224,7 @@ 移除掩体 移除掩體 Siperi Kaldır + Eliminar trinchera Removing Trench @@ -238,51 +240,61 @@ 正在移除掩体 移除掩體中 Siper Kaldırılıyor + Eliminando trinchera ACE Trenches ACE Tranchées ACE 塹壕 + ACETrincheras Small Trench Dig Duration Petites tranchées - durée d'excavation 小型塹壕の完成時間 + Tiempo de cavar trinchera pequeña Time, in seconds, required to dig a small trench. Définit le temps nécessaire au déploiement des petites tranchées (en secondes). 小型塹壕が完成するまでの時間 (秒) を設定できます。 + Tiempo, en segundos, requerido para cavar una trinchera pequeña. Small Trench Remove Duration Petites tranchées - durée de retrait 小型塹壕の削除時間 + Tiempo de eliminar trinchera pequeña Time, in seconds, required to remove a small trench. Définit le temps nécessaire pour le retrait des petites tranchées (en secondes). 小型塹壕が削除されるまでの時間 (秒) を設定できます。 + Tiempo, en segundos, requerido para eliminar una trinchera pequeña. Big Trench Dig Duration Grandes tranchées - durée d'excavation 大型塹壕の完成時間 + Tiempo de cavar trinchera grande Time, in seconds, required to dig a big trench. Définit le temps nécessaire au déploiement des grandes tranchées (en secondes). 大型塹壕が完成するまでの時間 (秒) を設定できます。 + Tiempo, en segundos, requerido para cavar una trinchera grande Big Trench Remove Duration Grandes tranchées - durée de retrait 大型塹壕の削除時間 + Tiempo de eliminar trinchera grande Time, in seconds, required to remove a big trench. Définit le temps nécessaire pour le retrait des grandes tranchées (en secondes). 大型塹壕が削除されるまでの時間 (秒) を設定できます。 + Tiempo, en segundos, requerido para eliminar una trinchera grande diff --git a/addons/ui/ACE_UI.hpp b/addons/ui/ACE_UI.hpp index 7bf395da57..4fbf7038ef 100644 --- a/addons/ui/ACE_UI.hpp +++ b/addons/ui/ACE_UI.hpp @@ -1,174 +1,182 @@ class ACE_UI { + class devWatermark { + idd = IDD_MISSION; + elements[] = {11400}; + location = ANYWHERE; + class conditions { + isDevelopmentBranch = QUOTE(productVersion select 4 == 'Development'); + }; + }; class weaponName { - idd = 300; - elements[] = {118}; + idd = IDD_UNITINFO; + elements[] = {IDC_IGUI_WEAPON}; location = GROUND_ONLY; class conditions {}; }; class weaponNameBackground { - idd = 300; + idd = IDD_UNITINFO; elements[] = {1001, 1008}; location = GROUND_ONLY; class conditions {}; }; class firingMode { - idd = 300; - elements[] = {187, 1203}; + idd = IDD_UNITINFO; + elements[] = {IDC_IGUI_WEAPON_MODE_TEXTURE, 1203}; location = GROUND_ONLY; class conditions {}; }; class ammoType { - idd = 300; - elements[] = {155}; + idd = IDD_UNITINFO; + elements[] = {IDC_IGUI_WEAPON_AMMO}; location = GROUND_ONLY; class conditions {}; }; class ammoCount { - idd = 300; - elements[] = {184}; + idd = IDD_UNITINFO; + elements[] = {IDC_IGUI_AMMOCOUNT}; location = GROUND_ONLY; class conditions {}; }; class magCount { - idd = 300; - elements[] = {185}; + idd = IDD_UNITINFO; + elements[] = {IDC_IGUI_MAGCOUNT}; location = GROUND_ONLY; class conditions {}; }; class throwableName { - idd = 300; + idd = IDD_UNITINFO; elements[] = {152}; location = GROUND_ONLY; class conditions {}; }; class throwableCount { - idd = 300; + idd = IDD_UNITINFO; elements[] = {151}; location = GROUND_ONLY; class conditions {}; }; class zeroing { - idd = 300; - elements[] = {168}; + idd = IDD_UNITINFO; + elements[] = {IDC_IGUI_WEAPON_ELEVATION}; location = GROUND_ONLY; class conditions {}; }; class weaponLowerInfoBackground { - idd = 300; + idd = IDD_UNITINFO; elements[] = {1202}; location = GROUND_ONLY; class conditions {}; }; class staminaBar { - idd = 305; - elements[] = {193}; + idd = IDD_STAMINA_BAR; + elements[] = {IDC_IGUI_STAMINA_BAR}; location = GROUND_ONLY; class conditions {}; }; class stance { - idd = 303; - elements[] = {188, 1201}; + idd = IDD_STANCEINFO; + elements[] = {IDC_IGUI_STANCE_INDICATOR, 1201}; location = GROUND_ONLY; class conditions {}; }; class gunnerWeaponName { - idd = 300; - elements[] = {118}; + idd = IDD_UNITINFO; + elements[] = {IDC_IGUI_WEAPON}; location = VEHICLE_ONLY; class conditions {}; }; class gunnerWeaponNameBackground { - idd = 300; + idd = IDD_UNITINFO; elements[] = {1001, 1008}; location = VEHICLE_ONLY; class conditions {}; }; class gunnerFiringMode { - idd = 300; - elements[] = {187, 1203}; + idd = IDD_UNITINFO; + elements[] = {IDC_IGUI_WEAPON_MODE_TEXTURE, 1203}; location = VEHICLE_ONLY; class conditions {}; }; class gunnerAmmoType { - idd = 300; - elements[] = {155}; + idd = IDD_UNITINFO; + elements[] = {IDC_IGUI_WEAPON_AMMO}; location = VEHICLE_ONLY; class conditions {}; }; class gunnerAmmoCount { - idd = 300; - elements[] = {184}; + idd = IDD_UNITINFO; + elements[] = {IDC_IGUI_AMMOCOUNT}; location = VEHICLE_ONLY; class conditions {}; }; class gunnerMagCount { - idd = 300; - elements[] = {185}; + idd = IDD_UNITINFO; + elements[] = {IDC_IGUI_MAGCOUNT}; location = VEHICLE_ONLY; class conditions {}; }; class gunnerLaunchableName { - idd = 300; + idd = IDD_UNITINFO; elements[] = {152}; location = VEHICLE_ONLY; class conditions {}; }; class gunnerLaunchableCount { - idd = 300; + idd = IDD_UNITINFO; elements[] = {151}; location = VEHICLE_ONLY; class conditions {}; }; class gunnerZeroing { - idd = 300; - elements[] = {168}; + idd = IDD_UNITINFO; + elements[] = {IDC_IGUI_WEAPON_ELEVATION}; location = VEHICLE_ONLY; class conditions {}; }; class gunnerWeaponLowerInfoBackground { - idd = 300; + idd = IDD_UNITINFO; elements[] = {1202}; location = VEHICLE_ONLY; class conditions {}; }; class vehicleName { - idd = 300; - elements[] = {120}; + idd = IDD_UNITINFO; + elements[] = {IDC_IGUI_VEHICLE}; location = VEHICLE_ONLY; class conditions {}; }; class vehicleNameBackground { - idd = 300; + idd = IDD_UNITINFO; elements[] = {1000, 1013}; location = VEHICLE_ONLY; class conditions {}; }; class vehicleFuelBar { - idd = 300; - elements[] = {113, 1202}; + idd = IDD_UNITINFO; + elements[] = {IDC_IGUI_VALUE_FUEL, 1202}; location = VEHICLE_ONLY; class conditions {}; }; class vehicleSpeed { - idd = 300; - elements[] = {121, 1004, 1006}; + idd = IDD_UNITINFO; + elements[] = {IDC_IGUI_SPEED, 1004, 1006}; location = VEHICLE_ONLY; class conditions {}; }; class vehicleAltitude { - idd = 300; - elements[] = {122, 1005, 1014}; + idd = IDD_UNITINFO; + elements[] = {IDC_IGUI_ALT, 1005, 1014}; location = VEHICLE_ONLY; class conditions {}; }; class vehicleDamage { - idd = 300; - elements[] = {111}; + idd = IDD_UNITINFO; + elements[] = {IDC_IGUI_HITZONES}; location = VEHICLE_ONLY; class conditions {}; }; class vehicleInfoBackground { - idd = 300; + idd = IDD_UNITINFO; elements[] = {1200}; location = VEHICLE_ONLY; class conditions {}; diff --git a/addons/ui/XEH_clientInit.sqf b/addons/ui/XEH_clientInit.sqf index 5cfa322b0d..dfef530fcf 100644 --- a/addons/ui/XEH_clientInit.sqf +++ b/addons/ui/XEH_clientInit.sqf @@ -33,16 +33,19 @@ GVAR(elementsSet) = call CBA_fnc_createNamespace; }] call CBA_fnc_addEventHandler; // On changing settings - ["ace_settingChanged", { - params ["_name"]; + ["CBA_SettingChanged", { + params ["_name", "_value"]; + + private _delimPos = count QUOTE(DOUBLES(ADDON,)); + if (_name select [0, _delimPos] != QUOTE(DOUBLES(ADDON,))) exitWith {}; if (_name in ELEMENTS_BASIC) then { [true] call FUNC(setElements); } else { - private _nameNoPrefix = toLower (_name select [7]); + private _nameNoPrefix = toLower (_name select [_delimPos]); private _cachedElement = GVAR(configCache) getVariable _nameNoPrefix; if (!isNil "_cachedElement") then { - [_nameNoPrefix, missionNamespace getVariable _name, true] call FUNC(setAdvancedElement); + [_nameNoPrefix, _value, true] call FUNC(setAdvancedElement); }; }; }] call CBA_fnc_addEventHandler; diff --git a/addons/ui/XEH_preInit.sqf b/addons/ui/XEH_preInit.sqf index b937d5d81c..8fe8c38b0d 100644 --- a/addons/ui/XEH_preInit.sqf +++ b/addons/ui/XEH_preInit.sqf @@ -8,4 +8,6 @@ PREP_RECOMPILE_END; GVAR(interfaceInitialized) = false; +#include "initSettings.sqf" + ADDON = true; diff --git a/addons/ui/functions/fnc_setAdvancedElement.sqf b/addons/ui/functions/fnc_setAdvancedElement.sqf index 4e2ececf6c..96453f1cfb 100644 --- a/addons/ui/functions/fnc_setAdvancedElement.sqf +++ b/addons/ui/functions/fnc_setAdvancedElement.sqf @@ -66,6 +66,7 @@ if (!_force) then { }; }; +private _displays = ((uiNamespace getVariable "IGUI_displays") + [findDisplay IDD_MISSION]) select {_idd == ctrlIDD _x}; private _fade = [1, 0] select _show; // Disable/Enable elements @@ -75,15 +76,16 @@ private _success = false; // Loop through IGUI displays as they can be present several times for some reason { - if (_idd == ctrlIDD _x) then { - TRACE_4("Setting Element Visibility",_element,_fade,_idd,_idc); + _success = true; - (_x displayCtrl _idc) ctrlSetFade _fade; - (_x displayCtrl _idc) ctrlCommit 0; + private _control = _x displayCtrl _idc; + if (ctrlFade _control == _fade) then {continue}; - _success = true; - }; - } count (uiNamespace getVariable "IGUI_displays"); + TRACE_4("Setting Element Visibility",_element,_fade,_idd,_idc); + + _control ctrlSetFade _fade; + _control ctrlCommit 0; + } count _displays; nil } count _elements; diff --git a/addons/ui/initSettings.sqf b/addons/ui/initSettings.sqf new file mode 100644 index 0000000000..eebda7e2e4 --- /dev/null +++ b/addons/ui/initSettings.sqf @@ -0,0 +1,9 @@ +if (productVersion select 4 == 'Development') then { + [ + QGVAR(devWatermark), + "CHECKBOX", + LSTRING(devWatermark), + "ACE " + LLSTRING(Category), + true + ] call CBA_fnc_addSetting; +}; diff --git a/addons/ui/script_component.hpp b/addons/ui/script_component.hpp index 11b0d08715..d98691e0de 100644 --- a/addons/ui/script_component.hpp +++ b/addons/ui/script_component.hpp @@ -16,6 +16,7 @@ #include "\z\ace\addons\main\script_macros.hpp" +#include "\a3\ui_f\hpp\defineResincl.inc" // Basic Elements #define ELEMENTS_BASIC [QGVAR(soldierVehicleWeaponInfo), QGVAR(vehicleRadar), QGVAR(vehicleCompass), QGVAR(commandMenu), QGVAR(groupBar)] diff --git a/addons/ui/stringtable.xml b/addons/ui/stringtable.xml index 423f5e07a8..a5dcf3e875 100644 --- a/addons/ui/stringtable.xml +++ b/addons/ui/stringtable.xml @@ -46,6 +46,7 @@ 此模块允许你调整使用者介面的任何一个元件 此模塊允許你調整使用者介面的任何一個元件 Tento modul umožňuje přepínání viditelných částí uživatelského rozhraní. + Este módulo permite activar la visibilidad de apartados de la interfaz Allow Selective UI @@ -156,6 +157,11 @@ Barra de grupo Grup Göstergesi + + Development Build Watermark + Водяной знак Development Build + Marca de agua para compilación de desarrollo + Weapon Name Název zbraně @@ -360,6 +366,7 @@ 砲手武器名稱 Jméno zbraně vozidla Nişancı Silah Ismi + Nombre de arma de artillero Gunner Weapon Name Background @@ -374,6 +381,7 @@ 炮手武器名称背景 砲手武器名稱背景 Pozadí jména zbraně vozidla + Fondo de nombre de arma de artillero Gunner Firing Mode @@ -389,6 +397,7 @@ 砲手射擊模式 Režim palby zbraně vozidla Nişancı Ateşleme Modu + Modo de fuego de artillero Gunner Ammo Type @@ -404,6 +413,7 @@ 砲手彈藥類型 Typ munice zbraně vozidla Nişancı Mermi Türü + Tipo de munición de artillero Gunner Ammo Count @@ -419,6 +429,7 @@ 砲手彈藥數量 Počet zásobníků zbraně vozidla Nişancı Mermi Sayısı + Cantidad de munición de artillero Gunner Magazine Count @@ -434,6 +445,7 @@ 砲手彈匣數量 Počet munice zbraně vozidla Nişancı Şarjör Sayısı + Cantidad de cargadores de artillero Gunner Launchable Type @@ -448,6 +460,7 @@ 炮手发射物类型 砲手發射物類型 Typ odpalitelných granátů vozidla + Tipo de lanzador de artillero Gunner Launchable Count @@ -462,6 +475,7 @@ 炮手发射物数量 砲手發射物數量 Počet odpalitelných granátů vozidla + Cantidad de lanzadores de artillero Gunner Zeroing @@ -476,6 +490,7 @@ 炮手归零距离 砲手歸零距離 Náměr zbraně vozidla + Calibracion de mira de artillero Gunner Weapon Lower Info Background @@ -490,6 +505,7 @@ 炮手武器底部资讯栏背景 砲手武器底部資訊欄背景 Nižší pozadí panelu s informacemi o zbrani vozidla + Fondo de información inferior de armamento de artillero Vehicle Name @@ -614,6 +630,7 @@ Richiede informazione Soldato/Veicolo/Arma. 需要士兵/载具/武器的资讯. 需要士兵/載具/武器的資訊. + Requiere información de Soldado/Vehículo. Modifying User Interface is disabled. @@ -628,6 +645,7 @@ La modifica dell'Interfaccia Utente è disabilitata. 自定使用者介面功能已关闭 自定使用者介面功能已關閉 + La modificación de la interfaz de usuario está desactivada. Cannot modify a forced User Interface element. @@ -642,6 +660,7 @@ 无法编辑已被锁定的使用者介面元件 無法編輯已被鎖定的使用者介面元件 Nelze upravit prvek vynuceného uživatelského rozhraní. + No se puede modificar un elemento forzado de la Interfaz del Usuario diff --git a/addons/vehiclelock/initSettings.sqf b/addons/vehiclelock/initSettings.sqf index 6c71d6b24f..68a29ed749 100644 --- a/addons/vehiclelock/initSettings.sqf +++ b/addons/vehiclelock/initSettings.sqf @@ -23,7 +23,7 @@ QGVAR(vehicleStartingLockState), "LIST", [LSTRING(VehicleStartingLockState_DisplayName), LSTRING(VehicleStartingLockState_Description)], LSTRING(DisplayName), - [[-1,0,1,2],["str_cfg_envsounds_default", LSTRING(VehicleStartingLockState_AsIs), LSTRING(VehicleStartingLockState_Locked), LSTRING(VehicleStartingLockState_Unlocked)], 0], // [values, titles, defaultIndex] + [[-1,0,1,2],[LSTRING(VehicleStartingLockState_AsIs), LSTRING(VehicleStartingLockState_RemoveAmbiguousLockState), LSTRING(VehicleStartingLockState_Locked), LSTRING(VehicleStartingLockState_Unlocked)], 0], // [values, titles, defaultIndex] true, // isGlobal {[QGVAR(vehicleStartingLockState), _this] call EFUNC(common,cbaSettings_settingChanged)}, true // Needs mission restart diff --git a/addons/vehiclelock/stringtable.xml b/addons/vehiclelock/stringtable.xml index b4bc668415..7d5b02e7d4 100644 --- a/addons/vehiclelock/stringtable.xml +++ b/addons/vehiclelock/stringtable.xml @@ -15,6 +15,7 @@ ACE Verrouillage véhicule ACE Zamykání Vozidel ACE Araç Kilidi + ACE Bloqueo de vehículo Unlock Vehicle @@ -276,6 +277,10 @@ 设定所有载具的初始上锁状态 (移除不明确的锁定状态) 設定所有載具的初始上鎖狀態 (移除不明確的鎖定狀態) + + Remove Ambiguous Lock State + Eliminar estado de bloqueo ambiguo + As Is Jak jest diff --git a/addons/vehicles/stringtable.xml b/addons/vehicles/stringtable.xml index 18716d4887..bb6ca8d48a 100644 --- a/addons/vehicles/stringtable.xml +++ b/addons/vehicles/stringtable.xml @@ -156,6 +156,7 @@ 設定速度の増減量 Krokování omezovače rychlosti Шаг ограничителя скорости + Salto de limitador de vehículo diff --git a/addons/weather/stringtable.xml b/addons/weather/stringtable.xml index 3096036eba..82e0006843 100644 --- a/addons/weather/stringtable.xml +++ b/addons/weather/stringtable.xml @@ -100,6 +100,7 @@ Rozšiřuje stávající počasí o teplotu, vlhkost a tlak vzduchu. Améliore le module météo existant en y ajoutant la température, l'humidité et la pression atmosphérique. Mevcut havayı sıcaklık, nem ve hava basıncı ile genişletir. + Expande el clima actual en cuanto a temperatura, humedad y presión atmosférica. Update Interval @@ -149,6 +150,7 @@ Simulace větru (podle mapy) Simulation du vent (basée sur la carte) Rüzgar Simülasyonu (harita tabanlı) + Simulación de viento (según mapa) Enables the map based wind simulation (overwrites vanilla wind) @@ -164,6 +166,7 @@ Povoluje simulaci větru založenou na mapě (přepíše původní vítr) Active la simulation du vent basée sur la carte (écrase le vent vanilla). Harita tabanlı rüzgar simülasyonunu etkinleştirir (Normal rüzgarının üzerine yazar) + Activa la simulación de viento según mapa (sobreescribe el clima vanilla) Check Air Temperature @@ -177,6 +180,7 @@ Checar a temperatura do ar Hava Sıcaklığını Kontrol Et Проверить температуру воздуха + Comprobar temperatura de aire Show Check Air Temperature Action @@ -190,6 +194,7 @@ Mostrar a ação "Checar a temperatura do ar" Hava Sıcaklığını Kontrol Etme Eylemini Göster Показывать действие проверки температуры + Mostrar acción de comprobar temperatura de aire diff --git a/addons/yardage450/initKeybinds.sqf b/addons/yardage450/initKeybinds.sqf index fa4f52b6c5..210141a681 100644 --- a/addons/yardage450/initKeybinds.sqf +++ b/addons/yardage450/initKeybinds.sqf @@ -1,4 +1,3 @@ - ["ACE3 Equipment", QGVAR(DistanceKey), LLSTRING(PowerButtonKey), { // Conditions: canInteract diff --git a/addons/zeus/stringtable.xml b/addons/zeus/stringtable.xml index 350fa15856..9d8d966239 100644 --- a/addons/zeus/stringtable.xml +++ b/addons/zeus/stringtable.xml @@ -275,6 +275,7 @@ 防禦區域 Defender Área Bölgeyi Koru + Defender área Update Editable Objects @@ -289,6 +290,7 @@ Обновить редактируемые объекты Atualizar objetos editáveis Aktualizujte upravitelné objekty + Actualizar objetos editables Editing Mode @@ -301,6 +303,7 @@ Modo de edição Režim úprav Mode d'édition + Modo de edición Add or remove editable objects from Zeus @@ -313,6 +316,7 @@ Adiciona ou remove objetos editáveis do Zeus Přidej nebo odeber upravitelné objekty ze Zeusu Ajoute ou supprime les objets modifiables depuis Zeus. + Añadir o eliminar objetos editables desde Zeus Add Objects @@ -326,6 +330,7 @@ Přidat objekty Ajouter des objets Obje Ekle + Añadir objetos Remove Objects @@ -341,6 +346,7 @@ Remover Objetos Odebrat objekty Objeyi Kaldır + Eliminar objetos All Curators @@ -355,6 +361,7 @@ Все кураторы Todos os Curadores Všichni kurátoři + Todos los curadores Apply changes to all curators @@ -369,6 +376,7 @@ Применить изменения ко всем кураторам Aplicar mudanças à todos os Curadores Použít změny na všechny kurátory + Aplicar cambios a todos los curadores Additional Objects @@ -381,6 +389,7 @@ Další objekty 額外物件 Objets supplémentaires + Objetos adicionales Additional objects to include in the action regardless of Task Radius @@ -393,6 +402,7 @@ Další objekty, které mají být zahrnuty do akce, bez ohledu na poloměr úlohy 無論任務範圍何處,都在行動中包含著額外的物件 Objets supplémentaires à intégrer dans l'action, quel que soit le rayon de la tâche. + Objetos adicionales para incluir en la acción al margen del Radio de Tarea Global AI Skill @@ -408,6 +418,7 @@ AI技巧設定 Habilidade Global da IA Genel AI Yetenekleri + Habilidad de IA Global General Skill @@ -423,6 +434,7 @@ 總體技巧 Habilidade Geral Genel Yetenekler + Habilidad general Changes: general, commanding, courage @@ -437,6 +449,7 @@ 改变: 战斗技巧,指挥技巧,勇气大小 改變: 戰鬥技巧,指揮技巧,勇氣大小 Muda: general, commanding, courage + Cambios: general, commanding, courage Accuracy @@ -451,6 +464,7 @@ 精确度 精確度 Precisão + Precisión Changes: aimingAccuracy @@ -465,6 +479,7 @@ 改变: 瞄准精确度 改變: 瞄準精確度 Muda: aimingAccuracy + Cambios: aimingAccuracy Weapon Handling @@ -479,6 +494,7 @@ 武器掌握 武器掌握 Uso de Arma + Manejo de arma Changes: aimingShake, aimingSpeed, reloadSpeed @@ -493,6 +509,7 @@ 改变: 手晃幅度,瞄准速度, 重新装填速度 改變: 手晃幅度,瞄準速度, 重新裝填速度 Muda: aimingShake, aimingSpeed, reloadSpeed + Cambios: aimingShake, aimingSpeed, reloadSpeed Spotting @@ -507,6 +524,7 @@ 索敌能力 索敵能力 Detecção + Detección Changes: spotDistance, spotTime @@ -521,6 +539,7 @@ 改变: 搜索距离, 发现时间 改變: 搜索距離, 發現時間 Muda: spotDistance, spotTime + Cambios: spotDistance, spotTime Seek Cover @@ -535,6 +554,7 @@ 寻找掩护 尋找掩護 Procurar Cobertura + Buscar cobertura Should AI seek cover @@ -549,6 +569,7 @@ 决定AI是否会寻找掩护 決定AI是否會尋找掩護 A IA dever buscar cobertura + La IA debe buscar cobertura Auto Combat @@ -563,6 +584,7 @@ 自动交战 自動交戰 Combate automático + Combate automático Should AI automatically switch to combat mode @@ -577,6 +599,7 @@ 决定AI是否会自动与敌人交战 決定AI是否會自動與敵人交戰 A IA deveria automaticamente mudar para modo de combate + La IA debe automáticamente cambiar a modo de combate Group Side @@ -592,6 +615,7 @@ 小隊陣營 Lado do Grupo Tarafı Değiştir + Bando de grupo Patrol Area @@ -607,6 +631,7 @@ 巡邏區域 Patrulhar Área Devriye ayarla + Patrullar área Toggle Surrender @@ -639,6 +664,7 @@ Adicionar/Remover FRIES Přidat/Odebrat FRIES (slaňování) Ekle/Kaldır FRIES + Añadir/Eliminar FRIES %1 is not fastrope compatible. @@ -653,6 +679,7 @@ %1 несовместим с быстрым спуском %1 não é compatível com sistema de corda. %1 není kompatibilní se slaňováním. + %1 no es compatible con descenso por cuerda. Unable to remove FRIES, ropes are deployed. @@ -667,6 +694,7 @@ Невозможно удалить FRIES, канаты развернуты. Não foi possível remover o FRIES, as cordas estão soltas. Nemohu odebrat FRIES, lana jsou vytažena. + No es posible eliminar FRIES, las cuerdas están desplegadas- Teleport Players @@ -713,6 +741,7 @@ 传送选定的玩家至模块位置 傳送選定的玩家至模塊位置 Teleporta o jogador selecionado para a posição do módulo + Teleportar al jugador seleccionado a la posición del módulo Teleport Group @@ -728,6 +757,7 @@ 傳送小隊 Teleportar Grupo Grubu ışınla + Teleportar al grupo Teleports all units in group @@ -1143,6 +1173,7 @@ 貨物: Carga: Kargo: + Carga: Select cargo to unload @@ -1156,6 +1187,7 @@ Vyberte náklad na vyložení Sélectionner une cargaison à décharger Seçilen kargo boşaltıldı + Seleccionar carga para descargar: Task Radius @@ -1185,6 +1217,7 @@ 設定目標範圍半徑 Raio para se executar uma tarefa Okruh ve kterém bude úkol vykonán + Radio en dentro del cual realizar la tarea Invalid radius entered @@ -1199,6 +1232,7 @@ 错误的半径值 錯誤的半徑值 Raio inválido inserido + Radio inválido introducido Suppressive Fire @@ -1229,6 +1263,7 @@ Adicionar Arsenal Completo Přidat plný arzenál Arsenal Ekle + Añadir Arsenal completo Remove Arsenal @@ -1244,6 +1279,7 @@ Remover Arsenal Odebrat arzenál Arsenali Kaldır + Eliminar Arsenal Load into Cargo @@ -1258,6 +1294,7 @@ Carregar na carga Naložit do nákladového prostoru Charger dans le véhicule + Cargar en la carga Toggle NVGs @@ -1272,6 +1309,7 @@ Вкл/Выкл ПНВ Alternar Visão Noturna Přepnout noktovizory + Alternar visión nocturna NVG Equipment @@ -1287,6 +1325,7 @@ Equipamento de Visão Noturna Noktovizory - vybavení Gece Görüşü Ekipmanı + Equipamiento de visión nocturna Add or remove NVGs from units @@ -1302,6 +1341,7 @@ Adiciona ou remove visão noturna de unidades Přidat nebo odebrat noktovizory jednotkám Gece Görüşü ekle veya kaldır + Añadir o eliminar visión nocturna de las unidades Toggle Target @@ -1329,6 +1369,7 @@ Unidades afetadas pela alteração Jednotky ovlivněné přepnutím Unités affectées par le changement. + Unidades afectadas por esta alternancia Selected Group @@ -1344,6 +1385,7 @@ Grupo Selecionado Vybraná skupina Seçilen Grup + Grupo seleccionado Toggle Flashlights @@ -1391,6 +1433,7 @@ Adicionar equipamento Přidat vybavení Tekerlek Ekle + Añadir equipamiento Garrison Group @@ -1405,6 +1448,7 @@ Разместить группу в здании Guarnecer grupo Umístit posádku (jednotka) + Guarnicionar grupo Fill from top to bottom @@ -1419,6 +1463,7 @@ Занять здание сверху до низу Preencher de cima para baixo Naplnit odshora dolů + Rellenar de arriba hacia abajo Fill buildings from the highest position first @@ -1433,6 +1478,7 @@ Занять здание начиная с верхних позиций Preencher construções do lugar mais alto primeiro Naplní nejdříve nejvyšší pozice v budovách + Rellenar edificios comenzando por la posición más elevada Building filling mode @@ -1447,6 +1493,7 @@ Режим заполнения здания Modo de preenchimento da construção Režim plnění budov + Modo de rellenar edificios Even filling @@ -1461,6 +1508,7 @@ Равномерно Preenchimento equilibrado Rovnoměrné plnění + Rellenado equilibrado Building by building @@ -1475,6 +1523,7 @@ Здание за зданием Construção por construção Budova za budovou + Edificio a edificio Random filling @@ -1489,6 +1538,7 @@ Случайно Preenchimento aleatório Náhodné plnění + Rellenado aleatorio Teleport @@ -1519,6 +1569,7 @@ Вывести группу из здания Desguarnecer grupo Zrušit posádku - uvolnit jednotku + Desaguarnicionar grupo No players found @@ -1810,6 +1861,7 @@ "%1" menu Menu "%1" "%1" menü + "%1" menu Paradrop Cargo @@ -1823,6 +1875,7 @@ Výsadek nákladu Paralargage de cargaison Paraşüt Kargosu + Carga mediante paracaidas No cargo loaded diff --git a/docs/src/package-lock.json b/docs/src/package-lock.json index 7a26357f29..0c2a1d81f7 100644 --- a/docs/src/package-lock.json +++ b/docs/src/package-lock.json @@ -105,10 +105,23 @@ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, + "array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", + "dev": true + }, "array-find-index": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true, + "optional": true + }, + "array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", "dev": true }, "array-union": { @@ -145,9 +158,9 @@ "dev": true }, "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", "dev": true }, "atob": { @@ -627,7 +640,8 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true + "dev": true, + "optional": true }, "bytes": { "version": "1.0.0", @@ -687,13 +701,15 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true + "dev": true, + "optional": true }, "camelcase-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, + "optional": true, "requires": { "camelcase": "^2.0.0", "map-obj": "^1.0.0" @@ -804,12 +820,6 @@ } } }, - "coffeescript": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-1.10.0.tgz", - "integrity": "sha1-56qDAZF+9iGzXYo580jc3R234z4=", - "dev": true - }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", @@ -1008,19 +1018,16 @@ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", "dev": true, + "optional": true, "requires": { "array-find-index": "^1.0.1" } }, "dateformat": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", - "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1", - "meow": "^3.3.0" - } + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true }, "debug": { "version": "3.2.6", @@ -1035,7 +1042,8 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true + "dev": true, + "optional": true }, "decode-uri-component": { "version": "0.2.0", @@ -1224,6 +1232,12 @@ } } }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true + }, "dir-glob": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", @@ -1370,6 +1384,7 @@ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", "dev": true, + "optional": true, "requires": { "is-arrayish": "^0.2.1" } @@ -1551,6 +1566,15 @@ } } }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, "ext-list": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", @@ -1572,6 +1596,12 @@ "sort-keys-length": "^1.0.0" } }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", @@ -1678,6 +1708,13 @@ "micromatch": "^3.1.10" } }, + "fast-xml-parser": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.19.0.tgz", + "integrity": "sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg==", + "dev": true, + "optional": true + }, "faye-websocket": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", @@ -1760,6 +1797,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, + "optional": true, "requires": { "path-exists": "^2.0.0", "pinkie-promise": "^2.0.0" @@ -1809,12 +1847,40 @@ } } }, + "fined": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" + } + }, + "flagged-respawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", + "dev": true + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -1877,7 +1943,8 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true + "dev": true, + "optional": true }, "get-stream": { "version": "3.0.0", @@ -1893,9 +1960,9 @@ "dev": true }, "getobject": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", - "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.0.tgz", + "integrity": "sha512-tbUz6AKKKr2YiMB+fLWIgq5ZeBOobop9YMMAU9dC54/ot2ksMXt3DOFyBuhZw6ptcVszEykgByK20j7W9jHFag==", "dev": true }, "gifsicle": { @@ -1965,6 +2032,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", "dev": true, + "optional": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -2001,6 +2069,30 @@ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", "dev": true }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } + }, "globby": { "version": "8.0.1", "resolved": "http://registry.npmjs.org/globby/-/globby-8.0.1.tgz", @@ -2092,7 +2184,8 @@ "version": "4.1.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true + "dev": true, + "optional": true }, "graceful-readlink": { "version": "1.0.1", @@ -2102,41 +2195,82 @@ "optional": true }, "grunt": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.4.tgz", - "integrity": "sha512-PYsMOrOC+MsdGEkFVwMaMyc6Ob7pKmq+deg1Sjr+vvMWp35sztfwKE7qoN51V+UEtHsyNuMcGdgMLFkBHvMxHQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.3.0.tgz", + "integrity": "sha512-6ILlMXv11/4cxuhSMfSU+SfvbxrPuqZrAtLN64+tZpQ3DAKfSQPQHRbTjSbdtxfyQhGZPtN0bDZJ/LdCM5WXXA==", "dev": true, "requires": { - "coffeescript": "~1.10.0", - "dateformat": "~1.0.12", + "dateformat": "~3.0.3", "eventemitter2": "~0.4.13", - "exit": "~0.1.1", + "exit": "~0.1.2", "findup-sync": "~0.3.0", - "glob": "~7.0.0", - "grunt-cli": "~1.2.0", + "glob": "~7.1.6", + "grunt-cli": "~1.3.2", "grunt-known-options": "~1.1.0", - "grunt-legacy-log": "~2.0.0", - "grunt-legacy-util": "~1.1.1", + "grunt-legacy-log": "~3.0.0", + "grunt-legacy-util": "~2.0.0", "iconv-lite": "~0.4.13", - "js-yaml": "~3.13.0", - "minimatch": "~3.0.2", - "mkdirp": "~0.5.1", + "js-yaml": "~3.14.0", + "minimatch": "~3.0.4", + "mkdirp": "~1.0.4", "nopt": "~3.0.6", - "path-is-absolute": "~1.0.0", - "rimraf": "~2.6.2" + "rimraf": "~3.0.2" }, "dependencies": { - "grunt-cli": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.2.0.tgz", - "integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=", + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "requires": { - "findup-sync": "~0.3.0", - "grunt-known-options": "~1.1.0", - "nopt": "~3.0.6", - "resolve": "~1.1.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } + }, + "grunt-cli": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.3.2.tgz", + "integrity": "sha512-8OHDiZZkcptxVXtMfDxJvmN7MVJNE8L/yIcPb4HB7TlyFD1kDvjHrb62uhySsU14wJx9ORMnTuhRMQ40lH/orQ==", + "dev": true, + "requires": { + "grunt-known-options": "~1.1.0", + "interpret": "~1.1.0", + "liftoff": "~2.5.0", + "nopt": "~4.0.1", + "v8flags": "~3.1.1" + }, + "dependencies": { + "nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "dev": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + } + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true } } }, @@ -2271,77 +2405,97 @@ "dev": true }, "grunt-legacy-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-2.0.0.tgz", - "integrity": "sha512-1m3+5QvDYfR1ltr8hjiaiNjddxGdQWcH0rw1iKKiQnF0+xtgTazirSTGu68RchPyh1OBng1bBUjLmX8q9NpoCw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-3.0.0.tgz", + "integrity": "sha512-GHZQzZmhyq0u3hr7aHW4qUH0xDzwp2YXldLPZTCjlOeGscAOWWPftZG3XioW8MasGp+OBRIu39LFx14SLjXRcA==", "dev": true, "requires": { "colors": "~1.1.2", - "grunt-legacy-log-utils": "~2.0.0", + "grunt-legacy-log-utils": "~2.1.0", "hooker": "~0.2.3", - "lodash": "~4.17.5" + "lodash": "~4.17.19" } }, "grunt-legacy-log-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.0.1.tgz", - "integrity": "sha512-o7uHyO/J+i2tXG8r2bZNlVk20vlIFJ9IEYyHMCQGfWYru8Jv3wTqKZzvV30YW9rWEjq0eP3cflQ1qWojIe9VFA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.1.0.tgz", + "integrity": "sha512-lwquaPXJtKQk0rUM1IQAop5noEpwFqOXasVoedLeNzaibf/OPWjKYvvdqnEHNmU+0T0CaReAXIbGo747ZD+Aaw==", "dev": true, "requires": { - "chalk": "~2.4.1", - "lodash": "~4.17.10" + "chalk": "~4.1.0", + "lodash": "~4.17.19" }, "dependencies": { "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" } }, "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" } } } }, "grunt-legacy-util": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.1.1.tgz", - "integrity": "sha512-9zyA29w/fBe6BIfjGENndwoe1Uy31BIXxTH3s8mga0Z5Bz2Sp4UCjkeyv2tI449ymkx3x26B+46FV4fXEddl5A==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-2.0.1.tgz", + "integrity": "sha512-2bQiD4fzXqX8rhNdXkAywCadeqiPiay0oQny77wA2F3WF4grPJXCvAcyoWUJV+po/b15glGkxuSiQCK299UC2w==", "dev": true, "requires": { - "async": "~1.5.2", - "exit": "~0.1.1", - "getobject": "~0.1.0", + "async": "~3.2.0", + "exit": "~0.1.2", + "getobject": "~1.0.0", "hooker": "~0.2.3", - "lodash": "~4.17.10", - "underscore.string": "~3.3.4", - "which": "~1.3.0" + "lodash": "~4.17.21", + "underscore.string": "~3.3.5", + "which": "~2.0.2" }, "dependencies": { "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { "isexe": "^2.0.0" @@ -2443,6 +2597,15 @@ } } }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "requires": { + "parse-passwd": "^1.0.0" + } + }, "hooker": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", @@ -2450,15 +2613,9 @@ "dev": true }, "hosted-git-info": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", - "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", - "dev": true - }, - "html-comment-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", - "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true, "optional": true }, @@ -2578,6 +2735,7 @@ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", "dev": true, + "optional": true, "requires": { "repeating": "^2.0.0" } @@ -2602,8 +2760,13 @@ "version": "1.3.7", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", - "dev": true, - "optional": true + "dev": true + }, + "interpret": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "dev": true }, "into-stream": { "version": "3.1.0", @@ -2622,6 +2785,16 @@ "integrity": "sha512-Y75zBYLkh0lJ9qxeHlMjQ7bSbyiSqNW/UOPWDmzC7cXskL1hekSITh1Oc6JV0XCWWZ9DE8VYSB71xocLk3gmGw==", "dev": true }, + "is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dev": true, + "requires": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + } + }, "is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", @@ -2635,7 +2808,8 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true + "dev": true, + "optional": true }, "is-buffer": { "version": "1.1.6", @@ -2648,6 +2822,7 @@ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, + "optional": true, "requires": { "builtin-modules": "^1.0.0" } @@ -2658,6 +2833,15 @@ "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", "dev": true }, + "is-core-module": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.3.0.tgz", + "integrity": "sha512-xSphU2KG9867tsYdLD4RWQ1VqdFl4HTO9Thf3I/3dLEfr0dbPTWKsuCKrgqMljg4nPE+Gq0VCnzT3gr0CyBmsw==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", @@ -2709,6 +2893,7 @@ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -2794,6 +2979,15 @@ "has": "^1.0.3" } }, + "is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dev": true, + "requires": { + "is-unc-path": "^1.0.0" + } + }, "is-retry-allowed": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", @@ -2809,13 +3003,13 @@ "optional": true }, "is-svg": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-4.2.1.tgz", - "integrity": "sha512-PHx3ANecKsKNl5y5+Jvt53Y4J7MfMpbNZkv384QNiswMKAWIbvcqbPz+sYbFKJI8Xv3be01GSFniPmoaP+Ai5A==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-4.3.1.tgz", + "integrity": "sha512-h2CGs+yPUyvkgTJQS9cJzo9lYK06WgRiXUqBBHtglSzVKAuH4/oWsqk7LGfbSa1hGk9QcZ0SyQtVggvBA8LZXA==", "dev": true, "optional": true, "requires": { - "html-comment-regex": "^1.1.2" + "fast-xml-parser": "^3.19.0" } }, "is-symbol": { @@ -2827,11 +3021,21 @@ "has-symbols": "^1.0.1" } }, + "is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dev": true, + "requires": { + "unc-path-regex": "^0.1.2" + } + }, "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true + "dev": true, + "optional": true }, "is-windows": { "version": "1.0.2", @@ -2885,6 +3089,7 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, + "optional": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -2916,6 +3121,45 @@ "is-buffer": "^1.1.5" } }, + "liftoff": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz", + "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=", + "dev": true, + "requires": { + "extend": "^3.0.0", + "findup-sync": "^2.0.0", + "fined": "^1.0.1", + "flagged-respawn": "^1.0.0", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.0", + "rechoir": "^0.6.2", + "resolve": "^1.1.7" + }, + "dependencies": { + "findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "dev": true, + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, "livereload-js": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.4.0.tgz", @@ -2927,6 +3171,7 @@ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, + "optional": true, "requires": { "graceful-fs": "^4.1.2", "parse-json": "^2.2.0", @@ -2936,9 +3181,9 @@ } }, "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "logalot": { "version": "2.1.0", @@ -2963,6 +3208,7 @@ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", "dev": true, + "optional": true, "requires": { "currently-unhandled": "^0.4.1", "signal-exit": "^3.0.0" @@ -3016,6 +3262,23 @@ } } }, + "make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + } + } + }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -3026,7 +3289,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true + "dev": true, + "optional": true }, "map-visit": { "version": "1.0.0", @@ -3072,6 +3336,7 @@ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, + "optional": true, "requires": { "camelcase-keys": "^2.0.0", "decamelize": "^1.1.2", @@ -3147,7 +3412,8 @@ "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true + "dev": true, + "optional": true }, "mixin-deep": { "version": "1.3.2", @@ -3175,6 +3441,7 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, + "optional": true, "requires": { "minimist": "^1.2.5" } @@ -3233,6 +3500,7 @@ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "dev": true, + "optional": true, "requires": { "hosted-git-info": "^2.1.4", "is-builtin-module": "^1.0.0", @@ -3378,6 +3646,18 @@ "object-keys": "^1.0.11" } }, + "object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "dev": true, + "requires": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + } + }, "object.getownpropertydescriptors": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", @@ -3389,6 +3669,16 @@ "es-abstract": "^1.17.0-next.1" } }, + "object.map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "dev": true, + "requires": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + } + }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -3442,6 +3732,28 @@ "arch": "^2.1.0" } }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, "p-cancelable": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", @@ -3512,15 +3824,33 @@ "p-finally": "^1.0.0" } }, + "parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "dev": true, + "requires": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + } + }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, + "optional": true, "requires": { "error-ex": "^1.2.0" } }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", @@ -3538,6 +3868,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, + "optional": true, "requires": { "pinkie-promise": "^2.0.0" } @@ -3555,11 +3886,33 @@ "dev": true, "optional": true }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "dev": true, + "requires": { + "path-root-regex": "^0.1.0" + } + }, + "path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", + "dev": true + }, "path-type": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, + "optional": true, "requires": { "graceful-fs": "^4.1.2", "pify": "^2.0.0", @@ -3577,19 +3930,22 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true + "dev": true, + "optional": true }, "pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true + "dev": true, + "optional": true }, "pinkie-promise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, + "optional": true, "requires": { "pinkie": "^2.0.0" } @@ -3702,6 +4058,7 @@ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, + "optional": true, "requires": { "load-json-file": "^1.0.0", "normalize-package-data": "^2.3.2", @@ -3713,6 +4070,7 @@ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "dev": true, + "optional": true, "requires": { "find-up": "^1.0.0", "read-pkg": "^1.0.0" @@ -3734,11 +4092,21 @@ "util-deprecate": "~1.0.1" } }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, "redent": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", "dev": true, + "optional": true, "requires": { "indent-string": "^2.1.0", "strip-indent": "^1.0.1" @@ -3771,6 +4139,7 @@ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, + "optional": true, "requires": { "is-finite": "^1.0.0" } @@ -3782,10 +4151,24 @@ "dev": true }, "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + } }, "resolve-url": { "version": "0.2.1", @@ -3810,18 +4193,18 @@ "dev": true }, "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" }, "dependencies": { "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -3883,7 +4266,8 @@ "version": "5.4.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", - "dev": true + "dev": true, + "optional": true }, "semver-regex": { "version": "2.0.0", @@ -3946,7 +4330,8 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true + "dev": true, + "optional": true }, "slash": { "version": "1.0.0", @@ -4121,6 +4506,7 @@ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", "dev": true, + "optional": true, "requires": { "spdx-license-ids": "^1.0.2" } @@ -4129,13 +4515,15 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", - "dev": true + "dev": true, + "optional": true }, "spdx-license-ids": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", - "dev": true + "dev": true, + "optional": true }, "split-string": { "version": "3.1.0", @@ -4271,6 +4659,7 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, + "optional": true, "requires": { "is-utf8": "^0.2.0" } @@ -4297,6 +4686,7 @@ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", "dev": true, + "optional": true, "requires": { "get-stdin": "^4.0.1" } @@ -4477,7 +4867,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true + "dev": true, + "optional": true }, "trim-repeated": { "version": "1.0.0", @@ -4534,6 +4925,12 @@ "through": "^2.3.8" } }, + "unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "dev": true + }, "underscore.string": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.5.tgz", @@ -4664,11 +5061,21 @@ "dev": true, "optional": true }, + "v8flags": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.3.tgz", + "integrity": "sha512-amh9CCg3ZxkzQ48Mhcb8iX7xpAfYJgePHxWMQCBWECpOSqJUXgY26ncA61UTV0BkPqfhcy6mzwCIoP4ygxpW8w==", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, "validate-npm-package-license": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", "dev": true, + "optional": true, "requires": { "spdx-correct": "~1.0.0", "spdx-expression-parse": "~1.0.0" @@ -4695,7 +5102,6 @@ "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", "dev": true, - "optional": true, "requires": { "isexe": "^2.0.0" } diff --git a/docs/src/package.json b/docs/src/package.json index 74b05774e1..0436ffafa7 100644 --- a/docs/src/package.json +++ b/docs/src/package.json @@ -2,10 +2,10 @@ "name": "ace3", "version": "0.1.0", "dependencies": { - "lodash": "^4.17.19" + "lodash": "^4.17.21" }, "devDependencies": { - "grunt": "^1.0.4", + "grunt": "^1.3.0", "grunt-contrib-concat": "^1.0.1", "grunt-contrib-imagemin": "^3.1.0", "grunt-contrib-uglify": "^4.0.0", diff --git a/docs/wiki/development/setting-up-the-development-environment.md b/docs/wiki/development/setting-up-the-development-environment.md index 5a39f5fb1a..5c537ebd1c 100644 --- a/docs/wiki/development/setting-up-the-development-environment.md +++ b/docs/wiki/development/setting-up-the-development-environment.md @@ -17,9 +17,10 @@ This page describes how you can setup your development environment for ACE3, all - P-drive - Run Arma 3 and Arma 3 Tools directly from steam once to install registry entries (and again after every update) - [Python 3.x](https://www.python.org/) -- [Mikero Tools](https://mikero.bytex.digital/Downloads): DePbo, DeOgg, DeTex, Rapify, MakePbo, PboProject >=1.70 +- [Mikero Tools](https://mikero.bytex.digital/Downloads): DePbo, DeOgg, Rapify, MakePbo, PboProject >=1.70 - `*.hpp` removed from PboProject's "Exclude From Pbo" list - `-F rebuild RequiredAddons` disabled + - `-B Don't binarise cpp or sqm` enabled - Python, Mikero Tools and Git in PATH environment variable - [CBA](https://github.com/CBATeam/CBA_A3/releases/latest) mod (release or development version) diff --git a/docs/wiki/framework/crew-served-weapons-framework.md b/docs/wiki/framework/crew-served-weapons-framework.md index 3f64b09587..9b3ef28d4f 100644 --- a/docs/wiki/framework/crew-served-weapons-framework.md +++ b/docs/wiki/framework/crew-served-weapons-framework.md @@ -14,133 +14,176 @@ version: ## 1. Making a new Crew Served Weapon -### 1.1 CfgVehicles +To convert a static weapon into a crew served weapon, you need to create the following: -```cpp -class CfgVehicles { - class LandVehicle; - class StaticWeapon: LandVehicle { - class ACE_Actions; - }; - class StaticMGWeapon: StaticWeapon { - class Turrets { - class MainTurret; - }; - class ACE_Actions: ACE_Actions { - class ACE_MainActions; - }; - }; - class banana_csw: StaticMGWeapon { - class ace_csw { - enabled = 1; // whether or not the weapon is affected by CSW - proxyWeapon = QGVAR(HMG_Static); // The weapon that will be added to the CSW on initialization. Used to ensure lower ammo-reload time when using Ammo Handling - magazineLocation = "_target selectionPosition 'magazine'"; // The location of the magazine. Where the action for ammo-handling will appear on the weapon - disassembleWeapon = QGVAR(staticHMGCarry); // What the weapon will disassemble to - disassembleTurret = QGVAR(m3TripodLow); // Which tripod will appear when weapon has been disassembled - ammoLoadTime = 7; // How long it takes in seconds to load ammo into the weapon - ammoUnloadTime = 5; // How long it takes in seconds to unload ammo from the weapon - desiredAmmo = 69; // When the weapon is reloaded it will try and reload to this ammo capacity - disassembleFunc = "myCoolFunction.sqf"; // A callback function for when the CSW gets disassembled. Arguments: [tripod, staticWeapon] - }; - }; -}; -``` +- A proxy weapon +- A carryable weapon that can be mounted on a tripod +- Carryable weapon magazines +- The CSW config in the static weapon -### 1.2 CfgMagazines +For the following examples, we are going to assume you are modifying your existing static weapon named `prefix_hmg` and that you are using the same prefix. If you are making a compatibility patch for a third party mod, you should use your own prefix. Do not use `ace` as your prefix. -```cpp -class CfgMagazines { - class 100Rnd_127x99_mag; // Example magazine used - does not have to be this - class banana_ammo: 100Rnd_127x99_mag { - scope=2; // Needs to be 2 to make sure it shows up in Arsenal - type=256; // Must be 256 to show up in Arsenal - count = 100; // How much ammo gets added per "Load Ammo" selection - model = "\A3\Structures_F_EPB\Items\Military\Ammobox_rounds_F.p3d"; // default ammo box model - //ace_isbelt = 1; // Needed if your magazine has belt linking - }; -}; -``` +### 1.1 Proxy Weapon -### 1.3 CfgWeapons +Because the magazine loading time is already handled by the ACE interaction, a proxy weapon with a very low loading time is used. It automatically replaces the default weapon of the turret when CSW is enabled. ```cpp class CfgWeapons { - class Launcher_Base_F; - class banana_carry_weapon: Launcher_Base_F { - class ACE_CSW { - type = "weapon"; // What type of carry it is. Must always be "weapon" for the carry weapon - deployTime = 4; // How long it takes to deploy the weapon onto the tripod - pickupTime = 4; // How long it takes to disassemble weapon from the tripod - class assembleTo { - ace_csw_m3Tripod = "banana_csw_mod1"; // What tripod can this weapon deploy onto, and what vehicle will it spawn when it is deployed - banana_tripod = "banana_csw"; - }; - }; - }; - - class HMG_Static; - class banana_proxy_weapon: HMG_Static { - magazineReloadTime = 0.5; // Proxy weapons are spawned onto the CSW when it is assembled. Because ammo loading times use defined values in the magazine, this number needs to be low to ensure low latency + class prefix_hmg_weapon; + class prefix_hmg_weapon_proxy: prefix_hmg_weapon { + magazineReloadTime = 0.5; }; }; ``` -### 1.4 CfgMagazineGroups +### 1.2 Carryable Weapon + +Carried CSW weapons are technically rocket launchers. This allows the player to carry both a CSW weapon and a backpack with magazines for the CSW. ```cpp - class ace_csw_groups { // Ammo that can be loaded into this CSW - class banana_ammo { // The magazine which the player can place into their inventory - banana_dummy_ammo = 1; // Magazine that is loaded into the weapon as per CfgWeapons >> weapon >> magazines - }; - - // Optional - class ace_csw_100Rnd_127x99_mag { // default magazine that CSW already implements - banana_dummy_ammo = 1; - }; - - /* - Ammo types already defined by CSW: - - ace_csw_100Rnd_127x99_mag - - ace_csw_100Rnd_127x99_mag_red - - ace_csw_100Rnd_127x99_mag_green - - ace_csw_100Rnd_127x99_mag_yellow - - ace_csw_50Rnd_127x108_mag - - ace_csw_20Rnd_20mm_G_belt - - ACE_1Rnd_82mm_Mo_HE - - ACE_1Rnd_82mm_Mo_Smoke - - ACE_1Rnd_82mm_Mo_Illum - - ACE_1Rnd_82mm_Mo_HE_Guided - - ACE_1Rnd_82mm_Mo_HE_LaserGuided - - Titan_AT - - Titan_AA - */ +class CfgWeapons { + class Launcher; + class Launcher_Base_F: Launcher { + class WeaponSlotsInfo; }; + + class prefix_hmg_carry: Launcher_Base_F { + // displayName, author, model and picture are omitted and up to you + scope = 2; + modes[] = {}; + + class ACE_CSW { + type = "weapon"; // Use "weapon" for weapons or "mount" for tripods - see below + deployTime = 4; // How long it takes to deploy the weapon onto the tripod + pickupTime = 4; // How long it takes to disassemble weapon from the tripod + class assembleTo { + // What tripod can this weapon deploy onto, and what vehicle will it spawn when it is deployed + ace_csw_m3Tripod = "prefix_hmg"; + }; + }; + + class WeaponSlotsInfo: WeaponSlotsInfo { + // One WeaponSlot with a positive value for iconScale forces game to use icon overlay method + // Required, because the inventory icon has no accessory variants + class MuzzleSlot { + iconScale = 0.1; + }; + + // Don't forget to set mass to a reasonable value + // We use mass in pounds * 10 + mass = 840; // 84 lb / 38 kg + }; + }; +}; +``` + +### 1.3 Carryable Magazines + +Vehicle magazines usually don't have inventory pictures or a 3D model. Because of this, carryable magazines need to be created for the CSW. If one of the existing CSW magazines or an infantry weapon magazine would fit your weapon, you don't need to create another magazine. Using one of the existing CSW magazines is preferred to prevent confusing players and mission makers. + +```cpp +class CfgMagazines { + class prefix_100rnd_hmg_mag; + class prefix_100rnd_hmg_csw_mag: prefix_100rnd_hmg_mag { + scope = 2; + type = 256; // Must be 256 to show up in Arsenal + count = 100; + model = "\A3\Structures_F_EPB\Items\Military\Ammobox_rounds_F.p3d"; + ACE_isBelt = 1; // Enables belt linking for this magazine + }; +}; +``` + +ACE converts the carryable magazines to the vehicle magazines when loading them. To enable this conversion, the ACE_CSW_Groups config needs to be extended. + +```cpp +class ACE_CSW_Groups { + // Using a custom carryable magazine + class prefix_100rnd_hmg_csw_mag { // Same name as the carryable magazine + prefix_100rnd_hmg_mag = 1; // Vehicle magazine that will be loaded when loading this magazine + }; + + // Using an existing CSW magazine + class ace_csw_100Rnd_127x99_mag { + banana_dummy_ammo = 1; + }; + + /* + Carryable magazines already defined by ACE: + - ace_csw_100Rnd_127x99_mag + - ace_csw_100Rnd_127x99_mag_red + - ace_csw_100Rnd_127x99_mag_green + - ace_csw_100Rnd_127x99_mag_yellow + - ace_csw_50Rnd_127x108_mag + - ace_csw_20Rnd_20mm_G_belt + - ace_1Rnd_82mm_Mo_HE + - ace_1Rnd_82mm_Mo_Smoke + - ace_1Rnd_82mm_Mo_Illum + - ace_1Rnd_82mm_Mo_HE_Guided + - ace_1Rnd_82mm_Mo_HE_LaserGuided + */ +}; +``` + +### 1.4 CSW Config + +The final step is to let ACE know how to disassemble and load the static weapon. + +```cpp +class CfgVehicles { + class StaticMGWeapon; + class prefix_hmg: StaticMGWeapon { + class ACE_CSW { + enabled = 1; // Enables ACE CSW for this weapon + proxyWeapon = "prefix_hmg_weapon_proxy"; // The proxy weapon created above + magazineLocation = "_target selectionPosition 'magazine'"; // Ammo handling interaction point location + disassembleWeapon = "prefix_hmg_carry"; // Carryable weapon created above + disassembleTurret = "ace_csw_m3Tripod"; // Which static tripod will appear when weapon is disassembled + ammoLoadTime = 7; // How long it takes in seconds to load ammo into the weapon + ammoUnloadTime = 5; // How long it takes in seconds to unload ammo from the weapon + desiredAmmo = 100; // When the weapon is reloaded it will try and reload to this ammo capacity + // Optional callback function for when the CSW gets disassembled, called with [tripod, staticWeapon] + disassembleFunc = "prefix_fnc_handleDisassembly"; + }; + }; +}; ``` ## 2. Making a new Tripod -### 2.1 CfgVehicles +If none of the existing ACE tripods fit your weapon, you can create your own. Creating a tripod is similar to creating a crew served weapon and consists of two parts: -```cpp -class CfgVehicles { - class ace_csw_baseTripod; - class banana_tripod: ace_csw_baseTripod { - class ace_csw { disassembleTo = "banana_carry_tripod"; }; // What will be spawned when "Pickup Tripod" is selected - }; -}; -``` +- A carryable tripod +- A placeable static tripod -### 2.2 CfgWeapons +### 2.2 Carryable Tripod + +Creating the carryable tripod is similar to [creating a carryable weapon](#12-carryable-weapon). The config besides the `ACE_CSW` class has been omitted for brevity and is the same as above. ```cpp class CfgWeapons { class Launcher_Base_F; - class banana_carry_tripod: Launcher_Base_F { + class prefix_tripod_carry: Launcher_Base_F { class ACE_CSW { - type = "mount"; // What type of carry it is. Must always be "mount" for the tripod + type = "mount"; // Use "mount" for tripods deployTime = 4; // How long it takes to deploy the tripod - pickupTime = 4; // How long it takes to pickup the tripod - deploy = "banana_tripod"; // what vehicle will spawn when the tripod is deployed + pickupTime = 4; // How long it takes to disassemble the tripod + deploy = "prefix_tripod"; // what vehicle will spawn when the tripod is deployed + }; + }; +}; +``` + +### 2.1 CfgVehicles + +When deploying a tripod, a static vehicle is spawned to mount weapons onto. Make sure this vehicles interaction point is in a suitable position. + +```cpp +class CfgVehicles { + class ace_csw_baseTripod; + class prefix_tripod: ace_csw_baseTripod { + class ACE_CSW { + disassembleTo = "prefix_tripod_carry"; }; }; }; diff --git a/docs/wiki/framework/events-framework.md b/docs/wiki/framework/events-framework.md index d1cc6d01d0..3fd2e797ce 100644 --- a/docs/wiki/framework/events-framework.md +++ b/docs/wiki/framework/events-framework.md @@ -106,6 +106,14 @@ MenuType: 0 = Interaction, 1 = Self Interaction |`ace_cookoff_cookOffBox` | _box | Global | Listen | Ammo box cook off has started |`ace_cookoff_engineFire` | _vehicle | Global | Listen | Engine fire has started + +### 2.11 Attach (`ace_attach`) + +| Event Key | Parameters | Locality | Type | Description | +|----------|---------|---------|---------|---------|---------| +|`ace_attach_attached` | [_attachedObject, _itemClassname] | Local | Listen | After an item was attached to a unit/vehicle +|`ace_attach_detaching` | [_attachedObject, _itemName] | Local | Listen | Just before an item gets detached/removed from a unit/vehicle + ## 3. Usage Also Reference [CBA Events System](https://github.com/CBATeam/CBA_A3/wiki/Custom-Events-System){:target="_blank"} documentation. diff --git a/docs/wiki/framework/parachute-framework.md b/docs/wiki/framework/parachute-framework.md index 37e522d055..b92e03b023 100644 --- a/docs/wiki/framework/parachute-framework.md +++ b/docs/wiki/framework/parachute-framework.md @@ -16,9 +16,21 @@ version: ```cpp class CfgVehicles { - class BananaParachute { + class ParachuteBase; + class BananaParachute: ParachuteBase { ace_hasReserveParachute = 1; // Add reserve parachute (1-enabled, 0-disabled) ace_reserveParachute = "ACE_ReserveParachute"; // Classname of the reserve parachute }; }; ``` + +## 2. Adding failure cut delay + +```cpp +class CfgVehicles { + class ParachuteBase; + class BananaParachute: ParachuteBase { + ace_parachute_failureDelay = 2; // Add delay before parachute fails (time in seconds) + }; +}; +``` diff --git a/docs/wiki/user/how-to-report-an-issue.md b/docs/wiki/user/how-to-report-an-issue.md index fefbf8a73e..9e4962ef76 100644 --- a/docs/wiki/user/how-to-report-an-issue.md +++ b/docs/wiki/user/how-to-report-an-issue.md @@ -26,6 +26,6 @@ Indicate if the issue appears on stable or development version. In case it is th ### Reporting the issue -Head over to the [ACE3 GitHub issue tracker]({{ site.ace.githubUrl }}/issues){:target="_blank"} and press the ["New Issue"]({{ site.ace.githubUrl }}/issues/new){:target="_blank"} button in the top right corner. Fill out the issue template. Add a link ([gist](https://gist.github.com){:target="_blank"} or [pastebin](http://pastebin.com){:target="_blank"}) to the client and/or server RPT file. An instruction to find your RPT files can be found [here](https://community.bistudio.com/wiki/Crash_Files#Arma_3){:target="_blank"}. +Head over to the [ACE3 GitHub issue tracker]({{ site.ace.githubUrl }}/issues){:target="_blank"} and press the ["New Issue"]({{ site.ace.githubUrl }}/issues/new/choose){:target="_blank"} button in the top right corner. Fill out the issue template. Add a link ([gist](https://gist.github.com){:target="_blank"} or [pastebin](http://pastebin.com){:target="_blank"}) to the client and/or server RPT file. An instruction to find your RPT files can be found [here](https://community.bistudio.com/wiki/Crash_Files#Arma_3){:target="_blank"}. A short video clip of the issue might be helpful in resolving it faster. diff --git a/extensions/.clang-format b/extensions/.clang-format new file mode 100644 index 0000000000..89eb4f4686 --- /dev/null +++ b/extensions/.clang-format @@ -0,0 +1,9 @@ +BasedOnStyle: Google +IndentWidth: 4 +ColumnLimit: 160 +DerivePointerAlignment: false +PointerAlignment: Left +NamespaceIndentation: All +IncludeBlocks: Merge + +AllowShortBlocksOnASingleLine: true diff --git a/extensions/CMakeLists.txt b/extensions/CMakeLists.txt index 74f22ef9c3..d8021ea4b2 100644 --- a/extensions/CMakeLists.txt +++ b/extensions/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required (VERSION 3.0) +cmake_minimum_required (VERSION 3.14) project (ACE) set_property(GLOBAL PROPERTY USE_FOLDERS ON) @@ -98,16 +98,21 @@ endif() string(TIMESTAMP ACE_BUILDSTAMP "%Y-%m-%dT%H:%M:%SZ") -set(ACE_VERSION_MAJOR 3) -set(ACE_VERSION_MINOR 13) -set(ACE_VERSION_REVISION 0) +# Get current version from addon +file(READ "../addons/main/script_version.hpp" script_version) +string(REGEX MATCH "#define MAJOR ([0-9]*)" "x" outputX ${script_version}) +set(ACE_VERSION_MAJOR ${CMAKE_MATCH_1}) +string(REGEX MATCH "#define MINOR ([0-9]*)" "x" outputX ${script_version}) +set(ACE_VERSION_MINOR ${CMAKE_MATCH_1}) +string(REGEX MATCH "#define PATCHLVL ([0-9]*)" outputX ${script_version}) +set(ACE_VERSION_REVISION ${CMAKE_MATCH_1}) EXECUTE_PROCESS(COMMAND git rev-parse --verify HEAD OUTPUT_VARIABLE T_ACE_VERSION_BUILD OUTPUT_STRIP_TRAILING_WHITESPACE ) string(SUBSTRING ${T_ACE_VERSION_BUILD} 0 7 ACE_VERSION_BUILD ) -message("Building for: " ${ACE_VERSION_MAJOR}.${ACE_VERSION_MINOR}.${ACE_VERSION_REVISION}-${ACE_VERSION_BUILD}) +message("Setting ACE Version: " ${ACE_VERSION_MAJOR}.${ACE_VERSION_MINOR}.${ACE_VERSION_REVISION}-${ACE_VERSION_BUILD}) configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/common/ace_version.hpp.in" @@ -135,7 +140,7 @@ add_subdirectory(fcs) add_subdirectory(break_line) add_subdirectory(clipboard) add_subdirectory(advanced_ballistics) -add_subdirectory(medical) +#add_subdirectory(medical) # After medical re-write this extension is no longer used add_subdirectory(parse_imagepath) add_subdirectory(artillerytables) @@ -149,5 +154,14 @@ if (DEVEL) endif() +# GTest +option(ENABLE_GTEST "ENABLE_GTEST" ON) +if (ENABLE_GTEST) + include(FetchContent) + FetchContent_Declare(googletest GIT_REPOSITORY https://github.com/google/googletest.git) + # For Windows: Prevent overriding the parent project's compiler/linker settings + set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) + FetchContent_MakeAvailable(googletest) +endif() message("Build Type: ${CMAKE_BUILD_TYPE}") diff --git a/extensions/advanced_ballistics/CMakeLists.txt b/extensions/advanced_ballistics/CMakeLists.txt index 55d84810d1..9319d0bbd7 100644 --- a/extensions/advanced_ballistics/CMakeLists.txt +++ b/extensions/advanced_ballistics/CMakeLists.txt @@ -9,4 +9,14 @@ set_target_properties(${ACE_EXTENSION_NAME} PROPERTIES FOLDER Extensions) 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 +endif() + +# Copy and rename DLL to root +if(USE_64BIT_BUILD) + set(FINAL_DLL_NAME ${ACE_EXTENSION_NAME}_x64.dll) +else() + set(FINAL_DLL_NAME ${ACE_EXTENSION_NAME}.dll) +endif() +add_custom_command(TARGET ${ACE_EXTENSION_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy $ ${PROJECT_SOURCE_DIR}/../${FINAL_DLL_NAME} +) diff --git a/extensions/artillerytables/CMakeLists.txt b/extensions/artillerytables/CMakeLists.txt index 5b6d3863c9..bd897c5103 100644 --- a/extensions/artillerytables/CMakeLists.txt +++ b/extensions/artillerytables/CMakeLists.txt @@ -11,14 +11,23 @@ if(CMAKE_COMPILER_IS_GNUCXX) set_target_properties(${ACE_EXTENSION_NAME} PROPERTIES LINK_SEARCH_END_STATIC 1) endif() +# Copy and rename DLL to root +if(USE_64BIT_BUILD) + set(FINAL_DLL_NAME ${ACE_EXTENSION_NAME}_x64.dll) +else() + set(FINAL_DLL_NAME ${ACE_EXTENSION_NAME}.dll) +endif() +add_custom_command(TARGET ${ACE_EXTENSION_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy $ ${PROJECT_SOURCE_DIR}/../${FINAL_DLL_NAME} +) - -# enable_testing() -# set(ACE_TEST_NAME Test_${ACE_EXTENSION_NAME}) - -# add_executable(${ACE_TEST_NAME} tests/tester.cpp ${SOURCES}) -# target_link_libraries(${ACE_TEST_NAME} ace_common) -# target_link_libraries(${ACE_TEST_NAME} ${ACE_EXTENSION_NAME}) -# target_link_libraries(${ACE_TEST_NAME} gtest_main) -# add_test(${ACE_TEST_NAME} ${ACE_TEST_NAME}) -# set_target_properties(${ACE_TEST_NAME} PROPERTIES FOLDER Tests) +if (TARGET gtest_main) # Add Tests + enable_testing() + set(ACE_TEST_NAME ${ACE_EXTENSION_NAME}_test) + add_executable(${ACE_TEST_NAME} tests/tester.cpp ${SOURCES}) + target_link_libraries(${ACE_TEST_NAME} ace_common) + target_link_libraries(${ACE_TEST_NAME} ${ACE_EXTENSION_NAME}) + target_link_libraries(${ACE_TEST_NAME} gtest_main) + add_test(${ACE_TEST_NAME} ${ACE_TEST_NAME}) + set_target_properties(${ACE_TEST_NAME} PROPERTIES FOLDER Tests) +endif() diff --git a/extensions/break_line/CMakeLists.txt b/extensions/break_line/CMakeLists.txt index 5d29d295c8..320df7a103 100644 --- a/extensions/break_line/CMakeLists.txt +++ b/extensions/break_line/CMakeLists.txt @@ -9,4 +9,14 @@ set_target_properties(${ACE_EXTENSION_NAME} PROPERTIES FOLDER Extensions) 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 +endif() + +# Copy and rename DLL to root +if(USE_64BIT_BUILD) + set(FINAL_DLL_NAME ${ACE_EXTENSION_NAME}_x64.dll) +else() + set(FINAL_DLL_NAME ${ACE_EXTENSION_NAME}.dll) +endif() +add_custom_command(TARGET ${ACE_EXTENSION_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy $ ${PROJECT_SOURCE_DIR}/../${FINAL_DLL_NAME} +) diff --git a/extensions/break_line/ace_break_line.cpp b/extensions/break_line/ace_break_line.cpp index 909c2a1ebb..3c169e6a88 100644 --- a/extensions/break_line/ace_break_line.cpp +++ b/extensions/break_line/ace_break_line.cpp @@ -22,6 +22,9 @@ extern "C" { EXPORT void __stdcall RVExtension(char *output, int outputSize, const char *function); + EXPORT void __stdcall RVExtensionVersion(char *output, int outputSize) { + strncpy(output, ACE_FULL_VERSION_STR, outputSize - 1); + } } std::vector splitString(const std::string & input) { diff --git a/extensions/build/.gitignore b/extensions/build/.gitignore deleted file mode 100644 index 86d0cb2726..0000000000 --- a/extensions/build/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Ignore everything in this directory -* -# Except this file -!.gitignore \ No newline at end of file diff --git a/extensions/clipboard/CMakeLists.txt b/extensions/clipboard/CMakeLists.txt index b8f846844c..6c5668bcdd 100644 --- a/extensions/clipboard/CMakeLists.txt +++ b/extensions/clipboard/CMakeLists.txt @@ -9,4 +9,14 @@ set_target_properties(${ACE_EXTENSION_NAME} PROPERTIES FOLDER Extensions) 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 +endif() + +# Copy and rename DLL to root +if(USE_64BIT_BUILD) + set(FINAL_DLL_NAME ${ACE_EXTENSION_NAME}_x64.dll) +else() + set(FINAL_DLL_NAME ${ACE_EXTENSION_NAME}.dll) +endif() +add_custom_command(TARGET ${ACE_EXTENSION_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy $ ${PROJECT_SOURCE_DIR}/../${FINAL_DLL_NAME} +) diff --git a/extensions/clipboard/ace_clipboard.cpp b/extensions/clipboard/ace_clipboard.cpp index 2ca85711df..d463a4634e 100644 --- a/extensions/clipboard/ace_clipboard.cpp +++ b/extensions/clipboard/ace_clipboard.cpp @@ -18,6 +18,9 @@ extern "C" { EXPORT void __stdcall RVExtension(char *output, int outputSize, const char *function); + EXPORT void __stdcall RVExtensionVersion(char *output, int outputSize) { + strncpy(output, ACE_FULL_VERSION_STR, outputSize - 1); + } } std::string gClipboardData; diff --git a/extensions/fcs/CMakeLists.txt b/extensions/fcs/CMakeLists.txt index b5c7b5671f..e7e6913882 100644 --- a/extensions/fcs/CMakeLists.txt +++ b/extensions/fcs/CMakeLists.txt @@ -9,4 +9,14 @@ set_target_properties(${ACE_EXTENSION_NAME} PROPERTIES FOLDER Extensions) 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 +endif() + +# Copy and rename DLL to root +if(USE_64BIT_BUILD) + set(FINAL_DLL_NAME ${ACE_EXTENSION_NAME}_x64.dll) +else() + set(FINAL_DLL_NAME ${ACE_EXTENSION_NAME}.dll) +endif() +add_custom_command(TARGET ${ACE_EXTENSION_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy $ ${PROJECT_SOURCE_DIR}/../${FINAL_DLL_NAME} +) diff --git a/extensions/fcs/ace_fcs.cpp b/extensions/fcs/ace_fcs.cpp index 3ca32f439f..f15066bc11 100644 --- a/extensions/fcs/ace_fcs.cpp +++ b/extensions/fcs/ace_fcs.cpp @@ -28,6 +28,9 @@ extern "C" { EXPORT void __stdcall RVExtension(char *output, int outputSize, const char *function); + EXPORT void __stdcall RVExtensionVersion(char *output, int outputSize) { + strncpy(output, ACE_FULL_VERSION_STR, outputSize - 1); + } } std::vector splitString(std::string input) { diff --git a/extensions/parse_imagepath/CMakeLists.txt b/extensions/parse_imagepath/CMakeLists.txt index e38a4bb506..251796a95e 100644 --- a/extensions/parse_imagepath/CMakeLists.txt +++ b/extensions/parse_imagepath/CMakeLists.txt @@ -9,4 +9,14 @@ set_target_properties(${ACE_EXTENSION_NAME} PROPERTIES FOLDER Extensions) 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 +endif() + +# Copy and rename DLL to root +if(USE_64BIT_BUILD) + set(FINAL_DLL_NAME ${ACE_EXTENSION_NAME}_x64.dll) +else() + set(FINAL_DLL_NAME ${ACE_EXTENSION_NAME}.dll) +endif() +add_custom_command(TARGET ${ACE_EXTENSION_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy $ ${PROJECT_SOURCE_DIR}/../${FINAL_DLL_NAME} +) diff --git a/extensions/parse_imagepath/ace_parse_imagepath.cpp b/extensions/parse_imagepath/ace_parse_imagepath.cpp index eda1af0d6e..98b1cfa50f 100644 --- a/extensions/parse_imagepath/ace_parse_imagepath.cpp +++ b/extensions/parse_imagepath/ace_parse_imagepath.cpp @@ -19,6 +19,9 @@ extern "C" { EXPORT void __stdcall RVExtension(char *output, int outputSize, const char *function); + EXPORT void __stdcall RVExtensionVersion(char *output, int outputSize) { + strncpy(output, ACE_FULL_VERSION_STR, outputSize - 1); + } } std::string getImagePathFromStructuredText(const std::string & input) { diff --git a/include/a3/data_f/penetration/metal_plate_thin.rvmat b/include/a3/data_f/penetration/metal_plate_thin.rvmat index 6027df8d27..8d479baa8e 100644 Binary files a/include/a3/data_f/penetration/metal_plate_thin.rvmat and b/include/a3/data_f/penetration/metal_plate_thin.rvmat differ diff --git a/include/a3/ui_f/hpp/defineCommonColors.inc b/include/a3/ui_f/hpp/defineCommonColors.inc index 474b732f28..5370c07e6c 100644 --- a/include/a3/ui_f/hpp/defineCommonColors.inc +++ b/include/a3/ui_f/hpp/defineCommonColors.inc @@ -98,6 +98,14 @@ #define IGUI_ERROR_RGB IGUI_ERROR_RGB_R, IGUI_ERROR_RGB_G, IGUI_ERROR_RGB_B #define IGUI_ERROR_COLOR {IGUI_ERROR_RGB,IGUI_ERROR_RGB_A} +//--- IGUI Tactical ping color +#define IGUI_TACTPING_RGB_R "(profilenamespace getvariable ['IGUI_TACTPING_RGB_R',1.0])" +#define IGUI_TACTPING_RGB_G "(profilenamespace getvariable ['IGUI_TACTPING_RGB_G',0.8])" +#define IGUI_TACTPING_RGB_B "(profilenamespace getvariable ['IGUI_TACTPING_RGB_B',0.2])" +#define IGUI_TACTPING_RGB_A "(profilenamespace getvariable ['IGUI_TACTPING_RGB_A',1.0])" +#define IGUI_TACTPING_RGB IGUI_TACTPING_RGB_R, IGUI_TACTPING_RGB_G, IGUI_TACTPING_RGB_B +#define IGUI_TACTPING_COLOR {IGUI_TACTPING_RGB,IGUI_TACTPING_RGB_A} + //--- HUD Text color (obsolete defines; ToDo: Replace with IGUI_TEXT_COLOR and IGUI_BCG_COLOR) #define CA_UI_HUD IGUI_TEXT_COLOR @@ -213,7 +221,6 @@ #define COLOR_TASK_ICON_CUSTOM_A 0.5 #define COLOR_TASK_ICON_CUSTOM_RGBA COLOR_TASK_ICON_CUSTOM_RGB,COLOR_TASK_ICON_CUSTOM_A - #define COLOR_TASK_BACKGROUND_UNASSIGNED_RGB 1,1,1 #define COLOR_TASK_BACKGROUND_UNASSIGNED_A 1 #define COLOR_TASK_BACKGROUND_UNASSIGNED_RGBA COLOR_TASK_BACKGROUND_UNASSIGNED_RGB,COLOR_TASK_BACKGROUND_UNASSIGNED_A diff --git a/include/a3/ui_f/hpp/defineDIKCodes.inc b/include/a3/ui_f/hpp/defineDIKCodes.inc index eb914f9482..c641d60132 100644 --- a/include/a3/ui_f/hpp/defineDIKCodes.inc +++ b/include/a3/ui_f/hpp/defineDIKCodes.inc @@ -187,3 +187,4 @@ #endif /* DIK_ESCAPE */ + diff --git a/include/a3/ui_f/hpp/defineResincl.inc b/include/a3/ui_f/hpp/defineResincl.inc index 7a94b6b592..ee8ddd5dba 100644 --- a/include/a3/ui_f/hpp/defineResincl.inc +++ b/include/a3/ui_f/hpp/defineResincl.inc @@ -1,3 +1,6 @@ +#ifndef _RESINCL_HPP +#define _RESINCL_HPP + /*******************/ /* Tactical menu */ /*******************/ @@ -3168,3 +3171,6 @@ enum #define HZ_VEH_CMDTRRT_TOTAL 31 #define HZ_TANK_BOTH_TRACKS 32 + + +#endif \ No newline at end of file diff --git a/include/x/cba/addons/main/script_macros_common.hpp b/include/x/cba/addons/main/script_macros_common.hpp index 41a4faea75..d50a27f53d 100644 --- a/include/x/cba/addons/main/script_macros_common.hpp +++ b/include/x/cba/addons/main/script_macros_common.hpp @@ -197,7 +197,7 @@ Author: ------------------------------------------- */ #ifdef DEBUG_MODE_FULL -#define LOG(MESSAGE) LOG_SYS_FILELINENUMBERS('LOG',MESSAGE) +#define LOG(MESSAGE) LOG_SYS('LOG',MESSAGE) #define LOG_1(MESSAGE,ARG1) LOG(FORMAT_1(MESSAGE,ARG1)) #define LOG_2(MESSAGE,ARG1,ARG2) LOG(FORMAT_2(MESSAGE,ARG1,ARG2)) #define LOG_3(MESSAGE,ARG1,ARG2,ARG3) LOG(FORMAT_3(MESSAGE,ARG1,ARG2,ARG3)) @@ -265,7 +265,7 @@ Author: ------------------------------------------- */ #ifdef DEBUG_MODE_NORMAL -#define WARNING(MESSAGE) LOG_SYS_FILELINENUMBERS('WARNING',MESSAGE) +#define WARNING(MESSAGE) LOG_SYS('WARNING',MESSAGE) #define WARNING_1(MESSAGE,ARG1) WARNING(FORMAT_1(MESSAGE,ARG1)) #define WARNING_2(MESSAGE,ARG1,ARG2) WARNING(FORMAT_2(MESSAGE,ARG1,ARG2)) #define WARNING_3(MESSAGE,ARG1,ARG2,ARG3) WARNING(FORMAT_3(MESSAGE,ARG1,ARG2,ARG3)) @@ -304,7 +304,7 @@ Example: Author: Spooner ------------------------------------------- */ -#define ERROR(MESSAGE) LOG_SYS_FILELINENUMBERS('ERROR',MESSAGE) +#define ERROR(MESSAGE) LOG_SYS('ERROR',MESSAGE) #define ERROR_1(MESSAGE,ARG1) ERROR(FORMAT_1(MESSAGE,ARG1)) #define ERROR_2(MESSAGE,ARG1,ARG2) ERROR(FORMAT_2(MESSAGE,ARG1,ARG2)) #define ERROR_3(MESSAGE,ARG1,ARG2,ARG3) ERROR(FORMAT_3(MESSAGE,ARG1,ARG2,ARG3)) @@ -1812,9 +1812,9 @@ Author: /* ------------------------------------------- Macro: FILE_EXISTS - Check if a file exists on machines with interface + Check if a file exists - Reports "false" if the file does not exist and throws an error in RPT. + Reports "false" if the file does not exist. Parameters: FILE - Path to the file @@ -1828,17 +1828,4 @@ Example: Author: commy2 ------------------------------------------- */ -#define FILE_EXISTS(FILE) (call {\ - private _return = false;\ - isNil {\ - private _control = (uiNamespace getVariable ["RscDisplayMain", displayNull]) ctrlCreate ["RscHTML", -1];\ - if (isNull _control) then {\ - _return = loadFile (FILE) != "";\ - } else {\ - _control htmlLoad (FILE);\ - _return = ctrlHTMLLoaded _control;\ - ctrlDelete _control;\ - };\ - };\ - _return\ -}) +#define FILE_EXISTS(FILE) (fileExists (FILE)) diff --git a/include/x/cba/addons/xeh/script_xeh.hpp b/include/x/cba/addons/xeh/script_xeh.hpp index 6fe7465203..53d6c27859 100644 --- a/include/x/cba/addons/xeh/script_xeh.hpp +++ b/include/x/cba/addons/xeh/script_xeh.hpp @@ -54,7 +54,9 @@ reloaded = "call cba_xeh_fnc_reloaded"; \ firedMan = "call cba_xeh_fnc_firedMan"; \ turnIn = "call cba_xeh_fnc_turnIn"; \ turnOut = "call cba_xeh_fnc_turnOut"; \ -deleted = "call cba_xeh_fnc_deleted"; +deleted = "call cba_xeh_fnc_deleted"; \ +disassembled = "call cba_xeh_fnc_disassembled"; \ +Suppressed = "call cba_xeh_fnc_Suppressed"; /* MACRO: DELETE_EVENTHANDLERS @@ -107,4 +109,6 @@ reloaded = ""; \ firedMan = ""; \ turnIn = ""; \ turnOut = ""; \ -deleted = ""; +deleted = ""; \ +disassembled = ""; \ +Suppressed = ""; diff --git a/optionals/compat_rhs_afrf3/CfgWeapons.hpp b/optionals/compat_rhs_afrf3/CfgWeapons.hpp index d0bd43a16a..a962899ad6 100644 --- a/optionals/compat_rhs_afrf3/CfgWeapons.hpp +++ b/optionals/compat_rhs_afrf3/CfgWeapons.hpp @@ -57,6 +57,11 @@ class CfgWeapons { class rhs_weap_svds_npz: rhs_weap_svds { ACE_RailHeightAboveBore = 4.3348; }; + class rhs_weap_rpk_base; + class rhs_weap_rpk74_base : rhs_weap_rpk_base { + ACE_barrelLength = 590.00; + ACE_barrelTwist = 195.072; + }; class rhs_pkp_base; class rhs_weap_pkp: rhs_pkp_base { ACE_barrelTwist = 240.03; @@ -67,10 +72,6 @@ class CfgWeapons { ACE_barrelTwist = 240.03; ACE_barrelLength = 645.16; }; - class rhs_weap_rpk74: rhs_weap_pkp { - ACE_barrelTwist = 195.072; - ACE_barrelLength = 589.28; - }; class rhs_weap_orsis_Base_F; class rhs_weap_t5000: rhs_weap_orsis_Base_F { // http://en.orsis.com/production/catalog/19046/ ACE_barrelTwist = 254.0; // 1:10" diff --git a/optionals/compat_rhs_usf3/CfgWeapons.hpp b/optionals/compat_rhs_usf3/CfgWeapons.hpp index 6b68cf53b3..915178386b 100644 --- a/optionals/compat_rhs_usf3/CfgWeapons.hpp +++ b/optionals/compat_rhs_usf3/CfgWeapons.hpp @@ -261,6 +261,46 @@ class CfgWeapons { class rhsusf_acc_M8541_low: rhsusf_acc_M8541 { ACE_ScopeHeightAboveRail = 2.9789; }; + class rhsusf_acc_nxs_3515x50_base: ItemCore { // http://www.nightforceusa.com/PDF/nightforce-2011-catalog.pdf#page=12 + ACE_ScopeAdjust_Vertical[] = {0, 30}; + ACE_ScopeAdjust_Horizontal[] = {-10.9, 10.9}; + ACE_ScopeAdjust_VerticalIncrement = 0.1; + ACE_ScopeAdjust_HorizontalIncrement = 0.1; + class ItemInfo: InventoryOpticsItem_Base_F { + class OpticsModes { + class nxs_scope { + discreteDistance[] = {100}; + discreteDistanceInitIndex = 0; + }; + }; + }; + }; + class rhsusf_acc_nxs_3515x50f1_base: rhsusf_acc_sniper_base { // http://www.nightforceusa.com/PDF/nightforce-2011-catalog.pdf#page=12 + ACE_ScopeAdjust_Vertical[] = {0, 30}; + ACE_ScopeAdjust_Horizontal[] = {-10.9, 10.9}; + class ItemInfo: InventoryOpticsItem_Base_F { + class OpticsModes { + class nxs_scope { + discreteDistance[] = {100}; + discreteDistanceInitIndex = 0; + }; + }; + }; + }; + class rhsusf_acc_nxs_5522x56_base: ItemCore { // http://www.nightforceusa.com/PDF/nightforce-2011-catalog.pdf#page=12 + ACE_ScopeAdjust_Vertical[] = {0, 27.3}; + ACE_ScopeAdjust_Horizontal[] = {-8.2, 8.2}; + ACE_ScopeAdjust_VerticalIncrement = 0.1; + ACE_ScopeAdjust_HorizontalIncrement = 0.1; + class ItemInfo: InventoryOpticsItem_Base_F { + class OpticsModes { + class nxs_scope { + discreteDistance[] = {100}; + discreteDistanceInitIndex = 0; + }; + }; + }; + }; // RHS lauchers class rhs_weap_fgm148: launch_O_Titan_F { ace_javelin_enabled = 1; diff --git a/optionals/particles/script_component.hpp b/optionals/particles/script_component.hpp index 53a4988a8d..f783f7bede 100644 --- a/optionals/particles/script_component.hpp +++ b/optionals/particles/script_component.hpp @@ -27,17 +27,18 @@ type = "ACE_SmokeBaseMedium"; \ }; \ } +#define MERGE(var1,var2) var1####var2 #define EFFECT_40MM(color) class ACE_40mmSmokeShell##color##Effect: ACE_40mmSmokeShellWhiteEffect { \ class SmokeShellUW { \ simulation = "particles"; \ - type = QUOTE(SmokeShell##color##UW); \ + type = QUOTE(MERGE(SmokeShell,MERGE(color,UW))); \ position[] = {0, 0, 0}; \ intensity = 1; \ interval = 1; \ }; \ class SmokeShell2UW { \ simulation = "particles"; \ - type = QUOTE(SmokeShell##color##2UW); \ + type = QUOTE(MERGE(SmokeShell,MERGE(color,2UW))); \ position[] = {0, 0, 0}; \ intensity = 1; \ interval = 1; \ @@ -45,11 +46,11 @@ } #define EFFECT_AFTER_WATER(color) class ACE_SmokeAfterWater##color: ACE_SmokeAfterWaterWhite { \ class SmokeAfterWater: SmokeAfterWater { \ - type = QUOTE(ACE_SmokeAfterWater##color); \ + type = QUOTE(MERGE(ACE_SmokeAfterWater,color)); \ }; \ } #define CLOUDLET_UNDERWATER(color) class SmokeShell##color##UW; \ class SmokeShell##color##2UW: SmokeShell##color##UW { \ - postEffects = QUOTE(ACE_SmokeAfterWater##color); \ + postEffects = QUOTE(MERGE(ACE_SmokeAfterWater,color)); \ } diff --git a/optionals/tracers/stringtable.xml b/optionals/tracers/stringtable.xml index e89ed4522b..6bc405b842 100644 --- a/optionals/tracers/stringtable.xml +++ b/optionals/tracers/stringtable.xml @@ -10,6 +10,7 @@ 5.56 mm 150 ranný zásobník, stopovka pro přebití (Zelená) Recarregar magazine de 150 balas tracejantes (verde) 5.56 mm 150発入り 残通知 曳光弾 (緑) マガジン + Cargador de 150 Cartuchos 5.56 mm Trazadora de recarga (Verde) 5.56 mm 150Rnd Reload Tracer (Yellow) Mag @@ -19,6 +20,7 @@ 5.56 mm 150 ranný zásobník, stopovka pro přebití (Žlutá) Recarregar magazine 150 balas tracejantes (Amarelo) 5.56 mm 150発入り 残通知 曳光弾 (黄) マガジン + Cargador de 150 Cartuchos 5.56 mm Trazadora de recarga (Amarilla) 5.56 mm 150Rnd Tracer (Green) Mag @@ -28,6 +30,7 @@ 5.56 mm 150 ranný zásobník, stopovka (Zelená) Magazine 5.56mm Tracejante (verde) 5.56 mm 150発入り 曳光弾 (緑) マガジン + Cargador de 150 Cartuchos 5.56 mm Trazadora (Verde) Caliber: 5.56x45 mm Tracer - Green<br />Rounds: 150<br />Used in: SPAR-16S @@ -37,6 +40,7 @@ Kalibr: 5.56×45 mm Stopovka - Zelená<br />Nábojů: 150<br />Použito v: SPAR-16S Calibre 5.56x45mm Tracejante - Verde<br/>Balas:150<br/>Usado em: Spar-16S 口径: 5.56x45 mm 曳光弾 - 緑<br />弾数: 150<br />使用武器: SPAR-16S + Calibre: 5.56x45 mm Trazadora - Verde<br />Cartuchos: 150<br />Usada en:: SPAR-16S 5.56 mm 150Rnd Tracer (Yellow) Mag @@ -46,6 +50,7 @@ 5.56 mm 150 ranný zásobník, stopovka (Žlutá) Magazine 5.56mm 150 balas tracejante (amarelo) 5.56 mm 150発入り 曳光弾 (黄) マガジン + Cargador de 150 Cartuchos 5.56 mm Trazadora (Amarilla) Caliber: 5.56x45 mm Tracer - Yellow<br />Rounds: 150<br />Used in: SPAR-16S @@ -55,6 +60,7 @@ Kalibr: 5.56×45 mm Stopovka - Žlutá<br />Nábojů: 150<br />Použito v: SPAR-16S Calibre: 5.56x45mm Tracejante - Amarelo <br/>Balas:150<br/>Usado em:Spar-16S 口径: 5.56x45 mm 曳光弾 - 黄<br />弾数: 150<br />使用武器: SPAR-16S + Calibre: 5.56x45 mm Trazadora - Amarilla<br />Cartuchos: 150<br />Usada en: SPAR-16S 5.56 mm 200Rnd Reload Tracer (Green) Box @@ -64,6 +70,7 @@ 5.56 mm 200 ranný box, stopovka pro přebití (Zelená) Recarregar Caixa 5.56mm 200 Balas tracejantes (verdes) 5.56 mm 200発入り 残通知 曳光弾 (緑) ボックス + Caja de 200 Cartuchos 5.56 mm Trazadora de recarga (Verde) 5.56 mm 200Rnd Tracer (Green) Box @@ -73,6 +80,7 @@ 5.56 mm 200 ranný box, stopovka (Zelená) Caixa 5.56mm 200 balas tracejantes (verdes) 5.56 mm 200発入り 曳光弾 (緑) ボックス + Caja de 200 Cartuchos 5.56 mm Trazadora (Verde) Caliber: 5.56x45 mm Tracer - Green<br />Rounds: 200<br />Used in: LIM-85 @@ -82,6 +90,7 @@ Kalibr: 5.56×45 mm Stopovka - Zelená<br />Nábojů: 200<br />Použito v: LIM-85 Calibre:5.56x45 mm Tracejante - Verde <br/>Balas: 200<br/>Usado em:LIM-85 口径: 5.56x45 mm 曳光弾 - 緑<br />弾数: 200<br />使用武器: LIM-85 + Calibre: 5.56x45 mm Trazadora - Verde<br />Cartuchos: 200<br />Usada en: LIM-85 5.8 mm 30Rnd Reload Tracer (Red) Mag @@ -91,6 +100,7 @@ 5.8 mm 30 ranný zásobník, stopovka pro přebití (Červená) Recarregar magazine 5.8mm 30 Balas tracejantes (vermelho) 5.8 mm 30発入り 残通知 曳光弾 (赤) マガジン + Cargador de 30 Cartuchos 5.8 mm Trazadora de recarga (Roja) 5.8 mm 30Rnd Reload Tracer (Yellow) Mag @@ -100,6 +110,7 @@ 5.8 mm 30 ranný zásobník, stopovka pro přebití (Žlutá) Recarregar magazine 5.8mm 30 Balas tracejantes (amarelo) 5.8 mm 30発入り 残通知 曳光弾 (黄) マガジン + Cargador de 30 Cartuchos 5.8 mm Trazadora de recarga (Amarilla) 5.8 mm 30Rnd Tracer (Red) Mag @@ -109,6 +120,7 @@ 5.8 mm 30 ranný zásobník, stopovka (Červená) Magazine 5.8 mm 30 balas tracejantes (vermelho) 5.8 mm 30発入り 曳光弾 (赤) マガジン + Cargador de 30 Cartuchos 5.8 mm Trazadora (Roja) Caliber: 5.8x42 mm Tracer - Red<br />Rounds: 30<br />Used in: CAR-95, CAR-95 GL @@ -118,6 +130,7 @@ Kalibr: 5.8×42 mm Stopovka - Červená<br />Nábojů: 30<br />Použito v: CAR-95, CAR-95 GL Calibre: 5.8x42 mm Tracejante - Vermelho<br/>Balas:30<br/>Usado em CAR-95, CAR-95 GL 口径: 5.8x42 mm 曳光弾 - 赤<br />弾数: 30<br />使用武器: CAR-95, CAR-95 GL + Calibre: 5.8x42 mm Trazadora - Roja<br />Cartuchos: 30<br />Usada en: CAR-95, CAR-95 GL 5.8 mm 30Rnd Tracer (Yellow) Mag @@ -127,6 +140,7 @@ 5.8 mm 30 ranný zásobník, stopovka (Žlutá) Magazine 5.8 mm 30 balas tracejante (amarelo) 5.8 mm 30発入り 曳光弾 (黄) マガジン + Cargador de 30 Cartuchos 5.8 mm Trazadora (Amarilla) Caliber: 5.8x42 mm Tracer - Yellow<br />Rounds: 30<br />Used in: CAR-95, CAR-95 GL @@ -136,6 +150,7 @@ Kalibr: 5.8×42 mm Stopovka - Žlutá<br />Nábojů: 30<br />Použito v: CAR-95, CAR-95 GL Calibre: 5.8x42 mm Tracejante - Amarelo <br/>Balas: 30<br/>Usado em: CAR-95, CAR-95 GL 口径: 5.8x42 mm 曳光弾 - 黄<br />弾数: 30<br />使用武器: CAR-95, CAR-95 GL + Calibre: 5.8x42 mm Trazadora - Amarilla<br />Cartuchos: 30<br />Usada en: CAR-95, CAR-95 GL 5.8 mm 100Rnd Reload Tracer (Red) Mag @@ -145,6 +160,7 @@ 5.8 mm 100 ranný zásobník, stopovka pro přebití (Červená) Recarregar magazine 5.8 mm 100 balas tracejante (vermelho) 5.8 mm 100発入り 残通知 曳光弾 (赤) マガジン + Cargador de 100 Cartuchos 5.8 mm Trazadora de recarga (Roja) 5.8 mm 100Rnd Reload Tracer (Yellow) Mag @@ -154,6 +170,7 @@ 5.8 mm 100 ranný zásobník, stopovka pro přebití (Žlutá) Recarregar magazine 5.8 mm 100 balas tracejantes (amarelo) 5.8 mm 100発入り 残通知 曳光弾 (黄) マガジン + Cargador de 100 Cartuchos 5.8 mm Trazadora de recarga (Amarilla) 5.8 mm 100Rnd Tracer (Red) Mag @@ -163,6 +180,7 @@ 5.8 mm 100 ranný zásobník, stopovka (Červená) Magazine 5.8 mm 100 balas tracejantes (vermelho) 5.8 mm 100発入り 曳光弾 (赤) マガジン + Cargador de 100 Cartuchos 5.8 mm Trazadora (Roja) Caliber: 5.8x42 mm Tracer - Red<br />Rounds: 100<br />Used in: CAR-95-1 @@ -172,6 +190,7 @@ Kalibr: 5.8×42 mm Stopovka - Červená<br />Nábojů: 100<br />Použito v: CAR-95-1 Calibre: 5.8x42 mm Tracejante - Vermelho<br/>Balas:100<br/>Usado em CAR-95-1 口径: 5.8x42 mm 曳光弾 - 赤<br />弾数: 100<br />使用武器: CAR-95-1 + Calibre: 5.8x42 mm Trazadora - Roja<br />Cartuchos: 100<br />Usada en: CAR-95-1 5.8 mm 100Rnd Tracer (Yellow) Mag @@ -181,6 +200,7 @@ 5.8 mm 100 ranný zásobník, stopovka (Žlutá) Magazine 5.8 mm 100 balas tracejantes (amarelo) 5.8 mm 100発入り 曳光弾 (黄) マガジン + Cargador de 100 Cartuchos 5.8 mm Trazadora (Amarilla) Caliber: 5.8x42 mm Tracer - Yellow<br />Rounds: 100<br />Used in: CAR-95-1 @@ -190,6 +210,7 @@ Kalibr: 5.8×42 mm Stopovka - Žlutá<br />Nábojů: 100<br />Použito v: CAR-95-1 Calibre: 5.8x42 mm Tracejante - Amarelo<br/>Balas:100<br/>Usado em CAR-95-1 口径: 5.8x42 mm 曳光弾 - 黄<br />弾数: 100<br />使用武器: CAR-95-1 + Calibre: 5.8x42 mm Trazadora - Amarilla<br />Cartuchos: 100<br />Usada en: CAR-95-1 6.5mm 30Rnd Reload Tracer (Green) Mag @@ -199,6 +220,7 @@ 6.5 mm 30 ranný zásobník, stopovka pro přebití (Zelená) Recarregar magazine 6.5mm 30 balas tracejantes (verde) 6.5 mm 30発入り 残通知 曳光弾 (緑) マガジン + Cargador de 30 Cartuchos 6.5 mm Trazadora de recarga (Verde) Caliber: 6.5x39 mm Tracer - Green<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL @@ -208,6 +230,7 @@ Kalibr: 6.5×39 mm Stopovka - Zelená<br />Nábojů: 30<br />Použito v: MX/C/M/SW/3GL Calibre: 6.5x39 mm Tracejante - Verde<br/>Balas:30<br/>Usado em: MX/C/M/SW/3GL 口径: 6.5x39 mm 曳光弾 - 緑<br />弾数: 30<br />使用武器: MX/C/M/SW/3GL + Calibre: 6.5x39 mm Tracer - Green<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL 6.5mm 30Rnd Reload Tracer (Yellow) Mag @@ -217,6 +240,7 @@ 6.5 mm 30 ranný zásobník, stopovka pro přebití (Žlutá) Recarregar magazine 6.5mm 30 balas tracejantes (amarelo) 6.5 mm 30発入り 残通知 曳光弾 (黄) マガジン + Cargador de 30 Cartuchos 6.5 mm Trazadora de recarga (Amarilla) Caliber: 6.5x39 mm Tracer - Yellow<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL @@ -226,6 +250,7 @@ Kalibr: 6.5×39 mm Stopovka - Žlutá<br />Nábojů: 30<br />Použito v: MX/C/M/SW/3GL Calibre: 6.5x39 mm Tracejante - Amarelo<br/>Balas:30<br/>Usado em: MX/C/M/SW/3GL 口径: 6.5x39 mm 曳光弾 - 黄<br />弾数: 30<br />使用武器: MX/C/M/SW/3GL + Calibre: 6.5x39 mm Trazadora - Amarilla<br />Cartuchos: 30<br />Usada en: MX/C/M/SW/3GL 6.5mm 30Rnd Tracer (Green) Mag @@ -235,6 +260,7 @@ 6.5 mm 30 ranný zásobník, stopovka (Zelená) Magazine 6.5mm 30 balas tracejantes (verde) 6.5 mm 30発入り 曳光弾 (緑) マガジン + Cargador de 30 Cartuchos 6.5 mm Trazadora (Verde) Caliber: 6.5x39 mm Tracer - Green<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL @@ -244,6 +270,7 @@ Kalibr: 6.5×39 mm Stopovka - Zelená<br />Nábojů: 30<br />Použito v: MX/C/M/SW/3GL Calibre: 6.5x39 mm Tracejante - Verde<br/>Balas:30<br/>Usado em: MX/C/M/SW/3GL 口径: 6.5x39 mm 曳光弾 - 緑<br />弾数: 30<br />使用武器: MX/C/M/SW/3GL + Calibre: 6.5x39 mm Trazadora - Verde<br />Cartuchos: 30<br />Usada en: MX/C/M/SW/3GL 6.5mm 30Rnd Tracer (Yellow) Mag @@ -253,6 +280,7 @@ 6.5 mm 30 ranný zásobník, stopovka (Žlutá) Magazine 6.5mm 30 balas tracejantes (amarelo) 6.5 mm 30発入り 曳光弾 (黄) マガジン + Cargador de 30 Cartuchos 6.5 mm Trazadora (Amarilla) Caliber: 6.5x39 mm Tracer - Yellow<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL @@ -262,6 +290,7 @@ Kalibr: 6.5×39 mm Stopovka - Žlutá<br />Nábojů: 30<br />Použito v: MX/C/M/SW/3GL Calibre: 6.5x39 mm Tracejante - Amarelo<br/>Balas:30<br/>Usado em: MX/C/M/SW/3GL 口径: 6.5x39 mm 曳光弾 - 黄<br />弾数: 30<br />使用武器: MX/C/M/SW/3GL + Calibre: 6.5x39 mm Trazadora - Amarilla<br />Cartuchos: 30<br />Usada en: MX/C/M/SW/3GL 6.5mm 100Rnd Mixed Mag (Green) @@ -271,6 +300,7 @@ 6.5 mm 100 ranný zásobník, částečná stopovka (Zelená) Magazine 6.5mm 100 balas misturadas (verde) 6.5 mm 100発入り 混合 (緑) マガジン + Cargador de 100 cartuchos 6.5 mm Mezcla (Verde) 6.5mm 100Rnd Mixed Mag (Yellow) @@ -280,6 +310,7 @@ 6.5 mm 100 ranný zásobník, částečná stopovka (Žlutá) Magazine 6.5mm 100 balas misturadas (amarelo) 6.5 mm 100発入り 混合 (黄) マガジン + Cargador de 100 cartuchos 6.5 mm Mezcla (Amarilla) 6.5mm 100Rnd Mag Tracer (Green) @@ -289,6 +320,7 @@ 6.5 mm 100 ranný zásobník, stopovka (Zelená) Magazine 6.5mm 100 balas tracejantes 6.5 mm 100発入り (緑) マガジン + Cargador de 100 cartuchos 6.5 mm Trazadora (Verde) Caliber: 6.5x39 mm Tracer - Green<br />Rounds: 100<br />Used in: MX SW @@ -298,6 +330,7 @@ Kalibr: 6.5×39 mm Stopovka - Zelená<br />Nábojů: 100<br />Použito v: MX SW Calibre: 6.5x39 mm Tracejante - Verde<br/>Balas: 100<br/>Usado em: MX SW 口径: 6.5x39 mm 曳光弾 - 緑<br />弾数: 100<br />使用武器: MX SW + Calibre: 6.5x39 mm Trazadora - Verde<br />Cartuchos: 100<br />Usada en: MX SW 6.5mm 100Rnd Mag Tracer (Yellow) @@ -307,6 +340,7 @@ 6.5 mm 100 ranný zásobník, stopovka (Žlutá) Magazine 6.5mm 100 balas tracejantes (amarelo) 6.5 mm 100発入り 曳光弾 (黄) マガジン + Cargador de 100 cartuchos 6.5 mm Trazadora (Amarilla) Caliber: 6.5x39 mm Tracer - Yellow<br />Rounds: 100<br />Used in: MX SW @@ -316,6 +350,7 @@ Kalibr: 6.5×39 mm Stopovka - Žlutá<br />Nábojů: 100<br />Použito v: MX SW Calibre: 6.5x39 mm Tracejante - Amarelo<br/>Balas: 100<br/>Usado em: MX SW 口径: 6.5x39 mm 曳光弾 - 黄<br />弾数: 100<br />使用武器: MX SW + Calibre: 6.5x39 mm Trazadora - Amarilla<br />Cartuchos: 100<br />Usada en: MX SW 6.5mm 30Rnd Reload Tracer (Red) Mag @@ -325,6 +360,7 @@ 6.5 mm 30 ranný zásobník, stopovka pro přebití (Červená) Recarregar magazine 6.5mm 30 balas tracejantes (vermelho) 6.5 mm 30発入り 残通知 曳光弾 (赤) マガジン + Cargador de 30 Cartuchos 6.5 mm Trazadora de recarga (Roja) 6.5mm 30Rnd Reload Tracer (Yellow) Mag @@ -334,6 +370,7 @@ 6.5 mm 30 ranný zásobník, stopovka pro přebití (Žlutá) Recarregar magazine 6.5mm 30 balas tracejantes (amarelo) 6.5 mm 30発入り 残通知 曳光弾 (黄) マガジン + Cargador de 30 Cartuchos 6.5 mm Trazadora de recarga (Amarilla) 6.5mm 30Rnd Tracer (Red) Mag @@ -343,6 +380,7 @@ 6.5 mm 30 ranný zásobník, stopovka (Červená) Magazine 6.5mm 30 balas tracejantes (vermelho) 6.5 mm 30発入り 曳光弾 (赤) マガジン + Cargador de 30 Cartuchos 6.5 mm Trazadora (Roja) Caliber: 6.5x39 mm Tracer (Red) - Caseless<br />Rounds: 30<br />Used in: Katiba, Type 115 @@ -352,6 +390,7 @@ Kalibr: 6.5×39 mm Stopovka - Červená - Beznábojnicová<br />Nábojů: 30<br />Použito v: Katiba, Type 115 Calibre: 6.5x39 mm Tracejante (Vermelho) - Sem Cartucho<br/>Balas: 30<br/>Usado em: Katiba, Type 115 口径: 6.5x39 mm 曳光弾 - 赤 (ケースレス)<br />弾数: 30<br />使用武器: Katiba, Type 115 + Calibre: 6.5x39 mm Trazadora (Roja) - Sin casquillo<br />Cartuchos: 30<br />Usada en: Katiba, Type 115 6.5mm 30Rnd Tracer (Yellow) Mag @@ -361,6 +400,7 @@ 6.5 mm 30 ranný zásobník, stopovka (Žlutá) Magazine 6.5mm 30 balas tracejantes (amarelo) 6.5 mm 30発入り 曳光弾 (黄) マガジン + Cargador de 30 Cartuchos 6.5 mm Trazadora (Amarilla) Caliber: 6.5x39 mm Tracer (Yellow) - Caseless<br />Rounds: 30<br />Used in: Katiba, Type 115 @@ -370,6 +410,7 @@ Kalibr: 6.5×39 mm Stopovka - Žlutá - Beznábojnicová<br />Nábojů: 30<br />Použito v: Katiba, Type 115 Caliber: 6.5x39 mm Tracejante (Vermelho) - Sem Cartucho<br/>Balas: 30<br/>Usado em: Katiba, Type 115 口径: 6.5x39 mm 曳光弾 - 黄 (ケースレス)<br />弾数: 30<br />使用武器: Katiba, Type 115 + Calibre: 6.5x39 mm Trazadora (Amarilla) - Sin casquillo<br />Cartuchos: 30<br />Usada en: Katiba, Type 115 6.5 mm 200Rnd Belt Case Mixed (Green) @@ -379,6 +420,7 @@ 6.5 mm 200 ranný pás, částečná stopovka (Zelená) Caixa de Cinto 6.5 mm 200 Balas Misturados (Verde) 6.5 mm 200発入り 混合 (緑) ベルト ケース + Caja con cinta de 200 cartuchos 6.5 mm Mezcla (Verde) Caliber: 6.5x39 mm Mixed - Green<br />Rounds: 200<br />Used in: Mk200 @@ -388,6 +430,7 @@ Kalibr: 6.5×39 mm Stopovka - Zelená<br />Nábojů: 200<br />Použito v: Mk200 Calibre: 6.5x39 mm Misturado - Verde<br/>Balas: 200<br/>Usado em: Mk200 口径: 6.5x39 mm 混合 - 緑<br />弾数: 200<br />使用武器: Mk200 + Calibre: 6.5x39 mm Mezcla - Verde<br />Cartuchos: 200<br />Usada en: Mk200 6.5 mm 200Rnd Belt Case Mixed (Red) @@ -397,6 +440,7 @@ 6.5 mm 200 ranný pás, částečná stopovka (Červená) Caixa de Cinto 6.5 mm 200 balas misturadas (Vermelho) 6.5 mm 200発入り 混合 (赤) ベルト ケース + Caja con cinta de 200 cartuchos 6.5 mm Mezcla (Roja) Caliber: 6.5x39 mm Mixed - Red<br />Rounds: 200<br />Used in: Mk200 @@ -406,6 +450,7 @@ Kalibr: 6.5×39 mm Stopovka - Červená<br />Nábojů: 200<br />Použito v: Mk200 Caliber: 6.5x39 mm Misturado - Vermelho<br/>Balas: 200<br/>Usado em: Mk200 口径: 6.5x39 mm 混合 - 赤<br />弾数: 200<br />使用武器: Mk200 + Calibre: 6.5x39 mm Mezcla - Roja<br />Cartuchos: 200<br />Usada en: Mk200 6.5 mm 200Rnd Belt Case Tracer (Green) @@ -415,6 +460,7 @@ 6.5 mm 200 ranný pás, částečná stopovka (Zelená) Caixa de Cinto 6;5 mm 200 balas tracejantes (Verde) 6.5 mm 200発入り 混合 (緑) ベルト ケース + Caja con cinta de 200 cartuchos 6.5 mm Trazadora (Verde) Caliber: 6.5x39 mm Tracer - Green<br />Rounds: 200<br />Used in: Mk200 @@ -425,6 +471,7 @@ Kaliber: 6.5x39 mm Smugowa - Zielona<br />Sztuk: 200<br />Używana w: Mk200 Caliber: 6.5x39 mm Tracejante - Verde<br/>Balas: 200<br/>Usado em: Mk200 口径: 6.5x39 mm 曳光弾 - 緑<br />弾数: 200<br />使用武器: Mk200 + Calibre: 6.5x39 mm Trazadora - Verde<br />Cartuchos: 200<br />Usada en: Mk200 6.5 mm 200Rnd Belt Case Tracer (Red) @@ -435,6 +482,7 @@ 6.5 mm Magazynek pudełkowy 200szt. Smugowa (Czerwona) Caixa de Cinto 6.5 mm 200 Balas Tracejantes (Vermelho) 6.5 mm 200発入り 曳光弾 (赤) ベルト ケース + Caja con cinta de 200 cartuchos 6.5 mm Trazadora (Roja) Caliber: 6.5x39 mm Tracer - Red<br />Rounds: 200<br />Used in: Mk200 @@ -445,6 +493,7 @@ Kaliber: 6.5x39 mm Smugowa - Czerwona<br />Sztuk: 200<br />Używana w: Mk200 Caliber: 6.5x39 mm Tracejante - Vermelho<br/>Balas: 200<br/>Usado em: Mk200 口径: 6.5x39 mm 曳光弾 - 赤<br />弾数: 200<br />使用武器: Mk200 + Calibre: 6.5x39 mm Trazadora - Roja<br />Cartuchos: 200<br />Usada en: Mk200 7.62 mm 20Rnd Tracer (Green) Mag @@ -455,6 +504,7 @@ 7.62 mm Magazynek 20szt. Smugowa (Zielona) Magazine 7.62 mm 20 Balas Tracejantes (verdes) 7.62 mm 20発入り 曳光弾 (緑) マガジン + Cargador de 20 cartuchos 7.62 mm Trazadora (Verde) Caliber: 7.62x51 mm NATO Tracer - Green<br />Rounds: 20<br />Used in: Mk18 ABR, Mk-I EMR, Mk14, SPAR-17 @@ -465,6 +515,7 @@ Kaliber: 7.62x51 mm NATO Smugowa - Zielona<br />Sztuk: 20<br />Używana w: Mk18 ABR, Mk-I EMR, Mk14, SPAR-17 Calibre: 7.62x51 mm NATO Tracejante - Verde<br/>Balas: 20<br/>Usado em: Mk18 ABR, Mk-I EMR, Mk14, SPAR-17 口径: 7.62x51 mm NATO 曳光弾 - 緑<br />弾数: 20<br />使用武器: Mk18 ABR, Mk-I EMR, Mk14, SPAR-17 + Calibre: 7.62x51 mm NATO Trazadora - Verde<br />Cartuchos: 20<br />Usada en: Mk18 ABR, Mk-I EMR, Mk14, SPAR-17 7.62 mm 20Rnd Tracer (Yellow) Mag @@ -475,6 +526,7 @@ 7.62 mm Magazynek 20szt. Smugowa (Żółta) Magazine 7.62 mm 20 Balas Tracejantes (Amarelo) 7.62 mm 20発入り 曳光弾 (黄) マガジン + Cargador de 20 cartuchos 7.62 mm Trazadora (Amarilla) Caliber: 7.62x51 mm NATO Tracer - Yellow<br />Rounds: 20<br />Used in: Mk18 ABR, Mk-I EMR, Mk14, SPAR-17 @@ -485,6 +537,7 @@ Kaliber: 7.62x51 mm NATO Smugowa - Żółta<br />Sztuk: 20<br />Używana w: Mk18 ABR, Mk-I EMR, Mk14, SPAR-17 Calibre: 7.62x51 mm NATO Tracejante - Amarelo<br/>Balas: 20<br/>Usado em: Mk18 ABR, Mk-I EMR, Mk14, SPAR-17 口径: 7.62x51 mm NATO 曳光弾 - 黄<br />弾数: 20<br />使用武器: Mk18 ABR, Mk-I EMR, Mk14, SPAR-17 + Calibre: 7.62x51 mm NATO Trazadora - Amarilla<br />Cartuchos: 20<br />Usada en: Mk18 ABR, Mk-I EMR, Mk14, SPAR-17 7.62mm 150Rnd Box Mixed (Red) @@ -495,6 +548,7 @@ 7.62 mm Magazynek pudełkowy 150szt. Mieszana (Czerwona) Caixa 7.62mm 150 Balas Misturadas (Vermelho) 7.62 mm 150発入り 混合 (緑) ボックス + Caja de 150 cartuchos 7.62 mm Mezcla (Roja) 7.62mm 150Rnd Box Mixed (Yellow) @@ -505,6 +559,7 @@ 7.62 mm Magazynek pudełkowy 150szt. Mieszana (Żółta) Caixa 7.62mm 150 Balas Misturadas (Amarelo) 7.62 mm 150発入り 混合 (黄) ボックス + Caja de 150 cartuchos 7.62 mm Mezcla (Amarilla) 7.62mm 150Rnd Box Tracer (Red) @@ -515,6 +570,7 @@ 7.62mm Magazynek pudełkowy 150szt. Smugowa (Czerwona) Caixa 7.62mm 150 Balas Misturadas (Vermelho) 7.62 mm 150発入り 曳光弾 (赤) ボックス + Caja de 150 cartuchos 7.62 mm Trazadora (Roja) Caliber: 7.62x54 mm Tracer - Red<br />Rounds: 150<br />Used in: Zafir @@ -525,6 +581,7 @@ Kaliber: 7.62x54 mm Smugowa - Czerwona<br />Sztuk: 150<br />Używana w: Zafir Calibre: 7.62x54 mm Tracejante - Vermelho<br/>Balas: 150<br/>Usado em:Zafir 口径: 7.62x54 mm 曳光弾 - 赤<br />弾数: 150<br />使用武器: ザフィル + Calibre: 7.62x54 mm Trazadora - Roja<br />Cartuchos: 150<br />Usada en: Zafir 7.62mm 150Rnd Box Tracer (Yellow) @@ -535,6 +592,7 @@ 7.62 mm Magazynek pudełkowy 150szt. Smugowa (Żółta) Caixa 7.62mm 150 Balas Tracejantes (Amarelo) 7.62 mm 150発入り 曳光弾 (緑) ボックス + Caja de 150 cartuchos 7.62 mm Trazadora (Amarilla) Caliber: 7.62x54 mm Tracer - Yellow<br />Rounds: 150<br />Used in: Zafir @@ -545,6 +603,7 @@ Kaliber: 7.62x54 mm Smugowa - Żółta<br />Sztuk: 150<br />Używana w: Zafir Calibre: 7.62x54 mm Tracejante - Amarelo<br/>Balas: 150<br/>Usado em:Zafir 口径: 7.62x54 mm 曳光弾 - 黄<br />弾数: 150<br />使用武器: ザフィル + Calibre: 7.62x54 mm Trazadora - Amarilla<br />Cartuchos: 150<br />Usada en: Zafir 9.3mm 150Rnd Belt Mixed (Yellow) @@ -555,6 +614,7 @@ 9.3 mm Taśma 150szt. Mieszana (Żółta) Cinto 9.3mm 150 Balas Misturadas (Amarelo) 9.3 mm 150発入り 混合 (黄) ベルト + Cinta de 150 cartuchos 9.3 mm Mezcla (Amarilla) 9.3mm 150Rnd Belt Mixed (Red) @@ -565,6 +625,7 @@ 9.3 mm Taśma 150szt. Mieszana (Czerwona) Cinto 9.3mm 150 Balas Misturadas (Vermelho) 9.3 mm 150発入り 混合 (赤) ベルト + Cinta de 150 cartuchos 9.3 mm Mezcla (Roja) .338 NM 130Rnd Belt Mixed (Yellow) @@ -575,6 +636,7 @@ .338 NM Taśma 130szt. Mieszana (Żółta) Cinto .338 NM Misturado (Amarelo) .338 NM 130発入り 混合 (黄) ベルト + Cinta de 130 cartuchos .338 NM Mezcla (Amarilla) .338 NM 130Rnd Belt Mixed (Green) @@ -585,6 +647,7 @@ .338 NM Taśma 130szt. Mieszana (Zielona) Cinto .338 NM 130 Balas Misturados (Verde) .338 NM 130発入り 混合 (緑) ベルト + Cinta de 130 cartuchos .338 NM Mezcla (Verde) diff --git a/tools/compileExtensions.py b/tools/compileExtensions.py new file mode 100644 index 0000000000..8864d98e7a --- /dev/null +++ b/tools/compileExtensions.py @@ -0,0 +1,97 @@ +#!/usr/bin/env python3 +# vim: set fileencoding=utf-8 : + +# compileExtensions.py (from acre2's make.py) + +############################################################################### + +# The MIT License (MIT) + +# Copyright (c) 2013-2014 Ryan Schultz + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +############################################################################### + +import sys +import os.path +import subprocess +import shutil +import time +import timeit + +if sys.platform == "win32": + import winreg + + +def compile_extensions(force_build): + originalDir = os.getcwd() + extensions_root = os.path.join(os.path.dirname(os.getcwd()), "extensions") + os.chdir(extensions_root) + print("\nCompiling extensions in {} with rebuild:{}\n".format(extensions_root, force_build)) + + if shutil.which("git") == None: + print("Failed to find Git!") + return + if shutil.which("cmake") == None: + print("Failed to find CMake!") + return + if shutil.which("msbuild") == None: + print("Failed to find MSBuild!") + return + + try: + buildType = "rebuild" if force_build else "build" + # 32-bit + vcproj32 = os.path.join(extensions_root, "vcproj32") + if not os.path.exists(vcproj32): + os.mkdir(vcproj32) + os.chdir(vcproj32) + subprocess.call(["cmake", "..", "-A", "Win32"]) # note: cmake will update ace_version stuff + subprocess.call(["msbuild", "ACE.sln", "/m", "/t:{}".format(buildType), "/p:Configuration=Release"]) + + # 64-bit + vcproj64 = os.path.join(extensions_root, "vcproj64") + if not os.path.exists(vcproj64): + os.mkdir(vcproj64) + os.chdir(vcproj64) + subprocess.call(["cmake", "..", "-A", "x64"]) + subprocess.call(["msbuild", "ACE.sln", "/m", "/t:{}".format(buildType), "/p:Configuration=Release"]) + except Exception as e: + print("Error: COMPILING EXTENSIONS - {}".format(e)) + raise + finally: + os.chdir(originalDir) + + +def main(argv): + if "force" in argv: + argv.remove("force") + force_build = True + else: + force_build = False + + compile_extensions(force_build) + + +if __name__ == "__main__": + start_time = timeit.default_timer() + main(sys.argv) + print("\nTotal Program time elapsed: {0} sec".format(timeit.default_timer() - start_time)) + input("Press Enter to continue...") diff --git a/tools/make.py b/tools/make.py index ca37369638..27c10529d7 100644 --- a/tools/make.py +++ b/tools/make.py @@ -592,7 +592,9 @@ def get_project_version(version_increments=[]): def replace_file(filePath, oldSubstring, newSubstring): - fh, absPath = mkstemp() + global work_drive + fh, absPath = mkstemp(None, None, work_drive + "temp") + os.close(fh) with open(absPath, "w", encoding="utf-8") as newFile: with open(filePath, encoding="utf-8") as oldFile: for line in oldFile: diff --git a/tools/sqfvmChecker.py b/tools/sqfvmChecker.py new file mode 100644 index 0000000000..98216563f0 --- /dev/null +++ b/tools/sqfvmChecker.py @@ -0,0 +1,89 @@ +import os +import sys +import subprocess +import concurrent.futures + +addon_base_path = os.path.dirname(os.getcwd()) + +files_to_ignore_lower = [ + x.lower() for x in ["initSettings.sqf", "initKeybinds.sqf", "XEH_PREP.sqf"] +] +sqfvm_exe = os.path.join(addon_base_path, "sqfvm.exe") +virtual_paths = [ + # would need to add more even more to /include to use it + "P:/a3|/a3", # "{}|/a3".format(os.path.join(addon_base_path, "include", "a3")), + "P:/a3|/A3", + "P:/x/cba|/x/cba", + "{}|/z/ace".format(addon_base_path), +] + + +def get_files_to_process(basePath): + arma_files = [] + for root, _dirs, files in os.walk(os.path.join(addon_base_path, "addons")): + for file in files: + if file.endswith(".sqf") or file == "config.cpp": + if file.lower() in files_to_ignore_lower: + continue + filePath = os.path.join(root, file) + arma_files.append(filePath) + return arma_files + + +def process_file(filePath, skipA3Warnings=True): + with open(filePath, "r", encoding="utf-8", errors="ignore") as file: + content = file.read() + if content.startswith("//pragma SKIP_COMPILE"): + return False + cmd = [sqfvm_exe, "--input", filePath, "--parse-only", "--automated"] + for v in virtual_paths: + cmd.append("-v") + cmd.append(v) + # cmd.append("-V") + proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, universal_newlines=True) + try: + ret = proc.wait(7) # max wait - seconds + except Exception as _e: + print("sqfvm timed out: {}".format(filePath)) + return True + # print("{} = {}".format(filePath, ret)) + + fileHasError = False + keepReadingLines = True + while keepReadingLines: + line = proc.stdout.readline() + if not line: + keepReadingLines = False + else: + line = line.rstrip() + if line.startswith("[ERR]"): + fileHasError = True + if not ( + skipA3Warnings + and line.startswith("[WRN]") + and ("a3/" in line) + and (("Unexpected IFDEF" in line) or ("defined twice" in line)) + ): + print(" {}".format(line)) + return fileHasError + + +def main(): + if not os.path.isfile(sqfvm_exe): + print("Error: sqfvm.exe not found in base folder [{}]".format(sqfvm_exe)) + return 1 + + error_count = 0 + arma_files = get_files_to_process(addon_base_path) + print("Checking {} files".format(len(arma_files))) + with concurrent.futures.ThreadPoolExecutor(max_workers=12) as executor: + for fileError in executor.map(process_file, arma_files): + if fileError: + error_count += 1 + + print("Errors: {}".format(error_count)) + return error_count + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/tools/updateIncludes.py b/tools/updateIncludes.py new file mode 100644 index 0000000000..721b6b363d --- /dev/null +++ b/tools/updateIncludes.py @@ -0,0 +1,21 @@ +# PabstMirror - Overwrites all files in /include with updated version from a p-drive + +import os +import shutil + +include_base_path = os.path.join(os.path.dirname(os.getcwd()), "include") +p_drive_path = "P:\\" + +if not os.path.exists(p_drive_path): + raise Exception("No P-drive") + +for root, _dirs, files in os.walk(include_base_path): + relative_path = os.path.relpath(root, include_base_path) + for file in files: + if file == "$PBOPREFIX$": + continue + file_r_path = os.path.join(include_base_path, relative_path, file) + file_v_path = os.path.join(p_drive_path, relative_path, file) + if not os.path.isfile(file_v_path): + raise Exception("Missing p-drive file {}".format(file_v_path)) + shutil.copyfile(file_v_path, file_r_path)