diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 28549dd503..a333dc08fe 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -3,8 +3,10 @@ **ACE3 Version:** `3.x.x` (stable / dev + commit hash) **Mods:** -- `@CBA_A3` -- `@ace` +``` +- CBA_A3 +- ace +``` **Description:** - Add a detailed description of the error. This makes it easier for us to fix the issue. diff --git a/.github_changelog_generator b/.github_changelog_generator index 7cc05cbb0d..6d1d741bbd 100644 --- a/.github_changelog_generator +++ b/.github_changelog_generator @@ -6,9 +6,7 @@ pr-wo-labels=false max-issues=0 # Label filters -exclude-labels=by design,can't reproduce,duplicate,question,invalid,wontfix,translation,ignore changelog -bug-labels=conflict,bug,critical bug -enhancement-labels=enhancement,feature request,Focus Feature +exclude-labels=by design,can't reproduce,duplicate,question,invalid,wontfix,ignore changelog # Tag is created before generating changelog for release candidates unreleased=false diff --git a/README.md b/README.md index 4e78a5aaf3..9d5be87515 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@
- + diff --git a/addons/advanced_fatigue/XEH_postInit.sqf b/addons/advanced_fatigue/XEH_postInit.sqf index 57be761607..542360c0c3 100644 --- a/addons/advanced_fatigue/XEH_postInit.sqf +++ b/addons/advanced_fatigue/XEH_postInit.sqf @@ -14,12 +14,15 @@ if (!hasInterface) exitWith {}; // - GVAR updating and initialization ----------------------------------------- ["unit", FUNC(handlePlayerChanged), true] call CBA_fnc_addPlayerEventHandler; - private _fnc_showStaminaBar = { + ["visibleMap", { + params ["", "_visibleMap"]; // command visibleMap is updated one frame later + private _staminaBarContainer = uiNamespace getVariable [QGVAR(staminaBarContainer), controlNull]; + _staminaBarContainer ctrlShow ((!_visibleMap) && {(vehicle ACE_player) == ACE_player}); + }, true] call CBA_fnc_addPlayerEventHandler; + ["vehicle", { private _staminaBarContainer = uiNamespace getVariable [QGVAR(staminaBarContainer), controlNull]; _staminaBarContainer ctrlShow ((!visibleMap) && {(vehicle ACE_player) == ACE_player}); - }; - ["visibleMap", _fnc_showStaminaBar, true] call CBA_fnc_addPlayerEventHandler; - ["vehicle", _fnc_showStaminaBar, true] call CBA_fnc_addPlayerEventHandler; + }, true] call CBA_fnc_addPlayerEventHandler; // - Duty factors ------------------------------------------------------------- if (["ACE_Medical"] call EFUNC(common,isModLoaded)) then { diff --git a/addons/advanced_fatigue/functions/fnc_getAnimDuty.sqf b/addons/advanced_fatigue/functions/fnc_getAnimDuty.sqf index 3698ff9113..629152b6a1 100644 --- a/addons/advanced_fatigue/functions/fnc_getAnimDuty.sqf +++ b/addons/advanced_fatigue/functions/fnc_getAnimDuty.sqf @@ -21,6 +21,7 @@ private _duty = 1; private _animType = _animName select [1, 3]; GVAR(isSwimming) = false; +GVAR(isProne) = (stance _unit) == "PRONE"; if (_animType in ["idl", "mov", "adj"]) then { switch (_animName select [5, 3]) do { @@ -29,6 +30,7 @@ if (_animType in ["idl", "mov", "adj"]) then { }; case ("pne"): { _duty = 10; + GVAR(isProne) = true; // #4880 - Unarmed sprint->prone has wrong `stance` }; default { _duty = 1; diff --git a/addons/advanced_fatigue/functions/fnc_getMetabolicCosts.sqf b/addons/advanced_fatigue/functions/fnc_getMetabolicCosts.sqf index fd2234d1f2..c2c673fd95 100644 --- a/addons/advanced_fatigue/functions/fnc_getMetabolicCosts.sqf +++ b/addons/advanced_fatigue/functions/fnc_getMetabolicCosts.sqf @@ -18,18 +18,8 @@ #include "script_component.hpp" params ["_unit", "_velocity"]; -private _virtualLoad = 0; -{ - _virtualLoad = _virtualLoad + (_x getVariable [QEGVAR(movement,vLoad), 0]); -} forEach [ - _unit, - uniformContainer _unit, - vestContainer _unit, - backpackContainer _unit -]; +private _gearMass = ((_unit getVariable [QEGVAR(movement,totalLoad), loadAbs _unit]) / 22.046) * GVAR(loadFactor); -private _gearMass = ((loadAbs _unit + _virtualLoad) * 0.1 / 2.2046) * GVAR(loadFactor); -private _terrainFactor = 1; private _terrainAngle = asin (1 - ((surfaceNormal getPosASL _unit) select 2)); private _terrainGradient = (_terrainAngle / 45 min 1) * 5 * GVAR(terrainGradientFactor); private _duty = GVAR(animDuty); @@ -50,12 +40,12 @@ if (_velocity > 2) then { ( 2.10 * SIM_BODYMASS + 4 * (SIM_BODYMASS + _gearMass) * ((_gearMass / SIM_BODYMASS) ^ 2) - + _terrainFactor * (SIM_BODYMASS + _gearMass) * (0.90 * (_velocity ^ 2) + 0.66 * _velocity * _terrainGradient) + + (SIM_BODYMASS + _gearMass) * (0.90 * (_velocity ^ 2) + 0.66 * _velocity * _terrainGradient) ) * 0.23 * _duty } else { ( 1.05 * SIM_BODYMASS + 4 * (SIM_BODYMASS + _gearMass) * ((_gearMass / SIM_BODYMASS) ^ 2) - + _terrainFactor * (SIM_BODYMASS + _gearMass) * (1.15 * (_velocity ^ 2) + 0.66 * _velocity * _terrainGradient) + + (SIM_BODYMASS + _gearMass) * (1.15 * (_velocity ^ 2) + 0.66 * _velocity * _terrainGradient) ) * 0.23 * _duty }; diff --git a/addons/advanced_fatigue/functions/fnc_mainLoop.sqf b/addons/advanced_fatigue/functions/fnc_mainLoop.sqf index ee8f33f5c7..d01eeefa78 100644 --- a/addons/advanced_fatigue/functions/fnc_mainLoop.sqf +++ b/addons/advanced_fatigue/functions/fnc_mainLoop.sqf @@ -20,7 +20,7 @@ private _currentWork = REE; private _currentSpeed = (vectorMagnitude (velocity ACE_player)) min 6; // fix #4481. Diving to the ground is recorded as PRONE stance with running speed velocity. Cap maximum speed to fix. -if (stance ACE_player == "PRONE") then { +if (GVAR(isProne)) then { _currentSpeed = _currentSpeed min 1.5; }; @@ -32,11 +32,11 @@ if ((vehicle ACE_player == ACE_player) && {_currentSpeed > 0.1} && {isTouchingGr // Calculate muscle damage increase // Note: Muscle damage recovery is ignored as it takes multiple days GVAR(muscleDamage) = GVAR(muscleDamage) + (_currentWork / GVAR(peakPower)) ^ 3.2 * 0.00004; -private _muscleIntegrity = 1 - GVAR(muscleDamage); +private _muscleIntegritySqrt = sqrt (1 - GVAR(muscleDamage)); // Calculate available power -private _ae1PathwayPowerFatigued = GVAR(ae1PathwayPower) * sqrt (GVAR(ae1Reserve) / AE1_MAXRESERVE) * OXYGEN * sqrt _muscleIntegrity; -private _ae2PathwayPowerFatigued = GVAR(ae2PathwayPower) * sqrt (GVAR(ae2Reserve) / AE2_MAXRESERVE) * OXYGEN * sqrt _muscleIntegrity; +private _ae1PathwayPowerFatigued = GVAR(ae1PathwayPower) * sqrt (GVAR(ae1Reserve) / AE1_MAXRESERVE) * OXYGEN * _muscleIntegritySqrt; +private _ae2PathwayPowerFatigued = GVAR(ae2PathwayPower) * sqrt (GVAR(ae2Reserve) / AE2_MAXRESERVE) * OXYGEN * _muscleIntegritySqrt; // Calculate how much power is consumed from each reserve private _ae1Power = _currentWork min _ae1PathwayPowerFatigued; diff --git a/addons/advanced_fatigue/stringtable.xml b/addons/advanced_fatigue/stringtable.xml index 5e37d381b8..4a02cb07dd 100644 --- a/addons/advanced_fatigue/stringtable.xml +++ b/addons/advanced_fatigue/stringtable.xml @@ -7,6 +7,7 @@ パフォーマンス要因 Współczynnik wydolności 성능 요인 + Facteur de performance Influences the overall performance of all players with no custom factor. Higher means better. @@ -14,6 +15,7 @@ 非カスタム要因をもつ全プレイヤーへ全体的に動作を影響させます。高いほど影響がでます。 Wpływa na ogólną wydolność organizmu u wszystkich graczy bez ustawionego niestandardowego współczynnika. Więcej znaczy lepiej. 모든 성능이 임의로 설정된 값 없이 영향받습니다. 값이 클수록 더 나은 성능을 발휘합니다 + Influence les performances générales de tous les joueurs sans facteurs personalisés. Une valeur plus élevée implique de meilleures performances. Influences the overall performance of this unit. Higher means better. @@ -21,6 +23,7 @@ 非カスタム要因をもつ全プレイヤーへ全体的に動作を影響させます。高いほど影響がでます。 Wpływa na ogólną wydolność tej jednostki. Więcej znaczy lepiej. 모든 성능이 이 단위로 영향을 받습니다. 값이 클수록 더 나은 성능을 발휘합니다 + Influence les performances générales de cette unité. Une valeur plus élevée implique de meilleures performances. Recovery Factor @@ -28,6 +31,7 @@ 回復要因 Współczynnik regeneracji 회복 요인 + Facteur de récupération Changes how fast the player recovers when resting. Higher is faster. @@ -35,6 +39,7 @@ 休憩時は、プレイヤーが早く回復します。高いほど早くなります。 Wpływa na czas regeneracji podczas postoju. Więcej znaczy szybciej. 얼마나 빨리 회복하는지를 바꿉니다. 값이 클수록 더 나은 성능을 발휘합니다 + Change la vitesse à laquelle les joueurs récupèrent leur endurance lorsqu'ils se reposent. Une valeur plus élevée implique une récupération plus rapide. Load Factor @@ -42,6 +47,7 @@ 負荷要因 Współczynnik masy ekwipunku 부담 요인 + Facteur d'encombrement Increases or decreases how much weight influences the players performance. Zero means equipment weight has no performance influence. @@ -49,6 +55,7 @@ 重量によりプレイヤーの動作への影響下増加したり、低下します。装備を持っていない場合、影響はしません。 Zmniejsza lub zwiększa wpływ ciężaru ekwipunku na wydolność gracza. Zero oznacza kompletny brak wpływu na wydolność. 플레이어가 무게에 따라 얼마나 영향받는지를 증가시키거나 감소시킵니다. 0의 경우 플레이어가 장비 무게에 영향받지 않습니다. + Augmente ou réduit l'influence que le poids à sur les performances des joueurs. Zéro implique que le poids de l'équipement n'a pas d'influence sur les performances. Terrain Gradient Factor @@ -56,6 +63,7 @@ 地形の勾配による要因 Współczynnik terenu 지형 경사도 요인 + Facteur d'inclinaison du terrain Sets how much steep terrain increases stamina loss. Higher means higher stamina loss. @@ -63,6 +71,7 @@ 地形によって影響する体力の消費量を決定します。高数値ではより体力を消費します。 Wpływa na to w jakim stopniu stromy teren wpływa na utratę wytrzymałości. Więcej oznacza szybszą utratę wytrzymałości. 경사도에 따라 얼마나 피로해지는지를 정합니다. 값이 클수록 더 많은 피로를 유발합니다. + Configure l'influence de l'inclinaison du terrain sur la perte d'endurance. Une valeur plus élevée implique une perte d'endurance plus importante. Enabled @@ -70,6 +79,7 @@ 有効化 Włączone 활성화 + Activé Enables/disables Advanced Fatigue. @@ -77,6 +87,7 @@ アドバンスド疲労の有効化と無効化 Włącza/wyłącza zaawansowaną wytrzymałość 고급 피로도 활성화/비활성화 + Active/désactive la fatigue avancée. Show stamina bar @@ -84,6 +95,7 @@ 体力バーを表示 Pokaż pasek wytrzymałości 피로도 막대 + Afficher la barre d'endurance Shows the stamina bar. @@ -91,6 +103,7 @@ 体力バーを表示します。 Pokazuje pasek wytrzymałości. 피로도 막대를 보여줍니다. + Affiche la barre d'endurance. diff --git a/addons/advanced_throwing/XEH_postInit.sqf b/addons/advanced_throwing/XEH_postInit.sqf index f3c0d4b9f6..f0c0e5231b 100644 --- a/addons/advanced_throwing/XEH_postInit.sqf +++ b/addons/advanced_throwing/XEH_postInit.sqf @@ -67,7 +67,8 @@ GVAR(ammoMagLookup) = call CBA_fnc_createNamespace; }] call CBA_fnc_addPlayerEventhandler; ["visibleMap", { - if (visibleMap && {ACE_player getVariable [QGVAR(inHand), false]}) then { + params ["", "_visibleMap"]; // command visibleMap is updated one frame later + if (_visibleMap && {ACE_player getVariable [QGVAR(inHand), false]}) then { [ACE_player, "Opened Map"] call FUNC(exitThrowMode); }; }] call CBA_fnc_addPlayerEventhandler; diff --git a/addons/advanced_throwing/stringtable.xml b/addons/advanced_throwing/stringtable.xml index a8fc6c32a7..2cc7a9c8b6 100644 --- a/addons/advanced_throwing/stringtable.xml +++ b/addons/advanced_throwing/stringtable.xml @@ -8,6 +8,7 @@ Zaawansowane rzucanie Erweitertes Wurfsystem 고급 투척 + Lancé amélioré Allows changing advanced throwing behaviour. @@ -16,6 +17,7 @@ Zezwala na zmianę zachowania zaawansowanego trybu rzucania. Erlaubt es, das Verhalten des erweiterten Wurfsystems zu ändern. 고급 투척 행위를 허가합니다 + Permet de changer la configuration du lancé amélioré. Enable Advanced Throwing @@ -24,6 +26,7 @@ Aktywuj zaawansowane rzucanie Aktiviere erweitertes Wurfsystem 고급 투척 활성화 + Active le lancé amélioré Enables advanced throwing system. @@ -32,6 +35,7 @@ Aktywuje system zaawansowanego rzucania. Aktiviert das erweiterte Wurfsystem. 고급 투척을 활성화 합니다 + Active le système de lancé amélioré. Show Throw Arc @@ -40,6 +44,7 @@ Pokaż trasę lotu Zeige Wurfbogen 투척 궤적 표시 + Afficher l'arc de lancé Enables visualization of the throw arc (where throwable will fly). @@ -48,6 +53,7 @@ Wyświetla wizualizację trasy przelotu granatu. Aktiviert die Visualisierung des Wurfbogens (wohin das Objekt geworfen werden wird). 투척 궤도를 시각화 합니다(투척물이 어디로 갈지) + Active la visualisation de l'arc de lancé (où l'objet lancé va atterrir). Show Throwing Mouse Controls @@ -56,6 +62,7 @@ Pokaż podpowiedzi sterowania myszą Zeige Maussteuerung beim Werfen 마우스 조작 표시 + Afficher les contrôles à la souris du lancé Enables visual cues for mouse controls when throwable is prepared. @@ -64,6 +71,7 @@ Wyświetla podpowiedzi sterowania myszą kiedy obiekt miotany jest w ręku. Aktiviert visuelle Hinweise zur Maussteuerung, wenn ein Objekt zum Werfen vorbereitet wird. 투척물을 준비시 마우스 조작을 시각화해서 보여줍니다 + Active les aides visuels pour les controles à la souris lorsqu'un lancé est préparé. Enable Throwables Pick Up @@ -72,6 +80,7 @@ Zezwól na podnoszenie obiektów miotanych Aktiviere Aufheben von Wurfobjekten 투척물 줍기 활성화 + Active la récupération des objets lancés Enables ability to pick up throwables from the ground. @@ -80,6 +89,7 @@ Umożliwia podnoszenie obiektów miotanych z ziemi. Aktiviert die Möglichkeit, geworfene Objekte wieder vom Boden aufzuheben. 땅에 떨어진 투척물을 주울 수 있게 해줍니다. + Active la capacité de récupérer les objets lancés sur le sol. Enable Attached Throwables Pick Up @@ -88,6 +98,7 @@ Zezwól na podnoszenie przyczepionych obiektów miotanych Aktiviere erneute Aufnahme befestigter Wurfobjekte 부착 투척물 줍기 활성화 + Active le ramassage d'objets lançables attachés Enables ability to pick up throwables from attached objects. @@ -96,6 +107,7 @@ Umożliwia podnoszenie obiektów miotanych przyczepionych do innych obiektów. Aktiviert die Möglichkeit, befestigte Wurfobjekte erneut aufzunehmen. 부착된 투척물을 주울 수 있게 해줍니다. + Active la capacité à ramasser les objets lançables attaché à d'autres objets. Prepare/Change Throwable @@ -104,6 +116,7 @@ Przygotuj/zmień ob. miotany Wurfobjekt vorbereiten/wechseln 투척물 준비/변경 + Préparer/changer d'objet Throwable Drop Mode (Hold) @@ -112,6 +125,7 @@ Tryb upuszczania ob. miotanego (przytrzymaj) Wurfobjekt Fallmodus (halten) 투척물 떨어뜨리기 모드(꾹눌러서) + Mode de lancé de l'objet (Tenir) Throwable Drop Mode (Toggle) @@ -120,6 +134,7 @@ Tryb upuszczania ob. miotanego (przełącz) Wurfobjekt Fallmodus (umschalten) 투척물 떨어뜨리기 모드(토글) + Mode de lancé de l'objet (Basculer) Primed @@ -128,6 +143,7 @@ Odbezpieczony Scharf gemacht 뇌관 작동 + Amorcer Throw @@ -136,6 +152,7 @@ Rzuć Werfen 던지기 + Lancer (Scroll) Change Mode @@ -144,6 +161,7 @@ (Kółko m.) zmień tryb (Scrollen) Modus wechseln (마우스 휠) 모드 변경 + (Molette souris) Changer de mode (Scroll) Extend @@ -152,6 +170,7 @@ (Kółko m.) przedłuż (Scrollen) Erweitern (마우스 휠) 연장 + (Molette souris) Etendre (Click) Cook @@ -160,6 +179,7 @@ (Kliknięcie) Odbezpiecz (Klicken) Abkochen (클릭) 예열 + (Clique) Dégoupiller Pick Up @@ -168,6 +188,7 @@ Podnieś Aufheben 줍기 + Ramasser diff --git a/addons/aircraft/CfgAmmo.hpp b/addons/aircraft/CfgAmmo.hpp index 2c3701b8e0..ec7cfd6a54 100644 --- a/addons/aircraft/CfgAmmo.hpp +++ b/addons/aircraft/CfgAmmo.hpp @@ -1,4 +1,3 @@ - class CfgAmmo { class BulletBase; class B_20mm : BulletBase { @@ -11,11 +10,11 @@ class CfgAmmo { explosive = 1.8; tracersEvery = 3; tracerEndTime = 3.5; - CraterEffects = "ExploAmmoCrater"; explosionEffects = "ExploAmmoExplosion"; model = "\A3\Weapons_f\Data\bullettracer\tracer_red"; }; + class ACE_20mm_HE : B_20mm {}; class ACE_20mm_AP : B_20mm { hit = 50; @@ -57,7 +56,6 @@ class CfgAmmo { submunitionAmmo = "ACE_Gatling_30mm_HE_Plane_CAS_01_Sub"; submunitionConeType[] = {"custom", {{0,0}, {0,0}, {0,0}} }; }; - class ACE_Gatling_30mm_HE_Plane_CAS_01_Sub: Gatling_30mm_HE_Plane_CAS_01_F {}; // adjust damage and splash damage, closer to bluefor gatling with same caliber diff --git a/addons/aircraft/CfgMagazines.hpp b/addons/aircraft/CfgMagazines.hpp index b09bac6943..6d35e90255 100644 --- a/addons/aircraft/CfgMagazines.hpp +++ b/addons/aircraft/CfgMagazines.hpp @@ -1,4 +1,3 @@ - class CfgMagazines { // shoot helper object to tripple rof class VehicleMagazine; diff --git a/addons/aircraft/CfgVehicles.hpp b/addons/aircraft/CfgVehicles.hpp index 9839149b3d..f5f496505e 100644 --- a/addons/aircraft/CfgVehicles.hpp +++ b/addons/aircraft/CfgVehicles.hpp @@ -1,4 +1,3 @@ - class CfgVehicles { class All { class Turrets; @@ -11,7 +10,6 @@ class CfgVehicles { }; class Air: AllVehicles {}; - class Helicopter: Air { class Turrets { class MainTurret; @@ -19,13 +17,11 @@ class CfgVehicles { }; class Plane: Air {}; - class ParachuteBase: Helicopter { class Turrets; }; class UAV: Plane {}; - class Helicopter_Base_F: Helicopter { class Turrets: Turrets { class CopilotTurret; @@ -54,7 +50,6 @@ class CfgVehicles { }; class Heli_Light_01_unarmed_base_F: Heli_Light_01_base_F {}; - class B_Heli_Light_01_F: Heli_Light_01_unarmed_base_F { /*class Turrets: Turrets { class CopilotTurret: CopilotTurret {}; @@ -74,12 +69,11 @@ class CfgVehicles { }; class B_Heli_Light_01_armed_F: Heli_Light_01_armed_base_F {}; - class Heli_Light_02_base_F: Helicopter_Base_H { driverCanEject = 1; lockDetectionSystem = 12; incomingMissileDetectionSystem = 16; - magazines[] = {"2000Rnd_762x51_Belt_T_Green","12Rnd_PG_missiles","168Rnd_CMFlare_Chaff_Magazine"}; + magazines[] = {"2000Rnd_762x51_Belt_T_Green", "12Rnd_PG_missiles", "168Rnd_CMFlare_Chaff_Magazine"}; class Turrets: Turrets { class CopilotTurret: CopilotTurret { @@ -98,7 +92,6 @@ class CfgVehicles { #include "Heli_Attack_01_base_F.hpp" class B_Heli_Attack_01_F: Heli_Attack_01_base_F {}; - class Heli_Attack_02_base_F: Helicopter_Base_F { lockDetectionSystem = 12; incomingMissileDetectionSystem = 16; @@ -121,16 +114,17 @@ class CfgVehicles { canEject = 1; showHMD = 1; }; + class MainTurret: MainTurret { magazines[] = {"2000Rnd_762x51_Belt_T_Red"}; canEject = 1; }; + class RightDoorGun: MainTurret { magazines[] = {"2000Rnd_762x51_Belt_T_Red"}; canEject = 1; }; }; - /*class UserActions { class DoorL1_Open { available = 1; @@ -159,7 +153,6 @@ class CfgVehicles { showHMD = 1; }; }; - /*class UserActions: UserActions { class DoorL1_Open { available = 1; @@ -195,44 +188,41 @@ class CfgVehicles { };*/ }; - class Heli_light_03_base_F: Helicopter_Base_F {}; - class I_Heli_light_03_base_F: Heli_light_03_base_F { - lockDetectionSystem = 0; - incomingMissileDetectionSystem = 16; + class Heli_light_03_base_F: Helicopter_Base_F { driverCanEject = 1; - weapons[] = {"M134_minigun","missiles_DAR","CMFlareLauncher", "ACE_AIR_SAFETY" }; - magazines[] = {"5000Rnd_762x51_Yellow_Belt","24Rnd_missiles","168Rnd_CMFlare_Chaff_Magazine"}; class Turrets: Turrets { class MainTurret: MainTurret { canEject = 1; + }; + }; + }; + class I_Heli_light_03_F: Heli_light_03_base_F { + lockDetectionSystem = 0; + incomingMissileDetectionSystem = 16; + weapons[] = {"M134_minigun", "missiles_DAR", "CMFlareLauncher", "ACE_AIR_SAFETY" }; + magazines[] = {"5000Rnd_762x51_Yellow_Belt", "24Rnd_missiles", "168Rnd_CMFlare_Chaff_Magazine"}; + + class Turrets: Turrets { + class MainTurret: MainTurret { showHMD = 1; gunBeg = "commanderview"; gunEnd = "laserstart"; memoryPointGun = "laserstart"; stabilizedInAxes = 3; weapons[] = {"Laserdesignator_mounted"}; - soundServo[] = {"",0.01,1,30}; + soundServo[] = {"", 0.01, 1, 30}; magazines[] = {"Laserbatteries"}; inGunnerMayFire = 1; }; }; }; - class I_Heli_light_03_F: Heli_light_03_base_F { - class Turrets: Turrets { - class MainTurret: MainTurret {}; - }; - }; - class Heli_light_03_unarmed_base_F: Heli_light_03_base_F {}; - class I_Heli_light_03_unarmed_F: Heli_light_03_unarmed_base_F {}; - class Plane_CAS_01_base_F: Plane_Base_F { lockDetectionSystem = 12; incomingMissileDetectionSystem = 16; - class Turrets; #include @@ -241,7 +231,6 @@ class CfgVehicles { class Plane_CAS_02_base_F: Plane_Base_F { lockDetectionSystem = 12; incomingMissileDetectionSystem = 16; - class Turrets; #include @@ -250,7 +239,6 @@ class CfgVehicles { class Plane_Fighter_03_base_F: Plane_Base_F { lockDetectionSystem = 12; incomingMissileDetectionSystem = 16; - class Turrets; #include @@ -274,35 +262,23 @@ class CfgVehicles { class UAV_02_CAS_base_F: UAV_02_base_F { weapons[] = {}; magazines[] = {}; - /*class Turrets: Turrets { class MainTurret: MainTurret {}; };*/ }; - class Heli_Transport_03_base_F: Helicopter_Base_H {}; - class B_Heli_Transport_03_base_F: Heli_Transport_03_base_F { - lockDetectionSystem = 12; - incomingMissileDetectionSystem = 16; + class Heli_Transport_03_base_F: Helicopter_Base_H { driverCanEject = 1; class Turrets: Turrets { class CopilotTurret: CopilotTurret { canEject = 1; }; - //class MainTurret: MainTurret {}; - class RightDoorGun: MainTurret {}; }; }; - - class B_Heli_Transport_03_unarmed_base_F: Heli_Transport_03_base_F { - class Turrets: Turrets { - class CopilotTurret: CopilotTurret { - canEject = 1; - }; - //class MainTurret: MainTurret {}; - //class RightDoorGun: MainTurret {}; - }; + class B_Heli_Transport_03_F: Heli_Transport_03_base_F { + lockDetectionSystem = 12; + incomingMissileDetectionSystem = 16; }; class Heli_Transport_04_base_F: Helicopter_Base_H { @@ -314,6 +290,7 @@ class CfgVehicles { class CopilotTurret: CopilotTurret { canEject = 1; }; + class LoadmasterTurret: MainTurret { canEject = 1; }; @@ -325,6 +302,7 @@ class CfgVehicles { class CopilotTurret: CopilotTurret { canEject = 1; }; + class LoadmasterTurret: LoadmasterTurret { canEject = 1; }; @@ -336,6 +314,7 @@ class CfgVehicles { class CopilotTurret: CopilotTurret { canEject = 1; }; + class LoadmasterTurret: LoadmasterTurret { canEject = 1; }; diff --git a/addons/aircraft/CfgWeapons.hpp b/addons/aircraft/CfgWeapons.hpp index e97889eabf..b94d9f4940 100644 --- a/addons/aircraft/CfgWeapons.hpp +++ b/addons/aircraft/CfgWeapons.hpp @@ -1,13 +1,10 @@ - class Mode_SemiAuto; class Mode_Burst; class Mode_FullAuto; class CfgWeapons { - class RocketPods; - class ACE_AIR_SAFETY : RocketPods - { + class ACE_AIR_SAFETY : RocketPods { CanLock = 0; displayName = "SAFE"; displayNameMagazine = "SAFE"; @@ -24,10 +21,12 @@ class CfgWeapons { // Manual Switching Of Flare Mode class SmokeLauncher; class CMFlareLauncher: SmokeLauncher { - modes[] = {"Single","Burst","AIBurst"}; + modes[] = {"Single", "Burst", "AIBurst"}; + class Single: Mode_SemiAuto { reloadTime = 0.1; }; + class Burst: Mode_Burst { displayName = CSTRING(CMFlareLauncher_Burst_Name); }; @@ -43,6 +42,7 @@ class CfgWeapons { reloadTime = 0.023; //0.04; dispersion = 0.006; //0.0022; }; + class close: manual {}; class short: close {}; class medium: close {}; @@ -57,18 +57,22 @@ class CfgWeapons { dispersion = 0.006; displayName = CSTRING(gatling_20mm_Name); }; + class close: close { reloadTime = 0.04; dispersion = 0.006; }; + class short: short { reloadTime = 0.04; dispersion = 0.006; }; + class medium: medium { reloadTime = 0.04; dispersion = 0.006; }; + class far: far { reloadTime = 0.04; dispersion = 0.006; @@ -78,14 +82,13 @@ class CfgWeapons { // buff gatling rof class MGunCore; class MGun: MGunCore {}; - class LMG_RCWS: MGun {}; - class LMG_Minigun: LMG_RCWS { class manual: MGun { reloadTime = 0.075; //0.015; dispersion = 0.00093; //0.006; }; + class close: manual {}; class short: close {}; class medium: close {}; @@ -94,10 +97,12 @@ class CfgWeapons { class LMG_Minigun_heli: LMG_Minigun { showAimCursorInternal = 0; + class manual: manual { reloadTime = 0.015; //0.033; Note: This is a way to fast ROF (requires over 60 FPS) @todo dispersion = 0.006; //0.0087; }; + class close: manual {}; class short: close {}; class medium: close {}; @@ -110,11 +115,13 @@ class CfgWeapons { dispersion = 0.0064; //0.0023; multiplier = 1; }; + class HighROF: LowROF { reloadTime = 0.02; //0.03; dispersion = 0.0064; //0.0023; multiplier = 1; }; + class close: HighROF {}; class short: close {}; class medium: LowROF {}; @@ -124,12 +131,14 @@ class CfgWeapons { class Gatling_30mm_Plane_CAS_01_F: CannonCore { autoFire = 1; burst = 1; + class LowROF: Mode_FullAuto { autoFire = 0; burst = 22; //65; reloadTime = 0.0462; //0.0154; //0.034; multiplier = 3; }; + class close: LowROF {}; class near: close {}; class short: close {}; diff --git a/addons/aircraft/Heli_Attack_01_base_F.hpp b/addons/aircraft/Heli_Attack_01_base_F.hpp index f56cda1fd8..5b774a3dc2 100644 --- a/addons/aircraft/Heli_Attack_01_base_F.hpp +++ b/addons/aircraft/Heli_Attack_01_base_F.hpp @@ -3,12 +3,10 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { incomingMissileDetectionSystem = 16; driverCanEject = 1; - class MFD - { - class AirplaneHUD - { - class Bones{}; - class Draw{}; + class MFD { + class AirplaneHUD { + class Bones {}; + class Draw {}; topLeft = "HUD_top_left"; topRight = "HUD_top_right"; bottomLeft = "HUD_bottom_left"; @@ -16,15 +14,15 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { borderRight = 0; borderTop = 0; borderBottom = 0; - color[] = {0.15,1,0.15,1}; + color[] = {0.15, 1, 0.15, 1}; enableParallax = 0; helmetMountedDisplay = 1; - helmetPosition[] = {0,0,0}; - helmetRight[] = {0,0,0}; - helmetDown[] = {0,0,0}; + helmetPosition[] = {0, 0, 0}; + helmetRight[] = {0, 0, 0}; + helmetDown[] = {0, 0, 0}; }; - class ACE_HUD_1 - { + + class ACE_HUD_1 { topLeft = "HUD_top_left"; topRight = "HUD_top_right"; bottomLeft = "HUD_bottom_left"; @@ -32,580 +30,577 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { borderRight = 0; borderTop = 0; borderBottom = 0; - color[] = {0.15,1,0.15,1}; + color[] = {0.15, 1, 0.15, 1}; enableParallax = 0; - class Bones - { - class GunnerAim - { + + class Bones { + class GunnerAim { type = "vector"; source = "weapon"; - pos0[] = {0.5,"0.9 - 0.04 + 0.012"}; - pos10[] = {"0.5 + 0.0111","0.9 - 0.04 + 0.012 + 0.0133"}; + pos0[] = {0.5, "0.9 - 0.04 + 0.012"}; + pos10[] = {"0.5 + 0.0111", "0.9 - 0.04 + 0.012 + 0.0133"}; }; - class Target - { + + class Target { source = "target"; type = "vector"; - pos0[] = {0.5,0.5}; - pos10[] = {0.85,0.85}; + pos0[] = {0.5, 0.5}; + pos10[] = {0.85, 0.85}; }; - class Velocity - { + + class Velocity { type = "vector"; source = "velocity"; - pos0[] = {0.5,0.5}; - pos10[] = {0.65,0.65}; + pos0[] = {0.5, 0.5}; + pos10[] = {0.65, 0.65}; }; - class Velocity_slip - { + + class Velocity_slip { type = "vector"; source = "velocity"; - pos0[] = {0.5,0.845}; - pos10[] = {0.53,0.845}; + pos0[] = {0.5, 0.845}; + pos10[] = {0.53, 0.845}; }; - class VspeedBone - { + + class VspeedBone { type = "linear"; source = "vspeed"; sourceScale = 1; min = -10; max = 10; - minPos[] = {0.93,0.2}; - maxPos[] = {0.93,0.8}; + minPos[] = {0.93, 0.2}; + maxPos[] = {0.93, 0.8}; }; - class RadarAltitudeBone - { + + class RadarAltitudeBone { type = "linear"; source = "altitudeAGL"; sourceScale = 1; min = 0; max = 60; - minPos[] = {0.965,0.2}; - maxPos[] = {0.965,0.8}; + minPos[] = {0.965, 0.2}; + maxPos[] = {0.965, 0.8}; }; - class HorizonBankRot - { + + class HorizonBankRot { type = "rotational"; source = "horizonBank"; - center[] = {0.5,0.5}; + center[] = {0.5, 0.5}; min = -3.1416; max = 3.1416; minAngle = -180; maxAngle = 180; aspectRatio = 1; }; - class ForwardVec - { + + class ForwardVec { type = "vector"; source = "forward"; - pos0[] = {0,0}; - pos10[] = {0.25,0.25}; + pos0[] = {0, 0}; + pos10[] = {0.25, 0.25}; }; - class WeaponAim - { + + class WeaponAim { type = "vector"; source = "weapon"; - pos0[] = {0.5,0.5}; - pos10[] = {0.75,0.75}; + pos0[] = {0.5, 0.5}; + pos10[] = {0.75, 0.75}; }; - class Level0 - { + + class Level0 { type = "horizon"; - pos0[] = {0.5,0.5}; - pos10[] = {0.78,0.78}; + pos0[] = {0.5, 0.5}; + pos10[] = {0.78, 0.78}; angle = 0; }; - class LevelP5: Level0 - { + + class LevelP5: Level0 { angle = 5; }; - class LevelM5: Level0 - { + + class LevelM5: Level0 { angle = -5; }; - class LevelP10: Level0 - { + + class LevelP10: Level0 { angle = 10; }; - class LevelM10: Level0 - { + + class LevelM10: Level0 { angle = -10; }; - class LevelP15: Level0 - { + + class LevelP15: Level0 { angle = 15; }; - class LevelM15: Level0 - { + + class LevelM15: Level0 { angle = -15; }; - class LevelP20: Level0 - { + + class LevelP20: Level0 { angle = 20; }; - class LevelM20: Level0 - { + + class LevelM20: Level0 { angle = -20; }; - class LevelP25: Level0 - { + + class LevelP25: Level0 { angle = 25; }; - class LevelM25: Level0 - { + + class LevelM25: Level0 { angle = -25; }; - class LevelP30: Level0 - { + + class LevelP30: Level0 { angle = 30; }; - class LevelM30: Level0 - { + + class LevelM30: Level0 { angle = -30; }; - class LevelP35: Level0 - { + + class LevelP35: Level0 { angle = 35; }; - class LevelM35: Level0 - { + + class LevelM35: Level0 { angle = -35; }; - class LevelP40: Level0 - { + + class LevelP40: Level0 { angle = 40; }; - class LevelM40: Level0 - { + + class LevelM40: Level0 { angle = -40; }; - class LevelP45: Level0 - { + + class LevelP45: Level0 { angle = 45; }; - class LevelM45: Level0 - { + + class LevelM45: Level0 { angle = -45; }; - class LevelP50: Level0 - { + + class LevelP50: Level0 { angle = 50; }; - class LevelM50: Level0 - { + + class LevelM50: Level0 { angle = -50; }; }; - class Draw - { - color[] = {0.18,1,0.18}; + + class Draw { + color[] = {0.18, 1, 0.18}; alpha = 1; condition = "on"; - class Horizont - { - clipTL[] = {0.15,0.15}; - clipBR[] = {0.85,0.85}; - class Dimmed - { - class Level0 - { + + class Horizont { + clipTL[] = {0.15, 0.15}; + clipBR[] = {0.85, 0.85}; + + class Dimmed { + class Level0 { type = "line"; - points[] = {{ "Level0",{ -0.42,0 },1 },{ "Level0",{ -0.38,0 },1 },{ },{ "Level0",{ -0.37,0 },1 },{ "Level0",{ -0.33,0 },1 },{ },{ "Level0",{ -0.32,0 },1 },{ "Level0",{ -0.28,0 },1 },{ },{ "Level0",{ -0.27,0 },1 },{ "Level0",{ -0.23,0 },1 },{ },{ "Level0",{ -0.22,0 },1 },{ "Level0",{ -0.18,0 },1 },{ },{ "Level0",{ -0.17,0 },1 },{ "Level0",{ -0.13,0 },1 },{ },{ "Level0",{ -0.12,0 },1 },{ "Level0",{ -0.08,0 },1 },{ },{ "Level0",{ 0.42,0 },1 },{ "Level0",{ 0.38,0 },1 },{ },{ "Level0",{ 0.37,0 },1 },{ "Level0",{ 0.33,0 },1 },{ },{ "Level0",{ 0.32,0 },1 },{ "Level0",{ 0.28,0 },1 },{ },{ "Level0",{ 0.27,0 },1 },{ "Level0",{ 0.23,0 },1 },{ },{ "Level0",{ 0.22,0 },1 },{ "Level0",{ 0.18,0 },1 },{ },{ "Level0",{ 0.17,0 },1 },{ "Level0",{ 0.13,0 },1 },{ },{ "Level0",{ 0.12,0 },1 },{ "Level0",{ 0.08,0 },1 }}; + points[] = {{"Level0", {-0.42, 0}, 1}, {"Level0", {-0.38, 0}, 1}, {}, {"Level0", {-0.37, 0}, 1}, {"Level0", {-0.33, 0}, 1}, {}, {"Level0", {-0.32, 0}, 1}, {"Level0", {-0.28, 0}, 1}, {}, {"Level0", {-0.27, 0}, 1}, {"Level0", {-0.23, 0}, 1}, {}, {"Level0", {-0.22, 0}, 1}, {"Level0", {-0.18, 0}, 1}, {}, {"Level0", {-0.17, 0}, 1}, {"Level0", {-0.13, 0}, 1}, {}, {"Level0", {-0.12, 0}, 1}, {"Level0", {-0.08, 0}, 1}, {}, {"Level0", {0.42, 0}, 1}, {"Level0", {0.38, 0}, 1}, {}, {"Level0", {0.37, 0}, 1}, {"Level0", {0.33, 0}, 1}, {}, {"Level0", {0.32, 0}, 1}, {"Level0", {0.28, 0}, 1}, {}, {"Level0", {0.27, 0}, 1}, {"Level0", {0.23, 0}, 1}, {}, {"Level0", {0.22, 0}, 1}, {"Level0", {0.18, 0}, 1}, {}, {"Level0", {0.17, 0}, 1}, {"Level0", {0.13, 0}, 1}, {}, {"Level0", {0.12, 0}, 1}, {"Level0", {0.08, 0}, 1 }}; }; }; }; - class HorizonBankRot - { + + class HorizonBankRot { type = "line"; width = 3; - points[] = {{ "HorizonBankRot",{ 0,0.25 },1 },{ "HorizonBankRot",{ -0.01,0.23 },1 },{ "HorizonBankRot",{ 0.01,0.23 },1 },{ "HorizonBankRot",{ 0,0.25 },1 }}; + points[] = {{"HorizonBankRot", {0, 0.25}, 1}, {"HorizonBankRot", {-0.01, 0.23}, 1}, {"HorizonBankRot", {0.01, 0.23}, 1}, {"HorizonBankRot", {0, 0.25}, 1 }}; }; - class Static_HAD_BOX - { - clipTL[] = {0,1}; - clipBR[] = {1,0}; + + class Static_HAD_BOX { + clipTL[] = {0, 1}; + clipBR[] = {1, 0}; type = "line"; width = 5; - points[] = {{ { "0.5-0.1","0.9-0.04" },1 },{ { "0.5-0.1","0.9+0.04" },1 },{ { "0.5+0.1","0.9+0.04" },1 },{ { "0.5+0.1","0.9-0.04" },1 },{ { "0.5-0.1","0.9-0.04" },1 },{ },{ { "0.5-0.1","0.9-0.04+0.012" },1 },{ { "0.5-0.092","0.9-0.04+0.012" },1 },{ },{ { "0.5+0.1","0.9-0.04+0.012" },1 },{ { "0.5+0.092","0.9-0.04+0.012" },1 },{ },{ { 0.5,"0.9-0.04" },1 },{ { 0.5,"0.9-0.032" },1 },{ },{ { 0.5,"0.9+0.04" },1 },{ { 0.5,"0.9+0.032" },1 },{ }}; + points[] = {{{"0.5-0.1", "0.9-0.04"}, 1}, {{"0.5-0.1", "0.9+0.04"}, 1}, {{"0.5+0.1", "0.9+0.04"}, 1}, {{"0.5+0.1", "0.9-0.04"}, 1}, {{"0.5-0.1", "0.9-0.04"}, 1}, {}, {{"0.5-0.1", "0.9-0.04+0.012"}, 1}, {{"0.5-0.092", "0.9-0.04+0.012"}, 1}, {}, {{"0.5+0.1", "0.9-0.04+0.012"}, 1}, {{"0.5+0.092", "0.9-0.04+0.012"}, 1}, {}, {{0.5, "0.9-0.04"}, 1}, {{0.5, "0.9-0.032"}, 1}, {}, {{0.5, "0.9+0.04"}, 1}, {{0.5, "0.9+0.032"}, 1}, { }}; }; - class Gunner_HAD - { + + class Gunner_HAD { type = "line"; width = 6; - points[] = {{ "GunnerAim",{ -0.015,-0.008 },1 },{ "GunnerAim",{ -0.015,0.008 },1 },{ "GunnerAim",{ 0.015,0.008 },1 },{ "GunnerAim",{ 0.015,-0.008 },1 },{ "GunnerAim",{ -0.015,-0.008 },1 }}; + points[] = {{"GunnerAim", {-0.015, -0.008}, 1}, {"GunnerAim", {-0.015, 0.008}, 1}, {"GunnerAim", {0.015, 0.008}, 1}, {"GunnerAim", {0.015, -0.008}, 1}, {"GunnerAim", {-0.015, -0.008}, 1 }}; }; - class Slip_ball_group - { - class Slip_bars - { + + class Slip_ball_group { + class Slip_bars { type = "line"; width = 4; - points[] = {{ { "0.5-0.018","0.9-0.04" },1 },{ { "0.5-0.018","0.9-0.075" },1 },{ },{ { "0.5+0.018","0.9-0.04" },1 },{ { "0.5+0.018","0.9-0.075" },1 }}; + points[] = {{{"0.5-0.018", "0.9-0.04"}, 1}, {{"0.5-0.018", "0.9-0.075"}, 1}, {}, {{"0.5+0.018", "0.9-0.04"}, 1}, {{"0.5+0.018", "0.9-0.075"}, 1 }}; }; - class Slip_ball - { + + class Slip_ball { type = "line"; width = 6; - points[] = {{ "Velocity_slip",1,{ "0 * 0.75","-0.02 * 0.75" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.75","-0.01732 * 0.75" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.75","-0.0099999998 * 0.75" },1 },{ "Velocity_slip",1,{ "0.02 * 0.75","0 * 0.75" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.75","0.0099999998 * 0.75" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.75","0.01732 * 0.75" },1 },{ "Velocity_slip",1,{ "0 * 0.75","0.02 * 0.75" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.75","0.01732 * 0.75" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.75","0.0099999998 * 0.75" },1 },{ "Velocity_slip",1,{ "-0.02 * 0.75","0 * 0.75" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.75","-0.0099999998 * 0.75" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.75","-0.01732 * 0.75" },1 },{ "Velocity_slip",1,{ "0 * 0.75","-0.02 * 0.75" },1 },{ },{ "Velocity_slip",1,{ "0 * 0.6","-0.02 * 0.6" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.6","-0.01732 * 0.6" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.6","-0.0099999998 * 0.6" },1 },{ "Velocity_slip",1,{ "0.02 * 0.6","0 * 0.6" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.6","0.0099999998 * 0.6" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.6","0.01732 * 0.6" },1 },{ "Velocity_slip",1,{ "0 * 0.6","0.02 * 0.6" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.6","0.01732 * 0.6" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.6","0.0099999998 * 0.6" },1 },{ "Velocity_slip",1,{ "-0.02 * 0.6","0 * 0.6" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.6","-0.0099999998 * 0.6" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.6","-0.01732 * 0.6" },1 },{ "Velocity_slip",1,{ "0 * 0.6","-0.02 * 0.6" },1 },{ },{ "Velocity_slip",1,{ "0 * 0.5","-0.02 * 0.5" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.5","-0.01732 * 0.5" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.5","-0.0099999998 * 0.5" },1 },{ "Velocity_slip",1,{ "0.02 * 0.5","0 * 0.5" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.5","0.0099999998 * 0.5" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.5","0.01732 * 0.5" },1 },{ "Velocity_slip",1,{ "0 * 0.5","0.02 * 0.5" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.5","0.01732 * 0.5" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.5","0.0099999998 * 0.5" },1 },{ "Velocity_slip",1,{ "-0.02 * 0.5","0 * 0.5" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.5","-0.0099999998 * 0.5" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.5","-0.01732 * 0.5" },1 },{ "Velocity_slip",1,{ "0 * 0.5","-0.02 * 0.5" },1 },{ },{ "Velocity_slip",1,{ "0 * 0.4","-0.02 * 0.4" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.4","-0.01732 * 0.4" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.4","-0.0099999998 * 0.4" },1 },{ "Velocity_slip",1,{ "0.02 * 0.4","0 * 0.4" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.4","0.0099999998 * 0.4" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.4","0.01732 * 0.4" },1 },{ "Velocity_slip",1,{ "0 * 0.4","0.02 * 0.4" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.4","0.01732 * 0.4" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.4","0.0099999998 * 0.4" },1 },{ "Velocity_slip",1,{ "-0.02 * 0.4","0 * 0.4" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.4","-0.0099999998 * 0.4" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.4","-0.01732 * 0.4" },1 },{ "Velocity_slip",1,{ "0 * 0.4","-0.02 * 0.4" },1 },{ },{ "Velocity_slip",1,{ "0 * 0.30","-0.02 * 0.30" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.30","-0.01732 * 0.30" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.30","-0.0099999998 * 0.30" },1 },{ "Velocity_slip",1,{ "0.02 * 0.30","0 * 0.30" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.30","0.0099999998 * 0.30" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.30","0.01732 * 0.30" },1 },{ "Velocity_slip",1,{ "0 * 0.30","0.02 * 0.30" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.30","0.01732 * 0.30" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.30","0.0099999998 * 0.30" },1 },{ "Velocity_slip",1,{ "-0.02 * 0.30","0 * 0.30" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.30","-0.0099999998 * 0.30" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.30","-0.01732 * 0.30" },1 },{ "Velocity_slip",1,{ "0 * 0.30","-0.02 * 0.30" },1 },{ },{ "Velocity_slip",1,{ "0 * 0.20","-0.02 * 0.20" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.20","-0.01732 * 0.20" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.20","-0.0099999998 * 0.20" },1 },{ "Velocity_slip",1,{ "0.02 * 0.20","0 * 0.20" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.20","0.0099999998 * 0.20" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.20","0.01732 * 0.20" },1 },{ "Velocity_slip",1,{ "0 * 0.20","0.02 * 0.20" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.20","0.01732 * 0.20" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.20","0.0099999998 * 0.20" },1 },{ "Velocity_slip",1,{ "-0.02 * 0.20","0 * 0.20" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.20","-0.0099999998 * 0.20" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.20","-0.01732 * 0.20" },1 },{ "Velocity_slip",1,{ "0 * 0.20","-0.02 * 0.20" },1 },{ },{ "Velocity_slip",1,{ "0 * 0.1","-0.02 * 0.1" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.1","-0.01732 * 0.1" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.1","-0.0099999998 * 0.1" },1 },{ "Velocity_slip",1,{ "0.02 * 0.1","0 * 0.1" },1 },{ "Velocity_slip",1,{ "0.01732 * 0.1","0.0099999998 * 0.1" },1 },{ "Velocity_slip",1,{ "0.0099999998 * 0.1","0.01732 * 0.1" },1 },{ "Velocity_slip",1,{ "0 * 0.1","0.02 * 0.1" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.1","0.01732 * 0.1" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.1","0.0099999998 * 0.1" },1 },{ "Velocity_slip",1,{ "-0.02 * 0.1","0 * 0.1" },1 },{ "Velocity_slip",1,{ "-0.01732 * 0.1","-0.0099999998 * 0.1" },1 },{ "Velocity_slip",1,{ "-0.0099999998 * 0.1","-0.01732 * 0.1" },1 },{ "Velocity_slip",1,{ "0 * 0.1","-0.02 * 0.1" },1 }}; + points[] = {{"Velocity_slip", 1, {"0 * 0.75", "-0.02 * 0.75"}, 1}, {"Velocity_slip", 1, {"0.0099999998 * 0.75", "-0.01732 * 0.75"}, 1}, {"Velocity_slip", 1, {"0.01732 * 0.75", "-0.0099999998 * 0.75"}, 1}, {"Velocity_slip", 1, {"0.02 * 0.75", "0 * 0.75"}, 1}, {"Velocity_slip", 1, {"0.01732 * 0.75", "0.0099999998 * 0.75"}, 1}, {"Velocity_slip", 1, {"0.0099999998 * 0.75", "0.01732 * 0.75"}, 1}, {"Velocity_slip", 1, {"0 * 0.75", "0.02 * 0.75"}, 1}, {"Velocity_slip", 1, {"-0.0099999998 * 0.75", "0.01732 * 0.75"}, 1}, {"Velocity_slip", 1, {"-0.01732 * 0.75", "0.0099999998 * 0.75"}, 1}, {"Velocity_slip", 1, {"-0.02 * 0.75", "0 * 0.75"}, 1}, {"Velocity_slip", 1, {"-0.01732 * 0.75", "-0.0099999998 * 0.75"}, 1}, {"Velocity_slip", 1, {"-0.0099999998 * 0.75", "-0.01732 * 0.75"}, 1}, {"Velocity_slip", 1, {"0 * 0.75", "-0.02 * 0.75"}, 1}, {}, {"Velocity_slip", 1, {"0 * 0.6", "-0.02 * 0.6"}, 1}, {"Velocity_slip", 1, {"0.0099999998 * 0.6", "-0.01732 * 0.6"}, 1}, {"Velocity_slip", 1, {"0.01732 * 0.6", "-0.0099999998 * 0.6"}, 1}, {"Velocity_slip", 1, {"0.02 * 0.6", "0 * 0.6"}, 1}, {"Velocity_slip", 1, {"0.01732 * 0.6", "0.0099999998 * 0.6"}, 1}, {"Velocity_slip", 1, {"0.0099999998 * 0.6", "0.01732 * 0.6"}, 1}, {"Velocity_slip", 1, {"0 * 0.6", "0.02 * 0.6"}, 1}, {"Velocity_slip", 1, {"-0.0099999998 * 0.6", "0.01732 * 0.6"}, 1}, {"Velocity_slip", 1, {"-0.01732 * 0.6", "0.0099999998 * 0.6"}, 1}, {"Velocity_slip", 1, {"-0.02 * 0.6", "0 * 0.6"}, 1}, {"Velocity_slip", 1, {"-0.01732 * 0.6", "-0.0099999998 * 0.6"}, 1}, {"Velocity_slip", 1, {"-0.0099999998 * 0.6", "-0.01732 * 0.6"}, 1}, {"Velocity_slip", 1, {"0 * 0.6", "-0.02 * 0.6"}, 1}, {}, {"Velocity_slip", 1, {"0 * 0.5", "-0.02 * 0.5"}, 1}, {"Velocity_slip", 1, {"0.0099999998 * 0.5", "-0.01732 * 0.5"}, 1}, {"Velocity_slip", 1, {"0.01732 * 0.5", "-0.0099999998 * 0.5"}, 1}, {"Velocity_slip", 1, {"0.02 * 0.5", "0 * 0.5"}, 1}, {"Velocity_slip", 1, {"0.01732 * 0.5", "0.0099999998 * 0.5"}, 1}, {"Velocity_slip", 1, {"0.0099999998 * 0.5", "0.01732 * 0.5"}, 1}, {"Velocity_slip", 1, {"0 * 0.5", "0.02 * 0.5"}, 1}, {"Velocity_slip", 1, {"-0.0099999998 * 0.5", "0.01732 * 0.5"}, 1}, {"Velocity_slip", 1, {"-0.01732 * 0.5", "0.0099999998 * 0.5"}, 1}, {"Velocity_slip", 1, {"-0.02 * 0.5", "0 * 0.5"}, 1}, {"Velocity_slip", 1, {"-0.01732 * 0.5", "-0.0099999998 * 0.5"}, 1}, {"Velocity_slip", 1, {"-0.0099999998 * 0.5", "-0.01732 * 0.5"}, 1}, {"Velocity_slip", 1, {"0 * 0.5", "-0.02 * 0.5"}, 1}, {}, {"Velocity_slip", 1, {"0 * 0.4", "-0.02 * 0.4"}, 1}, {"Velocity_slip", 1, {"0.0099999998 * 0.4", "-0.01732 * 0.4"}, 1}, {"Velocity_slip", 1, {"0.01732 * 0.4", "-0.0099999998 * 0.4"}, 1}, {"Velocity_slip", 1, {"0.02 * 0.4", "0 * 0.4"}, 1}, {"Velocity_slip", 1, {"0.01732 * 0.4", "0.0099999998 * 0.4"}, 1}, {"Velocity_slip", 1, {"0.0099999998 * 0.4", "0.01732 * 0.4"}, 1}, {"Velocity_slip", 1, {"0 * 0.4", "0.02 * 0.4"}, 1}, {"Velocity_slip", 1, {"-0.0099999998 * 0.4", "0.01732 * 0.4"}, 1}, {"Velocity_slip", 1, {"-0.01732 * 0.4", "0.0099999998 * 0.4"}, 1}, {"Velocity_slip", 1, {"-0.02 * 0.4", "0 * 0.4"}, 1}, {"Velocity_slip", 1, {"-0.01732 * 0.4", "-0.0099999998 * 0.4"}, 1}, {"Velocity_slip", 1, {"-0.0099999998 * 0.4", "-0.01732 * 0.4"}, 1}, {"Velocity_slip", 1, {"0 * 0.4", "-0.02 * 0.4"}, 1}, {}, {"Velocity_slip", 1, {"0 * 0.30", "-0.02 * 0.30"}, 1}, {"Velocity_slip", 1, {"0.0099999998 * 0.30", "-0.01732 * 0.30"}, 1}, {"Velocity_slip", 1, {"0.01732 * 0.30", "-0.0099999998 * 0.30"}, 1}, {"Velocity_slip", 1, {"0.02 * 0.30", "0 * 0.30"}, 1}, {"Velocity_slip", 1, {"0.01732 * 0.30", "0.0099999998 * 0.30"}, 1}, {"Velocity_slip", 1, {"0.0099999998 * 0.30", "0.01732 * 0.30"}, 1}, {"Velocity_slip", 1, {"0 * 0.30", "0.02 * 0.30"}, 1}, {"Velocity_slip", 1, {"-0.0099999998 * 0.30", "0.01732 * 0.30"}, 1}, {"Velocity_slip", 1, {"-0.01732 * 0.30", "0.0099999998 * 0.30"}, 1}, {"Velocity_slip", 1, {"-0.02 * 0.30", "0 * 0.30"}, 1}, {"Velocity_slip", 1, {"-0.01732 * 0.30", "-0.0099999998 * 0.30"}, 1}, {"Velocity_slip", 1, {"-0.0099999998 * 0.30", "-0.01732 * 0.30"}, 1}, {"Velocity_slip", 1, {"0 * 0.30", "-0.02 * 0.30"}, 1}, {}, {"Velocity_slip", 1, {"0 * 0.20", "-0.02 * 0.20"}, 1}, {"Velocity_slip", 1, {"0.0099999998 * 0.20", "-0.01732 * 0.20"}, 1}, {"Velocity_slip", 1, {"0.01732 * 0.20", "-0.0099999998 * 0.20"}, 1}, {"Velocity_slip", 1, {"0.02 * 0.20", "0 * 0.20"}, 1}, {"Velocity_slip", 1, {"0.01732 * 0.20", "0.0099999998 * 0.20"}, 1}, {"Velocity_slip", 1, {"0.0099999998 * 0.20", "0.01732 * 0.20"}, 1}, {"Velocity_slip", 1, {"0 * 0.20", "0.02 * 0.20"}, 1}, {"Velocity_slip", 1, {"-0.0099999998 * 0.20", "0.01732 * 0.20"}, 1}, {"Velocity_slip", 1, {"-0.01732 * 0.20", "0.0099999998 * 0.20"}, 1}, {"Velocity_slip", 1, {"-0.02 * 0.20", "0 * 0.20"}, 1}, {"Velocity_slip", 1, {"-0.01732 * 0.20", "-0.0099999998 * 0.20"}, 1}, {"Velocity_slip", 1, {"-0.0099999998 * 0.20", "-0.01732 * 0.20"}, 1}, {"Velocity_slip", 1, {"0 * 0.20", "-0.02 * 0.20"}, 1}, {}, {"Velocity_slip", 1, {"0 * 0.1", "-0.02 * 0.1"}, 1}, {"Velocity_slip", 1, {"0.0099999998 * 0.1", "-0.01732 * 0.1"}, 1}, {"Velocity_slip", 1, {"0.01732 * 0.1", "-0.0099999998 * 0.1"}, 1}, {"Velocity_slip", 1, {"0.02 * 0.1", "0 * 0.1"}, 1}, {"Velocity_slip", 1, {"0.01732 * 0.1", "0.0099999998 * 0.1"}, 1}, {"Velocity_slip", 1, {"0.0099999998 * 0.1", "0.01732 * 0.1"}, 1}, {"Velocity_slip", 1, {"0 * 0.1", "0.02 * 0.1"}, 1}, {"Velocity_slip", 1, {"-0.0099999998 * 0.1", "0.01732 * 0.1"}, 1}, {"Velocity_slip", 1, {"-0.01732 * 0.1", "0.0099999998 * 0.1"}, 1}, {"Velocity_slip", 1, {"-0.02 * 0.1", "0 * 0.1"}, 1}, {"Velocity_slip", 1, {"-0.01732 * 0.1", "-0.0099999998 * 0.1"}, 1}, {"Velocity_slip", 1, {"-0.0099999998 * 0.1", "-0.01732 * 0.1"}, 1}, {"Velocity_slip", 1, {"0 * 0.1", "-0.02 * 0.1"}, 1 }}; }; }; - class Centerline - { + + class Centerline { type = "line"; width = 5; - points[] = {{ { 0.5,0.48 },1 },{ { 0.5,0.45 },1 },{ },{ { 0.5,0.52 },1 },{ { 0.5,0.55 },1 },{ },{ { 0.48,0.5 },1 },{ { 0.45,0.5 },1 },{ },{ { 0.52,0.5 },1 },{ { 0.55,0.5 },1 },{ }}; + points[] = {{{0.5, 0.48}, 1}, {{0.5, 0.45}, 1}, {}, {{0.5, 0.52}, 1}, {{0.5, 0.55}, 1}, {}, {{0.48, 0.5}, 1}, {{0.45, 0.5}, 1}, {}, {{0.52, 0.5}, 1}, {{0.55, 0.5}, 1}, { }}; }; - class WeaponName - { + + class WeaponName { type = "text"; source = "weapon"; sourceScale = 1; align = "right"; scale = 1; - pos[] = {{ 0.61,0.86 },1}; - right[] = {{ 0.65,0.86 },1}; - down[] = {{ 0.61,0.9 },1}; + pos[] = {{0.61, 0.86}, 1}; + right[] = {{0.65, 0.86}, 1}; + down[] = {{0.61, 0.9}, 1}; }; - class Ammo_GUN - { + + class Ammo_GUN { type = "group"; condition = "mgun"; - class Ammo_count_GUN - { + + class Ammo_count_GUN { type = "text"; source = "ammo"; sourceScale = 1; align = "right"; scale = 1; - pos[] = {{ 0.61,0.89 },1}; - right[] = {{ 0.65,0.89 },1}; - down[] = {{ 0.61,0.93 },1}; + pos[] = {{0.61, 0.89}, 1}; + right[] = {{0.65, 0.89}, 1}; + down[] = {{0.61, 0.93}, 1}; }; }; - class Ammo_RKT - { + + class Ammo_RKT { type = "group"; condition = "rocket"; - class Ammo_count_RKT - { + + class Ammo_count_RKT { type = "text"; source = "ammo"; sourceScale = 1; align = "right"; scale = 1; - pos[] = {{ 0.61,0.89 },1}; - right[] = {{ 0.65,0.89 },1}; - down[] = {{ 0.61,0.93 },1}; + pos[] = {{0.61, 0.89}, 1}; + right[] = {{0.65, 0.89}, 1}; + down[] = {{0.61, 0.93}, 1}; }; }; - class Ammo_AGM - { + + class Ammo_AGM { type = "group"; condition = "AAmissile"; - class Ammo_count_AGM - { + + class Ammo_count_AGM { type = "text"; source = "ammo"; sourceScale = 1; align = "right"; scale = 1; - pos[] = {{ 0.61,0.89 },1}; - right[] = {{ 0.65,0.89 },1}; - down[] = {{ 0.61,0.93 },1}; + pos[] = {{0.61, 0.89}, 1}; + right[] = {{0.65, 0.89}, 1}; + down[] = {{0.61, 0.93}, 1}; }; }; - class Ammo_AAM - { + + class Ammo_AAM { type = "group"; condition = "ATmissile"; - class Ammo_count_AAM - { + + class Ammo_count_AAM { type = "text"; source = "ammo"; sourceScale = 1; align = "right"; scale = 1; - pos[] = {{ 0.61,0.89 },1}; - right[] = {{ 0.65,0.89 },1}; - down[] = {{ 0.61,0.93 },1}; + pos[] = {{0.61, 0.89}, 1}; + right[] = {{0.65, 0.89}, 1}; + down[] = {{0.61, 0.93}, 1}; }; }; - class Ammo_Bomb - { + + class Ammo_Bomb { type = "group"; condition = "Bomb"; - class Ammo_count_Bomb - { + + class Ammo_count_Bomb { type = "text"; source = "ammo"; sourceScale = 1; align = "right"; scale = 1; - pos[] = {{ 0.61,0.89 },1}; - right[] = {{ 0.65,0.89 },1}; - down[] = {{ 0.61,0.93 },1}; + pos[] = {{0.61, 0.89}, 1}; + right[] = {{0.65, 0.89}, 1}; + down[] = {{0.61, 0.93}, 1}; }; }; - class LightsGroup - { + + class LightsGroup { type = "group"; condition = "lights"; - class LightsText - { + + class LightsText { type = "text"; source = "static"; text = "LIGHTS"; align = "right"; scale = 1; - pos[] = {{ 0.03,"0.53 + 0.055" },1}; - right[] = {{ 0.07,"0.53 + 0.055" },1}; - down[] = {{ 0.03,"0.53 + 0.095" },1}; + pos[] = {{0.03, "0.53 + 0.055"}, 1}; + right[] = {{0.07, "0.53 + 0.055"}, 1}; + down[] = {{0.03, "0.53 + 0.095"}, 1}; }; }; - class CollisionLightsGroup - { + + class CollisionLightsGroup { type = "group"; condition = "collisionlights"; - class CollisionLightsText - { + + class CollisionLightsText { type = "text"; source = "static"; text = "A-COL"; align = "right"; scale = 1; - pos[] = {{ 0.03,"0.53 + 0.105" },1}; - right[] = {{ 0.07,"0.53 + 0.105" },1}; - down[] = {{ 0.03,"0.53 + 0.145" },1}; + pos[] = {{0.03, "0.53 + 0.105"}, 1}; + right[] = {{0.07, "0.53 + 0.105"}, 1}; + down[] = {{0.03, "0.53 + 0.145"}, 1}; }; }; - class GearGroup - { + + class GearGroup { type = "group"; condition = "ils"; - class GearText - { + + class GearText { type = "text"; source = "static"; text = "GEAR"; align = "right"; scale = 1; - pos[] = {{ 0.03,"0.53 + 0.155" },1}; - right[] = {{ 0.07,"0.53 + 0.155" },1}; - down[] = {{ 0.03,"0.53 + 0.195" },1}; + pos[] = {{0.03, "0.53 + 0.155"}, 1}; + right[] = {{0.07, "0.53 + 0.155"}, 1}; + down[] = {{0.03, "0.53 + 0.195"}, 1}; }; }; - class ATMissileTOFGroup - { + + class ATMissileTOFGroup { condition = "ATmissile"; type = "group"; - class TOFtext - { + + class TOFtext { type = "text"; align = "right"; source = "static"; text = "TOF="; scale = 1; - pos[] = {{ 0.61,0.92 },1}; - right[] = {{ 0.65,0.92 },1}; - down[] = {{ 0.61,0.96 },1}; + pos[] = {{0.61, 0.92}, 1}; + right[] = {{0.65, 0.92}, 1}; + down[] = {{0.61, 0.96}, 1}; }; - class TOFnumber - { + + class TOFnumber { type = "text"; source = "targetDist"; sourcescale = 0.0025; align = "right"; scale = 1; - pos[] = {{ 0.69,0.92 },1}; - right[] = {{ 0.73,0.92 },1}; - down[] = {{ 0.69,0.96 },1}; + pos[] = {{0.69, 0.92}, 1}; + right[] = {{0.73, 0.92}, 1}; + down[] = {{0.69, 0.96}, 1}; }; }; - class LaserTOFGroup - { + + class LaserTOFGroup { condition = "Bomb"; type = "group"; - class TOFtext - { + + class TOFtext { type = "text"; align = "right"; source = "static"; text = "TOF="; scale = 1; - pos[] = {{ 0.61,0.92 },1}; - right[] = {{ 0.65,0.92 },1}; - down[] = {{ 0.61,0.96 },1}; + pos[] = {{0.61, 0.92}, 1}; + right[] = {{0.65, 0.92}, 1}; + down[] = {{0.61, 0.96}, 1}; }; - class TOFnumber - { + + class TOFnumber { type = "text"; source = "targetDist"; sourcescale = 0.0025; align = "right"; scale = 1; - pos[] = {{ 0.69,0.92 },1}; - right[] = {{ 0.73,0.92 },1}; - down[] = {{ 0.69,0.96 },1}; + pos[] = {{0.69, 0.92}, 1}; + right[] = {{0.73, 0.92}, 1}; + down[] = {{0.69, 0.96}, 1}; }; }; - class RocketTOFGroup - { + + class RocketTOFGroup { condition = "Rocket"; type = "group"; - class TOFtext - { + + class TOFtext { type = "text"; align = "right"; source = "static"; text = "TOF="; scale = 1; - pos[] = {{ 0.61,0.92 },1}; - right[] = {{ 0.65,0.92 },1}; - down[] = {{ 0.61,0.96 },1}; + pos[] = {{0.61, 0.92}, 1}; + right[] = {{0.65, 0.92}, 1}; + down[] = {{0.61, 0.96}, 1}; }; - class TOFnumber - { + + class TOFnumber { type = "text"; source = "targetDist"; sourcescale = 0.0025; align = "right"; scale = 1; - pos[] = {{ 0.69,0.92 },1}; - right[] = {{ 0.73,0.92 },1}; - down[] = {{ 0.69,0.96 },1}; + pos[] = {{0.69, 0.92}, 1}; + right[] = {{0.73, 0.92}, 1}; + down[] = {{0.69, 0.96}, 1}; }; }; - class RangeNumber - { + + class RangeNumber { type = "text"; source = "targetDist"; sourceScale = 1; align = "left"; scale = 1; - pos[] = {{ 0.39,0.89 },1}; - right[] = {{ 0.43,0.89 },1}; - down[] = {{ 0.39,0.93 },1}; + pos[] = {{0.39, 0.89}, 1}; + right[] = {{0.43, 0.89}, 1}; + down[] = {{0.39, 0.93}, 1}; }; - class RangeText - { + + class RangeText { type = "text"; source = "static"; text = "RNG"; align = "left"; scale = 1; - pos[] = {{ 0.39,0.86 },1}; - right[] = {{ 0.43,0.86 },1}; - down[] = {{ 0.39,0.9 },1}; + pos[] = {{0.39, 0.86}, 1}; + right[] = {{0.43, 0.86}, 1}; + down[] = {{0.39, 0.9}, 1}; }; - class SpeedNumber - { + + class SpeedNumber { type = "text"; align = "right"; scale = 1; source = "speed"; sourceScale = 3.6; - pos[] = {{ 0.03,0.475 },1}; - right[] = {{ 0.08,0.475 },1}; - down[] = {{ 0.03,0.525 },1}; + pos[] = {{0.03, 0.475}, 1}; + right[] = {{0.08, 0.475}, 1}; + down[] = {{0.03, 0.525}, 1}; }; - class TorqueNumber - { + + class TorqueNumber { condition = "simulRTD"; - class Torque_number - { + + class Torque_number { type = "text"; align = "left"; scale = 1; source = "rtdRotorTorque"; sourceScale = 290; - pos[] = {{ 0.065,0.175 },1}; - right[] = {{ 0.115,0.175 },1}; - down[] = {{ 0.065,0.225 },1}; + pos[] = {{0.065, 0.175}, 1}; + right[] = {{0.115, 0.175}, 1}; + down[] = {{0.065, 0.225}, 1}; }; - class Torquetext - { + + class Torquetext { type = "text"; source = "static"; text = "%"; align = "right"; scale = 1; - pos[] = {{ 0.07,0.175 },1}; - right[] = {{ 0.12,0.175 },1}; - down[] = {{ 0.07,0.225 },1}; + pos[] = {{0.07, 0.175}, 1}; + right[] = {{0.12, 0.175}, 1}; + down[] = {{0.07, 0.225}, 1}; }; }; - class AltNumber: SpeedNumber - { + + class AltNumber: SpeedNumber { align = "right"; source = "altitudeAGL"; sourceScale = 1; - pos[] = {{ 0.83,0.475 },1}; - right[] = {{ 0.88,0.475 },1}; - down[] = {{ 0.83,0.525 },1}; + pos[] = {{0.83, 0.475}, 1}; + right[] = {{0.88, 0.475}, 1}; + down[] = {{0.83, 0.525}, 1}; }; - class ASLNumber - { + + class ASLNumber { type = "text"; source = "altitudeASL"; sourceScale = 1; align = "right"; scale = 1; - pos[] = {{ 0.835,0.18 },1}; - right[] = {{ 0.875,0.18 },1}; - down[] = {{ 0.835,0.22 },1}; + pos[] = {{0.835, 0.18}, 1}; + right[] = {{0.875, 0.18}, 1}; + down[] = {{0.835, 0.22}, 1}; }; - class VspeedScalePosta - { + + class VspeedScalePosta { type = "line"; width = 5; - points[] = {{ { 0.98,0.2 },1 },{ { 1,0.2 },1 },{ },{ { 0.93,0.2 },1 },{ { 0.95,0.2 },1 },{ },{ { 0.98,0.35 },1 },{ { 1,0.35 },1 },{ },{ { 0.93,0.35 },1 },{ { 0.95,0.35 },1 },{ },{ { 0.94,0.38 },1 },{ { 0.95,0.38 },1 },{ },{ { 0.94,0.41 },1 },{ { 0.95,0.41 },1 },{ },{ { 0.94,0.44 },1 },{ { 0.95,0.44 },1 },{ },{ { 0.94,0.47 },1 },{ { 0.95,0.47 },1 },{ },{ { 0.98,0.5 },1 },{ { 1,0.5 },1 },{ },{ { 0.93,0.5 },1 },{ { 0.95,0.5 },1 },{ },{ { 0.94,0.53 },1 },{ { 0.95,0.53 },1 },{ },{ { 0.94,0.56 },1 },{ { 0.95,0.56 },1 },{ },{ { 0.94,0.59 },1 },{ { 0.95,0.59 },1 },{ },{ { 0.94,0.62 },1 },{ { 0.95,0.62 },1 },{ },{ { 0.98,0.65 },1 },{ { 1,0.65 },1 },{ },{ { 0.93,0.65 },1 },{ { 0.95,0.65 },1 },{ },{ { 0.99,0.68 },1 },{ { 0.98,0.68 },1 },{ },{ { 0.99,0.71 },1 },{ { 0.98,0.71 },1 },{ },{ { 0.99,0.74 },1 },{ { 0.98,0.74 },1 },{ },{ { 0.99,0.77 },1 },{ { 0.98,0.77 },1 },{ },{ { 0.98,0.8 },1 },{ { 1,0.8 },1 },{ },{ { 0.93,0.8 },1 },{ { 0.95,0.8 },1 },{ }}; + points[] = {{{0.98, 0.2}, 1}, {{1, 0.2}, 1}, {}, {{0.93, 0.2}, 1}, {{0.95, 0.2}, 1}, {}, {{0.98, 0.35}, 1}, {{1, 0.35}, 1}, {}, {{0.93, 0.35}, 1}, {{0.95, 0.35}, 1}, {}, {{0.94, 0.38}, 1}, {{0.95, 0.38}, 1}, {}, {{0.94, 0.41}, 1}, {{0.95, 0.41}, 1}, {}, {{0.94, 0.44}, 1}, {{0.95, 0.44}, 1}, {}, {{0.94, 0.47}, 1}, {{0.95, 0.47}, 1}, {}, {{0.98, 0.5}, 1}, {{1, 0.5}, 1}, {}, {{0.93, 0.5}, 1}, {{0.95, 0.5}, 1}, {}, {{0.94, 0.53}, 1}, {{0.95, 0.53}, 1}, {}, {{0.94, 0.56}, 1}, {{0.95, 0.56}, 1}, {}, {{0.94, 0.59}, 1}, {{0.95, 0.59}, 1}, {}, {{0.94, 0.62}, 1}, {{0.95, 0.62}, 1}, {}, {{0.98, 0.65}, 1}, {{1, 0.65}, 1}, {}, {{0.93, 0.65}, 1}, {{0.95, 0.65}, 1}, {}, {{0.99, 0.68}, 1}, {{0.98, 0.68}, 1}, {}, {{0.99, 0.71}, 1}, {{0.98, 0.71}, 1}, {}, {{0.99, 0.74}, 1}, {{0.98, 0.74}, 1}, {}, {{0.99, 0.77}, 1}, {{0.98, 0.77}, 1}, {}, {{0.98, 0.8}, 1}, {{1, 0.8}, 1}, {}, {{0.93, 0.8}, 1}, {{0.95, 0.8}, 1}, { }}; }; - class RadarAltitudeBand - { - clipTL[] = {0,0.2}; - clipBR[] = {1,0.8}; + + class RadarAltitudeBand { + clipTL[] = {0, 0.2}; + clipBR[] = {1, 0.8}; hideValue = 201; - class radarbanda - { + + class radarbanda { type = "line"; width = 17; - points[] = {{ "RadarAltitudeBone",{ 0,0 },1 },{ "RadarAltitudeBone",{ 0,0.6 },1 }}; + points[] = {{"RadarAltitudeBone", {0, 0}, 1}, {"RadarAltitudeBone", {0, 0.6}, 1 }}; }; }; - class VspeedBand - { + + class VspeedBand { type = "line"; width = 3; - points[] = {{ "VspeedBone",{ -0.01,0 },1 },{ "VspeedBone",{ -0.025,-0.015 },1 },{ "VspeedBone",{ -0.025,0.015 },1 },{ "VspeedBone",{ -0.01,0 },1 },{ }}; + points[] = {{"VspeedBone", {-0.01, 0}, 1}, {"VspeedBone", {-0.025, -0.015}, 1}, {"VspeedBone", {-0.025, 0.015}, 1}, {"VspeedBone", {-0.01, 0}, 1}, { }}; }; - class HeadingNumber: SpeedNumber - { + + class HeadingNumber: SpeedNumber { source = "heading"; sourceScale = 1; align = "center"; - pos[] = {{ 0.5,0.045 },1}; - right[] = {{ 0.56,0.045 },1}; - down[] = {{ 0.5,"0.045 + 0.06" },1}; + pos[] = {{0.5, 0.045}, 1}; + right[] = {{0.56, 0.045}, 1}; + down[] = {{0.5, "0.045 + 0.06"}, 1}; }; - class Center_box - { + + class Center_box { type = "line"; width = 1.5; - points[] = {{ { 0.45,"0.02 + 0.085 - 0.06" },1 },{ { "0.45 + 0.10","0.02 + 0.085 - 0.06" },1 },{ { "0.45 + 0.10","0.02 + 0.085" },1 },{ { 0.45,"0.02 + 0.085" },1 },{ { 0.45,"0.02 + 0.085 - 0.06" },1 }}; + points[] = {{{0.45, "0.02 + 0.085 - 0.06"}, 1}, {{"0.45 + 0.10", "0.02 + 0.085 - 0.06"}, 1}, {{"0.45 + 0.10", "0.02 + 0.085"}, 1}, {{0.45, "0.02 + 0.085"}, 1}, {{0.45, "0.02 + 0.085 - 0.06"}, 1 }}; }; - class HeadingArrow - { + + class HeadingArrow { type = "line"; width = 7; - points[] = {{ { "0.5","0.128 + 0.03" },1 },{ { 0.5,0.128 },1 }}; + points[] = {{{"0.5", "0.128 + 0.03"}, 1}, {{0.5, 0.128}, 1 }}; }; - class HeadingScale_LEFT - { - clipTL[] = {0,0}; - clipBR[] = {0.45,1}; - class Heading_group - { + + class HeadingScale_LEFT { + clipTL[] = {0, 0}; + clipBR[] = {0.45, 1}; + + class Heading_group { type = "scale"; horizontal = 1; source = "heading"; @@ -624,17 +619,17 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { stepSize = "0.05"; align = "center"; scale = 1; - pos[] = {0.12,"0.0 + 0.065"}; - right[] = {0.16,"0.0 + 0.065"}; - down[] = {0.12,"0.04 + 0.065"}; + pos[] = {0.12, "0.0 + 0.065"}; + right[] = {0.16, "0.0 + 0.065"}; + down[] = {0.12, "0.04 + 0.065"}; }; }; - class HeadingScale_RIGHT - { - clipTL[] = {0.55,0}; - clipBR[] = {1,1}; - class Heading_group - { + + class HeadingScale_RIGHT { + clipTL[] = {0.55, 0}; + clipBR[] = {1, 1}; + + class Heading_group { type = "scale"; horizontal = 1; source = "heading"; @@ -653,17 +648,17 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { stepSize = "0.05"; align = "center"; scale = 1; - pos[] = {0.12,"0.0 + 0.065"}; - right[] = {0.16,"0.0 + 0.065"}; - down[] = {0.12,"0.04 + 0.065"}; + pos[] = {0.12, "0.0 + 0.065"}; + right[] = {0.16, "0.0 + 0.065"}; + down[] = {0.12, "0.04 + 0.065"}; }; }; - class HeadingScale_BOTTOM - { - clipTL[] = {0.45,"0.02 + 0.085"}; - clipBR[] = {"0.45 + 0.10",1}; - class Heading_group - { + + class HeadingScale_BOTTOM { + clipTL[] = {0.45, "0.02 + 0.085"}; + clipBR[] = {"0.45 + 0.10", 1}; + + class Heading_group { type = "scale"; horizontal = 1; source = "heading"; @@ -682,41 +677,41 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { stepSize = "0.05"; align = "center"; scale = 1; - pos[] = {0.12,"0.0 + 0.065"}; - right[] = {0.16,"0.0 + 0.065"}; - down[] = {0.12,"0.04 + 0.065"}; + pos[] = {0.12, "0.0 + 0.065"}; + right[] = {0.16, "0.0 + 0.065"}; + down[] = {0.12, "0.04 + 0.065"}; }; }; - class Fuel_Text - { + + class Fuel_Text { type = "text"; source = "static"; text = "Fuel"; align = "right"; scale = 1; - pos[] = {{ 0.03,0.9 },1}; - right[] = {{ 0.07,0.9 },1}; - down[] = {{ 0.03,0.94 },1}; + pos[] = {{0.03, 0.9}, 1}; + right[] = {{0.07, 0.9}, 1}; + down[] = {{0.03, 0.94}, 1}; }; - class Fuel_Number - { + + class Fuel_Number { type = "text"; source = "fuel"; sourceScale = 100; align = "right"; scale = 1; - pos[] = {{ 0.1,0.9 },1}; - right[] = {{ 0.14,0.9 },1}; - down[] = {{ 0.1,0.94 },1}; + pos[] = {{0.1, 0.9}, 1}; + right[] = {{0.14, 0.9}, 1}; + down[] = {{0.1, 0.94}, 1}; }; }; helmetMountedDisplay = 1; - helmetPosition[] = {-0.04,0.04,0.1}; - helmetRight[] = {0.08,0,0}; - helmetDown[] = {0,-0.08,0}; + helmetPosition[] = {-0.04, 0.04, 0.1}; + helmetRight[] = {0.08, 0, 0}; + helmetDown[] = {0, -0.08, 0}; }; - class ACE_HUD_2 - { + + class ACE_HUD_2 { topLeft = "HUD_top_left"; topRight = "HUD_top_right"; bottomLeft = "HUD_bottom_left"; @@ -724,148 +719,147 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { borderRight = 0; borderTop = 0; borderBottom = 0; - color[] = {0.15,1,0.15,1}; + color[] = {0.15, 1, 0.15, 1}; enableParallax = 0; - class Bones - { - class Velocity - { + + class Bones { + class Velocity { type = "vector"; source = "velocity"; - pos0[] = {0.5,0.5}; - pos10[] = {0.75,0.75}; + pos0[] = {0.5, 0.5}; + pos10[] = {0.75, 0.75}; }; - class ForwardVec1 - { + + class ForwardVec1 { type = "vector"; source = "forward"; - pos0[] = {0,0}; - pos10[] = {0.25,0.25}; + pos0[] = {0, 0}; + pos10[] = {0.25, 0.25}; }; - class ForwardVec - { + + class ForwardVec { type = "vector"; source = "forward"; - pos0[] = {0,0}; - pos10[] = {0.253,0.253}; + pos0[] = {0, 0}; + pos10[] = {0.253, 0.253}; }; - class WeaponAim - { + + class WeaponAim { type = "vector"; source = "weapon"; - pos0[] = {0.5,0.5}; - pos10[] = {0.753,0.753}; + pos0[] = {0.5, 0.5}; + pos10[] = {0.753, 0.753}; }; - class WeaponAim1 - { + + class WeaponAim1 { type = "vector"; source = "weapon"; - pos0[] = {0,0}; - pos10[] = {0.253,0.23}; + pos0[] = {0, 0}; + pos10[] = {0.253, 0.23}; }; - class Target - { + + class Target { type = "vector"; source = "target"; - pos0[] = {0.5,0.5}; - pos10[] = {0.753,0.753}; + pos0[] = {0.5, 0.5}; + pos10[] = {0.753, 0.753}; }; - class RadarContact - { + + class RadarContact { type = "fixed"; - pos[] = {0,0}; + pos[] = {0, 0}; }; }; - class Draw - { - color[] = {0.18,1,0.18}; + + class Draw { + color[] = {0.18, 1, 0.18}; alpha = 1; condition = "on"; - class PlaneMovementCrosshair - { + + class PlaneMovementCrosshair { type = "line"; width = 7; - points[] = {{ "ForwardVec1",1,"Velocity",1,{ 0,-0.02 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0.01,-0.01732 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0.01732,-0.01 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0.02,0 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0.01732,0.01 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0.01,0.01732 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0,0.02 },1 },{ "ForwardVec1",1,"Velocity",1,{ -0.01,0.01732 },1 },{ "ForwardVec1",1,"Velocity",1,{ -0.01732,0.01 },1 },{ "ForwardVec1",1,"Velocity",1,{ -0.02,0 },1 },{ "ForwardVec1",1,"Velocity",1,{ -0.01732,-0.01 },1 },{ "ForwardVec1",1,"Velocity",1,{ -0.01,-0.01732 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0,-0.02 },1 },{ },{ "ForwardVec1",1,"Velocity",1,{ 0.04,0 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0.02,0 },1 },{ },{ "ForwardVec1",1,"Velocity",1,{ -0.04,0 },1 },{ "ForwardVec1",1,"Velocity",1,{ -0.02,0 },1 },{ },{ "ForwardVec1",1,"Velocity",1,{ 0,-0.04 },1 },{ "ForwardVec1",1,"Velocity",1,{ 0,-0.02 },1 }}; + points[] = {{"ForwardVec1", 1, "Velocity", 1, {0, -0.02}, 1}, {"ForwardVec1", 1, "Velocity", 1, {0.01, -0.01732}, 1}, {"ForwardVec1", 1, "Velocity", 1, {0.01732, -0.01}, 1}, {"ForwardVec1", 1, "Velocity", 1, {0.02, 0}, 1}, {"ForwardVec1", 1, "Velocity", 1, {0.01732, 0.01}, 1}, {"ForwardVec1", 1, "Velocity", 1, {0.01, 0.01732}, 1}, {"ForwardVec1", 1, "Velocity", 1, {0, 0.02}, 1}, {"ForwardVec1", 1, "Velocity", 1, {-0.01, 0.01732}, 1}, {"ForwardVec1", 1, "Velocity", 1, {-0.01732, 0.01}, 1}, {"ForwardVec1", 1, "Velocity", 1, {-0.02, 0}, 1}, {"ForwardVec1", 1, "Velocity", 1, {-0.01732, -0.01}, 1}, {"ForwardVec1", 1, "Velocity", 1, {-0.01, -0.01732}, 1}, {"ForwardVec1", 1, "Velocity", 1, {0, -0.02}, 1}, {}, {"ForwardVec1", 1, "Velocity", 1, {0.04, 0}, 1}, {"ForwardVec1", 1, "Velocity", 1, {0.02, 0}, 1}, {}, {"ForwardVec1", 1, "Velocity", 1, {-0.04, 0}, 1}, {"ForwardVec1", 1, "Velocity", 1, {-0.02, 0}, 1}, {}, {"ForwardVec1", 1, "Velocity", 1, {0, -0.04}, 1}, {"ForwardVec1", 1, "Velocity", 1, {0, -0.02}, 1 }}; }; - class Gunner_AIM - { + + class Gunner_AIM { type = "group"; - class Circle - { + + class Circle { type = "line"; width = 6; - points[] = {{ "ForwardVec",1,"WeaponAim",1,{ 0,-0.015 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0,-0.03 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0,-0.0325 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0,-0.0475 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0,0.015 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0,0.03 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0,0.0325 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0,0.0475 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ -0.015,0 },1 },{ "ForwardVec",1,"WeaponAim",1,{ -0.03,0 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ -0.0325,0 },1 },{ "ForwardVec",1,"WeaponAim",1,{ -0.0475,0 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0.015,0 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0.03,0 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0.0325,0 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0.0475,0 },1 }}; + points[] = {{"ForwardVec", 1, "WeaponAim", 1, {0, -0.015}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {0, -0.03}, 1}, {}, {"ForwardVec", 1, "WeaponAim", 1, {0, -0.0325}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {0, -0.0475}, 1}, {}, {"ForwardVec", 1, "WeaponAim", 1, {0, 0.015}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {0, 0.03}, 1}, {}, {"ForwardVec", 1, "WeaponAim", 1, {0, 0.0325}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {0, 0.0475}, 1}, {}, {"ForwardVec", 1, "WeaponAim", 1, {-0.015, 0}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {-0.03, 0}, 1}, {}, {"ForwardVec", 1, "WeaponAim", 1, {-0.0325, 0}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {-0.0475, 0}, 1}, {}, {"ForwardVec", 1, "WeaponAim", 1, {0.015, 0}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {0.03, 0}, 1}, {}, {"ForwardVec", 1, "WeaponAim", 1, {0.0325, 0}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {0.0475, 0}, 1 }}; }; }; - class GunCross - { + + class GunCross { condition = "mgun"; - class Circle - { + + class Circle { type = "line"; width = 9; - points[] = {{ "ForwardVec",1,"WeaponAim",1,{ 0,-0.05 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0,-0.015 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0,0.015 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0,0.05 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ -0.05,0 },1 },{ "ForwardVec",1,"WeaponAim",1,{ -0.015,0 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0.015,0 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0.05,0 },1 },{ }}; + points[] = {{"ForwardVec", 1, "WeaponAim", 1, {0, -0.05}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {0, -0.015}, 1}, {}, {"ForwardVec", 1, "WeaponAim", 1, {0, 0.015}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {0, 0.05}, 1}, {}, {"ForwardVec", 1, "WeaponAim", 1, {-0.05, 0}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {-0.015, 0}, 1}, {}, {"ForwardVec", 1, "WeaponAim", 1, {0.015, 0}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {0.05, 0}, 1}, { }}; }; }; - class RocketCross - { + + class RocketCross { condition = "rocket"; width = 6; - class Circle - { + + class Circle { type = "line"; width = 6; - points[] = {{ "ForwardVec",1,"WeaponAim",1,{ -0.05,-0.08 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0.05,-0.08 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ 0,-0.08 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0,0.08 },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ -0.05,0.08 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0.05,0.08 },1 },{ }}; + points[] = {{"ForwardVec", 1, "WeaponAim", 1, {-0.05, -0.08}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {0.05, -0.08}, 1}, {}, {"ForwardVec", 1, "WeaponAim", 1, {0, -0.08}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {0, 0.08}, 1}, {}, {"ForwardVec", 1, "WeaponAim", 1, {-0.05, 0.08}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {0.05, 0.08}, 1}, { }}; }; }; - class AT_Aim - { + + class AT_Aim { condition = "ATmissile"; width = 2; + class Circle { type = "line"; width = 2; - points[] = {{ "ForwardVec",1,"WeaponAim",1,{ -0.1,-0.1 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0.1,-0.1 },1 },{ "ForwardVec",1,"WeaponAim",1,{ 0.1,0.1 },1 },{ "ForwardVec",1,"WeaponAim",1,{ -0.1,0.1 },1 },{ "ForwardVec",1,"WeaponAim",1,{ -0.1,-0.1 },1 }}; + points[] = {{"ForwardVec", 1, "WeaponAim", 1, {-0.1, -0.1}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {0.1, -0.1}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {0.1, 0.1}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {-0.1, 0.1}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {-0.1, -0.1}, 1 }}; }; }; - class AA_aim - { + + class AA_aim { condition = "AAmissile"; - class Circle - { + + class Circle { type = "line"; width = 2.5; - points[] = {{ "ForwardVec",1,"WeaponAim",1,{ "0 / 4","-0.248559 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0434 / 4","-0.244781 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0855 / 4","-0.233571 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.125 / 4","-0.215252 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1607 / 4","-0.190396 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1915 / 4","-0.159774 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2165 / 4","-0.12428 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.234925 / 4","-0.0850072 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2462 / 4","-0.0431499 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.25 / 4","0 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2462 / 4","0.0431499 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.234925 / 4","0.0850072 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2165 / 4","0.12428 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1915 / 4","0.159774 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1607 / 4","0.190396 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.125 / 4","0.215252 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0855 / 4","0.233571 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0434 / 4","0.244781 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0 / 4","0.248559 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0434 / 4","0.244781 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0855 / 4","0.233571 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.125 / 4","0.215252 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1607 / 4","0.190396 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1915 / 4","0.159774 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2165 / 4","0.12428 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.234925 / 4","0.0850072 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2462 / 4","0.0431499 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.25 / 4","0 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2462 / 4","-0.0431499 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.234925 / 4","-0.0850072 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2165 / 4","-0.12428 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1915 / 4","-0.159774 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1607 / 4","-0.190396 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.125 / 4","-0.215252 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0855 / 4","-0.233571 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0434 / 4","-0.244781 / 4" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0 / 4","-0.248559 / 4" },1 },{ },{ "ForwardVec",1,"WeaponAim",1,{ "0 / 2","-0.248559 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0434 / 2","-0.244781 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0855 / 2","-0.233571 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.125 / 2","-0.215252 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1607 / 2","-0.190396 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1915 / 2","-0.159774 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2165 / 2","-0.12428 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.234925 / 2","-0.0850072 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2462 / 2","-0.0431499 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.25 / 2","0 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2462 / 2","0.0431499 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.234925 / 2","0.0850072 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.2165 / 2","0.12428 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1915 / 2","0.159774 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.1607 / 2","0.190396 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.125 / 2","0.215252 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0855 / 2","0.233571 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0.0434 / 2","0.244781 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0 / 2","0.248559 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0434 / 2","0.244781 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0855 / 2","0.233571 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.125 / 2","0.215252 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1607 / 2","0.190396 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1915 / 2","0.159774 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2165 / 2","0.12428 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.234925 / 2","0.0850072 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2462 / 2","0.0431499 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.25 / 2","0 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2462 / 2","-0.0431499 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.234925 / 2","-0.0850072 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.2165 / 2","-0.12428 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1915 / 2","-0.159774 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.1607 / 2","-0.190396 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.125 / 2","-0.215252 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0855 / 2","-0.233571 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "-0.0434 / 2","-0.244781 / 2" },1 },{ "ForwardVec",1,"WeaponAim",1,{ "0 / 2","-0.248559 / 2" },1 }}; + points[] = {{"ForwardVec", 1, "WeaponAim", 1, {"0 / 4", "-0.248559 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.0434 / 4", "-0.244781 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.0855 / 4", "-0.233571 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.125 / 4", "-0.215252 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.1607 / 4", "-0.190396 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.1915 / 4", "-0.159774 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.2165 / 4", "-0.12428 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.234925 / 4", "-0.0850072 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.2462 / 4", "-0.0431499 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.25 / 4", "0 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.2462 / 4", "0.0431499 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.234925 / 4", "0.0850072 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.2165 / 4", "0.12428 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.1915 / 4", "0.159774 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.1607 / 4", "0.190396 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.125 / 4", "0.215252 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.0855 / 4", "0.233571 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.0434 / 4", "0.244781 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0 / 4", "0.248559 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.0434 / 4", "0.244781 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.0855 / 4", "0.233571 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.125 / 4", "0.215252 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.1607 / 4", "0.190396 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.1915 / 4", "0.159774 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.2165 / 4", "0.12428 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.234925 / 4", "0.0850072 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.2462 / 4", "0.0431499 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.25 / 4", "0 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.2462 / 4", "-0.0431499 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.234925 / 4", "-0.0850072 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.2165 / 4", "-0.12428 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.1915 / 4", "-0.159774 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.1607 / 4", "-0.190396 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.125 / 4", "-0.215252 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.0855 / 4", "-0.233571 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.0434 / 4", "-0.244781 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0 / 4", "-0.248559 / 4"}, 1}, {}, {"ForwardVec", 1, "WeaponAim", 1, {"0 / 2", "-0.248559 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.0434 / 2", "-0.244781 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.0855 / 2", "-0.233571 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.125 / 2", "-0.215252 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.1607 / 2", "-0.190396 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.1915 / 2", "-0.159774 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.2165 / 2", "-0.12428 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.234925 / 2", "-0.0850072 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.2462 / 2", "-0.0431499 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.25 / 2", "0 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.2462 / 2", "0.0431499 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.234925 / 2", "0.0850072 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.2165 / 2", "0.12428 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.1915 / 2", "0.159774 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.1607 / 2", "0.190396 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.125 / 2", "0.215252 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.0855 / 2", "0.233571 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.0434 / 2", "0.244781 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0 / 2", "0.248559 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.0434 / 2", "0.244781 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.0855 / 2", "0.233571 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.125 / 2", "0.215252 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.1607 / 2", "0.190396 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.1915 / 2", "0.159774 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.2165 / 2", "0.12428 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.234925 / 2", "0.0850072 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.2462 / 2", "0.0431499 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.25 / 2", "0 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.2462 / 2", "-0.0431499 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.234925 / 2", "-0.0850072 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.2165 / 2", "-0.12428 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.1915 / 2", "-0.159774 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.1607 / 2", "-0.190396 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.125 / 2", "-0.215252 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.0855 / 2", "-0.233571 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.0434 / 2", "-0.244781 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0 / 2", "-0.248559 / 2"}, 1 }}; }; }; - class TargetACQ - { + + class TargetACQ { type = "line"; width = 2; - points[] = {{ "ForwardVec",1,"target",{ 0,-0.06 },1 },{ "ForwardVec",1,"target",{ 0,-0.055 },1 },{ },{ "ForwardVec",1,"target",{ 0,-0.05 },1 },{ "ForwardVec",1,"target",{ 0,-0.045 },1 },{ },{ "ForwardVec",1,"target",{ 0,-0.04 },1 },{ "ForwardVec",1,"target",{ 0,-0.035 },1 },{ },{ "ForwardVec",1,"target",{ 0,-0.03 },1 },{ "ForwardVec",1,"target",{ 0,-0.025 },1 },{ },{ "ForwardVec",1,"target",{ 0,-0.02 },1 },{ "ForwardVec",1,"target",{ 0,-0.015 },1 },{ },{ "ForwardVec",1,"target",{ 0,-0.01 },1 },{ "ForwardVec",1,"target",{ 0,-0.005 },1 },{ },{ "ForwardVec",1,"target",{ 0,0 },1 },{ "ForwardVec",1,"target",{ 0,0 },1 },{ },{ "ForwardVec",1,"target",{ 0,0.06 },1 },{ "ForwardVec",1,"target",{ 0,0.055 },1 },{ },{ "ForwardVec",1,"target",{ 0,0.05 },1 },{ "ForwardVec",1,"target",{ 0,0.045 },1 },{ },{ "ForwardVec",1,"target",{ 0,0.04 },1 },{ "ForwardVec",1,"target",{ 0,0.035 },1 },{ },{ "ForwardVec",1,"target",{ 0,0.03 },1 },{ "ForwardVec",1,"target",{ 0,0.025 },1 },{ },{ "ForwardVec",1,"target",{ 0,0.02 },1 },{ "ForwardVec",1,"target",{ 0,0.015 },1 },{ },{ "ForwardVec",1,"target",{ 0,0.01 },1 },{ "ForwardVec",1,"target",{ 0,0.005 },1 },{ },{ "ForwardVec",1,"target",{ -0.06,0 },1 },{ "ForwardVec",1,"target",{ -0.055,0 },1 },{ },{ "ForwardVec",1,"target",{ -0.05,0 },1 },{ "ForwardVec",1,"target",{ -0.045,0 },1 },{ },{ "ForwardVec",1,"target",{ -0.04,0 },1 },{ "ForwardVec",1,"target",{ -0.035,0 },1 },{ },{ "ForwardVec",1,"target",{ -0.03,0 },1 },{ "ForwardVec",1,"target",{ -0.025,0 },1 },{ },{ "ForwardVec",1,"target",{ -0.02,0 },1 },{ "ForwardVec",1,"target",{ -0.015,0 },1 },{ },{ "ForwardVec",1,"target",{ -0.01,0 },1 },{ "ForwardVec",1,"target",{ -0.005,0 },1 },{ },{ "ForwardVec",1,"target",{ 0.06,0 },1 },{ "ForwardVec",1,"target",{ 0.055,0 },1 },{ },{ "ForwardVec",1,"target",{ 0.05,0 },1 },{ "ForwardVec",1,"target",{ 0.045,0 },1 },{ },{ "ForwardVec",1,"target",{ 0.04,0 },1 },{ "ForwardVec",1,"target",{ 0.035,0 },1 },{ },{ "ForwardVec",1,"target",{ 0.03,0 },1 },{ "ForwardVec",1,"target",{ 0.025,0 },1 },{ },{ "ForwardVec",1,"target",{ 0.02,0 },1 },{ "ForwardVec",1,"target",{ 0.015,0 },1 },{ },{ "ForwardVec",1,"target",{ 0.01,0 },1 },{ "ForwardVec",1,"target",{ 0.005,0 },1 },{ }}; + points[] = {{"ForwardVec", 1, "target", {0, -0.06}, 1}, {"ForwardVec", 1, "target", {0, -0.055}, 1}, {}, {"ForwardVec", 1, "target", {0, -0.05}, 1}, {"ForwardVec", 1, "target", {0, -0.045}, 1}, {}, {"ForwardVec", 1, "target", {0, -0.04}, 1}, {"ForwardVec", 1, "target", {0, -0.035}, 1}, {}, {"ForwardVec", 1, "target", {0, -0.03}, 1}, {"ForwardVec", 1, "target", {0, -0.025}, 1}, {}, {"ForwardVec", 1, "target", {0, -0.02}, 1}, {"ForwardVec", 1, "target", {0, -0.015}, 1}, {}, {"ForwardVec", 1, "target", {0, -0.01}, 1}, {"ForwardVec", 1, "target", {0, -0.005}, 1}, {}, {"ForwardVec", 1, "target", {0, 0}, 1}, {"ForwardVec", 1, "target", {0, 0}, 1}, {}, {"ForwardVec", 1, "target", {0, 0.06}, 1}, {"ForwardVec", 1, "target", {0, 0.055}, 1}, {}, {"ForwardVec", 1, "target", {0, 0.05}, 1}, {"ForwardVec", 1, "target", {0, 0.045}, 1}, {}, {"ForwardVec", 1, "target", {0, 0.04}, 1}, {"ForwardVec", 1, "target", {0, 0.035}, 1}, {}, {"ForwardVec", 1, "target", {0, 0.03}, 1}, {"ForwardVec", 1, "target", {0, 0.025}, 1}, {}, {"ForwardVec", 1, "target", {0, 0.02}, 1}, {"ForwardVec", 1, "target", {0, 0.015}, 1}, {}, {"ForwardVec", 1, "target", {0, 0.01}, 1}, {"ForwardVec", 1, "target", {0, 0.005}, 1}, {}, {"ForwardVec", 1, "target", {-0.06, 0}, 1}, {"ForwardVec", 1, "target", {-0.055, 0}, 1}, {}, {"ForwardVec", 1, "target", {-0.05, 0}, 1}, {"ForwardVec", 1, "target", {-0.045, 0}, 1}, {}, {"ForwardVec", 1, "target", {-0.04, 0}, 1}, {"ForwardVec", 1, "target", {-0.035, 0}, 1}, {}, {"ForwardVec", 1, "target", {-0.03, 0}, 1}, {"ForwardVec", 1, "target", {-0.025, 0}, 1}, {}, {"ForwardVec", 1, "target", {-0.02, 0}, 1}, {"ForwardVec", 1, "target", {-0.015, 0}, 1}, {}, {"ForwardVec", 1, "target", {-0.01, 0}, 1}, {"ForwardVec", 1, "target", {-0.005, 0}, 1}, {}, {"ForwardVec", 1, "target", {0.06, 0}, 1}, {"ForwardVec", 1, "target", {0.055, 0}, 1}, {}, {"ForwardVec", 1, "target", {0.05, 0}, 1}, {"ForwardVec", 1, "target", {0.045, 0}, 1}, {}, {"ForwardVec", 1, "target", {0.04, 0}, 1}, {"ForwardVec", 1, "target", {0.035, 0}, 1}, {}, {"ForwardVec", 1, "target", {0.03, 0}, 1}, {"ForwardVec", 1, "target", {0.025, 0}, 1}, {}, {"ForwardVec", 1, "target", {0.02, 0}, 1}, {"ForwardVec", 1, "target", {0.015, 0}, 1}, {}, {"ForwardVec", 1, "target", {0.01, 0}, 1}, {"ForwardVec", 1, "target", {0.005, 0}, 1}, { }}; }; - class RadarTargets - { + + class RadarTargets { type = "radar"; - pos0[] = {0.5,0.5}; - pos10[] = {0.753,0.753}; + pos0[] = {0.5, 0.5}; + pos10[] = {0.753, 0.753}; width = 2.5; - points[] = {{ "ForwardVec",1,"RadarContact",{ -0.01,-0.01 },1 },{ "ForwardVec",1,"RadarContact",{ 0.01,-0.01 },1 },{ "ForwardVec",1,"RadarContact",{ 0.01,0.01 },1 },{ "ForwardVec",1,"RadarContact",{ -0.01,0.01 },1 },{ "ForwardVec",1,"RadarContact",{ -0.01,-0.01 },1 }}; + points[] = {{"ForwardVec", 1, "RadarContact", {-0.01, -0.01}, 1}, {"ForwardVec", 1, "RadarContact", {0.01, -0.01}, 1}, {"ForwardVec", 1, "RadarContact", {0.01, 0.01}, 1}, {"ForwardVec", 1, "RadarContact", {-0.01, 0.01}, 1}, {"ForwardVec", 1, "RadarContact", {-0.01, -0.01}, 1 }}; }; }; helmetMountedDisplay = 1; - helmetPosition[] = {-0.035,0.035,0.1}; - helmetRight[] = {0.07,0,0}; - helmetDown[] = {0,-0.07,0}; + helmetPosition[] = {-0.035, 0.035, 0.1}; + helmetRight[] = {0.07, 0, 0}; + helmetDown[] = {0, -0.07, 0}; }; }; class Turrets: Turrets { class MainTurret: MainTurret { - weapons[] = {"ACE_gatling_20mm_Comanche","missiles_DAGR","missiles_ASRAAM", "ACE_AIR_SAFETY"}; - magazines[] = {"ACE_500Rnd_20mm_shells_Comanche","4Rnd_AAA_missiles","24Rnd_PG_missiles"}; - + weapons[] = {"ACE_gatling_20mm_Comanche", "missiles_DAGR", "missiles_ASRAAM", "ACE_AIR_SAFETY"}; + magazines[] = {"ACE_500Rnd_20mm_shells_Comanche", "4Rnd_AAA_missiles", "24Rnd_PG_missiles"}; outGunnerMayFire = 1; commanding = -1; primaryGunner = 1; @@ -874,7 +868,7 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { gunnerForceOptics = 0; turretInfoType = "Rsc_ACE_Helo_UI_Turret"; showAllTargets = 2; - discretedistance[] = {100,200,300,400,500,600,700,800,900,1000,1100,1200,1300,1400,1500,1600,1700,1800,1900,2000,2100,2200,2300,2400,2500,2600,2700,2800,2900,3000}; + discretedistance[] = {100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000}; discretedistanceinitindex = 3; copilotHasFlares = 1; directionStabilized = 1; @@ -889,8 +883,7 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { maxTurn = 120; initTurn = 0; - class OpticsIn - { + class OpticsIn { delete Narrow; delete Medium; delete Wide; @@ -906,13 +899,14 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { initFov = 0.466; minFov = 0.466; maxFov = 0.466; - visionMode[] = {"Normal","Ti"}; - thermalMode[] = {0,1}; - gunnerOpticsColor[] = {0,0,0,1}; + visionMode[] = {"Normal", "Ti"}; + thermalMode[] = {0, 1}; + gunnerOpticsColor[] = {0, 0, 0, 1}; directionStabilized = 0; horizontallyStabilized = 1; gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_wide_F"; }; + class ACE_Wide: ACE_WideUnstabilized { opticsDisplayName = "W"; initAngleX = 0; @@ -924,50 +918,51 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { initFov = 0.466; minFov = 0.466; maxFov = 0.466; - visionMode[] = {"Normal","Ti"}; - thermalMode[] = {0,1}; - gunnerOpticsColor[] = {0,0,0,1}; + visionMode[] = {"Normal", "Ti"}; + thermalMode[] = {0, 1}; + gunnerOpticsColor[] = {0, 0, 0, 1}; directionStabilized = 1; horizontallyStabilized = 1; gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_wide_F"; }; + class ACE_Medium: ACE_Wide { opticsDisplayName = "M"; initFov = 0.093; minFov = 0.093; maxFov = 0.093; - gunnerOpticsColor[] = {0,0,0,1}; + gunnerOpticsColor[] = {0, 0, 0, 1}; directionStabilized = 1; horizontallyStabilized = 1; gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_medium_F"; }; + class ACE_Narrow: ACE_Wide { opticsDisplayName = "N"; initFov = 0.029; minFov = 0.029; maxFov = 0.029; - gunnerOpticsColor[] = {0,0,0,1}; + gunnerOpticsColor[] = {0, 0, 0, 1}; directionStabilized = 1; horizontallyStabilized = 1; gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_narrow_F"; - }; + class ACE_Narrower: ACE_Wide { opticsDisplayName = "Z"; initFov = 0.01; minFov = 0.01; maxFov = 0.01; - gunnerOpticsColor[] = {0,0,0,1}; + gunnerOpticsColor[] = {0, 0, 0, 1}; directionStabilized = 1; horizontallyStabilized = 1; gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_narrow_F"; }; }; - class OpticsOut - { - class Monocular - { + + class OpticsOut { + class Monocular { initAngleX = 0; minAngleX = -30; maxAngleX = 30; @@ -990,6 +985,7 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { class Gatling { weapon = "ACE_gatling_20mm_Comanche"; }; + class Muzzle_flash { weapon = "ACE_gatling_20mm_Comanche"; }; diff --git a/addons/aircraft/RscInGameUI.hpp b/addons/aircraft/RscInGameUI.hpp index d3ef60c6b6..67116a7b62 100644 --- a/addons/aircraft/RscInGameUI.hpp +++ b/addons/aircraft/RscInGameUI.hpp @@ -10,572 +10,568 @@ class HScrollbar; class RscLadderPicture; class RscControlsGroupNoScrollbars; - -class RscInGameUI -{ +class RscInGameUI { class RscUnitInfo; - class Rsc_ACE_Helo_UI_Turret: RscUnitInfo - { + class Rsc_ACE_Helo_UI_Turret: RscUnitInfo { idd = 300; - controls[] = {"CA_IGUI_elements_group","CA_VehicleToggles"}; + controls[] = {"CA_IGUI_elements_group", "CA_VehicleToggles"}; + class VScrollbar; class HScrollbar; - class CA_IGUI_elements_group: RscControlsGroup - { + class CA_IGUI_elements_group: RscControlsGroup { idc = 170; - class VScrollbar: VScrollbar - { + + class VScrollbar: VScrollbar { width = 0; }; - class HScrollbar: HScrollbar - { + + class HScrollbar: HScrollbar { height = 0; }; - x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))"; - y = "0 * (0.025 * SafezoneH) + (SafezoneY)"; - w = "53.5 * (0.01875 * SafezoneH)"; - h = "40 * (0.025 * SafezoneH)"; - class controls - { - class CA_Distance: RscText - { + + x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))"; + y = "0 * (0.025 * SafezoneH) + (SafezoneY)"; + w = "53.5 * (0.01875 * SafezoneH)"; + h = "40 * (0.025 * SafezoneH)"; + + class controls { + class CA_Distance: RscText { idc = 151; style = 2; - sizeEx = "0.0295*SafezoneH"; + sizeEx = "0.0295 * SafezoneH"; shadow = 0; font = "EtelkaMonospacePro"; - x = "24.78 * (0.01875 * SafezoneH)"; - y = "30.88 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; + x = "24.78 * (0.01875 * SafezoneH)"; + y = "30.88 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; }; - class CA_Speed: RangeText - { + + class CA_Speed: RangeText { idc = 188; style = 2; - sizeEx = "0.0295*SafezoneH"; + sizeEx = "0.0295 * SafezoneH"; shadow = 0; font = "EtelkaMonospacePro"; text = "120"; - x = "14.78 * (0.01875 * SafezoneH)"; - y = "30.88 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; + x = "14.78 * (0.01875 * SafezoneH)"; + y = "30.88 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; }; - class CA_Alt: RangeText - { + + class CA_Alt: RangeText { idc = 189; style = 2; - sizeEx = "0.0295*SafezoneH"; + sizeEx = "0.0295 * SafezoneH"; shadow = 0; font = "EtelkaMonospacePro"; text = "3825"; - x = "34.78 * (0.01875 * SafezoneH)"; - y = "30.88 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; + x = "34.78 * (0.01875 * SafezoneH)"; + y = "30.88 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; }; - class CA_VisionMode: RscText - { + + class CA_VisionMode: RscText { idc = 152; style = 0; - sizeEx = "0.0295*SafezoneH"; + sizeEx = "0.0295 * SafezoneH"; shadow = 0; font = "EtelkaMonospacePro"; text = "VIS"; - x = "12.58 * (0.01875 * SafezoneH)"; - y = "8 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; + x = "12.58 * (0.01875 * SafezoneH)"; + y = "8 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; }; - class CA_FlirMode: RscText - { + + class CA_FlirMode: RscText { idc = 153; style = 0; - sizeEx = "0.0295*SafezoneH"; + sizeEx = "0.0295 * SafezoneH"; shadow = 0; font = "EtelkaMonospacePro"; text = "BHOT"; - x = "15.78 * (0.01875 * SafezoneH)"; - y = "8 * (0.025 * SafezoneH)"; - w = "4.5 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; + x = "15.78 * (0.01875 * SafezoneH)"; + y = "8 * (0.025 * SafezoneH)"; + w = "4.5 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; }; - class ValueGrid: RangeText - { + + class ValueGrid: RangeText { idc = 172; font = "EtelkaMonospacePro"; style = 2; - sizeEx = "0.0295*SafezoneH"; + sizeEx = "0.0295 * SafezoneH"; shadow = 0; - x = "12.20 * (0.01875 * SafezoneH)"; - y = "3.5 * (0.025 * SafezoneH)"; - w = "6 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; + x = "12.20 * (0.01875 * SafezoneH)"; + y = "3.5 * (0.025 * SafezoneH)"; + w = "6 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; }; - class TextTADS: RangeText - { + + class TextTADS: RangeText { idc = 1010; text = "TADS"; font = "EtelkaMonospacePro"; style = 2; shadow = 0; - x = "12.30 * (0.01875 * SafezoneH)"; - y = "5 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; + x = "12.30 * (0.01875 * SafezoneH)"; + y = "5 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; }; - class ValueTime: RangeText - { + + class ValueTime: RangeText { idc = 190; text = "20:28:35"; font = "EtelkaMonospacePro"; style = 2; - sizeEx = "0.0295*SafezoneH"; + sizeEx = "0.0295 * SafezoneH"; shadow = 0; - x = "12.1 * (0.01875 * SafezoneH)"; - y = "6.5 * (0.025 * SafezoneH)"; - w = "6 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; + x = "12.1 * (0.01875 * SafezoneH)"; + y = "6.5 * (0.025 * SafezoneH)"; + w = "6 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; }; - class CA_Laser: RscText - { + + class CA_Laser: RscText { idc = 158; style = "0x30 + 0x800"; - sizeEx = "0.038*SafezoneH"; + sizeEx = "0.038 * SafezoneH"; shadow = 0; font = "EtelkaMonospacePro"; text = QPATHTOF(data\Helo_LaserON.paa); - x = "20.45 * (0.01875 * SafezoneH)"; - y = "14.1 * (0.025 * SafezoneH)"; - w = "12.5 * (0.01875 * SafezoneH)"; - h = "12 * (0.025 * SafezoneH)"; + x = "20.45 * (0.01875 * SafezoneH)"; + y = "14.1 * (0.025 * SafezoneH)"; + w = "12.5 * (0.01875 * SafezoneH)"; + h = "12 * (0.025 * SafezoneH)"; }; - class CA_Heading: RscText - { + + class CA_Heading: RscText { idc = 156; style = 0; - sizeEx = "0.038*SafezoneH"; + sizeEx = "0.038 * SafezoneH"; shadow = 0; font = "EtelkaMonospacePro"; text = "023"; - x = "24.83 * (0.01875 * SafezoneH)"; - y = "6 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; + x = "24.83 * (0.01875 * SafezoneH)"; + y = "6 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; }; }; }; }; - class Rsc_ACE_Helo_UI_01: RscUnitInfo - { - controls[] = {"WeaponInfoControlsGroupRight","CA_TextFlaresMode","CA_TextFlares","CA_VehicleToggles","CA_Radar"}; + + class Rsc_ACE_Helo_UI_01: RscUnitInfo { + controls[] = {"WeaponInfoControlsGroupRight", "CA_TextFlaresMode", "CA_TextFlares", "CA_VehicleToggles", "CA_Radar"}; }; - class Rsc_ACE_Helo_UI_02: RscUnitInfo - { - controls[] = {"CA_TextFlaresMode","CA_TextFlares","CA_VehicleToggles","CA_Radar"}; + + class Rsc_ACE_Helo_UI_02: RscUnitInfo { + controls[] = {"CA_TextFlaresMode", "CA_TextFlares", "CA_VehicleToggles", "CA_Radar"}; }; - class Rsc_ACE_Drones_UI_Turret: RscUnitInfo - { + + class Rsc_ACE_Drones_UI_Turret: RscUnitInfo { idd = 300; - controls[] = {"CA_Zeroing","CA_IGUI_elements_group","CA_VehicleToggles"}; - class CA_IGUI_elements_group: RscControlsGroup - { + controls[] = {"CA_Zeroing", "CA_IGUI_elements_group", "CA_VehicleToggles"}; + + class CA_IGUI_elements_group: RscControlsGroup { idc = 170; - class VScrollbar: VScrollbar - { + + class VScrollbar: VScrollbar { width = 0; }; - class HScrollbar: HScrollbar - { + + class HScrollbar: HScrollbar { height = 0; }; - x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))"; - y = "0 * (0.025 * SafezoneH) + (SafezoneY)"; - w = "53.5 * (0.01875 * SafezoneH)"; - h = "40 * (0.025 * SafezoneH)"; - class controls - { - class CA_Distance: RscText - { + + x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))"; + y = "0 * (0.025 * SafezoneH) + (SafezoneY)"; + w = "53.5 * (0.01875 * SafezoneH)"; + h = "40 * (0.025 * SafezoneH)"; + + class controls { + class CA_Distance: RscText { idc = 151; style = 2; - sizeEx = "0.0295*SafezoneH"; + sizeEx = "0.0295 * SafezoneH"; shadow = 0; font = "EtelkaMonospacePro"; - x = "24.78 * (0.01875 * SafezoneH)"; - y = "30.88 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; + x = "24.78 * (0.01875 * SafezoneH)"; + y = "30.88 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; }; - class CA_Speed: RangeText - { + + class CA_Speed: RangeText { idc = 188; style = 2; - sizeEx = "0.0295*SafezoneH"; + sizeEx = "0.0295 * SafezoneH"; shadow = 0; font = "EtelkaMonospacePro"; text = "120"; - x = "14.78 * (0.01875 * SafezoneH)"; - y = "30.88 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; + x = "14.78 * (0.01875 * SafezoneH)"; + y = "30.88 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; }; - class CA_Alt: RangeText - { + + class CA_Alt: RangeText { idc = 189; style = 2; - sizeEx = "0.0295*SafezoneH"; + sizeEx = "0.0295 * SafezoneH"; shadow = 0; font = "EtelkaMonospacePro"; text = "3825"; - x = "34.78 * (0.01875 * SafezoneH)"; - y = "30.88 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; + x = "34.78 * (0.01875 * SafezoneH)"; + y = "30.88 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; }; - class ValueTime: RangeText - { + + class ValueTime: RangeText { idc = 190; text = "20:28:35"; font = "EtelkaMonospacePro"; style = 2; - sizeEx = "0.0295*SafezoneH"; + sizeEx = "0.0295 * SafezoneH"; shadow = 0; - x = "1.75 * (0.01875 * SafezoneH)"; - y = "10.5 * (0.025 * SafezoneH)"; - w = "6 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; + x = "1.75 * (0.01875 * SafezoneH)"; + y = "10.5 * (0.025 * SafezoneH)"; + w = "6 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; }; - class CA_VisionMode: RscText - { + + class CA_VisionMode: RscText { idc = 152; style = 0; - sizeEx = "0.0295*SafezoneH"; + sizeEx = "0.0295 * SafezoneH"; shadow = 0; font = "EtelkaMonospacePro"; text = "VIS"; align = "right"; - x = "2.6 * (0.01875 * SafezoneH)"; - y = "12.0 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "1.0 * (0.025 * SafezoneH)"; + x = "2.6 * (0.01875 * SafezoneH)"; + y = "12.0 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.0 * (0.025 * SafezoneH)"; }; - class CA_FlirMode: RscText - { + + class CA_FlirMode: RscText { idc = 153; style = 0; - sizeEx = "0.0295*SafezoneH"; + sizeEx = "0.0295 * SafezoneH"; shadow = 0; font = "EtelkaMonospacePro"; text = "BHOT"; align = "right"; - x = "6.18 * (0.01875 * SafezoneH)"; - y = "12.0 * (0.025 * SafezoneH)"; - w = "4.5 * (0.01875 * SafezoneH)"; - h = "1.0 * (0.025 * SafezoneH)"; + x = "6.18 * (0.01875 * SafezoneH)"; + y = "12.0 * (0.025 * SafezoneH)"; + w = "4.5 * (0.01875 * SafezoneH)"; + h = "1.0 * (0.025 * SafezoneH)"; }; - class TgT_Grid_text: RangeText - { + + class TgT_Grid_text: RangeText { idc = 1005; text = "TGT:"; font = "EtelkaMonospacePro"; style = 2; - sizeEx = "0.0295*SafezoneH"; + sizeEx = "0.0295 * SafezoneH"; shadow = 0; - x = "1.20 * (0.01875 * SafezoneH)"; - y = "13.5 * (0.025 * SafezoneH)"; - w = "6 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; + x = "1.20 * (0.01875 * SafezoneH)"; + y = "13.5 * (0.025 * SafezoneH)"; + w = "6 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; }; - class TGT_ValueGrid: RangeText - { + + class TGT_ValueGrid: RangeText { idc = 172; font = "EtelkaMonospacePro"; - colorText[] = {0.706,0.0745,0.0196,0.8}; + colorText[] = {0.706, 0.0745, 0.0196, 0.8}; style = 2; sizeEx = "0.0295*SafezoneH"; shadow = 0; - x = "5.20 * (0.01875 * SafezoneH)"; - y = "13.5 * (0.025 * SafezoneH)"; - w = "6 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; + x = "5.20 * (0.01875 * SafezoneH)"; + y = "13.5 * (0.025 * SafezoneH)"; + w = "6 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; }; - class OWN_Grid_text: RangeText - { + + class OWN_Grid_text: RangeText { idc = 1005; text = "OWN:"; font = "EtelkaMonospacePro"; style = 2; - sizeEx = "0.0295*SafezoneH"; + sizeEx = "0.0295 * SafezoneH"; shadow = 0; - x = "1.20 * (0.01875 * SafezoneH)"; - y = "15 * (0.025 * SafezoneH)"; - w = "6 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; + x = "1.20 * (0.01875 * SafezoneH)"; + y = "15 * (0.025 * SafezoneH)"; + w = "6 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; }; - class OWN_ValueGrid: RangeText - { + + class OWN_ValueGrid: RangeText { idc = 171; font = "EtelkaMonospacePro"; - colorText[] = {0.15,1,0.15,0.8}; + colorText[] = {0.15, 1, 0.15, 0.8}; style = 2; - sizeEx = "0.0295*SafezoneH"; + sizeEx = "0.0295 * SafezoneH"; shadow = 0; - x = "5.20 * (0.01875 * SafezoneH)"; - y = "15 * (0.025 * SafezoneH)"; - w = "6 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; + x = "5.20 * (0.01875 * SafezoneH)"; + y = "15 * (0.025 * SafezoneH)"; + w = "6 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; }; - class CA_Laser: RscText - { + + class CA_Laser: RscText { idc = 158; style = "0x30 + 0x800"; - sizeEx = "0.038*SafezoneH"; + sizeEx = "0.038 * SafezoneH"; shadow = 0; align = "right"; font = "EtelkaMonospacePro"; text = QPATHTOF(data\Helo_LaserON.paa); - x = "20.45 * (0.01875 * SafezoneH)"; - y = "14.1 * (0.025 * SafezoneH)"; - w = "12.5 * (0.01875 * SafezoneH)"; - h = "12 * (0.025 * SafezoneH)"; + x = "20.45 * (0.01875 * SafezoneH)"; + y = "14.1 * (0.025 * SafezoneH)"; + w = "12.5 * (0.01875 * SafezoneH)"; + h = "12 * (0.025 * SafezoneH)"; }; - class CA_Heading: RscText - { + + class CA_Heading: RscText { idc = 156; style = 0; - sizeEx = "0.038*SafezoneH"; + sizeEx = "0.038 * SafezoneH"; shadow = 0; font = "EtelkaMonospacePro"; text = "023"; align = "right"; - x = "25 * (0.01875 * SafezoneH)"; - y = "5 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; + x = "25 * (0.01875 * SafezoneH)"; + y = "5 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; }; }; }; }; - class Rsc_ACE_Drones_UI_Pilots: RscUnitInfo - { + + class Rsc_ACE_Drones_UI_Pilots: RscUnitInfo { idd = 300; - controls[] = {"WeaponInfoControlsGroupRight","CA_BackgroundVehicle","CA_BackgroundVehicleTitle","CA_BackgroundVehicleTitleDark","CA_BackgroundFuel","CA_Vehicle","CA_VehicleRole","CA_HitZones","CA_SpeedBackground","CA_SpeedUnits","CA_Speed","CA_ValueFuel","CA_AltBackground","CA_AltUnits","CA_Alt","CA_VehicleToggles","CA_Radar","DriverOpticsGroup"}; - class DriverOpticsGroup: RscControlsGroup - { + controls[] = {"WeaponInfoControlsGroupRight", "CA_BackgroundVehicle", "CA_BackgroundVehicleTitle", "CA_BackgroundVehicleTitleDark", "CA_BackgroundFuel", "CA_Vehicle", "CA_VehicleRole", "CA_HitZones", "CA_SpeedBackground", "CA_SpeedUnits", "CA_Speed", "CA_ValueFuel", "CA_AltBackground", "CA_AltUnits", "CA_Alt", "CA_VehicleToggles", "CA_Radar", "DriverOpticsGroup"}; + + class DriverOpticsGroup: RscControlsGroup { idc = 392; - class VScrollbar: VScrollbar - { + + class VScrollbar: VScrollbar { width = 0; }; - class HScrollbar: HScrollbar - { + + class HScrollbar: HScrollbar { height = 0; }; - x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))"; - y = "0 * (0.025 * SafezoneH) + (SafezoneY)"; - w = "53.5 * (0.01875 * SafezoneH)"; - h = "40 * (0.025 * SafezoneH)"; - class controls - { - class TextGrid: RscText - { + x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))"; + y = "0 * (0.025 * SafezoneH) + (SafezoneY)"; + w = "53.5 * (0.01875 * SafezoneH)"; + h = "40 * (0.025 * SafezoneH)"; + + class controls { + class TextGrid: RscText { style = 0; - sizeEx = "0.02*SafezoneH"; + sizeEx = "0.02 * SafezoneH"; shadow = 0; font = "EtelkaMonospacePro"; idc = 1005; text = "GRID:"; - x = "5.8 * (0.01875 * SafezoneH)"; - y = "31.8 * (0.025 * SafezoneH)"; - w = "5 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; + x = "5.8 * (0.01875 * SafezoneH)"; + y = "31.8 * (0.025 * SafezoneH)"; + w = "5 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; }; - class ValueGrid: TextGrid - { + + class ValueGrid: TextGrid { idc = 189; text = "382546"; - x = "10.3 * (0.01875 * SafezoneH)"; - y = "31.8 * (0.025 * SafezoneH)"; - w = "6 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; + x = "10.3 * (0.01875 * SafezoneH)"; + y = "31.8 * (0.025 * SafezoneH)"; + w = "6 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; }; - class TextTime: TextGrid - { + + class TextTime: TextGrid { idc = 1010; text = "TIME [UTC]:"; - x = "5.8 * (0.01875 * SafezoneH)"; - y = "32.6 * (0.025 * SafezoneH)"; - w = "5 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; + x = "5.8 * (0.01875 * SafezoneH)"; + y = "32.6 * (0.025 * SafezoneH)"; + w = "5 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; }; - class ValueTime: TextGrid - { + + class ValueTime: TextGrid { idc = 101; text = "20:28:35"; - x = "10 * (0.01875 * SafezoneH)"; - y = "32.6 * (0.025 * SafezoneH)"; - w = "6 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; + x = "10 * (0.01875 * SafezoneH)"; + y = "32.6 * (0.025 * SafezoneH)"; + w = "6 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; }; - class TextMag: TextGrid - { + + class TextMag: TextGrid { idc = 1011; text = "CAM MAG:"; - x = "5.8 * (0.01875 * SafezoneH)"; - y = "7 * (0.025 * SafezoneH)"; - w = "5 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; + x = "5.8 * (0.01875 * SafezoneH)"; + y = "7 * (0.025 * SafezoneH)"; + w = "5 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; }; - class OpticsZoom: TextGrid - { + + class OpticsZoom: TextGrid { idc = 192; text = "28x"; - x = "10.3 * (0.01875 * SafezoneH)"; - y = "7 * (0.025 * SafezoneH)"; - w = "6 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; + x = "10.3 * (0.01875 * SafezoneH)"; + y = "7 * (0.025 * SafezoneH)"; + w = "6 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; }; - class BorderLineSpdTop: RscPicture - { + + class BorderLineSpdTop: RscPicture { idc = 1203; text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\border_line_ca.paa"; - x = "3.343 * (0.01875 * SafezoneH)"; - y = "12.4 * (0.025 * SafezoneH)"; - w = "3 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; + x = "3.343 * (0.01875 * SafezoneH)"; + y = "12.4 * (0.025 * SafezoneH)"; + w = "3 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; }; - class BorderLineSpdBottom: RscPicture - { + + class BorderLineSpdBottom: RscPicture { idc = 1207; text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\border_line_ca.paa"; - x = "3.343 * (0.01875 * SafezoneH)"; - y = "26.5 * (0.025 * SafezoneH)"; - w = "3 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; + x = "3.343 * (0.01875 * SafezoneH)"; + y = "26.5 * (0.025 * SafezoneH)"; + w = "3 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; }; - class BorderLineAltTop: RscPicture - { + + class BorderLineAltTop: RscPicture { idc = 1205; text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\border_line_ca.paa"; - x = "47.16 * (0.01875 * SafezoneH)"; - y = "12.4 * (0.025 * SafezoneH)"; - w = "3 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; + x = "47.16 * (0.01875 * SafezoneH)"; + y = "12.4 * (0.025 * SafezoneH)"; + w = "3 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; }; - class BorderLineAltBottom: RscPicture - { + + class BorderLineAltBottom: RscPicture { idc = 1206; text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\border_line_ca.paa"; - x = "47.16 * (0.01875 * SafezoneH)"; - y = "26.5 * (0.025 * SafezoneH)"; - w = "3 * (0.01875 * SafezoneH)"; - h = "1 * (0.025 * SafezoneH)"; + x = "47.16 * (0.01875 * SafezoneH)"; + y = "26.5 * (0.025 * SafezoneH)"; + w = "3 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; }; - class TextSpd: TextGrid - { + + class TextSpd: TextGrid { idc = 1004; text = "SPD"; - x = "4.8 * (0.01875 * SafezoneH)"; - y = "11.8 * (0.025 * SafezoneH)"; - w = "5 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; + x = "4.8 * (0.01875 * SafezoneH)"; + y = "11.8 * (0.025 * SafezoneH)"; + w = "5 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; }; - class SpeedValueBorder: RscPicture - { + + class SpeedValueBorder: RscPicture { idc = 1200; text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\altimeter_value_ca.paa"; - x = "6.3 * (0.01875 * SafezoneH)"; - y = "19 * (0.025 * SafezoneH)"; - w = "5 * (0.01875 * SafezoneH)"; - h = "2 * (0.025 * SafezoneH)"; + x = "6.3 * (0.01875 * SafezoneH)"; + y = "19 * (0.025 * SafezoneH)"; + w = "5 * (0.01875 * SafezoneH)"; + h = "2 * (0.025 * SafezoneH)"; }; - class CA_Speed: TextGrid - { + + class CA_Speed: TextGrid { idc = 190; sizeEx = "0.03*SafezoneH"; text = "120"; - x = "7.5 * (0.01875 * SafezoneH)"; - y = "19.5 * (0.025 * SafezoneH)"; - w = "6 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; + x = "7.5 * (0.01875 * SafezoneH)"; + y = "19.5 * (0.025 * SafezoneH)"; + w = "6 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; }; - class AnalogueSpeed: RscLadderPicture - { + + class AnalogueSpeed: RscLadderPicture { idc = 384; topValue = 1312; bottomValue = -345; visibleRange = -1; text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\UAVspeedLadder_ca.paa"; - x = "1.5 * (0.01875 * SafezoneH)"; - y = "13 * (0.025 * SafezoneH)"; - w = "5 * (0.01875 * SafezoneH)"; - h = "14 * (0.025 * SafezoneH)"; + x = "1.5 * (0.01875 * SafezoneH)"; + y = "13 * (0.025 * SafezoneH)"; + w = "5 * (0.01875 * SafezoneH)"; + h = "14 * (0.025 * SafezoneH)"; }; - class TextAlt: TextGrid - { + + class TextAlt: TextGrid { idc = 1006; text = "ALT"; - x = "46.9 * (0.01875 * SafezoneH)"; - y = "11.8 * (0.025 * SafezoneH)"; - w = "5 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; + x = "46.9 * (0.01875 * SafezoneH)"; + y = "11.8 * (0.025 * SafezoneH)"; + w = "5 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; }; - class AltValueBorder: RscPicture - { + + class AltValueBorder: RscPicture { idc = 1201; text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\airspeed_value_ca.paa"; - x = "42.25 * (0.01875 * SafezoneH)"; - y = "19 * (0.025 * SafezoneH)"; - w = "5 * (0.01875 * SafezoneH)"; - h = "2 * (0.025 * SafezoneH)"; + x = "42.25 * (0.01875 * SafezoneH)"; + y = "19 * (0.025 * SafezoneH)"; + w = "5 * (0.01875 * SafezoneH)"; + h = "2 * (0.025 * SafezoneH)"; }; - class CA_Alt: TextGrid - { + + class CA_Alt: TextGrid { idc = 191; - sizeEx = "0.03*SafezoneH"; + sizeEx = "0.03 * SafezoneH"; style = 1; text = "3825"; - x = "43 * (0.01875 * SafezoneH)"; - y = "19.5 * (0.025 * SafezoneH)"; - w = "3.2 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; + x = "43 * (0.01875 * SafezoneH)"; + y = "19.5 * (0.025 * SafezoneH)"; + w = "3.2 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; }; - class AnalogueAlt: RscLadderPicture - { + + class AnalogueAlt: RscLadderPicture { idc = 385; topValue = 14430; bottomValue = -2110; visibleRange = -1; text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\UAValtLadder_ca.paa"; - x = "47 * (0.01875 * SafezoneH)"; - y = "13 * (0.025 * SafezoneH)"; - w = "2.5 * (0.01875 * SafezoneH)"; - h = "14 * (0.025 * SafezoneH)"; + x = "47 * (0.01875 * SafezoneH)"; + y = "13 * (0.025 * SafezoneH)"; + w = "2.5 * (0.01875 * SafezoneH)"; + h = "14 * (0.025 * SafezoneH)"; }; - class AnalogueHorizon: RscLadderPicture - { + + class AnalogueHorizon: RscLadderPicture { idc = 383; topValue = 90; bottomValue = -90; visibleRange = -1; text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\horizon_ladder_ca.paa"; - x = "16.75 * (0.01875 * SafezoneH)"; - y = "5 * (0.025 * SafezoneH)"; - w = "20 * (0.01875 * SafezoneH)"; - h = "30 * (0.025 * SafezoneH)"; + x = "16.75 * (0.01875 * SafezoneH)"; + y = "5 * (0.025 * SafezoneH)"; + w = "20 * (0.01875 * SafezoneH)"; + h = "30 * (0.025 * SafezoneH)"; }; - class HorizonCenter: RscPicture - { + + class HorizonCenter: RscPicture { idc = 1202; text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\horizon_aircraft_ca.paa"; - x = "24.75 * (0.01875 * SafezoneH)"; - y = "19 * (0.025 * SafezoneH)"; - w = "4 * (0.01875 * SafezoneH)"; - h = "2 * (0.025 * SafezoneH)"; + x = "24.75 * (0.01875 * SafezoneH)"; + y = "19 * (0.025 * SafezoneH)"; + w = "4 * (0.01875 * SafezoneH)"; + h = "2 * (0.025 * SafezoneH)"; }; }; }; }; -}; \ No newline at end of file +}; diff --git a/addons/aircraft/config.cpp b/addons/aircraft/config.cpp index 863797ebeb..48bf2c054e 100644 --- a/addons/aircraft/config.cpp +++ b/addons/aircraft/config.cpp @@ -8,7 +8,7 @@ class CfgPatches { requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_common"}; author = ECSTRING(common,ACETeam); - authors[] = {"KoffeinFlummi","Crusty","commy2","jaynus","Kimi"}; + authors[] = {"KoffeinFlummi", "Crusty", "commy2", "jaynus", "Kimi"}; url = ECSTRING(main,URL); VERSION_CONFIG; @@ -21,4 +21,4 @@ class CfgPatches { #include "CfgMagazines.hpp" #include "CfgVehicles.hpp" #include "CfgWeapons.hpp" -#include "RscInGameUI.hpp" \ No newline at end of file +#include "RscInGameUI.hpp" diff --git a/addons/aircraft/flightmodel_alca.hpp b/addons/aircraft/flightmodel_alca.hpp index 09785e22e7..afe74ef9fd 100644 --- a/addons/aircraft/flightmodel_alca.hpp +++ b/addons/aircraft/flightmodel_alca.hpp @@ -1,4 +1,3 @@ - acceleration = 300; maxSpeed = 936; irScanRangeMin = 500; @@ -9,16 +8,16 @@ rudderInfluence = 0.001; aileronControlsSensitivityCoef = 3; elevatorControlsSensitivity = 2; rudderControlsSensitivityoef = 4; -elevatorCoef[] = {0.6,0.73,0.62,0.52,0.39,0.33,0.28}; -aileronCoef[] = {0.5,0.68,0.75,0.86,0.92,0.96,1}; -rudderCoef[] = {0.9,0.75,0.58,0.45,0.38,0.35,0.3}; -envelope[] = {0,0.06,1.2,3,3.6,3.75,3.65,3.45,3.3,2.8,2.4,1.9,1.5}; -angleOfIndicence = 0.0523599; //determines velocity vector behaviour, how quickly it catches up with where your nose is pointing, I think -draconicForceXCoef = 7.5; //max angle of attack, lower value gives higher aoa -draconicForceYCoef = 0.2198; //Something to do with bleed off of speed, low values seem to increase bleed off +elevatorCoef[] = {0.6, 0.73, 0.62, 0.52, 0.39, 0.33, 0.28}; +aileronCoef[] = {0.5, 0.68, 0.75, 0.86, 0.92, 0.96, 1}; +rudderCoef[] = {0.9, 0.75, 0.58, 0.45, 0.38, 0.35, 0.3}; +envelope[] = {0, 0.06, 1.2, 3, 3.6, 3.75, 3.65, 3.45, 3.3, 2.8, 2.4, 1.9, 1.5}; +angleOfIndicence = 0.0523599; //determines velocity vector behaviour, how quickly it catches up with where your nose is pointing, I think +draconicForceXCoef = 7.5; //max angle of attack, lower value gives higher aoa +draconicForceYCoef = 0.2198; //Something to do with bleed off of speed, low values seem to increase bleed off draconicForceZCoef = 5.12; //???? -draconicTorqueXCoef = 0.18; //resistance to elevator input, also impacts speed degradation +draconicTorqueXCoef = 0.18; //resistance to elevator input, also impacts speed degradation draconicTorqueYCoef = 0.000017; -thrustCoef[] = {1.3,1.27,1.24,1.2,1.17,1.15,1.13,1.1,1.06,1,0.94,0.72,0.51,0.4,0.25,0}; +thrustCoef[] = {1.3, 1.27, 1.24, 1.2, 1.17, 1.15, 1.13, 1.1, 1.06, 1, 0.94, 0.72, 0.51, 0.4, 0.25, 0}; gunAimDown = 0.029; flapsFrictionCoef = 0.32; diff --git a/addons/aircraft/flightmodel_thunderbolt.hpp b/addons/aircraft/flightmodel_thunderbolt.hpp index 2446e166bc..0f99f5ef91 100644 --- a/addons/aircraft/flightmodel_thunderbolt.hpp +++ b/addons/aircraft/flightmodel_thunderbolt.hpp @@ -1,4 +1,3 @@ - maxSpeed = 736; aileronSensitivity = 0.85; elevatorSensitivity = 0.75; @@ -6,9 +5,9 @@ rudderInfluence = 0.001; aileronControlsSensitivityCoef = 3; elevatorControlsSensitivity = 2; rudderControlsSensitivityoef = 4; -elevatorCoef[] = {0.7,0.75,0.75,0.65,0.55,0.45,0.35}; -aileronCoef[] = {0.6,0.85,0.88,0.92,0.95,0.97,1}; -rudderCoef[] = {0.8,0.75,0.65,0.5,0.4,0.33,0.3}; +elevatorCoef[] = {0.7, 0.75, 0.75, 0.65, 0.55, 0.45, 0.35}; +aileronCoef[] = {0.6, 0.85, 0.88, 0.92, 0.95, 0.97, 1}; +rudderCoef[] = {0.8, 0.75, 0.65, 0.5, 0.4, 0.33, 0.3}; flapsFrictionCoef = 0.35; angleOfIndicence = 0.0523599; draconicForceXCoef = 9.5; @@ -16,7 +15,7 @@ draconicForceYCoef = 0.56; draconicForceZCoef = 0.1; draconicTorqueXCoef = 0.58; draconicTorqueYCoef = 0.00013; -envelope[] = {0,0,0.75,2.4,3.6,3.8,3.7,3.2,2.2,1.7,0.9}; -thrustCoef[] = {1,1.2,1.3,1.25,1.06,1.01,1,0.92,0.75,0.65,0.5,0.25,0}; +envelope[] = {0, 0, 0.75, 2.4, 3.6, 3.8, 3.7, 3.2, 2.2, 1.7, 0.9}; +thrustCoef[] = {1, 1.2, 1.3, 1.25, 1.06, 1.01, 1, 0.92, 0.75, 0.65, 0.5, 0.25, 0}; acceleration = 265; landingSpeed = 220; diff --git a/addons/aircraft/flightmodel_yak.hpp b/addons/aircraft/flightmodel_yak.hpp index bcf5a4cfd0..9ba4c40c76 100644 --- a/addons/aircraft/flightmodel_yak.hpp +++ b/addons/aircraft/flightmodel_yak.hpp @@ -1,4 +1,3 @@ - maxSpeed = 1059; acceleration = 300; aileronSensitivity = 0.635; @@ -7,15 +6,15 @@ rudderInfluence = 0.001; aileronControlsSensitivityCoef = 3; elevatorControlsSensitivity = 2; rudderControlsSensitivityoef = 4; -elevatorCoef[] = {0.6,0.76,0.7,0.65,0.58,0.47,0.43}; -aileronCoef[] = {0.5,0.85,0.87,0.89,0.92,0.95,1}; -rudderCoef[] = {0.8,0.7,0.6,0.5,0.4,0.32,0.27}; +elevatorCoef[] = {0.6, 0.76, 0.7, 0.65, 0.58, 0.47, 0.43}; +aileronCoef[] = {0.5, 0.85, 0.87, 0.89, 0.92, 0.95, 1}; +rudderCoef[] = {0.8, 0.7, 0.6, 0.5, 0.4, 0.32, 0.27}; angleOfIndicence = 0.0523599; draconicForceXCoef = 7.6; draconicForceYCoef = 0.75; draconicForceZCoef = 0.085; draconicTorqueXCoef = 0.815; draconicTorqueYCoef = 0.000152; -envelope[] = {0,0.446,1.5,3.9,5.2,4.8,4.2,3.5,2,1,0.5}; -thrustCoef[] = {1,1.2,1.7,1.7,1.65,1.54,1.32,1.1,0.95,0.75,0.5,0.35,0}; +envelope[] = {0, 0.446, 1.5, 3.9, 5.2, 4.8, 4.2, 3.5, 2, 1, 0.5}; +thrustCoef[] = {1, 1.2, 1.7, 1.7, 1.65, 1.54, 1.32, 1.1, 0.95, 0.75, 0.5, 0.35, 0}; flapsFrictionCoef = 0.32; diff --git a/addons/atragmx/XEH_PREP.hpp b/addons/atragmx/XEH_PREP.hpp index 6121619a58..c77b7e0655 100644 --- a/addons/atragmx/XEH_PREP.hpp +++ b/addons/atragmx/XEH_PREP.hpp @@ -24,6 +24,7 @@ PREP(cycle_target_speed_direction); PREP(delete_gun); PREP(evaluate_option_menu_input); PREP(init); +PREP(initGunList); PREP(insert_c1_ballistic_coefficient_data); PREP(insert_muzzle_velocity_data); PREP(parse_input); diff --git a/addons/atragmx/XEH_postInit.sqf b/addons/atragmx/XEH_postInit.sqf index 4fe5bc86f3..9034016212 100644 --- a/addons/atragmx/XEH_postInit.sqf +++ b/addons/atragmx/XEH_postInit.sqf @@ -2,62 +2,7 @@ #include "initKeybinds.sqf" -if ((profileNamespace getVariable ["ACE_ATragMX_profileNamespaceVersion", 0]) == ATRAGMX_PROFILE_NAMESPACE_VERSION && count (profileNamespace getVariable ["ACE_ATragMX_gunList", []]) > 0) then { - GVAR(gunList) = profileNamespace getVariable "ACE_ATragMX_gunList"; -} else { - // Profile Name, Muzzle Velocity, Zero Range, Scope Base Angle, AirFriction, Bore Height, Scope Unit, Scope Click Unit, Scope Click Number, Maximum Elevation, Dialed Elevation, Dialed Windage, Mass, Bullet Diameter, Rifle Twist, BC, Drag Model, Atmosphere Model, Muzzle Velocity vs. Temperature Interpolation, C1 Ballistic Coefficient vs. Distance Interpolation, Persistent - GVAR(gunList) = [["12.7x108mm" , 812, 100, 0.0666557, -0.00063800, 3.81, 0, 2, 10, 120, 0, 0, 48.28, 12.7, 38.10, 0.630, 1, "ASM" , [[-15,793],[0,800],[10,807],[15,812],[25,826],[30,835],[35,846]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - - ["12.7x99mm AMAX" , 852, 100, 0.0615965, -0.00036645, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 38.10, 1.050, 1, "ASM" , [[-15,833],[0,840],[10,847],[15,852],[25,866],[30,875],[35,886]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["12.7x99mm" , 892, 100, 0.0588284, -0.00057503, 3.81, 0, 2, 10, 120, 0, 0, 41.92, 12.7, 38.10, 0.670, 1, "ASM" , [[-15,873],[0,880],[10,887],[15,892],[25,906],[30,915],[35,926]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - - ["12.7x54mm" , 299, 100, 0.3406920, -0.00019268, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 24.13, 1.050, 1, "ASM" , [[-15,297],[0,298],[10,299],[15,299],[25,301],[30,302],[35,303]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - - [".50 Beowulf" , 562, 100, 0.1262000, -0.00202645, 3.81, 0, 2, 10, 120, 0, 0, 21.71, 12.7, 50.80, 0.210, 1, "ASM" , [[-15,560],[0,561],[10,562],[15,562],[25,564],[30,565],[35,566]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - - [".408 CheyTac 305gr", 1059, 100, 0.0482146, -0.00063655, 3.81, 0, 2, 10, 120, 0, 0, 19.76, 10.4, 33.02, 0.569, 1, "ICAO", [[-15,1040],[0,1047],[10,1054],[15,1059],[25,1073],[30,1082],[35,1093]], [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - [".408 CheyTac 419gr", 859, 100, 0.0611842, -0.00044958, 3.81, 0, 2, 10, 120, 0, 0, 27.15, 10.4, 33.02, 0.866, 1, "ICAO", [[-15,840],[0,847],[10,854],[15,859],[25,873],[30,882],[35,893]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - - ["9.3×64mm" , 862, 100, 0.0627652, -0.00108571, 3.81, 0, 2, 10, 120, 0, 0, 14.90, 9.30, 35.56, 0.368, 1, "ASM" , [[-15,843],[0,850],[10,857],[15,862],[25,876],[30,885],[35,896]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - - [".338LM 250gr" , 872, 100, 0.0604821, -0.00059133, 3.81, 0, 2, 10, 120, 0, 0, 16.20, 8.58, 25.40, 0.645, 1, "ICAO", [[-15,853],[0,860],[10,867],[15,872],[25,886],[30,895],[35,906]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - [".338LM 300gr" , 792, 100, 0.0685883, -0.00052190, 3.81, 0, 2, 10, 120, 0, 0, 19.44, 8.58, 25.40, 0.759, 1, "ICAO", [[-15,773],[0,780],[10,787],[15,792],[25,806],[30,815],[35,826]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - [".338LM API526" , 872, 100, 0.0602535, -0.00069611, 3.81, 0, 2, 10, 120, 0, 0, 16.39, 8.58, 25.40, 0.760, 1, "ICAO", [[-15,853],[0,860],[10,867],[15,872],[25,886],[30,895],[35,906]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - - [".300WM Mk248 Mod0" , 857, 100, 0.0621425, -0.00070530, 3.81, 0, 2, 10, 120, 0, 0, 12.31, 7.80, 25.40, 0.537, 1, "ICAO", [[-15,838],[0,845],[10,852],[15,857],[25,871],[30,880],[35,891]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - [".300WM Mk248 Mod1" , 839, 100, 0.0637038, -0.00061188, 3.81, 0, 2, 10, 120, 0, 0, 14.26, 7.80, 25.40, 0.619, 1, "ICAO", [[-15,820],[0,827],[10,834],[15,839],[25,853],[30,862],[35,873]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - [".300WM Berger OTM" , 792, 100, 0.0686968, -0.00053733, 3.81, 0, 2, 10, 120, 0, 0, 14.90, 7.80, 25.40, 0.715, 1, "ICAO", [[-15,773],[0,780],[10,787],[15,792],[25,806],[30,815],[35,826]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - - ["7.62x54mmR" , 812, 100, 0.0678441, -0.00100023, 3.81, 0, 2, 10, 120, 0, 0, 9.849, 7.92, 24.13, 0.400, 1, "ICAO", [[-15,793],[0,800],[10,807],[15,812],[25,826],[30,835],[35,846]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - - ["7.62x51mm M80" , 802, 100, 0.0690229, -0.00100957, 3.81, 0, 2, 10, 120, 0, 0, 9.461, 7.82, 25.40, 0.398, 1, "ICAO", [[-15,783],[0,790],[10,797],[15,802],[25,816],[30,825],[35,836]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["7.62x51mm M118LR" , 757, 100, 0.0739989, -0.00082828, 3.81, 0, 2, 10, 120, 0, 0, 11.34, 7.82, 25.40, 0.482, 1, "ICAO", [[-15,738],[0,745],[10,752],[15,757],[25,771],[30,780],[35,791]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["7.62x51mm Mk316" , 781, 100, 0.0709422, -0.00082029, 3.81, 0, 2, 10, 120, 0, 0, 11.34, 7.82, 25.40, 0.483, 1, "ICAO", [[-15,777],[0,778],[10,779],[15,781],[25,783],[30,785],[35,787]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["7.62x51mm Mk319" , 900, 100, 0.0593025, -0.00102338, 3.81, 0, 2, 10, 120, 0, 0, 8.424, 7.82, 25.40, 0.377, 1, "ICAO", [[-15,898],[0,899],[10,900],[15,900],[25,902],[30,903],[35,904]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["7.62x51mm M993" , 912, 100, 0.0585007, -0.00107148, 3.81, 0, 2, 10, 120, 0, 0, 8.230, 7.82, 25.40, 0.359, 1, "ICAO", [[-15,893],[0,900],[10,907],[15,912],[25,926],[30,935],[35,946]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["7.62x51mm Subsonic", 314, 100, 0.3168140, -0.00049899, 3.81, 0, 2, 10, 120, 0, 0, 12.96, 7.82, 25.40, 0.502, 1, "ICAO", [[-15,312],[0,313],[10,314],[15,314],[25,316],[30,317],[35,318]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - - ["7.62x39mm" , 708, 100, 0.0846559, -0.00151621, 3.81, 0, 2, 10, 120, 0, 0, 7.970, 7.82, 25.40, 0.275, 1, "ICAO", [[-15,689],[0,696],[10,703],[15,708],[25,722],[30,731],[35,742]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - - ["6.5x39mm" , 766, 100, 0.0725986, -0.00075308, 3.81, 0, 2, 10, 120, 0, 0, 7.970, 6.71, 22.86, 0.524, 1, "ICAO", [[-15,747],[0,754],[10,761],[15,766],[25,780],[30,789],[35,800]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["6.5x47mm Lapua" , 767, 100, 0.0722256, -0.00067037, 3.81, 0, 2, 10, 120, 0, 0, 9.007, 6.71, 22.86, 0.577, 1, "ICAO", [[-15,748],[0,755],[10,762],[15,767],[25,781],[30,790],[35,801]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["6.5mm Creedmor" , 822, 100, 0.0655022, -0.00060887, 3.81, 0, 2, 10, 120, 0, 0, 9.072, 6.71, 22.86, 0.632, 1, "ICAO", [[-15,803],[0,810],[10,817],[15,822],[25,836],[30,845],[35,856]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - - ["5.8x42mm DBP87" , 942, 100, 0.0566639, -0.00117956, 3.81, 0, 2, 10, 120, 0, 0, 4.150, 5.99, 24.40, 0.313, 1, "ICAO", [[-15,923],[0,930],[10,937],[15,942],[25,956],[30,965],[35,976]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - - ["5.56x45mm M855" , 862, 100, 0.0635456, -0.00126466, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.302, 1, "ASM" , [[-15,843],[0,849],[10,857],[15,862],[25,876],[30,885],[35,898]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["5.56x45mm Mk262" , 812, 100, 0.0682606, -0.00109563, 3.81, 0, 2, 10, 120, 0, 0, 4.990, 5.70, 17.78, 0.361, 1, "ASM" , [[-15,793],[0,800],[10,807],[15,812],[25,826],[30,835],[35,846]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["5.56x45mm Mk318" , 872, 100, 0.0624569, -0.00123318, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.307, 1, "ASM" , [[-15,853],[0,860],[10,867],[15,872],[25,886],[30,895],[35,906]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["5.56x45mm M995" , 861, 100, 0.0635355, -0.00123272, 3.81, 0, 2, 10, 120, 0, 0, 4.536, 5.70, 17.78, 0.310, 1, "ASM" , [[-15,842],[0,849],[10,856],[15,861],[25,875],[30,884],[35,895]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - - ["5.45x39mm 7N6M" , 727, 100, 0.0801269, -0.00116278, 3.81, 0, 2, 10, 120, 0, 0, 3.428, 5.59, 16.00, 0.336, 1, "ICAO", [[-15,708],[0,715],[10,722],[15,727],[25,741],[30,750],[35,761]], [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true]]; - - [] call FUNC(clear_user_data); - profileNamespace setVariable ["ACE_ATragMX_gunList", GVAR(gunList)]; -}; - -[] call FUNC(init); -[] call FUNC(restore_user_data); -[] call FUNC(read_gun_list_entries_from_config); +GVAR(active) = false; +GVAR(initialised) = false; [QEGVAR(vector,rangefinderData), {_this call FUNC(sord)}] call CBA_fnc_addEventHandler; diff --git a/addons/atragmx/functions/fnc_create_dialog.sqf b/addons/atragmx/functions/fnc_create_dialog.sqf index 322f135b45..6bf57e620a 100644 --- a/addons/atragmx/functions/fnc_create_dialog.sqf +++ b/addons/atragmx/functions/fnc_create_dialog.sqf @@ -18,6 +18,16 @@ #define __dsp (uiNamespace getVariable "ATragMX_Display") #define __ctrlBackground (__dsp displayCtrl 720000) +// Do all initialisation now +if (!GVAR(initialised)) then { + [] call FUNC(initGunList); + [] call FUNC(init); + [] call FUNC(restore_user_data); + [] call FUNC(read_gun_list_entries_from_config); + GVAR(initialised) = true; + TRACE_1("",GVAR(initialised)); +}; + if (GVAR(active)) exitWith { false }; if (underwater ACE_player) exitWith { false }; if (!("ACE_ATragMX" in (uniformItems ACE_player)) && !("ACE_ATragMX" in (vestItems ACE_player))) exitWith { false }; diff --git a/addons/atragmx/functions/fnc_init.sqf b/addons/atragmx/functions/fnc_init.sqf index eda2cc1ee0..deff9d34cb 100644 --- a/addons/atragmx/functions/fnc_init.sqf +++ b/addons/atragmx/functions/fnc_init.sqf @@ -15,7 +15,6 @@ */ #include "script_component.hpp" -GVAR(active) = false; GVAR(workingMemory) = +(GVAR(gunList) select 0); diff --git a/addons/atragmx/functions/fnc_initGunList.sqf b/addons/atragmx/functions/fnc_initGunList.sqf new file mode 100644 index 0000000000..c8e5f303f5 --- /dev/null +++ b/addons/atragmx/functions/fnc_initGunList.sqf @@ -0,0 +1,83 @@ +/* + * Author: Ruthberg + * Inits the gun list from user profile + * + * Arguments: + * Nothing + * + * Return Value: + * Nothing + * + * Example: + * call ace_atragmx_fnc_initGunList + * + * Public: No + */ +#include "script_component.hpp" + +LOG_2("Trying to load gunlist from profile [Version: %1][Count: %2]", profileNamespace getVariable [ARR_2(QGVAR(profileNamespaceVersion), 'none')], count (profileNamespace getVariable [ARR_2(QGVAR(gunList), [])])); + +private _resetGunList = true; +if ((profileNamespace getVariable ["ACE_ATragMX_profileNamespaceVersion", 0]) == ATRAGMX_PROFILE_NAMESPACE_VERSION && {count (profileNamespace getVariable ["ACE_ATragMX_gunList", []]) > 0}) then { + GVAR(gunList) = profileNamespace getVariable "ACE_ATragMX_gunList"; + _resetGunList = false; + { + // Verify each gun has correct param type + if (!(_x isEqualTypeArray ["", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "", [], [], false])) exitWith { + _resetGunList = true; + }; + } forEach GVAR(gunList); +}; + +if (_resetGunList) then { + WARNING("Reseting Profile Gunlist"); + // Profile Name, Muzzle Velocity, Zero Range, Scope Base Angle, AirFriction, Bore Height, Scope Unit, Scope Click Unit, Scope Click Number, Maximum Elevation, Dialed Elevation, Dialed Windage, Mass, Bullet Diameter, Rifle Twist, BC, Drag Model, Atmosphere Model, Muzzle Velocity vs. Temperature Interpolation, C1 Ballistic Coefficient vs. Distance Interpolation, Persistent + GVAR(gunList) = [["12.7x108mm" , 812, 100, 0.0666557, -0.00063800, 3.81, 0, 2, 10, 120, 0, 0, 48.28, 12.7, 38.10, 0.630, 1, "ASM" , [[-15,793],[0,800],[10,807],[15,812],[25,826],[30,835],[35,846]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + + ["12.7x99mm AMAX" , 852, 100, 0.0615965, -0.00036645, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 38.10, 1.050, 1, "ASM" , [[-15,833],[0,840],[10,847],[15,852],[25,866],[30,875],[35,886]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["12.7x99mm" , 892, 100, 0.0588284, -0.00057503, 3.81, 0, 2, 10, 120, 0, 0, 41.92, 12.7, 38.10, 0.670, 1, "ASM" , [[-15,873],[0,880],[10,887],[15,892],[25,906],[30,915],[35,926]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + + ["12.7x54mm" , 299, 100, 0.3406920, -0.00019268, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 24.13, 1.050, 1, "ASM" , [[-15,297],[0,298],[10,299],[15,299],[25,301],[30,302],[35,303]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + + [".50 Beowulf" , 562, 100, 0.1262000, -0.00202645, 3.81, 0, 2, 10, 120, 0, 0, 21.71, 12.7, 50.80, 0.210, 1, "ASM" , [[-15,560],[0,561],[10,562],[15,562],[25,564],[30,565],[35,566]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + + [".408 CheyTac 305gr", 1059, 100, 0.0482146, -0.00063655, 3.81, 0, 2, 10, 120, 0, 0, 19.76, 10.4, 33.02, 0.569, 1, "ICAO", [[-15,1040],[0,1047],[10,1054],[15,1059],[25,1073],[30,1082],[35,1093]], [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + [".408 CheyTac 419gr", 859, 100, 0.0611842, -0.00044958, 3.81, 0, 2, 10, 120, 0, 0, 27.15, 10.4, 33.02, 0.866, 1, "ICAO", [[-15,840],[0,847],[10,854],[15,859],[25,873],[30,882],[35,893]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + + ["9.3×64mm" , 862, 100, 0.0627652, -0.00108571, 3.81, 0, 2, 10, 120, 0, 0, 14.90, 9.30, 35.56, 0.368, 1, "ASM" , [[-15,843],[0,850],[10,857],[15,862],[25,876],[30,885],[35,896]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + + [".338LM 250gr" , 872, 100, 0.0604821, -0.00059133, 3.81, 0, 2, 10, 120, 0, 0, 16.20, 8.58, 25.40, 0.645, 1, "ICAO", [[-15,853],[0,860],[10,867],[15,872],[25,886],[30,895],[35,906]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + [".338LM 300gr" , 792, 100, 0.0685883, -0.00052190, 3.81, 0, 2, 10, 120, 0, 0, 19.44, 8.58, 25.40, 0.759, 1, "ICAO", [[-15,773],[0,780],[10,787],[15,792],[25,806],[30,815],[35,826]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + [".338LM API526" , 872, 100, 0.0602535, -0.00069611, 3.81, 0, 2, 10, 120, 0, 0, 16.39, 8.58, 25.40, 0.760, 1, "ICAO", [[-15,853],[0,860],[10,867],[15,872],[25,886],[30,895],[35,906]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + + [".300WM Mk248 Mod0" , 857, 100, 0.0621425, -0.00070530, 3.81, 0, 2, 10, 120, 0, 0, 12.31, 7.80, 25.40, 0.537, 1, "ICAO", [[-15,838],[0,845],[10,852],[15,857],[25,871],[30,880],[35,891]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + [".300WM Mk248 Mod1" , 839, 100, 0.0637038, -0.00061188, 3.81, 0, 2, 10, 120, 0, 0, 14.26, 7.80, 25.40, 0.619, 1, "ICAO", [[-15,820],[0,827],[10,834],[15,839],[25,853],[30,862],[35,873]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + [".300WM Berger OTM" , 792, 100, 0.0686968, -0.00053733, 3.81, 0, 2, 10, 120, 0, 0, 14.90, 7.80, 25.40, 0.715, 1, "ICAO", [[-15,773],[0,780],[10,787],[15,792],[25,806],[30,815],[35,826]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + + ["7.62x54mmR" , 812, 100, 0.0678441, -0.00100023, 3.81, 0, 2, 10, 120, 0, 0, 9.849, 7.92, 24.13, 0.400, 1, "ICAO", [[-15,793],[0,800],[10,807],[15,812],[25,826],[30,835],[35,846]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + + ["7.62x51mm M80" , 802, 100, 0.0690229, -0.00100957, 3.81, 0, 2, 10, 120, 0, 0, 9.461, 7.82, 25.40, 0.398, 1, "ICAO", [[-15,783],[0,790],[10,797],[15,802],[25,816],[30,825],[35,836]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["7.62x51mm M118LR" , 757, 100, 0.0739989, -0.00082828, 3.81, 0, 2, 10, 120, 0, 0, 11.34, 7.82, 25.40, 0.482, 1, "ICAO", [[-15,738],[0,745],[10,752],[15,757],[25,771],[30,780],[35,791]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["7.62x51mm Mk316" , 781, 100, 0.0709422, -0.00082029, 3.81, 0, 2, 10, 120, 0, 0, 11.34, 7.82, 25.40, 0.483, 1, "ICAO", [[-15,777],[0,778],[10,779],[15,781],[25,783],[30,785],[35,787]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["7.62x51mm Mk319" , 900, 100, 0.0593025, -0.00102338, 3.81, 0, 2, 10, 120, 0, 0, 8.424, 7.82, 25.40, 0.377, 1, "ICAO", [[-15,898],[0,899],[10,900],[15,900],[25,902],[30,903],[35,904]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["7.62x51mm M993" , 912, 100, 0.0585007, -0.00107148, 3.81, 0, 2, 10, 120, 0, 0, 8.230, 7.82, 25.40, 0.359, 1, "ICAO", [[-15,893],[0,900],[10,907],[15,912],[25,926],[30,935],[35,946]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["7.62x51mm Subsonic", 314, 100, 0.3168140, -0.00049899, 3.81, 0, 2, 10, 120, 0, 0, 12.96, 7.82, 25.40, 0.502, 1, "ICAO", [[-15,312],[0,313],[10,314],[15,314],[25,316],[30,317],[35,318]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + + ["7.62x39mm" , 708, 100, 0.0846559, -0.00151621, 3.81, 0, 2, 10, 120, 0, 0, 7.970, 7.82, 25.40, 0.275, 1, "ICAO", [[-15,689],[0,696],[10,703],[15,708],[25,722],[30,731],[35,742]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + + ["6.5x39mm" , 766, 100, 0.0725986, -0.00075308, 3.81, 0, 2, 10, 120, 0, 0, 7.970, 6.71, 22.86, 0.524, 1, "ICAO", [[-15,747],[0,754],[10,761],[15,766],[25,780],[30,789],[35,800]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["6.5x47mm Lapua" , 767, 100, 0.0722256, -0.00067037, 3.81, 0, 2, 10, 120, 0, 0, 9.007, 6.71, 22.86, 0.577, 1, "ICAO", [[-15,748],[0,755],[10,762],[15,767],[25,781],[30,790],[35,801]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["6.5mm Creedmor" , 822, 100, 0.0655022, -0.00060887, 3.81, 0, 2, 10, 120, 0, 0, 9.072, 6.71, 22.86, 0.632, 1, "ICAO", [[-15,803],[0,810],[10,817],[15,822],[25,836],[30,845],[35,856]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + + ["5.8x42mm DBP87" , 942, 100, 0.0566639, -0.00117956, 3.81, 0, 2, 10, 120, 0, 0, 4.150, 5.99, 24.40, 0.313, 1, "ICAO", [[-15,923],[0,930],[10,937],[15,942],[25,956],[30,965],[35,976]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + + ["5.56x45mm M855" , 862, 100, 0.0635456, -0.00126466, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.302, 1, "ASM" , [[-15,843],[0,849],[10,857],[15,862],[25,876],[30,885],[35,898]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["5.56x45mm Mk262" , 812, 100, 0.0682606, -0.00109563, 3.81, 0, 2, 10, 120, 0, 0, 4.990, 5.70, 17.78, 0.361, 1, "ASM" , [[-15,793],[0,800],[10,807],[15,812],[25,826],[30,835],[35,846]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["5.56x45mm Mk318" , 872, 100, 0.0624569, -0.00123318, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.307, 1, "ASM" , [[-15,853],[0,860],[10,867],[15,872],[25,886],[30,895],[35,906]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["5.56x45mm M995" , 861, 100, 0.0635355, -0.00123272, 3.81, 0, 2, 10, 120, 0, 0, 4.536, 5.70, 17.78, 0.310, 1, "ASM" , [[-15,842],[0,849],[10,856],[15,861],[25,875],[30,884],[35,895]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + + ["5.45x39mm 7N6M" , 727, 100, 0.0801269, -0.00116278, 3.81, 0, 2, 10, 120, 0, 0, 3.428, 5.59, 16.00, 0.336, 1, "ICAO", [[-15,708],[0,715],[10,722],[15,727],[25,741],[30,750],[35,761]], [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true]]; + + [] call FUNC(clear_user_data); + profileNamespace setVariable ["ACE_ATragMX_gunList", GVAR(gunList)]; +}; diff --git a/addons/atragmx/functions/fnc_sord.sqf b/addons/atragmx/functions/fnc_sord.sqf index b342072018..eacd142c53 100644 --- a/addons/atragmx/functions/fnc_sord.sqf +++ b/addons/atragmx/functions/fnc_sord.sqf @@ -17,6 +17,8 @@ */ #include "script_component.hpp" +if (!GVAR(initialised)) exitWith {}; + params ["_slopeDistance", "_azimuth", "_inclination"]; GVAR(inclinationAngle) set [GVAR(currentTarget), round(_inclination)]; diff --git a/addons/atragmx/functions/fnc_toggle_option_menu.sqf b/addons/atragmx/functions/fnc_toggle_option_menu.sqf index ea14baedad..99928e2cc8 100644 --- a/addons/atragmx/functions/fnc_toggle_option_menu.sqf +++ b/addons/atragmx/functions/fnc_toggle_option_menu.sqf @@ -48,4 +48,6 @@ if (ctrlVisible 3001) then { ctrlShow [3001, true]; ctrlShow [3002, true]; + + ctrlSetFocus ((uiNamespace getVariable ["ATragMX_Display", displayNull]) displayCtrl 3002); }; diff --git a/addons/ballistics/CfgWeapons.hpp b/addons/ballistics/CfgWeapons.hpp index 326e7a46db..f95408d6a6 100644 --- a/addons/ballistics/CfgWeapons.hpp +++ b/addons/ballistics/CfgWeapons.hpp @@ -112,8 +112,8 @@ class CfgWeapons { "ACE_30Rnd_65x39_caseless_mag_Tracer_Dim" }; initSpeed = -1.0; - ACE_barrelTwist=228.6; - ACE_barrelLength=406.4; + ACE_barrelTwist = 228.6; + ACE_barrelLength = 406.4; }; class arifle_MXM_F: arifle_MX_Base_F { magazines[] = { @@ -124,8 +124,8 @@ class CfgWeapons { "ACE_30Rnd_65_Creedmor_mag" }; initSpeed = -1.01842; - ACE_barrelTwist=228.6; - ACE_barrelLength=457.2; + ACE_barrelTwist = 228.6; + ACE_barrelLength = 457.2; class Single: Single { dispersion = 0.000436; // radians. Equal to 1.50 MOA. }; @@ -154,13 +154,13 @@ class CfgWeapons { "ACE_30Rnd_556x45_Stanag_Tracer_Dim" }; initSpeed = -0.859238; - ACE_barrelTwist=177.8; - ACE_barrelLength=264.0; + ACE_barrelTwist = 177.8; + ACE_barrelLength = 264.0; }; class arifle_SPAR_02_base_F: Rifle_Base_F { initSpeed = -0.934282; - ACE_barrelTwist=177.8; - ACE_barrelLength=368.0; + ACE_barrelTwist = 177.8; + ACE_barrelLength = 368.0; }; class arifle_SPAR_03_base_F: Rifle_Base_F { magazines[] = { @@ -174,8 +174,8 @@ class CfgWeapons { "ACE_20Rnd_762x51_Mag_SD" }; initSpeed = -0.984394; - ACE_barrelTwist=279.4; - ACE_barrelLength=508.0; + ACE_barrelTwist = 279.4; + ACE_barrelLength = 508.0; }; /* Other */ @@ -186,18 +186,18 @@ class CfgWeapons { "ACE_200Rnd_65x39_cased_Box_Tracer_Dim" }; initSpeed = -0.976974; - ACE_barrelTwist=177.8; - ACE_barrelLength=317.5; + ACE_barrelTwist = 177.8; + ACE_barrelLength = 317.5; }; class LMG_Zafir_F: Rifle_Long_Base_F { initSpeed = -1.00333; - ACE_barrelTwist=304.8; - ACE_barrelLength=459.74; + ACE_barrelTwist = 304.8; + ACE_barrelLength = 459.74; }; class LMG_03_base_F: Rifle_Long_Base_F { initSpeed = -1.02002; - ACE_barrelTwist=177.8; - ACE_barrelLength=414.02; + ACE_barrelTwist = 177.8; + ACE_barrelLength = 414.02; }; class Tavor_base_F: Rifle_Base_F {}; class mk20_base_F: Rifle_Base_F {}; @@ -225,51 +225,51 @@ class CfgWeapons { class hgun_P07_F: Pistol_Base_F { initSpeed = -1.0; - ACE_barrelTwist=254.0; - ACE_barrelLength=101.6; + ACE_barrelTwist = 254.0; + ACE_barrelLength = 101.6; }; class hgun_Rook40_F: Pistol_Base_F { initSpeed = -1.03077; - ACE_barrelTwist=254.0; - ACE_barrelLength=111.76; + ACE_barrelTwist = 254.0; + ACE_barrelLength = 111.76; }; class hgun_ACPC2_F: Pistol_Base_F { initSpeed = -1.0; - ACE_barrelTwist=406.4; - ACE_barrelLength=127.0; + ACE_barrelTwist = 406.4; + ACE_barrelLength = 127.0; }; class hgun_Pistol_heavy_01_F: Pistol_Base_F { initSpeed = -0.96; - ACE_barrelTwist=406.4; - ACE_barrelLength=114.3; + ACE_barrelTwist = 406.4; + ACE_barrelLength = 114.3; }; class hgun_Pistol_heavy_02_F: Pistol_Base_F { initSpeed = -0.92; - ACE_barrelTwist=406.4; - ACE_barrelLength=76.2; + ACE_barrelTwist = 406.4; + ACE_barrelLength = 76.2; }; class hgun_Pistol_01_F: Pistol_Base_F { initSpeed = -0.974359; - ACE_barrelTwist=254.0; - ACE_barrelLength=93.5; + ACE_barrelTwist = 254.0; + ACE_barrelLength = 93.5; }; class pdw2000_base_F: Rifle_Short_Base_F { initSpeed = -1.09615; - ACE_barrelTwist=228.6; - ACE_barrelLength=177.8; + ACE_barrelTwist = 228.6; + ACE_barrelLength = 177.8; }; /* Rifles */ class arifle_AKS_base_F: Rifle_Base_F { initSpeed = -1.0; - ACE_barrelTwist=160.02; - ACE_barrelLength=206.5; + ACE_barrelTwist = 160.02; + ACE_barrelLength = 206.5; }; class arifle_AKM_base_F: Rifle_Base_F { initSpeed = -1.0014; @@ -303,8 +303,8 @@ class CfgWeapons { "ACE_30Rnd_65x39_caseless_green_mag_Tracer_Dim" }; initSpeed = -1.08355; - ACE_barrelTwist=203.2; - ACE_barrelLength=728.98; + ACE_barrelTwist = 203.2; + ACE_barrelLength = 508.0; }; class arifle_Katiba_C_F: arifle_katiba_Base_F { magazines[] = { @@ -313,8 +313,8 @@ class CfgWeapons { "ACE_30Rnd_65x39_caseless_green_mag_Tracer_Dim" }; initSpeed = -1.07105; - ACE_barrelTwist=203.2; - ACE_barrelLength=680.72; + ACE_barrelTwist = 203.2; + ACE_barrelLength = 393.7; }; class arifle_Katiba_GL_F: arifle_katiba_Base_F { magazines[] = { @@ -323,8 +323,8 @@ class CfgWeapons { "ACE_30Rnd_65x39_caseless_green_mag_Tracer_Dim" }; initSpeed = -1.08355; - ACE_barrelTwist=203.2; - ACE_barrelLength=728.98; + ACE_barrelTwist = 203.2; + ACE_barrelLength = 508.0; }; class arifle_MX_F: arifle_MX_Base_F { magazines[] = { @@ -333,8 +333,8 @@ class CfgWeapons { "ACE_30Rnd_65x39_caseless_mag_Tracer_Dim" }; initSpeed = -0.990132; - ACE_barrelTwist=228.6; - ACE_barrelLength=368.3; + ACE_barrelTwist = 228.6; + ACE_barrelLength = 368.3; }; class arifle_MX_GL_F: arifle_MX_Base_F { magazines[] = { @@ -343,8 +343,8 @@ class CfgWeapons { "ACE_30Rnd_65x39_caseless_mag_Tracer_Dim" }; initSpeed = -0.99; - ACE_barrelTwist=228.6; - ACE_barrelLength=368.3; + ACE_barrelTwist = 228.6; + ACE_barrelLength = 368.3; }; /* class arifle_MX_SW_F: arifle_MX_Base_F { @@ -359,8 +359,8 @@ class CfgWeapons { "ACE_30Rnd_65x39_caseless_mag_Tracer_Dim" }; initSpeed = -0.963816; - ACE_barrelTwist=203.2; - ACE_barrelLength=266.7; + ACE_barrelTwist = 203.2; + ACE_barrelLength = 266.7; }; /* class arifle_MXM_F: arifle_MX_Base_F { @@ -383,18 +383,18 @@ class CfgWeapons { "ACE_30Rnd_556x45_Stanag_Tracer_Dim" }; initSpeed = -0.989; - ACE_barrelTwist=285.75; - ACE_barrelLength=457.2; + ACE_barrelTwist = 285.75; + ACE_barrelLength = 457.2; }; class SMG_02_base_F: Rifle_Short_Base_F { initSpeed = -1.10288; - ACE_barrelTwist=254.0; - ACE_barrelLength=195.58; + ACE_barrelTwist = 254.0; + ACE_barrelLength = 195.58; }; class SMG_05_base_F: Rifle_Short_Base_F { initSpeed = -1.04058; - ACE_barrelTwist=254.0; - ACE_barrelLength=115.0; + ACE_barrelTwist = 254.0; + ACE_barrelLength = 115.0; }; class arifle_TRG20_F: Tavor_base_F { magazines[] = { @@ -410,8 +410,8 @@ class CfgWeapons { "ACE_30Rnd_556x45_Stanag_Tracer_Dim" }; initSpeed = -0.95; - ACE_barrelTwist=177.8; - ACE_barrelLength=381.0; + ACE_barrelTwist = 177.8; + ACE_barrelLength = 381.0; }; class arifle_TRG21_F: Tavor_base_F { magazines[] = { @@ -427,8 +427,8 @@ class CfgWeapons { "ACE_30Rnd_556x45_Stanag_Tracer_Dim" }; initSpeed = -0.988043; - ACE_barrelTwist=177.8; - ACE_barrelLength=459.74; + ACE_barrelTwist = 177.8; + ACE_barrelLength = 459.74; }; class arifle_TRG21_GL_F: arifle_TRG21_F { magazines[] = { @@ -444,8 +444,8 @@ class CfgWeapons { "ACE_30Rnd_556x45_Stanag_Tracer_Dim" }; initSpeed = -0.988043; - ACE_barrelTwist=177.8; - ACE_barrelLength=459.74; + ACE_barrelTwist = 177.8; + ACE_barrelLength = 459.74; }; /* class LMG_Zafir_F: Rifle_Long_Base_F { @@ -467,8 +467,8 @@ class CfgWeapons { "ACE_30Rnd_556x45_Stanag_Tracer_Dim" }; initSpeed = -0.980978; - ACE_barrelTwist=177.8; - ACE_barrelLength=441.96; + ACE_barrelTwist = 177.8; + ACE_barrelLength = 441.96; }; class arifle_Mk20C_F: mk20_base_F { magazines[] = { @@ -484,8 +484,8 @@ class CfgWeapons { "ACE_30Rnd_556x45_Stanag_Tracer_Dim" }; initSpeed = -0.962648; - ACE_barrelTwist=177.8; - ACE_barrelLength=406.4; + ACE_barrelTwist = 177.8; + ACE_barrelLength = 406.4; }; class arifle_Mk20_GL_F: mk20_base_F { magazines[] = { @@ -501,13 +501,13 @@ class CfgWeapons { "ACE_30Rnd_556x45_Stanag_Tracer_Dim" }; initSpeed = -0.962648; - ACE_barrelTwist=177.8; - ACE_barrelLength=406.4; + ACE_barrelTwist = 177.8; + ACE_barrelLength = 406.4; }; class SMG_01_Base: Rifle_Short_Base_F { initSpeed = -1.0175; - ACE_barrelTwist=406.4; - ACE_barrelLength=139.7; + ACE_barrelTwist = 406.4; + ACE_barrelLength = 139.7; }; class srifle_DMR_01_F: DMR_01_base_F { magazines[] = { @@ -515,8 +515,8 @@ class CfgWeapons { "ACE_10Rnd_762x54_Tracer_mag" }; initSpeed = -1.025; - ACE_barrelTwist=241.3; - ACE_barrelLength=609.6; + ACE_barrelTwist = 241.3; + ACE_barrelLength = 609.6; }; class srifle_EBR_F: EBR_base_F { magazines[] = { @@ -530,8 +530,8 @@ class CfgWeapons { "ACE_20Rnd_762x51_Mag_SD" }; initSpeed = -0.972389; - ACE_barrelTwist=304.8; - ACE_barrelLength=457.2; + ACE_barrelTwist = 304.8; + ACE_barrelLength = 457.2; }; /* class LMG_Mk200_F: Rifle_Long_Base_F { @@ -546,8 +546,8 @@ class CfgWeapons { "ACE_7Rnd_408_305gr_Mag" }; initSpeed = -1.0; - ACE_barrelTwist=330.2; - ACE_barrelLength=736.6; + ACE_barrelTwist = 330.2; + ACE_barrelLength = 736.6; }; class srifle_GM6_F: GM6_base_F { magazines[] = { @@ -558,8 +558,8 @@ class CfgWeapons { "ACE_5Rnd_127x99_AMAX_Mag" }; initSpeed = -1.0; - ACE_barrelTwist=381.0; - ACE_barrelLength=730; + ACE_barrelTwist = 381.0; + ACE_barrelLength = 730; }; class srifle_DMR_02_F: DMR_02_base_F { magazines[] = { @@ -571,8 +571,8 @@ class CfgWeapons { "ACE_20Rnd_762x67_Berger_Hybrid_OTM_Mag" }; initSpeed = -0.961749; - ACE_barrelTwist=254.0; - ACE_barrelLength=508.0; + ACE_barrelTwist = 254.0; + ACE_barrelLength = 508.0; }; class srifle_DMR_03_F: DMR_03_base_F { magazines[] = { @@ -586,18 +586,18 @@ class CfgWeapons { "ACE_20Rnd_762x51_Mag_SD" }; initSpeed = -0.984394; - ACE_barrelTwist=254.0; - ACE_barrelLength=508.0; + ACE_barrelTwist = 254.0; + ACE_barrelLength = 508.0; }; class srifle_DMR_04_F: DMR_04_base_F { initSpeed = -1.0; - ACE_barrelTwist=203.2; - ACE_barrelLength=450.088; + ACE_barrelTwist = 203.2; + ACE_barrelLength = 450.088; }; class srifle_DMR_05_blk_F: DMR_05_base_F { initSpeed = -1.0; - ACE_barrelTwist=359.918; - ACE_barrelLength=620.014; + ACE_barrelTwist = 359.918; + ACE_barrelLength = 620.014; }; class srifle_DMR_06_camo_F: DMR_06_base_F { magazines[] = { @@ -611,18 +611,18 @@ class CfgWeapons { "ACE_20Rnd_762x51_Mag_SD" }; initSpeed = -0.992197; - ACE_barrelTwist=304.8; - ACE_barrelLength=558.8; + ACE_barrelTwist = 304.8; + ACE_barrelLength = 558.8; }; class MMG_01_hex_F: MMG_01_base_F { initSpeed = -0.997073; - ACE_barrelTwist=359.918; - ACE_barrelLength=549.91; + ACE_barrelTwist = 359.918; + ACE_barrelLength = 549.91; }; class MMG_02_camo_F: MMG_02_base_F { initSpeed = -1.0; - ACE_barrelTwist=234.95; - ACE_barrelLength=609.6; + ACE_barrelTwist = 234.95; + ACE_barrelLength = 609.6; }; class HMG_127 : LMG_RCWS { @@ -631,8 +631,8 @@ class CfgWeapons { }; class HMG_M2: HMG_01 { initSpeed = -1.0; - ACE_barrelTwist=304.8; - ACE_barrelLength=1143.0; + ACE_barrelTwist = 304.8; + ACE_barrelLength = 1143.0; }; /* Silencers */ diff --git a/addons/common/CfgLocationTypes.hpp b/addons/common/CfgLocationTypes.hpp index 15b56c120c..163c1e5a88 100644 --- a/addons/common/CfgLocationTypes.hpp +++ b/addons/common/CfgLocationTypes.hpp @@ -4,7 +4,7 @@ class CfgLocationTypes { class ACE_HashLocation { color[] = {0,0,0,0}; - drawStyle = "bananas"; + drawStyle = "WARNING-ACE_HashLocation_is_deprecated"; // Replaced by CBA_fnc_createNamespace font = "RobotoCondensed"; importance = 5; name = "HashLocation"; diff --git a/addons/common/XEH_PREP.hpp b/addons/common/XEH_PREP.hpp index 3f6f264699..b4e5f26986 100644 --- a/addons/common/XEH_PREP.hpp +++ b/addons/common/XEH_PREP.hpp @@ -13,6 +13,7 @@ PREP(ASLToPosition); PREP(binarizeNumber); PREP(blurScreen); PREP(cachedCall); +PREP(canDig); PREP(canGetInPosition); PREP(canInteractWith); PREP(changeProjectileDirection); diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index 68920a7a5c..8200493810 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -282,11 +282,11 @@ enableCamShake true; params ["_newPlayer","_oldPlayer"]; if (alive _newPlayer) then { - [_newPlayer] call FUNC(setName); + [FUNC(setName), [_newPlayer]] call CBA_fnc_execNextFrame; }; if (alive _oldPlayer) then { - [_oldPlayer] call FUNC(setName); + [FUNC(setName), [_oldPlayer]] call CBA_fnc_execNextFrame; }; }] call CBA_fnc_addPlayerEventHandler; diff --git a/addons/common/functions/fnc_canDig.sqf b/addons/common/functions/fnc_canDig.sqf new file mode 100644 index 0000000000..b3cdfd8405 --- /dev/null +++ b/addons/common/functions/fnc_canDig.sqf @@ -0,0 +1,31 @@ +/* + * Author: Ruthberg, commy2 + * Checks if the player can dig on the surface below (enough dust). + * + * Arguments: + * 0: Unit + * + * Return Value: + * Can Dig + * + * Example: + * [ACE_player] call ace_common_fnc_canDig + * + * Public: No + */ +#include "script_component.hpp" + +params ["_unit"]; + +private _posASL = getPosASL _unit; + +if ((getPosATL _unit) select 2 > 0.05 || // Walking on objects, such as buildings, pavements, etc. + {surfaceIsWater _posASL} // posATL in low water (not as low to allow awalking) is negative +) exitWith {false}; + +private _surfaceClass = (surfaceType _posASL) select [1]; +private _surfaceType = getText (configFile >> "CfgSurfaces" >> _surfaceClass >> "soundEnviron"); +private _surfaceDust = getNumber (configFile >> "CfgSurfaces" >> _surfaceClass >> "dust"); +TRACE_2("Surface",_surfaceType,_surfaceDust); + +!(_surfaceType in DIG_SURFACE_BLACKLIST) && {_surfaceDust >= 0.1} diff --git a/addons/common/functions/fnc_getMapData.sqf b/addons/common/functions/fnc_getMapData.sqf index ed7e7383e4..4906966299 100644 --- a/addons/common/functions/fnc_getMapData.sqf +++ b/addons/common/functions/fnc_getMapData.sqf @@ -22,81 +22,87 @@ if (_map in ["tanoa"]) exitWith { [-18, 0] }; if (_map in ["altis"]) exitWith { [40, 0] }; if (_map in ["stratis"]) exitWith { [40, 0] }; -if (_map in ["abbottabad"]) exitWith { [34, 1256] }; //Abbottabad elevation 1256m (Wikipedia) -if (_map in ["abel"]) exitWith { [39, 0] }; //CWR2 Malden +if (_map in ["abbottabad"]) exitWith { [34, 1256] }; // Abbottabad elevation 1256m (Wikipedia) +if (_map in ["abel"]) exitWith { [39, 0] }; // CWR2 Malden if (_map in ["abramia"]) exitWith { [60, 0] }; if (_map in ["af_kandahar_province"]) exitWith { [42, 0] }; if (_map in ["angel"]) exitWith { [38, 0] }; if (_map in ["anim_helvantis_v2"]) exitWith { [50, 0] }; if (_map in ["australia"]) exitWith { [-25, 0] }; -if (_map in ["baranow", "ivachev", "panavo", "staszow"]) exitWith { [50, 148.1] }; //IFA3LITE - default elevationOffset +if (_map in ["baranow", "ivachev", "panavo", "staszow"]) exitWith { [50, 148.1] }; // IFA3LITE - default elevationOffset if (_map in ["beketov"]) exitWith { [55, 0] }; +if (_map in ["blud_cordelia"]) exitWith { [12, 5] }; // Trung Si if (_map in ["bootcamp_acr"]) exitWith { [50, 0] }; if (_map in ["bornholm"]) exitWith { [55, 0] }; if (_map in ["bozcaada"]) exitWith { [40, 0] }; -if (_map in ["cain"]) exitWith { [40, 0] }; //CWR2 Kolgujev +if (_map in ["cain"]) exitWith { [40, 0] }; // CWR2 Kolgujev if (_map in ["caribou"]) exitWith { [68, 0] }; -if (_map in ["cartercity"]) exitWith { [43, 130] }; //Pecher, based on Grozny (1995 - 1996) elevation 130m (Wikipedia) +if (_map in ["cartercity"]) exitWith { [43, 130] }; // Pecher, based on Grozny (1995 - 1996) elevation 130m (Wikipedia) if (_map in ["catalina"]) exitWith { [33, 0] }; if (_map in ["chernarus", "chernarus_summer", "chernarus_winter"]) exitWith { [50, 0] }; if (_map in ["chernobylzone", "chernobylzonea2"]) exitWith { [51, 0] }; if (_map in ["clafghan"]) exitWith { [34, 640] }; -if (_map in ["colleville"]) exitWith { [49, 0] }; //IFA3LITE, Omaha Beach 1944 -if (_map in ["csj_lawlands", "uns_dong_ha"]) exitWith { [12, 0] }; //Unsung Mod -if (_map in ["csj_sea"]) exitWith { [15, 0] }; //Unsung Mod -if (_map in ["dakrong"]) exitWith { [16, 0] }; //Unsung Mod +if (_map in ["colleville"]) exitWith { [49, 0] }; // IFA3LITE, Omaha Beach 1944 +if (_map in ["csj_lawlands", "uns_dong_ha"]) exitWith { [12, 0] }; // Unsung Mod +if (_map in ["csj_sea"]) exitWith { [15, 0] }; // Unsung Mod +if (_map in ["dakrong"]) exitWith { [16, 0] }; // Unsung Mod if (_map in ["desert_e"]) exitWith { [40, 800] }; -if (_map in ["desert_island"]) exitWith { [40, 0] }; //CWR2 Desert Island -if (_map in ["dya"]) exitWith { [34, 110] }; //Diyala Iraq - default elevationOffset -if (_map in ["eden"]) exitWith { [45, 0] }; //CWR2 Everon +if (_map in ["desert_island"]) exitWith { [40, 0] }; // CWR2 Desert Island +if (_map in ["dya"]) exitWith { [34, 110] }; // Diyala Iraq - default elevationOffset +if (_map in ["eden"]) exitWith { [45, 0] }; // CWR2 Everon if (_map in ["esseker"]) exitWith { [43, 2000] }; -if (_map in ["evergreen"]) exitWith { [41, 0] }; //Burgazada, Turkey - default elevationOffset +if (_map in ["evergreen"]) exitWith { [41, 0] }; // Burgazada, Turkey - default elevationOffset if (_map in ["fallujah"]) exitWith { [33, 0] }; if (_map in ["fata"]) exitWith { [33, 1347] }; if (_map in ["gorgona"]) exitWith { [43, 0] }; -if (_map in ["hellskitchen", "hellskitchens"]) exitWith { [32, 900] }; //Sangin summer, Sangin winter - Sangin elevation 888m (Wikipedia) +if (_map in ["hellskitchen", "hellskitchens"]) exitWith { [32, 900] }; // Sangin summer, Sangin winter - Sangin elevation 888m (Wikipedia) if (_map in ["hindukush"]) exitWith { [36, 0] }; +if (_map in ["i44_omaha_v2"]) exitWith { [49, 0] }; if (_map in ["imrali", "imralispring"]) exitWith { [40, 0] }; if (_map in ["intro"]) exitWith { [40, 0] }; if (_map in ["isladuala3"]) exitWith { [-19, 0] }; -if (_map in ["jacobi"]) exitWith { [34, 2000] }; //default elevationOffset +if (_map in ["jacobi"]) exitWith { [34, 2000] }; // default elevationOffset if (_map in ["kapaulio"]) exitWith { [0, 0] }; -if (_map in ["kerama"]) exitWith { [26, 0] }; //Kerama Islands, Japan - default elevationOffset -if (_map in ["khe_sanh"]) exitWith { [17, 0] }; //Unsung Mod +if (_map in ["kerama"]) exitWith { [26, 0] }; // Kerama Islands, Japan - default elevationOffset +if (_map in ["khe_sanh"]) exitWith { [17, 0] }; // Unsung Mod if (_map in ["kholm"]) exitWith { [36, 0] }; -if (_map in ["kidal"]) exitWith { [18, 0] }; //Kidal, Mali - default elevationOffset +if (_map in ["kidal"]) exitWith { [18, 0] }; // Kidal, Mali - default elevationOffset if (_map in ["koplic"]) exitWith { [42, 0] }; if (_map in ["kunduz"]) exitWith { [37, 0] }; -if (_map in ["lingor", "lingor3"]) exitWith { [-4, 0] }; +if (_map in ["lingor", "lingor3", "dingor"]) exitWith { [-4, 0] }; if (_map in ["lost", "lostw"]) exitWith { [60, 0] }; if (_map in ["malvinas"]) exitWith { [-52, 0] }; -if (_map in ["marenice"]) exitWith { [51, 0] }; //CSA38 Mod (Czechoslovak army 1938 - Munich crisis), Lisatian Mountains. +if (_map in ["marenice"]) exitWith { [51, 0] }; // CSA38 Mod (Czechoslovak army 1938 - Munich crisis), Lisatian Mountains. if (_map in ["mcn_aliabad"]) exitWith { [36, 0] }; +if (_map in ["mcn_neaville", "mcn_neaville_winter"]) exitWith { [45, 0] }; // I44: Neaville, I44: Neaville (Winter) if (_map in ["mef_alaska"]) exitWith { [60, 5] }; -if (_map in ["mog"]) exitWith { [2, 0] }; //Mogadishu, Somalia +if (_map in ["mog"]) exitWith { [2, 0] }; // Mogadishu, Somalia if (_map in ["mountains_acr"]) exitWith { [35, 2000] }; +if (_map in ["mske"]) exitWith { [35, 0] }; // MSKE 2017 if (_map in ["nam2"]) exitWith { [14, 0] }; if (_map in ["namalsk"]) exitWith { [65, 0] }; if (_map in ["napf", "napfwinter"]) exitWith { [47, 0] }; -if (_map in ["newyork_lumnuon"]) exitWith { [41, 5] }; //Governer´s Island, New York - default elevationOffset -if (_map in ["noe"]) exitWith { [45, 0] }; //CWR2 Nogova +if (_map in ["newyork_lumnuon"]) exitWith { [41, 5] }; // Governer´s Island, New York - default elevationOffset +if (_map in ["noe"]) exitWith { [45, 0] }; // CWR2 Nogova if (_map in ["panthera3", "winthera3"]) exitWith { [46, 0] }; -if (_map in ["phu_bai", "rockwall", "us101_cao_bang"]) exitWith { [14, 0] }; //Unsung Mod -if (_map in ["pianosa_aut"]) exitWith { [43, 0] }; //Pianosa, Italy - default elevationOffset -if (_map in ["pja305"]) exitWith { [0, 0] }; //G.O.S N'Ziwasogo -if (_map in ["pja306"]) exitWith { [35, 0] }; //G.O.S Kalu Khan -if (_map in ["pja307"]) exitWith { [17, 0] }; //F.S.F Daryah -if (_map in ["pja308"]) exitWith { [36, 0] }; //G.O.S Gunkizli -if (_map in ["pja310"]) exitWith { [36, 0] }; //G.O.S Al Rayak -if (_map in ["pja312"]) exitWith { [16, 0] }; //G.O.S Song Bin Tanh +if (_map in ["phu_bai", "rockwall", "us101_cao_bang"]) exitWith { [14, 0] }; // Unsung Mod +if (_map in ["pianosa_aut"]) exitWith { [43, 0] }; // Pianosa, Italy - default elevationOffset +if (_map in ["pja305"]) exitWith { [0, 0] }; // G.O.S N'Ziwasogo +if (_map in ["pja306"]) exitWith { [35, 0] }; // G.O.S Kalu Khan +if (_map in ["pja307"]) exitWith { [17, 0] }; // F.S.F Daryah +if (_map in ["pja308"]) exitWith { [36, 0] }; // G.O.S Gunkizli +if (_map in ["pja310"]) exitWith { [36, 0] }; // G.O.S Al Rayak +if (_map in ["pja312"]) exitWith { [16, 0] }; // G.O.S Song Bin Tanh +if (_map in ["pja314"]) exitWith { [46, 0] }; // G.O.S Leskovets +if (_map in ["plr_bulge"]) exitWith { [49, 0] }; // I44: Battle of the Bulge if (_map in ["porquerolles"]) exitWith { [43, 0] }; if (_map in ["porto"]) exitWith { [40, 0] }; if (_map in ["provinggrounds_pmc"]) exitWith { [35, 100] }; if (_map in ["reshmaan"]) exitWith { [35, 2000] }; -if (_map in ["rungsat"]) exitWith { [10, 0] }; //Unsung Mod +if (_map in ["rungsat"]) exitWith { [10, 0] }; // Unsung Mod if (_map in ["sara", "sara_dbe1"]) exitWith { [40, 0] }; if (_map in ["saralite"]) exitWith { [40, 0] }; -if (_map in ["sb3"]) exitWith { [53, 25] }; //TrpUebPl Einfelde Nord (Munster North Training Area, Germany) - default elevationOffset +if (_map in ["sb3"]) exitWith { [53, 25] }; // TrpUebPl Einfelde Nord (Munster North Training Area, Germany) - default elevationOffset if (_map in ["sfp_sturko"]) exitWith { [56, 0] }; if (_map in ["sfp_wamako"]) exitWith { [14, 0] }; if (_map in ["shapur_baf"]) exitWith { [35, 100] }; @@ -105,13 +111,13 @@ if (_map in ["takistan"]) exitWith { [35, 2000] }; if (_map in ["thirsk"]) exitWith { [65, 0] }; if (_map in ["tilos"]) exitWith { [36, 0] }; if (_map in ["uhao"]) exitWith { [21, 0] }; -if (_map in ["uns_idv", "uns_ptv"]) exitWith { [13, 0] }; //Unsung Mod +if (_map in ["uns_idv", "uns_ptv"]) exitWith { [13, 0] }; // Unsung Mod if (_map in ["utes"]) exitWith { [50, 0] }; -if (_map in ["vt5"]) exitWith { [61, 100] }; //Valtatie 5, Finland - default elevationOffset +if (_map in ["vt5"]) exitWith { [61, 100] }; // Valtatie 5, Finland - default elevationOffset if (_map in ["wake"]) exitWith { [19, 0] }; if (_map in ["waziristan"]) exitWith { [33, 0] }; -if (_map in ["wintermap"]) exitWith { [61, 0] }; //Nordkvingo - default elevationOffset -if (_map in ["wintertown", "wintertowna3"]) exitWith { [39, 600] }; //U.S. state Kansas mean elevation 610m (Wikipedia) +if (_map in ["wintermap"]) exitWith { [61, 0] }; // Nordkvingo - default elevationOffset +if (_map in ["wintertown", "wintertowna3"]) exitWith { [39, 600] }; // U.S. state Kansas mean elevation 610m (Wikipedia) if (_map in ["woodland_acr"]) exitWith { [50, 0] }; if (_map in ["xcam_prototype"]) exitWith { [35, 0] }; if (_map in ["xcam_taunus"]) exitWith { [50, 0] }; diff --git a/addons/common/functions/fnc_setName.sqf b/addons/common/functions/fnc_setName.sqf index 1b2b515ec2..f4858b877b 100644 --- a/addons/common/functions/fnc_setName.sqf +++ b/addons/common/functions/fnc_setName.sqf @@ -13,6 +13,7 @@ #include "script_component.hpp" params ["_unit"]; +TRACE_3("setName",_unit,alive _unit,name _unit); if (isNull _unit || {!alive _unit}) exitWith {}; diff --git a/addons/common/functions/fnc_setVariablePublic.sqf b/addons/common/functions/fnc_setVariablePublic.sqf index 5eeff87aee..d1dcc4c922 100644 --- a/addons/common/functions/fnc_setVariablePublic.sqf +++ b/addons/common/functions/fnc_setVariablePublic.sqf @@ -48,6 +48,7 @@ TRACE_2("Starting Embargo", _varName, _delay); //If value at start of embargo doesn't equal current, then broadcast and start new embargo if (!(_value isEqualTo _curValue)) then { + _this set [2, _curValue]; _this call FUNC(setVariablePublic); }; }, _this, _delay] call CBA_fnc_waitAndExecute; diff --git a/addons/common/script_component.hpp b/addons/common/script_component.hpp index af8e0a5229..66f7ac63bf 100644 --- a/addons/common/script_component.hpp +++ b/addons/common/script_component.hpp @@ -19,3 +19,16 @@ #define VERSION_CONFIG_COMMON VERSION_CONFIG;\ versionDesc = "ACE 3";\ versionAct = QUOTE(call COMPILE_FILE(init_versionTooltip)) + + +#define DIG_SURFACE_BLACKLIST [ \ + "concrete", "concrete_exp", "concrete_int", "int_concrete", "int_concrete_exp", \ + "pavement_exp", "int_pavement_exp", \ + "tiling", "tiles_int", "int_tiles", \ + "roof_tin", "roof_tiles", "rooftiles_exp", \ + "tarmac", "asphalt_exp", \ + "stones_exp", "rock", "stony", \ + "metal", "gridmetal_exp", "metalplate_exp", "int_metalplate_exp", "metal_int", "wavymetal", "wavymetal_exp", "int_metal", "steel_exp", \ + "lino_exp", "int_lino_exp", "int_mat_exp", \ + "wood", "wood_int", "int_wood", "softwood_exp", "int_softwood_exp", "int_solidwood_exp" \ +] diff --git a/addons/concertina_wire/XEH_init.sqf b/addons/concertina_wire/XEH_init.sqf index dc6424f172..b24353b4df 100644 --- a/addons/concertina_wire/XEH_init.sqf +++ b/addons/concertina_wire/XEH_init.sqf @@ -1,3 +1,3 @@ #include "script_component.hpp" params ["_wire"]; -_wire addEventHandler ["HandleDamage", FUNC(handleDamage)]; +_wire addEventHandler ["HandleDamage", {call FUNC(handleDamage)}]; diff --git a/addons/concertina_wire/functions/fnc_dismount.sqf b/addons/concertina_wire/functions/fnc_dismount.sqf index 9dcd50cc4a..f2d3bc76c1 100644 --- a/addons/concertina_wire/functions/fnc_dismount.sqf +++ b/addons/concertina_wire/functions/fnc_dismount.sqf @@ -23,7 +23,7 @@ if (uiNamespace getVariable [QEGVAR(interact_menu,cursorMenuOpened),false]) exit params ["_wire", "_unit"]; private _config = (configFile >> "CfgVehicles" >> typeOf _unit); -private _delay = [120, 60] select (getNumber (_config >> "engineer") == 1 || {getNumber (_config >> "canDeactivateMines") == 1}); +private _delay = [45, 30] select ([_unit] call EFUNC(common,isEngineer) || {[_unit] call EFUNC(common,isEOD)}); // TODO: Animation? [ diff --git a/addons/cookoff/ACE_Settings.hpp b/addons/cookoff/ACE_Settings.hpp index d77a828fad..13ef915ffb 100644 --- a/addons/cookoff/ACE_Settings.hpp +++ b/addons/cookoff/ACE_Settings.hpp @@ -12,10 +12,16 @@ class ACE_Settings { value = 1; typeName = "BOOL"; }; - class GVAR(enableAmmoCookoff) { + class GVAR(enableAmmoCookoff) { // For CBA Setting Switch: we can eliminate and just use (ammoCookoffDuration == 0) displayName = CSTRING(enableAmmoCookoff_name); description = CSTRING(enableAmmoCookoff_tooltip); value = 1; typeName = "BOOL"; }; + class GVAR(ammoCookoffDuration) { + displayName = CSTRING(ammoCookoffDuration_name); + description = CSTRING(ammoCookoffDuration_tooltip); + value = 1; + typeName = "SCALAR"; + }; }; diff --git a/addons/cookoff/XEH_PREP.hpp b/addons/cookoff/XEH_PREP.hpp index 897fb10153..f1deb8eaed 100644 --- a/addons/cookoff/XEH_PREP.hpp +++ b/addons/cookoff/XEH_PREP.hpp @@ -4,5 +4,5 @@ PREP(engineFire); PREP(cookOff); PREP(cookOffBox); PREP(blowOffTurret); -PREP(secondaryExplosions); PREP(detonateAmmunition); +PREP(getVehicleAmmo); diff --git a/addons/cookoff/XEH_postInit.sqf b/addons/cookoff/XEH_postInit.sqf index 4e65bf8886..b7bed03475 100644 --- a/addons/cookoff/XEH_postInit.sqf +++ b/addons/cookoff/XEH_postInit.sqf @@ -80,11 +80,10 @@ GVAR(cacheTankDuplicates) = call CBA_fnc_createNamespace; // secondary explosions ["AllVehicles", "killed", { params ["_vehicle"]; - if (_vehicle getVariable [QGVAR(enable),GVAR(enable)]) then { - _vehicle call FUNC(secondaryExplosions); - if (_vehicle getVariable [QGVAR(enableAmmoCookoff), GVAR(enableAmmoCookoff)]) then { - [_vehicle, magazinesAmmo _vehicle] call FUNC(detonateAmmunition); - }; + if (_vehicle getVariable [QGVAR(enableAmmoCookoff), GVAR(enableAmmoCookoff)]) then { + if (GVAR(ammoCookoffDuration) == 0) exitWith {}; + ([_vehicle] call FUNC(getVehicleAmmo)) params ["_mags", "_total"]; + [_vehicle, _mags, _total] call FUNC(detonateAmmunition); }; }, nil, ["Man","StaticWeapon"]] call CBA_fnc_addClassEventHandler; diff --git a/addons/cookoff/functions/fnc_cookOff.sqf b/addons/cookoff/functions/fnc_cookOff.sqf index 7ae36670ac..b75eaf9eb3 100644 --- a/addons/cookoff/functions/fnc_cookOff.sqf +++ b/addons/cookoff/functions/fnc_cookOff.sqf @@ -132,6 +132,6 @@ if (local _vehicle) then { if (local _vehicle) then { _vehicle setDamage 1; }; - }, [_vehicle, _effects], 4 + random 20] call CBA_fnc_waitAndExecute; - }, [_vehicle, _effects, _positions], 3 + random 15] call CBA_fnc_waitAndExecute; -}, _vehicle, 0.5 + random 5] call CBA_fnc_waitAndExecute; + }, [_vehicle, _effects], 14] call CBA_fnc_waitAndExecute; + }, [_vehicle, _effects, _positions], 10.5] call CBA_fnc_waitAndExecute; +}, _vehicle, 3] call CBA_fnc_waitAndExecute; diff --git a/addons/cookoff/functions/fnc_cookOffBox.sqf b/addons/cookoff/functions/fnc_cookOffBox.sqf index 025df70628..6f834a15b6 100644 --- a/addons/cookoff/functions/fnc_cookOffBox.sqf +++ b/addons/cookoff/functions/fnc_cookOffBox.sqf @@ -44,9 +44,10 @@ if (local _box) then { // These functions are smart and do all the cooking off work if (local _box) then { - _box call FUNC(secondaryExplosions); if (_box getVariable [QGVAR(enableAmmoCookoff), GVAR(enableAmmoCookoff)]) then { - [_box, magazinesAmmo _box] call FUNC(detonateAmmunition); + if (GVAR(ammoCookoffDuration) == 0) exitWith {}; + ([_box] call FUNC(getVehicleAmmo)) params ["_mags", "_total"]; + [_box, _mags, _total] call FUNC(detonateAmmunition); }; // This shit is busy being on fire, magazines aren't accessible/usable @@ -70,6 +71,6 @@ if (local _box) then { if (local _box) then { _box setDamage 1; }; - }, [_box, _effects], 45 + random 75] call CBA_fnc_waitAndExecute; // Give signifcant time for ammo cookoff to occur (perhaps keep the box alive until all cooked off?) - }, [_box, _effects], 3 + random 15] call CBA_fnc_waitAndExecute; -}, _box, 0.5 + random 5] call CBA_fnc_waitAndExecute; + }, [_box, _effects], 82.5] call CBA_fnc_waitAndExecute; // Give signifcant time for ammo cookoff to occur (perhaps keep the box alive until all cooked off?) + }, [_box, _effects], 10.5] call CBA_fnc_waitAndExecute; +}, _box, 3] call CBA_fnc_waitAndExecute; diff --git a/addons/cookoff/functions/fnc_detonateAmmunition.sqf b/addons/cookoff/functions/fnc_detonateAmmunition.sqf index d7d7114e7d..20ec84cbbd 100644 --- a/addons/cookoff/functions/fnc_detonateAmmunition.sqf +++ b/addons/cookoff/functions/fnc_detonateAmmunition.sqf @@ -4,6 +4,10 @@ * * Arguments: * 0: vehicle + * 1: Ammo Array + * 0: Magazine Classname + * 1: Ammo Count + * 2: Total Ammo Count * * Return Value: * None @@ -16,7 +20,7 @@ #include "script_component.hpp" #define MAX_TIME_BETWEEN_AMMO_DET 25 -params ["_vehicle", "_magazines"]; +params ["_vehicle", "_magazines", "_totalAmmo"]; if (isNull _vehicle) exitWith {}; // vehicle got deleted if (_magazines isEqualTo []) exitWith {}; // nothing to detonate anymore @@ -27,21 +31,22 @@ private _magazine = _magazines select _magazineIndex; _magazine params ["_magazineClassname", "_amountOfMagazines"]; if (_amountOfMagazines > 0) exitWith { - private _newMagCount = _amountOfMagazines - floor(1 + random(6)); - if (_newMagCount <= 0) then { + private _removed = _amountOfMagazines min floor(1 + random(6 / GVAR(ammoCookoffDuration))); + + _amountOfMagazines = _amountOfMagazines - _removed; + if (_amountOfMagazines <= 0) then { _magazines deleteAt _magazineIndex; } else { - _magazine set [1, _newMagCount]; // clear out the magazine + _magazine set [1, _amountOfMagazines]; // clear out the magazine }; - private _timeBetweenAmmoDetonation = (random 7) * (1 / random (_amountOfMagazines)) min MAX_TIME_BETWEEN_AMMO_DET; - _timeBetweenAmmoDetonation = _timeBetweenAmmoDetonation max 0.1; + private _timeBetweenAmmoDetonation = (((random 10) / (sqrt _totalAmmo)) min MAX_TIME_BETWEEN_AMMO_DET) max 0.1; + TRACE_2("",_totalAmmo,_timeBetweenAmmoDetonation); + _totalAmmo = _totalAmmo - _removed; private _ammo = getText (configFile >> "CfgMagazines" >> _magazineClassname >> "ammo"); private _ammoCfg = configFile >> "CfgAmmo" >> _ammo; private _speedOfAmmo = getNumber (configFile >> "CfgMagazines" >> _magazineClassname >> "initSpeed"); - private _simulationTime = getNumber (_ammoCfg >> "simulation"); - private _caliber = getNumber (_ammoCfg >> "caliber"); private _simType = getText (_ammoCfg >> "simulation"); private _effect2pos = _vehicle selectionPosition "destructionEffect2"; @@ -60,7 +65,7 @@ if (_amountOfMagazines > 0) exitWith { private _velVec = _vectorAmmo vectorMultiply _speed; _projectile setVectorDir _velVec; _projectile setVelocity _velVec; - [ACE_player, _projectile, [1,0,0,1]] call EFUNC(frag,addTrack); + // [ACE_player, _projectile, [1,0,0,1]] call EFUNC(frag,addTrack); // visual debuging from ace_frag } else { _projectile setDamage 1; }; @@ -124,6 +129,6 @@ if (_amountOfMagazines > 0) exitWith { }; }; - [FUNC(detonateAmmunition), [_vehicle, _magazines], _timeBetweenAmmoDetonation] call CBA_fnc_waitAndExecute; + [FUNC(detonateAmmunition), [_vehicle, _magazines, _totalAmmo], _timeBetweenAmmoDetonation] call CBA_fnc_waitAndExecute; }; -[FUNC(detonateAmmunition), [_vehicle, _magazines], random 3] call CBA_fnc_waitAndExecute; +ERROR_1("mag with no ammo - %1", _magazine); diff --git a/addons/cookoff/functions/fnc_getVehicleAmmo.sqf b/addons/cookoff/functions/fnc_getVehicleAmmo.sqf new file mode 100644 index 0000000000..67c7f6e56e --- /dev/null +++ b/addons/cookoff/functions/fnc_getVehicleAmmo.sqf @@ -0,0 +1,56 @@ +/* + * Author: PabstMirror + * Gets all magazines inside of a vehicle. + * + * Arguments: + * 0: Vehicle + * + * Return Value: + * 0: Ammo Array + * 0: Magazine Classname + * 1: Ammo Count + * 1: Total Ammo Count + * + * Example: + * [vehicle player] call ace_cookoff_fnc_getVehicleAmmo + * + * Public: No + */ +#include "script_component.hpp" + +params ["_vehicle"]; +TRACE_1("getVehicleAmmo",_vehicle); + +private _ammoToDetonate = []; +private _totalAmmo = 0; + +// Get ammo from turrets +{ + _x params ["_mag", "", "_count"]; + if (_count > 0) then { + _ammoToDetonate pushBack [_mag, _count]; + _totalAmmo = _totalAmmo + _count; + }; +} forEach (magazinesAllTurrets _vehicle); + +// Get ammo from cargo space +{ + _x params ["_mag", "_count"]; + if (_count > 0) then { + _ammoToDetonate pushBack [_mag, _count]; + _totalAmmo = _totalAmmo + _count; + }; +} forEach (magazinesAmmoCargo _vehicle); + +// Get ammo from transportAmmo / ace_rearm +private _vehCfg = configFile >> "CfgVehicles" >> typeOf _vehicle; +if (((getNumber (_vehCfg >> "transportAmmo")) > 1000) || {isClass (_vehCfg >> "ACE_Actions" >> "ACE_MainActions" >> QEGVAR(rearm,TakeAmmo))}) then { + TRACE_1("transportAmmo vehicle - adding virtual ammo",typeOf _vehicle); + + _ammoToDetonate pushBack ["2000Rnd_65x39_belt", 2000]; + _totalAmmo = _totalAmmo + 2000; + _ammoToDetonate pushBack ["20Rnd_105mm_HEAT_MP", 100]; + _totalAmmo = _totalAmmo + 100; +}; + +[_ammoToDetonate, _totalAmmo] diff --git a/addons/cookoff/functions/fnc_secondaryExplosions.sqf b/addons/cookoff/functions/fnc_secondaryExplosions.sqf deleted file mode 100644 index 34a1d28ea8..0000000000 --- a/addons/cookoff/functions/fnc_secondaryExplosions.sqf +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Author: Maddmatt, commy2 - * Generate an amount of secondary explosions - * - * Arguments: - * 0: Vehicle - * 1: Amount - * - * Return Value: - * None - * - * Public: No - */ -#include "script_component.hpp" - -#define SECONDARIES_DELAY (1 + random 45) - -params ["_vehicle", "_amount"]; - -if (isNil "_amount") then { - // calculate amount of secondary explosions if not specified - _amount = 0; - - { - _x params ["_magazine", "_count"]; - - private _ammo = getText (_magazine call CBA_fnc_getItemConfig >> "ammo"); - - if (IS_EXPLOSIVE_AMMO(_ammo)) then { - if (_ammo isKindOf "ShellBase") then { - ADD(_amount,_count); - } else { - ADD(_amount,_count/50); - }; - }; - } forEach magazinesAmmo _vehicle; -}; - -if (_amount <= 0) exitWith {}; - -private _fnc_secondaryExplosion = { - params ["_vehicle", "_amount", "_fnc_secondaryExplosion"]; - - private _position = _vehicle modelToWorld (_vehicle selectionPosition "destructionEffect2"); - - // these CfgAmmo objects are always global - createVehicle ["SmallSecondary", _position, [], 0, "CAN_COLLIDE"]; - - DEC(_amount); - - if (!isNull _vehicle && {_amount > 0}) then { - [_fnc_secondaryExplosion, [_vehicle, _amount, _fnc_secondaryExplosion], SECONDARIES_DELAY] call CBA_fnc_waitAndExecute; - }; -}; - -[_fnc_secondaryExplosion, [_vehicle, _amount, _fnc_secondaryExplosion], SECONDARIES_DELAY] call CBA_fnc_waitAndExecute; - -nil - -/*SencondaryExplosion - SecondaryExp - SecondarySmoke - GrenadeExploLight -*/ diff --git a/addons/cookoff/stringtable.xml b/addons/cookoff/stringtable.xml index ecf60d1f39..72793312eb 100644 --- a/addons/cookoff/stringtable.xml +++ b/addons/cookoff/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -8,7 +8,8 @@ Включить воспламенение 誘爆を有効化 쿡오프 현상 활성화 - Aktywuj efekty wybuchu amunicji + Aktywuj efekty samozapłonu amunicji + Activer Enables cook off and related vehicle destruction effects. @@ -17,7 +18,7 @@ Включает воспламенение и сопутствующие эффекты повреждения техники. 誘爆を有効化し、車両が誘爆によって破壊されていきます。 쿡오프 현상을 활성화 하고 관련된 차량에 폭발 이펙트를 적용합니다. - Aktywuje efekt wybuchu amunicji na zniszczonych pojazdach. + Aktywuje efekt samozapłonu amunicji na zniszczonych pojazdach. Wreck (Turret) @@ -38,24 +39,36 @@ 弾薬箱に誘爆を有効化 Selbstzündung für Munitionskisten ermöglichen 탄약 상자 쿡오프 현상 활성화 - Aktywuje explozje skrzynek z amunicją + Aktywuj samozapłon skrzyń z amunicją Enables cooking off of ammo boxes. 弾薬箱が誘爆するようになります。 Ermöglicht Selbstzündung von Munitionskisten. 탄약 상자에 쿡오프 현상을 적용합니다. + Aktywuje samozapłon skrzyń z amunicją Enable Ammunition cook off 弾薬の誘爆を有効化 Selbstzündung für Munition ermöglichen 탄약 쿡오프 현상 활성화 + Aktywuj samozapłon amunicji Enables Ammunition cook off. Fires ammunition projectiles while vehicle is on fire and has ammunition. 弾薬が誘爆します。車両が燃えると、搭載している弾薬が激しく燃え上がりす。 Ermöglicht Selbstzündung von Munition. Feuert Projektile der Munition ab, solange das Fahrzeug brennt und Munition besitzt. + Aktywuje samozapłon amunicji. Wystrzeliwuje pociski podczas gdy pojazd płonie i posiada amunicję. + + + Ammunition cook off duration + Czas trwania samozapłonu amunicji + + + Multiplier for how long cook off lasts [Setting to 0 will disable ammo cookoff] + Active le et les effets de destructions assosicée aux vehicules. + Mnożnik decydujący jak długo ma trwać samozapłon amunicji [Ustawienie na 0 spowoduje wyłącznie samozapłonu] - + \ No newline at end of file diff --git a/addons/dogtags/stringtable.xml b/addons/dogtags/stringtable.xml index 75a12ccff2..3e13f3621e 100644 --- a/addons/dogtags/stringtable.xml +++ b/addons/dogtags/stringtable.xml @@ -9,6 +9,7 @@ ドッグ タグ Hundemarke 군번줄 + Plaque d'identification Check Dog Tag @@ -18,6 +19,7 @@ ドッグ タグを見る Hundemarke prüfen 군번줄 확인 + Vérifier les plaques d'identification Check @@ -27,6 +29,7 @@ 見る Prüfen 확인 + Vérifier Take @@ -36,6 +39,7 @@ 取る Nehmen 회수 + Prendre Dogtag taken from %1... @@ -45,6 +49,7 @@ %1からドッグ タグを取っている・・・ Hundemarke von %1 genommen ... %1로부터 군번줄을 회수했습니다... + Plaque d'identification pris sur %1... Somebody else has already taken the dogtag... @@ -54,6 +59,8 @@ すでに誰かがドッグ タグを取っているようだ・・・ Jemand anderes hat bereits die Hundemarke genommen ... 누군가 이미 군번줄을 회수해갔습니다... + Quelqu'un d'autre a déjâ pris les plaques d'identification... + diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml index d4ba515406..9b9296d3d4 100644 --- a/addons/explosives/stringtable.xml +++ b/addons/explosives/stringtable.xml @@ -882,6 +882,7 @@ Flara na linkę Stolperdraht-Leuchtrakete 조명지뢰 + Fusée éclairante avec fil de détente Type: Tripwire flare - Ignites a non-lethal flare when triggered.<br />Rounds: 1<br />Used on: Ground @@ -890,6 +891,7 @@ Typ: Flara na linkę - Wystrzeliwuje nieszkodliwą flarę przy nadepnięciu linki.<br/>Pociski: 1<br/>Używane na: ziemia Typ: Stolperdraht-Leuchtrakete - Schießt bei Auslösung eine nicht-tödliche Leuchtrakete ab.<br />Ladungen: 1<br />Benutzt auf: Boden 종류: 조명지뢰 - 작동시 무해한 조명을 사출합니다.<br />장탄수: 1<br />사용처: 지면 + Type : Fusée éclairante avec fil de détente - Allume une fusée éclairante lorsque déclenché. <br />Coups : 1<br />Utilisé sur : le sol diff --git a/addons/frag/XEH_postInit.sqf b/addons/frag/XEH_postInit.sqf index 20a6a1ca70..31f9515750 100644 --- a/addons/frag/XEH_postInit.sqf +++ b/addons/frag/XEH_postInit.sqf @@ -1,6 +1,6 @@ #include "script_component.hpp" -if (GVAR(EnableDebugTrace) && {!isMultiplayer}) then { +if (GVAR(enableDebugTrace) && {!isMultiplayer}) then { GVAR(traceFrags) = true; GVAR(autoTrace) = true; }; @@ -27,4 +27,3 @@ GVAR(cacheRoundsTypesToTrack) = [false] call CBA_fnc_createNamespace; #ifdef DEBUG_ENABLED_FRAG [true, true, 30] call FUNC(dev_debugAmmo); #endif - diff --git a/addons/frag/functions/fnc_addPfhRound.sqf b/addons/frag/functions/fnc_addPfhRound.sqf index a211752e98..f6cddbbd37 100644 --- a/addons/frag/functions/fnc_addPfhRound.sqf +++ b/addons/frag/functions/fnc_addPfhRound.sqf @@ -13,7 +13,7 @@ if (_round in GVAR(blackList)) exitWith { }; // Exit on max track -if ((count GVAR(objects)) > GVAR(MaxTrack)) exitWith {}; +if ((count GVAR(objects)) > GVAR(maxTrack)) exitWith {}; if ( _gun == ACE_player || diff --git a/addons/frag/functions/fnc_doSpall.sqf b/addons/frag/functions/fnc_doSpall.sqf index 5b9bf757c4..97c52062d1 100644 --- a/addons/frag/functions/fnc_doSpall.sqf +++ b/addons/frag/functions/fnc_doSpall.sqf @@ -103,6 +103,7 @@ for "_i" from 1 to _spallCount do { [ACE_player, _fragment, [1, 0.5, 0, 1]] call FUNC(addTrack); }; }; + _spread = 5 + (random 5); _spallCount = 3 + (random 5); for "_i" from 1 to _spallCount do { diff --git a/addons/frag/functions/fnc_findReflections.sqf b/addons/frag/functions/fnc_findReflections.sqf index f8c9685bda..dbde4d7a98 100644 --- a/addons/frag/functions/fnc_findReflections.sqf +++ b/addons/frag/functions/fnc_findReflections.sqf @@ -75,23 +75,18 @@ if (_zIndex < 5) then { private _explosions = []; { private _blist = _x select 1; - private _avgX = 0; - private _avgY = 0; - private _avgZ = 0; + private _avg = [0, 0, 0]; { - ADD(_avgX,_x select 0); - ADD(_avgY,_x select 1); - ADD(_avgZ,_x select 2); + _avg = _avg vectorAdd _x; } forEach _blist; _c = count _blist; - private _bpos = [_avgX / _c, _avgY / _c, _avgZ / _c]; + private _bpos = _avg vectorMultiply (1 / _c); private _distance = _pos vectorDistance _bpos; private _hitFactor = 1 - (((_distance / (_indirectHitRange * 4)) min 1) max 0); // _hitFactor = 1 / (_distance ^ 2); - private _hit = _indirectHit * _hitFactor; - _hit = (floor (_hit / 4)) min 500; + private _hit = (floor (_indirectHit * _hitFactor / 4)) min 500; SUB(_hit,_hit % 10); private _range = (floor (_indirectHitRange - (_distance / 4))) min 100; SUB(_range,_range % 2); diff --git a/addons/frag/functions/fnc_fired.sqf b/addons/frag/functions/fnc_fired.sqf index 6b12e09d76..96841dd7ac 100644 --- a/addons/frag/functions/fnc_fired.sqf +++ b/addons/frag/functions/fnc_fired.sqf @@ -30,7 +30,7 @@ if (isNil "_shouldAdd") then { _shouldAdd = false; }; - if (GVAR(SpallEnabled)) exitWith { + if (GVAR(spallEnabled)) exitWith { //Always want to run whenever spall is enabled? _shouldAdd = true; TRACE_2("SettingCache[spallEnabled]",_ammo,_shouldAdd); diff --git a/addons/frag/functions/fnc_frago.sqf b/addons/frag/functions/fnc_frago.sqf index 51ed23cfea..5481649b54 100644 --- a/addons/frag/functions/fnc_frago.sqf +++ b/addons/frag/functions/fnc_frago.sqf @@ -59,14 +59,14 @@ if (_warn) then { INFO_1("Ammo class %1 lacks proper explosive properties definitions for frag!",_shellType); }; -private _fragPower = (((_m / _c) + _k) ^ - (1 / 2)) * _gC; -_fragPower = _fragPower * 0.8; // Gunery equation is for a non-fragmenting metal, imperical value of 80% represents fragmentation +// Gunery equation is for a non-fragmenting metal, imperical value of 80% represents fragmentation +private _fragPower = 0.8 * (((_m / _c) + _k) ^ - (1 / 2)) * _gC; private _atlPos = ASLtoATL _lastPos; private _fragPowerRandom = _fragPower * 0.5; if ((_atlPos select 2) < 0.5) then { - _lastPos set [2, (_lastPos select 2) + 0.5]; + _lastPos vectorAdd [0, 0, 0.5]; }; // _manObjects = _atlPos nearEntities ["CaManBase", _fragRange]; @@ -96,71 +96,68 @@ _fragArcs set [360, 0]; private _doRandom = true; if (_isArmed && {!(_objects isEqualTo [])}) then { - if (GVAR(ReflectionsEnabled)) then { + if (GVAR(reflectionsEnabled)) then { [_lastPos, _shellType] call FUNC(doReflections); }; { //if (random(1) > 0.5) then { private _target = _x; if (alive _target) then { - private _boundingBox = boundingBox _target; + (boundingBox _target) params ["_boundingBoxA", "_boundingBoxB"]; + + private _cubic = ((abs (_boundingBoxA select 0)) + (_boundingBoxB select 0)) * ((abs (_boundingBoxA select 1)) + (_boundingBoxB select 1)) * ((abs (_boundingBoxA select 2)) + (_boundingBoxB select 2)); + + if (_cubic <= 1) exitWith {}; + _doRandom = true; + + private _targetVel = velocity _target; private _targetPos = getPosASL _target; - private _distance = _targetPos distance _lastPos; - private _add = (((_boundingBox select 1) select 2) / 2) + ((((_distance - (_fragpower / 8)) max 0) / _fragPower) * 10); - private _bbX = (abs ((_boundingBox select 0) select 0)) + ((_boundingBox select 1) select 0); - private _bbY = (abs ((_boundingBox select 0) select 1)) + ((_boundingBox select 1) select 1); - private _bbZ = (abs ((_boundingBox select 0) select 2)) + ((_boundingBox select 1) select 2); - private _cubic = _bbX * _bbY * _bbZ; - if (_cubic > 1) then { - _doRandom = true; + private _distance = _targetPos vectorDistance _lastPos; + private _add = ((_boundingBoxB select 2) / 2) + ((((_distance - (_fragpower / 8)) max 0) / _fragPower) * 10); - private _targetVel = velocity _target; + _targetPos = _targetPos vectorAdd [ + (_targetVel select 0) * (_distance / _fragPower), + (_targetVel select 1) * (_distance / _fragPower), + _add + ]; - _targetPos = _targetPos vectorAdd [ - (_targetVel select 0) * (_distance / _fragPower), - (_targetVel select 1) * (_distance / _fragPower), - _add - ]; + private _baseVec = _lastPos vectorFromTo _targetPos; - private _baseVec = _lastPos vectorFromTo _targetPos; - - private _dir = floor (_baseVec call CBA_fnc_vectDir); - private _currentCount = _fragArcs select _dir; - ISNILS(_currentCount,0); - if (_currentCount < 20) then { - private _count = ceil (random (sqrt (_m / 1000))); - private _vecVar = FRAG_VEC_VAR; - if (!(_target isKindOf "Man")) then { - _vecVar = ((sqrt _cubic) / 2000) + FRAG_VEC_VAR; - if ((crew _target) isEqualTo [] && {_count > 0}) then { - _count = 0 max (_count / 2); - }; + private _dir = floor (_baseVec call CBA_fnc_vectDir); + private _currentCount = RETDEF(_fragArcs select _dir,0); + if (_currentCount < 20) then { + private _count = ceil (random (sqrt (_m / 1000))); + private _vecVar = FRAG_VEC_VAR; + if (!(_target isKindOf "Man")) then { + ADD(_vecVar,(sqrt _cubic) / 2000); + if ((crew _target) isEqualTo [] && {_count > 0}) then { + _count = 0 max (_count / 2); }; - for "_i" from 1 to _count do { - private _vec = _baseVec vectorDiff [ - (_vecVar / 2) + (random _vecVar), - (_vecVar / 2) + (random _vecVar), - (_vecVar / 2) + (random _vecVar) - ]; - - private _fp = _fragPower - (random (_fragPowerRandom)); - private _vel = _vec vectorMultiply _fp; - - private _fragType = round (random ((count _fragTypes) - 1)); - private _fragObj = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; - // diag_log text format ["fp: %1 %2", _fp, typeOf _fragObj]; - _fragObj setPosASL _lastPos; - _fragObj setVectorDir _vec; - _fragObj setVelocity _vel; - if (GVAR(traceFrags)) then { - INC(GVAR(totalFrags)); - [ACE_player, _fragObj, [1,0,0,1]] call FUNC(addTrack); - }; - INC(_fragCount); - INC(_currentCount); - }; - _fragArcs set [_dir, _currentCount]; }; + for "_i" from 1 to _count do { + private _vec = _baseVec vectorDiff [ + (_vecVar / 2) + (random _vecVar), + (_vecVar / 2) + (random _vecVar), + (_vecVar / 2) + (random _vecVar) + ]; + + private _fp = _fragPower - (random (_fragPowerRandom)); + private _vel = _vec vectorMultiply _fp; + + private _fragType = round (random ((count _fragTypes) - 1)); + private _fragObj = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; + // diag_log text format ["fp: %1 %2", _fp, typeOf _fragObj]; + _fragObj setPosASL _lastPos; + _fragObj setVectorDir _vec; + _fragObj setVelocity _vel; + if (GVAR(traceFrags)) then { + INC(GVAR(totalFrags)); + [ACE_player, _fragObj, [1,0,0,1]] call FUNC(addTrack); + }; + INC(_fragCount); + INC(_currentCount); + }; + _fragArcs set [_dir, _currentCount]; }; }; //}; diff --git a/addons/frag/functions/fnc_masterPFH.sqf b/addons/frag/functions/fnc_masterPFH.sqf index d543c35bf7..f6adb56161 100644 --- a/addons/frag/functions/fnc_masterPFH.sqf +++ b/addons/frag/functions/fnc_masterPFH.sqf @@ -19,7 +19,7 @@ private _gcIndex = []; private _iter = 0; private _objectCount = count GVAR(objects); -while {_objectCount > 0 && {_iter < (GVAR(MaxTrackPerFrame) min _objectCount)}} do { +while {_objectCount > 0 && {_iter < (GVAR(maxTrackPerFrame) min _objectCount)}} do { if (GVAR(lastIterationIndex) >= _objectCount) then { GVAR(lastIterationIndex) = 0; diff --git a/addons/frag/functions/fnc_pfhRound.sqf b/addons/frag/functions/fnc_pfhRound.sqf index 1338e8fef9..f233fa45a6 100644 --- a/addons/frag/functions/fnc_pfhRound.sqf +++ b/addons/frag/functions/fnc_pfhRound.sqf @@ -32,8 +32,7 @@ _this set [1, getPosASL _round]; _this set [2, velocity _round]; if (_doSpall) then { - private ["_scale"]; - _scale = ((count GVAR(objects)) / GVAR(MaxTrackPerFrame)) max 0.1; + private _scale = ((count GVAR(objects)) / GVAR(maxTrackPerFrame)) max 0.1; [_round, _scale, _spallTrack, _foundObjectHPIds] call FUNC(spallTrack); }; diff --git a/addons/frag/functions/fnc_removePfhRound.sqf b/addons/frag/functions/fnc_removePfhRound.sqf index b9df275643..9241c7aecb 100644 --- a/addons/frag/functions/fnc_removePfhRound.sqf +++ b/addons/frag/functions/fnc_removePfhRound.sqf @@ -2,7 +2,7 @@ // THIS FUNCTION SHOULD NOT BE USED BECAUSE IT CAUSES AN SEARCH AND REBUILD -PARAMS_1(_round); +params ["_round"]; if (_round in GVAR(blackList)) then { REM(GVAR(blackList),_round); diff --git a/addons/frag/functions/fnc_startTracing.sqf b/addons/frag/functions/fnc_startTracing.sqf index d860d6635e..c697a8dca2 100644 --- a/addons/frag/functions/fnc_startTracing.sqf +++ b/addons/frag/functions/fnc_startTracing.sqf @@ -2,4 +2,4 @@ if (GVAR(tracesStarted)) exitWith {}; GVAR(tracesStarted) = true; -GVAR(traceID) = [FUNC(drawTraces)] call CBA_fnc_addPerFrameHandler; +GVAR(traceID) = [FUNC(drawTraces), 0, []] call CBA_fnc_addPerFrameHandler; diff --git a/addons/frag/stringtable.xml b/addons/frag/stringtable.xml index 5221af0651..8429cad3b3 100644 --- a/addons/frag/stringtable.xml +++ b/addons/frag/stringtable.xml @@ -172,7 +172,7 @@ (nur SP) Splitter-/Explosions-Debugging (Pouze SP) Vyžaduje restart mise/editoru. Aktivuje vizuální stopování fragmentace a úlomů pouze v režimu jednoho hráče. (Somente SP) Requer um reinício de missão / editor. Habilita o rastreamento visual de projéteis de fragmentação e estilhaçamento apenas no modo de jogo SP. - (SP seulement) Requiert un redémarrage de mission ou de l'éditeur. Active les traceurs visuels de fragmentation et d'éclats en mode solo seulement + (SP seulement) Requiert un redémarrage de mission ou de l'éditeur. Active les traceurs visuels de fragmentation et d'éclats en mode solo seulement. (Csak SP) Küldetés/Editor újraindítás szükséges. Engedélyezi a repeszek és pattogzó lövedékek vizuális nyomkövetését, csak egyjátékos módok alatt. (Только для одиночной игры) Требует перезапуска миссии/редактора. Включает визуальные следы от осколков и обломков в режиме одиночной игры. (Solo SP) Richiede un restart editor/missione. Abilita il tracciamento visivo di schegge da frammentazione/spalling in modalità Giocatore Singolo. diff --git a/addons/gforces/functions/fnc_addPFEH.sqf b/addons/gforces/functions/fnc_addPFEH.sqf index 9bd4d7fa1a..bf320e0fe5 100644 --- a/addons/gforces/functions/fnc_addPFEH.sqf +++ b/addons/gforces/functions/fnc_addPFEH.sqf @@ -14,6 +14,10 @@ //Reset forces array GVAR(GForces) = []; +// init array to full array of neutral g-forces +GVAR(GForces) resize 30; +GVAR(GForces) = GVAR(GForces) apply {1}; + GVAR(GForces_Index) = 0; // Setup ppEffect @@ -26,4 +30,4 @@ GVAR(GForces_CC) ppEffectCommit 0.4; GVAR(lastUpdateTime) = 0; GVAR(oldVel) = [0,0,0]; -GVAR(pfID) = [DFUNC(pfhUpdateGForces), 0, []] call CBA_fnc_addPerFrameHandler; +GVAR(pfID) = [LINKFUNC(pfhUpdateGForces), 0, []] call CBA_fnc_addPerFrameHandler; diff --git a/addons/gforces/functions/fnc_pfhUpdateGForces.sqf b/addons/gforces/functions/fnc_pfhUpdateGForces.sqf index 48370c2431..3be0130030 100644 --- a/addons/gforces/functions/fnc_pfhUpdateGForces.sqf +++ b/addons/gforces/functions/fnc_pfhUpdateGForces.sqf @@ -27,7 +27,7 @@ private _accel = ((_newVel vectorDiff GVAR(oldVel)) vectorMultiply (1 / INTERVAL private _currentGForce = (((_accel vectorDotProduct vectorUp (vehicle ACE_player)) / 9.8) max -10) min 10; GVAR(GForces) set [GVAR(GForces_Index), _currentGForce]; -GVAR(GForces_Index) = (GVAR(GForces_Index) + 1) % round (AVERAGEDURATION / INTERVAL); +GVAR(GForces_Index) = (GVAR(GForces_Index) + 1) % 30; // 30 = round (AVERAGEDURATION / INTERVAL); GVAR(oldVel) = _newVel; /* Source: https://github.com/KoffeinFlummi/AGM/issues/1774#issuecomment-70341573 diff --git a/addons/goggles/stringtable.xml b/addons/goggles/stringtable.xml index c268ec3ab6..6d37b00e21 100644 --- a/addons/goggles/stringtable.xml +++ b/addons/goggles/stringtable.xml @@ -36,6 +36,7 @@ Efekty gogli Brilleneffekt 고글 효과 + Effets des lunettes Tint @@ -44,6 +45,7 @@ Winieta Tönung 색조 + Teinte Tint + Effects @@ -52,6 +54,8 @@ Winieta + Efekty Tönung + Effekte 색조+효과 + Teinte + effets + diff --git a/addons/grenades/stringtable.xml b/addons/grenades/stringtable.xml index 55f80563e4..cbabdd01b2 100644 --- a/addons/grenades/stringtable.xml +++ b/addons/grenades/stringtable.xml @@ -302,6 +302,7 @@ AN-M14 焼夷手榴弾 Granat zapalający AN-M14 AN-M14 소이 수류탄 + Grenade incendiaire AN-M14 AN-M14 @@ -310,6 +311,7 @@ AN-M14 AN-M14 AN-M14 + AN-M14 Incendiary grenade used to destroy weapons, ammunition and other equipment. @@ -318,6 +320,7 @@ 焼夷手榴弾は武器や弾薬箱などの装備を破壊するために使われます。 Granat zapalający, używany do niszczenia broni, amunicji i innego sprzętu. 소이 수류탄은 무기나 탄약 그리고 장비를 파괴할때 쓰입니다. + Grenade incendiaire utilisé pour détruire des armes, munitions et autres équipements. diff --git a/addons/gunbag/data/ace_gunbag.p3d b/addons/gunbag/data/ace_gunbag.p3d index 22658bb93d..64de90bf4e 100644 Binary files a/addons/gunbag/data/ace_gunbag.p3d and b/addons/gunbag/data/ace_gunbag.p3d differ diff --git a/addons/gunbag/functions/fnc_offGunbagCallback.sqf b/addons/gunbag/functions/fnc_offGunbagCallback.sqf index 5d548d0e9c..580103b021 100644 --- a/addons/gunbag/functions/fnc_offGunbagCallback.sqf +++ b/addons/gunbag/functions/fnc_offGunbagCallback.sqf @@ -29,6 +29,16 @@ if (_state isEqualTo []) exitWith { _state params ["_weapon", "_items", "_magazines"]; _unit addWeapon _weapon; + +// Game will auto add magazines from player's inventory, put these back in player inventory as they will be overwritten +([_unit, _weapon] call EFUNC(common,getWeaponState)) params ["", "", "_addedMags", "_addedAmmo"]; +{ + if (((_x select 0) != "") && {(_addedMags select _forEachIndex) != ""}) then { + TRACE_2("Re-adding mag",_x,_addedMags select _forEachIndex); + _unit addMagazine [_addedMags select _forEachIndex, _addedAmmo select _forEachIndex]; + }; +} forEach _magazines; + removeAllPrimaryWeaponItems _unit; { diff --git a/addons/hearing/CfgVehicles.hpp b/addons/hearing/CfgVehicles.hpp index 760ed95a03..f44e50e6d0 100644 --- a/addons/hearing/CfgVehicles.hpp +++ b/addons/hearing/CfgVehicles.hpp @@ -5,7 +5,7 @@ class CfgVehicles { class ACE_Equipment { class ACE_PutInEarplugs { displayName = CSTRING(EarPlugs_On); - condition = QUOTE( !([_player] call FUNC(hasEarPlugsIn)) && {'ACE_EarPlugs' in items _player} ); + condition = QUOTE(GVAR(EnableCombatDeafness) && {!([_player] call FUNC(hasEarPlugsIn)) && {'ACE_EarPlugs' in items _player}}); exceptions[] = {"isNotInside", "isNotSitting"}; statement = QUOTE( [_player] call FUNC(putInEarPlugs) ); showDisabled = 0; @@ -14,7 +14,7 @@ class CfgVehicles { }; class ACE_RemoveEarplugs { displayName = CSTRING(EarPlugs_Off); - condition = QUOTE( [_player] call FUNC(hasEarPlugsIn) ); + condition = QUOTE( GVAR(EnableCombatDeafness) && {[_player] call FUNC(hasEarPlugsIn)}); exceptions[] = {"isNotInside", "isNotSitting"}; statement = QUOTE( [_player] call FUNC(removeEarPlugs) ); showDisabled = 0; diff --git a/addons/hearing/XEH_postInit.sqf b/addons/hearing/XEH_postInit.sqf index 34664525da..cd2a5aec16 100644 --- a/addons/hearing/XEH_postInit.sqf +++ b/addons/hearing/XEH_postInit.sqf @@ -11,35 +11,69 @@ GVAR(playerVehAttenuation) = 1; GVAR(time3) = 0; GVAR(damageCoefficent) = 1; GVAR(volumeAttenuation) = 1; +GVAR(lastPlayerVehicle) = objNull; ["ace_settingsInitialized", { TRACE_1("settingInit",GVAR(EnableCombatDeafness)); // Only run PFEH and install event handlers if combat deafness is enabled if (!GVAR(EnableCombatDeafness)) exitWith {}; - //Add XEH: - ["CAManBase", "FiredNear", FUNC(firedNear)] call CBA_fnc_addClassEventHandler; - ["CAManBase", "Explosion", FUNC(explosionNear)] call CBA_fnc_addClassEventHandler; - - // Update hearing protection now: - [] call FUNC(updateHearingProtection); - // Spawn volume updating process - [FUNC(updateVolume), 1, [false]] call CBA_fnc_addPerFrameHandler; + [LINKFUNC(updateVolume), 1, [false]] call CBA_fnc_addPerFrameHandler; // Update veh attunation when player veh changes - ["vehicle", FUNC(updatePlayerVehAttenuation)] call CBA_fnc_addPlayerEventHandler; - ["turret", FUNC(updatePlayerVehAttenuation)] call CBA_fnc_addPlayerEventHandler; + ["vehicle", { + params ["_player", "_vehicle"]; + TRACE_2("vehicle change",_player,_vehicle); + _this call FUNC(updatePlayerVehAttenuation); + + if (!isNull GVAR(lastPlayerVehicle)) then { + private _firedEH = GVAR(lastPlayerVehicle) getVariable [QGVAR(firedEH), -1]; + GVAR(lastPlayerVehicle) removeEventHandler ["FiredNear", _firedEH]; + GVAR(lastPlayerVehicle) setVariable [QGVAR(firedEH), nil]; + GVAR(lastPlayerVehicle) = objNull; + TRACE_2("removed veh eh",_firedEH,GVAR(lastPlayerVehicle)); + }; + if ((!isNull _vehicle) && {_player != _vehicle}) then { + private _firedEH = _vehicle addEventHandler ["FiredNear", {call FUNC(firedNear)}]; + _vehicle setVariable [QGVAR(firedEH), _firedEH]; + GVAR(lastPlayerVehicle) = _vehicle; + TRACE_2("added veh eh",_firedEH,GVAR(lastPlayerVehicle)); + }; + }, true] call CBA_fnc_addPlayerEventHandler; + ["turret", LINKFUNC(updatePlayerVehAttenuation), false] call CBA_fnc_addPlayerEventHandler; + // Reset deafness on respawn (or remote control player switch) ["unit", { + params ["_player", "_oldPlayer"]; + TRACE_2("unit change",_player,_oldPlayer); + + if (!isNull _oldPlayer) then { + private _firedEH = _oldPlayer getVariable [QGVAR(firedEH), -1]; + _oldPlayer removeEventHandler ["FiredNear", _firedEH]; + _oldPlayer setVariable [QGVAR(firedEH), nil]; + private _explosionEH = _oldPlayer getVariable [QGVAR(explosionEH), -1]; + _oldPlayer removeEventHandler ["Explosion", _explosionEH]; + _oldPlayer setVariable [QGVAR(explosionEH), nil]; + TRACE_3("removed unit eh",_oldPlayer,_firedEH,_explosionEH); + }; + // Don't add a new EH if the unit respawned + if ((_player getVariable [QGVAR(firedEH), -1]) == -1) then { + private _firedEH = _player addEventHandler ["FiredNear", {call FUNC(firedNear)}]; + _player setVariable [QGVAR(firedEH), _firedEH]; + private _explosionEH = _player addEventHandler ["Explosion", {call FUNC(explosionNear)}]; + _player setVariable [QGVAR(explosionEH), _explosionEH]; + TRACE_3("added unit eh",_player,_firedEH,_explosionEH); + }; + GVAR(deafnessDV) = 0; GVAR(deafnessPrior) = 0; ACE_player setVariable [QGVAR(deaf), false]; GVAR(time3) = 0; [] call FUNC(updateHearingProtection); - }] call CBA_fnc_addPlayerEventHandler; + }, true] call CBA_fnc_addPlayerEventHandler; // Update protection on possible helmet change - ["loadout", FUNC(updateHearingProtection)] call CBA_fnc_addPlayerEventHandler; + ["loadout", LINKFUNC(updateHearingProtection), false] call CBA_fnc_addPlayerEventHandler; }] call CBA_fnc_addEventHandler; diff --git a/addons/hearing/functions/fnc_explosionNear.sqf b/addons/hearing/functions/fnc_explosionNear.sqf index 76c6707de5..9087984b50 100644 --- a/addons/hearing/functions/fnc_explosionNear.sqf +++ b/addons/hearing/functions/fnc_explosionNear.sqf @@ -18,8 +18,6 @@ params ["_unit", "_damage"]; -if (_unit != ACE_player) exitWith {}; - TRACE_2("explosion near player",_unit,_damage); private ["_strength"]; diff --git a/addons/hearing/functions/fnc_firedNear.sqf b/addons/hearing/functions/fnc_firedNear.sqf index 488e9f56e4..a1a97deca0 100644 --- a/addons/hearing/functions/fnc_firedNear.sqf +++ b/addons/hearing/functions/fnc_firedNear.sqf @@ -24,8 +24,6 @@ params ["_object", "_firer", "_distance", "_weapon", "", "", "_ammo"]; -//Only run if firedNear object is player or player's vehicle: -if ((ACE_player != _object) && {(vehicle ACE_player) != _object}) exitWith {}; if (_weapon in ["Throw", "Put"]) exitWith {}; if (_distance > 50) exitWith {}; diff --git a/addons/hearing/functions/fnc_putInEarplugs.sqf b/addons/hearing/functions/fnc_putInEarplugs.sqf index 90fe8d62ac..4075a982db 100644 --- a/addons/hearing/functions/fnc_putInEarplugs.sqf +++ b/addons/hearing/functions/fnc_putInEarplugs.sqf @@ -17,6 +17,8 @@ params ["_player"]; +if (!GVAR(EnableCombatDeafness)) exitWith {}; + // Plugs in inventory, putting them in _player removeItem "ACE_EarPlugs"; diff --git a/addons/hearing/functions/fnc_removeEarplugs.sqf b/addons/hearing/functions/fnc_removeEarplugs.sqf index 3154230ecf..20bc7b8dcc 100644 --- a/addons/hearing/functions/fnc_removeEarplugs.sqf +++ b/addons/hearing/functions/fnc_removeEarplugs.sqf @@ -17,6 +17,8 @@ params ["_player"]; +if (!GVAR(EnableCombatDeafness)) exitWith {}; + if !(_player canAdd "ACE_EarPlugs") exitWith { // inventory full [localize LSTRING(Inventory_Full)] call EFUNC(common,displayTextStructured); }; diff --git a/addons/hearing/functions/fnc_updatePlayerVehAttenuation.sqf b/addons/hearing/functions/fnc_updatePlayerVehAttenuation.sqf index 7d48ca7b34..b077487c79 100644 --- a/addons/hearing/functions/fnc_updatePlayerVehAttenuation.sqf +++ b/addons/hearing/functions/fnc_updatePlayerVehAttenuation.sqf @@ -15,20 +15,17 @@ */ #include "script_component.hpp" -private ["_effectType", "_newAttenuation", "_turretConfig", "_turretPath", "_vehicle"]; - -_vehicle = vehicle ACE_player; +private _vehicle = vehicle ACE_player; if (isNull _vehicle) exitWith {}; -_newAttenuation = 1; +private _newAttenuation = 1; if (ACE_player != _vehicle) then { - _effectType = ""; - _turretPath = [ACE_player] call EFUNC(common,getTurretIndex); - _effectType = getText (configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "attenuationEffectType"); + private _turretPath = [ACE_player] call EFUNC(common,getTurretIndex); + private _effectType = getText (configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "attenuationEffectType"); if (!(_turretPath isEqualTo [])) then { - _turretConfig = [(configFile >> "CfgVehicles" >> (typeOf _vehicle)), _turretPath] call EFUNC(common,getTurretConfigPath); + private _turretConfig = [(configFile >> "CfgVehicles" >> (typeOf _vehicle)), _turretPath] call EFUNC(common,getTurretConfigPath); if ((getNumber (_turretConfig >> "disableSoundAttenuation")) == 1) then { _effectType = ""; @@ -41,8 +38,10 @@ if (ACE_player != _vehicle) then { _newAttenuation = switch (true) do { case (_effectType == ""): {1}; - case (_effectType == "CarAttenuation"): {0.5}; - case (_effectType == "RHS_CarAttenuation"): {0.5}; + case (_effectType == "CarAttenuation"); + case (_effectType == "RHS_CarAttenuation"): { // Increase protection for armored cars + private _armor = getNumber (configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "HitPoints" >> "HitBody" >> "armor"); + linearConversion [2, 8, _armor, 0.5, 0.3, true];}; case (_effectType == "OpenCarAttenuation"): {1}; case (_effectType == "TankAttenuation"): {0.1}; case (_effectType == "HeliAttenuation"): {0.3}; diff --git a/addons/huntir/CfgWeapons.hpp b/addons/huntir/CfgWeapons.hpp index 799cfcb976..8a3b57c4b0 100644 --- a/addons/huntir/CfgWeapons.hpp +++ b/addons/huntir/CfgWeapons.hpp @@ -19,11 +19,5 @@ class CfgWeapons { class UGL_F: GrenadeLauncher { magazines[] += {"ACE_HuntIR_M203"}; }; - class Rifle_Base_F; - class arifle_MX_Base_F: Rifle_Base_F { - class GL_3GL_F: UGL_F { - //magazines[] += {"ACE_HuntIR_M203"}; - magazines[] = {"1Rnd_HE_Grenade_shell","UGL_FlareWhite_F","UGL_FlareGreen_F","UGL_FlareRed_F","UGL_FlareYellow_F","UGL_FlareCIR_F","1Rnd_Smoke_Grenade_shell","1Rnd_SmokeRed_Grenade_shell","1Rnd_SmokeGreen_Grenade_shell","1Rnd_SmokeYellow_Grenade_shell","1Rnd_SmokePurple_Grenade_shell","1Rnd_SmokeBlue_Grenade_shell","1Rnd_SmokeOrange_Grenade_shell","3Rnd_HE_Grenade_shell","3Rnd_UGL_FlareWhite_F","3Rnd_UGL_FlareGreen_F","3Rnd_UGL_FlareRed_F","3Rnd_UGL_FlareYellow_F","3Rnd_UGL_FlareCIR_F","3Rnd_Smoke_Grenade_shell","3Rnd_SmokeRed_Grenade_shell","3Rnd_SmokeGreen_Grenade_shell","3Rnd_SmokeYellow_Grenade_shell","3Rnd_SmokePurple_Grenade_shell","3Rnd_SmokeBlue_Grenade_shell","3Rnd_SmokeOrange_Grenade_shell","ACE_HuntIR_M203"}; - }; - }; + // Added to the GL_3GL_F in subconfig }; diff --git a/addons/huntir/subConfig/config.cpp b/addons/huntir/subConfig/config.cpp new file mode 100644 index 0000000000..29a9f0ca25 --- /dev/null +++ b/addons/huntir/subConfig/config.cpp @@ -0,0 +1,26 @@ +#include "\z\ace\addons\huntir\script_component.hpp" +#undef COMPONENT +#define COMPONENT huntir_sub + +class CfgPatches { + class ADDON { + name = COMPONENT_NAME; + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_huntir"}; + author = ECSTRING(common,ACETeam); + url = ECSTRING(main,URL); + VERSION_CONFIG; + }; +}; + +class CfgWeapons { + class UGL_F; + class Rifle_Base_F; + class arifle_MX_Base_F: Rifle_Base_F { + class GL_3GL_F: UGL_F { + magazines[] += {"ACE_HuntIR_M203"}; + }; + }; +}; diff --git a/addons/interact_menu/XEH_clientInit.sqf b/addons/interact_menu/XEH_clientInit.sqf index 0d280506b3..7e82e2c160 100644 --- a/addons/interact_menu/XEH_clientInit.sqf +++ b/addons/interact_menu/XEH_clientInit.sqf @@ -21,7 +21,7 @@ GVAR(ParsedTextCached) = []; //Setup text/shadow/size/color settings matrix [] call FUNC(setupTextColors); // Install the render EH on the main display - addMissionEventHandler ["Draw3D", DFUNC(render)]; + addMissionEventHandler ["Draw3D", {call FUNC(render)}]; }] call CBA_fnc_addEventHandler; //Add Actions to Houses: diff --git a/addons/interact_menu/functions/fnc_compileMenu.sqf b/addons/interact_menu/functions/fnc_compileMenu.sqf index 225ebc59b4..ed38e41ada 100644 --- a/addons/interact_menu/functions/fnc_compileMenu.sqf +++ b/addons/interact_menu/functions/fnc_compileMenu.sqf @@ -109,6 +109,22 @@ private _actionsCfg = configFile >> "CfgVehicles" >> _objectType >> "ACE_Actions TRACE_1("Building ACE_Actions",_objectType); private _actions = [_actionsCfg, 0] call _recurseFnc; +// ace_interaction_fnc_addPassengerAction expects ACE_MainActions to be first +// Other mods can change the order that configs are added, so we should verify this now and resort if needed +if (_objectType isKindOf "CaManBase") then { + if ((((_actions select 0) select 0) select 0) != "ACE_MainActions") then { + INFO_1("ACE_MainActions not first for man [%1]",_objectType); + private _mainActions = []; + { + if (((_x select 0) select 0) == "ACE_MainActions") then { + _mainActions = _actions deleteAt _forEachIndex; + }; + } forEach _actions; + if (_mainActions isEqualTo []) exitWith {ERROR_1("ACE_MainActions not found on man [%1]",_objectType);}; + _actions = [_mainActions] + _actions; // resort array with ACE_MainActions first + }; +}; + _namespace setVariable [_objectType, _actions]; /* diff --git a/addons/interaction/XEH_PREP.hpp b/addons/interaction/XEH_PREP.hpp index c8ceb66e8f..be4669cc27 100644 --- a/addons/interaction/XEH_PREP.hpp +++ b/addons/interaction/XEH_PREP.hpp @@ -2,6 +2,7 @@ // interaction menu PREP(addPassengerActions); PREP(addPassengersActions); +PREP(getInteractionDistance); PREP(getVehiclePos); PREP(getVehiclePosComplex); PREP(getWeaponPos); diff --git a/addons/interaction/functions/fnc_getDoorAnimations.sqf b/addons/interaction/functions/fnc_getDoorAnimations.sqf index fac29c74a8..a5c185d7d6 100644 --- a/addons/interaction/functions/fnc_getDoorAnimations.sqf +++ b/addons/interaction/functions/fnc_getDoorAnimations.sqf @@ -36,7 +36,7 @@ _index = [ "door_11", "door_12", "door_13", - "Door_14", + "door_14", "door_15", "door_16", "door_17", diff --git a/addons/interaction/functions/fnc_getInteractionDistance.sqf b/addons/interaction/functions/fnc_getInteractionDistance.sqf new file mode 100644 index 0000000000..12c9bbd7e9 --- /dev/null +++ b/addons/interaction/functions/fnc_getInteractionDistance.sqf @@ -0,0 +1,33 @@ +/* + * Author: PabstMirror + * Gets effective interaction distance (handles very large vehicles) + * + * Arguments: + * 0: Player + * 0: Target Vehicle + * + * Return value: + * Distance to interaction point + * + * Example: + * [player, cursorObject] call ace_interaction_fnc_getInteractionDistance + * + * Public: No + */ +#include "script_component.hpp" + +params ["_unit", "_target"]; +TRACE_3("getInteractionDistance",_unit,_target,typeOf _target); + +// Handle Man, Crate +if (!((_target isKindOf "Car") || {_target isKindOf "Tank"} || {_target isKindOf "Helicopter"} || {_target isKindOf "Plane"} || {_target isKindOf "Ship_F"})) exitWith { + _unit distance _target +}; + +private _unitEyeASL = eyePos _unit; +private _targetModelPos = [_target, _unitEyeASL] call FUNC(getVehiclePosComplex); +private _distance = _unitEyeASL distance (AGLtoASL (_target modelToWorld _targetModelPos)); + +TRACE_2("",_targetModelPos,_distance); + +_distance diff --git a/addons/inventory/stringtable.xml b/addons/inventory/stringtable.xml index e730fc89ae..c421891f49 100644 --- a/addons/inventory/stringtable.xml +++ b/addons/inventory/stringtable.xml @@ -49,7 +49,7 @@ Hełmy Copricapi Cascos - Couvre-chefs + Couvre-chefs Capacetes Головные уборы ヘッドギア diff --git a/addons/javelin/XEH_PREP.hpp b/addons/javelin/XEH_PREP.hpp index cce2482932..76d658d90d 100644 --- a/addons/javelin/XEH_PREP.hpp +++ b/addons/javelin/XEH_PREP.hpp @@ -1,5 +1,4 @@ -PREP(cycleFireMode); PREP(getTarget); PREP(mapHelperDraw); PREP(onOpticDraw); diff --git a/addons/javelin/functions/fnc_cycleFireMode.sqf b/addons/javelin/functions/fnc_cycleFireMode.sqf deleted file mode 100644 index 5eeb4dd9b3..0000000000 --- a/addons/javelin/functions/fnc_cycleFireMode.sqf +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Author: jaynus - * Cycles fire mode (top/dir) - * - * Arguments: - * None - * - * Return Value: - * None - * - * Example: - * [] call ace_javelin_fnc_cycleFireMode - * - * Public: No - */ -// #define DEBUG_MODE_FULL -#include "script_component.hpp" - -TRACE_1("cycle fire mode", _this); - -private _currentShooter = if (ACE_player call CBA_fnc_canUseWeapon) then {ACE_player} else {vehicle ACE_player}; -private _currentFireMode = _currentShooter getVariable ["ace_missileguidance_attackProfile", "JAV_TOP"]; - -if (_currentFireMode == "JAV_DIR") then { - _currentFireMode = "JAV_TOP"; -} else { - _currentFireMode = "JAV_DIR"; -}; -_currentShooter setVariable ["ace_missileguidance_attackProfile", _currentFireMode, false]; -TRACE_2("set",_currentFireMode,_currentShooter); diff --git a/addons/javelin/initKeybinds.sqf b/addons/javelin/initKeybinds.sqf index ec5c9a27ac..7652f2fd57 100644 --- a/addons/javelin/initKeybinds.sqf +++ b/addons/javelin/initKeybinds.sqf @@ -18,11 +18,3 @@ false }, [15, [false, false, false]], false] call CBA_fnc_addKeybind; //Tab Key - -["ACE3 Weapons", QGVAR(cycleFireMode), localize LSTRING(CycleFireMode), -{ false }, -{ - [ACE_player] call FUNC(cycleFireMode); - false -}, -[15, [false, true, false]], false] call CBA_fnc_addKeybind; //Ctrl+Tab Key diff --git a/addons/javelin/stringtable.xml b/addons/javelin/stringtable.xml index 4e5614e106..ece03b3699 100644 --- a/addons/javelin/stringtable.xml +++ b/addons/javelin/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -15,19 +15,5 @@ 目標を捕捉 (押しっぱ) 표적 획득 (누르기) - - Cycle Fire Mode - Wechsle Feuermodus - Переключение режимов огня - Přepínání režimů palby - Przełącz tryb ognia - Cycle mode de tir - Tüzelési mód váltása - Alterna le modalità di fuoco - Cambiar modo de disparo - Alterar Modo de Disparo - 発射モード切り替え - 발사 방식 순환 - diff --git a/addons/laser/stringtable.xml b/addons/laser/stringtable.xml index cf56e165a6..786cb6ec55 100644 --- a/addons/laser/stringtable.xml +++ b/addons/laser/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -6,7 +6,7 @@ レーザーの分散シミュレート数 Laserstreuung-Simulationszähler 레이저 분산 시뮬레이션 수 - Wskaźnik poziomu rozproszenia wiązki lasera + Wskaźnik poziomu rozproszenia wiązki lasera Laser Code @@ -51,4 +51,4 @@ 레이저 - 코드 순환 아래 - + \ No newline at end of file diff --git a/addons/laserpointer/CfgEventHandlers.hpp b/addons/laserpointer/CfgEventHandlers.hpp index becf395052..0d3301d6e0 100644 --- a/addons/laserpointer/CfgEventHandlers.hpp +++ b/addons/laserpointer/CfgEventHandlers.hpp @@ -1,4 +1,3 @@ - class Extended_PreStart_EventHandlers { class ADDON { init = QUOTE(call COMPILE_FILE(XEH_preStart)); diff --git a/addons/laserpointer/CfgWeapons.hpp b/addons/laserpointer/CfgWeapons.hpp index 608d025a01..c86887e1c3 100644 --- a/addons/laserpointer/CfgWeapons.hpp +++ b/addons/laserpointer/CfgWeapons.hpp @@ -9,16 +9,18 @@ class CfgWeapons { class InventoryFlashLightItem_Base_F; class acc_pointer_IR: ItemCore { - ACE_nextModeClass = "ACE_acc_pointer_red"; - ACE_modeDescription = CSTRING(IRLaser); + MRT_SwitchItemNextClass = "ACE_acc_pointer_red"; + MRT_SwitchItemPrevClass = "ACE_acc_pointer_red"; + MRT_switchItemHintText = CSTRING(IRLaser); displayName = CSTRING(red); descriptionUse = CSTRING(useLaser); }; class ACE_acc_pointer_red: ItemCore { - ACE_nextModeClass = "acc_pointer_IR"; - ACE_modeDescription = CSTRING(Laser); + MRT_SwitchItemNextClass = "acc_pointer_IR"; + MRT_SwitchItemPrevClass = "acc_pointer_IR"; + MRT_switchItemHintText = CSTRING(Laser); ACE_laserpointer = 1; @@ -68,8 +70,9 @@ class CfgWeapons { }; class ACE_acc_pointer_green_IR: acc_pointer_IR { - ACE_nextModeClass = "ACE_acc_pointer_green"; - ACE_modeDescription = CSTRING(IRLaser); + MRT_SwitchItemNextClass = "ACE_acc_pointer_green"; + MRT_SwitchItemPrevClass = "ACE_acc_pointer_green"; + MRT_switchItemHintText = CSTRING(IRLaser); author = ECSTRING(common,ACETeam); _generalMacro = "ACE_acc_pointer_green"; @@ -78,8 +81,9 @@ class CfgWeapons { }; class ACE_acc_pointer_green: ACE_acc_pointer_red { - ACE_nextModeClass = "ACE_acc_pointer_green_IR"; - ACE_modeDescription = CSTRING(Laser); + MRT_SwitchItemNextClass = "ACE_acc_pointer_green_IR"; + MRT_SwitchItemPrevClass = "ACE_acc_pointer_green_IR"; + MRT_switchItemHintText = CSTRING(Laser); ACE_laserpointer = 2; diff --git a/addons/laserpointer/XEH_PREP.hpp b/addons/laserpointer/XEH_PREP.hpp index c5dcd74a75..59a28bb4cc 100644 --- a/addons/laserpointer/XEH_PREP.hpp +++ b/addons/laserpointer/XEH_PREP.hpp @@ -1,4 +1,3 @@ - PREP(drawLaserpoint); +PREP(getNearUnits); PREP(onDraw); -PREP(switchLaserLightMode); diff --git a/addons/laserpointer/XEH_postInit.sqf b/addons/laserpointer/XEH_postInit.sqf index bfc617965d..d8857da32a 100644 --- a/addons/laserpointer/XEH_postInit.sqf +++ b/addons/laserpointer/XEH_postInit.sqf @@ -2,37 +2,87 @@ #include "script_component.hpp" // fixes laser when being captured. Needed, because the selectionPosition of the right hand is used -[QEGVAR(captives,setHandcuffed), {if (_this select 1) then {(_this select 0) action ["ace_gunLightOff", _this select 0]};}] call CBA_fnc_addEventHandler; +[QEGVAR(captives,setHandcuffed), {if (_this select 1) then {(_this select 0) action ["GunLightOff", _this select 0]};}] call CBA_fnc_addEventHandler; if (!hasInterface) exitWith {}; GVAR(nearUnits) = []; - -#include "initKeybinds.sqf" +GVAR(index) = -1; +GVAR(laserClassesCache) = [] call CBA_fnc_createNamespace; +GVAR(redLaserUnits) = []; +GVAR(greenLaserUnits) = []; ["ace_settingsInitialized", { - //If not enabled, dont't add draw eventhandler or PFEH (for performance) - if (!GVAR(enabled)) exitWith {}; - - // @todo. Maybe move to common? - [{ - // handle RHS / bugged vehicle slots - private _camPosAGL = positionCameraToWorld [0,0,0]; - if !((_camPosAGL select 0) isEqualType 0) exitWith {}; - - private _nearUnits = []; - { - _nearUnits append crew _x; - if (count _nearUnits > 10) exitWith { - _nearUnits resize 10; + // If not enabled, dont't add draw eventhandler or PFEH (for performance) + if (!GVAR(enabled)) exitWith { + ["CBA_attachmentSwitched", { + params ["_unit", "_prevItem", "_newItem", "_currWeaponType"]; + TRACE_4("CBA_attachmentSwitched eh",_unit,_prevItem,_newItem,_currWeaponType); + if ((getNumber (configFile >> "CfgWeapons" >> _newItem >> "ACE_laserpointer")) > 0) then { + TRACE_1("removing ACE_laserpointer",getNumber (configFile >> "CfgWeapons" >> _newItem >> "ACE_laserpointer")); + [1, "prev"] call CBA_accessory_fnc_switchAttachment; }; - } forEach nearestObjects [_camPosAGL, ["AllVehicles"], 50]; // when moving this, search also for units inside vehicles. currently breaks the laser in FFV + }] call CBA_fnc_addEventHandler; + }; - GVAR(nearUnits) = _nearUnits; + [{ + private _oldNearUnits = GVAR(nearUnits); + GVAR(nearUnits) = call FUNC(getNearUnits); - } , 5, []] call CBA_fnc_addPerFrameHandler; + // remove units that moved away + { + GVAR(redLaserUnits) deleteAt (GVAR(redLaserUnits) find _x); + GVAR(greenLaserUnits) deleteAt (GVAR(greenLaserUnits) find _x); + } forEach (_oldNearUnits - GVAR(nearUnits)); + }, 5, []] call CBA_fnc_addPerFrameHandler; - addMissionEventHandler ["Draw3D", { - call FUNC(onDraw); - }]; + + private _fnc_processUnit = { + params ["_unit"]; + + private _weapon = currentWeapon _unit; + private _laser = [(_unit weaponAccessories _weapon) select 1] param [0, ""]; + + if (_laser isEqualTo "") exitWith {}; + + private _laserID = GVAR(laserClassesCache) getVariable _laser; + + if (isNil "_laserID") then { + _laserID = getNumber (configFile >> "CfgWeapons" >> _laser >> "ACE_laserpointer"); + GVAR(laserClassesCache) setVariable [_laser, _laserID]; + }; + + if (_unit isFlashlightOn _weapon) then { + if (_laserID isEqualTo 1) exitWith { + GVAR(redLaserUnits) pushBackUnique _unit; + GVAR(greenLaserUnits) deleteAt (GVAR(greenLaserUnits) find _unit); + }; + + if (_laserID isEqualTo 2) exitWith { + GVAR(greenLaserUnits) pushBackUnique _unit; + GVAR(redLaserUnits) deleteAt (GVAR(redLaserUnits) find _unit); + }; + } else { + GVAR(redLaserUnits) deleteAt (GVAR(redLaserUnits) find _unit); + GVAR(greenLaserUnits) deleteAt (GVAR(greenLaserUnits) find _unit); + }; + }; + + // custom scheduler + [{ + params ["_fnc_processUnit"]; + + ACE_player call _fnc_processUnit; + + GVAR(index) = GVAR(index) + 1; + private _unit = GVAR(nearUnits) param [GVAR(index), objNull]; + + if (isNull _unit) exitWith { + GVAR(index) = -1; + }; + + _unit call _fnc_processUnit; + }, 0.1, _fnc_processUnit] call CBA_fnc_addPerFrameHandler; + + addMissionEventHandler ["Draw3D", {call FUNC(onDraw)}]; }] call CBA_fnc_addEventHandler; diff --git a/addons/laserpointer/XEH_preInit.sqf b/addons/laserpointer/XEH_preInit.sqf index b47cf6628d..d2efe43e9c 100644 --- a/addons/laserpointer/XEH_preInit.sqf +++ b/addons/laserpointer/XEH_preInit.sqf @@ -6,4 +6,11 @@ PREP_RECOMPILE_START; #include "XEH_PREP.hpp" PREP_RECOMPILE_END; +["visionMode", { + params ["", "_visionMode"]; + + GVAR(isIR) = _visionMode isEqualTo 1; + GVAR(isTI) = _visionMode isEqualTo 2; +}] call CBA_fnc_addPlayerEventHandler; + ADDON = true; diff --git a/addons/laserpointer/functions/fnc_getNearUnits.sqf b/addons/laserpointer/functions/fnc_getNearUnits.sqf new file mode 100644 index 0000000000..6f31a99a2a --- /dev/null +++ b/addons/laserpointer/functions/fnc_getNearUnits.sqf @@ -0,0 +1,26 @@ +/* + * Author: commy2 + * Reports near units. + * + * Arguments: + * None + * + * Return Value: + * None + * + * Public: No + */ +#include "script_component.hpp" + +private _camPosAGL = positionCameraToWorld [0, 0, 0]; + +// handle RHS / bugged vehicle slots +if !((_camPosAGL select 0) isEqualType 0) exitWith {}; + +private _nearUnits = []; + +{ + _nearUnits append crew _x; +} forEach nearestObjects [_camPosAGL, ["AllVehicles"], MAX_LASER_RANGE]; + +_nearUnits diff --git a/addons/laserpointer/functions/fnc_onDraw.sqf b/addons/laserpointer/functions/fnc_onDraw.sqf index 1945dcf2b7..0559386827 100644 --- a/addons/laserpointer/functions/fnc_onDraw.sqf +++ b/addons/laserpointer/functions/fnc_onDraw.sqf @@ -12,30 +12,17 @@ */ #include "script_component.hpp" -private _isIR = currentVisionMode ACE_player; +// no lasers in thermal mode +if !(GVAR(isTI)) then { + private _brightness = 2 - call EFUNC(common,ambientBrightness); -if (_isIR == 2) exitWith {}; + { + // red laser. draw green dot anyway in IR mode + [_x, 100, GVAR(isIR), _brightness] call FUNC(drawLaserpoint); + } count GVAR(redLaserUnits); -_isIR = _isIR == 1; - -private _brightness = 2 - call EFUNC(common,ambientBrightness); - -{ - private _weapon = currentWeapon _x; - private _laser = (_x weaponAccessories _weapon) select 1; - - if (_laser != "") then { - private _cacheName = format [QGVAR(laser_%1), _laser]; - private _laserID = missionNamespace getVariable [_cacheName, -1]; - - if (missionNamespace getVariable [_cacheName, -1] == -1) then { - _laserID = getNumber (configFile >> "CfgWeapons" >> _laser >> "ACE_laserpointer"); - missionNamespace setVariable [_cacheName, _laserID]; - }; - - if (_laserID > 0 && {_x isFlashlightOn _weapon}) then { - [_x, 100, (_laserID == 2 || _isIR), _brightness] call FUNC(drawLaserpoint); - }; - }; - false -} count GVAR(nearUnits); + { + // green laser + [_x, 100, true, _brightness] call FUNC(drawLaserpoint); + } count GVAR(greenLaserUnits); +}; diff --git a/addons/laserpointer/functions/fnc_switchLaserLightMode.sqf b/addons/laserpointer/functions/fnc_switchLaserLightMode.sqf deleted file mode 100644 index 2469f64352..0000000000 --- a/addons/laserpointer/functions/fnc_switchLaserLightMode.sqf +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Author: Commy2 - * Switch between laser modes. - * - * Arguments: - * 0: Unit - * 1: Weapon - * - * Return Value: - * None - * - * Public: No - */ -#include "script_component.hpp" - -params ["_unit", "_weapon"]; - -private _pointer = (_unit weaponAccessories _weapon) select 1; - -if (_pointer == "") exitWith {}; - -private _config = configFile >> "CfgWeapons" >> _pointer; - -private _nextPointer = getText (_config >> "ACE_nextModeClass"); - -if (_nextPointer == "") exitWith {}; - -//If system disabled, don't switch to a laser: -private _nextPointerIsLaser = getNumber (configFile >> "CfgWeapons" >> _nextPointer >> "ACE_laserpointer"); -if ((!GVAR(enabled)) && {_nextPointerIsLaser == 1}) exitWith {}; - -// disable inheritance for this entry, because addons claim this as a base class for convenience -if !((_config >> "ACE_nextModeClass") in configProperties [_config, "true", false]) exitWith {}; - -_unit addWeaponItem [_weapon, _nextPointer]; - -private _error = false; - -if ((_unit weaponAccessories _weapon) select 1 != _nextPointer) then { - ERROR("NextPointer not compatible"); - _unit addWeaponItem [_weapon, _pointer]; - _error = true; -}; - -if (!_error) then { - private _description = getText (configFile >> "CfgWeapons" >> _nextPointer >> "ACE_modeDescription"); - private _picture = getText (configFile >> "CfgWeapons" >> _nextPointer >> "picture"); - - [_description, _picture] call EFUNC(common,displayTextPicture); -} else { - ERROR_3("Failed to add %1 to %2 - reverting to %3",_nextPointer,_weapon,_pointer); -}; - -playSound "ACE_Sound_Click"; diff --git a/addons/laserpointer/initKeybinds.sqf b/addons/laserpointer/initKeybinds.sqf deleted file mode 100644 index 2251ddfb71..0000000000 --- a/addons/laserpointer/initKeybinds.sqf +++ /dev/null @@ -1,13 +0,0 @@ -// by commy2 - -["ACE3 Weapons", QGVAR(switchLaserLightMode), localize LSTRING(switchLaserLight), -{ - // Conditions: canInteract - if !([ACE_player, objNull, ["isNotInside", "isNotSitting"]] call EFUNC(common,canInteractWith)) exitWith {false}; - // Conditions: specific - if !([ACE_player] call CBA_fnc_canUseWeapon) exitWith {false}; - - [ACE_player, currentWeapon ACE_player] call FUNC(switchLaserLightMode); - true -}, -{false}, [38, [false, true, false]], false] call CBA_fnc_addKeybind; diff --git a/addons/laserpointer/script_component.hpp b/addons/laserpointer/script_component.hpp index b6323308fd..4b7b2e0d39 100644 --- a/addons/laserpointer/script_component.hpp +++ b/addons/laserpointer/script_component.hpp @@ -15,3 +15,5 @@ #endif #include "\z\ace\addons\main\script_macros.hpp" + +#define MAX_LASER_RANGE 50 diff --git a/addons/main/CfgSettings.hpp b/addons/main/CfgSettings.hpp index 58cb824a6f..dcb78ffb60 100644 --- a/addons/main/CfgSettings.hpp +++ b/addons/main/CfgSettings.hpp @@ -10,6 +10,7 @@ class CfgSettings { //Warnings for missing RHS compat pbos compat_rhs_afrf3[] = {"ace_compat_rhs_afrf3", {VERSION_AR}, "isClass (configFile >> 'CfgPatches' >> 'rhs_main')"}; compat_rhs_usf3[] = {"ace_compat_rhs_usf3", {VERSION_AR}, "isClass (configFile >> 'CfgPatches' >> 'rhsusf_main')"}; + compat_rhs_gref3[] = {"ace_compat_rhs_gref3", {VERSION_AR}, "isClass (configFile >> 'CfgPatches' >> 'rhsgref_main')"}; }; }; }; diff --git a/addons/main/script_mod.hpp b/addons/main/script_mod.hpp index 78fcc0c665..6cb346a72b 100644 --- a/addons/main/script_mod.hpp +++ b/addons/main/script_mod.hpp @@ -10,7 +10,7 @@ // MINIMAL required version for the Mod. Components can specify others.. #define REQUIRED_VERSION 1.64 -#define REQUIRED_CBA_VERSION {3,1,1} +#define REQUIRED_CBA_VERSION {3,2,1} #ifdef COMPONENT_BEAUTIFIED #define COMPONENT_NAME QUOTE(ACE3 - COMPONENT_BEAUTIFIED) diff --git a/addons/main/script_version.hpp b/addons/main/script_version.hpp index 68fa060a97..9b3aef92a4 100644 --- a/addons/main/script_version.hpp +++ b/addons/main/script_version.hpp @@ -1,4 +1,4 @@ #define MAJOR 3 -#define MINOR 8 -#define PATCHLVL 3 -#define BUILD 14 +#define MINOR 9 +#define PATCHLVL 0 +#define BUILD 16 diff --git a/addons/map/CfgLights.hpp b/addons/map/CfgLights.hpp index bd69f9acbf..c5ebc8e054 100644 --- a/addons/map/CfgLights.hpp +++ b/addons/map/CfgLights.hpp @@ -1,7 +1,7 @@ class CfgLights { - + class Chemlight_Blue; - + class ACE_FlashlightLight_White: Chemlight_Blue { brightness = 100; color[] = {1,1,1,1}; @@ -16,20 +16,24 @@ class CfgLights { start = 0.075; }; }; - + class ACE_FlashlightLight_Red: ACE_FlashlightLight_White { diffuse[] = {1,0,0}; }; - + class ACE_FlashlightLight_Blue: ACE_FlashlightLight_White { diffuse[] = {0.25,0.25,1}; }; - + class ACE_FlashlightLight_Green: ACE_FlashlightLight_White { diffuse[] = {0,1,0}; }; - + class ACE_FlashlightLight_Yellow: ACE_FlashlightLight_White { diffuse[] = {1,1,0.4}; }; -}; \ No newline at end of file + + class ACE_FlashlightLight_Orange: ACE_FlashlightLight_White { + diffuse[] = {1,0.65,0}; + }; +}; diff --git a/addons/map/stringtable.xml b/addons/map/stringtable.xml index 5233a278d9..2c0349dc0d 100644 --- a/addons/map/stringtable.xml +++ b/addons/map/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -443,14 +443,14 @@ BFT deaktivieren BFTを無効化 GPS피아식별기 끄기 - Wyłacz BFT + Wyłącz BFT Always disable Blue Force Tracking for this group. Blue Force Tracking für diese Gruppe immer deaktivieren. このグループへのブルー フォース トラッキングを常に無効化します。 이 그룹에 한해 GPS피아식별기를 항상 끕니다. - Zawsze wyłączaj Blue Force Tracking dlla tej grupy + Zawsze wyłączaj Blue Force Tracking dla tej grupy. - + \ No newline at end of file diff --git a/addons/map_gestures/functions/fnc_addGroupColorMapping.sqf b/addons/map_gestures/functions/fnc_addGroupColorMapping.sqf index 949aa60da1..e02403b323 100644 --- a/addons/map_gestures/functions/fnc_addGroupColorMapping.sqf +++ b/addons/map_gestures/functions/fnc_addGroupColorMapping.sqf @@ -24,6 +24,7 @@ TRACE_3("params",_group,_leadColor,_unitColor); if (_group isEqualType grpNull) then {_group = groupID _group}; +if (_group == "") exitWith {ERROR("Group ID is blank, which is not valid.")}; if (!([_leadColor] call FUNC(isValidColorArray))) exitWith {ERROR("leadColor is not a valid color array.")}; if (!([_unitColor] call FUNC(isValidColorArray))) exitWith {ERROR("color is not a valid color array.")}; diff --git a/addons/map_gestures/functions/fnc_receiverInit.sqf b/addons/map_gestures/functions/fnc_receiverInit.sqf index b132dad1d7..9386523340 100644 --- a/addons/map_gestures/functions/fnc_receiverInit.sqf +++ b/addons/map_gestures/functions/fnc_receiverInit.sqf @@ -22,4 +22,4 @@ if (!isNil QGVAR(DrawMapHandlerID)) then { (findDisplay 12 displayCtrl 51) ctrlRemoveEventHandler ["Draw", GVAR(DrawMapHandlerID)]; GVAR(DrawMapHandlerID) = nil; }; -GVAR(DrawMapHandlerID) = findDisplay 12 displayCtrl 51 ctrlAddEventHandler ["Draw", FUNC(drawMapGestures)]; +GVAR(DrawMapHandlerID) = findDisplay 12 displayCtrl 51 ctrlAddEventHandler ["Draw", {call FUNC(drawMapGestures)}]; diff --git a/addons/maptools/stringtable.xml b/addons/maptools/stringtable.xml index 8591029eb4..f22d3b7ed4 100644 --- a/addons/maptools/stringtable.xml +++ b/addons/maptools/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -178,14 +178,14 @@ マップ ツールを使って直線を書く Zeichne gerade Linien mit dem Kartenwerkzeug 독도용 도구로 직선 그리기 - Rysuje proste linie przy użyciu narzędzi nawigacyjnych + Rysuj proste linie przy użyciu narzędzi nawigacyjnych Draw on the edge of maptools to draw straight lines. Note: Must hover at midpoint to delete. マップ ツールの端から直線を書きます。メモ:線の中央ホバーすると削除します。 Zeichne gerade Linien am Rand des Kartenwerkzeugs. Hinweis: zum Löschen über den Mittelpunkt der Linie fahren 독도용 도구 가장자리에 직선을 그립니다. 주의: 삭제하기 위해선 선의 중앙에 가져다 대십시요 - Przyciągnij krawędź narzędzi nawigacyjnych by narysować prostą linię. Uwaga: aby usunąć linię - nalezy ustawić nad jej środkiem + Przeciągnij po krawędzi narzędzi nawigacyjnych by narysować prostą linię. Uwaga: aby usunąć linię - nalezy ustawić kursor nad jej środkiem. - + \ No newline at end of file diff --git a/addons/markers/stringtable.xml b/addons/markers/stringtable.xml index f9d77f80ca..261d7a0687 100644 --- a/addons/markers/stringtable.xml +++ b/addons/markers/stringtable.xml @@ -4,7 +4,7 @@ Direction: %1° Drehung: %1° - Direction: %1° + Direction : %1° Směr: %1° Kierunek: %1° Dirección: %1° @@ -16,4 +16,4 @@ 방위: %1° - + \ No newline at end of file diff --git a/addons/medical/CfgEden.hpp b/addons/medical/CfgEden.hpp index 9579f29c61..bebfdb9549 100644 --- a/addons/medical/CfgEden.hpp +++ b/addons/medical/CfgEden.hpp @@ -9,8 +9,8 @@ class Cfg3DEN { }; }; class GVAR(isMedicControl): Title { - attributeLoad = "(_this controlsGroupCtrl 100) lbsetcursel (((_value + 1) min 3) max 0);"; - attributeSave = "(missionnamespace getvariable ['ace_isMedic_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(AssignMedicRoles_role_none), CSTRING(AssignMedicRoles_role_medic), CSTRING(AssignMedicRoles_role_doctorShort)}; - onToolboxSelChanged = "missionnamespace setvariable ['ace_isMedic_temp',_this select 1];"; }; }; }; @@ -36,7 +35,7 @@ class Cfg3DEN { control = QGVAR(isMedicControl); displayName = CSTRING(AssignMedicRoles_role_DisplayName); tooltip = CSTRING(Attributes_isMedic_Description); - expression = QUOTE(if (_value != -1) then {_this setVariable [ARR_3(QUOTE(QGVAR(medicClass)),_value, true)];};); + expression = QUOTE(if (_value > -1) then {_this setVariable [ARR_3(QUOTE(QGVAR(medicClass)),_value, true)];};); typeName = "NUMBER"; condition = "objectBrain"; defaultValue = "-1"; diff --git a/addons/medical/XEH_preInit.sqf b/addons/medical/XEH_preInit.sqf index 45a2d2b6b7..6d09e9427c 100644 --- a/addons/medical/XEH_preInit.sqf +++ b/addons/medical/XEH_preInit.sqf @@ -50,6 +50,9 @@ addMissionEventHandler ["Loaded",{ TRACE_1("preload done",_this); }, [_x]] call CBA_fnc_waitUntilAndExecute; } forEach GVAR(fixedStatics); + + // Reload configs into extension (handle full game restart) + call FUNC(parseConfigForInjuries); }]; diff --git a/addons/medical/functions/fnc_handleDamage.sqf b/addons/medical/functions/fnc_handleDamage.sqf index de86665f99..4d3dc01e31 100644 --- a/addons/medical/functions/fnc_handleDamage.sqf +++ b/addons/medical/functions/fnc_handleDamage.sqf @@ -18,6 +18,7 @@ */ #include "script_component.hpp" +_this = _this select [0, 7]; params ["_unit", "_selection", "_damage", "_shooter", "_projectile", "_hitPointIndex"]; TRACE_5("ACE_DEBUG: HandleDamage Called",_unit, _selection, _damage, _shooter, _projectile); diff --git a/addons/medical/functions/fnc_treatmentAdvanced_fullHealLocal.sqf b/addons/medical/functions/fnc_treatmentAdvanced_fullHealLocal.sqf index 7517f235e7..67cbcad1d3 100644 --- a/addons/medical/functions/fnc_treatmentAdvanced_fullHealLocal.sqf +++ b/addons/medical/functions/fnc_treatmentAdvanced_fullHealLocal.sqf @@ -47,7 +47,6 @@ if (alive _target) exitWith { _target setVariable [QGVAR(airwayCollapsed), false, true]; // generic medical admin - _target setVariable [QGVAR(addedToUnitLoop), false, true]; _target setVariable [QGVAR(inCardiacArrest), false, true]; _target setVariable [QGVAR(inReviveState), false, true]; _target setVariable ["ACE_isUnconscious", false, true]; diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 8f372bef4b..297e81bb34 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -27,7 +27,7 @@ Žádné zranění na této části těla... Nenhum ferimento nesta parte do corpo... 怪我をしていない - 이쪽에는 부상이 없습니다... + 이 부위에는 부상이 없습니다... Litter Simulation Detail @@ -1562,7 +1562,7 @@ Použít osobní lékárničku (PAK) Usa il pronto soccorso personale 応急処置キットをつかう - 개 응급 키트사용하기 + 개인 응급 키트사용하기 Surgical Kit @@ -1632,7 +1632,7 @@ Saco para cadáver Pytel na mrtvoly 死体袋 - 시체 운반 부대 + 시체 가방 A bodybag for dead bodies @@ -1646,7 +1646,7 @@ Um saco para corpos mortos Pytel na mrtvoly 死体袋は死体を入れるためにつかいます - 시체를 운반할때 쓰는 부대입니다 + 시체를 운반할때 쓰는 가방입니다 A bodybag for dead bodies @@ -1660,7 +1660,7 @@ Um saco para corpos mortos. Pytel na mrtvoly 死体袋は死体を入れるためにつかいます - 시체를 운반할때 쓰는 부대입니다 + 시체를 운반할때 쓰는 가방입니다 Blood Pressure @@ -2206,7 +2206,7 @@ Je v bolestech Ele está com dor 彼には痛みがあるようだ - 고통스럽다 + 통증이 있다 He is not in pain @@ -2220,7 +2220,7 @@ Nemá žádné bolesti Ele não está com dor 彼には痛みがないようだ - 고통스럽지 않다 + 통증이 없다 Bandaged @@ -2444,7 +2444,7 @@ Colocar corpo dentro do saco para cadáver Umístni tělo do pytle na mrtvoly 死体袋に入れる - 시체 운반 부대에 담기 + 시체 가방에 담기 Placing body in bodybag... @@ -2458,7 +2458,7 @@ Colocando corpo dentro do saco para cadáver... Umístňuji tělo do pytle na mrtvoly... 死体袋へ梱包中・・・ - 시체 운반 부대에 담는중... + 시체 가방에 담는중... %1 has bandaged patient @@ -2582,7 +2582,7 @@ Velmi lehce raněn Muito levemente ferido かなり浅い傷 - 부상 + 매우 가벼운 부상 Head @@ -2805,7 +2805,7 @@ Raspão Odřenina 擦り傷 - 긁힘 + 찰과상 Minor Scrape @@ -2819,7 +2819,7 @@ Raspão leve Malá odřenina 小さな擦り傷 - 조금 긁힘 + 소형 찰과상 Medium Scrape @@ -2833,7 +2833,7 @@ Raspão médio Středně velká odřenina 中くらいの擦り傷 - 꽤 긁힘 + 중형 찰과상 Large Scrape @@ -2847,7 +2847,7 @@ Raspão grave Velká odřenina 大きな擦り傷 - 심하게 긁힘 + 대형 찰과상 Avulsion @@ -2861,7 +2861,7 @@ Avulsão Avulze 剥離傷 - 떨어져나감 + 열상 Minor Avulsion @@ -2875,7 +2875,7 @@ Avulsão leve Malá avulze 小さな剥離傷 - 조금 떨어져나감 + 소형 열상 Medium Avulsion @@ -2889,7 +2889,7 @@ Avulsão média Střední avulze 中くらいの剥離傷 - 꽤 떨어져나감 + 중형 열상 Large Avulsion @@ -2903,7 +2903,7 @@ Avulsão grave Velká avulze 大きな剥離傷 - 크게 떨어져나감 + 대형 열상 Bruise @@ -2917,7 +2917,7 @@ Contusão Modřina 打ち傷 - 멍 + 타박상 Minor Bruise @@ -2931,7 +2931,7 @@ Contusão leve Malá modřina 小さな打ち傷 - 조금 멍듬 + 소형 타박상 Medium Bruise @@ -2945,7 +2945,7 @@ Contusão média Středně velká modřina 中くらいの打ち傷 - 꽤 멍듬 + 중형 타박상 Large Bruise @@ -2959,7 +2959,7 @@ Contusão grave Velká modřina 大きな打撲傷 - 심하게 멍듬 + 대형 타박상 Crushed tissue @@ -2973,7 +2973,7 @@ Tecido esmagado Zhmoždění měkkých tkání 圧挫傷 - 뭉개짐 + 좌상 Minor crushed tissue @@ -2987,7 +2987,7 @@ Tecido esmagado leve Malé zhmoždění měkkých tkání 小さな圧挫傷 - 조금 뭉개짐 + 소형 좌상 Medium crushed tissue @@ -3001,7 +3001,7 @@ Tecido esmagado médio Střední zhmoždění měkkých tkání 中くらいの圧挫傷 - 꽤 뭉개짐 + 중형 좌상 Large crushed tissue @@ -3015,7 +3015,7 @@ Tecido esmagado grave Velké zhmoždění měkkých tkání 大きな圧挫傷 - 심하게 뭉개짐 + 대형 좌상 Cut @@ -3029,7 +3029,7 @@ Corte Řezná rána 切り傷 - 베임 + 절상 Small Cut @@ -3043,7 +3043,7 @@ Corte leve Malá řezná rána 小さな切り傷 - 조금 베임 + 소형 절상 Medium Cut @@ -3057,7 +3057,7 @@ Corte médio Střední řezná rána 中くらいの切り傷 - 꽤 베임 + 중형 절상 Large Cut @@ -3071,7 +3071,7 @@ Corte grave Velká řezná rána 大きな切り傷 - 심하게 베임 + 대형 절상 Tear @@ -3085,7 +3085,7 @@ Ruptura Tržná rána 裂傷 - 찢어짐 + 창상 Small Tear @@ -3099,7 +3099,7 @@ Ruptura leve Malá tržná rána 小さな裂傷 - 조금 찢어짐 + 소형 창상 Medium Tear @@ -3113,7 +3113,7 @@ Ruptura média Střední tržná rána 中くらいの裂傷 - 꽤 찢어짐 + 중형 창상 Large Tear @@ -3127,7 +3127,7 @@ Ruptura grave Velká tržná rána 大きな裂傷 - 심하게 찢어짐 + 대형 창상 Velocity Wound @@ -3337,7 +3337,7 @@ Milyen komplex legyen az orvosi szimuláció? Qual'è il livello di simulazione medica? 治療の再現度は? - 치료 시뮬레이션 정도? + 의료 시뮬레이션의 수준 Basic @@ -3796,7 +3796,7 @@ Engedélyezve Abilitato per 次を有効化 - 다음을 활성화 + 활성 Select what units the advanced medical system will be enabled for @@ -3976,7 +3976,7 @@ Csak orvosok Solo medici 衛生兵のみ - 오직 의무병만 + 의무병만 Doctors only @@ -3990,7 +3990,7 @@ Csak doktorok Solo dottori 医師のみ - 오직 의사만 + 의사만 Remove PAK on use @@ -4068,7 +4068,7 @@ Wo kann das Erste-Hilfe-Set verwendet werden? Kde může být použita osobní lékárnička (PAK)? Onde o kit de primeiros socorros pode ser utilizado? - Où le Kit de Premier Secour peut être utilisé + Où le Kit de Premier Secour peut être utilisé ? Hol lehet az elsősegélycsomagot használni? Dove può essere usato il Kit Pronto Soccorso? どこでも応急処置キットをつかえるようにしますか? @@ -4093,7 +4093,7 @@ Wann kann das Erste-Hilfe-Set verwendet werden? Kdy může být použita osobní lékárnička? ¿Cuando se puede utilizar el Equipo de primeros auxilios? - Quand peut être utilisé le Kit de Premier Secours + Quand peut être utilisé le Kit de Premier Secours ? Po spełnieniu jakich warunków apteczka osobista może zostać zastosowana na pacjencie? Mikor lehet az elsősegélycsomagot használni? Onde o kit de primeiros socorros pode ser utilizado? @@ -4110,7 +4110,7 @@ Überall Kdekoliv Qualquer lugar - PArtout + Partout Akárhol Ovunque どこでも @@ -4456,7 +4456,7 @@ Aktiviert das Sanitätssystem für Spieler und KI. Poskytuje zdravotní systém pro hráče a AI. Proporciona um sistema médico para jogadores e IA. - Fourni un sytème médical pour les joueurs et les IAs + Fourni un sytème médical pour les joueurs et les IA. Egy orvosi rendszert ad játékosok és AI-k számára. Fornisce un sistema medico sia per giocatori che IA プレイヤーと AI の両方へ医療システムを提供します。 @@ -4498,7 +4498,7 @@ Aufzählung von Einheiten, die als Sanitäter gelten. Werden durch Kommata getrennt. Seznam osob které budou klasifikovány jako zdravotník, oddělené čárkami. Lista dos nomes das unidades que se classificam como médicos, separados por vírgulas. - Liste d'unité qui seront listées comme infirmier, séparation par virgule + Liste d'unité qui seront listées comme infirmier, séparation par virgule. Azon egységek nevei, melyek orvosként vannak meghatározva, vesszővel elválasztva. Lista di nomi unità che verranno classificati come medici, separati da virgole. 衛生兵として設定されるユニット名を一覧で指定でき、コンマで区切りを付けられます。 @@ -4694,7 +4694,7 @@ Setze medizinische Einrichtung [ACE] Určit zdravotnické zařízení [ACE] Definir instalação médica [ACE] - Définir comme équipement médical [ACE] + Définir comme installation médical [ACE] Orvosi létesítmény beállítása [ACE] Imposta Struttura Medica [ACE] 医療施設として設定 [ACE] @@ -4708,7 +4708,7 @@ Ist eine medizinische Einrichtung Zdravotnické zařízení É uma instalação médica - Est un équipement médical + Est une installation médical Orvosi létesítmény-e E' Struttura Medica 医療施設として @@ -4722,7 +4722,7 @@ Definiert ein Objekt als medizinische Einrichtung Registruje objekt jako zdravotnické zařízení Registra um objeto como instalacão médica - Enregistrer un objet comme un équipement médical + Enregistrer un objet comme une installation médical Egy objektum orvosi létesítményként való regisztrálása Registra un oggetto come struttura medica オブジェクトを医療施設として割り当てる @@ -4736,7 +4736,7 @@ Definiert ein Objekt als medizinische Einrichtung. Hier werden weitere, tiefgreifende Behandlungen ermöglicht. Kann Fahrzeugen oder Gebäuden zugewiesen werden. Definuje objekt jako zdravotnické zařízení. To umožňuje více pokročilé léčení. Může být použito na budovy nebo na vozidla. Define um objeto como instalação médica. Isso permite tratamentos mais avançados. Pode ser utilizado em edifícios e veículos. - Définir un objet comme équipement médical. Cela permet les traitements avancés. Peut être utilisé sur les batiments et les véhicules + Définir un objet comme installation médical. Cela permet les traitements avancés. Peut être utilisé sur les batiments et les véhicules Egy objektumot orvosi létesítményként határoz meg. Ez fejlett ellátási lehetőségeket engedélyez. Használható járműveken és épületeken. Definisce un oggetto come struttura medica. Questo permette cure più avanzate. Può essere usato su edifici e veicoli. オブジェクトを医療施設として割り当てます。割り当てられた場合、より高度な治療が可能になり、建物と車両へつかえます。 @@ -4882,7 +4882,7 @@ Ritarda il cessate il fuoco dell'IA quando il giocatore è svenuto per motivi medici. Prodleva zastavení palby pro AI, pokud je hráč v bezvědomí ze zdravotních důvodů. Atraso durante cessar fogo da AI durante inconsciência médica - Délai de cessez le feu pour l'IA pendant que le joueur est inconscient pour des raisons médicales + Délai de cessez le feu pour l'IA pendant que le joueur est inconscient pour des raisons médicales. Задержка прекращения огня ботами, когда игрок теряет сознание по медицинским причинам. AI はプレイヤーが医療的な理由で気絶している場合にかぎり、撃つのをためらいます。 Opóźnij stan wstrzymania ognia u AI kiedy gracz jest nieprzytomny z powodów medycznych. diff --git a/addons/medical_ai/stringtable.xml b/addons/medical_ai/stringtable.xml index b3dc75dce6..c7eba9b03a 100644 --- a/addons/medical_ai/stringtable.xml +++ b/addons/medical_ai/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -8,6 +8,7 @@ Нур сервера унд HC サーバーと HC のみ Tylko serwer i HC + Seulement sur le server ou le HC diff --git a/addons/medical_blood/stringtable.xml b/addons/medical_blood/stringtable.xml index 171a01e406..a45dc29d90 100644 --- a/addons/medical_blood/stringtable.xml +++ b/addons/medical_blood/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -6,7 +6,7 @@ プレイヤーのみ Nur Spieler 오직 플레이어만 - Tylko postacie graczy + Tylko gracze Enable Blood Drops @@ -19,7 +19,7 @@ Enable or disable Blood Drops created on bleeding and taking damage ダメージを受けたり、出血していると血が滴る様子の有効か無効化 Aktiviere oder deaktiviere Blutspritzer, die durch Blutungen oder bei Schadensnahme entstehen. - Włącz/Wyłącz pozostawianie śladów krwi na ziemi kiedy postać odnosi obrażenia bądź krwawi + Włącz lub wyłącz pozostawianie śladów krwi na ziemi kiedy postać odnosi obrażenia bądź krwawi - + \ No newline at end of file diff --git a/addons/medical_menu/stringtable.xml b/addons/medical_menu/stringtable.xml index 36c5a6a182..79f0e1b8b9 100644 --- a/addons/medical_menu/stringtable.xml +++ b/addons/medical_menu/stringtable.xml @@ -318,7 +318,7 @@ Wähle Kopf Выбрать голову Seleccionar Cabeza - Selectioner Tête + Selectioner la tête Wybierz głowę Selecionar Cabeça Vybrat Hlavu @@ -331,7 +331,7 @@ Wähle Torso Выбрать торс Seleccionar Torso - Selectioner Torse + Selectioner le torse Wybierz tors Selecionar Torso Vybrat Trup @@ -344,7 +344,7 @@ Wähle linken Arm Выбрать левую руку Seleccionar Brazo Izquierdo - Selectioner Bras Gauche + Selectioner le bras gauche Wybierz lewą rękę Selecionar Braço Esquerdo Vybrat Levou ruku @@ -357,7 +357,7 @@ Wähle rechten Arm Выбрать правую руку Seleccionar Brazo Derecho - Selectioner Bras Droit + Selectioner le bras droit Wybierz prawą rękę Selecionar Braço Direito Vybrat Pravou ruku @@ -370,7 +370,7 @@ Wähle linkes Bein Выбрать левую ногу Seleccionar Pierna Izquierda - Selectioner Jambe Gauche + Selectioner la jambe gauche Wybierz lewą nogę Selecionar Perna Esquerda Vybrat Levou nohu @@ -383,7 +383,7 @@ Wähle rechtes Bein Выбрать правую ногу Seleccionar Pierna Derecha - Selectioner Jambe Droite + Selectioner la jambe droite Wybierz prawą nogę Selecionar Perna Direita Vybrat Pravou nohu @@ -422,7 +422,7 @@ Linker Arm Левая рука Brazo Izquierdo - Bras Gauche + Bras gauche Lewa ręka Braço Esquerdo Levá Ruka @@ -435,7 +435,7 @@ Rechter Arm Правая рука Brazo Derecho - Bras Droit + Bras droit Prawa ręka Braço Direito Pravá Ruka @@ -448,7 +448,7 @@ Linkes Bein Левая нога Pierna Izquierda - Jambe Gauche + Jambe gauche Lewa noga Perna Esquerda Levá Noha @@ -461,7 +461,7 @@ Rechtes Bein Правая нога Pierna Derecha - Jambe Droite + Jambe droite Prawa noga Perna Direita Pravá Noha @@ -474,7 +474,7 @@ Körperteil: %1 Часть тела: %1 Parte del cuerpo: %1 - Partie du corps: %1 + Partie du corps : %1 Część ciała: %1 Parte do corpo: %1 Část těla: %1 @@ -526,7 +526,7 @@ Er hat %2 offene Wunden (%1) %2 открытые раны %1 Hay %2 Heridas Abiertas %1 - Il y a %2 %1 Blessure(s) Ouverte(s) + Il y a %2 %1 blessure(s) ouverte(s) Widzisz otwarte rany w ilości %2 o %1 rozmiarze Existem %2 ferimentos abertos %1 Jsou zde %2 %1 otevřené rány @@ -552,7 +552,7 @@ Er hat eine zum Teil offene Wunde (%1) Частично открытая рана %1 Hay una herida parcial abierta %1 - Il y a une Blessure Patiellement Ouverte %1 + Il y a une blessure partiellement ouverte %1 Widzisz częściowo otwartą ranę o %1 rozmiarze Existe um ferimento parcial aberto %1 Je zde částečně %1 otevřená rána @@ -565,7 +565,7 @@ Er hat %2 verbundene Wunden (%1) %2 перевязанные раны %1 Hay %2 Heridas %1 Vendadas - Il y a %2 %1 Blessure(s) Bandée(s) + Il y a %2 %1 blessure(s) bandée(s) Widzisz %2 zabandażowanych ran o %1 rozmiarze Existem %2 ferimentos %1 tratados Jsou zde %2 %1 ovázané rány @@ -578,7 +578,7 @@ Er hat 1 verbundene Wunde (%1) 1 перевязанная рана %1 Hay 1 Herida Vendada %1 - Il y a 1 %1 Blessure Bandée + Il y a 1 %1 blessure bandée Widzisz 1 zabandażowaną ranę o %1 rozmiarze Existe 1 ferimento %1 tratado Je zde 1 %1 ovázaná rána @@ -591,7 +591,7 @@ Er hat eine zum Teil verbundene Wunde (%1) Частично перевязанная рана %1 Hay una Herida parcial %1 Vendada - Il y a %1 Blessure Partielment Bandée + Il y a %1 blessure partiellement bandée Widzisz 1 częściowo zabandażowaną ranę o %1 rozmiarze Existe um ferimento parcial tratado %1 Je zde částěčně %1 ovázaná rána @@ -682,7 +682,7 @@ hat sehr viel Blut verloren Большая кровопотеря Mucha Sangre perdida - A Perdu Bcp de Sang + A perdu beaucoup de sang Stracił dużo krwi Perdeu muito sangue Ztratil hodně krve diff --git a/addons/minedetector/stringtable.xml b/addons/minedetector/stringtable.xml index a9aa235f18..14ff729334 100644 --- a/addons/minedetector/stringtable.xml +++ b/addons/minedetector/stringtable.xml @@ -49,6 +49,7 @@ Podłącz słuchawki Kopfhörer verbinden 헤드폰에 연결 + Connecter les écouteurs Disconnect Headphones @@ -58,6 +59,7 @@ Odłącz słuchawki Kopfhörer trennen 헤드폰 연결끊기 + Déconnecter les écouteurs Headphones Connected @@ -67,6 +69,7 @@ Słuchawki podpięte Kopfhörer verbunden 헤드폰 연결됨 + Écouteurs connectés Headphones Disconnected @@ -76,6 +79,8 @@ Słuchawki odpięte Kopfhörer getrennt 헤드폰 연결끊김 + Écouteurs déconnectés + diff --git a/addons/missileguidance/CfgAmmo.hpp b/addons/missileguidance/CfgAmmo.hpp index 343b911f23..49fa40331e 100644 --- a/addons/missileguidance/CfgAmmo.hpp +++ b/addons/missileguidance/CfgAmmo.hpp @@ -69,7 +69,7 @@ class CfgAmmo { class M_Titan_AT: MissileBase {}; class ACE_Javelin_FGM148: M_Titan_AT { - irLock = 0; + irLock = 1; laserLock = 0; airLock = 0; diff --git a/addons/missileguidance/XEH_PREP.hpp b/addons/missileguidance/XEH_PREP.hpp index 8d13e2b499..ee2b7328cb 100644 --- a/addons/missileguidance/XEH_PREP.hpp +++ b/addons/missileguidance/XEH_PREP.hpp @@ -1,3 +1,5 @@ +LOG("prep"); +PREP(cycleAttackProfileKeyDown); PREP(changeMissileDirection); diff --git a/addons/missileguidance/XEH_post_init.sqf b/addons/missileguidance/XEH_post_init.sqf index 282aac5503..cc09b1f0ac 100644 --- a/addons/missileguidance/XEH_post_init.sqf +++ b/addons/missileguidance/XEH_post_init.sqf @@ -1,3 +1,13 @@ #include "script_component.hpp" [QGVAR(handoff), {_this call FUNC(handleHandoff)}] call CBA_fnc_addEventHandler; + +["ACE3 Weapons", QGVAR(cycleFireMode), localize LSTRING(CycleFireMode), +{ + [] call FUNC(cycleAttackProfileKeyDown); + false +}, +{ + false +}, +[15, [false, true, false]], false] call CBA_fnc_addKeybind; //Ctrl+Tab Key diff --git a/addons/missileguidance/functions/fnc_cycleAttackProfileKeyDown.sqf b/addons/missileguidance/functions/fnc_cycleAttackProfileKeyDown.sqf new file mode 100644 index 0000000000..05db3748da --- /dev/null +++ b/addons/missileguidance/functions/fnc_cycleAttackProfileKeyDown.sqf @@ -0,0 +1,67 @@ +/* + * Author: PabstMirror + * Cycles fire mode for any missileGuidance enabled ammo that has multiple attack profiles + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * [] call ace_missileguidance_fnc_cycleAttackProfileKeyDown + * + * Public: No + */ +// #define DEBUG_MODE_FULL +#include "script_component.hpp" + +TRACE_1("cycle fire mode",_this); + +if (!alive ACE_player) exitWith {}; +if (!([ACE_player, objNull, ["isNotInside"]] call EFUNC(common,canInteractWith))) exitWith {}; + + +private ["_currentShooter", "_currentMagazine"]; +if (((vehicle ACE_player) == ACE_player) || {ACE_player call CBA_fnc_canUseWeapon}) then { + _currentShooter = ACE_player; + _currentMagazine = currentMagazine ACE_player; +} else { + _currentShooter = vehicle ACE_player; + _currentMagazine = _currentShooter currentMagazineTurret (ACE_player call CBA_fnc_turretPath); +}; +if (_currentMagazine == "") exitWith {TRACE_1("no magazine",_currentMagazine)}; + +private _ammo = getText (configFile >> "CfgMagazines" >> _currentMagazine >> "ammo"); + +TRACE_3("",_currentShooter,_currentMagazine,_ammo); + +// Bail if guidance is disabled for this ammo +if ((getNumber (configFile >> "CfgAmmo" >> _ammo >> QUOTE(ADDON) >> "enabled")) != 1) exitWith {TRACE_1("not enabled",_ammo)}; + +// Verify ammo has explicity added guidance config (ignore inheritances) +private _configs = configProperties [(configFile >> "CfgAmmo" >> _ammo), QUOTE(configName _x == QUOTE(QUOTE(ADDON))), false]; +if ((count _configs) < 1) exitWith {TRACE_2("not explicity enabled",_ammo,_configs)}; + +private _attackProfiles = getArray (configFile >> "CfgAmmo" >> _ammo >> QUOTE(ADDON) >> "attackProfiles"); +if ((count _attackProfiles) <= 1) exitWith {TRACE_1("no choices for attack profile",_attackProfiles)}; + +private _currentFireMode = _currentShooter getVariable [QGVAR(attackProfile), "#undefined"]; + +// Just like onFired, this is case sensitive! +private _index = _attackProfiles find _currentFireMode; +if (_index == -1) then { + _index = _attackProfiles find (getText (configFile >> "CfgAmmo" >> _ammo >> QUOTE(ADDON) >> "defaultAttackProfile")); +}; +_index = (_index + 1) % (count _attackProfiles); +private _nextFireMode = _attackProfiles select _index; +TRACE_4("",_currentFireMode,_nextFireMode,_index,_attackProfiles); + +_currentShooter setVariable [QGVAR(attackProfile), _nextFireMode, false]; + +playSound "ACE_Sound_Click"; + +if ((getNumber (configFile >> "CfgAmmo" >> _ammo >> QUOTE(ADDON) >> "showHintOnCycle")) == 1) then { + private _localizedName = getText (configFile >> QGVAR(AttackProfiles) >> _nextFireMode >> "name"); + [_localizedName] call EFUNC(common,displayTextStructured); +}; diff --git a/addons/missileguidance/stringtable.xml b/addons/missileguidance/stringtable.xml index f1177ef36f..54cc4e9757 100644 --- a/addons/missileguidance/stringtable.xml +++ b/addons/missileguidance/stringtable.xml @@ -154,5 +154,19 @@ Giocatore ed IA プレイヤーと AI + + Cycle Fire Mode + Wechsle Feuermodus + Переключение режимов огня + Přepínání režimů palby + Przełącz tryb ognia + Cycle mode de tir + Tüzelési mód váltása + Alterna le modalità di fuoco + Cambiar modo de disparo + Alterar Modo de Disparo + 発射モード切り替え + 발사 방식 순환 + diff --git a/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf b/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf index ddd0d4377e..300def5dc7 100644 --- a/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf +++ b/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf @@ -88,9 +88,9 @@ if (_activated && local _logic) then { private _newPosASL = if (_followPlayers) then { // Select a target unit at random. private _targetUnit = selectRandom _allUnits; - AGLtoASL (_targetUnit getPos [random 360, _minimalDistance + random (_maximalDistance - _minimalDistance)]); + AGLtoASL (_targetUnit getPos [_minimalDistance + random (_maximalDistance - _minimalDistance), random 360]); } else { - AGLtoASL (_logic getPos [random 360, _minimalDistance + random (_maximalDistance - _minimalDistance)]); + AGLtoASL (_logic getPos [_minimalDistance + random (_maximalDistance - _minimalDistance), random 360]); }; TRACE_1("",_newPosASL); diff --git a/addons/modules/CfgEventHandlers.hpp b/addons/modules/CfgEventHandlers.hpp index cd12d1938e..dc1da95f37 100644 --- a/addons/modules/CfgEventHandlers.hpp +++ b/addons/modules/CfgEventHandlers.hpp @@ -1,4 +1,3 @@ - class Extended_PreStart_EventHandlers { class ADDON { init = QUOTE(call COMPILE_FILE(XEH_preStart)); @@ -11,7 +10,6 @@ class Extended_PreInit_EventHandlers { }; }; - class Extended_PostInit_EventHandlers { class _ACE_modules { // using a _ so it is the first postInit to be executed init = QUOTE(call COMPILE_FILE(XEH_postInit)); diff --git a/addons/modules/XEH_PREP.hpp b/addons/modules/XEH_PREP.hpp index 66edc4e817..ab0c69eab9 100644 --- a/addons/modules/XEH_PREP.hpp +++ b/addons/modules/XEH_PREP.hpp @@ -1,2 +1 @@ - PREP(moduleInit); diff --git a/addons/modules/XEH_postInit.sqf b/addons/modules/XEH_postInit.sqf index 25049d60a3..dcd6277aed 100644 --- a/addons/modules/XEH_postInit.sqf +++ b/addons/modules/XEH_postInit.sqf @@ -1,4 +1,3 @@ - #include "script_component.hpp" [QEGVAR(common,initSettingsFromModules), { @@ -10,7 +9,7 @@ [_x] call { params ["_logic"]; private _logicType = typeOf _logic; - _logic hideobject true; + _logic hideObject true; if (_logic getVariable [QGVAR(initalized), false]) exitWith {}; private _config = (configFile >> "CfgVehicles" >> _logicType); @@ -18,7 +17,7 @@ private _isGlobal = getNumber (_config >> "isGlobal") > 0; private _isDisposable = getNumber (_config >> "isDisposable") > 0; - private _isPersistent = getNumber (_config >> "isPersistent") > 0 || getnumber (_config >> "isGlobal") > 1; + private _isPersistent = getNumber (_config >> "isPersistent") > 0 || getNumber (_config >> "isGlobal") > 1; private _isSingular = getNumber (_config >> "isSingular") > 0; private _function = getText (_config >> "function"); if (isNil _function) then { diff --git a/addons/movement/functions/fnc_handleVirtualMass.sqf b/addons/movement/functions/fnc_handleVirtualMass.sqf index 8e33197089..8dc1412c4a 100644 --- a/addons/movement/functions/fnc_handleVirtualMass.sqf +++ b/addons/movement/functions/fnc_handleVirtualMass.sqf @@ -28,6 +28,8 @@ private _virtualLoad = 0; backpackContainer _unit ]; +_unit setVariable [QGVAR(totalLoad), (loadAbs _unit + _virtualLoad)]; + // get absolute vanilla load private _absLoad = getNumber (configFile >> "CfgInventoryGlobalVariable" >> "maxSoldierLoad"); diff --git a/addons/movement/stringtable.xml b/addons/movement/stringtable.xml index a160b498c1..9d7c5d219d 100644 --- a/addons/movement/stringtable.xml +++ b/addons/movement/stringtable.xml @@ -19,7 +19,7 @@ Weight: Gewicht: Peso: - Poids: + Poids : Waga: Váha: Peso: @@ -57,4 +57,4 @@ ここは登れない - + \ No newline at end of file diff --git a/addons/nametags/XEH_PREP.hpp b/addons/nametags/XEH_PREP.hpp index 5d99258d27..a27102a4e5 100644 --- a/addons/nametags/XEH_PREP.hpp +++ b/addons/nametags/XEH_PREP.hpp @@ -2,6 +2,7 @@ PREP(canShow); PREP(doShow); PREP(drawNameTagIcon); +PREP(getCachedFlags); PREP(getVehicleData); PREP(initIsSpeaking); PREP(moduleNameTags); diff --git a/addons/nametags/XEH_postInit.sqf b/addons/nametags/XEH_postInit.sqf index 594fe595ff..2df7565cd6 100644 --- a/addons/nametags/XEH_postInit.sqf +++ b/addons/nametags/XEH_postInit.sqf @@ -15,7 +15,7 @@ GVAR(showNamesTime) = -10; // Statement GVAR(showNamesTime) = CBA_missionTime; - if (call FUNC(canShow)) then{ call FUNC(doShow); }; + // if (call FUNC(canShow)) then{ call FUNC(doShow); }; // This code doesn't work (canShow has a nil / has never worked??) // Return false so it doesn't block other actions false }, @@ -34,6 +34,13 @@ GVAR(showNamesTime) = -10; if (_name == QGVAR(showPlayerNames)) then { call FUNC(updateSettings); }; + // Reset nametag flag cache on setting change: + ACE_player setVariable [QGVAR(flagsCache), nil]; +}] call CBA_fnc_addEventHandler; + +["cba_events_visionModeEvent", { + // Reset nametag flag cache on vision mode change: + ACE_player setVariable [QGVAR(flagsCache), nil]; }] call CBA_fnc_addEventHandler; // civilians don't use military ranks diff --git a/addons/nametags/functions/fnc_getCachedFlags.sqf b/addons/nametags/functions/fnc_getCachedFlags.sqf new file mode 100644 index 0000000000..27aaa7af7c --- /dev/null +++ b/addons/nametags/functions/fnc_getCachedFlags.sqf @@ -0,0 +1,56 @@ +/* + * Author: + * 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/overpressure/stringtable.xml b/addons/overpressure/stringtable.xml index b7458a12bb..420c732b8d 100644 --- a/addons/overpressure/stringtable.xml +++ b/addons/overpressure/stringtable.xml @@ -1,15 +1,17 @@ - + Overpressure Distance Coefficient - 過圧の距離係数 + 過圧の距離係数 초과압력 거리 계수 + Mnożnik dystansu nadciśnienia Scales the overpressure effect [Default: 1] - 過圧効果の範囲 [標準: 1] + 過圧効果の範囲 [標準: 1] 초과압력의 효과 크기 [기본설정: 1] + Skaluje efekt nadciśnienia [Domyślne: 1] - + \ No newline at end of file diff --git a/addons/rangecard/functions/fnc_updateRangeCard.sqf b/addons/rangecard/functions/fnc_updateRangeCard.sqf index e62a5ee418..42863e2911 100644 --- a/addons/rangecard/functions/fnc_updateRangeCard.sqf +++ b/addons/rangecard/functions/fnc_updateRangeCard.sqf @@ -174,7 +174,7 @@ if (isNil {_cacheEntry}) then { [_scopeBaseAngle,_boreHeight,_airFriction,_mv,_x,EGVAR(scopes,zeroReferenceBarometricPressure),EGVAR(scopes,zeroReferenceHumidity),100,4,1,GVAR(rangeCardEndRange),_bc,_dragModel,_atmosphereModel,_transonicStabilityCoef,_forEachIndex,_useABConfig] call FUNC(calculateRangeCard); } forEach [-15, -5, 5, 10, 15, 20, 25, 30, 35]; } else { - [_scopeBaseAngle,_boreHeight,_airFriction,_muzzleVelocity,15,EGVAR(scopes,zeroReferenceBarometricPressure),EGVAR(scopes,zeroReferenceHumidity),100,4,1,GVAR(rangeCardEndRange),_bc,_dragModel,_atmosphereModel,_transonicStabilityCoef,4,_useABConfig] call FUNC(calculateRangeCard); + [_scopeBaseAngle,_boreHeight,_airFriction,_muzzleVelocity,15,EGVAR(scopes,zeroReferenceBarometricPressure),EGVAR(scopes,zeroReferenceHumidity),100,4,1,GVAR(rangeCardEndRange),_bc,_dragModel,_atmosphereModel,_transonicStabilityCoef,3,_useABConfig] call FUNC(calculateRangeCard); }; for "_i" from 0 to 9 do { diff --git a/addons/realisticnames/CfgVehicles.hpp b/addons/realisticnames/CfgVehicles.hpp index f53465b08f..f31b7ffeac 100644 --- a/addons/realisticnames/CfgVehicles.hpp +++ b/addons/realisticnames/CfgVehicles.hpp @@ -251,6 +251,18 @@ class CfgVehicles { class I_Truck_02_medical_F: Truck_02_medical_base_F { displayName = CSTRING(Truck_02_medical_Name); }; + class C_Truck_02_transport_F: Truck_02_transport_base_F { + displayName = CSTRING(Truck_02_transport_Name); + }; + class C_Truck_02_covered_F: Truck_02_base_F { + displayName = CSTRING(Truck_02_covered_Name); + }; + class C_Truck_02_fuel_F: Truck_02_fuel_base_F { + displayName = CSTRING(Truck_02_fuel_Name); + }; + class C_Truck_02_box_F: Truck_02_box_base_F { + displayName = CSTRING(Truck_02_box_Name); + }; class Truck_03_base_F; class O_Truck_03_transport_F: Truck_03_base_F { diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index 2a4873345b..a490a78ab5 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -2605,88 +2605,88 @@ MP5K - HK416A5 10" (Black) - HK416A5 10" (Černá) - HK416A5 10" (Noir) - HK416A5 10" (Negro) - HK416A5 10" (Чёрный) - HK416A5 10" (czarny) - HK416A5 10" (Schwarz) - HK416A5 10" (Nero) - HK416A5 10" (Fekete) - HK416A5 10" (Preto) - HK416A5 10" (黒) - HK416A5 10" (검정) + HK416A5 11" (Black) + HK416A5 11" (Černá) + HK416A5 11" (Noir) + HK416A5 11" (Negro) + HK416A5 11" (Чёрный) + HK416A5 11" (czarny) + HK416A5 11" (Schwarz) + HK416A5 11" (Nero) + HK416A5 11" (Fekete) + HK416A5 11" (Preto) + HK416A5 11" (黒) + HK416A5 11" (검정) - HK416A5 10" (Khaki) - HK416A5 10" (Khaki) - HK416A5 10" (Kaki) - HK416A5 10" (Caqui) - HK416A5 10" (Хаки) - HK416A5 10" (khaki) - HK416A5 10" (Khaki) - HK416A5 10" (Khaki) - HK416A5 10" (Khaki) - HK416A5 10" (Caqui) - HK416A5 10" (土埃) - HK416A5 10" (카키) + HK416A5 11" (Khaki) + HK416A5 11" (Khaki) + HK416A5 11" (Kaki) + HK416A5 11" (Caqui) + HK416A5 11" (Хаки) + HK416A5 11" (khaki) + HK416A5 11" (Khaki) + HK416A5 11" (Khaki) + HK416A5 11" (Khaki) + HK416A5 11" (Caqui) + HK416A5 11" (土埃) + HK416A5 11" (카키) - HK416A5 10" (Sand) - HK416A5 10" (Písková) - HK416A5 10" (Beige) - HK416A5 10" (Arena) - HK416A5 10" (Песочный) - HK416A5 10" (Sand) - HK416A5 10" (piaskowy) - HK416A5 10" (Sabbia) - HK416A5 10" (Homok) - HK416A5 10" (Deserto) - HK416A5 10" (砂地) - HK416A5 10" (모래) + HK416A5 11" (Sand) + HK416A5 11" (Písková) + HK416A5 11" (Beige) + HK416A5 11" (Arena) + HK416A5 11" (Песочный) + HK416A5 11" (Sand) + HK416A5 11" (piaskowy) + HK416A5 11" (Sabbia) + HK416A5 11" (Homok) + HK416A5 11" (Deserto) + HK416A5 11" (砂地) + HK416A5 11" (모래) - HK416A5 10" GL (Black) - HK416A5 10" GL (Černá) - HK416A5 10" GL (Noir) - HK416A5 10" GL (Negro) - HK416A5 10" GL (Чёрный) - HK416A5 10" GL (czarny) - HK416A5 10" GL (Schwarz) - HK416A5 10" GL (Nero) - HK416A5 10" GL (Fekete) - HK416A5 10" GL (Preto) - HK416A5 10" GL (黒) - HK416A5 10" GL (검정) + HK416A5 11" GL (Black) + HK416A5 11" GL (Černá) + HK416A5 11" GL (Noir) + HK416A5 11" GL (Negro) + HK416A5 11" GL (Чёрный) + HK416A5 11" GL (czarny) + HK416A5 11" GL (Schwarz) + HK416A5 11" GL (Nero) + HK416A5 11" GL (Fekete) + HK416A5 11" GL (Preto) + HK416A5 11" GL (黒) + HK416A5 11" GL (검정) - HK416A5 10" GL (Khaki) - HK416A5 10" GL (Khaki) - HK416A5 10" GL (Kaki) - HK416A5 10" GL (Caqui) - HK416A5 10" GL (Хаки) - HK416A5 10" GL (khaki) - HK416A5 10" GL (Khaki) - HK416A5 10" GL (Khaki) - HK416A5 10" GL (Khaki) - HK416A5 10" GL (Caqui) - HK416A5 10" GL (土埃) - HK416A5 10" GL (카키) + HK416A5 11" GL (Khaki) + HK416A5 11" GL (Khaki) + HK416A5 11" GL (Kaki) + HK416A5 11" GL (Caqui) + HK416A5 11" GL (Хаки) + HK416A5 11" GL (khaki) + HK416A5 11" GL (Khaki) + HK416A5 11" GL (Khaki) + HK416A5 11" GL (Khaki) + HK416A5 11" GL (Caqui) + HK416A5 11" GL (土埃) + HK416A5 11" GL (카키) - HK416A5 10" GL (Sand) - HK416A5 10" GL (Písková) - HK416A5 10" GL (Beige) - HK416A5 10" GL (Arena) - HK416A5 10" GL (Песочный) - HK416A5 10" GL (Sand) - HK416A5 10" GL (piaskowy) - HK416A5 10" GL (Sabbia) - HK416A5 10" GL (Homok) - HK416A5 10" GL (Deserto) - HK416A5 10" GL (砂地) - HK416A5 10" GL (모래) + HK416A5 11" GL (Sand) + HK416A5 11" GL (Písková) + HK416A5 11" GL (Beige) + HK416A5 11" GL (Arena) + HK416A5 11" GL (Песочный) + HK416A5 11" GL (Sand) + HK416A5 11" GL (piaskowy) + HK416A5 11" GL (Sabbia) + HK416A5 11" GL (Homok) + HK416A5 11" GL (Deserto) + HK416A5 11" GL (砂地) + HK416A5 11" GL (모래) HK416A5 14.5" (Black) @@ -2769,7 +2769,7 @@ HK417A2 20" (Sabbia) HK417A2 20" (Homok) HK417A2 20" (Deserto) - HK417A2 20'' (砂地) + HK417A2 20" (砂地) HK417A2 20" (모래) diff --git a/addons/rearm/CfgVehicles.hpp b/addons/rearm/CfgVehicles.hpp index c60256dee4..ef006b61be 100644 --- a/addons/rearm/CfgVehicles.hpp +++ b/addons/rearm/CfgVehicles.hpp @@ -109,6 +109,7 @@ class CfgVehicles { // Ammo Vehicles (with full inheritance for granted ACE_Actions) class Car_F: Car {}; class Truck_F: Car_F {}; + class Tank_F: Tank {}; class Truck_03_base_F: Truck_F {}; class O_Truck_03_ammo_F: Truck_03_base_F { @@ -135,6 +136,13 @@ class CfgVehicles { MACRO_REARM_TRUCK_ACTIONS }; + class APC_Tracked_01_base_F: Tank_F {}; + class B_APC_Tracked_01_base_F: APC_Tracked_01_base_F {}; + class B_APC_Tracked_01_CRV_F: B_APC_Tracked_01_base_F { + transportAmmo = 0; + MACRO_REARM_TRUCK_ACTIONS + }; + class Helicopter_Base_F: Helicopter {}; class Helicopter_Base_H: Helicopter_Base_F {}; class Heli_Transport_04_base_F: Helicopter_Base_H {}; diff --git a/addons/rearm/XEH_postInit.sqf b/addons/rearm/XEH_postInit.sqf index cfbbdf9d4d..296728807f 100644 --- a/addons/rearm/XEH_postInit.sqf +++ b/addons/rearm/XEH_postInit.sqf @@ -13,3 +13,11 @@ if (isServer) then { [QGVAR(makeDummyEH), FUNC(makeDummy)] call CBA_fnc_addEventHandler; [QGVAR(rearmEntireVehicleSuccessLocalEH), FUNC(rearmEntireVehicleSuccessLocal)] call CBA_fnc_addEventHandler; [QGVAR(rearmSuccessLocalEH), FUNC(rearmSuccessLocal)] call CBA_fnc_addEventHandler; + + +#ifdef DEBUG_MODE_FULL +INFO("Showing CfgVehicles with vanilla transportAmmo"); +{ + WARNING_2("Type [%1] needs config [transportAmmo: %2]", configName _x, getNumber (_x >> 'transportAmmo')); +} forEach (configProperties [configFile >> "CfgVehicles", "(isClass _x) && {(getNumber (_x >> 'transportAmmo')) > 0}", true]); +#endif 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/repair/CfgVehicles.hpp b/addons/repair/CfgVehicles.hpp index 56f9ccea73..178e8ecb12 100644 --- a/addons/repair/CfgVehicles.hpp +++ b/addons/repair/CfgVehicles.hpp @@ -471,7 +471,7 @@ class CfgVehicles { transportRepair = 0; }; - class Truck_02_engineeral_base_F: Truck_02_box_base_F { + class Truck_02_medical_base_F: Truck_02_box_base_F { GVAR(canRepair) = 0; }; diff --git a/addons/repair/data/ace_track.p3d b/addons/repair/data/ace_track.p3d index 12189878a6..53ac8971a7 100644 Binary files a/addons/repair/data/ace_track.p3d and b/addons/repair/data/ace_track.p3d differ diff --git a/addons/sandbag/functions/fnc_canDeploy.sqf b/addons/sandbag/functions/fnc_canDeploy.sqf index b9bd025dff..426dde56f2 100644 --- a/addons/sandbag/functions/fnc_canDeploy.sqf +++ b/addons/sandbag/functions/fnc_canDeploy.sqf @@ -1,9 +1,9 @@ /* * Author: Ruthberg, commy2 - * Checks if the player can deploy a sandbag + * Checks if the player can deploy a sandbag. * * Arguments: - * None + * 0: Unit * * Return Value: * Can deploy @@ -15,15 +15,8 @@ */ #include "script_component.hpp" -#define SURFACE_BLACKLIST ["water", "concrete", "tarmac", "wood", "metal", "roof_tin", "roof_tiles", "wood_int", "concrete_int", "tiles_int", "metal_int", "stony", "rock", "int_concrete", "int_tiles", "int_wood", "tiling", "wavymetal", "int_metal"] - params ["_unit"]; if !("ACE_Sandbag_empty" in items _unit) exitWith {false}; -private ["_surfaceClass", "_surfaceType"]; - -_surfaceClass = (surfaceType getPosASL _unit) select [1]; -_surfaceType = getText (configFile >> "CfgSurfaces" >> _surfaceClass >> "soundEnviron"); - -!(_surfaceType in SURFACE_BLACKLIST) +_unit call EFUNC(common,canDig) diff --git a/addons/sandbag/functions/fnc_deployConfirm.sqf b/addons/sandbag/functions/fnc_deployConfirm.sqf index 47b74533a1..68328cca67 100644 --- a/addons/sandbag/functions/fnc_deployConfirm.sqf +++ b/addons/sandbag/functions/fnc_deployConfirm.sqf @@ -29,14 +29,12 @@ _unit removeItem "ACE_Sandbag_empty"; params ["_unit"]; - private ["_position", "_direction", "_sandBag"]; - - _position = getPosASL GVAR(sandBag); - _direction = getDir GVAR(sandBag); + private _position = getPosASL GVAR(sandBag); + private _direction = getDir GVAR(sandBag); deleteVehicle GVAR(sandBag); - _sandBag = createVehicle ["ACE_SandbagObject", [0, 0, 0], [], 0, "NONE"]; + private _sandBag = createVehicle ["ACE_SandbagObject", [0, 0, 0], [], 0, "NONE"]; _sandBag setPosASL _position; _sandBag setDir _direction; diff --git a/addons/scopes/functions/fnc_inventoryCheck.sqf b/addons/scopes/functions/fnc_inventoryCheck.sqf index 2af9c56ec0..817d301221 100644 --- a/addons/scopes/functions/fnc_inventoryCheck.sqf +++ b/addons/scopes/functions/fnc_inventoryCheck.sqf @@ -74,6 +74,7 @@ private _newGuns = [primaryWeapon _player, secondaryWeapon _player, handgunWeapo if ((_newOptics select _x) == "") then { // Check if the weapon comes with an integrated optic + private _weaponConfig = configFile >> "CfgWeapons" >> (_newGuns select _x); private _verticalIncrement = 0; if (isNumber (_weaponConfig >> "ACE_ScopeAdjust_VerticalIncrement")) then { _verticalIncrement = getNumber (_weaponConfig >> "ACE_ScopeAdjust_VerticalIncrement"); @@ -90,6 +91,7 @@ private _newGuns = [primaryWeapon _player, secondaryWeapon _player, handgunWeapo if (isArray (_weaponConfig >> "ACE_ScopeAdjust_Horizontal")) then { _maxHorizontal = getArray (_weaponConfig >> "ACE_ScopeAdjust_Horizontal"); }; + TRACE_5("",_newGuns select _x,_verticalIncrement,_horizontalIncrement,_maxVertical,_maxHorizontal); (GVAR(scopeAdjust) select _x) set [0, _maxVertical]; (GVAR(scopeAdjust) select _x) set [1, _verticalIncrement]; (GVAR(scopeAdjust) select _x) set [2, _maxHorizontal]; diff --git a/addons/scopes/stringtable.xml b/addons/scopes/stringtable.xml index 484a2bf0c4..4a4a9094dc 100644 --- a/addons/scopes/stringtable.xml +++ b/addons/scopes/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -23,13 +23,13 @@ Force adjustment turrets ACE スコープ調節を有効化 조절 나사 강제 - Wymus uzycie poręteł regulacyjnych + Wymuś użycie pokręteł regulacyjnych Force usage of adjustmet turrets on high powered scopes 高倍率スコープで調整の使用を強制させます 고성능 조준경의 조절 나사 사용을 강제합니다 - Wymuś użycie pokręteł regulacyjnych dla celowników o duzym powiększeniu + Wymuś użycie pokręteł regulacyjnych dla celowników o dużym powiększeniu Correct zeroing @@ -53,67 +53,67 @@ Uses the 'defaultZeroRange' setting to overwrite the zero range of high power scopes 'defaultZeroRange'設定を使う高倍率スコープのゼロイン距離を上書きします 기존 고성능 조준경의 영점거리에 '기본설정 영점거리' 를 덮어씌웁니다 - Używa/nadpisuje 'standardowej odległości zerowania' zamiast ustawionej odległości zerowania dla celowników o duzym przybliżeniu + Używa 'defaultZeroRange' zamiast ustawionej odległości zerowania dla celowników o duzym przybliżeniu Default zero distance 標準のゼロイン距離 기본설정 영점거리 - Domyślny dystans zerowy + Domyślne zerowanie High power scopes will be zeroed at this distance 高倍率スコープのゼロイン距離はこの設定になります 고성능 조준경이 정해진 수만큼 영점거리를 맞추게 됩니다. - Celowniki o duzym powiększeniu będą zerowane dla tej odległości + Celowniki o dużym powiększeniu będą zerowane dla tej odległości Reference temperature 温度の参照 온도 기준 - Wzorcowa temperatura + Referencyjna temperatura Temperature at which the scope was zeroed スコープがゼロインされる温度 조준경 영점조준시 온도 - Temperatura przy której celownik został wyzerowany + Temperatura, przy której celownik został wyzerowany Reference barometric pressure 気圧の参照 기압 기준 - Standardowe cisnienie barometryczne + Referencyjne ciśnienie barometryczne Barometric pressure at which the scope was zeroed 気圧の参照 조준경 영점조준시 기압 - Ciśnienie barometryczne przy którym celownik został wyzerowany + Ciśnienie barometryczne, przy którym celownik został wyzerowany Reference humidity 湿度の参照 습도 기준 - Standardowa wilgotność + Referencyjna wilgotność Humidity at which the scope was zeroed スコープがゼロインされる湿度 조준경 영점조준시 습도 - Wilgotność przy której celownik został wyzerowany + Wilgotność powietrza, przy której celownik został wyzerowany Deduce pressure from altitude 高度により圧が減少 고도에 맞춰 기압 설정 - Cisnienie okreslone na podstawie wysokości + Ciśnienie określone na podstawie wysokości Deduce the barometric pressure from the terrain altitude 標高により気圧が減少されます 주변 고도에 맞춰 기압을 설정합니다 - Określ ciśnienie barometryczne na podstawie wysokości + Określ ciśnienie barometryczne na podstawie wysokości terenu Minor adjustment up @@ -248,4 +248,4 @@ Ten moduł włącza pokrętła kalibracyjne poprawki na wiatr oraz poprawki wysokości dla celowników o dużym powiększeniu. - + \ No newline at end of file diff --git a/addons/slideshow/CfgVehicles.hpp b/addons/slideshow/CfgVehicles.hpp index af3108eb59..6c11ba866c 100644 --- a/addons/slideshow/CfgVehicles.hpp +++ b/addons/slideshow/CfgVehicles.hpp @@ -35,6 +35,12 @@ class CfgVehicles { typeName = "STRING"; defaultValue = ""; }; + class SetName { + displayName = CSTRING(SetName_DisplayName); + description = CSTRING(SetName_Description); + typeName = "STRING"; + defaultValue = ""; + }; class Duration { displayName = CSTRING(Duration_DisplayName); description = CSTRING(Duration_Description); diff --git a/addons/slideshow/functions/fnc_createSlideshow.sqf b/addons/slideshow/functions/fnc_createSlideshow.sqf index 883ce2fa7d..5eefbd39bc 100644 --- a/addons/slideshow/functions/fnc_createSlideshow.sqf +++ b/addons/slideshow/functions/fnc_createSlideshow.sqf @@ -8,24 +8,25 @@ * 2: Image Paths * 3: Action Names * 4: Slide Duration (0 disables automatic transitions) + * 5: Set Name (default: localized "Slides") * * Return Value: * None * * Example: - * [[object1, object2, object3], [controller1], ["images\image1.paa", "images\image2.paa"], ["Action1", "Action2"], 5] call ace_slideshow_fnc_createSlideshow + * [[object1, object2, object3], [controller1], ["images\image1.paa", "images\image2.paa"], ["Action1", "Action2"], 5, "My Slides"] call ace_slideshow_fnc_createSlideshow * * Public: Yes */ #include "script_component.hpp" -private ["_currentSlideshow", "_slidesAction", "_varString"]; params [ ["_objects", [], [[]] ], ["_controllers", [], [[]] ], ["_images", [], [[]] ], ["_names", [], [[]] ], - ["_duration", 0, [0]] + ["_duration", 0, [0]], + ["_setName", localize LSTRING(Interaction), [""]] ]; // Verify data @@ -41,7 +42,7 @@ if (_controllers isEqualTo []) then { _controllers = _objects; }; -TRACE_4("Information",_objects,_controllers,_images,_names); +TRACE_5("Information",_objects,_controllers,_images,_names,_setName); if (isServer) then { // Default images on whiteboards (first image) @@ -53,7 +54,7 @@ if (isServer) then { GVAR(slideshows) = GVAR(slideshows) + 1; }; -_currentSlideshow = GVAR(slideshows); // Local variable in case GVAR gets changed during execution of below code +private _currentSlideshow = GVAR(slideshows); // Local variable in case GVAR gets changed during execution of below code // If interaction menu module is not present, set default duration value if !(["ace_interact_menu"] call EFUNC(common,isModLoaded)) then { @@ -64,8 +65,22 @@ if !(["ace_interact_menu"] call EFUNC(common,isModLoaded)) then { // Add interactions if automatic transitions are disabled, else setup automatic transitions if (_duration == 0) then { { + if (_setName == "") then { + _setName = localize LSTRING(Interaction); + }; + // Add Slides sub-action and populate with images - _slidesAction = [QGVAR(Slides), localize LSTRING(Interaction), "", {}, {true}, {(_this select 2) call FUNC(addSlideActions)}, [_objects, _images, _names, _x, _currentSlideshow], [0, 0, 0], 2] call EFUNC(interact_menu,createAction); + private _slidesAction = [ + format [QGVAR(slideshow%1), _currentSlideshow], + _setName, + "", + {}, + {true}, + {(_this select 2) call FUNC(addSlideActions)}, + [_objects, _images, _names, _x, _currentSlideshow], + [0, 0, 0], + 2 + ] call EFUNC(interact_menu,createAction); [_x, 0, ["ACE_MainActions"], _slidesAction] call EFUNC(interact_menu,addActionToObject); nil } count _controllers; @@ -73,7 +88,7 @@ if (_duration == 0) then { if !(isServer) exitWith {}; // Formatted GVAR string (multiple modules support) - _varString = format [QGVAR(slideshow%1), _currentSlideshow]; + private _varString = format [QGVAR(slideshow%1), _currentSlideshow]; TRACE_1("Current Slide",_varString); // Set formatted GVAR to first slide diff --git a/addons/slideshow/functions/fnc_moduleInit.sqf b/addons/slideshow/functions/fnc_moduleInit.sqf index bf27bae56b..c54aec7d2f 100644 --- a/addons/slideshow/functions/fnc_moduleInit.sqf +++ b/addons/slideshow/functions/fnc_moduleInit.sqf @@ -17,18 +17,18 @@ // Exit on Headless Client if (!hasInterface && !isDedicated) exitWith {}; -private ["_objects", "_controllers", "_images", "_names", "_duration"]; params [["_logic", objNull, [objNull]], "_units", "_activated"]; if !(_activated) exitWith {}; if (isNull _logic) exitWith {}; // Extract variables from logic -_objects = [_logic getVariable ["Objects", ""], true, true] call EFUNC(common,parseList); -_controllers = [_logic getVariable ["Controllers", ""], true, true] call EFUNC(common,parseList); -_images = [_logic getVariable ["Images", ""], false, false] call EFUNC(common,parseList); -_names = [_logic getVariable ["Names", ""], false, false] call EFUNC(common,parseList); -_duration = _logic getVariable ["Duration", 0]; +private _objects = [_logic getVariable ["Objects", ""], true, true] call EFUNC(common,parseList); +private _controllers = [_logic getVariable ["Controllers", ""], true, true] call EFUNC(common,parseList); +private _images = [_logic getVariable ["Images", ""], false, false] call EFUNC(common,parseList); +private _names = [_logic getVariable ["Names", ""], false, false] call EFUNC(common,parseList); +private _setName = _logic getVariable ["SetName", ""]; +private _duration = _logic getVariable ["Duration", 0]; // Objects synced to the module { @@ -37,6 +37,6 @@ _duration = _logic getVariable ["Duration", 0]; } count (synchronizedObjects _logic); // Prepare with actions -[_objects, _controllers, _images, _names, _duration] call FUNC(createSlideshow); +[_objects, _controllers, _images, _names, _duration, _setName] call FUNC(createSlideshow); INFO_1("Slideshow Module Initialized on %1 Objects", count _objects); diff --git a/addons/slideshow/stringtable.xml b/addons/slideshow/stringtable.xml index 47ed8f5a3d..018dc75ce7 100644 --- a/addons/slideshow/stringtable.xml +++ b/addons/slideshow/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -44,18 +44,18 @@ 물체 - Object names (can also be synchronized objects) slide-show will be displayed on, separated by commas if multiple. Reference INFO for object support. - Objektnamen (können auch synchronisierte Objekte sein) auf denen die Diavorführung abgepielt wird. Werden ggf. durch Kommata getrennt. Weiteres in der INFO für unterstützte Objekte. + Object names (can also be synchronized objects) slide-show will be displayed on, separated by commas if multiple. + Objektnamen (können auch synchronisierte Objekte sein) auf denen die Diavorführung abgepielt wird. Werden ggf. durch Kommata getrennt. Nom d'objets (peuvent aussi être des objets synchronisés) sur lesquels les diaporamas vont être affichées, séparation par virgule si plusieurs. - Nazwy obiektów (mogą to też być zsynchronizowane obiekty) na których pokaz slajdów zostanie pokazany, oddzielony przecinkiem jeżeli jest ich więcej niż 1. Sprawdź opis modułu aby dowiedzieć się jakie obiekty są wspierane przez moduł. - Objektum nevek (szinkronizált is lehet) amik a vetítésen megjelennek, több darab esetén vesszővel elválasztva. Objektumtámogatásért az INFO-t tekintsd meg. - Nomes dos objetos (também podem ser objetos sincronizados) em que a apresentação de slides será mostrada, separado por vírgulas se for mais de um. Referência INFO para suporte do objeto. - Имена объектов (так же могут использоваться синхронизированные объекты), на которых будет отображаться слайд-шоу, разделенные запятыми. Посмотрите описание, чтобы понять, какие объекты поддерживаются. - Los nombres de objetos (también pueden ser objetos sincronizados) de diapositivas se mostrarán en, separados por comas. Referencia INFO para el soporte del objeto. - Jména objektů (lze také použít synchronizované objekty) které se budou zobrazovat v prezentaci, oddělit čárkou pokud jich je více. Zkontrolujte POPIS abyste zjistili, zda je objekt podporován modulem. - Nomi di oggetti (possono anche essere oggetti sincronizzati) che verranno usati per la presentazione di diapositive, separato da virgole se più di uno. Fai riferimento ad INFO per gli oggetti supportati. + Nazwy obiektów (mogą to też być zsynchronizowane obiekty) na których pokaz slajdów zostanie pokazany, oddzielony przecinkiem jeżeli jest ich więcej niż 1. + Objektum nevek (szinkronizált is lehet) amik a vetítésen megjelennek, több darab esetén vesszővel elválasztva. + Nomes dos objetos (também podem ser objetos sincronizados) em que a apresentação de slides será mostrada, separado por vírgulas se for mais de um. + Имена объектов (так же могут использоваться синхронизированные объекты), на которых будет отображаться слайд-шоу, разделенные запятыми. + Los nombres de objetos (también pueden ser objetos sincronizados) de diapositivas se mostrarán en, separados por comas. + Jména objektů (lze také použít synchronizované objekty) které se budou zobrazovat v prezentaci, oddělit čárkou pokud jich je více. + Nomi di oggetti (possono anche essere oggetti sincronizzati) che verranno usati per la presentazione di diapositive, separato da virgole se più di uno. スライドショーを表示するオブジェクト名 (オブジェクトとの同期も可)。複数ある場合はコンマで区切れます - 슬라이드 쇼가 보여질 물체(동기화 되는 물체도 가능합니다) 명칭, 다수의 경우 쉼표로 구분합니다. 자세한 물체목록은 INFO에서 확인하십시요. + 슬라이드 쇼가 보여질 물체(동기화 되는 물체도 가능합니다) 명칭, 다수의 경우 쉼표로 구분합니다. Controllers @@ -139,6 +139,14 @@ 画像を操作できるインタラクション エントリ名の一覧を入力してください。コンマで区切り複数を指定できます。 상호작용 메세지에 쓰일 명칭입니다, 쉼표로 구분합니다, 이미지의 순서입니다. + + Set Name + Ustaw nazwę + + + Name that will be used for main interaction entry (to distinguish multiple slideshows). Default: "Slides" + Nazwa, która będzie użyta w głównym menu interakcji (w celu rozróżnienia różnych slajdów). Domyślnie: "Slides" + Slide Duration Durée d'une diapositive @@ -182,4 +190,4 @@ 슬라이드 - + \ No newline at end of file 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/tacticalladder/functions/fnc_cancelTLdeploy.sqf b/addons/tacticalladder/functions/fnc_cancelTLdeploy.sqf index b009028c93..f66dd79a25 100644 --- a/addons/tacticalladder/functions/fnc_cancelTLdeploy.sqf +++ b/addons/tacticalladder/functions/fnc_cancelTLdeploy.sqf @@ -31,6 +31,7 @@ GVAR(ladder) animate ["rotate", 0]; { GVAR(ladder) animate [_x, 0]; + true } count __ANIMS; // remove mouse buttons and hint diff --git a/addons/tagging/XEH_postInit.sqf b/addons/tagging/XEH_postInit.sqf index ddac9b9ab9..6693bda2f6 100644 --- a/addons/tagging/XEH_postInit.sqf +++ b/addons/tagging/XEH_postInit.sqf @@ -3,8 +3,7 @@ // Cache for static objects -GVAR(cacheStaticModels) = createLocation ["ACE_HashLocation", [-10000,-10000,-10000], 0, 0]; -GVAR(cacheStaticModels) setText QGVAR(cacheStaticModels); +GVAR(cacheStaticModels) = [false] call CBA_fnc_createNamespace; // Consider static everything vehicle that inherit from Static // This include houses (which we don't need), but also walls, that we do 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/trenches/functions/fnc_canDigTrench.sqf b/addons/trenches/functions/fnc_canDigTrench.sqf index 0cbed2d9b7..a99c5c6b60 100644 --- a/addons/trenches/functions/fnc_canDigTrench.sqf +++ b/addons/trenches/functions/fnc_canDigTrench.sqf @@ -1,6 +1,6 @@ /* * Author: Ruthberg, commy2, esteldunedain - * Checks if a unit can dig a trench + * Checks if a unit can dig a trench. * * Arguments: * 0: Unit @@ -15,17 +15,8 @@ */ #include "script_component.hpp" -#define SURFACE_BLACKLIST ["water", "concrete", "tarmac", "wood", "metal", "roof_tin", "roof_tiles", "wood_int", "concrete_int", "tiles_int", "metal_int", "stony", "rock", "int_concrete", "int_tiles", "int_wood", "tiling", "wavymetal", "int_metal"] - params ["_unit"]; if !("ACE_EntrenchingTool" in items _unit) exitWith {false}; -// Can't dig trench if above ground level -if ((getPosATL _unit) select 2 > 0.05) exitWith {false}; - -private _surfaceClass = (surfaceType getPosASL _unit) select [1]; -private _surfaceType = getText (configFile >> "CfgSurfaces" >> _surfaceClass >> "soundEnviron"); -TRACE_1("",_surfaceType); - -!(_surfaceType in SURFACE_BLACKLIST) +_unit call EFUNC(common,canDig) 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/vehiclelock/functions/fnc_lockpick.sqf b/addons/vehiclelock/functions/fnc_lockpick.sqf index 3ac7385a04..2ce856dd37 100644 --- a/addons/vehiclelock/functions/fnc_lockpick.sqf +++ b/addons/vehiclelock/functions/fnc_lockpick.sqf @@ -51,9 +51,11 @@ if (!([[_unit, _veh]] call _condition)) exitWith {false}; _returnValue = _funcType in ["canLockpick", "startLockpick", "finishLockpick"]; switch (_funcType) do { - case "canLockpick": {}; + case "canLockpick": { + _returnValue = !([_unit, _veh] call FUNC(hasKeyForVehicle)) && {(locked _veh) in [2, 3]}; + }; case "startLockpick": { - [_vehLockpickStrenth, [_unit, _veh, "finishLockpick"], {(_this select 0) call FUNC(lockpick)}, {}, (localize LSTRING(Action_LockpickInUse)), _condition] call EFUNC(common,progressBar); + [_vehLockpickStrenth, [_unit, _veh, "finishLockpick"], {(_this select 0) call FUNC(lockpick)}, {}, (localize LSTRING(Action_LockpickInUse)), _condition, ["isNotInside"]] call EFUNC(common,progressBar); }; case "finishLockpick": { [QGVAR(setVehicleLock), [_veh, false], [_veh]] call CBA_fnc_targetEvent; diff --git a/addons/zeus/XEH_PREP.hpp b/addons/zeus/XEH_PREP.hpp index a04b0a6d2c..f52c300355 100644 --- a/addons/zeus/XEH_PREP.hpp +++ b/addons/zeus/XEH_PREP.hpp @@ -20,6 +20,7 @@ PREP(moduleSurrender); PREP(moduleTeleportPlayers); PREP(moduleUnconscious); PREP(moduleZeusSettings); +PREP(showMessage); PREP(ui_attributeCargo); //PREP(ui_attributePosition); PREP(ui_attributeRadius); diff --git a/addons/zeus/functions/fnc_moduleAddOrRemoveFRIES.sqf b/addons/zeus/functions/fnc_moduleAddOrRemoveFRIES.sqf index 5c8998b767..d75c0173fe 100644 --- a/addons/zeus/functions/fnc_moduleAddOrRemoveFRIES.sqf +++ b/addons/zeus/functions/fnc_moduleAddOrRemoveFRIES.sqf @@ -19,27 +19,27 @@ params ["_logic", "_units", "_activated"]; if !(_activated && {local _logic}) exitWith {}; if !(["ace_fastroping"] call EFUNC(common,isModLoaded)) then { - [LSTRING(RequiresAddon)] call EFUNC(common,displayTextStructured); + [LSTRING(RequiresAddon)] call FUNC(showMessage); } else { (GETMVAR(BIS_fnc_curatorObjectPlaced_mouseOver,[""])) params ["_mouseOverType", "_mouseOverUnit"]; if (_mouseOverType != "OBJECT") then { - [LSTRING(NothingSelected)] call EFUNC(common,displayTextStructured); + [LSTRING(NothingSelected)] call FUNC(showMessage); } else { if !(alive _mouseOverUnit) then { - [LSTRING(OnlyAlive)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyAlive)] call FUNC(showMessage); } else { private _config = configFile >> "CfgVehicles" >> typeOf _mouseOverUnit; private _displayName = getText (_config >> "displayName"); if !(isNumber (_config >> QEGVAR(fastroping,enabled))) then { - [[LSTRING(NotFastRopeCompatible), _displayName]] call EFUNC(common,displayTextStructured); + [LSTRING(NotFastRopeCompatible), _displayName] call FUNC(showMessage); } else { private _fries = GETVAR(_mouseOverUnit,EGVAR(fastroping,FRIES),objNull); if (isNull _fries) then { [QGVAR(equipFries), [_mouseOverUnit]] call CBA_fnc_serverEvent; } else { if ([_mouseOverUnit] call EFUNC(fastroping,canCutRopes)) then { - [[LSTRING(CantRemoveFRIES), _displayName]] call EFUNC(common,displayTextStructured); + [LSTRING(CantRemoveFRIES), _displayName] call FUNC(showMessage); } else { [_mouseOverUnit] call EFUNC(fastroping,cutRopes); deleteVehicle _fries; diff --git a/addons/zeus/functions/fnc_moduleAddSpareTrack.sqf b/addons/zeus/functions/fnc_moduleAddSpareTrack.sqf index 2926fafcf9..3a291ac5b3 100644 --- a/addons/zeus/functions/fnc_moduleAddSpareTrack.sqf +++ b/addons/zeus/functions/fnc_moduleAddSpareTrack.sqf @@ -19,18 +19,18 @@ params ["_logic", "_units", "_activated"]; if !(_activated && local _logic) exitWith {}; if !(["ace_cargo"] call EFUNC(common,isModLoaded) && ["ace_repair"] call EFUNC(common,isModLoaded)) then { - [LSTRING(RequiresAddon)] call EFUNC(common,displayTextStructured); + [LSTRING(RequiresAddon)] call FUNC(showMessage); } else { (GETMVAR(bis_fnc_curatorObjectPlaced_mouseOver,[""])) params ["_mouseOverType", "_mouseOverUnit"]; if (_mouseOverType != "OBJECT") then { - [LSTRING(NothingSelected)] call EFUNC(common,displayTextStructured); + [LSTRING(NothingSelected)] call FUNC(showMessage); } else { if !(alive _mouseOverUnit) then { - [LSTRING(OnlyAlive)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyAlive)] call FUNC(showMessage); } else { if (getNumber (configFile >> "CfgVehicles" >> "ACE_Track" >> QEGVAR(cargo,size)) > [_mouseOverUnit] call EFUNC(cargo,getCargoSpaceLeft)) then { - [LSTRING(OnlyEnoughCargoSpace)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyEnoughCargoSpace)] call FUNC(showMessage); } else { ["ace_addCargo", ["ACE_Track", _mouseOverUnit, 1, true]] call CBA_fnc_localEvent; }; diff --git a/addons/zeus/functions/fnc_moduleAddSpareWheel.sqf b/addons/zeus/functions/fnc_moduleAddSpareWheel.sqf index 2c051c94b6..50dc25d62c 100644 --- a/addons/zeus/functions/fnc_moduleAddSpareWheel.sqf +++ b/addons/zeus/functions/fnc_moduleAddSpareWheel.sqf @@ -19,18 +19,18 @@ params ["_logic", "_units", "_activated"]; if !(_activated && local _logic) exitWith {}; if !(["ace_cargo"] call EFUNC(common,isModLoaded) && ["ace_repair"] call EFUNC(common,isModLoaded)) then { - [LSTRING(RequiresAddon)] call EFUNC(common,displayTextStructured); + [LSTRING(RequiresAddon)] call FUNC(showMessage); } else { (GETMVAR(bis_fnc_curatorObjectPlaced_mouseOver,[""])) params ["_mouseOverType", "_mouseOverUnit"]; if (_mouseOverType != "OBJECT") then { - [LSTRING(NothingSelected)] call EFUNC(common,displayTextStructured); + [LSTRING(NothingSelected)] call FUNC(showMessage); } else { if !(alive _mouseOverUnit) then { - [LSTRING(OnlyAlive)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyAlive)] call FUNC(showMessage); } else { if (getNumber (configFile >> "CfgVehicles" >> "ACE_Wheel" >> QEGVAR(cargo,size)) > [_mouseOverUnit] call EFUNC(cargo,getCargoSpaceLeft)) then { - [LSTRING(OnlyEnoughCargoSpace)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyEnoughCargoSpace)] call FUNC(showMessage); } else { ["ace_addCargo", ["ACE_Wheel", _mouseOverUnit, 1, true]] call CBA_fnc_localEvent; }; diff --git a/addons/zeus/functions/fnc_moduleCaptive.sqf b/addons/zeus/functions/fnc_moduleCaptive.sqf index 732c165fa4..4db34231c0 100644 --- a/addons/zeus/functions/fnc_moduleCaptive.sqf +++ b/addons/zeus/functions/fnc_moduleCaptive.sqf @@ -21,20 +21,20 @@ private ["_mouseOver", "_unit", "_captive"]; if !(_activated && local _logic) exitWith {}; if (isNil QEFUNC(captives,setHandcuffed)) then { - [LSTRING(RequiresAddon)] call EFUNC(common,displayTextStructured); + [LSTRING(RequiresAddon)] call FUNC(showMessage); } else { _mouseOver = GETMVAR(bis_fnc_curatorObjectPlaced_mouseOver,[""]); if ((_mouseOver select 0) != "OBJECT") then { - [LSTRING(NothingSelected)] call EFUNC(common,displayTextStructured); + [LSTRING(NothingSelected)] call FUNC(showMessage); } else { _unit = effectivecommander (_mouseOver select 1); if !(_unit isKindOf "CAManBase") then { - [LSTRING(OnlyInfantry)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyInfantry)] call FUNC(showMessage); } else { if !(alive _unit) then { - [LSTRING(OnlyAlive)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyAlive)] call FUNC(showMessage); } else { _captive = GETVAR(_unit,EGVAR(captives,isHandcuffed),false); // Event initalized by ACE_Captives diff --git a/addons/zeus/functions/fnc_moduleSearchNearby.sqf b/addons/zeus/functions/fnc_moduleSearchNearby.sqf index 76f77c489e..47b423fadd 100644 --- a/addons/zeus/functions/fnc_moduleSearchNearby.sqf +++ b/addons/zeus/functions/fnc_moduleSearchNearby.sqf @@ -27,7 +27,7 @@ scopeName "Main"; private _fnc_errorAndClose = { params ["_msg"]; deleteVehicle _logic; - [_msg] call EFUNC(common,displayTextStructured); + [_msg] call FUNC(showMessage); breakOut "Main"; }; diff --git a/addons/zeus/functions/fnc_moduleSetMedic.sqf b/addons/zeus/functions/fnc_moduleSetMedic.sqf index 14dfca4f6f..55b1f2687b 100644 --- a/addons/zeus/functions/fnc_moduleSetMedic.sqf +++ b/addons/zeus/functions/fnc_moduleSetMedic.sqf @@ -21,23 +21,23 @@ private ["_mouseOver", "_unit", "_medicN"]; if !(_activated && local _logic) exitWith {}; if !(["ACE_Medical"] call EFUNC(common,isModLoaded)) then { - [LSTRING(RequiresAddon)] call EFUNC(common,displayTextStructured); + [LSTRING(RequiresAddon)] call FUNC(showMessage); } else { _mouseOver = GETMVAR(bis_fnc_curatorObjectPlaced_mouseOver,[""]); if ((_mouseOver select 0) != "OBJECT") then { - [LSTRING(NothingSelected)] call EFUNC(common,displayTextStructured); + [LSTRING(NothingSelected)] call FUNC(showMessage); } else { _unit = effectivecommander (_mouseOver select 1); if !(_unit isKindOf "CAManBase") then { - [LSTRING(OnlyInfantry)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyInfantry)] call FUNC(showMessage); } else { if !(alive _unit) then { - [LSTRING(OnlyAlive)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyAlive)] call FUNC(showMessage); } else { if (GETVAR(_unit,EGVAR(captives,isHandcuffed),false)) then { - [LSTRING(OnlyNonCaptive)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyNonCaptive)] call FUNC(showMessage); } else { _medicN = GETVAR(_unit,EGVAR(medical,medicClass),0); if (_medicN < 1) then { diff --git a/addons/zeus/functions/fnc_moduleSetMedicalFacility.sqf b/addons/zeus/functions/fnc_moduleSetMedicalFacility.sqf index 4c26ccdd71..e0a3131f44 100644 --- a/addons/zeus/functions/fnc_moduleSetMedicalFacility.sqf +++ b/addons/zeus/functions/fnc_moduleSetMedicalFacility.sqf @@ -21,23 +21,23 @@ private ["_mouseOver", "_unit"]; if !(_activated && local _logic) exitWith {}; if !(["ACE_Medical"] call EFUNC(common,isModLoaded)) then { - [LSTRING(RequiresAddon)] call EFUNC(common,displayTextStructured); + [LSTRING(RequiresAddon)] call FUNC(showMessage); } else { _mouseOver = GETMVAR(bis_fnc_curatorObjectPlaced_mouseOver,[""]); if ((_mouseOver select 0) != "OBJECT") then { - [LSTRING(NothingSelected)] call EFUNC(common,displayTextStructured); + [LSTRING(NothingSelected)] call FUNC(showMessage); } else { _unit = (_mouseOver select 1); if (_unit isKindOf "Man" || {!(_unit isKindOf "Building")}) then { - [LSTRING(OnlyStructures)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyStructures)] call FUNC(showMessage); } else { if !(alive _unit) then { - [LSTRING(OnlyAlive)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyAlive)] call FUNC(showMessage); } else { if (GETVAR(_unit,EGVAR(captives,isHandcuffed),false)) then { - [LSTRING(OnlyNonCaptive)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyNonCaptive)] call FUNC(showMessage); } else { if (!(GETVAR(_unit,EGVAR(medical,isMedicalFacility),false))) then { _unit setVariable [QEGVAR(medical,isMedicalFacility), true, true]; diff --git a/addons/zeus/functions/fnc_moduleSetMedicalVehicle.sqf b/addons/zeus/functions/fnc_moduleSetMedicalVehicle.sqf index abbc26b1ed..49070dbfb9 100644 --- a/addons/zeus/functions/fnc_moduleSetMedicalVehicle.sqf +++ b/addons/zeus/functions/fnc_moduleSetMedicalVehicle.sqf @@ -21,23 +21,23 @@ private ["_mouseOver", "_unit", "_medicN"]; if !(_activated && local _logic) exitWith {}; if !(["ACE_Medical"] call EFUNC(common,isModLoaded)) then { - [LSTRING(RequiresAddon)] call EFUNC(common,displayTextStructured); + [LSTRING(RequiresAddon)] call FUNC(showMessage); } else { _mouseOver = GETMVAR(bis_fnc_curatorObjectPlaced_mouseOver,[""]); if ((_mouseOver select 0) != "OBJECT") then { - [LSTRING(NothingSelected)] call EFUNC(common,displayTextStructured); + [LSTRING(NothingSelected)] call FUNC(showMessage); } else { _unit = (_mouseOver select 1); if (_unit isKindOf "Man" || {_unit isKindOf "Building"}) then { - [LSTRING(OnlyVehicles)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyVehicles)] call FUNC(showMessage); } else { if !(alive _unit) then { - [LSTRING(OnlyAlive)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyAlive)] call FUNC(showMessage); } else { if (GETVAR(_unit,EGVAR(captives,isHandcuffed),false)) then { - [LSTRING(OnlyNonCaptive)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyNonCaptive)] call FUNC(showMessage); } else { _medicN = GETVAR(_unit,EGVAR(medical,medicClass),0); if (_medicN < 1) then { diff --git a/addons/zeus/functions/fnc_moduleSimulation.sqf b/addons/zeus/functions/fnc_moduleSimulation.sqf index fab59e48eb..fe7f3564e0 100644 --- a/addons/zeus/functions/fnc_moduleSimulation.sqf +++ b/addons/zeus/functions/fnc_moduleSimulation.sqf @@ -19,7 +19,7 @@ if !(local _logic) exitWith {}; private _object = attachedTo _logic; if (isNull _object) then { - [LSTRING(NothingSelected)] call EFUNC(common,displayTextStructured); + [LSTRING(NothingSelected)] call FUNC(showMessage); } else { [QEGVAR(common,enableSimulationGlobal), [_object, !(simulationEnabled _object)]] call CBA_fnc_serverEvent; }; diff --git a/addons/zeus/functions/fnc_moduleSurrender.sqf b/addons/zeus/functions/fnc_moduleSurrender.sqf index d6d030a4c5..5e4890ae75 100644 --- a/addons/zeus/functions/fnc_moduleSurrender.sqf +++ b/addons/zeus/functions/fnc_moduleSurrender.sqf @@ -21,23 +21,23 @@ private ["_mouseOver", "_unit", "_surrendering"]; if !(_activated && local _logic) exitWith {}; if (isNil QEFUNC(captives,setSurrendered)) then { - [LSTRING(RequiresAddon)] call EFUNC(common,displayTextStructured); + [LSTRING(RequiresAddon)] call FUNC(showMessage); } else { _mouseOver = GETMVAR(bis_fnc_curatorObjectPlaced_mouseOver,[""]); if ((_mouseOver select 0) != "OBJECT") then { - [LSTRING(NothingSelected)] call EFUNC(common,displayTextStructured); + [LSTRING(NothingSelected)] call FUNC(showMessage); } else { _unit = effectivecommander (_mouseOver select 1); if !(_unit isKindOf "CAManBase") then { - [LSTRING(OnlyInfantry)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyInfantry)] call FUNC(showMessage); } else { if !(alive _unit) then { - [LSTRING(OnlyAlive)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyAlive)] call FUNC(showMessage); } else { if (GETVAR(_unit,EGVAR(captives,isHandcuffed),false)) then { - [LSTRING(OnlyNonCaptive)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyNonCaptive)] call FUNC(showMessage); } else { _surrendering = GETVAR(_unit,EGVAR(captives,isSurrendering),false); // Event initalized by ACE_Captives diff --git a/addons/zeus/functions/fnc_moduleUnconscious.sqf b/addons/zeus/functions/fnc_moduleUnconscious.sqf index 502847feda..0cf0fffda6 100644 --- a/addons/zeus/functions/fnc_moduleUnconscious.sqf +++ b/addons/zeus/functions/fnc_moduleUnconscious.sqf @@ -21,20 +21,20 @@ private ["_mouseOver", "_unit", "_conscious"]; if !(_activated && local _logic) exitWith {}; if (isNil QEFUNC(medical,setUnconscious)) then { - [LSTRING(RequiresAddon)] call EFUNC(common,displayTextStructured); + [LSTRING(RequiresAddon)] call FUNC(showMessage); } else { _mouseOver = GETMVAR(bis_fnc_curatorObjectPlaced_mouseOver,[""]); if ((_mouseOver select 0) != "OBJECT") then { - [LSTRING(NothingSelected)] call EFUNC(common,displayTextStructured); + [LSTRING(NothingSelected)] call FUNC(showMessage); } else { _unit = effectivecommander (_mouseOver select 1); if !(_unit isKindOf "CAManBase") then { - [LSTRING(OnlyInfantry)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyInfantry)] call FUNC(showMessage); } else { if !(alive _unit) then { - [LSTRING(OnlyAlive)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyAlive)] call FUNC(showMessage); } else { _conscious = GETVAR(_unit,ACE_isUnconscious,false); // Function handles locality for me diff --git a/addons/zeus/functions/fnc_showMessage.sqf b/addons/zeus/functions/fnc_showMessage.sqf new file mode 100644 index 0000000000..9ce8ced9c3 --- /dev/null +++ b/addons/zeus/functions/fnc_showMessage.sqf @@ -0,0 +1,24 @@ +/* + * Author: 654wak654 + * Shows a zeus message through the BIS function, handles localization. + * If multiple args are given, they get formatted. + * + * Arguments: + * 0: The message + * N: Anything + * + * Return Value: + * Nothing + * + * Example: + * ["something"] call ace_zeus_fnc_showMessage + * ["something %1 in %2", "strange", getPos neighborhood] call ace_zeus_fnc_showMessage + * + * Public: Yes + */ +#include "script_component.hpp" + +if (!(_this isEqualTypeParams [""])) exitWith {ERROR_1("First arg must be string [%1]",_this);}; + +private _message = _this apply {if ((_x isEqualType "") && {isLocalized _x}) then {localize _x} else {_x}}; +[objNull, format _message] call BIS_fnc_showCuratorFeedbackMessage; diff --git a/addons/zeus/functions/fnc_ui_defendArea.sqf b/addons/zeus/functions/fnc_ui_defendArea.sqf index 492f74cf48..5d4f652950 100644 --- a/addons/zeus/functions/fnc_ui_defendArea.sqf +++ b/addons/zeus/functions/fnc_ui_defendArea.sqf @@ -28,7 +28,7 @@ private _fnc_errorAndClose = { params ["_msg"]; _display closeDisplay 0; deleteVehicle _logic; - [_msg] call EFUNC(common,displayTextStructured); + [_msg] call FUNC(showMessage); breakOut "Main"; }; diff --git a/addons/zeus/functions/fnc_ui_groupSide.sqf b/addons/zeus/functions/fnc_ui_groupSide.sqf index 46418a71fc..e983d49ea1 100644 --- a/addons/zeus/functions/fnc_ui_groupSide.sqf +++ b/addons/zeus/functions/fnc_ui_groupSide.sqf @@ -33,7 +33,7 @@ private _fnc_errorAndClose = { params ["_msg"]; _display closeDisplay 0; deleteVehicle _logic; - [_msg] call EFUNC(common,displayTextStructured); + [_msg] call FUNC(showMessage); breakOut "Main"; }; diff --git a/addons/zeus/functions/fnc_ui_patrolArea.sqf b/addons/zeus/functions/fnc_ui_patrolArea.sqf index 9db2df9773..c94e2b3dd2 100644 --- a/addons/zeus/functions/fnc_ui_patrolArea.sqf +++ b/addons/zeus/functions/fnc_ui_patrolArea.sqf @@ -28,7 +28,7 @@ private _fnc_errorAndClose = { params ["_msg"]; _display closeDisplay 0; deleteVehicle _logic; - [_msg] call EFUNC(common,displayTextStructured); + [_msg] call FUNC(showMessage); breakOut "Main"; }; diff --git a/addons/zeus/functions/fnc_ui_searchArea.sqf b/addons/zeus/functions/fnc_ui_searchArea.sqf index d30af4e234..30e012e29b 100644 --- a/addons/zeus/functions/fnc_ui_searchArea.sqf +++ b/addons/zeus/functions/fnc_ui_searchArea.sqf @@ -28,7 +28,7 @@ private _fnc_errorAndClose = { params ["_msg"]; _display closeDisplay 0; deleteVehicle _logic; - [_msg] call EFUNC(common,displayTextStructured); + [_msg] call FUNC(showMessage); breakOut "Main"; }; diff --git a/addons/zeus/stringtable.xml b/addons/zeus/stringtable.xml index 0194fbcf05..c55371a41c 100644 --- a/addons/zeus/stringtable.xml +++ b/addons/zeus/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -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. @@ -31,7 +31,7 @@ Ascension Messages - Wiad. o nowym Zeusie + Wiadomość o nowym Zeusie Mensajes de ascensión Zpráva o novém Zeusovi Aufstiegsnachrichten @@ -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. @@ -115,7 +115,7 @@ Ordnance Warning - Ostrz. o ostrzale arty. + Ostrzeżenie o ostrzale artyleryjskim Advertencia de artefactos explosivos Varování před dělostřelectvem Artilleriewarnung @@ -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. @@ -217,7 +217,7 @@ Защитить зону Bránit oblast 防衛範囲 - Osłaniaj obszar + Broń obszaru Verteidige Gebiet 지역 방어 @@ -231,11 +231,13 @@ All Curators 全キュレーター 모든 큐레이터 + Wszyscy kuratorzy Apply changes to all curators 全キュレーターへ変更を適用 모든 큐레이터에 변화를 적용합니다 + Zatwierdź zmiany dla wszystkich kuratorów Remove Objects @@ -247,7 +249,7 @@ Remove existing instead of adding new 新しく追加するために削除します 물체를 삭제합니다 - Usuń istniejące zamiast dodać nowe + Usuń istniejące zamiast dodawać nowe Global AI Skill @@ -291,7 +293,7 @@ Changes: aimingAccuracy - Change: aimingAccuracy + Change : aimingAccuracy Изменяет: aimingAccuracy Upravuje: aimingAccuracy 変更:aimingAccuracy @@ -311,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 @@ -321,7 +323,7 @@ Spotting - repérage + Repérage Обнаружение Vnímavost 索敵 @@ -331,7 +333,7 @@ Changes: spotDistance, spotTime - Change: spotDistance, spotTime + Change : spotDistance, spotTime Изменяет: spotDistance, spotTime Upravuje: spotDistance, spotTime 変更:spotDistance, spotTime @@ -341,7 +343,7 @@ Seek Cover - Chercher couverture + Chercher des couvertures Поиск укрытий Vyhledávat krytí 遮蔽 @@ -351,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 は遮蔽を取るようになります @@ -417,16 +419,19 @@ Add/Remove FRIES FRUES の追加と削除 패스트로프 추가/제거 + Dodaj/usuń FRIES %1 is not fastrope compatible. %1 はファストロープに対応していません。 %1은 패스트로프하기에 적합하지 않습니다. + %1 nie jest kompatybilny ze zjazdem linowym. Unable to remove FRIES, ropes are deployed. すでにロープが展開されているため、FRIES を削除できません。 패스트로프 제거 불가능, 줄이 이미 배치되었습니다. + Nie można usunąć FRIES, liny są wypuszczone. Teleport Players @@ -553,7 +558,7 @@ Toggle Simulation - Włacz symulację + Przełącz symulację シミュレーションをトグル 재현 토글 @@ -753,7 +758,7 @@ Cargo: - Cargo: + Cargo : Груз: Náklad: カーゴ: @@ -800,7 +805,7 @@ Invalid radius entered - rayon invalide entré + Rayon invalide entré Введен неправильный радиус Vložen neplatný parametr 無効な半径が入力されました @@ -809,4 +814,4 @@ 알 수 없는 반경 입력됨 - + \ No newline at end of file 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/_includes/dependencies_list.md b/docs/_includes/dependencies_list.md index 556b9b65b4..ad884d8cee 100644 --- a/docs/_includes/dependencies_list.md +++ b/docs/_includes/dependencies_list.md @@ -450,6 +450,10 @@ `ace_rearm`, `ace_refuel`, `ace_repair`, `rhs_c_weapons`, `rhs_c_troops`, `rhs_c_bmd`, `rhs_c_bmp`, `rhs_c_bmp3`, `rhs_c_a2port_armor`, `rhs_c_btr`, `rhs_c_sprut`, `rhs_c_t72`, `rhs_c_tanks`, `rhs_c_a2port_air`, `rhs_c_a2port_car`, `rhs_c_cars`, `rhs_c_trucks`, `rhs_c_2s3`, `rhs_c_rva`, `rhs_c_heavyweapons` {% endif %} +{% if include.component == "compat_rhs_gref3" %} +`rhsgref_main`, `rhsgref_c_weapons` +{% endif %} + {% if include.component == "compat_rhs_usf3" %} `ace_javelin`, `ace_rearm`, `ace_refuel`, `ace_repair`, `rhsusf_c_weapons`, `rhsusf_c_troops`, `rhsusf_c_m1a1`, `rhsusf_c_m1a2`, `RHS_US_A2_AirImport`, `rhsusf_c_m109`, `rhsusf_c_HEMTT_A4`, `rhsusf_c_hmmwv`, `rhsusf_c_rg33`, `rhsusf_c_fmtv`, `rhsusf_c_m113`, `RHS_US_A2Port_Armor`, `rhsusf_c_melb` {% endif %} diff --git a/docs/_posts/2017-02-21-ace3-version390.md b/docs/_posts/2017-02-21-ace3-version390.md new file mode 100644 index 0000000000..42368de04e --- /dev/null +++ b/docs/_posts/2017-02-21-ace3-version390.md @@ -0,0 +1,48 @@ +--- +title: ACEREP #00008 +description: Status report on ACE3 version 3.9.0 +parent: posts +image: /img/news/170221_csatconvoy.jpg +author: bux +layout: post +--- + +Another year, another release. 3.9.0 is the first release of 2017 and we'd like to thank everyone who has helped us to make it a smooth one. + + + +2017's first #ACE3 release: v3.9.0Change log and download: https://t.co/NX6chXO3thSteam and PwS will follow shortly (hopefully) :)~bux— ACE3Mod (@ACE3Mod) February 14, 2017 + + +The release candidate testing was very successful and we have received important feedback helping us to fix some issues beforehand. + + + + + + + +This update mainly features quite a lot of bug and compatibility fixes as well as necessary changes for the next Arma 3 update. In particular we've added the 64bit compatible DLL files. Though, don't expect any dramatic performance increases as the DLLs were just rebuilt to make them compatible. + +A new component has been added which removes the restriction for picking up and wearing enemy uniforms. You can find it in the `/optionals` folder in ACE3 and to use it you could e.g. copy it to the `/addons` folder. We've decided to put it into optionals because being able to wear an enemy's uniform isn't always the desired behavior for everyone. + +We have invested some time in polishing the ballistic features of ACE3. As an example the range cards and the ATragMX now respect the distance between the center of the bore and the center of the scope to more accurately calculate firing solutions. If you're an addon maker [we've added new config entries which can be added to your addon or a compatibility patch](/wiki/framework/scopes-framework.html). And as an added benefit, shooting with this change is even more accurate than in vanilla. +Speaking of the ATragMX it is now closer to the real life counter part than ever before: It now features a muzzle velocity/temperature interpolation, calculating muzzle velocity by factoring in powder burn rates at different temperatures and the "Truing Drop" feature which helps a shooter calculate a better flight path based on actual shooting results. And because "our" ATragMX is models closely to the real world one you could even use the [real manual to read about those features](https://www.horusvision.com/download/manual_Horus_ATrag-v385.pdf){:target="_blank"}. + +And even Zeus got a little love in this update. You can find new helper modules in the Zeus interface like teleporting players, adding FRIES to a helicopter, toggle the simulation of objects and more. The modules have been cleaned up into distinct categories to make them easier to find. + + + + + + + +As mentioned in our [last ACEREP](/2016/11/04/ace3-version381.html) we're still working on our big medical rewrite. Progress though has stalled a little bit due to the holidays and real life occupations. But it's already in quite a good state. More on that will follow in a future ACEREP. + +## The End Things + +The full (and funny) changelog for ACE3 v3.9.0 can be found here: [https://github.com/acemod/ACE3/releases/v3.9.0](https://github.com/acemod/ACE3/releases/v3.9.0){:target="_blank"} + +We are still in need for translations for some languages within the ACE3 project. Please have a look at [this GitHub issue to track the progress and what languages lack translations](https://github.com/acemod/ACE3/issues/367){:target="_blank"}. Any and all help with this is very appreciated. + +Make sure to [follow us on twitter](https://twitter.com/intent/follow?screen_name=ace3mod&tw_p=followbutton){:target="_blank"} and to [like our facebook page](https://www.facebook.com/ACE3Mod/){:target="_blank"}. diff --git a/docs/img/news/170221_Zeus.jpg b/docs/img/news/170221_Zeus.jpg new file mode 100644 index 0000000000..8d52b28aee Binary files /dev/null and b/docs/img/news/170221_Zeus.jpg differ diff --git a/docs/img/news/170221_csatconvoy.jpg b/docs/img/news/170221_csatconvoy.jpg new file mode 100644 index 0000000000..b80b907468 Binary files /dev/null and b/docs/img/news/170221_csatconvoy.jpg differ diff --git a/docs/img/wiki/feature/atragmx1.jpg b/docs/img/wiki/feature/atragmx1.jpg new file mode 100644 index 0000000000..d80768a686 Binary files /dev/null and b/docs/img/wiki/feature/atragmx1.jpg differ diff --git a/docs/img/wiki/feature/atragmx2.png b/docs/img/wiki/feature/atragmx2.png new file mode 100644 index 0000000000..6cdaabd3f8 Binary files /dev/null and b/docs/img/wiki/feature/atragmx2.png differ diff --git a/docs/img/wiki/feature/atragmx3.png b/docs/img/wiki/feature/atragmx3.png new file mode 100644 index 0000000000..dd4a1800e1 Binary files /dev/null and b/docs/img/wiki/feature/atragmx3.png differ diff --git a/docs/src/img/news/170221_Zeus.jpg b/docs/src/img/news/170221_Zeus.jpg new file mode 100644 index 0000000000..8d52b28aee Binary files /dev/null and b/docs/src/img/news/170221_Zeus.jpg differ diff --git a/docs/src/img/news/170221_csatconvoy.jpg b/docs/src/img/news/170221_csatconvoy.jpg new file mode 100644 index 0000000000..b80b907468 Binary files /dev/null and b/docs/src/img/news/170221_csatconvoy.jpg differ 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/docs/wiki/feature/atragmx.md b/docs/wiki/feature/atragmx.md index d6ca29e7b5..fde3bf8880 100644 --- a/docs/wiki/feature/atragmx.md +++ b/docs/wiki/feature/atragmx.md @@ -12,21 +12,65 @@ version: patch: 0 --- -## Overview +## 1. Overview -### Sub-feature 1 -Short description of sub-feature 1. +### 1.1 AtragMx from Horus Vision -### Sub-feature 2 -Short description of sub-feature 2. +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 -## Usage +### 2.1 Example with M14 and default 7.62mm 20Rnd Mag -Short overview of how to use the feature, e.g. menu options, key bindings, -instructions. May not apply to all modules. +**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 at the end. + -## Dependencies + - Open the AtragMx and the `Atmsphr` column, select `Default` and `Done`. + - `Open Gun` the 7.62x51mm M80 in the `GunList`. + - Select `E` (English unit) at the top right. + - 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.* + - Optionally, `Save Gun` and `Done` in the `GunList`. + +**In position:** + - Update the `Atmsphr` column with the Kestrel and `Done` (Check the new Muzzle Velocity in the `Gun` column). + - Update the `Target` column. + - Apply the vertical and horizontal elevations on the scope. + - Control the breath and press. + +### 2.2 Example with Truing tool + +**Start of the mission:** + - 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. + - 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. + + + + ### 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 {% include dependencies_list.md component="atragmx" %} diff --git a/docs/wiki/feature/slideshow.md b/docs/wiki/feature/slideshow.md index 81770a1783..d99a8f2940 100644 --- a/docs/wiki/feature/slideshow.md +++ b/docs/wiki/feature/slideshow.md @@ -13,14 +13,17 @@ version: --- ## 1. Overview + This adds the ability to have images shown on some objects and have other objects being used as remotes. Please note that only objects with hiddenSelection 0 can be used to render images (whiteboard, TV, PC Screen being the most notable examples). ## 2. Usage + Note that this sections is for users, for mission makers refer to [the entry in mission-tools](../missionmaker/mission-tools.html) Also if no remotes are defined the "screen" object itself becomes the remote. ### 2.1 Switching between images + - Look at the object used as a remote and use the interaction menu ⊞ Win (ACE3 default). - Select the action that correspond to the image you want (the name of the action depends on the mission maker). diff --git a/docs/wiki/framework/explosives-framework.md b/docs/wiki/framework/explosives-framework.md index f84aa3ed50..caa7f6b812 100644 --- a/docs/wiki/framework/explosives-framework.md +++ b/docs/wiki/framework/explosives-framework.md @@ -133,7 +133,7 @@ Name | Use ### 5.1 Scripted Explosion -`ace_explosives_fnc_scriptedExplosion` +`ace_explosives_fnc_scriptedExplosive` | Arguments | Type | Optional (default value) ---| --------- | ---- | ------------------------ @@ -143,7 +143,7 @@ Name | Use #### 5.1.1 Example -`[[charge1, charge2], -3] call ace_explosives_fnc_scriptedExplosion;` +`[[charge1, charge2], -3] call ace_explosives_fnc_scriptedExplosive;` | Arguments | Explanation ---| --------- | ----------- diff --git a/docs/wiki/framework/slideshow-framework.md b/docs/wiki/framework/slideshow-framework.md index a9aeae3935..2859252670 100644 --- a/docs/wiki/framework/slideshow-framework.md +++ b/docs/wiki/framework/slideshow-framework.md @@ -44,11 +44,14 @@ Important notes: 2 | Image Paths | Array | Required (paths must use backslash `\`) 3 | Action Names | Array | Required 4 | Slide Duration | Number | Optional (default: `0`, `0` disables automatic transitions) +5 | Set Name | String | Optional (default: localized `"Slides"`) **R** | None | None | Return value +_Note: Set Name argument added in 3.9.1._ + #### 2.1.1 Example -`[[object1, object2], [controller1], ["images\image1.paa", "images\image2.paa"], ["Action1", "Action2"], 5] call ace_slideshow_fnc_createSlideshow;` +`[[object1, object2], [controller1], ["images\image1.paa", "images\image2.paa"], ["Action1", "Action2"], 5, "My Slides"] call ace_slideshow_fnc_createSlideshow;` | Arguments | Explanation ---| --------- | ----------- @@ -57,3 +60,4 @@ Important notes: 2 | `["images\image1.paa", "images\image2.paa"]` | Paths to images projected on screen objects 3 | `["Action1", "Action2"]` | Action names for interaction menu if automatic transitions are not enabled 4 | `5` | 5s slide duration before change to next image +5 | `"My Slides"` | Main interaction point name, for easier distinguishing of multiple slideshow sets diff --git a/docs/wiki/frameworkx/headless-framework.md b/docs/wiki/frameworkx/headless-framework.md index 5f6ab8c16f..52bbde2257 100644 --- a/docs/wiki/frameworkx/headless-framework.md +++ b/docs/wiki/frameworkx/headless-framework.md @@ -20,6 +20,12 @@ In an event when a Headless Clients disconnects during the mission (is kicked, l A server admin or mission maker can also define the minimal delay between transfers, in order to minimize the desync due to changes in locality of many units. Log can also be enabled to keep track of the transfers (_note: it is counting groups and not units_). That can be set through [ACE3 Settings](../framework/settings-framework.html) or a mission module. +### 1.1 End Mission + +Since ACEX v3.1.0 Headless component supports automatic ending of mission when Headless Clients are connencted but no players are present. It is basically `server.cfg` setting `persistent = 1;` with Headless Client support. + +As of ACEX v3.2.0 this feature can also be enabled without enabling AI distribution (overall setting). + ## 2. Scripting @@ -34,7 +40,10 @@ this setVariable ["acex_headless_blacklist", true]; ## 3. Limitations -Some Arma 3 features are incompatible, this is up to BI to add support. Disable transferring for units using the following features to ensure expected functionality. +Some Arma 3 features are incompatible, this is up to BI to add support. Disable transferring for units using the following features to ensure expected functionality: -- Vanilla Support Modules will stop functioning -- Triggers synchronized with waypoints will no longer be respected (waypoint will not change status based on the trigger condition) +- Vanilla Support Modules (will stop functioning) + +Additionally, groups will not be transferred due to lack of support if they: + +- Have waypoints with synchronized triggers (waypoint would not change status based on trigger condition) (added in ACEX v3.2.0) 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_rh_acc/CfgWeapons.hpp b/optionals/compat_rh_acc/CfgWeapons.hpp index ffd18bc12e..2d1b84b5a2 100644 --- a/optionals/compat_rh_acc/CfgWeapons.hpp +++ b/optionals/compat_rh_acc/CfgWeapons.hpp @@ -1,18 +1,18 @@ class CfgWeapons { class ItemCore; + + /* Scopes */ class InventoryOpticsItem_Base_F; - - /* + // This would require MOA turrets - class RH_shortdot : ItemCore { + /*class RH_shortdot : ItemCore { ACE_ScopeAdjust_Vertical[] = { -1, 25 }; ACE_ScopeAdjust_Horizontal[] = { -13, 13 }; ACE_ScopeAdjust_VerticalIncrement = 0.5; ACE_ScopeAdjust_Unit = "MOA"; - }; - */ - + };*/ + class RH_accupoint : ItemCore { ACE_ScopeAdjust_Vertical[] = { -4, 30 }; ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; @@ -147,4 +147,18 @@ class CfgWeapons { }; }; }; + + /* Flashlights */ + class InventoryFlashLightItem_Base_F; + + class RH_SFM952V: ItemCore { + class ItemInfo: InventoryFlashLightItem_Base_F { + class FlashLight { + ACE_Flashlight_Colour = "white"; + ACE_Flashlight_Beam = QPATHTOEF(map,UI\Flashlight_beam_white_ca.paa); + ACE_Flashlight_Size = 2.75; + ACE_Flashlight_Sound = 1; + }; + }; + }; }; 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_gref3/$PBOPREFIX$ b/optionals/compat_rhs_gref3/$PBOPREFIX$ new file mode 100644 index 0000000000..6f777c4475 --- /dev/null +++ b/optionals/compat_rhs_gref3/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\compat_rhs_gref3 diff --git a/optionals/compat_rhs_gref3/CfgAmmo.hpp b/optionals/compat_rhs_gref3/CfgAmmo.hpp new file mode 100644 index 0000000000..70603287d0 --- /dev/null +++ b/optionals/compat_rhs_gref3/CfgAmmo.hpp @@ -0,0 +1,6 @@ +class CfgAmmo { + class GrenadeHand; + class rhsgref_ammo_rkg3em: GrenadeHand { // Scripted shaped charge + ace_frag_force = 0; + }; +}; diff --git a/optionals/compat_rhs_gref3/config.cpp b/optionals/compat_rhs_gref3/config.cpp new file mode 100644 index 0000000000..dd52014798 --- /dev/null +++ b/optionals/compat_rhs_gref3/config.cpp @@ -0,0 +1,16 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + name = COMPONENT_NAME; + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"rhsgref_main", "rhsgref_c_weapons"}; + author = ECSTRING(common,ACETeam); + url = ECSTRING(main,URL); + VERSION_CONFIG; + }; +}; + +#include "CfgAmmo.hpp" diff --git a/optionals/compat_rhs_gref3/script_component.hpp b/optionals/compat_rhs_gref3/script_component.hpp new file mode 100644 index 0000000000..12f0e45522 --- /dev/null +++ b/optionals/compat_rhs_gref3/script_component.hpp @@ -0,0 +1,6 @@ +#define COMPONENT compat_rhs_gref3 +#define COMPONENT_BEAUTIFIED RHS GREF Compatibility + +#include "\z\ace\addons\main\script_mod.hpp" + +#include "\z\ace\addons\main\script_macros.hpp" 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 126f79b8bf..4285db8661 100644 --- a/optionals/compat_rhs_usf3/CfgWeapons.hpp +++ b/optionals/compat_rhs_usf3/CfgWeapons.hpp @@ -5,117 +5,40 @@ class CfgWeapons { class srifle_EBR_F; class launch_O_Titan_F; class UGL_F; - + + class rhs_weap_M320_Base_F: Pistol_Base_F { // Standalone M320 (pistol slot) + magazines[] += {"ACE_HuntIR_M203"}; + }; class GM6_base_F; 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 { + 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; ACE_barrelLength = 368.3; class M203_GL: UGL_F { - magazines[] = { - "rhs_mag_M441_HE", - "rhs_mag_M433_HEDP", - "rhs_mag_M4009", - "rhs_mag_m576", - "rhs_mag_M585_white", - "rhs_mag_M661_green", - "rhs_mag_M662_red", - "rhs_mag_M713_red", - "rhs_mag_M714_white", - "rhs_mag_M715_green", - "rhs_mag_M716_yellow", - - // bis compatibility - "1Rnd_HE_Grenade_shell", - "UGL_FlareWhite_F", - "UGL_FlareGreen_F", - "UGL_FlareRed_F", - "UGL_FlareYellow_F", - "UGL_FlareCIR_F", - "1Rnd_Smoke_Grenade_shell", - "1Rnd_SmokeRed_Grenade_shell", - "1Rnd_SmokeGreen_Grenade_shell", - "1Rnd_SmokeYellow_Grenade_shell", - "1Rnd_SmokePurple_Grenade_shell", - "1Rnd_SmokeBlue_Grenade_shell", - "1Rnd_SmokeOrange_Grenade_shell", - "3Rnd_HE_Grenade_shell", - "3Rnd_UGL_FlareWhite_F", - "3Rnd_UGL_FlareGreen_F", - "3Rnd_UGL_FlareRed_F", - "3Rnd_UGL_FlareYellow_F", - "3Rnd_UGL_FlareCIR_F", - "3Rnd_Smoke_Grenade_shell", - "3Rnd_SmokeRed_Grenade_shell", - "3Rnd_SmokeGreen_Grenade_shell", - "3Rnd_SmokeYellow_Grenade_shell", - "3Rnd_SmokePurple_Grenade_shell", - "3Rnd_SmokeBlue_Grenade_shell", - "3Rnd_SmokeOrange_Grenade_shell", - - // ACE3 Compatibility - "ACE_HuntIR_M203" - }; - }; - class M320_GL : M203_GL { - magazines[] = { - "rhs_mag_M441_HE", - "rhs_mag_M433_HEDP", - "rhs_mag_M4009", - "rhs_mag_m576", - "rhs_mag_M585_white", - "rhs_mag_M661_green", - "rhs_mag_M662_red", - "rhs_mag_M713_red", - "rhs_mag_M714_white", - "rhs_mag_M715_green", - "rhs_mag_M716_yellow", - - // bis compatibility - "1Rnd_HE_Grenade_shell", - "UGL_FlareWhite_F", - "UGL_FlareGreen_F", - "UGL_FlareRed_F", - "UGL_FlareYellow_F", - "UGL_FlareCIR_F", - "1Rnd_Smoke_Grenade_shell", - "1Rnd_SmokeRed_Grenade_shell", - "1Rnd_SmokeGreen_Grenade_shell", - "1Rnd_SmokeYellow_Grenade_shell", - "1Rnd_SmokePurple_Grenade_shell", - "1Rnd_SmokeBlue_Grenade_shell", - "1Rnd_SmokeOrange_Grenade_shell", - "3Rnd_HE_Grenade_shell", - "3Rnd_UGL_FlareWhite_F", - "3Rnd_UGL_FlareGreen_F", - "3Rnd_UGL_FlareRed_F", - "3Rnd_UGL_FlareYellow_F", - "3Rnd_UGL_FlareCIR_F", - "3Rnd_Smoke_Grenade_shell", - "3Rnd_SmokeRed_Grenade_shell", - "3Rnd_SmokeGreen_Grenade_shell", - "3Rnd_SmokeYellow_Grenade_shell", - "3Rnd_SmokePurple_Grenade_shell", - "3Rnd_SmokeBlue_Grenade_shell", - "3Rnd_SmokeOrange_Grenade_shell", - - // ACE3 Compatibility - "ACE_HuntIR_M203" - }; + magazines[] += {"ACE_HuntIR_M203"}; }; + // Added to the M320_GL in subConfig }; class rhs_weap_m4a1; class rhs_weap_hk416d10: rhs_weap_m4a1 { @@ -141,7 +64,7 @@ class CfgWeapons { }; class rhs_weap_lmg_minimi_railed; // Rifle_Base_F - scope = private; class rhs_weap_m249_pip_S: rhs_weap_lmg_minimi_railed { - ACE_barrelLength = 348; + ACE_barrelLength = 348; ACE_barrelTwist = 177.8; ACE_Overheating_allowSwapBarrel = 1; }; @@ -160,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; @@ -180,9 +106,9 @@ class CfgWeapons { ACE_barrelLength = 508.0; }; class SMG_01_F; - class rhsusf_weap_MP7A1_base_f : SMG_01_F { + class rhsusf_weap_MP7A1_base_f: SMG_01_F { ACE_barrelTwist = 160.0; - ACE_barrelLength = 180.0; + ACE_barrelLength = 180.0; }; // RHS pistols class hgun_ACPC2_F; @@ -216,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 { @@ -227,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 { @@ -238,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 { @@ -249,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; diff --git a/optionals/compat_rhs_usf3/subConfig/config.cpp b/optionals/compat_rhs_usf3/subConfig/config.cpp new file mode 100644 index 0000000000..e3c3b30ae0 --- /dev/null +++ b/optionals/compat_rhs_usf3/subConfig/config.cpp @@ -0,0 +1,26 @@ +#include "\z\ace\addons\compat_rhs_usf3\script_component.hpp" +#undef COMPONENT +#define COMPONENT compat_rhs_usf3_sub + +class CfgPatches { + class ADDON { + name = COMPONENT_NAME; + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_compat_rhs_usf3"}; + author = ECSTRING(common,ACETeam); + url = ECSTRING(main,URL); + VERSION_CONFIG; + }; +}; + +class CfgWeapons { + class arifle_MX_Base_F; + class rhs_weap_m4_Base: arifle_MX_Base_F { + class M203_GL; + class M320_GL: M203_GL { + magazines[] += {"ACE_HuntIR_M203"}; + }; + }; +}; diff --git a/tools/publish.py b/tools/publish.py index 894a79720c..02ed225d82 100644 --- a/tools/publish.py +++ b/tools/publish.py @@ -107,7 +107,7 @@ def main(argv): #ACE Main - http://steamcommunity.com/sharedfiles/filedetails/?id=463939057 - # publishFolder(ace_release_dir, "463939057", changelog_path) + # Note: command line publisher doesn't like our file structure, just upload this one manually @@ -115,10 +115,14 @@ def main(argv): folder = buildCompatFolder("@ace_compat_rhs_usf3", ["ace_compat_rhs_usf3.*"]) publishFolder(folder, "773125288", changelog_path) - #RHS Compat Commies - http://steamcommunity.com/sharedfiles/filedetails/?id=773131200 + #RHS Compat Russians - http://steamcommunity.com/sharedfiles/filedetails/?id=773131200 folder = buildCompatFolder("@ace_compat_rhs_afrf3", ["ace_compat_rhs_afrf3.*"]) publishFolder(folder, "773131200", changelog_path) + #RHS Compat GREF - http://steamcommunity.com/sharedfiles/filedetails/?id=884966711 + folder = buildCompatFolder("@ace_compat_rhs_gref3", ["ace_compat_rhs_gref3.*"]) + publishFolder(folder, "884966711", changelog_path) + #ADR97 (p90)- http://steamcommunity.com/sharedfiles/filedetails/?id=773136286 folder = buildCompatFolder("@ace_adr97_compat", ["ace_compat_adr_97.*"]) publishFolder(folder, "773136286", changelog_path)
- + 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/_includes/dependencies_list.md b/docs/_includes/dependencies_list.md index 556b9b65b4..ad884d8cee 100644 --- a/docs/_includes/dependencies_list.md +++ b/docs/_includes/dependencies_list.md @@ -450,6 +450,10 @@ `ace_rearm`, `ace_refuel`, `ace_repair`, `rhs_c_weapons`, `rhs_c_troops`, `rhs_c_bmd`, `rhs_c_bmp`, `rhs_c_bmp3`, `rhs_c_a2port_armor`, `rhs_c_btr`, `rhs_c_sprut`, `rhs_c_t72`, `rhs_c_tanks`, `rhs_c_a2port_air`, `rhs_c_a2port_car`, `rhs_c_cars`, `rhs_c_trucks`, `rhs_c_2s3`, `rhs_c_rva`, `rhs_c_heavyweapons` {% endif %} +{% if include.component == "compat_rhs_gref3" %} +`rhsgref_main`, `rhsgref_c_weapons` +{% endif %} + {% if include.component == "compat_rhs_usf3" %} `ace_javelin`, `ace_rearm`, `ace_refuel`, `ace_repair`, `rhsusf_c_weapons`, `rhsusf_c_troops`, `rhsusf_c_m1a1`, `rhsusf_c_m1a2`, `RHS_US_A2_AirImport`, `rhsusf_c_m109`, `rhsusf_c_HEMTT_A4`, `rhsusf_c_hmmwv`, `rhsusf_c_rg33`, `rhsusf_c_fmtv`, `rhsusf_c_m113`, `RHS_US_A2Port_Armor`, `rhsusf_c_melb` {% endif %} diff --git a/docs/_posts/2017-02-21-ace3-version390.md b/docs/_posts/2017-02-21-ace3-version390.md new file mode 100644 index 0000000000..42368de04e --- /dev/null +++ b/docs/_posts/2017-02-21-ace3-version390.md @@ -0,0 +1,48 @@ +--- +title: ACEREP #00008 +description: Status report on ACE3 version 3.9.0 +parent: posts +image: /img/news/170221_csatconvoy.jpg +author: bux +layout: post +--- + +Another year, another release. 3.9.0 is the first release of 2017 and we'd like to thank everyone who has helped us to make it a smooth one. + + + +2017's first #ACE3 release: v3.9.0Change log and download: https://t.co/NX6chXO3thSteam and PwS will follow shortly (hopefully) :)~bux— ACE3Mod (@ACE3Mod) February 14, 2017 + + +The release candidate testing was very successful and we have received important feedback helping us to fix some issues beforehand. + + + + + + + +This update mainly features quite a lot of bug and compatibility fixes as well as necessary changes for the next Arma 3 update. In particular we've added the 64bit compatible DLL files. Though, don't expect any dramatic performance increases as the DLLs were just rebuilt to make them compatible. + +A new component has been added which removes the restriction for picking up and wearing enemy uniforms. You can find it in the `/optionals` folder in ACE3 and to use it you could e.g. copy it to the `/addons` folder. We've decided to put it into optionals because being able to wear an enemy's uniform isn't always the desired behavior for everyone. + +We have invested some time in polishing the ballistic features of ACE3. As an example the range cards and the ATragMX now respect the distance between the center of the bore and the center of the scope to more accurately calculate firing solutions. If you're an addon maker [we've added new config entries which can be added to your addon or a compatibility patch](/wiki/framework/scopes-framework.html). And as an added benefit, shooting with this change is even more accurate than in vanilla. +Speaking of the ATragMX it is now closer to the real life counter part than ever before: It now features a muzzle velocity/temperature interpolation, calculating muzzle velocity by factoring in powder burn rates at different temperatures and the "Truing Drop" feature which helps a shooter calculate a better flight path based on actual shooting results. And because "our" ATragMX is models closely to the real world one you could even use the [real manual to read about those features](https://www.horusvision.com/download/manual_Horus_ATrag-v385.pdf){:target="_blank"}. + +And even Zeus got a little love in this update. You can find new helper modules in the Zeus interface like teleporting players, adding FRIES to a helicopter, toggle the simulation of objects and more. The modules have been cleaned up into distinct categories to make them easier to find. + + + + + + + +As mentioned in our [last ACEREP](/2016/11/04/ace3-version381.html) we're still working on our big medical rewrite. Progress though has stalled a little bit due to the holidays and real life occupations. But it's already in quite a good state. More on that will follow in a future ACEREP. + +## The End Things + +The full (and funny) changelog for ACE3 v3.9.0 can be found here: [https://github.com/acemod/ACE3/releases/v3.9.0](https://github.com/acemod/ACE3/releases/v3.9.0){:target="_blank"} + +We are still in need for translations for some languages within the ACE3 project. Please have a look at [this GitHub issue to track the progress and what languages lack translations](https://github.com/acemod/ACE3/issues/367){:target="_blank"}. Any and all help with this is very appreciated. + +Make sure to [follow us on twitter](https://twitter.com/intent/follow?screen_name=ace3mod&tw_p=followbutton){:target="_blank"} and to [like our facebook page](https://www.facebook.com/ACE3Mod/){:target="_blank"}. diff --git a/docs/img/news/170221_Zeus.jpg b/docs/img/news/170221_Zeus.jpg new file mode 100644 index 0000000000..8d52b28aee Binary files /dev/null and b/docs/img/news/170221_Zeus.jpg differ diff --git a/docs/img/news/170221_csatconvoy.jpg b/docs/img/news/170221_csatconvoy.jpg new file mode 100644 index 0000000000..b80b907468 Binary files /dev/null and b/docs/img/news/170221_csatconvoy.jpg differ diff --git a/docs/img/wiki/feature/atragmx1.jpg b/docs/img/wiki/feature/atragmx1.jpg new file mode 100644 index 0000000000..d80768a686 Binary files /dev/null and b/docs/img/wiki/feature/atragmx1.jpg differ diff --git a/docs/img/wiki/feature/atragmx2.png b/docs/img/wiki/feature/atragmx2.png new file mode 100644 index 0000000000..6cdaabd3f8 Binary files /dev/null and b/docs/img/wiki/feature/atragmx2.png differ diff --git a/docs/img/wiki/feature/atragmx3.png b/docs/img/wiki/feature/atragmx3.png new file mode 100644 index 0000000000..dd4a1800e1 Binary files /dev/null and b/docs/img/wiki/feature/atragmx3.png differ diff --git a/docs/src/img/news/170221_Zeus.jpg b/docs/src/img/news/170221_Zeus.jpg new file mode 100644 index 0000000000..8d52b28aee Binary files /dev/null and b/docs/src/img/news/170221_Zeus.jpg differ diff --git a/docs/src/img/news/170221_csatconvoy.jpg b/docs/src/img/news/170221_csatconvoy.jpg new file mode 100644 index 0000000000..b80b907468 Binary files /dev/null and b/docs/src/img/news/170221_csatconvoy.jpg differ 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/docs/wiki/feature/atragmx.md b/docs/wiki/feature/atragmx.md index d6ca29e7b5..fde3bf8880 100644 --- a/docs/wiki/feature/atragmx.md +++ b/docs/wiki/feature/atragmx.md @@ -12,21 +12,65 @@ version: patch: 0 --- -## Overview +## 1. Overview -### Sub-feature 1 -Short description of sub-feature 1. +### 1.1 AtragMx from Horus Vision -### Sub-feature 2 -Short description of sub-feature 2. +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 -## Usage +### 2.1 Example with M14 and default 7.62mm 20Rnd Mag -Short overview of how to use the feature, e.g. menu options, key bindings, -instructions. May not apply to all modules. +**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 at the end. + -## Dependencies + - Open the AtragMx and the `Atmsphr` column, select `Default` and `Done`. + - `Open Gun` the 7.62x51mm M80 in the `GunList`. + - Select `E` (English unit) at the top right. + - 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.* + - Optionally, `Save Gun` and `Done` in the `GunList`. + +**In position:** + - Update the `Atmsphr` column with the Kestrel and `Done` (Check the new Muzzle Velocity in the `Gun` column). + - Update the `Target` column. + - Apply the vertical and horizontal elevations on the scope. + - Control the breath and press. + +### 2.2 Example with Truing tool + +**Start of the mission:** + - 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. + - 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. + + + + ### 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 {% include dependencies_list.md component="atragmx" %} diff --git a/docs/wiki/feature/slideshow.md b/docs/wiki/feature/slideshow.md index 81770a1783..d99a8f2940 100644 --- a/docs/wiki/feature/slideshow.md +++ b/docs/wiki/feature/slideshow.md @@ -13,14 +13,17 @@ version: --- ## 1. Overview + This adds the ability to have images shown on some objects and have other objects being used as remotes. Please note that only objects with hiddenSelection 0 can be used to render images (whiteboard, TV, PC Screen being the most notable examples). ## 2. Usage + Note that this sections is for users, for mission makers refer to [the entry in mission-tools](../missionmaker/mission-tools.html) Also if no remotes are defined the "screen" object itself becomes the remote. ### 2.1 Switching between images + - Look at the object used as a remote and use the interaction menu ⊞ Win (ACE3 default). - Select the action that correspond to the image you want (the name of the action depends on the mission maker). diff --git a/docs/wiki/framework/explosives-framework.md b/docs/wiki/framework/explosives-framework.md index f84aa3ed50..caa7f6b812 100644 --- a/docs/wiki/framework/explosives-framework.md +++ b/docs/wiki/framework/explosives-framework.md @@ -133,7 +133,7 @@ Name | Use ### 5.1 Scripted Explosion -`ace_explosives_fnc_scriptedExplosion` +`ace_explosives_fnc_scriptedExplosive` | Arguments | Type | Optional (default value) ---| --------- | ---- | ------------------------ @@ -143,7 +143,7 @@ Name | Use #### 5.1.1 Example -`[[charge1, charge2], -3] call ace_explosives_fnc_scriptedExplosion;` +`[[charge1, charge2], -3] call ace_explosives_fnc_scriptedExplosive;` | Arguments | Explanation ---| --------- | ----------- diff --git a/docs/wiki/framework/slideshow-framework.md b/docs/wiki/framework/slideshow-framework.md index a9aeae3935..2859252670 100644 --- a/docs/wiki/framework/slideshow-framework.md +++ b/docs/wiki/framework/slideshow-framework.md @@ -44,11 +44,14 @@ Important notes: 2 | Image Paths | Array | Required (paths must use backslash `\`) 3 | Action Names | Array | Required 4 | Slide Duration | Number | Optional (default: `0`, `0` disables automatic transitions) +5 | Set Name | String | Optional (default: localized `"Slides"`) **R** | None | None | Return value +_Note: Set Name argument added in 3.9.1._ + #### 2.1.1 Example -`[[object1, object2], [controller1], ["images\image1.paa", "images\image2.paa"], ["Action1", "Action2"], 5] call ace_slideshow_fnc_createSlideshow;` +`[[object1, object2], [controller1], ["images\image1.paa", "images\image2.paa"], ["Action1", "Action2"], 5, "My Slides"] call ace_slideshow_fnc_createSlideshow;` | Arguments | Explanation ---| --------- | ----------- @@ -57,3 +60,4 @@ Important notes: 2 | `["images\image1.paa", "images\image2.paa"]` | Paths to images projected on screen objects 3 | `["Action1", "Action2"]` | Action names for interaction menu if automatic transitions are not enabled 4 | `5` | 5s slide duration before change to next image +5 | `"My Slides"` | Main interaction point name, for easier distinguishing of multiple slideshow sets diff --git a/docs/wiki/frameworkx/headless-framework.md b/docs/wiki/frameworkx/headless-framework.md index 5f6ab8c16f..52bbde2257 100644 --- a/docs/wiki/frameworkx/headless-framework.md +++ b/docs/wiki/frameworkx/headless-framework.md @@ -20,6 +20,12 @@ In an event when a Headless Clients disconnects during the mission (is kicked, l A server admin or mission maker can also define the minimal delay between transfers, in order to minimize the desync due to changes in locality of many units. Log can also be enabled to keep track of the transfers (_note: it is counting groups and not units_). That can be set through [ACE3 Settings](../framework/settings-framework.html) or a mission module. +### 1.1 End Mission + +Since ACEX v3.1.0 Headless component supports automatic ending of mission when Headless Clients are connencted but no players are present. It is basically `server.cfg` setting `persistent = 1;` with Headless Client support. + +As of ACEX v3.2.0 this feature can also be enabled without enabling AI distribution (overall setting). + ## 2. Scripting @@ -34,7 +40,10 @@ this setVariable ["acex_headless_blacklist", true]; ## 3. Limitations -Some Arma 3 features are incompatible, this is up to BI to add support. Disable transferring for units using the following features to ensure expected functionality. +Some Arma 3 features are incompatible, this is up to BI to add support. Disable transferring for units using the following features to ensure expected functionality: -- Vanilla Support Modules will stop functioning -- Triggers synchronized with waypoints will no longer be respected (waypoint will not change status based on the trigger condition) +- Vanilla Support Modules (will stop functioning) + +Additionally, groups will not be transferred due to lack of support if they: + +- Have waypoints with synchronized triggers (waypoint would not change status based on trigger condition) (added in ACEX v3.2.0) 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_rh_acc/CfgWeapons.hpp b/optionals/compat_rh_acc/CfgWeapons.hpp index ffd18bc12e..2d1b84b5a2 100644 --- a/optionals/compat_rh_acc/CfgWeapons.hpp +++ b/optionals/compat_rh_acc/CfgWeapons.hpp @@ -1,18 +1,18 @@ class CfgWeapons { class ItemCore; + + /* Scopes */ class InventoryOpticsItem_Base_F; - - /* + // This would require MOA turrets - class RH_shortdot : ItemCore { + /*class RH_shortdot : ItemCore { ACE_ScopeAdjust_Vertical[] = { -1, 25 }; ACE_ScopeAdjust_Horizontal[] = { -13, 13 }; ACE_ScopeAdjust_VerticalIncrement = 0.5; ACE_ScopeAdjust_Unit = "MOA"; - }; - */ - + };*/ + class RH_accupoint : ItemCore { ACE_ScopeAdjust_Vertical[] = { -4, 30 }; ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; @@ -147,4 +147,18 @@ class CfgWeapons { }; }; }; + + /* Flashlights */ + class InventoryFlashLightItem_Base_F; + + class RH_SFM952V: ItemCore { + class ItemInfo: InventoryFlashLightItem_Base_F { + class FlashLight { + ACE_Flashlight_Colour = "white"; + ACE_Flashlight_Beam = QPATHTOEF(map,UI\Flashlight_beam_white_ca.paa); + ACE_Flashlight_Size = 2.75; + ACE_Flashlight_Sound = 1; + }; + }; + }; }; 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_gref3/$PBOPREFIX$ b/optionals/compat_rhs_gref3/$PBOPREFIX$ new file mode 100644 index 0000000000..6f777c4475 --- /dev/null +++ b/optionals/compat_rhs_gref3/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\compat_rhs_gref3 diff --git a/optionals/compat_rhs_gref3/CfgAmmo.hpp b/optionals/compat_rhs_gref3/CfgAmmo.hpp new file mode 100644 index 0000000000..70603287d0 --- /dev/null +++ b/optionals/compat_rhs_gref3/CfgAmmo.hpp @@ -0,0 +1,6 @@ +class CfgAmmo { + class GrenadeHand; + class rhsgref_ammo_rkg3em: GrenadeHand { // Scripted shaped charge + ace_frag_force = 0; + }; +}; diff --git a/optionals/compat_rhs_gref3/config.cpp b/optionals/compat_rhs_gref3/config.cpp new file mode 100644 index 0000000000..dd52014798 --- /dev/null +++ b/optionals/compat_rhs_gref3/config.cpp @@ -0,0 +1,16 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + name = COMPONENT_NAME; + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"rhsgref_main", "rhsgref_c_weapons"}; + author = ECSTRING(common,ACETeam); + url = ECSTRING(main,URL); + VERSION_CONFIG; + }; +}; + +#include "CfgAmmo.hpp" diff --git a/optionals/compat_rhs_gref3/script_component.hpp b/optionals/compat_rhs_gref3/script_component.hpp new file mode 100644 index 0000000000..12f0e45522 --- /dev/null +++ b/optionals/compat_rhs_gref3/script_component.hpp @@ -0,0 +1,6 @@ +#define COMPONENT compat_rhs_gref3 +#define COMPONENT_BEAUTIFIED RHS GREF Compatibility + +#include "\z\ace\addons\main\script_mod.hpp" + +#include "\z\ace\addons\main\script_macros.hpp" 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 126f79b8bf..4285db8661 100644 --- a/optionals/compat_rhs_usf3/CfgWeapons.hpp +++ b/optionals/compat_rhs_usf3/CfgWeapons.hpp @@ -5,117 +5,40 @@ class CfgWeapons { class srifle_EBR_F; class launch_O_Titan_F; class UGL_F; - + + class rhs_weap_M320_Base_F: Pistol_Base_F { // Standalone M320 (pistol slot) + magazines[] += {"ACE_HuntIR_M203"}; + }; class GM6_base_F; 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 { + 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; ACE_barrelLength = 368.3; class M203_GL: UGL_F { - magazines[] = { - "rhs_mag_M441_HE", - "rhs_mag_M433_HEDP", - "rhs_mag_M4009", - "rhs_mag_m576", - "rhs_mag_M585_white", - "rhs_mag_M661_green", - "rhs_mag_M662_red", - "rhs_mag_M713_red", - "rhs_mag_M714_white", - "rhs_mag_M715_green", - "rhs_mag_M716_yellow", - - // bis compatibility - "1Rnd_HE_Grenade_shell", - "UGL_FlareWhite_F", - "UGL_FlareGreen_F", - "UGL_FlareRed_F", - "UGL_FlareYellow_F", - "UGL_FlareCIR_F", - "1Rnd_Smoke_Grenade_shell", - "1Rnd_SmokeRed_Grenade_shell", - "1Rnd_SmokeGreen_Grenade_shell", - "1Rnd_SmokeYellow_Grenade_shell", - "1Rnd_SmokePurple_Grenade_shell", - "1Rnd_SmokeBlue_Grenade_shell", - "1Rnd_SmokeOrange_Grenade_shell", - "3Rnd_HE_Grenade_shell", - "3Rnd_UGL_FlareWhite_F", - "3Rnd_UGL_FlareGreen_F", - "3Rnd_UGL_FlareRed_F", - "3Rnd_UGL_FlareYellow_F", - "3Rnd_UGL_FlareCIR_F", - "3Rnd_Smoke_Grenade_shell", - "3Rnd_SmokeRed_Grenade_shell", - "3Rnd_SmokeGreen_Grenade_shell", - "3Rnd_SmokeYellow_Grenade_shell", - "3Rnd_SmokePurple_Grenade_shell", - "3Rnd_SmokeBlue_Grenade_shell", - "3Rnd_SmokeOrange_Grenade_shell", - - // ACE3 Compatibility - "ACE_HuntIR_M203" - }; - }; - class M320_GL : M203_GL { - magazines[] = { - "rhs_mag_M441_HE", - "rhs_mag_M433_HEDP", - "rhs_mag_M4009", - "rhs_mag_m576", - "rhs_mag_M585_white", - "rhs_mag_M661_green", - "rhs_mag_M662_red", - "rhs_mag_M713_red", - "rhs_mag_M714_white", - "rhs_mag_M715_green", - "rhs_mag_M716_yellow", - - // bis compatibility - "1Rnd_HE_Grenade_shell", - "UGL_FlareWhite_F", - "UGL_FlareGreen_F", - "UGL_FlareRed_F", - "UGL_FlareYellow_F", - "UGL_FlareCIR_F", - "1Rnd_Smoke_Grenade_shell", - "1Rnd_SmokeRed_Grenade_shell", - "1Rnd_SmokeGreen_Grenade_shell", - "1Rnd_SmokeYellow_Grenade_shell", - "1Rnd_SmokePurple_Grenade_shell", - "1Rnd_SmokeBlue_Grenade_shell", - "1Rnd_SmokeOrange_Grenade_shell", - "3Rnd_HE_Grenade_shell", - "3Rnd_UGL_FlareWhite_F", - "3Rnd_UGL_FlareGreen_F", - "3Rnd_UGL_FlareRed_F", - "3Rnd_UGL_FlareYellow_F", - "3Rnd_UGL_FlareCIR_F", - "3Rnd_Smoke_Grenade_shell", - "3Rnd_SmokeRed_Grenade_shell", - "3Rnd_SmokeGreen_Grenade_shell", - "3Rnd_SmokeYellow_Grenade_shell", - "3Rnd_SmokePurple_Grenade_shell", - "3Rnd_SmokeBlue_Grenade_shell", - "3Rnd_SmokeOrange_Grenade_shell", - - // ACE3 Compatibility - "ACE_HuntIR_M203" - }; + magazines[] += {"ACE_HuntIR_M203"}; }; + // Added to the M320_GL in subConfig }; class rhs_weap_m4a1; class rhs_weap_hk416d10: rhs_weap_m4a1 { @@ -141,7 +64,7 @@ class CfgWeapons { }; class rhs_weap_lmg_minimi_railed; // Rifle_Base_F - scope = private; class rhs_weap_m249_pip_S: rhs_weap_lmg_minimi_railed { - ACE_barrelLength = 348; + ACE_barrelLength = 348; ACE_barrelTwist = 177.8; ACE_Overheating_allowSwapBarrel = 1; }; @@ -160,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; @@ -180,9 +106,9 @@ class CfgWeapons { ACE_barrelLength = 508.0; }; class SMG_01_F; - class rhsusf_weap_MP7A1_base_f : SMG_01_F { + class rhsusf_weap_MP7A1_base_f: SMG_01_F { ACE_barrelTwist = 160.0; - ACE_barrelLength = 180.0; + ACE_barrelLength = 180.0; }; // RHS pistols class hgun_ACPC2_F; @@ -216,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 { @@ -227,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 { @@ -238,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 { @@ -249,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; diff --git a/optionals/compat_rhs_usf3/subConfig/config.cpp b/optionals/compat_rhs_usf3/subConfig/config.cpp new file mode 100644 index 0000000000..e3c3b30ae0 --- /dev/null +++ b/optionals/compat_rhs_usf3/subConfig/config.cpp @@ -0,0 +1,26 @@ +#include "\z\ace\addons\compat_rhs_usf3\script_component.hpp" +#undef COMPONENT +#define COMPONENT compat_rhs_usf3_sub + +class CfgPatches { + class ADDON { + name = COMPONENT_NAME; + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_compat_rhs_usf3"}; + author = ECSTRING(common,ACETeam); + url = ECSTRING(main,URL); + VERSION_CONFIG; + }; +}; + +class CfgWeapons { + class arifle_MX_Base_F; + class rhs_weap_m4_Base: arifle_MX_Base_F { + class M203_GL; + class M320_GL: M203_GL { + magazines[] += {"ACE_HuntIR_M203"}; + }; + }; +}; diff --git a/tools/publish.py b/tools/publish.py index 894a79720c..02ed225d82 100644 --- a/tools/publish.py +++ b/tools/publish.py @@ -107,7 +107,7 @@ def main(argv): #ACE Main - http://steamcommunity.com/sharedfiles/filedetails/?id=463939057 - # publishFolder(ace_release_dir, "463939057", changelog_path) + # Note: command line publisher doesn't like our file structure, just upload this one manually @@ -115,10 +115,14 @@ def main(argv): folder = buildCompatFolder("@ace_compat_rhs_usf3", ["ace_compat_rhs_usf3.*"]) publishFolder(folder, "773125288", changelog_path) - #RHS Compat Commies - http://steamcommunity.com/sharedfiles/filedetails/?id=773131200 + #RHS Compat Russians - http://steamcommunity.com/sharedfiles/filedetails/?id=773131200 folder = buildCompatFolder("@ace_compat_rhs_afrf3", ["ace_compat_rhs_afrf3.*"]) publishFolder(folder, "773131200", changelog_path) + #RHS Compat GREF - http://steamcommunity.com/sharedfiles/filedetails/?id=884966711 + folder = buildCompatFolder("@ace_compat_rhs_gref3", ["ace_compat_rhs_gref3.*"]) + publishFolder(folder, "884966711", changelog_path) + #ADR97 (p90)- http://steamcommunity.com/sharedfiles/filedetails/?id=773136286 folder = buildCompatFolder("@ace_adr97_compat", ["ace_compat_adr_97.*"]) publishFolder(folder, "773136286", changelog_path)
2017's first #ACE3 release: v3.9.0Change log and download: https://t.co/NX6chXO3thSteam and PwS will follow shortly (hopefully) :)~bux— ACE3Mod (@ACE3Mod) February 14, 2017
2017's first #ACE3 release: v3.9.0Change log and download: https://t.co/NX6chXO3thSteam and PwS will follow shortly (hopefully) :)~bux
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.