Slides
- Diapositives
+ Diapo
Slajdy
Diák
Slides
diff --git a/addons/spectator/UI/interface.hpp b/addons/spectator/UI/interface.hpp
index 392cd9a43d..8c566844ee 100644
--- a/addons/spectator/UI/interface.hpp
+++ b/addons/spectator/UI/interface.hpp
@@ -190,7 +190,7 @@ class GVAR(interface) {
1
};
multiselectEnabled = 0;
- maxHistoryDelay = 10e10;
+ disableKeyboardSearch = 1;
onTreeDblClick = QUOTE([ARR_2('onTreeDblClick',_this)] call FUNC(handleInterface));
};
class unitFrame: RscFrame {
diff --git a/addons/spectator/config.cpp b/addons/spectator/config.cpp
index 92736edb48..aee0eaaa76 100644
--- a/addons/spectator/config.cpp
+++ b/addons/spectator/config.cpp
@@ -21,7 +21,9 @@ class CfgPatches {
class CfgRespawnTemplates {
class ADDON {
+ displayName = CSTRING(DisplayName);
onPlayerKilled = QFUNC(respawnTemplate);
onPlayerRespawn = QFUNC(respawnTemplate);
+ respawnTypes[] = {2,3};
};
};
diff --git a/addons/spectator/functions/fnc_handleCompass.sqf b/addons/spectator/functions/fnc_handleCompass.sqf
index a65cc9ddce..6f0f94b0ee 100644
--- a/addons/spectator/functions/fnc_handleCompass.sqf
+++ b/addons/spectator/functions/fnc_handleCompass.sqf
@@ -46,19 +46,12 @@ _positions = [
[_compassW + _offset, 0]
];
-_sequence = if (_heading < 90) then {
- [_SW, _WN, _NE, _ES]
-} else {
- if (_heading < 180) then {
- [_WN, _NE, _ES, _SW]
- } else {
- if (_heading < 270) then {
- [_NE, _ES, _SW, _WN]
- } else {
- [_ES, _SW, _WN, _NE]
- };
- };
-};
+_sequence = [
+ [_SW, _WN, _NE, _ES],
+ [_WN, _NE, _ES, _SW],
+ [_NE, _ES, _SW, _WN],
+ [_ES, _SW, _WN, _NE]
+] select floor(_heading/90);
{
diff --git a/addons/spectator/functions/fnc_updateCameraModes.sqf b/addons/spectator/functions/fnc_updateCameraModes.sqf
index de1611823b..819636ee22 100644
--- a/addons/spectator/functions/fnc_updateCameraModes.sqf
+++ b/addons/spectator/functions/fnc_updateCameraModes.sqf
@@ -21,6 +21,10 @@
#include "script_component.hpp"
+if !(EGVAR(common,settingsInitFinished)) exitWith {
+ EGVAR(common,runAtSettingsInitialized) pushBack [DFUNC(updateCameraModes),_this];
+};
+
params [["_addModes",[],[[]]], ["_removeModes",[],[[]]]];
private ["_newModes","_currentModes"];
diff --git a/addons/spectator/functions/fnc_updateUnits.sqf b/addons/spectator/functions/fnc_updateUnits.sqf
index e5b15b6bc1..418643be38 100644
--- a/addons/spectator/functions/fnc_updateUnits.sqf
+++ b/addons/spectator/functions/fnc_updateUnits.sqf
@@ -33,43 +33,37 @@ if !(_newUnits isEqualTo []) exitWith {
};
};
-private ["_sides","_cond","_filteredUnits","_filteredGroups"];
-
// Unit setting filter
-_newUnits = [[],allPlayers,playableUnits,allUnits] select GVAR(filterUnits);
+private _newUnits = [[],allPlayers,playableUnits,allUnits] select GVAR(filterUnits);
// Side setting filter
-_sides = [];
-_cond = [{_this == (side group player)},{(_this getFriend (side group player)) >= 0.6},{(_this getFriend (side group player)) < 0.6},{true}] select GVAR(filterSides);
-{
- if (_x call _cond) then {
- _sides pushBack _x;
- };
-} forEach GVAR(availableSides);
+private _sideFilter = [
+ {_x == (side group player)},
+ {(_x getFriend (side group player)) >= 0.6},
+ {(_x getFriend (side group player)) < 0.6},
+ {true}
+] select GVAR(filterSides);
+
+private _filteredSides = GVAR(availableSides) select _sideFilter;
// Filter units and append to list
-_filteredUnits = [];
-{
- if (
- (alive _x) &&
- {(_x isKindOf "CAManBase")} &&
- {(side group _x) in _sides} && // Side filter
- {simulationEnabled _x} &&
- {!(_x getVariable [QGVAR(isStaged), false])} // Who watches the watchmen?
- ) then {
- _filteredUnits pushBack _x;
- };
-} forEach (_newUnits - GVAR(unitBlacklist));
+private _filteredUnits = (_newUnits - GVAR(unitBlacklist)) select {
+ (alive _x) &&
+ {(_x isKindOf "CAManBase")} &&
+ {(side group _x) in _filteredSides} && // Side filter
+ {simulationEnabled _x} &&
+ {!(_x getVariable [QGVAR(isStaged), false])} // Who watches the watchmen?
+};
_filteredUnits append GVAR(unitWhitelist);
// Cache icons and colour for drawing
-_filteredGroups = [];
+private _filteredGroups = [];
{
// Intentionally re-applied to units in case their status changes
[_x] call FUNC(cacheUnitInfo);
- _filteredGroups pushBack (group _x);
+ _filteredGroups pushBackUnique (group _x);
} forEach _filteredUnits;
// Replace previous lists entirely (removes any no longer valid)
+GVAR(groupList) = _filteredGroups;
GVAR(unitList) = _filteredUnits arrayIntersect _filteredUnits;
-GVAR(groupList) = _filteredGroups arrayIntersect _filteredGroups;
diff --git a/addons/spectator/functions/fnc_updateVisionModes.sqf b/addons/spectator/functions/fnc_updateVisionModes.sqf
index c2bbb09167..6db965af3e 100644
--- a/addons/spectator/functions/fnc_updateVisionModes.sqf
+++ b/addons/spectator/functions/fnc_updateVisionModes.sqf
@@ -29,6 +29,10 @@
#include "script_component.hpp"
+if !(EGVAR(common,settingsInitFinished)) exitWith {
+ EGVAR(common,runAtSettingsInitialized) pushBack [DFUNC(updateVisionModes),_this];
+};
+
params [["_addModes",[],[[]]], ["_removeModes",[],[[]]]];
private ["_newModes","_currentModes"];
diff --git a/addons/spectator/stringtable.xml b/addons/spectator/stringtable.xml
index 4f18fdf08f..29262d06b5 100644
--- a/addons/spectator/stringtable.xml
+++ b/addons/spectator/stringtable.xml
@@ -1,6 +1,11 @@
-
+
+
+ ACE Spectator
+ ACE スペクテイター
+ Spettatore ACE
+
Spectator Settings
Zuschauer Einstellungen
diff --git a/addons/spottingscope/CfgVehicles.hpp b/addons/spottingscope/CfgVehicles.hpp
index 84ce5f177f..fa2574cb8d 100644
--- a/addons/spottingscope/CfgVehicles.hpp
+++ b/addons/spottingscope/CfgVehicles.hpp
@@ -43,7 +43,7 @@ class CfgVehicles {
class ACE_Actions: ACE_Actions{
class ACE_MainActions: ACE_MainActions {
- selection = "main_gun";
+ selection = "main_turret_axis";
class ACE_Pickup {
selection = "";
displayName = CSTRING(PickUp);
diff --git a/addons/switchunits/stringtable.xml b/addons/switchunits/stringtable.xml
index d079350a19..c86142c877 100644
--- a/addons/switchunits/stringtable.xml
+++ b/addons/switchunits/stringtable.xml
@@ -1,4 +1,4 @@
-
+
@@ -20,7 +20,7 @@
Versuche zu Wechseln
Snažím se přehodit
Próba zmiany
- Sto provando a cambiare
+ Provando a cambiare
Intentando cambiar
Essaye de basculer
Tentando trocar
diff --git a/addons/tagging/XEH_postInit.sqf b/addons/tagging/XEH_postInit.sqf
index 6693bda2f6..1e7003281a 100644
--- a/addons/tagging/XEH_postInit.sqf
+++ b/addons/tagging/XEH_postInit.sqf
@@ -16,7 +16,7 @@ for "_index" from 0 to (_countOptions - 1) do {
private _model = getText (_cfgClass >> "model");
if (_model != "") then {
private _array = _model splitString "\";
- GVAR(cacheStaticModels) setVariable [toLower (_array select ((count _array) - 2)), _cfgClass];
+ GVAR(cacheStaticModels) setVariable [(_array select ((count _array) - 1)), true];
};
};
};
@@ -32,7 +32,7 @@ for "_index" from 0 to (_countOptions - 1) do {
private _model = getText (_cfgClass >> "model");
if (_model != "") then {
private _array = _model splitString "\";
- GVAR(cacheStaticModels) setVariable [toLower (_array select ((count _array) - 2)), _cfgClass];
+ GVAR(cacheStaticModels) setVariable [(_array select ((count _array) - 1)), true];
};
};
};
diff --git a/addons/tagging/functions/fnc_checkTaggable.sqf b/addons/tagging/functions/fnc_checkTaggable.sqf
index d739bbfec5..e4328687a9 100644
--- a/addons/tagging/functions/fnc_checkTaggable.sqf
+++ b/addons/tagging/functions/fnc_checkTaggable.sqf
@@ -9,16 +9,14 @@
* Is surface taggable
*
* Example:
- * [unit] call ace_tagging_fnc_checkTaggable
+ * [player] call ace_tagging_fnc_checkTaggable
*
* Public: No
*/
#include "script_component.hpp"
-params ["_unit"];
-
-[[_unit], {
+[_this, {
params ["_unit"];
// Exit if no required item in inventory
@@ -45,15 +43,11 @@ params ["_unit"];
if (_object isKindOf "Static") exitWith {false};
// If the class is not categorized correctly search the cache
- private _array = str(_object) splitString " ";
- private _str = toLower (_array select 1);
- TRACE_1("Object:",_str);
- private _objClass = GVAR(cacheStaticModels) getVariable _str;
+ private _modelName = (getModelInfo _object) select 0;
+ private _isStatic = GVAR(cacheStaticModels) getVariable [_modelName, false];
+ TRACE_2("Object:",_modelName,_isStatic);
// If the class in not on the cache, exit
- if (isNil "_objClass") exitWith {
- false
- };
- true
+ (!_isStatic)
}) exitWith {
TRACE_1("Pointed object is non static",_object);
false
diff --git a/addons/tagging/functions/fnc_tag.sqf b/addons/tagging/functions/fnc_tag.sqf
index 3aec5ec139..4893037117 100644
--- a/addons/tagging/functions/fnc_tag.sqf
+++ b/addons/tagging/functions/fnc_tag.sqf
@@ -49,15 +49,11 @@ if ((!isNull _object) && {
if (_object isKindOf "Static") exitWith {false};
// If the class is not categorized correctly search the cache
- private _array = str(_object) splitString " ";
- private _str = toLower (_array select 1);
- TRACE_1("Object:",_str);
- private _objClass = GVAR(cacheStaticModels) getVariable _str;
+ private _modelName = (getModelInfo _object) select 0;
+ private _isStatic = GVAR(cacheStaticModels) getVariable [_modelName, false];
+ TRACE_2("Object:",_modelName,_isStatic);
// If the class in not on the cache, exit
- if (isNil "_objClass") exitWith {
- false
- };
- true
+ (!_isStatic)
}) exitWith {
TRACE_1("Pointed object is non static",_object);
false
@@ -81,7 +77,7 @@ private _v3 = _v2 vectorCrossProduct _v1;
TRACE_3("Reference:", _v1, _v2, _v3);
-_fnc_isOk = {
+private _fnc_isOk = {
params ["_rx", "_ry"];
private _startPosASL2 = _touchingPoint vectorAdd (_v2 vectorMultiply _rx) vectorAdd (_v3 vectorMultiply _ry) vectorAdd (_v1 vectorMultiply (-0.06));
private _endPosASL2 = _startPosASL2 vectorAdd (_v1 vectorMultiply (0.12));
diff --git a/addons/tagging/stringtable.xml b/addons/tagging/stringtable.xml
index e0af181b3d..ab5866dbfa 100644
--- a/addons/tagging/stringtable.xml
+++ b/addons/tagging/stringtable.xml
@@ -1,4 +1,4 @@
-
+
@@ -9,6 +9,7 @@
Markierungssystem
뿌리기
Marquage
+ Marcamento
Configure how the tagging system will operate by default.
@@ -18,6 +19,7 @@
Konfiguriert, wie das Markierungssystem standardmäßig funktioniert.
뿌리기 시스템의 기본사항을 설정합니다.
Configure le fonctionnement par défaut du système de marquage.
+ Configura quanto il sistema di marcamento agirà da se.
Quick Tag
@@ -27,6 +29,7 @@
Schnelle Markierung
빠른 뿌리기
Marquage rapide
+ Marcamento Rapido
Action performed on main tag interaction point.
@@ -36,6 +39,7 @@
Aktion, die am Haupt-Interaktionspunkt ausgeführt werden soll.
이 동작은 상호작용에서 뿌리기를 할 수 있게 해준다
Action réalisé au point de marquage principal.
+ Azione eseguita sul punto di interazione dei tag principali.
Last Used
@@ -45,6 +49,7 @@
Zuletzt benutzt
최근 사용
Dernier utilisé
+ Ultimo Usato
Random X
@@ -54,6 +59,7 @@
Zufällig X
무작위 X
Aléatoire X
+ Random X
Random
@@ -63,6 +69,7 @@
Zufällig
무작위
Aléatoire
+ Random
Tag
@@ -75,6 +82,7 @@
Маркер
タグ
뿌리기
+ Tag
X black
@@ -195,4 +203,3 @@
-
diff --git a/addons/trenches/stringtable.xml b/addons/trenches/stringtable.xml
index 9203635d49..1fee5489df 100644
--- a/addons/trenches/stringtable.xml
+++ b/addons/trenches/stringtable.xml
@@ -1,4 +1,4 @@
-
+
@@ -147,7 +147,7 @@
Digging Trench
Grabe Schützengraben
Kopanie wnęki
- Sto Scavando la Trincea
+ Scavando la Trincea
Cavando trinchera
Creuse la tranchée
Vykopat zákop
@@ -166,6 +166,7 @@
塹壕を掘りつづける
Graben fortsetzen
계속해서 참호파기
+ Continua a Scavare la Trincea
Remove Trench
@@ -177,6 +178,7 @@
塹壕を消す
Schützengraben entfernen
참호 제거
+ Rimuove Trincea
Removing Trench
@@ -188,6 +190,7 @@
塹壕を消している
Entferne Schützengraben
참호 제거중...
+ Rimuovendo la Trincea
diff --git a/addons/ui/stringtable.xml b/addons/ui/stringtable.xml
index e13c38f6df..1bc2f8d888 100644
--- a/addons/ui/stringtable.xml
+++ b/addons/ui/stringtable.xml
@@ -1,4 +1,4 @@
-
+
@@ -11,6 +11,7 @@
Interfejs użytkownika
Benutzeroberfläche
사용자 인터페이스
+ Interfaccia Utente
User Interface
@@ -22,6 +23,7 @@
Interfejs użytkownika
Benutzeroberfläche
사용자 인터페이스
+ Interfaccia Utente
This module allows toggling visible user interface parts.
@@ -32,6 +34,7 @@
Moduł ten pozwala zmienić stan widoczności poszczególnych elementów UI.
Dieses Modul erlaubt es, Teile der Benutzeroberfläche (UI) an- oder auszuschalten.
이 모듈은 사용자 인터페이스의 부분을 토글하는것을 가능케 해줍니다.
+ Questo modulo consente di commutare parti di interfaccia utente visibili.
Allow Selective UI
@@ -43,6 +46,7 @@
Zezwól na selektywne UI
Erlaube selektives UI
선택적 사용자 인터페이스 허가
+ Permette l'UI Selettiva
Allow client to modify their UI.
@@ -54,6 +58,7 @@
Zezwól klientowi na modyfikację UI.
Erlaube Clients, ihr UI zu modifizieren.
클라이언트가 선택적 사용자 인터페이스 사용하는것을 허가합니다
+ Permette al client di modificare la propria UI.
Soldier/Vehicle/Weapon Information
@@ -65,6 +70,7 @@
Informacje o żołnierzu/pojeździe/broni
Soldat/Fahrzeug/Waffe Information
병사/차량/무기 정보
+ Informazioni Soldato/Veicolo/Arma
Vehicle Radar
@@ -76,6 +82,7 @@
Radar w pojeździe
Fahrzeugradar
차량 레이더
+ Rada Veicolo
Vehicle Compass
@@ -87,6 +94,7 @@
Kompas w pojeździe
Fahrzeugkompass
차량 나침반
+ Bussola Veicolo
Command Menu
@@ -98,6 +106,7 @@
Menu dowodzenia
Kommandomenü
지휘 메뉴
+ Menù di Comando
Group Bar
@@ -109,6 +118,7 @@
Pasek grupy
Gruppenleiste
그룹 막대
+ Barra del Gruppo
Weapon Name
@@ -120,6 +130,7 @@
Nazwa broni
Waffenname
무기 이름
+ Nome Arma
Weapon Name Background
@@ -131,6 +142,7 @@
Tło nazwy broni
Waffenname Hintergrund
무기 이름 배경
+ Nome Sfondo Arma
Firing Mode
@@ -142,6 +154,7 @@
Tryb ognia
Feuermodus
사격 모드
+ Modalità di Fuoco
Ammo Type
@@ -153,6 +166,7 @@
Typ amunicji
Munitionstyp
탄종
+ Tipo Munizioni
Ammo Count
@@ -164,6 +178,7 @@
Ilość amunicji
Munitionsanzahl
탄약수
+ Contatore Munizioni
Magazine Count
@@ -175,6 +190,7 @@
Ilość magazynków
Magazinanzahl
탄창수
+ Contatore Caricatore
Throwable Type
@@ -186,6 +202,7 @@
Typ granatu
Wurfobjekt-Typ
투척물 종류
+ Tipo Lanciabile
Throwable Count
@@ -197,6 +214,7 @@
Ilość granatów
Wurfobjekt-Anzahl
투척물 개수
+ Contatore Lanciabili
Zeroing
@@ -208,6 +226,7 @@
Wyzerowanie broni
Nullung
영점
+ Azzeramento
Weapon Lower Info Background
@@ -218,6 +237,7 @@
Tło dolnej części informacji o broni
Hintergrund der unteren Waffen-Info-Leiste
무기 상세 정보 배경
+ Informazioni Sfondo Arma Bassa
Stance
@@ -229,6 +249,7 @@
Postura
Haltung
자세
+ Postura
Stamina Bar
@@ -240,6 +261,7 @@
Pasek staminy
Ausdaueranzeige
체력 막대
+ Barra Stamina
Gunner Weapon Name
@@ -250,6 +272,7 @@
Nazwa broni strzelca
Richtschütze Waffenname
사수 무기 명칭
+ Nome Arma Artigliere
Gunner Weapon Name Background
@@ -260,6 +283,7 @@
Tło nazwy broni strzelca
Richtschütze Waffenname Hintergrund
사수 무기 명칭 배경
+ Nome Sfondo Arma Artigliere
Gunner Firing Mode
@@ -270,6 +294,7 @@
Tryb ognia strzelca
Richtschütze Feuermodus
사수 사격 모드
+ Modalità di Fuoco Artigliere
Gunner Ammo Type
@@ -280,6 +305,7 @@
Typ amunicji strzelca
Richtschütze Munitionstyp
사수 탄종
+ Tipo Munizioni Artigliere
Gunner Ammo Count
@@ -290,6 +316,7 @@
Ilość amunicji strzelca
Richtschütze Munitionsanzahl
사수 탄약 수량
+ Contatore Munizioni Artigliere
Gunner Magazine Count
@@ -300,6 +327,7 @@
Ilość magazynków strzelca
Richtschütze Magazinanzahl
사수 탄창 수량
+ Contatore Caricatore Artigliere
Gunner Launchable Type
@@ -310,6 +338,7 @@
Typ rakiet strzelca
Richtschütze Raketentyp
사수 발사체 종류
+ Tipo Lanciabile Artigliere
Gunner Launchable Count
@@ -320,6 +349,7 @@
Ilość rakiet strzelca
Richtschütze Raketenanzahl
사수 발사체 수량
+ Contatore Lanciabili Artigliere
Gunner Zeroing
@@ -330,6 +360,7 @@
Wyzerowanie broni strzelca
Richtschütze Nullung
사수 영점
+ Azzeramento Artigliere
Gunner Weapon Lower Info Background
@@ -340,6 +371,7 @@
Tło dolnej części informacji o broni strzelca
Hintergrund der unteren Waffen-Info-Leiste (Richtschütze)
사수 무기 상세 정보 배경
+ Informazioni Sfondo Arma Artigliere Bassa
Vehicle Name
@@ -351,6 +383,7 @@
Nazwa pojazdu
Fahrzeugname
차량 명칭
+ Nome Veicolo
Vehicle Name Background
@@ -362,6 +395,7 @@
Tło nazwy pojazdu
Fahrzeugname Hintergrund
차량 명칭 배경
+ Nome Sfondo Veicolo
Vehicle Fuel Bar
@@ -373,6 +407,7 @@
Pasek paliwa
Fahrzeug-Treibstoffleiste
차량 연료 막대
+ Barra Carburante Veicolo
Vehicle Speed
@@ -384,6 +419,7 @@
Prędkościomierz
Fahrzeuggeschwindigkeit
차량 속도
+ Velocità Veicolo
Vehicle Altitude
@@ -395,6 +431,7 @@
Wysokościomierz radarowy
Fahrzeughöhe
차량 고도
+ Altitudine Veicolo
Vehicle Damage
@@ -406,6 +443,7 @@
Uszkodzenia pojazdu
Fahrzeugschaden
차량 피해
+ Danno Veicolo
Vehicle Info Background
@@ -417,6 +455,7 @@
Tło informacji o pojeździe
Fahrzeug Info Hintergrund
차량 정보 배경
+ Informazioni Sfondo Veicolo
Requires Soldier/Vehicle/Weapon Information.
@@ -428,6 +467,7 @@
Wymaga informacji o żołnierzu/pojeździe/broni.
Benötigt Soldat/Fahrzeug/Waffe Information.
병사/차량/무기의 정보가 필요합니다.
+ Richiede informazione Soldato/Veicolo/Arma.
Modifying User Interface is disabled.
@@ -439,6 +479,7 @@
Modyfikacja interfejsu użytkownika jest wyłączona.
Die Modifizierung des UI ist deaktiviert.
사용자 인터페이스 변경이 비활성화 되어있습니다.
+ La modifica dell'Interfaccia Utente è disabilitata.
Cannot modify a forced User Interface element.
@@ -449,6 +490,7 @@
Nie można modyfikować wymuszonego elementu interfejsu użytkownika.
Gesperrte UI-Elemente können nicht modifiziert werden.
강제 사용자 인터페이스는 변경하실 수 없습니다.
+ Impossibile modificare un elemento forzato d' Interfaccia Utente.
diff --git a/addons/vector/CfgVehicles.hpp b/addons/vector/CfgVehicles.hpp
index f06f79aa12..23aa8d7412 100644
--- a/addons/vector/CfgVehicles.hpp
+++ b/addons/vector/CfgVehicles.hpp
@@ -6,15 +6,15 @@ class CfgVehicles {
scopeCurator = 2;
displayName = CSTRING(VectorName);
vehicleClass = "Items";
- class TransportWeapons {
- MACRO_ADDWEAPON(ACE_Vector,1);
+ class TransportItems {
+ MACRO_ADDITEM(ACE_Vector,1);
};
};
class Box_NATO_Support_F;
class ACE_Box_Misc: Box_NATO_Support_F {
- class TransportWeapons {
- MACRO_ADDWEAPON(ACE_Vector,6);
+ class TransportItems {
+ MACRO_ADDITEM(ACE_Vector,6);
};
};
};
diff --git a/addons/weaponselect/functions/fnc_putWeaponAway.sqf b/addons/weaponselect/functions/fnc_putWeaponAway.sqf
index d2747bf23f..0d7e93a429 100644
--- a/addons/weaponselect/functions/fnc_putWeaponAway.sqf
+++ b/addons/weaponselect/functions/fnc_putWeaponAway.sqf
@@ -19,4 +19,4 @@ params ["_unit"];
_unit call EFUNC(common,fixLoweredRifleAnimation);
-_unit action ["SwitchWeapon", _unit, _unit, 99];
+_unit action ["SwitchWeapon", _unit, _unit, 299];
diff --git a/addons/weaponselect/functions/fnc_selectWeaponMode.sqf b/addons/weaponselect/functions/fnc_selectWeaponMode.sqf
index 80784778de..c0a5f00a8a 100644
--- a/addons/weaponselect/functions/fnc_selectWeaponMode.sqf
+++ b/addons/weaponselect/functions/fnc_selectWeaponMode.sqf
@@ -42,7 +42,7 @@ private _mode = _modes select _index;
_index = 0;
while {
- _index < 100 && {currentMuzzle _unit != _muzzle || {currentWeaponMode _unit != _mode}}
+ _index < 299 && {currentMuzzle _unit != _muzzle || {currentWeaponMode _unit != _mode}}
} do {
_unit action ["SwitchWeapon", _unit, _unit, _index];
_index = _index + 1;
diff --git a/addons/weaponselect/functions/fnc_selectWeaponMuzzle.sqf b/addons/weaponselect/functions/fnc_selectWeaponMuzzle.sqf
index 973d34f7c8..3d7f05e954 100644
--- a/addons/weaponselect/functions/fnc_selectWeaponMuzzle.sqf
+++ b/addons/weaponselect/functions/fnc_selectWeaponMuzzle.sqf
@@ -42,7 +42,7 @@ private _muzzle = _muzzles select _index;
_index = 0;
while {
- _index < 100 && {currentMuzzle _unit != _muzzle}
+ _index < 299 && {currentMuzzle _unit != _muzzle}
} do {
_unit action ["SwitchWeapon", _unit, _unit, _index];
_index = _index + 1;
diff --git a/addons/weaponselect/functions/fnc_selectWeaponVehicle.sqf b/addons/weaponselect/functions/fnc_selectWeaponVehicle.sqf
index 7435dd30d8..883588ee4b 100644
--- a/addons/weaponselect/functions/fnc_selectWeaponVehicle.sqf
+++ b/addons/weaponselect/functions/fnc_selectWeaponVehicle.sqf
@@ -31,7 +31,7 @@ if (_turret isEqualTo [] && {_unit == driver _vehicle}) then {
_index = 0;
while {
- _index < 100 && {currentWeapon _vehicle != _weapon}
+ _index < 299 && {currentWeapon _vehicle != _weapon}
} do {
_unit action ["SwitchWeapon", _vehicle, _unit, _index];
_index = _index + 1;
@@ -46,7 +46,7 @@ if (_turret isEqualTo [] && {_unit == driver _vehicle}) then {
_index = 0;
while {
- _index < 100 && {_vehicle currentWeaponTurret _turret != _weapon}
+ _index < 299 && {_vehicle currentWeaponTurret _turret != _weapon}
} do {
_unit action ["SwitchWeapon", _vehicle, _unit, _index];
_index = _index + 1;
diff --git a/addons/weather/XEH_postInit.sqf b/addons/weather/XEH_postInit.sqf
index 569dd87dc4..d2c6f3b7df 100644
--- a/addons/weather/XEH_postInit.sqf
+++ b/addons/weather/XEH_postInit.sqf
@@ -62,11 +62,9 @@ simulWeatherSync;
["ace_settingsInitialized",{
TRACE_1("ace_settingsInitialized eh",GVAR(syncRain));
- //Create a 0 sec delay PFEH to update rain every frame:
+ // update rain every frame:
if (GVAR(syncRain)) then {
- [{
- 0 setRain GVAR(ACE_rain);
- }, 0, []] call CBA_fnc_addPerFrameHandler;
+ addMissionEventHandler ["EachFrame", {0 setRain GVAR(ACE_rain)}];
};
//Create a 1 sec delay PFEH to update wind/rain/temp/humidity:
diff --git a/addons/yardage450/CfgVehicles.hpp b/addons/yardage450/CfgVehicles.hpp
index d8f2ccabe3..2dc52de68a 100644
--- a/addons/yardage450/CfgVehicles.hpp
+++ b/addons/yardage450/CfgVehicles.hpp
@@ -6,15 +6,15 @@ class CfgVehicles {
scopeCurator = 2;
displayName = CSTRING(DisplayName);
vehicleClass = "Items";
- class TransportWeapons {
- MACRO_ADDWEAPON(ACE_Yardage450,1);
+ class TransportItems {
+ MACRO_ADDITEM(ACE_Yardage450,1);
};
};
class Box_NATO_Support_F;
class ACE_Box_Misc: Box_NATO_Support_F {
- class TransportWeapons {
- MACRO_ADDWEAPON(ACE_Yardage450,4);
+ class TransportItems {
+ MACRO_ADDITEM(ACE_Yardage450,4);
};
};
};
diff --git a/addons/zeus/CfgVehicles.hpp b/addons/zeus/CfgVehicles.hpp
index c7111e42bc..42dc6d4289 100644
--- a/addons/zeus/CfgVehicles.hpp
+++ b/addons/zeus/CfgVehicles.hpp
@@ -160,6 +160,12 @@ class CfgVehicles {
displayName = CSTRING(ModuleSearchNearby_DisplayName);
function = QFUNC(moduleSearchNearby);
};
+ class GVAR(moduleSuppressiveFire): GVAR(moduleBase) {
+ curatorCanAttach = 1;
+ category = QGVAR(AI);
+ displayName = CSTRING(ModuleSuppressiveFire_DisplayName);
+ function = QFUNC(moduleSuppressiveFire);
+ };
class GVAR(moduleSetMedic): GVAR(moduleBase) {
curatorCanAttach = 1;
category = QGVAR(Medical);
diff --git a/addons/zeus/XEH_PREP.hpp b/addons/zeus/XEH_PREP.hpp
index f52c300355..0090d04015 100644
--- a/addons/zeus/XEH_PREP.hpp
+++ b/addons/zeus/XEH_PREP.hpp
@@ -4,6 +4,7 @@ PREP(bi_moduleCurator);
PREP(bi_moduleMine);
PREP(bi_moduleProjectile);
PREP(bi_moduleRemoteControl);
+PREP(getModuleDestination);
PREP(handleZeusUnitAssigned);
PREP(moduleAddSpareTrack);
PREP(moduleAddSpareWheel);
@@ -16,6 +17,8 @@ PREP(moduleSetMedic);
PREP(moduleSetMedicalVehicle);
PREP(moduleSetMedicalFacility);
PREP(moduleSimulation);
+PREP(moduleSuppressiveFire);
+PREP(moduleSuppressiveFireLocal);
PREP(moduleSurrender);
PREP(moduleTeleportPlayers);
PREP(moduleUnconscious);
diff --git a/addons/zeus/XEH_postInit.sqf b/addons/zeus/XEH_postInit.sqf
index 44bd406552..0c3ff85cdf 100644
--- a/addons/zeus/XEH_postInit.sqf
+++ b/addons/zeus/XEH_postInit.sqf
@@ -14,6 +14,7 @@ QGVAR(GlobalSkillAI) addPublicVariableEventHandler FUNC(moduleGlobalSetSkill);
[QGVAR(modulePatrolArea), CBA_fnc_taskPatrol] call CBA_fnc_addEventHandler;
[QGVAR(moduleSearchNearby), CBA_fnc_searchNearby] call CBA_fnc_addEventHandler;
[QGVAR(moduleSearchArea), CBA_fnc_taskSearchArea] call CBA_fnc_addEventHandler;
+[QGVAR(suppressiveFire), LINKFUNC(moduleSuppressiveFireLocal)] call CBA_fnc_addEventHandler;
// Editable object commands must be ran on server, this events are used in the respective module
if (isServer) then {
diff --git a/addons/zeus/config.cpp b/addons/zeus/config.cpp
index 248d2af71c..5cd88750b9 100644
--- a/addons/zeus/config.cpp
+++ b/addons/zeus/config.cpp
@@ -12,6 +12,7 @@ class CfgPatches {
QGVAR(moduleSearchArea),
QGVAR(moduleSearchNearby),
QGVAR(moduleSimulation),
+ QGVAR(moduleSuppressiveFire),
QGVAR(moduleTeleportPlayers)
};
weapons[] = {};
diff --git a/addons/zeus/functions/fnc_getModuleDestination.sqf b/addons/zeus/functions/fnc_getModuleDestination.sqf
new file mode 100644
index 0000000000..d6a19d69b1
--- /dev/null
+++ b/addons/zeus/functions/fnc_getModuleDestination.sqf
@@ -0,0 +1,79 @@
+/*
+ * Author: PabstMirror
+ * Allows zeus to click to indicate a 3d position.
+ *
+ * Arguments:
+ * 0: The souce object
All Curators
全キュレーター
모든 큐레이터
Wszyscy kuratorzy
+ Tous curateurs
Apply changes to all curators
全キュレーターへ変更を適用
모든 큐레이터에 변화를 적용합니다
Zatwierdź zmiany dla wszystkich kuratorów
+ Applique les changements à tous les curateurs
Remove Objects
オブジェクトの削除
물체 삭제
Usuń obiekty
+ Enlève les objets
Remove existing instead of adding new
新しく追加するために削除します
물체를 삭제합니다
Usuń istniejące zamiast dodawać nowe
+ Enlève les objets existants au lieu d'en ajouter de nouveaux
Global AI Skill
@@ -420,18 +425,21 @@
FRUES の追加と削除
패스트로프 추가/제거
Dodaj/usuń FRIES
+ Aj./Enlève FRIES
%1 is not fastrope compatible.
%1 はファストロープに対応していません。
%1은 패스트로프하기에 적합하지 않습니다.
%1 nie jest kompatybilny ze zjazdem linowym.
+ %1 n'est pas compatible.
Unable to remove FRIES, ropes are deployed.
すでにロープが展開されているため、FRIES を削除できません。
패스트로프 제거 불가능, 줄이 이미 배치되었습니다.
Nie można usunąć FRIES, liny są wypuszczone.
+ Pas en mesure d'enlever le FRIES, les cordes ne sont pas déployées.
Teleport Players
@@ -561,6 +569,7 @@
Przełącz symulację
シミュレーションをトグル
재현 토글
+ Bascule Simulation
Add Spare Wheel
@@ -765,6 +774,7 @@
Ładunek:
Ladung:
화물:
+ Cargo:
Task Position
@@ -775,6 +785,7 @@
Pozycja zadania
Position der Aufgabe
작업 위치
+ Posizione Incarico
Select a position to perform the task at
@@ -784,6 +795,7 @@
Wybierz pozycję na której wykonać zadanie
Wähle eine Position, an der die Aufgabe ausgeführt werden soll
작업을 할 위치를 선택하십시요
+ Seleziona una posizione per eseguire l'incarico
Task Radius
@@ -793,6 +805,7 @@
Obszar zadania
Radius der Aufgabe
작업 반경
+ Raggio Incarico
Radius to perform the task within
@@ -802,6 +815,7 @@
Obszar na którym zadanie powinno zostać wykonane
Radius, in dem die Aufgabe ausgeführt werden soll
다음 반경 내에서 작업
+ Raggio per eseguire un incarico
Invalid radius entered
@@ -812,6 +826,11 @@
Wpisano nieprawidłowy promień
Ungültiger Radius eingegeben
알 수 없는 반경 입력됨
+ Raggio Invalido Inserito
+
+
+ Suppressive Fire
+ Fuoco di Soppressione
-
\ No newline at end of file
+
diff --git a/docs/README_DE.md b/docs/README_DE.md
index fda503c4d2..52b11e0797 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 01aa93ddb0..5c5163313f 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 0e5fab26bc..ab86d182c5 100644
--- a/docs/_config.yml
+++ b/docs/_config.yml
@@ -9,16 +9,16 @@ ace:
version:
major: 3
minor: 9
- patch: 1
- build: 17
+ patch: 2
+ build: 18
acex:
githubUrl: https://github.com/acemod/ACEX
version:
major: 3
- minor: 1
- patch: 1
- build: 3
+ minor: 2
+ patch: 0
+ build: 4
markdown: kramdown
diff --git a/docs/_config_dev.yml b/docs/_config_dev.yml
index d3ec0acb83..227d4029bf 100644
--- a/docs/_config_dev.yml
+++ b/docs/_config_dev.yml
@@ -11,8 +11,8 @@ ace:
version:
major: 3
minor: 9
- patch: 1
- build: 17
+ patch: 2
+ build: 18
acex:
githubUrl: https://github.com/acemod/ACEX
diff --git a/docs/img/wiki/feature/abtools_inventory.png b/docs/img/wiki/feature/abtools_inventory.png
new file mode 100644
index 0000000000..72e1607689
Binary files /dev/null and b/docs/img/wiki/feature/abtools_inventory.png differ
diff --git a/docs/img/wiki/feature/scope_module.jpg b/docs/img/wiki/feature/scope_module.jpg
new file mode 100644
index 0000000000..19629bddd7
Binary files /dev/null and b/docs/img/wiki/feature/scope_module.jpg differ
diff --git a/docs/wiki/development/arma-3-issues.md b/docs/wiki/development/arma-3-issues.md
index d7a9ca3b08..11c117b0bf 100644
--- a/docs/wiki/development/arma-3-issues.md
+++ b/docs/wiki/development/arma-3-issues.md
@@ -24,6 +24,8 @@ Keeping track of Arma 3 issues that need to be fixed.
- [Heisenberg: T82108: Switching between optic modes of a sniper scope (AMS, DMS, MOS) will result in a blurred vision](https://feedback.bistudio.com/T82108)
- [AgentRev: T80668: setObjectTextureGlobal causing "Cannot load texture" errors when used with valid mission files](https://feedback.bistudio.com/T80668)
- [BaerMitUmlaut: T120030: Particles do not render properly since 1.62](https://feedback.bistudio.com/T120030)
+- [Killzone_Kid: T79689: magazineTurretAmmo and setMagazineTurretAmmo do not function as expected if there are multiple magazines of the same type](https://feedback.bistudio.com/T79689)
+- [nekoarrow: T122981: setMagazineTurretAmmo locality issue](https://feedback.bistudio.com/T122981)
**Resolved:**
diff --git a/docs/wiki/feature/ai.md b/docs/wiki/feature/ai.md
index 9cf34ce667..49727b70f9 100644
--- a/docs/wiki/feature/ai.md
+++ b/docs/wiki/feature/ai.md
@@ -12,23 +12,22 @@ version:
patch: 0
---
+
+
Changes to CfgAISkill were removed in ACE 3.10 (Default AI will now be more skilled)
+
+
## 1. Overview
-### 1.1 Adjusted AI skill values
-The idea here is to reduce the AI's godlike aiming capabilities while retaining its high intelligence. The AI should be smart enough to move through a town, but also be 'human' in their reaction time and aim.
-
-*Note: All these values can still be adjusted via scripts, these arrays just change what 0 & 1 are for `setSkill`.*
-
-### 1.2 Firing in burst mode
+### 1.1 Firing in burst mode
AI will now use the automatic mode of their weapons at short distances, instead of always relying on firing single shots in quick succession.
-### 1.3 Longer engagement ranges
+### 1.2 Longer engagement ranges
The maximum engagement ranges are increased: AI will fire in bursts with variable lengths on high ranges of 500 - 700 meters, depending on their weapon and optic.
-### 1.4 No dead zones in CQB
+### 1.3 No dead zones in CQB
Some weapons had minimum engagement ranges. If you were as close as 2 meters to an AAF soldier, he wouldn't open fire, because the AI couldn't find any valid fire mode for their weapon. ACE3 removes this behaviour mostly notable in CQB by adding a valid firing mode.
-### 1.5 No scripting
+### 1.4 No scripting
All changes of ACE3 AI are config based to ensure full compatibility with advanced AI modifications like e.g. "ASR AI 3".
## 2. Dependencies
diff --git a/docs/wiki/feature/atragmx.md b/docs/wiki/feature/atragmx.md
index 1656b591f7..5e1f8f9fdf 100644
--- a/docs/wiki/feature/atragmx.md
+++ b/docs/wiki/feature/atragmx.md
@@ -18,67 +18,122 @@ version:
Horus ATragMX software considers atmospheric conditions, gun data, ammunition, range, speed and muzzle velocity to calculate precise aiming solutions with "come-up" results – and even accounts for Coriolis and spin drift effects. ATragMX, loaded on a handheld computer made by TDS Recon, is easy to use and lightning-fast. The Recon meets the rigorous MIL-STD-810F military standard for drops, vibration, humidity, altitude and extreme temperatures.
-## 2. Usage
-### 2.1 Example with M14 and default 7.62mm 20Rnd Mag
+## 2. Requirement
+
+- [Advanced Ballistics module enabled]({{ site.baseurl }}/wiki/feature/advanced-ballistics.html)
+
+
+## 3. Usage
+
+### 3.1 Opening the AtragMx
+
+#### 3.1.1 Interaction Menu
+
+- Open the self interaction menu Ctrl + ⊞ Win
+- Select `Equipment`
+- Select `Open AtragMx`
+
+#### 3.1.2 Custom key
+
+- `OPTIONS` / `CONTROLS` / `CONFIGURE ADDONS` / `ACE3 Equipment`
+
+#### 3.1.3 Inventory
+
+
+
+### 3.2 Example with M14 and default 7.62mm 20Rnd Mag
**Start of the mission:**
- - Open the Range Card and check the cartridge, the zeroed distance, the rifle twist, the muzzle velocity at 15°C and the bore height.
-
+- Open the [Range Card]({{ site.baseurl }}/wiki/feature/rangecard.html) and check the cartridge, the zeroed distance, the rifle twist, the muzzle velocity at 15°C and the bore height.
- - Open the AtragMx and the `Atmsphr` column, select `Default` and `Done`. (cf manual, p 15)
- - `Open Gun` the 7.62x51mm M80 in the `GunList`. (cf manual, p 25)
- - Select `E` (English unit) at the top right. (cf manual, p 10)
- - Open the `Gun` column, check and update the `Bore`, the `Rifle Twist` and `Done`.
- - Select `M` (Metric unit) at the top right.
- - Open the `Gun` column, check and update the `Muzzle Velocity`, the `Zero Range` and `Done`.
- - *The Muzzle Velocity Table will be automatically updated.* (cf manual, p 22)
- - Optionally, `Save Gun` and `Done` in the `GunList`.
+
+
+- Open the AtragMx and the `Atmsphr` column, select `Default` and `Done`. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=15)
+- `Open Gun` the 7.62x51mm M80 in the `GunList`. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=25)
+- Select `E` (English unit) at the top right. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=10)
+- Open the `Gun` column, check and update the `Bore`, the `Rifle Twist` and `Done`.
+- Select `M` (Metric unit) at the top right.
+- Open the `Gun` column, check and update the `Muzzle Velocity`, the `Zero Range` and `Done`.
+- *The Muzzle Velocity Table will be automatically updated.* [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=22)
+- *(Must be edited manually for specific cartridges according with the range card)*
+- Optionally, `Save Gun` and `Done` in the `GunList`.
**In position:**
- - Update the `Atmsphr` column with the Kestrel and `Done`. (cf manual, p 15)
- - *Check the new `Muzzle Velocity` in the `Gun` column.*
- - Update the `Target` column. (cf manual, p 16, 30, 32, 33)
- - Apply the vertical and horizontal elevations on the scope.
- - Control the breath and press.
+
+- Update the `Atmsphr` column with the [Kestrel 4500]({{ site.baseurl }}/wiki/feature/kestrel4500.html) and `Done`.
+- *Check the new `Muzzle Velocity` in the `Gun` column.*
+- Update the `Target` column (the [wind arrow]({{ site.baseurl }}/wiki/feature/weather.html) will also help). [[1]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=16) [[2]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=30) [[3]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=32) [[4]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=33)
+- *The latitude for all common maps can be found in the [ACE3 Github]({{ site.ace.githubUrl }}/blob/master/addons/common/functions/fnc_getMapData.sqf).*
+- Apply the vertical and horizontal elevations on the [scope]({{ site.baseurl }}/wiki/feature/scopes.html).
+- Control the breath and press.
-### 2.2 Example with Truing tool
+### 3.3 Example with Truing tool
**Start of the mission:**
- - Select `Drag Coef Table` in the `Options` menu. (cf manual, p 22)
- - Add the `ZR` and the `C1` (`Gun` column) in the table and `Done`.
+
+- Select `Drag Coef Table` in the `Options` menu.
+- Add the `ZR` and the `C1` (`Gun` column) in the table and `Done`.
**In position:**
- - Open the `Truing Drop` in the `Options` menu. (cf manual, p 23)
- - Add the actual `Target Range` in the `SUPER` column and `Calc`.
- - Add the same `Target Range` in the `SUB` column and `Calc`.
- - Apply the actual scope elevation in the `Drop` field and `Calc`.
- - `Accept` the new `C1`, `Gun` column and `Elev` are updated.
- - *The Drag Coefficient Table will be automatically updated.*
- - Optionally, `Save Gun` and `Done` in the `GunList`.
-
-
-
- - If a new `Target Range` is applied in the `Target` column, select `Drag Coef Table` in the `Options` menu and `Done`.
- - The ballistic coefficient `C1` and the elevation `Elev` will be recalculated.
-
-
-### 2.3 Example with overwritten zero distance
+- Open the `Truing Drop` in the `Options` menu. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=23)
+- Add the actual `Target Range` in the `SUPER` column and `Calc`.
+- Add the same `Target Range` in the `SUB` column and `Calc`.
+- Apply the actual scope elevation in the `Drop` field and `Calc`.
+- `Accept` the new `C1`, `Gun` column and `Elev` are updated.
+- *The Drag Coefficient Table will be automatically updated.* [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=22)
+- Optionally, `Save Gun` and `Done` in the `GunList`.
+
+
+
+- If a new `Target Range` is applied in the `Target` column, select `Drag Coef Table` in the `Options` menu and `Done`.
+- The ballistic coefficient `C1` and the elevation `Elev` will be recalculated.
+
+
- - The `Default zero distance` can be overwritten with the `Scopes module` or the `serverconfig.hpp`.
- - In this case, the Range Card will be automatically updated, NOT the AtragMx.
- - Open the `Gun` column, check and update the `Zero Range` and `Done`.
+### 3.4 Example with overwritten zero distance
+
+- The `Default zero distance` can be overwritten with the [Scopes module]({{ site.baseurl }}/wiki/feature/scopes.html) or the [Settings Framework]({{ site.baseurl }}/wiki/framework/settings-framework.html).
+- In this case, the [Range Card]({{ site.baseurl }}/wiki/feature/rangecard.html) will be automatically updated, NOT the AtragMx.
+- Open the AtragMx and the `Atmsphr` column, select `Default` and `Done`. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=15)
+- Open the `Gun` column, check and update the `Zero Range` and `Done`.
-
+
+
+### 3.5 Example with `Add New Gun` in `GunList`
+
+- Open the [Range Card]({{ site.baseurl }}/wiki/feature/rangecard.html) and check the cartridge, the bullet diameter, the bullet weight and the muzzle velocities.
+- Open the AtragMx and the `Atmsphr` column, select `Default` and `Done`. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=15)
+- Select `Add New Gun` in the `GunList`. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=25)
+- Add a `New Gun Name` and `Open Gun`.
+- Select `E` (English unit) at the top right. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=10)
+- Open the `Gun` column, check and update the `Bullet Weight (grains)`, the `Bullet Diam (inches)` and `Done`.
+- Select `M` (Metric unit) at the top right.
+- Open the `Muz Vel Table` in the `Options` menu or click on `MV` in the `Gun` column.
+- Edit manually the `Muzzle Velocity Table` according with the [Range Card]({{ site.baseurl }}/wiki/feature/rangecard.html) and `Done`. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=22)
+- The `C1 coefficient` of the bullet can be found with the Eden Editor `Config Viewer`:
+
+> configfile >> "CfgAmmo" >> "Range card cartridge" >> "ACE_ballisticCoefficients"
+
+> configfile >> "CfgAmmo" >> "Range card cartridge" >> "ACE_dragModel"
+
+- *The AtragMx accepts only **G1 ballistic coefficient**.*
+- *G7 ballistic coefficient can be converted, for example, with the online [JBM Ballistics Calculators](http://www.jbmballistics.com/cgi-bin/jbmgf-5.1.cgi)*.
+- Optionally, `Save Gun` and `Done` in the `GunList`.
+
+
+> Note: The ballistic coefficient can be calculated by using the [360 Degree Training Course mission](https://forums.bistudio.com/forums/topic/171228-sp-360-degree-training-course/) as a chronograph at different distances and [JBM Ballistics Calculators](http://www.jbmballistics.com/cgi-bin/jbmbcv-5.1.cgi) for example, an another ballistic software at your own convenience, or the [AtragMx Truing Tool](#33-example-with-truing-tool).
+
-## 3. Official Manual and Horus Videos
-
- - [Official Manual](https://github.com/acemod/ACE3/blob/master/extras/manual_Horus_ATrag-v385.pdf)
- - [Horus video part1](https://www.youtube.com/watch?v=pg6oqT5jVds)
- - [Horus video part2](https://www.youtube.com/watch?v=7SkRnbwoPmw)
-
-## 4. Dependencies
+## 4. Official Manual and Horus Videos
+
+- [Official Manual]({{ site.ace.githubUrl }}/blob/master/extras/manual_Horus_ATrag-v385.pdf)
+- [Horus video part1](https://www.youtube.com/watch?v=pg6oqT5jVds)
+- [Horus video part2](https://www.youtube.com/watch?v=7SkRnbwoPmw)
+
+
+## 5. Dependencies
{% include dependencies_list.md component="atragmx" %}
diff --git a/docs/wiki/feature/modules.md b/docs/wiki/feature/modules.md
index 85a809896e..f74777e3c1 100644
--- a/docs/wiki/feature/modules.md
+++ b/docs/wiki/feature/modules.md
@@ -24,4 +24,4 @@ This is taking care of module initialization. It lets us ensure that modules pla
## 3. Usage
-For technical usage and instructions, please refer to our [framework documentation about the module component] ({{site.baseUrl}}/wiki/framework/modules-framework.html).
+For technical usage and instructions, please refer to our framework documentation about the module component.
diff --git a/docs/wiki/feature/scopes.md b/docs/wiki/feature/scopes.md
index b51545b569..8f496a90d9 100644
--- a/docs/wiki/feature/scopes.md
+++ b/docs/wiki/feature/scopes.md
@@ -34,6 +34,7 @@ Please not that the following key combinations are ACE3 default key binds.
- Major adjustment left Ctrl + ⇧ Shift + page Down.
### 2.3 Scopes Module
+
diff --git a/docs/wiki/feature/vector.md b/docs/wiki/feature/vector.md
index ce3a3ebbf9..415d77643a 100644
--- a/docs/wiki/feature/vector.md
+++ b/docs/wiki/feature/vector.md
@@ -78,13 +78,19 @@ The Vector is controlled with 2 keys: the azimuth key and the range key; Ta
- Sight the circle on the first object and tap R while further holding Tab ↹. The first measurement is confirmed ("1-P" = first point).
- Sight the second object and release Tab ↹.
-### 2.9 Fall of shot
+#### 2.9 Fall of shot
- Tap Tab ↹ once then press and hold it until the azimuth appears.
- Sight the circle on the object and tap R while further holding Tab ↹. The first measurement is confirmed ("1-P" = first point).
- Sight the Fall of shot and release Tab ↹. The left digits display the left (`L`)/right (`r`) correction value in meter and the right digits display the longer (`A` = add)/shorter (`d` = drop) correction value in meter. If R is tapped the height correction values will be displayed (`UP` and `dn`).
+#### 2.10 Setting the measurement units (degrees/mils & meters/feet)
+
+- Tap Tab ↹ five times fast. "Unit SEtt" appears briefly.
+- Press R until the desired units are displayed.
+- Tap Tab ↹ five times fast to save the selection.
+
## 3. Dependencies
{% include dependencies_list.md component="vector" %}
diff --git a/docs/wiki/featurex/volume.md b/docs/wiki/featurex/volume.md
new file mode 100644
index 0000000000..960e3003c3
--- /dev/null
+++ b/docs/wiki/featurex/volume.md
@@ -0,0 +1,34 @@
+---
+layout: wiki
+title: Volume Toggle
+description: Ability to toggle volume of game and music.
+group: feature
+category: general
+parent: wiki
+mod: acex
+version:
+ major: 3
+ minor: 2
+ patch: 0
+---
+
+## 1. Overview
+
+Adds the possibility of setting a keybind to toggle volume of game and music. It's quite useful for when you're briefing in heavy rain, or if you're in an obnoxiously loud car.
+
+## 2. Features
+
+- Automatically lower volume when inside vehicles (restores when exiting vehicles)
+- Change reduction percentage and fade delay
+- Option to show/hide notification
+- Option to remind you every minute if your volume is lowered
+
+## 3. Usage
+
+1. Set the keybind in ACEX controls
+2. Enable the feature in ACE options
+3. Change the options to your liking
+
+## 4. Dependencies
+
+{% include dependenciesx_list.md component="volume" %}
diff --git a/docs/wiki/framework/explosives-framework.md b/docs/wiki/framework/explosives-framework.md
index caa7f6b812..2d5edebb5e 100644
--- a/docs/wiki/framework/explosives-framework.md
+++ b/docs/wiki/framework/explosives-framework.md
@@ -170,3 +170,34 @@ Name | Use
0 | `player` | Unit explosive will connect to
1 | `claymore1` | Explosive object that will be connected
2 | `"ACE_Clacker"` | Detonator type class name
+
+#### 5.3 Detonation Handler.
+
+Detonation Handlers are called when something attempts to trigger an explosive. They can be used to block the detonation.
+
+These are only used for script based triggers like clackers, cellphone and timers (anything that uses `detonateExplosive`).
+Sensor based triggers like AT Mines, Tripwires are uneffected.
+All added handlers will be called, if ANY one returns false, the detonation will be blocked.
+
+`[{CODE}] call ace_explosives_fnc_addDetonateHandler;`
+
+CODE will be passed `[Unit, MaxRange , Explosive , FuzeTime , TriggerItem ]` and should return a bool: true(allowed) / false(blocked)
+
+#### 5.3.1 Example
+
+Jammer that blocks RF triggers:
+
+```cpp
+[{
+ params ["_unit", "_range", "_explosive", "_fuzeTime", "_triggerItem"];
+ if (_triggerItem == "ace_cellphone") exitWith { systemChat "Blocking Cell Phone"; false }; // always block cell phones
+ if (_triggerItem == "ace_m26_clacker") exitWith {
+ _range = _range / 1000;
+ private _actualRange = _unit distance _explosive;
+ systemChat format ["Limited Range For RF Clacker [%1m / %2m]", _actualRange toFixed 1, _range toFixed 1];
+ (_actualRange < _range) // return bool
+ };
+ // allow anything else (like timers / wired clackers)
+ true
+}] call ace_explosives_fnc_addDetonateHandler;
+```
diff --git a/mod.cpp b/mod.cpp
index 639e957a64..3357f64b54 100644
--- a/mod.cpp
+++ b/mod.cpp
@@ -1,8 +1,8 @@
-name = "Advanced Combat Environment 3.9.1";
+name = "Advanced Combat Environment 3.9.2";
picture = "logo_ace3_ca.paa";
actionName = "GitHub";
action = "https://github.com/acemod/ACE3";
-description = "ACE3 - Version 3.9.1";
+description = "ACE3 - Version 3.9.2";
logo = "logo_ace3_ca.paa";
logoOver = "logo_ace3_ca.paa";
tooltip = "ACE3";
diff --git a/optionals/compat_r3f/CfgAmmo.hpp b/optionals/compat_r3f/CfgAmmo.hpp
index 12db3179bf..72beba29fd 100644
--- a/optionals/compat_r3f/CfgAmmo.hpp
+++ b/optionals/compat_r3f/CfgAmmo.hpp
@@ -1,100 +1,100 @@
class CfgAmmo {
class Default;
class BulletBase;
- class R3F_9x19_Ball: BulletBase {
- ACE_caliber=9.017;
- ACE_bulletLength=15.494;
- ACE_bulletMass=8.0352;
- ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619};
- ACE_ballisticCoefficients[]={0.165};
- ACE_velocityBoundaries[]={};
- ACE_standardAtmosphere="ASM";
- ACE_dragModel=1;
- ACE_muzzleVelocities[]={340, 370, 400};
- ACE_barrelLengths[]={101.6, 127.0, 228.6};
+ class R3F_9x19_Ball: BulletBase { // ACE_9x19_Ball
+ ACE_caliber = 9.017;
+ ACE_bulletLength = 15.494;
+ ACE_bulletMass = 8.0352;
+ ACE_ammoTempMuzzleVelocityShifts[] = {-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619};
+ ACE_ballisticCoefficients[] = {0.165};
+ ACE_velocityBoundaries[] = {};
+ ACE_standardAtmosphere = "ASM";
+ ACE_dragModel = 1;
+ ACE_muzzleVelocities[] = {340, 370, 400};
+ ACE_barrelLengths[] = {101.6, 127.0, 228.6};
};
- class R3F_556x45_Ball: BulletBase {
- ACE_caliber=5.69;
- ACE_bulletLength=23.012;
- ACE_bulletMass=4.0176;
- ACE_ammoTempMuzzleVelocityShifts[]={-27.20, -26.44, -23.76, -21.00, -17.54, -13.10, -7.95, -1.62, 6.24, 15.48, 27.75};
- ACE_ballisticCoefficients[]={0.151};
- ACE_velocityBoundaries[]={};
- ACE_standardAtmosphere="ASM";
- ACE_dragModel=7;
- ACE_muzzleVelocities[]={723, 764, 796, 825, 843, 866, 878, 892, 906, 915, 922, 900};
- ACE_barrelLengths[]={210.82, 238.76, 269.24, 299.72, 330.2, 360.68, 391.16, 419.1, 449.58, 480.06, 508.0, 609.6};
+ class R3F_556x45_Ball: BulletBase { // B_556x45_Ball, AtragMx GunList: 5.56x45mm M855
+ ACE_caliber = 5.69;
+ ACE_bulletLength = 23.012;
+ ACE_bulletMass = 4.0176;
+ ACE_ammoTempMuzzleVelocityShifts[] = {-27.20, -26.44, -23.76, -21.00, -17.54, -13.10, -7.95, -1.62, 6.24, 15.48, 27.75};
+ ACE_ballisticCoefficients[] = {0.151};
+ ACE_velocityBoundaries[] = {};
+ ACE_standardAtmosphere = "ASM";
+ ACE_dragModel = 7;
+ ACE_muzzleVelocities[] = {723, 764, 796, 825, 843, 866, 878, 892, 906, 915, 922, 900};
+ ACE_barrelLengths[] = {210.82, 238.76, 269.24, 299.72, 330.2, 360.68, 391.16, 419.1, 449.58, 480.06, 508.0, 609.6};
};
- class R3F_762x51_Ball: BulletBase {
- ACE_caliber=7.823;
- ACE_bulletLength=28.956;
- ACE_bulletMass=9.4608;
- 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_ballisticCoefficients[]={0.2};
- ACE_velocityBoundaries[]={};
- ACE_standardAtmosphere="ICAO";
- ACE_dragModel=7;
- ACE_muzzleVelocities[]={700, 800, 820, 833, 845};
- ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4};
+ class R3F_762x51_Ball: BulletBase { // B_762x51_Ball, AtragMx GunList: 7.62x51mm M80
+ ACE_caliber = 7.823;
+ ACE_bulletLength = 28.956;
+ ACE_bulletMass = 9.4608;
+ 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_ballisticCoefficients[] = {0.2};
+ ACE_velocityBoundaries[] = {};
+ ACE_standardAtmosphere = "ICAO";
+ ACE_dragModel = 7;
+ ACE_muzzleVelocities[] = {700, 800, 820, 833, 845};
+ ACE_barrelLengths[] = {254.0, 406.4, 508.0, 609.6, 660.4};
};
- class R3F_127x99_Ball: BulletBase {
- ACE_caliber=12.954;
- ACE_bulletLength=58.674;
- ACE_bulletMass=41.9256;
- 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_ballisticCoefficients[]={0.670};
- ACE_velocityBoundaries[]={};
- ACE_standardAtmosphere="ASM";
- ACE_dragModel=1;
- ACE_muzzleVelocities[]={900};
- ACE_barrelLengths[]={700};
+ class R3F_127x99_Ball: BulletBase { // B_127x99_Ball, AtragMx GunList: 12.7x99mm
+ ACE_caliber = 12.954;
+ ACE_bulletLength = 58.674;
+ ACE_bulletMass = 41.9256;
+ 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_ballisticCoefficients[] = {0.670};
+ ACE_velocityBoundaries[] = {};
+ ACE_standardAtmosphere = "ASM";
+ ACE_dragModel = 1;
+ ACE_muzzleVelocities[] = {900};
+ ACE_barrelLengths[] = {700};
};
- class R3F_127x99_PEI: R3F_127x99_Ball {
- ACE_caliber=12.954;
- ACE_bulletLength=58.674;
- ACE_bulletMass=41.9256;
- 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_ballisticCoefficients[]={0.670};
- ACE_velocityBoundaries[]={};
- ACE_standardAtmosphere="ASM";
- ACE_dragModel=1;
- ACE_muzzleVelocities[]={900};
- ACE_barrelLengths[]={700};
+ class R3F_127x99_PEI: R3F_127x99_Ball { // B_127x99_Ball, AtragMx GunList: 12.7x99mm
+ ACE_caliber = 12.954;
+ ACE_bulletLength = 58.674;
+ ACE_bulletMass = 41.9256;
+ 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_ballisticCoefficients[] = {0.670};
+ ACE_velocityBoundaries[] = {};
+ ACE_standardAtmosphere = "ASM";
+ ACE_dragModel = 1;
+ ACE_muzzleVelocities[] = {900};
+ ACE_barrelLengths[] = {700};
};
- class R3F_127x99_Ball2: BulletBase {
- ACE_caliber=12.954;
- ACE_bulletLength=58.674;
- ACE_bulletMass=41.9256;
- 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_ballisticCoefficients[]={0.670};
- ACE_velocityBoundaries[]={};
- ACE_standardAtmosphere="ASM";
- ACE_dragModel=1;
- ACE_muzzleVelocities[]={900};
- ACE_barrelLengths[]={736.6};
+ class R3F_127x99_Ball2: BulletBase { // B_127x99_Ball, AtragMx GunList: 12.7x99mm
+ ACE_caliber = 12.954;
+ ACE_bulletLength = 58.674;
+ ACE_bulletMass = 41.9256;
+ 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_ballisticCoefficients[] = {0.670};
+ ACE_velocityBoundaries[] = {};
+ ACE_standardAtmosphere = "ASM";
+ ACE_dragModel = 1;
+ ACE_muzzleVelocities[] = {900};
+ ACE_barrelLengths[] = {736.6};
};
- class R3F_127x99_PEI2: R3F_127x99_Ball2 {
- ACE_caliber=12.954;
- ACE_bulletLength=58.674;
- ACE_bulletMass=41.9256;
- 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_ballisticCoefficients[]={0.670};
- ACE_velocityBoundaries[]={};
- ACE_standardAtmosphere="ASM";
- ACE_dragModel=1;
- ACE_muzzleVelocities[]={900};
- ACE_barrelLengths[]={736.6};
+ class R3F_127x99_PEI2: R3F_127x99_Ball2 { // B_127x99_Ball, AtragMx GunList: 12.7x99mm
+ ACE_caliber = 12.954;
+ ACE_bulletLength = 58.674;
+ ACE_bulletMass = 41.9256;
+ 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_ballisticCoefficients[] = {0.670};
+ ACE_velocityBoundaries[] = {};
+ ACE_standardAtmosphere = "ASM";
+ ACE_dragModel = 1;
+ ACE_muzzleVelocities[] = {900};
+ ACE_barrelLengths[] = {736.6};
};
- class R3F_127x99_Ball3: BulletBase {
- ACE_caliber=12.954;
- ACE_bulletLength=58.674;
- ACE_bulletMass=41.9256;
- 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_ballisticCoefficients[]={0.670};
- ACE_velocityBoundaries[]={};
- ACE_standardAtmosphere="ASM";
- ACE_dragModel=1;
- ACE_muzzleVelocities[]={900};
- ACE_barrelLengths[]={736.6};
+ class R3F_127x99_Ball3: BulletBase { // B_127x99_Ball, AtragMx GunList: 12.7x99mm
+ ACE_caliber = 12.954;
+ ACE_bulletLength = 58.674;
+ ACE_bulletMass = 41.9256;
+ 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_ballisticCoefficients[] = {0.670};
+ ACE_velocityBoundaries[] = {};
+ ACE_standardAtmosphere = "ASM";
+ ACE_dragModel = 1;
+ ACE_muzzleVelocities[] = {900};
+ ACE_barrelLengths[] = {736.6};
};
};
diff --git a/optionals/compat_r3f/CfgWeapons.hpp b/optionals/compat_r3f/CfgWeapons.hpp
index eae4eeb215..bb1ed0ebd5 100644
--- a/optionals/compat_r3f/CfgWeapons.hpp
+++ b/optionals/compat_r3f/CfgWeapons.hpp
@@ -1,190 +1,263 @@
+class Mode_SemiAuto;
+
class CfgWeapons {
class Pistol_Base_F;
class Rifle_Base_F;
class R3F_Famas_F1: Rifle_Base_F {
- ACE_barrelTwist=304.8;
- ACE_barrelLength=488;
+ ACE_RailHeightAboveBore = 10.6;
+ ACE_barrelTwist = 304.8; // 12"
+ ACE_barrelLength = 488.0;
};
class R3F_Famas_surb: R3F_Famas_F1 {
- ACE_barrelTwist=304.8;
- ACE_barrelLength=403.86;
+ ACE_RailHeightAboveBore = 5.4;
+ ACE_barrelTwist = 228.6; // 9"
+ ACE_barrelLength = 450.0; // Beretta barrel
+ };
+ class R3F_Famas_G2: R3F_Famas_F1 {
+ ACE_RailHeightAboveBore = 10.6;
+ ACE_barrelTwist = 228.6; // 9"
+ ACE_barrelLength = 488.0;
+ };
+ class R3F_Famas_felin: R3F_Famas_G2 {
+ ACE_RailHeightAboveBore = 5.4;
+ ACE_barrelTwist = 177.8; // 7"
+ ACE_barrelLength = 450.0; // Beretta barrel
};
class R3F_FRF2: Rifle_Base_F {
- ACE_barrelTwist=304.8;
- ACE_barrelLength=650;
+ ACE_RailHeightAboveBore = 2.2;
+ ACE_barrelTwist = 304.8;
+ ACE_barrelLength = 650.0;
+ class Single: Mode_SemiAuto {
+ dispersion = 0.00029; // 1 MOA
+ };
};
class R3F_PGM_Hecate_II: Rifle_Base_F {
- ACE_barrelTwist=381.0;
- ACE_barrelLength=700;
+ ACE_RailHeightAboveBore = 2.0;
+ ACE_barrelTwist = 381.0;
+ ACE_barrelLength = 700.0;
+ class Single: Mode_SemiAuto {
+ dispersion = 0.00029;
+ };
};
class R3F_M107: Rifle_Base_F {
- ACE_barrelTwist=381.0;
- ACE_barrelLength=736.6;
+ ACE_RailHeightAboveBore = 3.6;
+ ACE_barrelTwist = 381.0;
+ ACE_barrelLength = 736.6;
+ class Single: Mode_SemiAuto {
+ dispersion = 0.00029;
+ };
};
- class R3F_TAC50: Rifle_Base_F
- {
- ACE_barrelTwist=381.0;
- ACE_barrelLength=736.6;
+ class R3F_TAC50: Rifle_Base_F {
+ ACE_RailHeightAboveBore = 3.2;
+ ACE_barrelTwist = 381.0;
+ ACE_barrelLength = 736.6;
+ class Single: Mode_SemiAuto {
+ dispersion = 0.00029;
+ };
};
class R3F_Minimi: Rifle_Base_F {
- ACE_barrelTwist=177.8;
- ACE_barrelLength=347.98;
- };
- class R3F_Minimi_HG: R3F_Minimi {
+ ACE_RailHeightAboveBore = 4.0;
+ ACE_barrelTwist = 177.8;
+ ACE_barrelLength = 347.98;
};
class R3F_Minimi_762: R3F_Minimi {
- ACE_barrelTwist=304.8;
- ACE_barrelLength=502.92;
+ ACE_RailHeightAboveBore = 4.0;
+ ACE_barrelTwist = 304.8;
+ ACE_barrelLength = 502.92;
};
- class R3F_Minimi_762_HG: R3F_Minimi_762 {
+ class R3F_SIG551: Rifle_Base_F {
+ ACE_RailHeightAboveBore = 4.2;
+ ACE_barrelTwist = 177.8;
+ ACE_barrelLength = 363.0;
};
class R3F_HK417M: Rifle_Base_F {
- ACE_barrelTwist=279.4;
- ACE_barrelLength=406;
+ ACE_RailHeightAboveBore = 3.4;
+ ACE_barrelTwist = 279.4;
+ ACE_barrelLength = 406.0;
};
- class R3F_HK417S_HG: R3F_HK417M
- {
- ACE_barrelTwist=279.4;
- ACE_barrelLength=305;
+ class R3F_HK417S_HG: R3F_HK417M {
+ ACE_RailHeightAboveBore = 3.4;
+ ACE_barrelTwist = 279.4;
+ ACE_barrelLength = 305.0;
};
class R3F_HK417L: R3F_HK417M {
- ACE_barrelTwist=279.4;
- ACE_barrelLength=508;
+ ACE_RailHeightAboveBore = 3.4;
+ ACE_barrelTwist = 279.4;
+ ACE_barrelLength = 508.0;
+ class Single: Mode_SemiAuto {
+ dispersion = 0.00029;
+ };
};
class R3F_HK416M: Rifle_Base_F {
- ACE_barrelTwist=177.8;
- ACE_barrelLength=368.3;
+ ACE_RailHeightAboveBore = 3.4;
+ ACE_barrelTwist = 177.8;
+ ACE_barrelLength = 368.3;
+ };
+ class R3F_HK416M_HG: R3F_HK416M {};
+ class R3F_HK416S_HG: R3F_HK416M_HG {
+ ACE_RailHeightAboveBore = 3.4;
+ ACE_barrelTwist = 177.8;
+ ACE_barrelLength = 279.4;
};
class R3F_MP5SD: Rifle_Base_F {
- ACE_barrelTwist=254.0;
- ACE_barrelLength=144.78;
+ ACE_RailHeightAboveBore = 4.5;
+ ACE_barrelTwist = 254.0;
+ ACE_barrelLength = 144.78;
};
class R3F_MP5A5: R3F_MP5SD {
- ACE_barrelTwist=254.0;
- ACE_barrelLength=226.06;
+ ACE_RailHeightAboveBore = 4.5;
+ ACE_barrelTwist = 254.0;
+ ACE_barrelLength = 226.06;
};
class R3F_M4S90: Rifle_Base_F {
- ACE_twistDirection=0;
- ACE_barrelTwist=0;
- ACE_barrelLength=144.78;
+ ACE_RailHeightAboveBore = 2.2;
+ ACE_twistDirection = 0;
+ ACE_barrelTwist = 0;
+ ACE_barrelLength = 144.78;
};
class R3F_PAMAS: Pistol_Base_F {
- ACE_barrelTwist=248.92;
- ACE_barrelLength=124.46;
+ ACE_barrelTwist = 250.0;
+ ACE_barrelLength = 125.0;
};
-
+ class R3F_HKUSP: Pistol_Base_F {
+ ACE_barrelTwist = 250.0;
+ ACE_barrelLength = 121.0;
+ };
class ItemCore;
class InventoryOpticsItem_Base_F;
+ class R3F_AIMPOINT: ItemCore {
+ ACE_ScopeHeightAboveRail = 3.0;
+ };
+ class R3F_EOTECH: ItemCore {
+ ACE_ScopeHeightAboveRail = 3.8;
+ };
class R3F_J4: ItemCore {
- ACE_ScopeAdjust_Vertical[] = { -8, 8 };
- ACE_ScopeAdjust_Horizontal[] = { -8, 8 };
+ ACE_ScopeHeightAboveRail = 3.0;
+ ACE_ScopeAdjust_Vertical[] = {-8, 8};
+ ACE_ScopeAdjust_Horizontal[] = {-8, 8};
ACE_ScopeAdjust_VerticalIncrement = 0.2;
ACE_ScopeAdjust_HorizontalIncrement = 0.2;
- class ItemInfo : InventoryOpticsItem_Base_F {
+ class ItemInfo: InventoryOpticsItem_Base_F {
class OpticsModes {
class J4 {
- discreteDistance[] = { 100 };
+ discreteDistance[] = {100};
discreteDistanceInitIndex = 0;
};
};
};
};
+ class R3F_FELIN: ItemCore {
+ ACE_ScopeHeightAboveRail = 4.2;
+ };
+ class R3F_FELIN_FRF2: ItemCore {
+ ACE_ScopeHeightAboveRail = 4.0;
+ };
class R3F_J8: ItemCore {
- ACE_ScopeAdjust_Vertical[] = { -10, 10 };
- ACE_ScopeAdjust_Horizontal[] = { -10, 10 };
+ ACE_ScopeHeightAboveRail = 4.4;
+ ACE_ScopeAdjust_Vertical[] = {-10, 10};
+ ACE_ScopeAdjust_Horizontal[] = {-10, 10};
ACE_ScopeAdjust_VerticalIncrement = 0.1;
ACE_ScopeAdjust_HorizontalIncrement = 0.1;
- class ItemInfo : InventoryOpticsItem_Base_F {
+ class ItemInfo: InventoryOpticsItem_Base_F {
class OpticsModes {
class J8 {
- discreteDistance[] = { 100 };
+ discreteDistance[] = {100};
discreteDistanceInitIndex = 0;
};
};
};
};
- class R3F_J8_MILDOT: R3F_J8 {
- ACE_ScopeAdjust_Vertical[] = { -10, 10 };
- ACE_ScopeAdjust_Horizontal[] = { -10, 10 };
+ class R3F_J8_MILDOT: R3F_J8 { // Scope rail 30 MOA
+ ACE_ScopeHeightAboveRail = 4.4;
+ ACE_ScopeAdjust_Vertical[] = {-2, 18};
+ ACE_ScopeAdjust_Horizontal[] = {-10, 10};
ACE_ScopeAdjust_VerticalIncrement = 0.1;
ACE_ScopeAdjust_HorizontalIncrement = 0.1;
- class ItemInfo : InventoryOpticsItem_Base_F {
+ class ItemInfo: InventoryOpticsItem_Base_F {
class OpticsModes {
class J8_MILDOT {
- discreteDistance[] = { 100 };
+ discreteDistance[] = {100};
discreteDistanceInitIndex = 0;
};
};
};
};
class R3F_J10: ItemCore {
- ACE_ScopeAdjust_Vertical[] = { -10, 10 };
- ACE_ScopeAdjust_Horizontal[] = { -10, 10 };
+ ACE_ScopeHeightAboveRail = 4.4;
+ ACE_ScopeAdjust_Vertical[] = {-10, 10};
+ ACE_ScopeAdjust_Horizontal[] = {-10, 10};
ACE_ScopeAdjust_VerticalIncrement = 0.1;
ACE_ScopeAdjust_HorizontalIncrement = 0.1;
- class ItemInfo : InventoryOpticsItem_Base_F {
+ class ItemInfo: InventoryOpticsItem_Base_F {
class OpticsModes {
class J10 {
- discreteDistance[] = { 100 };
+ discreteDistance[] = {100};
discreteDistanceInitIndex = 0;
};
};
};
};
- class R3F_J10_MILDOT: R3F_J10 {
- ACE_ScopeAdjust_Vertical[] = { -10, 10 };
- ACE_ScopeAdjust_Horizontal[] = { -10, 10 };
+ class R3F_J10_MILDOT: R3F_J10 { // Scope rail 30 MOA
+ ACE_ScopeHeightAboveRail = 4.4;
+ ACE_ScopeAdjust_Vertical[] = {-2, 18};
+ ACE_ScopeAdjust_Horizontal[] = {-10, 10};
ACE_ScopeAdjust_VerticalIncrement = 0.1;
ACE_ScopeAdjust_HorizontalIncrement = 0.1;
- class ItemInfo : InventoryOpticsItem_Base_F {
+ class ItemInfo: InventoryOpticsItem_Base_F {
class OpticsModes {
class J10_MILDOT {
- discreteDistance[] = { 100 };
+ discreteDistance[] = {100};
discreteDistanceInitIndex = 0;
};
};
};
};
class R3F_ZEISS: ItemCore {
- ACE_ScopeAdjust_Vertical[] = { 0, 23 };
- ACE_ScopeAdjust_Horizontal[] = { -7, 7 };
+ ACE_ScopeHeightAboveRail = 4.6;
+ ACE_ScopeAdjust_Vertical[] = {0, 23};
+ ACE_ScopeAdjust_Horizontal[] = {-7, 7};
ACE_ScopeAdjust_VerticalIncrement = 0.1;
ACE_ScopeAdjust_HorizontalIncrement = 0.1;
- class ItemInfo : InventoryOpticsItem_Base_F {
+ class ItemInfo: InventoryOpticsItem_Base_F {
class OpticsModes {
class ZEISS_MILDOT {
- discreteDistance[] = { 100 };
+ discreteDistance[] = {100};
discreteDistanceInitIndex = 0;
};
};
};
};
class R3F_NF: ItemCore {
- ACE_ScopeAdjust_Vertical[] = { -0.9, 34 };
- ACE_ScopeAdjust_Horizontal[] = { -11, 11 };
- ACE_ScopeAdjust_VerticalIncrement = 0.2;
+ ACE_ScopeHeightAboveRail = 4.2;
+ ACE_ScopeAdjust_Vertical[] = {0, 30};
+ ACE_ScopeAdjust_Horizontal[] = {-11, 11};
+ ACE_ScopeAdjust_VerticalIncrement = 0.1;
ACE_ScopeAdjust_HorizontalIncrement = 0.1;
- class ItemInfo : InventoryOpticsItem_Base_F {
+ class ItemInfo: InventoryOpticsItem_Base_F {
class OpticsModes {
class NF_MILDOT {
- discreteDistance[] = { 100 };
+ discreteDistance[] = {100};
discreteDistanceInitIndex = 0;
};
};
};
};
class R3F_NF42: ItemCore {
- ACE_ScopeAdjust_Vertical[] = { -27.3, 27.3 };
- ACE_ScopeAdjust_Horizontal[] = { -27.3, 27.3};
+ ACE_ScopeHeightAboveRail = 4.2;
+ ACE_ScopeAdjust_Vertical[] = {0, 24};
+ ACE_ScopeAdjust_Horizontal[] = {-9, 9};
ACE_ScopeAdjust_VerticalIncrement = 0.1;
ACE_ScopeAdjust_HorizontalIncrement = 0.1;
- class ItemInfo : InventoryOpticsItem_Base_F {
+ class ItemInfo: InventoryOpticsItem_Base_F {
class OpticsModes {
class NF42_MILDOT {
- discreteDistance[] = { 100 };
+ discreteDistance[] = {100};
discreteDistanceInitIndex = 0;
};
};
};
};
+ class R3F_OB50: ItemCore {
+ ACE_ScopeHeightAboveRail = 4.0;
+ };
};
diff --git a/optionals/compat_rhs_afrf3/CfgVehicles.hpp b/optionals/compat_rhs_afrf3/CfgVehicles.hpp
index 9de9f8220d..5771ea3e16 100644
--- a/optionals/compat_rhs_afrf3/CfgVehicles.hpp
+++ b/optionals/compat_rhs_afrf3/CfgVehicles.hpp
@@ -28,7 +28,7 @@
class EGVAR(refuel,Refuel) { \
displayName = ECSTRING(refuel,Refuel); \
distance = 7; \
- condition = "true"; \
+ condition = "alive _target"; \
statement = ""; \
showDisabled = 0; \
priority = 2; \
@@ -105,6 +105,17 @@ class CfgVehicles {
};
class CommanderOptics;
};
+ class Air;
+ class Helicopter: Air {
+ class Turrets;
+ };
+ class Helicopter_Base_F: Helicopter {
+ class Turrets: Turrets {
+ class MainTurret;
+ };
+ };
+
+
class rhs_bmd_base: Tank_F {
EGVAR(refuel,fuelCapacity) = 300;
class Turrets: Turrets {
@@ -279,7 +290,6 @@ class CfgVehicles {
EGVAR(refuel,fuelCapacity) = 3600;
};
- class Helicopter_Base_F;
class Helicopter_Base_H: Helicopter_Base_F {
class EventHandlers;
};
@@ -334,15 +344,33 @@ class CfgVehicles {
};
};
- class Heli_Attack_02_base_F;
+ class Heli_Attack_02_base_F: Helicopter_Base_F {};
+ class rhs_mi28_base: Heli_Attack_02_base_F {
+ class Turrets: Turrets {
+ class MainTurret: MainTurret {
+ EGVAR(fcs,enabled) = 0;
+ };
+ };
+ };
+
class RHS_Ka52_base : Heli_Attack_02_base_F {
EGVAR(refuel,fuelCapacity) = 1870;
EGVAR(fastroping,enabled) = 0;
+ class Turrets: Turrets {
+ class MainTurret: MainTurret {
+ EGVAR(fcs,enabled) = 0;
+ };
+ };
};
class RHS_Mi24_base : Heli_Attack_02_base_F {
EGVAR(refuel,fuelCapacity) = 1851;
EGVAR(fastroping,enabled) = 0;
+ class Turrets: Turrets {
+ class MainTurret: MainTurret {
+ EGVAR(fcs,enabled) = 0;
+ };
+ };
};
class rhs_t80b : rhs_tank_base {
@@ -352,7 +380,7 @@ class CfgVehicles {
ace_repair_hitpointPositions[] = {{"era_1_hitpoint", {0,0,0}}};
ace_repair_hitpointGroups[] = {{"era_1_hitpoint", {"era_2_hitpoint", "era_3_hitpoint", "era_4_hitpoint", "era_5_hitpoint", "era_6_hitpoint", "era_7_hitpoint", "era_8_hitpoint", "era_9_hitpoint", "era_10_hitpoint", "era_11_hitpoint", "era_12_hitpoint", "era_13_hitpoint", "era_14_hitpoint", "era_15_hitpoint", "era_16_hitpoint", "era_17_hitpoint", "era_18_hitpoint", "era_19_hitpoint", "era_20_hitpoint", "era_21_hitpoint", "era_22_hitpoint", "era_23_hitpoint", "era_24_hitpoint", "era_25_hitpoint", "era_26_hitpoint", "era_27_hitpoint", "era_28_hitpoint"}}};
};
-
+
class Truck_F: Car_F {};
class RHS_Ural_BaseTurret: Truck_F {
EGVAR(refuel,fuelCapacity) = 360;
@@ -423,6 +451,11 @@ class CfgVehicles {
class rhs_2s3tank_base : Tank_F {
EGVAR(refuel,fuelCapacity) = 830;
+ class Turrets: Turrets {
+ class MainTurret: MainTurret {
+ EGVAR(fcs,enabled) = 0;
+ };
+ };
};
class OTR21_Base : Truck_F {
diff --git a/optionals/compat_rhs_afrf3/CfgWeapons.hpp b/optionals/compat_rhs_afrf3/CfgWeapons.hpp
index 09a3af7384..14431a92ae 100644
--- a/optionals/compat_rhs_afrf3/CfgWeapons.hpp
+++ b/optionals/compat_rhs_afrf3/CfgWeapons.hpp
@@ -87,24 +87,20 @@ class CfgWeapons {
ace_reloadlaunchers_enabled = 1;
};
+ #define HEARING_PROTECTION_VICCREW EGVAR(hearing,protection) = 0.85; EGVAR(hearing,lowerVolume) = 0.6;
+ #define HEARING_PROTECTION_EARMUFF EGVAR(hearing,protection) = 0.75; EGVAR(hearing,lowerVolume) = 0.5;
+ #define HEARING_PROTECTION_PELTOR EGVAR(hearing,protection) = 0.75; EGVAR(hearing,lowerVolume) = 0;
class H_HelmetB;
class rhs_tsh4: H_HelmetB {
- ace_hearing_protection = 1;
- ace_hearing_lowerVolume = 0.80;
+ HEARING_PROTECTION_VICCREW
};
- class rhs_tsh4_ess: rhs_tsh4 {};
- class rhs_tsh4_bala: rhs_tsh4 {};
- class rhs_tsh4_ess_bala: rhs_tsh4 {};
class rhs_zsh7a: H_HelmetB {
- ace_hearing_protection = 1;
- ace_hearing_lowerVolume = 0.80;
+ HEARING_PROTECTION_VICCREW
};
- class rhs_zsh7a_mike: rhs_zsh7a {};
class rhs_gssh18: H_HelmetB {
- ace_hearing_protection = 0.5;
- ace_hearing_lowerVolume = 0.60;
+ HEARING_PROTECTION_EARMUFF
};
class rhs_weap_d81;
diff --git a/optionals/compat_rhs_usf3/CfgAmmo.hpp b/optionals/compat_rhs_usf3/CfgAmmo.hpp
index d4feb96cc0..5125e268fa 100644
--- a/optionals/compat_rhs_usf3/CfgAmmo.hpp
+++ b/optionals/compat_rhs_usf3/CfgAmmo.hpp
@@ -194,7 +194,7 @@ class CfgAmmo {
class M_Titan_AT;
class rhs_ammo_M_fgm148_AT: M_Titan_AT {
- irLock = 0;
+ irLock = 1;
laserLock = 0;
airLock = 0;
diff --git a/optionals/compat_rhs_usf3/CfgVehicles.hpp b/optionals/compat_rhs_usf3/CfgVehicles.hpp
index 5350e10867..d37fe7f09b 100644
--- a/optionals/compat_rhs_usf3/CfgVehicles.hpp
+++ b/optionals/compat_rhs_usf3/CfgVehicles.hpp
@@ -41,7 +41,7 @@
class EGVAR(refuel,Refuel) { \
displayName = ECSTRING(refuel,Refuel); \
distance = 7; \
- condition = "true"; \
+ condition = "alive _target"; \
statement = ""; \
showDisabled = 0; \
priority = 2; \
diff --git a/optionals/compat_rhs_usf3/CfgWeapons.hpp b/optionals/compat_rhs_usf3/CfgWeapons.hpp
index 4285db8661..d67879916b 100644
--- a/optionals/compat_rhs_usf3/CfgWeapons.hpp
+++ b/optionals/compat_rhs_usf3/CfgWeapons.hpp
@@ -30,7 +30,7 @@ class CfgWeapons {
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;
@@ -105,8 +105,8 @@ class CfgWeapons {
ACE_twistDirection = 0;
ACE_barrelLength = 508.0;
};
- class SMG_01_F;
- class rhsusf_weap_MP7A1_base_f: SMG_01_F {
+ class SMG_02_base_F;
+ class rhsusf_weap_MP7A1_base_f: SMG_02_base_F {
ACE_barrelTwist = 160.0;
ACE_barrelLength = 180.0;
};
@@ -195,7 +195,7 @@ class CfgWeapons {
class Snip {
discreteDistance[] = {100};
discreteDistanceInitIndex = 0;
- };
+ };
};
};
};
@@ -212,36 +212,176 @@ class CfgWeapons {
lockedTargetSound[] = {"",0,1};
};
- class rhsusf_ach_helmet_ocp;
- class rhsusf_opscore_01: rhsusf_ach_helmet_ocp {
- ace_hearing_protection = 0.50;
- ace_hearing_lowerVolume = 0.60;
- };
- class rhsusf_opscore_01_tan: rhsusf_opscore_01 {};
- class rhsusf_opscore_03_ocp: rhsusf_opscore_01 {};
- class rhsusf_cvc_helmet: rhsusf_opscore_01 {
- ace_hearing_protection = 1;
- ace_hearing_lowerVolume = 0.80;
+
+ #define HEARING_PROTECTION_VICCREW EGVAR(hearing,protection) = 0.85; EGVAR(hearing,lowerVolume) = 0.6;
+ #define HEARING_PROTECTION_EARMUFF EGVAR(hearing,protection) = 0.75; EGVAR(hearing,lowerVolume) = 0.5;
+ #define HEARING_PROTECTION_PELTOR EGVAR(hearing,protection) = 0.75; EGVAR(hearing,lowerVolume) = 0;
+ // Fast Helmets
+ class rhsusf_opscore_01;
+ class rhsusf_opscore_aor1_pelt: rhsusf_opscore_01 {
+ HEARING_PROTECTION_PELTOR
};
- class rhsusf_cvc_green_helmet: rhsusf_cvc_helmet {};
- class rhsusf_cvc_ess: rhsusf_cvc_helmet {};
- class rhsusf_cvc_green_ess: rhsusf_cvc_ess {};
+ class rhsusf_opscore_aor1_pelt_nsw: rhsusf_opscore_01 {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_opscore_bk_pelt: rhsusf_opscore_01 {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_opscore_fg_pelt: rhsusf_opscore_01 {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_opscore_fg_pelt_nsw: rhsusf_opscore_01 {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_opscore_fg_pelt_cam: rhsusf_opscore_01 {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_opscore_paint_pelt: rhsusf_opscore_01 {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_opscore_paint_pelt_nsw: rhsusf_opscore_01 {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_opscore_paint_pelt_nsw_cam: rhsusf_opscore_01 {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_opscore_aor2_pelt: rhsusf_opscore_01 {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_opscore_aor2_pelt_nsw: rhsusf_opscore_01 {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_opscore_ut_pelt: rhsusf_opscore_01 {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_opscore_ut_pelt_cam: rhsusf_opscore_01 {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_opscore_ut_pelt_nsw_cam: rhsusf_opscore_01 {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_opscore_mc_pelt: rhsusf_opscore_01 {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_opscore_mc_pelt_nsw: rhsusf_opscore_01 {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_opscore_cover;
+ class rhsusf_opscore_mc_cover_pelt: rhsusf_opscore_cover {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_opscore_mc_cover_pelt_cam: rhsusf_opscore_cover {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_opscore_rg_cover_pelt: rhsusf_opscore_cover {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_opscore_coy_cover_pelt: rhsusf_opscore_cover {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_opscore_mar_01;
+ class rhsusf_opscore_mar_ut_pelt: rhsusf_opscore_mar_01 {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_opscore_mar_fg_pelt: rhsusf_opscore_mar_01 {
+ HEARING_PROTECTION_PELTOR
+ };
+
+ // ACH Helmets
+ class rhsusf_ach_helmet_ocp;
+ class rhsusf_ach_bare_des_headset: rhsusf_ach_helmet_ocp {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_ach_bare_des_headset_ess: rhsusf_ach_helmet_ocp {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_ach_bare_headset: rhsusf_ach_helmet_ocp {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_ach_bare_headset_ess: rhsusf_ach_helmet_ocp {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_ach_bare_semi_headset: rhsusf_ach_helmet_ocp {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_ach_bare_semi_headset_ess: rhsusf_ach_helmet_ocp {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_ach_bare_tan_headset: rhsusf_ach_helmet_ocp {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_ach_bare_tan_headset_ess: rhsusf_ach_helmet_ocp {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_ach_bare_wood_headset: rhsusf_ach_helmet_ocp {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_ach_bare_wood_headset_ess: rhsusf_ach_helmet_ocp {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_ach_helmet_headset_ocp: rhsusf_ach_helmet_ocp {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_ach_helmet_headset_ess_ocp: rhsusf_ach_helmet_ocp {
+ HEARING_PROTECTION_PELTOR
+ };
+
+ // ACVC Helmets
+ class rhsusf_cvc_helmet: rhsusf_opscore_01 {
+ HEARING_PROTECTION_VICCREW
+ };
+
+ // MICH Helmets
+ class rhsusf_mich_bare;
+ class rhsusf_mich_bare_alt: rhsusf_mich_bare {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_mich_bare_norotos;
+ class rhsusf_mich_bare_norotos_alt: rhsusf_mich_bare_norotos {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_mich_bare_norotos_arc;
+ class rhsusf_mich_bare_norotos_arc_alt: rhsusf_mich_bare_norotos_arc {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_mich_bare_semi;
+ class rhsusf_mich_bare_alt_semi: rhsusf_mich_bare_semi {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_mich_bare_norotos_semi;
+ class rhsusf_mich_bare_norotos_alt_semi: rhsusf_mich_bare_norotos_semi {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_mich_bare_norotos_arc_semi;
+ class rhsusf_mich_bare_norotos_arc_alt_semi: rhsusf_mich_bare_norotos_arc_semi {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_mich_bare_tan;
+ class rhsusf_mich_bare_alt_tan: rhsusf_mich_bare_tan {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_mich_bare_norotos_tan;
+ class rhsusf_mich_bare_norotos_alt_tan: rhsusf_mich_bare_norotos_tan {
+ HEARING_PROTECTION_PELTOR
+ };
+ class rhsusf_mich_bare_norotos_arc_tan;
+ class rhsusf_mich_bare_norotos_arc_alt_tan: rhsusf_mich_bare_norotos_arc_tan {
+ HEARING_PROTECTION_PELTOR
+ };
+
class H_PilotHelmetHeli_B;
class H_CrewHelmetHeli_B;
class rhsusf_hgu56p: H_PilotHelmetHeli_B {
- ace_hearing_protection = 0.85;
- ace_hearing_lowerVolume = 0.75;
+ HEARING_PROTECTION_VICCREW
};
class rhsusf_hgu56p_mask: H_CrewHelmetHeli_B {
- ace_hearing_protection = 0.85;
- ace_hearing_lowerVolume = 0.75;
+ HEARING_PROTECTION_VICCREW
};
class H_HelmetB;
class RHS_jetpilot_usaf: H_HelmetB {
- ace_hearing_protection = 1;
- ace_hearing_lowerVolume = 0.80;
+ HEARING_PROTECTION_VICCREW
};
};
diff --git a/tools/sqf_linter.py b/tools/sqf_linter.py
new file mode 100644
index 0000000000..46461eb357
--- /dev/null
+++ b/tools/sqf_linter.py
@@ -0,0 +1,66 @@
+#!/usr/bin/env python3
+
+# Requires: https://github.com/LordGolias/sqf
+
+import fnmatch
+import os
+import sys
+import argparse
+from sqf.parser import parse
+import sqf.analyzer
+from sqf.exceptions import SQFParserError
+
+
+def analyze(filename, writer=sys.stdout):
+ warnings = 0
+ errors = 0
+ with open(filename, 'r') as file:
+ code = file.read()
+ try:
+ result = parse(code)
+ except SQFParserError as e:
+ print("{}:".format(filename))
+ writer.write(' [%d,%d]:%s\n' % (e.position[0], e.position[1] - 1, e.message))
+ return 0, 1
+
+ exceptions = sqf.analyzer.analyze(result).exceptions
+ if (exceptions):
+ print("{}:".format(filename))
+ for e in exceptions:
+ if (e.message.startswith("error")):
+ errors += 1
+ else:
+ warnings += 1
+ writer.write(' [%d,%d]:%s\n' % (e.position[0], e.position[1] - 1, e.message))
+
+ return warnings, errors
+
+def main():
+ print("#########################")
+ print("# Lint Check #")
+ print("#########################")
+
+ sqf_list = []
+ all_warnings = 0
+ all_errors = 0
+
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-m','--module', help='only search specified module addon folder', required=False, default=".")
+ args = parser.parse_args()
+
+ for root, dirnames, filenames in os.walk('../addons' + '/' + args.module):
+ for filename in fnmatch.filter(filenames, '*.sqf'):
+ sqf_list.append(os.path.join(root, filename))
+
+ for filename in sqf_list:
+ warnings, errors = analyze(filename)
+ all_warnings += warnings
+ all_errors += errors
+
+ print ("Parse Errors {0} - Warnings {1}".format(all_errors,all_warnings))
+
+ # return (all_errors + all_warnings)
+ return all_errors
+
+if __name__ == "__main__":
+ main()