diff --git a/.github/workflows/arma.yml b/.github/workflows/arma.yml index af038e479..f3b1c5c1c 100644 --- a/.github/workflows/arma.yml +++ b/.github/workflows/arma.yml @@ -50,3 +50,4 @@ jobs: with: name: acre2-${{ github.sha }}-nobin path: .hemttout/@* + include-hidden-files: true # Because .hemttout is a hidden directory diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b89a4a8e1..ad207c6af 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -58,6 +58,7 @@ jobs: name: acre2 path: .hemttout/@* retention-days: 1 + include-hidden-files: true # Because .hemttout is a hidden directory compile: if: github.repository == 'IDI-Systems/acre2' && ! contains(github.event.head_commit.message, '[ci skip]') diff --git a/.hemtt/lints.toml b/.hemtt/lints.toml new file mode 100644 index 000000000..09ce4a735 --- /dev/null +++ b/.hemtt/lints.toml @@ -0,0 +1,4 @@ +[sqf.banned_commands] +options.ignore = [ + "addPublicVariableEventHandler", # Alt syntax is broken, we are using main syntax +] diff --git a/addons/api/fnc_getMultiPushToTalkAssignment.sqf b/addons/api/fnc_getMultiPushToTalkAssignment.sqf index 6bc1473d1..98dfe2275 100644 --- a/addons/api/fnc_getMultiPushToTalkAssignment.sqf +++ b/addons/api/fnc_getMultiPushToTalkAssignment.sqf @@ -17,8 +17,13 @@ //Emulate behaviour of the handleMultiPttKeyPress algorithm -private _radioLists = [+ ACRE_ASSIGNED_PTT_RADIOS, [] call EFUNC(sys_data,getPlayerRadioList)] call EFUNC(sys_data,sortRadioList); +private _radioLists = []; +if (acre_player isEqualTo player) then { // using zeus player voice + _radioLists = [+ ACRE_ASSIGNED_PTT_RADIOS, [] call EFUNC(sys_data,getPlayerRadioList)] call EFUNC(sys_data,sortRadioList); +} else { // using zeus remote voice + _radioLists = [+ ACRE_ASSIGNED_PTT_RADIOS_REMOTE, [] call EFUNC(sys_data,getPlayerRadioList)] call EFUNC(sys_data,sortRadioList); +}; private _returnValue = (_radioLists select 1); diff --git a/addons/api/fnc_setMultiPushToTalkAssignment.sqf b/addons/api/fnc_setMultiPushToTalkAssignment.sqf index b8648da26..f59d21837 100644 --- a/addons/api/fnc_setMultiPushToTalkAssignment.sqf +++ b/addons/api/fnc_setMultiPushToTalkAssignment.sqf @@ -35,6 +35,10 @@ private _index = _var findIf { if (_index != -1) exitWith { false }; -ACRE_ASSIGNED_PTT_RADIOS = _var; +if (acre_player isEqualTo player) then { // using zeus player voice + ACRE_ASSIGNED_PTT_RADIOS = _var; +} else { // using zeus remote voice + ACRE_ASSIGNED_PTT_RADIOS_REMOTE = _var; +}; true diff --git a/addons/compat_spe/stringtable.xml b/addons/compat_spe/stringtable.xml index 606cbd2ef..79b5a3682 100644 --- a/addons/compat_spe/stringtable.xml +++ b/addons/compat_spe/stringtable.xml @@ -6,80 +6,94 @@ Funkgerät Radio 無線 + Radio Radio Set Funkkanäle Canali radiofonici 無線セット + Canaux radio A-Set A-Kanäle Canali A Aセット + Canaux A Radio Set - Able Kanäle - Able Canali - Able 無線セット - Able + Canaux - Able Radio Set - Anton Kanäle - Anton Canali - Anton 無線セット - Anton + Canaux - Anton B-Set B-Kanäle Canali B Bセット + Canaux B Radio Set - Baker Kanäle - Baker Canali - Baker 無線セット - Baker + Canaux - Baker Radio Set - Bruno Kanäle - Bruno Canali - Bruno 無線セット - Bruno + Canaux - Bruno IntCm BFunk Rdb インコム + IntPh Crew Intercom Bordfunk Besatzung Equipaggio radiofonico di bordo 乗員インターコム + Radio de bord d'équipage M4A1 Sherman (Command) M4A1 Sherman (Kommando) M4A1 Sherman (Comando) + M4A1 Sherman (Commandement) M4A1 Sherman (Late) (Command) M4A1 Sherman (Spät) (Kommando) M4A1 Sherman (Tardivo) (Comando) + M4A1 Sherman (Tardif) (Commandement) M4A1(76)W Sherman (Command) M4A1(76)W Sherman (Kommando) M4A1(76)W Sherman (Comando) + M4A1(76)W Sherman (Commandement) M4 Sherman (Command) M4 Sherman (Kommando) M4 Sherman (Comando) + M4 Sherman (Commandement) M4 Sherman (Composite) (Command) @@ -88,46 +102,55 @@ M4 Sherman (Late) (Command) M4 Sherman (Spät) (Kommando) M4 Sherman (Tardivo) (Comando) + M4 Sherman (Tardif) (Commandement) M4(105) Sherman (Command) M4(105) Sherman (Kommando) M4(105) Sherman (Comando) + M4(105) Sherman (Commandement) M4A3(75)W Sherman (Command) M4A3(75)W Sherman (Kommando) M4A3(75)W Sherman (Comando) + M4A3(75)W Sherman (Commandement) M4A3(76)W Sherman (Command) M4A3(76)W Sherman (Kommando) M4A3(76)W Sherman (Comando) + M4A3(76)W Sherman (Commandement) M4A3(105) Sherman (Command) M4A3(105) Sherman (Kommando) M4A3(105) Sherman (Comando) + M4A3(105) Sherman (Commandement) PzBefWg III Ausf. K PzBefWg III Ausf. K PzBefWg III Ausf. K + PzBefWg III Ausf. K PzBefWg IV PzBefWg IV PzBefWg IV + PzBefWg IV PzBefWg V PzBefWg V PzBefWg V + PzBefWg V PzBefWg VI PzBefWg VI PzBefWg VI + PzBefWg VI Bfw. Jagdpanther @@ -137,6 +160,7 @@ Funker Operatore Radio 無線手 + Opérateur radio diff --git a/addons/sys_attenuate/fnc_debugDraw.sqf b/addons/sys_attenuate/fnc_debugDraw.sqf index 9511b7504..91cd887c1 100644 --- a/addons/sys_attenuate/fnc_debugDraw.sqf +++ b/addons/sys_attenuate/fnc_debugDraw.sqf @@ -79,7 +79,7 @@ if (_compartmentsCount > 0) then { { private _attenuation = getNumber(_attConfig >> _x); if (_attenuation > 0) then { - _hintMsg pushBack (format [" %2 = %3", _rootAtt select [11], _x select [11], _attenuation]); + _hintMsg pushBack (format [" %1 = %2", _x select [11], _attenuation]); if (_forEachIndex == (_compartmentsCount - 1)) then { _hintMsg pushBack ""; @@ -110,7 +110,7 @@ if (_compartmentsTurnedOutCount > 0) then { { private _attenuation = getNumber(_attConfig >> _x); if (_attenuation > 0) then { - _hintMsg pushBack (format [" %2 = %3", _rootAtt select [11], _x select [11], _attenuation]); + _hintMsg pushBack (format [" %1 = %2", _x select [11], _attenuation]); if (_forEachIndex == (_compartmentsCount - 1)) then { _hintMsg pushBack ""; diff --git a/addons/sys_bf888s/radio/fnc_getExternalAudioPosition.sqf b/addons/sys_bf888s/radio/fnc_getExternalAudioPosition.sqf index 8afe6bce7..7c1098c4a 100644 --- a/addons/sys_bf888s/radio/fnc_getExternalAudioPosition.sqf +++ b/addons/sys_bf888s/radio/fnc_getExternalAudioPosition.sqf @@ -23,7 +23,7 @@ params ["_radioId", "", "", ""]; private _obj = [_radioId] call EFUNC(sys_radio,getRadioObject); private _pos = getPosASL _obj; if (_obj isKindOf "Man") then { - _pos = AGLtoASL (_obj modelToWorld (_obj selectionPosition "RightShoulder")); + _pos = AGLToASL (_obj modelToWorld (_obj selectionPosition "RightShoulder")); }; _pos diff --git a/addons/sys_components/fnc_findAntenna.sqf b/addons/sys_components/fnc_findAntenna.sqf index 03dc2bf1b..3a34a7f18 100644 --- a/addons/sys_components/fnc_findAntenna.sqf +++ b/addons/sys_components/fnc_findAntenna.sqf @@ -56,7 +56,7 @@ private _searchFunction = { if (isArray (_configPath >> "acre_antennaMemoryPoints")) then { private _memoryPoints = getArray (_configPath >> "acre_antennaMemoryPoints"); _memoryPoints = _memoryPoints select (((count _memoryPoints) - 1) min _connectorIndex); - _antennaPos = AGLtoASL (_componentObject modelToWorld (_componentObject selectionPosition (_memoryPoints select 0))); + _antennaPos = AGLToASL (_componentObject modelToWorld (_componentObject selectionPosition (_memoryPoints select 0))); } else { if (getText (_configPath >> "acre_antennaPosFnc") != "") then { _antennaPos = [_componentObject, _connectorIndex] call (missionNamespace getVariable (getText (_configPath >> "acre_antennaPosFnc"))); @@ -65,10 +65,10 @@ private _searchFunction = { if (isArray (_configPath >> "acre_antennaMemoryPointsDir")) then { private _memoryPoints = getArray (_configPath >> "acre_antennaMemoryPointsDir"); _memoryPoints = _memoryPoints select (((count _memoryPoints) - 1) min _connectorIndex); - _antennaDir = AGLtoASL(_componentObject modelToWorld (_componentObject selectionPosition (_memoryPoints select 0))) vectorFromTo - AGLtoASL(_componentObject modelToWorld (_componentObject selectionPosition (_memoryPoints select 1))); - _antennaDirUp = AGLtoASL(_componentObject modelToWorld (_componentObject selectionPosition (_memoryPoints select 2))) vectorFromTo - AGLtoASL(_componentObject modelToWorld (_componentObject selectionPosition (_memoryPoints select 3))); + _antennaDir = AGLToASL(_componentObject modelToWorld (_componentObject selectionPosition (_memoryPoints select 0))) vectorFromTo + AGLToASL(_componentObject modelToWorld (_componentObject selectionPosition (_memoryPoints select 1))); + _antennaDirUp = AGLToASL(_componentObject modelToWorld (_componentObject selectionPosition (_memoryPoints select 2))) vectorFromTo + AGLToASL(_componentObject modelToWorld (_componentObject selectionPosition (_memoryPoints select 3))); } else { if (getText (_configPath >> "acre_antennaDirFnc") != "") then { diff --git a/addons/sys_components/fnc_getAntennaDirMan.sqf b/addons/sys_components/fnc_getAntennaDirMan.sqf index 52fb36f24..8c1419fd2 100644 --- a/addons/sys_components/fnc_getAntennaDirMan.sqf +++ b/addons/sys_components/fnc_getAntennaDirMan.sqf @@ -35,9 +35,9 @@ if (vehicle _obj == _obj) then { }; }; - private _baseASL = AGLtoASL (_obj modelToWorld [0,0,0]); // convert from model vector to world - _upV = _baseASL vectorFromTo AGLtoASL (_obj ModelToWorld _spineMV); - _forwardV = _baseASL vectorFromTo AGLtoASL (_obj ModelToWorld (_spineMV vectorCrossProduct _shoulderMV)); + private _baseASL = AGLToASL (_obj modelToWorld [0,0,0]); // convert from model vector to world + _upV = _baseASL vectorFromTo AGLToASL (_obj modelToWorld _spineMV); + _forwardV = _baseASL vectorFromTo AGLToASL (_obj modelToWorld (_spineMV vectorCrossProduct _shoulderMV)); /* * In order to debug and visualize the antenna direction this function needs to be called every frame. @@ -47,8 +47,8 @@ if (vehicle _obj == _obj) then { */ #ifdef DRAW_ANTENNA_POS private _spinePos = _obj modelToWorldVisual (_obj selectionPosition "Spine3"); - drawLine3D [_spinePos, ASLtoAGL ((AGLtoASL _spinePos) vectorAdd _forwardV), [1,0,0,1]]; - drawLine3D [_spinePos, ASLtoAGL ((AGLtoASL _spinePos) vectorAdd _upV), [0,0,1,1]]; + drawLine3D [_spinePos, ASLToAGL ((AGLToASL _spinePos) vectorAdd _forwardV), [1,0,0,1]]; + drawLine3D [_spinePos, ASLToAGL ((AGLToASL _spinePos) vectorAdd _upV), [0,0,1,1]]; #endif } else { _forwardV = vectorDir (vehicle _obj); diff --git a/addons/sys_core/XEH_preInit.sqf b/addons/sys_core/XEH_preInit.sqf index e85653d18..30dab6243 100644 --- a/addons/sys_core/XEH_preInit.sqf +++ b/addons/sys_core/XEH_preInit.sqf @@ -66,6 +66,7 @@ DVAR(ACRE_LISTENER_DIVE) = 0; DVAR(ACRE_PTT_RELEASE_DELAY) = 0.2; DVAR(ACRE_ASSIGNED_PTT_RADIOS) = []; +DVAR(ACRE_ASSIGNED_PTT_RADIOS_REMOTE) = []; // Remote controlled unit GVAR(delayReleasePTT_Handle) = nil; DVAR(ACRE_ACTIVE_PTTKEY) = -2; diff --git a/addons/sys_core/fnc_handleMultiPttKeyPress.sqf b/addons/sys_core/fnc_handleMultiPttKeyPress.sqf index 96106d3f6..8fc0e3726 100644 --- a/addons/sys_core/fnc_handleMultiPttKeyPress.sqf +++ b/addons/sys_core/fnc_handleMultiPttKeyPress.sqf @@ -35,11 +35,17 @@ if (ACRE_ACTIVE_PTTKEY == -2) then { private _radioList = [] call EFUNC(sys_data,getPlayerRadioList); if (ACRE_ACTIVE_PTTKEY <= (count _radioList) - 1) then { if ((count ACRE_ASSIGNED_PTT_RADIOS) > 0) then { - private _sortList = [ACRE_ASSIGNED_PTT_RADIOS, _radioList] call EFUNC(sys_data,sortRadioList); - // This will handle cleanup automatically too - ACRE_ASSIGNED_PTT_RADIOS = _sortList select 0; - _radioList = _sortList select 1; - + if (acre_player isEqualTo player) then { // using zeus player voice + private _sortList = [ACRE_ASSIGNED_PTT_RADIOS, _radioList] call EFUNC(sys_data,sortRadioList); + // This will handle cleanup automatically too + ACRE_ASSIGNED_PTT_RADIOS = _sortList select 0; + _radioList = _sortList select 1; + } else { + private _sortList = [ACRE_ASSIGNED_PTT_RADIOS_REMOTE, _radioList] call EFUNC(sys_data,sortRadioList); + // This will handle cleanup automatically too + ACRE_ASSIGNED_PTT_RADIOS_REMOTE = _sortList select 0; + _radioList = _sortList select 1; + }; }; _sendRadio = _radioList select ACRE_ACTIVE_PTTKEY; [_sendRadio] call EFUNC(sys_radio,setActiveRadio); diff --git a/addons/sys_core/fnc_processDirectSpeaker.sqf b/addons/sys_core/fnc_processDirectSpeaker.sqf index 4276228b5..699cc8df0 100644 --- a/addons/sys_core/fnc_processDirectSpeaker.sqf +++ b/addons/sys_core/fnc_processDirectSpeaker.sqf @@ -44,7 +44,7 @@ if (_bothSpectating || {_isIntercomAttenuate}) then { _emitterPos = _zeusPosition select 0; _emitterDir = _zeusPosition select 1; } else { - _emitterPos = AGLtoASL (_unit modelToWorldVisual (_unit selectionPosition "head")); //; eyePos _unit; + _emitterPos = AGLToASL (_unit modelToWorldVisual (_unit selectionPosition "head")); //; eyePos _unit; _emitterDir = eyeDirection _unit; }; }; diff --git a/addons/sys_core/fnc_removeGear.sqf b/addons/sys_core/fnc_removeGear.sqf index 239aa59fe..e88d45d03 100644 --- a/addons/sys_core/fnc_removeGear.sqf +++ b/addons/sys_core/fnc_removeGear.sqf @@ -23,7 +23,7 @@ _item = toLower _item; private _assignedItems = (assignedItems _unit) apply {toLower _x}; if (_item in _assignedItems) then { - _unit unassignitem _item; + _unit unassignItem _item; }; _unit removeItem _item; _unit removeWeapon _item; diff --git a/addons/sys_core/fnc_replaceGear.sqf b/addons/sys_core/fnc_replaceGear.sqf index a61070be5..ea4baf22a 100644 --- a/addons/sys_core/fnc_replaceGear.sqf +++ b/addons/sys_core/fnc_replaceGear.sqf @@ -30,7 +30,7 @@ if (!isNull _uniform && {_itemToReplace in _uniforCmargo}) exitWith { }; private _vest = vestContainer _unit; -private _vestCargo = ((getitemCargo _vest) select 0) apply {toLower _x}; +private _vestCargo = ((getItemCargo _vest) select 0) apply {toLower _x}; if (!isNull _vest && {_itemToReplace in _vestCargo}) exitWith { _unit removeItem _itemToReplace; _vest addItemCargoGlobal [_itemReplaceWith, 1]; // circumvent limit diff --git a/addons/sys_core/fnc_updateSelf.sqf b/addons/sys_core/fnc_updateSelf.sqf index 91caf470c..5178280d8 100644 --- a/addons/sys_core/fnc_updateSelf.sqf +++ b/addons/sys_core/fnc_updateSelf.sqf @@ -16,12 +16,12 @@ */ // ref bug: http://feedback.arma3.com/view.php?id=15580 -private _projectPos = AGLtoASL positionCameraToWorld [0, 0, 0]; +private _projectPos = AGLToASL positionCameraToWorld [0, 0, 0]; if (EGVAR(sys_zeus,zeusCommunicateViaCamera) && FUNC(inZeus)) then { ACRE_LISTENER_DIR = eyeDirection player; } else { - ACRE_LISTENER_DIR = (AGLtoASL positionCameraToWorld [0, 0, 1]) vectorDiff _projectPos; + ACRE_LISTENER_DIR = (AGLToASL positionCameraToWorld [0, 0, 1]) vectorDiff _projectPos; }; if (ACRE_IS_SPECTATOR) then { diff --git a/addons/sys_external/fnc_listChildrenActions.sqf b/addons/sys_external/fnc_listChildrenActions.sqf index ddca0fb7d..88c8291e4 100644 --- a/addons/sys_external/fnc_listChildrenActions.sqf +++ b/addons/sys_external/fnc_listChildrenActions.sqf @@ -42,7 +42,7 @@ private _ownSharedRadios = [acre_player] call FUNC(getSharedExternalRadios); }; private _baseRadio = [_x] call EFUNC(api,getBaseRadio); - private _item = ConfigFile >> "CfgWeapons" >> _baseRadio; + private _item = configFile >> "CfgWeapons" >> _baseRadio; private _displayName = getText (_item >> "displayName") + _owner; private _currentChannel = [_x] call EFUNC(api,getRadioChannel); _displayName = format [localize ELSTRING(ace_interact,channelShort), _displayName, _currentChannel]; diff --git a/addons/sys_external/fnc_startUsingExternalRadio.sqf b/addons/sys_external/fnc_startUsingExternalRadio.sqf index aa9d76abf..280265280 100644 --- a/addons/sys_external/fnc_startUsingExternalRadio.sqf +++ b/addons/sys_external/fnc_startUsingExternalRadio.sqf @@ -20,7 +20,7 @@ params ["_radioID", "_endUser"]; private _owner = [_radioId] call FUNC(getExternalRadioOwner); private _baseRadio = [_radioId] call EFUNC(api,getBaseRadio); -private _displayName = getText (ConfigFile >> "CfgWeapons" >> _baseRadio >> "displayName"); +private _displayName = getText (configFile >> "CfgWeapons" >> _baseRadio >> "displayName"); // Do not flag as being externally used if it is already so (action give) if !([_radioId] call FUNC(isExternalRadioUsed)) then { diff --git a/addons/sys_external/fnc_stopUsingExternalRadio.sqf b/addons/sys_external/fnc_stopUsingExternalRadio.sqf index 23bc42309..e182ebdd3 100644 --- a/addons/sys_external/fnc_stopUsingExternalRadio.sqf +++ b/addons/sys_external/fnc_stopUsingExternalRadio.sqf @@ -25,7 +25,7 @@ ACRE_ACTIVE_EXTERNAL_RADIOS = ACRE_ACTIVE_EXTERNAL_RADIOS - [_radioId]; [_radioId] call EFUNC(sys_radio,stopUsingRadio); private _baseRadio = [_radioId] call EFUNC(api,getBaseRadio); -private _displayName = getText (ConfigFile >> "CfgWeapons" >> _baseRadio >> "displayName"); +private _displayName = getText (configFile >> "CfgWeapons" >> _baseRadio >> "displayName"); [[ICON_RADIO_CALL], [format [localize LSTRING(hintReturn), _displayName, name _owner]], true] call CBA_fnc_notify; if (_target == _owner) then { diff --git a/addons/sys_gsa/fnc_connectChildrenActions.sqf b/addons/sys_gsa/fnc_connectChildrenActions.sqf index 6cbb8f4d3..6376af741 100644 --- a/addons/sys_gsa/fnc_connectChildrenActions.sqf +++ b/addons/sys_gsa/fnc_connectChildrenActions.sqf @@ -29,7 +29,7 @@ private _actions = []; }; private _baseRadio = [_x] call EFUNC(api,getBaseRadio); - private _item = ConfigFile >> "CfgWeapons" >> _baseRadio; + private _item = configFile >> "CfgWeapons" >> _baseRadio; private "_displayName"; if (_x in ACRE_ACCESSIBLE_RACK_RADIOS || {_x in ACRE_HEARABLE_RACK_RADIOS}) then { diff --git a/addons/sys_gui/fnc_antennaElevationDisplay.sqf b/addons/sys_gui/fnc_antennaElevationDisplay.sqf index 5c74697f5..bce8e1734 100644 --- a/addons/sys_gui/fnc_antennaElevationDisplay.sqf +++ b/addons/sys_gui/fnc_antennaElevationDisplay.sqf @@ -24,7 +24,7 @@ // Need to run this every frame. Otherwise there will be noticeable delays [{ // Collect data from stance - private _stance = tolower (stance acre_player); + private _stance = toLower (stance acre_player); // Hide antenna display if not applicable (in vehicle or other invalid stance or no radio) if (_stance == "" || {_stance == "undefined"} || {ACRE_ACTIVE_RADIO == ""}) exitWith { diff --git a/addons/sys_gui/fnc_updateVehicleInfo.sqf b/addons/sys_gui/fnc_updateVehicleInfo.sqf index 2af187c7e..8b537dc91 100644 --- a/addons/sys_gui/fnc_updateVehicleInfo.sqf +++ b/addons/sys_gui/fnc_updateVehicleInfo.sqf @@ -30,7 +30,7 @@ _ctrlText ctrlSetStructuredText parseText _str; // Calculate new height (3 elements per row) private _rows = ceil ((1 max _elements) / 3); -private _newBaseH = (((safezoneW / safezoneH) min 1.2) / 1.2) / 25; +private _newBaseH = (((safeZoneW / safeZoneH) min 1.2) / 1.2) / 25; private _newH = _newBaseH * _rows; private _newContainerH = (0.8 * _newH) + 0.001; TRACE_4("vehicle info height",_elements,_rows,_newH,_newContainerH); diff --git a/addons/sys_intercom/CfgVehicles.hpp b/addons/sys_intercom/CfgVehicles.hpp index 2e7f17fcf..f4de94287 100644 --- a/addons/sys_intercom/CfgVehicles.hpp +++ b/addons/sys_intercom/CfgVehicles.hpp @@ -297,22 +297,22 @@ class CfgVehicles { }; class LT_01_base_F; - class LT_01_AA_base_F: LT_01_base_F; + class LT_01_AA_base_F: LT_01_base_F {}; class I_LT_01_AA_F: LT_01_AA_base_F { acre_infantryPhonePosition[] = {-1.10, -1.66, -0.83}; }; - class LT_01_AT_base_F: LT_01_base_F; + class LT_01_AT_base_F: LT_01_base_F {}; class I_LT_01_AT_F: LT_01_AT_base_F { acre_infantryPhonePosition[] = {-1.10, -1.66, -0.83}; }; - class LT_01_cannon_base_F: LT_01_base_F; + class LT_01_cannon_base_F: LT_01_base_F {}; class I_LT_01_cannon_F: LT_01_cannon_base_F { acre_infantryPhonePosition[] = {-1.10, -1.90, -0.78}; }; - class LT_01_scout_base_F: LT_01_base_F; + class LT_01_scout_base_F: LT_01_base_F {}; class I_LT_01_scout_F: LT_01_scout_base_F { acre_infantryPhonePosition[] = {-1.10, -1.90, -0.78}; }; diff --git a/addons/sys_list/fnc_cycleRadios.sqf b/addons/sys_list/fnc_cycleRadios.sqf index 3caa7d7a4..a5a3e8cf1 100644 --- a/addons/sys_list/fnc_cycleRadios.sqf +++ b/addons/sys_list/fnc_cycleRadios.sqf @@ -43,7 +43,7 @@ if (!dialog) then { }; _radios pushBack _radio; _count = _count + 1; - } foreach _radioList; + } forEach _radioList; TRACE_1("index was",_newRadioIndex); TRACE_1("Active was",ACRE_ACTIVE_RADIO); if ((count _radios) > 1) then { diff --git a/addons/sys_list/stringtable.xml b/addons/sys_list/stringtable.xml index 4dfbf1910..ec4acebf7 100644 --- a/addons/sys_list/stringtable.xml +++ b/addons/sys_list/stringtable.xml @@ -100,11 +100,13 @@ Persist Babel Language Indicator Babel Sprachanzeige bleibt sichtbar Indicatore di lingua persistente + L'affichage de la langue de Babel reste visible Prevent the Babel Language Indicator in the bottom right from fading out if a language other than the "main language" (the first assigned spoken language) is selected. Verhindert, wenn eingeschaltet, dass die Babel Sprachanzeige unten-rechts verschwindet während eine andere Sprache als die "Muttersprache" (die erste zugewiesene Sprache) gesprochen wird. Se attivato, l'indicatore della lingua selezionata in basso a destra non scomparirà mentre si parla una lingua diversa da quella "madre" (la prima lingua assegnata). + S'il est activé, l'indicateur de la langue sélectionnée dans le coin inférieur droit ne disparaîtra pas lorsque vous parlerez une langue autre que la langue « maternelle » (la première langue attribuée). Switch Channel Color diff --git a/addons/sys_prc117f/farris_menus/SQ.sqf b/addons/sys_prc117f/farris_menus/SQ.sqf index df4dc1bbe..c0b90b5a7 100644 --- a/addons/sys_prc117f/farris_menus/SQ.sqf +++ b/addons/sys_prc117f/farris_menus/SQ.sqf @@ -84,7 +84,7 @@ GVAR(SQ) = ["SQ", "SQ", "Squelch Settings", SCRATCH_SET(GVAR(currentRadioID),"sq_select_digital",nil); - if (_selectDigital) exitwith { + if (_selectDigital) exitWith { ["NOT_IMPLEMENTED"] call FUNC(changeMenu); true }; diff --git a/addons/sys_prc117f/radio/fnc_handleEndTransmission.sqf b/addons/sys_prc117f/radio/fnc_handleEndTransmission.sqf index 82794c85d..da9661076 100644 --- a/addons/sys_prc117f/radio/fnc_handleEndTransmission.sqf +++ b/addons/sys_prc117f/radio/fnc_handleEndTransmission.sqf @@ -22,7 +22,7 @@ private _txId = _eventData select 0; private _currentTransmissions = SCRATCH_GET(_radioId,"currentTransmissions"); _currentTransmissions = _currentTransmissions - [_txId]; -if (_currentTransmissions isEqualto []) then { +if (_currentTransmissions isEqualTo []) then { private _beeped = SCRATCH_GET(_radioId,"hasBeeped"); private _pttDown = SCRATCH_GET_DEF(_radioId,"PTTDown",false); if (!_pttDown && {!isNil "_beeped"} && {_beeped}) then { diff --git a/addons/sys_prc148/radio/fnc_getExternalAudioPosition.sqf b/addons/sys_prc148/radio/fnc_getExternalAudioPosition.sqf index 7db198613..d7dae4aae 100644 --- a/addons/sys_prc148/radio/fnc_getExternalAudioPosition.sqf +++ b/addons/sys_prc148/radio/fnc_getExternalAudioPosition.sqf @@ -21,7 +21,7 @@ params ["_radioId", "", "", ""]; private _obj = [_radioId] call EFUNC(sys_radio,getRadioObject); private _pos = getPosASL _obj; if (_obj isKindOf "Man") then { - _pos = AGLtoASL (_obj modelToWorld (_obj selectionPosition "RightShoulder")); + _pos = AGLToASL (_obj modelToWorld (_obj selectionPosition "RightShoulder")); }; _pos; diff --git a/addons/sys_prc152/radio/fnc_getExternalAudioPosition.sqf b/addons/sys_prc152/radio/fnc_getExternalAudioPosition.sqf index 6f58503b4..5b0c3ee1b 100644 --- a/addons/sys_prc152/radio/fnc_getExternalAudioPosition.sqf +++ b/addons/sys_prc152/radio/fnc_getExternalAudioPosition.sqf @@ -21,7 +21,7 @@ params ["_radioId", "", "", ""]; private _obj = [_radioId] call EFUNC(sys_radio,getRadioObject); private _pos = getPosASL _obj; if (_obj isKindOf "Man") then { - _pos = AGLtoASL (_obj modelToWorld (_obj selectionPosition "RightShoulder")); + _pos = AGLToASL (_obj modelToWorld (_obj selectionPosition "RightShoulder")); }; _pos; diff --git a/addons/sys_prc343/functions/fnc_render.sqf b/addons/sys_prc343/functions/fnc_render.sqf index 6e3f3085f..fb129e53a 100644 --- a/addons/sys_prc343/functions/fnc_render.sqf +++ b/addons/sys_prc343/functions/fnc_render.sqf @@ -38,7 +38,7 @@ private _currentViewFrame = 0; if (_currentView == 0) then { _currentViewFrame = count (GVAR(backgroundImages)) - 1; - RADIO_CTRL(203) ctrlSetPosition [(0.3 * safeZoneW + safeZoneX),(0.277 * safeZoneH + safeZoneY), 0.1*SafeZoneW, 0.5*SafeZoneW]; + RADIO_CTRL(203) ctrlSetPosition [(0.3 * safeZoneW + safeZoneX),(0.277 * safeZoneH + safeZoneY), 0.1*safeZoneW, 0.5*safeZoneW]; RADIO_CTRL(203) ctrlCommit 0.01; RADIO_CTRL(203) ctrlSetTooltip LELSTRING(sys_radio,ui_handleAttach); @@ -56,7 +56,7 @@ if (_currentView == 0) then { } else { _currentViewFrame = 0; - RADIO_CTRL(203) ctrlSetPosition [(0.35 * safeZoneW + safeZoneX),(0.377 * safeZoneH + safeZoneY), 0.07*SafeZoneW, 0.4*SafeZoneW]; + RADIO_CTRL(203) ctrlSetPosition [(0.35 * safeZoneW + safeZoneX),(0.377 * safeZoneH + safeZoneY), 0.07*safeZoneW, 0.4*safeZoneW]; RADIO_CTRL(203) ctrlCommit 0.01; RADIO_CTRL(203) ctrlSetTooltip LELSTRING(sys_radio,ui_handleDetach); diff --git a/addons/sys_rack/fnc_enterVehicle.sqf b/addons/sys_rack/fnc_enterVehicle.sqf index 5cf5aead4..ce30b54dc 100644 --- a/addons/sys_rack/fnc_enterVehicle.sqf +++ b/addons/sys_rack/fnc_enterVehicle.sqf @@ -18,7 +18,7 @@ params ["_vehicle", "_unit"]; -if (_unit != _vehicle) then { +if (_unit != _vehicle && {isNull remoteControlled _unit}) then { private _initialized = _vehicle getVariable [QGVAR(initialized), false]; if (!_initialized) then { diff --git a/addons/sys_rack/fnc_generateMountableRadioActions.sqf b/addons/sys_rack/fnc_generateMountableRadioActions.sqf index 71cff506a..59f5e6477 100644 --- a/addons/sys_rack/fnc_generateMountableRadioActions.sqf +++ b/addons/sys_rack/fnc_generateMountableRadioActions.sqf @@ -27,7 +27,7 @@ _radioList = [_rackClassName, _radioList] call FUNC(getMountableRadios); { private _baseRadio = [_x] call EFUNC(api,getBaseRadio); - private _item = ConfigFile >> "CfgWeapons" >> _baseRadio; + private _item = configFile >> "CfgWeapons" >> _baseRadio; private _displayName = getText (_item >> "displayName"); private _currentChannel = [_x] call EFUNC(api,getRadioChannel); _displayName = format [localize ELSTRING(ace_interact,channelShort), _displayName, _currentChannel]; diff --git a/addons/sys_rack/stringtable.xml b/addons/sys_rack/stringtable.xml index b4cac421c..0a10229a3 100644 --- a/addons/sys_rack/stringtable.xml +++ b/addons/sys_rack/stringtable.xml @@ -94,6 +94,7 @@ Durch Intercom verwenden (Work: %1) Usa tramite l'intercom (Work: %1) インターコムから使う (Work: %1) + Utilisation de l'interphone (Travail : %1) Unable to unmount radio as you have no inventory space. diff --git a/addons/sys_radio/fnc_onPlayerKilled.sqf b/addons/sys_radio/fnc_onPlayerKilled.sqf index 472ea6079..a7987967b 100644 --- a/addons/sys_radio/fnc_onPlayerKilled.sqf +++ b/addons/sys_radio/fnc_onPlayerKilled.sqf @@ -26,7 +26,7 @@ if (_unit == acre_player) then { // Make sure the GUI state is closed so that other players can open the radio [_radioName, false] call FUNC(setRadioOpenState); - } foreach GVAR(currentRadioList); + } forEach GVAR(currentRadioList); GVAR(currentRadioList) = []; [""] call FUNC(setActiveRadio); diff --git a/addons/sys_radio/stringtable.xml b/addons/sys_radio/stringtable.xml index d89d95ffe..67e5a8b74 100644 --- a/addons/sys_radio/stringtable.xml +++ b/addons/sys_radio/stringtable.xml @@ -164,36 +164,42 @@ Austausch des Funkgeräts Sostituzione della radio 無線機アイテムの置き換え + Remplacement de la radio Default radio inventory items will be replaced with this type of radio. Standard Funkinventargegenstände werden durch diesen Funkgerätetyp ersetzt. Le radio vanilla nell'inventario verranno sostituite con questo tipo di radio. インベントリにあるデフォルトの無線機アイテムは、 このタイプの無線機に置き換えられます。 + Les éléments d'inventaire radio par défaut seront remplacés par ce type de radio. Change Volume Lautstärke ändern Cambia volume 音量の変更 + Changer le volume Current Volume Aktuelle Lautstärke Volume attuale 現在の変更 + Volume actuel Radio off Funkgerät aus Radio spenta 無線オフ + Radio éteinte Change Channel Kanal wechseln Cambia canale チャンネルを変更 + Changer de canal Current Channel @@ -210,18 +216,21 @@ Aktueller Kanalblock Blocco di canali corrente 現在のチャンネルブロック + Blocage actuel des chaînes Attach handle Griff anbringen Attaccare la maniglia ハンドルを取り付ける + Fixation de la poignée Detach handle Griff abnehmen Rimuovere la maniglia ハンドルを外す + Retirer la poignée diff --git a/addons/sys_sem52sl/radio/fnc_getExternalAudioPosition.sqf b/addons/sys_sem52sl/radio/fnc_getExternalAudioPosition.sqf index 3eafdedb9..d5d46f2fb 100644 --- a/addons/sys_sem52sl/radio/fnc_getExternalAudioPosition.sqf +++ b/addons/sys_sem52sl/radio/fnc_getExternalAudioPosition.sqf @@ -52,7 +52,7 @@ params ["_radioId", "", "", ""]; private _obj = [_radioId] call EFUNC(sys_radio,getRadioObject); private _pos = getPosASL _obj; if (_obj isKindOf "Man") then { - _pos = AGLtoASL (_obj modelToWorldVisual (_obj selectionPosition "RightShoulder")); + _pos = AGLToASL (_obj modelToWorldVisual (_obj selectionPosition "RightShoulder")); }; _pos; diff --git a/addons/sys_sem70/radio/fnc_getExternalAudioPosition.sqf b/addons/sys_sem70/radio/fnc_getExternalAudioPosition.sqf index b2d3c29f5..e6daa6a6f 100644 --- a/addons/sys_sem70/radio/fnc_getExternalAudioPosition.sqf +++ b/addons/sys_sem70/radio/fnc_getExternalAudioPosition.sqf @@ -52,7 +52,7 @@ params ["_radioId", "", "", ""]; private _obj = [_radioId] call EFUNC(sys_radio,getRadioObject); private _pos = getPosASL _obj; if (_obj isKindOf "Man") then { - _pos = AGLtoASL (_obj modelToWorldVisual (_obj selectionPosition "RightShoulder")); + _pos = AGLToASL (_obj modelToWorldVisual (_obj selectionPosition "RightShoulder")); }; _pos; diff --git a/addons/sys_server/fnc_doAddComponentCargo.sqf b/addons/sys_server/fnc_doAddComponentCargo.sqf index 81fd46edd..ea33f5096 100644 --- a/addons/sys_server/fnc_doAddComponentCargo.sqf +++ b/addons/sys_server/fnc_doAddComponentCargo.sqf @@ -24,7 +24,7 @@ private _hasUnique = _type call EFUNC(sys_radio,isBaseClassRadio); if (_hasUnique) then { private _ret = [_type] call FUNC(getRadioId); if (_ret != -1) then { - private _uniqueComponent = format ["%1_id_%2", tolower _type, _ret]; + private _uniqueComponent = format ["%1_id_%2", toLower _type, _ret]; if !(_uniqueComponent in GVAR(masterIdListd)) then { GVAR(masterIdList) pushBack _uniqueComponent; private _dataHash = HASH_CREATE; diff --git a/addons/sys_server/fnc_onGetRadioId.sqf b/addons/sys_server/fnc_onGetRadioId.sqf index 4e8f42a1f..3fc294e0b 100644 --- a/addons/sys_server/fnc_onGetRadioId.sqf +++ b/addons/sys_server/fnc_onGetRadioId.sqf @@ -26,7 +26,7 @@ if (getNumber (configFile >> "CfgWeapons" >> _class >> "acre_hasUnique") == 0 && private _ret = [_class] call FUNC(getRadioId); if (_ret != -1) then { - private _uniqueClass = format["%1_id_%2", tolower(_class), _ret]; + private _uniqueClass = format["%1_id_%2", toLower(_class), _ret]; if !(_uniqueClass in GVAR(masterIdList)) then { GVAR(masterIdList) pushBack _uniqueClass; diff --git a/addons/sys_signalmap/fnc_doProcess.sqf b/addons/sys_signalmap/fnc_doProcess.sqf index 4e623cb9b..b0a470b2d 100644 --- a/addons/sys_signalmap/fnc_doProcess.sqf +++ b/addons/sys_signalmap/fnc_doProcess.sqf @@ -74,7 +74,7 @@ with uiNamespace do { GVAR(ctrlGroup) ctrlCommit 0; GVAR(overlayMessageGrp) = GVAR(mapDisplay) ctrlCreate ["RscControlsGroupNoScrollbars", 13119]; GVAR(signal_debug) pushBack GVAR(overlayMessageGrp); - GVAR(overlayMessageGrp) ctrlSetPosition [safezoneX + safezoneW - 0.5, safezoneY + safezoneH - 1, 0.5, 0.75]; + GVAR(overlayMessageGrp) ctrlSetPosition [safeZoneX + safeZoneW - 0.5, safeZoneY + safeZoneH - 1, 0.5, 0.75]; GVAR(overlayMessageGrp) ctrlCommit 0; ctrlSetFocus GVAR(overlayMessageGrp); diff --git a/addons/sys_signalmap/fnc_drawMenu.sqf b/addons/sys_signalmap/fnc_drawMenu.sqf index 2946c6dbc..d993fbf31 100644 --- a/addons/sys_signalmap/fnc_drawMenu.sqf +++ b/addons/sys_signalmap/fnc_drawMenu.sqf @@ -52,7 +52,7 @@ with uiNamespace do { GVAR(ctrlGroup) ctrlSetBackgroundColor [1,1,0,1]; GVAR(ctrlGroup) ctrlSetForegroundColor [1,1,0,1]; - GVAR(ctrlGroup) ctrlSetPosition [safezoneX + safezoneW - 0.5, safezoneY + safezoneH - 1, 0.5, 0.75]; + GVAR(ctrlGroup) ctrlSetPosition [safeZoneX + safeZoneW - 0.5, safeZoneY + safeZoneH - 1, 0.5, 0.75]; GVAR(ctrlGroup) ctrlCommit 0; private ["_background"]; diff --git a/addons/sys_signalmap/fnc_drawSignalMaps.sqf b/addons/sys_signalmap/fnc_drawSignalMaps.sqf index e7e823c16..ac591bae9 100644 --- a/addons/sys_signalmap/fnc_drawSignalMaps.sqf +++ b/addons/sys_signalmap/fnc_drawSignalMaps.sqf @@ -42,13 +42,13 @@ with uiNamespace do { // player sideChat format["%1 %2", _x select 0, _x select 1]; private _txPos = _sample select 0; private _rxPos = _sample select 1; - drawLine3D [ASLtoATL _txPos, ASLtoATL _rxPos, [0, 1, 0, 1]]; + drawLine3D [ASLToATL _txPos, ASLToATL _rxPos, [0, 1, 0, 1]]; private _reflections = _sample select 3; { if (count _x == 0) exitWith {}; private _point = _x select 0; - drawLine3D [ASLtoATL _txPos, ASLtoATL _point, [1, 0, 0, 1]]; - drawLine3D [ASLtoATL _point, ASLtoATL _rxPos, [0, 0, 1, 1]]; + drawLine3D [ASLToATL _txPos, ASLToATL _point, [1, 0, 0, 1]]; + drawLine3D [ASLToATL _point, ASLToATL _rxPos, [0, 0, 1, 1]]; } forEach _reflections; } forEach GVAR(sampleData); }; diff --git a/addons/sys_signalmap/fnc_showOverlayMessage.sqf b/addons/sys_signalmap/fnc_showOverlayMessage.sqf index f5622b680..928b59004 100644 --- a/addons/sys_signalmap/fnc_showOverlayMessage.sqf +++ b/addons/sys_signalmap/fnc_showOverlayMessage.sqf @@ -21,7 +21,7 @@ with uiNamespace do { GVAR(ctrlGroup) ctrlCommit 0; GVAR(overlayMessageGrp) = GVAR(mapDisplay) ctrlCreate ["RscControlsGroupNoScrollbars", 13119]; GVAR(signal_debug) pushBack GVAR(overlayMessageGrp); - GVAR(overlayMessageGrp) ctrlSetPosition [safezoneX + safezoneW - 0.5, safezoneY + safezoneH - 1, 0.5, 0.75]; + GVAR(overlayMessageGrp) ctrlSetPosition [safeZoneX + safeZoneW - 0.5, safeZoneY + safeZoneH - 1, 0.5, 0.75]; GVAR(overlayMessageGrp) ctrlCommit 0; ctrlSetFocus GVAR(overlayMessageGrp); diff --git a/addons/sys_zeus/CfgVehicles.hpp b/addons/sys_zeus/CfgVehicles.hpp index 166736787..afe13cc34 100644 --- a/addons/sys_zeus/CfgVehicles.hpp +++ b/addons/sys_zeus/CfgVehicles.hpp @@ -5,13 +5,13 @@ class CfgVehicles { class GVAR(remoteEars) { displayName = CSTRING(Remote); condition = QUOTE(acre_current_player isNotEqualTo player && {acre_player isEqualTo player}); - exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting"}; + exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting", "isNotHandcuffed", "isNotSurrendering"}; statement = QUOTE([false] call FUNC(setUsePlayer)); }; class GVAR(playerEars) { displayName = CSTRING(Player); condition = QUOTE(acre_current_player isNotEqualTo player && {acre_player isNotEqualTo player}); - exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting"}; + exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting", "isNotHandcuffed", "isNotSurrendering"}; statement = QUOTE([true] call FUNC(setUsePlayer)); }; }; diff --git a/docs/wiki/user/vehicle-racks.md b/docs/wiki/user/vehicle-racks.md index ae4f064a0..5c811996b 100644 --- a/docs/wiki/user/vehicle-racks.md +++ b/docs/wiki/user/vehicle-racks.md @@ -16,6 +16,8 @@ In order to use and mount and unmount (when possible) a vehicle rack, ACE3 Inter Configuring the vehicle rack (opening the radio GUI) is disabled for *turned out* positions. +**Note:** Vehicle Racks cannot be accessed by AI that is being remote controlled by a Zeus Gamemaster. + ## Vehicle intercom In addition, vehicle racks are integrated into the intercom system. A rack with access to *crew* or *passenger* intercom allows players without access to the rack to hear incoming transmissions. These players however, will not be able to configure the radio nor transmit through it in the current implementation.