diff --git a/.travis.yml b/.travis.yml
index 1d2a49e2e6..3828300d7f 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -12,6 +12,7 @@ before_script:
fi
script:
- python3 tools/sqf_validator.py
+- python3 tools/config_style_checker.py
- if [ -n "${GH_TOKEN}" ] && [ "${TRAVIS_BRANCH}" == "master" ] && [ "${TRAVIS_PULL_REQUEST}" == "false" ]; then
python3 tools/deploy.py;
fi
diff --git a/addons/advanced_ballistics/functions/fnc_handleFired.sqf b/addons/advanced_ballistics/functions/fnc_handleFired.sqf
index 9646f065d4..7844e8a53a 100644
--- a/addons/advanced_ballistics/functions/fnc_handleFired.sqf
+++ b/addons/advanced_ballistics/functions/fnc_handleFired.sqf
@@ -88,7 +88,7 @@ if (GVAR(ammoTemperatureEnabled) || GVAR(barrelLengthInfluenceEnabled)) then {
_bulletTraceVisible = false;
if (GVAR(bulletTraceEnabled) && cameraView == "GUNNER") then {
- if (currentWeapon ACE_player in ["ACE_Vector", "Binocular", "Rangefinder", "Laserdesignator"]) then {
+ if (currentWeapon ACE_player == binocular ACE_player) then {
_bulletTraceVisible = true;
} else {
if (currentWeapon ACE_player == primaryWeapon ACE_player && count primaryWeaponItems ACE_player > 2) then {
diff --git a/addons/cargo/CfgEventHandlers.hpp b/addons/cargo/CfgEventHandlers.hpp
index 391c3a662d..ff4a88693e 100644
--- a/addons/cargo/CfgEventHandlers.hpp
+++ b/addons/cargo/CfgEventHandlers.hpp
@@ -27,27 +27,7 @@ class Extended_Killed_EventHandlers {
//Need initPost or we have problems with setVariable with 'ACE_Cargo'
class Extended_InitPost_EventHandlers {
- class StaticWeapon {
- class ADDON {
- init = QUOTE(_this call DFUNC(initObject));
- };
- };
- class ReammoBox_F {
- class ADDON {
- init = QUOTE(_this call DFUNC(initObject));
- };
- };
- class Cargo_base_F {
- class ADDON {
- init = QUOTE(_this call DFUNC(initObject); _this call DFUNC(initVehicle));
- };
- };
- class CargoNet_01_box_F {
- class ADDON {
- init = QUOTE(_this call DFUNC(initObject); _this call DFUNC(initVehicle));
- };
- };
- class Land_CargoBox_V1_F {
+ class ThingX {
class ADDON {
init = QUOTE(_this call DFUNC(initObject); _this call DFUNC(initVehicle));
};
@@ -62,32 +42,12 @@ class Extended_InitPost_EventHandlers {
init = QUOTE(_this call DFUNC(initObject); _this call DFUNC(initVehicle));
};
};
- class MetalCase_01_base_F {
- class ADDON {
- init = QUOTE(_this call DFUNC(initObject); _this call DFUNC(initVehicle));
- };
- };
- class RoadCone_F {
- class ADDON {
- init = QUOTE(_this call DFUNC(initObject); _this call DFUNC(initVehicle));
- };
- };
- class Car {
+ class LandVehicle {
class ADDON {
init = QUOTE(_this call DFUNC(initVehicle));
};
};
- class Tank {
- class ADDON {
- init = QUOTE(_this call DFUNC(initVehicle));
- };
- };
- class Helicopter {
- class ADDON {
- init = QUOTE(_this call DFUNC(initVehicle));
- };
- };
- class Plane {
+ class Air {
class ADDON {
init = QUOTE(_this call DFUNC(initVehicle));
};
@@ -97,16 +57,6 @@ class Extended_InitPost_EventHandlers {
init = QUOTE(_this call DFUNC(initVehicle));
};
};
- class ACE_RepairItem_Base {
- class ADDON {
- init = QUOTE(_this call DFUNC(initObject));
- };
- };
- class ACE_bodyBagObject {
- class ADDON {
- init = QUOTE(_this call DFUNC(initObject));
- };
- };
class ACE_ConcertinaWireCoil {
class ADDON {
init = QUOTE(_this call DFUNC(initObject));
diff --git a/addons/cargo/CfgVehicles.hpp b/addons/cargo/CfgVehicles.hpp
index dfeab3b017..3b2239019d 100644
--- a/addons/cargo/CfgVehicles.hpp
+++ b/addons/cargo/CfgVehicles.hpp
@@ -304,6 +304,25 @@ class CfgVehicles {
GVAR(canLoad) = 1;
};
+ // Taru pods
+ class Pod_Heli_Transport_04_base_F;
+ class Land_Pod_Heli_Transport_04_ammo_F: Pod_Heli_Transport_04_base_F {
+ GVAR(space) = 8;
+ GVAR(hasCargo) = 1;
+ };
+ class Land_Pod_Heli_Transport_04_box_F: Pod_Heli_Transport_04_base_F {
+ GVAR(space) = 20;
+ GVAR(hasCargo) = 1;
+ };
+ class Land_Pod_Heli_Transport_04_medevac_F: Pod_Heli_Transport_04_base_F {
+ GVAR(space) = 8;
+ GVAR(hasCargo) = 1;
+ };
+ class Land_Pod_Heli_Transport_04_repair_F: Pod_Heli_Transport_04_base_F {
+ GVAR(space) = 12;
+ GVAR(hasCargo) = 1;
+ };
+
class StaticMortar;
class Mortar_01_base_F: StaticMortar {
GVAR(size) = 2; // 1 = small, 2 = large
diff --git a/addons/cargo/functions/fnc_initVehicle.sqf b/addons/cargo/functions/fnc_initVehicle.sqf
index c0b312146b..7e19b0acd0 100644
--- a/addons/cargo/functions/fnc_initVehicle.sqf
+++ b/addons/cargo/functions/fnc_initVehicle.sqf
@@ -20,6 +20,8 @@ TRACE_1("params", _vehicle);
private _type = typeOf _vehicle;
+if (getNumber (configFile >> "CfgVehicles" >> _type >> QGVAR(hasCargo)) != 1) exitWith {};
+
if (isServer) then {
{
if (isClass _x) then {
@@ -38,7 +40,6 @@ if (_type in GVAR(initializedVehicleClasses)) exitWith {};
GVAR(initializedVehicleClasses) pushBack _type;
if (!hasInterface) exitWith {};
-if (getNumber (configFile >> "CfgVehicles" >> _type >> QGVAR(hasCargo)) != 1) exitWith {};
TRACE_1("Adding unload cargo action to class", _type);
diff --git a/addons/cargo/stringtable.xml b/addons/cargo/stringtable.xml
index 57daacd207..e3cb368362 100644
--- a/addons/cargo/stringtable.xml
+++ b/addons/cargo/stringtable.xml
@@ -175,6 +175,7 @@
Rendi oggetto caricabile
Hacer objeto cargable
Rendre l'objet chargeable
+ Vytvořit objekt nakladatelným
Sets the synced object as loadable by the cargo system.
@@ -183,6 +184,7 @@
Imposta l'oggetto sincronizzato come caricabile dal sistema cargo
Sincronizar un objecto para hacerlo cargable.
Rend l'objet synchronisé comme chargeable par le système de cargaison.
+ Nastaví synchronizované objekty nakladatelnými za pomocí Nákladního systému.
Object's Size
@@ -191,6 +193,7 @@
Dimensioni dell'oggetto
Tamaño del objeto
Taille de l'objet
+ Velikost objektu
-
+
\ No newline at end of file
diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf
index ae1014ddc8..22257e3cb5 100644
--- a/addons/common/XEH_postInit.sqf
+++ b/addons/common/XEH_postInit.sqf
@@ -133,6 +133,7 @@ if (isServer) then {
["fixFloating", FUNC(fixFloating)] call FUNC(addEventhandler);
["fixPosition", FUNC(fixPosition)] call FUNC(addEventhandler);
+["loadPersonEvent", FUNC(loadPersonLocal)] call FUNC(addEventhandler);
["unloadPersonEvent", FUNC(unloadPersonLocal)] call FUNC(addEventhandler);
["lockVehicle", {
@@ -146,6 +147,7 @@ if (isServer) then {
["setDir", {(_this select 0) setDir (_this select 1)}] call FUNC(addEventhandler);
["setFuel", {(_this select 0) setFuel (_this select 1)}] call FUNC(addEventhandler);
+["engineOn", {(_this select 0) engineOn (_this select 1)}] call FUNC(addEventhandler);
["setSpeaker", {(_this select 0) setSpeaker (_this select 1)}] call FUNC(addEventhandler);
["selectLeader", {(_this select 0) selectLeader (_this select 1)}] call FUNC(addEventHandler);
["setVelocity", {(_this select 0) setVelocity (_this select 1)}] call FUNC(addEventHandler);
diff --git a/addons/common/functions/fnc__handleRequestSyncedEvent.sqf b/addons/common/functions/fnc__handleRequestSyncedEvent.sqf
index 605af2fa85..9d6c062ac2 100644
--- a/addons/common/functions/fnc__handleRequestSyncedEvent.sqf
+++ b/addons/common/functions/fnc__handleRequestSyncedEvent.sqf
@@ -23,7 +23,7 @@ if (isServer) then {
params ["_eventName", "_client"];
if (!HASH_HASKEY(GVAR(syncedEvents),_eventName)) exitWith {
- ACE_LOGERROR("Request for synced event - key not found.");
+ ACE_LOGERROR_1("Request for synced event - key [%1] not found.", _eventName);
false
};
diff --git a/addons/common/functions/fnc__handleSyncedEvent.sqf b/addons/common/functions/fnc__handleSyncedEvent.sqf
index f8fe21d760..db8151dbd7 100644
--- a/addons/common/functions/fnc__handleSyncedEvent.sqf
+++ b/addons/common/functions/fnc__handleSyncedEvent.sqf
@@ -17,7 +17,7 @@
params ["_name", "_args", "_ttl"];
if (!HASH_HASKEY(GVAR(syncedEvents),_name)) exitWith {
- ACE_LOGERROR("Synced event key not found.");
+ ACE_LOGERROR_1("Synced event key [%1] not found (_handleSyncedEvent).", _name);
false
};
diff --git a/addons/common/functions/fnc_addSyncedEventHandler.sqf b/addons/common/functions/fnc_addSyncedEventHandler.sqf
index 0964e419bc..126bb6a957 100644
--- a/addons/common/functions/fnc_addSyncedEventHandler.sqf
+++ b/addons/common/functions/fnc_addSyncedEventHandler.sqf
@@ -10,6 +10,9 @@
* Return Value:
* Boolean of success
*
+ * Example:
+ * ["myEvent", {_this call x}, 0] call ace_common_fnc_addSyncedEventHandler
+ *
* Public: Yes
*/
#include "script_component.hpp"
@@ -17,7 +20,7 @@
params ["_name", "_handler", ["_ttl", 0]];
if (HASH_HASKEY(GVAR(syncedEvents),_name)) exitWith {
- ACE_LOGERROR("Duplicate synced event creation.");
+ ACE_LOGERROR_1("Duplicate synced event [%1] creation.",_name);
false
};
diff --git a/addons/common/functions/fnc_findUnloadPosition.sqf b/addons/common/functions/fnc_findUnloadPosition.sqf
index f7155fd87b..c3b0dc3f34 100644
--- a/addons/common/functions/fnc_findUnloadPosition.sqf
+++ b/addons/common/functions/fnc_findUnloadPosition.sqf
@@ -92,6 +92,15 @@ while {_rangeToCheck < _maxDistance} do {
private _point1ASL = (AGLtoASL _roundAGL) vectorAdd [_radiusOfItem * cos _angle, _radiusOfItem * sin _angle, 0.1];
private _point2ASL = (AGLtoASL _roundAGL) vectorAdd [-_radiusOfItem * cos _angle, -_radiusOfItem * sin _angle, (_radiusOfItem + 0.5)];
private _testIntersections = lineIntersectsSurfaces [_point1ASL, _point2ASL];
+ if (((count _testIntersections) == 1) && {isNull ((_testIntersections select 0) select 2)}) then {
+ private _hitGroundASL = (_testIntersections select 0) select 0;
+ private _hitHeightOffset = ((AGLtoASL _roundAGL) select 2) - (_hitGroundASL select 2);
+ private _hit2dOffset = _roundAGL distance2D _hitGroundASL;
+ private _slope = _hitHeightOffset atan2 _hit2dOffset;
+ if (_slope < 25) then { //Ignore ground hit if slope is reasonable
+ _testIntersections = [];
+ };
+ };
if (!(_testIntersections isEqualTo [])) exitWith {
TRACE_2("collision low/high",_roundAGL,_testIntersections);
_roundPointIsValid = false;
diff --git a/addons/common/functions/fnc_loadPerson.sqf b/addons/common/functions/fnc_loadPerson.sqf
index 3071ffbd47..6c728134d1 100644
--- a/addons/common/functions/fnc_loadPerson.sqf
+++ b/addons/common/functions/fnc_loadPerson.sqf
@@ -21,33 +21,18 @@ private _vehicle = objNull;
if (!([_caller, _unit, ["isNotDragging", "isNotCarrying"]] call FUNC(canInteractWith)) || {_caller == _unit}) exitWith {_vehicle};
-private _loadcar = nearestObject [_unit, "Car"];
+private _nearVehicles = nearestObjects [_unit, ["Car", "Air", "Tank", "Ship_F"], 10];
-if (_unit distance _loadcar <= 10) then {
- _vehicle = _loadcar;
-} else {
- private _loadair = nearestObject [_unit, "Air"];
-
- if (_unit distance _loadair <= 10) then {
- _vehicle = _loadair;
- } else {
- private _loadtank = nearestObject [_unit, "Tank"];
-
- if (_unit distance _loadtank <= 10) then {
- _vehicle = _loadtank;
- } else {
- private _loadboat = nearestObject [_unit, "Ship_F"];
-
- if (_unit distance _loadboat <= 10) then {
- _vehicle = _loadboat;
- };
- };
+{
+ TRACE_1("",_x);
+ if ((_x emptyPositions "cargo" > 0) || {_x emptyPositions "gunner" > 0}) exitWith {
+ _vehicle = _x;
};
-};
+} forEach _nearVehicles;
if (!isNull _vehicle) then {
[_unit, true, GROUP_SWITCH_ID, side group _caller] call FUNC(switchToGroupSide);
- [[_unit, _vehicle, _caller], QFUNC(loadPersonLocal), _unit, false] call FUNC(execRemoteFnc);
+ ["loadPersonEvent", _unit, [_unit, _vehicle, _caller]] call FUNC(objectEvent);
};
_vehicle
diff --git a/addons/common/functions/fnc_removeSyncedEventHandler.sqf b/addons/common/functions/fnc_removeSyncedEventHandler.sqf
index 126bf0b70f..23803acdd1 100644
--- a/addons/common/functions/fnc_removeSyncedEventHandler.sqf
+++ b/addons/common/functions/fnc_removeSyncedEventHandler.sqf
@@ -15,7 +15,7 @@
params ["_name"];
if (!HASH_HASKEY(GVAR(syncedEvents),_name)) exitWith {
- ACE_LOGERROR("Synced event key not found.");
+ ACE_LOGERROR_1("Synced event key [%1] not found (removeSyncedEventHandler).", _name);
false
};
diff --git a/addons/common/functions/fnc_syncedEvent.sqf b/addons/common/functions/fnc_syncedEvent.sqf
index 4ed8107330..c752d1eba2 100644
--- a/addons/common/functions/fnc_syncedEvent.sqf
+++ b/addons/common/functions/fnc_syncedEvent.sqf
@@ -17,7 +17,7 @@
params ["_name", "_args", ["_ttl", 0]];
if (!HASH_HASKEY(GVAR(syncedEvents),_name)) exitWith {
- ACE_LOGERROR("Synced event key not found.");
+ ACE_LOGERROR_1("Synced event key [%1] not found (syncedEvent).", _name);
false
};
diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml
index 32a979653f..820712189f 100644
--- a/addons/common/stringtable.xml
+++ b/addons/common/stringtable.xml
@@ -802,6 +802,7 @@
Non c'è spazio per scaricare
No hay espacio para descargar.
Pas de place pour décharger
+ Nedostatek místa k vyložení
\ No newline at end of file
diff --git a/addons/concertina_wire/CfgVehicles.hpp b/addons/concertina_wire/CfgVehicles.hpp
index dd18c07209..88975ea7e9 100644
--- a/addons/concertina_wire/CfgVehicles.hpp
+++ b/addons/concertina_wire/CfgVehicles.hpp
@@ -86,7 +86,7 @@ class CfgVehicles {
selection = "";
displayName = "$STR_ACE_UNROLLWIRE";
distance = 5;
- condition = "true";
+ condition = "alive _target";
statement = QUOTE([ARR_2(_target,_player)] call FUNC(dismount));
showDisabled = 0;
exceptions[] = {};
diff --git a/addons/concertina_wire/functions/fnc_handleKilled.sqf b/addons/concertina_wire/functions/fnc_handleKilled.sqf
index ac59798d10..1af3f93151 100644
--- a/addons/concertina_wire/functions/fnc_handleKilled.sqf
+++ b/addons/concertina_wire/functions/fnc_handleKilled.sqf
@@ -14,13 +14,17 @@
*/
#include "script_component.hpp"
params ["_wire", "_killer"];
+TRACE_2("params",_wire,_killer);
private ["_distance", "_vehicle"];
if (isNull _killer) then {
_killer = _wire getVariable ["ace_concertina_wire_lastDamager", objNull];
if (isNull _killer) then {
- _killer = nearestObject [_wire, "car"];
+ private _midPoint = ((_wire selectionPosition "start") vectorAdd (_wire selectionPosition "deploy")) vectorMultiply 0.5;
+ {
+ if ((vectorMagnitude velocity _x) > 0) exitWith {_killer = _x};
+ } forEach (nearestObjects [(_wire modelToWorld _midPoint), ["Car"], 8]);
};
};
if (isNull _killer || {_killer == _wire} || {_killer == gunner (vehicle _killer)}) exitWith {};
diff --git a/addons/dagr/Dialog.hpp b/addons/dagr/Dialog.hpp
index 17c065f830..8511829e5e 100644
--- a/addons/dagr/Dialog.hpp
+++ b/addons/dagr/Dialog.hpp
@@ -76,349 +76,349 @@
class RscText;
class DAGR_Button {
- idc = -1;
- type = CT_BUTTON;
- style = ST_LEFT;
- font = "RobotoCondensed";
- sizeEx = 0.02;
- colorText[] = { 0, 1, 0, 1 };
- colorFocused[] = { 0, 0, 0, 0 }; // border color for focused state
- colorDisabled[] = { 0, 0, 0, 0 }; // text color for disabled state
- colorBackground[] = { 0, 0, 0, 0 };
- colorBackgroundDisabled[] = { 0, 0, 0, 0 }; // background color for disabled state
- colorBackgroundActive[] = { 0, 0, 0, 0 }; // background color for active state
- offsetX = 0;
- offsetY = 0;
- offsetPressedX = 0;
- offsetPressedY = 0;
- colorShadow[] = { 0, 0, 0, 0 };
- colorBorder[] = { 0, 0, 0, 0 };
- borderSize = 0;
- soundEnter[] = { "", 0, 1 }; // no sound
- soundPush[] = { "", 0, 1 };
- soundClick[] = { "", 0, 1 }; // no sound
- soundEscape[] = { "", 0, 1 }; // no sound
- x = 0.5;
- y = 0.5;
- w = 0.07;
- h = 0.05;
- text = "";
- action = "";
+ idc = -1;
+ type = CT_BUTTON;
+ style = ST_LEFT;
+ font = "RobotoCondensed";
+ sizeEx = 0.02;
+ colorText[] = { 0, 1, 0, 1 };
+ colorFocused[] = { 0, 0, 0, 0 }; // border color for focused state
+ colorDisabled[] = { 0, 0, 0, 0 }; // text color for disabled state
+ colorBackground[] = { 0, 0, 0, 0 };
+ colorBackgroundDisabled[] = { 0, 0, 0, 0 }; // background color for disabled state
+ colorBackgroundActive[] = { 0, 0, 0, 0 }; // background color for active state
+ offsetX = 0;
+ offsetY = 0;
+ offsetPressedX = 0;
+ offsetPressedY = 0;
+ colorShadow[] = { 0, 0, 0, 0 };
+ colorBorder[] = { 0, 0, 0, 0 };
+ borderSize = 0;
+ soundEnter[] = { "", 0, 1 }; // no sound
+ soundPush[] = { "", 0, 1 };
+ soundClick[] = { "", 0, 1 }; // no sound
+ soundEscape[] = { "", 0, 1 }; // no sound
+ x = 0.5;
+ y = 0.5;
+ w = 0.07;
+ h = 0.05;
+ text = "";
+ action = "";
};
class DAGR_Menu_Pic {
- type = 0;
- idc = -1;
- style = 48;
- x = 0;
- y = 0;
- w = 0.7;
- h = 1.4;
- text = "";
- colorBackground[] = {};
- colorText[] = {};
- font = "RobotoCondensed";
- sizeEx = 0.04;
- waitForLoad = 0;
+ type = 0;
+ idc = -1;
+ style = 48;
+ x = 0;
+ y = 0;
+ w = 0.7;
+ h = 1.4;
+ text = "";
+ colorBackground[] = {};
+ colorText[] = {};
+ font = "RobotoCondensed";
+ sizeEx = 0.04;
+ waitForLoad = 0;
};
class DAGR_Menu_Text {
- type = 0;
- idc = -1;
- style = 0x00;
- x = 0.5;
- y = 0.5;
- w = 0.15;
- h = 0.15;
- colorBackground[] = { 0, 0, 0, 0 };
- colorText[] = { 0.239, 0.216, 0.153, 1 };
- font = "RobotoCondensed";
- sizeEx = 0.03;
- waitForLoad = 0;
- text = "";
+ type = 0;
+ idc = -1;
+ style = 0x00;
+ x = 0.5;
+ y = 0.5;
+ w = 0.15;
+ h = 0.15;
+ colorBackground[] = { 0, 0, 0, 0 };
+ colorText[] = { 0.239, 0.216, 0.153, 1 };
+ font = "RobotoCondensed";
+ sizeEx = 0.03;
+ waitForLoad = 0;
+ text = "";
};
class DAGR_Menu {
- idd = 266860;
- movingEnable = false;
- duration = 100000;
- fadein = 0;
- fadeout = 0;
- name = "Dagr_Menu";
- onLoad = "uiNamespace setVariable ['DAGR_Menu', _this select 0]";
+ idd = 266860;
+ movingEnable = false;
+ duration = 100000;
+ fadein = 0;
+ fadeout = 0;
+ name = "Dagr_Menu";
+ onLoad = "uiNamespace setVariable ['DAGR_Menu', _this select 0]";
onUnload = QUOTE(GVAR(PWR) = true); // Simulate pressing the power button
- controls[] = {"DAGR_MENU_UI", "DAGR_PWR_Button", "DAGR_UP_Button", "DAGR_DOWN_Button", "DAGR_LEFT_Button", "DAGR_RIGHT_Button", "DAGR_NEXT_Button",
- "DAGR_SEL_Button", "DAGR_MENU_Button", "DAGR_F1_Button", "DAGR_F2_Button", "DAGR_F3_Button", "DAGR_F1_Text", "DAGR_F2_Text", "DAGR_F3_Text", "DAGR_MENU_OPTION0",
- "DAGR_MENU_OPTION1", "DAGR_MENU_OPTION2", "DAGR_MENU_OPTION3", "DAGR_MENU_OPTION4", "DAGR_MENU_SELECTION0", "DAGR_MENU_SELECTION1", "DAGR_MENU_SELECTION2",
- "DAGR_MENU_SELECTION3", "DAGR_MENU_SELECTION4", "DAGR_MENU_Main_Text", "DAGR_MENU_PSELECTION1", "DAGR_MENU_PSELECTION2", "DAGR_MENU_PSELECTION3",
- "DAGR_MENU_PSELECTION4", "DAGR_MENU_PSELECTION5", "DAGR_MENU_PSELECTION6","DAGR_MENU_PSELECTION7", "DAGR_MENU_PSELECTION8"};
+ controls[] = {"DAGR_MENU_UI", "DAGR_PWR_Button", "DAGR_UP_Button", "DAGR_DOWN_Button", "DAGR_LEFT_Button", "DAGR_RIGHT_Button", "DAGR_NEXT_Button",
+ "DAGR_SEL_Button", "DAGR_MENU_Button", "DAGR_F1_Button", "DAGR_F2_Button", "DAGR_F3_Button", "DAGR_F1_Text", "DAGR_F2_Text", "DAGR_F3_Text", "DAGR_MENU_OPTION0",
+ "DAGR_MENU_OPTION1", "DAGR_MENU_OPTION2", "DAGR_MENU_OPTION3", "DAGR_MENU_OPTION4", "DAGR_MENU_SELECTION0", "DAGR_MENU_SELECTION1", "DAGR_MENU_SELECTION2",
+ "DAGR_MENU_SELECTION3", "DAGR_MENU_SELECTION4", "DAGR_MENU_Main_Text", "DAGR_MENU_PSELECTION1", "DAGR_MENU_PSELECTION2", "DAGR_MENU_PSELECTION3",
+ "DAGR_MENU_PSELECTION4", "DAGR_MENU_PSELECTION5", "DAGR_MENU_PSELECTION6","DAGR_MENU_PSELECTION7", "DAGR_MENU_PSELECTION8"};
- class DAGR_MENU_UI : DAGR_Menu_Pic {
- idc = 266861;
- x = 0.175;
- y = -0.173;
- text = QUOTE(PATHTOF(UI\dagr_menu.paa));
- sizeEx = 0.1;
- };
+ class DAGR_MENU_UI : DAGR_Menu_Pic {
+ idc = 266861;
+ x = 0.175;
+ y = -0.173;
+ text = QUOTE(PATHTOF(UI\dagr_menu.paa));
+ sizeEx = 0.1;
+ };
- class DAGR_PWR_Button : DAGR_Button {
- idc = 266863;
- action = QUOTE(GVAR(PWR) = true);
- x = 0.40;
- y = 0.65;
- };
+ class DAGR_PWR_Button : DAGR_Button {
+ idc = 266863;
+ action = QUOTE(GVAR(PWR) = true);
+ x = 0.40;
+ y = 0.65;
+ };
- class DAGR_UP_Button : DAGR_Button {
- idc = 266864;
- action = QUOTE(GVAR(UP) = true);
- x = 0.50;
- y = 0.675;
- };
+ class DAGR_UP_Button : DAGR_Button {
+ idc = 266864;
+ action = QUOTE(GVAR(UP) = true);
+ x = 0.50;
+ y = 0.675;
+ };
- class DAGR_DOWN_Button : DAGR_Button {
- idc = 266865;
- action = QUOTE(GVAR(DOWN) = true);
- x = 0.50;
- y = 0.81;
- };
+ class DAGR_DOWN_Button : DAGR_Button {
+ idc = 266865;
+ action = QUOTE(GVAR(DOWN) = true);
+ x = 0.50;
+ y = 0.81;
+ };
- class DAGR_LEFT_Button : DAGR_Button {
- idc = 266866;
- action = QUOTE(GVAR(LEFT) = true);
- x = 0.40;
- y = 0.735;
- w = 0.05;
- h = 0.07;
- };
+ class DAGR_LEFT_Button : DAGR_Button {
+ idc = 266866;
+ action = QUOTE(GVAR(LEFT) = true);
+ x = 0.40;
+ y = 0.735;
+ w = 0.05;
+ h = 0.07;
+ };
- class DAGR_RIGHT_Button : DAGR_Button {
- idc = 266867;
- action = QUOTE(GVAR(RIGHT) = true);
- x = 0.62;
- y = 0.735;
- w = 0.05;
- h = 0.07;
- };
+ class DAGR_RIGHT_Button : DAGR_Button {
+ idc = 266867;
+ action = QUOTE(GVAR(RIGHT) = true);
+ x = 0.62;
+ y = 0.735;
+ w = 0.05;
+ h = 0.07;
+ };
- class DAGR_NEXT_Button : DAGR_Button {
- idc = 266868;
- action = QUOTE(DAGR_NEXT = true);
- x = 0.60;
- y = 0.65;
- };
+ class DAGR_NEXT_Button : DAGR_Button {
+ idc = 266868;
+ action = QUOTE(DAGR_NEXT = true);
+ x = 0.60;
+ y = 0.65;
+ };
- class DAGR_SEL_Button : DAGR_Button {
- idc = 266869;
- action = QUOTE(GVAR(SEL) = true);
- x = 0.54;
- y = 0.735;
- w = 0.06;
- h = 0.06;
- };
+ class DAGR_SEL_Button : DAGR_Button {
+ idc = 266869;
+ action = QUOTE(GVAR(SEL) = true);
+ x = 0.54;
+ y = 0.735;
+ w = 0.06;
+ h = 0.06;
+ };
- class DAGR_MENU_Button : DAGR_Button {
- idc = 266870;
- action = QUOTE(GVAR(MENU_B) = true);
- x = 0.46;
- y = 0.735;
- w = 0.06;
- h = 0.06;
- };
+ class DAGR_MENU_Button : DAGR_Button {
+ idc = 266870;
+ action = QUOTE(GVAR(MENU_B) = true);
+ x = 0.46;
+ y = 0.735;
+ w = 0.06;
+ h = 0.06;
+ };
- class DAGR_F1_Button : DAGR_Button {
- idc = 266871;
- action = QUOTE(GVAR(F1) = true);
- x = 0.40;
- y = 0.575;
- };
+ class DAGR_F1_Button : DAGR_Button {
+ idc = 266871;
+ action = QUOTE(GVAR(F1) = true);
+ x = 0.40;
+ y = 0.575;
+ };
- class DAGR_F2_Button : DAGR_Button {
- idc = 266872;
- action = QUOTE(GVAR(F2) = true);
- x = 0.495;
- y = 0.575;
- };
+ class DAGR_F2_Button : DAGR_Button {
+ idc = 266872;
+ action = QUOTE(GVAR(F2) = true);
+ x = 0.495;
+ y = 0.575;
+ };
- class DAGR_F3_Button : DAGR_Button {
- idc = 266873;
- action = QUOTE(GVAR(F3) = true);
- x = 0.59;
- y = 0.575;
- };
+ class DAGR_F3_Button : DAGR_Button {
+ idc = 266873;
+ action = QUOTE(GVAR(F3) = true);
+ x = 0.59;
+ y = 0.575;
+ };
- class DAGR_F1_Text : DAGR_Menu_Text {
- idc = 266874;
- x = 0.388;
- y = 0.38;
- text = "";
- };
+ class DAGR_F1_Text : DAGR_Menu_Text {
+ idc = 266874;
+ x = 0.388;
+ y = 0.38;
+ text = "";
+ };
- class DAGR_F2_Text : DAGR_Menu_Text {
- idc = 266875;
- x = 0.506;
- y = 0.38;
- };
+ class DAGR_F2_Text : DAGR_Menu_Text {
+ idc = 266875;
+ x = 0.506;
+ y = 0.38;
+ };
- class DAGR_F3_Text : DAGR_Menu_Text {
- idc = 266876;
- x = 0.612;
- y = 0.38;
- };
+ class DAGR_F3_Text : DAGR_Menu_Text {
+ idc = 266876;
+ x = 0.612;
+ y = 0.38;
+ };
- class DAGR_MENU_OPTION0 : DAGR_Menu_Text {
- idc = 2668777;
- style = 0x02;
- sizeEx = 0.035;
- x = 0.43;
- y = 0.19;
- };
+ class DAGR_MENU_OPTION0 : DAGR_Menu_Text {
+ idc = 2668777;
+ style = 0x02;
+ sizeEx = 0.035;
+ x = 0.43;
+ y = 0.19;
+ };
- class DAGR_MENU_OPTION1 : DAGR_Menu_Text {
- idc = 2668778;
- style = 0x02;
- sizeEx = 0.035;
- x = 0.43;
- y = 0.225;
- };
+ class DAGR_MENU_OPTION1 : DAGR_Menu_Text {
+ idc = 2668778;
+ style = 0x02;
+ sizeEx = 0.035;
+ x = 0.43;
+ y = 0.225;
+ };
- class DAGR_MENU_OPTION2 : DAGR_Menu_Text {
- idc = 2668779;
- style = 0x02;
- sizeEx = 0.035;
- x = 0.43;
- y = 0.26;
- };
+ class DAGR_MENU_OPTION2 : DAGR_Menu_Text {
+ idc = 2668779;
+ style = 0x02;
+ sizeEx = 0.035;
+ x = 0.43;
+ y = 0.26;
+ };
- class DAGR_MENU_OPTION3 : DAGR_Menu_Text {
- idc = 2668780;
- style = 0x02;
- sizeEx = 0.035;
- x = 0.43;
- y = 0.295;
- };
+ class DAGR_MENU_OPTION3 : DAGR_Menu_Text {
+ idc = 2668780;
+ style = 0x02;
+ sizeEx = 0.035;
+ x = 0.43;
+ y = 0.295;
+ };
- class DAGR_MENU_OPTION4 : DAGR_Menu_Text {
- idc = 2668781;
- style = 0x02;
- sizeEx = 0.035;
- x = 0.43;
- y = 0.33;
- };
- class DAGR_MENU_SELECTION0 : DAGR_Menu_Pic {
- idc = 2668783;
- x = 0.42;
- y = 0.246;
- w = 0.17;
- h = 0.035;
- sizeEx = 0.05;
- };
+ class DAGR_MENU_OPTION4 : DAGR_Menu_Text {
+ idc = 2668781;
+ style = 0x02;
+ sizeEx = 0.035;
+ x = 0.43;
+ y = 0.33;
+ };
+ class DAGR_MENU_SELECTION0 : DAGR_Menu_Pic {
+ idc = 2668783;
+ x = 0.42;
+ y = 0.246;
+ w = 0.17;
+ h = 0.035;
+ sizeEx = 0.05;
+ };
- class DAGR_MENU_SELECTION1 : DAGR_Menu_Pic {
- idc = 2668784;
- x = 0.42;
- y = 0.281;
- w = 0.17;
- h = 0.035;
- sizeEx = 0.05;
- };
+ class DAGR_MENU_SELECTION1 : DAGR_Menu_Pic {
+ idc = 2668784;
+ x = 0.42;
+ y = 0.281;
+ w = 0.17;
+ h = 0.035;
+ sizeEx = 0.05;
+ };
- class DAGR_MENU_SELECTION2 : DAGR_Menu_Pic {
- idc = 2668785;
- x = 0.42;
- y = 0.316;
- w = 0.17;
- h = 0.035;
- sizeEx = 0.05;
- };
+ class DAGR_MENU_SELECTION2 : DAGR_Menu_Pic {
+ idc = 2668785;
+ x = 0.42;
+ y = 0.316;
+ w = 0.17;
+ h = 0.035;
+ sizeEx = 0.05;
+ };
- class DAGR_MENU_SELECTION3 : DAGR_Menu_Pic {
- idc = 2668786;
- x = 0.42;
- y = 0.351;
- w = 0.17;
- h = 0.035;
- sizeEx = 0.05;
- };
+ class DAGR_MENU_SELECTION3 : DAGR_Menu_Pic {
+ idc = 2668786;
+ x = 0.42;
+ y = 0.351;
+ w = 0.17;
+ h = 0.035;
+ sizeEx = 0.05;
+ };
- class DAGR_MENU_SELECTION4 : DAGR_Menu_Pic {
- idc = 2668787;
- x = 0.42;
- y = 0.386;
- w = 0.17;
- h = 0.035;
- sizeEx = 0.05;
- };
+ class DAGR_MENU_SELECTION4 : DAGR_Menu_Pic {
+ idc = 2668787;
+ x = 0.42;
+ y = 0.386;
+ w = 0.17;
+ h = 0.035;
+ sizeEx = 0.05;
+ };
- class DAGR_MENU_Main_Text : DAGR_Menu_Text {
- idc = 2668782;
- style = ST_CENTER;
- x = 0.38;
- y = 0.32;
- w = 0.25;
- h = 0.035;
- sizeEx = 0.04;
- };
+ class DAGR_MENU_Main_Text : DAGR_Menu_Text {
+ idc = 2668782;
+ style = ST_CENTER;
+ x = 0.38;
+ y = 0.32;
+ w = 0.25;
+ h = 0.035;
+ sizeEx = 0.04;
+ };
- class DAGR_MENU_PSELECTION1 : DAGR_Menu_Pic {
- idc = 2668788;
- x = 0.451;
- y = 0.352;
- w = 0.01;
- h = 0.003;
- };
+ class DAGR_MENU_PSELECTION1 : DAGR_Menu_Pic {
+ idc = 2668788;
+ x = 0.451;
+ y = 0.352;
+ w = 0.01;
+ h = 0.003;
+ };
- class DAGR_MENU_PSELECTION2 : DAGR_Menu_Pic {
- idc = 2668789;
- x = 0.465;
- y = 0.352;
- w = 0.01;
- h = 0.003;
- };
+ class DAGR_MENU_PSELECTION2 : DAGR_Menu_Pic {
+ idc = 2668789;
+ x = 0.465;
+ y = 0.352;
+ w = 0.01;
+ h = 0.003;
+ };
- class DAGR_MENU_PSELECTION3 : DAGR_Menu_Pic {
- idc = 2668790;
- x = 0.479;
- y = 0.352;
- w = 0.01;
- h = 0.003;
- };
+ class DAGR_MENU_PSELECTION3 : DAGR_Menu_Pic {
+ idc = 2668790;
+ x = 0.479;
+ y = 0.352;
+ w = 0.01;
+ h = 0.003;
+ };
- class DAGR_MENU_PSELECTION4 : DAGR_Menu_Pic {
- idc = 2668791;
- x = 0.493;
- y = 0.352;
- w = 0.01;
- h = 0.003;
- };
+ class DAGR_MENU_PSELECTION4 : DAGR_Menu_Pic {
+ idc = 2668791;
+ x = 0.493;
+ y = 0.352;
+ w = 0.01;
+ h = 0.003;
+ };
- class DAGR_MENU_PSELECTION5 : DAGR_Menu_Pic {
- idc = 2668792;
- x = 0.507;
- y = 0.352;
- w = 0.01;
- h = 0.003;
- };
+ class DAGR_MENU_PSELECTION5 : DAGR_Menu_Pic {
+ idc = 2668792;
+ x = 0.507;
+ y = 0.352;
+ w = 0.01;
+ h = 0.003;
+ };
- class DAGR_MENU_PSELECTION6 : DAGR_Menu_Pic {
- idc = 2668793;
- x = 0.521;
- y = 0.352;
- w = 0.01;
- h = 0.003;
- };
+ class DAGR_MENU_PSELECTION6 : DAGR_Menu_Pic {
+ idc = 2668793;
+ x = 0.521;
+ y = 0.352;
+ w = 0.01;
+ h = 0.003;
+ };
- class DAGR_MENU_PSELECTION7 : DAGR_Menu_Pic {
- idc = 2668794;
- x = 0.535;
- y = 0.352;
- w = 0.01;
- h = 0.003;
- };
+ class DAGR_MENU_PSELECTION7 : DAGR_Menu_Pic {
+ idc = 2668794;
+ x = 0.535;
+ y = 0.352;
+ w = 0.01;
+ h = 0.003;
+ };
- class DAGR_MENU_PSELECTION8 : DAGR_Menu_Pic {
- idc = 2668795;
- x = 0.549;
- y = 0.352;
- w = 0.01;
- h = 0.003;
- };
+ class DAGR_MENU_PSELECTION8 : DAGR_Menu_Pic {
+ idc = 2668795;
+ x = 0.549;
+ y = 0.352;
+ w = 0.01;
+ h = 0.003;
+ };
};
diff --git a/addons/dagr/RscTitles.hpp b/addons/dagr/RscTitles.hpp
index 9ab34ee86f..ab70517c9a 100644
--- a/addons/dagr/RscTitles.hpp
+++ b/addons/dagr/RscTitles.hpp
@@ -1,95 +1,95 @@
class RscTitles {
- class DAGR_Text {
- type = 0;
- idc = -1;
- style = 0x01;
- x = 0;
- y = 0;
- w = 0.15;
- h = 0.050;
- text = "";
- colorBackground[] = { 0, 0, 0, 0 };
- colorText[] = { 0.239, 0.216, 0.153, 1 };
- font = "RobotoCondensed";
- sizeEx = 0.04;
- waitForLoad = 0;
- };
- class DAGR_Pic {
- type = 0;
- idc = -1;
- style = 48;
- x = 0;
- y = 0;
- w = 0.50;
- h = 0.50;
- text = "";
- colorBackground[] = {};
- colorText[] = {};
- font = "RobotoCondensed";
- sizeEx = 0.02;
- waitForLoad = 0;
- };
+ class DAGR_Text {
+ type = 0;
+ idc = -1;
+ style = 0x01;
+ x = 0;
+ y = 0;
+ w = 0.15;
+ h = 0.050;
+ text = "";
+ colorBackground[] = { 0, 0, 0, 0 };
+ colorText[] = { 0.239, 0.216, 0.153, 1 };
+ font = "RobotoCondensed";
+ sizeEx = 0.04;
+ waitForLoad = 0;
+ };
+ class DAGR_Pic {
+ type = 0;
+ idc = -1;
+ style = 48;
+ x = 0;
+ y = 0;
+ w = 0.50;
+ h = 0.50;
+ text = "";
+ colorBackground[] = {};
+ colorText[] = {};
+ font = "RobotoCondensed";
+ sizeEx = 0.02;
+ waitForLoad = 0;
+ };
- class DAGR_Display {
- idd = 266850;
- movingEnable = false;
- duration = 100000;
- fadein = 0;
- fadeout = 0;
- name = "Dagr_Display";
- onLoad="uiNamespace setVariable ['DAGR_Display', _this select 0]";
- controls[] = {"DAGR_UI", "DAGR_Grid", "DAGR_Speed", "DAGR_Elevation", "DAGR_Heading", "DAGR_Time", "DAGR_WP", "DAGR_Bearing", "DAGR_DIST"};
+ class DAGR_Display {
+ idd = 266850;
+ movingEnable = false;
+ duration = 100000;
+ fadein = 0;
+ fadeout = 0;
+ name = "Dagr_Display";
+ onLoad="uiNamespace setVariable ['DAGR_Display', _this select 0]";
+ controls[] = {"DAGR_UI", "DAGR_Grid", "DAGR_Speed", "DAGR_Elevation", "DAGR_Heading", "DAGR_Time", "DAGR_WP", "DAGR_Bearing", "DAGR_DIST"};
- class DAGR_UI : DAGR_Pic {
- idc = 266856;
- x = "(SafeZoneW + SafeZoneX) - 0.45";
- y = "(SafeZoneH + SafeZoneY) - 0.47";
- };
+ class DAGR_UI : DAGR_Pic {
+ idc = 266856;
+ x = "(SafeZoneW + SafeZoneX) - 0.45";
+ y = "(SafeZoneH + SafeZoneY) - 0.47";
+ };
- class DAGR_Grid : DAGR_Text {
- idc = 266851;
- x = "(SafeZoneW + SafeZoneX) - 0.370";// 0.830
- y = "(SafeZoneH + SafeZoneY)- 0.250";// 0.845
- w = 0.25;
- h = 0.06;
- sizeEx = 0.07;
- };
- class DAGR_Speed : DAGR_Text {
- idc = 266852;
- x = "(SafeZoneW + SafeZoneX) - 0.388"; //0.812
- y = "(SafeZoneH + SafeZoneY) - 0.181"; //0.914
- };
- class DAGR_Elevation : DAGR_Text {
- idc = 266853;
- x = "(SafeZoneW + SafeZoneX) - 0.270"; //0.930
- y = "(SafeZoneH + SafeZoneY) - 0.181"; //0.914
- };
- class DAGR_Heading : DAGR_Text {
- idc = 266854;
- x = "(SafeZoneW + SafeZoneX) - 0.413"; //0.787
- y = "(SafeZoneH + SafeZoneY) - 0.1294"; //0.9656
- };
- class DAGR_Time : DAGR_Text {
- idc = 266855;
- x = "(SafeZoneW + SafeZoneX) - 0.275"; //0.925
- y = "(SafeZoneH + SafeZoneY) - 0.129"; //0.965
- };
+ class DAGR_Grid : DAGR_Text {
+ idc = 266851;
+ x = "(SafeZoneW + SafeZoneX) - 0.370";// 0.830
+ y = "(SafeZoneH + SafeZoneY)- 0.250";// 0.845
+ w = 0.25;
+ h = 0.06;
+ sizeEx = 0.07;
+ };
+ class DAGR_Speed : DAGR_Text {
+ idc = 266852;
+ x = "(SafeZoneW + SafeZoneX) - 0.388"; //0.812
+ y = "(SafeZoneH + SafeZoneY) - 0.181"; //0.914
+ };
+ class DAGR_Elevation : DAGR_Text {
+ idc = 266853;
+ x = "(SafeZoneW + SafeZoneX) - 0.270"; //0.930
+ y = "(SafeZoneH + SafeZoneY) - 0.181"; //0.914
+ };
+ class DAGR_Heading : DAGR_Text {
+ idc = 266854;
+ x = "(SafeZoneW + SafeZoneX) - 0.413"; //0.787
+ y = "(SafeZoneH + SafeZoneY) - 0.1294"; //0.9656
+ };
+ class DAGR_Time : DAGR_Text {
+ idc = 266855;
+ x = "(SafeZoneW + SafeZoneX) - 0.275"; //0.925
+ y = "(SafeZoneH + SafeZoneY) - 0.129"; //0.965
+ };
- class DAGR_WP : DAGR_Text {
- idc = 266857;
- x = "(SafeZoneW + SafeZoneX) - 0.235"; //0.965
- y = "(SafeZoneH + SafeZoneY) - 0.181"; //0.914
- };
+ class DAGR_WP : DAGR_Text {
+ idc = 266857;
+ x = "(SafeZoneW + SafeZoneX) - 0.235"; //0.965
+ y = "(SafeZoneH + SafeZoneY) - 0.181"; //0.914
+ };
- class DAGR_Bearing : DAGR_Text {
- idc = 266858;
- x = "(SafeZoneW + SafeZoneX) - 0.413"; //0.787
- y = "(SafeZoneH + SafeZoneY) - 0.181"; //0.914
- };
- class DAGR_DIST : DAGR_Text {
- idc = 266859;
- x = "(SafeZoneW + SafeZoneX) - 0.265"; //0.935
- y = "(SafeZoneH + SafeZoneY) - 0.129"; //0.965
- };
- };
+ class DAGR_Bearing : DAGR_Text {
+ idc = 266858;
+ x = "(SafeZoneW + SafeZoneX) - 0.413"; //0.787
+ y = "(SafeZoneH + SafeZoneY) - 0.181"; //0.914
+ };
+ class DAGR_DIST : DAGR_Text {
+ idc = 266859;
+ x = "(SafeZoneW + SafeZoneX) - 0.265"; //0.935
+ y = "(SafeZoneH + SafeZoneY) - 0.129"; //0.965
+ };
+ };
};
diff --git a/addons/dagr/functions/fnc_menuInit.sqf b/addons/dagr/functions/fnc_menuInit.sqf
index e4fb341537..54cb4467c5 100644
--- a/addons/dagr/functions/fnc_menuInit.sqf
+++ b/addons/dagr/functions/fnc_menuInit.sqf
@@ -522,7 +522,7 @@ GVAR(menuRun) = true;
(__dsp displayCtrl __mainText) ctrlSetText "Connecting...";
};
if (ACE_time - GVAR(busyTimer) > 0.6) then {
- if (ACE_player hasWeapon "ACE_Vector") then {
+ if (({_x isKindOf ["ACE_Vector", configFile >> "CfgWeapons"]} count (weapons ACE_player)) > 0) then {
GVAR(displaySelection) = "VECTOR";
(__dsp displayCtrl __mainText) ctrlSetText "Vector Connected";
GVAR(vectorConnected) = true;
diff --git a/addons/explosives/CfgVehicles.hpp b/addons/explosives/CfgVehicles.hpp
index 5f81bde127..3db6546208 100644
--- a/addons/explosives/CfgVehicles.hpp
+++ b/addons/explosives/CfgVehicles.hpp
@@ -50,8 +50,7 @@ class CfgVehicles {
mapSize = 0.2;
icon = "iconObject_1x2";
model = "\A3\Weapons_f\dummyweapon.p3d";
- scope = 2;
- scopeCurator = 1;
+ scope = 1;
vehicleClass = "Cargo";
class ACE_Actions {
class ACE_MainActions {
@@ -81,8 +80,7 @@ class CfgVehicles {
mapSize = 0.2;
icon = "iconObject_1x2";
model = "\A3\Structures_F\Items\Tools\MultiMeter_F.p3d";
- scope = 2;
- scopeCurator = 1;
+ scope = 1;
vehicleClass = "Cargo";
class ACE_Actions {
class ACE_MainActions {
diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml
index 4cabe2ce06..c49d09502f 100644
--- a/addons/explosives/stringtable.xml
+++ b/addons/explosives/stringtable.xml
@@ -648,6 +648,7 @@
Mina M6 SLAM (Ataque Inferior)
Mine M6 SLAM (par le bas)
Mina M6 SLAM (base)
+ M6 SLAM (Útok zespoda)
M6 SLAM Mine (Side Attack)
@@ -663,6 +664,7 @@
Mina M6 SLAM (Ataque Lateral)
Mine M6 SLAM (de flanc)
STR_ACE_Explosives_Module_SLAMBottomAttack_DisplayName M6 SLAM Mine (Bottom Attack) Mine M6 SLAM (par le bas) M6-SLAM-Mine (Bodenangriff) Mina M6 SLAM (base) Mina M6 SLAM (atak od dołu) Mina M6 SLAM (Laterale)
+ M6 SLAM (Útok do strany)
Large IED (Urban, Pressure Plate)
@@ -678,6 +680,7 @@
IED Grande (Urbano, Placa de presión)
Grand EEI (Urbain, plaque de pression)
IED grande (urbano, a pressione)
+ IED, Velké (Městské, Nášlapné)
Large IED (Dug-in, Pressure Plate)
@@ -693,6 +696,7 @@
IED Grande (Enterrado, Placa de presión)
Grand EEI (Enterré, plaque de pression)
IED grande (interrato, a pressione)
+ IED, Velké (Zakopané, Nášlapné)
Small IED (Urban, Pressure Plate)
@@ -708,6 +712,7 @@
IED Pequeño (Urbano, Placa de presión)
Petit EEI (Urbain, plaque de pression)
IED piccolo (urbano, a pressione)
+ IED, Malé (Městské, Nášlapné)
Small IED (Dug-in, Pressure Plate)
@@ -723,6 +728,7 @@
IED Pequeño (Enterrado, Placa de presión)
Petit EEI (Enterré, plaque de pression)
IED piccolo (interrato, a pressione)
+ IED, Malé (Zakopané, Nášlapné)
Connect to %1
diff --git a/addons/fastroping/CfgVehicles.hpp b/addons/fastroping/CfgVehicles.hpp
index a9f5ebfbad..609e386e68 100644
--- a/addons/fastroping/CfgVehicles.hpp
+++ b/addons/fastroping/CfgVehicles.hpp
@@ -73,6 +73,10 @@ class CfgVehicles {
class ACE_friesBase: Helicopter_Base_F {
destrType = "";
class Turrets {};
+ class ACE_Actions {};
+ class ACE_SelfActions {};
+ EGVAR(cargo,hasCargo) = 0;
+ EGVAR(cargo,space) = 0;
};
class ACE_friesAnchorBar: ACE_friesBase {
author = "jokoho48";
@@ -205,7 +209,7 @@ class CfgVehicles {
GVAR(enabled) = 2;
GVAR(ropeOrigins)[] = {"ropeOriginRight", "ropeOriginLeft"};
GVAR(friesType) = "ACE_friesGantryReverse";
- GVAR(friesAttachmentPoint)[] = {1.04, 2.5, -0.34};
+ GVAR(friesAttachmentPoint)[] = {-1.04, 2.5, -0.34};
EQUIP_FRIES_ATTRIBUTE;
};
class Heli_light_03_unarmed_base_F: Heli_light_03_base_F {
diff --git a/addons/fastroping/script_component.hpp b/addons/fastroping/script_component.hpp
index ccfa2c3e56..3770bfe0d4 100644
--- a/addons/fastroping/script_component.hpp
+++ b/addons/fastroping/script_component.hpp
@@ -1,6 +1,11 @@
#define COMPONENT fastroping
#include "\z\ace\addons\main\script_mod.hpp"
+// #define DEBUG_MODE_FULL
+// #define DISABLE_COMPILE_CACHE
+// #define CBA_DEBUG_SYNCHRONOUS
+// #define ENABLE_PERFORMANCE_COUNTERS
+
#ifdef DEBUG_ENABLED_FASTROPING
#define DEBUG_MODE_FULL
#endif
diff --git a/addons/fastroping/stringtable.xml b/addons/fastroping/stringtable.xml
index 1a03e59409..7b0e4ad1f8 100644
--- a/addons/fastroping/stringtable.xml
+++ b/addons/fastroping/stringtable.xml
@@ -8,6 +8,7 @@
Equiper le FRIES
Equipar FRIES
Equipaggia la FRIES
+ Vybavit FRIES
Equips compatible helicopters with a Fast Rope Insertion Extraction System.
@@ -16,6 +17,7 @@
Equipe les hélicoptères compatibles avec un Module Fast Rope Insertion Extraction System.
Equipar helicoptero compatible con un Sistema de Inserción Extracción Fast Rope.
Equipagga l'elicottero compatibile con il Fast Rope Insertion Exstraction System
+ Vybavit kompatibilní vrtulníky systémem Fast Rope Insertion Extraction (FRIES).
Prepare fast roping system
@@ -24,6 +26,7 @@
Préparer le système de corde lisse
Preparar el sistema fast roping
Prepara le corde
+ Připravit systém slaňování
Deploy ropes
@@ -32,6 +35,7 @@
Déployer les cordes
Desplegar cuerdas
Srotola le corde
+ Připravit lana
Fast rope
@@ -40,6 +44,7 @@
Descendre à la corde
Descender por la cuerda
Scendi sulla corda
+ SLANIT
Cut ropes
@@ -48,6 +53,7 @@
Détacher les cordes
Cortar cuerdas
Taglia le corde
+ Odříznout lano
Equip helicopter with FRIES
@@ -56,6 +62,7 @@
Equiper l'hélicoptère avec le FRIED
Equipar helicoptero con FRIES
Equipaggia l'elicottero con FRIES
+ Vybavit vrtulník pomocí FRIES
Equips the selected helicopter with a Fast Rope Insertion Extraction System
@@ -64,6 +71,7 @@
Equipe l'hélicoptère sélectionné avec un Fast Rope Insertion Extraction System
Equipa el helicoptero seleccionado con un Sistema de Inserción Extracción Fast Rope
Equipaggia l'elicottero selezionato con il Fast Rope Insertion Extraction System
+ Vybavit vybraný vrtulník systémem Fast Rope Insertion Extraction (FRIES)
LET UNITS FAST ROPE
diff --git a/addons/gestures/CfgVehicles.hpp b/addons/gestures/CfgVehicles.hpp
index 4bf98f4978..8294f43759 100644
--- a/addons/gestures/CfgVehicles.hpp
+++ b/addons/gestures/CfgVehicles.hpp
@@ -13,98 +13,98 @@ class CfgVehicles {
class GVAR(Advance) {
displayName = CSTRING(Advance);
- condition = QUOTE(canStand _target);
+ condition = QUOTE(true);
statement = QUOTE(_target playActionNow 'gestureAdvance';);
showDisabled = 1;
priority = 1.9;
};
class GVAR(Go) {
displayName = CSTRING(Go);
- condition = QUOTE(canStand _target);
+ condition = QUOTE(true);
statement = QUOTE(_target playActionNow ([ARR_2('gestureGo','gestureGoB')] select floor random 2););
showDisabled = 1;
priority = 1.8;
};
class GVAR(Follow) {
displayName = CSTRING(Follow);
- condition = QUOTE(canStand _target);
+ condition = QUOTE(true);
statement = QUOTE(_target playActionNow 'gestureFollow';);
showDisabled = 1;
priority = 1.7;
};
class GVAR(Up) {
displayName = CSTRING(Up);
- condition = QUOTE(canStand _target);
+ condition = QUOTE(true);
statement = QUOTE(_target playActionNow 'gestureUp';);
showDisabled = 1;
priority = 1.5;
};
class GVAR(CeaseFire) {
displayName = CSTRING(CeaseFire);
- condition = QUOTE(canStand _target);
+ condition = QUOTE(true);
statement = QUOTE(_target playActionNow 'gestureCeaseFire';);
showDisabled = 1;
priority = 1.3;
};
class GVAR(Stop) {
displayName = CSTRING(Stop);
- condition = QUOTE(canStand _target);
+ condition = QUOTE(true);
statement = QUOTE(_target playActionNow 'gestureFreeze';); // BI animation - is actualls "stop" in all stances but prone
showDisabled = 1;
priority = 1.2;
};
class GVAR(Forward) {
displayName = CSTRING(Forward);
- condition = QUOTE(canStand _target && GVAR(ReloadMutex));
+ condition = QUOTE(true);
statement = QUOTE(QUOTE(QGVAR(forward)) call FUNC(playSignal));
showDisabled = 1;
priority = 1.9;
};
class GVAR(Regroup) {
displayName = CSTRING(Regroup);
- condition = QUOTE(canStand _target && GVAR(ReloadMutex));
+ condition = QUOTE(true);
statement = QUOTE(QUOTE(QGVAR(regroup)) call FUNC(playSignal));
showDisabled = 1;
priority = 1.8;
};
class GVAR(Freeze) {
displayName = CSTRING(Freeze);
- condition = QUOTE(canStand _target && GVAR(ReloadMutex));
+ condition = QUOTE(true);
statement = QUOTE(QUOTE(QGVAR(freeze)) call FUNC(playSignal));
showDisabled = 1;
priority = 1.7;
};
class GVAR(Cover) {
displayName = CSTRING(Cover);
- condition = QUOTE(canStand _target && GVAR(ReloadMutex));
+ condition = QUOTE(true);
statement = QUOTE(QUOTE(QGVAR(cover)) call FUNC(playSignal));
showDisabled = 1;
priority = 1.6;
};
class GVAR(Point) {
displayName = CSTRING(Point);
- condition = QUOTE(canStand _target && GVAR(ReloadMutex));
+ condition = QUOTE(true);
statement = QUOTE(QUOTE(QGVAR(point)) call FUNC(playSignal));
showDisabled = 1;
priority = 1.5;
};
class GVAR(Engage) {
displayName = CSTRING(Engage);
- condition = QUOTE(canStand _target && GVAR(ReloadMutex));
+ condition = QUOTE(true);
statement = QUOTE(QUOTE(QGVAR(engage)) call FUNC(playSignal));
showDisabled = 1;
priority = 1.4;
};
class GVAR(Hold) {
displayName = CSTRING(Hold);
- condition = QUOTE(canStand _target && GVAR(ReloadMutex));
+ condition = QUOTE(true);
statement = QUOTE(QUOTE(QGVAR(hold)) call FUNC(playSignal));
showDisabled = 1;
priority = 1.3;
};
class GVAR(Warning) {
displayName = CSTRING(Warning);
- condition = QUOTE(canStand _target && GVAR(ReloadMutex));
+ condition = QUOTE(true);
statement = QUOTE(QUOTE(QGVAR(warning)) call FUNC(playSignal));
showDisabled = 1;
priority = 1.2;
diff --git a/addons/gestures/XEH_postInit.sqf b/addons/gestures/XEH_postInit.sqf
index b764aeb176..6d9e057e29 100644
--- a/addons/gestures/XEH_postInit.sqf
+++ b/addons/gestures/XEH_postInit.sqf
@@ -10,9 +10,10 @@ GVAR(ReloadMutex) = true;
_x params ["_currentName", "_key", ["_vanillaKey", false] ];
// Don't add "ace_gestures_" prefix to BI gestures
- private _signalName = _currentName;
- if (!_vanillaKey) then {
- _signalName = format [QGVAR(%1), _currentName];
+ private _signalName = if (_vanillaKey) then {
+ format ["BIgesture%1", _currentName];
+ } else {
+ format [QGVAR(%1), _currentName];
};
private _code = compile format [QUOTE('%1' call FUNC(playSignal)), _signalName];
diff --git a/addons/gforces/ACE_Settings.hpp b/addons/gforces/ACE_Settings.hpp
new file mode 100644
index 0000000000..dbe6dec13a
--- /dev/null
+++ b/addons/gforces/ACE_Settings.hpp
@@ -0,0 +1,8 @@
+class ACE_Settings {
+ class GVAR(enabledFor) {
+ displayName = CSTRING(enabledFor_displayName);
+ typeName = "SCALAR";
+ value = 1;
+ values[] = {ECSTRING(Common,Disabled), CSTRING(enabledFor_onlyAircraft), ECSTRING(Common,Enabled)};
+ };
+};
diff --git a/addons/gforces/XEH_PREP.hpp b/addons/gforces/XEH_PREP.hpp
index 1d3d8dac05..d7ef509174 100644
--- a/addons/gforces/XEH_PREP.hpp
+++ b/addons/gforces/XEH_PREP.hpp
@@ -1,2 +1,2 @@
-
+PREP(addPFEH);
PREP(pfhUpdateGForces);
diff --git a/addons/gforces/XEH_postInit.sqf b/addons/gforces/XEH_postInit.sqf
index 23abe8e826..d1df112606 100644
--- a/addons/gforces/XEH_postInit.sqf
+++ b/addons/gforces/XEH_postInit.sqf
@@ -2,14 +2,38 @@
if (!hasInterface) exitWith {};
-// Setup ppEffect
-GVAR(GForces_CC) = ppEffectCreate ["ColorCorrections", 4215];
-GVAR(GForces_CC) ppEffectEnable true;
-GVAR(GForces_CC) ppEffectForceInNVG true;
-GVAR(GForces_CC) ppEffectAdjust [1,1,0,[0,0,0,1],[0,0,0,0],[1,1,1,1],[10,10,0,0,0,0.1,0.5]];
-GVAR(GForces_CC) ppEffectCommit 0.4;
+GVAR(pfID) = -1;
-GVAR(lastUpdateTime) = 0;
-GVAR(oldVel) = [0,0,0];
+["SettingsInitialized", {
+ TRACE_1("SettingsInitialized eh",GVAR(enabledFor));
-[DFUNC(pfhUpdateGForces), 0, []] call CBA_fnc_addPerFrameHandler;
+ if (GVAR(enabledFor) == 0) exitWith {}; //Module has no effect if enabledFor is "None"
+ if (GVAR(enabledFor) == 2) exitWith { //PFEH is always on when enabledFor is "All"
+ [] call FUNC(addPFEH);
+ TRACE_1("adding perm PFEH",GVAR(pfID));
+ };
+
+ //PFEH only runs when player is in a type "Air" vehicle when enabledFor is "Aircraft"
+
+ if ((!isNull (vehicle ACE_player)) && {(vehicle ACE_player) isKindOf "Air"}) then { //"playerVehicleChanged" can happen before "settingInit"
+ [] call FUNC(addPFEH);
+ TRACE_1("adding temp PFEH [start in]",GVAR(pfID));
+ };
+ ["playerVehicleChanged", {
+ params ["", "_vehicle"];
+ TRACE_2("playerVehicleChanged",_vehicle,typeOf _vehicle);
+ if (_vehicle isKindOf "Air") then {
+ if (GVAR(pfID) == -1) then {
+ [] call FUNC(addPFEH);
+ TRACE_1("adding temp PFEH",GVAR(pfID));
+ };
+ } else {
+ if (GVAR(pfID) != -1) then {
+ TRACE_1("removing temp PFEH",GVAR(pfID));
+ ppEffectDestroy GVAR(GForces_CC);
+ [GVAR(pfID)] call CBA_fnc_removePerFrameHandler;
+ GVAR(pfID) = -1;
+ };
+ };
+ }] call EFUNC(common,addEventHandler);
+}] call EFUNC(common,addEventHandler);
diff --git a/addons/gforces/functions/fnc_addPFEH.sqf b/addons/gforces/functions/fnc_addPFEH.sqf
new file mode 100644
index 0000000000..50311c3a06
--- /dev/null
+++ b/addons/gforces/functions/fnc_addPFEH.sqf
@@ -0,0 +1,29 @@
+/*
+ * Author: KoffeinFlummi and esteldunedain
+ * Adds the PFEH
+ *
+ * Argument:
+ * None
+ *
+ * Return value:
+ * None
+ *
+ * Public: No
+ */
+#include "script_component.hpp"
+
+//Reset forces array
+GVAR(GForces) = [];
+GVAR(GForces_Index) = 0;
+
+// Setup ppEffect
+GVAR(GForces_CC) = ppEffectCreate ["ColorCorrections", 4215];
+GVAR(GForces_CC) ppEffectEnable true;
+GVAR(GForces_CC) ppEffectForceInNVG true;
+GVAR(GForces_CC) ppEffectAdjust [1,1,0,[0,0,0,1],[0,0,0,0],[1,1,1,1],[10,10,0,0,0,0.1,0.5]];
+GVAR(GForces_CC) ppEffectCommit 0.4;
+
+GVAR(lastUpdateTime) = 0;
+GVAR(oldVel) = [0,0,0];
+
+GVAR(pfID) = [DFUNC(pfhUpdateGForces), 0, []] call CBA_fnc_addPerFrameHandler;
diff --git a/addons/gforces/functions/fnc_pfhUpdateGForces.sqf b/addons/gforces/functions/fnc_pfhUpdateGForces.sqf
index dd569781e7..dc6f11ee39 100644
--- a/addons/gforces/functions/fnc_pfhUpdateGForces.sqf
+++ b/addons/gforces/functions/fnc_pfhUpdateGForces.sqf
@@ -13,14 +13,14 @@
*/
#include "script_component.hpp"
-EXPLODE_2_PVT(_this,_params,_pfhId);
-
// Update the g-forces at constant mission time intervals (taking accTime into account)
if ((ACE_time - GVAR(lastUpdateTime)) < INTERVAL) exitWith {};
GVAR(lastUpdateTime) = ACE_time;
if (isNull ACE_player || !(alive ACE_player)) exitWith {};
+BEGIN_COUNTER(everyInterval);
+
private _newVel = velocity (vehicle ACE_player);
private _accel = ((_newVel vectorDiff GVAR(oldVel)) vectorMultiply (1 / INTERVAL)) vectorAdd [0, 0, 9.8];
// Cap maximum G's to +- 10 to avoid g-effects when the update is low fps.
@@ -91,3 +91,5 @@ if !(ACE_player getVariable ["ACE_isUnconscious", false]) then {
};
GVAR(GForces_CC) ppEffectCommit INTERVAL;
+
+END_COUNTER(everyInterval);
diff --git a/addons/gforces/stringtable.xml b/addons/gforces/stringtable.xml
new file mode 100644
index 0000000000..f5d5f1b12d
--- /dev/null
+++ b/addons/gforces/stringtable.xml
@@ -0,0 +1,17 @@
+
+
+
+
+ Gforces Effects
+ Gforces Effekte
+ Efectos Gforces
+ G Force efekty
+
+
+ Only Aircraft
+ Nur Luftfahrzeug
+ Sólo Aeronave
+ Pouze letadla
+
+
+
\ No newline at end of file
diff --git a/addons/goggles/functions/fnc_clearGlasses.sqf b/addons/goggles/functions/fnc_clearGlasses.sqf
index d0b14e4f90..e7d5584938 100644
--- a/addons/goggles/functions/fnc_clearGlasses.sqf
+++ b/addons/goggles/functions/fnc_clearGlasses.sqf
@@ -26,7 +26,7 @@ _effects set [BROKEN, _broken];
SETGLASSES(_unit,_effects);
-if (stance _unit != "PRONE") then {
+if ((stance _unit != "PRONE") && {primaryWeapon _unit != ""} && {currentWeapon _unit == primaryWeapon _unit}) then {
_unit playActionNow "gestureWipeFace";
};
diff --git a/addons/hearing/CfgSounds.hpp b/addons/hearing/CfgSounds.hpp
index 7afdae88cb..0a1bc82ed1 100644
--- a/addons/hearing/CfgSounds.hpp
+++ b/addons/hearing/CfgSounds.hpp
@@ -27,8 +27,8 @@ class CfgSounds {
sound[] = {QUOTE(PATHTOF(sounds\deafness_noring.ogg)),3,1};
titles[] = {};
};
- class ACE_Ring_Backblast {
- sound[] = {QUOTE(PATHTOF(sounds\backblast_ring.ogg)),1,1};
- titles[] = {};
- };
+ class ACE_Ring_Backblast {
+ sound[] = {QUOTE(PATHTOF(sounds\backblast_ring.ogg)),1,1};
+ titles[] = {};
+ };
};
diff --git a/addons/huntir/CfgAmmo.hpp b/addons/huntir/CfgAmmo.hpp
index fac4d6fe60..86f73e9755 100644
--- a/addons/huntir/CfgAmmo.hpp
+++ b/addons/huntir/CfgAmmo.hpp
@@ -33,13 +33,13 @@ class CfgAmmo {
soundFakeFall2[] = {"",3.16228,1,1000};
soundFakeFall3[] = {"",3.16228,1,1000};
soundFakeFall[] = {};
- hit = 0;
- indirectHit = 0;
- indirectHitRange = 0;
- explosive = 1;
- model = "\A3\weapons_f\empty";
- airFriction = 0;
- timeToLive = 1;
- explosionTime = 0.001;
+ hit = 0;
+ indirectHit = 0;
+ indirectHitRange = 0;
+ explosive = 1;
+ model = "\A3\weapons_f\empty";
+ airFriction = 0;
+ timeToLive = 1;
+ explosionTime = 0.001;
};
};
diff --git a/addons/interaction/stringtable.xml b/addons/interaction/stringtable.xml
index 0e1afa21a1..812964bbb7 100644
--- a/addons/interaction/stringtable.xml
+++ b/addons/interaction/stringtable.xml
@@ -356,6 +356,7 @@
Aussteigen!
Sal del vehículo!
Sortez !
+ Vystupte
Team Management
@@ -712,6 +713,7 @@
Encender
Allumer
Accendi
+ Zapnout
Turn off
@@ -720,6 +722,7 @@
Apagar
Eteindre
Spegni
+ Vypnout
Pass magazine
@@ -760,7 +763,7 @@
%1 podał Ci magazynek %2.
%1 передал вам магазин %2.
%1 passou a você um carregador %2.
- %1 ti podal %2 zásobník.
+ %1 ti podal zásobník %2.
%1 ti ha passato un caricatore %2 .
%1 te pasó un cargador %2.
%1 vous a passé un chargeur %2.
diff --git a/addons/javelin/functions/fnc_onOpticDraw.sqf b/addons/javelin/functions/fnc_onOpticDraw.sqf
index f561806eaa..67e337291b 100644
--- a/addons/javelin/functions/fnc_onOpticDraw.sqf
+++ b/addons/javelin/functions/fnc_onOpticDraw.sqf
@@ -98,8 +98,17 @@ if (_range > 50 && {_range < 2500}) then {
};
};
-if (isNull _newTarget) then {
- _newTarget = cursorTarget;
+if ((isNull _newTarget) && {cursorObject isKindOf "AllVehicles"}) then {
+ private _intersectionsToCursorTarget = lineIntersectsSurfaces [(AGLtoASL positionCameraToWorld [0,0,0]), aimPos cursorObject, ace_player, cursorObject, true, 1];
+ if (_intersectionsToCursorTarget isEqualTo []) then {
+ _newTarget = cursorObject;
+ };
+};
+if ((isNull _newTarget) && {cursorTarget isKindOf "AllVehicles"}) then {
+ private _intersectionsToCursorTarget = lineIntersectsSurfaces [(AGLtoASL positionCameraToWorld [0,0,0]), aimPos cursorTarget, ace_player, cursorTarget, true, 1];
+ if (_intersectionsToCursorTarget isEqualTo []) then {
+ _newTarget = cursorTarget;
+ };
};
// Create constants
diff --git a/addons/medical/functions/fnc_setCardiacArrest.sqf b/addons/medical/functions/fnc_setCardiacArrest.sqf
index 7b2c195f10..bf4a679bdc 100644
--- a/addons/medical/functions/fnc_setCardiacArrest.sqf
+++ b/addons/medical/functions/fnc_setCardiacArrest.sqf
@@ -27,11 +27,10 @@ _unit setVariable [QGVAR(heartRate), 0];
_timeInCardiacArrest = 120 + round(random(600));
[{
- private ["_args","_unit","_startTime","_timeInCardiacArrest","_heartRate"];
params ["_args", "_idPFH"];
_args params ["_unit", "_startTime", "_timeInCardiacArrest"];
- _heartRate = _unit getVariable [QGVAR(heartRate), 80];
+ private _heartRate = _unit getVariable [QGVAR(heartRate), 80];
if (_heartRate > 0 || !alive _unit) exitWith {
[_idPFH] call CBA_fnc_removePerFrameHandler;
_unit setVariable [QGVAR(inCardiacArrest), nil,true];
diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml
index a3953be23b..ef0ccc68a2 100644
--- a/addons/medical/stringtable.xml
+++ b/addons/medical/stringtable.xml
@@ -56,6 +56,7 @@
Wstrzyknij adenozynę
Injecter de l'adénosine
Inietta andenosina
+ Aplikovat adenosine
Inject Atropine
@@ -256,6 +257,7 @@
Wstrzykiwanie adenozyny...
Injection d'adénosine...
Inietto l'andenosina
+ Aplikuji adenosine...
Injecting Atropine...
@@ -363,14 +365,14 @@
Bendaggio compressivo
Bandage gauze
Bandagem de Compressão
- Tlakový obvaz
+ Obvaz Tlakový
Elastic Bandage
Elastischer Verband
Vendaje elástico
Давящая повязка
- Elastické obinadlo
+ Obavaz Elastický
Bandaż elastyczny
Pansement élastique
Rögzitő kötszer
@@ -831,7 +833,7 @@
Nyomókötszer
Bendaggio compressivo
Bandagem de Compressão
- Tlakový obvaz
+ Obvaz (Tlakový)
Used to pack medium to large wounds and stem the bleeding
@@ -864,7 +866,7 @@
Vendaje (Elástico)
Bandage (Élastique)
Bandaż (elastyczny)
- Obvaz (elastický)
+ Obvaz (Elastický)
Rögzító kötszer
Benda (elastica)
Bandagem (Elástica)
@@ -936,7 +938,7 @@
Morfina auto-inyectable
Auto-injecteur de Morphine
Autostrzykawka z morfiną
- Autoinjektor morfin
+ Auto-morfin
Morfium autoinjektor
Autoiniettore di morfina
Auto-injetor de morfina
@@ -972,6 +974,7 @@
Autostrzykawka z adenozyną
Auto-injécteur d'adénosine
Autoiniettore di adenosina
+ Auto-adenosine
Used to counter effects of Epinephrine
@@ -980,6 +983,7 @@
Adenozyna. Stosowana do zwalczania efektów działania adrenaliny.
Utilisé pour contrer les effets de l'adrénaline
Usato per contrastare l'effetto dell'epinefrina
+ Slouží jako protiváha Adrenalinu
A drug used to counter the effects of Epinephrine
@@ -988,6 +992,7 @@
Organiczny związek chemiczny z grupy nukleozydów. Skuteczna w leczeniu częstoskurczu komorowego. Działa rozszerzająco na naczynia krwionośne.
Un composé utilisé pour contrer les effets de l'adrénaline
Medicamento usato per contrastare l'effetto dell'epinefrina
+ Droga používaná k tlumení efektu Adrenalinu
Atropine autoinjector
@@ -996,7 +1001,7 @@
Auto-injecteur d'Atropine
Autostrzykawka AtroPen
Atropin-Autoinjektor
- Autoinjektor atropin
+ Auto-atropine
Atropin autoinjektor
Autoiniettore di atropina
Auto-injetor de Atropina
@@ -1032,7 +1037,7 @@
Auto-injecteur d'épinéphrine
Autostrzykawka EpiPen
Epiniphrin-Autoinjektor
- Autoinjektor adrenalin
+ Auto-adrenalin
Epinefrin autoinjektor
Autoiniettore di adrenalina
Auto-injetor de epinefrina
@@ -1287,7 +1292,7 @@
Elsősegélycsomag
Pronto soccorso personale
Kit De Primeiros Socorros Pessoal
- Osobní lékárnička
+ Osobní lékárnička (PAK)
Includes various treatment kit needed for stitching or advanced treatment
@@ -1322,7 +1327,7 @@
Usar equipo de primeros auxilios
Elsősegélycsomag használata
Usar o kit de primeiros socorros
- Použít osobní lékárničku
+ Použít osobní lékárničku (PAK)
Usa il pronto soccorso personale
@@ -1431,7 +1436,7 @@
Vérnyomás megmérése...
Controllando la pressione sanguigna..
Aferindo Pressão Arterial...
- Kontroluji krevní tlak...
+ Měřím krevní tlak...
%1 checked Blood Pressure: %2
@@ -1442,7 +1447,7 @@
%1 sprawdził ciśnienie krwi: %2
%1 verificada la presión arterial: %2
%1 ellenőrizte a vérnyomást: %2
- %1 zkontrolován krevní tlak: %2
+ %1 zkontroloval krevní tlak: %2
%1 verificou pressão arterial: %2
@@ -1467,7 +1472,7 @@
Wyczuwasz ciśnienie krwi o wartości %2/%3
Der Blutdruck liegt bei %2/%3
A Pressão Arterial é de %2/%3
- Našel jsi krevní tlak u %2/%3
+ Naměřil si krevní tlak u %2/%3
You find a low blood pressure
@@ -1479,7 +1484,7 @@
A vérnyomás alacsony
La pressione sanguigna è bassa
Pressão Arterial baixa
- Naměřil jsi nízký krevní tlak
+ Naměřil si nízký krevní tlak
You find a normal blood pressure
@@ -1491,7 +1496,7 @@
A vérnyomás normális
La pressione sanguigna è normale
Pressão Arterial normal
- Naměřil jsi normální krevní tlak
+ Naměřil si normální krevní tlak
You find a high blood pressure
@@ -1503,7 +1508,7 @@
A vérnyomás magas
La pressione sanguigna è alta
Pressão Arterial Alta
- Naměřil jsi vysoký krevní tlak
+ Naměřil si vysoký krevní tlak
You find no blood pressure
@@ -1515,7 +1520,7 @@
Nem észlelhető vérnyomás
La pressione sanguigna è assente
Sem Pressão Arterial
- Nenaměřil jsi žádný krevní tlak
+ Nenaměřil si žádný krevní tlak
You fail to find a blood pressure
@@ -1527,7 +1532,7 @@
Nem sikerült a vérnyomás megmérése
Manca strumento per misurare pressione sanguigna
Você falhou em aferir a Pressão Arterial
- Nedokázal jsi změřit krevní tlak
+ Nedokázal si změřit krevní tlak
Low
@@ -1587,7 +1592,7 @@
Pulzus
Polso
Pulso
- Tep
+ Puls
Checking Heart Rate...
@@ -1611,7 +1616,7 @@
A %1 ellenőrizve
Hai diagnosticato %1
Você aferiu o paciente %1
- Zkontroloval jsi %1
+ Zkontroloval si %1
%1 checked Heart Rate: %2
@@ -1695,7 +1700,7 @@
A szívverés-szám alacsony
Hai riscontrato un debole battito cardiaco
Freqüência Cardíaca baixa
- Nahmatal jsi slabý srdeční tep
+ Nahmatal si slabý srdeční puls
You find a strong Heart Rate
@@ -1707,7 +1712,7 @@
A szívverés-szám magas
Hai riscontrato un forte battito cardiaco
Freqüência Cardíaca normal
- Nahmatal jsi silný srdeční tep
+ Nahmatal si silný srdeční puls
You find a normal Heart Rate
@@ -1719,7 +1724,7 @@
A szívverés-szám normális
Hai riscontrato un normale battito cardiaco
Freqüência Cardíaca alta
- Nahmatal jsi normální srdeční tep
+ Nahmatal si normální srdeční puls
You find no Heart Rate
@@ -1731,7 +1736,7 @@
Nem észlelhető szívverés
Hai riscontrato una assenza di battito cardiaco
Sem Freqüência Cardíaca
- Nenašel jsi
+ Žádný puls
Response
@@ -2172,7 +2177,7 @@
Gravemente herido
Lourdement blessé
Erősen sérült
- Těžce zraněn
+ Těžce raněn
Gravemente ferido
@@ -2184,7 +2189,7 @@
Levemente herido
Légèrement blessé
Enyhén sérült
- Lehce zraněn
+ Lehce raněn
Levemente ferido
@@ -2196,7 +2201,7 @@
Muy levemente herido
Très légèrement blessé
Nagyon enyhén sérült
- Velmi lehce zraněn
+ Velmi lehce raněn
Muito levemente ferido
@@ -3205,6 +3210,7 @@
Ajustes médicos básicos [ACE]
Réglages du système médical basic [ACE]
Impostazioni Mediche Di Base [ACE]
+ Základní zdravotnické nastavení [ACE]
Advanced Medical Settings [ACE]
@@ -3321,6 +3327,7 @@
Ograniczenia adrenaliny
Autoriser l'adrénaline
Permette epinefrina
+ Povolit adrenalin
Who can use Epinephrine for full heal? (Basic medical only)
@@ -3329,6 +3336,7 @@
Kto może skorzystać z adrenaliny w celu pełnego uleczenia? (Tylko podstawowy system medyczny)
Qui peut utiliser l'adrénaline pour les soins complets ? (Médical basique seulement)
Chi può usare l'epinefrina per la cura completa? (solo per sistema medico di base)
+ Kdo může použít adrenalin k úplnému vyléčení? (Pouze základní zdravotní systém)
Allow PAK
@@ -3336,7 +3344,7 @@
Ustawienie apteczek osobistych
Permitir EPA
Erlaube Erste-Hilfe-Set
- Povolit osobní lékárničky
+ Povolit osobní lékárničky (PAK)
Permitir Kit de Primeiros Socorros
Permettre le kit de premier secours
Elsősegélycsomag engedélyezése
@@ -3421,6 +3429,7 @@
Ograniczenia adrenaliny
Position des adrénalines
Ubicazione epinefrina
+ Oblast k použití adrenalinu
Where can the Epinephrine be used? (Basic Medical)
@@ -3429,6 +3438,7 @@
Gdzie można korzystać z adrenaliny? (Podstawowy system medyczny)
Où peuvent être utilisées les adrénalines ? (Médical basique)
Dove si può usare l'epinefrina? (Sistema medico di base)
+ Kde může být použit adrenalin? (Pouze základní zdravotní systém)
Locations PAK
@@ -3436,7 +3446,7 @@
Ograniczenie apteczek osobistych
Ubicaciones del EPA
Orte für Erste-Hilfe-Set
- Lokace osobní lékárničky
+ Oblast k použití PAK
Localizações do KPS
Lieu d'utilisation du KPS
Elsősegélycsomag helyek
@@ -3448,7 +3458,7 @@
Gdzie można korzystać z apteczek osobistych?
¿Dónde se puede utilizar el equipo de primeros auxilios?
Wo kann das Erste-Hilfe-Set verwendet werden?
- Kde může být použita osobní lékárnička?
+ Kde může být použita osobní lékárnička (PAK)?
Onde o kit de primeiros socorros pode ser utilizado?
Où le Kit de Premier Secour peut être utilisé
Hol lehet az elsősegélycsomagot használni?
@@ -3457,7 +3467,7 @@
Condition PAK
Bedingungen für d. Erste-Hilfe-Set
- Podmínka osobní lékárničky
+ Podmínky pro použití osobní lékárničky
Condición EPA
Condition d'utilisation du KPS
Warunek apteczek
@@ -3469,7 +3479,7 @@
When can the PAK be used?
Wann kann das Erste-Hilfe-Set verwendet werden?
- Kde může být použita osobní lékárnička?
+ Kdy může být použita osobní lékárnička?
¿Cuando se puede utilizar el Equipo de primeros auxilios?
Quand peut être utilisé le Kit de Premier Secours
Po spełnieniu jakich warunków apteczka osobista może zostać zastosowana na pacjencie?
@@ -3484,7 +3494,7 @@
Wszędzie
Donde sea
Überall
- Kdekoli
+ Kdekoliv
Qualquer lugar
PArtout
Akárhol
@@ -4124,6 +4134,7 @@
Sanitätsausbildung
Entrenamiento médico
Entraînement médical
+ Lékařský výcvik
Whether or not the object will be a medical vehicle.
@@ -4137,6 +4148,7 @@
Delay cease fire of AI while player is unconscious for medical reasons.
Verzögert das Ende des KI-Beschusses auf einen Spieler, wenn dieser aus medizinischen Gründen bewustlos wird.
Ritarda il cessate il fuoco dell'IA quando il giocatore è svenuto per motivi medici.
+ Prodleva zastavení palby pro AI, pokud je hráč v bezvědomí ze zdravotních důvodů.
Delay cease fire of AI for unconsciousness
@@ -4144,6 +4156,7 @@
Demora antes de volverse neutral al caer inconsciente
Opóźnij status captive u nieprzytomnych osób
Ritarda il cessate il fuoco dell'IA quando si è svenuti
+ Prodleva zastavení palby AI na bezvědomé
\ No newline at end of file
diff --git a/addons/medical_menu/stringtable.xml b/addons/medical_menu/stringtable.xml
index f825882be6..e9812128f4 100644
--- a/addons/medical_menu/stringtable.xml
+++ b/addons/medical_menu/stringtable.xml
@@ -295,7 +295,7 @@
Selectioner Bras Gauche
Wybierz lewą rękę
Selecionar Braço Esquerdo
- Vybrat Levou Ruku
+ Vybrat Levou ruku
Seleziona Braccio Sinistro
Load Mortar
@@ -175,6 +176,7 @@
Załaduj moździerz
Charger le mortier
Carica mortaio
+ Nabít minomet
Unloading Round
@@ -191,6 +193,7 @@
Przygotowywanie pocisku
Praparation de l'obus
Prepara il proiettile
+ Připavuji náboj
Load HE
@@ -199,6 +202,7 @@
Załaduj pocisk wybuchowy
Charger HE
Carica proiettile esplosivo ad alto potenziale (HE)
+ Nabít HE
Load Smoke
@@ -207,6 +211,7 @@
Załaduj pocisk dymny
Charger Fumigène
Carica fumogeno
+ Nabít Dýmovnici
Load Illumination
@@ -215,6 +220,7 @@
Załaduj pocisk oświetlający
Charger Eclairante
Carica illuminante
+ Nabít Světlici
Load Guided HE
@@ -223,6 +229,7 @@
Załaduj kierowany pocisk wybuchowy
Charger HE guidé
Carica HE guidata
+ Nabít HE (Naváděné)
Load Laser Guided HE
@@ -231,6 +238,7 @@
Załaduj laserowo napr. pocisk wybuchowy
Charger HE guidé au laser
Carica HE a guida laser
+ Nabít HE (Naváděné laserem)
82mm HE Round
@@ -239,6 +247,7 @@
Pocisk wybuchowy kal. 82mm
Obus de 82mm HE
Proiettile da 82mm HE
+ 82mm HE náboj
82mm Smoke Round
@@ -247,6 +256,7 @@
Pocisk dymny kal. 82mm
Obus de 82mm fumigène
Proiettile Fumogeno da 82mm
+ 82mm Kouřový náboj
82mm Illumination Round
@@ -255,6 +265,7 @@
Pocisk oświetlający kal. 82mm
Obus de 82mm éclairant
Proiettile illuminante da 82mm
+ 82mm Osvětlovací náboj
82mm Guided HE Round
@@ -263,6 +274,7 @@
Kierowany pocisk wybuchowy kal. 82mm
Obus de 82mm HE guidé
Proiettile HE guidato
+ 82mm HE náboj (naváděný)
82mm Laser Guided HE Round
@@ -271,6 +283,7 @@
Laserowo napr. pocisk wybuchowy kal. 82mm
Obus de 82mm HE guidé au laser
Proiettile HE a guida laser
+ 82mm HE náboj (naváděný laserem)
Used in Mk6 mortar
@@ -279,6 +292,7 @@
Używany w moździerzu Mk6
Utilisé dans le mortier Mk6
Usato nel mortaio Mk6
+ Používá se u minometu Mk6
[ACE] 82mm HE Rounds Box
@@ -287,6 +301,7 @@
[ACE] Skrzynka amunicji wybuchowej 82mm
[ACE] Obus de 82mm HE
[ACE] Scatola proiettili espolisvi ad alto potenziale (HE) da 82mm
+ [ACE] Bedna s municí (82mm HE)
[ACE] 82mm Smoke Rounds Box
@@ -295,6 +310,7 @@
[ACE] Skrzynka amunicji dymnej 82mm
[ACE] Obus de 82mm fumigène
[ACE] Scatola fumogeni da 82mm
+ [ACE] Bedna s municí (82mm Dýmovnice)
[ACE] 82mm Illumination Rounds Box
@@ -303,6 +319,7 @@
[ACE] Skrzynka amunicji oświetlającej 82mm
[ACE] Obus de 82mm éclairants
[ACE] Scatola illuminanti da 82mm
+ [ACE] Bedna s municí (82mm Světlice)
[ACE] 82mm Default Loadout Box
@@ -311,6 +328,7 @@
[ACE] Skrzynka amunicji standardowej 82mm
[ACE] Obus de 82mm par défaut
[ACE] Scatola proiettili 82mm standard
+ [ACE] Bedna se standardní 82mm municí
\ No newline at end of file
diff --git a/addons/movement/XEH_PREP.hpp b/addons/movement/XEH_PREP.hpp
index 8e465970eb..04913f7670 100644
--- a/addons/movement/XEH_PREP.hpp
+++ b/addons/movement/XEH_PREP.hpp
@@ -1,5 +1,7 @@
+PREP(addLoadToUnitContainer);
PREP(getWeight);
PREP(canClimb);
PREP(climb);
PREP(handleClimb);
+PREP(handleVirtualMass);
diff --git a/addons/movement/XEH_postInit.sqf b/addons/movement/XEH_postInit.sqf
index 806823f4c4..d9179a912a 100644
--- a/addons/movement/XEH_postInit.sqf
+++ b/addons/movement/XEH_postInit.sqf
@@ -3,6 +3,9 @@
if (!hasInterface) exitWith {};
+["playerChanged", FUNC(handleVirtualMass)] call FUNC(addEventHandler);
+["playerInventoryChanged", FUNC(handleVirtualMass)] call FUNC(addEventHandler);
+
["ACE3 Movement", QGVAR(climb), localize LSTRING(Climb),
{
// Conditions: canInteract
diff --git a/addons/movement/functions/fnc_addLoadToUnitContainer.sqf b/addons/movement/functions/fnc_addLoadToUnitContainer.sqf
new file mode 100644
index 0000000000..3928d1c822
--- /dev/null
+++ b/addons/movement/functions/fnc_addLoadToUnitContainer.sqf
@@ -0,0 +1,31 @@
+/*
+ * Author: commy2
+ * Add (negative numbers to subtract) a virtual mass to a units container.
+ *
+ * Arguments:
+ * 0: The Unit
Show particle effects when weapon overheats
@@ -48,6 +49,7 @@
Effetti Particellari Surriscaldamento per tutti
Efectos de partículas para todos
Effets de surchauffe pour tout le monde.
+ Částicové efekty přehřívání pro všechny
Show particle effects when other players weapon overheats
@@ -80,6 +82,7 @@
Usuń zacięcie przy przeładowaniu
Des-enrayer l'arme au rechargement.
Disinceppa l'arma quando si ricarica
+ Uvolnit zbraň při přebití
Reloading clears a weapon jam.
@@ -88,6 +91,7 @@
Przeładowywanie usuwa zacięcie
Recharger vide la chambre de l'arme
L'arma si disinceppa quando si ricarica
+ Přebití uvolní zaseknutou zbraň.
Chance of unjam failing
@@ -96,6 +100,7 @@
Szansa na porażkę usuw. zacięcia
Chance de rater le des-enrayement
Probabilità di sbagliare a disinceppare l'arma
+ Šance, že uvolnění zbraně selže
Probability that an unjam action might fail, requiring to be repeated.
@@ -172,6 +177,7 @@
Porażka przy usuwaniu zacięcia
Toujours enrayé !
Non si è disinceppata!
+ Zbrań se nepodařilo uvolnit
Swap barrel
@@ -190,7 +196,7 @@
Lauf wird gewechselt...
Cambiando el cañón...
Wymienianie lufy...
- Vyměňuji hlaveň...
+ Měním hlaveň...
Changement du canon...
Смена ствола...
Cső kicserélése folyamatban...
@@ -216,7 +222,7 @@
Sprawdź temperaturę broni
Vérifier la température de l'arme
Fegyver hőmérsékletének ellenőrzése
- Zjistit teplotu zbraně
+ Zkontrolovat teplotu zbraně
Conferir temperatura da arma
Controlla la temperatura della canna
Проверить температуру оружия
diff --git a/addons/realisticnames/CfgVehicles.hpp b/addons/realisticnames/CfgVehicles.hpp
index 61864a8259..4ecbbe1b89 100644
--- a/addons/realisticnames/CfgVehicles.hpp
+++ b/addons/realisticnames/CfgVehicles.hpp
@@ -642,6 +642,6 @@ class CfgVehicles {
class Item_Base_F;
class Item_acc_flashlight: Item_Base_F {
- displayName="UTG Defender 126";
- };
+ displayName="UTG Defender 126";
+ };
};
diff --git a/addons/recoil/CfgMoves.hpp b/addons/recoil/CfgMoves.hpp
index ecad382cb5..29bca9c81a 100644
--- a/addons/recoil/CfgMoves.hpp
+++ b/addons/recoil/CfgMoves.hpp
@@ -7,7 +7,7 @@
// Go through all modes that have a camshakefire defined and change it to ours.
class CfgMovesBasic {
class Default {
- camShakeFire = ACE_CAMSHAKEFIRE_NORMAL;
+ camShakeFire = ACE_CAMSHAKEFIRE_BASE;
};
};
@@ -69,7 +69,7 @@ class CfgMovesMaleSdr: CfgMovesBasic {
class AmovPknlMstpSrasWrflDnon;
class AmovPknlMwlkSrasWrflDf: AmovPknlMstpSrasWrflDnon {
- camShakeFire = ACE_CAMSHAKEFIRE_NORMAL;
+ camShakeFire = ACE_CAMSHAKEFIRE_BASE;
};
class AmovPknlMrunSrasWrflDf;
diff --git a/addons/reload/RscInGameUI.hpp b/addons/reload/RscInGameUI.hpp
deleted file mode 100644
index 7310690f16..0000000000
--- a/addons/reload/RscInGameUI.hpp
+++ /dev/null
@@ -1,24 +0,0 @@
-
-class RscControlsGroup;
-class RscText;
-
-class RscInGameUI {
- class RscUnitInfo {
- // Soldiers
- class WeaponInfoControlsGroupLeft: RscControlsGroup {
- class controls {
- class CA_AmmoCount: RscText {
- sizeEx = 0;
- };
- };
- };
- // Vehicles
- /*class WeaponInfoControlsGroupRight: RscControlsGroup {
- class controls {
- class CA_AmmoCount: RscText {
- sizeEx = 0;
- };
- };
- };*/
- };
-};
diff --git a/addons/reload/config.cpp b/addons/reload/config.cpp
index 6ded1cd687..86ba809a93 100644
--- a/addons/reload/config.cpp
+++ b/addons/reload/config.cpp
@@ -20,6 +20,4 @@ class CfgPatches {
#include "CfgActions.hpp"
-#include "RscInGameUI.hpp"
-
#include "ACE_Settings.hpp"
diff --git a/addons/repair/ACE_Settings.hpp b/addons/repair/ACE_Settings.hpp
index c3c8daad16..9ee40529e7 100644
--- a/addons/repair/ACE_Settings.hpp
+++ b/addons/repair/ACE_Settings.hpp
@@ -77,4 +77,9 @@ class ACE_Settings {
values[] = {"None", "ToolKit"};
_values[] = {{}, {"ToolKit"}};
};
+ class GVAR(autoShutOffEngineWhenStartingRepair) {
+ typeName = "BOOL";
+ value = 0;
+ category = ECSTRING(OptionsMenu,CategoryLogistics);
+ };
};
diff --git a/addons/repair/CfgEventHandlers.hpp b/addons/repair/CfgEventHandlers.hpp
index ffd75a38bc..06647d8dd5 100644
--- a/addons/repair/CfgEventHandlers.hpp
+++ b/addons/repair/CfgEventHandlers.hpp
@@ -35,7 +35,7 @@ class Extended_InitPost_EventHandlers {
class ADDON {
init = QUOTE(_this call DFUNC(addRepairActions));
serverInit = QUOTE(_this call DFUNC(addSpareParts));
- exclude[] = {QEGVAR(fastroping,helper)};
+ exclude[] = {QEGVAR(fastroping,helper), "ACE_friesBase"};
};
};
class Plane {
diff --git a/addons/repair/functions/fnc_canRepair.sqf b/addons/repair/functions/fnc_canRepair.sqf
index f7c3f60a8a..6027a34fd5 100644
--- a/addons/repair/functions/fnc_canRepair.sqf
+++ b/addons/repair/functions/fnc_canRepair.sqf
@@ -25,7 +25,8 @@ private ["_config", "_engineerRequired", "_items", "_return", "_condition", "_ve
_config = (ConfigFile >> "ACE_Repair" >> "Actions" >> _className);
if !(isClass _config) exitWith {false}; // or go for a default?
-if(isEngineOn _target) exitWith {false};
+
+// if(isEngineOn _target) exitWith {false}; // Ignore here so action shows, then exit and show warning when selected #3348
_engineerRequired = if (isNumber (_config >> "requiredEngineer")) then {
getNumber (_config >> "requiredEngineer");
diff --git a/addons/repair/functions/fnc_repair.sqf b/addons/repair/functions/fnc_repair.sqf
index 25e58151c5..f5b7d8cbfc 100644
--- a/addons/repair/functions/fnc_repair.sqf
+++ b/addons/repair/functions/fnc_repair.sqf
@@ -36,7 +36,14 @@ _engineerRequired = if (isNumber (_config >> "requiredEngineer")) then {
0;
};
if !([_caller, _engineerRequired] call FUNC(isEngineer)) exitWith {false};
-if (isEngineOn _target) exitWith {false};
+
+if ((isEngineOn _target) && {GVAR(autoShutOffEngineWhenStartingRepair)}) then {
+ ["engineOn", _target, [_target, false]] call EFUNC(common,objectEvent);
+};
+if ((isEngineOn _target) && {!GVAR(autoShutOffEngineWhenStartingRepair)}) exitWith {
+ ["displayTextStructured", [LSTRING(shutOffEngineWarning), 1.5, _caller]] call EFUNC(common,localEvent);
+ false
+};
//Items can be an array of required items or a string to a ACE_Setting array
_items = if (isArray (_config >> "items")) then {
diff --git a/addons/repair/stringtable.xml b/addons/repair/stringtable.xml
index fb505f4f4e..0bce5cd685 100644
--- a/addons/repair/stringtable.xml
+++ b/addons/repair/stringtable.xml
@@ -1316,5 +1316,11 @@
Oggetti richiesti per riparare/rimuovere ruote
Items exigés pour enlever/remplacer les roues
+
+ Engine must be off to repair
+ Motor muss ausgeschaltet zu reparieren sein
+ El motor necesita desactivado para la reparación
+ Pro opravu je zapotřebí vypnout motor
+
-
+
\ No newline at end of file
diff --git a/addons/spectator/stringtable.xml b/addons/spectator/stringtable.xml
index b78febbef7..bdb88a2675 100644
--- a/addons/spectator/stringtable.xml
+++ b/addons/spectator/stringtable.xml
@@ -321,7 +321,7 @@
Noc
Visão Norturna
Ночное
- Noc
+ Noční
Nocturna
Notturno
Nuit
@@ -332,7 +332,7 @@
Termo
Térmica
Тепловизор
- Termál
+ Termální
Térmica
Termico
Thermique
@@ -689,4 +689,4 @@
RAZ vitesse
-
+
\ No newline at end of file
diff --git a/addons/tagging/CfgVehicles.hpp b/addons/tagging/CfgVehicles.hpp
index 602ee41d33..4425b646ad 100644
--- a/addons/tagging/CfgVehicles.hpp
+++ b/addons/tagging/CfgVehicles.hpp
@@ -3,58 +3,32 @@ class CfgVehicles {
class CAManBase: Man {
class ACE_SelfActions {
class ACE_Equipment {
- class ACE_tagWallBlack {
- displayName = CSTRING(tagWallBlack);
+ class ACE_TagBlack {
+ displayName = CSTRING(TagBlack);
condition = QUOTE(('ACE_SpraypaintBlack' in items ACE_player) && {[] call FUNC(checkTaggable)});
- statement = QUOTE([ARR_2(ACE_player,'black')] call FUNC(tagWall));
+ statement = QUOTE([ARR_2(ACE_player,'black' call FUNC(getTexture))] call FUNC(tag));
showDisabled = 0;
priority = 3;
icon = QUOTE(PATHTOF(UI\icons\iconTaggingBlack.paa));
};
- class ACE_tagWallRed: ACE_tagWallBlack {
- displayName = CSTRING(tagWallRed);
+ class ACE_TagRed: ACE_TagBlack {
+ displayName = CSTRING(TagRed);
condition = QUOTE(('ACE_SpraypaintRed' in items ACE_player) && {[] call FUNC(checkTaggable)});
- statement = QUOTE([ARR_2(ACE_player,'red')] call FUNC(tagWall));
+ statement = QUOTE([ARR_2(ACE_player,'red' call FUNC(getTexture))] call FUNC(tag));
icon = QUOTE(PATHTOF(UI\icons\iconTaggingRed.paa));
};
- class ACE_tagWallGreen: ACE_tagWallBlack {
- displayName = CSTRING(tagWallGreen);
+ class ACE_TagGreen: ACE_TagBlack {
+ displayName = CSTRING(TagGreen);
condition = QUOTE(('ACE_SpraypaintGreen' in items ACE_player) && {[] call FUNC(checkTaggable)});
- statement = QUOTE([ARR_2(ACE_player,'green')] call FUNC(tagWall));
+ statement = QUOTE([ARR_2(ACE_player,'green' call FUNC(getTexture))] call FUNC(tag));
icon = QUOTE(PATHTOF(UI\icons\iconTaggingGreen.paa));
};
- class ACE_tagWallBlue: ACE_tagWallBlack {
- displayName = CSTRING(tagWallBlue);
+ class ACE_TagBlue: ACE_TagBlack {
+ displayName = CSTRING(TagBlue);
condition = QUOTE(('ACE_SpraypaintBlue' in items ACE_player) && {[] call FUNC(checkTaggable)});
- statement = QUOTE([ARR_2(ACE_player,'blue')] call FUNC(tagWall));
+ statement = QUOTE([ARR_2(ACE_player,'blue' call FUNC(getTexture))] call FUNC(tag));
icon = QUOTE(PATHTOF(UI\icons\iconTaggingBlue.paa));
};
- /*class ACE_tagGroundBlack {
- displayName = CSTRING(tagGroundBlack);
- condition = QUOTE('ACE_SpraypaintBlack' in items ACE_player);
- statement = QUOTE([ARR_2(ACE_player, 'black')] call FUNC(tagGround));
- showDisabled = 0;
- priority = 3;
- icon = QUOTE(PATHTOF(UI\icons\iconTaggingBlack.paa));
- };
- class ACE_tagGroundRed: ACE_tagGroundBlack {
- displayName = CSTRING(tagGroundRed);
- condition = QUOTE('ACE_SpraypaintRed' in items ACE_player);
- statement = QUOTE([ARR_2(ACE_player, 'red')] call FUNC(tagGround));
- icon = QUOTE(PATHTOF(UI\icons\iconTaggingRed.paa));
- };
- class ACE_tagGroundGreen: ACE_tagGroundBlack {
- displayName = CSTRING(tagGroundGreen);
- condition = QUOTE('ACE_SpraypaintGreen' in items ACE_player);
- statement = QUOTE([ARR_2(ACE_player, 'green')] call FUNC(tagGround));
- icon = QUOTE(PATHTOF(UI\icons\iconTaggingGreen.paa));
- };
- class ACE_tagGroundBlue: ACE_tagGroundBlack {
- displayName = CSTRING(tagGroundBlue);
- condition = QUOTE('ACE_SpraypaintBlue' in items ACE_player);
- statement = QUOTE([ARR_2(ACE_player, 'blue')] call FUNC(tagGround));
- icon = QUOTE(PATHTOF(UI\icons\iconTaggingBlue.paa));
- };*/
};
};
};
@@ -64,26 +38,26 @@ class CfgVehicles {
author = "jokoho48";
scope = 2;
scopeCurator = 2;
- displayName = CSTRING(spraypaintBlack);
+ displayName = CSTRING(SpraypaintBlack);
vehicleClass = "Items";
class TransportItems {
MACRO_ADDITEM(ACE_SpraypaintBlack,1);
};
};
class ACE_Item_SpraypaintRed: ACE_Item_SpraypaintBlack {
- displayName = CSTRING(spraypaintRed);
+ displayName = CSTRING(SpraypaintRed);
class TransportItems {
MACRO_ADDITEM(ACE_SpraypaintRed,1);
};
};
class ACE_Item_SpraypaintGreen: ACE_Item_SpraypaintBlack {
- displayName = CSTRING(spraypaintGreen);
+ displayName = CSTRING(SpraypaintGreen);
class TransportItems {
MACRO_ADDITEM(ACE_SpraypaintGreen,1);
};
};
class ACE_Item_SpraypaintBlue: ACE_Item_SpraypaintBlack {
- displayName = CSTRING(spraypaintBlue);
+ displayName = CSTRING(SpraypaintBlue);
class TransportItems {
MACRO_ADDITEM(ACE_SpraypaintBlue,1);
};
@@ -98,4 +72,4 @@ class CfgVehicles {
MACRO_ADDITEM(ACE_SpraypaintGreen,5);
};
};
-};
\ No newline at end of file
+};
diff --git a/addons/tagging/XEH_PREP.hpp b/addons/tagging/XEH_PREP.hpp
index eb29d5a9e3..f8a8598cd7 100644
--- a/addons/tagging/XEH_PREP.hpp
+++ b/addons/tagging/XEH_PREP.hpp
@@ -1,7 +1,5 @@
-
PREP(checkTaggable);
PREP(createTag);
-PREP(tagDirection);
-PREP(tagGround);
-PREP(tagWall);
+PREP(getTexture);
+PREP(tag);
PREP(tagTestingThread);
diff --git a/addons/tagging/functions/fnc_checkTaggable.sqf b/addons/tagging/functions/fnc_checkTaggable.sqf
index 4c8f0c750a..b77473f25b 100644
--- a/addons/tagging/functions/fnc_checkTaggable.sqf
+++ b/addons/tagging/functions/fnc_checkTaggable.sqf
@@ -1,5 +1,5 @@
/*
- * Author: BaerMitUmlaut and esteldunedain
+ * Author: BaerMitUmlaut, esteldunedain
* Checks if there is a taggable surface within 2.5m in front of the player.
*
* Arguments:
diff --git a/addons/tagging/functions/fnc_createTag.sqf b/addons/tagging/functions/fnc_createTag.sqf
index fb966b5b64..4f83196524 100644
--- a/addons/tagging/functions/fnc_createTag.sqf
+++ b/addons/tagging/functions/fnc_createTag.sqf
@@ -1,41 +1,42 @@
/*
- * Author: BaerMitUmlaut and esteldunedain
+ * Author: BaerMitUmlaut, esteldunedain
* Creates a tag and handle its destruction. Only execute on the server.
*
* Arguments:
* 0: Position ASL
* 1: Vector dir and up
- * 2: Colour of the tag (valid colours are black, red, green and blue)
- * 3: Object it should be tied too
+ * 2: Colour of the tag (valid colours are black, red, green and blue or full path to custom texture)
+ * 3: Object it should be tied to
* 4: Unit that created the tag
*
* Return Value:
- * None
+ * Tag created
*
* Example:
- * [positionASL, vectorDirAndUp, "black", object] call ace_tagging_fnc_createTag
+ * [positionASL, vectorDirAndUp, "z\ace\addons\tagging\UI\tags\black\0.paa", object] call ace_tagging_fnc_createTag
*
* Public: No
*/
#include "script_component.hpp"
-params ["_tagPosASL", "_vectorDirAndUp", "_color", "_object", "_unit"];
-TRACE_5("createTag:", _tagPosASL, _vectorDirAndUp, _color, _object, _unit);
+params ["_tagPosASL", "_vectorDirAndUp", "_texture", "_object", "_unit"];
+TRACE_5("createTag:",_tagPosASL,_vectorDirAndUp,_texture,_object,_unit);
-if !((toLower _color) in ["black", "red", "green", "blue"]) exitWith {
- ACE_LOGERROR_1("%1 is not a valid tag color.", _color);
+if (_texture == "") exitWith {
+ ACE_LOGERROR_1("%1 is not a valid tag texture.",_texture);
+ false
};
private _tag = "UserTexture1m_F" createVehicle [0,0,0];
-_tag setObjectTextureGlobal [0, '\z\ace\addons\tagging\UI\tags\' + _color + '\' + str (floor (random 3)) + '.paa'];
+_tag setObjectTextureGlobal [0, _texture];
_tag setPosASL _tagPosASL;
_tag setVectorDirAndUp _vectorDirAndUp;
// Throw a global event for mision makers
-["tagCreated", [_tag, _color, _object, _unit]] call EFUNC(common,globalEvent);
+["tagCreated", [_tag, _texture, _object, _unit]] call EFUNC(common,globalEvent);
-if (isNull _object) exitWith {};
+if (isNull _object) exitWith {true};
// If the tag is applied to an object, handle its destruction
_object setVariable [QGVAR(testVar), true];
@@ -73,3 +74,5 @@ GVAR(tagsToTest) pushBack [_tag, _tagPosASL, _vectorDirAndUp];
if (!GVAR(testingThread)) then {
call FUNC(tagTestingThread);
};
+
+true
diff --git a/addons/tagging/functions/fnc_getTexture.sqf b/addons/tagging/functions/fnc_getTexture.sqf
new file mode 100644
index 0000000000..f7f6d7e5e2
--- /dev/null
+++ b/addons/tagging/functions/fnc_getTexture.sqf
@@ -0,0 +1,26 @@
+/*
+ * Author: BaerMitUmlaut, esteldunedain, Jonpas
+ * Puts together a full path to the given tag color texture. Internal ACE3 textures only.
+ *
+ * Arguments:
+ * 0: The colour of the tag (valid colours are black, red, green and blue)
+ *
+ * Return Value:
+ * Texture (full path), "" if not found
+ *
+ * Example:
+ * texture = ["blue"] call ace_tagging_fnc_getTexture
+ *
+ * Public: No
+ */
+
+#include "script_component.hpp"
+
+params ["_color"];
+
+if !((toLower _color) in ["black", "red", "green", "blue"]) exitWith {
+ ACE_LOGERROR_1("%1 is not a valid tag colour.",_color);
+ ""
+};
+
+QUOTE(PATHTOF(UI)) + "\tags\" + _color + "\" + str (floor (random 3)) + ".paa"
diff --git a/addons/tagging/functions/fnc_tagDirection.sqf b/addons/tagging/functions/fnc_tag.sqf
similarity index 76%
rename from addons/tagging/functions/fnc_tagDirection.sqf
rename to addons/tagging/functions/fnc_tag.sqf
index 2c03d97fd0..43e951629e 100644
--- a/addons/tagging/functions/fnc_tagDirection.sqf
+++ b/addons/tagging/functions/fnc_tag.sqf
@@ -1,25 +1,35 @@
/*
- * Author: BaerMitUmlaut and esteldunedain
- * If possible, create a tag on the first surface between Start and End positions
+ * Author: BaerMitUmlaut, esteldunedain
+ * Creates a tag on a wall that is on the closest surface within 2m on front of the unit.
*
* Arguments:
- * 0: Unit
- * 1: Start position ASL
- * 2: End position ASL
- * 3: The colour of the tag (valid colours are black, red, green and blue)
+ * 0: Unit
+ * 1: The colour of the tag (valid colours are black, red, green and blue or full path to custom texture)
*
* Return Value:
- * Sucess
+ * Sucess
*
* Example:
- * [startPosASL, directiom "blue"] call ace_tagging_fnc_tagDirection
+ * success = [player, "z\ace\addons\tagging\UI\tags\black\0.paa"] call ace_tagging_fnc_tag
*
- * Public: No
+ * Public: Yes
*/
#include "script_component.hpp"
-params ["_unit", "_startPosASL", "_endPosASL", "_color"];
+params [
+ ["_unit", objNull, [objNull]],
+ ["_texture", "", [""]]
+];
+
+if (isNull _unit || {_texture == ""}) exitWith {
+ ACE_LOGERROR_2("Tag parameters invalid. Unit: %1, Texture: %2",_unit,_texture);
+};
+
+private _startPosASL = eyePos _unit;
+private _cameraPosASL = AGLToASL positionCameraToWorld [0, 0, 0];
+private _cameraDir = (AGLToASL positionCameraToWorld [0, 0, 1]) vectorDiff _cameraPosASL;
+private _endPosASL = _startPosASL vectorAdd (_cameraDir vectorMultiply 2.5);
// Check for intersections below the unit
private _intersections = lineIntersectsSurfaces [_startPosASL, _endPosASL, _unit, objNull, true, 1, "GEOM", "FIRE"];
@@ -79,8 +89,6 @@ _fnc_isOk = {
true
};
-#define TAG_SIZE 0.6
-
if ( !([ 0.5*TAG_SIZE, 0.5*TAG_SIZE] call _fnc_isOk) ||
{!([ 0.5*TAG_SIZE,-0.5*TAG_SIZE] call _fnc_isOk) ||
{!([-0.5*TAG_SIZE, 0.5*TAG_SIZE] call _fnc_isOk) ||
@@ -102,6 +110,6 @@ _unit playActionNow "PutDown";
// Tell the server to create the tag and handle its destruction
["createTag", _this] call EFUNC(common,serverEvent);
-}, [_touchingPoint vectorAdd (_surfaceNormal vectorMultiply 0.06), _vectorDirAndUp, _color, _object, _unit], 0.6] call EFUNC(common,waitAndExecute);
+}, [_touchingPoint vectorAdd (_surfaceNormal vectorMultiply 0.06), _vectorDirAndUp, _texture, _object, _unit], 0.6] call EFUNC(common,waitAndExecute);
true
diff --git a/addons/tagging/functions/fnc_tagGround.sqf b/addons/tagging/functions/fnc_tagGround.sqf
deleted file mode 100644
index fa8d1795bf..0000000000
--- a/addons/tagging/functions/fnc_tagGround.sqf
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Author: BaerMitUmlaut and esteldunedain
- * Creates a tag on the ground beneath the unit
- *
- * Arguments:
- * 0: Unit
- * 1: The colour of the tag (valid colours are black, red, green and blue)
- *
- * Return Value:
- * None
- *
- * Example:
- * [player, "blue"] call ace_tagging_fnc_tagGround
- *
- * Public: No
- */
-
-#include "script_component.hpp"
-
-params ["_unit", "_color"];
-
-private _startPosASL = getPosASL _unit;
-private _endPosASL = _startPosASL vectorAdd [0, 0, -2] vectorAdd eyeDirection _unit;
-
-[_unit, _startPosASL, _endPosASL, _color] call FUNC(tagDirection);
diff --git a/addons/tagging/functions/fnc_tagWall.sqf b/addons/tagging/functions/fnc_tagWall.sqf
deleted file mode 100644
index 9b6485f4e8..0000000000
--- a/addons/tagging/functions/fnc_tagWall.sqf
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Author: BaerMitUmlaut and esteldunedain
- * Creates a tag on a wall that is on the closest surface within 2m on front of the unit.
- *
- * Arguments:
- * 0: Unit
- * 1: The colour of the tag (valid colours are black, red, green and blue)
- *
- * Return Value:
- * None
- *
- * Example:
- * [player, "blue"] call ace_tagging_fnc_tagWall
- *
- * Public: No
- */
-
-#include "script_component.hpp"
-
-params ["_unit", "_color"];
-
-private _startPosASL = eyePos _unit;
-private _cameraPosASL = AGLToASL positionCameraToWorld [0, 0, 0];
-private _cameraDir = (AGLToASL positionCameraToWorld [0, 0, 1]) vectorDiff _cameraPosASL;
-private _endPosASL = _startPosASL vectorAdd (_cameraDir vectorMultiply 2.5);
-
-[_unit, _startPosASL, _endPosASL, _color] call FUNC(tagDirection);
diff --git a/addons/tagging/script_component.hpp b/addons/tagging/script_component.hpp
index bb94aae3ff..4836d2f209 100644
--- a/addons/tagging/script_component.hpp
+++ b/addons/tagging/script_component.hpp
@@ -15,3 +15,6 @@
#endif
#include "\z\ace\addons\main\script_macros.hpp"
+
+
+#define TAG_SIZE 0.6
diff --git a/addons/tagging/stringtable.xml b/addons/tagging/stringtable.xml
index 2b1f38ba68..bf4056df49 100644
--- a/addons/tagging/stringtable.xml
+++ b/addons/tagging/stringtable.xml
@@ -1,109 +1,86 @@
-
+
Tag black
Schwarz markieren
Marcar en negro
Oznakuj na czarno
Tag noir
Marca nero
+ Označit černě
-
+
Tag red
Rot markieren
Marcar en rojo
Oznakuj na czerwono
Tag rouge
Marca rosso
+ Označit červeně
-
+
Tag green
Grün markieren
Marcar en verde
Oznakuj na zielono
Tag vert
Marca verde
+ Označit zeleně
-
+
Tag blue
Blau markieren
Marcar en azul
Oznakuj na niebiesko
Tag bleu
Marca blu
+ Označit modře
-
- Tag ground black
- Boden schwarz markieren
- Oznakuj ziemię na czarno
- Marcar suelo en negro
- Tag fond noir
- Segna nero a terra
-
-
- Tag ground red
- Boden rot markieren
- Oznakuj ziemię na czerwono
- Marcar suelo en rojo
- Tag fond rouge
- Segna rosso a terra
-
-
- Tag ground green
- Boden grün markieren
- Oznakuj ziemię na zielono
- Marcar suelo en verde
- Tag fond vert
- Segna verde a terra
-
-
- Tag ground blue
- Boden blau markieren
- Oznakuj ziemię na niebiesko
- Marcar suelo en azul
- Tag font bleu
- Segna blu a terra
-
-
+
Black spray paint
Schwarze Sprühfarbe
Pintura negra
Czarna farba w sprayu
Peinture pulvérisée noire
Bomboletta spray nera
+ Černý sprej
-
+
Red spray paint
Rote Sprühfarbe
Pintura roja
Czerwona farba w sprayu
Peinture pulvérisée rouge
Bomboletta spray rossa
+ Červený sprej
-
+
Green spray paint
Grüne Sprühfarbe
Pintura verde
Zielona farba w sprayu
Peinture pulvérisée verte
Bomboletta spray verde
+ Zelený sprej
-
+
Blue spray paint
Blaue Sprühfarbe
Pintura azul
Niebieska farba w sprayu
Peinture pulvérisée bleue
Bomboletta spray blu
+ Modrý sprej
-
+
A can of spray paint for tagging walls.
Eine Farbsprühdose um Wände zu markieren.
Lata de pintura en aerosol para marcar.
Farba w sprayu, służy do oznakowywania terenu.
Un spray de peinture pour taguer les murs.
Una bomboletta di spay per contrassegnare i muri.
+ Plechovka se sprejem k vytváření značek.
\ No newline at end of file
diff --git a/addons/trenches/stringtable.xml b/addons/trenches/stringtable.xml
index 617a604457..440b3537ba 100644
--- a/addons/trenches/stringtable.xml
+++ b/addons/trenches/stringtable.xml
@@ -8,6 +8,7 @@
Pala
Pala para trincheras
Outil de tranchée
+ Polní lopatka
Entrenching Tool
@@ -16,6 +17,7 @@
Pala
Pala para trincheras
Outil de tranchée
+ Polní lopatky se používají k zákopovým a jiným pracem.
Envelope - Small
@@ -32,6 +34,7 @@
Piccola Trincea Personale
Trinchera personal pequeña
Petite tranchée personelle
+ Malý zákop pro jednoho
Dig Small Trench
@@ -40,6 +43,7 @@
Scava Trincea Piccola
Cavar trinchera pequeña
Creuser une petite tranchée
+ Vykopat malý zákop
Envelope - Big
@@ -56,6 +60,7 @@
Grande Trincea Personale
Trinchera personal grande
Grande tranchée personelle
+ Velký zákop pro jednoho
Dig Big Trench
@@ -64,6 +69,7 @@
Scava Trincea Grande
Cavar trinchera grande
Creuser une grande tranchée
+ Vykopat velký zákop
Confirm Dig
@@ -72,6 +78,7 @@
Conferma Scava
Confirmar cavado
Confirmer la creusée
+ Potvrdit kopání
Cancel Dig
@@ -80,6 +87,7 @@
Cancella Scava
Cancelar cavado
Annuler la creusée
+ Zrušit kopání
Rotate
@@ -100,6 +108,7 @@
Sto Scavando la Trincea
Cavando trinchera
Creuse la tranchée
+ Vykopat zákop
-
+
\ No newline at end of file
diff --git a/addons/tripod/CfgWeapons.hpp b/addons/tripod/CfgWeapons.hpp
index 5ae0ee84d2..adc14912c2 100644
--- a/addons/tripod/CfgWeapons.hpp
+++ b/addons/tripod/CfgWeapons.hpp
@@ -2,16 +2,16 @@ class CfgWeapons {
class ACE_ItemCore;
class InventoryItem_Base_F;
- class ACE_Tripod: ACE_ItemCore {
- author[] = {"Rocko", "Scubaman3D"};
- scope = 2;
- displayName = CSTRING(DisplayName);
- descriptionShort = "";
- model = PATHTOF(data\w_sniper_tripod.p3d);
- picture = PATHTOF(UI\w_sniper_tripod_ca.paa);
+ class ACE_Tripod: ACE_ItemCore {
+ author[] = {"Rocko", "Scubaman3D"};
+ scope = 2;
+ displayName = CSTRING(DisplayName);
+ descriptionShort = "";
+ model = PATHTOF(data\w_sniper_tripod.p3d);
+ picture = PATHTOF(UI\w_sniper_tripod_ca.paa);
class ItemInfo: InventoryItem_Base_F {
mass = 40;
};
- };
+ };
};
diff --git a/addons/ui/ACE_Settings.hpp b/addons/ui/ACE_Settings.hpp
new file mode 100644
index 0000000000..89ddc8d35d
--- /dev/null
+++ b/addons/ui/ACE_Settings.hpp
@@ -0,0 +1,217 @@
+class ACE_Settings {
+ class GVAR(allowSelectiveUI) {
+ category = CSTRING(Category);
+ displayName = CSTRING(AllowSelectiveUI);
+ description = CSTRING(AllowSelectiveUI_Description);
+ typeName = "BOOL";
+ value = 1;
+ };
+
+// BASIC
+ class GVAR(soldierVehicleWeaponInfo) {
+ category = CSTRING(Category);
+ displayName = CSTRING(SoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ value = 1;
+ isClientSettable = 1;
+ };
+ class GVAR(vehicleRadar) {
+ category = CSTRING(Category);
+ displayName = CSTRING(VehicleRadar);
+ typeName = "BOOL";
+ value = 1;
+ isClientSettable = 1;
+ };
+ class GVAR(vehicleCompass) {
+ category = CSTRING(Category);
+ displayName = CSTRING(VehicleCompass);
+ typeName = "BOOL";
+ value = 1;
+ isClientSettable = 1;
+ };
+ class GVAR(commandMenu) {
+ category = CSTRING(Category);
+ displayName = CSTRING(CommandMenu);
+ typeName = "BOOL";
+ value = 1;
+ isClientSettable = 1;
+ };
+ class GVAR(groupBar) {
+ category = CSTRING(Category);
+ displayName = CSTRING(GroupBar);
+ typeName = "BOOL";
+ value = 0;
+ isClientSettable = 1;
+ };
+
+// ADVANCED
+ // Upper Weapon Info
+ class GVAR(weaponName) {
+ category = CSTRING(Category);
+ displayName = CSTRING(WeaponName);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ value = 1;
+ isClientSettable = 1;
+ };
+ class GVAR(weaponNameBackground) {
+ category = CSTRING(Category);
+ displayName = CSTRING(WeaponNameBackground);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ value = 1;
+ isClientSettable = 1;
+ };
+ class GVAR(firingMode) {
+ category = CSTRING(Category);
+ displayName = CSTRING(FiringMode);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ value = 1;
+ isClientSettable = 1;
+ };
+
+ // Lower Weapon Info
+ class GVAR(ammoType) {
+ category = CSTRING(Category);
+ displayName = CSTRING(AmmoType);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ value = 1;
+ isClientSettable = 1;
+ };
+ class GVAR(ammoCount) {
+ category = CSTRING(Category);
+ displayName = CSTRING(AmmoCount);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ value = 0;
+ isClientSettable = 1;
+ };
+ class GVAR(magCount) {
+ category = CSTRING(Category);
+ displayName = CSTRING(MagCount);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ value = 1;
+ isClientSettable = 1;
+ };
+ class GVAR(throwableName) {
+ category = CSTRING(Category);
+ displayName = CSTRING(throwableName);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ value = 1;
+ isClientSettable = 1;
+ };
+ class GVAR(throwableCount) {
+ category = CSTRING(Category);
+ displayName = CSTRING(throwableCount);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ value = 1;
+ isClientSettable = 1;
+ };
+ class GVAR(zeroing) {
+ category = CSTRING(Category);
+ displayName = CSTRING(Zeroing);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ value = 1;
+ isClientSettable = 1;
+ };
+ class GVAR(weaponLowerInfoBackground) {
+ category = CSTRING(Category);
+ displayName = CSTRING(WeaponLowerInfoBackground); //todo
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ value = 1;
+ isClientSettable = 1;
+ };
+
+ // Stance
+ class GVAR(stance) {
+ category = CSTRING(Category);
+ displayName = CSTRING(Stance);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ value = 1;
+ isClientSettable = 1;
+ };
+
+ // Stamina Bar
+ class GVAR(staminaBar) {
+ category = CSTRING(Category);
+ displayName = CSTRING(StaminaBar);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ value = 1;
+ isClientSettable = 1;
+ };
+
+ // Vehicle
+ class GVAR(vehicleName) {
+ category = CSTRING(Category);
+ displayName = CSTRING(VehicleName);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ value = 1;
+ isClientSettable = 1;
+ };
+ class GVAR(vehicleNameBackground) {
+ category = CSTRING(Category);
+ displayName = CSTRING(VehicleNameBackground);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ value = 1;
+ isClientSettable = 1;
+ };
+ class GVAR(vehicleFuelBar) {
+ category = CSTRING(Category);
+ displayName = CSTRING(VehicleFuelBar);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ value = 1;
+ isClientSettable = 1;
+ };
+ class GVAR(vehicleSpeed) {
+ category = CSTRING(Category);
+ displayName = CSTRING(VehicleSpeed);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ value = 1;
+ isClientSettable = 1;
+ };
+ class GVAR(vehicleAltitude) {
+ category = CSTRING(Category);
+ displayName = CSTRING(VehicleAltitude);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ value = 1;
+ isClientSettable = 1;
+ };
+ class GVAR(vehicleDamage) {
+ category = CSTRING(Category);
+ displayName = CSTRING(VehicleDamage);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ value = 1;
+ isClientSettable = 1;
+ };
+ class GVAR(vehicleInfoBackground) {
+ category = CSTRING(Category);
+ displayName = CSTRING(VehicleInfoBackground);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ value = 1;
+ isClientSettable = 1;
+ };
+ class GVAR(vehicleGunnerWeapon) {
+ category = CSTRING(Category);
+ displayName = CSTRING(VehicleGunnerWeapon);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ value = 1;
+ isClientSettable = 1;
+ };
+};
diff --git a/addons/ui/CfgEventHandlers.hpp b/addons/ui/CfgEventHandlers.hpp
new file mode 100644
index 0000000000..36c0fca8a3
--- /dev/null
+++ b/addons/ui/CfgEventHandlers.hpp
@@ -0,0 +1,17 @@
+class Extended_PreStart_EventHandlers {
+ class ADDON {
+ init = QUOTE(call COMPILE_FILE(XEH_preStart));
+ };
+};
+
+class Extended_PreInit_EventHandlers {
+ class ADDON {
+ init = QUOTE(call COMPILE_FILE(XEH_preInit));
+ };
+};
+
+class Extended_PostInit_EventHandlers {
+ class ADDON {
+ clientInit = QUOTE(call COMPILE_FILE(XEH_clientInit));
+ };
+};
diff --git a/addons/ui/CfgVehicles.hpp b/addons/ui/CfgVehicles.hpp
new file mode 100644
index 0000000000..391b3627eb
--- /dev/null
+++ b/addons/ui/CfgVehicles.hpp
@@ -0,0 +1,181 @@
+class CfgVehicles {
+ class ACE_Module;
+ class GVAR(Module): ACE_Module {
+ author = ECSTRING(common,ACETeam);
+ category = "ACE";
+ displayName = CSTRING(ModuleName);
+ function = QFUNC(moduleInit);
+ scope = 2;
+ isGlobal = 1;
+ icon = QUOTE(PATHTOF(UI\Icon_Module_UI_ca.paa));
+ class Arguments {
+ class allowSelectiveUI {
+ displayName = CSTRING(AllowSelectiveUI);
+ description = CSTRING(AllowSelectiveUI_Description);
+ typeName = "BOOL";
+ defaultValue = 1;
+ };
+
+ // BASIC
+ class soldierVehicleWeaponInfo {
+ displayName = CSTRING(SoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ defaultValue = 1;
+ };
+ class vehicleRadar {
+ displayName = CSTRING(VehicleRadar);
+ typeName = "BOOL";
+ defaultValue = 1;
+ };
+ class vehicleCompass {
+ displayName = CSTRING(VehicleCompass);
+ typeName = "BOOL";
+ defaultValue = 1;
+ };
+ class commandMenu {
+ displayName = CSTRING(CommandMenu);
+ typeName = "BOOL";
+ defaultValue = 1;
+ };
+ class groupBar {
+ displayName = CSTRING(GroupBar);
+ typeName = "BOOL";
+ defaultValue = 0;
+ };
+
+ // ADVANCED
+ // Upper Weapon Info
+ class weaponName {
+ displayName = CSTRING(WeaponName);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ defaultValue = 1;
+ };
+ class weaponNameBackground {
+ displayName = CSTRING(WeaponNameBackground);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ defaultValue = 1;
+ };
+ class firingMode {
+ displayName = CSTRING(FiringMode);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ defaultValue = 1;
+ };
+
+ // Lower Weapon Info
+ class ammoType {
+ displayName = CSTRING(AmmoType);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ defaultValue = 1;
+ };
+ class ammoCount {
+ displayName = CSTRING(AmmoCount);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ defaultValue = 0;
+ };
+ class magCount {
+ displayName = CSTRING(MagCount);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ defaultValue = 1;
+ };
+ class throwableName {
+ displayName = CSTRING(throwableName);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ defaultValue = 1;
+ };
+ class throwableCount {
+ displayName = CSTRING(throwableCount);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ defaultValue = 1;
+ };
+ class zeroing {
+ displayName = CSTRING(Zeroing);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ defaultValue = 1;
+ };
+ class weaponLowerInfoBackground {
+ displayName = CSTRING(WeaponLowerInfoBackground);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ defaultValue = 1;
+ };
+
+ // Stance
+ class stance {
+ displayName = CSTRING(Stance);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ defaultValue = 1;
+ };
+
+ // Stamina Bar
+ class staminaBar {
+ displayName = CSTRING(StaminaBar);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ defaultValue = 1;
+ };
+
+ // Vehicle
+ class vehicleName {
+ displayName = CSTRING(VehicleName);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ defaultValue = 1;
+ };
+ class vehicleNameBackground {
+ displayName = CSTRING(VehicleNameBackground);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ defaultValue = 1;
+ };
+ class vehicleFuelBar {
+ displayName = CSTRING(VehicleFuelBar);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ defaultValue = 1;
+ };
+ class vehicleSpeed {
+ displayName = CSTRING(VehicleSpeed);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ defaultValue = 1;
+ };
+ class vehicleAltitude {
+ displayName = CSTRING(VehicleAltitude);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ defaultValue = 1;
+ };
+ class vehicleDamage {
+ displayName = CSTRING(VehicleDamage);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ defaultValue = 1;
+ };
+ class vehicleInfoBackground {
+ displayName = CSTRING(VehicleInfoBackground);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ defaultValue = 1;
+ };
+ class vehicleGunnerWeapon {
+ displayName = CSTRING(VehicleGunnerWeapon);
+ description = CSTRING(RequiresSoldierVehicleWeaponInfo);
+ typeName = "BOOL";
+ defaultValue = 1;
+ };
+ };
+ class ModuleDescription {
+ description = CSTRING(ModuleDescription);
+ };
+ };
+};
diff --git a/addons/ui/README.md b/addons/ui/README.md
index 340e3ad0f6..c55ffbc5c7 100644
--- a/addons/ui/README.md
+++ b/addons/ui/README.md
@@ -1,7 +1,7 @@
ace_ui
=======
-Removes vignette and changes the chat contrast on the map to allow easier reading.
+Removes vignette, changes the chat contrast on the map to allow easier reading and provides settings to hide or show different UI elements.
## Maintainers
@@ -9,3 +9,4 @@ Removes vignette and changes the chat contrast on the map to allow easier readin
The people responsible for merging changes to this component or answering potential questions.
- [VKing](https://github.com/VKing6)
+- [Jonpas](https://github.com/jonpas)
diff --git a/addons/ui/UI/Icon_Module_UI_ca.paa b/addons/ui/UI/Icon_Module_UI_ca.paa
new file mode 100644
index 0000000000..f23b8b40c9
Binary files /dev/null and b/addons/ui/UI/Icon_Module_UI_ca.paa differ
diff --git a/addons/ui/XEH_PREP.hpp b/addons/ui/XEH_PREP.hpp
new file mode 100644
index 0000000000..8a6b4d2ce1
--- /dev/null
+++ b/addons/ui/XEH_PREP.hpp
@@ -0,0 +1,4 @@
+PREP(moduleInit);
+PREP(setAdvancedElement);
+PREP(setElements);
+PREP(setElementVisibility);
diff --git a/addons/ui/XEH_clientInit.sqf b/addons/ui/XEH_clientInit.sqf
new file mode 100644
index 0000000000..d228696fc0
--- /dev/null
+++ b/addons/ui/XEH_clientInit.sqf
@@ -0,0 +1,40 @@
+#include "script_component.hpp"
+
+// Exit on Headless
+if (!hasInterface) exitWith {};
+
+["SettingsInitialized", {
+ // Initial settings
+ [true] call FUNC(setElements);
+
+ // On load and entering/exiting a vehicle
+ ["infoDisplayChanged", {
+ // Selective UI Advanced
+ // Defaults must be set in this EH to make sure controls are activated and advanced settings can be modified
+ private _force = [true, false] select (GVAR(allowSelectiveUI));
+ {
+ [_x select 0, _x select 1, _x select 2, _force] call FUNC(setAdvancedElement);
+ } forEach ELEMENTS_ADVANCED;
+ }] call EFUNC(common,addEventHandler);
+
+ // On changing settings
+ ["SettingChanged", {
+ params ["_name"];
+
+ // Selective UI Basic
+ if (_name in ELEMENTS_BASIC) then {
+ [false] call FUNC(setElements);
+ };
+
+ // Selective UI Advanced
+ {
+ _x params ["_idd", "_elements", "_elementName"];
+
+ if (_name == _elementName) then {
+ [_idd, _elements, _elementName] call FUNC(setAdvancedElement);
+ TRACE_2("Setting Changed",_name,_elementName);
+ };
+ } forEach ELEMENTS_ADVANCED;
+ }] call EFUNC(common,addEventHandler);
+
+}] call EFUNC(common,addEventHandler);
diff --git a/addons/ui/XEH_preInit.sqf b/addons/ui/XEH_preInit.sqf
new file mode 100644
index 0000000000..4a5638fc03
--- /dev/null
+++ b/addons/ui/XEH_preInit.sqf
@@ -0,0 +1,9 @@
+#include "script_component.hpp"
+
+ADDON = false;
+
+#include "XEH_PREP.hpp"
+
+GVAR(elementsSet) = [];
+
+ADDON = true;
diff --git a/addons/ui/XEH_preStart.sqf b/addons/ui/XEH_preStart.sqf
new file mode 100644
index 0000000000..022888575e
--- /dev/null
+++ b/addons/ui/XEH_preStart.sqf
@@ -0,0 +1,3 @@
+#include "script_component.hpp"
+
+#include "XEH_PREP.hpp"
diff --git a/addons/ui/config.cpp b/addons/ui/config.cpp
index f545600758..d6fbed61ae 100644
--- a/addons/ui/config.cpp
+++ b/addons/ui/config.cpp
@@ -12,5 +12,9 @@ class CfgPatches {
};
};
+#include "CfgEventHandlers.hpp"
+#include "CfgVehicles.hpp"
+#include "ACE_Settings.hpp"
+
#include "RscChat.hpp"
#include "RscVignette.hpp"
diff --git a/addons/ui/functions/fnc_moduleInit.sqf b/addons/ui/functions/fnc_moduleInit.sqf
new file mode 100644
index 0000000000..10f18f94f3
--- /dev/null
+++ b/addons/ui/functions/fnc_moduleInit.sqf
@@ -0,0 +1,56 @@
+/*
+ * Author: Jonpas
+ * Initializes the UI module.
+ *
+ * Arguments:
+ * 0: Module Logic
+ * 1: Units
+ * 2: Activated
+ *
+ * Return Value:
+ * None
+ */
+#include "script_component.hpp"
+
+if (!isServer) exitWith {};
+
+params ["_logic", "_units", "_activated"];
+
+if (!_activated) exitWith {};
+
+// Basic
+if (isArray (missionConfigFile >> "showHUD")) then {
+ // HUD visibility is hardcoded in mission config and showHUD command is overriden
+ ACE_LOGINFO("User Interface Module Failed to Initialize Basic settings - showHUD overriden in mission config!");
+} else {
+ [_logic, QGVAR(allowSelectiveUI), "allowSelectiveUI"] call EFUNC(common,readSettingFromModule);
+ [_logic, QGVAR(soldierVehicleWeaponInfo), "soldierVehicleWeaponInfo"] call EFUNC(common,readSettingFromModule);
+ [_logic, QGVAR(vehicleRadar), "vehicleRadar"] call EFUNC(common,readSettingFromModule);
+ [_logic, QGVAR(vehicleCompass), "vehicleCompass"] call EFUNC(common,readSettingFromModule);
+ [_logic, QGVAR(commandMenu), "commandMenu"] call EFUNC(common,readSettingFromModule);
+ [_logic, QGVAR(groupBar), "groupBar"] call EFUNC(common,readSettingFromModule);
+};
+
+// Advanced
+[_logic, QGVAR(weaponName), "weaponName"] call EFUNC(common,readSettingFromModule);
+[_logic, QGVAR(weaponNameBackground), "weaponNameBackground"] call EFUNC(common,readSettingFromModule);
+[_logic, QGVAR(firingMode), "firingMode"] call EFUNC(common,readSettingFromModule);
+[_logic, QGVAR(ammoType), "ammoType"] call EFUNC(common,readSettingFromModule);
+[_logic, QGVAR(ammoCount), "ammoCount"] call EFUNC(common,readSettingFromModule);
+[_logic, QGVAR(magCount), "magCount"] call EFUNC(common,readSettingFromModule);
+[_logic, QGVAR(throwableName), "throwableName"] call EFUNC(common,readSettingFromModule);
+[_logic, QGVAR(throwableCount), "throwableCount"] call EFUNC(common,readSettingFromModule);
+[_logic, QGVAR(zeroing), "zeroing"] call EFUNC(common,readSettingFromModule);
+[_logic, QGVAR(weaponLowerInfoBackground), "weaponLowerInfoBackground"] call EFUNC(common,readSettingFromModule);
+[_logic, QGVAR(stance), "stance"] call EFUNC(common,readSettingFromModule);
+[_logic, QGVAR(staminaBar), "staminaBar"] call EFUNC(common,readSettingFromModule);
+[_logic, QGVAR(vehicleName), "vehicleName"] call EFUNC(common,readSettingFromModule);
+[_logic, QGVAR(vehicleNameBackground), "vehicleNameBackground"] call EFUNC(common,readSettingFromModule);
+[_logic, QGVAR(vehicleFuelBar), "vehicleFuelBar"] call EFUNC(common,readSettingFromModule);
+[_logic, QGVAR(vehicleSpeed), "vehicleSpeed"] call EFUNC(common,readSettingFromModule);
+[_logic, QGVAR(vehicleAltitude), "vehicleAltitude"] call EFUNC(common,readSettingFromModule);
+[_logic, QGVAR(vehicleDamage), "vehicleDamage"] call EFUNC(common,readSettingFromModule);
+[_logic, QGVAR(vehicleInfoBackground), "vehicleInfoBackground"] call EFUNC(common,readSettingFromModule);
+[_logic, QGVAR(vehicleGunnerWeapon), "vehicleGunnerWeapon"] call EFUNC(common,readSettingFromModule);
+
+ACE_LOGINFO_1("User Interface Module Initialized. Allow client modifications: %1",GVAR(allowSelectiveUI));
diff --git a/addons/ui/functions/fnc_setAdvancedElement.sqf b/addons/ui/functions/fnc_setAdvancedElement.sqf
new file mode 100644
index 0000000000..2ef88d5868
--- /dev/null
+++ b/addons/ui/functions/fnc_setAdvancedElement.sqf
@@ -0,0 +1,53 @@
+/*
+ * Author: Jonpas
+ * Sets advanced visible element of the UI using displays and controls.
+ *
+ * Arguments:
+ * 0: Element IDD
+ * 1: Element IDCs
+ * 2: Show/Hide Element OR Element ACE Settings Variable
+ * 3: Force change even when disallowed (default: false)
+ *
+ * Return Value:
+ * Successfully Set
+ *
+ * Example:
+ * [303, [188], true, false] call ace_ui_fnc_setAdvancedElement
+ *
+ * Public: No
+ */
+#include "script_component.hpp"
+
+params ["_idd", "_elements", "_show", ["_force", false, [true]] ];
+
+if (_elementInfo in GVAR(elementsSet)) exitWith {};
+
+if (!_force && {!GVAR(allowSelectiveUI)}) exitWith {
+ [LSTRING(Disallowed), 2] call EFUNC(common,displayTextStructured)
+};
+
+// Get show/hide boolean from mission namespace if it's a string
+if (typeName _show == "STRING") then {
+ _show = missionNamespace getVariable _show;
+};
+_show = [1, 0] select _show;
+
+// Disable/Enable elements
+private _success = false;
+{
+ private _idc = _x;
+
+ // Loop through IGUI displays as they can be present several times for some reason
+ {
+ if (_idd == ctrlIDD _x) then {
+ TRACE_3("Setting Element Visibility",_show,_idd,_idc);
+
+ (_x displayCtrl _idc) ctrlSetFade _show;
+ (_x displayCtrl _idc) ctrlCommit 0;
+
+ _success = true;
+ };
+ } forEach (uiNamespace getVariable "IGUI_displays");
+} forEach _elements;
+
+_success
diff --git a/addons/ui/functions/fnc_setElementVisibility.sqf b/addons/ui/functions/fnc_setElementVisibility.sqf
new file mode 100644
index 0000000000..b019c4c081
--- /dev/null
+++ b/addons/ui/functions/fnc_setElementVisibility.sqf
@@ -0,0 +1,52 @@
+/*
+ * Author: Jonpas
+ * Setter for toggling advanced element visibility.
+ *
+ * Arguments:
+ * 0: Set/Unset (default: true)
+ * 1: Element IDD (default: 0)
+ * 2: Element IDCs (default: [])
+ * 3: Show/Hide Element OR Element ACE Settings Variable (default: false)
+ *
+ * Return Value:
+ * None
+ *
+ * Example:
+ * [true, 300, [188], false] call ace_ui_fnc_setElementVisibility
+ *
+ * Public: Yes
+ */
+#include "script_component.hpp"
+
+params [
+ ["_set", true, [true]],
+ ["_idd", 0, [0]],
+ ["_elements", [], [[]]],
+ ["_show", false, [true, ""]]
+];
+
+private _return = false;
+
+if (_set) then {
+ if ([_idd, _elements] in GVAR(elementsSet)) exitWith { TRACE_3("Element already set",_idd,_elements,GVAR(elementsSet)); };
+
+ TRACE_4("Setting element",_idd,_elements,_show,GVAR(elementsSet));
+ private _success = [_idd, _elements, _show] call FUNC(setAdvancedElement);
+
+ if (_success) then {
+ GVAR(elementsSet) pushBack [_idd, _elements];
+ _return = true;
+ };
+} else {
+ if ([_idd, _elements] in GVAR(elementsSet)) then {
+ TRACE_4("Setting element",_idd,_elements,_show,GVAR(elementsSet));
+ [_idd, _elements, _show] call FUNC(setAdvancedElement);
+
+ private _index = GVAR(elementsSet) find [_idd, _elements];
+ GVAR(elementsSet) deleteAt _index;
+ _return = true;
+ };
+};
+
+TRACE_2("Visibility set",_return,GVAR(elementsSet));
+_return
diff --git a/addons/ui/functions/fnc_setElements.sqf b/addons/ui/functions/fnc_setElements.sqf
new file mode 100644
index 0000000000..b94b0f9a22
--- /dev/null
+++ b/addons/ui/functions/fnc_setElements.sqf
@@ -0,0 +1,37 @@
+/*
+ * Author: Jonpas
+ * Sets basic visible elements of the UI using showHUD setter.
+ *
+ * Arguments:
+ * 0: Force change even when disallowed (default: false)
+ *
+ * Return Value:
+ * None
+ *
+ * Example:
+ * [false] call ace_ui_fnc_setElements
+ *
+ * Public: No
+ */
+#include "script_component.hpp"
+
+if (isArray (missionConfigFile >> "showHUD")) exitWith {};
+
+params [ ["_force", false, [true]] ];
+
+if (!_force && {!GVAR(allowSelectiveUI)}) exitWith {
+ [LSTRING(Disallowed), 2] call EFUNC(common,displayTextStructured);
+};
+
+private _shownHUD = shownHUD; // [hud, info, radar, compass, direction, menu, group, cursors]
+
+["ui", [
+ _shownHUD select 0,
+ GVAR(soldierVehicleWeaponInfo),
+ GVAR(vehicleRadar),
+ GVAR(vehicleCompass),
+ _shownHUD select 4,
+ GVAR(commandMenu),
+ GVAR(groupBar),
+ _shownHUD select 7
+]] call EFUNC(common,showHud);
diff --git a/addons/ui/functions/script_component.hpp b/addons/ui/functions/script_component.hpp
new file mode 100644
index 0000000000..656228f742
--- /dev/null
+++ b/addons/ui/functions/script_component.hpp
@@ -0,0 +1 @@
+#include "\z\ace\addons\ui\script_component.hpp"
diff --git a/addons/ui/script_component.hpp b/addons/ui/script_component.hpp
index 2c669b78e5..a7410a49b8 100644
--- a/addons/ui/script_component.hpp
+++ b/addons/ui/script_component.hpp
@@ -15,3 +15,81 @@
#endif
#include "\z\ace\addons\main\script_macros.hpp"
+
+
+// Elements
+#define ELEMENTS_BASIC [QGVAR(soldierVehicleWeaponInfo), QGVAR(vehicleRadar), QGVAR(vehicleCompass), QGVAR(commandMenu), QGVAR(groupBar)]
+
+// IDD, IDC, Element (must be string to compare to changed setting name)
+#define ELEMENTS_ADVANCED [ \
+ [300, [118], QGVAR(weaponName)], \
+ [300, [1001, 1008], QGVAR(weaponNameBackground)], \
+ [300, [187, 1203], QGVAR(firingMode)], \
+ [300, [155], QGVAR(ammoType)], \
+ [300, [184], QGVAR(ammoCount)], \
+ [300, [185], QGVAR(magCount)], \
+ [300, [152], QGVAR(throwableName)], \
+ [300, [151], QGVAR(throwableCount)], \
+ [300, [1202], QGVAR(weaponLowerInfoBackground)], \
+ [300, [168], QGVAR(zeroing)], \
+ [305, [193], QGVAR(staminaBar)], \
+ [303, [188, 1201], QGVAR(stance)], \
+ [300, [120], QGVAR(vehicleName)], \
+ [300, [1000, 1013], QGVAR(vehicleNameBackground)], \
+ [300, [113, 1202], QGVAR(vehicleFuelBar)], \
+ [300, [121, 1004, 1006], QGVAR(vehicleSpeed)], \
+ [300, [122, 1005, 1014], QGVAR(vehicleAltitude)], \
+ [300, [111], QGVAR(vehicleDamage)], \
+ [300, [1200], QGVAR(vehicleInfoBackground)], \
+ [300, [150], QGVAR(vehicleGunnerWeapon)] \
+]
+
+
+/*
+RscUnitInfo = 300
+--------------------
+118 (Weapon Name)
++ 1001 (Weapon Name Background 1/2)
++ 1008 (Weapon Name Background 2/2)
+
+187 (Firing Mode)
++ 1203 (Firing Mode Background)
+
+155 (Ammo Type)
+184 (Ammo Count) - disabled in config by ace_reload
+185 (Magazine Count)
+152 (Grenade/Flare Type)
+151 (Grenade/Flare Count)
+1202 (Lower Weapon Info Background)
+168 (Zeroing)
+
+
+120 (Vehicle Name)
+1000 (Vehicle Name Background 1/2)
++ 1013 (Vehicle Name Background 2/2)
+
+113 (Vehicle Fuel Bar)
++ 1202 (Vehicle Fuel Bar Background)
+
+121 (Vehicle Speed Number)
++ 1004 (Vehicle Speed Unit)
++ 1006 (Vehicle Speed Background)
+122 (Vehicle Altitude Number)
++ 1005 (Vehicle Altitude Units)
++ 1014 (Vehicle Altitude Background)
+111 (Vehicle Damage)
+1200 (Vehicle Info Background)
+
+150 (Vehicle Gunner Weapon)
+
+
+RscStanceInfo = 303
+--------------------
+188 (Stance)
++ 1201 (Stance Background)
+
+
+RscStaminaBar = 305
+--------------------
+193 (Stamina Bar)
+*/
diff --git a/addons/ui/stringtable.xml b/addons/ui/stringtable.xml
new file mode 100644
index 0000000000..74cd89e93b
--- /dev/null
+++ b/addons/ui/stringtable.xml
@@ -0,0 +1,131 @@
+
+
+
+
+ User Interface
+ Uživatelské rozhraní
+
+
+ User Interface
+ Uživatelské rozhraní
+
+
+ This module allows toggling visible user interface parts.
+
+
+ Allow Selective UI
+ Povolit selektivní UI
+
+
+ Allow client to modify their UI.
+ Povolit klientovi měnit jeho UI
+
+
+ Soldier/Vehicle/Weapon Information
+ Informace o Vojákovi/Vozidlu/Zbrani
+
+
+ Vehicle Radar
+ Radar vozidla
+
+
+ Vehicle Compass
+ Kompas vozidla
+
+
+ Command Menu
+ Menu rozkazů
+
+
+ Group Bar
+ Panel skupiny
+
+
+ Weapon Name
+ Název zbraně
+
+
+ Weapon Name Background
+ Název zbraně v pozadí
+
+
+ Firing Mode
+ Režim palby
+
+
+ Ammo Type
+ Typ munice
+
+
+ Ammo Count
+ Počet munice
+
+
+ Magazine Count
+ Počet zásobníků
+
+
+ Throwable Type
+ Typ granátů apod.
+
+
+ Throwable Count
+ Počet granátů apod.
+
+
+ Zeroing
+ Náměr
+
+
+ Weapon Lower Info Background
+
+
+ Stance
+ Postoj
+
+
+ Stamina Bar
+ Panel výdrže
+
+
+ Vehicle Name
+ Název vozidla
+
+
+ Vehicle Name Background
+ Název vozidla v pozadí
+
+
+ Vehicle Fuel Bar
+ Ukazatel paliva
+
+
+ Vehicle Speed
+ Rychlost vozidla
+
+
+ Vehicle Altitude
+ Výška vozidla
+
+
+ Vehicle Damage
+ Poškození vozidla
+
+
+ Vehicle Info Background
+ Info o vozidle v pozadí
+
+
+ Vehicle Gunner Weapon
+ Střelcova zbraň ve vozidle
+
+
+ Requires Soldier/Vehicle/Weapons Information.
+ Vyžaduje informace o Vojákovi/Vozidlu/Zbrani
+
+
+ Modifying User Interface is disabled.
+ Změna uživatelského rozhraní je zakázána.
+
+
+
\ No newline at end of file
diff --git a/addons/vector/CfgWeapons.hpp b/addons/vector/CfgWeapons.hpp
index 019d774da8..a28321bdc8 100644
--- a/addons/vector/CfgWeapons.hpp
+++ b/addons/vector/CfgWeapons.hpp
@@ -13,4 +13,9 @@ class CfgWeapons {
opticsZoomMin = 0.06621;
weaponInfoType = "ACE_RscOptics_vector";
};
+ class ACE_VectorDay: ACE_Vector {
+ author = ECSTRING(common,ACETeam);
+ displayName = CSTRING(VectorDayName);
+ visionMode[] = {"Normal"};
+ };
};
diff --git a/addons/vector/config.cpp b/addons/vector/config.cpp
index e2a52b47ef..e4cdf9a55b 100644
--- a/addons/vector/config.cpp
+++ b/addons/vector/config.cpp
@@ -3,7 +3,7 @@
class CfgPatches {
class ADDON {
units[] = {"ACE_Item_Vector"};
- weapons[] = {"ACE_Vector"};
+ weapons[] = {"ACE_Vector", "ACE_VectorDay"};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_common"};
author[] = {"Ghost","Hamburger SV","commy2","bux578"};
diff --git a/addons/vector/functions/fnc_onKeyHold.sqf b/addons/vector/functions/fnc_onKeyHold.sqf
index ff4e5fc6ad..517cf3ea37 100644
--- a/addons/vector/functions/fnc_onKeyHold.sqf
+++ b/addons/vector/functions/fnc_onKeyHold.sqf
@@ -7,7 +7,7 @@ PFH executed while holding a vector key down.
*/
#include "script_component.hpp"
-if (currentWeapon ACE_player != "ACE_Vector") exitWith {
+if (!((currentWeapon ACE_player) isKindOf ["ACE_Vector", configFile >> "CfgWeapons"])) exitWith {
[_this select 1] call CBA_fnc_removePerFrameHandler;
GVAR(currentMode) = "";
diff --git a/addons/vector/initKeybinds.sqf b/addons/vector/initKeybinds.sqf
index babef0819c..5b099235da 100644
--- a/addons/vector/initKeybinds.sqf
+++ b/addons/vector/initKeybinds.sqf
@@ -5,7 +5,7 @@
// Conditions: canInteract
if !([ACE_player, objNull, ["isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false};
// Conditions: specific
- if !(currentWeapon ACE_player == "ACE_Vector" && {cameraView == "GUNNER"}) exitWith {false};
+ if !(((currentWeapon ACE_player) isKindOf ["ACE_Vector", configFile >> "CfgWeapons"]) && {cameraView == "GUNNER"}) exitWith {false};
// prevent holding down
if (GETGVAR(isDownStateKey1,false)) exitWith {false};
@@ -34,7 +34,7 @@
// Conditions: canInteract
if !([ACE_player, objNull, ["isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false};
// Conditions: specific
- if !(currentWeapon ACE_player == "ACE_Vector" && {cameraView == "GUNNER"}) exitWith {false};
+ if !(((currentWeapon ACE_player) isKindOf ["ACE_Vector", configFile >> "CfgWeapons"]) && {cameraView == "GUNNER"}) exitWith {false};
// prevent holding down
if (GETGVAR(isDownStateKey2,false)) exitWith {false};
diff --git a/addons/vector/stringtable.xml b/addons/vector/stringtable.xml
index 80135294d4..fd8d73858c 100644
--- a/addons/vector/stringtable.xml
+++ b/addons/vector/stringtable.xml
@@ -2,6 +2,18 @@
+ Vector 21 Nite
+ Vector 21 Nite
+ Vector 21 Nite
+ Vector 21 Nite
+ Vector 21 Nite
+ Vector 21 Nite
+ Vector 21 Nite
+ Vector 21 Nite
+ Vector 21 Nite
+ Vector 21 Nite
+
+
Vector 21
Vector 21
Vector 21
diff --git a/addons/vehiclelock/CfgEventHandlers.hpp b/addons/vehiclelock/CfgEventHandlers.hpp
index 705415e65d..712cc2be1c 100644
--- a/addons/vehiclelock/CfgEventHandlers.hpp
+++ b/addons/vehiclelock/CfgEventHandlers.hpp
@@ -17,14 +17,6 @@ class Extended_PostInit_EventHandlers {
};
};
-class Extended_InventoryOpened_EventHandlers {
- class CAManBase {
- class ADDON {
- clientInventoryOpened = QUOTE(_this call FUNC(onOpenInventory););
- };
- };
-};
-
class Extended_InitPost_EventHandlers {
class Car {
class ADDON {
diff --git a/addons/vehiclelock/XEH_postInit.sqf b/addons/vehiclelock/XEH_postInit.sqf
index c635de2bd3..93d8bd6426 100644
--- a/addons/vehiclelock/XEH_postInit.sqf
+++ b/addons/vehiclelock/XEH_postInit.sqf
@@ -3,3 +3,13 @@
//Add Event Handlers
["VehicleLock_SetupCustomKey", {_this call FUNC(serverSetupCustomKeyEH)}] call EFUNC(common,addEventHandler);
["VehicleLock_SetVehicleLock", {_this call FUNC(setVehicleLockEH)}] call EFUNC(common,addEventHandler);
+
+if (!hasInterface) exitwith {};
+
+["SettingsInitialized", {
+ TRACE_1("SettingsInitialized eh",GVAR(LockVehicleInventory));
+
+ if (GVAR(LockVehicleInventory)) then {
+ ["CAManBase", "InventoryOpened", {_this call FUNC(onOpenInventory);}] call CBA_fnc_addClassEventHandler;
+ };
+}] call EFUNC(common,addEventHandler);
diff --git a/addons/vehiclelock/functions/fnc_onOpenInventory.sqf b/addons/vehiclelock/functions/fnc_onOpenInventory.sqf
index 17682c72de..5ac9ee427e 100644
--- a/addons/vehiclelock/functions/fnc_onOpenInventory.sqf
+++ b/addons/vehiclelock/functions/fnc_onOpenInventory.sqf
@@ -7,7 +7,7 @@
* 1: Container
*
* Return Value:
- * Handeled
+ * None
*
* Example:
* [player, car] call ACE_VehicleLock_fnc_onOpenInventory;
@@ -20,10 +20,7 @@ params ["_unit", "_container"];
TRACE_2("params",_unit,_container);
//Only check for player:
-if (_unit != ace_player) exitWith {false};
-
-private "_handeled";
-_handeled = false;
+if (_unit != ace_player) exitWith {};
if (GVAR(LockVehicleInventory) && //if setting not enabled
{(vehicle ace_player) == ace_player} && //Player dismounted
@@ -33,15 +30,19 @@ if (GVAR(LockVehicleInventory) && //if setting not enabled
) then {
//Give feedback that vehicle is locked
playSound "ACE_Sound_Click";
- //don't open the vehicles inventory
- _handeled = true;
- // As of 1.54 the action needs to be delayed a frame to work, which used not to be the case
+ //For compatibiltiy with ACRE, wait until the display is open, close it and then reopen the player's own inventory
+ //ref: http://gitlab.idi-systems.com/idi-systems/acre2-public/issues/70
[{
- TRACE_1("delaying a frame", ace_player);
- //Just opens a dummy groundContainer (so the player can still see their own inventory)
- ACE_player action ["Gear", objNull];
- }, []] call EFUNC(common,execNextFrame);
+ !isNull (findDisplay 602)
+ },
+ {
+ TRACE_1("car display open: closing", _this);
+ (findDisplay 602) closeDisplay 0;
+ [{
+ TRACE_1("Opening Player Inventory", _this);
+ ACE_player action ["Gear", objNull]
+ }, []] call EFUNC(common,execNextFrame);
+ },
+ []] call EFUNC(common,waitUntilAndExecute);
};
-
-_handeled
diff --git a/addons/viewdistance/CfgVehicles.hpp b/addons/viewdistance/CfgVehicles.hpp
index 86d906bfce..4c6639370c 100644
--- a/addons/viewdistance/CfgVehicles.hpp
+++ b/addons/viewdistance/CfgVehicles.hpp
@@ -1,6 +1,6 @@
class CfgVehicles {
class ACE_Module;
- class GVAR(ModuleSettings) : ACE_Module {
+ class GVAR(ModuleSettings): ACE_Module {
author = ECSTRING(common,ACETeam);
category = "ACE";
function = QUOTE(DFUNC(initModule));
@@ -28,4 +28,4 @@ class CfgVehicles {
sync[] = {};
};
};
-};
\ No newline at end of file
+};
diff --git a/addons/viewdistance/XEH_PREP.hpp b/addons/viewdistance/XEH_PREP.hpp
index fea5de5a4f..c040baf334 100644
--- a/addons/viewdistance/XEH_PREP.hpp
+++ b/addons/viewdistance/XEH_PREP.hpp
@@ -1,4 +1,3 @@
-
PREP(adaptViewDistance);
PREP(changeViewDistance);
PREP(initModule);
diff --git a/addons/viewdistance/XEH_clientInit.sqf b/addons/viewdistance/XEH_clientInit.sqf
index 45b86d944d..dfcfd7e405 100644
--- a/addons/viewdistance/XEH_clientInit.sqf
+++ b/addons/viewdistance/XEH_clientInit.sqf
@@ -24,6 +24,6 @@ if (!hasInterface) exitWith {};
// Set the EH which waits for a vehicle change to automatically swap between On Foot/In Land Vehicle/In Air Vehicle
// Also run when SettingsInitialized runs (not guaranteed)
["playerVehicleChanged",{
- [false] call FUNC(adaptViewDistance)
+ [false] call FUNC(adaptViewDistance);
}] call EFUNC(common,addEventHandler);
}] call EFUNC(common,addEventHandler);
diff --git a/addons/viewdistance/functions/fnc_adaptViewDistance.sqf b/addons/viewdistance/functions/fnc_adaptViewDistance.sqf
index f1ea7121b2..4816ee946e 100644
--- a/addons/viewdistance/functions/fnc_adaptViewDistance.sqf
+++ b/addons/viewdistance/functions/fnc_adaptViewDistance.sqf
@@ -2,7 +2,6 @@
* Author: Winter
* Sets the player's current view distance according to whether s/he is on foot, in a land vehicle or in an air vehicle.
*
- *
* Arguments:
* 0: Show Prompt
*
@@ -17,23 +16,23 @@
#include "script_component.hpp"
-private["_land_vehicle","_air_vehicle"];
-
-params ["_show_prompt"];
+params ["_showPrompt"];
if (!GVAR(enabled) || isNull ACE_player) exitWith {};
-_land_vehicle = (vehicle ACE_player) isKindOf "LandVehicle";
-_air_vehicle = (vehicle ACE_player) isKindOf "Air";
+private _vehicle = vehicle ACE_player;
-if (!_land_vehicle && !_air_vehicle) exitWith {
- [GVAR(viewDistanceOnFoot),_show_prompt] call FUNC(changeViewDistance);
+private _landVehicle = _vehicle isKindOf "LandVehicle" || {_vehicle isKindOf "Ship_F"};
+private _airVehicle = _vehicle isKindOf "Air";
+
+if (!_landVehicle && !_airVehicle) exitWith {
+ [GVAR(viewDistanceOnFoot), _showPrompt] call FUNC(changeViewDistance);
};
-if (_land_vehicle) exitWith {
- [GVAR(viewDistanceLandVehicle),_show_prompt] call FUNC(changeViewDistance);
+if (_landVehicle) exitWith {
+ [GVAR(viewDistanceLandVehicle), _showPrompt] call FUNC(changeViewDistance);
};
-if (_air_vehicle) exitWith {
- [GVAR(viewDistanceAirVehicle),_show_prompt] call FUNC(changeViewDistance);
+if (_airVehicle) exitWith {
+ [GVAR(viewDistanceAirVehicle), _showPrompt] call FUNC(changeViewDistance);
};
diff --git a/addons/viewdistance/functions/fnc_changeViewDistance.sqf b/addons/viewdistance/functions/fnc_changeViewDistance.sqf
index 28bba29b67..c5f39ff2f8 100644
--- a/addons/viewdistance/functions/fnc_changeViewDistance.sqf
+++ b/addons/viewdistance/functions/fnc_changeViewDistance.sqf
@@ -16,20 +16,18 @@
*/
#include "script_component.hpp"
-private ["_text", "_new_view_distance", "_view_distance_limit", "_object_view_distance_coeff"];
+params ["_indexRequested", "_showPrompt"];
-params ["_index_requested", "_show_prompt"];
+private _newViewDistance = [_indexRequested] call FUNC(returnValue); // changes the setting index into an actual view distance value
+private _objectViewDistanceCoeff = [GVAR(objectViewDistanceCoeff)] call FUNC(returnObjectCoeff); // changes the setting index into a coefficient.
+private _viewDistanceLimit = GVAR(limitViewDistance); // Grab the limit
-_new_view_distance = [_index_requested] call FUNC(returnValue); // changes the setting index into an actual view distance value
-_object_view_distance_coeff = [GVAR(objectViewDistanceCoeff)] call FUNC(returnObjectCoeff); // changes the setting index into a coefficient.
-_view_distance_limit = GVAR(limitViewDistance); // Grab the limit
+TRACE_3("Limit",_newViewDistance,_viewDistanceLimit,_showPrompt);
+setViewDistance (_newViewDistance min _viewDistanceLimit);
-TRACE_2("Limit",_new_view_distance,_view_distance_limit);
-setViewDistance (_new_view_distance min _view_distance_limit);
-
-if (typeName _object_view_distance_coeff == "SCALAR") then {
- if (_object_view_distance_coeff > 0) then {
- setObjectViewDistance (_object_view_distance_coeff * viewDistance);
+if (_objectViewDistanceCoeff isEqualType 0) then {
+ if (_objectViewDistanceCoeff > 0) then {
+ setObjectViewDistance (_objectViewDistanceCoeff * viewDistance);
} else {
// Restore correct view distance when changing from FoV Based to Off
// Restoring directly inside PFH's self-exit resulted in the need of selecting another option to take effect
@@ -42,18 +40,18 @@ if (typeName _object_view_distance_coeff == "SCALAR") then {
};
};
-if (_show_prompt) then {
+if (_showPrompt) then {
if (GVAR(objectViewDistanceCoeff) > 0) then {
+ private _text = "";
// FoV Based or %
if (GVAR(objectViewDistanceCoeff) == 6) then {
_text = format ["%1 %2
Min. %3
Max. %4", localize LSTRING(objectinfotext), localize LSTRING(object_fovBased), GVAR(fovBasedPFHminimalViewDistance), viewDistance];
} else {
- _text = if (_new_view_distance <= _view_distance_limit) then {
- format ["%1 %2m", localize LSTRING(infotext), viewDistance];
- } else {
- format ["%1 %2m", localize LSTRING(invalid), viewDistance];
- };
- _text = _text + format ["
%1 %2%3", localize LSTRING(objectinfotext), _object_view_distance_coeff * 100, "%"];
+ _text = [
+ format ["%1 %2m", localize LSTRING(invalid), viewDistance],
+ format ["%1 %2m", localize LSTRING(infotext), viewDistance]
+ ] select (_newViewDistance <= _viewDistanceLimit);
+ _text = _text + format ["
%1 %2%3", localize LSTRING(objectinfotext), _objectViewDistanceCoeff * 100, "%"];
};
[parseText _text, 2] call EFUNC(common,displayTextStructured);
};
diff --git a/addons/viewdistance/functions/fnc_returnObjectCoeff.sqf b/addons/viewdistance/functions/fnc_returnObjectCoeff.sqf
index 90c70b810c..257dca2995 100644
--- a/addons/viewdistance/functions/fnc_returnObjectCoeff.sqf
+++ b/addons/viewdistance/functions/fnc_returnObjectCoeff.sqf
@@ -16,11 +16,9 @@
#include "script_component.hpp"
-private ["_return"];
-
params ["_index"];
-_return = switch (_index) do {
+switch (_index) do {
case 0: {0.00}; // Off
case 1: {0.20}; // Very Low
case 2: {0.40}; // Low
@@ -30,5 +28,3 @@ _return = switch (_index) do {
case 6: {"fov"}; // FoV Based
default {0.50}; // something broke if this returns
};
-
-_return;
diff --git a/addons/viewdistance/functions/fnc_returnValue.sqf b/addons/viewdistance/functions/fnc_returnValue.sqf
index 7224292fa4..35c0894520 100644
--- a/addons/viewdistance/functions/fnc_returnValue.sqf
+++ b/addons/viewdistance/functions/fnc_returnValue.sqf
@@ -16,28 +16,23 @@
#include "script_component.hpp"
-private ["_return"];
-
params ["_index"];
-_return = switch (_index) do {
- case 0: {viewDistance}; // Video Settings option
- case 1: {500};
- case 2: {1000};
- case 3: {1500};
- case 4: {2000};
- case 5: {2500};
- case 6: {3000};
- case 7: {3500};
- case 8: {4000};
- case 9: {5000};
- case 10: {6000};
- case 11: {7000};
- case 12: {8000};
- case 13: {9000};
- case 14: {10000};
- default {1000};
+switch (_index) do {
+ case 0: {viewDistance}; // Video Settings option
+ case 1: {500};
+ case 2: {1000};
+ case 3: {1500};
+ case 4: {2000};
+ case 5: {2500};
+ case 6: {3000};
+ case 7: {3500};
+ case 8: {4000};
+ case 9: {5000};
+ case 10: {6000};
+ case 11: {7000};
+ case 12: {8000};
+ case 13: {9000};
+ case 14: {10000};
+ default {1000};
};
-
-TRACE_1("VD Index Return",_return);
-_return
diff --git a/addons/viewdistance/functions/fnc_setFovBasedOvdPFH.sqf b/addons/viewdistance/functions/fnc_setFovBasedOvdPFH.sqf
index bcde34316a..4a57747d97 100644
--- a/addons/viewdistance/functions/fnc_setFovBasedOvdPFH.sqf
+++ b/addons/viewdistance/functions/fnc_setFovBasedOvdPFH.sqf
@@ -17,10 +17,6 @@
#include "script_component.hpp"
-#define VD_ZOOM_NORMAL 1.00041
-#define VD_ZOOM_DIVISION 35
-#define VD_ZOOM_DIVISION_AIR 10
-
params ["", "_idPFH"];
// Remove PFH and set Object View Distance back to what it was before
@@ -29,25 +25,20 @@ if (GVAR(objectViewDistanceCoeff) < 6) exitWith {
GVAR(fovBasedPFHminimalViewDistance) = nil;
};
-private ["_zoom"];
-_zoom = (call CBA_fnc_getFov) select 1;
+private _zoom = (call CBA_fnc_getFov) select 1;
-// Air
-if ((vehicle ACE_player) isKindOf "Air") exitWith {
- if (_zoom > VD_ZOOM_NORMAL) then {
- // Dynamically set Object View Distance based on player's Zoom Level and View Distance
- setObjectViewDistance ((_zoom / VD_ZOOM_DIVISION_AIR * (viewDistance - GVAR(fovBasedPFHminimalViewDistance))) + GVAR(fovBasedPFHminimalViewDistance));
- } else {
- setObjectViewDistance (GVAR(fovBasedPFHminimalViewDistance) + viewDistance / 10);
- };
- TRACE_2("FoV Based",getObjectViewDistance select 0,_zoom);
-};
-
-// Land
if (_zoom > VD_ZOOM_NORMAL) then {
// Dynamically set Object View Distance based on player's Zoom Level and View Distance
- setObjectViewDistance ((_zoom / VD_ZOOM_DIVISION * (viewDistance - GVAR(fovBasedPFHminimalViewDistance))) + GVAR(fovBasedPFHminimalViewDistance));
+ if ((vehicle ACE_player) isKindOf "Air") then {
+ setObjectViewDistance ((_zoom / VD_ZOOM_DIVISION_AIR * (viewDistance - GVAR(fovBasedPFHminimalViewDistance))) + GVAR(fovBasedPFHminimalViewDistance));
+ } else {
+ setObjectViewDistance ((_zoom / VD_ZOOM_DIVISION * (viewDistance - GVAR(fovBasedPFHminimalViewDistance))) + GVAR(fovBasedPFHminimalViewDistance));
+ };
} else {
- setObjectViewDistance GVAR(fovBasedPFHminimalViewDistance);
+ if ((vehicle ACE_player) isKindOf "Air") then {
+ setObjectViewDistance (GVAR(fovBasedPFHminimalViewDistance) + viewDistance / 10);
+ } else {
+ setObjectViewDistance GVAR(fovBasedPFHminimalViewDistance);
+ };
};
TRACE_2("FoV Based",getObjectViewDistance select 0,_zoom);
diff --git a/addons/viewdistance/script_component.hpp b/addons/viewdistance/script_component.hpp
index dfd04bbf9d..f5cd31f8ce 100644
--- a/addons/viewdistance/script_component.hpp
+++ b/addons/viewdistance/script_component.hpp
@@ -15,3 +15,8 @@
#endif
#include "\z\ace\addons\main\script_macros.hpp"
+
+
+#define VD_ZOOM_NORMAL 1.00041
+#define VD_ZOOM_DIVISION 35
+#define VD_ZOOM_DIVISION_AIR 10
diff --git a/extras/assets/icons/Icon_Module_png/Icon_Module_UI_ca.png b/extras/assets/icons/Icon_Module_png/Icon_Module_UI_ca.png
new file mode 100644
index 0000000000..e69102a216
Binary files /dev/null and b/extras/assets/icons/Icon_Module_png/Icon_Module_UI_ca.png differ
diff --git a/extras/assets/icons/Icons_Modules.psd b/extras/assets/icons/Icons_Modules.psd
index 553449898a..0da44ea681 100644
Binary files a/extras/assets/icons/Icons_Modules.psd and b/extras/assets/icons/Icons_Modules.psd differ
diff --git a/tools/config_style_checker.py b/tools/config_style_checker.py
new file mode 100644
index 0000000000..03d8f222fe
--- /dev/null
+++ b/tools/config_style_checker.py
@@ -0,0 +1,157 @@
+#!/usr/bin/env python3
+
+import fnmatch
+import os
+import re
+import ntpath
+import sys
+import argparse
+
+def check_config_style(filepath):
+ bad_count_file = 0
+ def pushClosing(t):
+ closingStack.append(closing.expr)
+ closing << Literal( closingFor[t[0]] )
+
+ def popClosing():
+ closing << closingStack.pop()
+
+ with open(filepath, 'r', encoding='utf-8', errors='ignore') as file:
+ content = file.read()
+
+ # Store all brackets we find in this file, so we can validate everything on the end
+ brackets_list = []
+
+ # To check if we are in a comment block
+ isInCommentBlock = False
+ checkIfInComment = False
+ # Used in case we are in a line comment (//)
+ ignoreTillEndOfLine = False
+ # Used in case we are in a comment block (/* */). This is true if we detect a * inside a comment block.
+ # If the next character is a /, it means we end our comment block.
+ checkIfNextIsClosingBlock = False
+
+ # We ignore everything inside a string
+ isInString = False
+ # Used to store the starting type of a string, so we can match that to the end of a string
+ inStringType = '';
+
+ lastIsCurlyBrace = False
+ checkForSemiColumn = False
+
+ # Extra information so we know what line we find errors at
+ lineNumber = 1
+
+ indexOfCharacter = 0
+ # Parse all characters in the content of this file to search for potential errors
+ for c in content:
+ if (lastIsCurlyBrace):
+ lastIsCurlyBrace = False
+ if c == '\n': # Keeping track of our line numbers
+ lineNumber += 1 # so we can print accurate line number information when we detect a possible error
+ if (isInString): # while we are in a string, we can ignore everything else, except the end of the string
+ if (c == inStringType):
+ isInString = False
+ # if we are not in a comment block, we will check if we are at the start of one or count the () {} and []
+ elif (isInCommentBlock == False):
+
+ # This means we have encountered a /, so we are now checking if this is an inline comment or a comment block
+ if (checkIfInComment):
+ checkIfInComment = False
+ if c == '*': # if the next character after / is a *, we are at the start of a comment block
+ isInCommentBlock = True
+ elif (c == '/'): # Otherwise, will check if we are in an line comment
+ ignoreTillEndOfLine = True # and an line comment is a / followed by another / (//) We won't care about anything that comes after it
+
+ if (isInCommentBlock == False):
+ if (ignoreTillEndOfLine): # we are in a line comment, just continue going through the characters until we find an end of line
+ if (c == '\n'):
+ ignoreTillEndOfLine = False
+ else: # validate brackets
+ if (c == '"' or c == "'"):
+ isInString = True
+ inStringType = c
+ elif (c == '/'):
+ checkIfInComment = True
+ elif (c == '('):
+ brackets_list.append('(')
+ elif (c == ')'):
+ if (len(brackets_list) > 0 and brackets_list[-1] in ['{', '[']):
+ print("ERROR: Possible missing round bracket ')' detected at {0} Line number: {1}".format(filepath,lineNumber))
+ bad_count_file += 1
+ brackets_list.append(')')
+ elif (c == '['):
+ brackets_list.append('[')
+ elif (c == ']'):
+ if (len(brackets_list) > 0 and brackets_list[-1] in ['{', '(']):
+ print("ERROR: Possible missing square bracket ']' detected at {0} Line number: {1}".format(filepath,lineNumber))
+ bad_count_file += 1
+ brackets_list.append(']')
+ elif (c == '{'):
+ brackets_list.append('{')
+ elif (c == '}'):
+ lastIsCurlyBrace = True
+ if (len(brackets_list) > 0 and brackets_list[-1] in ['(', '[']):
+ print("ERROR: Possible missing curly brace '}}' detected at {0} Line number: {1}".format(filepath,lineNumber))
+ bad_count_file += 1
+ brackets_list.append('}')
+ elif (c== '\t'):
+ print("ERROR: Tab detected at {0} Line number: {1}".format(filepath,lineNumber))
+ bad_count_file += 1
+
+ else: # Look for the end of our comment block
+ if (c == '*'):
+ checkIfNextIsClosingBlock = True;
+ elif (checkIfNextIsClosingBlock):
+ if (c == '/'):
+ isInCommentBlock = False
+ elif (c != '*'):
+ checkIfNextIsClosingBlock = False
+ indexOfCharacter += 1
+
+ if brackets_list.count('[') != brackets_list.count(']'):
+ print("ERROR: A possible missing square bracket [ or ] in file {0} [ = {1} ] = {2}".format(filepath,brackets_list.count('['),brackets_list.count(']')))
+ bad_count_file += 1
+ if brackets_list.count('(') != brackets_list.count(')'):
+ print("ERROR: A possible missing round bracket ( or ) in file {0} ( = {1} ) = {2}".format(filepath,brackets_list.count('('),brackets_list.count(')')))
+ bad_count_file += 1
+ if brackets_list.count('{') != brackets_list.count('}'):
+ print("ERROR: A possible missing curly brace {{ or }} in file {0} {{ = {1} }} = {2}".format(filepath,brackets_list.count('{'),brackets_list.count('}')))
+ bad_count_file += 1
+ return bad_count_file
+
+def main():
+
+ print("Validating Config Style")
+
+ sqf_list = []
+ bad_count = 0
+
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-m','--module', help='only search specified module addon folder', required=False, default="")
+ args = parser.parse_args()
+
+ # Allow running from root directory as well as from inside the tools directory
+ rootDir = "../addons"
+ if (os.path.exists("addons")):
+ rootDir = "addons"
+
+ for root, dirnames, filenames in os.walk(rootDir + '/' + args.module):
+ for filename in fnmatch.filter(filenames, '*.cpp'):
+ sqf_list.append(os.path.join(root, filename))
+ for filename in fnmatch.filter(filenames, '*.hpp'):
+ sqf_list.append(os.path.join(root, filename))
+
+ for filename in sqf_list:
+ bad_count = bad_count + check_config_style(filename)
+
+ print("------\nChecked {0} files\nErrors detected: {1}".format(len(sqf_list), bad_count))
+ if (bad_count == 0):
+ print("Config validation PASSED")
+ else:
+ print("Config validation FAILED")
+
+ return bad_count
+
+if __name__ == "__main__":
+ sys.exit(main())
diff --git a/tools/setup.py b/tools/setup.py
index 62925a6066..af1b224cbb 100644
--- a/tools/setup.py
+++ b/tools/setup.py
@@ -25,19 +25,19 @@ def main():
######################################
This script will create your ACE3 dev environment for you.
-
+
Before you run this, you should already have:
- The Arma 3 Tools installed properly via Steam
- A properly set up P-drive
-
+
If you have not done those things yet, please abort this script in the next step and do so first.
-
+
This script will create two hard links on your system, both pointing to your ACE3 project folder:
[Arma 3 installation directory]\\{} => ACE3 project folder
P:\\{} => ACE3 project folder
-
+
It will also copy the required CBA includes to {}, if you do not have the CBA source code already.""".format(FULLDIR,FULLDIR,CBA))
- print("\n")
+ print("\n")
try:
reg = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE)
@@ -79,12 +79,8 @@ def main():
if not os.path.exists(os.path.join(armapath, MAINDIR)):
os.mkdir(os.path.join(armapath, MAINDIR))
- if platform.win32_ver()[0] == "7":
- subprocess.call(["cmd", "/c", "mklink", "/D", "P:\\{}\\{}".format(MAINDIR,PROJECTDIR), projectpath])
- subprocess.call(["cmd", "/c", "mklink", "/D", os.path.join(armapath, MAINDIR, PROJECTDIR), projectpath])
- else:
- subprocess.call(["cmd", "/c", "mklink", "/D", "/J", "P:\\{}\\{}".format(MAINDIR,PROJECTDIR), projectpath])
- subprocess.call(["cmd", "/c", "mklink", "/D", "/J", os.path.join(armapath, MAINDIR, PROJECTDIR), projectpath])
+ subprocess.call(["cmd", "/c", "mklink", "/J", "P:\\{}\\{}".format(MAINDIR,PROJECTDIR), projectpath])
+ subprocess.call(["cmd", "/c", "mklink", "/J", os.path.join(armapath, MAINDIR, PROJECTDIR), projectpath])
except:
raise
print("Something went wrong during the link creation. Please finish the setup manually.")
diff --git a/tools/sqf_validator.py b/tools/sqf_validator.py
index 7414d7d715..7a905a3315 100644
--- a/tools/sqf_validator.py
+++ b/tools/sqf_validator.py
@@ -50,7 +50,7 @@ def check_sqf_syntax(filepath):
checkForSemiColumn = False
# Extra information so we know what line we find errors at
- lineNumber = 0
+ lineNumber = 1
indexOfCharacter = 0
# Parse all characters in the content of this file to search for potential errors