+ * Get's flags used for onDraw3D that can be cached
+ *
+ * Arguments:
+ * None
+ *
+ * Return Value:
+ * [_drawName,_drawRank,_enabledTagsNearby,_enabledTagsCursor,_maxDistance]
+ *
+ * Example:
+ * call ace_nametags_fnc_getCachedFlags
+ *
+ * Public: No
+ */
+#include "script_component.hpp"
+
+// Determine flags from current settings
+private _drawName = true;
+private _enabledTagsNearby = false;
+private _enabledTagsCursor = false;
+
+switch (GVAR(showPlayerNames)) do {
+ case 0: {
+ // Player names Disabled [Note: this should be unreachable as the drawEH will be removed]
+ _drawName = false;
+ _enabledTagsNearby = (GVAR(showSoundWaves) == 2);
+ };
+ case 1: {
+ // Player names Enabled
+ _enabledTagsNearby = true;
+ };
+ case 2: {
+ // Player names Only cursor
+ _enabledTagsNearby = (GVAR(showSoundWaves) == 2);
+ _enabledTagsCursor = true;
+ };
+ case 3: {
+ // Player names Only Keypress
+ _enabledTagsNearby = GVAR(showSoundWaves) == 2; // non-cached: || _onKeyPressAlphaMax) > 0
+ };
+ case 4: {
+ // Player names Only Cursor and Keypress
+ _enabledTagsNearby = (GVAR(showSoundWaves) == 2);
+ // non-cached: _enabledTagsCursor = _onKeyPressAlphaMax > 0;
+ };
+ case 5: {
+ // Fade on border
+ _enabledTagsNearby = true;
+ };
+};
+
+private _ambientBrightness = ((([] call EFUNC(common,ambientBrightness)) + ([0, 0.4] select ((currentVisionMode ace_player) != 0))) min 1) max 0;
+private _maxDistance = _ambientBrightness * GVAR(PlayerNamesViewDistance);
+
+[_drawName, GVAR(showPlayerRanks),_enabledTagsNearby,_enabledTagsCursor,_maxDistance]
diff --git a/addons/nametags/functions/fnc_onDraw3d.sqf b/addons/nametags/functions/fnc_onDraw3d.sqf
index dc4b130a52..f937b230b3 100644
--- a/addons/nametags/functions/fnc_onDraw3d.sqf
+++ b/addons/nametags/functions/fnc_onDraw3d.sqf
@@ -15,67 +15,33 @@
*/
#include "script_component.hpp"
-private ["_defaultIcon", "_distance", "_alpha", "_icon", "_targets", "_relPos", "_projDist", "_target"];
-
BEGIN_COUNTER(GVAR(onDraw3d));
// Don't show nametags in spectator or if RscDisplayMPInterrupt is open
if ((isNull ACE_player) || {!alive ACE_player} || {!isNull (findDisplay 49)}) exitWith {};
-// Determine flags from current settings
-private _drawName = true;
-private _drawRank = GVAR(showPlayerRanks);
-private _enabledTagsNearby = false;
-private _enabledTagsCursor = false;
-private _onKeyPressAlphaMax = 1;
-switch (GVAR(showPlayerNames)) do {
- case 0: {
- // Player names Disabled
- _drawName = false;
- _enabledTagsNearby = (GVAR(showSoundWaves) == 2);
- _enabledTagsCursor = false;
- };
- case 1: {
- // Player names Enabled
- _enabledTagsNearby = true;
- _enabledTagsCursor = false;
- };
- case 2: {
- // Player names Only cursor
- _enabledTagsNearby = (GVAR(showSoundWaves) == 2);
- _enabledTagsCursor = true;
- };
- case 3: {
- // Player names Only Keypress
- _onKeyPressAlphaMax = 2 + (GVAR(showNamesTime) - CBA_missionTime);
- _enabledTagsNearby = (_onKeyPressAlphaMax) > 0 || (GVAR(showSoundWaves) == 2);
- _enabledTagsCursor = false;
- };
- case 4: {
- // Player names Only Cursor and Keypress
- _onKeyPressAlphaMax = 2 + (GVAR(showNamesTime) - CBA_missionTime);
- _enabledTagsNearby = (GVAR(showSoundWaves) == 2);
- _enabledTagsCursor = _onKeyPressAlphaMax > 0;
- };
- case 5: {
- // Fade on border
- _enabledTagsNearby = true;
- _enabledTagsCursor = false;
- };
-};
+private _flags = [[], DFUNC(getCachedFlags), ACE_player, QGVAR(flagsCache), 2] call EFUNC(common,cachedCall);
-private _ambientBrightness = ((([] call EFUNC(common,ambientBrightness)) + ([0, 0.4] select ((currentVisionMode ace_player) != 0))) min 1) max 0;
-private _maxDistance = _ambientBrightness * GVAR(PlayerNamesViewDistance);
+_flags params ["_drawName", "_drawRank", "_enabledTagsNearby", "_enabledTagsCursor", "_maxDistance"];
+
+private _onKeyPressAlphaMax = 1;
+if (GVAR(showPlayerNames) == 3) then {
+ _onKeyPressAlphaMax = 2 + (GVAR(showNamesTime) - CBA_missionTime);
+ _enabledTagsNearby = _enabledTagsNearby || {_onKeyPressAlphaMax > 0}
+};
+if (GVAR(showPlayerNames) == 4) then {
+ _onKeyPressAlphaMax = 2 + (GVAR(showNamesTime) - CBA_missionTime);
+ _enabledTagsCursor = _onKeyPressAlphaMax > 0;
+};
private _camPosAGL = positionCameraToWorld [0, 0, 0];
if !((_camPosAGL select 0) isEqualType 0) exitWith {}; // handle RHS / bugged vehicle slots
private _camPosASL = AGLtoASL _camPosAGL;
-private _vecy = (AGLtoASL positionCameraToWorld [0, 0, 1]) vectorDiff _camPosASL;
// Show nametag for the unit behind the cursor or its commander
if (_enabledTagsCursor) then {
- _target = cursorTarget;
+ private _target = cursorTarget;
if !(_target isKindOf "CAManBase") then {
// When cursorTarget is on a vehicle show the nametag for the commander.
if !(_target in allUnitsUAV) then {
@@ -92,7 +58,7 @@ if (_enabledTagsCursor) then {
{lineIntersectsSurfaces [_camPosASL, eyePos _target, ACE_player, _target] isEqualTo []} &&
{!isObjectHidden _target}) then {
- _distance = ACE_player distance _target;
+ private _distance = ACE_player distance _target;
private _drawSoundwave = (GVAR(showSoundWaves) > 0) && {[_target] call FUNC(isSpeaking)};
// Alpha:
@@ -137,6 +103,9 @@ if (_enabledTagsNearby) then {
private _target = _x;
if !(isNull _target) then {
+ private _drawSoundwave = (GVAR(showSoundWaves) > 0) && {[_target] call FUNC(isSpeaking)};
+ if (_enabledTagsCursor && {!_drawSoundwave}) exitWith {}; // (Cursor Only && showSoundWaves==2) - quick exit
+
private _relPos = (visiblePositionASL _target) vectorDiff _camPosASL;
private _distance = vectorMagnitude _relPos;
@@ -152,7 +121,6 @@ if (_enabledTagsNearby) then {
};
};
- private _drawSoundwave = (GVAR(showSoundWaves) > 0) && {[_target] call FUNC(isSpeaking)};
private _alphaMax = _onKeyPressAlphaMax;
if ((GVAR(showSoundWaves) == 2) && _drawSoundwave) then {
_drawName = _drawSoundwave;
diff --git a/addons/nametags/stringtable.xml b/addons/nametags/stringtable.xml
index 68b3cec90b..628384bc19 100644
--- a/addons/nametags/stringtable.xml
+++ b/addons/nametags/stringtable.xml
@@ -468,6 +468,7 @@
画面端では非表示
Ukryj na brzegach ekranu
화면 가장자리에서 사라짐
+ Estomper sur les bords de l'écran
diff --git a/addons/rearm/functions/fnc_canRearm.sqf b/addons/rearm/functions/fnc_canRearm.sqf
index 202524dd10..a0a268cdfa 100644
--- a/addons/rearm/functions/fnc_canRearm.sqf
+++ b/addons/rearm/functions/fnc_canRearm.sqf
@@ -19,7 +19,7 @@
private ["_dummy","_magazineClass"];
params [["_target", objNull, [objNull]], ["_unit", objNull, [objNull]]];
-if (GVAR(level) == 0 || {isNull _unit} || {!(_unit isKindOf "CAManBase")} || {!local _unit} || {_target distance _unit > REARM_ACTION_DISTANCE} || {_target getVariable [QGVAR(disabled), false]}) exitWith {false};
+if (GVAR(level) == 0 || {isNull _unit} || {!(_unit isKindOf "CAManBase")} || {!local _unit} || {([_unit, _target] call EFUNC(interaction,getInteractionDistance)) > REARM_ACTION_DISTANCE} || {_target getVariable [QGVAR(disabled), false]}) exitWith {false};
_dummy = _unit getVariable [QGVAR(dummy), objNull];
if (isNull _dummy) exitwith {false};
diff --git a/addons/refuel/functions/fnc_canCheckFuel.sqf b/addons/refuel/functions/fnc_canCheckFuel.sqf
index e0046dea3d..57514e4b8f 100644
--- a/addons/refuel/functions/fnc_canCheckFuel.sqf
+++ b/addons/refuel/functions/fnc_canCheckFuel.sqf
@@ -22,5 +22,5 @@ params [["_unit", objNull, [objNull]], ["_target", objNull, [objNull]]];
{!(_unit isKindOf "CAManBase")} ||
{!local _unit} ||
{!alive _target} ||
- {(_target distance _unit) > REFUEL_ACTION_DISTANCE} ||
+ {([_unit, _target] call EFUNC(interaction,getInteractionDistance)) > REFUEL_ACTION_DISTANCE} ||
{(_target call FUNC(getFuel) == REFUEL_INFINITE_FUEL)})
diff --git a/addons/refuel/functions/fnc_canConnectNozzle.sqf b/addons/refuel/functions/fnc_canConnectNozzle.sqf
index adb4935bb2..3cd5ac4c58 100644
--- a/addons/refuel/functions/fnc_canConnectNozzle.sqf
+++ b/addons/refuel/functions/fnc_canConnectNozzle.sqf
@@ -27,5 +27,5 @@ if (_target isKindOf "AllVehicles") then {
!(isNull _nozzle ||
{_engine} ||
- {(_target distance _unit) > REFUEL_ACTION_DISTANCE} ||
+ {([_unit, _target] call EFUNC(interaction,getInteractionDistance)) > REFUEL_ACTION_DISTANCE} ||
{!isNull (_target getVariable [QGVAR(nozzle), objNull])})
diff --git a/addons/refuel/functions/fnc_canReturnNozzle.sqf b/addons/refuel/functions/fnc_canReturnNozzle.sqf
index a0dbf64587..04849c5ca0 100644
--- a/addons/refuel/functions/fnc_canReturnNozzle.sqf
+++ b/addons/refuel/functions/fnc_canReturnNozzle.sqf
@@ -21,5 +21,5 @@ params [["_unit", objNull, [objNull]], ["_target", objNull, [objNull]]];
private _nozzle = _unit getVariable [QGVAR(nozzle), objNull];
(!isNull _nozzle) &&
-{_target distance _unit < REFUEL_ACTION_DISTANCE} &&
+{([_unit, _target] call EFUNC(interaction,getInteractionDistance)) < REFUEL_ACTION_DISTANCE} &&
{_target == (_nozzle getVariable [QGVAR(source), objNull])}
diff --git a/addons/refuel/functions/fnc_canTakeNozzle.sqf b/addons/refuel/functions/fnc_canTakeNozzle.sqf
index 65016323b2..b7ed8f0cb1 100644
--- a/addons/refuel/functions/fnc_canTakeNozzle.sqf
+++ b/addons/refuel/functions/fnc_canTakeNozzle.sqf
@@ -23,6 +23,6 @@ if (isNull _unit ||
{!local _unit} ||
{!alive _target} ||
{!isNull (_unit getVariable [QGVAR(nozzle), objNull])} ||
- {(_target distance _unit) > REFUEL_ACTION_DISTANCE}) exitWith {false};
+ {([_unit, _target] call EFUNC(interaction,getInteractionDistance)) > REFUEL_ACTION_DISTANCE}) exitWith {false};
!(_target getVariable [QGVAR(isConnected), false]) && {!(_unit getVariable [QGVAR(isRefueling), false])}
diff --git a/addons/repair/CfgEden.hpp b/addons/repair/CfgEden.hpp
index eb7933fee4..c11f0b96b8 100644
--- a/addons/repair/CfgEden.hpp
+++ b/addons/repair/CfgEden.hpp
@@ -9,8 +9,8 @@ class Cfg3DEN {
};
};
class GVAR(isEngineerControl): Title {
- attributeLoad = "(_this controlsGroupCtrl 100) lbsetcursel (((_value + 1) min 3) max 0);";
- attributeSave = "(missionnamespace getvariable ['ace_isEng_temp',0]) - 1;";
+ attributeLoad = "(_this controlsGroupCtrl 100) lbSetCurSel (((_value + 1) min 3) max 0);";
+ attributeSave = "(lbCurSel (_this controlsGroupCtrl 100)) - 1";
class Controls: Controls {
class Title: Title{};
class Value: ctrlToolbox {
@@ -22,7 +22,6 @@ class Cfg3DEN {
rows = 1;
columns = 4;
strings[] = {"$STR_3DEN_Attributes_Lock_Default_text", CSTRING(AssignEngineerRole_role_none), CSTRING(AssignEngineerRole_role_engineer), CSTRING(AssignEngineerRole_role_specialist)};
- onToolboxSelChanged = "missionnamespace setvariable ['ace_isEng_temp',_this select 1];";
};
};
};
diff --git a/addons/spectator/functions/fnc_handleInterface.sqf b/addons/spectator/functions/fnc_handleInterface.sqf
index e5bb7498e0..9ba64ec0f0 100644
--- a/addons/spectator/functions/fnc_handleInterface.sqf
+++ b/addons/spectator/functions/fnc_handleInterface.sqf
@@ -34,7 +34,7 @@ switch (toLower _mode) do {
[FUNC(handleUnits), 9, _display] call CBA_fnc_addPerFrameHandler;
// Handle 3D unit icons
- GVAR(iconHandler) = addMissionEventHandler ["Draw3D",FUNC(handleIcons)];
+ GVAR(iconHandler) = addMissionEventHandler ["Draw3D", {call FUNC(handleIcons)}];
// Populate the help window
private _help = (_display displayCtrl IDC_HELP) controlsGroupCtrl IDC_HELP_LIST;
diff --git a/addons/tagging/functions/fnc_createTag.sqf b/addons/tagging/functions/fnc_createTag.sqf
index 87c9ff13f9..c579c6e05f 100644
--- a/addons/tagging/functions/fnc_createTag.sqf
+++ b/addons/tagging/functions/fnc_createTag.sqf
@@ -28,9 +28,8 @@ if (_texture == "") exitWith {
false
};
-private _tag = "UserTexture1m_F" createVehicle [0,0,0];
+private _tag = createSimpleObject ["UserTexture1m_F", _tagPosASL];
_tag setObjectTextureGlobal [0, _texture];
-_tag setPosASL _tagPosASL;
_tag setVectorDirAndUp _vectorDirAndUp;
// Throw a global event for mision makers
diff --git a/addons/tagging/stringtable.xml b/addons/tagging/stringtable.xml
index dbccdfd355..8b0782c32e 100644
--- a/addons/tagging/stringtable.xml
+++ b/addons/tagging/stringtable.xml
@@ -8,6 +8,7 @@
Tagowanie
Markierungssystem
뿌리기
+ Marquage
Configure how the tagging system will operate by default.
@@ -16,6 +17,7 @@
Skonfiguruj zachowanie systemu tagowania.
Konfiguriert, wie das Markierungssystem standardmäßig funktioniert.
뿌리기 시스템의 기본사항을 설정합니다.
+ Configure le fonctionnement par défaut du système de marquage.
Quick Tag
@@ -24,6 +26,7 @@
Szybkie tagowanie
Schnelle Markierung
빠른 뿌리기
+ Marquage rapide
Action performed on main tag interaction point.
@@ -32,6 +35,7 @@
Akcja wykonywana na głównym punkcie interakcji tagu.
Aktion, die am Haupt-Interaktionspunkt ausgeführt werden soll.
이 동작은 상호작용에서 뿌리기를 할 수 있게 해준다
+ Action réalisé au point de marquage principal.
Last Used
@@ -40,6 +44,7 @@
Ostatnio użyte
Zuletzt benutzt
최근 사용
+ Dernier utilisé
Random X
@@ -48,6 +53,7 @@
Losowy X
Zufällig X
무작위 X
+ Aléatoire X
Random
@@ -56,6 +62,7 @@
Losowy
Zufällig
무작위
+ Aléatoire
Tag
@@ -63,6 +70,8 @@
Marcar
Taguj
Tag
+ Oznakuj
+ Marque
Marca
Označit
Marcar
@@ -179,7 +188,7 @@
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.
+ Un spray de peinture pour marquer les murs.
Una bomboletta di spay per contrassegnare i muri.
Plechovka se sprejem k vytváření značek.
Uma lata de tinta spray para marcar paredes.
@@ -189,3 +198,4 @@
+
diff --git a/addons/ui/stringtable.xml b/addons/ui/stringtable.xml
index f567ab8e9c..e13c38f6df 100644
--- a/addons/ui/stringtable.xml
+++ b/addons/ui/stringtable.xml
@@ -443,7 +443,7 @@
Cannot modify a forced User Interface element.
Não é possível modificar um elemento forçado da interface do usuário.
- Impossible de modifier un élément de l'interface utilisateur forcé
+ Impossible de modifier un élément de l'interface utilisateur forcé.
Невозможно изменить зафиксированный элемент пользовательского интерфейса.
ユーザー インタフェイス要素は変更できません。
Nie można modyfikować wymuszonego elementu interfejsu użytkownika.
diff --git a/addons/zeus/stringtable.xml b/addons/zeus/stringtable.xml
index 29e24f6476..c55371a41c 100644
--- a/addons/zeus/stringtable.xml
+++ b/addons/zeus/stringtable.xml
@@ -22,7 +22,7 @@
Poskytuje kontrolu na různými aspekty Zeuse.
Bietet die Steuerung verschiedener Zeus-Optionen an.
Proporciona controle sobre diversos aspectos do Zeus.
- Fourni le contrôle des différents aspects de Zeus
+ Fourni le contrôle des différents aspects de Zeus.
Különböző beállítási lehetőségeket biztosít a Zeus részeihez.
Позволяет контролировать различные аспекты Зевса.
Fornisce controllo su vari aspetti di Zeus.
@@ -50,7 +50,7 @@
Zobrazit globální zprávu když je hráč přiřazen jako Zeus.
Zeige globale Popup-Nachrichten wenn ein Spieler zu Zeus wird.
Mostra uma mensagem popup quando um jogador é atribuido ao Zeus.
- Affiche un message global quand un joueur est assigné en tant que Zeus
+ Affiche un message global quand un joueur est assigné en tant que Zeus.
Globális üzeneteket jelez ki, ha egy játékos Zeus-nak lesz beosztva.
Отображает глобальное всплывающее сообщение, когда один из игроков становится Зевсом.
Mostra messaggi popup globali quando un giocatore viene assegnato come Zeus.
@@ -106,7 +106,7 @@
Přehrát varování (vítr) když Zeus převezmě kontrolu nad jednotkou.
Spiele Windgeräusche ab, wenn Zeus eine Einheit steuert.
Reproduz sons de vento quando uma unidade é remotamente controlada pelo Zeus.
- Joue des bruits de vent quand Zeus controle une unité
+ Joue des bruits de vent quand Zeus controle une unité.
Szélhangokat játszik le, ha a Zeus távvezérel egy egységet.
Проигрывает звук ветра каждый раз, когда Зевс вселяется в юнита.
Esegui rumori di vento quando Zeus controlla un'unità in remoto.
@@ -134,7 +134,7 @@
Přehrát varování (rádio) když Zeus použije dělostřelectvo.
Spiele eine Radiowarnung ab, wenn Zeus Artillerie verwendet.
Reproduz uma aviso via rádio quando o Zeus usa um explosivo.
- Joue un son radio quand le Zeus utilise du matériel militaire
+ Joue un son radio quand le Zeus utilise du matériel militaire.
Rádiós figyelmeztetés kiadása, ha a Zeus tüzérséget használ.
Проигрывает звук радио каждый раз, когда Зевс использует артиллерию.
Esegui un messaggio radio quando Zeus usa esplosivi.
@@ -162,7 +162,7 @@
Odhalí miny pro spojence a umístnit jejich značku na mapu.
Melde Minen gegenüber Verbündeten und platziere entsprechende Kartenmarkierungen.
Revelar minas para aliados e colocar marcadores no mapa.
- Révéler les mines et placer un marqueur sur la carte
+ Révéler les mines et placer un marqueur sur la carte.
Feltárja az aknákat a szövetségeseknek, és jelölőket helyez el a térképen.
Показывает мины союзникам и отмечает их маркерами на карте.
Rivela mine ad alleati e piazza marcatori in mappa.
@@ -293,7 +293,7 @@
Changes: aimingAccuracy
- Change: aimingAccuracy
+ Change : aimingAccuracy
Изменяет: aimingAccuracy
Upravuje: aimingAccuracy
変更:aimingAccuracy
@@ -313,7 +313,7 @@
Changes: aimingShake, aimingSpeed, reloadSpeed
- Change: aimingShake, aimingSpeed, reloadSpeed
+ Change : aimingShake, aimingSpeed, reloadSpeed
Изменяет: aimingShake, aimingSpeed, reloadSpeed
Upravuje: aimingShake, aimingSpeed, reloadSpeed
変更:aimingShake, aimingSpeed, reloadSpeed
@@ -323,7 +323,7 @@
Spotting
- repérage
+ Repérage
Обнаружение
Vnímavost
索敵
@@ -333,7 +333,7 @@
Changes: spotDistance, spotTime
- Change: spotDistance, spotTime
+ Change : spotDistance, spotTime
Изменяет: spotDistance, spotTime
Upravuje: spotDistance, spotTime
変更:spotDistance, spotTime
@@ -343,7 +343,7 @@
Seek Cover
- Chercher couverture
+ Chercher des couvertures
Поиск укрытий
Vyhledávat krytí
遮蔽
@@ -353,7 +353,7 @@
Should AI seek cover
- L'IA devrait elle chercher couverture
+ L'IA devrait elle chercher des couvertures
Должны ли боты искать укрытия
AI se bude snažit vyhledávat krytí
AI は遮蔽を取るようになります
@@ -758,7 +758,7 @@
Cargo:
- Cargo:
+ Cargo :
Груз:
Náklad:
カーゴ:
@@ -805,7 +805,7 @@
Invalid radius entered
- rayon invalide entré
+ Rayon invalide entré
Введен неправильный радиус
Vložen neplatný parametr
無効な半径が入力されました
diff --git a/docs/README_DE.md b/docs/README_DE.md
index 1541ef02b5..5e10b5b91b 100644
--- a/docs/README_DE.md
+++ b/docs/README_DE.md
@@ -4,7 +4,7 @@
-
+
diff --git a/docs/README_PL.md b/docs/README_PL.md
index 72afbc8cdc..ba4493acb6 100644
--- a/docs/README_PL.md
+++ b/docs/README_PL.md
@@ -3,7 +3,7 @@
-
+
diff --git a/docs/_config.yml b/docs/_config.yml
index 81a93be7d3..24cd47f070 100644
--- a/docs/_config.yml
+++ b/docs/_config.yml
@@ -8,9 +8,9 @@ ace:
githubUrl: https://github.com/acemod/ACE3
version:
major: 3
- minor: 8
- patch: 3
- build: 14
+ minor: 9
+ patch: 0
+ build: 16
acex:
githubUrl: https://github.com/acemod/ACEX
diff --git a/docs/_config_dev.yml b/docs/_config_dev.yml
index 7d55c24cf2..66c4dfb7e1 100644
--- a/docs/_config_dev.yml
+++ b/docs/_config_dev.yml
@@ -10,9 +10,9 @@ ace:
githubUrl: https://github.com/acemod/ACE3
version:
major: 3
- minor: 8
- patch: 3
- build: 14
+ minor: 9
+ patch: 0
+ build: 16
acex:
githubUrl: https://github.com/acemod/ACEX
diff --git a/docs/wiki/development/coding-guidelines.md b/docs/wiki/development/coding-guidelines.md
index b4f844a8e4..81cf20eff4 100644
--- a/docs/wiki/development/coding-guidelines.md
+++ b/docs/wiki/development/coding-guidelines.md
@@ -590,6 +590,15 @@ Event handlers in ACE3 are implemented through the CBA event system (ACE3's own
More information on the [CBA Events System](https://github.com/CBATeam/CBA_A3/wiki/Custom-Events-System){:target="_blank"} and [CBA Player Events](https://github.com/CBATeam/CBA_A3/wiki/Player-Events){:target="_blank"} pages.
+
+
Warning about BIS event handlers:
+
BIS's event handlers (`addEventHandler`, `addMissionEventHandler`) are slow when passing a large code variable. Use a short code block that calls the function you want.
+ ```js
+ player addEventHandler ["Fired", FUNC(handleFired)]; // bad
+ player addEventHandler ["Fired", {call FUNC(handleFired)}]; // good
+ ```
+
+
### 7.4 Hashes
When a key value pair is required, make use of the hash implementation from ACE3.
diff --git a/mod.cpp b/mod.cpp
index 7620a55fea..ca215089bf 100644
--- a/mod.cpp
+++ b/mod.cpp
@@ -1,8 +1,8 @@
-name = "Advanced Combat Environment 3.8.3";
+name = "Advanced Combat Environment 3.9.0";
picture = "logo_ace3_ca.paa";
actionName = "GitHub";
action = "https://github.com/acemod/ACE3";
-description = "ACE3 - Version 3.8.3";
+description = "ACE3 - Version 3.9.0";
logo = "logo_ace3_ca.paa";
logoOver = "logo_ace3_ca.paa";
tooltip = "ACE3";
diff --git a/optionals/compat_adr_97/stringtable.xml b/optionals/compat_adr_97/stringtable.xml
index a584de2e16..895734fd9b 100644
--- a/optionals/compat_adr_97/stringtable.xml
+++ b/optionals/compat_adr_97/stringtable.xml
@@ -226,7 +226,7 @@
Caliber: 5.7mm<br />Rounds: 50<br />Used in: P90
Kaliber: 5,7mm<br />Patronen: 50<br />Eingesetzt von: P90
Kaliber: 5,7mm<br />Pociski: 50<br />Używany w: P90
- Calibre: 5.7mm<br />Cartouches: 50<br />Utilisé avec: P90
+ Calibre : 5,7mm<br />Cartouches : 50<br />Utilisé avec : P90
Calibre: 5.7mm<br />Balas: 50<br />Se usa en: P90
Калибр: 5,7 мм<br />Патронов: 50<br />Используются с: P90
Calibro: 5.7mm<br />Munizioni: 50<br />In uso su: P90
diff --git a/optionals/compat_rhs_afrf3/CfgWeapons.hpp b/optionals/compat_rhs_afrf3/CfgWeapons.hpp
index 1f193d92f5..09a3af7384 100644
--- a/optionals/compat_rhs_afrf3/CfgWeapons.hpp
+++ b/optionals/compat_rhs_afrf3/CfgWeapons.hpp
@@ -46,21 +46,42 @@ class CfgWeapons {
ACE_barrelTwist = 195.072;
ACE_barrelLength = 589.28;
};
-
+ class rhs_weap_orsis_Base_F;
+ class rhs_weap_t5000: rhs_weap_orsis_Base_F { // http://en.orsis.com/production/catalog/19046/
+ ACE_barrelTwist = 254.0; // 1:10"
+ ACE_barrelLength = 698.5; // 27.5"
+ ACE_RailHeightAboveBore = 2.4;
+ };
class rhs_acc_sniper_base;
class rhs_acc_pso1m2: rhs_acc_sniper_base {
- ACE_ScopeAdjust_Vertical[] = { 0, 0 };
- ACE_ScopeAdjust_Horizontal[] = { -10, 10 };
+ ACE_ScopeAdjust_Vertical[] = {0, 0};
+ ACE_ScopeAdjust_Horizontal[] = {-10, 10};
ACE_ScopeAdjust_VerticalIncrement = 0.5;
ACE_ScopeAdjust_HorizontalIncrement = 0.5;
};
class rhs_acc_pso1m21: rhs_acc_sniper_base {
- ACE_ScopeAdjust_Vertical[] = { 0, 0 };
- ACE_ScopeAdjust_Horizontal[] = { -10, 10 };
+ ACE_ScopeAdjust_Vertical[] = {0, 0};
+ ACE_ScopeAdjust_Horizontal[] = {-10, 10};
ACE_ScopeAdjust_VerticalIncrement = 0.5;
ACE_ScopeAdjust_HorizontalIncrement = 0.5;
};
-
+ class ItemCore;
+ class InventoryOpticsItem_Base_F;
+ class rhs_acc_dh520x56: ItemCore { // http://nightvision.ru/catalog/4/item/35
+ ACE_ScopeHeightAboveRail = 4.6;
+ ACE_ScopeAdjust_Vertical[] = {0, 33};
+ ACE_ScopeAdjust_Horizontal[] = {-9, 9};
+ ACE_ScopeAdjust_VerticalIncrement = 0.1;
+ ACE_ScopeAdjust_HorizontalIncrement = 0.1;
+ class ItemInfo: InventoryOpticsItem_Base_F {
+ class OpticsModes {
+ class dedal_520 {
+ discreteDistance[] = {100};
+ discreteDistanceInitIndex = 0;
+ };
+ };
+ };
+ };
class Launcher_Base_F;
class rhs_weap_rpg7: Launcher_Base_F {
ace_reloadlaunchers_enabled = 1;
diff --git a/optionals/compat_rhs_usf3/CfgAmmo.hpp b/optionals/compat_rhs_usf3/CfgAmmo.hpp
index 93939879ef..d4feb96cc0 100644
--- a/optionals/compat_rhs_usf3/CfgAmmo.hpp
+++ b/optionals/compat_rhs_usf3/CfgAmmo.hpp
@@ -31,7 +31,7 @@ class CfgAmmo {
ACE_caliber = 7.823;
ACE_bulletLength = 37.821;
ACE_bulletMass = 14.256;
- ACE_ammoTempMuzzleVelocityShifts[] = {-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
+ ACE_ammoTempMuzzleVelocityShifts[] = {-5.3, -5.1, -4.6, -4.2, -3.4, -2.6, -1.4, -0.3, 1.4, 3.0, 5.2};
ACE_ballisticCoefficients[] = {0.310};
ACE_velocityBoundaries[] = {};
ACE_standardAtmosphere = "ICAO";
diff --git a/optionals/compat_rhs_usf3/CfgVehicles.hpp b/optionals/compat_rhs_usf3/CfgVehicles.hpp
index c6f683cb29..5350e10867 100644
--- a/optionals/compat_rhs_usf3/CfgVehicles.hpp
+++ b/optionals/compat_rhs_usf3/CfgVehicles.hpp
@@ -358,7 +358,7 @@ class CfgVehicles {
};
class APC_Tracked_02_base_F: Tank_F {};
- class rhsusf_m113_tank_base: APC_Tracked_02_base_F {
+ class rhsusf_m113tank_base: APC_Tracked_02_base_F {
EGVAR(refuel,fuelCapacity) = 360;
class Turrets: Turrets {
class MainTurret: MainTurret {
@@ -367,7 +367,6 @@ class CfgVehicles {
};
};
- class rhsusf_m113tank_base: APC_Tracked_02_base_F {};
class rhsusf_m113_usarmy: rhsusf_m113tank_base {};
class rhsusf_m113_usarmy_supply: rhsusf_m113_usarmy {
transportAmmo = 0;
diff --git a/optionals/compat_rhs_usf3/CfgWeapons.hpp b/optionals/compat_rhs_usf3/CfgWeapons.hpp
index dcdb3586e1..4285db8661 100644
--- a/optionals/compat_rhs_usf3/CfgWeapons.hpp
+++ b/optionals/compat_rhs_usf3/CfgWeapons.hpp
@@ -13,16 +13,24 @@ class CfgWeapons {
class rhs_weap_M107_Base_F: GM6_base_F {
ACE_barrelTwist = 381.0;
ACE_barrelLength = 736.6;
+ ACE_RailHeightAboveBore = 3.8;
};
class rhs_weap_XM2010_Base_F: Rifle_Base_F {
ACE_barrelTwist = 254.0;
ACE_barrelLength = 609.6;
ACE_Overheating_dispersion = 0.75;
+ ACE_RailHeightAboveBore = 3.6;
};
class rhs_weap_m24sws: rhs_weap_XM2010_Base_F {
ACE_barrelTwist = 285.75;
ACE_barrelLength = 609.6;
+ ACE_RailHeightAboveBore = 1.8;
};
+ class rhs_weap_m40a5: rhs_weap_XM2010_Base_F {
+ ACE_barrelTwist = 304.8; // 1:12"
+ ACE_barrelLength = 635.0; // 25"
+ ACE_RailHeightAboveBore = 2.6;
+ };
class arifle_MX_Base_F;
class rhs_weap_m4_Base: arifle_MX_Base_F {
ACE_barrelTwist = 177.8;
@@ -75,14 +83,17 @@ class CfgWeapons {
ACE_barrelTwist = 304.8;
ACE_barrelLength = 558.8;
ACE_Overheating_dispersion = 0.75;
+ ACE_RailHeightAboveBore = 3.3;
};
class rhs_weap_sr25: rhs_weap_m14ebrri {
ACE_barrelTwist = 285.75;
ACE_barrelLength = 609.6;
+ ACE_RailHeightAboveBore = 3.4;
};
class rhs_weap_sr25_ec: rhs_weap_sr25 {
ACE_barrelTwist = 285.75;
ACE_barrelLength = 508.0;
+ ACE_RailHeightAboveBore = 3.4;
};
class rhs_weap_M590_5RD: Rifle_Base_F {
ACE_barrelTwist = 0.0;
@@ -131,8 +142,11 @@ class CfgWeapons {
};
};
};
- class rhsusf_acc_LEUPOLDMK4: rhsusf_acc_sniper_base {};
+ class rhsusf_acc_LEUPOLDMK4: rhsusf_acc_sniper_base {
+ ACE_ScopeHeightAboveRail = 2.4;
+ };
class rhsusf_acc_LEUPOLDMK4_2: rhsusf_acc_sniper_base {
+ ACE_ScopeHeightAboveRail = 3.8;
class ItemInfo: InventoryOpticsItem_Base_F {
class OpticsModes {
class pso1_scope {
@@ -142,8 +156,11 @@ class CfgWeapons {
};
};
};
- class rhsusf_acc_LEUPOLDMK4_2_d: rhsusf_acc_LEUPOLDMK4_2 {};
+ class rhsusf_acc_LEUPOLDMK4_2_d: rhsusf_acc_LEUPOLDMK4_2 {
+ ACE_ScopeHeightAboveRail = 3.8;
+ };
class rhsusf_acc_premier: rhsusf_acc_LEUPOLDMK4_2 {
+ ACE_ScopeHeightAboveRail = 5.4;
class ItemInfo: InventoryOpticsItem_Base_F {
class OpticsModes {
class pso1_scope {
@@ -153,8 +170,11 @@ class CfgWeapons {
};
};
};
- class rhsusf_acc_premier_low: rhsusf_acc_premier {};
+ class rhsusf_acc_premier_low: rhsusf_acc_premier {
+ ACE_ScopeHeightAboveRail = 4.0;
+ };
class rhsusf_acc_premier_anpvs27: rhsusf_acc_premier {
+ ACE_ScopeHeightAboveRail = 5.4;
class ItemInfo: InventoryOpticsItem_Base_F {
class OpticsModes {
class pso1_nvg {
@@ -164,6 +184,24 @@ class CfgWeapons {
};
};
};
+ class rhsusf_acc_M8541: rhsusf_acc_premier { // http://www.schmidtundbender.de/en/products/police-and-military-forces/3-12x50-pm-iilpmtc.html
+ ACE_ScopeHeightAboveRail = 4.0;
+ ACE_ScopeAdjust_Vertical[] = {0, 22};
+ ACE_ScopeAdjust_Horizontal[] = {-6, 6};
+ ACE_ScopeAdjust_VerticalIncrement = 0.1;
+ ACE_ScopeAdjust_HorizontalIncrement = 0.1;
+ class ItemInfo: InventoryOpticsItem_Base_F {
+ class OpticsModes {
+ class Snip {
+ discreteDistance[] = {100};
+ discreteDistanceInitIndex = 0;
+ };
+ };
+ };
+ };
+ class rhsusf_acc_M8541_low: rhsusf_acc_M8541 {
+ ACE_ScopeHeightAboveRail = 3.0;
+ };
// RHS lauchers
class rhs_weap_fgm148: launch_O_Titan_F {
ace_javelin_enabled = 1;